{"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/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-charts/src/sparkline/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-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-inputs/src/input/input.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/dialog/dialog.js","../node_modules/@syncfusion/ej2-popups/src/tooltip/tooltip.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-inputs/src/color-picker/color-picker.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/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/general/enum.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/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-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/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/context-menu/context-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/datepicker-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/keyboard.js","../node_modules/@syncfusion/ej2-pivotview/src/common/popups/context-menu.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/base/pivotview.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/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","../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/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/rich-text-editor/actions/color-picker.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/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/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/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/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","../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]);\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);\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 var _this = _super.call(this, options, element) || this;\n _this.fixedParent = false;\n return _this;\n }\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Popup.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'zIndex':\n setStyleAttribute(this.element, { 'zIndex': newProp.zIndex });\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'position':\n case 'relateTo':\n this.refreshPosition();\n break;\n case 'offsetX':\n var x = newProp.offsetX - oldProp.offsetX;\n this.element.style.left = (parseInt(this.element.style.left, 10) + (x)).toString() + 'px';\n break;\n case 'offsetY':\n var y = newProp.offsetY - oldProp.offsetY;\n this.element.style.top = (parseInt(this.element.style.top, 10) + (y)).toString() + 'px';\n break;\n case 'content':\n this.setContent();\n break;\n case 'actionOnScroll':\n if (newProp.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n else {\n this.unwireScrollEvents();\n }\n break;\n }\n }\n };\n /**\n * gets the Component module name.\n * @private\n */\n Popup.prototype.getModuleName = function () {\n return 'popup';\n };\n /**\n * gets the persisted state properties of the Component.\n */\n Popup.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the control.\n */\n Popup.prototype.destroy = function () {\n this.element.classList.remove(CLASSNAMES.ROOT, CLASSNAMES.RTL);\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Popup.prototype.render = function () {\n this.element.classList.add(CLASSNAMES.ROOT);\n var styles = {};\n if (this.zIndex !== 1000) {\n styles.zIndex = this.zIndex;\n }\n if (this.width !== 'auto') {\n styles.width = formatUnit(this.width);\n }\n if (this.height !== 'auto') {\n styles.height = formatUnit(this.height);\n }\n setStyleAttribute(this.element, styles);\n this.setEnableRtl();\n this.setContent();\n this.wireEvents();\n };\n Popup.prototype.wireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.add(window, 'orientationchange', this.orientationOnChange, this);\n }\n if (this.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n };\n Popup.prototype.wireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollRefresh, this);\n }\n }\n };\n Popup.prototype.unwireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.remove(window, 'orientationchange', this.orientationOnChange);\n }\n if (this.actionOnScroll !== 'none') {\n this.unwireScrollEvents();\n }\n };\n Popup.prototype.unwireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollRefresh);\n }\n }\n };\n Popup.prototype.getRelateToElement = function () {\n var relateToElement = this.relateTo === '' || 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 = relateToElement.getBoundingClientRect();\n if (!rect.height || !rect.width) {\n return false;\n }\n if (scrollElement.getBoundingClientRect) {\n var parent_4 = scrollElement.getBoundingClientRect();\n return !(rect.bottom < parent_4.top) &&\n (!(rect.bottom > parent_4.bottom) &&\n (!(rect.right > parent_4.right) &&\n !(rect.left < parent_4.left)));\n }\n else {\n var win = window;\n var windowView = {\n top: win.scrollY,\n left: win.scrollX,\n right: win.scrollX + win.outerWidth,\n bottom: win.scrollY + win.outerHeight\n };\n var off = calculatePosition(relateToElement);\n var ele = {\n top: off.top,\n left: off.left,\n right: off.left + rect.width,\n bottom: off.top + rect.height\n };\n var elementView = {\n top: windowView.bottom - ele.top,\n left: windowView.right - ele.left,\n bottom: ele.bottom - windowView.top,\n right: ele.right - windowView.left\n };\n return elementView.top > 0\n && elementView.left > 0\n && elementView.right > 0\n && elementView.bottom > 0;\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n Popup.prototype.preRender = function () {\n //There is no event handler\n };\n Popup.prototype.setEnableRtl = function () {\n this.reposition();\n this.enableRtl ? this.element.classList.add(CLASSNAMES.RTL) : this.element.classList.remove(CLASSNAMES.RTL);\n };\n Popup.prototype.setContent = function () {\n if (!isNullOrUndefined(this.content)) {\n this.element.innerHTML = '';\n if (typeof (this.content) === 'string') {\n this.element.textContent = this.content;\n }\n else {\n this.element.appendChild(this.content);\n }\n }\n };\n Popup.prototype.orientationOnChange = function () {\n var _this = this;\n setTimeout(function () {\n _this.refreshPosition();\n }, 200);\n };\n /**\n * Based on the `relative` element and `offset` values, `Popup` element position will refreshed.\n */\n Popup.prototype.refreshPosition = function (target) {\n if (!isNullOrUndefined(target)) {\n this.checkFixedParent(target);\n }\n this.reposition();\n this.checkCollision();\n };\n Popup.prototype.reposition = function () {\n var pos;\n var relateToElement = this.getRelateToElement();\n if (typeof this.position.X === 'number' && typeof this.position.Y === 'number') {\n pos = { left: this.position.X, top: this.position.Y };\n }\n else if (relateToElement) {\n var display = this.element.style.display;\n this.element.style.display = 'block';\n pos = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY);\n this.element.style.display = display;\n }\n else {\n pos = { left: 0, top: 0 };\n }\n this.element.style.left = pos.left + 'px';\n this.element.style.top = pos.top + 'px';\n };\n Popup.prototype.getAnchorPosition = function (anchorEle, ele, position, offsetX, offsetY) {\n var eleRect = ele.getBoundingClientRect();\n var anchorRect = anchorEle.getBoundingClientRect();\n var anchor = anchorEle;\n var anchorPos = { left: 0, top: 0 };\n if (ele.offsetParent && ele.offsetParent.tagName === 'BODY' && anchorEle.tagName === 'BODY') {\n anchorPos = calculatePosition(anchorEle);\n }\n else {\n anchorPos = calculateRelativeBasedPosition(anchor, ele);\n }\n switch (position.X) {\n default:\n case 'left':\n break;\n case 'center':\n if (this.targetType === 'container') {\n anchorPos.left += (anchorRect.width / 2 - eleRect.width / 2);\n }\n else {\n anchorPos.left += (anchorRect.width / 2);\n }\n break;\n case 'right':\n if (this.targetType === 'container') {\n anchorPos.left += (anchorRect.width - eleRect.width);\n }\n else {\n anchorPos.left += (anchorRect.width);\n }\n break;\n }\n switch (position.Y) {\n default:\n case 'top':\n break;\n case 'center':\n if (this.targetType === 'container') {\n anchorPos.top += (anchorRect.height / 2 - eleRect.height / 2);\n }\n else {\n anchorPos.top += (anchorRect.height / 2);\n }\n break;\n case 'bottom':\n if (this.targetType === 'container') {\n anchorPos.top += (anchorRect.height - eleRect.height);\n }\n else {\n anchorPos.top += (anchorRect.height);\n }\n break;\n }\n anchorPos.left += offsetX;\n anchorPos.top += offsetY;\n return anchorPos;\n };\n Popup.prototype.callFlip = function (param) {\n var relateToElement = this.getRelateToElement();\n flip(this.element, relateToElement, this.offsetX, this.offsetY, this.position.X, this.position.Y, this.viewPortElement, param, this.fixedParent);\n };\n Popup.prototype.callFit = function (param) {\n if (isCollide(this.element, this.viewPortElement).length !== 0) {\n 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.element.getBoundingClientRect();\n var viewPortRect = this.viewPortElement.getBoundingClientRect();\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","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.length && !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)) {\n if (!isNullOrUndefined(fieldData[fields.iconCss])) {\n innerEle.push(createElement('span', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] }));\n }\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 if (fieldData.hasOwnProperty(fields.imageUrl)) {\n merge(attr, fieldData[fields.imageAttributes]);\n }\n prepend([createElement('img', { className: cssClass.image, attrs: attr })], li.firstElementChild);\n }\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) && !curOpt.template) {\n if (!isNullOrUndefined(fieldData[fields.iconCss])) {\n prepend([createElement('div', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] })], li.firstElementChild);\n }\n }\n if (innerEle.length) {\n prepend(innerEle, li.firstElementChild);\n }\n processSubChild(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 cusQuery = new Query().group(fields.groupBy);\n // need to remove once sorting issues fixed in DataManager\n cusQuery = addSorting(sortOrder, 'key', cusQuery);\n var ds = getDataSource(dataSource, cusQuery);\n dataSource = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n var grpItem = {};\n var hdr = 'isHeader';\n grpItem[fields.text] = ds[j].key;\n grpItem[hdr] = true;\n grpItem.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 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], fields);\n var curItem = dataSource[i];\n var isHeader = curItem.isHeader;\n var value = (typeof curItem === 'string' || typeof curItem === 'number') ? curItem : fieldData[fields.value];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreating(curData);\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], fields);\n value = fieldData[fields.value];\n }\n var li = createElement('li', {\n id: id + '-' + i,\n className: isHeader ? cssClass.group : cssClass.li, attrs: { role: 'presentation' }\n });\n if (isHeader) {\n li.innerText = fieldData[fields.text];\n }\n else {\n append(compiledString(curItem), li);\n li.setAttribute('data-value', value);\n li.setAttribute('role', 'option');\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n item: li,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreated(curData);\n }\n liCollection.push(li);\n }\n append(liCollection, ulElement);\n return ulElement;\n }\n ListBase.renderContentTemplate = renderContentTemplate;\n /**\n * Created header items from group template.\n * @param {string} template - that need to convert and generate li element.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {FieldsMapping} fields - Specifies fields for mapping the dataSource.\n * @param {Element[]} headerItems? - Specifies listbase header items.\n */\n function renderGroupTemplate(groupTemplate, groupDataSource, fields, headerItems) {\n var compiledString = compile(groupTemplate);\n var category = fields.groupBy;\n 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 if (element.firstElementChild.classList.contains(cssClass.textContent)) {\n element.firstElementChild.classList.add(cssClass.iconWrapper);\n }\n var expandElement = options.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', { className: 'e-icons ' + options.expandIconClass })], element.querySelector('.' + cssClass.textContent));\n }\n }\n function generateSingleLevelLI(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.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) {\n chart.element.appendChild(chart.svgObject);\n }\n chart.svgObject.appendChild(htmlObject);\n box = htmlObject.getBoundingClientRect();\n remove(htmlObject);\n if (!chart.delayRedraw) {\n remove(chart.svgObject);\n }\n return new Size((box.right - box.left), (box.bottom - box.top));\n}\n/** @private */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function logBase(value, base) {\n return Math.log(value) / Math.log(base);\n}\n/** @private */\nexport function showTooltip(text, x, y, areaWidth, id, element, isTouch) {\n //let id1: string = 'EJ2_legend_tooltip';\n var tooltip = document.getElementById(id);\n var width = measureText(text, {\n fontFamily: 'Segoe UI', size: '12px',\n fontStyle: 'Normal', fontWeight: 'Regular'\n }).width + 5;\n x = (x + width > areaWidth) ? x - width : x;\n if (!tooltip) {\n tooltip = createElement('div', {\n innerHTML: text,\n id: id,\n styles: 'top:' + (y + 15).toString() + 'px;left:' + (x + 15).toString() +\n 'px;background-color: rgb(255, 255, 255) !important; color:black !important; ' +\n 'position:absolute;border:1px solid rgb(112, 112, 112); padding-left : 3px; padding-right : 2px;' +\n 'padding-bottom : 2px; padding-top : 2px; font-size:12px; font-family: \"Segoe UI\"'\n });\n element.appendChild(tooltip);\n }\n else {\n tooltip.innerHTML = text;\n tooltip.style.top = (y + 15).toString() + 'px';\n tooltip.style.left = (x + 15).toString() + 'px';\n }\n if (isTouch) {\n setTimeout(function () { removeElement(id); }, 1500);\n }\n}\n/** @private */\nexport function inside(value, range) {\n return (value < range.max) && (value > range.min);\n}\n/** @private */\nexport function withIn(value, range) {\n return (value <= range.max) && (value >= range.min);\n}\n/** @private */\nexport function 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 * 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 axis.visibleLabels.push(new VisibleLabels(argsData.text, argsData.value, argsData.labelStyle));\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 = templateFn({ chart: chart, series: series, point: point });\n var len = templateElement.length;\n for (var i = 0; i < len; i++) {\n childElement.appendChild(templateElement[0]);\n }\n }\n }\n catch (e) {\n return childElement;\n }\n return childElement;\n}\n/** @private */\nexport function getFontStyle(font) {\n var style = '';\n style = 'font-size:' + font.size +\n '; font-style:' + font.fontStyle + '; font-weight:' + font.fontWeight +\n '; font-family:' + font.fontFamily + ';opacity:' + font.opacity +\n '; color:' + font.color + ';';\n return style;\n}\n/** @private */\nexport function measureElementRect(element) {\n var bounds;\n document.body.appendChild(element);\n bounds = element.getBoundingClientRect();\n removeElement(element.id);\n return bounds;\n}\n/** @private */\nexport function findlElement(elements, id) {\n var element;\n for (var i = 0, length_1 = elements.length; i < length_1; i++) {\n if (elements[i].id.indexOf(id) > -1) {\n element = elements[i];\n continue;\n }\n }\n return element;\n}\n/** @private */\nexport function getPoint(x, y, xAxis, yAxis, isInverted, series) {\n x = ((xAxis.valueType === 'Logarithmic') ? logBase(((x > 1) ? x : 1), xAxis.logBase) : x);\n y = ((yAxis.valueType === 'Logarithmic') ? logBase(((y > 1) ? y : 1), yAxis.logBase) : y);\n x = valueToCoefficient(x, xAxis);\n y = valueToCoefficient(y, yAxis);\n var xLength = (isInverted ? xAxis.rect.height : xAxis.rect.width);\n var yLength = (isInverted ? yAxis.rect.width : yAxis.rect.height);\n var locationX = isInverted ? y * (yLength) : x * (xLength);\n var locationY = isInverted ? (1 - x) * (xLength) : (1 - y) * (yLength);\n return new ChartLocation(locationX, locationY);\n}\n/** @private */\nexport function appendElement(child, parent) {\n if (child && child.hasChildNodes() && parent) {\n parent.appendChild(child);\n }\n else {\n return null;\n }\n}\n/** @private */\nexport function getDraggedRectLocation(x1, y1, x2, y2, outerRect) {\n var width = Math.abs(x1 - x2);\n var height = Math.abs(y1 - y2);\n var x = Math.max(checkBounds(Math.min(x1, x2), width, outerRect.x, outerRect.width), outerRect.x);\n var y = Math.max(checkBounds(Math.min(y1, y2), height, outerRect.y, outerRect.height), outerRect.y);\n return new Rect(x, y, Math.min(width, outerRect.width), Math.min(height, outerRect.height));\n}\n/** @private */\nexport function checkBounds(start, size, min, max) {\n if (start < min) {\n start = min;\n }\n else if ((start + size) > (max + min)) {\n start = (max + min) - size;\n }\n return start;\n}\n/** @private */\nexport function getLabelText(currentPoint, series, chart) {\n var labelFormat = series.yAxis.labelFormat;\n var text = [];\n var customLabelFormat = labelFormat.match('{value}') !== null;\n switch (series.seriesType) {\n case 'XY':\n text.push(currentPoint.text || currentPoint.yValue.toString());\n break;\n case 'HighLow':\n text.push(currentPoint.text || Math.max(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.min(currentPoint.high, currentPoint.low).toString());\n break;\n case 'HighLowOpenClose':\n text.push(currentPoint.text || Math.max(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.min(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.max(currentPoint.open, currentPoint.close).toString());\n text.push(currentPoint.text || Math.min(currentPoint.open, currentPoint.close).toString());\n break;\n case 'BoxPlot':\n text.push(currentPoint.text || currentPoint.median.toString());\n text.push(currentPoint.text || currentPoint.maximum.toString());\n text.push(currentPoint.text || currentPoint.minimum.toString());\n text.push(currentPoint.text || currentPoint.upperQuartile.toString());\n text.push(currentPoint.text || currentPoint.lowerQuartile.toString());\n for (var _i = 0, _a = currentPoint.outliers; _i < _a.length; _i++) {\n var liers = _a[_i];\n text.push(currentPoint.text || liers.toString());\n }\n break;\n }\n if (labelFormat && !currentPoint.text) {\n for (var i = 0; i < text.length; i++) {\n text[i] = customLabelFormat ? labelFormat.replace('{value}', series.yAxis.format(parseFloat(text[i]))) :\n series.yAxis.format(parseFloat(text[i]));\n }\n }\n return text;\n}\n/** @private */\nexport function stopTimer(timer) {\n window.clearInterval(timer);\n}\n/** @private */\nexport function isCollide(rect, collections, clipRect) {\n var isCollide;\n var currentRect = new Rect(rect.x + clipRect.x, rect.y + clipRect.y, rect.width, rect.height);\n isCollide = collections.some(function (rect) {\n return (currentRect.x < rect.x + rect.width && currentRect.x + currentRect.width > rect.x &&\n currentRect.y < rect.y + rect.height && currentRect.height + currentRect.y > rect.y);\n });\n return isCollide;\n}\n/** @private */\nexport function isOverlap(currentRect, rect) {\n return (currentRect.x < rect.x + rect.width && currentRect.x + currentRect.width > rect.x &&\n currentRect.y < rect.y + rect.height && currentRect.height + currentRect.y > rect.y);\n}\n/** @private */\nexport function containsRect(currentRect, rect) {\n return (currentRect.x <= rect.x && currentRect.x + currentRect.width >= rect.x + rect.width &&\n currentRect.y <= rect.y && currentRect.height + currentRect.y >= rect.y + rect.height);\n}\n/** @private */\nexport function calculateRect(location, textSize, margin) {\n return new Rect((location.x - (textSize.width / 2) - margin.left), (location.y - (textSize.height / 2) - margin.top), textSize.width + margin.left + margin.right, textSize.height + margin.top + margin.bottom);\n}\n/** @private */\nexport function convertToHexCode(value) {\n return '#' + componentToHex(value.r) + componentToHex(value.g) + componentToHex(value.b);\n}\n/** @private */\nexport function componentToHex(value) {\n var hex = value.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n}\n/** @private */\nexport function convertHexToColor(hex) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? new ColorValue(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) :\n new ColorValue(255, 255, 255);\n}\n/** @private */\nexport function colorNameToHex(color) {\n var element;\n color = color === 'transparent' ? 'white' : color;\n document.body.appendChild(createElement('text', { id: 'chartmeasuretext' }));\n element = document.getElementById('chartmeasuretext');\n element.style.color = color;\n color = window.getComputedStyle(element).color;\n element.remove();\n var exp = /^(rgb|hsl)(a?)[(]\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*(?:,\\s*([\\d.]+)\\s*)?[)]$/;\n var isRGBValue = exp.exec(color);\n return convertToHexCode(new ColorValue(parseInt(isRGBValue[3], 10), parseInt(isRGBValue[4], 10), parseInt(isRGBValue[5], 10)));\n}\n/** @private */\nexport function getSaturationColor(color, factor) {\n color = colorNameToHex(color);\n color = color.replace(/[^0-9a-f]/gi, '');\n if (color.length < 6) {\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n factor = factor || 0;\n // convert to decimal and change luminosity\n var rgb = '#';\n var colorCode;\n for (var i = 0; i < 3; i++) {\n colorCode = parseInt(color.substr(i * 2, 2), 16);\n colorCode = Math.round(Math.min(Math.max(0, colorCode + (colorCode * factor)), 255));\n rgb += ('00' + colorCode.toString(16)).substr(colorCode.toString(16).length);\n }\n return rgb;\n}\n/** @private */\nexport function getMedian(values) {\n var half = Math.floor(values.length / 2);\n return values.length % 2 ? values[half] : ((values[half - 1] + values[half]) / 2.0);\n}\n/** @private */\n// tslint:disable-next-line:max-func-body-length\nexport function calculateLegendShapes(location, size, shape, options) {\n var padding = 10;\n var path = '';\n var height = size.height;\n var width = size.width;\n var locX = location.x;\n var locY = location.y;\n switch (shape) {\n case 'MultiColoredLine':\n case 'Line':\n path = 'M' + ' ' + (locX + (-width / 2)) + ' ' + (locY) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY);\n merge(options, { 'd': path });\n break;\n case 'StepLine':\n options.fill = 'transparent';\n path = 'M' + ' ' + (locX + (-width / 2) - (padding / 4)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX +\n (-width / 2) + (width / 10)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX + (-width / 2) + (width / 10))\n + ' ' + (locY) + ' ' + 'L' + ' ' + (locX + (-width / 10)) + ' ' + (locY) + ' ' + 'L' + ' ' + (locX + (-width / 10))\n + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX + (width / 5)) + ' ' + (locY + (height / 2)) + ' ' + 'L' +\n ' ' + (locX + (width / 5)) + ' ' + (locY + (-height / 2)) + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY +\n (-height / 2)) + 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + '' + (locX + (width / 2)\n + (padding / 4)) + ' ' + (locY + (height / 2));\n merge(options, { 'd': path });\n break;\n case 'RightArrow':\n var space = 2;\n path = 'M' + ' ' + (locX + (-width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY) + ' ' + 'L' + ' ' +\n (locX + (-width / 2)) + ' ' + (locY + (height / 2)) + ' L' + ' ' + (locX + (-width / 2)) + ' ' +\n (locY + (height / 2) - space) + ' ' + 'L' + ' ' + (locX + (width / 2) - (2 * space)) + ' ' + (locY) +\n ' L' + (locX + (-width / 2)) + ' ' + (locY - (height / 2) + space) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'LeftArrow':\n options.fill = options.stroke;\n options.stroke = 'transparent';\n space = 2;\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (-width / 2)) + ' ' + (locY) + ' ' + 'L' + ' ' +\n (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' +\n (locX + (width / 2)) + ' ' + (locY + (height / 2) - space) + ' L' + ' ' + (locX + (-width / 2) + (2 * space))\n + ' ' + (locY) + ' L' + (locX + (width / 2)) + ' ' + (locY - (height / 2) + space) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Column':\n case 'StackingColumn':\n case 'StackingColumn100':\n case 'RangeColumn':\n 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 textElement(options, font, color, parent, isMinus) {\n if (isMinus === void 0) { isMinus = false; }\n var renderOptions = {};\n var htmlObject;\n var tspanElement;\n var renderer = new SvgRenderer('');\n var text;\n var height;\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine\n };\n text = typeof options.text === 'string' ? options.text : isMinus ? options.text[options.text.length - 1] : options.text[0];\n htmlObject = renderer.createText(renderOptions, text);\n if (typeof options.text !== 'string' && options.text.length > 1) {\n for (var i = 1, len = options.text.length; i < len; i++) {\n height = (measureText(options.text[i], font).height);\n tspanElement = renderer.createTSpan({\n 'x': options.x, 'id': options.id,\n 'y': (options.y) + ((isMinus) ? -(i * height) : (i * height))\n }, isMinus ? options.text[options.text.length - (i + 1)] : options.text[i]);\n htmlObject.appendChild(tspanElement);\n }\n }\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * Method to calculate the width and height of the chart\n */\nexport function calculateSize(chart) {\n var containerWidth = chart.element.clientWidth;\n var containerHeight = chart.element.clientHeight;\n 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(chartSize, leftPadding, rightPadding, titleStyle) {\n var positionX;\n if (titleStyle.textAlignment === 'Near') {\n positionX = leftPadding;\n }\n else if (titleStyle.textAlignment === 'Center') {\n positionX = chartSize.width / 2;\n }\n else {\n positionX = chartSize.width - rightPadding;\n }\n return positionX;\n}\n/**\n * Method to find new text and element size based on textOverflow\n */\nexport function textWrap(currentLabel, maximumWidth, font) {\n var textCollection = currentLabel.split(' ');\n var label = '';\n var labelCollection = [];\n var text;\n for (var i = 0, len = textCollection.length; i < len; i++) {\n text = textCollection[i];\n if (measureText(label.concat(text), font).width < maximumWidth) {\n label = label.concat((label === '' ? '' : ' ') + text);\n }\n else {\n if (label !== '') {\n labelCollection.push(textTrim(maximumWidth, label, font));\n label = text;\n }\n else {\n labelCollection.push(textTrim(maximumWidth, text, font));\n text = '';\n }\n }\n if (label && i === len - 1) {\n labelCollection.push(textTrim(maximumWidth, label, font));\n }\n }\n return labelCollection;\n}\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar StackValues = /** @class */ (function () {\n function StackValues(startValue, endValue) {\n this.startValues = startValue;\n this.endValues = endValue;\n }\n return StackValues;\n}());\nexport { StackValues };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect, rx, ry, transform, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity, dashArray) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n _this.rx = rx ? rx : 0;\n _this.ry = ry ? ry : 0;\n _this.transform = transform ? transform : '';\n return _this;\n }\n return RectOption;\n}(PathOption));\nexport { RectOption };\n/** @private */\nvar CircleOption = /** @class */ (function (_super) {\n __extends(CircleOption, _super);\n function CircleOption(id, fill, border, opacity, cx, cy, r) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.cy = cy;\n _this.cx = cx;\n _this.r = r;\n return _this;\n }\n return CircleOption;\n}(PathOption));\nexport { CircleOption };\n/** @private */\nvar PolygonOption = /** @class */ (function () {\n function PolygonOption(id, points, fill) {\n this.id = id;\n this.points = points;\n this.fill = fill;\n }\n return PolygonOption;\n}());\nexport { PolygonOption };\n/** @private */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/** @private */\nvar ChartLocation = /** @class */ (function () {\n function ChartLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return ChartLocation;\n}());\nexport { ChartLocation };\n/** @private */\nvar Thickness = /** @class */ (function () {\n function Thickness(left, right, top, bottom) {\n this.left = left;\n this.right = right;\n this.top = top;\n this.bottom = bottom;\n }\n return Thickness;\n}());\nexport { Thickness };\n/** @private */\nvar ColorValue = /** @class */ (function () {\n function ColorValue(r, g, b) {\n this.r = r;\n this.g = g;\n this.b = b;\n }\n return ColorValue;\n}());\nexport { ColorValue };\n/** @private */\nvar PointData = /** @class */ (function () {\n function PointData(point, series, index) {\n if (index === void 0) { index = 0; }\n this.point = point;\n this.series = series;\n this.lierIndex = index;\n }\n return PointData;\n}());\nexport { PointData };\n/** @private */\nvar AccPointData = /** @class */ (function () {\n function AccPointData(point, series, index) {\n if (index === void 0) { index = 0; }\n this.point = point;\n this.series = series;\n }\n return AccPointData;\n}());\nexport { AccPointData };\n/** @private */\nvar ControlPoints = /** @class */ (function () {\n function ControlPoints(controlPoint1, controlPoint2) {\n this.controlPoint1 = controlPoint1;\n this.controlPoint2 = controlPoint2;\n }\n return ControlPoints;\n}());\nexport { ControlPoints };\n","/**\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 } from '../../common/utils/helper';\nimport { seriesRender, pointRender } from '../../common/model/constants';\nimport { getSeriesColor } from '../../common/model/theme';\nimport { getElement, firstToLowerCase } from '../../common/utils/helper';\n/**\n * Annotation for accumulation series\n */\nvar AccumulationAnnotationSettings = /** @class */ (function (_super) {\n __extends(AccumulationAnnotationSettings, _super);\n function AccumulationAnnotationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AccumulationAnnotationSettings.prototype, \"content\", void 0);\n __decorate([\n Property('0')\n ], AccumulationAnnotationSettings.prototype, \"x\", void 0);\n __decorate([\n Property('0')\n ], AccumulationAnnotationSettings.prototype, \"y\", void 0);\n __decorate([\n Property('Pixel')\n ], AccumulationAnnotationSettings.prototype, \"coordinateUnits\", void 0);\n __decorate([\n Property('Chart')\n ], AccumulationAnnotationSettings.prototype, \"region\", void 0);\n __decorate([\n Property('Middle')\n ], AccumulationAnnotationSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], AccumulationAnnotationSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property(null)\n ], AccumulationAnnotationSettings.prototype, \"description\", void 0);\n return AccumulationAnnotationSettings;\n}(ChildProperty));\nexport { AccumulationAnnotationSettings };\n/**\n * Configures the dataLabel in accumulation chart.\n */\nvar AccumulationDataLabelSettings = /** @class */ (function (_super) {\n __extends(AccumulationDataLabelSettings, _super);\n function AccumulationDataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], AccumulationDataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], AccumulationDataLabelSettings.prototype, \"name\", void 0);\n __decorate([\n Property('transparent')\n ], AccumulationDataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('Inside')\n ], AccumulationDataLabelSettings.prototype, \"position\", void 0);\n __decorate([\n Property(5)\n ], AccumulationDataLabelSettings.prototype, \"rx\", void 0);\n __decorate([\n Property(5)\n ], AccumulationDataLabelSettings.prototype, \"ry\", void 0);\n __decorate([\n Complex({ width: null, color: null }, Border)\n ], AccumulationDataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ size: '11px', color: null }, Font)\n ], AccumulationDataLabelSettings.prototype, \"font\", void 0);\n __decorate([\n Complex({}, Connector)\n ], AccumulationDataLabelSettings.prototype, \"connectorStyle\", void 0);\n __decorate([\n Property(null)\n ], AccumulationDataLabelSettings.prototype, \"template\", void 0);\n return AccumulationDataLabelSettings;\n}(ChildProperty));\nexport { AccumulationDataLabelSettings };\n/**\n * Points model for the series.\n */\nvar AccPoints = /** @class */ (function () {\n function AccPoints() {\n this.visible = true;\n this.symbolLocation = null;\n /** @private */\n this.region = null;\n /** @private */\n this.labelRegion = null;\n /** @private */\n this.labelVisible = true;\n this.regions = null;\n }\n return AccPoints;\n}());\nexport { AccPoints };\n/**\n * Configures the series in accumulation chart.\n */\nvar AccumulationSeries = /** @class */ (function (_super) {\n __extends(AccumulationSeries, _super);\n function AccumulationSeries() {\n /**\n * Specifies the dataSource for the series. It can be an array of JSON objects or an instance of DataManager.\n * ```html\n *
\n * ```\n * ```typescript\n * let dataManager: DataManager = new DataManager({\n * url: 'http://mvc.syncfusion.com/Services/Northwnd.svc/Tasks/'\n * });\n * let query: Query = new Query().take(50).where('Estimate', 'greaterThan', 0, false);\n * let pie: AccumulationChart = new AccumulationChart({\n * ...\n * series: [{\n * dataSource: dataManager,\n * xName: 'Id',\n * yName: 'Estimate',\n * query: query\n * }],\n * ...\n * });\n * pie.appendTo('#Pie');\n * ```\n * @default ''\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.points = [];\n /** @private */\n _this.sumOfPoints = 0;\n /** @private */\n _this.isRectSeries = true;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n /** @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({\n result: dateSource, count: dateSource.length\n }, 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.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 }\n this.lastGroupTo = this.groupTo;\n if (this.sumOfClub > 0) {\n var clubPoint = new AccPoints();\n clubPoint.x = 'Others';\n clubPoint.y = this.sumOfClub;\n clubPoint.text = clubPoint.originalText = clubPoint.x + ': ' + this.sumOfClub;\n this.pushPoints(clubPoint, colors);\n }\n };\n /**\n * Method to set point index and color\n */\n AccumulationSeries.prototype.pushPoints = function (point, colors) {\n point.index = this.points.length;\n point.color = point.color || colors[point.index % colors.length];\n this.points.push(point);\n };\n /**\n * Method to find club point\n */\n AccumulationSeries.prototype.isClub = function (point, clubValue, 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.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) {\n var seriesGroup = accumulation.renderer.createGroup({ id: accumulation.element.id + '_Series_' + this.index });\n this.renderPoints(accumulation, seriesGroup);\n var datalabelGroup;\n if (accumulation.accumulationDataLabelModule && this.dataLabel.visible) {\n datalabelGroup = accumulation.renderer.createGroup({ id: accumulation.element.id + '_datalabel_Series_' + this.index });\n datalabelGroup.style.visibility =\n (this.animation.enable && accumulation.animateSeries && this.type === 'Pie') ? 'hidden' : 'visible';\n this.renderDataLabel(accumulation, datalabelGroup);\n }\n if (this.type === 'Pie') {\n this.findMaxBounds(this.labelBound, this.accumulationBound);\n accumulation.pieSeriesModule.animateSeries(accumulation, this.animation, this, seriesGroup);\n }\n if (accumulation.accumulationLegendModule) {\n this.labelBound.x -= accumulation.explodeDistance;\n this.labelBound.y -= accumulation.explodeDistance;\n this.labelBound.height += (accumulation.explodeDistance - this.labelBound.y);\n this.labelBound.width += (accumulation.explodeDistance - this.labelBound.x);\n }\n };\n /**\n * Method render the points elements for accumulation chart series.\n */\n AccumulationSeries.prototype.renderPoints = function (accumulation, seriesGroup) {\n var pointId = accumulation.element.id + '_Series_' + this.index + '_Point_';\n var option;\n for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n var point = _a[_i];\n var argsData = {\n cancel: false, name: pointRender, series: this, point: point, fill: point.color,\n border: this.isEmpty(point) ? { width: this.emptyPointSettings.border.width, color: this.emptyPointSettings.border.color } :\n { width: this.border.width, color: this.border.color }\n };\n accumulation.trigger(pointRender, argsData);\n point.color = argsData.fill;\n if (point.visible) {\n option = new PathOption(pointId + point.index, point.color, argsData.border.width || 1, argsData.border.color || point.color, 1, '', '');\n accumulation[(firstToLowerCase(this.type) + 'SeriesModule')].\n renderPoint(point, this, accumulation, option);\n seriesGroup.appendChild(accumulation.renderer.drawPath(option));\n }\n }\n accumulation.getSeriesElement().appendChild(seriesGroup);\n };\n /**\n * Method render the datalabel elements for accumulation chart.\n */\n AccumulationSeries.prototype.renderDataLabel = function (accumulation, datalabelGroup) {\n accumulation.accumulationDataLabelModule.findAreaRect();\n var element = createElement('div', {\n id: accumulation.element.id + '_Series_0' + '_DataLabelCollections'\n });\n for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (point.visible) {\n accumulation.accumulationDataLabelModule.renderDataLabel(point, this.dataLabel, datalabelGroup, this.points, this.index, element);\n }\n }\n if (this.dataLabel.template !== null && element.childElementCount) {\n getElement(accumulation.element.id + '_Secondary_Element').appendChild(element);\n }\n accumulation.getSeriesElement().appendChild(datalabelGroup);\n };\n /**\n * To find maximum bounds for smart legend placing\n * @private\n */\n AccumulationSeries.prototype.findMaxBounds = function (totalbound, bound) {\n totalbound.x = bound.x < totalbound.x ? bound.x : totalbound.x;\n totalbound.y = bound.y < totalbound.y ? bound.y : totalbound.y;\n totalbound.height = (bound.y + bound.height) > totalbound.height ? (bound.y + bound.height) : totalbound.height;\n totalbound.width = (bound.x + bound.width) > totalbound.width ? (bound.x + bound.width) : totalbound.width;\n };\n /**\n * To set empty point value for null points\n * @private\n */\n AccumulationSeries.prototype.setAccEmptyPoint = function (point, i, data, colors) {\n if (!isNullOrUndefined(point.y)) {\n return null;\n }\n point.color = this.emptyPointSettings.fill || point.color;\n switch (this.emptyPointSettings.mode) {\n case 'Zero':\n point.y = 0;\n point.visible = true;\n break;\n case 'Average':\n var previous = data[i - 1] ? (data[i - 1][this.yName] || 0) : 0;\n var next = data[i + 1] ? (data[i + 1][this.yName] || 0) : 0;\n point.y = (Math.abs(previous) + Math.abs(next)) / 2;\n this.sumOfPoints += point.y;\n point.visible = true;\n break;\n 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","/**\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})();\nimport { SvgRenderer, createElement, remove } from '@syncfusion/ej2-base';\n/**\n * Sparkline control helper file\n */\n/**\n * sparkline internal use of `Size` type\n * @private\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/**\n * To find number from string\n * @private\n */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Method to calculate the width and height of the 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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Specifies Circular-Gauge Helper methods\n */\nimport { SvgRenderer, compile as templateComplier } from '@syncfusion/ej2-base';\nimport { merge } from '@syncfusion/ej2-base';\nimport { createElement, remove, setStyleAttribute } from '@syncfusion/ej2-base';\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns Size\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('gauge-measuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'gauge-measuretext' });\n document.body.appendChild(htmlObject);\n }\n var style = 'position: absolute; visibility: hidden;' +\n ';left: 0; top: -100; white-space: nowrap;' + getFontStyle(font);\n htmlObject.innerHTML = text;\n htmlObject.setAttribute('style', style);\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Function to find number from string\n * * @returns number\n * @private\n */\nexport function toPixel(value, maxDimension) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (maxDimension / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Function to get the style from FontModel.\n * @returns string\n * @private\n */\nexport function getFontStyle(font) {\n var style = '';\n style = 'font-size:' + font.size +\n '; font-style:' + font.fontStyle + '; font-weight:' + font.fontWeight +\n '; font-family:' + font.fontFamily + ';opacity:' + font.opacity +\n '; color:' + font.color + ';';\n return style;\n}\n/**\n * Function to set style to the element.\n * @private\n */\nexport function setStyles(element, fill, border) {\n setStyleAttribute(element, {\n 'stroke': border.color, 'stroke-width': border.width,\n 'fill': fill\n });\n}\n/**\n * Function to measure the element rect.\n * @returns ClientRect\n * @private\n */\nexport function measureElementRect(element) {\n var bounds;\n document.body.appendChild(element);\n bounds = element.getBoundingClientRect();\n removeElement(element.id);\n return bounds;\n}\n/**\n * Function to convert the number from string.\n * @returns number\n * @private\n */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Function to create the text element.\n * @returns Element\n * @private\n */\nexport function textElement(options, font, color, parent, styles) {\n var renderOptions = {};\n var htmlObject;\n var renderer = new SvgRenderer('');\n var style = styles + ' font-size:' + font.size + '; font-style:' + font.fontStyle +\n ' ; font-weight:' + font.fontWeight + '; font-family:' + font.fontFamily + ';';\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine,\n 'style': style\n };\n htmlObject = renderer.createText(renderOptions, options.text);\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * Function to append the path to the element.\n * @returns Element\n * @private\n */\nexport function appendPath(options, element, gauge, functionName) {\n functionName = functionName ? functionName : 'Path';\n var htmlObject = gauge.renderer['draw' + functionName](options);\n htmlObject.setAttribute('transform', options.transform);\n htmlObject.setAttribute('style', options.style);\n element.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * Function to calculate the sum of array values.\n * @returns number\n * @private\n */\nexport function calculateSum(from, to, values) {\n var sum = 0;\n var length = values.length;\n for (; from < length; from++) {\n sum += values[from];\n }\n return sum;\n}\n/**\n * Function to calculate the value for linear animation effect\n * @param currentTime\n * @param startValue\n * @param endValue\n * @param duration\n * @private\n */\nexport function linear(currentTime, startValue, endValue, duration) {\n return -endValue * Math.cos(currentTime / duration * (Math.PI / 2)) + endValue + startValue;\n}\n/**\n * Function to get the angle from value for circular gauge.\n * @returns number\n * @private\n */\nexport function getAngleFromValue(value, maximumValue, minimumValue, startAngle, endAngle, isClockWise) {\n var angle;\n endAngle -= isCompleteAngle(startAngle, endAngle) ? 0.0001 : 0;\n startAngle -= 90;\n endAngle -= 90;\n if (isClockWise) {\n angle = ((value - minimumValue) * (getDegree(startAngle, endAngle) / (maximumValue - minimumValue))) + startAngle;\n }\n else {\n angle = endAngle - ((value - minimumValue) * (getDegree(startAngle, endAngle) / (maximumValue - minimumValue)));\n angle = angle < 0 ? 360 + angle : angle;\n }\n angle = Math.round(angle) >= 360 ? (angle - 360) : Math.round(angle) < 0 ? (360 + angle) : angle;\n return angle;\n}\n/**\n * Function to get the degree for circular gauge.\n * @returns number\n * @private\n */\nexport function getDegree(startAngle, endAngle) {\n var degree = endAngle - startAngle;\n return degree < 0 ? (degree + 360) : degree;\n}\n/**\n * Function to get the value from angle for circular gauge.\n * @returns number\n * @private\n */\nexport function getValueFromAngle(angle, maximumValue, minimumValue, startAngle, endAngle, isClockWise) {\n endAngle -= isCompleteAngle(startAngle, endAngle) ? 0.0001 : 0;\n angle = angle < startAngle ? (angle + 360) : angle;\n if (isClockWise) {\n return (((angle - startAngle) / getDegree(startAngle, endAngle)) * (maximumValue - minimumValue)) + minimumValue;\n }\n else {\n return maximumValue - ((((angle - startAngle) / getDegree(startAngle, endAngle)) * (maximumValue - minimumValue)) + minimumValue);\n }\n}\n/**\n * Function to check whether it's a complete circle for circular gauge.\n * @returns boolean\n * @private\n */\nexport function isCompleteAngle(startAngle, endAngle) {\n var totalAngle = endAngle - startAngle;\n totalAngle = totalAngle <= 0 ? (totalAngle + 360) : totalAngle;\n return Math.floor(totalAngle / 360) !== 0;\n}\n/**\n * Function to get angle from location for circular gauge.\n * @returns number\n * @private\n */\nexport function getAngleFromLocation(center, point) {\n var angle = Math.atan2((point.y - center.y), (point.x - center.x));\n angle = Math.round((angle < 0 ? (6.283 + angle) : angle) * (180 / Math.PI)) - 270;\n angle += angle < 0 ? 360 : 0;\n return angle;\n}\n/**\n * Function to get the location from angle for circular gauge.\n * @returns GaugeLocation\n * @private\n */\nexport function getLocationFromAngle(degree, radius, center) {\n var radian = (degree * Math.PI) / 180;\n return new GaugeLocation(Math.cos(radian) * radius + center.x, Math.sin(radian) * radius + center.y);\n}\n/**\n * Function to get the path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getPathArc(center, start, end, radius, startWidth, endWidth) {\n end -= isCompleteAngle(start, end) ? 0.0001 : 0;\n var degree = getDegree(start, end);\n var startRadius = radius - startWidth;\n var endRadius = radius - endWidth;\n var arcRadius = radius - ((startWidth + endWidth) / 2);\n if (startWidth !== undefined && endWidth !== undefined) {\n return getRangePath(getLocationFromAngle(start, radius, center), getLocationFromAngle(end, radius, center), getLocationFromAngle(start, startRadius, center), getLocationFromAngle(end, endRadius, center), radius, arcRadius, arcRadius, (degree < 180) ? 0 : 1);\n }\n else {\n return getCirclePath(getLocationFromAngle(start, radius, center), getLocationFromAngle(end, radius, center), radius, (degree < 180) ? 0 : 1);\n }\n}\n/**\n * Function to get the range path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getRangePath(start, end, innerStart, innerEnd, radius, startRadius, endRadius, clockWise) {\n return 'M ' + start.x + ' ' + start.y +\n ' A ' + radius + ' ' + radius + ' 0 ' +\n clockWise + ' 1 ' + end.x + ' ' + end.y +\n ' L ' + innerEnd.x + ' ' + innerEnd.y +\n ' A ' + endRadius + ' ' + startRadius + ' 0 ' +\n clockWise + ' 0 ' + innerStart.x + ' ' + innerStart.y + ' Z';\n}\n/**\n * Function to calculate the complete path arc of the circular gauge.\n * @returns string\n * @private\n */\nexport function getCompleteArc(center, start, end, radius, innerRadius) {\n end -= isCompleteAngle(start, end) ? 0.0001 : 0;\n var degree = getDegree(start, end);\n return getCompletePath(center, getLocationFromAngle(start, radius, center), getLocationFromAngle(end, radius, center), radius, getLocationFromAngle(start, innerRadius, center), getLocationFromAngle(end, innerRadius, center), innerRadius, (degree < 180) ? 0 : 1);\n}\n/**\n * Function to get the circular path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getCirclePath(start, end, radius, clockWise) {\n return 'M ' + start.x + ' ' + start.y + ' A ' + radius + ' ' +\n radius + ' 0 ' + clockWise + ' 1 ' + end.x + ' ' + end.y;\n}\n/**\n * Function to get the complete path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getCompletePath(center, start, end, radius, innerStart, innerEnd, innerRadius, clockWise) {\n return 'M ' + start.x + ' ' + start.y + ' A ' + radius + ' ' + radius + ' 0 ' + clockWise +\n ' 1 ' + end.x + ' ' + end.y + ' L ' + innerEnd.x + ' ' + innerEnd.y + ' A ' + innerRadius +\n ' ' + innerRadius + ' 0 ' + clockWise + ',0 ' + innerStart.x + ' ' + innerStart.y + ' Z';\n}\n/**\n * Function to get element from id.\n * @returns Element\n * @private\n */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/**\n * Function to compile the template function for circular gauge.\n * @returns Function\n * @private\n */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/**\n * Function to remove the element from id.\n * @private\n */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/**\n * Function to get current point for circular gauge using element id.\n * @returns IVisiblePointer\n * @private\n */\nexport function getPointer(targetId, gauge) {\n var tempString;\n tempString = targetId.split(gauge.element.id + '_Axis_')[1];\n return {\n axisIndex: +tempString[0],\n pointerIndex: +tempString[tempString.length - 1]\n };\n}\n/**\n * Function to convert the label using formar for cirular gauge.\n * @returns string\n * @private\n */\nexport function getLabelFormat(format) {\n var customLabelFormat = format && format.match('{value}') !== null;\n var skeleton = customLabelFormat ? '' : format;\n return skeleton;\n}\n/**\n * Function to calculate the marker shape for circular gauge.\n * @returns PathOption\n * @private\n */\nexport function calculateShapes(location, shape, size, url, options) {\n var path;\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + ' ' + (locX - height) + ' ' + (locY - (width / 2)) +\n 'L' + ' ' + (locX - height) + ' ' + (locY + (width / 2)) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + ' ' + (locX + height) + ' ' + (locY - (width / 2)) +\n 'L' + ' ' + (locX + height) + ' ' + (locY + (width / 2)) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Image':\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n return options;\n}\n/**\n * Function to get range color from value for circular gauge.\n * @returns string\n * @private\n */\nexport function getRangeColor(value, ranges, color) {\n var min = 0;\n var max = 0;\n var currentRange = ranges.filter(function (range) {\n min = Math.min(range.start, range.end);\n max = Math.max(range.start, range.end);\n return (value >= min && max >= value);\n });\n return currentRange.length ? currentRange[0].rangeColor : color;\n}\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d, transform, style) {\n if (transform === void 0) { transform = ''; }\n if (style === void 0) { style = ''; }\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n _this.transform = transform;\n _this.style = style;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect) {\n var _this = _super.call(this, id) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = border.color;\n _this['stroke-width'] = border.width;\n return _this;\n }\n return RectOption;\n}(CustomizeOption));\nexport { RectOption };\n/**\n * Internal class size\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar GaugeLocation = /** @class */ (function () {\n function GaugeLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return GaugeLocation;\n}());\nexport { GaugeLocation };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nvar VisibleLabels = /** @class */ (function () {\n function VisibleLabels(text, value, size) {\n this.text = text;\n this.value = value;\n this.size = size;\n }\n return VisibleLabels;\n}());\nexport { VisibleLabels };\n","/**\n * 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 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 collection.push({ command: char, x: ob[1], y: ob[2] });\n break;\n case 'l':\n case 't':\n collection.push({ command: char, x: ob[1], y: ob[2] });\n break;\n case 'h':\n collection.push({ command: char, x: ob[1] });\n break;\n case 'v':\n collection.push({ command: char, y: ob[1] });\n break;\n case 'z':\n collection.push({ command: char });\n break;\n case 'c':\n collection.push({ command: char, x1: ob[1], y1: ob[2], x2: ob[3], y2: ob[4], x: ob[5], y: ob[6] });\n break;\n case 's':\n collection.push({ command: char, x2: ob[1], y2: ob[2], x: ob[3], y: ob[4] });\n break;\n case 'q':\n collection.push({ command: char, x1: ob[1], y1: ob[2], x: ob[3], y: ob[4] });\n break;\n case 'a':\n var l = ob[4];\n var s = ob[5];\n collection.push({ command: char, r1: ob[1], r2: ob[2], angle: ob[3], largeArc: l, sweep: s, x: ob[6], y: ob[7] });\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 behavior 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';\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, srcNode.corners, 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 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 if (sourceNode !== undefined && targetNode !== undefined) {\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, source.corners, sourceNode.bounds, false);\n }\n if (targetPort !== undefined) {\n var tarPortPt = { x: targetPort.offsetX, y: targetPort.offsetY };\n target.direction = getPortDirection(tarPortPt, target.corners, 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.topCenter.y > target.corners.bottomCenter.y &&\n Math.abs(source.corners.topCenter.y - target.corners.bottomCenter.y) >\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.bottomCenter.y < target.corners.topCenter.y &&\n Math.abs(source.corners.bottomCenter.y - target.corners.topCenter.y) >\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.middleRight.x < target.corners.middleLeft.x &&\n Math.abs(source.corners.middleRight.x - target.corners.middleLeft.x) >\n (source.margin.right + source.margin.left)) {\n source.direction = source.direction ? source.direction : 'Right';\n target.direction = target.direction ? target.direction : 'Left';\n }\n else if (source.corners.middleLeft.x > target.corners.middleRight.x &&\n Math.abs(source.corners.middleLeft.x - target.corners.middleRight.x) >\n (source.margin.left + source.margin.right)) {\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 && (!source.corners.equals(source.corners, target.corners)) &&\n target.corners.containsPoint(source.corners.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 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 element.segments[0].points = intermeditatePoints = orthoConnection3Segment(element, source, target);\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, source.corners, element.sourceWrapper.bounds, false);\n if (source.corners && (source.direction === 'Bottom' || source.direction === 'Top')) {\n if (target.point.x > source.corners.middleLeft.x && target.point.x < source.corners.middleRight.x) {\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.topCenter.y && target.point.y < source.corners.bottomCenter.y) {\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.topCenter.y\n && source.point.y <= source.corners.center.y) &&\n (target.point.y >= source.corners.topCenter.y && target.point.y <= source.corners.center.y)) {\n source.direction = 'Top';\n length_1 = source.point.y - source.corners.topCenter.y + 20;\n }\n else if ((portdirection === 'Left' || portdirection === 'Right') && (source.point.y > source.corners.center.y\n && source.point.y <= source.corners.bottomCenter.y) &&\n (target.point.y > source.corners.center.y && target.point.y <= source.corners.bottomCenter.y)) {\n source.direction = 'Bottom';\n length_1 = source.corners.bottomCenter.y - source.point.y + 20;\n }\n else if ((portdirection === 'Top' || portdirection === 'Bottom') && (source.point.x >= source.corners.middleLeft.x\n && source.point.x <= source.corners.center.x) &&\n (target.point.x >= source.corners.middleLeft.x && target.point.x <= source.corners.center.x)) {\n source.direction = 'Left';\n length_1 = source.point.x - source.corners.middleLeft.x + 20;\n }\n else if ((portdirection === 'Top' || portdirection === 'Bottom') && (source.point.x <= source.corners.middleRight.x\n && source.point.x > source.corners.center.x) &&\n (target.point.x <= source.corners.middleRight.x && target.point.x < source.corners.center.x)) {\n source.direction = 'Right';\n length_1 = source.corners.middleRight.x - 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.middleLeft.x <= source.point.x && source.point.x <= target.corners.middleRight.x))) {\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.topCenter.y)) {\n direction = 'Top';\n length = (source.point.y - target.corners.topCenter.y) + 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.bottomCenter.y)) {\n direction = 'Bottom';\n length = (target.corners.bottomCenter.y - source.point.y) + 20;\n }\n else if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n source.corners.topCenter.y <= source.point.y && source.point.y <= source.corners.bottomCenter.y) {\n direction = source.direction;\n length = (source.point.y > target.point.y) ? (source.point.y - source.corners.topCenter.y + 20) :\n (source.corners.bottomCenter.y - source.point.y + 20);\n }\n }\n else {\n if (target.corners.center.x === source.point.x &&\n (!(target.corners.topCenter.y < source.point.y && source.point.y <= target.corners.bottomCenter.y))) {\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.middleLeft.x)) {\n direction = 'Left';\n length = (source.point.x - target.corners.middleLeft.x) + 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.middleRight.x)) {\n direction = 'Right';\n length = (target.corners.middleRight.x - source.point.x) + 20;\n }\n else if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n source.corners.middleLeft.x <= source.point.x && source.point.x <= source.corners.middleRight.x) {\n direction = source.direction;\n length = (source.point.x > target.point.x) ? (source.point.x - source.corners.middleLeft.x + 20) :\n (source.corners.middleRight.x - 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.topCenter.y &&\n source.point.y <= source.corners.bottomCenter.y)\n || (((portDir === 'Bottom' && source.point.y > target.point.y) ||\n (portDir === 'Top' && source.point.y < target.point.y)) &&\n source.point.x >= source.corners.middleLeft.x && source.point.x <= source.corners.middleRight.x)) {\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.topCenter.y > source.point.y && target.corners.bottomCenter.y < 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.topCenter.y < 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.bottomCenter.y < 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.middleLeft.x && source.point.x <= source.corners.middleRight.x)) {\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.topCenter.y &&\n source.point.y <= source.corners.bottomCenter.y)) {\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.topCenter.y <= source.point.y\n && target.corners.bottomCenter.y >= 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.middleLeft.x &&\n source.point.x <= source.corners.middleRight.x) || (((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.topCenter.y && source.point.y <= source.corners.bottomCenter.y))) {\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.middleLeft.x &&\n source.point.x < target.corners.middleRight.x) {\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.topCenter.y && source.point.y <= source.corners.bottomCenter.y) ||\n (((portDir === 'Top' && source.point.y < target.point.y)) &&\n (source.point.x >= source.corners.middleLeft.x && source.point.x <= source.corners.middleRight.x)))) {\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.middleLeft.x &&\n target.corners.middleRight.x > source.point.x) {\n if (source.point.y < target.point.y && source.point.x > target.corners.middleLeft.x &&\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.middleRight.x &&\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, source.corners, 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.topCenter.y &&\n source.point.y <= source.corners.bottomCenter.y) || (target.direction === 'Bottom' && source.point.y < target.point.y &&\n (source.point.x >= source.corners.middleLeft.x && source.point.x <= source.corners.middleRight.x)))) {\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.topCenter.y <= source.point.y && target.corners.bottomCenter.y >= 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.middleLeft.x <= source.point.x && target.corners.middleRight.x >= 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.topCenter.y && source.point.y <= source.corners.bottomCenter.y)\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.bottomCenter.y - source.point.y + 20) :\n (source.point.y - source.corners.topCenter.y + 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.middleLeft.x && source.point.x <= source.corners.middleRight.x) &&\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.middleRight.x - source.point.x + 20) :\n (source.point.x - source.corners.middleLeft.x + 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.middleLeft.x + 20) :\n (source.corners.middleRight.x - source.point.x + 20);\n }\n else {\n length = (source.direction === 'Top') ? (source.point.y - source.corners.topCenter.y + 20) :\n (source.corners.bottomCenter.y - 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, sourceNode.corners, 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 direction = getPortDirection(port, sourceNode.corners, sourceNode.bounds, false);\n var seg = element.segments[0];\n if (seg.direction !== direction) {\n pointsFromNodeToPoint(seg, direction, sourceNode.corners, 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 = findEndPoint(source.direction, nodeConnectingPoint, node);\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/* 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 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(source.corners, source.direction);\n refPoint = findEndPoint(source.direction, source.point, sourceEle);\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(target.corners, target.direction);\n refPoint = findEndPoint(target.direction, target.point, targetEle);\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, source.corners, 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.middleLeft.x && target.point.x <= source.corners.middleRight.x &&\n source.point.y >= source.corners.topCenter.y && source.point.y <= source.corners.bottomCenter.y) {\n source.direction = (target.point.y > source.point.y) ? 'Bottom' : 'Top';\n var length_2 = (source.direction === 'Top') ? (source.point.y - source.corners.topCenter.y + 20) :\n (source.corners.bottomCenter.y - 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.topCenter.y\n && source.point.y <= source.corners.bottomCenter.y)) {\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.middleLeft.x\n && source.point.x <= source.corners.middleRight.x)) {\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.bottomCenter.y - source.point.y + 20) :\n (source.point.y - source.corners.topCenter.y + 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 (ele.targetWrapper.corners.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.bottomCenter.y) {\n segment.points[segment.points.length - 1].y = target.corners.bottomCenter.y + 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.topCenter.y) {\n segment.points[segment.points.length - 1].y = target.corners.topCenter.y - 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.middleLeft.x) {\n segment.points[segment.points.length - 1].x = target.corners.middleLeft.x - 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.middleRight.x) {\n segment.points[segment.points.length - 1].x = target.corners.middleRight.x + 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 = node.corners;\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 = findEndPoint(target.direction, target.point, node);\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}\nfunction 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}\nfunction 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 if (ele.type === 'Orthogonal') {\n var constValue = Math.abs(child.bounds.height - child.actualSize.height) / 2 + 5;\n if (sPt.x === tPt.x) {\n if (sPt.y < tPt.y) {\n sPt.y -= constValue;\n }\n else {\n sPt.y += constValue;\n }\n }\n constValue = Math.abs(child.bounds.width - child.actualSize.width) / 2 + 5;\n if (sPt.y === tPt.y) {\n if (sPt.x < tPt.x) {\n sPt.x -= constValue;\n }\n else {\n sPt.x += constValue;\n }\n }\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) || ((isTar) ? tPt : 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 findEndPoint(direction, point, node) {\n var targetPoint;\n switch (direction) {\n case 'Bottom':\n targetPoint = { x: point.x, y: point.y - Math.max(node.actualSize.width, node.actualSize.height) };\n break;\n case 'Top':\n targetPoint = { x: point.x, y: point.y + Math.max(node.actualSize.width, node.actualSize.height) };\n break;\n case 'Right':\n targetPoint = { y: point.y, x: point.x - Math.max(node.actualSize.width, node.actualSize.height) };\n break;\n case 'Left':\n targetPoint = { y: point.y, x: point.x + Math.max(node.actualSize.width, node.actualSize.height) };\n break;\n }\n return targetPoint;\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.bottomCenter.y + margin < target.corners.topCenter.y - margin ||\n source.corners.topCenter.y - margin > target.corners.bottomCenter.y + 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.middleRight.x < target.corners.middleLeft.x\n || (swap && source.corners.middleRight.x < target.corners.middleLeft.x))) {\n pts = NoOfSegments.One;\n }\n else if (source.corners.middleRight.x + source.margin.right < target.corners.middleLeft.x - target.margin.left) {\n pts = NoOfSegments.Three;\n }\n else if (element.sourceWrapper !== element.targetWrapper &&\n (source.corners.containsPoint(left) || target.corners.containsPoint(right))) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.bottomCenter.y <= target.corners.topCenter.y) {\n pts = NoOfSegments.Five;\n }\n else if (source.corners.topCenter.y >= target.corners.topCenter.y) {\n pts = NoOfSegments.Five;\n }\n else if ((srcPort !== undefined && srcPort.offsetY <= target.corners.topCenter.y) ||\n (srcPort === undefined && source.corners.middleRight.y <= target.corners.topCenter.y)) {\n pts = NoOfSegments.Five;\n }\n else if ((srcPort !== undefined && srcPort.offsetY >= target.corners.bottomCenter.y) ||\n (srcPort === undefined && source.corners.middleRight.y >= target.corners.bottomCenter.y)) {\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.middleRight.x >= targetObj.corners.middleRight.x) {\n if ((sourcePort !== undefined && (sourcePort.offsetY < targetObj.corners.topCenter.y ||\n sourcePort.offsetY > targetObj.corners.bottomCenter.y)) ||\n (sourcePort === undefined && sourceObj.corners.middleRight.y < targetObj.corners.topCenter.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((sourcePort !== undefined && sourcePort.offsetY > targetObj.corners.bottomCenter.y + targetObj.margin.bottom\n && sourceObj.corners.topCenter.y > targetObj.corners.bottomCenter.y) ||\n (sourcePort === undefined && sourceObj.corners.middleRight.y > targetObj.corners.bottomCenter.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((sourcePort !== undefined && sourcePort.offsetY < targetObj.corners.topCenter.y\n && sourceObj.corners.bottomCenter.y > targetObj.corners.topCenter.y) ||\n (sourcePort === undefined && sourceObj.corners.middleRight.y > targetObj.corners.bottomCenter.y)) {\n pts = NoOfSegments.Three;\n }\n else if (sourceObj.corners.middleRight.x < targetObj.corners.middleLeft.x ||\n targetObj.corners.middleRight.x < sourceObj.corners.middleLeft.x) {\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.bottomCenter.y < tarPort.offsetY) ||\n (tarPort === undefined && sourceObj.corners.bottomCenter.y < targetObj.corners.middleRight.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((tarPort !== undefined && sourceObj.corners.topCenter.y > tarPort.offsetY) ||\n (tarPort === undefined && sourceObj.corners.topCenter.y > targetObj.corners.middleRight.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((tarPort !== undefined && ((sourcePort !== undefined && sourcePort.offsetX < targetObj.corners.middleLeft.x &&\n sourcePort.offsetX !== tarPort.offsetX && sourcePort.offsetY !== tarPort.offsetY &&\n (Math.abs(sourceObj.corners.middleRight.x - targetObj.corners.middleLeft.x) <= 20)) ||\n (sourcePort === undefined && sourceObj.corners.middleRight.x < targetObj.corners.middleLeft.x &&\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.middleRight.x < targetObj.corners.middleLeft.x) {\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.topCenter.y - target.margin.top) ||\n (srcPort === undefined && source.corners.bottomCenter.y < target.corners.topCenter.y - target.margin.top)) {\n if (source.corners.bottomCenter.y < target.corners.topCenter.y) {\n if ((tarPort !== undefined && source.corners.middleRight.x + source.margin.right < tarPort.offsetX) ||\n (tarPort === undefined && source.corners.middleRight.x + 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.middleLeft.x > tarPort.offsetX) ||\n (tarPort === undefined && source.corners.middleLeft.x > 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.middleRight.x - target.corners.middleLeft.x) <= 25 &&\n Math.abs(srcPort.offsetY - target.corners.topCenter.y) <= 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.middleRight.x < target.corners.middleLeft.x) {\n pts = NoOfSegments.Four;\n }\n else if (element.sourceWrapper !== element.targetWrapper &&\n (source.corners.containsPoint(top) || target.corners.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.bottomCenter.y + target.margin.bottom) ||\n (srcPort === undefined && source.corners.middleRight.y > target.corners.bottomCenter.y + target.margin.bottom)) {\n if (source.corners.topCenter.y > target.corners.bottomCenter.y) {\n if ((tarPort !== undefined && source.corners.middleRight.x + source.margin.right < tarPort.offsetX) ||\n (tarPort === undefined && source.corners.middleRight.x + 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.middleLeft.x > tarPort.offsetX) ||\n (tarPort === undefined && source.corners.middleLeft.x > 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.middleRight.x - target.corners.middleLeft.x) <= 25 &&\n Math.abs(srcPort.offsetY - target.corners.bottomCenter.y) <= 25) {\n pts = NoOfSegments.Two;\n }\n else if (source.corners.middleRight.x < target.corners.middleLeft.x) {\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.middleRight.x + margin < target.corners.middleLeft.x - margin ||\n source.corners.middleLeft.x - margin > target.corners.middleRight.x + 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.bottomCenter.y < target.corners.topCenter.y) {\n pts = NoOfSegments.One;\n }\n else if (source.corners.bottomCenter.y + source.margin.bottom < target.corners.topCenter.y - target.margin.top) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.middleRight.x + source.margin.right < target.corners.middleLeft.x - target.margin.left) {\n pts = NoOfSegments.Five;\n }\n else if (source.corners.middleLeft.x - source.margin.left > target.corners.middleRight.x + 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.middleLeft.x - target.margin.left) ||\n (srcPort === undefined && source.corners.bottomCenter.x < target.corners.bottomLeft.x - target.margin.left)) {\n if (source.corners.middleRight.x < target.corners.middleLeft.x) {\n if ((tarPort !== undefined && source.corners.bottomCenter.y + source.margin.bottom < tarPort.offsetY) ||\n (tarPort === undefined && source.corners.bottomCenter.y + 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.topCenter.y > tarPort.offsetY) ||\n (tarPort === undefined && source.corners.topCenter.y > 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.middleRight.x - target.corners.middleLeft.x) <= 25 &&\n Math.abs(tarPort.offsetY - source.corners.bottomCenter.y) <= 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.bottomCenter.y < target.corners.bottomCenter.y) {\n if ((srcPort !== undefined && srcPort.offsetX < target.corners.middleLeft.x - target.margin.left) ||\n (srcPort === undefined && source.corners.bottomCenter.x < target.corners.middleLeft.x - target.margin.left)) {\n pts = NoOfSegments.Three;\n }\n else if ((srcPort !== undefined && srcPort.offsetX > target.corners.middleRight.x + target.margin.right) ||\n (srcPort === undefined && source.corners.bottomCenter.x > target.corners.middleRight.x + target.margin.right)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.bottomCenter.y < target.corners.topCenter.y) {\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.middleLeft.x > tarPort.offsetX) ||\n (tarPort === undefined && source.corners.middleLeft.x > target.corners.middleLeft.x)) {\n pts = NoOfSegments.Three;\n }\n else if ((tarPort !== undefined && source.corners.middleRight.x < tarPort.offsetX) ||\n (tarPort === undefined &&\n source.corners.middleRight.x < target.corners.middleRight.x)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.topCenter.y > target.corners.bottomCenter.y) {\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.topCenter.y - target.margin.top) ||\n (sourcePort === undefined && (source.corners.bottomCenter.y < target.corners.topCenter.y - target.margin.top ||\n source.corners.middleLeft.y < target.corners.topCenter.y - target.margin.top))) {\n if (source.corners.bottomCenter.y < target.corners.topCenter.y) {\n if ((tarPort !== undefined && source.corners.middleLeft.x - source.margin.left > tarPort.offsetX) ||\n (tarPort === undefined && source.corners.middleLeft.x - 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.middleRight.x < tarPort.offsetX) ||\n (tarPort === undefined && source.corners.middleRight.x < 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.middleLeft.x - target.corners.middleRight.x) <= 25 &&\n Math.abs(sourcePort.offsetY - target.corners.topCenter.y) <= 25) {\n pts = NoOfSegments.Two;\n }\n else if (element.sourceWrapper !== element.targetWrapper &&\n (source.corners.containsPoint(top) || target.corners.containsPoint(left))) {\n pts = NoOfSegments.Two;\n }\n else if (source.corners.middleLeft.x > target.corners.middleRight.x) {\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.middleLeft.x < target.corners.middleLeft.x) {\n if ((targetPort !== undefined && source.corners.bottomCenter.y + source.margin.bottom < targetPort.offsetY) ||\n (targetPort === undefined && source.corners.bottomCenter.y + source.margin.bottom < target.corners.middleLeft.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((targetPort !== undefined && source.corners.topCenter.y - source.margin.top > targetPort.offsetY) ||\n (targetPort === undefined && source.corners.topCenter.y - source.margin.top > target.corners.middleLeft.y)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.middleRight.x < target.corners.middleLeft.x ||\n target.corners.middleRight.x < source.corners.middleLeft.x) {\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.topCenter.y - target.margin.top) ||\n (srcPort === undefined && source.corners.middleLeft.y < target.corners.topCenter.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((srcPort !== undefined && srcPort.offsetY > target.corners.bottomCenter.y + target.margin.bottom) ||\n (srcPort === undefined && source.corners.middleLeft.y > target.corners.bottomCenter.y + target.margin.bottom)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.middleLeft.x > target.corners.middleRight.x) {\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.topCenter.y < target.corners.topCenter.y) {\n if ((targetPort !== undefined && source.corners.middleLeft.x > targetPort.offsetX) ||\n (targetPort === undefined && source.corners.middleLeft.x > target.corners.middleLeft.x)) {\n pts = NoOfSegments.Three;\n }\n else if ((targetPort !== undefined && source.corners.middleRight.x < targetPort.offsetX) ||\n (targetPort === undefined && source.corners.middleRight.x < target.corners.middleRight.x)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.bottomCenter.y < target.corners.topCenter.y) {\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.middleRight.x) ||\n (srcPort === undefined && source.corners.middleLeft.x > target.corners.middleRight.x)) {\n pts = NoOfSegments.Three;\n }\n else if ((srcPort !== undefined && srcPort.offsetX < target.corners.middleLeft.x) ||\n (srcPort === undefined && source.corners.bottomRight.x < target.corners.middleLeft.x)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.topCenter.y > target.corners.bottomCenter.y) {\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 if (tar !== undefined) {\n if (tarPort === undefined) {\n var refPoint = findEndPoint(target.direction, target.point, tar);\n target.point = getIntersection(element, tar, target.point, refPoint, true);\n }\n }\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 switch (source.direction) {\n case 'Left':\n if (source.point.x > srcCorner.middleLeft.x) {\n extra = (source.point.x - srcCorner.middleLeft.x) > extra ? ((source.point.x - srcCorner.middleLeft.x) + extra) : extra;\n }\n break;\n case 'Right':\n if (source.point.x < srcCorner.middleRight.x) {\n extra = (srcCorner.middleRight.x - source.point.x) > extra ? ((srcCorner.middleRight.x - source.point.x) + extra) : extra;\n }\n break;\n case 'Top':\n if (source.point.y > srcCorner.topCenter.y) {\n extra = (source.point.y - srcCorner.topCenter.y) > extra ? ((source.point.y - srcCorner.topCenter.y) + extra) : extra;\n }\n break;\n case 'Bottom':\n if (source.point.y < srcCorner.bottomCenter.y) {\n extra = (srcCorner.bottomCenter.y - source.point.y) > extra ? ((srcCorner.bottomCenter.y - source.point.y) + extra) : extra;\n }\n break;\n }\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 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.middleLeft.x - source.margin.left;\n var sRight = source.corners.middleRight.x + source.margin.right;\n var sBottom = source.corners.bottomCenter.y + source.margin.bottom;\n var sTop = source.corners.topCenter.y - source.margin.top;\n var tLeft = target.corners.middleLeft.x - target.margin.left;\n var tRight = target.corners.middleRight.x + target.margin.right;\n var tBottom = target.corners.bottomCenter.y + target.margin.bottom;\n var tTop = target.corners.topCenter.y - 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.middleLeft.x + 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.topCenter.y + 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.middleRight.x - 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.bottomCenter.y - 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 };\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 Bpmn flows\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 };\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 };\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 };\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 };\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.horizontalAlignment = annotation.horizontalAlignment;\n textele.verticalAlignment = annotation.verticalAlignment;\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 annotation.margin = { left: 0, right: 0, top: 0, bottom: 0 };\n textElement.refreshTextElement();\n textElement.width = (annotation.width || bounds.width) - textElement.margin.left - textElement.margin.right;\n getPointloop = getAnnotationPosition(points, annotation, bounds);\n newPoint = getPointloop.point;\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';\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 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 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 return node.constraints & NodeConstraints.Rotate;\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) {\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 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 { 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 } 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';\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}\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 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 var X1 = corners.topLeft;\n var X2 = corners.topRight;\n var Y1 = corners.bottomRight;\n var Y2 = corners.bottomLeft;\n if (element.rotateAngle !== 0 || element.parentTransform !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, element.rotateAngle + element.parentTransform, element.offsetX, element.offsetY);\n X1 = transformPointByMatrix(matrix, X1);\n X2 = transformPointByMatrix(matrix, X2);\n Y1 = transformPointByMatrix(matrix, Y1);\n Y2 = transformPointByMatrix(matrix, Y2);\n }\n line.push(X1);\n line.push(X2);\n line.push(Y1);\n line.push(Y2);\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.outerBounds;\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 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 var selectedNodes = getCollection(dataObj.selectedItems.nodes, diagram.nodes);\n var selcectedConnectors = getCollection(dataObj.selectedItems.connectors, diagram.connectors);\n var selectedItems = [];\n selectedItems = selectedItems.concat(selectedNodes).concat(selcectedConnectors);\n diagram.select(selectedItems);\n return dataObj;\n}\nfunction getCollection(objNodes, diagramNodes) {\n var collection = [];\n for (var i = 0; i < objNodes.length; i++) {\n for (var _i = 0, diagramNodes_1 = diagramNodes; _i < diagramNodes_1.length; _i++) {\n var connectors = diagramNodes_1[_i];\n if (connectors.id === objNodes[i].id) {\n collection.push(connectors);\n }\n }\n }\n return collection;\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);\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) {\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 = document.getElementById(actualObject.wrapper.children[0].id + '_groupElement');\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 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 = document.getElementById(actualObject.wrapper.children[0].id + '_html_element');\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 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) {\n 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}\nexport function findPortIndex(node, id) {\n var index;\n for (var i = 0; i < node.ports.length; i++) {\n if (node.ports[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}\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 if (diagramElement[instance][0].enterObject && diagramElement[instance][0].enterObject.id === element.nodeId) {\n return diagramElement[instance][0].enterObject;\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/**\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.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 = eachLine[j].split(' ');\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;\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 = document.createElement('Span');\n text.setAttribute('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(diagramId) {\n var diagramElement = document.getElementById(diagramId);\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 */\nexport function getDiagramLayer(diagramId) {\n var diagramLayer;\n var diagramLayerSvg = getDiagramLayerSvg(diagramId);\n diagramLayer = diagramLayerSvg.getElementById(diagramId + '_diagramLayer');\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 */\nexport function getExpandCollapseLayer(diagramId) {\n var expandCollapse = null;\n var diagramPortSvg = getPortLayerSvg(diagramId);\n expandCollapse = diagramPortSvg.getElementById(diagramId + '_diagramExpander');\n return expandCollapse;\n}\n/** @private */\nexport function getPortsLayer(diagramId) {\n var expandCollapse = null;\n var diagramPortSvg = getPortLayerSvg(diagramId);\n expandCollapse = diagramPortSvg.getElementById(diagramId + '_diagramPorts');\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 = document.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 = document.createElement('div');\n outer.style.visibility = 'hidden';\n outer.style.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 = document.createElement('div');\n inner.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 element = document.getElementById(contentId);\n var div = (contentId && element) ? document.getElementById(contentId).querySelector('#' + elementId) :\n document.getElementById(elementId);\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 = createElement('div', { id: 'measureElement', styles: 'visibility:hidden' });\n var text = document.createElement('Span');\n text.setAttribute('style', 'display:inline-block ; line-height: normal');\n divElement.appendChild(text);\n var imageElement = void 0;\n imageElement = document.createElement('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 id += chars.substring(num, num + 1);\n }\n return id;\n}\n/** @private */\nexport function getBounds(element) {\n var bounds = new Rect();\n var corners = new Rect();\n var top = element.offsetY - element.actualSize.height * element.pivot.y;\n var bottom = element.offsetY + element.actualSize.height * (1 - element.pivot.y);\n var left = element.offsetX - element.actualSize.width * element.pivot.x;\n var right = element.offsetX + element.actualSize.width * (1 - element.pivot.x);\n var middleLeft = { x: left, y: (top + bottom) / 2 };\n var topCenter = { x: (left + right) / 2, y: top };\n var bottomCenter = { x: (left + right) / 2, y: bottom };\n var middleRight = { x: right, y: (top + bottom) / 2 };\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 corners = Rect.toBounds([topLeft, topRight, bottomLeft, bottomRight]);\n element.corners = corners;\n if (element.rotateAngle !== 0 || element.parentTransform !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, element.rotateAngle + element.parentTransform, element.offsetX, element.offsetY);\n topLeft = transformPointByMatrix(matrix, topLeft);\n topRight = transformPointByMatrix(matrix, topRight);\n bottomLeft = transformPointByMatrix(matrix, bottomLeft);\n bottomRight = transformPointByMatrix(matrix, bottomRight);\n //Set corners based on rotate angle\n }\n bounds = Rect.toBounds([topLeft, topRight, bottomLeft, bottomRight]);\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'];\n case 'connectors':\n return ['parentId'];\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 } 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';\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.wrapper;\n var selectorBnds = element.bounds;\n var paddedBounds = new Rect(selectorBnds.x, selectorBnds.y, selectorBnds.width, selectorBnds.height);\n var handle = diagram.selectedItems;\n if (hasSingleConnection(diagram)) {\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 = { x: x + element.actualSize.width / 2, y: y - 30 / diagram.scroller.currentZoom };\n rotateThumb = transformPointByMatrix(matrix, rotateThumb);\n if ((canShowCorner(handle.constraints, 'Rotate')) && contains(position, rotateThumb, ten) &&\n (diagram.selectedItems.thumbsConstraints & ThumbsConstraints.Rotate)) {\n return 'Rotate';\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 (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)) {\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 node = diagram.selectedItems.nodes[0];\n var forty = 40 / diagram.scroller.currentZoom;\n var ten = 10 / diagram.scroller.currentZoom;\n var selectedItems = diagram.selectedItems;\n if (element.actualSize.width >= forty && element.actualSize.height >= forty) {\n if (canResizeCorner(selectedItems.constraints, 'ResizeSouthEast', selectedItems.thumbsConstraints) && contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width, y: y + element.actualSize.height }), ten)) {\n return 'ResizeSouthEast';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeSouthWest', selectedItems.thumbsConstraints) &&\n contains(position, transformPointByMatrix(matrix, { x: x, y: y + element.actualSize.height }), ten)) {\n return 'ResizeSouthWest';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeNorthEast', selectedItems.thumbsConstraints) &&\n contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width, y: y }), ten)) {\n return 'ResizeNorthEast';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeNorthWest', selectedItems.thumbsConstraints) &&\n contains(position, transformPointByMatrix(matrix, { x: x, y: y }), ten)) {\n return 'ResizeNorthWest';\n }\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeEast', selectedItems.thumbsConstraints) && contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width, y: y + element.actualSize.height / 2 }), ten)) {\n return 'ResizeEast';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeWest', selectedItems.thumbsConstraints) &&\n contains(position, transformPointByMatrix(matrix, { x: x, y: y + element.actualSize.height / 2 }), ten)) {\n return 'ResizeWest';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeSouth', selectedItems.thumbsConstraints) &&\n contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width / 2, y: y + element.actualSize.height }), ten)) {\n return 'ResizeSouth';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeNorth', selectedItems.thumbsConstraints) &&\n contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width / 2, y: y }), ten)) {\n return '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) {\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) {\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) {\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};\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 } 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 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 }\n content.style.strokeDashArray = '2 2 6 2';\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 if (node.shape.activity.subProcess) {\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 };\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') {\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 diagram.remove(diagram.nameTable[edges[i]]);\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 && !subProcess.collapsed) {\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 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.wrapper = annotationContainer;\n annotationContainer.children.push(annotationNode.initPortWrapper(annotationNode.ports[0]));\n var bounds = new Rect(0, 0, 0, 0);\n if (node.width !== undefined && node.height !== undefined) {\n bounds = new Rect(node.offsetX - node.width / 2, node.offsetY - node.height / 2, node.width, node.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,\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.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 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];\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 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 BpmnDiagrams.prototype.findInteractableObject = function (obj, diagram) {\n if (obj.targetID) {\n var targetNode = diagram.nameTable[obj.targetID];\n if (targetNode.shape.type === 'Bpmn' && targetNode.shape.shape === 'TextAnnotation') {\n return targetNode;\n }\n }\n return obj;\n };\n /** @private */\n BpmnDiagrams.prototype.canAdd = function (obj) {\n if (obj.shape && obj.shape.type === 'Bpmn' && obj.shape.shape === 'TextAnnotation') {\n return false;\n }\n return true;\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 if (bpmnShape.event.trigger) {\n elementWrapper.height = elementWrapper.height * 0.8;\n }\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 } 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 var length = field.split('.').length;\n var splits = field.split('.');\n var fieldName = '';\n for (var i = 0; i < length; i++) {\n fieldName = fieldName + splits[i];\n }\n return fieldName;\n}\n/** @hidden */\nexport function getComplexValue(rowData, field) {\n var length = field.split('.').length;\n var splits = field.split('.');\n var complexData = rowData[splits[0]];\n var complexValue = complexData[splits[1]];\n for (var i = 2; i < length; i++) {\n complexValue = complexValue[splits[i]];\n }\n return complexValue;\n}\n/** @hidden */\nexport function isEditable(col, type, elem) {\n var row = parentsUntil(elem, 'e-row');\n var isOldRow = !row ? true : row && !row.classList.contains('e-insertedrow');\n if (type === 'beginEdit' && isOldRow) {\n if (col.isIdentity || col.isPrimaryKey || !col.allowEditing) {\n return false;\n }\n return true;\n }\n else if (type === 'add' && col.isIdentity && col.isPrimaryKey) {\n return false;\n }\n else {\n if (isOldRow && !col.allowEditing && !col.isIdentity && !col.isPrimaryKey) {\n return false;\n }\n return true;\n }\n}\n/** @hidden */\nexport function isActionPrevent(inst) {\n var dlg = inst.element.querySelector('#' + inst.element.id + 'EditConfirm');\n return inst.editSettings.mode === 'Batch' &&\n (inst.element.querySelectorAll('.e-updatedtd').length) && inst.editSettings.showConfirmDialog &&\n (dlg ? dlg.classList.contains('e-popup-close') : true);\n}\n/** @hidden */\nexport function wrap(elem, action) {\n var clName = 'e-wrap';\n elem = elem instanceof Array ? elem : [elem];\n for (var i = 0; i < elem.length; i++) {\n action ? elem[i].classList.add(clName) : elem[i].classList.remove(clName);\n }\n}\nexport function changeButtonType(target) {\n var elements = [].slice.call(target.querySelectorAll('button'));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var button = elements_1[_i];\n attributes(button, { type: 'button' });\n }\n}\n/** @hidden */\nexport function setFormatter(serviceLocator, column) {\n var fmtr = serviceLocator.getService('valueFormatter');\n switch (column.type) {\n case 'date':\n column.setFormatter(fmtr.getFormatFunction({ type: 'date', skeleton: column.format }));\n column.setParser(fmtr.getParserFunction({ type: 'date', skeleton: column.format }));\n break;\n case 'datetime':\n column.setFormatter(fmtr.getFormatFunction({ type: 'dateTime', skeleton: column.format }));\n column.setParser(fmtr.getParserFunction({ type: 'dateTime', skeleton: column.format }));\n break;\n case 'number':\n column.setFormatter(fmtr.getFormatFunction({ format: column.format }));\n column.setParser(fmtr.getParserFunction({ format: column.format }));\n break;\n }\n}\n/** @hidden */\nexport function addRemoveActiveClasses(cells, add) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n for (var i = 0, len = cells.length; i < len; i++) {\n if (add) {\n classList(cells[i], args.slice(), []);\n cells[i].setAttribute('aria-selected', 'true');\n }\n else {\n classList(cells[i], [], args.slice());\n cells[i].removeAttribute('aria-selected');\n }\n }\n}\n/** @hidden */\nexport function distinctStringValues(result) {\n var temp = {};\n var res = [];\n for (var i = 0; i < result.length; i++) {\n if (!(result[i] in temp)) {\n res.push(result[i].toString());\n temp[result[i]] = 1;\n }\n }\n return res;\n}\n/** @hidden */\nexport function getFilterMenuPostion(target, dialogObj, grid) {\n var elementVisible = dialogObj.element.style.display;\n dialogObj.element.style.display = 'block';\n var dlgWidth = dialogObj.width;\n var newpos;\n if (!grid.enableRtl) {\n newpos = calculateRelativeBasedPosition(target, dialogObj.element);\n dialogObj.element.style.display = elementVisible;\n dialogObj.element.style.top = (newpos.top + target.getBoundingClientRect().height) - 5 + 'px';\n var leftPos = ((newpos.left - dlgWidth) + target.clientWidth);\n if (leftPos < 1) {\n dialogObj.element.style.left = (dlgWidth + leftPos) - 16 + 'px'; // right calculation\n }\n else {\n dialogObj.element.style.left = leftPos + -4 + 'px';\n }\n }\n else {\n newpos = calculatePosition(target, 'left', 'bottom');\n dialogObj.element.style.top = (newpos.top + target.getBoundingClientRect().height) - 35 + 'px';\n dialogObj.element.style.display = elementVisible;\n var leftPos = ((newpos.left - dlgWidth) + target.clientWidth);\n if (leftPos < 1) {\n dialogObj.element.style.left = (dlgWidth + leftPos) + -16 + 'px';\n }\n else {\n dialogObj.element.style.left = leftPos - 16 + 'px';\n }\n }\n}\n/** @hidden */\nexport function getZIndexCalcualtion(args, dialogObj) {\n args.popup.element.style.zIndex = (dialogObj.zIndex + 1).toString();\n}\n/** @hidden */\nexport function toogleCheckbox(elem) {\n var span = elem.querySelector('.e-frame');\n span.classList.contains('e-check') ? classList(span, ['e-uncheck'], ['e-check']) :\n classList(span, ['e-check'], ['e-uncheck']);\n}\n/** @hidden */\nexport function createCboxWithWrap(uid, elem, className) {\n var div = createElement('div', { className: className });\n div.appendChild(elem);\n div.setAttribute('uid', uid);\n return div;\n}\n/** @hidden */\nexport function removeAddCboxClasses(elem, checked) {\n removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n if (checked) {\n elem.classList.add('e-check');\n }\n else {\n elem.classList.add('e-uncheck');\n }\n}\n/**\n * Refresh the Row model's foreign data.\n * @param row - Grid Row model object.\n * @param columns - Foreign columns array.\n * @param data - Updated Row data.\n * @hidden\n */\nexport function refreshForeignData(row, columns, data) {\n columns.forEach(function (col) {\n setValue(col.field, getForeignData(col, data), row.foreignKeyData);\n });\n row.cells.forEach(function (cell) {\n if (cell.isForeignKey) {\n setValue('foreignKeyData', getValue(cell.column.field, row.foreignKeyData), cell);\n }\n });\n}\n/**\n * Get the foreign data for the corresponding cell value.\n * @param column - Foreign Key column\n * @param data - Row data.\n * @param lValue - cell value.\n * @param foreignData - foreign data source.\n * @hidden\n */\nexport function getForeignData(column, data, lValue, foreignKeyData) {\n var fField = column.foreignKeyField;\n var key = (lValue || valueAccessor(column.field, data, column));\n key = isNullOrUndefined(key) ? '' : key;\n var query = new Query();\n var fdata = foreignKeyData || (column.dataSource instanceof DataManager) && column.dataSource.dataSource.json.length ?\n column.dataSource.dataSource.json : column.columnData;\n if (key.getDay) {\n query.where(getDatePredicate({ field: fField, operator: 'equal', value: key, matchCase: false }));\n }\n else {\n query.where(fField, '==', key, false);\n }\n return new DataManager(fdata).executeLocal(query);\n}\n/**\n * To use to get the column's object by the foreign key value.\n * @param foreignKeyValue - Defines ForeignKeyValue.\n * @param columns - Array of column object.\n * @hidden\n */\nexport function getColumnByForeignKeyValue(foreignKeyValue, columns) {\n var column;\n return columns.some(function (col) {\n column = col;\n return col.foreignKeyValue === foreignKeyValue;\n }) && column;\n}\n/**\n * @hidden\n * @param filterObject - Defines predicate model object\n */\nexport function getDatePredicate(filterObject, type) {\n var datePredicate;\n var prevDate;\n var nextDate;\n var prevObj = baseExtend({}, getActualProperties(filterObject));\n var nextObj = baseExtend({}, getActualProperties(filterObject));\n var value = new Date(filterObject.value);\n if (filterObject.operator === 'equal' || filterObject.operator === 'notequal') {\n if (type === 'datetime') {\n prevDate = new Date(value.setSeconds(value.getSeconds() - 1));\n nextDate = new Date(value.setSeconds(value.getSeconds() + 2));\n filterObject.value = new Date(value.setSeconds(nextDate.getSeconds() - 1));\n }\n else {\n prevDate = new Date(value.setHours(0) - 1);\n nextDate = new Date(value.setHours(24));\n }\n prevObj.value = prevDate;\n nextObj.value = nextDate;\n if (filterObject.operator === 'equal') {\n prevObj.operator = 'greaterthan';\n nextObj.operator = 'lessthan';\n }\n else if (filterObject.operator === 'notequal') {\n prevObj.operator = 'lessthanorequal';\n nextObj.operator = 'greaterthanorequal';\n }\n var predicateSt = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n var predicateEnd = new Predicate(nextObj.field, nextObj.operator, nextObj.value, false);\n datePredicate = filterObject.operator === 'equal' ? predicateSt.and(predicateEnd) : predicateSt.or(predicateEnd);\n }\n else {\n if (typeof (prevObj.value) === 'string') {\n prevObj.value = new Date(prevObj.value);\n }\n var predicates = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n datePredicate = predicates;\n }\n if (filterObject.setProperties) {\n filterObject.setProperties({ ejpredicate: datePredicate }, true);\n }\n else {\n filterObject.ejpredicate = datePredicate;\n }\n return datePredicate;\n}\n/**\n * @hidden\n */\nexport function renderMovable(ele, frzCols) {\n var mEle = ele.cloneNode(true);\n for (var i = 0; i < frzCols; i++) {\n mEle.removeChild(mEle.children[0]);\n }\n for (var i = frzCols, len = ele.childElementCount; i < len; i++) {\n ele.removeChild(ele.children[ele.childElementCount - 1]);\n }\n return mEle;\n}\n","/**\n * 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 } 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 };\n Aggregate.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.footerRenderer.removeEventListener();\n this.parent.off(initialEnd, this.initiateRender);\n this.parent.off(dataReady, this.footerRenderer.refresh);\n this.parent.off(uiUpdate, this.onPropertyChanged);\n };\n Aggregate.prototype.destroy = function () {\n this.removeEventListener();\n remove(this.parent.element.querySelector('.e-gridfooter'));\n };\n return Aggregate;\n}());\nexport { Aggregate };\n/**\n * @private\n */\nexport function summaryIterator(aggregates, callback) {\n aggregates.forEach(function (row) {\n row.columns.forEach(function (column) {\n callback(column, row);\n });\n });\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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;\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 - rightPadding;\n }\n return positionX;\n}\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 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'] = width;\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 * 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 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) {\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 }\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/** @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}\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) {\n if (!this.heatMap.enableCanvasRendering) {\n parentElement.appendChild(this.heatMap.renderer.drawRectangle(properties));\n }\n else {\n this.drawCanvasRectangle(this.heatMap.canvasRenderer, properties);\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) {\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 canvas.ctx.rect(options.x, options.y, options.width, options.height);\n if (cornerRadius !== null && cornerRadius >= 0) {\n this.drawCornerRadius(canvas, options);\n }\n else {\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n canvas.ctx.fillStyle = options.fill;\n canvas.ctx.fillRect(options.x, options.y, options.width, options.height);\n }\n if (options['stroke-width'] && options['stroke-width'] != 0) {\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 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) {\n var result = new Date(value);\n interval = Math.ceil(interval);\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/** @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 } from '@syncfusion/ej2-base';\n/**\n * Specifies Linear-Gauge Helper methods\n */\n/** @private */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('gauge-measuretext');\n var size;\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'gauge-measuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n size = new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n //remove(htmlObject);\n return size;\n}\n/** @private */\nexport function withInRange(value, start, end, max, min, type) {\n var withIn;\n if (type === 'pointer') {\n withIn = (((value <= max) && (value >= min)));\n }\n else {\n withIn = (start != null && (start <= max) && (start >= min)) && (end != null && (end <= max) && (end >= min));\n }\n return withIn;\n}\nexport function convertPixelToValue(parentElement, pointerElement, orientation, axis, type, location) {\n var elementRect = parentElement.getBoundingClientRect();\n var pointerRect = pointerElement.getBoundingClientRect();\n var height = (pointerElement.id.indexOf('MarkerPointer') > -1) ? (pointerRect.height / 2) :\n (!axis.isInversed) ? 0 : pointerRect.height;\n var width = (pointerElement.id.indexOf('MarkerPointer') > -1) ? (pointerRect.width / 2) :\n (!axis.isInversed) ? pointerRect.width : 0;\n var size = new Size(axis.lineBounds.width, axis.lineBounds.height);\n var y = (type === 'drag') ? (location.y - axis.lineBounds.y) :\n ((pointerRect.top + height) - elementRect.top - axis.lineBounds.y);\n var x = (type === 'drag') ? (location.x - axis.lineBounds.x) :\n ((pointerRect.left + width) - elementRect.left - axis.lineBounds.x);\n var newSize = (orientation === 'Vertical') ? size.height : size.width;\n var divideVal = (orientation === 'Vertical') ? y : x;\n var value = (orientation === 'Vertical') ? (axis.isInversed) ? (divideVal / newSize) :\n (1 - (divideVal / newSize)) : (axis.isInversed) ? (1 - (divideVal / newSize)) : (divideVal / newSize);\n value = value * (axis.visibleRange.delta) + axis.visibleRange.min;\n return value;\n}\nexport function getPathToRect(path, size, parentElement) {\n var tempDiv = document.getElementById('gauge_path');\n if (tempDiv === null) {\n tempDiv = createElement('text', { id: 'gauge_path' });\n tempDiv.style.position = 'absolute';\n tempDiv.style.top = '0px';\n tempDiv.style.left = '0px';\n parentElement.appendChild(tempDiv);\n }\n var render = new SvgRenderer('id');\n var svg = render.createSvg({ id: 'box_path', width: size.width, height: size.height });\n svg.appendChild(path);\n tempDiv.appendChild(svg);\n var svgRect = path.getBBox();\n remove(tempDiv);\n return svgRect;\n}\n/** @private */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function isPointerDrag(axes) {\n var pointerEnable = false;\n axes.map(function (axis, index) {\n axis.pointers.map(function (pointer, index) {\n if (pointer.enableDrag) {\n pointerEnable = true;\n }\n });\n });\n return pointerEnable;\n}\n/** @private */\nexport function valueToCoefficient(value, axis, orientation, range) {\n var result = (value - range.min) / range.delta;\n result = (orientation === 'Vertical') ? (!axis.isInversed) ? (1 - result) : result : (!axis.isInversed) ? result : (1 - result);\n return result;\n}\nexport function getFontStyle(font) {\n var style = '';\n style = 'font-size:' + font.size +\n '; font-style:' + font.fontStyle + '; font-weight:' + font.fontWeight +\n '; font-family:' + font.fontFamily + ';opacity:' + font.opacity +\n '; color:' + font.color + ';';\n return style;\n}\n/** @private */\nexport function getLabelFormat(format) {\n var customLabelFormat = format && format.match('{value}') !== null;\n var skeleton = customLabelFormat ? '' : format;\n return skeleton;\n}\n/** @private */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/** @private */\nexport function getElementOffset(childElement, parentElement) {\n var width;\n var height;\n parentElement.appendChild(childElement);\n width = childElement.offsetWidth;\n height = childElement.offsetHeight;\n parentElement.removeChild(childElement);\n return new Size(width, height);\n}\n/** @private */\nvar VisibleRange = /** @class */ (function () {\n function VisibleRange(min, max, interval, delta) {\n this.min = min;\n this.max = max;\n this.interval = interval;\n this.delta = delta;\n }\n return VisibleRange;\n}());\nexport { VisibleRange };\n/** @private */\nvar GaugeLocation = /** @class */ (function () {\n function GaugeLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return GaugeLocation;\n}());\nexport { GaugeLocation };\n/**\n * Internal class size for height and width\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d, transform) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n _this.transform = transform;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nvar RectOption = /** @class */ (function () {\n function RectOption(id, fill, border, opacity, rect, transform, dashArray) {\n this.opacity = opacity;\n this.id = id;\n this.y = rect.y;\n this.x = rect.x;\n this.fill = fill;\n this.stroke = border.color;\n this['stroke-width'] = border.width;\n this.height = rect.height;\n this.width = rect.width;\n }\n return RectOption;\n}());\nexport { RectOption };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nvar VisibleLabels = /** @class */ (function () {\n function VisibleLabels(text, value, size) {\n this.text = text;\n this.value = value;\n this.size = size;\n }\n return VisibleLabels;\n}());\nexport { VisibleLabels };\n/** @private */\nvar Align = /** @class */ (function () {\n function Align(axisIndex, align) {\n this.align = align;\n this.axisIndex = axisIndex;\n }\n return Align;\n}());\nexport { Align };\n/** @private */\nexport function textElement(options, font, color, parent) {\n var renderOptions = {};\n var htmlObject;\n var renderer = new SvgRenderer('');\n var style = 'fill:' + color + '; font-size:' + font.size +\n '; font-style:' + font.fontStyle + ' ; font-weight:' + font.fontWeight + '; font-family:' +\n font.fontFamily + '; text-anchor:' + options.anchor + '; transform:' + options.transform +\n '; opacity:' + font.opacity + '; dominant-baseline:' + options.baseLine + ';';\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'style': style\n };\n htmlObject = renderer.createText(renderOptions, options.text);\n parent.appendChild(htmlObject);\n return htmlObject;\n}\nexport function calculateNiceInterval(min, max, size, orientation) {\n var delta = max - min;\n var currentInterval;\n var intervalDivs = [10, 5, 2, 1];\n var desiredIntervalsCount = getActualDesiredIntervalsCount(size, orientation);\n var niceInterval = delta / desiredIntervalsCount;\n var minInterval = Math.pow(10, Math.floor(Math.log(niceInterval) / Math.log(10)));\n for (var _i = 0, intervalDivs_1 = intervalDivs; _i < intervalDivs_1.length; _i++) {\n var interval = intervalDivs_1[_i];\n currentInterval = minInterval * interval;\n if (desiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n}\nexport function getActualDesiredIntervalsCount(size, orientation) {\n var maximumLabels = 5;\n var desiredIntervalsCount = (orientation === 'Horizontal' ? 0.533 : 1) * maximumLabels;\n desiredIntervalsCount = Math.max((size * (desiredIntervalsCount / 100)), 1);\n return desiredIntervalsCount;\n}\n/** @private */\nexport function getPointer(target, gauge) {\n var split = [];\n var axisIndex;\n var radix = 10;\n var pointIndex;\n var axis;\n var pointer;\n split = target.id.split('_');\n axisIndex = parseInt(split[2], radix);\n pointIndex = parseInt(split[4], radix);\n axis = gauge.axes[axisIndex];\n pointer = gauge.axes[axisIndex].pointers[pointIndex];\n return { axis: axis, axisIndex: axisIndex, pointer: pointer, pointerIndex: pointIndex };\n}\n/** @private */\nexport function getRangeColor(value, ranges) {\n var rangeColor = null;\n ranges.forEach(function (range, index) {\n if (value >= range.start && range.end >= value) {\n rangeColor = range.interior;\n }\n });\n return rangeColor;\n}\n/** @private */\nexport function getRangePalette() {\n var palette = ['#ff5985', '#ffb133', '#fcde0b', '#27d5ff', '#50c917'];\n return palette;\n}\n/** @private */\nexport function calculateShapes(location, shape, size, url, options, orientation, axis, pointer) {\n var path;\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var radius;\n switch (shape) {\n case 'Circle':\n radius = ((width + height) / 4);\n locX = (orientation === 'Vertical') ? (!axis.opposedPosition) ? (pointer.placement !== 'Far') ? locX - radius : locX + radius :\n pointer.placement === 'Near' ? locX - radius : locX + radius : locX;\n locY = (orientation === 'Vertical') ? locY : (!axis.opposedPosition) ? (pointer.placement === 'Far') ?\n locY + radius : locY - radius : (pointer.placement === 'Near') ? locY - radius : locY + radius;\n merge(options, { 'r': radius, 'cx': locX, 'cy': locY });\n break;\n case 'Diamond':\n case 'Rectangle':\n locX = (orientation === 'Horizontal') ? ((locX - (width / 2))) : ((!axis.opposedPosition && pointer.placement !== 'Far') ||\n (axis.opposedPosition && pointer.placement === 'Near')) ? locX - width : locX;\n locY = (orientation === 'Vertical') ? locY : (!axis.opposedPosition) ?\n (pointer.placement === 'Far') ? locY + (height / 2) : locY - (height / 2) :\n (pointer.placement === 'Near') ? locY - (height / 2) : locY + (height / 2);\n if (shape === 'Diamond') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + width) + ' ' + locY + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + locY + ' z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + width) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + width) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY - (height / 2)) + ' z';\n }\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX - width) + ' ' + (locY - (height / 2)) +\n 'L' + (locX - width) + ' ' + (locY + (height / 2)) + ' Z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + (locY - height) +\n 'L' + (locX - (width / 2)) + ' ' + (locY - height) + ' Z';\n }\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX + width) + ' ' + (locY - (height / 2)) +\n 'L' + (locX + width) + ' ' + (locY + (height / 2)) + ' Z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + (locY + height) +\n 'L' + (locX - (width / 2)) + ' ' + (locY + height) + ' Z';\n }\n merge(options, { 'd': path });\n break;\n case 'Arrow':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + (locX - (width / 2)) + ' ' + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX - width) + ' '\n + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX - width) + ' ' + ((locY + (height / 2)) -\n (height / 4)) + ' ' + 'L' + (locX - (width / 2)) + ' ' + ((locY + (height / 2)) - (height / 4)) + ' ' +\n 'L' + (locX - (width / 2)) + ' ' + (locY + height / 2) + 'z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ((locX + (width / 2)) - (width / 4)) + ' ' + (locY - (height / 2)) + ' ' + 'L' + ((locX + (width / 2)) -\n (width / 4)) + ' ' + (locY - height) + ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY - height) +\n ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY - (height / 2)) + ' ' + 'L' + (locX - (width / 2))\n + ' ' + (locY - (height / 2)) + 'z';\n }\n merge(options, { 'd': path });\n break;\n case 'InvertedArrow':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + 'L' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX + width) + ' '\n + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX + width) + ' ' + ((locY + (height / 2)) - (height / 4))\n + ' ' + 'L' + (locX + (width / 2)) + ' ' + ((locY + (height / 2)) - (height / 4)) + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + (locY + height / 2) + 'z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ((locX + (width / 2)) - (width / 4)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ((locX + (width / 2)) -\n (width / 4)) + ' ' + (locY + height) + ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY + height)\n + ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + (locX - (width / 2)) + ' ' + (locY + (height / 2)) + 'z';\n }\n merge(options, { 'd': path });\n break;\n case 'Image':\n merge(options, { 'href': url, 'height': height, 'width': width, x: locX - (width / 2), y: locY - (height / 2) });\n break;\n }\n return options;\n}\n/** @private */\nexport function getBox(location, boxName, orientation, size, type, containerWidth, axis, cornerRadius) {\n var path = ' ';\n var radius = cornerRadius;\n var x1;\n var y1;\n var rectWidth;\n var rectHeight;\n var bottomRadius;\n var topRadius;\n switch (boxName) {\n case 'RoundedRectangle':\n x1 = location.x;\n y1 = location.y;\n rectWidth = location.width;\n rectHeight = location.height;\n path = 'M' + ' ' + x1 + ' ' + (radius + y1) + ' Q ' + x1 + ' ' + y1 + ' ' + (x1 + radius) + ' ' + y1 + ' ';\n path += 'L' + ' ' + (x1 + rectWidth - radius) + ' ' + y1 + ' Q ' + (x1 + rectWidth) + ' ' + y1 + ' '\n + (x1 + rectWidth) + ' ' + (y1 + radius) + ' ';\n path += 'L ' + (x1 + rectWidth) + ' ' + (y1 + rectHeight - radius) + ' Q ' + (x1 + rectWidth) + ' ' + (y1 + rectHeight)\n + ' ' + (x1 + rectWidth - radius) + ' ' + (y1 + rectHeight) + ' ';\n path += ' L ' + (x1 + radius) + ' ' + (y1 + rectHeight) + ' Q ' + x1 + ' ' + (y1 + rectHeight)\n + ' ' + x1 + ' ' + (y1 + rectHeight - radius) + ' ';\n path += 'L' + ' ' + x1 + ' ' + (radius + y1) + ' ' + 'z';\n break;\n case 'Thermometer':\n var width = (orientation === 'Vertical') ? location.width : location.height;\n bottomRadius = width + ((width / 2) / Math.PI);\n topRadius = width / 2;\n if (orientation === 'Vertical') {\n var addValue = ((containerWidth + ((containerWidth / 2) / Math.PI)) - bottomRadius);\n var y1_1 = (type === 'bar') ? location.y + addValue : location.y;\n var locY = (type === 'bar') ? location.y + (topRadius - (topRadius / Math.PI)) : location.y;\n var locHeight = location.height;\n path = 'M' + location.x + ' ' + (y1_1 + locHeight) +\n ' A ' + bottomRadius + ' ' + bottomRadius + ', 0, 1, 0, ' + (location.x + location.width) + ' ' + (y1_1 + locHeight) +\n ' L ' + (location.x + location.width) + ' ' + locY +\n ' A ' + topRadius + ' ' + topRadius + ', 0, 1, 0, ' + location.x + ' ' + locY + ' z ';\n }\n else {\n var x1_1 = (type === 'bar' && !axis.isInversed) ?\n location.x - ((containerWidth + ((containerWidth / 2) / Math.PI)) - bottomRadius) : location.x;\n var locWidth = (type === 'bar') ? (location.width - (topRadius - ((topRadius / Math.PI)))) : location.width;\n path = 'M' + x1_1 + ' ' + (location.y) +\n ' A ' + bottomRadius + ' ' + bottomRadius + ', 0, 1, 0, ' + x1_1 + ' ' + (location.y + location.height) +\n ' L ' + ((type === 'bar' ? location.x : x1_1) + locWidth) + ' ' + (location.y + location.height) +\n ' A ' + topRadius + ' ' + topRadius + ', 0, 1, 0, ' +\n ((type === 'bar' ? location.x : x1_1) + locWidth) + ' ' + (location.y) + ' z ';\n }\n break;\n }\n return path;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Helper functions for maps control\n */\nimport { SvgRenderer, createElement, isNullOrUndefined, remove, compile as templateComplier, merge } from '@syncfusion/ej2-base';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { animationComplete } from '../index';\n/**\n * Maps internal use of `Size` type\n * @private\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/**\n * To find number from string\n * @private\n */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Method to calculate the width and height of the maps\n */\nexport function calculateSize(maps) {\n var containerWidth = maps.element.clientWidth;\n var containerHeight = maps.element.clientHeight;\n maps.availableSize = new Size(stringToNumber(maps.width, containerWidth) || containerWidth || 600, stringToNumber(maps.height, containerHeight) || containerHeight || (maps.isDevice ?\n Math.min(window.innerWidth, window.innerHeight) : 450));\n}\n/**\n * Method to create svg for maps.\n */\nexport function createSvg(maps) {\n maps.renderer = new SvgRenderer(maps.element.id);\n calculateSize(maps);\n maps.svgObject = maps.renderer.createSvg({\n id: maps.element.id + '_svg',\n width: maps.availableSize.width,\n height: maps.availableSize.height\n });\n}\n/**\n * Method to convert degrees to radians\n */\nexport function degreesToRadians(deg) {\n return deg * (Math.PI / 180);\n}\n/**\n * Convert radians to degrees method\n */\nexport function radiansToDegrees(radian) {\n return radian * (180 / Math.PI);\n}\n/**\n * Method for converting from latitude and longitude values to points\n */\nexport function convertGeoToPoint(latitude, longitude, factor, layer, mapModel) {\n var mapSize = new Size(mapModel.mapAreaRect.width, mapModel.mapAreaRect.height);\n var x;\n var y;\n var value;\n var lat;\n var lng;\n var temp;\n var longitudeMinMax = mapModel.baseMapBounds.longitude;\n var latitudeMinMax = mapModel.baseMapBounds.latitude;\n var latRadian = degreesToRadians(latitude);\n var lngRadian = degreesToRadians(longitude);\n var type = mapModel.projectionType;\n var size = (mapModel.isTileMap) ? Math.pow(2, 1) * 256 : (isNullOrUndefined(factor)) ? Math.min(mapSize.width, mapSize.height) :\n (Math.min(mapSize.width, mapSize.height) * factor);\n if (layer.geometryType === 'Normal') {\n x = isNullOrUndefined(factor) ? longitude : Math.abs((longitude - longitudeMinMax.min) * factor);\n y = isNullOrUndefined(factor) ? latitude : Math.abs((latitudeMinMax.max - latitude) * factor);\n }\n else if (layer.geometryType === 'Geographic') {\n switch (type) {\n case 'Mercator':\n var pixelOrigin = new Point(size / 2, size / 2);\n x = pixelOrigin.x + longitude * (size / 360);\n var sinY = calculateBound(Math.sin(degreesToRadians(latitude)), -0.9999, 0.9999);\n y = pixelOrigin.y + 0.5 * (Math.log((1 + sinY) / (1 - sinY))) * (-(size / (2 * Math.PI)));\n break;\n case 'Winkel3':\n value = aitoff(lngRadian, latRadian);\n lng = (value.x + lngRadian / (Math.PI / 2)) / 2;\n lat = (value.y + latRadian) / 2;\n break;\n case 'Miller':\n lng = lngRadian;\n lat = (1.25 * Math.log(Math.tan((Math.PI / 4) + (.4 * latRadian))));\n break;\n case 'Eckert3':\n temp = Math.sqrt(Math.PI * (4 + Math.PI));\n lng = 2 / temp * lngRadian * (1 + Math.sqrt(1 - 4 * latRadian * latRadian / (Math.PI * Math.PI)));\n lat = 4 / temp * latRadian;\n break;\n case 'AitOff':\n value = aitoff(lngRadian, latRadian);\n lng = value.x;\n lat = value.y;\n break;\n case 'Eckert5':\n lng = lngRadian * (1 + Math.cos(latRadian)) / Math.sqrt(2 + Math.PI);\n lat = 2 * latRadian / Math.sqrt(2 + Math.PI);\n break;\n case 'Equirectangular':\n lng = lngRadian;\n lat = latRadian;\n break;\n case 'Eckert6':\n var epsilon = 1e-6;\n temp = (1 + (Math.PI / 2)) * Math.sin(latRadian);\n var delta = Infinity;\n for (var i = 0; i < 10 && Math.abs(delta) > epsilon; i++) {\n delta = (latRadian + (Math.sin(latRadian)) - temp) / (1 + Math.cos(latRadian));\n latRadian = latRadian - delta;\n }\n temp = Math.sqrt(2 + Math.PI);\n lng = lngRadian * (1 + Math.cos(latRadian)) / temp;\n lat = 2 * latRadian / temp;\n break;\n }\n x = (type === 'Mercator') ? x : roundTo(xToCoordinate(mapModel, radiansToDegrees(lng)), 3);\n y = (type === 'Mercator') ? y : (-(roundTo(yToCoordinate(mapModel, radiansToDegrees(lat)), 3)));\n }\n return new Point(x, y);\n}\n/**\n * Converting tile latitude and longitude to point\n */\nexport function convertTileLatLongToPoint(center, zoomLevel, tileTranslatePoint, isMapCoordinates) {\n var size = Math.pow(2, zoomLevel) * 256;\n var x = (center.x + 180) / 360;\n var sinLatitude = Math.sin(center.y * Math.PI / 180);\n var y = 0.5 - Math.log((1 + sinLatitude) / (1 - sinLatitude)) / (4 * Math.PI);\n var pixelX = center.x;\n var pixelY = center.y;\n if (isMapCoordinates) {\n pixelX = (x * size + 0.5) + tileTranslatePoint.x;\n pixelY = (y * size + 0.5) + tileTranslatePoint.y;\n }\n return { x: pixelX, y: pixelY };\n}\n/**\n * Method for calculate x point\n */\nexport function xToCoordinate(mapObject, val) {\n var longitudeMinMax = mapObject.baseMapBounds.longitude;\n var totalSize = isNullOrUndefined(mapObject.baseSize) ? mapObject.mapAreaRect.width : mapObject.mapAreaRect.width +\n (Math.abs(mapObject.baseSize.width - mapObject.mapAreaRect.width) / 2);\n return Math.round(totalSize * (val - longitudeMinMax.min) / (longitudeMinMax.max - longitudeMinMax.min) * 100) / 100;\n}\n/**\n * Method for calculate y point\n */\nexport function yToCoordinate(mapObject, val) {\n var latitudeMinMax = mapObject.baseMapBounds.latitude;\n return Math.round(mapObject.mapAreaRect.height * (val - latitudeMinMax.min) / (latitudeMinMax.max - latitudeMinMax.min) * 100) / 100;\n}\n/**\n * Method for calculate aitoff projection\n */\nexport function aitoff(x, y) {\n var cosy = Math.cos(y);\n var sincia = sinci(acos(cosy * Math.cos(x /= 2)));\n return new Point(2 * cosy * Math.sin(x) * sincia, Math.sin(y) * sincia);\n}\n/**\n * Method to round the number\n */\nexport function roundTo(a, b) {\n var c = Math.pow(10, b);\n return (Math.round(a * c) / c);\n}\nexport function sinci(x) {\n return x / Math.sin(x);\n}\nexport function acos(a) {\n return Math.acos(a);\n}\n/**\n * Method to calculate bound\n */\nexport function calculateBound(value, min, max) {\n if (!isNullOrUndefined(min)) {\n value = Math.max(value, min);\n }\n if (!(isNullOrUndefined(max))) {\n value = Math.min(value, max);\n }\n return value;\n}\n/**\n * Map internal class for point\n */\nvar Point = /** @class */ (function () {\n function Point(x, y) {\n this.x = x;\n this.y = y;\n }\n return Point;\n}());\nexport { Point };\n/**\n * Map internal class for min and max\n *\n */\nvar MinMax = /** @class */ (function () {\n function MinMax(min, max) {\n this.min = min;\n this.max = max;\n }\n return MinMax;\n}());\nexport { MinMax };\n/**\n * Map internal class locations\n */\nvar GeoLocation = /** @class */ (function () {\n function GeoLocation(latitude, longitude) {\n this.latitude = new MinMax(latitude.min, latitude.max);\n this.longitude = new MinMax(longitude.min, longitude.max);\n }\n return GeoLocation;\n}());\nexport { GeoLocation };\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('mapsmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'mapsmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Internal use of text options\n * @private\n */\nvar TextOption = /** @class */ (function () {\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n this.transform = '';\n this.baseLine = 'auto';\n this.id = id;\n this.x = x;\n this.y = y;\n this.anchor = anchor;\n this.text = text;\n this.transform = transform;\n this.baseLine = baseLine;\n }\n return TextOption;\n}());\nexport { TextOption };\n/**\n * Internal use of path options\n * @private\n */\nvar PathOption = /** @class */ (function () {\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n this.id = id;\n this.opacity = opacity;\n this.fill = fill;\n this.stroke = color;\n this['stroke-width'] = width;\n this['stroke-dasharray'] = dashArray;\n this.d = d;\n }\n return PathOption;\n}());\nexport { PathOption };\n/**\n * Internal use of rectangle options\n * @private\n */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect, rx, ry, transform, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity, dashArray) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n _this.rx = rx ? rx : 0;\n _this.ry = ry ? ry : 0;\n _this.transform = transform ? transform : '';\n _this['stroke-dasharray'] = dashArray;\n return _this;\n }\n return RectOption;\n}(PathOption));\nexport { RectOption };\n/**\n * Internal use of circle options\n * @private\n */\nvar CircleOption = /** @class */ (function (_super) {\n __extends(CircleOption, _super);\n function CircleOption(id, fill, border, opacity, cx, cy, r, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.cy = cy;\n _this.cx = cx;\n _this.r = r;\n _this['stroke-dasharray'] = dashArray;\n return _this;\n }\n return CircleOption;\n}(PathOption));\nexport { CircleOption };\n/**\n * Internal use of polygon options\n * @private\n */\nvar PolygonOption = /** @class */ (function (_super) {\n __extends(PolygonOption, _super);\n function PolygonOption(id, points, fill, width, color, opacity, dashArray) {\n if (opacity === void 0) { opacity = 1; }\n if (dashArray === void 0) { dashArray = ''; }\n var _this = _super.call(this, id, fill, width, color, opacity, dashArray) || this;\n _this.points = points;\n return _this;\n }\n return PolygonOption;\n}(PathOption));\nexport { PolygonOption };\n/**\n * Internal use of polyline options\n * @private\n */\nvar PolylineOption = /** @class */ (function (_super) {\n __extends(PolylineOption, _super);\n function PolylineOption(id, points, fill, width, color, opacity, dashArray) {\n if (opacity === void 0) { opacity = 1; }\n if (dashArray === void 0) { dashArray = ''; }\n return _super.call(this, id, points, fill, width, color, opacity, dashArray) || this;\n }\n return PolylineOption;\n}(PolygonOption));\nexport { PolylineOption };\n/**\n * Internal use of line options\n * @private\n */\nvar LineOption = /** @class */ (function (_super) {\n __extends(LineOption, _super);\n function LineOption(id, line, fill, width, color, opacity, dashArray) {\n if (opacity === void 0) { opacity = 1; }\n if (dashArray === void 0) { dashArray = ''; }\n var _this = _super.call(this, id, fill, width, color, opacity, dashArray) || this;\n _this.x1 = line.x1;\n _this.y1 = line.y1;\n _this.x2 = line.x2;\n _this.y2 = line.y2;\n return _this;\n }\n return LineOption;\n}(PathOption));\nexport { LineOption };\n/**\n * Internal use of line\n * @property\n */\nvar Line = /** @class */ (function () {\n function Line(x1, y1, x2, y2) {\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n }\n return Line;\n}());\nexport { Line };\n/**\n * Internal use of map location type\n * @private\n */\nvar MapLocation = /** @class */ (function () {\n function MapLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return MapLocation;\n}());\nexport { MapLocation };\n/**\n * Internal use of type rect\n * @private\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/**\n * Internal use for pattern creation.\n * @property\n */\nvar PatternOptions = /** @class */ (function () {\n function PatternOptions(id, x, y, width, height, patternUnits, patternContentUnits, patternTransform, href) {\n if (patternUnits === void 0) { patternUnits = 'userSpaceOnUse'; }\n if (patternContentUnits === void 0) { patternContentUnits = 'userSpaceOnUse'; }\n if (patternTransform === void 0) { patternTransform = ''; }\n if (href === void 0) { href = ''; }\n this.id = id;\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.patternUnits = patternUnits;\n this.patternContentUnits = patternContentUnits;\n this.patternTransform = patternTransform;\n this.href = href;\n }\n return PatternOptions;\n}());\nexport { PatternOptions };\n/**\n * Internal rendering of text\n * @private\n */\nexport function renderTextElement(options, font, color, parent, isMinus) {\n if (isMinus === void 0) { isMinus = false; }\n var renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine\n };\n var text = typeof options.text === 'string' ? options.text : isMinus ? options.text[options.text.length - 1] : options.text[0];\n var tspanElement;\n var renderer = new SvgRenderer('');\n var height;\n var htmlObject = renderer.createText(renderOptions, text);\n htmlObject.style['user-select'] = 'none';\n htmlObject.style['-moz-user-select'] = 'none';\n htmlObject.style['-webkit-touch-callout'] = 'none';\n htmlObject.style['-webkit-user-select'] = 'none';\n htmlObject.style['-khtml-user-select'] = 'none';\n htmlObject.style['-ms-user-select'] = 'none';\n htmlObject.style['-o-user-select'] = 'none';\n if (typeof options.text !== 'string' && options.text.length > 1) {\n for (var i = 1, len = options.text.length; i < len; i++) {\n height = (measureText(options.text[i], font).height);\n tspanElement = renderer.createTSpan({\n 'x': options.x, 'id': options.id,\n 'y': (options.y) + ((isMinus) ? -(i * height) : (i * height))\n }, isMinus ? options.text[options.text.length - (i + 1)] : options.text[i]);\n htmlObject.appendChild(tspanElement);\n }\n }\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * @private\n */\nexport function convertElement(element, markerId, data, index, mapObj) {\n var childElement = createElement('div', {\n id: markerId,\n styles: 'position: absolute;pointer-events: auto;'\n });\n var count = 0;\n while (element.length > 0) {\n element[count++].style.pointerEvents = 'none';\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}\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}\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 * @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 };\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}\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 for (var i = 0; i < length_1; i++) {\n var str = patternMatch[i];\n var len = str.length;\n var char = (str[0] === 'K') ? 'h' : str[0];\n var isNumber = void 0;\n var canUpdate = void 0;\n var charKey = datePartMatcher[char];\n var optional = (len === 2) ? '' : '?';\n if (isgmtTraversed) {\n gmtCorrection = zCorrectTemp;\n isgmtTraversed = false;\n }\n switch (char) {\n case 'E':\n case 'c':\n // tslint:disable-next-line\n var weekObject = parser.reverseObject(dependable.dateObject[base.days][standalone][base.monthIndex[len]]);\n regexString += '(' + Object.keys(weekObject).join('|') + ')';\n break;\n case 'M':\n case 'L':\n case 'd':\n case 'm':\n case 's':\n case 'h':\n case 'H':\n canUpdate = true;\n if ((char === 'M' || char === 'L') && len > 2) {\n // tslint:disable-next-line\n parseOptions[charKey] = parser.reverseObject(dependable.dateObject[month][standalone][base.monthIndex[len]]);\n /* tslint:disable no-any */\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n }\n else {\n isNumber = true;\n regexString += '(' + nRegx + nRegx + optional + ')';\n }\n if (char === 'h') {\n parseOptions.hour12 = true;\n }\n break;\n case 'y':\n canUpdate = isNumber = true;\n if (len === 2) {\n regexString += '(' + nRegx + nRegx + ')';\n }\n else {\n regexString += '(' + nRegx + '{' + len + ',})';\n }\n break;\n case 'a':\n canUpdate = true;\n parseOptions[charKey] = parser.reverseObject(getValue('dayPeriods.format.wide', dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n break;\n case 'G':\n canUpdate = true;\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n parseOptions[charKey] = parser.reverseObject(getValue('eras.' + eText, dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + '?)';\n break;\n case 'z':\n var tval = new Date().getTimezoneOffset();\n canUpdate = (tval !== 0);\n parseOptions[charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n var tzone = parseOptions[charKey];\n hourOnly = (len < 4);\n var hpattern = hourOnly ? '+H;-H' : tzone.hourFormat;\n regexString += '(' + this.parseTimeZoneRegx(hpattern, tzone, nRegx) + ')?';\n isgmtTraversed = true;\n zCorrectTemp = hourOnly ? 6 : 12;\n break;\n case '\\'':\n var iString = str.replace(/\\'/g, '');\n regexString += '(' + iString + ')?';\n break;\n default:\n regexString += '([\\\\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","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 }\n function setPropertyValue(args, inputObject) {\n if (!isNullOrUndefined(args.properties)) {\n for (var _i = 0, _a = Object.keys(args.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n setCssClass(args.properties.cssClass, [inputObject.container]);\n break;\n case 'enabled':\n setEnabled(args.properties.enabled, args.element);\n break;\n case 'enableRtl':\n setEnableRtl(args.properties.enableRtl, [inputObject.container]);\n break;\n case 'placeholder':\n setPlaceholder(args.properties.placeholder, args.element);\n break;\n case 'readonly':\n setReadonly(args.properties.readonly, args.element);\n break;\n }\n }\n }\n return inputObject;\n }\n function updateIconState(value, button) {\n if (value) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n function updateLabelState(value, label) {\n if (value) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n else {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function getParentNode(element) {\n var parentNode = element.parentNode;\n return parentNode;\n }\n /**\n * To create clear button.\n */\n function createClearButton(element, inputObject, initial, 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 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) {\n var disabledAttrs = { 'disabled': 'disabled', 'aria-disabled': 'true' };\n if (isEnable) {\n element.classList.remove(CLASSNAMES.DISABLE);\n removeAttributes(disabledAttrs, element);\n }\n else {\n element.classList.add(CLASSNAMES.DISABLE);\n addAttributes(disabledAttrs, element);\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setEnabled = setEnabled;\n function setClearButton(isClear, element, inputObject, initial, 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 { 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 : 10));\n _this.lastTapTime = new Date().getTime();\n EventHandler.remove(_this.element, Browser.touchMoveEvent, _this.moveEvent);\n EventHandler.remove(_this.element, Browser.touchEndEvent, _this.endEvent);\n 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, 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 }\n var node = this.element.childNodes[0];\n if (node && (this.iconPosition === 'Left')) {\n this.element.insertBefore(span, node);\n }\n else {\n this.element.appendChild(span);\n }\n }\n };\n Button.prototype.wireEvents = function () {\n if (this.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n };\n Button.prototype.unWireEvents = function () {\n if (this.isToggle) {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n }\n };\n Button.prototype.btnClickHandler = function () {\n if (this.element.classList.contains('e-active')) {\n this.element.classList.remove('e-active');\n }\n else {\n this.element.classList.add('e-active');\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n Button.prototype.destroy = function () {\n var span;\n var element = this.element;\n _super.prototype.destroy.call(this);\n removeClass([this.element], [cssClassName.PRIMARY, cssClassName.RTL, cssClassName.ICONBTN, 'e-success',\n 'e-info', 'e-danger', 'e-warning', 'e-flat', 'e-outline', 'e-small', 'e-bigger', 'e-active', 'e-round']);\n ['e-ripple', 'disabled'].forEach(function (value) {\n element.removeAttribute(value);\n });\n if (this.content) {\n element.innerHTML = element.innerHTML.replace(this.content, '');\n }\n span = element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.unWireEvents();\n 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 span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.setIconCss();\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n else {\n this.element.classList.remove(cssClassName.RTL);\n }\n break;\n case 'content':\n var node = getTextNode(this.element);\n if (!node) {\n this.element.classList.remove(cssClassName.ICONBTN);\n }\n this.element.innerHTML = newProp.content;\n this.setIconCss();\n break;\n case 'isToggle':\n if (newProp.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n else {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n removeClass([this.element], ['e-active']);\n }\n break;\n }\n }\n };\n __decorate([\n Property('Left')\n ], Button.prototype, \"iconPosition\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isPrimary\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isToggle\", void 0);\n Button = __decorate([\n NotifyPropertyChanges\n ], Button);\n return Button;\n}(Component));\nexport { Button };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Event, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, 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 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 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 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 };\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 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 CalendarBase.prototype.keyActionHandle = function (e, value) {\n var view = this.getViewNumber(this.currentView());\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n this.effect = '';\n switch (e.action) {\n case 'moveLeft':\n this.KeyboardNavigate(-1, view, e, this.max, this.min);\n e.preventDefault();\n break;\n case 'moveRight':\n this.KeyboardNavigate(1, view, e, this.max, this.min);\n e.preventDefault();\n break;\n case 'moveUp':\n if (view === 0) {\n this.KeyboardNavigate(-7, view, e, this.max, this.min); // move the current date to the previous seven days.\n }\n else {\n this.KeyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n e.preventDefault();\n break;\n case 'moveDown':\n if (view === 0) {\n this.KeyboardNavigate(7, view, e, this.max, this.min);\n }\n else {\n this.KeyboardNavigate(4, view, e, this.max, this.min);\n }\n e.preventDefault();\n break;\n case 'select':\n if (e.target === this.todayElement) {\n this.todayButtonClick(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), value);\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 this.renderMonths(e);\n e.preventDefault();\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate);\n detach(this.tableBodyElement);\n this.renderMonths(e);\n e.preventDefault();\n break;\n case 'pageUp':\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'pageDown':\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageUp':\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageDown':\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'controlHome':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n e.preventDefault();\n break;\n case 'controlEnd':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n e.preventDefault();\n break;\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n 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.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n case 1:\n this.addMonths(this.currentDate, number);\n if (this.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n case 0:\n this.addDay(this.currentDate, number, e, max, min);\n if (this.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n 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 CalendarBase.prototype.renderDays = function (currentDate, e, value) {\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 (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 (!otherMnthBool && !disabledCls && this.getDateVal(localDate, value)) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (currentDate.getDate() === localDate.getDate() && !otherMnthBool && !disabledCls) {\n addClass([tdEle], FOCUSEDDATE);\n }\n else {\n if (currentDate >= this.max && parseInt(tdEle.id, 0) === +this.max && !otherMnthBool && !disabledCls) {\n addClass([tdEle], FOCUSEDDATE);\n }\n if (currentDate <= this.min && parseInt(tdEle.id, 0) === +this.min && !otherMnthBool && !disabledCls) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n }\n if (date.getMonth() === new Date().getMonth() && date.getDate() === new Date().getDate()) {\n if (date.getFullYear() === new Date().getFullYear()) {\n addClass([tdEle], TODAY);\n }\n }\n tdEles.push(this.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.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) {\n var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n var timeOffset = Math.abs(lastDate.getTimezoneOffset() - this.firstDay(date).getTimezoneOffset());\n if (timeOffset) {\n lastDate.setHours(this.firstDay(date).getHours() + (timeOffset / 60));\n }\n return this.findLastDay(lastDate);\n };\n ;\n 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 && 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, value);\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, value);\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) {\n switch (view) {\n case 0:\n detach(this.tableBodyElement);\n this.renderMonths(e);\n break;\n case 1:\n detach(this.tableBodyElement);\n this.renderYears(e);\n break;\n case 2:\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n };\n /**\n * To get component name\n * @private\n */\n 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) {\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 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 = undefined;\n this.createContentFooter();\n }\n else {\n if (this.todayElement.classList.contains('e-disabled') && (this.footer) && (this.todayElement)) {\n removeClass([this.todayElement], DISABLED);\n }\n }\n break;\n case '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 CalendarBase.prototype.setValueUpdate = function () {\n detach(this.tableBodyElement);\n this.setProperties({ start: this.currentView() }, true);\n this.createContentBody();\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, value) {\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 this.setProperties({ value: new Date('' + date) }, true);\n this.currentDate = new Date('' + date);\n }\n var tableBodyElement = closest(element, '.' + ROOT);\n if (isNullOrUndefined(tableBodyElement)) {\n tableBodyElement = this.tableBodyElement;\n }\n if (!isNullOrUndefined(tableBodyElement.querySelector('.' + SELECTED))) {\n removeClass([tableBodyElement.querySelector('.' + SELECTED)], SELECTED);\n }\n if (!isNullOrUndefined(tableBodyElement.querySelector('.' + FOCUSEDDATE))) {\n removeClass([tableBodyElement.querySelector('.' + FOCUSEDDATE)], FOCUSEDDATE);\n }\n addClass([element], SELECTED);\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.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 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 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 _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);\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 return _super.prototype.renderDays.call(this, currentDate, e, this.value);\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 };\n this.changeHandler();\n };\n Calendar.prototype.clickHandler = function (e) {\n var eve = e.currentTarget;\n if (eve.classList.contains(OTHERMONTH)) {\n this.value = this.getIdValue(e, null);\n }\n _super.prototype.clickHandler.call(this, e, this.value);\n };\n Calendar.prototype.switchView = function (view, e) {\n _super.prototype.switchView.call(this, view, e);\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'];\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.validateDate();\n this.minMaxUpdate();\n _super.prototype.setValueUpdate.call(this);\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\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 Calendar.prototype.selectDate = function (e, date, element) {\n _super.prototype.selectDate.call(this, e, date, element, this.value);\n this.changedArgs = { value: this.value };\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.value !== Number.NaN && +this.value !== +this.previousDate) {\n this.changeEvent(e);\n }\n };\n __decorate([\n Property(null)\n ], Calendar.prototype, \"value\", 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, Event, Collection, L10n, Browser, Complex, compile } 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';\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 };\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 _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 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 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 this.dlgOverlay.style.display = 'none';\n !isNullOrUndefined(this.targetEle) ? removeClass([this.targetEle], SCROLL_DISABLED) :\n removeClass([document.body], SCROLL_DISABLED);\n }\n var closeAnimation = {\n name: this.animationSettings.effect + 'Out',\n duration: this.animationSettings.duration,\n delay: this.animationSettings.delay\n };\n this.animationSettings.effect === 'None' ? this.popupObj.hide() : this.popupObj.hide(closeAnimation);\n this.dialogOpen = false;\n 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 __decorate([\n Property('')\n ], Dialog.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"showCloseIcon\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"isModal\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"header\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"visible\", void 0);\n __decorate([\n Property('auto')\n ], Dialog.prototype, \"height\", void 0);\n __decorate([\n Property('100%')\n ], Dialog.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"cssClass\", void 0);\n __decorate([\n Property(1000)\n ], Dialog.prototype, \"zIndex\", void 0);\n __decorate([\n Property(null)\n ], Dialog.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"allowDragging\", void 0);\n __decorate([\n Collection([{}], ButtonProps)\n ], Dialog.prototype, \"buttons\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"closeOnEscape\", void 0);\n __decorate([\n Complex({}, AnimationSettings)\n ], Dialog.prototype, \"animationSettings\", void 0);\n __decorate([\n Complex({ X: 'center', Y: 'center' }, PositionData)\n ], Dialog.prototype, \"position\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"dragStop\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"overlayClick\", void 0);\n Dialog = __decorate([\n NotifyPropertyChanges\n ], Dialog);\n return Dialog;\n}(Component));\nexport { Dialog };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, Event, 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 /**\n * Core method to return the component name.\n * @private\n */\n Tooltip.prototype.getModuleName = function () {\n return 'tooltip';\n };\n /**\n * Returns the properties to be maintained in the persisted state.\n * @private\n */\n Tooltip.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Called internally, if any of the property value changed.\n * @private\n */\n Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n if (this.tooltipEle) {\n this.tooltipEle.style.width = formatUnit(newProp.width);\n }\n break;\n case 'height':\n if (this.tooltipEle) {\n this.tooltipEle.style.height = formatUnit(newProp.height);\n }\n break;\n case 'content':\n if (this.tooltipEle) {\n this.renderContent();\n }\n break;\n case 'opensOn':\n this.unwireEvents(oldProp.opensOn);\n this.wireEvents(newProp.opensOn);\n break;\n case 'position':\n this.formatPosition();\n var target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n if (this.tooltipEle && target) {\n var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n arrowInnerELe.style.top = arrowInnerELe.style.left = null;\n this.reposition(target);\n }\n break;\n case 'tipPointerPosition':\n var trgt = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n if (this.tooltipEle && trgt) {\n this.reposition(trgt);\n }\n break;\n case 'offsetX':\n if (this.tooltipEle) {\n var x = newProp.offsetX - oldProp.offsetX;\n this.tooltipEle.style.left = (parseInt(this.tooltipEle.style.left, 10) + (x)).toString() + 'px';\n }\n break;\n case 'offsetY':\n if (this.tooltipEle) {\n var y = newProp.offsetY - oldProp.offsetY;\n this.tooltipEle.style.top = (parseInt(this.tooltipEle.style.top, 10) + (y)).toString() + 'px';\n }\n break;\n case 'cssClass':\n if (this.tooltipEle) {\n if (oldProp.cssClass) {\n removeClass([this.tooltipEle], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.tooltipEle], newProp.cssClass.split(' '));\n }\n }\n break;\n case 'enableRtl':\n if (this.tooltipEle) {\n if (this.enableRtl) {\n addClass([this.tooltipEle], RTL);\n }\n else {\n removeClass([this.tooltipEle], RTL);\n }\n }\n break;\n }\n }\n };\n /**\n * It is used to show the Tooltip on the specified target with specific animation settings.\n * @param element Target element where the Tooltip is to be displayed.\n * @param animation Sets the specific animation, while showing the Tooltip on the screen.\n * @return {void}\n */\n Tooltip.prototype.open = function (element, animation) {\n if (animation === void 0) { animation = this.animation.open; }\n if (element.style.display === 'none') {\n return;\n }\n this.showTooltip(element, animation);\n };\n /**\n * It is used to hide the Tooltip with specific animation effect.\n * @param animation Sets the specific animation when hiding Tooltip from the screen.\n * @return {void}\n */\n Tooltip.prototype.close = function (animation) {\n if (animation === void 0) { animation = this.animation.close; }\n this.hideTooltip(animation);\n };\n /**\n * It is used to refresh the Tooltip content and its position.\n * @param target Target element where the Tooltip content or position needs to be refreshed.\n * @return {void}\n */\n Tooltip.prototype.refresh = function (target) {\n if (this.tooltipEle) {\n this.renderContent(target);\n }\n if (this.popupObj && target) {\n this.reposition(target);\n }\n };\n /**\n * It is used to destroy the Tooltip component.\n * @method destroy\n * @return {void}\n * @memberof Tooltip\n */\n Tooltip.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n removeClass([this.element], ROOT);\n this.unwireEvents(this.opensOn);\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n this.tooltipEle = null;\n this.popupObj = null;\n };\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"content\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"target\", void 0);\n __decorate([\n Property('TopCenter')\n ], Tooltip.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetY\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"showTipPointer\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"tipPointerPosition\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"opensOn\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"mouseTrail\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isSticky\", void 0);\n __decorate([\n Complex({}, Animation)\n ], Tooltip.prototype, \"animation\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"openDelay\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"closeDelay\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeRender\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeCollision\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"destroyed\", void 0);\n Tooltip = __decorate([\n NotifyPropertyChanges\n ], Tooltip);\n return Tooltip;\n}(Component));\nexport { Tooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Browser, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { 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 if (!isNullOrUndefined(oldProp.value) && !isNullOrUndefined(newProp.value)) {\n if (oldProp.value.toString() !== newProp.value.toString()) {\n this.setValue();\n this.refreshTooltip();\n if (this.type === 'Range') {\n if (oldProp.value[0] === newProp.value[0]) {\n this.activeHandle = 2;\n }\n else {\n this.activeHandle = 1;\n }\n }\n }\n }\n break;\n case 'min':\n case 'step':\n case 'max':\n this.setMinMaxValue();\n break;\n case 'tooltip':\n if (!isNullOrUndefined(newProp.tooltip) && !isNullOrUndefined(oldProp.tooltip)) {\n this.setTooltip();\n }\n break;\n case 'type':\n this.changeSliderType(oldProp.type);\n this.setZindex();\n break;\n case 'enableRtl':\n if (oldProp.enableRtl !== newProp.enableRtl && this.orientation !== 'Vertical') {\n this.rtl = oldProp.enableRtl;\n this.changeRtl();\n }\n break;\n case '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 } 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 CLEAR_ICON = 'e-file-remove-btn';\nvar REMOVE_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 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 '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('remove'));\n }\n else {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('delete'));\n }\n if (!this.autoUpload) {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n }\n }\n }\n };\n Uploader.prototype.reRenderFileList = function () {\n if (this.listParent) {\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.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.keyConfigs = {\n previous: 'shift+tab',\n enter: 'enter',\n next: 'tab'\n };\n };\n Uploader.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Return the module name of the component.\n */\n Uploader.prototype.getModuleName = function () {\n return 'uploader';\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Uploader.prototype.render = function () {\n this.renderBrowseButton();\n this.initializeUpload();\n this.wireEvents();\n this.setMultipleSelection();\n this.setExtensions(this.allowedExtensions);\n this.setRTL();\n this.renderPreLoadFiles();\n this.setControlStatus();\n };\n Uploader.prototype.renderBrowseButton = function () {\n this.browseButton = this.createElement('button', { className: 'e-css e-btn', attrs: { 'type': 'button' } });\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n }\n else {\n this.browseButton.appendChild(this.buttons.browse);\n }\n this.element.setAttribute('aria-label', 'Uploader');\n };\n Uploader.prototype.renderActionButtons = function () {\n this.element.setAttribute('tabindex', '-1');\n this.actionButtons = 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 }\n };\n Uploader.prototype.unBindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.remove(this.dropZoneElement, 'drop', this.dropElement);\n EventHandler.remove(this.dropZoneElement, 'dragover', this.dragHover);\n EventHandler.remove(this.dropZoneElement, 'dragleave', this.onDragLeave);\n }\n };\n Uploader.prototype.onDragLeave = function (e) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n };\n Uploader.prototype.dragHover = function (e) {\n if (!this.enabled) {\n return;\n }\n this.dropZoneElement.classList.add(DRAG_HOVER);\n e.preventDefault();\n e.stopPropagation();\n };\n Uploader.prototype.dropElement = function (e) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n this.onSelectFiles(e);\n e.preventDefault();\n e.stopPropagation();\n };\n Uploader.prototype.removeFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var selectedElement = args.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var liElement = this.fileList[index];\n var fileData = this.filesData[index];\n if (args.target.classList.contains(ABORT_ICON)) {\n if (args.target.classList.contains(DISABLED)) {\n return;\n }\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 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 }\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 var liElement = this.getLiElement(file);\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 if (!isNullOrUndefined(liElement) && !isNullOrUndefined(liElement.querySelector('.' + REMOVE_ICON))) {\n var spinnerTarget = liElement.querySelector('.' + REMOVE_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\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('.' + REMOVE_ICON))) {\n var spinnerTarget = liElement.querySelector('.' + REMOVE_ICON);\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n };\n Uploader.prototype.onSelectFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var fileData = [];\n var targetFiles;\n if (args.type === 'drop') {\n var files = args.dataTransfer.files;\n targetFiles = this.multiple ? this.sortFileList(files) : [files[0]];\n }\n else {\n targetFiles = [].slice.call(args.target.files);\n }\n if (!this.multiple) {\n this.clearData(true);\n targetFiles = [targetFiles[0]];\n }\n for (var i = 0; i < targetFiles.length; i++) {\n var file = targetFiles[i];\n var eventArgs_1 = {\n name: file.name,\n rawFile: file,\n size: file.size,\n status: this.localizedTexts('readyToUploadMessage'),\n type: this.getFileType(file.name),\n validationMessages: this.validatedFileSize(file.size),\n statusCode: '1'\n };\n eventArgs_1.status = eventArgs_1.validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n eventArgs_1.validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : eventArgs_1.status;\n if (eventArgs_1.validationMessages.minSize !== '' || eventArgs_1.validationMessages.maxSize !== '') {\n eventArgs_1.statusCode = '0';\n }\n fileData.push(eventArgs_1);\n }\n var eventArgs = {\n 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.checkExtension = function (files) {\n var dropFiles = files;\n if (this.allowedExtensions !== '') {\n var allowedExtensions = [];\n var extensions = this.allowedExtensions.split(',');\n for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) {\n var extension = extensions_1[_i];\n allowedExtensions.push(extension.trim().toLocaleLowerCase());\n }\n for (var i = 0; i < files.length; i++) {\n if (allowedExtensions.indexOf(('.' + files[i].type).toLocaleLowerCase()) === -1) {\n files[i].status = this.localizedTexts('invalidFileType');\n files[i].statusCode = '0';\n }\n }\n }\n return dropFiles;\n };\n Uploader.prototype.validatedFileSize = function (fileSize) {\n var minSizeError = '';\n var maxSizeError = '';\n if (fileSize < this.minFileSize) {\n minSizeError = this.localizedTexts('invalidMinFileSize');\n }\n else if (fileSize > this.maxFileSize) {\n maxSizeError = this.localizedTexts('invalidMaxFileSize');\n }\n else {\n minSizeError = '';\n maxSizeError = '';\n }\n var errorMessage = { minSize: minSizeError, maxSize: maxSizeError };\n return errorMessage;\n };\n Uploader.prototype.createCustomfileList = function (fileData) {\n this.createParentUL();\n for (var _i = 0, fileData_1 = fileData; _i < fileData_1.length; _i++) {\n var listItem = fileData_1[_i];\n var liElement = 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(REMOVE_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(REMOVE_ICON)) {\n iconElement.classList.add(CLEAR_ICON);\n }\n this.listParent.appendChild(liElement);\n this.fileList.push(liElement);\n this.truncateName(textElement);\n }\n }\n };\n Uploader.prototype.truncateName = function (name) {\n var nameElement = name;\n var text;\n if (nameElement.offsetWidth < nameElement.scrollWidth) {\n text = nameElement.textContent;\n nameElement.dataset.tail = text.slice(text.length - 10);\n }\n };\n Uploader.prototype.getFileType = function (name) {\n var extension;\n var index = name.lastIndexOf('.');\n if (index >= 0) {\n extension = name.substring(index + 1);\n }\n return extension ? extension : '';\n };\n Uploader.prototype.getFileNameOnly = function (name) {\n var type = this.getFileType(name);\n var names = name.split('.' + type);\n return type = names[0];\n };\n Uploader.prototype.setInitialAttributes = function () {\n if (this.initialAttr.accept) {\n this.element.setAttribute('accept', this.initialAttr.accept);\n }\n if (this.initialAttr.disabled) {\n this.element.setAttribute('disabled', 'disabled');\n }\n if (this.initialAttr.multiple) {\n var newAttr = document.createAttribute('multiple');\n this.element.setAttributeNode(newAttr);\n }\n };\n Uploader.prototype.filterfileList = function (files) {\n var filterFiles = [];\n var li;\n for (var i = 0; i < files.length; i++) {\n li = this.getLiElement(files[i]);\n if (!li.classList.contains(UPLOAD_SUCCESS)) {\n filterFiles.push(files[i]);\n }\n }\n return filterFiles;\n };\n Uploader.prototype.updateStatus = function (files, status, statusCode) {\n if (!(status === '' || isNullOrUndefined(status)) && !(statusCode === '' || isNullOrUndefined(statusCode))) {\n files.status = status;\n files.statusCode = statusCode;\n }\n var li = this.getLiElement(files);\n if (!isNullOrUndefined(li)) {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS)) && !((status === '' || isNullOrUndefined(status)))) {\n li.querySelector('.' + STATUS).textContent = status;\n }\n }\n return files;\n };\n Uploader.prototype.getLiElement = function (files) {\n var index = this.filesData.indexOf(files);\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 _this = this;\n var li = this.getLiElement(files);\n if (isNullOrUndefined(li) && (!customUI || isNullOrUndefined(customUI))) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n /* istanbul ignore next */\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 var spinnerTarget = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(li) && !isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(li.querySelector('.e-spinner-pane'));\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 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('.' + CLEAR_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(ABORT_ICON, UPLOAD_INPROGRESS);\n iconEle.setAttribute('title', this.localizedTexts('abort'));\n iconEle.classList.remove(CLEAR_ICON);\n }\n }\n var args = { e: e, operation: 'upload', file: this.updateStatus(files, this.localizedTexts('inProgress'), '3') };\n this.trigger('progress', args);\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('.' + CLEAR_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(CLEAR_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);\n };\n Uploader.prototype.reloadcanceledFile = function (e, file, liElement) {\n file.statusCode = '1';\n file.status = this.localizedTexts('readyToUploadMessage');\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 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(REMOVE_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('.' + CLEAR_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(CLEAR_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 }\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 }\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(REMOVE_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 };\n this.trigger('chunkFailure', eventArgs);\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(REMOVE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('delete'));\n }\n else {\n iconElement.classList.add(CLEAR_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 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 targetElement.nextElementSibling.classList.add(DISABLED);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n this.resumeUpload(metaData, e);\n targetElement.nextElementSibling.classList.remove(DISABLED);\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('.' + CLEAR_ICON) ? liElement.querySelector('.' + CLEAR_ICON) :\n liElement.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(clearIcon)) {\n clearIcon.classList.add(ABORT_ICON);\n clearIcon.setAttribute('title', this.localizedTexts('abort'));\n clearIcon.classList.remove(CLEAR_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_2 = function (i) {\n var ajax = new Ajax(this_1.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_1.element.getAttribute('name');\n formData.append(name_4, selectedFiles[i].rawFile, selectedFiles[i].name);\n if (chunkEnabled && selectedFiles[i].size > this_1.asyncSettings.chunkSize) {\n this_1.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_1 = this;\n for (var i = 0; i < selectedFiles.length; i++) {\n _loop_2(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) {\n var fileDataFiles = this.validateFileType(fileData);\n this.retryFailedFiles(fileDataFiles, fromcanceledStage);\n };\n Uploader.prototype.retryFailedFiles = function (fileData, fromcanceledStage) {\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 = this.fileList[this.filesData.indexOf(files[i])];\n this.reloadcanceledFile(null, files[i], liElement);\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 fileDataFiles = this.validateFileType(fileData);\n this.cancelUpload(fileDataFiles);\n };\n Uploader.prototype.cancelUpload = function (fileData) {\n var files = this.getFiles(fileData);\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 var liElement = this.getLiElement(files[i]);\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 }\n };\n __decorate([\n Complex({ saveUrl: '', removeUrl: '' }, AsyncSettings)\n ], Uploader.prototype, \"asyncSettings\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"multiple\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"autoUpload\", void 0);\n __decorate([\n Complex({}, ButtonsProps)\n ], Uploader.prototype, \"buttons\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(0)\n ], Uploader.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], Uploader.prototype, \"maxFileSize\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"dropArea\", void 0);\n __decorate([\n Collection([{}], FilesProp)\n ], Uploader.prototype, \"files\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"showFileList\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"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, cssClass: this.cssClass, content: this.content,\n disabled: this.disabled, enableRtl: this.enableRtl, enablePersistence: this.enablePersistence\n });\n this.button.appendTo(this.element);\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n this.setIconPositionTop();\n this.appendArrowSpan();\n this.createPopup();\n this.setActiveElem([this.element]);\n };\n DropDownButton.prototype.setIconPositionTop = function () {\n var iconSpan = this.element.querySelector('.e-icon-left');\n if (iconSpan && this.iconPosition === 'Top') {\n addClass([this.element], 'e-top-icon-btn');\n removeClass([iconSpan], 'e-icon-left');\n addClass([iconSpan], 'e-icon-top');\n }\n };\n DropDownButton.prototype.appendArrowSpan = function () {\n this.element.appendChild(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', 'disabled', 'enableRtl'];\n if (newProp.iconPosition === 'Left') {\n btnModel.push('iconPosition');\n }\n this.button.setProperties(getModel(newProp, btnModel));\n var popupElement = this.getPopUpElement();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'content':\n if (!this.element.querySelector('span.e-caret')) {\n this.appendArrowSpan();\n }\n break;\n case '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 'iconPosition':\n this.setIconPositionTop();\n break;\n case 'enableRtl':\n popupElement.classList.toggle(classNames.RTL);\n break;\n case 'target':\n this.target = newProp.target;\n detach(this.getULElement());\n popupElement.appendChild(this.getTargetElement());\n this.dropDown.content = this.getTargetElement();\n break;\n case 'items':\n this.dropDown.refresh();\n if (popupElement.classList.contains('e-popup-open')) {\n classList(popupElement, ['e-popup-close'], ['e-popup-open']);\n }\n break;\n }\n }\n };\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DropDownButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property('Left')\n ], DropDownButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Collection([], Item)\n ], DropDownButton.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"target\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"select\", void 0);\n DropDownButton = __decorate([\n NotifyPropertyChanges\n ], DropDownButton);\n return DropDownButton;\n}(Component));\nexport { DropDownButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Event, 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 content: this.content,\n disabled: this.disabled\n };\n this.primaryBtnObj = new Button(btnModel, this.element);\n this.element.classList.add('e-' + this.getModuleName());\n this.element.type = 'button';\n this.wrapper.appendChild(this.element);\n this.setIconPositionTop();\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, 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', 'cssClass', 'disabled', 'enableRtl'];\n if (newProp.iconPosition === 'Left') {\n model.push('iconPosition');\n }\n this.primaryBtnObj.setProperties(getModel(newProp, model));\n model = ['items', 'beforeOpen', 'beforeItemRender', 'select', 'open',\n 'close', 'cssClass', 'disabled', 'enableRtl'];\n this.secondaryBtnObj.setProperties(getModel(newProp, model));\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.wrapper], oldProp.cssClass.split(' '));\n }\n addClass([this.wrapper], newProp.cssClass.split(' '));\n break;\n case 'iconPosition':\n this.setIconPositionTop();\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.wrapper], RTL);\n }\n else {\n removeClass([this.wrapper], RTL);\n }\n break;\n }\n }\n };\n __decorate([\n Property('')\n ], SplitButton.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], SplitButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property('Left')\n ], SplitButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Collection([], Item)\n ], SplitButton.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"target\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"select\", void 0);\n SplitButton = __decorate([\n NotifyPropertyChanges\n ], SplitButton);\n return SplitButton;\n}(DropDownButton));\nexport { SplitButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(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 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 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 SELECT = 'e-selected';\nvar SPLITPREVIEW = 'e-split-preview';\nvar TILE = 'e-tile';\nvar TOHSV = 'e-to-hsv';\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 };\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.value : '#008000';\n this.element.value = value.slice(0, 7);\n if (this.mode === 'Picker') {\n value = this.roundValue(value);\n }\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 var wrapper = this.getWrapper();\n if ((this.isPicker() && !wrapper.classList.contains('e-hide-value')) || wrapper.classList.contains('e-show-value')) {\n this.createInput();\n }\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.popupClose.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 }, 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 }\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 (!beforeOpenArgs.cancel) {\n var popupEle = this.getPopupEle();\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 }\n }\n };\n ColorPicker.prototype.popupClose = function (args) {\n var beforeCloseArgs = { element: this.container, event: args.event, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n args.cancel = beforeCloseArgs.cancel;\n if (!beforeCloseArgs.cancel) {\n if (args.event && Browser.isDevice && args.event.target === this.modal) {\n args.cancel = true;\n }\n else {\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 }\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 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 tile = this.createElement('span', {\n className: TILE, attrs: { 'role': 'gridcell', 'aria-label': colors[i], 'aria-selected': 'false' }\n });\n this.trigger('beforeTileRender', { element: tile, presetName: key, value: colors[i] });\n row.appendChild(tile);\n if (this.value.slice(0, colors[i].length).toLowerCase() === colors[i].toLowerCase()) {\n this.addTileSelection(tile);\n palette.focus();\n }\n tile.style.backgroundColor = colors[i];\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 }, slider);\n slider = this.createElement('div', { className: 'e-opacity-slider' });\n sliderWrapper.appendChild(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 }, 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('e-hide-value')) {\n getInstance(select('.e-opacity-value', 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.getNumericTextBoxModel = function (value, label, max) {\n var _this = this;\n return {\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 };\n ColorPicker.prototype.createInput = function (child) {\n if (child === void 0) { child = 2; }\n var inputWrap = this.createElement('div', { className: INPUTWRAPPER });\n this.appendElement(inputWrap, child);\n var container = this.createElement('div', { className: 'e-input-container' });\n inputWrap.appendChild(container);\n inputWrap.appendChild(this.createElement('button', { className: 'e-icons e-btn e-flat e-icon-btn ' + FORMATSWITCH + ' ' + TOHSV }));\n var hexInput = this.createElement('input', {\n className: HEX,\n attrs: { 'maxlength': '7', 'spellcheck': 'false' }\n });\n if (!this.isPicker()) {\n Input.setReadonly(true, hexInput);\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 }\n }, this.createElement);\n Input.setValue(this.value.slice(0, 7), hexInput);\n var numericInput;\n var label = 'RGB';\n var clsName = ['rh', 'gs', 'bv'];\n for (var i = 0; i < 3; i++) {\n numericInput = new NumericTextBox(this.getNumericTextBoxModel(this.rgb[i], label[i], 255), container.appendChild(this.createElement('input', { className: 'e-' + clsName[i] + '-value' })));\n }\n numericInput = new NumericTextBox(this.getNumericTextBoxModel(this.rgb[3] * 100, 'A', 100), container.appendChild(this.createElement('input', { className: 'e-opacity-value' })));\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.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 if (!this.getWrapper().classList.contains('e-hide-value')) {\n Input.setValue(value.substr(0, 7), select('.' + HEX, this.container));\n if (select('.' + FORMATSWITCH, this.container).classList.contains(TOHSV)) {\n this.updateValue(this.rgb, false);\n }\n else {\n this.updateValue(this.hsv, false);\n }\n }\n };\n ColorPicker.prototype.updatePreview = function (value) {\n this.updateOpacitySliderBg();\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 converted color value type.\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 if (!this.getWrapper().classList.contains('e-hide-value')) {\n this.addvalueEventHandler();\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.addInputEvent = function () {\n EventHandler.add(select('.' + HEX, this.container), 'input', this.inputHandler, this);\n };\n ColorPicker.prototype.addvalueEventHandler = function () {\n this.addInputEvent();\n EventHandler.add(select('.' + FORMATSWITCH, this.container), 'click', this.formatSwitchHandler, 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);\n }\n };\n ColorPicker.prototype.enterKeyHandler = function (value) {\n this.triggerChangeEvent(value);\n if (!this.inline) {\n this.toggle();\n this.splitBtn.element.focus();\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.toggle();\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);\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('e-hide-value')) {\n detach(select('.' + INPUTWRAPPER, this.container));\n }\n detach(this.getHsvContainer());\n this.createPalette();\n this.firstPaletteFocus();\n if (this.getWrapper().classList.contains('e-show-value')) {\n this.createInput(1);\n }\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 = '0px';\n popupEle.style.top = '0px';\n this.getPopupInst().refreshPosition(this.splitBtn.element.parentElement);\n }\n };\n ColorPicker.prototype.formatSwitchHandler = function (e) {\n var target = e.target;\n if (target.classList.contains(TOHSV)) {\n this.updateValue(this.hsv, true, 3, [360, 100, 100]);\n target.classList.remove(TOHSV);\n }\n else {\n this.updateValue(this.rgb, true, 2);\n target.classList.add(TOHSV);\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 (hsv[3] !== this.hsv[3]) {\n this.opacitySlider.setProperties({ 'value': hsv[3] * 100 }, true);\n this.opacitySlider.refresh();\n }\n this.updateOpacitySliderBg();\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('e-show-value')) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n }\n if (!this.inline && !this.showButtons) {\n this.toggle();\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);\n }\n else {\n if (this.getWrapper().classList.contains('e-show-value') && 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('e-show-value')) {\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 if (!wrapper.classList.contains('e-hide-value')) {\n this.createInput();\n }\n this.refreshPopupPos();\n this.wireEvents();\n };\n ColorPicker.prototype.ctrlBtnClick = function (ele) {\n if (ele.classList.contains(APPLY)) {\n var cValue = this.rgbToHex(this.rgb);\n this.triggerChangeEvent(cValue);\n }\n if (!this.inline) {\n this.toggle();\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 : '');\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('e-show-value')) {\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 this.opacitySlider.destroy();\n this.hueSlider = null;\n this.opacitySlider = null;\n var tooltipInst = this.getTooltipInst();\n tooltipInst.close();\n tooltipInst.destroy();\n this.tooltipEle = null;\n }\n };\n ColorPicker.prototype.isPopupOpen = function () {\n return this.getPopupEle().classList.contains('e-popup-open');\n };\n ColorPicker.prototype.unWireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.remove(dragHandler, 'keydown', this.pickerKeyDown);\n 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 if (!this.getWrapper().classList.contains('e-hide-value')) {\n EventHandler.remove(select('.' + FORMATSWITCH, this.container), 'click', this.formatSwitchHandler);\n EventHandler.remove(select('.' + HEX, this.container), 'input', this.inputHandler);\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.updateOpacitySliderBg();\n this.updateInput(newProp);\n }\n else {\n this.removeTileSelection();\n this.addTileSelection(select('span[aria-label=\"' + 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 /**\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 for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'inline':\n if (newProp.inline) {\n this.getWrapper().appendChild(this.container);\n this.splitBtn.destroy();\n detach(this.element.nextElementSibling);\n if (!this.container.children.length) {\n this.createWidget();\n }\n }\n else {\n this.destroyOtherComp();\n this.unWireEvents();\n this.container.innerHTML = '';\n this.createSplitBtn();\n }\n break;\n case 'cssClass':\n if (this.isPicker()) {\n if (wrapper.classList.contains('e-hide-value')) {\n this.createInput();\n this.addvalueEventHandler();\n }\n newProp.cssClass.split(' ').forEach(function (cls) {\n if (cls === 'e-hide-value') {\n remove(select('.' + INPUTWRAPPER, _this.container));\n }\n });\n }\n else {\n if (wrapper.classList.contains('e-show-value')) {\n remove(select('.' + INPUTWRAPPER, this.container));\n }\n newProp.cssClass.split(' ').forEach(function (cls) {\n if (cls === 'e-show-value') {\n _this.createInput(1);\n _this.addInputEvent();\n }\n });\n }\n this.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enableRtl':\n if (this.isPicker()) {\n this.hueSlider.enableRtl = newProp.enableRtl;\n this.opacitySlider.enableRtl = newProp.enableRtl;\n this.setInputEleProps(newProp.enableRtl);\n }\n this.changeRtlProps(newProp.enableRtl);\n break;\n case 'disabled':\n this.changeDisabledProp(newProp.disabled);\n break;\n case 'value':\n this.changeValueProp(newProp.value);\n break;\n case 'showButtons':\n this.changeShowBtnProps(newProp.showButtons);\n break;\n case 'mode':\n if (newProp.mode === 'Picker') {\n this.switchToPicker();\n }\n else {\n this.switchToPalette();\n }\n break;\n case 'modeSwitcher':\n this.changeModeSwitcherProp(newProp.modeSwitcher);\n break;\n case 'columns':\n case 'presetColors':\n if (!this.isPicker()) {\n this.changePaletteProps();\n }\n break;\n case 'noColor':\n if (newProp.noColor) {\n if (this.mode === 'Palette' && !this.modeSwitcher) {\n this.setNoColor();\n }\n }\n else {\n this.changePaletteProps();\n }\n break;\n }\n }\n };\n __decorate([\n Property('#008000')\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 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 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};\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 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 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 = this.globalize.parseDate(this.inputElement.value, dateOptions);\n if (this.strictMode && date) {\n Input.setValue(this.globalize.formatDate(date, dateOptions), this.inputElement, this.floatLabelType, this.showClearButton);\n if (this.inputElement.value !== this.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 = 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 * This method used to navigate to the month/year/decade view of the DatePicker.\n * @param {string} view - Specifies the view of the calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n */\n DatePicker.prototype.navigateTo = function (view, date) {\n if (this.calendarElement) {\n // calls the Calendar navigateTo public method\n _super.prototype.navigateTo.call(this, view, date);\n }\n };\n /**\n * To destroy the widget.\n * @returns void\n */\n DatePicker.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.keyboardModules.destroy();\n if (this.popupObj && this.popupObj.element.classList.contains(POPUP)) {\n _super.prototype.destroy.call(this);\n }\n var ariaAttrs = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-disabled': 'true',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n };\n 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 = 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) && !(+this.value >= +this.min && +this.value <= +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, \"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 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 return {\n type: 'DELETE',\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : '') + '(' + value + ')'\n };\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns this\n */\n ODataAdaptor.prototype.update = function (dm, keyField, value, tableName, query, original) {\n if (this.options.updateType === 'PATCH' && !isNullOrUndefined(original)) {\n value = this.compareAndRemove(value, original, keyField);\n }\n return {\n type: this.options.updateType,\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : '') + '(' + value[keyField] + ')',\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 if (Object.keys(data[prop]).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, null, null, 0);\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.curUL.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() === resultJSON.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 if (this.fields.groupBy && this.curViewDS[index - 1] &&\n this.curViewDS[index - 1].isHeader &&\n (this.curViewDS[index - 1])\n .items.length === 1) {\n detach(this.getLiFromObjOrElement(this.curViewDS[index - 1]));\n }\n if (this.getLiFromObjOrElement(obj)) {\n detach(this.getLiFromObjOrElement(obj));\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(createEl, 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(createEl, 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 this.initValue = this.valueWithMinutes = null;\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n if (this.isNullOrEmpty(time)) {\n this.initValue = null;\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.initValue = this.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 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 if (!Browser.isDevice) {\n addClass([this.inputWrapper.container], FOCUS);\n }\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 };\n TimePicker.prototype.checkValueChange = function (event, isNavigation) {\n if (!this.strictMode && !this.validateState(this.valueWithMinutes)) {\n this.initValue = this.valueWithMinutes = null;\n this.setProperties({ value: this.compareFormatChange(this.inputElement.value) }, true);\n this.prevValue = this.inputElement.value;\n if (+this.prevDate !== +this.value) {\n this.changeEvent(event);\n }\n }\n else {\n if (!isNavigation) {\n if ((this.prevValue !== this.inputElement.value) || isNullOrUndefined(this.checkDateValue(this.value))) {\n this.valueProcess(event, this.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 if (!Browser.isDevice) {\n event.preventDefault();\n }\n var target = event.target;\n if (!(closest(target, '#' + this.popupObj.element.id)) && target !== this.inputElement\n && target !== (this.inputWrapper && this.inputWrapper.buttons[0]) &&\n target !== (this.inputWrapper && this.inputWrapper.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 if (!Browser.isDevice) {\n this.inputElement.focus();\n }\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 if (!Browser.isDevice) {\n addClass([this.inputWrapper.container], FOCUS);\n }\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 };\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 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.inputChangeHandler = function (e) {\n e.stopPropagation();\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 e.preventDefault();\n this.targetElement = null;\n if (this.isPopupOpen()) {\n this.applyFunction(e);\n }\n else {\n this.isRangeIconClicked = true;\n if (!this.isMobile) {\n this.inputWrapper.container.children[0].focus();\n }\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 addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n };\n DateRangePicker.prototype.checkHtmlAttributes = function () {\n this.globalize = new Internationalization(this.locale);\n var attributes;\n attributes = ['startDate', 'endDate', 'minDays', 'maxDays', 'min', 'max', 'disabled',\n 'readonly', 'style', 'name', 'placeholder', 'type'];\n var format = { format: this.format, type: 'date', skeleton: 'yMd' };\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var disabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ enabled: !disabled }, true);\n break;\n case 'readonly':\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'placeholder':\n if (isNullOrUndefined(this.placeholder) || this.placeholder.trim() === '') {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, true);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'min':\n if (isNullOrUndefined(this.min) || +this.min === +new Date(1900, 0, 1)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), true);\n }\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'max':\n if (isNullOrUndefined(this.max) || +this.max === +new Date(2099, 11, 31)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), true);\n }\n break;\n case 'startDate':\n if (isNullOrUndefined(this.startDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.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 };\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 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 };\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 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, 0, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveLeft':\n date = new Date(+this.currentDate);\n this.addDay(date, -1, e, max, min);\n if (!isLeftCalendar && +date === +leftLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.KeyboardNavigate(-1, 0, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveUp':\n date = new Date(+this.currentDate);\n this.addDay(date, -7, e, max, min);\n if (!isLeftCalendar && +date <= +leftLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.KeyboardNavigate(-7, 0, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveDown':\n date = new Date(+this.currentDate);\n this.addDay(date, 7, e, max, min);\n if (isLeftCalendar && +date >= +rightLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.KeyboardNavigate(7, 0, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.keyNavigation(ele, e);\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.keyNavigation(ele, e);\n break;\n }\n };\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.keyInputHandler = function (e) {\n var date;\n var rightDateLimit = new Date(this.rightCalCurrentDate.getFullYear(), this.rightCalCurrentDate.getMonth(), 1);\n var leftDateLimit = new Date(this.leftCalCurrentDate.getFullYear(), this.leftCalCurrentDate.getMonth() + 1, 0);\n var ele = closest(e.target, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n var isLeftCalendar = ele.classList.contains(LEFTCALENDER);\n this.updateCalendarElement(ele);\n var focusedDate = ele.querySelector('tr td.' + FOCUSDATE);\n var startDate = ele.querySelector('tr td.' + STARTDATE);\n var endDate = ele.querySelector('tr td.' + ENDDATE);\n if (!isNullOrUndefined(focusedDate)) {\n this.currentDate = this.currentDate;\n }\n else if (!isNullOrUndefined(endDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.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 if (!this.isMobile) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n break;\n case 'select':\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : startDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n this.selectRange(e, (element));\n }\n e.preventDefault();\n break;\n case 'controlHome':\n var yearDate = new Date(this.currentDate.getFullYear(), 0, 1);\n if (!isLeftCalendar && +yearDate < +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n this.keyNavigation(ele, e);\n break;\n case 'controlEnd':\n yearDate = new Date(this.currentDate.getFullYear(), 11, 31);\n if (isLeftCalendar && +yearDate > +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n this.keyNavigation(ele, e);\n break;\n case 'pageUp':\n date = new Date(+this.currentDate);\n this.addMonths(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'pageDown':\n date = new Date(+this.currentDate);\n this.addMonths(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageUp':\n date = new Date(+this.currentDate);\n this.addYears(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageDown':\n date = new Date(+this.currentDate);\n this.addYears(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftTab':\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetElement.setAttribute('tabindex', '0');\n this.presetElement.focus();\n this.removeFocusedDate();\n }\n e.preventDefault();\n break;\n 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 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 event.preventDefault();\n var date;\n date = (event instanceof MouseEvent || event instanceof TouchEvent) ? this.getIdValue(event, null) : this.getIdValue(null, element);\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 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 };\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.table = this.leftCalendar.querySelector('table');\n this.headerTitleElement = this.leftCalendar.querySelector('.e-title');\n this.tableBodyElement = this.leftCalendar.querySelector('tbody');\n this.tableHeadElement = this.leftCalendar.querySelector('thead');\n this.contentElement = this.leftCalendar.querySelector('.e-content');\n this.updateCalendarElement(this.leftCalendar);\n _super.prototype.navigateTitle.call(this, e);\n this.updateNavIcons();\n }\n };\n DateRangePicker.prototype.rightNavTitle = function (e) {\n if (this.isPopupOpen()) {\n this.calendarElement = this.rightCalendar;\n this.table = this.rightCalendar.querySelector('table');\n this.headerTitleElement = this.rightCalendar.querySelector('.e-title');\n this.tableBodyElement = this.rightCalendar.querySelector('tbody');\n this.tableHeadElement = this.rightCalendar.querySelector('thead');\n this.contentElement = this.rightCalendar.querySelector('.e-content');\n this.updateCalendarElement(this.rightCalendar);\n _super.prototype.navigateTitle.call(this, e);\n this.updateNavIcons();\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 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 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 if (!this.isMobile) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n eve.preventDefault();\n if (!this.isMobile && 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 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 if (!this.isMobile) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\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 if (!this.isMobile) {\n this.preventFocus = true;\n this.inputElement.focus();\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.hide.bind(_this),\n keyConfigs: { tab: 'tab' }\n });\n }\n if (!isNullOrUndefined(_this.leftCalendar)) {\n if (!_this.isRangeIconClicked) {\n _this.calendarFocus();\n }\n }\n if (!isNullOrUndefined(_this.presetElement)) {\n _this.presetKeyboardModule = new KeyboardEvents(_this.presetElement, {\n eventName: 'keydown',\n keyAction: _this.presetKeyActionHandler.bind(_this),\n keyConfigs: _this.presetKeyConfig\n });\n if (isNullOrUndefined(_this.leftCalendar)) {\n _this.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.isMobile) {\n if (_this.isRangeIconClicked) {\n _this.inputWrapper.container.children[1].focus();\n }\n }\n if (!isUndefined(_this.presets[0].start && _this.presets[0].end && _this.presets[0].label)) {\n _this.unWireListEvents();\n }\n if (!isNullOrUndefined(_this.popupObj)) {\n 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 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 }\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' &&\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 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 this.setProperties({ value: [this.startDate, this.endDate] }, true);\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 };\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 };\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 if (!this.isMobile) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\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 };\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 /**\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 = newProp.startDate;\n this.setValue();\n this.setDate();\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.setValue();\n this.setDate();\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('en-US')\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 (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 if (!Browser.isDevice) {\n this.inputElement.focus();\n }\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 (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 if (!Browser.isDevice) {\n event.preventDefault();\n }\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 if (!Browser.isDevice) {\n this.inputElement.focus();\n }\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 };\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 if (Browser.isDevice) {\n removeClass([this.inputWrapper.container], INPUTFOCUS);\n }\n };\n DateTimePicker.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n ;\n DateTimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.setProperties({ min: this.validateValue(date.min) }, true);\n }\n else {\n this.setProperties({ max: this.validateValue(date.max) }, true);\n }\n };\n DateTimePicker.prototype.checkAttributes = function () {\n var attributes = ['style', 'name', 'step', 'disabled', 'readonly', 'value', 'min', 'max', 'placeholder', 'type'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'readonly':\n var readonly = !isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'placeholder':\n this.placeholder = this.inputElement.getAttribute(prop);\n break;\n case 'min':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ min: value }, true);\n }\n break;\n case 'disabled':\n var enabled = isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ enabled: enabled }, true);\n break;\n case 'max':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ max: value }, true);\n }\n break;\n }\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, \"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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Complex, Collection } from '@syncfusion/ej2-base';\nimport { Theme } from '../../common/model/theme';\nimport { Font, Border } from '../../common/model/base';\n/**\n * Configures the Annotation for chart.\n */\nvar ChartAnnotationSettings = /** @class */ (function (_super) {\n __extends(ChartAnnotationSettings, _super);\n function ChartAnnotationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('0')\n ], ChartAnnotationSettings.prototype, \"x\", void 0);\n __decorate([\n Property('0')\n ], ChartAnnotationSettings.prototype, \"y\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"content\", void 0);\n __decorate([\n Property('Center')\n ], ChartAnnotationSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Pixel')\n ], ChartAnnotationSettings.prototype, \"coordinateUnits\", void 0);\n __decorate([\n Property('Chart')\n ], ChartAnnotationSettings.prototype, \"region\", void 0);\n __decorate([\n Property('Middle')\n ], ChartAnnotationSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"xAxisName\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"yAxisName\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"description\", void 0);\n return ChartAnnotationSettings;\n}(ChildProperty));\nexport { ChartAnnotationSettings };\n/**\n * label border properties.\n */\nvar LabelBorder = /** @class */ (function (_super) {\n __extends(LabelBorder, _super);\n function LabelBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], LabelBorder.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], LabelBorder.prototype, \"width\", void 0);\n __decorate([\n Property('Rectangle')\n ], LabelBorder.prototype, \"type\", void 0);\n return LabelBorder;\n}(ChildProperty));\nexport { LabelBorder };\n/**\n * categories for multi level labels\n */\nvar MultiLevelCategories = /** @class */ (function (_super) {\n __extends(MultiLevelCategories, _super);\n function MultiLevelCategories() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"end\", void 0);\n __decorate([\n Property('')\n ], MultiLevelCategories.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"maximumTextWidth\", void 0);\n return MultiLevelCategories;\n}(ChildProperty));\nexport { MultiLevelCategories };\n/**\n * Strip line properties\n */\nvar StripLineSettings = /** @class */ (function (_super) {\n __extends(StripLineSettings, _super);\n function StripLineSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], StripLineSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(false)\n ], StripLineSettings.prototype, \"startFromAxis\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"end\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"size\", void 0);\n __decorate([\n Property('#808080')\n ], StripLineSettings.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], StripLineSettings.prototype, \"border\", void 0);\n __decorate([\n Property('')\n ], StripLineSettings.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"rotation\", void 0);\n __decorate([\n Property('Middle')\n ], StripLineSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Middle')\n ], StripLineSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Complex(Theme.stripLineLabelFont, Font)\n ], StripLineSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Behind')\n ], StripLineSettings.prototype, \"zIndex\", void 0);\n __decorate([\n Property(1)\n ], StripLineSettings.prototype, \"opacity\", void 0);\n return StripLineSettings;\n}(ChildProperty));\nexport { StripLineSettings };\n/**\n * MultiLevelLabels properties\n */\nvar MultiLevelLabels = /** @class */ (function (_super) {\n __extends(MultiLevelLabels, _super);\n function MultiLevelLabels() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Center')\n ], MultiLevelLabels.prototype, \"alignment\", void 0);\n __decorate([\n Property('Wrap')\n ], MultiLevelLabels.prototype, \"overflow\", void 0);\n __decorate([\n Complex(Theme.axisLabelFont, Font)\n ], MultiLevelLabels.prototype, \"textStyle\", void 0);\n __decorate([\n Complex({ color: null, width: 1, type: 'Rectangle' }, LabelBorder)\n ], MultiLevelLabels.prototype, \"border\", void 0);\n __decorate([\n Collection([], MultiLevelCategories)\n ], MultiLevelLabels.prototype, \"categories\", void 0);\n return MultiLevelLabels;\n}(ChildProperty));\nexport { MultiLevelLabels };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty, Collection, extend } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../../common/model/base';\nimport { Size, Rect, measureText, rotateTextSize, firstToLowerCase, valueToCoefficient, inside } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { Double } from '../axis/double-axis';\nimport { Theme } from '../../common/model/theme';\nimport { 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 function Axis() {\n /**\n * Options to customize the axis label.\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.visibleLabels = [];\n /** @private */\n _this.series = [];\n /** @private */\n _this.rect = new Rect(undefined, undefined, 0, 0);\n /** @private */\n _this.axisBottomLine = null;\n /** @private */\n _this.intervalDivs = [10, 5, 2, 1];\n /** @private */\n _this.angle = _this.labelRotation;\n /** @private */\n _this.isStack100 = false;\n /** @private */\n _this.crossAt = null;\n /** @private */\n _this.updatedRect = null;\n /** @private */\n _this.multiLevelLabelHeight = 0;\n /** @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 Complex({}, MajorTickLines)\n ], Axis.prototype, \"majorTickLines\", void 0);\n __decorate([\n Complex({}, MinorTickLines)\n ], Axis.prototype, \"minorTickLines\", void 0);\n __decorate([\n Complex({}, MajorGridLines)\n ], Axis.prototype, \"majorGridLines\", void 0);\n __decorate([\n Complex({}, MinorGridLines)\n ], Axis.prototype, \"minorGridLines\", void 0);\n __decorate([\n Complex({}, AxisLine)\n ], Axis.prototype, \"lineStyle\", void 0);\n __decorate([\n Property('Trim')\n ], Axis.prototype, \"labelIntersectAction\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isInversed\", void 0);\n __decorate([\n Property(100)\n ], Axis.prototype, \"coefficient\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"startAngle\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"description\", void 0);\n __decorate([\n Property(2)\n ], Axis.prototype, \"tabIndex\", void 0);\n __decorate([\n Collection([], StripLineSettings)\n ], Axis.prototype, \"stripLines\", void 0);\n __decorate([\n Collection([], MultiLevelLabels)\n ], Axis.prototype, \"multiLevelLabels\", void 0);\n __decorate([\n Complex({ color: null, width: 0, type: 'Rectangle' }, LabelBorder)\n ], Axis.prototype, \"border\", void 0);\n return Axis;\n}(ChildProperty));\nexport { Axis };\n/** @private */\nvar VisibleLabels = /** @class */ (function () {\n function VisibleLabels(text, value, labelStyle, size, index) {\n if (size === void 0) { size = new Size(0, 0); }\n if (index === void 0) { index = 1; }\n this.text = text;\n this.originalText = text;\n this.value = value;\n this.labelStyle = labelStyle;\n this.size = size;\n this.index = 1;\n }\n return VisibleLabels;\n}());\nexport { VisibleLabels };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { subtractThickness, valueToCoefficient, sum, subArray, TextOption, inside, measureText } from '../../common/utils/helper';\nimport { Size, Rect, Thickness, PathOption, logBase, createZoomingLabels, getElement, rotateTextSize } from '../../common/utils/helper';\nimport { textElement, textTrim } from '../../common/utils/helper';\n/**\n * Specifies the Cartesian Axis Layout.\n */\nvar axisPadding = 10;\nvar CartesianAxisLayoutPanel = /** @class */ (function () {\n /** @private */\n function CartesianAxisLayoutPanel(chartModule) {\n this.chart = chartModule;\n this.padding = 5;\n }\n /**\n * Measure the axis size.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.measureAxis = function (rect) {\n var chart = this.chart;\n this.crossAt(chart);\n this.seriesClipRect = new Rect(rect.x, rect.y, rect.width, rect.height);\n this.initialClipRect = rect;\n this.leftSize = 0;\n this.rightSize = 0;\n this.topSize = 0;\n this.bottomSize = 0;\n //Measure Axis size with initial Rect\n this.measureRowAxis(chart, this.initialClipRect);\n this.initialClipRect = subtractThickness(this.initialClipRect, new Thickness(this.leftSize, this.rightSize, 0, 0));\n this.measureColumnAxis(chart, this.initialClipRect);\n this.initialClipRect = subtractThickness(this.initialClipRect, new Thickness(0, 0, this.topSize, this.bottomSize));\n if (!this.chart.delayRedraw) {\n this.calculateAxisSize(this.initialClipRect);\n }\n this.leftSize = 0;\n this.rightSize = 0;\n this.topSize = 0;\n this.bottomSize = 0;\n //Measure Axis size with series Rect\n this.measureRowAxis(chart, this.initialClipRect);\n this.seriesClipRect = subtractThickness(this.seriesClipRect, new Thickness(this.leftSize, this.rightSize, 0, 0));\n this.measureColumnAxis(chart, this.initialClipRect);\n this.seriesClipRect = subtractThickness(this.seriesClipRect, new Thickness(0, 0, this.topSize, this.bottomSize));\n if (!this.chart.delayRedraw) {\n chart.refreshAxis();\n this.calculateAxisSize(this.seriesClipRect);\n }\n };\n CartesianAxisLayoutPanel.prototype.measureRowAxis = function (chart, rect) {\n var row;\n this.calculateRowSize(rect);\n for (var _i = 0, _a = chart.rows; _i < _a.length; _i++) {\n var item = _a[_i];\n row = item;\n row.nearSizes = [];\n row.farSizes = [];\n this.arrangeAxis(row);\n this.measureDefinition(row, chart, new Size(chart.availableSize.width, row.computedHeight), rect);\n if (this.leftSize < sum(row.nearSizes)) {\n this.leftSize = sum(row.nearSizes);\n }\n if (this.rightSize < sum(row.farSizes)) {\n this.rightSize = sum(row.farSizes);\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.measureColumnAxis = function (chart, rect) {\n var column;\n this.calculateColumnSize(rect);\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var item = _a[_i];\n column = item;\n column.farSizes = [];\n column.nearSizes = [];\n this.arrangeAxis(column);\n this.measureDefinition(column, chart, new Size(column.computedWidth, chart.availableSize.height), rect);\n if (this.bottomSize < sum(column.nearSizes)) {\n this.bottomSize = sum(column.nearSizes);\n }\n if (this.topSize < sum(column.farSizes)) {\n this.topSize = sum(column.farSizes);\n }\n }\n };\n /**\n * Measure the column and row in chart.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.measureDefinition = function (definition, chart, size, clipRect) {\n var axis;\n var axisType;\n for (var _i = 0, _a = definition.axes; _i < _a.length; _i++) {\n var axis_1 = _a[_i];\n axis_1.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 chart.svgObject.appendChild(axisElement);\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 var currentScrollSvg = axis.zoomingScrollBar.svgObject;\n if (currentScrollSvg && currentScrollSvg.childElementCount) {\n chart.scrollElement.replaceChild(axis.zoomingScrollBar.render(), currentScrollSvg);\n }\n else {\n if (!chart.scrollElement) {\n chart.scrollElement = createElement('div', { id: chart.element.id + '_scrollElement' });\n }\n chart.scrollElement.appendChild(axis.zoomingScrollBar.render());\n }\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);\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('aria-label', axis.description || axis.title);\n element.setAttribute('tabindex', axis.tabIndex.toString());\n };\n CartesianAxisLayoutPanel.prototype.drawXAxisGridLine = function (axis, index, parent, rect) {\n var chart = this.chart;\n var tempInterval;\n var pointX = 0;\n var majorGrid = '';\n var majorTick = '';\n var minorGird = '';\n var minorTick = '';\n var minorDirection;\n var tickSize = (axis.opposedPosition) ? -axis.majorTickLines.height : axis.majorTickLines.height;\n var axisLineSize = (axis.opposedPosition) ? -axis.lineStyle.width / 2 : axis.lineStyle.width / 2;\n var 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 minorGird = minorDirection[0];\n minorTick = minorDirection[1];\n }\n }\n this.renderGridLine(axis, index, majorGrid, minorGird);\n this.renderTickLine(axis, index, majorTick, minorTick, parent);\n };\n CartesianAxisLayoutPanel.prototype.drawAxisMinorLine = function (axis, tempInterval, minorGird, minorTick, rect, labelIndex) {\n var value = tempInterval;\n var coor = 0;\n var position = 0;\n var range = axis.visibleRange;\n var isTickInside = axis.tickPosition === 'Inside';\n var direction = [];\n var tickSize = axis.opposedPosition ? -axis.minorTickLines.height : axis.minorTickLines.height;\n var logStart;\n var logEnd;\n var logInterval = 1;\n var logPosition = 1;\n var ticksX = isTickInside ? (rect.y - tickSize) : (rect.y + tickSize);\n var ticksY = isTickInside ? (rect.x + tickSize) : (rect.x - tickSize);\n if (axis.valueType === 'Logarithmic') {\n logStart = Math.pow(axis.logBase, value - range.interval);\n logEnd = Math.pow(axis.logBase, value);\n logInterval = (logEnd - logStart) / (axis.minorTicksPerInterval + 1);\n logPosition = logStart + logInterval;\n }\n if (axis.orientation === 'Horizontal') {\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value = this.findLogNumeric(axis, logPosition, logInterval, value, labelIndex);\n logPosition += logInterval;\n if (inside(value, range)) {\n position = ((value - range.min) / (range.max - range.min));\n position = Math.ceil((axis.isInversed ? (1 - position) : position) * rect.width);\n coor = (Math.floor(position + rect.x));\n minorGird = minorGird.concat('M' + ' ' + coor + ' ' + (this.seriesClipRect.y)\n + 'L ' + coor + ' ' + (this.seriesClipRect.y + this.seriesClipRect.height));\n coor = (Math.floor(position + rect.x));\n minorTick = minorTick.concat('M' + ' ' + coor + ' ' + (rect.y)\n + 'L ' + coor + ' ' + ticksX);\n }\n }\n }\n else {\n tickSize = axis.opposedPosition ? axis.minorTickLines.height : -axis.minorTickLines.height;\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value = this.findLogNumeric(axis, logPosition, logInterval, value, labelIndex);\n if (inside(value, range)) {\n position = Math.ceil(((value - range.min) / (range.max - range.min)) * rect.height) * -1;\n coor = (Math.floor(position + rect.y + rect.height));\n minorGird = minorGird.concat('M' + ' ' + (this.seriesClipRect.x) + ' ' + coor\n + 'L ' + (this.seriesClipRect.x + this.seriesClipRect.width) + ' ' + coor);\n coor = (Math.floor(position + rect.y + rect.height));\n minorTick = minorTick.concat('M' + ' ' + rect.x + ' ' + coor + 'L ' + ticksY + ' ' + coor);\n }\n logPosition += logInterval;\n }\n }\n direction.push(minorGird);\n direction.push(minorTick);\n return direction;\n };\n CartesianAxisLayoutPanel.prototype.findLogNumeric = function (axis, logPosition, logInterval, value, labelIndex) {\n var range = axis.visibleRange;\n if (axis.valueType === 'Logarithmic') {\n value = logBase(logPosition, axis.logBase);\n }\n else if (axis.valueType === 'DateTime') {\n value += axis.dateTimeInterval / (axis.minorTicksPerInterval + 1);\n }\n else if (axis.valueType === 'DateTimeCategory') {\n var padding = axis.labelPlacement === 'BetweenTicks' ? 0.5 : 0;\n value += ((axis.visibleLabels[labelIndex + 1] ?\n axis.visibleLabels[labelIndex + 1].value - padding : axis.visibleRange.max) -\n (axis.visibleLabels[labelIndex] ?\n axis.visibleLabels[labelIndex].value - padding : axis.visibleRange.min)) /\n (axis.minorTicksPerInterval + 1);\n }\n else {\n value += range.interval / (axis.minorTicksPerInterval + 1);\n }\n return value;\n };\n /**\n * To render the axis label.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawXAxisLabels = function (axis, index, parent, rect) {\n var chart = this.chart;\n var pointX = 0;\n var pointY = 0;\n var elementSize;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n var labelPosition = axis.labelPosition;\n var islabelInside = axis.labelPosition === 'Inside';\n var isTickInside = axis.tickPosition === 'Inside';\n var isOpposed = axis.opposedPosition;\n var tickSpace = axis.labelPosition === axis.tickPosition ? axis.majorTickLines.height : 0;\n var labelPadding;\n var padding = tickSpace + this.padding + axis.lineStyle.width / 2;\n var rotateSize;\n var diffHeight;\n var angle;\n var anglePadding = ((axis.angle === 90 || axis.angle === -90)) ? -2 : 0;\n var options;\n var yLocation;\n var previousEnd = axis.isInversed ? (rect.x + rect.width) : rect.x;\n var width = 0;\n var length = axis.visibleLabels.length;\n var intervalLength;\n var label;\n 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')\n && axis.angle === 0 && elementSize.width > intervalLength) ? intervalLength : elementSize.width;\n pointX -= width / 2;\n if (islabelInside && axis.angle) {\n pointY = isOpposed ? (rect.y + padding) : (rect.y - padding);\n }\n else {\n labelPadding = (isOpposed && !islabelInside) || (!isOpposed && islabelInside) ?\n -(padding + scrollBarHeight + (axis.angle ? (3 * (elementSize.height / 4) + (2 * axis.maxLabelSize.height / 5)) :\n (label.index > 1 ? (2 * (elementSize.height / 4)) : 0)))\n : padding + scrollBarHeight + (axis.angle ? (3 * (elementSize.height / 4)) + (2 * axis.maxLabelSize.height / 5)\n : (3 * (elementSize.height / 4)));\n pointY = (rect.y + (labelPadding * label.index));\n }\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY, '');\n if (axis.edgeLabelPlacement) {\n switch (axis.edgeLabelPlacement) {\n case 'None':\n break;\n case 'Hide':\n if (((i === 0 || (axis.isInversed && i === len - 1)) && options.x < rect.x) ||\n ((i === len - 1 || (axis.isInversed && i === 0)) && (options.x + width > rect.x + rect.width))) {\n continue;\n }\n break;\n case 'Shift':\n if ((i === 0 || (axis.isInversed && i === len - 1)) && options.x < rect.x) {\n intervalLength -= (rect.x - options.x);\n options.x = pointX = rect.x;\n }\n else if ((i === len - 1 || (axis.isInversed && i === 0)) && ((options.x + width) > rect.x + rect.width)) {\n if (elementSize.width > intervalLength && axis.labelIntersectAction === 'Trim') {\n intervalLength -= (options.x + width - (rect.x + rect.width));\n }\n else {\n intervalLength = width;\n }\n options.x = pointX = rect.x + rect.width - intervalLength;\n }\n break;\n }\n }\n options.text = this.findAxisLabel(axis, label.text, intervalLength);\n if (axis.angle % 360 === 0 && axis.labelIntersectAction === 'Hide' && i !== 0 &&\n (!axis.isInversed ? options.x <= previousEnd : options.x + width >= previousEnd)) {\n continue;\n }\n previousEnd = axis.isInversed ? options.x : options.x + width;\n if (axis.angle !== 0) {\n angle = (axis.angle > 360) ? axis.angle % 360 : axis.angle;\n rotateSize = rotateTextSize(axis.labelStyle, label.text, angle, chart);\n diffHeight = islabelInside ? rotateSize.height :\n axis.maxLabelSize.height - Math.ceil(rotateSize.height - elementSize.height);\n yLocation = axis.opposedPosition ? diffHeight / 2 : -diffHeight / 2;\n options.transform = 'rotate(' + angle + ',' + (pointX + width / 2 + anglePadding) + ','\n + (pointY + yLocation) + ')';\n options.y += yLocation;\n }\n textElement(options, 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) ? 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 } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { StackValues, RectOption } 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';\n/**\n * Configures the data label in the series.\n */\nvar DataLabelSettings = /** @class */ (function (_super) {\n __extends(DataLabelSettings, _super);\n function DataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], DataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], DataLabelSettings.prototype, \"name\", void 0);\n __decorate([\n Property('transparent')\n ], DataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], DataLabelSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property('Auto')\n ], DataLabelSettings.prototype, \"position\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"rx\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"ry\", void 0);\n __decorate([\n Property('Center')\n ], DataLabelSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex({ width: null, color: null }, Border)\n ], DataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ left: 5, right: 5, top: 5, bottom: 5 }, Margin)\n ], DataLabelSettings.prototype, \"margin\", void 0);\n __decorate([\n Complex({ size: '11px', color: null }, Font)\n ], DataLabelSettings.prototype, \"font\", void 0);\n __decorate([\n Property(null)\n ], DataLabelSettings.prototype, \"template\", void 0);\n return DataLabelSettings;\n}(ChildProperty));\nexport { DataLabelSettings };\n/**\n * Configures the marker in the series.\n */\nvar MarkerSettings = /** @class */ (function (_super) {\n __extends(MarkerSettings, _super);\n function MarkerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], MarkerSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('Circle')\n ], MarkerSettings.prototype, \"shape\", void 0);\n __decorate([\n Property('')\n ], MarkerSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property(5)\n ], MarkerSettings.prototype, \"height\", void 0);\n __decorate([\n Property(5)\n ], MarkerSettings.prototype, \"width\", void 0);\n __decorate([\n Complex({ width: 2, color: null }, Border)\n ], MarkerSettings.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], MarkerSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], MarkerSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, DataLabelSettings)\n ], MarkerSettings.prototype, \"dataLabel\", void 0);\n return MarkerSettings;\n}(ChildProperty));\nexport { MarkerSettings };\n/**\n * Points model for the series.\n * @private\n */\nvar Points = /** @class */ (function () {\n function Points() {\n this.symbolLocations = null;\n this.regions = null;\n this.regionData = null;\n this.marker = {\n visible: true\n };\n }\n return Points;\n}());\nexport { Points };\n/**\n * Defines the behavior of the Trendlines\n */\nvar Trendline = /** @class */ (function (_super) {\n __extends(Trendline, _super);\n function Trendline() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n return _this;\n }\n /** @private */\n Trendline.prototype.setDataSource = function (series, chart) {\n if (series) {\n this.points = series.points;\n }\n var type = firstToLowerCase(this.type);\n chart.trendLineModule.initDataSource(this, chart);\n chart.visibleSeriesCount++;\n };\n __decorate([\n Property('')\n ], Trendline.prototype, \"name\", void 0);\n __decorate([\n Property('Linear')\n ], Trendline.prototype, \"type\", void 0);\n __decorate([\n Property(2)\n ], Trendline.prototype, \"period\", void 0);\n __decorate([\n Property(2)\n ], Trendline.prototype, \"polynomialOrder\", void 0);\n __decorate([\n Property(0)\n ], Trendline.prototype, \"backwardForecast\", void 0);\n __decorate([\n Property(0)\n ], Trendline.prototype, \"forwardForecast\", void 0);\n __decorate([\n Complex({}, Animation)\n ], Trendline.prototype, \"animation\", void 0);\n __decorate([\n Complex({}, MarkerSettings)\n ], Trendline.prototype, \"marker\", void 0);\n __decorate([\n Property(true)\n ], Trendline.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property(null)\n ], Trendline.prototype, \"intercept\", void 0);\n __decorate([\n Property('')\n ], Trendline.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], Trendline.prototype, \"width\", void 0);\n __decorate([\n Property('SeriesType')\n ], Trendline.prototype, \"legendShape\", void 0);\n return Trendline;\n}(ChildProperty));\nexport { Trendline };\n/**\n * Configures Error bar in series.\n */\nvar ErrorBarCapSettings = /** @class */ (function (_super) {\n __extends(ErrorBarCapSettings, _super);\n function ErrorBarCapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], ErrorBarCapSettings.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], ErrorBarCapSettings.prototype, \"length\", void 0);\n __decorate([\n Property(null)\n ], ErrorBarCapSettings.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarCapSettings.prototype, \"opacity\", void 0);\n return ErrorBarCapSettings;\n}(ChildProperty));\nexport { ErrorBarCapSettings };\nvar ChartSegment = /** @class */ (function (_super) {\n __extends(ChartSegment, _super);\n function ChartSegment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ChartSegment.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], ChartSegment.prototype, \"color\", void 0);\n __decorate([\n Property('0')\n ], ChartSegment.prototype, \"dashArray\", void 0);\n return ChartSegment;\n}(ChildProperty));\nexport { ChartSegment };\nvar ErrorBarSettings = /** @class */ (function (_super) {\n __extends(ErrorBarSettings, _super);\n function ErrorBarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ErrorBarSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('Fixed')\n ], ErrorBarSettings.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ErrorBarSettings.prototype, \"direction\", void 0);\n __decorate([\n Property('Vertical')\n ], ErrorBarSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(null)\n ], ErrorBarSettings.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"verticalError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalError\", void 0);\n __decorate([\n Property(3)\n ], ErrorBarSettings.prototype, \"verticalPositiveError\", void 0);\n __decorate([\n Property(3)\n ], ErrorBarSettings.prototype, \"verticalNegativeError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalPositiveError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalNegativeError\", void 0);\n __decorate([\n Complex(null, ErrorBarCapSettings)\n ], ErrorBarSettings.prototype, \"errorBarCap\", void 0);\n return ErrorBarSettings;\n}(ChildProperty));\nexport { ErrorBarSettings };\n/**\n * Defines the common behavior of Series and Technical Indicators\n */\nvar SeriesBase = /** @class */ (function (_super) {\n __extends(SeriesBase, _super);\n function SeriesBase() {\n /**\n * The DataSource field that contains the x value.\n * It is applicable for series and technical indicators\n * @default ''\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.currentViewData = [];\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n /** @private */\n _this.seriesType = 'XY';\n return _this;\n }\n /**\n * Process data for the series.\n * @hidden\n */\n SeriesBase.prototype.processJsonData = function () {\n var i = 0;\n var 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 && (this.type === 'Waterfall' || this.type === 'Histogram')) {\n this.currentViewData = this.chart[firstToLowerCase(this.type) + 'SeriesModule'].\n processInternalData(this.currentViewData, this);\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({\n result: dateSource, count: dateSource.length\n }, chart, false);\n return;\n }\n var dataManager = this.dataModule.getData(this.dataModule.generateQuery().requiresCount());\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, chart); });\n };\n SeriesBase.prototype.dataManagerSuccess = function (e, chart, isRemoteData) {\n if (isRemoteData === void 0) { isRemoteData = true; }\n this.currentViewData = e.result !== '' ? e.result : [];\n if (this instanceof Series) {\n var argsData = {\n name: seriesRender, series: this, data: this.currentViewData, fill: this.interior\n };\n this.chart.trigger(seriesRender, argsData);\n this.interior = argsData.fill;\n this.currentViewData = argsData.data;\n }\n this.processJsonData();\n this.recordsCount = e.count;\n this.refreshChart(isRemoteData);\n };\n SeriesBase.prototype.refreshChart = function (isRemoteData) {\n var chart = this.chart;\n if (this instanceof Series) {\n chart.visibleSeriesCount += isRemoteData ? 1 : 0;\n }\n chart.refreshTechnicalIndicator(this);\n if (this instanceof Series && this.category !== 'TrendLine') {\n for (var _i = 0, _a = this.trendlines; _i < _a.length; _i++) {\n var trendline = _a[_i];\n trendline.setDataSource(this, chart);\n }\n }\n //if (chart.visibleSeries.length === (chart.visibleSeriesCount - chart.indicators.length)) {\n if (chart.visibleSeries.length === (chart.visibleSeriesCount)) {\n chart.refreshBound();\n chart.trigger('loaded', { chart: chart });\n }\n if (this instanceof Series) {\n chart.visibleSeriesCount += isRemoteData ? 0 : 1;\n }\n };\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"xName\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"high\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"low\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"open\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"close\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"volume\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"pointColorMapping\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"xAxisName\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"yAxisName\", void 0);\n __decorate([\n Complex(null, Animation)\n ], SeriesBase.prototype, \"animation\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], SeriesBase.prototype, \"width\", void 0);\n __decorate([\n Property('0')\n ], SeriesBase.prototype, \"dashArray\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], SeriesBase.prototype, \"query\", void 0);\n __decorate([\n Collection([], ChartSegment)\n ], SeriesBase.prototype, \"segments\", void 0);\n __decorate([\n Property('X')\n ], SeriesBase.prototype, \"segmentAxis\", void 0);\n return SeriesBase;\n}(ChildProperty));\nexport { SeriesBase };\n/**\n * Configures the series in charts.\n */\nvar Series = /** @class */ (function (_super) {\n __extends(Series, _super);\n // tslint:disable-next-line:no-any\n function Series(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n _this.visibleSeriesCount = 0;\n /** @private */\n _this.category = 'Series';\n /** @private */\n _this.isRectSeries = false;\n /** @private */\n _this.drawPoints = [];\n /** @private */\n _this.delayedAnimation = false;\n return _this;\n }\n /**\n * Refresh the axis label.\n * @return {boolean}\n * @private\n */\n Series.prototype.refreshAxisLabel = function () {\n if (this.xAxis.valueType !== 'Category') {\n return null;\n }\n this.xAxis.labels = [];\n for (var _i = 0, _a = this.xAxis.series; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.visible) {\n item.xMin = Infinity;\n item.xMax = -Infinity;\n for (var _b = 0, _c = item.points; _b < _c.length; _b++) {\n var point = _c[_b];\n item.pushCategoryData(point, point.index, point.x);\n item.xMin = Math.min(item.xMin, point.xValue);\n item.xMax = Math.max(item.xMax, point.xValue);\n }\n }\n }\n };\n /**\n * To get the series collection.\n * @return {void}\n * @private\n */\n Series.prototype.findSeriesCollection = function (column, row, isStack) {\n var seriesCollection = [];\n for (var _i = 0, _a = row.axes; _i < _a.length; _i++) {\n var rowAxis = _a[_i];\n for (var _b = 0, _c = rowAxis.series; _b < _c.length; _b++) {\n var rowSeries = _c[_b];\n for (var _d = 0, _e = column.axes; _d < _e.length; _d++) {\n var axis = _e[_d];\n for (var _f = 0, _g = axis.series; _f < _g.length; _f++) {\n var series = _g[_f];\n if (series === rowSeries && series.visible && this.rectSeriesInChart(series, isStack)) {\n seriesCollection.push(series);\n }\n }\n }\n }\n }\n return seriesCollection;\n };\n /**\n * To get the column type series.\n * @return {void}\n * @private\n */\n Series.prototype.rectSeriesInChart = function (series, isStack) {\n var type = (series.type).toLowerCase();\n return (type.indexOf('column') !== -1 || type.indexOf('bar') !== -1 || type.indexOf('histogram') !== -1 ||\n type.indexOf('hiloopenclose') !== -1 || type.indexOf('candle') !== -1 ||\n type.indexOf('hilo') !== -1 || series.drawType.indexOf('Column') !== -1 ||\n type.indexOf('waterfall') !== -1 || type.indexOf('boxandwhisker') !== -1 || isStack);\n };\n /**\n * To calculate the stacked values.\n * @return {void}\n * @private\n */\n Series.prototype.calculateStackedValue = function (isStacking100, chart) {\n var axisSeries;\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var columnItem = _a[_i];\n for (var _b = 0, _c = chart.rows; _b < _c.length; _b++) {\n var item = _c[_b];\n this.calculateStackingValues(this.findSeriesCollection(columnItem, item, true), isStacking100);\n }\n }\n };\n Series.prototype.calculateStackingValues = function (seriesCollection, isStacking100) {\n var startValues;\n var endValues;\n var yValues = [];\n var lastPositive = [];\n var lastNegative = [];\n var stackingGroup;\n var lastValue;\n var value;\n var frequencies = [];\n if (isStacking100) {\n frequencies = this.findFrequencies(seriesCollection);\n }\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n if (series.type.indexOf('Stacking') !== -1 || (series.drawType.indexOf('Stacking') !== -1 &&\n (series.chart.chartAreaType === 'PolarRadar'))) {\n stackingGroup = (series.type.indexOf('StackingArea') !== -1) ? 'StackingArea100' : series.stackingGroup;\n if (!lastPositive[stackingGroup]) {\n lastPositive[stackingGroup] = [];\n lastNegative[stackingGroup] = [];\n }\n yValues = series.yData;\n startValues = [];\n endValues = [];\n for (var j = 0, pointsLength = series.points.length; j < pointsLength; j++) {\n lastValue = 0;\n value = yValues[j];\n if (lastPositive[stackingGroup][series.points[j].xValue] === undefined) {\n lastPositive[stackingGroup][series.points[j].xValue] = 0;\n }\n if (lastNegative[stackingGroup][series.points[j].xValue] === undefined) {\n lastNegative[stackingGroup][series.points[j].xValue] = 0;\n }\n if (isStacking100) {\n value = value / frequencies[stackingGroup][series.points[j].xValue] * 100;\n value = !isNaN(value) ? value : 0;\n series.points[j].percent = value.toFixed(2);\n }\n if (value >= 0) {\n lastValue = lastPositive[stackingGroup][series.points[j].xValue];\n lastPositive[stackingGroup][series.points[j].xValue] += value;\n }\n else {\n lastValue = lastNegative[stackingGroup][series.points[j].xValue];\n lastNegative[stackingGroup][series.points[j].xValue] += value;\n }\n startValues.push(lastValue);\n endValues.push(value + lastValue);\n if (isStacking100 && (endValues[j] > 100)) {\n endValues[j] = 100;\n }\n }\n series.stackedValues = new StackValues(startValues, endValues);\n series.yMin = Math.min.apply(0, startValues);\n series.yMax = Math.max.apply(0, endValues);\n if (series.yMin > Math.min.apply(0, endValues)) {\n series.yMin = (isStacking100) ? -100 : Math.min.apply(0, endValues);\n }\n if (series.yMax < Math.max.apply(0, startValues)) {\n series.yMax = 0;\n }\n }\n }\n };\n Series.prototype.findFrequencies = function (seriesCollection) {\n var frequencies = [];\n var stackingGroup;\n for (var _i = 0, seriesCollection_2 = seriesCollection; _i < seriesCollection_2.length; _i++) {\n var series = seriesCollection_2[_i];\n series.yAxis.isStack100 = series.type.indexOf('100') !== -1 ? true : false;\n if (series.type.indexOf('Stacking') !== -1) {\n stackingGroup = (series.type.indexOf('StackingArea') !== -1) ? 'StackingArea100' : series.stackingGroup;\n if (!frequencies[stackingGroup]) {\n frequencies[stackingGroup] = [];\n }\n for (var j = 0, pointsLength = series.points.length; j < pointsLength; j++) {\n if (frequencies[stackingGroup][series.points[j].xValue] === undefined) {\n frequencies[stackingGroup][series.points[j].xValue] = 0;\n }\n if (series.yData[j] > 0) {\n frequencies[stackingGroup][series.points[j].xValue] += series.yData[j];\n }\n else {\n frequencies[stackingGroup][series.points[j].xValue] -= series.yData[j];\n }\n }\n }\n }\n return frequencies;\n };\n /* private dataManagerFailure(e: { result: Object[] }): void {\n this.currentViewData = [];\n this.refreshChart();\n }*/\n /** @private */\n Series.prototype.renderSeries = function (chart, index) {\n var seriesType = firstToLowerCase(this.type);\n if (seriesType.indexOf('100') !== -1) {\n seriesType = seriesType.replace('100', '');\n }\n if (chart[seriesType + 'SeriesModule']) {\n if (this.category !== 'Indicator' && this.category !== 'TrendLine') {\n this.createSeriesElements(chart);\n }\n chart[seriesType + 'SeriesModule'].render(this, this.xAxis, this.yAxis, chart.requireInvertedAxis);\n if (this.category !== 'Indicator') {\n if (this.errorBar.visible) {\n this.chart.errorBarModule.render(this);\n }\n if (this.marker.dataLabel.visible) {\n chart.dataLabelModule.render(this, this.chart, this.marker.dataLabel);\n }\n this.appendSeriesElement(chart.seriesElements, chart);\n }\n this.performAnimation(chart, seriesType, this.errorBar, this.marker, this.marker.dataLabel);\n }\n };\n /**\n * To create seris element.\n * @return {void}\n * @private\n */\n Series.prototype.createSeriesElements = function (chart) {\n if (this.category !== 'Indicator') {\n var elementId = chart.element.id;\n var xAxisRect = this.xAxis.rect;\n // 8 for extend border value 5 for extend size value\n var explodeValue = this.marker.border.width + 8 + 5;\n var yAxisRect = this.yAxis.rect;\n var marker = this.marker;\n var render = chart.renderer;\n var index = this.index;\n var markerHeight = (this.type === 'Scatter') ? (this.marker.height + explodeValue) / 2 : 0;\n var markerWidth = (this.type === 'Scatter') ? (this.marker.width + explodeValue) / 2 : 0;\n if (chart.chartAreaType === 'PolarRadar') {\n this.clipRectElement = render.drawCircularClipPath(new CircleOption(elementId + '_ChartSeriesClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, this.clipRect.width / 2 + this.clipRect.x, this.clipRect.height / 2 + this.clipRect.y, chart.radius));\n }\n else {\n this.clipRectElement = render.drawClipPath(new RectOption(elementId + '_ChartSeriesClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: -markerWidth, y: -markerHeight,\n width: this.clipRect.width + markerWidth * 2,\n height: this.clipRect.height + markerHeight * 2\n }));\n }\n var transform = void 0;\n transform = chart.chartAreaType === 'Cartesian' ? 'translate(' + this.clipRect.x + ',' + (this.clipRect.y) + ')' : '';\n this.symbolElement = null;\n this.seriesElement = render.createGroup({\n 'id': elementId + 'SeriesGroup' + index,\n 'transform': transform,\n 'clip-path': 'url(#' + elementId + '_ChartSeriesClipRect_' + index + ')'\n });\n this.seriesElement.appendChild(this.clipRectElement);\n }\n };\n /**\n * To append the series.\n * @return {void}\n * @private\n */\n Series.prototype.appendSeriesElement = function (element, chart) {\n var marker = this.marker;\n var dataLabel = marker.dataLabel;\n if (this.category !== 'TrendLine') {\n chart.seriesElements.appendChild(this.seriesElement);\n var errorBar = this.errorBar;\n if (errorBar.visible) {\n if (chart.chartAreaType === 'PolarRadar') {\n chart.seriesElements.appendChild(this.seriesElement);\n }\n else {\n chart.seriesElements.appendChild(this.errorBarElement);\n }\n }\n if (this.type === 'Scatter' || this.type === 'Bubble') {\n chart.seriesElements.appendChild(this.seriesElement);\n }\n }\n if (marker.visible && ((chart.chartAreaType === 'Cartesian' && (!this.isRectSeries || this.type === 'BoxAndWhisker'))\n || ((this.drawType !== 'Scatter' && !this.isRectSeries) && chart.chartAreaType === 'PolarRadar')) &&\n this.type !== 'Scatter' && this.type !== 'Bubble') {\n chart.seriesElements.appendChild(this.symbolElement);\n }\n if (dataLabel.visible) {\n chart.dataLabelElements.appendChild(this.shapeElement);\n chart.dataLabelElements.appendChild(this.textElement);\n }\n if (chart.dataLabelElements.hasChildNodes()) {\n chart.seriesElements.appendChild(chart.dataLabelElements);\n }\n };\n /**\n * To perform animation for chart series.\n * @return {void}\n * @private\n */\n Series.prototype.performAnimation = function (chart, type, errorBar, marker, dataLabel) {\n if (this.animation.enable && chart.animateSeries) {\n chart[type + 'SeriesModule'].doAnimation(this);\n if (errorBar.visible) {\n chart.errorBarModule.doErrorBarAnimation(this);\n }\n if (marker.visible) {\n chart.markerRender.doMarkerAnimation(this);\n }\n if (dataLabel.visible) {\n chart.dataLabelModule.doDataLabelAnimation(this);\n }\n }\n };\n /**\n * To set border color for empty point\n * @private\n */\n Series.prototype.setPointColor = function (point, color) {\n color = point.interior || color;\n return point.isEmpty ? (this.emptyPointSettings.fill || color) : color;\n };\n /**\n * To set border color for empty point\n * @private\n */\n Series.prototype.setBorderColor = function (point, border) {\n border.width = point.isEmpty ? (this.emptyPointSettings.border.width || border.width) : border.width;\n border.color = point.isEmpty ? (this.emptyPointSettings.border.color || border.color) : border.color;\n return border;\n };\n __decorate([\n Property('')\n ], Series.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"yName\", void 0);\n __decorate([\n Property('Line')\n ], Series.prototype, \"drawType\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"isClosed\", void 0);\n __decorate([\n Property('#2ecd71')\n ], Series.prototype, \"bearFillColor\", void 0);\n __decorate([\n Property('#e74c3d')\n ], Series.prototype, \"bullFillColor\", void 0);\n __decorate([\n Property(false)\n ], Series.prototype, \"enableSolidCandles\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"size\", void 0);\n __decorate([\n Property(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('')\n ], Series.prototype, \"tooltipMappingName\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property('SeriesType')\n ], Series.prototype, \"legendShape\", void 0);\n __decorate([\n Property(null)\n ], Series.prototype, \"selectionStyle\", void 0);\n __decorate([\n Property(1)\n ], Series.prototype, \"minRadius\", void 0);\n __decorate([\n Property(3)\n ], Series.prototype, \"maxRadius\", void 0);\n __decorate([\n Property('Natural')\n ], Series.prototype, \"splineType\", void 0);\n __decorate([\n Property(0.5)\n ], Series.prototype, \"cardinalSplineTension\", void 0);\n __decorate([\n Complex(null, EmptyPointSettings)\n ], Series.prototype, \"emptyPointSettings\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"showMean\", void 0);\n __decorate([\n Property('Normal')\n ], Series.prototype, \"boxPlotMode\", void 0);\n __decorate([\n Property(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.isRectSeries || series.type === 'BoxAndWhisker') &&\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 &&\n (!data_1.series.isRectSeries || data_1.series.type === 'BoxAndWhisker')) {\n stopTimer(this_1.markerExplode);\n this_1.isRemove = true;\n data_1.point.symbolLocations.map(function (location, index) {\n if (data_1.point.marker.visible) {\n _this.drawTrackBall(data_1.series, data_1.point, location, index);\n }\n });\n }\n };\n var this_1 = this;\n for (var _b = 0, _c = this.currentPoints; _b < _c.length; _b++) {\n var data_1 = _c[_b];\n _loop_1(data_1);\n }\n this.previousPoints = extend([], this.currentPoints, null, true);\n }\n }\n if (!chart.tooltip.enable && ((this.currentPoints.length === 0 && this.isRemove) || (remove && this.isRemove) ||\n !withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect))) {\n this.isRemove = false;\n this.markerExplode = setTimeout(function () {\n _this.removeHighlightedMarker();\n }, 2000);\n }\n this.currentPoints = [];\n };\n MarkerExplode.prototype.drawTrackBall = function (series, point, location, index) {\n var marker = point.marker;\n var seriesMarker = series.marker;\n var shape = marker.shape || seriesMarker.shape;\n var element = series.symbolElement || series.seriesElement;\n var symbolId = this.elementId + '_Series_' + series.index + '_Point_' + point.index + '_Trackball' +\n (index ? index : '');\n var size = new Size((marker.width || seriesMarker.width) + 5, (marker.height || seriesMarker.height) + 5);\n var border = (marker.border || series.border);\n var explodeSeries = (series.type === 'BoxAndWhisker' || series.type === 'Bubble' || series.type === 'Scatter');\n var borderColor = (border.color && border.color !== 'transparent') ? border.color :\n marker.fill || point.interior || (explodeSeries ? point.color : series.interior);\n var colorValue = convertHexToColor(colorNameToHex(borderColor));\n var borderWidth = marker.border ? marker.border.width : seriesMarker.border.width;\n var markerShadow = series.chart.themeStyle.markerShadow ||\n 'rgba(' + colorValue.r + ',' + colorValue.g + ',' + colorValue.b + ',0.2)';\n for (var i = 0; i < 2; i++) {\n var options = new PathOption(symbolId + '_' + i, i ? (marker.fill || point.color || (explodeSeries ? series.interior : '#ffffff')) : 'transparent', borderWidth + (i ? 0 : 8), i ? borderColor : markerShadow, (marker.opacity || seriesMarker.opacity), null, null);\n var symbol = drawSymbol(location, shape, size, seriesMarker.imageUrl, options, '');\n symbol.setAttribute('style', 'pointer-events:none');\n symbol.setAttribute('class', 'EJ2-Trackball');\n element.appendChild(symbol);\n }\n };\n /**\n * @hidden\n */\n MarkerExplode.prototype.removeHighlightedMarker = function () {\n var elements = document.getElementsByClassName('EJ2-Trackball');\n for (var i = 0, len = elements.length; i < len; i++) {\n remove(elements[0]);\n }\n this.previousPoints = [];\n };\n return MarkerExplode;\n}(ChartData));\nexport { MarkerExplode };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { drawSymbol, PathOption, Size, markerAnimate, CircleOption, RectOption } from '../../common/utils/helper';\nimport { findlElement } from '../../common/utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { pointRender } from '../../common/model/constants';\nimport { MarkerExplode } from './marker-explode';\nimport { getSaturationColor } from '../../common/utils/helper';\n/**\n * Marker module used to render the marker for line type series.\n */\nvar Marker = /** @class */ (function (_super) {\n __extends(Marker, _super);\n /**\n * Constructor for the marker module.\n * @private\n */\n function Marker(chart) {\n var _this = _super.call(this, chart) || this;\n _this.addEventListener();\n return _this;\n }\n /**\n * Render the marker for series.\n * @return {void}\n * @private\n */\n Marker.prototype.render = function (series) {\n var _this = this;\n this.createElement(series);\n var _loop_1 = function (point) {\n if (point.visible && point.symbolLocations.length) {\n point.symbolLocations.map(function (location, index) {\n _this.renderMarker(series, point, location, index);\n });\n }\n };\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n _loop_1(point);\n }\n };\n Marker.prototype.renderMarker = function (series, point, location, index) {\n var seriesIndex = series.index;\n var marker = series.marker;\n var border = {\n color: marker.border.color,\n width: marker.border.width\n };\n var borderColor = marker.border.color;\n var symbolId;\n var shapeOption;\n var isBoxPlot = series.type === 'BoxAndWhisker';\n var fill = marker.fill || (isBoxPlot ? point.interior || series.interior : '#ffffff');\n var argsData;\n var parentElement = isBoxPlot ?\n findlElement(series.seriesElement.childNodes, 'Series_' + series.index + '_Point_' + point.index)\n : series.symbolElement;\n border.color = borderColor || series.setPointColor(point, series.interior);\n symbolId = this.elementId + '_Series_' + seriesIndex + '_Point_' + point.index + '_Symbol' +\n (index ? index : '');\n argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: point.isEmpty ? (series.emptyPointSettings.fill || fill) : fill,\n border: {\n color: series.type === 'BoxAndWhisker' ?\n (!isNullOrUndefined(borderColor) && borderColor !== 'transparent') ? borderColor :\n getSaturationColor(fill, -0.6)\n : border.color,\n width: border.width\n },\n height: marker.height,\n width: marker.width,\n shape: marker.shape\n };\n argsData.border = series.setBorderColor(point, { width: argsData.border.width, color: argsData.border.color });\n this.chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n if (!argsData.cancel) {\n var y = void 0;\n if (series.type === 'RangeArea') {\n y = index ? point.low : point.high;\n }\n else if (isBoxPlot) {\n y = point.outliers[index];\n }\n else {\n y = point.y;\n }\n shapeOption = new PathOption(symbolId, argsData.fill, argsData.border.width, argsData.border.color, marker.opacity, null);\n if (parentElement !== undefined && parentElement !== null) {\n parentElement.appendChild(drawSymbol(location, argsData.shape, new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, point.x.toString() + ':' + y.toString()));\n }\n point.marker = {\n border: argsData.border,\n fill: argsData.fill,\n height: argsData.height,\n visible: true,\n shape: argsData.shape,\n width: argsData.width\n };\n }\n else {\n location = null;\n point.marker = {\n visible: false\n };\n }\n };\n Marker.prototype.createElement = function (series) {\n var markerClipRect;\n var marker = series.marker;\n // 8 for extend border value 5 for extend size value\n var explodeValue = marker.border.width + 8 + 5;\n var render = series.chart.renderer;\n var transform;\n transform = series.chart.chartAreaType === 'Cartesian' ? 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n if (marker.visible) {\n var markerHeight = (marker.height + explodeValue) / 2;\n var markerWidth = (marker.width + explodeValue) / 2;\n if (series.chart.chartAreaType === 'Cartesian') {\n markerClipRect = render.drawClipPath(new RectOption(this.elementId + '_ChartMarkerClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: -markerWidth, y: -markerHeight,\n width: series.clipRect.width + markerWidth * 2,\n height: series.clipRect.height + markerHeight * 2\n }));\n }\n else {\n markerClipRect = render.drawCircularClipPath(new CircleOption(this.elementId + '_ChartMarkerClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, series.clipRect.width / 2 + series.clipRect.x, series.clipRect.height / 2 + series.clipRect.y, series.chart.radius + Math.max(markerHeight, markerWidth)));\n }\n series.symbolElement = render.createGroup({\n 'id': this.elementId + 'SymbolGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.elementId + '_ChartMarkerClipRect_' + series.index + ')'\n });\n series.symbolElement.appendChild(markerClipRect);\n }\n };\n Marker.prototype.getRangeLowPoint = function (region, series) {\n var x = region.x;\n var y = region.y;\n if (series.chart.requireInvertedAxis) {\n y += region.height / 2;\n x += series.yAxis.isInversed ? region.width : 0;\n }\n else {\n y += series.yAxis.isInversed ? 0 : region.height;\n x += region.width / 2;\n }\n return { x: x, y: y };\n };\n /**\n * Animates the marker.\n * @return {void}.\n * @private\n */\n Marker.prototype.doMarkerAnimation = function (series) {\n if (!(series.isRectSeries || series.type === 'Scatter' || series.type === 'Bubble' ||\n (series.chart.chartAreaType === 'PolarRadar' && (series.drawType === 'Scatter' || series.drawType.indexOf('Column') > -1)))) {\n var markerElements = series.symbolElement.childNodes;\n var delay = series.animation.delay + series.animation.duration;\n var j = 1;\n var incFactor = series.type === 'RangeArea' ? 2 : 1;\n for (var i = 0; i < series.points.length; i++) {\n if (!series.points[i].symbolLocations.length || !markerElements[j]) {\n continue;\n }\n markerAnimate(markerElements[j], delay, 200, series, i, series.points[i].symbolLocations[0], false);\n if (incFactor === 2) {\n var lowPoint = this.getRangeLowPoint(series.points[i].regions[0], series);\n markerAnimate(markerElements[j + 1], delay, 200, series, i, lowPoint, false);\n }\n j += incFactor;\n }\n }\n };\n return Marker;\n}(MarkerExplode));\nexport { Marker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../model/base';\nimport { Theme } from '../model/theme';\nimport { Size, Rect, subtractThickness, Thickness, drawSymbol, measureText, ChartLocation, PathOption } from '../utils/helper';\nimport { RectOption, TextOption, textElement, stringToNumber, removeElement, showTooltip, getElement } from '../utils/helper';\n/**\n * Configures the location for the legend.\n */\nvar Location = /** @class */ (function (_super) {\n __extends(Location, _super);\n function Location() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Location.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], Location.prototype, \"y\", void 0);\n return Location;\n}(ChildProperty));\nexport { Location };\n/**\n * Configures the legends in charts.\n */\nvar LegendSettings = /** @class */ (function (_super) {\n __extends(LegendSettings, _super);\n function LegendSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"width\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, Location)\n ], LegendSettings.prototype, \"location\", void 0);\n __decorate([\n Property('Auto')\n ], LegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property(8)\n ], LegendSettings.prototype, \"padding\", void 0);\n __decorate([\n Property('Center')\n ], LegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex(Theme.legendLabelFont, Font)\n ], LegendSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapeHeight\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapeWidth\", void 0);\n __decorate([\n Complex({}, Border)\n ], LegendSettings.prototype, \"border\", void 0);\n __decorate([\n Property(5)\n ], LegendSettings.prototype, \"shapePadding\", void 0);\n __decorate([\n Property('transparent')\n ], LegendSettings.prototype, \"background\", void 0);\n __decorate([\n Property(1)\n ], LegendSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"toggleVisibility\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"description\", void 0);\n __decorate([\n Property(3)\n ], LegendSettings.prototype, \"tabIndex\", void 0);\n return LegendSettings;\n}(ChildProperty));\nexport { LegendSettings };\n/**\n * Legend base class for Chart and Accumulation chart.\n * @private\n */\nvar BaseLegend = /** @class */ (function () {\n /**\n * Constructor for the dateTime module.\n * @private\n */\n function BaseLegend(chart) {\n this.rowCount = 0; // legend row counts per page\n this.columnCount = 0; // legend column counts per page\n this.pageButtonSize = 8;\n this.pageXCollections = []; // pages of x locations\n this.maxColumns = 0;\n this.isTrimmed = false;\n this.maxWidth = 0;\n this.currentPage = 1;\n this.chart = chart;\n this.legend = chart.legendSettings;\n this.legendID = chart.element.id + '_chart_legend';\n this.isChartControl = (chart.getModuleName() === 'chart');\n }\n /**\n * Calculate the bounds for the legends.\n * @return {void}\n * @private\n */\n BaseLegend.prototype.calculateLegendBounds = function (rect, availableSize) {\n var legend = this.legend;\n this.getPosition(legend.position, availableSize);\n this.legendBounds = new Rect(rect.x, rect.y, 0, 0);\n this.isVertical = (this.position === 'Left' || this.position === 'Right');\n if (this.isVertical) {\n this.legendBounds.height = stringToNumber(legend.height, availableSize.height - (rect.y - this.chart.margin.top)) || rect.height;\n this.legendBounds.width = stringToNumber(legend.width || '20%', availableSize.width);\n }\n else {\n this.legendBounds.width = stringToNumber(legend.width, availableSize.width) || rect.width;\n this.legendBounds.height = stringToNumber(legend.height || '20%', availableSize.height);\n }\n this.library.getLegendBounds(availableSize, this.legendBounds, legend);\n this.getLocation(this.position, legend.alignment, this.legendBounds, rect, availableSize);\n };\n /**\n * To find legend position based on available size for chart and accumulation chart\n */\n BaseLegend.prototype.getPosition = function (position, availableSize) {\n if (this.isChartControl) {\n this.position = (position !== 'Auto') ? position : 'Bottom';\n }\n else {\n if (position === 'Auto' && this.chart.visibleSeries &&\n (this.chart.visibleSeries[0].type === 'Funnel' || this.chart.visibleSeries[0].type === 'Pyramid')) {\n position = 'Top';\n }\n this.position = (position !== 'Auto') ? position :\n (availableSize.width > availableSize.height ? 'Right' : 'Bottom');\n }\n };\n /**\n * To set bounds for chart and accumulation chart\n */\n BaseLegend.prototype.setBounds = function (computedWidth, computedHeight, legend, legendBounds) {\n computedWidth = computedWidth < legendBounds.width ? computedWidth : legendBounds.width;\n computedHeight = computedHeight < legendBounds.height ? computedHeight : legendBounds.height;\n legendBounds.width = !legend.width ? computedWidth : legendBounds.width;\n legendBounds.height = !legend.height ? computedHeight : legendBounds.height;\n this.rowCount = Math.max(1, Math.ceil((legendBounds.height - legend.padding) / (this.maxItemHeight + legend.padding)));\n };\n /**\n * To find legend location based on position, alignment for chart and accumulation chart\n */\n BaseLegend.prototype.getLocation = function (position, alignment, legendBounds, rect, availableSize) {\n var padding = this.legend.border.width;\n var legendHeight = legendBounds.height + padding;\n var legendWidth = legendBounds.width + padding;\n var marginBottom = this.chart.margin.bottom;\n if (position === 'Bottom') {\n legendBounds.x = this.alignLegend(legendBounds.x, availableSize.width, legendBounds.width, alignment);\n legendBounds.y = rect.y + (rect.height - legendHeight) + padding;\n subtractThickness(rect, new Thickness(0, 0, 0, legendHeight));\n }\n else if (position === 'Top') {\n legendBounds.x = this.alignLegend(legendBounds.x, availableSize.width, legendBounds.width, alignment);\n legendBounds.y = rect.y + padding;\n subtractThickness(rect, new Thickness(0, 0, legendHeight, 0));\n }\n else if (position === 'Right') {\n legendBounds.x = rect.x + (rect.width - legendBounds.width);\n legendBounds.y = rect.y + this.alignLegend(0, availableSize.height - (rect.y + marginBottom), legendBounds.height, alignment);\n subtractThickness(rect, new Thickness(0, legendWidth, 0, 0));\n }\n else if (position === 'Left') {\n legendBounds.y = rect.y + this.alignLegend(0, availableSize.height - (rect.y + marginBottom), legendBounds.height, alignment);\n subtractThickness(rect, new Thickness(legendWidth, 0, 0, 0));\n }\n else {\n legendBounds.x = this.legend.location.x;\n legendBounds.y = this.legend.location.y;\n subtractThickness(rect, new Thickness(0, 0, 0, 0));\n }\n };\n /**\n * To find legend alignment for chart and accumulation chart\n */\n BaseLegend.prototype.alignLegend = function (start, size, legendSize, alignment) {\n switch (alignment) {\n case 'Far':\n start = (size - legendSize) - start;\n break;\n case 'Center':\n start = ((size - legendSize) / 2);\n break;\n }\n return start;\n };\n /**\n * Renders the legend.\n * @return {void}\n * @private\n */\n BaseLegend.prototype.renderLegend = function (chart, legend, legendBounds) {\n var firstLegend = this.findFirstLegendPosition(this.legendCollections);\n var padding = legend.padding;\n this.maxItemHeight = Math.max(this.legendCollections[0].textSize.height, legend.shapeHeight);\n var legendGroup = chart.renderer.createGroup({ id: this.legendID + '_g' });\n var legendTranslateGroup = this.createLegendElements(chart, legendBounds, legendGroup, legend, this.legendID);\n if (firstLegend !== this.legendCollections.length) {\n var legendSeriesGroup = void 0; // legendItem group for each series group element\n var start = void 0; // starting shape center x,y position && to resolve lint error used new line for declaration\n start = new ChartLocation(legendBounds.x + padding + (legend.shapeWidth / 2), legendBounds.y + padding + this.maxItemHeight / 2);\n var textOptions = new TextOption('', start.x, start.y, 'start');\n // initialization for totalPages legend click totalpage again calculate\n this.totalPages = this.isChartControl ? this.totalPages : 0;\n var textPadding = legend.shapePadding + padding + legend.shapeWidth;\n var count = 0;\n this.pageXCollections = [];\n this.legendCollections[firstLegend].location = start;\n var previousLegend = this.legendCollections[firstLegend];\n for (var _i = 0, _a = this.legendCollections; _i < _a.length; _i++) {\n var legendOption = _a[_i];\n if (legendOption.render && legendOption.text !== '') {\n legendSeriesGroup = chart.renderer.createGroup({\n id: this.legendID + this.generateId(legendOption, '_g_', count)\n });\n legendSeriesGroup.setAttribute('tabindex', legend.tabIndex.toString());\n legendSeriesGroup.setAttribute('aria-label', legend.description || 'Click to show or hide the ' + legendOption.text + ' series');\n this.library.getRenderPoint(legendOption, start, textPadding, previousLegend, legendBounds, count, firstLegend);\n this.renderSymbol(legendOption, legendSeriesGroup, count);\n this.renderText(chart, legendOption, legendSeriesGroup, textOptions, count);\n legendSeriesGroup.setAttribute('style', 'cursor: ' + ((!legend.toggleVisibility && chart.selectionMode === 'None') ? 'auto' : 'pointer'));\n legendTranslateGroup.appendChild(legendSeriesGroup);\n previousLegend = legendOption;\n }\n count++;\n }\n if (this.isPaging) {\n this.renderPagingElements(chart, legendBounds, textOptions, legendGroup);\n }\n else {\n this.totalPages = 1;\n }\n }\n chart.svgObject.appendChild(legendGroup);\n };\n /**\n * To find first valid legend text index for chart and accumulation chart\n */\n BaseLegend.prototype.findFirstLegendPosition = function (legendCollection) {\n var count = 0;\n for (var _i = 0, legendCollection_1 = legendCollection; _i < legendCollection_1.length; _i++) {\n var legend = legendCollection_1[_i];\n if (legend.render && legend.text !== '') {\n break;\n }\n count++;\n }\n return count;\n };\n /**\n * To create legend rendering elements for chart and accumulation chart\n */\n BaseLegend.prototype.createLegendElements = function (chart, legendBounds, legendGroup, legend, id) {\n var padding = legend.padding;\n var options = new RectOption(id + '_element', legend.background, legend.border, legend.opacity, legendBounds);\n legendGroup.appendChild(chart.renderer.drawRectangle(options));\n var legendItemsGroup = chart.renderer.createGroup({ id: id + '_collections' });\n legendGroup.appendChild(legendItemsGroup);\n this.legendTranslateGroup = chart.renderer.createGroup({ id: id + '_translate_g' });\n legendItemsGroup.appendChild(this.legendTranslateGroup);\n var clippath = chart.renderer.createClipPath({ id: id + '_clipPath' });\n options.y += padding;\n options.id += '_clipPath_rect';\n options.width = (!this.isChartControl && this.isVertical) ? this.maxWidth - padding : legendBounds.width;\n this.clipRect = chart.renderer.drawRectangle(options);\n clippath.appendChild(this.clipRect);\n chart.svgObject.appendChild(clippath);\n legendItemsGroup.setAttribute('style', 'clip-path:url(#' + clippath.id + ')');\n return this.legendTranslateGroup;\n };\n /**\n * To render legend symbols for chart and accumulation chart\n */\n BaseLegend.prototype.renderSymbol = function (legendOption, group, i) {\n var symbolColor = legendOption.visible ? legendOption.fill : '#D3D3D3';\n var shape = (legendOption.shape === 'SeriesType') ? legendOption.type : legendOption.shape;\n shape = shape === 'Scatter' ? legendOption.markerShape : shape;\n var symbolOption = new PathOption(this.legendID + this.generateId(legendOption, '_shape_', i), symbolColor, 1, symbolColor, 1, '', '');\n group.appendChild(drawSymbol(legendOption.location, shape, new Size(this.legend.shapeWidth, this.legend.shapeHeight), '', symbolOption, 'Click to show or hide the ' + legendOption.text + ' series'));\n if (shape === 'Line' && legendOption.markerVisibility && legendOption.markerShape !== 'Image' ||\n (legendOption.type === 'Doughnut' && this.chart.series[0].legendShape === 'SeriesType')) {\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 output.push(0);\n output.push(value.charCodeAt(i));\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","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 if (typeof arg1 === 'undefined') {\n this.internalLineLimit = true;\n this.wordWrapType = PdfWordWrapType.Word;\n }\n else if (typeof arg1 === 'string') {\n this.constructor();\n }\n else {\n if (typeof arg2 === 'undefined') {\n this.constructor();\n this.textAlignment = arg1;\n }\n else {\n this.constructor(arg1);\n this.verticalAlignment = arg2;\n }\n }\n }\n Object.defineProperty(PdfStringFormat.prototype, \"alignment\", {\n //Properties\n /**\n * Gets or sets the `horizontal` text alignment\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the text alignment\n * stringFormat.alignment = PdfTextAlignment.Center;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.textAlignment;\n },\n set: function (value) {\n this.textAlignment = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineAlignment\", {\n /**\n * Gets or sets the `vertical` text alignment.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the vertical alignment\n * stringFormat.lineAlignment = PdfVerticalAlignment.Middle;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.verticalAlignment === 'undefined' || this.verticalAlignment == null) {\n return PdfVerticalAlignment.Top;\n }\n else {\n return this.verticalAlignment;\n }\n },\n set: function (value) {\n this.verticalAlignment = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"rightToLeft\", {\n /**\n * Gets or sets the value that indicates text `direction` mode.\n * @private\n */\n get: function () {\n if (typeof this.isRightToLeft === 'undefined' || this.isRightToLeft == null) {\n return false;\n }\n else {\n return this.isRightToLeft;\n }\n },\n set: function (value) {\n this.isRightToLeft = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"characterSpacing\", {\n /**\n * Gets or sets value that indicates a `size` among the characters in the text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set character spacing\n * stringFormat.characterSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.internalCharacterSpacing === 'undefined' || this.internalCharacterSpacing == null) {\n return 0;\n }\n else {\n return this.internalCharacterSpacing;\n }\n },\n set: function (value) {\n this.internalCharacterSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"wordSpacing\", {\n /**\n * Gets or sets value that indicates a `size` among the words in the text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set word spacing\n * stringFormat.wordSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.internalWordSpacing === 'undefined' || this.internalWordSpacing == null) {\n return 0;\n }\n else {\n return this.internalWordSpacing;\n }\n },\n set: function (value) {\n this.internalWordSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineSpacing\", {\n /**\n * Gets or sets value that indicates the `vertical distance` between the baselines of adjacent lines of text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // set string\n * let text : string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor\n * incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitati';\n * // set rectangle bounds\n * let rectangle : RectangleF = new RectangleF({x : 0, y : 0}, {width : 300, height : 100})\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set line spacing\n * stringFormat.lineSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString(text, font, blackBrush, rectangle, stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.leading === 'undefined' || this.leading == null) {\n return 0;\n }\n else {\n return this.leading;\n }\n },\n set: function (value) {\n this.leading = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"clipPath\", {\n /**\n * Gets or sets a value indicating whether the text is `clipped` or not.\n * @private\n */\n get: function () {\n if (typeof this.clip === 'undefined' || this.clip == null) {\n return false;\n }\n else {\n return this.clip;\n }\n },\n set: function (value) {\n this.clip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"subSuperScript\", {\n /**\n * Gets or sets value indicating whether the text is in `subscript or superscript` mode.\n * @private\n */\n get: function () {\n if (typeof this.pdfSubSuperScript === 'undefined' || this.pdfSubSuperScript == null) {\n return PdfSubSuperScript.None;\n }\n else {\n return this.pdfSubSuperScript;\n }\n },\n set: function (value) {\n this.pdfSubSuperScript = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"paragraphIndent\", {\n /**\n * Gets or sets the `indent` of the first line in the paragraph.\n * @private\n */\n get: function () {\n if (typeof this.internalParagraphIndent === 'undefined' || this.internalParagraphIndent == null) {\n return 0;\n }\n else {\n return this.internalParagraphIndent;\n }\n },\n set: function (value) {\n this.internalParagraphIndent = value;\n this.firstLineIndent = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineLimit\", {\n /**\n * Gets or sets a value indicating whether [`line limit`].\n * @private\n */\n get: function () {\n return this.internalLineLimit;\n },\n set: function (value) {\n this.internalLineLimit = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"measureTrailingSpaces\", {\n /**\n * Gets or sets a value indicating whether [`measure trailing spaces`].\n * @private\n */\n get: function () {\n if (typeof this.trailingSpaces === 'undefined' || this.trailingSpaces == null) {\n return false;\n }\n else {\n return this.trailingSpaces;\n }\n },\n set: function (value) {\n this.trailingSpaces = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"noClip\", {\n /**\n * Gets or sets a value indicating whether [`no clip`].\n * @private\n */\n get: function () {\n if (typeof this.isNoClip === 'undefined' || this.isNoClip == null) {\n return false;\n }\n else {\n return this.isNoClip;\n }\n },\n set: function (value) {\n this.isNoClip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"wordWrap\", {\n /**\n * Gets or sets value indicating type of the text `wrapping`.\n * @private\n */\n get: function () {\n // if (typeof this.wrapType === 'undefined' || this.wrapType == null) {\n // return PdfWordWrapType.Word;\n // } else {\n return this.wordWrapType;\n // }\n },\n set: function (value) {\n this.wordWrapType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"horizontalScalingFactor\", {\n /**\n * Gets or sets the `scaling factor`.\n * @private\n */\n get: function () {\n // if (typeof this.scalingFactor === 'undefined' || this.scalingFactor == null) {\n // return 100;\n // } else {\n return this.scalingFactor;\n // }\n },\n set: function (value) {\n if (value <= 0) {\n throw new Error('ArgumentOutOfRangeException:The scaling factor cant be less of equal to zero, ScalingFactor');\n }\n this.scalingFactor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"firstLineIndent\", {\n /**\n * Gets or sets the `indent` of the first line in the text.\n * @private\n */\n get: function () {\n if (typeof this.initialLineIndent === 'undefined' || this.initialLineIndent == null) {\n return 0;\n }\n else {\n return this.initialLineIndent;\n }\n },\n set: function (value) {\n this.initialLineIndent = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Clones` the object.\n * @private\n */\n //IClonable implementation\n PdfStringFormat.prototype.clone = function () {\n var format = this;\n return format;\n };\n return PdfStringFormat;\n}());\nexport { PdfStringFormat };\n","import { SizeF, RectangleF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfWordWrapType } from './enum';\nimport { StringTokenizer } from './string-tokenizer';\n/**\n * Class `lay outing the text`.\n */\nvar PdfStringLayouter = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `StringLayouter` class.\n * @private\n */\n function PdfStringLayouter() {\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isOverloadWithPosition = false;\n //\n }\n PdfStringLayouter.prototype.layout = function (arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n if (arg4 instanceof RectangleF) {\n this.initialize(arg1, arg2, arg3, arg4, arg5);\n this.isOverloadWithPosition = arg6;\n this.clientSize = arg7;\n var result = this.doLayout();\n this.clear();\n return result;\n }\n else {\n this.initialize(arg1, arg2, arg3, arg4);\n this.isOverloadWithPosition = arg5;\n this.clientSize = arg6;\n var result = this.doLayout();\n this.clear();\n return result;\n }\n };\n PdfStringLayouter.prototype.initialize = function (text, font, format, rectSize, pageHeight) {\n if (typeof pageHeight === 'number') {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (font == null) {\n throw new Error('ArgumentNullException:font');\n }\n this.text = text;\n this.font = font;\n this.format = format;\n this.size = new SizeF(rectSize.width, rectSize.height);\n this.rectangle = rectSize;\n this.pageHeight = pageHeight;\n this.reader = new StringTokenizer(text);\n }\n else {\n this.initialize(text, font, format, new RectangleF(new PointF(0, 0), rectSize), 0);\n }\n };\n /**\n * `Clear` all resources.\n * @private\n */\n PdfStringLayouter.prototype.clear = function () {\n this.font = null;\n this.format = null;\n this.reader.close();\n this.reader = null;\n this.text = null;\n };\n /**\n * `Layouts` the text.\n * @private\n */\n PdfStringLayouter.prototype.doLayout = function () {\n var result = new PdfStringLayoutResult();\n var lineResult = new PdfStringLayoutResult();\n var lines = [];\n var line = this.reader.peekLine();\n var lineIndent = this.getLineIndent(true);\n while (line != null) {\n lineResult = this.layoutLine(line, lineIndent);\n // if (!lineResult.Empty) {\n var numSymbolsInserted = 0;\n /* tslint:disable */\n var returnedValue = this.copyToResult(result, lineResult, lines, /*out*/ numSymbolsInserted);\n /* tslint:enable */\n var success = returnedValue.success;\n numSymbolsInserted = returnedValue.numInserted;\n this.reader.readLine();\n line = this.reader.peekLine();\n lineIndent = this.getLineIndent(false);\n }\n this.finalizeResult(result, lines);\n return result;\n };\n /**\n * Returns `line indent` for the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineIndent = function (firstLine) {\n var lineIndent = 0;\n if (this.format != null) {\n lineIndent = (firstLine) ? this.format.firstLineIndent : this.format.paragraphIndent;\n lineIndent = (this.size.width > 0) ? Math.min(this.size.width, lineIndent) : lineIndent;\n }\n return lineIndent;\n };\n /**\n * Calculates `height` of the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineHeight = function () {\n var height = this.font.height;\n if (this.format != null && this.format.lineSpacing !== 0) {\n height = this.format.lineSpacing + this.font.height;\n }\n return height;\n };\n /**\n * Calculates `width` of the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineWidth = function (line) {\n var width = this.font.getLineWidth(line, this.format);\n return width;\n };\n // tslint:disable\n /**\n * `Layouts` line.\n * @private\n */\n PdfStringLayouter.prototype.layoutLine = function (line, lineIndent) {\n var lineResult = new PdfStringLayoutResult();\n lineResult.layoutLineHeight = this.getLineHeight();\n var lines = [];\n var maxWidth = this.size.width;\n var lineWidth = this.getLineWidth(line) + lineIndent;\n var lineType = LineType.FirstParagraphLine;\n var readWord = true;\n // line is in bounds.\n if (maxWidth <= 0 || Math.round(lineWidth) <= Math.round(maxWidth)) {\n this.addToLineResult(lineResult, lines, line, lineWidth, LineType.NewLineBreak | lineType);\n }\n else {\n var builder = '';\n var curLine = '';\n lineWidth = lineIndent;\n var curIndent = lineIndent;\n var reader = new StringTokenizer(line);\n var word = reader.peekWord();\n var isSingleWord = false;\n while (word != null) {\n curLine = curLine + word;\n var curLineWidth = this.getLineWidth(curLine.toString()) + curIndent /*)*/;\n if (curLineWidth > maxWidth) {\n if (this.getWrapType() == PdfWordWrapType.None)\n break;\n if (this.getWrapType() != PdfWordWrapType.Character || !readWord) {\n var ln = builder.toString();\n if (ln.indexOf(' ') === -1) {\n isSingleWord = true;\n this.addToLineResult(lineResult, lines, curLine, lineWidth, LineType.LayoutBreak | lineType);\n }\n else {\n this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.LayoutBreak | lineType);\n }\n if (this.isOverloadWithPosition) {\n maxWidth = this.clientSize.width;\n }\n curLine = '';\n builder = '';\n lineWidth = 0;\n curIndent = 0;\n curLineWidth = 0;\n lineType = LineType.None;\n if (isSingleWord) {\n reader.readWord();\n readWord = false;\n }\n word = (readWord) ? word : reader.peekWord();\n isSingleWord = false;\n readWord = true;\n }\n else {\n readWord = false;\n curLine = curLine + builder.toString();\n word = reader.peek().toString();\n }\n continue;\n }\n builder = builder + word;\n lineWidth = curLineWidth;\n if (readWord) {\n reader.readWord();\n word = reader.peekWord();\n isSingleWord = false;\n }\n else {\n reader.read();\n word = reader.peek().toString();\n }\n }\n if (builder.length > 0) {\n var ln = builder.toString();\n this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.NewLineBreak | LineType.LastParagraphLine);\n }\n reader.close();\n }\n lineResult.layoutLines = [];\n for (var index = 0; index < lines.length; index++) {\n lineResult.layoutLines.push(lines[index]);\n }\n lines = [];\n return lineResult;\n };\n /**\n * `Adds` line to line result.\n * @private\n */\n PdfStringLayouter.prototype.addToLineResult = function (lineResult, lines, line, lineWidth, breakType) {\n var info = new LineInfo();\n info.text = line;\n info.width = lineWidth;\n info.lineType = breakType;\n lines.push(info);\n var size = lineResult.actualSize;\n size.height += this.getLineHeight();\n size.width = Math.max(size.width, lineWidth);\n lineResult.size = size;\n };\n /**\n * `Copies` layout result from line result to entire result. Checks whether we can proceed lay outing or not.\n * @private\n */\n PdfStringLayouter.prototype.copyToResult = function (result, lineResult, lines, \n /*out*/ numInserted) {\n var success = true;\n var allowPartialLines = (this.format != null && !this.format.lineLimit);\n var height = result.actualSize.height;\n var maxHeight = this.size.height;\n if ((this.pageHeight > 0) && (maxHeight + this.rectangle.y > this.pageHeight)) {\n maxHeight = this.rectangle.y - this.pageHeight;\n maxHeight = Math.max(maxHeight, -maxHeight);\n }\n numInserted = 0;\n for (var i = 0, len = lineResult.lines.length; i < len; i++) {\n var expHeight = height + lineResult.lineHeight;\n var info = lineResult.lines[i];\n numInserted += info.text.length;\n info = this.trimLine(info, (lines.length === 0));\n lines.push(info);\n // Update width.\n var size_1 = result.actualSize;\n size_1.width = Math.max(size_1.width, info.width);\n result.size = size_1;\n height = expHeight;\n }\n var size = result.actualSize;\n size.height = height;\n result.size = size;\n return { success: success, numInserted: numInserted };\n };\n /**\n * `Finalizes` final result.\n * @private\n */\n PdfStringLayouter.prototype.finalizeResult = function (result, lines) {\n result.layoutLines = [];\n for (var index = 0; index < lines.length; index++) {\n result.layoutLines.push(lines[index]);\n }\n result.layoutLineHeight = this.getLineHeight();\n lines = [];\n };\n /**\n * `Trims` whitespaces at the line.\n * @private\n */\n PdfStringLayouter.prototype.trimLine = function (info, firstLine) {\n var line = info.text;\n var lineWidth = info.width;\n // Trim start whitespaces if the line is not a start of the paragraph only.\n // let trimStartSpaces : boolean = ((info.LineType & LineType.FirstParagraphLine) === 0);\n var start = (this.format == null || !this.format.rightToLeft);\n var spaces = StringTokenizer.spaces;\n line = (start) ? line.trim() : line.trim();\n // Recalculate line width.\n if (line.length !== info.text.length) {\n lineWidth = this.getLineWidth(line);\n lineWidth += this.getLineIndent(firstLine);\n }\n info.text = line;\n info.width = lineWidth;\n return info;\n };\n /**\n * Returns `wrap` type.\n * @private\n */\n PdfStringLayouter.prototype.getWrapType = function () {\n var wrapType = (this.format != null) ? this.format.wordWrap : PdfWordWrapType.Word;\n return wrapType;\n };\n return PdfStringLayouter;\n}());\nexport { PdfStringLayouter };\n//Internal declaration\nvar PdfStringLayoutResult = /** @class */ (function () {\n function PdfStringLayoutResult() {\n }\n Object.defineProperty(PdfStringLayoutResult.prototype, \"remainder\", {\n // Properties\n /**\n * Gets the `text` which is not lay outed.\n * @private\n */\n get: function () {\n return this.textRemainder;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"actualSize\", {\n /**\n * Gets the actual layout text `bounds`.\n * @private\n */\n get: function () {\n if (typeof this.size === 'undefined') {\n this.size = new SizeF(0, 0);\n }\n return this.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lines\", {\n /**\n * Gets layout `lines` information.\n * @private\n */\n get: function () {\n return this.layoutLines;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lineHeight\", {\n /**\n * Gets the `height` of the line.\n * @private\n */\n get: function () {\n return this.layoutLineHeight;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"empty\", {\n /**\n * Gets value that indicates whether any layout text [`empty`].\n * @private\n */\n get: function () {\n return (this.layoutLines == null || this.layoutLines.length === 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lineCount\", {\n /**\n * Gets `number of` the layout lines.\n * @private\n */\n get: function () {\n var count = (!this.empty) ? this.layoutLines.length : 0;\n return count;\n },\n enumerable: true,\n configurable: true\n });\n return PdfStringLayoutResult;\n}());\nexport { PdfStringLayoutResult };\nvar LineInfo = /** @class */ (function () {\n function LineInfo() {\n }\n Object.defineProperty(LineInfo.prototype, \"lineType\", {\n //Properties\n /**\n * Gets the `type` of the line text.\n * @private\n */\n get: function () {\n return this.type;\n },\n set: function (value) {\n this.type = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineInfo.prototype, \"text\", {\n /**\n * Gets the line `text`.\n * @private\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.content = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineInfo.prototype, \"width\", {\n /**\n * Gets `width` of the line text.\n * @private\n */\n get: function () {\n return this.lineWidth;\n },\n set: function (value) {\n this.lineWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n return LineInfo;\n}());\nexport { LineInfo };\n/**\n* Break type of the `line`.\n* @private\n*/\nexport var LineType;\n(function (LineType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n LineType[LineType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `NewLineBreak`.\n * @private\n */\n LineType[LineType[\"NewLineBreak\"] = 1] = \"NewLineBreak\";\n /**\n * Specifies the type of `LayoutBreak`.\n * @private\n */\n LineType[LineType[\"LayoutBreak\"] = 2] = \"LayoutBreak\";\n /**\n * Specifies the type of `FirstParagraphLine`.\n * @private\n */\n LineType[LineType[\"FirstParagraphLine\"] = 4] = \"FirstParagraphLine\";\n /**\n * Specifies the type of `LastParagraphLine`.\n * @private\n */\n LineType[LineType[\"LastParagraphLine\"] = 8] = \"LastParagraphLine\";\n})(LineType || (LineType = {}));\n","/**\n * StringTokenizer.ts class for EJ2-PDF\n * Utility class for working with strings.\n * @private\n */\nvar StringTokenizer = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `StringTokenizer` class.\n * @private\n */\n function StringTokenizer(textValue) {\n /**\n * Current `position`.\n * @private\n */\n this.currentPosition = 0;\n if (textValue == null) {\n throw new Error('ArgumentNullException:text');\n }\n this.text = textValue;\n }\n Object.defineProperty(StringTokenizer.prototype, \"length\", {\n // Properties\n /**\n * Gets text `length`.\n * @private\n */\n get: function () {\n return this.text.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StringTokenizer.prototype, \"position\", {\n /**\n * Gets or sets the position.\n * @private\n */\n get: function () {\n return this.currentPosition;\n },\n set: function (value) {\n this.currentPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n StringTokenizer.getCharsCount = function (text, symbols) {\n if (typeof symbols === 'string') {\n if (text == null) {\n throw new Error('ArgumentNullException:wholeText');\n }\n var numSymbols = 0;\n var curIndex = 0;\n for (;;) {\n curIndex = text.indexOf(symbols, curIndex);\n if (curIndex === -1) {\n break;\n }\n else {\n numSymbols++;\n curIndex++;\n }\n }\n return numSymbols;\n }\n else {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (symbols == null) {\n throw new Error('ArgumentNullException:symbols');\n }\n var count = 0;\n for (var i = 0, len = text.length; i < len; i++) {\n var ch = text[i];\n if (this.contains(symbols, ch)) {\n count++;\n }\n }\n return count;\n }\n };\n /**\n * Reads line of the text.\n * @private\n */\n StringTokenizer.prototype.readLine = function () {\n var pos = this.currentPosition;\n while (pos < this.length) {\n var ch = this.text[pos];\n switch (ch) {\n case '\\r':\n case '\\n': {\n var text = this.text.substring(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos + 1;\n this.currentPosition++;\n return text;\n }\n }\n pos++;\n }\n // The remaining text.\n if (pos > this.currentPosition) {\n var text2 = this.text.substring(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text2;\n }\n return null;\n };\n /**\n * Reads line of the text.\n * @private\n */\n StringTokenizer.prototype.peekLine = function () {\n var pos = this.currentPosition;\n var line = this.readLine();\n this.currentPosition = pos;\n return line;\n };\n /**\n * Reads a word from the text.\n * @private\n */\n StringTokenizer.prototype.readWord = function () {\n var pos = this.currentPosition;\n while (pos < this.length) {\n var ch = this.text[pos];\n switch (ch) {\n case '\\r':\n case '\\n':\n var textValue = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos + 1;\n if (((ch === '\\r') && (this.currentPosition < this.length)) && (this.text[this.currentPosition] === '\\n')) {\n this.currentPosition++;\n }\n return textValue;\n case ' ':\n case '\\t': {\n if (pos === this.currentPosition) {\n pos++;\n }\n var text = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text;\n }\n }\n pos++;\n }\n // The remaining text.\n if (pos > this.currentPosition) {\n var text2 = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text2;\n }\n return null;\n };\n /**\n * Peeks a word from the text.\n * @private\n */\n StringTokenizer.prototype.peekWord = function () {\n var pos = this.currentPosition;\n var word = this.readWord();\n this.currentPosition = pos;\n return word;\n };\n StringTokenizer.prototype.read = function (count) {\n if (typeof count === 'undefined') {\n var ch = '0';\n return ch;\n }\n else {\n var num = 0;\n var builder = '';\n return builder;\n }\n };\n /**\n * Peeks char form the data.\n * @private\n */\n StringTokenizer.prototype.peek = function () {\n var ch = '0';\n return ch;\n };\n /**\n * Closes a reader.\n * @private\n */\n StringTokenizer.prototype.close = function () {\n this.text = null;\n };\n //Implementation\n /**\n * Checks whether array contains a symbol.\n * @private\n */\n StringTokenizer.contains = function (array, symbol) {\n var contains = false;\n for (var i = 0; i < array.length; i++) {\n if (array[i] === symbol) {\n contains = true;\n break;\n }\n }\n return contains;\n };\n // Constants\n /**\n * `Whitespace` symbol.\n * @private\n */\n StringTokenizer.whiteSpace = ' ';\n /**\n * `tab` symbol.\n * @private\n */\n StringTokenizer.tab = '\\t';\n /**\n * Array of `spaces`.\n * @private\n */\n StringTokenizer.spaces = [StringTokenizer.whiteSpace, StringTokenizer.tab];\n /**\n * `Pattern` for WhiteSpace.\n * @private\n */\n StringTokenizer.whiteSpacePattern = '^[ \\t]+$';\n return StringTokenizer;\n}());\nexport { StringTokenizer };\n","/**\n * PdfFont.ts class for EJ2-PDF\n */\nimport { PdfFontStyle } from './enum';\nimport { SizeF } from './../../drawing/pdf-drawing';\nimport { PdfStringFormat } from './pdf-string-format';\nimport { PdfStringLayouter } from './string-layouter';\nimport { StringTokenizer } from './string-tokenizer';\n/**\n * Defines a particular format for text, including font face, size, and style attributes.\n * @private\n */\nvar PdfFont = /** @class */ (function () {\n function PdfFont(size, style) {\n /**\n * `Style` of the font.\n * @private\n */\n this.fontStyle = PdfFontStyle.Regular;\n if (typeof size === 'number' && typeof style === 'undefined') {\n this.fontSize = size;\n }\n else {\n this.fontSize = size;\n this.setStyle(style);\n }\n }\n Object.defineProperty(PdfFont.prototype, \"name\", {\n //Properties\n /**\n * Gets the face name of this Font.\n * @private\n */\n get: function () {\n return this.metrics.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"size\", {\n /**\n * Gets the size of this font.\n * @private\n */\n get: function () {\n return this.fontSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"height\", {\n /**\n * Gets the height of the font in points.\n * @private\n */\n get: function () {\n return this.metrics.getHeight(null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"style\", {\n /**\n * Gets the style information for this font.\n * @private\n */\n get: function () {\n return this.fontStyle;\n },\n set: function (value) {\n this.fontStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"bold\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `bold`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Bold) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"italic\", {\n /**\n * Gets a value indicating whether this `PdfFont` has the `italic` style applied.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Italic) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"strikeout\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `strikeout`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Strikeout) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"underline\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `underline`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Underline) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"metrics\", {\n /**\n * Gets or sets the `metrics` for this font.\n * @private\n */\n get: function () {\n return this.fontMetrics;\n },\n set: function (value) {\n this.fontMetrics = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"element\", {\n // /**\n // * Gets and Sets the font `internals`.\n // * @private\n // */\n // public get fontInternal() : IPdfPrimitive {\n // return this.pdfFontInternals;\n // }\n // public set fontInternal(value : IPdfPrimitive) {\n // this.pdfFontInternals = value;\n // }\n //IPdfWrapper Members\n /**\n * Gets the `element` representing the font.\n * @private\n */\n get: function () {\n return this.pdfFontInternals;\n },\n enumerable: true,\n configurable: true\n });\n PdfFont.prototype.measureString = function (text, arg2, arg3, arg4, arg5) {\n if (typeof text === 'string' && typeof arg2 === 'undefined') {\n return this.measureString(text, null);\n }\n else if (typeof text === 'string' && (arg2 instanceof PdfStringFormat || arg2 == null) && typeof arg3 === 'undefined' && typeof arg4 === 'undefined') {\n var temparg2 = arg2;\n var charactersFitted = 0;\n var linesFilled = 0;\n return this.measureString(text, temparg2, charactersFitted, linesFilled);\n }\n else if (typeof text === 'string' && (arg2 instanceof PdfStringFormat || arg2 == null) && typeof arg3 === 'number' && typeof arg4 === 'number') {\n var temparg2 = arg2;\n return this.measureString(text, 0, temparg2, arg3, arg4);\n // } else if (typeof text === 'string' && typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n // return this.measureString(text, arg2, null);\n // } else if (typeof text === 'string' && typeof arg2 === 'number' && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'undefined' && typeof arg5 === 'undefined') {\n // let temparg3 : PdfStringFormat = arg3 as PdfStringFormat;\n // let charactersFitted : number = 0;\n // let linesFilled : number = 0;\n // return this.measureString(text, arg2, temparg3, charactersFitted, linesFilled);\n }\n else if (typeof text === 'string' && typeof arg2 === 'number' && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'number' && typeof arg5 === 'number') {\n var layoutArea = new SizeF(arg2, 0);\n var temparg3 = arg3;\n return this.measureString(text, layoutArea, temparg3, arg4, arg5);\n // } else if (typeof text === 'string' && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n // return this.measureString(text, arg2, null);\n // } else if (typeof text === 'string' && arg2 instanceof SizeF && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'undefined' && typeof arg5 === 'undefined') {\n // let temparg3 : PdfStringFormat = arg3 as PdfStringFormat;\n // let charactersFitted : number = 0;\n // let linesFilled : number = 0;\n // return this.measureString(text, arg2, temparg3, charactersFitted, linesFilled);\n }\n else {\n if (text == null) {\n throw Error(\"ArgumentNullException(\\\"text\\\")\");\n }\n var temparg2 = arg2;\n var temparg3 = arg3;\n var layouter = new PdfStringLayouter();\n var result = layouter.layout(text, this, temparg3, temparg2, false, new SizeF(0, 0));\n // arg4 = (result.Remainder == null) ? text.length : text.length - result.Remainder.length;\n arg4 = text.length;\n arg5 = (result.empty) ? 0 : result.lines.length;\n return result.actualSize;\n }\n };\n /* tslint:enable */\n //IPdfCache Members\n /**\n * `Checks` whether the object is similar to another object.\n * @private\n */\n PdfFont.prototype.equalsTo = function (obj) {\n var result = this.equalsToFont(obj);\n return result;\n };\n /**\n * Returns `internals` of the object.\n * @private\n */\n PdfFont.prototype.getInternals = function () {\n return this.pdfFontInternals;\n };\n /**\n * Sets `internals` to the object.\n * @private\n */\n PdfFont.prototype.setInternals = function (internals) {\n if (internals == null) {\n throw new Error('ArgumentNullException:internals');\n }\n this.pdfFontInternals = internals;\n };\n /**\n * Sets the `style` of the font.\n * @private\n */\n PdfFont.prototype.setStyle = function (style) {\n this.fontStyle = style;\n };\n /**\n * Applies `settings` to the default line width.\n * @private\n */\n PdfFont.prototype.applyFormatSettings = function (line, format, width) {\n // if (line == null) {\n // throw new Error(`ArgumentNullException:line`);\n // }\n var realWidth = width;\n if (format != null && width > 0) {\n // Space among characters is not default.\n if (format.characterSpacing !== 0) {\n realWidth += (line.length - 1) * format.characterSpacing;\n }\n // Space among words is not default.\n if (format.wordSpacing !== 0) {\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n realWidth += whitespacesCount * format.wordSpacing;\n }\n }\n return realWidth;\n };\n //Constants\n /**\n * `Multiplier` of the symbol width.\n * @default 0.001\n * @private\n */\n PdfFont.charSizeMultiplier = 0.001;\n /**\n * `Synchronization` object.\n * @private\n */\n PdfFont.syncObject = new Object();\n return PdfFont;\n}());\nexport { PdfFont };\n","/**\n * public Enum for `CompositeFontType`.\n * @private\n */\nexport var ObjectStatus;\n(function (ObjectStatus) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n ObjectStatus[ObjectStatus[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Registered`.\n * @private\n */\n ObjectStatus[ObjectStatus[\"Registered\"] = 1] = \"Registered\";\n})(ObjectStatus || (ObjectStatus = {}));\n","/**\n * Used to `write a string` into output file.\n * @private\n */\nvar PdfWriter = /** @class */ (function () {\n /**\n * Initialize an instance of `PdfWriter` class.\n * @private\n */\n function PdfWriter(stream) {\n this.streamWriter = stream;\n }\n Object.defineProperty(PdfWriter.prototype, \"document\", {\n //properties\n /**\n * Gets and Sets the `document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"position\", {\n /**\n * Gets the `position`.\n * @private\n */\n get: function () {\n return this.streamWriter.buffer.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"length\", {\n /**\n * Gets the `length` of the stream'.\n * @private\n */\n get: function () {\n return this.streamWriter.buffer.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"stream\", {\n /**\n * Gets the `stream`.\n * @private\n */\n get: function () {\n var result = this.streamWriter;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n //public Methods\n /**\n * `Writes the specified data`.\n * @private\n */\n PdfWriter.prototype.write = function (overload) {\n var data = [];\n var tempOverload = overload;\n this.streamWriter.write(tempOverload);\n };\n return PdfWriter;\n}());\nexport { PdfWriter };\n","/**\n * PdfMainObjectCollection.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../collections/dictionary';\nimport { ObjectStatus } from './enum';\n/**\n * The collection of all `objects` within a PDF document.\n * @private\n */\nvar PdfMainObjectCollection = /** @class */ (function () {\n function PdfMainObjectCollection() {\n //Fields\n /**\n * The collection of the `indirect objects`.\n * @default []\n * @private\n */\n this.objectCollections = [];\n /**\n * The collection of the `Indirect objects`.\n * @default new Dictionary()\n * @private\n */\n this.mainObjectCollection = new Dictionary();\n /**\n * The collection of `primitive objects`.\n * @private\n */\n this.primitiveObjectCollection = new Dictionary();\n }\n Object.defineProperty(PdfMainObjectCollection.prototype, \"count\", {\n //Properties\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.objectCollections.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the value of `ObjectInfo` from object collection.\n * @private\n */\n PdfMainObjectCollection.prototype.items = function (index) {\n return this.objectCollections[index];\n };\n Object.defineProperty(PdfMainObjectCollection.prototype, \"outIsNew\", {\n //Methods\n /**\n * Specifies the value of `IsNew`.\n * @private\n */\n get: function () {\n return this.isNew;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Adds` the specified element.\n * @private\n */\n PdfMainObjectCollection.prototype.add = function (element) {\n var objInfo = new ObjectInfo(element);\n this.objectCollections.push(objInfo);\n if (!this.primitiveObjectCollection.containsKey(element)) {\n this.primitiveObjectCollection.setValue(element, this.objectCollections.length - 1);\n }\n element.position = this.index = this.objectCollections.length - 1;\n element.status = ObjectStatus.Registered;\n };\n /**\n * `Looks` through the collection for the object specified.\n * @private\n */\n PdfMainObjectCollection.prototype.lookFor = function (obj) {\n var index = -1;\n if (obj.position !== -1) {\n return obj.position;\n }\n if (this.primitiveObjectCollection.containsKey(obj) && this.count === this.primitiveObjectCollection.size()) {\n index = this.primitiveObjectCollection.getValue(obj);\n }\n else {\n for (var i = this.count - 1; i >= 0; i--) {\n var oi = this.objectCollections[i];\n if (oi.object === obj) {\n index = i;\n break;\n }\n }\n }\n return index;\n };\n /**\n * Gets the `reference of the object`.\n * @private\n */\n PdfMainObjectCollection.prototype.getReference = function (index, isNew) {\n this.index = this.lookFor(index);\n var reference;\n this.isNew = false;\n var oi = this.objectCollections[this.index];\n reference = oi.reference;\n var obj = { reference: reference, wasNew: isNew };\n return obj;\n };\n /**\n * Tries to set the `reference to the object`.\n * @private\n */\n PdfMainObjectCollection.prototype.trySetReference = function (obj, reference, found) {\n var result = true;\n found = true;\n this.index = this.lookFor(obj);\n var oi = this.objectCollections[this.index];\n oi.setReference(reference);\n return result;\n };\n PdfMainObjectCollection.prototype.destroy = function () {\n for (var _i = 0, _a = this.objectCollections; _i < _a.length; _i++) {\n var obj = _a[_i];\n if (obj !== undefined) {\n obj.pdfObject.position = -1;\n obj.pdfObject.isSaving = undefined;\n obj.pdfObject.objectCollectionIndex = undefined;\n obj.pdfObject.position = undefined;\n }\n }\n this.objectCollections = [];\n this.mainObjectCollection = new Dictionary();\n this.primitiveObjectCollection = new Dictionary();\n };\n return PdfMainObjectCollection;\n}());\nexport { PdfMainObjectCollection };\nvar ObjectInfo = /** @class */ (function () {\n function ObjectInfo(obj, reference) {\n this.pdfObject = obj;\n this.pdfReference = reference;\n }\n Object.defineProperty(ObjectInfo.prototype, \"object\", {\n //Properties\n /**\n * Gets the `object`.\n * @private\n */\n get: function () {\n return this.pdfObject;\n },\n set: function (value) {\n this.pdfObject = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ObjectInfo.prototype, \"reference\", {\n /**\n * Gets the `reference`.\n * @private\n */\n get: function () {\n return this.pdfReference;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the `reference`.\n * @private\n */\n ObjectInfo.prototype.setReference = function (reference) {\n this.pdfReference = reference;\n };\n return ObjectInfo;\n}());\nexport { ObjectInfo };\n","/**\n * public Enum for `ObjectType`.\n * @private\n */\nexport var ObjectType;\n(function (ObjectType) {\n /**\n * Specifies the type of `Free`.\n * @private\n */\n ObjectType[ObjectType[\"Free\"] = 0] = \"Free\";\n /**\n * Specifies the type of `Normal`.\n * @private\n */\n ObjectType[ObjectType[\"Normal\"] = 1] = \"Normal\";\n /**\n * Specifies the type of `Packed`.\n * @private\n */\n ObjectType[ObjectType[\"Packed\"] = 2] = \"Packed\";\n})(ObjectType || (ObjectType = {}));\n","import { StreamWriter } from '@syncfusion/ej2-file-utils';\nimport { Encoding } from '@syncfusion/ej2-file-utils';\nimport { PdfDocument } from './pdf-document';\n/**\n * `PdfDocumentBase` class represent common properties of PdfDocument classes.\n * @private\n */\nvar PdfDocumentBase = /** @class */ (function () {\n function PdfDocumentBase(document) {\n /**\n * If the stream is copied, then it specifies true.\n * @private\n */\n this.isStreamCopied = false;\n if (document instanceof PdfDocument) {\n this.document = document;\n }\n }\n Object.defineProperty(PdfDocumentBase.prototype, \"pdfObjects\", {\n //Prpperties\n /**\n * Gets the `PDF objects` collection, which stores all objects and references to it..\n * @private\n */\n get: function () {\n return this.objects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"crossTable\", {\n /**\n * Gets the `cross-reference` table.\n * @private\n */\n get: function () {\n return this.pdfCrossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"currentSavingObj\", {\n /**\n * Gets or sets the current saving `object number`.\n * @private\n */\n get: function () {\n return this.currentSavingObject;\n },\n set: function (value) {\n this.currentSavingObject = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"catalog\", {\n /**\n * Gets the PDF document `catalog`.\n * @private\n */\n get: function () {\n return this.pdfCatalog;\n },\n set: function (value) {\n this.pdfCatalog = value;\n },\n enumerable: true,\n configurable: true\n });\n //Public methods\n /**\n * Sets the `main object collection`.\n * @private\n */\n PdfDocumentBase.prototype.setMainObjectCollection = function (mainObjectCollection) {\n this.objects = mainObjectCollection;\n };\n /**\n * Sets the `cross table`.\n * @private\n */\n PdfDocumentBase.prototype.setCrossTable = function (cTable) {\n this.pdfCrossTable = cTable;\n };\n /**\n * Sets the `catalog`.\n * @private\n */\n PdfDocumentBase.prototype.setCatalog = function (catalog) {\n this.pdfCatalog = catalog;\n };\n PdfDocumentBase.prototype.save = function (filename) {\n var _this = this;\n var encoding = new Encoding(true);\n var SW = new StreamWriter(encoding);\n if (typeof filename === 'undefined') {\n var encoding_1 = new Encoding(true);\n var SW_1 = new StreamWriter(encoding_1);\n return new Promise(function (resolve, reject) {\n /* tslint:disable-next-line:no-any */\n var obj = {};\n obj.blobData = new Blob([_this.document.docSave(SW_1, true)], { type: 'application/pdf' });\n resolve(obj);\n });\n }\n else {\n this.document.docSave(SW, filename, true);\n }\n };\n /**\n * `Clone` of parent object - PdfDocument.\n * @private\n */\n PdfDocumentBase.prototype.clone = function () {\n return this.document;\n };\n return PdfDocumentBase;\n}());\nexport { PdfDocumentBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfCatalog.ts class for EJ2-PDF\n */\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\n/**\n * `PdfCatalog` class represents internal catalog of the Pdf document.\n * @private\n */\nvar PdfCatalog = /** @class */ (function (_super) {\n __extends(PdfCatalog, _super);\n //constructor\n /**\n * Initializes a new instance of the `PdfCatalog` class.\n * @private\n */\n function PdfCatalog() {\n var _this = _super.call(this) || this;\n //fields\n /**\n * Internal variable to store collection of `sections`.\n * @default null\n * @private\n */\n _this.sections = null;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @private\n */\n _this.tempDictionaryProperties = new DictionaryProperties();\n _this.items.setValue(new DictionaryProperties().type, new PdfName('Catalog'));\n return _this;\n }\n Object.defineProperty(PdfCatalog.prototype, \"pages\", {\n //Properties\n /**\n * Gets or sets the sections, which contain `pages`.\n * @private\n */\n get: function () {\n return this.sections;\n },\n set: function (value) {\n var dictionary = value.element;\n // if (this.sections !== value) {\n // this.sections = value;\n // this.Items.setValue(this.tempDictionaryProperties.pages, new PdfReferenceHolder(value));\n // }\n this.sections = value;\n this.items.setValue(this.tempDictionaryProperties.pages, new PdfReferenceHolder(value));\n },\n enumerable: true,\n configurable: true\n });\n return PdfCatalog;\n}(PdfDictionary));\nexport { PdfCatalog };\n","/**\n * public Enum for `PdfPageOrientation`.\n * @private\n */\nexport var PdfPageOrientation;\n(function (PdfPageOrientation) {\n /**\n * Specifies the type of `Portrait`.\n * @private\n */\n PdfPageOrientation[PdfPageOrientation[\"Portrait\"] = 0] = \"Portrait\";\n /**\n * Specifies the type of `Landscape`.\n * @private\n */\n PdfPageOrientation[PdfPageOrientation[\"Landscape\"] = 1] = \"Landscape\";\n})(PdfPageOrientation || (PdfPageOrientation = {}));\n/**\n * public Enum for `PdfPageRotateAngle`.\n * @private\n */\nexport var PdfPageRotateAngle;\n(function (PdfPageRotateAngle) {\n /**\n * Specifies the type of `RotateAngle0`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle0\"] = 0] = \"RotateAngle0\";\n /**\n * Specifies the type of `RotateAngle90`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle90\"] = 1] = \"RotateAngle90\";\n /**\n * Specifies the type of `RotateAngle180`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle180\"] = 2] = \"RotateAngle180\";\n /**\n * Specifies the type of `RotateAngle270`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle270\"] = 3] = \"RotateAngle270\";\n})(PdfPageRotateAngle || (PdfPageRotateAngle = {}));\n/**\n * public Enum for `PdfNumberStyle`.\n * @private\n */\nexport var PdfNumberStyle;\n(function (PdfNumberStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Numeric`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"Numeric\"] = 1] = \"Numeric\";\n /**\n * Specifies the type of `LowerLatin`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"LowerLatin\"] = 2] = \"LowerLatin\";\n /**\n * Specifies the type of `LowerRoman`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"LowerRoman\"] = 3] = \"LowerRoman\";\n /**\n * Specifies the type of `UpperLatin`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"UpperLatin\"] = 4] = \"UpperLatin\";\n /**\n * Specifies the type of `UpperRoman`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"UpperRoman\"] = 5] = \"UpperRoman\";\n})(PdfNumberStyle || (PdfNumberStyle = {}));\n/**\n * public Enum for `PdfDockStyle`.\n * @private\n */\nexport var PdfDockStyle;\n(function (PdfDockStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Bottom\"] = 1] = \"Bottom\";\n /**\n * Specifies the type of `Top`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Top\"] = 2] = \"Top\";\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Left\"] = 3] = \"Left\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Right\"] = 4] = \"Right\";\n /**\n * Specifies the type of `Fill`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Fill\"] = 5] = \"Fill\";\n})(PdfDockStyle || (PdfDockStyle = {}));\n/**\n * public Enum for `PdfAlignmentStyle`.\n * @private\n */\nexport var PdfAlignmentStyle;\n(function (PdfAlignmentStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `TopLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopLeft\"] = 1] = \"TopLeft\";\n /**\n * Specifies the type of `TopCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopCenter\"] = 2] = \"TopCenter\";\n /**\n * Specifies the type of `TopRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopRight\"] = 3] = \"TopRight\";\n /**\n * Specifies the type of `MiddleLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleLeft\"] = 4] = \"MiddleLeft\";\n /**\n * Specifies the type of `MiddleCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleCenter\"] = 5] = \"MiddleCenter\";\n /**\n * Specifies the type of `MiddleRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleRight\"] = 6] = \"MiddleRight\";\n /**\n * Specifies the type of `BottomLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomLeft\"] = 7] = \"BottomLeft\";\n /**\n * Specifies the type of `BottomCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomCenter\"] = 8] = \"BottomCenter\";\n /**\n * Specifies the type of `BottomRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomRight\"] = 9] = \"BottomRight\";\n})(PdfAlignmentStyle || (PdfAlignmentStyle = {}));\n/**\n * public Enum for `TemplateType`.\n * @private\n */\nexport var TemplateType;\n(function (TemplateType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n TemplateType[TemplateType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Top`.\n * @private\n */\n TemplateType[TemplateType[\"Top\"] = 1] = \"Top\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n TemplateType[TemplateType[\"Bottom\"] = 2] = \"Bottom\";\n /**\n * Specifies the type of `Left`.\n * @private\n */\n TemplateType[TemplateType[\"Left\"] = 3] = \"Left\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n TemplateType[TemplateType[\"Right\"] = 4] = \"Right\";\n})(TemplateType || (TemplateType = {}));\n","import { ObjectStatus } from './../input-output/enum';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './pdf-dictionary-properties';\nimport { Operators } from './pdf-operators';\nimport { Dictionary } from './../collections/dictionary';\nimport { PdfReference } from './../primitives/pdf-reference';\nimport { ObjectType } from './cross-table';\nimport { PdfStream } from './../primitives/pdf-stream';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfCatalog } from './../document/pdf-catalog';\n/**\n * `PdfCrossTable` is responsible for intermediate level parsing\n * and savingof a PDF document.\n * @private\n */\nvar PdfCrossTable = /** @class */ (function () {\n function PdfCrossTable() {\n /**\n * The modified `objects` that should be saved.\n * @private\n */\n this.objects = new Dictionary();\n /**\n * Holds `maximal generation number` or offset to object.\n * @default 0\n * @private\n */\n this.maxGenNumIndex = 0;\n /**\n * The `number of the objects`.\n * @default 0\n * @private\n */\n this.objectCount = 0;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @default new PdfDictionaryProperties()\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n }\n Object.defineProperty(PdfCrossTable.prototype, \"isMerging\", {\n //Properties\n /**\n * Gets or sets if the document `is merged`.\n * @private\n */\n get: function () {\n return this.merging;\n },\n set: function (value) {\n this.merging = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"trailer\", {\n /**\n * Gets the `trailer`.\n * @private\n */\n get: function () {\n if (this.internalTrailer == null) {\n this.internalTrailer = new PdfStream();\n }\n return this.internalTrailer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"document\", {\n /**\n * Gets or sets the main `PdfDocument` class instance.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n this.items = this.pdfDocument.pdfObjects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"pdfObjects\", {\n /**\n * Gets the catched `PDF object` main collection.\n * @private\n */\n get: function () {\n return this.items;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"objectCollection\", {\n /**\n * Gets the `object collection`.\n * @private\n */\n get: function () {\n return this.pdfDocument.pdfObjects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"count\", {\n /**\n * Gets or sets the `number of the objects` within the document.\n * @private\n */\n get: function () {\n return this.objectCount;\n },\n set: function (value) {\n this.objectCount = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"nextObjNumber\", {\n /**\n * Returns `next available object number`.\n * @private\n */\n get: function () {\n this.count = this.count + 1;\n return this.count;\n },\n enumerable: true,\n configurable: true\n });\n PdfCrossTable.prototype.save = function (writer, filename) {\n this.saveHead(writer);\n var state = false;\n this.mappedReferences = null;\n this.objects.clear();\n this.markTrailerReferences();\n this.saveObjects(writer);\n var saveCount = this.count;\n var xrefPos = writer.position;\n this.registerObject(0, new PdfReference(0, -1), true);\n var prevXRef = 0;\n writer.write(Operators.xref);\n writer.write(Operators.newLine);\n this.saveSections(writer);\n this.saveTrailer(writer, this.count, prevXRef);\n this.saveTheEndess(writer, xrefPos);\n this.count = saveCount;\n for (var i = 0; i < this.objectCollection.count; ++i) {\n var oi = this.objectCollection.items(i);\n oi.object.isSaving = false;\n }\n if (typeof filename === 'undefined') {\n return writer.stream.buffer;\n }\n else {\n writer.stream.save(filename);\n }\n };\n /**\n * `Saves the endess` of the file.\n * @private\n */\n PdfCrossTable.prototype.saveTheEndess = function (writer, xrefPos) {\n writer.write(Operators.newLine + Operators.startxref + Operators.newLine);\n writer.write(xrefPos.toString() + Operators.newLine);\n writer.write(Operators.eof + Operators.newLine);\n };\n /**\n * `Saves the new trailer` dictionary.\n * @private\n */\n PdfCrossTable.prototype.saveTrailer = function (writer, count, prevXRef) {\n writer.write(Operators.trailer + Operators.newLine);\n // Save the dictionary.\n var trailer = this.trailer;\n trailer.items.setValue(this.dictionaryProperties.size, new PdfNumber(this.objectCount + 1));\n trailer = new PdfDictionary(trailer); // Make it real dictionary.\n trailer.setEncrypt(false);\n trailer.save(writer);\n };\n /**\n * `Saves the xref section`.\n * @private\n */\n PdfCrossTable.prototype.saveSections = function (writer) {\n var objectNum = 0;\n var count = 0;\n do {\n count = this.prepareSubsection(objectNum);\n this.saveSubsection(writer, objectNum, count);\n objectNum += count;\n } while (count !== 0);\n };\n /**\n * `Saves a subsection`.\n * @private\n */\n PdfCrossTable.prototype.saveSubsection = function (writer, objectNum, count) {\n if (count <= 0 || objectNum >= this.count) {\n return;\n }\n var subsectionHead = '{0} {1}{2}';\n writer.write(objectNum + ' ' + (count + 1) + Operators.newLine);\n for (var i = objectNum; i <= objectNum + count; ++i) {\n var obj = this.objects.getValue(i);\n var str = '';\n if (obj.type === ObjectType.Free) {\n str = this.getItem(obj.offset, 65535, true);\n }\n else {\n str = this.getItem(obj.offset, obj.generation, false);\n }\n writer.write(str);\n }\n };\n /**\n * Generates string for `xref table item`.\n * @private\n */\n PdfCrossTable.prototype.getItem = function (offset, genNumber, isFree) {\n var returnString = '';\n var addOffsetLength = 10 - offset.toString().length;\n if (genNumber <= 0) {\n genNumber = 0;\n }\n var addGenNumberLength = (5 - genNumber.toString().length) <= 0 ? 0 : (5 - genNumber.toString().length);\n for (var index = 0; index < addOffsetLength; index++) {\n returnString = returnString + '0';\n }\n returnString = returnString + offset.toString() + ' ';\n for (var index = 0; index < addGenNumberLength; index++) {\n returnString = returnString + '0';\n }\n returnString = returnString + genNumber.toString() + ' ';\n returnString = returnString + ((isFree) ? Operators.f : Operators.n) + Operators.newLine;\n return returnString;\n };\n /**\n * `Prepares a subsection` of the current section within the cross-reference table.\n * @private\n */\n PdfCrossTable.prototype.prepareSubsection = function (objectNum) {\n var count = 0;\n var i;\n var total = this.count;\n for (var k = 0; k < this.document.pdfObjects.count; k++) {\n var reference = this.document.pdfObjects.items(k).reference;\n var refString = reference.toString();\n var refArray = refString.split(' ');\n }\n if (objectNum >= total) {\n return count;\n }\n // search for first changed indirect object.\n for (i = objectNum; i < total; ++i) {\n break;\n }\n objectNum = i;\n // look up for all indirect objects in one subsection.\n for (; i < total; ++i) {\n ++count;\n }\n return count;\n };\n /**\n * `Marks the trailer references` being saved.\n * @private\n */\n PdfCrossTable.prototype.markTrailerReferences = function () {\n var tempArray;\n var keys = this.trailer.items.keys();\n var values = this.trailer.items.values();\n };\n /**\n * `Saves the head`.\n * @private\n */\n PdfCrossTable.prototype.saveHead = function (writer) {\n var version = this.generateFileVersion(writer.document);\n writer.write('%PDF-' + version);\n writer.write(Operators.newLine);\n };\n /**\n * Generates the `version` of the file.\n * @private\n */\n PdfCrossTable.prototype.generateFileVersion = function (document) {\n var iVersion = 4;\n var version = '1.' + iVersion.toString();\n return version;\n };\n PdfCrossTable.prototype.getReference = function (obj, bNew) {\n if (typeof bNew === 'undefined') {\n var wasNew = false;\n return this.getReference(obj, wasNew);\n }\n else {\n //code splitted for reducing lines of code exceeds 100.\n return this.getSubReference(obj, bNew);\n }\n };\n /**\n * Retrieves the `reference` of the object given.\n * @private\n */\n PdfCrossTable.prototype.getSubReference = function (obj, bNew) {\n var isNew = false;\n var wasNew;\n var reference = null;\n // if (obj.IsSaving) {\n if (this.items.count > 0 && obj.objectCollectionIndex > 0 && this.items.count > obj.objectCollectionIndex - 1) {\n var tempObj = this.document.pdfObjects.getReference(obj, wasNew);\n reference = tempObj.reference;\n wasNew = tempObj.wasNew;\n }\n if (reference == null) {\n if (obj.status === ObjectStatus.Registered) {\n wasNew = false;\n }\n else {\n wasNew = true;\n }\n }\n else {\n wasNew = false;\n }\n // need to add mapped reference code\n if (reference == null) {\n var objnumber = this.nextObjNumber;\n reference = new PdfReference(objnumber, 0);\n var found = void 0;\n if (wasNew) {\n this.document.pdfObjects.add(obj);\n this.document.pdfObjects.trySetReference(obj, reference, found);\n var tempIndex = this.document.pdfObjects.count - 1;\n var tempkey = this.document.pdfObjects.objectCollections[tempIndex].reference.objNumber;\n var tempvalue = this.document.pdfObjects.objectCollections[this.document.pdfObjects.count - 1];\n this.document.pdfObjects.mainObjectCollection.setValue(tempkey, tempvalue);\n obj.position = -1;\n }\n else {\n this.document.pdfObjects.trySetReference(obj, reference, found);\n }\n obj.objectCollectionIndex = reference.objNumber;\n obj.status = ObjectStatus.None;\n isNew = true;\n }\n bNew = isNew || this.bForceNew;\n return reference;\n };\n /**\n * `Saves all objects` in the collection.\n * @private\n */\n PdfCrossTable.prototype.saveObjects = function (writer) {\n var objectCollection = this.objectCollection;\n for (var i = 0; i < objectCollection.count; ++i) {\n var oi = objectCollection.items(i);\n var obj = oi.object;\n obj.isSaving = true;\n this.saveIndirectObject(obj, writer);\n }\n };\n /**\n * `Saves indirect object`.\n * @private\n */\n PdfCrossTable.prototype.saveIndirectObject = function (obj, writer) {\n var reference = this.getReference(obj);\n if (obj instanceof PdfCatalog) {\n this.trailer.items.setValue(this.dictionaryProperties.root, reference);\n }\n // NOTE : This is needed for correct string objects encryption.\n this.pdfDocument.currentSavingObj = reference;\n var tempArchive = false;\n tempArchive = obj.getArchive();\n var allowedType = !((obj instanceof PdfStream) || !tempArchive || (obj instanceof PdfCatalog));\n var sigFlag = false;\n this.registerObject(writer.position, reference);\n this.doSaveObject(obj, reference, writer);\n };\n /**\n * Performs `real saving` of the save object.\n * @private\n */\n PdfCrossTable.prototype.doSaveObject = function (obj, reference, writer) {\n var correctPosition = writer.length;\n writer.write(reference.objNumber.toString());\n writer.write(Operators.whiteSpace);\n writer.write(reference.genNumber.toString());\n writer.write(Operators.whiteSpace);\n writer.write(Operators.obj);\n writer.write(Operators.newLine);\n obj.save(writer);\n var stream = writer.stream;\n writer.write(Operators.endObj);\n writer.write(Operators.newLine);\n };\n PdfCrossTable.prototype.registerObject = function (offset, reference, free) {\n if (typeof free === 'boolean') {\n // Register the object by its number.\n this.objects.setValue(reference.objNumber, new RegisteredObject(offset, reference, free));\n this.maxGenNumIndex = Math.max(this.maxGenNumIndex, reference.genNumber);\n }\n else if (typeof free === 'undefined') {\n // Register the object by its number.\n this.objects.setValue(reference.objNumber, new RegisteredObject(offset, reference));\n this.maxGenNumIndex = Math.max(this.maxGenNumIndex, reference.genNumber);\n }\n };\n /**\n * `Dereferences` the specified primitive object.\n * @private\n */\n PdfCrossTable.dereference = function (obj) {\n var rh = obj;\n if (rh != null) {\n obj = rh.object;\n }\n return obj;\n };\n return PdfCrossTable;\n}());\nexport { PdfCrossTable };\nvar RegisteredObject = /** @class */ (function () {\n function RegisteredObject(offset, reference, free) {\n if (typeof free === 'undefined') {\n var tempOffset = offset;\n this.offsetNumber = tempOffset;\n var tempReference = reference;\n this.generation = tempReference.genNumber;\n this.object = tempReference.objNumber;\n this.type = ObjectType.Normal;\n }\n else {\n var tempOffset = offset;\n var tempReference = reference;\n this.constructor(tempOffset, tempReference);\n var tempFree = free;\n this.type = ObjectType.Free;\n }\n }\n Object.defineProperty(RegisteredObject.prototype, \"objectNumber\", {\n //Properties\n /**\n * Gets the `object number`.\n * @private\n */\n get: function () {\n return this.object;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RegisteredObject.prototype, \"offset\", {\n /**\n * Gets the `offset`.\n * @private\n */\n get: function () {\n var result;\n result = this.offsetNumber;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n return RegisteredObject;\n}());\nexport { RegisteredObject };\n","/**\n * PdfPageSize.ts class for EJ2-PDF\n */\nimport { SizeF } from './../drawing/pdf-drawing';\n/**\n * Represents information about various predefined `page sizes`.\n */\nvar PdfPageSize = /** @class */ (function () {\n //constructor\n /**\n * Initialize an instance for `PdfPageSize` class.\n * @private\n */\n function PdfPageSize() {\n // \n }\n /**\n * Specifies the size of `letter`.\n * @private\n */\n PdfPageSize.letter = new SizeF(612, 792);\n /**\n * Specifies the size of `note`.\n * @private\n */\n PdfPageSize.note = new SizeF(540, 720);\n /**\n * Specifies the size of `legal`.\n * @private\n */\n PdfPageSize.legal = new SizeF(612, 1008);\n /**\n * Specifies the size of `a0`.\n * @private\n */\n PdfPageSize.a0 = new SizeF(2380, 3368);\n /**\n * Specifies the size of `a1`.\n * @private\n */\n PdfPageSize.a1 = new SizeF(1684, 2380);\n /**\n * Specifies the size of `a2`.\n * @private\n */\n PdfPageSize.a2 = new SizeF(1190, 1684);\n /**\n * Specifies the size of `a3`.\n * @private\n */\n PdfPageSize.a3 = new SizeF(842, 1190);\n /**\n * Specifies the size of `a4`.\n * @private\n */\n PdfPageSize.a4 = new SizeF(595, 842);\n /**\n * Specifies the size of `a5`.\n * @private\n */\n PdfPageSize.a5 = new SizeF(421, 595);\n /**\n * Specifies the size of `a6`.\n * @private\n */\n PdfPageSize.a6 = new SizeF(297, 421);\n /**\n * Specifies the size of `a7`.\n * @private\n */\n PdfPageSize.a7 = new SizeF(210, 297);\n /**\n * Specifies the size of `a8`.\n * @private\n */\n PdfPageSize.a8 = new SizeF(148, 210);\n /**\n * Specifies the size of `a9`.\n * @private\n */\n PdfPageSize.a9 = new SizeF(105, 148);\n /**\n * Specifies the size of `a10`.\n * @private\n */\n PdfPageSize.a10 = new SizeF(74, 105);\n /**\n * Specifies the size of `b0`.\n * @private\n */\n PdfPageSize.b0 = new SizeF(2836, 4008);\n /**\n * Specifies the size of `b1`.\n * @private\n */\n PdfPageSize.b1 = new SizeF(2004, 2836);\n /**\n * Specifies the size of `b2`.\n * @private\n */\n PdfPageSize.b2 = new SizeF(1418, 2004);\n /**\n * Specifies the size of `b3`.\n * @private\n */\n PdfPageSize.b3 = new SizeF(1002, 1418);\n /**\n * Specifies the size of `b4`.\n * @private\n */\n PdfPageSize.b4 = new SizeF(709, 1002);\n /**\n * Specifies the size of `b5`.\n * @private\n */\n PdfPageSize.b5 = new SizeF(501, 709);\n /**\n * Specifies the size of `archE`.\n * @private\n */\n PdfPageSize.archE = new SizeF(2592, 3456);\n /**\n * Specifies the size of `archD`.\n * @private\n */\n PdfPageSize.archD = new SizeF(1728, 2592);\n /**\n * Specifies the size of `archC`.\n * @private\n */\n PdfPageSize.archC = new SizeF(1296, 1728);\n /**\n * Specifies the size of `archB`.\n * @private\n */\n PdfPageSize.archB = new SizeF(864, 1296);\n /**\n * Specifies the size of `archA`.\n * @private\n */\n PdfPageSize.archA = new SizeF(648, 864);\n /**\n * Specifies the size of `flsa`.\n * @private\n */\n PdfPageSize.flsa = new SizeF(612, 936);\n /**\n * Specifies the size of `halfLetter`.\n * @private\n */\n PdfPageSize.halfLetter = new SizeF(396, 612);\n /**\n * Specifies the size of `letter11x17`.\n * @private\n */\n PdfPageSize.letter11x17 = new SizeF(792, 1224);\n /**\n * Specifies the size of `ledger`.\n * @private\n */\n PdfPageSize.ledger = new SizeF(1224, 792);\n return PdfPageSize;\n}());\nexport { PdfPageSize };\n","/**\n * PdfMargins.ts class for EJ2-PDF\n * A class representing PDF page margins.\n */\nvar PdfMargins = /** @class */ (function () {\n /**\n * Initializes a new instance of the `PdfMargins` class.\n * @private\n */\n function PdfMargins() {\n /**\n * Represents the `Default Page Margin` value.\n * @default 0.0\n * @private\n */\n this.pdfMargin = 40.0;\n this.setMargins(this.pdfMargin);\n }\n Object.defineProperty(PdfMargins.prototype, \"left\", {\n //Properties\n /**\n * Gets or sets the `left margin` size.\n * @private\n */\n get: function () {\n return this.leftMargin;\n },\n set: function (value) {\n this.leftMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"top\", {\n /**\n * Gets or sets the `top margin` size.\n * @private\n */\n get: function () {\n return this.topMargin;\n },\n set: function (value) {\n this.topMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"right\", {\n /**\n * Gets or sets the `right margin` size.\n * @private\n */\n get: function () {\n return this.rightMargin;\n },\n set: function (value) {\n this.rightMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"bottom\", {\n /**\n * Gets or sets the `bottom margin` size.\n * @private\n */\n get: function () {\n return this.bottomMargin;\n },\n set: function (value) {\n this.bottomMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"all\", {\n /**\n * Sets the `margins`.\n * @private\n */\n set: function (value) {\n this.setMargins(value);\n },\n enumerable: true,\n configurable: true\n });\n PdfMargins.prototype.setMargins = function (margin1, margin2, margin3, margin4) {\n if (typeof margin2 === 'undefined') {\n this.leftMargin = this.topMargin = this.rightMargin = this.bottomMargin = margin1;\n }\n else {\n if (typeof margin3 === 'undefined') {\n this.leftMargin = this.rightMargin = margin1;\n this.bottomMargin = this.topMargin = margin2;\n }\n else {\n this.leftMargin = margin1;\n this.topMargin = margin2;\n this.rightMargin = margin3;\n this.bottomMargin = margin4;\n }\n }\n };\n /**\n * `Clones` the object.\n * @private\n */\n PdfMargins.prototype.clone = function () {\n return this;\n };\n return PdfMargins;\n}());\nexport { PdfMargins };\n","/**\n * ImageDecoder class\n */\nimport { ByteArray } from './byte-array';\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PdfNumber } from './../../primitives/pdf-number';\nimport { PdfBoolean } from './../../primitives/pdf-boolean';\nimport { PdfDictionary } from './../../primitives/pdf-dictionary';\n/**\n * Specifies the image `format`.\n * @private\n */\nexport var ImageFormat;\n(function (ImageFormat) {\n /**\n * Specifies the type of `Unknown`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * Specifies the type of `Bmp`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Bmp\"] = 1] = \"Bmp\";\n /**\n * Specifies the type of `Emf`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Emf\"] = 2] = \"Emf\";\n /**\n * Specifies the type of `Gif`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Gif\"] = 3] = \"Gif\";\n /**\n * Specifies the type of `Jpeg`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Jpeg\"] = 4] = \"Jpeg\";\n /**\n * Specifies the type of `Png`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Png\"] = 5] = \"Png\";\n /**\n * Specifies the type of `Wmf`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Wmf\"] = 6] = \"Wmf\";\n /**\n * Specifies the type of `Icon`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Icon\"] = 7] = \"Icon\";\n})(ImageFormat || (ImageFormat = {}));\n/**\n * `Decode the image stream`.\n * @private\n */\nvar ImageDecoder = /** @class */ (function () {\n /**\n * Initialize the new instance for `image-decoder` class.\n * @private\n */\n function ImageDecoder(stream) {\n /**\n * Specifies `format` of image.\n * @hidden\n * @private\n */\n this.mFormat = ImageFormat.Unknown;\n /**\n * `Bits per component`.\n * @default 8\n * @hidden\n * @private\n */\n this.mbitsPerComponent = 8;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.mStream = stream;\n this.initialize();\n }\n Object.defineProperty(ImageDecoder.prototype, \"height\", {\n /**\n * Gets the `height` of image.\n * @hidden\n * @private\n */\n get: function () {\n return this.mHeight;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"width\", {\n /**\n * Gets the `width` of image.\n * @hidden\n * @private\n */\n get: function () {\n return this.mWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"bitsPerComponent\", {\n /**\n * Gets `bits per component`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mbitsPerComponent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"size\", {\n /**\n * Gets the `size` of an image data.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData.count;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"imageData\", {\n /**\n * Gets the value of an `image data`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"imageDataAsNumberArray\", {\n /**\n * Gets the value of an `image data as number array`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData.internalBuffer.buffer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Initialize` image data and image stream.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.initialize = function () {\n if (this.mFormat === ImageFormat.Unknown && this.checkIfJpeg()) {\n this.mFormat = ImageFormat.Jpeg;\n this.parseJpegImage();\n }\n this.reset();\n this.mImageData = new ByteArray(this.mStream.count);\n this.mStream.read(this.mImageData, 0, this.mImageData.count);\n };\n /**\n * `Reset` stream position into 0.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.reset = function () {\n this.mStream.position = 0;\n };\n /**\n * `Parse` Jpeg image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.parseJpegImage = function () {\n this.reset();\n var imgData = new ByteArray(this.mStream.count);\n this.mStream.read(imgData, 0, imgData.count);\n var i = 4;\n /* tslint:disable */\n if (String.fromCharCode(imgData.getBuffer(i + 2)) === 'J' && String.fromCharCode(imgData.getBuffer(i + 3)) === 'F' && String.fromCharCode(imgData.getBuffer(i + 4)) === 'I' && String.fromCharCode(imgData.getBuffer(i + 5)) === 'F' && imgData.getBuffer(i + 6) === 0) {\n var length_1 = imgData.getBuffer(i) * 256 + imgData.getBuffer(i + 1);\n while (i + length_1 < imgData.count) {\n i += length_1;\n if (imgData.getBuffer(i + 1) === 192) {\n this.mHeight = imgData.getBuffer(i + 5) * 256 + imgData.getBuffer(i + 6);\n this.mWidth = imgData.getBuffer(i + 7) * 256 + imgData.getBuffer(i + 8);\n return;\n }\n else {\n i += 2;\n length_1 = imgData.getBuffer(i) * 256 + imgData.getBuffer(i + 1);\n }\n }\n }\n /* tslint:enable */\n };\n Object.defineProperty(ImageDecoder.prototype, \"format\", {\n /**\n * Gets the image `format`.\n * @private\n * @hidden\n */\n get: function () {\n return this.mFormat;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Checks if JPG`.\n * @private\n * @hidden\n */\n ImageDecoder.prototype.checkIfJpeg = function () {\n this.reset();\n for (var i = 0; i < ImageDecoder.mJpegHeader.length; i++) {\n if (ImageDecoder.mJpegHeader[i] !== this.mStream.readByte(i)) {\n return false;\n }\n this.mStream.position++;\n }\n return true;\n };\n /**\n * Return image `dictionary`.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getImageDictionary = function () {\n if (this.mFormat === ImageFormat.Jpeg) {\n var tempArrayBuffer = this.imageData.internalBuffer.length;\n this.imageStream = new PdfStream();\n this.imageStream.isImage = true;\n var tempString = '';\n var decodedString = '';\n for (var i = 0; i < this.imageDataAsNumberArray.byteLength; i++) {\n tempString += String.fromCharCode(null, this.mStream.readByte(i));\n }\n for (var i = 0; i < tempString.length; i++) {\n if (i % 2 !== 0) {\n decodedString += tempString[i];\n }\n }\n this.imageStream.data = [decodedString];\n this.imageStream.compress = false;\n this.imageStream.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.xObject));\n this.imageStream.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.image));\n this.imageStream.items.setValue(this.dictionaryProperties.width, new PdfNumber(this.width));\n this.imageStream.items.setValue(this.dictionaryProperties.height, new PdfNumber(this.height));\n this.imageStream.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));\n this.imageStream.items.setValue(this.dictionaryProperties.filter, new PdfName(this.dictionaryProperties.dctdecode));\n this.imageStream.items.setValue(this.dictionaryProperties.colorSpace, new PdfName(this.getColorSpace()));\n this.imageStream.items.setValue(this.dictionaryProperties.decodeParms, this.getDecodeParams());\n return this.imageStream;\n }\n else {\n return this.imageStream;\n }\n };\n /**\n * Return `colorSpace` of an image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getColorSpace = function () {\n return this.dictionaryProperties.deviceRgb;\n };\n /**\n * Return `decode parameters` of an image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getDecodeParams = function () {\n var decodeParams = new PdfDictionary();\n decodeParams.items.setValue(this.dictionaryProperties.columns, new PdfNumber(this.width));\n decodeParams.items.setValue(this.dictionaryProperties.blackIs1, new PdfBoolean(true));\n decodeParams.items.setValue(this.dictionaryProperties.k, new PdfNumber(-1));\n decodeParams.items.setValue(this.dictionaryProperties.predictor, new PdfNumber(15));\n decodeParams.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));\n return decodeParams;\n };\n /**\n * Number array for `png header`.\n * @hidden\n * @private\n */\n ImageDecoder.mPngHeader = [137, 80, 78, 71, 13, 10, 26, 10];\n /**\n * Number Array for `jpeg header`.\n * @hidden\n * @private\n */\n ImageDecoder.mJpegHeader = [255, 216];\n /**\n * Number array for `gif header`.\n * @hidden\n * @private\n */\n ImageDecoder.GIF_HEADER = 'G,I,F,8';\n /**\n * Number array for `bmp header.`\n * @hidden\n * @private\n */\n ImageDecoder.BMP_HEADER = 'B,M';\n return ImageDecoder;\n}());\nexport { ImageDecoder };\n","/**\n * PdfPageSettings.ts class for EJ2-PDF\n */\nimport { SizeF, PointF } from './../drawing/pdf-drawing';\nimport { PdfPageSize } from './pdf-page-size';\nimport { PdfPageRotateAngle, PdfPageOrientation } from './enum';\nimport { PdfMargins } from './../graphics/pdf-margins';\n/**\n * The class provides various `setting` related with PDF pages.\n */\nvar PdfPageSettings = /** @class */ (function () {\n function PdfPageSettings(margins) {\n //Fields\n /**\n * The page `margins`.\n * @private\n */\n this.pageMargins = new PdfMargins();\n /**\n * The page `size`.\n * @default a4\n * @private\n */\n this.pageSize = PdfPageSize.a4;\n /**\n * The page `rotation angle`.\n * @default PdfPageRotateAngle.RotateAngle0\n * @private\n */\n this.rotateAngle = PdfPageRotateAngle.RotateAngle0;\n /**\n * The page `orientation`.\n * @default PdfPageOrientation.Portrait\n * @private\n */\n this.pageOrientation = PdfPageOrientation.Portrait;\n /**\n * The page `origin`.\n * @default 0,0\n * @private\n */\n this.pageOrigin = new PointF(0, 0);\n /**\n * Checks the Whether the `rotation` is applied or not.\n * @default false\n * @private\n */\n this.isRotation = false;\n if (typeof margins === 'number') {\n this.pageMargins.setMargins(margins);\n }\n }\n Object.defineProperty(PdfPageSettings.prototype, \"size\", {\n //Properties\n /**\n * Gets or sets the `size` of the page.\n * @private\n */\n get: function () {\n return this.pageSize;\n },\n set: function (value) {\n this.setSize(value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"orientation\", {\n /**\n * Gets or sets the page `orientation`.\n * @private\n */\n get: function () {\n return this.pageOrientation;\n },\n set: function (orientation) {\n if (this.pageOrientation !== orientation) {\n this.pageOrientation = orientation;\n this.updateSize(orientation);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"margins\", {\n /**\n * Gets or sets the `margins` of the page.\n * @private\n */\n get: function () {\n return this.pageMargins;\n },\n set: function (value) {\n this.pageMargins = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"width\", {\n /**\n * Gets or sets the `width` of the page.\n * @private\n */\n get: function () {\n return this.pageSize.width;\n },\n set: function (value) {\n this.pageSize.width = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"height\", {\n /**\n * Gets or sets the `height` of the page.\n * @private\n */\n get: function () {\n return this.pageSize.height;\n },\n set: function (value) {\n this.pageSize.height = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"origin\", {\n /**\n * Gets or sets the `origin` of the page.\n * @private\n */\n get: function () {\n return this.pageOrigin;\n },\n set: function (value) {\n this.pageOrigin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"rotate\", {\n /**\n * Gets or sets the number of degrees by which the page should be `rotated` clockwise when displayed or printed.\n * @private\n */\n get: function () {\n return this.rotateAngle;\n },\n set: function (value) {\n this.rotateAngle = value;\n this.isRotation = true;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * `Update page size` depending on orientation.\n * @private\n */\n PdfPageSettings.prototype.updateSize = function (orientation) {\n var min = Math.min(this.pageSize.width, this.pageSize.height);\n var max = Math.max(this.pageSize.width, this.pageSize.height);\n switch (orientation) {\n case PdfPageOrientation.Portrait:\n this.pageSize = new SizeF(min, max);\n break;\n case PdfPageOrientation.Landscape:\n this.pageSize = new SizeF(max, min);\n break;\n }\n };\n /**\n * Creates a `clone` of the object.\n * @private\n */\n PdfPageSettings.prototype.clone = function () {\n var settings = this;\n settings.pageMargins = this.pageMargins.clone();\n // if (GetTransition() != null)\n // {\n // settings.Transition = (PdfPageTransition)Transition.clone();\n // }\n return settings;\n };\n /**\n * Returns `size`, shrinked by the margins.\n * @private\n */\n PdfPageSettings.prototype.getActualSize = function () {\n var width = this.width - (this.margins.left + this.margins.right);\n var height = this.height - (this.margins.top + this.margins.bottom);\n var size = new SizeF(width, height);\n return size;\n };\n /**\n * Sets `size` to the page aaccording to the orientation.\n * @private\n */\n PdfPageSettings.prototype.setSize = function (size) {\n var min = Math.min(size.width, size.height);\n var max = Math.max(size.width, size.height);\n if (this.orientation === PdfPageOrientation.Portrait) {\n this.pageSize = new SizeF(min, max);\n }\n else {\n this.pageSize = new SizeF(max, min);\n }\n };\n return PdfPageSettings;\n}());\nexport { PdfPageSettings };\n","import { Operators } from './pdf-operators';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PointF, RectangleF } from './../drawing/pdf-drawing';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * Helper class to `write PDF graphic streams` easily.\n * @private\n */\nvar PdfStreamWriter = /** @class */ (function () {\n /**\n * Initialize an instance of `PdfStreamWriter` class.\n * @private\n */\n function PdfStreamWriter(stream) {\n if (stream == null) {\n throw new Error('ArgumentNullException:stream');\n }\n this.stream = stream;\n }\n //Implementation\n /**\n * `Clear` the stream.\n * @public\n */\n PdfStreamWriter.prototype.clear = function () {\n this.stream.clearStream();\n };\n PdfStreamWriter.prototype.setGraphicsState = function (dictionaryName) {\n if (dictionaryName instanceof PdfName) {\n this.stream.write(dictionaryName.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setGraphicsState);\n }\n else {\n this.stream.write(Operators.slash);\n this.stream.write(dictionaryName);\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setGraphicsState);\n }\n };\n /**\n * `Executes the XObject`.\n * @private\n */\n PdfStreamWriter.prototype.executeObject = function (name) {\n this.stream.write(name.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.paintXObject);\n this.stream.write(Operators.newLine);\n };\n /**\n * `Closes path object`.\n * @private\n */\n PdfStreamWriter.prototype.closePath = function () {\n this.writeOperator(Operators.closePath);\n };\n /**\n * `Clips the path`.\n * @private\n */\n PdfStreamWriter.prototype.clipPath = function (useEvenOddRule) {\n this.stream.write(Operators.clipPath);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n }\n this.stream.write(Operators.whiteSpace);\n this.stream.write(Operators.endPath);\n this.stream.write(Operators.newLine);\n };\n /**\n * `Closes, then fills and strokes the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeFillStrokePath = function (useEvenOddRule) {\n this.stream.write(Operators.closeFillStrokePath);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Fills and strokes path`.\n * @private\n */\n PdfStreamWriter.prototype.fillStrokePath = function (useEvenOddRule) {\n this.stream.write(Operators.fillStroke);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Fills path`.\n * @private\n */\n PdfStreamWriter.prototype.fillPath = function (useEvenOddRule) {\n this.stream.write(Operators.fill);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Ends the path`.\n * @private\n */\n PdfStreamWriter.prototype.endPath = function () {\n this.writeOperator(Operators.n);\n };\n /**\n * `Closes and fills the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeFillPath = function (useEvenOddRule) {\n this.writeOperator(Operators.closePath);\n this.stream.write(Operators.fill);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Closes and strokes the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeStrokePath = function () {\n this.writeOperator(Operators.closeStrokePath);\n };\n /**\n * `Sets the text scaling`.\n * @private\n */\n PdfStreamWriter.prototype.setTextScaling = function (textScaling) {\n this.stream.write(PdfNumber.floatToString(textScaling));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setTextScaling);\n };\n /**\n * `Strokes path`.\n * @private\n */\n PdfStreamWriter.prototype.strokePath = function () {\n this.writeOperator(Operators.stroke);\n };\n /**\n * `Restores` the graphics state.\n * @private\n */\n PdfStreamWriter.prototype.restoreGraphicsState = function () {\n this.writeOperator(Operators.restoreState);\n };\n /**\n * `Saves` the graphics state.\n * @private\n */\n PdfStreamWriter.prototype.saveGraphicsState = function () {\n this.writeOperator(Operators.saveState);\n };\n PdfStreamWriter.prototype.startNextLine = function (arg1, arg2) {\n if (typeof arg1 === 'undefined') {\n this.writeOperator(Operators.goToNextLine);\n }\n else if (arg1 instanceof PointF) {\n this.writePoint(arg1);\n this.writeOperator(Operators.setCoords);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writeOperator(Operators.setCoords);\n }\n };\n /**\n * 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[0], glyphChars.getValue(glyphCharKeys[0]));\n }\n for (var i = 0; i < glyphCharKeys.length; i++) {\n var nextKey = glyphCharKeys[0];\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 /**\n * Gets glyph's info by char code.\n */\n TtfReader.prototype.getGlyph = function (charCode) {\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 * 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 * 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 * 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 this.getDescendantWidth();\n };\n return UnicodeTrueTypeFont;\n}());\nexport { UnicodeTrueTypeFont };\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';\n/**\n * `PdfGraphics` class represents a graphics context of the objects.\n * It's used for performing all the graphics operations.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * //graphics of the page\n * let page1Graphics : PdfGraphics = page1.graphics;\n * // draw the text on the page1 graphics\n * page1Graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * //\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfGraphics = /** @class */ (function () {\n function PdfGraphics(arg1, arg2, arg3) {\n /**\n * Represents the `Current color space`.\n * @private\n */\n this.currentColorSpace = PdfColorSpace.Rgb;\n /**\n * Stores `previous rendering mode`.\n * @private\n */\n this.previousTextRenderingMode = TextRenderingMode.Fill;\n /**\n * Previous `character spacing` value or 0.\n * @private\n */\n this.previousCharacterSpacing = 0.0;\n /**\n * Previous `word spacing` value or 0.\n * @private\n */\n this.previousWordSpacing = 0.0;\n /**\n * The `previously used text scaling` value.\n * @private\n */\n this.previousTextScaling = 100.0;\n /**\n * Instance of `ProcedureSets` class.\n * @private\n */\n this.procedureSets = new ProcedureSets();\n /**\n * To check wihether it is a `direct text rendering`.\n * @default true\n * @private\n */\n this.isNormalRender = true;\n /**\n * check whether to `use font size` to calculate the shift.\n * @default false\n * @private\n */\n this.isUseFontSize = false;\n /**\n * check whether the font is in `italic type`.\n * @default false\n * @private\n */\n this.isItalic = false;\n /**\n * Check whether it is an `emf Text Matrix`.\n * @default false\n * @private\n */\n this.isEmfTextScaled = false;\n /**\n * Check whether it is an `emf` call.\n * @default false\n * @private\n */\n this.isEmf = false;\n /**\n * Check whether it is an `emf plus` call.\n * @default false\n * @private\n */\n this.isEmfPlus = false;\n /**\n * Check whether it is in `base line format`.\n * @default true\n * @private\n */\n this.isBaselineFormat = true;\n /**\n * Emf Text `Scaling Factor`.\n * @private\n */\n this.emfScalingFactor = new SizeF(0, 0);\n /**\n * To check whether the `last color space` of document and garphics is saved.\n * @private\n */\n this.colorSpaceChanged = false;\n /**\n * Stores an instance of `DictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isOverloadWithPosition = false;\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isPointOverload = false;\n /**\n * Current colorspaces.\n * @hidden\n * @private\n */\n this.currentColorSpaces = ['RGB', 'CMYK', 'GrayScale', 'Indexed'];\n /**\n * Checks the current image `is optimized` or not.\n * @default false.\n * @private\n */\n this.isImageOptimized = false;\n /**\n * Stores the `graphics states`.\n * @private\n */\n this.graphicsState = [];\n /**\n * Indicates whether the object `had trasparency`.\n * @default false\n * @private\n */\n this.istransparencySet = false;\n /**\n * Stores the instance of `PdfAutomaticFieldInfoCollection` class .\n * @default null\n * @private\n */\n this.internalAutomaticFields = null;\n /**\n * Stores the index of the start line that should draw with in the next page.\n * @private\n */\n this.startCutIndex = -1;\n if (arg3 instanceof PdfStreamWriter) {\n this.pdfStreamWriter = arg3;\n this.getResources = arg2;\n this.canvasSize = arg1;\n this.initialize();\n }\n else {\n this.constructor(arg1, arg2, new PdfStreamWriter(arg3));\n }\n }\n Object.defineProperty(PdfGraphics.prototype, \"stringLayoutResult\", {\n // Properties\n /**\n * Returns the `result` after drawing string.\n * @private\n */\n get: function () {\n return this.pdfStringLayoutResult;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"size\", {\n /**\n * Gets the `size` of the canvas.\n * @private\n */\n get: function () {\n return this.canvasSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"mediaBoxUpperRightBound\", {\n /**\n * Gets and Sets the value of `MediaBox upper right bound`.\n * @private\n */\n get: function () {\n if (typeof this.internalMediaBoxUpperRightBound === 'undefined') {\n this.internalMediaBoxUpperRightBound = 0;\n }\n return this.internalMediaBoxUpperRightBound;\n },\n set: function (value) {\n this.internalMediaBoxUpperRightBound = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"clientSize\", {\n /**\n * Gets the `size` of the canvas reduced by margins and page templates.\n * @private\n */\n get: function () {\n return new SizeF(this.clipBounds.width, this.clipBounds.height);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"colorSpace\", {\n /**\n * Gets or sets the current `color space` of the document\n * @private\n */\n get: function () {\n return this.currentColorSpace;\n },\n set: function (value) {\n this.currentColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"streamWriter\", {\n /**\n * Gets the `stream writer`.\n * @private\n */\n get: function () {\n return this.pdfStreamWriter;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"matrix\", {\n /**\n * Gets the `transformation matrix` reflecting current transformation.\n * @private\n */\n get: function () {\n if (this.transformationMatrix == null) {\n this.transformationMatrix = new PdfTransformationMatrix();\n }\n return this.transformationMatrix;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"layer\", {\n /**\n * Gets the `layer` for the graphics, if exists.\n * @private\n */\n get: function () {\n return this.pageLayer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"page\", {\n /**\n * Gets the `page` for this graphics, if exists.\n * @private\n */\n get: function () {\n return this.pageLayer.page;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"automaticFields\", {\n get: function () {\n if (this.internalAutomaticFields == null || typeof this.internalAutomaticFields === 'undefined') {\n this.internalAutomaticFields = new PdfAutomaticFieldInfoCollection();\n }\n return this.internalAutomaticFields;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Initializes` this instance.\n * @private\n */\n PdfGraphics.prototype.initialize = function () {\n this.bStateSaved = false;\n this.currentPen = null;\n this.currentBrush = null;\n this.currentFont = null;\n this.currentColorSpace = PdfColorSpace.Rgb;\n this.bCSInitialized = false;\n this.transformationMatrix = null;\n this.previousTextRenderingMode = (-1); //.Fill;\n this.previousCharacterSpacing = -1.0;\n this.previousWordSpacing = -1.0;\n this.previousTextScaling = -100.0;\n // this.m_trasparencies = null;\n this.currentStringFormat = null;\n this.clipBounds = new RectangleF(new PointF(0, 0), this.size);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.pdf);\n };\n PdfGraphics.prototype.drawPdfTemplate = function (template, location, size) {\n if (typeof size === 'undefined') {\n if (template == null) {\n throw Error('ArgumentNullException-template');\n }\n this.drawPdfTemplate(template, location, template.size);\n }\n else {\n // let crossTable : PdfCrossTable = null;\n // if (this.pageLayer != null) {\n // crossTable = (this.page as PdfPage).section.parentDocument.crossTable;\n // }\n if (template == null) {\n throw Error('ArgumentNullException-template');\n }\n var scaleX = (template.width > 0) ? size.width / template.width : 1;\n var scaleY = (template.height > 0) ? size.height / template.height : 1;\n var bNeedScale = !(scaleX === 1 && scaleY === 1);\n // Save state.\n var state = this.save();\n // Take into consideration that rect location is bottom/left.\n var matrix = new PdfTransformationMatrix();\n if (this.pageLayer != null) {\n this.getTranslateTransform(location.x, location.y + size.height, matrix);\n }\n if (bNeedScale) {\n this.getScaleTransform(scaleX, scaleY, matrix);\n }\n this.pdfStreamWriter.modifyCtm(matrix);\n // Output template.\n var resources = this.getResources.getResources();\n var name_1 = resources.getName(template);\n this.pdfStreamWriter.executeObject(name_1);\n // Restore state.\n this.restore(state);\n //Transfer automatic fields from template.\n var g = template.graphics;\n if (g != null) {\n for (var index = 0; index < g.automaticFields.automaticFields.length; index++) {\n var fieldInfo = g.automaticFields.automaticFields[index];\n var newLocation = new PointF(fieldInfo.location.x + location.x, fieldInfo.location.y + location.y);\n var scalingX = template.size.width == 0 ? 0 : size.width / template.size.width;\n var scalingY = template.size.height == 0 ? 0 : size.height / template.size.height;\n this.automaticFields.add(new PdfAutomaticFieldInfo(fieldInfo.field, newLocation, scalingX, scalingY));\n this.page.dictionary.modify();\n }\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageB);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageC);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageI);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n }\n };\n /* tslint:disable */\n /**\n * @public\n */\n PdfGraphics.prototype.drawString = function (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) {\n if (typeof arg1 === 'string' && arg2 instanceof PdfFont && (arg3 instanceof PdfPen || arg3 === null) && (arg4 instanceof PdfBrush || arg4 === null) && typeof arg5 === 'number' && typeof arg6 === 'number' && (arg7 instanceof PdfStringFormat || arg7 === null) && typeof arg8 === 'undefined') {\n this.isOverloadWithPosition = true;\n this.drawString(arg1, arg2, arg3, arg4, arg5, arg6, (this.clientSize.width - arg5), 0, arg7);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n var temparg6 = arg6;\n var temparg7 = arg7;\n var temparg8 = arg8;\n var temparg9 = arg9;\n var layouter = new PdfStringLayouter();\n var result = layouter.layout(arg1, arg2, temparg9, new SizeF(temparg7, 0), this.isOverloadWithPosition, this.clientSize);\n if (!result.empty) {\n var rect = this.checkCorrectLayoutRectangle(result.actualSize, temparg5, temparg6, temparg9);\n if (temparg7 <= 0) {\n temparg5 = rect.x;\n temparg7 = rect.width;\n }\n if (temparg8 <= 0) {\n temparg6 = rect.y;\n temparg8 = rect.height;\n }\n this.drawStringLayoutResult(result, arg2, temparg3, temparg4, new RectangleF(temparg5, temparg6, temparg7, temparg8), temparg9);\n this.isEmfTextScaled = false;\n this.emfScalingFactor = new SizeF(0, 0);\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n this.isNormalRender = true;\n this.pdfStringLayoutResult = result;\n this.isUseFontSize = false;\n }\n }; /* tslint:enable */\n PdfGraphics.prototype.drawLine = function (arg1, arg2, arg3, arg4, arg5) {\n if (arg2 instanceof PointF) {\n var temparg2 = arg2;\n var temparg3 = arg3;\n this.drawLine(arg1, temparg2.x, temparg2.y, temparg3.x, temparg3.y);\n }\n else {\n var temparg2 = arg2;\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n this.stateControl(arg1, null, null);\n var sw = this.streamWriter;\n sw.beginPath(temparg2, temparg3);\n sw.appendLineSegment(temparg4, temparg5);\n sw.strokePath();\n this.getResources.getResources().requireProcedureSet(this.procedureSets.pdf);\n }\n };\n /* tslint:disable */\n PdfGraphics.prototype.drawRectangle = function (arg1, arg2, arg3, arg4, arg5, arg6) {\n if (arg1 instanceof PdfPen && typeof arg2 === 'number') {\n var temparg3 = arg3;\n this.drawRectangle(arg1, null, arg2, temparg3, arg4, arg5);\n }\n else if (arg1 instanceof PdfBrush && typeof arg2 === 'number') {\n var temparg3 = arg3;\n this.drawRectangle(null, arg1, arg2, temparg3, arg4, arg5);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n var temparg6 = arg6;\n if (arg2 instanceof PdfSolidBrush && arg2.color.isEmpty) {\n arg2 = null;\n }\n var temparg1 = arg1;\n var temparg2 = arg2;\n this.stateControl(temparg1, temparg2, null);\n this.streamWriter.appendRectangle(temparg3, temparg4, temparg5, temparg6);\n this.drawPath(temparg1, temparg2, false);\n }\n };\n PdfGraphics.prototype.drawPath = function (arg1, arg2, arg3, arg4) {\n if (typeof arg3 === 'boolean') {\n var temparg3 = arg3;\n this.drawPath(arg1, arg2, PdfFillMode.Winding, temparg3);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var isPen = arg1 != null;\n var isBrush = arg2 != null;\n var isEvenOdd = (temparg3 === PdfFillMode.Alternate);\n if (isPen && isBrush) {\n this.streamWriter.fillStrokePath(isEvenOdd);\n }\n else if (!isPen && !isBrush) {\n this.streamWriter.endPath();\n }\n else if (isPen) {\n this.streamWriter.strokePath();\n }\n else {\n this.streamWriter.fillPath(isEvenOdd);\n }\n }\n };\n /* tslint:disable */\n PdfGraphics.prototype.drawImage = function (arg1, arg2, arg3, arg4, arg5) {\n if (typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'undefined') {\n var size = arg1.physicalDimension;\n this.drawImage(arg1, arg2, arg3, size.width, size.height);\n }\n else {\n var temparg2 = arg2;\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n arg1.save();\n var matrix = new PdfTransformationMatrix();\n this.getTranslateTransform(temparg2, (temparg3 + temparg5), matrix);\n this.getScaleTransform(arg4, arg5, matrix);\n this.pdfStreamWriter.write('q');\n this.pdfStreamWriter.modifyCtm(matrix);\n // Output template.\n var resources = this.getResources.getResources();\n if (typeof this.pageLayer !== 'undefined' && this.page != null) {\n resources.document = this.page.document;\n }\n var name_2 = resources.getName(arg1);\n if (typeof this.pageLayer !== 'undefined') {\n this.page.setResources(resources);\n }\n this.pdfStreamWriter.executeObject(name_2);\n this.pdfStreamWriter.write(Operators.restoreState);\n this.pdfStreamWriter.write(Operators.newLine);\n var resource = this.getResources.getResources();\n resource.requireProcedureSet(this.procedureSets.imageB);\n resource.requireProcedureSet(this.procedureSets.imageC);\n resource.requireProcedureSet(this.procedureSets.imageI);\n resource.requireProcedureSet(this.procedureSets.text);\n }\n };\n //Implementation\n /* tslint:disable */\n /**\n * Returns `bounds` of the line info.\n * @private\n */\n PdfGraphics.prototype.getLineBounds = function (lineIndex, result, font, layoutRectangle, format) {\n var bounds;\n if (!result.empty && lineIndex < result.lineCount && lineIndex >= 0) {\n var line = result.lines[lineIndex];\n var vShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n var y = vShift + layoutRectangle.y + (result.lineHeight * lineIndex);\n var lineWidth = line.width;\n var hShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(line, format, layoutRectangle, (lineIndex === 0));\n hShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n var x = layoutRectangle.x + hShift;\n /* tslint:disable */\n var width = (!this.shouldJustify(line, layoutRectangle.width, format)) ? lineWidth - lineIndent : layoutRectangle.width - lineIndent; /* tslint:enable */\n var height = result.lineHeight;\n bounds = new RectangleF(x, y, width, height);\n }\n else {\n bounds = new RectangleF(0, 0, 0, 0);\n }\n return bounds;\n };\n /**\n * Creates `lay outed rectangle` depending on the text settings.\n * @private\n */\n PdfGraphics.prototype.checkCorrectLayoutRectangle = function (textSize, x, y, format) {\n var layoutedRectangle = new RectangleF(x, y, textSize.width, textSize.width);\n if (format != null) {\n switch (format.alignment) {\n case PdfTextAlignment.Center:\n layoutedRectangle.x -= layoutedRectangle.width / 2;\n break;\n case PdfTextAlignment.Right:\n layoutedRectangle.x -= layoutedRectangle.width;\n break;\n }\n switch (format.lineAlignment) {\n case PdfVerticalAlignment.Middle:\n layoutedRectangle.y -= layoutedRectangle.height / 2;\n break;\n case PdfVerticalAlignment.Bottom:\n layoutedRectangle.y -= layoutedRectangle.height;\n break;\n }\n }\n return layoutedRectangle;\n };\n /**\n * Sets the `layer` for the graphics.\n * @private\n */\n PdfGraphics.prototype.setLayer = function (layer) {\n this.pageLayer = layer;\n var page = layer.page;\n if (page != null && typeof page !== 'undefined') {\n page.beginSave = this.pageSave;\n }\n };\n /**\n * Adding page number field before page saving.\n * @private\n */\n /* tslint:disable */\n PdfGraphics.prototype.pageSave = function (page) {\n if (page.graphics.automaticFields != null) {\n for (var i = 0; i < page.graphics.automaticFields.automaticFields.length; i++) {\n var fieldInfo = page.graphics.automaticFields.automaticFields[i];\n fieldInfo.field.performDraw(page.graphics, fieldInfo.location, fieldInfo.scalingX, fieldInfo.scalingY);\n }\n }\n };\n /**\n * `Draws a layout result`.\n * @private\n */\n PdfGraphics.prototype.drawStringLayoutResult = function (result, font, pen, brush, layoutRectangle, format) {\n if (!result.empty) {\n this.applyStringSettings(font, pen, brush, format, layoutRectangle);\n // Set text scaling\n var textScaling = (format != null) ? format.horizontalScalingFactor : 100.0;\n if (textScaling !== this.previousTextScaling && !this.isEmfTextScaled) {\n this.pdfStreamWriter.setTextScaling(textScaling);\n this.previousTextScaling = textScaling;\n }\n var height = (format == null || format.lineSpacing === 0) ? font.height : format.lineSpacing + font.height;\n var subScript = (format != null && format.subSuperScript === PdfSubSuperScript.SubScript);\n var shift = 0;\n shift = (subScript) ? height - (font.height + font.metrics.getDescent(format)) : (height - font.metrics.getAscent(format));\n this.shift = shift;\n this.pdfStreamWriter.startNextLine(layoutRectangle.x, layoutRectangle.y - shift);\n this.pdfStreamWriter.setLeading(+height);\n var resultHeight = 0;\n var remainingString = '';\n for (var i = 0; i < result.lines.length; i++) {\n resultHeight += result.lineHeight;\n if ((layoutRectangle.y + resultHeight) > this.clientSize.height) {\n this.startCutIndex = i;\n break;\n }\n }\n for (var j = this.startCutIndex; (j < result.lines.length && j >= 0); j++) {\n remainingString += result.lines[j].text;\n }\n var bounds = new RectangleF(layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height);\n this.drawLayoutResult(result, font, format, layoutRectangle);\n this.underlineStrikeoutText(pen, brush, result, font, bounds, format);\n this.isEmfPlus = false;\n this.isUseFontSize = false;\n if (this.startCutIndex !== -1) {\n var page = this.getNextPage();\n page.graphics.drawString(remainingString, font, pen, brush, layoutRectangle.x, 0, layoutRectangle.width, 0, format);\n }\n }\n else {\n throw new Error('ArgumentNullException:result');\n }\n };\n /**\n * Gets the `next page`.\n * @private\n */\n PdfGraphics.prototype.getNextPage = function () {\n var section = this.currentPage.section;\n var nextPage = null;\n var index = section.indexOf(this.currentPage);\n if (index === section.count - 1) {\n nextPage = section.add();\n }\n else {\n nextPage = section.getPages()[index + 1];\n }\n return nextPage;\n };\n PdfGraphics.prototype.setClip = function (rectangle, mode) {\n if (typeof mode === 'undefined') {\n this.setClip(rectangle, PdfFillMode.Winding);\n }\n else {\n this.pdfStreamWriter.appendRectangle(rectangle);\n this.pdfStreamWriter.clipPath((mode === PdfFillMode.Alternate));\n }\n };\n /**\n * Applies all the `text settings`.\n * @private\n */\n PdfGraphics.prototype.applyStringSettings = function (font, pen, brush, format, bounds) {\n var setLineWidth = false;\n var tm = this.getTextRenderingMode(pen, brush, format);\n this.stateControl(pen, brush, font, format);\n this.pdfStreamWriter.beginText();\n if ((tm) !== this.previousTextRenderingMode) {\n this.pdfStreamWriter.setTextRenderingMode(tm);\n this.previousTextRenderingMode = tm;\n }\n // Set character spacing.\n var cs = (format != null) ? format.characterSpacing : 0;\n if (cs !== this.previousCharacterSpacing && !this.isEmfTextScaled) {\n this.pdfStreamWriter.setCharacterSpacing(cs);\n this.previousCharacterSpacing = cs;\n }\n // Set word spacing.\n // NOTE: it works only if the space code is equal to 32 (0x20).\n var ws = (format != null) ? format.wordSpacing : 0;\n if (ws !== this.previousWordSpacing) {\n this.pdfStreamWriter.setWordSpacing(ws);\n this.previousWordSpacing = ws;\n }\n };\n /**\n * Calculates `shift value` if the text is vertically aligned.\n * @private\n */\n PdfGraphics.prototype.getTextVerticalAlignShift = function (textHeight, boundsHeight, format) {\n var shift = 0;\n if (boundsHeight >= 0 && format != null && format.lineAlignment !== PdfVerticalAlignment.Top) {\n switch (format.lineAlignment) {\n case PdfVerticalAlignment.Middle:\n shift = (boundsHeight - textHeight) / 2;\n break;\n case PdfVerticalAlignment.Bottom:\n shift = boundsHeight - textHeight;\n break;\n }\n }\n return shift;\n };\n /* tslint:disable */\n /**\n * `Draws layout result`.\n * @private\n */\n PdfGraphics.prototype.drawLayoutResult = function (result, font, format, layoutRectangle) {\n var vAlignShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n if (vAlignShift !== 0) {\n this.pdfStreamWriter.startNextLine(0, vAlignShift);\n }\n var 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 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 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 * 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 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 * `Draws Ascii line`.\n * @private\n */\n PdfGraphics.prototype.drawAsciiLine = function (lineInfo, layoutRectangle, font, format) {\n this.justifyLine(lineInfo, layoutRectangle.width, format);\n var value = '';\n if (lineInfo.text.indexOf('(') !== -1 || lineInfo.text.indexOf(')') !== -1) {\n for (var i = 0; i < lineInfo.text.length; i++) {\n if (lineInfo.text[i] === '(') {\n value += '\\\\\\(';\n }\n else if (lineInfo.text[i] === ')') {\n value += '\\\\\\)';\n }\n else {\n value += lineInfo.text[i];\n }\n }\n }\n if (value === '') {\n value = lineInfo.text;\n }\n var line = '(' + value + ')';\n this.pdfStreamWriter.showNextLineText(new PdfString(line));\n };\n /**\n * `Justifies` the line if needed.\n * @private\n */\n PdfGraphics.prototype.justifyLine = function (lineInfo, boundsWidth, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var shouldJustify = this.shouldJustify(lineInfo, boundsWidth, format);\n var hasWordSpacing = (format != null && format.wordSpacing !== 0);\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n var wordSpace = 0;\n if (shouldJustify) {\n // Correct line width.\n if (hasWordSpacing) {\n lineWidth -= (whitespacesCount * format.wordSpacing);\n }\n var difference = boundsWidth - lineWidth;\n wordSpace = difference / whitespacesCount;\n this.pdfStreamWriter.setWordSpacing(wordSpace);\n }\n else {\n // If there is justifying, but the line shouldn't be justified, restore default word spacing.\n if (hasWordSpacing) {\n this.pdfStreamWriter.setWordSpacing(format.wordSpacing);\n }\n else {\n this.pdfStreamWriter.setWordSpacing(0);\n }\n }\n return wordSpace;\n };\n /**\n * `Reset` or reinitialize the current graphic value.\n * @private\n */\n PdfGraphics.prototype.reset = function (size) {\n this.canvasSize = size;\n this.streamWriter.clear();\n this.initialize();\n this.initializeCoordinates();\n };\n /**\n * Checks whether the line should be `justified`.\n * @private\n */\n PdfGraphics.prototype.shouldJustify = function (lineInfo, boundsWidth, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var justifyStyle = (format != null && format.alignment === PdfTextAlignment.Justify);\n var goodWidth = (boundsWidth >= 0 && lineWidth < boundsWidth);\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n var hasSpaces = (whitespacesCount > 0 && line[0] !== StringTokenizer.whiteSpace);\n var goodLineBreakStyle = ((lineInfo.lineType & LineType.LayoutBreak) > 0);\n /* tslint:disable */\n var shouldJustify = (justifyStyle && goodWidth && hasSpaces && (goodLineBreakStyle || format.alignment === PdfTextAlignment.Justify)); /* tslint:enable */\n return shouldJustify;\n };\n /* tslint:disable */\n /**\n * Emulates `Underline, Strikeout` of the text if needed.\n * @private\n */\n PdfGraphics.prototype.underlineStrikeoutText = function (pen, brush, result, font, layoutRectangle, format) {\n if (font.underline || font.strikeout) {\n // Calculate line width.\n var linePen = this.createUnderlineStikeoutPen(pen, brush, font, format);\n if (linePen != null) {\n // Approximate line positions.\n var vShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n var underlineYOffset = 0;\n underlineYOffset = layoutRectangle.y + vShift + font.metrics.getAscent(format) + 1.5 * linePen.width;\n var strikeoutYOffset = layoutRectangle.y + vShift + font.metrics.getHeight(format) / 2 + 1.5 * linePen.width;\n var lines = result.lines;\n // Run through the text and draw lines.\n for (var i = 0, len = result.lineCount; i < len; i++) {\n var lineInfo = lines[i];\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var hShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(lineInfo, format, layoutRectangle, (i === 0));\n hShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n var x1 = layoutRectangle.x + hShift;\n /* tslint:disable */\n var x2 = (!this.shouldJustify(lineInfo, layoutRectangle.width, format)) ? x1 + lineWidth - lineIndent : x1 + layoutRectangle.width - lineIndent;\n /* tslint:enable */\n if (font.underline) {\n var y = underlineYOffset;\n this.drawLine(linePen, x1, y, x2, y);\n underlineYOffset += result.lineHeight;\n }\n if (font.strikeout) {\n var y = strikeoutYOffset;\n this.drawLine(linePen, x1, y, x2, y);\n strikeoutYOffset += result.lineHeight;\n }\n if (this.isPointOverload && lines.length > 1) {\n layoutRectangle.x = 0;\n layoutRectangle.width = this.clientSize.width;\n }\n }\n this.isPointOverload = false;\n }\n }\n };\n /**\n * `Creates a pen` for drawing lines in the text.\n * @private\n */\n PdfGraphics.prototype.createUnderlineStikeoutPen = function (pen, brush, font, format) {\n // Calculate line width.\n var lineWidth = font.metrics.getSize(format) / 20;\n var linePen = null;\n // Create a pen fo the lines.\n if (pen != null) {\n linePen = new PdfPen(pen.color, lineWidth);\n }\n else if (brush != null) {\n linePen = new PdfPen(brush, lineWidth);\n }\n return linePen;\n };\n /**\n * Return `text rendering mode`.\n * @private\n */\n PdfGraphics.prototype.getTextRenderingMode = function (pen, brush, format) {\n var tm = TextRenderingMode.None;\n if (pen != null && brush != null) {\n tm = TextRenderingMode.FillStroke;\n }\n else if (pen != null) {\n tm = TextRenderingMode.Stroke;\n }\n else {\n tm = TextRenderingMode.Fill;\n }\n if (format != null && format.clipPath) {\n tm |= TextRenderingMode.ClipFlag;\n }\n return tm;\n };\n /**\n * Returns `line indent` for the line.\n * @private\n */\n PdfGraphics.prototype.getLineIndent = function (lineInfo, format, layoutBounds, firstLine) {\n var lineIndent = 0;\n var firstParagraphLine = ((lineInfo.lineType & LineType.FirstParagraphLine) > 0);\n if (format != null && firstParagraphLine) {\n lineIndent = (firstLine) ? format.firstLineIndent : format.paragraphIndent;\n lineIndent = (layoutBounds.width > 0) ? Math.min(layoutBounds.width, lineIndent) : lineIndent;\n }\n return lineIndent;\n };\n /**\n * Calculates shift value if the line is `horizontaly aligned`.\n * @private\n */\n PdfGraphics.prototype.getHorizontalAlignShift = function (lineWidth, boundsWidth, format) {\n var shift = 0;\n if (boundsWidth >= 0 && format != null && format.alignment !== PdfTextAlignment.Left) {\n switch (format.alignment) {\n case PdfTextAlignment.Center:\n shift = (boundsWidth - lineWidth) / 2;\n break;\n case PdfTextAlignment.Right:\n shift = boundsWidth - lineWidth;\n break;\n }\n }\n return shift;\n };\n /**\n * Gets or sets the value that indicates `text direction` mode.\n * @private\n */\n PdfGraphics.prototype.rightToLeft = function (format) {\n var rtl = (format != null && format.rightToLeft);\n return rtl;\n };\n PdfGraphics.prototype.stateControl = function (pen, brush, font, format) {\n if (typeof format === 'undefined') {\n this.stateControl(pen, brush, font, null);\n }\n else {\n var saveState = false;\n if (brush !== null) {\n var solidBrush = brush;\n if (typeof this.pageLayer !== 'undefined' && this.pageLayer != null) {\n if (this.colorSpaceChanged === false) {\n this.lastDocumentCS = this.pageLayer.page.document.colorSpace;\n this.lastGraphicsCS = this.pageLayer.page.graphics.colorSpace;\n this.colorSpace = this.pageLayer.page.document.colorSpace;\n this.currentColorSpace = this.pageLayer.page.document.colorSpace;\n this.colorSpaceChanged = true;\n }\n }\n this.initCurrentColorSpace(this.currentColorSpace);\n }\n else if (pen != null) {\n var pdfPen = pen;\n if (typeof this.pageLayer !== 'undefined' && this.pageLayer != null) {\n /* tslint:disable */\n this.colorSpace = this.pageLayer.page.document.colorSpace;\n this.currentColorSpace = this.pageLayer.page.document.colorSpace;\n }\n this.initCurrentColorSpace(this.currentColorSpace);\n }\n this.penControl(pen, saveState);\n this.brushControl(brush, saveState);\n this.fontControl(font, format, saveState);\n }\n };\n /**\n * Initializes the `current color space`.\n * @private\n */\n PdfGraphics.prototype.initCurrentColorSpace = function (colorspace) {\n var re = this.getResources.getResources();\n if (!this.bCSInitialized) {\n this.pdfStreamWriter.setColorSpace('Device' + this.currentColorSpaces[this.currentColorSpace], true);\n this.pdfStreamWriter.setColorSpace('Device' + this.currentColorSpaces[this.currentColorSpace], false);\n this.bCSInitialized = true;\n }\n };\n /**\n * Controls the `pen state`.\n * @private\n */\n PdfGraphics.prototype.penControl = function (pen, saveState) {\n if (pen != null) {\n this.currentPen = pen;\n this.colorSpace = PdfColorSpace.Rgb;\n /* tslint:disable */\n pen.monitorChanges(this.currentPen, this.pdfStreamWriter, this.getResources, saveState, this.colorSpace, this.matrix.clone());\n /* tslint:enable */\n this.currentPen = pen.clone();\n }\n };\n /**\n * Controls the `brush state`.\n * @private\n */\n PdfGraphics.prototype.brushControl = function (brush, saveState) {\n if (brush != null) {\n this.currentBrush = brush;\n /* tslint:disable */\n brush.monitorChanges(this.currentBrush, this.pdfStreamWriter, this.getResources, saveState, this.colorSpace);\n /* tslint:enable */\n this.currentBrush = brush;\n brush = null;\n }\n };\n /**\n * Saves the font and other `font settings`.\n * @private\n */\n PdfGraphics.prototype.fontControl = function (font, format, saveState) {\n if (font != null) {\n var curSubSuper = (format != null) ? format.subSuperScript : PdfSubSuperScript.None;\n /* tslint:disable */\n var prevSubSuper = (this.currentStringFormat != null) ? this.currentStringFormat.subSuperScript : PdfSubSuperScript.None; /* tslint:enable */\n if (saveState || font !== this.currentFont || curSubSuper !== prevSubSuper) {\n var resources = this.getResources.getResources();\n this.currentFont = font;\n this.currentStringFormat = format;\n var size = font.metrics.getSize(format);\n /* tslint:disable */\n this.isEmfTextScaled = false;\n var fontName = resources.getName(font);\n this.pdfStreamWriter.setFont(font, fontName, size);\n }\n }\n };\n PdfGraphics.prototype.setTransparency = function (arg1, arg2, arg3) {\n if (typeof arg2 === 'undefined') {\n this.istransparencySet = true;\n this.setTransparency(arg1, arg1, PdfBlendMode.Normal);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n this.setTransparency(arg1, arg2, PdfBlendMode.Normal);\n }\n else {\n if (this.trasparencies == null) {\n this.trasparencies = new TemporaryDictionary();\n }\n var transp = null;\n var td = new TransparencyData(arg1, arg2, arg3);\n if (this.trasparencies.containsKey(td)) {\n transp = this.trasparencies.getValue(td);\n }\n if (transp == null) {\n transp = new PdfTransparency(arg1, arg2, arg3);\n this.trasparencies.setValue(td, transp);\n }\n var resources = this.getResources.getResources();\n var name_3 = resources.getName(transp);\n var sw = this.streamWriter;\n sw.setGraphicsState(name_3);\n }\n };\n PdfGraphics.prototype.clipTranslateMargins = function (x, y, left, top, right, bottom) {\n if (x instanceof RectangleF && typeof y === 'undefined') {\n this.clipBounds = x;\n this.pdfStreamWriter.writeComment('Clip margins.');\n this.pdfStreamWriter.appendRectangle(x);\n this.pdfStreamWriter.closePath();\n this.pdfStreamWriter.clipPath(false);\n this.pdfStreamWriter.writeComment('Translate co-ordinate system.');\n this.translateTransform(x.x, x.y);\n }\n else if (typeof x === 'number') {\n var clipArea = new RectangleF(left, top, this.size.width - left - right, this.size.height - top - bottom);\n this.clipBounds = clipArea;\n this.pdfStreamWriter.writeComment(\"Clip margins.\");\n this.pdfStreamWriter.appendRectangle(clipArea);\n this.pdfStreamWriter.closePath();\n this.pdfStreamWriter.clipPath(false);\n this.pdfStreamWriter.writeComment(\"Translate co-ordinate system.\");\n this.translateTransform(x, y);\n }\n };\n /**\n * `Updates y` co-ordinate.\n * @private\n */\n PdfGraphics.prototype.updateY = function (y) {\n return -y;\n };\n /**\n * Used to `translate the transformation`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set translate transform\n * page1.graphics.translateTransform(100, 100);\n * //\n * // draw the rectangle after applying translate transform\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param offsetX The x-coordinate of the translation.\n * @param offsetY The y-coordinate of the translation.\n */\n PdfGraphics.prototype.translateTransform = function (offsetX, offsetY) {\n var matrix = new PdfTransformationMatrix();\n this.getTranslateTransform(offsetX, offsetY, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Translates` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getTranslateTransform = function (x, y, input) {\n input.translate(x, this.updateY(y));\n return input;\n };\n /* tslint:disable */\n /**\n * Applies the specified `scaling operation` to the transformation matrix of this Graphics by prepending it to the object's transformation matrix.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // apply scaling trasformation\n * page1.graphics.scaleTransform(1.5, 2);\n * //\n * // draw the rectangle after applying scaling transform\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param scaleX Scale factor in the x direction.\n * @param scaleY Scale factor in the y direction.\n */\n /* tslint:enable */\n PdfGraphics.prototype.scaleTransform = function (scaleX, scaleY) {\n var matrix = new PdfTransformationMatrix();\n this.getScaleTransform(scaleX, scaleY, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Scales` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getScaleTransform = function (x, y, input) {\n if (input == null) {\n input = new PdfTransformationMatrix();\n }\n input.scale(x, y);\n return input;\n };\n /**\n * Applies the specified `rotation` to the transformation matrix of this Graphics.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set RotateTransform with 25 degree of angle\n * page1.graphics.rotateTransform(25);\n * //\n * // draw the rectangle after RotateTransformation\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param angle Angle of rotation in degrees.\n */\n PdfGraphics.prototype.rotateTransform = function (angle) {\n var matrix = new PdfTransformationMatrix();\n this.getRotateTransform(angle, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Initializes coordinate system`.\n * @private\n */\n PdfGraphics.prototype.initializeCoordinates = function () {\n // Matrix equation: TM(T-1)=M', where T=[1 0 0 -1 0 h]\n this.pdfStreamWriter.writeComment('Change co-ordinate system to left/top.');\n // Translate co-ordinates only, don't flip.\n if (this.mediaBoxUpperRightBound !== -(this.size.height)) {\n if (this.cropBox == null) {\n if (this.mediaBoxUpperRightBound === this.size.height || this.mediaBoxUpperRightBound === 0) {\n this.translateTransform(0, this.updateY(this.size.height));\n }\n else {\n this.translateTransform(0, this.updateY(this.mediaBoxUpperRightBound));\n }\n }\n }\n };\n /**\n * `Rotates` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getRotateTransform = function (angle, input) {\n if (input == null || typeof input === 'undefined') {\n input = new PdfTransformationMatrix();\n }\n input.rotate(this.updateY(angle));\n return input;\n };\n /**\n * `Saves` the current state of this Graphics and identifies the saved state with a GraphicsState.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // save the graphics state\n * let state1 : PdfGraphicsState = page1.graphics.save();\n * //\n * page1.graphics.scaleTransform(1.5, 2);\n * // draw the rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // restore the graphics state\n * page1.graphics.restore(state1);\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfGraphics.prototype.save = function () {\n var state = new PdfGraphicsState(this, this.matrix.clone());\n state.brush = this.currentBrush;\n state.pen = this.currentPen;\n state.font = this.currentFont;\n state.colorSpace = this.currentColorSpace;\n state.characterSpacing = this.previousCharacterSpacing;\n state.wordSpacing = this.previousWordSpacing;\n state.textScaling = this.previousTextScaling;\n state.textRenderingMode = this.previousTextRenderingMode;\n this.graphicsState.push(state);\n this.pdfStreamWriter.saveGraphicsState();\n return state;\n };\n PdfGraphics.prototype.restore = function (state) {\n if (typeof state === 'undefined') {\n if (this.graphicsState.length > 0) {\n this.doRestoreState();\n }\n }\n else {\n if (this.graphicsState.indexOf(state) !== -1) {\n for (;;) {\n if (this.graphicsState.length === 0) {\n break;\n }\n var popState = this.doRestoreState();\n if (popState === state) {\n break;\n }\n }\n }\n }\n };\n /**\n * `Restores graphics state`.\n * @private\n */\n PdfGraphics.prototype.doRestoreState = function () {\n var state = this.graphicsState.pop();\n this.transformationMatrix = state.matrix;\n this.currentBrush = state.brush;\n this.currentPen = state.pen;\n this.currentFont = state.font;\n this.currentColorSpace = state.colorSpace;\n this.previousCharacterSpacing = state.characterSpacing;\n this.previousWordSpacing = state.wordSpacing;\n this.previousTextScaling = state.textScaling;\n this.previousTextRenderingMode = state.textRenderingMode;\n this.pdfStreamWriter.restoreGraphicsState();\n return state;\n };\n // Constants\n /**\n * Specifies the mask of `path type values`.\n * @private\n */\n PdfGraphics.pathTypesValuesMask = 0xf;\n /**\n * Checks whether the object is `transparencyObject`.\n * @hidden\n * @private\n */\n PdfGraphics.transparencyObject = false;\n return PdfGraphics;\n}());\nexport { PdfGraphics };\n/**\n * `GetResourceEventHandler` class is alternate for event handlers and delegates.\n * @private\n * @hidden\n */\nvar GetResourceEventHandler = /** @class */ (function () {\n /**\n * Initialize instance of `GetResourceEventHandler` class.\n * Alternate for event handlers and delegates.\n * @private\n */\n function GetResourceEventHandler(sender) {\n this.sender = sender;\n }\n /**\n * Return the instance of `PdfResources` class.\n * @private\n */\n GetResourceEventHandler.prototype.getResources = function () {\n return this.sender.getResources();\n };\n return GetResourceEventHandler;\n}());\nexport { GetResourceEventHandler };\nvar PdfGraphicsState = /** @class */ (function () {\n function PdfGraphicsState(graphics, matrix) {\n /**\n * Stores `previous rendering mode`.\n * @default TextRenderingMode.Fill\n * @private\n */\n this.internalTextRenderingMode = TextRenderingMode.Fill;\n /**\n * `Previous character spacing` value or 0.\n * @default 0.0\n * @private\n */\n this.internalCharacterSpacing = 0.0;\n /**\n * `Previous word spacing` value or 0.\n * @default 0.0\n * @private\n */\n this.internalWordSpacing = 0.0;\n /**\n * The previously used `text scaling value`.\n * @default 100.0\n * @private\n */\n this.internalTextScaling = 100.0;\n /**\n * `Current color space`.\n * @default PdfColorSpace.Rgb\n * @private\n */\n this.pdfColorSpace = PdfColorSpace.Rgb;\n if (typeof graphics !== 'undefined') {\n this.pdfGraphics = graphics;\n this.transformationMatrix = matrix;\n }\n }\n Object.defineProperty(PdfGraphicsState.prototype, \"graphics\", {\n // Properties\n /**\n * Gets the parent `graphics object`.\n * @private\n */\n get: function () {\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"matrix\", {\n /**\n * Gets the `current matrix`.\n * @private\n */\n get: function () {\n return this.transformationMatrix;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"characterSpacing\", {\n /**\n * Gets or sets the `current character spacing`.\n * @private\n */\n get: function () {\n return this.internalCharacterSpacing;\n },\n set: function (value) {\n this.internalCharacterSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"wordSpacing\", {\n /**\n * Gets or sets the `word spacing` value.\n * @private\n */\n get: function () {\n return this.internalWordSpacing;\n },\n set: function (value) {\n this.internalWordSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"textScaling\", {\n /**\n * Gets or sets the `text scaling` value.\n * @private\n */\n get: function () {\n return this.internalTextScaling;\n },\n set: function (value) {\n this.internalTextScaling = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"pen\", {\n /**\n * Gets or sets the `current pen` object.\n * @private\n */\n get: function () {\n return this.pdfPen;\n },\n set: function (value) {\n this.pdfPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"brush\", {\n /**\n * Gets or sets the `brush`.\n * @private\n */\n get: function () {\n return this.pdfBrush;\n },\n set: function (value) {\n this.pdfBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"font\", {\n /**\n * Gets or sets the `current font` object.\n * @private\n */\n get: function () {\n return this.pdfFont;\n },\n set: function (value) {\n this.pdfFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"colorSpace\", {\n /**\n * Gets or sets the `current color space` value.\n * @private\n */\n get: function () {\n return this.pdfColorSpace;\n },\n set: function (value) {\n this.pdfColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"textRenderingMode\", {\n /**\n * Gets or sets the `text rendering mode`.\n * @private\n */\n get: function () {\n return this.internalTextRenderingMode;\n },\n set: function (value) {\n this.internalTextRenderingMode = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGraphicsState;\n}());\nexport { PdfGraphicsState };\nvar TransparencyData = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `TransparencyData` class.\n * @private\n */\n function TransparencyData(alphaPen, alphaBrush, blendMode) {\n this.alphaPen = alphaPen;\n this.alphaBrush = alphaBrush;\n this.blendMode = blendMode;\n }\n return TransparencyData;\n}());\n","import { PdfStream } from './../primitives/pdf-stream';\nimport { PdfGraphics, GetResourceEventHandler } from './../graphics/pdf-graphics';\nimport { PdfPageLayerCollection } from './pdf-page-layer-collection';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfColorSpace } from './../graphics/enum';\n/**\n * The `PdfPageLayer` used to create layers in PDF document.\n * @private\n */\nvar PdfPageLayer = /** @class */ (function () {\n function PdfPageLayer(page, streamClipPageTemplates) {\n // private bSaved : boolean;\n /**\n * Local Variable to store the `color space` of the document.\n * @private\n */\n this.pdfColorSpace = PdfColorSpace.Rgb;\n /**\n * Local Variable to set `visibility`.\n * @default true\n * @private\n */\n this.isVisible = true;\n /**\n * Indicates if `Sublayer` is present.\n * @default false\n * @private\n */\n this.sublayer = false;\n /**\n * Local variable to store `length` of the graphics.\n * @default 0\n * @private\n */\n this.contentLength = 0;\n /**\n * Instance for `PdfDictionaryProperties` Class.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n if (typeof streamClipPageTemplates === 'undefined') {\n this.pdfPage = page;\n this.clipPageTemplates = true;\n this.content = new PdfStream();\n }\n else if (streamClipPageTemplates instanceof PdfStream || streamClipPageTemplates === null) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n if (streamClipPageTemplates == null) {\n throw new Error('ArgumentNullException:stream');\n }\n this.pdfPage = page;\n this.content = streamClipPageTemplates;\n }\n else {\n this.constructor(page);\n this.clipPageTemplates = streamClipPageTemplates;\n }\n }\n Object.defineProperty(PdfPageLayer.prototype, \"colorSpace\", {\n // Properties\n /**\n * Get or set the `color space`.\n * @private\n */\n get: function () {\n return this.pdfColorSpace;\n },\n set: function (value) {\n this.pdfColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"page\", {\n /**\n * Gets parent `page` of the layer.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"layerId\", {\n /**\n * Gets and Sets the `id of the layer`.\n * @private\n */\n get: function () {\n return this.layerid;\n },\n set: function (value) {\n this.layerid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"name\", {\n /**\n * Gets or sets the `name` of the layer.\n * @private\n */\n get: function () {\n return this.layerName;\n },\n set: function (value) {\n this.layerName = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"visible\", {\n /**\n * Gets or sets the `visibility` of the layer.\n * @private\n */\n get: function () {\n return this.isVisible;\n },\n set: function (value) {\n this.isVisible = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"graphics\", {\n /**\n * Gets `Graphics` context of the layer, used to draw various graphical content on layer.\n * @private\n */\n get: function () {\n if ((this.pdfGraphics == null)) {\n this.initializeGraphics(this.page);\n }\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"layers\", {\n /**\n * Gets the collection of `PdfPageLayer`, this collection handle by the class 'PdfPageLayerCollection'.\n * @private\n */\n get: function () {\n if (this.layer == null) {\n this.layer = new PdfPageLayerCollection(this.page);\n this.layer.sublayer = true;\n return this.layer;\n }\n else {\n return this.layer;\n }\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Adds` a new PDF Page layer.\n * @private\n */\n PdfPageLayer.prototype.add = function () {\n var layer = new PdfPageLayer(this.pdfPage);\n layer.name = '';\n return layer;\n };\n /**\n * Returns a value indicating the `sign` of a single-precision floating-point number.\n * @private\n */\n PdfPageLayer.prototype.sign = function (number) {\n if (number === 0) {\n return 0;\n }\n else if (number > 0) {\n return 1;\n }\n else {\n return -1;\n }\n };\n /**\n * `Initializes Graphics context` of the layer.\n * @private\n */\n PdfPageLayer.prototype.initializeGraphics = function (page) {\n var oPage = page;\n var gr = new GetResourceEventHandler(this.page);\n var cropBox = null;\n this.pdfGraphics = new PdfGraphics(page.size, gr, this.content);\n this.pdfGraphics.mediaBoxUpperRightBound = 0;\n if (oPage != null) {\n var sc = oPage.section.parent;\n if (sc != null) {\n this.pdfGraphics.colorSpace = sc.document.colorSpace;\n this.colorSpace = sc.document.colorSpace;\n }\n }\n // Transform coordinates to the left/top and activate margins.\n var isSame = (this.sign(page.origin.y) === this.sign(page.origin.x));\n // if (page != null) {\n if (page.origin.x >= 0 && page.origin.y >= 0 || !(isSame)) {\n this.pdfGraphics.initializeCoordinates();\n }\n else {\n // this.m_graphics.InitializeCoordinates(page);\n }\n var clipRect = oPage.section.getActualBounds(oPage, true);\n var margins = oPage.section.pageSettings.margins;\n if (this.clipPageTemplates) {\n if (page.origin.x >= 0 && page.origin.y >= 0) {\n this.pdfGraphics.clipTranslateMargins(clipRect);\n }\n }\n else {\n this.graphics.clipTranslateMargins(clipRect.x, clipRect.y, margins.left, margins.top, margins.right, margins.bottom);\n }\n this.pdfGraphics.setLayer(this);\n // this.bSaved = false;\n };\n Object.defineProperty(PdfPageLayer.prototype, \"element\", {\n // IPdfWrapper Members\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.content;\n },\n enumerable: true,\n configurable: true\n });\n return PdfPageLayer;\n}());\nexport { PdfPageLayer };\n","/**\n * PdfCollection.ts class for EJ2-PDF\n * The class used to handle the collection of PdF objects.\n */\nvar PdfCollection = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `Collection` class.\n * @private\n */\n function PdfCollection() {\n //\n }\n Object.defineProperty(PdfCollection.prototype, \"count\", {\n // Properties\n /**\n * Gets the `Count` of stored objects.\n * @private\n */\n get: function () {\n if (typeof this.collection === 'undefined') {\n this.collection = [];\n }\n return this.collection.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCollection.prototype, \"list\", {\n /**\n * Gets the `list` of stored objects.\n * @private\n */\n get: function () {\n if (typeof this.collection === 'undefined') {\n this.collection = [];\n }\n return this.collection;\n },\n enumerable: true,\n configurable: true\n });\n return PdfCollection;\n}());\nexport { PdfCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfPageLayerCollection.ts class for EJ2-PDF\n */\nimport { PdfPageBase } from './pdf-page-base';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfPageLayer } from './pdf-page-layer';\nimport { PdfCollection } from './../general/pdf-collection';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfStream } from './../primitives/pdf-stream';\n/**\n * The class provides methods and properties to handle the collections of `PdfPageLayer`.\n */\nvar PdfPageLayerCollection = /** @class */ (function (_super) {\n __extends(PdfPageLayerCollection, _super);\n function PdfPageLayerCollection(page) {\n var _this = _super.call(this) || this;\n /**\n * Stores the `number of first level layers` in the document.\n * @default 0\n * @private\n */\n _this.parentLayerCount = 0;\n /**\n * Indicates if `Sublayer` is present.\n * @default false\n * @private\n */\n _this.sublayer = false;\n /**\n * Stores the `optional content dictionary`.\n * @private\n */\n _this.optionalContent = new PdfDictionary();\n if (page instanceof PdfPageBase) {\n // if (page == null) {\n // throw new Error('ArgumentNullException:page');\n // }\n _this.page = page;\n var lPage = page;\n // if (lPage != null) {\n _this.parseLayers(lPage);\n // }\n }\n return _this;\n }\n PdfPageLayerCollection.prototype.items = function (index, value) {\n if (typeof index === 'number' && typeof value === 'undefined') {\n var obj = this.list[index];\n return obj;\n }\n else {\n if (value == null) {\n throw new Error('ArgumentNullException: layer');\n }\n if (value.page !== this.page) {\n throw new Error('ArgumentException: The layer belongs to another page');\n }\n // // Add/remove the layer.\n // let layer : PdfPageLayer = this.items(index);\n // if (layer != null) {\n // this.RemoveLayer(layer);\n // }\n // this.List[index] = value;\n // this.InsertLayer(index, value);\n }\n };\n PdfPageLayerCollection.prototype.add = function (firstArgument, secondArgument) {\n if (typeof firstArgument === 'undefined') {\n var layer = new PdfPageLayer(this.page);\n layer.name = '';\n this.add(layer);\n return layer;\n }\n else if (firstArgument instanceof PdfPageLayer) {\n // if (layer == null)\n // throw new ArgumentNullException(\"layer\");\n // if (layer.Page != m_page)\n // throw new ArgumentException(\"The layer belongs to another page\");\n var index = this.list.push(firstArgument);\n // Register layer.\n this.addLayer(index, firstArgument);\n return index;\n }\n else {\n return 0;\n }\n };\n /**\n * Registers `layer` at the page.\n * @private\n */\n PdfPageLayerCollection.prototype.addLayer = function (index, layer) {\n var reference = new PdfReferenceHolder(layer);\n this.page.contents.add(reference);\n };\n // private RemoveLayer(layer : PdfPageLayer) : void {\n // if (layer == null) {\n // throw new Error('ArgumentNullException:layer');\n // }\n // let reference : PdfReferenceHolder = new PdfReferenceHolder(layer);\n // if (this.page != null) {\n // this.page.Contents.Remove(reference);\n // }\n // }\n /**\n * Inserts `PdfPageLayer` into the collection at specified index.\n * @private\n */\n PdfPageLayerCollection.prototype.insert = function (index, layer) {\n // if (index < 0)\n // throw new ArgumentOutOfRangeException(\"index\", \"Value can not be less 0\");\n // if (layer == null)\n // throw new ArgumentNullException(\"layer\");\n // if (layer.Page != m_page)\n // throw new ArgumentException(\"The layer belongs to another page\");\n var list = [];\n var length = this.list.length;\n for (var i = index; i < length; i++) {\n list.push(this.list.pop());\n }\n this.list.push(layer);\n for (var i = 0; i < list.length; i++) {\n this.list.push(list[i]);\n }\n // Register layer.\n this.insertLayer(index, layer);\n };\n /**\n * Registers layer at the page.\n * @private\n */\n PdfPageLayerCollection.prototype.insertLayer = function (index, layer) {\n if (layer == null) {\n throw new Error('ArgumentNullException:layer');\n }\n var reference = new PdfReferenceHolder(layer);\n this.page.contents.insert(index, reference);\n };\n // tslint:disable\n /**\n * `Parses the layers`.\n * @private\n */\n PdfPageLayerCollection.prototype.parseLayers = function (loadedPage) {\n // if (loadedPage == null) {\n // throw new Error('ArgumentNullException:loadedPage');\n // }\n var contents = this.page.contents;\n var resource = this.page.getResources();\n var crossTable = null;\n var ocproperties = null;\n var propertie = null;\n var isLayerAdded = false;\n // if (loadedPage instanceof PdfPage) {\n crossTable = loadedPage.crossTable;\n // } else {\n // crossTable = (loadedPage as PdfLoadedPage).CrossTable;\n // Propertie = PdfCrossTable.Dereference(Resource[DictionaryProperties.Properties]) as PdfDictionary;\n // ocproperties = PdfCrossTable.Dereference((loadedPage as PdfLoadedPage).\n // Document.Catalog[DictionaryProperties.OCProperties]) as PdfDictionary;\n // }\n var saveStream = new PdfStream();\n var restoreStream = new PdfStream();\n var saveState = 'q';\n var newLine = '\\n';\n var restoreState = 'Q';\n // for (let index : number = 0; index < contents.Items.length; index++) {\n // let obj : IPdfPrimitive = contents[index];\n // let stream : PdfStream = crossTable.GetObject(obj) as PdfStream;\n // if (stream == null)\n // throw new PdfDocumentException(\"Invalid contents array.\");\n // // if (stream.Compress)\n // {\n // if (!loadedPage.Imported)\n // stream.Decompress();\n // }\n // byte[] contentId = stream.Data;\n // string str = PdfString.ByteToString(contentId);\n // if (!loadedPage.Imported && (contents.Count == 1) && ((stream.Data[stream.Data.Length - 2] ==\n // RestoreState) || (stream.Data[stream.Data.Length - 1] == RestoreState)))\n // {\n // byte[] content = stream.Data;\n // byte[] data = new byte[content.Length + 4];\n // data[0] = SaveState;\n // data[1] = NewLine;\n // content.CopyTo(data, 2);\n // data[data.Length - 2] = NewLine;\n // data[data.Length - 1] = RestoreState;\n // stream.Data = data;\n // }\n // if (ocproperties != null)\n // {\n // if (Propertie != null)\n // {\n // foreach (KeyValuePair prop in Propertie.Items)\n // {\n // String Key = prop.Key.ToString();\n // PdfReferenceHolder refh = prop.Value as PdfReferenceHolder;\n // PdfDictionary Dict = null;\n // if (refh != null)\n // {\n // Dict = refh.Object as PdfDictionary;\n // }\n // else\n // {\n // Dict = prop.Value as PdfDictionary;\n // }\n // PdfDictionary m_usage = PdfCrossTable.Dereference(Dict[DictionaryProperties.Usage]) as PdfDictionary;\n // if (m_usage != null)\n // {\n // if (str.Contains(Key))\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // PdfDictionary printoption = PdfCrossTable.Dereference(m_usage[DictionaryProperties.Print])\n // as PdfDictionary;\n // if (printoption != null)\n // {\n // layer.m_printOption = printoption;\n // foreach (KeyValuePair value in printoption.Items)\n // {\n // if (value.Key.Value.Equals(DictionaryProperties.PrintState))\n // {\n // string printState = (value.Value as PdfName).Value;\n // if (printState.Equals(DictionaryProperties.OCGON))\n // {\n // layer.PrintState = PdfPrintState.AlwaysPrint;\n // break;\n // }\n // else\n // {\n // layer.PrintState = PdfPrintState.NeverPrint;\n // break;\n // }\n // }\n // }\n // }\n // PdfString layerName = PdfCrossTable.Dereference(Dict[DictionaryProperties.Name]) as PdfString;\n // layer.Name = layerName.Value;\n // List.add(layer);\n // isLayerAdded = true;\n // if(!str.Contains(\"EMC\"))\n // break;\n // }\n // }\n // else\n // {\n // if (str.Contains(Key))\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // List.add(layer);\n // if(Dict.ContainsKey(DictionaryProperties.Name))\n // {\n // PdfString layerName = PdfCrossTable.Dereference(Dict[DictionaryProperties.Name]) as PdfString;\n // layer.Name = layerName.Value;\n // }\n // isLayerAdded = true;\n // break;\n // }\n // }\n // }\n // }\n // }\n // if (!isLayerAdded)\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // List.add(layer);\n // }\n // else\n // isLayerAdded = false;\n // }\n var saveData = [];\n saveData.push(saveState);\n saveStream.data = saveData;\n contents.insert(0, new PdfReferenceHolder(saveStream));\n saveData = [];\n saveData.push(restoreState);\n restoreStream.data = saveData;\n contents.insert(contents.count, new PdfReferenceHolder(restoreStream));\n };\n /**\n * Returns `index of` the `PdfPageLayer` in the collection if exists, -1 otherwise.\n * @private\n */\n PdfPageLayerCollection.prototype.indexOf = function (layer) {\n if (layer == null) {\n throw new Error('ArgumentNullException: layer');\n }\n var index = this.list.indexOf(layer);\n return index;\n };\n return PdfPageLayerCollection;\n}(PdfCollection));\nexport { PdfPageLayerCollection };\n","/**\n * PdfTemplate.ts class for EJ2-PDF\n */\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfArray } from './../../primitives/pdf-array';\nimport { PdfGraphics } from './../pdf-graphics';\nimport { PdfResources } from './../pdf-resources';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PointF, SizeF, RectangleF } from './../../drawing/pdf-drawing';\nimport { GetResourceEventHandler } from './../pdf-graphics';\n/**\n * Represents `Pdf Template` object.\n * @private\n */\nvar PdfTemplate = /** @class */ (function () {\n function PdfTemplate(arg1, arg2) {\n /**\n * Initialize an instance for `DictionaryProperties` class.\n * @private\n * @hidden\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Checks whether the transformation 'is performed'.\n * @default true\n * @private\n */\n this.writeTransformation = true;\n if (typeof arg1 === 'undefined') {\n //\n }\n else if (arg1 instanceof SizeF && typeof arg2 === 'undefined') {\n this.content = new PdfStream();\n var tempSize = new SizeF(arg1.width, arg1.height);\n this.setSize(tempSize);\n this.initialize();\n }\n else {\n this.content = new PdfStream();\n this.setSize(new SizeF(arg1, arg2));\n this.initialize();\n }\n }\n Object.defineProperty(PdfTemplate.prototype, \"size\", {\n //Properties\n /**\n * Gets the size of the 'PdfTemplate'.\n */\n get: function () {\n return this.templateSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"width\", {\n /**\n * Gets the width of the 'PdfTemplate'.\n */\n get: function () {\n return this.size.width;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"height\", {\n /**\n * Gets the height of the 'PdfTemplate'.\n */\n get: function () {\n return this.size.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"graphics\", {\n /**\n * Gets the `graphics` of the 'PdfTemplate'.\n */\n get: function () {\n if (this.pdfGraphics == null || typeof this.pdfGraphics === 'undefined') {\n var gr = new GetResourceEventHandler(this);\n var g = new PdfGraphics(this.size, gr, this.content);\n this.pdfGraphics = g;\n // if(this.writeTransformation) {\n // Transform co-ordinates to Top/Left.\n this.pdfGraphics.initializeCoordinates();\n // }\n }\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the resources and modifies the template dictionary.\n * @private\n */\n PdfTemplate.prototype.getResources = function () {\n if (this.resources == null) {\n this.resources = new PdfResources();\n this.content.items.setValue(this.dictionaryProperties.resources, this.resources);\n }\n return this.resources;\n };\n // Public methods\n /**\n * `Initialize` the type and subtype of the template.\n * @private\n */\n PdfTemplate.prototype.initialize = function () {\n this.addType();\n this.addSubType();\n };\n /**\n * `Adds type key`.\n * @private\n */\n PdfTemplate.prototype.addType = function () {\n var value = new PdfName(this.dictionaryProperties.xObject);\n this.content.items.setValue(this.dictionaryProperties.type, value);\n };\n /**\n * `Adds SubType key`.\n * @private\n */\n PdfTemplate.prototype.addSubType = function () {\n var value = new PdfName(this.dictionaryProperties.form);\n this.content.items.setValue(this.dictionaryProperties.subtype, value);\n };\n PdfTemplate.prototype.reset = function (size) {\n if (typeof size === 'undefined') {\n if (this.resources != null) {\n this.resources = null;\n this.content.remove(this.dictionaryProperties.resources);\n }\n if (this.graphics != null) {\n this.graphics.reset(this.size);\n }\n }\n else {\n this.setSize(size);\n this.reset();\n }\n };\n /**\n * `Set the size` of the 'PdfTemplate'.\n * @private\n */\n PdfTemplate.prototype.setSize = function (size) {\n var rect = new RectangleF(new PointF(0, 0), size);\n var val = PdfArray.fromRectangle(rect);\n this.content.items.setValue(this.dictionaryProperties.bBox, val);\n this.templateSize = size;\n };\n Object.defineProperty(PdfTemplate.prototype, \"element\", {\n // /**\n // * Returns the value of current graphics.\n // * @private\n // */\n // public GetGraphics(g : PdfGraphics) : PdfGraphics {\n // if (this.graphics == null || typeof this.graphics === 'undefined') {\n // this.graphics = g;\n // this.graphics.Size = this.Size;\n // this.graphics.StreamWriter = new PdfStreamWriter(this.content)\n // this.graphics.Initialize();\n // if(this.writeTransformation) {\n // this.graphics.InitializeCoordinates();\n // }\n // }\n // return this.graphics;\n // }\n // IPdfWrapper Members\n /**\n * Gets the `content stream` of 'PdfTemplate' class.\n * @private\n */\n get: function () {\n return this.content;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTemplate;\n}());\nexport { PdfTemplate };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 PdfCacheCollection.prototype.destroy = function () {\n this.pdfFontCollection = undefined;\n this.referenceObjects = undefined;\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 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';\nimport { PdfLayoutType, PdfLayoutBreakType } from './../enum';\n/**\n * Base class for `elements lay outing`.\n * @private\n */\nvar ElementLayouter = /** @class */ (function () {\n // Constructor\n /**\n * Initializes a new instance of the `ElementLayouter` class.\n * @private\n */\n function ElementLayouter(element) {\n this.layoutElement = element;\n }\n Object.defineProperty(ElementLayouter.prototype, \"elements\", {\n // Properties\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.layoutElement;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the `element`.\n * @private\n */\n ElementLayouter.prototype.getElement = function () {\n return this.layoutElement;\n };\n ElementLayouter.prototype.layout = function (param, isBoundsChanged) {\n if (typeof isBoundsChanged === 'boolean' && isBoundsChanged === true) {\n return this.layoutInternal(param, true);\n }\n else {\n return this.layoutInternal(param);\n }\n };\n /**\n * Returns the `next page`.\n * @private\n */\n ElementLayouter.prototype.getNextPage = function (currentPage) {\n var section = currentPage.section;\n var nextPage = section.add();\n return nextPage;\n };\n return ElementLayouter;\n}());\nexport { ElementLayouter };\nvar PdfLayoutFormat = /** @class */ (function () {\n function PdfLayoutFormat(baseFormat) {\n if (typeof baseFormat === 'undefined') {\n //\n }\n else {\n this.break = baseFormat.break;\n this.layout = baseFormat.layout;\n this.paginateBounds = baseFormat.paginateBounds;\n this.boundsSet = baseFormat.usePaginateBounds;\n }\n }\n Object.defineProperty(PdfLayoutFormat.prototype, \"layout\", {\n // Properties\n /**\n * Gets or sets `layout` type of the element.\n * @private\n */\n get: function () {\n if (typeof this.layoutType === 'undefined' || this.layoutType == null) {\n this.layoutType = PdfLayoutType.Paginate;\n }\n return this.layoutType;\n },\n set: function (value) {\n this.layoutType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"break\", {\n /**\n * Gets or sets `break` type of the element.\n * @private\n */\n get: function () {\n if (typeof this.breakType === 'undefined' || this.boundsSet == null) {\n this.breakType = PdfLayoutBreakType.FitPage;\n }\n return this.breakType;\n },\n set: function (value) {\n this.breakType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"paginateBounds\", {\n /**\n * Gets or sets the `bounds` on the next page.\n * @private\n */\n get: function () {\n if (typeof this.layoutPaginateBounds === 'undefined' && this.layoutPaginateBounds == null) {\n this.layoutPaginateBounds = new RectangleF(0, 0, 0, 0);\n }\n return this.layoutPaginateBounds;\n },\n set: function (value) {\n this.layoutPaginateBounds = value;\n this.boundsSet = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"usePaginateBounds\", {\n /**\n * Gets a value indicating whether [`use paginate bounds`].\n * @private\n */\n get: function () {\n if (typeof this.boundsSet === 'undefined' || this.boundsSet == null) {\n this.boundsSet = false;\n }\n return this.boundsSet;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutFormat;\n}());\nexport { PdfLayoutFormat };\nvar PdfLayoutParams = /** @class */ (function () {\n function PdfLayoutParams() {\n }\n Object.defineProperty(PdfLayoutParams.prototype, \"page\", {\n // Properties\n /**\n * Gets or sets the layout `page` for the element.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n set: function (value) {\n this.pdfPage = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutParams.prototype, \"bounds\", {\n /**\n * Gets or sets layout `bounds` for the element.\n * @private\n */\n get: function () {\n return new RectangleF(this.layoutBounds.x, this.layoutBounds.y, this.layoutBounds.width, this.layoutBounds.height);\n },\n set: function (value) {\n this.layoutBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutParams.prototype, \"format\", {\n /**\n * Gets or sets `layout settings` for the element.\n * @private\n */\n get: function () {\n return this.layoutFormat;\n },\n set: function (value) {\n this.layoutFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutParams;\n}());\nexport { PdfLayoutParams };\nvar PdfLayoutResult = /** @class */ (function () {\n // Constructors\n /**\n * Initializes the new instance of `PdfLayoutResult` class.\n * @private\n */\n function PdfLayoutResult(page, bounds) {\n this.pdfPage = page;\n this.layoutBounds = bounds;\n }\n Object.defineProperty(PdfLayoutResult.prototype, \"page\", {\n // Properties\n /**\n * Gets the last `page` where the element was drawn.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutResult.prototype, \"bounds\", {\n /**\n * Gets the `bounds` of the element on the last page where it was drawn.\n * @private\n */\n get: function () {\n return this.layoutBounds;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutResult;\n}());\nexport { PdfLayoutResult };\n","/**\n * public Enum for `PdfDestinationMode`.\n * @private\n */\nexport var PdfDestinationMode;\n(function (PdfDestinationMode) {\n /**\n * Specifies the type of `Location`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"Location\"] = 0] = \"Location\";\n /**\n * Specifies the type of `FitToPage`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"FitToPage\"] = 1] = \"FitToPage\";\n /**\n * Specifies the type of `FitR`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"FitR\"] = 2] = \"FitR\";\n})(PdfDestinationMode || (PdfDestinationMode = {}));\n","import { RectangleF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfLayoutParams, PdfLayoutFormat } from './base/element-layouter';\n/**\n * `PdfLayoutElement` class represents the base class for all elements that can be layout on the pages.\n * @private\n */\nvar PdfLayoutElement = /** @class */ (function () {\n function PdfLayoutElement() {\n }\n PdfLayoutElement.prototype.drawHelper = function (arg2, arg3, arg4, arg5) {\n if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && typeof arg3 === 'undefined') {\n return this.drawHelper(arg2, arg3.x, arg3.y);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && typeof arg5 === 'undefined') {\n return this.drawHelper(arg2, arg3, arg4, null);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'undefined') {\n return this.drawHelper(arg2, arg3, null);\n }\n else if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && arg4 instanceof PdfLayoutFormat) {\n return this.drawHelper(arg2, arg3.x, arg3.y, arg4);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && (arg5 instanceof PdfLayoutFormat || arg5 == null)) {\n var width = (arg2.graphics.clientSize.width - arg3);\n var layoutRectangle = new RectangleF(arg3, arg4, width, 0);\n return this.drawHelper(arg2, layoutRectangle, arg5);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'boolean') {\n this.bEmbedFonts = arg4;\n return this.drawHelper(arg2, arg3, null);\n }\n else {\n var param = new PdfLayoutParams();\n var temparg3 = arg3;\n var temparg4 = arg4;\n param.page = arg2;\n param.bounds = temparg3;\n param.format = (temparg4 != null) ? temparg4 : new PdfLayoutFormat();\n var result = this.layout(param);\n return result;\n }\n };\n return PdfLayoutElement;\n}());\nexport { PdfLayoutElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * TextLayouter.ts class for EJ2-PDF\n */\nimport { ElementLayouter, PdfLayoutResult } from './element-layouter';\nimport { RectangleF, SizeF } from './../../../drawing/pdf-drawing';\nimport { PdfStringLayouter } from './../../fonts/string-layouter';\nimport { PdfLayoutBreakType } from './../../figures/enum';\nimport { PdfColor } from './../../pdf-color';\nimport { PdfTextWebLink } from './../../../annotations/pdf-text-web-link';\n/**\n * Class that `layouts the text`.\n * @private\n */\nvar TextLayouter = /** @class */ (function (_super) {\n __extends(TextLayouter, _super);\n // Constructors\n /**\n * Initializes a new instance of the `TextLayouter` class.\n * @private\n */\n function TextLayouter(element) {\n return _super.call(this, element) || this;\n }\n Object.defineProperty(TextLayouter.prototype, \"element\", {\n /**\n * Gets the layout `element`.\n * @private\n */\n get: function () {\n return _super.prototype.getElement.call(this);\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Layouts` the element.\n * @private\n */\n TextLayouter.prototype.layoutInternal = function (param) {\n /* tslint:disable */\n this.format = (this.element.stringFormat !== null && typeof this.element.stringFormat !== 'undefined') ? this.element.stringFormat : null;\n var currentPage = param.page;\n var currentBounds = param.bounds;\n var text = this.element.value;\n var result = null;\n var pageResult = new TextPageLayoutResult();\n pageResult.page = currentPage;\n pageResult.remainder = text;\n for (;;) {\n pageResult = this.layoutOnPage(text, currentPage, currentBounds, param);\n result = this.getLayoutResult(pageResult);\n break;\n }\n /* tslint:enable */\n return result;\n };\n /**\n * Raises `PageLayout` event if needed.\n * @private\n */\n TextLayouter.prototype.getLayoutResult = function (pageResult) {\n var result = new PdfTextLayoutResult(pageResult.page, pageResult.bounds, pageResult.remainder, pageResult.lastLineBounds);\n return result;\n };\n /* tslint:disable */\n /**\n * `Layouts` the text on the page.\n * @private\n */\n TextLayouter.prototype.layoutOnPage = function (text, currentPage, currentBounds, param) {\n var result = new TextPageLayoutResult();\n result.remainder = text;\n result.page = currentPage;\n currentBounds = this.checkCorrectBounds(currentPage, currentBounds);\n var layouter = new PdfStringLayouter();\n var stringResult = layouter.layout(text, this.element.font, this.format, currentBounds, currentPage.getClientSize().height, false, new SizeF(0, 0));\n var textFinished = (stringResult.remainder == null);\n var doesntFit = (param.format.break === PdfLayoutBreakType.FitElement);\n var canDraw = !(doesntFit || stringResult.empty);\n // Draw the text.\n var graphics = currentPage.graphics;\n var brush = this.element.getBrush();\n if (this.element instanceof PdfTextWebLink) {\n brush.color = new PdfColor(0, 0, 255);\n }\n graphics.drawStringLayoutResult(stringResult, this.element.font, this.element.pen, brush, currentBounds, this.format);\n var lineInfo = stringResult.lines[stringResult.lineCount - 1];\n result.lastLineBounds = graphics.getLineBounds(stringResult.lineCount - 1, stringResult, this.element.font, currentBounds, this.format);\n result.bounds = this.getTextPageBounds(currentPage, currentBounds, stringResult);\n result.remainder = stringResult.remainder;\n result.end = (textFinished);\n return result;\n };\n /* tslint:enable */\n /**\n * `Corrects current bounds` on the page.\n * @private\n */\n TextLayouter.prototype.checkCorrectBounds = function (currentPage, currentBounds) {\n var pageSize = currentPage.graphics.clientSize;\n currentBounds.height = (currentBounds.height > 0) ? currentBounds.height : pageSize.height - currentBounds.y;\n return currentBounds;\n };\n /**\n * Returns a `rectangle` where the text was printed on the page.\n * @private\n */\n /* tslint:disable */\n TextLayouter.prototype.getTextPageBounds = function (currentPage, currentBounds, stringResult) {\n var textSize = stringResult.actualSize;\n var x = currentBounds.x;\n var y = currentBounds.y;\n var width = (currentBounds.width > 0) ? currentBounds.width : textSize.width;\n var height = textSize.height;\n var shiftedRect = currentPage.graphics.checkCorrectLayoutRectangle(textSize, currentBounds.x, currentBounds.y, this.format);\n // if (currentBounds.width <= 0) {\n x = shiftedRect.x;\n // }\n var verticalShift = currentPage.graphics.getTextVerticalAlignShift(textSize.height, currentBounds.height, this.format);\n y += verticalShift;\n var bounds = new RectangleF(x, y, width, height);\n return bounds;\n };\n return TextLayouter;\n}(ElementLayouter));\nexport { TextLayouter };\nvar TextPageLayoutResult = /** @class */ (function () {\n function TextPageLayoutResult() {\n }\n return TextPageLayoutResult;\n}());\nexport { TextPageLayoutResult };\nvar PdfTextLayoutResult = /** @class */ (function (_super) {\n __extends(PdfTextLayoutResult, _super);\n // Constructors\n /**\n * Initializes the new instance of `PdfTextLayoutResult` class.\n * @private\n */\n function PdfTextLayoutResult(page, bounds, remainder, lastLineBounds) {\n var _this = _super.call(this, page, bounds) || this;\n _this.remainderText = remainder;\n _this.lastLineTextBounds = lastLineBounds;\n return _this;\n }\n Object.defineProperty(PdfTextLayoutResult.prototype, \"remainder\", {\n // Properties\n /**\n * Gets a value that contains the `text` that was not printed.\n * @private\n */\n get: function () {\n return this.remainderText;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextLayoutResult.prototype, \"lastLineBounds\", {\n /**\n * Gets a value that indicates the `bounds` of the last line that was printed on the page.\n * @private\n */\n get: function () {\n return this.lastLineTextBounds;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTextLayoutResult;\n}(PdfLayoutResult));\nexport { PdfTextLayoutResult };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfTextElement.ts class for EJ2-PDF\n */\nimport { PdfLayoutElement } from './../figures/layout-element';\nimport { PdfBrush } from './../brushes/pdf-brush';\nimport { PdfFont } from './../fonts/pdf-font';\nimport { PdfStandardFont } from './../fonts/pdf-standard-font';\nimport { PdfPen } from './../pdf-pen';\nimport { PdfLayoutParams } from './../figures/base/element-layouter';\nimport { TextLayouter } from './base/text-layouter';\nimport { PdfSolidBrush } from './../brushes/pdf-solid-brush';\nimport { PdfColor } from './../pdf-color';\nimport { RectangleF, SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfLayoutFormat } from './base/element-layouter';\nimport { PdfStringLayouter } from './../fonts/string-layouter';\nimport { PdfTextAlignment } from './../enum';\n/**\n * `PdfTextElement` class represents the text area with the ability to span several pages\n * and inherited from the 'PdfLayoutElement' class.\n * @private\n */\nvar PdfTextElement = /** @class */ (function (_super) {\n __extends(PdfTextElement, _super);\n function PdfTextElement(arg1, arg2, arg3, arg4, arg5) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * `Text` data.\n * @private\n */\n _this.content = '';\n /**\n * `Value` of text data.\n * @private\n */\n _this.elementValue = '';\n /**\n * indicate whether the drawText with PointF overload is called or not.\n * @default false\n * @private\n */\n _this.hasPointOverload = false;\n /**\n * indicate whether the PdfGridCell value is `PdfTextElement`\n * @default false\n * @private\n */\n _this.isPdfTextElement = false;\n if (typeof arg1 === 'undefined') {\n //\n }\n else if (typeof arg1 === 'string' && typeof arg2 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n }\n else if (typeof arg1 === 'string' && arg2 instanceof PdfFont && typeof arg3 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n }\n else if (typeof arg1 === 'string' && arg2 instanceof PdfFont && arg3 instanceof PdfPen && typeof arg4 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n _this.pdfPen = arg3;\n }\n else if (typeof arg1 === 'string' && arg2 instanceof PdfFont && arg3 instanceof PdfBrush && typeof arg4 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n _this.pdfBrush = arg3;\n }\n else {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n _this.pdfPen = arg3;\n _this.pdfBrush = arg4;\n _this.format = arg5;\n }\n return _this;\n }\n Object.defineProperty(PdfTextElement.prototype, \"text\", {\n // Properties\n /**\n * Gets or sets a value indicating the `text` that should be printed.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * //\n * // set the link text\n * textLink.text = 'Google';\n * //\n * // set the font\n * textLink.font = font;\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.elementValue = value;\n this.content = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"value\", {\n //get value\n /**\n * Gets or sets a `value` indicating the text that should be printed.\n * @private\n */\n get: function () {\n return this.elementValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"pen\", {\n //get pen\n /**\n * Gets or sets a `PdfPen` that determines the color, width, and style of the text\n * @private\n */\n get: function () {\n return this.pdfPen;\n },\n //Set pen value\n set: function (value) {\n this.pdfPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"brush\", {\n //get brush\n /**\n * Gets or sets the `PdfBrush` that will be used to draw the text with color and texture.\n * @private\n */\n get: function () {\n return this.pdfBrush;\n },\n //Set brush value\n set: function (value) {\n this.pdfBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"font\", {\n //get font\n /**\n * Gets or sets a `PdfFont` that defines the text format.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * // set the link text\n * textLink.text = 'Google';\n * //\n * // set the font\n * textLink.font = font;\n * //\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.pdfFont;\n },\n set: function (value) {\n this.pdfFont = value;\n if (this.pdfFont instanceof PdfStandardFont && this.content != null) {\n this.elementValue = PdfStandardFont.convert(this.content);\n }\n else {\n this.elementValue = this.content;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"stringFormat\", {\n /**\n * Gets or sets the `PdfStringFormat` that will be used to set the string format\n * @private\n */\n get: function () {\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Gets a `brush` for drawing.\n * @private\n */\n PdfTextElement.prototype.getBrush = function () {\n return (this.pdfBrush == null || typeof this.pdfBrush === 'undefined') ? new PdfSolidBrush(new PdfColor(0, 0, 0)) : this.pdfBrush;\n };\n // /**\n // * `Draws` an element on the Graphics.\n // * @private\n // */\n // public drawInternal(graphics : PdfGraphics) : void {\n // graphics.drawString(this.elementValue, this.pdfFont, this.pdfPen, this.getBrush(), 0, 0, this.stringFormat);\n // }\n /**\n * `Layouts` the element.\n * @private\n */\n PdfTextElement.prototype.layout = function (param) {\n var layouter = new TextLayouter(this);\n var result = layouter.layout(param);\n return result;\n };\n PdfTextElement.prototype.drawText = function (arg2, arg3, arg4, arg5) {\n if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && typeof arg4 === 'undefined') {\n this.hasPointOverload = true;\n return this.drawText(arg2, arg3.x, arg3.y);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && typeof arg5 === 'undefined') {\n this.hasPointOverload = true;\n return this.drawText(arg2, arg3, arg4, null);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'undefined') {\n return this.drawText(arg2, arg3, null);\n }\n else if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && arg4 instanceof PdfLayoutFormat) {\n this.hasPointOverload = true;\n return this.drawText(arg2, arg3.x, arg3.y, arg4);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && (arg5 instanceof PdfLayoutFormat || arg5 == null)) {\n this.hasPointOverload = true;\n var width = (arg2.graphics.clientSize.width - arg3);\n var layoutRectangle = new RectangleF(arg3, arg4, width, 0);\n return this.drawText(arg2, layoutRectangle, arg5);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'boolean') {\n return this.drawText(arg2, arg3, null);\n }\n else {\n var layout = new PdfStringLayouter();\n if (this.hasPointOverload) {\n var stringLayoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF((arg2.graphics.clientSize.width - arg3.x), 0), true, arg2.graphics.clientSize);\n var layoutResult = void 0;\n var param = new PdfLayoutParams();\n var temparg3 = arg3;\n var temparg4 = arg4;\n param.page = arg2;\n var previousPage = arg2;\n param.bounds = temparg3;\n param.format = (temparg4 != null) ? temparg4 : new PdfLayoutFormat();\n if (stringLayoutResult.lines.length > 1) {\n this.text = stringLayoutResult.layoutLines[0].text;\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n var previousPosition = new PointF(param.bounds.x, param.bounds.y);\n layoutResult = this.layout(param);\n var bounds = new RectangleF(0, layoutResult.bounds.y + stringLayoutResult.lineHeight, arg2.graphics.clientSize.width, stringLayoutResult.lineHeight);\n var isPaginate = false;\n for (var i = 1; i < stringLayoutResult.lines.length; i++) {\n param.page = layoutResult.page;\n param.bounds = new RectangleF(new PointF(bounds.x, bounds.y), new SizeF(bounds.width, bounds.height));\n this.text = stringLayoutResult.layoutLines[i].text;\n if (bounds.y + stringLayoutResult.lineHeight > layoutResult.page.graphics.clientSize.height) {\n isPaginate = true;\n param.page = param.page.graphics.getNextPage();\n if (previousPosition.y > (layoutResult.page.graphics.clientSize.height - layoutResult.bounds.height)) {\n bounds = new RectangleF(0, layoutResult.bounds.height, layoutResult.page.graphics.clientSize.width, stringLayoutResult.lineHeight);\n }\n else {\n bounds = new RectangleF(0, 0, layoutResult.page.graphics.clientSize.width, stringLayoutResult.lineHeight);\n }\n param.bounds = bounds;\n }\n layoutResult = this.layout(param);\n if (i !== (stringLayoutResult.lines.length - 1)) {\n bounds = new RectangleF(0, layoutResult.bounds.y + stringLayoutResult.lineHeight, layoutResult.page.graphics.clientSize.width, stringLayoutResult.lineHeight);\n }\n else {\n var lineWidth = this.font.measureString(this.text, this.format).width;\n layoutResult = this.calculateResultBounds(layoutResult, lineWidth, layoutResult.page.graphics.clientSize.width, 0);\n }\n }\n }\n return layoutResult;\n }\n else {\n var lineSize = this.font.measureString(this.text, this.format);\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n layoutResult = this.layout(param);\n layoutResult = this.calculateResultBounds(layoutResult, lineSize.width, layoutResult.page.graphics.clientSize.width, 0);\n }\n return layoutResult;\n }\n }\n else {\n var layoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF(arg3.width, 0), false, arg2.graphics.clientSize);\n var result = void 0;\n var param = new PdfLayoutParams();\n var temparg3 = arg3;\n var temparg4 = arg4;\n param.page = arg2;\n param.bounds = temparg3;\n param.format = (temparg4 != null) ? temparg4 : new PdfLayoutFormat();\n if (layoutResult.lines.length > 1) {\n this.text = layoutResult.layoutLines[0].text;\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n var previousPosition = new PointF(param.bounds.x, param.bounds.y);\n result = this.layout(param);\n var bounds = new RectangleF(temparg3.x, result.bounds.y + layoutResult.lineHeight, temparg3.width, layoutResult.lineHeight);\n var isPaginate = false;\n for (var i = 1; i < layoutResult.lines.length; i++) {\n param.page = result.page;\n param.bounds = new RectangleF(bounds.x, bounds.y, bounds.width, bounds.height);\n this.text = layoutResult.layoutLines[i].text;\n if (bounds.y + layoutResult.lineHeight > result.page.graphics.clientSize.height) {\n isPaginate = true;\n param.page = param.page.graphics.getNextPage();\n if (previousPosition.y > (result.page.graphics.clientSize.height - result.bounds.height)) {\n bounds = new RectangleF(temparg3.x, layoutResult.lineHeight, temparg3.width, layoutResult.lineHeight);\n }\n else {\n bounds = new RectangleF(temparg3.x, 0, temparg3.width, layoutResult.lineHeight);\n }\n param.bounds = bounds;\n }\n result = this.layout(param);\n if (i !== (layoutResult.lines.length - 1)) {\n bounds = new RectangleF(temparg3.x, result.bounds.y + layoutResult.lineHeight, temparg3.width, layoutResult.lineHeight);\n }\n else {\n var lineWidth = this.font.measureString(this.text, this.format).width;\n result = this.calculateResultBounds(result, lineWidth, temparg3.width, temparg3.x);\n }\n }\n }\n return result;\n }\n else {\n var lineSize = this.font.measureString(this.text, this.format);\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n result = this.layout(param);\n result = this.calculateResultBounds(result, lineSize.width, temparg3.width, temparg3.x);\n }\n return result;\n }\n }\n }\n };\n PdfTextElement.prototype.calculateResultBounds = function (result, lineWidth, maximumWidth, startPosition) {\n var shift = 0;\n if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Center) {\n result.bounds.x = startPosition + (maximumWidth - lineWidth) / 2;\n result.bounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Right) {\n result.bounds.x = startPosition + (maximumWidth - lineWidth);\n result.bounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Justify) {\n result.bounds.x = startPosition;\n result.bounds.width = maximumWidth;\n }\n else {\n result.bounds.width = startPosition;\n result.bounds.width = lineWidth;\n }\n return result;\n };\n return PdfTextElement;\n}(PdfLayoutElement));\nexport { PdfTextElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfActionLinkAnnotation } from './action-link-annotation';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfUriAction } from './../actions/uri-action';\n/**\n * `PdfUriAnnotation` class represents the Uri annotation.\n * @private\n */\nvar PdfUriAnnotation = /** @class */ (function (_super) {\n __extends(PdfUriAnnotation, _super);\n function PdfUriAnnotation(rectangle, uri) {\n var _this = _super.call(this, rectangle) || this;\n if (typeof uri !== 'undefined') {\n _this.uri = uri;\n }\n return _this;\n }\n Object.defineProperty(PdfUriAnnotation.prototype, \"uriAction\", {\n /**\n * Get `action` of the annotation.\n * @private\n */\n get: function () {\n if (typeof this.pdfUriAction === 'undefined') {\n this.pdfUriAction = new PdfUriAction();\n }\n return this.pdfUriAction;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfUriAnnotation.prototype, \"uri\", {\n // Properties\n /**\n * Gets or sets the `Uri` address.\n * @private\n */\n get: function () {\n return this.uriAction.uri;\n },\n set: function (value) {\n if (this.uriAction.uri !== value) {\n this.uriAction.uri = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfUriAnnotation.prototype, \"action\", {\n /**\n * Gets or sets the `action`.\n * @private\n */\n get: function () {\n return this.getSetAction();\n },\n set: function (value) {\n this.getSetAction(value);\n this.uriAction.next = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initializes` annotation object.\n * @private\n */\n PdfUriAnnotation.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n this.dictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.link));\n var tempPrimitive = this.uriAction.element;\n this.dictionary.items.setValue(this.dictionaryProperties.a, this.uriAction.element);\n };\n return PdfUriAnnotation;\n}(PdfActionLinkAnnotation));\nexport { PdfUriAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfPage } from './../pages/pdf-page';\nimport { PointF, RectangleF, SizeF } from './../drawing/pdf-drawing';\nimport { PdfTextElement } from './../graphics/figures/text-element';\nimport { PdfUriAnnotation } from './uri-annotation';\nimport { PdfStringLayouter } from './../graphics/fonts/string-layouter';\nimport { PdfFontStyle } from './../graphics/fonts/enum';\nimport { PdfTextAlignment } from './../graphics/enum';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\n/**\n * `PdfTextWebLink` class represents the class for text web link annotation.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * //\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * // set the link text\n * textLink.text = 'Google';\n * // set the font\n * textLink.font = font;\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * //\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfTextWebLink = /** @class */ (function (_super) {\n __extends(PdfTextWebLink, _super);\n // Constructors\n /**\n * Initializes a new instance of the `PdfTextWebLink` class.\n * @private\n */\n function PdfTextWebLink() {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Internal variable to store `Url`.\n * @default ''\n * @private\n */\n _this.uniformResourceLocator = '';\n /**\n * Internal variable to store `Uri Annotation` object.\n * @default null\n * @private\n */\n _this.uriAnnotation = null;\n /**\n * Checks whether the drawTextWebLink method with `PointF` overload is called or not.\n * If it set as true, then the start position of each lines excluding firest line is changed as (0, Y).\n * @private\n * @hidden\n */\n _this.recalculateBounds = false;\n _this.defaultBorder = new PdfArray();\n for (var i = 0; i < 3; i++) {\n _this.defaultBorder.add(new PdfNumber(0));\n }\n return _this;\n }\n Object.defineProperty(PdfTextWebLink.prototype, \"url\", {\n // Properties\n /**\n * Gets or sets the `Uri address`.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * //\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * //\n * // set the link text\n * textLink.text = 'Google';\n * // set the font\n * textLink.font = font;\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.uniformResourceLocator;\n },\n set: function (value) {\n if (value.length === 0) {\n throw new Error('ArgumentException : Url - string can not be empty');\n }\n this.uniformResourceLocator = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfTextWebLink.prototype.draw = function (arg1, arg2) {\n if (arg1 instanceof PdfPage) {\n var layout = new PdfStringLayouter();\n var previousFontStyle = this.font.style;\n if (arg2 instanceof PointF) {\n this.recalculateBounds = true;\n this.font.style = PdfFontStyle.Underline;\n var layoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF((arg1.graphics.clientSize.width - arg2.x), 0), true, arg1.graphics.clientSize);\n if (layoutResult.lines.length === 1) {\n var textSize = this.font.measureString(this.value);\n var rect = new RectangleF(arg2, textSize);\n rect = this.calculateBounds(rect, textSize.width, arg1.graphics.clientSize.width, arg2.x);\n this.uriAnnotation = new PdfUriAnnotation(rect, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n arg1.annotations.add(this.uriAnnotation);\n var result = this.drawText(arg1, arg2);\n this.font.style = previousFontStyle;\n return result;\n }\n else {\n var result = this.drawMultipleLineWithPoint(layoutResult, arg1, arg2);\n this.font.style = previousFontStyle;\n return result;\n }\n }\n else {\n var layoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF(arg2.width, 0), false, new SizeF(0, 0));\n this.font.style = PdfFontStyle.Underline;\n if (layoutResult.lines.length === 1) {\n var textSize = this.font.measureString(this.value);\n var rect = new RectangleF(new PointF(arg2.x, arg2.y), textSize);\n rect = this.calculateBounds(rect, textSize.width, arg2.width, arg2.x);\n this.uriAnnotation = new PdfUriAnnotation(rect, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n arg1.annotations.add(this.uriAnnotation);\n var returnValue = this.drawText(arg1, arg2);\n this.font.style = previousFontStyle;\n return returnValue;\n }\n else {\n var returnValue = this.drawMultipleLineWithBounds(layoutResult, arg1, arg2);\n this.font.style = previousFontStyle;\n return returnValue;\n }\n }\n }\n else {\n var page = new PdfPage();\n page = arg1.page;\n return this.draw(page, arg2);\n }\n };\n /* tslint:enable */\n //Private methods\n /**\n * Helper method `Draw` a Multiple Line Text Web Link on the Graphics with the specified location.\n * @private\n */\n PdfTextWebLink.prototype.drawMultipleLineWithPoint = function (result, page, location) {\n var layoutResult;\n for (var i = 0; i < result.layoutLines.length; i++) {\n var size = this.font.measureString(result.lines[i].text);\n var bounds = new RectangleF(location, size);\n if (i !== 0) {\n bounds.x = 0;\n }\n this.text = result.lines[i].text;\n if (bounds.y + size.height > page.graphics.clientSize.height) {\n if (i !== 0) {\n page = page.graphics.getNextPage();\n bounds = new RectangleF(0, 0, page.graphics.clientSize.width, size.height);\n location.y = 0;\n }\n else {\n break;\n }\n }\n bounds = this.calculateBounds(bounds, size.width, page.graphics.clientSize.width, bounds.x);\n this.uriAnnotation = new PdfUriAnnotation(bounds, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n page.annotations.add(this.uriAnnotation);\n if (i !== 0) {\n layoutResult = this.drawText(page, new PointF(0, bounds.y));\n }\n else {\n layoutResult = this.drawText(page, bounds.x, bounds.y);\n }\n location.y += size.height;\n }\n return layoutResult;\n };\n /**\n * Helper method `Draw` a Multiple Line Text Web Link on the Graphics with the specified bounds.\n * @private\n */\n PdfTextWebLink.prototype.drawMultipleLineWithBounds = function (result, page, bounds) {\n var layoutResult;\n for (var i = 0; i < result.layoutLines.length; i++) {\n var size = this.font.measureString(result.lines[i].text);\n var internalBounds = new RectangleF(new PointF(bounds.x, bounds.y), size);\n internalBounds = this.calculateBounds(internalBounds, size.width, bounds.width, bounds.x);\n this.text = result.lines[i].text;\n if (bounds.y + size.height > page.graphics.clientSize.height) {\n if (i !== 0) {\n page = page.graphics.getNextPage();\n bounds = new RectangleF(bounds.x, 0, bounds.width, size.height);\n internalBounds.y = 0;\n }\n else {\n break;\n }\n }\n this.uriAnnotation = new PdfUriAnnotation(internalBounds, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n page.annotations.add(this.uriAnnotation);\n layoutResult = this.drawText(page, bounds);\n bounds.y += size.height;\n }\n return layoutResult;\n };\n /* tslint:disable */\n PdfTextWebLink.prototype.calculateBounds = function (currentBounds, lineWidth, maximumWidth, startPosition) {\n var shift = 0;\n if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Center) {\n currentBounds.x = startPosition + (maximumWidth - lineWidth) / 2;\n currentBounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Right) {\n currentBounds.x = startPosition + (maximumWidth - lineWidth);\n currentBounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Justify) {\n currentBounds.x = startPosition;\n currentBounds.width = maximumWidth;\n }\n else {\n currentBounds.width = startPosition;\n currentBounds.width = lineWidth;\n }\n return currentBounds;\n };\n return PdfTextWebLink;\n}(PdfTextElement));\nexport { PdfTextWebLink };\n","/**\n * PdfNumbersConvertor.ts class for EJ2-PDF\n * @private\n */\nimport { PdfNumberStyle } from './../../pages/enum';\n/**\n * `PdfNumbersConvertor` for convert page number into numbers, roman letters, etc.,\n * @private\n */\nvar PdfNumbersConvertor = /** @class */ (function () {\n function PdfNumbersConvertor() {\n }\n // Static methods\n /**\n * Convert string value from page number with correct format.\n * @private\n */\n PdfNumbersConvertor.convert = function (intArabic, numberStyle) {\n var result = '';\n switch (numberStyle) {\n case PdfNumberStyle.None:\n result = '';\n break;\n case PdfNumberStyle.Numeric:\n result = intArabic.toString();\n break;\n case PdfNumberStyle.LowerLatin:\n result = this.arabicToLetter(intArabic).toLowerCase();\n break;\n case PdfNumberStyle.LowerRoman:\n result = this.arabicToRoman(intArabic).toLowerCase();\n break;\n case PdfNumberStyle.UpperLatin:\n result = this.arabicToLetter(intArabic);\n break;\n case PdfNumberStyle.UpperRoman:\n result = this.arabicToRoman(intArabic);\n break;\n }\n return result;\n };\n /**\n * Converts `arabic to roman` letters.\n * @private\n */\n PdfNumbersConvertor.arabicToRoman = function (intArabic) {\n var retval = '';\n retval += this.generateNumber(intArabic, 1000, 'M');\n retval += this.generateNumber(intArabic, 900, 'CM');\n retval += this.generateNumber(intArabic, 500, 'D');\n retval += this.generateNumber(intArabic, 400, 'CD');\n retval += this.generateNumber(intArabic, 100, 'C');\n retval += this.generateNumber(intArabic, 90, 'XC');\n retval += this.generateNumber(intArabic, 50, 'L');\n retval += this.generateNumber(intArabic, 40, 'XL');\n retval += this.generateNumber(intArabic, 10, 'X');\n retval += this.generateNumber(intArabic, 9, 'IX');\n retval += this.generateNumber(intArabic, 5, 'V');\n retval += this.generateNumber(intArabic, 4, 'IV');\n retval += this.generateNumber(intArabic, 1, 'I');\n return retval.toString();\n };\n /**\n * Converts `arabic to normal letters`.\n * @private\n */\n PdfNumbersConvertor.arabicToLetter = function (arabic) {\n var stack = this.convertToLetter(arabic);\n var result = '';\n while (stack.length > 0) {\n var num = stack.pop();\n result = this.appendChar(result, num);\n }\n return result.toString();\n };\n /**\n * Generate a string value of an input number.\n * @private\n */\n PdfNumbersConvertor.generateNumber = function (value, magnitude, letter) {\n var numberstring = '';\n while (value >= magnitude) {\n value -= magnitude;\n numberstring += letter;\n }\n return numberstring.toString();\n };\n /**\n * Convert a input number into letters.\n * @private\n */\n PdfNumbersConvertor.convertToLetter = function (arabic) {\n if (arabic <= 0) {\n throw Error('ArgumentOutOfRangeException-arabic, Value can not be less 0');\n }\n var stack = [];\n while (arabic > this.letterLimit) {\n var remainder = arabic % this.letterLimit;\n if (remainder === 0.0) {\n arabic = arabic / this.letterLimit - 1;\n remainder = this.letterLimit;\n }\n else {\n arabic /= this.letterLimit;\n }\n stack.push(remainder);\n }\n stack.push(arabic);\n return stack;\n };\n /**\n * Convert number to actual string value.\n * @private\n */\n PdfNumbersConvertor.appendChar = function (builder, value) {\n var letter = String.fromCharCode(PdfNumbersConvertor.acsiiStartIndex + value);\n builder += letter;\n return builder;\n };\n // Fields\n /**\n * numbers of letters in english [readonly].\n * @default = 26.0\n * @private\n */\n PdfNumbersConvertor.letterLimit = 26.0;\n /**\n * Resturns `acsii start index` value.\n * @default 64\n * @private\n */\n PdfNumbersConvertor.acsiiStartIndex = (65 - 1);\n return PdfNumbersConvertor;\n}());\nexport { PdfNumbersConvertor };\n","/**\n * Represent class to store information about `template and value pairs`.\n * @private\n */\nvar PdfTemplateValuePair = /** @class */ (function () {\n function PdfTemplateValuePair(template, value) {\n // Fields\n /**\n * Internal variable to store template.\n * @default null\n * @private\n */\n this.pdfTemplate = null;\n /**\n * Intenal variable to store value.\n * @private\n */\n this.content = '';\n if (typeof template === 'undefined') {\n //\n }\n else {\n this.template = template;\n this.value = value;\n }\n }\n Object.defineProperty(PdfTemplateValuePair.prototype, \"template\", {\n // Properties\n /**\n * Gets or sets the template.\n * @private\n */\n get: function () {\n return this.pdfTemplate;\n },\n set: function (value) {\n this.pdfTemplate = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplateValuePair.prototype, \"value\", {\n /**\n * Gets or sets the value.\n * @private\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.content = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTemplateValuePair;\n}());\nexport { PdfTemplateValuePair };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfAutomaticField.ts class for EJ2-PDF\n */\nimport { PdfAutomaticField } from './automatic-field';\nimport { TemporaryDictionary } from './../../collections/object-object-pair/dictionary';\nimport { PdfTemplateValuePair } from './pdf-template-value-pair';\nimport { SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfTemplate } from './../../graphics/figures/pdf-template';\n/**\n * Represents automatic field which has the same value within the `PdfGraphics`.\n */\nvar PdfMultipleValueField = /** @class */ (function (_super) {\n __extends(PdfMultipleValueField, _super);\n function PdfMultipleValueField() {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the instance of dictionary values of `graphics and template value pair`.\n * @private\n */\n _this.list = new TemporaryDictionary();\n return _this;\n }\n // Implementation\n /* tslint:disable */\n PdfMultipleValueField.prototype.performDraw = function (graphics, location, scalingX, scalingY) {\n _super.prototype.performDrawHelper.call(this, graphics, location, scalingX, scalingY);\n var value = this.getValue(graphics);\n var template = new PdfTemplate(this.getSize());\n this.list.setValue(graphics, new PdfTemplateValuePair(template, value));\n var g = template.graphics;\n var size = this.getSize();\n template.graphics.drawString(value, this.getFont(), this.pen, this.getBrush(), 0, 0, size.width, size.height, this.stringFormat);\n var drawLocation = new PointF(location.x + this.location.x, location.y + this.location.y);\n graphics.drawPdfTemplate(template, drawLocation, new SizeF(template.width * scalingX, template.height * scalingY));\n };\n return PdfMultipleValueField;\n}(PdfAutomaticField));\nexport { PdfMultipleValueField };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfBrush } from './../../graphics/brushes/pdf-brush';\nimport { PdfNumberStyle } from './../../pages/enum';\nimport { PdfNumbersConvertor } from './pdf-numbers-convertor';\nimport { PdfMultipleValueField } from './multiple-value-field';\n/**\n * Represents PDF document `page number field`.\n * @public\n */\nvar PdfPageNumberField = /** @class */ (function (_super) {\n __extends(PdfPageNumberField, _super);\n function PdfPageNumberField(font, arg2) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the number style of the page number field.\n * @private\n */\n _this.internalNumberStyle = PdfNumberStyle.Numeric;\n if (typeof arg2 === 'undefined') {\n _this.font = font;\n }\n else if (arg2 instanceof PdfBrush) {\n _this.font = font;\n _this.brush = arg2;\n }\n else {\n _this.font = font;\n _this.bounds = arg2;\n }\n return _this;\n }\n Object.defineProperty(PdfPageNumberField.prototype, \"numberStyle\", {\n // Properties\n /**\n * Gets and sets the number style of the page number field.\n * @private\n */\n get: function () {\n return this.internalNumberStyle;\n },\n set: function (value) {\n this.internalNumberStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return the `string` value of page number field.\n * @public\n */\n PdfPageNumberField.prototype.getValue = function (graphics) {\n var result = null;\n var page = this.getPageFromGraphics(graphics);\n result = this.internalGetValue(page);\n return result;\n };\n /**\n * Internal method to `get actual value of page number`.\n * @private\n */\n PdfPageNumberField.prototype.internalGetValue = function (page) {\n var document = page.document;\n var pageIndex = document.pages.indexOf(page) + 1;\n return PdfNumbersConvertor.convert(pageIndex, this.numberStyle);\n };\n return PdfPageNumberField;\n}(PdfMultipleValueField));\nexport { PdfPageNumberField };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfCompositeField.ts class for EJ2-PDF\n */\nimport { PdfMultipleValueField } from './multiple-value-field';\n/**\n * Represents class which can concatenate multiple automatic fields into single string.\n */\nvar PdfCompositeField = /** @class */ (function (_super) {\n __extends(PdfCompositeField, _super);\n // Constructor\n /**\n * Initialize a new instance of `PdfCompositeField` class.\n * @param font Font of the field.\n * @param brush Color of the field.\n * @param text Content of the field.\n * @param list List of the automatic fields in specific order based on the text content.\n */\n function PdfCompositeField(font, brush, text) {\n var list = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n list[_i - 3] = arguments[_i];\n }\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the array of automatic fields.\n * @private\n */\n _this.internalAutomaticFields = null;\n /**\n * Stores the text value of the field.\n * @private\n */\n _this.internalText = '';\n _this.font = font;\n _this.brush = brush;\n _this.text = text;\n _this.automaticFields = list;\n return _this;\n }\n Object.defineProperty(PdfCompositeField.prototype, \"text\", {\n // Properties\n /**\n * Gets and sets the content of the field.\n * @public\n */\n get: function () {\n return this.internalText;\n },\n set: function (value) {\n this.internalText = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCompositeField.prototype, \"automaticFields\", {\n /**\n * Gets and sets the list of the field to drawn.\n * @public\n */\n get: function () {\n return this.internalAutomaticFields;\n },\n set: function (value) {\n this.internalAutomaticFields = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Return the actual value generated from the list of automatic fields.\n * @public\n */\n PdfCompositeField.prototype.getValue = function (graphics) {\n var values = [];\n var text = this.text.toString();\n if (typeof this.automaticFields !== 'undefined' && this.automaticFields != null && this.automaticFields.length > 0) {\n for (var i = 0; i < this.automaticFields.length; i++) {\n var automaticField = this.automaticFields[i];\n text = text.replace('{' + i + '}', automaticField.getValue(graphics));\n }\n }\n return text;\n };\n return PdfCompositeField;\n}(PdfMultipleValueField));\nexport { PdfCompositeField };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfSingleValueField.ts class for EJ2-PDF\n */\nimport { PdfAutomaticField } from './automatic-field';\nimport { TemporaryDictionary } from './../../collections/object-object-pair/dictionary';\nimport { PdfTemplateValuePair } from './pdf-template-value-pair';\nimport { PointF, SizeF } from './../../drawing/pdf-drawing';\nimport { PdfTemplate } from './../../graphics/figures/pdf-template';\n/**\n * Represents automatic field which has the same value in the whole document.\n */\nvar PdfSingleValueField = /** @class */ (function (_super) {\n __extends(PdfSingleValueField, _super);\n // Constructors\n function PdfSingleValueField() {\n var _this = _super.call(this) || this;\n // Fields\n /* tslint:disable */\n _this.list = new TemporaryDictionary();\n /* tslint:enable */\n _this.painterGraphics = [];\n return _this;\n }\n PdfSingleValueField.prototype.performDraw = function (graphics, location, scalingX, scalingY) {\n _super.prototype.performDrawHelper.call(this, graphics, location, scalingX, scalingY);\n var page = this.getPageFromGraphics(graphics);\n var document = page.document;\n var textValue = this.getValue(graphics);\n /* tslint:disable */\n if (this.list.containsKey(document)) {\n var pair = this.list.getValue(document);\n var drawLocation = new PointF(location.x + this.location.x, location.y + this.location.y);\n graphics.drawPdfTemplate(pair.template, drawLocation, new SizeF(pair.template.width * scalingX, pair.template.height * scalingY));\n this.painterGraphics.push(graphics);\n }\n else {\n var size = this.getSize();\n var template = new PdfTemplate(size);\n this.list.setValue(document, new PdfTemplateValuePair(template, textValue));\n template.graphics.drawString(textValue, this.getFont(), this.pen, this.getBrush(), 0, 0, size.width, size.height, this.stringFormat);\n var drawLocation = new PointF(location.x + this.location.x, location.y + this.location.y);\n graphics.drawPdfTemplate(template, drawLocation, new SizeF(template.width * scalingX, template.height * scalingY));\n this.painterGraphics.push(graphics);\n }\n /* tslint:enable */\n };\n return PdfSingleValueField;\n}(PdfAutomaticField));\nexport { PdfSingleValueField };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfPageCountField.ts class for EJ2-PDF\n */\nimport { PdfSingleValueField } from './single-value-field';\nimport { PdfNumberStyle } from './../../pages/enum';\nimport { PdfBrush } from './../../graphics/brushes/pdf-brush';\nimport { PdfNumbersConvertor } from './pdf-numbers-convertor';\n/**\n * Represents total PDF document page count automatic field.\n */\nvar PdfPageCountField = /** @class */ (function (_super) {\n __extends(PdfPageCountField, _super);\n function PdfPageCountField(font, arg2) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the number style of the field.\n * @private\n */\n _this.internalNumberStyle = PdfNumberStyle.Numeric;\n if (typeof arg2 === 'undefined') {\n _this.font = font;\n }\n else if (arg2 instanceof PdfBrush) {\n _this.font = font;\n _this.brush = arg2;\n }\n else {\n _this.font = font;\n _this.bounds = arg2;\n }\n return _this;\n }\n Object.defineProperty(PdfPageCountField.prototype, \"numberStyle\", {\n // Properties\n /**\n * Gets and sets the number style of the field.\n * @public\n */\n get: function () {\n return this.internalNumberStyle;\n },\n set: function (value) {\n this.internalNumberStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Return the actual value of the content to drawn.\n * @public\n */\n PdfPageCountField.prototype.getValue = function (graphics) {\n var result = null;\n var page = this.getPageFromGraphics(graphics);\n var document = page.section.parent.document;\n var count = document.pages.count;\n result = PdfNumbersConvertor.convert(count, this.numberStyle);\n return result;\n };\n return PdfPageCountField;\n}(PdfSingleValueField));\nexport { PdfPageCountField };\n","import { PointF, RectangleF } from './../drawing/pdf-drawing';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfPageRotateAngle } from './../pages/enum';\nimport { PdfDestinationMode } from './../general/enum';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * `PdfDestination` class represents an anchor in the document\n * where bookmarks or annotations can direct when clicked.\n */\nvar PdfDestination = /** @class */ (function () {\n function PdfDestination(arg1, arg2) {\n // Fields\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Type of the `destination`.\n * @private\n */\n this.destinationMode = PdfDestinationMode.Location;\n /**\n * `Zoom` factor.\n * @private\n * @default 0\n */\n this.zoomFactor = 0;\n /**\n * `Location` of the destination.\n * @default new PointF() with 0 ,0 as co-ordinates\n * @private\n */\n this.destinationLocation = new PointF(0, 0);\n /**\n * `Bounds` of the destination as RectangleF.\n * @default RectangleF.Empty\n * @private\n */\n this.bounds = new RectangleF();\n /**\n * Pdf primitive representing `this` object.\n * @private\n */\n this.array = new PdfArray();\n if (typeof arg2 === 'undefined') {\n var angle = PdfPageRotateAngle.RotateAngle0;\n this.destinationLocation = new PointF(0, this.destinationLocation.y);\n this.pdfPage = arg1;\n }\n else if (arg2 instanceof PointF) {\n this.constructor(arg1);\n this.destinationLocation = arg2;\n }\n else {\n this.constructor(arg1);\n this.bounds = arg2;\n }\n }\n Object.defineProperty(PdfDestination.prototype, \"zoom\", {\n // Properties\n /**\n * Gets and Sets the `zoom` factor.\n * @private\n */\n get: function () {\n return this.zoomFactor;\n },\n set: function (value) {\n this.zoomFactor = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDestination.prototype, \"page\", {\n /**\n * Gets and Sets the `page` object.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n set: function (value) {\n this.pdfPage = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDestination.prototype, \"mode\", {\n /**\n * Gets and Sets the destination `mode`.\n * @private\n */\n get: function () {\n return this.destinationMode;\n },\n set: function (value) {\n this.destinationMode = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDestination.prototype, \"location\", {\n /**\n * Gets and Sets the `location`.\n * @private\n */\n get: function () {\n return this.destinationLocation;\n },\n set: function (value) {\n this.destinationLocation = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Translates` co-ordinates to PDF co-ordinate system (lower/left).\n * @private\n */\n PdfDestination.prototype.pointToNativePdf = function (page, point) {\n var section = page.section;\n return section.pointToNativePdf(page, point);\n };\n /**\n * `In fills` array by correct values.\n * @private\n */\n PdfDestination.prototype.initializePrimitive = function () {\n this.array.clear();\n this.array.add(new PdfReferenceHolder(this.pdfPage));\n switch (this.destinationMode) {\n case PdfDestinationMode.Location:\n var simplePage = this.pdfPage;\n var point = new PointF();\n point = this.pointToNativePdf(simplePage, this.destinationLocation);\n this.array.add(new PdfName(this.dictionaryProperties.xyz));\n this.array.add(new PdfNumber(point.x));\n this.array.add(new PdfNumber(point.y));\n this.array.add(new PdfNumber(this.zoomFactor));\n break;\n case PdfDestinationMode.FitToPage:\n this.array.add(new PdfName(this.dictionaryProperties.fit));\n break;\n }\n };\n Object.defineProperty(PdfDestination.prototype, \"element\", {\n /**\n * Gets the `element` representing this object.\n * @private\n */\n get: function () {\n this.initializePrimitive();\n return this.array;\n },\n enumerable: true,\n configurable: true\n });\n return PdfDestination;\n}());\nexport { PdfDestination };\n","/**\n * public Enum for `PdfBorderOverlapStyle`.\n * @private\n */\nexport var PdfBorderOverlapStyle;\n(function (PdfBorderOverlapStyle) {\n /**\n * Specifies the type of `Overlap`.\n * @private\n */\n PdfBorderOverlapStyle[PdfBorderOverlapStyle[\"Overlap\"] = 0] = \"Overlap\";\n /**\n * Specifies the type of `Inside`.\n * @private\n */\n PdfBorderOverlapStyle[PdfBorderOverlapStyle[\"Inside\"] = 1] = \"Inside\";\n})(PdfBorderOverlapStyle || (PdfBorderOverlapStyle = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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';\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 // width = this.fontInternal.getLineWidth(line);\n // let size : number = 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 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 return PdfGridStyleBase;\n}());\nexport { PdfGridStyleBase };\n/**\n * `PdfGridStyle` class provides customization of the appearance for the 'PdfGrid'.\n */\nvar PdfGridStyle = /** @class */ (function (_super) {\n __extends(PdfGridStyle, _super);\n //constructor\n /**\n * Initialize a new instance for `PdfGridStyle` class.\n * @private\n */\n function PdfGridStyle() {\n var _this = _super.call(this) || this;\n _this.gridBorderOverlapStyle = PdfBorderOverlapStyle.Overlap;\n _this.bAllowHorizontalOverflow = false;\n _this.gridHorizontalOverflowType = PdfHorizontalOverflowType.LastPage;\n return _this;\n }\n Object.defineProperty(PdfGridStyle.prototype, \"cellSpacing\", {\n //Properties\n /**\n * Gets or sets the `cell spacing` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n if (typeof this.gridCellSpacing === 'undefined') {\n this.gridCellSpacing = 0;\n }\n return this.gridCellSpacing;\n },\n set: function (value) {\n this.gridCellSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"horizontalOverflowType\", {\n /**\n * Gets or sets the type of the `horizontal overflow` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n return this.gridHorizontalOverflowType;\n },\n set: function (value) {\n this.gridHorizontalOverflowType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"allowHorizontalOverflow\", {\n /**\n * Gets or sets a value indicating whether to `allow horizontal overflow`.\n * @private\n */\n get: function () {\n return this.bAllowHorizontalOverflow;\n },\n set: function (value) {\n this.bAllowHorizontalOverflow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"cellPadding\", {\n /**\n * Gets or sets the `cell padding`.\n * @private\n */\n get: function () {\n if (typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n }\n return this.gridCellPadding;\n },\n set: function (value) {\n if (typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n this.gridCellPadding = value;\n }\n else {\n this.gridCellPadding = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"borderOverlapStyle\", {\n /**\n * Gets or sets the `border overlap style` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n return this.gridBorderOverlapStyle;\n },\n set: function (value) {\n this.gridBorderOverlapStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridStyle;\n}(PdfGridStyleBase));\nexport { PdfGridStyle };\n/**\n * `PdfGridCellStyle` class provides customization of the appearance for the 'PdfGridCell'.\n */\nvar PdfGridCellStyle = /** @class */ (function (_super) {\n __extends(PdfGridCellStyle, _super);\n /**\n * Initializes a new instance of the `PdfGridCellStyle` class.\n * @private\n */\n function PdfGridCellStyle() {\n var _this = _super.call(this) || this;\n /**\n * @hidden\n * @private\n */\n _this.gridCellBorders = PdfBorders.default;\n return _this;\n }\n Object.defineProperty(PdfGridCellStyle.prototype, \"stringFormat\", {\n //Properties\n /**\n * Gets the `string format` of the 'PdfGridCell'.\n * @private\n */\n get: function () {\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCellStyle.prototype, \"borders\", {\n /**\n * Gets or sets the `border` of the 'PdfGridCell'.\n * @private\n */\n get: function () {\n return this.gridCellBorders;\n },\n set: function (value) {\n this.gridCellBorders = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCellStyle.prototype, \"cellPadding\", {\n /**\n * Gets or sets the `cell padding`.\n * @private\n */\n get: function () {\n return this.gridCellPadding;\n },\n set: function (value) {\n if (this.gridCellPadding == null || typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n }\n this.gridCellPadding = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridCellStyle;\n}(PdfGridStyleBase));\nexport { PdfGridCellStyle };\n/**\n * `PdfGridRowStyle` class provides customization of the appearance for the `PdfGridRow`.\n */\nvar PdfGridRowStyle = /** @class */ (function () {\n // Constructor\n /**\n * Initializes a new instance of the `PdfGridRowStyle` class.\n * @private\n */\n function PdfGridRowStyle() {\n //\n }\n Object.defineProperty(PdfGridRowStyle.prototype, \"backgroundBrush\", {\n /**\n * Determine the value of the border is changed or not.\n * @private\n */\n // Properties\n /**\n * Gets or sets the `background brush`.\n * @private\n */\n get: function () {\n return this.gridRowBackgroundBrush;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setBackgroundBrush = function (value) {\n this.gridRowBackgroundBrush = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.backgroundBrush = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"textBrush\", {\n /**\n * Gets or sets the `text brush`.\n * @private\n */\n get: function () {\n return this.gridRowTextBrush;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setTextBrush = function (value) {\n this.gridRowTextBrush = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.textBrush = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"textPen\", {\n /**\n * Gets or sets the `text pen`.\n * @private\n */\n get: function () {\n return this.gridRowTextPen;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setTextPen = function (value) {\n this.gridRowTextPen = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.textPen = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"font\", {\n /**\n * Gets or sets the `font`.\n * @private\n */\n get: function () {\n return this.gridRowFont;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setFont = function (value) {\n this.gridRowFont = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.font = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"border\", {\n /**\n * Gets or sets the `border` of the current row.\n * @private\n */\n get: function () {\n if (typeof this.gridRowBorder === 'undefined') {\n this.setBorder(new PdfBorders());\n }\n return this.gridRowBorder;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setBorder = function (value) {\n this.gridRowBorder = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.borders = value;\n }\n }\n };\n /**\n * sets the `parent row` of the current object.\n * @private\n */\n PdfGridRowStyle.prototype.setParent = function (parent) {\n this.parent = parent;\n };\n return PdfGridRowStyle;\n}());\nexport { PdfGridRowStyle };\n/**\n * public Enum for `PdfHorizontalOverflowType`.\n * @private\n */\nexport var PdfHorizontalOverflowType;\n(function (PdfHorizontalOverflowType) {\n /**\n * Specifies the type of `NextPage`.\n * @private\n */\n PdfHorizontalOverflowType[PdfHorizontalOverflowType[\"NextPage\"] = 0] = \"NextPage\";\n /**\n * Specifies the type of `LastPage`.\n * @private\n */\n PdfHorizontalOverflowType[PdfHorizontalOverflowType[\"LastPage\"] = 1] = \"LastPage\";\n})(PdfHorizontalOverflowType || (PdfHorizontalOverflowType = {}));\n","import { PdfGridCellStyle } from './styles/style';\nimport { PdfStringLayouter } from './../../graphics/fonts/string-layouter';\nimport { PdfDocument } from './../../document/pdf-document';\nimport { PdfStringFormat } from './../../graphics/fonts/pdf-string-format';\nimport { RectangleF, PointF, SizeF } from './../../drawing/pdf-drawing';\nimport { PdfDashStyle, PdfLineCap } from './../../graphics/enum';\nimport { PdfBorderOverlapStyle } from './../tables/light-tables/enum';\nimport { PdfSolidBrush } from './../../graphics/brushes/pdf-solid-brush';\nimport { PdfColor } from './../../graphics/pdf-color';\nimport { PdfImage } from './../../graphics/images/pdf-image';\nimport { PdfBitmap } from './../../graphics/images/pdf-bitmap';\nimport { PdfTextWebLink } from './../../annotations/pdf-text-web-link';\n/**\n * `PdfGridCell` class represents the schema of a cell in a 'PdfGrid'.\n */\nvar PdfGridCell = /** @class */ (function () {\n function PdfGridCell(row) {\n /**\n * `Width` of the cell.\n * @default 0\n * @private\n */\n this.cellWidth = 0;\n /**\n * `Height` of the cell.\n * @default 0\n * @private\n */\n this.cellHeight = 0;\n /**\n * Specifies weather the `cell is drawn`.\n * @default true\n * @private\n */\n this.finsh = true;\n /**\n * The `remaining height` of row span.\n * @default 0\n * @private\n */\n this.rowSpanRemainingHeight = 0;\n if (typeof row === 'undefined') {\n this.gridRowSpan = 1;\n this.colSpan = 1;\n }\n else {\n this.constructor();\n this.gridRow = row;\n }\n }\n Object.defineProperty(PdfGridCell.prototype, \"isCellMergeContinue\", {\n //Properties\n get: function () {\n return this.internalIsCellMergeContinue;\n },\n set: function (value) {\n this.internalIsCellMergeContinue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isRowMergeContinue\", {\n get: function () {\n return this.internalIsRowMergeContinue;\n },\n set: function (value) {\n this.internalIsRowMergeContinue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isCellMergeStart\", {\n get: function () {\n return this.internalIsCellMergeStart;\n },\n set: function (value) {\n this.internalIsCellMergeStart = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isRowMergeStart\", {\n get: function () {\n return this.internalIsRowMergeStart;\n },\n set: function (value) {\n this.internalIsRowMergeStart = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"remainingString\", {\n /**\n * Gets or sets the `remaining string` after the row split between pages.\n * @private\n */\n get: function () {\n return this.remaining;\n },\n set: function (value) {\n this.remaining = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"stringFormat\", {\n /**\n * Gets or sets the `string format`.\n * @private\n */\n get: function () {\n if (this.format == null) {\n this.format = new PdfStringFormat();\n }\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"row\", {\n /**\n * Gets or sets the parent `row`.\n * @private\n */\n get: function () {\n return this.gridRow;\n },\n set: function (value) {\n this.gridRow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"value\", {\n /**\n * Gets or sets the `value` of the cell.\n * @private\n */\n get: function () {\n return this.objectValue;\n },\n set: function (value) {\n this.objectValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"rowSpan\", {\n /**\n * Gets or sets a value that indicates the total number of rows that cell `spans` within a PdfGrid.\n * @private\n */\n get: function () {\n return this.gridRowSpan;\n },\n set: function (value) {\n if (value < 1) {\n throw new Error('ArgumentException : Invalid span specified, must be greater than or equal to 1');\n }\n else {\n this.gridRowSpan = value;\n this.row.rowSpanExists = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"style\", {\n /**\n * Gets or sets the cell `style`.\n * @private\n */\n get: function () {\n if (this.cellStyle == null) {\n this.cellStyle = new PdfGridCellStyle();\n }\n return this.cellStyle;\n },\n set: function (value) {\n this.cellStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"height\", {\n /**\n * Gets the `height` of the PdfGrid cell.[Read-Only].\n * @private\n */\n get: function () {\n if (this.cellHeight === 0) {\n this.cellHeight = this.measureHeight();\n }\n return this.cellHeight;\n },\n set: function (value) {\n this.cellHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"columnSpan\", {\n /**\n * Gets or sets a value that indicates the total number of columns that cell `spans` within a PdfGrid.\n * @private\n */\n get: function () {\n return this.colSpan;\n },\n set: function (value) {\n if (value < 1) {\n throw Error('Invalid span specified, must be greater than or equal to 1');\n }\n else {\n this.colSpan = value;\n this.row.columnSpanExists = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"width\", {\n /**\n * Gets the `width` of the PdfGrid cell.[Read-Only].\n * @private\n */\n get: function () {\n if (this.cellWidth === 0 || this.row.grid.isComplete) {\n this.cellWidth = this.measureWidth();\n }\n return this.cellWidth;\n },\n set: function (value) {\n this.cellWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Calculates the width`.\n * @private\n */\n PdfGridCell.prototype.measureWidth = function () {\n // .. Calculate the cell text width.\n // .....Add border widths, cell spacings and paddings to the width.\n var width = 0;\n var layouter = new PdfStringLayouter();\n if (typeof this.objectValue === 'string') {\n /* tslint:disable */\n var slr = layouter.layout(this.objectValue, this.getTextFont(), this.stringFormat, new SizeF(0, 0), false, new SizeF(0, 0));\n width += slr.actualSize.width;\n width += (this.style.borders.left.width + this.style.borders.right.width) * 2;\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n width += this.objectValue.width;\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n var webLink = this.objectValue;\n var result = layouter.layout(webLink.text, webLink.font, webLink.stringFormat, new SizeF(0, 0), false, new SizeF(0, 0));\n /* tslint:enable */\n width += result.actualSize.width;\n width += (this.style.borders.left.width + this.style.borders.right.width) * 2;\n }\n width += (this.row.grid.style.cellPadding.left + this.row.grid.style.cellPadding.right);\n width += this.row.grid.style.cellSpacing;\n return width;\n };\n /**\n * Draw the `cell background`.\n * @private\n */\n PdfGridCell.prototype.drawCellBackground = function (graphics, bounds) {\n var backgroundBrush = this.getBackgroundBrush();\n if (backgroundBrush != null) {\n graphics.drawRectangle(backgroundBrush, bounds.x, bounds.y, bounds.width, bounds.height);\n }\n };\n /**\n * `Adjusts the text layout area`.\n * @private\n */\n /* tslint:disable */\n PdfGridCell.prototype.adjustContentLayoutArea = function (bounds) {\n //Add Padding value to its Cell Bounds\n var returnBounds = new RectangleF(bounds.x, bounds.y, bounds.width, bounds.height);\n if (typeof this.style.cellPadding === 'undefined' || this.style.cellPadding == null) {\n returnBounds.x += this.gridRow.grid.style.cellPadding.left + this.cellStyle.borders.left.width;\n returnBounds.y += this.gridRow.grid.style.cellPadding.top + this.cellStyle.borders.top.width;\n returnBounds.width -= (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n returnBounds.width -= (this.cellStyle.borders.left.width + this.cellStyle.borders.right.width);\n returnBounds.height -= (this.gridRow.grid.style.cellPadding.bottom + this.gridRow.grid.style.cellPadding.top);\n returnBounds.height -= (this.cellStyle.borders.top.width + this.cellStyle.borders.bottom.width);\n if (this.rowSpan === 1) {\n returnBounds.width -= (this.style.borders.left.width);\n }\n }\n else {\n returnBounds.x += this.style.cellPadding.left + this.cellStyle.borders.left.width;\n returnBounds.y += this.style.cellPadding.top + this.cellStyle.borders.top.width;\n returnBounds.width -= (this.style.cellPadding.right + this.style.cellPadding.left);\n returnBounds.width -= (this.cellStyle.borders.left.width + this.cellStyle.borders.right.width);\n returnBounds.height -= (this.style.cellPadding.bottom + this.style.cellPadding.top);\n returnBounds.height -= (this.cellStyle.borders.top.width + this.cellStyle.borders.bottom.width);\n if (this.rowSpan === 1) {\n returnBounds.width -= (this.style.borders.left.width);\n }\n }\n return returnBounds;\n };\n /**\n * `Draws` the specified graphics.\n * @private\n */\n PdfGridCell.prototype.draw = function (graphics, bounds, cancelSubsequentSpans) {\n var isrowbreak = false;\n var result = null;\n if (this.internalIsCellMergeContinue || this.internalIsRowMergeContinue) {\n if (this.internalIsCellMergeContinue && this.row.grid.style.allowHorizontalOverflow) {\n if ((this.row.rowOverflowIndex > 0 && (this.row.cells.indexOf(this) != this.row.rowOverflowIndex + 1)) || (this.row.rowOverflowIndex == 0 && this.internalIsCellMergeContinue)) {\n return result;\n }\n }\n else {\n return result;\n }\n }\n //Adjust bounds with Row and Column Spacing\n bounds = this.adjustOuterLayoutArea(bounds, graphics);\n var textPen = this.getTextPen();\n var textBrush = this.getTextBrush();\n if (typeof textPen === 'undefined' && typeof textBrush === 'undefined') {\n textBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n }\n var font = this.getTextFont();\n var strFormat = this.getStringFormat();\n var innerLayoutArea = this.adjustContentLayoutArea(bounds);\n this.drawCellBackground(graphics, bounds);\n if (typeof this.objectValue === 'string' || typeof this.remaining === 'string') {\n var temp = void 0;\n temp = this.remaining === '' ? this.remaining : this.objectValue;\n graphics.drawString(temp, font, textPen, textBrush, innerLayoutArea.x, innerLayoutArea.y, innerLayoutArea.width, innerLayoutArea.height, strFormat);\n result = graphics.stringLayoutResult;\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n var imageBounds = void 0;\n if (this.objectValue.width <= innerLayoutArea.width) {\n imageBounds = new RectangleF(innerLayoutArea.x, innerLayoutArea.y, this.objectValue.width, innerLayoutArea.height);\n }\n else {\n imageBounds = innerLayoutArea;\n }\n graphics.drawImage(this.objectValue, imageBounds.x, imageBounds.y, imageBounds.width, imageBounds.height);\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n this.objectValue.draw(graphics.currentPage, innerLayoutArea);\n }\n if (this.style.borders != null) {\n this.drawCellBorders(graphics, bounds);\n }\n return result;\n };\n /* tslint:enable */\n /**\n * Draws the `cell border` constructed by drawing lines.\n * @private\n */\n PdfGridCell.prototype.drawCellBorders = function (graphics, bounds) {\n if (this.row.grid.style.borderOverlapStyle === PdfBorderOverlapStyle.Inside) {\n bounds.x += this.style.borders.left.width;\n bounds.y += this.style.borders.top.width;\n bounds.width -= this.style.borders.right.width;\n bounds.height -= this.style.borders.bottom.width;\n }\n var p1 = new PointF(bounds.x, bounds.y + bounds.height);\n var p2 = new PointF(bounds.x, bounds.y);\n var pen = this.cellStyle.borders.left;\n if (this.cellStyle.borders.left.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n // SetTransparency(ref graphics, pen);\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x + bounds.width, bounds.y);\n p2 = new PointF(bounds.x + bounds.width, bounds.y + bounds.height);\n pen = this.cellStyle.borders.right;\n if ((bounds.x + bounds.width) > (graphics.clientSize.width - (pen.width / 2))) {\n p1 = new PointF(graphics.clientSize.width - (pen.width / 2), bounds.y);\n p2 = new PointF(graphics.clientSize.width - (pen.width / 2), bounds.y + bounds.height);\n }\n if (this.cellStyle.borders.right.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x, bounds.y);\n p2 = new PointF(bounds.x + bounds.width, bounds.y);\n pen = this.cellStyle.borders.top;\n if (this.cellStyle.borders.top.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x + bounds.width, bounds.y + bounds.height);\n p2 = new PointF(bounds.x, bounds.y + bounds.height);\n pen = this.cellStyle.borders.bottom;\n // if ((bounds.y + bounds.height) > (graphics.clientSize.height - (pen.width / 2))) {\n // p1 = new PointF((bounds.x + bounds.width), (graphics.clientSize.height - (pen.width / 2)));\n // p2 = new PointF(bounds.x, (graphics.clientSize.height - (pen.width / 2)));\n // }\n if (this.cellStyle.borders.bottom.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n };\n /**\n * `Adjusts the outer layout area`.\n * @private\n */\n /* tslint:disable */\n PdfGridCell.prototype.adjustOuterLayoutArea = function (bounds, g) {\n var isHeader = false;\n var cellSpacing = this.row.grid.style.cellSpacing;\n if (cellSpacing > 0) {\n bounds = new RectangleF(bounds.x + cellSpacing, bounds.y + cellSpacing, bounds.width - cellSpacing, bounds.height - cellSpacing);\n }\n var currentColIndex = this.row.cells.indexOf(this);\n if (this.columnSpan > 1) {\n var span = this.columnSpan;\n var totalWidth = 0;\n for (var i = currentColIndex; i < currentColIndex + span; i++) {\n if (this.row.grid.style.allowHorizontalOverflow) {\n var width = void 0;\n var compWidth = this.row.grid.size.width < g.clientSize.width ? this.row.grid.size.width : g.clientSize.width;\n if (this.row.grid.size.width > g.clientSize.width) {\n width = bounds.x + totalWidth + this.row.grid.columns.getColumn(i).width;\n }\n else {\n width = totalWidth + this.row.grid.columns.getColumn(i).width;\n }\n if (width > compWidth) {\n break;\n }\n }\n totalWidth += this.row.grid.columns.getColumn(i).width;\n }\n totalWidth -= this.row.grid.style.cellSpacing;\n bounds.width = totalWidth;\n }\n if (this.rowSpan > 1 || this.row.rowSpanExists) {\n var span = this.rowSpan;\n var currentRowIndex = this.row.grid.rows.rowCollection.indexOf(this.row);\n if (currentRowIndex == -1) {\n currentRowIndex = this.row.grid.headers.indexOf(this.row);\n if (currentRowIndex != -1) {\n isHeader = true;\n }\n }\n var totalHeight = 0;\n var max = 0;\n for (var i = currentRowIndex; i < currentRowIndex + span; i++) {\n totalHeight += (isHeader ? this.row.grid.headers.getHeader(i).height : this.row.grid.rows.getRow(i).height);\n var row = this.row.grid.rows.getRow(i);\n var rowIndex = this.row.grid.rows.rowCollection.indexOf(row);\n }\n var cellIndex = this.row.cells.indexOf(this);\n totalHeight -= this.row.grid.style.cellSpacing;\n // if (this.row.cells.getCell(cellIndex).height > totalHeight && (!this.row.grid.rows.getRow((currentRowIndex + span) - 1).isRowHeightSet)) {\n // this.row.grid.rows.getRow((currentRowIndex + span) - 1).cells.getCell(cellIndex).rowSpanRemainingHeight = this.row.cells.getCell(cellIndex).height - totalHeight;\n // totalHeight = this.row.cells.getCell(cellIndex).height;\n // bounds.height = totalHeight;\n // } else {\n bounds.height = totalHeight;\n // }\n if (!this.row.rowMergeComplete) {\n bounds.height = totalHeight;\n }\n }\n return bounds;\n };\n /* tslint:enable */\n /**\n * Gets the `text font`.\n * @private\n */\n PdfGridCell.prototype.getTextFont = function () {\n if (typeof this.style.font !== 'undefined' && this.style.font != null) {\n return this.style.font;\n }\n else if (typeof this.row.style.font !== 'undefined' && this.row.style.font != null) {\n return this.row.style.font;\n }\n else if (typeof this.row.grid.style.font !== 'undefined' && this.row.grid.style.font != null) {\n return this.row.grid.style.font;\n }\n else {\n return PdfDocument.defaultFont;\n }\n };\n /**\n * Gets the `text brush`.\n * @private\n */\n PdfGridCell.prototype.getTextBrush = function () {\n if (typeof this.style.textBrush !== 'undefined' && this.style.textBrush != null) {\n return this.style.textBrush;\n }\n else if (typeof this.row.style.textBrush !== 'undefined' && this.row.style.textBrush != null) {\n return this.row.style.textBrush;\n }\n else {\n return this.row.grid.style.textBrush;\n }\n };\n /**\n * Gets the `text pen`.\n * @private\n */\n PdfGridCell.prototype.getTextPen = function () {\n if (typeof this.style.textPen !== 'undefined' && this.style.textPen != null) {\n return this.style.textPen;\n }\n else if (typeof this.row.style.textPen !== 'undefined' && this.row.style.textPen != null) {\n return this.row.style.textPen;\n }\n else {\n return this.row.grid.style.textPen;\n }\n };\n /**\n * Gets the `background brush`.\n * @private\n */\n PdfGridCell.prototype.getBackgroundBrush = function () {\n if (typeof this.style.backgroundBrush !== 'undefined' && this.style.backgroundBrush != null) {\n return this.style.backgroundBrush;\n }\n else if (typeof this.row.style.backgroundBrush !== 'undefined' && this.row.style.backgroundBrush != null) {\n return this.row.style.backgroundBrush;\n }\n else {\n return this.row.grid.style.backgroundBrush;\n }\n };\n /**\n * Gets the current `StringFormat`.\n * @private\n */\n PdfGridCell.prototype.getStringFormat = function () {\n if (typeof this.style.stringFormat !== 'undefined' && this.style.stringFormat != null) {\n return this.style.stringFormat;\n }\n else {\n return this.stringFormat;\n }\n };\n /**\n * Calculates the `height`.\n * @private\n */\n PdfGridCell.prototype.measureHeight = function () {\n // .. Calculate the cell text height.\n // .....Add border widths, cell spacings and paddings to the height.\n var width = this.calculateWidth();\n // //check whether the Current PdfGridCell has padding\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n width -= (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n else {\n width -= (this.style.cellPadding.right + this.style.cellPadding.left);\n width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n var height = 0;\n var layouter = new PdfStringLayouter();\n if (typeof this.objectValue === 'string' || typeof this.remainingString === 'string') {\n var currentValue = this.objectValue;\n /* tslint:disable */\n var slr = layouter.layout(currentValue, this.getTextFont(), this.stringFormat, new SizeF(width, 0), false, new SizeF(0, 0));\n /* tslint:enable */\n height += slr.actualSize.height;\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n height += this.objectValue.height;\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n var webLink = this.objectValue;\n /* tslint:disable */\n var slr = layouter.layout(webLink.text, webLink.font, webLink.stringFormat, new SizeF(width, 0), false, new SizeF(0, 0));\n /* tslint:enable */\n height += slr.actualSize.height;\n }\n height += (this.style.borders.top.width + this.style.borders.bottom.width) * 2;\n //Add padding top and bottom value to height\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n height += (this.row.grid.style.cellPadding.top + this.row.grid.style.cellPadding.bottom);\n }\n else {\n height += (this.style.cellPadding.top + this.style.cellPadding.bottom);\n }\n height += this.row.grid.style.cellSpacing;\n return height;\n };\n /**\n * return the calculated `width` of the cell.\n * @private\n */\n PdfGridCell.prototype.calculateWidth = function () {\n var cellIndex = this.row.cells.indexOf(this);\n var columnSpan = this.columnSpan;\n var width = 0;\n for (var i = 0; i < columnSpan; i++) {\n width += this.row.grid.columns.getColumn(cellIndex + i).width;\n }\n return width;\n };\n return PdfGridCell;\n}());\nexport { PdfGridCell };\n/**\n * `PdfGridCellCollection` class provides access to an ordered,\n * strongly typed collection of 'PdfGridCell' objects.\n * @private\n */\nvar PdfGridCellCollection = /** @class */ (function () {\n //Constructor\n /**\n * Initializes a new instance of the `PdfGridCellCollection` class with the row.\n * @private\n */\n function PdfGridCellCollection(row) {\n /**\n * @hidden\n * @private\n */\n this.cells = [];\n this.gridRow = row;\n }\n //Properties\n /**\n * Gets the current `cell`.\n * @private\n */\n PdfGridCellCollection.prototype.getCell = function (index) {\n if (index < 0 || index >= this.count) {\n throw new Error('IndexOutOfRangeException');\n }\n return this.cells[index];\n };\n Object.defineProperty(PdfGridCellCollection.prototype, \"count\", {\n /**\n * Gets the cells `count`.[Read-Only].\n * @private\n */\n get: function () {\n return this.cells.length;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridCellCollection.prototype.add = function (cell) {\n if (typeof cell === 'undefined') {\n var tempcell = new PdfGridCell();\n this.add(tempcell);\n return cell;\n }\n else {\n cell.row = this.gridRow;\n this.cells.push(cell);\n }\n };\n /**\n * Returns the `index of` a particular cell in the collection.\n * @private\n */\n PdfGridCellCollection.prototype.indexOf = function (cell) {\n return this.cells.indexOf(cell);\n };\n return PdfGridCellCollection;\n}());\nexport { PdfGridCellCollection };\n","import { PdfGridCell } from './pdf-grid-cell';\nimport { PdfStringFormat } from './../../graphics/fonts/pdf-string-format';\n/**\n * `PdfGridColumn` class represents the schema of a column in a 'PdfGrid'.\n */\nvar PdfGridColumn = /** @class */ (function () {\n //Constructors\n /**\n * Initializes a new instance of the `PdfGridColumn` class with the parent grid.\n * @private\n */\n function PdfGridColumn(grid) {\n /**\n * The `width` of the column.\n * @default 0\n * @private\n */\n this.columnWidth = 0;\n this.grid = grid;\n }\n Object.defineProperty(PdfGridColumn.prototype, \"width\", {\n /**\n * Gets or sets the `width` of the 'PdfGridColumn'.\n * @private\n */\n get: function () {\n return this.columnWidth;\n },\n set: function (value) {\n this.isCustomWidth = true;\n this.columnWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumn.prototype, \"format\", {\n /**\n * Gets or sets the information about the text `formatting`.\n * @private\n */\n get: function () {\n if (this.stringFormat == null) {\n this.stringFormat = new PdfStringFormat(); //GetDefaultFormat();\n }\n return this.stringFormat;\n },\n set: function (value) {\n this.stringFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridColumn;\n}());\nexport { PdfGridColumn };\n/**\n * `PdfGridColumnCollection` class provides access to an ordered,\n * strongly typed collection of 'PdfGridColumn' objects.\n * @private\n */\nvar PdfGridColumnCollection = /** @class */ (function () {\n //properties\n //Constructors\n /**\n * Initializes a new instance of the `PdfGridColumnCollection` class with the parent grid.\n * @private\n */\n function PdfGridColumnCollection(grid) {\n /**\n * @hidden\n * @private\n */\n this.internalColumns = [];\n /**\n * @hidden\n * @private\n */\n this.columnWidth = 0;\n this.grid = grid;\n this.internalColumns = [];\n }\n //Iplementation\n /**\n * `Add` a new column to the 'PdfGrid'.\n * @private\n */\n PdfGridColumnCollection.prototype.add = function (count) {\n // public add(column : PdfGridColumn) : void\n // public add(arg : number|PdfGridColumn) : void {\n // if (typeof arg === 'number') {\n for (var i = 0; i < count; i++) {\n this.internalColumns.push(new PdfGridColumn(this.grid));\n for (var index = 0; index < this.grid.rows.count; index++) {\n var row = this.grid.rows.getRow(index);\n var cell = new PdfGridCell();\n cell.value = '';\n row.cells.add(cell);\n }\n }\n // } else {\n // let column : PdfGridColumn = new PdfGridColumn(this.grid);\n // this.columns.push(column);\n // return column;\n // }\n };\n Object.defineProperty(PdfGridColumnCollection.prototype, \"count\", {\n /**\n * Gets the `number of columns` in the 'PdfGrid'.[Read-Only].\n * @private\n */\n get: function () {\n return this.internalColumns.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumnCollection.prototype, \"width\", {\n /**\n * Gets the `widths`.\n * @private\n */\n get: function () {\n if (this.columnWidth === 0) {\n this.columnWidth = this.measureColumnsWidth();\n }\n if (this.grid.initialWidth !== 0 && this.columnWidth !== this.grid.initialWidth && !this.grid.style.allowHorizontalOverflow) {\n this.columnWidth = this.grid.initialWidth;\n this.grid.isPageWidth = true;\n }\n return this.columnWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumnCollection.prototype, \"columns\", {\n /**\n * Gets the `array of PdfGridColumn`.[Read-Only]\n * @private\n */\n get: function () {\n return this.internalColumns;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the `PdfGridColumn` from the specified index.[Read-Only]\n * @private\n */\n PdfGridColumnCollection.prototype.getColumn = function (index) {\n if (index >= 0 && index <= this.columns.length) {\n return this.columns[index];\n }\n else {\n throw Error('can not get the column from the index: ' + index);\n }\n };\n //Implementation\n /**\n * `Calculates the column widths`.\n * @private\n */\n PdfGridColumnCollection.prototype.measureColumnsWidth = function () {\n var totalWidth = 0;\n // this.m_grid.measureColumnsWidth();\n for (var i = 0, count = this.internalColumns.length; i < count; i++) {\n totalWidth += this.internalColumns[i].width;\n }\n return totalWidth;\n };\n /**\n * Gets the `widths of the columns`.\n * @private\n */\n PdfGridColumnCollection.prototype.getDefaultWidths = function (totalWidth) {\n var widths = [];\n var summ = 0.0;\n var subFactor = this.count;\n for (var i = 0; i < this.count; i++) {\n if (this.grid.isPageWidth && totalWidth >= 0 && !this.internalColumns[i].isCustomWidth) {\n this.internalColumns[i].width = 0;\n }\n else {\n widths[i] = this.internalColumns[i].width;\n if (this.internalColumns[i].width > 0 && this.internalColumns[i].isCustomWidth) {\n totalWidth -= this.internalColumns[i].width;\n subFactor--;\n }\n else {\n widths[i] = 0;\n }\n }\n }\n for (var i = 0; i < this.count; i++) {\n var width = totalWidth / subFactor;\n if (widths[i] <= 0) {\n widths[i] = width;\n }\n }\n return widths;\n };\n return PdfGridColumnCollection;\n}());\nexport { PdfGridColumnCollection };\n","import { PdfGridCell, PdfGridCellCollection } from './pdf-grid-cell';\nimport { PdfGridRowStyle } from './styles/style';\n/**\n * `PdfGridRow` class provides customization of the settings for the particular row.\n */\nvar PdfGridRow = /** @class */ (function () {\n //Constructor\n /**\n * Initializes a new instance of the `PdfGridRow` class with the parent grid.\n * @private\n */\n function PdfGridRow(grid) {\n /**\n * Stores the index of the overflowing row.\n * @private\n */\n this.gridRowOverflowIndex = 0;\n /**\n * Check whether the row height `is set explicitly`.\n * @default false\n * @private\n */\n this.isRowHeightSet = false;\n /**\n * Check weather the row merge `is completed` or not.\n * @default true\n * @private\n */\n this.isRowMergeComplete = true;\n this.pdfGrid = grid;\n }\n Object.defineProperty(PdfGridRow.prototype, \"rowSpanExists\", {\n //Properties\n /**\n * Gets or sets a value indicating [`row span exists`].\n * @private\n */\n get: function () {\n return this.bRowSpanExists;\n },\n set: function (value) {\n this.bRowSpanExists = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"cells\", {\n /**\n * Gets the `cells` from the selected row.[Read-Only].\n * @private\n */\n get: function () {\n if (this.gridCells == null) {\n this.gridCells = new PdfGridCellCollection(this);\n }\n return this.gridCells;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"grid\", {\n /**\n * Gets or sets the parent `grid`.\n * @private\n */\n get: function () {\n return this.pdfGrid;\n },\n set: function (value) {\n this.pdfGrid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"style\", {\n /**\n * Gets or sets the row `style`.\n * @private\n */\n get: function () {\n if (typeof this.rowStyle === 'undefined') {\n this.rowStyle = new PdfGridRowStyle();\n this.rowStyle.setParent(this);\n }\n return this.rowStyle;\n },\n set: function (value) {\n this.rowStyle = value;\n for (var i = 0; i < this.cells.count; i++) {\n this.cells.getCell(i).style.borders = value.border;\n if (typeof value.font !== 'undefined') {\n this.cells.getCell(i).style.font = value.font;\n }\n if (typeof value.backgroundBrush !== 'undefined') {\n this.cells.getCell(i).style.backgroundBrush = value.backgroundBrush;\n }\n if (typeof value.textBrush !== 'undefined') {\n this.cells.getCell(i).style.textBrush = value.textBrush;\n }\n if (typeof value.textPen !== 'undefined') {\n this.cells.getCell(i).style.textPen = value.textPen;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowBreakHeight\", {\n /**\n * `Height` of the row yet to be drawn after split.\n * @private\n */\n get: function () {\n if (typeof this.gridRowBreakHeight === 'undefined') {\n this.gridRowBreakHeight = 0;\n }\n return this.gridRowBreakHeight;\n },\n set: function (value) {\n this.gridRowBreakHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowOverflowIndex\", {\n get: function () {\n return this.gridRowOverflowIndex;\n },\n set: function (value) {\n this.gridRowOverflowIndex = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"height\", {\n /**\n * Gets or sets the `height` of the row.\n * @private\n */\n get: function () {\n if (!this.isRowHeightSet) {\n this.rowHeight = this.measureHeight();\n }\n return this.rowHeight;\n },\n set: function (value) {\n this.rowHeight = value;\n this.isRowHeightSet = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"columnSpanExists\", {\n /**\n * Gets or sets a value indicating [`column span exists`].\n * @private\n */\n get: function () {\n return this.bColumnSpanExists;\n },\n set: function (value) {\n this.bColumnSpanExists = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowMergeComplete\", {\n /**\n * Check whether the Row `has row span or row merge continue`.\n * @private\n */\n get: function () {\n return this.isRowMergeComplete;\n },\n set: function (value) {\n this.isRowMergeComplete = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowIndex\", {\n /**\n * Returns `index` of the row.\n * @private\n */\n get: function () {\n return this.grid.rows.rowCollection.indexOf(this);\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Calculates the height`.\n * @private\n */\n PdfGridRow.prototype.measureHeight = function () {\n var rowSpanRemainingHeight = 0;\n var rowHeight;\n var maxHeight = 0;\n // if(this.cells.getCell(0).RowSpan > 1) {\n // rowHeight=0;\n // } else {\n rowHeight = this.cells.getCell(0).height;\n // }\n for (var i = 0; i < this.cells.count; i++) {\n var cell = this.cells.getCell(i);\n //get the maximum rowspan remaining height.\n if (cell.rowSpanRemainingHeight > rowSpanRemainingHeight) {\n rowSpanRemainingHeight = cell.rowSpanRemainingHeight;\n }\n //skip the cell if row spanned.\n // if (cell.IsRowMergeContinue)\n // continue; \n // if (!cell.IsRowMergeContinue)\n this.rowMergeComplete = false;\n if (cell.rowSpan > 1) {\n if (maxHeight < cell.height) {\n maxHeight = cell.height;\n }\n continue;\n }\n rowHeight = Math.max(rowHeight, cell.height);\n }\n if (rowHeight === 0) {\n rowHeight = maxHeight;\n }\n else if (rowSpanRemainingHeight > 0) {\n rowHeight += rowSpanRemainingHeight;\n }\n return rowHeight;\n };\n return PdfGridRow;\n}());\nexport { PdfGridRow };\n/**\n * `PdfGridRowCollection` class provides access to an ordered, strongly typed collection of 'PdfGridRow' objects.\n * @private\n */\nvar PdfGridRowCollection = /** @class */ (function () {\n // Constructor\n /**\n * Initializes a new instance of the `PdfGridRowCollection` class with the parent grid.\n * @private\n */\n function PdfGridRowCollection(grid) {\n this.rows = [];\n this.grid = grid;\n }\n Object.defineProperty(PdfGridRowCollection.prototype, \"count\", {\n //Properties\n /**\n * Gets the number of header in the `PdfGrid`.[Read-Only].\n * @private\n */\n get: function () {\n return this.rows.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRowCollection.prototype, \"rowCollection\", {\n //Implementation\n /**\n * Return the row collection of the `grid`.\n * @private\n */\n get: function () {\n return this.rows;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowCollection.prototype.addRow = function (arg) {\n if (typeof arg === 'undefined') {\n var temprow = new PdfGridRow(this.grid);\n this.addRow(temprow);\n return temprow;\n }\n else {\n arg.style.setBackgroundBrush(this.grid.style.backgroundBrush);\n arg.style.setFont(this.grid.style.font);\n arg.style.setTextBrush(this.grid.style.textBrush);\n arg.style.setTextPen(this.grid.style.textPen);\n if (arg.cells.count === 0) {\n for (var i = 0; i < this.grid.columns.count; i++) {\n arg.cells.add(new PdfGridCell());\n }\n }\n this.rows.push(arg);\n }\n };\n /**\n * Return the row by index.\n * @private\n */\n PdfGridRowCollection.prototype.getRow = function (index) {\n return this.rows[index];\n };\n return PdfGridRowCollection;\n}());\nexport { PdfGridRowCollection };\n/**\n * `PdfGridHeaderCollection` class provides customization of the settings for the header.\n * @private\n */\nvar PdfGridHeaderCollection = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfGridHeaderCollection` class with the parent grid.\n * @private\n */\n function PdfGridHeaderCollection(grid) {\n /**\n * The array to store the `rows` of the grid header.\n * @private\n */\n this.rows = [];\n this.grid = grid;\n this.rows = [];\n }\n //Properties\n /**\n * Gets a 'PdfGridRow' object that represents the `header` row in a 'PdfGridHeaderCollection' control.[Read-Only].\n * @private\n */\n PdfGridHeaderCollection.prototype.getHeader = function (index) {\n // if (index < 0 || index >= Count) {\n // throw new IndexOutOfRangeException();\n // }\n return (this.rows[index]);\n };\n Object.defineProperty(PdfGridHeaderCollection.prototype, \"count\", {\n /**\n * Gets the `number of header` in the 'PdfGrid'.[Read-Only]\n * @private\n */\n get: function () {\n return this.rows.length;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridHeaderCollection.prototype.add = function (arg) {\n if (typeof arg === 'number') {\n var row = void 0;\n for (var i = 0; i < arg; i++) {\n row = new PdfGridRow(this.grid);\n for (var j = 0; j < this.grid.columns.count; j++) {\n row.cells.add(new PdfGridCell());\n }\n this.rows.push(row);\n }\n return this.rows;\n }\n else {\n this.rows.push(arg);\n }\n };\n PdfGridHeaderCollection.prototype.indexOf = function (row) {\n return this.rows.indexOf(row);\n };\n return PdfGridHeaderCollection;\n}());\nexport { PdfGridHeaderCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfGrid.ts class for EJ2-PDF\n */\nimport { PdfGridColumnCollection } from './pdf-grid-column';\nimport { PdfGridRowCollection, PdfGridHeaderCollection } from './pdf-grid-row';\nimport { RectangleF, SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfLayoutElement } from './../../graphics/figures/layout-element';\nimport { PdfLayoutResult, PdfLayoutFormat } from './../../graphics/figures/base/element-layouter';\nimport { PdfBorders } from './styles/pdf-borders';\nimport { PdfGridStyle } from './styles/style';\nimport { PdfLayoutType } from './../../graphics/figures/enum';\nimport { PdfHorizontalOverflowType } from './styles/style';\nimport { TemporaryDictionary } from './../../collections/object-object-pair/dictionary';\nimport { PdfStringFormat } from './../../graphics/fonts/pdf-string-format';\n/**\n * `PdfGridLayoutFormat` class represents a flexible grid that consists of columns and rows.\n */\nvar PdfGridLayoutFormat = /** @class */ (function (_super) {\n __extends(PdfGridLayoutFormat, _super);\n /**\n * Initializes a new instance of the `PdfGridLayoutFormat` class.\n * @private\n */\n function PdfGridLayoutFormat(baseFormat) {\n var _this = this;\n if (typeof baseFormat === 'undefined') {\n _this = _super.call(this) || this;\n }\n else {\n _this = _super.call(this, baseFormat) || this;\n }\n return _this;\n }\n return PdfGridLayoutFormat;\n}(PdfLayoutFormat));\nexport { PdfGridLayoutFormat };\nvar PdfGrid = /** @class */ (function (_super) {\n __extends(PdfGrid, _super);\n //constructor\n /**\n * Initialize a new instance for `PdfGrid` class.\n * @private\n */\n function PdfGrid() {\n var _this = _super.call(this) || this;\n /**\n * @hidden\n * @private\n */\n _this.gridSize = new SizeF(0, 0);\n /**\n * @hidden\n * @private\n */\n _this.isRearranged = false;\n /**\n * @hidden\n * @private\n */\n _this.pageBounds = new RectangleF();\n /**\n * @hidden\n * @private\n */\n _this.listOfNavigatePages = [];\n /**\n * @hidden\n * @private\n */\n _this.flag = true;\n /**\n * @hidden\n * @private\n */\n _this.columnRanges = [];\n /**\n * @hidden\n * @private\n */\n _this.currentLocation = new PointF(0, 0);\n /**\n * @hidden\n * @private\n */\n _this.breakRow = true;\n return _this;\n }\n Object.defineProperty(PdfGrid.prototype, \"raiseBeginCellDraw\", {\n //Properties\n /**\n * Gets a value indicating whether the `start cell layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.beginCellDraw !== 'undefined' && typeof this.beginCellDraw !== null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"raiseEndCellDraw\", {\n /**\n * Gets a value indicating whether the `end cell layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.endCellDraw !== 'undefined' && typeof this.endCellDraw !== null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"raiseBeginPageLayout\", {\n /**\n * Gets a value indicating whether the `start page layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.beginPageLayout !== 'undefined');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"raiseEndPageLayout\", {\n /**\n * Gets a value indicating whether the `ending page layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.endPageLayout !== 'undefined');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"repeatHeader\", {\n /**\n * Gets or sets a value indicating whether to `repeat header`.\n * @private\n */\n get: function () {\n if (this.bRepeatHeader == null || typeof this.bRepeatHeader === 'undefined') {\n this.bRepeatHeader = false;\n }\n return this.bRepeatHeader;\n },\n set: function (value) {\n this.bRepeatHeader = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"allowRowBreakAcrossPages\", {\n /**\n * Gets or sets a value indicating whether to split or cut rows that `overflow a page`.\n * @private\n */\n get: function () {\n return this.breakRow;\n },\n set: function (value) {\n this.breakRow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"columns\", {\n /**\n * Gets the `column` collection of the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridColumns == null || typeof this.gridColumns === 'undefined') {\n this.gridColumns = new PdfGridColumnCollection(this);\n }\n return this.gridColumns;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"rows\", {\n /**\n * Gets the `row` collection from the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridRows == null) {\n this.gridRows = new PdfGridRowCollection(this);\n }\n return this.gridRows;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"headers\", {\n /**\n * Gets the `headers` collection from the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridHeaders == null || typeof this.gridHeaders === 'undefined') {\n this.gridHeaders = new PdfGridHeaderCollection(this);\n }\n return this.gridHeaders;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"initialWidth\", {\n /**\n * Indicating `initial width` of the page.\n * @private\n */\n get: function () {\n return this.gridInitialWidth;\n },\n set: function (value) {\n this.gridInitialWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"style\", {\n /**\n * Gets or sets the `grid style`.\n * @private\n */\n get: function () {\n if (this.gridStyle == null) {\n this.gridStyle = new PdfGridStyle();\n }\n return this.gridStyle;\n },\n set: function (value) {\n if (this.gridStyle == null) {\n this.gridStyle = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"isPageWidth\", {\n /**\n * Gets a value indicating whether the grid column width is considered to be `page width`.\n * @private\n */\n get: function () {\n return this.pageWidth;\n },\n set: function (value) {\n this.pageWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"isChildGrid\", {\n /**\n * Gets or set if grid `is nested grid`.\n * @private\n */\n get: function () {\n return this.childGrid;\n },\n set: function (value) {\n this.childGrid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"size\", {\n /**\n * Gets the `size`.\n * @private\n */\n get: function () {\n if (this.gridSize.width === 0 && this.gridSize.height === 0) {\n this.gridSize = this.measure();\n return this.gridSize;\n }\n else {\n return this.gridSize;\n }\n },\n set: function (value) {\n this.gridSize = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfGrid.prototype.draw = function (arg1, arg2, arg3, arg4) {\n if (arg2 instanceof PointF && typeof arg2.width === 'undefined' && typeof arg3 === 'undefined') {\n return this.drawHelper(arg1, arg2.x, arg2.y);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'undefined') {\n return this.drawHelper(arg1, arg2, arg3, null);\n }\n else if (arg2 instanceof RectangleF && typeof arg2.width !== 'undefined' && typeof arg3 === 'undefined') {\n return this.drawHelper(arg1, arg2, null);\n }\n else if (arg2 instanceof PointF && typeof arg2.width === 'undefined' && arg3 instanceof PdfLayoutFormat) {\n return this.drawHelper(arg1, arg2.x, arg2.y, arg3);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'number' && (arg4 instanceof PdfLayoutFormat || arg4 == null)) {\n var width = (arg1.graphics.clientSize.width - arg2);\n var layoutRectangle = new RectangleF(arg2, arg3, width, 0);\n return this.drawHelper(arg1, layoutRectangle, arg4);\n }\n else if (arg2 instanceof RectangleF && typeof arg2.width !== 'undefined' && typeof arg3 === 'boolean') {\n return this.drawHelper(arg1, arg2, null);\n }\n else {\n return this.drawHelper(arg1, arg2, arg3);\n }\n };\n /**\n * `measures` this instance.\n * @private\n */\n PdfGrid.prototype.measure = function () {\n var height = 0;\n var width = this.columns.width;\n for (var i = 0; i < this.headers.count; i++) {\n var row = this.headers.getHeader(i);\n height += row.height;\n }\n for (var i = 0; i < this.rows.count; i++) {\n var row = this.rows.getRow(i);\n height += row.height;\n }\n return new SizeF(width, height);\n };\n PdfGrid.prototype.layout = function (param, isGridLayouter) {\n if (typeof isGridLayouter === 'undefined') {\n this.setSpan();\n this.layoutFormat = param.format;\n this.gridLocation = param.bounds;\n var result = this.layout(param, true);\n return result;\n }\n else {\n return this.layoutInternal(param);\n }\n };\n PdfGrid.prototype.setSpan = function () {\n var colSpan;\n var rowSpan = 1;\n var currentCellIndex;\n var currentRowIndex = 0;\n var rowCount = this.headers.count;\n for (var i = 0; i < rowCount; i++) {\n var row = this.headers.getHeader(i);\n var colCount = row.cells.count;\n for (var j = 0; j < colCount; j++) {\n var cell = row.cells.getCell(j);\n //Skip setting span map for already coverted rows/columns.\n if (!cell.isCellMergeContinue && !cell.isRowMergeContinue && (cell.columnSpan > 1 || cell.rowSpan > 1)) {\n if (cell.columnSpan + j > row.cells.count) {\n throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n }\n if (cell.rowSpan + i > this.headers.count) {\n throw new Error('Invalid span specified at Header ' + j.toString() + ' column ' + i.toString());\n }\n // if (this.rows.count !== 0 && cell.rowSpan + i > this.rows.count) {\n // throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n // }\n if (cell.columnSpan > 1 && cell.rowSpan > 1) {\n colSpan = cell.columnSpan;\n rowSpan = cell.rowSpan;\n currentCellIndex = j;\n currentRowIndex = i;\n cell.isCellMergeStart = true;\n cell.isRowMergeStart = true;\n //Set Column merges for first row\n while (colSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n row.cells.getCell(currentCellIndex).isRowMergeContinue = true;\n row.cells.getCell(currentCellIndex).rowSpan = rowSpan;\n colSpan--;\n }\n currentCellIndex = j;\n colSpan = cell.columnSpan;\n //Set Row Merges and column merges foreach subsequent rows.\n while (rowSpan > 1) {\n currentRowIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n rowSpan--;\n while (colSpan > 1) {\n currentCellIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isCellMergeContinue = true;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n colSpan--;\n }\n colSpan = cell.columnSpan;\n currentCellIndex = j;\n }\n }\n else if (cell.columnSpan > 1 && cell.rowSpan === 1) {\n colSpan = cell.columnSpan;\n currentCellIndex = j;\n cell.isCellMergeStart = true;\n //Set Column merges.\n while (colSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n colSpan--;\n }\n }\n else if (cell.columnSpan === 1 && cell.rowSpan > 1) {\n rowSpan = cell.rowSpan;\n currentRowIndex = i;\n //Set row Merges.\n while (rowSpan > 1) {\n currentRowIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n rowSpan--;\n }\n }\n }\n }\n }\n };\n /**\n * Gets the `format`.\n * @private\n */\n PdfGrid.prototype.getFormat = function (format) {\n var f = format;\n return f;\n };\n /**\n * `Layouts` the element.\n * @private\n */\n PdfGrid.prototype.layoutInternal = function (param) {\n this.initialWidth = param.bounds.width;\n var format = this.getFormat(param.format);\n this.currentPage = param.page;\n if (this.currentPage !== null) {\n var pageHeight = this.currentPage.getClientSize().height;\n var pageWidth = this.currentPage.getClientSize().width;\n this.currentPageBounds = this.currentPage.getClientSize();\n }\n else {\n throw Error('Can not set page as null');\n }\n this.currentGraphics = this.currentPage.graphics;\n var index = 0;\n index = this.currentGraphics.page.section.indexOf(this.currentGraphics.page);\n this.listOfNavigatePages.push(index);\n this.currentBounds = new RectangleF(new PointF(param.bounds.x, param.bounds.y), this.currentGraphics.clientSize);\n if (this.rows.count !== 0) {\n this.currentBounds.width = (param.bounds.width > 0) ? param.bounds.width :\n (this.currentBounds.width - this.rows.getRow(0).cells.getCell(0).style.borders.left.width / 2);\n }\n else if (this.headers.count !== 0) {\n this.currentBounds.width = param.bounds.width;\n }\n else {\n throw Error('Please add row or header into grid');\n }\n this.startLocation = new PointF(param.bounds.x, param.bounds.y);\n if (param.bounds.height > 0 && !this.isChildGrid) {\n this.currentBounds.height = param.bounds.height;\n }\n this.hType = this.style.horizontalOverflowType;\n if (!this.style.allowHorizontalOverflow) {\n this.measureColumnsWidth(this.currentBounds);\n this.columnRanges.push([0, this.columns.count - 1]);\n }\n else {\n this.measureColumnsWidth();\n this.determineColumnDrawRanges();\n }\n var result = this.layoutOnPage(param);\n return result;\n };\n PdfGrid.prototype.measureColumnsWidth = function (bounds) {\n if (typeof bounds !== 'undefined') {\n var widths = this.columns.getDefaultWidths(bounds.width);\n var tempWidth = this.columns.getColumn(0).width;\n for (var i = 0, count = this.columns.count; i < count; i++) {\n this.columns.getColumn(i).width = widths[i];\n }\n }\n else {\n var widths = [];\n var cellWidth = 0;\n var cellWidths = 0;\n if (this.headers.count > 0) {\n var colCount = this.headers.getHeader(0).cells.count;\n var rowCount = this.headers.count;\n for (var i = 0; i < colCount; i++) {\n cellWidth = 0;\n for (var j = 0; j < rowCount; j++) {\n var rowWidth = Math.min(this.initialWidth, this.headers.getHeader(j).cells.getCell(i).width);\n cellWidth = Math.max(cellWidth, rowWidth);\n }\n widths[i] = cellWidth;\n }\n }\n else {\n var colCount = this.rows.getRow(0).cells.count;\n var rowCount = this.rows.count;\n for (var i = 0; i < colCount; i++) {\n cellWidth = 0;\n for (var j = 0; j < rowCount; j++) {\n var rowWidth = Math.min(this.initialWidth, this.rows.getRow(j).cells.getCell(i).width);\n cellWidth = Math.max(cellWidth, rowWidth);\n }\n widths[i] = cellWidth;\n }\n }\n cellWidth = 0;\n for (var i = 0, colCount = this.columns.count; i < colCount; i++) {\n for (var j = 0, rowCount = this.rows.count; j < rowCount; j++) {\n if (this.rows.getRow(j).cells.getCell(i).columnSpan == 1 || this.rows.getRow(j).cells.getCell(i).value !== null || this.rows.getRow(j).cells.getCell(i).rowSpan >= 1) {\n if (this.rows.getRow(j).cells.getCell(i).value !== null &&\n !this.rows.getRow(j).grid.style.allowHorizontalOverflow) {\n var value = this.rows.getRow(j).grid.style.cellPadding.right +\n this.rows.getRow(j).grid.style.cellPadding.left\n + this.rows.getRow(j).cells.getCell(i).style.borders.left.width / 2\n + this.gridLocation.x;\n this.rows.getRow(j).cells.getCell(i).value.initialWidth = this.initialWidth - value;\n }\n var rowWidth = 0;\n var internalWidth = this.rows.getRow(j).cells.getCell(i).width;\n internalWidth += this.rows.getRow(j).cells.getCell(i).style.borders.left.width;\n internalWidth += this.rows.getRow(j).cells.getCell(i).style.borders.right.width;\n var internalHeight = this.rows.getRow(j).cells.getCell(i).height;\n internalHeight += (this.rows.getRow(j).cells.getCell(i).style.borders.top.width);\n internalHeight += (this.rows.getRow(j).cells.getCell(i).style.borders.bottom.width);\n var isCorrectWidth = (internalWidth + this.gridLocation.x) > this.currentGraphics.clientSize.width;\n var isCorrectHeight = (internalHeight + this.gridLocation.y) > this.currentGraphics.clientSize.height;\n if (isCorrectWidth || isCorrectHeight) {\n throw Error('Image size exceeds client size of the page. Can not insert this image');\n }\n rowWidth = Math.min(this.initialWidth, this.rows.getRow(j).cells.getCell(i).width);\n cellWidth = Math.max(widths[i], Math.max(cellWidth, rowWidth));\n cellWidth = Math.max(this.columns.getColumn(i).width, cellWidth);\n }\n }\n widths[i] = cellWidth;\n cellWidth = 0;\n }\n for (var i = 0, count = this.columns.count; i < count; i++) {\n this.columns.getColumn(i).width = widths[i];\n }\n }\n };\n /* tslint:enable */\n /**\n * `Determines the column draw ranges`.\n * @private\n */\n PdfGrid.prototype.determineColumnDrawRanges = function () {\n var startColumn = 0;\n var endColumn = 0;\n var cellWidths = 0;\n var availableWidth = this.currentGraphics.clientSize.width - this.currentBounds.x;\n for (var i = 0; i < this.columns.count; i++) {\n cellWidths += this.columns.getColumn(i).width;\n if (cellWidths >= availableWidth) {\n var subWidths = 0;\n for (var j = startColumn; j <= i; j++) {\n subWidths += this.columns.getColumn(j).width;\n if (subWidths > availableWidth) {\n break;\n }\n endColumn = j;\n }\n this.columnRanges.push([startColumn, endColumn]);\n startColumn = endColumn + 1;\n endColumn = startColumn;\n cellWidths = (endColumn <= i) ? this.columns.getColumn(i).width : 0;\n }\n }\n // if (startColumn !== this.columns.Count) {\n this.columnRanges.push([startColumn, this.columns.count - 1]);\n // }\n };\n /**\n * `Layouts the on page`.\n * @private\n */\n PdfGrid.prototype.layoutOnPage = function (param) {\n /* tslint:disable */\n this.pageBounds.x = param.bounds.x;\n this.pageBounds.y = param.bounds.y;\n this.pageBounds.height = param.bounds.height;\n var format = this.getFormat(param.format);\n var endArgs = null;\n var result = null;\n var layoutedPages = new TemporaryDictionary();\n var startPage = param.page;\n var isParentCell = false;\n var cellBounds = [];\n for (var index = 0; index < this.columnRanges.length; index++) {\n var range = this.columnRanges[index];\n this.cellStartIndex = range[0];\n this.cellEndIndex = range[1];\n var returnObject = this.raiseBeforePageLayout(this.currentPage, this.currentBounds, this.currentRowIndex);\n this.currentBounds = returnObject.currentBounds;\n this.currentRowIndex = returnObject.currentRowIndex;\n // if (returnObject.returnValue) {\n // result = new PdfGridLayoutResult(this.currentPage, this.currentBounds);\n // break;\n // }\n //Draw Headers.\n var drawHeader = void 0;\n for (var i_1 = 0; i_1 < this.headers.count; i_1++) {\n var row = this.headers.getHeader(i_1);\n var headerHeight = this.currentBounds.y;\n // RowLayoutResult\n var headerResult = this.drawRow(row);\n // if (headerHeight === this.currentBounds.y) {\n // drawHeader = true;\n // if (PdfGrid.repeatRowIndex === -1) {\n // PdfGrid.repeatRowIndex = this.rows.getRow.indexOf(row);\n // }\n // } else {\n drawHeader = false;\n // }\n }\n var i = 0;\n var length_1 = this.rows.count;\n var repeatRow = void 0;\n var startingHeight = 0;\n var flag = true;\n //Here is to draw parent Grid and Cells\n cellBounds = [];\n //Draw row by row with the specified cell range.\n for (var j = 0; j < this.rows.count; j++) {\n var row = this.rows.getRow(j);\n i++;\n this.currentRowIndex = i - 1;\n var originalHeight = this.currentBounds.y;\n startPage = this.currentPage;\n PdfGrid.repeatRowIndex = -1;\n var rowResult = this.drawRow(row);\n cellBounds.push(rowResult.bounds.width);\n //if height remains same, it is understood that row is not drawn in the page\n if (originalHeight === this.currentBounds.y) {\n repeatRow = true;\n PdfGrid.repeatRowIndex = this.rows.rowCollection.indexOf(row);\n }\n else {\n repeatRow = false;\n PdfGrid.repeatRowIndex = -1;\n }\n if (!rowResult.isFinish && startPage !== null && format.layout !== PdfLayoutType.OnePage && repeatRow) {\n // During pagination, cell position is maintained here.\n this.startLocation.x = this.currentBounds.x;\n var isAddNextPage = false;\n this.currentPage = this.getNextPage(format);\n if ((param.format !== null) && !param.format.usePaginateBounds && param.bounds !== null &&\n param.bounds.height > 0 && !this.isChildGrid) {\n this.currentBounds.height = param.bounds.height;\n }\n if ((param.format !== null) && !param.format.usePaginateBounds && param.bounds !== null &&\n param.bounds.y > 0 && !this.isChildGrid) {\n this.currentBounds.y = param.bounds.y;\n }\n this.startLocation.y = this.currentBounds.y;\n if ((format.paginateBounds.x === format.paginateBounds.y) &&\n (format.paginateBounds.y === format.paginateBounds.height) &&\n (format.paginateBounds.height === format.paginateBounds.width) && (format.paginateBounds.width === 0)) {\n this.currentBounds.x += this.startLocation.x;\n }\n if (this.currentBounds.x === PdfBorders.default.left.width / 2) {\n this.currentBounds.y += this.startLocation.x;\n }\n if (this.repeatHeader) {\n for (var i_2 = 0; i_2 < this.headers.count; i_2++) {\n var header = this.headers.getHeader(i_2);\n this.drawRow(header);\n }\n }\n this.drawRow(row);\n if (this.currentPage !== null && !layoutedPages.containsKey(this.currentPage)) {\n layoutedPages.add(this.currentPage, range);\n }\n }\n }\n var isPdfGrid = false;\n var maximumCellBoundsWidth = 0;\n if (cellBounds.length > 0) {\n maximumCellBoundsWidth = cellBounds[0];\n }\n var largeNavigatePage = [[0, 0]];\n if (!isPdfGrid && cellBounds.length > 0) {\n for (var c = 0; c < i - 1; c++) {\n if (maximumCellBoundsWidth < cellBounds[c]) {\n maximumCellBoundsWidth = cellBounds[c];\n }\n }\n this.rowLayoutBoundsWidth = maximumCellBoundsWidth;\n }\n else {\n this.rowLayoutBoundsWidth = largeNavigatePage[0][1];\n }\n if (this.columnRanges.length - 1 !== index && this.columnRanges.length > 1 && format.layout !== PdfLayoutType.OnePage) {\n this.currentPage = this.getNextPage(format);\n if ((format.paginateBounds.x === format.paginateBounds.y) && (format.paginateBounds.y === format.paginateBounds.height)\n && (format.paginateBounds.height === format.paginateBounds.width) && (format.paginateBounds.width === 0)) {\n this.currentBounds.x += this.startLocation.x;\n this.currentBounds.y += this.startLocation.y;\n // this.currentBounds.height = this.pageBounds.height;\n }\n }\n }\n result = this.getLayoutResult();\n if (this.style.allowHorizontalOverflow && this.style.horizontalOverflowType == PdfHorizontalOverflowType.NextPage) {\n this.reArrangePages(layoutedPages);\n }\n this.raisePageLayouted(result);\n return result;\n }; /* tslint:enable */\n /**\n * Gets the `next page`.\n * @private\n */\n PdfGrid.prototype.getNextPage = function (format) {\n var section = this.currentPage.section;\n var nextPage = null;\n var index = section.indexOf(this.currentPage);\n this.flag = false;\n if (index === section.count - 1) {\n nextPage = section.add();\n }\n else {\n nextPage = section.getPages()[index + 1];\n }\n this.currentGraphics = nextPage.graphics;\n var pageindex = this.currentGraphics.page.section.indexOf(this.currentGraphics.page);\n if (!(this.listOfNavigatePages.indexOf(pageindex) !== -1)) {\n this.listOfNavigatePages.push(pageindex);\n }\n this.currentBounds = new RectangleF(new PointF(0, 0), nextPage.getClientSize());\n // if ((format.PaginateBounds.x !== format.PaginateBounds.y) && (format.PaginateBounds.y !== format.PaginateBounds.height)\n // && (format.PaginateBounds.height !== format.PaginateBounds.width) && (format.PaginateBounds.width !== 0)) {\n // this.currentBounds.x = format.PaginateBounds.x;\n // this.currentBounds.y = format.PaginateBounds.y;\n // this.currentBounds.height = format.PaginateBounds.height;\n // }\n return nextPage;\n };\n /**\n * Gets the `layout result`.\n * @private\n */\n PdfGrid.prototype.getLayoutResult = function () {\n var bounds;\n /* tslint:disable */\n bounds = new RectangleF(this.startLocation, new SizeF(this.currentBounds.width, this.currentBounds.y - this.startLocation.y));\n /* tslint:enable */\n return new PdfGridLayoutResult(this.currentPage, bounds);\n };\n /**\n * `Recalculate row height` for the split cell to be drawn.\n * @private\n */\n PdfGrid.prototype.ReCalculateHeight = function (row, height) {\n var newHeight = 0.0;\n // for (let i : number = this.cellStartIndex; i <= this.cellEndIndex; i++) {\n // if (!(row.cells.getCell(i).RemainingString === null || row.cells.getCell(i).RemainingString === '' ||\n // typeof row.cells.getCell(i).RemainingString === 'undefined')) {\n // newHeight = Math.max(newHeight, row.cells.getCell(i).MeasureHeight());\n // }\n // }\n return Math.max(height, newHeight);\n };\n /**\n * `Raises BeforePageLayout event`.\n * @private\n */\n PdfGrid.prototype.raiseBeforePageLayout = function (currentPage, currentBounds, currentRow) {\n var cancel = false;\n if (this.raiseBeginPageLayout) {\n var args = new PdfGridBeginPageLayoutEventArgs(currentBounds, currentPage, currentRow);\n this.beginPageLayout(this, args);\n // if (currentBounds !== args.Bounds) {\n // this.isChanged = true;\n // this.currentLocation = new PointF(args.Bounds.x, args.Bounds.y);\n // this.measureColumnsWidth(new RectangleF(new PointF(args.Bounds.x, args.Bounds.y) ,\n // new SizeF(args.Bounds.width + args.Bounds.x ,\n // args.Bounds.height)));\n // }\n cancel = args.cancel;\n currentBounds = args.bounds;\n currentRow = args.startRowIndex;\n }\n return { returnValue: cancel, currentBounds: currentBounds, currentRowIndex: currentRow };\n };\n /**\n * `Raises PageLayout event` if needed.\n * @private\n */\n PdfGrid.prototype.raisePageLayouted = function (result) {\n var args = new PdfGridEndPageLayoutEventArgs(result);\n if (this.raiseEndPageLayout) {\n this.endPageLayout(this, args);\n }\n return args;\n };\n PdfGrid.prototype.drawRow = function (row, result, height) {\n if (typeof result === 'undefined') {\n //.. Check if required space available.\n //.....If the row conains spans which falls through more than one page, then draw the row to next page.\n var result_1 = new RowLayoutResult();\n var rowHeightWithSpan = 0;\n var location_1 = new PointF(0, 0);\n var size = new SizeF(0, 0);\n var isHeader = false;\n if (row.rowSpanExists) {\n var maxSpan = 0;\n var currRowIndex = this.rows.rowCollection.indexOf(row);\n if (currRowIndex === -1) {\n currRowIndex = this.headers.indexOf(row);\n if (currRowIndex !== -1) {\n isHeader = true;\n }\n }\n for (var i = 0; i < row.cells.count; i++) {\n var cell = row.cells.getCell(i);\n maxSpan = Math.max(maxSpan, cell.rowSpan);\n }\n for (var i = currRowIndex; i < currRowIndex + maxSpan; i++) {\n rowHeightWithSpan += (isHeader ? this.headers.getHeader(i).height : this.rows.getRow(i).height);\n }\n var rowMaxHeight = rowHeightWithSpan;\n for (var i = 0; i < row.cells.count; i++) {\n rowMaxHeight = rowMaxHeight > row.cells.getCell(i).height ? rowMaxHeight : row.cells.getCell(i).height;\n }\n var nextRow = this.headers.getHeader(this.headers.indexOf(row) + 1);\n var flag = true;\n for (var i = 0; i < nextRow.cells.count; i++) {\n if (nextRow.cells.getCell(i).value !== '' && nextRow.cells.getCell(i).value !== undefined) {\n flag = false;\n break;\n }\n }\n if ((rowMaxHeight > rowHeightWithSpan) && flag) {\n row.height += (rowMaxHeight - rowHeightWithSpan);\n }\n }\n var calculatedHeight = row.rowBreakHeight > 0.0 ? row.rowBreakHeight : row.height;\n if (this.currentBounds.y + calculatedHeight > this.currentPageBounds.height ||\n this.currentBounds.y + calculatedHeight > (this.currentBounds.height + this.startLocation.y) ||\n this.currentBounds.y + rowHeightWithSpan > this.currentPageBounds.height) {\n // If a row is repeated and still cannot fit in page, proceed draw.\n // if (PdfGrid.repeatRowIndex > -1 && PdfGrid.repeatRowIndex === row.RowIndex) {\n // if (this.AllowRowBreakAcrossPages) {\n // result.IsFinish = true;\n // // this.DrawRowWithBreak(ref result, row, height);\n // } else {\n // result.IsFinish = false;\n // this.drawRow(row, result, height);\n // }\n // } else {\n result_1.isFinish = false;\n // }\n }\n else {\n result_1.isFinish = true;\n this.drawRow(row, result_1, calculatedHeight);\n }\n return result_1;\n }\n else {\n var skipcell = false;\n var location_2 = new PointF(this.currentBounds.x, this.currentBounds.y);\n result.bounds = new RectangleF(location_2, new SizeF(0, 0));\n height = this.ReCalculateHeight(row, height);\n for (var i = this.cellStartIndex; i <= this.cellEndIndex; i++) {\n var cancelSpans = ((i > this.cellEndIndex + 1) && (row.cells.getCell(i).columnSpan > 1));\n // let cancelSpans : boolean = false;\n if (!cancelSpans) {\n for (var j = 1; j < row.cells.getCell(i).columnSpan; j++) {\n row.cells.getCell(i + j).isCellMergeContinue = true;\n }\n }\n var size = new SizeF(this.columns.getColumn(i).width, height);\n // if (size.width > this.currentGraphics.ClientSize.width) {\n // size.width = this.currentGraphics.ClientSize.width;\n // }\n // if (this.IsChildGrid && this.style.AllowHorizontalOverflow) {\n // if (size.width >= this.currentGraphics.ClientSize.width) {\n // size.width -= 2 * this.currentBounds.x;\n // }\n // }\n /* tslint:disable */\n if (!this.CheckIfDefaultFormat(this.columns.getColumn(i).format) &&\n this.CheckIfDefaultFormat(row.cells.getCell(i).stringFormat)) {\n row.cells.getCell(i).stringFormat = this.columns.getColumn(i).format;\n }\n var cellstyle = row.cells.getCell(i).style;\n var tempValue = ((typeof row.cells.getCell(i).value === 'string' &&\n row.cells.getCell(i).value !== null) ? row.cells.getCell(i).value : '');\n row.cells.getCell(i).style = this.RaiseBeforeCellDraw(this.currentGraphics, this.currentRowIndex, i, new RectangleF(location_2, size), tempValue, cellstyle);\n // if (!skipcell) {\n // let stringResult : PdfStringLayoutResult = row.cells.getCell(i).draw(this.currentGraphics, new RectangleF(location, size), cancelSpans);\n var stringResult = row.cells.getCell(i).draw(this.currentGraphics, new RectangleF(location_2, size), cancelSpans);\n if (row.grid.style.allowHorizontalOverflow && (row.cells.getCell(i).columnSpan > this.cellEndIndex || i + row.cells.getCell(i).columnSpan > this.cellEndIndex + 1) && this.cellEndIndex < row.cells.count - 1) {\n row.rowOverflowIndex = this.cellEndIndex;\n }\n if (row.grid.style.allowHorizontalOverflow && (row.rowOverflowIndex > 0 && (row.cells.getCell(i).columnSpan > this.cellEndIndex || i + row.cells.getCell(i).columnSpan > this.cellEndIndex + 1)) && row.cells.getCell(i).columnSpan - this.cellEndIndex + i - 1 > 0) {\n row.cells.getCell(row.rowOverflowIndex + 1).value = stringResult !== null ? (stringResult.remainder !== undefined) ? stringResult.remainder : '' : '';\n row.cells.getCell(row.rowOverflowIndex + 1).stringFormat = row.cells.getCell(i).stringFormat;\n row.cells.getCell(row.rowOverflowIndex + 1).style = row.cells.getCell(i).style;\n row.cells.getCell(row.rowOverflowIndex + 1).columnSpan = row.cells.getCell(i).columnSpan - this.cellEndIndex + i - 1;\n }\n // }\n /* tslint:enable */\n tempValue = ((typeof row.cells.getCell(i).value === 'string' &&\n row.cells.getCell(i).value !== null) ? row.cells.getCell(i).value : '');\n this.RaiseAfterCellDraw(this.currentGraphics, this.currentRowIndex, i, new RectangleF(location_2, size), tempValue, row.cells.getCell(i).style);\n location_2.x += this.columns.getColumn(i).width;\n }\n // if (!row.RowMergeComplete || row.isRowHeightSet) {\n this.currentBounds.y += height;\n // }\n result.bounds = new RectangleF(new PointF(result.bounds.x, result.bounds.y), new SizeF(location_2.x, location_2.y));\n }\n };\n /**\n * Checks if the given format `is default format` or not.\n * @private\n */\n PdfGrid.prototype.CheckIfDefaultFormat = function (format) {\n var defaultFormat = new PdfStringFormat();\n return (format.alignment === defaultFormat.alignment && format.characterSpacing === defaultFormat.characterSpacing &&\n format.clipPath === defaultFormat.clipPath && format.firstLineIndent === defaultFormat.firstLineIndent &&\n format.horizontalScalingFactor === defaultFormat.horizontalScalingFactor &&\n format.lineAlignment === defaultFormat.lineAlignment\n && format.lineLimit === defaultFormat.lineLimit && format.lineSpacing === defaultFormat.lineSpacing &&\n format.measureTrailingSpaces === defaultFormat.measureTrailingSpaces && format.noClip === defaultFormat.noClip &&\n format.paragraphIndent === defaultFormat.paragraphIndent && format.rightToLeft === defaultFormat.rightToLeft &&\n format.subSuperScript === defaultFormat.subSuperScript && format.wordSpacing === defaultFormat.wordSpacing &&\n format.wordWrap === defaultFormat.wordWrap);\n };\n /**\n * `Raises BeforeCellDraw event`.\n * @private\n */\n PdfGrid.prototype.RaiseBeforeCellDraw = function (graphics, rowIndex, cellIndex, bounds, value, style) {\n var args = null;\n if (this.raiseBeginCellDraw) {\n args = new PdfGridBeginCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style);\n this.beginCellDraw(this, args);\n style = args.style;\n }\n return style;\n };\n /**\n * `Raises AfterCellDraw event`.\n * @private\n */\n PdfGrid.prototype.RaiseAfterCellDraw = function (graphics, rowIndex, cellIndex, bounds, value, cellstyle) {\n var args = null;\n if (this.raiseEndCellDraw) {\n args = new PdfGridEndCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, cellstyle);\n this.endCellDraw(this, args);\n }\n };\n /**\n * `Rearranges the pages`.\n * @private\n */\n PdfGrid.prototype.reArrangePages = function (layoutedPages) {\n var document = this.currentPage.document;\n var pages = [];\n var keys = layoutedPages.keys();\n var values = layoutedPages.values();\n for (var i = 0; i < keys.length; i++) {\n var page = keys[i];\n page.section = null;\n pages.push(page);\n document.pages.remove(page);\n }\n /* tslint:disable */\n for (var i = 0; i < layoutedPages.size(); i++) {\n var count = 0;\n for (var j = i, count_1 = (layoutedPages.size() / this.columnRanges.length); j < layoutedPages.size(); j += count_1) {\n var page = pages[j];\n if (document.pages.indexOf(page) === -1) {\n document.pages.add(page);\n }\n }\n }\n /* tslint:enable */\n };\n /**\n * @hidden\n * @private\n */\n PdfGrid.repeatRowIndex = -1;\n return PdfGrid;\n}(PdfLayoutElement));\nexport { PdfGrid };\n/**\n * `GridCellEventArgs` class is alternate for grid events.\n */\nvar GridCellEventArgs = /** @class */ (function () {\n // Constructors\n /**\n * Initialize a new instance for `GridCellEventArgs` class.\n * @private\n */\n function GridCellEventArgs(graphics, rowIndex, cellIndex, bounds, value) {\n this.gridRowIndex = rowIndex;\n this.gridCellIndex = cellIndex;\n this.internalValue = value;\n this.gridBounds = bounds;\n this.pdfGraphics = graphics;\n }\n Object.defineProperty(GridCellEventArgs.prototype, \"rowIndex\", {\n // Properties\n /**\n * Gets the value of current `row index`.\n * @private\n */\n get: function () {\n return this.gridRowIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"cellIndex\", {\n /**\n * Gets the value of current `cell index`.\n * @private\n */\n get: function () {\n return this.gridCellIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"value\", {\n /**\n * Gets the actual `value` of current cell.\n * @private\n */\n get: function () {\n return this.internalValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"bounds\", {\n /**\n * Gets the `bounds` of current cell.\n * @private\n */\n get: function () {\n return this.gridBounds;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"graphics\", {\n /**\n * Gets the instance of `current graphics`.\n * @private\n */\n get: function () {\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n return GridCellEventArgs;\n}());\nexport { GridCellEventArgs };\n/**\n * `PdfGridBeginCellDrawEventArgs` class is alternate for begin cell draw events.\n */\nvar PdfGridBeginCellDrawEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridBeginCellDrawEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `StartCellLayoutEventArgs` class.\n * @private\n */\n function PdfGridBeginCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style) {\n var _this = _super.call(this, graphics, rowIndex, cellIndex, bounds, value) || this;\n _this.style = style;\n return _this;\n }\n Object.defineProperty(PdfGridBeginCellDrawEventArgs.prototype, \"skip\", {\n // Properties\n /**\n * Gets or sets a value indicating whether the value of this cell should be `skipped`.\n * @private\n */\n get: function () {\n return this.bSkip;\n },\n set: function (value) {\n this.bSkip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridBeginCellDrawEventArgs.prototype, \"style\", {\n /**\n * Gets or sets a `style` value of the cell.\n * @private\n */\n get: function () {\n return this.cellStyle;\n },\n set: function (value) {\n this.cellStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridBeginCellDrawEventArgs;\n}(GridCellEventArgs));\nexport { PdfGridBeginCellDrawEventArgs };\n/**\n * `PdfGridEndCellDrawEventArgs` class is alternate for end cell draw events.\n */\nvar PdfGridEndCellDrawEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridEndCellDrawEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `PdfGridEndCellLayoutEventArgs` class.\n * @private\n */\n function PdfGridEndCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style) {\n var _this = _super.call(this, graphics, rowIndex, cellIndex, bounds, value) || this;\n _this.cellStyle = style;\n return _this;\n }\n Object.defineProperty(PdfGridEndCellDrawEventArgs.prototype, \"style\", {\n // Propertise\n /**\n * Get the `PdfGridCellStyle`.\n * @private\n */\n get: function () {\n return this.cellStyle;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridEndCellDrawEventArgs;\n}(GridCellEventArgs));\nexport { PdfGridEndCellDrawEventArgs };\n/**\n * `PdfGridCancelEventArgs` class is alternate for cancel events.\n */\nvar PdfCancelEventArgs = /** @class */ (function () {\n function PdfCancelEventArgs() {\n }\n Object.defineProperty(PdfCancelEventArgs.prototype, \"cancel\", {\n // Properties\n /**\n * Gets and Sets the value of `cancel`.\n * @private\n */\n get: function () {\n return this.isCancel;\n },\n set: function (value) {\n this.isCancel = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfCancelEventArgs;\n}());\nexport { PdfCancelEventArgs };\n/**\n * `BeginPageLayoutEventArgs` class is alternate for begin page layout events.\n */\nvar BeginPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(BeginPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `BeginPageLayoutEventArgs` class with the specified rectangle and page.\n * @private\n */\n function BeginPageLayoutEventArgs(bounds, page) {\n var _this = _super.call(this) || this;\n _this.bounds = bounds;\n _this.pdfPage = page;\n return _this;\n }\n Object.defineProperty(BeginPageLayoutEventArgs.prototype, \"bounds\", {\n // Properties\n /**\n * Gets or sets value that indicates the lay outing `bounds` on the page.\n * @private\n */\n get: function () {\n return this.cellBounds;\n },\n set: function (value) {\n this.cellBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BeginPageLayoutEventArgs.prototype, \"page\", {\n /**\n * Gets the `page` where the lay outing should start.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n return BeginPageLayoutEventArgs;\n}(PdfCancelEventArgs));\nexport { BeginPageLayoutEventArgs };\n/**\n * `EndPageLayoutEventArgs` class is alternate for end page layout events.\n */\nvar EndPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(EndPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `EndPageLayoutEventArgs` class. with the specified 'PdfLayoutResult'.\n * @private\n */\n function EndPageLayoutEventArgs(result) {\n var _this = _super.call(this) || this;\n _this.layoutResult = result;\n return _this;\n }\n Object.defineProperty(EndPageLayoutEventArgs.prototype, \"result\", {\n // Properties\n /**\n * Gets the lay outing `result` of the page.\n * @private\n */\n get: function () {\n return this.layoutResult;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EndPageLayoutEventArgs.prototype, \"nextPage\", {\n /**\n * Gets or sets a value indicating the `next page` where the element should be layout.\n * @private\n */\n get: function () {\n return this.nextPdfPage;\n },\n set: function (value) {\n this.nextPdfPage = value;\n },\n enumerable: true,\n configurable: true\n });\n return EndPageLayoutEventArgs;\n}(PdfCancelEventArgs));\nexport { EndPageLayoutEventArgs };\n/**\n * `PdfGridBeginPageLayoutEventArgs` class is alternate for begin page layout events.\n */\nvar PdfGridBeginPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridBeginPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initialize a new instance of `PdfGridBeginPageLayoutEventArgs` class.\n * @private\n */\n function PdfGridBeginPageLayoutEventArgs(bounds, page, startRow) {\n var _this = _super.call(this, bounds, page) || this;\n _this.startRow = startRow;\n return _this;\n }\n Object.defineProperty(PdfGridBeginPageLayoutEventArgs.prototype, \"startRowIndex\", {\n // Properties\n /**\n * Gets the `start row index`.\n * @private\n */\n get: function () {\n return this.startRow;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridBeginPageLayoutEventArgs;\n}(BeginPageLayoutEventArgs));\nexport { PdfGridBeginPageLayoutEventArgs };\n/**\n * `PdfGridEndPageLayoutEventArgs` class is alternate for begin page layout events.\n */\nvar PdfGridEndPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridEndPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initialize a new instance of `PdfGridEndPageLayoutEventArgs` class.\n * @private\n */\n function PdfGridEndPageLayoutEventArgs(result) {\n return _super.call(this, result) || this;\n }\n return PdfGridEndPageLayoutEventArgs;\n}(EndPageLayoutEventArgs));\nexport { PdfGridEndPageLayoutEventArgs };\n/**\n * `RowLayoutResult` class to store layout result of rows.\n */\nvar RowLayoutResult = /** @class */ (function () {\n //Constructors\n /**\n * Initializes a new instance of the `RowLayoutResult` class.\n * @private\n */\n function RowLayoutResult() {\n this.layoutedBounds = new RectangleF(0, 0, 0, 0);\n }\n Object.defineProperty(RowLayoutResult.prototype, \"isFinish\", {\n /**\n * Gets or sets a value indicating whether this instance `is finish`.\n * @private\n */\n get: function () {\n return this.bIsFinished;\n },\n set: function (value) {\n this.bIsFinished = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RowLayoutResult.prototype, \"bounds\", {\n /**\n * Gets or sets the `bounds`.\n * @private\n */\n get: function () {\n return this.layoutedBounds;\n },\n set: function (value) {\n this.layoutedBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n return RowLayoutResult;\n}());\nexport { RowLayoutResult };\n/**\n * `PdfGridLayoutResult` class represents the results of the PdfGrid including bounds and resultant page.\n */\nvar PdfGridLayoutResult = /** @class */ (function (_super) {\n __extends(PdfGridLayoutResult, _super);\n // Constructor\n /**\n * Initializes a new instance of the `PdfGridLayoutResult` class with the current page and bounds.\n * @private\n */\n function PdfGridLayoutResult(page, bounds) {\n return _super.call(this, page, bounds) || this;\n }\n return PdfGridLayoutResult;\n}(PdfLayoutResult));\nexport { PdfGridLayoutResult };\n","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 } from '../common/utils/helper';\nimport { textElement, RectOption, createSvg, firstToLowerCase, titlePositionX } from '../common/utils/helper';\nimport { getSeriesColor, Theme, getThemeColor } from '../common/model/theme';\nimport { Margin, Border, ChartArea, Font, Indexes, TooltipSettings } from '../common/model/base';\nimport { Row, Column, Axis } from './axis/axis';\nimport { CartesianAxisLayoutPanel } from './axis/cartesian-panel';\nimport { 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 var isCalculateStacking = false;\n var series;\n for (var i = 0, len = this.visibleSeries.length; i < len; i++) {\n series = this.visibleSeries[i];\n series.position = series.rectCount = undefined;\n if (((series.type.indexOf('Stacking') !== -1) || (series.drawType.indexOf('Stacking') !== -1\n && this.chartAreaType === 'PolarRadar')) && !isCalculateStacking) {\n series.calculateStackedValue(series.type.indexOf('100') > -1, this);\n isCalculateStacking = true;\n }\n }\n this.calculateBounds();\n this.renderElements();\n var element = document.getElementById('chartmeasuretext');\n if (element) {\n element.remove();\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 */\n Chart.prototype.renderAxes = function () {\n this.yAxisElements = this.renderer.createGroup({ id: this.element.id + 'yAxisCollection' });\n var axisElement;\n if (this.rows.length > 0 && this.columns.length > 0) {\n axisElement = this.chartAxisLayoutPanel.renderAxes();\n }\n if (this.stripLineModule) {\n this.stripLineModule.renderStripLine(this, 'Behind', this.axisCollections);\n }\n return axisElement;\n };\n /**\n * To render the legend\n */\n Chart.prototype.renderLegend = function () {\n if (this.legendModule && this.legendModule.legendCollections.length) {\n this.legendModule.renderLegend(this, this.legendSettings, this.legendModule.legendBounds);\n }\n this.element.appendChild(this.svgObject);\n };\n /**\n * To set the left and top position for data label template for center aligned chart\n */\n Chart.prototype.setSecondaryElementPosition = function () {\n var element = getElement(this.element.id + '_Secondary_Element');\n if (!element) {\n return;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n element.style.left = Math.max(svgRect.left - rect.left, 0) + 'px';\n element.style.top = Math.max(svgRect.top - rect.top, 0) + 'px';\n };\n Chart.prototype.initializeModuleElements = function () {\n this.dataLabelCollections = [];\n this.seriesElements = this.renderer.createGroup({ id: this.element.id + 'SeriesCollection' });\n if (this.indicators.length) {\n this.indicatorElements = this.renderer.createGroup({ id: this.element.id + 'IndicatorCollection' });\n }\n if (this.hasTrendlines()) {\n this.trendLineElements = this.renderer.createGroup({ id: this.element.id + 'TrendLineCollection' });\n }\n this.dataLabelElements = this.renderer.createGroup({ id: this.element.id + 'DataLabelCollection' });\n };\n Chart.prototype.hasTrendlines = function () {\n var isTrendline;\n for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n var series = _a[_i];\n isTrendline = series.trendlines.length ? true : false;\n if (isTrendline) {\n break;\n }\n }\n return isTrendline;\n };\n Chart.prototype.renderSeriesElements = function (axisElement) {\n // Initialize the series elements values\n this.initializeModuleElements();\n var tooltipDiv = this.createElement('div');\n tooltipDiv.id = this.element.id + '_Secondary_Element';\n tooltipDiv.setAttribute('style', 'position: relative');\n this.element.appendChild(tooltipDiv);\n // For userInteraction\n if (this.tooltip.enable) {\n this.svgObject.appendChild(this.renderer.createGroup({ id: this.element.id + '_UserInteraction', style: 'pointer-events:none;' }));\n }\n if (this.rows.length > 0 && this.columns.length > 0) {\n this.initializeIndicator();\n this.initializeTrendLine();\n this.renderSeries();\n this.appendElementsAfterSeries(axisElement);\n }\n };\n Chart.prototype.renderSeries = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.visible) {\n findClipRect(item);\n item.renderSeries(this, item.index);\n }\n }\n var clipRect = this.renderer.drawClipPath({\n 'id': this.element.id + '_ChartAreaClipRect_',\n 'x': this.chartAxisLayoutPanel.seriesClipRect.x,\n 'y': this.chartAxisLayoutPanel.seriesClipRect.y,\n 'width': this.chartAxisLayoutPanel.seriesClipRect.width,\n 'height': this.chartAxisLayoutPanel.seriesClipRect.height,\n 'fill': 'transparent',\n 'stroke-width': 1,\n 'stroke': 'Gray'\n });\n this.seriesElements.appendChild(clipRect);\n this.svgObject.appendChild(this.seriesElements);\n };\n Chart.prototype.initializeIndicator = function () {\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n if (this[firstToLowerCase(indicator.type) + 'IndicatorModule']) {\n this[firstToLowerCase(indicator.type) + 'IndicatorModule'].createIndicatorElements(this, indicator, indicator.index);\n }\n }\n if (this.indicatorElements) {\n this.svgObject.appendChild(this.indicatorElements);\n }\n };\n Chart.prototype.initializeTrendLine = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.trendlines.length) {\n this.trendLineModule.getTrendLineElements(series, this);\n }\n }\n if (this.trendLineElements) {\n this.svgObject.appendChild(this.trendLineElements);\n }\n };\n Chart.prototype.appendElementsAfterSeries = function (axisElement) {\n if (this.chartAreaType === 'PolarRadar') {\n this.svgObject.appendChild(this.yAxisElements);\n }\n this.svgObject.appendChild(axisElement);\n if (this.zoomModule && this.zoomSettings.enableScrollbar && this.scrollElement.childElementCount) {\n getElement(this.element.id + '_Secondary_Element').appendChild(this.scrollElement);\n }\n if (this.stripLineModule) {\n this.stripLineModule.renderStripLine(this, 'Over', this.axisCollections);\n }\n if (!this.tooltip.enable) {\n this.svgObject.appendChild(this.renderer.createGroup({ id: this.element.id + '_UserInteraction', style: 'pointer-events:none;' }));\n }\n };\n Chart.prototype.applyZoomkit = function () {\n if (this.zoomModule && this.zoomModule.isZoomed && (!this.zoomSettings.enablePan || this.zoomModule.performedUI)) {\n this.zoomModule.applyZoomToolkit(this, this.axisCollections);\n }\n };\n Chart.prototype.renderAnnotation = function () {\n if (this.annotationModule) {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n };\n Chart.prototype.performSelection = function () {\n var selectedDataIndexes = [];\n if (this.selectionModule) {\n selectedDataIndexes = extend([], this.selectionModule.selectedDataIndexes, null, true);\n this.selectionModule.invokeSelection(this);\n }\n if (selectedDataIndexes.length > 0) {\n this.selectionModule.selectedDataIndexes = selectedDataIndexes;\n this.selectionModule.redrawSelection(this, this.selectionMode);\n }\n };\n Chart.prototype.processData = function (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 padding = 15;\n var left = margin.left;\n var width = this.availableSize.width - left - margin.right - this.border.width;\n this.titleCollection = [];\n if (this.title) {\n this.titleCollection = getTitle(this.title, this.titleStyle, width);\n titleHeight = (measureText(this.title, this.titleStyle).height * this.titleCollection.length) + padding;\n }\n var top = margin.top + titleHeight + this.chartArea.border.width / 2;\n var height = this.availableSize.height - top - this.border.width - margin.bottom;\n this.initialClipRect = new Rect(left, top, width, height);\n if (this.legendModule) {\n this.legendModule.calculateLegendBounds(this.initialClipRect, this.availableSize);\n }\n this.chartAxisLayoutPanel.measureAxis(this.initialClipRect);\n };\n /**\n * Handles the print method for chart control.\n */\n Chart.prototype.print = function (id) {\n var exportChart = new ExportUtils(this);\n exportChart.print(id);\n };\n /**\n * Handles the export method for chart control.\n * @param type\n * @param fileName\n */\n Chart.prototype.export = function (type, fileName, orientation, 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 Chart.prototype.calculateVisibleAxis = function () {\n var axis;\n var series;\n var axes = [this.primaryXAxis, this.primaryYAxis];\n axes = this.chartAreaType === 'Cartesian' ? axes.concat(this.axes) : axes;\n this.axisCollections = [];\n if (this.zoomModule) {\n this.zoomModule.isPanning = this.zoomModule.isAxisZoomed(axes) && this.zoomSettings.enablePan;\n this.svgObject.setAttribute('cursor', this.zoomModule.isPanning ? 'pointer' : 'auto');\n 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 default:\n if (this.chartAreaType === 'PolarRadar' || this.series[0].type.indexOf('Bar') > -1) {\n continue;\n }\n break;\n }\n this.visibleSeries.push(series);\n this.series[i] = series;\n }\n };\n Chart.prototype.renderTitle = function () {\n if (this.title) {\n var anchor = this.titleStyle.textAlignment === 'Near' ? 'start' :\n this.titleStyle.textAlignment === 'Far' ? 'end' : 'middle';\n this.elementSize = measureText(this.title, this.titleStyle);\n var options = new TextOption(this.element.id + '_ChartTitle', titlePositionX(this.availableSize, this.margin.left, this.margin.right, this.titleStyle), this.margin.top + ((this.elementSize.height) * 3 / 4), anchor, this.titleCollection, '', 'auto');\n var element = textElement(options, this.titleStyle, this.titleStyle.color || this.themeStyle.chartTitle, this.svgObject);\n element.setAttribute('aria-label', this.description || this.title);\n element.setAttribute('tabindex', this.tabIndex.toString());\n }\n };\n Chart.prototype.renderBorder = function () {\n var width = this.border.width;\n var rect = new RectOption(this.element.id + '_ChartBorder', this.background || this.themeStyle.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width));\n this.htmlObject = this.renderer.drawRectangle(rect);\n this.svgObject.appendChild(this.htmlObject);\n };\n Chart.prototype.renderAreaBorder = function () {\n if (this.chartAreaType === 'PolarRadar') {\n return null;\n }\n else {\n var rect = new RectOption(this.element.id + '_ChartAreaBorder', this.chartArea.background, { width: this.chartArea.border.width, color: this.chartArea.border.color || this.themeStyle.areaBorder }, this.chartArea.opacity, this.chartAxisLayoutPanel.seriesClipRect);\n this.htmlObject = this.renderer.drawRectangle(rect);\n this.svgObject.appendChild(this.htmlObject);\n }\n };\n /**\n * To add series for the chart\n * @param {SeriesModel[]} seriesCollection - Defines the series collection to be added in chart.\n * @return {void}.\n */\n Chart.prototype.addSeries = function (seriesCollection) {\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n series = new Series(this, 'series', series);\n this.series.push(series);\n }\n this.refresh();\n };\n /**\n * To Remove series for the chart\n * @param index - Defines the series index to be remove in chart series\n * @return {void}\n */\n Chart.prototype.removeSeries = function (index) {\n this.series.splice(index, 1);\n this.refresh();\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}.\n * @member of Chart\n */\n Chart.prototype.destroy = function () {\n 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 if ((targetId === (this.element.id + '_ChartTitle')) && (event.target.textContent.indexOf('...') > -1)) {\n showTooltip(this.title, x, y, this.element.offsetWidth, this.element.id + '_EJ2_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_Title_Tooltip');\n }\n };\n Chart.prototype.axisTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if (((targetId.indexOf('AxisLabel') > -1) || targetId.indexOf('Axis_MultiLevelLabel') > -1) &&\n (event.target.textContent.indexOf('...') > -1)) {\n showTooltip(this.findAxisLabel(targetId), x, y, this.element.offsetWidth, this.element.id + '_EJ2_AxisLabel_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_AxisLabel_Tooltip');\n }\n };\n Chart.prototype.findAxisLabel = function (text) {\n var texts;\n if (text.indexOf('AxisLabel') > -1) {\n texts = ((text.replace(this.element.id, '')).replace('AxisLabel_', '')).split('_');\n return this.axisCollections[parseInt(texts[0], 10)].visibleLabels[parseInt(texts[1], 10)].originalText;\n }\n else {\n texts = ((text.replace(this.element.id, '')).replace('Axis_MultiLevelLabel_Level_', '').replace('Text_', '')).split('_');\n return (this.axisCollections[parseInt(texts[0], 10)].multiLevelLabels[parseInt(texts[1], 10)]\n .categories[parseInt(texts[2], 10)].text);\n }\n };\n /**\n * Handles the mouse down on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseDown = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var offset = Browser.isDevice ? 20 : 30;\n var rect = this.element.getBoundingClientRect();\n var element = e.target;\n this.trigger(chartMouseDown, { target: element.id, x: this.mouseX, y: this.mouseY });\n if (e.type === 'touchstart') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n pageX = e.clientX;\n pageY = e.clientY;\n target = e.target;\n }\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n this.mouseDownX = this.previousMouseMoveX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n this.mouseDownY = this.previousMouseMoveY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n if (this.isTouch) {\n this.isDoubleTap = (new Date().getTime() < this.threshold && target.id.indexOf(this.element.id + '_Zooming_') === -1 &&\n (this.mouseDownX - offset >= this.mouseX || this.mouseDownX + offset >= this.mouseX) &&\n (this.mouseDownY - offset >= this.mouseY || this.mouseDownY + offset >= this.mouseY) &&\n (this.mouseX - offset >= this.mouseDownX || this.mouseX + offset >= this.mouseDownX) &&\n (this.mouseY - offset >= this.mouseDownY || this.mouseY + offset >= this.mouseDownY));\n }\n this.notify(Browser.touchStartEvent, e);\n return false;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n Chart.prototype.mouseEnd = function (e) {\n var pageY;\n var pageX;\n var touchArg;\n if (e.type === 'touchend') {\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n this.isTouch = true;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n pageY = e.clientY;\n pageX = e.clientX;\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n }\n this.setMouseXY(pageX, pageY);\n this.chartOnMouseUp(e);\n return false;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseUp = function (e) {\n var element = e.target;\n this.trigger(chartMouseUp, { target: element.id, x: this.mouseX, y: this.mouseY });\n this.isChartDrag = false;\n if (this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n this.axisTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n this.threshold = new Date().getTime() + 300;\n }\n this.seriesElements.removeAttribute('clip-path');\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n /**\n * Method to set culture for chart\n */\n Chart.prototype.setCulture = function () {\n this.intl = new Internationalization();\n this.setLocaleConstants();\n this.localeObject = new L10n(this.getModuleName(), this.defaultLocalConstants, this.locale);\n };\n /**\n * Method to set the annotation content dynamically for chart.\n */\n Chart.prototype.setAnnotationValue = function (annotationIndex, content) {\n var parentNode = getElement(this.element.id + '_Annotation_Collections');\n var annotation = this.annotations[annotationIndex];\n var element;\n if (content !== null) {\n annotation.content = content;\n if (parentNode) {\n removeElement(this.element.id + '_Annotation_' + annotationIndex);\n element = 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 });\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 (document.getElementById(this.element.id + '_Secondary_Element')) {\n remove(document.getElementById(this.element.id + '_Secondary_Element'));\n }\n var removeLength = 0;\n if (this.zoomModule && this.zoomModule.pinchTarget) {\n this.zoomModule.pinchTarget.id = '';\n this.zoomModule.pinchTarget.setAttribute('opacity', '0');\n this.svgObject.appendChild(this.zoomModule.pinchTarget);\n removeLength = 1;\n }\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > removeLength) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n Chart.prototype.refreshDefinition = function (definitions) {\n for (var _i = 0, definitions_1 = definitions; _i < definitions_1.length; _i++) {\n var item = definitions_1[_i];\n item.axes = [];\n }\n };\n /**\n * Refresh the axis default value.\n * @return {boolean}\n * @private\n */\n Chart.prototype.refreshAxis = function () {\n var axis = this.primaryXAxis;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n axis = this.primaryYAxis;\n axis.isStack100 = false;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n for (var _i = 0, _a = this.axes; _i < _a.length; _i++) {\n var item = _a[_i];\n axis = item;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n axis.isStack100 = false;\n }\n };\n Chart.prototype.axisChange = function (axis) {\n if (!axis.name && !axis.valueType) {\n return false;\n }\n this.refreshDefinition(this.columns);\n this.refreshDefinition(this.rows);\n this.calculateVisibleAxis();\n this.processData();\n return true;\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n // tslint:disable-next-line:max-func-body-length\n Chart.prototype.onPropertyChanged = function (newProp, oldProp) {\n var renderer = false;\n var refreshBounds = false;\n if (Object.keys(newProp).length === 1 && Object.keys(newProp)[0] === 'indicators') {\n //add valid check,it should happen only when property change is triggered for target series\n return;\n }\n this.animateSeries = false;\n if (!this.delayRedraw) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'primaryXAxis':\n refreshBounds = this.axisChange(newProp.primaryXAxis);\n if (newProp.primaryXAxis.edgeLabelPlacement) {\n renderer = true;\n }\n if (!newProp.primaryXAxis.crosshairTooltip) {\n refreshBounds = true;\n }\n break;\n case 'primaryYAxis':\n refreshBounds = this.axisChange(newProp.primaryYAxis);\n if (newProp.primaryYAxis.edgeLabelPlacement) {\n renderer = true;\n }\n if (!newProp.primaryYAxis.crosshairTooltip) {\n refreshBounds = true;\n }\n break;\n case '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 'title':\n refreshBounds = true;\n break;\n case 'titleStyle':\n if (newProp.titleStyle && (newProp.titleStyle.size || newProp.titleStyle.textOverflow)) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'border':\n renderer = true;\n break;\n case '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 Complex({}, Margin)\n ], Chart.prototype, \"margin\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], Chart.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"background\", void 0);\n __decorate([\n Complex({ border: { color: null, width: 0.5 }, background: 'transparent' }, ChartArea)\n ], Chart.prototype, \"chartArea\", void 0);\n __decorate([\n Complex({ name: 'primaryXAxis' }, Axis)\n ], Chart.prototype, \"primaryXAxis\", void 0);\n __decorate([\n Complex({ name: 'primaryYAxis' }, Axis)\n ], Chart.prototype, \"primaryYAxis\", void 0);\n __decorate([\n Collection([{}], Row)\n ], Chart.prototype, \"rows\", void 0);\n __decorate([\n Collection([{}], Column)\n ], Chart.prototype, \"columns\", void 0);\n __decorate([\n Collection([{}], Axis)\n ], Chart.prototype, \"axes\", void 0);\n __decorate([\n Collection([{}], Series)\n ], Chart.prototype, \"series\", void 0);\n __decorate([\n Collection([{}], ChartAnnotationSettings)\n ], Chart.prototype, \"annotations\", void 0);\n __decorate([\n Property([])\n ], Chart.prototype, \"palettes\", void 0);\n __decorate([\n Property('Material')\n ], Chart.prototype, \"theme\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], Chart.prototype, \"tooltip\", void 0);\n __decorate([\n Complex({}, CrosshairSettings)\n ], Chart.prototype, \"crosshair\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], Chart.prototype, \"legendSettings\", void 0);\n __decorate([\n Complex({}, ZoomSettings)\n ], Chart.prototype, \"zoomSettings\", void 0);\n __decorate([\n Property('None')\n ], Chart.prototype, \"selectionMode\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"isMultiSelect\", void 0);\n __decorate([\n Collection([], Indexes)\n ], Chart.prototype, \"selectedDataIndexes\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"isTransposed\", void 0);\n __decorate([\n Collection([], TechnicalIndicator)\n ], Chart.prototype, \"indicators\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], Chart.prototype, \"tabIndex\", void 0);\n __decorate([\n Property(true)\n ], Chart.prototype, \"enableSideBySidePlacement\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"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 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) {\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 ? '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 ? 'yMd' : 'MMMd';\n }\n else if (intervalType === 'Hours') {\n skeleton = axis.isChart ? '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 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 { extend, getValue } from '@syncfusion/ej2-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { NiceInterval } from '../axis/axis-helper';\n/**\n * `DateTime` module is used to render datetime axis.\n */\nvar DateTime = /** @class */ (function (_super) {\n __extends(DateTime, _super);\n /**\n * Constructor for the dateTime module.\n * @private\n */\n function DateTime(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The function to calculate the range and labels for the axis.\n * @return {void}\n */\n DateTime.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis, 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 * @private\n */\n DateTime.prototype.calculateVisibleLabels = function (axis, chart) {\n axis.visibleLabels = [];\n var tempInterval = axis.visibleRange.min;\n var labelStyle;\n if (!setRange(axis)) {\n tempInterval = this.alignRangeStart(axis, tempInterval, axis.visibleRange.interval, axis.actualIntervalType).getTime();\n }\n axis.format = chart.intl.getDateFormat({\n format: axis.labelFormat, type: firstToLowerCase(axis.skeletonType), skeleton: this.getSkeleton(axis)\n });\n axis.startLabel = axis.format(new Date(axis.visibleRange.min));\n axis.endLabel = axis.format(new Date(axis.visibleRange.max));\n while (tempInterval <= axis.visibleRange.max) {\n labelStyle = (extend({}, getValue('properties', axis.labelStyle), null, true));\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 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 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] : 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)\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, logBase, RectOption } from '../../common/utils/helper';\n/**\n * `StripLine` module is used to render the stripLine in chart.\n */\nvar StripLine = /** @class */ (function () {\n function StripLine() {\n }\n StripLine.prototype.measureStripLine = function (axis, stripline, seriesClipRect) {\n var actualStart;\n var actualEnd;\n if (axis.valueType === 'DateTimeCategory') {\n var start = stripline.start;\n var end = stripline.end;\n actualStart = start ? axis.labels.indexOf(start.getTime().toString()) : null;\n actualEnd = end ? axis.labels.indexOf(end.getTime().toString()) : null;\n }\n else {\n actualStart = stripline.start;\n actualEnd = stripline.end;\n }\n var rect = this.getFromTovalue(actualStart, actualEnd, stripline.size, stripline.startFromAxis, axis);\n var height = (axis.orientation === 'Vertical') ? (rect.to - rect.from) * axis.rect.height : seriesClipRect.height;\n var width = (axis.orientation === 'Horizontal') ? (rect.to - rect.from) * axis.rect.width : seriesClipRect.width;\n var x = (axis.orientation === 'Vertical') ? seriesClipRect.x : ((rect.from * axis.rect.width) + axis.rect.x);\n var y = (axis.orientation === 'Horizontal') ? seriesClipRect.y : (axis.rect.y + axis.rect.height -\n (rect.to * axis.rect.height));\n if (height !== 0 && width !== 0) {\n return new Rect(x, y, width, height);\n }\n return new Rect(0, 0, 0, 0);\n };\n /**\n * To get from to value from start, end, size, start from axis\n */\n StripLine.prototype.getFromTovalue = function (start, end, size, startFromAxis, axis) {\n var from = startFromAxis ? axis.visibleRange.min : this.findValue(Math.min(start, isNullOrUndefined(end) ? start : end), axis);\n var to = this.findValue(this.getToValue(Math.max(start, isNullOrUndefined(end) ? start : end), from, size, axis, end), axis);\n return { from: valueToCoefficient(axis.isInversed ? to : from, axis), to: valueToCoefficient(axis.isInversed ? from : to, axis) };\n };\n StripLine.prototype.getToValue = function (to, from, size, axis, end) {\n if (axis.valueType === 'DateTime') {\n return (isNullOrUndefined(end) ? new Date(new Date(from).getTime() + size) : to);\n }\n else {\n return isNullOrUndefined(end) ? (axis.valueType === 'Logarithmic' ? Math.pow(axis.logBase, from) : from) + size : to;\n }\n };\n StripLine.prototype.findValue = function (value, axis) {\n if (axis.valueType === 'Logarithmic') {\n value = logBase(value, axis.logBase);\n }\n if (value < axis.visibleRange.min) {\n value = axis.visibleRange.min;\n }\n else if (value > axis.visibleRange.max) {\n value = axis.visibleRange.max;\n }\n return value;\n };\n /**\n * To render striplines based start and end.\n * @private\n * @param chart\n * @param position\n * @param axes\n */\n StripLine.prototype.renderStripLine = function (chart, position, axes) {\n var id = chart.element.id + '_stripline_' + position + '_';\n var striplineGroup = chart.renderer.createGroup({ id: id + 'collections' });\n var seriesClipRect = chart.chartAxisLayoutPanel.seriesClipRect;\n var rect;\n var count = 0;\n for (var _i = 0, axes_1 = axes; _i < axes_1.length; _i++) {\n var axis = axes_1[_i];\n for (var _a = 0, _b = axis.stripLines; _a < _b.length; _a++) {\n var stripline = _b[_a];\n if (stripline.visible && stripline.zIndex === position) {\n rect = this.measureStripLine(axis, stripline, seriesClipRect);\n this.renderRectangle(stripline, rect, id + 'rect_' + count, striplineGroup, chart);\n this.renderText(stripline, rect, id + 'text_' + count, striplineGroup, chart, axis);\n count++;\n }\n }\n }\n chart.svgObject.appendChild(striplineGroup);\n };\n StripLine.prototype.renderRectangle = function (stripline, rect, id, parent, chart) {\n parent.appendChild(chart.renderer.drawRectangle(new RectOption(id, stripline.color, stripline.border, stripline.opacity, rect, 0, 0, '', '')));\n };\n StripLine.prototype.renderText = function (stripline, rect, id, parent, chart, axis) {\n var textSize = measureText(stripline.text, stripline.textStyle);\n var textMid = 3 * (textSize.height / 8);\n var ty = rect.y + (rect.height / 2) + textMid;\n var rotation = (stripline.rotation === null) ? ((axis.orientation === 'Vertical') ? 0 : -90) : stripline.rotation;\n var tx = rect.x + (rect.width / 2);\n var alignment;\n var anchor;\n var padding = 5;\n if (axis.orientation === 'Horizontal') {\n tx = this.getTextStart(tx + (textMid * this.factor(stripline.horizontalAlignment)), rect.width, stripline.horizontalAlignment);\n ty = this.getTextStart(ty - textMid, rect.height, stripline.verticalAlignment);\n alignment = this.invertAlignment(stripline.horizontalAlignment);\n }\n else {\n tx = this.getTextStart(tx, rect.width, stripline.horizontalAlignment);\n ty = this.getTextStart(ty + (textMid * this.factor(stripline.verticalAlignment)) - padding, rect.height, stripline.verticalAlignment);\n alignment = stripline.verticalAlignment;\n }\n anchor = alignment;\n textElement(new TextOption(id, tx, ty, anchor, stripline.text, 'rotate(' + rotation + ' ' + tx + ',' + ty + ')', 'middle'), stripline.textStyle, stripline.textStyle.color, parent);\n };\n StripLine.prototype.invertAlignment = function (anchor) {\n switch (anchor) {\n case 'Start':\n anchor = 'Start';\n break;\n case 'End':\n anchor = 'End';\n break;\n }\n return anchor;\n };\n StripLine.prototype.factor = function (anchor) {\n var factor = 0;\n switch (anchor) {\n case 'Start':\n factor = 1;\n break;\n case 'End':\n factor = -1;\n break;\n }\n return factor;\n };\n StripLine.prototype.getTextStart = function (xy, size, textAlignment) {\n var padding = 5;\n switch (textAlignment) {\n case 'Start':\n xy = xy - (size / 2) + padding;\n break;\n case 'End':\n xy = xy + (size / 2) - padding;\n break;\n }\n return xy;\n };\n /**\n * To get the module name for `StripLine`.\n * @private\n */\n StripLine.prototype.getModuleName = function () {\n return 'StripLine';\n };\n /**\n * To destroy the `StripLine` module.\n * @private\n */\n StripLine.prototype.destroy = function () {\n // destroy peform here\n };\n return StripLine;\n}());\nexport { StripLine };\n","import { Rect, getAnimationFunction } from '../../common/utils/helper';\nimport { Animation } from '@syncfusion/ej2-base';\n/**\n * Base for line type series.\n */\nvar LineBase = /** @class */ (function () {\n /** @private */\n function LineBase(chartModule) {\n this.chart = chartModule;\n this.padding = 5;\n }\n /**\n * To improve the chart performance.\n * @return {void}\n * @private\n */\n LineBase.prototype.improveChartPerformance = function (series) {\n var tempPoints = [];\n var xVisibleRange = series.xAxis.visibleRange;\n var yVisibleRange = series.yAxis.visibleRange;\n var seriesPoints = series.points;\n var areaBounds = series.clipRect;\n var xTolerance = Math.abs(xVisibleRange.delta / areaBounds.width);\n var yTolerance = Math.abs(yVisibleRange.delta / areaBounds.height);\n var prevXValue = (seriesPoints[0] && seriesPoints[0].x > xTolerance) ? 0 : xTolerance;\n var prevYValue = (seriesPoints[0] && seriesPoints[0].y > yTolerance) ? 0 : yTolerance;\n var xVal = 0;\n var yVal = 0;\n var currentPoint;\n for (var _i = 0, seriesPoints_1 = seriesPoints; _i < seriesPoints_1.length; _i++) {\n var currentPoint_1 = seriesPoints_1[_i];\n currentPoint_1.symbolLocations = [];\n xVal = currentPoint_1.xValue ? currentPoint_1.xValue : xVisibleRange.min;\n yVal = currentPoint_1.yValue ? currentPoint_1.yValue : yVisibleRange.min;\n if (Math.abs(prevXValue - xVal) >= xTolerance || Math.abs(prevYValue - yVal) >= yTolerance) {\n tempPoints.push(currentPoint_1);\n prevXValue = xVal;\n prevYValue = yVal;\n }\n }\n return tempPoints;\n };\n /**\n * To generate the line path direction\n * @param firstPoint\n * @param secondPoint\n * @param series\n * @param isInverted\n * @param getPointLocation\n * @param startPoint\n */\n LineBase.prototype.getLineDirection = function (firstPoint, secondPoint, series, isInverted, getPointLocation, startPoint) {\n var direction = '';\n if (firstPoint != null) {\n var point1 = getPointLocation(firstPoint.xValue, firstPoint.yValue, series.xAxis, series.yAxis, isInverted, series);\n var point2 = getPointLocation(secondPoint.xValue, secondPoint.yValue, series.xAxis, series.yAxis, isInverted, series);\n direction = startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ' +\n 'L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ';\n }\n return direction;\n };\n /**\n * To append the line path.\n * @return {void}\n * @private\n */\n LineBase.prototype.appendLinePath = function (options, series, clipRect) {\n var htmlObject = series.chart.renderer.drawPath(options);\n htmlObject.setAttribute('clip-path', clipRect);\n series.pathElement = htmlObject;\n series.seriesElement.appendChild(htmlObject);\n series.isRectSeries = false;\n };\n /**\n * To render the marker for the series.\n * @return {void}\n * @private\n */\n LineBase.prototype.renderMarker = function (series) {\n if (series.marker && 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;\n options = new PathOption(name, 'none', series.width, series.interior, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n LineSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doProgressiveAnimation(series, option);\n };\n /**\n * Get module name.\n */\n LineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'LineSeries';\n };\n /**\n * To destroy the line series.\n * @return {void}\n * @private\n */\n LineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return LineSeries;\n}(LineBase));\nexport { LineSeries };\n","import { Animation } from '@syncfusion/ej2-base';\nimport { DoubleRange } from '../utils/double-range';\nimport { Rect, valueToCoefficient, getMinPointsDelta, PathOption } from '../../common/utils/helper';\nimport { getAnimationFunction, getPoint } from '../../common/utils/helper';\nimport { pointRender } from '../../common/model/constants';\n/**\n * Column Series Base\n */\nvar ColumnBase = /** @class */ (function () {\n function ColumnBase() {\n }\n /**\n * To get the position of the column series.\n * @return {DoubleRange}\n * @private\n */\n ColumnBase.prototype.getSideBySideInfo = function (series) {\n if (series.chart.enableSideBySidePlacement && !series.position) {\n this.getSideBySidePositions(series);\n }\n var position = !series.chart.enableSideBySidePlacement ? 0 : series.position;\n var rectCount = !series.chart.enableSideBySidePlacement ? 1 : series.rectCount;\n series.isRectSeries = true;\n var visibleSeries = series.chart.visibleSeries;\n var seriesSpacing = series.chart.enableSideBySidePlacement ? series.columnSpacing : 0; // Column Spacing\n var pointSpacing = (series.columnWidth === 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 var seriesCollection = [];\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var columnItem = _a[_i];\n for (var _b = 0, _c = chart.rows; _b < _c.length; _b++) {\n var item = _c[_b];\n this.findRectPosition(series.findSeriesCollection(columnItem, item, false));\n }\n }\n };\n ColumnBase.prototype.findRectPosition = function (seriesCollection) {\n var stackingGroup = [];\n var vSeries = { rectCount: 0, position: null };\n seriesCollection.forEach(function (value) {\n if (value.type.indexOf('Stacking') !== -1) {\n if (value.stackingGroup) {\n if (stackingGroup[value.stackingGroup] === undefined) {\n value.position = vSeries.rectCount;\n stackingGroup[value.stackingGroup] = vSeries.rectCount++;\n }\n else {\n value.position = stackingGroup[value.stackingGroup];\n }\n }\n else {\n if (vSeries.position === null) {\n value.position = vSeries.rectCount;\n vSeries.position = vSeries.rectCount++;\n }\n else {\n value.position = vSeries.position;\n }\n }\n }\n else {\n value.position = vSeries.rectCount++;\n }\n });\n seriesCollection.forEach(function (value) {\n value.rectCount = vSeries.rectCount;\n });\n };\n /**\n * Updates the symbollocation for points\n * @return void\n * @private\n */\n ColumnBase.prototype.updateSymbolLocation = function (point, rect, series) {\n if (!series.chart.requireInvertedAxis) {\n this.updateXRegion(point, rect, series);\n }\n else {\n this.updateYRegion(point, rect, series);\n }\n 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 };\n /**\n * Update the region for the point in bar series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.updateYRegion = function (point, rect, series) {\n point.regions.push(rect);\n point.symbolLocations.push({\n x: (series.seriesType === 'BoxPlot' || series.seriesType.indexOf('HighLow') !== -1 ||\n (point.yValue >= 0 === !series.yAxis.isInversed)) ? rect.x + rect.width : rect.x,\n y: rect.y + rect.height / 2\n });\n };\n /**\n * To trigger the point rendering event.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.triggerEvent = function (series, point, fill, border) {\n var argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, fill),\n border: series.setBorderColor(point, border)\n };\n series.chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n return argsData;\n };\n /**\n * To draw the rectangle for points.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.drawRectangle = function (series, point, rect, argsData) {\n var check = series.chart.requireInvertedAxis ? rect.height : rect.width;\n if (check <= 0) {\n return null;\n }\n var direction = this.calculateRoundedRectPath(rect, series.cornerRadius.topLeft, series.cornerRadius.topRight, series.cornerRadius.bottomLeft, series.cornerRadius.bottomRight);\n var name = series.category === 'Indicator' ? series.chart.element.id + '_Indicator_' + series.index + '_' + series.name +\n '_Point_' + point.index : series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index;\n var options = new PathOption(name, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n var element = series.chart.renderer.drawPath(options);\n switch (series.seriesType) {\n case 'XY':\n element.setAttribute('aria-label', point.x.toString() + ':' + point.yValue.toString());\n break;\n case 'HighLow':\n element.setAttribute('aria-label', point.x.toString() + ':' + point.high.toString() + ':' + point.low.toString());\n break;\n }\n series.seriesElement.appendChild(element);\n };\n /**\n * To animate the series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.animate = function (series) {\n var rectElements = series.seriesElement.childNodes;\n var count = series.category === 'Indicator' ? 0 : 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.symbolLocations.length && !(series.type === 'BoxAndWhisker' && point.regions.length)) {\n continue;\n }\n this.animateRect(rectElements[count], series, point);\n count++;\n }\n };\n /**\n * To animate the series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.animateRect = function (element, series, point) {\n var option = series.animation;\n var effect = getAnimationFunction('Linear');\n var isPlot = point.yValue < 0;\n var x;\n var y;\n var elementHeight = +point.regions[0].height;\n var elementWidth = +point.regions[0].width;\n var centerX;\n var centerY;\n if (!series.chart.requireInvertedAxis) {\n x = +point.regions[0].x;\n if (series.type.indexOf('Stacking') > -1) {\n y = (1 - valueToCoefficient(0, series.yAxis)) * (series.yAxis.rect.height);\n centerX = x;\n centerY = y;\n }\n else {\n y = +point.regions[0].y;\n centerY = (series.seriesType.indexOf('HighLow') !== -1 || series.type.indexOf('Waterfall') !== -1) ? y + elementHeight / 2 :\n (isPlot !== series.yAxis.isInversed) ? y : y + elementHeight;\n centerX = isPlot ? x : x + elementWidth;\n }\n }\n else {\n y = +point.regions[0].y;\n if (series.type.indexOf('Stacking') > -1) {\n x = (valueToCoefficient(0, series.yAxis)) * series.yAxis.rect.width;\n centerX = x;\n centerY = y;\n }\n else {\n x = +point.regions[0].x;\n centerY = isPlot ? y : y + elementHeight;\n centerX = (series.seriesType.indexOf('HighLow') !== -1 || series.type.indexOf('Waterfall') !== -1) ? x + elementWidth / 2 :\n (isPlot !== series.yAxis.isInversed) ? x + elementWidth : x;\n }\n }\n var value;\n element.style.visibility = 'hidden';\n new Animation({}).animate(element, {\n duration: option.duration,\n delay: option.delay,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n element.style.visibility = 'visible';\n if (!series.chart.requireInvertedAxis) {\n elementHeight = elementHeight ? elementHeight : 1;\n value = effect(args.timeStamp - args.delay, 0, elementHeight, args.duration);\n element.setAttribute('transform', 'translate(' + centerX + ' ' + centerY +\n ') scale(1,' + (value / elementHeight) + ') translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n else {\n elementWidth = elementWidth ? elementWidth : 1;\n value = effect(args.timeStamp - args.delay, 0, elementWidth, args.duration);\n element.setAttribute('transform', 'translate(' + centerX + ' ' + centerY +\n ') scale(' + (value / elementWidth) + ', 1) translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n }\n },\n end: function (model) {\n element.setAttribute('transform', 'translate(0,0)');\n var seriesElement = series.seriesElement;\n if (element === seriesElement.lastElementChild || point.index === series.points.length - 1 ||\n (series.type === 'Waterfall' && element === seriesElement.children[seriesElement.childElementCount - 2])) {\n series.chart.trigger('animationComplete', { series: series });\n if (series.type === 'Waterfall') {\n var rectElements = seriesElement.childNodes;\n for (var i = 0; i < rectElements.length; i++) {\n if (rectElements[i].id.indexOf('Connector') !== -1) {\n rectElements[i].style.visibility = 'visible';\n rectElements[i].setAttribute('transform', 'translate(0,0)');\n }\n }\n }\n }\n }\n });\n };\n /**\n * To get rounded rect path direction\n */\n ColumnBase.prototype.calculateRoundedRectPath = function (rect, topLeft, topRight, bottomLeft, bottomRight) {\n return 'M' + ' ' + rect.x + ' ' + (topLeft + rect.y) +\n ' Q ' + rect.x + ' ' + rect.y + ' ' + (rect.x + topLeft) + ' ' +\n rect.y + ' ' + 'L' + ' ' + (rect.x + rect.width - topRight) + ' ' + rect.y +\n ' Q ' + (rect.x + rect.width) + ' ' + rect.y + ' ' +\n (rect.x + rect.width) + ' ' + (rect.y + topRight) + ' ' + 'L ' +\n (rect.x + rect.width) + ' ' + (rect.y + rect.height - bottomRight)\n + ' Q ' + (rect.x + rect.width) + ' ' + (rect.y + rect.height) + ' ' + (rect.x + rect.width - bottomRight) + ' ' +\n (rect.y + rect.height) + ' ' + 'L ' + (rect.x + bottomLeft) + ' ' + (rect.y + rect.height) + ' Q ' + rect.x + ' ' +\n (rect.y + rect.height) + ' ' + rect.x + ' ' + (rect.y + rect.height - bottomLeft) + ' ' + 'L' + ' ' + rect.x + ' ' +\n (topLeft + rect.y) + ' ' + 'Z';\n };\n return ColumnBase;\n}());\nexport { ColumnBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `ColumnSeries` Module used to render the column series.\n */\nvar ColumnSeries = /** @class */ (function (_super) {\n __extends(ColumnSeries, _super);\n function ColumnSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Column series.\n * @return {void}\n * @private\n */\n ColumnSeries.prototype.render = function (series) {\n var rect;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var pointColumn = _a[_i];\n pointColumn.symbolLocations = [];\n pointColumn.regions = [];\n if (pointColumn.visible && withInRange(series.points[pointColumn.index - 1], pointColumn, series.points[pointColumn.index + 1], series)) {\n rect = this.getRectangle(pointColumn.xValue + sideBySideInfo.start, pointColumn.yValue, pointColumn.xValue + sideBySideInfo.end, origin, series);\n var color = series.category === 'Indicator' ? pointColumn.color : series.interior;\n argsData = this.triggerEvent(series, pointColumn, color, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.updateSymbolLocation(pointColumn, rect, series);\n this.drawRectangle(series, pointColumn, rect, argsData);\n }\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n ColumnSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n ColumnSeries.prototype.getModuleName = function () {\n return 'ColumnSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the column series.\n * @return {void}\n * @private\n */\n ColumnSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return ColumnSeries;\n}(ColumnBase));\nexport { ColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getPoint } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\nimport { RectOption } from '../../common/utils/helper';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * Base class for multi colored series\n */\nvar MultiColoredSeries = /** @class */ (function (_super) {\n __extends(MultiColoredSeries, _super);\n function MultiColoredSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * To Generate the area path direction\n * @param xValue\n * @param yValue\n * @param series\n * @param isInverted\n * @param getPointLocation\n * @param startPoint\n * @param startPath\n */\n MultiColoredSeries.prototype.getAreaPathDirection = function (xValue, yValue, series, isInverted, getPointLocation, startPoint, startPath) {\n var direction = '';\n var firstPoint;\n if (startPoint === null) {\n firstPoint = getPointLocation(xValue, yValue, series.xAxis, series.yAxis, isInverted, series);\n direction += (startPath + ' ' + (firstPoint.x) + ' ' + (firstPoint.y) + ' ');\n }\n return direction;\n };\n /**\n * To Generate the empty point direction\n * @param firstPoint\n * @param secondPoint\n * @param series\n * @param isInverted\n * @param getPointLocation\n */\n MultiColoredSeries.prototype.getAreaEmptyDirection = function (firstPoint, secondPoint, series, isInverted, getPointLocation) {\n var direction = '';\n direction += this.getAreaPathDirection(firstPoint.x, firstPoint.y, series, isInverted, getPointLocation, null, 'L');\n direction += this.getAreaPathDirection(secondPoint.x, secondPoint.y, series, isInverted, getPointLocation, null, 'L');\n return direction;\n };\n /**\n * To set point color\n * @param points\n */\n MultiColoredSeries.prototype.setPointColor = function (currentPoint, previous, series, isXSegment, segments) {\n if (series.pointColorMapping === '') {\n var segment = void 0;\n var value = void 0;\n for (var i = 0; i < segments.length; i++) {\n segment = segments[i];\n value = isXSegment ? currentPoint.xValue : currentPoint.yValue;\n if (value <= this.getAxisValue(segment.value, isXSegment ? series.xAxis : series.yAxis, series.chart) || !segment.value) {\n currentPoint.interior = segment.color;\n break;\n }\n }\n if (currentPoint.interior == null) {\n currentPoint.interior = series.interior;\n }\n return false;\n }\n else {\n if (previous) {\n return series.setPointColor(currentPoint, series.interior) !== series.setPointColor(previous, series.interior);\n }\n else {\n return false;\n }\n }\n };\n MultiColoredSeries.prototype.sortSegments = function (series, chartSegments) {\n var axis = series.segmentAxis === 'X' ? series.xAxis : series.yAxis;\n var segments = [].concat(chartSegments);\n var access = this;\n return segments.sort(function (a, b) {\n return access.getAxisValue(a.value, axis, series.chart) - access.getAxisValue(b.value, axis, series.chart);\n });\n };\n /**\n * Segment calculation performed here\n * @param series\n * @param options\n * @param chartSegments\n */\n MultiColoredSeries.prototype.applySegmentAxis = function (series, options, segments) {\n var _this = this;\n if (series.pointColorMapping !== '') {\n options.map(function (option) {\n _this.appendLinePath(option, series, '');\n });\n return null;\n }\n var isXSegment = series.segmentAxis === 'X';\n var axis = isXSegment ? series.xAxis : series.yAxis;\n var chart = series.chart;\n var segment;\n this.includeSegment(segments, axis, series, segments.length);\n var length = segments.length;\n var value;\n var clipPath;\n var _loop_1 = function (index) {\n segment = segments[index];\n value = this_1.getAxisValue(segment.value, axis, series.chart);\n clipPath = this_1.createClipRect(index ? this_1.getAxisValue(segments[index - 1].value, axis, series.chart)\n : axis.visibleRange.min, value, series, index, isXSegment);\n if (clipPath) {\n options.map(function (option) {\n series.seriesElement.appendChild(chart.renderer.drawPath({\n 'clip-path': clipPath,\n 'stroke-dasharray': segment.dashArray,\n 'opacity': option.opacity,\n 'stroke': series.type.indexOf('Line') > -1 ? segment.color || series.interior : series.border.color,\n 'stroke-width': option['stroke-width'],\n 'fill': series.type.indexOf('Line') > -1 ? 'none' : segment.color || series.interior,\n 'id': option.id + '_Segment_' + index,\n 'd': option.d\n }));\n });\n }\n };\n var this_1 = this;\n for (var index = 0; index < length; index++) {\n _loop_1(index);\n }\n };\n MultiColoredSeries.prototype.includeSegment = function (segments, axis, series, length) {\n if (length <= 0) {\n segments.push({ value: axis.visibleRange.max, color: series.interior });\n return null;\n }\n if (this.getAxisValue(segments[length - 1].value, axis, series.chart) < axis.visibleRange.max) {\n segments.push({ value: axis.visibleRange.max, color: series.interior });\n }\n };\n /**\n * To create clip rect for segment axis\n * @param startValue\n * @param endValue\n * @param series\n * @param index\n * @param isX\n * @param chart\n */\n MultiColoredSeries.prototype.createClipRect = function (startValue, endValue, series, index, isX) {\n var isRequired = series.chart.requireInvertedAxis;\n var startPointLocation = getPoint(isX ? startValue : series.xAxis.visibleRange.min, isX ? series.yAxis.visibleRange.max : endValue, series.xAxis, series.yAxis, isRequired);\n var endPointLocation = getPoint(isX ? endValue : series.xAxis.visibleRange.max, isX ? series.yAxis.visibleRange.min : startValue, series.xAxis, series.yAxis, isRequired);\n endPointLocation = isRequired ?\n [startPointLocation, startPointLocation = endPointLocation][0] : endPointLocation;\n if ((endPointLocation.x - startPointLocation.x > 0) && (endPointLocation.y - startPointLocation.y > 0)) {\n series.seriesElement.appendChild(series.chart.renderer.drawClipPath(new RectOption(series.chart.element.id + '_ChartSegmentClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: startPointLocation.x,\n y: startPointLocation.y,\n width: endPointLocation.x - startPointLocation.x,\n height: endPointLocation.y - startPointLocation.y\n })));\n return 'url(#' + series.chart.element.id + '_ChartSegmentClipRect_' + index + ')';\n }\n return null;\n };\n /**\n * To get exact value from segment value\n * @param segmentValue\n * @param axis\n * @param chart\n */\n MultiColoredSeries.prototype.getAxisValue = function (segmentValue, axis, chart) {\n if (segmentValue === null) {\n segmentValue = axis.visibleRange.max;\n }\n if (axis.valueType === 'DateTime') {\n var option = { skeleton: 'full', type: 'dateTime' };\n return Date.parse(chart.intl.getDateParser(option)(chart.intl.getDateFormat(option)(new Date(DataUtil.parse.parseJson({ val: segmentValue }).val))));\n }\n else if (axis.valueType.indexOf('Category') > -1) {\n var xValue = axis.valueType === 'DateTimeCategory' ?\n (segmentValue.getTime()).toString() :\n segmentValue;\n return (axis.labels.indexOf(xValue) < 0) ? +segmentValue : axis.labels.indexOf(xValue);\n }\n else {\n return +segmentValue;\n }\n };\n return MultiColoredSeries;\n}(LineBase));\nexport { MultiColoredSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getPoint, withInRange, ChartLocation, PathOption, TransformToVisible } from '../../common/utils/helper';\nimport { MultiColoredSeries } from './multi-colored-base';\n/**\n * `AreaSeries` module is used to render the area series.\n */\nvar AreaSeries = /** @class */ (function (_super) {\n __extends(AreaSeries, _super);\n function AreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Area series.\n * @return {void}\n * @private\n */\n AreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var _this = this;\n var startPoint = null;\n var direction = '';\n var origin = series.chart.chartAreaType === 'PolarRadar' ? series.points[0].yValue :\n Math.max(series.yAxis.visibleRange.min, 0);\n var currentXValue;\n var 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 };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n BarSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the bar series.\n * @return {void}\n * @private\n */\n BarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name\n */\n BarSeries.prototype.getModuleName = function () {\n return 'BarSeries';\n };\n return BarSeries;\n}(ColumnBase));\nexport { BarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { valueToCoefficient, TextOption, inside, measureText } from '../../common/utils/helper';\nimport { Size, Rect, PathOption, CircleOption } from '../../common/utils/helper';\nimport { LineBase } from '../series/line-base';\nimport { textElement, valueToPolarCoefficient, CoefficientToVector } from '../../common/utils/helper';\n/**\n * Specifies the Polar Axis Layout.\n */\nvar axisPadding = 10;\nvar PolarRadarPanel = /** @class */ (function (_super) {\n __extends(PolarRadarPanel, _super);\n function PolarRadarPanel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Measure the polar radar axis size.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.measureAxis = function (rect) {\n var chart = this.chart;\n this.initialClipRect = rect;\n this.seriesClipRect = new Rect(rect.x, rect.y, rect.width, rect.height);\n //Measure axis size calculation\n this.measureRowAxis(chart, this.initialClipRect);\n this.measureColumnAxis(chart, this.initialClipRect);\n this.calculateAxisSize();\n };\n PolarRadarPanel.prototype.measureRowAxis = function (chart, rect) {\n this.calculateRowSize(rect);\n var row = chart.rows[0];\n this.measureDefinition(row, chart, new Size(chart.availableSize.width, row.computedHeight), rect);\n };\n PolarRadarPanel.prototype.measureColumnAxis = function (chart, rect) {\n this.calculateColumnSize(rect);\n var column = chart.columns[0];\n this.measureDefinition(column, chart, new Size(column.computedWidth, chart.availableSize.height), rect);\n };\n /**\n * Measure the column and row in chart.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.measureDefinition = function (definition, chart, size, clipRect) {\n for (var _i = 0, _a = definition.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n axis.getModule(chart);\n axis.baseModule.calculateRangeAndInterval(size, axis);\n }\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.calculateAxisSize = function () {\n var chart = this.chart;\n var axis;\n var padding = 5;\n this.centerX = this.initialClipRect.width * 0.5 + this.initialClipRect.x;\n this.centerY = this.initialClipRect.height * 0.5 + this.initialClipRect.y;\n chart.radius = Math.min(this.initialClipRect.width, this.initialClipRect.height) / 2 - padding -\n chart.primaryXAxis.majorTickLines.height - chart.primaryXAxis.maxLabelSize.height;\n chart.radius = (chart.primaryXAxis.coefficient * chart.radius) / 100;\n this.seriesClipRect.y = this.centerY - chart.radius;\n this.seriesClipRect.x = this.centerX - chart.radius;\n this.seriesClipRect.height = 2 * chart.radius;\n this.seriesClipRect.width = 2 * chart.radius;\n this.calculateRowSize(this.seriesClipRect);\n axis = chart.primaryYAxis;\n axis.rect = this.seriesClipRect;\n this.calculateColumnSize(this.seriesClipRect);\n axis = chart.primaryXAxis;\n axis.rect = this.seriesClipRect;\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.measure = function () {\n var chart = this.chart;\n chart.verticalAxes.push(chart.primaryYAxis);\n var row = chart.rows[0];\n row.axes[0] = chart.primaryYAxis;\n chart.rows[0] = row;\n chart.horizontalAxes.push(chart.primaryXAxis);\n var column = chart.columns[0];\n column.axes[0] = chart.primaryXAxis;\n chart.columns[0] = column;\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n PolarRadarPanel.prototype.calculateRowSize = function (rect) {\n /*! Calculate row size */\n var chart = this.chart;\n var row = chart.rows[0];\n row.computedHeight = rect.height / 2;\n row.computedTop = rect.y;\n chart.rows[0] = row;\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n PolarRadarPanel.prototype.calculateColumnSize = function (rect) {\n /*! Calculate column size */\n var chart = this.chart;\n var column = chart.columns[0];\n column.computedLeft = rect.x;\n column.computedWidth = rect.width;\n chart.columns[0] = column;\n };\n /**\n * To render the axis element.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.renderAxes = function () {\n var axis;\n var chart = this.chart;\n this.startAngle = chart.primaryXAxis.startAngle;\n var axisElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisCollection' });\n var axisLineElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisOutsideCollection' });\n for (var i = 0, len = chart.axisCollections.length; i < len; i++) {\n this.element = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i });\n axis = chart.axisCollections[i];\n if (axis.orientation === 'Horizontal') {\n if (axis.majorGridLines.width > 0 || axis.majorTickLines.width > 0) {\n this.drawXAxisGridLine(axis, i);\n }\n if (axis.visible) {\n this.drawXAxisLabels(axis, i);\n }\n }\n else {\n this.drawYAxisGridLine(axis, i);\n if (axis.lineStyle.width > 0) {\n this.drawYAxisLine(axis, i, axis.plotOffset, 0);\n }\n if (axis.visible) {\n this.drawYAxisLabels(axis, i);\n }\n }\n axisElement.appendChild(this.element);\n }\n axisElement.appendChild(this.element);\n chart.svgObject.appendChild(axisElement);\n return axisLineElement;\n };\n PolarRadarPanel.prototype.drawYAxisLine = function (axis, index, plotX, plotY) {\n var chart = this.chart;\n var optionsLine = {};\n var vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n var axisLine = 'M ' + this.centerX + ' ' + this.centerY + 'L ' +\n (this.centerX + chart.radius * vector.x) + ' ' + (this.centerY + chart.radius * vector.y);\n optionsLine = {\n 'id': chart.element.id + 'AxisLine_' + index,\n 'd': axisLine,\n 'stroke-dasharray': axis.lineStyle.dashArray,\n 'stroke-width': axis.lineStyle.width,\n 'stroke': axis.lineStyle.color || chart.themeStyle.axisLine\n };\n chart.yAxisElements.appendChild(chart.renderer.drawPath(optionsLine));\n };\n PolarRadarPanel.prototype.drawYAxisLabels = function (axis, index) {\n var chart = this.chart;\n var elementSize;\n var options;\n var pointX = 0;\n var pointY = 0;\n var vector;\n var angle = this.startAngle < 0 ? this.startAngle + 360 : this.startAngle;\n var anchor = 'middle';\n var radius;\n var padding = 5;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n elementSize = axis.visibleLabels[i].size;\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n pointX = (this.centerX + radius * vector.x) + ((axis.majorTickLines.height + elementSize.width / 2 + padding / 2)\n * (Math.cos(angle * Math.PI / 180)) * (axis.labelPosition === 'Inside' ? 1 : -1));\n pointY = (this.centerY + radius * vector.y) + ((axis.majorTickLines.height + elementSize.height / 2)\n * (Math.sin(angle * Math.PI / 180)) * (axis.labelPosition === 'Inside' ? 1 : -1));\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY + (elementSize.height / 4), anchor, axis.visibleLabels[i].text);\n textElement(options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabel, labelElement);\n }\n chart.yAxisElements.appendChild(labelElement);\n };\n PolarRadarPanel.prototype.drawYAxisGridLine = function (axis, index) {\n var chart = this.chart;\n var options;\n var radius;\n var majorTick = '';\n var majorGrid = '';\n var vector;\n var vector2;\n var angle = this.startAngle < 0 ? this.startAngle + 360 : this.startAngle;\n var rect = axis.rect;\n var x1;\n var y1;\n var x2;\n var y2;\n var border = {\n color: axis.majorGridLines.color || chart.themeStyle.majorGridLine,\n width: axis.majorGridLines.width\n };\n if (axis.majorGridLines.width > 0) {\n if (chart.visibleSeries[0].type === 'Polar') {\n for (var j = 0; j < axis.visibleLabels.length; j++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[j].value, axis);\n options = new CircleOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', border, axis.majorGridLines.width, this.centerX, this.centerY, radius);\n this.element.appendChild(chart.renderer.drawCircle(options));\n }\n }\n else {\n for (var j = 0; j < axis.visibleLabels.length; j++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[j].value, axis);\n for (var i = 0, len = chart.primaryXAxis.visibleLabels.length; i < len; i++) {\n vector = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[i].value, chart.primaryXAxis), this.startAngle);\n if (i + 1 < len) {\n vector2 = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[i + 1].value, chart.primaryXAxis), this.startAngle);\n }\n else {\n vector2 = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[0].value, chart.primaryXAxis), this.startAngle);\n }\n x1 = this.centerX + radius * vector.x;\n y1 = this.centerY + radius * vector.y;\n x2 = this.centerX + radius * vector2.x;\n y2 = this.centerY + radius * vector2.y;\n majorGrid = majorGrid.concat('M' + ' ' + x1 + ' ' + y1 + ' ' + 'L' + ' ' + x2 + ' ' + y2 + ' ');\n }\n }\n options = new PathOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', axis.majorGridLines.width, axis.majorGridLines.color || chart.themeStyle.majorGridLine, null, null, majorGrid);\n this.element.appendChild(chart.renderer.drawPath(options));\n }\n }\n if (axis.majorTickLines.width > 0) {\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n x1 = this.centerX + radius * vector.x;\n y1 = this.centerY + radius * vector.y;\n x2 = x1 + (axis.majorTickLines.height * (Math.cos(angle * Math.PI / 180)) * (axis.tickPosition === 'Inside' ? 1 : -1));\n y2 = y1 + (axis.majorTickLines.height * (Math.sin(angle * Math.PI / 180)) * (axis.tickPosition === 'Inside' ? 1 : -1));\n majorTick = majorTick.concat('M ' + x1 + ' ' + y1 +\n ' L ' + x2 + ' ' + y2 + ' ');\n }\n }\n this.renderTickLine(axis, index, majorTick, '');\n };\n PolarRadarPanel.prototype.drawXAxisGridLine = function (axis, index) {\n var chart = this.chart;\n var tempInterval;\n var vector;\n var majorGrid = '';\n var majorTick = '';\n var minorGirdLine = '';\n var minorTickLine = '';\n var x1 = this.centerX;\n var x2;\n var y1 = this.centerY;\n var y2;\n var minorDirection;\n var tickSize = axis.majorTickLines.height;\n var rect = axis.rect;\n var length = axis.visibleLabels.length;\n //Gridlines\n for (var i = 0; i < length; i++) {\n tempInterval = axis.visibleLabels[i].value;\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[i].value, axis), this.startAngle);\n x2 = this.centerX + chart.radius * vector.x;\n y2 = this.centerY + chart.radius * vector.y;\n var xLoc = x2 + (axis.majorTickLines.height * vector.x * (axis.tickPosition === 'Inside' ? -1 : 1));\n var yLoc = y2 + (axis.majorTickLines.height * vector.y * (axis.tickPosition === 'Inside' ? -1 : 1));\n majorGrid = majorGrid.concat('M ' + x1 + ' ' + y1 + ' ' + 'L' + x2 + ' ' + y2);\n majorTick = majorTick.concat('M ' + x2 + ' ' + y2 +\n ' L ' + xLoc + ' ' + yLoc + ' ');\n if (axis.minorTicksPerInterval > 0 && (axis.minorGridLines.width > 0 || axis.minorTickLines.width > 0)\n && axis.valueType !== 'Category' && chart.visibleSeries[0].type !== 'Radar') {\n minorDirection = this.drawAxisMinorLine(axis, tempInterval, minorGirdLine, minorTickLine);\n minorGirdLine = minorDirection[0];\n minorTickLine = minorDirection[1];\n }\n }\n this.renderTickLine(axis, index, majorTick, minorTickLine);\n this.renderGridLine(axis, index, majorGrid, minorGirdLine);\n };\n PolarRadarPanel.prototype.drawAxisMinorLine = function (axis, tempInterval, minorGird, minorTick) {\n var value = tempInterval;\n var x;\n var y;\n var vector;\n var range = axis.visibleRange;\n var direction = [];\n var tickSize = axis.minorTickLines.height;\n var rect = axis.rect;\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value += (axis.valueType === 'DateTime' ? axis.dateTimeInterval : axis.visibleRange.interval) /\n (axis.minorTicksPerInterval + 1);\n if (inside(value, range)) {\n vector = CoefficientToVector(valueToPolarCoefficient(value, axis), this.startAngle);\n x = this.centerX + this.chart.radius * vector.x;\n y = this.centerY + this.chart.radius * vector.y;\n var tickXSize = x + (axis.minorTickLines.height * vector.x * (axis.tickPosition === 'Inside' ? -1 : 1));\n var tickYSize = y + (axis.minorTickLines.height * vector.y * (axis.tickPosition === 'Inside' ? -1 : 1));\n minorGird = minorGird.concat('M' + ' ' + this.centerX + ' ' + this.centerY\n + 'L ' + x + ' ' + y);\n minorTick = minorTick.concat('M' + ' ' + x + ' ' + y + 'L' + ' ' + (tickXSize) + ' ' +\n (tickYSize));\n }\n }\n direction.push(minorGird);\n direction.push(minorTick);\n return direction;\n };\n /**\n * To render the axis label.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.drawXAxisLabels = function (axis, index) {\n var chart = this.chart;\n var pointX = 0;\n var elementSize;\n var pointY = 0;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n var options;\n var vector;\n var labelText;\n var firstLabelX;\n var islabelInside = axis.labelPosition === 'Inside';\n var padding = 5;\n var lastLabelX;\n var textAnchor = '';\n var ticksbwtLabel = axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks'\n && chart.visibleSeries[0].type !== 'Radar' ? 0.5 : 0;\n var radius = chart.radius + axis.majorTickLines.height;\n radius = (islabelInside) ? -radius : radius;\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis), this.startAngle);\n if (!isNaN(vector.x) && !isNaN(vector.y)) {\n pointX = this.centerX + (radius + axis.majorTickLines.height + padding) * vector.x;\n pointY = this.centerY + (radius + axis.majorTickLines.height + padding) * vector.y;\n textAnchor = parseFloat(pointX.toFixed(1)) === parseFloat(this.centerX.toFixed(1)) ? 'middle' :\n ((pointX < this.centerX && !islabelInside) || (pointX > this.centerX && islabelInside)) ? 'end' : 'start';\n }\n labelText = axis.visibleLabels[i].text;\n if (i === 0) {\n firstLabelX = pointX;\n }\n else if (i === axis.visibleLabels.length - 1 && axis.valueType !== 'Category') {\n lastLabelX = measureText(labelText, axis.labelStyle).height;\n lastLabelX += pointX;\n labelText = (lastLabelX > firstLabelX) ? '' : labelText;\n }\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY, textAnchor, labelText, '', 'central');\n textElement(options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabel, labelElement);\n }\n this.element.appendChild(labelElement);\n };\n PolarRadarPanel.prototype.renderTickLine = function (axis, index, majorTickLine, minorTickLine) {\n var tickOptions;\n var chart = this.chart;\n if (axis.majorTickLines.width > 0) {\n tickOptions = new PathOption(chart.element.id + '_MajorTickLine_' + index, 'transparent', axis.majorTickLines.width, axis.majorTickLines.color || chart.themeStyle.majorTickLine, null, null, majorTickLine);\n chart.yAxisElements.appendChild(chart.renderer.drawPath(tickOptions));\n }\n if (axis.minorTickLines.width > 0) {\n tickOptions = new PathOption(chart.element.id + '_MinorTickLine_' + index, 'transparent', axis.minorTickLines.width, axis.minorTickLines.color || chart.themeStyle.minorTickLine, null, null, minorTickLine);\n chart.yAxisElements.appendChild(chart.renderer.drawPath(tickOptions));\n }\n };\n PolarRadarPanel.prototype.renderGridLine = function (axis, index, majorGrid, minorGird) {\n var chart = this.chart;\n var gridOptions;\n if (axis.majorGridLines.width > 0) {\n gridOptions = new PathOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', axis.majorGridLines.width, axis.majorGridLines.color || chart.themeStyle.majorGridLine, null, axis.majorGridLines.dashArray, majorGrid);\n this.element.appendChild(chart.renderer.drawPath(gridOptions));\n }\n if (axis.minorGridLines.width > 0) {\n gridOptions = new PathOption(chart.element.id + '_MinorGridLine_' + index, 'transparent', axis.minorGridLines.width, axis.minorGridLines.color || chart.themeStyle.minorGridLine, null, axis.minorGridLines.dashArray, minorGird);\n this.element.appendChild(chart.renderer.drawPath(gridOptions));\n }\n };\n return PolarRadarPanel;\n}(LineBase));\nexport { PolarRadarPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, PathOption, logBase, markerAnimate, PolarArc, valueToCoefficient, firstToLowerCase } from '../../common/utils/helper';\nimport { PolarRadarPanel } from '../axis/polar-radar-panel';\nimport { pointRender } from '../../common/model/constants';\nimport { Animation } from '@syncfusion/ej2-base';\n/**\n * `PolarSeries` module is used to render the polar series.\n */\nvar PolarSeries = /** @class */ (function (_super) {\n __extends(PolarSeries, _super);\n function PolarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Polar Series.\n * @return {void}.\n * @private\n */\n PolarSeries.prototype.render = function (series) {\n var seriesType = firstToLowerCase(series.drawType);\n if (series.drawType.indexOf('Column') > -1) {\n this.columnDrawTypeRender(series);\n }\n else {\n series.chart[seriesType + 'SeriesModule'].render(series, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n }\n };\n /**\n * Render Column DrawType.\n * @return {void}.\n * @private\n */\n PolarSeries.prototype.columnDrawTypeRender = function (series) {\n var visiblePoints = series.points;\n var rect;\n var options;\n var argsData;\n var startAngle;\n var endAngle;\n var itemCurrentXPos;\n var radius;\n var pointStartAngle;\n var pointEndAngle;\n var x1;\n var x2;\n var y1;\n var y2;\n var startValue;\n var endValue;\n var innerRadius;\n var centerX = (series.clipRect.width / 2) + series.clipRect.x;\n var dStartX;\n var dStartY;\n var centerY = (series.clipRect.height / 2) + series.clipRect.y;\n var dEndX;\n var dEndY;\n var axisInversed = series.xAxis.isInversed ? 1 : 0;\n var direction = '';\n var sumofYValues = 0;\n var interval = (series.points[1] ? series.points[1].xValue : 2 * series.points[0].xValue) - series.points[0].xValue;\n var ticks = series.xAxis.valueType === 'Category' && series.xAxis.labelPlacement === 'BetweenTicks' ? 0 : interval / 2;\n var rangeInterval = series.xAxis.valueType === 'DateTime' ? series.xAxis.dateTimeInterval : 1;\n var min = series.xAxis.actualRange.min;\n var inversedValue;\n this.getSeriesPosition(series);\n var position = series.xAxis.isInversed ? (series.rectCount - 1 - series.position) : series.position;\n var ticksbwtLabel = series.xAxis.valueType === 'Category' && series.xAxis.labelPlacement === 'BetweenTicks' ? 0.5\n : 0.5 - (series.rectCount / 2);\n do {\n sumofYValues += rangeInterval;\n min += rangeInterval;\n } while (min <= series.xAxis.actualRange.max - (series.xAxis.valueType === 'Category' ? 0 : 1));\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n inversedValue = series.xAxis.isInversed ? (series.xAxis.visibleRange.max - point.xValue) :\n point.xValue - series.xAxis.visibleRange.min;\n itemCurrentXPos = (inversedValue) +\n ((interval / series.rectCount) * position - ticks) + (sumofYValues / 360 * series.xAxis.startAngle);\n itemCurrentXPos = (((itemCurrentXPos) / (sumofYValues)));\n startAngle = 2 * Math.PI * (itemCurrentXPos + series.xAxis.startAngle);\n endAngle = 2 * Math.PI * ((itemCurrentXPos + series.xAxis.startAngle) + (interval / series.rectCount) / (sumofYValues));\n pointStartAngle = startAngle;\n pointEndAngle = endAngle;\n startAngle = (startAngle - 0.5 * Math.PI);\n endAngle = (endAngle - 0.5 * Math.PI) - 0.000001;\n if (series.drawType === 'StackingColumn' || series.drawType === 'RangeColumn') {\n startValue = series.drawType === 'RangeColumn' ? point.low : series.stackedValues.startValues[point.index];\n endValue = series.drawType === 'RangeColumn' ? point.high : series.stackedValues.endValues[point.index];\n endValue = (series.yAxis.valueType === 'Logarithmic' ?\n logBase(endValue === 0 ? 1 : endValue, series.yAxis.logBase) : endValue);\n endValue = endValue > series.yAxis.actualRange.max ? series.yAxis.actualRange.max : endValue;\n radius = startValue === endValue ? 0 : series.chart.radius * valueToCoefficient(endValue, series.yAxis);\n x1 = centerX + radius * Math.cos(startAngle);\n x2 = centerX + radius * Math.cos(endAngle);\n y1 = centerY + radius * Math.sin(startAngle);\n y2 = centerY + radius * Math.sin(endAngle);\n innerRadius = series.chart.radius * valueToCoefficient((startValue === 0 && series.yAxis.visibleRange.min !== 0) ? series.yAxis.visibleRange.min : startValue, series.yAxis);\n dStartX = centerX + innerRadius * Math.cos(startAngle);\n dStartY = centerY + innerRadius * Math.sin(startAngle);\n dEndX = centerX + innerRadius * Math.cos(endAngle);\n dEndY = centerY + innerRadius * Math.sin(endAngle);\n if (series.type === 'Polar') {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'A' + ' ' + radius + ' ' + radius + ' ' + '0' + ' '\n + '0' + ' ' + 1 + ' ' + x2 + ' ' + y2 + ' ' + 'L' + ' ' + dEndX + ' ' + dEndY + ' ' +\n 'A' + ' ' + innerRadius + ' ' + innerRadius + ' ' + '1' + ' ' + '0' + ' ' + '0' + ' '\n + dStartX + ' ' + dStartY + ' ' + 'z');\n }\n else {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'L' + ' ' + x2 + ' ' + y2 + ' ' + 'L'\n + dEndX + ' ' + dEndY + ' ' + 'L' + ' ' + dStartX + ' ' + dStartY + ' ' + 'z');\n }\n point.regionData = new PolarArc(pointStartAngle, pointEndAngle, innerRadius, radius, itemCurrentXPos);\n }\n else {\n endValue = point.yValue > series.yAxis.actualRange.max ? series.yAxis.actualRange.max : point.yValue;\n radius = series.chart.radius * valueToCoefficient((series.yAxis.valueType === 'Logarithmic' ? logBase(endValue, series.yAxis.logBase) : endValue), series.yAxis);\n x1 = centerX + radius * Math.cos(startAngle);\n x2 = centerX + radius * Math.cos(endAngle);\n y1 = centerY + radius * Math.sin(startAngle);\n y2 = centerY + radius * Math.sin(endAngle);\n if (series.type === 'Polar') {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'A' + ' ' + radius + ' ' + radius + ' ' + '0' + ' ' +\n '0' + ' ' + 1 + ' ' + x2 + ' ' + y2 + ' ' + 'L' + ' ' + centerX + ' ' +\n centerY + ' ' + 'z');\n }\n else {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'L' + ' ' + x2 + ' ' + y2 + ' ' + 'L' + ' '\n + centerX + ' ' + centerY + ' ' + 'z');\n }\n point.regionData = new PolarArc(pointStartAngle, pointEndAngle, 0, radius, itemCurrentXPos);\n }\n argsData = this.triggerEvent(series.chart, series, point);\n options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n if (!argsData.cancel) {\n this.appendLinePath(options, series, '');\n if (series.type === 'Polar') {\n point.symbolLocations.push({\n x: centerX + radius * Math.cos((startAngle + (endAngle - startAngle) / 2)),\n y: centerY + radius * Math.sin((startAngle + (endAngle - startAngle) / 2))\n });\n }\n else {\n point.symbolLocations.push({ x: (x1 + x2) / 2, y: (y1 + y2) / 2 });\n }\n }\n }\n }\n series.isRectSeries = true;\n };\n /**\n * To trigger the point rendering event.\n * @return {void}\n * @private\n */\n PolarSeries.prototype.triggerEvent = function (chart, series, point) {\n var argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, series.interior),\n border: series.setBorderColor(point, { width: series.border.width, color: series.border.color })\n };\n chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n return argsData;\n };\n /** get position for column drawtypes\n * @return {void}.\n * @private\n */\n PolarSeries.prototype.getSeriesPosition = function (series) {\n var chart = series.chart;\n var seriesCollection = [];\n var stackingGroup = [];\n var vSeries = { rectCount: 0, position: null };\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n if (series_1.visible && (series_1.type === 'Polar' || series_1.type === 'Radar') && series_1.drawType.indexOf('Column') !== -1) {\n seriesCollection.push(series_1);\n }\n }\n seriesCollection.forEach(function (series) {\n if (series.drawType.indexOf('Stacking') !== -1) {\n if (series.stackingGroup) {\n if (stackingGroup[series.stackingGroup] === undefined) {\n series.position = vSeries.rectCount;\n stackingGroup[series.stackingGroup] = vSeries.rectCount++;\n }\n else {\n series.position = stackingGroup[series.stackingGroup];\n }\n }\n else {\n if (vSeries.position === null) {\n series.position = vSeries.rectCount;\n vSeries.position = vSeries.rectCount++;\n }\n else {\n series.position = vSeries.position;\n }\n }\n }\n else {\n series.position = vSeries.rectCount++;\n }\n });\n seriesCollection.forEach(function (value) {\n value.rectCount = vSeries.rectCount;\n });\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n PolarSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n if (series.drawType === 'Scatter') {\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.symbolLocations.length || !rectElements[count]) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, point.index, point.symbolLocations[0], false);\n count++;\n }\n }\n else {\n for (count = 1; count < rectElements.length; count++) {\n this.doPolarRadarAnimation(rectElements[count], delay, duration, series);\n }\n }\n };\n /**\n * To do the Polar Radar draw type column animation.\n * @return {void}\n * @private\n */\n PolarSeries.prototype.doPolarRadarAnimation = function (animateElement, delay, duration, series) {\n var chartcenterX = series.clipRect.width / 2 + series.clipRect.x;\n var chartcenterY = series.clipRect.height / 2 + series.clipRect.y;\n var elementHeight = 0;\n animateElement.style.visibility = 'hidden';\n new Animation({}).animate(animateElement, {\n duration: duration,\n delay: delay,\n progress: function (args) {\n if (args.timeStamp > args.delay) {\n args.element.style.visibility = 'visible';\n elementHeight = ((args.timeStamp - args.delay) / args.duration);\n animateElement.setAttribute('transform', 'translate(' + chartcenterX\n + ' ' + chartcenterY + ') scale(' + elementHeight + ') translate(' + (-chartcenterX) + ' ' + (-chartcenterY) + ')');\n }\n },\n end: function (model) {\n animateElement.style.visibility = 'visible';\n animateElement.removeAttribute('transform');\n series.chart.trigger('animationComplete', { series: series });\n }\n });\n };\n /**\n * Get module name.\n */\n PolarSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'PolarSeries';\n };\n /**\n * To destroy the polar series.\n * @return {void}\n * @private\n */\n PolarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return PolarSeries;\n}(PolarRadarPanel));\nexport { PolarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { PolarSeries } from '../series/polar-series';\n/**\n * `RadarSeries` module is used to render the radar series.\n */\nvar RadarSeries = /** @class */ (function (_super) {\n __extends(RadarSeries, _super);\n function RadarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render radar Series.\n * @return {void}.\n * @private\n */\n RadarSeries.prototype.render = function (series) {\n var seriesType = firstToLowerCase(series.drawType);\n if (series.drawType.indexOf('Column') === -1) {\n series.chart[seriesType + 'SeriesModule'].render(series, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n }\n else {\n this.columnDrawTypeRender(series);\n }\n };\n /**\n * Get module name.\n */\n RadarSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'RadarSeries';\n };\n /**\n * To destroy the radar series.\n * @return {void}\n * @private\n */\n RadarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return RadarSeries;\n}(PolarSeries));\nexport { RadarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `StackingBarSeries` module is used to render the stacking bar series.\n */\nvar StackingBarSeries = /** @class */ (function (_super) {\n __extends(StackingBarSeries, _super);\n function StackingBarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Stacking bar series.\n * @return {void}\n * @private\n */\n StackingBarSeries.prototype.render = function (series) {\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var sideBySideInfo = this.getSideBySideInfo(series);\n var stackedValue = series.stackedValues;\n var rect;\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var pointStack = _a[_i];\n pointStack.symbolLocations = [];\n pointStack.regions = [];\n if (pointStack.visible && withInRange(series.points[pointStack.index - 1], pointStack, series.points[pointStack.index + 1], series)) {\n rect = this.getRectangle(pointStack.xValue + sideBySideInfo.start, stackedValue.endValues[pointStack.index], pointStack.xValue + sideBySideInfo.end, stackedValue.startValues[pointStack.index], series);\n argsData = this.triggerEvent(series, pointStack, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.drawRectangle(series, pointStack, rect, argsData);\n this.updateSymbolLocation(pointStack, rect, series);\n }\n }\n }\n };\n /**\n * To destroy the stacking bar.\n * @return {void}\n * @private\n */\n StackingBarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n StackingBarSeries.prototype.getModuleName = function () {\n return 'StackingBarSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StackingBarSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n return StackingBarSeries;\n}(ColumnBase));\nexport { StackingBarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, PathOption } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `CandleSeries` module is used to render the candle series.\n */\nvar CandleSeries = /** @class */ (function (_super) {\n __extends(CandleSeries, _super);\n function CandleSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Candle series.\n * @return {void}\n * @private\n */\n CandleSeries.prototype.render = function (series) {\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n var borderWidth = Math.max(series.border.width, 1);\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n var direction = '';\n var centerRegion = void 0;\n var tickRegion = void 0;\n var midPoint = void 0;\n midPoint = (sideBySideInfo.start + sideBySideInfo.end) / 2;\n //initializing after zooming and also normal initialization\n point.regions = [];\n point.symbolLocations = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n //region to cover the top and bottom ticks\n tickRegion = this.getRectangle((point.xValue + sideBySideInfo.median), Math.max(point.high, point.low), (point.xValue + sideBySideInfo.median), Math.min(point.high, point.low), series);\n if (!series.chart.requireInvertedAxis) {\n tickRegion.x -= borderWidth / 2;\n tickRegion.width = borderWidth;\n }\n else {\n tickRegion.y -= borderWidth / 2;\n tickRegion.height = borderWidth;\n }\n //get middleRect\n centerRegion = this.getRectangle((point.xValue + sideBySideInfo.start), Math.max(point.open, point.close), (point.xValue + sideBySideInfo.end), Math.min(point.open, point.close), series);\n direction = this.getPathString(tickRegion, centerRegion, series);\n argsData = this.triggerPointRenderEvent(series, point);\n if (!argsData.cancel) {\n this.drawCandle(series, point, centerRegion, argsData, direction);\n this.updateSymbolLocation(point, tickRegion, series);\n this.updateSymbolLocation(point, centerRegion, series);\n }\n }\n }\n };\n /**\n * Trigger point rendering event\n */\n CandleSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var fill;\n fill = this.getCandleColor(point, series);\n var border = { color: series.border.color, width: Math.max(series.border.width, 1) };\n return this.triggerEvent(series, point, fill, border);\n };\n /**\n * Find the color of the candle\n * @param series\n * @private\n */\n CandleSeries.prototype.getCandleColor = function (point, series) {\n var currentPoint = point;\n var previousPoint = series.points[point.index - 1];\n if (series.enableSolidCandles === false) {\n if (!previousPoint) {\n return series.bearFillColor;\n }\n else {\n return previousPoint.close > point.close ? series.bullFillColor :\n series.bearFillColor;\n }\n }\n else {\n return point.open > point.close ? series.bullFillColor :\n series.bearFillColor;\n }\n };\n /**\n * Finds the path of the candle shape\n * @param Series\n * @private\n */\n CandleSeries.prototype.getPathString = function (topRect, midRect, series) {\n var direction = '';\n var width = series.chart.requireInvertedAxis ? topRect.height : topRect.width;\n var center = series.chart.requireInvertedAxis ? topRect.y + topRect.height / 2 :\n topRect.x + topRect.width / 2;\n //tick 1 segment\n direction += !series.chart.requireInvertedAxis ?\n 'M' + ' ' + (center) + ' ' + (topRect.y) + ' ' + 'L' + ' ' + (center) + ' ' + midRect.y :\n 'M' + ' ' + (topRect.x) + ' ' + (center) + ' ' + 'L' + ' ' + (midRect.x) + ' ' + center;\n direction = direction.concat(' M' + ' ' + (midRect.x) + ' ' + (midRect.y) + ' ' +\n 'L' + ' ' + (midRect.x + midRect.width) + ' ' + (midRect.y) + ' ' +\n 'L' + ' ' + (midRect.x + midRect.width) + ' ' +\n (midRect.y + midRect.height) + ' ' +\n 'L' + ' ' + (midRect.x) + ' ' + (midRect.y + midRect.height) +\n ' ' + 'Z');\n direction += !series.chart.requireInvertedAxis ?\n ' M' + ' ' + (center) + ' ' + (midRect.y + midRect.height) + ' ' + 'L' + ' ' + (center) + ' ' + (topRect.y +\n topRect.height) :\n ' M' + ' ' + (midRect.x + midRect.width) + ' ' + (center) + ' ' + 'L' + ' ' +\n (topRect.x + topRect.width) + ' ' + center;\n return direction;\n };\n /**\n * Draws the candle shape\n * @param series\n * @private\n */\n CandleSeries.prototype.drawCandle = function (series, point, rect, argsData, direction) {\n var check = series.chart.requireInvertedAxis ? rect.height : rect.width;\n if (check <= 0) {\n return null;\n }\n var fill = !series.enableSolidCandles ?\n (point.open > point.close ? argsData.fill : 'transparent') : argsData.fill;\n argsData.border.color = argsData.fill;\n var options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index, fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n var candleElement = series.chart.renderer.drawPath(options);\n candleElement.setAttribute('aria-label', point.x.toString() + ':' + point.high.toString()\n + ':' + point.low.toString() + ':' + point.close.toString() + ':' + point.open.toString());\n series.seriesElement.appendChild(candleElement);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n CandleSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n CandleSeries.prototype.getModuleName = function () {\n return 'CandleSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the candle series.\n * @return {void}\n * @private\n */\n CandleSeries.prototype.destroy = function (chart) {\n /**\n * Destroys the candle series.\n */\n };\n return CandleSeries;\n}(ColumnBase));\nexport { CandleSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `StackingColumnSeries` module used to render the stacking column series.\n */\nvar StackingColumnSeries = /** @class */ (function (_super) {\n __extends(StackingColumnSeries, _super);\n function StackingColumnSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Stacking column series.\n * @return {void}\n * @private\n */\n StackingColumnSeries.prototype.render = function (series) {\n series.isRectSeries = true;\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var sideBySideInfo = this.getSideBySideInfo(series);\n var rect;\n var argsData;\n var stackedValue = series.stackedValues;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n rect = this.getRectangle(point.xValue + sideBySideInfo.start, stackedValue.endValues[point.index], point.xValue + sideBySideInfo.end, stackedValue.startValues[point.index], series);\n argsData = this.triggerEvent(series, point, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.drawRectangle(series, point, rect, argsData);\n this.updateSymbolLocation(point, rect, series);\n }\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StackingColumnSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the stacking column.\n * @return {void}\n * @private\n */\n StackingColumnSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n StackingColumnSeries.prototype.getModuleName = function () {\n return 'StackingColumnSeries';\n };\n return StackingColumnSeries;\n}(ColumnBase));\nexport { StackingColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PathOption, getPoint, withInRange } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `StepLineSeries` module is used to render the step line series.\n */\nvar StepLineSeries = /** @class */ (function (_super) {\n __extends(StepLineSeries, _super);\n function StepLineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Step line series.\n * @return {void}\n * @private\n */\n StepLineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var direction = '';\n var startPoint = 'M';\n var prevPoint = null;\n var pathOptions;\n var lineLength;\n var point1;\n var point2;\n var visiblePoints = this.improveChartPerformance(series);\n if (xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks') {\n lineLength = 0.5;\n }\n else {\n lineLength = 0;\n }\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n if (prevPoint != null) {\n point2 = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted);\n point1 = getPoint(prevPoint.xValue, prevPoint.yValue, xAxis, yAxis, isInverted);\n direction = direction.concat(startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ' + 'L' + ' ' +\n (point2.x) + ' ' + (point1.y) + 'L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n startPoint = 'L';\n }\n else {\n point1 = getPoint(point.xValue - lineLength, point.yValue, xAxis, yAxis, isInverted);\n direction = direction.concat(startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n startPoint = 'L';\n }\n this.storePointLocation(point, series, isInverted, getPoint);\n prevPoint = point;\n }\n else {\n prevPoint = series.emptyPointSettings.mode === 'Drop' ? prevPoint : null;\n startPoint = series.emptyPointSettings.mode === 'Drop' ? startPoint : 'M';\n }\n }\n point1 = getPoint(visiblePoints[visiblePoints.length - 1].xValue + lineLength, visiblePoints[visiblePoints.length - 1].yValue, xAxis, yAxis, isInverted);\n direction = direction.concat(startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n pathOptions = new PathOption(series.chart.element.id + '_Series_' + series.index, 'transparent', series.width, series.interior, series.opacity, series.dashArray, direction);\n this.appendLinePath(pathOptions, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StepLineSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * To destroy the step line series.\n * @return {void}\n * @private\n */\n StepLineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n StepLineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'StepLineSeries';\n };\n return StepLineSeries;\n}(LineBase));\nexport { StepLineSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getPoint, withInRange, ChartLocation, PathOption } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `StepAreaSeries` Module used to render the step area series.\n */\nvar StepAreaSeries = /** @class */ (function (_super) {\n __extends(StepAreaSeries, _super);\n function StepAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render StepArea series.\n * @return {void}\n * @private\n */\n StepAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var currentPoint;\n var secondPoint;\n var start = null;\n var direction = '';\n var pointsLength = series.points.length;\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var options;\n var point;\n var xValue;\n var lineLength;\n var prevPoint = null;\n if (xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks') {\n lineLength = 0.5;\n }\n else {\n lineLength = 0;\n }\n for (var i = 0; i < pointsLength; i++) {\n point = series.points[i];\n xValue = point.xValue;\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[i - 1], point, series.points[i + 1], series)) {\n if (start === null) {\n start = new ChartLocation(xValue, 0);\n // Start point for the current path\n currentPoint = getPoint(xValue - lineLength, origin, xAxis, yAxis, isInverted);\n direction += ('M' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n currentPoint = getPoint(xValue - lineLength, point.yValue, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n }\n // First Point to draw the Steparea path\n if (prevPoint != null) {\n currentPoint = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted);\n secondPoint = getPoint(prevPoint.xValue, prevPoint.yValue, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' +\n (currentPoint.x) + ' ' + (secondPoint.y) + 'L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n }\n else if (series.emptyPointSettings.mode === 'Gap') {\n currentPoint = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted);\n direction += 'L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ';\n }\n this.storePointLocation(point, series, isInverted, getPoint);\n prevPoint = point;\n }\n if (series.points[i + 1] && !series.points[i + 1].visible && series.emptyPointSettings.mode !== 'Drop') {\n // current start point\n currentPoint = getPoint(xValue + lineLength, origin, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y));\n start = null;\n prevPoint = null;\n }\n }\n if (pointsLength > 1) {\n start = { 'x': series.points[pointsLength - 1].xValue + lineLength, 'y': series.points[pointsLength - 1].yValue };\n secondPoint = getPoint(start.x, start.y, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (secondPoint.x) + ' ' + (secondPoint.y) + ' ');\n start = { 'x': series.points[pointsLength - 1].xValue + lineLength, 'y': origin };\n secondPoint = getPoint(start.x, start.y, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (secondPoint.x) + ' ' + (secondPoint.y) + ' ');\n }\n options = new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StepAreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * To destroy the step Area series.\n * @return {void}\n * @private\n */\n StepAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n StepAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'StepAreaSeries';\n };\n return StepAreaSeries;\n}(LineBase));\nexport { StepAreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PathOption, getPoint, withInRange, Rect, TransformToVisible } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `StackingAreaSeries` module used to render the Stacking Area series.\n */\nvar StackingAreaSeries = /** @class */ (function (_super) {\n __extends(StackingAreaSeries, _super);\n function StackingAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Stacking area series.\n * @return {void}\n * @private\n */\n StackingAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var polarAreaType = series.chart.chartAreaType === 'PolarRadar';\n var getCoordinate = polarAreaType ? TransformToVisible : getPoint;\n var lineDirection = '';\n var visiblePoints = series.points;\n var pointsLength = visiblePoints.length;\n var stackedvalue = series.stackedValues;\n var origin = polarAreaType ?\n Math.max(series.yAxis.visibleRange.min, stackedvalue.endValues[0]) :\n Math.max(series.yAxis.visibleRange.min, stackedvalue.startValues[0]);\n var border = series.border;\n var options;\n var startPoint = 0;\n var point1 = getCoordinate(visiblePoints[0].xValue, origin, xAxis, yAxis, isInverted, series);\n var point2;\n lineDirection = lineDirection.concat('M' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n for (var i = 0; i < pointsLength; i++) {\n visiblePoints[i].symbolLocations = [];\n visiblePoints[i].regions = [];\n if (visiblePoints[i].visible && withInRange(visiblePoints[i - 1], visiblePoints[i], visiblePoints[i + 1], series)) {\n point1 = getCoordinate(visiblePoints[i].xValue, stackedvalue.endValues[i], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('L' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n visiblePoints[i].symbolLocations.push(getCoordinate(visiblePoints[i].xValue, stackedvalue.endValues[i], xAxis, yAxis, isInverted, series));\n visiblePoints[i].regions.push(new Rect(visiblePoints[i].symbolLocations[0].x - series.marker.width, visiblePoints[i].symbolLocations[0].y - series.marker.height, 2 * series.marker.width, 2 * series.marker.height));\n }\n else {\n if (series.emptyPointSettings.mode !== 'Drop') {\n for (var j = i - 1; j >= startPoint; j--) {\n point2 = getCoordinate(visiblePoints[j].xValue, stackedvalue.startValues[j], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n if (visiblePoints[i + 1] && visiblePoints[i + 1].visible) {\n point1 = getCoordinate(visiblePoints[i + 1].xValue, stackedvalue.startValues[i + 1], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('M' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n }\n startPoint = i + 1;\n }\n }\n }\n if (series.chart.chartAreaType === 'PolarRadar' && visiblePoints.length > 1) {\n point1 = { 'x': series.points[0].xValue, 'y': stackedvalue.endValues[0] };\n point2 = getCoordinate(point1.x, point1.y, xAxis, yAxis, isInverted, series);\n lineDirection += ('L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n for (var j = pointsLength - 1; j >= startPoint; j--) {\n var previousSeries = this.getPreviousSeries(series);\n if (previousSeries.emptyPointSettings.mode !== 'Drop' || !previousSeries.points[j].isEmpty) {\n point2 = getCoordinate(visiblePoints[j].xValue, stackedvalue.startValues[j], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat(((j === (pointsLength - 1) && polarAreaType) ? 'M' : 'L')\n + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n }\n options = new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, lineDirection);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StackingAreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * To destroy the stacking area.\n * @return {void}\n * @private\n */\n StackingAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n StackingAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'StackingAreaSeries';\n };\n /**\n * To find previous visible series\n */\n StackingAreaSeries.prototype.getPreviousSeries = function (series) {\n var seriesCollection = series.chart.visibleSeries;\n for (var i = 0, length_1 = seriesCollection.length; i < length_1; i++) {\n if (series.index === seriesCollection[i].index && i !== 0) {\n return seriesCollection[i - 1];\n }\n }\n return seriesCollection[0];\n };\n return StackingAreaSeries;\n}(LineBase));\nexport { StackingAreaSeries };\n","import { withInRange, getPoint, PathOption, drawSymbol, Size, Rect, markerAnimate, TransformToVisible } from '../../common/utils/helper';\nimport { pointRender } from '../../common/model/constants';\n/**\n * `ScatterSeries` module is used to render the scatter series.\n */\nvar ScatterSeries = /** @class */ (function () {\n function ScatterSeries() {\n }\n /**\n * Render the scatter series.\n * @return {void}\n * @private\n */\n ScatterSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var seriesIndex = series.index;\n var marker = series.marker;\n var border = series.border;\n var visiblePoints = series.points;\n var pointIndex;\n var symbolId;\n var shapeOption;\n var argsData;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n symbolId = series.chart.element.id + '_Series_' + seriesIndex + '_Point_' + point.index;\n argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, series.interior),\n border: series.setBorderColor(point, { width: series.border.width, color: series.border.color }),\n height: marker.height, width: marker.width, shape: marker.shape\n };\n series.chart.trigger(pointRender, argsData);\n if (!argsData.cancel) {\n point.symbolLocations.push(getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series));\n point.color = argsData.fill;\n shapeOption = new PathOption(symbolId, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, null);\n series.seriesElement.appendChild(drawSymbol(point.symbolLocations[0], argsData.shape, new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, point.x.toString() + ':' + point.yValue.toString()));\n point.regions.push(new Rect(point.symbolLocations[0].x - marker.width, point.symbolLocations[0].y - marker.height, 2 * marker.width, 2 * marker.height));\n point.marker = {\n border: argsData.border, fill: argsData.fill,\n height: argsData.height, visible: true,\n width: argsData.width, shape: argsData.shape\n };\n }\n else {\n point.marker = { visible: true };\n }\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n ScatterSeries.prototype.doAnimation = function (series) {\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.symbolLocations.length || !rectElements[count]) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, point.index, point.symbolLocations[0], false);\n count++;\n }\n };\n /**\n * Get module name.\n */\n ScatterSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'ScatterSeries';\n };\n /**\n * To destroy the scatter.\n * @return {void}\n */\n ScatterSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return ScatterSeries;\n}());\nexport { ScatterSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `RangeColumnSeries` module is used to render the range column series.\n */\nvar RangeColumnSeries = /** @class */ (function (_super) {\n __extends(RangeColumnSeries, _super);\n function RangeColumnSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Range Column series.\n * @return {void}\n * @private\n */\n RangeColumnSeries.prototype.render = function (series) {\n var rect;\n var sideBySideInfo = this.getSideBySideInfo(series);\n //let origin: number = Math.max(series.yAxis.visibleRange.min, 0);\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var rangePoint = _a[_i];\n rangePoint.symbolLocations = [];\n rangePoint.regions = [];\n if (rangePoint.visible && withInRange(series.points[rangePoint.index - 1], rangePoint, series.points[rangePoint.index + 1], series)) {\n rect = this.getRectangle(rangePoint.xValue + sideBySideInfo.start, rangePoint.high, rangePoint.xValue + sideBySideInfo.end, rangePoint.low, series);\n argsData = this.triggerEvent(series, rangePoint, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.updateSymbolLocation(rangePoint, rect, series);\n this.drawRectangle(series, rangePoint, rect, argsData);\n }\n }\n }\n };\n /**\n * Get module name.\n */\n RangeColumnSeries.prototype.getModuleName = function () {\n return 'RangeColumnSeries';\n /**\n * return the module name\n */\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n RangeColumnSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the range column series.\n * @return {void}\n * @private\n */\n RangeColumnSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return RangeColumnSeries;\n}(ColumnBase));\nexport { RangeColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PathOption, withInRange, subArraySum } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `WaterfallSeries` module is used to render the waterfall series.\n */\nvar WaterfallSeries = /** @class */ (function (_super) {\n __extends(WaterfallSeries, _super);\n function WaterfallSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render waterfall series.\n * @return {void}\n * @private\n */\n WaterfallSeries.prototype.render = function (series) {\n var rect;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var argsData;\n var prevEndValue = 0;\n var direction = '';\n var currentEndValue = 0;\n var originValue;\n var prevRegion = null;\n var y;\n var isInversed = series.chart.requireInvertedAxis;\n var intermediateOrigin = 0;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n //Calcute the current point value to render waterfall series.\n var isSum = this.isIntermediateSum(series, point.index);\n var totalSum = this.isSumIndex(series, point.index);\n currentEndValue += isSum || totalSum === true ? 0 : point.yValue;\n //Calcute the origin value for points\n originValue = (isSum === true ? intermediateOrigin : ((prevEndValue !== null && !totalSum) ? prevEndValue : origin));\n rect = this.getRectangle(point.xValue + sideBySideInfo.start, currentEndValue, point.xValue + sideBySideInfo.end, originValue, series);\n argsData = this.triggerPointRenderEvent(series, point);\n //intermediateOrigin is used only for imtermediate data \n if (isSum) {\n intermediateOrigin = currentEndValue;\n }\n prevEndValue = currentEndValue;\n if (!argsData.cancel) {\n this.updateSymbolLocation(point, rect, series);\n this.drawRectangle(series, point, rect, argsData);\n }\n var currentRegion = point.regions[0];\n if (prevRegion !== null) {\n var prevLeft = isInversed ? prevRegion.x : prevRegion.y;\n var currentLeft = isInversed ? currentRegion.x : currentRegion.y;\n var prevBottom = isInversed ? prevRegion.x + prevRegion.width : prevRegion.y + prevRegion.height;\n var currentBottom = isInversed ?\n currentRegion.x + currentRegion.width : currentRegion.y + currentRegion.height;\n if (Math.round(prevLeft) === Math.round(currentLeft) ||\n Math.round(prevBottom) === Math.round(currentLeft)) {\n y = isInversed ? currentRegion.x : currentRegion.y;\n }\n else {\n y = currentBottom;\n }\n if (isInversed) {\n direction = direction.concat('M' + ' ' + y + ' ' + (prevRegion.y + prevRegion.height) + ' ' +\n 'L' + ' ' + y + ' ' + currentRegion.y + ' ');\n }\n else {\n direction = direction.concat('M' + ' ' + prevRegion.x + ' ' + y + ' ' +\n 'L' + ' ' + (currentRegion.x + currentRegion.width) + ' ' + y + ' ');\n }\n }\n prevRegion = point.regions[0];\n }\n }\n var options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Connector_', 'none', series.connector.width, series.connector.color, series.opacity, series.connector.dashArray, direction);\n var element = series.chart.renderer.drawPath(options);\n if (series.chart.animateSeries) {\n element.style.visibility = 'hidden';\n }\n series.seriesElement.appendChild(element);\n };\n /**\n * To check intermediateSumIndex in waterfall series.\n * @return boolean\n * @private\n */\n WaterfallSeries.prototype.isIntermediateSum = function (series, index) {\n if (series.intermediateSumIndexes !== undefined && series.intermediateSumIndexes.indexOf(index) !== -1) {\n return true;\n }\n return false;\n };\n /**\n * To check sumIndex in waterfall series.\n * @return boolean\n * @private\n */\n WaterfallSeries.prototype.isSumIndex = function (series, index) {\n if (series.sumIndexes !== undefined && series.sumIndexes.indexOf(index) !== -1) {\n return true;\n }\n return false;\n };\n /**\n * To trigger the point rendering event for waterfall series.\n * @return IPointRenderEventArgs\n * @private\n */\n WaterfallSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var color;\n var isSum = this.isIntermediateSum(series, point.index);\n var totalSum = this.isSumIndex(series, point.index);\n if (isSum || totalSum) {\n color = series.summaryFillColor;\n }\n else if (point.y < 0) {\n color = series.negativeFillColor;\n }\n else {\n color = series.interior;\n }\n return this.triggerEvent(series, point, color, { color: series.border.color, width: series.border.width });\n };\n /**\n * Add sumIndex and intermediateSumIndex data.\n * @return {object[]}\n * @private\n */\n WaterfallSeries.prototype.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 } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `HiloOpenCloseSeries` module is used to render the hiloOpenClose series.\n */\nvar HiloOpenCloseSeries = /** @class */ (function (_super) {\n __extends(HiloOpenCloseSeries, _super);\n function HiloOpenCloseSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render HiloOpenCloseSeries series.\n * @return {void}\n * @private\n */\n HiloOpenCloseSeries.prototype.render = function (series) {\n var highLowRect;\n var open;\n var close;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n var borderWidth = Math.max(series.border.width, 2);\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible &&\n withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n //highlow\n highLowRect = this.getRectangle(point.xValue + sideBySideInfo.start, Math.max(point.high, point.low), point.xValue + sideBySideInfo.end, Math.min(point.high, point.low), series);\n point.regions.push(this.getRectangle(point.xValue + sideBySideInfo.median, Math.max(point.high, point.low), point.xValue + sideBySideInfo.median, Math.min(point.high, point.low), series));\n this.updateTickRegion(!series.chart.requireInvertedAxis, point.regions[0], borderWidth);\n //open\n point.regions.push(this.getRectangle(point.xValue + sideBySideInfo.start, Math.max(point.open, point.close), point.xValue + sideBySideInfo.median, Math.max(point.open, point.close), series));\n //close\n point.regions.push(this.getRectangle(point.xValue + sideBySideInfo.median, Math.min(point.open, point.close), point.xValue + sideBySideInfo.end, Math.min(point.open, point.close), series));\n argsData = this.triggerPointRenderEvent(series, point);\n if (!argsData.cancel) {\n this.updateSymbolLocation(point, point.regions[0], series);\n var open_1 = { x: point.regions[1].x, y: point.regions[1].y };\n var close_1 = { x: point.regions[2].x, y: point.regions[2].y };\n this.drawHiloOpenClosePath(series, point, open_1, close_1, highLowRect, argsData);\n }\n this.updateTickRegion(series.chart.requireInvertedAxis, point.regions[1], borderWidth);\n this.updateTickRegion(series.chart.requireInvertedAxis, point.regions[2], borderWidth);\n }\n }\n };\n /**\n * Updates the tick region\n */\n HiloOpenCloseSeries.prototype.updateTickRegion = function (horizontal, region, borderWidth) {\n if (horizontal) {\n region.x -= borderWidth / 2;\n region.width = borderWidth;\n }\n else {\n region.y -= borderWidth / 2;\n region.height = borderWidth;\n }\n };\n /**\n * Trigger point rendering event\n */\n HiloOpenCloseSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var fill = (point.open <= point.close) ? series.bearFillColor : series.bullFillColor;\n var border = { color: series.border.color, width: Math.max(series.border.width, 1) };\n return this.triggerEvent(series, point, fill, border);\n };\n /**\n * To draw the rectangle for points.\n * @return {void}\n * @private\n */\n HiloOpenCloseSeries.prototype.drawHiloOpenClosePath = function (series, point, open, close, rect, argsData) {\n // region highlow\n var direction;\n var options;\n if (series.chart.requireInvertedAxis) {\n direction = ('M' + ' ' + (rect.x) + ' ' + (rect.y + rect.height / 2) + ' ' +\n 'L' + ' ' + (rect.x + rect.width) + ' ' + (rect.y + rect.height / 2) + ' ');\n direction += ('M' + ' ' + (open.x) + ' ' + (rect.y + rect.height / 2) + ' ' +\n 'L' + ' ' + (open.x) + ' ' + (rect.y + rect.height) + ' ');\n direction += ('M' + ' ' + (close.x) + ' ' + (rect.y + rect.height / 2) + ' ' +\n 'L' + ' ' + (close.x) + ' ' + (rect.y) + ' ');\n }\n else {\n direction = ('M' + ' ' + (rect.x + rect.width / 2) + ' ' + (rect.y + rect.height) + ' ' +\n 'L' + ' ' + (rect.x + rect.width / 2) + ' ' + (rect.y) + ' ');\n //region opentick\n direction += ('M' + ' ' + (rect.x) + ' ' + (open.y) + ' ' +\n 'L' + ' ' + (rect.x + rect.width / 2) + ' ' + (open.y) + ' ');\n //region closetick\n direction += ('M' + ' ' + (rect.x + rect.width / 2) + ' ' + (close.y) + ' ' +\n 'L' + ' ' + (rect.x + rect.width) + ' ' + (close.y) + ' ');\n }\n options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index, argsData.fill, argsData.border.width, argsData.fill, series.opacity, series.dashArray, direction);\n var element = series.chart.renderer.drawPath(options);\n element.setAttribute('aria-label', point.x.toString() + ':' + point.high.toString()\n + ':' + point.low.toString() + ':' + point.close.toString() + ':' + point.open.toString());\n series.seriesElement.appendChild(element);\n };\n /**\n * Get module name.\n */\n HiloOpenCloseSeries.prototype.getModuleName = function () {\n return 'HiloOpenCloseSeries';\n /**\n * return the module name\n */\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n HiloOpenCloseSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the column series.\n * @return {void}\n * @private\n */\n HiloOpenCloseSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return HiloOpenCloseSeries;\n}(ColumnBase));\nexport { HiloOpenCloseSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, getPoint, PathOption, Rect } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `RangeAreaSeries` module is used to render the range area series.\n */\nvar RangeAreaSeries = /** @class */ (function (_super) {\n __extends(RangeAreaSeries, _super);\n function RangeAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render RangeArea Series.\n * @return {void}.\n * @private\n */\n RangeAreaSeries.prototype.render = function (series) {\n var point;\n var direction = '';\n var command = 'M';\n var closed = undefined;\n var visiblePoints = this.improveChartPerformance(series);\n for (var i = 0, length_1 = visiblePoints.length; i < length_1; i++) {\n point = visiblePoints[i];\n point.symbolLocations = [];\n point.regions = [];\n var low = Math.min(point.low, point.high);\n var high = Math.max(point.low, point.high);\n if (series.yAxis.isInversed) {\n var temp = low;\n low = high;\n high = temp;\n }\n var lowPoint = getPoint(point.xValue, low, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n var highPoint = getPoint(point.xValue, high, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n point.symbolLocations.push(highPoint);\n point.symbolLocations.push(lowPoint);\n var rect = new Rect(Math.min(lowPoint.x, highPoint.x), Math.min(lowPoint.y, highPoint.y), Math.max(Math.abs(highPoint.x - lowPoint.x), series.marker.width), Math.max(Math.abs(highPoint.y - lowPoint.y), series.marker.width));\n if (!series.chart.requireInvertedAxis) {\n rect.x -= series.marker.width / 2;\n }\n else {\n rect.y -= series.marker.width / 2;\n }\n point.regions.push(rect);\n //Path to connect the high points\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n direction = direction.concat(command + ' ' + (lowPoint.x) + ' ' + (lowPoint.y) + ' ');\n closed = false;\n if ((i + 1 < visiblePoints.length && !visiblePoints[i + 1].visible)\n || i === visiblePoints.length - 1) {\n // Path to connect the low points\n direction = this.closeRangeAreaPath(visiblePoints, point, series, direction, i);\n command = 'M';\n direction = direction.concat(' ' + 'Z');\n closed = true;\n }\n command = 'L';\n }\n else {\n if (closed === false && i !== 0) {\n direction = this.closeRangeAreaPath(visiblePoints, point, series, direction, i);\n closed = true;\n }\n command = 'M';\n point.symbolLocations = [];\n }\n }\n var name = series.category === 'Indicator' ? series.chart.element.id + '_Indicator_' + series.index + '_' + series.name :\n series.chart.element.id + '_Series_' + series.index;\n var options = new PathOption(name, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * path for rendering the low points\n * @return {void}.\n * @private\n */\n RangeAreaSeries.prototype.closeRangeAreaPath = function (visiblePoints, point, series, direction, i) {\n for (var j = i; j >= 0; j--) {\n if (visiblePoints[j].visible && visiblePoints[j].symbolLocations[0]) {\n point = visiblePoints[j];\n direction += 'L' + ' ' + (point.symbolLocations[0].x) + ' ' + ((point.symbolLocations[0].y)) + ' ';\n }\n else {\n break;\n }\n }\n return direction;\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n RangeAreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * Get module name.\n */\n RangeAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'RangeAreaSeries';\n };\n /**\n * To destroy the line series.\n * @return {void}\n * @private\n */\n RangeAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroys range area series\n */\n };\n return RangeAreaSeries;\n}(LineBase));\nexport { RangeAreaSeries };\n","import { withInRange, getPoint, PathOption, drawSymbol, Size, Rect, markerAnimate } from '../../common/utils/helper';\nimport { pointRender } from '../../common/model/constants';\n/**\n * `BubbleSeries` module is used to render the bubble series.\n */\nvar BubbleSeries = /** @class */ (function () {\n function BubbleSeries() {\n }\n /**\n * Render the Bubble series.\n * @return {void}\n * @private\n */\n BubbleSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var marker = series.marker;\n var visiblePoints = series.points;\n var shapeOption;\n var argsData;\n //let bubbleMode: RadiusMode = bubbleOptions.radiusMode;\n var segmentRadius;\n var radius;\n var value = Math.max(series.chart.initialClipRect.height, series.chart.initialClipRect.width);\n var percentChange = value / 100;\n var maxRadius = series.maxRadius * percentChange;\n var minRadius = series.minRadius * percentChange;\n var maximumSize = null;\n var maxValue = null;\n if ((series.maxRadius === null || series.minRadius === null)) {\n for (var _i = 0, _a = series.chart.visibleSeries; _i < _a.length; _i++) {\n var value_1 = _a[_i];\n if (value_1.type === 'Bubble' && value_1.visible === true && (value_1.maxRadius === null || value_1.minRadius === null)) {\n maximumSize = value_1.sizeMax > maximumSize ? value_1.sizeMax : maximumSize;\n }\n }\n maxValue = (value / 5) / 2;\n minRadius = maxRadius = 1;\n radius = maxValue * maxRadius;\n }\n else {\n maximumSize = series.sizeMax;\n radius = maxRadius - minRadius;\n }\n for (var _b = 0, visiblePoints_1 = visiblePoints; _b < visiblePoints_1.length; _b++) {\n var bubblePoint = visiblePoints_1[_b];\n bubblePoint.symbolLocations = [];\n bubblePoint.regions = [];\n if (bubblePoint.visible &&\n withInRange(visiblePoints[bubblePoint.index - 1], bubblePoint, visiblePoints[bubblePoint.index + 1], series)) {\n if ((series.maxRadius === null || series.minRadius === null)) {\n segmentRadius = radius * Math.abs(+bubblePoint.size / maximumSize);\n }\n else {\n segmentRadius = minRadius + radius * Math.abs(+bubblePoint.size / maximumSize);\n }\n segmentRadius = segmentRadius || minRadius;\n argsData = {\n cancel: false, name: pointRender, series: series, point: bubblePoint,\n fill: series.setPointColor(bubblePoint, series.interior),\n border: series.setBorderColor(bubblePoint, { width: series.border.width, color: series.border.color }),\n height: 2 * segmentRadius, width: 2 * segmentRadius\n };\n series.chart.trigger(pointRender, argsData);\n if (!argsData.cancel) {\n bubblePoint.symbolLocations.push(getPoint(bubblePoint.xValue, bubblePoint.yValue, xAxis, yAxis, isInverted));\n bubblePoint.color = argsData.fill;\n shapeOption = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + bubblePoint.index, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, null);\n series.seriesElement.appendChild(drawSymbol(bubblePoint.symbolLocations[0], 'Circle', new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, bubblePoint.x.toString() + ':' + bubblePoint.yValue.toString()));\n bubblePoint.regions.push(new Rect(bubblePoint.symbolLocations[0].x - segmentRadius, bubblePoint.symbolLocations[0].y - segmentRadius, 2 * segmentRadius, 2 * segmentRadius));\n bubblePoint.marker = {\n border: argsData.border, fill: argsData.fill,\n height: argsData.height, visible: true,\n shape: 'Circle', width: argsData.width\n };\n }\n else {\n bubblePoint.marker = { visible: false };\n }\n }\n }\n };\n /**\n * To destroy the Bubble.\n * @return {void}\n * @private\n */\n BubbleSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n BubbleSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'BubbleSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n BubbleSeries.prototype.doAnimation = function (series) {\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var bubblePoint = _a[_i];\n if (!bubblePoint.symbolLocations.length) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, bubblePoint.index, bubblePoint.symbolLocations[0], false);\n count++;\n }\n };\n return BubbleSeries;\n}());\nexport { BubbleSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartLocation, ControlPoints } from '../../common/utils/helper';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { LineBase } from './line-base';\n/**\n * render Line series\n */\nvar SplineBase = /** @class */ (function (_super) {\n __extends(SplineBase, _super);\n /** @private */\n function SplineBase(chartModule) {\n var _this = _super.call(this, chartModule) || this;\n _this.splinePoints = [];\n return _this;\n }\n /**\n * To find the control points for spline.\n * @return {void}\n * @private\n */\n SplineBase.prototype.findSplinePoint = function (series) {\n var value;\n var points = this.filterEmptyPoints(series);\n this.splinePoints = this.findSplineCoefficients(points, series);\n if (points.length > 1) {\n series.drawPoints = [];\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n if (point.index !== 0) {\n var previous = this.getPreviousIndex(points, point.index - 1, series);\n value = this.getControlPoints(points[previous], point, this.splinePoints[previous], this.splinePoints[point.index], series);\n series.drawPoints.push(value);\n if (point.yValue && value.controlPoint1.y && value.controlPoint2.y) {\n series.yMin = Math.floor(Math.min(series.yMin, point.yValue, value.controlPoint1.y, value.controlPoint2.y));\n series.yMax = Math.ceil(Math.max(series.yMax, point.yValue, value.controlPoint1.y, value.controlPoint2.y));\n }\n }\n }\n }\n };\n SplineBase.prototype.getPreviousIndex = function (points, i, series) {\n if (series.emptyPointSettings.mode !== 'Drop') {\n return i;\n }\n while (isNullOrUndefined(points[i]) && i > -1) {\n i = i - 1;\n }\n return i;\n };\n SplineBase.prototype.getNextIndex = function (points, i, series) {\n if (series.emptyPointSettings.mode !== 'Drop') {\n return i;\n }\n while (isNullOrUndefined(points[i]) && i < points.length) {\n i = i + 1;\n }\n return i;\n };\n SplineBase.prototype.filterEmptyPoints = function (series) {\n if (series.emptyPointSettings.mode !== 'Drop') {\n return series.points;\n }\n var points = extend([], series.points, null, true);\n for (var i = 0; i < points.length; i++) {\n points[i].index = i;\n if (points[i].isEmpty) {\n points[i].symbolLocations = [];\n points[i].regions = [];\n points.splice(i, 1);\n i--;\n }\n }\n return points;\n };\n /**\n * To find the natural spline.\n * @return {void}\n * @private\n */\n SplineBase.prototype.findSplineCoefficients = function (points, series) {\n var count = points.length;\n var ySpline = [];\n var ySplineDuplicate = [];\n var coefficient1;\n var coefficient2;\n var coefficient3;\n var dy1;\n var dy2;\n var dx = [];\n var dy = [];\n var slope = [];\n var interPoint;\n var slopeLength;\n var cardinalSplineTension = series.cardinalSplineTension ? series.cardinalSplineTension : 0.5;\n cardinalSplineTension = cardinalSplineTension < 0 ? 0 : cardinalSplineTension > 1 ? 1 : cardinalSplineTension;\n switch (series.splineType) {\n case 'Monotonic':\n for (var i = 0; i < count - 1; i++) {\n dx[i] = points[i + 1].xValue - points[i].xValue;\n dy[i] = points[i + 1].yValue - points[i].yValue;\n slope[i] = dy[i] / dx[i];\n }\n //interpolant points\n slopeLength = slope.length;\n // to find the first and last co-efficient value\n ySpline[0] = slope[0];\n ySpline[count - 1] = slope[slopeLength - 1];\n //to find the other co-efficient values\n for (var j = 0; j < dx.length; j++) {\n if (slopeLength > j + 1) {\n if (slope[j] * slope[j + 1] <= 0) {\n ySpline[j + 1] = 0;\n }\n else {\n interPoint = dx[j] + dx[j + 1];\n ySpline[j + 1] = 3 * interPoint / ((interPoint + dx[j + 1]) / slope[j] + (interPoint + dx[j]) / slope[j + 1]);\n }\n }\n }\n break;\n case 'Cardinal':\n for (var i = 0; i < count; i++) {\n if (i === 0) {\n ySpline[i] = (count > 2) ? (cardinalSplineTension * (points[i + 2].xValue - points[i].xValue)) : 0;\n }\n else if (i === (count - 1)) {\n ySpline[i] = (count > 2) ? (cardinalSplineTension * (points[count - 1].xValue - points[count - 3].xValue)) : 0;\n }\n else {\n ySpline[i] = (cardinalSplineTension * (points[i + 1].xValue - points[i - 1].xValue));\n }\n }\n break;\n default:\n if (series.splineType === 'Clamped') {\n var firstIndex = (points[1].yValue - points[0].yValue) / (points[1].xValue - points[0].xValue);\n var lastIndex = (points[count - 1].xValue - points[count - 2].xValue) /\n (points[count - 1].yValue - points[count - 2].yValue);\n ySpline[0] = (3 * (points[1].yValue - points[0].yValue)) / (points[1].xValue - points[0].xValue) - 3;\n ySplineDuplicate[0] = 0.5;\n ySpline[points.length - 1] = (3 * (points[points.length - 1].yValue - points[points.length - 2].yValue)) /\n (points[points.length - 1].xValue - points[points.length - 2].xValue);\n ySpline[0] = ySplineDuplicate[0] = Math.abs(ySpline[0]) === Infinity ? 0 : ySpline[0];\n ySpline[points.length - 1] = ySplineDuplicate[points.length - 1] = Math.abs(ySpline[points.length - 1]) === Infinity ?\n 0 : ySpline[points.length - 1];\n }\n else {\n // assigning the first and last value as zero\n ySpline[0] = ySplineDuplicate[0] = 0;\n ySpline[points.length - 1] = 0;\n }\n for (var i = 1; i < count - 1; i++) {\n coefficient1 = points[i].xValue - points[i - 1].xValue;\n coefficient2 = points[i + 1].xValue - points[i - 1].xValue;\n coefficient3 = points[i + 1].xValue - points[i].xValue;\n dy1 = points[i + 1].yValue - points[i].yValue || null;\n dy2 = points[i].yValue - points[i - 1].yValue || null;\n if (coefficient1 === 0 || coefficient2 === 0 || coefficient3 === 0) {\n ySpline[i] = 0;\n ySplineDuplicate[i] = 0;\n }\n else {\n var p = 1 / (coefficient1 * ySpline[i - 1] + 2 * coefficient2);\n ySpline[i] = -p * coefficient3;\n ySplineDuplicate[i] = p * (6 * (dy1 / coefficient3 - dy2 / coefficient1) - coefficient1 * ySplineDuplicate[i - 1]);\n }\n }\n for (var k = count - 2; k >= 0; k--) {\n ySpline[k] = ySpline[k] * ySpline[k + 1] + ySplineDuplicate[k];\n }\n break;\n }\n return ySpline;\n };\n /**\n * To find the control points for spline.\n * @return {void}\n * @private\n */\n SplineBase.prototype.getControlPoints = function (point1, point2, ySpline1, ySpline2, series) {\n var controlPoint1;\n var controlPoint2;\n var point;\n var ySplineDuplicate1 = ySpline1;\n var ySplineDuplicate2 = ySpline2;\n switch (series.splineType) {\n case 'Cardinal':\n if (series.xAxis.valueType === 'DateTime') {\n ySplineDuplicate1 = ySpline1 / this.dateTimeInterval(series);\n ySplineDuplicate2 = ySpline2 / this.dateTimeInterval(series);\n }\n controlPoint1 = new ChartLocation(point1.xValue + ySpline1 / 3, point1.yValue + ySplineDuplicate1 / 3);\n controlPoint2 = new ChartLocation(point2.xValue - ySpline2 / 3, point2.yValue - ySplineDuplicate2 / 3);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n case 'Monotonic':\n var value = (point2.xValue - point1.xValue) / 3;\n controlPoint1 = new ChartLocation(point1.xValue + value, point1.yValue + ySpline1 * value);\n controlPoint2 = new ChartLocation(point2.xValue - value, point2.yValue - ySpline2 * value);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n default:\n var one3 = 1 / 3.0;\n var deltaX2 = (point2.xValue - point1.xValue);\n deltaX2 = deltaX2 * deltaX2;\n var y1 = one3 * (((2 * point1.yValue) + point2.yValue) - one3 * deltaX2 * (ySpline1 + 0.5 * ySpline2));\n var y2 = one3 * ((point1.yValue + (2 * point2.yValue)) - one3 * deltaX2 * (0.5 * ySpline1 + ySpline2));\n controlPoint1 = new ChartLocation((2 * (point1.xValue) + (point2.xValue)) * one3, y1);\n controlPoint2 = new ChartLocation(((point1.xValue) + 2 * (point2.xValue)) * one3, y2);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n }\n return point;\n };\n /**\n * calculate datetime interval in hours\n *\n */\n SplineBase.prototype.dateTimeInterval = function (series) {\n var interval = series.xAxis.actualIntervalType;\n var intervalInMilliseconds;\n if (interval === 'Years') {\n intervalInMilliseconds = 365 * 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Months') {\n intervalInMilliseconds = 30 * 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Days') {\n intervalInMilliseconds = 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Hours') {\n intervalInMilliseconds = 60 * 60 * 1000;\n }\n else if (interval === 'Minutes') {\n intervalInMilliseconds = 60 * 1000;\n }\n else if (interval === 'Seconds') {\n intervalInMilliseconds = 1000;\n }\n else {\n intervalInMilliseconds = 30 * 24 * 60 * 60 * 1000;\n }\n return intervalInMilliseconds;\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n SplineBase.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n return SplineBase;\n}(LineBase));\nexport { SplineBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PathOption, getPoint, withInRange, TransformToVisible } from '../../common/utils/helper';\nimport { SplineBase } from './spline-base';\n/**\n * `SplineSeries` module is used to render the spline series.\n */\nvar SplineSeries = /** @class */ (function (_super) {\n __extends(SplineSeries, _super);\n function SplineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the spline series.\n * @return {void}\n * @private\n */\n SplineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var chart = series.chart;\n var marker = series.marker;\n var ySpline;\n var options;\n var firstPoint = null;\n var secondPoint = null;\n var direction = '';\n var pt1;\n var pt2;\n var bpt1;\n var bpt2;\n var data;\n var controlPointCount = 0;\n var controlPoint1;\n var controlPoint2;\n var startPoint = 'M';\n var points = this.filterEmptyPoints(series);\n var previous;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n previous = this.getPreviousIndex(points, point.index - 1, series);\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(points[previous], point, points[this.getNextIndex(points, point.index - 1, series)], series)) {\n if (firstPoint !== null) {\n data = series.drawPoints[previous];\n controlPoint1 = data.controlPoint1;\n controlPoint2 = data.controlPoint2;\n pt1 = getCoordinate(firstPoint.xValue, firstPoint.yValue, xAxis, yAxis, isInverted, series);\n pt2 = getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n bpt1 = getCoordinate(controlPoint1.x, controlPoint1.y, xAxis, yAxis, isInverted, series);\n bpt2 = getCoordinate(controlPoint2.x, controlPoint2.y, xAxis, yAxis, isInverted, series);\n direction = direction.concat((startPoint + ' ' + (pt1.x) + ' ' + (pt1.y) + ' ' + 'C' + ' ' + (bpt1.x) + ' '\n + (bpt1.y) + ' ' + (bpt2.x) + ' ' + (bpt2.y) + ' ' + (pt2.x) + ' ' + (pt2.y) + ' '));\n startPoint = 'L';\n }\n firstPoint = point;\n this.storePointLocation(point, series, isInverted, getCoordinate);\n }\n else {\n startPoint = 'M';\n firstPoint = null;\n point.symbolLocations = [];\n }\n }\n var name = series.category === 'TrendLine' ? series.chart.element.id + '_Series_' + series.sourceIndex + '_TrendLine_' + series.index :\n series.chart.element.id + '_Series_' + series.index;\n options = new PathOption(name, 'transparent', series.width, series.interior, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Get module name.\n */\n SplineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'SplineSeries';\n };\n /**\n * To destroy the spline.\n * @return {void}\n * @private\n */\n SplineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return SplineSeries;\n}(SplineBase));\nexport { SplineSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { 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 } from '../../common/utils/helper';\nimport { findClipRect } from '../../common/utils/helper';\n/**\n * Technical Analysis module helps to predict the market trend\n */\nvar TechnicalAnalysis = /** @class */ (function (_super) {\n __extends(TechnicalAnalysis, _super);\n function TechnicalAnalysis() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series, that are used to represent the given technical indicator\n * @private\n */\n TechnicalAnalysis.prototype.initSeriesCollection = function (indicator, chart) {\n indicator.targetSeries = [];\n var signalLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(signalLine, indicator, 'SignalLine', indicator.fill, indicator.width, chart);\n };\n /**\n * Initializes the properties of the given series\n * @private\n */\n TechnicalAnalysis.prototype.setSeriesProperties = function (series, indicator, name, fill, width, chart) {\n series.name = name;\n series.xName = 'x';\n series.yName = 'y';\n series.fill = fill || '#606eff';\n series.dashArray = indicator.dashArray;\n series.width = width;\n series.xAxisName = indicator.xAxisName;\n series.animation = indicator.animation;\n series.yAxisName = indicator.yAxisName;\n series.clipRectElement = indicator.clipRectElement;\n series.points = [];\n series.enableTooltip = true;\n series.interior = series.fill;\n series.category = 'Indicator';\n series.index = indicator.index;\n series.chart = chart;\n series.xMin = Infinity;\n series.xMax = -Infinity;\n series.yMin = Infinity;\n series.yMax = -Infinity;\n series.xData = [];\n series.yData = [];\n series.marker.visible = false;\n indicator.targetSeries.push(series);\n };\n /**\n * Creates the elements of a technical indicator\n * @private\n */\n TechnicalAnalysis.prototype.createIndicatorElements = function (chart, indicator, index) {\n if (indicator.seriesName || indicator.dataSource) {\n findClipRect(indicator.targetSeries[0]);\n }\n var clipRect = new Rect(0, 0, 0, 0);\n if (indicator.seriesName || indicator.dataSource) {\n clipRect = indicator.targetSeries[0].clipRect;\n }\n //defines the clip rect element\n var clipRectElement = chart.renderer.drawClipPath(new RectOption(chart.element.id + '_ChartIndicatorClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: 0, y: 0, width: clipRect.width,\n height: clipRect.height,\n }));\n //creates the group for an indicator\n indicator.indicatorElement = chart.renderer.createGroup({\n 'id': chart.element.id + 'IndicatorGroup' + index,\n 'transform': 'translate(' + clipRect.x + ',' + clipRect.y + ')',\n 'clip-path': 'url(#' + chart.element.id + '_ChartIndicatorClipRect_' + index + ')'\n });\n indicator.indicatorElement.appendChild(clipRectElement);\n //Defines a group for each series in a technical indicator\n for (var _i = 0, _a = indicator.targetSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n series.clipRectElement = clipRectElement;\n var element = series.chart.renderer.createGroup({\n 'id': series.chart.element.id + '_Indicator_' +\n indicator.index + '_' + series.name + '_Group'\n });\n indicator.indicatorElement.appendChild(element);\n series.seriesElement = element;\n }\n chart.indicatorElements.appendChild(indicator.indicatorElement);\n };\n TechnicalAnalysis.prototype.getDataPoint = function (x, y, sourcePoint, series, index, indicator) {\n if (indicator === void 0) { indicator = null; }\n var point = new Points();\n point.x = x;\n point.y = y;\n point.xValue = sourcePoint.xValue;\n point.color = series.fill;\n point.index = index;\n point.yValue = y;\n point.visible = true;\n series.xMin = Math.min(series.xMin, point.xValue);\n series.yMin = Math.min(series.yMin, point.yValue);\n series.xMax = Math.max(series.xMax, point.xValue);\n series.yMax = Math.max(series.yMax, point.yValue);\n series.xData.push(point.xValue);\n if (indicator && indicator.type === 'Macd' && series.type === 'Column') {\n if (point.y >= 0) {\n point.color = indicator.macdPositiveColor;\n }\n else {\n point.color = indicator.macdNegativeColor;\n }\n }\n return point;\n };\n TechnicalAnalysis.prototype.getRangePoint = function (x, high, low, sourcePoint, series, index, indicator) {\n if (indicator === void 0) { indicator = null; }\n var point = new Points();\n point.x = x;\n point.high = high;\n point.low = low;\n point.xValue = sourcePoint.xValue;\n point.color = series.fill;\n point.index = index;\n point.visible = true;\n series.xData.push(point.xValue);\n return point;\n };\n TechnicalAnalysis.prototype.setSeriesRange = function (points, indicator, series) {\n if (series === void 0) { series = null; }\n if (!series) {\n indicator.targetSeries[0].points = points;\n }\n else {\n series.points = points;\n }\n };\n return TechnicalAnalysis;\n}(LineBase));\nexport { TechnicalAnalysis };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `SmaIndicator` module is used to render SMA indicator.\n */\nvar SmaIndicator = /** @class */ (function (_super) {\n __extends(SmaIndicator, _super);\n function SmaIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions based on SMA approach\n * @private\n */\n SmaIndicator.prototype.initDataSource = function (indicator, chart) {\n var smaPoints = [];\n var points = indicator.points;\n if (points && points.length) {\n //prepare data\n var validData = points;\n var field = firstToLowerCase(indicator.field);\n var xField = 'x';\n var signalSeries = indicator.targetSeries[0];\n if (validData && validData.length && validData.length >= indicator.period) {\n //find initial average\n var average = 0;\n var sum = 0;\n for (var i = 0; i < indicator.period; i++) {\n sum += validData[i][field];\n }\n average = sum / indicator.period;\n smaPoints.push(this.getDataPoint(validData[indicator.period - 1][xField], average, validData[indicator.period - 1], signalSeries, smaPoints.length));\n var index = indicator.period;\n while (index < validData.length) {\n sum -= validData[index - indicator.period][field];\n sum += validData[index][field];\n average = sum / indicator.period;\n smaPoints.push(this.getDataPoint(validData[index][xField], average, validData[index], signalSeries, smaPoints.length));\n index++;\n }\n }\n this.setSeriesRange(smaPoints, indicator);\n }\n };\n /**\n * To destroy the SMA indicator\n * @return {void}\n * @private\n */\n SmaIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the SMA indicator\n */\n };\n /**\n * Get module name.\n */\n SmaIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'SmaIndicator';\n };\n return SmaIndicator;\n}(TechnicalAnalysis));\nexport { SmaIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `EmaIndicator` module is used to render EMA indicator.\n */\nvar EmaIndicator = /** @class */ (function (_super) {\n __extends(EmaIndicator, _super);\n function EmaIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions based on EMA approach\n * @private\n */\n EmaIndicator.prototype.initDataSource = function (indicator, chart) {\n var field = firstToLowerCase(indicator.field);\n var xField = 'x';\n var emaPoints = [];\n var signalSeries = indicator.targetSeries[0];\n //prepare data\n var validData = indicator.points;\n if (validData && validData.length && validData.length >= indicator.period) {\n //find initial average\n var sum = 0;\n var average = 0;\n //smoothing factor\n var k = (2 / (indicator.period + 1));\n for (var i = 0; i < indicator.period; i++) {\n sum += validData[i][field];\n }\n average = sum / indicator.period;\n emaPoints.push(this.getDataPoint(validData[indicator.period - 1][xField], average, validData[indicator.period - 1], signalSeries, emaPoints.length));\n var index = indicator.period;\n while (index < validData.length) {\n //previous average\n var prevAverage = emaPoints[index - indicator.period][signalSeries.yName];\n var yValue = (validData[index][field] - prevAverage) * k + prevAverage;\n emaPoints.push(this.getDataPoint(validData[index][xField], yValue, validData[index], signalSeries, emaPoints.length));\n index++;\n }\n }\n this.setSeriesRange(emaPoints, indicator);\n };\n /**\n * To destroy the EMA Indicator\n * @return {void}\n * @private\n */\n EmaIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the EMA Indicator\n */\n };\n /**\n * Get module name.\n */\n EmaIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'EmaIndicator';\n };\n return EmaIndicator;\n}(TechnicalAnalysis));\nexport { EmaIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `TmaIndicator` module is used to render TMA indicator.\n */\nvar TmaIndicator = /** @class */ (function (_super) {\n __extends(TmaIndicator, _super);\n function TmaIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions based on TMA approach\n * @private\n */\n TmaIndicator.prototype.initDataSource = function (indicator, chart) {\n var tmaPoints = [];\n var field = firstToLowerCase(indicator.field);\n var xField = 'x';\n var signalSeries = indicator.targetSeries[0];\n //prepare data\n var validData = indicator.points;\n if (validData && validData.length && validData.length >= indicator.period) {\n var signalSeries_1 = indicator.targetSeries[0];\n //prepare data\n var validData_1 = indicator.points;\n if (validData_1.length && validData_1.length >= indicator.period) {\n //smoothing factor\n var k = (2 / (indicator.period + 1));\n //find initial average\n var average = 0;\n var sum = 0;\n var sumOfSMA = 0;\n var averageSMA = 0;\n var smaValues = [];\n //sma values\n var index = 0;\n var length_1 = validData_1.length;\n var period = indicator.period;\n while (length_1 >= period) {\n sum = 0;\n index = validData_1.length - length_1;\n for (var j = index; j < index + period; j++) {\n sum = sum + validData_1[j][field];\n }\n sum = sum / period;\n smaValues.push(sum);\n length_1--;\n }\n //initial values\n for (var k_1 = 0; k_1 < period - 1; k_1++) {\n sum = 0;\n for (var j = 0; j < k_1 + 1; j++) {\n sum = sum + validData_1[j][field];\n }\n sum = sum / (k_1 + 1);\n smaValues.splice(k_1, 0, sum);\n }\n index = indicator.period;\n while (index <= smaValues.length) {\n sum = 0;\n for (var j = index - indicator.period; j < index; j++) {\n sum = sum + smaValues[j];\n }\n sum = sum / indicator.period;\n tmaPoints.push(this.getDataPoint(validData_1[index - 1][xField], sum, validData_1[index - 1], signalSeries_1, tmaPoints.length));\n index++;\n }\n }\n }\n this.setSeriesRange(tmaPoints, indicator);\n };\n /**\n * To destroy the TMA indicator.\n * @return {void}\n * @private\n */\n TmaIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the TMA Indicator\n */\n };\n /**\n * Get module name.\n */\n TmaIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'TmaIndicator';\n };\n return TmaIndicator;\n}(TechnicalAnalysis));\nexport { TmaIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `AccumulationDistributionIndicator` module is used to render accumulation distribution indicator.\n */\nvar AccumulationDistributionIndicator = /** @class */ (function (_super) {\n __extends(AccumulationDistributionIndicator, _super);\n function AccumulationDistributionIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions using accumulation distribution approach\n * @private\n */\n AccumulationDistributionIndicator.prototype.initDataSource = function (indicator, chart) {\n var sourceSeries = indicator.sourceSeries;\n var adPoints = [];\n var validData = indicator.points;\n if (validData.length > 0 && validData.length > indicator.period) {\n adPoints = this.calculateADPoints(indicator, validData);\n }\n this.setSeriesRange(adPoints, indicator);\n };\n /**\n * Calculates the Accumulation Distribution values\n * @private\n */\n AccumulationDistributionIndicator.prototype.calculateADPoints = function (indicator, validData) {\n var temp = [];\n var sum = 0;\n var i = 0;\n var value = 0;\n var high = 0;\n var low = 0;\n var close = 0;\n var signalSeries = indicator.targetSeries[0];\n for (i = 0; i < validData.length; i++) {\n high = Number(validData[i].high);\n low = Number(validData[i].low);\n close = Number(validData[i].close);\n /**\n * Money Flow Multiplier = [(Close - Low) - (High - Close)] /(High - Low)\n * Money Flow Volume = Money Flow Multiplier x Volume for the Period\n * ADL = Previous ADL + Current Period's Money Flow Volume\n */\n value = ((close - low) - (high - close)) / (high - low);\n /**\n * Sum is to calculate the Y values of the Accumulation distribution indicator\n */\n sum = sum + value * Number(validData[i].volume);\n /**\n * To calculate the x and y values for the Accumulation distribution indicator\n */\n temp[i] = this.getDataPoint(validData[i].x, sum, validData[i], signalSeries, temp.length);\n }\n return temp;\n };\n /**\n * To destroy the Accumulation Distribution Technical Indicator.\n * @return {void}\n * @private\n */\n AccumulationDistributionIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the Accumulation Distribution Technical indicator\n */\n };\n /**\n * Get module name.\n */\n AccumulationDistributionIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the Indicator\n */\n return 'AccumulationDistributionIndicator';\n };\n return AccumulationDistributionIndicator;\n}(TechnicalAnalysis));\nexport { AccumulationDistributionIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `AtrIndicator` module is used to render ATR indicator.\n */\nvar AtrIndicator = /** @class */ (function (_super) {\n __extends(AtrIndicator, _super);\n function AtrIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions using Average True Range approach\n * @private\n */\n AtrIndicator.prototype.initDataSource = function (indicator, chart) {\n var sourceSeries = indicator.sourceSeries;\n var atrPoints = [];\n var validData = indicator.points;\n if (validData.length > 0 && validData.length > indicator.period) {\n this.calculateATRPoints(indicator, validData);\n }\n };\n /**\n * To calculate Average True Range indicator points\n * @private\n */\n AtrIndicator.prototype.calculateATRPoints = function (indicator, validData) {\n var average = 0;\n var highLow = 0;\n var highClose = 0;\n var lowClose = 0;\n var trueRange = 0;\n var points = [];\n var temp = [];\n var period = indicator.period;\n var sum = 0;\n var y = 'y';\n var signalSeries = indicator.targetSeries[0];\n for (var i = 0; i < validData.length; i++) {\n /**\n * Current High less the current Low\n * Current High less the previous Close (absolute value)\n * Current Low less the previous Close (absolute value)\n */\n highLow = Number(validData[i].high) - Number(validData[i].low);\n if (i > 0) {\n //\n highClose = Math.abs(Number(validData[i].high) - Number(validData[i - 1].close));\n lowClose = Math.abs(Number(validData[i].low) - Number(validData[i - 1].close));\n }\n /**\n * To find the maximum of highLow, highClose, lowClose\n */\n trueRange = Math.max(highLow, highClose, lowClose);\n sum = sum + trueRange;\n /**\n * Push the x and y values for the Average true range indicator\n */\n if (i >= period) {\n average = (Number(temp[i - 1][y]) * (period - 1) + trueRange) / period;\n points.push(this.getDataPoint(validData[i].x, average, validData[i], signalSeries, points.length));\n }\n else {\n average = sum / period;\n if (i === period - 1) {\n points.push(this.getDataPoint(validData[i].x, average, validData[i], signalSeries, points.length));\n }\n }\n temp[i] = { x: validData[i].x, y: average };\n }\n this.setSeriesRange(points, indicator);\n };\n /**\n * To destroy the Average true range indicator.\n * @return {void}\n * @private\n */\n AtrIndicator.prototype.destroy = function (chart) {\n /**\n * Destroy the Average true range indicator\n */\n };\n /**\n * Get module name.\n */\n AtrIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the Indicator\n */\n return 'AtrIndicator';\n };\n return AtrIndicator;\n}(TechnicalAnalysis));\nexport { AtrIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `MomentumIndicator` module is used to render Momentum indicator.\n */\nvar MomentumIndicator = /** @class */ (function (_super) {\n __extends(MomentumIndicator, _super);\n function MomentumIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series to represent a momentum indicator\n * @private\n */\n MomentumIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n var upperLine = new Series(indicator, 'targetSeries', {}, true);\n _super.prototype.setSeriesProperties.call(this, upperLine, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n };\n /**\n * Defines the predictions using momentum approach\n * @private\n */\n MomentumIndicator.prototype.initDataSource = function (indicator, chart) {\n var upperCollection = [];\n var signalCollection = [];\n var validData = indicator.points;\n if (validData && validData.length) {\n var upperSeries = indicator.targetSeries[1];\n var signalSeries = indicator.targetSeries[0];\n var length_1 = indicator.period;\n if (validData.length >= indicator.period) {\n for (var i = 0; i < validData.length; i++) {\n upperCollection.push(this.getDataPoint(validData[i].x, 100, validData[i], upperSeries, upperCollection.length));\n if (!(i < length_1)) {\n signalCollection.push(this.getDataPoint(validData[i].x, (Number(validData[i].close) / Number(validData[i - length_1].close) * 100), validData[i], signalSeries, signalCollection.length));\n }\n }\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[1]);\n }\n };\n /**\n * To destroy the momentum indicator\n * @return {void}\n * @private\n */\n MomentumIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the momentum indicator\n */\n };\n /**\n * Get module name.\n */\n MomentumIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MomentumIndicator';\n };\n return MomentumIndicator;\n}(TechnicalAnalysis));\nexport { MomentumIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `RsiIndicator` module is used to render RSI indicator.\n */\nvar RsiIndicator = /** @class */ (function (_super) {\n __extends(RsiIndicator, _super);\n function RsiIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the series collection to represent the RSI Indicator\n * @private\n */\n RsiIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n if (indicator.showZones) {\n var lowerLine = new Series(indicator, 'targetSeries', {}, true);\n _super.prototype.setSeriesProperties.call(this, lowerLine, indicator, 'LowerLine', indicator.lowerLine.color, indicator.lowerLine.width, chart);\n var upperLine = new Series(indicator, 'targetSeries', {}, true);\n _super.prototype.setSeriesProperties.call(this, upperLine, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n }\n };\n /**\n * Defines the predictions using RSI approach\n * @private\n */\n RsiIndicator.prototype.initDataSource = function (indicator, chart) {\n var signalCollection = [];\n var lowerCollection = [];\n var upperCollection = [];\n var signalSeries = indicator.targetSeries[0];\n //prepare data\n var validData = indicator.points;\n if (validData.length && validData.length >= indicator.period) {\n //Find upper band and lower band values\n if (indicator.showZones) {\n for (var i = 0; i < validData.length; i++) {\n upperCollection.push(this.getDataPoint(validData[i].x, indicator.overBought, validData[i], indicator.targetSeries[1], upperCollection.length));\n lowerCollection.push(this.getDataPoint(validData[i].x, indicator.overSold, validData[i], indicator.targetSeries[2], lowerCollection.length));\n }\n }\n //Find signal line value\n var prevClose = Number(validData[0].close);\n var gain = 0;\n var loss = 0;\n for (var i = 1; i <= indicator.period; i++) {\n var close_1 = Number(validData[i].close);\n if (close_1 > prevClose) {\n gain += close_1 - prevClose;\n }\n else {\n loss += prevClose - close_1;\n }\n prevClose = close_1;\n }\n gain = gain / indicator.period;\n loss = loss / indicator.period;\n signalCollection.push(this.getDataPoint(validData[indicator.period].x, 100 - (100 / (1 + gain / loss)), validData[indicator.period], signalSeries, signalCollection.length));\n for (var j = indicator.period + 1; j < validData.length; j++) {\n var close_2 = Number(validData[j].close);\n if (close_2 > prevClose) {\n gain = (gain * (indicator.period - 1) + (close_2 - prevClose)) / indicator.period;\n loss = (loss * (indicator.period - 1)) / indicator.period;\n }\n else if (close_2 < prevClose) {\n loss = (loss * (indicator.period - 1) + (prevClose - close_2)) / indicator.period;\n gain = (gain * (indicator.period - 1)) / indicator.period;\n }\n prevClose = close_2;\n signalCollection.push(this.getDataPoint(validData[j].x, 100 - (100 / (1 + gain / loss)), validData[j], signalSeries, signalCollection.length));\n }\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n if (indicator.showZones) {\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[1]);\n this.setSeriesRange(lowerCollection, indicator, indicator.targetSeries[2]);\n }\n };\n /**\n * To destroy the RSI Indicator.\n * @return {void}\n * @private\n */\n RsiIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the RSI Indicator\n */\n };\n /**\n * Get module name.\n */\n RsiIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the indicator.\n */\n return 'RsiIndicator';\n };\n return RsiIndicator;\n}(TechnicalAnalysis));\nexport { RsiIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `StochasticIndicator` module is used to render stochastic indicator.\n */\nvar StochasticIndicator = /** @class */ (function (_super) {\n __extends(StochasticIndicator, _super);\n function StochasticIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series that represents the stochastic indicator\n * @private\n */\n StochasticIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n var periodLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(periodLine, indicator, 'PeriodLine', indicator.periodLine.color, indicator.periodLine.width, chart);\n if (indicator.showZones) {\n var upperSeries = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(upperSeries, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n var lowerSeries = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(lowerSeries, indicator, 'LowerLine', indicator.lowerLine.color, indicator.lowerLine.width, chart);\n }\n };\n /**\n * Defines the predictions based on stochastic approach\n * @private\n */\n StochasticIndicator.prototype.initDataSource = function (indicator, chart) {\n var signalCollection = [];\n var upperCollection = [];\n var lowerCollection = [];\n var periodCollection = [];\n var source = [];\n var sourceSeries = indicator.sourceSeries;\n var point = {};\n //prepare data\n var validData = indicator.points;\n if (validData.length && validData.length >= indicator.period) {\n if (indicator.showZones) {\n for (var i = 0; i < validData.length; i++) {\n upperCollection.push(this.getDataPoint(validData[i].x, indicator.overBought, validData[i], indicator.targetSeries[2], upperCollection.length));\n lowerCollection.push(this.getDataPoint(validData[i].x, indicator.overSold, validData[i], indicator.targetSeries[3], lowerCollection.length));\n }\n }\n source = this.calculatePeriod(indicator.period, indicator.kPeriod, validData, indicator.targetSeries[1]);\n periodCollection = this.smaCalculation(indicator.period, indicator.kPeriod, source, indicator.targetSeries[1]);\n signalCollection = this.smaCalculation(indicator.period + indicator.kPeriod - 1, indicator.dPeriod, source, indicator.targetSeries[0]);\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n this.setSeriesRange(periodCollection, indicator, indicator.targetSeries[1]);\n if (indicator.showZones) {\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[2]);\n this.setSeriesRange(lowerCollection, indicator, indicator.targetSeries[3]);\n }\n };\n /**\n * Calculates the SMA Values\n * @private\n */\n StochasticIndicator.prototype.smaCalculation = function (period, kPeriod, data, sourceSeries) {\n var pointCollection = [];\n if (data.length >= period + kPeriod) {\n var count = period + (kPeriod - 1);\n var temp = [];\n var values = [];\n for (var i = 0; i < data.length; i++) {\n var value = Number(data[i].y);\n temp.push(value);\n }\n var length_1 = temp.length;\n while (length_1 >= count) {\n var sum = 0;\n for (var i = period - 1; i < (period + kPeriod - 1); i++) {\n sum = sum + temp[i];\n }\n sum = sum / kPeriod;\n values.push(sum.toFixed(2));\n temp.splice(0, 1);\n length_1 = temp.length;\n }\n var len = count - 1;\n for (var i = 0; i < data.length; i++) {\n if (!(i < len)) {\n pointCollection.push(this.getDataPoint(data[i].x, Number(values[i - len]), data[i], sourceSeries, pointCollection.length));\n data[i].y = Number((values[i - len]));\n }\n }\n }\n return pointCollection;\n };\n /**\n * Calculates the period line values.\n * @private\n */\n StochasticIndicator.prototype.calculatePeriod = function (period, kPeriod, data, series) {\n var lowValues = [];\n var highValues = [];\n var closeValues = [];\n var modifiedSource = [];\n for (var j = 0; j < data.length; j++) {\n lowValues[j] = data[j].low;\n highValues[j] = data[j].high;\n closeValues[j] = data[j].close;\n }\n if (data.length > period) {\n var totalPeriod = period + kPeriod;\n var mins = [];\n var maxs = [];\n for (var i = 0; i < period - 1; ++i) {\n maxs.push(0);\n mins.push(0);\n modifiedSource.push(this.getDataPoint(data[i].x, data[i].close, data[i], series, modifiedSource.length));\n }\n for (var i = period - 1; i < data.length; ++i) {\n var min = Number.MAX_VALUE;\n var max = Number.MIN_VALUE;\n for (var j = 0; j < period; ++j) {\n min = Math.min(min, lowValues[i - j]);\n max = Math.max(max, highValues[i - j]);\n }\n maxs.push(max);\n mins.push(min);\n }\n for (var i = period - 1; i < data.length; ++i) {\n var top_1 = 0;\n var bottom = 0;\n top_1 += closeValues[i] - mins[i];\n bottom += maxs[i] - mins[i];\n modifiedSource.push(this.getDataPoint(data[i].x, (top_1 / bottom) * 100, data[i], series, modifiedSource.length));\n }\n }\n return modifiedSource;\n };\n /**\n * To destroy the Stocastic Indicator.\n * @return {void}\n * @private\n */\n StochasticIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the stochastic indicator\n */\n };\n /**\n * Get module name.\n */\n StochasticIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the indicator.\n */\n return 'StochasticIndicator';\n };\n return StochasticIndicator;\n}(TechnicalAnalysis));\nexport { StochasticIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `BollingerBands` module is used to render bollinger band indicator.\n */\nvar BollingerBands = /** @class */ (function (_super) {\n __extends(BollingerBands, _super);\n function BollingerBands() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the series collection to represent bollinger band\n */\n BollingerBands.prototype.initSeriesCollection = function (indicator, chart) {\n indicator.targetSeries = [];\n var rangeArea = new Series(indicator, 'targetSeries', {}, true);\n rangeArea.type = 'RangeArea';\n if (indicator.bandColor !== 'transparent' && indicator.bandColor !== 'none') {\n this.setSeriesProperties(rangeArea, indicator, 'BollingerBand', indicator.bandColor, 0, chart);\n }\n var signalLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(signalLine, indicator, 'SignalLine', indicator.fill, indicator.width, chart);\n var upperLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(upperLine, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n var lowerLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(lowerLine, indicator, 'LowerLine', indicator.lowerLine.color, indicator.lowerLine.width, chart);\n };\n /**\n * Defines the predictions using Bollinger Band Approach\n * @private\n */\n BollingerBands.prototype.initDataSource = function (indicator, chart) {\n var enableBand = indicator.bandColor !== 'transparent' && indicator.bandColor !== 'none';\n var start = enableBand ? 1 : 0;\n var signalCollection = [];\n var upperCollection = [];\n var lowerCollection = [];\n var bandCollection = [];\n var upperSeries = indicator.targetSeries[start + 1];\n var lowerSeries = indicator.targetSeries[start + 2];\n var signalSeries = indicator.targetSeries[start];\n var rangeAreaSeries = enableBand ? indicator.targetSeries[0] : null;\n //prepare data\n var validData = indicator.points;\n if (validData.length && validData.length >= indicator.period) {\n var sum = 0;\n var deviationSum = 0;\n var multiplier = indicator.standardDeviation;\n var limit = validData.length;\n var length_1 = Math.round(indicator.period);\n var smaPoints = [];\n var deviations = [];\n var bollingerPoints = [];\n for (var i_1 = 0; i_1 < length_1; i_1++) {\n sum += Number(validData[i_1].close);\n }\n var sma = sum / indicator.period;\n for (var i_2 = 0; i_2 < limit; i_2++) {\n var y = Number(validData[i_2].close);\n if (i_2 >= length_1 - 1 && i_2 < limit) {\n if (i_2 - indicator.period >= 0) {\n var diff = y - Number(validData[i_2 - length_1].close);\n sum = sum + diff;\n sma = sum / (indicator.period);\n smaPoints[i_2] = sma;\n deviations[i_2] = Math.pow(y - sma, 2);\n deviationSum += deviations[i_2] - deviations[i_2 - length_1];\n }\n else {\n smaPoints[i_2] = sma;\n deviations[i_2] = Math.pow(y - sma, 2);\n deviationSum += deviations[i_2];\n }\n var range = Math.sqrt(deviationSum / (indicator.period));\n var lowerBand = smaPoints[i_2] - (multiplier * range);\n var upperBand = smaPoints[i_2] + (multiplier * range);\n if (i_2 + 1 === length_1) {\n for (var j_1 = 0; j_1 < length_1 - 1; j_1++) {\n bollingerPoints[j_1] = {\n 'X': validData[j_1].x, 'mb': smaPoints[i_2],\n 'lb': lowerBand, 'ub': upperBand, visible: true\n };\n }\n }\n bollingerPoints[i_2] = {\n 'X': validData[i_2].x, 'mb': smaPoints[i_2],\n 'lb': lowerBand, 'ub': upperBand, visible: true\n };\n }\n else {\n if (i_2 < indicator.period - 1) {\n smaPoints[i_2] = sma;\n deviations[i_2] = Math.pow(y - sma, 2);\n deviationSum += deviations[i_2];\n }\n }\n }\n var i = -1;\n var j = -1;\n for (var k = 0; k < limit; k++) {\n if (k >= (length_1 - 1)) {\n var ub = 'ub';\n var lb = 'lb';\n var mb = 'mb';\n upperCollection.push(this.getDataPoint(validData[k].x, bollingerPoints[k][ub], validData[k], upperSeries, upperCollection.length));\n lowerCollection.push(this.getDataPoint(validData[k].x, bollingerPoints[k][lb], validData[k], lowerSeries, lowerCollection.length));\n signalCollection.push(this.getDataPoint(validData[k].x, bollingerPoints[k][mb], validData[k], signalSeries, signalCollection.length));\n if (enableBand) {\n bandCollection.push(this.getRangePoint(validData[k].x, upperCollection[++i].y, lowerCollection[++j].y, validData[k], rangeAreaSeries, bandCollection.length));\n }\n }\n }\n }\n if (enableBand) {\n this.setSeriesRange(bandCollection, indicator, indicator.targetSeries[0]);\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[start]);\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[start + 1]);\n this.setSeriesRange(lowerCollection, indicator, indicator.targetSeries[start + 2]);\n };\n /**\n * To destroy the Bollinger Band.\n * @return {void}\n * @private\n */\n BollingerBands.prototype.destroy = function (chart) {\n /**\n * Destroys the bollinger band\n */\n };\n /**\n * Get module name.\n */\n BollingerBands.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'BollingerBandsIndicator';\n };\n return BollingerBands;\n}(TechnicalAnalysis));\nexport { BollingerBands };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `MacdIndicator` module is used to render MACD indicator.\n */\nvar MacdIndicator = /** @class */ (function (_super) {\n __extends(MacdIndicator, _super);\n function MacdIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series to represent the MACD indicator\n * @private\n */\n MacdIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n if (indicator.macdType === 'Line' || indicator.macdType === 'Both') {\n var macdSeries = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(macdSeries, indicator, 'MacdLine', indicator.macdLine.color, indicator.macdLine.width, chart);\n }\n if (indicator.macdType === 'Histogram' || indicator.macdType === 'Both') {\n var histogramSeries = new Series(indicator, 'targetSeries', {}, true);\n histogramSeries.type = 'Column';\n this.setSeriesProperties(histogramSeries, indicator, 'Histogram', indicator.macdPositiveColor, indicator.width, chart);\n }\n };\n /**\n * Defines the predictions using MACD approach\n * @private\n */\n MacdIndicator.prototype.initDataSource = function (indicator, chart) {\n var signalCollection = [];\n var fastPeriod = indicator.fastPeriod;\n var slowPeriod = indicator.slowPeriod;\n var trigger = indicator.period;\n var length = fastPeriod + trigger;\n var macdCollection = [];\n var histogramCollection = [];\n var validData = indicator.points;\n var signalSeries = indicator.targetSeries[0];\n var histogramSeries;\n var macdLineSeries;\n if (indicator.macdType === 'Histogram') {\n histogramSeries = indicator.targetSeries[1];\n }\n else {\n macdLineSeries = indicator.targetSeries[1];\n if (indicator.macdType === 'Both') {\n histogramSeries = indicator.targetSeries[2];\n }\n }\n if (validData && length < validData.length && slowPeriod <= fastPeriod &&\n slowPeriod > 0 && (length - 2) >= 0) {\n var shortEMA = this.calculateEMAValues(slowPeriod, validData, 'close');\n var longEMA = this.calculateEMAValues(fastPeriod, validData, 'close');\n var macdValues = this.getMACDVales(indicator, shortEMA, longEMA);\n macdCollection = this.getMACDPoints(indicator, macdValues, validData, macdLineSeries || signalSeries);\n var signalEMA = this.calculateEMAValues(trigger, macdCollection, 'y');\n signalCollection = this.getSignalPoints(indicator, signalEMA, validData, signalSeries);\n if (histogramSeries) {\n histogramCollection = this.getHistogramPoints(indicator, macdValues, signalEMA, validData, histogramSeries);\n }\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n if (histogramSeries) {\n this.setSeriesRange(histogramCollection, indicator, histogramSeries);\n }\n if (macdLineSeries) {\n this.setSeriesRange(macdCollection, indicator, macdLineSeries);\n }\n };\n /**\n * Calculates the EMA values for the given period\n */\n MacdIndicator.prototype.calculateEMAValues = function (period, validData, field) {\n var sum = 0;\n var initialEMA = 0;\n var emaValues = [];\n var emaPercent = (2 / (period + 1));\n for (var i = 0; i < period; i++) {\n sum += Number(validData[i][field]);\n }\n initialEMA = (sum / period);\n emaValues.push(initialEMA);\n var emaAvg = initialEMA;\n for (var j = period; j < validData.length; j++) {\n emaAvg = (Number(validData[j][field]) - emaAvg) * emaPercent + emaAvg;\n emaValues.push(emaAvg);\n }\n return emaValues;\n };\n /**\n * Defines the MACD Points\n */\n MacdIndicator.prototype.getMACDPoints = function (indicator, macdPoints, validData, series) {\n var macdCollection = [];\n var dataMACDIndex = indicator.fastPeriod - 1;\n var macdIndex = 0;\n while (dataMACDIndex < validData.length) {\n macdCollection.push(this.getDataPoint(validData[dataMACDIndex].x, macdPoints[macdIndex], validData[dataMACDIndex], series, macdCollection.length));\n dataMACDIndex++;\n macdIndex++;\n }\n return macdCollection;\n };\n /**\n * Calculates the signal points\n */\n MacdIndicator.prototype.getSignalPoints = function (indicator, signalEma, validData, series) {\n var dataSignalIndex = indicator.fastPeriod + indicator.period - 2;\n var signalIndex = 0;\n var signalCollection = [];\n while (dataSignalIndex < validData.length) {\n signalCollection.push(this.getDataPoint(validData[dataSignalIndex].x, signalEma[signalIndex], validData[dataSignalIndex], series, signalCollection.length));\n dataSignalIndex++;\n signalIndex++;\n }\n return signalCollection;\n };\n /**\n * Calculates the MACD values\n */\n MacdIndicator.prototype.getMACDVales = function (indicator, shortEma, longEma) {\n var macdPoints = [];\n var diff = indicator.fastPeriod - indicator.slowPeriod;\n for (var i = 0; i < longEma.length; i++) {\n macdPoints.push((shortEma[i + diff] - longEma[i]));\n }\n return macdPoints;\n };\n /**\n * Calculates the Histogram Points\n */\n MacdIndicator.prototype.getHistogramPoints = function (indicator, macdPoints, signalEma, validData, series) {\n var dataHistogramIndex = indicator.fastPeriod + indicator.period - 2;\n var histogramIndex = 0;\n var histogramCollection = [];\n while (dataHistogramIndex < validData.length) {\n histogramCollection.push(this.getDataPoint(validData[dataHistogramIndex].x, macdPoints[histogramIndex + (indicator.period - 1)] - signalEma[histogramIndex], validData[dataHistogramIndex], series, histogramCollection.length, indicator));\n dataHistogramIndex++;\n histogramIndex++;\n }\n return histogramCollection;\n };\n /**\n * To destroy the MACD Indicator.\n * @return {void}\n * @private\n */\n MacdIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the MACD indicator\n */\n };\n /**\n * Get module name.\n */\n MacdIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MacdIndicator';\n };\n return MacdIndicator;\n}(TechnicalAnalysis));\nexport { MacdIndicator };\n","import { Series, Points } from '../series/chart-series';\nimport { findClipRect, RectOption } from '../../common/utils/helper';\n/**\n * `Trendline` module is used to render 6 types of trendlines in chart.\n */\nvar Trendlines = /** @class */ (function () {\n function Trendlines() {\n }\n /**\n * Defines the collection of series, that are used to represent a trendline\n * @private\n */\n Trendlines.prototype.initSeriesCollection = function (trendline, chart) {\n var trendLineSeries = new Series(trendline, 'targetSeries', {}, true);\n if (trendline.type === 'Linear' || trendline.type === 'MovingAverage') {\n trendLineSeries.type = 'Line';\n }\n else {\n trendLineSeries.type = 'Spline';\n }\n this.setSeriesProperties(trendLineSeries, trendline, trendline.type, trendline.fill, trendline.width, chart);\n };\n /**\n * Initializes the properties of the trendline series\n */\n Trendlines.prototype.setSeriesProperties = function (series, trendline, name, fill, width, chart) {\n series.name = trendline.name;\n series.xName = 'x';\n series.yName = 'y';\n series.fill = fill || 'blue';\n series.width = width;\n series.clipRectElement = trendline.clipRectElement;\n series.points = [];\n series.enableTooltip = trendline.enableTooltip;\n series.index = trendline.index;\n series.sourceIndex = trendline.sourceIndex;\n series.interior = series.fill;\n series.animation = trendline.animation;\n series.legendShape = 'HorizontalLine';\n series.marker = trendline.marker;\n series.category = 'TrendLine';\n series.chart = chart;\n series.xMin = Infinity;\n series.xMax = -Infinity;\n series.yMin = Infinity;\n series.yMax = -Infinity;\n series.xData = [];\n series.yData = [];\n trendline.targetSeries = series;\n };\n /**\n * Creates the elements of a trendline\n */\n Trendlines.prototype.createTrendLineElements = function (chart, trendline, index, element, clipRectElement) {\n trendline.trendLineElement = element;\n trendline.targetSeries.clipRectElement = clipRectElement;\n trendline.targetSeries.seriesElement = element;\n chart.trendLineElements.appendChild(trendline.trendLineElement);\n };\n /**\n * Defines the data point of trendline\n */\n Trendlines.prototype.getDataPoint = function (x, y, sourcePoint, series, index) {\n var trendPoint = new Points();\n trendPoint.x = x;\n trendPoint.y = y;\n trendPoint.xValue = Number(x);\n trendPoint.color = series.fill;\n trendPoint.index = index;\n trendPoint.yValue = Number(y);\n trendPoint.visible = true;\n series.xMin = Math.min(series.xMin, trendPoint.xValue);\n series.yMin = Math.min(series.yMin, trendPoint.yValue);\n series.xMax = Math.max(series.xMax, trendPoint.xValue);\n series.yMax = Math.max(series.yMax, trendPoint.yValue);\n series.xData.push(trendPoint.xValue);\n return trendPoint;\n };\n /**\n * Finds the slope and intercept of trendline\n */\n Trendlines.prototype.findSlopeIntercept = function (xValues, yValues, trendline, points) {\n var xAvg = 0;\n var yAvg = 0;\n var xyAvg = 0;\n var xxAvg = 0;\n var yyAvg = 0;\n var index = 0;\n var slope = 0;\n var intercept = 0;\n while (index < points.length) {\n xAvg += xValues[index];\n yAvg += yValues[index];\n xyAvg += xValues[index] * yValues[index];\n xxAvg += xValues[index] * xValues[index];\n yyAvg += yValues[index] * yValues[index];\n index++;\n }\n var type = trendline.type;\n if (trendline.intercept && (type === 'Linear' || type === 'Exponential')) {\n intercept = trendline.intercept;\n switch (type) {\n case 'Linear':\n slope = ((xyAvg) - (trendline.intercept * xAvg)) / xxAvg;\n break;\n case 'Exponential':\n slope = ((xyAvg) - (Math.log(Math.abs(trendline.intercept)) * xAvg)) / xxAvg;\n break;\n }\n }\n else {\n slope = ((points.length * xyAvg) - (xAvg * yAvg)) / ((points.length * xxAvg) - (xAvg * xAvg));\n if (type === 'Exponential' || type === 'Power') {\n intercept = Math.exp((yAvg - (slope * xAvg)) / points.length);\n }\n else {\n intercept = (yAvg - (slope * xAvg)) / points.length;\n }\n }\n return { slope: slope, intercept: intercept };\n };\n /**\n * Defines the points to draw the trendlines\n */\n Trendlines.prototype.initDataSource = function (trendline, chart) {\n var points = trendline.points;\n if (points && points.length) {\n //prepare data\n var trendlineSeries = trendline.targetSeries;\n switch (trendline.type) {\n case 'Linear':\n this.setLinearRange(points, trendline, trendlineSeries);\n break;\n case 'Exponential':\n this.setExponentialRange(points, trendline, trendlineSeries);\n break;\n case 'MovingAverage':\n this.setMovingAverageRange(points, trendline, trendlineSeries);\n break;\n case 'Polynomial':\n this.setPolynomialRange(points, trendline, trendlineSeries);\n break;\n case 'Power':\n this.setPowerRange(points, trendline, trendlineSeries);\n break;\n case 'Logarithmic':\n this.setLogarithmicRange(points, trendline, trendlineSeries);\n break;\n }\n if (trendline.type !== 'Linear' && trendline.type !== 'MovingAverage') {\n trendlineSeries.chart.splineSeriesModule.findSplinePoint(trendlineSeries);\n }\n }\n };\n /**\n * Calculation of exponential points\n */\n Trendlines.prototype.setExponentialRange = function (points, trendline, series) {\n var xValue = [];\n var yValue = [];\n var index = 0;\n var slopeIntercept;\n while (index < points.length) {\n var point = points[index];\n xValue.push(point.xValue);\n yValue.push(Math.log(point.yValue));\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xValue, yValue, trendline, points);\n series.points = this.getExponentialPoints(trendline, points, xValue, yValue, series, slopeIntercept);\n };\n /**\n * Calculation of logarithmic points\n */\n Trendlines.prototype.setLogarithmicRange = function (points, trendline, series) {\n var xLogValue = [];\n var yLogValue = [];\n var xPointsLgr = [];\n var slopeIntercept;\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xPointsLgr.push(point.xValue);\n xLogValue.push(Math.log(point.xValue));\n yLogValue.push(point.yValue);\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xLogValue, yLogValue, trendline, points);\n series.points = this.getLogarithmicPoints(trendline, points, xPointsLgr, yLogValue, series, slopeIntercept);\n };\n /**\n * Calculation of polynomial points\n */\n Trendlines.prototype.setPolynomialRange = function (points, trendline, series) {\n var xPolyValues = [];\n var yPolyValues = [];\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xPolyValues.push(point.xValue);\n yPolyValues.push(point.yValue);\n index++;\n }\n series.points = this.getPolynomialPoints(trendline, points, xPolyValues, yPolyValues, series);\n };\n /**\n * Calculation of power points\n */\n Trendlines.prototype.setPowerRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var powerPoints = [];\n var slopeIntercept;\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n powerPoints.push(point.xValue);\n xValues.push(Math.log(point.xValue));\n yValues.push(Math.log(point.yValue));\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xValues, yValues, trendline, points);\n series.points = this.getPowerPoints(trendline, points, powerPoints, yValues, series, slopeIntercept);\n };\n /**\n * Calculation of linear points\n */\n Trendlines.prototype.setLinearRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var slopeIntercept;\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xValues.push(point.xValue);\n yValues.push(point.yValue);\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xValues, yValues, trendline, points);\n series.points = this.getLinearPoints(trendline, points, xValues, yValues, series, slopeIntercept);\n };\n /**\n * Calculation of moving average points\n */\n Trendlines.prototype.setMovingAverageRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var xAvgValues = [];\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xAvgValues.push(point.xValue);\n xValues.push(index + 1);\n yValues.push(point.yValue);\n index++;\n }\n series.points = this.getMovingAveragePoints(trendline, points, xAvgValues, yValues, series);\n };\n /**\n * Calculation of logarithmic points\n */\n Trendlines.prototype.getLogarithmicPoints = function (trendline, points, xValues, yValues, series, slopeInterceptLog) {\n var midPoint = Math.round((points.length / 2));\n var pts = [];\n var x1Log = xValues[0] - trendline.backwardForecast;\n var y1Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * Math.log(x1Log));\n var x2Log = xValues[midPoint - 1];\n var y2Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * Math.log(x2Log));\n var x3Log = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y3Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * Math.log(x3Log));\n pts.push(this.getDataPoint(x1Log, y1Log, points[0], series, pts.length));\n pts.push(this.getDataPoint(x2Log, y2Log, points[midPoint - 1], series, pts.length));\n pts.push(this.getDataPoint(x3Log, y3Log, points[points.length - 1], series, pts.length));\n return pts;\n };\n /**\n * Defines the points based on data point\n */\n Trendlines.prototype.getPowerPoints = function (trendline, points, xValues, yValues, series, slopeInterceptPower) {\n var midPoint = Math.round((points.length / 2));\n var pts = [];\n var x1 = xValues[0] - trendline.backwardForecast;\n x1 = x1 > -1 ? x1 : 0;\n var y1 = slopeInterceptPower.intercept * Math.pow(x1, slopeInterceptPower.slope);\n var x2 = xValues[midPoint - 1];\n var y2 = slopeInterceptPower.intercept * Math.pow(x2, slopeInterceptPower.slope);\n var x3 = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y3 = slopeInterceptPower.intercept * Math.pow(x3, slopeInterceptPower.slope);\n pts.push(this.getDataPoint(x1, y1, points[0], series, pts.length));\n pts.push(this.getDataPoint(x2, y2, points[midPoint - 1], series, pts.length));\n pts.push(this.getDataPoint(x3, y3, points[points.length - 1], series, pts.length));\n return pts;\n };\n /**\n * Get the polynomial points based on polynomial slopes\n */\n Trendlines.prototype.getPolynomialPoints = function (trendline, points, xValues, yValues, series) {\n var midPoint = Math.round((points.length / 2));\n var pts = [];\n var polynomialOrder = points.length <= trendline.polynomialOrder ? points.length : trendline.polynomialOrder;\n polynomialOrder = Math.max(2, polynomialOrder);\n polynomialOrder = Math.min(6, polynomialOrder);\n trendline.polynomialOrder = polynomialOrder;\n trendline.polynomialSlopes = [];\n trendline.polynomialSlopes.length = trendline.polynomialOrder + 1;\n var index = 0;\n while (index < xValues.length) {\n var xVal = xValues[index];\n var yVal = yValues[index];\n var subIndex = 0;\n while (subIndex <= trendline.polynomialOrder) {\n if (!trendline.polynomialSlopes[subIndex]) {\n trendline.polynomialSlopes[subIndex] = 0;\n }\n trendline.polynomialSlopes[subIndex] += Math.pow(xVal, subIndex) * yVal;\n ++subIndex;\n }\n index++;\n }\n var numArray = [];\n numArray.length = 1 + 2 * trendline.polynomialOrder;\n var matrix = [];\n matrix.length = trendline.polynomialOrder + 1;\n var newIndex = 0;\n while (newIndex < (trendline.polynomialOrder + 1)) {\n matrix[newIndex] = [];\n matrix[newIndex].length = 3;\n newIndex++;\n }\n var nIndex = 0;\n var num1 = 0;\n while (nIndex < xValues.length) {\n var d = xValues[nIndex];\n var num2 = 1.0;\n var nIndex2 = 0;\n while (nIndex2 < numArray.length) {\n if (!numArray[nIndex2]) {\n numArray[nIndex2] = 0;\n }\n numArray[nIndex2] += num2;\n num2 *= d;\n ++num1;\n ++nIndex2;\n }\n ++nIndex;\n }\n var nnIndex = 0;\n while (nnIndex <= trendline.polynomialOrder) {\n var nnIndex2 = 0;\n while (nnIndex2 <= trendline.polynomialOrder) {\n matrix[nnIndex][nnIndex2] = numArray[nnIndex + nnIndex2];\n ++nnIndex2;\n }\n ++nnIndex;\n }\n if (!this.gaussJordanElimination(matrix, trendline.polynomialSlopes)) {\n trendline.polynomialSlopes = null;\n }\n pts = this.getPoints(trendline, points, xValues, yValues, series);\n return pts;\n };\n /**\n * Defines the moving average points\n */\n Trendlines.prototype.getMovingAveragePoints = function (trendline, points, xValues, yValues, series) {\n var pts = [];\n var period = trendline.period >= points.length ? points.length - 1 : trendline.period;\n period = Math.max(2, period);\n var index = 0;\n var y;\n var x;\n var count;\n var nullCount;\n while (index < points.length - 1) {\n y = count = nullCount = 0;\n for (var j = index; count < period; j++) {\n count++;\n if (!yValues[j]) {\n nullCount++;\n }\n y += yValues[j];\n }\n y = period - nullCount <= 0 ? null : y / (period - nullCount);\n if (y && !isNaN(y)) {\n x = xValues[period - 1 + index];\n pts.push(this.getDataPoint(x, y, points[period - 1 + index], series, pts.length));\n }\n index++;\n }\n return pts;\n };\n /**\n * Defines the linear points\n */\n Trendlines.prototype.getLinearPoints = function (trendline, points, xValues, yValues, series, slopeInterceptLinear) {\n var pts = [];\n var x1Linear = xValues[0] - trendline.backwardForecast;\n var y1Linear = slopeInterceptLinear.slope * x1Linear + slopeInterceptLinear.intercept;\n var x2Linear = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y2Linear = slopeInterceptLinear.slope * x2Linear + slopeInterceptLinear.intercept;\n pts.push(this.getDataPoint(x1Linear, y1Linear, points[0], series, pts.length));\n pts.push(this.getDataPoint(x2Linear, y2Linear, points[points.length - 1], series, pts.length));\n return pts;\n };\n /**\n * Defines the exponential points\n */\n Trendlines.prototype.getExponentialPoints = function (trendline, points, xValues, yValues, series, slopeInterceptExp) {\n var midPoint = Math.round((points.length / 2));\n var ptsExp = [];\n var x1 = xValues[0] - trendline.backwardForecast;\n var y1 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x1);\n var x2 = xValues[midPoint - 1];\n var y2 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x2);\n var x3 = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y3 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x3);\n ptsExp.push(this.getDataPoint(x1, y1, points[0], series, ptsExp.length));\n ptsExp.push(this.getDataPoint(x2, y2, points[midPoint - 1], series, ptsExp.length));\n ptsExp.push(this.getDataPoint(x3, y3, points[points.length - 1], series, ptsExp.length));\n return ptsExp;\n };\n /**\n * Defines the points based on data point\n */\n Trendlines.prototype.getPoints = function (trendline, points, xValues, yValues, series) {\n var midPoint = Math.round((points.length / 2));\n var polynomialSlopes = trendline.polynomialSlopes;\n var pts = [];\n var x1 = 1;\n var index = 1;\n var xValue;\n var yValue;\n while (index <= polynomialSlopes.length) {\n if (index === 1) {\n xValue = xValues[0] - trendline.backwardForecast;\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, points[0], series, pts.length));\n }\n else if (index === polynomialSlopes.length) {\n xValue = xValues[points.length - 1] + trendline.forwardForecast;\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, points[points.length - 1], series, pts.length));\n }\n else {\n x1 += (points.length + trendline.forwardForecast) / polynomialSlopes.length;\n xValue = xValues[parseInt(x1.toString(), 10) - 1];\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, points[parseInt(x1.toString(), 10) - 1], series, pts.length));\n }\n index++;\n }\n return pts;\n };\n /**\n * Defines the polynomial value of y\n */\n Trendlines.prototype.getPolynomialYValue = function (slopes, x) {\n var sum = 0;\n var index = 0;\n while (index < slopes.length) {\n sum += slopes[index] * Math.pow(x, index);\n index++;\n }\n return sum;\n };\n /**\n * Defines the gauss jordan elimination\n */\n Trendlines.prototype.gaussJordanElimination = function (matrix, polynomialSlopes) {\n var length = matrix.length;\n var numArray1 = [];\n var numArray2 = [];\n var numArray3 = [];\n numArray1.length = length;\n numArray2.length = length;\n numArray3.length = length;\n var index = 0;\n while (index < length) {\n numArray3[index] = 0;\n ++index;\n }\n var index1 = 0;\n while (index1 < length) {\n var num1 = 0;\n var index2 = 0;\n var index3 = 0;\n var index4 = 0;\n while (index4 < length) {\n if (numArray3[index4] !== 1) {\n var index5 = 0;\n while (index5 < length) {\n if (numArray3[index5] === 0 && Math.abs(matrix[index4][index5]) >= num1) {\n num1 = Math.abs(matrix[index4][index5]);\n index2 = index4;\n index3 = index5;\n }\n ++index5;\n }\n }\n ++index4;\n }\n ++numArray3[index3];\n if (index2 !== index3) {\n var index4_1 = 0;\n while (index4_1 < length) {\n var num2 = matrix[index2][index4_1];\n matrix[index2][index4_1] = matrix[index3][index4_1];\n matrix[index3][index4_1] = num2;\n ++index4_1;\n }\n var num3 = polynomialSlopes[index2];\n polynomialSlopes[index2] = polynomialSlopes[index3];\n polynomialSlopes[index3] = num3;\n }\n numArray2[index1] = index2;\n numArray1[index1] = index3;\n if (matrix[index3][index3] === 0.0) {\n return false;\n }\n var num4 = 1.0 / matrix[index3][index3];\n matrix[index3][index3] = 1.0;\n var iindex4 = 0;\n while (iindex4 < length) {\n matrix[index3][iindex4] *= num4;\n ++iindex4;\n }\n polynomialSlopes[index3] *= num4;\n var iandex4 = 0;\n while (iandex4 < length) {\n if (iandex4 !== index3) {\n var num2 = matrix[iandex4][index3];\n matrix[iandex4][index3] = 0.0;\n var index5 = 0;\n while (index5 < length) {\n matrix[iandex4][index5] -= matrix[index3][index5] * num2;\n ++index5;\n }\n polynomialSlopes[iandex4] -= polynomialSlopes[index3] * num2;\n }\n ++iandex4;\n }\n ++index1;\n }\n var iindex1 = length - 1;\n while (iindex1 >= 0) {\n if (numArray2[iindex1] !== numArray1[iindex1]) {\n var iindex2 = 0;\n while (iindex2 < length) {\n var num = matrix[iindex2][numArray2[iindex1]];\n matrix[iindex2][numArray2[iindex1]] = matrix[iindex2][numArray1[iindex1]];\n matrix[iindex2][numArray1[iindex1]] = num;\n ++iindex2;\n }\n }\n --iindex1;\n }\n return true;\n };\n /**\n * Defines the trendline elements\n */\n Trendlines.prototype.getTrendLineElements = function (series, chart) {\n findClipRect(series);\n var clipRect = series.clipRect;\n var clipRectElement = chart.renderer.drawClipPath(new RectOption(chart.element.id + '_ChartTrendlineClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: 0, y: 0, width: clipRect.width,\n height: clipRect.height,\n }));\n var element;\n element = chart.renderer.createGroup({\n 'id': chart.element.id + 'TrendlineSeriesGroup' + series.index,\n 'transform': 'translate(' + clipRect.x + ',' + clipRect.y + ')',\n 'clip-path': 'url(#' + chart.element.id + '_ChartTrendlineClipRect_' + series.index + ')'\n });\n //defines the clip rect element\n element.appendChild(clipRectElement);\n for (var _i = 0, _a = series.trendlines; _i < _a.length; _i++) {\n var trendline = _a[_i];\n this.createTrendLineElements(chart, trendline, trendline.index, element, clipRectElement);\n }\n };\n /**\n * To destroy the trendline\n */\n Trendlines.prototype.destroy = function (chart) {\n /**\n * Destroys the Linear Trendline\n */\n };\n /**\n * Get module name\n */\n Trendlines.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'TrendLine';\n };\n return Trendlines;\n}());\nexport { Trendlines };\n","import { Animation, Browser } from '@syncfusion/ej2-base';\nimport { measureText, findDirection, textElement, getValueXByPoint, stopTimer, getValueYByPoint, TextOption, Rect, ChartLocation, PathOption, withInBounds, removeElement } from '../../common/utils/helper';\n/**\n * `Crosshair` module is used to render the crosshair for chart.\n */\nvar Crosshair = /** @class */ (function () {\n /**\n * Constructor for crosshair module.\n * @private\n */\n function Crosshair(chart) {\n this.arrowLocation = new ChartLocation(0, 0);\n this.rx = 2;\n this.ry = 2;\n this.chart = chart;\n this.elementID = this.chart.element.id;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n Crosshair.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n this.chart.on(cancelEvent, this.mouseLeaveHandler, this);\n this.chart.on('tapHold', this.longPress, this);\n };\n Crosshair.prototype.mouseUpHandler = function () {\n if (this.chart.startMove) {\n this.removeCrosshair(2000);\n }\n };\n Crosshair.prototype.mouseLeaveHandler = function () {\n this.removeCrosshair(1000);\n };\n Crosshair.prototype.mouseMoveHandler = function (event) {\n var chart = this.chart;\n if (event.type === 'touchmove' && (Browser.isIos || Browser.isIos7) && chart.startMove && event.preventDefault) {\n event.preventDefault();\n }\n // Tooltip for chart series.\n if (!chart.disableTrackTooltip) {\n if (withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n if (chart.startMove || !chart.isTouch) {\n this.crosshair();\n }\n }\n else {\n this.removeCrosshair(1000);\n }\n }\n };\n /**\n * Handles the long press on chart.\n * @return {boolean}\n * @private\n */\n Crosshair.prototype.longPress = function () {\n var chart = this.chart;\n if (withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n this.crosshair();\n }\n return false;\n };\n /**\n * Renders the crosshair.\n * @return {void}\n */\n Crosshair.prototype.crosshair = function () {\n var chart = this.chart;\n var horizontalCross = '';\n var verticalCross = '';\n var options;\n var crosshair = chart.crosshair;\n var chartRect = chart.chartAxisLayoutPanel.seriesClipRect;\n var crossGroup = document.getElementById(this.elementID + '_UserInteraction');\n this.stopAnimation();\n if (chart.tooltip.enable && !withInBounds(chart.tooltipModule.valueX, chart.tooltipModule.valueY, chartRect)) {\n return null;\n }\n this.valueX = chart.tooltip.enable ? chart.tooltipModule.valueX : chart.mouseX;\n this.valueY = chart.tooltip.enable ? chart.tooltipModule.valueY : chart.mouseY;\n crossGroup.setAttribute('opacity', '1');\n if (crosshair.lineType === 'Both' || crosshair.lineType === 'Horizontal') {\n horizontalCross += 'M ' + chartRect.x + ' ' + this.valueY +\n ' L ' + (chartRect.x + chartRect.width) + ' ' + this.valueY;\n }\n if (crosshair.lineType === 'Both' || crosshair.lineType === 'Vertical') {\n verticalCross += 'M ' + this.valueX + ' ' + chartRect.y +\n ' L ' + this.valueX + ' ' + (chartRect.y + chartRect.height);\n }\n if (crossGroup.childNodes.length === 0) {\n var axisTooltipGroup = chart.renderer.createGroup({ 'id': this.elementID + '_crosshair_axis' });\n options = new PathOption(this.elementID + '_HorizontalLine', 'none', crosshair.line.width, crosshair.line.color || chart.themeStyle.crosshairLine, 1, null, horizontalCross);\n this.renderCrosshairLine(options, crossGroup);\n options.d = verticalCross;\n options.id = this.elementID + '_VerticalLine';\n this.renderCrosshairLine(options, crossGroup);\n crossGroup.appendChild(axisTooltipGroup);\n this.renderAxisTooltip(chart, chartRect, crossGroup.lastChild);\n }\n else {\n document.getElementById(this.elementID + '_HorizontalLine').setAttribute('d', horizontalCross);\n document.getElementById(this.elementID + '_VerticalLine').setAttribute('d', verticalCross);\n this.renderAxisTooltip(chart, chartRect, crossGroup.lastChild);\n }\n };\n Crosshair.prototype.renderCrosshairLine = function (options, crossGroup) {\n var htmlObject = this.chart.renderer.drawPath(options);\n crossGroup.appendChild(htmlObject);\n };\n Crosshair.prototype.renderAxisTooltip = function (chart, chartRect, axisGroup) {\n var axis;\n var text;\n var rect;\n var pathElement;\n var textElem;\n var options;\n var padding = 5;\n var direction;\n var axisRect;\n for (var k = 0, length_1 = chart.axisCollections.length; k < length_1; k++) {\n axis = chart.axisCollections[k];\n axisRect = !axis.placeNextToAxisLine ? axis.rect : axis.updatedRect;\n if (axis.crosshairTooltip.enable) {\n if ((this.valueX <= (axisRect.x + axisRect.width) && axisRect.x <= this.valueX) ||\n (this.valueY <= (axisRect.y + axisRect.height) && axisRect.y <= this.valueY)) {\n pathElement = document.getElementById(this.elementID + '_axis_tooltip_' + k);\n textElem = document.getElementById(this.elementID + '_axis_tooltip_text_' + k);\n text = this.getAxisText(axis);\n if (!text) {\n continue;\n }\n rect = this.tooltipLocation(text, axis, chartRect, axisRect);\n if (pathElement === null) {\n pathElement = chart.renderer.drawPath({\n 'id': this.elementID + '_axis_tooltip_' + k,\n 'fill': axis.crosshairTooltip.fill || chart.themeStyle.crosshairFill\n });\n axisGroup.appendChild(pathElement);\n options = new TextOption(this.elementID + '_axis_tooltip_text_' + k, 0, 0, 'start', text);\n textElem = textElement(options, axis.crosshairTooltip.textStyle, axis.crosshairTooltip.textStyle.color || chart.themeStyle.crosshairLabel, axisGroup);\n }\n direction = findDirection(this.rx, this.ry, rect, this.arrowLocation, 10, this.isTop, this.isBottom, this.isLeft, this.valueX, this.valueY);\n pathElement.setAttribute('d', direction);\n textElem.textContent = text;\n textElem.setAttribute('x', (rect.x + padding).toString());\n textElem.setAttribute('y', (rect.y + padding + 3 * this.elementSize.height / 4).toString());\n }\n else {\n removeElement(this.elementID + '_axis_tooltip_' + k);\n removeElement(this.elementID + '_axis_tooltip_text_' + k);\n }\n }\n }\n };\n Crosshair.prototype.getAxisText = function (axis) {\n var value;\n this.isBottom = false;\n this.isTop = false;\n this.isLeft = false;\n this.isRight = false;\n var labelValue = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks')\n ? 0.5 : 0;\n if (axis.orientation === 'Horizontal') {\n value = getValueXByPoint(Math.abs(this.valueX - axis.rect.x), axis.rect.width, axis) + labelValue;\n this.isBottom = !axis.opposedPosition;\n this.isTop = axis.opposedPosition;\n }\n else {\n value = getValueYByPoint(Math.abs(this.valueY - axis.rect.y), axis.rect.height, axis) + labelValue;\n this.isRight = axis.opposedPosition;\n this.isLeft = !axis.opposedPosition;\n }\n if (axis.valueType === 'DateTime') {\n return axis.format(new Date(value));\n }\n else if (axis.valueType === 'Category') {\n return axis.labels[Math.floor(value)];\n }\n else if (axis.valueType === 'Logarithmic') {\n return value = axis.format(Math.pow(axis.logBase, value));\n }\n else {\n var customLabelFormat = axis.labelFormat && axis.labelFormat.match('{value}') !== null;\n return customLabelFormat ? axis.labelFormat.replace('{value}', axis.format(value)) : axis.format(value);\n }\n };\n Crosshair.prototype.tooltipLocation = function (text, axis, bounds, axisRect) {\n var isBottom = false;\n var isLeft = false;\n var padding = 5;\n var arrowPadding = 10;\n var tooltipRect;\n var boundsX = bounds.x;\n var boundsY = bounds.y;\n var islabelInside = axis.labelPosition === 'Inside';\n 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, 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 element.remove();\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 firstElement.remove();\n }\n if (!argsData.cancel) {\n var templateElement = this.templateFn(this.data);\n var elem = this.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) {\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 if (!series.isRectSeries) {\n markerHeight = (this.chart.tooltip.shared || series.marker.visible || series.type === 'Scatter'\n || series.drawType === 'Scatter') ? ((series.marker.height + 2) / 2 + (2 * series.marker.border.width)) : 0;\n }\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.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 Zoom.prototype.calculateZoomAxesRange = function (chart, axes) {\n var _this = this;\n var range;\n var axisRange;\n chart.axisCollections.forEach(function (axis, index) {\n axisRange = axis.visibleRange;\n if (_this.zoomAxes[index]) {\n if (!chart.delayRedraw) {\n _this.zoomAxes[index].min = axisRange.min;\n _this.zoomAxes[index].delta = axisRange.delta;\n }\n }\n else {\n range = {\n actualMin: axis.actualRange.min,\n actualDelta: axis.actualRange.delta,\n min: axisRange.min,\n delta: axisRange.delta\n };\n _this.zoomAxes[index] = range;\n }\n });\n };\n // Zooming Toolkit created here\n Zoom.prototype.showZoomingToolkit = function (chart) {\n var toolboxItems = this.zooming.toolbarItems;\n var areaBounds = chart.chartAxisLayoutPanel.seriesClipRect;\n var spacing = 5;\n var render = chart.renderer;\n var length = this.isDevice ? 1 : toolboxItems.length;\n var iconSize = this.isDevice ? measureText('Reset Zoom', { size: '12px' }).width : 16;\n var height = this.isDevice ? measureText('Reset Zoom', { size: '12px' }).height : 22;\n var width = (length * iconSize) + ((length + 1) * spacing) + ((length - 1) * spacing);\n var transX = areaBounds.x + areaBounds.width - width - spacing;\n var transY = (areaBounds.y + spacing);\n var xPosition = spacing;\n var outerElement;\n var toolkit = this.toolkit;\n var element;\n var shadowElement = '';\n shadowElement += '';\n shadowElement += '';\n if (length === 0 || getElement(this.elementId + '_Zooming_KitCollection')) {\n return false;\n }\n var defElement = render.createDefs();\n toolboxItems = this.isDevice ? ['Reset'] : toolboxItems;\n defElement.innerHTML = shadowElement;\n this.toolkitElements = render.createGroup({\n id: this.elementId + '_Zooming_KitCollection',\n transform: 'translate(' + transX + ',' + transY + ')'\n });\n this.toolkitElements.appendChild(defElement);\n this.toolkitElements.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Rect', '#fafafa', { color: 'transparent', width: 1 }, 1, new Rect(0, 0, width, (height + (spacing * 2))), 0, 0)));\n outerElement = render.drawRectangle(new RectOption(this.elementId + '_Zooming_Rect', '#fafafa', { color: 'transparent', width: 1 }, 0.1, new Rect(0, 0, width, (height + (spacing * 2))), 0, 0));\n outerElement.setAttribute('filter', 'url(#chart_shadow)');\n this.toolkitElements.appendChild(outerElement);\n var currentItem;\n for (var i = 1; i <= length; i++) {\n currentItem = toolboxItems[i - 1];\n element = render.createGroup({\n transform: 'translate(' + xPosition + ',' + (this.isDevice ? spacing : (spacing + 3)) + ')'\n });\n // for desktop toolkit hight is 32 and top padding is 8 icon size 16\n switch (currentItem) {\n case 'Pan':\n toolkit.createPanButton(element, this.toolkitElements, chart);\n break;\n case 'Zoom':\n toolkit.createZoomButton(element, this.toolkitElements, chart);\n break;\n case 'ZoomIn':\n toolkit.createZoomInButton(element, this.toolkitElements, chart);\n break;\n case 'ZoomOut':\n toolkit.createZoomOutButton(element, this.toolkitElements, chart);\n break;\n case 'Reset':\n toolkit.createResetButton(element, this.toolkitElements, chart, this.isDevice);\n break;\n }\n xPosition += iconSize + (spacing * 2);\n }\n this.toolkitElements.setAttribute('opacity', this.isDevice ? '1' : '' + this.zoomkitOpacity);\n this.toolkitElements.setAttribute('cursor', 'auto');\n chart.svgObject.appendChild(this.toolkitElements);\n if (!this.isDevice) {\n EventHandler.add(this.toolkitElements, 'mousemove touchstart', this.zoomToolkitMove, this);\n EventHandler.add(this.toolkitElements, 'mouseleave touchend', this.zoomToolkitLeave, this);\n if (this.isPanning) {\n toolkit.pan();\n }\n }\n return true;\n };\n /**\n * To the show the zooming toolkit.\n * @return {void}\n * @private\n */\n Zoom.prototype.applyZoomToolkit = function (chart, axes) {\n var showToolkit = this.isAxisZoomed(axes);\n if (showToolkit) {\n this.showZoomingToolkit(chart);\n this.isZoomed = true;\n }\n else {\n this.toolkit.removeTooltip();\n this.isPanning = false;\n this.isZoomed = false;\n chart.svgObject.setAttribute('cursor', 'auto');\n }\n };\n /**\n * Return boolean property to show zooming toolkit.\n * @return {void}\n * @private\n */\n Zoom.prototype.isAxisZoomed = function (axes) {\n var showToolkit = false;\n axes.forEach(function (axis) {\n showToolkit = (showToolkit || (axis.zoomFactor !== 1 || axis.zoomPosition !== 0));\n });\n return showToolkit;\n };\n Zoom.prototype.zoomToolkitMove = function (e) {\n var element = this.toolkitElements;\n var opacity = +element.getAttribute('opacity');\n this.zoomkitOpacity = 1;\n element.setAttribute('opacity', '' + this.zoomkitOpacity);\n return false;\n };\n Zoom.prototype.zoomToolkitLeave = function (e) {\n var element = this.toolkitElements;\n this.zoomkitOpacity = 0.3;\n element.setAttribute('opacity', '' + this.zoomkitOpacity);\n return false;\n };\n /**\n * @hidden\n */\n Zoom.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n EventHandler.add(this.chart.element, this.wheelEvent, this.chartMouseWheel, this);\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchStartEvent, this.mouseDownHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n this.chart.on(this.cancelEvent, this.mouseCancelHandler, this);\n };\n /**\n * @hidden\n */\n Zoom.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n EventHandler.remove(this.chart.element, this.wheelEvent, this.chartMouseWheel);\n this.chart.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n this.chart.off(Browser.touchStartEvent, this.mouseDownHandler);\n this.chart.off(Browser.touchEndEvent, this.mouseUpHandler);\n this.chart.off(this.cancelEvent, this.mouseCancelHandler);\n };\n /**\n * Handles the mouse wheel on chart.\n * @return {boolean}\n * @private\n */\n Zoom.prototype.chartMouseWheel = function (e) {\n var chart = this.chart;\n var offset = chart.element.getBoundingClientRect();\n var svgRect = getElement(chart.element.id + '_svg').getBoundingClientRect();\n var mouseX = (e.clientX - offset.left) - Math.max(svgRect.left - offset.left, 0);\n var mouseY = (e.clientY - offset.top) - Math.max(svgRect.top - offset.top, 0);\n if (this.zooming.enableMouseWheelZooming &&\n withInBounds(mouseX, mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n e.preventDefault();\n this.performMouseWheelZooming(e, mouseX, mouseY, chart, chart.axisCollections);\n }\n return false;\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseMoveHandler = function (e) {\n //Zooming for chart\n var chart = this.chart;\n var touches = null;\n if (e.type === 'touchmove') {\n if (e.preventDefault && this.isIOS &&\n (this.isPanning || (chart.isDoubleTap)\n || (this.zooming.enablePinchZooming && this.touchStartList.length > 1))) {\n e.preventDefault();\n }\n touches = e.touches;\n }\n if (chart.isChartDrag) {\n if (chart.isTouch) {\n this.touchMoveList = this.addTouchPointer(this.touchMoveList, e, touches);\n if (this.zooming.enablePinchZooming && this.touchMoveList.length > 1\n && this.touchStartList.length > 1) {\n this.performPinchZooming(e, chart);\n }\n }\n this.renderZooming(e, chart, chart.isTouch);\n }\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseDownHandler = function (e) {\n //Zooming for chart\n var chart = this.chart;\n var touches = null;\n var target;\n if (e.type === 'touchstart') {\n touches = e.touches;\n target = e.target;\n }\n else {\n target = e.target;\n }\n if (target.id.indexOf(chart.element.id + '_Zooming_') === -1 &&\n withInBounds(chart.previousMouseMoveX, chart.previousMouseMoveY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n chart.isChartDrag = true;\n }\n if (chart.isTouch) {\n this.touchStartList = this.addTouchPointer(this.touchStartList, e, touches);\n }\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseUpHandler = function (e) {\n var chart = this.chart;\n var performZoomRedraw = e.target.id.indexOf(chart.element.id + '_ZoomOut_') === -1 ||\n e.target.id.indexOf(chart.element.id + '_ZoomIn_') === -1;\n if (chart.isChartDrag || performZoomRedraw) {\n this.performZoomRedraw(chart);\n }\n if (chart.isTouch) {\n if (chart.isDoubleTap && withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)\n && this.touchStartList.length === 1 && this.isZoomed) {\n this.toolkit.reset();\n }\n this.touchStartList = [];\n chart.isDoubleTap = false;\n }\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseCancelHandler = function (e) {\n if (this.isZoomed) {\n this.performZoomRedraw(this.chart);\n }\n this.pinchTarget = null;\n this.touchStartList = [];\n this.touchMoveList = [];\n };\n /**\n * Handles the touch pointer.\n * @return {boolean}\n * @private\n */\n Zoom.prototype.addTouchPointer = function (touchList, e, touches) {\n if (touches) {\n touchList = [];\n for (var i = 0, length_1 = touches.length; i < length_1; i++) {\n touchList.push({ pageX: touches[i].clientX, pageY: touches[i].clientY, pointerId: null });\n }\n }\n else {\n touchList = touchList ? touchList : [];\n if (touchList.length === 0) {\n touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n }\n else {\n for (var i = 0, length_2 = touchList.length; i < length_2; i++) {\n if (touchList[i].pointerId === e.pointerId) {\n touchList[i] = { pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId };\n }\n else {\n touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n }\n }\n }\n }\n return touchList;\n };\n /**\n * Get module name.\n */\n Zoom.prototype.getModuleName = function () {\n // Returns te module name\n return 'Zoom';\n };\n /**\n * To destroy the zooming.\n * @return {void}\n * @private\n */\n Zoom.prototype.destroy = function (chart) {\n // Destroy method performed here\n this.removeEventListener();\n };\n return Zoom;\n}());\nexport { Zoom };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Selection Module handles the selection for chart.\n * @private\n */\nvar BaseSelection = /** @class */ (function () {\n function BaseSelection(control) {\n this.control = control;\n }\n /**\n * To create selection styles for series\n */\n BaseSelection.prototype.seriesStyles = function () {\n var seriesclass;\n var style = document.getElementById(this.styleId);\n if (isNullOrUndefined(style)) {\n style = document.createElement('style');\n style.setAttribute('id', this.styleId);\n for (var _i = 0, _a = this.control.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n seriesclass = series.selectionStyle || this.styleId + '_series_' + series.index;\n style.innerHTML += series.selectionStyle ? '' : '.' + seriesclass + ' { } ';\n }\n style.innerHTML += '.' + this.unselected + ' { opacity:' + (0.3) + ';} ';\n document.body.appendChild(style);\n }\n };\n /**\n * To concat indexes\n */\n BaseSelection.prototype.concatIndexes = function (userIndexes, localIndexes) {\n return userIndexes.concat(localIndexes);\n };\n /**\n * Selected points series visibility checking on legend click\n */\n BaseSelection.prototype.checkVisibility = function (selectedIndexes) {\n var visible = false;\n var uniqueSeries = [];\n for (var _i = 0, selectedIndexes_1 = selectedIndexes; _i < selectedIndexes_1.length; _i++) {\n var index = selectedIndexes_1[_i];\n if (uniqueSeries.indexOf(index.series) === -1) {\n uniqueSeries.push(index.series);\n }\n }\n for (var _a = 0, uniqueSeries_1 = uniqueSeries; _a < uniqueSeries_1.length; _a++) {\n var index = uniqueSeries_1[_a];\n if (this.control.series[index].visible) {\n visible = true;\n break;\n }\n }\n return visible;\n };\n /**\n * To add svg element style class\n * @private\n */\n BaseSelection.prototype.addSvgClass = function (element, className) {\n var elementClassName = element.getAttribute('class') || '';\n elementClassName += ((elementClassName !== '') ? ' ' : '');\n if (elementClassName.indexOf(className) === -1) {\n element.setAttribute('class', elementClassName + className);\n }\n };\n /**\n * To remove svg element style class\n * @private\n */\n BaseSelection.prototype.removeSvgClass = function (element, className) {\n var elementClassName = element.getAttribute('class') || '';\n if (elementClassName.indexOf(className) > -1) {\n element.setAttribute('class', elementClassName.replace(className, ''));\n }\n };\n /**\n * To get children from parent element\n */\n BaseSelection.prototype.getChildren = function (parent) {\n var children = [];\n for (var i = 0; i < parent.childNodes.length; i++) {\n if (parent.childNodes[i].tagName !== 'defs') {\n children.push(parent.childNodes[i]);\n }\n }\n return children;\n };\n return BaseSelection;\n}());\nexport { BaseSelection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Selection src file\n */\nimport { Browser } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ChartLocation, Rect, RectOption, CircleOption, withInBounds, getDraggedRectLocation, removeElement, getElement } from '../../common/utils/helper';\nimport { Index } from '../../common/model/base';\nimport { dragComplete } from '../../common/model/constants';\nimport { BaseSelection } from '../../common/user-interaction/selection';\n/**\n * `Selection` module handles the selection for chart.\n * @private\n */\nvar Selection = /** @class */ (function (_super) {\n __extends(Selection, _super);\n /**\n * Constructor for selection module.\n * @private.\n */\n function Selection(chart) {\n var _this = _super.call(this, chart) || this;\n _this.chart = chart;\n _this.renderer = chart.renderer;\n _this.addEventListener();\n return _this;\n }\n /**\n * Binding events for selection module.\n */\n Selection.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.chart.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.chart.on(cancelEvent, this.completeSelection, this);\n this.chart.on('click', this.calculateSelectedElements, this);\n this.chart.on(Browser.touchStartEvent, this.mousedown, this);\n this.chart.on(Browser.touchEndEvent, this.completeSelection, this);\n };\n /**\n * Chart mouse down\n */\n Selection.prototype.mousedown = function (e) {\n var chart = this.chart;\n if (chart.selectionMode === 'None' || chart.isChartDrag) {\n return;\n }\n if (chart.isDoubleTap || !chart.isTouch || this.rectPoints) {\n this.dragStart(chart, chart.chartAxisLayoutPanel.seriesClipRect, chart.mouseDownX, chart.mouseDownY, e);\n }\n };\n /**\n * UnBinding events for selection module.\n */\n Selection.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.off(Browser.touchMoveEvent, this.mouseMove);\n this.chart.off('pointerleave' || 'mouseleave', this.completeSelection);\n this.chart.off('click', this.calculateSelectedElements);\n this.chart.off(Browser.touchStartEvent, this.mousedown);\n this.chart.off(Browser.touchEndEvent, this.completeSelection);\n };\n /**\n * To find private variable values\n */\n Selection.prototype.initPrivateVariables = function (chart) {\n this.styleId = chart.element.id + '_ej2_chart_selection';\n this.unselected = chart.element.id + '_ej2_deselected';\n this.closeIconId = chart.element.id + '_ej2_drag_close';\n this.draggedRectGroup = chart.element.id + '_ej2_drag_group';\n this.draggedRect = chart.element.id + '_ej2_drag_rect';\n this.selectedDataIndexes = [];\n this.rectPoints = null;\n this.isSeriesMode = chart.selectionMode === 'Series';\n };\n /**\n * Method to select the point and series.\n * @return {void}\n */\n Selection.prototype.invokeSelection = function (chart) {\n this.initPrivateVariables(chart);\n this.series = extend({}, chart.visibleSeries, null, true);\n this.seriesStyles();\n if (!(chart.selectionMode.indexOf('Drag') > -1)) {\n this.selectDataIndex(chart, this.concatIndexes(chart.selectedDataIndexes, this.selectedDataIndexes));\n }\n };\n Selection.prototype.generateStyle = function (series) {\n if (series) {\n return (series.selectionStyle || this.styleId + '_series_' + series.index);\n }\n return 'undefined';\n };\n Selection.prototype.selectDataIndex = function (chart, indexes) {\n for (var _i = 0, indexes_1 = indexes; _i < indexes_1.length; _i++) {\n var index = indexes_1[_i];\n this.performSelection(index, chart, this.getElementByIndex(chart, index)[0]);\n }\n };\n Selection.prototype.getElementByIndex = function (chart, index, suffix) {\n if (suffix === void 0) { suffix = ''; }\n var elementId = chart.element.id + '_Series_' + index.series + '_Point' + '_' + index.point;\n var series = chart.series[index.series];\n elementId = (!series.isRectSeries && series.type !== 'Scatter' && series.type !== 'Bubble' &&\n series.marker.visible) ? (elementId + '_Symbol' + suffix) : elementId;\n return [getElement(elementId), (series.type === 'RangeArea' && series.marker.visible) ? getElement(elementId + '1') : null];\n };\n Selection.prototype.getClusterElements = function (chart, index) {\n var clusters = [];\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n index = new Index(series.index, index.point);\n clusters.push(this.getElementByIndex(chart, index)[0]);\n }\n return clusters;\n };\n Selection.prototype.findElements = function (chart, series, index, suffix) {\n if (suffix === void 0) { suffix = ''; }\n if (this.isSeriesMode) {\n return this.getSeriesElements(series);\n }\n else if (chart.selectionMode === 'Cluster') {\n return this.getClusterElements(chart, index);\n }\n else {\n return this.getElementByIndex(chart, index, suffix);\n }\n };\n /**\n * To find the selected element.\n * @return {void}\n * @private\n */\n Selection.prototype.calculateSelectedElements = function (event) {\n if (this.chart.selectionMode === 'None' || event.target.id.indexOf(this.chart.element.id + '_') === -1) {\n return;\n }\n if (event.target.id.indexOf('_Series_') > -1) {\n this.performSelection(this.indexFinder(event.target.id), this.chart, event.target);\n }\n };\n Selection.prototype.performSelection = function (index, chart, element) {\n this.isSeriesMode = chart.selectionMode === 'Series';\n if (chart.series[index.series].type === 'BoxAndWhisker' &&\n element.id === chart.element.id + '_Series_' + index.series + '_Point_' + index.point + '_BoxPath') {\n element = element.parentElement;\n }\n switch (chart.selectionMode) {\n case 'Series':\n this.selection(chart, index, this.getSeriesElements(chart.series[index.series]));\n this.blurEffect(chart.element.id, chart.visibleSeries);\n break;\n case 'Point':\n if (!isNaN(index.point)) {\n this.selection(chart, index, [element]);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n break;\n case 'Cluster':\n if (!isNaN(index.point)) {\n this.clusterSelection(chart, chart.series, index);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n break;\n }\n };\n Selection.prototype.selection = function (chart, index, selectedElements) {\n if (!chart.isMultiSelect && (chart.selectionMode.indexOf('Drag') === -1)) {\n this.removeMultiSelectEelments(chart, this.selectedDataIndexes, index, chart.series);\n }\n var className = selectedElements[0] && (selectedElements[0].getAttribute('class') || '');\n if (selectedElements[0] && className.indexOf(this.getSelectionClass(selectedElements[0].id)) > -1) {\n this.removeStyles(selectedElements);\n this.addOrRemoveIndex(this.selectedDataIndexes, index);\n }\n else {\n this.applyStyles(selectedElements);\n this.addOrRemoveIndex(this.selectedDataIndexes, index, true);\n }\n };\n Selection.prototype.clusterSelection = function (chart, series, index) {\n this.selection(chart, index, this.getClusterElements(chart, new Index(index.series, index.point)));\n };\n Selection.prototype.removeMultiSelectEelments = function (chart, index, currentIndex, seriesCollection) {\n var series;\n for (var i = 0; i < index.length; i++) {\n series = seriesCollection[index[i].series];\n if ((this.isSeriesMode && !this.toEquals(index[i], currentIndex, this.isSeriesMode)) ||\n (this.control.selectionMode === 'Cluster' && !this.toEquals(index[i], currentIndex, false)) ||\n (!this.isSeriesMode && this.toEquals(index[i], currentIndex, true) && !this.toEquals(index[i], currentIndex, false))) {\n this.removeStyles(this.findElements(chart, series, index[i]));\n index.splice(i, 1);\n i--;\n }\n }\n };\n Selection.prototype.blurEffect = function (chartId, visibleSeries) {\n var visibility = this.checkVisibility(this.selectedDataIndexes); // legend click scenario\n for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n var series = visibleSeries_1[_i];\n if (series.visible) {\n this.checkSelectionElements(getElement(chartId + 'SeriesGroup' + series.index), this.generateStyle(series), visibility);\n if (!isNullOrUndefined(getElement(chartId + 'SymbolGroup' + series.index))) {\n this.checkSelectionElements(getElement(chartId + 'SymbolGroup' + series.index), this.generateStyle(series), visibility);\n }\n }\n }\n };\n Selection.prototype.checkSelectionElements = function (element, className, visibility) {\n var children = (this.isSeriesMode ? [element] : element.childNodes);\n var elementClassName;\n var parentClassName;\n var legendShape;\n var selectElement = element;\n for (var i = 0; i < children.length; i++) {\n elementClassName = children[i].getAttribute('class') || '';\n parentClassName = children[i].parentNode.getAttribute('class') || '';\n if (elementClassName.indexOf(className) === -1 &&\n parentClassName.indexOf(className) === -1 && visibility) {\n this.addSvgClass(children[i], this.unselected);\n }\n else {\n selectElement = children[i];\n this.removeSvgClass(children[i], this.unselected);\n }\n }\n if (this.control.legendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + className.split('_series_')[1]);\n if (legendShape) {\n elementClassName = selectElement.getAttribute('class') || '';\n parentClassName = selectElement.parentNode.getAttribute('class') || '';\n if (elementClassName.indexOf(className) === -1 && parentClassName.indexOf(className) === -1 && visibility) {\n this.addSvgClass(legendShape, this.unselected);\n }\n else {\n this.removeSvgClass(legendShape, this.unselected);\n }\n }\n }\n };\n Selection.prototype.applyStyles = function (elements) {\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n if (element) {\n this.removeSvgClass(element.parentNode, this.unselected);\n this.removeSvgClass(element, this.unselected);\n this.addSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n Selection.prototype.getSelectionClass = function (id) {\n return this.generateStyle(this.control.series[this.indexFinder(id).series]);\n };\n Selection.prototype.removeStyles = function (elements) {\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n if (element) {\n this.removeSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n Selection.prototype.addOrRemoveIndex = function (indexes, index, add) {\n for (var i = 0; i < indexes.length; i++) {\n if (this.toEquals(indexes[i], index, this.isSeriesMode)) {\n indexes.splice(i, 1);\n i--;\n }\n }\n if (add) {\n indexes.push(index);\n }\n };\n Selection.prototype.toEquals = function (first, second, checkSeriesOnly) {\n return ((first.series === second.series || (this.control.selectionMode === 'Cluster' && !checkSeriesOnly))\n && (checkSeriesOnly || (first.point === second.point)));\n };\n /**\n * To redraw the selected points.\n * @return {void}\n * @private\n */\n Selection.prototype.redrawSelection = function (chart, oldMode) {\n this.isSeriesMode = oldMode === 'Series';\n var selectedDataIndexes = extend([], this.selectedDataIndexes, null, true);\n this.removeSelectedElements(chart, this.selectedDataIndexes, chart.series);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n this.selectDataIndex(chart, selectedDataIndexes);\n };\n /** @private */\n Selection.prototype.legendSelection = function (chart, series) {\n var seriesStyle = this.generateStyle(chart.visibleSeries[series]);\n var selectedElements = document.getElementsByClassName(seriesStyle);\n this.isSeriesMode = chart.selectionMode === 'Series';\n var isBlurEffectNeeded = true;\n if (selectedElements.length > 0) {\n var elements = [];\n for (var i = 0; i < selectedElements.length; i++) {\n elements.push(selectedElements[i]);\n }\n this.removeStyles(elements);\n this.isSeriesMode = true;\n this.addOrRemoveIndex(this.selectedDataIndexes, new Index(series, NaN));\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n seriesStyle = this.generateStyle(series_1);\n if (document.getElementsByClassName(seriesStyle).length > 0) {\n for (var _b = 0, elements_3 = elements; _b < elements_3.length; _b++) {\n var element = elements_3[_b];\n this.checkSelectionElements(element, seriesStyle, true);\n }\n isBlurEffectNeeded = false;\n break;\n }\n }\n if (isBlurEffectNeeded) {\n this.isSeriesMode = chart.selectionMode === 'Series';\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n }\n else {\n var seriesElements = this.getSeriesElements(chart.visibleSeries[series]);\n for (var _c = 0, seriesElements_1 = seriesElements; _c < seriesElements_1.length; _c++) {\n var seriesElement = seriesElements_1[_c];\n this.checkSelectionElements(seriesElement, seriesStyle, false);\n }\n this.isSeriesMode = true;\n this.selection(chart, new Index(series, NaN), seriesElements);\n this.isSeriesMode = chart.selectionMode === 'Series';\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n };\n Selection.prototype.getSeriesElements = function (series) {\n var seriesElements = [series.seriesElement];\n if (series.marker.visible && series.type !== 'Scatter' && series.type !== 'Bubble' && !series.isRectSeries) {\n seriesElements.push(series.symbolElement);\n }\n return seriesElements;\n };\n Selection.prototype.indexFinder = function (id) {\n var ids = ['NaN', 'NaN'];\n if (id.indexOf('SeriesGroup') > -1) {\n ids = id.split('SeriesGroup');\n ids[0] = ids[1];\n }\n else if (id.indexOf('SymbolGroup') > -1) {\n ids = id.split('SymbolGroup');\n ids[0] = ids[1];\n }\n else if (id.indexOf('_Point_') > -1) {\n ids = id.split('_Series_')[1].split('_Point_');\n }\n else if (id.indexOf('_Series_') > -1) {\n ids[0] = id.split('_Series_')[1];\n }\n return new Index(parseInt(ids[0], 10), parseInt(ids[1], 10));\n };\n /**\n * Drag selection that returns the selected data.\n * @return {void}\n * @private\n */\n Selection.prototype.calculateDragSelectedElements = function (chart, dragRect) {\n this.removeSelectedElements(chart, this.selectedDataIndexes, chart.series);\n var rect = new Rect(dragRect.x, dragRect.y, dragRect.width, dragRect.height);\n var axisOffset = new ChartLocation(chart.chartAxisLayoutPanel.seriesClipRect.x, chart.chartAxisLayoutPanel.seriesClipRect.y);\n this.removeOffset(rect, axisOffset);\n var points;\n var index;\n var selectedPointValues = [];\n var selectedSeriesValues = [];\n this.isSeriesMode = false;\n var symbolLocation;\n var _loop_1 = function (series) {\n if (series.visible) {\n points = series.points;\n selectedPointValues = [];\n var xAxisOffset_1;\n var yAxisOffset_1;\n if ((chart.isTransposed || series.type.indexOf('Bar') !== -1) &&\n !(chart.isTransposed && series.type.indexOf('Bar') !== -1)) {\n xAxisOffset_1 = series.xAxis.rect.y - axisOffset.y;\n yAxisOffset_1 = series.yAxis.rect.x - axisOffset.x;\n }\n else {\n xAxisOffset_1 = series.xAxis.rect.x - axisOffset.x;\n yAxisOffset_1 = series.yAxis.rect.y - axisOffset.y;\n }\n for (var j = 0; j < points.length; j++) {\n var yValue = series.type !== 'RangeArea' ? points[j].yValue :\n points[j].regions[0].y;\n var isCurrentPoint = void 0;\n if (series.type === 'BoxAndWhisker') {\n isCurrentPoint = points[j].regions.some(function (region) {\n return withInBounds(region.x + xAxisOffset_1, region.y + yAxisOffset_1, rect);\n });\n }\n else {\n isCurrentPoint = points[j].symbolLocations.some(function (location) {\n return location && withInBounds(location.x + xAxisOffset_1, location.y + yAxisOffset_1, rect);\n });\n }\n if (isCurrentPoint && series.category !== 'Indicator') {\n index = new Index(series.index, points[j].index);\n this_1.selection(chart, index, this_1.findElements(chart, series, index));\n selectedPointValues.push({ x: points[j].xValue.toString(), y: yValue });\n }\n if (isCurrentPoint && series.type === 'RangeArea') {\n selectedPointValues.push({ x: points[j].xValue.toString(), y: points[j].regions[0].y });\n }\n }\n selectedSeriesValues.push(selectedPointValues);\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n _loop_1(series);\n }\n this.blurEffect(chart.element.id, chart.visibleSeries);\n this.rectPoints = new Rect(dragRect.x, dragRect.y, dragRect.width, dragRect.height);\n this.createCloseButton((dragRect.x + dragRect.width), dragRect.y);\n var args = {\n name: dragComplete,\n selectedDataValues: selectedSeriesValues,\n cancel: false\n };\n chart.trigger(dragComplete, args);\n };\n Selection.prototype.removeOffset = function (rect, clip) {\n rect.x -= clip.x;\n rect.y -= clip.y;\n };\n /**\n * Method to draw dragging rect.\n * @return {void}\n * @private\n */\n Selection.prototype.drawDraggingRect = function (chart, dragRect) {\n var cartesianLayout = chart.chartAxisLayoutPanel.seriesClipRect;\n switch (chart.selectionMode) {\n case 'DragX':\n dragRect.y = cartesianLayout.y;\n dragRect.height = cartesianLayout.height;\n break;\n case 'DragY':\n dragRect.x = cartesianLayout.x;\n dragRect.width = cartesianLayout.width;\n break;\n }\n if (dragRect.width < 5 || dragRect.height < 5) {\n return null;\n }\n var element = getElement(this.draggedRect);\n if (this.closeIcon) {\n removeElement(this.closeIconId);\n }\n if (element) {\n this.setAttributes(element, dragRect);\n }\n else {\n var dragGroup = chart.renderer.createGroup({ id: this.draggedRectGroup });\n chart.svgObject.appendChild(dragGroup);\n element = chart.renderer.drawRectangle(new RectOption(this.draggedRect, chart.themeStyle.selectionRectFill, { color: chart.themeStyle.selectionRectStroke, width: 1 }, 1, dragRect));\n element.setAttribute('style', 'cursor:move;');\n dragGroup.appendChild(element);\n }\n };\n Selection.prototype.createCloseButton = function (x, y) {\n var closeIcon = this.chart.renderer.createGroup({\n id: this.closeIconId,\n style: 'cursor:pointer; visibility: visible;'\n });\n closeIcon.appendChild(this.chart.renderer.drawCircle(new CircleOption(this.closeIconId + '_circle', '#FFFFFF', { color: this.chart.themeStyle.selectionCircleStroke, width: 1 }, 1, x, y, 10)));\n var direction = 'M ' + (x - 4) + ' ' + (y - 4) + ' L ' + (x + 4) + ' ' + (y + 4) + ' M ' + (x - 4) + ' ' + (y + 4) +\n ' L ' + (x + 4) + ' ' + (y - 4);\n closeIcon.appendChild(this.chart.renderer.drawPath({\n id: this.closeIconId + '_cross', d: direction,\n stroke: this.chart.themeStyle.selectionCircleStroke,\n 'stroke-width': 2, fill: this.chart.themeStyle.selectionCircleStroke\n }));\n this.closeIcon = closeIcon;\n getElement(this.draggedRectGroup).appendChild(closeIcon);\n };\n /**\n * Method to remove dragged element.\n * @return {void}\n * @private\n */\n Selection.prototype.removeDraggedElements = function (chart, event) {\n if ((event.target.id.indexOf(this.closeIconId) > -1) && (event.type.indexOf('move') === -1)) {\n this.removeSelectedElements(chart, this.selectedDataIndexes, chart.series);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n remove(getElement(this.draggedRectGroup));\n this.changeCursorStyle(false, chart.svgObject, 'auto');\n this.rectPoints = null;\n }\n };\n /**\n * Method to resize the drag rect.\n * @return {void}\n * @private\n */\n Selection.prototype.resizingSelectionRect = function (chart, location, tapped) {\n var rect = new Rect(this.rectPoints.x, this.rectPoints.y, this.rectPoints.width, this.rectPoints.height);\n var resize = this.findResizeMode(chart.svgObject, rect, location);\n if (this.resizing) {\n rect = getDraggedRectLocation(rect.x, rect.y, (rect.x + rect.width), (rect.y + rect.height), chart.chartAxisLayoutPanel.seriesClipRect);\n this.drawDraggingRect(chart, rect);\n this.dragRect = rect;\n }\n if (tapped) {\n this.resizing = resize;\n }\n };\n Selection.prototype.findResizeMode = function (chartSvgObject, rect, location) {\n var cursorStyle = 'se-resize';\n var resize = false;\n if (!this.resizing) {\n var resizeEdges = [new Rect(rect.x, (rect.y - 10), rect.width - 5, 20),\n new Rect((rect.x - 10), rect.y, 20, rect.height),\n new Rect(rect.x, (rect.y + rect.height - 10), rect.width - 10, 20),\n new Rect((rect.x + rect.width - 10), rect.y + 5, 20, rect.height - 15),\n new Rect((rect.x + rect.width - 10), (rect.y + rect.height - 10), 20, 20)]; //corner\n for (var i = 0; i < resizeEdges.length; i++) {\n if (withInBounds(location.x, location.y, resizeEdges[i])) {\n cursorStyle = (i === 4) ? cursorStyle : (i % 2 === 0) ? 'ns-resize' : 'ew-resize';\n resize = true;\n this.resizeMode = i;\n break;\n }\n }\n }\n else {\n var x = rect.x;\n var y = rect.y;\n var width = (location.x - x);\n var height = (location.y - y);\n switch (this.resizeMode) {\n case 0:\n height = Math.abs((rect.height + rect.y) - location.y);\n rect.y = Math.min((rect.height + rect.y), location.y);\n rect.height = height;\n break;\n case 1:\n width = Math.abs((rect.width + rect.x) - location.x);\n rect.x = Math.min((rect.width + rect.x), location.x);\n rect.width = width;\n break;\n case 2:\n rect.height = Math.abs(height);\n rect.y = Math.min(location.y, y);\n break;\n case 3:\n rect.width = Math.abs(width);\n rect.x = Math.min(location.x, x);\n break;\n case 4:\n rect.width = Math.abs(width);\n rect.height = Math.abs(height);\n rect.x = Math.min(location.x, x);\n rect.y = Math.min(location.y, y);\n break;\n }\n }\n this.changeCursorStyle(resize, getElement(this.draggedRect), cursorStyle);\n this.changeCursorStyle(resize, chartSvgObject, cursorStyle);\n return resize;\n };\n Selection.prototype.changeCursorStyle = function (isResize, rectelement, cursorStyle) {\n cursorStyle = isResize ? cursorStyle : (this.control.svgObject === rectelement) ? 'auto' : 'move';\n rectelement.setAttribute('style', 'cursor:' + cursorStyle + ';');\n };\n Selection.prototype.removeSelectedElements = function (chart, index, seriesCollection) {\n index.splice(0, index.length);\n var seriesElements;\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n seriesElements = this.getSeriesElements(series);\n this.removeStyles(seriesElements);\n for (var _a = 0, seriesElements_2 = seriesElements; _a < seriesElements_2.length; _a++) {\n var seriesElement = seriesElements_2[_a];\n this.removeStyles(this.getChildren(seriesElement));\n }\n }\n };\n Selection.prototype.setAttributes = function (ele, object) {\n var keys = Object.keys(object);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n ele.setAttribute(key, object[key]);\n }\n };\n /**\n * Method to move the dragged rect.\n * @return {void}\n * @private\n */\n Selection.prototype.draggedRectMoved = function (chart, grabbedPoint, doDrawing) {\n var rect = new Rect(this.rectPoints.x, this.rectPoints.y, this.rectPoints.width, this.rectPoints.height);\n rect.x -= (grabbedPoint.x - chart.mouseX);\n rect.y -= (grabbedPoint.y - chart.mouseY);\n rect = getDraggedRectLocation(rect.x, rect.y, rect.x + rect.width, rect.height + rect.y, chart.chartAxisLayoutPanel.seriesClipRect);\n if (doDrawing) {\n this.drawDraggingRect(chart, rect);\n }\n else {\n this.calculateDragSelectedElements(chart, rect);\n }\n };\n /**\n * To complete the selection.\n * @return {void}\n * @private\n */\n Selection.prototype.completeSelection = function (e) {\n var chart = this.chart;\n if (chart.selectionMode === 'None') {\n return;\n }\n if ((this.dragging || this.resizing) && this.dragRect.width > 5 && this.dragRect.height > 5) {\n this.calculateDragSelectedElements(chart, this.dragRect);\n }\n else if (this.rectGrabbing && this.rectPoints.width && this.rectPoints.height) {\n this.draggedRectMoved(chart, this.dragRect);\n }\n this.dragging = false;\n this.rectGrabbing = false;\n this.resizing = false;\n this.removeDraggedElements(chart, e);\n };\n Selection.prototype.getDragRect = function (chart, seriesClipRect) {\n return getDraggedRectLocation(chart.mouseDownX, chart.mouseDownY, chart.mouseX, chart.mouseY, seriesClipRect);\n };\n /** @private */\n Selection.prototype.dragStart = function (chart, seriesClipRect, mouseDownX, mouseDownY, event) {\n this.dragging = (chart.selectionMode.indexOf('Drag') > -1) && (chart.isDoubleTap || !chart.isTouch) &&\n chart.chartAreaType !== 'PolarRadar';\n if (this.dragging) {\n this.dragRect = new Rect(chart.mouseDownX, chart.mouseDownY, 0, 0);\n if (chart.mouseDownX < seriesClipRect.x || chart.mouseDownX > (seriesClipRect.x + seriesClipRect.width) ||\n chart.mouseDownY < seriesClipRect.y || chart.mouseDownY > (seriesClipRect.y + seriesClipRect.height)) {\n this.dragging = false;\n }\n }\n if (this.rectPoints) {\n this.dragRect = new Rect(chart.mouseDownX, chart.mouseDownY, 0, 0);\n this.resizingSelectionRect(chart, new ChartLocation(mouseDownX, mouseDownY), true);\n this.rectGrabbing = withInBounds(mouseDownX, mouseDownY, this.rectPoints);\n }\n };\n /** @private */\n Selection.prototype.mouseMove = function (event) {\n var chart = this.chart;\n if (chart.selectionMode === 'None') {\n return;\n }\n if (event.type === 'touchmove' && (Browser.isIos || Browser.isIos7) && this.dragging && event.preventDefault) {\n event.preventDefault();\n }\n var insideMoving = withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect);\n if (insideMoving) {\n if (this.rectGrabbing && !this.resizing) {\n this.draggedRectMoved(chart, this.dragRect, true);\n }\n else if (this.dragging && !this.resizing) {\n this.dragRect = this.getDragRect(chart, chart.chartAxisLayoutPanel.seriesClipRect);\n this.drawDraggingRect(chart, this.dragRect);\n }\n if (this.rectPoints) {\n this.resizingSelectionRect(chart, new ChartLocation(chart.mouseX, chart.mouseY));\n }\n }\n else {\n this.completeSelection(event);\n }\n };\n /**\n * Get module name.\n * @private\n */\n Selection.prototype.getModuleName = function () {\n return 'Selection';\n };\n /**\n * To destroy the selection.\n * @return {void}\n * @private\n */\n Selection.prototype.destroy = function (chart) {\n this.removeEventListener();\n // Destroy method performed here\n };\n return Selection;\n}(BaseSelection));\nexport { Selection };\n","import { ChartLocation, Rect, TextOption, RectOption, isCollide, markerAnimate } from '../../common/utils/helper';\nimport { getLabelText, measureText, convertHexToColor, calculateRect, textElement, colorNameToHex } from '../../common/utils/helper';\nimport { getValue, extend } from '@syncfusion/ej2-base';\nimport { textRender } from '../../common/model/constants';\nimport { createTemplate, getFontStyle, getElement, measureElementRect, templateAnimate, withIn } from '../../common/utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { getPoint } from '../../common/utils/helper';\n/**\n * `DataLabel` module is used to render data label for the data point.\n */\nvar DataLabel = /** @class */ (function () {\n /**\n * Constructor for the data label module.\n * @private\n */\n function DataLabel(chart) {\n this.errorHeight = 0;\n this.chart = chart;\n }\n DataLabel.prototype.initPrivateVariables = function (series, marker) {\n var transform;\n var render = series.chart.renderer;\n transform = series.chart.chartAreaType === 'Cartesian' ? 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n if (marker.dataLabel.visible) {\n series.shapeElement = render.createGroup({\n 'id': this.chart.element.id + 'ShapeGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.chart.element.id + '_ChartSeriesClipRect_' + series.index + ')'\n });\n series.textElement = render.createGroup({\n 'id': this.chart.element.id + 'TextGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.chart.element.id + '_ChartSeriesClipRect_' + series.index + ')'\n });\n }\n this.markerHeight = ((series.type === 'Scatter' || marker.visible) && !this.isRectSeries(series)) ? (marker.height / 2) : 0;\n this.commonId = this.chart.element.id + '_Series_' + series.index + '_Point_';\n this.calculateErrorHeight(series, series.marker.dataLabel.position);\n this.chartBackground = this.chart.chartArea.background === 'trasparent' ?\n this.chart.background || this.chart.themeStyle.background : this.chart.chartArea.background;\n };\n DataLabel.prototype.calculateErrorHeight = function (series, position) {\n if (!series.errorBar.visible) {\n return null;\n }\n else if (series.errorBar.visible && this.chart.chartAreaType !== 'PolarRadar') {\n var direction = series.errorBar.direction;\n var positiveHeight = this.chart.errorBarModule.positiveHeight;\n var negativeHeight = this.chart.errorBarModule.negativeHeight;\n if (this.isRectSeries(series)) {\n if (position === 'Top' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Minus') {\n this.errorHeight = negativeHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n if (position === 'Outer' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Plus') {\n this.errorHeight = positiveHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n }\n else {\n if (position === 'Top' || position === 'Outer' || position === 'Auto') {\n if ((direction === 'Both' || direction === 'Plus') && (!series.chart.isTransposed)) {\n this.errorHeight = positiveHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n if (position === 'Bottom' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Minus') {\n this.errorHeight = negativeHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n }\n }\n else {\n this.errorHeight = 0;\n }\n };\n DataLabel.prototype.isRectSeries = function (series) {\n return series.isRectSeries || series.type === 'RangeArea';\n };\n /**\n * Render the data label for series.\n * @return {void}\n */\n DataLabel.prototype.render = function (series, chart, dataLabel) {\n var _this = this;\n // initialize the private variable\n this.initPrivateVariables(series, series.marker);\n var rect;\n var rgbValue;\n var contrast;\n var argsData;\n var border;\n var textSize;\n this.inverted = chart.requireInvertedAxis;\n this.yAxisInversed = series.yAxis.isInversed;\n var element = createElement('div', {\n id: chart.element.id + '_Series_' + series.index + '_DataLabelCollections'\n });\n // Data label point iteration started\n series.points.map(function (point, index) {\n _this.margin = dataLabel.margin;\n var labelText = [];\n var labelLength;\n var clip = series.clipRect;\n border = { width: dataLabel.border.width, color: dataLabel.border.color };\n 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);\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);\n }\n }\n }\n }\n }\n });\n if (element.childElementCount) {\n getElement(chart.element.id + '_Secondary_Element').appendChild(element);\n }\n };\n /**\n * Render the data label template.\n * @return {void}\n * @private\n */\n DataLabel.prototype.createDataLabelTemplate = function (parentElement, series, dataLabel, point, data, labelIndex) {\n this.margin = { left: 0, right: 0, bottom: 0, top: 0 };\n var clip = series.clipRect;\n var childElement = createTemplate(createElement('div', {\n id: this.chart.element.id + '_Series_' + series.index + '_DataLabel_'\n + point.index + (labelIndex ? ('_' + labelIndex) : ''),\n styles: 'position: absolute;background-color:' + data.color + ';' +\n getFontStyle(dataLabel.font) + ';border:' + data.border.width + 'px solid ' + data.border.color + ';'\n }), point.index, data.template, this.chart, point, series);\n var elementRect = measureElementRect(childElement);\n var rect = this.calculateTextPosition(point, series, { width: elementRect.width, height: elementRect.height }, dataLabel, labelIndex);\n childElement.style.left = ((this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.x) + rect.x) + 'px';\n childElement.style.top = ((this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.y) + rect.y) + 'px';\n var rgbValue = convertHexToColor(colorNameToHex(this.fontBackground));\n var vAxis = series.chart.requireInvertedAxis ? series.xAxis : series.yAxis;\n var hAxis = series.chart.requireInvertedAxis ? series.yAxis : series.xAxis;\n childElement.style.color = dataLabel.font.color ||\n ((Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000)) >= 128 ? 'black' : 'white');\n if (childElement.childElementCount && !isCollide(rect, this.chart.dataLabelCollections, clip)\n && (series.seriesType !== 'XY' || point.yValue === undefined || withIn(point.yValue, series.yAxis.visibleRange) ||\n (series.type.indexOf('100') > -1 && withIn(series.stackedValues.endValues[point.index], series.yAxis.visibleRange)))\n && withIn(point.xValue, series.xAxis.visibleRange) && parseFloat(childElement.style.top) >= vAxis.rect.y &&\n parseFloat(childElement.style.left) >= hAxis.rect.x && parseFloat(childElement.style.top) <= vAxis.rect.y + vAxis.rect.height &&\n parseFloat(childElement.style.left) <= hAxis.rect.x + hAxis.rect.width) {\n this.chart.dataLabelCollections.push(new Rect(rect.x + clip.x, rect.y + clip.y, rect.width, rect.height));\n parentElement.appendChild(childElement);\n if (series.animation.enable && this.chart.animateSeries) {\n this.doDataLabelAnimation(series, childElement);\n }\n }\n };\n DataLabel.prototype.calculateTextPosition = function (point, series, textSize, dataLabel, labelIndex) {\n var labelRegion = labelIndex > 1 ? (series.type === 'Candle') ? point.regions[1] : point.regions[0] : point.regions[0];\n if (labelIndex > 1 && series.type === 'HiloOpenClose') {\n labelRegion = (labelIndex === 2) ? point.regions[1] : point.regions[2];\n }\n var location;\n location = this.getLabelLocation(point, series, textSize, labelIndex);\n var padding = 5;\n var clipRect = series.clipRect;\n var rect;\n // calculating alignment\n if (!this.chart.requireInvertedAxis || !this.isRectSeries(series) || series.type === 'BoxAndWhisker') {\n this.locationX = location.x;\n var alignmentValue = textSize.height + (this.borderWidth * 2) + this.markerHeight +\n this.margin.bottom + this.margin.top + padding;\n location.y = (dataLabel.position === 'Auto') ? location.y :\n this.calculateAlignment(alignmentValue, location.y, dataLabel.alignment, this.isRectSeries(series) ? point.yValue < 0 : false);\n // calculating position\n location.y = (!this.isRectSeries(series) || series.type === 'BoxAndWhisker') ?\n this.calculatePathPosition(location.y, dataLabel.position, series, point, textSize, labelIndex) :\n this.calculateRectPosition(location.y, labelRegion, point.yValue < 0 !== this.yAxisInversed, dataLabel.position, series, textSize, labelIndex, point);\n if (this.isRectSeries(series) && this.chart.chartAreaType === 'PolarRadar') {\n location = this.calculatePolarRectPosition(location, dataLabel.position, series, point, textSize, labelIndex);\n }\n }\n else {\n this.locationY = location.y;\n var alignmentValue = textSize.width + this.borderWidth + this.margin.left + this.margin.right - padding;\n location.x = dataLabel.position === 'Auto' ? location.x :\n this.calculateAlignment(alignmentValue, location.x, dataLabel.alignment, point.yValue < 0);\n location.x = this.calculateRectPosition(location.x, labelRegion, point.yValue < 0 !== this.yAxisInversed, dataLabel.position, series, textSize, labelIndex, point);\n }\n rect = calculateRect(location, textSize, this.margin);\n // Checking the condition whether data Label has been exist the clip rect\n if (!((rect.y > clipRect.height) || (rect.x > clipRect.width) ||\n (rect.x + rect.width < 0) || (rect.y + rect.height < 0))) {\n rect.x = rect.x < 0 ? padding : rect.x;\n rect.y = rect.y < 0 ? padding : rect.y;\n rect.x -= (rect.x + rect.width) > clipRect.width ? (rect.x + rect.width) - clipRect.width + padding : 0;\n rect.y -= (rect.y + rect.height) > clipRect.height ? (rect.y + rect.height) - clipRect.height + padding : 0;\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n }\n return rect;\n };\n // Calculation label location for polar column draw types\n DataLabel.prototype.calculatePolarRectPosition = function (location, position, series, point, size, labelIndex) {\n var padding = 5;\n var columnRadius;\n var angle = (point.regionData.startAngle - 0.5 * Math.PI) + (point.regionData.endAngle - point.regionData.startAngle) / 2;\n if (labelIndex === 0) {\n columnRadius = point.regionData.radius < point.regionData.innerRadius ? point.regionData.innerRadius\n : point.regionData.radius;\n }\n else {\n columnRadius = point.regionData.radius > point.regionData.innerRadius ? point.regionData.innerRadius\n : point.regionData.radius;\n }\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n if (series.drawType.indexOf('Stacking') > -1) {\n position = position === 'Outer' ? 'Top' : position;\n }\n else if (series.drawType.indexOf('Range') > -1) {\n position = (position === 'Outer' || position === 'Top') ? position : 'Auto';\n }\n if (position === 'Outer') {\n columnRadius = labelIndex === 0 ? columnRadius + 2 * padding : columnRadius - 2 * padding;\n }\n else if (position === 'Middle') {\n columnRadius = columnRadius / 2 + padding;\n }\n else if (position === 'Top') {\n columnRadius = labelIndex === 0 ? columnRadius - 2 * padding : columnRadius + 2 * padding;\n }\n else if (position === 'Bottom') {\n columnRadius = padding;\n }\n else {\n if (labelIndex === 0) {\n columnRadius = columnRadius >= series.chart.radius ? columnRadius - padding :\n series.drawType === 'StackingColumn' ? columnRadius - 2 * padding : columnRadius + 2 * padding;\n }\n else {\n columnRadius = columnRadius >= series.chart.radius ? columnRadius + padding : columnRadius - 2 * padding;\n }\n }\n location.x = series.clipRect.width / 2 + series.clipRect.x + columnRadius * Math.cos(angle);\n location.y = series.clipRect.height / 2 + series.clipRect.y + columnRadius * Math.sin(angle);\n return location;\n };\n /**\n * Get the label location\n */\n DataLabel.prototype.getLabelLocation = function (point, series, textSize, labelIndex) {\n var location = new ChartLocation(0, 0);\n var labelRegion = (series.type === 'Candle' && labelIndex > 1) ? point.regions[1] : point.regions[0];\n if (series.type === 'HiloOpenClose') {\n labelRegion = (labelIndex === 2) ? point.regions[1] : point.regions[2];\n }\n var xAxis = series.xAxis;\n var yAxis = series.yAxis;\n var isInverted = series.chart.requireInvertedAxis;\n if (series.type === 'BoxAndWhisker') {\n this.markerHeight = 0;\n switch (labelIndex) {\n case 0:\n location = getPoint(point.xValue, point.median, xAxis, yAxis, isInverted);\n break;\n case 1:\n location = getPoint(point.xValue, point.maximum, xAxis, yAxis, isInverted);\n break;\n case 2:\n location = getPoint(point.xValue, point.minimum, xAxis, yAxis, isInverted);\n break;\n case 3:\n location = getPoint(point.xValue, point.upperQuartile, xAxis, yAxis, isInverted);\n break;\n case 4:\n location = getPoint(point.xValue, point.lowerQuartile, xAxis, yAxis, isInverted);\n break;\n default: {\n location = getPoint(point.xValue, point.outliers[labelIndex - 5], xAxis, yAxis, isInverted);\n this.markerHeight = series.marker.height / 2;\n break;\n }\n }\n location.x = point.regions[0].x + (point.regions[0].width / 2);\n }\n else if (labelIndex === 0 || labelIndex === 1) {\n location = new ChartLocation(point.symbolLocations[0].x, point.symbolLocations[0].y);\n }\n else if ((labelIndex === 2 || labelIndex === 3) && series.type === 'Candle') {\n location = new ChartLocation(point.symbolLocations[1].x, point.symbolLocations[1].y);\n }\n else if (isInverted) {\n location = { x: labelRegion.x + (labelRegion.width) / 2, y: labelRegion.y };\n }\n else {\n location = { x: labelRegion.x + labelRegion.width, y: labelRegion.y + (labelRegion.height) / 2 };\n }\n //Aligning the label at the beginning of the tick, when tick size is less than text size\n if (labelIndex > 1 && series.type === 'HiloOpenClose') {\n if (series.chart.requireInvertedAxis) {\n var height = labelRegion.height;\n location.y = labelRegion.y + height / 2 + 2 * (labelIndex === 2 ? 1 : -1);\n }\n else {\n var width = labelRegion.width;\n location.x = labelRegion.x + width / 2 + 2 * (labelIndex === 2 ? 1 : -1);\n }\n }\n return location;\n };\n DataLabel.prototype.calculateRectPosition = function (labelLocation, rect, isMinus, position, series, textSize, labelIndex, point) {\n if (series.chart.chartAreaType === 'PolarRadar') {\n return null;\n }\n var padding = 5;\n var margin = this.margin;\n var textLength = !this.inverted ? textSize.height : textSize.width;\n var extraSpace = this.borderWidth + textLength / 2 + padding;\n if (series.type.indexOf('Stacking') > -1) {\n position = position === 'Outer' ? 'Top' : position;\n }\n else if (series.type.indexOf('Range') > -1) {\n position = (position === 'Outer' || position === 'Top') ? position : 'Auto';\n }\n else if (series.type === 'Waterfall') {\n position = position === 'Auto' ? 'Middle' : position;\n }\n switch (position) {\n case 'Bottom':\n labelLocation = !this.inverted ?\n isMinus ? (labelLocation - rect.height + extraSpace + margin.top) :\n (labelLocation + rect.height - extraSpace - margin.bottom) :\n isMinus ? (labelLocation + rect.width - extraSpace - margin.left) :\n (labelLocation - rect.width + extraSpace + margin.right);\n break;\n case 'Middle':\n labelLocation = labelLocation = !this.inverted ?\n (isMinus ? labelLocation - (rect.height / 2) : labelLocation + (rect.height / 2)) :\n (isMinus ? labelLocation + (rect.width / 2) : labelLocation - (rect.width / 2));\n break;\n case 'Auto':\n labelLocation = this.calculateRectActualPosition(labelLocation, rect, isMinus, series, textSize, labelIndex, point);\n break;\n default:\n extraSpace += this.errorHeight;\n labelLocation = this.calculateTopAndOuterPosition(labelLocation, rect, position, series, labelIndex, extraSpace, isMinus);\n break;\n }\n var check = !this.inverted ? (labelLocation < rect.y || labelLocation > rect.y + rect.height) :\n (labelLocation < rect.x || labelLocation > rect.x + rect.width);\n this.fontBackground = check ?\n (this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground)\n : this.fontBackground === 'transparent' ? (point.color || series.interior) : this.fontBackground;\n return labelLocation;\n };\n DataLabel.prototype.calculatePathPosition = function (labelLocation, position, series, point, size, labelIndex) {\n var padding = 5;\n if ((series.type.indexOf('Area') > -1 && series.type !== 'RangeArea')\n && this.yAxisInversed && series.marker.dataLabel.position !== 'Auto') {\n position = position === 'Top' ? 'Bottom' : position === 'Bottom' ? 'Top' : position;\n }\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n switch (position) {\n case 'Top':\n case 'Outer':\n labelLocation = labelLocation - this.markerHeight - this.borderWidth - size.height / 2 - this.margin.bottom - padding -\n this.errorHeight;\n break;\n case 'Bottom':\n labelLocation = labelLocation + this.markerHeight + this.borderWidth + size.height / 2 + this.margin.top + padding +\n this.errorHeight;\n break;\n case 'Auto':\n labelLocation = this.calculatePathActualPosition(labelLocation, this.markerHeight, series, point, size, labelIndex);\n break;\n }\n return labelLocation;\n };\n DataLabel.prototype.isDataLabelShape = function (style) {\n this.isShape = (style.color !== 'transparent' || style.border.width > 0);\n this.borderWidth = style.border.width;\n if (!this.isShape) {\n this.margin = { left: 0, right: 0, bottom: 0, top: 0 };\n }\n };\n DataLabel.prototype.calculateRectActualPosition = function (labelLocation, rect, isMinus, series, size, labelIndex, point) {\n var location;\n var labelRect;\n var isOverLap = true;\n var position = 0;\n var collection = this.chart.dataLabelCollections;\n var finalPosition = series.type.indexOf('Range') !== -1 || series.type === 'Hilo' ? 2 : 4;\n while (isOverLap && position < finalPosition) {\n location = this.calculateRectPosition(labelLocation, rect, isMinus, this.getPosition(position), series, size, labelIndex, point);\n if (!this.inverted) {\n labelRect = calculateRect(new ChartLocation(this.locationX, location), size, this.margin);\n isOverLap = labelRect.y < 0 || isCollide(labelRect, collection, series.clipRect) || labelRect.y > series.clipRect.height;\n }\n else {\n labelRect = calculateRect(new ChartLocation(location, this.locationY), size, this.margin);\n isOverLap = labelRect.x < 0 || isCollide(labelRect, collection, series.clipRect) ||\n labelRect.x + labelRect.width > series.clipRect.width;\n }\n position++;\n }\n return location;\n };\n // alignment calculation assigned here\n DataLabel.prototype.calculateAlignment = function (value, labelLocation, alignment, isMinus) {\n switch (alignment) {\n case 'Far':\n labelLocation = !this.inverted ? (isMinus ? labelLocation + value : labelLocation - value) :\n (isMinus ? labelLocation - value : labelLocation + value);\n break;\n case 'Near':\n labelLocation = !this.inverted ? (isMinus ? labelLocation - value : labelLocation + value) :\n (isMinus ? labelLocation + value : labelLocation - value);\n break;\n case 'Center':\n labelLocation = labelLocation;\n break;\n }\n return labelLocation;\n };\n //calculation for top and outer position of datalabel for rect series\n DataLabel.prototype.calculateTopAndOuterPosition = function (location, rect, position, series, index, extraSpace, isMinus) {\n var margin = this.margin;\n var top;\n switch (series.type) {\n case 'RangeColumn':\n case 'RangeArea':\n case 'Hilo':\n top = (index === 0 && !this.yAxisInversed) || (index === 1 && this.yAxisInversed);\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top);\n break;\n case 'Candle':\n top = (index === 0 || index === 2) && !this.yAxisInversed\n || (index === 1 || index === 3) && this.yAxisInversed;\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top, index > 1);\n break;\n case 'HiloOpenClose':\n if (index <= 1) {\n top = (index === 0 && !this.yAxisInversed) || (index === 1 && this.yAxisInversed);\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top);\n }\n else {\n if (this.yAxisInversed) {\n location = !this.inverted ? location + extraSpace + margin.top : location - extraSpace - margin.right;\n }\n else {\n location = !this.inverted ? location - extraSpace - margin.bottom : location + extraSpace + margin.left;\n }\n }\n break;\n default:\n if ((isMinus && position === 'Top') || (!isMinus && position === 'Outer')) {\n location = !this.inverted ? location - extraSpace - margin.bottom : location + extraSpace + margin.left;\n }\n else {\n location = !this.inverted ? location + extraSpace + margin.top : location - extraSpace - margin.right;\n }\n break;\n }\n return location;\n };\n /**\n * Updates the label location\n */\n DataLabel.prototype.updateLabelLocation = function (position, location, extraSpace, margin, rect, top, inside) {\n if (inside === void 0) { inside = false; }\n if (!this.inverted) {\n if (top) {\n location = (position === 'Outer' && !inside) ? location - extraSpace - margin.bottom : location + extraSpace + margin.top;\n }\n else {\n location = (position === 'Outer' && !inside) ? location + rect.height + extraSpace + margin.top :\n location + rect.height - extraSpace - margin.bottom;\n }\n }\n else {\n if (top) {\n location = (position === 'Outer' && !inside) ? location + extraSpace + margin.left : location - extraSpace - margin.right;\n }\n else {\n location = (position === 'Outer' && !inside) ? location - rect.width - extraSpace - margin.right :\n location - rect.width + extraSpace + margin.left;\n }\n }\n return location;\n };\n DataLabel.prototype.calculatePathActualPosition = function (y, markerSize, series, point, size, labelIndex) {\n var points = series.points;\n var index = point.index;\n var yValue = points[index].yValue;\n var position;\n var nextPoint = points.length - 1 > index ? points[index + 1] : null;\n var previousPoint = index > 0 ? points[index - 1] : null;\n var yLocation;\n var isOverLap = true;\n var labelRect;\n var isBottom;\n var positionIndex;\n var collection = this.chart.dataLabelCollections;\n if (series.type === 'Bubble') {\n position = 'Top';\n }\n else if (series.type.indexOf('Step') > -1) {\n position = 'Top';\n if (index) {\n position = (!previousPoint || !previousPoint.visible || (yValue > previousPoint.yValue !== this.yAxisInversed)\n || yValue === previousPoint.yValue) ? 'Top' : 'Bottom';\n }\n }\n else if (series.type === 'BoxAndWhisker') {\n if (labelIndex === 1 || labelIndex === 3 || labelIndex > 4) {\n position = series.yAxis.isInversed ? 'Bottom' : 'Top';\n }\n else if (labelIndex === 2 || labelIndex === 4) {\n position = series.yAxis.isInversed ? 'Top' : 'Bottom';\n }\n else {\n isOverLap = false;\n position = 'Middle';\n yLocation = this.calculatePathPosition(y, position, series, point, size, labelIndex);\n }\n }\n else {\n if (index === 0) {\n position = (!nextPoint || !nextPoint.visible || yValue > nextPoint.yValue ||\n (yValue < nextPoint.yValue && this.yAxisInversed)) ? 'Top' : 'Bottom';\n }\n else if (index === points.length - 1) {\n position = (!previousPoint || !previousPoint.visible || yValue > previousPoint.yValue ||\n (yValue < previousPoint.yValue && this.yAxisInversed)) ? 'Top' : 'Bottom';\n }\n else {\n if (!nextPoint.visible && !(previousPoint && previousPoint.visible)) {\n position = 'Top';\n }\n else if (!nextPoint.visible || !previousPoint) {\n position = (nextPoint.yValue > yValue || (previousPoint && previousPoint.yValue > yValue)) ?\n 'Bottom' : 'Top';\n }\n else {\n var slope = (nextPoint.yValue - previousPoint.yValue) / 2;\n var intersectY = (slope * index) + (nextPoint.yValue - (slope * (index + 1)));\n position = !this.yAxisInversed ? intersectY < yValue ? 'Top' : 'Bottom' :\n intersectY < yValue ? 'Bottom' : 'Top';\n }\n }\n }\n isBottom = position === 'Bottom';\n positionIndex = ['Outer', 'Top', 'Bottom', 'Middle', 'Auto'].indexOf(position);\n while (isOverLap && positionIndex < 4) {\n yLocation = this.calculatePathPosition(y, this.getPosition(positionIndex), series, point, size, labelIndex);\n labelRect = calculateRect(new ChartLocation(this.locationX, yLocation), size, this.margin);\n isOverLap = labelRect.y < 0 || isCollide(labelRect, collection, series.clipRect)\n || (labelRect.y + labelRect.height) > series.clipRect.height;\n positionIndex = isBottom ? positionIndex - 1 : positionIndex + 1;\n isBottom = false;\n }\n return yLocation;\n };\n /**\n * Animates the data label.\n * @param {Series} series - Data label of the series gets animated.\n * @return {void}\n */\n DataLabel.prototype.doDataLabelAnimation = function (series, element) {\n var shapeElements = series.shapeElement.childNodes;\n var textNode = series.textElement.childNodes;\n var delay = series.animation.delay + series.animation.duration;\n var location;\n var length = element ? 1 : textNode.length;\n for (var i = 0; i < length; i++) {\n if (element) {\n element.style.visibility = 'hidden';\n templateAnimate(element, delay, 200, 'ZoomIn');\n }\n else {\n location = new ChartLocation((+textNode[i].getAttribute('x')) + ((+textNode[i].getAttribute('width')) / 2), (+textNode[i].getAttribute('y')) + ((+textNode[i].getAttribute('height')) / 2));\n markerAnimate(textNode[i], delay, 200, series, null, location, true);\n if (shapeElements[i]) {\n location = new ChartLocation((+shapeElements[i].getAttribute('x')) + ((+shapeElements[i].getAttribute('width')) / 2), (+shapeElements[i].getAttribute('y')) + ((+shapeElements[i].getAttribute('height')) / 2));\n markerAnimate(shapeElements[i], delay, 200, series, null, location, true);\n }\n }\n }\n };\n DataLabel.prototype.getPosition = function (index) {\n return (['Outer', 'Top', 'Bottom', 'Middle', 'Auto'][index]);\n };\n /**\n * Get module name.\n */\n DataLabel.prototype.getModuleName = function () {\n // Returns the module name\n return 'DataLabel';\n };\n /**\n * To destroy the dataLabel for series.\n * @return {void}\n * @private\n */\n DataLabel.prototype.destroy = function (chart) {\n // Destroy method performed here\n };\n return DataLabel;\n}());\nexport { DataLabel };\n","import { Mean, RectOption } from '../../common/utils/helper';\nimport { getPoint, PathOption, sum, templateAnimate } from '../../common/utils/helper';\n/**\n * `ErrorBar` module is used to render the error bar for series.\n */\nvar ErrorBar = /** @class */ (function () {\n /**\n * Constructor for the error bar module.\n * @private\n */\n function ErrorBar(chart) {\n this.chart = chart;\n }\n /**\n * Render the error bar for series.\n * @return {void}\n */\n ErrorBar.prototype.render = function (series) {\n if (this.chart.chartAreaType === 'PolarRadar') {\n return null;\n }\n this.createElement(series);\n this.renderErrorBar(series);\n };\n ErrorBar.prototype.renderErrorBar = function (series) {\n var seriesIndex = series.index;\n var point;\n var symbolId;\n var capId;\n var errorbar = series.errorBar;\n var errorBarCap = series.errorBar.errorBarCap;\n var border = series.border;\n var start;\n var mid;\n var end;\n var isInverted;\n var isVert;\n var errorDirection = ['', ''];\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point_1 = _a[_i];\n if (point_1.visible && point_1.symbolLocations[0]) {\n var errorX = 0;\n var errorY = 0;\n switch (errorbar.mode) {\n case 'Vertical':\n errorY = errorbar.verticalError;\n break;\n case 'Horizontal':\n errorX = errorbar.horizontalError;\n break;\n case 'Both':\n errorX = errorbar.horizontalError;\n errorY = errorbar.verticalError;\n break;\n }\n errorDirection = this['calculate' + errorbar.type + 'Value'](point_1, series, this.chart.requireInvertedAxis, errorX, errorY);\n symbolId = this.chart.element.id + '_Series_' + '_ErrorBarGroup_' + seriesIndex + '_Point_' + point_1.index;\n capId = this.chart.element.id + '_Series_' + '_ErrorBarCap_' + seriesIndex + '_Point_' + point_1.index;\n var shapeOption = new PathOption(symbolId, '', errorbar.width, errorbar.color || this.chart.themeStyle.errorBar, null, '', errorDirection[0]);\n var path = this.chart.renderer.drawPath(shapeOption);\n series.errorBarElement.appendChild(path);\n var capOption = new PathOption(capId, '', errorBarCap.width, errorBarCap.color || this.chart.themeStyle.errorBar, null, '', errorDirection[1]);\n var capPath = this.chart.renderer.drawPath(capOption);\n series.errorBarElement.appendChild(capPath);\n }\n }\n };\n // path calculation for error bar\n ErrorBar.prototype.findLocation = function (point, series, isInverted, x1, y1) {\n var errorbar = series.errorBar;\n var direction = errorbar.direction;\n var location = [];\n var stackedValue = series.stackedValues;\n var yValue = series.type.indexOf('Stacking') > -1 ? series.stackedValues.endValues[point.index] :\n (series.seriesType === 'HighLow' || series.seriesType === 'HighLowOpenClose') ? (series.points[point.index].high) :\n point.yValue;\n var startPoint = getPoint(point.xValue + ((direction === 'Plus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Horizontal' || errorbar.mode === 'Both')) ? x1 = errorbar.horizontalPositiveError : x1 : 0), yValue + ((direction === 'Plus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Vertical' || errorbar.mode === 'Both')) ? y1 = errorbar.verticalPositiveError : y1 : 0), series.xAxis, series.yAxis, isInverted);\n location.push(startPoint);\n if (series.isRectSeries) {\n var midPoint = point.symbolLocations[0];\n location.push(midPoint);\n }\n else {\n var midPoint = getPoint(point.xValue, point.yValue, series.xAxis, series.yAxis, isInverted);\n location.push(midPoint);\n }\n var endPoint = getPoint(point.xValue - ((direction === 'Minus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Horizontal' || errorbar.mode === 'Both')) ? x1 = errorbar.horizontalNegativeError : x1 : 0), yValue - ((direction === 'Minus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Vertical' || errorbar.mode === 'Both')) ? y1 = errorbar.verticalNegativeError : y1 : 0), series.xAxis, series.yAxis, isInverted);\n location.push(endPoint);\n // calculate error height for datalabel position alignment\n point.error = (errorbar.mode === 'Vertical') ? errorbar.verticalError : errorbar.horizontalError;\n this.negativeHeight = (errorbar.mode === 'Vertical' || errorbar.mode === 'Both') ? (isInverted ? (location[1].x - location[2].x) :\n (location[2].y - location[1].y)) : 0;\n this.positiveHeight = (errorbar.mode === 'Vertical' || errorbar.mode === 'Both') ? (isInverted ? (location[0].x - location[1].x) :\n (location[1].y - location[0].y)) : 0;\n return this.getErrorDirection(location[0], location[1], location[2], series, isInverted);\n };\n // calculations for eror bar types\n ErrorBar.prototype.calculateFixedValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var errorbar = series.errorBar;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculatePercentageValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n errorX = (errorX / 100) * point.xValue;\n errorY = (errorY / 100) * point.yValue;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateStandardDeviationValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var getMean = this.meanCalculation(series, series.errorBar.mode);\n errorX = errorX * (getMean.horizontalSquareRoot + getMean.horizontalMean);\n errorY = errorY * (getMean.verticalSquareRoot + getMean.verticalMean);\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateStandardErrorValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var length = series.points.length;\n var getMean = this.meanCalculation(series, series.errorBar.mode);\n errorX = ((errorX * getMean.horizontalSquareRoot) / Math.sqrt(length));\n errorY = ((errorY * getMean.verticalSquareRoot) / Math.sqrt(length));\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateCustomValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var errorbar = series.errorBar;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.getHorizontalDirection = function (start, mid, end, direction, errorMode, capLength) {\n var path = '';\n var capDirection = '';\n path += ' M ' + start.x + ' ' + mid.y + ' L ' + end.x + ' ' + mid.y;\n capDirection += (direction === 'Plus' || direction === 'Both') ? ' M ' + (start.x) + ' ' + (mid.y - capLength) + ' L '\n + (start.x) + ' ' + (mid.y + capLength) : '';\n capDirection += (direction === 'Minus' || direction === 'Both') ? ' M ' + (end.x) + ' ' + (mid.y - capLength) + ' L '\n + (end.x) + ' ' + (mid.y + capLength) : ' ';\n return [path, capDirection];\n };\n ErrorBar.prototype.getVerticalDirection = function (start, mid, end, direction, errorMode, capLength) {\n var path = '';\n var capDirection = '';\n path += ' M ' + mid.x + ' ' + start.y + ' L ' + mid.x + ' ' + end.y;\n capDirection += (direction === 'Plus' || direction === 'Both') ? ' M ' + (mid.x - capLength) + ' ' + start.y + ' L '\n + (mid.x + capLength) + ' ' + start.y : '';\n capDirection += (direction === 'Minus' || direction === 'Both') ? ' M ' + (mid.x - capLength) + ' ' + end.y + ' L '\n + (mid.x + capLength) + ' ' + end.y : '';\n return [path, capDirection];\n };\n ErrorBar.prototype.getBothDirection = function (start, mid, end, direction, errorMode, capLength) {\n var capDirection = '';\n var path = '';\n var pathH = this.getHorizontalDirection(start, mid, end, direction, errorMode, capLength);\n var pathV = this.getVerticalDirection(start, mid, end, direction, errorMode, capLength);\n path = pathH[0].concat(pathV[0]);\n capDirection = pathH[1].concat(pathV[1]);\n return [path, capDirection];\n };\n ErrorBar.prototype.getErrorDirection = function (start, mid, end, series, isInverted) {\n var direction = series.errorBar.direction;\n var mode = series.errorBar.mode;\n var capLength = series.errorBar.errorBarCap.length;\n var path = '';\n var paths;\n var capDirection = '';\n var errorMode = mode;\n switch (mode) {\n case 'Both':\n errorMode = mode;\n break;\n case 'Horizontal':\n errorMode = (isInverted) ? 'Vertical' : mode;\n break;\n case 'Vertical':\n errorMode = (isInverted) ? 'Horizontal' : mode;\n break;\n }\n switch (errorMode) {\n case 'Horizontal':\n paths = this.getHorizontalDirection(start, mid, end, direction, errorMode, capLength);\n break;\n case 'Vertical':\n paths = this.getVerticalDirection(start, mid, end, direction, errorMode, capLength);\n break;\n case 'Both':\n paths = this.getBothDirection(start, mid, end, direction, errorMode, capLength);\n break;\n }\n return [paths[0], paths[1]];\n };\n // mean calculation for standard deviation and standard error\n ErrorBar.prototype.meanCalculation = function (series, mode) {\n var sumOfX = 0;\n var sumOfY = 0;\n var verticalMean = 0;\n var horizontalMean = 0;\n var horSquareDev;\n var verStandardMean;\n var horStandardMean;\n var verSquareTotal;\n var horSquareTotal;\n var verSquareRoot;\n var horSquareRoot;\n var length = series.points.length;\n switch (mode) {\n case 'Vertical':\n sumOfY = sum(series.yData);\n verticalMean = sumOfY / length;\n break;\n case 'Horizontal':\n sumOfX = sum(series.xData);\n horizontalMean = sumOfX / length;\n break;\n case 'Both':\n sumOfY = sum(series.yData);\n verticalMean = sumOfY / length;\n sumOfX = sum(series.xData);\n horizontalMean = sumOfX / length;\n }\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (mode === 'Vertical') {\n sumOfY = sumOfY + Math.pow((point.yValue - verticalMean), 2);\n }\n else if (mode === 'Horizontal') {\n sumOfX = sumOfX + Math.pow((point.xValue - horizontalMean), 2);\n }\n else {\n sumOfY = sumOfY + Math.pow((point.yValue - verticalMean), 2);\n sumOfX = sumOfX + Math.pow((point.xValue - horizontalMean), 2);\n }\n }\n verStandardMean = sumOfY / (length - 1);\n verSquareRoot = Math.sqrt(sumOfY / (length - 1));\n horStandardMean = sumOfX / (length - 1);\n horSquareRoot = Math.sqrt(sumOfX / (length - 1));\n return new Mean(verStandardMean, verSquareRoot, horStandardMean, horSquareRoot, verticalMean, horizontalMean);\n };\n ErrorBar.prototype.createElement = function (series) {\n var explodeValue = 5;\n var render = series.chart.renderer;\n var transform;\n transform = series.chart.chartAreaType === 'Cartesian' ? 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n var markerHeight = (series.marker.height + explodeValue) / 2;\n var markerWidth = (series.marker.width + explodeValue) / 2;\n if (series.chart.chartAreaType === 'Cartesian') {\n var errorBarClipRect = render.drawClipPath(new RectOption(this.chart.element.id + '_ChartErrorBarClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: -markerWidth, y: -markerHeight,\n width: series.clipRect.width + markerWidth * 2, height: series.clipRect.height + markerHeight * 2\n }));\n series.errorBarElement = render.createGroup({\n 'id': this.chart.element.id + 'ErrorBarGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.chart.element.id + '_ChartErrorBarClipRect_' + series.index + ')'\n });\n series.errorBarElement.appendChild(errorBarClipRect);\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n ErrorBar.prototype.doErrorBarAnimation = function (series) {\n var errorBarElements = series.errorBarElement.childNodes;\n if (!errorBarElements) {\n return null;\n }\n var delay = series.animation.delay + series.animation.duration;\n var j = 1;\n while (j < errorBarElements.length) {\n for (var i = 0; i < series.points.length; i++) {\n if (!series.points[i].symbolLocations[0]) {\n continue;\n }\n errorBarElements[j].style.visibility = 'hidden';\n templateAnimate(errorBarElements[j], delay, 350, series.chart.requireInvertedAxis ? 'SlideLeftIn' : 'SlideBottomIn', false);\n }\n j++;\n }\n };\n /**\n * Get module name.\n */\n ErrorBar.prototype.getModuleName = function () {\n // Returns the module name\n return 'ErrorBar';\n };\n /**\n * To destroy the errorBar for series.\n * @return {void}\n * @private\n */\n ErrorBar.prototype.destroy = function (chart) {\n // Destroy method performed here\n };\n return ErrorBar;\n}());\nexport { ErrorBar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Chart legend\n */\nimport { remove, Browser } from '@syncfusion/ej2-base';\nimport { extend } from '@syncfusion/ej2-base';\nimport { LegendOptions, BaseLegend } from '../../common/legend/legend';\nimport { measureText, textTrim } from '../../common/utils/helper';\nimport { legendRender } from '../../common/model/constants';\n/**\n * `Legend` module is used to render legend for the chart.\n */\nvar Legend = /** @class */ (function (_super) {\n __extends(Legend, _super);\n function Legend(chart) {\n var _this = _super.call(this, chart) || this;\n _this.library = _this;\n _this.addEventListener();\n return _this;\n }\n /**\n * Binding events for legend module.\n */\n Legend.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.chart.on('click', this.click, this);\n this.chart.on(Browser.touchEndEvent, this.mouseEnd, this);\n };\n /**\n * UnBinding events for legend module.\n */\n Legend.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.off(Browser.touchMoveEvent, this.mouseMove);\n this.chart.off('click', this.click);\n this.chart.off(Browser.touchEndEvent, this.mouseEnd);\n };\n /**\n * To handle mosue move for legend module\n */\n Legend.prototype.mouseMove = function (e) {\n if (this.chart.legendSettings.visible && !this.chart.isTouch) {\n this.move(e);\n }\n };\n /**\n * To handle mosue end for legend module\n */\n Legend.prototype.mouseEnd = function (e) {\n if (this.chart.legendSettings.visible && this.chart.isTouch) {\n this.move(e);\n }\n };\n /**\n * Get the legend options.\n * @return {void}\n * @private\n */\n Legend.prototype.getLegendOptions = function (visibleSeriesCollection, chart) {\n this.legendCollections = [];\n var seriesType;\n for (var _i = 0, visibleSeriesCollection_1 = visibleSeriesCollection; _i < visibleSeriesCollection_1.length; _i++) {\n var series = visibleSeriesCollection_1[_i];\n if (series.category !== 'Indicator') {\n seriesType = (chart.chartAreaType === 'PolarRadar') ? series.drawType :\n series.type;\n this.legendCollections.push(new LegendOptions(series.name, series.interior, series.legendShape, series.visible, seriesType, series.marker.shape, series.marker.visible));\n }\n }\n };\n /** @private */\n Legend.prototype.getLegendBounds = function (availableSize, legendBounds, legend) {\n var padding = legend.padding;\n var extraHeight = 0;\n var extraWidth = 0;\n if (!this.isVertical) {\n extraHeight = !legend.height ? ((availableSize.height / 100) * 5) : 0;\n }\n else {\n extraWidth = !legend.width ? ((availableSize.width / 100) * 5) : 0;\n }\n legendBounds.height += extraHeight;\n legendBounds.width += extraWidth;\n var shapeHeight = legend.shapeHeight;\n var shapeWidth = legend.shapeWidth;\n var shapePadding = legend.shapePadding;\n var maximumWidth = 0;\n var rowWidth = 0;\n var legendWidth = 0;\n var columnHeight = 0;\n var rowCount = 0;\n var legendEventArgs;\n this.maxItemHeight = Math.max(measureText('MeasureText', legend.textStyle).height, legend.shapeHeight);\n var render = false;\n for (var _i = 0, _a = this.legendCollections; _i < _a.length; _i++) {\n var legendOption = _a[_i];\n legendEventArgs = {\n fill: legendOption.fill, text: legendOption.text, shape: legendOption.shape,\n markerShape: legendOption.markerShape, name: legendRender, cancel: false\n };\n this.chart.trigger(legendRender, legendEventArgs);\n legendOption.render = !legendEventArgs.cancel;\n legendOption.text = legendEventArgs.text;\n legendOption.fill = legendEventArgs.fill;\n legendOption.shape = legendEventArgs.shape;\n legendOption.markerShape = legendEventArgs.markerShape;\n legendOption.textSize = measureText(legendOption.text, legend.textStyle);\n if (legendOption.render && legendOption.text !== '') {\n render = true;\n legendWidth = shapeWidth + shapePadding + legendOption.textSize.width + padding;\n rowWidth = rowWidth + legendWidth;\n if (legendBounds.width < (padding + rowWidth) || this.isVertical) {\n maximumWidth = Math.max(maximumWidth, (rowWidth + padding - (this.isVertical ? 0 : legendWidth)));\n if (rowCount === 0 && (legendWidth !== rowWidth)) {\n rowCount = 1;\n }\n rowWidth = this.isVertical ? 0 : legendWidth;\n rowCount++;\n columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding;\n }\n }\n }\n columnHeight = Math.max(columnHeight, (this.maxItemHeight + padding) + padding);\n this.isPaging = legendBounds.height < columnHeight;\n this.totalPages = rowCount;\n if (render) {\n this.setBounds(Math.max((rowWidth + padding), maximumWidth), columnHeight, legend, legendBounds);\n }\n else {\n this.setBounds(0, 0, legend, legendBounds);\n }\n };\n /** @private */\n Legend.prototype.getRenderPoint = function (legendOption, start, textPadding, prevLegend, rect, count, firstLegend) {\n var padding = this.legend.padding;\n var previousBound = (prevLegend.location.x + textPadding + prevLegend.textSize.width);\n if ((previousBound + (legendOption.textSize.width + textPadding)) > (rect.x + rect.width + this.legend.shapeWidth / 2) ||\n this.isVertical) {\n legendOption.location.x = start.x;\n legendOption.location.y = (count === firstLegend) ? prevLegend.location.y :\n prevLegend.location.y + this.maxItemHeight + padding;\n }\n else {\n legendOption.location.x = (count === firstLegend) ? prevLegend.location.x : previousBound;\n legendOption.location.y = prevLegend.location.y;\n }\n var availwidth = (this.legendBounds.x + this.legendBounds.width) - (legendOption.location.x +\n textPadding - this.legend.shapeWidth / 2);\n legendOption.text = textTrim(+availwidth.toFixed(4), legendOption.text, this.legend.textStyle);\n };\n /** @private */\n Legend.prototype.LegendClick = function (seriesIndex) {\n var chart = this.chart;\n var series = chart.visibleSeries[seriesIndex];\n var legend = this.legendCollections[seriesIndex];\n var selectedDataIndexes = [];\n if (chart.selectionModule) {\n selectedDataIndexes = extend([], chart.selectionModule.selectedDataIndexes, null, true);\n }\n if (chart.legendSettings.toggleVisibility) {\n if (!series.visible) {\n series.visible = true;\n }\n else {\n series.visible = false;\n }\n legend.visible = (series.visible);\n if (chart.svgObject.childNodes.length > 0) {\n while (chart.svgObject.lastChild) {\n chart.svgObject.removeChild(chart.svgObject.lastChild);\n }\n remove(chart.svgObject);\n }\n chart.animateSeries = false;\n chart.removeSvg();\n chart.refreshAxis();\n series.refreshAxisLabel();\n this.refreshSeries(chart.visibleSeries);\n chart.refreshBound();\n chart.trigger('loaded', { chart: chart });\n if (selectedDataIndexes.length > 0) {\n chart.selectionModule.selectedDataIndexes = selectedDataIndexes;\n chart.selectionModule.redrawSelection(chart, chart.selectionMode);\n }\n }\n else if (chart.selectionModule) {\n chart.selectionModule.legendSelection(chart, seriesIndex);\n }\n };\n Legend.prototype.refreshSeries = function (seriesCollection) {\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n series.position = undefined;\n }\n };\n /**\n * To show the tooltip for the trimmed text in legend.\n * @return {void}\n */\n Legend.prototype.click = function (event) {\n if (!this.chart.legendSettings.visible) {\n return;\n }\n var targetId = event.target.id;\n var legendItemsId = [this.legendID + '_text_', this.legendID + '_shape_marker_',\n this.legendID + '_shape_'];\n var seriesIndex;\n for (var _i = 0, legendItemsId_1 = legendItemsId; _i < legendItemsId_1.length; _i++) {\n var id = legendItemsId_1[_i];\n if (targetId.indexOf(id) > -1) {\n seriesIndex = parseInt(targetId.split(id)[1], 10);\n this.LegendClick(seriesIndex);\n }\n }\n if (targetId.indexOf(this.legendID + '_pageup') > -1) {\n this.changePage(event, true);\n }\n else if (targetId.indexOf(this.legendID + '_pagedown') > -1) {\n this.changePage(event, false);\n }\n };\n /**\n * Get module name\n */\n Legend.prototype.getModuleName = function () {\n return 'Legend';\n };\n /**\n * To destroy the Legend.\n * @return {void}\n * @private\n */\n Legend.prototype.destroy = function (chart) {\n this.removeEventListener();\n };\n return Legend;\n}(BaseLegend));\nexport { Legend };\n","import { createTemplate, measureElementRect, logBase } from '../utils/helper';\nimport { ChartLocation, stringToNumber, appendElement, withIn, Rect } from '../utils/helper';\nimport { getPoint } from '../utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { annotationRender } from '../model/constants';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * Annotation Module handles the Annotation for chart and accumulation series.\n */\nvar AnnotationBase = /** @class */ (function () {\n /**\n * Constructor for chart and accumulation annotation\n * @param control\n */\n function AnnotationBase(control) {\n this.control = control;\n }\n /**\n * Method to render the annotation for chart and accumulation series.\n * @private\n * @param annotation\n * @param index\n */\n AnnotationBase.prototype.render = function (annotation, index) {\n this.isChart = this.control.getModuleName() === 'chart';\n this.annotation = annotation;\n var childElement = createTemplate(createElement('div', {\n id: this.control.element.id + '_Annotation_' + index,\n styles: 'position: absolute;'\n }), index, annotation.content, this.control);\n return childElement;\n };\n /**\n * Method to calculate the location for annotation - coordinate unit as pixel.\n * @private\n * @param location\n */\n AnnotationBase.prototype.setAnnotationPixelValue = function (location) {\n var rect;\n rect = this.annotation.region === 'Chart' ?\n new Rect(0, 0, this.control.availableSize.width, this.control.availableSize.height) :\n this.isChart ?\n this.control.chartAxisLayoutPanel.seriesClipRect :\n this.control.series[0].accumulationBound;\n location.x = ((typeof this.annotation.x !== 'string') ?\n ((typeof this.annotation.x === 'number') ? this.annotation.x : 0) :\n stringToNumber(this.annotation.x, rect.width)) + rect.x;\n location.y = ((typeof this.annotation.y === 'number') ? this.annotation.y :\n stringToNumber(this.annotation.y, rect.height)) + rect.y;\n return true;\n };\n /**\n * Method to calculate the location for annotation - coordinate unit as point.\n * @private\n * @param location\n */\n AnnotationBase.prototype.setAnnotationPointValue = function (location) {\n var symbolLocation = new ChartLocation(0, 0);\n if (this.isChart) {\n var xAxis = void 0;\n var yAxis = void 0;\n var chart = this.control;\n var annotation = this.annotation;\n var xValue = void 0;\n var isLog = false;\n var xAxisName = annotation.xAxisName;\n var yAxisName = annotation.yAxisName;\n var isInverted = chart.requireInvertedAxis;\n for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n var axis = _a[_i];\n if (xAxisName === axis.name || (xAxisName == null && axis.name === 'primaryXAxis')) {\n xAxis = axis;\n if (xAxis.valueType.indexOf('Category') > -1) {\n var xAnnotation = xAxis.valueType === 'DateTimeCategory' ? (annotation.x.getTime()).toString() :\n annotation.x;\n if (xAxis.labels.indexOf(xAnnotation) < 0) {\n return false;\n }\n else {\n xValue = xAxis.labels.indexOf(xAnnotation);\n }\n }\n else if (xAxis.valueType === 'DateTime') {\n var option = { skeleton: 'full', type: 'dateTime' };\n xValue = (typeof this.annotation.x === 'object') ?\n Date.parse(chart.intl.getDateParser(option)(chart.intl.getDateFormat(option)(new Date(DataUtil.parse.parseJson({ val: annotation.x }).val)))) : 0;\n }\n else {\n xValue = +annotation.x;\n }\n }\n else if (yAxisName === axis.name || (yAxisName == null && axis.name === 'primaryYAxis')) {\n yAxis = axis;\n isLog = yAxis.valueType === 'Logarithmic';\n }\n }\n if (xAxis && yAxis && withIn(xAxis.valueType === 'Logarithmic' ? logBase(xValue, xAxis.logBase) : xValue, xAxis.visibleRange)) {\n symbolLocation = getPoint(xValue, withIn((isLog ? logBase(+this.annotation.y, yAxis.logBase) : +this.annotation.y), yAxis.visibleRange) ? +annotation.y :\n isLog ? Math.pow(yAxis.logBase, yAxis.visibleRange.max) :\n +annotation.y > yAxis.visibleRange.max ? yAxis.visibleRange.max : yAxis.visibleRange.min, xAxis, yAxis, isInverted);\n location.x = symbolLocation.x + (isInverted ? yAxis.rect.x : xAxis.rect.x);\n location.y = symbolLocation.y + (isInverted ? xAxis.rect.y : yAxis.rect.y);\n }\n else {\n return false;\n }\n return true;\n }\n else {\n return this.setAccumulationPointValue(location);\n }\n };\n /**\n * To process the annotation for accumulation chart\n * @param annotation\n * @param index\n * @param parentElement\n */\n AnnotationBase.prototype.processAnnotation = function (annotation, index, parentElement) {\n var annotationElement;\n var location;\n location = new ChartLocation(0, 0);\n annotationElement = this.render(annotation, index);\n if (this['setAnnotation' + annotation.coordinateUnits + 'Value'](location)) {\n this.setElementStyle(location, annotationElement, parentElement);\n }\n };\n /**\n * Method to calculate the location for annotation - coordinate unit as point in accumulation chart.\n * @private\n * @param location\n */\n AnnotationBase.prototype.setAccumulationPointValue = function (location) {\n var accumulation = this.control;\n var point;\n for (var _i = 0, _a = accumulation.visibleSeries[0].points; _i < _a.length; _i++) {\n var accPoint = _a[_i];\n if (typeof accPoint.x === 'object') {\n if (Date.parse(accPoint.x) === Date.parse(this.annotation.x) &&\n accPoint.y === this.annotation.y) {\n point = accPoint;\n break;\n }\n }\n else {\n if (accPoint.x === this.annotation.x && accPoint.y === this.annotation.y) {\n point = accPoint;\n break;\n }\n }\n }\n if (point && point.visible) {\n location.x = point.symbolLocation.x;\n location.y = point.symbolLocation.y;\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * Method to set the element style for accumulation / chart annotation.\n * @private\n * @param location\n * @param element\n * @param parentElement\n */\n AnnotationBase.prototype.setElementStyle = function (location, element, parentElement) {\n var elementRect = measureElementRect(element);\n var argsData = {\n cancel: false, name: annotationRender, content: element,\n location: location\n };\n this.control.trigger(annotationRender, argsData);\n if (!argsData.cancel) {\n argsData.content.style.left = this.setAlignmentValue(this.annotation.horizontalAlignment, elementRect.width, argsData.location.x) + 'px';\n argsData.content.style.top = this.setAlignmentValue(this.annotation.verticalAlignment, elementRect.height, argsData.location.y) + 'px';\n argsData.content.setAttribute('aria-label', this.annotation.description || 'Annotation');\n appendElement(argsData.content, parentElement);\n }\n };\n /**\n * Method to calculate the alignment value for annotation.\n * @private\n * @param alignment\n * @param size\n * @param value\n */\n AnnotationBase.prototype.setAlignmentValue = function (alignment, size, value) {\n switch (alignment) {\n case 'Top':\n case 'Near':\n value -= size;\n break;\n case 'Bottom':\n case 'Far':\n value += 0;\n break;\n case 'Middle':\n case 'Center':\n value -= (size / 2);\n break;\n }\n return value;\n };\n return AnnotationBase;\n}());\nexport { AnnotationBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { AnnotationBase } from '../../common/annotation/annotation';\nimport { appendElement } from '../../common/utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * `ChartAnnotation` module handles the annotation for chart.\n */\nvar ChartAnnotation = /** @class */ (function (_super) {\n __extends(ChartAnnotation, _super);\n /**\n * Constructor for chart annotation.\n * @private.\n */\n function ChartAnnotation(control, annotations) {\n var _this = _super.call(this, control) || this;\n _this.chart = control;\n _this.annotations = annotations;\n return _this;\n }\n /**\n * Method to render the annotation for chart\n * @param element\n * @private\n */\n ChartAnnotation.prototype.renderAnnotations = function (element) {\n var _this = this;\n this.annotations = this.chart.annotations;\n this.parentElement = createElement('div', {\n id: this.chart.element.id + '_Annotation_Collections'\n });\n this.annotations.map(function (annotation, index) {\n _this.processAnnotation(annotation, index, _this.parentElement);\n });\n appendElement(this.parentElement, element);\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n ChartAnnotation.prototype.destroy = function (control) {\n // Destroy method performed here\n };\n /**\n * Get module name.\n */\n ChartAnnotation.prototype.getModuleName = function () {\n // Returns te module name\n return 'Annotation';\n };\n return ChartAnnotation;\n}(AnnotationBase));\nexport { ChartAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, PathOption, sum } from '../../common/utils/helper';\nimport { Size, getSaturationColor, getPoint } from '../../common/utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ColumnBase } from './column-base';\nimport { getMedian } from '../../common/utils/helper';\n/**\n * `BoxAndWhiskerSeries` module is used to render the box and whisker series.\n */\nvar BoxAndWhiskerSeries = /** @class */ (function (_super) {\n __extends(BoxAndWhiskerSeries, _super);\n function BoxAndWhiskerSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render BoxAndWhisker series.\n * @return {void}\n * @private\n */\n BoxAndWhiskerSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n var centerRegion;\n var borderWidth = series.border.width || 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n var centerRegion_1 = void 0;\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n this.findBoxPlotValues(point.y, point, series.boxPlotMode);\n //region to cover the top and bottom ticks\n this.updateTipRegion(series, point, sideBySideInfo);\n //get middle rect\n centerRegion_1 = this.getRectangle((point.xValue + sideBySideInfo.start), point.upperQuartile, (point.xValue + sideBySideInfo.end), point.lowerQuartile, series);\n point.regions.push(centerRegion_1);\n argsData = this.triggerEvent(series, point, series.interior, {\n color: (!isNullOrUndefined(series.border.color) && series.border.color !== 'transparent') ? series.border.color :\n getSaturationColor(series.interior, -0.6),\n width: series.border.width ? series.border.width : 1\n });\n if (!argsData.cancel) {\n this.renderBoxAndWhisker(series, point, centerRegion_1, argsData, this.getPathString(point, series, getPoint(point.xValue, point.median, xAxis, yAxis, isInverted), getPoint(point.xValue + 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 color;\n var rendered;\n var segments = this.sortSegments(series, series.segments);\n series.points.map(function (point, i, seriesPoints) {\n point.symbolLocations = [];\n point.regions = [];\n rendered = false;\n if (point.visible && withInRange(seriesPoints[i - 1], point, seriesPoints[i + 1], series)) {\n direction += _this.getAreaPathDirection(point.xValue, origin, series, isInverted, getPoint, startPoint, 'M');\n startPoint = startPoint || new ChartLocation(point.xValue, origin);\n firstPoint = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n if (previous && _this.setPointColor(point, previous, series, series.segmentAxis === 'X', segments)) {\n rendered = true;\n startRegion = getPoint(startPoint.x, origin, xAxis, yAxis, isInverted, series);\n direction += ('L' + ' ' + (firstPoint.x) + ' ' + (firstPoint.y) + ' ');\n direction += ('L' + ' ' + (firstPoint.x) + ' ' + (startRegion.y) + ' ');\n _this.generatePathOption(options, series, previous, direction, '_Point_' + previous.index);\n direction = 'M' + ' ' + (firstPoint.x) + ' ' + (startRegion.y) + ' ' + 'L' + ' ' +\n (firstPoint.x) + ' ' + (firstPoint.y) + ' ';\n }\n else {\n direction += ('L' + ' ' + (firstPoint.x) + ' ' + (firstPoint.y) + ' ');\n _this.setPointColor(point, null, series, series.segmentAxis === 'X', segments);\n }\n if (seriesPoints[i + 1] && !seriesPoints[i + 1].visible && series.emptyPointSettings.mode !== 'Drop') {\n direction += _this.getAreaEmptyDirection({ 'x': point.xValue, 'y': origin }, startPoint, series, isInverted, getPoint);\n startPoint = null;\n }\n previous = point;\n _this.storePointLocation(point, series, isInverted, getPoint);\n }\n });\n if (!rendered) {\n direction = series.points.length > 1 ?\n (direction + this.getAreaPathDirection(previous.xValue, origin, series, isInverted, getPoint, null, 'L')) : '';\n this.generatePathOption(options, series, previous, direction, '');\n }\n this.applySegmentAxis(series, options, segments);\n this.renderMarker(series);\n };\n /**\n * To Store the path directions of the area\n */\n MultiColoredAreaSeries.prototype.generatePathOption = function (options, series, point, direction, id) {\n options.push(new PathOption(series.chart.element.id + '_Series_' + series.index + id, series.setPointColor(point, series.interior), series.border.width, series.border.color, series.opacity, series.dashArray, direction));\n };\n /**\n * To destroy the area series.\n * @return {void}\n * @private\n */\n MultiColoredAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name\n */\n MultiColoredAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MultiColoredAreaSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n MultiColoredAreaSeries.prototype.doAnimation = function (series) {\n this.doLinearAnimation(series, series.animation);\n };\n return MultiColoredAreaSeries;\n}(MultiColoredSeries));\nexport { MultiColoredAreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, getPoint, PathOption } from '../../common/utils/helper';\nimport { MultiColoredSeries } from './multi-colored-base';\n/**\n * `MultiColoredLineSeries` used to render the line series with multi color.\n */\nvar MultiColoredLineSeries = /** @class */ (function (_super) {\n __extends(MultiColoredLineSeries, _super);\n function MultiColoredLineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Line Series.\n * @return {void}.\n * @private\n */\n MultiColoredLineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var previous = null;\n var startPoint = 'M';\n var visiblePoints = this.improveChartPerformance(series);\n var options = [];\n var direction = '';\n var segments = this.sortSegments(series, series.segments);\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n direction += this.getLineDirection(previous, point, series, isInverted, getPoint, startPoint);\n if (previous != null) {\n if (this.setPointColor(point, previous, series, series.segmentAxis === 'X', segments)) {\n options.push(new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + previous.index, 'none', series.width, series.setPointColor(previous, series.interior), series.opacity, series.dashArray, direction));\n startPoint = 'M';\n direction = '';\n }\n else {\n startPoint = 'L';\n }\n }\n else {\n this.setPointColor(point, null, series, series.segmentAxis === 'X', segments);\n }\n previous = point;\n this.storePointLocation(point, series, isInverted, getPoint);\n }\n else {\n previous = (series.emptyPointSettings.mode === 'Drop') ? previous : null;\n startPoint = (series.emptyPointSettings.mode === 'Drop') ? startPoint : 'M';\n point.symbolLocations = [];\n }\n }\n if (direction !== '') {\n options.push(new PathOption(series.chart.element.id + '_Series_' + series.index, 'none', series.width, series.setPointColor(visiblePoints[visiblePoints.length - 1], series.interior), series.opacity, series.dashArray, direction));\n }\n this.applySegmentAxis(series, options, segments);\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n MultiColoredLineSeries.prototype.doAnimation = function (series) {\n this.doLinearAnimation(series, series.animation);\n };\n /**\n * Get module name.\n */\n MultiColoredLineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MultiColoredLineSeries';\n };\n /**\n * To destroy the line series.\n * @return {void}\n * @private\n */\n MultiColoredLineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return MultiColoredLineSeries;\n}(MultiColoredSeries));\nexport { MultiColoredLineSeries };\n","import { 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';\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 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 style = this.scrollbarThemeStyle;\n var mouseXY = this.isVertical ? this.mouseY : this.mouseX;\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 }\n else if (this.isResizeLeft || this.isResizeRight) {\n this.resizeThumb(e);\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 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 };\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 };\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 elem = this.scrollElements;\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 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 _this.setZoomFactorPosition(currentX, width);\n },\n end: function (model) {\n _this.scrollElements.thumbRectX = current;\n _this.startX = current;\n _this.positionThumb(current, width);\n _this.setZoomFactorPosition(current, width);\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 return ScrollBar;\n}());\nexport { ScrollBar };\n","/**\n * Defines the common functionalities of accumulation series\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { degreeToLocation, getElement, indexFinder } from '../../common/utils/helper';\nimport { pointByIndex } from '../model/acc-base';\n/**\n * Accumulation Base used to do some base calculation for accumulation chart.\n */\nvar AccumulationBase = /** @class */ (function () {\n /** @private */\n function AccumulationBase(accumulation) {\n this.accumulation = accumulation;\n }\n Object.defineProperty(AccumulationBase.prototype, \"center\", {\n /**\n * Gets the center of the pie\n * @private\n */\n get: function () {\n return this.pieCenter || (this.accumulation.visibleSeries[0].type === 'Pie' ?\n this.accumulation.pieSeriesModule.center : null);\n },\n /**\n * Sets the center of the pie\n * @private\n */\n set: function (value) {\n this.pieCenter = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AccumulationBase.prototype, \"radius\", {\n /**\n * Gets the radius of the pie\n * @private\n */\n get: function () {\n return this.pieRadius !== undefined ? this.pieRadius :\n this.accumulation.pieSeriesModule.radius;\n },\n /**\n * Sets the radius of the pie\n * @private\n */\n set: function (value) {\n this.pieRadius = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AccumulationBase.prototype, \"labelRadius\", {\n /**\n * Gets the label radius of the pie\n * @private\n */\n get: function () {\n return this.pieLabelRadius !== undefined ? this.pieLabelRadius :\n this.accumulation.pieSeriesModule.labelRadius;\n },\n /**\n * Sets the label radius of the pie\n * @private\n */\n set: function (value) {\n this.pieLabelRadius = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Checks whether the series is circular or not\n * @private\n */\n AccumulationBase.prototype.isCircular = function () {\n return this.accumulation.type === 'Pie';\n };\n /**\n * To process the explode on accumulation chart loading\n * @private\n */\n AccumulationBase.prototype.processExplode = function (event) {\n if (event.target.id.indexOf('_Series_') > -1 || event.target.id.indexOf('_datalabel_') > -1) {\n var pointIndex = indexFinder(event.target.id).point;\n if (isNaN(pointIndex) || (event.target.id.indexOf('_datalabel_') > -1 &&\n this.accumulation.visibleSeries[0].points[pointIndex].labelPosition === 'Outside')) {\n return null;\n }\n this.explodePoints(pointIndex, this.accumulation);\n this.deExplodeAll(pointIndex);\n }\n };\n /**\n * To invoke the explode on accumulation chart loading\n * @private\n */\n AccumulationBase.prototype.invokeExplode = function () {\n if (this.accumulation.visibleSeries[0].explodeAll) {\n for (var _i = 0, _a = this.accumulation.visibleSeries[0].points; _i < _a.length; _i++) {\n var point = _a[_i];\n this.explodePoints(point.index, this.accumulation);\n }\n }\n else if (!isNullOrUndefined(this.accumulation.visibleSeries[0].explodeIndex)) {\n this.explodePoints(this.accumulation.visibleSeries[0].explodeIndex, this.accumulation);\n }\n if (this.accumulation.accumulationSelectionModule && this.accumulation.selectionMode !== 'None' &&\n this.accumulation.accumulationSelectionModule.selectedDataIndexes.length) {\n for (var _b = 0, _c = this.accumulation.accumulationSelectionModule.selectedDataIndexes; _b < _c.length; _b++) {\n var index = _c[_b];\n this.explodePoints(index.point, this.accumulation, true);\n this.deExplodeAll(index.point);\n }\n }\n };\n /**\n * To deExplode all points in the series\n */\n AccumulationBase.prototype.deExplodeAll = function (index) {\n var pointId = this.accumulation.element.id + '_Series_0_Point_';\n var points = this.accumulation.visibleSeries[0].points;\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var currentPoint = points_1[_i];\n if (index !== currentPoint.index) {\n this.deExplodeSlice(currentPoint.index, pointId, this.center);\n }\n }\n };\n /**\n * To explode point by index\n * @private\n */\n AccumulationBase.prototype.explodePoints = function (index, chart, explode) {\n if (explode === void 0) { explode = false; }\n var pointId = this.accumulation.element.id + '_Series_0_Point_';\n var translate;\n var points = this.accumulation.visibleSeries[0].points;\n var point = pointByIndex(index, this.accumulation.visibleSeries[0].points);\n if (isNullOrUndefined(point)) {\n return null;\n }\n if (!this.isCircular()) {\n translate = { x: chart.explodeDistance, y: 0 };\n }\n else {\n translate = degreeToLocation(point.midAngle, chart.explodeDistance, this.center);\n }\n if (this.isExplode(pointId + index) || explode) {\n this.explodeSlice(index, translate, pointId, this.center || { x: 0, y: 0 });\n }\n else {\n this.deExplodeSlice(index, pointId, this.center);\n }\n };\n /**\n * To check point is exploded by id\n */\n AccumulationBase.prototype.isExplode = function (id) {\n var element = getElement(id);\n if (element && (element.getAttribute('transform') === 'translate(0, 0)' || element.getAttribute('transform') === null ||\n element.getAttribute('transform') === 'translate(0)')) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * To deExplode the point by index\n */\n AccumulationBase.prototype.deExplodeSlice = function (index, sliceId, center) {\n var position = 'translate(0, 0)';\n this.setTranslate(index, sliceId, position);\n };\n /**\n * To translate the point elements by index and position\n */\n AccumulationBase.prototype.setTranslate = function (index, sliceId, position) {\n this.setElementTransform(sliceId + index, position);\n if (this.accumulation.visibleSeries[0].dataLabel.visible) {\n sliceId = this.accumulation.element.id + '_datalabel_Series_0_';\n this.setElementTransform(sliceId + 'shape_' + index, position);\n this.setElementTransform(sliceId + 'text_' + index, position);\n this.setElementTransform(sliceId + 'connector_' + index, position);\n }\n };\n /**\n * To translate the point element by id and position\n */\n AccumulationBase.prototype.setElementTransform = function (id, position) {\n var element = getElement(id);\n if (element) {\n element.setAttribute('transform', position);\n }\n };\n /**\n * To translate the point elements by index position\n */\n AccumulationBase.prototype.explodeSlice = function (index, translate, sliceId, center) {\n var position = 'translate(' + (translate.x - center.x) + ', ' + (translate.y - center.y) + ')';\n this.setTranslate(index, sliceId, position);\n };\n return AccumulationBase;\n}());\nexport { AccumulationBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Accumulation charts base file\n */\nimport { Animation, 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 } from '../../common/utils/helper';\nimport { PieBase } from '../renderer/pie-base';\n/**\n * PieSeries module used to render `Pie` Series.\n */\nvar PieSeries = /** @class */ (function (_super) {\n __extends(PieSeries, _super);\n function PieSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * To get path option, degree, symbolLocation from the point.\n * @private\n */\n PieSeries.prototype.renderPoint = function (point, series, chart, option) {\n var sum = series.sumOfPoints;\n var degree = (sum) ? ((Math.abs(point.y) / sum) * (this.totalAngle)) : null;\n option.d = this.getPathOption(point, degree);\n point.midAngle = (this.startAngle - (degree / 2)) % 360;\n point.endAngle = this.startAngle % 360;\n point.symbolLocation = degreeToLocation(point.midAngle, (this.radius + this.innerRadius) / 2, this.center);\n return option;\n };\n /**\n * To get path option from the point.\n */\n PieSeries.prototype.getPathOption = function (point, degree) {\n if (degree === null || !point.y) {\n return '';\n }\n var path = this.getPathArc(this.center, this.startAngle % 360, (this.startAngle + degree) % 360, this.radius, this.innerRadius);\n this.startAngle += degree;\n return path;\n };\n /**\n * To animate the pie series.\n * @private\n */\n PieSeries.prototype.animateSeries = function (accumulation, option, series, slice) {\n var groupId = accumulation.element.id + 'SeriesGroup' + series.index;\n if (series.animation.enable && accumulation.animateSeries) {\n var clippath = accumulation.renderer.createClipPath({ id: groupId + '_clipPath' });\n var path = new PathOption(groupId + '_slice', 'transparent', 1, 'transparent', 1, '', '');\n var clipslice = accumulation.renderer.drawPath(path);\n clippath.appendChild(clipslice);\n accumulation.svgObject.appendChild(clippath);\n slice.setAttribute('style', 'clip-path:url(#' + clippath.id + ')');\n this.doAnimation(clipslice, series);\n }\n };\n /**\n * To get the module name of the Pie series.\n */\n PieSeries.prototype.getModuleName = function () {\n return 'PieSeries';\n };\n /**\n * To destroy the pie series.\n * @return {void}\n * @private\n */\n PieSeries.prototype.destroy = function (accumulation) {\n /**\n * Destroy method calling here\n */\n };\n return PieSeries;\n}(PieBase));\nexport { PieSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * AccumulationChart file\n */\nimport { Property, Component, Complex, Collection, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { Internationalization, Event, Browser, EventHandler, Touch } from '@syncfusion/ej2-base';\nimport { remove, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Font, Margin, Border, TooltipSettings, Indexes } from '../common/model/base';\nimport { AccumulationSeries } from './model/acc-base';\nimport { Theme, getThemeColor } from '../common/model/theme';\nimport { load, pointClick } from '../common/model/constants';\nimport { pointMove, chartMouseClick, chartMouseDown } from '../common/model/constants';\nimport { chartMouseLeave, chartMouseMove, chartMouseUp, resized } from '../common/model/constants';\nimport { LegendSettings } from '../common/legend/legend';\nimport { Rect, Size, subtractRect, indexFinder } from '../common/utils/helper';\nimport { measureText, RectOption, showTooltip } from '../common/utils/helper';\nimport { textElement, TextOption, createSvg, calculateSize, removeElement, firstToLowerCase } from '../common/utils/helper';\nimport { getElement, titlePositionX } from '../common/utils/helper';\nimport { Data } from '../common/model/data';\nimport { AccumulationBase } from './renderer/accumulation-base';\nimport { PieSeries } from './renderer/pie-series';\nimport { AccumulationAnnotationSettings } from './model/acc-base';\nimport { ExportUtils } from '../common/utils/export';\nimport { getTitle } from '../common/utils/helper';\n/**\n * Represents the AccumulationChart control.\n * ```html\n *
\n * \n * ```\n */\nvar AccumulationChart = /** @class */ (function (_super) {\n __extends(AccumulationChart, _super);\n /**\n * Constructor for creating the AccumulationChart widget\n * @private\n */\n function AccumulationChart(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private explode radius internal property */\n _this.explodeDistance = 0;\n _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 if ((event.target.textContent.indexOf('...') > -1) && (targetId === (this.element.id + '_title'))) {\n showTooltip(this.title, x, y, this.element.offsetWidth, this.element.id + '_EJ2_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_Title_Tooltip');\n }\n };\n /**\n * Handles the mouse click on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationOnMouseClick = function (e) {\n this.setMouseXY(e);\n if (this.accumulationLegendModule && this.legendSettings.visible) {\n this.accumulationLegendModule.click(e);\n }\n if (this.selectionMode !== 'None' && this.accumulationSelectionModule) {\n this.accumulationSelectionModule.calculateSelectedElements(this, e);\n }\n if (this.visibleSeries[0].explode) {\n this.accBaseModule.processExplode(e);\n }\n this.trigger(chartMouseClick, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n if (this.pointClick) {\n this.triggerPointEvent(pointClick, e.target);\n }\n return false;\n };\n AccumulationChart.prototype.triggerPointEvent = function (event, element) {\n var indexes = indexFinder(element.id, true);\n if (indexes.series >= 0 && indexes.point >= 0) {\n this.trigger(event, { series: this.series[indexes.series],\n point: this.series[indexes.series].points[indexes.point],\n seriesIndex: indexes.series, pointIndex: indexes.point,\n x: this.mouseX, y: this.mouseY });\n }\n };\n /**\n * Handles the mouse right click on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationRightClick = function (event) {\n if (event.buttons === 2 || event.pointerType === 'touch') {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n /**\n * Handles the mouse leave on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationMouseLeave = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseLeave, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n this.notify(Browser.isPointer ? 'pointerleave' : 'mouseleave', e);\n return false;\n };\n /**\n * Method to set culture for chart\n */\n AccumulationChart.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * Method to create SVG element for accumulation chart.\n */\n AccumulationChart.prototype.createPieSvg = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * To Remove the SVG from accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n removeElement('EJ2_legend_tooltip');\n removeElement('EJ2_datalabel_tooltip');\n };\n /**\n * Method to create the secondary element for tooltip, datalabel and annotaitons.\n */\n AccumulationChart.prototype.createSecondaryElement = function () {\n this.element.appendChild(this.createElement('div', {\n id: this.element.id + '_Secondary_Element',\n styles: 'position: relative'\n }));\n };\n /**\n * Method to find visible series based on series types\n */\n AccumulationChart.prototype.calculateVisibleSeries = function () {\n this.visibleSeries = [];\n for (var i = 0, length_1 = this.series.length; i < length_1; i++) {\n this.series[i].index = i;\n if (this.series[i].type === this.type && this.visibleSeries.length === 0) {\n this.visibleSeries.push(this.series[i]);\n break;\n }\n }\n };\n /**\n * To find points from dataSource\n */\n AccumulationChart.prototype.processData = function (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 var element = document.getElementById('chartmeasuretext');\n if (element) {\n element.remove();\n }\n };\n /**\n * Method to find groupped points\n */\n AccumulationChart.prototype.doGrouppingProcess = function () {\n var series = this.visibleSeries[0];\n if (!isNullOrUndefined(series.resultData) && ((!isNullOrUndefined(series.lastGroupTo) &&\n series.lastGroupTo !== series.groupTo))) {\n series.getPoints(series.resultData, this);\n }\n };\n /**\n * Method to calculate bounds for accumulation chart\n */\n AccumulationChart.prototype.calculateBounds = function () {\n this.initialClipRect = new Rect(this.margin.left, this.margin.top, this.availableSize.width, this.availableSize.height);\n this.titleCollection = [];\n this.titleCollection = getTitle(this.title, this.titleStyle, this.initialClipRect.width);\n subtractRect(this.initialClipRect, new Rect(0, (measureText(this.title, this.titleStyle).height * this.titleCollection.length), this.margin.right + this.margin.left, this.margin.bottom + this.margin.top));\n this.calculateLegendBounds();\n };\n /*\n * Method to calculate legend bounds for accumulation chart\n */\n AccumulationChart.prototype.calculateLegendBounds = function () {\n if (!this.accumulationLegendModule || !this.legendSettings.visible) {\n return null;\n }\n this.accumulationLegendModule.getLegendOptions(this, this.visibleSeries);\n this.accumulationLegendModule.calculateLegendBounds(this.initialClipRect, this.availableSize);\n };\n /**\n * To render elements for accumulation chart\n * @private\n */\n AccumulationChart.prototype.renderElements = function () {\n this.renderBorder();\n this.renderTitle();\n this.createSecondaryElement();\n this.renderSeries();\n this.renderLegend();\n this.element.appendChild(this.svgObject);\n this.processSelection();\n this.processExplode();\n this.renderAnnotation();\n this.setSecondaryElementPosition();\n this.trigger('loaded', { accumulation: this });\n this.animateSeries = false;\n };\n /**\n * To set the left and top position for data label template for center aligned chart\n */\n AccumulationChart.prototype.setSecondaryElementPosition = function () {\n var tooltipParent = getElement(this.element.id + '_Secondary_Element');\n if (!tooltipParent) {\n return;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n tooltipParent.style.left = Math.max(svgRect.left - rect.left, 0) + 'px';\n tooltipParent.style.top = Math.max(svgRect.top - rect.top, 0) + 'px';\n };\n /**\n * To render the annotaitions for accumulation series.\n */\n AccumulationChart.prototype.renderAnnotation = function () {\n if (this.annotationModule) {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n };\n /**\n * Method to process the explode in accumulation chart\n */\n AccumulationChart.prototype.processExplode = function () {\n if (!this.visibleSeries[0].explode) {\n return null;\n }\n this.accBaseModule.invokeExplode();\n };\n /**\n * Method to render series for accumulation chart\n */\n AccumulationChart.prototype.renderSeries = function () {\n this.svgObject.appendChild(this.renderer.createGroup({ id: this.element.id + '_SeriesCollection' }));\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.visible && this[(firstToLowerCase(series.type) + 'SeriesModule')]) {\n this[(firstToLowerCase(series.type) + 'SeriesModule')].initProperties(this, series);\n series.renderSeries(this);\n }\n }\n };\n /**\n * Method to render border for accumulation chart\n */\n AccumulationChart.prototype.renderBorder = function () {\n var padding = this.border.width;\n this.svgObject.appendChild(this.renderer.drawRectangle(new RectOption(this.element.id + '_border', this.background || this.themeStyle.background, this.border, 1, new Rect(padding / 2, padding / 2, this.availableSize.width - padding, this.availableSize.height - padding))));\n };\n /**\n * Method to render legend for accumulation chart\n */\n AccumulationChart.prototype.renderLegend = function () {\n if (!this.accumulationLegendModule || !this.legendSettings.visible) {\n return null;\n }\n if (this.accumulationLegendModule.legendCollections.length) {\n if (this.visibleSeries[0].type === 'Pie') {\n this.accumulationLegendModule.getSmartLegendLocation(this.visibleSeries[0].labelBound, this.accumulationLegendModule.legendBounds, this.margin);\n }\n this.accumulationLegendModule.renderLegend(this, this.legendSettings, this.accumulationLegendModule.legendBounds);\n }\n };\n /**\n * To process the selection in accumulation chart\n */\n AccumulationChart.prototype.processSelection = function () {\n if (!this.accumulationSelectionModule || this.selectionMode === 'None') {\n return null;\n }\n var selectedDataIndexes = extend([], this.accumulationSelectionModule.selectedDataIndexes, null, true);\n this.accumulationSelectionModule.invokeSelection(this);\n if (selectedDataIndexes.length > 0) {\n this.accumulationSelectionModule.selectedDataIndexes = selectedDataIndexes;\n this.accumulationSelectionModule.redrawSelection(this, this.selectionMode);\n }\n };\n /**\n * To render title for accumulation chart\n */\n AccumulationChart.prototype.renderTitle = function () {\n if (!this.title) {\n return null;\n }\n var titleSize = measureText(this.title, this.titleStyle);\n var anchor = this.titleStyle.textAlignment === 'Near' ? 'start' :\n this.titleStyle.textAlignment === 'Far' ? 'end' : 'middle';\n textElement(new TextOption(this.element.id + '_title', titlePositionX(this.availableSize, this.margin.left, this.margin.left, this.titleStyle), this.margin.top + (titleSize.height * 3 / 4), anchor, this.titleCollection, '', 'auto'), this.titleStyle, this.titleStyle.color || this.themeStyle.chartTitle, this.svgObject);\n };\n /**\n * To get the series parent element\n * @private\n */\n AccumulationChart.prototype.getSeriesElement = function () {\n return this.svgObject.getElementsByTagName('g')[0];\n };\n /**\n * To refresh the all visible series points\n * @private\n */\n AccumulationChart.prototype.refreshSeries = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n this.refreshPoints(series.points);\n }\n };\n /**\n * To refresh points label region and visible\n * @private\n */\n AccumulationChart.prototype.refreshPoints = function (points) {\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n point.labelPosition = null;\n point.labelRegion = null;\n point.labelVisible = true;\n }\n };\n /**\n * To get Module name\n * @private\n */\n AccumulationChart.prototype.getModuleName = function () {\n return 'accumulationchart';\n };\n /**\n * To destroy the accumulationcharts\n * @private\n */\n AccumulationChart.prototype.destroy = function () {\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-accumulationchart');\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n AccumulationChart.prototype.requiredModules = function () {\n var modules = [];\n var enableAnnotation = false;\n modules.push({\n member: this.type + 'Series',\n args: [this]\n });\n if (this.legendSettings.visible) {\n modules.push({\n member: 'AccumulationLegend',\n args: [this]\n });\n }\n if (this.findDatalabelVisibility()) {\n modules.push({\n member: 'AccumulationDataLabel',\n args: [this]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'AccumulationTooltip',\n args: [this]\n });\n }\n if (this.selectionMode !== 'None') {\n modules.push({\n member: 'AccumulationSelection',\n args: [this]\n });\n }\n enableAnnotation = this.annotations.some(function (value) {\n return (value.content !== null);\n });\n if (enableAnnotation) {\n modules.push({\n member: 'Annotation',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * To find datalabel visibility in series\n */\n AccumulationChart.prototype.findDatalabelVisibility = function () {\n for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.dataLabel.visible) {\n return true;\n }\n }\n return false;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n AccumulationChart.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n AccumulationChart.prototype.onPropertyChanged = function (newProp, oldProp) {\n var update = {\n refreshElements: false, refreshBounds: false\n };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'theme':\n this.animateSeries = true;\n break;\n case 'title':\n case 'height':\n case 'width':\n case 'margin':\n update.refreshBounds = true;\n break;\n case 'titleStyle':\n if (newProp.titleStyle && (newProp.titleStyle.size || newProp.titleStyle.textOverflow)) {\n update.refreshBounds = true;\n }\n else {\n update.refreshElements = true;\n }\n break;\n case 'legendSettings':\n update.refreshBounds = true;\n update.refreshElements = true;\n break;\n case '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 }\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 Complex({}, LegendSettings)\n ], AccumulationChart.prototype, \"legendSettings\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], AccumulationChart.prototype, \"tooltip\", void 0);\n __decorate([\n Property('None')\n ], AccumulationChart.prototype, \"selectionMode\", void 0);\n __decorate([\n Property(false)\n ], AccumulationChart.prototype, \"isMultiSelect\", void 0);\n __decorate([\n Collection([], Indexes)\n ], AccumulationChart.prototype, \"selectedDataIndexes\", void 0);\n __decorate([\n Complex({}, Margin)\n ], AccumulationChart.prototype, \"margin\", void 0);\n __decorate([\n Property(true)\n ], AccumulationChart.prototype, \"enableSmartLabels\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], AccumulationChart.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"background\", void 0);\n __decorate([\n Collection([{}], AccumulationSeries)\n ], AccumulationChart.prototype, \"series\", void 0);\n __decorate([\n Collection([{}], AccumulationAnnotationSettings)\n ], AccumulationChart.prototype, \"annotations\", void 0);\n __decorate([\n Property('Material')\n ], AccumulationChart.prototype, \"theme\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"seriesRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"legendRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"textRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseMove\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseClick\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointClick\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointMove\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseDown\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseLeave\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseUp\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"resized\", void 0);\n __decorate([\n Property('USD')\n ], AccumulationChart.prototype, \"currencyCode\", void 0);\n AccumulationChart = __decorate([\n NotifyPropertyChanges\n ], AccumulationChart);\n return AccumulationChart;\n}(Component));\nexport { AccumulationChart };\n","/**\n * Defines the common behavior of funnel and pyramid series\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Size, stringToNumber, Rect } from '../../common/utils/helper';\nimport { AccumulationBase } from './accumulation-base';\n/**\n * TriangularBase is used to calculate base functions for funnel/pyramid series.\n */\nvar TriangularBase = /** @class */ (function (_super) {\n __extends(TriangularBase, _super);\n function TriangularBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the properties of funnel/pyramid series\n * @private\n */\n TriangularBase.prototype.initProperties = function (chart, series) {\n var actualChartArea = chart.initialClipRect;\n series.triangleSize = new Size(stringToNumber(series.width, actualChartArea.width), stringToNumber(series.height, actualChartArea.height));\n series.neckSize = new Size(stringToNumber(series.neckWidth, actualChartArea.width), stringToNumber(series.neckHeight, actualChartArea.height));\n this.defaultLabelBound(series, series.dataLabel.visible, series.dataLabel.position, chart);\n if (series.explodeOffset === '30%') {\n series.explodeOffset = '25px';\n }\n chart.explodeDistance = stringToNumber(series.explodeOffset, actualChartArea.width);\n var points = series.points;\n this.initializeSizeRatio(points, series);\n };\n /**\n * Initializes the size of the pyramid/funnel segments\n * @private\n */\n TriangularBase.prototype.initializeSizeRatio = function (points, series, reverse) {\n if (reverse === void 0) { reverse = false; }\n var sumOfPoints = series.sumOfPoints;\n //Limiting the ratio within the range of 0 to 1\n var gapRatio = Math.min(Math.max(series.gapRatio, 0), 1);\n //% equivalence of a value 1\n var coEff = 1 / (sumOfPoints * (1 + gapRatio / (1 - gapRatio)));\n var spacing = gapRatio / (points.length - 1);\n var y = 0;\n //starting from bottom\n for (var i = points.length - 1; i >= 0; i--) {\n var index = reverse ? points.length - 1 - i : i;\n if (points[index].visible) {\n var height = coEff * points[index].y;\n points[index].yRatio = y;\n points[index].heightRatio = height;\n y += height + spacing;\n }\n }\n };\n /**\n * Marks the label location from the set of points that forms a pyramid/funnel segment\n * @private\n */\n TriangularBase.prototype.setLabelLocation = function (series, point, points) {\n var last = points.length - 1;\n var bottom = series.type === 'Funnel' ? points.length - 2 : points.length - 1;\n var x = (points[0].x + points[bottom].x) / 2;\n var right = (points[1].x + points[bottom - 1].x) / 2;\n point.region = new Rect(x, points[0].y, right - x, points[bottom].y - points[0].y);\n point.symbolLocation = {\n x: point.region.x + point.region.width / 2,\n y: point.region.y + point.region.height / 2\n };\n point.labelOffset = {\n x: point.symbolLocation.x - (points[0].x + points[last].x) / 2,\n y: point.symbolLocation.y - (points[0].y + points[last].y) / 2\n };\n };\n /**\n * Finds the path to connect the list of points\n * @private\n */\n TriangularBase.prototype.findPath = function (locations) {\n var path = 'M';\n for (var i = 0; i < locations.length; i++) {\n path += locations[i].x + ' ' + locations[i].y;\n if (i !== locations.length - 1) {\n path += ' L';\n }\n }\n return path;\n };\n /**\n * To calculate data-label bounds\n * @private\n */\n TriangularBase.prototype.defaultLabelBound = function (series, visible, position, chart) {\n var x = (chart.initialClipRect.width - series.triangleSize.width) / 2;\n var y = (chart.initialClipRect.height - series.triangleSize.height) / 2;\n var accumulationBound = new Rect(x, y, series.triangleSize.width, series.triangleSize.height);\n series.labelBound = new Rect(accumulationBound.x, accumulationBound.y, accumulationBound.width + accumulationBound.x, accumulationBound.height + accumulationBound.y);\n series.accumulationBound = accumulationBound;\n if (visible && position === 'Outside') {\n series.labelBound = new Rect(Infinity, Infinity, -Infinity, -Infinity);\n }\n };\n return TriangularBase;\n}(AccumulationBase));\nexport { TriangularBase };\n","/**\n * Defines the behavior of a funnel series\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { TriangularBase } from './triangular-base';\n/**\n * FunnelSeries module used to render `Funnel` Series.\n */\nvar FunnelSeries = /** @class */ (function (_super) {\n __extends(FunnelSeries, _super);\n function FunnelSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the path of a funnel segment\n */\n FunnelSeries.prototype.getSegmentData = function (point, series, chart) {\n var lineWidth;\n var topRadius;\n var bottomRadius;\n var endTop;\n var endBottom;\n var minRadius;\n var endMin;\n var bottomY;\n var area = series.triangleSize;\n var offset = 0;\n var extraSpace = (chart.initialClipRect.width - series.triangleSize.width) / 2;\n var emptySpaceAtLeft = extraSpace + chart.initialClipRect.x;\n var seriesTop = chart.initialClipRect.y + (chart.initialClipRect.height - area.height) / 2;\n //defines the top and bottom of a segment\n var top = point.yRatio * area.height;\n var bottom = top + point.heightRatio * area.height;\n var neckSize = series.neckSize;\n lineWidth = neckSize.width + (area.width - neckSize.width) * ((area.height - neckSize.height - top) /\n (area.height - neckSize.height));\n topRadius = (area.width / 2) - lineWidth / 2;\n //Calculating the middle slope change and bottom\n endTop = topRadius + lineWidth;\n if (bottom > area.height - neckSize.height || area.height === neckSize.height) {\n lineWidth = neckSize.width;\n }\n else {\n lineWidth = neckSize.width + (area.width - neckSize.width) *\n ((area.height - neckSize.height - bottom) / (area.height - neckSize.height));\n }\n bottomRadius = (area.width / 2) - (lineWidth / 2);\n endBottom = bottomRadius + lineWidth;\n if (top >= area.height - neckSize.height) {\n topRadius = bottomRadius = minRadius = (area.width / 2) - neckSize.width / 2;\n endTop = endBottom = endMin = (area.width / 2) + neckSize.width / 2;\n }\n else if (bottom > (area.height - neckSize.height)) {\n minRadius = bottomRadius = (area.width / 2) - lineWidth / 2;\n endMin = endBottom = minRadius + lineWidth;\n bottomY = area.height - neckSize.height;\n }\n var points = [];\n top += seriesTop;\n bottom += seriesTop;\n bottomY += seriesTop;\n var line1 = { x: emptySpaceAtLeft + offset + topRadius, y: top };\n var line2 = { x: emptySpaceAtLeft + offset + endTop, y: top };\n var line4 = { x: emptySpaceAtLeft + offset + endBottom, y: bottom };\n var line5 = { x: emptySpaceAtLeft + offset + bottomRadius, y: bottom };\n var line3 = { x: emptySpaceAtLeft + offset + endBottom, y: bottom };\n var line6 = { x: emptySpaceAtLeft + offset + bottomRadius, y: bottom };\n if (bottomY) {\n line3 = { x: emptySpaceAtLeft + offset + endMin, y: bottomY };\n line6 = { x: emptySpaceAtLeft + offset + minRadius, y: bottomY };\n }\n var polygon = [line1, line2, line3, line4, line5, line6];\n this.setLabelLocation(series, point, polygon);\n var direction = this.findPath(polygon);\n return direction;\n };\n /**\n * Renders a funnel segment\n * @private\n */\n FunnelSeries.prototype.renderPoint = function (point, series, chart, options) {\n var direction = this.getSegmentData(point, series, chart);\n point.midAngle = 0;\n options.d = direction;\n };\n /**\n * To get the module name of the funnel series.\n */\n FunnelSeries.prototype.getModuleName = function () {\n return 'FunnelSeries';\n };\n /**\n * To destroy the funnel series.\n * @return {void}\n * @private\n */\n FunnelSeries.prototype.destroy = function (accumulation) {\n /**\n * Destroys the funnel series\n */\n };\n return FunnelSeries;\n}(TriangularBase));\nexport { FunnelSeries };\n","/**\n * Defines the behavior of a pyramid series\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { TriangularBase } from './triangular-base';\n/**\n * PyramidSeries module used to render `Pyramid` Series.\n */\nvar PyramidSeries = /** @class */ (function (_super) {\n __extends(PyramidSeries, _super);\n function PyramidSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the path of a pyramid segment\n */\n PyramidSeries.prototype.getSegmentData = function (point, series, chart) {\n var area = series.triangleSize;\n //top of th series\n var seriesTop = chart.initialClipRect.y + (chart.initialClipRect.height - area.height) / 2;\n var points = [];\n //consider, if the point is exploded\n var offset = 0;\n var extraSpace = (chart.initialClipRect.width - series.triangleSize.width) / 2;\n var emptySpaceAtLeft = extraSpace + chart.initialClipRect.x;\n //top and bottom\n var top = point.yRatio;\n var bottom = point.yRatio + point.heightRatio;\n //width of the top and bottom edge\n var topRadius = 0.5 * (1 - point.yRatio);\n var bottomRadius = 0.5 * (1 - bottom);\n top += seriesTop / area.height;\n bottom += seriesTop / area.height;\n var line1 = {\n x: emptySpaceAtLeft + offset + topRadius * area.width,\n y: top * area.height\n };\n var line2 = {\n x: emptySpaceAtLeft + offset + (1 - topRadius) * area.width,\n y: top * area.height\n };\n var line3 = {\n x: emptySpaceAtLeft + offset + (1 - bottomRadius) * area.width,\n y: bottom * area.height\n };\n var line4 = {\n x: emptySpaceAtLeft + offset + bottomRadius * area.width,\n y: bottom * area.height\n };\n var polygon = [line1, line2, line3, line4];\n this.setLabelLocation(series, point, polygon);\n var direction = this.findPath(polygon);\n return direction;\n };\n /**\n * Initializes the size of the pyramid segments\n * @private\n */\n PyramidSeries.prototype.initializeSizeRatio = function (points, series) {\n if (series.pyramidMode === 'Linear') {\n _super.prototype.initializeSizeRatio.call(this, points, series, true);\n }\n else {\n this.calculateSurfaceSegments(series);\n }\n };\n /**\n * Defines the size of the pyramid segments, the surface of that will reflect the values\n */\n PyramidSeries.prototype.calculateSurfaceSegments = function (series) {\n var count = series.points.length;\n var sumOfValues = series.sumOfPoints;\n var yRatio = 0;\n var y = [];\n var height = [];\n var gapRatio = Math.min(0, Math.max(series.gapRatio, 1));\n var gapHeight = gapRatio / (count - 1);\n var preSum = this.getSurfaceHeight(0, sumOfValues);\n var currY = 0;\n for (var i = 0; i < count; i++) {\n if (series.points[i].visible) {\n y[i] = currY;\n height[i] = this.getSurfaceHeight(currY, Math.abs(series.points[i].y));\n currY += height[i] + gapHeight * preSum;\n }\n }\n var coef = 1 / (currY - gapHeight * preSum);\n for (var i = 0; i < count; i++) {\n if (series.points[i].visible) {\n series.points[i].yRatio = coef * y[i];\n series.points[i].heightRatio = coef * height[i];\n }\n }\n };\n /**\n * Finds the height of pyramid segment\n */\n PyramidSeries.prototype.getSurfaceHeight = function (y, surface) {\n var result = this.solveQuadraticEquation(1, 2 * y, -surface);\n return result;\n };\n /**\n * Solves quadratic equation\n */\n PyramidSeries.prototype.solveQuadraticEquation = function (a, b, c) {\n var root1;\n var root2;\n var d = b * b - 4 * a * c;\n if (d >= 0) {\n var sd = Math.sqrt(d);\n root1 = (-b - sd) / (2 * a);\n root2 = (-b + sd) / (2 * a);\n return Math.max(root1, root2);\n }\n return 0;\n };\n /**\n * Renders a pyramid segment\n */\n PyramidSeries.prototype.renderPoint = function (point, series, chart, options) {\n var direction = this.getSegmentData(point, series, chart);\n point.midAngle = 0;\n options.d = direction;\n };\n /**\n * To get the module name of the Pyramid series.\n */\n PyramidSeries.prototype.getModuleName = function () {\n return 'PyramidSeries';\n };\n /**\n * To destroy the pyramid series\n * @return {void}\n * @private\n */\n PyramidSeries.prototype.destroy = function (accumulation) {\n /**\n * Destroys the pyramid series\n */\n };\n return PyramidSeries;\n}(TriangularBase));\nexport { PyramidSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * AccumulationChart legend\n */\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { pointByIndex } from '../model/acc-base';\nimport { BaseLegend, LegendOptions } from '../../common/legend/legend';\nimport { Rect, measureText, textTrim } from '../../common/utils/helper';\n/**\n * AccumulationLegend module used to render `Legend` for Accumulation chart.\n */\nvar AccumulationLegend = /** @class */ (function (_super) {\n __extends(AccumulationLegend, _super);\n /**\n * Constructor for Accumulation Legend.\n * @param chart\n */\n function AccumulationLegend(chart) {\n var _this = _super.call(this, chart) || this;\n _this.library = _this;\n _this.titleRect = new Rect(0, chart.margin.top, 0, 0);\n return _this;\n }\n /**\n * Get the legend options.\n * @return {void}\n * @private\n */\n AccumulationLegend.prototype.getLegendOptions = function (chart, series) {\n this.legendCollections = [];\n for (var i = 0; i < 1; i++) {\n var seriesType = series[i].type;\n if (seriesType === 'Pie' || seriesType === 'Doughnut') {\n seriesType = (series[i].innerRadius !== '0' && series[i].innerRadius !== '0%') ?\n 'Doughnut' : 'Pie';\n }\n for (var _i = 0, _a = series[i].points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!isNullOrUndefined(point.x) && !isNullOrUndefined(point.y)) {\n this.legendCollections.push(new LegendOptions(point.x.toString(), point.color, series[i].legendShape, point.visible, seriesType, null, null, point.index, series[i].index));\n }\n }\n }\n };\n /**\n * To find legend bounds for accumulation chart.\n * @private\n */\n AccumulationLegend.prototype.getLegendBounds = function (availableSize, legendBounds, legend) {\n var extraWidth = 0;\n var extraHeight = 0;\n var padding = legend.padding;\n if (!this.isVertical) {\n extraHeight = !legend.height ? ((availableSize.height / 100) * 5) : 0;\n }\n else {\n extraWidth = !legend.width ? ((availableSize.width / 100) * 5) : 0;\n }\n legendBounds.width += extraWidth;\n legendBounds.height += extraHeight;\n var shapePadding = legend.shapePadding;\n var maximumWidth = 0;\n var shapeWidth = legend.shapeWidth;\n var rowWidth = 0;\n var rowCount = 0;\n var columnWidth = [];\n var columnHeight = 0;\n var legendWidth = 0;\n this.maxItemHeight = Math.max(measureText('MeasureText', legend.textStyle).height, legend.shapeHeight);\n var legendEventArgs;\n var render = false;\n for (var _i = 0, _a = this.legendCollections; _i < _a.length; _i++) {\n var legendOption = _a[_i];\n legendEventArgs = { fill: legendOption.fill, text: legendOption.text, shape: legendOption.shape,\n name: 'legendRender', cancel: false };\n this.chart.trigger('legendRender', legendEventArgs);\n legendOption.render = !legendEventArgs.cancel;\n legendOption.text = legendEventArgs.text;\n legendOption.fill = legendEventArgs.fill;\n legendOption.shape = legendEventArgs.shape;\n legendOption.textSize = measureText(legendOption.text, legend.textStyle);\n if (legendOption.render && legendOption.text !== '') {\n render = true;\n legendWidth = shapeWidth + shapePadding + legendOption.textSize.width + padding;\n if (this.isVertical) {\n ++rowCount;\n columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding;\n if ((rowCount * (this.maxItemHeight + padding)) + padding > legendBounds.height) {\n columnHeight = Math.max(columnHeight, (rowCount * (this.maxItemHeight + padding)) + padding);\n rowWidth = rowWidth + maximumWidth;\n columnWidth.push(maximumWidth);\n this.totalPages = Math.max(rowCount, this.totalPages || 1);\n maximumWidth = 0;\n rowCount = 1;\n }\n maximumWidth = Math.max(legendWidth, maximumWidth);\n }\n else {\n rowWidth = rowWidth + legendWidth;\n if (legendBounds.width < (padding + rowWidth)) {\n maximumWidth = Math.max(maximumWidth, (rowWidth + padding - legendWidth));\n if (rowCount === 0 && (legendWidth !== rowWidth)) {\n rowCount = 1;\n }\n rowWidth = legendWidth;\n rowCount++;\n columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding;\n }\n }\n }\n }\n if (this.isVertical) {\n rowWidth = rowWidth + maximumWidth;\n this.isPaging = legendBounds.width < (rowWidth + padding);\n columnHeight = Math.max(columnHeight, ((this.totalPages || 1) * (this.maxItemHeight + padding)) + padding);\n this.isPaging = this.isPaging && (this.totalPages > 1);\n if (columnWidth[columnWidth.length - 1] !== maximumWidth) {\n columnWidth.push(maximumWidth);\n }\n }\n else {\n this.isPaging = legendBounds.height < columnHeight;\n this.totalPages = this.totalRowCount = rowCount;\n columnHeight = Math.max(columnHeight, (this.maxItemHeight + padding) + padding);\n }\n this.maxColumns = 0; // initialization for max columns\n var width = this.isVertical ? this.getMaxColumn(columnWidth, legendBounds.width, padding, rowWidth + padding) :\n Math.max(rowWidth + padding, maximumWidth);\n if (render) {\n this.setBounds(width, columnHeight, legend, legendBounds);\n }\n else {\n this.setBounds(0, 0, legend, legendBounds);\n }\n };\n /**\n * To find maximum column size for legend\n */\n AccumulationLegend.prototype.getMaxColumn = function (columns, width, padding, rowWidth) {\n var maxPageColumn = padding;\n this.maxColumnWidth = Math.max.apply(null, columns);\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n maxPageColumn += this.maxColumnWidth;\n this.maxColumns++;\n if (maxPageColumn + padding > width) {\n maxPageColumn -= this.maxColumnWidth;\n this.maxColumns--;\n break;\n }\n }\n this.isPaging = (maxPageColumn < rowWidth) && (this.totalPages > 1);\n if (maxPageColumn === padding) {\n maxPageColumn = width;\n }\n this.maxColumns = Math.max(1, this.maxColumns);\n this.maxWidth = maxPageColumn;\n return maxPageColumn;\n };\n /**\n * To find available width from legend x position.\n */\n AccumulationLegend.prototype.getAvailWidth = function (tx, width, legendX) {\n if (this.isVertical) {\n width = this.maxWidth;\n }\n return width - ((this.legend.padding * 2) + this.legend.shapeWidth + this.legend.shapePadding);\n };\n /**\n * To find legend rendering locations from legend options.\n * @private\n */\n AccumulationLegend.prototype.getRenderPoint = function (legendOption, start, textPadding, prevLegend, rect, count, firstLegend) {\n var padding = this.legend.padding;\n if (this.isVertical) {\n if (count === firstLegend || (prevLegend.location.y + (this.maxItemHeight * 1.5) + (padding * 2) > rect.y + rect.height)) {\n legendOption.location.x = prevLegend.location.x + ((count === firstLegend) ? 0 : this.maxColumnWidth);\n legendOption.location.y = start.y;\n this.pageXCollections.push(legendOption.location.x - (this.legend.shapeWidth / 2) - padding);\n this.totalPages++;\n }\n else {\n legendOption.location.x = prevLegend.location.x;\n legendOption.location.y = prevLegend.location.y + this.maxItemHeight + padding;\n }\n }\n else {\n var previousBound = (prevLegend.location.x + textPadding + prevLegend.textSize.width);\n if ((previousBound + (legendOption.textSize.width + textPadding)) > (rect.x + rect.width + this.legend.shapeWidth / 2)) {\n legendOption.location.y = (count === firstLegend) ? prevLegend.location.y :\n prevLegend.location.y + this.maxItemHeight + padding;\n legendOption.location.x = start.x;\n }\n else {\n legendOption.location.y = prevLegend.location.y;\n legendOption.location.x = (count === firstLegend) ? prevLegend.location.x : previousBound;\n }\n this.totalPages = this.totalRowCount;\n }\n var availablewidth = this.getAvailWidth(legendOption.location.x, this.legendBounds.width, this.legendBounds.x);\n legendOption.text = textTrim(+availablewidth.toFixed(4), legendOption.text, this.legend.textStyle);\n };\n /**\n * finding the smart legend place according to positions.\n * @return {void}\n * @private\n */\n AccumulationLegend.prototype.getSmartLegendLocation = function (labelBound, legendBound, margin) {\n var space;\n switch (this.position) {\n case 'Left':\n space = ((labelBound.x - legendBound.width) - margin.left) / 2;\n legendBound.x = (labelBound.x - legendBound.width) < margin.left ? legendBound.x :\n (labelBound.x - legendBound.width) - space;\n break;\n case 'Right':\n space = ((this.chart.availableSize.width - margin.right) - (labelBound.x + labelBound.width + legendBound.width)) / 2;\n legendBound.x = (labelBound.x + labelBound.width + legendBound.width) > (this.chart.availableSize.width - margin.right) ?\n legendBound.x : (labelBound.x + labelBound.width + space);\n break;\n case 'Top':\n this.getTitleRect(this.chart);\n space = ((labelBound.y - legendBound.height) - (this.titleRect.y + this.titleRect.height)) / 2;\n legendBound.y = (labelBound.y - legendBound.height) < margin.top ? legendBound.y :\n (labelBound.y - legendBound.height) - space;\n break;\n case 'Bottom':\n space = ((this.chart.availableSize.height - margin.bottom) - (labelBound.y + labelBound.height + legendBound.height)) / 2;\n legendBound.y = labelBound.y + labelBound.height + legendBound.height > (this.chart.availableSize.height - margin.bottom) ?\n legendBound.y : (labelBound.y + labelBound.height) + space;\n break;\n }\n };\n /**\n * To get title rect.\n */\n AccumulationLegend.prototype.getTitleRect = function (accumulation) {\n if (!accumulation.title) {\n return null;\n }\n var titleSize = measureText(accumulation.title, accumulation.titleStyle);\n this.titleRect = new Rect(accumulation.availableSize.width / 2 - titleSize.width / 2, accumulation.margin.top, titleSize.width, titleSize.height);\n };\n /**\n * To get legend by index\n */\n AccumulationLegend.prototype.legendByIndex = function (index, legendCollections) {\n for (var _i = 0, legendCollections_1 = legendCollections; _i < legendCollections_1.length; _i++) {\n var legend = legendCollections_1[_i];\n if (legend.pointIndex === index) {\n return legend;\n }\n }\n return null;\n };\n /**\n * To show or hide the legend on clicking the legend.\n * @return {void}\n */\n AccumulationLegend.prototype.click = function (event) {\n var targetId = event.target.id;\n var legendItemsId = [this.legendID + '_text_', this.legendID + '_shape_',\n this.legendID + '_shape_marker_'];\n var selectedDataIndexes = [];\n if (this.chart.accumulationSelectionModule) {\n selectedDataIndexes = extend([], this.chart.accumulationSelectionModule.selectedDataIndexes, null, true);\n }\n for (var _i = 0, legendItemsId_1 = legendItemsId; _i < legendItemsId_1.length; _i++) {\n var id = legendItemsId_1[_i];\n if (targetId.indexOf(id) > -1) {\n var pointIndex = parseInt(targetId.split(id)[1], 10);\n var currentSeries = this.chart.visibleSeries[0];\n var point = pointByIndex(pointIndex, currentSeries.points);\n var legendOption = this.legendByIndex(pointIndex, this.legendCollections);\n if (this.chart.legendSettings.toggleVisibility) {\n point.visible = !point.visible;\n legendOption.visible = point.visible;\n this.chart.removeSvg();\n if (point.visible) {\n currentSeries.sumOfPoints += point.y;\n }\n else {\n currentSeries.sumOfPoints -= point.y;\n }\n this.chart.refreshPoints(currentSeries.points);\n this.chart.renderElements();\n }\n else if (this.chart.accumulationSelectionModule) {\n this.chart.accumulationSelectionModule.legendSelection(this.chart, 0, pointIndex);\n }\n }\n }\n if (targetId.indexOf(this.legendID + '_pageup') > -1) {\n this.changePage(event, true);\n }\n else if (targetId.indexOf(this.legendID + '_pagedown') > -1) {\n this.changePage(event, false);\n }\n };\n /**\n * Get module name\n */\n AccumulationLegend.prototype.getModuleName = function () {\n return 'AccumulationLegend';\n };\n /**\n * To destroy the Legend.\n * @return {void}\n * @private\n */\n AccumulationLegend.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return AccumulationLegend;\n}(BaseLegend));\nexport { AccumulationLegend };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * AccumulationChart DataLabel module file\n */\nimport { extend, createElement, getValue } from '@syncfusion/ej2-base';\nimport { ChartLocation, degreeToLocation, Rect, isOverlap, stringToNumber, getAngle, TextOption } from '../../common/utils/helper';\nimport { textTrim, subtractThickness, Thickness, getElement } from '../../common/utils/helper';\nimport { removeElement, measureText, RectOption, textElement, showTooltip } from '../../common/utils/helper';\nimport { PathOption, colorNameToHex, convertHexToColor, containsRect } from '../../common/utils/helper';\nimport { getSeriesFromIndex } from '../model/acc-base';\nimport { textRender } from '../../common/model/constants';\nimport { getFontStyle, createTemplate, measureElementRect, templateAnimate } from '../../common/utils/helper';\nimport { AccumulationBase } from './accumulation-base';\n/**\n * AccumulationDataLabel module used to render `dataLabel`.\n */\nvar AccumulationDataLabel = /** @class */ (function (_super) {\n __extends(AccumulationDataLabel, _super);\n function AccumulationDataLabel(accumulation) {\n var _this = _super.call(this, accumulation) || this;\n _this.id = accumulation.element.id + '_datalabel_Series_';\n if (accumulation.title) {\n var titleSize = measureText(accumulation.title, accumulation.titleStyle);\n _this.titleRect = new Rect(accumulation.availableSize.width / 2 - titleSize.width / 2, accumulation.margin.top, titleSize.width, titleSize.height);\n }\n return _this;\n }\n /**\n * Method to get datalabel text location.\n * @private\n */\n AccumulationDataLabel.prototype.getDataLabelPosition = function (point, dataLabel, textSize, points, parent, id) {\n var radius = this.isCircular() ? this.labelRadius : this.getLabelDistance(point, dataLabel);\n this.getLabelRegion(point, dataLabel.position, textSize, radius, this.marginValue);\n point.labelAngle = point.midAngle;\n point.labelPosition = dataLabel.position;\n if (this.accumulation.enableSmartLabels) {\n this.getSmartLabel(point, dataLabel, textSize, points, parent, id);\n }\n };\n /**\n * Method to get datalabel bound.\n */\n AccumulationDataLabel.prototype.getLabelRegion = function (point, position, textSize, labelRadius, margin, endAngle) {\n if (endAngle === void 0) { endAngle = 0; }\n var labelAngle = endAngle || point.midAngle;\n var space = 10;\n var location = degreeToLocation(labelAngle, labelRadius, this.isCircular() ? this.center :\n this.getLabelLocation(point, position));\n location.y = (position === 'Inside') ? (location.y - textSize.height / 2) : location.y;\n location.x = (position === 'Inside') ? (location.x - textSize.width / 2) : location.x;\n point.labelRegion = new Rect(location.x, location.y, textSize.width + (margin * 2), textSize.height + (margin * 2));\n if (position === 'Outside') {\n point.labelRegion.y -= point.labelRegion.height / 2;\n if (labelAngle >= 90 && labelAngle <= 270) {\n point.labelRegion.x -= (point.labelRegion.width + space);\n }\n else {\n point.labelRegion.x += space;\n }\n }\n };\n /**\n * Method to get datalabel smart position.\n */\n AccumulationDataLabel.prototype.getSmartLabel = function (point, dataLabel, textSize, points, parent, id) {\n var circular = this.isCircular();\n var labelRadius = circular ? this.radius : this.getLabelDistance(point, dataLabel);\n var connectorLength = circular ? (dataLabel.connectorStyle.length || '4%') :\n '0px';\n labelRadius += stringToNumber(connectorLength, labelRadius);\n var previousPoint = this.findPreviousPoint(points, point.index, point.labelPosition);\n if (dataLabel.position === 'Inside') {\n if (previousPoint && previousPoint.labelRegion && (isOverlap(point.labelRegion, previousPoint.labelRegion)\n || this.isOverlapping(point, points)) || !circular && !containsRect(point.region, point.labelRegion)) {\n point.labelPosition = 'Outside';\n if (!circular) {\n labelRadius = this.getLabelDistance(point, dataLabel);\n }\n this.getLabelRegion(point, point.labelPosition, textSize, labelRadius, this.marginValue);\n previousPoint = this.findPreviousPoint(points, point.index, point.labelPosition);\n if (previousPoint && (isOverlap(point.labelRegion, previousPoint.labelRegion) ||\n this.isConnectorLineOverlapping(point, previousPoint))) {\n this.setOuterSmartLabel(previousPoint, point, dataLabel.border.width, labelRadius, textSize, this.marginValue);\n }\n }\n }\n else {\n if (previousPoint && previousPoint.labelRegion && (isOverlap(point.labelRegion, previousPoint.labelRegion)\n || this.isOverlapping(point, points) || this.isConnectorLineOverlapping(point, previousPoint))) {\n this.setOuterSmartLabel(previousPoint, point, dataLabel.border.width, labelRadius, textSize, this.marginValue);\n }\n }\n if (this.isOverlapping(point, points) || (this.titleRect && point.labelRegion && isOverlap(point.labelRegion, this.titleRect))) {\n this.setPointVisibileFalse(point);\n }\n if (this.accumulation.accumulationLegendModule && point.labelVisible && point.labelRegion) {\n var rect = this.accumulation.accumulationLegendModule.legendBounds;\n var padding = this.accumulation.legendSettings.border.width / 2;\n this.textTrimming(point, new Rect(rect.x - padding, rect.y - padding, rect.width + (2 * padding), rect.height + (2 * padding)), dataLabel.font, this.accumulation.accumulationLegendModule.position);\n }\n if (point.labelVisible && point.labelRegion) {\n var position = this.isCircular() ? (point.labelRegion.x >= this.center.x) ? 'InsideRight' : 'InsideLeft' :\n 'InsideRight';\n this.textTrimming(point, this.areaRect, dataLabel.font, position);\n }\n if (point.labelVisible && point.labelRegion && ((point.labelRegion.y + point.labelRegion.height >\n this.areaRect.y + this.areaRect.height || point.labelRegion.y < this.areaRect.y) || (point.labelRegion.x < this.areaRect.x ||\n point.labelRegion.x + point.labelRegion.width > this.areaRect.x + this.areaRect.width))) {\n this.setPointVisibileFalse(point);\n }\n };\n /**\n * To find trimmed datalabel tooltip needed.\n * @return {void}\n * @private\n */\n AccumulationDataLabel.prototype.move = function (e, x, y, isTouch) {\n var _this = this;\n if (e.target.textContent.indexOf('...') > -1) {\n var targetId = e.target.id.split(this.id);\n if (targetId.length === 2) {\n var seriesIndex = parseInt(targetId[1].split('_text_')[0], 10);\n var pointIndex = parseInt(targetId[1].split('_text_')[1], 10);\n if (!isNaN(seriesIndex) && !isNaN(pointIndex)) {\n if (isTouch) {\n removeElement(this.accumulation.element.id + '_EJ2_Datalabel_Tooltip');\n }\n var point = getSeriesFromIndex(seriesIndex, (this.accumulation).visibleSeries).points[pointIndex];\n showTooltip(point.text || point.y.toString(), x, y, this.areaRect.width, this.accumulation.element.id + '_EJ2_Datalabel_Tooltip', getElement(this.accumulation.element.id + '_Secondary_Element'));\n }\n }\n }\n else {\n removeElement(this.accumulation.element.id + '_EJ2_Datalabel_Tooltip');\n }\n if (isTouch) {\n clearTimeout(this.clearTooltip);\n this.clearTooltip = setTimeout(function () { removeElement(_this.accumulation.element.id + '_EJ2_Datalabel_Tooltip'); }, 1000);\n }\n };\n /**\n * To find previous valid label point\n */\n AccumulationDataLabel.prototype.findPreviousPoint = function (points, index, position) {\n var point = points[0];\n for (var i = index - 1; i >= 0; i--) {\n point = points[i];\n if (point.visible && point.labelVisible && point.labelRegion && point.labelPosition === position) {\n return point;\n }\n }\n return null;\n };\n /**\n * To find current point datalabel is overlapping with other points\n */\n AccumulationDataLabel.prototype.isOverlapping = function (currentPoint, points) {\n for (var i = currentPoint.index - 1; i >= 0; i--) {\n if (points[i].visible && points[i].labelVisible && points[i].labelRegion && currentPoint.labelRegion &&\n currentPoint.labelVisible && isOverlap(currentPoint.labelRegion, points[i].labelRegion)) {\n return true;\n }\n }\n return false;\n };\n /**\n * To get text trimmed while exceeds the accumulation chart area.\n */\n AccumulationDataLabel.prototype.textTrimming = function (point, rect, font, position) {\n if (isOverlap(point.labelRegion, rect)) {\n var size = point.labelRegion.width;\n if (position === 'Right') {\n size = rect.x - point.labelRegion.x;\n }\n else if (position === 'Left') {\n size = point.labelRegion.x - (rect.x + rect.width);\n if (size < 0) {\n size += point.labelRegion.width;\n point.labelRegion.x = rect.x + rect.width;\n }\n }\n else if (position === 'InsideRight') {\n size = (rect.x + rect.width) - point.labelRegion.x;\n }\n else if (position === 'InsideLeft') {\n size = (point.labelRegion.x + point.labelRegion.width) - rect.x;\n if (size < point.labelRegion.width) {\n point.labelRegion.x = rect.x;\n }\n }\n else {\n this.setPointVisibileFalse(point);\n }\n if (point.labelVisible && point.labelRegion) {\n if (size < point.labelRegion.width) {\n point.label = textTrim(size - (this.marginValue * 2), point.label, font);\n point.labelRegion.width = size;\n }\n if (point.label.length === 3 && point.label.indexOf('...') > -1) {\n this.setPointVisibileFalse(point);\n }\n }\n }\n };\n /**\n * To set point label visible and region to disable.\n */\n AccumulationDataLabel.prototype.setPointVisibileFalse = function (point) {\n point.labelVisible = false;\n point.labelRegion = null;\n };\n /**\n * To set datalabel angle position for outside labels\n */\n AccumulationDataLabel.prototype.setOuterSmartLabel = function (previousPoint, point, border, labelRadius, textsize, margin) {\n if (!this.isCircular()) {\n this.setSmartLabelForSegments(point, previousPoint, labelRadius, textsize, margin);\n }\n else {\n var labelAngle = this.getOverlappedAngle(previousPoint.labelRegion, point.labelRegion, point.midAngle, border * 2);\n this.getLabelRegion(point, 'Outside', textsize, labelRadius, margin, labelAngle);\n if (labelAngle > point.endAngle) {\n this.setPointVisibileFalse(point);\n }\n point.labelAngle = labelAngle;\n while (point.labelVisible && (isOverlap(previousPoint.labelRegion, point.labelRegion) || labelAngle <= previousPoint.labelAngle\n || this.isConnectorLineOverlapping(point, previousPoint))) {\n if (labelAngle > point.endAngle) {\n this.setPointVisibileFalse(point);\n break;\n }\n point.labelAngle = labelAngle;\n this.getLabelRegion(point, 'Outside', textsize, labelRadius, margin, labelAngle);\n labelAngle += 0.1;\n }\n }\n };\n /**\n * Sets smart label positions for funnel and pyramid series\n */\n AccumulationDataLabel.prototype.setSmartLabelForSegments = function (point, prevPoint, distance, textSize, margin) {\n var textRegion = point.labelRegion;\n //let overlapWidth: number = prevPoint.labelRegion.x + prevPoint.labelRegion.width - textRegion.x;\n var overlapHeight = this.accumulation.type === 'Funnel' ?\n prevPoint.labelRegion.y - (textRegion.y + textRegion.height) :\n point.labelRegion.y - (prevPoint.labelRegion.y + prevPoint.labelRegion.height);\n if (overlapHeight < 0) {\n point.labelRegion.y += this.accumulation.type === 'Funnel' ? overlapHeight : -overlapHeight;\n }\n };\n /**\n * To find connector line overlapping.\n */\n AccumulationDataLabel.prototype.isConnectorLineOverlapping = function (point, previous) {\n var start = this.getLabelLocation(point);\n var end = new ChartLocation(0, 0);\n this.getEdgeOfLabel(point.labelRegion, point.labelAngle, end);\n var previousstart = this.getLabelLocation(previous);\n var previousend = new ChartLocation(0, 0);\n this.getEdgeOfLabel(previous.labelRegion, previous.labelAngle, previousend);\n return this.isLineRectangleIntersect(start, end, point.labelRegion) ||\n this.isLineRectangleIntersect(start, end, previous.labelRegion) ||\n this.isLineRectangleIntersect(previousstart, previousend, point.labelRegion);\n };\n /**\n * To find two rectangle intersect\n */\n AccumulationDataLabel.prototype.isLineRectangleIntersect = function (line1, line2, rect) {\n var rectPoints = [\n new ChartLocation(Math.round(rect.x), Math.round(rect.y)),\n new ChartLocation(Math.round((rect.x + rect.width)), Math.round(rect.y)),\n new ChartLocation(Math.round((rect.x + rect.width)), Math.round((rect.y + rect.height))),\n new ChartLocation(Math.round(rect.x), Math.round((rect.y + rect.height)))\n ];\n line1.x = Math.round(line1.x);\n line1.y = Math.round(line1.y);\n line2.x = Math.round(line2.x);\n line2.y = Math.round(line2.y);\n for (var i = 0; i < rectPoints.length; i++) {\n if (this.isLinesIntersect(line1, line2, rectPoints[i], rectPoints[(i + 1) % rectPoints.length])) {\n return true;\n }\n }\n return false;\n };\n /**\n * To find two line intersect\n */\n AccumulationDataLabel.prototype.isLinesIntersect = function (point1, point2, point11, point12) {\n var a1 = point2.y - point1.y;\n var b1 = point1.x - point2.x;\n var c1 = a1 * point1.x + b1 * point1.y;\n var a2 = point12.y - point11.y;\n var b2 = point11.x - point12.x;\n var c2 = a2 * point11.x + b2 * point11.y;\n var delta = a1 * b2 - a2 * b1;\n if (delta !== 0) {\n var x = (b2 * c1 - b1 * c2) / delta;\n var y = (a1 * c2 - a2 * c1) / delta;\n var lies = Math.min(point1.x, point2.x) <= x && x <= Math.max(point1.x, point2.x);\n lies = lies && Math.min(point1.y, point2.y) <= y && y <= Math.max(point1.y, point2.y);\n lies = lies && Math.min(point11.x, point12.x) <= x && x <= Math.max(point11.x, point12.x);\n lies = lies && Math.min(point11.y, point12.y) <= y && y <= Math.max(point11.y, point12.y);\n return lies;\n }\n return false;\n };\n /**\n * To get two rectangle overlapping angles.\n */\n AccumulationDataLabel.prototype.getOverlappedAngle = function (first, second, angle, padding) {\n var x = first.x;\n if (angle >= 90 && angle <= 270) {\n second.y = first.y - (padding + second.height / 2);\n x = first.x + first.width;\n }\n else {\n second.y = first.y + first.height + padding;\n }\n return getAngle(this.center, new ChartLocation(x, second.y));\n };\n /**\n * To get connector line path\n */\n AccumulationDataLabel.prototype.getConnectorPath = function (label, point, dataLabel, end) {\n if (end === void 0) { end = 0; }\n var connector = dataLabel.connectorStyle;\n var labelRadius = this.isCircular() ? this.labelRadius : this.getLabelDistance(point, dataLabel);\n var start = this.getConnectorStartPoint(point, connector);\n var labelAngle = end || point.midAngle;\n var middle = new ChartLocation(0, 0);\n var endPoint = this.getEdgeOfLabel(label, labelAngle, middle, connector.width);\n if (connector.type === 'Curve') {\n if (this.isCircular()) {\n var r = labelRadius - this.radius;\n middle = degreeToLocation(labelAngle, labelRadius - (r / 2), this.center);\n return 'M ' + start.x + ' ' + start.y + ' Q' + middle.x + ',' + middle.y + ' ' + endPoint.x + ',' + endPoint.y;\n }\n else {\n return this.getPolyLinePath(start, endPoint);\n }\n }\n else {\n return 'M ' + start.x + ' ' + start.y + ' L ' + middle.x + ' ' + middle.y + ' L ' + endPoint.x + ' ' + endPoint.y;\n }\n };\n /**\n * Finds the curved path for funnel/pyramid data label connectors\n */\n AccumulationDataLabel.prototype.getPolyLinePath = function (start, end) {\n var controlPoints = [start, end];\n if (start.y === end.y) {\n return 'M ' + start.x + ' ' + start.y + ' L ' + end.x + ' ' + end.y;\n }\n var path = 'M';\n for (var i = 0; i <= 16; i++) {\n var t = i / 16;\n var points = this.getBezierPoint(t, controlPoints, 0, 2);\n path += points.x + ',' + points.y;\n if (i !== 16) {\n path += ' L';\n }\n }\n return path;\n };\n /**\n * Finds the bezier point for funnel/pyramid data label connectors\n */\n AccumulationDataLabel.prototype.getBezierPoint = function (t, controlPoints, index, count) {\n if (count === 1) {\n return controlPoints[index];\n }\n var p0 = this.getBezierPoint(t, controlPoints, index, count - 1);\n var p1 = this.getBezierPoint(t, controlPoints, index + 1, count - 1);\n var x = (p0.x) ? p0.x : p0.x;\n var y = (p0.y) ? p0.y : p0.y;\n var x1 = (p1.x) ? p1.x : p1.x;\n var y1 = (p1.y) ? p1.y : p1.y;\n var x2 = (1 - t) * x + t * x1;\n var y2 = (1 - t) * y + t * y1;\n if (p0.x) {\n return { x: x2, y: y2 };\n }\n else {\n return { x: x2, y: y2 };\n }\n };\n /**\n * To get label edges based on the center and label rect position.\n */\n AccumulationDataLabel.prototype.getEdgeOfLabel = function (labelshape, angle, middle, border) {\n if (border === void 0) { border = 1; }\n var edge = new ChartLocation(labelshape.x, labelshape.y);\n if (angle >= 90 && angle <= 270) {\n edge.x += labelshape.width + border / 2;\n edge.y += labelshape.height / 2;\n middle.x = edge.x + 10;\n middle.y = edge.y;\n }\n else {\n edge.x -= border / 2;\n edge.y += labelshape.height / 2;\n middle.x = edge.x - 10;\n middle.y = edge.y;\n }\n return edge;\n };\n /**\n * Finds the distance between the label position and the edge/center of the funnel/pyramid\n */\n AccumulationDataLabel.prototype.getLabelDistance = function (point, dataLabel) {\n if (point.labelPosition && dataLabel.position !== point.labelPosition || dataLabel.connectorStyle.length) {\n var length_1 = stringToNumber(dataLabel.connectorStyle.length || '70px', this.accumulation.initialClipRect.width);\n if (length_1 < this.accumulation.initialClipRect.width) {\n return length_1;\n }\n }\n var position = point.labelPosition || dataLabel.position;\n var series = this.accumulation.visibleSeries[0];\n var extraSpace = (this.accumulation.initialClipRect.width - series.triangleSize.width) / 2;\n var labelLocation;\n switch (position) {\n case 'Inside':\n return 0;\n case 'Outside':\n labelLocation = point.symbolLocation.x + point.labelOffset.x;\n return this.accumulation.initialClipRect.width - labelLocation - extraSpace;\n }\n };\n /**\n * Finds the label position / beginning of the connector(ouside funnel labels)\n */\n AccumulationDataLabel.prototype.getLabelLocation = function (point, position) {\n if (position === void 0) { position = 'Outside'; }\n if (this.accumulation.type !== 'Pie') {\n position = point.labelPosition || position;\n var location_1 = {\n x: point.symbolLocation.x,\n y: point.symbolLocation.y - point.labelOffset.y\n };\n switch (position) {\n case 'Inside':\n location_1.y = point.region.y + point.region.height / 2;\n break;\n case 'Outside':\n location_1.x += point.labelOffset.x;\n }\n return location_1;\n }\n else {\n return degreeToLocation(point.midAngle, this.radius, this.center);\n }\n };\n /**\n * Finds the beginning of connector line\n */\n AccumulationDataLabel.prototype.getConnectorStartPoint = function (point, connector) {\n return this.isCircular() ? degreeToLocation(point.midAngle, this.radius - connector.width, this.center) :\n this.getLabelLocation(point);\n };\n /**\n * To find area rect based on margin, available size.\n * @private\n */\n AccumulationDataLabel.prototype.findAreaRect = function () {\n this.areaRect = new Rect(0, 0, this.accumulation.availableSize.width, this.accumulation.availableSize.height);\n var margin = this.accumulation.margin;\n subtractThickness(this.areaRect, new Thickness(margin.left, margin.right, margin.top, margin.bottom));\n };\n /**\n * To render the data labels from series points.\n */\n AccumulationDataLabel.prototype.renderDataLabel = function (point, dataLabel, parent, points, series, templateElement) {\n var id = this.accumulation.element.id + '_datalabel_Series_' + series + '_';\n var datalabelGroup = this.accumulation.renderer.createGroup({ id: id + 'g_' + point.index });\n point.label = point.originalText || point.y.toString();\n var border = { width: dataLabel.border.width, color: dataLabel.border.color };\n var 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) :\n measureText(point.label, dataLabel.font);\n textSize.height += 4; // 4 for calculation with padding for smart label shape\n textSize.width += 4;\n this.getDataLabelPosition(point, dataLabel, textSize, points, datalabelGroup, id);\n if (point.labelVisible) {\n this.correctLabelRegion(point.labelRegion, textSize);\n if (isTemplate) {\n this.setTemplateStyle(childElement, point, templateElement, dataLabel.font.color, argsData.color);\n }\n else {\n datalabelGroup.appendChild(this.accumulation.renderer.drawRectangle(new RectOption(id + 'shape_' + point.index, argsData.color, argsData.border, 1, point.labelRegion, dataLabel.rx, dataLabel.ry)));\n textElement(new TextOption(id + 'text_' + point.index, point.labelRegion.x + this.marginValue, point.labelRegion.y + (textSize.height * 3 / 4) + this.marginValue, 'start', point.label, '', 'auto'), argsData.font, argsData.font.color || this.getSaturatedColor(point, argsData.color), datalabelGroup);\n }\n if (this.accumulation.accumulationLegendModule && (dataLabel.position === 'Outside' || this.accumulation.enableSmartLabels)) {\n this.accumulation.visibleSeries[0].findMaxBounds(this.accumulation.visibleSeries[0].labelBound, point.labelRegion);\n }\n if (point.labelPosition === 'Outside') {\n var path = this.getConnectorPath(extend({}, point.labelRegion, null, true), point, dataLabel, point.labelAngle);\n var pathElement = this.accumulation.renderer.drawPath(new PathOption(id + 'connector_' + point.index, 'transparent', dataLabel.connectorStyle.width, dataLabel.connectorStyle.color || point.color, 1, dataLabel.connectorStyle.dashArray, path));\n datalabelGroup.appendChild(pathElement);\n }\n parent.appendChild(datalabelGroup);\n }\n };\n /**\n * To find the template element size\n * @param element\n * @param point\n * @param argsData\n */\n AccumulationDataLabel.prototype.getTemplateSize = function (element, point, argsData) {\n var clientRect;\n element = createTemplate(element, point.index, argsData.template, this.accumulation, point, this.accumulation.visibleSeries[0]);\n clientRect = measureElementRect(element);\n return { width: clientRect.width, height: clientRect.height };\n };\n /**\n * To set the template element style\n * @param childElement\n * @param point\n * @param parent\n * @param labelColor\n * @param fill\n */\n AccumulationDataLabel.prototype.setTemplateStyle = function (childElement, point, parent, labelColor, fill) {\n childElement.style.left = (point.labelRegion.x) + 'px';\n childElement.style.top = (point.labelRegion.y) + 'px';\n childElement.style.color = labelColor ||\n this.getSaturatedColor(point, fill);\n if (childElement.childElementCount) {\n parent.appendChild(childElement);\n this.doTemplateAnimation(this.accumulation, childElement);\n }\n };\n /**\n * To find saturated color for datalabel\n */\n AccumulationDataLabel.prototype.getSaturatedColor = function (point, color) {\n var saturatedColor;\n if (this.marginValue >= 1) {\n saturatedColor = color === 'transparent' ? this.getLabelBackground(point) : color;\n }\n else {\n saturatedColor = this.getLabelBackground(point);\n }\n saturatedColor = (saturatedColor === 'transparent') ? window.getComputedStyle(document.body, null).backgroundColor : saturatedColor;\n var rgbValue = convertHexToColor(colorNameToHex(saturatedColor));\n var contrast = Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000);\n return contrast >= 128 ? 'black' : 'white';\n };\n /**\n * Animates the data label template.\n * @return {void}.\n * @private\n */\n AccumulationDataLabel.prototype.doTemplateAnimation = function (accumulation, element) {\n var series = accumulation.visibleSeries[0];\n var delay = series.animation.delay + series.animation.duration;\n if (series.animation.enable && accumulation.animateSeries) {\n element.style.visibility = 'hidden';\n templateAnimate(element, delay, 200, 'ZoomIn');\n }\n };\n /**\n * To find background color for the datalabel\n */\n AccumulationDataLabel.prototype.getLabelBackground = function (point) {\n return point.labelPosition === 'Outside' ?\n this.accumulation.background || this.accumulation.themeStyle.background : point.color;\n };\n /**\n * To correct the padding between datalabel regions.\n */\n AccumulationDataLabel.prototype.correctLabelRegion = function (labelRegion, textSize, padding) {\n if (padding === void 0) { padding = 4; }\n labelRegion.height -= padding;\n labelRegion.width -= padding;\n labelRegion.x += padding / 2;\n labelRegion.y += padding / 2;\n textSize.height -= padding;\n textSize.width -= padding;\n };\n /**\n * To get the dataLabel module name\n */\n AccumulationDataLabel.prototype.getModuleName = function () {\n return 'AccumulationDataLabel';\n };\n /**\n * To destroy the data label.\n * @return {void}\n * @private\n */\n AccumulationDataLabel.prototype.destroy = function (accumulation) {\n /**\n * Destroy method performed here\n */\n };\n return AccumulationDataLabel;\n}(AccumulationBase));\nexport { AccumulationDataLabel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * AccumulationChart Tooltip file\n */\nimport { Browser } 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 * @private\n */\nvar AccumulationSelection = /** @class */ (function (_super) {\n __extends(AccumulationSelection, _super);\n function AccumulationSelection(accumulation) {\n var _this = _super.call(this, accumulation) || this;\n _this.renderer = accumulation.renderer;\n return _this;\n }\n /**\n * To initialize the private variables\n */\n AccumulationSelection.prototype.initPrivateVariables = function (accumulation) {\n this.styleId = accumulation.element.id + '_ej2_chart_selection';\n this.unselected = accumulation.element.id + '_ej2_deselected';\n this.selectedDataIndexes = [];\n this.rectPoints = null;\n };\n /**\n * Invoke selection for rendered chart.\n * @param {AccumulationChart} chart - Define the chart to invoke the selection.\n * @return {void}\n */\n AccumulationSelection.prototype.invokeSelection = function (accumulation) {\n this.initPrivateVariables(accumulation);\n this.series = extend({}, accumulation.visibleSeries, null, true);\n this.seriesStyles();\n this.selectDataIndex(this.concatIndexes(accumulation.selectedDataIndexes, this.selectedDataIndexes), accumulation);\n };\n /**\n * To get series selection style by series.\n */\n AccumulationSelection.prototype.generateStyle = function (series) {\n return (series.selectionStyle || this.styleId + '_series_' + series.index);\n };\n /**\n * To get elements by index, series\n */\n AccumulationSelection.prototype.findElements = function (accumulation, series, index) {\n return [this.getElementByIndex(index)];\n };\n /**\n * To get series point element by index\n */\n AccumulationSelection.prototype.getElementByIndex = function (index) {\n var elementId = this.control.element.id + '_Series_' + index.series + '_Point_' + index.point;\n return document.getElementById(elementId);\n };\n /**\n * To calculate selected elements on mouse click or touch\n * @private\n */\n AccumulationSelection.prototype.calculateSelectedElements = function (accumulation, event) {\n if (event.target.id.indexOf(accumulation.element.id + '_') === -1) {\n return;\n }\n if (event.target.id.indexOf('_Series_') > -1 || event.target.id.indexOf('_datalabel_') > -1) {\n this.performSelection(indexFinder(event.target.id), accumulation, event.target);\n }\n };\n /**\n * To perform the selection process based on index and element.\n */\n AccumulationSelection.prototype.performSelection = function (index, accumulation, element) {\n element = element.id.indexOf('datalabel') > -1 ?\n accumulation.getSeriesElement().childNodes[index.series].childNodes[index.point]\n : element;\n switch (accumulation.selectionMode) {\n case 'Point':\n if (!isNaN(index.point)) {\n this.selection(accumulation, index, [element]);\n this.blurEffect(accumulation.element.id, accumulation.visibleSeries);\n }\n break;\n }\n };\n /**\n * To select the element by index. Adding or removing selection style class name.\n */\n AccumulationSelection.prototype.selection = function (accumulation, index, selectedElements) {\n if (!accumulation.isMultiSelect) {\n this.removeMultiSelectEelments(accumulation, this.selectedDataIndexes, index, accumulation.series);\n }\n var className = selectedElements[0] && (selectedElements[0].getAttribute('class') || '');\n if (selectedElements[0] && className.indexOf(this.getSelectionClass(selectedElements[0].id)) > -1) {\n this.removeStyles(selectedElements, index);\n this.addOrRemoveIndex(this.selectedDataIndexes, index);\n }\n else {\n this.applyStyles(selectedElements, index);\n this.addOrRemoveIndex(this.selectedDataIndexes, index, true);\n }\n };\n /**\n * To redraw the selection process on accumulation chart refresh.\n * @private\n */\n AccumulationSelection.prototype.redrawSelection = function (accumulation, oldMode) {\n var selectedDataIndexes = extend([], this.selectedDataIndexes, null, true);\n this.removeSelectedElements(accumulation, this.selectedDataIndexes);\n this.blurEffect(accumulation.element.id, accumulation.visibleSeries);\n this.selectDataIndex(selectedDataIndexes, accumulation);\n };\n /**\n * To remove the selected elements style classes by indexes.\n */\n AccumulationSelection.prototype.removeSelectedElements = function (accumulation, indexes) {\n var seriesgroup = accumulation.getSeriesElement();\n for (var _i = 0, indexes_1 = indexes; _i < indexes_1.length; _i++) {\n var index = indexes_1[_i];\n this.removeStyles([this.getElementByIndex(index)], index);\n }\n };\n /**\n * To perform the selection for legend elements.\n * @private\n */\n AccumulationSelection.prototype.legendSelection = function (accumulation, series, pointIndex) {\n var element = accumulation.getSeriesElement().childNodes[series].childNodes[pointIndex];\n var seriesStyle = this.generateStyle(accumulation.visibleSeries[series]);\n var seriesElements = accumulation.getSeriesElement().childNodes[series].childNodes[pointIndex];\n this.selection(accumulation, new Index(series, pointIndex), [seriesElements]);\n this.blurEffect(accumulation.element.id, accumulation.visibleSeries);\n };\n /**\n * To select the element by selected data indexes.\n */\n AccumulationSelection.prototype.selectDataIndex = function (indexes, accumulation) {\n var element;\n for (var _i = 0, indexes_2 = indexes; _i < indexes_2.length; _i++) {\n var index = indexes_2[_i];\n element = this.getElementByIndex(index);\n if (element) {\n this.performSelection(index, accumulation, element);\n }\n }\n };\n /**\n * To remove the selection styles for multi selection process.\n */\n AccumulationSelection.prototype.removeMultiSelectEelments = function (accumulation, index, currentIndex, seriesCollection) {\n var series;\n for (var i = 0; i < index.length; i++) {\n series = seriesCollection[index[i].series];\n if (!this.checkEquals(index[i], currentIndex)) {\n this.removeStyles(this.findElements(accumulation, series, index[i]), index[i]);\n index.splice(i, 1);\n i--;\n }\n }\n };\n /**\n * To apply the opacity effect for accumulation chart series elements.\n */\n AccumulationSelection.prototype.blurEffect = function (pieId, visibleSeries) {\n var visibility = this.checkPointVisibility(this.selectedDataIndexes); // legend click scenario\n for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n var series = visibleSeries_1[_i];\n if (series.visible) {\n this.checkSelectionElements(document.getElementById(pieId + '_SeriesCollection'), this.generateStyle(series), visibility);\n }\n }\n };\n /**\n * To check selection elements by style class name.\n */\n AccumulationSelection.prototype.checkSelectionElements = function (element, className, visibility) {\n var children = (element.childNodes[0].childNodes);\n var legendShape;\n var elementClass;\n var parentClass;\n for (var i = 0; i < children.length; i++) {\n elementClass = children[i].getAttribute('class') || '';\n parentClass = children[i].parentNode.getAttribute('class') || '';\n if (elementClass.indexOf(className) === -1 && parentClass.indexOf(className) === -1 && visibility) {\n this.addSvgClass(children[i], this.unselected);\n }\n else {\n this.removeSvgClass(children[i], this.unselected);\n }\n if (this.control.accumulationLegendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + i);\n if (legendShape) {\n if (elementClass.indexOf(className) === -1 && parentClass.indexOf(className) === -1 && visibility) {\n this.addSvgClass(legendShape, this.unselected);\n }\n else {\n this.removeSvgClass(legendShape, this.unselected);\n }\n }\n }\n }\n };\n /**\n * To apply selection style for elements.\n */\n AccumulationSelection.prototype.applyStyles = function (elements, index) {\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n var legendShape = void 0;\n if (element) {\n if (this.control.accumulationLegendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + index.point);\n this.removeSvgClass(legendShape, this.unselected);\n this.addSvgClass(legendShape, this.getSelectionClass(legendShape.id));\n }\n this.removeSvgClass(element.parentNode, this.unselected);\n this.removeSvgClass(element, this.unselected);\n this.addSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n /**\n * To get selection style class name by id\n */\n AccumulationSelection.prototype.getSelectionClass = function (id) {\n return this.generateStyle(this.control.series[indexFinder(id).series]);\n };\n /**\n * To remove selection style for elements.\n */\n AccumulationSelection.prototype.removeStyles = function (elements, index) {\n var legendShape;\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n if (element) {\n if (this.control.accumulationLegendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + index.point);\n this.removeSvgClass(legendShape, this.getSelectionClass(legendShape.id));\n }\n this.removeSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n /**\n * To apply or remove selected elements index.\n */\n AccumulationSelection.prototype.addOrRemoveIndex = function (indexes, index, add) {\n for (var i = 0; i < indexes.length; i++) {\n if (this.checkEquals(indexes[i], index)) {\n indexes.splice(i, 1);\n i--;\n }\n }\n if (add) {\n indexes.push(index);\n }\n };\n /**\n * To check two index, point and series are equal\n */\n AccumulationSelection.prototype.checkEquals = function (first, second) {\n return ((first.point === second.point) && (first.series === second.series));\n };\n /**\n * To check selected points are visibility\n */\n AccumulationSelection.prototype.checkPointVisibility = function (selectedDataIndexes) {\n var visible = false;\n for (var _i = 0, selectedDataIndexes_1 = selectedDataIndexes; _i < selectedDataIndexes_1.length; _i++) {\n var data = selectedDataIndexes_1[_i];\n if (pointByIndex(data.point, this.control.visibleSeries[0].points).visible) {\n visible = true;\n break;\n }\n }\n return visible;\n };\n /**\n * Get module name.\n */\n AccumulationSelection.prototype.getModuleName = function () {\n return 'AccumulationSelection';\n };\n /**\n * To destroy the selection.\n * @return {void}\n * @private\n */\n AccumulationSelection.prototype.destroy = function (accumulation) {\n // Destroy method performed here\n };\n return AccumulationSelection;\n}(BaseSelection));\nexport { AccumulationSelection };\n","/**\n * AccumulationChart annotation properties\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { AnnotationBase } from '../../common/annotation/annotation';\nimport { appendElement } from '../../common/utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * `AccumulationAnnotation` module handles the annotation for accumulation chart.\n */\nvar AccumulationAnnotation = /** @class */ (function (_super) {\n __extends(AccumulationAnnotation, _super);\n /**\n * Constructor for accumulation chart annotation.\n * @private.\n */\n function AccumulationAnnotation(control) {\n var _this = _super.call(this, control) || this;\n _this.pie = control;\n return _this;\n }\n /**\n * Method to render the annotation for accumulation chart\n * @param element\n */\n AccumulationAnnotation.prototype.renderAnnotations = function (element) {\n var _this = this;\n this.annotations = this.pie.annotations;\n this.parentElement = createElement('div', {\n id: this.pie.element.id + '_Annotation_Collections'\n });\n this.annotations.map(function (annotation, index) {\n _this.processAnnotation(annotation, index, _this.parentElement);\n });\n appendElement(this.parentElement, element);\n };\n /**\n * Get module name.\n */\n AccumulationAnnotation.prototype.getModuleName = function () {\n // Returns te module name\n return 'Annotation';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n AccumulationAnnotation.prototype.destroy = function (control) {\n // Destroy method performed here\n };\n return AccumulationAnnotation;\n}(AnnotationBase));\nexport { AccumulationAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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 { 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.xValue = +point.x;\n point.yValue = +point.y;\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 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)\n });\n while (nextInterval < axis.visibleRange.max) {\n axis.visibleLabels.push(new VisibleLabels(this.dateFormats(this.rangeNavigator.format(new Date(nextInterval)), axis, axis.visibleLabels.length), nextInterval, this.rangeNavigator.labelStyle));\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 } 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 var element = document.getElementById('chartmeasuretext');\n if (element) {\n element.remove();\n }\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';\nvar CLS_ROOT = 'e-hscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_HSCROLLBAR = 'e-hscroll-bar';\nvar CLS_HSCROLLCON = 'e-hscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVRIGHTARROW = 'e-nav-right-arrow';\nvar CLS_NAVLEFTARROW = 'e-nav-left-arrow';\nvar CLS_HSCROLLNAV = 'e-scroll-nav';\nvar CLS_HSCROLLNAVRIGHT = 'e-scroll-right-nav';\nvar CLS_HSCROLLNAVLEFT = 'e-scroll-left-nav';\nvar CLS_DEVICE = 'e-scroll-device';\n/**\n * HScroll module is introduces horizontal scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs horizontal scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n *
\n * \n * ```\n */\nvar HScroll = /** @class */ (function (_super) {\n __extends(HScroll, _super);\n /**\n * Initializes a new instance of the HScroll class.\n * @param options - Specifies HScroll model properties as options.\n * @param element - Specifies the element for which horizontal scrolling applies.\n */\n function HScroll(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n * @private\n */\n HScroll.prototype.preRender = function () {\n this.browser = Browser.info.name;\n this.browserCheck = this.browser === 'mozilla';\n this.isDevice = Browser.isDevice;\n var element = this.element;\n this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n this.initialize();\n if (element.id === '') {\n element.id = getUniqueID('hscroll');\n this.uniqueId = true;\n }\n element.style.display = 'block';\n if (this.enableRtl) {\n element.classList.add(CLS_RTL);\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n HScroll.prototype.render = function () {\n this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this) });\n if (!this.isDevice) {\n this.createNavIcon(this.element);\n EventHandler.add(this.scrollEle, 'scroll', this.scrollHandler, this);\n }\n else {\n this.element.classList.add(CLS_DEVICE);\n }\n };\n HScroll.prototype.initialize = function () {\n var scrollEle = 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 var nav = selectAll('.e-' + ele.id + '_nav.' + CLS_HSCROLLNAV, ele);\n for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n var elem = _a[_i];\n ele.appendChild(elem);\n }\n if (this.uniqueId) {\n this.element.removeAttribute('id');\n }\n detach(this.scrollEle);\n if (nav.length > 0) {\n detach(nav[0]);\n detach(nav[1]);\n }\n EventHandler.remove(this.scrollEle, 'scroll', this.scrollHandler);\n this.touchModule.destroy();\n this.touchModule = null;\n _super.prototype.destroy.call(this);\n };\n /**\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.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);\n };\n this.keyTimer = window.setTimeout(function () {\n timeoutFun_1();\n }, 100);\n }\n };\n HScroll.prototype.onKeyUp = function (e) {\n if (e.key !== 'Enter') {\n return;\n }\n if (this.keyTimeout) {\n this.keyTimeout = false;\n }\n else {\n e.target.click();\n }\n clearTimeout(this.keyTimer);\n };\n HScroll.prototype.eventBinding = function (ele) {\n var _this = this;\n ele.forEach(function (el) {\n new Touch(el, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n el.addEventListener('keydown', _this.onKeyPress.bind(_this));\n el.addEventListener('keyup', _this.onKeyUp.bind(_this));\n el.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n el.addEventListener('touchend', _this.repeatScroll.bind(_this));\n el.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n EventHandler.add(el, 'click', _this.clickEventHandler, _this);\n });\n };\n HScroll.prototype.repeatScroll = function () {\n clearInterval(this.timeout);\n };\n HScroll.prototype.tabHoldHandler = function (e) {\n var _this = this;\n var trgt = e.originalEvent.target;\n trgt = this.contains(trgt, CLS_HSCROLLNAV) ? trgt.firstElementChild : trgt;\n var scrollDis = 10;\n var timeoutFun = function () {\n _this.eleScrolling(scrollDis, trgt);\n };\n this.timeout = window.setInterval(function () {\n timeoutFun();\n }, 50);\n };\n HScroll.prototype.contains = function (ele, className) {\n return ele.classList.contains(className);\n };\n HScroll.prototype.eleScrolling = function (scrollDis, trgt) {\n var element = this.scrollEle;\n var rootEle = this.element;\n var classList = trgt.classList;\n if (classList.contains(CLS_HSCROLLNAV)) {\n classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n }\n if (this.contains(rootEle, CLS_RTL) && this.browserCheck) {\n scrollDis = -scrollDis;\n }\n var scrlLeft = element.scrollLeft;\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n if (classList.contains(CLS_NAVRIGHTARROW)) {\n element.scrollLeft = scrlLeft + scrollDis;\n }\n else {\n element.scrollLeft = scrlLeft - scrollDis;\n }\n }\n else {\n if (classList.contains(CLS_NAVLEFTARROW)) {\n element.scrollLeft = scrlLeft + scrollDis;\n }\n else {\n element.scrollLeft = scrlLeft - scrollDis;\n }\n }\n };\n HScroll.prototype.clickEventHandler = function (e) {\n this.eleScrolling(this.scrollStep, e.target);\n };\n HScroll.prototype.touchHandler = function (e) {\n var ele = this.scrollEle;\n var distance;\n distance = e.distanceX;\n if ((this.ieCheck) && this.contains(this.element, CLS_RTL)) {\n distance = -distance;\n }\n if (e.scrollDirection === 'Left') {\n ele.scrollLeft = ele.scrollLeft + distance;\n }\n else if (e.scrollDirection === 'Right') {\n ele.scrollLeft = ele.scrollLeft - distance;\n }\n };\n HScroll.prototype.arrowDisabling = function (addDisable, removeDisable) {\n addDisable.classList.add(CLS_DISABLE);\n addDisable.setAttribute('aria-disabled', 'true');\n addDisable.removeAttribute('tabindex');\n clearInterval(this.timeout);\n removeDisable.classList.remove(CLS_DISABLE);\n removeDisable.setAttribute('aria-disabled', 'false');\n removeDisable.setAttribute('tabindex', '0');\n this.repeatScroll();\n };\n HScroll.prototype.scrollHandler = function (e) {\n var target = e.target;\n var width = target.offsetWidth;\n var rootEle = this.element;\n var navLeftEle = this.element.querySelector('.' + CLS_HSCROLLNAVLEFT);\n var navRightEle = this.element.querySelector('.' + CLS_HSCROLLNAVRIGHT);\n var scrollLeft = target.scrollLeft;\n if (scrollLeft <= 0) {\n scrollLeft = -scrollLeft;\n }\n if (scrollLeft === 0) {\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n this.arrowDisabling(navLeftEle, navRightEle);\n }\n else {\n this.arrowDisabling(navRightEle, navLeftEle);\n }\n }\n else if (Math.ceil(width + scrollLeft + .1) >= target.scrollWidth) {\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n this.arrowDisabling(navRightEle, navLeftEle);\n }\n else {\n this.arrowDisabling(navLeftEle, navRightEle);\n }\n }\n else {\n var disEle = this.element.querySelector('.' + CLS_HSCROLLNAV + '.' + CLS_DISABLE);\n if (disEle) {\n disEle.classList.remove(CLS_DISABLE);\n disEle.setAttribute('aria-disabled', 'false');\n disEle.setAttribute('tabindex', '0');\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n * @param {HScrollModel} newProp\n * @param {HScrollModel} oldProp\n * @returns void\n * @private\n */\n HScroll.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'scrollStep':\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.element.classList.add(CLS_RTL) : this.element.classList.remove(CLS_RTL);\n break;\n }\n }\n };\n __decorate([\n Property(40)\n ], HScroll.prototype, \"scrollStep\", void 0);\n HScroll = __decorate([\n NotifyPropertyChanges\n ], HScroll);\n return HScroll;\n}(Component));\nexport { HScroll };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, isVisible, closest, attributes, detach, classList, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { 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.element.offsetHeight + '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.popupInit = function (element, ele) {\n if (!this.popObj) {\n element.appendChild(ele);\n setStyle(this.element, { overflow: '' });\n var eleStyles = window.getComputedStyle(element);\n var popup = new Popup(null, {\n relateTo: this.element,\n offsetY: parseFloat(eleStyles.height),\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 if (this.overflowMode === 'Extended') {\n popup.width = parseFloat(eleStyles.width) + ((parseFloat(eleStyles.borderRightWidth)) * 2);\n popup.offsetX = 0;\n }\n popup.appendTo(ele);\n EventHandler.add(document, 'scroll', this.docEvent.bind(this));\n EventHandler.add(document, 'click ', this.docEvent.bind(this));\n popup.element.style.maxHeight = popup.element.offsetHeight + 'px';\n popup.hide();\n this.popObj = popup;\n this.element.setAttribute('aria-haspopup', 'true');\n }\n else {\n var popupEle = this.popObj.element;\n setStyle(popupEle, { maxHeight: '', display: 'block' });\n setStyle(popupEle, { maxHeight: popupEle.offsetHeight + 'px', display: '' });\n }\n };\n Toolbar.prototype.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 var eleStyles = window.getComputedStyle(this.element);\n popObj.offsetY = parseFloat(eleStyles.height);\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 } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { calculatePosition, isCollide, fit, getScrollableParent, getZindexPartial } from '@syncfusion/ej2-popups';\nvar DOWNARROW = 'downarrow';\nvar ENTER = 'enter';\nvar ESCAPE = 'escape';\nvar FOCUSED = 'e-focused';\nvar HEADER = 'e-menu-header';\nvar LEFTARROW = 'leftarrow';\nvar RIGHTARROW = 'rightarrow';\nvar RTL = 'e-rtl';\nvar SELECTED = 'e-selected';\nvar SEPARATOR = 'e-separator';\nvar UPARROW = 'uparrow';\nvar WRAPPER = 'e-contextmenu-wrapper';\nvar CARET = 'e-caret';\nvar ITEM = 'e-menu-item';\nvar DISABLED = 'e-disabled';\nvar HIDE = 'e-menu-hide';\nvar ICONS = 'e-icons';\n/**\n * Specifies context menu items.\n */\nvar MenuItem = /** @class */ (function (_super) {\n __extends(MenuItem, _super);\n function MenuItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], MenuItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], MenuItem.prototype, \"separator\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], MenuItem.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"url\", void 0);\n return MenuItem;\n}(ChildProperty));\nexport { MenuItem };\n/**\n * The ContextMenu is a graphical user interface that appears on the user right click/touch hold operation.\n * ```html\n *
\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar ContextMenu = /** @class */ (function (_super) {\n __extends(ContextMenu, _super);\n /**\n * Constructor for creating the widget.\n * @private\n */\n function ContextMenu(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.animation = new Animation({});\n _this.navIdx = [];\n _this.isTapHold = false;\n return _this;\n }\n /**\n * Initialized animation with parent menu animation settings.\n * @private\n */\n ContextMenu.prototype.preRender = function () {\n if (this.element.tagName === 'EJS-CONTEXTMENU') {\n this.element.style.display = 'none';\n this.element.classList.remove('e-' + this.getModuleName());\n this.element.classList.remove('e-control');\n var ejInst = getValue('ej2_instances', this.element);\n var ul = 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 };\n /**\n * Initialize the control rendering\n * @private\n */\n ContextMenu.prototype.render = function () {\n this.initWrapper();\n this.renderItems();\n this.wireEvents();\n };\n ContextMenu.prototype.initWrapper = function () {\n var wrapper = this.getWrapper();\n if (!wrapper) {\n wrapper = this.createElement('div', { className: WRAPPER });\n document.body.appendChild(wrapper);\n }\n if (this.cssClass) {\n wrapper.classList.add(this.cssClass);\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n attributes(this.element, { 'role': 'menu', 'tabindex': '0' });\n wrapper.appendChild(this.element);\n };\n ContextMenu.prototype.renderItems = function () {\n if (!this.items.length) {\n this.items = ListBase.createJsonFromElement(this.element);\n this.element.innerHTML = '';\n }\n var ul = this.createItems(this.items);\n append(Array.prototype.slice.call(ul.children), this.element);\n this.element.classList.add('e-menu-parent');\n };\n ContextMenu.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n if (this.target) {\n var target = void 0;\n var targetElems = selectAll(this.target);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (Browser.isIos) {\n new Touch(target, { tapHold: this.touchHandler.bind(this) });\n }\n else {\n EventHandler.add(target, 'contextmenu', this.cmenuHandler, this);\n }\n }\n this.targetElement = target;\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollHandler, this);\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(wrapper, 'mouseover', this.moverHandler, this);\n EventHandler.add(document, 'mousedown', this.mouseDownHandler, this);\n }\n this.delegateClickHandler = this.clickHandler.bind(this);\n EventHandler.add(document, 'click', this.delegateClickHandler, this);\n new KeyboardEvents(wrapper, {\n keyAction: this.keyBoardHandler.bind(this),\n keyConfigs: {\n downarrow: DOWNARROW,\n uparrow: UPARROW,\n enter: ENTER,\n leftarrow: LEFTARROW,\n rightarrow: RIGHTARROW,\n escape: ESCAPE\n }\n });\n rippleEffect(wrapper, { selector: '.' + ITEM });\n };\n ContextMenu.prototype.mouseDownHandler = function (e) {\n if (closest(e.target, '.' + WRAPPER) !== this.getWrapper()) {\n this.closeMenu(this.navIdx.length, e);\n }\n };\n ContextMenu.prototype.keyBoardHandler = function (e) {\n e.preventDefault();\n switch (e.action) {\n case DOWNARROW:\n case UPARROW:\n this.upDownKeyHandler(e);\n break;\n case RIGHTARROW:\n this.rightEnterKeyHandler(e);\n break;\n case LEFTARROW:\n this.leftEscKeyHandler(e);\n break;\n case ENTER:\n this.rightEnterKeyHandler(e);\n break;\n case ESCAPE:\n this.leftEscKeyHandler(e);\n break;\n }\n };\n ContextMenu.prototype.upDownKeyHandler = function (e) {\n var wrapper = this.getWrapper();\n var cul = wrapper.children[this.navIdx.length];\n var defaultIdx = e.action === DOWNARROW ? 0 : cul.childElementCount - 1;\n var fliIdx = defaultIdx;\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n fliIdx = this.getIdx(cul, fli);\n fli.classList.remove(FOCUSED);\n e.action === DOWNARROW ? fliIdx++ : fliIdx--;\n if (fliIdx === (e.action === DOWNARROW ? cul.childElementCount : -1)) {\n fliIdx = defaultIdx;\n }\n }\n var cli = cul.children[fliIdx];\n fliIdx = this.isValidLI(cli, fliIdx, e.action);\n cul.children[fliIdx].classList.add(FOCUSED);\n cul.children[fliIdx].focus();\n };\n ContextMenu.prototype.isValidLI = function (cli, index, action) {\n var wrapper = this.getWrapper();\n var cul = wrapper.children[this.navIdx.length];\n if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n ((action === DOWNARROW) || (action === RIGHTARROW)) ? index++ : index--;\n }\n cli = cul.children[index];\n if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n index = this.isValidLI(cli, index, action);\n }\n return index;\n };\n ContextMenu.prototype.rightEnterKeyHandler = function (e) {\n var eventArgs;\n var wrapper = this.getWrapper();\n var cul = wrapper.children[this.navIdx.length];\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n var fliIdx = this.getIdx(cul, fli);\n var navIdx = this.navIdx.concat(fliIdx);\n var index = void 0;\n var item = this.getItem(navIdx);\n if (item.items.length) {\n this.navIdx.push(fliIdx);\n this.openMenu(fli, item, null, null, e);\n fli.classList.remove(FOCUSED);\n fli.classList.add(SELECTED);\n if (e.action === ENTER) {\n eventArgs = { element: fli, item: item };\n this.trigger('select', eventArgs);\n }\n fli.focus();\n cul = wrapper.children[this.navIdx.length];\n index = this.isValidLI(cul.children[0], 0, e.action);\n cul.children[index].classList.add(FOCUSED);\n cul.children[index].focus();\n }\n else {\n if (e.action === ENTER) {\n fli.classList.remove(FOCUSED);\n fli.classList.add(SELECTED);\n eventArgs = { element: fli, item: item };\n this.trigger('select', eventArgs);\n this.closeMenu(null, e);\n }\n }\n }\n };\n ContextMenu.prototype.leftEscKeyHandler = function (e) {\n if (this.navIdx.length) {\n var wrapper = this.getWrapper();\n this.closeMenu(this.navIdx.length, e);\n var cul = wrapper.children[this.navIdx.length];\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.setAttribute('aria-expanded', 'false');\n sli.classList.remove(SELECTED);\n sli.classList.add(FOCUSED);\n sli.focus();\n }\n }\n else {\n if (e.action === ESCAPE) {\n this.closeMenu(null, e);\n }\n }\n };\n ContextMenu.prototype.scrollHandler = function (e) {\n this.closeMenu(null, e);\n };\n ContextMenu.prototype.touchHandler = function (e) {\n this.isTapHold = true;\n this.cmenuHandler(e.originalEvent);\n };\n ContextMenu.prototype.cmenuHandler = function (e) {\n e.preventDefault();\n this.closeMenu(null, e);\n if (this.canOpen(e.target)) {\n if (e.changedTouches) {\n this.openMenu(null, null, e.changedTouches[0].pageY + 1, e.changedTouches[0].pageX + 1, e);\n }\n else {\n this.openMenu(null, null, e.pageY + 1, e.pageX + 1, e);\n }\n }\n };\n /**\n * Closes the ContextMenu if it is opened.\n */\n ContextMenu.prototype.close = function () {\n this.closeMenu();\n };\n ContextMenu.prototype.closeMenu = function (ulIndex, e) {\n if (ulIndex === void 0) { ulIndex = 0; }\n if (e === void 0) { e = null; }\n if (this.isMenuVisible()) {\n var ul = void 0;\n var item = void 0;\n var items = void 0;\n var closeArgs = void 0;\n var beforeCloseArgs = void 0;\n var wrapper = this.getWrapper();\n for (var cnt = wrapper.childElementCount; cnt > ulIndex; cnt--) {\n item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n items = item ? item.items : this.items;\n ul = wrapper.children[cnt - 1];\n beforeCloseArgs = { element: ul, parentItem: item, items: items, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n if (!beforeCloseArgs.cancel) {\n this.toggleAnimation(ul, false);\n this.navIdx.length = ulIndex ? ulIndex - 1 : ulIndex;\n closeArgs = { element: ul, parentItem: item, items: items };\n this.trigger('onClose', closeArgs);\n }\n }\n }\n };\n ContextMenu.prototype.isMenuVisible = function () {\n return (this.navIdx.length > 0 || (this.element.classList.contains('e-contextmenu') && isVisible(this.element).valueOf()));\n };\n ContextMenu.prototype.canOpen = function (target) {\n var canOpen = true;\n if (this.filter) {\n canOpen = false;\n var filter = this.filter.split(' ');\n for (var i = 0, len = target.classList.length; i < len; i++) {\n if (filter.indexOf(target.classList[i]) > -1) {\n canOpen = true;\n break;\n }\n }\n }\n return canOpen;\n };\n /**\n * This method is used to open the ContextMenu in specified position.\n * @param top - To specify ContextMenu vertical positioning.\n * @param left - To specify ContextMenu horizontal positioning.\n * @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 this.openMenu(null, null, top, left, null, target);\n };\n ContextMenu.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.items);\n if (Browser.isDevice) {\n wrapper.lastChild.style.display = 'none';\n var data = { text: item.text, iconCss: ICONS + ' e-previous' };\n var hdata = new MenuItem(this.items[0], null, data, true);\n var hli = this.createItems([hdata]).children[0];\n hli.classList.add(HEADER);\n ul.insertBefore(hli, ul.children[0]);\n }\n ul.style.zIndex = this.element.style.zIndex;\n wrapper.appendChild(ul);\n }\n else {\n ul = this.element;\n ul.style.zIndex = getZindexPartial(target ? target : this.element).toString();\n }\n navIdx = this.getIndex(li ? li.id : null, true);\n var items = li ? item.items : this.items;\n var eventArgs = { element: ul, items: items, parentItem: item, event: e, cancel: false };\n this.trigger('beforeOpen', eventArgs);\n if (eventArgs.cancel) {\n this.navIdx.pop();\n }\n else {\n this.setPosition(li, ul, top, left);\n this.toggleAnimation(ul);\n }\n };\n ContextMenu.prototype.setPosition = function (li, ul, top, left) {\n var px = 'px';\n this.toggleVisiblity(ul);\n if (ul === this.element) {\n var collide = isCollide(ul, null, left, top);\n if (collide.indexOf('right') > -1) {\n left = left - ul.offsetWidth;\n }\n if (collide.indexOf('bottom') > -1) {\n var offset = fit(ul, null, { X: false, Y: true }, { top: top, left: left });\n top = offset.top - 20;\n }\n collide = isCollide(ul, null, left, top);\n if (collide.indexOf('left') > -1) {\n var offset = fit(ul, null, { X: true, Y: false }, { top: top, left: left });\n left = offset.left;\n }\n }\n else {\n if (Browser.isDevice) {\n top = Number(this.element.style.top.replace(px, ''));\n left = Number(this.element.style.left.replace(px, ''));\n }\n else {\n var x = this.enableRtl ? 'left' : 'right';\n var offset = calculatePosition(li, x, 'top');\n top = offset.top;\n left = offset.left;\n var collide = isCollide(ul, null, this.enableRtl ? left - ul.offsetWidth : left, top);\n var xCollision = collide.indexOf('left') > -1 || collide.indexOf('right') > -1;\n if (xCollision) {\n offset = calculatePosition(li, this.enableRtl ? 'right' : 'left', 'top');\n left = offset.left;\n }\n if (this.enableRtl || xCollision) {\n left = (this.enableRtl && xCollision) ? left : left - ul.offsetWidth;\n }\n if (collide.indexOf('bottom') > -1) {\n offset = fit(ul, null, { X: false, Y: true }, { top: top, left: left });\n top = offset.top;\n }\n }\n }\n this.toggleVisiblity(ul, false);\n ul.style.top = top + px;\n ul.style.left = left + px;\n };\n ContextMenu.prototype.toggleVisiblity = function (ul, isVisible) {\n if (isVisible === void 0) { isVisible = true; }\n ul.style.visibility = isVisible ? 'hidden' : '';\n ul.style.display = isVisible ? 'block' : 'none';\n };\n ContextMenu.prototype.createItems = function (items) {\n var _this = this;\n var showIcon = this.hasField(items, 'iconCss');\n var listBaseOptions = {\n showIcon: showIcon,\n moduleName: 'menu',\n itemCreating: function (args) {\n if (!args.curData.id) {\n args.curData.id = getUniqueID('menuitem');\n }\n args.curData.htmlAttributes = {\n role: 'menuitem',\n tabindex: '-1'\n };\n },\n itemCreated: function (args) {\n if (args.curData.separator) {\n args.item.classList.add(SEPARATOR);\n args.item.removeAttribute('role');\n }\n if (showIcon && !args.curData.iconCss && !args.curData.separator) {\n args.item.classList.add('e-blankicon');\n }\n if (args.curData.items && args.curData.items.length) {\n var span = _this.createElement('span', { className: ICONS + ' ' + CARET });\n args.item.appendChild(span);\n args.item.setAttribute('aria-haspopup', 'true');\n args.item.setAttribute('aria-expanded', 'false');\n args.item.removeAttribute('role');\n args.item.classList.add('e-menu-caret-icon');\n }\n var eventArgs = { item: args.curData, element: args.item };\n _this.trigger('beforeItemRender', eventArgs);\n }\n };\n var ul = ListBase.createList(this.createElement, this.toRawObject(items.slice()), listBaseOptions, true);\n ul.setAttribute('tabindex', '0');\n return ul;\n };\n ContextMenu.prototype.toRawObject = function (items) {\n var item;\n var menuItems = [];\n for (var i = 0, len = items.length; i < len; i++) {\n item = items[i].properties;\n menuItems.push(item);\n }\n return menuItems;\n };\n ContextMenu.prototype.moverHandler = function (e) {\n var wrapper = this.getWrapper();\n var trgt = e.target;\n var cli = this.getLI(trgt);\n if (cli && closest(cli, '.' + WRAPPER)) {\n var fli = select('.' + FOCUSED, wrapper);\n if (fli) {\n fli.classList.remove(FOCUSED);\n }\n cli.classList.add(FOCUSED);\n if (!this.showItemOnClick) {\n this.clickHandler(e);\n }\n }\n };\n ContextMenu.prototype.hasField = function (items, field) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (items[i][field]) {\n return true;\n }\n }\n return false;\n };\n ContextMenu.prototype.getWrapper = function () {\n return closest(this.element, '.' + WRAPPER);\n };\n ContextMenu.prototype.clickHandler = function (e) {\n if (this.isTapHold) {\n this.isTapHold = false;\n }\n else {\n var wrapper = this.getWrapper();\n var trgt = e.target;\n var cli = this.getLI(trgt);\n var cliWrapper = cli ? closest(cli, '.' + WRAPPER) : null;\n var isInstLI = cli && cliWrapper && wrapper.firstElementChild.id === cliWrapper.firstElementChild.id;\n if (isInstLI && e.type === 'click' && !cli.classList.contains(HEADER)) {\n this.setLISelected(cli);\n var navIdx = this.getIndex(cli.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 (!Browser.isDevice) {\n var culIdx = this.getIdx(wrapper, cul);\n if (this.navIdx[culIdx] === cliIdx) {\n showSubMenu = false;\n }\n if (culIdx !== this.navIdx.length && (e.type !== 'mouseover' || showSubMenu)) {\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n this.closeMenu(culIdx + 1, e);\n }\n }\n if (showSubMenu) {\n var idx = this.navIdx.concat(cliIdx);\n var item = this.getItem(idx);\n if (item.items.length) {\n if (e.type === 'mouseover') {\n this.setLISelected(cli);\n }\n cli.setAttribute('aria-expanded', 'true');\n this.navIdx.push(cliIdx);\n this.openMenu(cli, item, null, null, e);\n }\n else {\n if (e.type !== 'mouseover') {\n this.closeMenu(null, e);\n }\n }\n }\n }\n }\n }\n else {\n if (trgt.tagName !== 'UL' || trgt.parentElement !== wrapper) {\n if (!cli || !cli.querySelector('.' + CARET)) {\n this.closeMenu(null, e);\n }\n }\n }\n }\n };\n ContextMenu.prototype.setLISelected = function (li) {\n var sli = this.getLIByClass(li.parentElement, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n li.classList.remove(FOCUSED);\n li.classList.add(SELECTED);\n };\n ContextMenu.prototype.getLIByClass = function (ul, classname) {\n for (var i = 0, len = ul.children.length; i < len; i++) {\n if (ul.children[i].classList.contains(classname)) {\n return ul.children[i];\n }\n }\n return null;\n };\n ContextMenu.prototype.getItem = function (navIdx) {\n navIdx = navIdx.slice();\n var idx = navIdx.pop();\n var items = this.getItems(navIdx);\n return items[idx];\n };\n ContextMenu.prototype.getItems = function (navIdx) {\n var items = this.items;\n for (var i = 0; i < navIdx.length; i++) {\n items = items[navIdx[i]].items;\n }\n return items;\n };\n ContextMenu.prototype.getIdx = function (ul, li, skipHdr) {\n if (skipHdr === void 0) { skipHdr = true; }\n var idx = Array.prototype.indexOf.call(ul.children, li);\n if (skipHdr && ul.children[0].classList.contains(HEADER)) {\n idx--;\n }\n return idx;\n };\n ContextMenu.prototype.getLI = function (elem) {\n if (elem.tagName === 'LI') {\n return elem;\n }\n return closest(elem, 'li');\n };\n /**\n * Called internally if any of the property value changed\n * @private\n * @param {ContextMenuModel} newProp\n * @param {ContextMenuModel} oldProp\n * @returns void\n */\n ContextMenu.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n wrapper.classList.remove(oldProp.cssClass);\n }\n if (newProp.cssClass) {\n wrapper.classList.add(newProp.cssClass);\n }\n break;\n case 'enableRtl':\n wrapper.classList.toggle(RTL);\n break;\n case 'filter':\n this.closeMenu();\n this.filter = newProp.filter;\n break;\n case 'showItemOnClick':\n this.unWireEvents();\n this.showItemOnClick = newProp.showItemOnClick;\n this.wireEvents();\n break;\n case 'target':\n this.unWireEvents();\n this.target = newProp.target;\n this.wireEvents();\n break;\n case 'items':\n var idx = void 0;\n var navIdx = void 0;\n var item = void 0;\n var keys = Object.keys(newProp.items);\n for (var i = 0; i < keys.length; i++) {\n navIdx = this.getChangedItemIndex(newProp, [], Number(keys[i]));\n if (navIdx.length <= this.getWrapper().children.length) {\n idx = navIdx.pop();\n item = this.getItems(navIdx);\n this.insertAfter([item[idx]], item[idx].text);\n this.removeItem(item, navIdx, idx);\n }\n navIdx.length = 0;\n }\n break;\n }\n }\n };\n ContextMenu.prototype.getChangedItemIndex = function (newProp, index, idx) {\n index.push(idx);\n var key = Object.keys(newProp.items[idx]).pop();\n if (key === 'items') {\n var item = newProp.items[idx];\n this.getChangedItemIndex(item, index, Number(Object.keys(item.items).pop()));\n }\n else {\n if (key === 'isParentArray' && index.length > 1) {\n index.pop();\n }\n }\n return index;\n };\n ContextMenu.prototype.removeItem = function (item, navIdx, idx) {\n item.splice(idx, 1);\n var uls = this.getWrapper().children;\n if (navIdx.length < uls.length) {\n detach(uls[navIdx.length].children[idx]);\n }\n };\n /**\n * Used to unwire the bind events.\n * @private\n */\n ContextMenu.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n if (this.target) {\n var target = void 0;\n var touchModule = void 0;\n var targetElems = selectAll(this.target);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (Browser.isIos) {\n touchModule = getInstance(target, Touch);\n if (touchModule) {\n touchModule.destroy();\n }\n }\n else {\n EventHandler.remove(target, 'contextmenu', this.cmenuHandler);\n }\n }\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollHandler);\n }\n }\n if (!Browser.isDevice) {\n EventHandler.remove(wrapper, 'mouseover', this.moverHandler);\n EventHandler.remove(document, 'mousedown', this.mouseDownHandler);\n }\n EventHandler.remove(document, 'click', this.delegateClickHandler);\n var keyboardModule = getInstance(wrapper, KeyboardEvents);\n if (keyboardModule) {\n keyboardModule.destroy();\n }\n };\n ContextMenu.prototype.toggleAnimation = function (ul, isMenuOpen) {\n var _this = this;\n if (isMenuOpen === void 0) { isMenuOpen = true; }\n if (this.animationSettings.effect === 'None' || !isMenuOpen) {\n this.end(ul, isMenuOpen);\n }\n else {\n this.animation.animate(ul, {\n name: this.animationSettings.effect,\n duration: this.animationSettings.duration,\n timingFunction: this.animationSettings.easing,\n begin: function (options) {\n options.element.style.display = 'block';\n options.element.style.maxHeight = options.element.getBoundingClientRect().height + 'px';\n },\n end: function (options) {\n _this.end(options.element, isMenuOpen);\n }\n });\n }\n };\n ContextMenu.prototype.end = function (ul, isMenuOpen) {\n if (isMenuOpen) {\n ul.style.display = 'block';\n ul.style.maxHeight = '';\n var item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n var eventArgs = { element: ul, parentItem: item, items: item ? item.items : this.items };\n this.trigger('onOpen', eventArgs);\n if (ul.querySelector('.' + FOCUSED)) {\n ul.querySelector('.' + FOCUSED).focus();\n }\n else {\n var ele = void 0;\n ele = this.getWrapper().children[this.getIdx(this.getWrapper(), ul) - 1];\n if (ele) {\n ele.querySelector('.' + SELECTED).focus();\n }\n else {\n this.element.focus();\n }\n }\n }\n else {\n if (ul === this.element) {\n var fli = this.getLIByClass(this.element, FOCUSED);\n if (fli) {\n fli.classList.remove(FOCUSED);\n }\n var sli = this.getLIByClass(this.element, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n ul.style.display = 'none';\n }\n else {\n detach(ul);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n ContextMenu.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.getIndex = function (data, isUniqueId, items, navIdx, isCallBack) {\n if (items === void 0) { items = this.items; }\n if (navIdx === void 0) { navIdx = []; }\n if (isCallBack === void 0) { isCallBack = false; }\n var item;\n for (var i = 0, len = items.length; i < len; i++) {\n item = items[i];\n if ((isUniqueId ? item.id : item.text) === data) {\n navIdx.push(i);\n break;\n }\n else if (item.items.length) {\n navIdx = this.getIndex(data, isUniqueId, item.items, navIdx, true);\n if (navIdx[navIdx.length - 1] === -1) {\n if (i !== len - 1) {\n navIdx.pop();\n }\n }\n else {\n navIdx.unshift(i);\n break;\n }\n }\n else {\n if (i === len - 1) {\n navIdx.push(-1);\n }\n }\n }\n return (!isCallBack && navIdx[0] === -1) ? [] : navIdx;\n };\n /**\n * This method is used to enable or disable the menu items in the ContextMenu based on the items and enable argument.\n * @param items - Text items that needs to be enabled/disabled.\n * @param enable - Set `true`/`false` to enable/disable the list items.\n * @param isUniqueId - Set `true` if it is a unique id.\n * @returns void\n */\n ContextMenu.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 (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.remove(disabled);\n }\n else {\n ul.children[idx].classList.remove(disabled);\n }\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.add(disabled);\n }\n else {\n ul.children[idx].classList.add(disabled);\n }\n }\n }\n }\n };\n /**\n * This method is used to show the menu items in the ContextMenu based on the items text.\n * @param items - Text items that needs to be shown.\n * @param isUniqueId - Set `true` if it is a unique id.\n * @returns void\n */\n ContextMenu.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 ContextMenu based on the items text.\n * @param items - Text items that needs to be hidden.\n * @param isUniqueId - Set `true` if it is a unique id.\n * @returns void\n */\n ContextMenu.prototype.hideItems = function (items, isUniqueId) {\n this.showHideItems(items, true, isUniqueId);\n };\n ContextMenu.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 ContextMenu based on the items text.\n * @param items - Text items that needs to be removed.\n * @param isUniqueId - Set `true` if it is a unique id.\n * @returns void\n */\n ContextMenu.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 * @param isUniqueId - Set `true` if it is a unique id.\n * @returns void\n */\n ContextMenu.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 ContextMenu.prototype.insertBefore = function (items, text, isUniqueId) {\n this.insertItems(items, text, isUniqueId, false);\n };\n ContextMenu.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, 'iconCss');\n li = this.createItems(iitems).children[idx];\n uls[navIdx.length].insertBefore(li, uls[navIdx.length].children[idx]);\n }\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n ContextMenu.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n if (wrapper) {\n _super.prototype.destroy.call(this);\n this.unWireEvents();\n if (this.ngElement) {\n this.ngElement.style.display = 'block';\n }\n else {\n this.closeMenu();\n this.element.innerHTML = '';\n ['top', 'left', 'display', 'z-index'].forEach(function (key) {\n _this.element.style.removeProperty(key);\n });\n ['role', 'tabindex', 'class', 'style'].forEach(function (key) {\n if (['class', 'style'].indexOf(key) === -1 || !_this.element.getAttribute(key)) {\n _this.element.removeAttribute(key);\n }\n });\n wrapper.parentNode.insertBefore(this.element, wrapper);\n }\n detach(wrapper);\n }\n };\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"filter\", void 0);\n __decorate([\n Property(false)\n ], ContextMenu.prototype, \"showItemOnClick\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], ContextMenu.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"target\", void 0);\n __decorate([\n Property({ duration: 400, easing: 'ease', effect: 'SlideDown' })\n ], ContextMenu.prototype, \"animationSettings\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"onOpen\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"onClose\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"select\", void 0);\n ContextMenu = __decorate([\n NotifyPropertyChanges\n ], ContextMenu);\n return ContextMenu;\n}(Component));\nexport { ContextMenu };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, closest, Collection, Complex, attributes, detach } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, select, isVisible } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Browser, formatUnit, L10n } from '@syncfusion/ej2-base';\nimport { 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 ele.innerHTML = '';\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_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 item = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n if (isNOU(item)) {\n return;\n }\n if (isNOU(value)) {\n value = true;\n }\n this.bdrLine.classList.add(CLS_HIDDEN);\n if (value === true) {\n item.classList.add(CLS_HIDDEN);\n if (item.classList.contains(CLS_ACTIVE)) {\n 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 }\n else {\n item.classList.remove(CLS_HIDDEN);\n }\n this.setActiveBorder();\n item.setAttribute('aria-hidden', '' + value);\n };\n /**\n * Specifies the index or HTMLElement to select an item from the Tab.\n * @param {number | HTMLElement} args - Index or DOM element is used for selecting an item from the Tab.\n * @returns void.\n */\n Tab.prototype.select = function (args) {\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.tbItem = selectAll('.' + CLS_HEADER + ' .' + CLS_TB_ITEM, this.element);\n this.prevItem = this.tbItem[this.prevIndex];\n 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.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.setTouchClass();\n if (isNOU(this.selectedNodes)) {\n this.setProperties({ selectedNodes: [] }, true);\n }\n if (isNOU(this.checkedNodes)) {\n this.setProperties({ checkedNodes: [] }, true);\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n * @hidden\n */\n TreeView.prototype.getPersistData = function () {\n var keyEntity = ['selectedNodes', 'checkedNodes'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n TreeView.prototype.render = function () {\n this.isAnimate = true;\n this.initialize();\n this.setDataBinding();\n this.setExpandOnType();\n this.setRipple();\n this.wireEditingEvents(this.allowEditing);\n this.setDragAndDrop(this.allowDragAndDrop);\n this.wireEvents();\n };\n TreeView.prototype.initialize = function () {\n this.element.setAttribute('role', 'tree');\n this.element.setAttribute('tabindex', '0');\n this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n this.setCssClass(null, this.cssClass);\n this.setEnableRtl();\n this.setFullRow(this.fullRowSelect);\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n };\n TreeView.prototype.setEnableRtl = function () {\n this.enableRtl ? addClass([this.element], RTL) : removeClass([this.element], RTL);\n };\n TreeView.prototype.setRipple = function () {\n var tempStr = '.' + FULLROW + ',.' + TEXTWRAP;\n var rippleModel = {\n selector: tempStr,\n ignore: '.' + TEXTWRAP + ' > .' + ICON + ',.' + INPUTGROUP + ',.' + INPUT + ', .' + CHECKBOXWRAP\n };\n this.rippleFn = rippleEffect(this.element, rippleModel);\n var iconModel = {\n selector: '.' + TEXTWRAP + ' > .' + ICON,\n isCenterRipple: true,\n };\n this.rippleIconFn = rippleEffect(this.element, iconModel);\n };\n TreeView.prototype.setFullRow = function (isEnabled) {\n isEnabled ? addClass([this.element], FULLROWWRAP) : removeClass([this.element], FULLROWWRAP);\n };\n TreeView.prototype.setMultiSelect = function (isEnabled) {\n var firstUl = select('.' + PARENTITEM, this.element);\n if (isEnabled) {\n firstUl.setAttribute('aria-multiselectable', 'true');\n }\n else {\n firstUl.removeAttribute('aria-multiselectable');\n }\n };\n TreeView.prototype.templateComplier = function (template) {\n if (template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n return compile(template);\n }\n }\n return undefined;\n };\n TreeView.prototype.setDataBinding = function () {\n var _this = this;\n this.treeList.push('false');\n if (this.fields.dataSource instanceof DataManager) {\n this.fields.dataSource.executeQuery(this.getQuery(this.fields)).then(function (e) {\n _this.treeList.pop();\n _this.treeData = e.result;\n _this.isNumberTypeId = _this.getType();\n _this.setRootData();\n _this.renderItems(true);\n if (_this.treeList.length === 0 && !_this.isLoaded) {\n _this.finalize();\n }\n });\n }\n else {\n this.treeList.pop();\n if (isNOU(this.fields.dataSource)) {\n this.rootData = this.treeData = [];\n }\n else {\n this.treeData = this.fields.dataSource;\n this.setRootData();\n }\n this.renderItems(false);\n }\n if (this.treeList.length === 0 && !this.isLoaded) {\n this.finalize();\n }\n };\n TreeView.prototype.getQuery = function (mapper, value) {\n if (value === void 0) { value = null; }\n var columns = [];\n var query;\n if (!mapper.query) {\n query = new Query();\n var prop = this.getActualProperties(mapper);\n for (var _i = 0, _a = Object.keys(prop); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col !== 'dataSource' && col !== 'tableName' && col !== 'child' && !!mapper[col]\n && columns.indexOf(mapper[col]) === -1) {\n columns.push(mapper[col]);\n }\n }\n query.select(columns);\n if (prop.hasOwnProperty('tableName')) {\n query.from(mapper.tableName);\n }\n }\n else {\n query = mapper.query.clone();\n }\n ListBase.addSorting(this.sortOrder, mapper.text, query);\n if (!isNOU(value) && !isNOU(mapper.parentID)) {\n query.where(mapper.parentID, 'equal', (this.isNumberTypeId ? parseFloat(value) : value));\n }\n return query;\n };\n TreeView.prototype.getType = function () {\n return this.treeData[0] ? ((typeof getValue(this.fields.id, this.treeData[0]) === 'number') ? true : false) : false;\n };\n TreeView.prototype.setRootData = function () {\n this.dataType = this.getDataType(this.treeData, this.fields);\n if (this.dataType === 1) {\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n var rootItems = this.getChildNodes(this.treeData, undefined, true);\n if (isNOU(rootItems)) {\n this.rootData = [];\n }\n else {\n this.rootData = rootItems;\n }\n }\n else {\n this.rootData = this.treeData;\n }\n };\n TreeView.prototype.renderItems = function (isSorted) {\n this.listBaseOption.ariaAttributes.level = 1;\n this.ulElement = ListBase.createList(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 cNodes[j].setAttribute('aria-expanded', 'false');\n addClass([cNodes[j]], NODECOLLAPSED);\n }\n }\n var eNodes = selectAll('.' + EXPANDED, element);\n for (var i = 0; i < eNodes.length; i++) {\n this.renderChildNodes(eNodes[i]);\n }\n removeClass(eNodes, EXPANDED);\n this.updateList();\n if (this.isLoaded) {\n this.updateCheckedProp();\n }\n };\n TreeView.prototype.updateCheckedProp = function () {\n var _this = this;\n if (this.showCheckBox) {\n var nodes_1 = [].concat([], this.checkedNodes);\n this.checkedNodes.forEach(function (value, index) {\n var checkBox = _this.element.querySelector('[data-uid=\"' + value + '\"]');\n if (isNOU(checkBox)) {\n nodes_1 = nodes_1.filter(function (e) { return e !== value; });\n }\n });\n this.setProperties({ checkedNodes: nodes_1 }, true);\n }\n };\n TreeView.prototype.ensureParentCheckState = function (element) {\n if (!isNOU(element)) {\n if (element.classList.contains(ROOT)) {\n return;\n }\n var ulElement = element;\n if (element.classList.contains(LISTITEM)) {\n ulElement = select('.' + PARENTITEM, element);\n }\n var checkedNodes = selectAll('.' + CHECK, ulElement);\n var nodes = selectAll('.' + LISTITEM, ulElement);\n var checkBoxEle = element.getElementsByClassName(CHECKBOXWRAP)[0];\n if (nodes.length === checkedNodes.length) {\n this.changeState(checkBoxEle, 'check', null, true, true);\n }\n else if (checkedNodes.length > 0) {\n this.changeState(checkBoxEle, 'indeterminate', null, true, true);\n }\n else if (checkedNodes.length === 0) {\n this.changeState(checkBoxEle, 'uncheck', null, true, true);\n }\n var parentUL = closest(element, '.' + PARENTITEM);\n if (!isNOU(parentUL)) {\n var currentParent = closest(parentUL, '.' + LISTITEM);\n this.ensureParentCheckState(currentParent);\n }\n }\n };\n TreeView.prototype.ensureChildCheckState = function (element, e) {\n if (!isNOU(element)) {\n var childElement = select('.' + PARENTITEM, element);\n var checkBoxes = void 0;\n if (!isNOU(childElement)) {\n checkBoxes = selectAll('.' + CHECKBOXWRAP, childElement);\n var isChecked = element.getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n var checkedState = void 0;\n for (var index = 0; index < checkBoxes.length; index++) {\n if (!isNOU(this.currentLoadData) && !isNOU(getValue(this.fields.isChecked, this.currentLoadData[index]))) {\n checkedState = getValue(this.fields.isChecked, this.currentLoadData[index]) ? 'check' : 'uncheck';\n }\n else {\n var isNodeChecked = checkBoxes[index].getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n checkedState = (!this.isLoaded && isNodeChecked) ? 'check' : (isChecked ? 'check' : 'uncheck');\n }\n this.changeState(checkBoxes[index], checkedState, e, true, true);\n }\n }\n }\n };\n TreeView.prototype.doCheckBoxAction = function (nodes, doCheck) {\n if (!isNOU(nodes)) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n var checkBox = select('.' + PARENTITEM + ' .' + CHECKBOXWRAP, liEle);\n this.validateCheckNode(checkBox, !doCheck, liEle, null);\n }\n }\n else {\n var checkBoxes = selectAll('.' + CHECKBOXWRAP, this.element);\n for (var index = 0; index < checkBoxes.length; index++) {\n this.changeState(checkBoxes[index], doCheck ? 'check' : 'uncheck');\n }\n }\n };\n TreeView.prototype.changeState = function (wrapper, state, e, isPrevent, isAdd) {\n var ariaState;\n var eventArgs;\n var currLi = closest(wrapper, '.' + LISTITEM);\n if (!isPrevent) {\n this.checkActionNodes = [];\n eventArgs = this.getCheckEvent(currLi, state, e);\n this.trigger('nodeChecking', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n var frameSpan = wrapper.getElementsByClassName(CHECKBOXFRAME)[0];\n if (state === 'check' && !frameSpan.classList.contains(CHECK)) {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n this.addCheck(currLi);\n ariaState = 'true';\n }\n else if (state === 'uncheck' && (frameSpan.classList.contains(CHECK) || frameSpan.classList.contains(INDETERMINATE))) {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n this.removeCheck(currLi);\n ariaState = 'false';\n }\n else if (state === 'indeterminate' && !frameSpan.classList.contains(INDETERMINATE)) {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n this.removeCheck(currLi);\n ariaState = 'mixed';\n }\n ariaState = state === 'check' ? 'true' : state === 'uncheck' ? 'false' : ariaState;\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n if (isAdd) {\n var data = [].concat([], this.checkActionNodes);\n eventArgs = this.getCheckEvent(currLi, state, e);\n if (isUndefined(isPrevent)) {\n eventArgs.data = data;\n }\n }\n if (!isPrevent) {\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n eventArgs.data[0].checked = ariaState;\n this.trigger('nodeChecked', eventArgs);\n this.checkActionNodes = [];\n }\n }\n };\n TreeView.prototype.addCheck = function (liEle) {\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.checkedNodes.indexOf(id) === -1) {\n this.checkedNodes.push(id);\n }\n };\n TreeView.prototype.removeCheck = function (liEle) {\n var index = this.checkedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.checkedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.getCheckEvent = function (currLi, action, e) {\n this.checkActionNodes.push(this.getNodeData(currLi));\n var nodeData = this.checkActionNodes;\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, data: nodeData };\n };\n TreeView.prototype.finalize = function () {\n var firstUl = select('.' + PARENTITEM, this.element);\n firstUl.setAttribute('role', treeAriaAttr.treeRole);\n this.setMultiSelect(this.allowMultiSelection);\n var firstNode = select('.' + LISTITEM, this.element);\n if (firstNode) {\n addClass([firstNode], FOCUS);\n this.updateIdAttr(null, firstNode);\n }\n this.doSelectionAction();\n this.updateCheckedProp();\n this.isLoaded = true;\n this.isAnimate = false;\n var eventArgs = { data: this.treeData };\n this.trigger('dataBound', eventArgs);\n };\n TreeView.prototype.doSelectionAction = function () {\n var sNodes = selectAll('.' + SELECTED, this.element);\n var sUids = this.selectedNodes;\n if (sUids.length > 0) {\n this.setProperties({ selectedNodes: [] }, true);\n for (var i = 0; i < sUids.length; i++) {\n var sNode = select('[data-uid=\"' + sUids[i] + '\"]', this.element);\n this.selectNode(sNode, null, true);\n if (!this.allowMultiSelection) {\n break;\n }\n }\n }\n else {\n this.selectGivenNodes(sNodes);\n }\n removeClass(sNodes, SELECTED);\n };\n TreeView.prototype.selectGivenNodes = function (sNodes) {\n for (var i = 0; i < sNodes.length; i++) {\n 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 removeClass([icon], EXPANDABLE);\n addClass([icon], COLLAPSIBLE);\n var start = 0;\n var end = 0;\n var proxy = this;\n var ul = select('.' + PARENTITEM, currLi);\n var liEle = currLi;\n this.setHeight(liEle, ul);\n if (!this.isAnimate) {\n this.aniObj.animate(ul, {\n name: this.animation.expand.effect,\n duration: this.animation.expand.duration,\n timingFunction: this.animation.expand.easing,\n begin: function (args) {\n liEle.style.overflow = 'hidden';\n start = liEle.offsetHeight;\n end = select('.' + TEXTWRAP, currLi).offsetHeight;\n },\n progress: function (args) {\n args.element.style.display = 'block';\n proxy.animateHeight(args, start, end);\n },\n end: function (args) {\n args.element.style.display = 'block';\n _this.expandedNode(liEle, ul, icon);\n }\n });\n }\n else {\n this.expandedNode(liEle, ul, icon);\n }\n };\n TreeView.prototype.expandedNode = function (currLi, ul, icon) {\n ul.style.display = 'block';\n currLi.style.display = 'block';\n currLi.style.overflow = '';\n currLi.style.height = '';\n removeClass([icon], PROCESS);\n currLi.setAttribute('aria-expanded', 'true');\n removeClass([currLi], NODECOLLAPSED);\n if (this.isLoaded && this.expandArgs) {\n this.expandArgs = this.getExpandEvent(currLi, null);\n this.trigger('nodeExpanded', this.expandArgs);\n }\n };\n TreeView.prototype.collapseNode = function (currLi, icon, e) {\n var _this = this;\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n var colArgs;\n if (this.isLoaded) {\n colArgs = this.getExpandEvent(currLi, e);\n this.trigger('nodeCollapsing', colArgs);\n if (colArgs.cancel) {\n removeClass([icon], PROCESS);\n return;\n }\n }\n removeClass([icon], COLLAPSIBLE);\n addClass([icon], EXPANDABLE);\n var start = 0;\n var end = 0;\n var proxy = this;\n var ul = select('.' + PARENTITEM, currLi);\n var liEle = currLi;\n addClass([currLi], NODECOLLAPSED);\n this.aniObj.animate(ul, {\n name: this.animation.collapse.effect,\n duration: this.animation.collapse.duration,\n timingFunction: this.animation.collapse.easing,\n begin: function (args) {\n liEle.style.overflow = 'hidden';\n start = select('.' + TEXTWRAP, currLi).offsetHeight;\n end = liEle.offsetHeight;\n },\n progress: function (args) {\n proxy.animateHeight(args, start, end);\n },\n end: function (args) {\n liEle.style.overflow = '';\n args.element.style.display = 'none';\n liEle.style.height = '';\n removeClass([icon], PROCESS);\n currLi.setAttribute('aria-expanded', 'false');\n if (_this.isLoaded) {\n _this.trigger('nodeCollapsed', colArgs);\n }\n }\n });\n };\n TreeView.prototype.setHeight = function (currLi, ul) {\n ul.style.display = 'block';\n ul.style.visibility = 'hidden';\n currLi.style.height = currLi.offsetHeight + 'px';\n ul.style.display = 'none';\n ul.style.visibility = '';\n };\n TreeView.prototype.animateHeight = function (args, start, end) {\n var remaining = (args.duration - args.timeStamp) / args.duration;\n var currentHeight = (end - start) * remaining + start;\n args.element.parentElement.style.height = currentHeight + 'px';\n };\n TreeView.prototype.renderChildNodes = function (parentLi, expandChild) {\n var _this = this;\n var eicon = select('div.' + ICON, parentLi);\n if (isNOU(eicon)) {\n return;\n }\n this.showSpinner(eicon);\n var childItems;\n if (this.fields.dataSource instanceof DataManager) {\n var level = this.parents(parentLi, '.' + PARENTITEM).length;\n var mapper_1 = this.getChildFields(this.fields, level, 1);\n if (isNOU(mapper_1) || isNOU(mapper_1.dataSource)) {\n detach(eicon);\n parentLi.removeAttribute('aria-expanded');\n return;\n }\n this.treeList.push('false');\n mapper_1.dataSource.executeQuery(this.getQuery(mapper_1, parentLi.getAttribute('data-uid'))).then(function (e) {\n _this.treeList.pop();\n childItems = e.result;\n _this.currentLoadData = childItems;\n if (isNOU(childItems) || childItems.length === 0) {\n detach(eicon);\n parentLi.removeAttribute('aria-expanded');\n }\n else {\n _this.updateListProp(mapper_1);\n var id = parentLi.getAttribute('data-uid');\n var nodeData = _this.getNodeObject(id);\n setValue('child', childItems, nodeData);\n _this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(_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 (_this.treeList.length === 0 && !_this.isLoaded) {\n _this.finalize();\n }\n });\n }\n else {\n childItems = this.getChildNodes(this.treeData, parentLi.getAttribute('data-uid'));\n this.currentLoadData = childItems;\n if (isNOU(childItems) || childItems.length === 0) {\n detach(eicon);\n parentLi.removeAttribute('aria-expanded');\n return;\n }\n else {\n this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(this.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.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 this.trigger('nodeSelected', eventArgs);\n }\n };\n TreeView.prototype.unselectNode = function (li, e) {\n var eventArgs;\n if (this.isLoaded) {\n eventArgs = this.getSelectEvent(li, 'un-select', e);\n this.trigger('nodeSelecting', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n this.removeSelect(li);\n this.setFocusElement(li);\n if (this.isLoaded) {\n this.trigger('nodeSelected', eventArgs);\n }\n };\n TreeView.prototype.setFocusElement = function (li) {\n if (!isNOU(li)) {\n var focusedNode = this.getFocusedNode();\n if (focusedNode) {\n removeClass([focusedNode], FOCUS);\n }\n addClass([li], FOCUS);\n this.updateIdAttr(focusedNode, li);\n }\n };\n TreeView.prototype.addSelect = function (liEle) {\n liEle.setAttribute('aria-selected', 'true');\n addClass([liEle], ACTIVE);\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.selectedNodes.indexOf(id) === -1) {\n this.selectedNodes.push(id);\n }\n };\n TreeView.prototype.removeSelect = function (liEle) {\n if (this.allowMultiSelection) {\n liEle.setAttribute('aria-selected', 'false');\n }\n else {\n liEle.removeAttribute('aria-selected');\n }\n removeClass([liEle], ACTIVE);\n var index = this.selectedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.selectedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.removeSelectAll = function () {\n var selectedLI = this.element.querySelectorAll('.' + ACTIVE);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.allowMultiSelection) {\n ele.setAttribute('aria-selected', 'false');\n }\n else {\n ele.removeAttribute('aria-selected');\n }\n }\n removeClass(selectedLI, ACTIVE);\n this.setProperties({ selectedNodes: [] }, true);\n };\n TreeView.prototype.getSelectEvent = function (currLi, action, e) {\n var nodeData = this.getNodeData(currLi);\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData };\n };\n TreeView.prototype.setExpandOnType = function () {\n this.expandOnType = (this.expandOn === 'Auto') ? (Browser.isDevice ? 'Click' : 'DblClick') : this.expandOn;\n };\n TreeView.prototype.expandHandler = function (e) {\n var target = e.originalEvent.target;\n if (!target || target.classList.contains(INPUT) || target.classList.contains(ROOT) ||\n target.classList.contains(PARENTITEM) || target.classList.contains(LISTITEM) ||\n target.classList.contains(ICON) || this.showCheckBox && closest(target, '.' + CHECKBOXWRAP)) {\n return;\n }\n else {\n this.expandCollapseAction(closest(target, '.' + LISTITEM), e);\n }\n };\n TreeView.prototype.expandCollapseAction = function (currLi, e) {\n var icon = select('div.' + ICON, currLi);\n if (!icon || icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n var classList = icon.classList;\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(currLi, icon, e);\n }\n else {\n this.collapseNode(currLi, icon, e);\n }\n }\n };\n TreeView.prototype.expandAction = function (currLi, icon, e, expandChild) {\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n if (this.isLoaded) {\n this.expandArgs = this.getExpandEvent(currLi, e);\n this.trigger('nodeExpanding', this.expandArgs);\n if (this.expandArgs.cancel) {\n removeClass([icon], PROCESS);\n return;\n }\n }\n var ul = select('.' + PARENTITEM, currLi);\n if (ul && ul.nodeName === 'UL') {\n this.expandNode(currLi, icon);\n }\n else {\n this.renderChildNodes(currLi, expandChild);\n }\n };\n TreeView.prototype.keyActionHandler = function (e) {\n var target = e.target;\n var focusedNode = this.getFocusedNode();\n if (target && target.classList.contains(INPUT)) {\n var inpEle = target;\n if (e.action === 'enter') {\n inpEle.blur();\n this.element.focus();\n addClass([focusedNode], HOVER);\n }\n else if (e.action === 'escape') {\n inpEle.value = this.oldText;\n inpEle.blur();\n this.element.focus();\n addClass([focusedNode], HOVER);\n }\n return;\n }\n e.preventDefault();\n var eventArgs = {\n cancel: false,\n event: e,\n node: focusedNode,\n };\n this.trigger('keyPress', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n switch (e.action) {\n case 'space':\n if (this.showCheckBox) {\n this.checkNode(e);\n }\n break;\n case 'moveRight':\n this.openNode(this.enableRtl ? false : true, e);\n break;\n case 'moveLeft':\n this.openNode(this.enableRtl ? true : false, e);\n break;\n case 'shiftDown':\n this.shiftKeySelect(true, e);\n break;\n case 'moveDown':\n case 'ctrlDown':\n case 'csDown':\n this.navigateNode(true);\n break;\n case 'shiftUp':\n this.shiftKeySelect(false, e);\n break;\n case 'moveUp':\n case 'ctrlUp':\n case 'csUp':\n this.navigateNode(false);\n break;\n case 'home':\n case 'shiftHome':\n case 'ctrlHome':\n case 'csHome':\n this.navigateRootNode(true);\n break;\n case 'end':\n case 'shiftEnd':\n case 'ctrlEnd':\n case 'csEnd':\n this.navigateRootNode(false);\n break;\n case 'enter':\n case 'ctrlEnter':\n case 'shiftEnter':\n case 'csEnter':\n this.toggleSelect(focusedNode, e);\n break;\n case 'f2':\n if (this.allowEditing && !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 this.changeState(checkWrap, isCheck ? 'uncheck' : 'check', e, true);\n this.ensureChildCheckState(li);\n this.ensureParentCheckState(closest(closest(li, '.' + PARENTITEM), '.' + LISTITEM));\n this.nodeCheckedEvent(checkWrap, isCheck, e);\n };\n TreeView.prototype.openNode = function (toBeOpened, e) {\n var focusedNode = this.getFocusedNode();\n var icon = select('div.' + ICON, focusedNode);\n if (toBeOpened) {\n if (!icon) {\n return;\n }\n else if (icon.classList.contains(EXPANDABLE)) {\n this.expandAction(focusedNode, icon, e);\n }\n else {\n this.focusNextNode(focusedNode, true);\n }\n }\n else {\n if (icon && icon.classList.contains(COLLAPSIBLE)) {\n this.collapseNode(focusedNode, icon, e);\n }\n else {\n var parentLi = closest(closest(focusedNode, '.' + PARENTITEM), '.' + LISTITEM);\n if (!parentLi) {\n return;\n }\n else {\n 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: [] }, 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 };\n TreeView.prototype.getElement = function (ele) {\n if (isNOU(ele)) {\n return null;\n }\n else if (typeof ele === 'string') {\n return this.element.querySelector('[data-uid=\"' + ele + '\"]');\n }\n else if (typeof ele === 'object') {\n return ele;\n }\n else {\n return null;\n }\n };\n TreeView.prototype.getEditEvent = function (liEle, newText, inpEle) {\n var data = this.getNodeData(liEle);\n return { cancel: false, newText: newText, node: liEle, nodeData: data, oldText: this.oldText, innerHtml: inpEle };\n };\n TreeView.prototype.getNodeObject = function (id) {\n var childNodes;\n if (isNOU(id)) {\n return childNodes;\n }\n else if (this.dataType === 1) {\n for (var i = 0, objlen = this.treeData.length; i < objlen; i++) {\n var dataId = getValue(this.fields.id, this.treeData[i]);\n if (!isNOU(this.treeData[i]) && !isNOU(dataId) && dataId.toString() === id) {\n return this.treeData[i];\n }\n }\n }\n else {\n return this.getChildNodeObject(this.treeData, this.fields, id);\n }\n return childNodes;\n };\n TreeView.prototype.getChildNodeObject = function (obj, mapper, id) {\n var newList;\n if (isNOU(obj)) {\n return newList;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var dataId = getValue(mapper.id, obj[i]);\n if (obj[i] && dataId && dataId.toString() === id) {\n return obj[i];\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childData = getValue(mapper.child, obj[i]);\n newList = this.getChildNodeObject(childData, this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var child = 'child';\n newList = this.getChildNodeObject(getValue(child, obj[i]), this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n }\n return newList;\n };\n TreeView.prototype.setDragAndDrop = function (toBind) {\n if (toBind) {\n this.initializeDrag();\n }\n else {\n this.destroyDrag();\n }\n };\n TreeView.prototype.initializeDrag = function () {\n var _this = this;\n var virtualEle;\n 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 eventArgs = _this.getDragEvent(e.event, _this, null, e.target);\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 dropRoot = (closest(dropTarget, '.' + DROPPABLE));\n if (!dropTarget || !dropRoot) {\n detach(e.helper);\n document.body.style.cursor = '';\n }\n var eventArgs = _this.getDragEvent(e.event, _this, dropTarget, dropTarget);\n _this.trigger('nodeDragStop', eventArgs);\n if (eventArgs.cancel) {\n if (e.helper.parentNode) {\n detach(e.helper);\n }\n document.body.style.cursor = '';\n }\n _this.dragStartAction = false;\n }\n });\n this.dropObj = new Droppable(this.element, {\n out: function (e) {\n if (!isNOU(e) && !e.target.classList.contains(SIBLING)) {\n document.body.style.cursor = 'not-allowed';\n }\n },\n over: function (e) {\n document.body.style.cursor = '';\n },\n drop: function (e) {\n _this.dropAction(e);\n }\n });\n };\n TreeView.prototype.dragAction = function (e, virtualEle) {\n var dropRoot = closest(e.target, '.' + DROPPABLE);\n var dropWrap = closest(e.target, '.' + TEXTWRAP);\n var icon = select('div.' + ICON, virtualEle);\n removeClass([icon], [DROPIN, DROPNEXT, DROPOUT, NODROP]);\n this.removeVirtualEle();\n document.body.style.cursor = '';\n var classList = e.target.classList;\n if (this.fullRowSelect && !dropWrap && !isNOU(classList) && classList.contains(FULLROW)) {\n dropWrap = e.target.nextElementSibling;\n }\n if (dropRoot) {\n var dropLi = closest(e.target, '.' + LISTITEM);\n if (!dropRoot.classList.contains(ROOT) || (dropWrap &&\n (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi)))) {\n if (dropLi && e && (e.event.offsetY < 7)) {\n addClass([icon], DROPNEXT);\n var virEle = 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 this.trigger('nodeDragging', this.getDragEvent(e.event, this, e.target, e.target));\n };\n TreeView.prototype.dropAction = function (e) {\n var offsetY = e.event.offsetY;\n var dropTarget = e.target;\n var dragObj;\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 return;\n }\n if (dragObj.allowMultiSelection && (dragLi.classList.contains(ACTIVE) || (offsetY < 7 ||\n (e.target.offsetHeight > 0 && offsetY > (e.target.offsetHeight - 10))))) {\n var sNodes = selectAll('.' + ACTIVE, dragObj.element);\n for (var i = 0; i < sNodes.length; i++) {\n if (dropLi.isSameNode(sNodes[i]) || this.isDescendant(sNodes[i], dropLi)) {\n continue;\n }\n this.appendNode(dropTarget, sNodes[i], dropLi, e, dragObj, offsetY);\n }\n }\n else {\n this.appendNode(dropTarget, dragLi, dropLi, e, dragObj, offsetY);\n }\n }\n this.trigger('nodeDropped', this.getDragEvent(e.event, dragObj, dropTarget, e.target, e.dragData.draggedElement));\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.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.dropAsChildNode = function (dragLi, dropLi, dragObj, index, e, pos) {\n var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n var dropParentUl = closest(dropLi, '.' + PARENTITEM);\n if (e && (pos < 7)) {\n dropParentUl.insertBefore(dragLi, dropLi);\n }\n else if (e && (e.target.offsetHeight > 0 && pos > (e.target.offsetHeight - 10))) {\n dropParentUl.insertBefore(dragLi, dropLi.nextElementSibling);\n }\n else {\n var dropUl = this.expandParent(dropLi);\n dropUl.insertBefore(dragLi, dropUl.childNodes[index]);\n }\n this.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.expandParent = function (dropLi) {\n var dropIcon = select('div.' + ICON, dropLi);\n if (dropIcon && dropIcon.classList.contains(EXPANDABLE)) {\n this.expandAction(dropLi, dropIcon, null);\n }\n var dropUl = select('.' + PARENTITEM, dropLi);\n if (isNOU(dropUl)) {\n 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 dropLi.setAttribute('aria-expanded', 'true');\n removeClass([dropLi], NODECOLLAPSED);\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 dragParentLi.removeAttribute('aria-expanded');\n }\n };\n TreeView.prototype.updateAriaLevel = function (dragLi) {\n var level = this.parents(dragLi, '.' + PARENTITEM).length;\n dragLi.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, dragLi), level + 1);\n };\n TreeView.prototype.updateChildAriaLevel = function (element, level) {\n if (!isNOU(element)) {\n var cNodes = element.childNodes;\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var liEle = cNodes[i];\n liEle.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, liEle), level + 1);\n }\n }\n };\n TreeView.prototype.renderVirtualEle = function (e) {\n var pre;\n if (e.event.offsetY > e.target.offsetHeight - 2) {\n pre = false;\n }\n else if (e.event.offsetY < 2) {\n pre = true;\n }\n var virEle = 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) {\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, '.e-list-item') : null;\n var targetParent = null;\n var pre = null;\n if (dropTarget) {\n if (newParent.length === 0) {\n targetParent = null;\n }\n else if (dropTarget.classList.contains('e-list-item')) {\n targetParent = newParent[0];\n }\n else {\n targetParent = newParent[1];\n }\n }\n if (dropTarget && closest(dropTarget, '.e-treeview')) {\n if (event.offsetY <= 5) {\n pre = 'Before';\n }\n else if (target.offsetHeight <= 32 && event.offsetY < target.offsetHeight - 10) {\n pre = 'Child';\n targetParent = closest(dropTarget, '.e-list-item');\n }\n else {\n pre = 'After';\n }\n }\n return {\n cancel: false,\n event: event,\n draggedNode: draggedNode,\n draggedNodeData: draggedNodeData,\n droppedNode: dropLi,\n droppedNodeData: dropData,\n target: target,\n dropTarget: targetParent\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 };\n TreeView.prototype.updateInstance = function () {\n this.updateList();\n this.updateSelectedNodes();\n };\n TreeView.prototype.updateList = function () {\n this.liList = Array.prototype.slice.call(selectAll('.' + LISTITEM, this.element));\n };\n TreeView.prototype.updateSelectedNodes = function () {\n this.setProperties({ selectedNodes: [] }, true);\n var sNodes = selectAll('.' + ACTIVE, this.element);\n this.selectGivenNodes(sNodes);\n };\n TreeView.prototype.doGivenAction = function (nodes, selector, toExpand) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n var icon = select('.' + selector, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n toExpand ? this.expandAction(liEle, icon, null) : this.collapseNode(liEle, icon, null);\n }\n }\n };\n TreeView.prototype.addGivenNodes = function (nodes, dropLi, index, isRemote) {\n var level = dropLi ? parseFloat(dropLi.getAttribute('aria-level')) + 1 : 1;\n if (isRemote) {\n this.updateMapper(level);\n }\n var li = ListBase.createListItemFromJson(this.createElement, nodes, this.listBaseOption, level);\n var dropUl = dropLi ? this.expandParent(dropLi) : select('.' + PARENTITEM, this.element);\n var refNode = dropUl.childNodes[index];\n for (var i = 0; i < li.length; i++) {\n dropUl.insertBefore(li[i], refNode);\n }\n this.finalizeNode(dropUl);\n };\n TreeView.prototype.updateMapper = function (level) {\n var mapper = (level === 1) ? this.fields : this.getChildFields(this.fields, level - 1, 1);\n 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.doDisableAction = function (nodes) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n liEle.setAttribute('aria-disabled', 'true');\n addClass([liEle], DISABLE);\n }\n };\n TreeView.prototype.doEnableAction = function (nodes) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n liEle.removeAttribute('aria-disabled');\n removeClass([liEle], DISABLE);\n }\n };\n TreeView.prototype.setTouchClass = function () {\n var ele = closest(this.element, '.' + BIGGER);\n this.touchClass = isNOU(ele) ? '' : SMALL;\n };\n TreeView.prototype.wireInputEvents = function (inpEle) {\n EventHandler.add(inpEle, 'blur', this.inputFocusOut, this);\n };\n TreeView.prototype.wireEditingEvents = function (toBind) {\n if (toBind) {\n var proxy_1 = this;\n this.touchEditObj = new Touch(this.element, {\n tap: function (e) {\n if (e.tapCount === 2) {\n e.originalEvent.preventDefault();\n proxy_1.editingHandler(e.originalEvent);\n }\n }\n });\n }\n else {\n if (this.touchEditObj) {\n this.touchEditObj.destroy();\n }\n }\n };\n TreeView.prototype.wireClickEvent = function (toBind) {\n if (toBind) {\n var proxy_2 = this;\n this.touchClickObj = new Touch(this.element, {\n tap: function (e) {\n e.originalEvent.preventDefault();\n proxy_2.clickHandler(e);\n }\n });\n }\n else {\n if (this.touchClickObj) {\n this.touchClickObj.destroy();\n }\n }\n };\n TreeView.prototype.wireExpandOnEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n var proxy_3 = this;\n this.touchExpandObj = new Touch(this.element, {\n tap: function (e) {\n if (_this.expandOnType === 'Click' || (_this.expandOnType === 'DblClick' && e.tapCount === 2)) {\n proxy_3.expandHandler(e);\n }\n }\n });\n }\n else {\n if (this.touchExpandObj) {\n this.touchExpandObj.destroy();\n }\n }\n };\n TreeView.prototype.mouseDownHandler = function (e) {\n this.mouseDownStatus = true;\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n }\n if (e.ctrlKey && this.allowMultiSelection) {\n EventHandler.add(this.element, 'contextmenu', this.preventContextMenu, this);\n }\n };\n ;\n TreeView.prototype.preventContextMenu = function (e) {\n e.preventDefault();\n };\n TreeView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'mousedown', this.mouseDownHandler, this);\n this.wireClickEvent(true);\n this.wireExpandOnEvent(true);\n EventHandler.add(this.element, 'focus', this.focusIn, this);\n EventHandler.add(this.element, 'blur', this.focusOut, this);\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.element, 'mouseout', this.onMouseLeave, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown',\n });\n };\n TreeView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'mousedown', this.mouseDownHandler);\n this.wireClickEvent(false);\n this.wireExpandOnEvent(false);\n EventHandler.remove(this.element, 'focus', this.focusIn);\n EventHandler.remove(this.element, 'blur', this.focusOut);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.element, 'mouseout', this.onMouseLeave);\n this.keyboardModule.destroy();\n };\n TreeView.prototype.parents = function (element, selector) {\n var matched = [];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, selector)) {\n matched.push(el);\n }\n el = el.parentNode;\n }\n return matched;\n };\n TreeView.prototype.isDescendant = function (parent, child) {\n var node = child.parentNode;\n while (!isNOU(node)) {\n if (node === parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n TreeView.prototype.showSpinner = function (element) {\n addClass([element], LOAD);\n createSpinner({\n target: element,\n width: Browser.isDevice ? 16 : 14\n }, 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 'expandOn':\n this.wireExpandOnEvent(false);\n this.setExpandOnType();\n this.wireExpandOnEvent(true);\n break;\n case 'fields':\n this.updateListProp(this.fields);\n this.reRenderNodes();\n break;\n case 'fullRowSelect':\n this.setFullRow(this.fullRowSelect);\n this.addFullRow(this.fullRowSelect);\n break;\n case 'nodeTemplate':\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n this.reRenderNodes();\n break;\n case 'selectedNodes':\n this.removeSelectAll();\n this.setProperties({ selectedNodes: newProp.selectedNodes }, true);\n this.doSelectionAction();\n break;\n case 'showCheckBox':\n this.reRenderNodes();\n break;\n case 'sortOrder':\n this.reRenderNodes();\n break;\n }\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. It also removes the attributes and classes.\n */\n TreeView.prototype.destroy = function () {\n this.element.removeAttribute('aria-activedescendant');\n this.element.removeAttribute('tabindex');\n this.unWireEvents();\n this.wireEditingEvents(false);\n this.rippleFn();\n this.rippleIconFn();\n this.setCssClass(this.cssClass, null);\n this.setDragAndDrop(false);\n this.setFullRow(false);\n this.element.innerHTML = '';\n _super.prototype.destroy.call(this);\n };\n /**\n * Adds the collection of TreeView nodes based on target and index position. If target node is not specified,\n * then the nodes are added as children of the given parentID or in the root level of TreeView.\n * @param { { [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 */\n TreeView.prototype.addNodes = function (nodes, target, index) {\n if (isNOU(nodes)) {\n return;\n }\n var dropLi = this.getElement(target);\n nodes = this.getSortedData(nodes);\n if (this.fields.dataSource instanceof DataManager) {\n this.addGivenNodes(nodes, dropLi, index, true);\n }\n else if (this.dataType === 2) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n if (dropLi) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n for (var i = 0; i < nodes.length; i++) {\n var pid = getValue(this.fields.parentID, nodes[i]);\n dropLi = pid ? this.getElement(pid.toString()) : pid;\n this.addGivenNodes([nodes[i]], dropLi, index);\n }\n }\n }\n };\n /**\n * Instead of clicking on the TreeView node for editing, we can enable it by using\n * `beginEdit` property. On passing the node ID or element through this property, the edit textBox\n * will be created for the particular node thus allowing us to edit it.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.beginEdit = function (node) {\n var ele = this.getElement(node);\n if (!isNOU(ele)) {\n this.createTextbox(ele, null);\n }\n };\n /**\n * Checks all the unchecked nodes. You can also check specific nodes by passing array of unchecked nodes\n * as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.checkAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, true);\n }\n };\n /**\n * Collapses all the expanded TreeView nodes. You can collapse specific nodes by passing array of nodes as argument to this method.\n * You can also collapse all the nodes excluding the hidden nodes by setting **excludeHiddenNodes** to true. If you want to collapse\n * a specific level of nodes, set **level** as argument to collapseAll method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/ array of TreeView node.\n * @param {number} level - TreeView nodes will collapse up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes of TreeView when collapsing all nodes.\n */\n TreeView.prototype.collapseAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, COLLAPSIBLE, false);\n }\n else {\n if (level > 0) {\n this.collapseByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.collapseAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Disables the collection of nodes by passing the ID of nodes or node elements in the array.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n */\n TreeView.prototype.disableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doDisableAction(nodes);\n }\n };\n /**\n * Enables the collection of disabled nodes by passing the ID of nodes or node elements in the array.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n */\n TreeView.prototype.enableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doEnableAction(nodes);\n }\n };\n /**\n * Ensures visibility of the TreeView node by using node ID or node element.\n * When many TreeView nodes are present and we need to find a particular node, `ensureVisible` property\n * helps bring the node to visibility by expanding the TreeView and scrolling to the specific node.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView nodes.\n */\n TreeView.prototype.ensureVisible = function (node) {\n var liEle = this.getElement(node);\n if (isNOU(liEle)) {\n return;\n }\n var parents = this.parents(liEle, '.' + LISTITEM);\n this.expandAll(parents);\n setTimeout(function () { liEle.scrollIntoView(true); }, 450);\n };\n /**\n * Expands all the collapsed TreeView nodes. You can expand the specific nodes by passing the array of collapsed nodes\n * as argument to this method. You can also expand all the collapsed nodes by excluding the hidden nodes by setting\n * **excludeHiddenNodes** to true to this method. To expand a specific level of nodes, set **level** as argument to expandAll method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n * @param {number} level - TreeView nodes will expand up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes when expanding all nodes.\n */\n TreeView.prototype.expandAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, EXPANDABLE, true);\n }\n else {\n if (level > 0) {\n this.expandByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.expandAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Get the node's data such as id, text, parentID, selected, isChecked, and expanded by passing the node element or it's ID.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.getNode = function (node) {\n var ele = this.getElement(node);\n return this.getNodeData(ele, true);\n };\n /**\n * Moves the collection of nodes within the same TreeView based on target or its index position.\n * @param {string[] | Element[]} sourceNodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {number} index - Specifies the index to place the moved nodes in the target element.\n */\n TreeView.prototype.moveNodes = function (sourceNodes, target, index) {\n var dropLi = this.getElement(target);\n if (isNOU(dropLi)) {\n return;\n }\n for (var i = 0; i < sourceNodes.length; i++) {\n var dragLi = this.getElement(sourceNodes[i]);\n if (isNOU(dragLi) || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n continue;\n }\n this.dropAsChildNode(dragLi, dropLi, this, index);\n }\n };\n /**\n * Removes the collection of TreeView nodes by passing the array of node details as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.removeNodes = function (nodes) {\n if (!isNOU(nodes)) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n this.removeNode(liEle);\n }\n }\n };\n /**\n * Replaces the text of the TreeView node with the given text.\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {string} newText - Specifies the new text of TreeView node.\n */\n TreeView.prototype.updateNode = function (target, newText) {\n if (isNOU(target) || isNOU(newText) || !this.allowEditing) {\n return;\n }\n var liEle = this.getElement(target);\n if (isNOU(liEle)) {\n return;\n }\n var txtEle = select('.' + LISTTEXT, liEle);\n this.updateOldText(liEle);\n var eventArgs = this.getEditEvent(liEle, null, null);\n this.trigger('nodeEditing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.appendNewText(liEle, txtEle, newText, false);\n };\n /**\n * Unchecks all the checked nodes. You can also uncheck the specific nodes by passing array of checked nodes\n * as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.uncheckAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, false);\n }\n };\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Complex({}, NodeAnimationSettings)\n ], TreeView.prototype, \"animation\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"checkedNodes\", void 0);\n __decorate([\n Property('')\n ], TreeView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"enableRtl\", void 0);\n __decorate([\n Property('Auto')\n ], TreeView.prototype, \"expandOn\", void 0);\n __decorate([\n Complex({}, FieldsSettings)\n ], TreeView.prototype, \"fields\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"fullRowSelect\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"nodeTemplate\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"selectedNodes\", void 0);\n __decorate([\n Property('None')\n ], TreeView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"drawNode\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"keyPress\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecking\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeClicked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragging\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStart\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStop\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDropped\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEdited\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEditing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanded\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanding\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelected\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelecting\", void 0);\n TreeView = 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 this.targetParentElement = this.element.previousElementSibling || this.element.parentElement;\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.\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.\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 removes all its related events\n * @returns void\n */\n Sidebar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n removeClass([this.element], [OPEN, CLOSE, PUSH, SLIDE, OVER, LEFT, RIGHT, TRASITION, DISABLEANIMATION,\n CONTEXTBACKDROP, MAINCONTENTANIMATION, VISIBILITY]);\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 if (this.target) {\n removeClass([this.element], SIDEBARABSOLUTE);\n removeClass([this.target], CONTEXT);\n if (this.targetParentElement.parentElement.tagName !== 'HTML') {\n this.targetParentElement.parentNode.insertBefore(this.element, this.targetParentElement.nextSibling);\n }\n }\n this.unWireEvents();\n };\n __decorate([\n Property('auto')\n ], Sidebar.prototype, \"dockSize\", void 0);\n __decorate([\n Property(null)\n ], Sidebar.prototype, \"mediaQuery\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"enableDock\", void 0);\n __decorate([\n Property(true)\n ], Sidebar.prototype, \"enableGestures\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"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)\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('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 * @private\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(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(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('')\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'], 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'], 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, 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, 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 element = renderTextElement(options, font, smithchart.themeStyle.axisLabel, 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 element = renderTextElement(options, font, smithchart.themeStyle.axisLabel, 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'], 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'], 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 = smithchart.font;\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 element_1 = renderTextElement(textoptions, font, smithchart.themeStyle.dataLabel, 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 { 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 = this.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(false)\n ], Smithchart.prototype, \"isResponsive\", 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';\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 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;', 'clip-path': 'url(#' + this.clipId + ')' });\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 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 if (render && !labelArgs.cancel) {\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 = labelArgs.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 /**\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 = this.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);\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('#ffffff')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: '#686868', size: '13px' }, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"enableAnimation\", void 0);\n __decorate([\n Complex({}, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty, Collection } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../model/base';\nimport { Theme } from '../model/theme';\n/**\n * Configures the axis line.\n */\nvar Line = /** @class */ (function (_super) {\n __extends(Line, _super);\n function Line() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(2)\n ], Line.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Line.prototype, \"dashArray\", void 0);\n __decorate([\n Property(Theme.axisLineColor)\n ], Line.prototype, \"color\", void 0);\n return Line;\n}(ChildProperty));\nexport { Line };\n/**\n * Configures the axis label.\n */\nvar Label = /** @class */ (function (_super) {\n __extends(Label, _super);\n function Label() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex(Theme.axisLabelFont, Font)\n ], Label.prototype, \"font\", void 0);\n __decorate([\n Property('')\n ], Label.prototype, \"format\", void 0);\n __decorate([\n Property('Inside')\n ], Label.prototype, \"position\", void 0);\n __decorate([\n Property('None')\n ], Label.prototype, \"hiddenLabel\", void 0);\n __decorate([\n Property(false)\n ], Label.prototype, \"autoAngle\", void 0);\n __decorate([\n Property(false)\n ], Label.prototype, \"useRangeColor\", void 0);\n __decorate([\n Property(0)\n ], Label.prototype, \"offset\", void 0);\n return Label;\n}(ChildProperty));\nexport { Label };\n/**\n * Configures the ranges of an axis.\n */\nvar Range = /** @class */ (function (_super) {\n __extends(Range, _super);\n function Range() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Range.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"end\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"radius\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"startWidth\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"endWidth\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"color\", void 0);\n return Range;\n}(ChildProperty));\nexport { Range };\n/**\n * Configures the major and minor tick lines of an axis.\n */\nvar Tick = /** @class */ (function (_super) {\n __extends(Tick, _super);\n function Tick() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Tick.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"interval\", void 0);\n __decorate([\n Property(0)\n ], Tick.prototype, \"offset\", void 0);\n __decorate([\n Property(Theme.tickLineColor)\n ], Tick.prototype, \"color\", void 0);\n __decorate([\n Property('Inside')\n ], Tick.prototype, \"position\", void 0);\n __decorate([\n Property(false)\n ], Tick.prototype, \"useRangeColor\", void 0);\n return Tick;\n}(ChildProperty));\nexport { Tick };\n/**\n * Configures the needle cap in pointer.\n */\nvar Cap = /** @class */ (function (_super) {\n __extends(Cap, _super);\n function Cap() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#ffffff')\n ], Cap.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: Theme.pointerColor, width: 8 }, Border)\n ], Cap.prototype, \"border\", void 0);\n __decorate([\n Property(8)\n ], Cap.prototype, \"radius\", void 0);\n return Cap;\n}(ChildProperty));\nexport { Cap };\n/**\n * Configures the back needle in pointers.\n */\nvar NeedleTail = /** @class */ (function (_super) {\n __extends(NeedleTail, _super);\n function NeedleTail() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(Theme.pointerColor)\n ], NeedleTail.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: Theme.pointerColor, width: 0 }, Border)\n ], NeedleTail.prototype, \"border\", void 0);\n __decorate([\n Property('0%')\n ], NeedleTail.prototype, \"length\", void 0);\n return NeedleTail;\n}(ChildProperty));\nexport { NeedleTail };\n/**\n * Configures the animation of pointers.\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], Animation.prototype, \"enable\", void 0);\n __decorate([\n Property(1000)\n ], Animation.prototype, \"duration\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * ‘Annotation’ module is used to handle annotation action for an axis.\n */\nvar Annotation = /** @class */ (function (_super) {\n __extends(Annotation, _super);\n function Annotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Annotation.prototype, \"content\", void 0);\n __decorate([\n Property(90)\n ], Annotation.prototype, \"angle\", void 0);\n __decorate([\n Property('50%')\n ], Annotation.prototype, \"radius\", void 0);\n __decorate([\n Property('-1')\n ], Annotation.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], Annotation.prototype, \"autoAngle\", void 0);\n __decorate([\n Complex({ size: '12px', color: '#686868' }, Font)\n ], Annotation.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], Annotation.prototype, \"description\", void 0);\n return Annotation;\n}(ChildProperty));\nexport { Annotation };\n/**\n * Configures the pointers of an axis.\n */\nvar Pointer = /** @class */ (function (_super) {\n __extends(Pointer, _super);\n function Pointer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Pointer.prototype, \"value\", void 0);\n __decorate([\n Property('Needle')\n ], Pointer.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"imageUrl\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"radius\", void 0);\n __decorate([\n Property(20)\n ], Pointer.prototype, \"pointerWidth\", void 0);\n __decorate([\n Complex({}, Cap)\n ], Pointer.prototype, \"cap\", void 0);\n __decorate([\n Complex({}, NeedleTail)\n ], Pointer.prototype, \"needleTail\", void 0);\n __decorate([\n Property(Theme.pointerColor)\n ], Pointer.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], Pointer.prototype, \"border\", void 0);\n __decorate([\n Complex(null, Animation)\n ], Pointer.prototype, \"animation\", void 0);\n __decorate([\n Property('Circle')\n ], Pointer.prototype, \"markerShape\", void 0);\n __decorate([\n Property(5)\n ], Pointer.prototype, \"markerHeight\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"description\", void 0);\n __decorate([\n Property(5)\n ], Pointer.prototype, \"markerWidth\", void 0);\n return Pointer;\n}(ChildProperty));\nexport { Pointer };\n/**\n * Configures an axis in a gauge.\n */\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n function Axis() {\n /**\n * Specifies the minimum value of an axis.\n * @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 { createElement, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { getPointer, getTemplateFunction } from '../utils/helper';\nimport { getAngleFromValue, getLabelFormat, getElement, getLocationFromAngle } from '../utils/helper';\nimport { tooltipRender } from '../model/constants';\n/**\n * Tooltip Module handles the tooltip of the circular gauge\n */\nvar GaugeTooltip = /** @class */ (function () {\n /**\n * Constructor for Tooltip module.\n * @private.\n */\n function GaugeTooltip(gauge) {\n this.gauge = gauge;\n this.element = gauge.element;\n this.tooltip = gauge.tooltip;\n this.textStyle = this.tooltip.textStyle;\n this.borderStyle = this.tooltip.border;\n this.ejTooltip = new Tooltip({\n opensOn: 'custom',\n beforeRender: this.onBeforeRender.bind(this),\n beforeOpen: this.tooltipCustomization.bind(this),\n openDelay: 0, closeDelay: 1000\n });\n this.ejTooltip.appendTo(this.element);\n }\n /**\n * Method to render the tooltip for circular gauge.\n */\n GaugeTooltip.prototype.renderTooltip = function (target) {\n var currentPointer = getPointer(target.id, this.gauge);\n var element;\n var angle;\n this.currentAxis = this.gauge.axes[currentPointer.axisIndex];\n this.currentPointer = (this.currentAxis.pointers)[currentPointer.pointerIndex];\n angle = getAngleFromValue(this.currentPointer.currentValue, this.currentAxis.visibleRange.max, this.currentAxis.visibleRange.min, this.currentAxis.startAngle, this.currentAxis.endAngle, this.currentAxis.direction === 'ClockWise') % 360;\n element = this.appendTargetElement(angle);\n if (element.getAttribute('data-tooltip-id') === null) {\n this.findPosition(angle);\n this.ejTooltip.open(element);\n }\n };\n /**\n * Method to append the target element for tooltip\n */\n GaugeTooltip.prototype.appendTargetElement = function (angle) {\n var location = getLocationFromAngle(angle, this.currentAxis.currentRadius, this.gauge.midPoint);\n var element = getElement(this.element.id + '_GaugeTooltip');\n if (element) {\n element.style.left = location.x + 'px';\n element.style.top = location.y + 'px';\n }\n else {\n element = createElement('div', {\n id: this.element.id + '_GaugeTooltip',\n styles: 'position:absolute;left:' + location.x + 'px;top:' + location.y +\n 'px;width:2px;height:2px;background:transparent'\n });\n getElement(this.element.id + '_Secondary_Element').appendChild(element);\n }\n return element;\n };\n /**\n * Method to find the position of the tooltip anchor for circular gauge.\n */\n GaugeTooltip.prototype.findPosition = function (angle) {\n switch (true) {\n case (angle >= 0 && angle <= 45):\n this.ejTooltip.position = 'RightBottom';\n break;\n case (angle >= 45 && angle < 90):\n this.ejTooltip.position = 'BottomRight';\n break;\n case (angle >= 90 && angle < 135):\n this.ejTooltip.position = 'BottomLeft';\n break;\n case (angle >= 135 && angle < 180):\n this.ejTooltip.position = 'LeftBottom';\n break;\n case (angle >= 180 && angle < 225):\n this.ejTooltip.position = 'LeftTop';\n break;\n case (angle >= 225 && angle < 270):\n this.ejTooltip.position = 'TopLeft';\n break;\n case (angle >= 270 && angle < 315):\n this.ejTooltip.position = 'TopRight';\n break;\n default:\n this.ejTooltip.position = 'RightTop';\n break;\n }\n this.ejTooltip.dataBind();\n };\n /**\n * Method to perform the tooltip for circular gauge.\n */\n GaugeTooltip.prototype.onBeforeRender = function (args) {\n var tooltipFormat = this.gauge.tooltip.format || this.currentAxis.labelStyle.format;\n var customLabelFormat = tooltipFormat && tooltipFormat.match('{value}') !== null;\n var format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(tooltipFormat), useGrouping: this.gauge.useGroupingSeparator\n });\n var content = customLabelFormat ?\n tooltipFormat.replace(new RegExp('{value}', 'g'), format(this.currentPointer.currentValue)) :\n format(this.currentPointer.currentValue);\n content = this.tooltip.template ?\n getTemplateFunction(this.tooltip.template)(this.currentAxis)[0] : content;\n var argsData = {\n cancel: false, name: tooltipRender,\n content: content,\n border: this.borderStyle,\n axis: this.currentAxis, pointer: this.currentPointer,\n textStyle: this.textStyle\n };\n this.gauge.trigger(tooltipRender, argsData);\n this.borderStyle = argsData.border;\n args.cancel = argsData.cancel;\n this.ejTooltip.content = argsData.content;\n this.textStyle = argsData.textStyle;\n this.ejTooltip.dataBind();\n };\n /**\n * Method to customize the tooltip elements for circular gauge.\n */\n GaugeTooltip.prototype.tooltipCustomization = function (args) {\n var font = this.textStyle;\n var borderColor = this.borderStyle.color;\n var border = this.borderStyle.width;\n var pointerSize = 5;\n var arrowWidth = (pointerSize - border) + 'px';\n var outerWidth;\n var innerWidth;\n args.element.classList.remove('e-popup-close');\n args.element.classList.add('e-popup-open');\n var arrowEle = args.element.querySelector('.e-arrow-tip');\n setStyleAttribute(args.element, {\n 'backgroundColor': this.tooltip.fill, 'borderColor': borderColor || '#212121',\n 'borderWidth': border + 'px'\n });\n setStyleAttribute(args.element.querySelector('.e-tip-content'), {\n 'color': font.color, 'fontFamily': font.fontFamily, 'fontSize': font.size,\n 'fontWeight': font.fontWeight, 'opacity': font.opacity.toString(), 'fontStyle': font.fontStyle\n });\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': 2 * (pointerSize + border) + 'px', 'height': pointerSize + border + 'px'\n });\n if (arrowEle.classList.contains('e-tip-top')) {\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetHeight;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderBottomWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': this.tooltip.fill,\n 'borderLeftWidth': innerWidth, 'borderRightWidth': innerWidth, 'borderBottomWidth': innerWidth,\n 'left': border + 'px', 'top': border + 'px', 'display': 'none'\n });\n }\n else if (arrowEle.classList.contains('e-tip-bottom')) {\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetHeight;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderTopWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': this.tooltip.fill,\n 'borderLeftWidth': innerWidth, 'borderRightWidth': innerWidth, 'borderTopWidth': innerWidth,\n 'left': border + 'px', 'top': '0', 'display': 'none'\n });\n }\n else if (arrowEle.classList.contains('e-tip-left')) {\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': pointerSize + border + 'px', 'height': 2 * (pointerSize + border) + 'px'\n });\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetWidth;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderRightColor': borderColor,\n 'borderTopWidth': outerWidth, 'borderBottomWidth': outerWidth, 'borderRightWidth': outerWidth\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderRightColor': this.tooltip.fill,\n 'borderTopWidth': innerWidth, 'borderBottomWidth': innerWidth, 'borderRightWidth': innerWidth,\n 'left': border + 'px', 'top': border + 'px', 'display': 'none'\n });\n }\n else {\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': (pointerSize + border) + 'px', 'height': 2 * (pointerSize + border) + 'px'\n });\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetWidth;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderLeftColor': borderColor,\n 'borderTopWidth': outerWidth, 'borderBottomWidth': outerWidth, 'borderLeftWidth': outerWidth\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderLeftColor': this.tooltip.fill,\n 'borderTopWidth': innerWidth, 'borderBottomWidth': innerWidth, 'borderLeftWidth': innerWidth,\n 'left': (border <= 1 ? 0 : -1) + 'px', 'top': border + 'px', 'display': 'none'\n });\n }\n this.ejTooltip.refresh(args.target);\n setStyleAttribute(args.element, {\n 'display': 'block', 'transitionProperty': 'left,top',\n 'transitionDuration': this.tooltip.enableAnimation ? '1000ms' : '0ms'\n });\n };\n /**\n * Get module name.\n */\n GaugeTooltip.prototype.getModuleName = function () {\n // Returns te module name\n return 'Tooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n GaugeTooltip.prototype.destroy = function (gauge) {\n // Destroy method performed here\n };\n return GaugeTooltip;\n}());\nexport { GaugeTooltip };\n","import { getLocationFromAngle, PathOption, stringToNumber, TextOption, textElement, appendPath, toPixel } from '../utils/helper';\nimport { getAngleFromValue, isCompleteAngle, getPathArc, getRangeColor } from '../utils/helper';\nimport { getRangePalette } from '../model/theme';\n/**\n * Specifies the Axis rendering for circular gauge\n */\nvar AxisRenderer = /** @class */ (function () {\n /**\n * Constructor for axis renderer.\n * @private.\n */\n function AxisRenderer(gauge) {\n this.gauge = gauge;\n }\n /**\n * Method to render the axis element of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisOuterLine = function (axis, index, element, gauge) {\n var background = axis.background;\n this.setRangeColor(axis);\n if (background !== null) {\n appendPath(new PathOption(gauge.element.id + '_AxisOuterLine_' + index, background, 0, 'transparent', null, '0', getPathArc(gauge.midPoint, 0, 360, (Math.min(axis.rect.width, axis.rect.height) / 2)), '', 'pointer-events:none;'), element, gauge);\n }\n };\n /**\n * Method to render the axis line of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisLine = function (axis, index, element, gauge) {\n var startAngle = axis.startAngle;\n var endAngle = axis.endAngle;\n if (axis.lineStyle.width > 0) {\n startAngle = !isCompleteAngle(startAngle, endAngle) ? startAngle : [0, endAngle = 360][0];\n appendPath(new PathOption(gauge.element.id + '_AxisLine_' + index, 'transparent', axis.lineStyle.width, axis.lineStyle.color, null, axis.lineStyle.dashArray, getPathArc(gauge.midPoint, startAngle - 90, endAngle - 90, axis.currentRadius), '', 'pointer-events:none;'), element, gauge);\n }\n };\n /**\n * Method to render the axis labels of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisLabels = function (axis, index, element, gauge) {\n var labelElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Labels_' + index\n });\n var min = axis.visibleRange.min;\n var max = axis.visibleRange.max;\n var labelCollection = axis.visibleLabels;\n var location;\n var style = axis.labelStyle;\n var anchor;\n var angle;\n var label;\n var radius = axis.currentRadius;\n var labelPadding = 10;\n if (style.position === 'Outside') {\n radius += (axis.nearSize - (axis.maxLabelSize.height + axis.lineStyle.width / 2)) +\n (labelPadding / 2);\n }\n else {\n radius -= (axis.farSize - (axis.maxLabelSize.height + axis.lineStyle.width / 2) +\n (style.autoAngle ? labelPadding : 0));\n }\n for (var i = 0, length_1 = labelCollection.length; i < length_1; i++) {\n if ((i === 0 && style.hiddenLabel === 'First') ||\n (i === (length_1 - 1) && style.hiddenLabel === 'Last')) {\n continue;\n }\n label = labelCollection[i];\n angle = Math.round(getAngleFromValue(label.value, max, min, axis.startAngle, axis.endAngle, axis.direction === 'ClockWise'));\n location = getLocationFromAngle(angle, radius, gauge.midPoint);\n anchor = this.findAnchor(location, style, angle, label);\n textElement(new TextOption(gauge.element.id + '_Axis_' + index + '_Label_' + i, location.x, location.y, anchor, label.text, style.autoAngle ? 'rotate(' + (angle + 90) + ',' + (location.x) + ',' + location.y + ')' : '', 'auto'), style.font, style.useRangeColor ? getRangeColor(label.value, axis.ranges, style.font.color) : style.font.color, labelElement, 'pointer-events:none;');\n }\n element.appendChild(labelElement);\n };\n /**\n * Method to find the anchor of the axis label.\n * @private\n */\n AxisRenderer.prototype.findAnchor = function (location, style, angle, label) {\n if (style.autoAngle) {\n return 'middle';\n }\n var anchor = style.position === 'Inside' ?\n ((angle > 120 && angle < 240) ? 'start' : ((300 < angle || angle < 60) ? 'end' : 'middle')) :\n ((angle > 120 && angle < 240) ? 'end' : ((300 < angle || angle < 60) ? 'start' : 'middle'));\n location.y += style.position === 'Inside' ?\n ((angle >= 240 && angle <= 300) ? (label.size.height / 2) :\n (angle >= 60 && angle <= 120) ? 0 : label.size.height / 4) :\n ((angle >= 240 && angle <= 300) ? 0 :\n (angle >= 60 && angle <= 120) ? label.size.height / 2 : label.size.height / 4);\n return anchor;\n };\n /**\n * Method to render the axis minor tick lines of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawMinorTickLines = function (axis, index, element, gauge) {\n var minorTickElements = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_MinorTickLines_' + index\n });\n var minorLineStyle = axis.minorTicks;\n var minorInterval = minorLineStyle.interval !== null ?\n minorLineStyle.interval : (axis.visibleRange.interval / 2);\n var isRangeColor = minorLineStyle.useRangeColor;\n if (minorLineStyle.width && minorLineStyle.height && minorInterval) {\n for (var i = axis.visibleRange.min, max = axis.visibleRange.max; i <= max; i += minorInterval) {\n if (this.majorValues.indexOf(+i.toFixed(3)) < 0) {\n appendPath(new PathOption(gauge.element.id + '_Axis_Minor_TickLine_' + index + '_' + i, 'transparent', minorLineStyle.width, isRangeColor ? getRangeColor(i, axis.ranges, minorLineStyle.color) : minorLineStyle.color, null, '0', this.calculateTicks(i, minorLineStyle, axis), '', 'pointer-events:none;'), minorTickElements, gauge);\n }\n }\n element.appendChild(minorTickElements);\n }\n };\n /**\n * Method to render the axis major tick lines of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawMajorTickLines = function (axis, index, element, gauge) {\n var majorTickElements = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_MajorTickLines_' + index\n });\n var majorLineStyle = axis.majorTicks;\n var isRangeColor = majorLineStyle.useRangeColor;\n this.majorValues = [];\n if (majorLineStyle.width && majorLineStyle.height && axis.visibleRange.interval) {\n for (var i = axis.visibleRange.min, max = axis.visibleRange.max, interval = axis.visibleRange.interval; i <= max; i += interval) {\n this.majorValues.push(+i.toFixed(3));\n appendPath(new PathOption(gauge.element.id + '_Axis_Major_TickLine_' + index + '_' + i, 'transparent', majorLineStyle.width, isRangeColor ? getRangeColor(i, axis.ranges, majorLineStyle.color) : majorLineStyle.color, null, '0', this.calculateTicks(i, majorLineStyle, axis), '', 'pointer-events:none;'), majorTickElements, gauge);\n }\n element.appendChild(majorTickElements);\n }\n };\n /**\n * Method to calcualte the tick elements for the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.calculateTicks = function (value, options, axis) {\n var axisLineWidth = (axis.lineStyle.width / 2) + options.offset;\n var isOutside = options.position === 'Outside';\n var angle = getAngleFromValue(value, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, axis.direction === 'ClockWise');\n var start = getLocationFromAngle(angle, axis.currentRadius +\n (isOutside ? axisLineWidth : -axisLineWidth), this.gauge.midPoint);\n var end = getLocationFromAngle(angle, axis.currentRadius +\n (isOutside ? axisLineWidth : -axisLineWidth) +\n (isOutside ? options.height : -options.height), this.gauge.midPoint);\n return 'M ' + start.x + ' ' + start.y + ' L ' + end.x + ' ' + end.y + ' ';\n };\n /**\n * Method to render the axis range of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisRange = function (axis, index, element, gauge) {\n var _this = this;\n var rangeElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Ranges_' + index\n });\n var startAngle;\n var endAngle;\n var isClockWise = axis.direction === 'ClockWise';\n var startValue;\n var endValue;\n var min = axis.visibleRange.min;\n var max = axis.visibleRange.max;\n var startWidth;\n var endWidth;\n axis.ranges.map(function (range, rangeIndex) {\n _this.calculateRangeRadius(axis, range);\n startValue = Math.min(Math.max(range.start, min), range.end);\n endValue = Math.min(Math.max(range.start, range.end), max);\n if (startValue !== endValue) {\n startAngle = getAngleFromValue(startValue, max, min, axis.startAngle, axis.endAngle, isClockWise);\n endAngle = getAngleFromValue(endValue, max, min, axis.startAngle, axis.endAngle, isClockWise);\n if (range.startWidth.length > 0) {\n startWidth = toPixel(range.startWidth, range.currentRadius);\n }\n else {\n startWidth = range.startWidth;\n }\n if (range.endWidth.length > 0) {\n endWidth = toPixel(range.endWidth, range.currentRadius);\n }\n else {\n endWidth = range.endWidth;\n }\n endAngle = isClockWise ? endAngle : [startAngle, startAngle = endAngle][0];\n endWidth = isClockWise ? endWidth : [startWidth, startWidth = endWidth][0];\n appendPath(new PathOption(gauge.element.id + '_Axis_' + index + '_Range_' + rangeIndex, range.rangeColor, 0, range.rangeColor, 1, '0', getPathArc(gauge.midPoint, Math.floor(startAngle), Math.ceil(endAngle), range.currentRadius, startWidth, endWidth), '', 'pointer-events:none;'), rangeElement, gauge);\n }\n });\n element.appendChild(rangeElement);\n };\n /**\n * Method to calculate the radius of the axis range.\n * @return {void}\n */\n AxisRenderer.prototype.calculateRangeRadius = function (axis, range) {\n var radius = range.radius !== null ? range.radius : '100%';\n range.currentRadius = stringToNumber(radius, axis.currentRadius);\n };\n /**\n * Method to get the range color of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.setRangeColor = function (axis) {\n var rangeColors = getRangePalette(this.gauge.theme);\n axis.ranges.map(function (range, index) {\n range.rangeColor = range.color ? range.color : rangeColors[index % rangeColors.length];\n });\n };\n return AxisRenderer;\n}());\nexport { AxisRenderer };\n","import { stringToNumber, Size, calculateShapes, appendPath } from '../utils/helper';\nimport { getLocationFromAngle, PathOption } from '../utils/helper';\nimport { linear, getAngleFromValue, getCompleteArc } from '../utils/helper';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { animationComplete } from '../model/constants';\n/**\n * Specifies the Axis rendering for circular gauge\n */\nvar PointerRenderer = /** @class */ (function () {\n /**\n * Constructor for pointer renderer.\n * @private.\n */\n function PointerRenderer(gauge) {\n this.gauge = gauge;\n }\n /**\n * Method to render the axis pointers of the circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.drawPointers = function (axis, axisIndex, element, gauge, animate) {\n var _this = this;\n if (animate === void 0) { animate = true; }\n var pointerElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Pointers_' + axisIndex\n });\n var childElement;\n var range;\n axis.pointers.map(function (pointer, pointerIndex) {\n range = axis.visibleRange;\n pointer.pathElement = [];\n _this.calculatePointerRadius(axis, pointer);\n childElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_' + axisIndex + '_Pointer_' + pointerIndex\n });\n _this['draw' + pointer.type + 'Pointer'](axis, axisIndex, pointerIndex, childElement, gauge);\n _this.setPointerValue(axis, pointer, pointer.currentValue);\n pointerElement.appendChild(childElement);\n if (animate) {\n _this.doPointerAnimation(pointer, axis);\n }\n });\n element.appendChild(pointerElement);\n };\n /**\n * Measure the pointer length of the circular gauge.\n * @return {void}\n */\n PointerRenderer.prototype.calculatePointerRadius = function (axis, pointer) {\n var padding = 5;\n pointer.currentRadius = pointer.radius === null ?\n (axis.currentRadius - (axis.farSize + padding)) :\n stringToNumber(pointer.radius, axis.currentRadius);\n };\n /**\n * Method to render the needle pointer of the ciruclar gauge.\n * @return {void}\n */\n PointerRenderer.prototype.drawNeedlePointer = function (axis, axisIndex, index, parentElement, gauge) {\n var pointer = axis.pointers[index];\n var pointerRadius;\n var location;\n var direction;\n var mid = gauge.midPoint;\n var width = pointer.pointerWidth / 2;\n var rectDirection;\n // To render the needle\n location = getLocationFromAngle(0, pointer.currentRadius, mid);\n direction = 'M ' + mid.x + ' ' + (mid.y - width) + ' L ' + (location.x) + ' ' + mid.y +\n ' L ' + (mid.x) + ' ' + (mid.y + width) + ' Z';\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_Needle_' + index, pointer.color, pointer.border.width, pointer.border.color, null, '0', direction), parentElement, gauge));\n pointerRadius = stringToNumber(pointer.needleTail.length, pointer.currentRadius);\n // To render the rect element for touch\n rectDirection = 'M ' + mid.x + ' ' + (mid.y - width) + ' L ' + (location.x) + ' ' + (mid.y - width) +\n ' L ' + location.x + ' ' + (mid.y + width) + ' L ' + mid.x + ' ' + (mid.y + width);\n // To render the needle tail\n if (pointerRadius) {\n location = getLocationFromAngle(180, pointerRadius, gauge.midPoint);\n direction = 'M ' + mid.x + ' ' + (mid.y - width) +\n ' L ' + (location.x) + ' ' + (mid.y - width) +\n ' L ' + (location.x) + ' ' + (mid.y + width) +\n ' L ' + (mid.x) + ' ' + (mid.y + width) + ' Z';\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_NeedleTail_' + index, pointer.needleTail.color, pointer.needleTail.border.width, pointer.needleTail.border.color, null, '0', direction), parentElement, gauge));\n rectDirection += ' L ' + location.x + ' ' + (mid.y + width) + ' L ' + location.x + ' ' + (mid.y - width);\n }\n // To render the cap\n if (pointer.cap.radius) {\n pointer.pathElement.push(appendPath(calculateShapes(mid, 'Circle', new Size(pointer.cap.radius * 2, pointer.cap.radius * 2), '', new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_NeedleCap_' + index, pointer.cap.color, pointer.cap.border.width, pointer.cap.border.color, null, '0', '', '')), parentElement, gauge, 'Ellipse'));\n }\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_NeedleRect_' + index, 'transparent', 0, 'transpanret', null, '0', rectDirection + ' Z'), parentElement, gauge));\n };\n /**\n * Method to set the pointer value of the circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.setPointerValue = function (axis, pointer, value) {\n var location = this.gauge.midPoint;\n var isClockWise = axis.direction === 'ClockWise';\n var startAngle = getAngleFromValue(axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var endAngle = getAngleFromValue(value, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n endAngle = isClockWise ? endAngle : [startAngle, startAngle = endAngle][0];\n pointer.pathElement.map(function (element) {\n if (pointer.type === 'RangeBar') {\n element.setAttribute('d', getCompleteArc(location, startAngle, endAngle, pointer.currentRadius, (pointer.currentRadius - pointer.pointerWidth)));\n }\n else {\n element.setAttribute('transform', 'rotate(' + getAngleFromValue(value, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise) + ',' + location.x + ',' + location.y + ')');\n }\n element.setAttribute('aria-label', pointer.description || 'Pointer:' + value.toString());\n });\n };\n /**\n * Method to render the marker pointer of the ciruclar gauge.\n * @return {void}\n */\n PointerRenderer.prototype.drawMarkerPointer = function (axis, axisIndex, index, parentElement, gauge) {\n var pointer = axis.pointers[index];\n var location = getLocationFromAngle(0, pointer.currentRadius, gauge.midPoint);\n pointer.pathElement.push(appendPath(calculateShapes(location, pointer.markerShape, new Size(pointer.markerWidth, pointer.markerHeight), pointer.imageUrl, new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_Marker_' + index, pointer.color, pointer.border.width, pointer.border.color, null, '0', '', '')), parentElement, gauge, pointer.markerShape === 'Circle' ? 'Ellipse' : (pointer.markerShape === 'Image' ? 'Image' : 'Path')));\n };\n /**\n * Method to render the range bar pointer of the ciruclar gauge.\n * @return {void}\n */\n PointerRenderer.prototype.drawRangeBarPointer = function (axis, axisIndex, index, parentElement, gauge) {\n var pointer = axis.pointers[index];\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_RangeBar_' + index, pointer.color, pointer.border.width, pointer.border.color, 1, '0', ''), parentElement, gauge));\n };\n /**\n * Method to perform the animation of the pointer in circular gauge.\n * @return {void}\n */\n PointerRenderer.prototype.doPointerAnimation = function (pointer, axis) {\n var _this = this;\n var startValue = axis.visibleRange.min;\n var endValue = pointer.currentValue;\n if (pointer.animation.enable && startValue !== endValue && this.gauge.animatePointer) {\n pointer.pathElement.map(function (element) {\n if (pointer.type === 'RangeBar') {\n _this.performRangeBarAnimation(element, startValue, endValue, axis, pointer, pointer.currentRadius, (pointer.currentRadius - pointer.pointerWidth));\n }\n else {\n _this.performNeedleAnimation(element, startValue, endValue, axis, pointer, pointer.currentRadius, (pointer.currentRadius - pointer.pointerWidth));\n }\n });\n }\n };\n /**\n * Perform the needle and marker pointer animation for circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.performNeedleAnimation = function (element, start, end, axis, pointer, radius, innerRadius) {\n var _this = this;\n var isClockWise = axis.direction === 'ClockWise';\n var startAngle = getAngleFromValue(start, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var pointAngle = getAngleFromValue(end, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var endAngle = startAngle > pointAngle ? (pointAngle + 360) : pointAngle;\n var sweepAngle;\n new Animation({}).animate(element, {\n duration: pointer.animation.duration,\n progress: function (args) {\n sweepAngle = (start < end || Math.round(startAngle) === Math.round(endAngle)) ?\n isClockWise ? (endAngle - startAngle) : (endAngle - startAngle - 360) :\n isClockWise ? (endAngle - startAngle - 360) : (endAngle - startAngle);\n element.style.animation = 'None';\n element.setAttribute('transform', 'rotate(' + linear(args.timeStamp, startAngle, sweepAngle, args.duration) + ',' +\n _this.gauge.midPoint.x.toString() + ',' + _this.gauge.midPoint.y.toString() + ')');\n },\n end: function (model) {\n _this.setPointerValue(axis, pointer, end);\n if (pointer.type === 'Marker' || (element.id.indexOf('_Pointer_NeedleCap') >= 0)) {\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n }\n });\n };\n /**\n * Perform the range bar pointer animation for circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.performRangeBarAnimation = function (element, start, end, axis, pointer, radius, innerRadius) {\n var _this = this;\n var isClockWise = axis.direction === 'ClockWise';\n var startAngle = getAngleFromValue(start, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var minAngle = getAngleFromValue(axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var pointAngle = getAngleFromValue(end, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var sweepAngle;\n var endAngle = startAngle > pointAngle ? (pointAngle + 360) : pointAngle;\n new Animation({}).animate(element, {\n duration: pointer.animation.duration,\n progress: function (arg) {\n element.style.animation = 'None';\n sweepAngle = (start < end || Math.round(startAngle) === Math.round(endAngle)) ?\n isClockWise ? (endAngle - startAngle) : (endAngle - startAngle - 360) :\n isClockWise ? (endAngle - startAngle - 360) : (endAngle - startAngle);\n if (isClockWise) {\n element.setAttribute('d', getCompleteArc(_this.gauge.midPoint, minAngle, linear(arg.timeStamp, startAngle, sweepAngle, arg.duration) + 0.0001, radius, innerRadius));\n }\n else {\n element.setAttribute('d', getCompleteArc(_this.gauge.midPoint, linear(arg.timeStamp, startAngle, sweepAngle, arg.duration), minAngle + 0.0001, radius, innerRadius));\n }\n },\n end: function (model) {\n _this.setPointerValue(axis, pointer, end);\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n });\n };\n return PointerRenderer;\n}());\nexport { PointerRenderer };\n","import { createElement } from '@syncfusion/ej2-base';\nimport { calculateSum, VisibleLabels, measureText } from '../utils/helper';\nimport { Size, Rect, stringToNumber, getLabelFormat } from '../utils/helper';\nimport { axisLabelRender } from '../model/constants';\nimport { AxisRenderer } from './axis-renderer';\nimport { PointerRenderer } from './pointer-renderer';\n/**\n * Specifies the CircularGauge Axis Layout\n */\nvar labelPadding = 10;\nvar AxisLayoutPanel = /** @class */ (function () {\n function AxisLayoutPanel(gauge) {\n this.gauge = gauge;\n this.axisRenderer = new AxisRenderer(gauge);\n this.pointerRenderer = new PointerRenderer(gauge);\n }\n /**\n * Measure the calculate the axis size and radius.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.measureAxis = function (rect) {\n this.measureAxisSize(this.gauge, rect);\n this.calculateAxesRadius();\n };\n /**\n * Measure to calculate the axis radius of the circular gauge.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateAxesRadius = function () {\n var totalRadius;\n var currentRadius;\n var rangeMaximumRadius = 0;\n for (var _i = 0, _a = this.gauge.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n totalRadius = (Math.min(axis.rect.width, axis.rect.height) / 2);\n currentRadius = axis.radius != null ? stringToNumber(axis.radius, totalRadius) : totalRadius;\n rangeMaximumRadius = Math.max.apply(Math, axis.ranges.map(function (value) {\n return value.radius ?\n (value.radius.indexOf('%') < 0 ? 100 : parseInt(value.radius, 10)) : 0;\n }));\n currentRadius = (rangeMaximumRadius > 100 && axis.radius == null) ?\n (currentRadius * 100) / rangeMaximumRadius : currentRadius;\n axis.currentRadius = currentRadius - axis.nearSize;\n axis.visibleRange.interval = this.calculateNumericInterval(axis, axis.rect);\n this.calculateVisibleLabels(axis);\n }\n };\n /**\n * Measure to calculate the axis size.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.measureAxisSize = function (gauge, rect) {\n var _this = this;\n var sum;\n this.computeSize(gauge.axes, rect);\n gauge.axes.map(function (axis, index) {\n sum = calculateSum(index, _this.farSizes.length - 1, _this.farSizes);\n axis.rect = new Rect(rect.x + sum, rect.y + sum, rect.width - (sum * 2), rect.height - (sum * 2));\n });\n };\n /**\n * Calculate the axis values of the circular gauge.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateAxisValues = function (rect) {\n for (var _i = 0, _a = this.gauge.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n this.calculateVisibleRange(axis, rect);\n this.calculateVisibleLabels(axis);\n }\n };\n /**\n * Calculate the visible range of an axis.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateVisibleRange = function (axis, rect) {\n var interval = axis.majorTicks.interval;\n var minimumValue = Math.min(axis.minimum === null ? 0 : axis.minimum, axis.maximum);\n var maximumValue = Math.max(axis.minimum, axis.maximum === null ? 100 : axis.maximum);\n axis.pointers.map(function (pointer) {\n pointer.currentValue = pointer.value !== null ?\n pointer.value < minimumValue ? minimumValue : pointer.value > maximumValue ? maximumValue : pointer.value\n : minimumValue;\n minimumValue = axis.minimum === null ? Math.min(pointer.currentValue, minimumValue) : minimumValue;\n maximumValue = axis.maximum === null ? Math.max(pointer.currentValue, maximumValue) : maximumValue;\n });\n minimumValue = (minimumValue === maximumValue) ?\n (interval !== null ? minimumValue - interval : minimumValue - 1) : minimumValue;\n axis.visibleRange = { min: minimumValue, max: maximumValue, interval: interval };\n axis.visibleRange.interval = this.calculateNumericInterval(axis, rect);\n };\n /**\n * Calculate the numeric intervals of an axis range.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateNumericInterval = function (axis, rect) {\n if (axis.majorTicks.interval !== null) {\n return axis.majorTicks.interval;\n }\n var totalAngle = axis.endAngle - axis.startAngle;\n totalAngle = totalAngle <= 0 ? (totalAngle + 360) : totalAngle;\n return this.calculateNiceInterval(axis.visibleRange.max, axis.visibleRange.min, axis.currentRadius ? axis.currentRadius : (rect.width / 2), totalAngle);\n };\n /**\n * Calculate the nice interval of an axis range.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateNiceInterval = function (maxValue, minValue, radius, degree) {\n var delta = maxValue - minValue;\n var circumference = 2 * Math.PI * radius * (degree / 360);\n var desiredIntervalsCount = Math.max((circumference * ((0.533 * 3) / 100)), 1);\n var niceInterval = delta / desiredIntervalsCount;\n var minInterval = Math.pow(10, Math.floor(Math.log(niceInterval) / Math.log(10)));\n for (var _i = 0, _a = [10, 5, 2, 1]; _i < _a.length; _i++) {\n var interval = _a[_i];\n var currentInterval = minInterval * interval;\n if (desiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n };\n /**\n * Calculate the visible labels of an axis.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateVisibleLabels = function (axis) {\n var style = axis.labelStyle;\n var customLabelFormat = style.format && style.format.match('{value}') !== null;\n var format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(style.format), useGrouping: this.gauge.useGroupingSeparator\n });\n var argsData;\n axis.visibleLabels = [];\n for (var i = axis.visibleRange.min, interval = axis.visibleRange.interval, max = axis.visibleRange.max; (i <= max && interval); i += interval) {\n argsData = {\n cancel: false, name: axisLabelRender, axis: axis,\n text: customLabelFormat ? style.format.replace(new RegExp('{value}', 'g'), format(i)) :\n format(i),\n value: i\n };\n this.gauge.trigger(axisLabelRender, argsData);\n if (!argsData.cancel) {\n axis.visibleLabels.push(new VisibleLabels(argsData.text, i));\n }\n }\n this.getMaxLabelWidth(this.gauge, axis);\n };\n /**\n * Measure the axes available size.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.computeSize = function (axes, rect) {\n var lineSize;\n var outerHeight;\n var innerHeight;\n var isMajorTickOutside;\n var isMinorTickOutside;\n var isLabelOutside;\n var axisPadding = 5;\n var majorTickOffset = 0;\n var minorTickOffset = 0;\n var labelOffset = 0;\n this.farSizes = [];\n this.calculateAxisValues(rect);\n for (var _i = 0, axes_1 = axes; _i < axes_1.length; _i++) {\n var axis = axes_1[_i];\n lineSize = (axis.lineStyle.width / 2);\n outerHeight = 0;\n innerHeight = 0;\n isMajorTickOutside = axis.majorTicks.position === 'Outside';\n majorTickOffset = axis.majorTicks.offset;\n isMinorTickOutside = axis.minorTicks.position === 'Outside';\n minorTickOffset = axis.minorTicks.offset;\n isLabelOutside = axis.labelStyle.position === 'Outside';\n labelOffset = axis.labelStyle.offset;\n // Calculating the outer space of the axis\n outerHeight += !(isMajorTickOutside && isMinorTickOutside && isLabelOutside) ? axisPadding : 0;\n outerHeight += (isMajorTickOutside ? (axis.majorTicks.height + lineSize) : 0) +\n (isLabelOutside ? (axis.maxLabelSize.height + labelPadding + labelOffset) : 0) +\n ((isMinorTickOutside && !isMajorTickOutside) ? (axis.minorTicks.height + lineSize) : 0) + lineSize;\n outerHeight += (isMajorTickOutside && isMinorTickOutside) ? Math.max(majorTickOffset, minorTickOffset) :\n (isMajorTickOutside ? majorTickOffset : isMinorTickOutside ? minorTickOffset : 0);\n // Calculating the inner space of the axis\n innerHeight += (!isMajorTickOutside ? (axis.majorTicks.height + lineSize) : 0) +\n (!isLabelOutside ? (axis.maxLabelSize.height + labelPadding + labelOffset) : 0) +\n ((!isMinorTickOutside && isMajorTickOutside) ? (axis.minorTicks.height + lineSize) : 0) + lineSize;\n innerHeight += (!isMajorTickOutside && !isMinorTickOutside) ? Math.max(majorTickOffset, minorTickOffset) :\n (!isMajorTickOutside ? majorTickOffset : !isMinorTickOutside ? minorTickOffset : 0);\n if (this.farSizes[this.farSizes.length - 1]) {\n this.farSizes[this.farSizes.length - 1] += (innerHeight + outerHeight);\n }\n axis.nearSize = outerHeight - axisPadding;\n axis.farSize = innerHeight;\n outerHeight = (this.gauge.axes.length === (this.farSizes.length + 1)) ? 0 : outerHeight;\n this.farSizes.push(outerHeight);\n }\n };\n /**\n * To render the Axis element of the circular gauge.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.renderAxes = function (animate) {\n var _this = this;\n if (animate === void 0) { animate = true; }\n var gauge = this.gauge;\n var renderer = this.axisRenderer;\n var element;\n var axesElements = gauge.renderer.createGroup({\n 'id': gauge.element.id + '_AxesCollection',\n 'clip-path': 'url(#' + gauge.element.id + '_GaugeAreaClipRect_' + ')'\n });\n // To append the secondary element for annotation and tooltip\n gauge.element.appendChild(createElement('div', {\n id: gauge.element.id + '_Secondary_Element',\n styles: 'position: relative'\n }));\n gauge.axes.map(function (axis, index) {\n element = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Group_' + index\n });\n renderer.drawAxisOuterLine(axis, index, element, gauge);\n renderer.drawAxisRange(axis, index, element, gauge);\n renderer.drawAxisLine(axis, index, element, gauge);\n renderer.drawMajorTickLines(axis, index, element, gauge);\n renderer.drawMinorTickLines(axis, index, element, gauge);\n renderer.drawAxisLabels(axis, index, element, gauge);\n _this.pointerRenderer.drawPointers(axis, index, element, gauge, animate);\n if (gauge.annotationsModule) {\n gauge.annotationsModule.renderAnnotation(axis, index);\n }\n axesElements.appendChild(element);\n });\n // For append clip rect for axes\n gauge.svgObject.appendChild(gauge.renderer.drawClipPath({\n 'id': gauge.element.id + '_GaugeAreaClipRect_',\n 'x': 0, 'y': 0,\n 'width': gauge.availableSize.width,\n 'height': gauge.availableSize.height,\n 'fill': 'transparent', 'stroke': 'transparent'\n }));\n gauge.svgObject.appendChild(axesElements);\n };\n /**\n * Calculate maximum label width for the axis.\n * @return {void}\n */\n AxisLayoutPanel.prototype.getMaxLabelWidth = function (gauge, axis) {\n axis.maxLabelSize = new Size(0, 0);\n for (var _i = 0, _a = axis.visibleLabels; _i < _a.length; _i++) {\n var label = _a[_i];\n label.size = measureText(label.text, axis.labelStyle.font);\n axis.maxLabelSize.width = label.size.width > axis.maxLabelSize.width ?\n label.size.width : axis.maxLabelSize.width;\n axis.maxLabelSize.height = label.size.height > axis.maxLabelSize.height ?\n label.size.height : axis.maxLabelSize.height;\n }\n };\n return AxisLayoutPanel;\n}());\nexport { AxisLayoutPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Circular Gauge\n */\nimport { Property, NotifyPropertyChanges, Component, Complex, Browser } from '@syncfusion/ej2-base';\nimport { Event, SvgRenderer, EventHandler, Collection, Internationalization } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { TextOption, textElement, RectOption, getAngleFromLocation, getValueFromAngle, removeElement } from './utils/helper';\nimport { Size, stringToNumber, measureText, Rect, GaugeLocation, getElement, getPointer, setStyles, toPixel } from './utils/helper';\nimport { getAngleFromValue, getPathArc } from './utils/helper';\nimport { Border, Margin, Font, TooltipSettings } from './model/base';\nimport { Axis } from './axes/axis';\nimport { Annotations } from './annotations/annotations';\nimport { GaugeTooltip } from './user-interaction/tooltip';\nimport { load, loaded, gaugeMouseMove, gaugeMouseLeave, gaugeMouseDown } from './model/constants';\nimport { gaugeMouseUp, dragEnd, dragMove, dragStart, resized } from './model/constants';\nimport { AxisLayoutPanel } from './axes/axis-panel';\n/**\n * Represents the Circular gauge control.\n * ```html\n *
    \n * \n * ```\n */\nvar CircularGauge = /** @class */ (function (_super) {\n __extends(CircularGauge, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function CircularGauge(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * To create svg object, renderer and binding events for the container.\n */\n CircularGauge.prototype.preRender = function () {\n this.unWireEvents();\n this.trigger(load, { gauge: this });\n this.themeEffect();\n this.initPrivateVariable();\n this.setCulture();\n this.createSvg();\n this.wireEvents();\n };\n CircularGauge.prototype.themeEffect = function () {\n if (this.theme === 'Highcontrast') {\n this.titleStyle.color = this.titleStyle.color || '#FFFFFF';\n this.setThemeColors('#FFFFFF', '#FFFFFF');\n }\n else {\n this.titleStyle.color = this.titleStyle.color || '#424242';\n this.setThemeColors('#212121', '#757575');\n }\n };\n CircularGauge.prototype.setThemeColors = function (labelcolor, others) {\n for (var _i = 0, _a = this.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n axis.lineStyle.color = axis.lineStyle.color || others;\n axis.labelStyle.font.color = axis.labelStyle.font.color || labelcolor;\n axis.majorTicks.color = axis.majorTicks.color || others;\n axis.minorTicks.color = axis.minorTicks.color || others;\n for (var _b = 0, _c = axis.pointers; _b < _c.length; _b++) {\n var pointer = _c[_b];\n pointer.color = pointer.color || others;\n pointer.needleTail.color = pointer.needleTail.color || others;\n pointer.needleTail.border.color = pointer.needleTail.border.color || others;\n pointer.cap.color = pointer.cap.color || others;\n pointer.cap.border.color = pointer.cap.border.color || others;\n }\n }\n };\n /**\n * To render the circular gauge elements\n */\n CircularGauge.prototype.render = function () {\n this.calculateBounds();\n this.renderElements();\n };\n /**\n * Method to unbind events for circular gauge\n */\n CircularGauge.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMove);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'contextmenu', this.gaugeRightClick);\n EventHandler.remove(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize);\n };\n /**\n * Method to bind events for circular gauge\n */\n CircularGauge.prototype.wireEvents = function () {\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n EventHandler.add(this.element, 'contextmenu', this.gaugeRightClick, this);\n EventHandler.add(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize.bind(this));\n /*! Apply the style for circular gauge */\n this.setGaugeStyle(this.element);\n };\n /**\n * Handles the mouse move.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.mouseMove = function (e) {\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseMove);\n this.trigger(gaugeMouseMove, args);\n var dragArgs;\n var tooltip = this.tooltipModule;\n if (!args.cancel) {\n if (this.tooltip.enable && tooltip) {\n if (args.target.id.indexOf('_Pointer_') >= 0 && !this.activePointer) {\n tooltip.renderTooltip(args.target);\n }\n else {\n tooltip.ejTooltip.close();\n }\n }\n if (this.enablePointerDrag && this.activePointer) {\n dragArgs = {\n axis: this.activeAxis,\n pointer: this.activePointer,\n previousValue: this.activePointer.currentValue,\n name: dragMove,\n currentValue: null\n };\n this.pointerDrag(new GaugeLocation(args.x, args.y));\n dragArgs.currentValue = this.activePointer.currentValue;\n this.trigger(dragMove, dragArgs);\n }\n }\n return false;\n };\n /**\n * Handles the mouse leave.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.mouseLeave = function (e) {\n this.activeAxis = null;\n this.activePointer = null;\n this.svgObject.setAttribute('cursor', 'auto');\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseLeave);\n this.trigger(gaugeMouseLeave, args);\n if (this.tooltip.enable && this.tooltipModule) {\n this.tooltipModule.ejTooltip.close();\n }\n return false;\n };\n /**\n * Handles the mouse right click.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.gaugeRightClick = function (event) {\n if (event.buttons === 2 || event.pointerType === 'touch') {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n /**\n * Handles the pointer draf while mouse move on gauge.\n * @private\n */\n CircularGauge.prototype.pointerDrag = function (location) {\n var axis = this.activeAxis;\n var range = axis.visibleRange;\n var value = getValueFromAngle(getAngleFromLocation(this.midPoint, location), range.max, range.min, axis.startAngle, axis.endAngle, axis.direction === 'ClockWise');\n if (value >= range.min && value <= range.max) {\n this.activePointer.currentValue = value;\n this.activePointer.value = value;\n this.gaugeAxisLayoutPanel.pointerRenderer.setPointerValue(axis, this.activePointer, value);\n }\n };\n /**\n * Handles the mouse down on gauge.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.gaugeOnMouseDown = function (e) {\n var currentPointer;\n var args = this.getMouseArgs(e, 'touchstart', gaugeMouseDown);\n this.trigger(gaugeMouseDown, args);\n if (!args.cancel && args.target.id.indexOf('_Pointer_') >= 0 &&\n args.target.id.indexOf(this.element.id + '_Axis_') >= 0) {\n currentPointer = getPointer(args.target.id, this);\n this.activeAxis = this.axes[currentPointer.axisIndex];\n this.activePointer = this.activeAxis.pointers[currentPointer.pointerIndex];\n this.trigger(dragStart, {\n axis: this.activeAxis,\n name: dragStart,\n pointer: this.activePointer,\n currentValue: this.activePointer.currentValue\n });\n this.svgObject.setAttribute('cursor', 'pointer');\n }\n return false;\n };\n /**\n * Handles the mouse end.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.mouseEnd = function (e) {\n var args = this.getMouseArgs(e, 'touchend', gaugeMouseUp);\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || e.type === 'touchend';\n var tooltipInterval;\n var tooltip = this.tooltipModule;\n this.trigger(gaugeMouseUp, args);\n if (this.activeAxis && this.activePointer) {\n this.trigger(dragEnd, {\n name: dragEnd,\n axis: this.activeAxis,\n pointer: this.activePointer,\n currentValue: this.activePointer.currentValue\n });\n if (!args.cancel && isTouch && this.tooltip.enable && tooltip) {\n if (args.target.id.indexOf('_Pointer_') >= 0) {\n tooltip.renderTooltip(args.target);\n tooltipInterval = window.setTimeout(function () {\n tooltip.ejTooltip.close();\n }, 2000);\n }\n }\n this.activeAxis = null;\n this.activePointer = null;\n }\n this.svgObject.setAttribute('cursor', 'auto');\n return false;\n };\n /**\n * Handles the mouse event arguments.\n * @return {IMouseEventArgs}\n * @private\n */\n CircularGauge.prototype.getMouseArgs = function (e, type, name) {\n var rect = this.element.getBoundingClientRect();\n var location = new GaugeLocation(-rect.left, -rect.top);\n var isTouch = (e.type === type);\n location.x += isTouch ? e.changedTouches[0].clientX : e.clientX;\n location.y += isTouch ? e.changedTouches[0].clientY : e.clientY;\n return {\n cancel: false, name: name,\n x: location.x, y: location.y,\n target: isTouch ? e.target : e.target\n };\n };\n /**\n * Handles the gauge resize.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.gaugeResize = function (e) {\n var _this = this;\n var args = {\n gauge: this,\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n name: resized,\n currentSize: new Size(0, 0)\n };\n this.animatePointer = false;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n if (this.element.classList.contains('e-circulargauge')) {\n this.resizeTo = window.setTimeout(function () {\n _this.createSvg();\n _this.calculateBounds();\n _this.renderElements();\n args.currentSize = _this.availableSize;\n _this.trigger(resized, args);\n }, 500);\n }\n return false;\n };\n /**\n * Applying styles for circular gauge elements\n */\n CircularGauge.prototype.setGaugeStyle = function (element) {\n element.style.touchAction = this.enablePointerDrag ? 'none' : 'element';\n element.style.msTouchAction = this.enablePointerDrag ? 'none' : 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n };\n /**\n * Method to set culture for gauge\n */\n CircularGauge.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * Methods to create svg element for circular gauge.\n */\n CircularGauge.prototype.createSvg = function () {\n this.removeSvg();\n this.calculateSvgSize();\n this.svgObject = this.renderer.createSvg({\n id: this.element.id + '_svg',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n };\n /**\n * To Remove the SVG from circular gauge.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n /**\n * To initialize the circular gauge private variable.\n * @private\n */\n CircularGauge.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.gaugeAxisLayoutPanel = new AxisLayoutPanel(this);\n this.animatePointer = true;\n };\n /**\n * To calculate the size of the circular gauge element.\n */\n CircularGauge.prototype.calculateSvgSize = function () {\n var containerWidth = this.element.offsetWidth;\n var containerHeight = this.element.offsetHeight;\n var width = stringToNumber(this.width, containerWidth) || containerWidth || 600;\n var height = stringToNumber(this.height, containerHeight) || containerHeight || 450;\n this.availableSize = new Size(width, height);\n };\n /**\n * Method to calculate the availble size for circular gauge.\n */\n CircularGauge.prototype.calculateBounds = function () {\n var padding = 5;\n var margin = this.margin;\n // Title Height;\n var titleHeight = 0;\n if (this.title) {\n titleHeight = measureText(this.title, this.titleStyle).height + padding;\n }\n var top = margin.top + titleHeight + this.border.width;\n var left = margin.left + this.border.width;\n var width = this.availableSize.width - left - margin.right - this.border.width;\n var height = this.availableSize.height - top - this.border.width - margin.bottom;\n var radius = Math.min(width, height) / 2;\n var rect = new Rect((left + (width / 2) - radius), (top + (height / 2) - radius), radius * 2, radius * 2);\n var centerX = this.centerX !== null ?\n stringToNumber(this.centerX, this.availableSize.width) : rect.x + (rect.width / 2);\n var centerY = this.centerY !== null ?\n stringToNumber(this.centerY, this.availableSize.height) : rect.y + (rect.height / 2);\n this.midPoint = new GaugeLocation(centerX, centerY);\n this.gaugeAxisLayoutPanel.measureAxis(rect);\n };\n /**\n * To render elements for circular gauge\n */\n CircularGauge.prototype.renderElements = function (animate) {\n if (animate === void 0) { animate = true; }\n this.renderBorder();\n this.renderTitle();\n this.gaugeAxisLayoutPanel.renderAxes(animate);\n this.element.appendChild(this.svgObject);\n this.trigger(loaded, { gauge: this });\n };\n /**\n * Method to render the title for circular gauge.\n */\n CircularGauge.prototype.renderTitle = function () {\n if (this.title) {\n var size = measureText(this.title, this.titleStyle);\n var options = new TextOption(this.element.id + '_CircularGaugeTitle', this.availableSize.width / 2, this.margin.top + 3 * (size.height / 4), 'middle', this.title);\n var element = textElement(options, this.titleStyle, this.titleStyle.color, this.svgObject, '');\n element.setAttribute('aria-label', this.description || this.title);\n element.setAttribute('tabindex', this.tabIndex.toString());\n }\n };\n /**\n * Method to render the border for circular gauge.\n */\n CircularGauge.prototype.renderBorder = function () {\n var borderWidth = this.border.width;\n if (borderWidth > 0 || (this.background !== null && this.background !== 'transparent')) {\n this.svgObject.appendChild(this.renderer.drawRectangle(new RectOption(this.element.id + '_CircularGaugeBorder', this.background, this.border, null, new Rect(borderWidth / 2, borderWidth / 2, this.availableSize.width - borderWidth, this.availableSize.height - borderWidth))));\n }\n };\n /**\n * Method to set the pointer value dynamically for circular gauge.\n */\n CircularGauge.prototype.setPointerValue = function (axisIndex, pointerIndex, value) {\n var _this = this;\n var axis = this.axes[axisIndex];\n var pointer = axis.pointers[pointerIndex];\n var pointerRadius = pointer.currentRadius;\n var enableAnimation = pointer.animation.enable;\n value = value < axis.visibleRange.min ? axis.visibleRange.min : value;\n value = value > axis.visibleRange.max ? axis.visibleRange.max : value;\n pointer.pathElement.map(function (element) {\n if (pointer.type === 'RangeBar') {\n setStyles(element, pointer.color, pointer.border);\n if (enableAnimation) {\n _this.gaugeAxisLayoutPanel.pointerRenderer.performRangeBarAnimation(element, pointer.currentValue, value, axis, pointer, pointerRadius, (pointerRadius - pointer.pointerWidth));\n }\n else {\n _this.gaugeAxisLayoutPanel.pointerRenderer.setPointerValue(axis, pointer, value);\n }\n }\n else {\n if (element.id.indexOf('_Pointer_NeedleCap_') >= 0) {\n setStyles(element, pointer.cap.color, pointer.cap.border);\n }\n else if (element.id.indexOf('_Pointer_NeedleTail_') >= 0) {\n setStyles(element, pointer.needleTail.color, pointer.needleTail.border);\n }\n else if (element.id.indexOf('_Pointer_NeedleRect_') >= 0) {\n setStyles(element, 'transparent', { color: 'transparent', width: 0 });\n }\n else {\n setStyles(element, pointer.color, pointer.border);\n }\n if (enableAnimation) {\n _this.gaugeAxisLayoutPanel.pointerRenderer.performNeedleAnimation(element, pointer.currentValue, value, axis, pointer, pointerRadius, (pointerRadius - pointer.pointerWidth));\n }\n else {\n _this.gaugeAxisLayoutPanel.pointerRenderer.setPointerValue(axis, pointer, value);\n }\n }\n });\n pointer.currentValue = value;\n pointer.value = value;\n };\n /**\n * Method to set the annotation content dynamically for circular gauge.\n */\n CircularGauge.prototype.setAnnotationValue = function (axisIndex, annotationIndex, content) {\n var isElementExist = getElement(this.element.id + '_Annotations_' + axisIndex) !== null;\n var element = getElement(this.element.id + '_Annotations_' + axisIndex) ||\n this.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.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 * Default - Enables/Disables Default 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})(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 * 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/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 = {}));\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 */\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 */\n this.horizontalAlignment = 'Auto';\n /**\n * Sets/Gets how the element has to be vertically arranged with respect to 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 */\n this.relativeMode = 'Point';\n /**\n * Sets whether the element has to be transformed based on its parent or not\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 * Gets/Sets the corners of the rectangular bounds\n */\n this.corners = 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 */\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 stop of gradient\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 * Defines the gradient of styles\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 */\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 * Defines the radial gradient of styles\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 */\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 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);\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) {\n switch (child.horizontalAlignment) {\n case 'Auto':\n case 'Left':\n x += child.margin.left;\n break;\n case 'Stretch':\n case 'Center':\n x -= child.desiredSize.width * child.pivot.x;\n break;\n case 'Right':\n x -= child.desiredSize.width + child.margin.right;\n break;\n }\n switch (child.verticalAlignment) {\n case 'Auto':\n case 'Top':\n y += child.margin.top;\n break;\n case 'Stretch':\n case 'Center':\n y -= child.desiredSize.height * child.pivot.y;\n break;\n case 'Bottom':\n y -= child.desiredSize.height + child.margin.bottom;\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 annotation\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 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 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 IconShape\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 * Defines the behavior of selector\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 behavior of the selected objects\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.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 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()\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()\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 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 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.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 annotationcontent.width = this.width - annotation.margin.left - annotation.margin.right;\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, 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 = document.createElement('div');\n div.setAttribute('id', this.element.id + '_ruler_space');\n div.style.height = rulerGeometry.height + 'px';\n div.style.width = rulerGeometry.width + 'px';\n div.style.cssFloat = 'left';\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';\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 = document.createElement('canvas');\n canvasObj.setAttribute('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.drawImage = function (canvas, obj) {\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 imageObj.onload = function () {\n ctx_1.rotate(obj.angle * Math.PI / 180);\n var image = new Image();\n image.src = obj.source;\n _this.image(ctx_1, image, obj.x, obj.y, obj.width, obj.height, obj);\n ctx_1.rotate(-(obj.angle * Math.PI / 180));\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 = document.createElement('canvas');\n canvas1.setAttribute('width', width.toString());\n canvas1.setAttribute('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));\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 } 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) {\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) {\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 htmlElement.setAttribute('style', 'height:' + (element.actualSize.height) + 'px; width:' + (element.actualSize.width) +\n 'px;left:' + (element.corners.x) + 'px; top:' + ((element.corners.y)) + 'px;' +\n 'position:absolute;transform:rotate(' + element.parentTransform + 'deg);' +\n 'pointer-events:all;visibility:' + ((element.visible) ? 'visible' : 'hidden') + ';');\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:' + ((element.visible) ? 'visible' : 'hidden') + ';');\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) {\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));\n var pos = { x: 0, y: 0 };\n var x = 0;\n var y = 0;\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 { getDiagramLayer, getExpandCollapseLayer, getPortsLayer, getNativeLayer } 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 { 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 this.isSvgMode = true;\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) {\n if (element instanceof Container) {\n this.renderContainer(element, canvas, htmlLayer, transform, parentSvg, createParent);\n }\n else if (element instanceof ImageElement) {\n this.renderImageElement(element, canvas, transform, parentSvg);\n }\n else if (element instanceof PathElement) {\n this.renderPathElement(element, canvas, transform, parentSvg);\n }\n else if (element instanceof TextElement) {\n this.renderTextElement(element, canvas, transform, parentSvg);\n }\n else if (element instanceof DiagramNativeElement) {\n this.renderNativeElement(element, canvas, transform, parentSvg);\n }\n else if (element instanceof DiagramHtmlElement) {\n this.renderHTMLElement(element, canvas, htmlLayer, transform, parentSvg);\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,\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) {\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) {\n var options = this.getBaseAttributes(element, transform);\n options.cornerRadius = 0;\n this.renderer.drawRectangle(canvas, options, this.diagramId, undefined, undefined, parentSvg);\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 = '';\n var ariaLabel = element.description ? element.description : element.content ? element.content : element.id;\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) {\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) {\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);\n }\n };\n DiagramRenderer.prototype.renderImageElement = function (element, canvas, transform, parentSvg) {\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);\n };\n DiagramRenderer.prototype.renderContainer = function (group, canvas, htmlLayer, transform, parentSvg, createParent) {\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);\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 //diagram layer\n if (svgMode) {\n var diagramLayer = getDiagramLayer(this.diagramId);\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 = getPortsLayer(this.diagramId);\n portsLayer.setAttribute('transform', 'translate('\n + (transform.tx * transform.scale) + ',' + (transform.ty * transform.scale) + '),scale('\n + transform.scale + ')');\n //expandlayer\n var expandLayer = getExpandCollapseLayer(this.diagramId);\n expandLayer.setAttribute('transform', 'translate('\n + (transform.tx * transform.scale) + ',' + (transform.ty * transform.scale) + '),scale('\n + transform.scale + ')');\n //nativelayer\n var nativeLayer = getNativeLayer(this.diagramId);\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 };\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 BackgroundImage of diagram\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 PageSettings\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 * Defines gridlines\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 public properties of diagram\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 for the Diagram Ruler\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 rulers\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 * data source defines the basic unit of diagram\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 } 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 { 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 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() {\n return _super !== null && _super.apply(this, arguments) || 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 (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 if ((!(this instanceof ConnectorDrawingTool)) && ((this.endPoint === 'ConnectorSourceEnd' &&\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');\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');\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');\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 _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 if (this.objectType !== 'Port') {\n if (args.source instanceof Node || args.source instanceof Connector) {\n var redoObject = { nodes: [], connectors: [] };\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 this.commandHandler.updateSelector();\n if (historyAdded) {\n this.commandHandler.endGroupAction();\n }\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 this.blocked = this.updateSize(args.source, this.currentPosition, this.prevPosition, this.corner);\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 this.blocked = !(this.updateSize(args.source, this.startPosition, this.currentPosition, this.corner));\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.getPivot = function () {\n switch (this.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 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 ResizeTool.prototype.updateSize = function (shape, startPoint, endPoint, corner) {\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 = this.commandHandler.snappingModule\n && this.commandHandler.snappingModule.canSnap();\n var snapLine = snapEnabled ? this.commandHandler.snappingModule.getLayer() : null;\n var matrix;\n matrix = identityMatrix();\n rotateMatrix(matrix, -shape.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 initialBounds = this.initialBounds;\n var diff;\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, this.initialBounds) : difx;\n dify = 0;\n deltaWidth = (initialBounds.width - difx) / shape.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, this.initialBounds) :\n difx;\n dify = 0;\n deltaWidth = (initialBounds.width + difx) / shape.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, this.initialBounds) :\n dify;\n deltaHeight = (initialBounds.height - dify) / shape.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, this.initialBounds) :\n dify;\n deltaHeight = (initialBounds.height + dify) / shape.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, this.initialBounds) :\n difx;\n dify = snapEnabled ? this.commandHandler.snappingModule.snapTop(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, this.initialBounds) :\n dify;\n deltaWidth = (initialBounds.width + difx) / shape.width;\n deltaHeight = (initialBounds.height - dify) / shape.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 ? this.commandHandler.snappingModule.snapTop(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, this.initialBounds) :\n dify;\n difx = snapEnabled ? this.commandHandler.snappingModule.snapLeft(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, this.initialBounds) :\n difx;\n deltaWidth = (initialBounds.width - difx) / shape.width;\n deltaHeight = (initialBounds.height - dify) / shape.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 ? this.commandHandler.snappingModule.snapBottom(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, this.initialBounds) :\n dify;\n difx = snapEnabled ? this.commandHandler.snappingModule.snapRight(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, this.initialBounds) :\n difx;\n deltaHeight = (initialBounds.height + dify) / shape.height;\n deltaWidth = (initialBounds.width + difx) / shape.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) / shape.width;\n deltaHeight = (initialBounds.height + dify) / shape.height;\n break;\n }\n return this.scaleObjects(matrix, deltaWidth, deltaHeight, corner, startPoint, endPoint, shape);\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 (matrix, 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());\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());\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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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 } from './tool';\nimport { Node } from '../objects/node';\nimport { SelectTool, MoveTool, ResizeTool, RotateTool, ConnectTool, ExpandTool, LabelTool, ZoomPanTool } 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 } 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 } 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 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 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.mouseDown = function (evt) {\n this.focus = true;\n var touches;\n touches = evt.touches;\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 && (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, arg);\n }\n else if ((this.inAction === true) && this.isMouseDown === true && this.tool instanceof PolygonDrawingTool) {\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 this.diagram.endEdit();\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) {\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.mouseMove = function (e, touches) {\n this.focus = true;\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.mouseMove(this.eventArgs);\n }\n else if (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 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 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.checkEditBoxAsTarget(evt) && (canUserInteract(this.diagram))\n || (canZoomPan(this.diagram) && !defaultTool(this.diagram))) {\n if (this.tool && (!(this.tool instanceof PolygonDrawingTool) ||\n ((this.tool instanceof PolygonDrawingTool) && evt.detail === 2))) {\n this.diagram.endEdit();\n document.getElementById(this.diagram.element.id + 'content').focus();\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 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.endEdit();\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) {\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 };\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 movingPosition;\n var autoScrollBorder = this.diagram.scrollSettings.autoScrollBorder;\n if (this.diagram.scrollSettings.canAutoScroll) {\n if (position.x + this.diagram.scroller.horizontalOffset + autoScrollBorder.right > 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 >\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 this.eventArgs.position = { x: this.tool.prevPosition.x, y: this.tool.prevPosition.y };\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 switch (position) {\n case 'right':\n this.eventArgs.position.x += 10;\n left = 10;\n break;\n case 'left':\n this.eventArgs.position.x -= 10;\n left = -10;\n break;\n case 'bottom':\n this.eventArgs.position.y += 10;\n top_1 = 10;\n break;\n case 'top':\n this.eventArgs.position.y -= 10;\n top_1 = -10;\n break;\n }\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 arg.element = this.lastObjectUnderMouse;\n arg.targets = arg.actualObject = undefined;\n this.diagram.triggerEvent(DiagramEvent.mouseLeave, arg);\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) {\n var arg_1 = {\n source: obj || this.diagram, position: this.currentPosition, count: evt.detail\n };\n this.tool.mouseUp(this.eventArgs, arg_1);\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 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 width = textBounds.width;\n width = (minWidth > width) ? minWidth : width;\n height = (minHeight > textBounds.height) ? minHeight : textBounds.height;\n transforms = this.diagram.scroller.transform;\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) || getObjectFromCollection(this.diagram.connectors, node.id)) {\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 === 'Rotate' || 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') {\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 }\n return null;\n };\n /** @private */\n DiagramEventHandler.prototype.getCursor = function (action) {\n return getCursor(action, this.diagram.selectedItems.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 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 matrix = identityMatrix();\n rotateMatrix(matrix, -(container.rotateAngle + container.parentTransform), obj.offsetX, obj.offsetY);\n point = transformPointByMatrix(matrix, pt);\n bounds = container.corners;\n for (var _a = 0, _b = container.children; _a < _b.length; _a++) {\n child = _b[_a];\n bounds.uniteRect(child.corners);\n }\n }\n if (!source || (isSelected(diagram, obj) === false)) {\n if (canEnablePointerEvents(obj, diagram)) {\n if ((obj instanceof Connector) ? isPointOverConnector(obj, pt) : bounds.containsPoint(point)) {\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 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 * Defines the BackgroundImage of diagram\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 } 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, rotatePoint } from './../utility/base-util';\nimport { completeRegion, getTooltipOffset, sort, findPortIndex } from './../utility/diagram-util';\nimport { randomId } 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 } from './../utility/diagram-util';\nimport { Layer } from '../diagram/layer';\nimport { SelectorConstraints } from '../enum/enum';\nimport { remove } from '@syncfusion/ej2-base';\nimport { getOppositeDirection, getPortDirection } from './../utility/connector';\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) {\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 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');\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.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');\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 = clone((selectedItems[j]));\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 this.diagram.remove(item);\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 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: '' }, { targetID: newConnector.targetID });\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: '' }, { sourceID: newConnector.sourceID });\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 = [];\n }\n if (node.children && node.children.length && (!children || !children.length)) {\n newNode = this.cloneGroup(node, multiSelect);\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.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.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');\n var backNode = getDiagramElement(nodeId + '_groupElement');\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 }\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');\n element.parentNode.removeChild(element);\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 }\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 }\n else {\n this.diagram.refreshCanvasLayers();\n }\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 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 /** @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.sourcePortID !== targetPortId &&\n connector.segments && connector.segments[0].direction !== null && target && target instanceof Node) {\n this.changeSourceEndToPort(connector, target, targetPortId);\n }\n else if (target && (connector.sourceID !== target.id || connector.sourcePortID === '') &&\n connector.segments && connector.segments[0].direction !== null && target && target instanceof Node) {\n this.changeSourceEndToNode(connector, target);\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, target.wrapper.corners, 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 (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, pivot, 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, pivot, 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.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 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 var x = refWrapper.offsetX - refWrapper.actualSize.width * refWrapper.pivot.x;\n var y = refWrapper.offsetY - refWrapper.actualSize.height * refWrapper.pivot.y;\n var refPoint = { x: x + refWrapper.actualSize.width * pivot.x, y: y + refWrapper.actualSize.height * pivot.y };\n refPoint = rotatePoint(refWrapper.rotateAngle, refWrapper.offsetX, refWrapper.offsetY, refPoint);\n rotateMatrix(matrix, -refWrapper.rotateAngle, refPoint.x, refPoint.y);\n scaleMatrix(matrix, sw, sh, refPoint.x, refPoint.y);\n rotateMatrix(matrix, refWrapper.rotateAngle, refPoint.x, refPoint.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 var index = findPortIndex(obj, port.id);\n var ports = {};\n ports[index] = { offset: { x: port.offset.x, y: port.offset.y } };\n if (port && canDrag(port, this.diagram)) {\n oldValues = { ports: ports };\n port.offset.x += (tx / bounds.width);\n port.offset.y += (ty / bounds.height);\n ports = {};\n ports[index] = { offset: { x: port.offset.x, y: port.offset.y } };\n changedvalues = { ports: ports };\n this.diagram.nodePropertyChange(obj, oldValues, changedvalues);\n this.diagram.updateDiagramObject(obj);\n }\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 this.expandNode(node, false, this.diagram);\n };\n /** @private */\n CommandHandler.prototype.expandNode = function (node, propChange, diagram) {\n var animation;\n var objects;\n var expand = propChange ? node.isExpanded : !node.isExpanded;\n this.expandCollapse(node, expand, this.diagram);\n node.isExpanded = expand;\n this.diagram.layout.fixedNode = node.id;\n if (!propChange) {\n this.diagram.updateIcon(node);\n }\n if (this.diagram.layoutAnimateModule && this.diagram.layout.enableAnimation) {\n this.diagram.organizationalChartModule.isAnimation = true;\n }\n objects = this.diagram.doLayout();\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 };\n target.visible = visibility;\n var newValues = {\n visible: target.visible\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 /** @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 && 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);\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.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) {\n if (objects.length > 0) {\n var i = 0;\n var j = 0;\n var bounds = getBounds(objects[0].wrapper);\n var undoObj = { nodes: [], connectors: [] };\n var redoObj = { nodes: [], connectors: [] };\n for (i = 1; i < objects.length; i++) {\n var tx = 0;\n var ty = 0;\n if (option === 'Left') {\n if (objects[i] instanceof Node) {\n tx = bounds.topLeft.x +\n objects[i].width / 2 - objects[i].offsetX;\n }\n else {\n tx = bounds.topLeft.x - objects[i].sourcePoint.x;\n }\n }\n else if (option === 'Right') {\n if (objects[i] instanceof Node) {\n tx = bounds.topRight.x -\n objects[i].width / 2 - objects[i].offsetX;\n }\n else {\n tx = bounds.topRight.x - objects[i].wrapper.bounds.width -\n objects[i].sourcePoint.x;\n }\n }\n else if (option === 'Top') {\n if (objects[i] instanceof Node) {\n ty = bounds.top + objects[i].height / 2 - objects[i].offsetY;\n }\n else {\n ty = bounds.top - objects[i].sourcePoint.y;\n }\n }\n else if (option === 'Bottom') {\n if (objects[i] instanceof Node) {\n ty = bounds.bottom - objects[i].height / 2 - objects[i].offsetY;\n }\n else {\n ty = bounds.bottom - objects[i].sourcePoint.y;\n }\n }\n else if (option === 'Center') {\n if (objects[i] instanceof Node) {\n tx = bounds.center.x - objects[i].offsetX;\n }\n else {\n j = Math.abs(bounds.width -\n objects[i].wrapper.bounds.width);\n tx = bounds.bottomLeft.x - j / 2 - objects[i].sourcePoint.x;\n }\n }\n else if (option === 'Middle') {\n if (objects[i] instanceof Node) {\n ty = bounds.center.y - objects[i].offsetY;\n }\n else {\n ty = bounds.center.y - objects[i].sourcePoint.y;\n }\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 }\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 if (this.scrolled) {\n this.diagram.endEdit();\n }\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 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 this.diagram.setSize(this.diagramWidth, this.diagramHeight);\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 = quad.objects.indexOf(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 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 keyboard commands\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 };\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 };\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 } from './enum/enum';\nimport { DiagramConstraints, SelectorConstraints, PortVisibility, DiagramEvent } from './enum/enum';\nimport { DiagramAction, ThumbsConstraints } 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, canResize, canSingleSelect, canZoomPan } from './utility/constraints-util';\nimport { canDragSourceEnd, canDragTargetEnd, canDragSegmentThumb, enableReadOnly, canMove } from './utility/constraints-util';\nimport { findAnnotation } 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 * Diagram control\n * ```\n *
    \n * \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 _this.renderTimer = null;\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);\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 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 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 }\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 };\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);\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 */\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) {\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);\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) {\n var newObj;\n if (obj) {\n obj = cloneObject(obj);\n if (this.bpmnModule) {\n if (!this.bpmnModule.canAdd(obj)) {\n return null;\n }\n }\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);\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 }\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');\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');\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 }\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');\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');\n element.parentNode.removeChild(element);\n element = getDiagramElement(children[i].id + '_rect_groupElement');\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 if (this.bpmnModule) {\n if (this.bpmnModule.checkAndRemoveAnnotations(obj, this)) {\n this.refreshCanvasLayers();\n return;\n }\n }\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.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 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 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 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 var transform = this.scroller.transform;\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.createElement('div');\n var textarea = document.createElement('textarea');\n textEditing.appendChild(textarea);\n text = textWrapper.content;\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) - 2.5);\n y = ((((textWrapper.bounds.center.y + transform.ty) * transform.scale) - bounds.height / 2) - 3);\n attributes = {\n 'id': this.element.id + '_editTextBoxDiv',\n 'style': 'position: absolute' + ';left:' + x + 'px;top:' + y + 'px;width:' + (bounds.width + 1) +\n 'px;height:' + bounds.height + 'px; containerName:' + node.id + ';'\n };\n setAttributeHtml(textEditing, attributes);\n attributes = {\n 'id': this.element.id + '_editBox',\n 'style': 'width:' + (bounds.width + 1) + 'px;height:' + bounds.height +\n 'px;resize: none;outline: none;overflow: hidden;' +\n 'font-family:' + style.fontFamily + ';font-size:' + style.fontSize + 'px;text-align:' +\n (textWrapper.style.textAlign.toLocaleLowerCase()) + ';',\n '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.textDecoration = (style.textDecoration) ? style.textDecoration : '';\n textarea.appendChild(document.createTextNode(text));\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 this.diagramCanvas.appendChild(textEditing);\n EventHandler.add(textarea, 'input', this.eventHandler.inputChange, this.eventHandler);\n EventHandler.add(textarea, 'focusout', this.focusOutEdit, this);\n textarea.focus();\n textarea.select();\n }\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 }\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 this.updateIcon(node);\n this.updateDefaultLayoutIcons(node);\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 }\n this.preventUpdate = false;\n this.updatePage();\n this.refreshDiagramLayer();\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 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 var canvas = obj.wrapper;\n canvas.children.push(obj.initPortWrapper(obj.ports[obj.ports.length - 1]));\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 };\n /**\n * Add Labels at the run time\n */\n Diagram.prototype.addLabels = function (obj, labels) {\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 };\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 for (var i = 0; i < obj.wrapper.children.length; i++) {\n var canvas = obj.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 obj.wrapper.children.splice(i, 1);\n if (this.mode === 'SVG') {\n var element = getDiagramElement(canvas.id);\n if (element) {\n var element_1 = getDiagramElement(canvas.id);\n element_1.parentNode.removeChild(element_1);\n }\n var textElement = getDiagramElement(canvas.id + '_text');\n if (textElement) {\n element = getDiagramElement(canvas.id + '_text');\n element.parentNode.removeChild(element);\n }\n }\n else {\n this.refreshCanvasLayers();\n }\n }\n }\n }\n }\n if (labels.length > 1) {\n this.endGroupAction();\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 = 0; j < ports.length; j++) {\n for (var i = 0; i < obj.wrapper.children.length; i++) {\n var canvas = obj.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 obj.wrapper.children.splice(i, 1);\n if (this.mode === 'SVG') {\n var element = getDiagramElement(canvas.id);\n element.parentNode.removeChild(element);\n }\n else {\n this.refreshCanvasLayers();\n }\n }\n }\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 this.diagramLayerDiv = document.createElement('div');\n attributes = {\n 'id': this.element.id + '_diagramLayer_div',\n 'style': 'width:' + bounds.width + 'px; height:' + bounds.height + 'px;' + commonStyle\n };\n setAttributeHtml(this.diagramLayerDiv, 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) {\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 this.updateGroupOffset(obj);\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 node.parentId = obj.id;\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.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) {\n if ((node.children && node.children.length > 0) || (node.processId)) {\n this.nameTable[node.id].offsetX = node.wrapper.offsetX;\n this.nameTable[node.id].offsetY = node.wrapper.offsetY;\n if ((node.children && node.children.length > 0)) {\n this.nameTable[node.id].width = node.wrapper.actualSize.width;\n this.nameTable[node.id].height = node.wrapper.actualSize.height;\n }\n }\n };\n Diagram.prototype.initNode = function (obj, diagramId) {\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 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) {\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 renderer.renderElement(element, canvas, htmlLayer, (!renderer.isSvgMode && transform) ? this.scroller.transform : undefined);\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 this.diagramRenderer.transformLayers(this.scroller.transform, this.mode === 'SVG');\n if (this.mode !== 'SVG') {\n this.refreshDiagramLayer();\n }\n this.updateSelector();\n this.renderPageBreaks(bounds);\n }\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 {\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 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 this.updateThumbConstraints(selectorModel.nodes, selectorModel);\n this.updateThumbConstraints(selectorModel.connectors, selectorModel);\n 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 this.diagramRenderer.renderUserHandler(selectorModel, selectorElement, this.scroller.transform);\n }\n };\n /** @private */\n Diagram.prototype.updateSelector = function () {\n var bounds = this.spatialSearch.getPageBounds();\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.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 this.updateThumbConstraints(selectorModel.nodes, selectorModel);\n this.updateThumbConstraints(selectorModel.connectors, selectorModel);\n if (this.selectedItems.constraints & SelectorConstraints.UserHandle) {\n this.diagramRenderer.renderUserHandler(selectorModel, selectorElement, this.scroller.transform);\n }\n 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 /** @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(true);\n };\n Diagram.prototype.endEditCommand = function () {\n this.endEdit();\n };\n /**\n * @private\n */\n Diagram.prototype.endEdit = function (focusOut) {\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 this.updateThumbConstraints(this.selectedItems.nodes, this.selectedItems);\n this.updateSelector();\n update = true;\n }\n return update;\n };\n Diagram.prototype.connectorSegmentChange = function (actualObject, existingInnerBounds) {\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.nameTable[actualObject.outEdges[k]];\n if (connector.targetID !== '') {\n segmentChange = this.commandHandler.isSelected(this.nameTable[connector.targetID]) ? false : true;\n }\n else {\n segmentChange = this.commandHandler.isSelected(this.nameTable[connector.id]) ? false : true;\n }\n if (connector.type === 'Orthogonal' && connector.segments && connector.segments.length > 1 && 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.commandHandler.dragSourceEnd(connector, tx, ty, true, null, 'ConnectorSourceEnd', undefined, undefined, undefined, true);\n }\n }\n }\n }\n };\n /* tslint:disable */\n /** @private */\n Diagram.prototype.nodePropertyChange = function (actualObject, oldObject, node, isLayout) {\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 && !actualObject.children) {\n actualObject.wrapper.children[0].width = node.width;\n update = true;\n updateConnector = true;\n }\n if (node.height !== undefined && !actualObject.children) {\n actualObject.wrapper.children[0].height = node.height;\n update = true;\n updateConnector = true;\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 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, true, 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.connectorSegmentChange(actualObject, existingInnerBounds);\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') {\n this.updateDiagramObject(actualObject);\n }\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 var connector = this.nameTable[actualObject.inEdges[j]];\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 if (actualObject.outEdges.length > 0) {\n for (var k = 0; k < actualObject.outEdges.length; k++) {\n var connection = this.nameTable[actualObject.outEdges[k]];\n var conn = {\n sourcePoint: connection.sourcePoint, targetPoint: connection.targetPoint, sourceID: connection.sourceID,\n targetID: connection.targetID, sourcePortID: connection.sourcePortID, targetPortID: connection.targetPortID\n };\n this.connectorPropertyChange(connection, {}, conn);\n }\n }\n if (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)) {\n this.updateSelector();\n }\n if (this.mode === 'SVG') {\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 }\n if (visible === false) {\n this.unSelect(this.nameTable[element.id]);\n }\n this.updateDiagramObject(this.nameTable[element.id]);\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 (canUpdateSize) {\n annotationWrapper.refreshTextElement();\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 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 - annotationWrapper.margin.left - annotationWrapper.margin.right;\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 annotationWrapper.constraints = changedObject.constraints;\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.right !== 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 if (changedObject.shape === 'Custom' && changedObject.pathData) {\n portWrapper.data = String(changedObject.pathData);\n isMeasure = true;\n }\n else {\n var pathdata = getPortShape(changedObject.shape);\n portWrapper.data = pathdata;\n }\n }\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 if (iconContainer) {\n if (this.mode === 'SVG') {\n var icon = getDiagramElement(actualObject.wrapper.id + '_icon_content');\n if (icon) {\n var iconRect = getDiagramElement(icon.id + '_rect');\n var iconShape = getDiagramElement(icon.id + '_shape');\n var nativeContent = getDiagramElement(iconShape.id + '_native_element');\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 };\n /** @private */\n Diagram.prototype.updateGroupSize = function (node) {\n var tempNode;\n if (node.parentId) {\n tempNode = this.nameTable[node.parentId];\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 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 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 if (sourceElement) {\n var obj = sourceElement[selectedSymbols];\n clonedObject = cloneObject(sourceElement[selectedSymbols]);\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 }\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['enterObject'] = newObj;\n _this.preventUpdate = true;\n _this.initObject(newObj);\n _this.currentSymbol = newObj;\n if (_this.mode !== 'SVG') {\n _this.refreshDiagramLayer();\n }\n delete _this['enterObject'];\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, target: _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 _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 _this.add(clonedObject);\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 (_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 __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 } 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 = document.createElement('a');\n var url = URL.createObjectURL(blob);\n pom.href = url;\n pom.setAttribute('download', fileName + '.' + fileType);\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 img_1 = document.createElement('img');\n var attr = {\n 'id': this.diagram.element.id + '_printImage',\n 'src': image,\n };\n img_1.setAttribute('id', this.diagram.element.id + '_printImage');\n setAttributeHtml(img_1, 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 = document.createElement('a');\n var urlLink = URL.createObjectURL(b);\n htmlElement_1.href = urlLink;\n htmlElement_1.setAttribute('download', fileName + '.' + fileType);\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);\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 = document.createElement('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 img = document.createElement('img');\n var attr;\n var innerDiv = document.createElement('div');\n attr = { 'class': 'e-diagram-print-page', 'style': 'width:' + pageWidth + 'height:' + pageHeight };\n setAttributeHtml(img, attr);\n setAttributeHtml(innerDiv, 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 img = document.createElement('img');\n var attr = {\n 'id': this.diagram.element.id + '_printImage',\n 'src': url,\n };\n setAttributeHtml(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 { createElement, remove } from '@syncfusion/ej2-base';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { contextMenuClick, contextMenuOpen } from '../enum/enum';\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 = createElement('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 var item = this.getKeyFromId(args.item.id);\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 document.getElementById(this.parent.element.id + 'content').focus();\n this.parent.trigger(contextMenuClick, args);\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 this.contextMenu.hideItems(this.hiddenItems, true);\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 { getAdornerLayerSvg } from './../utility/dom-util';\nimport { isSelected } from '../interaction/actions';\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 getAdornerLayerSvg(this.diagram.element.id).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 = 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, getAdornerLayerSvg(this.diagram.element.id), 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, getAdornerLayerSvg(this.diagram.element.id), 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, getAdornerLayerSvg(this.diagram.element.id), 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, getAdornerLayerSvg(this.diagram.element.id), 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, getAdornerLayerSvg(this.diagram.element.id), 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, getAdornerLayerSvg(this.diagram.element.id), 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: getAdornerLayerSvg(this.diagram.element.id).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 /**\n * To remove grid lines on mouse move and mouse up\n * @private\n */\n Snapping.prototype.removeGuidelines = function (diagram) {\n var selectionRect = getAdornerLayerSvg(this.diagram.element.id).getElementById('_SnappingLines');\n var line = getAdornerLayerSvg(this.diagram.element.id).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 getAdornerLayerSvg(this.diagram.element.id).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';\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 }\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.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 diagram.remove(obj);\n diagram.clearSelectorLayer();\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 {\n diagram.add(obj);\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 }\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(this.protectChange);\n diagram.triggerEvent(DiagramEvent.animationComplete, undefined);\n this.protectChange = false;\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 diagram.updateDiagramObject(source);\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) {\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 if (node.offsetX > target.offsetX) {\n points.push(nodeBounds.bottomCenter, { x: nodeBounds.bottomCenter.x, y: (nodeBounds.bottomCenter.y + layout.verticalSpacing / 4) }, {\n x: (targetBounds.middleRight.x + layout.horizontalSpacing / 2),\n y: (nodeBounds.bottomCenter.y + layout.verticalSpacing / 4)\n }, { x: (targetBounds.middleRight.x + layout.horizontalSpacing / 2), y: targetBounds.middleRight.y }, targetBounds.middleRight);\n }\n else {\n points.push(nodeBounds.bottomCenter, { x: nodeBounds.bottomCenter.x, y: (nodeBounds.bottomCenter.y + layout.verticalSpacing / 4) }, {\n x: (targetBounds.middleLeft.x - layout.horizontalSpacing / 2),\n y: (nodeBounds.bottomCenter.y + layout.verticalSpacing / 4)\n }, { x: (targetBounds.middleLeft.x - layout.horizontalSpacing / 2), y: targetBounds.middleLeft.y }, targetBounds.middleLeft);\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, createElement } 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 } 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 * Defines the behavior of a palette\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 * Defines the size and position of the symbol palette\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 */\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.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 (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 = createElement('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 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 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.prepareSymbol(symbol);\n this.symbolTable[symbol.id] = symbol;\n }\n };\n /**\n * Method to create the palette\n */\n SymbolPalette.prototype.renderPalette = function (symbolGroup) {\n var paletteDiv = document.createElement('div');\n paletteDiv.setAttribute('id', symbolGroup.id);\n var style = 'display:none;overflow:auto;';\n if (symbolGroup.height) {\n style += 'height:' + symbolGroup.height + 'px';\n }\n paletteDiv.setAttribute('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 this.prepareSymbol(obj);\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 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 //preparing objects\n var getSymbolTemplate = getFunction(this.getSymbolTemplate);\n if (getSymbolTemplate) {\n content = getSymbolTemplate(symbol);\n }\n if (!content) {\n content = symbol.init(this);\n }\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 /**\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 this.getSymbolContainer(symbol, parentDiv);\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);\n this.scaleSymbol(symbol, symbol.wrapper.children[0], sw, sh, symbolWidth, symbolHeight);\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);\n var previewContainer = createElement('div');\n var div;\n previewContainer.setAttribute('draggable', 'true');\n previewContainer.setAttribute('class', 'e-dragclone');\n previewContainer.style.pointerEvents = 'none';\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 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 canvas.getContext('2d').setTransform(2, 0, 0, 2, 0, 0);\n this.diagramRenderer.renderElement(content, canvas, undefined);\n }\n ((div && symbol.shape.type === 'HTML') ? 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) {\n if (content.children) {\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 = createElement('div', {\n id: symbol.id + '_container',\n styles: 'width:' + width + 'px;height:' + height + 'px;float:left;overflow:hidden'\n });\n container.setAttribute('title', symbolInfo.description ? symbolInfo.description.text : symbol.id);\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 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 this.diagramRenderer.renderElement(symbol.wrapper, gElement || canvas, undefined);\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') ? div : canvas).setAttribute('style', style);\n container.classList.add('e-symbol-draggable');\n return container;\n }\n return canvas;\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((isPreview ? (symbol.id + '_preview') : symbol.id), Math.ceil(width) + 1, Math.ceil(height) + 1);\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 evt.preventDefault();\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 if (id !== this.selectedSymbol.id) {\n var oldSymbol = document.getElementById(this.selectedSymbol.id + '_container');\n oldSymbol.classList.remove('e-symbol-selected');\n var args = { oldValue: this.selectedSymbol.id, newValue: id };\n var event_1 = 'paletteSelectionChange';\n this.trigger(event_1, args);\n }\n var container = document.getElementById(this.selectedSymbol.id + '_container');\n container.style.backgroundColor = '';\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) {\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 scaleElement(symbolContainer.children[0], sw, sh, symbolContainer);\n }\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 = createElement('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 = document.createElement('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 = createElement('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 = document.createElement('div');\n emptyDiv.setAttribute('id', 'EmptyDiv');\n emptyDiv.innerHTML = 'No Items To Display';\n emptyDiv.setAttribute('style', 'textAlign:center;fontStyle:italic');\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 = document.createElement('div');\n paletteDiv.setAttribute('id', 'SearchPalette');\n paletteDiv.setAttribute('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 } 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\n * ```\n *
    \n * \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 = document.createElement('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.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 = document.createElement('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.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 div = document.createElement('div');\n var attr = { 'id': this.element.id + '_htmlLayer', 'class': 'e-html-layer' };\n setAttributeHtml(div, attr);\n var htmlLayer = div;\n div.style.pointerEvents = 'none';\n div.style.position = 'absolute';\n div.style.left = '0px';\n div.style.top = '0px';\n var htmlDiv = document.createElement('div');\n var options = {\n 'id': this.element.id + '_htmlLayer_div',\n 'style': 'position:absolute;top:0px;left:0px;'\n };\n setAttributeHtml(htmlDiv, 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.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.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('overview_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.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.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);\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 this.trigger('contentChange');\n };\n /**\n * @private\n */\n DocumentEditor.prototype.fireDocumentChange = function () {\n this.trigger('documentChange');\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 this.trigger('selectionChange');\n };\n /**\n * @private\n */\n DocumentEditor.prototype.fireZoomFactorChange = function () {\n this.trigger('zoomFactorChange');\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 };\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 > 0 && 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 return this.childWidgets.length > 0 ?\n this.childWidgets[this.childWidgets.length - 1] : 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 (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 (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 * @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 /**\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 /**\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 /**\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') {\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') {\n this.moveToNextLine(element.line);\n if (text === '\\v' && isNullOrUndefined(element.nextNode)) {\n this.layoutEmptyLineWidget(paragraph, true, line, true);\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'];\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 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) {\n var paragraphWidget = line.paragraph;\n var index = 0;\n if (!isNullOrUndefined(line)) {\n index = paragraphWidget.childWidgets.indexOf(line);\n if (index > 0) {\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 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 {\n paragraphWidget.containerWidget.removeChild(paragraphWidget.indexInOwner);\n }\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 * 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 paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\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 paragraphWidget.containerWidget.height += paragraphWidget.height;\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 // tslint:disable-next-line:max-line-length\n this.updateContainerWidget(block, currentWidget.containerWidget, currentWidget.indexInOwner + 1, false);\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 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 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 this.shiftToPreviousWidget(widget, viewer, prevWidget);\n if (isNullOrUndefined(widget.childWidgets) || widget.childWidgets.length === 0) {\n i--;\n continue;\n }\n prevWidget = undefined;\n if (prevBodyWidget !== widget.containerWidget) {\n prevBodyWidget = widget.containerWidget;\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 this.updateContainerWidget(widget, prevBodyWidget, index, true);\n }\n }\n else {\n var isSplittedToNewPage = this.splitWidget(widget, viewer, prevBodyWidget, index + 1);\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 if (prevBodyWidget !== table.containerWidget) {\n this.updateContainerWidget(table, prevBodyWidget, index + 1, true);\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) {\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) {\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) {\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) {\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 : block.containerWidget;\n index = previousBlock ? prevBodyWidget.childWidgets.indexOf(previousBlock) : block.containerWidget.childWidgets.indexOf(block);\n return { bodyWidget: prevBodyWidget, index: index };\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.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 };\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 this.owner.element.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.onTextInputInternal);\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 //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 }\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.onTextInputInternal);\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 };\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); //return ascent\n var ascent = measureObj.Height - measureObj.BaselineOffset;\n if (element.margin.top + element.height - ascent > 0) {\n top += element.margin.top + element.height - ascent;\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 = textMetrics.Height; //after text helper class\n var baselineOffset = textMetrics.BaselineOffset; //baseline calculation\n top += element.margin.top + element.height - 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 {\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 (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 this.viewer.owner.trigger('searchResultsChange');\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 this.viewer.owner.trigger('searchResultsChange');\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 this.viewer.owner.trigger('searchResultsChange');\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 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 //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 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.containerWidget : 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 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 (section !== nextSection) {\n // this.deleteSection(selection, section, nextSection, 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 //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 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 * @private\n */\n Editor.prototype.onEnter = function () {\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 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 (!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 paragraph.paragraphFormat.baseStyle = paragraphAdv.paragraphFormat.baseStyle.next;\n if (paragraphAdv.paragraphFormat.baseStyle.name === 'List Paragraph') {\n paragraph.paragraphFormat.listFormat.copyFormat(paragraphAdv.paragraphFormat.listFormat);\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 paragraphAdv = paragraphAdv.combineWidget(this.viewer);\n if (offset > 0 || !currentLine.isFirstLine()) {\n this.moveInlines(paragraphAdv, paragraph, 0, 0, paragraphAdv.firstChild, offset, currentLine);\n }\n var paragraphs = paragraphAdv.getSplitWidgets();\n paragraphAdv = paragraphs[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 }\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')) {\n this.redoAction();\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 (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 }\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 }\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 {\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 };\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 eventArgs.data.executeQuery(this.getQuery(eventArgs.query)).then(function (e) {\n _this.trigger('actionComplete', e);\n if (e.cancel) {\n return;\n }\n var listItems = e.result;\n ulElement = _this.renderItems(listItems, fields);\n _this.onActionComplete(ulElement, listItems, e);\n _this.isRequested = false;\n _this.hideSpinner();\n _this.trigger('dataBound', { items: listItems, e: e });\n }).catch(function (e) {\n _this.isRequested = false;\n _this.onActionFailure(e);\n _this.hideSpinner();\n });\n }\n else {\n 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.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 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 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 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 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 if ((this.allowFiltering || this.allowCustomValue) && this.mainList && this.listData) {\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\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 element = this.list.querySelector('li.'\n + dropDownBaseClasses.li + ':not(.'\n + HIDE_LIST + ')');\n }\n else {\n element = this.ulElement.querySelector('li.'\n + dropDownBaseClasses.li + ':not(.'\n + HIDE_LIST + ')');\n }\n if (element !== null) {\n this.removeFocus();\n this.addListFocus(element);\n }\n }\n };\n MultiSelect.prototype.focusAtLastListItem = function (data) {\n var activeElement;\n if (data) {\n activeElement = Search(data, this.liCollections, 'StartsWith', this.ignoreCase);\n }\n else {\n if (this.value && this.value.length) {\n Search(this.value[this.value.length - 1], this.liCollections, 'StartsWith', this.ignoreCase);\n }\n else {\n activeElement = null;\n }\n }\n if (activeElement && activeElement.item !== null) {\n this.addListFocus(activeElement.item);\n this.scrollBottom(activeElement.item, activeElement.index);\n }\n };\n MultiSelect.prototype.getAriaAttributes = function () {\n var ariaAttributes = {\n 'aria-disabled': 'false',\n 'aria-owns': this.element.id + '_options',\n 'role': 'listbox',\n 'aria-multiselectable': 'true',\n 'aria-activedescendant': 'null',\n 'aria-haspopup': 'true',\n 'aria-expanded': 'false'\n };\n return ariaAttributes;\n };\n MultiSelect.prototype.updateListARIA = function () {\n attributes(this.ulElement, { 'id': this.element.id + '_options', 'role': 'listbox', 'aria-hidden': 'false' });\n 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.inputElement.value !== '') {\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 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 };\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.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.focusIn();\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 e.preventDefault();\n this.moveByList(-1);\n this.updateAriaAttribute();\n break;\n case 40:\n e.preventDefault();\n this.moveByList(1);\n this.updateAriaAttribute();\n break;\n case 27:\n e.preventDefault();\n this.hidePopup();\n if (this.mode === 'CheckBox') {\n this.inputElement.focus();\n }\n return;\n case 13:\n e.preventDefault();\n if (this.mode !== 'CheckBox') {\n this.selectByKey(e);\n }\n return;\n case 32:\n if (this.mode === 'CheckBox') {\n e.preventDefault();\n this.selectByKey(e);\n }\n return;\n 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.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 e: 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 e: 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 !== '') {\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 }\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 };\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 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 append([this.checkAllParent], this.filterParent);\n }\n else {\n prepend([this.checkAllParent], this.parent.popupWrapper);\n }\n }\n EventHandler.add(this.checkAllParent, 'mousedown', this.clickHandler, this);\n }\n if (this.parent.list.classList.contains('e-nodata')) {\n this.checkAllParent.style.display = 'none';\n }\n else {\n this.checkAllParent.style.display = 'block';\n }\n this.parent.selectAllHeight = this.checkAllParent.getBoundingClientRect().height;\n }\n else if (!isNullOrUndefined(this.checkAllParent)) {\n this.checkAllParent.parentElement.removeChild(this.checkAllParent);\n this.checkAllParent = null;\n }\n };\n CheckBoxSelection.prototype.destroy = function () {\n this.removeEventListener();\n };\n CheckBoxSelection.prototype.listSelection = function (args) {\n var target;\n if (!isNullOrUndefined(args.e)) {\n target = !isNullOrUndefined(args.e.target) ?\n args.e.target.classList.contains('e-frame') ?\n args.e.target : args.li.querySelector('.e-checkbox-wrapper').childNodes[1]\n : args.li.querySelector('.e-checkbox-wrapper').childNodes[1];\n }\n else {\n target = args.li.lastElementChild.childNodes[1];\n }\n if (this.parent.itemTemplate) {\n target = args.li.firstElementChild.childNodes[1];\n }\n this.checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n if (!isNullOrUndefined(this.checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, this.checkWrapper);\n var selectAll = false;\n this.validateCheckNode(this.checkWrapper, checkElement.classList.contains(CHECK), args.li, args.e, selectAll);\n }\n };\n CheckBoxSelection.prototype.validateCheckNode = function (checkWrap, isCheck, li, e, selectAll) {\n this.changeState(checkWrap, isCheck ? 'uncheck' : 'check', e, true, selectAll);\n };\n CheckBoxSelection.prototype.clickHandler = function (e) {\n var target;\n if (e.currentTarget.classList.contains(this.checkAllParent.className)) {\n target = e.currentTarget.firstElementChild.lastElementChild;\n }\n else {\n target = e.currentTarget;\n }\n this.checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n var selectAll = true;\n if (!isNullOrUndefined(this.checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, this.checkWrapper);\n this.validateCheckNode(this.checkWrapper, checkElement.classList.contains(CHECK), null, e, selectAll);\n }\n e.preventDefault();\n };\n CheckBoxSelection.prototype.changeState = function (wrapper, state, e, isPrevent, selectAll) {\n var ariaState;\n var frameSpan = wrapper.getElementsByClassName(CHECKBOXFRAME)[0];\n if (state === 'check' && !frameSpan.classList.contains(CHECK)) {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n ariaState = 'true';\n if (selectAll) {\n this.parent.selectAll(true);\n this.setLocale(true);\n }\n }\n else if (state === 'uncheck' && (frameSpan.classList.contains(CHECK) || frameSpan.classList.contains(INDETERMINATE))) {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n ariaState = 'false';\n if (selectAll) {\n this.parent.selectAll(false);\n this.setLocale();\n }\n }\n ariaState = state === 'check' ? 'true' : state === 'uncheck' ? 'false' : ariaState;\n if (!isNullOrUndefined(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n };\n CheckBoxSelection.prototype.setSearchBox = function (args) {\n if (isNullOrUndefined(this.filterParent)) {\n this.filterParent = 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 (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 };\n CheckBoxSelection.prototype.getFocus = function (e) {\n this.parent.overAllWrapper.classList.remove(FOCUS);\n if (e.value === 'focus') {\n this.filterInput.focus();\n }\n if (e.value === 'clear') {\n this.filterInput.value = '';\n this.clearIconElement.style.visibility = 'hidden';\n }\n };\n CheckBoxSelection.prototype.checkSelectAll = function (e) {\n if (e.value === 'check' && this.checkAllParent.getAttribute('aria-checked') !== 'true') {\n this.changeState(this.checkAllParent, e.value, null, null, false);\n this.setLocale(true);\n }\n if (e.value === 'uncheck') {\n this.changeState(this.checkAllParent, e.value, null, null, false);\n this.setLocale();\n }\n };\n CheckBoxSelection.prototype.setLocale = function (unSelect) {\n if (this.parent.selectAllText !== 'Select All' || this.parent.unSelectAllText !== 'Unselect All') {\n var template = unSelect ? this.parent.unSelectAllText : this.parent.selectAllText;\n var compiledString = void 0;\n this.selectAllSpan.textContent = '';\n compiledString = compile(template);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.selectAllSpan.textContent = item.textContent;\n }\n }\n else {\n var l10nLocale = { selectAllText: 'Select All', unSelectAllText: 'Unselect All' };\n var l10n = new L10n('dropdowns', l10nLocale, this.parent.locale);\n this.selectAllSpan.textContent = unSelect ? l10n.getConstant('unSelectAllText') : l10n.getConstant('selectAllText');\n }\n };\n CheckBoxSelection.prototype.getActiveList = function (args) {\n if (args.li.classList.contains('e-active')) {\n this.activeLi.push(args.li.cloneNode(true));\n }\n else {\n this.activeLi.splice(args.index, 1);\n }\n };\n CheckBoxSelection.prototype.setReorder = function (args) {\n if (this.parent.enableSelectionOrder && !isNullOrUndefined(this.parent.value)) {\n var activeLiCount = this.parent.ulElement.querySelectorAll('li.e-active').length;\n var remLi = void 0;\n var ulEle = 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 */\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 };\nvar Font = /** @class */ (function () {\n function Font() {\n this.sz = 14;\n this.name = 'Calibri';\n this.u = false;\n this.b = false;\n this.i = false;\n this.color = 'FF000000';\n }\n return Font;\n}());\nexport { Font };\nvar CellXfs = /** @class */ (function () {\n function CellXfs() {\n }\n return CellXfs;\n}());\nexport { CellXfs };\nvar Alignment = /** @class */ (function () {\n function Alignment() {\n }\n return Alignment;\n}());\nexport { Alignment };\nvar CellStyleXfs = /** @class */ (function () {\n function CellStyleXfs() {\n }\n return CellStyleXfs;\n}());\nexport { CellStyleXfs };\nvar CellStyles = /** @class */ (function () {\n function CellStyles() {\n this.name = 'Normal';\n this.xfId = 0;\n }\n return CellStyles;\n}());\nexport { CellStyles };\nvar NumFmt = /** @class */ (function () {\n function NumFmt(id, code) {\n this.numFmtId = id;\n this.formatCode = code;\n }\n return NumFmt;\n}());\nexport { NumFmt };\n/**\n * Border class\n */\nvar Border = /** @class */ (function () {\n function Border(mLine, mColor) {\n this.lineStyle = mLine;\n this.color = mColor;\n }\n return Border;\n}());\nexport { Border };\n/**\n * Border class\n */\nvar Borders = /** @class */ (function () {\n function Borders() {\n this.left = new Border('none', '#FFFFFF');\n this.right = new Border('none', '#FFFFFF');\n this.top = new Border('none', '#FFFFFF');\n this.bottom = new Border('none', '#FFFFFF');\n this.all = new Border('none', '#FFFFFF');\n }\n return Borders;\n}());\nexport { Borders };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n */\nvar Cell = /** @class */ (function () {\n function Cell() {\n }\n return Cell;\n}());\nexport { Cell };\n/**\n * Rows class\n */\nvar Cells = /** @class */ (function (_super) {\n __extends(Cells, _super);\n function Cells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (cell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var c = _a[_i];\n if (c.index === cell.index) {\n _this[count] = cell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(cell);\n }\n };\n return _this;\n }\n return Cells;\n}(Array));\nexport { Cells };\n","/**\n * Column class\n */\nvar Column = /** @class */ (function () {\n function Column() {\n }\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n */\nvar Row = /** @class */ (function () {\n function Row() {\n }\n return Row;\n}());\nexport { Row };\n/**\n * Rows class\n */\nvar Rows = /** @class */ (function (_super) {\n __extends(Rows, _super);\n function Rows() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (row) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var r = _a[_i];\n if (r.index === row.index) {\n _this[count] = row;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(row);\n }\n };\n return _this;\n }\n return Rows;\n}(Array));\nexport { Rows };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheets class\n */\nvar Worksheets = /** @class */ (function (_super) {\n __extends(Worksheets, _super);\n function Worksheets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return Worksheets;\n}(Array));\nexport { Worksheets };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n */\nvar Worksheet = /** @class */ (function () {\n function Worksheet() {\n this.isSummaryRowBelow = true;\n }\n return Worksheet;\n}());\nexport { Worksheet };\nvar HyperLink = /** @class */ (function () {\n function HyperLink() {\n }\n return HyperLink;\n}());\nexport { HyperLink };\nvar Grouping = /** @class */ (function () {\n function Grouping() {\n }\n return Grouping;\n}());\nexport { Grouping };\nvar FreezePane = /** @class */ (function () {\n function FreezePane() {\n }\n return FreezePane;\n}());\nexport { FreezePane };\nvar MergeCell = /** @class */ (function () {\n function MergeCell() {\n }\n return MergeCell;\n}());\nexport { MergeCell };\n/**\n * MergeCells class\n */\nvar MergeCells = /** @class */ (function (_super) {\n __extends(MergeCells, _super);\n function MergeCells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (mergeCell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var mCell = _a[_i];\n if (MergeCells.isIntersecting(mCell, mergeCell)) {\n var intersectingCell = new MergeCell();\n intersectingCell.x = Math.min(mCell.x, mergeCell.x);\n intersectingCell.y = Math.min(mCell.Y, mergeCell.y);\n intersectingCell.width = Math.max(mCell.Width + mCell.X, mergeCell.width + mergeCell.x);\n intersectingCell.height = Math.max(mCell.Height + mCell.Y, mergeCell.height + mergeCell.y);\n intersectingCell.ref = (_this[count].ref.split(':')[0]) + ':' + (mergeCell.ref.split(':')[1]);\n _this[count] = intersectingCell;\n 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 * @hidden\n */\nvar ValueFormatter = /** @class */ (function () {\n function ValueFormatter(cultureName) {\n this.intl = new Internationalization();\n // if (!isNullOrUndefined(cultureName)) {\n // this.intl.culture = cultureName;\n // }\n }\n ValueFormatter.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n // public getParserFunction(format: NumberFormatOptions | DateFormatOptions): Function {\n // if ((format).type) {\n // return this.intl.getDateParser(format);\n // } else {\n // return this.intl.getNumberParser(format);\n // }\n // }\n // public fromView(value: string, format: Function, type?: string): string | number | Date {\n // if (type === 'date' || type === 'datetime' || type === 'number') {\n // return format(value);\n // } else {\n // return value;\n // }\n // }\n ValueFormatter.prototype.toView = function (value, format) {\n var result = value;\n if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n result = format(value);\n }\n return result;\n };\n // public setCulture(cultureName: string): void {\n // if (!isNullOrUndefined(cultureName)) {\n // setCulture(cultureName);\n // }\n // }\n /* tslint:disable:no-any */\n ValueFormatter.prototype.displayText = function (value, format) {\n return this.toView(value, this.getFormatFunction(format));\n };\n return ValueFormatter;\n}());\nexport { ValueFormatter };\n","import { ValueFormatter } from './value-formatter';\n/**\n * CsvHelper class\n */\nvar CsvHelper = /** @class */ (function () {\n /* tslint:disable:no-any */\n function CsvHelper(json) {\n this.csvStr = '';\n this.formatter = new ValueFormatter();\n this.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n if (json.styles !== null && json.styles !== undefined) {\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined && json.styles[i].numberFormat !== undefined) {\n this.globalStyles.set(json.styles[i].name, json.styles[i].numberFormat);\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parseWorksheet(json.worksheets[0]);\n }\n //this.csvStr = 'a1,a2,a3\\nb1,b2,b3';\n }\n CsvHelper.prototype.parseWorksheet = function (json) {\n //Rows\n if (json.rows !== null && json.rows !== undefined) {\n this.parseRows(json.rows);\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRows = function (rows) {\n var count = 1;\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n //Row index\n if (row.index !== null && row.index !== undefined) {\n while (count < row.index) {\n this.csvStr += '\\n';\n count++;\n }\n this.parseRow(row);\n }\n else {\n throw Error('Row index is missing.');\n }\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRow = function (row) {\n if (row.cells !== null && row.cells !== undefined) {\n var count = 1;\n for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n var cell = _a[_i];\n //cell index\n if (cell.index !== null && cell.index !== undefined) {\n while (count < cell.index) {\n this.csvStr += ',';\n count++;\n }\n this.parseCell(cell);\n }\n else {\n throw Error('Cell index is missing.');\n }\n }\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseCell = function (cell) {\n var csv = this.csvStr;\n if (cell.value !== undefined) {\n if (cell.value instanceof Date) {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: cell.style.numberFormat }));\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: this.globalStyles.get(cell.style.name) }));\n }\n else {\n csv += cell.value;\n }\n }\n else if (typeof (cell.value) === 'boolean') {\n csv += cell.value ? 'TRUE' : 'FALSE';\n }\n else if (typeof (cell.value) === 'number') {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: cell.style.numberFormat }));\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: this.globalStyles.get(cell.style.name) }));\n }\n else {\n csv += cell.value;\n }\n }\n else {\n csv += this.parseCellValue(cell.value);\n }\n }\n this.csvStr = csv;\n };\n CsvHelper.prototype.parseCellValue = function (value) {\n if (value.indexOf(',') !== -1) {\n return value = '\\\"' + value + '\\\"';\n }\n else {\n return value;\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName- file name to save.\n * @param {Blob} buffer- the content to write in file\n */\n CsvHelper.prototype.save = function (fileName) {\n this.buffer = new Blob(['\\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 */\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 //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 if (sheet.freezePanes !== undefined) {\n sheetString += (this.saveFreezePanes(sheet));\n }\n if (sheet.columns !== undefined) {\n var colString = '';\n for (var _i = 0, _a = sheet.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n if (column.width !== undefined) {\n colString += '';\n }\n else {\n colString += '';\n }\n }\n sheetString += (colString + '');\n }\n sheetString += ('');\n sheetBlob.append(sheetString);\n sheetString = '';\n if (sheet.rows !== undefined) {\n for (var _b = 0, _c = sheet.rows; _b < _c.length; _b++) {\n var row = _c[_b];\n var rowString = '');\n for (var _d = 0, _e = row.cells; _d < _e.length; _d++) {\n var cell = _e[_d];\n if (cell !== undefined && (cell.value !== undefined || cell.cellStyle !== undefined)) {\n rowString += ('');\n if (cell.value !== undefined) {\n rowString += ('' + cell.value + '');\n }\n else {\n rowString += ('');\n }\n }\n }\n rowString += ('');\n sheetBlob.append(rowString);\n }\n }\n sheetString += ('');\n if (sheet.mergeCells.length > 0) {\n sheetString += ('');\n for (var _f = 0, _g = sheet.mergeCells; _f < _g.length; _f++) {\n var mCell = _g[_f];\n sheetString += ('');\n }\n sheetString += ('');\n }\n if (sheet.hyperLinks.length > 0) {\n sheetString += ('');\n for (var _h = 0, _j = sheet.hyperLinks; _h < _j.length; _h++) {\n var hLink = _j[_h];\n sheetString += ('');\n }\n sheetString += ('');\n this.addToArchive(this.saveSheetRelations(sheet), ('xl/worksheets/_rels/sheet' + sheet.index + '.xml.rels'));\n }\n /* tslint:disable-next-line:max-line-length */\n sheetString += ('');\n sheetBlob.append(sheetString);\n this.addToArchive(sheetBlob.getBlob(), 'xl/worksheets' + '/sheet' + (index + 1) + '.xml');\n };\n Workbook.prototype.pixelsToColumnWidth = function (pixels) {\n var dDigitWidth = 7;\n var val = (pixels > dDigitWidth + 5) ?\n this.trunc((pixels - 5) / dDigitWidth * 100 + 0.5) / 100 :\n pixels / (dDigitWidth + 5);\n return (val > 1) ?\n ((val * dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0 :\n (val * (dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0;\n };\n Workbook.prototype.trunc = function (x) {\n var n = x - x % 1;\n return n === 0 && (x < 0 || (x === 0 && (1 / x !== 1 / 0))) ? -0 : n;\n };\n Workbook.prototype.pixelsToRowHeight = function (pixels) {\n return (pixels * this.unitsProportions[5] / this.unitsProportions[6]);\n };\n Workbook.prototype.saveSheetRelations = function (sheet) {\n /* tslint:disable-next-line:max-line-length */\n var relStr = '';\n for (var _i = 0, _a = sheet.hyperLinks; _i < _a.length; _i++) {\n var hLink = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n relStr += '';\n }\n relStr += '';\n return relStr;\n };\n Workbook.prototype.saveFreezePanes = function (sheet) {\n var paneString = ' 0) {\n /* tslint:disable-next-line:max-line-length */\n var sstStart = '';\n var si = '';\n for (var i = 0; i < length; i++) {\n si += '';\n si += this.processString(this.sharedString[i]);\n si += '';\n }\n si += '';\n this.addToArchive(sstStart + si, 'xl/sharedStrings.xml');\n }\n };\n Workbook.prototype.processString = function (value) {\n if (value.indexOf('&') !== -1) {\n value = value.replace(/&/g, '&');\n }\n if (value.indexOf('<') !== -1) {\n value = value.replace(/') !== -1) {\n value = value.replace(/>/g, '>');\n }\n return value;\n };\n Workbook.prototype.saveStyles = function () {\n 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 };\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') {\n return format(value);\n }\n else {\n return value;\n }\n };\n ValueFormatter.prototype.toView = function (value, format) {\n var result = value;\n if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n result = format(value);\n }\n return result;\n };\n ValueFormatter.prototype.setCulture = function (cultureName) {\n if (!isNullOrUndefined(cultureName)) {\n setCulture(cultureName);\n }\n };\n return ValueFormatter;\n}());\nexport { ValueFormatter };\n","import { merge, isNullOrUndefined, getValue, extend } from '@syncfusion/ej2-base';\nimport { Query, DataUtil } from '@syncfusion/ej2-data';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getUid, templateCompiler, getForeignData } from '../base/util';\n/**\n * Represents Grid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n var _this = this;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n * @default true\n */\n this.allowSorting = true;\n /**\n * If `allowResizing` is set to false, it disables resize option of a particular column.\n * By default all the columns can be resized.\n * @default true\n */\n this.allowResizing = true;\n /**\n * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n * By default all columns are filterable.\n * @default true\n */\n this.allowFiltering = true;\n /**\n * If `allowGrouping` set to false, then it disables grouping of a particular column.\n * By default all columns are groupable.\n * @default true\n */\n this.allowGrouping = true;\n /**\n * If `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 merge(this, options);\n this.uid = getUid('grid-column');\n var valueFormatter = new ValueFormatter();\n if (options.format && (options.format.skeleton || options.format.format)) {\n this.setFormatter(valueFormatter.getFormatFunction(options.format));\n this.setParser(valueFormatter.getParserFunction(options.format));\n }\n if (!this.field) {\n this.allowFiltering = false;\n this.allowGrouping = false;\n this.allowSorting = false;\n }\n if (this.commands && !this.textAlign) {\n this.textAlign = 'Right';\n }\n if (this.template || this.commandsTemplate) {\n this.templateFn = templateCompiler(this.template || this.commandsTemplate);\n }\n if (this.headerTemplate) {\n this.headerTemplateFn = templateCompiler(this.headerTemplate);\n }\n if (this.filter.itemTemplate) {\n this.fltrTemplateFn = templateCompiler(this.filter.itemTemplate);\n }\n if (this.isForeignColumn() && (isNullOrUndefined(this.editType) || this.editType === 'dropdownedit')) {\n this.editType = 'dropdownedit';\n this.edit.params = 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 = getValue(a_1, window);\n }\n if (this.sortDirection === 'Descending') {\n var z = x;\n x = y;\n y = z;\n }\n return a_1(x, y);\n };\n }\n if (!this.sortComparer && this.isForeignColumn()) {\n this.sortComparer = function (x, y) {\n x = getValue(_this.foreignKeyValue, getForeignData(_this, {}, x)[0]);\n y = getValue(_this.foreignKeyValue, getForeignData(_this, {}, y)[0]);\n return _this.sortDirection === 'Descending' ? DataUtil.fnDescending(x, y) : DataUtil.fnAscending(x, y);\n };\n }\n }\n /** @hidden */\n Column.prototype.getSortDirection = function () {\n return this.sortDirection;\n };\n /** @hidden */\n Column.prototype.setSortDirection = function (direction) {\n this.sortDirection = direction;\n };\n /** @hidden */\n Column.prototype.setProperties = function (column) {\n //Angular two way binding\n var keys = Object.keys(column);\n for (var i = 0; i < keys.length; i++) {\n this[keys[i]] = column[keys[i]];\n }\n };\n /**\n * @hidden\n * It defines the column is foreign key column or not.\n */\n Column.prototype.isForeignColumn = function () {\n return !!(this.dataSource && this.foreignKeyValue);\n };\n /** @hidden */\n Column.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /** @hidden */\n Column.prototype.setFormatter = function (value) {\n this.formatFn = value;\n };\n /** @hidden */\n Column.prototype.getParser = function () {\n return this.parserFn;\n };\n /** @hidden */\n Column.prototype.setParser = function (value) {\n this.parserFn = value;\n };\n /** @hidden */\n Column.prototype.getColumnTemplate = function () {\n return this.templateFn;\n };\n /** @hidden */\n Column.prototype.getHeaderTemplate = function () {\n return this.headerTemplateFn;\n };\n /** @hidden */\n Column.prototype.getFilterItemTemplate = function () {\n return this.fltrTemplateFn;\n };\n /** @hidden */\n Column.prototype.getDomSetter = function () {\n return this.disableHtmlEncode ? 'textContent' : 'innerHTML';\n };\n return Column;\n}());\nexport { Column };\n","/** @hidden */\nexport var created = 'create';\n/** @hidden */\nexport var destroyed = 'destroy';\n/** @hidden */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var 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 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 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, 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.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 if (this.options.template) {\n label.innerHTML = '';\n appendChildren(label, this.options.template(data));\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, getValue, addClass } from '@syncfusion/ej2-base';\nimport { attributes as addAttributes } from '@syncfusion/ej2-base';\nimport { rowDataBound, queryCellInfo } from '../base/constant';\nimport { setStyleAndAttributes } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { CellMergeRender } from './cell-merge-renderer';\n/**\n * RowRenderer class which responsible for building row content.\n * @hidden\n */\nvar RowRenderer = /** @class */ (function () {\n function RowRenderer(serviceLocator, cellType, parent) {\n this.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 = getValue(chekBoxEnable.field, rowArgs.data);\n }\n if (row.isDataRow) {\n row.isSelected = this.parent.getSelectedRowIndexes().indexOf(row.index) > -1 || value;\n }\n if (row.isDataRow && this.parent.isCheckBoxSelection\n && this.parent.checkAllRows === 'Check' && this.parent.enableVirtualization) {\n row.isSelected = true;\n if (this.parent.getSelectedRowIndexes().indexOf(row.index) === -1) {\n this.parent.getSelectedRowIndexes().push(row.index);\n }\n }\n this.buildAttributeFromRow(tr, row);\n addAttributes(tr, attrCopy);\n setStyleAndAttributes(tr, row.attributes);\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n for (var i = 0, len = row.cells.length; i < len; i++) {\n var cell = row.cells[i];\n cell.isSelected = row.isSelected;\n var cellRenderer = cellRendererFact.getCellRenderer(row.cells[i].cellType || CellType.Data);\n var attrs = { 'index': !isNullOrUndefined(row.index) ? row.index.toString() : '' };\n if (row.isExpand && row.cells[i].cellType === CellType.DetailExpand) {\n attrs['class'] = 'e-detailrowexpand';\n }\n var td = cellRenderer.render(row.cells[i], row.data, attrs);\n if (row.cells[i].cellType !== CellType.Filter) {\n if (row.cells[i].cellType === CellType.Data || row.cells[i].cellType === CellType.CommandColumn) {\n this.parent.trigger(queryCellInfo, extend(cellArgs, {\n cell: td, column: cell.column, colSpan: 1,\n foreignKeyData: row.cells[i].foreignKeyData\n }));\n if (cellArgs.colSpan > 1 || row.cells[i].cellSpan > 1) {\n var cellMerge = new CellMergeRender(this.serviceLocator, this.parent);\n td = cellMerge.render(cellArgs, row, i, td);\n }\n }\n if (!row.cells[i].isSpanned) {\n tr.appendChild(td);\n }\n }\n }\n var args = { row: tr, rowHeight: this.parent.rowHeight };\n if (row.isDataRow) {\n this.parent.trigger(rowDataBound, extend(rowArgs, args));\n }\n if (this.parent.enableVirtualization) {\n rowArgs.rowHeight = this.parent.rowHeight;\n }\n if (rowArgs.rowHeight) {\n tr.style.height = rowArgs.rowHeight + 'px';\n }\n else if (this.parent.rowHeight && 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 = this.parent.getColumnIndexByField(column.field);\n }\n return new Cell(opt);\n };\n RowModelGenerator.prototype.refreshRows = function (input) {\n var _this = this;\n input.forEach(function (row) {\n _this.refreshForeignKeyRow(row);\n row.cells = _this.generateCells(row);\n });\n return input;\n };\n return RowModelGenerator;\n}());\nexport { RowModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Row } from '../models/row';\nimport { Column } from '../models/column';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { calculateAggregate } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { Cell } from '../models/cell';\n/**\n * Summary row model generator\n * @hidden\n */\nvar SummaryModelGenerator = /** @class */ (function () {\n /**\n * Constructor for Summary row model generator\n */\n function SummaryModelGenerator(parent) {\n this.parent = parent;\n }\n SummaryModelGenerator.prototype.getData = function () {\n var _this = this;\n var rows = [];\n this.parent.aggregates.slice().forEach(function (row) {\n var columns = row.columns.filter(function (column) {\n return !(column.footerTemplate || column.groupFooterTemplate || column.groupCaptionTemplate)\n || _this.columnSelector(column);\n });\n if (columns.length) {\n rows.push({ columns: columns });\n }\n });\n return rows;\n };\n SummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.footerTemplate !== undefined;\n };\n SummaryModelGenerator.prototype.getColumns = function (start, end) {\n var columns = [];\n if (this.parent.allowGrouping) {\n this.parent.groupSettings.columns.forEach(function (value) { return columns.push(new Column({})); });\n }\n if (this.parent.detailTemplate || !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.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 } 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 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 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 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' && !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 { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport * as events from '../base/constant';\nimport { prepareColumns, setFormatter, getDatePredicate } from '../base/util';\nimport { ContentRender } from '../renderer/content-renderer';\nimport { HeaderRender } from '../renderer/header-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { HeaderCellRenderer } from '../renderer/header-cell-renderer';\nimport { StackedHeaderCellRenderer } from '../renderer/stacked-cell-renderer';\nimport { IndentCellRenderer } from '../renderer/indent-cell-renderer';\nimport { GroupCaptionCellRenderer, GroupCaptionEmptyCellRenderer } from '../renderer/caption-cell-renderer';\nimport { ExpandCellRenderer } from '../renderer/expand-cell-renderer';\nimport { HeaderIndentCellRenderer } from '../renderer/header-indent-renderer';\nimport { DetailHeaderIndentCellRenderer } from '../renderer/detail-header-indent-renderer';\nimport { DetailExpandCellRenderer } from '../renderer/detail-expand-cell-renderer';\n/**\n * Content module is used to render grid content\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function Render(parent, locator) {\n this.emptyGrid = false;\n this.parent = parent;\n this.locator = locator;\n this.data = new Data(parent, locator);\n this.l10n = locator.getService('localization');\n this.ariaService = this.locator.getService('ariaService');\n this.renderer = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * To initialize grid header, content and footer rendering\n */\n Render.prototype.render = function () {\n var gObj = this.parent;\n this.headerRenderer = this.renderer.getRenderer(RenderType.Header);\n this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n this.headerRenderer.renderPanel();\n this.contentRenderer.renderPanel();\n if (gObj.getColumns().length) {\n this.headerRenderer.renderTable();\n this.contentRenderer.renderTable();\n this.emptyRow(false);\n }\n this.refreshDataManager();\n };\n /**\n * Refresh the entire Grid.\n * @return {void}\n */\n Render.prototype.refresh = function (e) {\n if (e === void 0) { e = { requestType: 'refresh' }; }\n this.parent.notify(e.requestType + \"-begin\", e);\n this.parent.trigger(events.actionBegin, e);\n if (e.cancel) {\n 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 remove(tbody);\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 = DataUtil.getObject(columns[i].field || '', data);\n if (columns[i].isForeignColumn() && columns[i].columnData) {\n value = DataUtil.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 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) {\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.buildColumns(e.result[0]);\n prepareColumns(this.parent.columns);\n this.headerRenderer.renderTable();\n this.contentRenderer.renderTable();\n this.parent.notify(events.autoCol, {});\n };\n Render.prototype.buildColumns = function (record) {\n var columns = Object.keys(record);\n var cols = [];\n for (var i = 0, len = columns.length; i < len; i++) {\n cols[i] = { 'field': columns[i] };\n if (this.parent.enableColumnVirtualization) {\n cols[i].width = !isNullOrUndefined(cols[i].width) ? cols[i].width : 200;\n }\n }\n this.parent.columns = cols;\n };\n Render.prototype.instantiateRenderer = function () {\n this.renderer.addRenderer(RenderType.Header, new HeaderRender(this.parent, this.locator));\n this.renderer.addRenderer(RenderType.Content, new ContentRender(this.parent, this.locator));\n var cellrender = this.locator.getService('cellRendererFactory');\n cellrender.addCellRenderer(CellType.Header, new HeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Data, new CellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.StackedHeader, new StackedHeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Indent, new IndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.GroupCaption, new GroupCaptionCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.GroupCaptionEmpty, new GroupCaptionEmptyCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Expand, new ExpandCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.HeaderIndent, new HeaderIndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.StackedHeader, new StackedHeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.DetailHeader, new DetailHeaderIndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.DetailExpand, new DetailExpandCellRenderer(this.parent, this.locator));\n };\n Render.prototype.addEventListener = function () {\n var _this = this;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.modelChanged, this.refresh, this);\n this.parent.on(events.refreshComplete, this.refreshComplete, this);\n this.parent.on(events.bulkSave, this.sendBulkRequest, this);\n this.parent.on(events.showEmptyGrid, function () { _this.emptyGrid = true; }, this);\n this.parent.on(events.autoCol, this.dynamicColumnChange, this);\n };\n /** @hidden */\n Render.prototype.validateGroupRecords = function (e) {\n var _this = this;\n var index = e.result.length - 1;\n if (index < 0) {\n return Promise.resolve(e);\n }\n var group0 = e.result[0];\n var groupN = e.result[index];\n var predicate = [];\n var addWhere = function (input) {\n [group0, groupN].forEach(function (group) {\n return predicate.push(new Predicate('field', '==', group.field).and(_this.getPredicate('key', 'equal', group.key)));\n });\n input.where(Predicate.or(predicate));\n };\n var query = new Query();\n addWhere(query);\n var curDm = new DataManager(e.result);\n var curFilter = curDm.executeLocal(query);\n var newQuery = this.data.generateQuery(true);\n var rPredicate = [];\n if (this.data.isRemote()) {\n [group0, groupN].forEach(function (group) {\n return rPredicate.push(_this.getPredicate(group.field, 'equal', group.key));\n });\n newQuery.where(Predicate.or(rPredicate));\n }\n else {\n addWhere(newQuery);\n }\n var deferred = new Deferred();\n this.data.getData({}, newQuery).then(function (r) {\n _this.updateGroupInfo(curFilter, r.result);\n deferred.resolve(e);\n }).catch(function (e) { return deferred.reject(e); });\n return deferred.promise;\n };\n Render.prototype.getPredicate = function (key, operator, value) {\n if (value instanceof Date) {\n return getDatePredicate({ field: key, operator: operator, value: value });\n }\n return new Predicate(key, operator, value);\n };\n Render.prototype.updateGroupInfo = function (current, untouched) {\n var _this = this;\n var dm = new DataManager(untouched);\n current.forEach(function (element, index, array) {\n var uGroup = dm.executeLocal(new Query()\n .where(new Predicate('field', '==', element.field).and(_this.getPredicate('key', 'equal', element.key))))[0];\n element.count = uGroup.count;\n var itemGroup = element.items;\n var uGroupItem = uGroup.items;\n if (itemGroup.GroupGuid) {\n element.items = _this.updateGroupInfo(element.items, uGroup.items);\n }\n _this.parent.aggregates.forEach(function (row) {\n return row.columns.forEach(function (column) {\n var types = column.type instanceof Array ? column.type : [column.type];\n types.forEach(function (type) {\n var key = column.field + ' - ' + type.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 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 _this.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 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.frozenColumns ? this.parent.getHeaderContent().querySelector('.e-movableheader .e-table') :\n this.parent.getHeaderTable());\n };\n HeaderFocus.prototype.onClick = function (e) {\n var target = e.target;\n target = (target.classList.contains('e-headercell') ? target : closest(target, 'th'));\n if (!target && this.parent.frozenRows !== 0) {\n target = (e.target.classList.contains('e-rowcell') ? e.target :\n closest(e.target, 'td'));\n }\n if (!target) {\n return;\n }\n var _a = [target.parentElement.rowIndex, target.cellIndex], rowIndex = _a[0], cellIndex = _a[1];\n var val = getValue(rowIndex + \".\" + cellIndex, this.matrix.matrix);\n if (this.matrix.inValid(val)) {\n return false;\n }\n this.matrix.select(target.parentElement.rowIndex, target.cellIndex);\n };\n HeaderFocus.prototype.getFocusInfo = function () {\n var info = {};\n var _a = this.matrix.current, _b = _a[0], rowIndex = _b === void 0 ? 0 : _b, _c = _a[1], cellIndex = _c === void 0 ? 0 : _c;\n info.element = this.getTable().rows[rowIndex].cells[cellIndex];\n info.elementToFocus = this.getFocusable(info.element);\n info.outline = !info.element.classList.contains('e-filterbarcell');\n return info;\n };\n HeaderFocus.prototype.selector = function (row, cell) {\n return (cell.visible && (cell.column.field !== undefined || cell.isTemplate)) || cell.column.type === 'checkbox' ||\n cell.cellType === CellType.StackedHeader;\n };\n HeaderFocus.prototype.jump = function (action, current) {\n var frozenSwap = this.parent.frozenColumns > 0 &&\n (action === 'leftArrow' || action === 'shiftTab') && current[1] === 0;\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n return {\n swap: ((action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1) ||\n frozenSwap,\n toHeader: frozenSwap,\n toFrozen: frozenSwap\n };\n };\n HeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var 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 };\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) {\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 this.selectRowsByRange(isUndefined(this.prevRowIndex) ? rowIndex : this.prevRowIndex, rowIndex);\n this.selectCellsByRange(isUndefined(this.prevCIdxs) ? { rowIndex: rowIndex, cellIndex: cellIndex } : this.prevCIdxs, { rowIndex: rowIndex, cellIndex: cellIndex });\n }\n else {\n this.addRowsToSelection([rowIndex]);\n this.addCellsToSelection([{ rowIndex: rowIndex, cellIndex: cellIndex }]);\n }\n this.isDragged = false;\n };\n Selection.prototype.onCellFocused = function (e) {\n if (this.parent.frozenRows && e.container.isHeader && e.byKey) {\n if (e.keyArgs.action === 'upArrow') {\n if (this.parent.allowFiltering) {\n e.isJump = e.element.tagName === 'INPUT' ? true : false;\n }\n else {\n e.isJump = e.element.tagName === 'TH' ? true : false;\n }\n }\n else {\n if (e.keyArgs.action === 'downArrow') {\n var rIdx = Number(e.element.parentElement.getAttribute('aria-rowindex'));\n e.isJump = rIdx === 0 ? true : false;\n }\n else {\n if (e.keyArgs.action === 'ctrlHome') {\n e.isJump = true;\n }\n }\n }\n }\n var clear = this.parent.getFrozenColumns() ? (((e.container.isHeader && e.element.tagName !== 'TD' && e.isJump) ||\n ((e.container.isContent || e.element.tagName === 'TD') && !(e.container.isSelectable || e.element.tagName === 'TD')))\n && !(e.byKey && e.keyArgs.action === 'space')) : ((e.container.isHeader && e.isJump) ||\n (e.container.isContent && !e.container.isSelectable)) && !(e.byKey && e.keyArgs.action === 'space');\n var headerAction = (e.container.isHeader && e.element.tagName !== 'TD' && !closest(e.element, '.e-rowcell'))\n && !(e.byKey && e.keyArgs.action === 'space');\n if (!e.byKey || clear) {\n if (clear && !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 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 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 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 };\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 Grid.prototype.onPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\n var requireGridRefresh = false;\n var checkCursor;\n var args = { requestType: 'refresh' };\n if (this.isDestroyed) {\n return;\n }\n 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 this.freezeRefresh();\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 this.refresh();\n if (this.frozenColumns || this.frozenRows) {\n this.freezeRefresh();\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 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 /* 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 selectedRow = rowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n if (!isNullOrUndefined(selectedRow) && this.element.querySelectorAll('[data-uid=' + selectedRow[rowuID] + ']').length) {\n selectedRow.changes = rowData;\n refreshForeignData(selectedRow, this.getForeignKeyColumns(), selectedRow.changes);\n rowRenderer.refresh(selectedRow, this.getColumns(), true);\n }\n else {\n return;\n }\n };\n /**\n * Gets a cell by row and column index.\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n return this.getDataRows()[rowIndex].querySelectorAll('.e-rowcell')[columnIndex];\n };\n /**\n * Gets a movable table cell by row and column index.\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.getMovableDataRows()[rowIndex].querySelectorAll('.e-rowcell')[columnIndex - this.getFrozenColumns()];\n };\n /**\n * Gets a column header by column index.\n * @param {number} index - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByIndex = function (index) {\n return this.getHeaderTable().querySelectorAll('.e-headercell')[index];\n };\n /**\n * @hidden\n */\n Grid.prototype.getRowObjectFromUID = function (uid) {\n var rows = this.contentModule.getRows();\n var row = this.rowObject(rows, uid);\n if (this.getFrozenColumns()) {\n if (!row) {\n row = this.rowObject(this.contentModule.getMovableRows(), uid);\n return row;\n }\n }\n return row;\n };\n Grid.prototype.rowObject = function (rows, uid) {\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n if (row.uid === uid) {\n return row;\n }\n }\n return null;\n };\n /**\n * @hidden\n */\n Grid.prototype.getRowsObject = function () {\n return this.contentModule.getRows();\n };\n /**\n * @hidden\n */\n Grid.prototype.getMovableRowsObject = function () {\n return this.contentModule.getMovableRows();\n };\n /**\n * Gets a column header by column name.\n * @param {string} field - Specifies the column name.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByField = function (field) {\n return this.getColumnHeaderByUid(this.getColumnByField(field).uid);\n };\n /**\n * Gets a column header by UID.\n * @param {string} field - Specifies the column uid.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByUid = function (uid) {\n return this.getHeaderContent().querySelector('[e-mappinguid=' + uid + ']').parentElement;\n };\n /**\n * @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 * Get the names of the primary key columns of the Grid.\n * @return {string[]}\n */\n Grid.prototype.getPrimaryKeyFieldNames = function () {\n var keys = [];\n this.columnModel.forEach(function (column) {\n if (column.isPrimaryKey) {\n keys.push(column.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 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 /**\n * Binding events to the element while component creation.\n * @hidden\n */\n Grid.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n EventHandler.add(this.getContent(), 'dblclick', this.dblClickHandler, this);\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.getContent().firstElementChild, 'scroll', this.scrollHandler, this);\n EventHandler.add(this.element, 'mousemove', this.mouseMoveHandler, this);\n };\n /**\n * Unbinding events from the element while component destroy.\n * @hidden\n */\n Grid.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.mouseClickHandler);\n EventHandler.remove(this.element, 'touchend', this.mouseClickHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(this.getContent().firstElementChild, 'scroll', this.scrollHandler);\n EventHandler.remove(this.element, 'mousemove', this.mouseMoveHandler);\n };\n /**\n * @hidden\n */\n Grid.prototype.addListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.on(events.dataReady, this.dataReady, this);\n this.on(events.contentReady, this.recalcIndentWidth, this);\n this.on(events.headerRefreshed, this.recalcIndentWidth, this);\n this.dataBoundFunction = this.refreshMediaCol.bind(this);\n this.addEventListener(events.dataBound, this.dataBoundFunction);\n };\n /**\n * @hidden\n */\n Grid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.dataReady, this.dataReady);\n this.off(events.contentReady, this.recalcIndentWidth);\n this.off(events.headerRefreshed, this.recalcIndentWidth);\n this.removeEventListener(events.dataBound, this.dataBoundFunction);\n };\n /**\n * Get current visible data of grid.\n * @return {Object[]}\n * @hidden\n */\n Grid.prototype.getCurrentViewRecords = function () {\n return (this.allowGrouping && this.groupSettings.columns.length && 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; _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 () {\n this.removeSortIcons();\n this.isMultiSort = true;\n this.removeSortIcons();\n this.addSortIcons();\n this.isMultiSort = false;\n this.updateAriaAttr();\n };\n return Sort;\n}());\nexport { Sort };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { 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 = this.pagerModule.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 = this.pagerModule.createElement('div', {\n className: 'e-pagercontainer', attrs: { 'role': 'navigation' }\n });\n this.renderFirstNPrev(this.element);\n this.renderPrevPagerSet(this.element);\n this.element.appendChild(this.pagerModule.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 = this.pagerModule.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 = this.pagerModule.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 = this.pagerModule.createElement('div');\n this.PP = this.pagerModule.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 = this.pagerModule.createElement('div');\n this.NP = this.pagerModule.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 = this.pagerModule.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 = this.pagerModule.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 { 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 = this.pagerModule\n .createElement('div', { className: 'e-parentmsgbar', attrs: { 'aria-label': 'Pager Information' } });\n this.pageNoMsgElem = this.pagerModule.createElement('span', { className: 'e-pagenomsg', styles: 'textalign:right' });\n this.pageCountMsgElem = this.pagerModule.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 { 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(this.createElement('div', {\n className: 'e-mfirst e-icons e-icon-first',\n attrs: { title: this.getLocalizedLabel('firstPageTooltip'), tabindex: '-1' }\n }));\n this.element.appendChild(this.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(this.createElement('div', {\n className: 'e-mnext e-icons e-icon-next',\n attrs: { title: this.getLocalizedLabel('nextPageTooltip'), tabindex: '-1' }\n }));\n this.element.appendChild(this.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 { 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 = this.pagerModule.createElement('div', { className: 'e-pagesizes' });\n var dropDownDiv = this.pagerModule.createElement('div', { className: 'e-pagerdropdown' });\n var defaultTextDiv = this.pagerModule.createElement('div', { className: 'e-pagerconstant' });\n var input = this.pagerModule.createElement('input', { attrs: { type: 'text', tabindex: '1' } });\n this.pagerCons = this.pagerModule\n .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 { 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 = this.pagerModule\n .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 } 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, changeButtonType } from '../base/util';\nimport { FormValidator } from '@syncfusion/ej2-inputs';\nimport { DatePickerEditCell } from '../renderer/datepicker-edit-cell';\nimport { calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\n/**\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for the Grid editing module\n * @hidden\n */\n function Edit(parent, serviceLocator) {\n this.editCellType = {\n 'dropdownedit': DropDownEditCell, 'numericedit': NumericEditCell,\n 'datepickeredit': DatePickerEditCell, 'booleanedit': BooleanEditCell, 'defaultedit': DefaultEditCell\n };\n this.editType = { 'Inline': InlineEdit, 'Normal': InlineEdit, 'Batch': BatchEdit, 'Dialog': DialogEdit };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.l10n = this.serviceLocator.getService('localization');\n this.addEventListener();\n this.updateEditObj();\n this.createAlertDlg();\n this.createConfirmDlg();\n }\n Edit.prototype.updateColTypeObj = function () {\n for (var _i = 0, _a = this.parent.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n col.edit = extend(new this.editCellType[col.editType && this.editCellType[col.editType] ?\n col.editType : 'defaultedit'](this.parent, this.serviceLocator), col.edit || {});\n }\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @hidden\n */\n Edit.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var gObj = this.parent;\n var newProp = e.properties;\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowAdding':\n case 'allowDeleting':\n case 'allowEditing':\n if (gObj.editSettings.allowAdding || gObj.editSettings.allowEditing || gObj.editSettings.allowDeleting) {\n this.initialEnd();\n }\n break;\n case 'mode':\n this.updateEditObj();\n gObj.isEdit = false;\n gObj.refresh();\n break;\n }\n }\n };\n Edit.prototype.updateEditObj = function () {\n if (this.editModule) {\n this.editModule.destroy();\n }\n this.renderer = new EditRender(this.parent, this.serviceLocator);\n this.editModule = new this.editType[this.parent.editSettings.mode](this.parent, this.serviceLocator, this.renderer);\n };\n Edit.prototype.initialEnd = function () {\n this.updateColTypeObj();\n };\n Edit.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getContent(), 'touchstart', this.tapEvent, this);\n };\n Edit.prototype.unwireEvents = function () {\n EventHandler.remove(this.parent.getContent(), 'touchstart', this.tapEvent);\n };\n Edit.prototype.tapEvent = function (e) {\n if (this.getUserAgent()) {\n if (!Global.timer) {\n Global.timer = setTimeout(function () {\n Global.timer = null;\n }, 300);\n }\n else {\n clearTimeout(Global.timer);\n Global.timer = null;\n this.parent.notify(events.doubleTap, e);\n }\n }\n };\n Edit.prototype.getUserAgent = function () {\n var userAgent = window.navigator.userAgent.toLowerCase();\n return /iphone|ipod|ipad/.test(userAgent);\n };\n /**\n * Edits any bound record in the Grid by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row to be edited.\n */\n Edit.prototype.startEdit = function (tr) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowEditing || gObj.isEdit || gObj.editSettings.mode === 'Batch') {\n return;\n }\n if (!gObj.getSelectedRows().length) {\n if (!tr) {\n this.showDialog('EditOperationAlert', this.alertDObj);\n return;\n }\n }\n else if (!tr) {\n tr = gObj.getSelectedRows()[0];\n }\n if (tr.style.display === 'none') {\n return;\n }\n this.editModule.startEdit(tr);\n this.refreshToolbar();\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n this.parent.notify('start-edit', {});\n };\n /**\n * Cancels edited state.\n */\n Edit.prototype.closeEdit = function () {\n if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.showConfirmDialog\n && this.parent.element.querySelectorAll('.e-updatedtd').length) {\n this.showDialog('CancelEdit', this.dialogObj);\n return;\n }\n this.editModule.closeEdit();\n this.refreshToolbar();\n this.parent.notify('close-edit', {});\n };\n Edit.prototype.refreshToolbar = function () {\n this.parent.notify(events.toolbarRefresh, {});\n };\n /**\n * To adds a new row at the top with the given data. When data is not passed, it will add empty rows.\n * > `editSettings.allowEditing` should be true.\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added\n */\n Edit.prototype.addRecord = function (data, index) {\n if (!this.parent.editSettings.allowAdding) {\n return;\n }\n this.editModule.addRecord(data, index);\n this.refreshToolbar();\n this.parent.notify('start-add', {});\n };\n /**\n * Deletes a record with the given options. If fieldname and data are not given, the Grid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n * @param {string} fieldname - Defines the primary key field name of the column.\n * @param {Object} data - Defines the JSON data record to be deleted.\n */\n Edit.prototype.deleteRecord = function (fieldname, data) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowDeleting) {\n return;\n }\n if (!data) {\n if (!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') ? true : false;\n }\n break;\n case 'date':\n case 'datetime':\n if (col.editType !== 'datepicker' && value && value.length) {\n val = new Date(value);\n }\n break;\n }\n return val;\n };\n Edit.prototype.destroyToolTip = function () {\n var elements = [].slice.call(this.parent.element.querySelectorAll('.e-griderror'));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var elem = elements_1[_i];\n remove(elem);\n }\n this.parent.getContent().firstElementChild.style.position = 'relative';\n };\n Edit.prototype.createConfirmDlg = function () {\n this.dialogObj = this.dlgWidget([\n {\n click: this.dlgOk.bind(this),\n buttonModel: { content: this.l10n.getConstant('OKButton'), cssClass: 'e-primary', isPrimary: true }\n },\n {\n click: this.dlgCancel.bind(this),\n buttonModel: { cssClass: 'e-flat', content: this.l10n.getConstant('CancelButton') }\n }\n ], 'EditConfirm');\n };\n Edit.prototype.createAlertDlg = function () {\n this.alertDObj = this.dlgWidget([\n {\n click: this.alertClick.bind(this), buttonModel: { content: this.l10n.getConstant('OKButton'), cssClass: 'e-flat', isPrimary: true }\n }\n ], 'EditAlert');\n };\n Edit.prototype.alertClick = function () {\n this.alertDObj.hide();\n };\n Edit.prototype.dlgWidget = function (btnOptions, name) {\n var div = 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 changeButtonType(obj.element);\n return obj;\n };\n Edit.prototype.dlgCancel = function () {\n this.dialogObj.hide();\n };\n Edit.prototype.dlgOk = function (e) {\n switch (this.dialogObj.element.querySelector('.e-dlg-content').firstElementChild.innerText) {\n case this.l10n.getConstant('ConfirmDelete'):\n this.editModule.deleteRecord();\n break;\n case this.l10n.getConstant('CancelEdit'):\n this.editModule.closeEdit();\n break;\n case this.l10n.getConstant('BatchSaveConfirm'):\n this.endEditing();\n break;\n case this.l10n.getConstant('BatchSaveLostChanges'):\n this.executeAction();\n break;\n }\n this.dlgCancel();\n };\n /**\n * @hidden\n */\n Edit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.initialEnd, this.initialEnd, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n this.parent.on(events.autoCol, this.updateColTypeObj, this);\n this.parent.on(events.tooltipDestroy, this.destroyToolTip, this);\n this.parent.on(events.preventBatch, this.preventBatch, this);\n this.parent.on(events.destroyForm, this.destroyForm, this);\n this.actionBeginFunction = this.onActionBegin.bind(this);\n this.actionCompleteFunction = this.actionComplete.bind(this);\n this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.on(events.initialEnd, this.wireEvents, this);\n };\n /**\n * @hidden\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.initialEnd, this.initialEnd);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n this.parent.off(events.autoCol, this.updateColTypeObj);\n this.parent.off(events.tooltipDestroy, this.destroyToolTip);\n this.parent.off(events.preventBatch, this.preventBatch);\n this.parent.off(events.destroyForm, this.destroyForm);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.off(events.initialEnd, this.unwireEvents);\n };\n Edit.prototype.actionComplete = function (e) {\n var actions = ['add', 'beginEdit', 'save', 'delete', 'cancel'];\n if (actions.indexOf(e.requestType) < 0) {\n this.parent.isEdit = false;\n }\n this.refreshToolbar();\n };\n /**\n * @hidden\n */\n Edit.prototype.getCurrentEditedData = function (form, editedData) {\n var gObj = this.parent;\n var inputs = [].slice.call(form.querySelectorAll('.e-field'));\n for (var i = 0, len = inputs.length; i < len; i++) {\n var col = gObj.getColumnByUid(inputs[i].getAttribute('e-mappinguid'));\n var value = void 0;\n if (col && col.field) {\n var temp = col.edit.read;\n if (col.type !== 'checkbox') {\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n value = gObj.editModule.getValueFromType(col, (temp)(inputs[i]));\n }\n else {\n value = gObj.editModule.getValueFromType(col, col.edit.read(inputs[i]));\n }\n }\n else {\n value = inputs[i].checked;\n }\n setValue(col.field, value, editedData);\n }\n }\n return editedData;\n };\n /**\n * @hidden\n */\n Edit.prototype.onActionBegin = function (e) {\n var restrictedRequestTypes = ['filterafteropen', 'filterbeforeopen', 'filterchoicerequest', 'save'];\n if (this.parent.editSettings.mode !== 'Batch' && this.formObj && !this.formObj.isDestroyed\n && restrictedRequestTypes.indexOf(e.requestType) === -1) {\n this.destroyForm();\n this.destroyWidgets();\n }\n };\n /**\n * @hidden\n */\n Edit.prototype.destroyWidgets = function (cols) {\n cols = cols ? cols : this.parent.getColumns();\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n var col = cols_1[_i];\n var temp = col.edit.destroy;\n if (col.edit.destroy) {\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp();\n }\n else {\n col.edit.destroy();\n }\n }\n }\n };\n /**\n * @hidden\n */\n Edit.prototype.destroyForm = function () {\n this.destroyToolTip();\n if (this.formObj && !this.formObj.isDestroyed) {\n this.formObj.destroy();\n }\n this.destroyToolTip();\n };\n /**\n * To destroy the editing.\n * @return {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n 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 for (var _i = 0, cols_2 = cols; _i < cols_2.length; _i++) {\n var col = cols_2[_i];\n if (col.validationRules && form.querySelectorAll('#' + gObj.element.id + col.field).length) {\n rules[col.field] = col.validationRules;\n }\n else if (frzCols && col.validationRules\n && mForm.querySelectorAll('#' + gObj.element.id + col.field).length) {\n mRules[col.field] = col.validationRules;\n }\n }\n this.parent.editModule.formObj = this.createFormObj(form, rules);\n if (frzCols && this.parent.editSettings.mode !== 'Dialog') {\n this.parent.editModule.mFormObj = this.createFormObj(mForm, mRules);\n }\n };\n Edit.prototype.createFormObj = function (form, rules) {\n var _this = this;\n return new FormValidator(form, {\n rules: rules,\n validationComplete: function (args) {\n _this.validationComplete(args);\n },\n customPlacement: function (inputElement, error) {\n _this.valErrorPlacement(inputElement, error);\n }\n });\n };\n Edit.prototype.valErrorPlacement = function (inputElement, error) {\n if (this.parent.isEdit) {\n var id = error.getAttribute('for');\n var elem = this.getElemTable(inputElement).querySelector('#' + id + '_Error');\n if (!elem) {\n this.createTooltip(inputElement, error, id, '');\n }\n else {\n elem.querySelector('.e-tip-content').innerHTML = error.innerHTML;\n }\n }\n };\n Edit.prototype.getElemTable = function (inputElement) {\n var isFHdr;\n if (this.parent.editSettings.mode !== 'Dialog') {\n isFHdr = (this.parent.frozenRows && this.parent.frozenRows\n > (parseInt(closest(inputElement, '.e-row').getAttribute('aria-rowindex'), 10) || 0));\n }\n return this.parent.editSettings.mode !== 'Dialog' ? isFHdr ? this.parent.getHeaderTable() : this.parent.getContentTable() :\n this.parent.element.querySelector('#' + this.parent.element.id + '_dialogEdit_wrapper');\n };\n Edit.prototype.validationComplete = function (args) {\n if (this.parent.isEdit) {\n var elem = this.getElemTable(args.element).querySelector('#' + args.inputName + '_Error');\n if (elem) {\n if (args.status === 'failure') {\n elem.style.display = '';\n }\n else {\n elem.style.display = 'none';\n }\n }\n }\n };\n Edit.prototype.createTooltip = function (element, error, name, display) {\n var gcontent = this.parent.getContent().firstElementChild;\n var isScroll = gcontent.scrollHeight > gcontent.clientHeight;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n var isFHdr;\n if (isInline) {\n isFHdr = (this.parent.frozenRows && this.parent.frozenRows\n > (parseInt(closest(element, '.e-row').getAttribute('aria-rowindex'), 10) || 0));\n }\n var fCont = this.parent.getContent().querySelector('.e-frozencontent');\n var table = isInline ?\n (isFHdr ? this.parent.getHeaderTable() : this.parent.getContentTable()) :\n this.parent.element.querySelector('#' + this.parent.element.id + '_dialogEdit_wrapper').querySelector('.e-dlg-content');\n var client = table.getBoundingClientRect();\n var left = isInline ?\n this.parent.element.getBoundingClientRect().left : client.left;\n var input = parentsUntil(element, 'e-rowcell');\n var inputClient = input.getBoundingClientRect();\n var td = closest(element, 'td').getBoundingClientRect();\n var div = 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:' + td.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 < td.width &&\n div.querySelector('label').getBoundingClientRect().height / (lineHeight * 1.2) >= 2) {\n div.style.width = div.style.maxWidth;\n }\n div.style.left = (parseInt(div.style.left, 10) - div.offsetWidth / 2) + 'px';\n if (!isScroll && isInline && !this.parent.allowPaging) {\n gcontent.style.position = 'static';\n var pos = calculateRelativeBasedPosition(input, div);\n div.style.top = pos.top + inputClient.height + 9 + 'px';\n }\n };\n return Edit;\n}());\nexport { Edit };\n/** @hidden */\nexport var Global;\n(function (Global) {\n Global.timer = null;\n})(Global || (Global = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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';\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.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 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 } from '@syncfusion/ej2-calendars';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\n/**\n * `datefilterui` render date column.\n * @hidden\n */\nvar DateFilterUI = /** @class */ (function () {\n function DateFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.fltrSettings = filterSettings;\n }\n DateFilterUI.prototype.create = function (args) {\n var intl = new Internationalization();\n var colFormat = args.column.format;\n var format = intl.getDatePattern({ type: 'date', skeleton: colFormat }, false);\n this.dialogObj = args.dialogObj;\n this.inputElem = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'dateui-' + args.column.uid });\n args.target.appendChild(this.inputElem);\n this.datePickerObj = new DatePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('ChooseDate'),\n width: '100%',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n open: this.openPopup.bind(this),\n });\n this.datePickerObj.appendTo(this.inputElem);\n };\n DateFilterUI.prototype.write = function (args) {\n var columns = this.fltrSettings.columns;\n var dateuiObj = document.querySelector('#dateui-' + args.column.uid).ej2_instances[0];\n dateuiObj.value = !isNullOrUndefined(args.filteredValue) ? new Date(args.filteredValue) : null;\n };\n DateFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var dateuiObj = document.querySelector('#dateui-' + column.uid).ej2_instances[0];\n var filterValue = dateuiObj.value;\n filterValue = isNullOrUndefined(filterValue) ? null : filterValue;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', true);\n };\n DateFilterUI.prototype.openPopup = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n return DateFilterUI;\n}());\nexport { DateFilterUI };\n","import { isNullOrUndefined, getValue, remove } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { FlMenuOptrUI } from './filter-menu-operator';\nimport { StringFilterUI } from './string-filter-ui';\nimport { NumberFilterUI } from './number-filter-ui';\nimport { BooleanFilterUI } from './boolean-filter-ui';\nimport { DateFilterUI } from './date-filter-ui';\nimport { getFilterMenuPostion, parentsUntil } from '../base/util';\nimport * as events from '../base/constant';\n/**\n * `filter menu` render boolean column.\n * @hidden\n */\nvar FilterMenuRenderer = /** @class */ (function () {\n function FilterMenuRenderer(parent, filterSettings, serviceLocator, customFltrOperators, fltrObj) {\n this.isDialogOpen = false;\n this.colTypes = {\n 'string': StringFilterUI, 'number': NumberFilterUI, 'date': DateFilterUI, 'boolean': BooleanFilterUI, 'datetime': DateFilterUI\n };\n this.parent = parent;\n this.filterSettings = filterSettings;\n this.serviceLocator = serviceLocator;\n this.customFilterOperators = customFltrOperators;\n this.filterObj = fltrObj;\n this.flMuiObj = new FlMenuOptrUI(this.parent, this.customFilterOperators, this.serviceLocator);\n this.l10n = this.serviceLocator.getService('localization');\n }\n FilterMenuRenderer.prototype.openDialog = function (args) {\n this.col = this.parent.getColumnByField(args.field);\n if (isNullOrUndefined(this.col.filter) || (isNullOrUndefined(this.col.filter.type) || this.col.filter.type === 'Menu')) {\n this.renderDlgContent(args.target, this.col);\n }\n };\n FilterMenuRenderer.prototype.closeDialog = function () {\n 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 this.writeMethod(column, this.dlgObj.element.querySelector('#' + column.uid + '-flmenu'));\n var args = {\n requestType: events.filterAfterOpen,\n filterModel: this, columnName: column.field, columnType: column.type\n };\n this.isDialogOpen = true;\n this.parent.trigger(events.actionComplete, args);\n };\n FilterMenuRenderer.prototype.renderFilterUI = function (target, col) {\n var dlgConetntEle = this.dlgObj.element.querySelector('.e-flmenu-maindiv');\n this.renderOperatorUI(dlgConetntEle, target, col);\n this.renderFlValueUI(dlgConetntEle, target, col);\n };\n FilterMenuRenderer.prototype.renderOperatorUI = function (dlgConetntEle, target, column) {\n this.flMuiObj.renderOperatorUI(dlgConetntEle, target, column, this.dlgObj);\n };\n FilterMenuRenderer.prototype.renderFlValueUI = function (dlgConetntEle, target, column) {\n var valueDiv = this.parent.createElement('div', { className: 'e-flmenu-valuediv' });\n dlgConetntEle.appendChild(valueDiv);\n var args = { target: valueDiv, column: column, getOptrInstance: this.flMuiObj, dialogObj: this.dlgObj };\n var instanceofFilterUI = new this.colTypes[column.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n if (!isNullOrUndefined(column.filter) && !isNullOrUndefined(column.filter.ui)\n && !isNullOrUndefined(column.filter.ui.create)) {\n var temp = column.filter.ui.create;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n 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 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 (!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 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 } 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 { Internationalization } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { DropDownList, AutoComplete } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { RadioButton, CheckBox } from '@syncfusion/ej2-buttons';\nimport { distinctStringValues, isComplexField, getComplexFieldID } from '../base/util';\nimport { generateQuery } from '../base/constant';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\n/**\n * @hidden\n * `ExcelFilter` module is used to handle filtering action.\n */\nvar ExcelFilter = /** @class */ (function (_super) {\n __extends(ExcelFilter, _super);\n /**\n * Constructor for excel filtering module\n * @hidden\n */\n function ExcelFilter(parent, filterSettings, serviceLocator, customFltrOperators) {\n var _this = _super.call(this, parent, filterSettings, serviceLocator) || this;\n _this.customFilterOperators = customFltrOperators;\n _this.isExcel = true;\n return _this;\n }\n ExcelFilter.prototype.getCMenuDS = function (type, operator) {\n var options = {\n number: ['Equal', 'NotEqual', '', 'LessThan', 'LessThanOrEqual', 'GreaterThan',\n 'GreaterThanOrEqual', 'Between', '', 'CustomFilter'],\n string: ['Equal', 'NotEqual', '', 'StartsWith', 'EndsWith', '', 'Contains', '', 'CustomFilter'],\n };\n options.date = options.number;\n options.datetime = options.number;\n var model = [];\n for (var i = 0; i < options[type].length; i++) {\n if (options[type][i].length) {\n if (operator) {\n model.push({\n text: this.getLocalizedLabel(options[type][i]) + '...',\n iconCss: 'e-icons e-icon-check ' + (operator === options[type][i].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: 'DateFilter', 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 row.cells[1].querySelector('input:not([type=hidden])').focus();\n },\n close: this.removeDialog.bind(this),\n created: this.createdDialog.bind(this, target, column),\n buttons: [{\n click: this.filterBtnClick.bind(this, column),\n buttonModel: {\n content: this.getLocalizedLabel('OKButton'), isPrimary: true, cssClass: 'e-xlfl-okbtn'\n }\n },\n {\n click: this.removeDialog.bind(this),\n buttonModel: { content: this.getLocalizedLabel('CancelButton'), cssClass: 'e-xlfl-cancelbtn' }\n }],\n content: mainDiv,\n width: 430,\n animationSettings: { effect: 'None' },\n });\n this.dlgObj.appendTo(this.dlgDiv);\n };\n ExcelFilter.prototype.removeDialog = function () {\n this.removeObjects([this.dropOptr, this.datePicker, this.actObj, this.numericTxtObj, this.dlgObj]);\n remove(this.dlgDiv);\n };\n ExcelFilter.prototype.clearBtnClick = function (field) {\n this.clearFilter();\n this.removeDialog();\n };\n ExcelFilter.prototype.createdDialog = function (target, column) {\n this.renderCustomFilter(target, column);\n this.dlgObj.element.style.left = '0px';\n this.dlgObj.element.style.top = '0px';\n if (Browser.isDevice && window.innerWidth < 440) {\n this.dlgObj.element.style.width = '90%';\n }\n this.dlgObj.show();\n };\n ExcelFilter.prototype.renderCustomFilter = function (target, column) {\n var dlgConetntEle = this.dlgObj.element.querySelector('.e-xlfl-maindiv');\n /* tslint:disable-next-line:max-line-length */\n var dlgFields = 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 valueInput = this.parent.createElement('input', { id: isComplex ? complexFieldName + elementId : column + elementId });\n valueDiv.appendChild(valueInput);\n value.appendChild(valueDiv);\n var flValue;\n var predicate;\n if (predicates && predicates.length > 0) {\n predicate = predicates.length === 2 ?\n (isFirst ? predicates[0] : predicates[1]) :\n (isFirst ? predicates[0] : undefined);\n flValue = (predicate && predicate.operator === optr.operator) ? predicate.value : undefined;\n }\n var types = {\n 'string': this.renderAutoComplete.bind(this),\n 'number': this.renderNumericTextBox.bind(this),\n 'date': this.renderDate.bind(this),\n 'datetime': this.renderDate.bind(this)\n };\n types[this.options.type](this.options, column, valueInput, flValue, this.parent.enableRtl);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderMatchCase = function (column, tr, matchCase, elementId, predicates) {\n /* tslint:disable-next-line:max-line-length */\n var matchCaseDiv = 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 intl = new Internationalization();\n var format = intl.getDatePattern({ type: 'date', skeleton: options.format }, false);\n this.datePicker = new DatePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: this.getLocalizedLabel('CustomFilterDatePlaceHolder'),\n width: '100%',\n enableRtl: isRtl,\n value: new Date(fValue),\n });\n this.datePicker.appendTo(inputValue);\n };\n ExcelFilter.prototype.completeAction = function (e) {\n e.result = distinctStringValues(e.result);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderNumericTextBox = function (options, column, inputValue, fValue, isRtl) {\n this.numericTxtObj = new NumericTextBox({\n format: options.format,\n placeholder: this.getLocalizedLabel('CustomFilterPlaceHolder'),\n enableRtl: isRtl,\n value: fValue\n });\n this.numericTxtObj.appendTo(inputValue);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderAutoComplete = function (options, column, inputValue, fValue, isRtl) {\n var _this = this;\n var colObj = this.parent.getColumnByField(column);\n var isForeignColumn = colObj.isForeignColumn();\n var dataSource = isForeignColumn ? colObj.dataSource : options.dataSource;\n var fields = { value: isForeignColumn ? colObj.foreignKeyValue : column };\n var actObj = new AutoComplete({\n dataSource: dataSource instanceof DataManager ? dataSource : new DataManager(dataSource),\n fields: fields,\n query: this.parent.query.clone(),\n sortOrder: 'Ascending',\n locale: this.parent.locale,\n autofill: true,\n focus: function () {\n 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 e.result = e.result.filter(function (obj, index, arr) {\n return arr.map(function (mapObject) {\n return mapObject[actObj.fields.value];\n }).indexOf(obj[_this.actObj.fields.value]) === index;\n });\n },\n value: fValue\n });\n actObj.appendTo(inputValue);\n this.actObj = actObj;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n ExcelFilter.prototype.getModuleName = function () {\n return 'excelFilter';\n };\n return ExcelFilter;\n}(CheckBoxFilter));\nexport { ExcelFilter };\n","import { EventHandler, isNullOrUndefined, extend, closest, getValue } from '@syncfusion/ej2-base';\nimport { getActualPropFromColl, isActionPrevent, getColumnByForeignKeyValue } from '../base/util';\nimport { remove, 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 (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, isNullOrUndefined } 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';\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 };\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 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 if (this.parent.getFrozenColumns()) {\n if (!this.parent.getHeaderContent().querySelectorAll('.e-stackedheadercell').length) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n }\n this.element.style.height = this.element.parentElement.offsetHeight + 'px';\n this.setHelperHeight();\n }\n var pageX = this.getPointX(e);\n var mousemove = this.parent.enableRtl ? -(pageX - this.pageX) : (pageX - this.pageX);\n var colData = {\n width: parseInt(this.widthService.getWidth(this.column).toString(), 10) + mousemove,\n minWidth: this.column.minWidth ? parseInt(this.column.minWidth.toString(), 10) : null,\n maxWidth: this.column.maxWidth ? parseInt(this.column.maxWidth.toString(), 10) : null\n };\n var width = this.getWidth(colData.width, colData.minWidth, colData.maxWidth);\n if ((!this.parent.enableRtl && this.minMove >= pageX) || (this.parent.enableRtl && this.minMove <= pageX)) {\n width = this.column.minWidth ? parseInt(this.column.minWidth.toString(), 10) : 0;\n this.pageX = pageX = this.minMove;\n }\n if (width !== parseInt(this.column.width.toString(), 10)) {\n this.pageX = pageX;\n this.column.width = formatUnit(width);\n var args = {\n e: e,\n column: this.column\n };\n this.parent.trigger(events.onResize, args);\n if (args.cancel) {\n this.cancelResizeAction(true);\n return;\n }\n this.widthService.setColumnWidth(this.column, null, 'resize');\n this.updateHelper();\n }\n this.isDblClk = false;\n };\n Resize.prototype.resizeEnd = function (e) {\n if (!this.helper || this.parent.isDestroyed) {\n return;\n }\n EventHandler.remove(this.parent.element, Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(document, Browser.touchEndEvent, this.resizeEnd);\n this.updateCursor('remove');\n detach(this.helper);\n var args = {\n e: e,\n column: this.column\n };\n this.parent.trigger(events.resizeStop, args);\n closest(this.element, '.e-headercell').classList.add('e-resized');\n 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 var destColumn = gObj.getColumnByUid(destElemUid);\n if (isNullOrUndefined(destColumn) || destColumn.allowReordering === false) {\n return;\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 if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.initializeDrag);\n this.parent.off(events.columnDrop, this.columnDrop);\n this.parent.off(events.rowDragAndDropComplete, this.onActionComplete);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n //destory ejdrag and drop\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n RowDD.prototype.getModuleName = function () {\n return 'rowDragAndDrop';\n };\n return RowDD;\n}());\nexport { RowDD };\n","import { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { createElement, closest, remove, classList, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { parentsUntil, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\n/**\n *\n * The `Group` module is used to handle group action.\n */\nvar Group = /** @class */ (function () {\n /**\n * Constructor for Grid group module\n * @hidden\n */\n function Group(parent, groupSettings, sortedColumns, serviceLocator) {\n var _this = this;\n this.isAppliedGroup = false;\n this.isAppliedUnGroup = false;\n this.visualElement = createElement('div', {\n className: 'e-cloneproperties e-dragclone e-gdclone',\n styles: 'line-height:23px', attrs: { action: 'grouping' }\n });\n this.helper = function (e) {\n var gObj = _this.parent;\n var target = e.sender.target;\n var element = target.classList.contains('e-groupheadercell') ? target :\n parentsUntil(target, 'e-groupheadercell');\n if (!element) {\n return false;\n }\n _this.column = gObj.getColumnByField(element.firstElementChild.getAttribute('ej-mappingname'));\n _this.visualElement.textContent = element.textContent;\n _this.visualElement.style.width = element.offsetWidth + 2 + 'px';\n _this.visualElement.style.height = element.offsetHeight + 2 + 'px';\n _this.visualElement.setAttribute('e-mappinguid', _this.column.uid);\n gObj.element.appendChild(_this.visualElement);\n return _this.visualElement;\n };\n this.dragStart = function () {\n _this.parent.element.classList.add('e-ungroupdrag');\n };\n this.drag = function (e) {\n var target = e.target;\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n _this.parent.trigger(events.columnDrag, { target: target, draggableType: 'headercell', column: _this.column });\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n if (!(parentsUntil(target, 'e-gridcontent') || parentsUntil(target, 'e-headercell'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n };\n this.dragStop = function (e) {\n _this.parent.element.classList.remove('e-ungroupdrag');\n if (!(parentsUntil(e.target, 'e-gridcontent') || parentsUntil(e.target, 'e-gridheader'))) {\n remove(e.helper);\n return;\n }\n };\n this.drop = function (e) {\n var gObj = _this.parent;\n var column = gObj.getColumnByUid(e.droppedElement.getAttribute('e-mappinguid'));\n _this.element.classList.remove('e-hover');\n remove(e.droppedElement);\n _this.aria.setDropTarget(_this.parent.element.querySelector('.e-groupdroparea'), false);\n _this.aria.setGrabbed(_this.parent.getHeaderTable().querySelector('[aria-grabbed=true]'), false);\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n parentsUntil(gObj.getColumnHeaderByUid(column.uid), 'e-grid').getAttribute('id') !==\n gObj.element.getAttribute('id')) {\n return;\n }\n _this.groupColumn(column.field);\n };\n this.contentRefresh = true;\n this.aria = new AriaService();\n this.parent = parent;\n this.groupSettings = groupSettings;\n this.serviceLocator = serviceLocator;\n this.sortedColumns = sortedColumns;\n this.focus = serviceLocator.getService('focus');\n this.addEventListener();\n }\n Group.prototype.columnDrag = function (e) {\n var gObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n if (!parentsUntil(e.target, 'e-groupdroparea') &&\n !(this.parent.allowReordering && parentsUntil(e.target, 'e-headercell'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n e.target.classList.contains('e-groupdroparea') ? this.element.classList.add('e-hover') : this.element.classList.remove('e-hover');\n };\n Group.prototype.columnDragStart = function (e) {\n if (e.target.classList.contains('e-stackedheadercell')) {\n return;\n }\n var gObj = this.parent;\n var dropArea = this.parent.element.querySelector('.e-groupdroparea');\n this.aria.setDropTarget(dropArea, e.column.allowGrouping);\n var element = e.target.classList.contains('e-headercell') ? e.target : parentsUntil(e.target, 'e-headercell');\n this.aria.setGrabbed(element, true, !e.column.allowGrouping);\n };\n Group.prototype.columnDrop = function (e) {\n var gObj = this.parent;\n if (e.droppedElement.getAttribute('action') === 'grouping') {\n var column = gObj.getColumnByUid(e.droppedElement.getAttribute('e-mappinguid'));\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n parentsUntil(gObj.getColumnHeaderByUid(column.uid), 'e-grid').getAttribute('id') !==\n gObj.element.getAttribute('id')) {\n return;\n }\n this.ungroupColumn(column.field);\n }\n };\n /**\n * @hidden\n */\n Group.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.groupComplete, this.onActionComplete, this);\n this.parent.on(events.ungroupComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.columnDrag, this.columnDrag, this);\n this.parent.on(events.columnDragStart, this.columnDragStart, this);\n this.parent.on(events.columnDrop, this.columnDrop, this);\n this.parent.on(events.headerRefreshed, this.refreshSortIcons, this);\n this.parent.on(events.sortComplete, this.refreshSortIcons, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.onEmpty, this.initialEnd, this);\n this.parent.on(events.initialEnd, this.render, this);\n };\n /**\n * @hidden\n */\n Group.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.groupComplete, this.onActionComplete);\n this.parent.off(events.ungroupComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.columnDrag, this.columnDrag);\n this.parent.off(events.columnDragStart, this.columnDragStart);\n this.parent.off(events.columnDrop, this.columnDrop);\n this.parent.off(events.headerRefreshed, this.refreshSortIcons);\n this.parent.off(events.sortComplete, this.refreshSortIcons);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n };\n Group.prototype.initialEnd = function () {\n var gObj = this.parent;\n this.parent.off(events.contentReady, this.initialEnd);\n this.parent.off(events.onEmpty, this.initialEnd);\n if (this.parent.getColumns().length && this.groupSettings.columns.length) {\n this.contentRefresh = false;\n for (var _i = 0, _a = gObj.groupSettings.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n this.groupColumn(col);\n }\n this.contentRefresh = true;\n }\n };\n Group.prototype.keyPressHandler = function (e) {\n var gObj = this.parent;\n if ((!this.groupSettings.columns.length ||\n ['altDownArrow', 'altUpArrow', 'ctrlDownArrow', 'ctrlUpArrow', 'enter'].indexOf(e.action) === -1)) {\n return;\n }\n e.preventDefault();\n switch (e.action) {\n case 'altDownArrow':\n case 'altUpArrow':\n var selected = gObj.allowSelection ? gObj.getSelectedRowIndexes() : [];\n if (selected.length) {\n var rows = gObj.getContentTable().querySelector('tbody').children;\n var dataRow = gObj.getDataRows()[selected[selected.length - 1]];\n var grpRow = void 0;\n for (var i = dataRow.rowIndex; i >= 0; i--) {\n if (!rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-detailrow')) {\n grpRow = rows[i];\n break;\n }\n }\n this.expandCollapseRows(grpRow.querySelector(e.action === 'altUpArrow' ?\n '.e-recordplusexpand' : '.e-recordpluscollapse'));\n }\n break;\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'enter':\n if (this.parent.isEdit || (closest(e.target, '#' + this.parent.element.id + '_searchbar') !== null)) {\n return;\n }\n var element = this.focus.getFocusedElement();\n var row = element ? element.parentElement.querySelector('[class^=\"e-record\"]') : null;\n if (!row) {\n break;\n }\n this.expandCollapseRows(row);\n break;\n }\n };\n Group.prototype.clickHandler = function (e) {\n this.expandCollapseRows(e.target);\n this.applySortFromTarget(e.target);\n this.unGroupFromTarget(e.target);\n this.toogleGroupFromHeader(e.target);\n };\n Group.prototype.unGroupFromTarget = function (target) {\n if (target.classList.contains('e-ungroupbutton')) {\n this.ungroupColumn(target.parentElement.getAttribute('ej-mappingname'));\n }\n };\n Group.prototype.toogleGroupFromHeader = function (target) {\n if (this.groupSettings.showToggleButton) {\n if (target.classList.contains('e-grptogglebtn')) {\n if (target.classList.contains('e-toggleungroup')) {\n this.ungroupColumn(this.parent.getColumnByUid(target.parentElement.getAttribute('e-mappinguid')).field);\n }\n else {\n this.groupColumn(this.parent.getColumnByUid(target.parentElement.getAttribute('e-mappinguid')).field);\n }\n }\n else {\n if (target.classList.contains('e-toggleungroup')) {\n this.ungroupColumn(target.parentElement.getAttribute('ej-mappingname'));\n }\n }\n }\n };\n Group.prototype.applySortFromTarget = function (target) {\n var gObj = this.parent;\n var gHeader = closest(target, '.e-groupheadercell');\n if (gObj.allowSorting && gHeader && !target.classList.contains('e-ungroupbutton') &&\n !target.classList.contains('e-toggleungroup')) {\n var field = gHeader.firstElementChild.getAttribute('ej-mappingname');\n if (gObj.getColumnHeaderByField(field).querySelectorAll('.e-ascending').length) {\n gObj.sortColumn(field, 'Descending', true);\n }\n else {\n gObj.sortColumn(field, 'Ascending', true);\n }\n }\n };\n /**\n * Expands or collapses grouped rows by target element.\n * @param {Element} target - Defines the target element of the grouped row.\n * @return {void}\n */\n Group.prototype.expandCollapseRows = function (target) {\n var trgt = parentsUntil(target, 'e-recordplusexpand') ||\n parentsUntil(target, 'e-recordpluscollapse');\n if (trgt) {\n var cellIdx = trgt.cellIndex;\n var rowIdx = trgt.parentElement.rowIndex;\n var rowNodes = this.parent.getContentTable().querySelector('tbody').children;\n var rows = [].slice.call(rowNodes).slice(rowIdx + 1, rowNodes.length);\n var isHide = void 0;\n var expandElem = void 0;\n var toExpand = [];\n var indent = trgt.parentElement.querySelectorAll('.e-indentcell').length;\n var expand = false;\n if (trgt.classList.contains('e-recordpluscollapse')) {\n addClass([trgt], 'e-recordplusexpand');\n removeClass([trgt], 'e-recordpluscollapse');\n trgt.firstElementChild.className = 'e-icons e-gdiagonaldown e-icon-gdownarrow';\n expand = true;\n }\n else {\n isHide = true;\n removeClass([trgt], 'e-recordplusexpand');\n addClass([trgt], 'e-recordpluscollapse');\n trgt.firstElementChild.className = 'e-icons e-gnextforward e-icon-grightarrow';\n }\n this.aria.setExpand(trgt, expand);\n for (var i = 0, len = rows.length; i < len; i++) {\n if (rows[i].querySelectorAll('td')[cellIdx] &&\n rows[i].querySelectorAll('td')[cellIdx].classList.contains('e-indentcell') && rows) {\n if (isHide) {\n rows[i].style.display = 'none';\n }\n else {\n if (rows[i].querySelectorAll('.e-indentcell').length === indent + 1) {\n rows[i].style.display = '';\n expandElem = rows[i].querySelector('.e-recordplusexpand');\n if (expandElem) {\n toExpand.push(expandElem);\n }\n if (rows[i].classList.contains('e-detailrow')) {\n if (rows[i - 1].querySelectorAll('.e-detailrowcollapse').length) {\n rows[i].style.display = 'none';\n }\n }\n }\n }\n }\n else {\n break;\n }\n }\n for (var i = 0, len = toExpand.length; i < len; i++) {\n removeClass([toExpand[i]], 'e-recordplusexpand');\n addClass([toExpand[i]], 'e-recordpluscollapse');\n toExpand[i].firstElementChild.className = 'e-icons e-gnextforward e-icon-grightarrow';\n this.expandCollapseRows(toExpand[i]);\n }\n }\n };\n Group.prototype.expandCollapse = function (isExpand) {\n var rowNodes = this.parent.getContentTable().querySelector('tbody').children;\n var row;\n for (var i = 0, len = rowNodes.length; i < len; i++) {\n if (rowNodes[i].querySelectorAll('.e-recordplusexpand, .e-recordpluscollapse').length) {\n row = rowNodes[i].querySelector(isExpand ? '.e-recordpluscollapse' : '.e-recordplusexpand');\n if (row) {\n row.className = isExpand ? 'e-recordplusexpand' : 'e-recordpluscollapse';\n row.firstElementChild.className = isExpand ? 'e-icons e-gdiagonaldown e-icon-gdownarrow' :\n 'e-icons e-gnextforward e-icon-grightarrow';\n }\n if (!(rowNodes[i].firstElementChild.classList.contains('e-recordplusexpand') ||\n rowNodes[i].firstElementChild.classList.contains('e-recordpluscollapse'))) {\n rowNodes[i].style.display = isExpand ? '' : 'none';\n }\n }\n else {\n rowNodes[i].style.display = isExpand ? '' : 'none';\n }\n }\n };\n /**\n * Expands all the grouped rows of the Grid.\n * @return {void}\n */\n Group.prototype.expandAll = function () {\n this.expandCollapse(true);\n };\n /**\n * Collapses all the grouped rows of the Grid.\n * @return {void}\n */\n Group.prototype.collapseAll = function () {\n this.expandCollapse(false);\n };\n /**\n * The function is used to render grouping\n * @return {Element}\n * @hidden\n */\n Group.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.renderGroupDropArea();\n this.initDragAndDrop();\n this.refreshToggleBtn();\n };\n Group.prototype.renderGroupDropArea = function () {\n var groupElem = this.parent.element.querySelector('.e-groupdroparea');\n if (groupElem) {\n remove(groupElem);\n }\n this.element = 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 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 } from '../base/constant';\nimport { ContentRender } from './content-renderer';\nimport { RowRenderer } from './row-renderer';\nimport { SummaryModelGenerator } from '../services/summary-model-generator';\nimport { renderMovable } from '../base/util';\n/**\n * Footer module is used to render grid content\n * @hidden\n */\nvar FooterRenderer = /** @class */ (function (_super) {\n __extends(FooterRenderer, _super);\n function FooterRenderer(gridModule, serviceLocator) {\n var _this = _super.call(this, gridModule, serviceLocator) || this;\n _this.aggregates = {};\n _this.parent = gridModule;\n _this.locator = serviceLocator;\n _this.modelGenerator = new SummaryModelGenerator(_this.parent);\n _this.addEventListener();\n return _this;\n }\n /**\n * The function is used to render grid footer div\n */\n FooterRenderer.prototype.renderPanel = function () {\n var div = 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 };\n FooterRenderer.prototype.removeEventListener = function () {\n this.parent.off(colGroupRefresh, this.refreshCol);\n this.parent.off(columnWidthChanged, this.onWidthChange);\n this.parent.off(scroll, this.onScroll);\n this.parent.off(columnVisibilityChanged, this.columnVisibilityChanged);\n };\n FooterRenderer.prototype.updateFooterTableWidth = function (tFoot) {\n var tHead = this.parent.getHeaderTable();\n if (tHead && tFoot) {\n tFoot.style.width = tHead.style.width;\n }\n };\n return FooterRenderer;\n}(ContentRender));\nexport { FooterRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { appendChildren } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\n/**\n * SummaryCellRenderer class which responsible for building summary cell content.\n * @hidden\n */\nvar SummaryCellRenderer = /** @class */ (function (_super) {\n __extends(SummaryCellRenderer, _super);\n function SummaryCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _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 if (!(column.footerTemplate || column.groupFooterTemplate || column.groupCaptionTemplate)) {\n return true;\n }\n var tempObj = column.getTemplate(cell.cellType);\n appendChildren(node, tempObj.fn(data[column.columnName], this.parent, tempObj.property));\n return false;\n };\n return SummaryCellRenderer;\n}(CellRenderer));\nexport { SummaryCellRenderer };\n","import { 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 }\n _this.fromWheel = false;\n };\n };\n InterSectionObserver.prototype.setPageHeight = function (value) {\n this.options.pageHeight = value;\n };\n return InterSectionObserver;\n}());\nexport { InterSectionObserver };\n","import { Browser } from '@syncfusion/ej2-base';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupModelGenerator } from '../services/group-model-generator';\n/**\n * Content module is used to render grid content\n */\nvar VirtualRowModelGenerator = /** @class */ (function () {\n function VirtualRowModelGenerator(parent) {\n this.cOffsets = {};\n this.cache = {};\n this.data = {};\n this.groups = {};\n this.parent = parent;\n this.model = this.parent.pageSettings;\n this.rowModelGenerator = this.parent.allowGrouping ? new GroupModelGenerator(this.parent) : new RowModelGenerator(this.parent);\n }\n VirtualRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n var _this = this;\n var info = notifyArgs.virtualInfo = notifyArgs.virtualInfo || this.getData();\n var xAxis = info.sentinelInfo && info.sentinelInfo.axis === 'X';\n var page = !xAxis && info.loadNext && !info.loadSelf ? info.nextInfo.page : info.page;\n var result = [];\n var center = ~~(this.model.pageSize / 2);\n var indexes = this.getBlockIndexes(page);\n var loadedBlocks = [];\n this.checkAndResetCache(notifyArgs.requestType);\n if (this.parent.enableColumnVirtualization) {\n info.blockIndexes.forEach(function (value) {\n if (_this.isBlockAvailable(value)) {\n _this.cache[value] = _this.rowModelGenerator.refreshRows(_this.cache[value]);\n }\n });\n }\n info.blockIndexes.forEach(function (value) {\n if (!_this.isBlockAvailable(value)) {\n var rows = _this.rowModelGenerator.generateRows(data, {\n virtualInfo: info, startIndex: _this.getStartIndex(value, data)\n });\n var median = ~~Math.max(rows.length, _this.model.pageSize) / 2;\n if (!_this.isBlockAvailable(indexes[0])) {\n _this.cache[indexes[0]] = rows.slice(0, median);\n }\n if (!_this.isBlockAvailable(indexes[1])) {\n _this.cache[indexes[1]] = rows.slice(median);\n }\n }\n if (_this.parent.groupSettings.columns.length && !xAxis && _this.cache[value]) {\n _this.cache[value] = _this.updateGroupRow(_this.cache[value], value);\n }\n result.push.apply(result, _this.cache[value]);\n if (_this.isBlockAvailable(value)) {\n loadedBlocks.push(value);\n }\n });\n info.blockIndexes = loadedBlocks;\n var grouping = 'records';\n if (this.parent.allowGrouping) {\n this.parent.currentViewData[grouping] = result.map(function (m) { return m.data; });\n }\n else {\n this.parent.currentViewData = result.map(function (m) { return m.data; });\n }\n return result;\n };\n VirtualRowModelGenerator.prototype.getBlockIndexes = function (page) {\n return [page + (page - 1), page * 2];\n };\n VirtualRowModelGenerator.prototype.getPage = function (block) {\n return block % 2 === 0 ? block / 2 : (block + 1) / 2;\n };\n VirtualRowModelGenerator.prototype.isBlockAvailable = function (value) {\n return value in this.cache;\n };\n VirtualRowModelGenerator.prototype.getData = function () {\n return {\n page: this.model.currentPage,\n blockIndexes: this.getBlockIndexes(this.model.currentPage),\n direction: 'down',\n columnIndexes: this.parent.getColumnIndexesInView()\n };\n };\n VirtualRowModelGenerator.prototype.getStartIndex = function (blk, data, full) {\n if (full === void 0) { full = true; }\n var page = this.getPage(blk);\n var even = blk % 2 === 0;\n var index = (page - 1) * this.model.pageSize;\n return full || !even ? index : index + ~~(this.model.pageSize / 2);\n };\n VirtualRowModelGenerator.prototype.getColumnIndexes = function (content) {\n var _this = this;\n if (content === void 0) { content = this.parent.getHeaderContent().firstChild; }\n var indexes = [];\n var sLeft = content.scrollLeft | 0;\n var keys = Object.keys(this.cOffsets);\n var cWidth = content.getBoundingClientRect().width;\n sLeft = Math.min(this.cOffsets[keys.length - 1] - cWidth, sLeft);\n var calWidth = Browser.isDevice ? 2 * cWidth : cWidth / 2;\n var left = sLeft + cWidth + (sLeft === 0 ? calWidth : 0);\n keys.some(function (offset, indx, input) {\n var iOffset = Number(offset);\n var offsetVal = _this.cOffsets[offset];\n var border = sLeft - calWidth <= offsetVal && left + calWidth >= offsetVal;\n if (border) {\n indexes.push(iOffset);\n }\n return left + calWidth < offsetVal;\n });\n return indexes;\n };\n VirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'grouping', 'ungrouping', 'reorder']\n .some(function (value) { return action === value; });\n if (clear) {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n return clear;\n };\n VirtualRowModelGenerator.prototype.refreshColOffsets = function () {\n var _this = this;\n var col = 0;\n this.cOffsets = {};\n var gLen = this.parent.groupSettings.columns.length;\n var cols = this.parent.columns;\n var cLen = cols.length;\n var isVisible = function (column) { return column.visible &&\n (!_this.parent.groupSettings.showGroupedColumn ? _this.parent.groupSettings.columns.indexOf(column.field) < 0 : column.visible); };\n this.parent.groupSettings.columns.forEach(function (c, n) { return _this.cOffsets[n] = (_this.cOffsets[n - 1] | 0) + 30; });\n Array.apply(null, Array(cLen)).map(function () { return col++; }).forEach(function (block, i) {\n block = block + gLen;\n _this.cOffsets[block] = (_this.cOffsets[block - 1] | 0) + (isVisible(cols[i]) ? parseInt(cols[i].width, 10) : 0);\n });\n };\n VirtualRowModelGenerator.prototype.updateGroupRow = function (current, block) {\n var _this = this;\n var currentFirst = current[0];\n var rows = [];\n Object.keys(this.cache).forEach(function (key) {\n if (Number(key) < block) {\n rows = rows.concat(_this.cache[key]);\n }\n });\n if ((currentFirst && currentFirst.isDataRow) || block % 2 === 0) {\n return current;\n }\n return this.iterateGroup(current, rows);\n };\n VirtualRowModelGenerator.prototype.iterateGroup = function (current, rows) {\n var currentFirst = current[0];\n var offset = 0;\n if (currentFirst && currentFirst.isDataRow) {\n return current;\n }\n var isPresent = current.some(function (row) {\n return rows.some(function (oRow, index) {\n var res = oRow && oRow.data.field !== undefined && oRow.data.field === row.data.field &&\n oRow.data.key === row.data.key;\n if (res) {\n offset = index;\n }\n return res;\n });\n });\n if (isPresent) {\n current.shift();\n current = this.iterateGroup(current, rows.slice(offset));\n }\n return current;\n };\n VirtualRowModelGenerator.prototype.getRows = function () {\n var _this = this;\n var rows = [];\n Object.keys(this.cache).forEach(function (key) { return rows = rows.concat(_this.cache[key]); });\n return rows;\n };\n return VirtualRowModelGenerator;\n}());\nexport { VirtualRowModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, remove, 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 });\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 } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar InlineEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function InlineEditRender(parent) {\n this.parent = parent;\n }\n InlineEditRender.prototype.addNew = function (elements, args) {\n var mTbody;\n var tbody;\n if (this.parent.frozenRows) {\n tbody = this.parent.getHeaderContent().querySelector('tbody');\n }\n else {\n tbody = this.parent.getContentTable().querySelector('tbody');\n }\n args.row = 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));\n if (this.parent.getFrozenColumns()) {\n var mEle = this.renderMovableform(args.row);\n if (this.parent.frozenRows) {\n mTbody = this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');\n }\n else {\n mTbody = this.parent.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n }\n mTbody.insertBefore(mEle, mTbody.firstChild);\n args.row.querySelector('.e-normaledit').setAttribute('colspan', this.parent.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) {\n var mEle = ele.cloneNode(true);\n this.renderMovable(ele, mEle);\n mEle.querySelector('colgroup').innerHTML = this.parent.getHeaderContent()\n .querySelector('.e-movableheader').querySelector('colgroup').innerHTML;\n return mEle;\n };\n InlineEditRender.prototype.updateFreezeEdit = function (row, td) {\n if (this.parent.getFrozenColumns()) {\n var idx = parseInt(row.getAttribute('aria-rowindex'), 10);\n var fCont = this.parent.getContent().querySelector('.e-frozencontent').querySelector('tbody');\n var mCont = this.parent.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n var fHdr = this.parent.getHeaderContent().querySelector('.e-frozenheader').querySelector('tbody');\n var mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');\n if (this.parent.frozenRows && idx >= this.parent.frozenRows) {\n idx -= this.parent.frozenRows;\n }\n if (fCont.contains(row)) {\n td = td.concat([].slice.call(mCont.children[idx].querySelectorAll('td.e-rowcell')));\n }\n else if (mCont.contains(row)) {\n td = td.concat([].slice.call(fCont.children[idx].querySelectorAll('td.e-rowcell')));\n }\n else if (fHdr.contains(row)) {\n td = td.concat([].slice.call(mHdr.children[idx].querySelectorAll('td.e-rowcell')));\n }\n else if (mHdr.contains(row)) {\n td = td.concat([].slice.call(fHdr.children[idx].querySelectorAll('td.e-rowcell')));\n }\n }\n return td;\n };\n InlineEditRender.prototype.update = function (elements, args) {\n var tdElement = [].slice.call(args.row.querySelectorAll('td.e-rowcell'));\n args.row.innerHTML = '';\n tdElement = this.updateFreezeEdit(args.row, tdElement);\n args.row.appendChild(this.getEditElement(elements, true, tdElement));\n args.row.classList.add('e-editedrow');\n this.refreshFreezeEdit(args.row);\n };\n InlineEditRender.prototype.refreshFreezeEdit = function (row) {\n var td = row.firstChild;\n var fCls;\n var cont;\n var idx = parseInt(row.getAttribute('aria-rowindex'), 10);\n if (this.parent.getFrozenColumns()) {\n if (idx < this.parent.frozenRows) {\n cont = this.parent.getHeaderContent();\n fCls = '.e-frozenheader';\n }\n else {\n cont = this.parent.getContent();\n fCls = '.e-frozencontent';\n }\n var mTd = td.cloneNode(true);\n var fRows = void 0;\n if (cont.querySelector(fCls).contains(row)) {\n fRows = this.parent.getMovableRowByIndex(idx);\n this.updateFrozenCont(fRows, td, mTd);\n }\n else {\n fRows = this.parent.getRowByIndex(idx);\n this.updateFrozenCont(fRows, mTd, td);\n }\n fRows.appendChild(mTd);\n fRows.classList.add('e-editedrow');\n }\n };\n InlineEditRender.prototype.updateFrozenCont = function (row, ele, mEle) {\n row.innerHTML = '';\n this.renderMovable(ele, mEle);\n mEle.querySelector('colgroup').innerHTML = this.parent.getHeaderContent()\n .querySelector('.e-movableheader').querySelector('colgroup').innerHTML;\n ele.setAttribute('colspan', this.parent.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) {\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 = this.parent\n .createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\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 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 } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { changeButtonType } from '../base/util';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar DialogEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function DialogEditRender(parent, serviceLocator) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.dialogDestroy, this.destroy, this);\n this.parent.on(events.destroy, this.destroy, this);\n }\n DialogEditRender.prototype.setLocaleObj = function () {\n this.l10n = this.serviceLocator.getService('localization');\n };\n DialogEditRender.prototype.addNew = function (elements, args) {\n this.isEdit = false;\n this.createDialog(elements, args);\n };\n DialogEditRender.prototype.update = function (elements, args) {\n this.isEdit = true;\n this.createDialog(elements, args);\n };\n DialogEditRender.prototype.createDialog = function (elements, args) {\n var gObj = this.parent;\n this.dialog = this.parent.createElement('div', { id: gObj.element.id + '_dialogEdit_wrapper' });\n gObj.element.appendChild(this.dialog);\n this.setLocaleObj();\n var position = this.parent.element.getBoundingClientRect().height < 400 ?\n { X: 'center', Y: 'top' } : { X: 'center', Y: 'center' };\n this.dialogObj = new Dialog({\n header: this.isEdit ? this.l10n.getConstant('EditFormTitle') + args.primaryKeyValue[0] :\n this.l10n.getConstant('AddFormTitle'), isModal: true, visible: true, cssClass: 'e-edit-dialog',\n content: this.getEditElement(elements),\n showCloseIcon: true,\n allowDragging: true,\n position: position,\n close: this.dialogClose.bind(this),\n closeOnEscape: true, width: '330px', target: gObj.element, animationSettings: { effect: 'None' },\n buttons: [{\n click: this.btnClick.bind(this),\n buttonModel: { content: this.l10n.getConstant('SaveButton'), cssClass: 'e-primary', isPrimary: true }\n },\n { click: this.btnClick.bind(this), buttonModel: { cssClass: 'e-flat', content: this.l10n.getConstant('CancelButton') } }]\n });\n this.dialogObj.appendTo(this.dialog);\n changeButtonType(this.dialogObj.element);\n };\n DialogEditRender.prototype.btnClick = function (e) {\n if (this.l10n.getConstant('CancelButton').toLowerCase() === e.target.innerText.trim().toLowerCase()) {\n this.dialogClose();\n }\n else {\n this.parent.endEdit();\n }\n };\n DialogEditRender.prototype.dialogClose = function () {\n this.parent.closeEdit();\n this.destroy();\n };\n DialogEditRender.prototype.destroy = function (args) {\n this.parent.notify(events.destroyForm, {});\n this.parent.isEdit = false;\n this.parent.notify(events.toolbarRefresh, {});\n if (this.dialog && !this.dialogObj.isDestroyed) {\n this.dialogObj.destroy();\n remove(this.dialog);\n }\n };\n DialogEditRender.prototype.getEditElement = function (elements) {\n var gObj = this.parent;\n var div = this.parent.createElement('div', { className: this.isEdit ? 'e-editedrow' : 'e-insertedrow' });\n var form = this.parent\n .createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\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, getValue } 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 { isComplexField, getComplexFieldID } 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 (!col.visible || col.commands) {\n continue;\n }\n value = (col.valueAccessor(col.field, args.rowData, col));\n if (frzCols && cols.indexOf(col) >= frzCols && gObj.editSettings.mode === 'Normal') {\n cell = fForm.querySelector('[e-mappinguid=' + col.uid + ']');\n }\n else {\n cell = form.querySelector('[e-mappinguid=' + col.uid + ']');\n }\n var temp = col.edit.write;\n if (!isNullOrUndefined(cell)) {\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({\n rowData: args.rowData, element: cell, column: col, requestType: args.requestType, row: args.row,\n foreignKeyData: col.isForeignColumn() && getValue(col.field, args.foreignKeyData)\n });\n }\n else {\n col.edit.write({\n rowData: args.rowData, element: cell, column: col, requestType: args.requestType, row: args.row,\n foreignKeyData: col.isForeignColumn() && getValue(col.field, args.foreignKeyData)\n });\n }\n if (!isFocused && !cell.getAttribute('disabled')) {\n this.focusElement(cell, args.type);\n isFocused = true;\n }\n }\n }\n };\n EditRender.prototype.focusElement = function (elem, type) {\n var chkBox = this.parent.element.querySelector('.e-edit-checkselect');\n if (!isNullOrUndefined(chkBox)) {\n chkBox.nextElementSibling.classList.add('e-focus');\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.focus.onClick({ target: closest(elem, 'td') }, true);\n }\n else {\n elem.focus();\n }\n if (elem.classList.contains('e-defaultcell')) {\n elem.setSelectionRange(elem.value.length, elem.value.length);\n }\n };\n EditRender.prototype.getEditElements = function (args) {\n var gObj = this.parent;\n var elements = {};\n var cols = gObj.editSettings.mode !== 'Batch' ? gObj.getColumns() : [gObj.getColumnByField(args.columnName)];\n for (var i = 0, len = cols.length; i < len; i++) {\n var col = cols[i];\n if (!col.visible) {\n continue;\n }\n if (col.commands || col.commandsTemplate) {\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n var model = new RowModelGenerator(this.parent);\n var cellRenderer = cellRendererFact.getCellRenderer(CellType.CommandColumn);\n var cells = model.generateRows(args.rowData)[0].cells;\n var td = cellRenderer.render(cells[i], args.rowData, { 'index': args.row ? args.row.getAttribute('aria-rowindex') : 0 });\n var div = td.firstElementChild;\n div.setAttribute('textAlign', td.getAttribute('textAlign'));\n elements[col.uid] = div;\n continue;\n }\n var value = (col.valueAccessor(col.field, args.rowData, col));\n var tArgs = { column: col, value: value, type: args.requestType, data: args.rowData };\n var temp = col.edit.create;\n var input = void 0;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n input = temp(tArgs);\n }\n else {\n input = col.edit.create(tArgs);\n }\n if (typeof input === 'string') {\n var div = 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 isComplex = !isNullOrUndefined(col.field) && isComplexField(col.field);\n var complexFieldName = !isNullOrUndefined(col.field) && getComplexFieldID(col.field);\n attributes(isInput ? input.querySelector('input') : input, {\n name: isComplex ? complexFieldName : col.field, 'e-mappinguid': col.uid,\n id: isComplex ? gObj.element.id + complexFieldName : gObj.element.id + col.field\n });\n classList(input, ['e-input', 'e-field'], []);\n if (col.textAlign === 'Right') {\n input.classList.add('e-ralign');\n }\n if ((col.isPrimaryKey || col.isIdentity) && args.requestType === 'beginEdit' ||\n (col.isIdentity && args.requestType === 'add')) {\n input.setAttribute('disabled', 'true');\n }\n elements[col.uid] = input;\n }\n return elements;\n };\n EditRender.prototype.destroy = function () {\n this.renderer.removeEventListener();\n };\n return EditRender;\n}());\nexport { EditRender };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { extend } from '@syncfusion/ej2-base';\nimport { isEditable, getComplexValue, addRemoveActiveClasses, isComplexField, getComplexFieldID } 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 isComplex = !isNullOrUndefined(args.column.field) && isComplexField(args.column.field);\n var complexFieldName = !isNullOrUndefined(args.column.field) && 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: isComplex ? this.parent.element.id + complexFieldName : this.parent.element.id + col.field,\n name: isComplex ? complexFieldName : col.field\n }\n });\n };\n BooleanEditCell.prototype.read = function (element) {\n return element.checked;\n };\n BooleanEditCell.prototype.write = function (args) {\n var selectChkBox;\n var chkState;\n var isComplex = !isNullOrUndefined(args.column.field) && isComplexField(args.column.field);\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 (!isComplex && args.rowData[args.column.field]) {\n chkState = JSON.parse(args.rowData[args.column.field].toString().toLowerCase());\n }\n if (isComplex && !isAddRow && getComplexValue(args.rowData, args.column.field)) {\n chkState = JSON.parse(getComplexValue(args.rowData, args.column.field).toString().toLowerCase());\n }\n if (!isNullOrUndefined(selectChkBox)) {\n this.editType = this.parent.editSettings.mode;\n this.editRow = args.row;\n if (args.requestType !== 'add') {\n var row = this.parent.getRowObjectFromUID(args.row.getAttribute('data-uid'));\n chkState = row ? row.isSelected : false;\n }\n addRemoveActiveClasses.apply(void 0, [[].slice.call(args.row.querySelectorAll('.e-rowcell')), chkState].concat(this.activeClasses));\n }\n this.obj = new CheckBox(extend({\n label: this.parent.editSettings.mode !== 'Dialog' ? '' : args.column.headerText,\n checked: chkState,\n disabled: !isEditable(args.column, args.requestType, args.element), enableRtl: this.parent.enableRtl,\n change: this.checkBoxChange.bind(this)\n }, args.column.edit.params));\n this.obj.appendTo(args.element);\n };\n BooleanEditCell.prototype.checkBoxChange = function (args) {\n if (this.editRow && this.editType !== 'Dialog') {\n var add = false;\n if (!args.checked) {\n this.editRow.removeAttribute('aria-selected');\n }\n else {\n add = true;\n this.editRow.setAttribute('aria-selected', add.toString());\n }\n addRemoveActiveClasses.apply(void 0, [[].slice.call(this.editRow.querySelectorAll('.e-rowcell')), add].concat(this.activeClasses));\n }\n };\n BooleanEditCell.prototype.destroy = function () {\n if (this.obj) {\n this.obj.destroy();\n }\n };\n return BooleanEditCell;\n}());\nexport { BooleanEditCell };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Query, DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { isEditable, getComplexFieldID, getComplexValue, isComplexField } 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 /* tslint:disable-next-line:no-any */\n var complexFieldName = getComplexFieldID(args.column.field);\n /* tslint:disable-next-line:no-any */\n var isComplex = isComplexField(args.column.field);\n return this.parent.createElement('input', {\n className: 'e-field', attrs: {\n /* tslint:disable-next-line:no-any */\n id: isComplex ? this.parent.element.id + complexFieldName : this.parent.element.id + args.column.field,\n /* tslint:disable-next-line:no-any */\n name: isComplex ? complexFieldName : args.column.field, type: 'text', 'e-mappinguid': args.column.uid,\n }\n });\n };\n DropDownEditCell.prototype.write = function (args) {\n this.column = args.column;\n /* tslint:disable-next-line:no-any */\n var complexFieldName = getComplexFieldID(args.column.field);\n var isComplex = isComplexField(args.column.field);\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n var isAddRow = args.requestType === 'add' || args.row.classList.contains('e-addedrow');\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: isComplex && !isAddRow ?\n getComplexValue(args.rowData, args.column.field) : args.rowData[args.column.field],\n enableRtl: this.parent.enableRtl, actionComplete: this.ddActionComplete.bind(this),\n placeholder: isInline ? '' : args.column.headerText, popupHeight: '200px',\n floatLabelType: isInline ? 'Never' : 'Always', open: this.dropDownOpen.bind(this),\n sortOrder: 'Ascending'\n }, args.column.edit.params));\n this.obj.appendTo(args.element);\n /* tslint:disable-next-line:no-any */\n args.element.setAttribute('name', isComplex ? complexFieldName : 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 var targetElement = !isNullOrUndefined(dlgElement) && dlgElement.id !== '' ?\n this.parent.element.querySelector('#' + dlgElement.id) : null;\n if (!isNullOrUndefined(targetElement)) {\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, isComplexField, getComplexFieldID, getComplexValue } from '../base/util';\n/**\n * `NumericEditCell` is used to handle numeric cell type editing.\n * @hidden\n */\nvar NumericEditCell = /** @class */ (function () {\n function NumericEditCell(parent) {\n this.parent = parent;\n }\n NumericEditCell.prototype.create = function (args) {\n /* tslint:disable-next-line:no-any */\n var isComplex = isComplexField(args.column.field);\n var complexFieldName = getComplexFieldID(args.column.field);\n return this.parent.createElement('input', {\n className: 'e-field', attrs: {\n /* tslint:disable-next-line:no-any */\n id: isComplex ? this.parent.element.id + complexFieldName : this.parent.element.id + args.column.field,\n name: isComplex ? complexFieldName : args.column.field, 'e-mappinguid': args.column.uid\n }\n });\n };\n NumericEditCell.prototype.read = function (element) {\n element.blur();\n return element.ej2_instances[0].value;\n };\n NumericEditCell.prototype.write = function (args) {\n var col = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n var isComplex = isComplexField(args.column.field);\n var complexFieldName = getComplexFieldID(args.column.field);\n var isAddRow = args.requestType === 'add' || args.row.classList.contains('e-addedrow');\n this.obj = new NumericTextBox(extend({\n value: isComplex && !isAddRow ?\n parseFloat(getComplexValue(args.rowData, args.column.field)) : parseFloat(args.rowData[col.field]),\n enableRtl: this.parent.enableRtl,\n placeholder: isInline ? '' : args.column.headerText,\n enabled: isEditable(args.column, args.requestType, args.element),\n floatLabelType: this.parent.editSettings.mode !== 'Dialog' ? 'Never' : 'Always',\n }, col.edit.params));\n this.obj.appendTo(args.element);\n args.element.setAttribute('name', isComplex ? complexFieldName : 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 } 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 + col.field, name: col.field, style: 'text-align:' + col.textAlign,\n }\n });\n return input;\n };\n DefaultEditCell.prototype.read = function (element) {\n return element.value;\n };\n DefaultEditCell.prototype.write = function (args) {\n var col = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n 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, getValue } from '@syncfusion/ej2-base';\nimport { remove, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { parentsUntil, refreshForeignData } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\n/**\n * `NormalEdit` module is used to handle normal('inline, dialog, external') editing actions.\n * @hidden\n */\nvar NormalEdit = /** @class */ (function () {\n function NormalEdit(parent, serviceLocator, renderer) {\n this.parent = parent;\n this.renderer = renderer;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n NormalEdit.prototype.clickHandler = function (e) {\n var target = e.target;\n var gObj = this.parent;\n if ((((parentsUntil(target, 'e-gridcontent') &&\n parentsUntil(parentsUntil(target, 'e-gridcontent'), 'e-grid').id === gObj.element.id)) || (gObj.frozenRows\n && parentsUntil(target, 'e-headercontent'))) && !parentsUntil(target, 'e-unboundcelldiv')) {\n this.rowIndex = parentsUntil(target, 'e-rowcell') ? parseInt(target.parentElement.getAttribute('aria-rowindex'), 10) : -1;\n if (gObj.isEdit) {\n gObj.editModule.endEdit();\n }\n }\n };\n NormalEdit.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-rowcell') && this.parent.editSettings.allowEditOnDblClick) {\n this.parent.editModule.startEdit(parentsUntil(e.target, 'e-row'));\n }\n };\n /**\n * The function used to trigger editComplete\n * @return {void}\n * @hidden\n */\n NormalEdit.prototype.editComplete = function (e) {\n this.parent.isEdit = false;\n switch (e.requestType) {\n case 'save':\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n || (!this.parent.isPersistSelection)) {\n this.parent.selectRow(0);\n }\n this.parent.trigger(events.actionComplete, extend(e, {\n requestType: 'save',\n type: events.actionComplete\n }));\n break;\n case 'delete':\n this.parent.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 gObj.clearSelection();\n if (gObj.editSettings.mode === 'Dialog') {\n args.row.classList.add('e-dlgeditrow');\n }\n this.renderer.update(args);\n this.uid = tr.getAttribute('data-uid');\n gObj.editModule.applyFormValidation();\n args.type = 'actionComplete';\n gObj.trigger(events.actionComplete, args);\n if (this.parent.allowTextWrap) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n };\n NormalEdit.prototype.updateRow = function (index, data) {\n var gObj = this.parent;\n var args = {\n requestType: 'save', type: events.actionBegin, data: data, cancel: false,\n previousData: gObj.getCurrentViewRecords()[index]\n };\n gObj.showSpinner();\n gObj.notify(events.updateData, args);\n gObj.refresh();\n };\n NormalEdit.prototype.endEdit = function () {\n var gObj = this.parent;\n if (!this.parent.isEdit || !gObj.editModule.formObj.validate() ||\n (gObj.editModule.mFormObj && !gObj.editModule.mFormObj.validate())) {\n return;\n }\n var editedData = extend({}, this.previousData);\n var args = {\n requestType: 'save', type: events.actionBegin, data: editedData, cancel: false,\n previousData: this.previousData, selectedRow: gObj.selectedRowIndex, foreignKeyData: {}\n };\n editedData = gObj.editModule.getCurrentEditedData(gObj.element.querySelector('.e-gridform'), editedData);\n if (gObj.getFrozenColumns() && gObj.editSettings.mode === 'Normal') {\n var mForm = gObj.element.querySelector('.e-movableheader').querySelector('.e-gridform');\n if (gObj.frozenRows && mForm) {\n editedData = gObj.editModule.getCurrentEditedData(mForm, editedData);\n }\n else {\n editedData = gObj.editModule.getCurrentEditedData(gObj.element.querySelector('.e-movablecontent').querySelector('.e-gridform'), editedData);\n }\n }\n if (gObj.element.querySelectorAll('.e-editedrow').length) {\n args.action = 'edit';\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.showSpinner();\n 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 gObj.notify(events.dialogDestroy, {});\n };\n NormalEdit.prototype.editHandler = function (args) {\n var _this = this;\n if (args.promise) {\n args.promise.then(function (e) { return _this.edSucc(e, args); }).catch(function (e) { return _this.edFail(e); });\n }\n else {\n this.editSuccess(args.data, args);\n }\n };\n NormalEdit.prototype.edSucc = function (e, args) {\n this.editSuccess(e, args);\n };\n NormalEdit.prototype.edFail = function (e) {\n this.editFailure(e);\n };\n NormalEdit.prototype.updateCurrentViewData = function (data) {\n this.parent.getCurrentViewRecords()[this.editRowIndex] = data;\n };\n NormalEdit.prototype.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 this.parent.selectRow(this.rowIndex > -1 ? this.rowIndex : this.editRowIndex);\n }\n this.parent.hideSpinner();\n };\n NormalEdit.prototype.editFailure = function (e) {\n this.parent.trigger(events.actionFailure, e);\n 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 = {\n requestType: 'cancel', type: events.actionBegin, data: this.previousData, selectedRow: gObj.selectedRowIndex\n };\n gObj.trigger(events.actionBegin, args);\n if (this.parent.editSettings.mode === 'Dialog') {\n this.parent.notify(events.dialogDestroy, {});\n }\n gObj.isEdit = false;\n this.stopEditStatus();\n args.type = events.actionComplete;\n if (gObj.editSettings.mode !== 'Dialog') {\n this.refreshRow(args.data);\n }\n if (gObj.getContentTable().querySelector('tr.e-emptyrow') &&\n !gObj.getContentTable().querySelector('tr.e-row')) {\n gObj.getContentTable().querySelector('tr.e-emptyrow').classList.remove('e-hide');\n }\n gObj.selectRow(this.rowIndex);\n gObj.trigger(events.actionComplete, args);\n };\n NormalEdit.prototype.addRecord = function (data, index) {\n var gObj = this.parent;\n this.addedRowIndex = !isNullOrUndefined(index) ? index : 0;\n if (data) {\n gObj.notify(events.modelChanged, {\n requestType: 'save', type: events.actionBegin, data: data, selectedRow: 0, action: 'add', index: index\n });\n return;\n }\n if (gObj.isEdit) {\n return;\n }\n this.previousData = {};\n this.uid = '';\n for (var _i = 0, _a = gObj.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n this.previousData[col.field] = data && data[col.field] ? data[col.field] : col.defaultValue;\n }\n var args = {\n cancel: false, foreignKeyData: {},\n requestType: 'add', data: this.previousData, type: events.actionBegin, index: index\n };\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.isEdit = true;\n gObj.clearSelection();\n this.renderer.addNew({ rowData: args.data, requestType: 'add' });\n gObj.editModule.applyFormValidation();\n args.type = events.actionComplete;\n args.row = gObj.element.querySelector('.e-addedrow');\n gObj.trigger(events.actionComplete, args);\n };\n NormalEdit.prototype.deleteRecord = function (fieldname, data) {\n this.editRowIndex = this.parent.selectedRowIndex;\n 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] === getValue(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.recordAdded, this.requestSuccess, this);\n this.parent.on(events.crudAction, this.editHandler, this);\n this.parent.on(events.doubleTap, this.dblClickHandler, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.dblclick, this.dblClickHandler, this);\n this.parent.on(events.deleteComplete, this.editComplete, this);\n this.parent.on(events.saveComplete, this.editComplete, this);\n };\n /**\n * @hidden\n */\n NormalEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.recordAdded, this.requestSuccess);\n this.parent.off(events.crudAction, this.editHandler);\n this.parent.off(events.doubleTap, this.dblClickHandler);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.dblclick, this.dblClickHandler);\n this.parent.off(events.deleteComplete, this.editComplete);\n this.parent.off(events.saveComplete, this.editComplete);\n };\n /**\n * @hidden\n */\n NormalEdit.prototype.destroy = function () {\n this.removeEventListener();\n this.renderer.destroy();\n };\n return NormalEdit;\n}());\nexport { NormalEdit };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { NormalEdit } from './normal-edit';\n/**\n * `InlineEdit` module is used to handle inline editing actions.\n * @hidden\n */\nvar InlineEdit = /** @class */ (function (_super) {\n __extends(InlineEdit, _super);\n function InlineEdit(parent, serviceLocator, renderer) {\n var _this = _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.renderer = renderer;\n return _this;\n }\n InlineEdit.prototype.closeEdit = function () {\n _super.prototype.closeEdit.call(this);\n };\n InlineEdit.prototype.addRecord = function (data, index) {\n _super.prototype.addRecord.call(this, data, index);\n };\n InlineEdit.prototype.endEdit = function () {\n _super.prototype.endEdit.call(this);\n };\n InlineEdit.prototype.updateRow = function (index, data) {\n _super.prototype.updateRow.call(this, index, data);\n };\n InlineEdit.prototype.deleteRecord = function (fieldname, data) {\n _super.prototype.deleteRecord.call(this, fieldname, data);\n };\n InlineEdit.prototype.startEdit = function (tr) {\n _super.prototype.startEdit.call(this, tr);\n };\n return InlineEdit;\n}(NormalEdit));\nexport { InlineEdit };\n","import { extend, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { remove, classList } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { parentsUntil, inArray, refreshForeignData, getComplexValue, isComplexField } 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 this.parent.off(events.editNextValCell, this.editNextValCell);\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.dblclick, this.dblClickHandler);\n this.parent.off(events.beforeCellFocused, this.onBeforeCellFocused);\n this.parent.off(events.cellFocused, this.onCellFocused);\n this.parent.removeEventListener(events.dataBound, this.dataBoundFunction);\n this.parent.off(events.doubleTap, this.dblClickHandler);\n this.parent.off(events.keyPressed, this.keyDownHandler);\n };\n BatchEdit.prototype.dataBound = function () {\n this.parent.notify(events.toolbarRefresh, {});\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.destroy = function () {\n this.removeEventListener();\n };\n BatchEdit.prototype.clickHandler = function (e) {\n if (!parentsUntil(e.target, this.parent.element.id + '_add', true)) {\n this.saveCell();\n this.editNextValCell();\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) {\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 }\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 };\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 }\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);\n modelData[0].edit = 'add';\n this.addRowObject(modelData[0]);\n this.refreshRowIdx();\n this.focus.forgetPrevious();\n gObj.notify(events.batchAdd, { rows: this.parent.getRowsObject() });\n gObj.selectRow(0);\n if (!data) {\n index = this.findNextEditableCell(0, true);\n col = gObj.getColumns()[index];\n this.editCell(0, col.field, true);\n }\n var args1 = {\n defaultData: args.defaultData, row: tr,\n columnObject: col, columnIndex: index, primaryKey: args.primaryKey, cell: tr.cells[index]\n };\n gObj.trigger(events.batchAdd, args1);\n };\n BatchEdit.prototype.renderMovable = function (ele) {\n var mEle = ele.cloneNode(true);\n for (var i = 0; i < this.parent.frozenColumns; i++) {\n mEle.removeChild(mEle.children[0]);\n }\n for (var i = this.parent.frozenColumns, len = ele.childElementCount; i < len; i++) {\n ele.removeChild(ele.children[ele.childElementCount - 1]);\n }\n return mEle;\n };\n BatchEdit.prototype.findNextEditableCell = function (columnIndex, isAdd, 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.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n if (!isNullOrUndefined(col.field) && !isComplexField(col.field)) {\n data[col.field] = col.defaultValue ? col.defaultValue : dValues[col.type];\n }\n if (!isNullOrUndefined(col.field) && isComplexField(col.field)) {\n var splits = col.field.split('.');\n data[splits[0]] = !isNullOrUndefined(data[splits[0]]) ? data[splits[0]] : {};\n col.defaultValue ? data[splits[0]][splits[1]] = col.defaultValue : data[splits[0]][splits[1]] = dValues[col.type];\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) : extend({}, this.getDataByIndex(index));\n }\n else {\n row = gObj.getDataRows()[index];\n rowData = extend({}, this.getDataByIndex(index));\n }\n if ((keys[0] === col.field && !row.classList.contains('e-insertedrow')) || col.columns ||\n (col.isPrimaryKey && col.isIdentity)) {\n return;\n }\n var rowObj = gObj.getRowObjectFromUID(row.getAttribute('data-uid'));\n var cells = [].slice.apply(row.cells);\n var isComplex = !isNullOrUndefined(col.field) && isComplexField(col.field);\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: isComplex && !isAdd ? getComplexValue(rowData, col.field) : rowData[col.field],\n type: !isAdd ? 'edit' : 'add', cancel: false,\n foreignKeyData: rowObj && rowObj.foreignKeyData\n };\n if (!args.cell) {\n return;\n }\n gObj.trigger(events.cellEdit, args);\n if (args.cancel) {\n return;\n }\n this.cellDetails = {\n rowData: rowData, column: col, value: args.value, isForeignKey: args.isForeignKey, rowIndex: index,\n cellIndex: parseInt(args.cell.getAttribute('aria-colindex'), 10),\n foreignKeyData: args.foreignKeyData\n };\n if (args.cell.classList.contains('e-updatedtd')) {\n this.isColored = true;\n args.cell.classList.remove('e-updatedtd');\n }\n gObj.isEdit = true;\n gObj.clearSelection();\n if (!gObj.isCheckBoxSelection || !gObj.isPersistSelection) {\n gObj.selectRow(this.cellDetails.rowIndex, true);\n }\n this.renderer.update(args);\n this.form = gObj.element.querySelector('#' + gObj.element.id + 'EditForm');\n gObj.editModule.applyFormValidation([col]);\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n BatchEdit.prototype.updateCell = function (rowIndex, field, value) {\n var col = this.parent.getColumnByField(field);\n if (col && !col.isPrimaryKey) {\n var td = this.parent.getDataRows()[rowIndex].cells[this.parent.getColumnIndexByField(field)];\n var rowObj = this.parent.getRowObjectFromUID(td.parentElement.getAttribute('data-uid'));\n this.refreshTD(td, col, rowObj, value);\n this.parent.trigger(events.queryCellInfo, {\n cell: td, column: col, data: rowObj.changes\n });\n }\n };\n BatchEdit.prototype.setChanges = function (rowObj, field, value) {\n var isComplex = !isNullOrUndefined(field) && isComplexField(field);\n if (!rowObj.changes) {\n rowObj.changes = extend({}, rowObj.data);\n }\n if (isComplex) {\n rowObj.changes[field.split('.')[0]] = extend({}, rowObj.data[field.split('.')[0]]);\n rowObj.changes[field.split('.')[0]][field.split('.')[1]] = value;\n }\n else {\n rowObj.changes[field] = value;\n }\n if (rowObj.data[field] !== value) {\n rowObj.isDirty = true;\n }\n };\n BatchEdit.prototype.updateRow = function (index, data) {\n var keys = Object.keys(data);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var col = keys_1[_i];\n this.updateCell(index, col, data[col]);\n }\n };\n BatchEdit.prototype.getCellIdx = function (uid) {\n var cIdx = this.parent.getColumnIndexByUid(uid) + this.parent.groupSettings.columns.length;\n if (!isNullOrUndefined(this.parent.detailTemplate) || !isNullOrUndefined(this.parent.childGrid)) {\n cIdx++;\n }\n return cIdx;\n };\n BatchEdit.prototype.refreshTD = function (td, column, rowObj, value) {\n var cell = new CellRenderer(this.parent, this.serviceLocator);\n var rowcell;\n this.setChanges(rowObj, column.field, value);\n var frzCols = this.parent.getFrozenColumns();\n refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n if (frzCols && this.getCellIdx(column.uid) >= frzCols && this.parent.getColumns().length === rowObj.cells.length) {\n rowcell = rowObj.cells.slice(frzCols, rowObj.cells.length);\n }\n else {\n rowcell = rowObj.cells;\n }\n cell.refreshTD(td, rowcell[this.getCellIdx(column.uid) - (this.getCellIdx(column.uid) >= frzCols ? frzCols : 0)], rowObj.changes, { 'index': this.getCellIdx(column.uid) });\n td.classList.add('e-updatedtd');\n this.parent.notify(events.toolbarRefresh, {});\n };\n BatchEdit.prototype.getColIndex = function (cells, index) {\n var cIdx = 0;\n if (this.parent.allowGrouping && this.parent.groupSettings.columns) {\n cIdx = this.parent.groupSettings.columns.length;\n }\n if (!isNullOrUndefined(this.parent.detailTemplate) || !isNullOrUndefined(this.parent.childGrid)) {\n cIdx++;\n }\n for (var m = 0; m < cells.length; m++) {\n var colIndex = parseInt(cells[m].getAttribute('aria-colindex'), 10);\n if (colIndex === index - cIdx) {\n return m;\n }\n }\n return -1;\n };\n BatchEdit.prototype.editNextValCell = function () {\n var gObj = this.parent;\n if (this.isAdded && !gObj.isEdit) {\n for (var i = this.cellDetails.cellIndex; i < gObj.getColumns().length; i++) {\n if (gObj.isEdit) {\n return;\n }\n var index = this.findNextEditableCell(this.cellDetails.cellIndex + 1, true, true);\n var col = gObj.getColumns()[index];\n if (col) {\n this.editCell(0, col.field, true);\n this.saveCell();\n }\n }\n if (!gObj.isEdit) {\n this.isAdded = false;\n }\n }\n };\n BatchEdit.prototype.saveCell = function (isForceSave) {\n var gObj = this.parent;\n if (!isForceSave && (!gObj.isEdit || this.validateFormObj())) {\n return;\n }\n var tr = parentsUntil(this.form, 'e-row');\n var column = this.cellDetails.column;\n var editedData = gObj.editModule.getCurrentEditedData(this.form, {});\n var isComplex = !isNullOrUndefined(column.field) && isComplexField(column.field);\n var cloneEditedData = extend({}, editedData);\n editedData = extend({}, editedData, this.cellDetails.rowData);\n if (isComplex) {\n var splits = column.field.split('.');\n var cloneComplexData = extend({}, this.cellDetails.rowData[splits[0]]);\n editedData[splits[0]] = extend({}, editedData[splits[0]], this.cellDetails.rowData[splits[0]]);\n this.cellDetails.rowData[splits[0]][splits[1]] = cloneComplexData[splits[1]];\n editedData[splits[0]][splits[1]] = cloneEditedData[splits[0]][splits[1]];\n }\n else {\n editedData[column.field] = cloneEditedData[column.field];\n }\n var args = {\n columnName: column.field,\n value: isComplex ? getComplexValue(editedData, column.field) : editedData[column.field],\n rowData: this.cellDetails.rowData,\n previousValue: this.cellDetails.value,\n columnObject: column,\n cell: this.form.parentElement,\n isForeignKey: this.cellDetails.isForeignKey, cancel: false\n };\n if (!isForceSave) {\n gObj.trigger(events.cellSave, args);\n }\n if (args.cancel) {\n return;\n }\n gObj.editModule.destroyForm();\n gObj.isEdit = false;\n gObj.editModule.destroyWidgets([column]);\n this.parent.notify(events.tooltipDestroy, {});\n this.refreshTD(args.cell, column, gObj.getRowObjectFromUID(tr.getAttribute('data-uid')), args.value);\n removeClass([tr], ['e-editedrow', 'e-batchrow']);\n removeClass([args.cell], ['e-editedbatchcell', 'e-boolcell']);\n if (!isNullOrUndefined(args.value) && args.value.toString() ===\n (!isNullOrUndefined(this.cellDetails.value) ? this.cellDetails.value : '').toString() && !this.isColored\n || (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 };\n BatchEdit.prototype.getDataByIndex = function (index) {\n var row = this.parent.getRowObjectFromUID(this.parent.getDataRows()[index].getAttribute('data-uid'));\n return row.changes ? row.changes : row.data;\n };\n BatchEdit.prototype.keyDownHandler = function (e) {\n if (e.action === 'tab' && this.parent.isEdit) {\n var rowcell = parentsUntil(e.target, 'e-rowcell');\n if (rowcell) {\n var cell = rowcell.querySelector('.e-field');\n if (cell) {\n var visibleColumns = this.parent.getVisibleColumns();\n if (visibleColumns[visibleColumns.length - 1].field === cell.getAttribute('name')) {\n this.saveCell();\n }\n }\n }\n }\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { NormalEdit } from './normal-edit';\n/**\n * `DialogEdit` module is used to handle dialog editing actions.\n * @hidden\n */\nvar DialogEdit = /** @class */ (function (_super) {\n __extends(DialogEdit, _super);\n function DialogEdit(parent, serviceLocator, renderer) {\n var _this = \n //constructor\n _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.renderer = renderer;\n return _this;\n }\n DialogEdit.prototype.closeEdit = function () {\n //closeEdit\n _super.prototype.closeEdit.call(this);\n };\n DialogEdit.prototype.addRecord = function (data, index) {\n //addRecord\n _super.prototype.addRecord.call(this, data, index);\n };\n DialogEdit.prototype.endEdit = function () {\n //endEdit\n _super.prototype.endEdit.call(this);\n };\n DialogEdit.prototype.updateRow = function (index, data) {\n _super.prototype.updateRow.call(this, index, data);\n };\n DialogEdit.prototype.deleteRecord = function (fieldname, data) {\n //deleteRecord\n _super.prototype.deleteRecord.call(this, fieldname, data);\n };\n DialogEdit.prototype.startEdit = function (tr) {\n _super.prototype.startEdit.call(this, tr);\n };\n return DialogEdit;\n}(NormalEdit));\nexport { DialogEdit };\n","import { extend } from '@syncfusion/ej2-base';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { isEditable, isComplexField, getComplexFieldID, getComplexValue } 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 var isComplex = isComplexField(args.column.field);\n return this.parent.createElement('input', {\n className: 'e-field', attrs: {\n id: isComplex ? this.parent.element.id + complexFieldName : this.parent.element.id + args.column.field,\n name: isComplex ? complexFieldName : args.column.field, type: 'text', 'e-mappinguid': args.column.uid\n }\n });\n };\n DatePickerEditCell.prototype.read = function (element) {\n return element.ej2_instances[0].value;\n };\n DatePickerEditCell.prototype.write = function (args) {\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n /* tslint:disable-next-line:no-any */\n var isComplex = isComplexField(args.column.field);\n var isAddRow = args.requestType === 'add' || args.row.classList.contains('e-addedrow');\n var value = isComplex && !isAddRow ?\n getComplexValue(args.rowData, args.column.field) : args.rowData[args.column.field];\n value = value ? new Date(value) : null;\n this.obj = new DatePicker(extend({\n floatLabelType: isInline ? 'Never' : 'Always',\n value: value,\n placeholder: isInline ?\n '' : args.column.headerText, enableRtl: this.parent.enableRtl,\n enabled: isEditable(args.column, args.type, args.element),\n }, args.column.edit.params));\n this.obj.appendTo(args.element);\n };\n DatePickerEditCell.prototype.destroy = function () {\n if (this.obj) {\n this.obj.destroy();\n }\n };\n return DatePickerEditCell;\n}());\nexport { DatePickerEditCell };\n","import { classList, addClass, removeClass, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport { EventHandler, closest } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { Dialog, calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\nimport { changeButtonType, createCboxWithWrap, toogleCheckbox, parentsUntil } from '../base/util';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { SearchBox } from '../services/focus-strategy';\n/**\n * The `ColumnChooser` module is used to show or hide columns dynamically.\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for the Grid ColumnChooser module\n * @hidden\n */\n function ColumnChooser(parent, serviceLocator) {\n this.showColumn = [];\n this.hideColumn = [];\n this.isDlgOpen = false;\n this.dlghide = false;\n this.initialOpenDlg = true;\n this.stateChangeColumns = [];\n this.isInitialOpen = false;\n this.isCustomizeOpenCC = false;\n this.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 changeButtonType(this.dlgObj.element);\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 if (args[cancel] === true) {\n return null;\n }\n else {\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 };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processRecords = function (gObj, exportProperties, isMultipleExport, workbook) {\n var _this = this;\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.dataSource) &&\n exportProperties.dataSource instanceof DataManager) {\n /* tslint:disable-next-line:no-any */\n return new Promise(function (resolve, reject) {\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n var dataManager = exportProperties.dataSource.executeQuery(new Query());\n dataManager.then(function (r) {\n _this.init(gObj);\n _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, r);\n resolve(_this.book);\n });\n });\n }\n else {\n /* tslint:disable-next-line:no-any */\n var allPromise = [];\n allPromise.push(this.data.getData({}, ExportHelper.getQuery(gObj, this.data)));\n allPromise.push(this.helper.getColumnData(gObj));\n return Promise.all(allPromise).then(function (e) {\n _this.init(gObj);\n _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, e[0]);\n return _this.book;\n }).catch(function (e) {\n _this.parent.trigger(events.actionFailure, e);\n });\n }\n };\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processInnerRecords = function (gObj, exportProperties, isMultipleExport, workbook, r) {\n var blankRows = 5;\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.multipleExport)) {\n /* tslint:disable-next-line:max-line-length */\n this.expType = (!isNullOrUndefined(exportProperties.multipleExport.type) ? exportProperties.multipleExport.type : 'AppendToSheet');\n if (!isNullOrUndefined(exportProperties.multipleExport.blankRows)) {\n blankRows = exportProperties.multipleExport.blankRows;\n }\n }\n if (isNullOrUndefined(workbook)) {\n this.workSheet = [];\n this.rows = [];\n this.columns = [];\n this.styles = [];\n }\n else if (this.expType === 'NewSheet') {\n this.workSheet = workbook.worksheets;\n this.rows = [];\n this.columns = [];\n this.styles = workbook.styles;\n }\n else {\n this.workSheet = [];\n this.rows = workbook.worksheets[0].rows;\n this.columns = workbook.worksheets[0].columns;\n this.styles = workbook.styles;\n this.rowLength = (this.rows[this.rows.length - 1].index + blankRows);\n this.rowLength++;\n }\n if (!isNullOrUndefined(exportProperties)) {\n if (!isNullOrUndefined(isMultipleExport)) {\n if (!isNullOrUndefined(exportProperties.header) && (isMultipleExport || this.expType === 'NewSheet')) {\n this.processExcelHeader(JSON.parse(JSON.stringify(exportProperties.header)));\n }\n if (!isNullOrUndefined(exportProperties.footer)) {\n if (this.expType === 'AppendToSheet') {\n if (!isMultipleExport) {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n else {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n }\n else {\n if (!isNullOrUndefined(exportProperties.header)) {\n this.processExcelHeader(JSON.parse(JSON.stringify(exportProperties.header)));\n }\n if (!isNullOrUndefined(exportProperties.footer)) {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n }\n this.includeHiddenColumn = (!isNullOrUndefined(exportProperties) ? exportProperties.includeHiddenColumn : false);\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n var headerRow = this.helper.getHeaders(gObj.columns, this.includeHiddenColumn);\n var groupIndent = 0;\n /* tslint:disable:no-any */\n if (!isNullOrUndefined((r.result).level)) {\n groupIndent += (r.result).level;\n groupIndent += (r.result).childLevels;\n }\n /* tslint:enable:no-any */\n this.processHeaderContent(gObj, headerRow, exportProperties, groupIndent);\n /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.dataSource) && !(exportProperties.dataSource instanceof DataManager)) {\n this.processRecordContent(gObj, r, headerRow, isMultipleExport, exportProperties, exportProperties.dataSource);\n }\n else if (!isNullOrUndefined(exportProperties) && exportProperties.exportType === 'CurrentPage') {\n this.processRecordContent(gObj, r, headerRow, isMultipleExport, exportProperties, gObj.getCurrentViewRecords());\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)) {\n /* tslint:disable-next-line:no-any */\n var sCell = {};\n if (dataSource.childLevels === 0) {\n sCell.index = (hIndex);\n }\n else {\n sCell.index = (hIndex + 1);\n }\n sCell.style = this.getCaptionThemeStyle(this.theme);\n cells.push(sCell);\n hIndex++;\n }\n }\n else {\n var span = 0;\n //Calculation for column span when group caption dont have aggregates\n for (var _c = 0, _d = headerRow.columns; _c < _d.length; _c++) {\n var col_1 = _d[_c];\n if (col_1.visible) {\n span++;\n }\n }\n cell.colSpan = (dataSource.childLevels + span);\n }\n this.rows[this.rows.length - 1].cells = cells;\n this.rowLength++;\n if (!isNullOrUndefined(dataSource.childLevels) && dataSource.childLevels > 0) {\n this.processGroupedRows(gObj, item.items, headerRow, item.items.level);\n }\n else {\n this.processRecordRows(gObj, item.items, headerRow, (level));\n this.processAggregates(gObj, item, undefined, (level), true);\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processRecordRows = function (gObj, record, headerRow, level) {\n var rLen = Object.keys(record).length;\n var index = 1;\n /* tslint:disable-next-line:no-any */\n var cells = [];\n for (var r = 0; r < rLen; r++) {\n cells = [];\n index = 1;\n for (var c = 0, len = headerRow.columns.length; c < len; c++) {\n /* tslint:disable-next-line:no-any */\n var value = !isNullOrUndefined(headerRow.columns[c].field) ? getValue(headerRow.columns[c].field, record[r]) : '';\n var column = headerRow.columns[c];\n var foreignKeyData = void 0;\n // tslint:disable-next-line:max-line-length\n if (column.isForeignColumn && column.isForeignColumn()) {\n foreignKeyData = this.helper.getFData(value, column);\n value = getValue(column.foreignKeyValue, foreignKeyData);\n }\n if (!isNullOrUndefined(value)) {\n /* tslint:disable-next-line:no-any */\n var excelCellArgs = { data: record[r], column: headerRow.columns[c], foreignKeyData: foreignKeyData };\n 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 this.rows.push({ index: this.rowLength++, cells: cells });\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processAggregates = function (gObj, rec, currentViewRecords, indent, byGroup) {\n var summaryModel = new SummaryModelGenerator(gObj);\n /* tslint:disable-next-line:no-any */\n var data = undefined;\n if (!isNullOrUndefined(currentViewRecords)) {\n data = currentViewRecords;\n }\n else {\n data = rec;\n }\n if (indent === undefined) {\n indent = 0;\n }\n if (gObj.groupSettings.columns.length > 0 && byGroup) {\n var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n var groupSummaryRows = groupSummaryModel.generateRows(data, { level: data.level });\n if (groupSummaryRows.length > 0) {\n this.fillAggregates(gObj, groupSummaryRows, indent);\n }\n }\n else {\n indent = gObj.groupSettings.columns.length > 0 && !byGroup ? gObj.groupSettings.columns.length : indent;\n var sRows = summaryModel.generateRows(data, rec.aggregates);\n if (sRows.length > 0 && !byGroup) {\n this.fillAggregates(gObj, sRows, indent);\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.fillAggregates = function (gObj, cells, indent, customIndex) {\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var row = cells_1[_i];\n /* tslint:disable-next-line:no-any */\n var cells_2 = [];\n var index = 0;\n for (var _a = 0, _b = row.cells; _a < _b.length; _a++) {\n var cell = _b[_a];\n /* tslint:disable-next-line:no-any */\n var eCell = {};\n if ((cell.visible || this.includeHiddenColumn)) {\n index++;\n if (cell.isDataCell) {\n eCell.index = index + indent;\n if (!isNullOrUndefined(cell.column.footerTemplate)) {\n eCell.value = this.getAggreateValue(CellType.Summary, cell.column.footerTemplate, cell, row);\n }\n else if (!isNullOrUndefined(cell.column.groupFooterTemplate)) {\n eCell.value = this.getAggreateValue(CellType.GroupSummary, cell.column.groupFooterTemplate, cell, row);\n }\n else if (!isNullOrUndefined(cell.column.groupCaptionTemplate)) {\n eCell.value = this.getAggreateValue(CellType.CaptionSummary, cell.column.groupCaptionTemplate, cell, row);\n }\n else {\n for (var _c = 0, _d = Object.keys(row.data[cell.column.field]); _c < _d.length; _c++) {\n var key = _d[_c];\n if (key === cell.column.type) {\n if (!isNullOrUndefined(row.data[cell.column.field].Sum)) {\n eCell.value = row.data[cell.column.field].Sum;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Average)) {\n eCell.value = row.data[cell.column.field].Average;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Max)) {\n eCell.value = row.data[cell.column.field].Max;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Min)) {\n eCell.value = row.data[cell.column.field].Min;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Count)) {\n eCell.value = row.data[cell.column.field].Count;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].TrueCount)) {\n eCell.value = row.data[cell.column.field].TrueCount;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].FalseCount)) {\n eCell.value = row.data[cell.column.field].FalseCount;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Custom)) {\n eCell.value = row.data[cell.column.field].Custom;\n }\n }\n }\n }\n eCell.style = this.getCaptionThemeStyle(this.theme); //{ name: gObj.element.id + 'column' + index };\n if (cell.attributes.style.textAlign) {\n eCell.style.hAlign = cell.attributes.style.textAlign;\n }\n cells_2.push(eCell);\n }\n else {\n if (customIndex === undefined) {\n eCell.index = index + indent;\n eCell.style = this.getCaptionThemeStyle(this.theme); //{ name: gObj.element.id + 'column' + index };\n cells_2.push(eCell);\n }\n }\n }\n }\n if (!isNullOrUndefined(customIndex)) {\n this.rows.push({ index: customIndex, cells: cells_2 });\n }\n else {\n this.rows.push({ index: this.rowLength++, cells: cells_2 });\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getAggreateValue = function (cellType, template, cell, row) {\n var templateFn = {};\n templateFn[getEnumValue(CellType, cell.cellType)] = compile(template);\n /* tslint:disable-next-line:max-line-length */\n var txt = (templateFn[getEnumValue(CellType, cell.cellType)](row.data[cell.column.field ? cell.column.field : cell.column.columnName]));\n return txt[0].wholeText;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.mergeOptions = function (JSON1, JSON2) {\n /* tslint:disable-next-line:no-any */\n var result = {};\n /* tslint:disable-next-line:no-any */\n var attrname = Object.keys(JSON1);\n for (var index = 0; index < attrname.length; index++) {\n if (attrname[index] !== 'name') {\n result[attrname[index]] = JSON1[attrname[index]];\n }\n }\n attrname = Object.keys(JSON2);\n for (var index = 0; index < attrname.length; index++) {\n if (attrname[index] !== 'name') {\n result[attrname[index]] = JSON2[attrname[index]];\n }\n }\n return result;\n };\n ExcelExport.prototype.getColumnStyle = function (gObj, columnIndex) {\n var index = 0;\n for (var _i = 0, _a = this.styles; _i < _a.length; _i++) {\n var style = _a[_i];\n if (style.name === gObj.element.id + 'column' + columnIndex) {\n return index;\n }\n index++;\n }\n return undefined;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processHeaderContent = function (gObj, headerRow, exportProperties, indent) {\n /* tslint:disable-next-line:no-any */\n var column = gObj.columns;\n var rowIndex = 1;\n /* tslint:disable-next-line:no-any */\n var returnValue = headerRow;\n /* tslint:enable:no-any */\n var gridRows = returnValue.rows;\n // Column collection with respect to the records in the grid\n var gridColumns = returnValue.columns;\n /* tslint:disable-next-line:no-any */\n var spannedCells = [];\n if (indent > 0) {\n var index = 0;\n while (index !== indent) {\n this.columns.push({ index: index + 1, width: 30 });\n index++;\n }\n }\n for (var row = 0; row < gridRows.length; row++) {\n var currentCellIndex = 1 + indent;\n /* tslint:disable-next-line:no-any */\n var cells = [];\n for (var column_1 = 0; column_1 < gridRows[row].cells.length; column_1++) {\n /* tslint:disable-next-line:no-any */\n var style = {};\n /* tslint:disable-next-line:no-any */\n var cell = {};\n /* tslint:disable-next-line:no-any */\n var gridCell = gridRows[row].cells[column_1];\n /* tslint:disable-next-line:no-any */\n var result = { contains: true, index: 1 };\n while (result.contains) {\n result = this.getIndex(spannedCells, rowIndex, currentCellIndex);\n currentCellIndex = result.index;\n if (!result.contains) {\n cell.index = result.index;\n break;\n }\n }\n if (!isNullOrUndefined(gridCell.rowSpan) && gridCell.rowSpan !== 1) {\n cell.rowSpan = gridCell.rowSpan;\n for (var i = rowIndex; i < gridCell.rowSpan + rowIndex; i++) {\n /* tslint:disable-next-line:no-any */\n var spannedCell = { rowIndex: 0, columnIndex: 0 };\n spannedCell.rowIndex = i;\n spannedCell.columnIndex = currentCellIndex;\n spannedCells.push(spannedCell);\n }\n }\n if (!isNullOrUndefined(gridCell.colSpan) && gridCell.colSpan !== 1) {\n cell.colSpan = gridCell.colSpan;\n currentCellIndex = currentCellIndex + cell.colSpan - 1;\n }\n cell.value = gridCell.column.headerText;\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.theme)) {\n this.theme = exportProperties.theme;\n }\n style = this.getHeaderThemeStyle(this.theme);\n if (!isNullOrUndefined(gridCell.column.textAlign)) {\n style.hAlign = gridCell.column.textAlign;\n }\n if (!isNullOrUndefined(gridCell.column.headerTextAlign)) {\n style.hAlign = gridCell.column.headerTextAlign;\n }\n /* 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 this.isGrouping = false;\n this.isExporting = true;\n var can = 'cancel';\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 = dataSourceItems.field + ': ' + this.exportValueFormatter.formatCellValue(args) + ' - ' + dataSourceItems.count + (dataSource.count > 1 ? ' items' : ' item');\n row.cells.getCell(groupIndex).value = value;\n row.cells.getCell(groupIndex + 1).style.stringFormat = new PdfStringFormat(PdfTextAlignment.Left);\n row.style.setBorder(border);\n row.style.setFont(font);\n row.style.setTextBrush(brush);\n row.style.setBackgroundBrush(backgroundBrush);\n var sRows = void 0;\n var captionSummaryModel = new CaptionSummaryModelGenerator(gObj);\n if (!isNullOrUndefined(dataSourceItems.items.records)) {\n sRows = captionSummaryModel.generateRows(dataSourceItems.items.records, 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.getCurrentViewRecords();\n this.currentViewData = true;\n this.customDataSource = false;\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n return { dataSource: dataSource, section: section };\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawPageTemplate = function (template, element) {\n for (var _i = 0, _a = element.contents; _i < _a.length; _i++) {\n var content = _a[_i];\n this.processContentValidation(content);\n switch (content.type) {\n case 'Text':\n /* tslint:disable-next-line:max-line-length */\n if (content.value === '' || content.value === undefined || content.value === null || typeof content.value !== 'string') {\n throw new Error('please enter the valid input value in text content...');\n }\n this.drawText(template, content);\n break;\n case 'PageNumber':\n this.drawPageNumber(template, content);\n break;\n case 'Image':\n if (content.src === undefined || content.src === null || content.src === '') {\n throw new Error('please enter the valid base64 string in image content...');\n }\n this.drawImage(template, content);\n break;\n case 'Line':\n this.drawLine(template, content);\n break;\n default:\n throw new Error('Please set valid content type...');\n }\n }\n return template;\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processContentValidation = function (content) {\n if (content.type === undefined || content.type === null) {\n throw new Error('please set valid content type...');\n }\n else {\n if (content.type === 'Line') {\n if (content.points === undefined || content.points === null) {\n throw new Error('please enter valid points in ' + content.type + ' content...');\n }\n else {\n if (content.points.x1 === undefined || content.points.x1 === null || typeof content.points.x1 !== 'number') {\n throw new Error('please enter valid x1 co-ordinate in ' + content.type + ' points...');\n }\n if (content.points.y1 === undefined || content.points.y1 === null || typeof content.points.y1 !== 'number') {\n throw new Error('please enter valid y1 co-ordinate in ' + content.type + ' points...');\n }\n if (content.points.x2 === undefined || content.points.x2 === null || typeof content.points.x2 !== 'number') {\n throw new Error('please enter valid x2 co-ordinate in ' + content.type + ' points...');\n }\n if (content.points.y2 === undefined || content.points.y2 === null || typeof content.points.y2 !== 'number') {\n throw new Error('please enter valid y2 co-ordinate in ' + content.type + ' points...');\n }\n }\n }\n else {\n if (content.position === undefined || content.position === null) {\n throw new Error('please enter valid position in ' + content.type + ' content...');\n }\n else {\n if (content.position.x === undefined || content.position.x === null || typeof content.position.x !== 'number') {\n throw new Error('please enter valid x co-ordinate in ' + content.type + ' position...');\n }\n if (content.position.y === undefined || content.position.y === null || typeof content.position.y !== 'number') {\n throw new Error('please enter valid y co-ordinate in ' + content.type + ' position...');\n }\n }\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawText = function (pageTemplate, content) {\n var font = this.getFont(content);\n var brush = this.getBrushFromContent(content);\n var pen = null;\n if (!isNullOrUndefined(content.style.textPenColor)) {\n var penColor = this.hexToRgb(content.style.textPenColor);\n pen = new PdfPen(new PdfColor(penColor.r, penColor.g, penColor.b));\n }\n if (brush == null && pen == null) {\n brush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n }\n var value = content.value.toString();\n var x = content.position.x * 0.75;\n var y = content.position.y * 0.75;\n var format;\n var result = this.setContentFormat(content, format);\n if (result !== null && !isNullOrUndefined(result.format) && !isNullOrUndefined(result.size)) {\n pageTemplate.graphics.drawString(value, font, pen, brush, x, y, result.size.width, result.size.height, result.format);\n }\n else {\n pageTemplate.graphics.drawString(value, font, pen, brush, x, y, format);\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawPageNumber = function (documentHeader, content) {\n var font = this.getFont(content);\n var brush = null;\n if (!isNullOrUndefined(content.style.textBrushColor)) {\n /* tslint:disable-next-line:max-line-length */\n var brushColor = this.hexToRgb(content.style.textBrushColor);\n brush = new PdfSolidBrush(new PdfColor(brushColor.r, brushColor.g, brushColor.b));\n }\n else {\n brush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n }\n var pageNumber = new PdfPageNumberField(font, brush);\n pageNumber.numberStyle = this.getPageNumberStyle(content.pageNumberType);\n var compositeField;\n var format;\n if (!isNullOrUndefined(content.format)) {\n if (content.format.indexOf('$total') !== -1 && content.format.indexOf('$current') !== -1) {\n var pageCount = new PdfPageCountField(font);\n if (content.format.indexOf('$total') > content.format.indexOf('$current')) {\n format = content.format.replace('$current', '0');\n format = format.replace('$total', '1');\n }\n else {\n format = content.format.replace('$current', '1');\n format = format.replace('$total', '0');\n }\n compositeField = new PdfCompositeField(font, brush, format, pageNumber, pageCount);\n }\n else if (content.format.indexOf('$current') !== -1 && content.format.indexOf('$total') === -1) {\n format = content.format.replace('$current', '0');\n compositeField = new PdfCompositeField(font, brush, format, pageNumber);\n }\n else {\n var pageCount = new PdfPageCountField(font);\n format = content.format.replace('$total', '0');\n compositeField = new PdfCompositeField(font, brush, format, pageCount);\n }\n }\n else {\n format = '{0}';\n compositeField = new PdfCompositeField(font, brush, format, pageNumber);\n }\n var x = content.position.x * 0.75;\n var y = content.position.y * 0.75;\n var result = this.setContentFormat(content, compositeField.stringFormat);\n if (result !== null && !isNullOrUndefined(result.format) && !isNullOrUndefined(result.size)) {\n compositeField.stringFormat = result.format;\n compositeField.bounds = new RectangleF(x, y, result.size.width, result.size.height);\n }\n compositeField.draw(documentHeader.graphics, x, y);\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawImage = function (documentHeader, content) {\n var x = content.position.x * 0.75;\n var y = content.position.y * 0.75;\n var width = (!isNullOrUndefined(content.size)) ? (content.size.width * 0.75) : undefined;\n var height = (!isNullOrUndefined(content.size)) ? (content.size.height * 0.75) : undefined;\n var image = new PdfBitmap(content.src);\n if (!isNullOrUndefined(width)) {\n documentHeader.graphics.drawImage(image, x, y, width, height);\n }\n else {\n documentHeader.graphics.drawImage(image, x, y);\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawLine = function (documentHeader, content) {\n var x1 = content.points.x1 * 0.75;\n var y1 = content.points.y1 * 0.75;\n var x2 = content.points.x2 * 0.75;\n var y2 = content.points.y2 * 0.75;\n var pen = this.getPenFromContent(content);\n if (!isNullOrUndefined(content.style) && content.style !== null) {\n if (!isNullOrUndefined(content.style.penSize) && content.style.penSize !== null && typeof content.style.penSize === 'number') {\n pen.width = content.style.penSize * 0.75;\n }\n pen.dashStyle = this.getDashStyle(content.style.dashStyle);\n }\n documentHeader.graphics.drawLine(pen, x1, y1, x2, y2);\n };\n /* tslint:disable-next-line:no-any */ /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.processAggregates = function (sRows, pdfGrid, border, font, brush, backgroundBrush, isCaption, captionRow, groupIndex) {\n for (var _i = 0, sRows_1 = sRows; _i < sRows_1.length; _i++) {\n var row = sRows_1[_i];\n var startIndex = 0;\n var leastCaptionSummaryIndex = -1;\n var index = 0;\n var isEmpty = true;\n /* tslint:disable-next-line:no-any */\n var value = [];\n for (var i = 0; i < pdfGrid.columns.count; i++) {\n /* tslint:disable-next-line:no-any */\n var cell = row.cells[index];\n if (!this.hideColumnInclude) {\n while (cell.visible === undefined) {\n if (!isNullOrUndefined(captionRow)) {\n if (!isNullOrUndefined(captionRow.cells.getCell(i).value)) {\n value.push('');\n value.push(captionRow.cells.getCell(i).value);\n isEmpty = false;\n i += 1;\n }\n else {\n value.push('');\n }\n }\n else {\n value.push('');\n }\n i += 1;\n index = index + 1;\n cell = row.cells[index];\n }\n while (!isNullOrUndefined(cell.visible) && !cell.visible) {\n index = index + 1;\n cell = row.cells[index];\n }\n }\n if (cell.isDataCell) {\n var templateFn = {};\n /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(cell.column.footerTemplate) || !isNullOrUndefined(cell.column.groupCaptionTemplate) || !isNullOrUndefined(cell.column.groupFooterTemplate)) {\n /* tslint:disable-next-line:no-any */\n var result = this.getTemplateFunction(templateFn, i, leastCaptionSummaryIndex, cell.column);\n templateFn = result.templateFunction;\n leastCaptionSummaryIndex = result.leastCaptionSummaryIndex;\n /* tslint:disable-next-line:max-line-length */\n var txt = (templateFn[getEnumValue(CellType, cell.cellType)](row.data[cell.column.field ? cell.column.field : cell.column.columnName]));\n value.push(txt[0].wholeText);\n isEmpty = false;\n }\n else {\n /* tslint:disable-next-line:no-any */\n var result = this.getSummaryWithoutTemplate(row.data[cell.column.field]);\n if (!isNullOrUndefined(result)) {\n value.push(result);\n }\n }\n }\n else {\n value.push('');\n }\n if (isEmpty && value[i] !== '' && !isNullOrUndefined(value[i]) && value[i] !== null) {\n isEmpty = false;\n }\n index += 1;\n }\n if (!isEmpty) {\n if (!isCaption) {\n var gridRow = pdfGrid.rows.addRow();\n gridRow.style.setBorder(border);\n gridRow.style.setFont(font);\n gridRow.style.setTextBrush(brush);\n gridRow.style.setBackgroundBrush(backgroundBrush);\n for (var i = 0; i < pdfGrid.columns.count; i++) {\n gridRow.cells.getCell(i).value = value[i].toString();\n }\n }\n else {\n for (var i = 0; i < pdfGrid.columns.count; i++) {\n captionRow.cells.getCell(i).value = value[i].toString();\n if (i === (groupIndex + 1) && leastCaptionSummaryIndex !== -1) {\n captionRow.cells.getCell(i).columnSpan = leastCaptionSummaryIndex - (groupIndex + 1);\n }\n else if (i === (groupIndex + 1) && leastCaptionSummaryIndex === -1) {\n captionRow.cells.getCell(i).columnSpan = pdfGrid.columns.count - (groupIndex + 1);\n }\n }\n }\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getTemplateFunction = function (templateFn, index, leastCaptionSummaryIndex, column) {\n if (!isNullOrUndefined(column.footerTemplate)) {\n templateFn[getEnumValue(CellType, CellType.Summary)] = compile(column.footerTemplate);\n }\n else if (!isNullOrUndefined(column.groupCaptionTemplate)) {\n if (leastCaptionSummaryIndex === -1) {\n leastCaptionSummaryIndex = index;\n }\n templateFn[getEnumValue(CellType, CellType.CaptionSummary)] = compile(column.groupCaptionTemplate);\n }\n else {\n templateFn[getEnumValue(CellType, CellType.GroupSummary)] = compile(column.groupFooterTemplate);\n }\n return { templateFunction: templateFn, leastCaptionSummaryIndex: leastCaptionSummaryIndex };\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getSummaryWithoutTemplate = function (data) {\n if (!isNullOrUndefined(data.Sum)) {\n return data.Sum;\n }\n else if (!isNullOrUndefined(data.Average)) {\n return data.Average;\n }\n else if (!isNullOrUndefined(data.Max)) {\n return data.Max;\n }\n else if (!isNullOrUndefined(data.Min)) {\n return data.Min;\n }\n else if (!isNullOrUndefined(data.Count)) {\n return data.Count;\n }\n else if (!isNullOrUndefined(data.TrueCount)) {\n return data.TrueCount;\n }\n else if (!isNullOrUndefined(data.FalseCount)) {\n return data.FalseCount;\n }\n else if (!isNullOrUndefined(data.Custom)) {\n return data.Custom;\n }\n };\n // Set alignment, width and type of the values of the column\n /* tslint:disable:no-any */\n /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.setColumnProperties = function (gridColumns, pdfGrid) {\n var startIndex = this.isGrouping ? (pdfGrid.columns.count - gridColumns.length) : 0;\n for (var i = 0; i < gridColumns.length; i++) {\n if (!isNullOrUndefined(gridColumns[i].textAlign)) {\n pdfGrid.columns.getColumn(i + startIndex).format = this.getHorizontalAlignment(gridColumns[i].textAlign);\n }\n // Need to add width consideration with % value\n if (pdfGrid.style.allowHorizontalOverflow && !isNullOrUndefined(gridColumns[i].width)) {\n /* tslint:disable-next-line:max-line-length */\n pdfGrid.columns.getColumn(i + startIndex).width = typeof gridColumns[i].width === 'number' ? gridColumns[i].width * 0.75 : this.helper.getConvertedWidth(gridColumns[i].width) * 0.75;\n }\n }\n };\n /**\n * set default style properties of each rows in exporting grid\n * @private\n */\n PdfExport.prototype.setRecordThemeStyle = function (row, border) {\n if (!isNullOrUndefined(this.gridTheme) && !isNullOrUndefined(this.gridTheme.record) && this.gridTheme.record !== null) {\n var pdfColor = new PdfColor();\n if (!isNullOrUndefined(this.gridTheme.record.fontColor)) {\n var penBrushColor = this.hexToRgb(this.gridTheme.record.fontColor);\n pdfColor = new PdfColor(penBrushColor.r, penBrushColor.g, penBrushColor.b);\n }\n row.style.setTextBrush(new PdfSolidBrush(pdfColor));\n }\n else {\n row.style.setTextBrush(new PdfSolidBrush(new PdfColor(0, 0, 0)));\n }\n row.style.setBorder(border);\n return row;\n };\n /**\n * generate the formatted cell values\n * @private\n */\n /* tslint:disable-next-line:max-line-length */ /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processRecord = function (border, columns, gObj, dataSource, pdfGrid, groupIndex) {\n var startIndex = this.isGrouping ? groupIndex : 0;\n for (var _i = 0, _a = dataSource; _i < _a.length; _i++) {\n var items = _a[_i];\n // create a new row and set default style properties\n var gridRow = this.setRecordThemeStyle(pdfGrid.rows.addRow(), border);\n for (var j = 0; j < columns.length; j++) {\n /* tslint:disable:no-any */\n var value = (!isNullOrUndefined(columns[j].field) && getValue(columns[j].field, items)) || '';\n var column = columns[j];\n var foreignKeyData = void 0;\n if (column.isForeignColumn && column.isForeignColumn()) {\n foreignKeyData = this.helper.getFData(value, column);\n value = getValue(column.foreignKeyValue, foreignKeyData);\n }\n var data = items;\n var args = {\n data: data,\n value: value,\n column: column,\n style: undefined,\n colSpan: 1\n };\n 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 cell.classList.add('e-resized');\n var uid = cell.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n return this.parent.getColumnByUid(uid);\n }\n return null;\n };\n ContextMenu.prototype.selectRow = function (e, isSelectable) {\n this.cell = e.target;\n this.row = closest(e.target, 'tr.e-row') || this.row;\n if (this.row && isSelectable && !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 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 if (!this.parent.allowResizing || (this.parent.allowResizing && !this.parent.resizeModule.isFrozenColResized)) {\n fRows[i].style.height = mRowHgt + 'px';\n }\n }\n if (mRows[i].childElementCount && ((isWrap && fRowHgt > mRowHgt) || (!isWrap && fRowHgt < mRowHgt) ||\n (this.parent.allowResizing && this.parent.resizeModule.isFrozenColResized))) {\n if (!this.parent.allowResizing || (this.parent.allowResizing && this.parent.resizeModule.isFrozenColResized)) {\n mRows[i].style.height = fRowHgt + 'px';\n }\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')))) {\n args.cancel = true;\n }\n };\n ColumnMenu.prototype.isChooserItem = function (item) {\n return item.id && item.id.indexOf('_colmenu_') >= 0 &&\n this.getKeyFromId(item.id, this.CHOOSER).indexOf('_colmenu_') === -1;\n };\n ColumnMenu.prototype.columnMenuBeforeOpen = function (args) {\n args.column = this.targetColumn = this.getColumn();\n this.parent.trigger(events.columnMenuOpen, args);\n for (var _i = 0, _a = args.items; _i < _a.length; _i++) {\n var item = _a[_i];\n var key = this.getKeyFromId(item.id);\n var dItem = this.defaultItems[key];\n if (this.getDefaultItems().indexOf(key) !== -1) {\n if (this.ensureDisabledStatus(key) && !dItem.hide) {\n this.disableItems.push(item.text);\n }\n else if (item.hide) {\n this.hiddenItems.push(item.text);\n }\n }\n }\n this.columnMenu.enableItems(this.disableItems, false);\n this.columnMenu.hideItems(this.hiddenItems);\n };\n ColumnMenu.prototype.ensureDisabledStatus = function (item) {\n var _this = this;\n var status = false;\n switch (item) {\n case 'Group':\n if (!this.parent.allowGrouping || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) >= 0)) {\n status = true;\n }\n break;\n case 'AutoFitAll':\n case 'AutoFit':\n status = !this.parent.ensureModuleInjected(Resize);\n break;\n case 'Ungroup':\n if (!this.parent.ensureModuleInjected(Group) || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) < 0)) {\n status = true;\n }\n break;\n case 'SortDescending':\n case 'SortAscending':\n if (this.parent.allowSorting && this.parent.ensureModuleInjected(Sort)\n && this.parent.sortSettings.columns.length > 0 && this.targetColumn) {\n this.parent.sortSettings.columns.forEach(function (ele) {\n if (ele.field === _this.targetColumn.field\n && ele.direction.toLocaleLowerCase() === item.toLocaleLowerCase().replace('sort', '')) {\n status = true;\n }\n });\n }\n else if (!this.parent.allowSorting || !this.parent.ensureModuleInjected(Sort)) {\n status = true;\n }\n break;\n case 'Filter':\n status = !(this.parent.allowFiltering && (this.parent.filterSettings.type !== 'FilterBar')\n && this.parent.ensureModuleInjected(Filter));\n }\n return status;\n };\n ColumnMenu.prototype.columnMenuItemClick = function (args) {\n var item = this.isChooserItem(args.item) ? 'ColumnChooser' : this.getKeyFromId(args.item.id);\n switch (item) {\n case 'AutoFit':\n this.parent.autoFitColumns(this.targetColumn.field);\n break;\n case 'AutoFitAll':\n this.parent.autoFitColumns([]);\n break;\n case 'Ungroup':\n this.parent.ungroupColumn(this.targetColumn.field);\n break;\n case 'Group':\n this.parent.groupColumn(this.targetColumn.field);\n break;\n case 'SortAscending':\n this.parent.sortColumn(this.targetColumn.field, 'Ascending');\n break;\n case 'SortDescending':\n this.parent.sortColumn(this.targetColumn.field, 'Descending');\n break;\n case 'ColumnChooser':\n var key = this.getKeyFromId(args.item.id, this.CHOOSER);\n var checkbox = args.element.querySelector('.e-checkbox-wrapper .e-frame');\n if (checkbox && checkbox.classList.contains('e-check')) {\n checkbox.classList.remove('e-check');\n this.parent.hideColumns(key, 'field');\n }\n else if (checkbox) {\n this.parent.showColumns(key, 'field');\n checkbox.classList.add('e-check');\n }\n break;\n case 'Filter':\n this.getFilter(args.element, args.item.id);\n break;\n }\n args.column = this.targetColumn;\n this.parent.trigger(events.columnMenuClick, args);\n };\n ColumnMenu.prototype.columnMenuOnClose = function (args) {\n var parent = 'parentObj';\n if (args.items.length > 0 && args.items[0][parent] instanceof Menu) {\n this.columnMenu.enableItems(this.disableItems);\n this.disableItems = [];\n this.columnMenu.showItems(this.hiddenItems);\n this.hiddenItems = [];\n if (this.isFilterPopupOpen()) {\n this.getFilter(args.element, args.element.id, true);\n }\n }\n };\n ColumnMenu.prototype.getDefaultItems = function () {\n return ['AutoFitAll', 'AutoFit', 'SortAscending', 'SortDescending', 'Group', 'Ungroup', 'ColumnChooser', 'Filter'];\n };\n ColumnMenu.prototype.getItems = function () {\n var items = [];\n var defultItems = this.parent.columnMenuItems ? this.parent.columnMenuItems : this.getDefault();\n for (var _i = 0, defultItems_1 = defultItems; _i < defultItems_1.length; _i++) {\n var item = defultItems_1[_i];\n if (typeof item === 'string') {\n if (item === 'ColumnChooser') {\n var col = this.getDefaultItem(item);\n col.items = this.createChooserItems();\n items.push(col);\n }\n else {\n items.push(this.getDefaultItem(item));\n }\n }\n else {\n items.push(item);\n }\n }\n return items;\n };\n ColumnMenu.prototype.getDefaultItem = function (item) {\n var menuItem = {};\n switch (item) {\n case 'SortAscending':\n menuItem = { iconCss: this.ASCENDING };\n break;\n case 'SortDescending':\n menuItem = { iconCss: this.DESCENDING };\n break;\n case 'Group':\n menuItem = { iconCss: this.GROUP };\n break;\n case 'Ungroup':\n menuItem = { iconCss: this.UNGROUP };\n break;\n case 'Filter':\n menuItem = { iconCss: this.FILTER };\n break;\n }\n this.defaultItems[item] = {\n text: this.getLocaleText(item), id: this.generateID(item),\n iconCss: menuItem.iconCss ? 'e-icons ' + menuItem.iconCss : null\n };\n return this.defaultItems[item];\n };\n ColumnMenu.prototype.getLocaleText = function (item) {\n return this.l10n.getConstant(this.localeText[item]);\n };\n ColumnMenu.prototype.generateID = function (item, append) {\n return this.gridID + '_colmenu_' + (append ? append + item : item);\n };\n ColumnMenu.prototype.getKeyFromId = function (id, append) {\n return id.indexOf('_colmenu_') > 0 &&\n id.replace(this.gridID + '_colmenu_' + (append ? append : ''), '');\n };\n ColumnMenu.prototype.getColumnMenu = function () {\n return this.element;\n };\n ColumnMenu.prototype.getModuleName = function () {\n return 'columnMenu';\n };\n ColumnMenu.prototype.setLocaleKey = function () {\n return {\n 'AutoFitAll': 'autoFitAll',\n 'AutoFit': 'autoFit',\n 'Group': 'Group',\n 'Ungroup': 'Ungroup',\n 'SortAscending': 'SortAscending',\n 'SortDescending': 'SortDescending',\n 'ColumnChooser': 'Columnchooser',\n 'Filter': 'FilterMenu'\n };\n };\n ColumnMenu.prototype.getHeaderCell = function (e) {\n return closest(e.target, 'th.e-headercell');\n };\n ColumnMenu.prototype.getColumn = function () {\n if (this.headerCell) {\n var uid = this.headerCell.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n return this.parent.getColumnByUid(uid);\n }\n return null;\n };\n ColumnMenu.prototype.createChooserItems = function () {\n var items = [];\n for (var _i = 0, _a = this.parent.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.showInColumnChooser && col.field) {\n items.push({ id: this.generateID(col.field, this.CHOOSER), text: col.headerText ? col.headerText : col.field });\n }\n }\n return items;\n };\n ColumnMenu.prototype.appendFilter = function (e) {\n var filter = 'Filter';\n if (!this.defaultItems[filter]) {\n return;\n }\n else {\n var key = this.defaultItems[filter].id;\n if (closest(e.target, '#' + key) && !this.isFilterPopupOpen()) {\n this.getFilter(e.target, key);\n }\n else if (!closest(e.target, '#' + key) && this.isFilterPopupOpen()) {\n this.getFilter(e.target, key, true);\n }\n }\n };\n ColumnMenu.prototype.getFilter = function (target, id, isClose) {\n var filterPopup = this.getFilterPop();\n if (filterPopup) {\n filterPopup.style.display = !Browser.isDevice && isClose ? 'none' : 'block';\n }\n else {\n this.parent.notify(events.filterOpen, {\n col: this.targetColumn, target: target, isClose: isClose, id: id\n });\n }\n };\n ColumnMenu.prototype.setPosition = function (li, ul) {\n var gridPos = this.parent.element.getBoundingClientRect();\n var liPos = li.getBoundingClientRect();\n var left = liPos.left - gridPos.left;\n var top = liPos.top - gridPos.top;\n if (gridPos.height < top) {\n top = top - ul.offsetHeight + liPos.height;\n }\n else if (gridPos.height < top + ul.offsetHeight) {\n top = gridPos.height - ul.offsetHeight;\n }\n if (window.innerHeight < ul.offsetHeight + top + gridPos.top) {\n top = window.innerHeight - ul.offsetHeight - gridPos.top;\n }\n left += (this.parent.enableRtl ? -ul.offsetWidth : liPos.width);\n if (gridPos.width <= left + ul.offsetWidth) {\n left -= liPos.width + ul.offsetWidth;\n }\n else if (left < 0) {\n left += ul.offsetWidth + liPos.width;\n }\n ul.style.top = top + 'px';\n ul.style.left = left + 'px';\n };\n ColumnMenu.prototype.filterPosition = function (e) {\n var filterPopup = this.getFilterPop();\n filterPopup.classList.add(this.WRAP);\n if (!Browser.isDevice) {\n var disp = filterPopup.style.display;\n filterPopup.style.cssText += 'display:block;visibility:hidden';\n var li = this.element.querySelector('.' + this.FILTER);\n if (li) {\n this.setPosition(li.parentElement, filterPopup);\n filterPopup.style.cssText += 'display:' + disp + ';visibility:visible';\n }\n }\n };\n ColumnMenu.prototype.getDefault = function () {\n var items = [];\n if (this.parent.ensureModuleInjected(Resize)) {\n items.push('AutoFitAll');\n items.push('AutoFit');\n }\n if (this.parent.allowGrouping && this.parent.ensureModuleInjected(Group)) {\n items.push('Group');\n items.push('Ungroup');\n }\n if (this.parent.allowSorting && this.parent.ensureModuleInjected(Sort)) {\n items.push('SortAscending');\n items.push('SortDescending');\n }\n items.push('ColumnChooser');\n if (this.parent.allowFiltering && (this.parent.filterSettings.type !== 'FilterBar') &&\n this.parent.ensureModuleInjected(Filter)) {\n items.push('Filter');\n }\n return items;\n };\n ColumnMenu.prototype.isFilterPopupOpen = function () {\n var filterPopup = this.getFilterPop();\n return filterPopup && filterPopup.style.display !== 'none';\n };\n ColumnMenu.prototype.getFilterPop = function () {\n return this.parent.element.querySelector('.' + this.POP);\n };\n ColumnMenu.prototype.isFilterItemAdded = function () {\n return (this.parent.columnMenuItems &&\n this.parent.columnMenuItems.indexOf('Filter') >= 0) || !this.parent.columnMenuItems;\n };\n return ColumnMenu;\n}());\nexport { ColumnMenu };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Predicate, DataUtil } from '@syncfusion/ej2-data';\nimport { initForeignKeyColumn, getForeignKeyData, generateQuery } from '../base/constant';\nimport { getDatePredicate } from '../base/util';\nimport { Data } from './data';\n/**\n * `ForeignKey` module is used to handle foreign key column's actions.\n */\nvar ForeignKey = /** @class */ (function (_super) {\n __extends(ForeignKey, _super);\n function ForeignKey(parent, serviceLocator) {\n var _this = _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.initEvent();\n return _this;\n }\n ForeignKey.prototype.initEvent = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(initForeignKeyColumn, this.initForeignKeyColumns, this);\n this.parent.on(getForeignKeyData, this.getForeignKeyData, this);\n this.parent.on(generateQuery, this.generateQueryFormData, this);\n };\n ForeignKey.prototype.initForeignKeyColumns = function (columns) {\n columns.forEach(function (column) {\n column.dataSource = (column.dataSource instanceof DataManager ? column.dataSource :\n (isNullOrUndefined(column.dataSource) ? new DataManager() : new DataManager(column.dataSource)));\n });\n };\n ForeignKey.prototype.getForeignKeyData = function (args) {\n var _this = this;\n var foreignColumns = args.column ? [args.column] : this.parent.getForeignKeyColumns();\n var allPromise = [];\n foreignColumns.forEach(function (col) {\n var promise;\n var query = args.isComplex ? _this.genarateColumnQuery(col) :\n _this.genarateQuery(col, args.result.result, false, true);\n var dataSource = col.dataSource;\n if (!dataSource.ready || dataSource.dataSource.offline) {\n promise = dataSource.executeQuery(query);\n }\n else {\n promise = dataSource.ready.then(function () {\n return dataSource.executeQuery(query);\n });\n }\n allPromise.push(promise);\n });\n Promise.all(allPromise).then(function (responses) {\n responses.forEach(function (data, index) {\n foreignColumns[index].columnData = data.result;\n });\n args.promise.resolve(args.result);\n }).catch(function (e) {\n if (args.promise && args.promise.reject) {\n args.promise.reject(e);\n }\n return e;\n });\n };\n ForeignKey.prototype.generateQueryFormData = function (args) {\n args.predicate.predicate = this.genarateQuery(args.column, args.column.columnData, true);\n };\n ForeignKey.prototype.genarateQuery = function (column, e, fromData, needQuery) {\n var gObj = this.parent;\n var predicates = [];\n var predicate;\n var query = new Query();\n var field = fromData ? column.foreignKeyField : column.field;\n if (gObj.allowPaging || gObj.enableVirtualization || fromData) {\n e = new DataManager(((gObj.allowGrouping && gObj.groupSettings.columns.length) ?\n e.records : e)).executeLocal(new Query().select(field));\n var filteredValue = DataUtil.distinct(e, field, false);\n field = fromData ? column.field : column.foreignKeyField;\n filteredValue.forEach(function (obj) {\n if (obj && obj.getDay) {\n predicates.push(getDatePredicate({ field: field, operator: 'equal', value: obj, matchCase: false }));\n }\n else {\n predicates.push(new Predicate(field, 'equal', obj, false));\n }\n });\n }\n if (needQuery) {\n return predicates.length ? query.where(Predicate.or(predicates)) : query;\n }\n predicate = (predicates.length ? Predicate.or(predicates) : { predicates: [] });\n return predicate;\n };\n ForeignKey.prototype.genarateColumnQuery = function (column) {\n var gObj = this.parent;\n var query = 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 * 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) {\n this.value = value;\n this.color = color;\n }\n return ColorCollection;\n}());\nexport { ColorCollection };\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 this.heatMap.colorCollection = [];\n this.heatMap.legendColorCollection = [];\n var range;\n this.heatMap.emptyPointColor = this.heatMap.paletteSettings.emptyPointColor ? this.heatMap.paletteSettings.emptyPointColor :\n this.heatMap.themeStyle.emptyCellColor;\n var tempcolorMapping = this.orderbyOffset(this.heatMap.paletteSettings.palette && this.heatMap.paletteSettings.palette.length > 1 ?\n this.heatMap.paletteSettings.palette : this.heatMap.themeStyle.palette);\n if (!tempcolorMapping.isCompact) {\n if (this.heatMap.paletteSettings.type === 'Gradient') {\n range = (this.heatMap.dataSourceMaxValue - this.heatMap.dataSourceMinValue) / (tempcolorMapping.offsets.length - 1);\n }\n else {\n range = (this.heatMap.dataSourceMaxValue - this.heatMap.dataSourceMinValue) / (tempcolorMapping.offsets.length);\n }\n if (tempcolorMapping.offsets.length >= 2) {\n for (var index = 0; index < tempcolorMapping.offsets.length; index++) {\n this.heatMap.colorCollection.push(new ColorCollection(Math.round(((this.heatMap.dataSourceMinValue) + (index * range)) * 100) / 100, tempcolorMapping.offsets[index].color));\n this.heatMap.legendColorCollection.push(new LegendColorCollection(Math.round(((this.heatMap.dataSourceMinValue) + (index * range)) * 100) / 100, tempcolorMapping.offsets[index].color, tempcolorMapping.offsets[index].label, false));\n }\n }\n }\n else {\n this.heatMap.colorCollection = tempcolorMapping.offsets;\n this.heatMap.legendColorCollection = extend([], tempcolorMapping.offsets, null, true);\n }\n this.updateLegendColorCollection();\n };\n /**\n * To update legend color Collection.\n * @private\n */\n CellColor.prototype.updateLegendColorCollection = function () {\n if (this.heatMap.dataSourceMinValue < this.heatMap.legendColorCollection[0].value) {\n this.heatMap.legendColorCollection.unshift(new LegendColorCollection(this.heatMap.dataSourceMinValue, this.heatMap.legendColorCollection[0].color, this.heatMap.legendColorCollection[0].label, true));\n }\n if (this.heatMap.dataSourceMaxValue > this.heatMap.legendColorCollection[this.heatMap.legendColorCollection.length - 1].value) {\n this.heatMap.legendColorCollection.push(new LegendColorCollection(this.heatMap.dataSourceMaxValue, 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.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.maxLength = 0;\n /** @private */\n _this.min = 0;\n /** @private */\n _this.max = 0;\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 if (axis.orientation === 'Horizontal' && axis.labelIntersectAction === 'Rotate45') {\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 axis.angle = 45;\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 === 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 : ((adaptorMax) ? adaptorMax : this.maxLength);\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) {\n var value = this.formatValue(isCustom, format, i);\n this.axisLabels.push(value);\n }\n this.min = 0;\n this.axisLabelSize = (max - min) + 1;\n this.max = this.axisLabelSize - 1;\n this.axisLabelInterval = interval;\n for (var i = min; i <= max; i++) {\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;\n for (var i = min; i <= max; i = i + interval) {\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) + 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).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).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 tempInterval = increaseDateTimeInterval(tempInterval, interval, this.intervalType).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).getTime();\n }\n }\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()) + 1;\n length = years;\n break;\n case 'Months':\n var months = (maximum.getFullYear() - minimum.getFullYear()) * 12;\n months -= minimum.getMonth();\n months += maximum.getMonth() + 1;\n length = months <= 0 ? 1 : months;\n break;\n case 'Days':\n difference = Math.abs(minimum.getTime() - maximum.getTime());\n days = Math.ceil(difference / (1000 * 3600 * 24));\n length = days + 1;\n break;\n case 'Hours':\n difference = Math.abs(minimum.getTime() - maximum.getTime());\n var hours = Math.ceil(difference / (1000 * 3600));\n length = hours + 1;\n break;\n case 'Minutes':\n difference = Math.abs(minimum.getTime() - maximum.getTime());\n var minutes = Math.ceil(difference / (1000 * 60));\n length = minutes + 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(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 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.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' ?\n textTrim(interval * axisInterval, labels[i], axis.textStyle) : labels[i];\n var elementSize = measureText(label, axis.textStyle);\n var transform = void 0;\n labelPadding = (axis.opposedPosition) ?\n -(padding + (angle ? (3 * (elementSize.height / 4) + (2 * axis.maxLabelSize.height / 5)) : 0))\n : padding + (angle ? (3 * (elementSize.height / 4)) + (2 * axis.maxLabelSize.height / 5)\n : (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 {\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 var translateX = void 0;\n var translateY = void 0;\n if (angle !== 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 translateX = x + elementSize.width / 2 + anglePadding;\n translateY = y + yLocation;\n transform = 'rotate(' + angle + ',' + translateX + ','\n + translateY + ')';\n y += yLocation + ((angle === 270 || angle === -90) ? -(rotateSize.height / 4) : (rotateSize.height / 4));\n }\n var options = new TextOption(heatMap.element.id + '_XAxis_Label' + i, new TextBasic(x, y, 'start', label, angle, transform), axis.textStyle, axis.textStyle.color || heatMap.themeStyle.axisLabel);\n if (angle !== 0 && this.heatMap.enableCanvasRendering) {\n this.drawSvgCanvas.canvasDrawText(options, label, translateX, translateY);\n }\n else {\n this.drawSvgCanvas.createText(options, labelElement, label);\n }\n if (compactInterval === 0) {\n lableStrtX = lableStrtX + (!axis.isInversed ? (axis.axisLabelInterval * interval) : -(axis.axisLabelInterval * 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 this.drawSvgCanvas.createText(options, labelElement, labels[i]);\n if (Browser.isIE && !this.heatMap.enableCanvasRendering) {\n labelElement.childNodes[i].setAttribute('dy', '1ex');\n }\n if (compactInterval === 0) {\n lableStartY = lableStartY + (axis.isInversed ? (axis.axisLabelInterval * interval) : -(axis.axisLabelInterval * 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, Complex, Browser } from '@syncfusion/ej2-base';\nimport { Rect, TextBasic, RectOption, TextOption, CurrentRect, DrawSvgCanvas } from '../utils/helper';\nimport { convertHexToColor, colorNameToHex } from '../utils/helper';\nimport { CellColor } from '../utils/colorMapping';\nimport { Border, Font } 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 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 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.containerTextObject = this.heatMap.renderer.createGroup({ id: this.heatMap.element.id + '_Container_TextGroup', transform: 'translate( 0, 0)' });\n }\n }\n this.heatMap.xLength = this.heatMap.axisCollections[0].axisLabelSize;\n this.heatMap.yLength = this.heatMap.axisCollections[1].axisLabelSize;\n // Rectangle Part\n var tempX = Math.round(this.heatMap.initialClipRect.x);\n var tempY = Math.round(this.heatMap.initialClipRect.y);\n var dataXIndex = 0;\n var dataYIndex = 0;\n var tempWidth = Math.round(((this.heatMap.initialClipRect.width -\n (this.heatMap.cellSettings.border.width / 2)) / this.heatMap.xLength) * 100) / 100;\n var tempHeight = Math.round(((this.heatMap.initialClipRect.height -\n (this.heatMap.cellSettings.border.width / 2)) / this.heatMap.yLength) * 100) / 100;\n var tempVal = 0;\n var themeStyle = this.heatMap.themeStyle;\n var color = '';\n var tempBorder;\n var tempRectPosition = [];\n tempBorder = this.heatMap.cellSettings.border;\n this.rectPositionCollection = [];\n this.checkLabelYDisplay = tempHeight > parseInt(this.heatMap.cellSettings.textStyle.size, 10) ? true : false;\n var tempMaxString = this.getFormatedText(this.heatMap.dataSourceMaxValue, this.heatMap.cellSettings.format);\n this.checkLabelXDisplay = tempWidth > (tempMaxString.length *\n (parseInt(this.heatMap.cellSettings.textStyle.size, 10) / 2)) ? true : false;\n if (this.heatMap.yAxis.opposedPosition) {\n tempX = Math.round((this.heatMap.initialClipRect.x + (tempBorder.width / 2)) * 100) / 100;\n }\n for (var x = 0; x < (this.heatMap.xLength * this.heatMap.yLength); x++) {\n var text = this.heatMap.clonedDataSource[dataXIndex][dataYIndex];\n var rectPosition = new CurrentRect(0, 0, 0, 0, 0, '');\n color = this.cellColor.getColorByValue(text);\n var rect = new RectOption(this.heatMap.element.id + '_HeatMapRect_' + x, color, tempBorder, 1, new Rect(tempX, tempY, tempWidth, tempHeight), tempBorder.color || this.heatMap.themeStyle.cellBorder, tempBorder.radius, tempBorder.radius);\n this.drawSvgCanvas.drawRectangle(rect, this.containerRectObject);\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 tempRectPosition.push(rectPosition);\n if (this.heatMap.cellSettings.showLabel && this.checkLabelYDisplay && this.checkLabelXDisplay) {\n var displayText = this.getFormatedText(text, this.heatMap.cellSettings.format);\n var themeCellTextStyle = this.heatMap.cellSettings.textStyle;\n var options = new TextOption(this.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(color));\n this.drawSvgCanvas.createText(options, this.containerTextObject, displayText);\n if (Browser.isIE && !this.heatMap.enableCanvasRendering) {\n this.containerTextObject.childNodes[x].setAttribute('dy', '1ex');\n }\n }\n if (tempVal === this.heatMap.xLength - 1) {\n tempY = Math.round((tempY + tempHeight) * 100) / 100;\n tempVal = 0;\n dataYIndex = 0;\n if (this.heatMap.yAxis.opposedPosition) {\n tempX = Math.round((this.heatMap.initialClipRect.x + (tempBorder.width / 2)) * 100) / 100;\n }\n else {\n tempX = Math.round(this.heatMap.initialClipRect.x);\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 (!this.heatMap.enableCanvasRendering) {\n this.heatMap.svgObject.appendChild(this.containerRectObject);\n if (this.heatMap.cellSettings.showLabel) {\n this.heatMap.svgObject.appendChild(this.containerTextObject);\n }\n }\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 element.style.opacity = '0.65';\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 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 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 if (tempCloneData[tempIndex] && (tempCloneData[tempIndex][z] ||\n (tempCloneData[tempIndex][z] === 0 &&\n tempCloneData[tempIndex][z].toString() !== ''))) {\n this.completeDataSource[cloneDataIndex].push(tempCloneData[tempIndex][z]);\n }\n else {\n this.completeDataSource[cloneDataIndex].push('');\n }\n }\n tempIndex++;\n }\n tempVariable = extend([], this.completeDataSource[cloneDataIndex], null, true);\n if (isNullOrUndefined(minVal)) {\n minVal = tempVariable.sort(function (a, b) { return a - b; }).filter(this.checkmin)[0];\n }\n else if (tempVariable.sort(function (a, b) { return a - b; }).filter(this.checkmin)[0] < minVal) {\n minVal = tempVariable.sort(function (a, b) { return a - b; }).filter(this.checkmin)[0];\n }\n if (isNullOrUndefined(maxVal)) {\n maxVal = Math.max.apply(Math, this.completeDataSource[cloneDataIndex]);\n }\n else if (Math.max.apply(Math, this.completeDataSource[cloneDataIndex]) > maxVal) {\n maxVal = Math.max.apply(Math, this.completeDataSource[cloneDataIndex]);\n }\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 };\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 } from '@syncfusion/ej2-base';\nimport { DrawSvgCanvas, TextOption, TextBasic, PathOption, Line, LineOption, GradientPointer } 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';\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 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.positionCollections = [];\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 this.heatMap = heatMap;\n this.drawSvgCanvas = new DrawSvgCanvas(heatMap);\n }\n ;\n /**\n * Get component 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 (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') {\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 rectItems_1 = new RectOption(heatMap.element.id + '_Gradient_Legend', fill, tempBorder, 1, rectItemsSvg);\n this.drawSvgCanvas.drawRectangle(rectItems_1, this.legend);\n if (!heatMap.enableCanvasRendering) {\n heatMap.svgObject.appendChild(this.legend);\n }\n this.renderColorAxisGrid(rectItemsSvg);\n if (heatMap.legendSettings.showLabel) {\n this.renderLegendLabel(heatMap, 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, heatMap);\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.renderLegendLabel = function (heatMap, rect) {\n var anchor;\n var dominantBaseline;\n var legendLabel;\n var textWrapWidth = 0;\n this.legendLabelTooltip = [];\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 < heatMap.legendColorCollection.length; i++) {\n var value = ((heatMap.legendColorCollection[i].value - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n if (heatMap.horizontalGradient) {\n labelX = this.positionCollections[i];\n labelY = rect.y + rect.height + this.labelPadding;\n anchor = (value === 0) ? 'start' : (i === heatMap.legendColorCollection.length - 1) ? 'end' : 'middle';\n dominantBaseline = 'hanging';\n }\n else {\n labelX = rect.x + rect.width + this.labelPadding;\n labelY = this.positionCollections[i];\n dominantBaseline = (value === 0) ? 'hanging' : (i === heatMap.legendColorCollection.length - 1) ? 'baseline' : 'middle';\n }\n if (heatMap.horizontalGradient) {\n var previousSegmentWidth = (this.positionCollections[i] - this.positionCollections[i - 1]) / 2;\n var nextSegmentWidth = (this.positionCollections[i + 1] - this.positionCollections[i]) / 2;\n if (i === heatMap.legendColorCollection.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.width - (this.legendRectScale.width + this.labelPadding +\n this.legendRectPadding);\n }\n if (this.labelCollections[i] !== '') {\n var text = getTitle(this.labelCollections[i], heatMap.legendSettings.textStyle, textWrapWidth);\n if (text.length !== 0 && text[0].indexOf('...') !== -1 && heatMap.enableCanvasRendering) {\n var elementSize = measureText(this.labelCollections[i], 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, this.legend);\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 = 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(heatMap);\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(heatMap);\n }\n };\n /**\n * @private\n */\n Legend.prototype.removeGradientPointer = function (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 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 if (heatMap.paletteSettings.type === 'Fixed' && label === '') {\n continue;\n }\n else {\n this.labelCollections.push(label);\n }\n }\n if (heatMap.paletteSettings.type === 'Gradient') {\n if (legendSettings.textStyle.textOverflow !== 'Trim') {\n this.maxLegendLabelSize = this.getMaxLabelSize(heatMap);\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 !== 'Wrap') {\n this.legendWidth = ((2 * this.legendRectPadding) + this.legendSize + this.maxLegendLabelSize.width).toString();\n }\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 === 'Gradient' ? '50' : '70';\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(heatMap);\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 (heatMap) {\n if (!heatMap.legendSettings.showLabel || heatMap.horizontalGradient && heatMap.paletteSettings.type === 'Fixed') {\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 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 (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') {\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 === 'Gradient' ? scale.width - 2 * padding : scale.width - (2 * this.listInterval);\n height = heatMap.paletteSettings.type === 'Gradient' ? this.gradientScaleSize :\n (this.legendSize + this.listInterval) * this.listPerPage - this.listInterval;\n }\n else {\n left = scale.x + this.legendRectPadding;\n top = scale.y + padding;\n width = heatMap.paletteSettings.type === 'Gradient' ? this.gradientScaleSize : scale.width - padding;\n height = heatMap.paletteSettings.type === 'Gradient' ? scale.height - 2 * padding :\n (this.legendSize + this.listInterval) * this.listPerPage - this.listInterval;\n }\n this.legendRectScale = new Rect(left, top, width, height);\n if (heatMap.paletteSettings.type === 'Gradient') {\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 var segmentCollections = [];\n var pathX1;\n var pathY1;\n this.legendMinValue = heatMap.colorCollection[0].value;\n this.legendMaxValue = heatMap.colorCollection[heatMap.colorCollection.length - 1].value;\n for (var i = 0; i < heatMap.legendColorCollection.length; i++) {\n this.legendMinValue = heatMap.legendColorCollection[i].value < this.legendMinValue ?\n heatMap.legendColorCollection[i].value : this.legendMinValue;\n this.legendMaxValue = heatMap.legendColorCollection[i].value > this.legendMaxValue ?\n heatMap.legendColorCollection[i].value : this.legendMaxValue;\n }\n this.legendMinValue = this.legendMinValue > heatMap.dataSourceMinValue ? heatMap.dataSourceMinValue : this.legendMinValue;\n this.legendMaxValue = this.legendMaxValue < heatMap.dataSourceMaxValue ? heatMap.dataSourceMaxValue : this.legendMaxValue;\n for (var index = 0; index < heatMap.legendColorCollection.length; index++) {\n var value = ((heatMap.legendColorCollection[index].value - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n if (!heatMap.horizontalGradient) {\n legendPart = rect.height / 100;\n pathY1 = legendRect.y + (legendPart * value);\n segmentCollections.push(pathY1);\n }\n else {\n legendPart = rect.width / 100;\n pathX1 = legendRect.x + (legendPart * value);\n segmentCollections.push(pathX1);\n }\n }\n if (heatMap.horizontalGradient && heatMap.legendSettings.textStyle.textOverflow === 'Wrap') {\n for (var i = 0; i < heatMap.legendColorCollection.length; i++) {\n var textWrapWidth = void 0;\n var previousSegmentWidth = (segmentCollections[i] - segmentCollections[i - 1]) / 2;\n var nextSegmentWidth = (segmentCollections[i + 1] - segmentCollections[i]) / 2;\n if (i === heatMap.legendColorCollection.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 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 rect = this.legendRectScale;\n var legendPart;\n var legendElement;\n var pathX1;\n var pathY1;\n var pathX2;\n var pathY2;\n this.positionCollections = [];\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 var value = ((heatMap.legendColorCollection[i].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 pathX1 = legendRect.x;\n pathY1 = pathY2 = legendRect.y + (legendPart * value);\n pathX2 = legendRect.x + legendRect.width;\n this.positionCollections.push(pathY1);\n }\n else {\n legendPart = rect.width / 100;\n pathX1 = pathX2 = legendRect.x + (legendPart * value);\n pathY1 = legendRect.y;\n pathY2 = legendRect.y + legendRect.height;\n this.positionCollections.push(pathX1);\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, 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(heatMap);\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 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.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.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 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.legendModule.renderLegendItems(this);\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 renderer = true;\n break;\n case 'showTooltip':\n refreshBounds = true;\n break;\n case 'dataSource':\n this.isCellData = false;\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.heatMapAxis.calculateVisibleLabels();\n this.twoDimensional.processDataSource(this.completeAdaptDataSource);\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 }\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 (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') ? 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) {\n this.legendModule.calculateLegendBounds(this.initialClipRect);\n }\n this.heatMapAxis.measureAxis(this.initialClipRect);\n if (this.legendModule && this.legendSettings.visible) {\n this.legendModule.calculateLegendSize(this.initialClipRect, legendTop);\n }\n this.heatMapAxis.calculateAxisSize(this.initialClipRect);\n };\n HeatMap.prototype.refreshBound = function () {\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 };\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 && this.legendSettings.visible) {\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) {\n this.legendModule.renderGradientPointer(e, pageX, pageY);\n }\n }\n else {\n this.legendModule.removeGradientPointer(this);\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 var elementRect_1;\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) {\n this.legendModule.renderLegendLabelTooltip(e);\n }\n }\n else {\n elementRect_1 = this.element.getBoundingClientRect();\n tooltipText = getTooltipText(this.tooltipCollection, pageX, pageY) ||\n (this.legendModule && 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.paletteSettings.type === 'Gradient' && this.legendModule && this.legendSettings.showGradientPointer &&\n this.legendSettings.visible) {\n if (e.type === 'mouseleave') {\n this.legendModule.removeGradientPointer(this);\n }\n else {\n if (this.gradientTimer) {\n window.clearTimeout(this.gradientTimer);\n }\n this.gradientTimer = setTimeout(function () { _this.legendModule.removeGradientPointer(_this); }, 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 } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { increaseDateTimeInterval } from '../utils/helper';\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 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);\n }\n if (yAxis.valueType === 'Numeric') {\n this.reconstructedYAxis = this.getNumericAxisCollection(this.adaptiveYMinMax.min, this.adaptiveYMinMax.max);\n }\n if (xAxis.valueType === 'DateTime') {\n this.reconstructedXAxis = this.getDateAxisCollection(this.adaptiveXMinMax.min, this.adaptiveXMinMax.max, xAxis.intervalType);\n }\n if (yAxis.valueType === 'DateTime') {\n this.reconstructedYAxis = this.getDateAxisCollection(this.adaptiveYMinMax.min, this.adaptiveYMinMax.max, yAxis.intervalType);\n }\n };\n /**\n * Method to calculate Numeric Axis Collection.\n * @return {string[]}\n * @private\n */\n Adaptor.prototype.getNumericAxisCollection = function (min, max) {\n var loopIndex = min;\n var tempAxisColl = [];\n while (loopIndex <= max) {\n tempAxisColl.push(loopIndex.toString());\n loopIndex++;\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) {\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).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 = xLabels.indexOf(tempDataCollection[index][adaptordata.xDataMapping]);\n if (currentDataXIndex !== -1) {\n while (!this.reconstructData[currentDataXIndex]) {\n this.reconstructData.push([]);\n }\n currentDataYIndex = yLabels.indexOf(tempDataCollection[index][adaptordata.yDataMapping]);\n if (currentDataYIndex !== -1) {\n while (this.reconstructData[currentDataXIndex][currentDataYIndex] !== '') {\n this.reconstructData[currentDataXIndex].push('');\n }\n this.reconstructData[currentDataXIndex][currentDataYIndex] =\n isNullOrUndefined(tempDataCollection[index][adaptordata.valueMapping]) ?\n '' : tempDataCollection[index][adaptordata.valueMapping];\n }\n }\n }\n }\n return this.reconstructData;\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 = xLabels.indexOf(tempDataCollection[xindex][adaptordata.xDataMapping]);\n if (currentDataXIndex !== -1) {\n while (!this.reconstructData[currentDataXIndex]) {\n this.reconstructData.push([]);\n }\n for (var index = 0; index < Object.keys(tempDataCollection[xindex]).length; index++) {\n key = Object.keys(tempDataCollection[xindex])[index];\n currentDataYIndex = key !== adaptordata.xDataMapping ? yLabels.indexOf(key) : -1;\n if (currentDataYIndex !== -1) {\n while (this.reconstructData[currentDataXIndex][currentDataYIndex] !== '') {\n this.reconstructData[currentDataXIndex].push('');\n }\n this.reconstructData[currentDataXIndex][currentDataYIndex] =\n isNullOrUndefined(tempDataCollection[xindex][key]) ?\n '' : tempDataCollection[xindex][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 component 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 render tooltip.\n * @private\n */\n Tooltip.prototype.renderTooltip = function (currentRect) {\n var hetmapSeries = this.heatMap.heatMapSeries;\n var tempTooltipText = [''];\n if (isNullOrUndefined(currentRect.value) || (!isNullOrUndefined(currentRect.value) && currentRect.value.toString() === '')) {\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 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: [hetmapSeries.hoverXAxisLabel + ' | ' + hetmapSeries.hoverYAxisLabel + ' : ' +\n hetmapSeries.getFormatedText(currentRect.value, this.heatMap.cellSettings.format)]\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 = [hetmapSeries.hoverXAxisLabel + ' | ' + hetmapSeries.hoverYAxisLabel + ' : ' +\n hetmapSeries.getFormatedText(currentRect.value, this.heatMap.cellSettings.format)];\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('#FFFFFF')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: '#686868', size: '13px' }, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"enableAnimation\", void 0);\n __decorate([\n Complex({}, 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 this.axisObject = this.gauge.renderer.createGroup({\n id: this.gauge.element.id + '_Axis_Collections',\n transform: 'translate( 0, 0 )'\n });\n for (var i = 0; i < this.gauge.axes.length; i++) {\n axis = this.gauge.axes[i];\n major = axis.majorTicks;\n minor = axis.minorTicks;\n this.htmlObject = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_Axis_Group_' + i });\n this.drawAxisLine(axis, this.htmlObject, i);\n this.drawRanges(axis, this.htmlObject, i);\n this.drawTicks(axis, major, this.htmlObject, 'MajorTicks', axis.majorTickBounds);\n this.drawTicks(axis, minor, this.htmlObject, 'MinorTicks', axis.minorTickBounds);\n this.drawAxisLabels(axis, this.htmlObject);\n this.drawPointers(axis, this.htmlObject, i);\n this.axisElements.push(this.htmlObject);\n }\n this.axisElements.forEach(function (axisElement) {\n _this.axisObject.appendChild(axisElement);\n });\n this.gauge.svgObject.appendChild(this.axisObject);\n if (this.gauge.nearSizes.length !== this.gauge.farSizes.length && this.gauge.axes.length > 1) {\n this.axisAlign(this.gauge.axes);\n }\n };\n AxisRenderer.prototype.axisAlign = function (axes) {\n var nearAxisWidth = 0;\n var farAxisWidth = 0;\n var axis;\n var tranX;\n var transY;\n if (this.gauge.orientation === 'Vertical') {\n axes.forEach(function (axis, axisIndex) {\n if (!axis.opposedPosition) {\n nearAxisWidth += axis.bounds.width;\n }\n else {\n farAxisWidth += axis.bounds.width;\n }\n });\n nearAxisWidth += this.gauge.containerBounds.width / 2;\n farAxisWidth += this.gauge.containerBounds.width / 2;\n tranX = (nearAxisWidth / 2) - (farAxisWidth / 2);\n this.axisObject.setAttribute('transform', 'translate(' + tranX + ',0)');\n if (!(isNullOrUndefined(this.gauge.containerObject))) {\n this.gauge.containerObject.setAttribute('transform', 'translate(' + tranX + ',0)');\n }\n }\n else {\n axes.forEach(function (axis, axisIndex) {\n if (!axis.opposedPosition) {\n nearAxisWidth += axis.bounds.height;\n }\n else {\n farAxisWidth += axis.bounds.height;\n }\n });\n nearAxisWidth += (this.gauge.containerBounds.height / 2);\n farAxisWidth += (this.gauge.containerBounds.height / 2);\n transY = (nearAxisWidth / 2) - (farAxisWidth / 2);\n this.axisObject.setAttribute('transform', 'translate(0,' + transY + ')');\n if (!(isNullOrUndefined(this.gauge.containerObject))) {\n this.gauge.containerObject.setAttribute('transform', 'translate(0,' + transY + ')');\n }\n }\n };\n AxisRenderer.prototype.drawAxisLine = function (axis, axisObject, axisIndex) {\n var options;\n var rect = axis.lineBounds;\n var path = '';\n if (axis.line.width > 0) {\n path = 'M' + rect.x + ' ' + rect.y + ' L ' + (this.gauge.orientation === 'Vertical' ? rect.x : rect.x + rect.width) +\n ' ' + (this.gauge.orientation === 'Vertical' ? rect.y + rect.height : rect.y) + 'z';\n options = new PathOption(this.gauge.element.id + '_AxisLine_' + axisIndex, axis.line.color, axis.line.width, axis.line.color, 1, axis.line.dashArray, path);\n axisObject.appendChild(this.gauge.renderer.drawPath(options));\n }\n };\n AxisRenderer.prototype.drawTicks = function (axis, ticks, axisObject, tickID, tickBounds) {\n var tickPath = '';\n var pointY;\n var pointX;\n var options;\n var range = axis.visibleRange;\n var line = axis.lineBounds;\n var interval = ((tickID === 'MajorTicks') ? axis.majorInterval : axis.minorInterval);\n for (var i = range.min; (i <= range.max && interval > 0); i += interval) {\n if ((tickID === 'MajorTicks') || (tickID === 'MinorTicks' && i !== range.min && i !== range.max\n && (i % axis.majorInterval) !== 0)) {\n if (this.gauge.orientation === 'Vertical') {\n pointX = tickBounds.x;\n pointY = (valueToCoefficient(i, axis, this.gauge.orientation, range) * line.height) + line.y;\n tickPath = tickPath.concat('M' + pointX + ' ' + pointY + ' ' + 'L' + (pointX + ticks.height) + ' ' + pointY + ' ');\n }\n else {\n pointX = (valueToCoefficient(i, axis, this.gauge.orientation, range) * line.width) + line.x;\n pointY = tickBounds.y;\n tickPath = tickPath.concat('M' + pointX + ' ' + pointY + ' ' + 'L' + pointX + ' ' + (pointY + ticks.height) + ' ');\n }\n }\n }\n options = new PathOption(this.gauge.element.id + '_' + tickID + 'Line_' + 0, ticks.color, ticks.width, ticks.color, 1, null, tickPath);\n axisObject.appendChild(this.gauge.renderer.drawPath(options));\n };\n AxisRenderer.prototype.drawAxisLabels = function (axis, axisObject) {\n var options;\n var pointX;\n var pointY;\n var rect = axis.lineBounds;\n var bounds = axis.labelBounds;\n var tick = axis.majorTickBounds;\n var labelSize;\n var range = axis.visibleRange;\n var anchor;\n var baseline;\n var padding = 5;\n var labelColor;\n var offset = axis.labelStyle.offset;\n var labelElement = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_AxisLabelsGroup' });\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n labelSize = axis.visibleLabels[i].size;\n labelColor = axis.labelStyle.useRangeColor ? getRangeColor(axis.visibleLabels[i].value, axis.ranges) :\n null;\n labelColor = isNullOrUndefined(labelColor) ? axis.labelStyle.font.color : labelColor;\n if (this.gauge.orientation === 'Vertical') {\n pointY = (valueToCoefficient(axis.visibleLabels[i].value, axis, this.gauge.orientation, range) *\n rect.height) + rect.y;\n pointX = (!axis.opposedPosition ? (tick.x - labelSize.width - padding) + offset : bounds.x);\n pointY += (labelSize.height / 4);\n }\n else {\n pointX = (valueToCoefficient(axis.visibleLabels[i].value, axis, this.gauge.orientation, range) *\n rect.width) + rect.x;\n pointY = bounds.y;\n anchor = 'middle';\n baseline = '';\n }\n options = new TextOption(this.gauge.element.id + '_AxisLabel_' + i, pointX, pointY, anchor, axis.visibleLabels[i].text, null, baseline);\n textElement(options, axis.labelStyle.font, labelColor, labelElement);\n }\n axisObject.appendChild(labelElement);\n };\n AxisRenderer.prototype.drawPointers = function (axis, axisObject, axisIndex) {\n var pointer;\n var clipId;\n var pointesGroup;\n var pointerClipRectGroup;\n pointesGroup = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_PointersGroup' });\n for (var i = 0; i < axis.pointers.length; i++) {\n pointer = axis.pointers[i];\n clipId = 'url(#' + this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + '_' + pointer.type + 'ClipRect_' + i + ')';\n if (!(isNullOrUndefined(pointer.bounds))) {\n pointerClipRectGroup = this.gauge.renderer.createGroup({\n 'id': this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer_' + i,\n 'clip-path': clipId\n });\n if (isNullOrUndefined(pointer.startValue)) {\n pointer.startValue = axis.visibleRange.min;\n }\n this['draw' + pointer.type + 'Pointer'](axis, axisIndex, pointer, i, pointerClipRectGroup);\n pointesGroup.appendChild(pointerClipRectGroup);\n }\n }\n axisObject.appendChild(pointesGroup);\n };\n AxisRenderer.prototype.drawMarkerPointer = function (axis, axisIndex, pointer, pointerIndex, parentElement) {\n var options;\n var pointerID = this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer' + '_' + pointerIndex;\n var transform = 'translate( 0, 0 )';\n var pointerElement;\n if (getElement(pointerID) && getElement(pointerID).childElementCount > 0) {\n remove(getElement(pointerID));\n }\n options = new PathOption(pointerID, pointer.color, pointer.border.width, pointer.border.color, pointer.opacity, null, null, transform);\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, this.gauge.orientation, axis, pointer);\n pointerElement = ((pointer.markerType === 'Circle' ? this.gauge.renderer.drawCircle(options)\n : (pointer.markerType === 'Image') ? this.gauge.renderer.drawImage(options) :\n this.gauge.renderer.drawPath(options)));\n parentElement.appendChild(pointerElement);\n if (pointer.animationDuration > 0 && !this.gauge.gaugeResized) {\n pointer.animationComplete = false;\n this.performMarkerAnimation(pointerElement, axis, pointer);\n }\n pointerElement.setAttribute('aria-label', pointer.description || 'Pointer:' + Number(pointer.currentValue).toString());\n };\n AxisRenderer.prototype.drawBarPointer = function (axis, axisIndex, pointer, pointerIndex, parentElement) {\n var rectOptions;\n var clipRectElement;\n var pointerElement;\n var path = '';\n var options;\n var box;\n var radius;\n var bottomRadius;\n var topRadius;\n var size = new Size(this.gauge.availableSize.width, this.gauge.availableSize.height);\n var pointerID = this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer' + '_' + pointerIndex;\n if (getElement(pointerID) && getElement(pointerID).childElementCount > 0) {\n remove(getElement(pointerID));\n }\n if (this.gauge.container.type === 'Normal') {\n rectOptions = new RectOption(pointerID, pointer.color, pointer.border, pointer.opacity, pointer.bounds, null, null);\n box = pointer.bounds;\n pointerElement = this.gauge.renderer.drawRectangle(rectOptions);\n }\n else {\n path = getBox(pointer.bounds, this.gauge.container.type, this.gauge.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', this.gauge.container.width, axis, pointer.roundedCornerRadius);\n options = new PathOption(pointerID, pointer.color, pointer.border.width, pointer.border.color, pointer.opacity, null, path);\n pointerElement = this.gauge.renderer.drawPath(options);\n box = getPathToRect(pointerElement.cloneNode(true), size, this.gauge.element);\n }\n if (getElement(pointerID) && getElement(pointerID).childElementCount > 0) {\n var element = getElement(pointerID).firstElementChild;\n if (this.gauge.container.type === 'Normal') {\n element.setAttribute('x', rectOptions.x + '');\n element.setAttribute('y', rectOptions.y + '');\n element.setAttribute('width', rectOptions.width + '');\n element.setAttribute('height', rectOptions.height + '');\n }\n else {\n element.setAttribute('d', options.d);\n }\n }\n else {\n parentElement.appendChild(pointerElement);\n }\n pointerElement.setAttribute('aria-label', pointer.description || 'Pointer:' + Number(pointer.currentValue).toString());\n if (pointer.animationDuration > 0 && !this.gauge.gaugeResized) {\n if (this.gauge.container.type === 'Thermometer' && pointer.startValue === 0) {\n clipRectElement = this.gauge.renderer.drawClipPath(new RectOption(this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + '_' + pointer.type + 'ClipRect_' + pointerIndex, 'transparent', { width: 1, color: 'Gray' }, 1, box));\n parentElement.appendChild(clipRectElement);\n }\n this.performBarAnimation(pointerElement, axis, pointer);\n }\n };\n AxisRenderer.prototype.drawRanges = function (axis, axisObject, axisIndex) {\n var range;\n var options;\n var rangeElement = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_RangesGroup' });\n for (var j = 0; j < axis.ranges.length; j++) {\n range = axis.ranges[j];\n if (!(isNullOrUndefined(range.path))) {\n options = new PathOption(this.gauge.element.id + '_AxisIndex_' + axisIndex + '_Range_' + j, range.interior, range.border.width, range.border.color, 1, null, range.path);\n rangeElement.appendChild(this.gauge.renderer.drawPath(options));\n }\n }\n axisObject.appendChild(rangeElement);\n };\n return AxisRenderer;\n}(Animations));\nexport { AxisRenderer };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getTemplateFunction, getElement, getElementOffset } from '../utils/helper';\nimport { getFontStyle, valueToCoefficient } from '../utils/helper';\nimport { annotationRender } from '../model/constant';\n/**\n * Represent the Annotation rendering for gauge\n */\nvar Annotations = /** @class */ (function () {\n function Annotations(gauge) {\n this.gauge = gauge;\n }\n /**\n * To render annotation elements\n */\n Annotations.prototype.renderAnnotationElements = function () {\n var _this = this;\n var secondaryID = this.gauge.element.id + '_Secondary_Element';\n var annotationGroup = createElement('div', { id: this.gauge.element.id + '_AnnotationsGroup' });\n annotationGroup.style.position = 'absolute';\n annotationGroup.style.top = '0px';\n annotationGroup.style.left = '0px';\n this.gauge.annotations.map(function (annotation, index) {\n if (annotation.content !== null) {\n _this.createAnnotationTemplate(annotationGroup, index);\n }\n });\n if (annotationGroup.childElementCount > 0 && !(isNullOrUndefined(getElement(secondaryID)))) {\n getElement(secondaryID).appendChild(annotationGroup);\n }\n };\n /**\n * To create annotation elements\n */\n Annotations.prototype.createAnnotationTemplate = function (element, annotationIndex) {\n var left;\n var top;\n var templateFn;\n var renderAnnotation = false;\n var templateElement;\n var axis;\n var axisIndex;\n var axisValue;\n var id = this.gauge.element.id + '_Annotation_' + annotationIndex;\n var annotation = this.gauge.annotations[annotationIndex];\n var childElement;\n childElement = createElement('div', {\n id: this.gauge.element.id + '_Annotation_' + annotationIndex, styles: 'position: absolute; z-index:' + annotation.zIndex + ';'\n });\n var argsData = {\n cancel: false, name: annotationRender, content: annotation.content,\n annotation: annotation, textStyle: annotation.font\n };\n this.gauge.trigger(annotationRender, argsData);\n if (!argsData.cancel) {\n templateFn = getTemplateFunction(argsData.content);\n if (templateFn && templateFn(this.gauge).length) {\n templateElement = templateFn(this.gauge);\n while (templateElement.length > 0) {\n childElement.appendChild(templateElement[0]);\n }\n }\n else {\n childElement.appendChild(createElement('div', {\n innerHTML: argsData.content,\n styles: getFontStyle(argsData.textStyle)\n }));\n }\n var offset = getElementOffset(childElement.cloneNode(true), this.gauge.element);\n if (!(isNullOrUndefined(annotation.axisValue))) {\n axisIndex = isNullOrUndefined(annotation.axisIndex) ? 0 : annotation.axisIndex;\n axis = this.gauge.axes[axisIndex];\n var range = axis.visibleRange;\n renderAnnotation = (annotation.axisValue >= range.min && annotation.axisValue <= range.max) ? true : false;\n var line = axis.lineBounds;\n if (this.gauge.orientation === 'Vertical') {\n left = line.x + annotation.x;\n top = ((valueToCoefficient(annotation.axisValue, axis, this.gauge.orientation, range) * line.height) + line.y);\n top += annotation.y;\n }\n else {\n left = ((valueToCoefficient(annotation.axisValue, axis, this.gauge.orientation, range) * line.width) + line.x);\n left += annotation.x;\n top = line.y + annotation.y;\n }\n left -= (offset.width / 2);\n top -= (offset.height / 2);\n }\n else {\n var elementRect = this.gauge.element.getBoundingClientRect();\n var bounds = this.gauge.svgObject.getBoundingClientRect();\n renderAnnotation = true;\n left = Math.abs(bounds.left - elementRect.left);\n top = Math.abs(bounds.top - elementRect.top);\n left = (annotation.horizontalAlignment === 'None') ? (left + annotation.x) : left;\n top = (annotation.verticalAlignment === 'None') ? top + annotation.y : top;\n switch (annotation.verticalAlignment) {\n case 'Near':\n top = top + annotation.y;\n break;\n case 'Center':\n top = top + annotation.y + ((bounds.height / 2) - (offset.height / 2));\n break;\n case 'Far':\n top = (top + bounds.height) + annotation.y - offset.height;\n break;\n }\n switch (annotation.horizontalAlignment) {\n case 'Near':\n left = left + annotation.x;\n break;\n case 'Center':\n left = left + annotation.x + ((bounds.width / 2) - (offset.width / 2));\n break;\n case 'Far':\n left = (left + bounds.width) + annotation.x - offset.width;\n break;\n }\n }\n childElement.style.left = left + 'px';\n childElement.style.top = top + 'px';\n if (renderAnnotation) {\n element.appendChild(childElement);\n }\n }\n };\n /*\n * Get module name.\n */\n Annotations.prototype.getModuleName = function () {\n return 'Annotations';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n Annotations.prototype.destroy = function (gauge) {\n // Destroy method performed here\n };\n return Annotations;\n}());\nexport { Annotations };\n","import { createElement, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { tooltipRender } from '../model/constant';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { getElement, getLabelFormat, getTemplateFunction, GaugeLocation, Size } from '../utils/helper';\nimport { getPointer, convertPixelToValue } from '../utils/helper';\n/**\n * Represent the tooltip rendering for gauge\n */\nvar GaugeTooltip = /** @class */ (function () {\n function GaugeTooltip(gauge) {\n this.gauge = gauge;\n this.element = gauge.element;\n this.tooltip = gauge.tooltip;\n this.textStyle = this.tooltip.textStyle;\n this.borderStyle = this.tooltip.border;\n this.ejTooltip = new Tooltip({\n opensOn: 'custom',\n beforeRender: this.onBeforeRender.bind(this),\n beforeOpen: this.tooltipCustomization.bind(this),\n openDelay: 0, closeDelay: 1000\n });\n this.ejTooltip.appendTo(this.element);\n }\n /**\n * Internal use for tooltip rendering\n * @param pointerElement\n */\n GaugeTooltip.prototype.renderTooltip = function (pointerElement) {\n this.pointerElement = pointerElement;\n var clientRect = this.gauge.element.getBoundingClientRect();\n var current = getPointer(pointerElement, this.gauge);\n this.currentAxis = current.axis;\n this.axisIndex = current.axisIndex;\n this.currentPointer = current.pointer;\n var ele = this.appendTargetElement();\n if (pointerElement.getAttribute('data-tooltip-id') === null && ele.getAttribute('aria-describedby') === null) {\n this.ejTooltip.open(ele);\n }\n };\n GaugeTooltip.prototype.appendTargetElement = function () {\n var location = this.getTooltipLocation();\n var element = getElement(this.element.id + '_EJTooltip_');\n var elementSpace = 2;\n if (element) {\n element.style.left = (location.x - (elementSpace / 2)) + 'px';\n element.style.top = (location.y - (elementSpace / 2)) + 'px';\n }\n else {\n element = createElement('div', {\n id: this.element.id + '_EJTooltip_',\n styles: 'position:absolute; left:' + location.x + 'px;top:' + location.y + 'px;'\n });\n element.appendChild(createElement('div', {\n id: this.element.id + '_GaugeTooltip',\n styles: 'position:absolute;width:' + elementSpace + 'px;height:' + elementSpace + 'px;background:transparent'\n }));\n getElement(this.element.id + '_Secondary_Element').appendChild(element);\n }\n return element;\n };\n GaugeTooltip.prototype.getTooltipPosition = function () {\n var position;\n if (this.gauge.orientation === 'Vertical') {\n position = (!this.currentAxis.opposedPosition) ? 'LeftCenter' : 'RightCenter';\n }\n else {\n position = (this.currentAxis.opposedPosition) ? 'TopCenter' : 'BottomCenter';\n }\n return position;\n };\n GaugeTooltip.prototype.getTooltipLocation = function () {\n var location;\n var bounds;\n var radix = 10;\n var lineX;\n var lineY;\n var size = new Size(this.gauge.availableSize.width, this.gauge.availableSize.height);\n var x;\n var y;\n var height;\n var width;\n var lineId = this.gauge.element.id + '_AxisLine_' + this.axisIndex;\n var tickID = this.gauge.element.id + '_MajorTicksLine_' + this.axisIndex;\n var lineBounds;\n if (getElement(lineId)) {\n lineBounds = getElement(lineId).getBoundingClientRect();\n lineX = lineBounds.left;\n lineY = lineBounds.top;\n }\n else {\n lineBounds = getElement(tickID).getBoundingClientRect();\n lineX = (!this.currentAxis.opposedPosition) ? (lineBounds.left + lineBounds.width) : lineBounds.left;\n lineY = (!this.currentAxis.opposedPosition) ? (lineBounds.top + lineBounds.height) : lineBounds.top;\n }\n bounds = this.pointerElement.getBoundingClientRect();\n var elementRect = this.gauge.element.getBoundingClientRect();\n x = bounds.left - elementRect.left;\n y = bounds.top - elementRect.top;\n height = bounds.height;\n width = bounds.width;\n if (this.gauge.orientation === 'Vertical') {\n x = (lineX - elementRect.left);\n y = (this.currentPointer.type === 'Marker') ? y + (height / 2) : (!this.currentAxis.isInversed) ? y : y + height;\n }\n else {\n y = (lineY - elementRect.top);\n x = (this.currentPointer.type === 'Marker') ? (x + width / 2) : (!this.currentAxis.isInversed) ? x + width : x;\n }\n location = new GaugeLocation(x, y);\n return location;\n };\n GaugeTooltip.prototype.onBeforeRender = function (args) {\n var pointerValue = convertPixelToValue(this.element, this.pointerElement, this.gauge.orientation, this.currentAxis, 'tooltip', null);\n var tooltipFormat = this.gauge.tooltip.format || this.currentAxis.labelStyle.format;\n var customLabelFormat = tooltipFormat && tooltipFormat.match('{value}') !== null;\n var format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(tooltipFormat), useGrouping: this.gauge.useGroupingSeparator\n });\n var content = customLabelFormat ?\n tooltipFormat.replace(new RegExp('{value}', 'g'), format(pointerValue)) :\n format(pointerValue);\n content = this.tooltip.template ? getTemplateFunction(this.tooltip.template)({ 'value': content })[0] : content;\n var argsData = {\n cancel: false, name: tooltipRender,\n content: content,\n border: this.borderStyle,\n axis: this.currentAxis, pointer: this.currentPointer,\n textStyle: this.textStyle\n };\n this.gauge.trigger(tooltipRender, argsData);\n this.ejTooltip.content = argsData.content;\n this.textStyle = argsData.textStyle;\n this.borderStyle = argsData.border;\n this.ejTooltip.position = this.getTooltipPosition();\n this.ejTooltip.dataBind();\n };\n GaugeTooltip.prototype.tooltipCustomization = function (args) {\n var font = this.textStyle;\n var borderColor = this.borderStyle.color;\n var border = this.borderStyle.width;\n var pointerSize = 8;\n var arrowWidth = (pointerSize - border) + 'px';\n var outerWidth;\n var innerWidth;\n args.element.classList.remove('e-popup-close');\n args.element.classList.add('e-popup-open');\n var arrowEle = args.element.querySelector('.e-arrow-tip');\n setStyleAttribute(args.element, {\n 'backgroundColor': this.tooltip.fill, 'borderColor': borderColor || '#212121',\n 'borderWidth': border + 'px', 'pointer-events': 'none', 'borderRadius': '5px', 'padding-left': '5px',\n 'padding-right': '5px', 'padding-top': '3px', 'padding-bottom': '3px'\n });\n setStyleAttribute(args.element.querySelector('.e-tip-content'), {\n 'color': font.color, 'fontFamily': font.fontFamily, 'fontSize': font.size,\n 'fontWeight': font.fontWeight, 'opacity': font.opacity.toString(), 'fontStyle': font.fontStyle\n });\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': 2 * (pointerSize + border) + 'px', 'height': pointerSize + border + 'px'\n });\n if (arrowEle.classList.contains('e-tip-top')) {\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetHeight;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': this.tooltip.border.width > 0 ?\n this.tooltip.border.color : 'transparent', 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth,\n 'borderBottomWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': 'transparent',\n 'borderLeftWidth': innerWidth, 'borderRightWidth': innerWidth, 'borderBottomWidth': innerWidth,\n 'left': border + 'px', 'top': border + 'px'\n });\n }\n else if (arrowEle.classList.contains('e-tip-bottom')) {\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetHeight;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': this.tooltip.border.width > 0 ?\n this.tooltip.border.color : 'transparent', 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth,\n 'borderTopWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': 'transparent',\n 'borderLeftWidth': innerWidth, 'borderRightWidth': innerWidth, 'borderTopWidth': innerWidth,\n 'left': border + 'px', 'top': '0'\n });\n }\n else if (arrowEle.classList.contains('e-tip-left')) {\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': pointerSize + border + 'px', 'height': 2 * (pointerSize + border) + 'px'\n });\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetWidth;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderRightColor': borderColor,\n 'borderTopWidth': outerWidth, 'borderBottomWidth': outerWidth, 'borderRightWidth': outerWidth\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderRightColor': this.tooltip.fill,\n 'borderTopWidth': innerWidth, 'borderBottomWidth': innerWidth, 'borderRightWidth': innerWidth,\n 'left': border + 'px', 'top': border + 'px'\n });\n }\n else {\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': (pointerSize + border) + 'px', 'height': 2 * (pointerSize + border) + 'px'\n });\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetWidth;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderLeftColor': borderColor,\n 'borderTopWidth': outerWidth, 'borderBottomWidth': outerWidth, 'borderLeftWidth': outerWidth\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderLeftColor': this.tooltip.fill,\n 'borderTopWidth': innerWidth, 'borderBottomWidth': innerWidth, 'borderLeftWidth': innerWidth,\n 'left': (border <= 1 ? 0 : -1) + 'px', 'top': border + 'px'\n });\n }\n this.ejTooltip.refresh(args.target);\n setStyleAttribute(args.element, {\n 'display': 'block', 'transitionProperty': 'left,top',\n 'transitionDuration': this.tooltip.enableAnimation ? '1000ms' : '0ms'\n });\n };\n /*\n * Get module name.\n */\n GaugeTooltip.prototype.getModuleName = function () {\n return 'Tooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n GaugeTooltip.prototype.destroy = function (gauge) {\n // Destroy method performed here\n };\n return GaugeTooltip;\n}());\nexport { GaugeTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Internationalization } from '@syncfusion/ej2-base';\nimport { SvgRenderer, Browser } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, Complex, Collection, isNullOrUndefined, remove } 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 = this.createElement('div');\n secondaryElement.id = this.element.id + '_Secondary_Element';\n secondaryElement.setAttribute('style', 'position: relative');\n this.element.appendChild(secondaryElement);\n }\n };\n /**\n * @private\n * To calculate axes bounds\n */\n LinearGauge.prototype.calculateBounds = function () {\n this.gaugeAxisLayoutPanel.calculateAxesBounds();\n };\n /**\n * @private\n * To render axis elements\n */\n LinearGauge.prototype.renderAxisElements = function () {\n this.axisRenderer.renderAxes();\n this.element.appendChild(this.svgObject);\n if (this.annotationsModule) {\n this.annotationsModule.renderAnnotationElements();\n }\n };\n LinearGauge.prototype.renderBorder = function () {\n var width = this.border.width;\n if (width > 0) {\n var rect = new RectOption(this.element.id + '_LinearGaugeBorder', this.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width), null, null);\n this.svgObject.appendChild(this.renderer.drawRectangle(rect));\n }\n };\n LinearGauge.prototype.renderTitle = function () {\n var x;\n var y;\n var height;\n var width;\n var titleBounds;\n if (this.title) {\n var size = measureText(this.title, this.titleStyle);\n var options = new TextOption(this.element.id + '_LinearGaugeTitle', this.availableSize.width / 2, this.margin.top + (size.height / 2), 'middle', this.title);\n titleBounds = {\n x: options.x - (size.width / 2),\n y: options.y,\n width: size.width,\n height: size.height\n };\n var element = textElement(options, this.titleStyle, this.titleStyle.color, this.svgObject);\n element.setAttribute('aria-label', this.description || this.title);\n element.setAttribute('tabindex', this.tabIndex.toString());\n }\n x = this.margin.left;\n y = (isNullOrUndefined(titleBounds)) ? this.margin.top : titleBounds.y;\n height = (this.availableSize.height - y - this.margin.bottom);\n width = (this.availableSize.width - this.margin.left - this.margin.right);\n this.actualRect = { x: x, y: y, width: width, height: height };\n };\n /*\n * Method to unbind the gauge events\n */\n LinearGauge.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMove);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'contextmenu', this.gaugeRightClick);\n EventHandler.remove(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave);\n EventHandler.remove(window, (Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize.bind(this));\n };\n /*\n * Method to bind the gauge events\n */\n LinearGauge.prototype.wireEvents = function () {\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n EventHandler.add(this.element, 'contextmenu', this.gaugeRightClick, this);\n EventHandler.add(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave, this);\n EventHandler.add(window, (Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize, this);\n this.setStyle(this.element);\n };\n LinearGauge.prototype.setStyle = function (element) {\n element.style.touchAction = isPointerDrag(this.axes) ? 'none' : 'element';\n element.style.msTouchAction = isPointerDrag(this.axes) ? 'none' : 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n };\n /**\n * Handles the gauge resize.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.gaugeResize = function (e) {\n var _this = this;\n var args = {\n gauge: this,\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n name: resized,\n currentSize: new Size(0, 0)\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n if (this.element.classList.contains('e-lineargauge')) {\n this.resizeTo = setTimeout(function () {\n _this.gaugeResized = true;\n _this.createSvg();\n _this.refreshing = true;\n args.currentSize = new Size(_this.availableSize.width, _this.availableSize.height);\n _this.trigger(resized, args);\n _this.render();\n }, 500);\n }\n return false;\n };\n /**\n * To destroy the gauge element from the DOM.\n */\n LinearGauge.prototype.destroy = function () {\n this.unWireEvents();\n this.removeSvg();\n _super.prototype.destroy.call(this);\n };\n /**\n * @private\n * To render the gauge container\n */\n LinearGauge.prototype.renderContainer = function () {\n var width;\n var height;\n var x;\n var y;\n var options;\n var path = '';\n var topRadius;\n var bottomRadius;\n var fill = this.container.backgroundColor;\n var rect;\n var radius = this.container.width;\n bottomRadius = radius + ((radius / 2) / Math.PI);\n topRadius = radius / 2;\n if (this.orientation === 'Vertical') {\n height = this.actualRect.height;\n height = (this.container.height > 0 ? this.container.height : ((height / 2) - ((height / 2) / 4)) * 2);\n width = this.container.width;\n height = (this.container.type === 'Thermometer') ? height - (bottomRadius * 2) - topRadius : height;\n x = (this.actualRect.x + ((this.actualRect.width / 2) - (this.container.width / 2))) + this.container.offset;\n y = this.actualRect.y + ((this.actualRect.height / 2) - ((this.container.type === 'Thermometer') ?\n ((height + (bottomRadius * 2) - topRadius)) / 2 : height / 2));\n height = height;\n }\n else {\n width = (this.container.height > 0) ? this.container.height :\n ((this.actualRect.width / 2) - ((this.actualRect.width / 2) / 4)) * 2;\n width = (this.container.type === 'Thermometer') ? width - (bottomRadius * 2) - topRadius : width;\n x = this.actualRect.x + ((this.actualRect.width / 2) - ((this.container.type === 'Thermometer') ?\n (width - (bottomRadius * 2) + topRadius) / 2 : width / 2));\n y = (this.actualRect.y + ((this.actualRect.height / 2) - (this.container.width / 2))) + this.container.offset;\n height = this.container.width;\n }\n this.containerBounds = { x: x, y: y, width: width, height: height };\n if (this.containerBounds.width > 0) {\n this.containerObject = this.renderer.createGroup({ id: this.element.id + '_Container_Group', transform: 'translate( 0, 0)' });\n if (this.container.type === 'Normal') {\n rect = new RectOption(this.element.id + '_' + this.container.type + '_Layout', fill, this.container.border, 1, new Rect(x, y, width, height));\n this.containerObject.appendChild(this.renderer.drawRectangle(rect));\n }\n else {\n path = getBox(this.containerBounds, this.container.type, this.orientation, new Size(this.container.height, this.container.width), 'container', null, null, this.container.roundedCornerRadius);\n options = new PathOption(this.element.id + '_' + this.container.type + '_Layout', fill, this.container.border.width, this.container.border.color, 1, '', path);\n this.containerObject.appendChild(this.renderer.drawPath(options));\n }\n this.svgObject.appendChild(this.containerObject);\n }\n };\n /**\n * Handles the mouse down on gauge.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.gaugeOnMouseDown = function (e) {\n var pageX;\n var pageY;\n var target;\n var element = e.target;\n var split = [];\n var clientRect = this.element.getBoundingClientRect();\n var axis;\n var isPointer = false;\n var pointer;\n var current;\n var top;\n var left;\n var pointerElement;\n var svgPath;\n var dragProcess = false;\n var args = this.getMouseArgs(e, 'touchstart', gaugeMouseDown);\n this.trigger(gaugeMouseDown, args);\n this.mouseX = args.x;\n this.mouseY = args.y;\n if (args.target) {\n if (!args.cancel && ((args.target.id.indexOf('MarkerPointer') > -1) || (args.target.id.indexOf('BarPointer') > -1))) {\n current = this.moveOnPointer(args.target);\n if (!(isNullOrUndefined(current)) && current.pointer) {\n this.pointerDrag = true;\n this.mouseElement = args.target;\n }\n }\n }\n return true;\n };\n /**\n * Handles the mouse move.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.mouseMove = function (e) {\n var current;\n var element;\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseMove);\n this.trigger(gaugeMouseMove, args);\n this.mouseX = args.x;\n this.mouseY = args.y;\n if (args.target && !args.cancel) {\n if ((args.target.id.indexOf('MarkerPointer') > -1) || (args.target.id.indexOf('BarPointer') > -1)) {\n if (this.tooltipModule && this.tooltip.enable) {\n this.tooltipModule.renderTooltip(args.target);\n }\n current = this.moveOnPointer(args.target);\n if (!(isNullOrUndefined(current)) && current.pointer) {\n this.element.style.cursor = current.style;\n }\n }\n else {\n if (this.tooltipModule && this.tooltip.enable) {\n this.tooltipModule.ejTooltip.close();\n }\n this.element.style.cursor = (this.pointerDrag) ? this.element.style.cursor : 'auto';\n }\n this.gaugeOnMouseMove(e);\n }\n return false;\n };\n /**\n * To find the mouse move on pointer.\n * @param element\n */\n LinearGauge.prototype.moveOnPointer = function (element) {\n var current;\n var clientRect = this.element.getBoundingClientRect();\n var axis;\n var isPointer = false;\n var pointer;\n var top;\n var left;\n var pointerElement = getElement(element.id);\n var svgPath = pointerElement;\n var cursorStyle;\n var process;\n current = getPointer(element, this);\n axis = current.axis;\n pointer = current.pointer;\n if (pointer.enableDrag) {\n if (pointer.type === 'Bar') {\n if (this.orientation === 'Vertical') {\n top = pointerElement.getBoundingClientRect().top - clientRect.top;\n top = (!axis.isInversed) ? top : top + svgPath.getBBox().height;\n isPointer = !axis.isInversed ? (this.mouseY < (top + 10) && this.mouseY >= top) :\n (this.mouseY <= top && this.mouseY > (top - 10));\n cursorStyle = 'n-resize';\n }\n else {\n left = pointerElement.getBoundingClientRect().left - clientRect.left;\n left = (!axis.isInversed) ? left + svgPath.getBBox().width : left;\n isPointer = !axis.isInversed ? (this.mouseX > (left - 10) && this.mouseX <= left) :\n (this.mouseX >= left && this.mouseX < (left + 10));\n cursorStyle = 'e-resize';\n }\n }\n else {\n isPointer = true;\n cursorStyle = 'pointer';\n }\n }\n if (isPointer) {\n process = { pointer: isPointer, style: cursorStyle };\n }\n return process;\n };\n /**\n * @private\n * Handle the right click\n * @param event\n */\n LinearGauge.prototype.gaugeRightClick = function (event) {\n if (event.buttons === 2 || event.pointerType === 'touch') {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n /**\n * Handles the mouse leave.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.mouseLeave = function (e) {\n var parentNode;\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseLeave);\n if (!isNullOrUndefined(this.mouseElement)) {\n parentNode = this.element;\n parentNode.style.cursor = '';\n this.mouseElement = null;\n this.pointerDrag = false;\n }\n if (this.tooltip.enable && this.tooltipModule) {\n this.tooltipModule.ejTooltip.close();\n }\n return false;\n };\n /**\n * Handles the mouse move on gauge.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.gaugeOnMouseMove = function (e) {\n var current;\n if (this.pointerDrag) {\n current = getPointer(this.mouseElement, this);\n if (current.pointer.enableDrag && current.pointer.animationComplete) {\n this[current.pointer.type.toLowerCase() + 'Drag'](current.axis, current.pointer);\n }\n }\n return true;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.mouseEnd = function (e) {\n var _this = this;\n var parentNode;\n var tooltipInterval;\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || e.type === 'touchend';\n var args = this.getMouseArgs(e, 'touchend', gaugeMouseUp);\n this.trigger(gaugeMouseUp, args);\n if (!isNullOrUndefined(this.mouseElement)) {\n parentNode = this.element;\n parentNode.style.cursor = '';\n this.mouseElement = null;\n this.pointerDrag = false;\n }\n if (!args.cancel && isTouch && this.tooltip.enable && this.tooltipModule) {\n if (args.target.id.indexOf('Pointer') >= 0) {\n this.tooltipModule.renderTooltip(args.target);\n tooltipInterval = setTimeout(function () {\n _this.tooltipModule.ejTooltip.close();\n }, 2000);\n }\n }\n return true;\n };\n /**\n * Handles the mouse event arguments.\n * @return {IMouseEventArgs}\n * @private\n */\n LinearGauge.prototype.getMouseArgs = function (e, type, name) {\n var rect = this.element.getBoundingClientRect();\n var location = new GaugeLocation(-rect.left, -rect.top);\n var isTouch = (e.type === type);\n location.x += isTouch ? e.changedTouches[0].clientX : e.clientX;\n location.y += isTouch ? e.changedTouches[0].clientY : e.clientY;\n return {\n cancel: false, name: name,\n model: this,\n x: location.x, y: location.y,\n target: isTouch ? e.target : e.target\n };\n };\n /**\n * @private\n * @param axis\n * @param pointer\n */\n LinearGauge.prototype.markerDrag = function (axis, pointer) {\n var options;\n var value = convertPixelToValue(this.element, this.mouseElement, this.orientation, axis, 'drag', new GaugeLocation(this.mouseX, this.mouseY));\n var process = withInRange(value, null, null, axis.visibleRange.max, axis.visibleRange.min, 'pointer');\n if (withInRange(value, null, null, axis.visibleRange.max, axis.visibleRange.min, 'pointer')) {\n this.triggerDragEvent(this.mouseElement);\n options = new PathOption('pointerID', pointer.color, pointer.border.width, pointer.border.color, pointer.opacity, null, null, '');\n if (this.orientation === 'Vertical') {\n pointer.bounds.y = this.mouseY;\n }\n else {\n pointer.bounds.x = this.mouseX;\n }\n pointer.currentValue = value;\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, this.orientation, axis, pointer);\n if (pointer.markerType === 'Image') {\n this.mouseElement.setAttribute('x', (pointer.bounds.x - (pointer.bounds.width / 2)).toString());\n this.mouseElement.setAttribute('y', (pointer.bounds.y - (pointer.bounds.height / 2)).toString());\n }\n else {\n this.mouseElement.setAttribute('d', options.d);\n }\n }\n };\n /**\n * @private\n * @param axis\n * @param pointer\n */\n LinearGauge.prototype.barDrag = function (axis, pointer) {\n var line = axis.lineBounds;\n var range = axis.visibleRange;\n var value1;\n var value2;\n var isDrag;\n var lineHeight = (this.orientation === 'Vertical') ? line.height : line.width;\n var lineY = (this.orientation === 'Vertical') ? line.y : line.x;\n var path;\n value1 = ((valueToCoefficient(range.min, axis, this.orientation, range) * lineHeight) + lineY);\n value2 = ((valueToCoefficient(range.max, axis, this.orientation, range) * lineHeight) + lineY);\n if (this.orientation === 'Vertical') {\n isDrag = (!axis.isInversed) ? (this.mouseY > value2 && this.mouseY < value1) : (this.mouseY > value1 && this.mouseY < value2);\n if (isDrag) {\n if (this.container.type === 'Normal') {\n if (!axis.isInversed) {\n this.mouseElement.setAttribute('y', this.mouseY.toString());\n }\n this.mouseElement.setAttribute('height', Math.abs(value1 - this.mouseY).toString());\n }\n else {\n if (!axis.isInversed) {\n pointer.bounds.y = this.mouseY;\n }\n pointer.bounds.height = Math.abs(value1 - this.mouseY);\n }\n }\n }\n else {\n isDrag = (!axis.isInversed) ? (this.mouseX > value1 && this.mouseX < value2) : (this.mouseX > value2 && this.mouseX < value1);\n if (isDrag) {\n if (this.container.type === 'Normal') {\n if (axis.isInversed) {\n this.mouseElement.setAttribute('x', this.mouseX.toString());\n }\n this.mouseElement.setAttribute('width', Math.abs(value1 - this.mouseX).toString());\n }\n else {\n if (axis.isInversed) {\n pointer.bounds.x = this.mouseX;\n }\n pointer.bounds.width = Math.abs(value1 - this.mouseX);\n }\n }\n }\n if (isDrag && this.mouseElement.tagName === 'path') {\n this.triggerDragEvent(this.mouseElement);\n path = getBox(pointer.bounds, this.container.type, this.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', this.container.width, axis, pointer.roundedCornerRadius);\n this.mouseElement.setAttribute('d', path);\n }\n };\n /**\n * Triggers when drag the pointer\n * @param activeElement\n */\n LinearGauge.prototype.triggerDragEvent = function (activeElement) {\n var active = getPointer(this.mouseElement, this);\n var value = convertPixelToValue(this.element, this.mouseElement, this.orientation, active.axis, 'tooltip', null);\n var dragArgs = {\n name: 'valueChange',\n gauge: this,\n element: this.mouseElement,\n axisIndex: active.axisIndex,\n axis: active.axis,\n pointerIndex: active.pointerIndex,\n pointer: active.pointer,\n value: value\n };\n this.trigger(valueChange, dragArgs);\n };\n /**\n * To set the pointer value using this method\n * @param axisIndex\n * @param pointerIndex\n * @param value\n */\n LinearGauge.prototype.setPointerValue = function (axisIndex, pointerIndex, value) {\n var axis = this.axes[axisIndex];\n var pointer = axis.pointers[pointerIndex];\n var id = this.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer_' + pointerIndex;\n var pointerElement = getElement(id);\n pointer.currentValue = value;\n if ((pointerElement !== null) && withInRange(pointer.currentValue, null, null, axis.visibleRange.max, axis.visibleRange.min, 'pointer')) {\n this.gaugeAxisLayoutPanel['calculate' + pointer.type + 'Bounds'](axisIndex, axis, pointerIndex, pointer);\n this.axisRenderer['draw' + pointer.type + 'Pointer'](axis, axisIndex, pointer, pointerIndex, pointerElement.parentElement);\n }\n };\n /**\n * To set the annotation value using this method.\n * @param annotationIndex\n * @param content\n */\n LinearGauge.prototype.setAnnotationValue = function (annotationIndex, content) {\n var elementExist = getElement(this.element.id + '_Annotation_' + annotationIndex) === null;\n var element = getElement(this.element.id + '_AnnotationsGroup') ||\n this.createElement('div', {\n id: this.element.id + '_AnnotationsGroup'\n });\n var annotation = this.annotations[annotationIndex];\n if (content !== null) {\n if (getElement(this.element.id + '_Annotation_' + annotationIndex)) {\n getElement(this.element.id + '_Annotation_' + annotationIndex).remove();\n }\n annotation.content = content;\n this.annotationsModule.createAnnotationTemplate(element, annotationIndex);\n if (!elementExist) {\n element.appendChild(getElement(this.element.id + '_Annotation_' + annotationIndex));\n }\n }\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n LinearGauge.prototype.requiredModules = function () {\n var modules = [];\n var annotationEnable = false;\n var tooltipEnable = false;\n this.annotations.map(function (annotation, index) {\n annotationEnable = annotation.content != null;\n });\n if (annotationEnable) {\n modules.push({\n member: 'Annotations',\n args: [this, Annotations]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'Tooltip',\n args: [this, GaugeTooltip]\n });\n }\n return modules;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n LinearGauge.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Get component name\n */\n LinearGauge.prototype.getModuleName = function () {\n return 'lineargauge';\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n LinearGauge.prototype.onPropertyChanged = function (newProp, oldProp) {\n var renderer = false;\n var refreshBounds = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'height':\n case 'width':\n case 'margin':\n this.createSvg();\n refreshBounds = true;\n break;\n case 'title':\n refreshBounds = (newProp.title === '' || oldProp.title === '');\n renderer = !(newProp.title === '' || oldProp.title === '');\n break;\n case 'titleStyle':\n if (newProp.titleStyle && newProp.titleStyle.size) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'border':\n renderer = true;\n break;\n case 'background':\n renderer = true;\n break;\n case 'container':\n refreshBounds = true;\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.removeSvg();\n this.renderGaugeElements();\n this.renderAxisElements();\n }\n if (refreshBounds) {\n this.createSvg();\n this.renderGaugeElements();\n this.calculateBounds();\n this.renderAxisElements();\n }\n };\n __decorate([\n Property(null)\n ], LinearGauge.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], LinearGauge.prototype, \"height\", void 0);\n __decorate([\n Property('Vertical')\n ], LinearGauge.prototype, \"orientation\", void 0);\n __decorate([\n Complex({}, Margin)\n ], LinearGauge.prototype, \"margin\", void 0);\n __decorate([\n Complex({ color: '', width: 0 }, Border)\n ], LinearGauge.prototype, \"border\", void 0);\n __decorate([\n Property('transparent')\n ], LinearGauge.prototype, \"background\", void 0);\n __decorate([\n Property('')\n ], LinearGauge.prototype, \"title\", void 0);\n __decorate([\n Complex({ size: '15px', color: null }, Font)\n ], LinearGauge.prototype, \"titleStyle\", void 0);\n __decorate([\n Complex({}, Container)\n ], LinearGauge.prototype, \"container\", void 0);\n __decorate([\n Collection([{}], Axis)\n ], LinearGauge.prototype, \"axes\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], LinearGauge.prototype, \"tooltip\", void 0);\n __decorate([\n Collection([{}], Annotation)\n ], LinearGauge.prototype, \"annotations\", void 0);\n __decorate([\n Property([])\n ], LinearGauge.prototype, \"rangePalettes\", void 0);\n __decorate([\n Property(false)\n ], LinearGauge.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(null)\n ], LinearGauge.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], LinearGauge.prototype, \"tabIndex\", void 0);\n __decorate([\n Property('Material')\n ], LinearGauge.prototype, \"theme\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"axisLabelRender\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseMove\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseLeave\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseDown\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseUp\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"valueChange\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"resized\", void 0);\n LinearGauge = __decorate([\n NotifyPropertyChanges\n ], LinearGauge);\n return LinearGauge;\n}(Component));\nexport { LinearGauge };\n","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 } 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 = this.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 = this.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 var markerTemplateEle = createElement('div', {\n id: this.maps.element.id + '_LayerIndex_' + layerIndex + '_Markers_Template_Group',\n className: 'template',\n styles: 'overflow: hidden; position: absolute;pointer-events: none;' +\n 'top:' + (this.maps.isTileMap ? 0 : this.maps.mapAreaRect.y) + 'px;' +\n 'left:' + (this.maps.isTileMap ? 0 : this.maps.mapAreaRect.x) + 'px;' +\n 'height:' + this.maps.mapAreaRect.height + 'px;' +\n 'width:' + this.maps.mapAreaRect.width + 'px;'\n });\n currentLayer.markerSettings.map(function (markerSettings, markerIndex) {\n var markerData = markerSettings.dataSource;\n markerData.forEach(function (data, dataIndex) {\n var eventArgs = {\n cancel: false, name: markerRendering, fill: markerSettings.fill, height: markerSettings.height,\n width: markerSettings.width, imageUrl: markerSettings.imageUrl, shape: markerSettings.shape,\n template: markerSettings.template, data: data, maps: _this.maps, marker: markerSettings,\n border: markerSettings.border\n };\n _this.maps.trigger(markerRendering, eventArgs);\n var lng = data['longitude'];\n var lat = data['latitude'];\n var offset = markerSettings.offset;\n if (!eventArgs.cancel && markerSettings.visible && !isNullOrUndefined(lng) && !isNullOrUndefined(lat)) {\n var markerID = _this.maps.element.id + '_LayerIndex_' + layerIndex + '_MarkerIndex_'\n + markerIndex + '_DataIndex_' + dataIndex;\n var location_1 = (_this.maps.isTileMap) ? convertTileLatLongToPoint(new MapLocation(lng, lat), factor, _this.maps.tileTranslatePoint, true) : convertGeoToPoint(lat, lng, factor, currentLayer, _this.maps);\n var animate = currentLayer.animationDuration !== 0 || isNullOrUndefined(_this.maps.zoomModule);\n var translate = (_this.maps.isTileMap) ? new Object() : getTranslate(_this.maps, currentLayer, animate);\n var scale = translate['scale'];\n var transPoint = translate['location'];\n if (eventArgs.template) {\n templateFn = getTemplateFunction(eventArgs.template);\n if (templateFn && templateFn(_this.maps).length) {\n var templateElement = templateFn(_this.maps);\n var markerElement = convertElement(templateElement, markerID, data, markerIndex, _this.maps);\n markerElement.style.left = ((_this.maps.isTileMap ? location_1.x :\n ((Math.abs(_this.maps.baseMapRectBounds['min']['x'] - location_1.x)) * scale)) + offset.x) + 'px';\n markerElement.style.top = ((_this.maps.isTileMap ? location_1.y :\n ((Math.abs(_this.maps.baseMapRectBounds['min']['y'] - location_1.y)) * scale)) + offset.y) + 'px';\n markerTemplateEle.appendChild(markerElement);\n }\n }\n else {\n var shapeCustom = {\n size: new Size(eventArgs.width, eventArgs.height),\n fill: eventArgs.fill, borderColor: eventArgs.border.color,\n borderWidth: eventArgs.border.width, opacity: markerSettings.opacity,\n dashArray: markerSettings.dashArray\n };\n var ele = _this.drawSymbol(eventArgs.shape, eventArgs.imageUrl, { x: 0, y: 0 }, markerID, shapeCustom);\n var x = (_this.maps.isTileMap ? location_1.x : (location_1.x + transPoint.x) * scale) + offset.x;\n var y = (_this.maps.isTileMap ? location_1.y : (location_1.y + transPoint.y) * scale) + offset.y;\n ele.setAttribute('transform', 'translate( ' + x + ' ' + y + ' )');\n _this.markerSVGObject.appendChild(ele);\n var element = (markerData.length - 1) === dataIndex ? 'marker' : null;\n var markerPoint = new Point(x, y);\n if (markerSettings.animationDuration > 0) {\n elementAnimate(ele, markerSettings.animationDelay, markerSettings.animationDuration, markerPoint, _this.maps, element);\n }\n }\n }\n });\n });\n if (this.markerSVGObject.childElementCount > 0) {\n layerElement.appendChild(this.markerSVGObject);\n }\n if (markerTemplateEle.childElementCount > 0 && getElementByID(this.maps.element.id + '_Secondary_Element')) {\n getElementByID(this.maps.element.id + '_Secondary_Element').appendChild(markerTemplateEle);\n }\n };\n Marker.prototype.drawSymbol = function (shape, imageUrl, location, markerID, shapeCustom) {\n var markerEle;\n var x;\n var y;\n var size = shapeCustom['size'];\n var borderColor = shapeCustom['borderColor'];\n var borderWidth = parseFloat(shapeCustom['borderWidth']);\n var fill = shapeCustom['fill'];\n var dashArray = shapeCustom['dashArray'];\n var border = { color: borderColor, width: borderWidth };\n var opacity = shapeCustom['opacity'];\n var circleOptions;\n var pathOptions;\n var rectOptions;\n pathOptions = new PathOption(markerID, fill, borderWidth, borderColor, opacity, dashArray, '');\n if (shape === 'Circle') {\n var radius = (size.width + size.height) / 4;\n circleOptions = new CircleOption(markerID, fill, border, opacity, location.x, location.y, radius, dashArray);\n markerEle = this.maps.renderer.drawCircle(circleOptions);\n }\n else if (shape === 'Rectangle') {\n x = location.x - (size.width / 2);\n y = location.y - (size.height / 2);\n rectOptions = new RectOption(markerID, fill, border, opacity, new Rect(x, y, size.width, size.height), null, null, '', dashArray);\n markerEle = this.maps.renderer.drawRectangle(rectOptions);\n }\n else if (shape === 'Image') {\n x = location.x - (size.width / 2);\n y = location.y - (size.height / 2);\n merge(pathOptions, { 'href': imageUrl, 'height': size.height, 'width': size.width, x: x, y: y });\n markerEle = this.maps.renderer.drawImage(pathOptions);\n }\n else {\n markerEle = calculateShapes(this.maps, shape, pathOptions, size, location, this.markerSVGObject);\n }\n return markerEle;\n };\n /**\n * To check and trigger marker click event\n */\n Marker.prototype.markerClick = function (e) {\n var target = e.target.id;\n if (target.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var options = this.getMarker(target);\n if (isNullOrUndefined(options)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: markerClick, data: options.data, maps: this.maps, marker: options.marker,\n target: target, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(markerClick, eventArgs);\n };\n /**\n * To get marker from target id\n */\n Marker.prototype.getMarker = function (target) {\n var id = target.split('_LayerIndex_');\n var index = parseInt(id[1].split('_')[0], 10);\n var layer = this.maps.layers[index];\n var data;\n var marker;\n if (target.indexOf('_MarkerIndex_') > -1) {\n var markerIndex = parseInt(id[1].split('_MarkerIndex_')[1].split('_')[0], 10);\n var dataIndex = parseInt(id[1].split('_DataIndex_')[1].split('_')[0], 10);\n marker = layer.markerSettings[markerIndex];\n if (!isNaN(markerIndex)) {\n data = marker.dataSource[dataIndex];\n return { marker: marker, data: data };\n }\n }\n return null;\n };\n /**\n * To check and trigger marker move event\n */\n Marker.prototype.markerMove = function (e) {\n var targetId = e.target.id;\n if (targetId.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var options = this.getMarker(targetId);\n if (isNullOrUndefined(options)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: markerMouseMove, data: options.data, maps: this.maps,\n target: targetId, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(markerMouseMove, eventArgs);\n };\n /**\n * Get module name.\n */\n Marker.prototype.getModuleName = function () {\n return 'Marker';\n };\n /**\n * To destroy the layers.\n * @return {void}\n * @private\n */\n Marker.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return Marker;\n}());\nexport { Marker };\n","import { findMidPointOfPolygon, Rect, filter, getTemplateFunction, getTranslate, RectOption, convertElementFromLabel, Point, TextOption, renderTextElement, textTrim, measureText, Internalize } from '../utils/helper';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\n/**\n * DataLabel class\n */\nvar DataLabel = /** @class */ (function () {\n function DataLabel(maps) {\n this.intersect = [];\n this.value = { rightWidth: 0, leftWidth: 0, heightTop: 0, heightBottom: 0 };\n this.maps = maps;\n this.dataLabelCollections = [];\n }\n //tslint:disable:max-func-body-length\n DataLabel.prototype.getDataLabel = function (dataSource, labelPath, shapeName, shapeDataPath) {\n var text;\n for (var i = 0; i < dataSource.length; i++) {\n var data = dataSource[i];\n if ((data[shapeDataPath]) === shapeName) {\n text = data;\n break;\n }\n }\n return text;\n };\n DataLabel.prototype.renderLabel = function (layer, layerIndex, shape, layerData, group, labelTemplateElement, index) {\n var dataLabel = layer.dataLabelSettings;\n var style = layer.dataLabelSettings.textStyle;\n var markerEle;\n var templateFn;\n var options;\n var dataLabelSettings = layer.dataLabelSettings;\n var labelpath = layer.dataLabelSettings.labelPath;\n var shapePoint = [[]];\n var midIndex = 0;\n var pointsLength = 0;\n var shapeData = shape;\n var element;\n var data;\n var text = '';\n var datasrcObj;\n var currentLength = 0;\n var location;\n var labelId = this.maps.element.id + '_LayerIndex_' + layerIndex + '_shapeIndex_' + index + '_LabelIndex_' + index;\n var textLocation = new Point(0, 0);\n /* tslint:disable:no-string-literal */\n for (var i = 0, len = layerData.length; i < len; i++) {\n var shapes = layerData[i];\n shape = shapes['property'];\n if (!isNullOrUndefined(shapes['property']) && shapeData['properties']['name'] === shape['name']) {\n if (!layerData[i]['_isMultiPolygon']) {\n shapePoint.push(this.getPoint(layerData[i], []));\n currentLength = shapePoint[shapePoint.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoint.length - 1;\n }\n }\n else {\n var layer_1 = layerData[i];\n for (var j = 0; j < layer_1.length; j++) {\n shapePoint.push(this.getPoint(layer_1[j], []));\n currentLength = shapePoint[shapePoint.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoint.length - 1;\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(layer.dataSource) && layer.dataSource.length > 0) {\n var localData = extend([], layer.dataSource, null, true);\n datasrcObj = this.getDataLabel(localData, labelpath, shapeData['properties'][layer.shapePropertyPath], layer.shapeDataPath);\n datasrcObj[labelpath] = datasrcObj[labelpath];\n text = datasrcObj[labelpath];\n }\n else {\n text = shapeData['properties'][labelpath];\n }\n location = findMidPointOfPolygon(shapePoint[midIndex]);\n if (!isNullOrUndefined(text) && !isNullOrUndefined(location)) {\n location['y'] = (this.maps.projectionType === 'Mercator') ? location['y'] : (-location['y']);\n data = location;\n if (!isNullOrUndefined(this.maps.format) && !isNaN(parseFloat(text))) {\n text = Internalize(this.maps, parseFloat(text));\n if (!isNullOrUndefined(datasrcObj)) {\n datasrcObj[labelpath] = text;\n }\n }\n var eventargs = {\n name: 'labelRendering', maps: this.maps, cancel: false, border: dataLabel.border, datalabel: dataLabel,\n fill: dataLabel.fill, template: dataLabel.template, text: text\n };\n this.maps.trigger('labelRendering', eventargs);\n var border = { color: 'yellow' };\n var position = [];\n var width = location['rightMax']['x'] - location['leftMax']['x'];\n var textSize = measureText(text, style);\n var trimmedLable = textTrim(width, text, style);\n var elementSize = measureText(trimmedLable, style);\n var startY = location['y'] - textSize['height'] / 4;\n var endY = location['y'] + textSize['height'] / 4;\n var start = location['y'] - textSize['height'] / 4;\n var end = location['y'] + textSize['height'] / 4;\n position = filter(shapePoint[midIndex], startY, endY);\n if (position.length > 5 && (!isNullOrUndefined(shapeData['geometry']) ? shapeData['geometry']['type'] !== 'MultiPolygon' :\n shapeData['type'] !== 'MultiPolygon')) {\n var location1 = findMidPointOfPolygon(position);\n location['x'] = location1['x'];\n width = location1['rightMax']['x'] - location1['leftMax']['x'];\n }\n var xpositionEnds = location['x'] + textSize['width'] / 2;\n var xpositionStart = location['x'] - textSize['width'] / 2;\n trimmedLable = textTrim(width, text, style);\n elementSize = measureText(trimmedLable, style);\n this.value[index] = { rightWidth: xpositionEnds, leftWidth: xpositionStart, heightTop: start, heightBottom: end };\n var animate = layer.animationDuration !== 0 || isNullOrUndefined(this.maps.zoomModule);\n var translate = getTranslate(this.maps, layer, animate);\n var scale = translate['scale'];\n var transPoint = translate['location'];\n var labelElement = void 0;\n if (eventargs.template !== '') {\n templateFn = getTemplateFunction(eventargs.template);\n var templateElement = templateFn(this.maps);\n labelElement = convertElementFromLabel(templateElement, labelId, !isNullOrUndefined(datasrcObj) ? datasrcObj : shapeData['properties'], index, this.maps);\n labelElement.style.left = ((Math.abs(this.maps.baseMapRectBounds['min']['x'] - location['x'])) * scale) + 'px';\n labelElement.style.top = ((Math.abs(this.maps.baseMapRectBounds['min']['y'] - location['y'])) * scale) + 'px';\n labelTemplateElement.appendChild(labelElement);\n var labelWidth = labelElement.offsetWidth;\n var labelHeight = labelElement.offsetHeight;\n // if (labelWidth > width || labelWidth === 0 || labelHeight > location['height']) {\n // labelElement.style.display = 'None';\n // }\n }\n else {\n if (dataLabelSettings.smartLabelMode === 'Trim') {\n options = new TextOption(labelId, textLocation.x, textLocation.y, 'middle', trimmedLable, '', '');\n }\n if (dataLabelSettings.smartLabelMode === 'None') {\n options = new TextOption(labelId, (textLocation.x), textLocation.y, 'middle', text, '', '');\n }\n if (dataLabelSettings.smartLabelMode === 'Hide') {\n text = (width >= textSize['width']) ? text : '';\n options = new TextOption(labelId, (textLocation.x), (textLocation.y), 'middle', text, '', '');\n }\n text = options['text'];\n if (dataLabelSettings.intersectionAction === 'Hide') {\n for (var i = 0; i < this.intersect.length; i++) {\n if (!isNullOrUndefined(this.intersect[i])) {\n if (this.value[index]['leftWidth'] > this.intersect[i]['rightWidth']\n || this.value[index]['rightWidth'] < this.intersect[i]['leftWidth']\n || this.value[index]['heightTop'] > this.intersect[i]['heightBottom']\n || this.value[index]['heightBottom'] < this.intersect[i]['heightTop']) {\n text = text;\n }\n else {\n text = '';\n break;\n }\n }\n }\n this.intersect.push(this.value[index]);\n options = new TextOption(labelId, textLocation.x, textLocation.y, 'middle', text, '', '');\n }\n var difference = void 0;\n if (dataLabelSettings.intersectionAction === 'Trim') {\n for (var j = 0; j < this.intersect.length; j++) {\n if (!isNullOrUndefined(this.intersect[j])) {\n if (this.intersect[j]['rightWidth'] < this.value[index]['leftWidth']\n || this.intersect[j]['leftWidth'] > this.value[index]['rightWidth']\n || this.intersect[j]['heightBottom'] < this.value[index]['heightTop']\n || this.intersect[j]['heightTop'] > this.value[index]['heightBottom']) {\n trimmedLable = text;\n difference = 0;\n }\n else {\n if (this.value[index]['leftWidth'] > this.intersect[j]['leftWidth']) {\n width = this.intersect[j]['rightWidth'] - this.value[index]['leftWidth'];\n difference = width - (this.value[index]['rightWidth'] - this.value[index]['leftWidth']);\n trimmedLable = textTrim(difference, text, style);\n break;\n }\n if (this.value[index]['leftWidth'] < this.intersect[j]['leftWidth']) {\n width = this.value[index]['rightWidth'] - this.intersect[j]['leftWidth'];\n difference = Math.abs(width - (this.value[index]['rightWidth'] - this.value[index]['leftWidth']));\n trimmedLable = textTrim(difference, text, style);\n break;\n }\n }\n }\n }\n this.intersect.push(this.value[index]);\n options = new TextOption(labelId, textLocation.x, (textLocation.y), 'middle', trimmedLable, '', '');\n }\n if (dataLabelSettings.intersectionAction === 'None') {\n options = new TextOption(labelId, (textLocation.x), (textLocation.y), 'middle', text, '', '');\n }\n if (trimmedLable.length > 1) {\n var border_1 = eventargs.border;\n if (border_1['width'] > 1) {\n var fill = eventargs.fill;\n var opacity = dataLabelSettings.opacity;\n var rx = dataLabelSettings.rx;\n var ry = dataLabelSettings.ry;\n var x = location['x'] - textSize['width'] / 2;\n var y = location['y'] - textSize['height'] / 2;\n var rectOptions = new RectOption(this.maps.element.id + '_LayerIndex_' + layerIndex + '_shapeIndex_' + index + '_rectIndex_' + index, fill, border_1, opacity, new Rect(x, y, textSize['width'], textSize['height']), rx, ry);\n var rect = this.maps.renderer.drawRectangle(rectOptions);\n group.appendChild(rect);\n }\n }\n element = renderTextElement(options, style, style.color, group);\n element.setAttribute('transform', 'translate( ' + ((location['x'] + transPoint.x) * scale) + ' '\n + (((location['y'] + transPoint.y) * scale) + (elementSize.height / 4)) + ' )');\n group.appendChild(element);\n }\n this.dataLabelCollections.push({\n location: { x: location['x'], y: (location['y'] + elementSize.height / 4) },\n element: isNullOrUndefined(labelElement) ? element : labelElement,\n layerIndex: layerIndex,\n shapeIndex: index,\n labelIndex: index\n });\n if (labelTemplateElement.childElementCount > 0 && !this.maps.element.contains(labelTemplateElement)) {\n document.getElementById(this.maps.element.id + '_Secondary_Element').appendChild(labelTemplateElement);\n }\n }\n };\n DataLabel.prototype.getPoint = function (shapes, points) {\n shapes.map(function (current, index) {\n points.push(new Point(current['point']['x'], current['point']['y']));\n });\n return points;\n };\n /**\n * Get module name.\n */\n DataLabel.prototype.getModuleName = function () {\n return 'DataLabel';\n };\n /**\n * To destroy the layers.\n * @return {void}\n * @private\n */\n DataLabel.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return DataLabel;\n}());\nexport { DataLabel };\n","import { convertTileLatLongToPoint } from '../index';\nimport { convertGeoToPoint, Point, PathOption } from '../utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * navigation-selected-line\n */\nvar NavigationLine = /** @class */ (function () {\n function NavigationLine(maps) {\n this.maps = maps;\n }\n /* tslint:disable:no-string-literal */\n //tslint:disable:max-func-body-length\n NavigationLine.prototype.renderNavigation = function (layer, factor, layerIndex) {\n var navigationEle;\n var navigation;\n navigation = layer.navigationLineSettings;\n var longitude;\n var point = [];\n var latitude;\n var visible;\n var angle;\n var width;\n var color;\n var dashArray;\n var pathOption;\n var direction;\n var markerWidth;\n var arcId;\n var radius;\n var showArrow;\n var arrowColor;\n var arrowSize;\n var arrowSettings;\n var arrowPosition;\n var startArrow;\n var endArrow;\n var offSet;\n var offSetValue;\n var navigationGroup;\n var d;\n var group = (this.maps.renderer.createGroup({\n id: this.maps.element.id + '_layerIndex_' + layerIndex + '_line_Group'\n }));\n group.style.pointerEvents = 'none';\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 class\n */\nvar Legend = /** @class */ (function () {\n function Legend(maps) {\n this.legendBorderRect = new Rect(0, 0, 0, 0);\n this.totalPages = [];\n this.page = 0;\n this.currentPage = 0;\n this.interactiveLocation = new Point(0, 0);\n this.legendItemRect = new Rect(0, 0, 0, 0);\n this.heightIncrement = 0;\n this.widthIncrement = 0;\n this.textMaxWidth = 0;\n this.areaRect = new Rect(0, 0, 0, 0);\n this.maps = maps;\n this.addEventListener();\n }\n Legend.prototype.renderLegend = function () {\n this.calculateLegendBounds();\n this.drawLegend();\n };\n /* tslint:disable-next-line:max-func-body-length */\n Legend.prototype.calculateLegendBounds = function () {\n var _this = this;\n var map = this.maps;\n var legend = map.legendSettings;\n this.legendCollection = [];\n var spacing = 10;\n var leftPadding = 10;\n var topPadding = map.mapAreaRect.y;\n this.legendRenderingCollections = [];\n map.layersCollection.forEach(function (layer, layerIndex) {\n if (!isNullOrUndefined(layer.shapeData)) {\n var layerData = layer.shapeData['features'];\n var dataPath = layer.shapeDataPath;\n var propertyPath = layer.shapePropertyPath;\n var dataSource = layer.dataSource;\n var colorValuePath = void 0;\n var colorMapping = void 0;\n if (legend.type === 'Layers' && layer.visible) {\n colorValuePath = layer.shapeSettings.colorValuePath;\n colorMapping = layer.shapeSettings.colorMapping;\n _this.getLegends(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n }\n else if (legend.type === 'Bubbles') {\n for (var _i = 0, _a = layer.bubbleSettings; _i < _a.length; _i++) {\n var bubble = _a[_i];\n if (bubble.visible) {\n colorValuePath = bubble.colorValuePath;\n colorMapping = bubble.colorMapping;\n dataSource = bubble.dataSource;\n _this.getLegends(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n }\n }\n }\n else {\n _this.getMarkersLegendCollections(layerIndex, layer.markerSettings);\n }\n }\n });\n var defaultSize = 25;\n var legendTitle = map.legendSettings.title.text;\n var titleTextStyle = map.legendSettings.titleStyle;\n if (this.legendCollection.length > 0) {\n var legendMode = legend.mode;\n var shapeX = 0;\n var shapeY = 0;\n var textX = 0;\n var textY = 0;\n var shapePadding = legend.shapePadding;\n var textPadding = 10;\n var shapeHeight = legend.shapeHeight;\n var shapeWidth = legend.shapeWidth;\n var shapeLocation = [];\n var textLocation = [];\n var legendRectCollection = [];\n var location_1;\n var position = legend.position;\n var labelAction = legend.labelDisplayMode;\n var arrangement = (legend.orientation === 'None') ? ((position === 'Top' || position === 'Bottom')\n ? 'Horizontal' : 'Vertical') : legend.orientation;\n var legendWidth = (legend.width.length > 1) ? (legend.width.indexOf('%') > -1) ? (map.availableSize.width / 100)\n * parseInt(legend.width, 10) : parseInt(legend.width, 10) : null;\n var legendHeight = (legend.height.length > 1) ? (legend.height.indexOf('%') > -1) ? (map.availableSize.height / 100) *\n parseInt(legend.height, 10) : parseInt(legend.height, 10) : null;\n var legendItemStartX_1;\n var legendItemStartY_1;\n var startX = 0;\n var startY = 0;\n var legendtitleSize = measureText(legendTitle, titleTextStyle);\n if (legendMode === 'Interactive') {\n var itemTextStyle = legend.textStyle;\n var rectWidth = void 0;\n var rectHeight = void 0;\n var legendLength = this.legendCollection.length;\n rectWidth = (arrangement === 'Horizontal') ? (isNullOrUndefined(legendWidth)) ? (map.mapAreaRect.width / legendLength) :\n (legendWidth / legendLength) : (isNullOrUndefined(legendWidth)) ? defaultSize : legendWidth;\n rectHeight = (arrangement === 'Horizontal') ? (isNullOrUndefined(legendHeight)) ? defaultSize : legendHeight :\n (isNullOrUndefined(legendHeight)) ? (map.mapAreaRect.height / legendLength) : (legendHeight / legendLength);\n startX = 0;\n startY = legendtitleSize.height + spacing;\n var position_1 = legend.labelPosition;\n var textX_1 = 0;\n var textY_1 = 0;\n var textPadding_1 = 10;\n var itemStartX = 0;\n var itemStartY = 0;\n var maxTextHeight = 0;\n var maxTextWidth = 0;\n for (var i = 0; i < this.legendCollection.length; i++) {\n startX = (arrangement === 'Horizontal') ? (startX + rectWidth) : startX;\n startY = (arrangement === 'Horizontal') ? startY : (startY + rectHeight);\n var legendText = this.legendCollection[i]['text'];\n var itemTextSize = new Size(0, 0);\n if (labelAction === 'None') {\n itemTextSize = measureText(legendText, itemTextStyle);\n }\n else if (labelAction === 'Trim') {\n legendText = textTrim((arrangement === 'Horizontal' ? rectWidth : rectHeight), legendText, itemTextStyle);\n itemTextSize = measureText(legendText, itemTextStyle);\n }\n else {\n legendText = '';\n }\n maxTextHeight = Math.max(maxTextHeight, itemTextSize.height);\n maxTextWidth = Math.max(maxTextWidth, itemTextSize.width);\n if (itemTextSize.width > 0 && itemTextSize.height > 0) {\n if (arrangement === 'Horizontal') {\n textX_1 = startX + (rectWidth / 2);\n textY_1 = (position_1 === 'After') ? (startY + rectHeight + (itemTextSize.height / 2)) + textPadding_1 :\n (startY - textPadding_1);\n }\n else {\n textX_1 = (position_1 === 'After') ? startX - (itemTextSize.width / 2) - textPadding_1\n : (startX + rectWidth + itemTextSize.width / 2) + textPadding_1;\n textY_1 = startY + (rectHeight / 2) + (itemTextSize.height / 4);\n }\n }\n if (i === 0) {\n itemStartX = (arrangement === 'Horizontal') ? startX : (position_1 === 'After') ?\n textX_1 - (itemTextSize.width / 2) : startX;\n itemStartY = (arrangement === 'Horizontal') ? (position_1 === 'After') ? startY :\n textY_1 - (itemTextSize.height / 2) : startY;\n }\n else if (i === this.legendCollection.length - 1) {\n legendWidth = (arrangement === 'Horizontal') ? Math.abs((startX + rectWidth) - itemStartX) :\n (rectWidth + maxTextWidth + textPadding_1);\n legendHeight = (arrangement === 'Horizontal') ? (rectHeight + (maxTextHeight / 2) + textPadding_1) :\n Math.abs((startY + rectHeight) - itemStartY);\n }\n this.legendRenderingCollections.push({\n fill: this.legendCollection[i]['fill'], x: startX, y: startY,\n width: rectWidth, height: rectHeight,\n text: legendText, textX: textX_1, textY: textY_1,\n textWidth: itemTextSize.width, textHeight: itemTextSize.height\n });\n }\n this.legendItemRect = { x: itemStartX, y: itemStartY, width: legendWidth, height: legendHeight };\n }\n else {\n legendWidth = (isNullOrUndefined(legendWidth)) ? map.mapAreaRect.width : legendWidth;\n legendHeight = (isNullOrUndefined(legendHeight)) ? map.mapAreaRect.height : legendHeight;\n var j = 0;\n for (var i = 0; i < this.legendCollection.length; i++) {\n var legendItem = this.legendCollection[i];\n if (isNullOrUndefined(this.totalPages[this.page])) {\n this.totalPages[this.page] = { Page: (this.page + 1), Collection: [] };\n }\n var legendTextSize = measureText(legendItem['text'], legend.textStyle);\n this.textMaxWidth = Math.max(this.textMaxWidth, legendTextSize.width);\n if (i === 0) {\n startX = shapeX = (leftPadding + (shapeWidth / 2));\n startY = shapeY = topPadding + legendtitleSize.height + (shapeHeight > legendTextSize.height ? shapeHeight / 2\n : (legendTextSize.height / 4));\n }\n else {\n var maxSize = (legendTextSize.height > shapeHeight) ? legendTextSize.height : shapeHeight;\n if (arrangement === 'Horizontal') {\n var prvePositionX = (textLocation[j - 1].x + textLocation[j - 1].width) + textPadding + shapeWidth;\n if ((prvePositionX + shapePadding + legendTextSize.width) > legendWidth) {\n var nextPositionY = (textLocation[j - 1].y > (shapeLocation[j - 1].y + (shapeHeight / 2)) ?\n textLocation[j - 1].y : (shapeLocation[j - 1].y + (shapeHeight / 2))) + topPadding;\n if ((nextPositionY + maxSize) > legendHeight) {\n this.getPageChanged();\n j = 0;\n shapeLocation = [];\n textLocation = [];\n legendRectCollection = [];\n shapeX = startX;\n shapeY = startY;\n }\n else {\n shapeX = (shapeLocation[0].x);\n shapeY = (nextPositionY + (maxSize / 2));\n }\n }\n else {\n shapeX = (prvePositionX - (shapeWidth / 2));\n shapeY = (shapeLocation[j - 1]).y;\n }\n }\n else {\n var prevPositionY = textLocation[j - 1].y > shapeLocation[j - 1].y + (shapeHeight / 2) ?\n textLocation[j - 1].y : shapeLocation[j - 1].y + (shapeHeight / 2);\n if ((prevPositionY + topPadding + maxSize) > legendHeight) {\n var nextPositionX = (textLocation[j - 1].x + this.textMaxWidth + textPadding);\n if ((nextPositionX + shapePadding + legendTextSize.width) > legendWidth) {\n shapeX = startX;\n shapeY = startY;\n legendRectCollection = [];\n textLocation = [];\n shapeLocation = [];\n this.getPageChanged();\n j = 0;\n }\n else {\n shapeX = nextPositionX + (shapeWidth / 2);\n shapeY = (shapeLocation[0].y);\n }\n }\n else {\n shapeX = shapeLocation[j - 1].x;\n shapeY = prevPositionY + topPadding + (shapeHeight / 2);\n }\n }\n }\n textX = shapeX + (shapeWidth / 2) + shapePadding;\n textY = shapeY + (legendTextSize.height / 4);\n shapeLocation.push({ x: shapeX, y: shapeY });\n textLocation.push({ x: textX, y: textY, width: legendTextSize.width, height: (legendTextSize.height / 2) });\n this.totalPages[this.page]['Collection'].push({\n DisplayText: legendItem['text'],\n ImageSrc: legendItem['imageSrc'],\n Shape: { x: shapeX, y: shapeY },\n Text: { x: textX, y: textY },\n Fill: legendItem['fill'],\n Rect: {\n x: shapeLocation[j].x - (shapeWidth / 2),\n y: (shapeLocation[j].y - (shapeHeight / 2)) < (textY - legendTextSize.height) ?\n (shapeLocation[j].y - (shapeHeight / 2)) : (textY - legendTextSize.height),\n width: Math.abs((shapeLocation[j].x - (shapeWidth / 2)) - (textX + legendTextSize.width)),\n height: ((shapeHeight > legendTextSize.height) ? shapeHeight : legendTextSize.height)\n }\n });\n j++;\n }\n var collection = this.totalPages[0]['Collection'];\n collection.forEach(function (legendObj, index) {\n var legendRect = new Rect(legendObj['Rect']['x'], legendObj['Rect']['y'], legendObj['Rect']['width'], legendObj['Rect']['height']);\n if (index === 0) {\n legendItemStartX_1 = legendRect.x;\n legendItemStartY_1 = legendRect.y;\n }\n _this.widthIncrement = Math.max(_this.widthIncrement, Math.abs(legendItemStartX_1 - (legendRect.x + legendRect.width)));\n _this.heightIncrement = Math.max(_this.heightIncrement, Math.abs(legendItemStartY_1 - (legendRect.y + legendRect.height)));\n });\n legendWidth = ((this.widthIncrement < legendWidth) ? this.widthIncrement : legendWidth);\n legendHeight = ((this.heightIncrement < legendHeight) ? this.heightIncrement : legendHeight);\n this.legendItemRect = {\n x: collection[0]['Rect']['x'], y: collection[0]['Rect']['y'],\n width: legendWidth, height: legendHeight\n };\n }\n }\n };\n /**\n *\n */\n Legend.prototype.getLegends = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n this.getRangeLegendCollection(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n this.getEqualLegendCollection(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n this.getDataLegendCollection(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n };\n Legend.prototype.getPageChanged = function () {\n this.page++;\n if (isNullOrUndefined(this.totalPages[this.page])) {\n this.totalPages[this.page] = { Page: (this.page + 1), Collection: [] };\n }\n };\n Legend.prototype.drawLegend = function () {\n var map = this.maps;\n var legend = map.legendSettings;\n var render = map.renderer;\n var textOptions;\n var textFont = legend.textStyle;\n this.legendGroup = render.createGroup({ id: map.element.id + '_Legend_Group' });\n var eventArgs = {\n name: legendRendering, cancel: false, fill: '', shape: legend.shape,\n shapeBorder: legend.shapeBorder\n };\n if (legend.mode === 'Interactive') {\n for (var i = 0; i < this.legendRenderingCollections.length; i++) {\n var itemId = map.element.id + '_Legend_Index_' + i;\n var textId = map.element.id + '_Legend_Index_' + i + '_Text';\n var item = this.legendRenderingCollections[i];\n var bounds = new Rect(item['x'], item['y'], item['width'], item['height']);\n var textLocation = new Point(item['textX'], item['textY']);\n eventArgs.fill = item['fill'];\n map.trigger(legendRendering, eventArgs);\n var rectOptions = new RectOption(itemId, eventArgs.fill, eventArgs.shapeBorder, 1, bounds);\n textOptions = new TextOption(textId, textLocation.x, textLocation.y, 'middle', item['text'], '', '');\n renderTextElement(textOptions, textFont, textFont.color, this.legendGroup);\n this.legendGroup.appendChild(render.drawRectangle(rectOptions));\n }\n this.renderLegendBorder();\n }\n else {\n this.drawLegendItem(this.currentPage);\n }\n };\n Legend.prototype.drawLegendItem = function (page) {\n var map = this.maps;\n var legend = map.legendSettings;\n var spacing = 10;\n var shapeSize = new Size(legend.shapeWidth, legend.shapeHeight);\n var textOptions;\n var renderOptions;\n var render = map.renderer;\n var shapeBorder = legend.shapeBorder;\n var eventArgs = {\n name: legendRendering, cancel: false, fill: '', shape: legend.shape\n };\n if (page >= 0 && page < this.totalPages.length) {\n if (querySelector(this.legendGroup.id, this.maps.element.id)) {\n remove(querySelector(this.legendGroup.id, this.maps.element.id));\n }\n var strokeColor = (legend.shape === 'HorizontalLine' || legend.shape === 'VerticalLine'\n || legend.shape === 'Cross') ? isNullOrUndefined(legend.fill) ? '#000000' : legend.fill : shapeBorder.color;\n var strokeWidth = (legend.shape === 'HorizontalLine' || legend.shape === 'VerticalLine'\n || legend.shape === 'Cross') ? (shapeBorder.width === 0) ?\n 1 : shapeBorder.width : shapeBorder.width;\n eventArgs.shapeBorder = { width: strokeWidth, color: strokeColor };\n for (var i = 0; i < this.totalPages[page]['Collection'].length; i++) {\n var collection = this.totalPages[page]['Collection'][i];\n var legendElement = render.createGroup({ id: map.element.id + '_Legend_Index_' + i });\n var legendText = collection['DisplayText'];\n eventArgs.fill = collection['Fill'];\n eventArgs.shape = ((legend.type === 'Markers') ? ((isNullOrUndefined(collection['ImageSrc'])) ?\n legend.shape : 'Image') : legend.shape);\n map.trigger(legendRendering, eventArgs);\n var shapeId = map.element.id + '_Legend_Shape_Index_' + i;\n var textId = map.element.id + '_Legend_Text_Index_' + i;\n var shapeLocation = collection['Shape'];\n var textLocation = collection['Text'];\n var imageUrl = ((isNullOrUndefined(collection['ImageSrc'])) ? legend.shape : collection['ImageSrc']);\n var renderOptions_1 = new PathOption(shapeId, eventArgs.fill, eventArgs.shapeBorder.width, eventArgs.shapeBorder.color, 1, '');\n legendElement.appendChild(drawSymbol(shapeLocation, eventArgs.shape, shapeSize, collection['ImageSrc'], renderOptions_1));\n textOptions = new TextOption(textId, textLocation.x, textLocation.y, 'start', legendText, '', '');\n renderTextElement(textOptions, legend.textStyle, legend.textStyle.color, legendElement);\n this.legendGroup.appendChild(legendElement);\n }\n var pagingGroup = void 0;\n var width = spacing;\n var height = (spacing / 2);\n if (this.page !== 0) {\n var pagingText = (page + 1) + '/' + this.totalPages.length;\n var pagingFont = legend.textStyle;\n var pagingTextSize = measureText(pagingText, pagingFont);\n var leftPageX = (this.legendItemRect.x + this.legendItemRect.width) - pagingTextSize.width -\n (width * 2) - spacing;\n var rightPageX = (this.legendItemRect.x + this.legendItemRect.width);\n var locY = (this.legendItemRect.y + this.legendItemRect.height) + (height / 2) + spacing;\n var pageTextX = rightPageX - width - (pagingTextSize.width / 2) - (spacing / 2);\n pagingGroup = render.createGroup({ id: map.element.id + '_Legend_Paging_Group' });\n var leftPageElement = render.createGroup({ id: map.element.id + '_Legend_Left_Paging_Group' });\n var rightPageElement = render.createGroup({ id: map.element.id + '_Legend_Right_Paging_Group' });\n var rightPath = ' M ' + rightPageX + ' ' + locY + ' L ' + (rightPageX - width) + ' ' + (locY - height) +\n ' L ' + (rightPageX - width) + ' ' + (locY + height) + ' z ';\n var leftPath = ' M ' + leftPageX + ' ' + locY + ' L ' + (leftPageX + width) + ' ' + (locY - height) +\n ' L ' + (leftPageX + width) + ' ' + (locY + height) + ' z ';\n var leftPageOptions = new PathOption(map.element.id + '_Left_Page', '#a6a6a6', 0, '#a6a6a6', 1, '', leftPath);\n leftPageElement.appendChild(render.drawPath(leftPageOptions));\n var leftRectPageOptions = new RectOption(map.element.id + '_Left_Page_Rect', 'transparent', {}, 1, new Rect(leftPageX - (width / 2), (locY - (height * 2)), width * 2, spacing * 2), null, null, '', '');\n leftPageElement.appendChild(render.drawRectangle(leftRectPageOptions));\n this.wireEvents(leftPageElement);\n var rightPageOptions = new PathOption(map.element.id + '_Right_Page', '#a6a6a6', 0, '#a6a6a6', 1, '', rightPath);\n rightPageElement.appendChild(render.drawPath(rightPageOptions));\n var rightRectPageOptions = new RectOption(map.element.id + '_Right_Page_Rect', 'transparent', {}, 1, new Rect((rightPageX - width), (locY - height), width, spacing), null, null, '', '');\n rightPageElement.appendChild(render.drawRectangle(rightRectPageOptions));\n this.wireEvents(rightPageElement);\n pagingGroup.appendChild(leftPageElement);\n pagingGroup.appendChild(rightPageElement);\n var pageTextOptions = {\n 'id': map.element.id + '_Paging_Text',\n 'x': pageTextX,\n 'y': locY + (pagingTextSize.height / 4),\n 'fill': '#a6a6a6',\n 'font-size': '14px',\n 'font-style': pagingFont.fontStyle,\n 'font-family': pagingFont.fontFamily,\n 'font-weight': pagingFont.fontWeight,\n 'text-anchor': 'middle',\n 'transform': '',\n 'opacity': 1,\n 'dominant-baseline': ''\n };\n pagingGroup.appendChild(render.createText(pageTextOptions, pagingText));\n this.legendGroup.appendChild(pagingGroup);\n }\n this.renderLegendBorder();\n }\n };\n Legend.prototype.renderLegendBorder = function () {\n var map = this.maps;\n var legend = map.legendSettings;\n var legendTitle = legend.title.text;\n var textStyle = legend.titleStyle;\n var textOptions;\n var spacing = 10;\n var trimTitle = textTrim((this.legendItemRect.width + (spacing * 2)), legendTitle, textStyle);\n var textSize = measureText(trimTitle, textStyle);\n this.legendBorderRect = new Rect((this.legendItemRect.x - spacing), (this.legendItemRect.y - spacing - textSize.height), (this.legendItemRect.width) + (spacing * 2), (this.legendItemRect.height) + (spacing * 2) + textSize.height +\n (legend.mode === 'Interactive' ? 0 : (this.page !== 0) ? spacing : 0));\n if (legendTitle) {\n textOptions = new TextOption(map.element.id + '_LegendTitle', (this.legendItemRect.x) + (this.legendItemRect.width / 2), this.legendItemRect.y - (textSize.height / 2), 'middle', trimTitle, '');\n renderTextElement(textOptions, textStyle, textStyle.color, this.legendGroup);\n }\n var renderOptions = new RectOption(map.element.id + '_Legend_Border', legend.background, legend.border, 1, this.legendBorderRect, null, null, '', '');\n this.legendGroup.appendChild(map.renderer.drawRectangle(renderOptions));\n this.translate = (legend.position !== 'Float') ?\n this.getLegendAlignment(map, this.legendBorderRect.width, this.legendBorderRect.height, legend) : legend.location;\n this.legendGroup.setAttribute('transform', 'translate( ' + (this.translate.x + (-(this.legendBorderRect.x))) + ' ' +\n (this.translate.y + (-(this.legendBorderRect.y))) + ' )');\n map.svgObject.appendChild(this.legendGroup);\n };\n Legend.prototype.changeNextPage = function (e) {\n this.currentPage = (e.target.id.indexOf('_Left_Page_') > -1) ? (this.currentPage - 1) :\n (this.currentPage + 1);\n this.legendGroup = this.maps.renderer.createGroup({ id: this.maps.element.id + '_Legend_Group' });\n this.drawLegendItem(this.currentPage);\n if (querySelector(this.maps.element.id + '_Legend_Border', this.maps.element.id)) {\n querySelector(this.maps.element.id + '_Legend_Border', this.maps.element.id).style.pointerEvents = 'none';\n }\n };\n Legend.prototype.getLegendAlignment = function (map, width, height, legend) {\n var x;\n var y;\n var spacing = 10;\n var totalWidth = map.availableSize.width;\n var totalHeight = map.availableSize.height;\n switch (legend.position) {\n case 'Top':\n case 'Bottom':\n map.mapAreaRect.height = (map.mapAreaRect.height - height);\n x = (totalWidth / 2) - (width / 2);\n y = (legend.position === 'Top') ? map.mapAreaRect.y : (map.mapAreaRect.y + map.mapAreaRect.height);\n map.mapAreaRect.y = (legend.position === 'Top') ? map.mapAreaRect.y + height + spacing : map.mapAreaRect.y;\n break;\n case 'Left':\n case 'Right':\n map.mapAreaRect.width = (map.mapAreaRect.width - width);\n x = (legend.position === 'Left') ? map.mapAreaRect.x : map.mapAreaRect.x + map.mapAreaRect.width;\n y = (totalHeight / 2) - (height / 2);\n map.mapAreaRect.x = (legend.position === 'Left') ? map.mapAreaRect.x + width : map.mapAreaRect.x;\n break;\n }\n switch (legend.alignment) {\n case 'Near':\n if (legend.position === 'Top' || legend.position === 'Bottom') {\n x = map.mapAreaRect.x;\n }\n else {\n y = map.mapAreaRect.y;\n }\n break;\n case 'Far':\n if (legend.position === 'Top' || legend.position === 'Bottom') {\n x = totalWidth - width;\n }\n else {\n y = totalHeight - height;\n }\n break;\n }\n return new Point(x, y);\n };\n Legend.prototype.getMarkersLegendCollections = function (layerIndex, markers) {\n var _this = this;\n markers.forEach(function (marker, markerIndex) {\n var dataSource = marker.dataSource;\n var field = marker.legendText;\n var templateFn;\n dataSource.forEach(function (data, dataIndex) {\n var imageSrc = null;\n if (marker.visible && (!isNullOrUndefined(data['latitude'])) && (!isNullOrUndefined(data['longitude']))) {\n if (marker.template) {\n templateFn = getTemplateFunction(marker.template);\n var templateElement = templateFn(_this.maps);\n var markerEle = isNullOrUndefined(templateElement.childElementCount) ? templateElement[0] :\n templateElement;\n imageSrc = markerEle.querySelector('img').src;\n }\n var text = isNullOrUndefined(data[field]) ? '' : data[field];\n _this.legendCollection.push({\n layerIndex: layerIndex, markerIndex: markerIndex, dataIndex: dataIndex,\n fill: marker.fill, text: text, imageSrc: imageSrc\n });\n }\n });\n });\n };\n Legend.prototype.getRangeLegendCollection = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n var _this = this;\n var legendText;\n var fill = this.maps.legendSettings.fill;\n var _loop_1 = function (colorMap) {\n if (!isNullOrUndefined(colorMap.from) && !isNullOrUndefined(colorMap.to)) {\n legendText = !isNullOrUndefined(colorMap.label) ? colorMap.label : colorMap.from + ' - ' + colorMap.to;\n var rangeData_1 = [];\n var colorMapProcess_1 = false;\n dataSource.forEach(function (data, dataIndex) {\n var colorValue = parseFloat(data[colorValuePath]);\n if (colorValue >= colorMap.from && colorValue <= colorMap.to) {\n colorMapProcess_1 = true;\n rangeData_1.push(_this.getLegendData(layerIndex, dataIndex, data, dataPath, layerData, propertyPath, colorValue));\n }\n });\n if (!colorMapProcess_1) {\n rangeData_1.push({\n layerIndex: layerIndex, shapeIndex: null, dataIndex: null,\n name: null, value: null\n });\n }\n var legendFill = (isNullOrUndefined(fill)) ? colorMap.color : fill;\n this_1.getOverallLegendItemsCollection(legendText, legendFill, rangeData_1);\n }\n };\n var this_1 = this;\n for (var _i = 0, colorMapping_1 = colorMapping; _i < colorMapping_1.length; _i++) {\n var colorMap = colorMapping_1[_i];\n _loop_1(colorMap);\n }\n };\n Legend.prototype.getOverallLegendItemsCollection = function (legendText, legendFill, legendData) {\n var newColllection = [];\n if (legendData.length > 0) {\n for (var i = 0; i < legendData.length; i++) {\n var collection = legendData[i];\n if (collection.length > 0) {\n for (var j = 0; j < collection.length; j++) {\n newColllection.push(collection[j]);\n }\n }\n else {\n newColllection.push(legendData[i]);\n }\n newColllection['_isVisible'] = true;\n }\n this.legendCollection.push({ text: legendText, fill: legendFill, data: newColllection });\n }\n };\n Legend.prototype.getEqualLegendCollection = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n var _this = this;\n var fill = this.maps.legendSettings.fill;\n var legendText;\n var _loop_2 = function (colorMap) {\n if (!isNullOrUndefined(colorMap.value)) {\n legendText = !isNullOrUndefined(colorMap.label) ? colorMap.label : colorMap.value;\n var equalData_1 = [];\n var eqaulColorProcess_1 = false;\n dataSource.forEach(function (data, dataIndex) {\n var equalValue = data[colorValuePath];\n if (equalValue === colorMap.value) {\n eqaulColorProcess_1 = true;\n equalData_1.push(_this.getLegendData(layerIndex, dataIndex, data, dataPath, layerData, propertyPath, equalValue));\n }\n });\n if (!eqaulColorProcess_1) {\n equalData_1.push({\n layerIndex: layerIndex, shapeIndex: null, dataIndex: null,\n name: null, value: null\n });\n }\n var legendFill = (isNullOrUndefined(fill)) ? colorMap.color : fill;\n this_2.getOverallLegendItemsCollection(legendText, legendFill, equalData_1);\n }\n };\n var this_2 = this;\n for (var _i = 0, colorMapping_2 = colorMapping; _i < colorMapping_2.length; _i++) {\n var colorMap = colorMapping_2[_i];\n _loop_2(colorMap);\n }\n };\n Legend.prototype.getDataLegendCollection = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n var _this = this;\n var legendText;\n var fill = this.maps.legendSettings.fill;\n if (!isNullOrUndefined(colorValuePath)) {\n dataSource.forEach(function (data, dataIndex) {\n var dataValue = data[colorValuePath];\n var newData = [];\n var legendFill = (isNullOrUndefined(fill)) ? dataValue : fill;\n if (!isNullOrUndefined(dataValue) && colorMapping.length === 0) {\n legendText = data[dataPath];\n newData.push(_this.getLegendData(layerIndex, dataIndex, data, dataPath, layerData, propertyPath, dataValue));\n }\n _this.getOverallLegendItemsCollection(legendText, legendFill, newData);\n });\n }\n };\n Legend.prototype.interactiveHandler = function (e) {\n var target = e.target;\n var legend = this.maps.legendSettings;\n var id = this.maps.element.id + '_Interactive_Legend';\n var hoverId = legend.type === 'Layers' ? '_ShapeIndex_' : (legend.type === 'Markers') ? '_MarkerIndex_' :\n '_BubbleIndex_';\n if (target.id.indexOf(hoverId) > 1) {\n var layerIndex = parseFloat(target.id.split('_')[2]);\n var dataIndex = parseFloat(target.id.split('_')[6]);\n var fill = void 0;\n var stroke = void 0;\n var strokeWidth = void 0;\n if (!(isNullOrUndefined(querySelector(id, this.maps.element.id)))) {\n remove(querySelector(id, this.maps.element.id));\n }\n var layer = this.maps.layersCollection[layerIndex];\n if (legend.visible && this.legendRenderingCollections.length > 0\n && legend.mode === 'Interactive' && (legend.type === 'Layers' ? layer.visible :\n legend.type === 'Markers' ? layer.markerSettings[parseFloat(target.id.split('_')[4])].visible :\n (this.maps.getBubbleVisible(this.maps.layersCollection[layerIndex])))) {\n var svgRect = this.maps.svgObject.getBoundingClientRect();\n for (var i = 0; i < this.legendCollection.length; i++) {\n var currentData = this.legendCollection[i];\n var legendElement = querySelector(this.maps.element.id + '_Legend_Index_' + i, this.maps.element.id);\n var legendRect = legendElement.getBoundingClientRect();\n var rect = new Rect(Math.abs(legendRect.left - svgRect.left), Math.abs(legendRect.top - svgRect.top), legendRect.width, legendRect.height);\n fill = legendElement.getAttribute('fill');\n stroke = legend.shapeBorder.color;\n strokeWidth = legend.shapeBorder.width;\n if (!isNullOrUndefined(currentData['data'])) {\n var data = currentData['data'];\n for (var j = 0; j < data.length; j++) {\n if (dataIndex === data[j]['dataIndex'] && layerIndex === data[j]['layerIndex']) {\n this.renderInteractivePointer(legend, fill, stroke, id, strokeWidth, rect);\n break;\n }\n }\n }\n }\n }\n }\n else {\n if (!(isNullOrUndefined(querySelector(id, this.maps.element.id)))) {\n remove(querySelector(id, this.maps.element.id));\n }\n }\n };\n Legend.prototype.renderInteractivePointer = function (legend, fill, stroke, id, strokeWidth, rect) {\n var path;\n var pathOptions;\n var locX;\n var locY;\n var height = 10;\n var width = 10;\n var direction = (legend.orientation === 'None') ? (legend.position === 'Top' || legend.position === 'Bottom')\n ? 'Horizontal' : 'Vertical' : legend.orientation;\n if (direction === 'Horizontal') {\n if (!legend.invertedPointer) {\n locX = rect.x + (rect.width / 2);\n locY = rect.y;\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY - height) +\n ' L ' + (locX + width) + ' ' + (locY - height) + ' Z ';\n }\n else {\n locX = rect.x + (rect.width / 2);\n locY = rect.y + (rect.height);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY + height) +\n ' L ' + (locX + width) + ' ' + (locY + height) + ' Z ';\n }\n }\n else {\n if (!legend.invertedPointer) {\n locX = rect.x + (rect.width);\n locY = rect.y + (rect.height / 2);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX + width) + ' ' + (locY - height) +\n ' L ' + (locX + width) + ' ' + (locY + height) + ' z ';\n }\n else {\n locX = rect.x;\n locY = rect.y + (rect.height / 2);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY - height) +\n ' L ' + (locX - width) + ' ' + (locY + height) + ' z ';\n }\n }\n pathOptions = new PathOption(id, fill, strokeWidth, stroke, 1, '', path);\n this.maps.svgObject.appendChild(this.maps.renderer.drawPath(pathOptions));\n };\n Legend.prototype.wireEvents = function (element) {\n EventHandler.add(element, Browser.touchStartEvent, this.changeNextPage, this);\n };\n Legend.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(Browser.touchMoveEvent, this.interactiveHandler, this);\n this.maps.on(Browser.touchEndEvent, this.interactiveHandler, this);\n // this.maps.on(click, this.legendClick, this);\n };\n // private legendClick(targetEle: Element): void {\n // if (targetEle.parentElement.id.indexOf(this.maps.element.id + '_Legend_Index_') > -1) {\n // let mapElement: Element;\n // let data: object;\n // let legendIndex: number = parseFloat(targetEle.parentElement.id.substr((this.maps.element.id + '_Legend_Index_').length));\n // let selectedItem: object[] = this.legendCollection[legendIndex]['data'];\n // let childElement: Element;\n // let isVisible: boolean = selectedItem['_isVisible'];\n // if (this.maps.legendSettings.toggleVisibility) {\n // for (let i: number = 0; i < selectedItem.length; i++) {\n // data = this.legendCollection[legendIndex]['data'][i];\n // mapElement = querySelector(\n // this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex'],\n // this.maps.element.id);\n // if (isVisible) {\n // mapElement.setAttribute('opacity', '0');\n // } else {\n // mapElement.setAttribute('opacity', '1');\n // }\n // }\n // selectedItem['_isVisible'] = isVisible ? false : true;\n // } else if (this.maps.legendSettings.legendSelection && this.maps.selectionSettings.enable) {\n // this.selectShapes(targetEle, legendIndex);\n // }\n // }\n // }\n // private selectShapes(targetEle: Element, legendIndex: number): void {\n // let mapElement: Element;\n // let selectedElements: NodeListOf;\n // let selectedLength: number;\n // let childElement: HTMLElement = targetEle.parentElement.childNodes[0] as HTMLElement;\n // let legendSelected: boolean = targetEle.parentElement.id.indexOf('_Legend_Index_') &&\n // childElement.getAttribute('class') ? true : false;\n // if (!this.maps.selectionSettings.enableMultiSelect) {\n // selectedElements = querySelectorAll('selectionMapStyle', document.body);\n // selectedLength = selectedElements.length;\n // for (let i: number = 0; i < selectedLength; i++) {\n // removeClass(selectedElements[selectedElements.length - 1]);\n // }\n // if (!legendSelected) {\n // this.select(legendIndex, targetEle);\n // }\n // } else {\n // if (legendSelected) {\n // for (let data of this.legendCollection[legendIndex]['data']) {\n // mapElement = querySelector(\n // this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex'],\n // this.maps.element.id);\n // removeClass(mapElement);\n // }\n // removeClass(childElement);\n // } else {\n // this.select(legendIndex, targetEle);\n // }\n // }\n // }\n // private select(legendIndex: number, targetEle: Element): void {\n // let mapElement: Element;\n // let childElement: HTMLElement = targetEle.parentElement.childNodes[0] as HTMLElement;\n // for (let i: number = 0; i < this.legendCollection.length; i++) {\n // if (i === legendIndex && !childElement.getAttribute('class')) {\n // for (let data of this.legendCollection[i]['data']) {\n // mapElement = querySelector(\n // this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex'],\n // this.maps.element.id);\n // let eventArgs: IShapeSelectedEventArgs = {\n // cancel: false,\n // name: shapeSelected,\n // fill: this.maps.selectionSettings.fill,\n // opacity: this.maps.selectionSettings.opacity,\n // border: this.maps.selectionSettings.border\n // };\n // if (!document.getElementById('selectionMap')) {\n // document.body.appendChild(createStyle('selectionMap', 'selectionMapStyle', eventArgs));\n // }\n // mapElement.setAttribute('class', 'selectionMapStyle');\n // }\n // childElement.setAttribute('class', 'selectionMapStyle');\n // }\n // }\n // }\n Legend.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(Browser.touchMoveEvent, this.interactiveHandler);\n this.maps.off(Browser.touchEndEvent, this.interactiveHandler);\n // this.maps.off(click, this.legendClick);\n };\n Legend.prototype.getLegendData = function (layerIndex, dataIndex, data, dataPath, layerData, shapePropertyPath, value) {\n var legendData = [];\n if (Object.prototype.toString.call(layerData) === '[object Array]') {\n for (var i = 0; i < layerData.length; i++) {\n var shapeData = layerData[i];\n if (shapeData['properties'][shapePropertyPath] === data[dataPath]) {\n legendData.push({\n layerIndex: layerIndex, shapeIndex: i, dataIndex: dataIndex,\n name: data[dataPath], value: value\n });\n }\n }\n }\n return legendData;\n };\n /**\n * Get module name.\n */\n Legend.prototype.getModuleName = function () {\n return 'Legend';\n };\n /**\n * To destroy the legend.\n * @return {void}\n * @private\n */\n Legend.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return Legend;\n}());\nexport { Legend };\n","import { itemHighlight } from '../index';\nimport { Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getElementsByClassName, getElement, removeClass, createStyle, customizeStyle, getTargetElement } from '../utils/helper';\n/**\n * Highlight module class\n */\n/* tslint:disable:no-string-literal */\nvar Highlight = /** @class */ (function () {\n function Highlight(maps) {\n this.maps = maps;\n this.addEventListener();\n }\n /**\n * To bind events for highlight module\n */\n Highlight.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.maps.on(Browser.touchStartEvent, this.mouseMove, this);\n };\n /**\n * To unbind events for highlight module\n */\n Highlight.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(Browser.touchMoveEvent, this.mouseMove);\n this.maps.off(Browser.touchStartEvent, this.mouseMove);\n };\n /**\n * Public method for highlight module\n */\n Highlight.prototype.addHighlight = function (layerIndex, name, enable) {\n var targetEle = getTargetElement(layerIndex, name, enable, this.maps);\n if (enable) {\n this.mapHighlight(targetEle, null, null);\n }\n else {\n removeClass(targetEle);\n }\n };\n Highlight.prototype.mouseMove = function (e) {\n var targetEle = e.target;\n var layerIndex;\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || (e.type.indexOf('touch') > -1);\n if ((targetEle.id.indexOf('LayerIndex') !== -1 || targetEle.id.indexOf('NavigationIndex') > -1) &&\n targetEle.getAttribute('class') !== 'ShapeselectionMapStyle' && !isTouch) {\n layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n var shapeData = void 0;\n var data = void 0;\n var shapeIn = void 0;\n var dataIndex = void 0;\n if (targetEle.id.indexOf('ShapeIndex') > -1) {\n shapeIn = parseInt(targetEle.id.split('_ShapeIndex_')[1].split('_')[0], 10);\n shapeData = this.maps.layers[layerIndex].shapeData['features'] ?\n this.maps.layers[layerIndex].shapeData['features'][shapeIn]['properties'] : null;\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = isNullOrUndefined(dataIndex) ? null : this.maps.layers[layerIndex].dataSource[dataIndex];\n this.highlightSettings = this.maps.layers[layerIndex].highlightSettings;\n }\n else if (targetEle.id.indexOf('BubbleIndex') > -1) {\n var bubble = parseInt(targetEle.id.split('_BubbleIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].bubbleSettings[bubble].dataSource[dataIndex];\n this.highlightSettings = this.maps.layers[layerIndex].bubbleSettings[bubble].highlightSettings;\n }\n else if (targetEle.id.indexOf('MarkerIndex') > -1) {\n var marker = parseInt(targetEle.id.split('_MarkerIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_DataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].markerSettings[marker].dataSource[dataIndex];\n this.highlightSettings = this.maps.layers[layerIndex].markerSettings[marker].highlightSettings;\n }\n else {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n shapeData = null;\n data = {\n latitude: this.maps.layers[layerIndex].navigationLineSettings[index].latitude,\n longitude: this.maps.layers[layerIndex].navigationLineSettings[index].longitude\n };\n this.highlightSettings = this.maps.layers[layerIndex].navigationLineSettings[index].highlightSettings;\n }\n if (this.highlightSettings.enable) {\n this.mapHighlight(targetEle, shapeData, data);\n }\n else {\n var element = document.getElementsByClassName('highlightMapStyle')[0];\n if (!isNullOrUndefined(element)) {\n removeClass(element);\n if (element.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(element.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex_1 = parseInt(element.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n element.setAttribute('stroke-width', this.maps.layers[layerIndex_1].navigationLineSettings[index].width.toString());\n element.setAttribute('stroke', this.maps.layers[layerIndex_1].navigationLineSettings[index].color);\n }\n }\n }\n }\n else if (getElementsByClassName('highlightMapStyle').length > 0) {\n targetEle = getElementsByClassName('highlightMapStyle')[0];\n if (targetEle.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n layerIndex = parseInt(targetEle.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n targetEle.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n targetEle.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n removeClass(targetEle);\n }\n };\n Highlight.prototype.mapHighlight = function (targetEle, shapeData, data) {\n var eventArgs = {\n opacity: this.highlightSettings.opacity,\n fill: targetEle.id.indexOf('NavigationIndex') === -1 ? this.highlightSettings.fill : 'none',\n border: { color: this.highlightSettings.border.color, width: this.highlightSettings.border.width },\n name: itemHighlight,\n target: targetEle.id,\n cancel: false,\n shapeData: shapeData,\n data: data\n };\n this.maps.trigger(itemHighlight, eventArgs);\n this.highlightMap(targetEle, eventArgs);\n };\n Highlight.prototype.highlightMap = function (targetEle, eventArgs) {\n var parentElement;\n var children;\n if (targetEle.getAttribute('class') === 'highlightMapStyle') {\n return;\n }\n else {\n if (getElementsByClassName('highlightMapStyle').length > 0) {\n var elem = getElementsByClassName('highlightMapStyle')[0];\n removeClass(elem);\n if (elem.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(elem.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex = parseInt(elem.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n elem.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n elem.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n }\n if (!getElement('highlightMap')) {\n document.body.appendChild(createStyle('highlightMap', 'highlightMapStyle', eventArgs));\n }\n else {\n customizeStyle('highlightMap', 'highlightMapStyle', eventArgs);\n }\n targetEle.setAttribute('stroke-width', eventArgs.border.width.toString());\n targetEle.setAttribute('stroke', eventArgs.border.color);\n targetEle.setAttribute('class', 'highlightMapStyle');\n }\n };\n /**\n * Get module name.\n */\n Highlight.prototype.getModuleName = function () {\n return 'Highlight';\n };\n /**\n * To destroy the highlight.\n * @return {void}\n * @private\n */\n Highlight.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return Highlight;\n}());\nexport { Highlight };\n","import { click, itemSelection } from '../index';\nimport { getElementsByClassName, getElement, createStyle, customizeStyle, removeClass, getTargetElement } from '../utils/helper';\nimport { isNullOrUndefined, 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-popups';\nimport { setStyleAttribute, createElement, Browser, isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { getTemplateFunction, MapLocation, getElement, checkShapeDataFields, Internalize } from '../utils/helper';\n/**\n * Tooltip module class\n */\nvar MapsTooltip = /** @class */ (function () {\n function MapsTooltip(maps) {\n this.isTouch = false;\n this.touchDelay = 0;\n this.maps = maps;\n this.element = maps.element;\n this.addEventListener();\n this.ejTooltip = new Tooltip({\n opensOn: 'custom',\n position: 'TopCenter',\n beforeRender: this.onBeforeRender.bind(this),\n beforeOpen: this.tooltipCustomization.bind(this),\n openDelay: 0, closeDelay: 1,\n });\n this.ejTooltip.appendTo(this.element);\n }\n /**\n * To bind events for tooltip module\n */\n MapsTooltip.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.maps.on(Browser.touchEndEvent, this.mouseMove, this);\n };\n /**\n * To unbind events for tooltip module\n */\n MapsTooltip.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(Browser.touchMoveEvent, this.mouseMove);\n this.maps.off(Browser.touchEndEvent, this.mouseMove);\n };\n MapsTooltip.prototype.mouseMove = function (e) {\n if (this.isTouch && new Date().getTime() < this.touchDelay) {\n return;\n }\n this.setMouseXY(e);\n this.renderTooltip(e);\n };\n MapsTooltip.prototype.setMouseXY = function (e) {\n var pageX;\n var pageY;\n if (e.type.indexOf('touch') > -1) {\n this.isTouch = true;\n var touchArg = e;\n pageY = touchArg.changedTouches[0].clientY;\n pageX = touchArg.changedTouches[0].clientX;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n pageX = e.clientX;\n pageY = e.clientY;\n }\n this.mouse = new MapLocation(pageX, pageY);\n this.touchDelay = new Date().getTime() + 100;\n };\n /**\n * Method to render the tooltip for maps.\n */\n MapsTooltip.prototype.renderTooltip = function (e) {\n if (this.previousId === e.target.id) {\n this.ejTooltip.refresh(this.appendTargetElement(this.mouse, 0));\n }\n else if (this.manipulateTarget(e.target)) {\n this.shapeColor = e.target.getAttribute('fill');\n if (document.querySelector('.e-tip-content') && !this.setTooltipContent(this.options) && !this.isTouch) {\n var args = {\n type: null, cancel: false, element: this.customTooltip, event: e,\n name: 'custom', target: this.tooltipEle\n };\n this.tooltipCustomization(args);\n return;\n }\n else {\n this.closeTooltip(1);\n }\n this.ejTooltip.open(this.appendTargetElement(this.mouse));\n }\n else {\n this.closeTooltip(1);\n }\n };\n MapsTooltip.prototype.getTargetElement = function (element) {\n var hoverElements = ['_ShapeIndex_', '_MarkerIndex_', '_BubbleIndex_'];\n if (!isNullOrUndefined(element.id) && element.id.length > 0 && element.id !== this.maps.element.id) {\n for (var i = 0; i < hoverElements.length; i++) {\n if (element.id.indexOf(hoverElements[i]) > -1) {\n this.tooltipEle = element;\n break;\n }\n else if (i === hoverElements.length - 1) {\n this.getTargetElement(element.parentNode);\n }\n }\n }\n else if (element.id !== this.maps.element.id) {\n this.getTargetElement(element.parentNode);\n }\n };\n /* tslint:disable:no-string-literal */\n MapsTooltip.prototype.closeTooltip = function (delay, duration, effect) {\n if (duration === void 0) { duration = 0; }\n if (effect === void 0) { effect = 'None'; }\n this.ejTooltip.closeDelay = duration;\n this.ejTooltip.close({ delay: delay, duration: duration, effect: effect });\n this.previousId = null;\n };\n /* tslint:disable:no-string-literal */\n MapsTooltip.prototype.manipulateTarget = function (currentTarget) {\n this.tooltipEle = null;\n this.getTargetElement(currentTarget);\n if (isNullOrUndefined(this.tooltipEle)) {\n return false;\n }\n var target = this.tooltipEle.id;\n this.previousId = target;\n var index = parseFloat(target.split('_')[2]);\n var layer = this.maps.layersCollection[index];\n if (target.indexOf('_ShapeIndex_') > -1) {\n this.options = layer.tooltipSettings;\n var shape = parseInt(target.split('_')[4], 10);\n if (isNullOrUndefined(layer.shapeData['features'])) {\n return false;\n }\n var value = layer.shapeData['features'][shape]['properties'];\n index = checkShapeDataFields(layer.dataSource, value, layer.shapeDataPath, layer.shapePropertyPath);\n if (this.options.visible && ((!isNullOrUndefined(index) && !isNaN(index)) || (!isNullOrUndefined(value)))) {\n this.currentData = layer.dataSource[index] || value;\n return true;\n }\n }\n else if (target.indexOf('_MarkerIndex_') > -1) {\n var markerIndex = parseInt(target.split('_')[4], 10);\n var dataIndex = parseInt(target.split('_')[6], 10);\n var marker = layer.markerSettings[markerIndex];\n this.options = marker.tooltipSettings;\n if (!isNaN(markerIndex) && this.options.visible) {\n this.currentData = marker.dataSource[dataIndex];\n return true;\n }\n }\n else if (target.indexOf('_BubbleIndex_') > -1) {\n var bubbleIndex = parseInt(target.split('_')[4], 10);\n var dataIndex = parseInt(target.split('_')[6], 10);\n this.options = layer.bubbleSettings[bubbleIndex].tooltipSettings;\n if (!isNaN(bubbleIndex) && this.options.visible) {\n this.currentData = layer.bubbleSettings[bubbleIndex].dataSource[dataIndex];\n return true;\n }\n }\n return false;\n };\n /**\n * Method to append the target element for tooltip\n */\n MapsTooltip.prototype.appendTargetElement = function (location, padding) {\n if (padding === void 0) { padding = 10; }\n var element = getElement(this.element.id + '_MapsTooltip');\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n location.x -= svgRect.left;\n location.y -= (padding + svgRect.top);\n this.position = location;\n if (element) {\n element.style.left = location.x + 'px';\n element.style.top = location.y + 'px';\n }\n else {\n element = createElement('div', {\n id: this.element.id + '_MapsTooltip',\n styles: 'position: absolute;left:' + location.x + 'px;top:' + location.y +\n 'px;width:2px;height:2px;background:transparent;pointer-events:none;'\n });\n getElement(this.element.id + '_Secondary_Element').appendChild(element);\n }\n return element;\n };\n MapsTooltip.prototype.formatter = function (format, data) {\n if (isNullOrUndefined(format)) {\n return null;\n }\n var keys = Object.keys(data);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n format = format.split('${' + key + '}').join(data[key]);\n }\n return format;\n };\n /**\n * Method to perform the tooltip for maps.\n */\n MapsTooltip.prototype.onBeforeRender = function (args) {\n args.cancel = this.setTooltipContent(this.options);\n this.ejTooltip.dataBind();\n };\n /**\n * To get content for the current toolitp\n */\n MapsTooltip.prototype.setTooltipContent = function (options) {\n if (options === void 0) { options = this.options; }\n var localData = extend({}, this.currentData, null, true);\n if (this.maps.format && !isNaN(parseFloat(localData[options.valuePath]))) {\n localData[options.valuePath] = Internalize(this.maps, parseFloat(localData[options.valuePath]));\n }\n var content = this.formatter(options.format, localData) || localData[options.valuePath];\n content = options.template ? this.joinElements(getTemplateFunction(options.template)(localData)) : content;\n this.textStyle = extend(options.textStyle, options.textStyle, null, true);\n this.textStyle.color = this.textStyle.color || this.shapeColor;\n var argsData = {\n cancel: false, name: tooltipRender,\n content: content,\n border: options.border,\n textStyle: this.textStyle,\n fill: options.fill,\n };\n this.maps.trigger(tooltipRender, argsData);\n this.border = argsData.border;\n this.shapeColor = argsData.fill;\n this.ejTooltip.content = argsData.content;\n return argsData.cancel || (isNullOrUndefined(argsData.content) || argsData.content === '');\n };\n MapsTooltip.prototype.joinElements = function (elements) {\n var elementString = '';\n [].forEach.call(elements, function (ele) {\n elementString += ele.outerHTML;\n });\n return elementString;\n };\n /**\n * Method to customize the tooltip elements for maps.\n */\n MapsTooltip.prototype.tooltipCustomization = function (args, options) {\n if (options === void 0) { options = this.options; }\n this.customTooltip = args.element;\n if (options.template) {\n setStyleAttribute(args.element, {\n 'backgroundColor': 'transparent', 'borderColor': 'transparent',\n 'borderWidth': '1px', 'pointer-events': 'none'\n });\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': '0px', 'height': '0px'\n });\n if (this.isTouch) {\n this.closeTooltip(1, 1500, 'FadeOut');\n }\n return null;\n }\n var font = this.textStyle;\n var borderColor = this.border.color;\n var border = this.border.width;\n var pointerSize = 8;\n var arrowWidth = (pointerSize - border) + 'px';\n var outerWidth;\n var innerWidth;\n var arrowEle = args.element.querySelector('.e-arrow-tip');\n setStyleAttribute(args.element, {\n 'backgroundColor': this.shapeColor, 'borderColor': borderColor || '#212121',\n 'borderWidth': border + 'px', 'pointer-events': 'none', 'borderRadius': '5px', 'padding-left': '5px',\n 'padding-right': '5px', 'padding-top': '3px', 'padding-bottom': '3px'\n });\n setStyleAttribute(args.element.querySelector('.e-tip-content'), {\n 'color': font.color, 'fontFamily': font.fontFamily, 'fontSize': font.size,\n 'fontWeight': font.fontWeight, 'fontStyle': font.fontStyle, 'padding-left': '5px',\n 'padding-right': '5px', 'padding-top': '3px', 'padding-bottom': '3px'\n });\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': 2 * (pointerSize + border) + 'px', 'height': pointerSize + border + 'px'\n });\n if (arrowEle.classList.contains('e-tip-top')) {\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderBottomWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n color: this.shapeColor, top: '0px'\n });\n }\n else if (arrowEle.classList.contains('e-tip-bottom')) {\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderTopWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n color: this.shapeColor\n });\n }\n setStyleAttribute(args.element, {\n 'display': 'block', 'transitionProperty': 'left,top',\n 'transitionDuration': '1ms'\n });\n if (this.isTouch) {\n this.closeTooltip(1000, 1500, 'FadeOut');\n }\n };\n /**\n * Get module name.\n */\n MapsTooltip.prototype.getModuleName = function () {\n return 'MapsTooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n MapsTooltip.prototype.destroy = function (maps) {\n this.removeEventListener();\n this.ejTooltip.destroy();\n };\n return MapsTooltip;\n}());\nexport { MapsTooltip };\n","import { doubleClick } from '../../index';\nimport { Point, getElementByID, PathOption, Rect, convertGeoToPoint, CircleOption, convertTileLatLongToPoint } from '../utils/helper';\nimport { RectOption, createTooltip, calculateScale, getTouchCenter, getTouches, targetTouches } from '../utils/helper';\nimport { MapLocation, zoomAnimate, smoothTranslate } from '../utils/helper';\nimport { isNullOrUndefined, EventHandler, Browser, remove, createElement } from '@syncfusion/ej2-base';\nimport { changeBorderWidth } from '../index';\n/**\n * Zoom module class\n */\n/* tslint:disable:max-line-length */\nvar Zoom = /** @class */ (function () {\n function Zoom(maps) {\n this.isPanning = false;\n this.mouseEnter = false;\n this.isTouch = false;\n this.rectZoomingStart = false;\n this.pinchRect = new Rect(0, 0, 0, 0);\n this.browserName = Browser.info.name;\n this.isPointer = Browser.isPointer;\n this.handled = false;\n this.pinchFactor = 1;\n this.startTouches = [];\n this.maps = maps;\n this.wheelEvent = this.browserName === 'mozilla' ? (this.isPointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n this.cancelEvent = this.isPointer ? 'pointerleave' : 'mouseleave';\n this.selectionColor = this.maps.zoomSettings.selectionColor;\n this.fillColor = this.maps.zoomSettings.color;\n this.addEventListener();\n this.groupElements = [];\n }\n /* tslint:disable:no-string-literal */\n Zoom.prototype.performZooming = function (position, newZoomFactor, type) {\n var map = this.maps;\n var prevLevel = map.tileZoomLevel;\n var prevScale = map.scale;\n var maxZoom = map.zoomSettings.maxZoom;\n var minZoom = map.zoomSettings.minZoom;\n if ((!map.isTileMap) && (type === 'ZoomIn' ? newZoomFactor >= minZoom && newZoomFactor <= maxZoom : newZoomFactor >= minZoom)) {\n var availSize = map.mapAreaRect;\n var minBounds = map.baseMapRectBounds['min'];\n var maxBounds = map.baseMapRectBounds['max'];\n var mapTotalWidth = Math.abs(minBounds['x'] - maxBounds['x']);\n var mapTotalHeight = Math.abs(minBounds['y'] - maxBounds['y']);\n var point = map.translatePoint;\n var translatePointX = point.x - (((availSize.width / prevScale) - (availSize.width / newZoomFactor)) / (availSize.width / position.x));\n var translatePointY = point.y - (((availSize.height / prevScale) - (availSize.height / newZoomFactor)) / (availSize.height / position.y));\n var currentHeight = Math.abs(map.baseMapRectBounds['max']['y'] - map.baseMapRectBounds['min']['y']) * newZoomFactor;\n translatePointX = (currentHeight < map.mapAreaRect.height) ? (availSize.x + ((-(minBounds['x'])) + ((availSize.width / 2) - (mapTotalWidth / 2)))) : translatePointX;\n translatePointY = (currentHeight < map.mapAreaRect.height) ? (availSize.y + ((-(minBounds['y'])) + ((availSize.height / 2) - (mapTotalHeight / 2)))) : translatePointY;\n map.translatePoint = new Point(translatePointX, translatePointY);\n map.scale = newZoomFactor;\n }\n else if ((map.isTileMap) && (newZoomFactor >= minZoom && newZoomFactor <= maxZoom)) {\n this.getTileTranslatePosition(prevLevel, newZoomFactor, position);\n map.tileZoomLevel = newZoomFactor;\n map.scale = Math.pow(2, newZoomFactor - 1);\n map.mapLayerPanel.generateTiles(newZoomFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * map.scale)) / map.scale;\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * map.scale)) / map.scale;\n }\n this.applyTransform();\n map.trigger(doubleClick, this);\n };\n Zoom.prototype.getTileTranslatePosition = function (prevLevel, currentLevel, position) {\n var map = this.maps;\n var tileDefaultSize = 256;\n var bounds = getElementByID(this.maps.element.id).getBoundingClientRect();\n var prevSize = Math.pow(2, prevLevel) * 256;\n var totalSize = Math.pow(2, currentLevel) * 256;\n var x = ((position.x - map.tileTranslatePoint.x) / prevSize) * 100;\n var y = ((position.y - map.tileTranslatePoint.y) / prevSize) * 100;\n map.tileTranslatePoint.x = (currentLevel === 1) ? (bounds.width / 2) - ((tileDefaultSize * 2) / 2) :\n position.x - ((x * totalSize) / 100);\n map.tileTranslatePoint.y = (currentLevel === 1) ? (bounds.height / 2) - ((tileDefaultSize * 2) / 2) :\n position.y - ((y * totalSize) / 100);\n };\n Zoom.prototype.performRectZooming = function () {\n var map = this.maps;\n var size = map.availableSize;\n var prevLevel = map.tileZoomLevel;\n var zoomRect = this.zoomingRect;\n if (zoomRect.height > 0 && zoomRect.width > 0) {\n var x = this.zoomingRect.x + (this.zoomingRect.width / 2);\n var y = this.zoomingRect.y + (this.zoomingRect.height / 2);\n var zoomCalculationFactor = void 0;\n if (!map.isTileMap) {\n var scale = map.previousScale = map.scale;\n zoomCalculationFactor = scale + Math.round((((size.width / zoomRect.width) + (size.height / zoomRect.height)) / 2));\n var translatePoint = map.previousPoint = map.translatePoint;\n var translatePointX = translatePoint.x - (((size.width / scale) - (size.width / zoomCalculationFactor)) / (size.width / x));\n var translatePointY = translatePoint.y - (((size.height / scale) - (size.height / zoomCalculationFactor)) / (size.height / y));\n map.translatePoint = new Point(translatePointX, translatePointY);\n map.scale = zoomCalculationFactor;\n }\n else {\n zoomCalculationFactor = prevLevel + (Math.round(prevLevel + (((size.width / zoomRect.width) + (size.height / zoomRect.height)) / 2)));\n this.getTileTranslatePosition(prevLevel, zoomCalculationFactor, { x: x, y: y });\n map.tileZoomLevel = zoomCalculationFactor;\n map.mapLayerPanel.generateTiles(zoomCalculationFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * Math.pow(2, zoomCalculationFactor))) /\n (Math.pow(2, zoomCalculationFactor));\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * Math.pow(2, zoomCalculationFactor))) /\n (Math.pow(2, zoomCalculationFactor));\n map.scale = (Math.pow(2, zoomCalculationFactor));\n }\n this.applyTransform(true);\n this.zoomingRect = null;\n }\n };\n Zoom.prototype.setInteraction = function (newInteraction) {\n this.lastScale = 1;\n this.interaction = newInteraction;\n };\n Zoom.prototype.updateInteraction = function () {\n if (this.fingers === 2) {\n this.setInteraction('zoom');\n }\n else {\n this.setInteraction(null);\n }\n };\n Zoom.prototype.performPinchZooming = function (e) {\n var touches = null;\n var map = this.maps;\n var prevLevel = map.tileZoomLevel;\n var availSize = map.mapAreaRect;\n var scale = calculateScale(this.touchStartList, this.touchMoveList);\n var touchCenter = getTouchCenter(getTouches(this.touchMoveList, this.maps));\n var newScale = scale / this.lastScale;\n this.lastScale = scale;\n this.pinchFactor *= newScale;\n this.pinchFactor = Math.min(this.maps.zoomSettings.maxZoom, Math.max(this.pinchFactor, this.maps.zoomSettings.minZoom));\n var zoomCalculationFactor = this.pinchFactor;\n var translatePointX;\n var translatePointY;\n if (!map.isTileMap) {\n var minBounds = map.baseMapRectBounds['min'];\n var maxBounds = map.baseMapRectBounds['max'];\n var mapTotalWidth = Math.abs(minBounds['x'] - maxBounds['x']);\n var mapTotalHeight = Math.abs(minBounds['y'] - maxBounds['y']);\n var translatePoint = map.translatePoint;\n var currentHeight = Math.abs(map.baseMapRectBounds['max']['y'] - map.baseMapRectBounds['min']['y']) * zoomCalculationFactor;\n var translatePointX_1 = translatePoint.x - (((availSize.width / map.scale) - (availSize.width / zoomCalculationFactor)) / (availSize.width / touchCenter.x));\n var translatePointY_1 = translatePoint.y - (((availSize.height / map.scale) - (availSize.height / zoomCalculationFactor)) / (availSize.height / touchCenter.y));\n // translatePointX = (currentHeight < map.mapAreaRect.height) ? (availSize.x + ((-(minBounds['x'])) + ((availSize.width / 2) - (mapTotalWidth / 2)))) : translatePointX;\n //translatePointY = (currentHeight < map.mapAreaRect.height) ? (availSize.y + ((-(minBounds['y'])) + ((availSize.height / 2) - (mapTotalHeight / 2)))) : translatePointY;\n map.translatePoint = new Point(translatePointX_1, translatePointY_1);\n map.scale = zoomCalculationFactor;\n }\n else {\n var newTileFactor = zoomCalculationFactor;\n this.getTileTranslatePosition(prevLevel, newTileFactor, { x: touchCenter.x, y: touchCenter.y });\n map.tileZoomLevel = newTileFactor;\n map.mapLayerPanel.generateTiles(newTileFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * Math.pow(2, newTileFactor))) /\n (Math.pow(2, newTileFactor));\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * Math.pow(2, newTileFactor))) /\n (Math.pow(2, newTileFactor));\n map.scale = (Math.pow(2, newTileFactor));\n }\n this.applyTransform();\n };\n Zoom.prototype.drawZoomRectangle = function () {\n var map = this.maps;\n var down = this.mouseDownPoints;\n var move = this.mouseMovePoints;\n var x;\n var y;\n var width;\n var height;\n var border = { width: 1, color: '#009900' };\n width = Math.abs(move.x - down.x);\n height = Math.abs(move.y - down.y);\n x = ((move.x > down.x) ? down.x : down.x - width);\n y = ((move.y > down.y) ? down.y : down.y - height);\n var elementRect = getElementByID(map.element.id).getBoundingClientRect();\n if ((x > map.mapAreaRect.x && x < (map.mapAreaRect.x + map.mapAreaRect.width)) &&\n (y > map.mapAreaRect.y) && (y < map.mapAreaRect.y + map.mapAreaRect.height)) {\n this.zoomingRect = new Rect(x, y, width, height);\n var rectSVGObject = map.renderer.createSvg({\n id: map.element.id + '_Selection_Rect_Zooming',\n width: map.availableSize.width,\n height: map.availableSize.height,\n });\n var rectOption = new RectOption(map.element.id + '_ZoomRect', '#d3d3d3', border, 0.5, this.zoomingRect, 0, 0, '', '3');\n rectSVGObject.appendChild(map.renderer.drawRectangle(rectOption));\n getElementByID(map.element.id + '_Secondary_Element').appendChild(rectSVGObject);\n }\n };\n /**\n * To animate the zooming process\n */\n Zoom.prototype.animateTransform = function (element, animate, x, y, scale) {\n var duration = this.currentLayer.animationDuration;\n if (!animate || duration === 0) {\n element.setAttribute('transform', 'scale(' + (scale) + ') translate( ' + x + ' ' + y + ' )');\n return;\n }\n zoomAnimate(element, 0, duration, new MapLocation(x, y), scale, this.maps.mapAreaRect, this.maps);\n };\n Zoom.prototype.applyTransform = function (animate) {\n var layerIndex;\n this.templateCount = 0;\n var scale = this.maps.scale;\n var x = this.maps.translatePoint.x;\n var y = this.maps.translatePoint.y;\n var collection = [];\n if (this.layerCollectionEle) {\n for (var i = 0; i < this.layerCollectionEle.childElementCount; i++) {\n var layerElement = this.layerCollectionEle.childNodes[i];\n if (layerElement.tagName === 'g') {\n this.templateCount++;\n var index = parseFloat(layerElement.id.split('_')[2]);\n this.currentLayer = this.maps.layersCollection[index];\n var factor = this.maps.mapLayerPanel.calculateFactor(this.currentLayer);\n for (var j = 0; j < layerElement.childElementCount; j++) {\n var currentEle = layerElement.childNodes[j];\n if (!(currentEle.id.indexOf('_Markers_Group') > -1) && (!(currentEle.id.indexOf('_bubble_Group') > -1))\n && (!(currentEle.id.indexOf('_dataLableIndex_Group') > -1))) {\n if (this.maps.isTileMap && (currentEle.id.indexOf('_line_Group') > -1)) {\n currentEle.remove();\n layerElement.appendChild(this.maps.navigationLineModule.renderNavigation(this.currentLayer, this.maps.tileZoomLevel, index));\n }\n else {\n changeBorderWidth(currentEle, index, scale, this.maps);\n this.animateTransform(currentEle, animate, x, y, scale);\n }\n }\n else if (currentEle.id.indexOf('_Markers_Group') > -1) {\n for (var k = 0; k < currentEle.childElementCount; k++) {\n this.markerTranslate(currentEle.childNodes[k], factor, x, y, scale, 'Marker', animate);\n }\n }\n else if (currentEle.id.indexOf('_bubble_Group') > -1) {\n var childElement = void 0;\n for (var k = 0; k < currentEle.childElementCount; k++) {\n childElement = currentEle.childNodes[k];\n var bubbleTransform = childElement.getAttribute('transform');\n layerIndex = parseFloat(childElement.id.split('_')[2]);\n var bubleIndex = parseFloat(childElement.id.split('_')[4]);\n var dataIndex = parseFloat(childElement.id.split('_')[6]);\n for (var l = 0; l < this.maps.bubbleModule.bubbleCollection.length; l++) {\n var bubbleCollection = this.maps.bubbleModule.bubbleCollection[l];\n if (bubbleCollection['LayerIndex'] === layerIndex && bubbleCollection['BubbleIndex'] === bubleIndex &&\n bubbleCollection['DataIndex'] === dataIndex) {\n var centerX = bubbleCollection['center']['x'];\n var centerY = bubbleCollection['center']['y'];\n var currentX = ((centerX + x) * scale);\n var currentY = ((centerY + y) * scale);\n var duration = this.currentLayer.animationDuration;\n if (!animate || duration === 0) {\n childElement.setAttribute('transform', 'translate( ' + currentX + ' ' + currentY + ' )');\n }\n else {\n smoothTranslate(childElement, 0, duration, new MapLocation(currentX, currentY));\n }\n break;\n }\n }\n }\n }\n else if (currentEle.id.indexOf('_dataLableIndex_Group') > -1) {\n for (var k = 0; k < currentEle.childElementCount; k++) {\n this.dataLabelTranslate(currentEle.childNodes[k], factor, x, y, scale, 'DataLabel', animate);\n }\n }\n }\n }\n }\n if (!animate || this.currentLayer.animationDuration === 0) {\n this.processTemplate(x, y, scale, this.maps);\n }\n }\n };\n /**\n * To translate the layer template elements\n * @private\n */\n Zoom.prototype.processTemplate = function (x, y, scale, maps) {\n for (var i = 0; i < this.templateCount; i++) {\n this.currentLayer = maps.layersCollection[i];\n var factor = maps.mapLayerPanel.calculateFactor(this.currentLayer);\n var markerTemplateElement = getElementByID(maps.element.id + '_LayerIndex_' +\n i + '_Markers_Template_Group');\n var datalabelTemplateElemement = getElementByID(maps.element.id + '_LayerIndex_'\n + i + '_Label_Template_Group');\n if ((!isNullOrUndefined(markerTemplateElement)) && markerTemplateElement.childElementCount > 0) {\n for (var k = 0; k < markerTemplateElement.childElementCount; k++) {\n this.markerTranslate(markerTemplateElement.childNodes[k], factor, x, y, scale, 'Template');\n }\n }\n if ((!isNullOrUndefined(datalabelTemplateElemement)) && datalabelTemplateElemement.childElementCount > 0) {\n for (var k = 0; k < datalabelTemplateElemement.childElementCount; k++) {\n this.dataLabelTranslate(datalabelTemplateElemement.childNodes[k], factor, x, y, scale, 'Template');\n }\n }\n }\n };\n Zoom.prototype.dataLabelTranslate = function (element, factor, x, y, scale, type, animate) {\n if (animate === void 0) { animate = false; }\n var labelCollection = this.maps.dataLabelModule.dataLabelCollections;\n var layerIndex = parseFloat(element.id.split('_')[2]);\n var shapeIndex = parseFloat(element.id.split('_')[4]);\n var labelIndex = parseFloat(element.id.split('_')[6]);\n var duration = this.currentLayer.animationDuration;\n for (var l = 0; l < labelCollection.length; l++) {\n var label = labelCollection[l];\n if (label['layerIndex'] === layerIndex && label['shapeIndex'] === shapeIndex\n && label['labelIndex'] === labelIndex) {\n var labelX = label['location']['x'];\n var labelY = label['location']['y'];\n if (type === 'Template') {\n var layerEle = getElementByID(this.maps.element.id + '_Layer_Collections');\n labelX = ((Math.abs(this.maps.baseMapRectBounds['min']['x'] - labelX)) * scale);\n labelY = ((Math.abs(this.maps.baseMapRectBounds['min']['y'] - labelY)) * scale);\n var templateOffset = element.getBoundingClientRect();\n var layerOffset = layerEle.getBoundingClientRect();\n var elementOffset = element.parentElement.getBoundingClientRect();\n var x_1 = ((labelX) + (layerOffset.left - elementOffset.left) - (templateOffset.width / 2));\n var y_1 = ((labelY) + (layerOffset.top - elementOffset.top) - (templateOffset.height / 2));\n element.style.left = x_1 + 'px';\n element.style.top = y_1 + 'px';\n }\n else {\n labelX = ((labelX + x) * scale);\n labelY = ((labelY + y) * scale);\n if (!animate || duration === 0) {\n element.setAttribute('transform', 'translate( ' + labelX + ' ' + labelY + ' )');\n }\n else {\n smoothTranslate(element, 0, duration, new MapLocation(labelX, labelY));\n }\n }\n }\n }\n };\n Zoom.prototype.markerTranslate = function (element, factor, x, y, scale, type, animate) {\n if (animate === void 0) { animate = false; }\n var layerIndex = parseInt(element.id.split('_')[2], 10);\n var markerIndex = parseInt(element.id.split('_')[4], 10);\n var dataIndex = parseInt(element.id.split('_')[6], 10);\n var layer = this.maps.layersCollection[layerIndex];\n var marker = layer.markerSettings[markerIndex];\n if (!isNullOrUndefined(marker) && !isNullOrUndefined(marker.dataSource) && !isNullOrUndefined(marker.dataSource[dataIndex])) {\n var lng = marker.dataSource[dataIndex]['longitude'];\n var lat = marker.dataSource[dataIndex]['latitude'];\n var duration = this.currentLayer.animationDuration;\n var location_1 = (this.maps.isTileMap) ? convertTileLatLongToPoint(new Point(lng, lat), this.maps.tileZoomLevel, this.maps.tileTranslatePoint, true) : convertGeoToPoint(lat, lng, factor, layer, this.maps);\n if (this.maps.isTileMap) {\n if (type === 'Template') {\n var templateOffset = element.getBoundingClientRect();\n element.style.left = (location_1.x - (templateOffset.width / 2)) + 'px';\n element.style.top = (location_1.y - (templateOffset.height / 2)) + 'px';\n }\n else {\n element.setAttribute('transform', 'translate( ' + location_1.x + ' ' + location_1.y + ' )');\n }\n }\n else {\n if (type === 'Template') {\n location_1.x = ((Math.abs(this.maps.baseMapRectBounds['min']['x'] - location_1.x)) * scale);\n location_1.y = ((Math.abs(this.maps.baseMapRectBounds['min']['y'] - location_1.y)) * scale);\n var templateOffset = element.getBoundingClientRect();\n var layerOffset = getElementByID(this.maps.element.id + '_Layer_Collections').getBoundingClientRect();\n var elementOffset = element.parentElement.getBoundingClientRect();\n element.style.left = (((location_1.x) + (layerOffset.left - elementOffset.left) -\n (templateOffset.width / 2)) + marker.offset.x) + 'px';\n element.style.top = (((location_1.y) + (layerOffset.top - elementOffset.top)\n - (templateOffset.height / 2)) + marker.offset.y) + 'px';\n }\n else {\n location_1.x = (((location_1.x + x) * scale) + marker.offset.x);\n location_1.y = (((location_1.y + y) * scale) + marker.offset.y);\n if (!animate || duration === 0) {\n element.setAttribute('transform', 'translate( ' + location_1.x + ' ' + location_1.y + ' )');\n }\n else {\n smoothTranslate(element, 0, duration, location_1);\n }\n }\n }\n }\n };\n Zoom.prototype.panning = function () {\n var map = this.maps;\n var areaRect = map.mapAreaRect;\n var down = this.mouseDownPoints;\n var move = this.mouseMovePoints;\n var scale = map.scale;\n var translatePoint = map.translatePoint;\n var x;\n var y;\n var transY;\n var transX;\n if (!map.isTileMap) {\n var x_2 = translatePoint.x - (down.x - move.x) / scale;\n var y_2 = translatePoint.y - (down.y - move.y) / scale;\n var layerRect = getElementByID(map.element.id + '_Layer_Collections').getBoundingClientRect();\n var elementRect = getElementByID(map.element.id + '_svg').getBoundingClientRect();\n var panningXDirection = (((down.x - move.x) < 0 ? layerRect.left <= (elementRect.left + map.mapAreaRect.x) :\n ((layerRect.left + layerRect.width) >= (elementRect.left + elementRect.width) + map.mapAreaRect.x + map.margin.left)));\n var panningYDirection = (((down.y - move.y) < 0 ? layerRect.top <= (elementRect.top + map.mapAreaRect.y) :\n ((layerRect.top + layerRect.height) >= (elementRect.top + elementRect.height) + map.mapAreaRect.y + map.margin.top)));\n if (panningXDirection && panningYDirection) {\n map.translatePoint = new Point(x_2, y_2);\n this.applyTransform();\n }\n }\n else if (this.maps.tileZoomLevel > 1) {\n x = map.tileTranslatePoint.x - (down.x - move.x);\n y = map.tileTranslatePoint.y - (down.y - move.y);\n map.tileTranslatePoint.x = x;\n map.tileTranslatePoint.y = y;\n map.mapLayerPanel.generateTiles(map.tileZoomLevel, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (down.x - move.x)) / map.scale;\n map.translatePoint.y = (map.tileTranslatePoint.y - (down.y - move.y)) / map.scale;\n this.applyTransform();\n }\n this.mouseDownPoints = this.mouseMovePoints;\n };\n Zoom.prototype.toolBarZooming = function (zoomFactor, type) {\n var map = this.maps;\n var prevLevel = map.tileZoomLevel;\n var scale = map.previousScale = map.scale;\n var maxZoom = map.zoomSettings.maxZoom;\n var minZoom = map.zoomSettings.minZoom;\n var size = map.mapAreaRect;\n zoomFactor = (type === 'ZoomOut') ? (Math.round(zoomFactor) === 1 ? 1 : zoomFactor) : zoomFactor;\n if ((!map.isTileMap) && (type === 'ZoomIn' ? zoomFactor >= minZoom && zoomFactor <= maxZoom : zoomFactor >= minZoom)) {\n var translatePoint = map.previousPoint = map.translatePoint;\n var min = map.baseMapRectBounds['min'];\n var max = map.baseMapRectBounds['max'];\n var mapWidth = Math.abs(max['x'] - min['x']);\n var mapHeight = Math.abs(min['y'] - max['y']);\n var translatePointX = translatePoint.x - (((size.width / scale) - (size.width / zoomFactor)) / 2);\n var translatePointY = translatePoint.y - (((size.height / scale) - (size.height / zoomFactor)) / 2);\n var currentHeight = Math.abs(map.baseMapRectBounds['max']['y'] - map.baseMapRectBounds['min']['y']) * zoomFactor;\n translatePointX = (currentHeight < map.mapAreaRect.height) ? (size.x + ((-(min['x'])) + ((size.width / 2) - (mapWidth / 2))))\n : translatePointX;\n translatePointY = (currentHeight < map.mapAreaRect.height) ? (size.y + ((-(min['y'])) + ((size.height / 2) - (mapHeight / 2))))\n : translatePointY;\n map.translatePoint = new Point(translatePointX, translatePointY);\n map.scale = zoomFactor;\n }\n else if ((map.isTileMap) && (zoomFactor >= minZoom && zoomFactor <= maxZoom)) {\n var tileZoomFactor = zoomFactor;\n map.scale = Math.pow(2, tileZoomFactor - 1);\n map.tileZoomLevel = tileZoomFactor;\n var position = { x: map.availableSize.width / 2, y: map.availableSize.height / 2 };\n this.getTileTranslatePosition(prevLevel, tileZoomFactor, position);\n map.mapLayerPanel.generateTiles(tileZoomFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * map.scale)) / map.scale;\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * map.scale)) / map.scale;\n }\n this.applyTransform(true);\n };\n /* tslint:disable:max-func-body-length */\n Zoom.prototype.createZoomingToolbars = function () {\n var map = this.maps;\n this.toolBarGroup = map.renderer.createGroup({\n id: map.element.id + '_Zooming_KitCollection',\n opacity: 0.3,\n });\n var kitHeight = 16;\n var kitWidth = 16;\n var xSpacing = 15;\n var ySpacing = 15;\n var padding = 20;\n var orientation = map.zoomSettings.toolBarOrientation;\n var toolbarsCollection = map.zoomSettings.toolbars;\n var shadowElement = '';\n shadowElement += '';\n shadowElement += '';\n var toolBarLength = map.zoomSettings.toolbars.length;\n var toolWidth = (map.zoomSettings.toolBarOrientation === 'Horizontal') ? (toolBarLength * kitWidth) + (toolBarLength * padding) : (kitWidth * 2);\n var toolHeight = (map.zoomSettings.toolBarOrientation === 'Horizontal') ? (kitHeight * 2) : (toolBarLength * kitHeight) + (toolBarLength * padding);\n this.toolBarGroup.appendChild(map.renderer.drawRectangle(new RectOption(map.element.id + '_Zooming_Rect', 'transparent', { color: 'transparent', width: 1 }, 1, new Rect(0, 0, toolWidth, toolHeight), 0, 0)));\n var defElement = map.renderer.createDefs();\n defElement.innerHTML = shadowElement;\n this.toolBarGroup.appendChild(defElement);\n var outerElement = map.renderer.drawRectangle(new RectOption(map.element.id + '_Zooming_Rect', 'transparent', { color: 'transparent', width: 1 }, 0.1, new Rect(0, 0, toolWidth, toolHeight), 0, 0));\n outerElement.setAttribute('filter', 'url(#chart_shadow)');\n this.toolBarGroup.appendChild(outerElement);\n var performFunction;\n for (var i = 0; i < toolbarsCollection.length; i++) {\n var toolbar_1 = toolbarsCollection[i];\n var pathOptions = void 0;\n var polyOptions = void 0;\n this.currentToolbarEle = map.renderer.createGroup({\n id: map.element.id + '_Zooming_ToolBar_' + toolbar_1 + '_Group',\n transform: 'translate( ' + xSpacing + ' ' + ySpacing + ' ) '\n });\n this.currentToolbarEle.setAttribute('class', 'e-maps-toolbar');\n var fillColor = '';\n var direction = '';\n var polygonDirection = '';\n switch (toolbar_1.toLowerCase()) {\n case 'zoom':\n direction = 'M0.001,14.629L1.372,16l4.571-4.571v-0.685l0.228-0.274c1.051,0.868,2.423,1.417,3.885,1.417c3.291,0,';\n direction += '5.943-2.651,5.943-5.943S13.395,0,10.103,0S4.16,2.651,4.16,5.943c0,1.508,0.503,2.834,1.417,3.885l-0.274,0.228H4.571';\n direction = direction + 'L0.001,14.629L0.001,14.629z M5.943,5.943c0-2.285,1.828-4.114,4.114-4.114s4.114,1.828,4.114,';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.fillColor, 1, this.fillColor, 1, null, direction + '4.114s-1.828,4.114-4.114,4.114S5.943,8.229,5.943,5.943z')));\n this.zoomElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'zoomin':\n direction = 'M 8, 0 L 8, 16 M 0, 8 L 16, 8';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1 + '_Path', this.fillColor, 3, this.fillColor, 1, null, direction)));\n this.zoomInElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'zoomout':\n direction = 'M 0, 8 L 16, 8';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.fillColor, 3, this.fillColor, 1, null, direction)));\n this.zoomOutElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'pan':\n direction = 'M5,3h2.3L7.275,5.875h1.4L8.65,3H11L8,0L5,3z M3,11V8.7l2.875,0.025v-1.4L3,7.35V5L0,8L3,';\n direction += '11z M11,13H8.7l0.025-2.875h-1.4L7.35,13H5l3,3L11,13z M13,5v2.3l-2.875-0.025v1.4L13,8.65V11l3-3L13,5z';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.selectionColor, 1, this.selectionColor, 1, null, direction)));\n this.panColor = this.selectionColor;\n this.panElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'reset':\n direction = 'M12.364,8h-2.182l2.909,3.25L16,8h-2.182c0-3.575-2.618-6.5-5.818-6.5c-1.128,0-2.218,0.366-3.091,';\n direction += '1.016l1.055,1.178C6.581,3.328,7.272,3.125,8,3.125C10.4,3.125,12.363,5.319,12.364,8L12.364,8z M11.091,';\n direction += '13.484l-1.055-1.178C9.419,12.672,8.728,12.875,8,12.875c-2.4,0-4.364-2.194-4.364-4.875h2.182L2.909,4.75L0,8h2.182c0,';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.fillColor, null, null, 1, null, direction + '3.575,2.618,6.5,5.818,6.5C9.128,14.5,10.219,14.134,11.091,13.484L11.091,13.484z')));\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n }\n this.currentToolbarEle.appendChild(map.renderer.drawCircle(new CircleOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1 + '_Rect', 'transparent', { color: this.fillColor, width: 1 }, 1, 8, 8, 16, '')));\n xSpacing = (orientation === 'Horizontal') ? (xSpacing + (kitWidth + padding)) : xSpacing;\n ySpacing = (orientation === 'Horizontal') ? ySpacing : (ySpacing + (kitHeight + padding));\n this.toolBarGroup.appendChild(this.currentToolbarEle);\n }\n };\n Zoom.prototype.performToolBarAction = function (e) {\n var target = e.target;\n e.stopImmediatePropagation();\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || (e.type.indexOf('touch') > -1);\n var toolbar = target.id.split('_')[3];\n if (isTouch) {\n this.handled = true;\n this.performZoomingByToolBar(toolbar);\n }\n else if ((e.type === 'mousedown' || e.type === 'pointerdown') && !this.handled) {\n this.handled = false;\n this.performZoomingByToolBar(toolbar);\n }\n else {\n this.handled = false;\n }\n };\n /**\n *\n * @private\n */\n Zoom.prototype.performZoomingByToolBar = function (type) {\n var map = this.maps;\n switch (type.toLowerCase()) {\n case 'zoom':\n this.panColor = this.fillColor;\n this.zoomColor = this.selectionColor;\n this.applySelection(this.zoomElements, this.selectionColor);\n this.applySelection(this.panElements, this.fillColor);\n break;\n case 'pan':\n this.panColor = this.selectionColor;\n this.zoomColor = this.fillColor;\n this.applySelection(this.zoomElements, this.fillColor);\n this.applySelection(this.panElements, this.selectionColor);\n break;\n case 'zoomin':\n this.toolBarZooming((map.isTileMap ? map.tileZoomLevel : map.scale) + 1, 'ZoomIn');\n break;\n case 'zoomout':\n this.toolBarZooming((map.isTileMap ? map.tileZoomLevel : map.scale) - 1, 'ZoomOut');\n break;\n case 'reset':\n this.toolBarZooming(1, 'ZoomOut');\n this.applySelection(this.zoomElements, this.fillColor);\n this.applySelection(this.panElements, this.selectionColor);\n }\n this.panningStyle(type.toLowerCase());\n };\n Zoom.prototype.panningStyle = function (toolbar) {\n var svg = getElementByID(this.maps.element.id + '_svg');\n if (toolbar === 'pan' || this.isPanning) {\n svg.setAttribute('class', 'e-maps-panning');\n }\n else {\n svg.setAttribute('class', '');\n }\n };\n Zoom.prototype.applySelection = function (elements, color) {\n if (!elements) {\n return;\n }\n var childElement;\n for (var i = 0; i < elements.childElementCount; i++) {\n childElement = elements.childNodes[i];\n if (childElement.tagName !== 'circle') {\n childElement.setAttribute('fill', color);\n childElement.setAttribute('stroke', color);\n }\n }\n };\n Zoom.prototype.showTooltip = function (e) {\n var text = e.target.id.split('_')[3];\n if (!this.isTouch) {\n createTooltip('EJ2_Map_Toolbar_Tip', this.maps.getLocalizedLabel(text), (e.pageY + 10), (e.pageX + 10), '10px');\n }\n };\n Zoom.prototype.removeTooltip = function () {\n if (getElementByID('EJ2_Map_Toolbar_Tip')) {\n remove(getElementByID('EJ2_Map_Toolbar_Tip'));\n }\n };\n Zoom.prototype.alignToolBar = function () {\n var map = this.maps;\n var padding = 10;\n var element = createElement('div', { id: map.element.id + '_ToolBar', styles: 'position:absolute;z-index:2' });\n var rectSVGObject = map.renderer.createSvg({\n id: map.element.id + '_Zooming_ToolBar', width: 10, height: 10,\n });\n rectSVGObject.appendChild(this.toolBarGroup);\n element.appendChild(rectSVGObject);\n if (getElementByID(map.element.id + '_Secondary_Element')) {\n getElementByID(map.element.id + '_Secondary_Element').appendChild(element);\n }\n var toolBarSize = this.toolBarGroup.getBoundingClientRect();\n rectSVGObject.setAttribute('height', (toolBarSize.height + padding / 2).toString());\n rectSVGObject.setAttribute('width', (toolBarSize.width + padding / 2).toString());\n var size = map.mapAreaRect;\n var x = 0;\n var y = 0;\n switch (map.zoomSettings.verticalAlignment) {\n case 'Near':\n y = size.y;\n break;\n case 'Center':\n y = (size.height / 2) - (toolBarSize.height / 2);\n break;\n case 'Far':\n y = (size.height - toolBarSize.height) - padding;\n break;\n }\n switch (map.zoomSettings.horizontalAlignment) {\n case 'Near':\n x = size.x;\n break;\n case 'Center':\n x = (size.width / 2) - (toolBarSize.width / 2);\n break;\n case 'Far':\n x = (size.width - toolBarSize.width) - padding;\n break;\n }\n element.style.left = x + 'px';\n element.style.top = y + 'px';\n var color = this.maps.zoomSettings.highlightColor;\n var css = ' .e-maps-toolbar:hover > circle { stroke:' + color + '; } .e-maps-toolbar:hover > path { fill: ' + color + ' ; stroke: ' + color + '; }';\n var style = document.createElement('style');\n style.appendChild(document.createTextNode(css));\n element.appendChild(style);\n };\n /**\n * To bind events.\n * @return {void}\n * @private\n */\n Zoom.prototype.wireEvents = function (element, process) {\n EventHandler.add(element, Browser.touchStartEvent, process, this);\n EventHandler.add(element, 'mouseover', this.showTooltip, this);\n EventHandler.add(element, 'mouseout', this.removeTooltip, this);\n };\n Zoom.prototype.mapMouseWheel = function (e) {\n if (this.maps.zoomSettings.enable && this.maps.zoomSettings.mouseWheelZoom) {\n var position = this.getMousePosition(e.pageX, e.pageY);\n var map = this.maps;\n var size = map.availableSize;\n var prevLevel = map.tileZoomLevel;\n var prevScale = map.scale;\n var delta = 1;\n var value = (map.isTileMap) ? prevLevel : prevScale;\n if (((position.x > map.mapAreaRect.x) && (position.x < (map.mapAreaRect.x + map.mapAreaRect.width))) &&\n (position.y > map.mapAreaRect.y) && position.y < (map.mapAreaRect.y + map.mapAreaRect.height)) {\n e.preventDefault();\n var direction = (this.browserName === 'mozilla' && !this.isPointer) ?\n -(e.detail) / 3 > 0 ? 'ZoomIn' : 'ZoomOut' : (e.wheelDelta / 120) > 0 ? 'ZoomIn' : 'ZoomOut';\n if (direction === 'ZoomIn') {\n this.performZooming(position, (value + delta), direction);\n }\n else {\n this.performZooming(position, (value - delta), direction);\n }\n }\n }\n };\n Zoom.prototype.doubleClick = function (e) {\n var pageX = e.pageX;\n var pageY = e.pageY;\n var target = e.target;\n if (this.maps.zoomSettings.enable && this.maps.zoomSettings.doubleClickZoom) {\n var position = this.getMousePosition(pageX, pageY);\n var map = this.maps;\n var size = map.availableSize;\n var prevLevel = map.tileZoomLevel;\n var prevScale = map.scale;\n var value = (map.isTileMap) ? prevLevel : prevScale;\n if (((position.x > map.mapAreaRect.x) && (position.x < (map.mapAreaRect.x + map.mapAreaRect.width))) &&\n (position.y > map.mapAreaRect.y) && position.y < (map.mapAreaRect.y + map.mapAreaRect.height)) {\n this.performZooming(position, (value + 1), 'ZoomIn');\n }\n }\n };\n Zoom.prototype.mouseDownHandler = function (e) {\n var pageX;\n var pageY;\n var target;\n var touches = null;\n var element = e.target;\n if (e.type === 'touchstart') {\n this.isTouch = true;\n touches = e.touches;\n target = e.target;\n pageX = touches[0].clientX;\n pageY = touches[0].clientY;\n }\n else {\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n this.isPanning = this.panColor === this.selectionColor ? true : this.zoomColor !== this.selectionColor;\n this.rectZoomingStart = ((!this.isPanning) && this.maps.zoomSettings.enable);\n this.mouseDownPoints = this.getMousePosition(pageX, pageY);\n if (this.isTouch) {\n this.firstMove = true;\n this.pinchFactor = this.maps.scale;\n this.fingers = touches.length;\n }\n };\n Zoom.prototype.mouseMoveHandler = function (e) {\n var pageX;\n var pageY;\n var map = this.maps;\n var touchArg;\n var target;\n var touches = null;\n var zoom = this.maps.zoomSettings;\n if (e.type === 'touchmove') {\n this.isTouch = true;\n target = e.target;\n touches = e.touches;\n pageX = touches[0].clientX;\n pageY = touches[0].clientY;\n }\n else {\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n if (getElementByID(map.element.id + '_Zooming_KitCollection')) {\n if (target.id.indexOf('_Zooming_') > -1) {\n getElementByID(map.element.id + '_Zooming_KitCollection').setAttribute('opacity', '1');\n }\n else {\n getElementByID(map.element.id + '_Zooming_KitCollection').setAttribute('opacity', '0.3');\n }\n }\n if (this.isTouch) {\n if (this.maps.zoomSettings.pinchZooming) {\n if (this.firstMove && touches.length === 2) {\n this.rectZoomingStart = false;\n this.updateInteraction();\n this.touchStartList = targetTouches(e);\n }\n else if (this.touchStartList.length === 2 && touches.length === 2) {\n this.touchMoveList = targetTouches(e);\n e.preventDefault();\n this.rectZoomingStart = false;\n this.performPinchZooming(e);\n }\n this.firstMove = false;\n }\n }\n this.mouseMovePoints = this.getMousePosition(pageX, pageY);\n var targetId = e.target['id'];\n var targetEle = e.target;\n if (zoom.enable && this.isPanning) {\n e.preventDefault();\n this.maps.element.style.cursor = 'pointer';\n this.panning();\n }\n if (this.isTouch ? (touches.length === 1 && this.rectZoomingStart) : this.rectZoomingStart) {\n e.preventDefault();\n this.drawZoomRectangle();\n }\n };\n Zoom.prototype.mouseUpHandler = function (e) {\n var map = this.maps;\n this.rectZoomingStart = false;\n this.isPanning = false;\n this.isTouch = false;\n this.touchStartList = [];\n this.touchMoveList = [];\n this.lastScale = 1;\n this.maps.element.style.cursor = 'auto';\n var zoomRectElement = getElementByID(this.maps.element.id + '_Selection_Rect_Zooming');\n if (zoomRectElement && this.maps.zoomSettings.enable) {\n remove(zoomRectElement);\n this.performRectZooming();\n }\n };\n Zoom.prototype.mouseCancelHandler = function (e) {\n this.isPanning = false;\n this.isTouch = false;\n this.rectZoomingStart = false;\n var zoomRectElement = getElementByID(this.maps.element.id + '_Selection_Rect_Zooming');\n if (zoomRectElement && this.maps.zoomSettings.enable) {\n remove(zoomRectElement);\n this.performRectZooming();\n }\n };\n Zoom.prototype.click = function (e) {\n var map = this.maps;\n if (map.zoomSettings.zoomOnClick && e.target.id.indexOf('_ShapeIndex_') > -1 && !map.zoomSettings.doubleClickZoom\n && (this.zoomColor === this.selectionColor && this.zoomElements)) {\n var bounds = e.target.getBBox();\n var boundwidth = bounds.width;\n var boundHeight = bounds.height;\n var layerScale = void 0;\n var baseScale = 1;\n var availWidth = map.availableSize.width;\n var availHeight = map.availableSize.height;\n layerScale = ((availWidth - 100) / (availHeight - 100) > boundwidth / boundHeight) ? (availHeight - 100) / boundHeight :\n (availWidth - 100) / boundwidth;\n var zoomFactor = (layerScale - baseScale + 1);\n var leftPos = ((availWidth / 2) - ((boundwidth * map.scale) / 2)) / layerScale;\n var topPos = ((availHeight / 2) - ((boundHeight * map.scale) / 2)) / layerScale;\n var translatePointX = (-bounds.x) + leftPos;\n var translatePointY = (-bounds.y) + topPos;\n map.previousScale = map.scale;\n map.previousPoint = map.translatePoint;\n map.scale = layerScale;\n map.translatePoint = { x: translatePointX, y: translatePointY };\n this.applyTransform(true);\n }\n };\n Zoom.prototype.getMousePosition = function (pageX, pageY) {\n var map = this.maps;\n var elementRect = map.element.getBoundingClientRect();\n var pageXOffset = map.element.ownerDocument.defaultView.pageXOffset;\n var pageYOffset = map.element.ownerDocument.defaultView.pageYOffset;\n var clientTop = map.element.ownerDocument.documentElement.clientTop;\n var clientLeft = map.element.ownerDocument.documentElement.clientLeft;\n var positionX = elementRect.left + pageXOffset - clientLeft;\n var positionY = elementRect.top + pageYOffset - clientTop;\n return new Point((pageX - positionX), (pageY - positionY));\n };\n Zoom.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n EventHandler.add(this.maps.element, this.wheelEvent, this.mapMouseWheel, this);\n EventHandler.add(this.maps.element, 'click', this.click, this);\n EventHandler.add(this.maps.element, 'dblclick', this.doubleClick, this);\n this.maps.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.maps.on(Browser.touchStartEvent, this.mouseDownHandler, this);\n this.maps.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n EventHandler.add(this.maps.element, this.cancelEvent, this.mouseCancelHandler, this);\n };\n Zoom.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n EventHandler.remove(this.maps.element, this.wheelEvent, this.mapMouseWheel);\n EventHandler.remove(this.maps.element, 'click', this.click);\n EventHandler.remove(this.maps.element, 'dblclick', this.doubleClick);\n this.maps.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n this.maps.off(Browser.touchStartEvent, this.mouseDownHandler);\n this.maps.off(Browser.touchEndEvent, this.mouseUpHandler);\n this.maps.off(this.cancelEvent, this.mouseCancelHandler);\n };\n /**\n * Get module name.\n */\n Zoom.prototype.getModuleName = function () {\n return 'Zoom';\n };\n /**\n * To destroy the zoom.\n * @return {void}\n * @private\n */\n Zoom.prototype.destroy = function (maps) {\n this.removeEventListener();\n /**\n * Destroy method performed here\n */\n };\n return Zoom;\n}());\nexport { Zoom };\n","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 screen.\n * @param {ToastModel} toastObj?\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.length === 0 ? 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 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) || this.title.length === 0) {\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 if (isNOU(this.content) || this.content.length === 0) {\n return;\n }\n var contentEle = this.createElement('div', { className: CONTENT });\n contentEle = this.fetchEle(contentEle, this.content, 'content');\n this.appendMessageContainer(contentEle);\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 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 function PivotEngine(dataSource, mode, savedFieldList) {\n /** @hidden */\n this.formatFields = {};\n /** @hidden */\n this.calculatedFields = {};\n /** @hidden */\n this.calculatedFormulas = {};\n this.valueMatrix = [];\n this.indexMatrix = [];\n var fields;\n var val;\n var filterRw;\n this.globalize = new Internationalization();\n this.enableSort = true;\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.drilledMembers = dataSource.drilledMembers ? dataSource.drilledMembers : [];\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.isExpandAll = dataSource.expandAll;\n this.isMutiMeasures = this.values.length > 1 ? true : false;\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);\n this.fillFieldMembers(dataSource.data, this.indexMatrix);\n this.updateSortSettings(dataSource.sortSettings, this.enableSort);\n this.pageSettings = dataSource.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.sortByValue = function (valueSort, sortOrder, columnIndex) {\n var sort = false;\n var vlen = valueSort.length;\n for (var j = 0; j < vlen; j++) {\n for (var k = j; k < vlen; k++) {\n if (sortOrder === 'Descending') {\n sort = valueSort[j].rowData[columnIndex].value < valueSort[k].rowData[columnIndex].value;\n }\n else {\n sort = valueSort[j].rowData[columnIndex].value > valueSort[k].rowData[columnIndex].value;\n }\n if (sort) {\n var temp = {};\n temp = valueSort[j];\n valueSort[j] = valueSort[k];\n valueSort[k] = temp;\n }\n }\n if (valueSort[j].childMembers.length > 0) {\n this.sortByValue(valueSort[j].childMembers, sortOrder, columnIndex);\n }\n }\n };\n PivotEngine.prototype.iterateValueSortData = function (valueSort, data) {\n var vlen = valueSort.length;\n for (var j = 0; j < vlen; j++) {\n data[data.length] = (valueSort[j].rowData);\n if (valueSort[j].childMembers.length > 0) {\n this.iterateValueSortData(valueSort[j].childMembers, data);\n }\n }\n };\n PivotEngine.prototype.getFormattedFields = function (fields) {\n var cnt = this.formats.length;\n while (cnt--) {\n for (var len = 0, lnt = 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) {\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 }\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.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.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 //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 members[mkey] = {\n index: [dl], ordinal: Object.keys(members).length,\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 formattedMembers[fKey] = {\n index: [dl], ordinal: Object.keys(formattedMembers).length,\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 filter = filterElements[rln] ? filterElements[rln].items : [];\n if (this.fieldList[filterElements[rln].name].isSelected) {\n if (filter.length && filterElements[rln].type && filterElements[rln].type === 'include') {\n this.frameFilterList(filter, filterElements[rln].name, ilist, 'include', isInclude);\n isInclude = true;\n }\n else {\n this.frameFilterList(filter, filterElements[rln].name, ilist, 'exclude');\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.frameFilterList = function (filter, name, list, type, 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 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 /** @hidden */\n PivotEngine.prototype.applyValueSorting = function () {\n var valueSortOrder = this.valueSortSettings.sortOrder;\n if (valueSortOrder !== 'None' && this.valueSortSettings.columnIndex) {\n this.sortByValue(this.valueSortData, valueSortOrder, this.valueSortSettings.columnIndex);\n var valueSortData = [];\n var len = this.values.length > 1 ? this.columns.length :\n this.columns.length === 0 ? 0 : this.columns.length - 1;\n for (var i = 0; i <= len; i++) {\n valueSortData[valueSortData.length] = this.pivotValues[i];\n }\n this.iterateValueSortData(this.valueSortData, valueSortData);\n valueSortData[valueSortData.length] = this.pivotValues[this.pivotValues.length - 1];\n this.pivotValues = valueSortData;\n }\n };\n /** @hidden */\n PivotEngine.prototype.generateGridData = function (dataSource) {\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 paging = this.pageSettings;\n var size = 1;\n //let childrens: Field = this.fieldList[rows[0].name + ''];\n var rmembers;\n var cmembers;\n this.valueSortSettings.columnIndex = undefined;\n var st1 = new Date().getTime();\n rmembers = rows.length !== 0 ? this.getIndexedHeaders(rows, data, 0, this.filterMembers, 'row', '') : [];\n cmembers = columns.length !== 0 ? this.getIndexedHeaders(columns, data, 0, this.filterMembers, 'column', '') : [];\n /* If Paging enabled */\n if (paging !== undefined && paging.rowCurrentPage !== undefined && paging.rowSize !== undefined) {\n size = (paging.rowCurrentPage * paging.rowSize) - paging.rowSize;\n rmembers = rmembers.splice(paging.rowCurrentPage > 1 ? size : 0, paging.rowSize);\n }\n if (paging !== undefined && paging.columnCurrentPage !== undefined && paging.columnSize !== undefined) {\n size = (paging.columnCurrentPage * paging.columnSize) - paging.columnSize;\n cmembers = cmembers.splice(paging.columnCurrentPage > 1 ? size : 0, paging.columnSize);\n }\n /* inserting the row grant-total members */\n this.insertAllMember(rmembers, this.filterMembers, '', 'row');\n /* inserting the column gran-total members */\n this.insertAllMember(cmembers, this.filterMembers, '', 'column');\n this.pivotValues = [];\n var gridData = [];\n this.valueSortData = [];\n this.headerContent = [];\n this.valueContent = [];\n var rowheads = [];\n var colheads = [];\n var valuesCount = (this.values.length);\n this.getHeaderData(cmembers, colheads, this.pivotValues, 0, valuesCount);\n this.insertSubTotals();\n //this.getHeaderData(rmembers, rowheads, gridData, 0);\n this.getTableData(rmembers, rowheads, colheads, 0, this.pivotValues, valuesCount, this.valueSortData);\n this.applyValueSorting();\n this.isEngineUpdated = true;\n var st2 = new Date().getTime();\n // console.log(st1 - st2);\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 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 savedCell = extend({}, cell, null, true);\n var rowPos = rowCnt + 1;\n while (this.pivotValues[rowPos] && !this.pivotValues[rowPos][colCnt]) {\n var field = cell.formattedText + this.valueSortSettings.headerDelimiter + (cell.formattedText + ' Total');\n cell.valueSort[field] = 1;\n cell.valueSort.levelName = field;\n this.pivotValues[rowCnt][colCnt].rowSpan = rowPos - rowCnt;\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 if (cellType === 'grand sum') {\n this.pivotValues[rowCnt][colCnt].rowSpan = (rowPos - rowCnt) + 1;\n savedCell.rowSpan = (rowPos - rowCnt) + 1;\n }\n else {\n this.pivotValues[rowCnt + 1][colCnt].rowSpan = rowPos - rowCnt;\n }\n rowPos++;\n }\n spanCnt = 1;\n }\n else {\n rowCells[colCnt] = this.headerContent[rowCnt][colCnt] = extend({}, savedCell, null, true);\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 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 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 member.index = decisionObj[memInd].index = [position[pos]];\n decisionObj[memInd].indexObject[position[pos]] = position[pos];\n member.indexObject = decisionObj[memInd].indexObject;\n member.ordinal = memInd;\n member.valueSort = {};\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 //if (!member.members) {\n member.members = [];\n //}\n //let copyObj: AxisSet = Object.create(member);\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 (rlen - 1 > keyInd && hierarchy[iln].isDrilled) {\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 hierarchy[iln].members = this.getIndexedHeaders(keys, data, keyInd + 1, hierarchy[iln].index, 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.insertAllMember = function (set, filter, customText, axis) {\n var len = set.length;\n customText = ' Total';\n set[len] = {\n hasChild: false,\n index: 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 for (var ln = 0, lt = filter.length; ln < lt; ln++) {\n set[len].indexObject[filter[ln]] = filter[ln];\n }\n };\n PivotEngine.prototype.getTableData = function (rows, reformAxis, columns, tnum, data, vlt, valueSort) {\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 for (var cln = 0, dln = 1, clt = columns.length; cln < clt; ++cln) {\n for (var vln = 0; vln < vlt; vln++) {\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 data[tnum][dln] = this.valueContent[actCnt][dln] = {\n axis: 'value',\n formattedText: formattedText, value: value, rowIndex: tnum, colIndex: dln, isSum: isSum\n };\n dln = data[tnum].length;\n if (this.pageSettings !== undefined && this.pageSettings.columnSize !== undefined) {\n if (dln === (this.pageSettings.columnSize + 1)) {\n break;\n }\n }\n }\n }\n if (rows[rln].type !== 'grand sum') {\n valueSort.push({ rowData: data[tnum], childMembers: [] });\n }\n if (!isLeastNode) {\n this.getTableData(reformAxis[tnum].members, reformAxis, columns, tnum, data, vlt, valueSort[valueSort.length - 1].childMembers);\n }\n reformAxis[tnum].members = [];\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.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) {\n for (var vln = 0; vln < vcnt; vln++) {\n var name_1 = this.values[vln].caption ? this.values[vln].caption : this.values[vln].name;\n var calObj = {\n axis: 'column',\n formattedText: name_1,\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_1] = 1;\n vData.levelName = axis[rln].valueSort.levelName + this.valueSortSettings.headerDelimiter + name_1;\n if (vData && vData[sortText]) {\n this.valueSortSettings.columnIndex = (tnum * vcnt) + 1 + vln;\n }\n if (this.pageSettings !== undefined && this.pageSettings.columnSize !== undefined) {\n if (data[colItmLn].length === (this.pageSettings.columnSize + 1)) {\n return null;\n }\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 / 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 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","import { Reorder } from '@syncfusion/ej2-grids';\nimport { Grid, Resize, ExcelExport, PdfExport, ContextMenu, Freeze } from '@syncfusion/ej2-grids';\nimport { Selection } from '@syncfusion/ej2-grids';\nimport { createElement } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\nimport * as events from '../../common/base/constant';\nimport { hideSpinner } from '@syncfusion/ej2-popups';\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.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 hideSpinner(this.parent.element);\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.dataSource.valueSortSettings && this.parent.dataSource.valueSortSettings.sortOrder &&\n this.parent.dataSource.valueSortSettings.sortOrder !== 'None') {\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 ? 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);\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 };\n /* tslint:disable */\n Render.prototype.bindGrid = function (parent) {\n var _this = this;\n this.parent.grid = new Grid({\n frozenColumns: 1,\n frozenRows: 0,\n dataSource: this.frameDataSource('value'),\n columns: this.frameStackedHeaders(),\n height: parent.height > (this.engine.valueContent.length * this.gridSettings.rowHeight) ?\n 'auto' : parent.height,\n 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.pivotView.dataSource.valueSortSettings;\n var len = this.parent.pivotView.dataSource.values.length > 1 ? this.parent.pivotView.dataSource.columns.length :\n this.parent.pivotView.dataSource.columns.length === 0 ? 0 : this.parent.pivotView.dataSource.columns.length - 1;\n if (vSort !== undefined && cCnt === vSort.columnIndex && rCnt === len) {\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 this.parent.pivotView.dataSource.valueSortSettings.headerText = cell.valueSort.levelName;\n }\n return tCell;\n };\n Render.prototype.onResizeStop = function (args) {\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 < 250) {\n args.cancel = true;\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) {\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 tCell.innerText = '';\n var level = cell.level ? cell.level : 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 if (!cell.hasChild && level > 0) {\n tCell.appendChild(createElement('span', {\n className: cls.LASTSPAN,\n }));\n }\n var fieldName = (level > -1 && this.parent.dataSource.rows.length > 0) ?\n this.parent.dataSource.rows[level].name : '';\n tCell.setAttribute('fieldname', fieldName);\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 }\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 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 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.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) {\n if ((this.parent.dataSource.valueSortSettings && this.parent.dataSource.valueSortSettings.sortOrder &&\n this.parent.dataSource.valueSortSettings.sortOrder !== 'None') || !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 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) {\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 if (headerCnt === this.engine.headerContent.length - 1) {\n columnModel[actualCnt] = {\n field: (cCnt + '.formattedText'),\n headerText: colField[cCnt] ? colField[cCnt].formattedText : '',\n customAttributes: { 'cell': colField[cCnt] },\n width: 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 innerModel.push(integrateModel[splitPos[innerPos]]);\n }\n else {\n columnModel[actualCnt] = {\n headerText: colField[cCnt] ? colField[cCnt].formattedText : '',\n customAttributes: { 'cell': colField[cCnt] },\n width: 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.parent.showGroupingBar && this.parent.groupingBarModule) ? 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.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 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 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()\n ], Filter.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Filter.prototype, \"items\", void 0);\n return Filter;\n}(ChildProperty));\nexport { Filter };\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 the page settings.\n */\n/** @hidden */\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()\n ], PageSettings.prototype, \"columnSize\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"rowSize\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"columnCurrentPage\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"rowCurrentPage\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\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 __decorate([\n Property(undefined)\n ], ValueSortSettings.prototype, \"columnIndex\", 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(true)\n ], DataSource.prototype, \"expandAll\", 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([])\n ], DataSource.prototype, \"formatSettings\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], DataSource.prototype, \"pageSettings\", 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 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 { 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 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 };\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 this.pivotViewKeyboardModule.destroy();\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 this.parent.contextMenuModule.destroy();\n };\n return PivotContextMenu;\n}());\nexport { PivotContextMenu };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(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 } 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 { Grid, } from '@syncfusion/ej2-grids';\nimport { KeyboardInteraction } from '../actions/keyboard';\nimport { PivotContextMenu } from '../../common/popups/context-menu';\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 _this.needsID = true;\n _this.pivotView = _this;\n return _this;\n }\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.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 (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 };\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 };\n /**\n * Initialize the control rendering\n * @returns void\n * @hidden\n */\n PivotView.prototype.render = function () {\n createSpinner({ target: this.element });\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 this.renderModule = new Render(this);\n this.renderModule.render();\n this.notify(events.uiUpdate, this);\n this.trigger(events.dataBound);\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);\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.isAdaptive) {\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 this.grid.excelExport(excelExportProperties, isMultipleExport, workbook, isBlob);\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 this.grid.csvExport(excelExportProperties, isMultipleExport, workbook, isBlob);\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 this.grid.pdfExport(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\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 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-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')) {\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 /* tslint:disable */\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 }\n }\n }, true);\n /* tslint:enable */\n showSpinner(this.element);\n this.engineModule.applyValueSorting();\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')) {\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.refreshUI();\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.generateData = function () {\n if (this.dataSource && this.dataSource.data && this.dataSource.data.length > 0) {\n showSpinner(this.element);\n this.trigger(events.enginePopulating, { 'dataSource': this.dataSource });\n this.engineModule = new PivotEngine(this.dataSource);\n this.setProperties({ pivotValues: this.engineModule.pivotValues }, true);\n this.trigger(events.enginePopulated, { 'pivotValues': this.pivotValues });\n this.notify(events.dataReady, {});\n }\n else {\n this.showFieldList = false;\n this.grid = new Grid({});\n this.grid.notify('showEmptyGrid', {});\n return;\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, \"allowCalculatedField\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"enableValueSorting\", 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, \"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 = __decorate([\n NotifyPropertyChanges\n ], PivotView);\n return PivotView;\n}(Component));\nexport { PivotView };\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 var args = { fileName: 'default', header: '', footer: '', dataCollections: [this.parent.pivotValues] };\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 }\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 }\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.applyEvent = function () {\n /** Event trigerring */\n var args = { fileName: 'default', header: '', footer: '', dataCollections: [this.parent.pivotValues] };\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 } 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 ctrlF: 'ctrl+F',\n ctrlS: 'ctrl+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 'ctrlF':\n this.processFilter(e);\n break;\n case 'ctrlS':\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 this.keyboardModule.destroy();\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.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 * 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.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 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 nodeDropped = false;\n return nodeDropped;\n }\n if (droppedClass !== '') {\n if (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 = this.removeFieldFromReport(fieldName.toString());\n dataSourceItem = dataSourceItem ? dataSourceItem : this.getNewField(fieldName.toString());\n if (dataSourceItem.type === 'CalculatedField' && droppedClass !== '') {\n droppedClass = 'values';\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 } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\nimport { TreeView } from '@syncfusion/ej2-navigations';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { MaskedTextBox } from '@syncfusion/ej2-inputs';\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 });\n this.parent.element.appendChild(editorDialog);\n this.dialogPopUp = new Dialog({\n animationSettings: { effect: 'Fade' },\n allowDragging: true,\n header: fieldCaption,\n content: this.createTreeView(treeData, fieldCaption),\n isModal: this.parent.renderMode === 'Popup' ? true : this.parent.isAdaptive ? true : false,\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 buttonModel: {\n cssClass: cls.OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('ok'), isPrimary: 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 closeOnEscape: true,\n target: target,\n close: this.removeFilterDialog.bind(this)\n });\n this.dialogPopUp.appendTo(editorDialog);\n this.updateCheckedState();\n };\n FilterDialog.prototype.createTreeView = function (treeData, fieldCaption) {\n var _this = this;\n var editorTreeWrapper = createElement('div', {\n id: this.parent.parentID + 'EditorDiv',\n className: cls.EDITOR_TREE_WRAPPER_CLASS\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();\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.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 () {\n var filterDialog = this.dialogPopUp.element;\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.closeFilterDialog = function () {\n this.dialogPopUp.hide();\n };\n FilterDialog.prototype.removeFilterDialog = function () {\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 this.keyboardModule.destroy();\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: this.parent.enableRtl ? cls.WRAPPER_CLASS + ' ' + cls.RTL : 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 } 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 PivotButton.prototype.renderPivotButton = function (args) {\n var field = args.field;\n var axis = args.axis;\n var axisElement;\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',\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': 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) {\n this.createSortOption(buttonElement, field[i].name);\n }\n if (axis !== 'values') {\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, axis);\n this.wireEvent(buttonWrapper, 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 ? cls.FILTER_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 remove(document.getElementById(this.parent.element.id + '_DragClone'));\n if (!this.isButtonDropped(args.target, element)) {\n return;\n }\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.parent.pivotCommon.filterDialog.dialogPopUp.buttons[0].click = this.updateFilterState.bind(this, fieldName);\n };\n PivotButton.prototype.removeButton = function (args) {\n var target = args.target;\n var fieldName = target.parentElement.id;\n this.parent.pivotCommon.dataSourceUpdate.removeFieldFromReport(fieldName);\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 filterDialog = this.dialogPopUp.element;\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.items = filterItem.items;\n filterObject.type = filterItem.type;\n }\n else {\n this.parent.dataSource.filterSettings.push(filterItem);\n }\n this.refreshPivotButtonState(fieldName, (unCheckedNodeCount > 0) ? true : false);\n if (unCheckedNodeCount === 0) {\n this.removeDataSourceSettings(fieldName);\n }\n this.parent.updateDataSource(true);\n this.dialogPopUp.hide();\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 selectedButton.setAttribute('title', this.parent.localeObj.getConstant('filtered'));\n }\n else {\n removeClass([selectedButton], cls.FILTERED_CLASS);\n addClass([selectedButton], cls.FILTER_CLASS);\n selectedButton.setAttribute('title', this.parent.localeObj.getConstant('filter'));\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 };\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 this.engineModule = new PivotEngine(this.dataSource);\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) {\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 });\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 this.engineModule = new PivotEngine(this.dataSource, '', this.pivotFieldList);\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 this.dialogRenderer.fieldListDialog.destroy();\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 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: '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: '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 this.parent.pivotFieldListModule.destroy();\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 var args = {\n pivotEngine: this.parent.engineModule,\n dataSource: 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 /**\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 this.parent.pivotCommon.destroy();\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(colGroupElement);\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 // private setGridRowWidth(colGroupElement: HTMLElement): void {\n // if (this.rowPanel.querySelector('.' + cls.PIVOT_BUTTON_CLASS) && !this.parent.isAdaptive) {\n // let pivotButtons: HTMLElement[] = [].slice.call(this.rowPanel.querySelectorAll('.' + cls.PIVOT_BUTTON_WRAPPER_CLASS));\n // let lastButton: HTMLElement = pivotButtons[pivotButtons.length - 1];\n // let buttonWidth: string = formatUnit((lastButton.querySelector('.' + cls.PIVOT_BUTTON_CLASS) as HTMLElement).offsetWidth +\n // (lastButton.querySelector('.e-indent-div') as HTMLElement).offsetWidth + 20);\n // let rowHeaderTable: HTMLElement = this.parent.element.querySelector('.e-frozenheader').querySelector('table') as HTMLElement;\n // let rowContentTable: HTMLElement = \n // this.parent.element.querySelector('.e-frozencontent').querySelector('table') as HTMLElement;\n // let rowContent: HTMLElement =\n // this.parent.element.querySelector('.e-frozencontent').querySelector('colgroup').children[0] as HTMLElement;\n // rowHeaderTable.removeAttribute('style');\n // rowContentTable.removeAttribute('style');\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 // }\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 this.parent.pivotButtonModule.destroy();\n this.touchObj.destroy();\n };\n return GroupingBar;\n}());\nexport { GroupingBar };\n","import * as index from '@syncfusion/ej2-pivotview';\nindex.PivotView.Inject( index.GroupingBar,index.FieldList,index.CalculatedField);\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 = {}));\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 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 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 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","/**\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_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","// tslint:disable\n/**\n * Export items model\n */\nexport var templateItems = ['alignments', 'formats', 'fontname', 'fontsize', 'fontcolor', 'backgroundcolor', 'align', 'display'];\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 '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};\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];\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': 'Tooltip',\n 'linkWebUrl': 'Web Address',\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};\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};\n","import { addClass, Browser, removeClass, EventHandler } from '@syncfusion/ej2-base';\nimport { getInstance, closest } 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.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.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', { className: 'e-popup-container e-center' });\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 ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var colorbox = ele.parentElement.querySelectorAll('.e-tile');\n removeClass(colorbox, 'e-selected');\n var style = currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n for (var i = 0; i < colorbox.length; i++) {\n if (colorbox[i].style.backgroundColor === style) {\n addClass([colorbox[i]], 'e-selected');\n break;\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 = ('' +\n '');\n var dropDown = new DropDownButton({\n target: colorPicker.element.parentElement,\n cssClass: css,\n content: content,\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 proxy.parent.notify(events.colorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue } });\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 inst = getInstance(ele, 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 proxy.parent.notify(events.colorPickerChanged, {\n item: {\n command: args.command,\n 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.appendTo(args.element);\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 proxy = this;\n var colorPicker = new ColorPicker({\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n noColor: true,\n value: (!this.parent.inlineMode.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 proxy.parent.notify(events.colorPickerChanged, colorPickerArgs);\n proxy.currentDropdown.toggle();\n },\n beforeModeSwitch: function (args) {\n colorPicker.showButtons = args.mode === 'Palette' ? false : true;\n }\n });\n colorPicker.columns = (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns;\n colorPicker.presetColors = (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode : this.parent.fontColor.colorCode;\n colorPicker.cssClass = (item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER;\n colorPicker.appendTo(document.body.querySelector(args.target));\n return 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 { getTooltipText } from '../base/util';\nimport { tools, templateItems } from '../models/items';\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 }\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 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 break;\n case 'display':\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 break;\n }\n }\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 };\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.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.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'))) {\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 * 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.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.toggleFloatTBarOffset = function (action, top) {\n this.tbElement.style.top = ((action === 'add') ? (top + this.parent.floatingToolbarOffset) : 0) + 'px';\n };\n Toolbar.prototype.toggleFloatClass = function (e) {\n var topValue = 0;\n var floatOffset = this.parent.floatingToolbarOffset;\n var isBody = false;\n var scrollParent;\n var scrollParentRelativeTop = 0;\n var trg = this.parent.element;\n var trgHeight = trg.offsetHeight;\n var tbHeight = this.getToolbarHeight() + this.getExpandTBarPopHeight();\n if (e && e.target !== document) {\n scrollParent = e.target;\n }\n else {\n isBody = true;\n scrollParent = document.body;\n var bodyStyle = window.getComputedStyle(scrollParent);\n scrollParentRelativeTop = parseFloat(bodyStyle.marginTop.split('px')[0]) + parseFloat(bodyStyle.paddingTop.split('px')[0]);\n }\n var targetTop = trg.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 isOutOfRange = ((targetTop - ((!isBody) ? scrollParentTop : 0)) + trgHeight > tbHeight + floatOffset) ? false : true;\n if (targetTop > (scrollParentTop + floatOffset) || targetTop < -trgHeight || ((targetTop < 0) ? isOutOfRange : false)) {\n this.tbElement.classList.remove(classes.CLS_TB_FLOAT);\n this.tbElement.style.width = '100%';\n this.toggleFloatTBarOffset('remove', topValue);\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 this.tbElement.classList.add(classes.CLS_TB_FLOAT);\n this.tbElement.style.width = this.parent.element.offsetWidth + 'px';\n this.toggleFloatTBarOffset('add', topValue);\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.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.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 /**\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 { 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';\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 }\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.parentData.right - e.popWidth;\n }\n break;\n case 'left':\n if (type === 'inline') {\n x = 0;\n }\n else {\n x = e.parentData.left;\n }\n break;\n }\n }\n this.popupObj.position.X = (x) ? x : this.popupObj.position.X;\n this.popupObj.position.Y = (y) ? y : this.popupObj.position.Y;\n this.popupObj.dataBind();\n };\n BaseQuickToolbar.prototype.showPopup = function (x, y, target) {\n var editPanelTop;\n var editPanelHeight;\n var bodyStyle = window.getComputedStyle(window.top.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) {\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.parent.notify(events.renderColorPicker, {\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 if (Browser.isDevice) {\n removeClass([this.parent.getToolbar()], [classes.CLS_HIDE]);\n }\n if (!isNullOrUndefined(this.parent.getToolbar()) && !this.parent.inlineMode.enable) {\n this.parent.enableToolbarItem(this.parent.toolbarSettings.items);\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.parent.notify(events.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 } 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) {\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 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 };\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.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, window.top.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') {\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, window.top.document))) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.inlineQTBarMouseDownHandler = function () {\n if (!isNullOrUndefined(select('.' + CLS_INLINE_POP, window.top.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.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 };\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 };\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.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 };\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 } 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 Count.prototype.refresh = function () {\n this.appendCount();\n if (this.parent.maxLength !== -1) {\n this.charCountBackground(this.htmlLength);\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.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.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","import { select } 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 this.fontColorDropDown.destroy();\n }\n if (this.backgroundColorDropDown && !this.backgroundColorDropDown.isDestroyed) {\n this.backgroundColorDropDown.destroy();\n }\n };\n ColorPickerInput.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRenderComplete, this.renderColorPickerInput, 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.destroyColorPicker, this.destroyColorPicker);\n };\n return ColorPickerInput;\n}());\nexport { ColorPickerInput };\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: this.isListsApplied(parentsLines, 'OL'),\n unorderedlist: this.isListsApplied(parentsLines, 'UL'),\n formats: this.currentFormat(parentsLines),\n bold: this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('Bold'),\n italic: this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('Italic'),\n inlinecode: this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('InlineCode'),\n strikethrough: this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('StrikeThrough'),\n subscript: this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('SubScript'),\n superscript: this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('SuperScript'),\n uppercase: 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) {\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; 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);\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 !== '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 if (event.action !== 'tab' &&\n event.action !== 'enter' &&\n event.action !== 'space' &&\n event.action !== 'escape') {\n args = {};\n var items = {\n originalEvent: event, cancel: false, requestType: event.action, itemCollection: value\n };\n extend(args, args, items, true);\n self.trigger(CONSTANT.actionBegin, args);\n if (args.cancel) {\n if (event.action === 'paste') {\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 this.editorManager.execCommand(args.item.command, args.item.subCommand, event, this.onSuccess.bind(this, self), args.item.value, value);\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 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};\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 LINK = 'INSERT-LINK';\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/* 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;\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 return wrapper.appendChild(element);\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 && 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 !== end) {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n this.replaceWith(end, this.marker(markerClassName.endSelection, this.encode(end.textContent)));\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.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 collectionNodes.push(parentNode);\n }\n var nodes = [];\n for (var node = startNode; node !== endNode && node !== this.parent; null) {\n if (nodes.indexOf(node) < 0 && node.children && node.children.length) {\n nodes.push(node);\n node = node.children[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 (this.isBlockNode(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 && 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 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 = this.domNode.blockNodes();\n var startOffset = this.parent.nodeSelection.getRange(this.parent.currentDocument).startOffset;\n var endOffset = this.parent.nodeSelection.getRange(this.parent.currentDocument).endOffset;\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 this.domNode.setMarker(this.saveSelection);\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 this.saveSelection = this.domNode.saveMarker(this.saveSelection);\n this.saveSelection.restore();\n if (e.callBack) {\n e.callBack({\n requestType: this.currentAction,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes(),\n event: e.event\n });\n }\n }\n }\n else {\n 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 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 this.domNode.setMarker(this.saveSelection);\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';\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 var formatsNodes = this.parent.domNode.blockNodes();\n if (e.subCommand.toLowerCase() === 'blockquote') {\n this.parent.domNode.setMarker(save);\n }\n for (var i = 0; i < formatsNodes.length; i++) {\n var parentNode = void 0;\n var replaceHTML = void 0;\n if (e.subCommand.toLowerCase() === 'blockquote') {\n parentNode = this.getParentNode(formatsNodes[i]);\n replaceHTML = this.parent.domNode.isList(parentNode) ? parentNode.outerHTML : parentNode.innerHTML;\n }\n else {\n parentNode = formatsNodes[i];\n replaceHTML = parentNode.innerHTML;\n }\n if (e.subCommand.toLowerCase() === parentNode.tagName.toLowerCase() || parentNode.tagName === 'LI') {\n continue;\n }\n this.cleanFormats(parentNode, e.subCommand);\n var replaceTag = this.parent.domNode.createTagString(e.subCommand, parentNode, replaceHTML.replace(/(?:\\r\\n|\\r|\\n)/g, ''));\n this.parent.domNode.replaceWith(parentNode, replaceTag);\n }\n this.parent.editableElement.focus();\n if (e.subCommand.toLowerCase() === 'blockquote') {\n save = this.parent.domNode.saveMarker(save);\n }\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 if (!isCollapsed) {\n var nodes = nodeSelection.getInsertNodeCollection(range);\n var preNode = nodeCutter.GetSpliceNode(range, nodes[0]);\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 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[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 e.item.selection.setSelectionText(this.parent.currentDocument, anchor.childNodes[0], anchor.childNodes[0], 0, anchor.childNodes[0].textContent.length);\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 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 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.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 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 },\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.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-imginline', attrs: {\n width: isNullOrUndefined(e.item.width) ? 'auto' : e.item.width,\n height: isNullOrUndefined(e.item.height) ? 'auto' : e.item.height,\n alt: (e.item.altText !== '') ? e.item.altText : ''\n }\n });\n imgElement.setAttribute('src', isNullOrUndefined(e.item.url) ? '' : e.item.url);\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","/**\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 {\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 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 { 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.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 '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) {\n var formatCollection = JSON.parse(JSON.stringify(statusCollection));\n var nodeCollection = JSON.parse(JSON.stringify(statusCollection));\n var nodeSelection = new NodeSelection();\n var nodes = 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);\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 });\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 this.saveSelection.restore();\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(/[-a-zA-Z0-9@:%_\\+.~#?&//=]{2,256}\\.[a-z]{2,4}\\b(\\/[-a-zA-Z0-9@:%_\\+.~#?&//=]*)?/gi);\n if (selectNodeEle[0].nodeName !== 'A' && urlText.match(regex)) {\n var url = this.parent.createElement('a', { attrs: { href: urlText } });\n url.innerHTML = urlText;\n InsertHtml.Insert(this.contentRenderer.getDocument(), url);\n range.startContainer.textContent = this.removeText(range.startContainer.textContent, urlText);\n }\n };\n HtmlEditor.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 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 }\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 '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 'Copy':\n this.parent.onCopy();\n break;\n case 'Cut':\n this.parent.onCut();\n break;\n case 'Paste':\n this.parent.onPaste();\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' && this.parent.quickToolbarModule) {\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' && (!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 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.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.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 (!this.selfLink.isUrl(linkUrl)) {\n this.selfLink.checkUrl(true);\n return;\n }\n else {\n this.selfLink.checkUrl(false);\n }\n var proxy = this.selfLink;\n if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(this.selection.range.startContainer.parentNode, '#' + proxy.parent.contentModule.getPanel().id))) {\n proxy.parent.contentModule.getEditPanel().focus();\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n this.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.parent.contentModule.getDocument());\n this.selectParent = proxy.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n var value = {\n url: linkUrl, text: linkText, title: linkTitle, target: target,\n selection: this.selection, selectParent: this.selectParent\n };\n if (proxy.parent.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 this.selfLink.dialogObj.hide({ returnValue: false });\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;) {\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.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 }\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 };\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.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 detach(e.selectParent[0].parentElement);\n this.parent.contentModule.getEditPanel().focus();\n InsertHtml.Insert(this.parent.contentModule.getDocument(), e.selectNode[0]);\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.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 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 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 var args = { args: e, selectNode: selectNodeEle };\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 };\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.parentElement && target.parentElement.tagName !== '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 (target.parentElement.tagName === '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 (target.parentElement.tagName !== '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.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.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.content.querySelector('input').focus();\n }\n };\n Image.prototype.insertAlt = function (e) {\n if (!isNullOrUndefined(e.alt)) {\n var altText = e.alt.value;\n e.selectNode[0].setAttribute('alt', altText);\n e.selection.restore();\n this.parent.formatter.saveData();\n this.dialogObj.hide({ returnValue: false });\n }\n };\n Image.prototype.insertlink = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var url = e.link.value;\n if (!this.isUrl(url)) {\n addClass([e.link], 'e-error');\n e.link.setSelectionRange(0, url.length);\n e.link.focus();\n return;\n }\n else {\n removeClass([e.link], 'e-error');\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 e.selection.restore();\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 if (selectNode.parentElement.tagName === 'A' && !selectNode.parentElement.parentElement.classList.contains(classes.CLS_CAPTION)) {\n detach(selectNode.parentElement);\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 this.parent.formatter.saveData();\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n }\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 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.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.appendTo(imgDialog);\n imgDialog.style.maxHeight = 'none';\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\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 (!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 };\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.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 url: url, selection: this.selection, altText: matchUrl,\n selectParent: this.selectParent, width: proxy.parent.insertImageSettings.width,\n height: proxy.parent.insertImageSettings.height\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.getAttribute('width');\n var heightVal = (selectNode.getAttribute('height') === 'auto' ||\n isNullOrUndefined(selectNode.getAttribute('height'))) ? selectNode.height : selectNode.getAttribute('height');\n var content = '
    ' +\n '
    ' + '
    ' +\n '
    ';\n var contentElem = document.createRange().createContextualFragment(content);\n imgSizeWrap.appendChild(contentElem);\n var widthNum = new NumericTextBox({ format: 'n0', enableRtl: this.parent.enableRtl, locale: this.parent.locale });\n widthNum.appendTo(imgSizeWrap.querySelector('#imgwidth'));\n var heightNum = new NumericTextBox({ format: 'n0', enableRtl: this.parent.enableRtl, locale: this.parent.locale });\n heightNum.appendTo(imgSizeWrap.querySelector('#imgheight'));\n return imgSizeWrap;\n };\n Image.prototype.insertSize = function (e) {\n var selectNode = this.selectNode[0];\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 this.selfImage.parent.formatter.saveData();\n this.selfImage.dialogObj.hide({ returnValue: true });\n };\n Image.prototype.insertImage = function (e) {\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n var dialogContent = this.parent.createElement('div', { className: 'e-img-content' });\n if ((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')\n || this.parent.editorMode === 'HTML') {\n dialogContent.appendChild(this.imgUpload(e));\n }\n var linkHeader = this.parent.createElement('div', { className: 'e-linkheader' });\n var linkHeaderText = this.i10n.getConstant('imageLinkHeader');\n if (this.parent.editorMode === 'HTML') {\n linkHeader.innerHTML = linkHeaderText;\n }\n else {\n linkHeader.innerHTML = this.i10n.getConstant('mdimageLink');\n }\n dialogContent.appendChild(linkHeader);\n dialogContent.appendChild(this.imageUrlPopup(e));\n if (e.selectNode && e.selectNode[0].nodeName === 'IMG') {\n this.dialogObj.setProperties({ header: 'Edit Image', content: dialogContent }, false);\n this.dialogObj.element.querySelector('.e-insertImage').textContent = 'Update';\n }\n else {\n this.dialogObj.setProperties({ content: dialogContent }, false);\n }\n this.dialogObj.element.style.maxHeight = 'none';\n if ((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')\n || this.parent.editorMode === 'HTML') {\n dialogContent.querySelector('#' + this.rteID + '_insertImage').focus();\n }\n else {\n dialogContent.querySelector('.e-img-url').focus();\n }\n }\n };\n Image.prototype.imgUpload = function (e) {\n var _this = this;\n var save;\n var selectParent;\n var proxy = this;\n if (proxy.parent.editorMode === 'HTML' &&\n isNullOrUndefined(closest(e.selection.range.startContainer.parentNode, '#' + this.contentModule.getPanel().id))) {\n this.contentModule.getEditPanel().focus();\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n selectParent = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n else {\n save = e.selection;\n selectParent = e.selectParent;\n }\n var uploadParentEle = this.parent.createElement('div', { className: 'e-img-uploadwrap e-droparea' });\n var deviceImgUpMsg = this.i10n.getConstant('imageDeviceUploadMessage');\n var imgUpMsg = this.i10n.getConstant('imageUploadMessage');\n var span = this.parent.createElement('span', { className: 'e-droptext' });\n span.innerHTML = (Browser.isDevice) ? deviceImgUpMsg : imgUpMsg;\n var btnEle = this.parent.createElement('button', {\n className: 'e-browsebtn', id: this.rteID + '_insertImage',\n attrs: { autofocus: 'true', type: 'button' }\n });\n span.appendChild(btnEle);\n uploadParentEle.appendChild(span);\n var browserMsg = this.i10n.getConstant('browse');\n var button = new Button({ content: browserMsg, enableRtl: this.parent.enableRtl });\n button.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: proxy.parent.insertImageSettings.width, height: proxy.parent.insertImageSettings.height\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: proxy.parent.insertImageSettings.width, height: proxy.parent.insertImageSettings.height\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.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 url: URL.createObjectURL(proxy.url(reader.result)),\n width: proxy.parent.insertImageSettings.width, height: proxy.parent.insertImageSettings.height\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 /**\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","/** @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';\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 '#ffffff', '#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 '#ffffff', '#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 return ImageSettings;\n}(ChildProperty));\nexport { ImageSettings };\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 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 { 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: '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 this.inputElement.focus();\n };\n /**\n * Blurs the RichTextEditor component\n * @public\n */\n RichTextEditor.prototype.focusOut = function () {\n this.inputElement.blur();\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.shiftKey && !e.ctrlKey) && e.key.length === 1 || allowedKeys) || (this.editorMode === 'Markdown'\n && ((!e.shiftKey && !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, 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.inputElement.textContent.length !== 0) {\n this.notify(events.toolbarRefresh, 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 * 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 _super.prototype.destroy.call(this);\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 * Sets the new HTML or text inside the RichTextEditor.\n * @param {Element} element - Specifies the RichTextEditor content.\n * @return {void}\n */\n RichTextEditor.prototype.setContent = function (element) {\n this.contentModule.setPanel(element);\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 break;\n case 'width':\n this.setWidth(newProp[prop]);\n break;\n case 'height':\n this.setHeight(newProp[prop]);\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({ value: this.decode(this.inputElement.innerHTML) });\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(/\\n/g, '').replace(/\\>[\\t ]+\\<');\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.inputElement && this.inputElement.innerHTML.trim() !== value.trim()) {\n this.inputElement.innerHTML = value;\n }\n }\n else {\n if (this.editorMode === 'HTML') {\n this.inputElement.innerHTML = '


    ';\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 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, {});\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 };\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.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 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 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);\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/**\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 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 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_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.setRtl = function (isRtl) {\n if (this.headerPopup) {\n this.headerPopup.enableRtl = isRtl;\n this.headerPopup.dataBind();\n }\n if (this.headerCalendar) {\n this.headerCalendar.enableRtl = isRtl;\n this.headerCalendar.dataBind();\n }\n this.toolbarObj.enableRtl = isRtl;\n this.toolbarObj.dataBind();\n };\n HeaderRenderer.prototype.updateActiveView = function () {\n var 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 'weekagenda':\n // view = {\n // align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-week', text: this.l10n.getConstant('weekAgenda'),\n // cssClass: 'e-week-agenda'\n // };\n // break;\n // case 'workweekagenda':\n // view = {\n // align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-workweek',\n // text: this.l10n.getConstant('workWeekAgenda'), cssClass: 'e-work-week-agenda'\n // };\n // break;\n case 'monthagenda':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-month-agenda',\n text: this.l10n.getConstant('monthAgenda'), cssClass: 'e-views e-month-agenda'\n };\n break;\n }\n return view;\n };\n HeaderRenderer.prototype.renderHeaderPopup = function () {\n var headerPopupEle = createElement('div', { className: cls.HEADER_POPUP_CLASS });\n var headerCalendarEle = createElement('div', { className: cls.HEADER_CALENDAR_CLASS });\n headerPopupEle.appendChild(headerCalendarEle);\n this.element.appendChild(headerPopupEle);\n this.headerPopup = new Popup(headerPopupEle, {\n actionOnScroll: 'hide',\n targetType: 'relative',\n relateTo: this.getPopUpRelativeElement(),\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.parent.enableRtl\n });\n var calendarView = this.getCalendarView();\n this.headerCalendar = new Calendar({\n value: this.parent.selectedDate,\n firstDayOfWeek: this.parent.firstDayOfWeek,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n depth: calendarView,\n start: calendarView,\n change: this.calendarChange.bind(this)\n });\n this.headerCalendar.appendTo(headerCalendarEle);\n this.headerPopup.hide();\n };\n HeaderRenderer.prototype.calendarChange = function (args) {\n if (args.value.getTime() !== this.parent.selectedDate.getTime()) {\n this.parent.changeDate(args.value);\n }\n this.headerPopup.hide();\n };\n HeaderRenderer.prototype.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-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.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' ||\n (e.originalEvent && !isNullOrUndefined(closest(e.originalEvent.target, '.' + cls.APPOINTMENT_WRAP_CLASS)))) {\n return;\n }\n if (!this.timeStampStart) {\n this.timeStampStart = Date.now();\n }\n if (this.element.classList.contains(cls.TRANSLATE_CLASS)) {\n this.onTransitionEnd();\n }\n if (e.scrollDirection === 'Left' || e.scrollDirection === 'Right') {\n var args = { requestType: 'dateNavigate', cancel: false, event: e.originalEvent };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var scrollDiv = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n if (scrollDiv && scrollDiv.scrollWidth > scrollDiv.clientWidth) {\n return;\n }\n else {\n this.isScrollTriggered = true;\n e.originalEvent.preventDefault();\n e.originalEvent.stopPropagation();\n }\n }\n if (e.scrollDirection === this.touchLeftDirection) {\n if (!this.nextPanel) {\n this.renderPanel(cls.NEXT_PANEL_CLASS, 'next');\n this.nextPanel = {\n element: this.parent.activeView.getPanel(),\n selectedDate: new Date(this.parent.selectedDate.getTime())\n };\n this.setDimensions(this.nextPanel.element);\n }\n var x = this.parent.enableRtl ? e.distanceX : -e.distanceX;\n this.element.style.transform = 'translatex(' + (this.getTranslateX(this.element) + x) + 'px)';\n }\n else if (e.scrollDirection === this.touchRightDirection) {\n var prevWidth = 0;\n if (!this.previousPanel) {\n this.renderPanel(cls.PREVIOUS_PANEL_CLASS, 'previous');\n this.previousPanel = {\n element: this.parent.activeView.getPanel(),\n selectedDate: new Date(this.parent.selectedDate.getTime())\n };\n this.setDimensions(this.previousPanel.element);\n prevWidth = this.previousPanel.element.offsetWidth;\n }\n var x = this.parent.enableRtl ? prevWidth - e.distanceX : -prevWidth + e.distanceX;\n this.element.style.transform = 'translatex(' + (this.getTranslateX(this.element) + x) + 'px)';\n }\n };\n ScheduleTouch.prototype.swipeHandler = function (e) {\n if (!this.isScrollTriggered) {\n return;\n }\n this.isScrollTriggered = false;\n if (e.swipeDirection === 'Left' || e.swipeDirection === 'Right') {\n var time = Date.now() - this.timeStampStart;\n var offsetDist = (e.distanceX * (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 = e.event.target;\n if (this.parent.activeViewOptions.readonly || this.parent.currentView === 'MonthAgenda') {\n return;\n }\n if (e.event.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n EventHandler.add(this.parent.getContentTable(), 'mousemove', this.onMouseSelection, this);\n EventHandler.add(this.parent.getContentTable(), 'mouseup', this.onMoveup, this);\n }\n if (e.event.target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayRow = this.parent.getAllDayRow();\n if (allDayRow) {\n EventHandler.add(allDayRow, 'mousemove', this.onMouseSelection, this);\n EventHandler.add(allDayRow, 'mouseup', this.onMoveup, this);\n }\n }\n };\n KeyboardInteraction.prototype.onMouseSelection = function (e) {\n var target = closest(e.target, '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS);\n if (target) {\n this.selectCells(true, target);\n }\n };\n KeyboardInteraction.prototype.onAppointmentSelection = function (e) {\n var target = closest(e.target, '.' + cls.APPOINTMENT_CLASS);\n this.parent.eventBase.getSelectedEventElements(target);\n };\n KeyboardInteraction.prototype.onMoveup = function (e) {\n if (e.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n EventHandler.remove(this.parent.getContentTable(), 'mousemove', this.onMouseSelection);\n EventHandler.remove(this.parent.getContentTable(), 'mouseup', this.onMoveup);\n }\n if (e.target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayRow = this.parent.getAllDayRow();\n if (allDayRow) {\n EventHandler.remove(allDayRow, 'mousemove', this.onMouseSelection);\n EventHandler.remove(allDayRow, 'mouseup', this.onMoveup);\n }\n }\n };\n KeyboardInteraction.prototype.processEnter = function (e) {\n if (this.parent.activeViewOptions.readonly) {\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('Day');\n this.processEscape();\n return;\n }\n };\n KeyboardInteraction.prototype.getCells = function (isInverseTable, start, end) {\n var tableEle = this.parent.getContentTable();\n var cells = [].slice.call(tableEle.querySelectorAll('td'));\n var maxRow = tableEle.rows.length;\n var maxColumn = tableEle.rows[0].cells.length;\n if (start.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayRow = this.parent.getAllDayRow();\n cells = [].slice.call(allDayRow.cells);\n maxRow = 1;\n maxColumn = allDayRow.cells.length;\n }\n var startIndex = cells.indexOf(start);\n var endIndex = cells.indexOf(end);\n var inverseCells = [];\n if (isInverseTable) {\n for (var i = 0; i < maxColumn; i++) {\n for (var j = 0; j < maxRow; j++) {\n inverseCells.push(cells[maxColumn * j + i]);\n }\n }\n startIndex = inverseCells.indexOf(start);\n endIndex = inverseCells.indexOf(end);\n }\n if (startIndex > endIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n var sCells = isInverseTable ? inverseCells : cells;\n return sCells.slice(startIndex, endIndex + 1);\n };\n KeyboardInteraction.prototype.focusFirstCell = function () {\n if (this.parent.currentView === 'Agenda') {\n var focusCell = this.parent.getContentTable().querySelector('.' + cls.AGENDA_CELLS_CLASS);\n focusCell.setAttribute('tabindex', '0');\n focusCell.focus();\n return;\n }\n this.parent.eventBase.removeSelectedAppointmentClass();\n this.selectCells(false, this.parent.getWorkCellElements()[0]);\n };\n KeyboardInteraction.prototype.isInverseTableSelect = function () {\n return this.parent.activeView.isInverseTableSelect;\n };\n /** @hidden */\n KeyboardInteraction.prototype.selectCells = function (isMultiple, target) {\n this.parent.removeSelectedClass();\n if (isMultiple) {\n var 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.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 tableEle = this.parent.getContentTable();\n var curRowIndex = target.parentNode.sectionRowIndex;\n if (curRowIndex > 0 && curRowIndex < tableEle.rows.length) {\n this.selectCells(isMultiple, tableEle.rows[curRowIndex - 1].cells[target.cellIndex]);\n }\n }\n else if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.selectAppointment(true, target);\n }\n };\n KeyboardInteraction.prototype.processDown = function (e, isMultiple) {\n if ((isMultiple && this.parent.currentView === 'MonthAgenda')) {\n return;\n }\n var target = (e.target);\n var selectedCells = this.parent.getSelectedElements();\n var selectedElements = this.parent.eventBase.getSelectedAppointments();\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n 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 tableEle = this.parent.getContentTable();\n if (target.classList.contains(cls.WORK_CELLS_CLASS) && !this.parent.element.querySelector('.' + cls.POPUP_OPEN)) {\n var curRowIndex = target.parentNode.sectionRowIndex;\n if (curRowIndex >= 0 && curRowIndex < tableEle.rows.length - 1) {\n this.selectCells(isMultiple, tableEle.rows[curRowIndex + 1].cells[target.cellIndex]);\n }\n }\n else if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.selectAppointment(false, target);\n }\n };\n KeyboardInteraction.prototype.processLeftRight = function (target) {\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 (isMultiple) {\n if (this.parent.currentView === 'Agenda' || (isMultiple && this.parent.currentView === 'MonthAgenda')) {\n return true;\n }\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n 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(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(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 /**\n * Get module name.\n */\n KeyboardInteraction.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * To destroy the keyboard module.\n * @return {void}\n * @private\n */\n KeyboardInteraction.prototype.destroy = function () {\n this.removeEventListener();\n this.keyboardModule.destroy();\n };\n return KeyboardInteraction;\n}());\nexport { KeyboardInteraction };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\n/**\n * data module is used to generate query and data source.\n * @hidden\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module\n * @private\n */\n function Data(dataSource, query) {\n this.initDataManager(dataSource, query);\n }\n /**\n * The function used to initialize dataManager and query\n * @return {void}\n * @private\n */\n Data.prototype.initDataManager = function (dataSource, query) {\n this.dataManager = dataSource instanceof DataManager ? dataSource : new DataManager(dataSource);\n this.query = query instanceof Query ? query : new Query();\n };\n /**\n * The function used to generate updated Query from schedule model\n * @return {void}\n * @private\n */\n Data.prototype.generateQuery = function (startDate, endDate) {\n var query = this.query.clone();\n if (startDate) {\n query.addParams('StartDate', startDate.toISOString());\n }\n if (endDate) {\n query.addParams('EndDate', endDate.toISOString());\n }\n return query;\n };\n /**\n * The function used to get dataSource by executing given Query\n * @param {Query} query - A Query that specifies to generate dataSource\n * @return {void}\n * @private\n */\n Data.prototype.getData = function (query) {\n return this.dataManager.executeQuery(query);\n };\n return Data;\n}());\nexport { Data };\n","/**\n * Time zone\n */\nvar Timezone = /** @class */ (function () {\n function Timezone() {\n }\n Timezone.prototype.offset = function (date, timezone) {\n var localOffset = date.getTimezoneOffset();\n try {\n var convertedDate = new Date(date.toLocaleString('en-US', { timeZone: timezone }));\n if (!isNaN(convertedDate.getTime())) {\n return ((date.getTime() - convertedDate.getTime()) / 60000) + localOffset;\n }\n return 0;\n }\n catch (error) {\n return 0;\n }\n };\n Timezone.prototype.convert = function (date, fromOffset, toOffset) {\n if (typeof fromOffset === 'string') {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset === 'string') {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n return new Date(date.getTime() + (toLocalOffset - fromLocalOffset) * 60000);\n };\n Timezone.prototype.add = function (date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n };\n Timezone.prototype.remove = function (date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n };\n Timezone.prototype.removeLocalOffset = function (date) {\n return new Date(+date - (date.getTimezoneOffset() * 60000));\n };\n return Timezone;\n}());\nexport { Timezone };\nexport var localTimezoneName = Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC';\nexport var timezoneData = [\n { Value: 'Pacific/Niue', Text: '(UTC-11:00) Niue' },\n { Value: 'Pacific/Pago_Pago', Text: '(UTC-11:00) Pago Pago' },\n { Value: 'Pacific/Honolulu', Text: '(UTC-10:00) Hawaii Time' },\n { Value: 'Pacific/Rarotonga', Text: '(UTC-10:00) Rarotonga' },\n { Value: 'Pacific/Tahiti', Text: '(UTC-10:00) Tahiti' },\n { Value: 'Pacific/Marquesas', Text: '(UTC-09:30) Marquesas' },\n { Value: 'America/Anchorage', Text: '(UTC-09:00) Alaska Time' },\n { Value: 'Pacific/Gambier', Text: '(UTC-09:00) Gambier' },\n { Value: 'America/Los_Angeles', Text: '(UTC-08:00) Pacific Time' },\n { Value: 'America/Tijuana', Text: '(UTC-08:00) Pacific Time - Tijuana' },\n { Value: 'America/Vancouver', Text: '(UTC-08:00) Pacific Time - Vancouver' },\n { Value: 'America/Whitehorse', Text: '(UTC-08:00) Pacific Time - Whitehorse' },\n { Value: 'Pacific/Pitcairn', Text: '(UTC-08:00) Pitcairn' },\n { Value: 'America/Denver', Text: '(UTC-07:00) Mountain Time' },\n { Value: 'America/Phoenix', Text: '(UTC-07:00) Mountain Time - Arizona' },\n { Value: 'America/Mazatlan', Text: '(UTC-07:00) Mountain Time - Chihuahua, Mazatlan' },\n { Value: 'America/Dawson_Creek', Text: '(UTC-07:00) Mountain Time - Dawson Creek' },\n { Value: 'America/Edmonton', Text: '(UTC-07:00) Mountain Time - Edmonton' },\n { Value: 'America/Hermosillo', Text: '(UTC-07:00) Mountain Time - Hermosillo' },\n { Value: 'America/Yellowknife', Text: '(UTC-07:00) Mountain Time - Yellowknife' },\n { Value: 'America/Belize', Text: '(UTC-06:00) Belize' },\n { Value: 'America/Chicago', Text: '(UTC-06:00) Central Time' },\n { Value: 'America/Mexico_City', Text: '(UTC-06:00) Central Time - Mexico City' },\n { Value: 'America/Regina', Text: '(UTC-06:00) Central Time - Regina' },\n { Value: 'America/Tegucigalpa', Text: '(UTC-06:00) Central Time - Tegucigalpa' },\n { Value: 'America/Winnipeg', Text: '(UTC-06:00) Central Time - Winnipeg' },\n { Value: 'America/Costa_Rica', Text: '(UTC-06:00) Costa Rica' },\n { Value: 'America/El_Salvador', Text: '(UTC-06:00) El Salvador' },\n { Value: 'Pacific/Galapagos', Text: '(UTC-06:00) Galapagos' },\n { Value: 'America/Guatemala', Text: '(UTC-06:00) Guatemala' },\n { Value: 'America/Managua', Text: '(UTC-06:00) Managua' },\n { Value: 'America/Cancun', Text: '(UTC-05:00) America Cancun' },\n { Value: 'America/Bogota', Text: '(UTC-05:00) Bogota' },\n { Value: 'Pacific/Easter', Text: '(UTC-05:00) Easter Island' },\n { Value: 'America/New_York', Text: '(UTC-05:00) Eastern Time' },\n { Value: 'America/Iqaluit', Text: '(UTC-05:00) Eastern Time - Iqaluit' },\n { Value: 'America/Toronto', Text: '(UTC-05:00) Eastern Time - Toronto' },\n { Value: 'America/Guayaquil', Text: '(UTC-05:00) Guayaquil' },\n { Value: 'America/Havana', Text: '(UTC-05:00) Havana' },\n { Value: 'America/Jamaica', Text: '(UTC-05:00) Jamaica' },\n { Value: 'America/Lima', Text: '(UTC-05:00) Lima' },\n { Value: 'America/Nassau', Text: '(UTC-05:00) Nassau' },\n { Value: 'America/Panama', Text: '(UTC-05:00) Panama' },\n { Value: 'America/Port-au-Prince', Text: '(UTC-05:00) Port-au-Prince' },\n { Value: 'America/Rio_Branco', Text: '(UTC-05:00) Rio Branco' },\n { Value: 'America/Halifax', Text: '(UTC-04:00) Atlantic Time - Halifax' },\n { Value: 'America/Barbados', Text: '(UTC-04:00) Barbados' },\n { Value: 'Atlantic/Bermuda', Text: '(UTC-04:00) Bermuda' },\n { Value: 'America/Boa_Vista', Text: '(UTC-04:00) Boa Vista' },\n { Value: 'America/Caracas', Text: '(UTC-04:00) Caracas' },\n { Value: 'America/Curacao', Text: '(UTC-04:00) Curacao' },\n { Value: 'America/Grand_Turk', Text: '(UTC-04:00) Grand Turk' },\n { Value: 'America/Guyana', Text: '(UTC-04:00) Guyana' },\n { Value: 'America/La_Paz', Text: '(UTC-04:00) La Paz' },\n { Value: 'America/Manaus', Text: '(UTC-04:00) Manaus' },\n { Value: 'America/Martinique', Text: '(UTC-04:00) Martinique' },\n { Value: 'America/Port_of_Spain', Text: '(UTC-04:00) Port of Spain' },\n { Value: 'America/Porto_Velho', Text: '(UTC-04:00) Porto Velho' },\n { Value: 'America/Puerto_Rico', Text: '(UTC-04:00) Puerto Rico' },\n { Value: 'America/Santo_Domingo', Text: '(UTC-04:00) Santo Domingo' },\n { Value: 'America/Thule', Text: '(UTC-04:00) Thule' },\n { Value: 'America/St_Johns', Text: '(UTC-03:30) Newfoundland Time - St. Johns' },\n { Value: 'America/Araguaina', Text: '(UTC-03:00) Araguaina' },\n { Value: 'America/Asuncion', Text: '(UTC-03:00) Asuncion' },\n { Value: 'America/Belem', Text: '(UTC-03:00) Belem' },\n { Value: 'America/Argentina/Buenos_Aires', Text: '(UTC-03:00) Buenos Aires' },\n { Value: 'America/Campo_Grande', Text: '(UTC-03:00) Campo Grande' },\n { Value: 'America/Cayenne', Text: '(UTC-03:00) Cayenne' },\n { Value: 'America/Cuiaba', Text: '(UTC-03:00) Cuiaba' },\n { Value: 'America/Fortaleza', Text: '(UTC-03:00) Fortaleza' },\n { Value: 'America/Godthab', Text: '(UTC-03:00) Godthab' },\n { Value: 'America/Maceio', Text: '(UTC-03:00) Maceio' },\n { Value: 'America/Miquelon', Text: '(UTC-03:00) Miquelon' },\n { Value: 'America/Montevideo', Text: '(UTC-03:00) Montevideo' },\n { Value: 'Antarctica/Palmer', Text: '(UTC-03:00) Palmer' },\n { Value: 'America/Paramaribo', Text: '(UTC-03:00) Paramaribo' },\n { Value: 'America/Punta_Arenas', Text: '(UTC-03:00) Punta Arenas' },\n { Value: 'America/Recife', Text: '(UTC-03:00) Recife' },\n { Value: 'Antarctica/Rothera', Text: '(UTC-03:00) Rothera' },\n { Value: 'America/Bahia', Text: '(UTC-03:00) Salvador' },\n { Value: 'America/Santiago', Text: '(UTC-03:00) Santiago' },\n { Value: 'Atlantic/Stanley', Text: '(UTC-03:00) Stanley' },\n { Value: 'America/Noronha', Text: '(UTC-02:00) Noronha' },\n { Value: 'America/Sao_Paulo', Text: '(UTC-02:00) Sao Paulo' },\n { Value: 'Atlantic/South_Georgia', Text: '(UTC-02:00) South Georgia' },\n { Value: 'Atlantic/Azores', Text: '(UTC-01:00) Azores' },\n { Value: 'Atlantic/Cape_Verde', Text: '(UTC-01:00) Cape Verde' },\n { Value: 'America/Scoresbysund', Text: '(UTC-01:00) Scoresbysund' },\n { Value: 'Africa/Abidjan', Text: '(UTC+00:00) Abidjan' },\n { Value: 'Africa/Accra', Text: '(UTC+00:00) Accra' },\n { Value: 'Africa/Bissau', Text: '(UTC+00:00) Bissau' },\n { Value: 'Atlantic/Canary', Text: '(UTC+00:00) Canary Islands' },\n { Value: 'Africa/Casablanca', Text: '(UTC+00:00) Casablanca' },\n { Value: 'America/Danmarkshavn', Text: '(UTC+00:00) Danmarkshavn' },\n { Value: 'Europe/Dublin', Text: '(UTC+00:00) Dublin' },\n { Value: 'Africa/El_Aaiun', Text: '(UTC+00:00) El Aaiun' },\n { Value: 'Atlantic/Faroe', Text: '(UTC+00:00) Faeroe' },\n { Value: 'Etc/UTC', Text: '(UTC+00:00) UTC (no daylight saving)' },\n { Value: 'Europe/Lisbon', Text: '(UTC+00:00) Lisbon' },\n { Value: 'Europe/London', Text: '(UTC+00:00) London' },\n { Value: 'Africa/Monrovia', Text: '(UTC+00:00) Monrovia' },\n { Value: 'Atlantic/Reykjavik', Text: '(UTC+00:00) Reykjavik' },\n { Value: 'UTC', Text: 'UTC' },\n { Value: 'Africa/Algiers', Text: '(UTC+01:00) Algiers' },\n { Value: 'Europe/Amsterdam', Text: '(UTC+01:00) Amsterdam' },\n { Value: 'Europe/Andorra', Text: '(UTC+01:00) Andorra' },\n { Value: 'Europe/Berlin', Text: '(UTC+01:00) Berlin' },\n { Value: 'Europe/Brussels', Text: '(UTC+01:00) Brussels' },\n { Value: 'Europe/Budapest', Text: '(UTC+01:00) Budapest' },\n { Value: 'Europe/Belgrade', Text: '(UTC+01:00) Central European Time - Belgrade' },\n { Value: 'Europe/Prague', Text: '(UTC+01:00) Central European Time - Prague' },\n { Value: 'Africa/Ceuta', Text: '(UTC+01:00) Ceuta' },\n { Value: 'Europe/Copenhagen', Text: '(UTC+01:00) Copenhagen' },\n { Value: 'Europe/Gibraltar', Text: '(UTC+01:00) Gibraltar' },\n { Value: 'Africa/Lagos', Text: '(UTC+01:00) Lagos' },\n { Value: 'Europe/Luxembourg', Text: '(UTC+01:00) Luxembourg' },\n { Value: 'Europe/Madrid', Text: '(UTC+01:00) Madrid' },\n { Value: 'Europe/Malta', Text: '(UTC+01:00) Malta' },\n { Value: 'Europe/Monaco', Text: '(UTC+01:00) Monaco' },\n { Value: 'Africa/Ndjamena', Text: '(UTC+01:00) Ndjamena' },\n { Value: 'Europe/Oslo', Text: '(UTC+01:00) Oslo' },\n { Value: 'Europe/Paris', Text: '(UTC+01:00) Paris' },\n { Value: 'Europe/Rome', Text: '(UTC+01:00) Rome' },\n { Value: 'Europe/Stockholm', Text: '(UTC+01:00) Stockholm' },\n { Value: 'Europe/Tirane', Text: '(UTC+01:00) Tirane' },\n { Value: 'Africa/Tunis', Text: '(UTC+01:00) Tunis' },\n { Value: 'Europe/Vienna', Text: '(UTC+01:00) Vienna' },\n { Value: 'Europe/Warsaw', Text: '(UTC+01:00) Warsaw' },\n { Value: 'Europe/Zurich', Text: '(UTC+01:00) Zurich' },\n { Value: 'Asia/Amman', Text: '(UTC+02:00) Amman' },\n { Value: 'Europe/Athens', Text: '(UTC+02:00) Athens' },\n { Value: 'Asia/Beirut', Text: '(UTC+02:00) Beirut' },\n { Value: 'Europe/Bucharest', Text: '(UTC+02:00) Bucharest' },\n { Value: 'Africa/Cairo', Text: '(UTC+02:00) Cairo' },\n { Value: 'Europe/Chisinau', Text: '(UTC+02:00) Chisinau' },\n { Value: 'Asia/Damascus', Text: '(UTC+02:00) Damascus' },\n { Value: 'Asia/Gaza', Text: '(UTC+02:00) Gaza' },\n { Value: 'Europe/Helsinki', Text: '(UTC+02:00) Helsinki' },\n { Value: 'Asia/Jerusalem', Text: '(UTC+02:00) Jerusalem' },\n { Value: 'Africa/Johannesburg', Text: '(UTC+02:00) Johannesburg' },\n { Value: 'Africa/Khartoum', Text: '(UTC+02:00) Khartoum' },\n { Value: 'Europe/Kiev', Text: '(UTC+02:00) Kiev' },\n { Value: 'Africa/Maputo', Text: '(UTC+02:00) Maputo' },\n { Value: 'Europe/Kaliningrad', Text: '(UTC+02:00) Moscow-01 - Kaliningrad' },\n { Value: 'Asia/Nicosia', Text: '(UTC+02:00) Nicosia' },\n { Value: 'Europe/Riga', Text: '(UTC+02:00) Riga' },\n { Value: 'Europe/Sofia', Text: '(UTC+02:00) Sofia' },\n { Value: 'Europe/Tallinn', Text: '(UTC+02:00) Tallinn' },\n { Value: 'Africa/Tripoli', Text: '(UTC+02:00) Tripoli' },\n { Value: 'Europe/Vilnius', Text: '(UTC+02:00) Vilnius' },\n { Value: 'Africa/Windhoek', Text: '(UTC+02:00) Windhoek' },\n { Value: 'Asia/Baghdad', Text: '(UTC+03:00) Baghdad' },\n { Value: 'Europe/Istanbul', Text: '(UTC+03:00) Istanbul' },\n { Value: 'Europe/Minsk', Text: '(UTC+03:00) Minsk' },\n { Value: 'Europe/Moscow', Text: '(UTC+03:00) Moscow+00 - Moscow' },\n { Value: 'Africa/Nairobi', Text: '(UTC+03:00) Nairobi' },\n { Value: 'Asia/Qatar', Text: '(UTC+03:00) Qatar' },\n { Value: 'Asia/Riyadh', Text: '(UTC+03:00) Riyadh' },\n { Value: 'Antarctica/Syowa', Text: '(UTC+03:00) Syowa' },\n { Value: 'Asia/Tehran', Text: '(UTC+03:30) Tehran' },\n { Value: 'Asia/Baku', Text: '(UTC+04:00) Baku' },\n { Value: 'Asia/Dubai', Text: '(UTC+04:00) Dubai' },\n { Value: 'Indian/Mahe', Text: '(UTC+04:00) Mahe' },\n { Value: 'Indian/Mauritius', Text: '(UTC+04:00) Mauritius' },\n { Value: 'Europe/Samara', Text: '(UTC+04:00) Moscow+01 - Samara' },\n { Value: 'Indian/Reunion', Text: '(UTC+04:00) Reunion' },\n { Value: 'Asia/Tbilisi', Text: '(UTC+04:00) Tbilisi' },\n { Value: 'Asia/Yerevan', Text: '(UTC+04:00) Yerevan' },\n { Value: 'Asia/Kabul', Text: '(UTC+04:30) Kabul' },\n { Value: 'Asia/Aqtau', Text: '(UTC+05:00) Aqtau' },\n { Value: 'Asia/Aqtobe', Text: '(UTC+05:00) Aqtobe' },\n { Value: 'Asia/Ashgabat', Text: '(UTC+05:00) Ashgabat' },\n { Value: 'Asia/Dushanbe', Text: '(UTC+05:00) Dushanbe' },\n { Value: 'Asia/Karachi', Text: '(UTC+05:00) Karachi' },\n { Value: 'Indian/Kerguelen', Text: '(UTC+05:00) Kerguelen' },\n { Value: 'Indian/Maldives', Text: '(UTC+05:00) Maldives' },\n { Value: 'Antarctica/Mawson', Text: '(UTC+05:00) Mawson' },\n { Value: 'Asia/Yekaterinburg', Text: '(UTC+05:00) Moscow+02 - Yekaterinburg' },\n { Value: 'Asia/Tashkent', Text: '(UTC+05:00) Tashkent' },\n { Value: 'Asia/Colombo', Text: '(UTC+05:30) Colombo' },\n { Value: 'Asia/Kolkata', Text: '(UTC+05:30) India Standard Time' },\n { Value: 'Asia/Katmandu', Text: '(UTC+05:45) Katmandu' },\n { Value: 'Asia/Almaty', Text: '(UTC+06:00) Almaty' },\n { Value: 'Asia/Bishkek', Text: '(UTC+06:00) Bishkek' },\n { Value: 'Indian/Chagos', Text: '(UTC+06:00) Chagos' },\n { Value: 'Asia/Dhaka', Text: '(UTC+06:00) Dhaka' },\n { Value: 'Asia/Omsk', Text: '(UTC+06:00) Moscow+03 - Omsk' },\n { Value: 'Asia/Thimphu', Text: '(UTC+06:00) Thimphu' },\n { Value: 'Antarctica/Vostok', Text: '(UTC+06:00) Vostok' },\n { Value: 'Indian/Cocos', Text: '(UTC+06:30) Cocos' },\n { Value: 'Asia/Yangon', Text: '(UTC+06:30) Rangoon' },\n { Value: 'Asia/Bangkok', Text: '(UTC+07:00) Bangkok' },\n { Value: 'Indian/Christmas', Text: '(UTC+07:00) Christmas' },\n { Value: 'Antarctica/Davis', Text: '(UTC+07:00) Davis' },\n { Value: 'Asia/Saigon', Text: '(UTC+07:00) Hanoi' },\n { Value: 'Asia/Hovd', Text: '(UTC+07:00) Hovd' },\n { Value: 'Asia/Jakarta', Text: '(UTC+07:00) Jakarta' },\n { Value: 'Asia/Krasnoyarsk', Text: '(UTC+07:00) Moscow+04 - Krasnoyarsk' },\n { Value: 'Asia/Brunei', Text: '(UTC+08:00) Brunei' },\n { Value: 'Asia/Shanghai', Text: '(UTC+08:00) China Time - Beijing' },\n { Value: 'Asia/Choibalsan', Text: '(UTC+08:00) Choibalsan' },\n { Value: 'Asia/Hong_Kong', Text: '(UTC+08:00) Hong Kong' },\n { Value: 'Asia/Kuala_Lumpur', Text: '(UTC+08:00) Kuala Lumpur' },\n { Value: 'Asia/Macau', Text: '(UTC+08:00) Macau' },\n { Value: 'Asia/Makassar', Text: '(UTC+08:00) Makassar' },\n { Value: 'Asia/Manila', Text: '(UTC+08:00) Manila' },\n { Value: 'Asia/Irkutsk', Text: '(UTC+08:00) Moscow+05 - Irkutsk' },\n { Value: 'Asia/Singapore', Text: '(UTC+08:00) Singapore' },\n { Value: 'Asia/Taipei', Text: '(UTC+08:00) Taipei' },\n { Value: 'Asia/Ulaanbaatar', Text: '(UTC+08:00) Ulaanbaatar' },\n { Value: 'Australia/Perth', Text: '(UTC+08:00) Western Time - Perth' },\n { Value: 'Asia/Pyongyang', Text: '(UTC+08:30) Pyongyang' },\n { Value: 'Asia/Dili', Text: '(UTC+09:00) Dili' },\n { Value: 'Asia/Jayapura', Text: '(UTC+09:00) Jayapura' },\n { Value: 'Asia/Yakutsk', Text: '(UTC+09:00) Moscow+06 - Yakutsk' },\n { Value: 'Pacific/Palau', Text: '(UTC+09:00) Palau' },\n { Value: 'Asia/Seoul', Text: '(UTC+09:00) Seoul' },\n { Value: 'Asia/Tokyo', Text: '(UTC+09:00) Tokyo' },\n { Value: 'Australia/Darwin', Text: '(UTC+09:30) Central Time - Darwin' },\n { Value: 'Antarctica/DumontDUrville', Text: '(UTC+10:00) Dumont D\"Urville' },\n { Value: 'Australia/Brisbane', Text: '(UTC+10:00) Eastern Time - Brisbane' },\n { Value: 'Pacific/Guam', Text: '(UTC+10:00) Guam' },\n { Value: 'Asia/Vladivostok', Text: '(UTC+10:00) Moscow+07 - Vladivostok' },\n { Value: 'Pacific/Port_Moresby', Text: '(UTC+10:00) Port Moresby' },\n { Value: 'Pacific / Chuuk', Text: '(UTC+10:00) Truk' },\n { Value: 'Australia/Adelaide', Text: '(UTC+10:30) Central Time - Adelaide' },\n { Value: 'Antarctica/Casey', Text: '(UTC+11:00) Casey' },\n { Value: 'Australia/Hobart', Text: '(UTC+11:00) Eastern Time - Hobart' },\n { Value: 'Australia/Sydney', Text: '(UTC+11:00) Eastern Time - Melbourne, Sydney' },\n { Value: 'Pacific/Efate', Text: '(UTC+11:00) Efate' },\n { Value: 'Pacific/Guadalcanal', Text: '(UTC+11:00) Guadalcanal' },\n { Value: 'Pacific/Kosrae', Text: '(UTC+11:00) Kosrae' },\n { Value: 'Asia/Magadan', Text: '(UTC+11:00) Moscow+08 - Magadan' },\n { Value: 'Pacific / Norfolk', Text: '(UTC+11:00) Norfolk' },\n { Value: 'Pacific/Noumea', Text: '(UTC+11:00) Noumea' },\n { Value: 'Pacific/Pohnpei', Text: '(UTC+11:00) Ponape' },\n { Value: 'Pacific/Funafuti', Text: '(UTC+12:00) Funafuti' },\n { Value: 'Pacific/Kwajalein', Text: '(UTC+12:00) Kwajalein' },\n { Value: 'Pacific/Majuro', Text: '(UTC+12:00) Majuro' },\n { Value: 'Asia/Kamchatka', Text: '(UTC+12:00) Moscow+09 - Petropavlovsk - Kamchatskiy' },\n { Value: 'Pacific / Nauru', Text: '(UTC+12:00) Nauru' },\n { Value: 'Pacific/Tarawa', Text: '(UTC+12:00) Tarawa' },\n { Value: 'Pacific/Wake', Text: '(UTC+12:00) Wake' },\n { Value: 'Pacific/Wallis', Text: '(UTC+12:00) Wallis' },\n { Value: 'Pacific/Auckland', Text: '(UTC+13:00) Auckland' },\n { Value: 'Pacific/Enderbury', Text: '(UTC+13:00) Enderbury' },\n { Value: 'Pacific/Fakaofo', Text: '(UTC+13:00) Fakaofo' },\n { Value: 'Pacific/Fiji', Text: '(UTC+13:00) Fiji' },\n { Value: 'Pacific/Tongatapu', Text: '(UTC+13:00) Tongatapu' },\n { Value: 'Pacific/Apia', Text: '(UTC+14:00) Apia' },\n { Value: 'Pacific/Kiritimati', Text: '(UTC+14:00) Kiritimati' }\n];\n","import { isNullOrUndefined, closest, addClass, extend, EventHandler, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { Timezone } from '../timezone/timezone';\nimport { generate } from '../../recurrence-editor/date-generator';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\n/**\n * EventBase for appointment rendering\n */\nvar EventBase = /** @class */ (function () {\n /**\n * Constructor for EventBase\n */\n function EventBase(parent) {\n this.slots = [];\n this.parent = parent;\n this.timezone = new Timezone();\n }\n EventBase.prototype.processData = function (events, timeZonePropChanged, oldTimezone) {\n var start = this.parent.activeView.startDate();\n var end = this.parent.activeView.endDate();\n var fields = this.parent.eventFields;\n this.parent.eventsProcessed = [];\n var processed = [];\n var temp = 1;\n var generateID = false;\n if (events.length > 0 && isNullOrUndefined(events[0][fields.id])) {\n generateID = true;\n }\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var event_1 = events_1[_i];\n if (generateID) {\n event_1[fields.id] = temp++;\n }\n if (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 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') {\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 = (this.parent.activeCellsData.element ||\n selectedCell[selectedCell.length - 1]);\n this.parent.keyboardInteractionModule.selectCells(false, target);\n }\n return;\n }\n var selectedAppointments = this.getSelectedAppointments();\n if (selectedAppointments.length > 0) {\n selectedAppointments[selectedAppointments.length - 1].focus();\n return;\n }\n };\n EventBase.prototype.selectWorkCellByTime = function (eventsData) {\n var target;\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n return target;\n }\n if (eventsData.length > 0) {\n var selectedObject = eventsData[eventsData.length - 1];\n var eventStartTime = selectedObject[this.parent.eventFields.startTime];\n var nearestTime = new Date(+eventStartTime).setMinutes(0, 0, 0);\n var isAllDay = this.isAllDayAppointment(selectedObject);\n if (this.parent.currentView === 'Month' || isAllDay) {\n nearestTime = new Date(+eventStartTime).setHours(0, 0, 0, 0);\n }\n var targetArea = void 0;\n if (isAllDay && ['Day', 'Week', 'WorkWeek'].indexOf(this.parent.currentView) !== -1) {\n targetArea = this.parent.getAllDayRow();\n }\n else {\n targetArea = this.parent.getContentTable();\n }\n 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) {\n EventHandler.add(element, 'click', this.eventClick, this);\n EventHandler.add(element, 'dblclick', this.eventDoubleClick, this);\n };\n EventBase.prototype.eventClick = function (eventData) {\n if (eventData.ctrlKey && eventData.which === 1 && this.parent.keyboardInteractionModule) {\n this.parent.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.getEventMaxId = function () {\n var fields = this.parent.eventFields;\n if (this.parent.eventsData.length < 1) {\n return 0;\n }\n return Math.max.apply(Math, this.parent.eventsData.map(function (event) { return event[fields.id]; }));\n };\n EventBase.prototype.activeEventData = function (eventData) {\n var _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 exDate = this.excludeDateCheck(data[fields.startTime], parentEvent[fields.recurrenceException]);\n if (exDate !== parentEvent[fields.recurrenceException]) {\n parentEvent[fields.recurrenceException] = exDate;\n data[fields.recurrenceID] = parentEvent[fields.id];\n this.processCrudTimezone(parentEvent);\n editParms.changedRecords.push(parentEvent);\n this.processCrudTimezone(data);\n editParms.addedRecords.push(data);\n }\n else {\n this.processCrudTimezone(data);\n editParms.changedRecords.push(data);\n }\n break;\n case 'EditSeries':\n args.data = data;\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var delApp = new DataManager(this.parent.eventsData).\n executeLocal(new Query().where(fields.recurrenceID, 'equal', parentEvent[fields.id]));\n data[fields.id] = parentEvent[fields.id];\n data[fields.recurrenceException] = null;\n data[fields.recurrenceID] = null;\n this.processCrudTimezone(data);\n editParms.changedRecords.push(data);\n for (var _i = 0, delApp_1 = delApp; _i < delApp_1.length; _i++) {\n var event_2 = delApp_1[_i];\n editParms.deletedRecords.push(event_2);\n }\n break;\n }\n promise = this.parent.dataModule.dataManager.saveChanges(editParms, fields.id, null, this.getQuery());\n }\n this.parent.eventBase.selectWorkCellByTime(dataObj);\n var crudArgs = { requestType: 'eventChanged', cancel: false, data: args.data, promise: promise };\n this.refreshData(crudArgs);\n };\n Crud.prototype.deleteEvent = function (id, action) {\n var fields = this.parent.eventFields;\n var editParms = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var dataObj = [];\n var normalEvent = [];\n var recEvent = [];\n switch (typeof id) {\n case 'string':\n case 'number':\n dataObj = new DataManager(this.parent.eventsData).\n executeLocal(new Query().where(fields.id, 'equal', id));\n break;\n case 'object':\n (id instanceof Array) ? dataObj = id : dataObj.push(id);\n break;\n }\n for (var _i = 0, dataObj_1 = dataObj; _i < dataObj_1.length; _i++) {\n var event_3 = dataObj_1[_i];\n (!isNullOrUndefined(event_3[fields.recurrenceRule])) ? recEvent.push(event_3) : normalEvent.push(event_3);\n }\n var args = { requestType: 'eventRemove', cancel: false };\n if (action !== 'DeleteOccurrence') {\n args.data = dataObj;\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n }\n if (isNullOrUndefined(action) || normalEvent.length > 0) {\n for (var _a = 0, normalEvent_1 = normalEvent; _a < normalEvent_1.length; _a++) {\n var event_4 = normalEvent_1[_a];\n editParms.deletedRecords.push(event_4);\n }\n }\n if (recEvent.length > 0) {\n switch (action) {\n case 'Delete':\n case 'DeleteOccurrence':\n for (var i = 0; i < recEvent.length; i++) {\n var parentEvent = this.parent.eventBase.getRecurrenceEvent(recEvent[i]);\n args.data = { occurrence: recEvent[i], parent: parentEvent };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n parentEvent[fields.recurrenceException] =\n this.excludeDateCheck(recEvent[i][fields.startTime], parentEvent[fields.recurrenceException]);\n this.processCrudTimezone(parentEvent);\n editParms.changedRecords.push(parentEvent);\n if (recEvent[i][fields.id] !== parentEvent[fields.id]) {\n editParms.deletedRecords.push(recEvent[i]);\n }\n }\n break;\n case 'DeleteSeries':\n for (var _b = 0, recEvent_1 = recEvent; _b < recEvent_1.length; _b++) {\n var app = recEvent_1[_b];\n var predicate = new Predicate(fields.id, 'equal', (app[fields.recurrenceID] || 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 editParms.deletedRecords.push(app);\n }\n break;\n }\n }\n var promise;\n promise = this.parent.dataModule.dataManager.saveChanges(editParms, fields.id, null, this.getQuery());\n this.parent.eventBase.selectWorkCellByTime(dataObj);\n var crudArgs = { requestType: 'eventRemoved', cancel: false, data: args.data, promise: promise };\n this.refreshData(crudArgs);\n };\n Crud.prototype.processCrudTimezone = function (events) {\n var fields = this.parent.eventFields;\n if (events[fields.startTimezone] || events[fields.endTimezone]) {\n var startTimezone = events[fields.startTimezone] || events[fields.endTimezone];\n var endTimezone = events[fields.endTimezone] || events[fields.startTimezone];\n if (this.parent.timezone) {\n var zone = this.parent.timezone;\n events[fields.startTime] = this.timezone.convert(events[fields.startTime], startTimezone, zone);\n events[fields.endTime] = this.timezone.convert(events[fields.endTime], endTimezone, zone);\n events[fields.startTime] = this.timezone.remove(events[fields.startTime], zone);\n events[fields.endTime] = this.timezone.remove(events[fields.endTime], zone);\n }\n else {\n events[fields.startTime] = this.timezone.remove(events[fields.startTime], startTimezone);\n events[fields.endTime] = this.timezone.remove(events[fields.endTime], endTimezone);\n }\n }\n else if (this.parent.timezone) {\n events[fields.startTime] = this.timezone.remove(events[fields.startTime], this.parent.timezone);\n events[fields.endTime] = this.timezone.remove(events[fields.endTime], this.parent.timezone);\n }\n };\n Crud.prototype.excludeDateCheck = function (eventStartTime, exceptionDateList) {\n var exDate = getRecurrenceStringFromDate(eventStartTime);\n if (!isNullOrUndefined(exceptionDateList)) {\n if (exceptionDateList.indexOf(exDate) === -1) {\n exceptionDateList = !(isNullOrUndefined(exceptionDateList)) ? exceptionDateList + ',' + exDate : exDate;\n }\n }\n else {\n exceptionDateList = exDate;\n }\n return exceptionDateList;\n };\n return Crud;\n}());\nexport { Crud };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport { FormValidator } from '@syncfusion/ej2-inputs';\nimport * as cls from '../base/css-constant';\n/**\n * Appointment window field validation\n */\nvar FieldValidator = /** @class */ (function () {\n function FieldValidator() {\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 } 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';\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: 'fit', Y: 'flip' }),\n position: (this.parent.isAdaptive ? { X: 'left', Y: 'top' } : { X: 'center', 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 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 cellTemplate = \"
    \" +\n (\"
    \") +\n (\"
    \") +\n (\"
    \") +\n (\"
    \") +\n (\"
    \" + cellDetails.details + \"
    \") +\n ((this.parent.activeViewOptions.group.resources.length > 0 ? \"
    \" +\n (\"
    \" + this.getResourceText(args, 'cell') + \"
    \") : '') + \"
    \") +\n (\"
    \");\n var quickCellPopup = createElement('div', { className: cls.CELL_POPUP_CLASS, innerHTML: cellTemplate });\n Input.createInput({\n element: quickCellPopup.querySelector('.' + cls.SUBJECT_CLASS),\n properties: { placeholder: this.l10n.getConstant('addTitle') }\n });\n var closeIcon = quickCellPopup.querySelector('.' + cls.CLOSE_CLASS);\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeIcon, this.quickPopupHide);\n var moreButton = quickCellPopup.querySelector('.' + cls.QUICK_POPUP_EVENT_DETAILS_CLASS);\n this.renderButton('e-flat', '', false, moreButton, this.detailsClick);\n var saveButton = quickCellPopup.querySelector('.' + cls.EVENT_CREATE_CLASS);\n this.renderButton('e-flat e-primary', '', this.parent.activeViewOptions.readonly, saveButton, this.saveClick);\n this.quickPopup.content = quickCellPopup;\n this.quickPopup.dataBind();\n this.applyFormValidation();\n if (this.morePopup) {\n this.morePopup.hide();\n }\n var isSameTarget = this.quickPopup.relateTo === target;\n this.quickPopup.relateTo = target;\n if (isSameTarget && this.quickPopup.element.classList.contains(cls.POPUP_OPEN)) {\n quickCellPopup.querySelector('.' + cls.SUBJECT_CLASS).focus();\n }\n else {\n this.beforeQuickPopupOpen(target);\n }\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 eventData = events.event;\n var args = this.getFormattedString(eventData);\n var eventTemplate = \"
    \" +\n (\"\") +\n (\"\") +\n (\"
    \") +\n (\"
    \") +\n (args.eventSubject + \"
    \") +\n (\"
    \" + args.details + \"
    \") +\n ((eventData[this.parent.eventFields.recurrenceRule] ? \"
    \" + this.getRecurrenceSummary(eventData) + \"
    \") : '') + \"
    \") +\n (\"\" + (eventData[this.parent.eventFields.location] ? \"
    \") +\n (eventData[this.parent.eventFields.location] + \"
    \") : '') + (eventData[this.parent.eventFields.startTimezone] ||\n eventData[this.parent.eventFields.endTimezone] ? \"
    \") +\n (this.getTimezone(eventData) + \"
    \") : '')) +\n (\"\" + (eventData[this.parent.eventFields.description] ? \"
    \") +\n (eventData[this.parent.eventFields.description] + \"
    \") : '')) +\n ((this.parent.resources.length > 0 ? \"
    \") +\n (this.getResourceText(events, 'event') + \"
    \") : '') + \"
    \") +\n (\"
    \" + (this.parent.isAdaptive ? '' : \"\") +\n (\"\")) + \"
    \");\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 this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.EDIT_ICON_CLASS, false, editIcon, this.editClick);\n var deleteIcon = quickEventPopup.querySelector('.' + cls.DELETE_CLASS);\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.DELETE_ICON_CLASS, readonly, deleteIcon, this.deleteClick);\n var closeIcon = quickEventPopup.querySelector('.' + cls.CLOSE_CLASS);\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeIcon, this.quickPopupHide);\n if (!this.parent.isAdaptive) {\n var editButton = quickEventPopup.querySelector('.' + cls.EDIT_EVENT_CLASS);\n this.renderButton('e-flat e-primary', '', false, editButton, this.editClick);\n var deleteButton = quickEventPopup.querySelector('.' + cls.DELETE_EVENT_CLASS);\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 var isSameTarget = this.quickPopup.relateTo === closest(events.element, '.' + cls.APPOINTMENT_CLASS);\n this.quickPopup.relateTo = this.parent.isAdaptive ? document.body :\n closest(events.element, '.' + cls.APPOINTMENT_CLASS);\n if (isSameTarget && this.quickPopup.element.classList.contains(cls.POPUP_OPEN)) {\n editIcon.focus();\n if (!this.parent.isAdaptive) {\n var editButton = quickEventPopup.querySelector('.' + cls.EDIT_EVENT_CLASS);\n editButton.focus();\n }\n this.applyEventColor();\n }\n else {\n this.beforeQuickPopupOpen(events.element);\n }\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_1 = eventData[this.parent.resourceBase.resourceCollection.slice(-1)[0].field];\n if (!Array.isArray(resourceData_1)) {\n resourceData_1 = [resourceData_1];\n }\n var resourceCollection_2 = this.parent.resourceBase.lastResourceLevel;\n if (!this.parent.activeViewOptions.group.byGroupID) {\n var resourceData_2 = this.parent.resourceBase.resourceCollection.slice(-1)[0]\n .dataSource;\n resourceCollection_2 = this.parent.resourceBase.lastResourceLevel.slice(0, resourceData_2.length);\n }\n resourceData_1.map(function (value, index) {\n return resourceCollection_2.forEach(function (obj) {\n if (obj.resourceData[obj.resource.idField] === value) {\n resourceValue += obj.resourceData[obj.resource.textField];\n if (resourceData_1.length !== index + 1) {\n resourceValue += ', ';\n }\n }\n });\n });\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, 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 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).children, 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).children, cls.CURRENTDATE_CLASS);\n }\n this.morePopup.relateTo = closest(target, '.' + cls.WORK_CELLS_CLASS);\n var eventProp = { type: 'EventContainer', data: data, cancel: false, element: this.morePopup.element };\n this.parent.trigger(event.popupOpen, eventProp);\n if (eventProp.cancel) {\n return;\n }\n this.morePopup.show();\n };\n QuickPopups.prototype.saveClick = function () {\n if (!this.quickPopup.element.querySelector('.' + cls.FORM_CLASS).ej2_instances[0].validate()) {\n return;\n }\n var fields = this.parent.eventFields;\n var saveObj = {};\n saveObj[fields.id] = this.parent.eventBase.getEventMaxId() + 1;\n saveObj[fields.subject] = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS).value ||\n this.parent.eventSettings.fields.subject.default;\n saveObj[fields.startTime] = this.parent.activeCellsData.startTime;\n saveObj[fields.endTime] = this.parent.activeCellsData.endTime;\n saveObj[fields.isAllDay] = this.parent.activeCellsData.isAllDay;\n 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 subject = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS).value;\n if (subject !== '') {\n var args = extend(this.parent.activeCellsData, { subject: subject });\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 = util.addDays(startDate, 1);\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 = -(this.quickPopup.element.offsetWidth / 2);\n this.quickPopup.offsetY = -this.quickPopup.element.offsetHeight;\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 if (this.quickPopup.element.querySelector('.' + cls.POPUP_FOOTER_CLASS).offsetParent) {\n colorEle = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS);\n colorEle.style.borderLeftColor = color;\n color = \"rgba(\" + color.match(/\\d+/g).join() + \",0.3)\";\n }\n colorEle.style.backgroundColor = color;\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('Day');\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: '.' + cls.APPOINTMENT_CLASS,\n beforeRender: this.onBeforeRender.bind(this),\n enableRtl: this.parent.enableRtl\n });\n this.tooltipObj.appendTo(this.parent.element);\n }\n EventTooltip.prototype.onBeforeRender = function (args) {\n if (!isNullOrUndefined(args.target.getAttribute('data-tooltip-id'))) {\n return;\n }\n var record = this.parent.eventBase.getEventByGuid(args.target.getAttribute('data-guid'));\n var content = '';\n if (!isNullOrUndefined(this.parent.eventSettings.tooltipTemplate)) {\n 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 this.startState(this.repeatType.value.toString().toUpperCase(), NEVER, this.startDate);\n this.updateForm(this.repeatType.value.toString());\n this.applyCustomClass(this.cssClass);\n };\n RecurrenceEditor.prototype.triggerChangeEvent = function () {\n if (this.renderStatus) {\n var value = this.getRecurrenceRule();\n this.trigger('change', { value: value });\n this.setProperties({ value: value }, false);\n }\n };\n RecurrenceEditor.prototype.resetDayButton = function () {\n var elements = [].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 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.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', {\n className: REPEAT_CONTAINER_CLASS\n });\n var button = createElement('button', {\n className: REPEAT_BUTTON_CLASS,\n attrs: { type: 'button', 'title': this.l10n.getConstant('editRecurrence') }\n });\n 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.activeViewOptions.group.resources.length > 0 || 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 var resourceDiv = this.renderMultiSelect(i);\n resourceParentDiv.appendChild(resourceDiv);\n }\n parentDiv.appendChild(resourceParentDiv);\n }\n parentDiv.appendChild(description);\n var submit = createElement('button', {\n attrs: { type: 'hidden', title: 'submit', style: 'display:none' }\n });\n parentDiv.appendChild(submit);\n return parentDiv;\n };\n EventWindow.prototype.createRecurrenceEditor = function (parentDiv) {\n var rec = createElement('div');\n parentDiv.appendChild(rec);\n this.recurrenceEditor = this.renderRecurrenceEditor();\n this.recurrenceEditor.appendTo(rec);\n };\n EventWindow.prototype.createDivElement = function (className) {\n return createElement('div', { className: className });\n };\n EventWindow.prototype.createInputElement = function (className, fieldName, type) {\n return createElement(type || 'input', {\n className: className, attrs: {\n type: 'text', name: fieldName, value: '',\n 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 labelValue;\n var resourceData = this.parent.resourceBase.resourceCollection[index];\n var fieldName = resourceData.field;\n var value = 'e-' + fieldName;\n 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 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 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 (this.parent.activeViewOptions.group.byGroupID && this.parent.activeViewOptions.group.resources.length > 0) {\n for (var i = 0; i < this.parent.resourceBase.resourceCollection.length; i++) {\n if (this.parent.resourceBase.resourceCollection[i].field === args.element.getAttribute('name')\n && i < this.parent.resourceBase.resourceCollection.length - 1) {\n var resObject = this.createInstance(i);\n var datasource = [];\n for (var j = 0; j < args.value.length; j++) {\n var filter = new DataManager({\n json: this.parent.resourceBase.resourceCollection[i + 1].dataSource\n }).executeLocal(new Query().\n where(this.parent.resourceBase.resourceCollection[i + 1].groupIDField, 'equal', args.value[j]))[0];\n var groupId = filter[this.parent.resourceBase.resourceCollection[i].idField];\n var filterRes = this.filterDatasource(i, groupId);\n for (var k = 0; k < filterRes.length; k++) {\n datasource.push(filterRes[k]);\n }\n }\n resObject.dataSource = datasource;\n resObject.dataBind();\n }\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).ej2_instances[0];\n return resObject;\n };\n EventWindow.prototype.onDropdownResourceChange = function (args) {\n if (this.parent.activeViewOptions.group.resources.length > 0 && this.parent.activeViewOptions.group.byGroupID) {\n for (var i = 0; i < this.parent.resourceBase.resourceCollection.length; i++) {\n if ((i < this.parent.resourceBase.resourceCollection.length - 1) &&\n this.parent.resourceBase.resourceCollection[i].field === args.element.getAttribute('name')) {\n var resObj = this.createInstance(i);\n var groupId = args.itemData[this.parent.resources[i].idField];\n resObj.dataSource = this.filterDatasource(i, groupId);\n resObj.dataBind();\n resObj.value = (this.parent.resourceBase.resourceCollection[i + 1].allowMultiple) ?\n [resObj.dataSource[0][this.parent.resources[i + 1].idField]] :\n resObj.dataSource[0][this.parent.resources[i + 1].idField];\n }\n }\n }\n };\n EventWindow.prototype.filterDatasource = function (index, groupId) {\n var resourceData = this.parent.resourceBase.resourceCollection[index + 1];\n var datas = resourceData.dataSource;\n var filter = new DataManager({ json: datas }).executeLocal(new Query().where(resourceData.groupIDField, 'equal', groupId));\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 (args) {\n this.element.querySelector('.' + cls.FORM_CLASS).removeAttribute('data-id');\n var event = args;\n this.element.querySelector('.' + cls.EVENT_WINDOW_TITLE_TEXT_CLASS).innerHTML = this.l10n.getConstant('newEvent');\n var eventObj = {};\n if (event.subject) {\n eventObj[this.fields.subject] = event.subject;\n }\n eventObj[this.fields.startTime] = event.startTime;\n eventObj[this.fields.endTime] = event.endTime;\n eventObj[this.fields.isAllDay] = event.isAllDay;\n eventObj.Timezone = false;\n this.repeatStartDate = eventObj[this.fields.startTime];\n this.repeatRule = '';\n 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();\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 eventObj[this.fields.startTimezone] = eventObj[this.fields.startTimezone] || eventObj[this.fields.endTimezone];\n eventObj[this.fields.endTimezone] = eventObj[this.fields.endTimezone] || eventObj[this.fields.startTimezone];\n if (this.parent.timezone) {\n var startTz = eventObj[this.fields.startTimezone];\n var endTz = eventObj[this.fields.endTimezone];\n eventObj[this.fields.startTime] =\n this.timezone.convert(eventObj[this.fields.startTime], this.parent.timezone, startTz);\n eventObj[this.fields.endTime] =\n this.timezone.convert(eventObj[this.fields.endTime], this.parent.timezone, endTz);\n }\n }\n else {\n timezoneValue = false;\n }\n eventObj.Timezone = timezoneValue;\n timezoneObj.checked = timezoneValue;\n timezoneObj.dataBind();\n }\n this.showDetails(eventObj);\n if (eventObj[this.fields.recurrenceRule] && this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(eventObj[this.fields.recurrenceRule], eventObj[this.fields.startTime]);\n }\n else if (!this.parent.isAdaptive && this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule('');\n }\n this.repeatStartDate = eventObj[this.fields.startTime];\n this.repeatRule = '';\n if (eventObj[this.fields.recurrenceRule]) {\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(eventObj[this.fields.recurrenceRule], eventObj[this.fields.startTime]);\n }\n this.repeatRule = eventObj[this.fields.recurrenceRule];\n }\n if (this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n if (eventObj[this.fields.recurrenceRule]) {\n 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 var obj = {};\n obj = { Value: localTimezoneName, Text: localTimezoneName };\n timezone.push(obj);\n startTimezoneObj.dataSource = timezone;\n endTimezoneObj.dataSource = timezone;\n startTimezoneObj.dataBind();\n endTimezoneObj.dataBind();\n }\n }\n startTimezoneObj.value = startTimezoneObj.value || this.parent.timezone || localTimezoneName;\n endTimezoneObj.value = endTimezoneObj.value || this.parent.timezone || localTimezoneName;\n startTimezoneObj.dataBind();\n endTimezoneObj.dataBind();\n }\n else {\n removeClass([timezoneDiv], cls.ENABLE_CLASS);\n }\n };\n EventWindow.prototype.resetFormFields = function () {\n var formelement = this.getFormElements();\n for (var index = 0, len = formelement.length; index < len; index++) {\n var columnName = formelement[index].name;\n if (!isNullOrUndefined(columnName) && columnName !== '') {\n this.setDefaultValueToElement(formelement[index]);\n }\n }\n };\n EventWindow.prototype.eventSave = function (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 = {};\n var formelement = this.getFormElements();\n for (var _i = 0, formelement_2 = formelement; _i < formelement_2.length; _i++) {\n var currentElement = formelement_2[_i];\n var columnName = currentElement.name;\n if (!isNullOrUndefined(columnName) && columnName !== '') {\n eventObj[columnName] = this.getValueFromElement(currentElement);\n }\n }\n if (!eventObj.Timezone) {\n eventObj[this.fields.startTimezone] = null;\n eventObj[this.fields.endTimezone] = null;\n }\n if (isNullOrUndefined(this.parent.editorTemplate)) {\n delete eventObj.Timezone;\n delete eventObj.Repeat;\n if (!eventObj[this.fields.startTime] || !eventObj[this.fields.endTime]) {\n this.parent.quickPopup.openValidationError('invalidDateError');\n return;\n }\n if (eventObj[this.fields.startTime] > eventObj[this.fields.endTime]) {\n this.parent.quickPopup.openValidationError('startEndError');\n return;\n }\n }\n 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.startTime].getTime())), 1);\n }\n var ruleData = this.recurrenceEditor ? this.recurrenceEditor.getRecurrenceRule() : null;\n eventObj[this.fields.recurrenceRule] = ruleData ? ruleData : undefined;\n if (!isNullOrUndefined(eventId)) {\n var editedData = new DataManager({ json: this.parent.eventsData }).\n executeLocal(new Query().where(this.fields.id, 'equal', parseInt(eventId, 10)))[0];\n eventObj = extend({}, editedData, eventObj);\n if (!isNullOrUndefined(editedData[this.fields.recurrenceRule])) {\n if (this.parent.currentAction === 'EditOccurrence') {\n if (!eventObj[this.fields.recurrenceID]) {\n eventObj[this.fields.id] = this.parent.eventBase.getEventMaxId() + 1;\n }\n if (this.editOccurrenceValidation(eventId, eventObj)) {\n this.parent.quickPopup.openRecurrenceValidationAlert('sameDayAlert');\n return;\n }\n }\n if (this.parent.currentAction === 'EditSeries' || eventObj[this.fields.id] !==\n editedData[this.fields.id]) {\n eventObj[this.fields.recurrenceID] = editedData[this.fields.id];\n }\n if ((this.parent.activeViewOptions.group.resources.length > 0 || this.parent.resources.length > 0)\n && !this.parent.activeViewOptions.group.allowGroupEdit) {\n this.resourceSaveEvent(eventObj, 'save', this.parent.currentAction);\n }\n else {\n this.parent.saveEvent(eventObj, this.parent.currentAction);\n }\n }\n else {\n if ((this.parent.activeViewOptions.group.resources.length > 0 || this.parent.resources.length > 0)\n && !this.parent.activeViewOptions.group.allowGroupEdit) {\n this.resourceSaveEvent(eventObj, 'save');\n }\n else {\n this.parent.saveEvent(eventObj);\n }\n }\n }\n else {\n this.parent.currentAction = 'Add';\n if ((this.parent.activeViewOptions.group.resources.length > 0 || this.parent.resources.length > 0)\n && !this.parent.activeViewOptions.group.allowGroupEdit) {\n this.resourceSaveEvent(eventObj, 'add');\n }\n else {\n eventObj[this.fields.id] = this.parent.eventBase.getEventMaxId() + 1;\n this.parent.addEvent(eventObj);\n }\n }\n this.dialogObject.hide();\n };\n EventWindow.prototype.recurrenceValidation = function (startDate, endDate, alert) {\n var alertMessage;\n var recEditor = this.recurrenceEditor;\n var event = this.eventData;\n var interval = this.getInstance('e-repeat-interval.e-numerictextbox').value;\n if (alert !== this.l10n.getConstant('ok')) {\n if (this.parent.currentAction === 'EditSeries' && !isNullOrUndefined(event[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(parseInt(eventId, 10));\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 temp;\n var _loop_1 = function (i) {\n var events = extend({}, eventObj, null, true);\n events[this_1.fields.id] = this_1.parent.eventBase.getEventMaxId() + 1;\n 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() + 1 + 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() + 1 + j;\n eventList.push(temp[j]);\n }\n }\n else {\n events[_this.fields.id] = _this.parent.eventBase.getEventMaxId() + 1 + i;\n eventList.push(events);\n }\n }\n };\n if (this_1.parent.activeViewOptions.group.byGroupID && (!isNullOrUndefined(lastlevel))) {\n var filter = lastlevel.filter(function (obj) {\n return obj.resourceData[lastResouceData.idField] === resourceData[i];\n })[0];\n var groupOrder = filter.groupOrder;\n for (var index = 0; index < this_1.parent.resourceBase.resourceCollection.length; index++) {\n var field = this_1.parent.resourceBase.resourceCollection[index].field;\n events[field] = (groupOrder[index] instanceof Array) ? groupOrder[index][0] : groupOrder[index];\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 () {\n return [].slice.call(this.element.querySelectorAll('.' + EVENT_FIELD));\n };\n EventWindow.prototype.getValueFromElement = function (element) {\n var value;\n if (element.classList.contains('e-datepicker')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-datetimepicker')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-dropdownlist')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-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();\n for (var _i = 0, formelement_3 = formelement; _i < formelement_3.length; _i++) {\n var element = formelement_3[_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 * 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 'weekAgenda':\n // this.parent.activeView = this.parent.weekAgendaModule;\n // break;\n // case 'workWeekAgenda':\n // this.parent.activeView = this.parent.workWeekAgendaModule;\n // break;\n case 'MonthAgenda':\n this.parent.activeView = this.parent.monthAgendaModule;\n break;\n }\n if (isNullOrUndefined(this.parent.activeView)) {\n var firstView = this.parent.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.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 * Configuration of options related to working hours on Schedule.\n */\nvar WorkHours = /** @class */ (function (_super) {\n __extends(WorkHours, _super);\n function WorkHours() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], WorkHours.prototype, \"highlight\", void 0);\n __decorate([\n Property('09:00')\n ], WorkHours.prototype, \"start\", void 0);\n __decorate([\n Property('18:00')\n ], WorkHours.prototype, \"end\", void 0);\n return WorkHours;\n}(ChildProperty));\nexport { WorkHours };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configuration of options related to timescale on Schedule.\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 * Configuration of every event field related options on Schedule.\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 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('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, removeClass, remove, closest } 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.parent = parent;\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 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 () {\n var _this = this;\n var treeCollection = [];\n this.resourceTreeLevel.forEach(function (resTree, index) {\n var treeHandler = function (treeLevel, index, levelId) {\n var resource = _this.resourceCollection[index];\n var treeArgs = {\n resourceId: levelId,\n resourceName: treeLevel.resourceData[resource.textField]\n };\n if (treeLevel.child.length > 0) {\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 treeArgs.resourceChild.push(treeHandler(tree, index + 1, levelId + '-' + count));\n count += 1;\n }\n return treeArgs;\n };\n treeCollection.push(treeHandler(resTree, 0, (index + 1).toString()));\n });\n return treeCollection;\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.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 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 if (this.parent.uiStateValues.isGroupAdaptive &&\n isNullOrUndefined(this.resourceCollection.slice(-1)[0].dataSource[this.parent.uiStateValues.groupIndex])) {\n this.parent.uiStateValues.groupIndex = 0;\n }\n };\n ResourceBase.prototype.generateResourceLevels = function (innerDates) {\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 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.addResource = function (resources, name, index) {\n for (var i = 0, length_3 = this.parent.resources.length; i < length_3; 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_4) {\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_4 = this.parent.resources.length; i < length_4; i++) {\n var state_1 = _loop_1(i, length_4);\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 { 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 createSpinner({ target: this.element }, this.createElement);\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 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 displayName: null,\n interval: 1,\n timeScale: timeScale,\n group: group\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 };\n Schedule.prototype.initializePopups = function () {\n if (this.eventSettings.enableTooltip) {\n this.eventTooltip = new EventTooltip(this);\n }\n this.eventWindow = new EventWindow(this);\n this.quickPopup = new QuickPopups(this);\n };\n Schedule.prototype.getDayNames = function (type) {\n var culShortNames = [];\n var cldrObj;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('days.stand-alone.' + type, getDefaultDateObject()));\n }\n else {\n cldrObj = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.days.format.' + type, cldrData));\n }\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n culShortNames.push(getValue(obj, cldrObj));\n }\n return culShortNames;\n };\n Schedule.prototype.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.animateLayout = function () {\n new Animation({ duration: 600, name: 'FadeIn', timingFunction: 'easeIn' }).animate(this.activeView.element);\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n Schedule.prototype.requiredModules = function () {\n var modules = [];\n this.setViewOptions(true);\n for (var _i = 0, _a = Object.keys(this.viewOptions); _i < _a.length; _i++) {\n var view = _a[_i];\n modules.push({\n member: view,\n args: [this]\n });\n }\n return modules;\n };\n /**\n * Initializes the values of private members.\n * @private\n */\n Schedule.prototype.preRender = function () {\n this.isAdaptive = Browser.isDevice;\n this.globalize = new Internationalization(this.locale);\n this.uiStateValues = { expand: false, isInitial: true, left: 0, top: 0, isGroupAdaptive: false, groupIndex: 0 };\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 };\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.getWorkCellElements = function () {\n return [].slice.call(this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));\n };\n Schedule.prototype.getIndexOfDate = function (collection, date) {\n return collection.map(Number).indexOf(+date);\n };\n Schedule.prototype.isAllDayCell = function (td) {\n if (this.currentView === 'Month' || td.classList.contains(cls.ALLDAY_CELLS_CLASS) || td.classList.contains(cls.HEADER_CELLS_CLASS)\n || !this.activeViewOptions.timeScale.enable) {\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.getEditorTemplate = function () {\n return this.editorTemplateFn;\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') {\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 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 break;\n case 'showWeekend':\n case 'workDays':\n case 'startHour':\n case 'endHour':\n case 'workHours':\n case 'readonly':\n requireRefresh = true;\n break;\n case 'locale':\n this.setCldrTimeFormat();\n this.refresh();\n break;\n case 'firstDayOfWeek':\n if (this.headerModule) {\n this.headerModule.setDayOfWeek(newProp.firstDayOfWeek);\n }\n requireRefresh = true;\n break;\n case 'showTimeIndicator':\n 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 if (this.headerModule) {\n this.headerModule.setRtl(this.enableRtl);\n }\n if (this.enableRtl) {\n addClass([this.element], cls.RTL);\n }\n else {\n removeClass([this.element], cls.RTL);\n }\n requireRefresh = true;\n break;\n default:\n this.extendedPropertyChange(prop, newProp, oldProp);\n break;\n }\n }\n if (requireRefresh) {\n this.initializeView(this.currentView);\n }\n };\n Schedule.prototype.extendedPropertyChange = function (prop, newProp, oldProp) {\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass);\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass);\n }\n break;\n case 'hideEmptyAgendaDays':\n case 'agendaDaysCount':\n this.activeViewOptions = this.getActiveViewOptions();\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 'group':\n this.initializeView(this.currentView);\n break;\n case 'resources':\n this.initializeResources(true);\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 }\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) {\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 (!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 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 if (!this.activeViewOptions.timeScale.enable || td.classList.contains(cls.ALLDAY_CELLS_CLASS) ||\n td.classList.contains(cls.HEADER_CELLS_CLASS)) {\n endTime = util.addDays(new Date(startTime.getTime()), 1);\n }\n else {\n endTime = this.activeView.getEndDateFromStartDate(startTime);\n }\n var data = {\n startTime: startTime,\n endTime: endTime,\n isAllDay: this.isAllDayCell(td),\n element: td\n };\n 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.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 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()\n ], Schedule.prototype, \"dateHeaderTemplate\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"cellTemplate\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showQuickInfo\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"editorTemplate\", void 0);\n __decorate([\n Property(7)\n ], Schedule.prototype, \"agendaDaysCount\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"hideEmptyAgendaDays\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"timezone\", void 0);\n __decorate([\n Complex({}, EventSettings)\n ], Schedule.prototype, \"eventSettings\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"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 Property()\n ], Schedule.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"cellClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"cellDoubleClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"navigating\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"renderCell\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"eventClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"eventRendered\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"dataBinding\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"dataBound\", void 0);\n Schedule = __decorate([\n NotifyPropertyChanges\n ], Schedule);\n return Schedule;\n}(Component));\nexport { Schedule };\n","import { createElement, append, prepend, isNullOrUndefined, getValue, getDefaultDateObject, cldrData } from '@syncfusion/ej2-base';\nimport { getDateInMs, addDays, resetTime, WEEK_LENGTH } from '../base/util';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\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 };\n this.parent = parent;\n }\n ViewBase.prototype.createTableLayout = function (className) {\n var clsName = className || '';\n var table = createElement('table', { className: cls.SCHEDULE_TABLE_CLASS + ' ' + clsName });\n var tbody = createElement('tbody');\n table.appendChild(tbody);\n return table;\n };\n ViewBase.prototype.renderPanel = function (type) {\n if (type === cls.PREVIOUS_PANEL_CLASS) {\n prepend([this.element], this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS));\n }\n else {\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(this.element);\n }\n };\n ViewBase.prototype.setPanel = function (panel) {\n this.element = panel;\n };\n ViewBase.prototype.getPanel = function () {\n return this.element;\n };\n ViewBase.prototype.adjustEventWrapper = function () {\n // Here adjust the events wrapper width based in work cells\n };\n ViewBase.prototype.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 for (var i = 0, length_1 = this.parent.activeViewOptions.interval; i < length_1; i++) {\n renderDates.push(util.addDays(resetTime(this.parent.selectedDate), i));\n }\n if (!workDays) {\n this.renderDates = renderDates;\n }\n return renderDates;\n };\n ViewBase.prototype.getNextPreviousDate = function (type) {\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 (!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 this.parent.notify(event.cellMouseDown, { event: e });\n };\n WorkCellInteraction.prototype.cellClick = function (e) {\n if (closest(e.target, '.' + cls.APPOINTMENT_CLASS)) {\n return;\n }\n var navigateEle = closest(e.target, '.' + cls.NAVIGATE_CLASS);\n if (isNullOrUndefined(navigateEle) || isNullOrUndefined(this.parent.viewOptions.day) || (this.parent.currentView === 'Day')) {\n if (this.parent.activeViewOptions.readonly) {\n this.parent.quickPopup.quickPopupHide();\n return;\n }\n var target = e.currentTarget;\n var isWorkCell = target.classList.contains(cls.WORK_CELLS_CLASS) || target.classList.contains(cls.ALLDAY_CELLS_CLASS);\n if (isWorkCell && e.shiftKey && e.which === 1 && this.parent.keyboardInteractionModule) {\n this.parent.keyboardInteractionModule.onMouseSelection(e);\n return;\n }\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e, name: 'cellClick' });\n this.parent.trigger(event.cellClick, args);\n if (args.cancel) {\n return;\n }\n if (isWorkCell) {\n this.parent.selectCell(target);\n }\n this.parent.notify(event.cellClick, args);\n }\n else {\n var date = this.parent.getDateFromElement(e.currentTarget);\n if (!isNullOrUndefined(date) && !this.parent.isAdaptive) {\n this.parent.setProperties({ selectedDate: date }, true);\n this.parent.changeView('Day');\n }\n }\n };\n WorkCellInteraction.prototype.cellDblClick = function (e) {\n var target = closest(e.target, '.' + cls.APPOINTMENT_CLASS);\n if (!isNullOrUndefined(target) || this.parent.activeViewOptions.readonly) {\n return;\n }\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e, name: 'cellDoubleClick' });\n this.parent.trigger(event.cellDoubleClick, args);\n if (args.cancel) {\n return;\n }\n this.parent.eventWindow.openEditor(this.parent.activeCellsData, 'Add');\n };\n return WorkCellInteraction;\n}());\nexport { WorkCellInteraction };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { append, createElement, extend, EventHandler, prepend, Animation, 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 + ':first-child'));\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 this.parent.localeObj.getConstant('addTitle'));\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 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] = 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);\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);\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.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 _this = this;\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 = this.getOuterHeight(this.element.querySelector('.' + cls.DATE_HEADER_CLASS));\n }\n else {\n this.monthHeaderHeight = 0;\n }\n var 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 var dates = _this.dateRender.map(function (date) { return +date; });\n _this.slots = [];\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 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.renderAppointmentMonth(event_2, resIndex);\n }\n }\n _this.cssClass = null;\n _this.groupOrder = null;\n };\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var resources = this.parent.uiStateValues.isGroupAdaptive ?\n [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :\n this.parent.resourceBase.lastResourceLevel;\n for (var _a = 0, resources_1 = resources; _a < resources_1.length; _a++) {\n var slotData = resources_1[_a];\n renderEventsHandler(slotData.renderDates, slotData.workDays, slotData);\n }\n }\n else {\n renderEventsHandler(this.parent.activeView.renderDates, this.parent.activeViewOptions.workDays);\n }\n };\n MonthEvent.prototype.getElementHeightFromClass = function (container, elementClass) {\n var height = 0;\n var el = createElement('div', { className: elementClass }).cloneNode();\n el.style.visibility = 'hidden';\n el.style.position = 'absolute';\n container.appendChild(el);\n height = this.getOuterHeight(el);\n remove(el);\n return height;\n };\n MonthEvent.prototype.getOuterHeight = function (element) {\n var style = getComputedStyle(element);\n return element.offsetHeight + (parseInt(style.marginTop, 10) || 0) + (parseInt(style.marginBottom, 10) || 0);\n };\n MonthEvent.prototype.createAppointmentElement = function (record, resIndex) {\n var eventSubject = (record[this.fields.subject] || this.parent.eventSettings.fields.subject.default ||\n this.parent.localeObj.getConstant('addTitle'));\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 ? eventSubject + (eventLocation ? '; ' : '') : '') + (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', { className: cls.SUBJECT_CLASS, innerHTML: 'All day' });\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 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.renderAppointmentMonth = 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 moreIndicatorHeight = 19;\n var appHeight = this.eventHeight;\n this.renderedEvents.push(extend({}, event, null, true));\n var diffInDays = event.data.count;\n if (startTime.getTime() <= endTime.getTime()) {\n var appWidth = (diffInDays * this.cellWidth) - 1;\n var cellTd = this.workCells[day];\n var appTop = (overlapCount * (appHeight + EVENT_GAP));\n if (this.cellHeight > this.monthHeaderHeight + ((overlapCount + 1) * (appHeight + EVENT_GAP)) + 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 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 if (cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS)) {\n cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS).appendChild(appointmentElement);\n }\n else {\n var wrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n wrapper.appendChild(appointmentElement);\n cellTd.appendChild(wrapper);\n }\n }\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 - moreIndicatorHeight;\n var renderedAppCount = Math.floor(appArea / (appHeight + EVENT_GAP));\n var count = (filterEvents.length - renderedAppCount) <= 0 ? 1 : (filterEvents.length - renderedAppCount);\n var moreIndicatorElement = createElement('div', {\n className: cls.MORE_INDICATOR_CLASS,\n innerHTML: '+' + count + ' ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more')),\n attrs: {\n 'tabindex': '0',\n 'data-start-date': startDate.getTime().toString(),\n 'data-end-date': endDate.getTime().toString()\n }\n });\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 + 'px';\n if (cellTd_1.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS)) {\n cellTd_1.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS).appendChild(moreIndicatorElement);\n }\n else {\n var wrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n wrapper.appendChild(moreIndicatorElement);\n cellTd_1.appendChild(wrapper);\n }\n EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);\n }\n }\n }\n }\n };\n MonthEvent.prototype.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.getIndex = function (date) {\n var appIndex = -1;\n var appointments = this.renderedEvents;\n if (appointments.length > 0) {\n var appointmentsList = [];\n for (var _i = 0, appointments_1 = appointments; _i < appointments_1.length; _i++) {\n var app = appointments_1[_i];\n if ((util.resetTime(app[this.fields.startTime]).getTime() <= util.resetTime(date).getTime()) &&\n (util.resetTime(app[this.fields.endTime]).getTime() >= util.resetTime(date).getTime())) {\n appointmentsList.push(app);\n }\n }\n var appLevel = appointmentsList.map(function (obj) { return obj.Index; });\n appIndex = (appLevel.length > 0) ? this.getSmallestMissingNumber(appLevel) : 0;\n }\n return (appIndex === -1) ? 0 : appIndex;\n };\n MonthEvent.prototype.moreIndicatorClick = function (event) {\n var target = closest(event.target, '.' + cls.MORE_INDICATOR_CLASS);\n var startDate = new Date(parseInt(target.getAttribute('data-start-date'), 10));\n if (!isNullOrUndefined(startDate) && this.parent.isAdaptive) {\n this.parent.setProperties({ selectedDate: startDate }, true);\n this.parent.changeView('Day');\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, groupIndex);\n }\n };\n return MonthEvent;\n}(EventBase));\nexport { MonthEvent };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { compile, isNullOrUndefined, extend, EventHandler, formatUnit } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, removeClass, append, prepend } from '@syncfusion/ej2-base';\nimport { WorkCellInteraction } from '../actions/work-cells';\nimport { ViewBase } from './view-base';\nimport { 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 DATE_HEADER_TEMPLATE = '
    ${getDayName(date)}
    ' +\n '
    ${getDate(date)}
    ';\nvar MAJOR_SLOT_TEMPLATE = '${getTime(date)}';\nvar MINOR_SLOT_TEMPLATE = ' ';\n/**\n * vertical view\n */\nvar VerticalView = /** @class */ (function (_super) {\n __extends(VerticalView, _super);\n /**\n * Constructor for vertical view\n */\n function VerticalView(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-day-view';\n _this.isInverseTableSelect = true;\n _this.workCellAction = new WorkCellInteraction(parent);\n return _this;\n }\n VerticalView.prototype.addEventListener = function () {\n this.parent.on(event.scrollUiUpdate, this.scrollUiUpdate, this);\n this.parent.on(event.dataReady, this.renderEvents, this);\n };\n VerticalView.prototype.removeEventListener = function () {\n this.parent.off(event.scrollUiUpdate, this.scrollUiUpdate);\n this.parent.off(event.dataReady, this.renderEvents);\n };\n VerticalView.prototype.renderEvents = function () {\n 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 if (this.parent.activeViewOptions.timeScale.enable) {\n this.getTimeCellsElement().scrollTop = target.scrollTop;\n }\n this.getDatesHeaderElement().firstChild.scrollLeft = target.scrollLeft;\n this.parent.uiStateValues.top = target.scrollTop;\n this.parent.uiStateValues.left = target.scrollLeft;\n this.parent.quickPopup.quickPopupHide();\n };\n VerticalView.prototype.scrollUiUpdate = function (args) {\n var headerBarHeight = 0;\n if (this.parent.headerModule) {\n headerBarHeight += this.parent.headerModule.getHeaderElement().offsetHeight;\n }\n if (this.parent.uiStateValues.isGroupAdaptive) {\n headerBarHeight += this.parent.element.querySelector('.' + cls.RESOURCE_HEADER_TOOLBAR).offsetHeight;\n }\n var timecells = this.getTimeCellsElement();\n var content = this.getScrollableElement();\n var header = this.getDatesHeaderElement();\n var scrollerHeight = formatUnit(this.parent.element.offsetHeight - headerBarHeight - header.offsetHeight - 2);\n if (this.parent.isAdaptive) {\n content.style.height = scrollerHeight;\n }\n else {\n if (this.parent.activeViewOptions.timeScale.enable) {\n timecells.style.height = scrollerHeight;\n }\n content.style.height = scrollerHeight;\n }\n var scrollBarWidth = util.getScrollBarWidth();\n // tslint:disable:no-any\n if (content.offsetWidth - content.clientWidth > 0) {\n header.firstChild.style[args.cssProperties.border] = scrollBarWidth > 0 ? '1px' : '0px';\n header.style[args.cssProperties.padding] = scrollBarWidth > 0 ? scrollBarWidth - 1 + 'px' : '0px';\n }\n else {\n header.firstChild.style[args.cssProperties.border] = '';\n header.style[args.cssProperties.padding] = '';\n }\n // tslint:enable:no-any\n if (this.parent.activeViewOptions.timeScale.enable) {\n timecells.style.paddingBottom = (content.offsetHeight - content.clientHeight > 0) ? formatUnit(scrollBarWidth) : '';\n }\n if (this.parent.uiStateValues.isInitial) {\n this.scrollToWorkHour();\n this.parent.uiStateValues.isInitial = false;\n }\n else {\n this.getScrollableElement().scrollTop = this.parent.uiStateValues.top;\n }\n };\n VerticalView.prototype.scrollToWorkHour = function () {\n if (this.parent.workHours.highlight) {\n var firstWorkHourCell = this.element.querySelector('.' + cls.WORK_HOURS_CLASS);\n if (firstWorkHourCell) {\n this.getScrollableElement().scrollTop = firstWorkHourCell.offsetTop;\n this.parent.uiStateValues.top = firstWorkHourCell.offsetTop;\n this.parent.uiStateValues.left = 0;\n }\n }\n };\n VerticalView.prototype.scrollToHour = function (hour) {\n var date = this.parent.globalize.parseDate(hour, { skeleton: 'Hm' });\n if (isNullOrUndefined(date)) {\n return;\n }\n this.getScrollableElement().scrollTop = this.getTopFromDateTime(date);\n };\n VerticalView.prototype.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.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.getTimeCellsElement();\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(DATE_HEADER_TEMPLATE, 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 = ['e-vertical-view', 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.activeViewOptions.timeScale.enable) {\n this.highlightCurrentTime();\n }\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 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 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 var colGroupEle = createElement('colgroup');\n for (var i = 0; i < lastLevel.length; i++) {\n colGroupEle.appendChild(createElement('col'));\n }\n tbl.appendChild(colGroupEle);\n for (var i = 0; i < rowCount; i++) {\n var ntr_2 = trEle.cloneNode();\n addClass([ntr_2], cls.HEADER_ROW_CLASS);\n var level = this.colLevels[i];\n for (var j = 0; j < level.length; j++) {\n ntr_2.appendChild(this.createTd(level[j]));\n }\n tbl.querySelector('tbody').appendChild(ntr_2);\n }\n var ntr = trEle.cloneNode();\n addClass([ntr], cls.ALLDAY_ROW_CLASS);\n for (var j = 0; j < lastLevel.length; j++) {\n var td = extend({}, lastLevel[j]);\n td.className = [cls.ALLDAY_CELLS_CLASS];\n td.type = 'alldayCells';\n var ntd = this.createTd(td);\n ntd.setAttribute('data-date', td.date.getTime().toString());\n if (!isNullOrUndefined(td.groupIndex)) {\n ntd.setAttribute('data-group-index', '' + td.groupIndex);\n }\n this.wireCellEvents(ntd);\n ntr.appendChild(ntd);\n }\n tbl.querySelector('tbody').appendChild(ntr);\n var thead = createElement('thead');\n thead.appendChild(this.createEventWrapper('allDay'));\n prepend([thead], tbl);\n wrap.appendChild(tbl);\n return container;\n };\n VerticalView.prototype.createTd = function (td) {\n var tdEle = createElement('th');\n if (td.colSpan) {\n tdEle.setAttribute('colspan', td.colSpan.toString());\n }\n if (td.className) {\n addClass([tdEle], td.className);\n }\n if (td.date && td.type) {\n var ele = this.getTdContent(td.date, td.type, 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);\n EventHandler.add(tdEle, 'dblclick', this.workCellAction.cellDblClick, this);\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);\n EventHandler.add(element, 'click', this.workCellAction.cellClick, this);\n EventHandler.add(element, 'dblclick', this.workCellAction.cellDblClick, this);\n };\n VerticalView.prototype.renderTimeCells = function () {\n var _this = this;\n var wrap = createElement('div', { className: cls.TIME_CELLS_WRAP_CLASS });\n var tbl = this.createTableLayout();\n var trEle = createElement('tr');\n var handler = function (r) {\n r.type = r.first ? 'majorSlot' : 'minorSlot';\n r.className = r.last ? [cls.TIME_CELLS_CLASS] : [];\n var ntr = trEle.cloneNode();\n var data = { date: r.date, type: r.type, className: r.className };\n ntr.appendChild(_this.createTd(data));\n tbl.querySelector('tbody').appendChild(ntr);\n return r;\n };\n this.getTimeSlotRows(handler);\n wrap.appendChild(tbl);\n return wrap;\n };\n VerticalView.prototype.renderContentArea = function () {\n var _this = this;\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n var tr = createElement('tr', { attrs: { role: 'row' } });\n var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });\n var tbody = tbl.querySelector('tbody');\n var colGroupEle = createElement('colgroup');\n for (var _i = 0, _a = this.colLevels.slice(-1)[0]; _i < _a.length; _i++) {\n var col = _a[_i];\n colGroupEle.appendChild(createElement('col'));\n }\n tbl.appendChild(colGroupEle);\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 = td.cloneNode();\n var clsName = r.last ? [cls.WORK_CELLS_CLASS] : [cls.WORK_CELLS_CLASS, cls.ALTERNATE_CELLS_CLASS];\n var cellDate = util.resetTime(new Date('' + tdData.date));\n util.setTime(cellDate, util.getDateInMs(r.date));\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: 'workCells', 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 _this.wireCellEvents(ntd);\n var args = { elementType: 'workCells', element: ntd, date: cellDate, groupIndex: tdData.groupIndex };\n _this.parent.trigger(event.renderCell, args);\n ntr.appendChild(ntd);\n }\n tbody.appendChild(ntr);\n return r;\n };\n this.getTimeSlotRows(handler);\n var 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], tbl);\n wrap.appendChild(tbl);\n EventHandler.add(wrap, 'scroll', this.onContentScroll, this);\n return wrap;\n };\n VerticalView.prototype.createEventWrapper = function (type) {\n if (type === void 0) { type = ''; }\n var tr = createElement('tr', { attrs: { role: 'row' } });\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,\n attrs: { role: 'gridcell', 'aria-selected': 'false' }\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) {\n return this.element.querySelector('.' + cls.SCROLL_CONTAINER_CLASS);\n }\n else {\n return this.getContentAreaElement();\n }\n };\n VerticalView.prototype.getDatesHeaderElement = function () {\n return this.element.querySelector('.' + cls.DATE_HEADER_CONTAINER_CLASS);\n };\n VerticalView.prototype.getTimeCellsElement = function () {\n return this.element.querySelector('.' + cls.TIME_CELLS_WRAP_CLASS);\n };\n VerticalView.prototype.getContentAreaElement = function () {\n return this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n };\n VerticalView.prototype.getEndDateFromStartDate = function (start) {\n var msMajorInterval = this.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 for (var i = 0; i < length; i++) {\n var majorTickDivider = i % (msMajorInterval / msInterval);\n var row = {\n date: new Date('' + dt),\n first: (majorTickDivider === 0),\n middle: (majorTickDivider < this.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';\nimport * as util from '../base/util';\n/**\n * day view\n */\nvar Day = /** @class */ (function (_super) {\n __extends(Day, _super);\n /**\n * Constructor for day view\n */\n function Day(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-day-view';\n return _this;\n }\n Day.prototype.getNextPreviousDate = function (type) {\n var daysCount = (type === 'next') ? this.parent.activeViewOptions.interval : -(this.parent.activeViewOptions.interval);\n if (this.parent.activeViewOptions.showWeekend) {\n return util.addDays(this.parent.selectedDate, daysCount);\n }\n else {\n var date = util.addDays(this.parent.selectedDate, daysCount);\n while (!this.isWorkDay(date)) {\n date = util.addDays(date, daysCount);\n }\n return date;\n }\n };\n Day.prototype.getDateRangeText = function () {\n if (this.parent.isAdaptive) {\n return this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n }\n if (this.parent.activeViewOptions.interval > 1) {\n return this.formatDateRange(this.renderDates[0], this.renderDates[this.renderDates.length - 1]);\n }\n return this.formatDateRange(this.parent.selectedDate);\n };\n /**\n * Get module name.\n */\n Day.prototype.getModuleName = function () {\n return 'day';\n };\n return Day;\n}(VerticalView));\nexport { Day };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VerticalView } from './vertical-view';\nimport * as util from '../base/util';\n/**\n * week view\n */\nvar Week = /** @class */ (function (_super) {\n __extends(Week, _super);\n /**\n * Constructor 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 Week.prototype.getRenderDates = function (workDays) {\n var renderDates = [];\n var selectedDate = util.resetTime(this.parent.selectedDate);\n var start = util.getWeekFirstDate(selectedDate, this.parent.firstDayOfWeek);\n for (var i = 0, length_1 = util.WEEK_LENGTH * 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 = util.addDays(start, 1);\n }\n if (!workDays) {\n this.renderDates = renderDates;\n }\n return renderDates;\n };\n /**\n * Get module name.\n */\n Week.prototype.getModuleName = function () {\n return 'week';\n };\n return Week;\n}(VerticalView));\nexport { Week };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VerticalView } from './vertical-view';\nimport * as util from '../base/util';\n/**\n * work week view\n */\nvar WorkWeek = /** @class */ (function (_super) {\n __extends(WorkWeek, _super);\n /**\n * Constructor 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 WorkWeek.prototype.getRenderDates = function (workDays) {\n var renderDates = [];\n var start = util.getWeekFirstDate(util.resetTime(this.parent.selectedDate), this.parent.firstDayOfWeek);\n for (var i = 0, length_1 = util.WEEK_LENGTH * this.parent.activeViewOptions.interval; i < length_1; i++) {\n if (this.isWorkDay(start, workDays)) {\n renderDates.push(start);\n }\n start = util.addDays(start, 1);\n }\n if (!workDays) {\n this.renderDates = renderDates;\n }\n return renderDates;\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.getDatesHeaderElement().firstChild.scrollLeft = e.target.scrollLeft;\n };\n Month.prototype.onScrollUiUpdate = function (args) {\n var headerHeight = 0;\n if (this.parent.headerModule) {\n headerHeight += this.parent.headerModule.getHeaderElement().offsetHeight;\n }\n if (this.parent.uiStateValues.isGroupAdaptive && this.parent.currentView !== 'MonthAgenda') {\n headerHeight += this.parent.element.querySelector('.' + cls.RESOURCE_HEADER_TOOLBAR).offsetHeight;\n }\n var header = this.getDatesHeaderElement();\n var content = this.getContentAreaElement();\n content.style.height = 'auto';\n content.style.height = formatUnit(this.parent.element.offsetHeight - headerHeight - header.offsetHeight - 2);\n // tslint:disable:no-any\n if (content.offsetWidth - content.clientWidth > 0) {\n var scrollBarWidth = util.getScrollBarWidth();\n header.firstChild.style[args.cssProperties.border] = scrollBarWidth > 0 ? '1px' : '0px';\n header.style[args.cssProperties.padding] = scrollBarWidth > 0 ? scrollBarWidth - 1 + 'px' : '0px';\n }\n else {\n header.firstChild.style[args.cssProperties.border] = '';\n header.style[args.cssProperties.padding] = '';\n }\n // tslint:enable:no-any\n };\n Month.prototype.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: 'monthHeader', 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);\n EventHandler.add(element, 'click', this.workCellAction.cellClick, this);\n EventHandler.add(element, 'dblclick', this.workCellAction.cellDblClick, this);\n };\n Month.prototype.renderHeader = function () {\n var tr = createElement('tr');\n var dateTd = createElement('td');\n dateTd.appendChild(this.renderDatesHeader());\n tr.appendChild(dateTd);\n prepend([tr], this.element.querySelector('tbody'));\n };\n Month.prototype.renderContent = function () {\n var tr = createElement('tr');\n var workTd = createElement('td');\n workTd.appendChild(this.renderContentArea());\n tr.appendChild(workTd);\n this.element.querySelector('tbody').appendChild(tr);\n this.renderAppointmentContainer();\n };\n Month.prototype.renderAppointmentContainer = function () {\n //Here needs to render mobile view appointment details on selected date\n };\n Month.prototype.renderDatesHeader = function () {\n var container = createElement('div', { className: cls.DATE_HEADER_CONTAINER_CLASS });\n var wrap = createElement('div', { className: cls.DATE_HEADER_WRAP_CLASS });\n container.appendChild(wrap);\n var table = this.createTableLayout();\n var trEle = createElement('tr');\n var colGroupEle = createElement('colgroup');\n for (var i = 0; i < this.colLevels[this.colLevels.length - 1].length; i++) {\n colGroupEle.appendChild(createElement('col'));\n }\n table.appendChild(colGroupEle);\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('th');\n if (td.colSpan) {\n tdEle.setAttribute('colspan', td.colSpan.toString());\n }\n if (td.className) {\n addClass([tdEle], td.className);\n }\n if (td.type === 'monthHeader') {\n var ele = createElement('span', { innerHTML: this.parent.getDayNames(this.dayNameFormat)[td.date.getDay()] });\n tdEle.appendChild(ele);\n }\n if (td.type === 'resourceHeader') {\n this.setResourceHeaderContent(tdEle, td);\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.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 wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n var tbody = tbl.querySelector('tbody');\n var tr = createElement('tr', { attrs: { role: 'row' } });\n var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });\n var 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 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 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 data = slotDatas[row][col];\n var ntd = td.cloneNode();\n if (this.isOtherMonth(data.date)) {\n data.className.push(cls.OTHERMONTH_CLASS);\n }\n if (this.parent.workHours.highlight && this.isWorkDay(data.date, 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 if (this.parent.currentView === 'MonthAgenda' && this.parent.isSelectedDate(data.date)) {\n data.className.push(cls.SELECTED_CELL_CLASS);\n }\n addClass([ntd], data.className);\n ntd.setAttribute('data-date', data.date.getTime().toString());\n 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: data.type, groupIndex: data.groupIndex };\n append([].slice.call(this.parent.getCellTemplate()(args_1)), ntd);\n }\n this.wireCellEvents(ntd);\n var args = { elementType: data.type, element: ntd, date: data.date, groupIndex: data.groupIndex };\n this.parent.trigger(event.renderCell, args);\n ntr.appendChild(ntd);\n }\n tbody.appendChild(ntr);\n }\n wrap.appendChild(tbl);\n EventHandler.add(wrap, 'scroll', this.onContentScroll, this);\n return wrap;\n };\n Month.prototype.getDatesHeaderElement = function () {\n return this.element.querySelector('.' + cls.DATE_HEADER_CONTAINER_CLASS);\n };\n Month.prototype.getContentAreaElement = function () {\n return this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n };\n Month.prototype.renderDateHeaderElement = function (data, ntd) {\n var dateHeader = createElement('div', { className: cls.DATE_HEADER_CLASS });\n dateHeader.innerHTML = (data.date.getDate() === 1 && !this.isCurrentDate(data.date) && !this.parent.isAdaptive) ?\n this.parent.globalize.formatDate(data.date, { format: 'MMM d' }) :\n this.parent.globalize.formatDate(data.date, { skeleton: 'd' });\n ntd.appendChild(dateHeader);\n if (this.getModuleName() === 'month') {\n addClass([dateHeader], cls.NAVIGATE_CLASS);\n }\n };\n Month.prototype.getRenderDates = function (workDays) {\n var renderDates = [];\n var currentDate = util.resetTime(this.parent.selectedDate);\n var monthStart = util.getWeekFirstDate(util.firstDateOfMonth(currentDate), this.parent.firstDayOfWeek);\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 var start = new Date(monthStart.getFullYear(), monthStart.getMonth(), monthStart.getDate());\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 /**\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 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(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(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] || this.parent.eventSettings.fields.subject.default ||\n this.parent.localeObj.getConstant('addTitle'))\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 this.parent.localeObj.getConstant('addTitle'));\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 = 2;\n if (this.parent.headerModule) {\n headerHeight += this.parent.headerModule.getHeaderElement().offsetHeight;\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n this.parent.headerModule.updateHeaderItems('add');\n }\n else {\n this.parent.headerModule.updateHeaderItems('remove');\n }\n }\n if (this.parent.uiStateValues.isGroupAdaptive) {\n headerHeight += this.parent.element.querySelector('.' + cls.RESOURCE_HEADER_TOOLBAR).offsetHeight;\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","import * as index from '@syncfusion/ej2-schedule';\nindex.Schedule.Inject( index.Day,index.Week,index.WorkWeek,index.Month,index.Agenda,index.MonthAgenda);\nexport * from '@syncfusion/ej2-schedule';\n","/**\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 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 templateFn = getTemplateFunction(template);\n templateElement = templateFn(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, 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 = this.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 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 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 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 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 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 TreeMapLegend.prototype.wireEvents = function (element) {\n EventHandler.add(element, Browser.touchStartEvent, this.changeNextPage, this);\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 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 };\nvar TreeMapSelection = /** @class */ (function () {\n function TreeMapSelection(treeMap) {\n this.treemap = treeMap;\n this.addEventListener();\n }\n /* tslint:disable:no-string-literal */\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","rotateTextSize","chart","box","renderer","SvgRenderer","font-size","font-style","font-family","font-weight","text-anchor","createText","delayRedraw","svgObject","removeElement","getElement","logBase","base","log","showTooltip","areaWidth","isTouch","tooltip","inside","range","withIn","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","sort","xMin","xMax","getAnimationFunction","effect","functionName","linear","endValue","markerAnimate","pointIndex","isLabel","Animation","animate","progress","timeStamp","triggerLabelRender","tempInterval","argsData","cancel","axisLabelRender","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","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","b","hex","convertHexToColor","exec","ColorValue","colorNameToHex","isRGBValue","getSaturationColor","factor","colorCode","rgb","round","getMedian","half","fill","space","stroke","mode","cartesianlarge","cartesiansmall","getAccumulationLegend","textTrim","maxWidth","stringToNumber","containerSize","rX","rY","arrowPadding","tipX","tipY","tipRadius","startX","startY","isMinus","tspanElement","renderOptions","dominant-baseline","baseLine","createTSpan","calculateSize","marginHeight","getModuleName","tooltipSpace","enable","periodHeight","periodSelectorSettings","periods","labelSize","enableGrouping","disableRangeSelector","createSvg","getTitle","title","titleCollection","textOverflow","textWrap","titlePositionX","chartSize","leftPadding","rightPadding","titleStyle","textAlignment","currentLabel","maximumWidth","textCollection","labelCollection","defaultToString","validateNullOrUndefined","getTooltipThemeColor","getSeriesFromIndex","visibleSeries","visibleSeries_1","pointByIndex","points_1","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","renderTextElement","sparkline","appendShape","drawCircle","drawRectangle","topLeft","topRight","bottomLeft","bottomRight","calculateRoundedRectPath","textOptions","getIdElement","toPixel","maxDimension","setStyles","border","stroke-width","appendPath","gauge","calculateSum","from","to","getAngleFromValue","maximumValue","minimumValue","endAngle","isClockWise","isCompleteAngle","getDegree","getValueFromAngle","totalAngle","getAngleFromLocation","getLocationFromAngle","GaugeLocation","getPathArc","startWidth","endWidth","startRadius","endRadius","arcRadius","getRangePath","getCirclePath","innerStart","innerEnd","clockWise","getCompleteArc","innerRadius","getCompletePath","getPointer","targetId","tempString","axisIndex","pointerIndex","getLabelFormat","getRangeColor","ranges","currentRange","filter","rangeColor","processPathData","collection","arrayCollection","parsePathData","ob","char","command","l","s","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","bX","bY","iX","iY","scalePathData","updatedSegment","getPathString","segment","isScale","scaleFactor","oldOffset","newOffset","splitArrayCollection","getNewString","getString","string","cmd","ang","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","sourceID","targetWrapper","sPoint","tPoint","getIntersection","getSourcePoint","tarPoint","sourceNode","targetNode","sourcePort","targetPort","targetPortWrapper","srcCorner","srcDir","tarCorner","tarDir","port","tarPortPt","getDirection","topCenter","bottomCenter","middleRight","middleLeft","equals","containsPoint","sPt","tPt","refPoint","sourceEle","targetEle","tarPort","srcCor","tarCor","isInterSect","sourceSegment","createSegmentsCollection","targetSegment","srcSegment","tarSegmet","intersect3","checkSourceAndTargetIntersect","findPoint","findEndPoint","checkLastSegmentasTerminal","Point","isEmptyPoint","vector1","distance","vector2","intermeditatePointsForStraight","removeSegment","getOppositeDirection","checkConsectiveSegmentAsSame","updateSegmentPoints","checkSourcePointInTarget","nodeOrPortToNode","pointToPort","checkPreviousSegment","checkPortdirection","returnIntermeditatePoints","findIntermeditatePoints","OrthogonalSegment","extra","swap","getSwapping","swapPoints","pts","diffY","NoOfSegments","One","Three","Five","getRightToLeftSegmentCount","sourceObj","targetObj","diffX","getRightToRightSegmentCount","Two","Four","getRightToTopSegmentCount","getRightToBottomSegmentCount","getBottomToTopSegmentCount","difX","getBottomToBottomSegmentCount","getBottomToLeftSegmentCount","getLeftToLeftSegmentCount","getLeftToTopSegmentCount","getTopToTopSegmentCount","segLength","tar","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","X1","Y1","X2","Y2","createLineSegment","dir","BezierSegment","StraightSegment","length_3","lastPoint","nodeCorners","top_1","shortes","findAngle","re","findLength","es","asin","cor","isTar","segmentPoints","actualSize","constValue","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","a","point1","allow","diffx","diffy","interPt","getLeftLength","getRightLength","preDir","getTopLength","getBottomLength","getOrtho3Seg","point3","gap","closeEdge","boundsValue","one","two","three","four","fourty5","one35","two25","three15","getOuterBounds","outerBounds","sourceDecorator","uniteRect","targetDecorator","excludeBounds","part","isEmptyVector","getBezierPoints","getBezierBounds","startPoint","controlPoint1","controlPoint2","minx","miny","maxx","maxy","t","bezierPoints","canSelect","Connector","constraints","ConnectorConstraints","Select","NodeConstraints","canMove","Drag","Selector","canEnablePointerEvents","PointerEvents","canDragSourceEnd","DragSourceEnd","canDragTargetEnd","DragTargetEnd","canDragSegmentThumb","DragSegmentThumb","canRotate","Rotate","canShadow","Shadow","canInConnect","Node","InConnect","canOutConnect","OutConnect","canResize","returnValue","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","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","isPointOverConnector","intermediatePoints","bezierPoint1","bezierPoint2","pointsForBezier","toBounds","Inflate","hitPadding","intersectinPt","intersectDetails","intersectPt","rect_1","lineUtil1","lineUtil2","l1","l2","na","nb","ua","ub","line","rotateAngle","parentTransform","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","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","connectors","nodes","snapSettings","isLoading","views","refresh","Diagram","selectedNodes","getCollection","selectedItems","selcectedConnectors","objNodes","diagramNodes","diagramNodes_1","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","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","annotations","findPortIndex","ports","getObjectFromCollection","scaleElement","sw","sh","refObject","Container","rotatePoint","newPosition","insertObject","mid","diagramElement","diagramId","symbolPalette","palettes","symbols","getPaletteSymbols","nodeId","enterObject","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","getDiagramElement","getAdornerLayerSvg","getSelectorElement","getAdornerLayer","getPortLayerSvg","getNativeLayerSvg","getGridLayerSvg","getBackgroundLayerSvg","getBackgroundLayer","getNativeLayer","getHTMLLayer","elementType","attribute","setAttributeHtml","createSvgElement","setAttributeSvg","parentsUntil","isID","hasClass","animVal","addTouchPointer","touchList","touches","clientX","clientY","pointerId","contentId","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","desiredSize","findToolToActivate","touchStart","touchMove","currentSymbol","hasSelection","userHandles","obj_1","paddedBounds","selectorBnds","hasSingleConnection","conn_1","sourcePaddingValue","targetPaddingValue","conn","connectorEditingToolModule","checkForConnectorSegment","ten","rotateThumb","forty","checkForResizeHandles","PointPort","findPortToolToActivate","isSelected","PortVisibility","Hover","Visible","sourcePortID","currentDrawingObject","padding","firstLevel","nameTable","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","c","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","fieldName","getComplexValue","rowData","complexValue","isEditable","col","row","isOldRow","isIdentity","isPrimaryKey","allowEditing","isActionPrevent","dlg","editSettings","showConfirmDialog","changeButtonType","elements_1","setFormatter","serviceLocator","fmtr","getService","getFormatFunction","skeleton","setParser","getParserFunction","addRemoveActiveClasses","cells","distinctStringValues","res","getFilterMenuPostion","dialogObj","grid","elementVisible","newpos","dlgWidth","leftPos","getZIndexCalcualtion","zIndex","toogleCheckbox","span","createCboxWithWrap","removeAddCboxClasses","refreshForeignData","getForeignData","foreignKeyData","cell","isForeignKey","lValue","fField","Query","fdata","dataSource","DataManager","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","setStateAndProperties","summaryIterator","callback","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","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","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","pointerEvents","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","formatFunction","intl","getNumberFormat","useGrouping","useGroupingSeparator","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","pageXOffset","posLeft","pageYOffset","touch","getTouchCenter","zoomAnimate","previousLocation","preScale","previousScale","diffScale","currentLocation","MapLocation","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","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","setTime","time","tzOffsetBefore","getTimezoneOffset","tzOffsetDiff","MS_PER_DAY","resetTime","getDateInMs","addDays","addMonths","day","getMaxDays","getStartEndHours","startHour","endHour","date2","getDaysCount","startDate","endDate","strTime","getDateFromString","findIndexInData","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","currentDate","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","getMousePosition","clientTop","clientLeft","colorMap","colorMapping","equalValue","paths","minOpacity","maxOpacity","deSaturationColor","rangeValue","dataLabel","resultText","currentLength","totalWidth","totalLength","sliceString","hide","orderByArea","removeClassNames","applyOptions","textFormatter","formatValue","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","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","setElementAttributes","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","h","hm","Hm","hms","Hms","hmsv","Hmsv","hmv","Hmv","Md","MEd","MMM","MMMd","MMMEd","MMMMd","yM","yMd","yMEd","yMMM","yMMMd","yMMMEd","yMMMM","timeZoneNames","hourFormat","gmtFormat","gmtZeroFormat","numbers","currencies","USD","displayName","symbol-alt-narrow","EUR","GBP","minimumGroupingDigits","symbols-numberSystem-latn","list","superscriptingExponent","perMille","decimalFormats-numberSystem-latn","standard","percentFormats-numberSystem-latn","currencyFormats-numberSystem-latn","accounting","scientificFormats-numberSystem-latn","monthIndex","C","P","N","A","formatSplit","integerPart","fractionPart","customNumberFormat","dateObj","getActualDateTimeFormat","isExcelFormat","actualPattern","tLength","timeZonePattern","options_1","timeZone","numMapper","timezone","DateFormat","getTimeZoneValue","getActualNumberFormat","minFrac","parseOptions","custom","curMatch","curCode","hasNegativePattern","minDigits","maxDigits","fractionDigitsPattern","integer","minimumIntegerPattern","no","groupingPattern","cPattern","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","Internationalization","getDateFormat","getCulture","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getDatePattern","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","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","marginBottom","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","drop","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","createDefs","createClipPath","clipPath","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","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","view","focusedDate","tableBodyElement","selectedDate","depthValue","levelRestrict","KeyboardNavigate","selectDate","contentClick","addYears","number","isMinMaxRange","addDay","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","removeTableHeadElement","valueUtil","curDate","yr","curYrs","minYr","minMonth","maxYr","maxMonth","localMonth","localYr","startYr","endYr","startHdrYr","endHdrYr","startYear","rowIterator","valueOf","aria-selected","lastDate","timeOffset","findLastDay","classNm","trEle","iconHandler","setAriaActiveDescendant","clickEventEmitter","eve","getIdValue","switchView","setValueUpdate","setActiveDescendant","focusedEle","selectedEle","previousIconHandler","compareMonth","nextIconHandler","compareYear","compareDecade","stringVal","previous","ld","tzOffset","dateString","setDateDecade","setDateYear","navigatedEvent","navigatedArgs","compare","modifier","findNextTD","tmpDate","Calendar","form","formResetHandler","changedArgs","triggerChange","previousDate","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","parent_4","win","windowView","scrollY","scrollX","outerWidth","outerHeight","reposition","checkFixedParent","checkCollision","getAnchorPosition","anchorEle","eleRect","anchorRect","targetType","callFlip","param","callFit","viewPortRect","horz","collision","vert","show","animationOptions","relativeElement","zIndexElement","showAnimation","hideAnimation","ButtonProps","AnimationSettings","DLG_HEADER_CONTENT","MODAL_DLG","DLG_CLOSE_ICON","SCROLL_DISABLED","FULLSCREEN","DLG_CLOSE_ICON_BTN","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","unBindEvent","closeArgs","storeActiveElement","positionChange","setEnableRTL","setOverlayZindex","dlgOverlay","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","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","trgt","RTL","DISABLE","INPUT","CLEARICON","CLEARICONHIDE","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","_focusFn","getParentNode","_blurFn","createFloatingInput","inputObject","wireFloatingEvents","createInputContainer","customTag","updateLabelState","updateIconState","button","createClearButton","initial","insertAdjacentElement","readOnly","wireClearBtnEvents","validateLabel","tagClass","setCssClass","oldClass","setPlaceholder","aria-placeholder","setReadonly","isReadonly","isRtl","setEnabled","isEnable","disabledAttrs","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","previousValue","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","rtl","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","CLEAR_ICON","REMOVE_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","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","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","selectedElement","liElement","spinnerTarget","removeFilesData","customTemplate","getLiElement","removeUploadedFile","removeDirectly","selectedFiles","ajax","formData","FormData","currentRequest","postRawFile","updateFormData","customFormData","removeCompleted","removeFailed","customData","updateStatus","rootElement","statusElement","targetFiles","dataTransfer","sortFileList","eventArgs_1","getFileType","validatedFileSize","isModified","modifiedFilesData","progressInterval","checkExtension","dataFiles","updateSortedFileList","singleUpload","previousListClone","added","removedList_1","oldList","createParentUL","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","removecanceledFile","updateProgressBarClasses","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","cancelButton","retryRequest","retryAfterDelay","checkPausePlayAction","retryUpload","fromcanceledStage","retryElement","clearIcon","loadedSize","bytes","fileNames","sortedFilesData","sortedFileNames_1","name_3","uploadFiles","validateFileType","chunkEnabled","_loop_2","name_4","getFilesData","validUrl","removeFiles_1","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelUpload","Item","DropDownButton","canOpen","openPopUp","closePopup","createPopup","getPopUpElement","createItems","showIcon","hasIcon","separator","createAnchor","setIconPositionTop","appendArrowSpan","setActiveElem","iconSpan","activeElem","popupEle","getULElement","popupElement","delegateMousedownHandler","mousedownHandler","keyBoardHandler","rippleFn","upDownKeyHandler","keyEventHandler","defaultIdx","liIdx","removeCustomSelection","isValidLI","selectedLi","getLI","beforeOpenArgs","openArgs","focusEle","beforeCloseArgs","btnModel","TAGNAME","SplitButton","createPrimaryButton","createSecondaryButton","secondaryBtnObj","setAria","primaryBtnObj","btnElem","dropDownBtnModel","beforeItemRender","beforeClose","aria-expanded","aria-haspopup","aria-owns","primaryBtnClickHandler","btnKeyBoardHandler","altdownarrow","CTRLBTN","CTRLSWITCH","FORMATSWITCH","HSVAREA","INPUTWRAPPER","MODESWITCH","NOCOLOR","PALETTES","PALETTECONTENT","PICKERCONTENT","PREVIEW","PREVIOUS","SELECT","SPLITPREVIEW","TOHSV","presets","ColorPicker","Apply","Cancel","ModeSwitcher","inline","createWidget","createSplitBtn","tileRipple","ctrlBtnRipple","createPalette","firstPaletteFocus","createPicker","getDragHandler","isPicker","createCtrlBtn","toggleDisabled","refreshPopupPos","splitButton","splitBtn","beforeOpenFn","onOpen","popupClose","rgba","convertToRgbString","hexToRgb","preview","getPopupEle","popupInst","getPopupInst","modal","destroyOtherComp","presetColors","paletteGroup","appendPalette","modeSwitcher","noColor","setNoColor","borderBottomWidth","hsv","rgbToHsv","refEle","tile","presetName","addTileSelection","noColorEle","attr","insertPos","hsvContainer","dragHandler","setHsvContainerBg","setHandlerPosition","createSlider","createDragTooltip","getHsvContainer","hsvToRgb","hsvArea","sliderPreviewWrapper","createPreview","sliderWrapper","slider","hueSlider","hueChange","opacitySlider","opacityChange","opacityBgTrack","updateOpacitySliderBg","convertToOtherFormat","pValue","rgbToHex","cValue","updatePreview","triggerEvent","previewContainer","colorValue","getNumericTextBoxModel","inputWrap","hexInput","maxlength","clsName","btnWrapper","controlBtnWrapper","appendModeSwitchBtn","getTooltipInst","setTooltipOffset","convertToHsvString","updateHsv","isKey","updateInput","removeTileSelection","convertRgbToNumberArray","n","pickerKeyDown","handlerDown","addCtrlSwitchEvent","addvalueEventHandler","previewHandler","paletteClickHandler","paletteKeyDown","addInputEvent","formatSwitchHandler","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","cls","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","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","this_2","getVal","tempObj","_loop_3","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","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","args_1","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","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","previousElementSibling","updateUiContent","curViewDs","checkListWrapper","changeElementAttributes","checklistElement","activeIndex","findDSAndIndexFromId","dataCollection_1","textCollection_1","curViewDS_1","curViewDS_2","text_1","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","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","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","selectRange","yearDate","presetElement","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","MouseEvent","TouchEvent","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","isBlur","getSelectedRange","refreshChange","enableInput","clearModelvalue","DAY","MONTH","YEAR","NAVIGATION","FOCUS","createListItems","createEl","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","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","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","measure","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","currentScrollSvg","replaceChild","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","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","Trendline","setDataSource","trendLineModule","initDataSource","visibleSeriesCount","ErrorBarCapSettings","ChartSegment","ErrorBarSettings","SeriesBase","currentViewData","processJsonData","xName","Series","textMappingName","processInternalData","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","seriesCollection_1","pointsLength","percent","stackedValues","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","shapeOption","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","legendShape","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","endPath","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","w","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","object","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","tempElement","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","kind","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","init","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","limit","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","isDirectory","writeZippedContent","crc32Value","compressedData","compressedSize","uncompressedDataSize","compressionType","calculateCrc32Value","readAsArrayBuffer","compressor","currentIndex","nextIndex","zipParts","extFileAttr","writeHeader","localHeader","centralDir","writeCentralDirectory","zipHeader","getModifiedTime","getModifiedDate","localDirLen","cenDirLen","getArrayBuffer","writeFooter","externalFileAttribute","centralLength","localLength","modTime","modiDate","itemName","InternalEnum","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","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","internalLineLimit","wordWrapType","Word","Top","isRightToLeft","internalCharacterSpacing","internalWordSpacing","clip","pdfSubSuperScript","internalParagraphIndent","firstLineIndent","trailingSpaces","isNoClip","initialLineIndent","StringTokenizer","currentPosition","getCharsCount","numSymbols","readLine","text2","peekLine","readWord","peekWord","word","read","peek","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","builder","curLine","curIndent","isSingleWord","curLineWidth","getWrapType","Character","ln","LayoutBreak","LastParagraphLine","layoutLines","breakType","LineInfo","lineLimit","expHeight","trimLine","size_1","textRemainder","empty","ObjectStatus","PdfFont","Regular","setStyle","metrics","getHeight","Bold","Italic","Strikeout","Underline","fontMetrics","pdfFontInternals","measureString","temparg2","layoutArea","temparg3","equalsTo","equalsToFont","getInternals","setInternals","internals","applyFormatSettings","realWidth","characterSpacing","wordSpacing","charSizeMultiplier","syncObject","PdfWriter","pdfDocument","overload","tempOverload","ObjectType","PdfMainObjectCollection","objectCollections","mainObjectCollection","primitiveObjectCollection","isNew","objInfo","ObjectInfo","Registered","lookFor","wasNew","trySetReference","found","setReference","pdfObject","objectCollectionIndex","PdfDocumentBase","isStreamCopied","PdfDocument","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","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","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","isEmbedFont","lineInfo","hAlignShift","drawUnicodeLine","drawAsciiLine","useWordSpace","Justify","justifyLine","breakUnicodeLine","blocks","tokens","drawUnicodeBlocks","token","convertToUnicode","getUnicodeString","xShift","spaceWidth","tokenWidth","converted","fontInternal","boundsWidth","hasWordSpacing","whitespacesCount","wordSpace","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","PdfLayoutBreakType","PdfDestinationMode","ElementLayouter","layoutElement","isBoundsChanged","layoutInternal","PdfLayoutFormat","baseFormat","break","paginateBounds","boundsSet","usePaginateBounds","layoutType","Paginate","FitPage","layoutPaginateBounds","PdfLayoutParams","layoutFormat","PdfLayoutResult","PdfLayoutElement","bEmbedFonts","TextLayouter","currentBounds","pageResult","TextPageLayoutResult","remainder","layoutOnPage","getLayoutResult","PdfTextLayoutResult","lastLineBounds","checkCorrectBounds","stringResult","textFinished","FitElement","PdfTextWebLink","getTextPageBounds","verticalShift","remainderText","lastLineTextBounds","PdfTextElement","hasPointOverload","isPdfTextElement","stringLayoutResult","previousPosition","calculateResultBounds","lineSize","startPosition","PdfUriAnnotation","pdfUriAction","uriAction","uniformResourceLocator","uriAnnotation","recalculateBounds","defaultBorder","previousFontStyle","calculateBounds","drawMultipleLineWithPoint","drawMultipleLineWithBounds","PdfNumbersConvertor","intArabic","numberStyle","Numeric","LowerLatin","arabicToLetter","LowerRoman","arabicToRoman","UpperLatin","UpperRoman","retval","generateNumber","arabic","convertToLetter","appendChar","magnitude","numberstring","letterLimit","acsiiStartIndex","PdfTemplateValuePair","pdfTemplate","PdfMultipleValueField","drawLocation","PdfPageNumberField","internalNumberStyle","internalGetValue","PdfCompositeField","internalText","automaticField","PdfSingleValueField","painterGraphics","PdfPageCountField","PdfBorderOverlapStyle","PdfDestination","destinationMode","destinationLocation","initializePrimitive","simplePage","FitToPage","PdfTrueTypeFont","createFontInternal","codeWidth","calculateStyle","iStyle","equalFont","enableCache","isEmbed","isUnicodeFont","PdfPageTemplateElement","dockStyle","resetAlignment","alignmentStyle","setAlignment","isForeground","templateType","updateDocking","dock","canBeSet","TopLeft","MiddleLeft","BottomLeft","TopCenter","TopRight","MiddleRight","BottomRight","BottomCenter","MiddleCenter","getAlignmentBounds","getDockBounds","getSimpleAlignmentBounds","getTemplateAlignmentBounds","actualBounds","getSimpleDockBounds","getTemplateDockBounds","PdfBorders","defaultBorderPenLeft","dashStyle","defaultBorderPenRight","defaultBorderPenTop","defaultBorderPenBottom","leftPen","rightPen","topPen","bottomPen","PdfPaddings","leftPad","rightPad","topPad","bottomPad","PdfHorizontalOverflowType","PdfGridStyleBase","gridBackgroundBrush","gridTextBrush","gridTextPen","gridFont","PdfGridStyle","gridBorderOverlapStyle","Overlap","bAllowHorizontalOverflow","gridHorizontalOverflowType","LastPage","gridCellSpacing","gridCellPadding","PdfGridCellStyle","gridCellBorders","default","PdfGridRowStyle","gridRowBackgroundBrush","setBackgroundBrush","getCell","backgroundBrush","gridRowTextBrush","setTextBrush","gridRowTextPen","setTextPen","textPen","gridRowFont","gridRowBorder","setBorder","borders","setParent","RangeNavigatorTheme","PdfGridCell","cellWidth","cellHeight","finsh","rowSpanRemainingHeight","gridRowSpan","colSpan","gridRow","internalIsCellMergeContinue","internalIsRowMergeContinue","internalIsCellMergeStart","internalIsRowMergeStart","remaining","objectValue","rowSpanExists","cellStyle","measureHeight","columnSpanExists","isComplete","measureWidth","layouter","getTextFont","webLink","cellPadding","cellSpacing","drawCellBackground","getBackgroundBrush","adjustContentLayoutArea","returnBounds","rowSpan","cancelSubsequentSpans","allowHorizontalOverflow","rowOverflowIndex","adjustOuterLayoutArea","getTextPen","getTextBrush","strFormat","getStringFormat","innerLayoutArea","imageBounds","drawCellBorders","borderOverlapStyle","Inside","p1","p2","Square","currentColIndex","columnSpan","compWidth","getColumn","currentRowIndex","rowCollection","getHeader","getRow","rowMergeComplete","calculateWidth","cellIndex","PdfGridCellCollection","tempcell","PdfGridColumn","columnWidth","isCustomWidth","PdfGridColumnCollection","internalColumns","measureColumnsWidth","initialWidth","isPageWidth","getDefaultWidths","subFactor","PdfGridRow","gridRowOverflowIndex","isRowHeightSet","isRowMergeComplete","pdfGrid","bRowSpanExists","gridCells","rowStyle","gridRowBreakHeight","bColumnSpanExists","PdfGridRowCollection","addRow","temprow","PdfGridHeaderCollection","PdfGridLayoutFormat","PdfGrid","gridSize","isRearranged","pageBounds","listOfNavigatePages","columnRanges","breakRow","beginCellDraw","endCellDraw","beginPageLayout","endPageLayout","bRepeatHeader","gridColumns","gridRows","gridHeaders","gridInitialWidth","gridStyle","pageWidth","childGrid","isGridLayouter","setSpan","gridLocation","currentCellIndex","colCount","isCellMergeContinue","isRowMergeContinue","isCellMergeStart","isRowMergeStart","currentPageBounds","currentGraphics","isChildGrid","hType","horizontalOverflowType","determineColumnDrawRanges","rowWidth","internalWidth","internalHeight","isCorrectWidth","isCorrectHeight","startColumn","endColumn","cellWidths","availableWidth","subWidths","layoutedPages","startPage","cellBounds","cellStartIndex","cellEndIndex","returnObject","raiseBeforePageLayout","drawRow","repeatRow","originalHeight","repeatRowIndex","rowResult","isFinish","OnePage","repeatHeader","i_2","maximumCellBoundsWidth","rowLayoutBoundsWidth","NextPage","reArrangePages","raisePageLayouted","nextPage","pageindex","PdfGridLayoutResult","ReCalculateHeight","currentRow","raiseBeginPageLayout","PdfGridBeginPageLayoutEventArgs","startRowIndex","PdfGridEndPageLayoutEventArgs","raiseEndPageLayout","result_1","RowLayoutResult","rowHeightWithSpan","maxSpan","currRowIndex","rowMaxHeight","nextRow","calculatedHeight","rowBreakHeight","location_2","cancelSpans","CheckIfDefaultFormat","cellstyle","RaiseBeforeCellDraw","RaiseAfterCellDraw","defaultFormat","measureTrailingSpaces","noClip","raiseBeginCellDraw","PdfGridBeginCellDrawEventArgs","raiseEndCellDraw","PdfGridEndCellDrawEventArgs","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","bubbles","cancelable","groupEle","CrosshairSettings","ZoomSettings","Chart","chartid","initPrivateVariable","refreshDefinition","tooltipModule","createChartSvg","calculateAreaType","calculateVisibleSeries","initTechnicalIndicators","initTrendLines","calculateVisibleAxis","getLocalizedLabel","legendModule","getLegendOptions","isCalculateStacking","rectCount","renderElements","renderBorder","renderTitle","renderAreaBorder","renderSeriesElements","applyZoomkit","performSelection","setSecondaryElementPosition","renderAnnotation","yAxisElements","stripLineModule","renderStripLine","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","exportChart","trendIndex","trendLine","sourceIndex","initSeriesCollection","yAxisName","polarSeriesModule","radarSeriesModule","isPanning","isAxisZoomed","series_2","initAxis","injectTo","isSeries","seriesName","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","DateTime","datetimeInterval","getYear","getHour","endMinute","endSecond","endYear","endMonth","endDay","alignRangeStart","skeletonType","sDate","intervalSize","sResult","Category","Logarithmic","logEnd","calculateLogNiceInterval","axisFormat","isCustomFormat","DateTimeCategory","axisSize","sameInterval","sameValue","StripLine","measureStripLine","stripline","actualStart","actualEnd","getFromTovalue","startFromAxis","findValue","getToValue","striplineGroup","axes_1","renderRectangle","textMid","ty","tx","getTextStart","invertAlignment","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","startPath","getAreaEmptyDirection","isXSegment","getAxisValue","sortSegments","chartSegments","segmentAxis","access","applySegmentAxis","includeSegment","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","columnDrawTypeRender","itemCurrentXPos","pointStartAngle","pointEndAngle","dStartX","dStartY","dEndX","dEndY","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","j_1","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","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","inverted","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","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","point_1","errorX","errorY","verticalError","horizontalError","capOption","capPath","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","errorBarClipRect","errorBarElements","Legend","visibleSeriesCollection","visibleSeriesCollection_1","extraHeight","extraWidth","legendEventArgs","columnHeight","prevLegend","previousBound","availwidth","LegendClick","refreshSeries","legendItemsId_1","AnnotationBase","setAnnotationPixelValue","accumulationBound","setAnnotationPointValue","isLog","xAnnotation","setAccumulationPointValue","annotationElement","coordinateUnits","setElementStyle","accPoint","setAlignmentValue","ChartAnnotation","BoxAndWhiskerSeries","centerRegion_1","findBoxPlotValues","boxPlotMode","updateTipRegion","renderBoxAndWhisker","tipRegion","updateTipSize","midWidth","midHeight","topWidth","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","isThumbDrag","moveLength","isWithIn","positionThumb","setZoomFactorPosition","mouseXY","thumbX","currentWidth","currentScrollWidth","setCursor","resizeThumb","getDefaults","removeScrollSvg","scrollbar","isHorizontalAxis","createScrollSvg","isLeftHover","isRightHover","isAxis","isCurrentAxis","AccumulationAnnotationSettings","AccumulationDataLabelSettings","AccPoints","labelVisible","AccumulationSeries","sumOfPoints","accumulation","resultData","seriesCounts","findSumOfPoints","sumOfClub","clubValue","groupTo","setPoints","isClub","pushPoints","lastGroupTo","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","explodeAll","explodeIndex","accumulationSelectionModule","deExplodeSlice","explode","midAngle","isExplode","explodeSlice","sliceId","setTranslate","setElementTransform","PieBase","initProperties","initAngles","connectorStyle","explodeOffset","findCenter","defaultLabelBound","accumulationRect","getSeriesBound","accumulationRectCenter","getRectFromAngle","nextQuandrant","lastQuadrant","getDoughnutPath","getPiePath","PieSeries","getPathOption","groupId","clipslice","AccumulationChart","accBaseModule","isIE11Pointer","accumulationMouseMove","accumulationMouseEnd","accumulationMouseStart","accumulationOnMouseClick","accumulationRightClick","accumulationMouseLeave","accumulationResize","createPieSvg","createSecondaryElement","doGrouppingProcess","processSelection","tooltipParent","getSmartLegendLocation","refreshPoints","findDatalabelVisibility","refreshElements","TriangularBase","actualChartArea","triangleSize","neckSize","neckWidth","neckHeight","initializeSizeRatio","gapRatio","coEff","spacing","yRatio","heightRatio","setLabelLocation","labelOffset","findPath","locations","FunnelSeries","getSegmentData","endTop","endBottom","endMin","bottomY","emptySpaceAtLeft","seriesTop","line3","line6","PyramidSeries","pyramidMode","calculateSurfaceSegments","sumOfValues","gapHeight","preSum","getSurfaceHeight","currY","coef","surface","solveQuadraticEquation","root1","root2","sd","AccumulationLegend","titleRect","totalRowCount","getMaxColumn","maxPageColumn","maxColumnWidth","columns_1","getAvailWidth","legendX","availablewidth","legendBound","getTitleRect","legendByIndex","legendCollections_1","legendItemsId","currentSeries","AccumulationDataLabel","getDataLabelPosition","getLabelDistance","getLabelRegion","marginValue","labelAngle","enableSmartLabels","getSmartLabel","circular","findPreviousPoint","isOverlapping","isConnectorLineOverlapping","setOuterSmartLabel","setPointVisibileFalse","textTrimming","textsize","getOverlappedAngle","setSmartLabelForSegments","textRegion","overlapHeight","getEdgeOfLabel","previousstart","previousend","isLineRectangleIntersect","line1","line2","isLinesIntersect","point11","point12","lies","getConnectorPath","getConnectorStartPoint","getPolyLinePath","controlPoints","getBezierPoint","p0","labelshape","isTemplate","getTemplateSize","correctLabelRegion","setTemplateStyle","getSaturatedColor","clientRect","labelColor","doTemplateAnimation","saturatedColor","getLabelBackground","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","secondaryAxis","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","animationDuration","RangeNavigator","lineSeriesModule","setSliderValue","isDateTime","createRangeSvg","renderChartBackground","periodSelectorSize","periodSelectorY","deductHeight","renderPeriodSelector","renderSlider","displayMode","renderSelectorElement","renderSelector","rangeOnMouseDown","rangeOnMouseClick","rangeResize","setMouseX","refreshRange","CLS_DISABLE","CLS_HSCROLLNAV","HScroll","browser","browserCheck","ieCheck","uniqueId","touchHandler","createNavIcon","scrollEle","scrollDiv","innerEle_1","scrollItems","nav","navEles","clsRight","navItem","CLS_NAVRIGHTARROW","clsLeft","navEle","navLeftItem","CLS_NAVLEFTARROW","eventBinding","onKeyPress","keyTimer","keyTimeout","eleScrolling","onKeyUp","tabHoldHandler","repeatScroll","clickEventHandler","scrollDis","rootEle","scrlLeft","scrollStep","arrowDisabling","addDisable","removeDisable","navLeftEle","navRightEle","disEle","CLS_ITEMS","CLS_ITEM","CLS_SEPARATOR","CLS_POPUPICON","CLS_POPUPDOWN","CLS_TBARTEXT","CLS_TBAROVERFLOW","CLS_POPOVERFLOW","CLS_TBARNAV","CLS_TBARPOS","CLS_POPUPCLASS","CLS_POPUP","CLS_TBARNAVACT","CLS_TBARIGNORE","CLS_POPPRI","CLS_MULTIROW_SEPARATOR","CLS_EXTENDABLE_SEPARATOR","CLS_EXTENDEDPOPOPEN","Toolbar","popupOpen","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","clsList","isPopupElement","popupNav","popupClickHandler","CLS_RTL","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","scrollVal","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","DOWNARROW","FOCUSED","SEPARATOR","HIDE","MenuItem","ContextMenu","navIdx","isTapHold","ngElement","targetElems","cmenuHandler","moverHandler","delegateClickHandler","closeMenu","rightEnterKeyHandler","leftEscKeyHandler","cul","fliIdx","fli","getLIByClass","getIdx","cli","openMenu","sli","ulIndex","isMenuVisible","toggleAnimation","ICONS","hdata","hli","toggleVisiblity","collide","xCollision","hasField","toRawObject","menuItems","showItemOnClick","cliWrapper","isInstLI","setLISelected","showSubMenu","cliIdx","culIdx","classname","skipHdr","getChangedItemIndex","insertAfter","uls","isMenuOpen","isUniqueId","isCallBack","showItems","showHideItems","hideItems","ishide","iitems","insertItems","isAfter","menuitem","CLS_HIDDEN","CLS_ICON_CLOSE","CLS_WRAP","CLS_TB_ITEMS","CLS_TB_ITEM","CLS_TB_POPUP","CLS_PROGRESS","TabActionSettings","TabAnimationSettings","Header","TabItem","Tab","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","txt","cont","parseObject","clicked","setCloseButton","showCloseButton","hdrItem","reRenderItems","swipeHandler","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","NODECOLLAPSED","CHECK","CHECKBOXWRAP","CHECKBOXFRAME","treeAriaAttr","treeRole","FieldsSettings","ActionSettings","NodeAnimationSettings","TreeView","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","setTouchClass","checkedNodes","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","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","doSelectionAction","sUids","sNode","selectGivenNodes","preventContextMenu","setFocusElement","checkWrapper","triggerClickEvent","expandAction","collapseNode","toggleSelect","nodeCheckingEvent","nodeCheckedEvent","expandNode","setHeight","expandedNode","animateHeight","expandArgs","getExpandEvent","colArgs","currentHeight","parentLi","expandChild","eicon","childItems","mapper_1","getChildFields","getNodeObject","ensureCheckNode","renderSubChild","getFields","nodeLevel","dataLevel","getChildMapper","isRoot","getChildGroup","objlen","dataId","cIcons","multiSelect","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","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","getChildNodeObject","childData","toBind","initializeDrag","destroyDrag","virtualEle","dragRoot","dragWrap","dragLi","isSameNode","cloneEle","DRAGITEM","nLen","cNode","getDragEvent","draggedNode","dragAction","removeVirtualEle","dropTarget","dropRoot","dropObj","over","dropAction","dropWrap","dropLi","isDescendant","virEle","renderVirtualEle","dragInstance","appendNode","dropAsSiblingNode","dropAsChildNode","dropUl","dragParentUl","dragParentLi","updateElement","updateAriaLevel","updateInstance","dropParentUl","expandParent","dropIcon","dragIcon","updateChildAriaLevel","sibEle","dragNode","dropData","draggedNodeData","newParent","targetParent","droppedNode","droppedNodeData","addFullRow","toAdd","rowDiv","addMultiSelect","liEles_1","liEles_2","collapseByLevel","excludeHiddenNodes","getVisibleNodes","collapseAllNodes","expandByLevel","expandAllNodes","eIcons","vNodes","removeNode","updateSelectedNodes","doGivenAction","toExpand","addGivenNodes","isRemote","updateMapper","refNode","navigateUrl","doDisableAction","doEnableAction","proxy_1","touchEditObj","wireClickEvent","proxy_2","touchClickObj","wireExpandOnEvent","proxy_3","touchExpandObj","matched","setCheckedNodes","uncheckAll","checkAll","addNodes","beginEdit","collapseAll","disableNodes","enableNodes","ensureVisible","expandAll","getNode","moveNodes","sourceNodes","removeNodes","updateNode","CLOSE","OPEN","TRASITION","VISIBILITY","MAINCONTENTANIMATION","DISABLEANIMATION","CONTEXT","SIDEBARABSOLUTE","Sidebar","setTarget","enableDock","setDock","setMediaQuery","setType","setCloseOnDocumentClick","targetParentElement","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","enableTrim","titleEventArgs","titleLocation","renderSubtitle","subTitle","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","titleWidth","legendBoundsWidth","drawLegendShape","SparklineBorder","SparklineFont","TrackLineSettings","SparklineTooltipSettings","ContainerArea","LineSettings","RangeBandSettings","AxisSettings","Padding","SparklineMarkerSettings","LabelOffset","SparklineDataLabelSettings","tl","tr","bl","br","SparklineRenderer","sparklineData","axisCalculation","processCategory","processDateTime","spark","drawAxis","rangeBandSettings","axisSettings","startRange","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","textId","rectId","formatter","labelArgs","getLabelVisible","findRanges","getInterval","maxPointsLength","sumofValues","isNumericArray","x_1","lineSettings","axisColor","axisWidth","unitX","colWidth","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.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","isDescending","sortData","tickLineColor","pointerColor","Line","Range","Tick","Cap","NeedleTail","Annotation","Pointer","Annotations","autoAngle","updateLocation","currentRadius","GaugeTooltip","borderStyle","ejTooltip","beforeRender","onBeforeRender","tooltipCustomization","currentPointer","currentAxis","appendTargetElement","tooltipFormat","pointerSize","borderRightColor","borderLeftColor","borderBottomColor","borderTopColor","borderTopWidth","transitionProperty","transitionDuration","AxisRenderer","drawAxisOuterLine","setRangeColor","drawAxisLabels","nearSize","farSize","hiddenLabel","findAnchor","useRangeColor","drawMinorTickLines","minorTickElements","minorLineStyle","minorTicks","minorInterval","isRangeColor","majorValues","calculateTicks","drawMajorTickLines","majorTickElements","majorLineStyle","majorTicks","axisLineWidth","drawAxisRange","rangeElement","rangeIndex","calculateRangeRadius","rangeColors","PointerRenderer","drawPointers","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","activePointer","enablePointerDrag","activeAxis","pointerDrag","gaugeAxisLayoutPanel","calculateSvgSize","isElementExist","annotationEnable","refreshWithoutAnimation","index.CircularGauge","index.GaugeTooltip","index.Annotations","adjustPoint","isStart","rect1","rect2","unitePoint","intersects","SnapConstraints","AnnotationConstraints","Transform","RenderMode","KeyModifiers","Keys","DiagramEvent","isDirt","Self","Parent","isSvgRender","staticSize","isRectElement","unitMode","float","floatingBounds","setOffsetWithRespectToBounds","getAbsolutePosition","validateDesiredSize","arrange","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","ShapeAnnotation","PathAnnotation","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","horizor","verzor","displacement","newPoints","clipDecorator","isSource","segmentPath","getSegmentPath","connectorSegment","segmentElement","adjacentPoint","decEle","bridgePath","bridge","segmentPointIndex","getPath","getPt","st","j_2","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","basicshape","basicshapedata","flowshape","bpmnModule","initBPMNContent","subProcess","activity","processes","children_1","collapsed","updateElementVisibility","initContainer","initPorts","accessibilityContent","initPortWrapper","contentAccessibility","getIconOffet","initIcons","expandIcon","collapseIcon","initIconSymbol","initAnnotations","initAnnotationWrapper","portContent","pathdata","annotationcontent","initIconContainer","iconContent","iconContentBounds","updateRulerGeometry","renderRulerSpace","cssFloat","getRulerSVG","unitLength","unitOffset","updateSegments","run","trans","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","alignOptions","srcWidth","srcHeight","destinationW","destinationH","resultWidth","xalign","yalign","getSliceOffset","sWidth","sHeight","dWidth","dHeight","canvas1","srcRatio","destRatio","getMeetOffset","labelX","labelY","pointx","pointy","parentSvg","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","htmlLayer","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","getDiagramLayer","getGridLayer","getPortsLayer","getExpandCollapseLayer","diagramElementsLayer","Background","PageSettings","ScrollSettings","ServiceLocator","services","register","Gridlines","SnapSettings","DiagramRuler","RulerSettings","DataSource","Layout","PortDraw","ConnectorSourceEnd","ConnectorTargetEnd","BezierSourceThumb","BezierTargetThumb","OrthoThumb","SegmentEnd","PortDrag","ToolBase","protectChange","commandHandler","inAction","isProtectChange","blocked","isTooltipVisible","childTable","undoElement","undoParentElement","startAction","mouseDown","prevPosition","startTransaction","mouseUp","endTransaction","endAction","SelectTool","doRubberBandSelection","arrayNodes","getSelectedObject","clickCount","unSelect","selectObjects","clearSelection","ConnectTool","ConnectorDrawingTool","segmentpoint1","segmentpoint2","selectedSegment","updateSelector","removeSnap","entry","redoObject","undoObject","addHistoryEntry","oldValues","targetPortName","targetNodeNode","findTarget","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","endGroupAction","dragOverElement","oldValues_1","snappedPoint","removeChildFromBPmn","arg_1","dragSelectedObjects","drawHighlighter","portDrag","RotateTool","getAllDescendants","cloneChild","rotateChange","arg_2","snapAngle","rotateSelectedItems","ResizeTool","initialBounds","sizeChange","entry_2","getChanges","getPivot","horizontalsnap","snapped","verticalsnap","difx","dify","snapEnabled","snappingModule","canSnap","snapLine","getLayer","deltaWidth","deltaHeight","snapLeft","snapRight","snapTop","snapBottom","scaleObjects","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","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","TextEdit","boundingRect","diagramCanvas","windowResize","updateViewPortSize","setViewPortSize","getSizeValue","canHideResizers","updateCursor","isForeignObject","isTextBox","foreignobject","isMetaKey","isDeleteKey","checkEditBoxAsTarget","updatePortVisibility","hoverElement","getMouseEventArgs","endEdit","findObjectsUnderMouse","findObjectUnderMouse","sourceElement","findElementUnderMouse","findActionToBeDone","getTool","initialEventArgs","mouseMoveExtend","canAutoScroll","checkAutoScroll","isNode","hoverNode","drawRulerMarkers","elementLeave","elementEnter","mouseEvents","autoScrollPosition","startAutoScroll","timeOutValue","diagram_1","doAutoScroll","isMultipleSelect","markers","removeRulerMarkers","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","startTextEdit","inputChange","fontsize","textWrapper","textBounds","transforms","editTextBox","editTextBoxDiv","activeLabel","isAddTextNode","findTargetObjectUnderMouse","resetTool","findElementUnderSelectedItem","findTargetUnderMouse","actions","actualTarget","layerTarger","layerObjTable","objArray_1","spatialSearch","findObjects","findInteractableObject","actualTarget_1","portElement","findTargetElement","Layer","objectZIndex","zIndexTable","CommandHandler","clipboardData","connectorsTable","processTable","parentTable","layoutAnimateModule","backup","toolName","ToolTip","connectionChange","dragOverArg","dragOver","connectorEnd","connectorPropertyChange","updateDiagramObject","nodeEndId","portEndId","connectionEventChange","portId","argsTarget","transaction","failure","portEnd","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","paste","copyProcesses","tempNode","selectedItems_1","sortByZIndex","processes_1","protectedChange","Group","unGroup","UndoRedo","deleteChild","addChild","copiedItems","getNewObject","groupAction","objectTable","keyTable","copiedItems_1","clonedObj","cloneConnector","newNode","edges","edges_1","newConnector","edges_2","newobjs","translateObject","cloneGroup","cloneSubProcesses","innerChild","addProcess","connector_1","clonedNode","connectorTable","newChildren","childObj","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","refreshCanvasLayers","bringToFront","tabelLength","diagramLayer","diagramRenderer","nodeArray","sortID","sendForward","intersectArray","overlapObject","currentObject","sendBackward","temp_3","initSelectorWrapper","clearSelectionRectangle","selArray","rubberArray","getNodesConnectors","rubberBandSelectionMode","checkBezierThumb","dragSourceEnd","dragTargetEnd","triggerAction","clearSelectorLayer","nodePropertyChange","hasEnds","isDragSource","changeSegmentLength","translateBezierPoints","secPoint","nextDirection","changeSourceEndToPort","changeSourceEndToNode","secondSegment","segValues1","isTerminal","changeTerminal","sourcePoint2","boundaryConstraints","segmentNumber","rotateObjects","includeParent","objects_2","getChildrenBound","updateSubProcessess","rotatePoints","SnapToLines","scaleObject","updateGroupOffset","refWrapper","oldleft","oldtop","changedvalues","nodeBounds","selectorBounds","top_2","propChange","fixedNode","updateIcon","organizationalChartModule","isAnimation","newTarget","oldTarget","nodeCollection","removeChildFromBPMN","targetNodes","connectHighlighter","tgt","tgtWrap","towardsLeft","towardsTop","SnapToObject","removeGuidelines","dropBPMNchild","undoObj","redoObj","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","diagramWidth","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","newHeight","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","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","getCustomTool","getCustomCursor","historyChangeTrigger","changeType","historyChange","undo","redo","PublicMethod","focusedPoint","zoomTo","updateEventValue","canAdd","collectionChange","updateEdges","getTextAnnotationConn","initConnectors","updateDocks","updateSvgNodes","updateProcesses","processes_2","addTextAnnotation","addAnnotation","spliceConnectorEdges","removeDependentConnector","objIndex","removeElements","currentObj","removeElement_1","removeCommand","Delete","canDelete","checkAndRemoveAnnotations","deleteGroup","removeBpmnProcesses","updateNodeEdges","startEditCommad","bpmnAnnotation","getTextAnnotationWrapper","addLabels","ReadOnly","enableReadOnly","textEditing","textarea","focusOutEdit","viewPort","updateLayout","mindMapChartModule","radialTreeModule","symmetricalLayoutModule","maxIteration","springLength","springFactor","complexHierarchicalTreeModule","updateDefaultLayoutIcons","connection","saveDiagram","loadDiagram","exportDiagram","printandExportModule","addPorts","removeLabels","removePorts","real","overlap","renderOverlapElement","renderBackgroundLayer","commonStyle","bgLayer","backgroundImage","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","textAnnotationConnectors","_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","updateDefaultLayoutIcon","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","bridgingModule","clearRect","adornerSVG","gridLayer","removePageBreaks","backgroundLayer","showPageBreaks","setOverview","overview","renderDocument","renderNodes","updateThumbConstraints","hideRotate","hideResize","thumbConstraints","adornerSvg","highlighter","selectionRect","getPortContainer","containsMargin","isBpmnTextAnnotation","textEdit","updateTextAnnotationContent","deleteNode","isAction","tempNode_1","updateObject","oldNode","oldConnector","actualSourcePoint","actualTargetPoint","nodePropertyChangeExtend","connectorSegmentChange","existingInnerBounds","segmentChange","isLayout","existingBounds","updateMargin","updateBPMN","actualPort","updatePort","checkSelectedItem","updateTextAnnotationProp","updateConnectorEdges","updateGroupSize","connectorProprtyChangeExtend","updateBPMNConnector","disableBridging","oldSource","annotationWrapper","updateAnnotations","updateNodeProperty","selItems","canUpdateSize","isMeasure","portWrapper","iconRect","iconShape","selectedSymbol","paletteId","selectedSymbols","dragEnter","dragLeave","PrintAndExport","fileType","buffers","getDiagramBounds","setCanvas","diagramAsSvg","pom","initMouseEvent","images","setScaleValueforCanvas","diagramAsCanvas","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","Menu","getMenuItems","contextMenuItemClick","contextMenuBeforeOpen","contextMenuOpen","onClose","contextMenuOnClose","orderItems","groupItems","showCustomMenuOnly","getDefaultItems","buildDefaultItems","orderGroup","customItem","getKeyFromId","updateItemStatus","getLocaleText","ensureItems","ensureTarget","diagramArgs","newItem","selectedLength","canUndo","canRedo","generateID","menuItem","bringToFrontOrder","moveForwardOrder","sendToBackOrder","sendBackwardOrder","BpmnDiagrams","annotationObjects","getBPMNEventShape","getBPMNGatewayShape","getBPMNDataObjectShape","getBPMNShapes","getBPMNActivityShape","getBPMNTextAnnotation","bpmnShape","bpmnShapeData","gatewayshape","gatewayNode","gatewayTypeNode","gatewayTypeNodeShapeData","shapeType","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","annotationNode","setAnnotationPath","annotationConnector","bpmnShapeContent","annotationObj","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","checkAnnotation","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","confirm","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","entryObject","getHistoryList","getUndoEntry","endGroupActionCount","undoEntry","undoGroupAction","currEntry","getHistroyObject","addObject","recordPositionChanged","recordSizeChanged","recordRotationChanged","recordConnectionChanged","recordPropertyChanged","isUndo","recordCollectionChanged","recordLabelCollectionChanged","recordPortCollectionChanged","recordSegmentChanged","historyEntry","ignoreProperty","isRedo","segmentChanged","positionChanged","connectionChanged","scaleWidth","scaleHeight","selectorObj","rotationChanged","getRedoEntry","startGroupActionCount","redoEntry","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","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","renderPalette","paletteDiv","renderSymbols","addPaletteItem","paletteName","paletteSymbol","symbolPaletteGroup","getSymbolContainer","removePaletteItem","stackPanel","symbolContainer","getSymbolTemplate","symbolInfo","getSymbolInfo","actualWidth","actualHeight","symbolMargin","scaleSymbol","getSymbolDescription","parentDiv","symbolPreviewWidth","symbolPreviewHeight","symbolPreview","measureAndArrangeSymbol","getHtmlSymbol","updateSymbolSize","getSymbolSize","HTMLCanvasElement","isPreview","highlightedSymbol","srcElement","searchPalette","palette_1","HTMLInputElement","initDraggable","symGroup","searchDiv","textBox","filterSymbols","createSearchPalette","symbolGroup_1","emptyDiv","Overview","actionName","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","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","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","updateFocus","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","isInline","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","ownerTable","ownerRow","getContainerWidth","isInsideTable","associatedCell","cellFormat","inlineElement","TextElementBox","ImageElementBox","BookmarkElementBox","getInline","indexInInline","isStarted","splittedWidget","ListTextElementBox","getLength","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","getAdjacentCellBottomBorder","prevBottomCellTopBorder","colCodeNo","paragraphWidget","splitParagraph","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","updateField","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","allowRowBreakAcrossPages","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","isFitInClientArea","isSplittedToNewPage","shiftTableWidget","shiftRowWidget","shiftCellWidget","shiftParagraphWidget","updateVerticalPositionToTop","combinedTable","isUpdateTop","tablewidget","previousBodyWidget","maxElementHeight","getMaxElementHeight","paragraphView","nextBodyWidget","widgetIndex","updateParagraphWidgetInternal","activeArea","createOrGetNextBodyWidget","lastLine","newParagraphWidget","destroyAndScroll","scrollToBottom","previousBlock","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","onTouchUpInternal","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","lastElement","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","handleTextInput","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","inputText","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","onBackSpace","onDelete","onEnter","animationTimer","copyInsertFormat","insertFormat","sFormat","insertPosition","isRemoved","getParagraphInfo","editPosition","removeSelectedContents","updateInsertPosition","insertTextInline","tempSpan","splittedSpan","updateEndPosition","isSelectionOnHyperlink","checkAndConvertList","checkAndConvertToHyperlink","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","newParagraph","insertTableRows","insertBlockInternal","insertTableInternal","moveRows","removeBlock","updateNextBlocksIndex","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","removeField","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","deleteBlock","insertParagraphPaste","addRemovedNodes","checkAndInsertBlock","paragraphAdv","deleteTableBlock","deletePreviousBlock","updateEditPosition","deleteCellsInTable","deleteCell","deleteContainer","isDeleteCells","cell_1","setActionInternal","copyChildToClipboard","checkClearCells","deleteContent","splitTable","splitEndRow","enableHistoryMode","clonedTable","deleteParagraphMark","removeContent","copyListLevel","listParagraphs","updateListParagraphsInBlock","startListLevel","tempList","abstractListAdv","listName","bulletCharacters","initialStart","splitParagraphInternal","increaseIndex","currentSectionIndex","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","copyValues","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","rightAlign","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","isEnd","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","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","refreshSelection","addListFocus","focusAtLastListItem","updateListARIA","disableStatus","removelastSelection","chipCollectionWrapper","tempValues","removeValue","removeChipSelection","updateDelimeter","delimiterChar","makeTextBoxEmpty","mainData","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","refreshListItems","updateDelimView","removeChipFocus","refreshInputHight","floatLabelBlur","validateValues","initStatus","getPagingCount","showDelimWrapper","viewWrapper","floatLabelFocus","delimiterWrapper","hideDelimWrapper","mobFilter","calcPopupWidth","popupKeyActions","updateAriaAttribute","moveByList","selectByKey","escapeAction","enableSelectionOrder","checkBackCommand","moveBy","removeSelectedChip","selectListByKey","hideOverAllClear","maximumSelectionLength","updateListSelection","selectedElem","addChipSelection","moveByTop","chipClick","onChipRemove","setFloatLabelType","updateMainList","removeChip","updateChipStatus","IsChecked","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","okButton","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","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","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","saveFreezePanes","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","valueFormatter","commandsTemplate","headerTemplateFn","fltrTemplateFn","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","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","spinner","cBox","events.filterBeforeOpen","filterModel","columnName","columnType","events.actionBegin","btnClick","isExcel","dialogCreated","getAllData","events.filterDialogCreated","events.filterMenuClose","clearFilter","events.preventBatch","filterCollection","fltrBtnHandler","optr","caseSen","itemsCnt","fObj","initiateFilter","fColl","firstVal","parsed","predicte","filterChoiceCount","filterEvent","processSearch","getPredicateFromCols","getPredicate","predicateList","fPredicate","foreignColumn","getForeignKeyColumns","events.generateQuery","events.filterChoiceRequest","processDataOperation","eventPromise","dataSuccess","getStateEventArgument","def","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","getColumns","selectQueryFields","searchQuery","aggregateQuery","sortQuery","pageQuery","isForeign","allowPaging","groupSettings","getColumnByField","isGrpFmt","formatGroupColumn","sortGrp","sSettings","searchSettings","fGeneratePredicate","skipFoerign","actualFilter","colType","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","isChanged","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","getColumnIndexByField","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","destroyTemplate","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","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","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","alert","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","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","gobj","checkboxColumn","chkField","ensureCheckboxFieldSelection","getDataModule","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","previousValues","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","Grid","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","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.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","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","colFormat","inputElem","datePickerObj","FilterMenuRenderer","fltrObj","isDialogOpen","colTypes","boolean","datetime","flMuiObj","renderDlgContent","mainDiv","dlgDiv","filterBtnClick","clearBtnClick","renderFilterUI","writeMethod","renderFlValueUI","valueDiv","instanceofFilterUI","ui","dlgContentEle","flValue","flOptrValue","targ","flIcon","ExcelFilter","getCMenuDS","unwireExEvents","cmenu","createMenu","isCheckIcon","menu","createMenuElem","ensureTextFilter","iconName","isSubMenu","wireExEvents","clickExHandler","destroyCMenu","menuObj","submenu","isCMenuOpen","selectedMenu","preventClose","client","contextRect","getContextBounds","getCMenuYPosition","contextWidth","filterLength","renderDialogue","complexFieldName","overlayClick","removeDialog","createdDialog","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","valueInput","renderAutoComplete","renderNumericTextBox","renderDate","matchCaseDiv","matchCaseInput","completeAction","columnvalue","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","Resize","isDblClk","findColumn","resizeColumn","footerTable","headerTextClone","contentTextClone","indentWidthClone","contentText","wHeader","wContent","columnbyindex","calcTableWidth","offsetWidthValue","refreshHeight","setHandlerHeight","getResizeHandlers","resizeStart","callAutoFit","getTargetColumn","refreshColumnWidth","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","events.groupComplete","events.ungroupComplete","grpRow","expandCollapseRows","applySortFromTarget","unGroupFromTarget","toogleGroupFromHeader","showToggleButton","gHeader","cellIdx","rowNodes","expandElem","renderGroupDropArea","initDragAndDrop","refreshToggleBtn","groupElem","updateGroupDropArea","dragLabel","initializeGHeaderDrop","initializeGHeaderDrag","colName","addColToGroupDrop","groupAddSortingQuery","removeColFromGroupDrop","groupedColumn","childDiv","ej-mappingname","headerCell","showUngroupButton","getGHeaderCell","updateGroupedColumn","updateButtonVisibility","clearGrouping","DetailRow","toogleExpandcollapse","uid_1","isDetailRow","detailRow","detailCell","parentPrimaryKeys","parentKeyField","parentRowData","injectedModues","gridElem","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","SummaryCellRenderer","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","even","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","updateFreezeEdit","fHdr","tdElement","refreshFreezeEdit","fCls","mTd","updateFrozenCont","td_1","BatchEditRender","columnObject","DialogEditRender","events.dialogDestroy","setLocaleObj","createDialog","primaryKeyValue","dialogClose","events.destroyForm","dataCell","EditRender","Inline","Batch","getEditElements","convertWidget","fForm","cols_1","focusElement","tArgs","BooleanEditCell","activeClasses","selectChkBox","isAddRow","editRow","checkBoxChange","DropDownEditCell","ddActionComplete","dlgElement","NumericEditCell","DefaultEditCell","NormalEdit","allowEditOnDblClick","editComplete","editRowIndex","primaryKeys","primaryKeyValues","applyFormValidation","mFormObj","editedData","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","validateFormObj","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","cloneComplexData","visibleColumns","DialogEdit","DatePickerEditCell","editCellType","dropdownedit","numericedit","datepickeredit","booleanedit","defaultedit","updateEditObj","createAlertDlg","createConfirmDlg","updateColTypeObj","tapEvent","alertDObj","refreshToolbar","showDeleteConfirmDialog","endEditing","editFormValidate","getCurrentEditCellData","getValueFromType","destroyToolTip","dlgWidget","dlgOk","dlgCancel","alertClick","btnOptions","executeAction","inputs","preventObj","mRules","cols_2","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","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","PaletteCollection","ColorCollection","LegendColorCollection","PaletteSettings","CellColor","heatMap","convertToRGB","previousOffset","previousColor","getEqualColor","nextColor","getPercentageColor","convertToHex","itemColor","colorSplit","prevColor","getPercentage","getColorCollection","colorCollection","legendColorCollection","emptyPointColor","paletteSettings","emptyCellColor","tempcolorMapping","orderbyOffset","isCompact","dataSourceMaxValue","dataSourceMinValue","updateLegendColorCollection","returnCollection","PaletterColor","getColorByValue","rbg","compareValue","fontModel","CurrentRect","basic","TextBasic","LineOption","strokewidth","dasharray","DrawSvgCanvas","heatmap","enableCanvasRendering","drawCanvasRectangle","canvasRenderer","canvasDrawText","createWrapText","GradientColor","CanvasTooltip","GradientPointer","pathX1","pathY1","pathX2","pathY2","pathX3","pathY3","heatMapTitleFont","rectLabelFont","axisLabels","tooltipLabels","axisLabelSize","axisLabelInterval","getTitleSize","getMaxLabelSize","calculateNumericAxisLabels","adaptorMin","adaptorMax","adaptorModule","isCellData","adaptiveXMinMax","adaptiveYMinMax","calculateCategoryAxisLabels","calculateDateTimeAxisLabel","getTotalLabelLength","AxisHelper","drawSvgCanvas","drawXAxisLine","compactInterval","axisInterval","tempintervel","lableStrtX","lableRect","lableStartY","CellSettings","cellColor","renderRectSeries","containerRectObject","cellSettings","showLabel","containerTextObject","tempBorder","tempX","tempY","dataXIndex","dataYIndex","tempWidth","tempHeight","tempRectPosition","rectPositionCollection","checkLabelYDisplay","tempMaxString","getFormatedText","checkLabelXDisplay","clonedDataSource","rectPosition","themeCellTextStyle","highlightSvgRect","tempID","tempRectHoverClass","enableCellHighlighting","oldElement","getCurrentRect","firstRectDetails","heatMapSeries","rectX","rectY","hoverXAxisLabel","hoverXAxisValue","hoverYAxisLabel","hoverYAxisValue","TwoDimensional","tempCloneData","completeDataSource","tempVariable","dataLength","cloneDataIndex","minMaxDatasource","checkmin","maxLegendLabelSize","gradientScaleSize","positionCollections","previousOptions","listPerPage","numberOfPages","listWidth","legendRect","lastList","navigationCollections","pagingRect","listInterval","legendLabelTooltip","labelXCollections","labelYCollections","legendXCollections","legendYCollections","renderLegendItems","rectItems","legendRectScale","rectItemsSvg","horizontalGradient","legendMinValue","legendMaxValue","gradientOptions","gradientColor","cgradientColors","gradientPercentage","linearGradient","rectItems_1","renderColorAxisGrid","renderLegendLabel","legendScale","listRect","translategroup","calculateListPerPage","renderListLegendMode","dominantBaseline","textWrapWidth","previousSegmentWidth","nextSegmentWidth","legendRectPadding","textBasic","renderGradientPointer","legendPath","cellValue","removeGradientPointer","gradientPointer","calculateListLegendBounds","perListWidth","numberOfRows","calculateLegendSize","legendTop","axisTitlePadding","titleSettings","calculateGradientScale","measureListLegendBound","rightArrowX","rightArrowY","pagingTextRect","rightArrowRect","leftArrowRect","leftOption","rightOption","calculateColorAxisGrid","legendPart","maxTextWrapLength","segmentCollections","legendElement","renderLegendLabelTooltip","legendY","division","isNext","HeatMap","heatMapAxis","twoDimensional","tempTooltipRectId","processInitData","calculateMaxLength","completeAdaptDataSource","showHideTooltip","reRenderDatasource","constructDatasource","setRenderMode","renderSecondaryElement","createTooltipDiv","heatMapTitle","isHeatmapRect","lastRectDetails","cellTextColor","heatMapMouseClick","heatMapMouseMove","heatMapMouseLeave","heatMapResize","xAxisMax","yAxisMax","svgCanvasRect","xLabel","yLabel","cellElement","isheatmapRect","showGradientPointer","tooltipTimer","isFadeout","gradientTimer","main","AdaptiveMinMax","reconstructedXAxis","reconstructedYAxis","adaptData","isJsonData","adaptorType","processJsonTableData","processJsonCellData","getMinMaxValue","constructAdaptiveAxis","processCellData","getNumericAxisCollection","getDateAxisCollection","loopIndex","tempAxisColl","dataIndex","adaptordata","tempDataCollection","xLabels","yLabels","currentDataXIndex","currentDataYIndex","reconstructData","xindex","xDataMapping","yDataMapping","valueMapping","isShow","tempTooltipText","hetmapSeries","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","markerElement","markerType","currentPath","performBarAnimation","value2","clipVal","clipElement","lineY","pointerValue","startPointerVal","roundedCornerRadius","axisElements","axisObject","drawRanges","drawTicks","axisAlign","tranX","nearAxisWidth","farAxisWidth","containerObject","tickID","tickBounds","tickPath","pointesGroup","pointerClipRectGroup","pointerID","gaugeResized","drawBarPointer","renderAnnotationElements","secondaryID","annotationGroup","createAnnotationTemplate","getTooltipLocation","lineX","lineId","pointer-events","borderRadius","padding-left","padding-right","padding-top","padding-bottom","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","rectBounds","geometryData","coords","generatePoints","labelTemplateEle","currentShapeData","polyLineOptions","shapeID","drawingType","generateMultiPolygonPath","lineData","bubbleG","bubbleModule","bubble_1","bubbleData","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","bubbleType","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","touchDelay","mouse","manipulateTarget","customTooltip","hoverElements","joinElements","elementString","rectZoomingStart","handled","pinchFactor","newZoomFactor","prevLevel","prevScale","minBounds","maxBounds","mapTotalWidth","mapTotalHeight","translatePointX","translatePointY","getTileTranslatePosition","currentLevel","prevSize","performRectZooming","zoomCalculationFactor","setInteraction","newInteraction","lastScale","interaction","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","PROGRESS","ToastPosition","ButtonModelProps","ToastAnimations","ToastAnimationSettings","Toast","progressObj","intervalId","titleTemplate","contentTemplate","toastTemplate","toastObj","templateChanges","toastContainer","getContainer","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","percentage","titleEle","msgContainer","appendMessageContainer","actionBtnContainer","actionBtn","btnDom","toastBeforeOpen","displayToast","clickToClose","isCloseIcon","showAnimate","toastOpen","PivotUtil","PivotEngine","savedFieldList","formatFields","calculatedFields","calculatedFormulas","valueMatrix","indexMatrix","enableSort","drilledMembers","formatSettings","calculatedFieldSettings","enableSorting","isExpandAll","isMutiMeasures","valueSortSettings","headerDelimiter","valueSortData","fillFieldMembers","updateSortSettings","generateValueMatrix","filterMembers","updateFilterMembers","generateGridData","sortByValue","valueSort","vlen","childMembers","iterateValueSortData","getFormattedFields","lnt","isSort","dataFields","getCalculatedField","fieldList","updateTreeViewData","aggregateType","formula","actualFormula","fieldKeys","calc","calcProperties","powerFunction","formulaType","lmt","aggregateValue","indMat","dlen","fList","kLn","kl","members","formattedMembers","dateMember","isDataAvail","dl","mkey","ordinal","isDrilled","actualText","fillDrilledInfo","mem","vMat","keyLen","flList","tkln","sln","slt","filterRw","isInclude","getFilters","dln","indexObject","ilist","filterElements","rln","rlt","frameFilterList","fln","allowFil","final","iln","ilt","applyValueSorting","valueSortOrder","pivotValues","rmembers","cmembers","paging","getIndexedHeaders","rowCurrentPage","rowSize","columnCurrentPage","columnSize","insertAllMember","valueContent","colheads","valuesCount","getHeaderData","insertSubTotals","getTableData","isEngineUpdated","rowCnt","savedCell","spanCnt","colCnt","rowPos","levelName","keyInd","parentMember","rlen","decisionObj","childrens","lt","memInd","headerValue","reformAxis","tnum","vlt","actCnt","isLeastNode","cln","clt","vln","mPos","getAggregateValue","vcnt","colItmLn","sortText","lvl","calObj","vData","ri","avgCnt","isMaxFirst","calcField","aggregateField","aggregatedValue","type_1","formatSetting","enginePopulating","enginePopulated","beforeExport","initSubComponent","treeViewUpdate","pivotButtonUpdate","initCalculatedField","DEVICE","ICON_DISABLE","WRAPPER_CLASS","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","COLLAPSE","TOOLTIP_HEADER","TOOLTIP_CONTENT","EDITOR_SEARCH_WRAPPER_CLASS","CALCINPUT","FORMAT","FORMULA","TREEVIEWOUTER","CALC_EDITED","colPos","engine","engineModule","gridSettings","formatList","getFormatList","injectGridModules","getRowStartPos","frameDataSource","frameStackedHeaders","calculateGridWidth","bindGrid","contextMenuClick","beforeCopy","beforePrint","setGroupWidth","resizeStop","onResizeStop","rowCellBoundEvent","borderRight","borderLeft","columnCellBoundEvent","excelColumnEvent","pdfColumnEvent","excelQueryCellInfo","excelRowEvent","pdfQueryCellInfo","pdfRowEvent","updateGridSettings","appendValueSortIcon","rCnt","cCnt","vSort","pivotView","showGroupingBar","groupingBarModule","cls.GROUPING_BAR_CLASS","localizedText","cls.COLLAPSE","cls.ICON","hdrdiv","dataContent","frameEmptyData","calculateColWidth","parWidth","colTotWidth","integrateModel","headerCnt","headerSplit","splitPos","actualCnt","colField","tmpSpan","innerModel","frameEmptyColumns","formatArray","vCnt","fCnt","exportHeaderEvent","exportContentEvent","FieldOptions","FieldListFieldOptions","CalculatedFieldSettings","FormatSettings","DrillOptions","ValueSortSettings","GridSettings","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","GroupingBarSettings","PivotView","isCommonRequire","allowCalculatedField","isAdaptive","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","isDragging","addInternalEvents","updateClass","events.initSubComponent","generateData","renderPivotGrid","onContentReady","removeInternalEvents","axisFieldModule","isRefreshGrid","events.enginePopulated","cls.ROOT","cls.DEVICE","onDrill","fieldAvail","memIndex","pivotFieldListModule","fieldListSpinnerElement","cls.TOOLTIP_HEADER","cls.TOOLTIP_CONTENT","getRowText","getColText","rowText","colText","enableValueSorting","CellClicked","timeOutObj","cellClick","events.enginePopulating","exportToExcel","dataCollections","events.beforeExport","workSheets","dataColl","colLen","actualrCnt","pivotCell","PDFExport","exportToPDF","gridResult","eventParams","applyEvent","dataCollIndex","colLength","integratedCnt","isColHeader","pdfGridRow","localCnt","isEmptyRow","isValueCell","CommonKeyboardInteraction","ctrlF","ctrlS","processSort","processDelete","cls.FILTER_COMMON_CLASS","EventBase","updateSorting","filterDialog","dialogPopUp","cls.SORT_DESCEND_CLASS","sortObj","getSortItemByName","newSortObj","updateFiltering","fieldCaption","filterItems","getFilterItemByName","getTreeData","popupTarget","createFilterDialog","sortObjects","filterObjects","searchTreeNodes","treeObj","searchList","nonSearchList","members_1","checkedStatus","NodeStateModified","onStateModified","droppedClass","nodeDropped","cls.DROPPABLE_CLASS","droppedPosition","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","createTreeView","renderMode","closeFilterDialog","cls.CANCEL_BUTTON_CLASS","removeFilterDialog","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","cls.ICON_DISABLE","eventBase","memberTreeView","disabledList","allMemberSelect","nodeChecking","validateTreeNode","visibleNodes","uncheckedNodes","getUnCheckedNodes","getCheckedNodes","cls.NODE_CHECK_CLASS","treeNodes","PivotCommon","pivotEngine","nodeStateModified","DialogRenderer","fieldListWrappper","cls.WRAPPER_CLASS","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","buttonWrapper","data-tag","data-uid","dropIndicatorElement","dropLastIndicatorElement","dragWrapper","createButtonDragIcon","data-type","createSortOption","createFilterOption","groupingBarSettings","showRemoveIcon","createDraggable","createDragClone","onDragStart","onDragging","onDragStop","pivotButton","dragElement","showSortIcon","filterCLass","cls.FILTERED_CLASS","showFilterIcon","isButtonDropped","droppableTarget","pivotGridModule","updateFilterState","removeButton","unCheckedNodeCount","filterItem","refreshPivotButtonState","removeDataSourceSettings","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","dropIndicatorUpdate","index.PivotView","index.GroupingBar","index.FieldList","index.CalculatedField","makeEle","replaceTheme","ensureTemplate","iframeMouseDown","toolbarClick","toolbarUpdated","bindOnEnd","renderColorPicker","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","focusChange","getSelectedHtml","renderInlineToolbar","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_EXPAND_OPEN","CLS_RTE_ELEMENTS","CLS_COLOR_CONTENT","ToolbarType","templateItems","tools","alignments","justifyleft","justifycenter","justifyright","justifyfull","fontname","backgroundcolor","clearformat","clearall","unorderedlist","orderedlist","outdent","createlink","openlink","editlink","removelink","openimagelink","editimagelink","removeimagelink","insertlink","alttext","dimension","fullscreen","maximize","minimize","lowercase","uppercase","sourcecode","viewside","insertcode","alignmentItems","imageAlignItems","imageDisplayItems","justifyLeft","justifyCenter","justifyRight","justifyFull","unorderedList","orderedList","createLink","openLink","editLink","removeLink","altText","lowerCase","upperCase","insertCode","linkTooltipLabel","linkWebUrl","linkurl","linkOpenInNewWindow","linkHeader","dialogInsert","dialogCancel","dialogUpdate","imageHeader","imageLinkHeader","mdimageLink","imageUploadMessage","imageDeviceUploadMessage","imageAlternateText","alternateHeader","imageCaption","imageSizeHeader","textPlaceholder","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","renderColorPickerDropDown","currentDropdown","colorpickerValue","events.colorPickerChanged","onmousedown","beforeTileRender","colorPickerArgs","iosDevices","isIDevice","beforeModeSwitch","toolbarPanel","BaseToolbar","renderFactory","getTemplateObject","getID","tbItems_1","getToolbarOptions","toolbarRenderer","DropDownButtons","initializeInstance","dropdownContent","renderDropDowns","containerType","tbElement","model.templateItems","classes.CLS_DROPDOWN_BTN","formatItem","classes.CLS_DROPDOWN_POPUP","classes.CLS_DROPDOWN_ITEMS","fontItem","imageAlignDropDown","classes.CLS_DROPDOWN_ICONS","model.imageAlignItems","displayDropDown","model.imageDisplayItems","removeDropDownClasses","destroyDropDowns","events.iframeMouseDown","onIframeMouseDown","ToolbarAction","renderSelection","events.htmlToolbarClick","events.markdownToolbarClick","isToolbar","editableElement","getEditPanel","editPanel","toolbarBindEvent","keyBoardModule","getToolbarElement","toolBarKeyDown","keyConfig","createToolbarElement","enableFloating","tbWrapper","getToolbarMode","tbMode","checkToolbarResponsive","addFixedTBarClass","events.renderColorPicker","toggleFloatTBarOffset","floatingToolbarOffset","toggleFloatClass","scrollParent","floatOffset","isBody","scrollParentRelativeTop","trgHeight","tbHeight","getToolbarHeight","getExpandTBarPopHeight","bodyStyle","targetTop","scrollParentYOffset","scrollParentRect","scrollParentTop","events.renderInlineToolbar","refreshToolbarOverflow","removeFixedTBarClass","showFixedTBar","hideFixedTBar","model.tools","targetItem","addTBarItem","updateToolbarStatus","fullScreenModule","showFullScreen","hideScreen","hideFullScreen","getBaseToolbar","enableTBarItems","editorManager","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.enableFullScreen","events.disableFullScreen","events.updateToolbarItem","events.expandPopupClick","events.focusChange","events.mouseDown","events.sourceCodeMouseDown","wireScrollElementsEvents","]","[","BaseQuickToolbar","isDOMElement","popupRenderer","dropDownButtons","appendPopupContent","toolbarElement","popupType","classes.CLS_INLINE_POP","popupId","stringItems","classes.CLS_RTE_ELEMENTS","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","removeEleFromDOM","addQTBarItem","removeQTBarItem","getBaseToolbarObject","PopupRenderer","popupPanel","QuickToolbar","formatItems","formattedItems","getQTBarOptions","popType","createQTBar","qTBar","initializeQuickToolbars","quickToolbarModule","onMouseDown","isRTE","renderQuickToolbars","linkQTBar","imageQTBar","textQTBar","quickToolbarSettings","LinkToolbar","TextToolbar","ImageToolbar","renderInlineQuickToolbar","inlineQTBar","InlineToolbar","showInlineQTBar","hideInlineQTBar","hideQuickToolbars","deBounce","deBouncer","getRange","isIFrame","onSelection","inlineQTBarMouseDownHandler","getInlineBaseToolbar","wireInlineQTBarEvents","events.keyDown","unWireInlineQTBarEvents","renderCount","appendCount","charCountBackground","htmlLength","restrict","showCharCount","arrayKey","events.sourceCode","events.updateSource","ColorPickerInput","renderColorPickerInput","suffixID","fontNode","fontColorPicker","fontColorDropDown","backgroundColorPicker","backgroundColorDropDown","events.toolbarRenderComplete","MarkdownSelection","getLineNumber","getAllParents","getSelectedLine","getLine","getSelectedParentPoints","selectedPoints","selectedLine","startLength","textArea","isStartWith","replaceSpecialChar","getRegex","syntax","getSelectedInlinePoints","MarkdownToolbarStatus","toolbarStatus","inlinecode","onRefreshHandler","parentsLines","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","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","formatObj","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","ALIGNMENT_TYPE","BLOCK_TAGS","SELECTION_TYPE","INSERTHTML_TYPE","NodeSelection","startNodeName","endNodeName","saveInstance","cloneRange","documentFromRange","startContainer","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","nodeSelection","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","blockNodes","collectionNodes","listNodes","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","sibNode","lasNode","LinkCommand","selectParent","Alignments","JustifyLeft","JustifyCenter","JustifyRight","JustifyFull","CONSTANT.ALIGNMENT_TYPE","alignmentNodes","text-align","Indents","indentValue","applyIndents","indentsNodes","parentNodes","indentsValue","ImageCommand","CONSTANT.IMAGE","createImage","imgEle","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","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","linkDialog","imageDialog","onCopy","onCut","events.insertCompleted","showLinkQuickToolbar","onToolbarAction","events.editAreaClick","editAreaClickHandler","quickToolObj","linkTop","linkPos","hideLinkQuickToolbar","inputDetails","selectText","linkWebAddress","linkDisplayText","linkTooltip","urlPlace","textPlace","linkDialogEle","linkContent","contentElem","linkTarget","linkUrl","linkTitle","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","openImgLink","editImgLink","removeImgLink","justifyImageLeft","justifyImageCenter","justifyImageRight","imageWithLinkQTBarItemUpdate","newItems","hideImageQuickToolbar","imagDialog","linkWrap","inputLink","linkargs_1","selfImage","altWrap","altHeader","inputAlt","altArgs_1","insertAlt","classes.CLS_CAPTION","captionEle","imgWrap","imgInner","imgCaption","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","insertImageSettings","imgSizeWrap","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","executeGroup","strikeThrough","formatBlock","heading","insertHTML","insertHorizontalRule","insertBrOnReturn","insertOrderedList","insertUnorderedList","ToolbarSettings","ImageSettings","QuickToolbarSettings","FontFamily","FontSize","FontColor","BackgroundColor","Resources","IFrameSettings","InlineMode","FullScreen","scrollableParent","classes.CLS_FULL_SCREEN","toggleParentOverflow","RichTextEditor","isFocusOut","updateEnable","setContainer","originalElement","rteOutterWrapper","executeCommand","commandName","decode","sourceCodeModule","RTERender","allowedKeys","getAsFile","placeHolderWrapper","updatePanelValue","frameSetting","scripts","classes.CLS_SCRIPT_SHEET","removeSheets","classes.CLS_STYLE_SHEET","setIframeSettings","countModule","enableHtmlEncode","srcList","updateReadOnly","printArgs","removeToolbarItem","styleSrc","scriptSrc","InjectSheet","scriptSheet","scriptEle","createScriptElement","styleEle","createStyleElement","rel","compiledTemplate","heightValue","rteHeight","expandPopHeight","getHtml","showSourceCode","preventDefaultResize","preventImgResize","defaultResize","resizeHandler","cloneValue","scrollParentElements","index.RichTextEditor","index.Link","index.Image","index.Count","index.QuickToolbar","index.HtmlEditor","index.MarkdownEditor","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","CURRENTDATE_CLASS","CURRENT_PANEL_CLASS","PREVIOUS_PANEL_CLASS","TRANSLATE_CLASS","PREVIOUS_TIMELINE_CLASS","HIDE_CHILDS_CLASS","APPOINTMENT_WRAPPER_CLASS","RESOURCE_TOOLBAR_CONTAINER","RESOURCE_HEADER_TOOLBAR","SELECTED_CELL_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","APPOINTMENT_INDICATOR_CLASS","EVENT_INDICATOR_CLASS","EVENT_RECURRENCE_ICON_CLASS","EVENT_RECURRENCE_EDIT_ICON_CLASS","ALLDAY_APPOINTMENT_WRAPPER_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","setRtl","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","cls.APPOINTMENT_WRAP_CLASS","timeStampStart","cls.TRANSLATE_CLASS","cls.CONTENT_WRAP_CLASS","isScrollTriggered","nextPanel","getTranslateX","previousPanel","cls.PREVIOUS_PANEL_CLASS","offsetDist","swapPanels","confirmSwipe","cancelSwipe","cls.APPOINTMENT_CLASS","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","onMouseSelection","onMoveup","allDayRow","getAllDayRow","onAppointmentSelection","getSelectedEventElements","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","getCells","isInverseTable","tableEle","maxRow","maxColumn","inverseCells","focusCell","cls.AGENDA_CELLS_CLASS","removeSelectedAppointmentClass","getWorkCellElements","isInverseTableSelect","isMultiple","removeSelectedClass","initialId","resourceSelectedCells","allDayCells","getAllDayCells","resourceAllDayCells","addSelectedClass","selectAppointment","isReverse","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","curRowIndex","sectionRowIndex","processLeftRight","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","Value","TIMES","ON","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","startTimezone","endTimezone","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","event.eventClick","quickPopupHide","openRecurrenceAlert","getEventMaxId","occurrenceCollection","currentViewDate","eventRule","recurrenceException","generatedDates","getRecurrenceEvent","getOccurrencesByID","getOccurrencesByRange","event_3","applyResourceColor","getResourceColor","alphaColor","Crud","refreshData","actionArgs","addEvent","editParms","processCrudTimezone","crudArgs","parentEvent","occurrence","exDate","excludeDateCheck","delApp","delApp_1","deleteEvent","normalEvent","recEvent","dataObj_1","normalEvent_1","event_4","recEvent_1","delApp_2","event_5","exceptionDateList","FieldValidator","renderFormValidator","errorPlacement","dlgContent","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","dialogElement","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","getFormattedString","quickCellPopup","cls.POPUP_HEADER_ICON_WRAPPER","cls.DATE_TIME_DETAILS_CLASS","details","getResourceText","moreButton","detailsClick","saveButton","saveClick","isSameTarget","eventTooltip","updateTapHoldEventPopup","quickEventPopup","eventSubject","getRecurrenceSummary","cls.TIME_ZONE_CLASS","getTimezone","cls.DESCRIPTION_CLASS","editButton","deleteButton","applyEventColor","resourceValue","resourceCollection_1","resourceIndex_1","idField","resourceData_1","resourceCollection_2","byGroupID","resourceData_2","resourceDetails","startDateDetails","endDateDetails","startTimeDetail","getTimeString","endTimeDetail","allDayLength","moreEventClick","dateElement","moreEventElements","cls.CURRENTDATE_CLASS","saveObj","setResourceValues","updateMoreEventContent","getDateFromElement","filteredEvents","moreElement","eventSave","eventObj","titleContent","zoneDetails","ruleSummary","getRecurrenceEditorInstance","getRuleSummary","getDataFromTarget","isEventPopup","destroyButtons","colorEle","subjectElement","moreWrapper","event.tapHoldReady","removeEventListner","EventTooltip","cls.EVENT_TOOLTIP_ROOT_CLASS","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","repeatEvery","onDay","weeks","years","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","setRecurrenceRule","repeatType","getRecurrenceRule","resetDayButton","daySelection","rotateArray","rtlClass","untilDateObj","monthDate","monthWeekDays","monthValue","monthWeekPos","getDayPosition","endType","renderDropdowns","getRepeatData","selectedType","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","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","dialogObject","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","resourceDiv","renderMultiSelect","submit","recurrenceEditor","renderRecurrenceEditor","dateTimeDiv","getFieldName","dateTimeInput","getFieldLabel","resourceInput","resourceTemplate","colorField","onMultiselectResourceChange","onDropdownResourceChange","timezoneInput","onTimezoneChange","filtering","resObject","datasource","groupIDField","filterRes","filterDatasource","resObj","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","startTz","endTz","refreshResourceDataSource","resetFormFields","tz","alertType","formelement_2","getValueFromElement","Repeat","recurrenceValidation","eventId","getEventIdFromForm","resourceSaveEvent","editOccurrenceValidation","alertMessage","recEditor","tempDiff","getRecurrenceIndex","recColl","recIndex","recurColl","lastResouceData","lastlevel","eventList","addValues","eventList_1","formelement_3","isDataRefresh","initializeLayout","dayModule","weekModule","workWeekModule","monthModule","agendaModule","monthAgendaModule","firstView","updateLabelText","uiStateValues","isGroupAdaptive","enableCompactView","WorkHours","TimeScale","Field","EventSettings","ResourceBase","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","generateTreeData","resourceHeaderTemplate","resourceClick","treePopup","treeCollection","resourceTreeLevel","resTree","treeHandler","treeLevel","levelId","treeArgs","resourceId","resourceName","resourceChild","headerCollection","resourceLevel","resData","levelIcon","headerWrapper","bindResourcesData","isSetModel","promises","setResourceCollection","requiredResources","colorIndex","util.findIndexInData","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","addResource","removeResource","length_4","resToolBarEle","Schedule","eventTooltipTemplateFn","templateParser","editorTemplateFn","initializeResources","isLayoutOnly","initializeView","showHeaderBar","scheduleTouchModule","initializePopups","getViewIndex","setViewOptions","isModuleLoad","viewOptions","selectedView","isOptions","fieldViewName","getActiveViewOptions","majorSlotTemplate","minorSlotTemplate","allowVirtualScrolling","cellTemplate","dateHeaderTemplate","crudModule","initializeTemplates","cellTemplateFn","dateHeaderTemplateFn","majorSlotTemplateFn","minorSlotTemplateFn","appointmentTemplateFn","resourceHeaderTemplateFn","getDayNames","setCldrTimeFormat","previousView","animateLayout","workWeek","agenda","weekAgenda","workWeekAgenda","monthAgenda","noEvents","emptyContainer","allDay","noTitle","deleteMultipleEvent","deleteSeries","editSeries","editEvent","addTitle","moreDetails","editContent","deleteRecurrenceContent","deleteMultipleContent","recurrence","wrongPattern","seriesChangeAlert","createError","recurrenceDateValidation","sameDayAlert","editRecurrence","repeats","startEndError","invalidDateError","onScheduleResize","allowKeyboardInteraction","selectedCells_1","cls.SELECTED_CELL_CLASS","cls.ALLDAY_ROW_CLASS","cls.CONTENT_TABLE_CLASS","getIndexOfDate","isAllDayCell","dateInMS","getCellTemplate","getDateHeaderTemplate","getMajorSlotTemplate","getMinorSlotTemplate","getAppointmentTemplate","getResourceHeaderTemplate","events.scrollUiUpdate","highlightCurrentTime","onEventSettingsPropertyChanged","setWorkHours","viewStartHour","getStartHour","getEndHour","dates_1","tds","cls.WORK_HOURS_CLASS","getEndDateFromStartDate","getResourcesByIndex","scrollToHour","getEvents","eventID","getCurrentViewDates","getCurrentViewEvents","refreshEvents","getEventDetails","isSlotAvailable","adjustEventWrapper","ViewBase","customHelper","getDayName","createTableLayout","cls.SCHEDULE_TABLE_CLASS","isCurrentDate","isCurrentMonth","isWorkDay","isWorkHour","formatDateRange","longDateFormat","getMobileDateElement","setResourceHeaderContent","tdData","renderResourceMobileLayout","WorkCellInteraction","isWorkCell","cellDblClick","VerticalEvent","renderedEvents","renderedAllDayEvents","overlapEvents","moreEvents","overlapList","allDayEvents","allDayLevel","animationUiUpdate","renderAppointments","cls.ROW_COUNT_WRAPPER_CLASS","allDayElement","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","spanEvent","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","cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS","appointmentElement","events.eventRendered","appHeight","allDayRowHeight","addOrRemoveClass","schedule","getAppointmentHeight","getTopValue","appIndex","adjustOverlapElements","appointmentWrap","cls.APPOINTMENT_WRAPPER_CLASS","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","appointmentWrapper_1","eventHeight","getElementHeightFromClass","monthHeaderHeight","getOuterHeight","renderEventsHandler","workCells","noOfDays","splittedEvents_1","renderAppointmentMonth","eventLocation","innerElement","timeString","appendEventIcons","overlapCount","diffInDays","cellTd","appTop","cellTd_1","getFilteredEvents","appArea","renderedAppCount","data-start-date","data-end-date","moreIndicatorClick","appointmentsList","appointments_1","moreEventArgs","VerticalView","viewClass","workCellAction","event.scrollUiUpdate","getTimeCellsElement","getDatesHeaderElement","headerBarHeight","timecells","getScrollableElement","scrollerHeight","util.getScrollBarWidth","scrollToWorkHour","firstWorkHourCell","getTopFromDateTime","columnLevels","colLevels","workStartHour","workEndHour","renderDates_1","isWorkHourRange","showTimeIndicator","getCurrentTimeIndicatorIndex","changeCurrentTimePosition","currentTimeIndicatorTimer","clearCurrentTimeIndicatorTimer","currentDateIndex","removeCurrentTimeIndicatorElements","firstRow","topInPx","curTimeWrap","cls.PREVIOUS_TIMELINE_CLASS","currentDateIndex_1","currentTimeEle","timeCellsWrap","cls.HIDE_CHILDS_CLASS","getWorkCellHeight","getTdContent","cls.TABLE_WRAP_CLASS","cls.OUTER_TABLE_CLASS","dateTd","renderDatesHeader","indentTd","renderLeftIndent","workTd","scrollContainer","renderTimeCells","renderContentArea","timesTd","tbl","ntr_1","createTd","ntr","appointmentExpandCollapse","nth","cls.DATE_HEADER_CONTAINER_CLASS","cls.DATE_HEADER_WRAP_CLASS","colGroupEle","ntr_2","ntd","wireCellEvents","createEventWrapper","event.renderCell","getTimeSlotRows","cellDate","util.setTime","innerWrapper","getContentAreaElement","msMajorInterval","msStartHour","msEndHour","majorTickDivider","Day","daysCount","Week","util.getWeekFirstDate","WorkWeek","par","Month","dayNameFormat","monthDates","onScrollUiUpdate","onCellClick","getDayNameFormat","renderAppointmentContainer","createHeaderCell","isOtherMonth","util.firstDateOfMonth","util.lastDateOfMonth","util.addMonths","slotDatas","prepareSlots","includeResource","colDates_2","colDate","lastRow","resourcesTd","colDates_1","renderDateHeaderElement","dateHeader","monthStart","monthEnd","util.WEEK_LENGTH","AgendaBase","viewBase","createAgendaContentElement","aTd","appWrapper","createAppointment","appSubjectWrap","strDate","allDayStr","processAgendaEvents","splited","wireEventActions","eventElement_1","dateHeaderElement_1","dayNavigationClick","calculateResourceTableElement","agendaDate","agendaLastDate","resColl","initialDate","lastLevelInfo","tempLastLevelInfo","firstDate","finalDate","agendaCollection","hideEmptyAgendaDays","resDataCollection","resDayCollection","topResources","tempGroupedData","totalRowSpan","createResourceTableRow","renderEmptyContent","tContent","tContentCollection","parentCollection","rowSpanCollection","createDateHeaderElement","templateArgs","eTr","createTableRowElement","eTd","aria-rowindex","aria-colindex","data-date","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","contentArea","wrapperContainer","appWrap","appendAppContainer","setEventWrapperHeight","availableHeight","clearElements","workCell","cls.APPOINTMENT_INDICATOR_CLASS","onEventRender","appContainer","cls.APPOINTMENT_CONTAINER_CLASS","appointmentIndicators_1","index.Schedule","index.Day","index.Week","index.WorkWeek","index.Month","index.Agenda","index.MonthAgenda","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","tooltipId","tootipArgs","markerFill","toolTipData","index.TreeMap","index.TreeMapTooltip","index.TreeMapLegend","index.TreeMapHighlight","index.TreeMapSelection"],"mappings":"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IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,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,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IA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gBAAY,GAC/B+wF,IACIllF,EAAS,aACVizN,EAAK9+N,UAAW,oBAAgB,GACnC+wF,IACIllF,EAAS,IACVizN,EAAK9+N,UAAW,kBAAc,GACjC+wF,IACIllF,GAAS,IACVizN,EAAK9+N,UAAW,iBAAa,GAChC+wF,IACIllF,EAAS,KACVizN,EAAK9+N,UAAW,eAAW,GAC9B+wF,IACIllF,EAAS,IACVizN,EAAK9+N,UAAW,mBAAe,GAClC+wF,IACIllF,EAAS,IACVizN,EAAK9+N,UAAW,gBAAY,GAC/B+wF,IACIllF,EAAS,IACVizN,EAAK9+N,UAAW,YAAQ,GAC3B+wF,IACIllF,EAAS,OACVizN,EAAK9+N,UAAW,wBAAoB,GACvC+wF,IACIllF,EAAS,IACVizN,EAAK9+N,UAAW,qBAAiB,GACpC+wF,IACIllF,EAAS,IACVizN,EAAK9+N,UAAW,kBAAc,GACjC+wF,IACIllF,EAAS,IACVizN,EAAK9+N,UAAW,oBAAgB,GACnC+wF,IACIllF,GAAS,IACVizN,EAAK9+N,UAAW,uBAAmB,GACtC+wF,IACIllF,GAAS,IACVizN,EAAK9+N,UAAW,mCAA+B,GAClD+wF,IACIllF,EAAS,SACVizN,EAAK9+N,UAAW,oBAAgB,GACnC+wF,IACIllF,EAAS,WACVizN,EAAK9+N,UAAW,iBAAa,GAChC+wF,IACIllF,EAAS,SACVizN,EAAK9+N,UAAW,0BAAsB,GACzC+wF,IACIllF,EAAS,SACVizN,EAAK9+N,UAAW,oBAAgB,GACnC+wF,IACIllF,EAAS,iBACVizN,EAAK9+N,UAAW,sBAAkB,GACrC+wF,IACIllF,EAAS,YACVizN,EAAK9+N,UAAW,oBAAgB,GACnC+wF,IACIllF,EAAS,YACVizN,EAAK9+N,UAAW,qBAAiB,GACpC+wF,IACIllF,EAAS,KACVizN,EAAK9+N,UAAW,YAAQ,GAC3B+wF,IACIllF,GAAS,IACVizN,EAAK9+N,UAAW,eAAW,GAC9B+wF,IACIllF,EAAS,IACVizN,EAAK9+N,UAAW,6BAAyB,GAC5C+wF,IACIllF,EAAS,IACVizN,EAAK9+N,UAAW,qBAAiB,GACpC+w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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,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAM/E5B,EAA8BqD,iBAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,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,IAAK,IAAK,IAAK,IAAK,EACxE,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,KAMTrD,EAA8B6C,qBAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAClE,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,IAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAC5E,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,IAAM,EAC1E,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,IAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC5E,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,KAMT7C,EAA8BiD,uBAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,EACxE,IAAK,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EACvE,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,KAMTjD,EAA8ByC,4BAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,EACzE,IAAK,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAAM,IAAK,IAAK,IAAK,EACzE,IAAK,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EACzE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,KAMTzC,EAA8ByD,aAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,GAMxCzD,EAA8B6D,mBAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,KAEtB7D,KCllBPj7M,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAuCxCs6M,GAAiC,SAAU95M,GAE3C,SAAS85M,EAAgBoE,EAAqBz7Q,EAAMzqB,GAChD,IAAI3E,EAAQ2sF,EAAOprF,KAAKtB,KAAMmvB,EAAMzqB,IAAU1E,KA4B9C,OAvBAD,EAAMs9O,qBAAuB,IAAIlE,GAMjCp5O,EAAM8qS,WAAa,UAAW,mBAAoB,mBAAoB,oBAClE,kBAAmB,iBAAkB,aACL,iBAAxBD,QAAuD,IAAVlmS,EACrD3E,EAAMnC,YAAYgtS,EAAqBz7Q,EAAMssO,GAAaqJ,SAErB,iBAAxB8lC,QAAuD,IAAVlmS,IAC1D3E,EAAQ2sF,EAAOprF,KAAKtB,KAAMmvB,EAAMzqB,IAAU1E,MACpC8qS,cAAgBF,EACtB7qS,EAAMgrS,aACNhrS,EAAMirS,uBAEAJ,aAA+BpE,QAAsC,IAAV9hS,EACjE3E,EAAMnC,YAAYgtS,EAAoBt7Q,WAAYH,EAAMy7Q,EAAoBlmS,OAEtEkmS,aAA+BpE,QAAsC,IAAV9hS,GACjE3E,EAAMnC,YAAYgtS,EAAoBt7Q,WAAYH,EAAMzqB,GAErD3E,EA6HX,OA3JA8rF,GAAU26M,EAAiB95M,GAgC3BpuF,OAAOuJ,eAAe2+R,EAAgBnrS,UAAW,cAM7CqM,IAAK,WACD,OAAO1H,KAAK8qS,eAEhBnjS,YAAY,EACZC,cAAc,IAOlB4+R,EAAgBnrS,UAAU0vS,WAAa,WACnC,GAAI/qS,KAAKsvB,aAAeyvO,GAAcinB,QAAUhmR,KAAKsvB,aAAeyvO,GAAcuoC,aAAc,CAC5F,IAAI5iS,EAAQ1E,KAAK0E,MACjBA,KAAW+2P,GAAayJ,KAAOzJ,GAAa0J,QAC5CnlQ,KAAK+kQ,SAASrgQ,KAOtB8hS,EAAgBnrS,UAAU8nQ,aAAe,SAAU98M,EAAM7pB,GACrD,GAAY,MAAR6pB,EACA,MAAM,IAAIzlD,MAAM,8BAKpB,IAAK,IAHDoV,EAAQ,EAGH7Z,GAFE6D,KAAK+2B,KAEH,GAAGl1B,GADhBwkD,EAAOmgP,EAAgByE,QAAQ5kP,IACJ5pD,OAAQN,EAAI0F,EAAK1F,IAAK,CAC7C,IAAIo5O,EAAKlvL,EAAKlqD,GAEd6Z,GADgBhW,KAAKkrS,qBAAqB31D,EAAI/4M,GAGlD,IAAIrN,EAAOnvB,KAAKglQ,QAAQrkP,QAAQ6b,GAGhC,OAFAxmB,GAAU6uP,GAAQwB,mBAAqBl3O,EACvCnZ,EAAQhW,KAAKimQ,oBAAoB5/M,EAAM7pB,EAAQxmB,IAOnDwwR,EAAgBnrS,UAAUwqQ,aAAe,SAAU92O,GAC/C,IAAI22I,GAAQ,EACRylI,EAASp8Q,EACb,GAAc,MAAVo8Q,EAAgB,CAChB,IAAIC,EAAmBprS,KAAKsvB,aAAe67Q,EAAO77Q,WAC9C+7Q,IAAiB5vC,GAAa4J,UAAY5J,GAAa2J,WACvDkmC,GAActrS,KAAK0E,MAAQ2mS,KAAkBF,EAAOzmS,MAAQ2mS,GAChE3lI,EAAS0lI,GAAmBE,EAEhC,OAAO5lI,GAMX8gI,EAAgBnrS,UAAU2vS,oBAAsB,WAGhCnjC,GAAY5iE,MAAMjmC,OAAOh/J,MAErC,IAAIgmQ,EAAY,KAGZhB,EAAU8hC,GAA8BC,WAAW/mS,KAAK8qS,cAAe9qS,KAAK0E,MAAO1E,KAAKmvB,MAC5FnvB,KAAKglQ,QAAUA,EACfgB,EAAYhmQ,KAAK6qR,kBACjB7qR,KAAK+lQ,aAAaC,IAMtBwgC,EAAgBnrS,UAAUwvR,gBAAkB,WACxC,IAAIhuC,EAAa,IAAID,GAIrB,GAHAC,EAAWhhL,MAAMz+D,SAAS4C,KAAKq9O,qBAAqB32O,KAAM,IAAIguO,GAAQ10O,KAAKq9O,qBAAqBtuN,OAChG8tN,EAAWhhL,MAAMz+D,SAAS4C,KAAKq9O,qBAAqBzD,QAAS,IAAIlF,GAAQ10O,KAAKq9O,qBAAqB5D,QACnGoD,EAAWhhL,MAAMz+D,SAAS4C,KAAKq9O,qBAAqB3D,SAAU,IAAIhF,GAAQ10O,KAAKglQ,QAAQmhB,iBACnFnmR,KAAKsvB,aAAeyvO,GAAcinB,QAAUhmR,KAAKsvB,aAAeyvO,GAAcuoC,aAAc,CAC5F,IAAI3tD,EAAW35O,KAAK6qS,UAAU1rC,GAAaosC,iBAC3C1uD,EAAWhhL,MAAMz+D,SAAS4C,KAAKq9O,qBAAqB1D,SAAU,IAAIjF,GAAQiF,IAE9E,OAAOkD,GAMX2pD,EAAgBnrS,UAAU6vS,qBAAuB,SAAUhkD,EAAU1qN,GACjE,IACIjT,EAAO,EACXA,EAAO29N,EAASv4I,WAAW,GACT,MAAd3uG,KAAK+2B,MAA8B,MAAd/2B,KAAK+2B,MAA8B,MAAd/2B,KAAK+2B,MACjC,MAAd/2B,KAAK+2B,MAA8B,MAAd/2B,KAAK+2B,OAC1BxN,GAAci9Q,EAAgBgF,YAElCjiR,EAAQA,GAAQ,GAAc,MAATA,EAAgBA,EAAO,EAI5C,OAHcvpB,KAAKglQ,QACMqiB,WACNxrN,MAAMtyC,IAO7Bi9Q,EAAgByE,QAAU,SAAUn8Q,GAChC,OAAOA,GAOX03Q,EAAgBgF,WAAa,GACtBhF,GACT3hC,IClLE4mC,GAA+B,WAC/B,SAASA,EAAc3tC,GAMnB99P,KAAKq9O,qBAAuB,IAAIlE,GAKhCn5O,KAAKu+P,SAAW,IAAI7C,GAAS,IAAK,IAAK,KAKvC17P,KAAKg6G,UAAY,IAAI6jJ,GAAW,EAAG,EAAG,EAAG,GAKzC79P,KAAK66R,QAAU,KAMf76R,KAAK0rS,UAAY,IAAIptC,GAAc,IAAI5C,GAAS,EAAG,EAAG,IAMtD17P,KAAK2rS,SAAW,IAAInF,GAAgBznC,GAAcooC,WAAY,IAM9DnnS,KAAKw8B,OAAS,IAAIojO,GAAgB7E,GAAiBs9B,MAKnDr4R,KAAK46B,QAAU,GAKf56B,KAAK26P,cAAgB,IAAI/d,GAKzB58O,KAAK4rS,cAAgB,IAAIlwC,GAMzB17P,KAAK6rS,SAAW,OACI,IAAT/tC,EACP99P,KAAK+vG,cAGL/vG,KAAK+vG,aACL/vG,KAAK+1B,OAAS+nO,GAsLtB,OAnLAx/P,OAAOuJ,eAAe4jS,EAAcpwS,UAAW,SAM3CqM,IAAK,WACD,OAAO1H,KAAKu+P,UAEhBl3P,IAAK,SAAUrK,GACXgD,KAAKu+P,SAAWvhQ,GAEpB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4jS,EAAcpwS,UAAW,cAK3CqM,IAAK,WACD,OAAO1H,KAAK4rS,eAEhBvkS,IAAK,SAAUrK,GACXgD,KAAK4rS,cAAgB5uS,GAEzB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4jS,EAAcpwS,UAAW,UAK3CqM,IAAK,WACD,OAAO1H,KAAKg6G,WAEhB3yG,IAAK,SAAUrK,GACXgD,KAAKg6G,UAAYh9G,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4jS,EAAcpwS,UAAW,QAK3CqM,IAAK,WACD,OAAO1H,KAAK66R,SAEhBlzR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4jS,EAAcpwS,UAAW,QAK3CqM,IAAK,WACD,OAAO1H,KAAK2rS,UAEhBtkS,IAAK,SAAUrK,GACXgD,KAAK2rS,SAAW3uS,GAEpB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4jS,EAAcpwS,UAAW,gBAK3CqM,IAAK,WACD,OAAO1H,KAAKw8B,QAEhBn1B,IAAK,SAAUrK,GACXgD,KAAKw8B,OAASx/B,GAElB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4jS,EAAcpwS,UAAW,SAK3CqM,IAAK,WACD,OAAO1H,KAAK0rS,WAEhBrkS,IAAK,SAAUrK,GACXgD,KAAK0rS,UAAY1uS,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4jS,EAAcpwS,UAAW,QAK3CqM,IAAK,WACD,OAAO1H,KAAK46B,SAEhBvzB,IAAK,SAAUrK,GACXgD,KAAK46B,QAAU59B,EACfgD,KAAK68O,WAAWhhL,MAAMz+D,SAAS4C,KAAKq9O,qBAAqBxD,SAAU,IAAIge,GAAU73P,KAAK46B,WAE1FjzB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4jS,EAAcpwS,UAAW,cAK3CqM,IAAK,WACD,OAAO1H,KAAK26P,eAEhBtzP,IAAK,SAAUrK,GACXgD,KAAK26P,cAAgB39P,GAEzB2K,YAAY,EACZC,cAAc,IAOlB6jS,EAAcpwS,UAAU00G,WAAa,WACjC/vG,KAAK26P,cAAchc,oBAAsB,IAAIS,GAA2Bp/O,MACxEA,KAAK26P,cAAc9+L,MAAMz+D,SAAS4C,KAAKq9O,qBAAqB32O,KAAM,IAAIguO,GAAQ10O,KAAKq9O,qBAAqB9C,SAM5GkxD,EAAcpwS,UAAU0jS,QAAU,SAAUl/H,GACxC7/J,KAAK66R,QAAUh7H,EACf7/J,KAAK26P,cAAc9+L,MAAMz+D,SAAS4C,KAAKq9O,qBAAqBpxJ,EAAG,IAAImrK,GAAmBp3P,KAAK66R,WAM/F4Q,EAAcpwS,UAAU6iP,UAAY,WAChCl+O,KAAKgvF,QAOTy8M,EAAcpwS,UAAU2zF,KAAO,WAC3B,IAAI88M,EAAkB,IAAIjuC,GAAW79P,KAAKg6G,UAAUjtG,EAAG/M,KAAKg6G,UAAUhtG,EAAGhN,KAAKg6G,UAAUhkG,MAAOhW,KAAKg6G,UAAUjkG,QAC1Gk/Q,EAAUj1R,KAAK66R,QAAQ5F,QACvB8W,EAAgBD,EAAgB/1R,OAChCi2R,EAAgB/W,EAAQ0N,iBAAiB3iS,KAAK6/J,KAAM,IAAI89F,GAAOmuC,EAAgB/+R,EAAG++R,EAAgB9+R,IACtG8+R,EAAgB/+R,EAAIi/R,EAAcj/R,EAClC++R,EAAgB91R,MAAQg2R,EAAcj/R,EAAI++R,EAAgB91R,MAC1D81R,EAAgB9+R,EAAKg/R,EAAch/R,EAAIhN,KAAK6/J,KAAKr/J,SAAS2pD,aAAaokN,QAAQ7hQ,IAC/Eo/R,EAAgB/1R,OAAS+1R,EAAgB9+R,EAAI++R,EAC7C/rS,KAAK26P,cAAc9+L,MAAMz+D,SAAS4C,KAAKq9O,qBAAqB3qN,KAAMqtN,GAASiB,cAAc8qD,IACzF9rS,KAAK68O,WAAWhhL,MAAMz+D,SAAS4C,KAAKq9O,qBAAqB3C,GAAI,IAAI6E,GAAUv/O,KAAK6rS,YAEpFvtS,OAAOuJ,eAAe4jS,EAAcpwS,UAAW,WAO3CqM,IAAK,WACD,OAAO1H,KAAK26P,eAEhBhzP,YAAY,EACZC,cAAc,IAEX6jS,KC3QP5/M,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAgBxC+/M,GAAmC,SAAUv/M,GAE7C,SAASu/M,EAAkBjyL,GAQvB,YANyB,IAAdA,EACCttB,EAAOprF,KAAKtB,OAASA,KAGrB0sF,EAAOprF,KAAKtB,KAAMg6G,IAAch6G,KAahD,OApBA6rF,GAAUogN,EAAmBv/M,GAgB7Bu/M,EAAkB5wS,UAAU00G,WAAa,WACrCrjB,EAAOrxF,UAAU00G,WAAWzuG,KAAKtB,MACjCA,KAAK68O,WAAWhhL,MAAMz+D,SAAS4C,KAAKq9O,qBAAqBzD,QAAS,IAAIlF,GAAQ10O,KAAKq9O,qBAAqB7wL,QAErGy/O,GACTR,ICtCE5/M,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCggN,GAAyC,SAAUx/M,GAOnD,SAASw/M,EAAwBlyL,GAC7B,IAAIj6G,EAAQ2sF,EAAOprF,KAAKtB,KAAMg6G,IAAch6G,KAQ5C,OADAD,EAAMosS,UAAY,KACXpsS,EAeX,OA9BA8rF,GAAUqgN,EAAyBx/M,GAsBnCw/M,EAAwB7wS,UAAU+wS,aAAe,SAAUpvS,GACvD,QAAqB,IAAVA,EACP,OAAOgD,KAAKmsS,UAGZnsS,KAAKmsS,UAAYnvS,GAGlBkvS,GACTD,IC/CEpgN,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAuCxCmgN,GAA2C,SAAU3/M,GAErD,SAAS2/M,EAA0BryL,EAAW/7G,GAC1C,IAAI8B,EAAQ2sF,EAAOprF,KAAKtB,KAAMg6G,IAAch6G,KAW5C,OAJAD,EAAMusS,eAAiB,UACI,IAAhBruS,IACP8B,EAAM9B,YAAcA,GAEjB8B,EAmEX,OAhFA8rF,GAAUwgN,EAA2B3/M,GAerCpuF,OAAOuJ,eAAewkS,EAA0BhxS,UAAW,eA+BvDqM,IAAK,WACD,OAAO1H,KAAKssS,gBAEhBjlS,IAAK,SAAUrK,GAEXgD,KAAKssS,eAAiBtvS,GAG1B2K,YAAY,EACZC,cAAc,IAOlBykS,EAA0BhxS,UAAU2zF,KAAO,WACvCtC,EAAOrxF,UAAU2zF,KAAK1tF,KAAKtB,MACA,MAAvBA,KAAKssS,gBACLtsS,KAAK68O,WAAWhhL,MAAMz+D,SAAS4C,KAAKq9O,qBAAqBxC,KAAM76O,KAAKssS,eAAetrS,UAO3FqrS,EAA0BhxS,UAAUgE,MAAQ,WACxC,IAAIk7O,EAAQ,IAAI8xD,EAA0BrsS,KAAK+1B,OAAQ/1B,KAAK/B,aAK5D,OAJAs8O,EAAM1kN,MAAQ71B,KAAK61B,MACnB0kN,EAAMkkB,MAAQz+P,KAAKy+P,MACnBlkB,EAAMt8O,YAAc+B,KAAK/B,YACzBs8O,EAAMxrN,KAAO/uB,KAAK+uB,KACXwrN,GAEJ8xD,GACTJ,KhDpHF,SAAWz0B,GAKPA,EAAcA,EAAwB,SAAI,GAAK,WAK/CA,EAAcA,EAAuB,QAAI,GAAK,UAVlD,CAWGA,KAAkBA,QAKrB,IAAW+0B,IACX,SAAWA,GAKPA,EAAmBA,EAA4B,QAAI,GAAK,UAKxDA,EAAmBA,EAA+B,WAAI,GAAK,aAK3DA,EAAmBA,EAAqC,iBAAI,GAAK,mBAfrE,CAgBGA,KAAuBA,QiD7B1B,ICLWC,GDKPC,GAAiC,WAMjC,SAASA,EAAgBzrS,GACrBhB,KAAK0sS,cAAgB1rS,EAsCzB,OApCA1C,OAAOuJ,eAAe4kS,EAAgBpxS,UAAW,YAM7CqM,IAAK,WACD,OAAO1H,KAAK0sS,eAEhB/kS,YAAY,EACZC,cAAc,IAMlB6kS,EAAgBpxS,UAAUq1B,WAAa,WACnC,OAAO1wB,KAAK0sS,eAEhBD,EAAgBpxS,UAAUouD,OAAS,SAAU6mE,EAAOq8K,GAChD,MAA+B,kBAApBA,IAAqD,IAApBA,EACjC3sS,KAAK4sS,eAAet8K,GAAO,GAG3BtwH,KAAK4sS,eAAet8K,IAOnCm8K,EAAgBpxS,UAAU25R,YAAc,SAAUjlD,GAG9C,OAFcA,EAAYklD,QACH7wR,OAGpBqoS,KAGPI,GAAiC,WACjC,SAASA,EAAgBC,QACK,IAAfA,IAIP9sS,KAAK+sS,MAAQD,EAAWC,MACxB/sS,KAAKypD,OAASqjP,EAAWrjP,OACzBzpD,KAAKgtS,eAAiBF,EAAWE,eACjChtS,KAAKitS,UAAYH,EAAWI,mBAsEpC,OAnEA5uS,OAAOuJ,eAAeglS,EAAgBxxS,UAAW,UAM7CqM,IAAK,WAID,YAH+B,IAApB1H,KAAKmtS,YAAiD,MAAnBntS,KAAKmtS,aAC/CntS,KAAKmtS,WAAa31B,GAAc41B,UAE7BptS,KAAKmtS,YAEhB9lS,IAAK,SAAUrK,GACXgD,KAAKmtS,WAAanwS,GAEtB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeglS,EAAgBxxS,UAAW,SAK7CqM,IAAK,WAID,YAH8B,IAAnB1H,KAAKokQ,WAA+C,MAAlBpkQ,KAAKitS,YAC9CjtS,KAAKokQ,UAAYmoC,GAAmBc,SAEjCrtS,KAAKokQ,WAEhB/8P,IAAK,SAAUrK,GACXgD,KAAKokQ,UAAYpnQ,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeglS,EAAgBxxS,UAAW,kBAK7CqM,IAAK,WAID,YAHyC,IAA9B1H,KAAKstS,sBAAqE,MAA7BttS,KAAKstS,uBACzDttS,KAAKstS,qBAAuB,IAAIzvC,GAAW,EAAG,EAAG,EAAG,IAEjD79P,KAAKstS,sBAEhBjmS,IAAK,SAAUrK,GACXgD,KAAKstS,qBAAuBtwS,EAC5BgD,KAAKitS,WAAY,GAErBtlS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeglS,EAAgBxxS,UAAW,qBAK7CqM,IAAK,WAID,YAH8B,IAAnB1H,KAAKitS,WAA+C,MAAlBjtS,KAAKitS,YAC9CjtS,KAAKitS,WAAY,GAEdjtS,KAAKitS,WAEhBtlS,YAAY,EACZC,cAAc,IAEXilS,KAGPU,GAAiC,WACjC,SAASA,KA6CT,OA3CAjvS,OAAOuJ,eAAe0lS,EAAgBlyS,UAAW,QAM7CqM,IAAK,WACD,OAAO1H,KAAK66R,SAEhBxzR,IAAK,SAAUrK,GACXgD,KAAK66R,QAAU79R,GAEnB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0lS,EAAgBlyS,UAAW,UAK7CqM,IAAK,WACD,OAAO,IAAIm2P,GAAW79P,KAAKm4R,aAAaprR,EAAG/M,KAAKm4R,aAAanrR,EAAGhN,KAAKm4R,aAAaniR,MAAOhW,KAAKm4R,aAAapiR,SAE/G1O,IAAK,SAAUrK,GACXgD,KAAKm4R,aAAen7R,GAExB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0lS,EAAgBlyS,UAAW,UAK7CqM,IAAK,WACD,OAAO1H,KAAKwtS,cAEhBnmS,IAAK,SAAUrK,GACXgD,KAAKwtS,aAAexwS,GAExB2K,YAAY,EACZC,cAAc,IAEX2lS,KAGPE,GAAiC,WAMjC,SAASA,EAAgB5tI,EAAM9pI,GAC3B/1B,KAAK66R,QAAUh7H,EACf7/J,KAAKm4R,aAAepiQ,EAyBxB,OAvBAz3B,OAAOuJ,eAAe4lS,EAAgBpyS,UAAW,QAM7CqM,IAAK,WACD,OAAO1H,KAAK66R,SAEhBlzR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4lS,EAAgBpyS,UAAW,UAK7CqM,IAAK,WACD,OAAO1H,KAAKm4R,cAEhBxwR,YAAY,EACZC,cAAc,IAEX6lS,KEvNPC,GAAkC,WAClC,SAASA,KAmCT,OAjCAA,EAAiBryS,UAAUq5Q,WAAa,SAAU3W,EAAMC,EAAMC,EAAM2D,GAChE,GAAI5D,aAAgBL,SAAgC,IAAfK,EAAKhoP,YAAyC,IAATgoP,EACtE,OAAOh+P,KAAK00Q,WAAW3W,EAAMC,EAAKjxP,EAAGixP,EAAKhxP,GAEzC,GAAoB,iBAATgxP,GAAqC,iBAATC,QAAqC,IAAT2D,EACpE,OAAO5hQ,KAAK00Q,WAAW3W,EAAMC,EAAMC,EAAM,MAExC,GAAID,aAAgBH,SAAoC,IAAfG,EAAKhoP,YAAyC,IAATioP,EAC/E,OAAOj+P,KAAK00Q,WAAW3W,EAAMC,EAAM,MAElC,GAAIA,aAAgBL,SAAgC,IAAfK,EAAKhoP,OAAyBioP,aAAgB4uC,GACpF,OAAO7sS,KAAK00Q,WAAW3W,EAAMC,EAAKjxP,EAAGixP,EAAKhxP,EAAGixP,GAE5C,GAAoB,iBAATD,GAAqC,iBAATC,IAAsB2D,aAAgBirC,IAA2B,MAARjrC,GAAe,CAChH,IAAI5rP,EAAS+nP,EAAK4W,SAAS5S,WAAW/rP,MAAQgoP,EAC1C21B,EAAkB,IAAI91B,GAAWG,EAAMC,EAAMjoP,EAAO,GACxD,OAAOhW,KAAK00Q,WAAW3W,EAAM41B,EAAiB/xB,GAE7C,GAAI5D,aAAgBH,SAAoC,IAAfG,EAAKhoP,OAAyC,kBAATioP,EAE/E,OADAj+P,KAAK2tS,YAAc1vC,EACZj+P,KAAK00Q,WAAW3W,EAAMC,EAAM,MAGnC,IAAI1tI,EAAQ,IAAIi9K,GACZ5nC,EAAW3H,EACXw0B,EAAWv0B,EACf3tI,EAAMuvC,KAAOk+F,EACbztI,EAAMv6F,OAAS4vO,EACfr1I,EAAM9zF,OAAsB,MAAZg2P,EAAoBA,EAAW,IAAIqa,GAEnD,OADa7sS,KAAKypD,OAAO6mE,IAI1Bo9K,KC1CP7hN,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAuBxC0hN,GAA8B,SAAUlhN,GAOxC,SAASkhN,EAAa5sS,GAClB,OAAO0rF,EAAOprF,KAAKtB,KAAMgB,IAAYhB,KAuGzC,OA9GA6rF,GAAU+hN,EAAclhN,GASxBpuF,OAAOuJ,eAAe+lS,EAAavyS,UAAW,WAK1CqM,IAAK,WACD,OAAOglF,EAAOrxF,UAAUq1B,WAAWpvB,KAAKtB,OAE5C2H,YAAY,EACZC,cAAc,IAOlBgmS,EAAavyS,UAAUuxS,eAAiB,SAAUt8K,GAE9CtwH,KAAKw8B,OAAwC,OAA9Bx8B,KAAKgB,QAAQ20Q,mBAA8D,IAA9B31Q,KAAKgB,QAAQ20Q,aAAgC31Q,KAAKgB,QAAQ20Q,aAAe,KACrI,IAAI5lC,EAAcz/G,EAAMuvC,KACpBguI,EAAgBv9K,EAAMv6F,OACtBjH,EAAO9uB,KAAKgB,QAAQhE,MACpB+B,EAAS,KACT+uS,EAAa,IAAIC,GAGrB,IAFAD,EAAWjuI,KAAOkwE,EAClB+9D,EAAWE,UAAYl/Q,IACd,CACLg/Q,EAAa9tS,KAAKiuS,aAAan/Q,EAAMihN,EAAa89D,EAAev9K,GACjEvxH,EAASiB,KAAKkuS,gBAAgBJ,GAC9B,MAGJ,OAAO/uS,GAMX6uS,EAAavyS,UAAU6yS,gBAAkB,SAAUJ,GAE/C,OADa,IAAIK,GAAoBL,EAAWjuI,KAAMiuI,EAAW/3Q,OAAQ+3Q,EAAWE,UAAWF,EAAWM,iBAQ9GR,EAAavyS,UAAU4yS,aAAe,SAAUn/Q,EAAMihN,EAAa89D,EAAev9K,GAC9E,IAAIvxH,EAAS,IAAIgvS,GACjBhvS,EAAOivS,UAAYl/Q,EACnB/vB,EAAO8gK,KAAOkwE,EACd89D,EAAgB7tS,KAAKquS,mBAAmBt+D,EAAa89D,GACrD,IACIS,GADW,IAAI5sC,IACSj4M,OAAO36B,EAAM9uB,KAAKgB,QAAQ+tB,KAAM/uB,KAAKw8B,OAAQqxQ,EAAe99D,EAAY2vD,gBAAgB3pR,QAAQ,EAAO,IAAI6nP,GAAM,EAAG,IAC5I2wC,EAA0C,MAA1BD,EAAaN,UAI7Br5B,GAHarkJ,EAAM9zF,OAAOuwQ,QAAUR,GAAmBiC,YAC9BF,EAAa3pC,MAE3B50B,EAAY4kC,UACvBlW,EAAQz+P,KAAKgB,QAAQ+0Q,WACrB/1Q,KAAKgB,mBAAmBytS,KACxBhwC,EAAM5oO,MAAQ,IAAI6lO,GAAS,EAAG,EAAG,MAErCiZ,EAASoe,uBAAuBub,EAActuS,KAAKgB,QAAQ+tB,KAAM/uB,KAAKgB,QAAQ8xQ,IAAKrU,EAAOovC,EAAe7tS,KAAKw8B,QAC/F8xQ,EAAahsC,MAAMgsC,EAAa1a,UAAY,GAK3D,OAJA70R,EAAOqvS,eAAiBz5B,EAAS8e,cAAc6a,EAAa1a,UAAY,EAAG0a,EAActuS,KAAKgB,QAAQ+tB,KAAM8+Q,EAAe7tS,KAAKw8B,QAChIz9B,EAAOg3B,OAAS/1B,KAAK0uS,kBAAkB3+D,EAAa89D,EAAeS,GACnEvvS,EAAOivS,UAAYM,EAAaN,UAChCjvS,EAAOigB,MACAjgB,GAOX6uS,EAAavyS,UAAUgzS,mBAAqB,SAAUt+D,EAAa89D,GAC/D,IAAI9tI,EAAWgwE,EAAY4kC,SAAS5S,WAEpC,OADA8rC,EAAc93R,OAAU83R,EAAc93R,OAAS,EAAK83R,EAAc93R,OAASgqJ,EAAShqJ,OAAS83R,EAAc7gS,EACpG6gS,GAOXD,EAAavyS,UAAUqzS,kBAAoB,SAAU3+D,EAAa89D,EAAeS,GAC7E,IAAItxQ,EAAWsxQ,EAAa70P,WACxB1sC,EAAI8gS,EAAc9gS,EAClBC,EAAI6gS,EAAc7gS,EAClBgJ,EAAS63R,EAAc73R,MAAQ,EAAK63R,EAAc73R,MAAQgnB,EAAShnB,MACnED,EAASinB,EAASjnB,OAGtBhJ,EAFkBgjO,EAAY4kC,SAASme,4BAA4B91P,EAAU6wQ,EAAc9gS,EAAG8gS,EAAc7gS,EAAGhN,KAAKw8B,QAEpGzvB,EAEhB,IAAI4hS,EAAgB5+D,EAAY4kC,SAASkf,0BAA0B72P,EAASjnB,OAAQ83R,EAAc93R,OAAQ/V,KAAKw8B,QAG/G,OADa,IAAIqhO,GAAW9wP,EAD5BC,GAAK2hS,EAC6B34R,EAAOD,IAGtC63R,GACTnB,IAEEsB,GAAsC,WAGtC,OAFA,gBAKAI,GAAqC,SAAUzhN,GAO/C,SAASyhN,EAAoBtuI,EAAM9pI,EAAQi4Q,EAAWI,GAClD,IAAIruS,EAAQ2sF,EAAOprF,KAAKtB,KAAM6/J,EAAM9pI,IAAW/1B,KAG/C,OAFAD,EAAM6uS,cAAgBZ,EACtBjuS,EAAM8uS,mBAAqBT,EACpBruS,EAyBX,OAnCA8rF,GAAUsiN,EAAqBzhN,GAY/BpuF,OAAOuJ,eAAesmS,EAAoB9yS,UAAW,aAMjDqM,IAAK,WACD,OAAO1H,KAAK4uS,eAEhBjnS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesmS,EAAoB9yS,UAAW,kBAKjDqM,IAAK,WACD,OAAO1H,KAAK6uS,oBAEhBlnS,YAAY,EACZC,cAAc,IAEXumS,GACTV,ICpLE5hN,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GA+BxC4iN,GAAgC,SAAUpiN,GAE1C,SAASoiN,EAAehxC,EAAMC,EAAMC,EAAMC,EAAM2D,GAC5C,IAAI7hQ,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KA6DjC,OAvDAD,EAAM66B,QAAU,GAKhB76B,EAAMupB,aAAe,GAMrBvpB,EAAMgvS,kBAAmB,EAMzBhvS,EAAMivS,kBAAmB,OACL,IAATlxC,IAGc,iBAATA,QAAqC,IAATC,IACxCh+P,EAAQ2sF,EAAOprF,KAAKtB,OAASA,MACvB46B,QAAUkjO,EAChB/9P,EAAMupB,aAAew0O,GAEA,iBAATA,GAAqBC,aAAgB8G,SAA2B,IAAT7G,IACnEj+P,EAAQ2sF,EAAOprF,KAAKtB,OAASA,MACvB46B,QAAUkjO,EAChB/9P,EAAMupB,aAAew0O,EACrB/9P,EAAMs6R,QAAUt8B,GAEK,iBAATD,GAAqBC,aAAgB8G,IAAW7G,aAAgByT,SAA0B,IAATxT,IAC7Fl+P,EAAQ2sF,EAAOprF,KAAKtB,OAASA,MACvB46B,QAAUkjO,EAChB/9P,EAAMupB,aAAew0O,EACrB/9P,EAAMs6R,QAAUt8B,EAChBh+P,EAAMq6R,OAASp8B,GAEM,iBAATF,GAAqBC,aAAgB8G,IAAW7G,aAAgBK,SAA4B,IAATJ,IAC/Fl+P,EAAQ2sF,EAAOprF,KAAKtB,OAASA,MACvB46B,QAAUkjO,EAChB/9P,EAAMupB,aAAew0O,EACrB/9P,EAAMs6R,QAAUt8B,EAChBh+P,EAAM0yQ,SAAWzU,KAGjBj+P,EAAQ2sF,EAAOprF,KAAKtB,OAASA,MACvB46B,QAAUkjO,EAChB/9P,EAAMupB,aAAew0O,EACrB/9P,EAAMs6R,QAAUt8B,EAChBh+P,EAAMq6R,OAASp8B,EACfj+P,EAAM0yQ,SAAWxU,EACjBl+P,EAAMy8B,OAASolO,IAEZ7hQ,EAiUX,OAhYA8rF,GAAUijN,EAAgBpiN,GAiE1BpuF,OAAOuJ,eAAeinS,EAAezzS,UAAW,QA6B5CqM,IAAK,WACD,OAAO1H,KAAK46B,SAEhBvzB,IAAK,SAAUrK,GACXgD,KAAKspB,aAAetsB,EACpBgD,KAAK46B,QAAU59B,GAEnB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeinS,EAAezzS,UAAW,SAM5CqM,IAAK,WACD,OAAO1H,KAAKspB,cAEhB3hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeinS,EAAezzS,UAAW,OAM5CqM,IAAK,WACD,OAAO1H,KAAKo6R,QAGhB/yR,IAAK,SAAUrK,GACXgD,KAAKo6R,OAASp9R,GAElB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeinS,EAAezzS,UAAW,SAM5CqM,IAAK,WACD,OAAO1H,KAAKyyQ,UAGhBprQ,IAAK,SAAUrK,GACXgD,KAAKyyQ,SAAWz1Q,GAEpB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeinS,EAAezzS,UAAW,QA6B5CqM,IAAK,WACD,OAAO1H,KAAKq6R,SAEhBhzR,IAAK,SAAUrK,GACXgD,KAAKq6R,QAAUr9R,EACXgD,KAAKq6R,mBAAmBmM,IAAmC,MAAhBxmS,KAAK46B,QAChD56B,KAAKspB,aAAek9Q,GAAgByE,QAAQjrS,KAAK46B,SAGjD56B,KAAKspB,aAAetpB,KAAK46B,SAGjCjzB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeinS,EAAezzS,UAAW,gBAK5CqM,IAAK,WACD,OAAO1H,KAAKw8B,QAEhBn1B,IAAK,SAAUrK,GACXgD,KAAKw8B,OAASx/B,GAElB2K,YAAY,EACZC,cAAc,IAOlBknS,EAAezzS,UAAU06Q,SAAW,WAChC,OAAyB,MAAjB/1Q,KAAKyyQ,eAA6C,IAAlBzyQ,KAAKyyQ,SAA4B,IAAInU,GAAc,IAAI5C,GAAS,EAAG,EAAG,IAAM17P,KAAKyyQ,UAa7Hq8B,EAAezzS,UAAUouD,OAAS,SAAU6mE,GAGxC,OAFe,IAAIs9K,GAAa5tS,MACVypD,OAAO6mE,IAGjCw+K,EAAezzS,UAAUo1F,SAAW,SAAUstK,EAAMC,EAAMC,EAAM2D,GAC5D,GAAI5D,aAAgBL,SAAgC,IAAfK,EAAKhoP,YAAyC,IAATioP,EAEtE,OADAj+P,KAAK+uS,kBAAmB,EACjB/uS,KAAKywF,SAASstK,EAAMC,EAAKjxP,EAAGixP,EAAKhxP,GAEvC,GAAoB,iBAATgxP,GAAqC,iBAATC,QAAqC,IAAT2D,EAEpE,OADA5hQ,KAAK+uS,kBAAmB,EACjB/uS,KAAKywF,SAASstK,EAAMC,EAAMC,EAAM,MAEtC,GAAID,aAAgBH,SAAoC,IAAfG,EAAKhoP,YAAyC,IAATioP,EAC/E,OAAOj+P,KAAKywF,SAASstK,EAAMC,EAAM,MAEhC,GAAIA,aAAgBL,SAAgC,IAAfK,EAAKhoP,OAAyBioP,aAAgB4uC,GAEpF,OADA7sS,KAAK+uS,kBAAmB,EACjB/uS,KAAKywF,SAASstK,EAAMC,EAAKjxP,EAAGixP,EAAKhxP,EAAGixP,GAE1C,GAAoB,iBAATD,GAAqC,iBAATC,IAAsB2D,aAAgBirC,IAA2B,MAARjrC,GAAe,CAChH5hQ,KAAK+uS,kBAAmB,EACxB,IAAI/4R,EAAS+nP,EAAK4W,SAAS5S,WAAW/rP,MAAQgoP,EAC1C21B,EAAkB,IAAI91B,GAAWG,EAAMC,EAAMjoP,EAAO,GACxD,OAAOhW,KAAKywF,SAASstK,EAAM41B,EAAiB/xB,GAE3C,GAAI5D,aAAgBH,SAAoC,IAAfG,EAAKhoP,OAAyC,kBAATioP,EAC/E,OAAOj+P,KAAKywF,SAASstK,EAAMC,EAAM,MAGjC,IAAIv0M,EAAS,IAAIi4M,GACjB,GAAI1hQ,KAAK+uS,iBAAkB,CACvB,IAAIE,EAAqBxlP,EAAOA,OAAOzpD,KAAKhD,MAAOgD,KAAK+uB,KAAM/uB,KAAK21Q,aAAc,IAAI/X,GAAOG,EAAK4W,SAAS5S,WAAW/rP,MAAQgoP,EAAKjxP,EAAI,IAAI,EAAMgxP,EAAK4W,SAAS5S,YAC1Ji9B,OAAe,EAEfr5B,EAAW3H,EACXw0B,EAAWv0B,EAKf,IAPI3tI,EAAQ,IAAIi9K,IAGV1tI,KAAOk+F,EACbztI,EACMv6F,OAAS4vO,EACfr1I,EAAM9zF,OAAsB,MAAZg2P,EAAoBA,EAAW,IAAIqa,GAC/CoC,EAAmB3sC,MAAM7lQ,OAAS,EAAG,CAErC,GADAuD,KAAK8uB,KAAOmgR,EAAmB9qC,YAAY,GAAGr1O,KAC1CwhG,EAAMv6F,OAAO/oB,GAAKsjH,EAAMuvC,KAAK80G,SAAS5S,WAAWhsP,OAAQ,CACzD,IAAIm5R,EAAmB,IAAIvxC,GAAOrtI,EAAMv6F,OAAOhpB,EAAGujH,EAAMv6F,OAAO/oB,GAC/DgyR,EAAeh/R,KAAKypD,OAAO6mE,GAE3B,IACK,IAFDv6F,EAAS,IAAI8nO,GAAW,EAAGmhC,EAAajpQ,OAAO/oB,EAAIiiS,EAAmBz/Q,WAAYuuO,EAAK4W,SAAS5S,WAAW/rP,MAAOi5R,EAAmBz/Q,YAEhIrzB,EAAI,EAAGA,EAAI8yS,EAAmB3sC,MAAM7lQ,OAAQN,IAgBjD,GAfAm0H,EAAMuvC,KAAOm/H,EAAan/H,KAC1BvvC,EAAMv6F,OAAS,IAAI8nO,GAAW,IAAIF,GAAO5nO,EAAOhpB,EAAGgpB,EAAO/oB,GAAI,IAAI4wP,GAAM7nO,EAAO/f,MAAO+f,EAAOhgB,SAC7F/V,KAAK8uB,KAAOmgR,EAAmB9qC,YAAYhoQ,GAAG2yB,KAC1CiH,EAAO/oB,EAAIiiS,EAAmBz/Q,WAAawvQ,EAAan/H,KAAK80G,SAAS5S,WAAWhsP,SACjFu6G,EACMuvC,KAAOvvC,EAAMuvC,KAAK80G,SAASqgB,cAE7Bj/P,EADAm5Q,EAAiBliS,EAAKgyR,EAAan/H,KAAK80G,SAAS5S,WAAWhsP,OAASipR,EAAajpQ,OAAOhgB,OAChF,IAAI8nP,GAAW,EAAGmhC,EAAajpQ,OAAOhgB,OAAQipR,EAAan/H,KAAK80G,SAAS5S,WAAW/rP,MAAOi5R,EAAmBz/Q,YAG9G,IAAIquO,GAAW,EAAG,EAAGmhC,EAAan/H,KAAK80G,SAAS5S,WAAW/rP,MAAOi5R,EAAmBz/Q,YAElG8gG,EAAMv6F,OAASA,GAEnBipQ,EAAeh/R,KAAKypD,OAAO6mE,GACvBn0H,IAAO8yS,EAAmB3sC,MAAM7lQ,OAAS,EACzCs5B,EAAS,IAAI8nO,GAAW,EAAGmhC,EAAajpQ,OAAO/oB,EAAIiiS,EAAmBz/Q,WAAYwvQ,EAAan/H,KAAK80G,SAAS5S,WAAW/rP,MAAOi5R,EAAmBz/Q,gBAEjJ,CACD,IAAIm/D,EAAY3uF,KAAK+uB,KAAKy2O,cAAcxlQ,KAAK8uB,KAAM9uB,KAAKw8B,QAAQxmB,MAChEgpR,EAAeh/R,KAAKmvS,sBAAsBnQ,EAAcrwM,EAAWqwM,EAAan/H,KAAK80G,SAAS5S,WAAW/rP,MAAO,IAI5H,OAAOgpR,EAGP,IAAIoQ,EAAWpvS,KAAK+uB,KAAKy2O,cAAcxlQ,KAAK8uB,KAAM9uB,KAAKw8B,QAKvD,OAJI8zF,EAAMv6F,OAAO/oB,GAAKsjH,EAAMuvC,KAAK80G,SAAS5S,WAAWhsP,SACjDipR,EAAeh/R,KAAKypD,OAAO6mE,GAC3B0uK,EAAeh/R,KAAKmvS,sBAAsBnQ,EAAcoQ,EAASp5R,MAAOgpR,EAAan/H,KAAK80G,SAAS5S,WAAW/rP,MAAO,IAElHgpR,EAIPA,EAAev1O,EAAOA,OAAOzpD,KAAKhD,MAAOgD,KAAK+uB,KAAM/uB,KAAK21Q,aAAc,IAAI/X,GAAMI,EAAKhoP,MAAO,IAAI,EAAO+nP,EAAK4W,SAAS5S,YAA1H,IAEIzxI,EADAvxH,OAAS,EAET4mQ,EAAW3H,EACXw0B,EAAWv0B,EAIf,IANI3tI,EAAQ,IAAIi9K,IAGV1tI,KAAOk+F,EACbztI,EAAMv6F,OAAS4vO,EACfr1I,EAAM9zF,OAAsB,MAAZg2P,EAAoBA,EAAW,IAAIqa,GAC/C7N,EAAa18B,MAAM7lQ,OAAS,EAAG,CAE/B,GADAuD,KAAK8uB,KAAOkwQ,EAAa76B,YAAY,GAAGr1O,KACpCwhG,EAAMv6F,OAAO/oB,GAAKsjH,EAAMuvC,KAAK80G,SAAS5S,WAAWhsP,OAAQ,CACrDm5R,EAAmB,IAAIvxC,GAAOrtI,EAAMv6F,OAAOhpB,EAAGujH,EAAMv6F,OAAO/oB,GAC/DjO,EAASiB,KAAKypD,OAAO6mE,GAErB,IADIv6F,EAAS,IAAI8nO,GAAW8H,EAAS54P,EAAGhO,EAAOg3B,OAAO/oB,EAAIgyR,EAAaxvQ,WAAYm2O,EAAS3vP,MAAOgpR,EAAaxvQ,YAEvGrzB,EAAI,EAAGA,EAAI6iS,EAAa18B,MAAM7lQ,OAAQN,IAgB3C,GAfAm0H,EAAMuvC,KAAO9gK,EAAO8gK,KACpBvvC,EAAMv6F,OAAS,IAAI8nO,GAAW9nO,EAAOhpB,EAAGgpB,EAAO/oB,EAAG+oB,EAAO/f,MAAO+f,EAAOhgB,QACvE/V,KAAK8uB,KAAOkwQ,EAAa76B,YAAYhoQ,GAAG2yB,KACpCiH,EAAO/oB,EAAIgyR,EAAaxvQ,WAAazwB,EAAO8gK,KAAK80G,SAAS5S,WAAWhsP,SACrEu6G,EACMuvC,KAAOvvC,EAAMuvC,KAAK80G,SAASqgB,cAE7Bj/P,EADAm5Q,EAAiBliS,EAAKjO,EAAO8gK,KAAK80G,SAAS5S,WAAWhsP,OAAShX,EAAOg3B,OAAOhgB,OACpE,IAAI8nP,GAAW8H,EAAS54P,EAAGiyR,EAAaxvQ,WAAYm2O,EAAS3vP,MAAOgpR,EAAaxvQ,YAGjF,IAAIquO,GAAW8H,EAAS54P,EAAG,EAAG44P,EAAS3vP,MAAOgpR,EAAaxvQ,YAExE8gG,EAAMv6F,OAASA,GAEnBh3B,EAASiB,KAAKypD,OAAO6mE,GACjBn0H,IAAO6iS,EAAa18B,MAAM7lQ,OAAS,EACnCs5B,EAAS,IAAI8nO,GAAW8H,EAAS54P,EAAGhO,EAAOg3B,OAAO/oB,EAAIgyR,EAAaxvQ,WAAYm2O,EAAS3vP,MAAOgpR,EAAaxvQ,gBAE3G,CACGm/D,EAAY3uF,KAAK+uB,KAAKy2O,cAAcxlQ,KAAK8uB,KAAM9uB,KAAKw8B,QAAQxmB,MAChEjX,EAASiB,KAAKmvS,sBAAsBpwS,EAAQ4vF,EAAWg3K,EAAS3vP,MAAO2vP,EAAS54P,IAI5F,OAAOhO,EAGHqwS,EAAWpvS,KAAK+uB,KAAKy2O,cAAcxlQ,KAAK8uB,KAAM9uB,KAAKw8B,QAKvD,OAJI8zF,EAAMv6F,OAAO/oB,GAAKsjH,EAAMuvC,KAAK80G,SAAS5S,WAAWhsP,SACjDhX,EAASiB,KAAKypD,OAAO6mE,GACrBvxH,EAASiB,KAAKmvS,sBAAsBpwS,EAAQqwS,EAASp5R,MAAO2vP,EAAS3vP,MAAO2vP,EAAS54P,IAElFhO,GAKvB+vS,EAAezzS,UAAU8zS,sBAAwB,SAAUpwS,EAAQ4vF,EAAWttD,EAAcguQ,GAkBxF,OAhByB,MAArBrvS,KAAK21Q,mBAAqD,IAAtB31Q,KAAK21Q,cAAgC31Q,KAAK21Q,aAAa3tN,YAAc+yM,GAAiBm5B,QAC1Hn1R,EAAOg3B,OAAOhpB,EAAIsiS,GAAiBhuQ,EAAestD,GAAa,EAC/D5vF,EAAOg3B,OAAO/f,MAAQ24E,GAEI,MAArB3uF,KAAK21Q,mBAAqD,IAAtB31Q,KAAK21Q,cAAgC31Q,KAAK21Q,aAAa3tN,YAAc+yM,GAAiBo5B,OAC/Hp1R,EAAOg3B,OAAOhpB,EAAIsiS,GAAiBhuQ,EAAestD,GAClD5vF,EAAOg3B,OAAO/f,MAAQ24E,GAEI,MAArB3uF,KAAK21Q,mBAAqD,IAAtB31Q,KAAK21Q,cAAgC31Q,KAAK21Q,aAAa3tN,YAAc+yM,GAAiBm7B,SAC/Hn3R,EAAOg3B,OAAOhpB,EAAIsiS,EAClBtwS,EAAOg3B,OAAO/f,MAAQqrB,IAGtBtiC,EAAOg3B,OAAO/f,MAAQq5R,EACtBtwS,EAAOg3B,OAAO/f,MAAQ24E,GAEnB5vF,GAEJ+vS,GACTpB,ICjaE7hN,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAiBxCojN,GAAkC,SAAU5iN,GAE5C,SAAS4iN,EAAiBt1L,EAAWwgI,GACjC,IAAIz6O,EAAQ2sF,EAAOprF,KAAKtB,KAAMg6G,IAAch6G,KAI5C,YAHmB,IAARw6O,IACPz6O,EAAMy6O,IAAMA,GAETz6O,EA2DX,OAjEA8rF,GAAUyjN,EAAkB5iN,GAQ5BpuF,OAAOuJ,eAAeynS,EAAiBj0S,UAAW,aAK9CqM,IAAK,WAID,YAHiC,IAAtB1H,KAAKuvS,eACZvvS,KAAKuvS,aAAe,IAAI30C,IAErB56P,KAAKuvS,cAEhB5nS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeynS,EAAiBj0S,UAAW,OAM9CqM,IAAK,WACD,OAAO1H,KAAKwvS,UAAUh1D,KAE1BnzO,IAAK,SAAUrK,GACPgD,KAAKwvS,UAAUh1D,MAAQx9O,IACvBgD,KAAKwvS,UAAUh1D,IAAMx9O,IAG7B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeynS,EAAiBj0S,UAAW,UAK9CqM,IAAK,WACD,OAAO1H,KAAKosS,gBAEhB/kS,IAAK,SAAUrK,GACXgD,KAAKosS,aAAapvS,GAClBgD,KAAKwvS,UAAUvmQ,KAAOjsC,GAE1B2K,YAAY,EACZC,cAAc,IAOlB0nS,EAAiBj0S,UAAU00G,WAAa,WACpCrjB,EAAOrxF,UAAU00G,WAAWzuG,KAAKtB,MACjCA,KAAK68O,WAAWhhL,MAAMz+D,SAAS4C,KAAKq9O,qBAAqBzD,QAAS,IAAIlF,GAAQ10O,KAAKq9O,qBAAqB7wL,OACpFxsD,KAAKwvS,UAAUxuS,QACnChB,KAAK68O,WAAWhhL,MAAMz+D,SAAS4C,KAAKq9O,qBAAqB/hM,EAAGt7C,KAAKwvS,UAAUxuS,UAExEsuS,GACTpD,ICpFErgN,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GA8CxCuiN,GAAgC,SAAU/hN,GAO1C,SAAS+hN,IACL,IAAI1uS,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KAOjCD,EAAM0vS,uBAAyB,GAM/B1vS,EAAM2vS,cAAgB,KAOtB3vS,EAAM4vS,mBAAoB,EAC1B5vS,EAAM6vS,cAAgB,IAAI7vD,GAC1B,IAAK,IAAI5jP,EAAI,EAAGA,EAAI,EAAGA,IACnB4D,EAAM6vS,cAAcxrS,IAAI,IAAIm7O,GAAU,IAE1C,OAAOx/O,EAwLX,OAxNA8rF,GAAU4iN,EAAgB/hN,GAkC1BpuF,OAAOuJ,eAAe4mS,EAAepzS,UAAW,OA6B5CqM,IAAK,WACD,OAAO1H,KAAKyvS,wBAEhBpoS,IAAK,SAAUrK,GACX,GAAqB,IAAjBA,EAAMP,OACN,MAAM,IAAImE,MAAM,qDAEpBZ,KAAKyvS,uBAAyBzyS,GAElC2K,YAAY,EACZC,cAAc,IAElB6mS,EAAepzS,UAAUu6Q,KAAO,SAAU9X,EAAMC,GAC5C,GAAID,aAAgBshC,GAAS,CACzB,IAAI31O,EAAS,IAAIi4M,GACbmuC,EAAoB7vS,KAAK+uB,KAAKrqB,MAClC,GAAIq5P,aAAgBJ,GAAQ,CACxB39P,KAAK2vS,mBAAoB,EACzB3vS,KAAK+uB,KAAKrqB,MAAQ+2P,GAAa4J,UAE/B,GAAkC,KAD9B25B,EAAev1O,EAAOA,OAAOzpD,KAAKhD,MAAOgD,KAAK+uB,KAAM/uB,KAAK21Q,aAAc,IAAI/X,GAAOE,EAAK6W,SAAS5S,WAAW/rP,MAAQ+nP,EAAKhxP,EAAI,IAAI,EAAM+wP,EAAK6W,SAAS5S,aACvIO,MAAM7lQ,OAAc,CACjC,IAAIugC,EAAWh9B,KAAK+uB,KAAKy2O,cAAcxlQ,KAAKhD,OACxC01B,EAAO,IAAImrO,GAAWE,EAAM/gO,GAChCtK,EAAO1yB,KAAK8vS,gBAAgBp9Q,EAAMsK,EAAShnB,MAAO8nP,EAAK6W,SAAS5S,WAAW/rP,MAAO+nP,EAAKhxP,GACvF/M,KAAK0vS,cAAgB,IAAIJ,GAAiB58Q,EAAM1yB,KAAKo5B,KACrDp5B,KAAK0vS,cAAc7yD,WAAWhhL,MAAMz+D,SAAS,SAAU4C,KAAK4vS,eAC5D9xC,EAAK1tM,YAAYhsD,IAAIpE,KAAK0vS,eAC1B,IAAI3wS,EAASiB,KAAKywF,SAASqtK,EAAMC,GAEjC,OADA/9P,KAAK+uB,KAAKrqB,MAAQmrS,EACX9wS,EAGHA,EAASiB,KAAK+vS,0BAA0B/Q,EAAclhC,EAAMC,GAEhE,OADA/9P,KAAK+uB,KAAKrqB,MAAQmrS,EACX9wS,EAIX,IAAIigS,EAAev1O,EAAOA,OAAOzpD,KAAKhD,MAAOgD,KAAK+uB,KAAM/uB,KAAK21Q,aAAc,IAAI/X,GAAMG,EAAK/nP,MAAO,IAAI,EAAO,IAAI4nP,GAAM,EAAG,IAEzH,GADA59P,KAAK+uB,KAAKrqB,MAAQ+2P,GAAa4J,UACG,IAA9B25B,EAAa18B,MAAM7lQ,OAAc,CAC7BugC,EAAWh9B,KAAK+uB,KAAKy2O,cAAcxlQ,KAAKhD,OACxC01B,EAAO,IAAImrO,GAAW,IAAIF,GAAOI,EAAKhxP,EAAGgxP,EAAK/wP,GAAIgwB,GACtDtK,EAAO1yB,KAAK8vS,gBAAgBp9Q,EAAMsK,EAAShnB,MAAO+nP,EAAK/nP,MAAO+nP,EAAKhxP,GACnE/M,KAAK0vS,cAAgB,IAAIJ,GAAiB58Q,EAAM1yB,KAAKo5B,KACrDp5B,KAAK0vS,cAAc7yD,WAAWhhL,MAAMz+D,SAAS,SAAU4C,KAAK4vS,eAC5D9xC,EAAK1tM,YAAYhsD,IAAIpE,KAAK0vS,eAC1B,IAAI9vP,EAAc5/C,KAAKywF,SAASqtK,EAAMC,GAEtC,OADA/9P,KAAK+uB,KAAKrqB,MAAQmrS,EACXjwP,EAGHA,EAAc5/C,KAAKgwS,2BAA2BhR,EAAclhC,EAAMC,GAEtE,OADA/9P,KAAK+uB,KAAKrqB,MAAQmrS,EACXjwP,EAKf,IAAIigH,EAAO,IAAIu/H,GAEf,OADAv/H,EAAOi+F,EAAKj+F,KACL7/J,KAAK41Q,KAAK/1G,EAAMk+F,IAS/B0wC,EAAepzS,UAAU00S,0BAA4B,SAAUhxS,EAAQ8gK,EAAM3mI,GAEzE,IAAK,IADD8lQ,EACK7iS,EAAI,EAAGA,EAAI4C,EAAOolQ,YAAY1nQ,OAAQN,IAAK,CAChD,IAAIgzB,EAAOnvB,KAAK+uB,KAAKy2O,cAAczmQ,EAAOujQ,MAAMnmQ,GAAG2yB,MAC/CiH,EAAS,IAAI8nO,GAAW3kO,EAAU/J,GAKtC,GAJU,IAANhzB,IACA45B,EAAOhpB,EAAI,GAEf/M,KAAK8uB,KAAO/vB,EAAOujQ,MAAMnmQ,GAAG2yB,KACxBiH,EAAO/oB,EAAImiB,EAAKpZ,OAAS8pJ,EAAK80G,SAAS5S,WAAWhsP,OAAQ,CAC1D,GAAU,IAAN5Z,EAMA,MALA0jK,EAAOA,EAAK80G,SAASqgB,cACrBj/P,EAAS,IAAI8nO,GAAW,EAAG,EAAGh+F,EAAK80G,SAAS5S,WAAW/rP,MAAOmZ,EAAKpZ,QACnEmjB,EAASlsB,EAAI,EAMrB+oB,EAAS/1B,KAAK8vS,gBAAgB/5Q,EAAQ5G,EAAKnZ,MAAO6pJ,EAAK80G,SAAS5S,WAAW/rP,MAAO+f,EAAOhpB,GACzF/M,KAAK0vS,cAAgB,IAAIJ,GAAiBv5Q,EAAQ/1B,KAAKo5B,KACvDp5B,KAAK0vS,cAAc7yD,WAAWhhL,MAAMz+D,SAAS,SAAU4C,KAAK4vS,eAC5D/vI,EAAKzvG,YAAYhsD,IAAIpE,KAAK0vS,eAEtB1Q,EADM,IAAN7iS,EACe6D,KAAKywF,SAASovE,EAAM,IAAI89F,GAAO,EAAG5nO,EAAO/oB,IAGzChN,KAAKywF,SAASovE,EAAM9pI,EAAOhpB,EAAGgpB,EAAO/oB,GAExDksB,EAASlsB,GAAKmiB,EAAKpZ,OAEvB,OAAOipR,GAMXyP,EAAepzS,UAAU20S,2BAA6B,SAAUjxS,EAAQ8gK,EAAM9pI,GAE1E,IAAK,IADDipQ,EACK7iS,EAAI,EAAGA,EAAI4C,EAAOolQ,YAAY1nQ,OAAQN,IAAK,CAChD,IAAIgzB,EAAOnvB,KAAK+uB,KAAKy2O,cAAczmQ,EAAOujQ,MAAMnmQ,GAAG2yB,MAC/CmmP,EAAiB,IAAIpX,GAAW,IAAIF,GAAO5nO,EAAOhpB,EAAGgpB,EAAO/oB,GAAImiB,GAGpE,GAFA8lP,EAAiBj1Q,KAAK8vS,gBAAgB76B,EAAgB9lP,EAAKnZ,MAAO+f,EAAO/f,MAAO+f,EAAOhpB,GACvF/M,KAAK8uB,KAAO/vB,EAAOujQ,MAAMnmQ,GAAG2yB,KACxBiH,EAAO/oB,EAAImiB,EAAKpZ,OAAS8pJ,EAAK80G,SAAS5S,WAAWhsP,OAAQ,CAC1D,GAAU,IAAN5Z,EAMA,MALA0jK,EAAOA,EAAK80G,SAASqgB,cACrBj/P,EAAS,IAAI8nO,GAAW9nO,EAAOhpB,EAAG,EAAGgpB,EAAO/f,MAAOmZ,EAAKpZ,QACxDk/P,EAAejoQ,EAAI,EAM3BhN,KAAK0vS,cAAgB,IAAIJ,GAAiBr6B,EAAgBj1Q,KAAKo5B,KAC/Dp5B,KAAK0vS,cAAc7yD,WAAWhhL,MAAMz+D,SAAS,SAAU4C,KAAK4vS,eAC5D/vI,EAAKzvG,YAAYhsD,IAAIpE,KAAK0vS,eAC1B1Q,EAAeh/R,KAAKywF,SAASovE,EAAM9pI,GACnCA,EAAO/oB,GAAKmiB,EAAKpZ,OAErB,OAAOipR,GAGXyP,EAAepzS,UAAUy0S,gBAAkB,SAAUjC,EAAel/M,EAAWttD,EAAcguQ,GAkBzF,OAhByB,MAArBrvS,KAAK21Q,mBAAqD,IAAtB31Q,KAAK21Q,cAAgC31Q,KAAK21Q,aAAa3tN,YAAc+yM,GAAiBm5B,QAC1H2Z,EAAc9gS,EAAIsiS,GAAiBhuQ,EAAestD,GAAa,EAC/Dk/M,EAAc73R,MAAQ24E,GAEI,MAArB3uF,KAAK21Q,mBAAqD,IAAtB31Q,KAAK21Q,cAAgC31Q,KAAK21Q,aAAa3tN,YAAc+yM,GAAiBo5B,OAC/H0Z,EAAc9gS,EAAIsiS,GAAiBhuQ,EAAestD,GAClDk/M,EAAc73R,MAAQ24E,GAEI,MAArB3uF,KAAK21Q,mBAAqD,IAAtB31Q,KAAK21Q,cAAgC31Q,KAAK21Q,aAAa3tN,YAAc+yM,GAAiBm7B,SAC/H2X,EAAc9gS,EAAIsiS,EAClBxB,EAAc73R,MAAQqrB,IAGtBwsQ,EAAc73R,MAAQq5R,EACtBxB,EAAc73R,MAAQ24E,GAEnBk/M,GAEJY,GACTK,IC/PEmB,GAAqC,WACrC,SAASA,KA0HT,OAnHAA,EAAoBhF,QAAU,SAAUiF,EAAWC,GAC/C,IAAIpxS,EAAS,GACb,OAAQoxS,GACJ,KAAK7iC,GAAe7hE,KAChB1sM,EAAS,GACT,MACJ,KAAKuuQ,GAAe8iC,QAChBrxS,EAASmxS,EAAUhjS,WACnB,MACJ,KAAKogQ,GAAe+iC,WAChBtxS,EAASiB,KAAKswS,eAAeJ,GAAWt6R,cACxC,MACJ,KAAK03P,GAAeijC,WAChBxxS,EAASiB,KAAKwwS,cAAcN,GAAWt6R,cACvC,MACJ,KAAK03P,GAAemjC,WAChB1xS,EAASiB,KAAKswS,eAAeJ,GAC7B,MACJ,KAAK5iC,GAAeojC,WAChB3xS,EAASiB,KAAKwwS,cAAcN,GAGpC,OAAOnxS,GAMXkxS,EAAoBO,cAAgB,SAAUN,GAC1C,IAAIS,EAAS,GAcb,OAbAA,GAAU3wS,KAAK4wS,eAAeV,EAAW,IAAM,KAC/CS,GAAU3wS,KAAK4wS,eAAeV,EAAW,IAAK,MAC9CS,GAAU3wS,KAAK4wS,eAAeV,EAAW,IAAK,KAC9CS,GAAU3wS,KAAK4wS,eAAeV,EAAW,IAAK,MAC9CS,GAAU3wS,KAAK4wS,eAAeV,EAAW,IAAK,KAC9CS,GAAU3wS,KAAK4wS,eAAeV,EAAW,GAAI,MAC7CS,GAAU3wS,KAAK4wS,eAAeV,EAAW,GAAI,KAC7CS,GAAU3wS,KAAK4wS,eAAeV,EAAW,GAAI,MAC7CS,GAAU3wS,KAAK4wS,eAAeV,EAAW,GAAI,KAC7CS,GAAU3wS,KAAK4wS,eAAeV,EAAW,EAAG,MAC5CS,GAAU3wS,KAAK4wS,eAAeV,EAAW,EAAG,KAC5CS,GAAU3wS,KAAK4wS,eAAeV,EAAW,EAAG,OAC5CS,GAAU3wS,KAAK4wS,eAAeV,EAAW,EAAG,MAC9BhjS,YAMlB+iS,EAAoBK,eAAiB,SAAUO,GAG3C,IAFA,IAAI/vS,EAAQd,KAAK8wS,gBAAgBD,GAC7B9xS,EAAS,GACN+B,EAAMrE,OAAS,GAAG,CACrB,IAAId,EAAMmF,EAAM63J,MAChB55J,EAASiB,KAAK+wS,WAAWhyS,EAAQpD,GAErC,OAAOoD,EAAOmO,YAMlB+iS,EAAoBW,eAAiB,SAAU5zS,EAAOg0S,EAAWplC,GAE7D,IADA,IAAIqlC,EAAe,GACZj0S,GAASg0S,GACZh0S,GAASg0S,EACTC,GAAgBrlC,EAEpB,OAAOqlC,EAAa/jS,YAMxB+iS,EAAoBa,gBAAkB,SAAUD,GAC5C,GAAIA,GAAU,EACV,MAAMjwS,MAAM,+DAGhB,IADA,IAAIE,KACG+vS,EAAS7wS,KAAKkxS,aAAa,CAC9B,IAAIlD,EAAY6C,EAAS7wS,KAAKkxS,YACZ,IAAdlD,GACA6C,EAASA,EAAS7wS,KAAKkxS,YAAc,EACrClD,EAAYhuS,KAAKkxS,aAGjBL,GAAU7wS,KAAKkxS,YAEnBpwS,EAAM0D,KAAKwpS,GAGf,OADAltS,EAAM0D,KAAKqsS,GACJ/vS,GAMXmvS,EAAoBc,WAAa,SAAUttC,EAASzmQ,GAGhD,OADAymQ,GADaj6O,OAAOC,aAAawmR,EAAoBkB,gBAAkBn0S,IAU3EizS,EAAoBiB,YAAc,GAMlCjB,EAAoBkB,mBACblB,KChIPmB,GAAsC,WACtC,SAASA,EAAqBniS,EAAUjS,GAOpCgD,KAAKqxS,YAAc,KAKnBrxS,KAAK46B,QAAU,QACS,IAAb3rB,IAIPjP,KAAKiP,SAAWA,EAChBjP,KAAKhD,MAAQA,GAgCrB,OA7BAsB,OAAOuJ,eAAeupS,EAAqB/1S,UAAW,YAMlDqM,IAAK,WACD,OAAO1H,KAAKqxS,aAEhBhqS,IAAK,SAAUrK,GACXgD,KAAKqxS,YAAcr0S,GAEvB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeupS,EAAqB/1S,UAAW,SAKlDqM,IAAK,WACD,OAAO1H,KAAK46B,SAEhBvzB,IAAK,SAAUrK,GACXgD,KAAK46B,QAAU59B,GAEnB2K,YAAY,EACZC,cAAc,IAEXwpS,KCvDPvlN,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAqBxColN,GAAuC,SAAU5kN,GAEjD,SAAS4kN,IACL,IAAIvxS,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KAOjC,OADAD,EAAMskG,KAAO,IAAI2vK,GACVj0Q,EAeX,OAxBA8rF,GAAUylN,EAAuB5kN,GAajC4kN,EAAsBj2S,UAAUo5R,YAAc,SAAU9f,EAAUz7O,EAAUs8O,EAAUC,GAClF/oL,EAAOrxF,UAAUk6Q,kBAAkBj0Q,KAAKtB,KAAM20Q,EAAUz7O,EAAUs8O,EAAUC,GAC5E,IAAIz4Q,EAAQgD,KAAKnD,SAAS83Q,GACtB1lQ,EAAW,IAAIutR,GAAYx8R,KAAK2gB,WACpC3gB,KAAKqkG,KAAKjnG,SAASu3Q,EAAU,IAAIy8B,GAAqBniS,EAAUjS,IAChE,IACImyB,EAAOnvB,KAAK2gB,UAChB1R,EAAS0lQ,SAAS0d,WAAWr1R,EAAOgD,KAAK01Q,UAAW11Q,KAAK8yQ,IAAK9yQ,KAAK+1Q,WAAY,EAAG,EAAG5mP,EAAKnZ,MAAOmZ,EAAKpZ,OAAQ/V,KAAK21Q,cACnH,IAAI47B,EAAe,IAAI5zC,GAAOzkO,EAASnsB,EAAI/M,KAAKk5B,SAASnsB,EAAGmsB,EAASlsB,EAAIhN,KAAKk5B,SAASlsB,GACvF2nQ,EAASod,gBAAgB9iR,EAAUsiS,EAAc,IAAI3zC,GAAM3uP,EAAS+G,MAAQw/P,EAAUvmQ,EAAS8G,OAAS0/P,KAErG67B,GACTt8B,IC/CEnpL,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAkBxCslN,GAAoC,SAAU9kN,GAE9C,SAAS8kN,EAAmBziR,EAAMgvO,GAC9B,IAAIh+P,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KAkBjC,OAZAD,EAAM0xS,oBAAsBnkC,GAAe8iC,aACvB,IAATryC,EACPh+P,EAAMgvB,KAAOA,EAERgvO,aAAgBM,IACrBt+P,EAAMgvB,KAAOA,EACbhvB,EAAM0+P,MAAQV,IAGdh+P,EAAMgvB,KAAOA,EACbhvB,EAAMg2B,OAASgoO,GAEZh+P,EAoCX,OAxDA8rF,GAAU2lN,EAAoB9kN,GAsB9BpuF,OAAOuJ,eAAe2pS,EAAmBn2S,UAAW,eAMhDqM,IAAK,WACD,OAAO1H,KAAKyxS,qBAEhBpqS,IAAK,SAAUrK,GACXgD,KAAKyxS,oBAAsBz0S,GAE/B2K,YAAY,EACZC,cAAc,IAMlB4pS,EAAmBn2S,UAAUwB,SAAW,SAAU83Q,GAC9C,IACI90G,EAAO7/J,KAAKi2Q,oBAAoBtB,GAEpC,OADS30Q,KAAK0xS,iBAAiB7xI,IAOnC2xI,EAAmBn2S,UAAUq2S,iBAAmB,SAAU7xI,GACtD,IACIC,EADWD,EAAKr/J,SACK44O,MAAM76O,QAAQshK,GAAQ,EAC/C,OAAOowI,GAAoBhF,QAAQnrI,EAAW9/J,KAAKmwS,cAEhDqB,GACTF,IC5EEzlN,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAiBxCylN,GAAmC,SAAUjlN,GAU7C,SAASilN,EAAkB5iR,EAAM0vO,EAAO3vO,GAEpC,IAAK,IADDu1E,KACKjmG,EAAK,EAAGA,EAAKY,UAAUvC,OAAQ2B,IACpCimG,EAAKjmG,EAAK,GAAKY,UAAUZ,GAE7B,IAAI2B,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KAgBjC,OAVAD,EAAMkxR,wBAA0B,KAKhClxR,EAAM6xS,aAAe,GACrB7xS,EAAMgvB,KAAOA,EACbhvB,EAAM0+P,MAAQA,EACd1+P,EAAM+uB,KAAOA,EACb/uB,EAAMy0Q,gBAAkBnwK,EACjBtkG,EA+CX,OA7EA8rF,GAAU8lN,EAAmBjlN,GAgC7BpuF,OAAOuJ,eAAe8pS,EAAkBt2S,UAAW,QAM/CqM,IAAK,WACD,OAAO1H,KAAK4xS,cAEhBvqS,IAAK,SAAUrK,GACXgD,KAAK4xS,aAAe50S,GAExB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8pS,EAAkBt2S,UAAW,mBAK/CqM,IAAK,WACD,OAAO1H,KAAKixR,yBAEhB5pR,IAAK,SAAUrK,GACXgD,KAAKixR,wBAA0Bj0R,GAEnC2K,YAAY,EACZC,cAAc,IAOlB+pS,EAAkBt2S,UAAUwB,SAAW,SAAU83Q,GAC7C,IACI7lP,EAAO9uB,KAAK8uB,KAAK5hB,WACrB,QAAoC,IAAzBlN,KAAKw0Q,iBAA2D,MAAxBx0Q,KAAKw0Q,iBAA2Bx0Q,KAAKw0Q,gBAAgB/3Q,OAAS,EAC7G,IAAK,IAAIN,EAAI,EAAGA,EAAI6D,KAAKw0Q,gBAAgB/3Q,OAAQN,IAAK,CAClD,IAAI01S,EAAiB7xS,KAAKw0Q,gBAAgBr4Q,GAC1C2yB,EAAOA,EAAKvf,QAAQ,IAAMpT,EAAI,IAAK01S,EAAeh1S,SAAS83Q,IAGnE,OAAO7lP,GAEJ6iR,GACTL,IChGEzlN,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAqBxC4lN,GAAqC,SAAUplN,GAG/C,SAASolN,IACL,IAAI/xS,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KAMjC,OAHAD,EAAMskG,KAAO,IAAI2vK,GAEjBj0Q,EAAMgyS,mBACChyS,EAyBX,OAlCA8rF,GAAUimN,EAAqBplN,GAW/BolN,EAAoBz2S,UAAUo5R,YAAc,SAAU9f,EAAUz7O,EAAUs8O,EAAUC,GAChF/oL,EAAOrxF,UAAUk6Q,kBAAkBj0Q,KAAKtB,KAAM20Q,EAAUz7O,EAAUs8O,EAAUC,GAC5E,IACIj1Q,EADOR,KAAKi2Q,oBAAoBtB,GAChBn0Q,SAChBkyD,EAAY1yD,KAAKnD,SAAS83Q,GAE9B,GAAI30Q,KAAKqkG,KAAKowI,YAAYj0O,GAAW,CACjC,IAAIuzO,EAAO/zO,KAAKqkG,KAAKxnG,SAAS2D,GAC1B+wS,EAAe,IAAI5zC,GAAOzkO,EAASnsB,EAAI/M,KAAKk5B,SAASnsB,EAAGmsB,EAASlsB,EAAIhN,KAAKk5B,SAASlsB,GACvF2nQ,EAASod,gBAAgBh+C,EAAK9kO,SAAUsiS,EAAc,IAAI3zC,GAAM7pB,EAAK9kO,SAAS+G,MAAQw/P,EAAUzhC,EAAK9kO,SAAS8G,OAAS0/P,IACvHz1Q,KAAK+xS,gBAAgBvtS,KAAKmwQ,OAEzB,CACD,IAAIxlP,EAAOnvB,KAAK2gB,UACZ1R,EAAW,IAAIutR,GAAYrtQ,GAC/BnvB,KAAKqkG,KAAKjnG,SAASoD,EAAU,IAAI4wS,GAAqBniS,EAAUyjD,IAChEzjD,EAAS0lQ,SAAS0d,WAAW3/N,EAAW1yD,KAAK01Q,UAAW11Q,KAAK8yQ,IAAK9yQ,KAAK+1Q,WAAY,EAAG,EAAG5mP,EAAKnZ,MAAOmZ,EAAKpZ,OAAQ/V,KAAK21Q,cACnH47B,EAAe,IAAI5zC,GAAOzkO,EAASnsB,EAAI/M,KAAKk5B,SAASnsB,EAAGmsB,EAASlsB,EAAIhN,KAAKk5B,SAASlsB,GACvF2nQ,EAASod,gBAAgB9iR,EAAUsiS,EAAc,IAAI3zC,GAAM3uP,EAAS+G,MAAQw/P,EAAUvmQ,EAAS8G,OAAS0/P,IACxGz1Q,KAAK+xS,gBAAgBvtS,KAAKmwQ,KAI3Bm9B,GACT98B,ICzDEnpL,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAoBxC8lN,GAAmC,SAAUtlN,GAE7C,SAASslN,EAAkBjjR,EAAMgvO,GAC7B,IAAIh+P,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KAkBjC,OAZAD,EAAM0xS,oBAAsBnkC,GAAe8iC,aACvB,IAATryC,EACPh+P,EAAMgvB,KAAOA,EAERgvO,aAAgBM,IACrBt+P,EAAMgvB,KAAOA,EACbhvB,EAAM0+P,MAAQV,IAGdh+P,EAAMgvB,KAAOA,EACbhvB,EAAMg2B,OAASgoO,GAEZh+P,EA8BX,OAlDA8rF,GAAUmmN,EAAmBtlN,GAsB7BpuF,OAAOuJ,eAAemqS,EAAkB32S,UAAW,eAM/CqM,IAAK,WACD,OAAO1H,KAAKyxS,qBAEhBpqS,IAAK,SAAUrK,GACXgD,KAAKyxS,oBAAsBz0S,GAE/B2K,YAAY,EACZC,cAAc,IAOlBoqS,EAAkB32S,UAAUwB,SAAW,SAAU83Q,GAC7C,IAGI11P,EAFOjf,KAAKi2Q,oBAAoBtB,GAChBsgB,QAAQ30R,OAAOE,SACd44O,MAAMn6N,MAE3B,OADSgxR,GAAoBhF,QAAQhsR,EAAOjf,KAAKmwS,cAG9C6B,GACTF,KZnEF,SAAWtF,GAKPA,EAAmBA,EAA6B,SAAI,GAAK,WAKzDA,EAAmBA,EAA8B,UAAI,GAAK,YAK1DA,EAAmBA,EAAyB,KAAI,GAAK,OAfzD,CAgBGA,KAAuBA,QaT1B,ICRWyF,GDQPC,GAAgC,WAChC,SAASA,EAAep0C,EAAMC,GAmC1B,GA7BA/9P,KAAKq9O,qBAAuB,IAAIlE,GAKhCn5O,KAAKmyS,gBAAkB3F,GAAmBtsN,SAM1ClgF,KAAK6vE,WAAa,EAMlB7vE,KAAKoyS,oBAAsB,IAAIz0C,GAAO,EAAG,GAMzC39P,KAAK+1B,OAAS,IAAI8nO,GAKlB79P,KAAKwuD,MAAQ,IAAIuxL,QACG,IAATge,EAAsB,CACjBsP,GAAmBoB,aAC/BzuQ,KAAKoyS,oBAAsB,IAAIz0C,GAAO,EAAG39P,KAAKoyS,oBAAoBplS,GAClEhN,KAAK66R,QAAU/8B,OAEVC,aAAgBJ,IACrB39P,KAAKpC,YAAYkgQ,GACjB99P,KAAKoyS,oBAAsBr0C,IAG3B/9P,KAAKpC,YAAYkgQ,GACjB99P,KAAK+1B,OAASgoO,GA0GtB,OAvGAz/P,OAAOuJ,eAAeqqS,EAAe72S,UAAW,QAM5CqM,IAAK,WACD,OAAO1H,KAAK6vE,YAEhBxoE,IAAK,SAAUrK,GACXgD,KAAK6vE,WAAa7yE,EAClBgD,KAAKqyS,uBAET1qS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqqS,EAAe72S,UAAW,QAK5CqM,IAAK,WACD,OAAO1H,KAAK66R,SAEhBxzR,IAAK,SAAUrK,GACXgD,KAAK66R,QAAU79R,EACfgD,KAAKqyS,uBAET1qS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqqS,EAAe72S,UAAW,QAK5CqM,IAAK,WACD,OAAO1H,KAAKmyS,iBAEhB9qS,IAAK,SAAUrK,GACXgD,KAAKmyS,gBAAkBn1S,EACvBgD,KAAKqyS,uBAET1qS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqqS,EAAe72S,UAAW,YAK5CqM,IAAK,WACD,OAAO1H,KAAKoyS,qBAEhB/qS,IAAK,SAAUrK,GACXgD,KAAKoyS,oBAAsBp1S,EAC3BgD,KAAKqyS,uBAET1qS,YAAY,EACZC,cAAc,IAMlBsqS,EAAe72S,UAAUsnS,iBAAmB,SAAU9iI,EAAM1sI,GAExD,OADc0sI,EAAKo1H,QACJ0N,iBAAiB9iI,EAAM1sI,IAM1C++Q,EAAe72S,UAAUg3S,oBAAsB,WAG3C,OAFAryS,KAAKwuD,MAAM5F,QACX5oD,KAAKwuD,MAAMpqD,IAAI,IAAIgzP,GAAmBp3P,KAAK66R,UACnC76R,KAAKmyS,iBACT,KAAK3F,GAAmBtsN,SACpB,IAAIoyN,EAAatyS,KAAK66R,QAClB1nQ,EAAQ,IAAIwqO,GAChBxqO,EAAQnzB,KAAK2iS,iBAAiB2P,EAAYtyS,KAAKoyS,qBAC/CpyS,KAAKwuD,MAAMpqD,IAAI,IAAIswO,GAAQ10O,KAAKq9O,qBAAqBzC,MACrD56O,KAAKwuD,MAAMpqD,IAAI,IAAIm7O,GAAUpsN,EAAMpmB,IACnC/M,KAAKwuD,MAAMpqD,IAAI,IAAIm7O,GAAUpsN,EAAMnmB,IACnChN,KAAKwuD,MAAMpqD,IAAI,IAAIm7O,GAAUv/O,KAAK6vE,aAClC,MACJ,KAAK28N,GAAmB+F,UACpBvyS,KAAKwuD,MAAMpqD,IAAI,IAAIswO,GAAQ10O,KAAKq9O,qBAAqBpnO,QAIjE3X,OAAOuJ,eAAeqqS,EAAe72S,UAAW,WAK5CqM,IAAK,WAED,OADA1H,KAAKqyS,sBACEryS,KAAKwuD,OAEhB7mD,YAAY,EACZC,cAAc,IAEXsqS,KErKPrmN,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAkBxCsmN,GAAiC,SAAU9lN,GAE3C,SAAS8lN,EAAgB7lB,EAAcx9P,EAAMzqB,GACzC,IAAI3E,EAAQ2sF,EAAOprF,KAAKtB,KAAMmvB,IAASnvB,KAiBvC,OAZAD,EAAM61R,aAAc,EAKpB71R,EAAMwrR,WAAY,OACJpwR,IAAVuJ,EACA3E,EAAM0yS,mBAAmB9lB,EAAcjoR,GAGvC3E,EAAM0yS,mBAAmB9lB,EAAclxB,GAAaqJ,SAEjD/kQ,EAgFX,OAnGA8rF,GAAU2mN,EAAiB9lN,GAqB3B8lN,EAAgBn3S,UAAUwqQ,aAAe,SAAU92O,GAG/C,OAFa,GAIjByjR,EAAgBn3S,UAAU8nQ,aAAe,SAAU98M,EAAM7pB,GAMrD,OALY,GAUhBg2Q,EAAgBn3S,UAAUiwR,aAAe,SAAUpkC,EAAU1qN,GACzD,IAAIk2Q,EAAY1yS,KAAK+2R,aAAazL,aAAapkC,GAG/C,OADAwrD,GAAc,KADH1yS,KAAKglQ,QAAQrkP,QAAQ6b,IAKpCg2Q,EAAgBn3S,UAAUo3S,mBAAqB,SAAU9lB,EAAcjoR,GACnE1E,KAAK+2R,aAAe,IAAIrK,GAAoBC,EAAc3sR,KAAKmvB,MAC/DnvB,KAAK2yS,eAAejuS,GACpB1E,KAAKgrS,uBAETwH,EAAgBn3S,UAAUs3S,eAAiB,SAAUjuS,GACjD,IAAIkuS,EAAS5yS,KAAK+2R,aAAazJ,WAAWpS,SACD,IAApCx2Q,EAAQ+2P,GAAa4J,aACtButC,GAAUn3C,GAAa4J,WAEc,IAApC3gQ,EAAQ+2P,GAAa2J,aACtBwtC,GAAUn3C,GAAa2J,WAE3BplQ,KAAK+kQ,SAAS6tC,IAElBJ,EAAgBn3S,UAAU2vS,oBAAsB,WAC5C,IAAI6H,EAAY,KACZhrC,GAAYirC,cAEZD,EAAYhrC,GAAY5iE,MAAMjmC,OAAOh/J,OAEzC,IAAIgmQ,EAAY,KAEhB,GAAkB,OAAd6sC,QAAoC13S,IAAd03S,EAAyB,CAE/C7sC,EAAY6sC,EAAU/sC,eACtB,IAAId,EAAU6tC,EAAU7tC,SACxBA,EAAUA,EAAQ3lQ,SACV8vB,KAAOnvB,KAAKmvB,KACpBnvB,KAAKglQ,QAAUA,EACfhlQ,KAAK+2R,aAAe8b,EAAU9b,kBAGb,MAAb8b,IACI7yS,KAAK+2R,wBAAwBrK,KAC7B1sR,KAAK+2R,aAAagc,QAAU/yS,KAAK41R,aAErC51R,KAAK+2R,aAAalM,kBAClB7kB,EAAYhmQ,KAAK+2R,aAAajxB,eAC9B9lQ,KAAKglQ,QAAUhlQ,KAAK+2R,aAAa/xB,SAGzChlQ,KAAKglQ,QAAQguC,eAAgB,EAC7BhzS,KAAK+lQ,aAAaC,IAMtBwsC,EAAgBn3S,UAAUu0R,WAAa,SAAU9gQ,GAC7C,IAAIqmP,EAAen1Q,KAAK+2R,aACJ,MAAhB5hB,GACAA,EAAaya,WAAW9gQ,IAGzB0jR,GACT3tC,IC5GEouC,GAAwC,WAExC,SAASA,EAAuBn1C,EAAMC,EAAMC,EAAMC,EAAM2D,GAChD9D,aAAgBD,SAA8B,IAATE,EACrC/9P,KAAKpC,YAAYkgQ,EAAK/wP,EAAG+wP,EAAK9wP,EAAG8wP,EAAK9nP,MAAO8nP,EAAK/nP,QAE7C+nP,aAAgBD,IAAcE,aAAgBqhC,SAA2B,IAATphC,EACrEh+P,KAAKpC,YAAYkgQ,EAAK/wP,EAAG+wP,EAAK9wP,EAAG8wP,EAAK9nP,MAAO8nP,EAAK/nP,OAAQgoP,GAErDD,aAAgBH,IAAUI,aAAgBH,SAAyB,IAATI,EAC/Dh+P,KAAKpC,YAAYkgQ,EAAK/wP,EAAG+wP,EAAK9wP,EAAG+wP,EAAK/nP,MAAO+nP,EAAKhoP,QAE7C+nP,aAAgBH,IAAUI,aAAgBH,IAASI,aAAgBohC,SAA2B,IAATnhC,EAC1Fj+P,KAAKpC,YAAYkgQ,EAAK/wP,EAAG+wP,EAAK9wP,EAAG+wP,EAAK/nP,MAAO+nP,EAAKhoP,OAAQioP,GAErDF,aAAgBF,SAAyB,IAATG,EACrC/9P,KAAKpC,YAAYkgQ,EAAK9nP,MAAO8nP,EAAK/nP,QAEb,iBAAT+nP,GAAqC,iBAATC,QAAqC,IAATC,EACpEh+P,KAAKpC,YAAY,EAAG,EAAGkgQ,EAAMC,GAER,iBAATD,GAAqC,iBAATC,GAAqBC,aAAgBohC,SAA2B,IAATnhC,EAC/Fj+P,KAAKpC,YAAY,EAAG,EAAGkgQ,EAAMC,EAAMC,IAGnCh+P,KAAK+M,EAAI+wP,EACT99P,KAAKgN,EAAI+wP,EACT/9P,KAAKqxS,YAAc,IAAI7U,GAAYx+B,EAAMC,IAilBjD,OAvkBA3/P,OAAOuJ,eAAeorS,EAAuB53S,UAAW,QAMpDqM,IAAK,WACD,OAAO1H,KAAKkzS,WAEhB7rS,IAAK,SAAUrK,GAEXgD,KAAKkzS,UAAYl2S,EAEjBgD,KAAKmzS,kBAGTxrS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeorS,EAAuB53S,UAAW,aAKpDqM,IAAK,WACD,OAAO1H,KAAKozS,gBAEhB/rS,IAAK,SAAUrK,GAEXgD,KAAKqzS,aAAar2S,IAGtB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeorS,EAAuB53S,UAAW,cAKpDqM,IAAK,WACD,OAAO1H,KAAKszS,cAEhBjsS,IAAK,SAAUrK,GAEXgD,KAAKszS,aAAet2S,GAGxB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeorS,EAAuB53S,UAAW,cAKpDqM,IAAK,WACD,OAAQ1H,KAAKszS,cAEjBjsS,IAAK,SAAUrK,GACXgD,KAAKszS,cAAgBt2S,GAEzB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeorS,EAAuB53S,UAAW,YAKpDqM,IAAK,WACD,OAAO1H,KAAK4zE,iBAEhBvsE,IAAK,SAAUrK,GACPgD,KAAK0G,OAAS+mQ,GAAahiE,OAC3BzrM,KAAK4zE,gBAAkB52E,IAM/B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeorS,EAAuB53S,UAAW,KAKpDqM,IAAK,WAED,YAD6C,IAAzB1H,KAAK4zE,gBAAmC5zE,KAAK4zE,gBAAgB7mE,EAAI,GAGzF1F,IAAK,SAAUrK,GACPgD,KAAK0G,OAAS+mQ,GAAahiE,OAC3BzrM,KAAK4zE,gBAAgB7mE,EAAI/P,IAMjC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeorS,EAAuB53S,UAAW,KAKpDqM,IAAK,WAED,YAD6C,IAAzB1H,KAAK4zE,gBAAmC5zE,KAAK4zE,gBAAgB5mE,EAAI,GAGzF3F,IAAK,SAAUrK,GACPgD,KAAK0G,OAAS+mQ,GAAahiE,OAC3BzrM,KAAK4zE,gBAAgB5mE,EAAIhQ,IAMjC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeorS,EAAuB53S,UAAW,QAKpDqM,IAAK,WACD,OAAO1H,KAAKiP,SAASkgB,MAEzB9nB,IAAK,SAAUrK,GACPgD,KAAK0G,OAAS+mQ,GAAahiE,MAC3BzrM,KAAKiP,SAASgpD,MAAMj7D,IAG5B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeorS,EAAuB53S,UAAW,SAKpDqM,IAAK,WACD,OAAO1H,KAAKiP,SAAS+G,OAEzB3O,IAAK,SAAUrK,GACX,GAAIgD,KAAKiP,SAAS+G,QAAUhZ,GAASgD,KAAK0G,OAAS+mQ,GAAahiE,KAAM,CAClE,IAAIt8K,EAAOnvB,KAAKiP,SAASkgB,KACzBA,EAAKnZ,MAAQhZ,EACbgD,KAAKiP,SAASgpD,MAAM9oC,KAG5BxnB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeorS,EAAuB53S,UAAW,UAKpDqM,IAAK,WACD,OAAO1H,KAAKiP,SAAS8G,QAEzB1O,IAAK,SAAUrK,GACX,GAAIgD,KAAKiP,SAAS8G,SAAW/Y,GAASgD,KAAK0G,OAAS+mQ,GAAahiE,KAAM,CACnE,IAAIt8K,EAAOnvB,KAAKiP,SAASkgB,KACzBA,EAAKpZ,OAAS/Y,EACdgD,KAAKiP,SAASgpD,MAAM9oC,KAG5BxnB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeorS,EAAuB53S,UAAW,YAKpDqM,IAAK,WACD,OAAO1H,KAAKiP,SAAS0lQ,UAEzBhtQ,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeorS,EAAuB53S,UAAW,YAKpDqM,IAAK,WAID,OAAO1H,KAAKqxS,aAEhB1pS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeorS,EAAuB53S,UAAW,QAKpDqM,IAAK,WACD,OAAO1H,KAAKuzS,cAEhBlsS,IAAK,SAAUrK,GACXgD,KAAKwzS,cAAcx2S,GACnBgD,KAAKuzS,aAAev2S,GAExB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeorS,EAAuB53S,UAAW,UAKpDqM,IAAK,WACD,OAAO,IAAIm2P,GAAW,IAAIF,GAAO39P,KAAK+M,EAAG/M,KAAKgN,GAAIhN,KAAKmvB,OAE3D9nB,IAAK,SAAUrK,GACPgD,KAAK0G,OAAS+mQ,GAAahiE,OAC3BzrM,KAAKk5B,SAAW,IAAIykO,GAAO3gQ,EAAM+P,EAAG/P,EAAMgQ,GAC1ChN,KAAKmvB,KAAO,IAAIyuO,GAAM5gQ,EAAMgZ,MAAOhZ,EAAM+Y,UAGjDpO,YAAY,EACZC,cAAc,IAMlBqrS,EAAuB53S,UAAUm4S,cAAgB,SAAU9sS,GACvD,GAAIA,IAAS+mQ,GAAahiE,KAAM,CAC5B,OAAQ/kM,GACJ,KAAK+mQ,GAAaxN,IACdjgQ,KAAKyzS,KAAOlmC,GAAatN,IACzB,MACJ,KAAKwN,GAAa6mB,OACdt0R,KAAKyzS,KAAOlmC,GAAa+mB,OACzB,MACJ,KAAK7mB,GAAa4qB,KACdr4R,KAAKyzS,KAAOlmC,GAAa8qB,KACzB,MACJ,KAAK5qB,GAAa0mB,MACdn0R,KAAKyzS,KAAOlmC,GAAa4mB,MAGjCn0R,KAAKmzS,mBAObF,EAAuB53S,UAAU83S,eAAiB,WAC9CnzS,KAAKgoD,UAAYwlN,GAAkB/hE,MAMvCwnG,EAAuB53S,UAAUg4S,aAAe,SAAUrrP,GACtD,GAAIhoD,KAAKyzS,OAASlmC,GAAa9hE,KAC3BzrM,KAAKozS,eAAiBprP,MAErB,CAED,IAAI0rP,GAAW,EACf,OAAQ1zS,KAAKyzS,MACT,KAAKlmC,GAAa8qB,KACdqb,EAAY1rP,IAAcwlN,GAAkBmmC,SAAW3rP,IAAcwlN,GAAkBomC,YACnF5rP,IAAcwlN,GAAkBqmC,YAAc7rP,IAAcwlN,GAAkB/hE,KAClF,MACJ,KAAK8hE,GAAatN,IACdyzC,EAAY1rP,IAAcwlN,GAAkBmmC,SAAW3rP,IAAcwlN,GAAkBsmC,WACnF9rP,IAAcwlN,GAAkBumC,UAAY/rP,IAAcwlN,GAAkB/hE,KAChF,MACJ,KAAK8hE,GAAa4mB,MACduf,EAAY1rP,IAAcwlN,GAAkBumC,UAAY/rP,IAAcwlN,GAAkBwmC,aACpFhsP,IAAcwlN,GAAkBymC,aAAejsP,IAAcwlN,GAAkB/hE,KACnF,MACJ,KAAK8hE,GAAa+mB,OACdof,EAAY1rP,IAAcwlN,GAAkBqmC,YAAc7rP,IAAcwlN,GAAkB0mC,cACnFlsP,IAAcwlN,GAAkBymC,aAAejsP,IAAcwlN,GAAkB/hE,KACtF,MACJ,KAAK8hE,GAAawiB,KACd2jB,EAAY1rP,IAAcwlN,GAAkB2mC,cAAgBnsP,IAAcwlN,GAAkB/hE,KAGhGioG,IACA1zS,KAAKozS,eAAiBprP,KAQlCirP,EAAuB53S,UAAUu6Q,KAAO,SAAU1qM,EAAO1qE,GACrD,IAAIq/J,EAAO30F,EAAM20F,KACb9pI,EAAS/1B,KAAK8vS,gBAAgBjwI,EAAMr/J,IACtB,IAAdu1B,EAAOhpB,IACPgpB,EAAOhpB,EAAI,GAEfm+D,EAAMypM,SAASod,gBAAgB/xR,KAAKiP,SAAU,IAAI0uP,GAAO5nO,EAAOhpB,EAAGgpB,EAAO/oB,GAAI,IAAI4wP,GAAM7nO,EAAO/f,MAAO+f,EAAOhgB,UAMjHk9R,EAAuB53S,UAAUy0S,gBAAkB,SAAUjwI,EAAMr/J,GAC/D,IAAIzB,EAASiB,KAAK+1B,OAOlB,OANI/1B,KAAKozS,iBAAmB5lC,GAAkB/hE,KAC1C1sM,EAASiB,KAAKo0S,mBAAmBv0I,EAAMr/J,GAElCR,KAAKkzS,YAAc3lC,GAAa9hE,OACrC1sM,EAASiB,KAAKq0S,cAAcx0I,EAAMr/J,IAE/BzB,GAMXk0S,EAAuB53S,UAAU+4S,mBAAqB,SAAUv0I,EAAMr/J,GACrDR,KAAK+1B,OAOlB,OANI/1B,KAAK0G,OAAS+mQ,GAAahiE,KAClBzrM,KAAKs0S,yBAAyBz0I,EAAMr/J,GAGpCR,KAAKu0S,2BAA2B10I,EAAMr/J,IAQvDyyS,EAAuB53S,UAAUi5S,yBAA2B,SAAUz0I,EAAMr/J,GACxE,IAAIu1B,EAAS/1B,KAAK+1B,OAEdy+Q,EADa30I,EAAKo1H,QACQwG,gBAAgBj7R,EAAUq/J,GAAM,GAC1D9yJ,EAAI/M,KAAK+M,EACTC,EAAIhN,KAAKgN,EACb,OAAQhN,KAAKozS,gBACT,KAAK5lC,GAAkBmmC,QACnB5mS,EAAI,EACJC,EAAI,EACJ,MACJ,KAAKwgQ,GAAkBsmC,UACnB/mS,GAAKynS,EAAax+R,MAAQhW,KAAKgW,OAAS,EACxChJ,EAAI,EACJ,MACJ,KAAKwgQ,GAAkBumC,SACnBhnS,EAAIynS,EAAax+R,MAAQhW,KAAKgW,MAC9BhJ,EAAI,EACJ,MACJ,KAAKwgQ,GAAkBomC,WACnB7mS,EAAI,EACJC,GAAKwnS,EAAaz+R,OAAS/V,KAAK+V,QAAU,EAC1C,MACJ,KAAKy3P,GAAkB2mC,aACnBpnS,GAAKynS,EAAax+R,MAAQhW,KAAKgW,OAAS,EACxChJ,GAAKwnS,EAAaz+R,OAAS/V,KAAK+V,QAAU,EAC1C,MACJ,KAAKy3P,GAAkBwmC,YACnBjnS,EAAIynS,EAAax+R,MAAQhW,KAAKgW,MAC9BhJ,GAAKwnS,EAAaz+R,OAAS/V,KAAK+V,QAAU,EAC1C,MACJ,KAAKy3P,GAAkBqmC,WACnB9mS,EAAI,EACJC,EAAIwnS,EAAaz+R,OAAS/V,KAAK+V,OAC/B,MACJ,KAAKy3P,GAAkB0mC,aACnBnnS,GAAKynS,EAAax+R,MAAQhW,KAAKgW,OAAS,EACxChJ,EAAIwnS,EAAaz+R,OAAS/V,KAAK+V,OAC/B,MACJ,KAAKy3P,GAAkBymC,YACnBlnS,EAAIynS,EAAax+R,MAAQhW,KAAKgW,MAC9BhJ,EAAIwnS,EAAaz+R,OAAS/V,KAAK+V,OAKvC,OAFAggB,EAAOhpB,EAAIA,EACXgpB,EAAO/oB,EAAIA,EACJ+oB,GAMXk9Q,EAAuB53S,UAAUk5S,2BAA6B,SAAU10I,EAAMr/J,GAC1E,IAAIzB,EAASiB,KAAK+1B,OACdk/P,EAAUp1H,EAAKo1H,QACfuf,EAAevf,EAAQwG,gBAAgBj7R,EAAUq/J,GAAM,GACvD9yJ,EAAI/M,KAAK+M,EACTC,EAAIhN,KAAKgN,EACb,OAAQhN,KAAKozS,gBACT,KAAK5lC,GAAkBmmC,QACf3zS,KAAK0G,OAAS+mQ,GAAa4qB,MAC3BtrR,GAAKynS,EAAaznS,EAClBC,EAAI,GAEChN,KAAK0G,OAAS+mQ,GAAaxN,MAChClzP,GAAKynS,EAAaznS,EAClBC,GAAKwnS,EAAaxnS,GAEtB,MACJ,KAAKwgQ,GAAkBsmC,UACnB/mS,GAAKynS,EAAax+R,MAAQhW,KAAKgW,OAAS,EACxChJ,GAAKwnS,EAAaxnS,EAClB,MACJ,KAAKwgQ,GAAkBumC,SACf/zS,KAAK0G,OAAS+mQ,GAAa0mB,OAC3BpnR,EAAIynS,EAAax+R,MAAQi/Q,EAAQ+O,oBAAoBxjS,EAAUq/J,GAAM,GAAS7/J,KAAKgW,MACnFhJ,EAAI,GAEChN,KAAK0G,OAAS+mQ,GAAaxN,MAChClzP,EAAIynS,EAAax+R,MAAQi/Q,EAAQ+O,oBAAoBxjS,EAAUq/J,GAAM,GAAS7/J,KAAKgW,MACnFhJ,GAAKwnS,EAAaxnS,GAEtB,MACJ,KAAKwgQ,GAAkBomC,WACnB7mS,GAAKynS,EAAaznS,EAClBC,GAAKwnS,EAAaz+R,OAAS/V,KAAK+V,QAAU,EAC1C,MACJ,KAAKy3P,GAAkB2mC,aACnBpnS,GAAKynS,EAAax+R,MAAQhW,KAAKgW,OAAS,EACxChJ,GAAKwnS,EAAaz+R,OAAS/V,KAAK+V,QAAU,EAC1C,MACJ,KAAKy3P,GAAkBwmC,YACnBjnS,EAAIynS,EAAax+R,MAAQi/Q,EAAQ+O,oBAAoBxjS,EAAUq/J,GAAM,GAAS7/J,KAAKgW,MACnFhJ,GAAKwnS,EAAaz+R,OAAS/V,KAAK+V,QAAU,EAC1C,MACJ,KAAKy3P,GAAkBqmC,WACf7zS,KAAK0G,OAAS+mQ,GAAa4qB,MAC3BtrR,GAAKynS,EAAaznS,EAClBC,EAAIwnS,EAAaz+R,OAAS/V,KAAK+V,QAE1B/V,KAAK0G,OAAS+mQ,GAAa6mB,SAChCvnR,GAAKynS,EAAaznS,EAClBC,EAAIwnS,EAAaz+R,OAASk/Q,EAAQgP,sBAAsBzjS,EAAUq/J,GAAM,GAAS7/J,KAAK+V,QAE1F,MACJ,KAAKy3P,GAAkB0mC,aACnBnnS,GAAKynS,EAAax+R,MAAQhW,KAAKgW,OAAS,EACxChJ,EAAIwnS,EAAaz+R,OAASk/Q,EAAQgP,sBAAsBzjS,EAAUq/J,GAAM,GAAS7/J,KAAK+V,OACtF,MACJ,KAAKy3P,GAAkBymC,YACfj0S,KAAK0G,OAAS+mQ,GAAa0mB,OAC3BpnR,EAAIynS,EAAax+R,MAAQi/Q,EAAQ+O,oBAAoBxjS,EAAUq/J,GAAM,GAAS7/J,KAAKgW,MACnFhJ,EAAIwnS,EAAaz+R,OAAS/V,KAAK+V,QAE1B/V,KAAK0G,OAAS+mQ,GAAa6mB,SAChCvnR,EAAIynS,EAAax+R,MAAQi/Q,EAAQ+O,oBAAoBxjS,EAAUq/J,GAAM,GAAS7/J,KAAKgW,MACnFhJ,EAAIwnS,EAAaz+R,OAASk/Q,EAAQgP,sBAAsBzjS,EAAUq/J,GAAM,GAAS7/J,KAAK+V,QAMlG,OAFAhX,EAAOgO,EAAIA,EACXhO,EAAOiO,EAAIA,EACJjO,GAMXk0S,EAAuB53S,UAAUg5S,cAAgB,SAAUx0I,EAAMr/J,GAChDR,KAAK+1B,OAOlB,OANI/1B,KAAK0G,OAAS+mQ,GAAahiE,KAClBzrM,KAAKy0S,oBAAoB50I,EAAMr/J,GAG/BR,KAAK00S,sBAAsB70I,EAAMr/J,IAQlDyyS,EAAuB53S,UAAUo5S,oBAAsB,SAAU50I,EAAMr/J,GACtDR,KAAK+1B,OAAlB,IAEIy+Q,EADU30I,EAAKo1H,QACQwG,gBAAgBj7R,EAAUq/J,GAAM,GACvD9yJ,EAAI/M,KAAK+M,EACTC,EAAIhN,KAAKgN,EACTgJ,EAAQhW,KAAKgW,MACbD,EAAS/V,KAAK+V,OAClB,OAAQ/V,KAAKkzS,WACT,KAAK3lC,GAAa8qB,KACdtrR,EAAI,EACJC,EAAI,EACJgJ,EAAQhW,KAAKgW,MACbD,EAASy+R,EAAaz+R,OACtB,MACJ,KAAKw3P,GAAatN,IACdlzP,EAAI,EACJC,EAAI,EACJgJ,EAAQw+R,EAAax+R,MACrBD,EAAS/V,KAAK+V,OACd,MACJ,KAAKw3P,GAAa4mB,MACdpnR,EAAIynS,EAAax+R,MAAQhW,KAAKgW,MAC9BhJ,EAAI,EACJgJ,EAAQhW,KAAKgW,MACbD,EAASy+R,EAAaz+R,OACtB,MACJ,KAAKw3P,GAAa+mB,OACdvnR,EAAI,EACJC,EAAIwnS,EAAaz+R,OAAS/V,KAAK+V,OAC/BC,EAAQw+R,EAAax+R,MACrBD,EAAS/V,KAAK+V,OACd,MACJ,KAAKw3P,GAAawiB,KACdhjR,EAAI,EACJA,EAAI,EACJiJ,EAAQw+R,EAAax+R,MACrBD,EAASy+R,EAAaz+R,OAI9B,OADS,IAAI8nP,GAAW9wP,EAAGC,EAAGgJ,EAAOD,IAOzCk9R,EAAuB53S,UAAUq5S,sBAAwB,SAAU70I,EAAMr/J,GACxDR,KAAK+1B,OAAlB,IACIk/P,EAAUp1H,EAAKo1H,QACfuf,EAAevf,EAAQwG,gBAAgBj7R,EAAUq/J,GAAM,GACvDpmH,EAAaw7O,EAAQ9qO,aAAa6kN,gBAClCjiQ,EAAI/M,KAAK+M,EACTC,EAAIhN,KAAKgN,EACTgJ,EAAQhW,KAAKgW,MACbD,EAAS/V,KAAK+V,OAClB,OAAQ/V,KAAKkzS,WACT,KAAK3lC,GAAa8qB,KACdtrR,GAAKynS,EAAaznS,EAClBC,EAAI,EACJgJ,EAAQhW,KAAKgW,MACbD,EAASy+R,EAAaz+R,OACtB,MACJ,KAAKw3P,GAAatN,IACdlzP,GAAKynS,EAAaznS,EAClBC,GAAKwnS,EAAaxnS,EAClBgJ,EAAQyjC,EAAWzjC,MACnBD,EAAS/V,KAAK+V,OACVy+R,EAAaz+R,OAAS,IACtB/I,GAAKwnS,EAAaxnS,EAAIysC,EAAW1jC,QAErC,MACJ,KAAKw3P,GAAa4mB,MACdpnR,EAAIynS,EAAax+R,MAAQi/Q,EAAQ+O,oBAAoBxjS,EAAUq/J,GAAM,GAAS7/J,KAAKgW,MACnFhJ,EAAI,EACJgJ,EAAQhW,KAAKgW,MACbD,EAASy+R,EAAaz+R,OACtB,MACJ,KAAKw3P,GAAa+mB,OACdvnR,GAAKynS,EAAaznS,EAClBC,EAAIwnS,EAAaz+R,OAASk/Q,EAAQgP,sBAAsBzjS,EAAUq/J,GAAM,GAAS7/J,KAAK+V,OACtFC,EAAQyjC,EAAWzjC,MACnBD,EAAS/V,KAAK+V,OACVy+R,EAAaz+R,OAAS,IACtB/I,GAAKysC,EAAW1jC,QAEpB,MACJ,KAAKw3P,GAAawiB,KACdhjR,EAAI,EACJA,EAAI,EACJiJ,EAAQw+R,EAAax+R,MACrBD,EAASy+R,EAAaz+R,OAI9B,OADS,IAAI8nP,GAAW9wP,EAAGC,EAAGgJ,EAAOD,IAGlCk9R,KC9mBP0B,GAA4B,WAM5B,SAASA,IACL,IAAIC,EAAuB,IAAInjC,GAAO,IAAI/V,GAAS,EAAG,EAAG,IACzDk5C,EAAqBC,UAAY15C,GAAa0W,MAC9C,IAAIijC,EAAwB,IAAIrjC,GAAO,IAAI/V,GAAS,EAAG,EAAG,IAC1Do5C,EAAsBD,UAAY15C,GAAa0W,MAC/C,IAAIkjC,EAAsB,IAAItjC,GAAO,IAAI/V,GAAS,EAAG,EAAG,IACxDq5C,EAAoBF,UAAY15C,GAAa0W,MAC7C,IAAImjC,EAAyB,IAAIvjC,GAAO,IAAI/V,GAAS,EAAG,EAAG,IAC3Ds5C,EAAuBH,UAAY15C,GAAa0W,MAChD7xQ,KAAKi1S,QAAUL,EACf50S,KAAKk1S,SAAWJ,EAChB90S,KAAKm1S,OAASJ,EACd/0S,KAAKo1S,UAAYJ,EA4FrB,OA1FA12S,OAAOuJ,eAAe8sS,EAAWt5S,UAAW,QAMxCqM,IAAK,WACD,OAAO1H,KAAKi1S,SAEhB5tS,IAAK,SAAUrK,GACXgD,KAAKi1S,QAAUj4S,GAEnB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8sS,EAAWt5S,UAAW,SAKxCqM,IAAK,WACD,OAAO1H,KAAKk1S,UAEhB7tS,IAAK,SAAUrK,GACXgD,KAAKk1S,SAAWl4S,GAEpB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8sS,EAAWt5S,UAAW,OAKxCqM,IAAK,WACD,OAAO1H,KAAKm1S,QAEhB9tS,IAAK,SAAUrK,GACXgD,KAAKm1S,OAASn4S,GAElB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8sS,EAAWt5S,UAAW,UAKxCqM,IAAK,WACD,OAAO1H,KAAKo1S,WAEhB/tS,IAAK,SAAUrK,GACXgD,KAAKo1S,UAAYp4S,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8sS,EAAWt5S,UAAW,OAKxCgM,IAAK,SAAUrK,GACXgD,KAAKi1S,QAAUj1S,KAAKk1S,SAAWl1S,KAAKm1S,OAASn1S,KAAKo1S,UAAYp4S,GAElE2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8sS,EAAWt5S,UAAW,SAKxCqM,IAAK,WACD,OAAS1H,KAAKi1S,UAAYj1S,KAAKk1S,UAAcl1S,KAAKi1S,UAAYj1S,KAAKm1S,QAAYn1S,KAAKi1S,UAAYj1S,KAAKo1S,WAEzGztS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8sS,EAAY,WAK9BjtS,IAAK,WACD,OAAO,IAAIitS,GAEfhtS,YAAY,EACZC,cAAc,IAEX+sS,KAGPU,GAA6B,WAC7B,SAASA,EAAY7oS,EAAMC,EAAOC,EAAKC,QACf,IAATH,GAEPxM,KAAKs1S,QAAUt1S,KAAKu1S,SAAW,KAE/Bv1S,KAAK2M,OAAS3M,KAAKw1S,OAAS,KAG5Bx1S,KAAKs1S,QAAU9oS,EACfxM,KAAKu1S,SAAW9oS,EAChBzM,KAAKw1S,OAAS9oS,EACd1M,KAAKy1S,UAAY9oS,GAuEzB,OApEArO,OAAOuJ,eAAewtS,EAAYh6S,UAAW,QAMzCqM,IAAK,WACD,OAAO1H,KAAKs1S,SAEhBjuS,IAAK,SAAUrK,GACXgD,KAAKs1S,QAAUt4S,GAEnB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewtS,EAAYh6S,UAAW,SAKzCqM,IAAK,WACD,OAAO1H,KAAKu1S,UAEhBluS,IAAK,SAAUrK,GACXgD,KAAKu1S,SAAWv4S,GAEpB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewtS,EAAYh6S,UAAW,OAKzCqM,IAAK,WACD,OAAO1H,KAAKw1S,QAEhBnuS,IAAK,SAAUrK,GACXgD,KAAKw1S,OAASx4S,GAElB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewtS,EAAYh6S,UAAW,UAKzCqM,IAAK,WACD,OAAO1H,KAAKy1S,WAEhBpuS,IAAK,SAAUrK,GACXgD,KAAKy1S,UAAYz4S,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewtS,EAAYh6S,UAAW,OAKzCgM,IAAK,SAAUrK,GACXgD,KAAKs1S,QAAUt1S,KAAKu1S,SAAWv1S,KAAKw1S,OAASx1S,KAAKy1S,UAAYz4S,GAElE2K,YAAY,EACZC,cAAc,IAEXytS,MHxMX,SAAWpD,GAKPA,EAAsBA,EAA+B,QAAI,GAAK,UAK9DA,EAAsBA,EAA8B,OAAI,GAAK,SAVjE,CAWGA,KAA0BA,QIhB7B,IAyXWyD,GAzXP7pN,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCypN,GAAkC,WAClC,SAASA,KA2DT,OAzDAr3S,OAAOuJ,eAAe8tS,EAAiBt6S,UAAW,mBAM9CqM,IAAK,WACD,OAAO1H,KAAK41S,qBAEhBvuS,IAAK,SAAUrK,GACXgD,KAAK41S,oBAAsB54S,GAE/B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8tS,EAAiBt6S,UAAW,aAK9CqM,IAAK,WACD,OAAO1H,KAAK61S,eAEhBxuS,IAAK,SAAUrK,GACXgD,KAAK61S,cAAgB74S,GAEzB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8tS,EAAiBt6S,UAAW,WAK9CqM,IAAK,WACD,OAAO1H,KAAK81S,aAEhBzuS,IAAK,SAAUrK,GACXgD,KAAK81S,YAAc94S,GAEvB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8tS,EAAiBt6S,UAAW,QAK9CqM,IAAK,WACD,OAAO1H,KAAK+1S,UAEhB1uS,IAAK,SAAUrK,GACXgD,KAAK+1S,SAAW/4S,GAEpB2K,YAAY,EACZC,cAAc,IAEX+tS,KAMPK,GAA8B,SAAUtpN,GAOxC,SAASspN,IACL,IAAIj2S,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KAIjC,OAHAD,EAAMk2S,uBAAyBhE,GAAsBiE,QACrDn2S,EAAMo2S,0BAA2B,EACjCp2S,EAAMq2S,2BAA6BV,GAA0BW,SACtDt2S,EAqFX,OAhGA8rF,GAAUmqN,EAActpN,GAaxBpuF,OAAOuJ,eAAemuS,EAAa36S,UAAW,eAM1CqM,IAAK,WAID,YAHoC,IAAzB1H,KAAKs2S,kBACZt2S,KAAKs2S,gBAAkB,GAEpBt2S,KAAKs2S,iBAEhBjvS,IAAK,SAAUrK,GACXgD,KAAKs2S,gBAAkBt5S,GAE3B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemuS,EAAa36S,UAAW,0BAK1CqM,IAAK,WACD,OAAO1H,KAAKo2S,4BAEhB/uS,IAAK,SAAUrK,GACXgD,KAAKo2S,2BAA6Bp5S,GAEtC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemuS,EAAa36S,UAAW,2BAK1CqM,IAAK,WACD,OAAO1H,KAAKm2S,0BAEhB9uS,IAAK,SAAUrK,GACXgD,KAAKm2S,yBAA2Bn5S,GAEpC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemuS,EAAa36S,UAAW,eAK1CqM,IAAK,WAID,YAHoC,IAAzB1H,KAAKu2S,kBACZv2S,KAAKu2S,gBAAkB,IAAIlB,IAExBr1S,KAAKu2S,iBAEhBlvS,IAAK,SAAUrK,QACyB,IAAzBgD,KAAKu2S,iBACZv2S,KAAKu2S,gBAAkB,IAAIlB,GAC3Br1S,KAAKu2S,gBAAkBv5S,GAGvBgD,KAAKu2S,gBAAkBv5S,GAG/B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemuS,EAAa36S,UAAW,sBAK1CqM,IAAK,WACD,OAAO1H,KAAKi2S,wBAEhB5uS,IAAK,SAAUrK,GACXgD,KAAKi2S,uBAAyBj5S,GAElC2K,YAAY,EACZC,cAAc,IAEXouS,GACTL,IAKEa,GAAkC,SAAU9pN,GAM5C,SAAS8pN,IACL,IAAIz2S,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KAMjC,OADAD,EAAM02S,gBAAkB9B,GAAW+B,QAC5B32S,EAgDX,OA5DA8rF,GAAU2qN,EAAkB9pN,GAc5BpuF,OAAOuJ,eAAe2uS,EAAiBn7S,UAAW,gBAM9CqM,IAAK,WACD,OAAO1H,KAAKw8B,QAEhBn1B,IAAK,SAAUrK,GACXgD,KAAKw8B,OAASx/B,GAElB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2uS,EAAiBn7S,UAAW,WAK9CqM,IAAK,WACD,OAAO1H,KAAKy2S,iBAEhBpvS,IAAK,SAAUrK,GACXgD,KAAKy2S,gBAAkBz5S,GAE3B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2uS,EAAiBn7S,UAAW,eAK9CqM,IAAK,WACD,OAAO1H,KAAKu2S,iBAEhBlvS,IAAK,SAAUrK,GACiB,MAAxBgD,KAAKu2S,sBAA2D,IAAzBv2S,KAAKu2S,kBAC5Cv2S,KAAKu2S,gBAAkB,IAAIlB,IAE/Br1S,KAAKu2S,gBAAkBv5S,GAE3B2K,YAAY,EACZC,cAAc,IAEX4uS,GACTb,IAKEgB,GAAiC,WAMjC,SAASA,KAiHT,OA9GAr4S,OAAOuJ,eAAe8uS,EAAgBt7S,UAAW,mBAU7CqM,IAAK,WACD,OAAO1H,KAAK42S,wBAEhBjvS,YAAY,EACZC,cAAc,IAElB+uS,EAAgBt7S,UAAUw7S,mBAAqB,SAAU75S,GAErD,GADAgD,KAAK42S,uBAAyB55S,OACH,IAAhBgD,KAAKM,OACZ,IAAK,IAAInE,EAAI,EAAGA,EAAI6D,KAAKM,OAAO+iE,MAAMpkD,MAAO9iB,IACzC6D,KAAKM,OAAO+iE,MAAMyzO,QAAQ36S,GAAGuI,MAAMqyS,gBAAkB/5S,GAIjEsB,OAAOuJ,eAAe8uS,EAAgBt7S,UAAW,aAK7CqM,IAAK,WACD,OAAO1H,KAAKg3S,kBAEhBrvS,YAAY,EACZC,cAAc,IAElB+uS,EAAgBt7S,UAAU47S,aAAe,SAAUj6S,GAE/C,GADAgD,KAAKg3S,iBAAmBh6S,OACG,IAAhBgD,KAAKM,OACZ,IAAK,IAAInE,EAAI,EAAGA,EAAI6D,KAAKM,OAAO+iE,MAAMpkD,MAAO9iB,IACzC6D,KAAKM,OAAO+iE,MAAMyzO,QAAQ36S,GAAGuI,MAAMgnS,UAAY1uS,GAI3DsB,OAAOuJ,eAAe8uS,EAAgBt7S,UAAW,WAK7CqM,IAAK,WACD,OAAO1H,KAAKk3S,gBAEhBvvS,YAAY,EACZC,cAAc,IAElB+uS,EAAgBt7S,UAAU87S,WAAa,SAAUn6S,GAE7C,GADAgD,KAAKk3S,eAAiBl6S,OACK,IAAhBgD,KAAKM,OACZ,IAAK,IAAInE,EAAI,EAAGA,EAAI6D,KAAKM,OAAO+iE,MAAMpkD,MAAO9iB,IACzC6D,KAAKM,OAAO+iE,MAAMyzO,QAAQ36S,GAAGuI,MAAM0yS,QAAUp6S,GAIzDsB,OAAOuJ,eAAe8uS,EAAgBt7S,UAAW,QAK7CqM,IAAK,WACD,OAAO1H,KAAKq3S,aAEhB1vS,YAAY,EACZC,cAAc,IAElB+uS,EAAgBt7S,UAAUw8O,QAAU,SAAU76O,GAE1C,GADAgD,KAAKq3S,YAAcr6S,OACQ,IAAhBgD,KAAKM,OACZ,IAAK,IAAInE,EAAI,EAAGA,EAAI6D,KAAKM,OAAO+iE,MAAMpkD,MAAO9iB,IACzC6D,KAAKM,OAAO+iE,MAAMyzO,QAAQ36S,GAAGuI,MAAMqqB,KAAO/xB,GAItDsB,OAAOuJ,eAAe8uS,EAAgBt7S,UAAW,UAK7CqM,IAAK,WAID,YAHkC,IAAvB1H,KAAKs3S,eACZt3S,KAAKu3S,UAAU,IAAI5C,IAEhB30S,KAAKs3S,eAEhB3vS,YAAY,EACZC,cAAc,IAElB+uS,EAAgBt7S,UAAUk8S,UAAY,SAAUv6S,GAE5C,GADAgD,KAAKs3S,cAAgBt6S,OACM,IAAhBgD,KAAKM,OACZ,IAAK,IAAInE,EAAI,EAAGA,EAAI6D,KAAKM,OAAO+iE,MAAMpkD,MAAO9iB,IACzC6D,KAAKM,OAAO+iE,MAAMyzO,QAAQ36S,GAAGuI,MAAM8yS,QAAUx6S,GAQzD25S,EAAgBt7S,UAAUo8S,UAAY,SAAUn3S,GAC5CN,KAAKM,OAASA,GAEXq2S,MAQX,SAAWjB,GAKPA,EAA0BA,EAAoC,SAAI,GAAK,WAKvEA,EAA0BA,EAAoC,SAAI,GAAK,WAV3E,CAWGA,KAA8BA,QCtXjC,IvNXWgC,GuNWPC,GAA6B,WAC7B,SAASA,EAAY11O,GAMjBjiE,KAAK43S,UAAY,EAMjB53S,KAAK63S,WAAa,EAMlB73S,KAAK83S,OAAQ,EAMb93S,KAAK+3S,uBAAyB,OACX,IAAR91O,GACPjiE,KAAKg4S,YAAc,EACnBh4S,KAAKi4S,QAAU,IAGfj4S,KAAKpC,cACLoC,KAAKk4S,QAAUj2O,GAyjBvB,OAtjBA3jE,OAAOuJ,eAAe8vS,EAAYt8S,UAAW,uBAEzCqM,IAAK,WACD,OAAO1H,KAAKm4S,6BAEhB9wS,IAAK,SAAUrK,GACXgD,KAAKm4S,4BAA8Bn7S,GAEvC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8vS,EAAYt8S,UAAW,sBACzCqM,IAAK,WACD,OAAO1H,KAAKo4S,4BAEhB/wS,IAAK,SAAUrK,GACXgD,KAAKo4S,2BAA6Bp7S,GAEtC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8vS,EAAYt8S,UAAW,oBACzCqM,IAAK,WACD,OAAO1H,KAAKq4S,0BAEhBhxS,IAAK,SAAUrK,GACXgD,KAAKq4S,yBAA2Br7S,GAEpC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8vS,EAAYt8S,UAAW,mBACzCqM,IAAK,WACD,OAAO1H,KAAKs4S,yBAEhBjxS,IAAK,SAAUrK,GACXgD,KAAKs4S,wBAA0Bt7S,GAEnC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8vS,EAAYt8S,UAAW,mBAKzCqM,IAAK,WACD,OAAO1H,KAAKu4S,WAEhBlxS,IAAK,SAAUrK,GACXgD,KAAKu4S,UAAYv7S,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8vS,EAAYt8S,UAAW,gBAKzCqM,IAAK,WAID,OAHmB,MAAf1H,KAAKw8B,SACLx8B,KAAKw8B,OAAS,IAAIojO,IAEf5/P,KAAKw8B,QAEhBn1B,IAAK,SAAUrK,GACXgD,KAAKw8B,OAASx/B,GAElB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8vS,EAAYt8S,UAAW,OAKzCqM,IAAK,WACD,OAAO1H,KAAKk4S,SAEhB7wS,IAAK,SAAUrK,GACXgD,KAAKk4S,QAAUl7S,GAEnB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8vS,EAAYt8S,UAAW,SAKzCqM,IAAK,WACD,OAAO1H,KAAKw4S,aAEhBnxS,IAAK,SAAUrK,GACXgD,KAAKw4S,YAAcx7S,GAEvB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8vS,EAAYt8S,UAAW,WAKzCqM,IAAK,WACD,OAAO1H,KAAKg4S,aAEhB3wS,IAAK,SAAUrK,GACX,GAAIA,EAAQ,EACR,MAAM,IAAI4D,MAAM,kFAGhBZ,KAAKg4S,YAAch7S,EACnBgD,KAAKiiE,IAAIw2O,eAAgB,GAGjC9wS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8vS,EAAYt8S,UAAW,SAKzCqM,IAAK,WAID,OAHsB,MAAlB1H,KAAK04S,YACL14S,KAAK04S,UAAY,IAAIlC,IAElBx2S,KAAK04S,WAEhBrxS,IAAK,SAAUrK,GACXgD,KAAK04S,UAAY17S,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8vS,EAAYt8S,UAAW,UAKzCqM,IAAK,WAID,OAHwB,IAApB1H,KAAK63S,aACL73S,KAAK63S,WAAa73S,KAAK24S,iBAEpB34S,KAAK63S,YAEhBxwS,IAAK,SAAUrK,GACXgD,KAAK63S,WAAa76S,GAEtB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8vS,EAAYt8S,UAAW,cAKzCqM,IAAK,WACD,OAAO1H,KAAKi4S,SAEhB5wS,IAAK,SAAUrK,GACX,GAAIA,EAAQ,EACR,MAAM4D,MAAM,8DAGZZ,KAAKi4S,QAAUj7S,EACfgD,KAAKiiE,IAAI22O,kBAAmB,GAGpCjxS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8vS,EAAYt8S,UAAW,SAKzCqM,IAAK,WAID,OAHuB,IAAnB1H,KAAK43S,WAAmB53S,KAAKiiE,IAAIyB,KAAKm1O,cACtC74S,KAAK43S,UAAY53S,KAAK84S,gBAEnB94S,KAAK43S,WAEhBvwS,IAAK,SAAUrK,GACXgD,KAAK43S,UAAY56S,GAErB2K,YAAY,EACZC,cAAc,IAOlB+vS,EAAYt8S,UAAUy9S,aAAe,WAGjC,IAAI9iS,EAAQ,EACR+iS,EAAW,IAAIr3C,GACnB,GAAgC,iBAArB1hQ,KAAKw4S,YAA0B,CAGtCxiS,GADU+iS,EAAStvP,OAAOzpD,KAAKw4S,YAAax4S,KAAKg5S,cAAeh5S,KAAK21Q,aAAc,IAAI/X,GAAM,EAAG,IAAI,EAAO,IAAIA,GAAM,EAAG,IAC3GnkN,WAAWzjC,MACxBA,GAA4E,GAAlEhW,KAAK0E,MAAM8yS,QAAQhrS,KAAKwJ,MAAQhW,KAAK0E,MAAM8yS,QAAQ/qS,MAAMuJ,YAElE,GAAIhW,KAAKw4S,uBAAuB5+B,IAAY55Q,KAAKw4S,uBAAuBh+B,GACzExkQ,GAAShW,KAAKw4S,YAAYxiS,WAEzB,GAAIhW,KAAKw4S,uBAAuB/J,GAAgB,CACjD,IAAIwK,EAAUj5S,KAAKw4S,YAGnBxiS,GAFa+iS,EAAStvP,OAAOwvP,EAAQnqR,KAAMmqR,EAAQlqR,KAAMkqR,EAAQtjC,aAAc,IAAI/X,GAAM,EAAG,IAAI,EAAO,IAAIA,GAAM,EAAG,IAEpGnkN,WAAWzjC,MAC3BA,GAA4E,GAAlEhW,KAAK0E,MAAM8yS,QAAQhrS,KAAKwJ,MAAQhW,KAAK0E,MAAM8yS,QAAQ/qS,MAAMuJ,OAIvE,OAFAA,GAAUhW,KAAKiiE,IAAIyB,KAAKh/D,MAAMw0S,YAAY1sS,KAAOxM,KAAKiiE,IAAIyB,KAAKh/D,MAAMw0S,YAAYzsS,MACjFuJ,GAAShW,KAAKiiE,IAAIyB,KAAKh/D,MAAMy0S,aAOjCxB,EAAYt8S,UAAU+9S,mBAAqB,SAAUzkC,EAAU5+O,GAC3D,IAAIghR,EAAkB/2S,KAAKq5S,qBACJ,MAAnBtC,GACApiC,EAASrwO,cAAcyyQ,EAAiBhhR,EAAOhpB,EAAGgpB,EAAO/oB,EAAG+oB,EAAO/f,MAAO+f,EAAOhgB,SAQzF4hS,EAAYt8S,UAAUi+S,wBAA0B,SAAUvjR,GAEtD,IAAIwjR,EAAe,IAAI17C,GAAW9nO,EAAOhpB,EAAGgpB,EAAO/oB,EAAG+oB,EAAO/f,MAAO+f,EAAOhgB,QAuB3E,YAtBsC,IAA3B/V,KAAK0E,MAAMw0S,aAAyD,MAA1Bl5S,KAAK0E,MAAMw0S,aAC5DK,EAAaxsS,GAAK/M,KAAKk4S,QAAQx0O,KAAKh/D,MAAMw0S,YAAY1sS,KAAOxM,KAAK04S,UAAUlB,QAAQhrS,KAAKwJ,MACzFujS,EAAavsS,GAAKhN,KAAKk4S,QAAQx0O,KAAKh/D,MAAMw0S,YAAYxsS,IAAM1M,KAAK04S,UAAUlB,QAAQ9qS,IAAIsJ,MACvFujS,EAAavjS,OAAUhW,KAAKk4S,QAAQx0O,KAAKh/D,MAAMw0S,YAAYzsS,MAAQzM,KAAKk4S,QAAQx0O,KAAKh/D,MAAMw0S,YAAY1sS,KACvG+sS,EAAavjS,OAAUhW,KAAK04S,UAAUlB,QAAQhrS,KAAKwJ,MAAQhW,KAAK04S,UAAUlB,QAAQ/qS,MAAMuJ,MACxFujS,EAAaxjS,QAAW/V,KAAKk4S,QAAQx0O,KAAKh/D,MAAMw0S,YAAYvsS,OAAS3M,KAAKk4S,QAAQx0O,KAAKh/D,MAAMw0S,YAAYxsS,IACzG6sS,EAAaxjS,QAAW/V,KAAK04S,UAAUlB,QAAQ9qS,IAAIsJ,MAAQhW,KAAK04S,UAAUlB,QAAQ7qS,OAAOqJ,MACpE,IAAjBhW,KAAKw5S,UACLD,EAAavjS,OAAUhW,KAAK0E,MAAM8yS,QAAQhrS,KAAU,SAIxD+sS,EAAaxsS,GAAK/M,KAAK0E,MAAMw0S,YAAY1sS,KAAOxM,KAAK04S,UAAUlB,QAAQhrS,KAAKwJ,MAC5EujS,EAAavsS,GAAKhN,KAAK0E,MAAMw0S,YAAYxsS,IAAM1M,KAAK04S,UAAUlB,QAAQ9qS,IAAIsJ,MAC1EujS,EAAavjS,OAAUhW,KAAK0E,MAAMw0S,YAAYzsS,MAAQzM,KAAK0E,MAAMw0S,YAAY1sS,KAC7E+sS,EAAavjS,OAAUhW,KAAK04S,UAAUlB,QAAQhrS,KAAKwJ,MAAQhW,KAAK04S,UAAUlB,QAAQ/qS,MAAMuJ,MACxFujS,EAAaxjS,QAAW/V,KAAK0E,MAAMw0S,YAAYvsS,OAAS3M,KAAK0E,MAAMw0S,YAAYxsS,IAC/E6sS,EAAaxjS,QAAW/V,KAAK04S,UAAUlB,QAAQ9qS,IAAIsJ,MAAQhW,KAAK04S,UAAUlB,QAAQ7qS,OAAOqJ,MACpE,IAAjBhW,KAAKw5S,UACLD,EAAavjS,OAAUhW,KAAK0E,MAAM8yS,QAAQhrS,KAAU,QAGrD+sS,GAMX5B,EAAYt8S,UAAUu6Q,KAAO,SAAUjB,EAAU5+O,EAAQ0jR,GACrD,IACI16S,EAAS,KACb,GAAIiB,KAAKm4S,6BAA+Bn4S,KAAKo4S,2BAA4B,CACrE,IAAIp4S,KAAKm4S,8BAA+Bn4S,KAAKiiE,IAAIyB,KAAKh/D,MAAMg1S,wBAMxD,OAAO36S,EALP,GAAKiB,KAAKiiE,IAAI03O,iBAAmB,GAAM35S,KAAKiiE,IAAIoB,MAAM9kE,QAAQyB,OAASA,KAAKiiE,IAAI03O,iBAAmB,GAAqC,GAA7B35S,KAAKiiE,IAAI03O,kBAAyB35S,KAAKm4S,4BAC9I,OAAOp5S,EAQnBg3B,EAAS/1B,KAAK45S,sBAAsB7jR,EAAQ4+O,GAC5C,IAAIyiC,EAAUp3S,KAAK65S,aACfnO,EAAY1rS,KAAK85S,oBACE,IAAZ1C,QAAgD,IAAd1L,IACzCA,EAAY,IAAIptC,GAAc,IAAI5C,GAAS,EAAG,EAAG,KAErD,IAAI3sO,EAAO/uB,KAAKg5S,cACZe,EAAY/5S,KAAKg6S,kBACjBC,EAAkBj6S,KAAKs5S,wBAAwBvjR,GAEnD,GADA/1B,KAAKo5S,mBAAmBzkC,EAAU5+O,GACF,iBAArB/1B,KAAKw4S,aAAsD,iBAAnBx4S,KAAKu4S,UAAwB,CAC5E,IAAIl/Q,OAAO,EACXA,EAA0B,KAAnBr5B,KAAKu4S,UAAmBv4S,KAAKu4S,UAAYv4S,KAAKw4S,YACrD7jC,EAAS0d,WAAWh5P,EAAMtK,EAAMqoR,EAAS1L,EAAWuO,EAAgBltS,EAAGktS,EAAgBjtS,EAAGitS,EAAgBjkS,MAAOikS,EAAgBlkS,OAAQgkS,GACzIh7S,EAAS41Q,EAASs6B,wBAEjB,GAAIjvS,KAAKw4S,uBAAuB5+B,IAAY55Q,KAAKw4S,uBAAuBh+B,GAAW,CACpF,IAAI0/B,OAAc,EAEdA,EADAl6S,KAAKw4S,YAAYxiS,OAASikS,EAAgBjkS,MAC5B,IAAI6nP,GAAWo8C,EAAgBltS,EAAGktS,EAAgBjtS,EAAGhN,KAAKw4S,YAAYxiS,MAAOikS,EAAgBlkS,QAG7FkkS,EAElBtlC,EAAS1jL,UAAUjxF,KAAKw4S,YAAa0B,EAAYntS,EAAGmtS,EAAYltS,EAAGktS,EAAYlkS,MAAOkkS,EAAYnkS,aAE7F/V,KAAKw4S,uBAAuB/J,IACjCzuS,KAAKw4S,YAAY5iC,KAAKjB,EAAS5kC,YAAakqE,GAKhD,OAH0B,MAAtBj6S,KAAK0E,MAAM8yS,SACXx3S,KAAKm6S,gBAAgBxlC,EAAU5+O,GAE5Bh3B,GAOX44S,EAAYt8S,UAAU8+S,gBAAkB,SAAUxlC,EAAU5+O,GACpD/1B,KAAKiiE,IAAIyB,KAAKh/D,MAAM01S,qBAAuBnI,GAAsBoI,SACjEtkR,EAAOhpB,GAAK/M,KAAK0E,MAAM8yS,QAAQhrS,KAAKwJ,MACpC+f,EAAO/oB,GAAKhN,KAAK0E,MAAM8yS,QAAQ9qS,IAAIsJ,MACnC+f,EAAO/f,OAAShW,KAAK0E,MAAM8yS,QAAQ/qS,MAAMuJ,MACzC+f,EAAOhgB,QAAU/V,KAAK0E,MAAM8yS,QAAQ7qS,OAAOqJ,OAE/C,IAAIskS,EAAK,IAAI38C,GAAO5nO,EAAOhpB,EAAGgpB,EAAO/oB,EAAI+oB,EAAOhgB,QAC5CwkS,EAAK,IAAI58C,GAAO5nO,EAAOhpB,EAAGgpB,EAAO/oB,GACjC8lQ,EAAM9yQ,KAAK04S,UAAUlB,QAAQhrS,KAC7BxM,KAAK04S,UAAUlB,QAAQhrS,KAAKqoS,YAAc15C,GAAa0W,QACvDiB,EAAID,QAAU3X,GAAWs/C,QAG7B7lC,EAAS5lL,SAAS+jL,EAAKwnC,EAAIC,GAC3BD,EAAK,IAAI38C,GAAO5nO,EAAOhpB,EAAIgpB,EAAO/f,MAAO+f,EAAO/oB,GAChDutS,EAAK,IAAI58C,GAAO5nO,EAAOhpB,EAAIgpB,EAAO/f,MAAO+f,EAAO/oB,EAAI+oB,EAAOhgB,QAC3D+8P,EAAM9yQ,KAAK04S,UAAUlB,QAAQ/qS,MACxBspB,EAAOhpB,EAAIgpB,EAAO/f,MAAU2+P,EAAS5S,WAAW/rP,MAAS88P,EAAI98P,MAAQ,IACtEskS,EAAK,IAAI38C,GAAOgX,EAAS5S,WAAW/rP,MAAS88P,EAAI98P,MAAQ,EAAI+f,EAAO/oB,GACpEutS,EAAK,IAAI58C,GAAOgX,EAAS5S,WAAW/rP,MAAS88P,EAAI98P,MAAQ,EAAI+f,EAAO/oB,EAAI+oB,EAAOhgB,SAE/E/V,KAAK04S,UAAUlB,QAAQ/qS,MAAMooS,YAAc15C,GAAa0W,QACxDiB,EAAID,QAAU3X,GAAWs/C,QAE7B7lC,EAAS5lL,SAAS+jL,EAAKwnC,EAAIC,GAC3BD,EAAK,IAAI38C,GAAO5nO,EAAOhpB,EAAGgpB,EAAO/oB,GACjCutS,EAAK,IAAI58C,GAAO5nO,EAAOhpB,EAAIgpB,EAAO/f,MAAO+f,EAAO/oB,GAChD8lQ,EAAM9yQ,KAAK04S,UAAUlB,QAAQ9qS,IACzB1M,KAAK04S,UAAUlB,QAAQ9qS,IAAImoS,YAAc15C,GAAa0W,QACtDiB,EAAID,QAAU3X,GAAWs/C,QAE7B7lC,EAAS5lL,SAAS+jL,EAAKwnC,EAAIC,GAC3BD,EAAK,IAAI38C,GAAO5nO,EAAOhpB,EAAIgpB,EAAO/f,MAAO+f,EAAO/oB,EAAI+oB,EAAOhgB,QAC3DwkS,EAAK,IAAI58C,GAAO5nO,EAAOhpB,EAAGgpB,EAAO/oB,EAAI+oB,EAAOhgB,QAC5C+8P,EAAM9yQ,KAAK04S,UAAUlB,QAAQ7qS,OAKzB3M,KAAK04S,UAAUlB,QAAQ7qS,OAAOkoS,YAAc15C,GAAa0W,QACzDiB,EAAID,QAAU3X,GAAWs/C,QAE7B7lC,EAAS5lL,SAAS+jL,EAAKwnC,EAAIC,IAO/B5C,EAAYt8S,UAAUu+S,sBAAwB,SAAU7jR,EAAQsH,GAC5D,IAAI7Q,GAAW,EACX2sR,EAAcn5S,KAAKiiE,IAAIyB,KAAKh/D,MAAMy0S,YAClCA,EAAc,IACdpjR,EAAS,IAAI8nO,GAAW9nO,EAAOhpB,EAAIosS,EAAapjR,EAAO/oB,EAAImsS,EAAapjR,EAAO/f,MAAQmjS,EAAapjR,EAAOhgB,OAASojS,IAExH,IAAIsB,EAAkBz6S,KAAKiiE,IAAIoB,MAAM9kE,QAAQyB,MAC7C,GAAIA,KAAK06S,WAAa,EAAG,CAGrB,IAAK,IAFDx2O,EAAOlkE,KAAK06S,WACZ/3N,EAAa,EACRxmF,EAAIs+S,EAAiBt+S,EAAIs+S,EAAkBv2O,EAAM/nE,IAAK,CAC3D,GAAI6D,KAAKiiE,IAAIyB,KAAKh/D,MAAMg1S,wBAAyB,CAC7C,IACIiB,EAAY36S,KAAKiiE,IAAIyB,KAAKv0C,KAAKnZ,MAAQqnB,EAAE0kO,WAAW/rP,MAAQhW,KAAKiiE,IAAIyB,KAAKv0C,KAAKnZ,MAAQqnB,EAAE0kO,WAAW/rP,MAOxG,IANIhW,KAAKiiE,IAAIyB,KAAKv0C,KAAKnZ,MAAQqnB,EAAE0kO,WAAW/rP,MAChC+f,EAAOhpB,EAAI41E,EAAa3iF,KAAKiiE,IAAIyB,KAAKlE,QAAQo7O,UAAUz+S,GAAG6Z,MAG3D2sE,EAAa3iF,KAAKiiE,IAAIyB,KAAKlE,QAAQo7O,UAAUz+S,GAAG6Z,OAEhD2kS,EACR,MAGRh4N,GAAc3iF,KAAKiiE,IAAIyB,KAAKlE,QAAQo7O,UAAUz+S,GAAG6Z,MAErD2sE,GAAc3iF,KAAKiiE,IAAIyB,KAAKh/D,MAAMy0S,YAClCpjR,EAAO/f,MAAQ2sE,EAEnB,GAAI3iF,KAAKw5S,QAAU,GAAKx5S,KAAKiiE,IAAIw2O,cAAe,CACxCv0O,EAAOlkE,KAAKw5S,QAAhB,IACIqB,EAAkB76S,KAAKiiE,IAAIyB,KAAK46J,KAAKw8E,cAAcv8S,QAAQyB,KAAKiiE,MAC5C,GAApB44O,IAEwB,IADxBA,EAAkB76S,KAAKiiE,IAAIyB,KAAK0iB,QAAQ7nF,QAAQyB,KAAKiiE,QAEjDz1C,GAAW,GAKd,IAFDypL,EAAc,EAClB,IACS95M,EAAI0+S,EAAiB1+S,EAAI0+S,EAAkB32O,EAAM/nE,IAAK,CAC3D85M,GAAgBzpL,EAAWxsB,KAAKiiE,IAAIyB,KAAK0iB,QAAQ20N,UAAU5+S,GAAG4Z,OAAS/V,KAAKiiE,IAAIyB,KAAK46J,KAAK08E,OAAO7+S,GAAG4Z,OACpG,IAAIksD,EAAMjiE,KAAKiiE,IAAIyB,KAAK46J,KAAK08E,OAAO7+S,GACrB6D,KAAKiiE,IAAIyB,KAAK46J,KAAKw8E,cAAcv8S,QAAQ0jE,GAE5CjiE,KAAKiiE,IAAIoB,MAAM9kE,QAAQyB,MACvCi2M,GAAej2M,KAAKiiE,IAAIyB,KAAKh/D,MAAMy0S,YAMnCpjR,EAAOhgB,OAASkgM,EAEXj2M,KAAKiiE,IAAIg5O,mBACVllR,EAAOhgB,OAASkgM,GAGxB,OAAOlgL,GAOX4hR,EAAYt8S,UAAU29S,YAAc,WAChC,YAA+B,IAApBh5S,KAAK0E,MAAMqqB,MAA2C,MAAnB/uB,KAAK0E,MAAMqqB,KAC9C/uB,KAAK0E,MAAMqqB,UAEkB,IAAxB/uB,KAAKiiE,IAAIv9D,MAAMqqB,MAA+C,MAAvB/uB,KAAKiiE,IAAIv9D,MAAMqqB,KAC3D/uB,KAAKiiE,IAAIv9D,MAAMqqB,UAEmB,IAA7B/uB,KAAKiiE,IAAIyB,KAAKh/D,MAAMqqB,MAAoD,MAA5B/uB,KAAKiiE,IAAIyB,KAAKh/D,MAAMqqB,KACrE/uB,KAAKiiE,IAAIyB,KAAKh/D,MAAMqqB,KAGpB84O,GAAYmO,aAO3B2hC,EAAYt8S,UAAUy+S,aAAe,WACjC,YAAoC,IAAzB95S,KAAK0E,MAAMgnS,WAAqD,MAAxB1rS,KAAK0E,MAAMgnS,UACnD1rS,KAAK0E,MAAMgnS,eAEuB,IAA7B1rS,KAAKiiE,IAAIv9D,MAAMgnS,WAAyD,MAA5B1rS,KAAKiiE,IAAIv9D,MAAMgnS,UAChE1rS,KAAKiiE,IAAIv9D,MAAMgnS,UAGf1rS,KAAKiiE,IAAIyB,KAAKh/D,MAAMgnS,WAOnCiM,EAAYt8S,UAAUw+S,WAAa,WAC/B,YAAkC,IAAvB75S,KAAK0E,MAAM0yS,SAAiD,MAAtBp3S,KAAK0E,MAAM0yS,QACjDp3S,KAAK0E,MAAM0yS,aAEqB,IAA3Bp3S,KAAKiiE,IAAIv9D,MAAM0yS,SAAqD,MAA1Bp3S,KAAKiiE,IAAIv9D,MAAM0yS,QAC9Dp3S,KAAKiiE,IAAIv9D,MAAM0yS,QAGfp3S,KAAKiiE,IAAIyB,KAAKh/D,MAAM0yS,SAOnCO,EAAYt8S,UAAUg+S,mBAAqB,WACvC,YAA0C,IAA/Br5S,KAAK0E,MAAMqyS,iBAAiE,MAA9B/2S,KAAK0E,MAAMqyS,gBACzD/2S,KAAK0E,MAAMqyS,qBAE6B,IAAnC/2S,KAAKiiE,IAAIv9D,MAAMqyS,iBAAqE,MAAlC/2S,KAAKiiE,IAAIv9D,MAAMqyS,gBACtE/2S,KAAKiiE,IAAIv9D,MAAMqyS,gBAGf/2S,KAAKiiE,IAAIyB,KAAKh/D,MAAMqyS,iBAOnCY,EAAYt8S,UAAU2+S,gBAAkB,WACpC,YAAuC,IAA5Bh6S,KAAK0E,MAAMixQ,cAA2D,MAA3B31Q,KAAK0E,MAAMixQ,aACtD31Q,KAAK0E,MAAMixQ,aAGX31Q,KAAK21Q,cAOpBgiC,EAAYt8S,UAAUs9S,cAAgB,WAGlC,IAAI3iS,EAAQhW,KAAKk7S,iBAEa,MAA1Bl7S,KAAK0E,MAAMw0S,kBAAyD,IAA3Bl5S,KAAK0E,MAAMw0S,aACpDljS,GAAUhW,KAAKk4S,QAAQx0O,KAAKh/D,MAAMw0S,YAAYzsS,MAAQzM,KAAKk4S,QAAQx0O,KAAKh/D,MAAMw0S,YAAY1sS,KAC1FwJ,GAAUhW,KAAK0E,MAAM8yS,QAAQhrS,KAAKwJ,MAAQhW,KAAK0E,MAAM8yS,QAAQ/qS,MAAMuJ,QAGnEA,GAAUhW,KAAK0E,MAAMw0S,YAAYzsS,MAAQzM,KAAK0E,MAAMw0S,YAAY1sS,KAChEwJ,GAAUhW,KAAK0E,MAAM8yS,QAAQhrS,KAAKwJ,MAAQhW,KAAK0E,MAAM8yS,QAAQ/qS,MAAMuJ,OAEvE,IAAID,EAAS,EACTgjS,EAAW,IAAIr3C,GACnB,GAAgC,iBAArB1hQ,KAAKw4S,aAA4D,iBAAzBx4S,KAAK60R,gBAA8B,CAClF,IAAI5hJ,EAAejzI,KAAKw4S,YAIxBziS,GAFUgjS,EAAStvP,OAAOwpF,EAAcjzI,KAAKg5S,cAAeh5S,KAAK21Q,aAAc,IAAI/X,GAAM5nP,EAAO,IAAI,EAAO,IAAI4nP,GAAM,EAAG,IAE1GnkN,WAAW1jC,YAExB,GAAI/V,KAAKw4S,uBAAuB5+B,IAAY55Q,KAAKw4S,uBAAuBh+B,GACzEzkQ,GAAU/V,KAAKw4S,YAAYziS,YAE1B,GAAI/V,KAAKw4S,uBAAuB/J,GAAgB,CACjD,IAAIwK,EAAUj5S,KAAKw4S,YAInBziS,GAFUgjS,EAAStvP,OAAOwvP,EAAQnqR,KAAMmqR,EAAQlqR,KAAMkqR,EAAQtjC,aAAc,IAAI/X,GAAM5nP,EAAO,IAAI,EAAO,IAAI4nP,GAAM,EAAG,IAEvGnkN,WAAW1jC,OAW7B,OATAA,GAA6E,GAAlE/V,KAAK0E,MAAM8yS,QAAQ9qS,IAAIsJ,MAAQhW,KAAK0E,MAAM8yS,QAAQ7qS,OAAOqJ,OAEtC,MAA1BhW,KAAK0E,MAAMw0S,kBAAyD,IAA3Bl5S,KAAK0E,MAAMw0S,YACpDnjS,GAAW/V,KAAKiiE,IAAIyB,KAAKh/D,MAAMw0S,YAAYxsS,IAAM1M,KAAKiiE,IAAIyB,KAAKh/D,MAAMw0S,YAAYvsS,OAGjFoJ,GAAW/V,KAAK0E,MAAMw0S,YAAYxsS,IAAM1M,KAAK0E,MAAMw0S,YAAYvsS,OAEnEoJ,GAAU/V,KAAKiiE,IAAIyB,KAAKh/D,MAAMy0S,aAOlCxB,EAAYt8S,UAAU6/S,eAAiB,WAInC,IAAK,IAHDC,EAAYn7S,KAAKiiE,IAAIoB,MAAM9kE,QAAQyB,MACnC06S,EAAa16S,KAAK06S,WAClB1kS,EAAQ,EACH7Z,EAAI,EAAGA,EAAIu+S,EAAYv+S,IAC5B6Z,GAAShW,KAAKiiE,IAAIyB,KAAKlE,QAAQo7O,UAAUO,EAAYh/S,GAAG6Z,MAE5D,OAAOA,GAEJ2hS,KAQPyD,GAAuC,WAMvC,SAASA,EAAsBn5O,GAK3BjiE,KAAKqjE,SACLrjE,KAAKk4S,QAAUj2O,EA0CnB,OAnCAm5O,EAAsB//S,UAAUy7S,QAAU,SAAU7kS,GAChD,GAAIA,EAAQ,GAAKA,GAASjS,KAAKif,MAC3B,MAAM,IAAIre,MAAM,4BAEpB,OAAOZ,KAAKqjE,MAAMpxD,IAEtB3T,OAAOuJ,eAAeuzS,EAAsB//S,UAAW,SAKnDqM,IAAK,WACD,OAAO1H,KAAKqjE,MAAM5mE,QAEtBkL,YAAY,EACZC,cAAc,IAElBwzS,EAAsB//S,UAAU+I,IAAM,SAAUogE,GAC5C,QAAoB,IAATA,EAAsB,CAC7B,IAAI62O,EAAW,IAAI1D,GAEnB,OADA33S,KAAKoE,IAAIi3S,GACF72O,EAGPA,EAAKvC,IAAMjiE,KAAKk4S,QAChBl4S,KAAKqjE,MAAM7+D,KAAKggE,IAOxB42O,EAAsB//S,UAAUkD,QAAU,SAAUimE,GAChD,OAAOxkE,KAAKqjE,MAAM9kE,QAAQimE,IAEvB42O,KCjqBPE,GAA+B,WAM/B,SAASA,EAAc53O,GAMnB1jE,KAAKu7S,YAAc,EACnBv7S,KAAK0jE,KAAOA,EAkChB,OAhCAplE,OAAOuJ,eAAeyzS,EAAcjgT,UAAW,SAK3CqM,IAAK,WACD,OAAO1H,KAAKu7S,aAEhBl0S,IAAK,SAAUrK,GACXgD,KAAKw7S,eAAgB,EACrBx7S,KAAKu7S,YAAcv+S,GAEvB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyzS,EAAcjgT,UAAW,UAK3CqM,IAAK,WAID,OAHyB,MAArB1H,KAAK21Q,eACL31Q,KAAK21Q,aAAe,IAAI/V,IAErB5/P,KAAK21Q,cAEhBtuQ,IAAK,SAAUrK,GACXgD,KAAK21Q,aAAe34Q,GAExB2K,YAAY,EACZC,cAAc,IAEX0zS,KAQPG,GAAyC,WAOzC,SAASA,EAAwB/3O,GAK7B1jE,KAAK07S,mBAKL17S,KAAKu7S,YAAc,EACnBv7S,KAAK0jE,KAAOA,EACZ1jE,KAAK07S,mBA0HT,OAnHAD,EAAwBpgT,UAAU+I,IAAM,SAAU6a,GAI9C,IAAK,IAAI9iB,EAAI,EAAGA,EAAI8iB,EAAO9iB,IAAK,CAC5B6D,KAAK07S,gBAAgBl3S,KAAK,IAAI82S,GAAct7S,KAAK0jE,OACjD,IAAK,IAAIzxD,EAAQ,EAAGA,EAAQjS,KAAK0jE,KAAK46J,KAAKr/M,MAAOhN,IAAS,CACvD,IAAIgwD,EAAMjiE,KAAK0jE,KAAK46J,KAAK08E,OAAO/oS,GAC5BuyD,EAAO,IAAImzO,GACfnzO,EAAKxnE,MAAQ,GACbilE,EAAIoB,MAAMj/D,IAAIogE,MAS1BlmE,OAAOuJ,eAAe4zS,EAAwBpgT,UAAW,SAKrDqM,IAAK,WACD,OAAO1H,KAAK07S,gBAAgBj/S,QAEhCkL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4zS,EAAwBpgT,UAAW,SAKrDqM,IAAK,WAQD,OAPyB,IAArB1H,KAAKu7S,cACLv7S,KAAKu7S,YAAcv7S,KAAK27S,uBAEG,IAA3B37S,KAAK0jE,KAAKk4O,cAAsB57S,KAAKu7S,cAAgBv7S,KAAK0jE,KAAKk4O,cAAiB57S,KAAK0jE,KAAKh/D,MAAMg1S,0BAChG15S,KAAKu7S,YAAcv7S,KAAK0jE,KAAKk4O,aAC7B57S,KAAK0jE,KAAKm4O,aAAc,GAErB77S,KAAKu7S,aAEhB5zS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4zS,EAAwBpgT,UAAW,WAKrDqM,IAAK,WACD,OAAO1H,KAAK07S,iBAEhB/zS,YAAY,EACZC,cAAc,IAMlB6zS,EAAwBpgT,UAAUu/S,UAAY,SAAU3oS,GACpD,GAAIA,GAAS,GAAKA,GAASjS,KAAKw/D,QAAQ/iE,OACpC,OAAOuD,KAAKw/D,QAAQvtD,GAGpB,MAAMrR,MAAM,0CAA4CqR,IAQhEwpS,EAAwBpgT,UAAUsgT,oBAAsB,WAGpD,IAAK,IAFDh5N,EAAa,EAERxmF,EAAI,EAAG8iB,EAAQjf,KAAK07S,gBAAgBj/S,OAAQN,EAAI8iB,EAAO9iB,IAC5DwmF,GAAc3iF,KAAK07S,gBAAgBv/S,GAAG6Z,MAE1C,OAAO2sE,GAMX84N,EAAwBpgT,UAAUygT,iBAAmB,SAAUn5N,GAI3D,IAAK,IAHD8pM,KAEAsvB,EAAY/7S,KAAKif,MACZ9iB,EAAI,EAAGA,EAAI6D,KAAKif,MAAO9iB,IACxB6D,KAAK0jE,KAAKm4O,aAAel5N,GAAc,IAAM3iF,KAAK07S,gBAAgBv/S,GAAGq/S,cACrEx7S,KAAK07S,gBAAgBv/S,GAAG6Z,MAAQ,GAGhCy2Q,EAAOtwR,GAAK6D,KAAK07S,gBAAgBv/S,GAAG6Z,MAChChW,KAAK07S,gBAAgBv/S,GAAG6Z,MAAQ,GAAKhW,KAAK07S,gBAAgBv/S,GAAGq/S,eAC7D74N,GAAc3iF,KAAK07S,gBAAgBv/S,GAAG6Z,MACtC+lS,KAGAtvB,EAAOtwR,GAAK,GAIxB,IAASA,EAAI,EAAGA,EAAI6D,KAAKif,MAAO9iB,IAAK,CACjC,IAAI6Z,EAAQ2sE,EAAao5N,EACrBtvB,EAAOtwR,IAAM,IACbswR,EAAOtwR,GAAK6Z,GAGpB,OAAOy2Q,GAEJgvB,KCpMPO,GAA4B,WAM5B,SAASA,EAAWt4O,GAKhB1jE,KAAKi8S,qBAAuB,EAM5Bj8S,KAAKk8S,gBAAiB,EAMtBl8S,KAAKm8S,oBAAqB,EAC1Bn8S,KAAKo8S,QAAU14O,EA2MnB,OAzMAplE,OAAOuJ,eAAem0S,EAAW3gT,UAAW,iBAMxCqM,IAAK,WACD,OAAO1H,KAAKq8S,gBAEhBh1S,IAAK,SAAUrK,GACXgD,KAAKq8S,eAAiBr/S,GAE1B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem0S,EAAW3gT,UAAW,SAKxCqM,IAAK,WAID,OAHsB,MAAlB1H,KAAKs8S,YACLt8S,KAAKs8S,UAAY,IAAIlB,GAAsBp7S,OAExCA,KAAKs8S,WAEhB30S,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem0S,EAAW3gT,UAAW,QAKxCqM,IAAK,WACD,OAAO1H,KAAKo8S,SAEhB/0S,IAAK,SAAUrK,GACXgD,KAAKo8S,QAAUp/S,GAEnB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem0S,EAAW3gT,UAAW,SAKxCqM,IAAK,WAKD,YAJ6B,IAAlB1H,KAAKu8S,WACZv8S,KAAKu8S,SAAW,IAAI5F,GACpB32S,KAAKu8S,SAAS9E,UAAUz3S,OAErBA,KAAKu8S,UAEhBl1S,IAAK,SAAUrK,GACXgD,KAAKu8S,SAAWv/S,EAChB,IAAK,IAAIb,EAAI,EAAGA,EAAI6D,KAAKqjE,MAAMpkD,MAAO9iB,IAClC6D,KAAKqjE,MAAMyzO,QAAQ36S,GAAGuI,MAAM8yS,QAAUx6S,EAAMioC,YAClB,IAAfjoC,EAAM+xB,OACb/uB,KAAKqjE,MAAMyzO,QAAQ36S,GAAGuI,MAAMqqB,KAAO/xB,EAAM+xB,WAER,IAA1B/xB,EAAM+5S,kBACb/2S,KAAKqjE,MAAMyzO,QAAQ36S,GAAGuI,MAAMqyS,gBAAkB/5S,EAAM+5S,sBAEzB,IAApB/5S,EAAM0uS,YACb1rS,KAAKqjE,MAAMyzO,QAAQ36S,GAAGuI,MAAMgnS,UAAY1uS,EAAM0uS,gBAErB,IAAlB1uS,EAAMo6S,UACbp3S,KAAKqjE,MAAMyzO,QAAQ36S,GAAGuI,MAAM0yS,QAAUp6S,EAAMo6S,UAIxDzvS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem0S,EAAW3gT,UAAW,kBAKxCqM,IAAK,WAID,YAHuC,IAA5B1H,KAAKw8S,qBACZx8S,KAAKw8S,mBAAqB,GAEvBx8S,KAAKw8S,oBAEhBn1S,IAAK,SAAUrK,GACXgD,KAAKw8S,mBAAqBx/S,GAE9B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem0S,EAAW3gT,UAAW,oBACxCqM,IAAK,WACD,OAAO1H,KAAKi8S,sBAEhB50S,IAAK,SAAUrK,GACXgD,KAAKi8S,qBAAuBj/S,GAEhC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem0S,EAAW3gT,UAAW,UAKxCqM,IAAK,WAID,OAHK1H,KAAKk8S,iBACNl8S,KAAKuhE,UAAYvhE,KAAK24S,iBAEnB34S,KAAKuhE,WAEhBl6D,IAAK,SAAUrK,GACXgD,KAAKuhE,UAAYvkE,EACjBgD,KAAKk8S,gBAAiB,GAE1Bv0S,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem0S,EAAW3gT,UAAW,oBAKxCqM,IAAK,WACD,OAAO1H,KAAKy8S,mBAEhBp1S,IAAK,SAAUrK,GACXgD,KAAKy8S,kBAAoBz/S,GAE7B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem0S,EAAW3gT,UAAW,oBAKxCqM,IAAK,WACD,OAAO1H,KAAKm8S,oBAEhB90S,IAAK,SAAUrK,GACXgD,KAAKm8S,mBAAqBn/S,GAE9B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem0S,EAAW3gT,UAAW,YAKxCqM,IAAK,WACD,OAAO1H,KAAK0jE,KAAK46J,KAAKw8E,cAAcv8S,QAAQyB,OAEhD2H,YAAY,EACZC,cAAc,IAOlBo0S,EAAW3gT,UAAUs9S,cAAgB,WACjC,IACIp3O,EADAw2O,EAAyB,EAEzBnrP,EAAY,EAIhB2U,EAAYvhE,KAAKqjE,MAAMyzO,QAAQ,GAAG/gS,OAElC,IAAK,IAAI5Z,EAAI,EAAGA,EAAI6D,KAAKqjE,MAAMpkD,MAAO9iB,IAAK,CACvC,IAAIqoE,EAAOxkE,KAAKqjE,MAAMyzO,QAAQ36S,GAE1BqoE,EAAKuzO,uBAAyBA,IAC9BA,EAAyBvzO,EAAKuzO,wBAMlC/3S,KAAKi7S,kBAAmB,EACpBz2O,EAAKg1O,QAAU,EACX5sP,EAAY4X,EAAKzuD,SACjB62C,EAAY4X,EAAKzuD,QAIzBwrD,EAAYl1D,KAAKC,IAAIi1D,EAAWiD,EAAKzuD,QAQzC,OANkB,IAAdwrD,EACAA,EAAY3U,EAEPmrP,EAAyB,IAC9Bx2O,GAAaw2O,GAEVx2O,GAEJy6O,KAOPU,GAAsC,WAMtC,SAASA,EAAqBh5O,GAC1B1jE,KAAKs+N,QACLt+N,KAAK0jE,KAAOA,EAoDhB,OAlDAplE,OAAOuJ,eAAe60S,EAAqBrhT,UAAW,SAMlDqM,IAAK,WACD,OAAO1H,KAAKs+N,KAAK7hO,QAErBkL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe60S,EAAqBrhT,UAAW,iBAMlDqM,IAAK,WACD,OAAO1H,KAAKs+N,MAEhB32N,YAAY,EACZC,cAAc,IAElB80S,EAAqBrhT,UAAUshT,OAAS,SAAUrpN,GAC9C,QAAmB,IAARA,EAAqB,CAC5B,IAAIspN,EAAU,IAAIZ,GAAWh8S,KAAK0jE,MAElC,OADA1jE,KAAK28S,OAAOC,GACLA,EAOP,GAJAtpN,EAAI5uF,MAAMmyS,mBAAmB72S,KAAK0jE,KAAKh/D,MAAMqyS,iBAC7CzjN,EAAI5uF,MAAMmzO,QAAQ73O,KAAK0jE,KAAKh/D,MAAMqqB,MAClCukE,EAAI5uF,MAAMuyS,aAAaj3S,KAAK0jE,KAAKh/D,MAAMgnS,WACvCp4M,EAAI5uF,MAAMyyS,WAAWn3S,KAAK0jE,KAAKh/D,MAAM0yS,SACb,IAApB9jN,EAAIjwB,MAAMpkD,MACV,IAAK,IAAI9iB,EAAI,EAAGA,EAAI6D,KAAK0jE,KAAKlE,QAAQvgD,MAAO9iB,IACzCm3F,EAAIjwB,MAAMj/D,IAAI,IAAIuzS,IAG1B33S,KAAKs+N,KAAK95N,KAAK8uF,IAOvBopN,EAAqBrhT,UAAU2/S,OAAS,SAAU/oS,GAC9C,OAAOjS,KAAKs+N,KAAKrsN,IAEdyqS,KAOPG,GAAyC,WAMzC,SAASA,EAAwBn5O,GAK7B1jE,KAAKs+N,QACLt+N,KAAK0jE,KAAOA,EACZ1jE,KAAKs+N,QA2CT,OApCAu+E,EAAwBxhT,UAAU0/S,UAAY,SAAU9oS,GAIpD,OAAQjS,KAAKs+N,KAAKrsN,IAEtB3T,OAAOuJ,eAAeg1S,EAAwBxhT,UAAW,SAKrDqM,IAAK,WACD,OAAO1H,KAAKs+N,KAAK7hO,QAErBkL,YAAY,EACZC,cAAc,IAElBi1S,EAAwBxhT,UAAU+I,IAAM,SAAUkvF,GAC9C,GAAmB,iBAARA,EAAkB,CAEzB,IAAK,IADDrxB,OAAM,EACD9lE,EAAI,EAAGA,EAAIm3F,EAAKn3F,IAAK,CAC1B8lE,EAAM,IAAI+5O,GAAWh8S,KAAK0jE,MAC1B,IAAK,IAAIjgD,EAAI,EAAGA,EAAIzjB,KAAK0jE,KAAKlE,QAAQvgD,MAAOwE,IACzCw+C,EAAIoB,MAAMj/D,IAAI,IAAIuzS,IAEtB33S,KAAKs+N,KAAK95N,KAAKy9D,GAEnB,OAAOjiE,KAAKs+N,KAGZt+N,KAAKs+N,KAAK95N,KAAK8uF,IAGvBupN,EAAwBxhT,UAAUkD,QAAU,SAAU0jE,GAClD,OAAOjiE,KAAKs+N,KAAK//N,QAAQ0jE,IAEtB46O,KC1WPhxN,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GA2BxC4wN,GAAqC,SAAUpwN,GAM/C,SAASowN,EAAoBhQ,GAQzB,YAN0B,IAAfA,EACCpgN,EAAOprF,KAAKtB,OAASA,KAGrB0sF,EAAOprF,KAAKtB,KAAM8sS,IAAe9sS,KAIjD,OAfA6rF,GAAUixN,EAAqBpwN,GAexBowN,GACTjQ,IAEEkQ,GAAyB,SAAUrwN,GAOnC,SAASqwN,IACL,IAAIh9S,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KAyCjC,OApCAD,EAAMi9S,SAAW,IAAIp/C,GAAM,EAAG,GAK9B79P,EAAMk9S,cAAe,EAKrBl9S,EAAMm9S,WAAa,IAAIr/C,GAKvB99P,EAAMo9S,uBAKNp9S,EAAMkwF,MAAO,EAKblwF,EAAMq9S,gBAKNr9S,EAAM6zE,gBAAkB,IAAI+pL,GAAO,EAAG,GAKtC59P,EAAMs9S,UAAW,EACVt9S,EA84BX,OA97BA8rF,GAAUkxN,EAASrwN,GAkDnBpuF,OAAOuJ,eAAek1S,EAAQ1hT,UAAW,sBAMrCqM,IAAK,WACD,YAAsC,IAAvB1H,KAAKs9S,eAA+D,cAAvBt9S,KAAKs9S,eAErE31S,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1S,EAAQ1hT,UAAW,oBAKrCqM,IAAK,WACD,YAAoC,IAArB1H,KAAKu9S,aAA2D,cAArBv9S,KAAKu9S,aAEnE51S,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1S,EAAQ1hT,UAAW,wBAKrCqM,IAAK,WACD,YAAwC,IAAzB1H,KAAKw9S,iBAExB71S,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1S,EAAQ1hT,UAAW,sBAKrCqM,IAAK,WACD,YAAsC,IAAvB1H,KAAKy9S,eAExB91S,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1S,EAAQ1hT,UAAW,gBAKrCqM,IAAK,WAID,OAH0B,MAAtB1H,KAAK09S,oBAAuD,IAAvB19S,KAAK09S,gBAC1C19S,KAAK09S,eAAgB,GAElB19S,KAAK09S,eAEhBr2S,IAAK,SAAUrK,GACXgD,KAAK09S,cAAgB1gT,GAEzB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1S,EAAQ1hT,UAAW,4BAKrCqM,IAAK,WACD,OAAO1H,KAAKq9S,UAEhBh2S,IAAK,SAAUrK,GACXgD,KAAKq9S,SAAWrgT,GAEpB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1S,EAAQ1hT,UAAW,WAKrCqM,IAAK,WAID,OAHwB,MAApB1H,KAAK29S,kBAAmD,IAArB39S,KAAK29S,cACxC39S,KAAK29S,YAAc,IAAIlC,GAAwBz7S,OAE5CA,KAAK29S,aAEhBh2S,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1S,EAAQ1hT,UAAW,QAKrCqM,IAAK,WAID,OAHqB,MAAjB1H,KAAK49S,WACL59S,KAAK49S,SAAW,IAAIlB,GAAqB18S,OAEtCA,KAAK49S,UAEhBj2S,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1S,EAAQ1hT,UAAW,WAKrCqM,IAAK,WAID,OAHwB,MAApB1H,KAAK69S,kBAAmD,IAArB79S,KAAK69S,cACxC79S,KAAK69S,YAAc,IAAIhB,GAAwB78S,OAE5CA,KAAK69S,aAEhBl2S,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1S,EAAQ1hT,UAAW,gBAKrCqM,IAAK,WACD,OAAO1H,KAAK89S,kBAEhBz2S,IAAK,SAAUrK,GACXgD,KAAK89S,iBAAmB9gT,GAE5B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1S,EAAQ1hT,UAAW,SAKrCqM,IAAK,WAID,OAHsB,MAAlB1H,KAAK+9S,YACL/9S,KAAK+9S,UAAY,IAAI/H,IAElBh2S,KAAK+9S,WAEhB12S,IAAK,SAAUrK,GACW,MAAlBgD,KAAK+9S,YACL/9S,KAAK+9S,UAAY/gT,IAGzB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1S,EAAQ1hT,UAAW,eAKrCqM,IAAK,WACD,OAAO1H,KAAKg+S,WAEhB32S,IAAK,SAAUrK,GACXgD,KAAKg+S,UAAYhhT,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1S,EAAQ1hT,UAAW,eAKrCqM,IAAK,WACD,OAAO1H,KAAKi+S,WAEhB52S,IAAK,SAAUrK,GACXgD,KAAKi+S,UAAYjhT,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1S,EAAQ1hT,UAAW,QAKrCqM,IAAK,WACD,OAA4B,IAAxB1H,KAAKg9S,SAAShnS,OAAwC,IAAzBhW,KAAKg9S,SAASjnS,QAC3C/V,KAAKg9S,SAAWh9S,KAAKy/N,UACdz/N,KAAKg9S,UAGLh9S,KAAKg9S,UAGpB31S,IAAK,SAAUrK,GACXgD,KAAKg9S,SAAWhgT,GAEpB2K,YAAY,EACZC,cAAc,IAElBm1S,EAAQ1hT,UAAUu6Q,KAAO,SAAU9X,EAAMC,EAAMC,EAAMC,GACjD,GAAIF,aAAgBJ,SAAgC,IAAfI,EAAK/nP,YAAyC,IAATgoP,EACtE,OAAOh+P,KAAK00Q,WAAW5W,EAAMC,EAAKhxP,EAAGgxP,EAAK/wP,GAEzC,GAAoB,iBAAT+wP,GAAqC,iBAATC,QAAqC,IAATC,EACpE,OAAOj+P,KAAK00Q,WAAW5W,EAAMC,EAAMC,EAAM,MAExC,GAAID,aAAgBF,SAAoC,IAAfE,EAAK/nP,YAAyC,IAATgoP,EAC/E,OAAOh+P,KAAK00Q,WAAW5W,EAAMC,EAAM,MAElC,GAAIA,aAAgBJ,SAAgC,IAAfI,EAAK/nP,OAAyBgoP,aAAgB6uC,GACpF,OAAO7sS,KAAK00Q,WAAW5W,EAAMC,EAAKhxP,EAAGgxP,EAAK/wP,EAAGgxP,GAE5C,GAAoB,iBAATD,GAAqC,iBAATC,IAAsBC,aAAgB4uC,IAA2B,MAAR5uC,GAAe,CAChH,IAAIjoP,EAAS8nP,EAAK6W,SAAS5S,WAAW/rP,MAAQ+nP,EAC1C41B,EAAkB,IAAI91B,GAAWE,EAAMC,EAAMhoP,EAAO,GACxD,OAAOhW,KAAK00Q,WAAW5W,EAAM61B,EAAiB11B,GAE7C,OAAIF,aAAgBF,SAAoC,IAAfE,EAAK/nP,OAAyC,kBAATgoP,EACxEh+P,KAAK00Q,WAAW5W,EAAMC,EAAM,MAG5B/9P,KAAK00Q,WAAW5W,EAAMC,EAAMC,IAO3C++C,EAAQ1hT,UAAUokO,QAAU,WAGxB,IAAK,IAFD1pN,EAAS,EACTC,EAAQhW,KAAKw/D,QAAQxpD,MAChB7Z,EAAI,EAAGA,EAAI6D,KAAKomF,QAAQnnE,MAAO9iB,IAAK,CAEzC4Z,GADU/V,KAAKomF,QAAQ20N,UAAU5+S,GACnB4Z,OAElB,IAAS5Z,EAAI,EAAGA,EAAI6D,KAAKs+N,KAAKr/M,MAAO9iB,IAAK,CAEtC4Z,GADU/V,KAAKs+N,KAAK08E,OAAO7+S,GACb4Z,OAElB,OAAO,IAAI6nP,GAAM5nP,EAAOD,IAE5BgnS,EAAQ1hT,UAAUouD,OAAS,SAAU6mE,EAAO4tL,GACxC,QAA8B,IAAnBA,EAAgC,CACvCl+S,KAAKm+S,UACLn+S,KAAKwtS,aAAel9K,EAAM9zF,OAC1Bx8B,KAAKo+S,aAAe9tL,EAAMv6F,OAE1B,OADa/1B,KAAKypD,OAAO6mE,GAAO,GAIhC,OAAOtwH,KAAK4sS,eAAet8K,IAGnCysL,EAAQ1hT,UAAU8iT,QAAU,WAMxB,IAAK,IALDlG,EAEAoG,EADA7E,EAAU,EAEVqB,EAAkB,EAClBprE,EAAWzvO,KAAKomF,QAAQnnE,MACnB9iB,EAAI,EAAGA,EAAIszO,EAAUtzO,IAG1B,IAAK,IAFD8lE,EAAMjiE,KAAKomF,QAAQ20N,UAAU5+S,GAC7BmiT,EAAWr8O,EAAIoB,MAAMpkD,MAChBwE,EAAI,EAAGA,EAAI66R,EAAU76R,IAAK,CAC/B,IAAI+gD,EAAOvC,EAAIoB,MAAMyzO,QAAQrzR,GAE7B,IAAK+gD,EAAK+5O,sBAAwB/5O,EAAKg6O,qBAAuBh6O,EAAKk2O,WAAa,GAAKl2O,EAAKg1O,QAAU,GAAI,CACpG,GAAIh1O,EAAKk2O,WAAaj3R,EAAIw+C,EAAIoB,MAAMpkD,MAChC,MAAM,IAAIre,MAAM,iCAAmC6iB,EAAEvW,WAAa,WAAa/Q,EAAE+Q,YAErF,GAAIs3D,EAAKg1O,QAAUr9S,EAAI6D,KAAKomF,QAAQnnE,MAChC,MAAM,IAAIre,MAAM,oCAAsC6iB,EAAEvW,WAAa,WAAa/Q,EAAE+Q,YAKxF,GAAIs3D,EAAKk2O,WAAa,GAAKl2O,EAAKg1O,QAAU,EAAG,CAQzC,IAPAvB,EAAUzzO,EAAKk2O,WACflB,EAAUh1O,EAAKg1O,QACf6E,EAAmB56R,EACnBo3R,EAAkB1+S,EAClBqoE,EAAKi6O,kBAAmB,EACxBj6O,EAAKk6O,iBAAkB,EAEhBzG,EAAU,GACboG,IACAp8O,EAAIoB,MAAMyzO,QAAQuH,GAAkBE,qBAAsB,EAC1Dt8O,EAAIoB,MAAMyzO,QAAQuH,GAAkBG,oBAAqB,EACzDv8O,EAAIoB,MAAMyzO,QAAQuH,GAAkB7E,QAAUA,EAC9CvB,IAKJ,IAHAoG,EAAmB56R,EACnBw0R,EAAUzzO,EAAKk2O,WAERlB,EAAU,GAAG,CAKhB,IAJAqB,IACA76S,KAAKomF,QAAQ20N,UAAUF,GAAiBx3O,MAAMyzO,QAAQrzR,GAAG+6R,oBAAqB,EAC9Ex+S,KAAKomF,QAAQ20N,UAAUF,GAAiBx3O,MAAMyzO,QAAQuH,GAAkBG,oBAAqB,EAC7FhF,IACOvB,EAAU,GACboG,IACAr+S,KAAKomF,QAAQ20N,UAAUF,GAAiBx3O,MAAMyzO,QAAQuH,GAAkBE,qBAAsB,EAC9Fv+S,KAAKomF,QAAQ20N,UAAUF,GAAiBx3O,MAAMyzO,QAAQuH,GAAkBG,oBAAqB,EAC7FvG,IAEJA,EAAUzzO,EAAKk2O,WACf2D,EAAmB56R,QAGtB,GAAI+gD,EAAKk2O,WAAa,GAAsB,IAAjBl2O,EAAKg1O,QAKjC,IAJAvB,EAAUzzO,EAAKk2O,WACf2D,EAAmB56R,EACnB+gD,EAAKi6O,kBAAmB,EAEjBxG,EAAU,GACboG,IACAp8O,EAAIoB,MAAMyzO,QAAQuH,GAAkBE,qBAAsB,EAC1DtG,SAGH,GAAwB,IAApBzzO,EAAKk2O,YAAoBl2O,EAAKg1O,QAAU,EAI7C,IAHAA,EAAUh1O,EAAKg1O,QACfqB,EAAkB1+S,EAEXq9S,EAAU,GACbqB,IACA76S,KAAKomF,QAAQ20N,UAAUF,GAAiBx3O,MAAMyzO,QAAQrzR,GAAG+6R,oBAAqB,EAC9EhF,OAWxBuD,EAAQ1hT,UAAUw8N,UAAY,SAAUr7L,GAEpC,OADQA,GAOZugR,EAAQ1hT,UAAUuxS,eAAiB,SAAUt8K,GACzCtwH,KAAK47S,aAAetrL,EAAMv6F,OAAO/f,MACpBhW,KAAK63N,UAAUvnG,EAAM9zF,QAElC,GADAx8B,KAAK+vO,YAAcz/G,EAAMuvC,KACA,OAArB7/J,KAAK+vO,YAML,MAAMnvO,MAAM,4BALKZ,KAAK+vO,YAAY2vD,gBAAgB3pR,OAClC/V,KAAK+vO,YAAY2vD,gBAAgB1pR,MACjDhW,KAAK2+S,kBAAoB3+S,KAAK+vO,YAAY2vD,gBAK9C1/R,KAAK4+S,gBAAkB5+S,KAAK+vO,YAAY4kC,SACxC,IAAI1iQ,EAAQ,EAIZ,GAHAA,EAAQjS,KAAK4+S,gBAAgB/+I,KAAKo1H,QAAQ12R,QAAQyB,KAAK4+S,gBAAgB/+I,MACvE7/J,KAAKm9S,oBAAoB34S,KAAKyN,GAC9BjS,KAAK6tS,cAAgB,IAAIhwC,GAAW,IAAIF,GAAOrtI,EAAMv6F,OAAOhpB,EAAGujH,EAAMv6F,OAAO/oB,GAAIhN,KAAK4+S,gBAAgB78C,YAC7E,IAApB/hQ,KAAKs+N,KAAKr/M,MACVjf,KAAK6tS,cAAc73R,MAASs6G,EAAMv6F,OAAO/f,MAAQ,EAAKs6G,EAAMv6F,OAAO/f,MAC9DhW,KAAK6tS,cAAc73R,MAAQhW,KAAKs+N,KAAK08E,OAAO,GAAG33O,MAAMyzO,QAAQ,GAAGpyS,MAAM8yS,QAAQhrS,KAAKwJ,MAAQ,MAE/F,CAAA,GAA2B,IAAvBhW,KAAKomF,QAAQnnE,MAIlB,MAAMre,MAAM,sCAHZZ,KAAK6tS,cAAc73R,MAAQs6G,EAAMv6F,OAAO/f,MAK5ChW,KAAKm6B,cAAgB,IAAIwjO,GAAOrtI,EAAMv6F,OAAOhpB,EAAGujH,EAAMv6F,OAAO/oB,GACzDsjH,EAAMv6F,OAAOhgB,OAAS,IAAM/V,KAAK6+S,cACjC7+S,KAAK6tS,cAAc93R,OAASu6G,EAAMv6F,OAAOhgB,QAE7C/V,KAAK8+S,MAAQ9+S,KAAK0E,MAAMq6S,uBACnB/+S,KAAK0E,MAAMg1S,yBAKZ15S,KAAK27S,sBACL37S,KAAKg/S,8BALLh/S,KAAK27S,oBAAoB37S,KAAK6tS,eAC9B7tS,KAAKo9S,aAAa54S,MAAM,EAAGxE,KAAKw/D,QAAQvgD,MAAQ,KAOpD,OADajf,KAAKiuS,aAAa39K,IAGnCysL,EAAQ1hT,UAAUsgT,oBAAsB,SAAU5lR,GAC9C,QAAsB,IAAXA,EAGP,IAAK,IAFD02P,EAASzsR,KAAKw/D,QAAQs8O,iBAAiB/lR,EAAO/f,OAEzC7Z,GADO6D,KAAKw/D,QAAQo7O,UAAU,GAAG5kS,MAC7B,GAAGiJ,EAAQjf,KAAKw/D,QAAQvgD,MAAO9iB,EAAI8iB,EAAO9iB,IACnD6D,KAAKw/D,QAAQo7O,UAAUz+S,GAAG6Z,MAAQy2Q,EAAOtwR,OAG5C,CACGswR,KAAJ,IACImrB,EAAY,EAChB,GACI53S,KAAKomF,QAAQnnE,MAAQ,EAGhB,CAAA,IAFDq/R,EAAWt+S,KAAKomF,QAAQ20N,UAAU,GAAG13O,MAAMpkD,MAC3CwwN,EAAWzvO,KAAKomF,QAAQnnE,MAC5B,IAAS9iB,EAAI,EAAGA,EAAImiT,EAAUniT,IAAK,CAC/By7S,EAAY,EACZ,IAAK,IAAIn0R,EAAI,EAAGA,EAAIgsN,EAAUhsN,IAAK,CAC/B,IAAIw7R,EAAW5yS,KAAK8T,IAAIngB,KAAK47S,aAAc57S,KAAKomF,QAAQ20N,UAAUt3R,GAAG4/C,MAAMyzO,QAAQ36S,GAAG6Z,OACtF4hS,EAAYvrS,KAAKC,IAAIsrS,EAAWqH,GAEpCxyB,EAAOtwR,GAAKy7S,QAMhB,IAFI0G,EAAWt+S,KAAKs+N,KAAK08E,OAAO,GAAG33O,MAAMpkD,MACrCwwN,EAAWzvO,KAAKs+N,KAAKr/M,MAChB9iB,EAAI,EAAGA,EAAImiT,EAAUniT,IAAK,CAC/By7S,EAAY,EACZ,IAASn0R,EAAI,EAAGA,EAAIgsN,EAAUhsN,IAAK,CAC3Bw7R,EAAW5yS,KAAK8T,IAAIngB,KAAK47S,aAAc57S,KAAKs+N,KAAK08E,OAAOv3R,GAAG4/C,MAAMyzO,QAAQ36S,GAAG6Z,OAChF4hS,EAAYvrS,KAAKC,IAAIsrS,EAAWqH,GAEpCxyB,EAAOtwR,GAAKy7S,EAGpBA,EAAY,EACZ,IAASz7S,EAAI,EAAGmiT,EAAWt+S,KAAKw/D,QAAQvgD,MAAO9iB,EAAImiT,EAAUniT,IAAK,CAC9D,IAASsnB,EAAI,EAAGgsN,EAAWzvO,KAAKs+N,KAAKr/M,MAAOwE,EAAIgsN,EAAUhsN,IACtD,GAAuD,GAAnDzjB,KAAKs+N,KAAK08E,OAAOv3R,GAAG4/C,MAAMyzO,QAAQ36S,GAAGu+S,YAAkE,OAA/C16S,KAAKs+N,KAAK08E,OAAOv3R,GAAG4/C,MAAMyzO,QAAQ36S,GAAGa,OAAkBgD,KAAKs+N,KAAK08E,OAAOv3R,GAAG4/C,MAAMyzO,QAAQ36S,GAAGq9S,SAAW,EAAG,CAClK,GAAmD,OAA/Cx5S,KAAKs+N,KAAK08E,OAAOv3R,GAAG4/C,MAAMyzO,QAAQ36S,GAAGa,QACpCgD,KAAKs+N,KAAK08E,OAAOv3R,GAAGigD,KAAKh/D,MAAMg1S,wBAAyB,CACzD,IAAI18S,EAAQgD,KAAKs+N,KAAK08E,OAAOv3R,GAAGigD,KAAKh/D,MAAMw0S,YAAYzsS,MACnDzM,KAAKs+N,KAAK08E,OAAOv3R,GAAGigD,KAAKh/D,MAAMw0S,YAAY1sS,KACzCxM,KAAKs+N,KAAK08E,OAAOv3R,GAAG4/C,MAAMyzO,QAAQ36S,GAAGuI,MAAM8yS,QAAQhrS,KAAKwJ,MAAQ,EAChEhW,KAAKo+S,aAAarxS,EACxB/M,KAAKs+N,KAAK08E,OAAOv3R,GAAG4/C,MAAMyzO,QAAQ36S,GAAGa,MAAM4+S,aAAe57S,KAAK47S,aAAe5+S,EAE9EiiT,EAAW,EAAf,IACIC,EAAgBl/S,KAAKs+N,KAAK08E,OAAOv3R,GAAG4/C,MAAMyzO,QAAQ36S,GAAG6Z,MACzDkpS,GAAiBl/S,KAAKs+N,KAAK08E,OAAOv3R,GAAG4/C,MAAMyzO,QAAQ36S,GAAGuI,MAAM8yS,QAAQhrS,KAAKwJ,MACzEkpS,GAAiBl/S,KAAKs+N,KAAK08E,OAAOv3R,GAAG4/C,MAAMyzO,QAAQ36S,GAAGuI,MAAM8yS,QAAQ/qS,MAAMuJ,MAC1E,IAAImpS,EAAiBn/S,KAAKs+N,KAAK08E,OAAOv3R,GAAG4/C,MAAMyzO,QAAQ36S,GAAG4Z,OAC1DopS,GAAmBn/S,KAAKs+N,KAAK08E,OAAOv3R,GAAG4/C,MAAMyzO,QAAQ36S,GAAGuI,MAAM8yS,QAAQ9qS,IAAS,MAC/EyyS,GAAmBn/S,KAAKs+N,KAAK08E,OAAOv3R,GAAG4/C,MAAMyzO,QAAQ36S,GAAGuI,MAAM8yS,QAAQ7qS,OAAY,MAClF,IAAIyyS,EAAkBF,EAAgBl/S,KAAKo+S,aAAarxS,EAAK/M,KAAK4+S,gBAAgB78C,WAAW/rP,MACzFqpS,EAAmBF,EAAiBn/S,KAAKo+S,aAAapxS,EAAKhN,KAAK4+S,gBAAgB78C,WAAWhsP,OAC/F,GAAIqpS,GAAkBC,EAClB,MAAMz+S,MAAM,yEAEhBq+S,EAAW5yS,KAAK8T,IAAIngB,KAAK47S,aAAc57S,KAAKs+N,KAAK08E,OAAOv3R,GAAG4/C,MAAMyzO,QAAQ36S,GAAG6Z,OAC5E4hS,EAAYvrS,KAAKC,IAAImgR,EAAOtwR,GAAIkQ,KAAKC,IAAIsrS,EAAWqH,IACpDrH,EAAYvrS,KAAKC,IAAItM,KAAKw/D,QAAQo7O,UAAUz+S,GAAG6Z,MAAO4hS,GAG9DnrB,EAAOtwR,GAAKy7S,EACZA,EAAY,EAEhB,IAASz7S,EAAI,EAAG8iB,EAAQjf,KAAKw/D,QAAQvgD,MAAO9iB,EAAI8iB,EAAO9iB,IACnD6D,KAAKw/D,QAAQo7O,UAAUz+S,GAAG6Z,MAAQy2Q,EAAOtwR,KASrD4gT,EAAQ1hT,UAAU2jT,0BAA4B,WAK1C,IAAK,IAJDM,EAAc,EACdC,EAAY,EACZC,EAAa,EACbC,EAAiBz/S,KAAK4+S,gBAAgB78C,WAAW/rP,MAAQhW,KAAK6tS,cAAc9gS,EACvE5Q,EAAI,EAAGA,EAAI6D,KAAKw/D,QAAQvgD,MAAO9iB,IAEpC,IADAqjT,GAAcx/S,KAAKw/D,QAAQo7O,UAAUz+S,GAAG6Z,QACtBypS,EAAgB,CAE9B,IAAK,IADDC,EAAY,EACPj8R,EAAI67R,EAAa77R,GAAKtnB,MAC3BujT,GAAa1/S,KAAKw/D,QAAQo7O,UAAUn3R,GAAGzN,OACvBypS,GAFch8R,IAK9B87R,EAAY97R,EAEhBzjB,KAAKo9S,aAAa54S,MAAM86S,EAAaC,IAGrCC,GADAD,EADAD,EAAcC,EAAY,IAECpjT,EAAK6D,KAAKw/D,QAAQo7O,UAAUz+S,GAAG6Z,MAAQ,EAI1EhW,KAAKo9S,aAAa54S,MAAM86S,EAAat/S,KAAKw/D,QAAQvgD,MAAQ,KAO9D89R,EAAQ1hT,UAAU4yS,aAAe,SAAU39K,GAEvCtwH,KAAKk9S,WAAWnwS,EAAIujH,EAAMv6F,OAAOhpB,EACjC/M,KAAKk9S,WAAWlwS,EAAIsjH,EAAMv6F,OAAO/oB,EACjChN,KAAKk9S,WAAWnnS,OAASu6G,EAAMv6F,OAAOhgB,OAQtC,IAAK,IAPDymB,EAASx8B,KAAK63N,UAAUvnG,EAAM9zF,QAE9Bz9B,EAAS,KACT4gT,EAAgB,IAAI3rC,GACpB4rC,EAAYtvL,EAAMuvC,KAElBggJ,KACK5tS,EAAQ,EAAGA,EAAQjS,KAAKo9S,aAAa3gT,OAAQwV,IAAS,CAC3D,IAAIkf,EAAQnxB,KAAKo9S,aAAanrS,GAC9BjS,KAAK8/S,eAAiB3uR,EAAM,GAC5BnxB,KAAK+/S,aAAe5uR,EAAM,GAC1B,IAAI6uR,EAAehgT,KAAKigT,sBAAsBjgT,KAAK+vO,YAAa/vO,KAAK6tS,cAAe7tS,KAAK66S,iBACzF76S,KAAK6tS,cAAgBmS,EAAanS,cAClC7tS,KAAK66S,gBAAkBmF,EAAanF,gBAMpC,IACK,IAAInzR,EAAM,EAAGA,EAAM1nB,KAAKomF,QAAQnnE,MAAOyI,IACxC,CAAA,IAAIu6C,EAAMjiE,KAAKomF,QAAQ20N,UAAUrzR,GACd1nB,KAAK6tS,cAAc7gS,EAEnBhN,KAAKkgT,QAAQj+O,GAUpC,IAAI9lE,EAAI,EAEJgkT,GADWngT,KAAKs+N,KAAKr/M,WACT,GAChB4gS,KAKA,IAAK,IAAIp8R,EAAI,EAAGA,EAAIzjB,KAAKs+N,KAAKr/M,MAAOwE,IAAK,CAClCw+C,EAAMjiE,KAAKs+N,KAAK08E,OAAOv3R,GAC3BtnB,IACA6D,KAAK66S,gBAAkB1+S,EAAI,EAC3B,IAAIikT,EAAiBpgT,KAAK6tS,cAAc7gS,EACxC4yS,EAAY5/S,KAAK+vO,YACjBgtE,EAAQsD,gBAAkB,EAC1B,IAAIC,EAAYtgT,KAAKkgT,QAAQj+O,GAW7B,GAVA49O,EAAWr7S,KAAK87S,EAAUvqR,OAAO/f,OAE7BoqS,IAAmBpgT,KAAK6tS,cAAc7gS,GACtCmzS,GAAY,EACZpD,EAAQsD,eAAiBrgT,KAAKs+N,KAAKw8E,cAAcv8S,QAAQ0jE,KAGzDk+O,GAAY,EACZpD,EAAQsD,gBAAkB,IAEzBC,EAAUC,UAA0B,OAAdX,GAAsBpjR,EAAOitB,SAAW+tN,GAAcgpC,SAAWL,EAAW,CAsBnG,GApBAngT,KAAKm6B,cAAcptB,EAAI/M,KAAK6tS,cAAc9gS,EAC1C/M,KACK+vO,YAAc/vO,KAAKg1R,YAAYx4P,GACd,OAAjB8zF,EAAM9zF,SAAqB8zF,EAAM9zF,OAAO0wQ,mBAAsC,OAAjB58K,EAAMv6F,QACpEu6F,EAAMv6F,OAAOhgB,OAAS,IAAM/V,KAAK6+S,cACjC7+S,KAAK6tS,cAAc93R,OAASu6G,EAAMv6F,OAAOhgB,QAEvB,OAAjBu6G,EAAM9zF,SAAqB8zF,EAAM9zF,OAAO0wQ,mBAAsC,OAAjB58K,EAAMv6F,QACpEu6F,EAAMv6F,OAAO/oB,EAAI,IAAMhN,KAAK6+S,cAC5B7+S,KAAK6tS,cAAc7gS,EAAIsjH,EAAMv6F,OAAO/oB,GAExChN,KAAKm6B,cAAcntB,EAAIhN,KAAK6tS,cAAc7gS,EACrCwvB,EAAOwwQ,eAAejgS,IAAMyvB,EAAOwwQ,eAAehgS,GAClDwvB,EAAOwwQ,eAAehgS,IAAMwvB,EAAOwwQ,eAAej3R,QAClDymB,EAAOwwQ,eAAej3R,SAAWymB,EAAOwwQ,eAAeh3R,OAA2C,IAAhCwmB,EAAOwwQ,eAAeh3R,QACzFhW,KAAK6tS,cAAc9gS,GAAK/M,KAAKm6B,cAAcptB,GAE3C/M,KAAK6tS,cAAc9gS,IAAM4nS,GAAW+B,QAAQlqS,KAAKwJ,MAAQ,IACzDhW,KAAK6tS,cAAc7gS,GAAKhN,KAAKm6B,cAAcptB,GAE3C/M,KAAKygT,aACL,IAAK,IAAIC,EAAM,EAAGA,EAAM1gT,KAAKomF,QAAQnnE,MAAOyhS,IAAO,CAC/C,IAAIv6N,EAASnmF,KAAKomF,QAAQ20N,UAAU2F,GACpC1gT,KAAKkgT,QAAQ/5N,GAGrBnmF,KAAKkgT,QAAQj+O,GACY,OAArBjiE,KAAK+vO,aAAyB4vE,EAAclrE,YAAYz0O,KAAK+vO,cAC7D4vE,EAAcv7S,IAAIpE,KAAK+vO,YAAa5+M,IAIhD,IACIwvR,EAAyB,EACzBd,EAAWpjT,OAAS,IACpBkkT,EAAyBd,EAAW,IAGxC,GAAkBA,EAAWpjT,OAAS,EAAG,CACrC,IAAK,IAAIijE,EAAI,EAAGA,EAAIvjE,EAAI,EAAGujE,IACnBihP,EAAyBd,EAAWngP,KACpCihP,EAAyBd,EAAWngP,IAG5C1/D,KAAK4gT,qBAAuBD,OAG5B3gT,KAAK4gT,qBAVoB,EAYzB5gT,KAAKo9S,aAAa3gT,OAAS,IAAMwV,GAASjS,KAAKo9S,aAAa3gT,OAAS,GAAK+/B,EAAOitB,SAAW+tN,GAAcgpC,UAC1GxgT,KAAK+vO,YAAc/vO,KAAKg1R,YAAYx4P,GAC/BA,EAAOwwQ,eAAejgS,IAAMyvB,EAAOwwQ,eAAehgS,GAAOwvB,EAAOwwQ,eAAehgS,IAAMwvB,EAAOwwQ,eAAej3R,QACxGymB,EAAOwwQ,eAAej3R,SAAWymB,EAAOwwQ,eAAeh3R,OAA2C,IAAhCwmB,EAAOwwQ,eAAeh3R,QAC5FhW,KAAK6tS,cAAc9gS,GAAK/M,KAAKm6B,cAAcptB,EAC3C/M,KAAK6tS,cAAc7gS,GAAKhN,KAAKm6B,cAAcntB,IAUvD,OALAjO,EAASiB,KAAKkuS,kBACVluS,KAAK0E,MAAMg1S,yBAA2B15S,KAAK0E,MAAMq6S,wBAA0BrJ,GAA0BmL,UACrG7gT,KAAK8gT,eAAenB,GAExB3/S,KAAK+gT,kBAAkBhiT,GAChBA,GAMXg+S,EAAQ1hT,UAAU25R,YAAc,SAAUx4P,GACtC,IAAIy4P,EAAUj1R,KAAK+vO,YAAYklD,QAC3B+rB,EAAW,KACX/uS,EAAQgjR,EAAQ12R,QAAQyB,KAAK+vO,aACjC/vO,KAAKiwF,MAAO,EAER+wN,EADA/uS,IAAUgjR,EAAQh2Q,MAAQ,EACfg2Q,EAAQ7wR,MAGR6wR,EAAQC,WAAWjjR,EAAQ,GAE1CjS,KAAK4+S,gBAAkBoC,EAASrsC,SAChC,IAAIssC,EAAYjhT,KAAK4+S,gBAAgB/+I,KAAKo1H,QAAQ12R,QAAQyB,KAAK4+S,gBAAgB/+I,MAW/E,OAVuD,IAAjD7/J,KAAKm9S,oBAAoB5+S,QAAQ0iT,IACnCjhT,KAAKm9S,oBAAoB34S,KAAKy8S,GAElCjhT,KAAK6tS,cAAgB,IAAIhwC,GAAW,IAAIF,GAAO,EAAG,GAAIqjD,EAASthB,iBAOxDshB,GAMXjE,EAAQ1hT,UAAU6yS,gBAAkB,WAChC,IAAIn4Q,EAIJ,OAFAA,EAAS,IAAI8nO,GAAW79P,KAAKm6B,cAAe,IAAIyjO,GAAM59P,KAAK6tS,cAAc73R,MAAOhW,KAAK6tS,cAAc7gS,EAAIhN,KAAKm6B,cAAcntB,IAEnH,IAAIk0S,GAAoBlhT,KAAK+vO,YAAah6M,IAMrDgnR,EAAQ1hT,UAAU8lT,kBAAoB,SAAUl/O,EAAKlsD,GAQjD,OAAO1J,KAAKC,IAAIyJ,EAPA,IAapBgnS,EAAQ1hT,UAAU4kT,sBAAwB,SAAUlwE,EAAa89D,EAAeuT,GAC5E,IAAI/oR,GAAS,EACb,GAAIr4B,KAAKqhT,qBAAsB,CAC3B,IAAIphT,EAAO,IAAIqhT,GAAgCzT,EAAe99D,EAAaqxE,GAC3EphT,KAAKw9S,gBAAgBx9S,KAAMC,GAQ3Bo4B,EAASp4B,EAAKo4B,OACdw1Q,EAAgB5tS,EAAK81B,OACrBqrR,EAAanhT,EAAKshT,cAEtB,OAAS3hQ,YAAavnB,EAAQw1Q,cAAeA,EAAegN,gBAAiBuG,IAMjFrE,EAAQ1hT,UAAU0lT,kBAAoB,SAAUhiT,GAC5C,IAAIkB,EAAO,IAAIuhT,GAA8BziT,GAI7C,OAHIiB,KAAKyhT,oBACLzhT,KAAKy9S,cAAcz9S,KAAMC,GAEtBA,GAEX88S,EAAQ1hT,UAAU6kT,QAAU,SAAUj+O,EAAKljE,EAAQgX,GAC/C,QAAsB,IAAXhX,EAAwB,CAG/B,IAAI2iT,EAAW,IAAIC,GACfC,EAAoB,EAEpBzyR,EAAO,IAAIyuO,GAAM,EAAG,GACpBpxO,GAAW,EACf,GAAIy1C,EAAIw2O,cAAe,CACnB,IAAIoJ,EAAU,EACVC,EAAe9hT,KAAKs+N,KAAKw8E,cAAcv8S,QAAQ0jE,IAC7B,IAAlB6/O,IAEsB,KADtBA,EAAe9hT,KAAKomF,QAAQ7nF,QAAQ0jE,MAEhCz1C,GAAW,GAGnB,IAAK,IAAIrwB,EAAI,EAAGA,EAAI8lE,EAAIoB,MAAMpkD,MAAO9iB,IAAK,CACtC,IAAIqoE,EAAOvC,EAAIoB,MAAMyzO,QAAQ36S,GAC7B0lT,EAAUx1S,KAAKC,IAAIu1S,EAASr9O,EAAKg1O,SAErC,IAASr9S,EAAI2lT,EAAc3lT,EAAI2lT,EAAeD,EAAS1lT,IACnDylT,GAAsBp1R,EAAWxsB,KAAKomF,QAAQ20N,UAAU5+S,GAAG4Z,OAAS/V,KAAKs+N,KAAK08E,OAAO7+S,GAAG4Z,OAGvF,IADDgsS,EAAeH,EACnB,IAASzlT,EAAI,EAAGA,EAAI8lE,EAAIoB,MAAMpkD,MAAO9iB,IACjC4lT,EAAeA,EAAe9/O,EAAIoB,MAAMyzO,QAAQ36S,GAAG4Z,OAASgsS,EAAe9/O,EAAIoB,MAAMyzO,QAAQ36S,GAAG4Z,OAI/F,IAFDisS,EAAUhiT,KAAKomF,QAAQ20N,UAAU/6S,KAAKomF,QAAQ7nF,QAAQ0jE,GAAO,GAC7DguB,GAAO,EACX,IAAS9zF,EAAI,EAAGA,EAAI6lT,EAAQ3+O,MAAMpkD,MAAO9iB,IACrC,GAAuC,KAAnC6lT,EAAQ3+O,MAAMyzO,QAAQ36S,GAAGa,YAAmD7B,IAAnC6mT,EAAQ3+O,MAAMyzO,QAAQ36S,GAAGa,MAAqB,CACvFizF,GAAO,EACP,MAGH8xN,EAAeH,GAAsB3xN,IACtChuB,EAAIlsD,QAAWgsS,EAAeH,GAGtC,IAAIK,EAAmBhgP,EAAIigP,eAAiB,EAAMjgP,EAAIigP,eAAiBjgP,EAAIlsD,OAqB3E,OApBI/V,KAAK6tS,cAAc7gS,EAAIi1S,EAAmBjiT,KAAK2+S,kBAAkB5oS,QACjE/V,KAAK6tS,cAAc7gS,EAAIi1S,EAAoBjiT,KAAK6tS,cAAc93R,OAAS/V,KAAKm6B,cAAcntB,GAC1FhN,KAAK6tS,cAAc7gS,EAAI40S,EAAoB5hT,KAAK2+S,kBAAkB5oS,OAWlE2rS,EAASnB,UAAW,GAIpBmB,EAASnB,UAAW,EACpBvgT,KAAKkgT,QAAQj+O,EAAKy/O,EAAUO,IAEzBP,EAGP,IACIS,EAAa,IAAIxkD,GAAO39P,KAAK6tS,cAAc9gS,EAAG/M,KAAK6tS,cAAc7gS,GACrEjO,EAAOg3B,OAAS,IAAI8nO,GAAWskD,EAAY,IAAIvkD,GAAM,EAAG,IACxD7nP,EAAS/V,KAAKmhT,kBAAkBl/O,EAAKlsD,GACrC,IAAS5Z,EAAI6D,KAAK8/S,eAAgB3jT,GAAK6D,KAAK+/S,aAAc5jT,IAAK,CAC3D,IAAIimT,EAAgBjmT,EAAI6D,KAAK+/S,aAAe,GAAO99O,EAAIoB,MAAMyzO,QAAQ36S,GAAGu+S,WAAa,EAErF,IAAK0H,EACD,IAAK,IAAI3+R,EAAI,EAAGA,EAAIw+C,EAAIoB,MAAMyzO,QAAQ36S,GAAGu+S,WAAYj3R,IACjDw+C,EAAIoB,MAAMyzO,QAAQ36S,EAAIsnB,GAAG86R,qBAAsB,EAGnDpvR,EAAO,IAAIyuO,GAAM59P,KAAKw/D,QAAQo7O,UAAUz+S,GAAG6Z,MAAOD,IAUjD/V,KAAKqiT,qBAAqBriT,KAAKw/D,QAAQo7O,UAAUz+S,GAAGqgC,SACrDx8B,KAAKqiT,qBAAqBpgP,EAAIoB,MAAMyzO,QAAQ36S,GAAGw5Q,gBAC/C1zM,EAAIoB,MAAMyzO,QAAQ36S,GAAGw5Q,aAAe31Q,KAAKw/D,QAAQo7O,UAAUz+S,GAAGqgC,QAElE,IAAI8lR,EAAYrgP,EAAIoB,MAAMyzO,QAAQ36S,GAAGuI,MACjC8F,EAAoD,iBAA/By3D,EAAIoB,MAAMyzO,QAAQ36S,GAAGa,OACX,OAA/BilE,EAAIoB,MAAMyzO,QAAQ36S,GAAGa,MAAkBilE,EAAIoB,MAAMyzO,QAAQ36S,GAAGa,MAAQ,GACxEilE,EAAIoB,MAAMyzO,QAAQ36S,GAAGuI,MAAQ1E,KAAKuiT,oBAAoBviT,KAAK4+S,gBAAiB5+S,KAAK66S,gBAAiB1+S,EAAG,IAAI0hQ,GAAWskD,EAAYhzR,GAAO3kB,EAAW83S,GAGlJ,IAAIhU,EAAersO,EAAIoB,MAAMyzO,QAAQ36S,GAAGy5Q,KAAK51Q,KAAK4+S,gBAAiB,IAAI/gD,GAAWskD,EAAYhzR,GAAOizR,GACjGngP,EAAIyB,KAAKh/D,MAAMg1S,0BAA4Bz3O,EAAIoB,MAAMyzO,QAAQ36S,GAAGu+S,WAAa16S,KAAK+/S,cAAgB5jT,EAAI8lE,EAAIoB,MAAMyzO,QAAQ36S,GAAGu+S,WAAa16S,KAAK+/S,aAAe,IAAM//S,KAAK+/S,aAAe99O,EAAIoB,MAAMpkD,MAAQ,IACxMgjD,EAAI03O,iBAAmB35S,KAAK+/S,cAE5B99O,EAAIyB,KAAKh/D,MAAMg1S,yBAA4Bz3O,EAAI03O,iBAAmB,IAAM13O,EAAIoB,MAAMyzO,QAAQ36S,GAAGu+S,WAAa16S,KAAK+/S,cAAgB5jT,EAAI8lE,EAAIoB,MAAMyzO,QAAQ36S,GAAGu+S,WAAa16S,KAAK+/S,aAAe,IAAO99O,EAAIoB,MAAMyzO,QAAQ36S,GAAGu+S,WAAa16S,KAAK+/S,aAAe5jT,EAAI,EAAI,IAC9P8lE,EAAIoB,MAAMyzO,QAAQ70O,EAAI03O,iBAAmB,GAAG38S,MAAyB,OAAjBsxS,QAAoDnzS,IAA3BmzS,EAAaN,UAA2BM,EAAaN,UAAiB,GACnJ/rO,EAAIoB,MAAMyzO,QAAQ70O,EAAI03O,iBAAmB,GAAGhkC,aAAe1zM,EAAIoB,MAAMyzO,QAAQ36S,GAAGw5Q,aAChF1zM,EAAIoB,MAAMyzO,QAAQ70O,EAAI03O,iBAAmB,GAAGj1S,MAAQu9D,EAAIoB,MAAMyzO,QAAQ36S,GAAGuI,MACzEu9D,EAAIoB,MAAMyzO,QAAQ70O,EAAI03O,iBAAmB,GAAGe,WAAaz4O,EAAIoB,MAAMyzO,QAAQ36S,GAAGu+S,WAAa16S,KAAK+/S,aAAe5jT,EAAI,GAIvHqO,EAAoD,iBAA/By3D,EAAIoB,MAAMyzO,QAAQ36S,GAAGa,OACP,OAA/BilE,EAAIoB,MAAMyzO,QAAQ36S,GAAGa,MAAkBilE,EAAIoB,MAAMyzO,QAAQ36S,GAAGa,MAAQ,GACxEgD,KAAKwiT,mBAAmBxiT,KAAK4+S,gBAAiB5+S,KAAK66S,gBAAiB1+S,EAAG,IAAI0hQ,GAAWskD,EAAYhzR,GAAO3kB,EAAWy3D,EAAIoB,MAAMyzO,QAAQ36S,GAAGuI,OACzIy9S,EAAWp1S,GAAK/M,KAAKw/D,QAAQo7O,UAAUz+S,GAAG6Z,MAG9ChW,KAAK6tS,cAAc7gS,GAAK+I,EAExBhX,EAAOg3B,OAAS,IAAI8nO,GAAW,IAAIF,GAAO5+P,EAAOg3B,OAAOhpB,EAAGhO,EAAOg3B,OAAO/oB,GAAI,IAAI4wP,GAAMukD,EAAWp1S,EAAGo1S,EAAWn1S,KAOxH+vS,EAAQ1hT,UAAUgnT,qBAAuB,SAAU7lR,GAC/C,IAAIimR,EAAgB,IAAI7iD,GACxB,OAAQpjO,EAAOwrB,YAAcy6P,EAAcz6P,WAAaxrB,EAAO2pO,mBAAqBs8C,EAAct8C,kBAC9F3pO,EAAOk+E,WAAa+nM,EAAc/nM,UAAYl+E,EAAOgkO,kBAAoBiiD,EAAcjiD,iBACvFhkO,EAAOm4P,0BAA4B8tB,EAAc9tB,yBACjDn4P,EAAO43P,gBAAkBquB,EAAcruB,eACpC53P,EAAO8nO,YAAcm+C,EAAcn+C,WAAa9nO,EAAO0mO,cAAgBu/C,EAAcv/C,aACxF1mO,EAAOkmR,wBAA0BD,EAAcC,uBAAyBlmR,EAAOmmR,SAAWF,EAAcE,QACxGnmR,EAAOwmO,kBAAoBy/C,EAAcz/C,iBAAmBxmO,EAAO4vE,cAAgBq2M,EAAcr2M,aACjG5vE,EAAO2vP,iBAAmBs2B,EAAct2B,gBAAkB3vP,EAAO4pO,cAAgBq8C,EAAcr8C,aAC/F5pO,EAAOy1C,WAAawwO,EAAcxwO,UAM1C8qO,EAAQ1hT,UAAUknT,oBAAsB,SAAU5tC,EAAU/zC,EAAUu6E,EAAWplR,EAAQ/4B,EAAO0H,GAC5F,IAAIzE,EAAO,KAMX,OALID,KAAK4iT,qBACL3iT,EAAO,IAAI4iT,GAA8BluC,EAAU/zC,EAAUu6E,EAAWplR,EAAQ/4B,EAAO0H,GACvF1E,KAAKs9S,cAAct9S,KAAMC,GACzByE,EAAQzE,EAAKyE,OAEVA,GAMXq4S,EAAQ1hT,UAAUmnT,mBAAqB,SAAU7tC,EAAU/zC,EAAUu6E,EAAWplR,EAAQ/4B,EAAOslT,GAC3F,IAAIriT,EAAO,KACPD,KAAK8iT,mBACL7iT,EAAO,IAAI8iT,GAA4BpuC,EAAU/zC,EAAUu6E,EAAWplR,EAAQ/4B,EAAOslT,GACrFtiT,KAAKu9S,YAAYv9S,KAAMC,KAO/B88S,EAAQ1hT,UAAUylT,eAAiB,SAAUnB,GAKzC,IAAK,IAJDn/S,EAAWR,KAAK+vO,YAAYvvO,SAC5B44O,KACA97O,EAAOqiT,EAAcriT,OAEhBnB,GADIwjT,EAAcvtR,SACd,GAAGj2B,EAAImB,EAAKb,OAAQN,IAAK,EAC9B0jK,EAAOviK,EAAKnB,IACX84R,QAAU,KACf77C,EAAM50O,KAAKq7J,GACXr/J,EAAS44O,MAAM70O,OAAOs7J,GAG1B,IAAS1jK,EAAI,EAAGA,EAAIwjT,EAAcxwR,OAAQhzB,IACtC,IACK,IAAIsnB,EAAItnB,EAAGyxI,EAAW+xK,EAAcxwR,OAASnvB,KAAKo9S,aAAa3gT,OAASgnB,EAAIk8R,EAAcxwR,OAAQ1L,GAAKmqH,EAAS,CACjH,IAAIiyB,EAAOu5E,EAAM31N,IACqB,IAAlCjjB,EAAS44O,MAAM76O,QAAQshK,IACvBr/J,EAAS44O,MAAMh1O,IAAIy7J,KAUnCk9I,EAAQsD,gBAAkB,EACnBtD,GACTrP,IAKEsV,GAAmC,WAMnC,SAASA,EAAkBruC,EAAU/zC,EAAUu6E,EAAWplR,EAAQ/4B,GAC9DgD,KAAKijT,aAAeriF,EACpB5gO,KAAKkjT,cAAgB/H,EACrBn7S,KAAK40O,cAAgB53O,EACrBgD,KAAKmjT,WAAaptR,EAClB/1B,KAAKm6R,YAAcxlB,EA0DvB,OAxDAr2Q,OAAOuJ,eAAem7S,EAAkB3nT,UAAW,YAM/CqM,IAAK,WACD,OAAO1H,KAAKijT,cAEhBt7S,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem7S,EAAkB3nT,UAAW,aAK/CqM,IAAK,WACD,OAAO1H,KAAKkjT,eAEhBv7S,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem7S,EAAkB3nT,UAAW,SAK/CqM,IAAK,WACD,OAAO1H,KAAK40O,eAEhBjtO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem7S,EAAkB3nT,UAAW,UAK/CqM,IAAK,WACD,OAAO1H,KAAKmjT,YAEhBx7S,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem7S,EAAkB3nT,UAAW,YAK/CqM,IAAK,WACD,OAAO1H,KAAKm6R,aAEhBxyR,YAAY,EACZC,cAAc,IAEXo7S,KAMPH,GAA+C,SAAUn2N,GAOzD,SAASm2N,EAA8BluC,EAAU/zC,EAAUu6E,EAAWplR,EAAQ/4B,EAAO0H,GACjF,IAAI3E,EAAQ2sF,EAAOprF,KAAKtB,KAAM20Q,EAAU/zC,EAAUu6E,EAAWplR,EAAQ/4B,IAAUgD,KAE/E,OADAD,EAAM2E,MAAQA,EACP3E,EA+BX,OAxCA8rF,GAAUg3N,EAA+Bn2N,GAWzCpuF,OAAOuJ,eAAeg7S,EAA8BxnT,UAAW,QAM3DqM,IAAK,WACD,OAAO1H,KAAKojT,OAEhB/7S,IAAK,SAAUrK,GACXgD,KAAKojT,MAAQpmT,GAEjB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeg7S,EAA8BxnT,UAAW,SAK3DqM,IAAK,WACD,OAAO1H,KAAK04S,WAEhBrxS,IAAK,SAAUrK,GACXgD,KAAK04S,UAAY17S,GAErB2K,YAAY,EACZC,cAAc,IAEXi7S,GACTG,IAKED,GAA6C,SAAUr2N,GAOvD,SAASq2N,EAA4BpuC,EAAU/zC,EAAUu6E,EAAWplR,EAAQ/4B,EAAO0H,GAC/E,IAAI3E,EAAQ2sF,EAAOprF,KAAKtB,KAAM20Q,EAAU/zC,EAAUu6E,EAAWplR,EAAQ/4B,IAAUgD,KAE/E,OADAD,EAAM24S,UAAYh0S,EACX3E,EAcX,OAvBA8rF,GAAUk3N,EAA6Br2N,GAWvCpuF,OAAOuJ,eAAek7S,EAA4B1nT,UAAW,SAMzDqM,IAAK,WACD,OAAO1H,KAAK04S,WAEhB/wS,YAAY,EACZC,cAAc,IAEXm7S,GACTC,IAKEK,GAAoC,WACpC,SAASA,KAiBT,OAfA/kT,OAAOuJ,eAAew7S,EAAmBhoT,UAAW,UAMhDqM,IAAK,WACD,OAAO1H,KAAKsjT,UAEhBj8S,IAAK,SAAUrK,GACXgD,KAAKsjT,SAAWtmT,GAEpB2K,YAAY,EACZC,cAAc,IAEXy7S,KAMPE,GAA0C,SAAU72N,GAOpD,SAAS62N,EAAyBxtR,EAAQ8pI,GACtC,IAAI9/J,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KAGjC,OAFAD,EAAMg2B,OAASA,EACfh2B,EAAM86R,QAAUh7H,EACT9/J,EA4BX,OAtCA8rF,GAAU03N,EAA0B72N,GAYpCpuF,OAAOuJ,eAAe07S,EAAyBloT,UAAW,UAMtDqM,IAAK,WACD,OAAO1H,KAAK6/S,YAEhBx4S,IAAK,SAAUrK,GACXgD,KAAK6/S,WAAa7iT,GAEtB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe07S,EAAyBloT,UAAW,QAKtDqM,IAAK,WACD,OAAO1H,KAAK66R,SAEhBlzR,YAAY,EACZC,cAAc,IAEX27S,GACTF,IAKEG,GAAwC,SAAU92N,GAOlD,SAAS82N,EAAuBzkT,GAC5B,IAAIgB,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KAEjC,OADAD,EAAMi/R,aAAejgS,EACdgB,EA4BX,OArCA8rF,GAAU23N,EAAwB92N,GAWlCpuF,OAAOuJ,eAAe27S,EAAuBnoT,UAAW,UAMpDqM,IAAK,WACD,OAAO1H,KAAKg/R,cAEhBr3R,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe27S,EAAuBnoT,UAAW,YAKpDqM,IAAK,WACD,OAAO1H,KAAKyjT,aAEhBp8S,IAAK,SAAUrK,GACXgD,KAAKyjT,YAAczmT,GAEvB2K,YAAY,EACZC,cAAc,IAEX47S,GACTH,IAKE/B,GAAiD,SAAU50N,GAO3D,SAAS40N,EAAgCvrR,EAAQ8pI,EAAM6jJ,GACnD,IAAI3jT,EAAQ2sF,EAAOprF,KAAKtB,KAAM+1B,EAAQ8pI,IAAS7/J,KAE/C,OADAD,EAAM2jT,SAAWA,EACV3jT,EAcX,OAvBA8rF,GAAUy1N,EAAiC50N,GAW3CpuF,OAAOuJ,eAAey5S,EAAgCjmT,UAAW,iBAM7DqM,IAAK,WACD,OAAO1H,KAAK0jT,UAEhB/7S,YAAY,EACZC,cAAc,IAEX05S,GACTiC,IAKE/B,GAA+C,SAAU90N,GAOzD,SAAS80N,EAA8BziT,GACnC,OAAO2tF,EAAOprF,KAAKtB,KAAMjB,IAAWiB,KAExC,OATA6rF,GAAU21N,EAA+B90N,GASlC80N,GACTgC,IAKE7B,GAAiC,WAMjC,SAASA,IACL3hT,KAAK2jT,eAAiB,IAAI9lD,GAAW,EAAG,EAAG,EAAG,GA8BlD,OA5BAv/P,OAAOuJ,eAAe85S,EAAgBtmT,UAAW,YAK7CqM,IAAK,WACD,OAAO1H,KAAK4jT,aAEhBv8S,IAAK,SAAUrK,GACXgD,KAAK4jT,YAAc5mT,GAEvB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe85S,EAAgBtmT,UAAW,UAK7CqM,IAAK,WACD,OAAO1H,KAAK2jT,gBAEhBt8S,IAAK,SAAUrK,GACXgD,KAAK2jT,eAAiB3mT,GAE1B2K,YAAY,EACZC,cAAc,IAEX+5S,KAMPT,GAAqC,SAAUx0N,GAO/C,SAASw0N,EAAoBrhJ,EAAM9pI,GAC/B,OAAO22D,EAAOprF,KAAKtB,KAAM6/J,EAAM9pI,IAAW/1B,KAE9C,OATA6rF,GAAUq1N,EAAqBx0N,GASxBw0N,GACTzT,IC51CEoW,GAA6B,WAK7B,SAASA,EAAYlxS,GACjB3S,KAAK2S,QAAUA,EAqJnB,OA/IAkxS,EAAYxoT,UAAU0F,MAAQ,SAAU6C,GACpC5D,KAAKiB,YAAcpF,OAAO6F,KAAK,GAAI,QAAS,UAAY7F,OAAO+zH,YAAc,UAAY/zH,OAAO8zH,WAAa,cAC7G3vH,KAAKiB,YAAYiuF,OAAO,EAAG,GAC3BlvF,KAAKiB,YAAY6iT,SAASC,OAAOC,WAAYD,OAAOE,aACpD,IAAI7rR,GACAC,QAAQ,EAAOy1B,YAAa9tD,KAAKkkT,eAAetgT,GAAWmzB,KvIyB9C,euIvBjB/2B,KAAK2S,QAAQ+T,QvIuBI,cuIvBiB0R,GAC7BA,EAASC,QACVp3B,EAAYm3B,EAAS01B,YAAa9tD,KAAKiB,cAQ/C4iT,EAAYxoT,UAAU6oT,eAAiB,SAAUtgT,GAC7C,IAAI1C,EAAMC,EAAc,OAiBxB,OAhBIyC,EACIA,aAAoBpF,MACpBoF,EAASxE,QAAQ,SAAUpC,GACvBkE,EAAIS,YAAY+uB,GAAW1zB,GAAO4E,WAAU,MAG3CgC,aAAoBuyH,QACzBj1H,EAAIS,YAAYiC,EAAShC,WAAU,IAGnCV,EAAIS,YAAY+uB,GAAW9sB,GAAUhC,WAAU,IAInDV,EAAIS,YAAY3B,KAAK2S,QAAQ3R,QAAQY,WAAU,IAE5CV,GAOX2iT,EAAYxoT,UAAU8oT,OAAS,SAAUz9S,EAAM26O,EAAUzoN,EAAawrR,EAAUpuS,EAAOD,GACnF,IAAIhW,EAAQC,KACRqkT,EAAerkT,KAAKskT,iBAAiBF,GACzCpuS,EAAQA,GAAgBquS,EAAaruS,MACrCD,EAASA,GAAkBsuS,EAAatuS,OACxC,IAAI/U,EAAUG,EAAc,UACxBmC,GAAI,aACJG,OACIuS,MAASA,EAAM9I,WACf6I,OAAUA,EAAO7I,cAGrBq3S,IAAe/4S,GAAQg/E,UAAUt9E,WAAW3O,QAAQ,mBAAqB,GAC7Eq6B,EAAcn7B,EAAkBm7B,GAAe8vO,GAAmBqG,UAAYn2O,EAC9E,IAAI4rR,EAAU,sFACVH,EAAapnS,IAAInb,UACjB,SACAs3B,EAAMv9B,OAAOomP,IAAIC,gBAAgB,IAAIT,KAAc,QAAT/6O,GAAkB89S,KAC3D,IAAKC,eAAiBC,kBAAkBL,EAAapnS,OAASvW,KAAM,mBACzE,GAAa,QAATA,EACA1G,KAAK2kT,gBAAgBtjE,EAAU36O,EAAM0yB,EAAKmrR,OAEzC,CACD,IAAIK,EAAU,IAAIzzN,MACd0zN,EAAQ7jT,EAAQytF,WAAW,MAC/Bm2N,EAAQjgO,kBAGJ,GAFAkgO,EAAM5zN,UAAU2zN,EAAS,EAAG,GAC5B/oT,OAAOomP,IAAIE,gBAAgB/oN,GACd,QAAT1yB,EAAgB,CAChB,IAAIm9R,EAAa,IAAIh8B,GACjBi9C,EAAc9jT,EAAQsuF,UAAU,cAAc//E,QAAQ,aAAc,sBACxEs0R,EAAW15O,aAAavxB,YAAcA,EACtCksR,EAAcA,EAAYzjT,MAAMyjT,EAAYvmT,QAAQ,KAAO,GAC3DslS,EAAWzqD,MAAMh1O,MAAMuwQ,SAAS1jL,UAAU,IAAIupL,GAAUsqC,GAAc,EAAG,EAAG9uS,EAAOD,GAC/EwuS,IACA1gB,EAAW70M,KAAKqyJ,EAAW,QAC3BwiD,EAAWvxR,gBAIXzW,OAAO6uF,UAAUq6N,iBACjBlpT,OAAO6uF,UAAUq6N,iBAAiB/jT,EAAQgkT,WAAY3jE,EAAW,IAAM36O,EAAKi2D,qBAG5E58D,EAAM4kT,gBAAgBtjE,EAAU36O,EAAM1F,EAAQsuF,UAAU,aAAa//E,QAAQ,YAAa,sBAAuBg1S,IAI7HK,EAAQtlT,IAAM85B,IAStByqR,EAAYxoT,UAAUspT,gBAAkB,SAAUtjE,EAAU36O,EAAM0yB,EAAKmrR,GACnEpjT,EAAc,KACVsC,OACIs+O,SAAYV,EAAW,IAAM36O,EAAKi2D,oBAClC3iC,KAAQZ,KAEbzlB,cAAc,IAAI6vM,WAAW+gG,EAAa,QAAU,QACnD78L,KAAM7rH,OACNopT,SAAS,EACTC,YAAY,MAQpBrB,EAAYxoT,UAAUipT,iBAAmB,SAAUF,GAC/C,IAAIpuS,EAAQ,EACRD,EAAS,EACT6kB,EAAU,GACVpK,EAAY,IAAIR,GAAY,IAAIwQ,WAChCl9B,GAAI,qBACJ0S,MAAO,IAAKD,OAAQ,MAexB,OAbAquS,EAASltR,IAAI,SAAUvkB,GACnB,IAAIsK,EAAMtK,EAAQ6d,UAAU5uB,WAAU,GAClCujT,EAAWxyS,EAAQod,SAAS+9C,aAC5BppE,MAAO,yBAA2BqR,EAAS,QAE/CovS,EAASxjT,YAAYsb,GACrBjH,EAAQ3J,KAAKC,IAAIqG,EAAQqiB,cAAchf,MAAOA,GAC9CD,GAAUpD,EAAQqiB,cAAcjf,OAChC6kB,GAAWjoB,EAAQ6d,UAAU1uB,UAC7B0uB,EAAU7uB,YAAYwjT,KAE1B30R,EAAUhtB,aAAa,QAASwS,EAAQ,IACxCwa,EAAUhtB,aAAa,SAAUuS,EAAS,KAEtCC,MAASA,EACTD,OAAUA,EACVkH,IAAOuT,IAGRqzR,KC/JPh4N,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GA6B5DgoR,GAAmC,SAAU14N,GAE7C,SAAS04N,IACL,OAAkB,OAAX14N,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAUu5N,EAAmB14N,GAI7BN,IACIllF,GAAS,IACVk+S,EAAkB/pT,UAAW,cAAU,GAC1C+wF,IACIrkF,GAAU8tB,MAAO,KAAM7f,MAAO,GAAKs/M,KACpC8vF,EAAkB/pT,UAAW,YAAQ,GACxC+wF,IACIllF,EAAS,SACVk+S,EAAkB/pT,UAAW,gBAAY,GACrC+pT,GACT5kP,IAKE6kP,GAA8B,SAAU34N,GAExC,SAAS24N,IACL,OAAkB,OAAX34N,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA0B/D,OA5BA6rF,GAAUw5N,EAAc34N,GAIxBN,IACIllF,GAAS,IACVm+S,EAAahqT,UAAW,8BAA0B,GACrD+wF,IACIllF,GAAS,IACVm+S,EAAahqT,UAAW,0BAAsB,GACjD+wF,IACIllF,GAAS,IACVm+S,EAAahqT,UAAW,+BAA2B,GACtD+wF,IACIllF,GAAS,IACVm+S,EAAahqT,UAAW,6BAAyB,GACpD+wF,IACIllF,EAAS,OACVm+S,EAAahqT,UAAW,YAAQ,GACnC+wF,IACIllF,GAAU,OAAQ,SAAU,UAAW,MAAO,WAC/Cm+S,EAAahqT,UAAW,oBAAgB,GAC3C+wF,IACIllF,GAAS,IACVm+S,EAAahqT,UAAW,iBAAa,GACxC+wF,IACIllF,GAAS,IACVm+S,EAAahqT,UAAW,uBAAmB,GACvCgqT,GACT7kP,IAYE8kP,GAAuB,SAAU54N,GAMjC,SAAS44N,EAAMtyS,EAAShS,GACpB,IAAIjB,EAAQ2sF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAInD,OAFAD,EAAMgnO,cAAgB,YACtBhnO,EAAMwlT,QAAU,MACTxlT,EAuhDX,OAjiDA8rF,GAAUy5N,EAAO54N,GAejB44N,EAAMjqT,UAAUoX,UAAY,WACxBzS,KAAKogH,eACLpgH,KAAKwlT,sBACLxlT,KAAK2N,aACL3N,KAAKykB,cAET6gS,EAAMjqT,UAAUmqT,oBAAsB,WAWlC,GAVAxlT,KAAKmtO,eAAgB,EACrBntO,KAAKuwB,aAAc,EACnBvwB,KAAKggO,kBACLhgO,KAAK6/N,gBACL7/N,KAAKo+N,cACLp+N,KAAKylT,kBAAkBzlT,KAAKs+N,MAC5Bt+N,KAAKylT,kBAAkBzlT,KAAKw/D,SACxBx/D,KAAK0lT,gBACL1lT,KAAK0lT,cAAc7/E,mBAEC,KAApB7lO,KAAKgB,QAAQsC,GAAW,CACxB,IAAIwkC,EAAatnC,SAASkN,uBAAuB,WAAWjR,OAC5DuD,KAAKgB,QAAQsC,GAAK,SAAWtD,KAAKulT,QAAU,IAAMz9Q,IAM1Dw9Q,EAAMjqT,UAAUsyG,OAAS,WACrB3tG,KAAK0mB,QxI7IK,QwI6IWmJ,MAAO7vB,OAC5BA,KAAK2lT,iBACL3lT,KAAK6b,WACL7b,KAAKstO,aAAe,IAAIwB,GAAO9uO,MAC/BA,KAAK4lT,oBACL5lT,KAAK6lT,yBACL7lT,KAAK8lT,0BACL9lT,KAAK+lT,iBACL/lT,KAAKgmT,uBACLhmT,KAAKsgF,eAOTglO,EAAMjqT,UAAU4qT,kBAAoB,SAAU5oT,GAC1C,OAAO2C,KAAK45G,aAAapkC,YAAYn4E,IAMzCioT,EAAMjqT,UAAUkvO,aAAe,WACvBvqO,KAAKkmT,cAAgBlmT,KAAKiwO,eAAen5M,SACzC92B,KAAKkmT,aAAaC,iBAAiBnmT,KAAK4hC,cAAe5hC,MAI3D,IAAK,IADD+e,EADAqnS,GAAsB,EAEjBjqT,EAAI,EAAG0F,EAAM7B,KAAK4hC,cAAcnlC,OAAQN,EAAI0F,EAAK1F,KACtD4iB,EAAS/e,KAAK4hC,cAAczlC,IACrB+X,SAAW6K,EAAOsnS,eAAYlrT,GACM,IAArC4jB,EAAOrY,KAAKnI,QAAQ,eAAiE,IAAzCwgB,EAAOgnN,SAASxnO,QAAQ,aAC5C,eAAvByB,KAAK+mO,gBAAqCq/E,IAC7CrnS,EAAOosN,sBAAsBpsN,EAAOrY,KAAKnI,QAAQ,QAAU,EAAGyB,MAC9DomT,GAAsB,GAG9BpmT,KAAK8vS,kBACL9vS,KAAKsmT,iBACL,IAAItlT,EAAUR,SAASyuB,eAAe,oBAClCjuB,GACAA,EAAQuD,UAGhB+gT,EAAMjqT,UAAUirT,eAAiB,WAC7BtmT,KAAKumT,eACLvmT,KAAKwmT,cACLxmT,KAAKymT,mBACL,IAAItlF,EAAcnhO,KAAKihO,aACvBjhO,KAAK0mT,qBAAqBvlF,GAC1BnhO,KAAK+wO,eACL/wO,KAAK2mT,eACL3mT,KAAK4mT,mBACL5mT,KAAK6mT,8BACL7mT,KAAK8mT,oBAKTxB,EAAMjqT,UAAU4lO,WAAa,WACzBjhO,KAAK+mT,cAAgB/mT,KAAK+vB,SAAS+9C,aAAcxqE,GAAItD,KAAKgB,QAAQsC,GAAK,oBACvE,IAAI69N,EAOJ,OANInhO,KAAKs+N,KAAK7hO,OAAS,GAAKuD,KAAKw/D,QAAQ/iE,OAAS,IAC9C0kO,EAAcnhO,KAAKouO,qBAAqBnN,cAExCjhO,KAAKgnT,iBACLhnT,KAAKgnT,gBAAgBC,gBAAgBjnT,KAAM,SAAUA,KAAK2/N,iBAEvDwB,GAKXmkF,EAAMjqT,UAAU01O,aAAe,WACvB/wO,KAAKkmT,cAAgBlmT,KAAKkmT,aAAah1E,kBAAkBz0O,QACzDuD,KAAKkmT,aAAan1E,aAAa/wO,KAAMA,KAAKiwO,eAAgBjwO,KAAKkmT,aAAa71E,cAEhFrwO,KAAKgB,QAAQW,YAAY3B,KAAKwwB,YAKlC80R,EAAMjqT,UAAUwrT,4BAA8B,WAC1C,IAAI7lT,EAAU0vB,GAAW1wB,KAAKgB,QAAQsC,GAAK,sBAC3C,GAAKtC,EAAL,CAGA,IAAI0xB,EAAO1yB,KAAKgB,QAAQ4K,wBACpBm9D,EAAUr4C,GAAW1wB,KAAKgB,QAAQsC,GAAK,QAAQsI,wBACnD5K,EAAQ0D,MAAM8H,KAAOH,KAAKC,IAAIy8D,EAAQv8D,KAAOkmB,EAAKlmB,KAAM,GAAK,KAC7DxL,EAAQ0D,MAAMgI,IAAML,KAAKC,IAAIy8D,EAAQr8D,IAAMgmB,EAAKhmB,IAAK,GAAK,OAE9D44S,EAAMjqT,UAAU6rT,yBAA2B,WACvClnT,KAAKmnT,wBACLnnT,KAAKusO,eAAiBvsO,KAAK+vB,SAAS+9C,aAAcxqE,GAAItD,KAAKgB,QAAQsC,GAAK,qBACpEtD,KAAKonT,WAAW3qT,SAChBuD,KAAKqnT,kBAAoBrnT,KAAK+vB,SAAS+9C,aAAcxqE,GAAItD,KAAKgB,QAAQsC,GAAK,yBAE3EtD,KAAKsnT,kBACLtnT,KAAKunT,kBAAoBvnT,KAAK+vB,SAAS+9C,aAAcxqE,GAAItD,KAAKgB,QAAQsC,GAAK,yBAE/EtD,KAAKitO,kBAAoBjtO,KAAK+vB,SAAS+9C,aAAcxqE,GAAItD,KAAKgB,QAAQsC,GAAK,yBAE/EgiT,EAAMjqT,UAAUisT,cAAgB,WAE5B,IAAK,IADDE,EACKppT,EAAK,EAAGyE,EAAK7C,KAAK+e,OAAQ3gB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAGrD,GADAopT,IADa3kT,EAAGzE,GACKksO,WAAW7tO,OAE5B,MAGR,OAAO+qT,GAEXlC,EAAMjqT,UAAUqrT,qBAAuB,SAAUvlF,GAE7CnhO,KAAKknT,2BACL,IAAIO,EAAaznT,KAAKmB,cAAc,OACpCsmT,EAAWnkT,GAAKtD,KAAKgB,QAAQsC,GAAK,qBAClCmkT,EAAWjkT,aAAa,QAAS,sBACjCxD,KAAKgB,QAAQW,YAAY8lT,GAErBznT,KAAKixB,QAAQgP,QACbjgC,KAAKwwB,UAAU7uB,YAAY3B,KAAK+vB,SAAS+9C,aAAcxqE,GAAItD,KAAKgB,QAAQsC,GAAK,mBAAoBoB,MAAO,0BAExG1E,KAAKs+N,KAAK7hO,OAAS,GAAKuD,KAAKw/D,QAAQ/iE,OAAS,IAC9CuD,KAAK0nT,sBACL1nT,KAAK2nT,sBACL3nT,KAAKksO,eACLlsO,KAAK4nT,0BAA0BzmF,KAGvCmkF,EAAMjqT,UAAU6wO,aAAe,WAC3B,IAAK,IAAI9tO,EAAK,EAAGyE,EAAK7C,KAAK4hC,cAAexjC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAI4f,EAAOnb,EAAGzE,GACV4f,EAAK8Y,UACLZ,GAAalY,GACbA,EAAKkuN,aAAalsO,KAAMge,EAAK/L,QAGrC,IAAI8hB,EAAW/zB,KAAK+vB,SAASsrF,cACzB/3G,GAAMtD,KAAKgB,QAAQsC,GAAK,sBACxByJ,EAAK/M,KAAKouO,qBAAqBzQ,eAAe5wN,EAC9CC,EAAKhN,KAAKouO,qBAAqBzQ,eAAe3wN,EAC9CgJ,MAAShW,KAAKouO,qBAAqBzQ,eAAe3nN,MAClDD,OAAU/V,KAAKouO,qBAAqBzQ,eAAe5nN,OACnDqoB,KAAQ,cACR8G,eAAgB,EAChB5G,OAAU,SAEdt+B,KAAKusO,eAAe5qO,YAAYoyB,GAChC/zB,KAAKwwB,UAAU7uB,YAAY3B,KAAKusO,iBAEpC+4E,EAAMjqT,UAAUqsT,oBAAsB,WAClC,IAAK,IAAItpT,EAAK,EAAGyE,EAAK7C,KAAKonT,WAAYhpT,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAIypT,EAAYhlT,EAAGzE,GACf4B,KAAKo2B,GAAiByxR,EAAUnhT,MAAQ,oBACxC1G,KAAKo2B,GAAiByxR,EAAUnhT,MAAQ,mBAAmBohT,wBAAwB9nT,KAAM6nT,EAAWA,EAAU51S,OAGlHjS,KAAKqnT,mBACLrnT,KAAKwwB,UAAU7uB,YAAY3B,KAAKqnT,oBAGxC/B,EAAMjqT,UAAUssT,oBAAsB,WAClC,IAAK,IAAIvpT,EAAK,EAAGyE,EAAK7C,KAAK4hC,cAAexjC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAI2gB,EAASlc,EAAGzE,GACZ2gB,EAAOurN,WAAW7tO,QAClBuD,KAAK4nO,gBAAgBmgF,qBAAqBhpS,EAAQ/e,MAGtDA,KAAKunT,mBACLvnT,KAAKwwB,UAAU7uB,YAAY3B,KAAKunT,oBAGxCjC,EAAMjqT,UAAUusT,0BAA4B,SAAUzmF,GACvB,eAAvBnhO,KAAK+mO,eACL/mO,KAAKwwB,UAAU7uB,YAAY3B,KAAK+mT,eAEpC/mT,KAAKwwB,UAAU7uB,YAAYw/N,GACvBnhO,KAAKu0E,YAAcv0E,KAAK8vE,aAAaivJ,iBAAmB/+N,KAAKmvH,cAAcxoD,mBAC3Ej2C,GAAW1wB,KAAKgB,QAAQsC,GAAK,sBAAsB3B,YAAY3B,KAAKmvH,eAEpEnvH,KAAKgnT,iBACLhnT,KAAKgnT,gBAAgBC,gBAAgBjnT,KAAM,OAAQA,KAAK2/N,iBAEvD3/N,KAAKixB,QAAQgP,QACdjgC,KAAKwwB,UAAU7uB,YAAY3B,KAAK+vB,SAAS+9C,aAAcxqE,GAAItD,KAAKgB,QAAQsC,GAAK,mBAAoBoB,MAAO,2BAGhH4gT,EAAMjqT,UAAUsrT,aAAe,WACvB3mT,KAAKu0E,YAAcv0E,KAAKu0E,WAAWyqJ,YAAch/N,KAAK8vE,aAAak4O,WAAahoT,KAAKu0E,WAAW0zO,cAChGjoT,KAAKu0E,WAAW2zO,iBAAiBloT,KAAMA,KAAK2/N,kBAGpD2lF,EAAMjqT,UAAUyrT,iBAAmB,WAC3B9mT,KAAKmoT,kBACLnoT,KAAKmoT,iBAAiBC,kBAAkB13R,GAAW1wB,KAAKgB,QAAQsC,GAAK,wBAG7EgiT,EAAMjqT,UAAUurT,iBAAmB,WAC/B,IAAIyB,KACAroT,KAAKsmO,kBACL+hF,EAAsB3pT,KAAWsB,KAAKsmO,gBAAgB+hF,oBAAqB,MAAM,GACjFroT,KAAKsmO,gBAAgBgiF,gBAAgBtoT,OAErCqoT,EAAoB5rT,OAAS,IAC7BuD,KAAKsmO,gBAAgB+hF,oBAAsBA,EAC3CroT,KAAKsmO,gBAAgBiiF,gBAAgBvoT,KAAMA,KAAKqmO,iBAGxDi/E,EAAMjqT,UAAUilF,YAAc,SAAUqtB,QACrB,IAAXA,IAAqBA,GAAS,GAClC3tG,KACK8nO,mBAAqB,EAE1B,IAAK,IADD5hC,GAAQ,EACH9nM,EAAK,EAAGyE,EAAK7C,KAAK4hC,cAAexjC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAI24N,EAAWl0N,EAAGzE,GACb24N,EAASjgM,SAAY92B,KAAKiwO,eAAen5M,QAIpB,cAAtBigM,EAAS5rB,UAAkD,cAAtB4rB,EAAS5rB,UAC9CnrM,KAAKwoT,qBAAqBzxF,GAJ1B/2N,KAAK8nO,qBAOb,IAAK,IAAI7jO,EAAK,EAAGwG,EAAKzK,KAAKonT,WAAYnjT,EAAKwG,EAAGhO,OAAQwH,IAAM,CACzD,IAAI4jT,EAAYp9S,EAAGxG,GACnB,GAAI4jT,EAAU/iP,WAAY,CACtB,IAAI2jP,EAAgBZ,EACpB7nT,KAAKwoT,qBAAqBC,GAC1BviH,GAAQ,GAGZv4F,KAAY3tG,KAAK4hC,cAAcnlC,QAAUuD,KAAK8nO,qBAAuB9nO,KAAK4hC,cAAcnlC,QAAUypM,KAClGlmM,KAAKuqO,eACLvqO,KAAK0mB,QAAQ,UAAYmJ,MAAO7vB,SAGxCslT,EAAMjqT,UAAUmtT,qBAAuB,SAAUzpS,GAC7CA,EAAOooN,SACPpoN,EAAOwqN,SACPxqN,EAAOgrN,WAAa,IAAI4D,GAAK5uN,EAAO+lD,YAAc9kE,KAAK8kE,WAAY/lD,EAAO+9C,OAC1E/9C,EAAOkY,UACPlY,EAAO8qN,mBAAmB7pO,OAE9BslT,EAAMjqT,UAAUy0S,gBAAkB,WAC9B,IAAI7yQ,EAASj9B,KAAKi9B,OAEdyrR,EAAc,EAEdl8S,EAAOywB,EAAOzwB,KACdwJ,EAAQhW,KAAKg1B,cAAchf,MAAQxJ,EAAOywB,EAAOxwB,MAAQzM,KAAKilC,OAAOjvB,MACzEhW,KAAK2gC,mBACD3gC,KAAK0gC,QACL1gC,KAAK2gC,gBAAkBF,GAASzgC,KAAK0gC,MAAO1gC,KAAKkhC,WAAYlrB,GAC7D0yS,EAAe75R,GAAY7uB,KAAK0gC,MAAO1gC,KAAKkhC,YAAYnrB,OAAS/V,KAAK2gC,gBAAgBlkC,OAN5E,IAQd,IAAIiQ,EAAMuwB,EAAOvwB,IAAMg8S,EAAc1oT,KAAK4jO,UAAU3+L,OAAOjvB,MAAQ,EAC/DD,EAAS/V,KAAKg1B,cAAcjf,OAASrJ,EAAM1M,KAAKilC,OAAOjvB,MAAQinB,EAAOtwB,OAC1E3M,KAAK49N,gBAAkB,IAAIroM,GAAK/oB,EAAME,EAAKsJ,EAAOD,GAC9C/V,KAAKkmT,cACLlmT,KAAKkmT,aAAa91E,sBAAsBpwO,KAAK49N,gBAAiB59N,KAAKg1B,eAEvEh1B,KAAKouO,qBAAqB1Q,YAAY19N,KAAK49N,kBAK/C0nF,EAAMjqT,UAAU0F,MAAQ,SAAUuC,GACZ,IAAIugT,GAAY7jT,MACtBe,MAAMuC,IAOtBgiT,EAAMjqT,UAAU8oT,OAAS,SAAUz9S,EAAM26O,EAAUzoN,EAAawrR,EAAUpuS,EAAOD,GAC7E,IAAI4yS,EAAc,IAAI9E,GAAY7jT,MAClCokT,EAAWA,IAAuBpkT,MAClC2oT,EAAYxE,OAAOz9S,EAAM26O,EAAUzoN,EAAawrR,EAAUpuS,EAAOD,IAKrEuvS,EAAMjqT,UAAU0qT,eAAiB,WAC7B,IAAK,IAAI3nT,EAAK,EAAGyE,EAAK7C,KAAK4hC,cAAexjC,EAAKyE,EAAGpG,OAAQ2B,IAGtD,IAAK,IAFD2gB,EAASlc,EAAGzE,GACZwqT,EAAa,EACR3kT,EAAK,EAAGwG,EAAKsU,EAAOurN,WAAYrmO,EAAKwG,EAAGhO,OAAQwH,IAAM,CAC3D,IACI4kT,EADYp+S,EAAGxG,GAERmyB,GAAiByyR,EAAUniT,MAClC1G,KAAK4nO,kBACLihF,EAAU52S,MAAQ22S,EAClBC,EAAUC,YAAc/pS,EAAO9M,MAC/BjS,KAAK4nO,gBAAgBmhF,qBAAqBF,EAAW7oT,MACjD6oT,EAAUn1E,eACVm1E,EAAUn1E,aAAa18M,UAAYjY,EAAOiY,UAC1C6xR,EAAUn1E,aAAas1E,UAAYjqS,EAAOiqS,UAC1ChpT,KAAK4hC,cAAcp9B,KAAKqkT,EAAUn1E,gBAG1Ck1E,MAIZtD,EAAMjqT,UAAUuqT,kBAAoB,WAChC,IAAI7mS,EAAS/e,KAAK+e,OAAO,GACrBA,IACA/e,KAAKm2B,qBAAwD,IAAhCpX,EAAOrY,KAAKnI,QAAQ,SAAmByB,KAAKmgO,eACnC,IAAhCphN,EAAOrY,KAAKnI,QAAQ,QAAkByB,KAAKmgO,cAAuC,eAAvBngO,KAAK+mO,eAE1E/mO,KAAKouO,qBAA8C,eAAvBpuO,KAAK+mO,cAAkC/mO,KAAKipT,mBAAqBjpT,KAAKkpT,kBAC5F,IAAI1rF,GAAyBx9N,OAEvCslT,EAAMjqT,UAAU2qT,qBAAuB,WACnC,IAAI7vS,EAEA8yD,GAAQjpE,KAAK6zB,aAAc7zB,KAAKsgO,cACpCr3J,EAA8B,cAAvBjpE,KAAK+mO,cAAgC99J,EAAKzuD,OAAOxa,KAAKipE,MAAQA,EACrEjpE,KAAK2/N,mBACD3/N,KAAKu0E,aACLv0E,KAAKu0E,WAAW40O,UAAYnpT,KAAKu0E,WAAW60O,aAAangP,IAASjpE,KAAK8vE,aAAak4O,UACpFhoT,KAAKwwB,UAAUhtB,aAAa,SAAUxD,KAAKu0E,WAAW40O,UAAY,UAAY,QAC1EnpT,KAAK8+N,kBACL9+N,KAAK8+N,gBAAgB71J,KAAOA,IAGpC,IAAK,IAAI9sE,EAAI,EAAG0F,EAAMonE,EAAKxsE,OAAQN,EAAI0F,EAAK1F,IAAK,EAC7Cga,EAAO8yD,EAAK9sE,IACP4iB,UACL5I,EAAKqqN,UACL,IAAK,IAAIpiO,EAAK,EAAGyE,EAAK7C,KAAK4hC,cAAexjC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIirT,EAAWxmT,EAAGzE,GAClB4B,KAAKspT,SAASD,EAAUlzS,GAAM,GAElC,IAAK,IAAIlS,EAAK,EAAGwG,EAAKzK,KAAKonT,WAAYnjT,EAAKwG,EAAGhO,OAAQwH,IAAM,CACzD,IAAI4jT,EAAYp9S,EAAGxG,GACnBjE,KAAKspT,SAASzB,EAAW1xS,GAAM,GAE/BnW,KAAK8+N,iBACL9+N,KAAK8+N,gBAAgByqF,SAASpzS,EAAMnW,MAEhB,MAApBmW,EAAKyiB,aACL54B,KAAK2/N,gBAAgBn7N,KAAK2R,GAG9BnW,KAAKs+N,KAAK7hO,OAAS,GAAKuD,KAAKw/D,QAAQ/iE,OAAS,GAC9CuD,KAAKouO,qBAAqB3O,WAGlC6lF,EAAMjqT,UAAUiuT,SAAW,SAAUvqS,EAAQ5I,EAAMqzS,GAC3CzqS,EAAOiY,YAAc7gB,EAAK4gB,MAA6B,MAApBhY,EAAOiY,WAAmC,iBAAd7gB,EAAK4gB,MACpE5gB,EAAKyiB,YAAc54B,KAAKm2B,oBAAsB,WAAa,aAC3DpX,EAAOjH,MAAQ3B,EACXqzS,GACArzS,EAAK4I,OAAOva,KAAKua,KAGhBA,EAAOiqS,YAAc7yS,EAAK4gB,MAA6B,MAApBhY,EAAOiqS,WAAmC,iBAAd7yS,EAAK4gB,QACzE5gB,EAAKyiB,YAAc54B,KAAKm2B,oBAAsB,aAAe,WAC7DpX,EAAOnH,MAAQzB,EACXqzS,GACArzS,EAAK4I,OAAOva,KAAKua,KAI7BumS,EAAMjqT,UAAUyqT,wBAA0B,WAEtC,IAAK,IADD3pT,EAAI,EACCiC,EAAK,EAAGyE,EAAK7C,KAAKonT,WAAYhpT,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAIypT,EAAYhlT,EAAGzE,GACfqqT,EAAgBZ,EAChBnhT,EAAO0vB,GAAiBqyR,EAAc/hT,MAC1C,GAAI1G,KAAK0G,EAAO,mBAAoB,CAChC+hT,EAAcx2S,MAAQ9V,EACtB6D,KAAK0G,EAAO,mBAAmBqiT,qBAAqBN,EAAezoT,MACnE,IAAK,IAAIiE,EAAK,EAAGwG,EAAKg+S,EAAc/0E,aAAczvO,EAAKwG,EAAGhO,OAAQwH,IAAM,CACpE,IAAIyvO,EAAejpO,EAAGxG,IAClB4jT,EAAU4B,YAAc5B,EAAU/iP,aAClC9kE,KAAK4hC,cAAcp9B,KAAKkvO,IAIpCv3O,MAIRmpT,EAAMjqT,UAAUgvO,0BAA4B,SAAUtrN,GAClD,GAAI/e,KAAKonT,WAAW3qT,OAAQ,CAExB,GAAIsiB,aAAkBupN,IAA8B,cAApBvpN,EAAOosL,SACnC,IAAK,IAAI/sM,EAAK,EAAGyE,EAAK7C,KAAKonT,WAAYhpT,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAIypT,EAAYhlT,EAAGzE,GACfypT,EAAU4B,aAAe1qS,EAAOgY,MAAS8wR,EAAU/iP,YACjC+iP,EACFlgF,cAAc5oN,EAAQ/e,WAIzC+e,aAAkB00N,IACL10N,EACF4oN,cAAc5oN,aAAkBupN,GAASvpN,EAAS,KAAM/e,QAIpFslT,EAAMjqT,UAAUwqT,uBAAyB,WACrC,IAAI9mS,EACJ/e,KAAK4hC,iBAGL,IAAK,IAFDyvD,EAASrxF,KAAKoxD,SAAS30D,OAASuD,KAAKoxD,SAAW1kC,GAAe1sB,KAAKqb,OACpE4D,EAAQoyE,EAAO50F,OACVN,EAAI,EAAG0F,EAAM7B,KAAK+e,OAAOtiB,OAAQN,EAAI0F,EAAK1F,IAAK,CAIpD,OAHA4iB,EAAS/e,KAAK+e,OAAO5iB,GACrB4iB,EAAO9M,MAAQ9V,EACf4iB,EAAO8qD,SAAW9qD,EAAOqf,MAAQizD,EAAOl1F,EAAI8iB,GACpCF,EAAOrY,MACX,IAAK,MACL,IAAK,cACL,IAAK,iBACD,IAA4C,IAAxC1G,KAAK+e,OAAO,GAAGrY,KAAKnI,QAAQ,OAC5B,SAEJ,MACJ,IAAK,QACL,IAAK,QACD,GAA2B,eAAvByB,KAAK+mO,cACL,SAEJ,GAA2B,eAAvB/mO,KAAK+mO,gBAAyD,OAArBhoN,EAAOiY,WAA2C,OAArBjY,EAAOiqS,WACvD,OAArBjqS,EAAOiY,WAA2C,OAArBjY,EAAOiqS,WACf,OAArBjqS,EAAOiY,WAA2C,OAArBjY,EAAOiqS,WACrC,SAEJ,MACJ,QACI,GAA2B,eAAvBhpT,KAAK+mO,eAAkC/mO,KAAK+e,OAAO,GAAGrY,KAAKnI,QAAQ,QAAU,EAC7E,SAIZyB,KAAK4hC,cAAcp9B,KAAKua,GACxB/e,KAAK+e,OAAO5iB,GAAK4iB,IAGzBumS,EAAMjqT,UAAUmrT,YAAc,WAC1B,GAAIxmT,KAAK0gC,MAAO,CACZ,IAAI7sB,EAA2C,SAAlC7T,KAAKkhC,WAAWC,cAA2B,QAClB,QAAlCnhC,KAAKkhC,WAAWC,cAA0B,MAAQ,SACtDnhC,KAAK6jO,YAAch1M,GAAY7uB,KAAK0gC,MAAO1gC,KAAKkhC,YAChD,IACIlgC,EAAU20B,GADA,IAAIC,GAAW51B,KAAKgB,QAAQsC,GAAK,cAAew9B,GAAe9gC,KAAKg1B,cAAeh1B,KAAKi9B,OAAOzwB,KAAMxM,KAAKi9B,OAAOxwB,MAAOzM,KAAKkhC,YAAalhC,KAAKi9B,OAAOvwB,IAAmC,EAA3B1M,KAAK6jO,YAAkB,OAAQ,EAAIhwN,EAAQ7T,KAAK2gC,gBAAiB,GAAI,QAC9M3gC,KAAKkhC,WAAYlhC,KAAKkhC,WAAWrL,OAAS71B,KAAK01B,WAAWtI,WAAYptB,KAAKwwB,WAC9GxvB,EAAQwC,aAAa,aAAcxD,KAAKg0D,aAAeh0D,KAAK0gC,OAC5D1/B,EAAQwC,aAAa,WAAYxD,KAAK4lH,SAAS14G,cAGvDo4S,EAAMjqT,UAAUkrT,aAAe,WAC3B,IAAIvwS,EAAQhW,KAAKilC,OAAOjvB,MACpB0c,EAAO,IAAIsqM,GAAWh9N,KAAKgB,QAAQsC,GAAK,eAAgBtD,KAAKstB,YAActtB,KAAK01B,WAAWpI,WAAYttB,KAAKilC,OAAQ,EAAG,IAAI1P,GAAKvf,EAAQ,EAAGA,EAAQ,EAAGhW,KAAKg1B,cAAchf,MAAQA,EAAOhW,KAAKg1B,cAAcjf,OAASC,IACxNhW,KAAKgvB,WAAahvB,KAAK+vB,SAASuU,cAAc5R,GAC9C1yB,KAAKwwB,UAAU7uB,YAAY3B,KAAKgvB,aAEpCs2R,EAAMjqT,UAAUorT,iBAAmB,WAC/B,GAA2B,eAAvBzmT,KAAK+mO,cACL,OAAO,KAGP,IAAIr0M,EAAO,IAAIsqM,GAAWh9N,KAAKgB,QAAQsC,GAAK,mBAAoBtD,KAAK4jO,UAAUt2M,YAActX,MAAOhW,KAAK4jO,UAAU3+L,OAAOjvB,MAAO6f,MAAO71B,KAAK4jO,UAAU3+L,OAAOpP,OAAS71B,KAAK01B,WAAWnI,YAAcvtB,KAAK4jO,UAAUn2N,QAASzN,KAAKouO,qBAAqBzQ,gBACvP39N,KAAKgvB,WAAahvB,KAAK+vB,SAASuU,cAAc5R,GAC9C1yB,KAAKwwB,UAAU7uB,YAAY3B,KAAKgvB,aAQxCs2R,EAAMjqT,UAAUquT,UAAY,SAAUnzR,GAClC,IAAK,IAAIn4B,EAAK,EAAGytO,EAAqBt1M,EAAkBn4B,EAAKytO,EAAmBpvO,OAAQ2B,IAAM,CAC1F,IAAI2gB,EAAS8sN,EAAmBztO,GAChC2gB,EAAS,IAAIupN,GAAOtoO,KAAM,SAAU+e,GACpC/e,KAAK+e,OAAOva,KAAKua,GAErB/e,KAAK8qD,WAOTw6P,EAAMjqT,UAAUsuT,aAAe,SAAU13S,GACrCjS,KAAK+e,OAAO0J,OAAOxW,EAAO,GAC1BjS,KAAK8qD,WAQTw6P,EAAMjqT,UAAUiX,QAAU,WAClBtS,KAAK8+N,iBACL9+N,KAAK8+N,gBAAgBxsN,UAEzBtS,KAAKogH,eACL1zB,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKgB,QAAQ8C,UAAUS,OAAO,YAKlC+gT,EAAMjqT,UAAU0kC,cAAgB,WAC5B,MAAO,SAMXulR,EAAMjqT,UAAU+yG,eAAiB,WAE7B,OAAOpuG,KAAK4uG,cADK,SAAU,uBAM/B02M,EAAMjqT,UAAUsqT,eAAiB,WAC7B3lT,KAAK4pT,YACLppR,GAAUxgC,OAKdslT,EAAMjqT,UAAU+kH,aAAe,WAE3B,IAAIxE,EAAapwG,GAAQigF,gBACrB8wB,EAAY/wG,GAAQkgF,eACpBm+N,EAAYr+S,GAAQmgF,cACpB8wB,EAAcjxG,GAAQC,UAAY,eAAiB,aAEvDlG,GAAahB,OAAOvE,KAAKgB,QAAS46G,EAAY57G,KAAK8pT,kBACnDvkT,GAAahB,OAAOvE,KAAKgB,QAASu7G,EAAWv8G,KAAK+pT,WAClDxkT,GAAahB,OAAOvE,KAAKgB,QAAS6oT,EAAW7pT,KAAKgqT,UAClDzkT,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAKiqT,mBAChD1kT,GAAahB,OAAOvE,KAAKgB,QAAS,cAAehB,KAAKkqT,iBACtD3kT,GAAahB,OAAOvE,KAAKgB,QAASy7G,EAAaz8G,KAAKmqT,YACpDtuT,OAAOe,oBAAqB4O,GAAQwlB,SAAY,gBAAiBn1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKoqT,cAExJ9E,EAAMjqT,UAAUopB,WAAa,WAEzB,IAAIg4F,EAAcjxG,GAAQC,UAAY,eAAiB,aAEvDlG,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQigF,gBAAiBzrF,KAAK8pT,iBAAkB9pT,MAC/EuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQkgF,eAAgB1rF,KAAK+pT,UAAW/pT,MACvEuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQmgF,cAAe3rF,KAAKgqT,SAAUhqT,MACrEuF,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAKiqT,kBAAmBjqT,MAChEuF,GAAanB,IAAIpE,KAAKgB,QAAS,cAAehB,KAAKkqT,gBAAiBlqT,MACpEuF,GAAanB,IAAIpE,KAAKgB,QAASy7G,EAAaz8G,KAAKmqT,WAAYnqT,MAC7DnE,OAAOa,iBAAkB8O,GAAQwlB,SAAY,gBAAiBn1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKoqT,YAAY9uT,KAAK0E,OAClKA,KAAKqqT,UAAYrqT,KAAKqqT,UAAU/uT,KAAK0E,MACrC,IAAIy7G,GAAMz7G,KAAKgB,SAAW07H,QAAS18H,KAAKqqT,UAAW/tM,iBAAkB,MAErEt8G,KAAK+kQ,SAAS/kQ,KAAKgB,UAEvBskT,EAAMjqT,UAAU6uT,gBAAkB,SAAU5tT,GACxC,OAAI0D,KAAK+tO,UAAU9tM,SAAUjgC,KAAKsqT,iBACX,IAAlBhuT,EAAMy2H,SAAiC,IAAhBz2H,EAAMi8G,OAAqC,UAAtBj8G,EAAMiuT,cACnDjuT,EAAMopB,iBACNppB,EAAMiqI,mBACC,IAIf++K,EAAMjqT,UAAU0pQ,SAAW,SAAU/jQ,GACjC,IAAIwpT,EAAUxqT,KAAK8vE,aACf26O,EAAgBD,EAAQE,wBAA0BF,EAAQG,oBACnC,SAAvB3qT,KAAKqmO,eAA4BrmO,KAAK+tO,UAAU9tM,OACpDj/B,EAAQ0D,MAAMg3G,YAAc+uM,EAAgB,OAAS,UACrDzpT,EAAQ0D,MAAMkmT,cAAgBH,EAAgB,OAAS,UACvDzpT,EAAQ0D,MAAMmmT,iBAAmB,OACjC7pT,EAAQ0D,MAAMomT,aAAe,OAC7B9pT,EAAQ0D,MAAMqmT,iBAAmB,OACjC/pT,EAAQ0D,MAAMwP,SAAW,WACzBlT,EAAQ0D,MAAM6pC,QAAU,SAO5B+2Q,EAAMjqT,UAAU2vT,cAAgB,WAC5B,MAAQ,gBAAiBnvT,QAAU,wBAAyBA,QAOhEypT,EAAMjqT,UAAUgvT,UAAY,SAAUxpT,GAMlC,OALAb,KAAKkmO,OAAUrlO,GAAKA,EAAEi8G,cAAc18C,eAAmBv/D,EAAEi8G,cAAc18C,eAAe,GAAU,QAAI,EACpGpgE,KAAKmmO,OAAUtlO,GAAKA,EAAEi8G,cAAc18C,eAAmBv/D,EAAEi8G,cAAc18C,eAAe,GAAU,QAAI,EACpGpgE,KAAKiuO,WAAY,EACjBjuO,KAAKirT,WAAWjrT,KAAKkmO,OAAQlmO,KAAKmmO,QAClCnmO,KAAK+N,OAAO,UAAWlN,IAChB,GAKXykT,EAAMjqT,UAAU4vT,WAAa,SAAUn/S,EAAOI,GAC1C,IAAI68D,EAAUr4C,GAAW1wB,KAAKgB,QAAQsC,GAAK,QAAQsI,wBAC/C8mB,EAAO1yB,KAAKgB,QAAQ4K,wBACxB5L,KAAKmmO,OAAUj6N,EAAQwmB,EAAKhmB,IAAOL,KAAKC,IAAIy8D,EAAQr8D,IAAMgmB,EAAKhmB,IAAK,GACpE1M,KAAKkmO,OAAUp6N,EAAQ4mB,EAAKlmB,KAAQH,KAAKC,IAAIy8D,EAAQv8D,KAAOkmB,EAAKlmB,KAAM,IAO3E84S,EAAMjqT,UAAU+uT,YAAc,SAAUvpT,GACpC,IAAId,EAAQC,KACZA,KAAKmtO,eAAgB,EACrB,IAAI75I,GACAzjE,MAAO7vB,KACP+2B,KxIxtBS,UwIytBTm0R,YAAa,IAAIz7R,GAAK,EAAG,GACzB07R,aAAc,IAAI17R,GAAKzvB,KAAKg1B,cAAchf,MAAOhW,KAAKg1B,cAAcjf,SAiBxE,OAfI/V,KAAK8jT,UACL5jT,aAAaF,KAAK8jT,UAEtB9jT,KAAK8jT,SAAW3jT,WAAW,WACnBJ,EAAMwoF,YACNroF,aAAaH,EAAM+jT,WAGvB/jT,EAAM4lT,iBACNryN,EAAI43N,YAAcnrT,EAAMi1B,cACxBj1B,EAAM2mB,QxItuBG,UwIsuBc4sE,GACvBvzF,EAAMq+N,cACNr+N,EAAMwqO,eACNxqO,EAAM2mB,QAAQ,UAAYmJ,MAAO9vB,MAClC,MACI,GAOXulT,EAAMjqT,UAAU0uT,UAAY,SAAUlpT,GAClC,IAAIiL,EACAI,EACAk/S,EAcJ,MAbe,cAAXvqT,EAAE6F,MACF1G,KAAKgxB,SAAU,EAEfllB,GADAs/S,EAAWvqT,GACMu/D,eAAe,GAAGrK,QACnC7pD,EAAQk/S,EAAShrP,eAAe,GAAGpK,UAGnCh2D,KAAKgxB,QAA4B,UAAlBnwB,EAAE0pT,aAA6C,MAAlB1pT,EAAE0pT,aAAuBvqT,KAAKgxB,QAC1EllB,EAAQjL,EAAEk1D,QACV7pD,EAAQrL,EAAEm1D,SAEdh2D,KAAKirT,WAAWn/S,EAAOI,GACvBlM,KAAKqrT,iBAAiBxqT,IACf,GAOXykT,EAAMjqT,UAAU8uT,WAAa,SAAUtpT,GACnC,IAAIiL,EACAI,EACAk/S,EAcJ,MAbe,eAAXvqT,EAAE6F,MACF1G,KAAKgxB,SAAU,EAEfllB,GADAs/S,EAAWvqT,GACMu/D,eAAe,GAAGrK,QACnC7pD,EAAQk/S,EAAShrP,eAAe,GAAGpK,UAGnCh2D,KAAKgxB,QAA4B,UAAlBnwB,EAAE0pT,aAA6C,MAAlB1pT,EAAE0pT,YAC9Cz+S,EAAQjL,EAAEk1D,QACV7pD,EAAQrL,EAAEm1D,SAEdh2D,KAAKirT,WAAWn/S,EAAOI,GACvBlM,KAAKsrT,kBAAkBzqT,IAChB,GAOXykT,EAAMjqT,UAAUiwT,kBAAoB,SAAUzqT,GAC1C,IAAIG,EAAUH,EAAEsG,OACZs1G,EAAcjxG,GAAQC,UAAY,eAAiB,aAIvD,OAHAzL,KAAK0mB,QAAQgyM,IAAmBvxN,OAAQnG,EAAQsC,GAAIyJ,EAAG/M,KAAKkmO,OAAQl5N,EAAGhN,KAAKmmO,SAC5EnmO,KAAKurT,aAAc,EACnBvrT,KAAK+N,OAAO0uG,EAAa57G,IAClB,GAOXykT,EAAMjqT,UAAU4uT,kBAAoB,SAAUppT,GAC1C,IAAIG,EAAUH,EAAEsG,OAMhB,OALAnH,KAAK0mB,QAAQ+xM,IAAmBtxN,OAAQnG,EAAQsC,GAAIyJ,EAAG/M,KAAKkmO,OAAQl5N,EAAGhN,KAAKmmO,SACxEnmO,KAAKwrT,YACLxrT,KAAKyrT,kBxIj0BO,cwIm0BhBzrT,KAAK+N,OAAO,QAASlN,IACd,GAEXykT,EAAMjqT,UAAUowT,kBAAoB,SAAUnvT,GAC1C,IACI+xO,EADO,IAAI1I,GAAU3lO,MACJ8lO,UACjBuI,EAAUtvN,QAAUsvN,EAAUl7M,OAC9BnzB,KAAK0mB,QAAQpqB,GACTyiB,OAAQsvN,EAAUtvN,OAClBoU,MAAOk7M,EAAUl7M,MACjBwiM,YAAa0Y,EAAUtvN,OAAO9M,MAAO2lB,WAAYy2M,EAAUl7M,MAAMlhB,MACjElF,EAAG/M,KAAKkmO,OAAQl5N,EAAGhN,KAAKmmO,UASpCm/E,EAAMjqT,UAAUgwT,iBAAmB,SAAUxqT,GACzC,IAAIG,EAAUH,EAAEsG,OAYhB,OAXAnH,KAAK0mB,QAAQ8xM,IAAkBrxN,OAAQnG,EAAQsC,GAAIyJ,EAAG/M,KAAKkmO,OAAQl5N,EAAGhN,KAAKmmO,SACvEnmO,KAAK0rT,WACL1rT,KAAKyrT,kBxIz1BM,awI41BVzrT,KAAKgxB,UACNhxB,KAAK2rT,aAAa9qT,EAAGb,KAAKkmO,OAAQlmO,KAAKmmO,QACvCnmO,KAAK4rT,YAAY/qT,EAAGb,KAAKkmO,OAAQlmO,KAAKmmO,SAE1CnmO,KAAK+N,OAAOvC,GAAQkgF,eAAgB7qF,GACpCb,KAAKgxB,SAAU,GACR,GAEXs0R,EAAMjqT,UAAUswT,aAAe,SAAUrvT,EAAOyQ,EAAGC,EAAGgkB,GACnC10B,EAAM6K,OAAO7D,KACTtD,KAAKgB,QAAQsC,GAAK,eAAoBhH,EAAM6K,OAAO6U,YAAYzd,QAAQ,QAAU,EAChGuyB,GAAY9wB,KAAK0gC,MAAO3zB,EAAGC,EAAGhN,KAAKgB,QAAQ4D,YAAa5E,KAAKgB,QAAQsC,GAAK,qBAAsBotB,GAAW1wB,KAAKgB,QAAQsC,GAAK,sBAAuB0tB,GAGpJP,GAAczwB,KAAKgB,QAAQsC,GAAK,uBAGxCgiT,EAAMjqT,UAAUuwT,YAAc,SAAUtvT,EAAOyQ,EAAGC,EAAGgkB,GACjD,IAAImW,EAAW7qC,EAAM6K,OAAO7D,IACtB6jC,EAAS5oC,QAAQ,cAAgB,GAAM4oC,EAAS5oC,QAAQ,yBAA2B,IACpFjC,EAAM6K,OAAO6U,YAAYzd,QAAQ,QAAU,EAC5CuyB,GAAY9wB,KAAKolO,cAAcj+L,GAAWp6B,EAAGC,EAAGhN,KAAKgB,QAAQ4D,YAAa5E,KAAKgB,QAAQsC,GAAK,yBAA0BotB,GAAW1wB,KAAKgB,QAAQsC,GAAK,sBAAuB0tB,GAG1KP,GAAczwB,KAAKgB,QAAQsC,GAAK,2BAGxCgiT,EAAMjqT,UAAU+pO,cAAgB,SAAUt2M,GACtC,IAAI+8R,EACJ,OAAI/8R,EAAKvwB,QAAQ,cAAgB,GAC7BstT,EAAU/8R,EAAKvf,QAAQvP,KAAKgB,QAAQsC,GAAI,IAAKiM,QAAQ,aAAc,IAAKrS,MAAM,KACvE8C,KAAK2/N,gBAAgBvrM,SAASy3R,EAAM,GAAI,KAAKr3R,cAAcJ,SAASy3R,EAAM,GAAI,KAAK3vF,eAG1F2vF,EAAU/8R,EAAKvf,QAAQvP,KAAKgB,QAAQsC,GAAI,IAAKiM,QAAQ,8BAA+B,IAAIA,QAAQ,QAAS,IAAKrS,MAAM,KAC5G8C,KAAK2/N,gBAAgBvrM,SAASy3R,EAAM,GAAI,KAAKjwF,iBAAiBxnM,SAASy3R,EAAM,GAAI,KACpFC,WAAW13R,SAASy3R,EAAM,GAAI,KAAS,OAQpDvG,EAAMjqT,UAAUyuT,iBAAmB,SAAUjpT,GACzC,IAAIiL,EACAI,EACA/E,EACAikT,EACAz/S,EAASH,GAAQob,SAAW,GAAK,GACjC8L,EAAO1yB,KAAKgB,QAAQ4K,wBACpB5K,EAAUH,EAAEsG,OAChBnH,KAAK0mB,QAAQiyM,IAAkBxxN,OAAQnG,EAAQsC,GAAIyJ,EAAG/M,KAAKkmO,OAAQl5N,EAAGhN,KAAKmmO,SAC5D,eAAXtlO,EAAE6F,MACF1G,KAAKgxB,SAAU,EAEfllB,GADAs/S,EAAWvqT,GACMu/D,eAAe,GAAGrK,QACnC7pD,EAAQk/S,EAAShrP,eAAe,GAAGpK,QACnC7uD,EAASikT,EAASjkT,SAGlBnH,KAAKgxB,QAA4B,UAAlBnwB,EAAE0pT,YACjBz+S,EAAQjL,EAAEk1D,QACV7pD,EAAQrL,EAAEm1D,QACV7uD,EAAStG,EAAEsG,QAEf,IAAI4hE,EAAUr4C,GAAW1wB,KAAKgB,QAAQsC,GAAK,QAAQsI,wBAWnD,OAVA5L,KAAK+rT,WAAa/rT,KAAKgsT,mBAAsBlgT,EAAQ4mB,EAAKlmB,KAAQH,KAAKC,IAAIy8D,EAAQv8D,KAAOkmB,EAAKlmB,KAAM,GACrGxM,KAAKisT,WAAajsT,KAAKksT,mBAAsBhgT,EAAQwmB,EAAKhmB,IAAOL,KAAKC,IAAIy8D,EAAQr8D,IAAMgmB,EAAKhmB,IAAK,GAC9F1M,KAAKgxB,UACLhxB,KAAKmsT,aAAe,IAAI/rS,MAAOC,UAAYrgB,KAAKosT,YAAmE,IAAtDjlT,EAAO7D,GAAG/E,QAAQyB,KAAKgB,QAAQsC,GAAK,eAC5FtD,KAAK+rT,WAAapgT,GAAU3L,KAAKkmO,QAAUlmO,KAAK+rT,WAAapgT,GAAU3L,KAAKkmO,UAC5ElmO,KAAKisT,WAAatgT,GAAU3L,KAAKmmO,QAAUnmO,KAAKisT,WAAatgT,GAAU3L,KAAKmmO,UAC5EnmO,KAAKkmO,OAASv6N,GAAU3L,KAAK+rT,YAAc/rT,KAAKkmO,OAASv6N,GAAU3L,KAAK+rT,cACxE/rT,KAAKmmO,OAASx6N,GAAU3L,KAAKisT,YAAcjsT,KAAKmmO,OAASx6N,GAAU3L,KAAKisT,aAEjFjsT,KAAK+N,OAAOvC,GAAQigF,gBAAiB5qF,IAC9B,GAOXykT,EAAMjqT,UAAU2uT,SAAW,SAAUnpT,GACjC,IAAIqL,EACAJ,EACAs/S,EAcJ,MAbe,aAAXvqT,EAAE6F,MAEFoF,GADAs/S,EAAWvqT,GACMu/D,eAAe,GAAGrK,QACnC/1D,KAAKgxB,SAAU,EACf9kB,EAAQk/S,EAAShrP,eAAe,GAAGpK,UAGnC9pD,EAAQrL,EAAEm1D,QACVlqD,EAAQjL,EAAEk1D,QACV/1D,KAAKgxB,QAA4B,UAAlBnwB,EAAE0pT,aAA6C,MAAlB1pT,EAAE0pT,aAElDvqT,KAAKirT,WAAWn/S,EAAOI,GACvBlM,KAAKqsT,eAAexrT,IACb,GAOXykT,EAAMjqT,UAAUgxT,eAAiB,SAAUxrT,GACvC,IAAIG,EAAUH,EAAEsG,OAUhB,OATAnH,KAAK0mB,QAAQkyM,IAAgBzxN,OAAQnG,EAAQsC,GAAIyJ,EAAG/M,KAAKkmO,OAAQl5N,EAAGhN,KAAKmmO,SACzEnmO,KAAKurT,aAAc,EACfvrT,KAAKgxB,UACLhxB,KAAK2rT,aAAa9qT,EAAGb,KAAKkmO,OAAQlmO,KAAKmmO,OAAQnmO,KAAKgxB,SACpDhxB,KAAK4rT,YAAY/qT,EAAGb,KAAKkmO,OAAQlmO,KAAKmmO,OAAQnmO,KAAKgxB,SACnDhxB,KAAKosT,WAAY,IAAIhsS,MAAOC,UAAY,KAE5CrgB,KAAKusO,eAAe7gO,gBAAgB,aACpC1L,KAAK+N,OAAOvC,GAAQmgF,cAAe9qF,IAC5B,GAKXykT,EAAMjqT,UAAUsS,WAAa,WACzB3N,KAAK0wE,KAAO,IAAI27B,GAChBrsG,KAAKssT,qBACLtsT,KAAK45G,aAAe,IAAIR,GAAKp5G,KAAK+/B,gBAAiB//B,KAAKusT,sBAAuBvsT,KAAKgO,SAKxFs3S,EAAMjqT,UAAUmxT,mBAAqB,SAAUC,EAAiB7xR,GAC5D,IAEI55B,EAFAP,EAAaiwB,GAAW1wB,KAAKgB,QAAQsC,GAAK,2BAC1C+jD,EAAarnD,KAAKowD,YAAYq8P,GAElB,OAAZ7xR,IACAysB,EAAWzsB,QAAUA,EACjBn6B,GACAgwB,GAAczwB,KAAKgB,QAAQsC,GAAK,eAAiBmpT,GACjDzrT,EAAUhB,KAAKmB,cAAc,OAC7BnB,KAAKmoT,iBAAiBuE,kBAAkBrlQ,EAAYolQ,EAAiBzrT,GACrEP,EAAWkB,YAAYX,EAAQoZ,SAAS,KAGxCpa,KAAKmoT,iBAAiBC,kBAAkB13R,GAAW1wB,KAAKgB,QAAQsC,GAAK,yBAOjFgiT,EAAMjqT,UAAUixT,mBAAqB,WACjCtsT,KAAKusT,uBACDI,OAAQ,SACR/gH,KAAM,OACNghH,QAAS,UACTC,IAAK,MACLC,MAAO,QACPC,UAAW,eAMnBzH,EAAMjqT,UAAUwgB,SAAW,WAEvB7b,KAAK01B,WAAa9I,GAAc5sB,KAAKqb,QAOzCiqS,EAAMjqT,UAAU+2F,gBAAkB,WAC9B,IAIIx/E,EAJA7S,EAAQC,KACRozF,KACAr0E,EAAS/e,KAAK+e,OACdiuS,GAAmB,EAEnBC,GAAkB,EAClBC,GAAkB,EAClB1C,EAAUxqT,KAAK8vE,aAoFnB,OAnFA9vE,KAAK+mO,cAAiBhoN,EAAOtiB,OAAS,IAAyB,UAAnBsiB,EAAO,GAAGrY,MAAuC,UAAnBqY,EAAO,GAAGrY,MAAqB,aAAe,YACpH1G,KAAKixB,QAAQgP,QACbmzD,EAAQ5uF,MACJouF,OAAQ,UACR3yF,MAAOD,QAGf+e,EAAOmY,IAAI,SAAUl6B,GACjB+C,EAAMotT,SAAYptT,EAAMkwO,eAAen5M,UAA4B,KAAf95B,EAAM+5B,QAAkBh3B,EAAMotT,UAClFv6S,GAA4C,IAA/B5V,EAAM0J,KAAKnI,QAAQ,OAAgBvB,EAAM0J,KAAK6I,QAAQ,MAAO,IAAM,SAAWvS,EAAM0J,KAAO,SACxGumT,EAAkBjwT,EAAMwwB,SAASsJ,SAAWm2R,EAC5CC,EAAkBlwT,EAAMipO,OAAOzjJ,UAAU1rD,SAAWo2R,EAC/C95N,EAAQx2D,KAAK,SAAUwwR,GACxB,OAAOA,EAAcx6N,SAAWhgF,KAEhCwgF,EAAQ5uF,MACJouF,OAAQhgF,EACR3S,MAAOF,EAAOgf,KAGM,eAAxBhf,EAAMgnO,eACN3zI,EAAQ5uF,MACJouF,OAAQ51F,EAAM+oO,SAAW,SACzB9lO,MAAOF,EAAOgf,OAI1B/e,KAAKqtT,qBAAqBj6N,GAC1BpzF,KAAKstT,qBAAqBl6N,GAC1BA,EAAUpzF,KAAKutT,eAAen6N,GAC9B45N,EAAmBhtT,KAAKowD,YAAYxzB,KAAK,SAAU5/B,GAC/C,OAA0B,OAAlBA,EAAM49B,UAEdqyR,GACA75N,EAAQ5uF,MACJouF,OAAQ,WACR3yF,MAAOD,KAAM+e,KAGjB/e,KAAKmtT,UACL/5N,EAAQ5uF,MACJouF,OAAQ,SACR3yF,MAAOD,QAGY,eAAvBA,KAAK+mO,gBAAmCyjF,EAAQE,wBAC7CF,EAAQgD,yBAA2BhD,EAAQG,oBAAsBH,EAAQxC,aAC5E50N,EAAQ5uF,MACJouF,OAAQ,OACR3yF,MAAOD,KAAMA,KAAK8vE,gBAElB06O,EAAQzrF,iBACR3rI,EAAQ5uF,MACJouF,OAAQ,YACR3yF,MAAOD,SAIQ,SAAvBA,KAAKqmO,eAAqD,eAAvBrmO,KAAK+mO,eACxC/mO,KAAKqmO,cAAc9nO,QAAQ,SAAW,GACtC60F,EAAQ5uF,MACJouF,OAAQ,YACR3yF,MAAOD,QAGXktT,GACA95N,EAAQ5uF,MACJouF,OAAQ,YACR3yF,MAAOD,KAAM+e,KAGjBiuS,GACA55N,EAAQ5uF,MACJouF,OAAQ,aACR3yF,MAAOD,QAGY,eAAvBA,KAAK+mO,eAAkC/mO,KAAK+tO,UAAU9tM,QACtDmzD,EAAQ5uF,MACJouF,OAAQ,YACR3yF,MAAOD,QAGRozF,GAEXkyN,EAAMjqT,UAAUkyT,eAAiB,SAAUn6N,GACvC,IAAIusI,KACJA,EAAgBn7N,KAAKxE,KAAK6zB,cAC1B8rM,EAAgBn7N,KAAKxE,KAAKsgO,cAQ1B,IAAK,IANDmtF,GAAkB,EAClBC,GAAkB,EAClBC,GAAqB,EACrBC,GAAmB,EACnBC,GAA0B,EAC1BC,GAAoB,EACf1vT,EAAK,EAAG2vT,EAPjBpuF,EAAkBA,EAAgBnlN,OAAOxa,KAAKipE,MAOQ7qE,EAAK2vT,EAAkBtxT,OAAQ2B,IAAM,CACvF,IAAI+X,EAAO43S,EAAkB3vT,GAC7BqvT,EAAqC,aAAnBt3S,EAAKmb,WAA4Bm8R,EACnDC,EAAqC,aAAnBv3S,EAAKmb,WAA4Bo8R,EACnDC,EAAwC,gBAAnBx3S,EAAKmb,WAA+Bq8R,EACzDE,EAA6C,qBAAnB13S,EAAKmb,WAAoCu8R,EACnED,EAAmB5tT,KAAKguT,wBAAwB73S,EAAK83S,aAAeL,EACpEE,EAAoB33S,EAAKylN,iBAAiBn/N,OAAS,GAAKqxT,EAsC5D,OApCIL,GACAr6N,EAAQ5uF,MACJouF,OAAQ,WACR3yF,MAAOD,QAGX0tT,GACAt6N,EAAQ5uF,MACJouF,OAAQ,WACR3yF,MAAOD,QAGX2tT,GACAv6N,EAAQ5uF,MACJouF,OAAQ,cACR3yF,MAAOD,QAGX4tT,GACAx6N,EAAQ5uF,MACJouF,OAAQ,YACR3yF,MAAOD,QAGX8tT,GACA16N,EAAQ5uF,MACJouF,OAAQ,kBACR3yF,MAAOD,QAGX6tT,GACAz6N,EAAQ5uF,MACJouF,OAAQ,mBACR3yF,MAAOD,QAGRozF,GAEXkyN,EAAMjqT,UAAUgyT,qBAAuB,SAAUj6N,GAC7C,IAAI86N,EACAC,EACA/G,EAAapnT,KAAKonT,WACtB,GAAIpnT,KAAKonT,WAAW3qT,OAAQ,CACxB22F,EAAQ5uF,MACJouF,OAAQ,aACR3yF,MAAOD,QAEXonT,EAAWlwR,IAAI,SAAU2wR,GACrBqG,EAAaA,GAAiC,SAAnBrG,EAAUnhT,KACrCynT,EAAaA,GAAiC,mBAAnBtG,EAAUnhT,OAErCwnT,GACA96N,EAAQ5uF,MACJouF,OAAQ,eACR3yF,MAAOD,QAGXmuT,GACA/6N,EAAQ5uF,MACJouF,OAAQ,kBACR3yF,MAAOD,QAGf,IAAK,IAAI5B,EAAK,EAAGyE,EAAK7C,KAAKonT,WAAYhpT,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAIypT,EAAYhlT,EAAGzE,GACnBg1F,EAAQ5uF,MACJouF,OAAQi1N,EAAUnhT,KAAO,YACzBzG,MAAOD,WAKvBslT,EAAMjqT,UAAUiyT,qBAAuB,SAAUl6N,GAkB7C,IAAK,IAjBDg7N,EACAC,EACApvT,EAAU,SAAU8f,GACpB,IAAIuvS,EACJvvS,EAAOurN,WAAWpzM,IAAI,SAAUq3R,GAC5BD,EAAeA,GAAgBC,EAAUtoF,OAAOnvM,QAChDs3R,KAASA,GAA8B,WAAnBG,EAAU7nT,MAAwC,kBAAnB6nT,EAAU7nT,MAC7D2nT,KAAWA,GAAaD,KAExBE,GACAl7N,EAAQ5uF,MACJouF,OAAQ,SACR3yF,MAAOkvG,EAAQpwF,MAIvBowF,EAASnvG,KACJ5B,EAAK,EAAGyE,EAAK7C,KAAK+e,OAAQ3gB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAErDa,EADa4D,EAAGzE,KAGhBgwT,GAAUC,IACVj7N,EAAQ5uF,MACJouF,OAAQ,YACR3yF,MAAOD,QAGXouT,GACAh7N,EAAQ5uF,MACJouF,OAAQ,aACR3yF,MAAOD,QAGXquT,GACAj7N,EAAQ5uF,MACJouF,OAAQ,eACR3yF,MAAOD,SAInBslT,EAAMjqT,UAAU2yT,wBAA0B,SAAUQ,GAEhD,IAAK,IADD13R,GAAU,EACL14B,EAAK,EAAGqwT,EAAeD,EAAYpwT,EAAKqwT,EAAahyT,OAAQ2B,IAAM,CAExE,GADgBqwT,EAAarwT,GACf04B,QAAS,CACnBA,GAAU,EACV,OAGR,OAAOA,GAOXwuR,EAAMjqT,UAAUuuT,UAAY,WACpBppT,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,uBAC1CiB,EAAO/D,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,uBAErD,IAAIorT,EAAe,EAOnB,GANI1uT,KAAKu0E,YAAcv0E,KAAKu0E,WAAWo6O,cACnC3uT,KAAKu0E,WAAWo6O,YAAYrrT,GAAK,GACjCtD,KAAKu0E,WAAWo6O,YAAYnrT,aAAa,UAAW,KACpDxD,KAAKwwB,UAAU7uB,YAAY3B,KAAKu0E,WAAWo6O,aAC3CD,EAAe,GAEf1uT,KAAKwwB,UAAW,CAChB,KAAOxwB,KAAKwwB,UAAUjf,WAAW9U,OAASiyT,GACtC1uT,KAAKwwB,UAAUlrB,YAAYtF,KAAKwwB,UAAUzT,aAEzC/c,KAAKwwB,UAAU8K,iBAAmBt7B,KAAKwwB,UAAU/vB,YAClD8D,EAAOvE,KAAKwwB,aAIxB80R,EAAMjqT,UAAUoqT,kBAAoB,SAAUmJ,GAC1C,IAAK,IAAIxwT,EAAK,EAAGywT,EAAgBD,EAAaxwT,EAAKywT,EAAcpyT,OAAQ2B,IAAM,CAChEywT,EAAczwT,GACpB6qE,UAQbq8O,EAAMjqT,UAAU+iO,YAAc,WAC1B,IAAIjoN,EAAOnW,KAAK6zB,aAChB1d,EAAKuc,KAAO,IAAI6C,QAAKp6B,OAAWA,EAAW,EAAG,IAC9Cgb,EAAOnW,KAAKsgO,cACPtI,YAAa,EAClB7hN,EAAKuc,KAAO,IAAI6C,QAAKp6B,OAAWA,EAAW,EAAG,GAC9C,IAAK,IAAIiD,EAAK,EAAGyE,EAAK7C,KAAKipE,KAAM7qE,EAAKyE,EAAGpG,OAAQ2B,IAAM,EAEnD+X,EADWtT,EAAGzE,IAETs0B,KAAO,IAAI6C,QAAKp6B,OAAWA,EAAW,EAAG,GAC9Cgb,EAAK6hN,YAAa,IAG1BstF,EAAMjqT,UAAUyzT,WAAa,SAAU34S,GACnC,SAAKA,EAAK4gB,OAAS5gB,EAAKmb,aAGxBtxB,KAAKylT,kBAAkBzlT,KAAKw/D,SAC5Bx/D,KAAKylT,kBAAkBzlT,KAAKs+N,MAC5Bt+N,KAAKgmT,uBACLhmT,KAAKsgF,eACE,IAOXglO,EAAMjqT,UAAU0tF,kBAAoB,SAAUiF,EAASC,GACnD,IAAIl+D,GAAW,EACXg/R,GAAgB,EACpB,IAAoC,IAAhCzwT,OAAOhB,KAAK0wF,GAASvxF,QAA4C,eAA5B6B,OAAOhB,KAAK0wF,GAAS,MAI9DhuF,KAAKmtO,eAAgB,GAChBntO,KAAKuwB,aAAa,CACnB,IAAK,IAAInyB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,GAAU5vF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,eACD2wT,EAAgB/uT,KAAK8uT,WAAW9gO,EAAQn6D,cACpCm6D,EAAQn6D,aAAa4nM,qBACrB1rM,GAAW,GAEVi+D,EAAQn6D,aAAam7R,mBACtBD,GAAgB,GAEpB,MACJ,IAAK,eACDA,EAAgB/uT,KAAK8uT,WAAW9gO,EAAQsyI,cACpCtyI,EAAQsyI,aAAa7E,qBACrB1rM,GAAW,GAEVi+D,EAAQsyI,aAAa0uF,mBACtBD,GAAgB,GAEpB,MACJ,IAAK,OACD,IAAK,IAAI9qT,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAK0wF,EAAQ/kB,MAAOhlE,EAAKwG,EAAGhO,OAAQwH,IAAM,CACnE,IAAIgO,EAAQxH,EAAGxG,GACf8qT,EAAgBA,GAAiB/uT,KAAK8uT,WAAW9gO,EAAQ/kB,KAAKh3D,IACzD+7E,EAAQ/kB,KAAKh3D,GAAO+8S,mBACrBD,GAAgB,GAGxB,MACJ,IAAK,SACL,IAAK,QACD/uT,KAAK2lT,iBACLoJ,GAAgB,EAChB,MACJ,IAAK,QACDA,GAAgB,EAChB,MACJ,IAAK,aACG/gO,EAAQ9sD,aAAe8sD,EAAQ9sD,WAAW/R,MAAQ6+D,EAAQ9sD,WAAWN,cACrEmuR,GAAgB,EAGhBh/R,GAAW,EAEf,MACJ,IAAK,SACDA,GAAW,EACX,MACJ,IAAK,aACD/vB,KAAKsgF,aAAY,GACjByuO,GAAgB,EAChB,MACJ,IAAK,SAID,IAAK,IAHDltT,EAAM7B,KAAK+e,OAAOtiB,OAClBwyT,GAAgB,EAChBlwS,OAAS,EACJ5iB,EAAI,EAAGA,EAAI0F,EAAK1F,KACrB4iB,EAASivE,EAAQjvE,OAAO5iB,MACT4iB,EAAO+lD,YAAc/lD,EAAOspN,OAAStpN,EAAOyT,OAASzT,EAAOoQ,MACvEpQ,EAAOkd,MAAQld,EAAOmd,KAAOnd,EAAOrd,MAAQqd,EAAO9c,SACnDgtT,GAAgB,GAGpBA,IACAjvT,KAAKsgF,aAAY,GACjByuO,GAAgB,GAEpB,MACJ,IAAK,gBACG/gO,EAAQle,aAAaivJ,iBAAmB9wI,EAAQne,aAAaivJ,mBAC7DgwF,GAAgB,GAEpBh/R,GAAW,EACX,MACJ,IAAK,aACDA,GAAW,EACX,MACJ,IAAK,YACGi+D,EAAQ41I,UAAU3+L,QAAU+oD,EAAQ41I,UAAU3+L,OAAOjvB,QACrD+4S,GAAgB,GAEpBh/R,GAAW,EACX,MACJ,IAAK,iBACIi+D,EAAQiiJ,eAAe3iN,YAAe0gE,EAAQiiJ,eAAexiO,UAC9DshT,GAAgB,GAEpBh/R,GAAW,EACX,MACJ,IAAK,WACD/vB,KAAK6lT,yBACL91R,GAAW,EACX,MACJ,IAAK,sBACL,IAAK,gBACG/vB,KAAKsmO,iBAAmBt4I,EAAQq4I,gBAA4D,IAA3Cr4I,EAAQq4I,cAAc9nO,QAAQ,SAC/EyB,KAAKsmO,gBAAgBiiF,gBAAgBvoT,KAAMiuF,EAAQo4I,eAEvD,MACJ,IAAK,gBACGrmO,KAAKsmO,kBAAoBt4I,EAAQkhO,eAAiBlvT,KAAKsmO,gBAAgB+hF,oBAAoB5rT,OAAS,GACpGuD,KAAKsmO,gBAAgBiiF,gBAAgBvoT,KAAMiuF,EAAQo4I,eAEvD,MACJ,IAAK,QACDrmO,KAAKmtO,eAAgB,EACrB,MACJ,IAAK,SACL,IAAK,eACDzgJ,EAAOrxF,UAAUyvD,QAAQxpD,KAAKtB,MAC9B,MACJ,IAAK,UACDA,KAAK0lT,cAAc7/E,oBAI1BkpF,GAAiBh/R,IAClB/vB,KAAK4pT,YACL5pT,KAAKsmT,iBACLtmT,KAAK0mB,QAAQ,UAAYmJ,MAAO7vB,QAEhC+uT,IACA/uT,KAAK4pT,YACL5pT,KAAKo+N,cACLp+N,KAAKuqO,eACLvqO,KAAK0mB,QAAQ,UAAYmJ,MAAO7vB,UAI5CosF,IACIllF,EAAS,OACVo+S,EAAMjqT,UAAW,aAAS,GAC7B+wF,IACIllF,EAAS,OACVo+S,EAAMjqT,UAAW,cAAU,GAC9B+wF,IACIllF,EAAS,KACVo+S,EAAMjqT,UAAW,aAAS,GAC7B+wF,IACIllF,EAAS,KACVo+S,EAAMjqT,UAAW,kBAAc,GAClC+wF,IACIrkF,EAAQ+hN,GAAMkL,eAAgBK,KAC/BiwF,EAAMjqT,UAAW,kBAAc,GAClC+wF,IACIrkF,KAAYytN,KACb8vF,EAAMjqT,UAAW,cAAU,GAC9B+wF,IACIrkF,GAAU8tB,MAAO,UAAW7f,MAAO,GAAKs/M,KACzCgwF,EAAMjqT,UAAW,cAAU,GAC9B+wF,IACIllF,EAAS,OACVo+S,EAAMjqT,UAAW,kBAAc,GAClC+wF,IACIrkF,GAAUk9B,QAAUpP,MAAO,KAAM7f,MAAO,IAAOsX,WAAY,eAAiBioM,KAC7E+vF,EAAMjqT,UAAW,iBAAa,GACjC+wF,IACIrkF,GAAUgvB,KAAM,gBAAkBojM,KACnCmrF,EAAMjqT,UAAW,oBAAgB,GACpC+wF,IACIrkF,GAAUgvB,KAAM,gBAAkBojM,KACnCmrF,EAAMjqT,UAAW,oBAAgB,GACpC+wF,IACI/jF,OAAiBgxN,KAClBisF,EAAMjqT,UAAW,YAAQ,GAC5B+wF,IACI/jF,OAAiBs3D,KAClB2lP,EAAMjqT,UAAW,eAAW,GAC/B+wF,IACI/jF,OAAiB8xN,KAClBmrF,EAAMjqT,UAAW,YAAQ,GAC5B+wF,IACI/jF,OAAiBigO,KAClBg9E,EAAMjqT,UAAW,cAAU,GAC9B+wF,IACI/jF,OAAiB2wN,KAClBssF,EAAMjqT,UAAW,mBAAe,GACnC+wF,IACIllF,OACDo+S,EAAMjqT,UAAW,gBAAY,GAChC+wF,IACIllF,EAAS,aACVo+S,EAAMjqT,UAAW,aAAS,GAC7B+wF,IACIrkF,KAAY8tN,KACbyvF,EAAMjqT,UAAW,eAAW,GAC/B+wF,IACIrkF,KAAYq9S,KACbE,EAAMjqT,UAAW,iBAAa,GACjC+wF,IACIrkF,KAAYwnO,KACb+1E,EAAMjqT,UAAW,sBAAkB,GACtC+wF,IACIrkF,KAAYs9S,KACbC,EAAMjqT,UAAW,oBAAgB,GACpC+wF,IACIllF,EAAS,SACVo+S,EAAMjqT,UAAW,qBAAiB,GACrC+wF,IACIllF,GAAS,IACVo+S,EAAMjqT,UAAW,qBAAiB,GACrC+wF,IACI/jF,KAAeotN,KAChB6vF,EAAMjqT,UAAW,2BAAuB,GAC3C+wF,IACIllF,GAAS,IACVo+S,EAAMjqT,UAAW,4BAAwB,GAC5C+wF,IACIllF,GAAS,IACVo+S,EAAMjqT,UAAW,oBAAgB,GACpC+wF,IACI/jF,KAAeorO,KAChB6xE,EAAMjqT,UAAW,kBAAc,GAClC+wF,IACIllF,EAAS,OACVo+S,EAAMjqT,UAAW,mBAAe,GACnC+wF,IACIllF,EAAS,IACVo+S,EAAMjqT,UAAW,gBAAY,GAChC+wF,IACIllF,GAAS,IACVo+S,EAAMjqT,UAAW,iCAA6B,GACjD+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,eAAW,GAC/B+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,wBAAoB,GACxC+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,mBAAe,GACnC+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,cAAU,GAC9B+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,YAAQ,GAC5B+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,yBAAqB,GACzC+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,oBAAgB,GACpC+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,kBAAc,GAClC+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,mBAAe,GACnC+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,oBAAgB,GACpC+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,uBAAmB,GACvC+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,2BAAuB,GAC3C+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,4BAAwB,GAC5C+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,qBAAiB,GACrC+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,sBAAkB,GACtC+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,uBAAmB,GACvC+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,kBAAc,GAClC+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,iBAAa,GACjC+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,uBAAmB,GACvC+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,sBAAkB,GACtC+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,oBAAgB,GACpC+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,oBAAgB,GACpC+wF,IACItjF,KACDw8S,EAAMjqT,UAAW,oBAAgB,GACpC+wF,IACIllF,EAAS,QACVo+S,EAAMjqT,UAAW,oBAAgB,GACpCiqT,EAAQl5N,IACJhjF,GACDk8S,IAELn4M,IC5oDEthB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCijO,GAA8B,SAAUziO,GAExC,SAASyiO,IACL,OAAkB,OAAXziO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuH/D,OAzHA6rF,GAAUsjO,EAAcziO,GAOxByiO,EAAa9zT,UAAU+zT,8BAAgC,SAAUj5S,EAAMgZ,EAAM5xB,EAAOyhB,EAAKw7M,QACrE,IAAZA,IAAsBA,GAAU,GACpC,IAKIr4N,EAJAs3E,EAAY,IAAIr5D,KAAK7iB,GACrBm8E,EAAU,IAAIt5D,KAAKpB,GAEnBqwS,EAAahjT,KAAKE,KAAKktE,EAAUp5D,UAAYq5D,EAAQr5D,WAJ5C,OAMblK,EAAKm5S,mBAAqBn5S,EAAKkxD,aAE/B,OADWlxD,EAAKkxD,cAEZ,IAAK,QACDllE,EAAWnC,KAAKk2N,6BAA6B//M,EAAMk5S,EAAY,IAAKlgS,GACpE,MACJ,IAAK,UACDhtB,EAAWnC,KAAKk2N,6BAA6B//M,EAAOk5S,EAAY,IAAO,EAAGlgS,GAC1E,MACJ,IAAK,SACDhtB,EAAWnC,KAAKk2N,6BAA6B//M,EAAMk5S,EAAY,GAAIlgS,GACnE,MACJ,IAAK,QACDhtB,EAAWnC,KAAKk2N,6BAA6B//M,EAAMk5S,EAAY,EAAGlgS,GAClE,MACJ,IAAK,OACDhtB,EAAWnC,KAAKk2N,6BAA6B//M,EAAMk5S,EAAWlgS,GAC9D,MACJ,IAAK,QACDhtB,EAAWnC,KAAKk2N,6BAA6B//M,EAAkB,GAAZk5S,EAAgBlgS,GACnE,MACJ,IAAK,UACDhtB,EAAWnC,KAAKk2N,6BAA6B//M,EAAkB,GAAZk5S,EAAiB,GAAIlgS,GACxE,MACJ,IAAK,UACDhtB,EAAWnC,KAAKk2N,6BAA6B//M,EAAkB,GAAZk5S,EAAiB,GAAK,GAAIlgS,GAC7E,MACJ,IAAK,OAED,OADAhtB,EAAWnC,KAAKk2N,6BAA6B//M,EAAMk5S,EAAY,IAAKlgS,KACpD,GACZhZ,EAAKm5S,mBAAqB,QACnBntT,IAEXA,EAAWnC,KAAKk2N,6BAA6B//M,EAAOk5S,EAAY,IAAO,EAAGlgS,KAC1D,IAAMqrM,GAClBrkN,EAAKm5S,mBAAqB,UACnBntT,IAEXA,EAAWnC,KAAKk2N,6BAA6B//M,EAAMk5S,EAAY,GAAIlgS,KACnD,GACZhZ,EAAKm5S,mBAAqB,SACnBntT,IAEXA,EAAWnC,KAAKk2N,6BAA6B//M,EAAMk5S,EAAY,EAAGlgS,KAClD,IAAMqrM,GAClBrkN,EAAKm5S,mBAAqB,QACnBntT,IAEXA,EAAWnC,KAAKk2N,6BAA6B//M,EAAMk5S,EAAWlgS,KAC9C,GACZhZ,EAAKm5S,mBAAqB,OACnBntT,IAEXA,EAAWnC,KAAKk2N,6BAA6B//M,EAAkB,GAAZk5S,EAAgBlgS,KACnD,GACZhZ,EAAKm5S,mBAAqB,QACnBntT,IAEXA,EAAWnC,KAAKk2N,6BAA6B//M,EAAkB,GAAZk5S,EAAiB,GAAIlgS,KACxD,GACZhZ,EAAKm5S,mBAAqB,UACnBntT,IAEXA,EAAWnC,KAAKk2N,6BAA6B//M,EAAkB,GAAZk5S,EAAiB,GAAK,GAAIlgS,GAC7EhZ,EAAKm5S,mBAAqB,UACnBntT,GAEf,OAAOA,GAOXgtT,EAAa9zT,UAAUk0T,YAAc,SAAUp5S,GAC3C,IACIkxD,EAAelxD,EAAKm5S,mBACxB,OAAIn5S,EAAK8sD,SACE9sD,EAAK8sD,SAEK,UAAjBoE,EACWlxD,EAAKqkN,QAAU,OAAS,IAEb,YAAjBnzJ,EACM,OAEW,WAAjBA,EACMlxD,EAAKqkN,QAAU,OAAS,MAEb,UAAjBnzJ,EACM,MAEW,SAAjBA,EACMlxD,EAAKqkN,QAAU,MAAQ,OAEZ,UAAjBnzJ,EACMlxD,EAAKqkN,QAAU,MAAQ,IAEZ,YAAjBnzJ,EACMlxD,EAAKqkN,QAAU,MAAQ,KAGvBrkN,EAAKqkN,QAAU,MAAQ,OAInC20F,GACTl5F,IC1IEpqI,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAmBxCsjO,GAA0B,SAAU9iO,GAMpC,SAAS8iO,EAAS3/R,GACd,OAAO68D,EAAOprF,KAAKtB,KAAM6vB,IAAU7vB,KAySvC,OA/SA6rF,GAAU2jO,EAAU9iO,GAYpB8iO,EAASn0T,UAAUs7N,0BAA4B,SAAUxnM,EAAMhZ,GAC3DnW,KAAK42N,eAAezgN,EAAMgZ,GAC1BnvB,KAAKq2N,eAAelgN,EAAMgZ,GAC1BnvB,KAAK62N,kBAAkB1gN,EAAMgZ,GAC7BnvB,KAAK82N,uBAAuB3gN,EAAMnW,KAAK6vB,QAM3C2/R,EAASn0T,UAAUg7N,eAAiB,SAAUlgN,EAAMgZ,GAChD,IAAImoE,GACAr0B,SAAU,OACVv8D,KAAM,YAENyiG,EAAanpG,KAAK6vB,MAAM6gD,KAAK87B,cAAclV,GAC3CipI,EAAgBvgO,KAAK6vB,MAAM6gD,KAAK47B,cAAchV,GAE3B,OAAlBnhF,EAAY,QACbnW,KAAKmgB,IAAMC,KAAK4pC,MAAMm/C,EAAWo3H,EAAc,IAAIngN,KAAKg+C,GAASpU,MAAM2wI,WAAYtyK,IAAKlS,EAAKsiB,UAAWpQ,QAEtF,OAAbroB,KAAKmgB,KAAgBngB,KAAKmgB,MAAQyW,OAAO6/L,oBAC9Cz2N,KAAKmgB,IAAMC,KAAK4pC,MAAMm/C,EAAWo3H,EAAc,IAAIngN,KAAK,KAAM,EAAG,OAG9C,OAAlBjK,EAAY,QACbnW,KAAKsM,IAAM8T,KAAK4pC,MAAMm/C,EAAWo3H,EAAc,IAAIngN,KAAKg+C,GAASpU,MAAM2wI,WAAYtyK,IAAKlS,EAAKuiB,UAAWrQ,QAEtF,OAAbroB,KAAKsM,KAAgBtM,KAAKsM,MAAQsqB,OAAO8/L,oBAC9C12N,KAAKsM,IAAM8T,KAAK4pC,MAAMm/C,EAAWo3H,EAAc,IAAIngN,KAAK,KAAM,EAAG,OAEjEpgB,KAAKmgB,MAAQngB,KAAKsM,MAClBtM,KAAKsM,IAAMtM,KAAKsM,IAAM,OACtBtM,KAAKmgB,IAAMngB,KAAKmgB,IAAM,QAE1BhK,EAAKogN,eACLpgN,EAAKqgN,YAAc,IAAIV,GAAY91N,KAAKmgB,IAAKngB,KAAKsM,KAClD,IAAImjT,EAAmBzvT,KAAKovT,8BAA8Bj5S,EAAMgZ,EAAMhZ,EAAKqgN,YAAYj5N,MAAO4Y,EAAKqgN,YAAYx3M,KAC1G7I,EAAKhU,SAINgU,EAAKogN,YAAYp0N,SAAWgU,EAAKhU,SAHjCgU,EAAKogN,YAAYp0N,SAAWstT,EAKhCt5S,EAAKogN,YAAYp2M,IAAMhK,EAAKqgN,YAAYj5N,MACxC4Y,EAAKogN,YAAYjqN,IAAM6J,EAAKqgN,YAAYx3M,KAM5CwwS,EAASn0T,UAAUw7N,kBAAoB,SAAU1gN,EAAMgZ,GACnDnvB,KAAKmgB,IAAOhK,EAAKogN,YAAe,IAChCv2N,KAAKsM,IAAO6J,EAAKogN,YAAe,IAChC,IAAI99L,EACAC,EACAv2B,EAAWgU,EAAKogN,YAAYp0N,SAChC,IAAKq2B,GAASriB,GAAO,CACjB,IAAI8gN,EAAe9gN,EAAKkhN,gBAAgBr3N,KAAK6vB,OAC7C4I,EAAU,IAAIrY,KAAKpgB,KAAKmgB,KACxBuY,EAAU,IAAItY,KAAKpgB,KAAKsM,KACxB,IAAI+6D,EAAelxD,EAAKm5S,mBACxB,GAAqB,SAAjBr4F,EACAj3N,KAAKmgB,IAAMsY,EAAQpY,UACnBrgB,KAAKsM,IAAMosB,EAAQrY,eAElB,GAAqB,eAAjB42M,GAAkD,UAAjBA,EACtC,OAAQ5vJ,GACJ,IAAK,QACDrnE,KAAK0vT,QAAQj3R,EAASC,EAASu+L,EAAc90N,GAC7C,MACJ,IAAK,SACDnC,KAAKynE,SAAShvC,EAASC,EAASu+L,EAAc90N,GAC9C,MACJ,IAAK,OACDnC,KAAKklE,OAAOzsC,EAASC,EAASu+L,EAAc90N,GAC5C,MACJ,IAAK,QACDnC,KAAK2vT,QAAQl3R,EAASC,EAASu+L,EAAc90N,GAC7C,MACJ,IAAK,UACD,IAAI6mG,EAAUvwE,EAAQqvC,aAAe3lE,EAAYA,EAC7CytT,EAAYl3R,EAAQovC,cAAgBrvC,EAAQqvC,aAAekhC,GAC1C,UAAjBiuH,GACAj3N,KAAKmgB,IAAM,IAAKC,KAAKqY,EAAQ8uC,cAAe9uC,EAAQgvC,WAAYhvC,EAAQkvC,UAAWlvC,EAAQmvC,WAAYohC,EAAQ,GAAI3oF,UACnHrgB,KAAKsM,IAAM,IAAK8T,KAAKsY,EAAQ6uC,cAAe7uC,EAAQ+uC,WAAY/uC,EAAQivC,UAAWjvC,EAAQkvC,WAAYgoP,EAAW,IAAKvvS,YAGvHrgB,KAAKmgB,IAAM,IAAKC,KAAKqY,EAAQ8uC,cAAe7uC,EAAQ+uC,WAAYhvC,EAAQkvC,UAAWlvC,EAAQmvC,WAAYohC,GAAW7mG,EAAW,GAAIke,UACjIrgB,KAAKsM,IAAM,IAAK8T,KAAKsY,EAAQ6uC,cAAe7uC,EAAQ+uC,WAAY/uC,EAAQivC,UAAWjvC,EAAQkvC,WAAYgoP,IAAwB,GAAIvvS,WAEvI,MACJ,IAAK,UACD,IAAIxhB,EAAU45B,EAAQutC,aAAe7jE,EAAYA,EAC7C0tT,EAAYn3R,EAAQstC,cAAgBvtC,EAAQutC,aAAennE,GAC1C,UAAjBo4N,GACAj3N,KAAKmgB,IAAM,IAAKC,KAAKqY,EAAQ8uC,cAAe9uC,EAAQgvC,WAAYhvC,EAAQkvC,UAAWlvC,EAAQmvC,WAAYnvC,EAAQqvC,aAAcjpE,EAAQ,GAAIwhB,UACzIrgB,KAAKsM,IAAM,IAAK8T,KAAKsY,EAAQ6uC,cAAe7uC,EAAQ+uC,WAAY/uC,EAAQivC,UAAWjvC,EAAQkvC,WAAYlvC,EAAQovC,aAAc+nP,EAAW,GAAIxvS,YAG5IrgB,KAAKmgB,IAAM,IAAKC,KAAKqY,EAAQ8uC,cAAe9uC,EAAQgvC,WAAYhvC,EAAQkvC,UAAWlvC,EAAQmvC,WAAYnvC,EAAQqvC,aAAcjpE,GAAWsD,EAAW,GAAIke,UACvJrgB,KAAKsM,IAAM,IAAK8T,KAAKsY,EAAQ6uC,cAAe7uC,EAAQ+uC,WAAY/uC,EAAQivC,UAAWjvC,EAAQkvC,WAAYlvC,EAAQovC,aAAc+nP,IAAwB,GAAIxvS,YAM7KlK,EAAKogN,YAAYp2M,KAAOhK,EAAKsiB,QAAmBz4B,KAAKmgB,KACrDhK,EAAKogN,YAAYjqN,KAAO6J,EAAKuiB,QAAmB14B,KAAKsM,KACrD6J,EAAKogN,YAAYjiM,MAASne,EAAKogN,YAAYjqN,IAAM6J,EAAKogN,YAAYp2M,IAClEhK,EAAKqgN,YAAc,IAAIV,GAAY3/M,EAAKogN,YAAYp2M,IAAKhK,EAAKogN,YAAYjqN,KAC1EtM,KAAKy3N,sBAAsBtoM,EAAMhZ,IAErCq5S,EAASn0T,UAAUq0T,QAAU,SAAUj3R,EAASC,EAASu+L,EAAc90N,GACnE,IAAIipH,EAAY3yF,EAAQ8uC,cACpBuoP,EAAUp3R,EAAQ6uC,cACD,eAAjB0vJ,GACAj3N,KAAKmgB,IAAM,IAAKC,KAAKgrG,EAAYjpH,EAAU,EAAG,EAAG,EAAG,EAAG,GAAIke,UAC3DrgB,KAAKsM,IAAM,IAAK8T,KAAK0vS,EAAU3tT,EAAU,EAAG,EAAG,EAAG,EAAG,GAAIke,YAGzDrgB,KAAKmgB,IAAM,IAAIC,KAAKgrG,EAAW,EAAG,EAAG,EAAG,EAAG,GAAG/qG,UAC9CrgB,KAAKsM,IAAM,IAAI8T,KAAK0vS,EAAS,GAAI,GAAI,GAAI,GAAI,IAAIzvS,YAGzDmvS,EAASn0T,UAAUosE,SAAW,SAAUhvC,EAASC,EAASu+L,EAAc90N,GACpE,IAAIo7E,EAAQ9kD,EAAQgvC,WAChBsoP,EAAWr3R,EAAQ+uC,WACF,UAAjBwvJ,GACAj3N,KAAKmgB,IAAM,IAAKC,KAAKqY,EAAQ8uC,cAAegW,EAAO,EAAG,EAAG,EAAG,GAAIl9D,UAChErgB,KAAKsM,IAAM,IAAK8T,KAAKsY,EAAQ6uC,cAAewoP,EAAU,IAAI3vS,KAAKsY,EAAQ6uC,cAAe7uC,EAAQ+uC,WAAY,GAAGE,UAAW,GAAI,GAAI,IAAKtnD,YAGrIrgB,KAAKmgB,IAAM,IAAKC,KAAKqY,EAAQ8uC,cAAegW,GAAUp7E,EAAW,EAAG,EAAG,EAAG,GAAIke,UAC9ErgB,KAAKsM,IAAM,IAAK8T,KAAKsY,EAAQ6uC,cAAewoP,IAAoC,IAAbA,EAAiB,GAAK,GAAI,EAAG,EAAG,GAAI1vS,YAG/GmvS,EAASn0T,UAAU6pE,OAAS,SAAUzsC,EAASC,EAASu+L,EAAc90N,GAClE,IAAI+2E,EAAMzgD,EAAQkvC,UACdqoP,EAASt3R,EAAQivC,UACA,UAAjBsvJ,GACAj3N,KAAKmgB,IAAM,IAAKC,KAAKqY,EAAQ8uC,cAAe9uC,EAAQgvC,WAAYyR,EAAK,EAAG,EAAG,GAAI74D,UAC/ErgB,KAAKsM,IAAM,IAAK8T,KAAKsY,EAAQ6uC,cAAe7uC,EAAQ+uC,WAAYuoP,EAAQ,GAAI,GAAI,IAAK3vS,YAGrFrgB,KAAKmgB,IAAM,IAAKC,KAAKqY,EAAQ8uC,cAAe9uC,EAAQgvC,WAAYyR,GAAQ/2E,EAAW,EAAG,EAAG,GAAIke,UAC7FrgB,KAAKsM,IAAM,IAAK8T,KAAKsY,EAAQ6uC,cAAe7uC,EAAQ+uC,WAAYuoP,IAAqB,EAAG,EAAG,GAAI3vS,YAGvGmvS,EAASn0T,UAAUs0T,QAAU,SAAUl3R,EAASC,EAASu+L,EAAc90N,GACnE,IAAI8mG,EAAQxwE,EAAQmvC,WAAazlE,EAAYA,EACzCm3E,EAAU5gD,EAAQkvC,YAAcnvC,EAAQmvC,WAAaqhC,GACpC,UAAjBguH,GACAj3N,KAAKmgB,IAAM,IAAKC,KAAKqY,EAAQ8uC,cAAe9uC,EAAQgvC,WAAYhvC,EAAQkvC,UAAWshC,EAAM,EAAG,GAAI5oF,UAChGrgB,KAAKsM,IAAM,IAAK8T,KAAKsY,EAAQ6uC,cAAe7uC,EAAQ+uC,WAAY/uC,EAAQivC,UAAW2R,EAAS,GAAI,IAAKj5D,YAGrGrgB,KAAKmgB,IAAM,IAAKC,KAAKqY,EAAQ8uC,cAAe9uC,EAAQgvC,WAAYhvC,EAAQkvC,UAAWshC,GAAS9mG,EAAW,EAAG,GAAIke,UAC9GrgB,KAAKsM,IAAM,IAAK8T,KAAKsY,EAAQ6uC,cAAe7uC,EAAQ+uC,WAAY/uC,EAAQivC,UAAW2R,IAAsB,EAAG,GAAIj5D,YAOxHmvS,EAASn0T,UAAUo8N,sBAAwB,SAAUtoM,EAAMhZ,GACvDA,EAAK6b,cACD7R,IAAKhK,EAAKogN,YAAYp2M,IACtB7T,IAAK6J,EAAKogN,YAAYjqN,IACtBnK,SAAUgU,EAAKogN,YAAYp0N,SAC3BmyB,MAAOne,EAAKogN,YAAYjiM,QAExBne,EAAK05D,WAAa,GAAK15D,EAAKuhN,aAAe,KAC3CvhN,EAAKshN,sBAAsBtoM,GAC3BhZ,EAAK6b,aAAa7vB,SAAYgU,EAAgC,4BAC1DnW,KAAKovT,8BAA8Bj5S,EAAMgZ,EAAMhZ,EAAK6b,aAAa7R,IAAKhK,EAAK6b,aAAa1lB,KACtF6J,EAAK6b,aAAa7vB,UAE5BgU,EAAKoe,iBAAmBv0B,KAAKonE,yBAAyBjxD,EAAMA,EAAK6b,aAAa7R,IAAKhK,EAAK6b,aAAa7vB,UAAUke,UACzGlK,EAAK6b,aAAa7R,IACxBhK,EAAKyhN,mBAAmB53N,KAAK6vB,MAAO1Z,EAAK6b,aAAa7R,IAAKhK,EAAK6b,aAAa1lB,IAAK6J,EAAK6b,aAAa7vB,WAMxGqtT,EAASn0T,UAAUy7N,uBAAyB,SAAU3gN,EAAM0Z,GACxD1Z,EAAKqe,iBACL,IACIa,EADA8C,EAAehiB,EAAK6b,aAAa7R,IAUrC,IARKqY,GAASriB,KACVgiB,EAAen4B,KAAKiwT,gBAAgB95S,EAAMgiB,EAAchiB,EAAK6b,aAAa7vB,SAAUgU,EAAKm5S,oBAAoBjvS,WAEjHlK,EAAKqmB,OAAS3M,EAAM6gD,KAAK47B,eACrB9vE,OAAQrmB,EAAK2lB,YAAap1B,KAAM0vB,GAAiBjgB,EAAK+5S,cAAejtP,SAAUjjE,KAAKuvT,YAAYp5S,KAEpGA,EAAKif,WAAajf,EAAKqmB,OAAO,IAAIpc,KAAKjK,EAAK6b,aAAa7R,MACzDhK,EAAKgf,SAAWhf,EAAKqmB,OAAO,IAAIpc,KAAKjK,EAAK6b,aAAa1lB,MAChD6rB,GAAgBhiB,EAAK6b,aAAa1lB,KACrC+oB,EAAc32B,KAAW7B,EAAS,aAAcsZ,EAAKkf,YAAa,MAAM,GACpEjE,GAAO+G,EAAchiB,EAAK6b,eAC1BkG,GAAmBrI,EAAOsI,EAAchiB,EAAKqmB,OAAO,IAAIpc,KAAK+X,IAAgB9C,EAAYlf,GAE7FgiB,EAAen4B,KAAKonE,yBAAyBjxD,EAAMgiB,EAAchiB,EAAK6b,aAAa7vB,UAAUke,UAE7FlK,EAAK4hN,kBACL5hN,EAAK4hN,iBAAiB/3N,KAAK6vB,QAInC2/R,EAASn0T,UAAU+rE,yBAA2B,SAAUjxD,EAAMnZ,EAAOmF,GACjE,IAAIpD,EAAS,IAAIqhB,KAAKpjB,GACtBmF,EAAWkK,KAAK6lB,KAAK/vB,GAErB,OADmBgU,EAAKm5S,oBAEpB,IAAK,QAED,OADAvwT,EAAOuoE,YAAYvoE,EAAOwoE,cAAgBplE,GACnCpD,EACX,IAAK,UAED,OADAA,EAAOyoE,SAASzoE,EAAO0oE,WAAc,EAAItlE,GAClCpD,EACX,IAAK,SAED,OADAA,EAAOyoE,SAASzoE,EAAO0oE,WAAatlE,GAC7BpD,EACX,IAAK,QAED,OADAA,EAAO2oE,QAAQ3oE,EAAO4oE,UAAwB,EAAXxlE,GAC5BpD,EACX,IAAK,OAED,OADAA,EAAO2oE,QAAQ3oE,EAAO4oE,UAAYxlE,GAC3BpD,EACX,IAAK,QAED,OADAA,EAAOknE,SAASlnE,EAAO6oE,WAAazlE,GAC7BpD,EACX,IAAK,UAED,OADAA,EAAO8oE,WAAW9oE,EAAO+oE,aAAe3lE,GACjCpD,EACX,IAAK,UAED,OADAA,EAAOgnE,WAAWhnE,EAAOinE,aAAe7jE,GACjCpD,EAEf,OAAOA,GAEXywT,EAASn0T,UAAU40T,gBAAkB,SAAU95S,EAAMg6S,EAAOC,EAAc/oP,GACtE,IAAIgpP,EAAU,IAAIjwS,KAAK+vS,GACvB,OAAQh6S,EAAKm5S,oBACT,IAAK,QACD,IAAI7kN,EAAOp+F,KAAKkT,MAAMlT,KAAKkT,MAAM8wS,EAAQ9oP,cAAgB6oP,GAAgBA,GAEzE,OADAC,EAAU,IAAIjwS,KAAKqqF,EAAM4lN,EAAQ5oP,WAAY4oP,EAAQ1oP,UAAW,EAAG,EAAG,GAE1E,IAAK,SACD,IAAI4V,EAAQlxE,KAAKkT,MAAMlT,KAAKkT,MAAO8wS,EAAQ5oP,WAAc2oP,GAAgBA,GAEzE,OADAC,EAAU,IAAIjwS,KAAKiwS,EAAQ9oP,cAAegW,EAAO8yO,EAAQ1oP,UAAW,EAAG,EAAG,GAE9E,IAAK,OACD,IAAIuR,EAAM7sE,KAAKkT,MAAMlT,KAAKkT,MAAO8wS,EAAQ1oP,UAAayoP,GAAgBA,GAEtE,OADAC,EAAU,IAAIjwS,KAAKiwS,EAAQ9oP,cAAe8oP,EAAQ5oP,WAAYyR,EAAK,EAAG,EAAG,GAE7E,IAAK,QACD,IAAI+vB,EAAO58F,KAAKkT,MAAMlT,KAAKkT,MAAO8wS,EAAQzoP,WAAcwoP,GAAgBA,GAExE,OADAC,EAAU,IAAIjwS,KAAKiwS,EAAQ9oP,cAAe8oP,EAAQ5oP,WAAY4oP,EAAQ1oP,UAAWshC,EAAM,EAAG,GAE9F,IAAK,UACD,IAAIqqH,EAAUjnN,KAAKkT,MAAMlT,KAAKkT,MAAO8wS,EAAQvoP,aAAgBsoP,GAAgBA,GAE7E,OADAC,EAAU,IAAIjwS,KAAKiwS,EAAQ9oP,cAAe8oP,EAAQ5oP,WAAY4oP,EAAQ1oP,UAAW0oP,EAAQzoP,WAAY0rJ,EAAS,EAAG,GAErH,IAAK,UACD,IAAIC,EAAUlnN,KAAKkT,MAAMlT,KAAKkT,MAAO8wS,EAAQrqP,aAAgBoqP,GAAgBA,GAE7E,OADAC,EAAU,IAAIjwS,KAAKiwS,EAAQ9oP,cAAe8oP,EAAQ5oP,WAAY4oP,EAAQ1oP,UAAW0oP,EAAQzoP,WAAYyoP,EAAQvoP,aAAcyrJ,EAAS,GAG5I,OAAO88F,GAKXb,EAASn0T,UAAU0kC,cAAgB,WAI/B,MAAO,YAOXyvR,EAASn0T,UAAUiX,QAAU,SAAUud,KAKhC2/R,GACTL,ICpUEtjO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAkBxCokO,GAA0B,SAAU5jO,GAMpC,SAAS4jO,EAASzgS,GACd,OAAO68D,EAAOprF,KAAKtB,KAAM6vB,IAAU7vB,KA4FvC,OAlGA6rF,GAAUykO,EAAU5jO,GAYpB4jO,EAASj1T,UAAUs7N,0BAA4B,SAAUxnM,EAAMhZ,GAC3DnW,KAAK42N,eAAezgN,EAAMgZ,GAC1BnvB,KAAKq2N,eAAelgN,EAAMgZ,GAC1BnvB,KAAK62N,kBAAkB1gN,EAAMgZ,GAC7BnvB,KAAK82N,uBAAuB3gN,IAMhCm6S,EAASj1T,UAAUg7N,eAAiB,SAAUlgN,EAAMgZ,GAChDnvB,KAAKs2N,sBAAsBngN,GAE3BA,EAAKogN,eACApgN,EAAKhU,SAINgU,EAAKogN,YAAYp0N,SAAWkK,KAAK6lB,KAAK/b,EAAKhU,UAH3CgU,EAAKogN,YAAYp0N,SAAWkK,KAAKC,IAAI,EAAGD,KAAKkT,MAAMpJ,EAAKqgN,YAAYliM,MAAQqE,GAA+BxJ,EAAMhZ,KAKrHA,EAAKogN,YAAYp2M,IAAMhK,EAAKqgN,YAAYj5N,MACxC4Y,EAAKogN,YAAYjqN,IAAM6J,EAAKqgN,YAAYx3M,IACxC7I,EAAKogN,YAAYjiM,MAAQne,EAAKqgN,YAAYliM,OAM9Cg8R,EAASj1T,UAAUw7N,kBAAoB,SAAU1gN,EAAMgZ,GACnD,IAAIi6G,EAAiC,iBAAxBjzH,EAAKud,gBAAkE,eAA7B1zB,KAAK6vB,MAAMk3M,cAAkC,GAAM,EACtG39F,EAAQ,GACRjzH,EAAKogN,YAAYp2M,KAAOipH,EACxBjzH,EAAKogN,YAAYjqN,KAAO88H,GAGxBjzH,EAAKogN,YAAYjqN,KAAO6J,EAAKogN,YAAYjqN,IAAM,EAAI,GAEvD6J,EAAKqgN,YAAc,IAAIV,GAAY3/M,EAAKogN,YAAYp2M,IAAKhK,EAAKogN,YAAYjqN,KAC1E6J,EAAKogN,YAAYjiM,MAAQne,EAAKqgN,YAAYliM,MAC1Ct0B,KAAKy3N,sBAAsBtoM,EAAMhZ,IAMrCm6S,EAASj1T,UAAUy7N,uBAAyB,SAAU3gN,GAElDA,EAAKqe,iBACL,IACIa,EADA8C,EAAe9rB,KAAK6lB,KAAK/b,EAAK6b,aAAa7R,MAE3ChK,EAAK05D,WAAa,GAAK15D,EAAKuhN,aAAe,KAC3Cv/L,EAAehiB,EAAK6b,aAAa7R,IAAOhK,EAAK6b,aAAa7R,IAAMhK,EAAK6b,aAAa7vB,UAEtF,IAAI+R,EAGJ,IAFAiC,EAAKif,WAAajf,EAAKqqN,OAAOn0N,KAAK4xB,MAAM9nB,EAAK6b,aAAa7R,MAC3DhK,EAAKgf,SAAWhf,EAAKqqN,OAAOn0N,KAAKkT,MAAMpJ,EAAK6b,aAAa1lB,MAClD6rB,GAAgBhiB,EAAK6b,aAAa1lB,IAAK6rB,GAAgBhiB,EAAK6b,aAAa7vB,SAC5EkzB,EAAc32B,KAAW7B,EAAS,aAAcsZ,EAAKkf,YAAa,MAAM,GACpEjE,GAAO+G,EAAchiB,EAAK6b,eAAiB7b,EAAKqqN,OAAO/jO,OAAS,IAChEyX,EAAW7H,KAAK4xB,MAAM9F,GACtBD,GAAmBl4B,KAAK6vB,MAAO3b,EAAUiC,EAAKqqN,OAAOtsN,GAAYiC,EAAKqqN,OAAOtsN,GAAYA,EAAShH,WAAYmoB,EAAYlf,IAG9HA,EAAK4hN,kBACL5hN,EAAK4hN,iBAAiB/3N,KAAK6vB,QAMnCygS,EAASj1T,UAAU0kC,cAAgB,WAI/B,MAAO,YAOXuwR,EAASj1T,UAAUiX,QAAU,SAAUud,KAKhCygS,GACTnB,ICtHEtjO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAiBxCqkO,GAA6B,SAAU7jO,GAMvC,SAAS6jO,EAAY1gS,GACjB,OAAO68D,EAAOprF,KAAKtB,KAAM6vB,IAAU7vB,KAkHvC,OAxHA6rF,GAAU0kO,EAAa7jO,GAYvB6jO,EAAYl1T,UAAUs7N,0BAA4B,SAAUxnM,EAAMhZ,GAC9DnW,KAAK42N,eAAezgN,EAAMgZ,GAC1BnvB,KAAKq2N,eAAelgN,EAAMgZ,GAC1BnvB,KAAKy3N,sBAAsBtoM,EAAMhZ,GACjCnW,KAAK82N,uBAAuB3gN,EAAMnW,KAAK6vB,QAM3C0gS,EAAYl1T,UAAUg7N,eAAiB,SAAUlgN,EAAMgZ,GACnDnvB,KAAKs2N,sBAAsBngN,GAC3BnW,KAAKmgB,IAAMngB,KAAKmgB,IAAM,EAAI,EAAIngB,KAAKmgB,IACnC,IAAIokN,EAAW5zM,GAAQ3wB,KAAKmgB,IAAKhK,EAAKwa,SACtC4zM,EAAWxqI,SAASwqI,GAAYA,EAAWvkO,KAAKmgB,IAChD,IAAIqwS,EAAS7/R,GAAQ3wB,KAAKsM,IAAK6J,EAAKwa,SACpC6/R,EAASz2N,SAASwqI,GAAYisF,EAASxwT,KAAKsM,IAC5CtM,KAAKmgB,IAAM9T,KAAKkT,MAAMglN,EAAW,GACjCvkO,KAAKsM,IAAMD,KAAK6lB,KAAKs+R,EAAS,GAC9Br6S,EAAKogN,YAAYp0N,SAAWgU,EAAKhU,UAAYnC,KAAKywT,yBAAyBzwT,KAAKsM,IAAMtM,KAAKmgB,IAAKgP,EAAMhZ,GACtGA,EAAKogN,YAAYp2M,IAAMngB,KAAKmgB,IAC5BhK,EAAKogN,YAAYjqN,IAAMtM,KAAKsM,IAC5B6J,EAAKogN,YAAYjiM,MAAQt0B,KAAKsM,IAAMtM,KAAKmgB,KAM7CowS,EAAYl1T,UAAUo8N,sBAAwB,SAAUtoM,EAAMhZ,GAC1DA,EAAK6b,cACD7vB,SAAUgU,EAAKogN,YAAYp0N,SAAUmK,IAAK6J,EAAKogN,YAAYjqN,IAC3D6T,IAAKhK,EAAKogN,YAAYp2M,IAAKmU,MAAOne,EAAKogN,YAAYjiM,QAEnDne,EAAK05D,WAAa,GAAK15D,EAAKuhN,aAAe,KAC3CvhN,EAAKshN,sBAAsBtoM,GAC3BhZ,EAAK6b,aAAa7vB,SAAYgU,EAAgC,4BAC1DnW,KAAKywT,yBAAyBt6S,EAAKqgN,YAAYliM,MAAOnF,EAAMhZ,GAC1DA,EAAK6b,aAAa7vB,SACxBgU,EAAK6b,aAAa7vB,SAAsD,IAA3CkK,KAAKkT,MAAMpJ,EAAK6b,aAAa7vB,UAAkB,EAAIkK,KAAKkT,MAAMpJ,EAAK6b,aAAa7vB,UAC7GgU,EAAKyhN,mBAAmB53N,KAAK6vB,MAAO1Z,EAAK6b,aAAa7R,IAAKhK,EAAK6b,aAAa1lB,IAAK6J,EAAK6b,aAAa7vB,YAO5GouT,EAAYl1T,UAAUo1T,yBAA2B,SAAUn8R,EAAOnF,EAAMhZ,GAIpE,IAAK,IAHDggN,EAA8Bx9L,GAA+BxJ,EAAMhZ,GACnEszD,EAAen1C,EACfo1C,EAAcr9D,KAAKs9D,IAAI,GAAIt9D,KAAKkT,MAAMoR,GAAQ84C,EAAc,MACvDhmD,EAAI,EAAG5hB,EAAMsU,EAAKigN,aAAa35N,OAAQgnB,EAAI5hB,EAAK4hB,IAAK,CAC1D,IAAI+lD,EAAkBE,EAAcvzD,EAAKigN,aAAa3yM,GACtD,GAAI0yM,EAA+B7hM,EAAQk1C,EACvC,MAEJC,EAAeD,EAEnB,OAAOC,GAMX8mP,EAAYl1T,UAAUy7N,uBAAyB,SAAU3gN,EAAM0Z,GAE3D,IAAIsI,EAAehiB,EAAK6b,aAAa7R,IACrChK,EAAKqe,iBACL,IAAIa,GACAlf,EAAK05D,WAAa,GAAK15D,EAAKuhN,aAAe,KAC3Cv/L,EAAehiB,EAAK6b,aAAa7R,IAAOhK,EAAK6b,aAAa7R,IAAMhK,EAAK6b,aAAa7vB,UAEtF,IAAIuuT,EAAa1wT,KAAK63N,UAAU1hN,GAC5Bw6S,EAAiD,OAAhCD,EAAW/gT,MAAM,WAOtC,IANAwG,EAAKqmB,OAAS3M,EAAM6gD,KAAKC,iBACrBn0C,OAAQm0R,EAAiB,GAAKD,EAC9B9/O,YAAa/gD,EAAMghD,uBAEvB16D,EAAKif,WAAajf,EAAKqmB,OAAOnwB,KAAKs9D,IAAIxzD,EAAKwa,QAASxa,EAAK6b,aAAa7R,MACvEhK,EAAKgf,SAAWhf,EAAKqmB,OAAOnwB,KAAKs9D,IAAIxzD,EAAKwa,QAASxa,EAAK6b,aAAa1lB,MAC9D6rB,GAAgBhiB,EAAK6b,aAAa1lB,IAAK6rB,GAAgBhiB,EAAK6b,aAAa7vB,SAC5EkzB,EAAc32B,KAAW7B,EAAS,aAAcsZ,EAAKkf,YAAa,MAAM,GACpEjE,GAAO+G,EAAchiB,EAAK6b,eAC1BkG,GAAmBl4B,KAAK6vB,MAAOsI,EAAcn4B,KAAKmjF,YAAYhtE,EAAMw6S,EAAgBD,EAAYrkT,KAAKs9D,IAAIxzD,EAAKwa,QAASwH,IAAgB9C,EAAYlf,GAGvJA,EAAK4hN,kBACL5hN,EAAK4hN,iBAAiB/3N,KAAK6vB,QAMnC0gS,EAAYl1T,UAAU0kC,cAAgB,WAIlC,MAAO,eAOXwwR,EAAYl1T,UAAUiX,QAAU,SAAUud,KAKnC0gS,GACTt6F,IC3IEpqI,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAiBxC0kO,GAAkC,SAAUlkO,GAM5C,SAASkkO,EAAiB/gS,GACtB,OAAO68D,EAAOprF,KAAKtB,KAAM6vB,IAAU7vB,KAoGvC,OA1GA6rF,GAAU+kO,EAAkBlkO,GAa5BkkO,EAAiBv1T,UAAUs7N,0BAA4B,SAAUxnM,EAAMhZ,GACnEnW,KAAK6wT,SAAW1hS,EAChBnvB,KAAK42N,eAAezgN,EAAMgZ,GAC1BnvB,KAAKq2N,eAAelgN,EAAMgZ,GAC1BnvB,KAAK62N,kBAAkB1gN,EAAMgZ,GAC7BnvB,KAAK82N,uBAAuB3gN,IAMhCy6S,EAAiBv1T,UAAUy7N,uBAAyB,SAAU3gN,GAE1DA,EAAKqe,iBACL,IAAIa,EACAmlC,EAAkC,iBAAxBrkD,EAAKud,eAAoC,GAAM,EACnC,SAAtBvd,EAAKkxD,aACLrnE,KAAKovT,8BAA8Bj5S,EAAMnW,KAAK6wT,SAAUz8R,SAASje,EAAKqqN,OAAO,GAAI,IAAKpsM,SAASje,EAAKqqN,OAAOrqN,EAAKqqN,OAAO/jO,OAAS,GAAI,KAGpI0Z,EAAKm5S,mBAAqBn5S,EAAKkxD,aAEnClxD,EAAKqmB,OAASx8B,KAAK6vB,MAAM6gD,KAAK47B,eAC1B9vE,OAAQrmB,EAAK2lB,YAAap1B,KAAM0vB,GAAiBjgB,EAAK+5S,cAAejtP,SAAUjjE,KAAKuvT,YAAYp5S,KAEpG,IAAK,IAAIha,EAAI,EAAGA,EAAIga,EAAKqqN,OAAO/jO,OAAQN,IACpCk5B,EAAc32B,KAAW7B,EAAS,aAAcsZ,EAAKkf,YAAa,MAAM,GACnEr1B,KAAK8wT,aAAa36S,EAAKqqN,OAAOtpM,IAAIN,QAAQz6B,GAAIga,EAAKqqN,OAAOtpM,IAAIN,QAAQz6B,EAAI,GAAIga,EAAKm5S,mBAAoBnzT,IACpGi1B,GAAOj1B,EAAIq+D,EAASrkD,EAAK6b,eACzBkG,GAAmBl4B,KAAK6vB,MAAO1zB,EAAGga,EAAKqmB,OAAO,IAAIpc,KAAKjK,EAAKqqN,OAAOtpM,IAAIN,QAAQz6B,KAAMk5B,EAAYlf,GAIzGA,EAAK4hN,kBACL5hN,EAAK4hN,iBAAiB/3N,KAAK6vB,QAMnC+gS,EAAiBv1T,UAAUy1T,aAAe,SAAUhyO,EAAagvC,EAAcpnH,EAAMuL,GACjF,IAAI8+S,EACJ,GAAc,IAAV9+S,EACA8+S,GAAY,OAGZ,OAAQrqT,GACJ,IAAK,QACDqqT,EAAY,IAAI3wS,KAAK0+D,GAAavX,gBAAkB,IAAInnD,KAAK0tG,GAAcvmD,cAC3E,MACJ,IAAK,SACDwpP,EAAY,IAAI3wS,KAAK0+D,GAAavX,gBAAkB,IAAInnD,KAAK0tG,GAAcvmD,eACvE,IAAInnD,KAAK0+D,GAAarX,aAAe,IAAIrnD,KAAK0tG,GAAcrmD,WAChE,MACJ,IAAK,OACDspP,EAAa1kT,KAAKE,IAAIuyE,EAAcgvC,GAAgB,OAChD,IAAI1tG,KAAK0+D,GAAa5Z,WAAa,IAAI9kD,KAAK0tG,GAAc5oD,SAC9D,MACJ,IAAK,QACD6rP,EAAa1kT,KAAKE,IAAIuyE,EAAcgvC,GAAgB,MAChD,IAAI1tG,KAAK0+D,GAAa5Z,WAAa,IAAI9kD,KAAK0tG,GAAc5oD,SAC9D,MACJ,IAAK,UACD6rP,EAAa1kT,KAAKE,IAAIuyE,EAAcgvC,GAAgB,KAChD,IAAI1tG,KAAK0+D,GAAahX,eAAiB,IAAI1nD,KAAK0tG,GAAchmD,aAClE,MACJ,IAAK,UACDipP,EAAa1kT,KAAKE,IAAIuyE,EAAcgvC,GAAgB,KAChD,IAAI1tG,KAAK0+D,GAAa5Z,WAAa,IAAI9kD,KAAK0tG,GAAc5oD,SAI1E,OAAO6rP,GAKXH,EAAiBv1T,UAAU0kC,cAAgB,WAIvC,MAAO,oBAOX6wR,EAAiBv1T,UAAUiX,QAAU,SAAUud,KAKxC+gS,GACTN,ICrHEU,GAA2B,WAC3B,SAASA,KA2JT,OAzJAA,EAAU31T,UAAU41T,iBAAmB,SAAU96S,EAAM+6S,EAAWvzF,GAC9D,IAAIwzF,EACAC,EACJ,GAAuB,qBAAnBj7S,EAAKmb,UAAkC,CACvC,IAAI/zB,EAAQ2zT,EAAU3zT,MAClByhB,EAAMkyS,EAAUlyS,IACpBmyS,EAAc5zT,EAAQ4Y,EAAKqqN,OAAOjiO,QAAQhB,EAAM8iB,UAAUnT,YAAc,KACxEkkT,EAAYpyS,EAAM7I,EAAKqqN,OAAOjiO,QAAQygB,EAAIqB,UAAUnT,YAAc,UAGlEikT,EAAcD,EAAU3zT,MACxB6zT,EAAYF,EAAUlyS,IAE1B,IAAI0T,EAAO1yB,KAAKqxT,eAAeF,EAAaC,EAAWF,EAAU/hS,KAAM+hS,EAAUI,cAAen7S,GAC5FJ,EAA+B,aAArBI,EAAKyiB,aAA+BlG,EAAK6S,GAAK7S,EAAK4S,MAAQnvB,EAAKuc,KAAK3c,OAAS4nN,EAAe5nN,OACvGC,EAA8B,eAArBG,EAAKyiB,aAAiClG,EAAK6S,GAAK7S,EAAK4S,MAAQnvB,EAAKuc,KAAK1c,MAAQ2nN,EAAe3nN,MACvGjJ,EAA0B,aAArBoJ,EAAKyiB,YAA8B+kM,EAAe5wN,EAAM2lB,EAAK4S,KAAOnvB,EAAKuc,KAAK1c,MAASG,EAAKuc,KAAK3lB,EACtGC,EAA0B,eAArBmJ,EAAKyiB,YAAgC+kM,EAAe3wN,EAAKmJ,EAAKuc,KAAK1lB,EAAImJ,EAAKuc,KAAK3c,OACrF2c,EAAK6S,GAAKpvB,EAAKuc,KAAK3c,OACzB,OAAe,IAAXA,GAA0B,IAAVC,EACT,IAAIuf,GAAKxoB,EAAGC,EAAGgJ,EAAOD,GAE1B,IAAIwf,GAAK,EAAG,EAAG,EAAG,IAK7By7R,EAAU31T,UAAUg2T,eAAiB,SAAU9zT,EAAOyhB,EAAKmQ,EAAMmiS,EAAen7S,GAC5E,IAAImvB,EAAOgsR,EAAgBn7S,EAAK6b,aAAa7R,IAAMngB,KAAKuxT,UAAUllT,KAAK8T,IAAI5iB,EAAOE,EAAkBuhB,GAAOzhB,EAAQyhB,GAAM7I,GACrHovB,EAAKvlC,KAAKuxT,UAAUvxT,KAAKwxT,WAAWnlT,KAAKC,IAAI/O,EAAOE,EAAkBuhB,GAAOzhB,EAAQyhB,GAAMsmB,EAAMnW,EAAMhZ,EAAM6I,GAAM7I,GACvH,OAASmvB,KAAMhS,GAAmBnd,EAAKod,WAAagS,EAAKD,EAAMnvB,GAAOovB,GAAIjS,GAAmBnd,EAAKod,WAAa+R,EAAOC,EAAIpvB,KAE9H66S,EAAU31T,UAAUm2T,WAAa,SAAUjsR,EAAID,EAAMnW,EAAMhZ,EAAM6I,GAC7D,MAAuB,aAAnB7I,EAAKmb,UACG7zB,EAAkBuhB,GAAO,IAAIoB,KAAK,IAAIA,KAAKklB,GAAMjlB,UAAY8O,GAAQoW,EAGtE9nC,EAAkBuhB,IAA2B,gBAAnB7I,EAAKmb,UAA8BjlB,KAAKs9D,IAAIxzD,EAAKwa,QAAS2U,GAAQA,GAAQnW,EAAOoW,GAG1HyrR,EAAU31T,UAAUk2T,UAAY,SAAUv0T,EAAOmZ,GAU7C,MATuB,gBAAnBA,EAAKmb,YACLt0B,EAAQ2zB,GAAQ3zB,EAAOmZ,EAAKwa,UAE5B3zB,EAAQmZ,EAAK6b,aAAa7R,IAC1BnjB,EAAQmZ,EAAK6b,aAAa7R,IAErBnjB,EAAQmZ,EAAK6b,aAAa1lB,MAC/BtP,EAAQmZ,EAAK6b,aAAa1lB,KAEvBtP,GASXg0T,EAAU31T,UAAU4rT,gBAAkB,SAAUp3R,EAAO3b,EAAU+0D,GAM7D,IAAK,IAFDv2C,EAHApvB,EAAKusB,EAAM7uB,QAAQsC,GAAK,cAAgB4Q,EAAW,IACnDu9S,EAAiB5hS,EAAME,SAAS+9C,aAAcxqE,GAAIA,EAAK,gBACvDq6N,EAAiB9tM,EAAMu+M,qBAAqBzQ,eAE5C1+M,EAAQ,EACH7gB,EAAK,EAAGszT,EAASzoP,EAAM7qE,EAAKszT,EAAOj1T,OAAQ2B,IAEhD,IAAK,IADD+X,EAAOu7S,EAAOtzT,GACTyE,EAAK,EAAGoB,EAAKkS,EAAK83S,WAAYprT,EAAKoB,EAAGxH,OAAQoG,IAAM,CACzD,IAAIquT,EAAYjtT,EAAGpB,GACfquT,EAAUp6R,SAAWo6R,EAAUltP,SAAW9vD,IAC1Cwe,EAAO1yB,KAAKixT,iBAAiB96S,EAAM+6S,EAAWvzF,GAC9C39N,KAAK2xT,gBAAgBT,EAAWx+R,EAAMpvB,EAAK,QAAU2b,EAAOwyS,EAAgB5hS,GAC5E7vB,KAAK8xO,WAAWo/E,EAAWx+R,EAAMpvB,EAAK,QAAU2b,EAAOwyS,EAAgB5hS,EAAO1Z,GAC9E8I,KAIZ4Q,EAAMW,UAAU7uB,YAAY8vT,IAEhCT,EAAU31T,UAAUs2T,gBAAkB,SAAUT,EAAWx+R,EAAMpvB,EAAIhD,EAAQuvB,GACzEvvB,EAAOqB,YAAYkuB,EAAME,SAASuU,cAAc,IAAI04L,GAAW15N,EAAI4tT,EAAUr7R,MAAOq7R,EAAUjsR,OAAQisR,EAAUzjT,QAASilB,EAAM,EAAG,EAAG,GAAI,OAE7Is+R,EAAU31T,UAAUy2O,WAAa,SAAUo/E,EAAWx+R,EAAMpvB,EAAIhD,EAAQuvB,EAAO1Z,GAC3E,IAKI6xC,EAJA4pQ,EADW/iS,GAAYqiS,EAAUpiS,KAAMoiS,EAAUt+E,WACzB78N,OAAS,EAAvB,EACV87S,EAAKn/R,EAAK1lB,EAAK0lB,EAAK3c,OAAS,EAAK67S,EAClChvS,EAAmC,OAAvBsuS,EAAUtuS,SAA4C,aAArBzM,EAAKyiB,YAA8B,GAAK,GAAMs4R,EAAUtuS,SACrGkvS,EAAKp/R,EAAK3lB,EAAK2lB,EAAK1c,MAAQ,EAIP,eAArBG,EAAKyiB,aACLk5R,EAAK9xT,KAAK+xT,aAAaD,EAAMF,EAAU5xT,KAAK89B,OAAOozR,EAAUpkQ,qBAAuBp6B,EAAK1c,MAAOk7S,EAAUpkQ,qBAC1G+kQ,EAAK7xT,KAAK+xT,aAAaF,EAAKD,EAASl/R,EAAK3c,OAAQm7S,EAAUnkQ,mBAC5D/E,EAAYhoD,KAAKgyT,gBAAgBd,EAAUpkQ,uBAG3CglQ,EAAK9xT,KAAK+xT,aAAaD,EAAIp/R,EAAK1c,MAAOk7S,EAAUpkQ,qBACjD+kQ,EAAK7xT,KAAK+xT,aAAaF,EAAMD,EAAU5xT,KAAK89B,OAAOozR,EAAUnkQ,mBARnD,EAQkFr6B,EAAK3c,OAAQm7S,EAAUnkQ,mBACnH/E,EAAYkpQ,EAAUnkQ,mBAG1Bp3B,GAAY,IAAIC,GAAWtyB,EAAIwuT,EAAID,EAD1B7pQ,EACsCkpQ,EAAUpiS,KAAM,UAAYlM,EAAW,IAAMkvS,EAAK,IAAMD,EAAK,IAAK,UAAWX,EAAUt+E,UAAWs+E,EAAUt+E,UAAU/8M,MAAOv1B,IAEhL0wT,EAAU31T,UAAU22T,gBAAkB,SAAUn+S,GAC5C,OAAQA,GACJ,IAAK,QACDA,EAAS,QACT,MACJ,IAAK,MACDA,EAAS,MAGjB,OAAOA,GAEXm9S,EAAU31T,UAAUyiC,OAAS,SAAUjqB,GACnC,IAAIiqB,EAAS,EACb,OAAQjqB,GACJ,IAAK,QACDiqB,EAAS,EACT,MACJ,IAAK,MACDA,GAAU,EAGlB,OAAOA,GAEXkzR,EAAU31T,UAAU02T,aAAe,SAAUE,EAAI9iS,EAAMgS,GAEnD,OAAQA,GACJ,IAAK,QACD8wR,EAAKA,EAAM9iS,EAAO,EAHZ,EAIN,MACJ,IAAK,MACD8iS,EAAKA,EAAM9iS,EAAO,EANZ,EASd,OAAO8iS,GAMXjB,EAAU31T,UAAU0kC,cAAgB,WAChC,MAAO,aAMXixR,EAAU31T,UAAUiX,QAAU,aAGvB0+S,KC/JPkB,GAA0B,WAE1B,SAASA,EAASz0F,GACdz9N,KAAK6vB,MAAQ4tM,EACbz9N,KAAKw6D,QAAU,EA0JnB,OAnJA03P,EAAS72T,UAAU82T,wBAA0B,SAAUpzS,GAYnD,IACK,IAZDqzS,KACAC,EAAgBtzS,EAAOjH,MAAMka,aAC7BsgS,EAAgBvzS,EAAOnH,MAAMoa,aAC7BugS,EAAexzS,EAAOkY,OACtBu7R,EAAazzS,EAAOgV,SACpB0+R,EAAapmT,KAAKE,IAAI8lT,EAAc/9R,MAAQk+R,EAAWx8S,OACvD08S,EAAarmT,KAAKE,IAAI+lT,EAAch+R,MAAQk+R,EAAWz8S,QACvD48S,EAAcJ,EAAa,IAAMA,EAAa,GAAGxlT,EAAI0lT,EAAc,EAAIA,EACvEG,EAAcL,EAAa,IAAMA,EAAa,GAAGvlT,EAAI0lT,EAAc,EAAIA,EACvEG,EAAO,EACPC,EAAO,EAEF10T,EAAK,EAAG20T,EAAiBR,EAAcn0T,EAAK20T,EAAet2T,OAAQ2B,IAAM,CAC9E,IAAI40T,EAAiBD,EAAe30T,GACpC40T,EAAevrF,mBACforF,EAAOG,EAAephS,OAASohS,EAAephS,OAASygS,EAAclyS,IACrE2yS,EAAOE,EAAej5R,OAASi5R,EAAej5R,OAASu4R,EAAcnyS,KACjE9T,KAAKE,IAAIomT,EAAaE,IAASJ,GAAcpmT,KAAKE,IAAIqmT,EAAaE,IAASJ,KAC5EN,EAAW5tT,KAAKwuT,GAChBL,EAAaE,EACbD,EAAaE,GAGrB,OAAOV,GAWXF,EAAS72T,UAAU43T,iBAAmB,SAAUC,EAAYC,EAAap0S,EAAQ0U,EAAY2/R,EAAkB51Q,GAC3G,IAAI3oB,EAAY,GAChB,GAAkB,MAAdq+R,EAAoB,CACpB,IAAI33Q,EAAS63Q,EAAiBF,EAAWthS,OAAQshS,EAAWn5R,OAAQhb,EAAOjH,MAAOiH,EAAOnH,MAAO6b,EAAY1U,GACxGiqB,EAASoqR,EAAiBD,EAAYvhS,OAAQuhS,EAAYp5R,OAAQhb,EAAOjH,MAAOiH,EAAOnH,MAAO6b,EAAY1U,GAC9G8V,EAAY2oB,EAAa,IAAOjC,EAAQ,EAAI,IAAOA,EAAQ,EAAI,MAC9CvS,EAAQ,EAAI,IAAOA,EAAQ,EAAI,IAEpD,OAAOnU,GAOXq9R,EAAS72T,UAAUg4T,eAAiB,SAAUrgT,EAAS+L,EAAQgV,GAC3D,IAAI/E,EAAajQ,EAAO8Q,MAAME,SAASyF,SAASxiB,GAChDgc,EAAWxrB,aAAa,YAAauwB,GACrChV,EAAOu0S,YAActkS,EACrBjQ,EAAO+tN,cAAcnrO,YAAYqtB,GACjCjQ,EAAOinN,cAAe,GAO1BksF,EAAS72T,UAAU0zO,aAAe,SAAUhwN,GACpCA,EAAOknN,QAAUlnN,EAAOknN,OAAOnvM,SAC/B/X,EAAO8Q,MAAMy9M,aAAa3/H,OAAO5uF,IAQzCmzS,EAAS72T,UAAUk4T,uBAAyB,SAAUx0S,EAAQu4E,GAC1D,IAIIp3E,EAJA0uB,EAAY,IAAI9W,OAChB5a,EAAO6B,EAAOu0S,YACd3nQ,EAAkBzuC,EAAKrK,aAAa,oBACpCs/C,EAAapzC,EAAOu0S,YAAYlhQ,iBAEpCl1C,EAAKxY,MAAMC,WAAa,SACxBiqC,EAAU7W,QAAQ7a,GACdhS,SAAUosF,EAAOpsF,SACjBrL,MAAOy3F,EAAOz3F,MACdm4B,SAAU,SAAU/3B,GACZA,EAAKg4B,WAAah4B,EAAKJ,QACvBqd,EAAKxY,MAAMC,WAAa,UACxBub,EAAc7T,KAAKE,IAAIF,KAAK4xB,OAAQh+B,EAAKg4B,UAAYh4B,EAAKJ,OAASsyD,EAAclyD,EAAKiL,WACtFgS,EAAK1Z,aAAa,mBAAoB0c,EAAc,IAAMiyC,KAGlEnzC,IAAK,SAAUmN,GACXjP,EAAK1Z,aAAa,mBAAoBmoD,GACtC5sC,EAAO8Q,MAAMnJ,QAAQ,qBAAuB3H,OAAQA,QAWhEmzS,EAAS72T,UAAUm4T,mBAAqB,SAAUrgS,EAAOpU,EAAQ0U,EAAY+8M,GACzE,IAAI7D,EAAe5tN,EAAOknN,QAAUlnN,EAAOknN,OAAOjwN,MAAS+I,EAAOknN,OAAOjwN,MAAQ,EAC7E02N,EAAgB3tN,EAAOknN,QAAUlnN,EAAOknN,OAAOlwN,OAAUgJ,EAAOknN,OAAOlwN,OAAS,EACpFod,EAAMs0M,gBAAgBjjO,KAAKgsO,EAAYr9M,EAAMvB,OAAQuB,EAAM4G,OAAQhb,EAAOjH,MAAOiH,EAAOnH,MAAO6b,EAAY1U,IAC3GoU,EAAM2zM,QAAQtiO,KAAK,IAAI+wB,GAAKpC,EAAMs0M,gBAAgB,GAAG16N,EAAI4/N,EAAax5M,EAAMs0M,gBAAgB,GAAGz6N,EAAI0/N,EAAc,EAAIC,EAAa,EAAID,KAO1IwlF,EAAS72T,UAAUo4T,kBAAoB,SAAU10S,EAAQ6vB,GACrD,IAOI5xC,EAPA+2B,EAAWhV,EAAO6tN,gBAAgBr7N,WAAW,GAAGA,WAAW,GAC3DgmB,EAASD,GAAqB,UAC9B+5K,GAAiBt9K,EAASlhB,aAAa,UACvC6gT,GAAgB3/R,EAASlhB,aAAa,SACtC8gT,GAAW5/R,EAASlhB,aAAa,KACjC+gT,EAAU70S,EAAO8Q,MAAMsG,qBAAuBpC,EAASlhB,aAAa,YAAakhB,EAASlhB,aAAa,MACtGkhB,EAASlhB,aAAa,KAE3BkhB,EAASrvB,MAAMC,WAAa,SAC5B,IAAImzB,OAAcC,QAAQhE,GACtB7oB,SAAU0jC,EAAU1jC,SACpBrL,MAAO+uC,EAAU/uC,MACjBm4B,SAAU,SAAU/3B,GACZA,EAAKg4B,WAAah4B,EAAKJ,QACvBk0B,EAASrvB,MAAMC,WAAa,UACxBoa,EAAO8Q,MAAMsG,qBACbn5B,EAAQu6B,EAAOt3B,EAAKg4B,UAAYh4B,EAAKJ,MAAO,EAAGwxM,EAAepxM,EAAKiL,UACnE6oB,EAASvwB,aAAa,YAAa,aAAemwT,EAAU,IAAMC,EAC9D,aAAgB52T,EAAQq0M,EAAiB,gBAAmBsiH,EAAW,KAAQC,EAAW,OAG9F52T,EAAQu6B,EAAOt3B,EAAKg4B,UAAYh4B,EAAKJ,MAAO,EAAG6zT,EAAczzT,EAAKiL,UAClE6oB,EAASvwB,aAAa,YAAa,aAAemwT,EAAU,IAAMC,EAC9D,WAAc52T,EAAQ02T,EAAgB,mBAAsBC,EAAW,KAAQC,EAAW,QAI1G50S,IAAK,SAAUmN,GACX4H,EAASvwB,aAAa,YAAa,kBACnCub,EAAO8Q,MAAMnJ,QAAQ,qBAAuB3H,OAAQA,QAIzDmzS,KCnKPrmO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexC2nO,GAA4B,SAAUnnO,GAEtC,SAASmnO,IACL,OAAkB,OAAXnnO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA2E/D,OA7EA6rF,GAAUgoO,EAAYnnO,GAStBmnO,EAAWx4T,UAAUsyG,OAAS,SAAU5uF,EAAQjH,EAAOF,EAAO6b,GAW1D,IAAK,IAVD8nB,EACAvS,EAIAh2B,EAHA6hB,EAAY,GACZi/R,EAAY,KACZt2Q,EAAa,IAEbu2Q,EAAWh1S,EAAO8Q,OAAwC,eAA/B9Q,EAAO8Q,MAAMk3M,cACxCitF,EAAUj1S,EAAOuqN,oBAAyD,SAAnCvqN,EAAOuqN,mBAAmB/qM,KACjE01R,EAAgBF,EAAUvgS,GAAqB0H,GAC/Cg5R,EAAgBl0T,KAAKmyT,wBAAwBpzS,GACxC3gB,EAAK,EAAG+1T,EAAkBD,EAAe91T,EAAK+1T,EAAgB13T,OAAQ2B,IAAM,CACjF,IAAI+0B,EAAQghS,EAAgB/1T,GAC5B+0B,EAAM2zM,WACF3zM,EAAM2D,SAAWvF,GAAY2iS,EAAc/gS,EAAMlhB,MAAQ,GAAIkhB,EAAO+gS,EAAc/gS,EAAMlhB,MAAQ,GAAI8M,IACpG8V,GAAa70B,KAAKizT,iBAAiBa,EAAW3gS,EAAOpU,EAAQ0U,EAAYwgS,EAAez2Q,GACxFA,EAAas2Q,EAAY,IAAMt2Q,EAC/Bs2Q,EAAY3gS,EACZnzB,KAAKwzT,mBAAmBrgS,EAAOpU,EAAQ0U,EAAYwgS,KAGnDH,EAAYE,EAASF,EAAY,KACjCt2Q,EAAaw2Q,EAASx2Q,EAAa,IACnCrqB,EAAMs0M,oBAGVssF,GACIh1S,EAAOq1S,WACPprR,EAASirR,EAAcC,EAAcA,EAAcz3T,OAAS,GAAGm1B,OAAQsiS,EAAcA,EAAcz3T,OAAS,GAAGs9B,OAAQjiB,EAAOF,EAAO6b,EAAY1U,GACjJw8B,EAAS04Q,EAAcC,EAAc,GAAGtiS,OAAQsiS,EAAc,GAAGn6R,OAAQjiB,EAAOF,EAAO6b,EAAY1U,GACnG8V,EAAYA,EAAUra,OAAOgjC,EAAa,IAAMxU,EAAOj8B,EAAI,IAAMi8B,EAAOh8B,EAAI,MAAkBuuC,EAAOxuC,EAAI,IAAMwuC,EAAOvuC,IAG9H,IAAI+pB,EAA2B,cAApBhY,EAAOosL,SAA2BpsL,EAAO8Q,MAAM7uB,QAAQsC,GAAK,cAAgByb,EAAO9M,MAAQ,IAAM8M,EAAOgY,KAC3F,cAApBhY,EAAOosL,SAA2BpsL,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO+pS,YAAc,cAAgB/pS,EAAO9M,MACjH8M,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MACtDe,EAAU,IAAIyiB,GAAWsB,EAAM,OAAQhY,EAAO/I,MAAO+I,EAAO8qD,SAAU9qD,EAAOtR,QAASsR,EAAO+0C,UAAWj/B,GACxG70B,KAAKqzT,eAAergT,EAAS+L,EAAQ,IACrC/e,KAAK+uO,aAAahwN,IAOtB80S,EAAWx4T,UAAU+xO,YAAc,SAAUruN,GACzC,IAAIu4E,EAASv4E,EAAO6vB,UACpB5uC,KAAKuzT,uBAAuBx0S,EAAQu4E,IAKxCu8N,EAAWx4T,UAAU0kC,cAAgB,WAIjC,MAAO,cAOX8zR,EAAWx4T,UAAUiX,QAAU,SAAUud,KAKlCgkS,GACT3B,ICtFEmC,GAA4B,WAC5B,SAASA,KA+RT,OAxRAA,EAAWh5T,UAAUi5T,kBAAoB,SAAUv1S,GAC3CA,EAAO8Q,MAAM0kS,4BAA8Bx1S,EAAO7K,UAClDlU,KAAKw0T,uBAAuBz1S,GAEhC,IAAI7K,EAAY6K,EAAO8Q,MAAM0kS,0BAAgCx1S,EAAO7K,SAAX,EACrDmyS,EAAatnS,EAAO8Q,MAAM0kS,0BAAgCx1S,EAAOsnS,UAAX,EAC1DtnS,EAAOinN,cAAe,EACtB,IAMIp5N,EANAg1B,EAAgB7iB,EAAO8Q,MAAM+R,cAC7B6yR,EAAgB11S,EAAO8Q,MAAM0kS,0BAA4Bx1S,EAAO21S,cAAgB,EAChFC,EAAuC,OAAvB51S,EAAOw8R,YAA0C,cAAhBx8R,EAAOrY,KAAwB,EAAI,GACpFqY,EAAOw8R,YAEPvlS,EADoBsgB,GAAkBvX,EAAOjH,MAAO8pB,GACxB+yR,EAE5Bz7R,EAAW,EAAamtR,EAAY,GACpC7vF,EAAc,IAAIV,GAAY58L,EAAUA,EAAY,EAAImtR,GAM5D,OALMlsQ,MAAMq8K,EAAYj5N,QAAU48C,MAAMq8K,EAAYx3M,OAEhDpS,EAAS6nT,GADTj+F,EAAc,IAAIV,GAAYU,EAAYj5N,MAAQyY,EAAOwgN,EAAYx3M,IAAMhJ,IACtCse,MACrCkiM,EAAc,IAAIV,GAAYU,EAAYj5N,MAAQqP,EAAS,EAAG4pN,EAAYx3M,IAAMpS,EAAS,IAEtF4pN,GAOX69F,EAAWh5T,UAAUu5T,aAAe,SAAUp5R,EAAIC,EAAIC,EAAIC,EAAI5c,GAC1D,IAAIw8B,EAASrgB,GAASM,EAAIC,EAAI1c,EAAOjH,MAAOiH,EAAOnH,MAAOmH,EAAO8Q,MAAMsG,qBACnE6S,EAAS9N,GAASQ,EAAIC,EAAI5c,EAAOjH,MAAOiH,EAAOnH,MAAOmH,EAAO8Q,MAAMsG,qBACvE,OAAO,IAAIZ,GAAKlpB,KAAK8T,IAAIo7B,EAAOxuC,EAAGi8B,EAAOj8B,GAAIV,KAAK8T,IAAIo7B,EAAOvuC,EAAGg8B,EAAOh8B,GAAIX,KAAKE,IAAIy8B,EAAOj8B,EAAIwuC,EAAOxuC,GAAIV,KAAKE,IAAIy8B,EAAOh8B,EAAIuuC,EAAOvuC,KAO1IqnT,EAAWh5T,UAAUm5T,uBAAyB,SAAUz1S,GAEpD,IACK,IAFD8Q,EAAQ9Q,EAAO8Q,MAEVzxB,EAAK,EAAGyE,EAAKgtB,EAAM2vC,QAASphE,EAAKyE,EAAGpG,OAAQ2B,IAEjD,IAAK,IADDitO,EAAaxoO,EAAGzE,GACX6F,EAAK,EAAGwG,EAAKolB,EAAMyuM,KAAMr6N,EAAKwG,EAAGhO,OAAQwH,IAAM,CACpD,IAAI+Z,EAAOvT,EAAGxG,GACdjE,KAAK60T,iBAAiB91S,EAAO4rN,qBAAqBU,EAAYrtN,GAAM,MAIhFq2S,EAAWh5T,UAAUw5T,iBAAmB,SAAUt+R,GAC9C,IAAIg1M,KACAupF,GAAYzO,UAAW,EAAGnyS,SAAU,MACxCqiB,EAAiBn3B,QAAQ,SAAUpC,IACS,IAApCA,EAAM0J,KAAKnI,QAAQ,YACfvB,EAAMuuO,mBACqCpwO,IAAvCowO,EAAcvuO,EAAMuuO,gBACpBvuO,EAAMkX,SAAW4gT,EAAQzO,UACzB96E,EAAcvuO,EAAMuuO,eAAiBupF,EAAQzO,aAG7CrpT,EAAMkX,SAAWq3N,EAAcvuO,EAAMuuO,eAIhB,OAArBupF,EAAQ5gT,UACRlX,EAAMkX,SAAW4gT,EAAQzO,UACzByO,EAAQ5gT,SAAW4gT,EAAQzO,aAG3BrpT,EAAMkX,SAAW4gT,EAAQ5gT,SAKjClX,EAAMkX,SAAW4gT,EAAQzO,cAGjC9vR,EAAiBn3B,QAAQ,SAAUpC,GAC/BA,EAAMqpT,UAAYyO,EAAQzO,aAQlCgO,EAAWh5T,UAAU05T,qBAAuB,SAAU5hS,EAAOT,EAAM3T,GAC1DA,EAAO8Q,MAAMsG,oBAIdn2B,KAAKg1T,cAAc7hS,EAAOT,EAAM3T,GAHhC/e,KAAKi1T,cAAc9hS,EAAOT,EAAM3T,GAKhB,cAAhBA,EAAOrY,OACPysB,EAAMsF,SAAWtF,EAAMpmB,EAAIgS,EAAOm2S,gBAAgBC,SAAW,EAC7DhiS,EAAMuF,SAAWvF,EAAMpmB,EAAIgS,EAAOm2S,gBAAgBC,SAAW,IAQrEd,EAAWh5T,UAAU45T,cAAgB,SAAU9hS,EAAOT,EAAM3T,GACxDoU,EAAM2zM,QAAQtiO,KAAKkuB,GACnBS,EAAMs0M,gBAAgBjjO,MAClBuI,EAAG2lB,EAAK3lB,EAAK2lB,EAAU,MAAI,EAC3B1lB,EAA0B,YAAtB+R,EAAOid,aAAsE,IAA1Cjd,EAAOid,WAAWz9B,QAAQ,YAC5D40B,EAAM4G,QAAU,IAAOhb,EAAOnH,MAAM2b,WAAeb,EAAK1lB,EAAK0lB,EAAK1lB,EAAI0lB,EAAK3c,UAQxFs+S,EAAWh5T,UAAU25T,cAAgB,SAAU7hS,EAAOT,EAAM3T,GACxDoU,EAAM2zM,QAAQtiO,KAAKkuB,GACnBS,EAAMs0M,gBAAgBjjO,MAClBuI,EAA0B,YAAtBgS,EAAOid,aAAsE,IAA1Cjd,EAAOid,WAAWz9B,QAAQ,YAC5D40B,EAAM4G,QAAU,IAAOhb,EAAOnH,MAAM2b,WAAeb,EAAK3lB,EAAI2lB,EAAK1c,MAAQ0c,EAAK3lB,EACnFC,EAAG0lB,EAAK1lB,EAAI0lB,EAAK3c,OAAS,KAQlCs+S,EAAWh5T,UAAU26J,aAAe,SAAUj3I,EAAQoU,EAAOiL,EAAM6G,GAC/D,IAAI7M,GACAC,QAAQ,EAAOtB,KAAMohM,GAAap5M,OAAQA,EAAQoU,MAAOA,EACzDiL,KAAMrf,EAAO0uN,cAAct6M,EAAOiL,GAClC6G,OAAQlmB,EAAO2uN,eAAev6M,EAAO8R,IAIzC,OAFAlmB,EAAO8Q,MAAMnJ,QAAQyxM,GAAa//L,GAClCjF,EAAM0C,MAAQuC,EAASgG,KAChBhG,GAOXi8R,EAAWh5T,UAAUipC,cAAgB,SAAUvlB,EAAQoU,EAAOT,EAAM0F,GAEhE,IADYrZ,EAAO8Q,MAAMsG,oBAAsBzD,EAAK3c,OAAS2c,EAAK1c,QACrD,EACT,OAAO,KAEX,IAAI6e,EAAY70B,KAAK2kC,yBAAyBjS,EAAM3T,EAAOgqB,aAAaxE,QAASxlB,EAAOgqB,aAAavE,SAAUzlB,EAAOgqB,aAAatE,WAAY1lB,EAAOgqB,aAAarE,aAC/J3N,EAA2B,cAApBhY,EAAOosL,SAA2BpsL,EAAO8Q,MAAM7uB,QAAQsC,GAAK,cAAgByb,EAAO9M,MAAQ,IAAM8M,EAAOgY,KAC/G,UAAY5D,EAAMlhB,MAAQ8M,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAQ,UAAYkhB,EAAMlhB,MAClGe,EAAU,IAAIyiB,GAAWsB,EAAMqB,EAASgG,KAAMhG,EAAS6M,OAAOjvB,MAAOoiB,EAAS6M,OAAOpP,MAAO9W,EAAOtR,QAASsR,EAAO+0C,UAAWj/B,GAC9H7zB,EAAU+d,EAAO8Q,MAAME,SAASyF,SAASxiB,GAC7C,OAAQ+L,EAAOid,YACX,IAAK,KACDh7B,EAAQwC,aAAa,aAAc2vB,EAAMpmB,EAAEG,WAAa,IAAMimB,EAAM4G,OAAO7sB,YAC3E,MACJ,IAAK,UACDlM,EAAQwC,aAAa,aAAc2vB,EAAMpmB,EAAEG,WAAa,IAAMimB,EAAM8I,KAAK/uB,WAAa,IAAMimB,EAAM+I,IAAIhvB,YAG9G6R,EAAO+tN,cAAcnrO,YAAYX,IAOrCqzT,EAAWh5T,UAAU08B,QAAU,SAAUhZ,GAGrC,IAAK,IAFDq2S,EAAer2S,EAAO+tN,cAAcv7N,WACpC0N,EAA4B,cAApBF,EAAOosL,SAA2B,EAAI,EACzC/sM,EAAK,EAAGyE,EAAKkc,EAAOkY,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI+0B,EAAQtwB,EAAGzE,IACV+0B,EAAMs0M,gBAAgBhrO,QAA4B,kBAAhBsiB,EAAOrY,MAA4BysB,EAAM2zM,QAAQrqO,UAGxFuD,KAAKq1T,YAAYD,EAAan2S,GAAQF,EAAQoU,GAC9ClU,OAQRo1S,EAAWh5T,UAAUg6T,YAAc,SAAUr0T,EAAS+d,EAAQoU,GAC1D,IAGIpmB,EACAC,EAGAoU,EACAC,EARAi2E,EAASv4E,EAAO6vB,UAChBrX,EAASD,GAAqB,UAC9Bg+R,EAASniS,EAAM4G,OAAS,EAGxBs3K,GAAiBl+K,EAAM2zM,QAAQ,GAAG/wN,OAClC29S,GAAgBvgS,EAAM2zM,QAAQ,GAAG9wN,MAGhC+I,EAAO8Q,MAAMsG,qBAednpB,GAAKmmB,EAAM2zM,QAAQ,GAAG95N,EAClB+R,EAAOrY,KAAKnI,QAAQ,aAAe,GACnCwO,EAAKumB,GAAmB,EAAGvU,EAAOnH,OAAUmH,EAAOnH,MAAM8a,KAAK1c,MAC9DoL,EAAUrU,EACVsU,EAAUrU,IAGVD,GAAKomB,EAAM2zM,QAAQ,GAAG/5N,EACtBsU,EAAUi0S,EAAStoT,EAAIA,EAAIqkM,EAC3BjwL,GAAqD,IAA1CrC,EAAOid,WAAWz9B,QAAQ,aAA2D,IAAtCwgB,EAAOrY,KAAKnI,QAAQ,aAAuBwO,EAAI2mT,EAAe,EACnH4B,IAAWv2S,EAAOnH,MAAM2b,WAAcxmB,EAAI2mT,EAAe3mT,KAxBlEA,GAAKomB,EAAM2zM,QAAQ,GAAG/5N,EAClBgS,EAAOrY,KAAKnI,QAAQ,aAAe,GACnCyO,GAAK,EAAIsmB,GAAmB,EAAGvU,EAAOnH,QAAWmH,EAAOnH,MAAM8a,KAAW,OACzEtR,EAAUrU,EACVsU,EAAUrU,IAGVA,GAAKmmB,EAAM2zM,QAAQ,GAAG95N,EACtBqU,GAAqD,IAA1CtC,EAAOid,WAAWz9B,QAAQ,aAA2D,IAAtCwgB,EAAOrY,KAAKnI,QAAQ,aAAuByO,EAAIqkM,EAAgB,EACpHikH,IAAWv2S,EAAOnH,MAAM2b,WAAcvmB,EAAIA,EAAIqkM,EACnDjwL,EAAUk0S,EAASvoT,EAAIA,EAAI2mT,IAiBnC,IAAI12T,EACJgE,EAAQ0D,MAAMC,WAAa,SAC3B,IAAImzB,OAAcC,QAAQ/2B,GACtBkK,SAAUosF,EAAOpsF,SACjBrL,MAAOy3F,EAAOz3F,MACdm4B,SAAU,SAAU/3B,GACZA,EAAKg4B,WAAah4B,EAAKJ,QACvBmB,EAAQ0D,MAAMC,WAAa,UACtBoa,EAAO8Q,MAAMsG,qBAOdu9R,EAAeA,GAA8B,EAC7C12T,EAAQu6B,EAAOt3B,EAAKg4B,UAAYh4B,EAAKJ,MAAO,EAAG6zT,EAAczzT,EAAKiL,UAClElK,EAAQwC,aAAa,YAAa,aAAe4d,EAAU,IAAMC,EAC7D,WAAcrkB,EAAQ02T,EAAgB,mBAAsBtyS,EAAW,KAAQC,EAAW,OAT9FgwL,EAAgBA,GAAgC,EAChDr0M,EAAQu6B,EAAOt3B,EAAKg4B,UAAYh4B,EAAKJ,MAAO,EAAGwxM,EAAepxM,EAAKiL,UACnElK,EAAQwC,aAAa,YAAa,aAAe4d,EAAU,IAAMC,EAC7D,aAAgBrkB,EAAQq0M,EAAiB,gBAAmBjwL,EAAW,KAAQC,EAAW,QAU1GrC,IAAK,SAAUmN,GACXnrB,EAAQwC,aAAa,YAAa,kBAClC,IAAIspO,EAAgB/tN,EAAO+tN,cAC3B,IAAI9rO,IAAY8rO,EAAc37F,kBAAoBh+G,EAAMlhB,QAAU8M,EAAOkY,OAAOx6B,OAAS,GACpE,cAAhBsiB,EAAOrY,MAAwB1F,IAAY8rO,EAAc1yN,SAAS0yN,EAAcnmK,kBAAoB,MACrG5nD,EAAO8Q,MAAMnJ,QAAQ,qBAAuB3H,OAAQA,IAChC,cAAhBA,EAAOrY,MAEP,IAAK,IADD0uT,EAAetoF,EAAcv7N,WACxBpV,EAAI,EAAGA,EAAIi5T,EAAa34T,OAAQN,KACY,IAA7Ci5T,EAAaj5T,GAAGmH,GAAG/E,QAAQ,eAC3B62T,EAAaj5T,GAAGuI,MAAMC,WAAa,UACnCywT,EAAaj5T,GAAGqH,aAAa,YAAa,uBAWtE6wT,EAAWh5T,UAAUspC,yBAA2B,SAAUjS,EAAM6R,EAASC,EAAUC,EAAYC,GAC3F,MAAO,KAAYhS,EAAK3lB,EAAI,KAAOw3B,EAAU7R,EAAK1lB,GAC9C,MAAQ0lB,EAAK3lB,EAAI,IAAM2lB,EAAK1lB,EAAI,KAAO0lB,EAAK3lB,EAAIw3B,GAAW,IAC3D7R,EAAK1lB,EAAI,OAAmB0lB,EAAK3lB,EAAI2lB,EAAK1c,MAAQwuB,GAAY,IAAM9R,EAAK1lB,EACzE,OAAS0lB,EAAK3lB,EAAI2lB,EAAK1c,OAAS,IAAM0c,EAAK1lB,EAAI,KAC9C0lB,EAAK3lB,EAAI2lB,EAAK1c,OAAS,KAAO0c,EAAK1lB,EAAIw3B,GAAY,OACnD9R,EAAK3lB,EAAI2lB,EAAK1c,OAAS,KAAO0c,EAAK1lB,EAAI0lB,EAAK3c,OAAS2uB,GACpD,OAAShS,EAAK3lB,EAAI2lB,EAAK1c,OAAS,KAAO0c,EAAK1lB,EAAI0lB,EAAK3c,QAAU,KAAO2c,EAAK3lB,EAAI2lB,EAAK1c,MAAQ0uB,GAAe,KAC5GhS,EAAK1lB,EAAI0lB,EAAK3c,QAAU,OAAc2c,EAAK3lB,EAAI03B,GAAc,KAAO/R,EAAK1lB,EAAI0lB,EAAK3c,QAAU,MAAQ2c,EAAK3lB,EAAI,KAC7G2lB,EAAK1lB,EAAI0lB,EAAK3c,QAAU,IAAM2c,EAAK3lB,EAAI,KAAO2lB,EAAK1lB,EAAI0lB,EAAK3c,OAAS0uB,GAAc,MAAkB/R,EAAK3lB,EAAI,KAC9Gw3B,EAAU7R,EAAK1lB,GAAK,MAEtBqnT,KCxSPxoO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCqpO,GAA8B,SAAU7oO,GAExC,SAAS6oO,IACL,OAAkB,OAAX7oO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAsD/D,OAxDA6rF,GAAU0pO,EAAc7oO,GASxB6oO,EAAal6T,UAAUsyG,OAAS,SAAU5uF,GAKtC,IAAK,IAJD2T,EAGA0F,EAFAo9R,EAAiBx1T,KAAKs0T,kBAAkBv1S,GACxCy8Q,EAASnvR,KAAKC,IAAIyS,EAAOnH,MAAMoa,aAAa7R,IAAK,GAE5C/hB,EAAK,EAAGyE,EAAKkc,EAAOkY,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIq3T,EAAc5yT,EAAGzE,GAGrB,GAFAq3T,EAAYhuF,mBACZguF,EAAY3uF,WACR2uF,EAAY3+R,SAAWvF,GAAYxS,EAAOkY,OAAOw+R,EAAYxjT,MAAQ,GAAIwjT,EAAa12S,EAAOkY,OAAOw+R,EAAYxjT,MAAQ,GAAI8M,GAAS,CACrI2T,EAAO1yB,KAAK40T,aAAaa,EAAY7jS,OAAS4jS,EAAej4T,MAAOk4T,EAAY17R,OAAQ07R,EAAY7jS,OAAS4jS,EAAex2S,IAAKw8Q,EAAQz8Q,GACzI,IAAI8W,EAA4B,cAApB9W,EAAOosL,SAA2BsqH,EAAY5/R,MAAQ9W,EAAO8qD,UACzEzxC,EAAWp4B,KAAKg2J,aAAaj3I,EAAQ02S,EAAa5/R,GAAS7f,MAAO+I,EAAOkmB,OAAOjvB,MAAO6f,MAAO9W,EAAOkmB,OAAOpP,SAC9FwC,SACVr4B,KAAK+0T,qBAAqBU,EAAa/iS,EAAM3T,GAC7C/e,KAAKskC,cAAcvlB,EAAQ02S,EAAa/iS,EAAM0F,OAU9Dm9R,EAAal6T,UAAU+xO,YAAc,SAAUruN,GAC3C/e,KAAK+3B,QAAQhZ,IAKjBw2S,EAAal6T,UAAU0kC,cAAgB,WACnC,MAAO,gBAUXw1R,EAAal6T,UAAUiX,QAAU,SAAUud,KAKpC0lS,GACTlB,ICzEExoO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAiBxCwpO,GAAoC,SAAUhpO,GAE9C,SAASgpO,IACL,OAAkB,OAAXhpO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAmL/D,OArLA6rF,GAAU6pO,EAAoBhpO,GAc9BgpO,EAAmBr6T,UAAUs6T,qBAAuB,SAAU/jS,EAAQmI,EAAQhb,EAAQ0U,EAAY2/R,EAAkB51Q,EAAYo4Q,GAC5H,IACI1C,EADAr+R,EAAY,GAMhB,OAJmB,OAAf2oB,IAEA3oB,GAAc+gS,EAAY,KAD1B1C,EAAaE,EAAiBxhS,EAAQmI,EAAQhb,EAAOjH,MAAOiH,EAAOnH,MAAO6b,EAAY1U,IACzC,EAAI,IAAOm0S,EAAY,EAAI,KAErEr+R,GAUX6gS,EAAmBr6T,UAAUw6T,sBAAwB,SAAU3C,EAAYC,EAAap0S,EAAQ0U,EAAY2/R,GACxG,IAAIv+R,EAAY,GAGhB,OAFAA,GAAa70B,KAAK21T,qBAAqBzC,EAAWnmT,EAAGmmT,EAAWlmT,EAAG+R,EAAQ0U,EAAY2/R,EAAkB,KAAM,KAC/Gv+R,GAAa70B,KAAK21T,qBAAqBxC,EAAYpmT,EAAGomT,EAAYnmT,EAAG+R,EAAQ0U,EAAY2/R,EAAkB,KAAM,MAOrHsC,EAAmBr6T,UAAUoyO,cAAgB,SAAUh8M,EAAco7F,EAAU9tG,EAAQ+2S,EAAYrsR,GAC/F,GAAiC,KAA7B1qB,EAAOmqN,kBAA0B,CAGjC,IAAK,IAFD3+L,OAAU,EAELpuC,EAAI,EAAGA,EAAIstC,EAAShtC,OAAQN,IAGjC,GAFAouC,EAAUd,EAASttC,IACX25T,EAAarkS,EAAaG,OAASH,EAAasI,SAC3C/5B,KAAK+1T,aAAaxrR,EAAQvtC,MAAO84T,EAAa/2S,EAAOjH,MAAQiH,EAAOnH,MAAOmH,EAAO8Q,SAAW0a,EAAQvtC,MAAO,CACrHy0B,EAAao4C,SAAWt/B,EAAQ1U,MAChC,MAMR,OAH6B,MAAzBpE,EAAao4C,WACbp4C,EAAao4C,SAAW9qD,EAAO8qD,WAE5B,EAGP,QAAIgjD,GACO9tG,EAAO0uN,cAAch8M,EAAc1S,EAAO8qD,YAAc9qD,EAAO0uN,cAAc5gH,EAAU9tG,EAAO8qD,WAOjH6rP,EAAmBr6T,UAAU26T,aAAe,SAAUj3S,EAAQk3S,GAC1D,IAAI9/S,EAA8B,MAAvB4I,EAAOm3S,YAAsBn3S,EAAOjH,MAAQiH,EAAOnH,MAE1Du+S,EAASn2T,KACb,SAFkBwa,OAAOy7S,GAET9+R,KAAK,SAAUmkB,EAAGhe,GAC9B,OAAO64R,EAAOJ,aAAaz6Q,EAAEt+C,MAAOmZ,EAAM4I,EAAO8Q,OAASsmS,EAAOJ,aAAaz4R,EAAEtgC,MAAOmZ,EAAM4I,EAAO8Q,UAS5G6lS,EAAmBr6T,UAAU+6T,iBAAmB,SAAUr3S,EAAQ/L,EAASy2B,GACvE,IAAI1pC,EAAQC,KACZ,GAAiC,KAA7B+e,EAAOmqN,kBAIP,OAHAl2N,EAAQkkB,IAAI,SAAUogE,GAClBv3F,EAAMszT,eAAe/7N,EAAQv4E,EAAQ,MAElC,KAEX,IAGIwrB,EAHAurR,EAAoC,MAAvB/2S,EAAOm3S,YACpB//S,EAAO2/S,EAAa/2S,EAAOjH,MAAQiH,EAAOnH,MAC1CiY,EAAQ9Q,EAAO8Q,MAEnB7vB,KAAKq2T,eAAe5sR,EAAUtzB,EAAM4I,EAAQ0qB,EAAShtC,QAyBrD,IAAK,IAvBDO,EACA09G,EAFAj+G,EAASgtC,EAAShtC,OAGlBwC,EAAU,SAAUgT,GACpBs4B,EAAUd,EAASx3B,GACnBjV,EAAQmyG,EAAO4mN,aAAaxrR,EAAQvtC,MAAOmZ,EAAM4I,EAAO8Q,QACxD6qF,EAAWvL,EAAOmnN,eAAerkT,EAAQk9F,EAAO4mN,aAAatsR,EAASx3B,EAAQ,GAAGjV,MAAOmZ,EAAM4I,EAAO8Q,OAC/F1Z,EAAK6b,aAAa7R,IAAKnjB,EAAO+hB,EAAQ9M,EAAO6jT,KAE/C9iT,EAAQkkB,IAAI,SAAUogE,GAClBv4E,EAAO+tN,cAAcnrO,YAAYkuB,EAAME,SAASyF,UAC5Cu3M,YAAaryH,EACbgoH,mBAAoBn4L,EAAQupB,UAC5BrmD,QAAW6pF,EAAO7pF,QAClB6wB,OAAUvf,EAAOrY,KAAKnI,QAAQ,SAAW,EAAIgsC,EAAQ1U,OAAS9W,EAAO8qD,SAAW9qD,EAAOkmB,OAAOpP,MAC9FqP,eAAgBoyD,EAAO,gBACvBl5D,KAAQrf,EAAOrY,KAAKnI,QAAQ,SAAW,EAAI,OAASgsC,EAAQ1U,OAAS9W,EAAO8qD,SAC5EvmE,GAAMg0F,EAAOh0F,GAAK,YAAc2O,EAChC6nB,EAAKw9D,EAAOx9D,QAKxBq1E,EAASnvG,KACJiS,EAAQ,EAAGA,EAAQxV,EAAQwV,IAChChT,EAAQgT,IAGhByjT,EAAmBr6T,UAAUg7T,eAAiB,SAAU5sR,EAAUtzB,EAAM4I,EAAQtiB,GAC5E,GAAIA,GAAU,EAEV,OADAgtC,EAASjlC,MAAOxH,MAAOmZ,EAAK6b,aAAa1lB,IAAKupB,MAAO9W,EAAO8qD,WACrD,KAEP7pE,KAAK+1T,aAAatsR,EAAShtC,EAAS,GAAGO,MAAOmZ,EAAM4I,EAAO8Q,OAAS1Z,EAAK6b,aAAa1lB,KACtFm9B,EAASjlC,MAAOxH,MAAOmZ,EAAK6b,aAAa1lB,IAAKupB,MAAO9W,EAAO8qD,YAYpE6rP,EAAmBr6T,UAAUi7T,eAAiB,SAAU/tS,EAAYmP,EAAU3Y,EAAQ9M,EAAOskT,GACzF,IAAIC,EAAaz3S,EAAO8Q,MAAMsG,oBAC1BsgS,EAAqBv7R,GAASq7R,EAAMhuS,EAAaxJ,EAAOjH,MAAMka,aAAa7R,IAAKo2S,EAAMx3S,EAAOnH,MAAMoa,aAAa1lB,IAAMorB,EAAU3Y,EAAOjH,MAAOiH,EAAOnH,MAAO4+S,GAC5JE,EAAmBx7R,GAASq7R,EAAM7+R,EAAW3Y,EAAOjH,MAAMka,aAAa1lB,IAAKiqT,EAAMx3S,EAAOnH,MAAMoa,aAAa7R,IAAMoI,EAAYxJ,EAAOjH,MAAOiH,EAAOnH,MAAO4+S,GAG9J,OAFAE,EAAmBF,GACdC,EAAoBA,EAAqBC,GAAkB,GAAKA,GAC/C3pT,EAAI0pT,EAAmB1pT,EAAI,GAAO2pT,EAAiB1pT,EAAIypT,EAAmBzpT,EAAI,GAChG+R,EAAO+tN,cAAcnrO,YAAYod,EAAO8Q,MAAME,SAASsrF,aAAa,IAAI2hH,GAAWj+M,EAAO8Q,MAAM7uB,QAAQsC,GAAK,yBAA2B2O,EAAO,eAAiB+D,MAAO,EAAG6f,MAAO,QAAU,GACvL9oB,EAAG0pT,EAAmB1pT,EACtBC,EAAGypT,EAAmBzpT,EACtBgJ,MAAO0gT,EAAiB3pT,EAAI0pT,EAAmB1pT,EAC/CgJ,OAAQ2gT,EAAiB1pT,EAAIypT,EAAmBzpT,MAE7C,QAAU+R,EAAO8Q,MAAM7uB,QAAQsC,GAAK,yBAA2B2O,EAAQ,KAE3E,MAQXyjT,EAAmBr6T,UAAU06T,aAAe,SAAU1gR,EAAcl/B,EAAM0Z,GAItE,GAHqB,OAAjBwlB,IACAA,EAAel/B,EAAK6b,aAAa1lB,KAEd,aAAnB6J,EAAKmb,UAA0B,CAC/B,IAAIgmE,GAAWr0B,SAAU,OAAQv8D,KAAM,YACvC,OAAO0Z,KAAK4pC,MAAMn6B,EAAM6gD,KAAK87B,cAAclV,EAAzBznE,CAAiCA,EAAM6gD,KAAK47B,cAAchV,EAAzBznE,CAAiC,IAAIzP,KAAKg+C,GAASpU,MAAM2wI,WAAYtyK,IAAKgtB,IAAgBhtB,QAE5I,GAAIlS,EAAKmb,UAAU/yB,QAAQ,aAAe,EAAG,CAC9C,IAAIqzB,EAA4B,qBAAnBzb,EAAKmb,UACb+jB,EAAah1B,UAAWnT,WACzBmoC,EACJ,OAAQl/B,EAAKqqN,OAAOjiO,QAAQqzB,GAAU,GAAMyjB,EAAel/B,EAAKqqN,OAAOjiO,QAAQqzB,GAG/E,OAAQyjB,GAGTqgR,GACTxD,ICxMErmO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCyqO,GAA4B,SAAUjqO,GAEtC,SAASiqO,IACL,OAAkB,OAAXjqO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAkE/D,OApEA6rF,GAAU8qO,EAAYjqO,GAStBiqO,EAAWt7T,UAAUsyG,OAAS,SAAU5uF,EAAQjH,EAAOF,EAAO6b,GAC1D,IAKImjS,EALA72T,EAAQC,KACRw9C,EAAa,KACb3oB,EAAY,GACZ2mQ,EAAwC,eAA/Bz8Q,EAAO8Q,MAAMk3M,cAAiChoN,EAAOkY,OAAO,GAAG8C,OACxE1tB,KAAKC,IAAIyS,EAAOnH,MAAMoa,aAAa7R,IAAK,GAExC02S,EAAc93S,EAAOuqN,oBAAyD,SAAnCvqN,EAAOuqN,mBAAmB/qM,KACrEyxD,EAAcjxE,EAAOkmB,OAASlmB,EAAOkmB,OAAOjvB,MAAQ,EACpD64N,EAAc9vN,EAAOkmB,OAASlmB,EAAOkmB,OAAOpP,MAAQ,cACpDo+R,EAA+C,eAA/Bl1S,EAAO8Q,MAAMk3M,cAAiCvzM,GAAqB0H,GACvFnc,EAAOkY,OAAOC,IAAI,SAAU/D,EAAOh3B,EAAGo2T,GAClCqE,EAAgBzjS,EAAMvB,OACtBuB,EAAMs0M,mBACNt0M,EAAM2zM,WACF3zM,EAAM2D,SAAWvF,GAAYghS,EAAap2T,EAAI,GAAIg3B,EAAOo/R,EAAap2T,EAAI,GAAI4iB,KAC9E8V,GAAa90B,EAAM41T,qBAAqBiB,EAAep7B,EAAQz8Q,EAAQ0U,EAAYwgS,EAAez2Q,EAAY,KAC9GA,EAAaA,GAAc,IAAIvqB,GAAc2jS,EAAep7B,GAE5D3mQ,GAAa90B,EAAM41T,qBAAqBiB,EAAezjS,EAAM4G,OAAQhb,EAAQ0U,EAAYwgS,EAAe,KAAM,MAC1G1B,EAAap2T,EAAI,IAAOo2T,EAAap2T,EAAI,GAAG26B,SAAY+/R,IACxDhiS,GAAa90B,EAAM81T,uBAAwB9oT,EAAK6pT,EAAe5pT,EAAKwuR,GAAUh+O,EAAYz+B,EAAQ0U,EAAYwgS,GAC9Gz2Q,EAAa,MAEjBz9C,EAAMyzT,mBAAmBrgS,EAAOpU,EAAQ0U,EAAYwgS,MAG5Dj0T,KAAKqzT,eAAe,IAAI59R,GAAW1W,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAO8M,EAAO8qD,SAAUmmB,EAAa6+I,EAAa9vN,EAAOtR,QAASsR,EAAO+0C,UAAY/0C,EAAOkY,OAAOx6B,OAAS,EAAKo4B,EAAY70B,KAAK21T,qBAAqB52S,EAAOkY,OAAOlY,EAAOkY,OAAOx6B,OAAS,GAAGm1B,OAAuC,eAA/B7S,EAAO8Q,MAAMk3M,cACjShoN,EAAOkY,OAAOlY,EAAOkY,OAAOx6B,OAAS,GAAGs9B,OAASyhQ,EAAQz8Q,EAAQ0U,EAAYwgS,EAAe,KAAM,KAAQ,IAAMl1S,EAAQ,IAC5H/e,KAAK+uO,aAAahwN,IAOtB43S,EAAWt7T,UAAUiX,QAAU,SAAUud,KAQzC8mS,EAAWt7T,UAAU0kC,cAAgB,WAIjC,MAAO,cAOX42R,EAAWt7T,UAAU+xO,YAAc,SAAUruN,GACzC,IAAIu4E,EAASv4E,EAAO6vB,UACpB5uC,KAAKyzT,kBAAkB10S,EAAQu4E,IAE5Bq/N,GACTjB,ICrFE7pO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexC4qO,GAA2B,SAAUpqO,GAErC,SAASoqO,IACL,OAAkB,OAAXpqO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAkD/D,OApDA6rF,GAAUirO,EAAWpqO,GASrBoqO,EAAUz7T,UAAUsyG,OAAS,SAAU5uF,GAKnC,IAAK,IAFD2T,EACA0F,EAHAojQ,EAASnvR,KAAKC,IAAIyS,EAAOnH,MAAMoa,aAAa7R,IAAK,GACjDq1S,EAAiBx1T,KAAKs0T,kBAAkBv1S,GAGnC3gB,EAAK,EAAGyE,EAAKkc,EAAOkY,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI24T,EAAWl0T,EAAGzE,GAClB24T,EAAStvF,mBACTsvF,EAASjwF,WACLiwF,EAASjgS,SAAWvF,GAAYxS,EAAOkY,OAAO8/R,EAAS9kT,MAAQ,GAAI8kT,EAAUh4S,EAAOkY,OAAO8/R,EAAS9kT,MAAQ,GAAI8M,KAChH2T,EAAO1yB,KAAK40T,aAAamC,EAASnlS,OAAS4jS,EAAej4T,MAAOw5T,EAASh9R,OAAQg9R,EAASnlS,OAAS4jS,EAAex2S,IAAKw8Q,EAAQz8Q,IAChIqZ,EAAWp4B,KAAKg2J,aAAaj3I,EAAQg4S,EAAUh4S,EAAO8qD,UAAY7zD,MAAO+I,EAAOkmB,OAAOjvB,MAAO6f,MAAO9W,EAAOkmB,OAAOpP,SACrGwC,SACVr4B,KAAK+0T,qBAAqBgC,EAAUrkS,EAAM3T,GAC1C/e,KAAKskC,cAAcvlB,EAAQg4S,EAAUrkS,EAAM0F,OAU3D0+R,EAAUz7T,UAAU+xO,YAAc,SAAUruN,GACxC/e,KAAK+3B,QAAQhZ,IAOjB+3S,EAAUz7T,UAAUiX,QAAU,SAAUud,KAQxCinS,EAAUz7T,UAAU0kC,cAAgB,WAChC,MAAO,aAEJ+2R,GACTzC,ICrEExoO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAkBxC8qO,GAAiC,SAAUtqO,GAE3C,SAASsqO,IACL,OAAkB,OAAXtqO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAyX/D,OA3XA6rF,GAAUmrO,EAAiBtqO,GAS3BsqO,EAAgB37T,UAAUqiO,YAAc,SAAUhrM,GAC9C,IAAI7C,EAAQ7vB,KAAK6vB,MACjB7vB,KAAK49N,gBAAkBlrM,EACvB1yB,KAAK29N,eAAiB,IAAIpoM,GAAK7C,EAAK3lB,EAAG2lB,EAAK1lB,EAAG0lB,EAAK1c,MAAO0c,EAAK3c,QAEhE/V,KAAKi+N,eAAepuM,EAAO7vB,KAAK49N,iBAChC59N,KAAKk+N,kBAAkBruM,EAAO7vB,KAAK49N,iBACnC59N,KAAKm+N,qBAET64F,EAAgB37T,UAAU4iO,eAAiB,SAAUpuM,EAAO6C,GACxD1yB,KAAKq+N,iBAAiB3rM,GACtB,IAAIuvC,EAAMpyC,EAAMyuM,KAAK,GACrBt+N,KAAKw+N,kBAAkBv8J,EAAKpyC,EAAO,IAAIJ,GAAKI,EAAMmF,cAAchf,MAAOisD,EAAIw8J,gBAAiB/rM,IAEhGskS,EAAgB37T,UAAU6iO,kBAAoB,SAAUruM,EAAO6C,GAC3D1yB,KAAK0+N,oBAAoBhsM,GACzB,IAAIyrC,EAAStuC,EAAM2vC,QAAQ,GAC3Bx/D,KAAKw+N,kBAAkBrgK,EAAQtuC,EAAO,IAAIJ,GAAK0uC,EAAOwgK,cAAe9uM,EAAMmF,cAAcjf,QAAS2c,IAOtGskS,EAAgB37T,UAAUmjO,kBAAoB,SAAUI,EAAY/uM,EAAOV,EAAM4E,GAC7E,IAAK,IAAI31B,EAAK,EAAGyE,EAAK+7N,EAAW31J,KAAM7qE,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAI+X,EAAOtT,EAAGzE,GACd+X,EAAK6lN,UAAUnsM,GACf1Z,EAAK8lN,WAAWtF,0BAA0BxnM,EAAMhZ,KAQxD6gT,EAAgB37T,UAAU8iO,kBAAoB,WAC1C,IAAItuM,EAAQ7vB,KAAK6vB,MAGjB7vB,KAAKohB,QAAuC,GAA7BphB,KAAK49N,gBAAgB5nN,MAAchW,KAAK49N,gBAAgB7wN,EACvE/M,KAAKqhB,QAAwC,GAA9BrhB,KAAK49N,gBAAgB7nN,OAAe/V,KAAK49N,gBAAgB5wN,EACxE6iB,EAAMjjB,OAASP,KAAK8T,IAAIngB,KAAK49N,gBAAgB5nN,MAAOhW,KAAK49N,gBAAgB7nN,QAAU,EAHrE,EAIV8Z,EAAMgE,aAAa+mM,eAAe7kN,OAAS8Z,EAAMgE,aAAaknM,aAAahlN,OAC/E8Z,EAAMjjB,OAAUijB,EAAMgE,aAAaQ,YAAcxE,EAAMjjB,OAAU,IACjE5M,KAAK29N,eAAe3wN,EAAIhN,KAAKqhB,QAAUwO,EAAMjjB,OAC7C5M,KAAK29N,eAAe5wN,EAAI/M,KAAKohB,QAAUyO,EAAMjjB,OAC7C5M,KAAK29N,eAAe5nN,OAAS,EAAI8Z,EAAMjjB,OACvC5M,KAAK29N,eAAe3nN,MAAQ,EAAI6Z,EAAMjjB,OACtC5M,KAAKq+N,iBAAiBr+N,KAAK29N,gBACpB9tM,EAAMywM,aACR5tM,KAAO1yB,KAAK29N,eACjB39N,KAAK0+N,oBAAoB1+N,KAAK29N,gBACvB9tM,EAAMgE,aACRnB,KAAO1yB,KAAK29N,gBAOrBq5F,EAAgB37T,UAAUokO,QAAU,WAChC,IAAI5vM,EAAQ7vB,KAAK6vB,MACjBA,EAAMgwM,aAAar7N,KAAKqrB,EAAMywM,cAC9B,IAAIr+J,EAAMpyC,EAAMyuM,KAAK,GACrBr8J,EAAIgH,KAAK,GAAKp5C,EAAMywM,aACpBzwM,EAAMyuM,KAAK,GAAKr8J,EAChBpyC,EAAMmwM,eAAex7N,KAAKqrB,EAAMgE,cAChC,IAAIsqC,EAAStuC,EAAM2vC,QAAQ,GAC3BrB,EAAO8K,KAAK,GAAKp5C,EAAMgE,aACvBhE,EAAM2vC,QAAQ,GAAKrB,GAMvB64P,EAAgB37T,UAAUgjO,iBAAmB,SAAU3rM,GAEnD,IAAI7C,EAAQ7vB,KAAK6vB,MACboyC,EAAMpyC,EAAMyuM,KAAK,GACrBr8J,EAAIw8J,eAAiB/rM,EAAK3c,OAAS,EACnCksD,EAAIm9J,YAAc1sM,EAAK1lB,EACvB6iB,EAAMyuM,KAAK,GAAKr8J,GAMpB+0P,EAAgB37T,UAAUqjO,oBAAsB,SAAUhsM,GAEtD,IAAI7C,EAAQ7vB,KAAK6vB,MACbsuC,EAAStuC,EAAM2vC,QAAQ,GAC3BrB,EAAOqhK,aAAe9sM,EAAK3lB,EAC3BoxD,EAAOwgK,cAAgBjsM,EAAK1c,MAC5B6Z,EAAM2vC,QAAQ,GAAKrB,GAOvB64P,EAAgB37T,UAAU4lO,WAAa,WACnC,IAAI9qN,EACA0Z,EAAQ7vB,KAAK6vB,MACjB7vB,KAAK8zB,WAAajE,EAAMgE,aAAaC,WAGrC,IAAK,IAFDqtM,EAActxM,EAAME,SAAS+9C,aAAcxqE,GAAIusB,EAAM7uB,QAAQsC,GAAK,mBAClE89N,EAAkBvxM,EAAME,SAAS+9C,aAAcxqE,GAAIusB,EAAM7uB,QAAQsC,GAAK,0BACjEnH,EAAI,EAAG0F,EAAMguB,EAAM8vM,gBAAgBljO,OAAQN,EAAI0F,EAAK1F,IACzD6D,KAAKgB,QAAU6uB,EAAME,SAAS+9C,aAAcxqE,GAAIusB,EAAM7uB,QAAQsC,GAAK,YAAcnH,IAExD,gBADzBga,EAAO0Z,EAAM8vM,gBAAgBxjO,IACpBy8B,cACDziB,EAAKorN,eAAevrN,MAAQ,GAAKG,EAAKykN,eAAe5kN,MAAQ,IAC7DhW,KAAKwhO,kBAAkBrrN,EAAMha,GAE7Bga,EAAK2gB,SACL92B,KAAKyhO,gBAAgBtrN,EAAMha,KAI/B6D,KAAK4hO,kBAAkBzrN,EAAMha,GACzBga,EAAKyjN,UAAU5jN,MAAQ,GACvBhW,KAAKi3T,cAAc9gT,EAAMha,EAAGga,EAAKkpN,WAAY,GAE7ClpN,EAAK2gB,SACL92B,KAAK6hO,gBAAgB1rN,EAAMha,IAGnCglO,EAAYx/N,YAAY3B,KAAKgB,SAIjC,OAFAmgO,EAAYx/N,YAAY3B,KAAKgB,SAC7B6uB,EAAMW,UAAU7uB,YAAYw/N,GACrBC,GAEX41F,EAAgB37T,UAAU47T,cAAgB,SAAU9gT,EAAMlE,EAAOuwN,EAAOC,GACpE,IAAI5yM,EAAQ7vB,KAAK6vB,MACb0yM,KACA20F,EAASvjS,GAAoBC,GAAwBzd,EAAKqe,cAAc,GAAGx3B,MAAOmZ,GAAOnW,KAAK8zB,YAC9F/G,EAAW,KAAO/sB,KAAKohB,QAAU,IAAMphB,KAAKqhB,QAAU,MACrDrhB,KAAKohB,QAAUyO,EAAMjjB,OAASsqT,EAAOnqT,GAAK,KAAO/M,KAAKqhB,QAAUwO,EAAMjjB,OAASsqT,EAAOlqT,GAC3Fu1N,GACIj/N,GAAMusB,EAAM7uB,QAAQsC,GAAK,YAAc2O,EACvC6nB,EAAK/M,EACL21M,mBAAoBvsN,EAAKyjN,UAAU9lK,UACnC5uB,eAAgB/uB,EAAKyjN,UAAU5jN,MAC/BsoB,OAAUnoB,EAAKyjN,UAAU/jM,OAAShG,EAAM6F,WAAW3I,UAEvD8C,EAAMk3R,cAAcplT,YAAYkuB,EAAME,SAASyF,SAAS+sM,KAE5Dy0F,EAAgB37T,UAAUwmO,gBAAkB,SAAU1rN,EAAMlE,GACxD,IACI4xN,EAIAqzF,EAGAtqT,EARAijB,EAAQ7vB,KAAK6vB,MAGburM,EAAS,EACTwH,EAAS,EAETjhN,EAAQ3hB,KAAK8zB,WAAa,EAAI9zB,KAAK8zB,WAAa,IAAM9zB,KAAK8zB,WAI3D5M,EAAe2I,EAAME,SAAS+9C,aAAcxqE,GAAIusB,EAAM7uB,QAAQsC,GAAK,aAAe2O,IACtFilT,EAASvjS,GAAoBC,GAAwBzd,EAAKqe,cAAc,GAAGx3B,MAAOmZ,GAAOnW,KAAK8zB,YAC9F,IAAK,IAAI33B,EAAI,EAAG0F,EAAMsU,EAAKqe,cAAc/3B,OAAQN,EAAI0F,EAAK1F,IACtDyQ,EAASijB,EAAMjjB,OAAS0mB,GAAmBnd,EAAKqe,cAAcr4B,GAAGa,MAAOmZ,GACxE0tN,EAAc1tN,EAAKqe,cAAcr4B,GAAGgzB,KACpCviB,EAASijB,EAAMjjB,OAAS0mB,GAAmBnd,EAAKqe,cAAcr4B,GAAGa,MAAOmZ,GACxEilN,EAAUp7N,KAAKohB,QAAUxU,EAASsqT,EAAOnqT,GAAOoJ,EAAKykN,eAAe7kN,OAAS8tN,EAAY7tN,MAAQ,EAAIwkD,KAC9FnuD,KAAKwV,IAAIF,EAAQtV,KAAKkR,GAAK,MAAgC,WAAvBpH,EAAKkrG,cAA6B,GAAK,GAClFuhH,EAAU5iO,KAAKqhB,QAAUzU,EAASsqT,EAAOlqT,GAAOmJ,EAAKykN,eAAe7kN,OAAS8tN,EAAY9tN,OAAS,GAC3F1J,KAAKyV,IAAIH,EAAQtV,KAAKkR,GAAK,MAAgC,WAAvBpH,EAAKkrG,cAA6B,GAAK,GAElF1rF,GADU,IAAIC,GAAW/F,EAAM7uB,QAAQsC,GAAK2O,EAAQ,cAAgB9V,EAAGi/N,EAAQwH,EAAUiB,EAAY9tN,OAAS,EAbrG,SAaiHI,EAAKqe,cAAcr4B,GAAG2yB,MAC3H3Y,EAAKkf,WAAYlf,EAAKkf,WAAWQ,OAAShG,EAAM6F,WAAW7I,UAAW3F,GAE/F2I,EAAMk3R,cAAcplT,YAAYulB,IAEpC8vS,EAAgB37T,UAAUumO,kBAAoB,SAAUzrN,EAAMlE,GAC1D,IACIe,EACApG,EAGAsqT,EACA3kR,EAGA/W,EACAC,EACAC,EACAC,EAZA9L,EAAQ7vB,KAAK6vB,MAGbizM,EAAY,GACZD,EAAY,GAGZlhN,EAAQ3hB,KAAK8zB,WAAa,EAAI9zB,KAAK8zB,WAAa,IAAM9zB,KAAK8zB,WAM3DmR,GALO9uB,EAAKuc,MAMZmD,MAAO1f,EAAKorN,eAAe1rM,OAAShG,EAAM6F,WAAW1I,cACrDhX,MAAOG,EAAKorN,eAAevrN,QAE/B,GAAIG,EAAKorN,eAAevrN,MAAQ,EAC5B,GAAoC,UAAhC6Z,EAAM+R,cAAc,GAAGl7B,KACvB,IAAK,IAAI+c,EAAI,EAAGA,EAAItN,EAAKqe,cAAc/3B,OAAQgnB,IAC3C7W,EAASijB,EAAMjjB,OAAS0mB,GAAmBnd,EAAKqe,cAAc/Q,GAAGzmB,MAAOmZ,GACxEnD,EAAU,IAAIiqN,GAAaptM,EAAM7uB,QAAQsC,GAAK,kBAAoB2O,EAAO,cAAegzB,EAAQ9uB,EAAKorN,eAAevrN,MAAOhW,KAAKohB,QAASphB,KAAKqhB,QAASzU,GACvJ5M,KAAKgB,QAAQW,YAAYkuB,EAAME,SAASsU,WAAWrxB,QAGtD,CACD,IAASyQ,EAAI,EAAGA,EAAItN,EAAKqe,cAAc/3B,OAAQgnB,IAAK,CAChD7W,EAASijB,EAAMjjB,OAAS0mB,GAAmBnd,EAAKqe,cAAc/Q,GAAGzmB,MAAOmZ,GACxE,IAAK,IAAIha,EAAI,EAAG0F,EAAMguB,EAAMgE,aAAaW,cAAc/3B,OAAQN,EAAI0F,EAAK1F,IACpE+6T,EAASvjS,GAAoBC,GAAwB/D,EAAMgE,aAAaW,cAAcr4B,GAAGa,MAAO6yB,EAAMgE,cAAe7zB,KAAK8zB,YAEtHye,EAAU5e,GAAoBC,GAD9Bz3B,EAAI,EAAI0F,EAC8CguB,EAAMgE,aAAaW,cAAcr4B,EAAI,GAAGa,MAGxC6yB,EAAMgE,aAAaW,cAAc,GAAGx3B,MAHW6yB,EAAMgE,cAAe7zB,KAAK8zB,YAKnI0H,EAAKx7B,KAAKohB,QAAUxU,EAASsqT,EAAOnqT,EACpC0uB,EAAKz7B,KAAKqhB,QAAUzU,EAASsqT,EAAOlqT,EACpC0uB,EAAK17B,KAAKohB,QAAUxU,EAAS2lC,EAAQxlC,EACrC4uB,EAAK37B,KAAKqhB,QAAUzU,EAAS2lC,EAAQvlC,EACrC61N,EAAYA,EAAUroN,OAAO,KAAYghB,EAAK,IAAMC,EAAK,MAAkBC,EAAK,IAAMC,EAAK,KAGnG3oB,EAAU,IAAIyiB,GAAW5F,EAAM7uB,QAAQsC,GAAK,kBAAoB2O,EAAO,cAAekE,EAAKorN,eAAevrN,MAAOG,EAAKorN,eAAe1rM,OAAShG,EAAM6F,WAAW1I,cAAe,KAAM,KAAM61M,GAC1L7iO,KAAKgB,QAAQW,YAAYkuB,EAAME,SAASyF,SAASxiB,IAGzD,GAAImD,EAAKykN,eAAe5kN,MAAQ,EAAG,CAC/BkhT,EAASvjS,GAAoBC,GAAwBzd,EAAKqe,cAAc,GAAGx3B,MAAOmZ,GAAOnW,KAAK8zB,YAC9F,IAAS33B,EAAI,EAAGA,EAAIga,EAAKqe,cAAc/3B,OAAQN,IAC3CyQ,EAASijB,EAAMjjB,OAAS0mB,GAAmBnd,EAAKqe,cAAcr4B,GAAGa,MAAOmZ,GACxEqlB,EAAKx7B,KAAKohB,QAAUxU,EAASsqT,EAAOnqT,EACpC0uB,EAAKz7B,KAAKqhB,QAAUzU,EAASsqT,EAAOlqT,EACpC0uB,EAAKF,EAAMrlB,EAAKykN,eAAe7kN,OAAU1J,KAAKwV,IAAIF,EAAQtV,KAAKkR,GAAK,MAA+B,WAAtBpH,EAAKukN,aAA4B,GAAK,GACnH/+L,EAAKF,EAAMtlB,EAAKykN,eAAe7kN,OAAU1J,KAAKyV,IAAIH,EAAQtV,KAAKkR,GAAK,MAA+B,WAAtBpH,EAAKukN,aAA4B,GAAK,GACnHoI,EAAYA,EAAUtoN,OAAO,KAAOghB,EAAK,IAAMC,EAC3C,MAAQC,EAAK,IAAMC,EAAK,KAGpC37B,KAAK2jO,eAAextN,EAAMlE,EAAO6wN,EAAW,KAEhDk0F,EAAgB37T,UAAUmmO,kBAAoB,SAAUrrN,EAAMlE,GAiB1D,IAAK,IAfDkmB,EACA++R,EAMAx7R,EAEAC,EACAgnM,EAXA9yM,EAAQ7vB,KAAK6vB,MAGbgzM,EAAY,GACZC,EAAY,GACZq0F,EAAgB,GAChBhqS,EAAgB,GAChBqO,EAAKx7B,KAAKohB,QAEVqa,EAAKz7B,KAAKqhB,QAKV5kB,GAFW0Z,EAAKykN,eAAe7kN,OACxBI,EAAKuc,KACHvc,EAAKqe,cAAc/3B,QAEvBN,EAAI,EAAGA,EAAIM,EAAQN,IAAK,CAC7Bg8B,EAAehiB,EAAKqe,cAAcr4B,GAAGa,MACrCk6T,EAASvjS,GAAoBC,GAAwBzd,EAAKqe,cAAcr4B,GAAGa,MAAOmZ,GAAOnW,KAAK8zB,YAC9F4H,EAAK17B,KAAKohB,QAAUyO,EAAMjjB,OAASsqT,EAAOnqT,EAC1C4uB,EAAK37B,KAAKqhB,QAAUwO,EAAMjjB,OAASsqT,EAAOlqT,EAC1C,IAAIoqT,EAAO17R,EAAMvlB,EAAKykN,eAAe7kN,OAASmhT,EAAOnqT,GAA2B,WAAtBoJ,EAAKukN,cAA6B,EAAI,GAC5F28F,EAAO17R,EAAMxlB,EAAKykN,eAAe7kN,OAASmhT,EAAOlqT,GAA2B,WAAtBmJ,EAAKukN,cAA6B,EAAI,GAChGmI,EAAYA,EAAUroN,OAAO,KAAOghB,EAAK,IAAMC,EAAK,KAAYC,EAAK,IAAMC,GAC3EmnM,EAAYA,EAAUtoN,OAAO,KAAOkhB,EAAK,IAAMC,EAC3C,MAAQy7R,EAAO,IAAMC,EAAO,KAC5BlhT,EAAKqtN,sBAAwB,IAAMrtN,EAAKmtN,eAAettN,MAAQ,GAAKG,EAAKotN,eAAevtN,MAAQ,IAC1E,aAAnBG,EAAKmb,WAA4D,UAAhCzB,EAAM+R,cAAc,GAAGl7B,OAE3DywT,GADAx0F,EAAiB3iO,KAAKyjO,kBAAkBttN,EAAMgiB,EAAcg/R,EAAehqS,IAC5C,GAC/BA,EAAgBw1M,EAAe,IAGvC3iO,KAAK2jO,eAAextN,EAAMlE,EAAO6wN,EAAW31M,GAC5CntB,KAAK0jO,eAAevtN,EAAMlE,EAAO4wN,EAAWs0F,IAEhDH,EAAgB37T,UAAUooO,kBAAoB,SAAUttN,EAAMgiB,EAAc4qM,EAAWC,GASnF,IAAK,IAPDj2N,EACAC,EACAkqT,EAHAl6T,EAAQm7B,EAIRhH,EAAQhb,EAAK6b,aACb6C,KAGKpR,GAFMtN,EAAKotN,eAAextN,OACxBI,EAAKuc,KACH,GAAGjP,EAAItN,EAAKqtN,sBAAuB//M,IAG5C,GAFAzmB,IAA6B,aAAnBmZ,EAAKmb,UAA2Bnb,EAAKoe,iBAAmBpe,EAAK6b,aAAa7vB,WAC/EgU,EAAKqtN,sBAAwB,GAC9BtyM,GAAOl0B,EAAOm0B,GAAQ,CACtB+lS,EAASvjS,GAAoBC,GAAwB52B,EAAOmZ,GAAOnW,KAAK8zB,YACxE/mB,EAAI/M,KAAKohB,QAAUphB,KAAK6vB,MAAMjjB,OAASsqT,EAAOnqT,EAC9CC,EAAIhN,KAAKqhB,QAAUrhB,KAAK6vB,MAAMjjB,OAASsqT,EAAOlqT,EAC9C,IAAIsqT,EAAYvqT,EAAKoJ,EAAKotN,eAAextN,OAASmhT,EAAOnqT,GAA2B,WAAtBoJ,EAAKukN,cAA6B,EAAI,GAChG68F,EAAYvqT,EAAKmJ,EAAKotN,eAAextN,OAASmhT,EAAOlqT,GAA2B,WAAtBmJ,EAAKukN,cAA6B,EAAI,GACpGqI,EAAYA,EAAUvoN,OAAO,KAAYxa,KAAKohB,QAAU,IAAMphB,KAAKqhB,QAC7D,KAAOtU,EAAI,IAAMC,GACvBg2N,EAAYA,EAAUxoN,OAAO,KAAYzN,EAAI,IAAMC,EAAI,OAA0B,OAMzF,OAFA6nB,EAAUrwB,KAAKu+N,GACfluM,EAAUrwB,KAAKw+N,GACRnuM,GAOXmiS,EAAgB37T,UAAUomO,gBAAkB,SAAUtrN,EAAMlE,GACxD,IAMIilT,EACAM,EACAC,EAGAC,EAXA7nS,EAAQ7vB,KAAK6vB,MACburM,EAAS,EAETwH,EAAS,EACT17M,EAAe2I,EAAME,SAAS+9C,aAAcxqE,GAAIusB,EAAM7uB,QAAQsC,GAAK,aAAe2O,IAKlFizN,EAAuC,WAAvB/uN,EAAKkrG,cAGrBs2M,EAAa,GACbx0F,EAAmC,aAAnBhtN,EAAKmb,WAAoD,iBAAxBnb,EAAKud,gBACnB,UAAhC7D,EAAM+R,cAAc,GAAGl7B,KAAmB,GAAM,EACnDkG,EAASijB,EAAMjjB,OAASuJ,EAAKykN,eAAe7kN,OAChDnJ,EAAS,GAAmBA,EAASA,EACrC,IAAK,IAAIzQ,EAAI,EAAG0F,EAAMsU,EAAKqe,cAAc/3B,OAAQN,EAAI0F,EAAK1F,IACtD+6T,EAASvjS,GAAoBC,GAAwBzd,EAAKqe,cAAcr4B,GAAGa,MAAQmmO,EAAehtN,GAAOnW,KAAK8zB,YACzGqmB,MAAM+8Q,EAAOnqT,IAAOotC,MAAM+8Q,EAAOlqT,KAClCouN,EAASp7N,KAAKohB,SAAWxU,EAASuJ,EAAKykN,eAAe7kN,OAVhD,GAUoEmhT,EAAOnqT,EACjF61N,EAAS5iO,KAAKqhB,SAAWzU,EAASuJ,EAAKykN,eAAe7kN,OAXhD,GAWoEmhT,EAAOlqT,EACjF2qT,EAAah8S,WAAWy/M,EAAOj8M,QAAQ,MAAQxD,WAAW3b,KAAKohB,QAAQjC,QAAQ,IAAM,SAC/Ei8M,EAASp7N,KAAKohB,UAAY8jN,GAAmB9J,EAASp7N,KAAKohB,SAAW8jN,EAAkB,MAAQ,SAE1GsyF,EAAYrhT,EAAKqe,cAAcr4B,GAAG2yB,KACxB,IAAN3yB,EACAs7T,EAAcr8F,EAETj/N,IAAMga,EAAKqe,cAAc/3B,OAAS,GAAwB,aAAnB0Z,EAAKmb,YACjDomS,EAAa7oS,GAAY2oS,EAAWrhT,EAAKkf,YAAYtf,OAErDyhT,GADAE,GAAct8F,GACYq8F,EAAe,GAAKD,GAGlD7hS,GADU,IAAIC,GAAW/F,EAAM7uB,QAAQsC,GAAK2O,EAAQ,cAAgB9V,EAAGi/N,EAAQwH,EAAQ+0F,EAAYH,EAAW,GAAI,WAC7FrhT,EAAKkf,WAAYlf,EAAKkf,WAAWQ,OAAShG,EAAM6F,WAAW7I,UAAW3F,GAE/FlnB,KAAKgB,QAAQW,YAAYulB,IAE7B8vS,EAAgB37T,UAAUsoO,eAAiB,SAAUxtN,EAAMlE,EAAOib,EAAeC,GAC7E,IAAIyqS,EACA/nS,EAAQ7vB,KAAK6vB,MACb1Z,EAAKykN,eAAe5kN,MAAQ,IAC5B4hT,EAAc,IAAIniS,GAAW5F,EAAM7uB,QAAQsC,GAAK,kBAAoB2O,EAAO,cAAekE,EAAKykN,eAAe5kN,MAAOG,EAAKykN,eAAe/kM,OAAShG,EAAM6F,WAAWxI,cAAe,KAAM,KAAMA,GAC9L2C,EAAMk3R,cAAcplT,YAAYkuB,EAAME,SAASyF,SAASoiS,KAExDzhT,EAAKotN,eAAevtN,MAAQ,IAC5B4hT,EAAc,IAAIniS,GAAW5F,EAAM7uB,QAAQsC,GAAK,kBAAoB2O,EAAO,cAAekE,EAAKotN,eAAevtN,MAAOG,EAAKotN,eAAe1tM,OAAShG,EAAM6F,WAAWvI,cAAe,KAAM,KAAMA,GAC9L0C,EAAMk3R,cAAcplT,YAAYkuB,EAAME,SAASyF,SAASoiS,MAGhEZ,EAAgB37T,UAAUqoO,eAAiB,SAAUvtN,EAAMlE,EAAO4wN,EAAWE,GACzE,IACI80F,EADAhoS,EAAQ7vB,KAAK6vB,MAEb1Z,EAAKorN,eAAevrN,MAAQ,IAC5B6hT,EAAc,IAAIpiS,GAAW5F,EAAM7uB,QAAQsC,GAAK,kBAAoB2O,EAAO,cAAekE,EAAKorN,eAAevrN,MAAOG,EAAKorN,eAAe1rM,OAAShG,EAAM6F,WAAW1I,cAAe,KAAM7W,EAAKorN,eAAeztK,UAAW+uK,GACvN7iO,KAAKgB,QAAQW,YAAYkuB,EAAME,SAASyF,SAASqiS,KAEjD1hT,EAAKmtN,eAAettN,MAAQ,IAC5B6hT,EAAc,IAAIpiS,GAAW5F,EAAM7uB,QAAQsC,GAAK,kBAAoB2O,EAAO,cAAekE,EAAKmtN,eAAettN,MAAOG,EAAKmtN,eAAeztM,OAAShG,EAAM6F,WAAWzI,cAAe,KAAM9W,EAAKmtN,eAAexvK,UAAWivK,GACvN/iO,KAAKgB,QAAQW,YAAYkuB,EAAME,SAASyF,SAASqiS,MAGlDb,GACT9E,IC/YErmO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAiBxC4rO,GAA6B,SAAUprO,GAEvC,SAASorO,IACL,OAAkB,OAAXprO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAkR/D,OApRA6rF,GAAUisO,EAAaprO,GASvBorO,EAAYz8T,UAAUsyG,OAAS,SAAU5uF,GACrC,IAAIid,EAAa5F,GAAiBrX,EAAOgnN,UACrChnN,EAAOgnN,SAASxnO,QAAQ,WAAa,EACrCyB,KAAK+3T,qBAAqBh5S,GAG1BA,EAAO8Q,MAAMmM,EAAa,gBAAgB2xE,OAAO5uF,EAAQA,EAAOjH,MAAOiH,EAAOnH,MAAOmH,EAAO8Q,MAAMsG,sBAQ1G2hS,EAAYz8T,UAAU08T,qBAAuB,SAAUh5S,GAC/BA,EAAOkY,OAA3B,IAEIjkB,EACAolB,EACAtE,EACA6R,EACAqyR,EACAprT,EACAqrT,EACAC,EACA18R,EACAE,EACAD,EACAE,EACApT,EACAmP,EACAsP,EAEAmxR,EACAC,EAEAC,EACAC,EALAl3S,EAAWrC,EAAOgV,SAAS/d,MAAQ,EAAK+I,EAAOgV,SAAShnB,EAGxDsU,EAAWtC,EAAOgV,SAAShe,OAAS,EAAKgJ,EAAOgV,SAAS/mB,EAIzD6nB,GADe9V,EAAOjH,MAAMyb,WAChB,IACZglS,EAAe,EACfp2T,GAAY4c,EAAOkY,OAAO,GAAKlY,EAAOkY,OAAO,GAAGrF,OAAS,EAAI7S,EAAOkY,OAAO,GAAGrF,QAAU7S,EAAOkY,OAAO,GAAGrF,OACzGw3G,EAAmC,aAA3BrqH,EAAOjH,MAAMwZ,WAA4D,iBAAhCvS,EAAOjH,MAAM4b,eAAoC,EAAIvxB,EAAW,EACjHq2T,EAA2C,aAA3Bz5S,EAAOjH,MAAMwZ,UAA2BvS,EAAOjH,MAAMyc,iBAAmB,EACxFpU,EAAMpB,EAAOjH,MAAMy+M,YAAYp2M,IAEnCngB,KAAKy4T,kBAAkB15S,GACvB,IAAI7K,EAAW6K,EAAOjH,MAAMyb,WAAcxU,EAAOsnS,UAAY,EAAItnS,EAAO7K,SAAY6K,EAAO7K,SAC5C,aAA3B6K,EAAOjH,MAAMwZ,WAA4D,iBAAhCvS,EAAOjH,MAAM4b,gBAC7D3U,EAAOsnS,UACpB,GACIkS,GAAgBC,EAChBr4S,GAAOq4S,QACFr4S,GAAOpB,EAAOjH,MAAMy+M,YAAYjqN,KAAkC,aAA3ByS,EAAOjH,MAAMwZ,UAA2B,EAAI,IAC5F,IAAK,IAAIlzB,EAAK,EAAGyE,EAAKkc,EAAOkY,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI+0B,EAAQtwB,EAAGzE,GACf+0B,EAAMs0M,mBACNt0M,EAAM2zM,WACF3zM,EAAM2D,SAAWvF,GAAYxS,EAAOkY,OAAO9D,EAAMlhB,MAAQ,GAAIkhB,EAAOpU,EAAOkY,OAAO9D,EAAMlhB,MAAQ,GAAI8M,KAGpGi5S,GAFgBj5S,EAAOjH,MAAMyb,WAAcxU,EAAOjH,MAAMka,aAAa1lB,IAAM6mB,EAAMvB,OAC7EuB,EAAMvB,OAAS7S,EAAOjH,MAAMka,aAAa7R,MAEvChe,EAAW4c,EAAOsnS,UAAanyS,EAAWk1H,GAAUmvL,EAAe,IAAMx5S,EAAOjH,MAAMgc,WAC5FkkS,KAGAC,EAFAnkS,EAAa,EAAIznB,KAAKkR,IAAMy6S,EAAkBj5S,EAAOjH,MAAMgc,YAG3DokS,EAFAvyR,EAAW,EAAIt5B,KAAKkR,IAAOy6S,EAAkBj5S,EAAOjH,MAAMgc,WAAe3xB,EAAW4c,EAAOsnS,aAG3FvyR,GAA2B,GAAMznB,KAAKkR,GACtCooB,EAAYA,EAAW,GAAMt5B,KAAKkR,GAAM,KAChB,mBAApBwB,EAAOgnN,UAAqD,gBAApBhnN,EAAOgnN,UAC/Cx9M,EAAiC,gBAApBxJ,EAAOgnN,SAA6B5yM,EAAM+I,IAAMnd,EAAOitN,cAAclP,YAAY3pM,EAAMlhB,OACpGylB,EAA+B,gBAApB3Y,EAAOgnN,SAA6B5yM,EAAM8I,KAAOld,EAAOitN,cAAcjP,UAAU5pM,EAAMlhB,OAKjGupB,EAAKpa,GADLxU,EAAS2b,KADTmP,GAFAA,EAAuC,gBAA3B3Y,EAAOnH,MAAM0Z,UACrBX,GAAqB,IAAb+G,EAAiB,EAAIA,EAAU3Y,EAAOnH,MAAM+Y,SAAW+G,GAC7C3Y,EAAOnH,MAAM2+M,YAAYjqN,IAAMyS,EAAOnH,MAAM2+M,YAAYjqN,IAAMorB,GACjD,EAAI3Y,EAAO8Q,MAAMjjB,OAAS0mB,GAAmBoE,EAAU3Y,EAAOnH,QACzEvL,KAAKwV,IAAIiS,GACjC4H,EAAKta,EAAUxU,EAASP,KAAKwV,IAAI8jB,GACjClK,EAAKpa,EAAUzU,EAASP,KAAKyV,IAAIgS,GACjC6H,EAAKta,EAAUzU,EAASP,KAAKyV,IAAI6jB,GAEjCwyR,EAAU/2S,GADV4lB,EAAcjoB,EAAO8Q,MAAMjjB,OAAS0mB,GAAmC,IAAf/K,GAAsD,IAAlCxJ,EAAOnH,MAAMoa,aAAa7R,IAAapB,EAAOnH,MAAMoa,aAAa7R,IAAMoI,EAAYxJ,EAAOnH,QACpIvL,KAAKwV,IAAIiS,GAC3CskS,EAAU/2S,EAAU2lB,EAAc36B,KAAKyV,IAAIgS,GAC3CukS,EAAQj3S,EAAU4lB,EAAc36B,KAAKwV,IAAI8jB,GACzC2yR,EAAQj3S,EAAU2lB,EAAc36B,KAAKyV,IAAI6jB,GAErC9Q,EADgB,UAAhB9V,EAAOrY,KACM,KAAY80B,EAAK,IAAMC,EAAK,MAAkB7uB,EAAS,IAAMA,EAAS,UACvD8uB,EAAK,IAAMC,EAAK,MAAkB08R,EAAQ,IAAMC,EAAQ,MACpEtxR,EAAc,IAAMA,EAAc,UAC5CmxR,EAAU,IAAMC,EAAU,KAGnB,KAAY58R,EAAK,IAAMC,EAAK,MAAkBC,EAAK,IAAMC,EAAK,KACrE08R,EAAQ,IAAMC,EAAQ,MAAkBH,EAAU,IAAMC,EAAU,KAE5EjlS,EAAM0zM,WAAa,IAAInK,GAASu7F,EAAiBC,EAAelxR,EAAap6B,EAAQorT,KAGrFtgS,EAAWvE,EAAM4G,OAAShb,EAAOnH,MAAM2+M,YAAYjqN,IAAMyS,EAAOnH,MAAM2+M,YAAYjqN,IAAM6mB,EAAM4G,OAE9FyB,EAAKpa,GADLxU,EAASmS,EAAO8Q,MAAMjjB,OAAS0mB,GAA+C,gBAA3BvU,EAAOnH,MAAM0Z,UAA8BX,GAAQ+G,EAAU3Y,EAAOnH,MAAM+Y,SAAW+G,EAAW3Y,EAAOnH,QAClIvL,KAAKwV,IAAIiS,GACjC4H,EAAKta,EAAUxU,EAASP,KAAKwV,IAAI8jB,GACjClK,EAAKpa,EAAUzU,EAASP,KAAKyV,IAAIgS,GACjC6H,EAAKta,EAAUzU,EAASP,KAAKyV,IAAI6jB,GAE7B9Q,EADgB,UAAhB9V,EAAOrY,KACM,KAAY80B,EAAK,IAAMC,EAAK,MAAkB7uB,EAAS,IAAMA,EAAS,UACzD8uB,EAAK,IAAMC,EAAK,MAAkBva,EAAU,IAClEC,EAAU,KAGD,KAAYma,EAAK,IAAMC,EAAK,MAAkBC,EAAK,IAAMC,EAAK,MACrEva,EAAU,IAAMC,EAAU,KAEpC8R,EAAM0zM,WAAa,IAAInK,GAASu7F,EAAiBC,EAAe,EAAGtrT,EAAQorT,IAE/E5/R,EAAWp4B,KAAKg2J,aAAaj3I,EAAO8Q,MAAO9Q,EAAQoU,GACnDngB,EAAU,IAAIyiB,GAAW1W,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAQ,UAAYkhB,EAAMlhB,MAAOmmB,EAASgG,KAAMhG,EAAS6M,OAAOjvB,MAAOoiB,EAAS6M,OAAOpP,MAAO9W,EAAOtR,QAASsR,EAAO+0C,UAAWj/B,GAClMuD,EAASC,SACVr4B,KAAKqzT,eAAergT,EAAS+L,EAAQ,IACjB,UAAhBA,EAAOrY,KACPysB,EAAMs0M,gBAAgBjjO,MAClBuI,EAAGqU,EAAUxU,EAASP,KAAKwV,IAAKiS,GAAc6R,EAAW7R,GAAc,GACvE9mB,EAAGqU,EAAUzU,EAASP,KAAKyV,IAAKgS,GAAc6R,EAAW7R,GAAc,KAI3EX,EAAMs0M,gBAAgBjjO,MAAOuI,GAAIyuB,EAAKE,GAAM,EAAG1uB,GAAIyuB,EAAKE,GAAM,MAK9E5c,EAAOinN,cAAe,GAO1B8xF,EAAYz8T,UAAU26J,aAAe,SAAUnmI,EAAO9Q,EAAQoU,GAC1D,IAAIiF,GACAC,QAAQ,EAAOtB,KAAMohM,GAAap5M,OAAQA,EAAQoU,MAAOA,EACzDiL,KAAMrf,EAAO0uN,cAAct6M,EAAOpU,EAAO8qD,UACzC5kC,OAAQlmB,EAAO2uN,eAAev6M,GAASnd,MAAO+I,EAAOkmB,OAAOjvB,MAAO6f,MAAO9W,EAAOkmB,OAAOpP,SAI5F,OAFAhG,EAAMnJ,QAAQyxM,GAAa//L,GAC3BjF,EAAM0C,MAAQuC,EAASgG,KAChBhG,GAMX0/R,EAAYz8T,UAAUo9T,kBAAoB,SAAU15S,GAKhD,IAAK,IAHDwX,KACAg1M,KACAupF,GAAYzO,UAAW,EAAGnyS,SAAU,MAC/B9V,EAAK,EAAGyE,EAJLkc,EAAO8Q,MAIS+R,cAAexjC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAI24N,EAAWl0N,EAAGzE,IACd24N,EAASjgM,SAA8B,UAAlBigM,EAASrwN,MAAsC,UAAlBqwN,EAASrwN,OAA8D,IAAzCqwN,EAASgP,SAASxnO,QAAQ,WAC1Gg4B,EAAiB/xB,KAAKuyN,GAG9BxgM,EAAiBn3B,QAAQ,SAAU2f,IACc,IAAzCA,EAAOgnN,SAASxnO,QAAQ,YACpBwgB,EAAOwsN,mBACqCpwO,IAAxCowO,EAAcxsN,EAAOwsN,gBACrBxsN,EAAO7K,SAAW4gT,EAAQzO,UAC1B96E,EAAcxsN,EAAOwsN,eAAiBupF,EAAQzO,aAG9CtnS,EAAO7K,SAAWq3N,EAAcxsN,EAAOwsN,eAIlB,OAArBupF,EAAQ5gT,UACR6K,EAAO7K,SAAW4gT,EAAQzO,UAC1ByO,EAAQ5gT,SAAW4gT,EAAQzO,aAG3BtnS,EAAO7K,SAAW4gT,EAAQ5gT,SAKlC6K,EAAO7K,SAAW4gT,EAAQzO,cAGlC9vR,EAAiBn3B,QAAQ,SAAUpC,GAC/BA,EAAMqpT,UAAYyO,EAAQzO,aAQlCyR,EAAYz8T,UAAU+xO,YAAc,SAAUruN,GAC7BA,EAAO6vB,UAApB,IACI1jC,EAAW6T,EAAO6vB,UAAU1jC,SAC5BrL,EAAQkf,EAAO6vB,UAAU/uC,MACzBu1T,EAAer2S,EAAO+tN,cAAcv7N,WACpC0N,EAAQ,EACZ,GAAwB,YAApBF,EAAOgnN,SACP,IAAK,IAAI3nO,EAAK,EAAGyE,EAAKkc,EAAOkY,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI+0B,EAAQtwB,EAAGzE,GACV+0B,EAAMs0M,gBAAgBhrO,QAAW24T,EAAan2S,KAGnD0Y,GAAcy9R,EAAan2S,GAAQpf,EAAOqL,EAAU6T,EAAQoU,EAAMlhB,MAAOkhB,EAAMs0M,gBAAgB,IAAI,GACnGxoN,UAIJ,IAAKA,EAAQ,EAAGA,EAAQm2S,EAAa34T,OAAQwiB,IACzCjf,KAAK04T,sBAAsBtD,EAAan2S,GAAQpf,EAAOqL,EAAU6T,IAS7E+4S,EAAYz8T,UAAUq9T,sBAAwB,SAAUC,EAAgB94T,EAAOqL,EAAU6T,GACrF,IAAI65S,EAAe75S,EAAOgV,SAAS/d,MAAQ,EAAI+I,EAAOgV,SAAShnB,EAC3D8rT,EAAe95S,EAAOgV,SAAShe,OAAS,EAAIgJ,EAAOgV,SAAS/mB,EAC5DqkM,EAAgB,EACpBsnH,EAAej0T,MAAMC,WAAa,SAClC,IAAImzB,OAAcC,QAAQ4gS,GACtBztT,SAAUA,EACVrL,MAAOA,EACPm4B,SAAU,SAAU/3B,GACZA,EAAKg4B,UAAYh4B,EAAKJ,QACtBI,EAAKe,QAAQ0D,MAAMC,WAAa,UAChC0sM,GAAkBpxM,EAAKg4B,UAAYh4B,EAAKJ,OAASI,EAAKiL,SACtDytT,EAAen1T,aAAa,YAAa,aAAeo1T,EAClD,IAAMC,EAAe,WAAaxnH,EAAgB,gBAAmBunH,EAAgB,KAAQC,EAAgB,OAG3H75S,IAAK,SAAUmN,GACXwsS,EAAej0T,MAAMC,WAAa,UAClCg0T,EAAejtT,gBAAgB,aAC/BqT,EAAO8Q,MAAMnJ,QAAQ,qBAAuB3H,OAAQA,QAOhE+4S,EAAYz8T,UAAU0kC,cAAgB,WAIlC,MAAO,eAOX+3R,EAAYz8T,UAAUiX,QAAU,SAAUud,KAKnCioS,GACTd,ICvSEnrO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexC4sO,GAA6B,SAAUpsO,GAEvC,SAASosO,IACL,OAAkB,OAAXpsO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAmC/D,OArCA6rF,GAAUitO,EAAapsO,GASvBosO,EAAYz9T,UAAUsyG,OAAS,SAAU5uF,GACrC,IAAIid,EAAa5F,GAAiBrX,EAAOgnN,WACE,IAAvChnN,EAAOgnN,SAASxnO,QAAQ,UACxBwgB,EAAO8Q,MAAMmM,EAAa,gBAAgB2xE,OAAO5uF,EAAQA,EAAOjH,MAAOiH,EAAOnH,MAAOmH,EAAO8Q,MAAMsG,qBAGlGn2B,KAAK+3T,qBAAqBh5S,IAMlC+5S,EAAYz9T,UAAU0kC,cAAgB,WAIlC,MAAO,eAOX+4R,EAAYz9T,UAAUiX,QAAU,SAAUud,KAKnCipS,GACThB,ICtDEjsO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexC6sO,GAAmC,SAAUrsO,GAE7C,SAASqsO,IACL,OAAkB,OAAXrsO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAmD/D,OArDA6rF,GAAUktO,EAAmBrsO,GAS7BqsO,EAAkB19T,UAAUsyG,OAAS,SAAU5uF,GAC9B1S,KAAKC,IAAIyS,EAAOnH,MAAMoa,aAAa7R,IAAK,GAKrD,IAAK,IAFDuS,EACA0F,EAHAo9R,EAAiBx1T,KAAKs0T,kBAAkBv1S,GACxCi6S,EAAej6S,EAAOitN,cAGjB5tO,EAAK,EAAGyE,EAAKkc,EAAOkY,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI66T,EAAap2T,EAAGzE,GACpB66T,EAAWxxF,mBACXwxF,EAAWnyF,WACPmyF,EAAWniS,SAAWvF,GAAYxS,EAAOkY,OAAOgiS,EAAWhnT,MAAQ,GAAIgnT,EAAYl6S,EAAOkY,OAAOgiS,EAAWhnT,MAAQ,GAAI8M,KACxH2T,EAAO1yB,KAAK40T,aAAaqE,EAAWrnS,OAAS4jS,EAAej4T,MAAOy7T,EAAaj8F,UAAUk8F,EAAWhnT,OAAQgnT,EAAWrnS,OAAS4jS,EAAex2S,IAAKg6S,EAAal8F,YAAYm8F,EAAWhnT,OAAQ8M,IACjMqZ,EAAWp4B,KAAKg2J,aAAaj3I,EAAQk6S,EAAYl6S,EAAO8qD,UAAY7zD,MAAO+I,EAAOkmB,OAAOjvB,MAAO6f,MAAO9W,EAAOkmB,OAAOpP,SACvGwC,SACVr4B,KAAKskC,cAAcvlB,EAAQk6S,EAAYvmS,EAAM0F,GAC7Cp4B,KAAK+0T,qBAAqBkE,EAAYvmS,EAAM3T,OAU5Dg6S,EAAkB19T,UAAUiX,QAAU,SAAUud,KAQhDkpS,EAAkB19T,UAAU0kC,cAAgB,WACxC,MAAO,qBAOXg5R,EAAkB19T,UAAU+xO,YAAc,SAAUruN,GAChD/e,KAAK+3B,QAAQhZ,IAEVg6S,GACT1E,ICtEExoO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCgtO,GAA8B,SAAUxsO,GAExC,SAASwsO,IACL,OAAkB,OAAXxsO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAoJ/D,OAtJA6rF,GAAUqtO,EAAcxsO,GASxBwsO,EAAa79T,UAAUsyG,OAAS,SAAU5uF,GAItC,IAAK,IAFDqZ,EADAo9R,EAAiBx1T,KAAKs0T,kBAAkBv1S,GAExCixE,EAAc3jF,KAAKC,IAAIyS,EAAOkmB,OAAOjvB,MAAO,GACvC5X,EAAK,EAAGyE,EAAKkc,EAAOkY,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI+0B,EAAQtwB,EAAGzE,GACXy2B,EAAY,GACZskS,OAAe,EACfC,OAAa,GAEL5D,EAAej4T,MAAQi4T,EAAex2S,KAAO,EAEzDmU,EAAM2zM,WACN3zM,EAAMs0M,mBACFt0M,EAAM2D,SAAWvF,GAAYxS,EAAOkY,OAAO9D,EAAMlhB,MAAQ,GAAIkhB,EAAOpU,EAAOkY,OAAO9D,EAAMlhB,MAAQ,GAAI8M,KAEpGq6S,EAAap5T,KAAK40T,aAAczhS,EAAMvB,OAAS4jS,EAAer5R,OAAS9vB,KAAKC,IAAI6mB,EAAM8I,KAAM9I,EAAM+I,KAAO/I,EAAMvB,OAAS4jS,EAAer5R,OAAS9vB,KAAK8T,IAAIgT,EAAM8I,KAAM9I,EAAM+I,KAAMnd,GAC5KA,EAAO8Q,MAAMsG,qBAKdijS,EAAWpsT,GAAKgjF,EAAc,EAC9BopO,EAAWrjT,OAASi6E,IALpBopO,EAAWrsT,GAAKijF,EAAc,EAC9BopO,EAAWpjT,MAAQg6E,GAOvBmpO,EAAen5T,KAAK40T,aAAczhS,EAAMvB,OAAS4jS,EAAej4T,MAAQ8O,KAAKC,IAAI6mB,EAAMzxB,KAAMyxB,EAAMlxB,OAASkxB,EAAMvB,OAAS4jS,EAAex2S,IAAM3S,KAAK8T,IAAIgT,EAAMzxB,KAAMyxB,EAAMlxB,OAAQ8c,GACnL8V,EAAY70B,KAAKsqC,cAAc8uR,EAAYD,EAAcp6S,IACzDqZ,EAAWp4B,KAAKq5T,wBAAwBt6S,EAAQoU,IAClCkF,SACVr4B,KAAKs5T,WAAWv6S,EAAQoU,EAAOgmS,EAAc/gS,EAAUvD,GACvD70B,KAAK+0T,qBAAqB5hS,EAAOimS,EAAYr6S,GAC7C/e,KAAK+0T,qBAAqB5hS,EAAOgmS,EAAcp6S,OAQ/Dm6S,EAAa79T,UAAUg+T,wBAA0B,SAAUt6S,EAAQoU,GAC/D,IAAIiL,EACJA,EAAOp+B,KAAKu5T,eAAepmS,EAAOpU,GAClC,IAAIkmB,GAAWpP,MAAO9W,EAAOkmB,OAAOpP,MAAO7f,MAAO3J,KAAKC,IAAIyS,EAAOkmB,OAAOjvB,MAAO,IAChF,OAAOhW,KAAKg2J,aAAaj3I,EAAQoU,EAAOiL,EAAM6G,IAOlDi0R,EAAa79T,UAAUk+T,eAAiB,SAAUpmS,EAAOpU,GACrD,IACIyS,EAAgBzS,EAAOkY,OAAO9D,EAAMlhB,MAAQ,GAChD,OAAkC,IAA9B8M,EAAOy6S,mBACFhoS,GAIMA,EAAcvvB,MAAQkxB,EAAMlxB,MAAQ8c,EAAO06S,cAH3C16S,EAAO26S,cAQXvmS,EAAMzxB,KAAOyxB,EAAMlxB,MAAQ8c,EAAO06S,cACrC16S,EAAO26S,eAQnBR,EAAa79T,UAAUivC,cAAgB,SAAUqvR,EAASC,EAAS76S,GAC/D,IAAI8V,EAAY,GAEZ9B,GADQhU,EAAO8Q,MAAMsG,oBAAsBwjS,EAAQ5jT,OAAS4jT,EAAQ3jT,MAC3D+I,EAAO8Q,MAAMsG,oBAAsBwjS,EAAQ3sT,EAAI2sT,EAAQ5jT,OAAS,EACzE4jT,EAAQ5sT,EAAI4sT,EAAQ3jT,MAAQ,GAgBhC,OAdA6e,GAAc9V,EAAO8Q,MAAMsG,oBAEvB,KAAawjS,EAAS,EAAI,MAAiB,MAAmBC,EAAS,EAAI,IAAM7mS,EADjF,OAAuB,IAAO4mS,EAAS,EAAI,QAA6B,IAAMC,EAAQ5sT,EAE1F6nB,EAAYA,EAAUra,OAAO,MAAco/S,EAAS,EAAI,IAAOA,EAAS,EAAI,OAC3DA,EAAQ7sT,EAAI6sT,EAAQ5jT,OAAS,IAAO4jT,EAAS,EAAI,OACjDA,EAAQ7sT,EAAI6sT,EAAQ5jT,OAAS,KACzC4jT,EAAQ5sT,EAAI4sT,EAAQ7jT,QAAU,MAClB6jT,EAAS,EAAI,KAAOA,EAAQ5sT,EAAI4sT,EAAQ7jT,QACrD,MACJ8e,GAAc9V,EAAO8Q,MAAMsG,oBAGvB,OAAcyjS,EAAQ7sT,EAAI6sT,EAAQ5jT,OAAS,MAAiB,OACvD2jT,EAAQ5sT,EAAI4sT,EAAQ3jT,OAAS,IAAM+c,EAHxC,QAAwB,KAAO6mS,EAAQ5sT,EAAI4sT,EAAQ7jT,QAAU,QAA6B,KAAO4jT,EAAQ3sT,EACrG2sT,EAAQ5jT,SAUpBmjT,EAAa79T,UAAUi+T,WAAa,SAAUv6S,EAAQoU,EAAOT,EAAM0F,EAAUvD,GAEzE,IADY9V,EAAO8Q,MAAMsG,oBAAsBzD,EAAK3c,OAAS2c,EAAK1c,QACrD,EACT,OAAO,KAEX,IAAIooB,EAAQrf,EAAOy6S,mBAC8CphS,EAASgG,KAArEjL,EAAMzxB,KAAOyxB,EAAMlxB,MAAQm2B,EAASgG,KAAO,cAChDhG,EAAS6M,OAAOpP,MAAQuC,EAASgG,KACjC,IAAIprB,EAAU,IAAIyiB,GAAW1W,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAQ,UAAYkhB,EAAMlhB,MAAOmsB,EAAMhG,EAAS6M,OAAOjvB,MAAOoiB,EAAS6M,OAAOpP,MAAO9W,EAAOtR,QAASsR,EAAO+0C,UAAWj/B,GAC9LglS,EAAgB96S,EAAO8Q,MAAME,SAASyF,SAASxiB,GACnD6mT,EAAcr2T,aAAa,aAAc2vB,EAAMpmB,EAAEG,WAAa,IAAMimB,EAAM8I,KAAK/uB,WACzE,IAAMimB,EAAM+I,IAAIhvB,WAAa,IAAMimB,EAAMlxB,MAAMiL,WAAa,IAAMimB,EAAMzxB,KAAKwL,YACnF6R,EAAO+tN,cAAcnrO,YAAYk4T,IAOrCX,EAAa79T,UAAU+xO,YAAc,SAAUruN,GAC3C/e,KAAK+3B,QAAQhZ,IAKjBm6S,EAAa79T,UAAU0kC,cAAgB,WACnC,MAAO,gBAUXm5R,EAAa79T,UAAUiX,QAAU,SAAUud,KAKpCqpS,GACT7E,ICvKExoO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexC4tO,GAAsC,SAAUptO,GAEhD,SAASotO,IACL,OAAkB,OAAXptO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAoD/D,OAtDA6rF,GAAUiuO,EAAsBptO,GAShCotO,EAAqBz+T,UAAUsyG,OAAS,SAAU5uF,GAC9CA,EAAOinN,cAAe,EACT35N,KAAKC,IAAIyS,EAAOnH,MAAMoa,aAAa7R,IAAK,GAKrD,IAAK,IAHDuS,EACA0F,EAFAo9R,EAAiBx1T,KAAKs0T,kBAAkBv1S,GAGxCi6S,EAAej6S,EAAOitN,cACjB5tO,EAAK,EAAGyE,EAAKkc,EAAOkY,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI+0B,EAAQtwB,EAAGzE,GACf+0B,EAAMs0M,mBACNt0M,EAAM2zM,WACF3zM,EAAM2D,SAAWvF,GAAYxS,EAAOkY,OAAO9D,EAAMlhB,MAAQ,GAAIkhB,EAAOpU,EAAOkY,OAAO9D,EAAMlhB,MAAQ,GAAI8M,KACpG2T,EAAO1yB,KAAK40T,aAAazhS,EAAMvB,OAAS4jS,EAAej4T,MAAOy7T,EAAaj8F,UAAU5pM,EAAMlhB,OAAQkhB,EAAMvB,OAAS4jS,EAAex2S,IAAKg6S,EAAal8F,YAAY3pM,EAAMlhB,OAAQ8M,IAC7KqZ,EAAWp4B,KAAKg2J,aAAaj3I,EAAQoU,EAAOpU,EAAO8qD,UAAY7zD,MAAO+I,EAAOkmB,OAAOjvB,MAAO6f,MAAO9W,EAAOkmB,OAAOpP,SAClGwC,SACVr4B,KAAKskC,cAAcvlB,EAAQoU,EAAOT,EAAM0F,GACxCp4B,KAAK+0T,qBAAqB5hS,EAAOT,EAAM3T,OAUvD+6S,EAAqBz+T,UAAU+xO,YAAc,SAAUruN,GACnD/e,KAAK+3B,QAAQhZ,IAOjB+6S,EAAqBz+T,UAAUiX,QAAU,SAAUud,KAQnDiqS,EAAqBz+T,UAAU0kC,cAAgB,WAC3C,MAAO,wBAEJ+5R,GACTzF,ICvEExoO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexC6tO,GAAgC,SAAUrtO,GAE1C,SAASqtO,IACL,OAAkB,OAAXrtO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAiF/D,OAnFA6rF,GAAUkuO,EAAgBrtO,GAS1BqtO,EAAe1+T,UAAUsyG,OAAS,SAAU5uF,EAAQjH,EAAOF,EAAO6b,GAC9D,IAGIumS,EACAC,EACA1+Q,EACAvS,EANAnU,EAAY,GACZ2oB,EAAa,IACbs2Q,EAAY,KAKZI,EAAgBl0T,KAAKmyT,wBAAwBpzS,GAE7Ck7S,EADoB,aAApBniT,EAAMwZ,WAAqD,iBAAzBxZ,EAAM4b,eAC3B,GAGA,EAEjB,IAAK,IAAIt1B,EAAK,EAAG+1T,EAAkBD,EAAe91T,EAAK+1T,EAAgB13T,OAAQ2B,IAAM,CACjF,IAAI+0B,EAAQghS,EAAgB/1T,GAC5B+0B,EAAMs0M,mBACNt0M,EAAM2zM,WACF3zM,EAAM2D,SAAWvF,GAAY2iS,EAAc/gS,EAAMlhB,MAAQ,GAAIkhB,EAAO+gS,EAAc/gS,EAAMlhB,MAAQ,GAAI8M,IACnF,MAAb+0S,GACA9qR,EAAS9N,GAAS/H,EAAMvB,OAAQuB,EAAM4G,OAAQjiB,EAAOF,EAAO6b,GAC5D8nB,EAASrgB,GAAS44R,EAAUliS,OAAQkiS,EAAU/5R,OAAQjiB,EAAOF,EAAO6b,GACpEoB,EAAYA,EAAUra,OAAOgjC,EAAa,IAAOjC,EAAQ,EAAI,IAAOA,EAAQ,EAAI,MAC3EvS,EAAQ,EAAI,IAAOuS,EAAQ,EAAI,KAAavS,EAAQ,EAAI,IAAOA,EAAQ,EAAI,KAChFwU,EAAa,MAGbjC,EAASrgB,GAAS/H,EAAMvB,OAASqoS,EAAY9mS,EAAM4G,OAAQjiB,EAAOF,EAAO6b,GACzEoB,EAAYA,EAAUra,OAAOgjC,EAAa,IAAOjC,EAAQ,EAAI,IAAOA,EAAQ,EAAI,KAChFiC,EAAa,KAEjBx9C,KAAKwzT,mBAAmBrgS,EAAOpU,EAAQ0U,EAAYyH,IACnD44R,EAAY3gS,IAGZ2gS,EAA+C,SAAnC/0S,EAAOuqN,mBAAmB/qM,KAAkBu1R,EAAY,KACpEt2Q,EAAgD,SAAnCz+B,EAAOuqN,mBAAmB/qM,KAAkBif,EAAa,KAG9EjC,EAASrgB,GAASg5R,EAAcA,EAAcz3T,OAAS,GAAGm1B,OAASqoS,EAAY/F,EAAcA,EAAcz3T,OAAS,GAAGs9B,OAAQjiB,EAAOF,EAAO6b,GAC7IoB,EAAYA,EAAUra,OAAOgjC,EAAa,IAAOjC,EAAQ,EAAI,IAAOA,EAAQ,EAAI,KAChFy+Q,EAAc,IAAIvkS,GAAW1W,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAO,cAAe8M,EAAO/I,MAAO+I,EAAO8qD,SAAU9qD,EAAOtR,QAASsR,EAAO+0C,UAAWj/B,GAClK70B,KAAKqzT,eAAe2G,EAAaj7S,EAAQ,IACzC/e,KAAK+uO,aAAahwN,IAOtBg7S,EAAe1+T,UAAU+xO,YAAc,SAAUruN,GAC7C,IAAIu4E,EAASv4E,EAAO6vB,UACpB5uC,KAAKyzT,kBAAkB10S,EAAQu4E,IAOnCyiO,EAAe1+T,UAAUiX,QAAU,SAAUud,KAQ7CkqS,EAAe1+T,UAAU0kC,cAAgB,WAIrC,MAAO,kBAEJg6R,GACT7H,ICpGErmO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCguO,GAAgC,SAAUxtO,GAE1C,SAASwtO,IACL,OAAkB,OAAXxtO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAqG/D,OAvGA6rF,GAAUquO,EAAgBxtO,GAS1BwtO,EAAe7+T,UAAUsyG,OAAS,SAAU5uF,EAAQjH,EAAOF,EAAO6b,GAC9D,IAAIhC,EACA0hS,EAKAngT,EACAmgB,EACAvB,EACAqoS,EAPA18T,EAAQ,KACRs3B,EAAY,GACZi3M,EAAe/sN,EAAOkY,OAAOx6B,OAC7B++R,EAASnvR,KAAKC,IAAIyS,EAAOnH,MAAMoa,aAAa7R,IAAK,GAKjD2zS,EAAY,KAEZmG,EADoB,aAApBniT,EAAMwZ,WAAqD,iBAAzBxZ,EAAM4b,eAC3B,GAGA,EAEjB,IAAK,IAAIv3B,EAAI,EAAGA,EAAI2vO,EAAc3vO,IAE9By1B,GADAuB,EAAQpU,EAAOkY,OAAO96B,IACPy1B,OACfuB,EAAMs0M,mBACNt0M,EAAM2zM,WACF3zM,EAAM2D,SAAWvF,GAAYxS,EAAOkY,OAAO96B,EAAI,GAAIg3B,EAAOpU,EAAOkY,OAAO96B,EAAI,GAAI4iB,KAClE,OAAVxhB,IACAA,EAAQ,IAAI01B,GAAcrB,EAAQ,GAGlCiD,GAAc,MADdpD,EAAeyJ,GAAStJ,EAASqoS,EAAYz+B,EAAQ1jR,EAAOF,EAAO6b,IAC1B,EAAI,IAAOhC,EAAc,EAAI,IAEtEoD,GAAc,MADdpD,EAAeyJ,GAAStJ,EAASqoS,EAAY9mS,EAAM4G,OAAQjiB,EAAOF,EAAO6b,IAChC,EAAI,IAAOhC,EAAc,EAAI,KAGzD,MAAbqiS,GACAriS,EAAeyJ,GAAS/H,EAAMvB,OAAQuB,EAAM4G,OAAQjiB,EAAOF,EAAO6b,GAClE0/R,EAAcj4R,GAAS44R,EAAUliS,OAAQkiS,EAAU/5R,OAAQjiB,EAAOF,EAAO6b,GACzEoB,GAAc,KACTpD,EAAc,EAAI,IAAO0hS,EAAa,EAAI,KAAa1hS,EAAc,EAAI,IAAOA,EAAc,EAAI,KAE/D,QAAnC1S,EAAOuqN,mBAAmB/qM,OAE/B1J,GAAa,MADbpD,EAAeyJ,GAAS/H,EAAMvB,OAAQuB,EAAM4G,OAAQjiB,EAAOF,EAAO6b,IAC1B,EAAI,IAAOhC,EAAc,EAAI,KAEzEzxB,KAAKwzT,mBAAmBrgS,EAAOpU,EAAQ0U,EAAYyH,IACnD44R,EAAY3gS,GAEZpU,EAAOkY,OAAO96B,EAAI,KAAO4iB,EAAOkY,OAAO96B,EAAI,GAAG26B,SAA8C,SAAnC/X,EAAOuqN,mBAAmB/qM,OAGnF1J,GAAc,MADdpD,EAAeyJ,GAAStJ,EAASqoS,EAAYz+B,EAAQ1jR,EAAOF,EAAO6b,IAC1B,EAAI,IAAOhC,EAAc,EAClEl0B,EAAQ,KACRu2T,EAAY,MAGhBhoF,EAAe,IAGfj3M,GAAc,MADds+R,EAAcj4R,IADd39B,GAAUwP,EAAKgS,EAAOkY,OAAO60M,EAAe,GAAGl6M,OAASqoS,EAAYjtT,EAAK+R,EAAOkY,OAAO60M,EAAe,GAAG/xM,SAC5EhtB,EAAGxP,EAAMyP,EAAG8K,EAAOF,EAAO6b,IACf,EAAI,IAAO0/R,EAAa,EAAI,IAGpEt+R,GAAc,MADds+R,EAAcj4R,IADd39B,GAAUwP,EAAKgS,EAAOkY,OAAO60M,EAAe,GAAGl6M,OAASqoS,EAAYjtT,EAAKwuR,IAC5CzuR,EAAGxP,EAAMyP,EAAG8K,EAAOF,EAAO6b,IACf,EAAI,IAAO0/R,EAAa,EAAI,KAExEngT,EAAU,IAAIyiB,GAAW1W,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAO8M,EAAO8qD,SAAU9qD,EAAOkmB,OAAOjvB,MAAO+I,EAAOkmB,OAAOpP,MAAO9W,EAAOtR,QAASsR,EAAO+0C,UAAWj/B,GAC3K70B,KAAKqzT,eAAergT,EAAS+L,EAAQ,IACrC/e,KAAK+uO,aAAahwN,IAOtBm7S,EAAe7+T,UAAU+xO,YAAc,SAAUruN,GAC7C,IAAIu4E,EAASv4E,EAAO6vB,UACpB5uC,KAAKyzT,kBAAkB10S,EAAQu4E,IAOnC4iO,EAAe7+T,UAAUiX,QAAU,SAAUud,KAQ7CqqS,EAAe7+T,UAAU0kC,cAAgB,WAIrC,MAAO,kBAEJm6R,GACThI,ICxHErmO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCiuO,GAAoC,SAAUztO,GAE9C,SAASytO,IACL,OAAkB,OAAXztO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuG/D,OAzGA6rF,GAAUsuO,EAAoBztO,GAS9BytO,EAAmB9+T,UAAUsyG,OAAS,SAAU5uF,EAAQjH,EAAOF,EAAO6b,GAClE,IAUIzgB,EAGAg2B,EAbAoxR,EAA+C,eAA/Br7S,EAAO8Q,MAAMk3M,cAC7BktF,EAAgBmG,EAAgB5mS,GAAqB0H,GACrDm/R,EAAgB,GAChBnG,EAAgBn1S,EAAOkY,OACvB60M,EAAeooF,EAAcz3T,OAC7B69T,EAAev7S,EAAOitN,cACtBwvD,EAAS4+B,EACT/tT,KAAKC,IAAIyS,EAAOnH,MAAMoa,aAAa7R,IAAKm6S,EAAav9F,UAAU,IAC/D1wN,KAAKC,IAAIyS,EAAOnH,MAAMoa,aAAa7R,IAAKm6S,EAAax9F,YAAY,IAGjEt/K,GAFSz+B,EAAOkmB,OAEH,GACbsW,EAAS04Q,EAAcC,EAAc,GAAGtiS,OAAQ4pQ,EAAQ1jR,EAAOF,EAAO6b,EAAY1U,GAEtFs7S,EAAgBA,EAAc7/S,OAAO,KAAa+gC,EAAQ,EAAI,IAAOA,EAAQ,EAAI,KACjF,IAAK,IAAIp/C,EAAI,EAAGA,EAAI2vO,EAAc3vO,IAG9B,GAFA+3T,EAAc/3T,GAAGsrO,mBACjBysF,EAAc/3T,GAAG2qO,WACbotF,EAAc/3T,GAAG26B,SAAWvF,GAAY2iS,EAAc/3T,EAAI,GAAI+3T,EAAc/3T,GAAI+3T,EAAc/3T,EAAI,GAAI4iB,GACtGw8B,EAAS04Q,EAAcC,EAAc/3T,GAAGy1B,OAAQ0oS,EAAav9F,UAAU5gO,GAAI2b,EAAOF,EAAO6b,EAAY1U,GACrGs7S,EAAgBA,EAAc7/S,OAAO,KAAa+gC,EAAQ,EAAI,IAAOA,EAAQ,EAAI,KACjF24Q,EAAc/3T,GAAGsrO,gBAAgBjjO,KAAKyvT,EAAcC,EAAc/3T,GAAGy1B,OAAQ0oS,EAAav9F,UAAU5gO,GAAI2b,EAAOF,EAAO6b,EAAY1U,IAClIm1S,EAAc/3T,GAAG2qO,QAAQtiO,KAAK,IAAI+wB,GAAK2+R,EAAc/3T,GAAGsrO,gBAAgB,GAAG16N,EAAIgS,EAAOknN,OAAOjwN,MAAOk+S,EAAc/3T,GAAGsrO,gBAAgB,GAAGz6N,EAAI+R,EAAOknN,OAAOlwN,OAAQ,EAAIgJ,EAAOknN,OAAOjwN,MAAO,EAAI+I,EAAOknN,OAAOlwN,cAG7M,GAAuC,SAAnCgJ,EAAOuqN,mBAAmB/qM,KAAiB,CAC3C,IAAK,IAAI9a,EAAItnB,EAAI,EAAGsnB,GAAK+5B,EAAY/5B,IACjCulB,EAASirR,EAAcC,EAAczwS,GAAGmO,OAAQ0oS,EAAax9F,YAAYr5M,GAAI3L,EAAOF,EAAO6b,EAAY1U,GACvGs7S,EAAgBA,EAAc7/S,OAAO,KAAawuB,EAAQ,EAAI,IAAOA,EAAQ,EAAI,KAEjFkrR,EAAc/3T,EAAI,IAAM+3T,EAAc/3T,EAAI,GAAG26B,UAC7CykB,EAAS04Q,EAAcC,EAAc/3T,EAAI,GAAGy1B,OAAQ0oS,EAAax9F,YAAY3gO,EAAI,GAAI2b,EAAOF,EAAO6b,EAAY1U,GAC/Gs7S,EAAgBA,EAAc7/S,OAAO,KAAa+gC,EAAQ,EAAI,IAAOA,EAAQ,EAAI,MAErFiC,EAAarhD,EAAI,EAIM,eAA/B4iB,EAAO8Q,MAAMk3M,eAAkCmtF,EAAcz3T,OAAS,IAGtE49T,GAAkB,MADlBrxR,EAASirR,GADT14Q,GAAWxuC,EAAKgS,EAAOkY,OAAO,GAAGrF,OAAQ5kB,EAAKstT,EAAav9F,UAAU,KACvChwN,EAAGwuC,EAAOvuC,EAAG8K,EAAOF,EAAO6b,EAAY1U,IAC9B,EAAI,IAAOiqB,EAAQ,EAAI,KAElE,IAASvlB,EAAIqoN,EAAe,EAAGroN,GAAK+5B,EAAY/5B,IAAK,CACjD,IAAI82S,EAAiBv6T,KAAKw6T,kBAAkBz7S,GACG,SAA3Cw7S,EAAejxF,mBAAmB/qM,MAAoBg8R,EAAetjS,OAAOxT,GAAG4lN,UAC/ErgM,EAASirR,EAAcC,EAAczwS,GAAGmO,OAAQ0oS,EAAax9F,YAAYr5M,GAAI3L,EAAOF,EAAO6b,EAAY1U,GACvGs7S,EAAgBA,EAAc7/S,QAASiJ,IAAOqoN,EAAe,GAAMsuF,EAAiB,IAAM,KACpF,IAAOpxR,EAAQ,EAAI,IAAOA,EAAQ,EAAI,MAGpDh2B,EAAU,IAAIyiB,GAAW1W,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAO8M,EAAO8qD,SAAU9qD,EAAOkmB,OAAOjvB,MAAO+I,EAAOkmB,OAAOpP,MAAO9W,EAAOtR,QAASsR,EAAO+0C,UAAWumQ,GAC3Kr6T,KAAKqzT,eAAergT,EAAS+L,EAAQ,IACrC/e,KAAK+uO,aAAahwN,IAOtBo7S,EAAmB9+T,UAAU+xO,YAAc,SAAUruN,GACjD,IAAIu4E,EAASv4E,EAAO6vB,UACpB5uC,KAAKyzT,kBAAkB10S,EAAQu4E,IAOnC6iO,EAAmB9+T,UAAUiX,QAAU,SAAUud,KAQjDsqS,EAAmB9+T,UAAU0kC,cAAgB,WAIzC,MAAO,sBAKXo6R,EAAmB9+T,UAAUm/T,kBAAoB,SAAUz7S,GAEvD,IAAK,IADDwX,EAAmBxX,EAAO8Q,MAAM+R,cAC3BzlC,EAAI,EAAG8+B,EAAW1E,EAAiB95B,OAAQN,EAAI8+B,EAAU9+B,IAC9D,GAAI4iB,EAAO9M,QAAUskB,EAAiBp6B,GAAG8V,OAAe,IAAN9V,EAC9C,OAAOo6B,EAAiBp6B,EAAI,GAGpC,OAAOo6B,EAAiB,IAErB4jS,GACTjI,ICrHEuI,GAA+B,WAC/B,SAASA,KAqFT,OA9EAA,EAAcp/T,UAAUsyG,OAAS,SAAU5uF,EAAQjH,EAAOF,EAAO6b,GAU7D,IAAK,IAJDm7M,EACAI,EACA52M,EAPAu9L,EAAc52M,EAAO9M,MACrBg0N,EAASlnN,EAAOknN,OAEhBiuF,GADSn1S,EAAOkmB,OACAlmB,EAAOkY,QAKvBg9R,EAA+C,eAA/Bl1S,EAAO8Q,MAAMk3M,cAAiCvzM,GAAqB0H,GAC9E98B,EAAK,EAAG+1T,EAAkBD,EAAe91T,EAAK+1T,EAAgB13T,OAAQ2B,IAAM,CACjF,IAAI+0B,EAAQghS,EAAgB/1T,GAC5B+0B,EAAMs0M,mBACNt0M,EAAM2zM,WACF3zM,EAAM2D,SAAWvF,GAAY2iS,EAAc/gS,EAAMlhB,MAAQ,GAAIkhB,EAAO+gS,EAAc/gS,EAAMlhB,MAAQ,GAAI8M,KACpG6vN,EAAW7vN,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAaqyN,EAAc,UAAYxiM,EAAMlhB,MAClFmmB,GACIC,QAAQ,EAAOtB,KAAMohM,GAAap5M,OAAQA,EAAQoU,MAAOA,EACzDiL,KAAMrf,EAAO0uN,cAAct6M,EAAOpU,EAAO8qD,UACzC5kC,OAAQlmB,EAAO2uN,eAAev6M,GAASnd,MAAO+I,EAAOkmB,OAAOjvB,MAAO6f,MAAO9W,EAAOkmB,OAAOpP,QACxF9f,OAAQkwN,EAAOlwN,OAAQC,MAAOiwN,EAAOjwN,MAAOmjB,MAAO8sM,EAAO9sM,OAE9Dpa,EAAO8Q,MAAMnJ,QAAQyxM,GAAa//L,GAC7BA,EAASC,OAaVlF,EAAM8yM,QAAWnvM,SAAS,IAZ1B3D,EAAMs0M,gBAAgBjjO,KAAKyvT,EAAc9gS,EAAMvB,OAAQuB,EAAM4G,OAAQjiB,EAAOF,EAAO6b,EAAY1U,IAC/FoU,EAAM0C,MAAQuC,EAASgG,KACvB4wM,EAAc,IAAIv5M,GAAWm5M,EAAUx2M,EAASgG,KAAMhG,EAAS6M,OAAOjvB,MAAOoiB,EAAS6M,OAAOpP,MAAO9W,EAAOtR,QAAS,MACpHsR,EAAO+tN,cAAcnrO,YAAYs3B,GAAW9F,EAAMs0M,gBAAgB,GAAIrvM,EAASe,MAAO,IAAI1J,GAAK2I,EAASpiB,MAAOoiB,EAASriB,QAASkwN,EAAOp+B,SAAUmnC,EAAa77M,EAAMpmB,EAAEG,WAAa,IAAMimB,EAAM4G,OAAO7sB,aACvMimB,EAAM2zM,QAAQtiO,KAAK,IAAI+wB,GAAKpC,EAAMs0M,gBAAgB,GAAG16N,EAAIk5N,EAAOjwN,MAAOmd,EAAMs0M,gBAAgB,GAAGz6N,EAAIi5N,EAAOlwN,OAAQ,EAAIkwN,EAAOjwN,MAAO,EAAIiwN,EAAOlwN,SAChJod,EAAM8yM,QACFhhM,OAAQ7M,EAAS6M,OAAQ7G,KAAMhG,EAASgG,KACxCroB,OAAQqiB,EAASriB,OAAQ+gB,SAAS,EAClC9gB,MAAOoiB,EAASpiB,MAAOmjB,MAAOf,EAASe,WAc3DshS,EAAcp/T,UAAU+xO,YAAc,SAAUruN,GAK5C,IAAK,IAJD7T,EAAW6T,EAAO6vB,UAAU1jC,SAC5BrL,EAAQkf,EAAO6vB,UAAU/uC,MACzBu1T,EAAer2S,EAAO+tN,cAAcv7N,WACpC0N,EAAQ,EACH7gB,EAAK,EAAGyE,EAAKkc,EAAOkY,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI+0B,EAAQtwB,EAAGzE,GACV+0B,EAAMs0M,gBAAgBhrO,QAAW24T,EAAan2S,KAGnD0Y,GAAcy9R,EAAan2S,GAAQpf,EAAOqL,EAAU6T,EAAQoU,EAAMlhB,MAAOkhB,EAAMs0M,gBAAgB,IAAI,GACnGxoN,OAMRw7S,EAAcp/T,UAAU0kC,cAAgB,WAIpC,MAAO,iBAMX06R,EAAcp/T,UAAUiX,QAAU,SAAUud,KAKrC4qS,KC3FP5uO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCwuO,GAAmC,SAAUhuO,GAE7C,SAASguO,IACL,OAAkB,OAAXhuO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAqD/D,OAvDA6rF,GAAU6uO,EAAmBhuO,GAS7BguO,EAAkBr/T,UAAUsyG,OAAS,SAAU5uF,GAK3C,IAAK,IAJD2T,EAGA0F,EAFAo9R,EAAiBx1T,KAAKs0T,kBAAkBv1S,GAGnC3gB,EAAK,EAAGyE,EAAKkc,EAAOkY,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIu8T,EAAa93T,EAAGzE,GACpBu8T,EAAWlzF,mBACXkzF,EAAW7zF,WACP6zF,EAAW7jS,SAAWvF,GAAYxS,EAAOkY,OAAO0jS,EAAW1oT,MAAQ,GAAI0oT,EAAY57S,EAAOkY,OAAO0jS,EAAW1oT,MAAQ,GAAI8M,KACxH2T,EAAO1yB,KAAK40T,aAAa+F,EAAW/oS,OAAS4jS,EAAej4T,MAAOo9T,EAAW1+R,KAAM0+R,EAAW/oS,OAAS4jS,EAAex2S,IAAK27S,EAAWz+R,IAAKnd,IAC5IqZ,EAAWp4B,KAAKg2J,aAAaj3I,EAAQ47S,EAAY57S,EAAO8qD,UAAY7zD,MAAO+I,EAAOkmB,OAAOjvB,MAAO6f,MAAO9W,EAAOkmB,OAAOpP,SACvGwC,SACVr4B,KAAK+0T,qBAAqB4F,EAAYjoS,EAAM3T,GAC5C/e,KAAKskC,cAAcvlB,EAAQ47S,EAAYjoS,EAAM0F,OAQ7DsiS,EAAkBr/T,UAAU0kC,cAAgB,WACxC,MAAO,qBAUX26R,EAAkBr/T,UAAU+xO,YAAc,SAAUruN,GAChD/e,KAAK+3B,QAAQhZ,IAOjB27S,EAAkBr/T,UAAUiX,QAAU,SAAUud,KAKzC6qS,GACTrG,ICxEExoO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexC0uO,GAAiC,SAAUluO,GAE3C,SAASkuO,IACL,OAAkB,OAAXluO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA2L/D,OA7LA6rF,GAAU+uO,EAAiBluO,GAS3BkuO,EAAgBv/T,UAAUsyG,OAAS,SAAU5uF,GAazC,IAAK,IAZD2T,EAGA0F,EAIAyiS,EAEA7tT,EARAwoT,EAAiBx1T,KAAKs0T,kBAAkBv1S,GACxCy8Q,EAASnvR,KAAKC,IAAIyS,EAAOnH,MAAMoa,aAAa7R,IAAK,GAEjD26S,EAAe,EACfjmS,EAAY,GACZkmS,EAAkB,EAElBC,EAAa,KAEbznS,EAAaxU,EAAO8Q,MAAMsG,oBAC1B8kS,EAAqB,EAChB78T,EAAK,EAAGyE,EAAKkc,EAAOkY,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI+0B,EAAQtwB,EAAGzE,GAGf,GAFA+0B,EAAMs0M,mBACNt0M,EAAM2zM,WACF3zM,EAAM2D,SAAWvF,GAAYxS,EAAOkY,OAAO9D,EAAMlhB,MAAQ,GAAIkhB,EAAOpU,EAAOkY,OAAO9D,EAAMlhB,MAAQ,GAAI8M,GAAS,CAE7G,IAAIm8S,EAAQl7T,KAAKm7T,kBAAkBp8S,EAAQoU,EAAMlhB,OAC7CmpT,EAAWp7T,KAAKq7T,WAAWt8S,EAAQoU,EAAMlhB,OAC7C8oT,GAAmBG,IAAsB,IAAbE,EAAoB,EAAIjoS,EAAM4G,OAE1D8gS,GAAyB,IAAVK,EAAiBD,EAAwC,OAAjBH,GAA0BM,EAA2B5/B,EAAfs/B,EAC7FpoS,EAAO1yB,KAAK40T,aAAazhS,EAAMvB,OAAS4jS,EAAej4T,MAAOw9T,EAAiB5nS,EAAMvB,OAAS4jS,EAAex2S,IAAK67S,EAAa97S,GAC/HqZ,EAAWp4B,KAAKq5T,wBAAwBt6S,EAAQoU,GAE5C+nS,IACAD,EAAqBF,GAEzBD,EAAeC,EACV3iS,EAASC,SACVr4B,KAAK+0T,qBAAqB5hS,EAAOT,EAAM3T,GACvC/e,KAAKskC,cAAcvlB,EAAQoU,EAAOT,EAAM0F,IAE5C,IAAIkjS,EAAgBnoS,EAAM2zM,QAAQ,GAClC,GAAmB,OAAfk0F,EAAqB,CACrB,IAAIO,EAAWhoS,EAAaynS,EAAWjuT,EAAIiuT,EAAWhuT,EAClDwuT,EAAcjoS,EAAa+nS,EAAcvuT,EAAIuuT,EAActuT,EAC3DyuT,EAAaloS,EAAaynS,EAAWjuT,EAAIiuT,EAAWhlT,MAAQglT,EAAWhuT,EAAIguT,EAAWjlT,OACtF2lT,EAAgBnoS,EAChB+nS,EAAcvuT,EAAIuuT,EAActlT,MAAQslT,EAActuT,EAAIsuT,EAAcvlT,OAGxE/I,EAFAX,KAAK4xB,MAAMs9R,KAAclvT,KAAK4xB,MAAMu9R,IACpCnvT,KAAK4xB,MAAMw9R,KAAgBpvT,KAAK4xB,MAAMu9R,GAClCjoS,EAAa+nS,EAAcvuT,EAAIuuT,EAActuT,EAG7C0uT,EAGJ7mS,EADAtB,EACYsB,EAAUra,OAAO,KAAYxN,EAAI,KAAOguT,EAAWhuT,EAAIguT,EAAWjlT,QAAU,MACxE/I,EAAI,IAAMsuT,EAActuT,EAAI,KAGhC6nB,EAAUra,OAAO,KAAYwgT,EAAWjuT,EAAI,IAAMC,EAAI,OACjDsuT,EAAcvuT,EAAIuuT,EAActlT,OAAS,IAAMhJ,EAAI,KAG5EguT,EAAa7nS,EAAM2zM,QAAQ,IAGnC,IAAI9zN,EAAU,IAAIyiB,GAAW1W,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAQ,cAAe,OAAQ8M,EAAOg5B,UAAU/hC,MAAO+I,EAAOg5B,UAAUliB,MAAO9W,EAAOtR,QAASsR,EAAOg5B,UAAU+b,UAAWj/B,GAClM7zB,EAAU+d,EAAO8Q,MAAME,SAASyF,SAASxiB,GACzC+L,EAAO8Q,MAAMs9M,gBACbnsO,EAAQ0D,MAAMC,WAAa,UAE/Boa,EAAO+tN,cAAcnrO,YAAYX,IAOrC45T,EAAgBv/T,UAAU8/T,kBAAoB,SAAUp8S,EAAQ9M,GAC5D,YAAsC9W,IAAlC4jB,EAAO48S,yBAA0F,IAAlD58S,EAAO48S,uBAAuBp9T,QAAQ0T,IAU7F2oT,EAAgBv/T,UAAUggU,WAAa,SAAUt8S,EAAQ9M,GACrD,YAA0B9W,IAAtB4jB,EAAO68S,aAAkE,IAAtC78S,EAAO68S,WAAWr9T,QAAQ0T,IAUrE2oT,EAAgBv/T,UAAUg+T,wBAA0B,SAAUt6S,EAAQoU,GAClE,IAAI0C,EACAqlS,EAAQl7T,KAAKm7T,kBAAkBp8S,EAAQoU,EAAMlhB,OAC7CmpT,EAAWp7T,KAAKq7T,WAAWt8S,EAAQoU,EAAMlhB,OAU7C,OARI4jB,EADAqlS,GAASE,EACDr8S,EAAO88S,iBAEV1oS,EAAMnmB,EAAI,EACP+R,EAAO+8S,kBAGP/8S,EAAO8qD,SAEZ7pE,KAAKg2J,aAAaj3I,EAAQoU,EAAO0C,GAASA,MAAO9W,EAAOkmB,OAAOpP,MAAO7f,MAAO+I,EAAOkmB,OAAOjvB,SAOtG4kT,EAAgBv/T,UAAUmtO,oBAAsB,SAAUxjK,EAAMjmD,GAC5D,IAEI9M,EAFAzV,EAAOwoE,EAGP+2P,GAFS/2P,EAAKvoE,OAEIsiB,EAAO48S,wBACzBK,EAAWj9S,EAAO68S,WACtB,QAAwBzgU,IAApB4gU,GAAiCA,EAAgBt/T,OAAS,EAC1D,IAAK,IAAIN,EAAI,EAAGA,EAAI4/T,EAAgBt/T,OAAQN,IACxC,IAAK,IAAIsnB,EAAI,EAAGA,EAAIjnB,EAAKC,OAAQgnB,IACzBA,IAAMs4S,EAAgB5/T,KAElB8V,EAAQqgB,GAAY91B,EADd,IAANL,GAC2B,EAGD4/T,EAAgB5/T,EAAI,GAHhB4/T,EAAgB5/T,GAAI,KAAM4iB,GAK5DviB,EAAKinB,GAAG1E,EAAOyT,OAASvgB,GAKxC,QAAiB9W,IAAb6gU,GAA0BA,EAASv/T,OAAS,EAC5C,IAAK,IAAI4pB,EAAI,EAAGA,EAAI21S,EAASv/T,OAAQ4pB,IACjC,IAAS5C,EAAI,EAAGA,EAAIjnB,EAAKC,OAAQgnB,IACzBA,IAAMu4S,EAAS31S,KAEXpU,EAAQqgB,GAAY91B,GAAO,EAAGw/T,EAAS31S,QADnBlrB,IAApB4gU,EAC2CC,EAGA,KAHUj9S,GAKzDviB,EAAKinB,GAAG1E,EAAOyT,OAASvgB,GAKxC,OAAOzV,GAOXo+T,EAAgBv/T,UAAU+xO,YAAc,SAAUruN,GAC9C/e,KAAK+3B,QAAQhZ,IAKjB67S,EAAgBv/T,UAAU0kC,cAAgB,WACtC,MAAO,mBAUX66R,EAAgBv/T,UAAUiX,QAAU,SAAUud,KAKvC+qS,GACTvG,IC9MExoO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexC+vO,GAA4B,SAAUvvO,GAEtC,SAASuvO,IACL,OAAkB,OAAXvvO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuE/D,OAzEA6rF,GAAUowO,EAAYvvO,GAStBuvO,EAAW5gU,UAAUsyG,OAAS,SAAU5uF,GAIpC,IAAK,IAHDylC,EAEApsB,EADAo9R,EAAiBx1T,KAAKs0T,kBAAkBv1S,GAEnC3gB,EAAK,EAAGyE,EAAKkc,EAAOkY,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI+0B,EAAQtwB,EAAGzE,GACf+0B,EAAMs0M,mBACNt0M,EAAM2zM,WACF3zM,EAAM2D,SACNvF,GAAYxS,EAAOkY,OAAO9D,EAAMlhB,MAAQ,GAAIkhB,EAAOpU,EAAOkY,OAAO9D,EAAMlhB,MAAQ,GAAI8M,KACnFylC,EAASxkD,KAAK40T,aAAazhS,EAAMvB,OAAS4jS,EAAer5R,OAAQhJ,EAAM8I,KAAM9I,EAAMvB,OAAS4jS,EAAer5R,OAAQhJ,EAAM+I,IAAKnd,IAC9HqZ,EAAWp4B,KAAKq5T,wBAAwBt6S,EAAQoU,IAClCkF,SACLtZ,EAAO8Q,MAAMsG,qBAKdquB,EAAOzuC,OAASqiB,EAAS6M,OAAOjvB,MAChCwuC,EAAOx3C,EAAIw3C,EAAOx3C,EAAKw3C,EAAOzuC,OAAS,IALvCyuC,EAAOxuC,MAAQoiB,EAAS6M,OAAOjvB,MAC/BwuC,EAAOz3C,EAAIy3C,EAAOz3C,EAAKy3C,EAAOxuC,MAAQ,GAM1CoiB,EAAS6M,OAAOjvB,MAAQ,EACxBhW,KAAK+0T,qBAAqB5hS,EAAOqxB,EAAQzlC,GACzC/e,KAAKskC,cAAcvlB,EAAQoU,EAAOqxB,EAAQpsB,OAU1D6jS,EAAW5gU,UAAUg+T,wBAA0B,SAAUt6S,EAAQoU,GAC7D,IAAI8R,GAAWpP,MAAO9W,EAAOqf,KAAMpoB,MAAO3J,KAAKC,IAAIyS,EAAOkmB,OAAOjvB,MAAO,IACxE,OAAO02E,EAAOrxF,UAAU26J,aAAa10J,KAAKtB,KAAM+e,EAAQoU,EAAOpU,EAAO8qD,SAAU5kC,IAKpFg3R,EAAW5gU,UAAU0kC,cAAgB,WACjC,MAAO,cAUXk8R,EAAW5gU,UAAU+xO,YAAc,SAAUruN,GACzC/e,KAAK+3B,QAAQhZ,IAOjBk9S,EAAW5gU,UAAUiX,QAAU,SAAUud,KAKlCosS,GACT5H,IC1FExoO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCgwO,GAAqC,SAAUxvO,GAE/C,SAASwvO,IACL,OAAkB,OAAXxvO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAyH/D,OA3HA6rF,GAAUqwO,EAAqBxvO,GAS/BwvO,EAAoB7gU,UAAUsyG,OAAS,SAAU5uF,GAO7C,IAAK,IANDo9S,EAIA/jS,EADAo9R,EAAiBx1T,KAAKs0T,kBAAkBv1S,GAExCixE,EAAc3jF,KAAKC,IAAIyS,EAAOkmB,OAAOjvB,MAAO,GACvC5X,EAAK,EAAGyE,EAAKkc,EAAOkY,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI+0B,EAAQtwB,EAAGzE,GAGf,GAFA+0B,EAAMs0M,mBACNt0M,EAAM2zM,WACF3zM,EAAM2D,SACNvF,GAAYxS,EAAOkY,OAAO9D,EAAMlhB,MAAQ,GAAIkhB,EAAOpU,EAAOkY,OAAO9D,EAAMlhB,MAAQ,GAAI8M,GAAS,CAU5F,GARAo9S,EAAcn8T,KAAK40T,aAAazhS,EAAMvB,OAAS4jS,EAAej4T,MAAO8O,KAAKC,IAAI6mB,EAAM8I,KAAM9I,EAAM+I,KAAM/I,EAAMvB,OAAS4jS,EAAex2S,IAAK3S,KAAK8T,IAAIgT,EAAM8I,KAAM9I,EAAM+I,KAAMnd,GAC1KoU,EAAM2zM,QAAQtiO,KAAKxE,KAAK40T,aAAazhS,EAAMvB,OAAS4jS,EAAer5R,OAAQ9vB,KAAKC,IAAI6mB,EAAM8I,KAAM9I,EAAM+I,KAAM/I,EAAMvB,OAAS4jS,EAAer5R,OAAQ9vB,KAAK8T,IAAIgT,EAAM8I,KAAM9I,EAAM+I,KAAMnd,IACnL/e,KAAKo8T,kBAAkBr9S,EAAO8Q,MAAMsG,oBAAqBhD,EAAM2zM,QAAQ,GAAI92I,GAE3E78D,EAAM2zM,QAAQtiO,KAAKxE,KAAK40T,aAAazhS,EAAMvB,OAAS4jS,EAAej4T,MAAO8O,KAAKC,IAAI6mB,EAAMzxB,KAAMyxB,EAAMlxB,OAAQkxB,EAAMvB,OAAS4jS,EAAer5R,OAAQ9vB,KAAKC,IAAI6mB,EAAMzxB,KAAMyxB,EAAMlxB,OAAQ8c,IAEtLoU,EAAM2zM,QAAQtiO,KAAKxE,KAAK40T,aAAazhS,EAAMvB,OAAS4jS,EAAer5R,OAAQ9vB,KAAK8T,IAAIgT,EAAMzxB,KAAMyxB,EAAMlxB,OAAQkxB,EAAMvB,OAAS4jS,EAAex2S,IAAK3S,KAAK8T,IAAIgT,EAAMzxB,KAAMyxB,EAAMlxB,OAAQ8c,MACpLqZ,EAAWp4B,KAAKq5T,wBAAwBt6S,EAAQoU,IAClCkF,OAAQ,CAClBr4B,KAAK+0T,qBAAqB5hS,EAAOA,EAAM2zM,QAAQ,GAAI/nN,GACnD,IAAIs9S,GAAWtvT,EAAGomB,EAAM2zM,QAAQ,GAAG/5N,EAAGC,EAAGmmB,EAAM2zM,QAAQ,GAAG95N,GACtDsvT,GAAYvvT,EAAGomB,EAAM2zM,QAAQ,GAAG/5N,EAAGC,EAAGmmB,EAAM2zM,QAAQ,GAAG95N,GAC3DhN,KAAKu8T,sBAAsBx9S,EAAQoU,EAAOkpS,EAAQC,EAASH,EAAa/jS,GAE5Ep4B,KAAKo8T,iBAAiBr9S,EAAO8Q,MAAMsG,oBAAqBhD,EAAM2zM,QAAQ,GAAI92I,GAC1EhwF,KAAKo8T,iBAAiBr9S,EAAO8Q,MAAMsG,oBAAqBhD,EAAM2zM,QAAQ,GAAI92I,MAOtFksO,EAAoB7gU,UAAU+gU,iBAAmB,SAAU9gM,EAAY92E,EAAQwrC,GACvEsrC,GACA92E,EAAOz3C,GAAKijF,EAAc,EAC1BxrC,EAAOxuC,MAAQg6E,IAGfxrC,EAAOx3C,GAAKgjF,EAAc,EAC1BxrC,EAAOzuC,OAASi6E,IAMxBksO,EAAoB7gU,UAAUg+T,wBAA0B,SAAUt6S,EAAQoU,GACtE,IAAIiL,EAAQjL,EAAMzxB,MAAQyxB,EAAMlxB,MAAS8c,EAAO26S,cAAgB36S,EAAO06S,cACnEx0R,GAAWpP,MAAO9W,EAAOkmB,OAAOpP,MAAO7f,MAAO3J,KAAKC,IAAIyS,EAAOkmB,OAAOjvB,MAAO,IAChF,OAAOhW,KAAKg2J,aAAaj3I,EAAQoU,EAAOiL,EAAM6G,IAOlDi3R,EAAoB7gU,UAAUkhU,sBAAwB,SAAUx9S,EAAQoU,EAAOzxB,EAAMO,EAAOywB,EAAM0F,GAE9F,IAAIvD,EACA7hB,EACA+L,EAAO8Q,MAAMsG,qBACbtB,EAAa,KAAanC,EAAM,EAAI,KAAOA,EAAK1lB,EAAI0lB,EAAK3c,OAAS,GAAK,OACtD2c,EAAK3lB,EAAI2lB,EAAK1c,OAAS,KAAO0c,EAAK1lB,EAAI0lB,EAAK3c,OAAS,GAAK,IAC3E8e,GAAc,KAAanzB,EAAM,EAAI,KAAOgxB,EAAK1lB,EAAI0lB,EAAK3c,OAAS,GAAK,MACvDrU,EAAM,EAAI,KAAOgxB,EAAK1lB,EAAI0lB,EAAK3c,QAAU,IAC1D8e,GAAc,KAAa5yB,EAAO,EAAI,KAAOywB,EAAK1lB,EAAI0lB,EAAK3c,OAAS,GAAK,MACxD9T,EAAO,EAAI,IAAOywB,EAAM,EAAI,MAG7CmC,EAAa,MAAanC,EAAK3lB,EAAI2lB,EAAK1c,MAAQ,GAAK,KAAO0c,EAAK1lB,EAAI0lB,EAAK3c,QAAU,OACnE2c,EAAK3lB,EAAI2lB,EAAK1c,MAAQ,GAAK,IAAO0c,EAAM,EAAI,IAE7DmC,GAAc,KAAanC,EAAM,EAAI,IAAOhxB,EAAM,EAAI,OACrCgxB,EAAK3lB,EAAI2lB,EAAK1c,MAAQ,GAAK,IAAOtU,EAAM,EAAI,IAE7DmzB,GAAc,MAAanC,EAAK3lB,EAAI2lB,EAAK1c,MAAQ,GAAK,IAAO/T,EAAO,EAAI,OACvDywB,EAAK3lB,EAAI2lB,EAAK1c,OAAS,IAAO/T,EAAO,EAAI,KAE9D+Q,EAAU,IAAIyiB,GAAW1W,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAQ,UAAYkhB,EAAMlhB,MAAOmmB,EAASgG,KAAMhG,EAAS6M,OAAOjvB,MAAOoiB,EAASgG,KAAMrf,EAAOtR,QAASsR,EAAO+0C,UAAWj/B,GAC/L,IAAI7zB,EAAU+d,EAAO8Q,MAAME,SAASyF,SAASxiB,GAC7ChS,EAAQwC,aAAa,aAAc2vB,EAAMpmB,EAAEG,WAAa,IAAMimB,EAAM8I,KAAK/uB,WACnE,IAAMimB,EAAM+I,IAAIhvB,WAAa,IAAMimB,EAAMlxB,MAAMiL,WAAa,IAAMimB,EAAMzxB,KAAKwL,YACnF6R,EAAO+tN,cAAcnrO,YAAYX,IAKrCk7T,EAAoB7gU,UAAU0kC,cAAgB,WAC1C,MAAO,uBAUXm8R,EAAoB7gU,UAAU+xO,YAAc,SAAUruN,GAClD/e,KAAK+3B,QAAQhZ,IAOjBm9S,EAAoB7gU,UAAUiX,QAAU,SAAUud,KAK3CqsS,GACT7H,IC5IExoO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCswO,GAAiC,SAAU9vO,GAE3C,SAAS8vO,IACL,OAAkB,OAAX9vO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA8G/D,OAhHA6rF,GAAU2wO,EAAiB9vO,GAS3B8vO,EAAgBnhU,UAAUsyG,OAAS,SAAU5uF,GAMzC,IAAK,IALDoU,EACA0B,EAAY,GACZsT,EAAU,IACVs0R,OAASthU,EACT+4T,EAAgBl0T,KAAKmyT,wBAAwBpzS,GACxC5iB,EAAI,EAAG8+B,EAAWi5R,EAAcz3T,OAAQN,EAAI8+B,EAAU9+B,IAAK,EAChEg3B,EAAQ+gS,EAAc/3T,IAChBsrO,mBACNt0M,EAAM2zM,WACN,IAAI5qM,EAAM7vB,KAAK8T,IAAIgT,EAAM+I,IAAK/I,EAAM8I,MAChCA,EAAO5vB,KAAKC,IAAI6mB,EAAM+I,IAAK/I,EAAM8I,MACrC,GAAIld,EAAOnH,MAAM2b,WAAY,CACzB,IAAI8F,EAAO6C,EACXA,EAAMD,EACNA,EAAO5C,EAEX,IAAIi2M,EAAWp0M,GAAS/H,EAAMvB,OAAQsK,EAAKnd,EAAOjH,MAAOiH,EAAOnH,MAAOmH,EAAO8Q,MAAMsG,qBAChFumS,EAAYxhS,GAAS/H,EAAMvB,OAAQqK,EAAMld,EAAOjH,MAAOiH,EAAOnH,MAAOmH,EAAO8Q,MAAMsG,qBACtFhD,EAAMs0M,gBAAgBjjO,KAAKk4T,GAC3BvpS,EAAMs0M,gBAAgBjjO,KAAK8qO,GAC3B,IAAI58M,EAAO,IAAI6C,GAAKlpB,KAAK8T,IAAImvN,EAASviO,EAAG2vT,EAAU3vT,GAAIV,KAAK8T,IAAImvN,EAAStiO,EAAG0vT,EAAU1vT,GAAIX,KAAKC,IAAID,KAAKE,IAAImwT,EAAU3vT,EAAIuiO,EAASviO,GAAIgS,EAAOknN,OAAOjwN,OAAQ3J,KAAKC,IAAID,KAAKE,IAAImwT,EAAU1vT,EAAIsiO,EAAStiO,GAAI+R,EAAOknN,OAAOjwN,QACnN+I,EAAO8Q,MAAMsG,oBAIdzD,EAAK1lB,GAAK+R,EAAOknN,OAAOjwN,MAAQ,EAHhC0c,EAAK3lB,GAAKgS,EAAOknN,OAAOjwN,MAAQ,EAKpCmd,EAAM2zM,QAAQtiO,KAAKkuB,GAEfS,EAAM2D,SAAWvF,GAAY2iS,EAAc/gS,EAAMlhB,MAAQ,GAAIkhB,EAAO+gS,EAAc/gS,EAAMlhB,MAAQ,GAAI8M,IACpG8V,EAAYA,EAAUra,OAAO2tB,EAAU,IAAOmnM,EAAU,EAAI,IAAOA,EAAU,EAAI,KACjFmtF,GAAS,GACJtgU,EAAI,EAAI+3T,EAAcz3T,SAAWy3T,EAAc/3T,EAAI,GAAG26B,SACpD36B,IAAM+3T,EAAcz3T,OAAS,KAGhC0rC,EAAU,IACVtT,GAFAA,EAAY70B,KAAK28T,mBAAmBzI,EAAe/gS,EAAOpU,EAAQ8V,EAAW14B,IAEvDqe,OAAO,MAC7BiiT,GAAS,GAEbt0R,EAAU,OAGK,IAAXs0R,GAA0B,IAANtgU,IACpB04B,EAAY70B,KAAK28T,mBAAmBzI,EAAe/gS,EAAOpU,EAAQ8V,EAAW14B,GAC7EsgU,GAAS,GAEbt0R,EAAU,IACVhV,EAAMs0M,oBAGd,IAAI1wM,EAA2B,cAApBhY,EAAOosL,SAA2BpsL,EAAO8Q,MAAM7uB,QAAQsC,GAAK,cAAgByb,EAAO9M,MAAQ,IAAM8M,EAAOgY,KAC/GhY,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAC9Ce,EAAU,IAAIyiB,GAAWsB,EAAMhY,EAAO8qD,SAAU9qD,EAAOkmB,OAAOjvB,MAAO+I,EAAOkmB,OAAOpP,MAAO9W,EAAOtR,QAASsR,EAAO+0C,UAAWj/B,GAChI70B,KAAKqzT,eAAergT,EAAS+L,EAAQ,IACrC/e,KAAK+uO,aAAahwN,IAOtBy9S,EAAgBnhU,UAAUshU,mBAAqB,SAAUzI,EAAe/gS,EAAOpU,EAAQ8V,EAAW14B,GAC9F,IAAK,IAAIsnB,EAAItnB,EAAGsnB,GAAK,IACbywS,EAAczwS,GAAGqT,SAAWo9R,EAAczwS,GAAGgkN,gBAAgB,IAD7ChkN,IAGhBoR,GAAa,MADb1B,EAAQ+gS,EAAczwS,IACUgkN,gBAAgB,GAAI,EAAI,IAAQt0M,EAAMs0M,gBAAgB,KAAS,IAMvG,OAAO5yM,GAOX2nS,EAAgBnhU,UAAU+xO,YAAc,SAAUruN,GAC9C,IAAIu4E,EAASv4E,EAAO6vB,UACpB5uC,KAAKyzT,kBAAkB10S,EAAQu4E,IAKnCklO,EAAgBnhU,UAAU0kC,cAAgB,WAItC,MAAO,mBAOXy8R,EAAgBnhU,UAAUiX,QAAU,SAAUud,KAKvC2sS,GACTtK,IC5HE0K,GAA8B,WAC9B,SAASA,KAgHT,OAzGAA,EAAavhU,UAAUsyG,OAAS,SAAU5uF,EAAQjH,EAAOF,EAAO6b,GAC5D,IAEIu7M,EACA52M,EAEAykS,EACAjwT,EANAq5N,EAASlnN,EAAOknN,OAChBiuF,EAAgBn1S,EAAOkY,OAMvBj6B,EAAQqP,KAAKC,IAAIyS,EAAO8Q,MAAM+tM,gBAAgB7nN,OAAQgJ,EAAO8Q,MAAM+tM,gBAAgB5nN,OACnF8mT,EAAgB9/T,EAAQ,IACxB+/T,EAAYh+S,EAAOg+S,UAAYD,EAC/BE,EAAYj+S,EAAOi+S,UAAYF,EAC/BG,EAAc,KAElB,GAA0B,OAArBl+S,EAAOg+S,WAA2C,OAArBh+S,EAAOi+S,UAAqB,CAC1D,IAAK,IAAI5+T,EAAK,EAAGyE,EAAKkc,EAAO8Q,MAAM+R,cAAexjC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpE,IAAI2pB,EAAUllB,EAAGzE,GACI,WAAjB2pB,EAAQrhB,OAAyC,IAApBqhB,EAAQ+O,SAA2C,OAAtB/O,EAAQg1S,WAA4C,OAAtBh1S,EAAQi1S,YAChGC,EAAcl1S,EAAQ0gN,QAAUw0F,EAAcl1S,EAAQ0gN,QAAUw0F,GAIxED,EAAYD,EAAY,EACxBnwT,EAFY5P,EAAQ,EAAK,EAEL+/T,OAGpBE,EAAcl+S,EAAO0pN,QACrB77N,EAASmwT,EAAYC,EAEzB,IAAK,IAAI/4T,EAAK,EAAGkwT,EAAkBD,EAAejwT,EAAKkwT,EAAgB13T,OAAQwH,IAAM,CACjF,IAAIi5T,EAAc/I,EAAgBlwT,GAClCi5T,EAAYz1F,mBACZy1F,EAAYp2F,WACRo2F,EAAYpmS,SACZvF,GAAY2iS,EAAcgJ,EAAYjrT,MAAQ,GAAIirT,EAAahJ,EAAcgJ,EAAYjrT,MAAQ,GAAI8M,KAOrG89S,GALIA,EADsB,OAArB99S,EAAOg+S,WAA2C,OAArBh+S,EAAOi+S,UACrBpwT,EAASP,KAAKE,KAAK2wT,EAAY/tS,KAAO8tS,GAGtCD,EAAYpwT,EAASP,KAAKE,KAAK2wT,EAAY/tS,KAAO8tS,KAErCD,EACjC5kS,GACIC,QAAQ,EAAOtB,KAAMohM,GAAap5M,OAAQA,EAAQoU,MAAO+pS,EACzD9+R,KAAMrf,EAAO0uN,cAAcyvF,EAAan+S,EAAO8qD,UAC/C5kC,OAAQlmB,EAAO2uN,eAAewvF,GAAelnT,MAAO+I,EAAOkmB,OAAOjvB,MAAO6f,MAAO9W,EAAOkmB,OAAOpP,QAC9F9f,OAAQ,EAAI8mT,EAAe7mT,MAAO,EAAI6mT,GAE1C99S,EAAO8Q,MAAMnJ,QAAQyxM,GAAa//L,GAC7BA,EAASC,OAaV6kS,EAAYj3F,QAAWnvM,SAAS,IAZhComS,EAAYz1F,gBAAgBjjO,KAAK02B,GAASgiS,EAAYtrS,OAAQsrS,EAAYnjS,OAAQjiB,EAAOF,EAAO6b,IAChGypS,EAAYrnS,MAAQuC,EAASgG,KAC7B4wM,EAAc,IAAIv5M,GAAW1W,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAQ,UAAYirT,EAAYjrT,MAAOmmB,EAASgG,KAAMhG,EAAS6M,OAAOjvB,MAAOoiB,EAAS6M,OAAOpP,MAAO9W,EAAOtR,QAAS,MAC/LsR,EAAO+tN,cAAcnrO,YAAYs3B,GAAWikS,EAAYz1F,gBAAgB,GAAI,SAAU,IAAIh4M,GAAK2I,EAASpiB,MAAOoiB,EAASriB,QAASkwN,EAAOp+B,SAAUmnC,EAAakuF,EAAYnwT,EAAEG,WAAa,IAAMgwT,EAAYnjS,OAAO7sB,aACnNgwT,EAAYp2F,QAAQtiO,KAAK,IAAI+wB,GAAK2nS,EAAYz1F,gBAAgB,GAAG16N,EAAI8vT,EAAeK,EAAYz1F,gBAAgB,GAAGz6N,EAAI6vT,EAAe,EAAIA,EAAe,EAAIA,IAC7JK,EAAYj3F,QACRhhM,OAAQ7M,EAAS6M,OAAQ7G,KAAMhG,EAASgG,KACxCroB,OAAQqiB,EAASriB,OAAQ+gB,SAAS,EAClCqC,MAAO,SAAUnjB,MAAOoiB,EAASpiB,WAcrD4mT,EAAavhU,UAAUiX,QAAU,SAAUud,KAQ3C+sS,EAAavhU,UAAU0kC,cAAgB,WAInC,MAAO,gBAOX68R,EAAavhU,UAAU+xO,YAAc,SAAUruN,GAK3C,IAAK,IAJD7T,EAAW6T,EAAO6vB,UAAU1jC,SAC5BrL,EAAQkf,EAAO6vB,UAAU/uC,MACzBu1T,EAAer2S,EAAO+tN,cAAcv7N,WACpC0N,EAAQ,EACH7gB,EAAK,EAAGyE,EAAKkc,EAAOkY,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI8+T,EAAcr6T,EAAGzE,GAChB8+T,EAAYz1F,gBAAgBhrO,SAGjCk7B,GAAcy9R,EAAan2S,GAAQpf,EAAOqL,EAAU6T,EAAQm+S,EAAYjrT,MAAOirT,EAAYz1F,gBAAgB,IAAI,GAC/GxoN,OAGD29S,KCtHP/wO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAgBxCixO,GAA4B,SAAUzwO,GAGtC,SAASywO,EAAW1/F,GAChB,IAAI19N,EAAQ2sF,EAAOprF,KAAKtB,KAAMy9N,IAAgBz9N,KAE9C,OADAD,EAAMq9T,gBACCr9T,EAgPX,OArPA8rF,GAAUsxO,EAAYzwO,GAYtBywO,EAAW9hU,UAAU2tO,gBAAkB,SAAUjqN,GAC7C,IAAI/hB,EACAi6B,EAASj3B,KAAKq9T,kBAAkBt+S,GAEpC,GADA/e,KAAKo9T,aAAep9T,KAAKs9T,uBAAuBrmS,EAAQlY,GACpDkY,EAAOx6B,OAAS,EAAG,CACnBsiB,EAAOyrN,cACP,IAAK,IAAIpsO,EAAK,EAAG2jC,EAAW9K,EAAQ74B,EAAK2jC,EAAStlC,OAAQ2B,IAAM,CAC5D,IAAI+0B,EAAQ4O,EAAS3jC,GACrB,GAAoB,IAAhB+0B,EAAMlhB,MAAa,CACnB,IAAI46G,EAAW7sH,KAAKu9T,iBAAiBtmS,EAAQ9D,EAAMlhB,MAAQ,EAAG8M,GAC9D/hB,EAAQgD,KAAKw9T,iBAAiBvmS,EAAO41F,GAAW15F,EAAOnzB,KAAKo9T,aAAavwM,GAAW7sH,KAAKo9T,aAAajqS,EAAMlhB,OAAQ8M,GACpHA,EAAOyrN,WAAWhmO,KAAKxH,GACnBm2B,EAAM4G,QAAU/8B,EAAMygD,cAAczwC,GAAKhQ,EAAM0gD,cAAc1wC,IAC7D+R,EAAOo4M,KAAO9qN,KAAKkT,MAAMlT,KAAK8T,IAAIpB,EAAOo4M,KAAMhkM,EAAM4G,OAAQ/8B,EAAMygD,cAAczwC,EAAGhQ,EAAM0gD,cAAc1wC,IACxG+R,EAAOq4M,KAAO/qN,KAAK6lB,KAAK7lB,KAAKC,IAAIyS,EAAOq4M,KAAMjkM,EAAM4G,OAAQ/8B,EAAMygD,cAAczwC,EAAGhQ,EAAM0gD,cAAc1wC,SAM3HmwT,EAAW9hU,UAAUkiU,iBAAmB,SAAUtmS,EAAQ96B,EAAG4iB,GACzD,GAAuC,SAAnCA,EAAOuqN,mBAAmB/qM,KAC1B,OAAOpiC,EAEX,KAAOsB,EAAkBw5B,EAAO96B,KAAOA,GAAK,GACxCA,GAAQ,EAEZ,OAAOA,GAEXghU,EAAW9hU,UAAUoiU,aAAe,SAAUxmS,EAAQ96B,EAAG4iB,GACrD,GAAuC,SAAnCA,EAAOuqN,mBAAmB/qM,KAC1B,OAAOpiC,EAEX,KAAOsB,EAAkBw5B,EAAO96B,KAAOA,EAAI86B,EAAOx6B,QAC9CN,GAAQ,EAEZ,OAAOA,GAEXghU,EAAW9hU,UAAUgiU,kBAAoB,SAAUt+S,GAC/C,GAAuC,SAAnCA,EAAOuqN,mBAAmB/qM,KAC1B,OAAOxf,EAAOkY,OAGlB,IAAK,IADDA,EAASv4B,KAAWqgB,EAAOkY,OAAQ,MAAM,GACpC96B,EAAI,EAAGA,EAAI86B,EAAOx6B,OAAQN,IAC/B86B,EAAO96B,GAAG8V,MAAQ9V,EACd86B,EAAO96B,GAAGktO,UACVpyM,EAAO96B,GAAGsrO,mBACVxwM,EAAO96B,GAAG2qO,WACV7vM,EAAOxO,OAAOtsB,EAAG,GACjBA,KAGR,OAAO86B,GAOXkmS,EAAW9hU,UAAUiiU,uBAAyB,SAAUrmS,EAAQlY,GAC5D,IAGI2+S,EACAC,EACAC,EACAC,EACAC,EAIAC,EACAC,EAZA/+S,EAAQgY,EAAOx6B,OACfwhU,KACAC,KAMAC,KACAprQ,KACAihB,KAGAoqP,EAAwBr/S,EAAOq/S,sBAAwBr/S,EAAOq/S,sBAAwB,GAE1F,OADAA,EAAwBA,EAAwB,EAAI,EAAIA,EAAwB,EAAI,EAAIA,EAChFr/S,EAAOs/S,YACX,IAAK,YACD,IAAK,IAAIliU,EAAI,EAAGA,EAAI8iB,EAAQ,EAAG9iB,IAC3BgiU,EAAGhiU,GAAK86B,EAAO96B,EAAI,GAAGy1B,OAASqF,EAAO96B,GAAGy1B,OACzCmhC,EAAG52D,GAAK86B,EAAO96B,EAAI,GAAG49B,OAAS9C,EAAO96B,GAAG49B,OACzCi6C,EAAM73E,GAAK42D,EAAG52D,GAAKgiU,EAAGhiU,GAG1B6hU,EAAchqP,EAAMv3E,OAEpBwhU,EAAQ,GAAKjqP,EAAM,GACnBiqP,EAAQh/S,EAAQ,GAAK+0D,EAAMgqP,EAAc,GAEzC,IAAK,IAAIv6S,EAAI,EAAGA,EAAI06S,EAAG1hU,OAAQgnB,IACvBu6S,EAAcv6S,EAAI,IACduwD,EAAMvwD,GAAKuwD,EAAMvwD,EAAI,IAAM,EAC3Bw6S,EAAQx6S,EAAI,GAAK,GAGjBs6S,EAAaI,EAAG16S,GAAK06S,EAAG16S,EAAI,GAC5Bw6S,EAAQx6S,EAAI,GAAK,EAAIs6S,IAAeA,EAAaI,EAAG16S,EAAI,IAAMuwD,EAAMvwD,IAAMs6S,EAAaI,EAAG16S,IAAMuwD,EAAMvwD,EAAI,MAItH,MACJ,IAAK,WACD,IAAStnB,EAAI,EAAGA,EAAI8iB,EAAO9iB,IAEnB8hU,EAAQ9hU,GADF,IAANA,EACc8iB,EAAQ,EAAMm/S,GAAyBnnS,EAAO96B,EAAI,GAAGy1B,OAASqF,EAAO96B,GAAGy1B,QAAW,EAE5Fz1B,IAAO8iB,EAAQ,EACNA,EAAQ,EAAMm/S,GAAyBnnS,EAAOhY,EAAQ,GAAG2S,OAASqF,EAAOhY,EAAQ,GAAG2S,QAAW,EAG/FwsS,GAAyBnnS,EAAO96B,EAAI,GAAGy1B,OAASqF,EAAO96B,EAAI,GAAGy1B,QAGpF,MACJ,QACI,GAA0B,YAAtB7S,EAAOs/S,WAA0B,CACfpnS,EAAO,GAAG8C,OAAS9C,EAAO,GAAG8C,OAAW9C,EAAO,GAAGrF,OAASqF,EAAO,GAAGrF,OACtEqF,EAAOhY,EAAQ,GAAG2S,OAASqF,EAAOhY,EAAQ,GAAG2S,OACzDqF,EAAOhY,EAAQ,GAAG8a,OAAS9C,EAAOhY,EAAQ,GAAG8a,OAClDkkS,EAAQ,GAAM,GAAKhnS,EAAO,GAAG8C,OAAS9C,EAAO,GAAG8C,SAAY9C,EAAO,GAAGrF,OAASqF,EAAO,GAAGrF,QAAU,EACnGssS,EAAiB,GAAK,GACtBD,EAAQhnS,EAAOx6B,OAAS,GAAM,GAAKw6B,EAAOA,EAAOx6B,OAAS,GAAGs9B,OAAS9C,EAAOA,EAAOx6B,OAAS,GAAGs9B,SAC3F9C,EAAOA,EAAOx6B,OAAS,GAAGm1B,OAASqF,EAAOA,EAAOx6B,OAAS,GAAGm1B,QAClEqsS,EAAQ,GAAKC,EAAiB,GAAK7xT,KAAKE,IAAI0xT,EAAQ,MAAQ7xP,EAAAA,EAAW,EAAI6xP,EAAQ,GACnFA,EAAQhnS,EAAOx6B,OAAS,GAAKyhU,EAAiBjnS,EAAOx6B,OAAS,GAAK4P,KAAKE,IAAI0xT,EAAQhnS,EAAOx6B,OAAS,MAAQ2vE,EAAAA,EACxG,EAAI6xP,EAAQhnS,EAAOx6B,OAAS,QAIhCwhU,EAAQ,GAAKC,EAAiB,GAAK,EACnCD,EAAQhnS,EAAOx6B,OAAS,GAAK,EAEjC,IAASN,EAAI,EAAGA,EAAI8iB,EAAQ,EAAG9iB,IAM3B,GALAuhU,EAAezmS,EAAO96B,GAAGy1B,OAASqF,EAAO96B,EAAI,GAAGy1B,OAChD+rS,EAAe1mS,EAAO96B,EAAI,GAAGy1B,OAASqF,EAAO96B,EAAI,GAAGy1B,OACpDgsS,EAAe3mS,EAAO96B,EAAI,GAAGy1B,OAASqF,EAAO96B,GAAGy1B,OAChDisS,EAAM5mS,EAAO96B,EAAI,GAAG49B,OAAS9C,EAAO96B,GAAG49B,QAAU,KACjD+jS,EAAM7mS,EAAO96B,GAAG49B,OAAS9C,EAAO96B,EAAI,GAAG49B,QAAU,KAC5B,IAAjB2jS,GAAuC,IAAjBC,GAAuC,IAAjBC,EAC5CK,EAAQ9hU,GAAK,EACb+hU,EAAiB/hU,GAAK,MAErB,CACD,IAAI8vF,EAAI,GAAKyxO,EAAeO,EAAQ9hU,EAAI,GAAK,EAAIwhU,GACjDM,EAAQ9hU,IAAM8vF,EAAI2xO,EAClBM,EAAiB/hU,GAAK8vF,GAAK,GAAK4xO,EAAMD,EAAeE,EAAMJ,GAAgBA,EAAeQ,EAAiB/hU,EAAI,IAGvH,IAAK,IAAIkqB,EAAIpH,EAAQ,EAAGoH,GAAK,EAAGA,IAC5B43S,EAAQ53S,GAAK43S,EAAQ53S,GAAK43S,EAAQ53S,EAAI,GAAK63S,EAAiB73S,GAIxE,OAAO43S,GAOXd,EAAW9hU,UAAUmiU,iBAAmB,SAAUjiR,EAAQvS,EAAQs1R,EAAUC,EAAUx/S,GAClF,IAAI0+B,EACAC,EACAvqB,EACAqrS,EAAoBF,EACpBG,EAAoBF,EACxB,OAAQx/S,EAAOs/S,YACX,IAAK,WAC8B,aAA3Bt/S,EAAOjH,MAAMwZ,YACbktS,EAAoBF,EAAWt+T,KAAKu0B,iBAAiBxV,GACrD0/S,EAAoBF,EAAWv+T,KAAKu0B,iBAAiBxV,IAEzD0+B,EAAgB,IAAIxqB,GAAcsoB,EAAO3pB,OAAS0sS,EAAW,EAAG/iR,EAAOxhB,OAASykS,EAAoB,GACpG9gR,EAAgB,IAAIzqB,GAAc+V,EAAOpX,OAAS2sS,EAAW,EAAGv1R,EAAOjP,OAAS0kS,EAAoB,GACpGtrS,EAAQ,IAAIoqM,GAAc9/K,EAAeC,GACzC,MACJ,IAAK,YACD,IAAI1gD,GAASgsC,EAAOpX,OAAS2pB,EAAO3pB,QAAU,EAC9C6rB,EAAgB,IAAIxqB,GAAcsoB,EAAO3pB,OAAS50B,EAAOu+C,EAAOxhB,OAASukS,EAAWthU,GACpF0gD,EAAgB,IAAIzqB,GAAc+V,EAAOpX,OAAS50B,EAAOgsC,EAAOjP,OAASwkS,EAAWvhU,GACpFm2B,EAAQ,IAAIoqM,GAAc9/K,EAAeC,GACzC,MACJ,QACI,IACIghR,EAAW11R,EAAOpX,OAAS2pB,EAAO3pB,OACtC8sS,GAAoBA,EACpB,IAAIjjS,EAHO,EAAI,GAGI,EAAI8f,EAAOxhB,OAAUiP,EAAOjP,OAHpC,EAAI,EAGiD2kS,GAAWJ,EAAW,GAAMC,IACxF5iS,EAJO,EAAI,GAIG4f,EAAOxhB,OAAU,EAAIiP,EAAOjP,OAJnC,EAAI,EAIiD2kS,GAAW,GAAMJ,EAAWC,IAC5F9gR,EAAgB,IAAIxqB,IAAe,EAAKsoB,EAAa,OAAKvS,EAAa,SAL5D,EAAI,GAKmEvN,GAClFiiB,EAAgB,IAAIzqB,IAAgBsoB,EAAa,OAAI,EAAKvS,EAAa,SAN5D,EAAI,GAMmErN,GAClFxI,EAAQ,IAAIoqM,GAAc9/K,EAAeC,GAGjD,OAAOvqB,GAMXgqS,EAAW9hU,UAAUk5B,iBAAmB,SAAUxV,GAC9C,IAAI5c,EAAW4c,EAAOjH,MAAMw3S,mBAuB5B,MArBiB,UAAbntT,EACyB,QAEP,WAAbA,EACoB,OAEP,SAAbA,EACoB,MAEP,UAAbA,EACoB,KAEP,YAAbA,EACoB,IAEP,YAAbA,EACoB,IAGA,QASjCg7T,EAAW9hU,UAAU+xO,YAAc,SAAUruN,GACzC,IAAIu4E,EAASv4E,EAAO6vB,UACpB5uC,KAAKyzT,kBAAkB10S,EAAQu4E,IAE5B6lO,GACTjL,ICvQErmO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCyyO,GAA8B,SAAUjyO,GAExC,SAASiyO,IACL,OAAkB,OAAXjyO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA+E/D,OAjFA6rF,GAAU8yO,EAAcjyO,GASxBiyO,EAAatjU,UAAUsyG,OAAS,SAAU5uF,EAAQjH,EAAOF,EAAO6b,GAChD1U,EAAO8Q,MACN9Q,EAAOknN,OAkBpB,IAAK,IAhBDjzN,EAIA4rT,EACAC,EACAC,EACAC,EACAviU,EAEAihD,EACAC,EAGAmvE,EAbAqmM,EAAa,KAEbr+R,EAAY,GASZ2oB,EAAa,IACbvmB,EAASj3B,KAAKq9T,kBAAkBt+S,GAEhCk1S,EAA+C,eAA/Bl1S,EAAO8Q,MAAMk3M,cAAiCvzM,GAAqB0H,GAC9E98B,EAAK,EAAG2jC,EAAW9K,EAAQ74B,EAAK2jC,EAAStlC,OAAQ2B,IAAM,CAC5D,IAAI+0B,EAAQ4O,EAAS3jC,GACrByuH,EAAW7sH,KAAKu9T,iBAAiBtmS,EAAQ9D,EAAMlhB,MAAQ,EAAG8M,GAC1DoU,EAAMs0M,mBACNt0M,EAAM2zM,WACF3zM,EAAM2D,SAAWvF,GAAY0F,EAAO41F,GAAW15F,EAAO8D,EAAOj3B,KAAKy9T,aAAaxmS,EAAQ9D,EAAMlhB,MAAQ,EAAG8M,IAAUA,IAC/F,OAAfm0S,IAEAz1Q,GADAjhD,EAAOuiB,EAAOyrN,WAAW39G,IACJpvE,cACrBC,EAAgBlhD,EAAKkhD,cACrBkhR,EAAM3K,EAAcf,EAAWthS,OAAQshS,EAAWn5R,OAAQjiB,EAAOF,EAAO6b,EAAY1U,GACpF8/S,EAAM5K,EAAc9gS,EAAMvB,OAAQuB,EAAM4G,OAAQjiB,EAAOF,EAAO6b,EAAY1U,GAC1E+/S,EAAO7K,EAAcx2Q,EAAc1wC,EAAG0wC,EAAczwC,EAAG8K,EAAOF,EAAO6b,EAAY1U,GACjFggT,EAAO9K,EAAcv2Q,EAAc3wC,EAAG2wC,EAAc1wC,EAAG8K,EAAOF,EAAO6b,EAAY1U,GACjF8V,EAAYA,EAAUra,OAAQgjC,EAAa,IAAOohR,EAAK,EAAI,IAAOA,EAAK,EAAI,MAAmBE,EAAM,EAAI,IACjGA,EAAM,EAAI,IAAOC,EAAM,EAAI,IAAOA,EAAM,EAAI,IAAOF,EAAK,EAAI,IAAOA,EAAK,EAAI,KACnFrhR,EAAa,KAEjB01Q,EAAa//R,EACbnzB,KAAKwzT,mBAAmBrgS,EAAOpU,EAAQ0U,EAAYwgS,KAGnDz2Q,EAAa,IACb01Q,EAAa,KACb//R,EAAMs0M,oBAGd,IAAI1wM,EAA2B,cAApBhY,EAAOosL,SAA2BpsL,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO+pS,YAAc,cAAgB/pS,EAAO9M,MAC5H8M,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAClDe,EAAU,IAAIyiB,GAAWsB,EAAM,cAAehY,EAAO/I,MAAO+I,EAAO8qD,SAAU9qD,EAAOtR,QAASsR,EAAO+0C,UAAWj/B,GAC/G70B,KAAKqzT,eAAergT,EAAS+L,EAAQ,IACrC/e,KAAK+uO,aAAahwN,IAKtB4/S,EAAatjU,UAAU0kC,cAAgB,WAInC,MAAO,gBAOX4+R,EAAatjU,UAAUiX,QAAU,SAAUud,KAKpC8uS,GACTxB,IClGEtxO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexC8yO,GAAiC,SAAUtyO,GAE3C,SAASsyO,IACL,OAAkB,OAAXtyO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA6H/D,OA/HA6rF,GAAUmzO,EAAiBtyO,GAS3BsyO,EAAgB3jU,UAAUsyG,OAAS,SAAU5uF,GACzC2tE,EAAOrxF,UAAUsyG,OAAOrsG,KAAKtB,KAAM+e,GAC/BA,EAAOkgT,wBACPj/T,KAAKk/T,yBAAyBngT,IAQtCigT,EAAgB3jU,UAAU8jU,qBAAuB,SAAU11F,EAAS1qN,GAGhE,IAAK,IAFDqgT,EAAOjtS,GAAIs3M,GAAWA,EAAQhtO,OAC9B4iU,EAAW,EACNjhU,EAAK,EAAGkhU,EAAY71F,EAASrrO,EAAKkhU,EAAU7iU,OAAQ2B,IAAM,CAC/D,IAAIpB,EAAQsiU,EAAUlhU,GACtBihU,IAAariU,EAAQoiU,IAASpiU,EAAQoiU,GAE1CrgT,EAAOm2S,gBAAgBkK,KAAOA,EAC9BrgT,EAAOm2S,gBAAgBqK,QAAUlzT,KAAK4xB,MAAM5xB,KAAKQ,KAAKwyT,EAAW51F,EAAQhtO,OAAS,IAClFsiB,EAAOm2S,gBAAgBC,SAAWp2S,EAAOygT,aACrCnzT,KAAK4xB,MAAO,IAAMlf,EAAOm2S,gBAAgBqK,QAAWlzT,KAAKs9D,IAAI8/J,EAAQhtO,OAAQ,EAAI,KAOzFuiU,EAAgB3jU,UAAUmtO,oBAAsB,SAAUhsO,EAAMuiB,GAC5D,IAEIo2S,EAFAsK,KACAh2F,KAEJnrO,OAAOhB,KAAKd,GAAM4C,QAAQ,SAAU/B,GAChCosO,EAAQjlO,KAAKhI,EAAKa,GAAK0hB,EAAOyT,UAElCzT,EAAOm2S,iBACHzrF,QAASA,GAEb,IAAItpN,EAAM9T,KAAK8T,IAAI5kB,MAAM8Q,KAAM0S,EAAOm2S,gBAAgBzrF,SACtDzpO,KAAKm/T,qBAAqBpgT,EAAOm2S,gBAAgBzrF,QAAS1qN,GAC1Do2S,EAAWp2S,EAAOm2S,gBAAgBC,SAElC,IAAK,IADDuK,EACKj8S,EAAI,EAAGA,EAAIjnB,EAAKC,QACrBijU,EAASj2F,EAAQ9hM,OAAO,SAAU36B,GAAK,OAAOA,GAAKmT,GAAOnT,EAAKmT,MAAsB1jB,OACrFgjU,EAAYj7T,MAAM3B,GACVkK,EAAKoT,EAAMg1S,EAAW,GAE1BtyT,EAAGkc,EAAOyT,OAASktS,EACnB78T,IACJsd,GAAYg1S,EACZ1xS,GAAKi8S,EAET,OAAOD,EACP,IAAI58T,GAORm8T,EAAgB3jU,UAAU6jU,yBAA2B,SAAUngT,GAe3D,IAAK,IAZD6S,EACA+tS,EAUAC,EAbAz/S,EAAMpB,EAAOjH,MAAMy+M,YAAYp2M,IAC/B7T,EAAMyS,EAAOjH,MAAMy+M,YAAYjqN,IAI/BuoB,EAAY,GACZ2oB,EAAa,IACbqiR,EAAe9gT,EAAOm2S,gBAAgBzrF,QAAQhtO,OAC9C04T,EAAWp2S,EAAOm2S,gBAAgBC,SAClCiK,EAAOrgT,EAAOm2S,gBAAgBkK,KAC9BG,EAAUxgT,EAAOm2S,gBAAgBqK,QAEjCO,GAAOxzT,EAAM6T,OAERhkB,EAAI,EAAGA,EAHE,IAGeA,IAK7B04B,GAAa2oB,EAAa,KAD1BmiR,EAAgBzkS,GAHhBtJ,EAASzR,EAAMhkB,EAAI2jU,EACVzzT,KAAKqD,MAAMkiB,EAASwtS,IAASxtS,EAASwtS,IAAS,EAAIG,EAAUA,KACjEA,EAAUlzT,KAAKQ,KAAK,EAAIR,KAAKkR,KACQ43S,EAAW0K,EAAc9gT,EAAOjH,MAAOiH,EAAOnH,MAAOmH,EAAO8Q,MAAMsG,sBAC5D,EAAI,IAAOwpS,EAAe,EAAI,IAC9EniR,EAAa,KAEjBoiR,EAAmB7gT,EAAO8Q,MAAME,SAASyF,SAAS,IAAIC,GAAW1W,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAQ,UAAW,cAAe,EAAG8M,EAAO8Q,MAAM6F,WAAWlI,SAAUzO,EAAOtR,QAASsR,EAAO+0C,UAAWj/B,KACvMnwB,MAAMC,WAAcoa,EAAO6vB,UAAU3O,QAAUlhB,EAAO8Q,MAAMs9M,cACzE,SAAW,UACfpuN,EAAO+tN,cAAcnrO,YAAYi+T,IAOrCZ,EAAgB3jU,UAAU+xO,YAAc,SAAUruN,GAC9C2tE,EAAOrxF,UAAU+xO,YAAY9rO,KAAKtB,KAAM+e,GACpCA,EAAOkgT,wBACPjmS,GAAgBja,EAAO+tN,cAAc37F,iBAAkBpyH,EAAO6vB,UAAU1jC,SAAU,IAAK,WAM/F8zT,EAAgB3jU,UAAU0kC,cAAgB,WACtC,MAAO,mBAUXi/R,EAAgB3jU,UAAUiX,QAAU,SAAUud,KAKvCmvS,GACTzJ,IChJE1pO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexC6zO,GAAkC,SAAUrzO,GAE5C,SAASqzO,IACL,OAAkB,OAAXrzO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAqF/D,OAvFA6rF,GAAUk0O,EAAkBrzO,GAS5BqzO,EAAiB1kU,UAAUsyG,OAAS,SAAU5uF,EAAQjH,EAAOF,EAAO6b,GAkBhE,IAAK,IAZDorS,EACAC,EACAC,EACAiB,EACAC,EAGA9sS,EACA05F,EAbAqmM,EAAa,KACbr+R,EAAY,GACZ2oB,EAAa,KACb0iR,EAAc,KAOdjpS,EAASj3B,KAAKq9T,kBAAkBt+S,GAChC+sN,EAAe/sN,EAAOkY,OAAOx6B,OAG7Bw3T,EAA+C,eAA/Bl1S,EAAO8Q,MAAMk3M,cAAiCvzM,GAAqB0H,GACnFsgQ,EAAwC,eAA/Bz8Q,EAAO8Q,MAAMk3M,cAAiChoN,EAAOkY,OAAO,GAAG8C,OACxE1tB,KAAKC,IAAIyS,EAAOnH,MAAMoa,aAAa7R,IAAK,GACnChkB,EAAI,EAAGA,EAAI2vO,EAAc3vO,KAC9Bg3B,EAAQpU,EAAOkY,OAAO96B,IAChBsrO,mBACNt0M,EAAM2zM,WACNj6G,EAAW7sH,KAAKu9T,iBAAiBtmS,EAAQ9D,EAAMlhB,MAAQ,EAAG8M,GACtDoU,EAAM2D,SACNvF,GAAY0F,EAAO41F,GAAW15F,EAAO8D,EAAOj3B,KAAKy9T,aAAaxmS,EAAQ9D,EAAMlhB,MAAQ,EAAG8M,IAAUA,IAC7Fm0S,GACA8M,EAAajhT,EAAOyrN,WAAW39G,GAAUpvE,cACzCwiR,EAAalhT,EAAOyrN,WAAW39G,GAAUnvE,cACnCu2Q,EAAcf,EAAWthS,OAAQshS,EAAWn5R,OAAQjiB,EAAOF,EAAO6b,EAAY1U,GACpF8/S,EAAM5K,EAAc9gS,EAAMvB,OAAQuB,EAAM4G,OAAQjiB,EAAOF,EAAO6b,EAAY1U,GAC1E+/S,EAAO7K,EAAc+L,EAAWjzT,EAAGizT,EAAWhzT,EAAG8K,EAAOF,EAAO6b,EAAY1U,GAC3EggT,EAAO9K,EAAcgM,EAAWlzT,EAAGkzT,EAAWjzT,EAAG8K,EAAOF,EAAO6b,EAAY1U,GAC3E8V,EAAYA,EAAUra,OAAO,KAAOskT,EAAK/xT,EAAI,IACvC+xT,EAAK9xT,EAAI,IAAM+xT,EAAKhyT,EAAI,IAAMgyT,EAAK/xT,EAAI,IAAM6xT,EAAI9xT,EAAI,IAAM8xT,EAAI7xT,EAAI,OAKzE6nB,GAAc,MADd2oB,EAAay2Q,EAAc9gS,EAAMvB,OAAQ4pQ,EAAQ1jR,EAAOF,EAAO6b,EAAY1U,IAC3ChS,EAAI,IAAMywC,EAAWxwC,EAAI,IAGzD6nB,GAAc,MADdqrS,EAAcjM,EAAc9gS,EAAMvB,OAAQuB,EAAM4G,OAAQjiB,EAAOF,EAAO6b,EAAY1U,IACjDhS,EAAI,IAAMmzT,EAAYlzT,EAAI,KAE/DhN,KAAKwzT,mBAAmBrgS,EAAOpU,EAAQ0U,EAAYwgS,GACnDf,EAAa//R,IAGb+/R,EAAa,KACb//R,EAAMs0M,qBAEJtrO,EAAI,EAAI2vO,IAAiB/sN,EAAOkY,OAAO96B,EAAI,GAAG26B,SAAY36B,IAAM2vO,EAAe,IAC9E+yF,GAAOrhR,IACVA,EAAay2Q,EAAc9gS,EAAMvB,OAAQ4pQ,EAAQ1jR,EAAOF,EAAO6b,EAAY1U,GAC3E8V,EAAYA,EAAUra,OAAO,KAAQgjC,EAAY,EAAI,IAAOA,EAAY,IAGhFx9C,KAAKqzT,eAAe,IAAI59R,GAAW1W,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAO8M,EAAO8qD,SAAU9qD,EAAOkmB,OAAOjvB,MAAO+I,EAAOkmB,OAAOpP,MAAO9W,EAAOtR,QAASsR,EAAO+0C,UAAWj/B,GAAY9V,EAAQ,IACzM/e,KAAK+uO,aAAahwN,IAKtBghT,EAAiB1kU,UAAU0kC,cAAgB,WAIvC,MAAO,oBAOXggS,EAAiB1kU,UAAUiX,QAAU,SAAUud,KAKxCkwS,GACT5C,ICxGEtxO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAiBxCi0O,GAAmC,SAAUzzO,GAE7C,SAASyzO,IACL,OAAkB,OAAXzzO,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA6H/D,OA/HA6rF,GAAUs0O,EAAmBzzO,GAQ7ByzO,EAAkB9kU,UAAU0tT,qBAAuB,SAAUlB,EAAWh4R,GACpEg4R,EAAUn0E,gBACV,IAAI0sF,EAAa,IAAI93F,GAAOu/E,EAAW,mBAAoB,GAC3D7nT,KAAKqgU,oBAAoBD,EAAYvY,EAAW,aAAcA,EAAUzpR,KAAMypR,EAAU7xS,MAAO6Z,IAMnGswS,EAAkB9kU,UAAUglU,oBAAsB,SAAUthT,EAAQ8oS,EAAW9wR,EAAMqH,EAAMpoB,EAAO6Z,GAC9F9Q,EAAOgY,KAAOA,EACdhY,EAAOspN,MAAQ,IACftpN,EAAOyT,MAAQ,IACfzT,EAAOqf,KAAOA,GAAQ,UACtBrf,EAAO+0C,UAAY+zP,EAAU/zP,UAC7B/0C,EAAO/I,MAAQA,EACf+I,EAAOiY,UAAY6wR,EAAU7wR,UAC7BjY,EAAO6vB,UAAYi5Q,EAAUj5Q,UAC7B7vB,EAAOiqS,UAAYnB,EAAUmB,UAC7BjqS,EAAO6tN,gBAAkBi7E,EAAUj7E,gBACnC7tN,EAAOkY,UACPlY,EAAOwvN,eAAgB,EACvBxvN,EAAO8qD,SAAW9qD,EAAOqf,KACzBrf,EAAOosL,SAAW,YAClBpsL,EAAO9M,MAAQ41S,EAAU51S,MACzB8M,EAAO8Q,MAAQA,EACf9Q,EAAOqY,KAAOg1C,EAAAA,EACdrtD,EAAOsY,MAAQ+0C,EAAAA,EACfrtD,EAAOo4M,KAAO/qJ,EAAAA,EACdrtD,EAAOq4M,MAAQhrJ,EAAAA,EACfrtD,EAAOooN,SACPpoN,EAAOwqN,SACPxqN,EAAOknN,OAAOnvM,SAAU,EACxB+wR,EAAUn0E,aAAalvO,KAAKua,IAMhCohT,EAAkB9kU,UAAUysT,wBAA0B,SAAUj4R,EAAOg4R,EAAW51S,IAC1E41S,EAAU4B,YAAc5B,EAAU/iP,aAClC5uC,GAAa2xR,EAAUn0E,aAAa,IAExC,IAAI3/M,EAAW,IAAIwB,GAAK,EAAG,EAAG,EAAG,IAC7BsyR,EAAU4B,YAAc5B,EAAU/iP,cAClC/wC,EAAW8zR,EAAUn0E,aAAa,GAAG3/M,UAGzC,IAAI64M,EAAkB/8M,EAAME,SAASsrF,aAAa,IAAI2hH,GAAWntM,EAAM7uB,QAAQsC,GAAK,2BAA6B2O,EAAO,eAAiB+D,MAAO,EAAG6f,MAAO,QAAU,GAChK9oB,EAAG,EAAGC,EAAG,EAAGgJ,MAAO+d,EAAS/d,MAC5BD,OAAQge,EAAShe,UAGrB8xS,EAAUyY,iBAAmBzwS,EAAME,SAAS+9C,aACxCxqE,GAAMusB,EAAM7uB,QAAQsC,GAAK,iBAAmB2O,EAC5C5E,UAAa,aAAe0mB,EAAShnB,EAAI,IAAMgnB,EAAS/mB,EAAI,IAC5D+/N,YAAa,QAAUl9M,EAAM7uB,QAAQsC,GAAK,2BAA6B2O,EAAQ,MAEnF41S,EAAUyY,iBAAiB3+T,YAAYirO,GAEvC,IAAK,IAAIxuO,EAAK,EAAGyE,EAAKglT,EAAUn0E,aAAct1O,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAChE,IAAI2gB,EAASlc,EAAGzE,GAChB2gB,EAAO6tN,gBAAkBA,EACzB,IAAI5rO,EAAU+d,EAAO8Q,MAAME,SAAS+9C,aAChCxqE,GAAMyb,EAAO8Q,MAAM7uB,QAAQsC,GAAK,cAC5BukT,EAAU51S,MAAQ,IAAM8M,EAAOgY,KAAO,WAE9C8wR,EAAUyY,iBAAiB3+T,YAAYX,GACvC+d,EAAO+tN,cAAgB9rO,EAE3B6uB,EAAMw3R,kBAAkB1lT,YAAYkmT,EAAUyY,mBAElDH,EAAkB9kU,UAAUklU,aAAe,SAAUxzT,EAAGC,EAAGgiC,EAAajwB,EAAQ9M,EAAO41S,QACjE,IAAdA,IAAwBA,EAAY,MACxC,IAAI10R,EAAQ,IAAIq0M,GAqBhB,OApBAr0M,EAAMpmB,EAAIA,EACVomB,EAAMnmB,EAAIA,EACVmmB,EAAMvB,OAASod,EAAYpd,OAC3BuB,EAAM0C,MAAQ9W,EAAOqf,KACrBjL,EAAMlhB,MAAQA,EACdkhB,EAAM4G,OAAS/sB,EACfmmB,EAAM2D,SAAU,EAChB/X,EAAOqY,KAAO/qB,KAAK8T,IAAIpB,EAAOqY,KAAMjE,EAAMvB,QAC1C7S,EAAOo4M,KAAO9qN,KAAK8T,IAAIpB,EAAOo4M,KAAMhkM,EAAM4G,QAC1Chb,EAAOsY,KAAOhrB,KAAKC,IAAIyS,EAAOsY,KAAMlE,EAAMvB,QAC1C7S,EAAOq4M,KAAO/qN,KAAKC,IAAIyS,EAAOq4M,KAAMjkM,EAAM4G,QAC1Chb,EAAOooN,MAAM3iO,KAAK2uB,EAAMvB,QACpBi2R,GAAgC,SAAnBA,EAAUnhT,MAAmC,WAAhBqY,EAAOrY,OAC7CysB,EAAMnmB,GAAK,EACXmmB,EAAM0C,MAAQgyR,EAAU2Y,kBAGxBrtS,EAAM0C,MAAQgyR,EAAU4Y,mBAGzBttS,GAEXgtS,EAAkB9kU,UAAUqlU,cAAgB,SAAU3zT,EAAGkvB,EAAMC,EAAK8S,EAAajwB,EAAQ9M,EAAO41S,QAC1E,IAAdA,IAAwBA,EAAY,MACxC,IAAI10R,EAAQ,IAAIq0M,GAShB,OARAr0M,EAAMpmB,EAAIA,EACVomB,EAAM8I,KAAOA,EACb9I,EAAM+I,IAAMA,EACZ/I,EAAMvB,OAASod,EAAYpd,OAC3BuB,EAAM0C,MAAQ9W,EAAOqf,KACrBjL,EAAMlhB,MAAQA,EACdkhB,EAAM2D,SAAU,EAChB/X,EAAOooN,MAAM3iO,KAAK2uB,EAAMvB,QACjBuB,GAEXgtS,EAAkB9kU,UAAUslU,eAAiB,SAAU1pS,EAAQ4wR,EAAW9oS,QACvD,IAAXA,IAAqBA,EAAS,MAC7BA,EAIDA,EAAOkY,OAASA,EAHhB4wR,EAAUn0E,aAAa,GAAGz8M,OAASA,GAMpCkpS,GACTjO,IClJErmO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexC00O,GAA8B,SAAUl0O,GAExC,SAASk0O,IACL,OAAkB,OAAXl0O,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuD/D,OAzDA6rF,GAAU+0O,EAAcl0O,GAQxBk0O,EAAavlU,UAAUwsO,eAAiB,SAAUggF,EAAWh4R,GACzD,IAAIgxS,KACA5pS,EAAS4wR,EAAU5wR,OACvB,GAAIA,GAAUA,EAAOx6B,OAAQ,CAEzB,IAAIqkU,EAAY7pS,EACZinC,EAAQ9nC,GAAiByxR,EAAU3pP,OAEnC6iQ,EAAelZ,EAAUn0E,aAAa,GAC1C,GAAIotF,GAAaA,EAAUrkU,QAAUqkU,EAAUrkU,QAAUorT,EAAUmZ,OAAQ,CAIvE,IAAK,IAFDx8J,EAAU,EACVryI,EAAM,EACDh2B,EAAI,EAAGA,EAAI0rT,EAAUmZ,OAAQ7kU,IAClCg2B,GAAO2uS,EAAU3kU,GAAG+hE,GAExBsmG,EAAUryI,EAAM01R,EAAUmZ,OAC1BH,EAAUr8T,KAAKxE,KAAKugU,aAAaO,EAAUjZ,EAAUmZ,OAAS,GAAS,EAAGx8J,EAASs8J,EAAUjZ,EAAUmZ,OAAS,GAAID,EAAcF,EAAUpkU,SAE5I,IADA,IAAIwV,EAAQ41S,EAAUmZ,OACf/uT,EAAQ6uT,EAAUrkU,QACrB01B,GAAO2uS,EAAU7uT,EAAQ41S,EAAUmZ,QAAQ9iQ,GAE3CsmG,GADAryI,GAAO2uS,EAAU7uT,GAAOisD,IACR2pP,EAAUmZ,OAC1BH,EAAUr8T,KAAKxE,KAAKugU,aAAaO,EAAU7uT,GAAa,EAAGuyJ,EAASs8J,EAAU7uT,GAAQ8uT,EAAcF,EAAUpkU,SAC9GwV,IAGRjS,KAAK2gU,eAAeE,EAAWhZ,KAQvC+Y,EAAavlU,UAAUiX,QAAU,SAAUud,KAQ3C+wS,EAAavlU,UAAU0kC,cAAgB,WAInC,MAAO,gBAEJ6gS,GACTT,IC1EEt0O,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexC+0O,GAA8B,SAAUv0O,GAExC,SAASu0O,IACL,OAAkB,OAAXv0O,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAsD/D,OAxDA6rF,GAAUo1O,EAAcv0O,GAQxBu0O,EAAa5lU,UAAUwsO,eAAiB,SAAUggF,EAAWh4R,GACzD,IAAIquC,EAAQ9nC,GAAiByxR,EAAU3pP,OAEnCgjQ,KACAH,EAAelZ,EAAUn0E,aAAa,GAEtCotF,EAAYjZ,EAAU5wR,OAC1B,GAAI6pS,GAAaA,EAAUrkU,QAAUqkU,EAAUrkU,QAAUorT,EAAUmZ,OAAQ,CAMvE,IAAK,IAJD7uS,EAAM,EACNqyI,EAAU,EAEVn+I,EAAK,GAAKwhS,EAAUmZ,OAAS,GACxB7kU,EAAI,EAAGA,EAAI0rT,EAAUmZ,OAAQ7kU,IAClCg2B,GAAO2uS,EAAU3kU,GAAG+hE,GAExBsmG,EAAUryI,EAAM01R,EAAUmZ,OAC1BE,EAAU18T,KAAKxE,KAAKugU,aAAaO,EAAUjZ,EAAUmZ,OAAS,GAAS,EAAGx8J,EAASs8J,EAAUjZ,EAAUmZ,OAAS,GAAID,EAAcG,EAAUzkU,SAE5I,IADA,IAAIwV,EAAQ41S,EAAUmZ,OACf/uT,EAAQ6uT,EAAUrkU,QAAQ,CAE7B,IAAI0kU,EAAcD,EAAUjvT,EAAQ41S,EAAUmZ,QAAQD,EAAavuS,OAC/DuH,GAAU+mS,EAAU7uT,GAAOisD,GAASijQ,GAAe96S,EAAI86S,EAC3DD,EAAU18T,KAAKxE,KAAKugU,aAAaO,EAAU7uT,GAAa,EAAG8nB,EAAQ+mS,EAAU7uT,GAAQ8uT,EAAcG,EAAUzkU,SAC7GwV,KAGRjS,KAAK2gU,eAAeO,EAAWrZ,IAOnCoZ,EAAa5lU,UAAUiX,QAAU,SAAUud,KAQ3CoxS,EAAa5lU,UAAU0kC,cAAgB,WAInC,MAAO,gBAEJkhS,GACTd,ICzEEt0O,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCk1O,GAA8B,SAAU10O,GAExC,SAAS00O,IACL,OAAkB,OAAX10O,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAkF/D,OApFA6rF,GAAUu1O,EAAc10O,GAQxB00O,EAAa/lU,UAAUwsO,eAAiB,SAAUggF,EAAWh4R,GACzD,IAAIwxS,KACAnjQ,EAAQ9nC,GAAiByxR,EAAU3pP,OAInC4iQ,GAFejZ,EAAUn0E,aAAa,GAE1Bm0E,EAAU5wR,QAC1B,GAAI6pS,GAAaA,EAAUrkU,QAAUqkU,EAAUrkU,QAAUorT,EAAUmZ,OAAQ,CACvE,IAAIM,EAAiBzZ,EAAUn0E,aAAa,GAExC6tF,EAAc1Z,EAAU5wR,OAC5B,GAAIsqS,EAAY9kU,QAAU8kU,EAAY9kU,QAAUorT,EAAUmZ,OAAQ,CAEhDnZ,EAAUmZ,OAWxB,IAXA,IAGI7uS,EAAM,EAGNqvS,KAEAvvT,EAAQ,EACRgpB,EAAWsmS,EAAY9kU,OACvBukU,EAASnZ,EAAUmZ,OAChB/lS,GAAY+lS,GAAQ,CACvB7uS,EAAM,EAEN,IAAK,IAAI1O,EADTxR,EAAQsvT,EAAY9kU,OAASw+B,EACTxX,EAAIxR,EAAQ+uT,EAAQv9S,IACpC0O,GAAYovS,EAAY99S,GAAGy6C,GAE/B/rC,GAAY6uS,EACZQ,EAAUh9T,KAAK2tB,GACf8I,IAGJ,IAAK,IAAIwmS,EAAM,EAAGA,EAAMT,EAAS,EAAGS,IAAO,CACvCtvS,EAAM,EACN,IAAS1O,EAAI,EAAGA,EAAIg+S,EAAM,EAAGh+S,IACzB0O,GAAYovS,EAAY99S,GAAGy6C,GAE/B/rC,GAAasvS,EAAM,EACnBD,EAAU/4S,OAAOg5S,EAAK,EAAGtvS,GAG7B,IADAlgB,EAAQ41S,EAAUmZ,OACX/uT,GAASuvT,EAAU/kU,QAAQ,CAC9B01B,EAAM,EACN,IAAS1O,EAAIxR,EAAQ41S,EAAUmZ,OAAQv9S,EAAIxR,EAAOwR,IAC9C0O,GAAYqvS,EAAU/9S,GAE1B0O,GAAY01R,EAAUmZ,OACtBK,EAAU78T,KAAKxE,KAAKugU,aAAagB,EAAYtvT,EAAQ,GAAS,EAAGkgB,EAAKovS,EAAYtvT,EAAQ,GAAIqvT,EAAgBD,EAAU5kU,SACxHwV,MAIZjS,KAAK2gU,eAAeU,EAAWxZ,IAOnCuZ,EAAa/lU,UAAUiX,QAAU,SAAUud,KAQ3CuxS,EAAa/lU,UAAU0kC,cAAgB,WAInC,MAAO,gBAEJqhS,GACTjB,ICrGEt0O,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAcxCw1O,GAAmD,SAAUh1O,GAE7D,SAASg1O,IACL,OAAkB,OAAXh1O,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAoE/D,OAtEA6rF,GAAU61O,EAAmCh1O,GAQ7Cg1O,EAAkCrmU,UAAUwsO,eAAiB,SAAUggF,EAAWh4R,GAC3Dg4R,EAAU8Z,aAA7B,IACIC,KACAd,EAAYjZ,EAAU5wR,OACtB6pS,EAAUrkU,OAAS,GAAKqkU,EAAUrkU,OAASorT,EAAUmZ,SACrDY,EAAW5hU,KAAK6hU,kBAAkBha,EAAWiZ,IAEjD9gU,KAAK2gU,eAAeiB,EAAU/Z,IAMlC6Z,EAAkCrmU,UAAUwmU,kBAAoB,SAAUha,EAAWiZ,GACjF,IAAIznS,KACAlH,EAAM,EACNh2B,EAAI,EAEJ8/B,EAAO,EACPC,EAAM,EACNj6B,EAAQ,EACR8+T,EAAelZ,EAAUn0E,aAAa,GAC1C,IAAKv3O,EAAI,EAAGA,EAAI2kU,EAAUrkU,OAAQN,IAC9B8/B,EAAOrF,OAAOkqS,EAAU3kU,GAAG8/B,MAC3BC,EAAMtF,OAAOkqS,EAAU3kU,GAAG+/B,KAW1B/J,KAVAlwB,EAAQ20B,OAAOkqS,EAAU3kU,GAAG8F,QAMVi6B,GAAQD,EAAOh6B,KAAWg6B,EAAOC,GAI/BtF,OAAOkqS,EAAU3kU,GAAG8sO,QAIxC5vM,EAAKl9B,GAAK6D,KAAKugU,aAAaO,EAAU3kU,GAAG4Q,EAAGolB,EAAK2uS,EAAU3kU,GAAI4kU,EAAc1nS,EAAK58B,QAEtF,OAAO48B,GAOXqoS,EAAkCrmU,UAAUiX,QAAU,SAAUud,KAQhE6xS,EAAkCrmU,UAAU0kC,cAAgB,WAIxD,MAAO,qCAEJ2hS,GACTvB,ICtFEt0O,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAcxC41O,GAA8B,SAAUp1O,GAExC,SAASo1O,IACL,OAAkB,OAAXp1O,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAmF/D,OArFA6rF,GAAUi2O,EAAcp1O,GAQxBo1O,EAAazmU,UAAUwsO,eAAiB,SAAUggF,EAAWh4R,GACtCg4R,EAAU8Z,aAA7B,IAEIb,EAAYjZ,EAAU5wR,OACtB6pS,EAAUrkU,OAAS,GAAKqkU,EAAUrkU,OAASorT,EAAUmZ,QACrDhhU,KAAK+hU,mBAAmBla,EAAWiZ,IAO3CgB,EAAazmU,UAAU0mU,mBAAqB,SAAUla,EAAWiZ,GAY7D,IAAK,IAXDt8J,EAAU,EACVw9J,EAAU,EACVC,EAAY,EACZC,EAAW,EACXC,EAAY,EACZlrS,KACAoC,KACA2nS,EAASnZ,EAAUmZ,OACnB7uS,EAAM,EAEN4uS,EAAelZ,EAAUn0E,aAAa,GACjCv3O,EAAI,EAAGA,EAAI2kU,EAAUrkU,OAAQN,IAMlC6lU,EAAUprS,OAAOkqS,EAAU3kU,GAAG8/B,MAAQrF,OAAOkqS,EAAU3kU,GAAG+/B,KACtD//B,EAAI,IAEJ8lU,EAAY51T,KAAKE,IAAIqqB,OAAOkqS,EAAU3kU,GAAG8/B,MAAQrF,OAAOkqS,EAAU3kU,EAAI,GAAG8F,QACzEigU,EAAW71T,KAAKE,IAAIqqB,OAAOkqS,EAAU3kU,GAAG+/B,KAAOtF,OAAOkqS,EAAU3kU,EAAI,GAAG8F,SAM3EkwB,GADAgwS,EAAY91T,KAAKC,IAAI01T,EAASC,EAAWC,GAKrC/lU,GAAK6kU,GACLx8J,GAAW5tI,OAAOyC,EAAKl9B,EAAI,GAAI,IAAM6kU,EAAS,GAAKmB,GAAanB,EAChE/pS,EAAOzyB,KAAKxE,KAAKugU,aAAaO,EAAU3kU,GAAG4Q,EAAGy3J,EAASs8J,EAAU3kU,GAAI4kU,EAAc9pS,EAAOx6B,WAG1F+nK,EAAUryI,EAAM6uS,EACZ7kU,IAAM6kU,EAAS,GACf/pS,EAAOzyB,KAAKxE,KAAKugU,aAAaO,EAAU3kU,GAAG4Q,EAAGy3J,EAASs8J,EAAU3kU,GAAI4kU,EAAc9pS,EAAOx6B,UAGlG48B,EAAKl9B,IAAO4Q,EAAG+zT,EAAU3kU,GAAG4Q,EAAGC,EAAGw3J,GAEtCxkK,KAAK2gU,eAAe1pS,EAAQ4wR,IAOhCia,EAAazmU,UAAUiX,QAAU,SAAUud,KAQ3CiyS,EAAazmU,UAAU0kC,cAAgB,WAInC,MAAO,gBAEJ+hS,GACT3B,ICrGEt0O,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCk2O,GAAmC,SAAU11O,GAE7C,SAAS01O,IACL,OAAkB,OAAX11O,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAsD/D,OAxDA6rF,GAAUu2O,EAAmB11O,GAQ7B01O,EAAkB/mU,UAAU0tT,qBAAuB,SAAUlB,EAAWh4R,GACpE68D,EAAOrxF,UAAU0tT,qBAAqBznT,KAAKtB,KAAM6nT,EAAWh4R,GAC5D,IAAIwyS,EAAY,IAAI/5F,GAAOu/E,EAAW,mBAAoB,GAC1Dn7N,EAAOrxF,UAAUglU,oBAAoB/+T,KAAKtB,KAAMqiU,EAAWxa,EAAW,YAAaA,EAAUwa,UAAUxsS,MAAOgyR,EAAUwa,UAAUrsT,MAAO6Z,IAM7IuyS,EAAkB/mU,UAAUwsO,eAAiB,SAAUggF,EAAWh4R,GAC9D,IAAIyyS,KACAC,KACAzB,EAAYjZ,EAAU5wR,OAC1B,GAAI6pS,GAAaA,EAAUrkU,OAAQ,CAC/B,IAAI+lU,EAAc3a,EAAUn0E,aAAa,GACrCqtF,EAAelZ,EAAUn0E,aAAa,GACtCz4M,EAAW4sR,EAAUmZ,OACzB,GAAIF,EAAUrkU,QAAUorT,EAAUmZ,OAC9B,IAAK,IAAI7kU,EAAI,EAAGA,EAAI2kU,EAAUrkU,OAAQN,IAClCmmU,EAAgB99T,KAAKxE,KAAKugU,aAAaO,EAAU3kU,GAAG4Q,EAAG,IAAK+zT,EAAU3kU,GAAIqmU,EAAaF,EAAgB7lU,SACjGN,EAAI8+B,GACNsnS,EAAiB/9T,KAAKxE,KAAKugU,aAAaO,EAAU3kU,GAAG4Q,EAAI6pB,OAAOkqS,EAAU3kU,GAAG8F,OAAS20B,OAAOkqS,EAAU3kU,EAAI8+B,GAAUh5B,OAAS,IAAM6+T,EAAU3kU,GAAI4kU,EAAcwB,EAAiB9lU,SAI7LuD,KAAK2gU,eAAe4B,EAAkB1a,EAAWA,EAAUn0E,aAAa,IACxE1zO,KAAK2gU,eAAe2B,EAAiBza,EAAWA,EAAUn0E,aAAa,MAQ/E0uF,EAAkB/mU,UAAUiX,QAAU,SAAUud,KAQhDuyS,EAAkB/mU,UAAU0kC,cAAgB,WAIxC,MAAO,qBAEJqiS,GACTjC,ICzEEt0O,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCu2O,GAA8B,SAAU/1O,GAExC,SAAS+1O,IACL,OAAkB,OAAX/1O,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA0F/D,OA5FA6rF,GAAU42O,EAAc/1O,GAQxB+1O,EAAapnU,UAAU0tT,qBAAuB,SAAUlB,EAAWh4R,GAE/D,GADA68D,EAAOrxF,UAAU0tT,qBAAqBznT,KAAKtB,KAAM6nT,EAAWh4R,GACxDg4R,EAAU6a,UAAW,CACrB,IAAIC,EAAY,IAAIr6F,GAAOu/E,EAAW,mBAAoB,GAC1Dn7N,EAAOrxF,UAAUglU,oBAAoB/+T,KAAKtB,KAAM2iU,EAAW9a,EAAW,YAAaA,EAAU8a,UAAU9sS,MAAOgyR,EAAU8a,UAAU3sT,MAAO6Z,GACzI,IAAIwyS,EAAY,IAAI/5F,GAAOu/E,EAAW,mBAAoB,GAC1Dn7N,EAAOrxF,UAAUglU,oBAAoB/+T,KAAKtB,KAAMqiU,EAAWxa,EAAW,YAAaA,EAAUwa,UAAUxsS,MAAOgyR,EAAUwa,UAAUrsT,MAAO6Z,KAOjJ4yS,EAAapnU,UAAUwsO,eAAiB,SAAUggF,EAAWh4R,GACzD,IAAI0yS,KACAK,KACAN,KACAvB,EAAelZ,EAAUn0E,aAAa,GAEtCotF,EAAYjZ,EAAU5wR,OAC1B,GAAI6pS,EAAUrkU,QAAUqkU,EAAUrkU,QAAUorT,EAAUmZ,OAAQ,CAE1D,GAAInZ,EAAU6a,UACV,IAAK,IAAIvmU,EAAI,EAAGA,EAAI2kU,EAAUrkU,OAAQN,IAClCmmU,EAAgB99T,KAAKxE,KAAKugU,aAAaO,EAAU3kU,GAAG4Q,EAAG86S,EAAUgb,WAAY/B,EAAU3kU,GAAI0rT,EAAUn0E,aAAa,GAAI4uF,EAAgB7lU,SACtImmU,EAAgBp+T,KAAKxE,KAAKugU,aAAaO,EAAU3kU,GAAG4Q,EAAG86S,EAAUib,SAAUhC,EAAU3kU,GAAI0rT,EAAUn0E,aAAa,GAAIkvF,EAAgBnmU,SAOvI,IAHDsmU,EAAYnsS,OAAOkqS,EAAU,GAAG7+T,OAChC+gU,EAAO,EACPC,EAAO,EACX,IAAS9mU,EAAI,EAAGA,GAAK0rT,EAAUmZ,OAAQ7kU,IAAK,CACxC,IAAImgU,EAAU1lS,OAAOkqS,EAAU3kU,GAAG8F,OAC9Bq6T,EAAUyG,EACVC,GAAQ1G,EAAUyG,EAGlBE,GAAQF,EAAYzG,EAExByG,EAAYzG,EAEhB0G,GAAcnb,EAAUmZ,OACxBiC,GAAcpb,EAAUmZ,OACxBuB,EAAiB/9T,KAAKxE,KAAKugU,aAAaO,EAAUjZ,EAAUmZ,QAAQj0T,EAAG,IAAO,KAAO,EAAIi2T,EAAOC,GAAQnC,EAAUjZ,EAAUmZ,QAASD,EAAcwB,EAAiB9lU,SACpK,IAAK,IAAIgnB,EAAIokS,EAAUmZ,OAAS,EAAGv9S,EAAIq9S,EAAUrkU,OAAQgnB,IAAK,CAC1D,IAAIy/S,EAAUtsS,OAAOkqS,EAAUr9S,GAAGxhB,OAC9BihU,EAAUH,GACVC,GAAQA,GAAQnb,EAAUmZ,OAAS,IAAMkC,EAAUH,IAAclb,EAAUmZ,OAC3EiC,EAAQA,GAAQpb,EAAUmZ,OAAS,GAAMnZ,EAAUmZ,QAE9CkC,EAAUH,IACfE,GAAQA,GAAQpb,EAAUmZ,OAAS,IAAM+B,EAAYG,IAAYrb,EAAUmZ,OAC3EgC,EAAQA,GAAQnb,EAAUmZ,OAAS,GAAMnZ,EAAUmZ,QAEvD+B,EAAYG,EACZX,EAAiB/9T,KAAKxE,KAAKugU,aAAaO,EAAUr9S,GAAG1W,EAAG,IAAO,KAAO,EAAIi2T,EAAOC,GAAQnC,EAAUr9S,GAAIs9S,EAAcwB,EAAiB9lU,UAG9IuD,KAAK2gU,eAAe4B,EAAkB1a,EAAWA,EAAUn0E,aAAa,IACpEm0E,EAAU6a,YACV1iU,KAAK2gU,eAAe2B,EAAiBza,EAAWA,EAAUn0E,aAAa,IACvE1zO,KAAK2gU,eAAeiC,EAAiB/a,EAAWA,EAAUn0E,aAAa,MAQ/E+uF,EAAapnU,UAAUiX,QAAU,SAAUud,KAQ3C4yS,EAAapnU,UAAU0kC,cAAgB,WAInC,MAAO,gBAEJ0iS,GACTtC,IC7GEt0O,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCi3O,GAAqC,SAAUz2O,GAE/C,SAASy2O,IACL,OAAkB,OAAXz2O,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAkJ/D,OApJA6rF,GAAUs3O,EAAqBz2O,GAQ/By2O,EAAoB9nU,UAAU0tT,qBAAuB,SAAUlB,EAAWh4R,GACtE68D,EAAOrxF,UAAU0tT,qBAAqBznT,KAAKtB,KAAM6nT,EAAWh4R,GAC5D,IAAIuzS,EAAa,IAAI96F,GAAOu/E,EAAW,mBAAoB,GAE3D,GADA7nT,KAAKqgU,oBAAoB+C,EAAYvb,EAAW,aAAcA,EAAUub,WAAWvtS,MAAOgyR,EAAUub,WAAWptT,MAAO6Z,GAClHg4R,EAAU6a,UAAW,CACrB,IAAIF,EAAc,IAAIl6F,GAAOu/E,EAAW,mBAAoB,GAC5D7nT,KAAKqgU,oBAAoBmC,EAAa3a,EAAW,YAAaA,EAAUwa,UAAUxsS,MAAOgyR,EAAUwa,UAAUrsT,MAAO6Z,GACpH,IAAIwzS,EAAc,IAAI/6F,GAAOu/E,EAAW,mBAAoB,GAC5D7nT,KAAKqgU,oBAAoBgD,EAAaxb,EAAW,YAAaA,EAAU8a,UAAU9sS,MAAOgyR,EAAU8a,UAAU3sT,MAAO6Z,KAO5HszS,EAAoB9nU,UAAUwsO,eAAiB,SAAUggF,EAAWh4R,GAChE,IAAI0yS,KACAD,KACAM,KACAU,KACA/mU,KAIAukU,GAHejZ,EAAU8Z,aAGb9Z,EAAU5wR,QAC1B,GAAI6pS,EAAUrkU,QAAUqkU,EAAUrkU,QAAUorT,EAAUmZ,OAAQ,CAC1D,GAAInZ,EAAU6a,UACV,IAAK,IAAIvmU,EAAI,EAAGA,EAAI2kU,EAAUrkU,OAAQN,IAClCmmU,EAAgB99T,KAAKxE,KAAKugU,aAAaO,EAAU3kU,GAAG4Q,EAAG86S,EAAUgb,WAAY/B,EAAU3kU,GAAI0rT,EAAUn0E,aAAa,GAAI4uF,EAAgB7lU,SACtImmU,EAAgBp+T,KAAKxE,KAAKugU,aAAaO,EAAU3kU,GAAG4Q,EAAG86S,EAAUib,SAAUhC,EAAU3kU,GAAI0rT,EAAUn0E,aAAa,GAAIkvF,EAAgBnmU,SAG5IF,EAASyD,KAAKujU,gBAAgB1b,EAAUmZ,OAAQnZ,EAAU2b,QAAS1C,EAAWjZ,EAAUn0E,aAAa,IACrG4vF,EAAmBtjU,KAAKyjU,eAAe5b,EAAUmZ,OAAQnZ,EAAU2b,QAASjnU,EAAQsrT,EAAUn0E,aAAa,IAC3G6uF,EAAmBviU,KAAKyjU,eAAe5b,EAAUmZ,OAASnZ,EAAU2b,QAAU,EAAG3b,EAAU6b,QAASnnU,EAAQsrT,EAAUn0E,aAAa,IAEvI1zO,KAAK2gU,eAAe4B,EAAkB1a,EAAWA,EAAUn0E,aAAa,IACxE1zO,KAAK2gU,eAAe2C,EAAkBzb,EAAWA,EAAUn0E,aAAa,IACpEm0E,EAAU6a,YACV1iU,KAAK2gU,eAAe2B,EAAiBza,EAAWA,EAAUn0E,aAAa,IACvE1zO,KAAK2gU,eAAeiC,EAAiB/a,EAAWA,EAAUn0E,aAAa,MAO/EyvF,EAAoB9nU,UAAUooU,eAAiB,SAAUzC,EAAQwC,EAAShnU,EAAMmlU,GAC5E,IAAIgC,KACJ,GAAInnU,EAAKC,QAAUukU,EAASwC,EAAS,CAIjC,IAAK,IAHDvkT,EAAQ+hT,GAAUwC,EAAU,GAC5BnqS,KACAjH,KACKj2B,EAAI,EAAGA,EAAIK,EAAKC,OAAQN,IAAK,CAClC,IAAIa,EAAQ45B,OAAOp6B,EAAKL,GAAG6Q,GAC3BqsB,EAAK70B,KAAKxH,GAGd,IADA,IAAIi+B,EAAW5B,EAAK58B,OACbw+B,GAAYhc,GAAO,CAEjB,IADDkT,EAAM,EACV,IAASh2B,EAAI6kU,EAAS,EAAG7kU,EAAK6kU,EAASwC,EAAU,EAAIrnU,IACjDg2B,GAAYkH,EAAKl9B,GAErBg2B,GAAYqxS,EACZpxS,EAAO5tB,KAAK2tB,EAAIhT,QAAQ,IACxBka,EAAK5Q,OAAO,EAAG,GACfwS,EAAW5B,EAAK58B,OAGf,IADDoF,EAAMod,EAAQ,EAClB,IAAS9iB,EAAI,EAAGA,EAAIK,EAAKC,OAAQN,IACvBA,EAAI0F,IACN8hU,EAAgBn/T,KAAKxE,KAAKugU,aAAa/jU,EAAKL,GAAG4Q,EAAG6pB,OAAOxE,EAAOj2B,EAAI0F,IAAOrF,EAAKL,GAAIwlU,EAAcgC,EAAgBlnU,SAClHD,EAAKL,GAAG6Q,EAAI4pB,OAAQxE,EAAOj2B,EAAI0F,KAI3C,OAAO8hU,GAMXR,EAAoB9nU,UAAUkoU,gBAAkB,SAAUvC,EAAQwC,EAAShnU,EAAMuiB,GAK7E,IAAK,IAJD6kT,KACAC,KACAC,KACAC,KACKtgT,EAAI,EAAGA,EAAIjnB,EAAKC,OAAQgnB,IAC7BmgT,EAAUngT,GAAKjnB,EAAKinB,GAAGyY,IACvB2nS,EAAWpgT,GAAKjnB,EAAKinB,GAAGwY,KACxB6nS,EAAYrgT,GAAKjnB,EAAKinB,GAAGxhB,MAE7B,GAAIzF,EAAKC,OAASukU,EAAQ,CAItB,IAAK,IAFDgD,KACAC,KACK9nU,EAAI,EAAGA,EAAI6kU,EAAS,IAAK7kU,EAC9B8nU,EAAKz/T,KAAK,GACVw/T,EAAKx/T,KAAK,GACVu/T,EAAev/T,KAAKxE,KAAKugU,aAAa/jU,EAAKL,GAAG4Q,EAAGvQ,EAAKL,GAAG8F,MAAOzF,EAAKL,GAAI4iB,EAAQglT,EAAetnU,SAEpG,IAASN,EAAI6kU,EAAS,EAAG7kU,EAAIK,EAAKC,SAAUN,EAAG,CAGtC,IAFDgkB,EAAMyW,OAAOC,UACbvqB,EAAMsqB,OAAOstS,UACjB,IAASzgT,EAAI,EAAGA,EAAIu9S,IAAUv9S,EAC1BtD,EAAM9T,KAAK8T,IAAIA,EAAKyjT,EAAUznU,EAAIsnB,IAClCnX,EAAMD,KAAKC,IAAIA,EAAKu3T,EAAW1nU,EAAIsnB,IAEvCwgT,EAAKz/T,KAAK8H,GACV03T,EAAKx/T,KAAK2b,GAEd,IAAShkB,EAAI6kU,EAAS,EAAG7kU,EAAIK,EAAKC,SAAUN,EAAG,CAC3C,IAAI48C,EAAQ,EACRpsC,EAAS,EACbosC,GAAS+qR,EAAY3nU,GAAK6nU,EAAK7nU,GAC/BwQ,GAAUs3T,EAAK9nU,GAAK6nU,EAAK7nU,GACzB4nU,EAAev/T,KAAKxE,KAAKugU,aAAa/jU,EAAKL,GAAG4Q,EAAIgsC,EAAQpsC,EAAU,IAAKnQ,EAAKL,GAAI4iB,EAAQglT,EAAetnU,UAGjH,OAAOsnU,GAOXZ,EAAoB9nU,UAAUiX,QAAU,SAAUud,KAQlDszS,EAAoB9nU,UAAU0kC,cAAgB,WAI1C,MAAO,uBAEJojS,GACThD,ICrKEt0O,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCi4O,GAAgC,SAAUz3O,GAE1C,SAASy3O,IACL,OAAkB,OAAXz3O,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAmI/D,OArIA6rF,GAAUs4O,EAAgBz3O,GAO1By3O,EAAe9oU,UAAU0tT,qBAAuB,SAAUlB,EAAWh4R,GACjEg4R,EAAUn0E,gBACV,IAAI0wF,EAAY,IAAI97F,GAAOu/E,EAAW,mBAAoB,GAC1Duc,EAAU19T,KAAO,YACW,gBAAxBmhT,EAAUwc,WAAuD,SAAxBxc,EAAUwc,WACnDrkU,KAAKqgU,oBAAoB+D,EAAWvc,EAAW,gBAAiBA,EAAUwc,UAAW,EAAGx0S,GAE5F,IAAIuwS,EAAa,IAAI93F,GAAOu/E,EAAW,mBAAoB,GAC3D7nT,KAAKqgU,oBAAoBD,EAAYvY,EAAW,aAAcA,EAAUzpR,KAAMypR,EAAU7xS,MAAO6Z,GAC/F,IAAIwyS,EAAY,IAAI/5F,GAAOu/E,EAAW,mBAAoB,GAC1D7nT,KAAKqgU,oBAAoBgC,EAAWxa,EAAW,YAAaA,EAAUwa,UAAUxsS,MAAOgyR,EAAUwa,UAAUrsT,MAAO6Z,GAClH,IAAI8yS,EAAY,IAAIr6F,GAAOu/E,EAAW,mBAAoB,GAC1D7nT,KAAKqgU,oBAAoBsC,EAAW9a,EAAW,YAAaA,EAAU8a,UAAU9sS,MAAOgyR,EAAU8a,UAAU3sT,MAAO6Z,IAMtHs0S,EAAe9oU,UAAUwsO,eAAiB,SAAUggF,EAAWh4R,GAC3D,IAAIy0S,EAAqC,gBAAxBzc,EAAUwc,WAAuD,SAAxBxc,EAAUwc,UAChE9mU,EAAQ+mU,EAAa,EAAI,EACzB/B,KACAD,KACAM,KACA2B,KACA/B,EAAc3a,EAAUn0E,aAAan2O,EAAQ,GAC7C8lU,EAAcxb,EAAUn0E,aAAan2O,EAAQ,GAC7CwjU,EAAelZ,EAAUn0E,aAAan2O,GACtCinU,EAAkBF,EAAazc,EAAUn0E,aAAa,GAAK,KAE3DotF,EAAYjZ,EAAU5wR,OAC1B,GAAI6pS,EAAUrkU,QAAUqkU,EAAUrkU,QAAUorT,EAAUmZ,OAAQ,CAS1D,IAAK,IARD7uS,EAAM,EACNsyS,EAAe,EACfC,EAAa7c,EAAU8c,kBACvBj3E,EAAQozE,EAAUrkU,OAClBw+B,EAAW5uB,KAAK4xB,MAAM4pR,EAAUmZ,QAChCH,KACA+D,KACAC,KACKn9S,EAAM,EAAGA,EAAMuT,EAAUvT,IAC9ByK,GAAOyE,OAAOkqS,EAAUp5S,GAAKzlB,OAGjC,IAAK,IADD6iU,EAAM3yS,EAAM01R,EAAUmZ,OACjBtgB,EAAM,EAAGA,EAAMhzD,EAAOgzD,IAAO,CAClC,IAAI1zS,EAAI4pB,OAAOkqS,EAAUpgB,GAAKz+S,OAC9B,GAAIy+S,GAAOzlR,EAAW,GAAKylR,EAAMhzD,EAAO,CACpC,GAAIgzD,EAAMmH,EAAUmZ,QAAU,EAAG,CAG7B8D,GADA3yS,GADWnlB,EAAI4pB,OAAOkqS,EAAUpgB,EAAMzlR,GAAUh5B,QAEnC4lT,EAAgB,OAC7BgZ,EAAUngB,GAAOokB,EACjBF,EAAWlkB,GAAOr0S,KAAKs9D,IAAI38D,EAAI83T,EAAK,GACpCL,GAAgBG,EAAWlkB,GAAOkkB,EAAWlkB,EAAMzlR,QAGnD4lS,EAAUngB,GAAOokB,EACjBF,EAAWlkB,GAAOr0S,KAAKs9D,IAAI38D,EAAI83T,EAAK,GACpCL,GAAgBG,EAAWlkB,GAE/B,IAAIvvR,EAAQ9kB,KAAKQ,KAAK43T,EAAgB5c,EAAgB,QAClDkd,EAAYlE,EAAUngB,GAAQgkB,EAAavzS,EAC3C6zS,EAAYnE,EAAUngB,GAAQgkB,EAAavzS,EAC/C,GAAIuvR,EAAM,IAAMzlR,EACZ,IAAK,IAAIgqS,EAAM,EAAGA,EAAMhqS,EAAW,EAAGgqS,IAClCJ,EAAgBI,IACZ7uT,EAAK0qT,EAAUmE,GAAKl4T,EAAGm4T,GAAMrE,EAAUngB,GACvCykB,GAAMJ,EAAW3+Q,GAAM4+Q,EAAWluS,SAAS,GAIvD+tS,EAAgBnkB,IACZtqS,EAAK0qT,EAAUpgB,GAAK3zS,EAAGm4T,GAAMrE,EAAUngB,GACvCykB,GAAMJ,EAAW3+Q,GAAM4+Q,EAAWluS,SAAS,QAI3C4pR,EAAMmH,EAAUmZ,OAAS,IACzBH,EAAUngB,GAAOokB,EACjBF,EAAWlkB,GAAOr0S,KAAKs9D,IAAI38D,EAAI83T,EAAK,GACpCL,GAAgBG,EAAWlkB,IAMvC,IAAK,IAFDvkT,GAAK,EACLsnB,GAAK,EACA4C,EAAI,EAAGA,EAAIqnO,EAAOrnO,IACvB,GAAIA,GAAM4U,EAAW,EAAI,CAIrBqnS,EAAgB99T,KAAKxE,KAAKugU,aAAaO,EAAUz6S,GAAGtZ,EAAG83T,EAAgBx+S,GAAK,GAAGy6S,EAAUz6S,GAAIm8S,EAAaF,EAAgB7lU,SAC1HmmU,EAAgBp+T,KAAKxE,KAAKugU,aAAaO,EAAUz6S,GAAGtZ,EAAG83T,EAAgBx+S,GAAK,GAAGy6S,EAAUz6S,GAAIg9S,EAAaT,EAAgBnmU,SAC1H8lU,EAAiB/9T,KAAKxE,KAAKugU,aAAaO,EAAUz6S,GAAGtZ,EAAG83T,EAAgBx+S,GAAK,GAAGy6S,EAAUz6S,GAAI06S,EAAcwB,EAAiB9lU,SACzH6nU,GACAC,EAAe//T,KAAKxE,KAAK0gU,cAAcI,EAAUz6S,GAAGtZ,EAAGu1T,IAAkBnmU,GAAG6Q,EAAG41T,IAAkBn/S,GAAGzW,EAAG8zT,EAAUz6S,GAAIm+S,EAAiBD,EAAe9nU,UAKjK6nU,GACAtkU,KAAK2gU,eAAe4D,EAAgB1c,EAAWA,EAAUn0E,aAAa,IAE1E1zO,KAAK2gU,eAAe4B,EAAkB1a,EAAWA,EAAUn0E,aAAan2O,IACxEyC,KAAK2gU,eAAe2B,EAAiBza,EAAWA,EAAUn0E,aAAan2O,EAAQ,IAC/EyC,KAAK2gU,eAAeiC,EAAiB/a,EAAWA,EAAUn0E,aAAan2O,EAAQ,KAOnF4mU,EAAe9oU,UAAUiX,QAAU,SAAUud,KAQ7Cs0S,EAAe9oU,UAAU0kC,cAAgB,WAIrC,MAAO,2BAEJokS,GACThE,ICtJEt0O,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCk5O,GAA+B,SAAU14O,GAEzC,SAAS04O,IACL,OAAkB,OAAX14O,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA2J/D,OA7JA6rF,GAAUu5O,EAAe14O,GAQzB04O,EAAc/pU,UAAU0tT,qBAAuB,SAAUlB,EAAWh4R,GAEhE,GADA68D,EAAOrxF,UAAU0tT,qBAAqBznT,KAAKtB,KAAM6nT,EAAWh4R,GACjC,SAAvBg4R,EAAUwd,UAA8C,SAAvBxd,EAAUwd,SAAqB,CAChE,IAAIC,EAAa,IAAIh9F,GAAOu/E,EAAW,mBAAoB,GAC3D7nT,KAAKqgU,oBAAoBiF,EAAYzd,EAAW,WAAYA,EAAU0d,SAAS1vS,MAAOgyR,EAAU0d,SAASvvT,MAAO6Z,GAEpH,GAA2B,cAAvBg4R,EAAUwd,UAAmD,SAAvBxd,EAAUwd,SAAqB,CACrE,IAAIG,EAAkB,IAAIl9F,GAAOu/E,EAAW,mBAAoB,GAChE2d,EAAgB9+T,KAAO,SACvB1G,KAAKqgU,oBAAoBmF,EAAiB3d,EAAW,YAAaA,EAAU2Y,kBAAmB3Y,EAAU7xS,MAAO6Z,KAOxHu1S,EAAc/pU,UAAUwsO,eAAiB,SAAUggF,EAAWh4R,GAC1D,IASI21S,EACAC,EAVAlD,KACAmD,EAAa7d,EAAU6d,WACvBC,EAAa9d,EAAU8d,WACvBj/S,EAAUmhS,EAAUmZ,OACpBvkU,EAASipU,EAAah/S,EACtBk/S,KACAC,KACA/E,EAAYjZ,EAAU5wR,OACtB8pS,EAAelZ,EAAUn0E,aAAa,GAY1C,GAT2B,cAAvBm0E,EAAUwd,SACVG,EAAkB3d,EAAUn0E,aAAa,IAGzC+xF,EAAiB5d,EAAUn0E,aAAa,GACb,SAAvBm0E,EAAUwd,WACVG,EAAkB3d,EAAUn0E,aAAa,KAG7CotF,GAAarkU,EAASqkU,EAAUrkU,QAAUkpU,GAAcD,GACxDC,EAAa,GAAMlpU,EAAS,GAAM,EAAG,CACrC,IAAIqpU,EAAW9lU,KAAK+lU,mBAAmBJ,EAAY7E,EAAW,SAC1DkF,EAAUhmU,KAAK+lU,mBAAmBL,EAAY5E,EAAW,SACzDmF,EAAajmU,KAAKkmU,aAAare,EAAWie,EAAUE,GACxDJ,EAAiB5lU,KAAKmmU,cAActe,EAAWoe,EAAYnF,EAAW2E,GAAkB1E,GACxF,IAAIqF,EAAYpmU,KAAK+lU,mBAAmBr/S,EAASk/S,EAAgB,KACjErD,EAAmBviU,KAAKqmU,gBAAgBxe,EAAWue,EAAWtF,EAAWC,GACrEyE,IACAK,EAAsB7lU,KAAKsmU,mBAAmBze,EAAWoe,EAAYG,EAAWtF,EAAW0E,IAGnGxlU,KAAK2gU,eAAe4B,EAAkB1a,EAAWA,EAAUn0E,aAAa,IACpE8xF,GACAxlU,KAAK2gU,eAAekF,EAAqBhe,EAAW2d,GAEpDC,GACAzlU,KAAK2gU,eAAeiF,EAAgB/d,EAAW4d,IAMvDL,EAAc/pU,UAAU0qU,mBAAqB,SAAU/E,EAAQF,EAAW5iQ,GAKtE,IAAK,IAJD/rC,EAAM,EACNo0S,EAAa,EACbC,KACAC,EAAc,GAAKzF,EAAS,GACvB7kU,EAAI,EAAGA,EAAI6kU,EAAQ7kU,IACxBg2B,GAAOyE,OAAOkqS,EAAU3kU,GAAG+hE,IAE/BqoQ,EAAcp0S,EAAM6uS,EACpBwF,EAAUhiU,KAAK+hU,GAEf,IAAK,IADDG,EAASH,EACJ9iT,EAAIu9S,EAAQv9S,EAAIq9S,EAAUrkU,OAAQgnB,IACvCijT,GAAU9vS,OAAOkqS,EAAUr9S,GAAGy6C,IAAUwoQ,GAAUD,EAAaC,EAC/DF,EAAUhiU,KAAKkiU,GAEnB,OAAOF,GAKXpB,EAAc/pU,UAAU8qU,cAAgB,SAAUte,EAAW8e,EAAY7F,EAAW/hT,GAIhF,IAHA,IAAI6mT,KACAgB,EAAgB/e,EAAU6d,WAAa,EACvCmB,EAAY,EACTD,EAAgB9F,EAAUrkU,QAC7BmpU,EAAephU,KAAKxE,KAAKugU,aAAaO,EAAU8F,GAAe75T,EAAG45T,EAAWE,GAAY/F,EAAU8F,GAAgB7nT,EAAQ6mT,EAAenpU,SAC1ImqU,IACAC,IAEJ,OAAOjB,GAKXR,EAAc/pU,UAAUgrU,gBAAkB,SAAUxe,EAAWif,EAAWhG,EAAW/hT,GAIjF,IAHA,IAAIgoT,EAAkBlf,EAAU6d,WAAa7d,EAAUmZ,OAAS,EAC5DgG,EAAc,EACdzE,KACGwE,EAAkBjG,EAAUrkU,QAC/B8lU,EAAiB/9T,KAAKxE,KAAKugU,aAAaO,EAAUiG,GAAiBh6T,EAAG+5T,EAAUE,GAAclG,EAAUiG,GAAkBhoT,EAAQwjT,EAAiB9lU,SACnJsqU,IACAC,IAEJ,OAAOzE,GAKX6C,EAAc/pU,UAAU6qU,aAAe,SAAUre,EAAWof,EAAUC,GAGlE,IAAK,IAFDP,KACA3nP,EAAO6oO,EAAU6d,WAAa7d,EAAU8d,WACnCxpU,EAAI,EAAGA,EAAI+qU,EAAQzqU,OAAQN,IAChCwqU,EAAWniU,KAAMyiU,EAAS9qU,EAAI6iF,GAAQkoP,EAAQ/qU,IAElD,OAAOwqU,GAKXvB,EAAc/pU,UAAUirU,mBAAqB,SAAUze,EAAW8e,EAAYG,EAAWhG,EAAW/hT,GAIhG,IAHA,IAAIooT,EAAqBtf,EAAU6d,WAAa7d,EAAUmZ,OAAS,EAC/DoG,EAAiB,EACjBvB,KACGsB,EAAqBrG,EAAUrkU,QAClCopU,EAAoBrhU,KAAKxE,KAAKugU,aAAaO,EAAUqG,GAAoBp6T,EAAG45T,EAAWS,GAAkBvf,EAAUmZ,OAAS,IAAM8F,EAAUM,GAAiBtG,EAAUqG,GAAqBpoT,EAAQ8mT,EAAoBppU,OAAQorT,IAChOsf,IACAC,IAEJ,OAAOvB,GAOXT,EAAc/pU,UAAUiX,QAAU,SAAUud,KAQ5Cu1S,EAAc/pU,UAAU0kC,cAAgB,WAIpC,MAAO,iBAEJqlS,GACTjF,ICzKEkH,GAA4B,WAC5B,SAASA,KAglBT,OA1kBAA,EAAWhsU,UAAU0tT,qBAAuB,SAAUwF,EAAW1+R,GAC7D,IAAIy3S,EAAkB,IAAIh/F,GAAOimF,EAAW,mBAAoB,GACzC,WAAnBA,EAAU7nT,MAAwC,kBAAnB6nT,EAAU7nT,KACzC4gU,EAAgB5gU,KAAO,OAGvB4gU,EAAgB5gU,KAAO,SAE3B1G,KAAKqgU,oBAAoBiH,EAAiB/Y,EAAWA,EAAU7nT,KAAM6nT,EAAUnwR,KAAMmwR,EAAUv4S,MAAO6Z,IAK1Gw3S,EAAWhsU,UAAUglU,oBAAsB,SAAUthT,EAAQwvS,EAAWx3R,EAAMqH,EAAMpoB,EAAO6Z,GACvF9Q,EAAOgY,KAAOw3R,EAAUx3R,KACxBhY,EAAOspN,MAAQ,IACftpN,EAAOyT,MAAQ,IACfzT,EAAOqf,KAAOA,GAAQ,OACtBrf,EAAO/I,MAAQA,EACf+I,EAAO6tN,gBAAkB2hF,EAAU3hF,gBACnC7tN,EAAOkY,UACPlY,EAAOwvN,cAAgBggF,EAAUhgF,cACjCxvN,EAAO9M,MAAQs8S,EAAUt8S,MACzB8M,EAAO+pS,YAAcyF,EAAUzF,YAC/B/pS,EAAO8qD,SAAW9qD,EAAOqf,KACzBrf,EAAO6vB,UAAY2/Q,EAAU3/Q,UAC7B7vB,EAAO2zN,YAAc,iBACrB3zN,EAAOknN,OAASsoF,EAAUtoF,OAC1BlnN,EAAOosL,SAAW,YAClBpsL,EAAO8Q,MAAQA,EACf9Q,EAAOqY,KAAOg1C,EAAAA,EACdrtD,EAAOsY,MAAQ+0C,EAAAA,EACfrtD,EAAOo4M,KAAO/qJ,EAAAA,EACdrtD,EAAOq4M,MAAQhrJ,EAAAA,EACfrtD,EAAOooN,SACPpoN,EAAOwqN,SACPglF,EAAU76E,aAAe30N,GAK7BsoT,EAAWhsU,UAAUksU,wBAA0B,SAAU13S,EAAO0+R,EAAWt8S,EAAOjR,EAAS4rO,GACvF2hF,EAAUiZ,iBAAmBxmU,EAC7ButT,EAAU76E,aAAa9G,gBAAkBA,EACzC2hF,EAAU76E,aAAa5G,cAAgB9rO,EACvC6uB,EAAM03R,kBAAkB5lT,YAAY4sT,EAAUiZ,mBAKlDH,EAAWhsU,UAAUklU,aAAe,SAAUxzT,EAAGC,EAAGgiC,EAAajwB,EAAQ9M,GACrE,IAAIw1T,EAAa,IAAIjgG,GAarB,OAZAigG,EAAW16T,EAAIA,EACf06T,EAAWz6T,EAAIA,EACfy6T,EAAW71S,OAASgF,OAAO7pB,GAC3B06T,EAAW5xS,MAAQ9W,EAAOqf,KAC1BqpS,EAAWx1T,MAAQA,EACnBw1T,EAAW1tS,OAASnD,OAAO5pB,GAC3By6T,EAAW3wS,SAAU,EACrB/X,EAAOqY,KAAO/qB,KAAK8T,IAAIpB,EAAOqY,KAAMqwS,EAAW71S,QAC/C7S,EAAOo4M,KAAO9qN,KAAK8T,IAAIpB,EAAOo4M,KAAMswG,EAAW1tS,QAC/Chb,EAAOsY,KAAOhrB,KAAKC,IAAIyS,EAAOsY,KAAMowS,EAAW71S,QAC/C7S,EAAOq4M,KAAO/qN,KAAKC,IAAIyS,EAAOq4M,KAAMqwG,EAAW1tS,QAC/Chb,EAAOooN,MAAM3iO,KAAKijU,EAAW71S,QACtB61S,GAKXJ,EAAWhsU,UAAUqsU,mBAAqB,SAAUlxS,EAASizM,EAAS8kF,EAAWt3R,GAS7E,IARA,IAAI0wS,EAAO,EACPC,EAAO,EACPC,EAAQ,EACRC,EAAQ,EACRC,EAAQ,EACR91T,EAAQ,EACR+hE,EAAQ,EACRG,EAAY,EACTliE,EAAQglB,EAAOx6B,QAClBkrU,GAAQnxS,EAAQvkB,GAChB21T,GAAQn+F,EAAQx3N,GAChB41T,GAASrxS,EAAQvkB,GAASw3N,EAAQx3N,GAClC61T,GAAStxS,EAAQvkB,GAASukB,EAAQvkB,GAClC81T,GAASt+F,EAAQx3N,GAASw3N,EAAQx3N,GAClCA,IAEJ,IAAIvL,EAAO6nT,EAAU7nT,KACrB,IAAI6nT,EAAUp6O,WAAuB,WAATztE,GAA8B,gBAATA,EAY7CstE,GAAU/8C,EAAOx6B,OAASorU,EAAUF,EAAOC,IAAW3wS,EAAOx6B,OAASqrU,EAAUH,EAAOA,GAEnFxzP,EADS,gBAATztE,GAAmC,UAATA,EACd2F,KAAKqD,KAAKk4T,EAAQ5zP,EAAQ2zP,GAAS1wS,EAAOx6B,SAGzCmrU,EAAQ5zP,EAAQ2zP,GAAS1wS,EAAOx6B,YAfjD,OADA03E,EAAYo6O,EAAUp6O,UACdztE,GACJ,IAAK,SACDstE,GAAS,EAAWu6O,EAAUp6O,UAAYwzP,GAASG,EACnD,MACJ,IAAK,cACD9zP,GAAS,EAAW3nE,KAAKwkB,IAAIxkB,KAAKE,IAAIgiT,EAAUp6O,YAAcwzP,GAASG,EAanF,OAAS9zP,MAAOA,EAAOG,UAAWA,IAKtCkzP,EAAWhsU,UAAUwsO,eAAiB,SAAU0mF,EAAW1+R,GACvD,IAAIoH,EAASs3R,EAAUt3R,OACvB,GAAIA,GAAUA,EAAOx6B,OAAQ,CAEzB,IAAIurU,EAAkBzZ,EAAU76E,aAChC,OAAQ66E,EAAU7nT,MACd,IAAK,SACD1G,KAAKioU,eAAehxS,EAAQs3R,EAAWyZ,GACvC,MACJ,IAAK,cACDhoU,KAAKkoU,oBAAoBjxS,EAAQs3R,EAAWyZ,GAC5C,MACJ,IAAK,gBACDhoU,KAAKmoU,sBAAsBlxS,EAAQs3R,EAAWyZ,GAC9C,MACJ,IAAK,aACDhoU,KAAKooU,mBAAmBnxS,EAAQs3R,EAAWyZ,GAC3C,MACJ,IAAK,QACDhoU,KAAKqoU,cAAcpxS,EAAQs3R,EAAWyZ,GACtC,MACJ,IAAK,cACDhoU,KAAKsoU,oBAAoBrxS,EAAQs3R,EAAWyZ,GAG7B,WAAnBzZ,EAAU7nT,MAAwC,kBAAnB6nT,EAAU7nT,MACzCshU,EAAgBn4S,MAAM04S,mBAAmBv/F,gBAAgBg/F,KAOrEX,EAAWhsU,UAAU6sU,oBAAsB,SAAUjxS,EAAQs3R,EAAWxvS,GAKpE,IAJA,IAGIypT,EAHA52S,KACAmI,KACA9nB,EAAQ,EAELA,EAAQglB,EAAOx6B,QAAQ,CAC1B,IAAI02B,EAAQ8D,EAAOhlB,GACnB2f,EAAOptB,KAAK2uB,EAAMvB,QAClBmI,EAAOv1B,KAAK6H,KAAKwkB,IAAIsC,EAAM4G,SAC3B9nB,IAEJu2T,EAAiBxoU,KAAK0nU,mBAAmB91S,EAAQmI,EAAQw0R,EAAWt3R,GACpElY,EAAOkY,OAASj3B,KAAKyoU,qBAAqBla,EAAWt3R,EAAQrF,EAAQmI,EAAQhb,EAAQypT,IAKzFnB,EAAWhsU,UAAUitU,oBAAsB,SAAUrxS,EAAQs3R,EAAWxvS,GAMpE,IALA,IAGIypT,EAHAE,KACAC,KACAC,KAEA32T,EAAQ,EACLA,EAAQglB,EAAOx6B,QAAQ,CAC1B,IAAI02B,EAAQ8D,EAAOhlB,GACnB22T,EAAWpkU,KAAK2uB,EAAMvB,QACtB82S,EAAUlkU,KAAK6H,KAAKwkB,IAAIsC,EAAMvB,SAC9B+2S,EAAUnkU,KAAK2uB,EAAM4G,QACrB9nB,IAEJu2T,EAAiBxoU,KAAK0nU,mBAAmBgB,EAAWC,EAAWpa,EAAWt3R,GAC1ElY,EAAOkY,OAASj3B,KAAK6oU,qBAAqBta,EAAWt3R,EAAQ2xS,EAAYD,EAAW5pT,EAAQypT,IAKhGnB,EAAWhsU,UAAU+sU,mBAAqB,SAAUnxS,EAAQs3R,EAAWxvS,GAInE,IAHA,IAAI+pT,KACAC,KACA92T,EAAQ,EACLA,EAAQglB,EAAOx6B,QAAQ,CAC1B,IAAI02B,EAAQ8D,EAAOhlB,GACnB62T,EAAYtkU,KAAK2uB,EAAMvB,QACvBm3S,EAAYvkU,KAAK2uB,EAAM4G,QACvB9nB,IAEJ8M,EAAOkY,OAASj3B,KAAKgpU,oBAAoBza,EAAWt3R,EAAQ6xS,EAAaC,EAAahqT,IAK1FsoT,EAAWhsU,UAAUgtU,cAAgB,SAAUpxS,EAAQs3R,EAAWxvS,GAM9D,IALA,IAGIypT,EAHAhyS,KACAizM,KACAw/F,KAEAh3T,EAAQ,EACLA,EAAQglB,EAAOx6B,QAAQ,CAC1B,IAAI02B,EAAQ8D,EAAOhlB,GACnBg3T,EAAYzkU,KAAK2uB,EAAMvB,QACvB4E,EAAQhyB,KAAK6H,KAAKwkB,IAAIsC,EAAMvB,SAC5B63M,EAAQjlO,KAAK6H,KAAKwkB,IAAIsC,EAAM4G,SAC5B9nB,IAEJu2T,EAAiBxoU,KAAK0nU,mBAAmBlxS,EAASizM,EAAS8kF,EAAWt3R,GACtElY,EAAOkY,OAASj3B,KAAKkpU,eAAe3a,EAAWt3R,EAAQgyS,EAAax/F,EAAS1qN,EAAQypT,IAKzFnB,EAAWhsU,UAAU4sU,eAAiB,SAAUhxS,EAAQs3R,EAAWxvS,GAK/D,IAJA,IAEIypT,EAFAhyS,KACAizM,KAEAx3N,EAAQ,EACLA,EAAQglB,EAAOx6B,QAAQ,CAC1B,IAAI02B,EAAQ8D,EAAOhlB,GACnBukB,EAAQhyB,KAAK2uB,EAAMvB,QACnB63M,EAAQjlO,KAAK2uB,EAAM4G,QACnB9nB,IAEJu2T,EAAiBxoU,KAAK0nU,mBAAmBlxS,EAASizM,EAAS8kF,EAAWt3R,GACtElY,EAAOkY,OAASj3B,KAAKmpU,gBAAgB5a,EAAWt3R,EAAQT,EAASizM,EAAS1qN,EAAQypT,IAKtFnB,EAAWhsU,UAAU8sU,sBAAwB,SAAUlxS,EAAQs3R,EAAWxvS,GAKtE,IAJA,IAAIyX,KACAizM,KACA2/F,KACAn3T,EAAQ,EACLA,EAAQglB,EAAOx6B,QAAQ,CAC1B,IAAI02B,EAAQ8D,EAAOhlB,GACnBm3T,EAAW5kU,KAAK2uB,EAAMvB,QACtB4E,EAAQhyB,KAAKyN,EAAQ,GACrBw3N,EAAQjlO,KAAK2uB,EAAM4G,QACnB9nB,IAEJ8M,EAAOkY,OAASj3B,KAAKqpU,uBAAuB9a,EAAWt3R,EAAQmyS,EAAY3/F,EAAS1qN,IAKxFsoT,EAAWhsU,UAAUwtU,qBAAuB,SAAUta,EAAWt3R,EAAQT,EAASizM,EAAS1qN,EAAQuqT,GAC/F,IAAIC,EAAWl9T,KAAK4xB,MAAOhH,EAAOx6B,OAAS,GACvCg3C,KACA+1R,EAAQhzS,EAAQ,GAAK+3R,EAAUkb,iBAC/BC,EAAQJ,EAAkBn1P,UAAam1P,EAAkBt1P,MAAQ3nE,KAAKwkB,IAAI24S,GAC1EG,EAAQnzS,EAAQ+yS,EAAW,GAC3BK,EAAQN,EAAkBn1P,UAAam1P,EAAkBt1P,MAAQ3nE,KAAKwkB,IAAI84S,GAC1EE,EAAQrzS,EAAQA,EAAQ/5B,OAAS,GAAK8xT,EAAUub,gBAChDC,EAAQT,EAAkBn1P,UAAam1P,EAAkBt1P,MAAQ3nE,KAAKwkB,IAAIg5S,GAI9E,OAHAp2R,EAAIjvC,KAAKxE,KAAKugU,aAAaiJ,EAAOE,EAAOzyS,EAAO,GAAIlY,EAAQ00B,EAAIh3C,SAChEg3C,EAAIjvC,KAAKxE,KAAKugU,aAAaoJ,EAAOC,EAAO3yS,EAAOsyS,EAAW,GAAIxqT,EAAQ00B,EAAIh3C,SAC3Eg3C,EAAIjvC,KAAKxE,KAAKugU,aAAasJ,EAAOE,EAAO9yS,EAAOA,EAAOx6B,OAAS,GAAIsiB,EAAQ00B,EAAIh3C,SACzEg3C,GAKX4zR,EAAWhsU,UAAU6tU,eAAiB,SAAU3a,EAAWt3R,EAAQT,EAASizM,EAAS1qN,EAAQirT,GACzF,IAAIT,EAAWl9T,KAAK4xB,MAAOhH,EAAOx6B,OAAS,GACvCg3C,KACAjY,EAAKhF,EAAQ,GAAK+3R,EAAUkb,iBAChCjuS,EAAKA,GAAM,EAAIA,EAAK,EACpB,IAAIC,EAAKuuS,EAAoB71P,UAAY9nE,KAAKs9D,IAAInuC,EAAIwuS,EAAoBh2P,OACtEt4C,EAAKlF,EAAQ+yS,EAAW,GACxB5tS,EAAKquS,EAAoB71P,UAAY9nE,KAAKs9D,IAAIjuC,EAAIsuS,EAAoBh2P,OACtE/4B,EAAKzkB,EAAQA,EAAQ/5B,OAAS,GAAK8xT,EAAUub,gBAC7C5uR,EAAK8uR,EAAoB71P,UAAY9nE,KAAKs9D,IAAI1uB,EAAI+uR,EAAoBh2P,OAI1E,OAHAvgC,EAAIjvC,KAAKxE,KAAKugU,aAAa/kS,EAAIC,EAAIxE,EAAO,GAAIlY,EAAQ00B,EAAIh3C,SAC1Dg3C,EAAIjvC,KAAKxE,KAAKugU,aAAa7kS,EAAIC,EAAI1E,EAAOsyS,EAAW,GAAIxqT,EAAQ00B,EAAIh3C,SACrEg3C,EAAIjvC,KAAKxE,KAAKugU,aAAatlR,EAAIC,EAAIjkB,EAAOA,EAAOx6B,OAAS,GAAIsiB,EAAQ00B,EAAIh3C,SACnEg3C,GAKX4zR,EAAWhsU,UAAU2tU,oBAAsB,SAAUza,EAAWt3R,EAAQT,EAASizM,EAAS1qN,GACvE1S,KAAK4xB,MAAOhH,EAAOx6B,OAAS,GAA3C,IAEIwtU,EAAkBhzS,EAAOx6B,QAAU8xT,EAAU0b,gBAAkBhzS,EAAOx6B,OAAS8xT,EAAU0b,gBAC7FA,EAAkB59T,KAAKC,IAAI,EAAG29T,GAC9BA,EAAkB59T,KAAK8T,IAAI,EAAG8pT,GAC9B1b,EAAU0b,gBAAkBA,EAC5B1b,EAAU2b,oBACV3b,EAAU2b,iBAAiBztU,OAAS8xT,EAAU0b,gBAAkB,EAEhE,IADA,IAAIh4T,EAAQ,EACLA,EAAQukB,EAAQ/5B,QAAQ,CAI3B,IAHA,IAAIo2T,EAAOr8R,EAAQvkB,GACf6gT,EAAOrpF,EAAQx3N,GACfk4T,EAAW,EACRA,GAAY5b,EAAU0b,iBACpB1b,EAAU2b,iBAAiBC,KAC5B5b,EAAU2b,iBAAiBC,GAAY,GAE3C5b,EAAU2b,iBAAiBC,IAAa99T,KAAKs9D,IAAIkpP,EAAMsX,GAAYrX,IACjEqX,EAENl4T,IAEJ,IAAIm4T,KACJA,EAAS3tU,OAAS,EAAI,EAAI8xT,EAAU0b,gBACpC,IAAI1+R,KACJA,EAAO9uC,OAAS8xT,EAAU0b,gBAAkB,EAE5C,IADA,IAAII,EAAW,EACRA,EAAY9b,EAAU0b,gBAAkB,GAC3C1+R,EAAO8+R,MACP9+R,EAAO8+R,GAAU5tU,OAAS,EAC1B4tU,IAGJ,IADA,IAAIC,EAAS,EAENA,EAAS9zS,EAAQ/5B,QAAQ,CAI5B,IAHA,IAAIq9B,EAAItD,EAAQ8zS,GACZx+R,EAAO,EACPy+R,EAAU,EACPA,EAAUH,EAAS3tU,QACjB2tU,EAASG,KACVH,EAASG,GAAW,GAExBH,EAASG,IAAYz+R,EACrBA,GAAQhS,IAENywS,IAEJD,EAGN,IADA,IAAIE,EAAU,EACPA,GAAWjc,EAAU0b,iBAAiB,CAEzC,IADA,IAAIQ,EAAW,EACRA,GAAYlc,EAAU0b,iBACzB1+R,EAAOi/R,GAASC,GAAYL,EAASI,EAAUC,KAC7CA,IAEJD,EAMN,OAJKxqU,KAAK0qU,uBAAuBn/R,EAAQgjR,EAAU2b,oBAC/C3b,EAAU2b,iBAAmB,MAE3BlqU,KAAKm4C,UAAUo2Q,EAAWt3R,EAAQT,EAASizM,EAAS1qN,IAM9DsoT,EAAWhsU,UAAUguU,uBAAyB,SAAU9a,EAAWt3R,EAAQT,EAASizM,EAAS1qN,GACzF,IAAI00B,KACAutR,EAASzS,EAAUyS,QAAU/pS,EAAOx6B,OAASw6B,EAAOx6B,OAAS,EAAI8xT,EAAUyS,OAC/EA,EAAS30T,KAAKC,IAAI,EAAG00T,GAMrB,IALA,IACIh0T,EACAD,EACAkS,EACA0rT,EAJA14T,EAAQ,EAKLA,EAAQglB,EAAOx6B,OAAS,GAAG,CAC9BuQ,EAAIiS,EAAQ0rT,EAAY,EACxB,IAAK,IAAIlnT,EAAIxR,EAAOgN,EAAQ+hT,EAAQv9S,IAChCxE,IACKwqN,EAAQhmN,IACTknT,IAEJ39T,GAAKy8N,EAAQhmN,IAEjBzW,EAAIg0T,EAAS2J,GAAa,EAAI,KAAO39T,GAAKg0T,EAAS2J,MACzCxwR,MAAMntC,KACZD,EAAIypB,EAAQwqS,EAAS,EAAI/uT,GACzBwhC,EAAIjvC,KAAKxE,KAAKugU,aAAaxzT,EAAGC,EAAGiqB,EAAO+pS,EAAS,EAAI/uT,GAAQ8M,EAAQ00B,EAAIh3C,UAE7EwV,IAEJ,OAAOwhC,GAKX4zR,EAAWhsU,UAAU8tU,gBAAkB,SAAU5a,EAAWt3R,EAAQT,EAASizM,EAAS1qN,EAAQ6rT,GAC1F,IAAIn3R,KACAo3R,EAAWr0S,EAAQ,GAAK+3R,EAAUkb,iBAClCqB,EAAWF,EAAqB52P,MAAQ62P,EAAWD,EAAqBz2P,UACxE42P,EAAWv0S,EAAQA,EAAQ/5B,OAAS,GAAK8xT,EAAUub,gBACnDkB,EAAWJ,EAAqB52P,MAAQ+2P,EAAWH,EAAqBz2P,UAG5E,OAFA1gC,EAAIjvC,KAAKxE,KAAKugU,aAAasK,EAAUC,EAAU7zS,EAAO,GAAIlY,EAAQ00B,EAAIh3C,SACtEg3C,EAAIjvC,KAAKxE,KAAKugU,aAAawK,EAAUC,EAAU/zS,EAAOA,EAAOx6B,OAAS,GAAIsiB,EAAQ00B,EAAIh3C,SAC/Eg3C,GAKX4zR,EAAWhsU,UAAUotU,qBAAuB,SAAUla,EAAWt3R,EAAQT,EAASizM,EAAS1qN,EAAQksT,GAC/F,IAAI1B,EAAWl9T,KAAK4xB,MAAOhH,EAAOx6B,OAAS,GACvCyuU,KACA1vS,EAAKhF,EAAQ,GAAK+3R,EAAUkb,iBAC5BhuS,EAAKwvS,EAAkB92P,UAAY9nE,KAAKqD,IAAIu7T,EAAkBj3P,MAAQx4C,GACtEE,EAAKlF,EAAQ+yS,EAAW,GACxB5tS,EAAKsvS,EAAkB92P,UAAY9nE,KAAKqD,IAAIu7T,EAAkBj3P,MAAQt4C,GACtEuf,EAAKzkB,EAAQA,EAAQ/5B,OAAS,GAAK8xT,EAAUub,gBAC7C5uR,EAAK+vR,EAAkB92P,UAAY9nE,KAAKqD,IAAIu7T,EAAkBj3P,MAAQ/4B,GAI1E,OAHAiwR,EAAO1mU,KAAKxE,KAAKugU,aAAa/kS,EAAIC,EAAIxE,EAAO,GAAIlY,EAAQmsT,EAAOzuU,SAChEyuU,EAAO1mU,KAAKxE,KAAKugU,aAAa7kS,EAAIC,EAAI1E,EAAOsyS,EAAW,GAAIxqT,EAAQmsT,EAAOzuU,SAC3EyuU,EAAO1mU,KAAKxE,KAAKugU,aAAatlR,EAAIC,EAAIjkB,EAAOA,EAAOx6B,OAAS,GAAIsiB,EAAQmsT,EAAOzuU,SACzEyuU,GAKX7D,EAAWhsU,UAAU88C,UAAY,SAAUo2Q,EAAWt3R,EAAQT,EAASizM,EAAS1qN,GAC7D1S,KAAK4xB,MAAOhH,EAAOx6B,OAAS,GAO3C,IAPA,IAKIm1B,EACAmI,EALAmwS,EAAmB3b,EAAU2b,iBAC7Bz2R,KACAjY,EAAK,EACLvpB,EAAQ,EAGLA,GAASi4T,EAAiBztU,QACf,IAAVwV,GACA2f,EAAS4E,EAAQ,GAAK+3R,EAAUkb,iBAChC1vS,EAAS/5B,KAAKmrU,oBAAoBjB,EAAkBt4S,GACpD6hB,EAAIjvC,KAAKxE,KAAKugU,aAAa3uS,EAAQmI,EAAQ9C,EAAO,GAAIlY,EAAQ00B,EAAIh3C,UAE7DwV,IAAUi4T,EAAiBztU,QAChCm1B,EAAS4E,EAAQS,EAAOx6B,OAAS,GAAK8xT,EAAUub,gBAChD/vS,EAAS/5B,KAAKmrU,oBAAoBjB,EAAkBt4S,GACpD6hB,EAAIjvC,KAAKxE,KAAKugU,aAAa3uS,EAAQmI,EAAQ9C,EAAOA,EAAOx6B,OAAS,GAAIsiB,EAAQ00B,EAAIh3C,WAGlF++B,IAAOvE,EAAOx6B,OAAS8xT,EAAUub,iBAAmBI,EAAiBztU,OACrEm1B,EAAS4E,EAAQpC,SAASoH,EAAGtuB,WAAY,IAAM,GAC/C6sB,EAAS/5B,KAAKmrU,oBAAoBjB,EAAkBt4S,GACpD6hB,EAAIjvC,KAAKxE,KAAKugU,aAAa3uS,EAAQmI,EAAQ9C,EAAO7C,SAASoH,EAAGtuB,WAAY,IAAM,GAAI6R,EAAQ00B,EAAIh3C,UAEpGwV,IAEJ,OAAOwhC,GAKX4zR,EAAWhsU,UAAU8vU,oBAAsB,SAAUC,EAAQr+T,GAGzD,IAFA,IAAIolB,EAAM,EACNlgB,EAAQ,EACLA,EAAQm5T,EAAO3uU,QAClB01B,GAAOi5S,EAAOn5T,GAAS5F,KAAKs9D,IAAI58D,EAAGkF,GACnCA,IAEJ,OAAOkgB,GAKXk1S,EAAWhsU,UAAUqvU,uBAAyB,SAAUn/R,EAAQ2+R,GAC5D,IAAIztU,EAAS8uC,EAAO9uC,OAChB4uU,KACAC,KACAC,KACJF,EAAU5uU,OAASA,EACnB6uU,EAAU7uU,OAASA,EACnB8uU,EAAU9uU,OAASA,EAEnB,IADA,IAAIwV,EAAQ,EACLA,EAAQxV,GACX8uU,EAAUt5T,GAAS,IACjBA,EAGN,IADA,IAAIkiO,EAAS,EACNA,EAAS13O,GAAQ,CAKpB,IAJA,IAAI+uU,EAAO,EACPj3F,EAAS,EACTolB,EAAS,EACTK,EAAS,EACNA,EAASv9P,GAAQ,CACpB,GAA0B,IAAtB8uU,EAAUvxE,GAEV,IADA,IAAIra,EAAS,EACNA,EAASljP,GACc,IAAtB8uU,EAAU5rF,IAAiBtzO,KAAKE,IAAIg/B,EAAOyuN,GAAQra,KAAY6rF,IAC/DA,EAAOn/T,KAAKE,IAAIg/B,EAAOyuN,GAAQra,IAC/BpL,EAASylB,EACTL,EAASha,KAEXA,IAGRqa,EAGN,KADEuxE,EAAU5xE,GACRplB,IAAWolB,EAAQ,CAEnB,IADA,IAAI8xE,EAAW,EACRA,EAAWhvU,GAAQ,CACtB,IAAIqvC,EAAOP,EAAOgpM,GAAQk3F,GAC1BlgS,EAAOgpM,GAAQk3F,GAAYlgS,EAAOouN,GAAQ8xE,GAC1ClgS,EAAOouN,GAAQ8xE,GAAY3/R,IACzB2/R,EAEN,IAAIC,EAAOxB,EAAiB31F,GAC5B21F,EAAiB31F,GAAU21F,EAAiBvwE,GAC5CuwE,EAAiBvwE,GAAU+xE,EAI/B,GAFAJ,EAAUn3F,GAAUI,EACpB82F,EAAUl3F,GAAUwlB,EACW,IAA3BpuN,EAAOouN,GAAQA,GACf,OAAO,EAEX,IAAIgyE,EAAO,EAAMpgS,EAAOouN,GAAQA,GAChCpuN,EAAOouN,GAAQA,GAAU,EAEzB,IADA,IAAIiyE,EAAU,EACPA,EAAUnvU,GACb8uC,EAAOouN,GAAQiyE,IAAYD,IACzBC,EAEN1B,EAAiBvwE,IAAWgyE,EAE5B,IADA,IAAIE,EAAU,EACPA,EAAUpvU,GAAQ,CACrB,GAAIovU,IAAYlyE,EAAQ,CAChB7tN,EAAOP,EAAOsgS,GAASlyE,GAC3BpuN,EAAOsgS,GAASlyE,GAAU,EAE1B,IADIha,EAAS,EACNA,EAASljP,GACZ8uC,EAAOsgS,GAASlsF,IAAWp0M,EAAOouN,GAAQha,GAAU7zM,IAClD6zM,EAENuqF,EAAiB2B,IAAY3B,EAAiBvwE,GAAU7tN,IAE1D+/R,IAEJ13F,EAGN,IADA,IAAI23F,EAAUrvU,EAAS,EAChBqvU,GAAW,GAAG,CACjB,GAAIR,EAAUQ,KAAaT,EAAUS,GAEjC,IADA,IAAIC,EAAU,EACPA,EAAUtvU,GAAQ,CACrB,IAAId,EAAM4vC,EAAOwgS,GAAST,EAAUQ,IACpCvgS,EAAOwgS,GAAST,EAAUQ,IAAYvgS,EAAOwgS,GAASV,EAAUS,IAChEvgS,EAAOwgS,GAASV,EAAUS,IAAYnwU,IACpCowU,IAGRD,EAEN,OAAO,GAKXzE,EAAWhsU,UAAU0sT,qBAAuB,SAAUhpS,EAAQ8Q,GAC1DqG,GAAanX,GACb,IAKI/d,EALA+yB,EAAWhV,EAAOgV,SAClB64M,EAAkB/8M,EAAME,SAASsrF,aAAa,IAAI2hH,GAAWntM,EAAM7uB,QAAQsC,GAAK,2BAA6Byb,EAAO9M,MAAO,eAAiB+D,MAAO,EAAG6f,MAAO,QAAU,GACvK9oB,EAAG,EAAGC,EAAG,EAAGgJ,MAAO+d,EAAS/d,MAC5BD,OAAQge,EAAShe,WAGrB/U,EAAU6uB,EAAME,SAAS+9C,aACrBxqE,GAAMusB,EAAM7uB,QAAQsC,GAAK,uBAAyByb,EAAO9M,MACzD5E,UAAa,aAAe0mB,EAAShnB,EAAI,IAAMgnB,EAAS/mB,EAAI,IAC5D+/N,YAAa,QAAUl9M,EAAM7uB,QAAQsC,GAAK,2BAA6Byb,EAAO9M,MAAQ,OAGlFtQ,YAAYirO,GACpB,IAAK,IAAIxuO,EAAK,EAAGyE,EAAKkc,EAAOurN,WAAYlsO,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC3D,IAAImwT,EAAY1rT,EAAGzE,GACnB4B,KAAKunU,wBAAwB13S,EAAO0+R,EAAWA,EAAUt8S,MAAOjR,EAAS4rO,KAMjFy6F,EAAWhsU,UAAUiX,QAAU,SAAUud,KAQzCw3S,EAAWhsU,UAAU0kC,cAAgB,WAIjC,MAAO,aAEJsnS,KCjlBP2E,GAA2B,WAK3B,SAASA,EAAUn8S,GACf7vB,KAAK40B,cAAgB,IAAI3B,GAAc,EAAG,GAC1CjzB,KAAK05B,GAAK,EACV15B,KAAK25B,GAAK,EACV35B,KAAK6vB,MAAQA,EACb7vB,KAAKupM,UAAYvpM,KAAK6vB,MAAM7uB,QAAQsC,GACpCtD,KAAKtD,mBAyST,OApSAsvU,EAAU3wU,UAAUqB,iBAAmB,WACnC,IAAIsD,KAAK6vB,MAAM04D,YAAf,CAGA,IAAIk0B,EAAcjxG,GAAQC,UAAY,eAAiB,aACvDzL,KAAK6vB,MAAMs3D,GAAG37E,GAAQkgF,eAAgB1rF,KAAK8tO,iBAAkB9tO,MAC7DA,KAAK6vB,MAAMs3D,GAAG37E,GAAQmgF,cAAe3rF,KAAK4tN,eAAgB5tN,MAC1DA,KAAK6vB,MAAMs3D,GAAGs1B,EAAaz8G,KAAKisU,kBAAmBjsU,MACnDA,KAAK6vB,MAAMs3D,GAAG,UAAWnnF,KAAKqqT,UAAWrqT,QAE7CgsU,EAAU3wU,UAAUuyN,eAAiB,WAC7B5tN,KAAK6vB,MAAMo+M,WACXjuO,KAAKksU,gBAAgB,MAG7BF,EAAU3wU,UAAU4wU,kBAAoB,WACpCjsU,KAAKksU,gBAAgB,MAEzBF,EAAU3wU,UAAUyyO,iBAAmB,SAAUxxO,GAC7C,IAAIuzB,EAAQ7vB,KAAK6vB,MACE,cAAfvzB,EAAMoK,OAAyB8E,GAAQub,OAASvb,GAAQ2gU,SAAWt8S,EAAMo+M,WAAa3xO,EAAMopB,gBAC5FppB,EAAMopB,iBAGLmK,EAAMu8S,sBACHt2S,GAAajG,EAAMq2M,OAAQr2M,EAAMs2M,OAAQt2M,EAAMu+M,qBAAqBzQ,iBAChE9tM,EAAMo+M,WAAcp+M,EAAMmB,SAC1BhxB,KAAK+tO,YAIT/tO,KAAKksU,gBAAgB,OASjCF,EAAU3wU,UAAUgvT,UAAY,WAC5B,IAAIx6R,EAAQ7vB,KAAK6vB,MAIjB,OAHIiG,GAAajG,EAAMq2M,OAAQr2M,EAAMs2M,OAAQt2M,EAAMu+M,qBAAqBzQ,iBACpE39N,KAAK+tO,aAEF,GAMXi+F,EAAU3wU,UAAU0yO,UAAY,WAC5B,IAGI/6N,EAHA6c,EAAQ7vB,KAAK6vB,MACbw8S,EAAkB,GAClBC,EAAgB,GAEhBv+F,EAAYl+M,EAAMk+M,UAClBh5M,EAAYlF,EAAMu+M,qBAAqBzQ,eACvC4uG,EAAa/rU,SAASyuB,eAAejvB,KAAKupM,UAAY,oBAE1D,GADAvpM,KAAKwsU,gBACD38S,EAAMoB,QAAQgP,SAAWnK,GAAajG,EAAM61R,cAAc+mB,OAAQ58S,EAAM61R,cAAcgnB,OAAQ33S,GAC9F,OAAO,KAaX,GAXA/0B,KAAKysU,OAAS58S,EAAMoB,QAAQgP,OAASpQ,EAAM61R,cAAc+mB,OAAS58S,EAAMq2M,OACxElmO,KAAK0sU,OAAS78S,EAAMoB,QAAQgP,OAASpQ,EAAM61R,cAAcgnB,OAAS78S,EAAMs2M,OACxEomG,EAAW/oU,aAAa,UAAW,KACR,SAAvBuqO,EAAUs1B,UAA8C,eAAvBt1B,EAAUs1B,WAC3CgpE,GAAmB,KAAOt3S,EAAUhoB,EAAI,IAAM/M,KAAK0sU,OAC/C,OAAS33S,EAAUhoB,EAAIgoB,EAAU/e,OAAS,IAAMhW,KAAK0sU,QAElC,SAAvB3+F,EAAUs1B,UAA8C,aAAvBt1B,EAAUs1B,WAC3CipE,GAAiB,KAAOtsU,KAAKysU,OAAS,IAAM13S,EAAU/nB,EAClD,MAAQhN,KAAKysU,OAAS,KAAO13S,EAAU/nB,EAAI+nB,EAAUhf,SAExB,IAAjCw2T,EAAWh7T,WAAW9U,OAAc,CACpC,IAAIkwU,EAAmB98S,EAAME,SAAS+9C,aAAcxqE,GAAMtD,KAAKupM,UAAY,oBAC3Ev2L,EAAU,IAAIyiB,GAAWz1B,KAAKupM,UAAY,kBAAmB,OAAQwkC,EAAU1nL,KAAKrwC,MAAO+3N,EAAU1nL,KAAKxwB,OAAShG,EAAM6F,WAAWjI,cAAe,EAAG,KAAM4+S,GAC5JrsU,KAAK4sU,oBAAoB55T,EAASu5T,GAClCv5T,EAAQ8mB,EAAIwyS,EACZt5T,EAAQ1P,GAAKtD,KAAKupM,UAAY,gBAC9BvpM,KAAK4sU,oBAAoB55T,EAASu5T,GAClCA,EAAW5qU,YAAYgrU,GACvB3sU,KAAK6sU,kBAAkBh9S,EAAOkF,EAAWw3S,EAAWr7L,gBAGpD1wI,SAASyuB,eAAejvB,KAAKupM,UAAY,mBAAmB/lM,aAAa,IAAK6oU,GAC9E7rU,SAASyuB,eAAejvB,KAAKupM,UAAY,iBAAiB/lM,aAAa,IAAK8oU,GAC5EtsU,KAAK6sU,kBAAkBh9S,EAAOkF,EAAWw3S,EAAWr7L,YAG5D86L,EAAU3wU,UAAUuxU,oBAAsB,SAAU55T,EAASu5T,GACzD,IAAIv9S,EAAahvB,KAAK6vB,MAAME,SAASyF,SAASxiB,GAC9Cu5T,EAAW5qU,YAAYqtB,IAE3Bg9S,EAAU3wU,UAAUwxU,kBAAoB,SAAUh9S,EAAOkF,EAAW+3S,GAUhE,IAAK,IATD32T,EACA2Y,EACA4D,EACA4gS,EACAyZ,EAGAl4S,EACAwwM,EACKh/M,EAAI,EAAG4U,EAAWpL,EAAM8vM,gBAAgBljO,OAAQ4pB,EAAI4U,EAAU5U,IAGnE,GAFAlQ,EAAO0Z,EAAM8vM,gBAAgBt5M,GAC7Bg/M,EAAYlvN,EAAK6kN,oBAAkC7kN,EAAKmkN,YAAjBnkN,EAAKuc,KACxCvc,EAAK64S,iBAAiB/uR,OACtB,GAAKjgC,KAAKysU,QAAWpnG,EAASt4N,EAAIs4N,EAASrvN,OAAUqvN,EAASt4N,GAAK/M,KAAKysU,QACnEzsU,KAAK0sU,QAAWrnG,EAASr4N,EAAIq4N,EAAStvN,QAAWsvN,EAASr4N,GAAKhN,KAAK0sU,OAAS,CAI9E,GAHApZ,EAAc9yT,SAASyuB,eAAejvB,KAAKupM,UAAY,iBAAmBljL,GAC1E0mT,EAAWvsU,SAASyuB,eAAejvB,KAAKupM,UAAY,sBAAwBljL,KAC5EyI,EAAO9uB,KAAKgtU,YAAY72T,IAEpB,SAEJuc,EAAO1yB,KAAKitU,gBAAgBn+S,EAAM3Y,EAAM4e,EAAWswM,GAC/B,OAAhBiuF,IACAA,EAAczjS,EAAME,SAASyF,UACzBlyB,GAAMtD,KAAKupM,UAAY,iBAAmBljL,EAC1C+X,KAAQjoB,EAAK64S,iBAAiB5wR,MAAQvO,EAAM6F,WAAWhI,gBAE3Do/S,EAAUnrU,YAAY2xT,GAEtByZ,EAAWp3S,GADD,IAAIC,GAAW51B,KAAKupM,UAAY,sBAAwBljL,EAAG,EAAG,EAAG,QAASyI,GACpD3Y,EAAK64S,iBAAiBp8E,UAAWz8N,EAAK64S,iBAAiBp8E,UAAU/8M,OAAShG,EAAM6F,WAAW/H,eAAgBm/S,IAE/Ij4S,EAAYS,GAAct1B,KAAK05B,GAAI15B,KAAK25B,GAAIjH,EAAM1yB,KAAK40B,cAAe,GAAI50B,KAAKktU,MAAOltU,KAAKmtU,SAAUntU,KAAKotU,OAAQptU,KAAKysU,OAAQzsU,KAAK0sU,QACpIpZ,EAAY9vT,aAAa,IAAKqxB,GAC9Bk4S,EAAS/wT,YAAc8S,EACvBi+S,EAASvpU,aAAa,KAAMkvB,EAAK3lB,EA5B/B,GA4B4CG,YAC9C6/T,EAASvpU,aAAa,KAAMkvB,EAAK1lB,EA7B/B,EA6B6C,EAAIhN,KAAK6jO,YAAY9tN,OAAS,GAAG7I,iBAGhFujB,GAAczwB,KAAKupM,UAAY,iBAAmBljL,GAClDoK,GAAczwB,KAAKupM,UAAY,sBAAwBljL,IAKvE2lT,EAAU3wU,UAAU2xU,YAAc,SAAU72T,GACxC,IAAInZ,EACJgD,KAAKmtU,UAAW,EAChBntU,KAAKktU,OAAQ,EACbltU,KAAKotU,QAAS,EACdptU,KAAKqtU,SAAU,EACf,IAAIC,EAAiC,aAAnBn3T,EAAKmb,WAAoD,iBAAxBnb,EAAKud,eAClD,GAAM,EAWZ,GAVyB,eAArBvd,EAAKyiB,aACL57B,EAAQg5B,GAAiB3pB,KAAKE,IAAIvM,KAAKysU,OAASt2T,EAAKuc,KAAK3lB,GAAIoJ,EAAKuc,KAAK1c,MAAOG,GAAQm3T,EACvFttU,KAAKmtU,UAAYh3T,EAAK2e,gBACtB90B,KAAKktU,MAAQ/2T,EAAK2e,kBAGlB93B,EAAQi5B,GAAiB5pB,KAAKE,IAAIvM,KAAK0sU,OAASv2T,EAAKuc,KAAK1lB,GAAImJ,EAAKuc,KAAK3c,OAAQI,GAAQm3T,EACxFttU,KAAKqtU,QAAUl3T,EAAK2e,gBACpB90B,KAAKotU,QAAUj3T,EAAK2e,iBAED,aAAnB3e,EAAKmb,UACL,OAAOnb,EAAKqmB,OAAO,IAAIpc,KAAKpjB,IAE3B,GAAuB,aAAnBmZ,EAAKmb,UACV,OAAOnb,EAAKqqN,OAAOn0N,KAAKkT,MAAMviB,IAE7B,GAAuB,gBAAnBmZ,EAAKmb,UACV,OAAOt0B,EAAQmZ,EAAKqmB,OAAOnwB,KAAKs9D,IAAIxzD,EAAKwa,QAAS3zB,IAIlD,OADwBmZ,EAAK2lB,aAAqD,OAAtC3lB,EAAK2lB,YAAYnsB,MAAM,WACxCwG,EAAK2lB,YAAYvsB,QAAQ,UAAW4G,EAAKqmB,OAAOx/B,IAAUmZ,EAAKqmB,OAAOx/B,IAGzGgvU,EAAU3wU,UAAU4xU,gBAAkB,SAAUn+S,EAAM3Y,EAAM4f,EAAQsvM,GAChE,IAIIkoG,EACAC,EAAUz3S,EAAOhpB,EACjB0gU,EAAU13S,EAAO/oB,EACjBk4N,EAAuC,WAAvB/uN,EAAKkrG,cACrBpsF,EAAkB9e,EAAK+e,kBAAoB/e,EAAK+e,iBAAiB1E,UAAYra,EAAK8e,gBAAkB,EAExG,GADAj1B,KAAK6jO,YAAch1M,GAAYC,EAAM3Y,EAAK64S,iBAAiBp8E,WAClC,eAArBz8N,EAAKyiB,YAA8B,CACnC,IAAIosM,EAAYE,EAAgBG,EAASr4N,EAAIhN,KAAK6jO,YAAY9tN,UAC1DsvN,EAASr4N,EAAIioB,EACblf,EAASmvN,EAAgBG,EAASr4N,EAAIhN,KAAK6jO,YAAY9tN,OAV5C,GAUoEsvN,EAASr4N,EAV7E,GAWfhN,KAAK40B,cAAgB,IAAI3B,GAAcjzB,KAAKysU,OAAQznG,GACpDuoG,EAAc,IAAIh4S,GAAMv1B,KAAKysU,OAAUzsU,KAAK6jO,YAAY7tN,MAAQ,EAbtD,EAaqED,GAAWmvN,EAAkC,EAAlBjwM,GAAsBj1B,KAAK6jO,YAAY7tN,MAAQwkD,GAAax6D,KAAK6jO,YAAY9tN,OAASykD,IAC5LrkD,EAAK2e,kBACLy4S,EAAYvgU,EAAIk4N,EAAgBG,EAASr4N,EAAIq4N,EAASr4N,GACjDhN,KAAK6jO,YAAY9tN,OAASykD,GAfpB,IAekDvlC,GAE7Ds4S,EAAYxgU,EAAIygU,IAChBD,EAAYxgU,EAAIygU,GAEhBD,EAAYxgU,EAAIwgU,EAAYv3T,MAAQw3T,EAAUz3S,EAAO/f,QACrDu3T,EAAYxgU,GAAOwgU,EAAYxgU,EAAIwgU,EAAYv3T,OAAUw3T,EAAUz3S,EAAO/f,QAE1EhW,KAAK40B,cAAc7nB,EAAIkyB,EAAmBsuS,EAAYxgU,EAAIwgU,EAAYv3T,MAAQhW,KAAK05B,KACnF15B,KAAK40B,cAAc7nB,EAAIwgU,EAAYxgU,EAAIwgU,EAAYv3T,MAAQhW,KAAK05B,GAAKuF,GAErEj/B,KAAK40B,cAAc7nB,EAAIkyB,EAAmBsuS,EAAYxgU,EAAI/M,KAAK05B,KAC/D15B,KAAK40B,cAAc7nB,EAAIwgU,EAAYxgU,EAAI/M,KAAK05B,GAAKuF,OAGpD,CACDhK,GAAqC9e,EAAK2e,gBAAkB,GAAK,EACjE90B,KAAK40B,cAAgB,IAAI3B,GAAcoyM,EAASt4N,EAAG/M,KAAK0sU,QACxD,IAAI12T,EAAQkvN,EAAgBG,EAASt4N,EAAIkoB,EACrCowM,EAASt4N,EAAK/M,KAAK6jO,YAAiB,SACxC0pG,EAAc,IAAIh4S,GAAKvf,EAAQif,EAAiBj1B,KAAK0sU,OAAU1sU,KAAK6jO,YAAY9tN,OAAS,EApC/E,EAoC6F/V,KAAK6jO,YAAY7tN,SAAuBhW,KAAK6jO,YAAY9tN,OAASykD,IACrKrkD,EAAK2e,iBACLy4S,EAAYxgU,EAAIm4N,EAAgBG,EAASt4N,EAAI/M,KAAK6jO,YAAY7tN,MArCnD,GAsCPqvN,EAASt4N,EAtCF,GAsCqBkoB,EAC3Bs4S,EAAYxgU,EAAIwgU,EAAYv3T,MAAShW,KAAK6vB,MAAMmF,cAAchf,QAC/DhW,KAAK40B,cAAc7nB,GAAOwgU,EAAYxgU,EAAIwgU,EAAYv3T,MAAShW,KAAK6vB,MAAMmF,cAAchf,MACxFu3T,EAAYxgU,GAAOwgU,EAAYxgU,EAAIwgU,EAAYv3T,MAAShW,KAAK6vB,MAAMmF,cAAchf,QAIjFu3T,EAAYxgU,EAAI,IAChB/M,KAAK40B,cAAc7nB,GAAKwgU,EAAYxgU,EACpCwgU,EAAYxgU,EAAI,GAGpBwgU,EAAYvgU,EAAIygU,IAChBF,EAAYvgU,EAAIygU,GAEhBF,EAAYvgU,EAAIugU,EAAYx3T,QAAU03T,EAAU13S,EAAOhgB,SACvDw3T,EAAYvgU,GAAOugU,EAAYvgU,EAAIugU,EAAYx3T,QAAW03T,EAAU13S,EAAOhgB,SAE3E/V,KAAK40B,cAAc5nB,EAAIiyB,EAAmBsuS,EAAYvgU,EAAIugU,EAAYx3T,OAAS/V,KAAK25B,KACpF35B,KAAK40B,cAAc5nB,EAAIugU,EAAYvgU,EAAIugU,EAAYx3T,OAAS/V,KAAK25B,GAAKsF,GAEtEj/B,KAAK40B,cAAc5nB,EAAIiyB,EAAmBsuS,EAAYvgU,EAAIhN,KAAK25B,KAC/D35B,KAAK40B,cAAc5nB,EAAIugU,EAAYvgU,EAAIhN,KAAK25B,GAAKsF,GAGzD,OAAOsuS,GAEXvB,EAAU3wU,UAAUmxU,cAAgB,WAChC/vS,GAAUz8B,KAAK0tU,oBAOnB1B,EAAU3wU,UAAU6wU,gBAAkB,SAAUhhU,GAC5C,IAAI2kB,EAAQ7vB,KAAK6vB,MACbk+M,EAAYvtO,SAASyuB,eAAejvB,KAAKupM,UAAY,oBACzDvpM,KAAKwsU,gBACDz+F,GAAmD,MAAtCA,EAAUl7N,aAAa,aACpC7S,KAAK0tU,kBAAoBvtU,WAAW,WAChC,IAAI23B,OAAcC,QAAQg2M,GACtB7iO,SAAU,IACV8sB,SAAU,SAAU/3B,GAEhB8tO,EAAUrpO,MAAMkqC,UAAY,GAC5Bm/L,EAAUvqO,aAAa,WAAY,EAAKvD,EAAKg4B,UAAYh4B,EAAKiL,UAAWgC,aAE7E8R,IAAK,SAAUmN,GACX4hN,EAAUvqO,aAAa,UAAW,KAClCqsB,EAAMo+M,WAAY,EACdp+M,EAAM61R,gBACN71R,EAAM61R,cAAc+mB,OAAS,KAC7B58S,EAAM61R,cAAcgnB,OAAS,UAI1CxhU,KAMX8gU,EAAU3wU,UAAU0kC,cAAgB,WAIhC,MAAO,aAOXisS,EAAU3wU,UAAUiX,QAAU,SAAUud,KAKjCm8S,K7QzTPngP,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAmHxCz8D,GAAsB,WAKtB,OAJA,SAAczZ,EAAOD,GACjB/V,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAMlBwf,GAAsB,WAOtB,OANA,SAAcxoB,EAAGC,EAAGgJ,EAAOD,GACvB/V,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAKlB43T,GAAsB,WAKtB,OAJA,SAAchhU,EAAQF,GAClBzM,KAAKqtU,QAAU5gU,EACfzM,KAAKmtU,SAAWxgU,MAMpBiwN,GAAiC,WAIjC,OAHA,SAAyBt5N,GACrBtD,KAAKsD,GAAKA,MAMdsyB,GAA4B,SAAU82D,GAEtC,SAAS92D,EAAWtyB,EAAIyJ,EAAGC,EAAG6G,EAAQib,EAAMzhB,EAAWsyB,QACjC,IAAdtyB,IAAwBA,EAAY,IACxC,IAAItN,EAAQ2sF,EAAOprF,KAAKtB,KAAMsD,IAAOtD,KASrC,OARAD,EAAMsN,UAAY,GAClBtN,EAAM4/B,SAAW,OACjB5/B,EAAMgN,EAAIA,EACVhN,EAAMiN,EAAIA,EACVjN,EAAM8T,OAASA,EACf9T,EAAM+uB,KAAOA,EACb/uB,EAAMsN,UAAYA,EAClBtN,EAAM4/B,SAAWA,EACV5/B,EAEX,OAdA8rF,GAAUj2D,EAAY82D,GAcf92D,GACTgnM,IA2GEnnM,GAA4B,SAAUi3D,GAEtC,SAASj3D,EAAWnyB,EAAI86B,EAAMpoB,EAAO6f,EAAOpoB,EAASqmD,EAAWh6B,GAC5D,IAAI/5B,EAAQ2sF,EAAOprF,KAAKtB,KAAMsD,IAAOtD,KAOrC,OANAD,EAAM0N,QAAUA,EAChB1N,EAAMq+B,KAAOA,EACbr+B,EAAMu+B,OAASzI,EACf91B,EAAM,gBAAkBiW,EACxBjW,EAAM,oBAAsB+zD,EAC5B/zD,EAAM+5B,EAAIA,EACH/5B,EAEX,OAXA8rF,GAAUp2D,EAAYi3D,GAWfj3D,GACTmnM,IA6BEgxG,GAAiC,WAKjC,OAJA,SAAyB7gU,EAAGC,GACxBhN,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,M8Q/Tb6+E,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAY5DywS,GAA2B,SAAUnhP,GAErC,SAASmhP,IACL,OAAkB,OAAXnhP,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBA6rF,GAAUgiP,EAAWnhP,GAIrBN,IACIllF,EAAS,OACV2mU,EAAUxyU,UAAW,YAAQ,GAChC+wF,IACIllF,EAAS,KACV2mU,EAAUxyU,UAAW,aAAS,GACjC+wF,IACIllF,EAAS,aACV2mU,EAAUxyU,UAAW,kBAAc,GACtC+wF,IACIllF,EAAS,WACV2mU,EAAUxyU,UAAW,kBAAc,GACtC+wF,IACIllF,EAAS,WACV2mU,EAAUxyU,UAAW,iBAAa,GACrC+wF,IACIllF,EAAS,IACV2mU,EAAUxyU,UAAW,eAAW,GAC5BwyU,GACTrtQ,IAMEstQ,GAA+B,SAAUphP,GAEzC,SAASohP,IACL,OAAkB,OAAXphP,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAUiiP,EAAephP,GAIzBN,IACIllF,EAAS,KACV4mU,EAAczyU,UAAW,aAAS,GACrC+wF,IACIllF,EAAS,IACV4mU,EAAczyU,UAAW,aAAS,GAC9ByyU,GACTttQ,IAMEutQ,GAA4B,SAAUrhP,GAEtC,SAASqhP,IACL,OAAkB,OAAXrhP,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAUkiP,EAAYrhP,GAItBN,IACIllF,EAAS,IACV6mU,EAAW1yU,UAAW,SAAK,GAC9B+wF,IACIllF,EAAS,IACV6mU,EAAW1yU,UAAW,SAAK,GAC9B+wF,IACIllF,EAAS,IACV6mU,EAAW1yU,UAAW,aAAS,GAClC+wF,IACIllF,EAAS,IACV6mU,EAAW1yU,UAAW,cAAU,GAC5B0yU,GACTvtQ,IAMEwtQ,GAA8B,SAAUthP,GAExC,SAASshP,IACL,OAAkB,OAAXthP,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAUmiP,EAActhP,GAIxBN,IACIllF,EAAS,IACV8mU,EAAa3yU,UAAW,SAAK,GAChC+wF,IACIllF,EAAS,IACV8mU,EAAa3yU,UAAW,SAAK,GACzB2yU,GACTxtQ,IAaEvyB,GAAyB,SAAUy+C,GAMnC,SAASz+C,EAAQj7B,EAAShS,GACtB,OAAO0rF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAykBlD,OA/kBA6rF,GAAU59C,EAASy+C,GAYnBz+C,EAAQ5yC,UAAUoX,UAAY,WAC1BzS,KAAKwlT,sBACLxlT,KAAKiuU,YACLjuU,KAAKkuU,wBAETjgS,EAAQ5yC,UAAUmqT,oBAAsB,WACpCxlT,KAAK+vB,SAAW,IAAIC,GAAYhwB,KAAKgB,QAAQsC,IAC7CtD,KAAK01B,WAAagM,GAAqB1hC,KAAKqb,OAC5Crb,KAAKmuU,iBACLnuU,KAAKw6D,QAAU,EACfx6D,KAAKouU,SAAU,EACfpuU,KAAKquU,gBAETpgS,EAAQ5yC,UAAU4yU,UAAY,WAC1B,IAAIz9S,EAAYhwB,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,QACtDgrU,EAAiB9tU,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,mBAC3DktB,GAAaA,EAAU/vB,YACvB8D,EAAOisB,GAEP89S,GAAkBA,EAAe7tU,YACjC8D,EAAO+pU,IAMfrgS,EAAQ5yC,UAAUsyG,OAAS,WAEvB,GADA3tG,KAAKuuU,WAAY,EACZvuU,KAAKiP,SAUNjP,KAAKwuU,mBACLxuU,KAAK06B,eAAe16B,KAAKwyT,WAAYxyT,KAAKk5B,cAX1B,CAChBl5B,KAAK8xO,WAAW9xO,KAAKouU,SACrB,IAAIh2S,GACAC,QAAQ,EAAOtB,KAAM,gBAAiB9F,QAASjxB,MAEnDA,KAAK0mB,QAAQ,gBAAiB0R,GAC9B,IAAIq2S,EAAazuU,KAAK0uU,qBAAqB1uU,KAAKwyT,WAAYxyT,KAAKk5B,UACjEl5B,KAAK2uU,WAAWF,EAAWtB,SAAUsB,EAAWpB,QAASrtU,KAAK4uU,YAMlE5uU,KAAK0mB,QAAQ,UAAYuK,QAASjxB,OAClC,IAAIgB,EAAUR,SAASyuB,eAAe,oBAClCjuB,GACAA,EAAQuD,UAGhB0pC,EAAQ5yC,UAAU6yU,qBAAuB,WAErC,GADAluU,KAAK6uU,iBACA7uU,KAAKiP,UAAYjP,KAAKmuO,OAAQ,CAE/B,IAAI39M,EAAYxwB,KAAK+vB,SAASyQ,WAAYl9B,GAAItD,KAAKgB,QAAQsC,GAAK,SAChEtD,KAAKgB,QAAQW,YAAY6uB,GAEzB,IAAIs+S,EAAe9uU,KAAK+vB,SAAS+9C,aAAcxqE,GAAItD,KAAKgB,QAAQsC,GAAK,WACrEktB,EAAU7uB,YAAYmtU,GACtB,IAAIxb,EAActzT,KAAK+vB,SAASyF,UAC5BlyB,GAAMtD,KAAKgB,QAAQsC,GAAK,QAAS4hC,eAAgBllC,KAAKilC,OAAOjvB,MAC7DooB,KAAQp+B,KAAKo+B,MAAQp+B,KAAK01B,WAAW9H,YAAangB,QAAWzN,KAAKyN,QAClE6wB,OAAUt+B,KAAKilC,OAAOpP,QAE1Bi5S,EAAantU,YAAY2xT,KAGjCrlR,EAAQ5yC,UAAUszU,WAAa,SAAUxB,EAAUE,EAASl+S,GACxD,GAAInvB,KAAK+uU,OAAOtyU,QAAU,EACtB,OAAO,KAOX,IAAK,IALDuyO,EACA/vN,EAAQ,EACR+vT,EAAchvU,KAAK+vB,SAAS+9C,aAAcxqE,GAAItD,KAAKgB,QAAQsC,GAAK,qBAChEwrU,EAAep+S,GAAW1wB,KAAKgB,QAAQsC,GAAK,UAC5CyJ,EAAoB,EAAf/M,KAAKivU,QAAgB9/S,EAAO,GAAMk+S,EAAUrtU,KAAKi/B,aAAe,GAChE7gC,EAAK,EAAGyE,EAAK7C,KAAK+uU,OAAQ3wU,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACrD,IAAI+6B,EAAQt2B,EAAGzE,GACf4wO,EAAc,IAAIv5M,GAAWz1B,KAAKgB,QAAQsC,GAAK,cAAgB2b,EAAOjf,KAAK2sB,QAAQ1N,GAAQ,EAAG,UAAW,EAAG,MAC5G+vT,EAAYrtU,YAAYs3B,GAAW,IAAI20S,GAAgB7gU,EAAG/M,KAAKquU,YAAYpvT,GAASjf,KAAKw6D,SAAW2yQ,EAAWntU,KAAKi/B,aAAe,IAAK9F,EAAO,IAAI1J,GAAKN,EAAMA,GAAO,GAAI6/M,EAAa,OACtL/vN,IAEJ6vT,EAAantU,YAAYqtU,IAE7B/gS,EAAQ5yC,UAAUqzU,qBAAuB,SAAUlc,EAAYt5R,GAC3D,IAOIxG,EAPA+0R,EAAa/2R,GAAW1wB,KAAKgB,QAAQsC,IACrCsxB,EAAgB,IAAIg5S,GAAgB,EAAG,GACvCsB,EAAc,IAAItB,GAAgB,EAAG,GAErCp9S,EAAYE,GAAW1wB,KAAKgB,QAAQsC,GAAK,QACzCwrU,EAAep+S,GAAW1wB,KAAKgB,QAAQsC,GAAK,UAC5CgwT,EAAc5iS,GAAW1wB,KAAKgB,QAAQsC,GAAK,SAE3C4pU,GAAQ,EACRE,GAAS,EACTD,GAAW,EACXpgU,EAAI,EACJC,EAAI,EAqBR,GApBAhN,KAAKo/B,UAAY,EACG,KAAhBp/B,KAAKmmF,SACLnmF,KAAK6jO,YAAY9tN,QAAU/V,KAAKmvU,SAEhCnvU,KAAK46B,QAAQn+B,OAAS,GACtBi2B,EAAO1yB,KAAKovU,sBAAsB5c,EAAYxyT,KAAKk5B,SAASnsB,EAAG/M,KAAKk5B,SAASlsB,GAC7EkgU,GAAQ,IAGRx6S,EAAO1yB,KAAKitU,gBAAgBza,EAAYt5R,EAAUtE,EAAes6S,GAC5DlvU,KAAKqvU,SAONtiU,GADAqgU,EAAU16S,EAAK3lB,EAAKmsB,EAASnsB,EAAI/M,KAAKuxR,WAAWxkR,GACnC,EAAI/M,KAAKi/B,cALvBkuS,IADAD,EAASx6S,EAAK1lB,EAAKksB,EAASlsB,EAAIhN,KAAKuxR,WAAWvkR,GAEhDA,EAAKkgU,EAAQ,EAAIltU,KAAKi/B,eAOV,KAAhBj/B,KAAKmmF,OAAe,CACpB,IAAImpP,EAAazgT,GAAY7uB,KAAKmmF,OAAQnmF,KAAK4yO,WAAW78N,OAAyB,EAAf/V,KAAKmvU,SACpEhC,EAAWntU,KAAKi/B,aAAe,GAEhCpK,EAAY,MADc,EAAf70B,KAAKivU,SAAiB7B,GAAWF,GAAUC,EAA+B,EAApBntU,KAAKi/B,eACzC,IAAMqwS,EACnC,MAAQ58S,EAAK1c,OAAUo3T,GAAWF,GAAUC,EAA+B,EAApBntU,KAAKi/B,cAAoC,EAAfj/B,KAAKivU,SACtF,IAAMK,EACNC,EAAgBvvU,KAAK+vB,SAASyF,UAC9BlyB,GAAMtD,KAAKgB,QAAQsC,GAAK,eAAgB4hC,eAAgB,EACxD9G,KAAQ,KAAM3wB,QAAW,GAAK6wB,OAAUt+B,KAAK01B,WAAW3H,kBAAmB+L,EAAKjF,IAEpFi6S,EAAantU,YAAY4tU,GAE7B,IAAIhyU,EAAQyC,KAAKilC,OAAOjvB,MAAQ,EAC5Bw5T,EAAY,IAAIj6S,GAAKh4B,EAAQwP,EAAGxP,EAAQyP,EAAG0lB,EAAK1c,MAAQzY,EAAOm1B,EAAK3c,OAASxY,GAYjF,GAXAuxU,EAAatrU,aAAa,UAAW,MACjCxD,KAAKyvU,iBAAoBzvU,KAAKmuO,QAAWnuO,KAAKouU,QAI9CpuU,KAAK0vU,UAAUjoB,EAAY/0R,EAAK3lB,EAAG2lB,EAAK1lB,GAHxChN,KAAK2vU,kBAAkBloB,EAAY/0R,GAKvClC,EAAUhtB,aAAa,UAAWkvB,EAAK3c,OAAS/V,KAAKilC,OAAOjvB,OAAahW,KAAKqvU,SAAa,EAAIrvU,KAAKi/B,eAAe/xB,YACnHsjB,EAAUhtB,aAAa,SAAUkvB,EAAK1c,MAAQhW,KAAKilC,OAAOjvB,OAAYhW,KAAKqvU,SAAiBrvU,KAAKi/B,aAAT,IAAwB/xB,YAChHsjB,EAAUhtB,aAAa,UAAW,KAClC8vT,EAAY9vT,aAAa,I9Q5OjC,SAA8Bu7B,EAAIC,EAAItM,EAAMkC,EAAeqK,EAAcvyB,EAAKC,EAAQH,EAAM0yB,EAAMC,EAAMC,GACpG,IAAIvK,EAAY,GACZwK,EAAS3M,EAAK3lB,EACduyB,EAAS5M,EAAK1lB,EACdgJ,EAAQ0c,EAAK3lB,EAAI2lB,EAAK1c,MACtBD,EAAS2c,EAAK1lB,EAAI0lB,EAAK3c,OAmE3B,OAlEAqpB,EAAYA,GAAwB,EAChC1yB,GAKAmoB,GAJAA,EAAYA,EAAUra,OAAO,OAAuB,KAAO8kB,EAASN,GAAM,MAAQK,EAAS,IACrFC,EAAS,KAAOD,EAASN,GAAM,IAAMO,EAAS,QAClCtpB,EAAQ+oB,GAAM,MAAiB,MAAQ/oB,EAAQ,IAC3DspB,EAAS,MAAgB,KAAOA,EAASN,KACzBxkB,OAAO,QAAuB,KAAOzE,EAASipB,GAAM,MAAQhpB,EAAQ,MACzE,KAAOA,EAAQ+oB,GAAM,OACjB,IAAjBE,IAEApK,GADAA,EAAYA,EAAUra,OAAO,OAAcoa,EAAc7nB,EAAIkyB,EAAe,GAAK,QAC3DzkB,OAAO,OAAc0kB,EAAOE,GAAa,KAAOrpB,EAASkpB,EAAeG,IAC9FvK,GAAa,QAAsB,KAAO9e,EAASkpB,GAAgB,KAAOC,EAAOE,GAC7E,KAAOrpB,EAASkpB,EAAeG,IAGnCvK,EADCD,EAAc7nB,EAAIkyB,EAAe,EAAKI,EAC3BxK,EAAUra,OAAO,OAAcoa,EAAc7nB,EAAIkyB,EAAe,GAAK,IAAMlpB,EACnF,OAAcspB,EAASN,GAAM,IAAMhpB,EAAS,MAAQspB,EAAS,IAC3DtpB,EAAS,MAAiB,KAAOA,EAASipB,GAAM,MAGjC,IAAjBC,EACYpK,EAAUra,OAAO,OAAc6kB,EAASN,GAAM,IAAMhpB,EAAS,MAAQspB,EAAS,IACpFtpB,EAAS,MAAiB,KAAOA,EAASipB,GAAM,MAG1CnK,EAAUra,OAAO,QAAwB,KAAOzE,EAASipB,GAAM,OAI9EryB,GAGLkoB,GAFAA,EAAYA,EAAUra,OAAO,OAAuB,KAAO8kB,EAASN,GAAM,MAAQK,EAAS,MAC1E,KAAOA,EAASN,GAAM,MAAiB,OAAcnK,EAAc7nB,EAAIkyB,EAAe,GAAK,QACtFzkB,OAAO,OAAc0kB,EAAOE,GAAa,KAAOxK,EAAc5nB,EAAIoyB,IAIxFvK,GAFAA,GADAA,GAAa,QAAsB,IAAOD,EAAe,EAAI,KAAOsK,EAAOE,GAAa,KAAOxK,EAAc5nB,EAAIoyB,IAC3F5kB,OAAO,OAAcoa,EAAc7nB,EAAIkyB,EAAe,GAAK,MAAiB,OAC3FjpB,EAAQ+oB,GAAM,MAAiB,QAAkB,MAAiB,MAAgB,KAAOO,EAASN,KACnFxkB,OAAO,QAAuB,KAAOzE,EAASipB,GAAM,QAAkB,MAC3E,KAAOhpB,EAAQ+oB,GAAM,MAClC,OAAcM,EAASN,GAAM,MAAiB,QAAmB,MACpD,MAAiB,KAAOhpB,EAASipB,GAAM,OAEnDxyB,GAKLqoB,GAFAA,GAFAA,EAAYA,EAAUra,OAAO,OAAuB,KAAO8kB,EAASN,GAAM,MAAQK,EAAS,MAC1E,KAAOA,EAASN,GAAM,QACjBvkB,OAAO,OAAcxE,EAAQ+oB,GAAM,MAAiB,QAAkB,MAC3E,MAAgB,KAAOO,EAASN,GAAM,QAAuB,KAAOpK,EAAc5nB,EAAIiyB,EAAe,KAChGzkB,OAAO,OAAcxE,EAAQipB,EAAeG,GAAa,KAAOD,EAAOC,IAI7FvK,GAFAA,GADAA,GAAa,OAAS7e,EAAQipB,GAAgB,MAAe,KAAOjpB,EAAQipB,EAAeG,GAAa,KAAOD,EAAOC,IAChG5kB,OAAO,QAAuB,KAAOoa,EAAc5nB,EAAIiyB,EAAe,GACxF,QAAuB,KAAOlpB,EAASipB,GAAM,MAAQhpB,EAAQ,MAAiB,KAAOA,EAAQ+oB,GAAM,QACjFvkB,OAAO,OAAc6kB,EAASN,GAAM,MAAiB,MAAQM,EAAS,MAC3E,MAAiB,KAAOtpB,EAASipB,GAAM,QAKxDnK,GAFAA,EAAYA,EAAUra,OAAO,MAAa6kB,EAASN,GAAM,MAAiB,QAAmB,MAC5E,MAAiB,KAAOO,EAASN,GAAM,QAAwB,KAAOpK,EAAc5nB,EAAIiyB,EAAe,KAClGzkB,OAAO,OAAc6kB,EAASJ,EAAeG,GAAa,KAAOD,EAAOC,IAK9FvK,GAHAA,GADAA,GAAa,OAASwK,EAASJ,GAAgB,MAAe,KAAOI,EAASJ,EAAeG,GAAa,KAAOD,EAAOC,IAClG5kB,OAAO,QAAwB,KAAOoa,EAAc5nB,EAAIiyB,EAAe,GACzF,QAAwB,KAAOlpB,EAASipB,GAAM,MAAQK,EAAS,MAClD,KAAOA,EAASN,GAAM,QACjBvkB,OAAO,OAAcxE,EAAQ+oB,GAAM,MAAiB,MAAQ/oB,EAAQ,MACzE,MAAgB,KAAOD,EAASipB,GAC7C,QAAuB,KAAOM,EAASN,GAAM,MAAQhpB,EAAQ,MAChD,KAAOA,EAAQ+oB,GAAM,MAAiB,OAEpDlK,E8QoK2BS,CAAct1B,KAAK05B,GAAI15B,KAAK25B,GAAI61S,EAAW56S,EAAe50B,KAAKi/B,aAAciuS,EAAOC,EAAUC,EAAQ8B,EAAYniU,EAAGmiU,EAAYliU,EAAGhN,KAAKo/B,YACnKp/B,KAAK4vU,aAAc,CACnBtc,EAAY9vT,aAAa,SAAUgI,GAAQokG,KAAO,GAAK,8BACvD,IAAI77C,EAAS,sGACbA,GAAU,yGACVA,GAAU,oGACV,IAAI87Q,EAAa7vU,KAAK+vB,SAASyqF,aAC/Bq1N,EAAWrsU,aAAa,KAAM,0BAC9BsrU,EAAantU,YAAYkuU,GACzBA,EAAW7tU,UAAY+xD,EAI3B,OAFAu/P,EAAY9vT,aAAa,SAAUxD,KAAKilC,OAAOpP,OAC/C71B,KAAK8vU,WAAW,IAAIlC,GAAgB7gU,EAAGC,GAAImgU,GAAWC,IAAWF,IAAUC,EAAUz6S,GAC9E,IAAIi7S,GAAKR,GAAWC,IAAWF,IAAUC,IAEpDl/R,EAAQ5yC,UAAUy0U,WAAa,SAAU38S,EAAOg6S,EAAUE,EAAS36S,GAC/D,IAAI1xB,EAAUR,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,SACpD6pU,GACAnsU,EAAQwC,aAAa,YAAa,eAAiBxD,KAAKi/B,aAAe,KAEvEouS,GACArsU,EAAQwC,aAAa,YAAa,aAAexD,KAAKi/B,aAAe,QAG7EgP,EAAQ5yC,UAAU00U,kBAAoB,WAClC/vU,KAAKmuU,iBACgE,KAAjEnuU,KAAKmmF,OAAO52E,QAAQ,OAAQ,IAAIA,QAAQ,SAAU,IAAIW,SACtDlQ,KAAKmuU,cAAgBnuU,KAAKmuU,cAAc3zT,OAAOxa,KAAKmmF,SAExDnmF,KAAKmuU,cAAgBnuU,KAAKmuU,cAAc3zT,OAAOxa,KAAK46B,UAExDqT,EAAQ5yC,UAAUy2O,WAAa,SAAUk+F,GACrC,IAII1tE,EAIA9iO,EAEA6mB,EACA4pR,EAXAl6T,EAAS,EACTC,EAAQ,EACRk6T,EAAW,EAIXnhT,EAAOrwB,KAAWsB,KAAK4yO,UAAW,MAAM,GAAS,WACjDk8F,EAAep+S,GAAW1wB,KAAKgB,QAAQsC,GAAK,UAE5C6sU,EAAa,GAGjBnwU,KAAK+vU,oBACL,IAAIn+M,EAAgB5xH,KAAKmmF,OAAO52E,QAAQ,OAAQ,IAAIA,QAAQ,SAAU,IAAIW,OACtEkgU,EAAiC,KAAlBx+M,EAAwB5xH,KAAKmvU,QAAU,EACtD9sG,GAAQ,EACRguG,GAAW,EACfrwU,KAAKquU,eACL,IAAIO,EAAc5uU,KAAK+uU,OAAOtyU,OAAS,EAAK,GAAK,EAC7C6zU,EAAiBtwU,KAAK+uU,OAAOtyU,OAAS,EAAK,EAAI,EAG/Cs2D,EAAM,GAAKp3C,WADA,QACyBA,WAAWoT,EAAKI,MACnD6gT,IACDv/S,GAAczwB,KAAKgB,QAAQsC,GAAK,SAChCmtB,GAAczwB,KAAKgB,QAAQsC,GAAK,gBAChCmtB,GAAczwB,KAAKgB,QAAQsC,GAAK,oBAChCmtB,GAAc,2BAIlB,IAAK,IAFDzd,EAAU,IAAI4iB,GAAW51B,KAAKgB,QAAQsC,GAAK,QAAwB,EAAftD,KAAKivU,QAA6B,EAAfjvU,KAAKmvU,QAA6B,EAAfnvU,KAAKw6D,SAAgC,IAAjBx6D,KAAKmvU,QAAgB,EAAI,GAAK,QAAS,IACrJ96T,E9QhDZ,SAA4BrB,EAAS+b,EAAM8G,EAAOv1B,GAC9C,IACI0uB,EAGAF,EAJA2Q,KAGA1P,EAAW,IAAIC,GAAY,IAoB/B,OAlBAyP,GAEIn8B,GAAM0P,EAAQ1P,GACdyJ,EAAKiG,EAAQjG,EACbC,EAAKgG,EAAQhG,EACboxB,KAAQvI,EACR5F,YAAalB,EAAKI,KAClBe,aAAcnB,EAAKM,UACnBc,cAAepB,EAAKO,WACpBc,cAAerB,EAAKK,WACpBiB,cAAerd,EAAQa,OACvBxG,UAAa2F,EAAQ3F,UACrBI,QAAWshB,EAAKthB,QAChBiyB,oBAAqB1sB,EAAQ2sB,UAEjC7Q,EAA+B,iBAAjB9b,EAAQ8b,KAAoB9b,EAAQ8b,KAAO9b,EAAQ8b,KAAK,GACtEE,EAAae,EAASO,WAAWmP,EAAe3Q,GAChDxuB,EAAOqB,YAAYqtB,GACZA,E8QwBiB2G,CAAY3iB,EAAS+b,EAAM,KAAM+/S,GAC5CzoT,EAAI,EAAGylN,EAAe9rO,KAAKmuU,cAAc1xU,OAAQ4pB,EAAIylN,EAAczlN,IAAK,CAC7E,IAAIib,EAAiBthC,KAAKmuU,cAAc9nT,GAAG9W,QAAQ,gBAAiB,OAC/DA,QAAQ,kBAAmB,QAC3BrS,MAAM,YACJ2xB,GAAY7uB,KAAKmuU,cAAc9nT,GAAI0I,GAC/B,IAAN1I,GAA+B,KAAlBurG,GACd5xH,KAAKquU,YAAY7pU,MAAwB,KAAlBotH,EAAwB5xH,KAAY,QAAI,GAAKgT,EAAQhG,EAAI+I,GAEpF,IAAK,IAAI5Z,EAAI,EAAG0F,EAAMy/B,EAAe7kC,OAAQN,EAAI0F,EAAK1F,IAAK,CAEvD+zU,EAAW,EACXG,GAAW,EACXt6T,GAAUg9C,EACV,IAAK,IAAI0uQ,EAAM,EAAGroK,GAJlBkpG,EAAQhhO,EAAenlC,GAAGoT,QAAQ,OAAQ,WAAWA,QAAQ,SAAU,YAAYrS,MAAM,SAIzDT,OAAQglU,EAAMroK,EAAOqoK,IAEa,MAD9Dp7Q,EAAOi8M,EAAMm/D,IACJlyT,QAAQ,OAAQ,IAAIA,QAAQ,SAAU,IAAIW,SAC/CggU,GA3BC,EA4BGG,IAAahuG,GACb4tG,GAAgBljU,EAAmB,EAAf/M,KAAKivU,SAAgBL,EAAa0B,GAClDv9Q,GAAIA,GAAM,EAAaq9Q,EAAc,GAAIhyS,KAAM,IACnDgyS,EAAc,MAIVH,EADA5tG,GAASguG,GACOtjU,EAAsB,KAAlB6kH,EAAyC,EAAf5xH,KAAKivU,SAAgBL,EAAa0B,GACtD,EAAftwU,KAAKivU,YAMxBoB,GAAW,EACX7wS,EAAex/B,KAAK+vB,SAAS6P,YAAYqwS,EAAa,IACtD57T,EAAc1S,YAAY69B,GACtB6mB,EAAK9nD,QAAQ,QAAU,GACvB4xU,EAAa,mBACbphT,EAAKK,WAAa,OAClB,EAAe5rB,aAAa,OAAQxD,KAAK4yO,UAAU/8M,OAAS71B,KAAK01B,WAAW7H,oBAG5EsiT,EAAa,GACbphT,EAAKK,WAAa,SAClB,EAAe5rB,aAAa,OAAQxD,KAAK4yO,UAAU/8M,OAAS71B,KAAK01B,WAAW5H,oBAEhF,EAAe9R,YAAcqqC,EAAOA,EAAK92C,QAAQ,wBAAyB,IAC1E2gU,GAAYrhT,GAAYw3B,EAAMt3B,GAAM/Y,MACjB,KAAfm6T,GACA3wS,EAAah8B,aAAa,QAAS2sU,GAEvC9tG,GAAQ,GAGhB6tG,GA/DS,EAgETl6T,EAAQ3J,KAAKC,IAAI0J,EAAOk6T,IAGhClwU,KAAK6jO,YAAc,IAAIp0M,GAAKzZ,GAASA,EAAQ,EAAK,EAAIhW,KAAKivU,QAAW,GAAIl5T,GAC1E/V,KAAK6jO,YAAY7tN,OAAU44T,EAAa0B,EACxC,IAAItvU,EAAWqT,EAAc9C,WAAW,GACxC,GAAsB,KAAlBqgH,GAAwB5wH,EAAS,CACjC+tB,EAAKK,WAAa,OAClB,IAAImhT,GAAWvwU,KAAK6jO,YAAY7tN,MAAS,EAAIhW,KAAKw6D,SAAY,EAAI3rC,GAAY+iG,EAAe7iG,GAAM/Y,MAAQ,EAC3GhV,EAAQwC,aAAa,IAAK+sU,EAAQrjU,cAG1C+gC,EAAQ5yC,UAAUq/B,eAAiB,SAAU83R,EAAYt5R,GACrD,IAAId,GAAaC,QAAQ,EAAOtB,KAAM,gBAAiB9F,QAASjxB,MAChEA,KAAK0mB,QAAQ,gBAAiB0R,GAC9B,IAAI93B,EAASE,SAASyuB,eAAejvB,KAAKgB,QAAQsC,IAC9CktU,EAAelwU,EAAO6E,kBAI1B,GAHIqrU,GACAA,EAAajsU,SAEZ6zB,EAASC,OAmBV3H,GAAW1wB,KAAKgB,QAAQsC,GAAK,YAAYiB,aAnBvB,CAGlB,IAFA,IAAIs2B,EAAkB76B,KAAKw6B,WAAWx6B,KAAKxD,MACvCkG,EAAO1C,KAAKmB,cAAc,OAASmC,GAAItD,KAAKgB,QAAQsC,GAAK,oBACtDu3B,GAAmBA,EAAgBp+B,OAAS,GAC/CiG,EAAKf,YAAYk5B,EAAgB,IAErCv6B,EAAOqB,YAAYe,GACnB,IAAIgwB,EAAO1yB,KAAKgB,QAAQ4K,wBACxB5L,KAAKw6D,QAAU,EACfx6D,KAAK6jO,YAAc,IAAIp0M,GAAKiD,EAAK1c,MAAO0c,EAAK3c,QAC7C,IAAIw3T,EAAcvtU,KAAKitU,gBAAgBza,EAAYt5R,EAAU,IAAI00S,GAAgB,EAAG,GAAI,IAAIA,GAAgB,EAAG,KAC3G5tU,KAAKyvU,iBAAoBzvU,KAAKmuO,QAAWnuO,KAAKouU,QAI9CpuU,KAAK0vU,UAAU1vU,KAAKgB,QAASusU,EAAYxgU,EAAGwgU,EAAYvgU,GAHxDhN,KAAK2vU,kBAAkB3vU,KAAKgB,QAASusU,KAUjDt/R,EAAQ5yC,UAAU+zU,sBAAwB,SAAUr5S,EAAQhpB,EAAGC,GAC3D,IAAIgJ,EAAQhW,KAAK6jO,YAAY7tN,MAAS,EAAIhW,KAAKivU,QAC3Cl5T,EAAS/V,KAAK6jO,YAAY9tN,OAAU,EAAI/V,KAAKmvU,QAC7C5B,EAAc,IAAIh4S,GAAKxoB,EAAI,EAAI/M,KAAKw6D,QAASxtD,EAAI+I,EAAS/V,KAAKw6D,QAASxkD,EAAOD,GAOnF,OANIw3T,EAAYvgU,EAAI+oB,EAAO/oB,IACvBugU,EAAYvgU,GAAMugU,EAAYx3T,OAAS,EAAI/V,KAAKw6D,SAEhD+yQ,EAAYxgU,EAAIwgU,EAAYv3T,MAAQ+f,EAAOhpB,EAAIgpB,EAAO/f,QACtDu3T,EAAYxgU,GAAMwgU,EAAYv3T,MAAQ,EAAIhW,KAAKw6D,SAE5C+yQ,GAEXt/R,EAAQ5yC,UAAU4xU,gBAAkB,SAAUl3S,EAAQ06S,EAAgB77S,EAAes6S,GACjF,IAAIh2S,EAAW,IAAI00S,GAAgB6C,EAAe1jU,EAAG0jU,EAAezjU,GAChEgJ,EAAQhW,KAAK6jO,YAAY7tN,MAAS,EAAIhW,KAAKivU,QAC3Cl5T,EAAS/V,KAAK6jO,YAAY9tN,OAAU,EAAI/V,KAAKmvU,QAC7CziG,EAAe1sO,KAAK2L,OACpB+kU,EAAQ1wU,KAAKuxR,WAAWxkR,EACxB4jU,EAAQ3wU,KAAKuxR,WAAWvkR,EACxBwgU,EAAUz3S,EAAOhpB,EACjB0gU,EAAU13S,EAAO/oB,EAgErB,OA/DKhN,KAAKqvU,UAiCNn2S,EAAW,IAAI00S,GAAgB10S,EAASnsB,EAAI2jU,EAAQhkG,EAAcxzM,EAASlsB,EAAI2jU,EAAQ3wU,KAAK6jO,YAAY9tN,OAAS,EAAK/V,KAAY,SAClI40B,EAAc5nB,EAAIkiU,EAAYliU,EAAI+I,EAAS,GACtCmjB,EAASnsB,EAAIiJ,EAAQhW,KAAKi/B,aAAeuuS,EAAUz3S,EAAO/f,OAAWhW,KAAe,cACrFk5B,EAASnsB,GAAK0jU,EAAe1jU,EAAIgpB,EAAO/f,MAAQ+f,EAAO/f,MAAQy6T,EAAe1jU,GACxE2jU,EAAQhkG,GAAgB12N,EAAQhW,KAAKi/B,eAE3C/F,EAASnsB,EAAIygU,IACbt0S,EAASnsB,GAAK0jU,EAAe1jU,EAAI,EAAI,EAAI0jU,EAAe1jU,GAAK2jU,EAAQhkG,GAErExzM,EAASlsB,GAAKygU,IACd74S,EAAc5nB,GAAMygU,EAAUv0S,EAASlsB,EACvCkiU,EAAYliU,GAAMygU,EAAUv0S,EAASlsB,EACrCksB,EAASlsB,EAAIygU,GAEbv0S,EAASlsB,EAAI+I,GAAU03T,EAAU13S,EAAOhgB,SACxC6e,EAAc5nB,GAAOksB,EAASlsB,EAAI+I,GAAW03T,EAAU13S,EAAOhgB,QAC9Dm5T,EAAYliU,GAAOksB,EAASlsB,EAAI+I,GAAW03T,EAAU13S,EAAOhgB,QAC5DmjB,EAASlsB,GAAOksB,EAASlsB,EAAI+I,GAAW03T,EAAU13S,EAAOhgB,SAEzD6e,EAAc5nB,EAAIhN,KAAKi/B,aAAe,EAAIlpB,EAAS/V,KAAK25B,KACxD/E,EAAc5nB,EAAI+I,EAAS/V,KAAK25B,GAAK35B,KAAKi/B,aAAe,EACzDiwS,EAAYliU,EAAI+I,EAChB/V,KAAKo/B,UAAY,GAEjBxK,EAAc5nB,EAAIhN,KAAKi/B,aAAe,EAAIj/B,KAAK25B,KAC/C/E,EAAc5nB,EAAIhN,KAAK25B,GAAK35B,KAAKi/B,aAAe,EAChDiwS,EAAYliU,EAAI,EAChBhN,KAAKo/B,UAAY,KA3DrBlG,EAAW,IAAI00S,GAAgB10S,EAASnsB,EAAI2jU,EAAQ1wU,KAAK6jO,YAAY7tN,MAAQ,EAAIhW,KAAKw6D,QAASthC,EAASlsB,EAAI2jU,EAAQ3wU,KAAK6jO,YAAY9tN,OAAU,EAAI/V,KAAKw6D,QAAWx6D,KAAKi/B,aAAeytM,GACvL93M,EAAc7nB,EAAImiU,EAAYniU,EAAIiJ,EAAQ,GACtCkjB,EAASlsB,EAAIygU,GAAYztU,KAAe,cACxCk5B,EAASlsB,GAAKyjU,EAAezjU,EAAI,EAAI,EAAIyjU,EAAezjU,GAAK2jU,EAAQjkG,GAErExzM,EAASlsB,EAAI+I,EAAS/V,KAAKi/B,aAAewuS,EAAU13S,EAAOhgB,SAC3DmjB,EAASlsB,GAAKyjU,EAAezjU,EAAI+oB,EAAOhgB,OAASggB,EAAOhgB,OAAS06T,EAAezjU,GAC1E2jU,EAAQ3wU,KAAK6jO,YAAY9tN,OAAU,EAAI/V,KAAKw6D,QAAWx6D,KAAKi/B,aAAeytM,GAErFwiG,EAAYniU,EAAIiJ,EAAQ,EACpBkjB,EAASnsB,EAAIygU,IACb54S,EAAc7nB,GAAMygU,EAAUt0S,EAASnsB,EACvCmiU,EAAYniU,GAAMygU,EAAUt0S,EAASnsB,EACrCmsB,EAASnsB,EAAIygU,GAEbt0S,EAASnsB,EAAIiJ,EAAQw3T,EAAUz3S,EAAO/f,QACtC4e,EAAc7nB,GAAOmsB,EAASnsB,EAAIiJ,GAAUw3T,EAAUz3S,EAAO/f,OAC7Dk5T,EAAYniU,GAAOmsB,EAASnsB,EAAIiJ,GAAUw3T,EAAUz3S,EAAO/f,OAC3DkjB,EAASnsB,GAAOmsB,EAASnsB,EAAIiJ,GAAUw3T,EAAUz3S,EAAO/f,QAExD4e,EAAc7nB,EAAI/M,KAAKi/B,aAAe,EAAIjpB,EAAQhW,KAAK05B,KACvD9E,EAAc7nB,EAAIiJ,EAAQhW,KAAK05B,GAAK15B,KAAKi/B,aAAe,EACxDiwS,EAAYniU,EAAIiJ,EAChBhW,KAAKo/B,UAAY,GAEjBxK,EAAc7nB,EAAI/M,KAAKi/B,aAAe,EAAIj/B,KAAK05B,KAC/C9E,EAAc7nB,EAAI/M,KAAK05B,GAAK15B,KAAKi/B,aAAe,EAChDiwS,EAAYniU,EAAI,EAChB/M,KAAKo/B,UAAY,IAkClB,IAAI7J,GAAK2D,EAASnsB,EAAGmsB,EAASlsB,EAAGgJ,EAAOD,IAEnDk4B,EAAQ5yC,UAAUs0U,kBAAoB,SAAUloB,EAAY/0R,GACxD,IAGIk+S,EAHA7wU,EAAQC,KACR+M,EAAI4O,WAAW8rS,EAAW/iT,MAAM8H,MAChCQ,EAAI2O,WAAW8rS,EAAW/iT,MAAMgI,KAEpC,IAAIorB,OAAcC,QAAQ0vR,GACtBv8S,SAAU,IACV8sB,SAAU,SAAU/3B,GAChB2wU,EAAc3wU,EAAKg4B,UAAYh4B,EAAKiL,SACpCu8S,EAAW/iT,MAAMkqC,UAAY,KAC7B64Q,EAAW/iT,MAAM8H,KAAQO,EAAI6jU,GAAcl+S,EAAK3lB,EAAIA,GAAM,KAC1D06S,EAAW/iT,MAAMgI,IAAOM,EAAI4jU,GAAcl+S,EAAK1lB,EAAIA,GAAM,MAE7DgS,IAAK,SAAUmN,GACXpsB,EAAM2vU,UAAUjoB,EAAY/0R,EAAK3lB,EAAG2lB,EAAK1lB,GACzCjN,EAAM2mB,QAAQ,qBAAuBuK,QAASlxB,QAI1DkuC,EAAQ5yC,UAAUq0U,UAAY,SAAUjoB,EAAY16S,EAAGC,GACnDy6S,EAAW/iT,MAAM8H,KAAOO,EAAI,KAC5B06S,EAAW/iT,MAAMgI,IAAMM,EAAI,MAE/BihC,EAAQ5yC,UAAUmzU,iBAAmB,WACjC,GAAIxuU,KAAKiP,SACL,IAEQzO,SAASgB,iBAAiBxB,KAAKiP,UAAUxS,SACzCuD,KAAKw6B,WAAaC,GAAiBj6B,SAASmC,cAAc3C,KAAKiP,UAAUjN,UAAUkO,SAG3F,MAAOrP,GACHb,KAAKw6B,WAAaC,GAAiBz6B,KAAKiP,YAKpDg/B,EAAQ5yC,UAAUw1U,QAAU,WACxB,IAAI9wU,EAAQC,KACR6pI,EAAiBn5G,GAAW1wB,KAAKgB,QAAQsC,IAC7C,GAAIumI,EAAgB,CAChB,IAAIinM,EAAiBjnM,EAAe9sH,WAChCg0T,EAAYp1T,WAAWm1T,EAAej+T,aAAa,aAAe,EACtE,IAAIilB,OAAcC,QAAQ+4S,GACtB5lU,SAAU,IACV8sB,SAAU,SAAU/3B,GAEhBF,EAAM+pJ,kBAAkBgnL,EAAgBC,EAAY9wU,EAAKg4B,UAAYh4B,EAAKiL,WAE9E8T,IAAK,SAAUmN,GACXpsB,EAAMwuU,WAAY,EAClBxuU,EAAMixU,aAAaF,QAKnC7iS,EAAQ5yC,UAAUyuJ,kBAAoB,SAAUmnL,EAAcxjU,EAASwqB,GACnEg5S,EAAavsU,MAAMkqC,UAAY,GAC/BqiS,EAAaztU,aAAa,WAAYiK,EAAUwqB,GAAW/qB,aAK/D+gC,EAAQ5yC,UAAU21U,aAAe,SAAUC,GACvCA,EAAaztU,aAAa,UAAW,KACjCxD,KAAKiP,WAAajP,KAAKmuO,SACvB8iG,EAAavsU,MAAM6pC,QAAU,QAEjCvuC,KAAK0mB,QAAQ,qBAAuBuK,QAASjxB,QAMjDiuC,EAAQ5yC,UAAU+yG,eAAiB,WAE/B,OAAOpuG,KAAK4uG,kBAMhB3gE,EAAQ5yC,UAAU0kC,cAAgB,WAC9B,MAAO,WAMXkO,EAAQ5yC,UAAUiX,QAAU,WACxBo6E,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKgB,QAAQ8C,UAAUS,OAAO,cAOlC0pC,EAAQ5yC,UAAU0tF,kBAAoB,SAAUiF,EAASC,GACrDjuF,KAAKouU,SAAU,EACfpuU,KAAK2tG,UAETvhB,IACIllF,GAAS,IACV+mC,EAAQ5yC,UAAW,cAAU,GAChC+wF,IACIllF,GAAS,IACV+mC,EAAQ5yC,UAAW,cAAU,GAChC+wF,IACIllF,GAAS,IACV+mC,EAAQ5yC,UAAW,oBAAgB,GACtC+wF,IACIllF,EAAS,OACV+mC,EAAQ5yC,UAAW,YAAQ,GAC9B+wF,IACIllF,EAAS,KACV+mC,EAAQ5yC,UAAW,cAAU,GAChC+wF,IACIllF,EAAS,MACV+mC,EAAQ5yC,UAAW,eAAW,GACjC+wF,IACIrkF,GAAUonB,KAAM,OAAQC,WAAY,SAAUyG,MAAO,KAAMxG,UAAW,SAAUC,WAAY,YAAcu+S,KAC3G5/R,EAAQ5yC,UAAW,iBAAa,GACnC+wF,IACIllF,EAAS,OACV+mC,EAAQ5yC,UAAW,gBAAY,GAClC+wF,IACIllF,GAAS,IACV+mC,EAAQ5yC,UAAW,uBAAmB,GACzC+wF,IACIllF,GAAS,IACV+mC,EAAQ5yC,UAAW,gBAAY,GAClC+wF,IACIllF,GAAS,IACV+mC,EAAQ5yC,UAAW,kBAAc,GACpC+wF,IACIrkF,GAAU8tB,MAAO,UAAW7f,MAAO,IAAO83T,KAC3C7/R,EAAQ5yC,UAAW,cAAU,GAChC+wF,IACIllF,OACD+mC,EAAQ5yC,UAAW,eAAW,GACjC+wF,IACIllF,EAAS,KACV+mC,EAAQ5yC,UAAW,kBAAc,GACpC+wF,IACIrkF,GAAUgF,EAAG,EAAGC,EAAG,GAAKghU,KACzB//R,EAAQ5yC,UAAW,kBAAc,GACpC+wF,IACIllF,OACD+mC,EAAQ5yC,UAAW,eAAW,GACjC+wF,IACIllF,OACD+mC,EAAQ5yC,UAAW,cAAU,GAChC+wF,IACIrkF,GAAUgF,EAAG,EAAGC,EAAG,GAAKghU,KACzB//R,EAAQ5yC,UAAW,gBAAY,GAClC+wF,IACIllF,EAAS,IACV+mC,EAAQ5yC,UAAW,cAAU,GAChC+wF,IACIllF,EAAS,IACV+mC,EAAQ5yC,UAAW,UAAM,GAC5B+wF,IACIllF,EAAS,IACV+mC,EAAQ5yC,UAAW,UAAM,GAC5B+wF,IACIllF,EAAS,IACV+mC,EAAQ5yC,UAAW,eAAW,GACjC+wF,IACIllF,EAAS,IACV+mC,EAAQ5yC,UAAW,eAAW,GACjC+wF,IACIllF,EAAS,KACV+mC,EAAQ5yC,UAAW,oBAAgB,GACtC+wF,IACIllF,EAAS,OACV+mC,EAAQ5yC,UAAW,YAAQ,GAC9B+wF,IACIllF,EAAS,aACV+mC,EAAQ5yC,UAAW,aAAS,GAC/B+wF,IACIrkF,GAAUgF,EAAG,EAAGC,EAAG,EAAGgJ,MAAO,EAAGD,OAAQ,GAAKg4T,KAC9C9/R,EAAQ5yC,UAAW,kBAAc,GACpC+wF,IACItjF,KACDmlC,EAAQ5yC,UAAW,qBAAiB,GACvC+wF,IACItjF,KACDmlC,EAAQ5yC,UAAW,cAAU,GAChC+wF,IACItjF,KACDmlC,EAAQ5yC,UAAW,yBAAqB,GAC3C4yC,EAAUm+C,IACNhjF,GACD6kC,IAELk/D,IC5sBEthB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAmBxCglP,GAA6B,SAAUxkP,GAMvC,SAASwkP,EAAYrhT,GACjB,IAAI9vB,EAAQ2sF,EAAOprF,KAAKtB,KAAM6vB,IAAU7vB,KAIxC,OAHAD,EAAMiB,QAAUjB,EAAM8vB,MAAM7uB,QAC5BjB,EAAM6yO,UAAY/iN,EAAMoB,QAAQ2hN,UAChC7yO,EAAM4S,QAAUkd,EACT9vB,EAyNX,OAnOA8rF,GAAUqlP,EAAaxkP,GAYvBwkP,EAAY71U,UAAUq1B,WAAa,SAAUptB,GACzC,OAAO9C,SAASyuB,eAAe3rB,IAOnC4tU,EAAY71U,UAAU81U,kBAAoB,SAAUC,GAMhD,OALApxU,KAAKqvU,SAAWrvU,KAAK6vB,MAAMsG,oBAC3Bn2B,KAAKmmF,OAA0C,OAAhCnmF,KAAK2S,QAAQse,QAAQk1D,OAC9BnmF,KAAK2S,QAAQse,QAAc,OAAI,oBAAsB,wBACpDjxB,KAAK2S,QAAQse,QAAc,OAClCjxB,KAAKmuU,iBACAiD,EAGE,KAFIpxU,KAAKmB,iBAIpB+vU,EAAY71U,UAAU8F,cAAgB,WAClC,IAAIsmT,EAAajnT,SAASW,cAAc,OAIxC,OAHAsmT,EAAWnkT,GAAKtD,KAAKgB,QAAQsC,GAAK,WAClCmkT,EAAWpkT,UAAY,eACvBokT,EAAWjkT,aAAa,QAAS,qDAC1BikT,GAEXypB,EAAY71U,UAAUwtO,SAAW,SAAUrsO,EAAM4xU,EAAS3mB,EAAYjtF,GAClE,QAAIh+N,EAAKuiB,OAAOwvN,gBAERvuO,KAAK4lO,cAAcphO,KAAKhI,GAK5BwD,KAAKwsU,gBACD/kB,IAAejnT,SAASyuB,eAAew4R,EAAWnkT,KAClD9C,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,sBAAsB3B,YAAY8lT,IAEzE,IAIfypB,EAAY71U,UAAUg2U,gBAAkB,SAAUxhT,GAG9C,IAAK,IAFD7R,EAEK7hB,EAAI,EAAG0F,EAAM7B,KAAK6lO,eAAeppO,OAAQN,EAAI0F,EAAK1F,KACvD6hB,EAAOhe,KAAK6lO,eAAe1pO,IAClB4iB,OAAOinN,aACRhoN,EAAKe,OAAO+X,SACZ92B,KAAKsxU,eAAetzT,EAAKe,OAAQf,EAAKmV,MAAMlhB,OAAO,GAIlD+L,EAAKe,OACFknN,OAAOnvM,SAAgC,YAArB9Y,EAAKe,OAAOrY,MAA2C,WAArBsX,EAAKe,OAAOrY,OACxE1G,KAAK6lO,eAAe3mJ,QACpBr9E,GAAO,IAInBqvU,EAAY71U,UAAUi2U,eAAiB,SAAUvyT,EAAQ6Y,EAAY25S,GACjE,IAAIvwU,EAAUhB,KAAK0wB,WAAW1wB,KAAKgB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAQ,UAAY2lB,GACpF52B,GACAA,EAAQwC,aAAa,WAAY+tU,EAAYxyT,EAAOtR,QAAU,EAAIsR,EAAOtR,SAASP,aAG1FgkU,EAAY71U,UAAUm2U,gBAAkB,WACpC,IAAK,IAAIpzU,EAAK,EAAGyE,EAAK7C,KAAK4lO,cAAexnO,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAI4f,EAAOnb,EAAGzE,GACV4f,EAAKe,OAAOinN,cAAyC,WAAzBhoN,EAAKe,OAAOosL,UACxCnrM,KAAKsxU,eAAetzT,EAAKe,OAAQf,EAAKmV,MAAMlhB,OAAO,KAI/Di/T,EAAY71U,UAAUo5B,cAAgB,SAAU5E,EAAOu+S,EAASjoP,EAAQjtD,EAAUu4S,EAAct+S,EAAO47S,EAAQpjU,EAAQoqB,EAAQ27S,EAAaC,QACpH,IAAhBD,IAA0BA,EAAc,WACtB,IAAlBC,IAA4BA,EAAgB,MAChD,IAAI5yT,EAAS/e,KAAK4lO,cAAc,GAAG7mN,OAC/B2zE,EAAS7iE,EAAM61R,eAAiB71R,EAAM+hT,0BACtCxD,EACApuU,KAAK6xU,WAAa,IAAIC,IAClBrkU,QAASoiB,EAAMoB,QAAQxjB,QACvB04E,OAAQA,EAAQvrD,QAAS56B,KAAK8uB,KAAMsP,KAAMvO,EAAMoB,QAAQmN,KAAM6G,OAAQpV,EAAMoB,QAAQgU,OACpFwqS,gBAAiB5/S,EAAMoB,QAAQw+S,gBAAiBv2S,SAAUA,EAAUi1M,OAAQt+M,EAAMoB,QAAQk9M,OAC1F4gG,OAAQA,EAAQx9C,WAAyC,eAA7BvxR,KAAK6vB,MAAMk3M,cAAiC,IAAI9zM,GAAc,EAAG,GAAKw+S,EAClGjf,WAAYz8R,EAAQpJ,QAAS3sB,KAAK+xU,cAAe9iU,SAAU4gB,EAAMoB,QAAQhiB,SAAUzS,KAAMm1U,EACzFt2T,MAAOwU,EAAMxU,MAAO1P,OAAQA,EAAQinO,UAAW/iN,EAAMoB,QAAQ2hN,UAC7D3mI,WAAaltF,EAAOinN,cAAgC,cAAhBjnN,EAAOrY,MAAwBysB,GAASA,EAAMnmB,EAAI,EACtFqiU,SAAUrvU,KAAK6vB,MAAMsG,qBAAuBpX,EAAOinN,aACnD/mM,aAAcj/B,KAAK8uB,KAAKryB,OAAS,EAAI,EAAI,GACzC87N,cAAe,WACX7lI,EAAO2+O,gBAAgB3+O,EAAO//E,SAC9B+/E,EAAO8+O,kBACP9+O,EAAOs/O,oBAAoBN,IAE/B9/P,kBAAmB,SAAU3xE,GACrBA,EAAKgxB,QAAQs9S,WACb77O,EAAOm+O,QAAQn+O,EAAOmzI,eAAgBh2M,KAG/C,IAAM7vB,KAAKgB,QAAQsC,GAAK,aAG3BtD,KAAK6xU,WAAW34S,SAAWA,EAC3Bl5B,KAAK6xU,WAAWj3S,QAAU56B,KAAK8uB,KAC/B9uB,KAAK6xU,WAAW1rP,OAASA,EACzBnmF,KAAK6xU,WAAWlmU,OAASA,EACzB3L,KAAK6xU,WAAWllT,QAAU3sB,KAAK+xU,cAC/B/xU,KAAK6xU,WAAW9C,OAASA,EACzB/uU,KAAK6xU,WAAWr1U,KAAOm1U,EACvB3xU,KAAK6xU,WAAW5iU,SAAW4gB,EAAMoB,QAAQhiB,SACzCjP,KAAK6xU,WAAWj/F,UAAY/iN,EAAMoB,QAAQ2hN,UAC1C5yO,KAAK6xU,WAAW5lO,WAAcltF,EAAOinN,cAAgC,cAAhBjnN,EAAOrY,MAAwBysB,GAASA,EAAMnmB,EAAI,EACvGhN,KAAK6xU,WAAWtgD,WAA0C,eAA7BvxR,KAAK6vB,MAAMk3M,cAAiC,IAAI9zM,GAAc,EAAG,GAAKw+S,EACnGzxU,KAAK6xU,WAAW5yS,aAAej/B,KAAK8uB,KAAKryB,OAAS,EAAI,EAAI,GAC1DuD,KAAK6xU,WAAW3tR,aAGxBgtR,EAAY71U,UAAU02U,YAAc,WAEhC,IAAK,IADD1gP,KACKjzF,EAAK,EAAGyE,EAAK7C,KAAK4lO,cAAexnO,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAI5B,EAAOqG,EAAGzE,GACdizF,EAAO7sF,KAAKxE,KAAKiyU,UAAUz1U,EAAMA,EAAKuiB,SAE1C,OAAOsyE,GAEX6/O,EAAY71U,UAAU42U,UAAY,SAAUz1U,EAAMuiB,GAC9C,OAAIA,EAAOinN,aACAxpO,EAAK22B,MAAM0C,OAGVr5B,EAAK22B,MAAM0C,OAA8B,YAArBr5B,EAAK22B,MAAM0C,MAAsBr5B,EAAK22B,MAAM0C,MAClEr5B,EAAK22B,MAAM02C,WACb9qD,EAAOknN,OAAO7nM,MAAQrf,EAAO8qD,UAGzCqnQ,EAAY71U,UAAU22U,oBAAsB,SAAUN,GAC9CA,IACA1xU,KAAK4lO,cAAgB5lO,KAAK4lO,cAAcprN,OAAOk3T,IAEnD1xU,KAAK6lO,eAAiBnnO,KAAWsB,KAAK4lO,cAAe,MAAM,IAE/DsrG,EAAY71U,UAAUw1U,QAAU,SAAUr0U,EAAMqzB,GAC5C,IAAIqiT,EAAalyU,KAAK0wB,WAAW1wB,KAAKgB,QAAQsC,GAAK,gBAClC4uU,GAAc99S,SAAS89S,EAAWr/T,aAAa,WAAY,IAAM,IAE9E7S,KAAKysU,OAAS,KACdzsU,KAAK0sU,OAAS,KACd1sU,KAAK4lO,iBACL5lO,KAAKqxU,gBAAgBxhT,GACrB7vB,KAAKwuO,wBAAwBhyO,GAC7BwD,KAAK6xU,WAAa,KAClB7xU,KAAK2S,QAAQ+T,QAAQ,0BAM7BwqT,EAAY71U,UAAUmzO,wBAA0B,SAAUhyO,GACtD,GAAIwD,KAAK6vB,MAAMy9M,aAAc,CACzB,IAAK,IAAIlvO,EAAK,EAAG6gH,EAASziH,EAAM4B,EAAK6gH,EAAOxiH,OAAQ2B,IAAM,CACtD,IAAI4f,EAAOihG,EAAO7gH,GAClBqyB,GAAczwB,KAAKgB,QAAQsC,GAAK,WAAa0a,EAAKe,OAAO9M,MACrD,UAAY+L,EAAKmV,MAAMlhB,MAAQ,cAEvCjS,KAAK6vB,MAAMy9M,aAAakB,0BAE5BxuO,KAAK6lO,mBAETqrG,EAAY71U,UAAU26J,aAAe,SAAU7iI,EAAOi7S,EAAS9sS,EAAgB6wS,QACzD,IAAdA,IAAwBA,GAAY,GACxC,IAAI/5S,GACAC,QAAQ,EAAOtB,KAAMwhM,GAAezpM,KAAMwS,EAC1CnO,MAAOA,EAAMA,MAAOpU,OAAQoU,EAAMpU,OAAQ6zN,UAAW5yO,KAAK4yO,WAW9D,OATA5yO,KAAK6vB,MAAMnJ,QAAQ6xM,GAAengM,GAC7BA,EAASC,SACgB,kBAAtBlF,EAAMpU,OAAOrY,OACb1G,KAAKoyU,cACK,GAEdpyU,KAAKmuU,cAAgBnuU,KAAKmuU,cAAc3zT,OAAO4d,EAAStJ,MACxD9uB,KAAK8uB,KAAO9uB,KAAKmuU,gBAEb/1S,EAASC,QAErB64S,EAAY71U,UAAU+2U,WAAa,WAC/BpyU,KAAK6uU,gBACL,IAAI7tU,EAAUhB,KAAK0wB,WAAW1wB,KAAKgB,QAAQsC,GAAK,kBAChD,GAAItC,GAAWA,EAAQuQ,WAAW9U,OAAS,EACvC,KAAOuE,EAAQkwI,WAA2C,IAA9BlwI,EAAQuQ,WAAW9U,QAC3CuE,EAAQsE,YAAYtE,EAAQkwI,YAIxCggM,EAAY71U,UAAUmxU,cAAgB,WAClC/vS,GAAUz8B,KAAKqyU,kBAOnBnB,EAAY71U,UAAUi3U,cAAgB,SAAUpnU,GAC5C,IAAInL,EAAQC,KACR6pI,EAAiB7pI,KAAK0wB,WAAW1wB,KAAKgB,QAAQsC,GAAK,YACvDtD,KAAKwsU,gBACD3iM,GAAkB7pI,KAAK6lO,eAAeppO,OAAS,IAC/CuD,KAAKqyU,gBAAkBlyU,WAAW,WAC1BJ,EAAM8xU,YACN9xU,EAAM8xU,WAAWhB,WAEtB3lU,KAGJgmU,GACTvrG,ICxPE95I,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAiBxCj+C,GAAyB,SAAUy+C,GAMnC,SAASz+C,EAAQpe,GACb,IAAI9vB,EAAQ2sF,EAAOprF,KAAKtB,KAAM6vB,IAAU7vB,KAExC,OADAD,EAAMrD,mBACCqD,EAwZX,OAhaA8rF,GAAU59C,EAASy+C,GAanBz+C,EAAQ5yC,UAAUqB,iBAAmB,WACjC,IAAIsD,KAAK6vB,MAAM04D,YAAf,CAGA,IAAIk0B,EAAcjxG,GAAQC,UAAY,eAAiB,aACvDzL,KAAK6vB,MAAMs3D,GAAGs1B,EAAaz8G,KAAKisU,kBAAmBjsU,MACnDA,KAAK6vB,MAAMs3D,GAAG,UAAWnnF,KAAKqqT,UAAWrqT,MACzCA,KAAK6vB,MAAMs3D,GAAG37E,GAAQkgF,eAAgB1rF,KAAK8tO,iBAAkB9tO,MAC7DA,KAAK6vB,MAAMs3D,GAAG37E,GAAQmgF,cAAe3rF,KAAK4tN,eAAgB5tN,QAE9DiuC,EAAQ5yC,UAAUuyN,eAAiB,WAC/B,IAAI/9L,EAAQ7vB,KAAK2S,QACbkd,EAAMmB,UAAYhxB,KAAKk6D,WAAWrqC,KAChCiG,GAAajG,EAAMq2M,OAAQr2M,EAAMs2M,OAAQt2M,EAAMu+M,qBAAqBzQ,iBAAmB9tM,EAAMoB,QAAQk9M,SAC/Ft+M,EAAMoB,QAAQk9M,UACjBt+M,EAAMk+M,UAAU9tM,OAIZpQ,EAAMo+M,WACXjuO,KAAKsyU,cAAc,MAJnBtyU,KAAKixB,UACLjxB,KAAKsyU,cAAc,QAO/BrkS,EAAQ5yC,UAAU4wU,kBAAoB,WAClCjsU,KAAKsyU,cAAc,MAEvBrkS,EAAQ5yC,UAAUyyO,iBAAmB,WACjC,IAAIj+M,EAAQ7vB,KAAK6vB,MAEZA,EAAMu8S,qBAAwBpsU,KAAKk6D,WAAWrqC,KAC1CA,EAAMoB,QAAQk9M,QAAYt+M,EAAMmB,UAAYnB,EAAe,WAC5D7vB,KAAKixB,UAEL6E,GAAajG,EAAMq2M,OAAQr2M,EAAMs2M,OAAQt2M,EAAMu+M,qBAAqBzQ,iBAChE9tM,EAAMoB,QAAQk9M,QAAYt+M,EAAMmB,UAAYnB,EAAe,WAC3D7vB,KAAKixB,UAILpB,EAAMoB,QAAQk9M,QACdnuO,KAAKsyU,cAAc,OAUnCrkS,EAAQ5yC,UAAUgvT,UAAY,WAC1B,IAAIx6R,EAAQ7vB,KAAK6vB,MAIjB,OAHIA,EAAMk+M,UAAU9tM,QAAUnK,GAAajG,EAAMq2M,OAAQr2M,EAAMs2M,OAAQt2M,EAAMu+M,qBAAqBzQ,iBAC9F39N,KAAKixB,WAEF,GAMXgd,EAAQ5yC,UAAU41B,QAAU,WACxB,IAAIihT,EAAalyU,KAAK0wB,WAAW1wB,KAAKgB,QAAQsC,GAAK,gBAC/C8tU,EAAac,GAAc99S,SAAS89S,EAAWr/T,aAAa,WAAY,IAAM,EAC9E40S,EAAaznT,KAAKmxU,kBAAkBC,GACnCpxU,KAAK6vB,MAAMoB,QAAQk9M,OAIpBnuO,KAAKuyU,qBAAqBvyU,KAAK6vB,OAAQuhT,EAAW3pB,GAHlDznT,KAAKwyU,oBAAoBxyU,KAAK6vB,OAAQuhT,EAAW3pB,IAMzDx5Q,EAAQ5yC,UAAUo3U,WAAa,SAAUj2U,GACrC,MAAoB,KAAhBwD,KAAKmmF,OACE,IAEXnmF,KAAKmmF,OAASnmF,KAAK0yU,cAAcl2U,EAAK22B,MAAO32B,EAAKuiB,OAAQ/e,KAAKmmF,OAAQ3pF,EAAKuiB,OAAOjH,MAAOtb,EAAKuiB,OAAOnH,OACjC,KAAjE5X,KAAKmmF,OAAO52E,QAAQ,OAAQ,IAAIA,QAAQ,SAAU,IAAIW,OAC/ClQ,KAAKmmF,OAET,KAEXl4C,EAAQ5yC,UAAUs3U,WAAa,WAE3B,IAAK,IADD1sG,KACK7nO,EAAK,EAAGyE,EAAK7C,KAAK4lO,cAAexnO,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAI5B,EAAOqG,EAAGzE,GACd6nO,EAAOzhO,KAAKhI,EAAK22B,MAAM8yM,OAAO9sM,OAAS38B,EAAKuiB,OAAOknN,OAAO9sM,OAE9D,OAAO8sM,GAEXh4L,EAAQ5yC,UAAUm3U,oBAAsB,SAAU3iT,EAAOu+S,EAAS3mB,GAC9D,IAAIjrT,EAAOwD,KAAK8lO,UAChBtpO,EAAK6gO,UAAYr9N,KAAKq9N,UACXxtM,EAAMu+M,qBAAqBzQ,eAEtC,GADA39N,KAAK4lO,iBAED5lO,KAAK4yU,SAASp2U,EAAMwD,KAAK6lO,eAAe,IACpC7lO,KAAK6oO,SAASrsO,EAAM4xU,EAAS3mB,GAAY,KACrCznT,KAAKg2J,aAAax5J,EAAM4xU,EAASpuU,KAAK+nE,eAAevrE,IACrDwD,KAAKy0B,cAAc5E,EAAOu+S,EAASpuU,KAAKyyU,WAAWj2U,GAAOwD,KAAK6yU,kBAAkBr2U,GAAOA,EAAKuiB,OAAOgV,SAAUv3B,EAAK22B,MAAOnzB,KAAK2yU,aAAc3yU,KAAK8yU,iBAAiB9yU,KAAK4lO,cAAc,IAAK/1M,EAAMu+M,qBAAqBzQ,eAAgB,KAAM39N,KAAK+yU,gBAAgBv2U,KAGjQwD,KAAKqxU,gBAAgBrxU,KAAK2S,SAC1B3S,KAAK0wB,WAAW1wB,KAAKgB,QAAQsC,GAAK,YAAYiB,UAElDvE,KAAK6oB,UAAW,QAIpB,IAAKrsB,EAAK22B,OAASnzB,KAAK6oB,SACpB7oB,KAAKsyU,cAAc,KACnBtyU,KAAK6oB,UAAW,OAGhB,IAAK,IAAIzqB,EAAK,EAAGyE,EAAKgtB,EAAM+R,cAAexjC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAI2gB,EAASlc,EAAGzE,GACZ2gB,EAAO+X,UACPt6B,EAAOwD,KAAKqnO,YAAYx3M,EAAO9Q,IAAWviB,GAKtDA,GAAQA,EAAK22B,OACbnzB,KAAKgzU,eAAex2U,EAAMqzB,IAGlCoe,EAAQ5yC,UAAUy3U,iBAAmB,SAAUzkG,GAC3C,IAAI3B,EAAe,EACf3tN,EAASsvN,EAAUtvN,OAKvB,OAJKA,EAAOinN,eACR0G,EAAgB1sO,KAAK6vB,MAAMoB,QAAQk9M,QAAUpvN,EAAOknN,OAAOnvM,SAA2B,YAAhB/X,EAAOrY,MAClD,YAApBqY,EAAOgnN,UAA4BhnN,EAAOknN,OAAOlwN,OAAS,GAAK,EAAK,EAAIgJ,EAAOknN,OAAOhhM,OAAOjvB,MAAU,GAE3G02N,GAEXz+L,EAAQ5yC,UAAUu3U,SAAW,SAAUp2U,EAAMqwH,GACzC,OAAOrwH,EAAK22B,SAAY05F,GAAaA,EAAS15F,QAAU32B,EAAK22B,OACxD05F,GAAYA,EAASwwG,UAAY,GAAKxwG,EAASwwG,YAAcr9N,KAAKq9N,YAE3EpvL,EAAQ5yC,UAAUw3U,kBAAoB,SAAUr2U,GAC5C,IAAI08B,EACJ,GAAyB,kBAArB18B,EAAKuiB,OAAOrY,KAA0B,CACtC,IAAKlK,EAAK22B,MAAMs0M,gBAAgB,GAC5B,OAAO,KAEXvuM,EAAW,IAAIjG,GAAcz2B,EAAK22B,MAAMs0M,gBAAgB,GAAG16N,EAAGvQ,EAAK22B,MAAMs0M,gBAAgB,GAAGz6N,GAEhG,OAAQxQ,EAAKuiB,OAAOrY,MAChB,IAAK,gBACD,OAAO1G,KAAKizU,eAAez2U,GAC/B,IAAK,YACD,OAAOwD,KAAKkzU,mBAAmB12U,EAAM08B,GACzC,IAAK,YACD,OAAOl5B,KAAKmzU,aAAa32U,EAAM08B,GACnC,QACI,OAAOA,IAGnB+U,EAAQ5yC,UAAU83U,aAAe,SAAU32U,EAAM08B,GAS7C,OARI18B,EAAK22B,MAAM2zM,QAAQ,KACd9mO,KAAKqvU,SAINn2S,EAASnsB,EAAIvQ,EAAK22B,MAAM2zM,QAAQ,GAAG/5N,EAAIvQ,EAAK22B,MAAM2zM,QAAQ,GAAG9wN,MAAQ,EAHrEkjB,EAASlsB,EAAIxQ,EAAK22B,MAAM2zM,QAAQ,GAAG95N,EAAIxQ,EAAK22B,MAAM2zM,QAAQ,GAAG/wN,OAAS,GAMvEmjB,GAEX+U,EAAQ5yC,UAAU63U,mBAAqB,SAAU12U,EAAM08B,GASnD,OARKl5B,KAAKqvU,SAKNn2S,EAASnsB,EAAKvQ,EAAK22B,MAAMnmB,EAAI,EACzBksB,EAASnsB,EAAIvQ,EAAK22B,MAAM2zM,QAAQ,GAAG9wN,MAAQkjB,EAASnsB,EALxDmsB,EAASlsB,EAAKxQ,EAAK22B,MAAMnmB,EAAI,EACzBksB,EAASlsB,EAAIxQ,EAAK22B,MAAM2zM,QAAQ,GAAG/wN,OAASmjB,EAASlsB,EAMtDksB,GAEX+U,EAAQ5yC,UAAU0sE,eAAiB,SAAUsmK,GACzC,IAAItvN,EAASsvN,EAAUtvN,OACvB,OAAO/e,KAAK0yU,cAAcrkG,EAAUl7M,MAAOpU,EAAQ/e,KAAK63N,UAAU73N,KAAK6vB,MAAO9Q,GAASA,EAAOjH,MAAOiH,EAAOnH,QAEhHq2B,EAAQ5yC,UAAU03U,gBAAkB,SAAUv2U,GAC1C,GAAIwD,KAAK6vB,MAAMoB,QAAQhiB,SAAU,CAC7B,IAAIkkB,EAAQz0B,KAAWlC,EAAK22B,OAS5B,OARAA,EAAMpmB,EAAI/M,KAAKozU,iBAAiB52U,EAAK22B,MAAO32B,EAAKuiB,OAAOjH,MAAO,KAAK,GAAM,GAC1C,OAA3Btb,EAAKuiB,OAAOid,WACb7I,EAAMnmB,EAAIhN,KAAKozU,iBAAiB52U,EAAK22B,MAAO32B,EAAKuiB,OAAOnH,MAAO,KAAK,GAAO,IAG3Eub,EAAM+I,IAAMl8B,KAAKozU,iBAAiB52U,EAAK22B,MAAO32B,EAAKuiB,OAAOnH,MAAO,OAAO,GAAO,GAC/Eub,EAAM8I,KAAOj8B,KAAKozU,iBAAiB52U,EAAK22B,MAAO32B,EAAKuiB,OAAOnH,MAAO,QAAQ,GAAO,IAE9Eub,EAGP,OAAO32B,EAAK22B,OAGpB8a,EAAQ5yC,UAAU23U,eAAiB,SAAUx2U,EAAMqzB,GAC1CA,EAAMsG,qBAYPn2B,KAAK0sU,QAAU,EAAIp5S,GAAmB92B,EAAK22B,MAAMvB,OAAQp1B,EAAKuiB,OAAOjH,QAAUtb,EAAKuiB,OAAOjH,MAAM4a,KAAK3c,OAChGvZ,EAAKuiB,OAAOjH,MAAM4a,KAAK1lB,EAC7BhN,KAAKysU,OAAS58S,EAAMq2M,SAbQ,eAAxBr2M,EAAMk3M,cACN/mO,KAAKysU,OAAS74S,GAAwBp3B,EAAK22B,MAAMvB,OAAQp1B,EAAKuiB,OAAOjH,OAAStb,EAAKuiB,OAAOjH,MAAM4a,KAAK1c,MAC/FxZ,EAAKuiB,OAAOjH,MAAM4a,KAAK3lB,EAG7B/M,KAAKysU,OAASn5S,GAAmB92B,EAAK22B,MAAMvB,OAAQp1B,EAAKuiB,OAAOjH,OAAStb,EAAKuiB,OAAOjH,MAAM4a,KAAK1c,MAC1FxZ,EAAKuiB,OAAOjH,MAAM4a,KAAK3lB,EAEjC/M,KAAK0sU,OAAS78S,EAAMs2M,SAQ5Bl4L,EAAQ5yC,UAAUk3U,qBAAuB,SAAU1iT,EAAOu+S,EAAS3mB,GAC/D,IAAIjrT,EAGA6xO,EAAoC,eAAxBx+M,EAAMk3M,cAAiC/mO,KAAK8lO,UAAY,KACxE9lO,KAAKwsU,gBACLxsU,KAAKqxU,gBAAgBxhT,GACrB7vB,KAAK4lO,iBACL,IAAI8rG,KACA9/M,EAAgB,GAChBw8M,GACA5tU,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,sBAAsB3B,YAAY8lT,GAEhFznT,KAAKoyU,aACL,IAAK,IAAIh0U,EAAK,EAAGyE,EAAKgtB,EAAM+R,cAAexjC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAI2gB,EAASlc,EAAGzE,GACX2gB,EAAOwvN,gBAGgB,cAAxB1+M,EAAMk3M,eAAiChoN,EAAO+X,QAC9Ct6B,EAAOwD,KAAKqnO,YAAYx3M,EAAO9Q,GAEF,eAAxB8Q,EAAMk3M,eAAkChoN,EAAO+X,SAA+B,OAApBu3M,EAAUl7M,QACzE32B,EAAO,IAAI4gO,GAAUr+M,EAAOkY,OAAOo3M,EAAUl7M,MAAMlhB,OAAQ8M,IAE3DviB,GAAwB,KAAhBwD,KAAKmmF,QAA+C,IAA9BnmF,KAAK4lO,cAAcnpO,SACjDm1H,EAAgB5xH,KAAKyyU,WAAWj2U,IAEhCA,GAAQwD,KAAKg2J,aAAax5J,EAAM4xU,EAASpuU,KAAK+nE,eAAevrE,KAC7DwD,KAAKgzU,eAAex2U,EAAMqzB,GAC1B7vB,KAAK4lO,cAAcphO,KAAKhI,GACxBA,EAAO,MAEFA,GACLk1U,EAAYltU,KAAKhI,IAGrBwD,KAAK4lO,cAAcnpO,OAAS,EAC5BuD,KAAKy0B,cAAc5E,EAAOu+S,EAASx8M,EAAe5xH,KAAKqzU,qBAAoD,IAA9BrzU,KAAK4lO,cAAcnpO,OAAeuD,KAAK4lO,cAAc,GAAG7mN,OAAOgV,SAAW,KAAM,KAAM/zB,KAAK2yU,aAAc3yU,KAAK8yU,iBAAiB9yU,KAAK4lO,cAAc,IAAK/1M,EAAMu+M,qBAAqBzQ,eAAgB+zG,GAE1Q1xU,KAAK0wB,WAAW1wB,KAAKgB,QAAQsC,GAAK,kBACvCtD,KAAK0wB,WAAW1wB,KAAKgB,QAAQsC,GAAK,iBAAiBE,aAAa,IAAK,KAG7EyqC,EAAQ5yC,UAAUg4U,mBAAqB,WACnC,OAAIrzU,KAAK4lO,cAAcnpO,OAAS,EACrB,IAAIw2B,GAAcjzB,KAAKysU,OAAQzsU,KAAK0sU,QAGpC1sU,KAAK6yU,kBAAkB7yU,KAAK4lO,cAAc,KAGzD33L,EAAQ5yC,UAAU43U,eAAiB,SAAUz2U,GAOzC,OALWwD,KAAKq9N,UAAY,EAAI7gO,EAAK22B,MAAMs0M,gBAAgBznO,KAAKq9N,UAAY,IAEpEtwN,EAAGvQ,EAAK22B,MAAM2zM,QAAQ,GAAG/5N,EAAKvQ,EAAK22B,MAAM2zM,QAAQ,GAAG9wN,MAAQ,EAC5DhJ,EAAGxQ,EAAK22B,MAAM2zM,QAAQ,GAAG95N,EAAKxQ,EAAK22B,MAAM2zM,QAAQ,GAAG/wN,OAAS,IAIzEk4B,EAAQ5yC,UAAUq3U,cAAgB,SAAUv/S,EAAOpU,EAAQyd,EAAQ1kB,EAAOF,GAK1D5X,KAAK6vB,MACjB,IAAK,IALDxH,EACAqqC,EAIKt0D,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK61B,GAAQ/0B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIk1U,EAAYzwU,EAAGzE,GACnBiqB,EAAM,IAAInE,OAAO,WAAkBovT,EAAY,IAAK,MACpD92S,EAASA,EAAOjtB,QAAQ8Y,EAAI9rB,OAAQyD,KAAKozU,iBAAiBjgT,EAAsB,eAAf9K,EAAI9rB,OAA0Bub,EAAQF,EAAO07T,EAA0B,eAAfjrT,EAAI9rB,OAAyC,kBAAf8rB,EAAI9rB,QACxI,kBAAf8rB,EAAI9rB,QACW,mBAAf8rB,EAAI9rB,QACW,iBAAf8rB,EAAI9rB,QACW,eAAf8rB,EAAI9rB,QACW,qBAAf8rB,EAAI9rB,QACW,qBAAf8rB,EAAI9rB,QACW,sBAAf8rB,EAAI9rB,QACW,2BAAf8rB,EAAI9rB,QACW,2BAAf8rB,EAAI9rB,QACW,oBAAf8rB,EAAI9rB,SAEZ,IAAK,IAAI0H,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAKgB,OAAOi1U,eAAex0T,IAAU9a,EAAKwG,EAAGhO,OAAQwH,IAAM,CAChFqvU,EAAY7oU,EAAGxG,GACnBokB,EAAM,IAAInE,OAAO,YAAmBovT,EAAY,IAAK,MACrD5gR,EAAY3zC,EAAOu0T,GACnB92S,EAASA,EAAOjtB,QAAQ8Y,EAAI9rB,OAAQm2D,GAExC,OAAOl2B,GAEXyR,EAAQ5yC,UAAU+3U,iBAAmB,SAAUjgT,EAAOhd,EAAMm9T,EAAWE,EAAUC,GAC7E,IAAI/gR,EACA32B,EACA/+B,EAeJ,MAduB,aAAnBmZ,EAAKmb,WAA4BkiT,EAEjC9gR,GADA32B,EAAoB5lB,EAAK2lB,aAAqD,OAAtC3lB,EAAK2lB,YAAYnsB,MAAM,YAC/BwG,EAAK2lB,YAAYvsB,QAAQ,UAAW4G,EAAKqmB,OAAOrJ,EAAMmgT,KAClFn9T,EAAKqmB,OAAOrJ,EAAMmgT,IAEjBG,GACL13S,EAAoB5lB,EAAK2lB,aAAqD,OAAtC3lB,EAAK2lB,YAAYnsB,MAAM,WAC/D3S,EAAsB,aAAds2U,EAA2Bn9T,EAAKqmB,OAAOrJ,EAAMmgT,GAAWtzU,KAAKq9N,UAAY,IAC7ElnN,EAAKqmB,OAAOrJ,EAAMmgT,IACtB5gR,EAAY32B,EAAoB5lB,EAAK2lB,YAAYvsB,QAAQ,UAAWvS,GAASA,GAG7E01D,EAAYv/B,EAAMmgT,GAEf5gR,GAEXzkB,EAAQ5yC,UAAUw8N,UAAY,SAAUhoM,EAAO9Q,GAC3C,GAAI8Q,EAAMoB,QAAQuL,OACd,MAA0B,OAAtBzd,EAAOid,YAA2C,cAApBjd,EAAOosL,SAC9BnrM,KAAK0zU,0BAA0B30T,EAAQ8Q,EAAOA,EAAMoB,QAAQuL,QAEhE3M,EAAMoB,QAAQuL,OAEzB,IAAIm3S,EAAyB,cAAhB50T,EAAOrY,KAAwB,oCAAgD,aACxF81B,EAAU3M,EAAMoB,QAAQk9M,OAAiB,iBAARwlG,EACrC,OAAQ50T,EAAOid,YACX,IAAK,KAID,MAHwB,cAApBjd,EAAOosL,UACPnrM,KAAK0zU,0BAA0B30T,EAAQ8Q,EAAOA,EAAMoB,QAAQuL,QAEzDA,EAAS,OAA0B,WAAhBzd,EAAOrY,KAAqB,iDAChD,qBACV,IAAK,UACD,OAAO81B,mEACX,IAAK,mBACD,OAAOA,qIAEX,IAAK,UACD,OAAOA,EAAS,SAAWx8B,KAAKq9N,UAAY,EAAI,sCAC5C,6LAIZ,MAAO,IAEXpvL,EAAQ5yC,UAAUq4U,0BAA4B,SAAU30T,EAAQ8Q,EAAO2M,GASnE,MAN0B,OAAtBzd,EAAOid,WACGjd,EAAOgY,KAAO,gBAGdyF,GAOlByR,EAAQ5yC,UAAUmzO,wBAA0B,SAAUhyO,GAClD,IAAK,IAAI4B,EAAK,EAAG6gH,EAASziH,EAAM4B,EAAK6gH,EAAOxiH,OAAQ2B,IAAM,CACtD,IAAI4f,EAAOihG,EAAO7gH,GAClBqyB,GAAczwB,KAAKgB,QAAQsC,GAAK,WAAa0a,EAAKe,OAAO9M,MACrD,UAAY+L,EAAKmV,MAAMlhB,MAAQ,cAEnCjS,KAAK6vB,MAAMy9M,cACXttO,KAAK6vB,MAAMy9M,aAAakB,0BAE5BxuO,KAAK6lO,mBAKT53L,EAAQ5yC,UAAU0kC,cAAgB,WAI9B,MAAO,WAOXkO,EAAQ5yC,UAAUiX,QAAU,SAAUud,KAK/Boe,GACTijS,IC3aE0C,GAAyB,WAEzB,SAASA,EAAQ/jT,GACb7vB,KAAK6vB,MAAQA,EACb7vB,KAAKitD,UAAYp9B,EAAM7uB,QAAQsC,GAC/BtD,KAAK6zU,eAAiB,UACtB7zU,KAAK8zU,UAAY,UA4NrB,OArNAF,EAAQv4U,UAAU04U,gBAAkB,SAAUp5S,EAActmB,EAAewb,GACvE,IAAI89E,EAAS3tG,KAAK6vB,MAAME,SACpB+jT,EAAY9zU,KAAK6vB,MAAM0kD,WAAW40O,UAAYnpT,KAAK6zU,eAAiB7zU,KAAK8zU,UACzEj/S,EAAY,yFAChBA,GAAa,uGACb8F,EAAar3B,GAAKtD,KAAKitD,UAAY,eACnCtyB,EAAan3B,aAAa,aAAcxD,KAAK6vB,MAAMo2R,kBAAkB,QACrEjmT,KAAKg0U,YAAcr5S,EACnBA,EAAah5B,YAAYgsG,EAAOrpE,cAAc,IAAI04L,GAAWh9N,KAAKitD,UAAY,iBAAkB,iBAAmB,EAAG,IAAI13B,GAAK,EAAG,EAAG,GAAI,OACzIoF,EAAah5B,YAAYgsG,EAAOn4E,SAAS,IAAIC,GAAWz1B,KAAKitD,UAAY,iBAAkB6mR,EAAW,KAAM,KAAM,EAAG,KAAMj/S,KAC3HxgB,EAAc1S,YAAYg5B,GAC1B36B,KAAKykB,WAAWkW,EAAc36B,KAAKi0U,MAOvCL,EAAQv4U,UAAU64U,iBAAmB,SAAUv5S,EAActmB,EAAewb,GACxE,IAAI89E,EAAS3tG,KAAK6vB,MAAME,SACpB+jT,EAAY9zU,KAAK6vB,MAAM0kD,WAAW40O,UAAYnpT,KAAK8zU,UAAY9zU,KAAK6zU,eACpEh/S,EAAY,qGAChBA,GAAa,qHACbA,GAAwB,8FACxB8F,EAAar3B,GAAKtD,KAAKitD,UAAY,gBACnCtyB,EAAan3B,aAAa,aAAcxD,KAAK6vB,MAAMo2R,kBAAkB,SACrEjmT,KAAKm0U,aAAex5S,EACpBA,EAAah5B,YAAYgsG,EAAOrpE,cAAc,IAAI04L,GAAWh9N,KAAKitD,UAAY,kBAAmB,iBAAmB,EAAG,IAAI13B,GAAK,EAAG,EAAG,GAAI,OAC1IoF,EAAah5B,YAAYgsG,EAAOn4E,SAAS,IAAIC,GAAWz1B,KAAKitD,UAAY,kBAAmB6mR,EAAW,KAAM,KAAM,EAAG,KAAMj/S,EAAY,6DACxIxgB,EAAc1S,YAAYg5B,GAC1B36B,KAAKykB,WAAWkW,EAAc36B,KAAKo0U,OAOvCR,EAAQv4U,UAAUg5U,mBAAqB,SAAU15S,EAActmB,EAAewb,GAC1E,IAAI89E,EAAS3tG,KAAK6vB,MAAME,SACpB+jT,EAAY9zU,KAAK8zU,UACjBj/S,EAAY,gGAChBA,GAAa,8GACbA,GAAa,+GACb8F,EAAar3B,GAAKtD,KAAKitD,UAAY,kBACnCtyB,EAAan3B,aAAa,aAAcxD,KAAK6vB,MAAMo2R,kBAAkB,WAErEtrR,EAAah5B,YAAYgsG,EAAOrpE,cAAc,IAAI04L,GAAWh9N,KAAKitD,UAAY,oBAAqB,iBAAmB,EAAG,IAAI13B,GAAK,EAAG,EAAG,GAAI,OAC5IoF,EAAah5B,YAAYgsG,EAAOn4E,SAAS,IAAIC,GAAWz1B,KAAKitD,UAAY,oBAAqB6mR,EAAW,KAAM,KAAM,EAAG,KAAMj/S,EAAY,2FAC1I8F,EAAah5B,YAAYgsG,EAAOwM,YAAY,IAAI+iH,GAAcl9N,KAAKitD,UAAY,oBAAqBqnR,wJAAsFR,KAC1L9zU,KAAKu0U,eAAiB55S,EACtB36B,KAAKw0U,eAAiB3kT,EAAM0kD,WAAW40O,UAAY,MAAQ,IAC3DxuR,EAAan3B,aAAa,UAAWxD,KAAKw0U,gBAC1CngU,EAAc1S,YAAYg5B,GAC1B36B,KAAKykB,WAAWkW,EAAc36B,KAAKy0U,SAOvCb,EAAQv4U,UAAUq5U,oBAAsB,SAAU/5S,EAActmB,EAAewb,GAC3E,IAAI89E,EAAS3tG,KAAK6vB,MAAME,SACpB+jT,EAAY9zU,KAAK8zU,UACjBj/S,EAAY,iFAChBA,GAAa,uGACbA,GAAa,oHACb8F,EAAar3B,GAAKtD,KAAKitD,UAAY,mBACnCtyB,EAAan3B,aAAa,aAAcxD,KAAK6vB,MAAMo2R,kBAAkB,YACrEtrR,EAAah5B,YAAYgsG,EAAOrpE,cAAc,IAAI04L,GAAWh9N,KAAKitD,UAAY,qBAAsB,iBAAmB,EAAG,IAAI13B,GAAK,EAAG,EAAG,GAAI,OAC7IoF,EAAah5B,YAAYgsG,EAAOn4E,SAAS,IAAIC,GAAWz1B,KAAKitD,UAAY,qBAAsB6mR,EAAW,KAAM,KAAM,EAAG,KAAMj/S,EAAY,0FAC3I70B,KAAK20U,gBAAkBh6S,EACvB36B,KAAKw0U,eAAiB3kT,EAAM0kD,WAAW40O,UAAY,MAAQ,IAC3DxuR,EAAan3B,aAAa,UAAWxD,KAAKw0U,gBAC1CngU,EAAc1S,YAAYg5B,GAC1B36B,KAAKykB,WAAWkW,EAAc36B,KAAK40U,UAOvChB,EAAQv4U,UAAUw5U,kBAAoB,SAAUl6S,EAActmB,EAAewb,EAAOjJ,GAChF,IAEIuI,EAFAw+E,EAAS3tG,KAAK6vB,MAAME,SACpB+jT,EAAY9zU,KAAK8zU,UAEjBj/S,EAAY,kGAChBA,GAAa,wGACbA,GAAa,sHACb8F,EAAar3B,GAAKtD,KAAKitD,UAAY,iBACnCtyB,EAAan3B,aAAa,aAAcxD,KAAK6vB,MAAMo2R,kBAAkB,UAChEr/R,GAKDuI,EAAON,GAAY7uB,KAAK6vB,MAAMo2R,kBAAkB,cAAgB92R,KAAM,SACtEwL,EAAah5B,YAAYgsG,EAAOrpE,cAAc,IAAI04L,GAAWh9N,KAAKitD,UAAY,mBAAoB,iBAAmB,EAAG,IAAI13B,GAAK,EAAG,EAAGpG,EAAKnZ,MAAOmZ,EAAKpZ,WACxJ4f,GAAY,IAAIC,GAAW51B,KAAKitD,UAAY,mBAAoB,EAAI99B,EAAKnZ,MAAQ,EAAG,EAAkB,EAAdmZ,EAAKpZ,OAAa,EAAG,SAAU/V,KAAK6vB,MAAMo2R,kBAAkB,aAAc,gBAAqC,SAAW92R,KAAM,QAAU,QAASwL,KAN3OA,EAAah5B,YAAYgsG,EAAOrpE,cAAc,IAAI04L,GAAWh9N,KAAKitD,UAAY,mBAAoB,iBAAmB,EAAG,IAAI13B,GAAK,EAAG,EAAG,GAAI,OAC3IoF,EAAah5B,YAAYgsG,EAAOn4E,SAAS,IAAIC,GAAWz1B,KAAKitD,UAAY,mBAAoB6mR,EAAW,KAAM,KAAM,EAAG,KAAMj/S,EAAY,sFAO7IxgB,EAAc1S,YAAYg5B,GAC1B36B,KAAKykB,WAAWkW,EAAc36B,KAAKi4D,QAOvC27Q,EAAQv4U,UAAUopB,WAAa,SAAUzjB,EAASyzE,GAC9ClvE,GAAanB,IAAIpD,EAAS,uBAAwByzE,EAASz0E,MAC3DuF,GAAanB,IAAIpD,EAAS,YAAahB,KAAK8wB,YAAa9wB,MACzDuF,GAAanB,IAAIpD,EAAS,WAAYhB,KAAKsyU,cAAetyU,OAO9D4zU,EAAQv4U,UAAUy1B,YAAc,SAAUx0B,GACtC,IAAIwyB,EAAOxyB,EAAM0zG,cAAc1sG,GAAGpG,MAAM,aAAa,GACjDsP,EAAQlQ,EAAMwP,OAAS+iB,GAAYC,GAAQK,KAAM,SAAUnZ,MAAQ,GAClEhW,KAAK6vB,MAAMmB,SACZyD,GAAc,oBAAqBz0B,KAAK6vB,MAAMo2R,kBAAkBn3R,GAAQxyB,EAAM4P,MAAQ,GAAKM,EAAM,SAIzGonU,EAAQv4U,UAAUi3U,cAAgB,WAC9B7hT,GAAc,sBAIlBmjT,EAAQv4U,UAAU48D,MAAQ,WACtB,IAAIpoC,EAAQ7vB,KAAK6vB,MAqBjB,OApBKA,EAAM0kD,WAAW3tD,UAClBriB,EAAOsrB,EAAM0kD,WAAWugQ,iBAE5B90U,KAAKsyU,gBACLziT,EAAMW,UAAUhtB,aAAa,SAAU,QACvCqsB,EAAM8vM,gBAAgBvgO,QAAQ,SAAU+W,GACpCA,EAAK05D,WAAa,EAClB15D,EAAKuhN,aAAe,EAChBvhN,EAAK+e,mBACL/e,EAAK+e,iBAAiBgtM,YAAa,KAG3CryM,EAAMu8S,qBAAsB,EAC5Bv8S,EAAM0kD,WAAWyqJ,SAAWnvM,EAAM0kD,WAAW40O,UAAYt5R,EAAM07R,YAAc17R,EAAMU,aAAc,EACjGV,EAAM0kD,WAAWwgQ,cAAgBllT,EAAM0kD,WAAWygQ,kBAClDnlT,EAAM0kD,WAAWo6O,YAAc,KAC/B9+R,EAAM+5R,YACN/5R,EAAMuuM,cACNvuM,EAAM06M,eACNvqO,KAAKw0U,eAAiB,KACf,GAEXZ,EAAQv4U,UAAUo5U,OAAS,SAAU5zU,GAEjC,OADAb,KAAKi1U,qBAAqB,EAAGj1U,KAAK6vB,MAAO7vB,KAAK6vB,MAAM8vM,gBAAiB3/N,KAAK6vB,MAAMigD,aAAavxC,OACtF,GAEXq1S,EAAQv4U,UAAUu5U,QAAU,SAAU/zU,GAElC,OADAb,KAAKi1U,sBAAsB,EAAGj1U,KAAK6vB,MAAO7vB,KAAK6vB,MAAM8vM,gBAAiB3/N,KAAK6vB,MAAMigD,aAAavxC,OACvF,GAEXq1S,EAAQv4U,UAAU+4U,KAAO,SAAUvzU,GAC/Bb,KAAK6vB,MAAM0kD,WAAW40O,WAAY,EACjBnpT,KAAK6vB,MAAM0kD,WAO5B,OANAv0E,KAAKw0U,eAAiB,IACtBx0U,KAAK6vB,MAAMW,UAAUhtB,aAAa,SAAU,QAC5CxD,KAAKu0U,eAAe/wU,aAAa,UAAWxD,KAAKw0U,gBACjDx0U,KAAK20U,gBAAgBnxU,aAAa,UAAWxD,KAAKw0U,gBAClDx0U,KAAKk1U,eAAel1U,KAAKm0U,aAAa5iU,WAAYvR,KAAK6zU,gBACvD7zU,KAAKk1U,eAAel1U,KAAKg0U,YAAYziU,WAAY,YAC1C,GAGXqiU,EAAQv4U,UAAU44U,IAAM,WACHj0U,KAAK6vB,MAAM0kD,WAS5B,OAPAv0E,KAAK6vB,MAAM0kD,WAAW40O,WAAY,EAClCnpT,KAAK6vB,MAAMW,UAAUhtB,aAAa,SAAU,WAC5CxD,KAAKw0U,eAAiB,MACZx0U,KAAKu0U,eAAiBv0U,KAAKu0U,eAAe/wU,aAAa,UAAWxD,KAAKw0U,gBAAkB,KACzFx0U,KAAK20U,gBAAkB30U,KAAK20U,gBAAgBnxU,aAAa,UAAWxD,KAAKw0U,gBAAkB,KAC3Fx0U,KAAKg0U,YAAch0U,KAAKk1U,eAAel1U,KAAKg0U,YAAYziU,WAAYvR,KAAK6zU,gBAAkB,KAC3F7zU,KAAKm0U,aAAen0U,KAAKk1U,eAAel1U,KAAKm0U,aAAa5iU,WAAY,WAAa,MACtF,GAEXqiU,EAAQv4U,UAAU45U,qBAAuB,SAAUnxR,EAAOj0B,EAAOo5C,EAAM1qC,GACnE,IAAK1O,EAAM0kD,WAAW40O,WAAqC,QAAxBnpT,KAAKw0U,eAA0B,CAC9D,IAAIW,EACAC,EACAC,EACJxlT,EAAMu8S,qBAAsB,EAC5Bv8S,EAAMU,aAAc,EACpB04C,EAAK7pE,QAAQ,SAAU+W,IACO,eAArBA,EAAKyiB,aAAyC,MAAT2F,GAChB,aAArBpoB,EAAKyiB,aAAuC,MAAT2F,KACpC82S,EAAehpU,KAAKC,IAAID,KAAKC,IAAI,EAAIguB,GAAOnkB,EAAK05D,WAAY,EAAG,GAAI,GAAM,IAAO/rB,EAAQ,GACzFqxR,EAAiC,IAAjBE,EAAsB,EAAI/6S,GAAO,EAAI+6S,EAAc,EAAG,GACtED,EAAmC,IAAjBC,EAAsB,EAAIl/T,EAAKuhN,aAAmD,IAAlCvhN,EAAK05D,WAAaslQ,GAChFh/T,EAAKuhN,eAAiB09G,GAAkBj/T,EAAK05D,aAAeslQ,IAC5DA,EAAgBC,EAAiBD,EAAgB,EAAK,EAAIC,EAAkBD,GAEhFh/T,EAAK05D,WAAaslQ,EAClBh/T,EAAKuhN,aAAe09G,OAKpCxB,EAAQv4U,UAAU65U,eAAiB,SAAUtxU,EAAUiyB,GACnD,IAAK,IAAI15B,EAAI,EAAG8+B,EAAWr3B,EAASnH,OAAQN,EAAI8+B,EAAU9+B,IACtDyH,EAASzH,GAAGqH,aAAa,OAAQqyB,IAGlC+9S,KClOPhoI,GAAsB,WAKtB,SAASA,EAAK/7K,GACV7vB,KAAK6vB,MAAQA,EACb7vB,KAAKyL,UAAYD,GAAQC,UACzBzL,KAAKs1U,YAAc9pU,GAAQqb,KAAKkQ,KAChC/2B,KAAKu1U,WAAkC,YAArBv1U,KAAKs1U,YAA6Bt1U,KAAKyL,UAAY,aAAe,iBAAoB,aACxGzL,KAAKy8G,YAAcz8G,KAAKyL,UAAY,eAAiB,aACrDzL,KAAKtD,mBACLsD,KAAK4mB,SAAWpb,GAAQob,SACxB,IAAI4jS,EAAU36R,EAAMigD,aACpB9vE,KAAKw1U,QAAU,IAAI5B,GAAQ/jT,GAC3B7vB,KAAKwqT,QAAUA,EACfxqT,KAAKitD,UAAYp9B,EAAM7uB,QAAQsC,GAC/BtD,KAAKy1U,YAAc,IAAIlgT,GAAK,EAAG,EAAG,EAAG,GACrCv1B,KAAK01U,YACL11U,KAAK21U,eAAiB,GACtB31U,KAAK41U,MAAQpqU,GAAQub,OAASvb,GAAQ2gU,OACtCnsU,KAAKg/N,SAAWh/N,KAAKioT,YAAcjoT,KAAKwqT,QAAQxC,WAAahoT,KAAKwqT,QAAQE,uBACtEF,EAAQzrF,kBACRlvM,EAAMs/F,cAAgBhuH,EAAc,OAASmC,GAAIusB,EAAM7uB,QAAQsC,GAAK,oBAmoB5E,OA5nBAsoM,EAAKvwM,UAAUw6U,cAAgB,SAAUh1U,EAAGgvB,EAAOmB,GAC/ChxB,KAAK81U,uBAAuBjmT,EAAOA,EAAM8vM,kBACrC3/N,KAAKwqT,QAAQE,wBAA4B15R,KACrCnB,EAAMs8R,aAA8C,IAA/BnsT,KAAKg1U,eAAev4U,SAAoBuD,KAAKmpT,YAAat5R,EAAMs8R,YAKpFnsT,KAAKmpT,WAAat5R,EAAM07R,eACxBv6R,GAAYA,GAA0C,IAA/BhxB,KAAKg1U,eAAev4U,UAC5CuD,KAAK2uT,YAAc39R,EAAUnwB,EAAEsG,OAAS,KACxCnH,KAAK+1U,MAAMlmT,EAAOA,EAAM8vM,mBAP5B3/N,KAAKmpT,YAAYnpT,KAAK4mB,UAAkB5mB,KAAKmpT,UAC7CnpT,KAAKioT,aAAc,EACnBjoT,KAAKg2U,qBAAqBnmT,KAUlC+7K,EAAKvwM,UAAU26U,qBAAuB,SAAUnmT,GAC5C,IAAI2iS,EAAa3iS,EAAMu+M,qBAAqBzQ,eACxCxjM,EAAgB,IAAIlH,GAAcpD,EAAMm8R,mBAAoBn8R,EAAMq8R,oBAClE9xR,EAAc,IAAInH,GAAcpD,EAAMq2M,OAAQr2M,EAAMs2M,QACpDzzM,EAAO1yB,KAAKy1U,YAAcv7S,GAAgBC,EAAeC,EAAao4R,GACtE9/R,EAAK1c,MAAQ,GAAK0c,EAAK3c,OAAS,IAChC/V,KAAKg/N,UAAW,EAChBnvM,EAAMu8S,qBAAsB,EAC5Bv8S,EAAMW,UAAUhtB,aAAa,SAAU,aACb,MAAtBxD,KAAKwqT,QAAQjsR,MACb7L,EAAK3c,OAASy8S,EAAWz8S,OACzB2c,EAAK1lB,EAAIwlT,EAAWxlT,GAEO,MAAtBhN,KAAKwqT,QAAQjsR,OAClB7L,EAAK1c,MAAQw8S,EAAWx8S,MACxB0c,EAAK3lB,EAAIylT,EAAWzlT,GAExB8iB,EAAMW,UAAU7uB,YAAYkuB,EAAME,SAASuU,cAAc,IAAI04L,GAAWh9N,KAAKitD,UAAY,YAAap9B,EAAM6F,WAAWzH,mBAAqB4H,MAAOhG,EAAM6F,WAAWxH,oBAAqBlY,MAAO,GAAK,EAAG0c,EAAM,EAAG,EAAG,GAAI,SAIhOk5K,EAAKvwM,UAAU06U,MAAQ,SAAUlmT,EAAOo5C,GACpC,GAAIp5C,EAAMo+M,WAAap+M,EAAMk+M,UAAU9tM,OACnC,OAAO,KAEX,IAAI6zC,EACAnoE,EACJ3L,KAAKg/N,UAAW,EAChB,IAAIi3G,EACAC,EAeJ,GAdAl2U,KAAK2L,OAAUkkB,EAAMU,YAA0DvwB,KAAK2L,OAAjDkkB,EAAMu+M,qBAAqBzQ,eAC9D9tM,EAAMU,aAAc,EACpBV,EAAMu8S,qBAAsB,EAC5BnjQ,EAAK7pE,QAAQ,SAAU+W,GACnB29D,EAAeznE,KAAKC,IAAI,EAAIguB,GAAOnkB,EAAK05D,WAAY,EAAG,GAAI,GAClC,eAArB15D,EAAKyiB,aACLjtB,GAAUkkB,EAAMm8R,mBAAqBn8R,EAAMq2M,QAAU/vN,EAAKuc,KAAK1c,MAAQ89D,EACvE39D,EAAKuhN,aAAep9L,GAAOnkB,EAAKuhN,aAAe/rN,EAAQ,EAAI,EAAIwK,EAAK05D,cAGpElkE,GAAUkkB,EAAMq8R,mBAAqBr8R,EAAMs2M,QAAUhwN,EAAKuc,KAAK3c,OAAS+9D,EACxE39D,EAAKuhN,aAAep9L,GAAOnkB,EAAKuhN,aAAe/rN,EAAQ,EAAI,EAAIwK,EAAK05D,eAGxE7vE,KAAKwqT,QAAQ2rB,sBAAuB,CAGpC,OAFAF,EAAapmT,EAAMq2M,OAASr2M,EAAMk8R,WAClCmqB,EAAarmT,EAAMs2M,OAASt2M,EAAMo8R,WAC1BjsT,KAAKwqT,QAAQjsR,MACjB,IAAK,IACD23S,EAAa,EACb,MACJ,IAAK,IACDD,EAAa,EAGrBj2U,KAAKo2U,aAAaH,EAAYC,EAAY,KAAM,KAAMrmT,GAAO,GAC7D7vB,KAAKo+N,YAAYvuM,EAAMu+M,qBAAsBv+M,EAAOA,EAAM8vM,sBAG1D3/N,KAAKq2U,kBAAkBxmT,GAE3BA,EAAMm8R,mBAAqBn8R,EAAMq2M,OACjCr2M,EAAMq8R,mBAAqBr8R,EAAMs2M,QAOrCv6B,EAAKvwM,UAAUg7U,kBAAoB,SAAUxmT,GACzC,IAAI6C,EAAO1yB,KAAKy1U,YAChB5lT,EAAMs9M,eAAgB,EAClBntO,KAAKg/N,WACDtsM,EAAK1c,MAAQ,GAAK0c,EAAK3c,OAAS,GAChC/V,KAAKioT,aAAc,EACnBp4R,EAAMW,UAAUhtB,aAAa,SAAU,QACvCxD,KAAKs2U,OAAOzmT,EAAOA,EAAM8vM,gBAAiB9vM,EAAMu+M,qBAAqBzQ,gBACrE9tM,EAAMs8R,aAAc,GAEft8R,EAAMu8S,sBACXv8S,EAAMu8S,qBAAsB,EAC5Bv8S,EAAMU,aAAc,EACpBV,EAAM+5R,YACN/5R,EAAMuuM,cACNvuM,EAAM06M,kBAIlB3+B,EAAKvwM,UAAU+iO,YAAc,SAAU30K,EAAQ55B,EAAOo5C,GAClD,IAAI1qC,EAAO1O,EAAMigD,aAAavxC,KAC9BkrB,EAAOi0K,YAAY,IAAInoM,GAAK1F,EAAM+tM,gBAAgB7wN,EAAG8iB,EAAM+tM,gBAAgB5wN,EAAG6iB,EAAM+tM,gBAAgB5nN,MAAO6Z,EAAM+tM,gBAAgB7nN,SACjIkzD,EAAK/xC,IAAI,SAAU/gB,EAAMlE,GACI,eAArBkE,EAAKyiB,aAAyC,MAAT2F,GACrCkrB,EAAOg4K,gBAAgBtrN,EAAMlE,EAAO,KAAOkE,EAAK6kN,oBAAsB7kN,EAAKmkN,YAAcnkN,EAAKuc,MAEzE,aAArBvc,EAAKyiB,aAAuC,MAAT2F,GACnCkrB,EAAOo4K,gBAAgB1rN,EAAMlE,EAAO,KAAOkE,EAAK6kN,oBAAsB7kN,EAAKmkN,YAAcnkN,EAAKuc,SAK1Gk5K,EAAKvwM,UAAUi7U,OAAS,SAAUzmT,EAAOo5C,EAAMlzC,GAC3C,IAEIqC,EACAm+S,EACAC,EACAC,EACAC,EANAC,EAAW32U,KAAKy1U,YAChBl3S,EAAOv+B,KAAKwqT,QAAQjsR,KAMxBv+B,KAAKmpT,UAAYt5R,EAAMigD,aAAak4O,WAAahoT,KAAKmpT,UACtDlgP,EAAK7pE,QAAQ,SAAU+W,GACnBogU,EAAaE,EAAYtgU,EAAK05D,WAC9B2mQ,EAAaE,EAAYvgU,EAAKuhN,aAC9Bt/L,GACIC,QAAQ,EAAOtB,KAAM8hM,GAAc1iN,KAAMA,EAAMygU,mBAAoBL,EAAYM,qBAAsBL,EACrGM,kBAAmBL,EAAWM,oBAAqBL,GAE9B,eAArBvgU,EAAKyiB,YACQ,MAAT2F,IACAm4S,GAAarqU,KAAKE,KAAKoqU,EAAS5pU,EAAIgpB,EAAOhpB,GAAMgpB,EAAY,OAAK5f,EAAK05D,WACvE4mQ,GAAcE,EAAS3gU,MAAQ+f,EAAO/f,MACtCoiB,EAAS2+S,oBAAsBL,EAC/Bt+S,EAAS0+S,kBAAoBL,EAC7B5mT,EAAMnJ,QAAQmyM,GAAczgM,IAInB,MAATmG,IACAm4S,IAAc,EAAIrqU,KAAKE,KAAKoqU,EAAS5gU,QAAU4gU,EAAS3pU,EAAI+oB,EAAO/oB,IAAO+oB,EAAa,SAAM5f,EAAK05D,WAClG4mQ,GAAcE,EAAS5gU,OAASggB,EAAOhgB,OACvCqiB,EAAS0+S,kBAAoBL,EAC7Br+S,EAAS2+S,oBAAsBL,EAC/B7mT,EAAMnJ,QAAQmyM,GAAczgM,IAG/BA,EAASC,SACVliB,EAAK05D,WAAaz3C,EAAS0+S,kBAC3B3gU,EAAKuhN,aAAet/L,EAAS2+S,uBAGrC/2U,KAAKy1U,YAAc,IAAIlgT,GAAK,EAAG,EAAG,EAAG,GACrCv1B,KAAKq2U,kBAAkBxmT,IAO3B+7K,EAAKvwM,UAAU27U,yBAA2B,SAAUn2U,EAAGqlO,EAAQC,EAAQt2M,EAAOo5C,GAC1E,IAIIguQ,EACApnQ,EACA6nJ,EANA7iM,EAAkC,YAArB70B,KAAKs1U,aAA8Bt1U,KAAKyL,UACrB5K,EAAE+lI,WAAa,IAAO,EAAI,GAAK,GAA7D/lI,EAAQ,OAAI,EAAI,EAAI,GAAK,EAC3B09B,EAAOv+B,KAAKwqT,QAAQjsR,KACpBi9P,EAAS,GAIbx7R,KAAKg/N,UAAW,EAChBh/N,KAAK81U,uBAAuBjmT,EAAOA,EAAM8vM,iBACzC9vM,EAAMu8S,qBAAsB,EAC5BpsU,KAAKioT,aAAc,EACnBjoT,KAAKmpT,UAAYt5R,EAAMigD,aAAak4O,WAAahoT,KAAKmpT,UACtDlgP,EAAK7pE,QAAQ,SAAU+W,IACO,aAArBA,EAAKyiB,aAAuC,MAAT2F,GACd,eAArBpoB,EAAKyiB,aAAyC,MAAT2F,MACtC04S,EAAa5qU,KAAKC,IAAID,KAAKC,IAAI,EAAIguB,GAAOnkB,EAAK05D,WAAY,EAAG,GAAI,GAAM,IAAOh7C,EAAY,KACzE,IAEd2mQ,GADAA,EAA8B,eAArBrlR,EAAKyiB,YAA+BstM,EAAS/vN,EAAKuc,KAAK1c,MAAQ,EAAKmwN,EAAShwN,EAAKuc,KAAK3c,QAC9E,EAAI,EAAIylR,EAAS,EAAI,EAAIA,EAC3C3rN,EAA6B,IAAfonQ,EAAoB,EAAI38S,GAAO,EAAI28S,EAAY,EAAG,GAChEv/G,EAA+B,IAAfu/G,EAAoB,EAAI9gU,EAAKuhN,cAAiBvhN,EAAK05D,WAAaA,GAAc2rN,EAC1FrlR,EAAKuhN,eAAiBA,GAAgBvhN,EAAK05D,aAAeA,IAC1DA,EAAc6nJ,EAAe7nJ,EAAc,EAAK,EAAI6nJ,EAAgB7nJ,IAG5E15D,EAAK05D,WAAaA,EAClB15D,EAAKuhN,aAAeA,KAG5B13N,KAAKq2U,kBAAkBxmT,IAO3B+7K,EAAKvwM,UAAU67U,oBAAsB,SAAUr2U,EAAGgvB,GAC9C,GAAK7vB,KAAKy1U,YAAYz/T,MAAQ,GAAKhW,KAAKy1U,YAAY1/T,OAAS,GAAO8Z,EAAMo+M,WAAap+M,EAAMk+M,UAAU9tM,OACnG,OAAO,EAEXjgC,KAAK81U,uBAAuBjmT,EAAOA,EAAM8vM,iBACzC3/N,KAAKg/N,UAAW,EAChBh/N,KAAKmpT,WAAY,EACjBnpT,KAAKioT,aAAc,EACnBjoT,KAAK2L,OAAUkkB,EAAMU,YAA0DvwB,KAAK2L,OAAjDkkB,EAAMu+M,qBAAqBzQ,eAC9D9tM,EAAMU,aAAc,EACpBV,EAAMu8S,qBAAsB,EAC5B,IAWI3/R,EACAC,EACAyqS,EACAC,EACAC,EACA3G,EACAC,EAjBA2G,EAAgBznT,EAAM7uB,QAAQ4K,wBAC9B2rU,EAAYv3U,KAAKg1U,eACjBl8Q,EAAY94D,KAAK+0U,cACjByC,EAAeD,EAAU,GAAGzrU,MAAQwrU,EAAc9qU,KAClDirU,EAAeF,EAAU,GAAGrrU,MAAQorU,EAAc5qU,IAClDgrU,EAAa5+Q,EAAU,GAAGhtD,MAAQwrU,EAAc9qU,KAChDmrU,EAAa7+Q,EAAU,GAAG5sD,MAAQorU,EAAc5qU,IAChDkrU,EAAeL,EAAU,GAAGzrU,MAAQwrU,EAAc9qU,KAClDqrU,EAAeN,EAAU,GAAGrrU,MAAQorU,EAAc5qU,IAClDorU,EAAah/Q,EAAU,GAAGhtD,MAAQwrU,EAAc9qU,KAChDurU,EAAaj/Q,EAAU,GAAG5sD,MAAQorU,EAAc5qU,IAepD,GAPA+/B,EAASpgC,KAAKE,IAAImrU,EAAaI,GAAczrU,KAAKE,IAAIirU,EAAeI,GACrElrS,EAASrgC,KAAKE,IAAIorU,EAAaI,GAAc1rU,KAAKE,IAAIkrU,EAAeI,GACrEnH,GAAU1wU,KAAK2L,OAAOoB,EAAI2qU,GAAcjrS,EAAU+qS,EAClD7G,GAAU3wU,KAAK2L,OAAOqB,EAAI2qU,GAAcjrS,EAAU+qS,EAClDJ,EAAY,IAAI9hT,GAAKm7S,EAAOC,EAAO3wU,KAAK2L,OAAOqK,MAAQy2B,EAAQzsC,KAAK2L,OAAOoK,OAAS22B,GACpFyqS,EAAmBO,EAAcjrS,EAAS+qS,EAC1CJ,EAAmBO,EAAcjrS,EAAS+qS,GACrCt9R,MAAM1N,EAASA,KAAY0N,MAAMzN,EAASA,GAC3C,OAAQ1sC,KAAKwqT,QAAQjsR,MACjB,IAAK,KACDv+B,KAAKo2U,aAAae,EAAiBC,EAAiB3qS,EAAQC,EAAQ7c,GAAO,GAC3E,MACJ,IAAK,IACD7vB,KAAKo2U,aAAae,EAAiB,EAAG1qS,EAAQ,EAAG5c,GAAO,GACxD,MACJ,IAAK,IACD7vB,KAAKo2U,aAAa,EAAGgB,EAAiB,EAAG1qS,EAAQ7c,GAAO,GAMpE,OAFA7vB,KAAKg4U,yBAAyBnoT,EAAOwnT,GACrCr3U,KAAKo+N,YAAYvuM,EAAMu+M,qBAAsBv+M,EAAOA,EAAM8vM,kBACnD,GAEX/zB,EAAKvwM,UAAU28U,yBAA2B,SAAUnoT,EAAOwnT,GACvD,IAEIY,EACAC,EACAC,EACAC,EACAp7U,EACAq7U,EAPAt4U,EAAQC,KACRu+B,EAAOv+B,KAAKwqT,QAAQjsR,KAOxB1O,EAAM8vM,gBAAgBvgO,QAAQ,SAAU+W,EAAMlE,IAChB,eAArBkE,EAAKyiB,aAAyC,MAAT2F,GAChB,aAArBpoB,EAAKyiB,aAAuC,MAAT2F,KACX,eAArBpoB,EAAKyiB,aACL57B,EAAQq6U,EAAUtqU,EAAIhN,EAAM4L,OAAOoB,EACnCsrU,EAAYliU,EAAKuc,KAAK1c,MAAQjW,EAAM21U,SAASzjU,GAAOqiB,MACpD6jT,EAAWn7U,EAAQq7U,EAAYt4U,EAAM21U,SAASzjU,GAAOkO,IACrDnjB,EAAQq6U,EAAUtqU,EAAIsqU,EAAUrhU,MAAQjW,EAAM4L,OAAOoB,EACrDqrU,EAAWp7U,EAAQq7U,EAAYt4U,EAAM21U,SAASzjU,GAAOkO,MAGrDnjB,EAAQq6U,EAAUrqU,EAAIjN,EAAM4L,OAAOqB,EACnCqrU,EAAYliU,EAAKuc,KAAK3c,OAAShW,EAAM21U,SAASzjU,GAAOqiB,MACrD6jT,IAAqB,EAATn7U,EAAamZ,EAAKuc,KAAK3c,QAAUsiU,EAAYt4U,EAAM21U,SAASzjU,GAAOkO,IAC/EnjB,EAAQq6U,EAAUrqU,EAAIqqU,EAAUthU,OAAShW,EAAM4L,OAAOqB,EACtDorU,IAAqB,EAATp7U,EAAamZ,EAAKuc,KAAK3c,QAAUsiU,EAAYt4U,EAAM21U,SAASzjU,GAAOkO,KAEnF83T,EAAe5rU,KAAK8T,IAAIg4T,EAAUC,GAClCF,EAAe7rU,KAAKC,IAAI6rU,EAAUC,GAClCjiU,EAAKuhN,cAAgBugH,EAAel4U,EAAM21U,SAASzjU,GAAOqmU,WAAav4U,EAAM21U,SAASzjU,GAAOsmU,YAC7FpiU,EAAK05D,YAAcqoQ,EAAeD,GAAgBl4U,EAAM21U,SAASzjU,GAAOsmU,YACxEpiU,EAAKuhN,aAAevhN,EAAKuhN,aAAe,EAAI,EAAIvhN,EAAKuhN,aACrDvhN,EAAK05D,WAAa15D,EAAK05D,WAAa,EAAI,EAAI15D,EAAK05D,eAK7D+7H,EAAKvwM,UAAU+6U,aAAe,SAAUoC,EAAQC,EAAQhsS,EAAQC,EAAQ7c,EAAO6oT,GAC3E7oT,EAAM08M,eAAe/oO,aAAa,YAAa,QAAUxD,KAAKitD,UAAY,wBACtEp9B,EAAMw3R,mBACNx3R,EAAMw3R,kBAAkB7jT,aAAa,YAAa,QAAUxD,KAAKitD,UAAY,wBAEjF,IAAIijC,EACAyoP,EACAC,EACA53U,EACW,OAAXw3U,GAA8B,OAAXC,GACnB5oT,EAAM+R,cAAcxiC,QAAQ,SAAUpC,GAClC27U,EAAW9oT,EAAMsG,oBAAsBn5B,EAAM4a,MAAM8a,KAAK3lB,EAAI/P,EAAM8a,MAAM4a,KAAK3lB,EAC7E6rU,EAAW/oT,EAAMsG,oBAAsBn5B,EAAM8a,MAAM4a,KAAK1lB,EAAIhQ,EAAM4a,MAAM8a,KAAK1lB,EAC7EkjF,EAAY,cAAgBsoP,GAAUE,EAAWjsS,EAASksS,EAAYA,IAClE,KAAOF,GAAUC,EAAWhsS,EAASksS,EAAYA,IAAa,IAClE1oP,EAAazjD,GAAUC,EAAUwjD,EAAY,UAAYzjD,EAAS,IAAMC,EAAS,IAAMwjD,EAChE,cAAnBlzF,EAAMmuM,SACNnuM,EAAM8vO,cAAcrsO,WAAW+C,aAAa,YAAa0sF,GAGzDlzF,EAAM8vO,cAActpO,aAAa,YAAa0sF,GAElDlvF,EAAU0vB,GAAWb,EAAM7uB,QAAQsC,GAAK,WAAatG,EAAMiV,MAAQ,yBAC/DjV,EAAMgwO,iBACNhwO,EAAMgwO,gBAAgBxpO,aAAa,YAAa0sF,GAEhDlzF,EAAM6vO,eACN7vO,EAAM6vO,cAAcrpO,aAAa,YAAa0sF,GAE9ClzF,EAAM24B,cACN34B,EAAM24B,YAAYnyB,aAAa,aAAc,UAC7CxG,EAAMkwO,aAAa1pO,aAAa,aAAc,WAE9CxC,IACAA,EAAQ0D,MAAMC,WAAa,aAK3CinM,EAAKvwM,UAAUy6U,uBAAyB,SAAUjmT,EAAOo5C,GACrD,IACI93C,EACA0nT,EAFA94U,EAAQC,KAGZ6vB,EAAM8vM,gBAAgBvgO,QAAQ,SAAU+W,EAAMlE,GAC1C4mU,EAAY1iU,EAAK6b,aACbjyB,EAAM21U,SAASzjU,GACV4d,EAAMU,cACPxwB,EAAM21U,SAASzjU,GAAOkO,IAAM04T,EAAU14T,IACtCpgB,EAAM21U,SAASzjU,GAAOqiB,MAAQukT,EAAUvkT,QAI5CnD,GACImnT,UAAWniU,EAAKogN,YAAYp2M,IAC5Bo4T,YAAapiU,EAAKogN,YAAYjiM,MAC9BnU,IAAK04T,EAAU14T,IACfmU,MAAOukT,EAAUvkT,OAErBv0B,EAAM21U,SAASzjU,GAASkf,MAKpCy6K,EAAKvwM,UAAUy9U,mBAAqB,SAAUjpT,GAC1C,IAWIkpT,EAEA/3U,EAbAg4U,EAAeh5U,KAAKwqT,QAAQ9zO,aAC5B87O,EAAa3iS,EAAMu+M,qBAAqBzQ,eAExChwH,EAAS99E,EAAME,SACftzB,EAASuD,KAAK4mB,SAAW,EAAIoyT,EAAav8U,OAC1Cs2O,EAAW/yO,KAAK4mB,SAAWiI,GAAY,cAAgBM,KAAM,SAAUnZ,MAAQ,GAC/ED,EAAS/V,KAAK4mB,SAAWiI,GAAY,cAAgBM,KAAM,SAAUpZ,OAAS,GAC9EC,EAASvZ,EAASs2O,EALR,GAKsBt2O,EAAS,GAL/B,GAKiDA,EAAS,GACpE+7U,EAAShmB,EAAWzlT,EAAIylT,EAAWx8S,MAAQA,EANjC,EAOVyiU,EAAUjmB,EAAWxlT,EAPX,EAQVi7D,EARU,EAUVutQ,EAAUx1U,KAAKw1U,QAEfyD,EAAgB,8FAGpB,GAFAA,GAAiB,wGACjBA,GAAiB,oGACF,IAAXx8U,GAAgBi0B,GAAW1wB,KAAKitD,UAAY,0BAC5C,OAAO,EAEX,IAAI4iR,EAAaliO,EAAO6M,aACxBw+N,EAAeh5U,KAAK4mB,UAAY,SAAWoyT,EAC3CnJ,EAAW7tU,UAAYi3U,EACvBj5U,KAAK80U,gBAAkBnnO,EAAO7/B,aAC1BxqE,GAAItD,KAAKitD,UAAY,yBACrB5/C,UAAW,aAAemrU,EAAS,IAAMC,EAAS,MAEtDz4U,KAAK80U,gBAAgBnzU,YAAYkuU,GACjC7vU,KAAK80U,gBAAgBnzU,YAAYgsG,EAAOrpE,cAAc,IAAI04L,GAAWh9N,KAAKitD,UAAY,gBAAiB,WAAap3B,MAAO,cAAe7f,MAAO,GAAK,EAAG,IAAIuf,GAAK,EAAG,EAAGvf,EAAQD,MAA0B,EAAG,MAC7MgjU,EAAeprO,EAAOrpE,cAAc,IAAI04L,GAAWh9N,KAAKitD,UAAY,gBAAiB,WAAap3B,MAAO,cAAe7f,MAAO,GAAK,GAAK,IAAIuf,GAAK,EAAG,EAAGvf,EAAQD,MAA0B,EAAG,KAChLvS,aAAa,SAAU,sBACpCxD,KAAK80U,gBAAgBnzU,YAAYo3U,GAEjC,IAAK,IADD53P,EACKhlF,EAAI,EAAGA,GAAKM,EAAQN,IAAK,CAM9B,OALAglF,EAAc63P,EAAa78U,EAAI,GAC/B6E,EAAU2sG,EAAO7/B,aACbzgE,UAAW,aAAe46D,EAAY,KAAOjoE,KAAK4mB,SAlC5C,KAkCkF,MAGpFu6D,GACJ,IAAK,MACDq0P,EAAQzB,gBAAgB/yU,EAAShB,KAAK80U,gBAAiBjlT,GACvD,MACJ,IAAK,OACD2lT,EAAQtB,iBAAiBlzU,EAAShB,KAAK80U,gBAAiBjlT,GACxD,MACJ,IAAK,SACD2lT,EAAQnB,mBAAmBrzU,EAAShB,KAAK80U,gBAAiBjlT,GAC1D,MACJ,IAAK,UACD2lT,EAAQd,oBAAoB1zU,EAAShB,KAAK80U,gBAAiBjlT,GAC3D,MACJ,IAAK,QACD2lT,EAAQX,kBAAkB7zU,EAAShB,KAAK80U,gBAAiBjlT,EAAO7vB,KAAK4mB,UAG7EqhD,GAAa8qK,KAYjB,OAVA/yO,KAAK80U,gBAAgBtxU,aAAa,UAAWxD,KAAK4mB,SAAW,IAAM,GAAK5mB,KAAK21U,gBAC7E31U,KAAK80U,gBAAgBtxU,aAAa,SAAU,QAC5CqsB,EAAMW,UAAU7uB,YAAY3B,KAAK80U,iBAC5B90U,KAAK4mB,WACNrhB,GAAanB,IAAIpE,KAAK80U,gBAAiB,uBAAwB90U,KAAKk5U,gBAAiBl5U,MACrFuF,GAAanB,IAAIpE,KAAK80U,gBAAiB,sBAAuB90U,KAAKm5U,iBAAkBn5U,MACjFA,KAAKmpT,WACLqsB,EAAQvB,QAGT,GAOXroI,EAAKvwM,UAAU6sT,iBAAmB,SAAUr4R,EAAOo5C,GAC7BjpE,KAAKopT,aAAangP,IAEhCjpE,KAAK84U,mBAAmBjpT,GACxB7vB,KAAKg/N,UAAW,IAGhBh/N,KAAKw1U,QAAQlD,gBACbtyU,KAAKmpT,WAAY,EACjBnpT,KAAKg/N,UAAW,EAChBnvM,EAAMW,UAAUhtB,aAAa,SAAU,UAQ/CooM,EAAKvwM,UAAU+tT,aAAe,SAAUngP,GACpC,IAAImwQ,GAAc,EAIlB,OAHAnwQ,EAAK7pE,QAAQ,SAAU+W,GACnBijU,EAAeA,GAAoC,IAApBjjU,EAAK05D,YAA0C,IAAtB15D,EAAKuhN,eAE1D0hH,GAEXxtI,EAAKvwM,UAAU69U,gBAAkB,SAAUr4U,GACvC,IAAIG,EAAUhB,KAAK80U,gBACJ9zU,EAAQ6R,aAAa,WAGpC,OAFA7S,KAAK21U,eAAiB,EACtB30U,EAAQwC,aAAa,UAAW,GAAKxD,KAAK21U,iBACnC,GAEX/pI,EAAKvwM,UAAU89U,iBAAmB,SAAUt4U,GACxC,IAAIG,EAAUhB,KAAK80U,gBAGnB,OAFA90U,KAAK21U,eAAiB,GACtB30U,EAAQwC,aAAa,UAAW,GAAKxD,KAAK21U,iBACnC,GAKX/pI,EAAKvwM,UAAUqB,iBAAmB,WAC1BsD,KAAK6vB,MAAM04D,cAGfhjF,GAAanB,IAAIpE,KAAK6vB,MAAM7uB,QAAShB,KAAKu1U,WAAYv1U,KAAKq5U,gBAAiBr5U,MAC5EA,KAAK6vB,MAAMs3D,GAAG37E,GAAQkgF,eAAgB1rF,KAAK8tO,iBAAkB9tO,MAC7DA,KAAK6vB,MAAMs3D,GAAG37E,GAAQigF,gBAAiBzrF,KAAKyhH,iBAAkBzhH,MAC9DA,KAAK6vB,MAAMs3D,GAAG37E,GAAQmgF,cAAe3rF,KAAK4tN,eAAgB5tN,MAC1DA,KAAK6vB,MAAMs3D,GAAGnnF,KAAKy8G,YAAaz8G,KAAKs5U,mBAAoBt5U,QAK7D4rM,EAAKvwM,UAAUuB,oBAAsB,WAC7BoD,KAAK6vB,MAAM04D,cAGfhjF,GAAahB,OAAOvE,KAAK6vB,MAAM7uB,QAAShB,KAAKu1U,WAAYv1U,KAAKq5U,iBAC9Dr5U,KAAK6vB,MAAM03D,IAAI/7E,GAAQkgF,eAAgB1rF,KAAK8tO,kBAC5C9tO,KAAK6vB,MAAM03D,IAAI/7E,GAAQigF,gBAAiBzrF,KAAKyhH,kBAC7CzhH,KAAK6vB,MAAM03D,IAAI/7E,GAAQmgF,cAAe3rF,KAAK4tN,gBAC3C5tN,KAAK6vB,MAAM03D,IAAIvnF,KAAKy8G,YAAaz8G,KAAKs5U,sBAO1C1tI,EAAKvwM,UAAUg+U,gBAAkB,SAAUx4U,GACvC,IAAIgvB,EAAQ7vB,KAAK6vB,MACblkB,EAASkkB,EAAM7uB,QAAQ4K,wBACvBm9D,EAAUr4C,GAAWb,EAAM7uB,QAAQsC,GAAK,QAAQsI,wBAChDs6N,EAAUrlO,EAAEk1D,QAAUpqD,EAAOa,KAAQH,KAAKC,IAAIy8D,EAAQv8D,KAAOb,EAAOa,KAAM,GAC1E25N,EAAUtlO,EAAEm1D,QAAUrqD,EAAOe,IAAOL,KAAKC,IAAIy8D,EAAQr8D,IAAMf,EAAOe,IAAK,GAM3E,OALI1M,KAAKwqT,QAAQgD,yBACb13R,GAAaowM,EAAQC,EAAQt2M,EAAMu+M,qBAAqBzQ,kBACxD98N,EAAE6kB,iBACF1lB,KAAKg3U,yBAAyBn2U,EAAGqlO,EAAQC,EAAQt2M,EAAOA,EAAM8vM,mBAE3D,GAKX/zB,EAAKvwM,UAAUyyO,iBAAmB,SAAUjtO,GAExC,IAAIgvB,EAAQ7vB,KAAK6vB,MACbimC,EAAU,KACC,cAAXj1D,EAAE6F,OACE7F,EAAE6kB,gBAAkB1lB,KAAK41U,QACxB51U,KAAKmpT,WAAct5R,EAAiB,aAC7B7vB,KAAKwqT,QAAQG,oBAAsB3qT,KAAKg1U,eAAev4U,OAAS,IACxEoE,EAAE6kB,iBAENowC,EAAUj1D,EAAEi1D,SAEZjmC,EAAM07R,cACF17R,EAAMmB,UACNhxB,KAAK+0U,cAAgB/0U,KAAK41D,gBAAgB51D,KAAK+0U,cAAel0U,EAAGi1D,GAC7D91D,KAAKwqT,QAAQG,oBAAsB3qT,KAAK+0U,cAAct4U,OAAS,GAC5DuD,KAAKg1U,eAAev4U,OAAS,GAChCuD,KAAKk3U,oBAAoBr2U,EAAGgvB,IAGpC7vB,KAAK61U,cAAch1U,EAAGgvB,EAAOA,EAAMmB,WAM3C46K,EAAKvwM,UAAUomH,iBAAmB,SAAU5gH,GAExC,IAEIsG,EAFA0oB,EAAQ7vB,KAAK6vB,MACbimC,EAAU,KAEC,eAAXj1D,EAAE6F,MACFovD,EAAUj1D,EAAEi1D,QACZ3uD,EAAStG,EAAEsG,QAGXA,EAAStG,EAAEsG,QAE4C,IAAvDA,EAAO7D,GAAG/E,QAAQsxB,EAAM7uB,QAAQsC,GAAK,cACrCwyB,GAAajG,EAAMm8R,mBAAoBn8R,EAAMq8R,mBAAoBr8R,EAAMu+M,qBAAqBzQ,kBAC5F9tM,EAAM07R,aAAc,GAEpB17R,EAAMmB,UACNhxB,KAAKg1U,eAAiBh1U,KAAK41D,gBAAgB51D,KAAKg1U,eAAgBn0U,EAAGi1D,KAM3E81I,EAAKvwM,UAAUuyN,eAAiB,SAAU/sN,GACtC,IAAIgvB,EAAQ7vB,KAAK6vB,MACbwmT,GAA6E,IAAzDx1U,EAAEsG,OAAO7D,GAAG/E,QAAQsxB,EAAM7uB,QAAQsC,GAAK,eACH,IAAxDzC,EAAEsG,OAAO7D,GAAG/E,QAAQsxB,EAAM7uB,QAAQsC,GAAK,aACvCusB,EAAM07R,aAAe8qB,IACrBr2U,KAAKq2U,kBAAkBxmT,GAEvBA,EAAMmB,UACFnB,EAAMs8R,aAAer2R,GAAajG,EAAMq2M,OAAQr2M,EAAMs2M,OAAQt2M,EAAMu+M,qBAAqBzQ,iBACvD,IAA/B39N,KAAKg1U,eAAev4U,QAAgBuD,KAAKg/N,UAC5Ch/N,KAAKw1U,QAAQv9Q,QAEjBj4D,KAAKg1U,kBACLnlT,EAAMs8R,aAAc,IAM5BvgH,EAAKvwM,UAAUi+U,mBAAqB,SAAUz4U,GACtCb,KAAKg/N,UACLh/N,KAAKq2U,kBAAkBr2U,KAAK6vB,OAEhC7vB,KAAK2uT,YAAc,KACnB3uT,KAAKg1U,kBACLh1U,KAAK+0U,kBAOTnpI,EAAKvwM,UAAUu6D,gBAAkB,SAAUC,EAAWh1D,EAAGi1D,GACrD,GAAIA,EAAS,CACTD,KACA,IAAK,IAAI15D,EAAI,EAAG8+B,EAAW66B,EAAQr5D,OAAQN,EAAI8+B,EAAU9+B,IACrD05D,EAAUrxD,MAAOsH,MAAOgqD,EAAQ35D,GAAG45D,QAAS7pD,MAAO4pD,EAAQ35D,GAAG65D,QAASC,UAAW,YAKtF,GAAyB,KADzBJ,EAAYA,OACEp5D,OACVo5D,EAAUrxD,MAAOsH,MAAOjL,EAAEk1D,QAAS7pD,MAAOrL,EAAEm1D,QAASC,UAAWp1D,EAAEo1D,gBAG7D,CAAI95D,EAAI,EAAb,IAAK,IAAWmpO,EAAWzvK,EAAUp5D,OAAQN,EAAImpO,EAAUnpO,IACnD05D,EAAU15D,GAAG85D,YAAcp1D,EAAEo1D,UAC7BJ,EAAU15D,IAAO2P,MAAOjL,EAAEk1D,QAAS7pD,MAAOrL,EAAEm1D,QAASC,UAAWp1D,EAAEo1D,WAGlEJ,EAAUrxD,MAAOsH,MAAOjL,EAAEk1D,QAAS7pD,MAAOrL,EAAEm1D,QAASC,UAAWp1D,EAAEo1D,YAKlF,OAAOJ,GAKX+1I,EAAKvwM,UAAU0kC,cAAgB,WAE3B,MAAO,QAOX6rK,EAAKvwM,UAAUiX,QAAU,SAAUud,GAE/B7vB,KAAKpD,uBAEFgvM,KC7pBP2tI,GAA+B,WAC/B,SAASA,EAAc5mU,GACnB3S,KAAK2S,QAAUA,EAgFnB,OA3EA4mU,EAAcl+U,UAAUm+U,aAAe,WACnC,IAAIC,EACA/0U,EAAQlE,SAASyuB,eAAejvB,KAAK05U,SACzC,GAAIj8U,EAAkBiH,GAAQ,EAC1BA,EAAQlE,SAASW,cAAc,UACzBqC,aAAa,KAAMxD,KAAK05U,SAC9B,IAAK,IAAIt7U,EAAK,EAAGyE,EAAK7C,KAAK2S,QAAQivB,cAAexjC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpE,IAAI2gB,EAASlc,EAAGzE,GAChBq7U,EAAc16T,EAAO46T,gBAAkB35U,KAAK05U,QAAU,WAAa36T,EAAO9M,MAC1EvN,EAAM1C,WAAa+c,EAAO46T,eAAiB,GAAK,IAAMF,EAAc,QAExE/0U,EAAM1C,WAAa,IAAMhC,KAAK45U,WAAa,oBAC3Cp5U,SAASuL,KAAKpK,YAAY+C,KAMlC60U,EAAcl+U,UAAUw+U,cAAgB,SAAUC,EAAaC,GAC3D,OAAOD,EAAYt/T,OAAOu/T,IAK9BR,EAAcl+U,UAAU2+U,gBAAkB,SAAUC,GAGhD,IAAK,IAFDnjT,GAAU,EACVojT,KACK97U,EAAK,EAAG+7U,EAAoBF,EAAiB77U,EAAK+7U,EAAkB19U,OAAQ2B,IAAM,CACvF,IAAI6T,EAAQkoU,EAAkB/7U,IACc,IAAxC87U,EAAa37U,QAAQ0T,EAAM8M,SAC3Bm7T,EAAa11U,KAAKyN,EAAM8M,QAGhC,IAAK,IAAIlc,EAAK,EAAGu3U,EAAiBF,EAAcr3U,EAAKu3U,EAAe39U,OAAQoG,IAAM,CAC1EoP,EAAQmoU,EAAev3U,GAC3B,GAAI7C,KAAK2S,QAAQoM,OAAO9M,GAAO6kB,QAAS,CACpCA,GAAU,EACV,OAGR,OAAOA,GAMXyiT,EAAcl+U,UAAUg/U,YAAc,SAAUr5U,EAASqC,GACrD,IAAIi3U,EAAmBt5U,EAAQ6R,aAAa,UAAY,IAEX,KAD7CynU,GAA2C,KAArBA,EAA2B,IAAM,IAClC/7U,QAAQ8E,IACzBrC,EAAQwC,aAAa,QAAS82U,EAAmBj3U,IAOzDk2U,EAAcl+U,UAAUk/U,eAAiB,SAAUv5U,EAASqC,GACxD,IAAIi3U,EAAmBt5U,EAAQ6R,aAAa,UAAY,GACpDynU,EAAiB/7U,QAAQ8E,IAAc,GACvCrC,EAAQwC,aAAa,QAAS82U,EAAiB/qU,QAAQlM,EAAW,MAM1Ek2U,EAAcl+U,UAAUm/U,YAAc,SAAUl6U,GAE5C,IAAK,IADD8Z,KACKje,EAAI,EAAGA,EAAImE,EAAOiR,WAAW9U,OAAQN,IACL,SAAjCmE,EAAOiR,WAAWpV,GAAG6G,SACrBoX,EAAS5V,KAAKlE,EAAOiR,WAAWpV,IAGxC,OAAOie,GAEJm/T,KCvFP1tP,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAwBxCuuP,GAA2B,SAAU/tP,GAMrC,SAAS+tP,EAAU5qT,GACf,IAAI9vB,EAAQ2sF,EAAOprF,KAAKtB,KAAM6vB,IAAU7vB,KAIxC,OAHAD,EAAM8vB,MAAQA,EACd9vB,EAAMgwB,SAAWF,EAAME,SACvBhwB,EAAMrD,mBACCqD,EA+pBX,OAzqBA8rF,GAAU4uP,EAAW/tP,GAerB+tP,EAAUp/U,UAAUqB,iBAAmB,WACnC,IAAIsD,KAAK6vB,MAAM04D,YAAf,CAGA,IAAIk0B,EAAcjxG,GAAQC,UAAY,eAAiB,aACvDzL,KAAK6vB,MAAMs3D,GAAG37E,GAAQkgF,eAAgB1rF,KAAK+pT,UAAW/pT,MACtDA,KAAK6vB,MAAMs3D,GAAGs1B,EAAaz8G,KAAK06U,kBAAmB16U,MACnDA,KAAK6vB,MAAMs3D,GAAG,QAASnnF,KAAK26U,0BAA2B36U,MACvDA,KAAK6vB,MAAMs3D,GAAG37E,GAAQigF,gBAAiBzrF,KAAK46U,UAAW56U,MACvDA,KAAK6vB,MAAMs3D,GAAG37E,GAAQmgF,cAAe3rF,KAAK06U,kBAAmB16U,QAKjEy6U,EAAUp/U,UAAUu/U,UAAY,SAAU/5U,GACtC,IAAIgvB,EAAQ7vB,KAAK6vB,MACW,SAAxBA,EAAMw2M,eAA4Bx2M,EAAM07R,cAGxC17R,EAAMs8R,cAAgBt8R,EAAMmB,SAAWhxB,KAAKumO,aAC5CvmO,KAAKqxG,UAAUxhF,EAAOA,EAAMu+M,qBAAqBzQ,eAAgB9tM,EAAMk8R,WAAYl8R,EAAMo8R,WAAYprT,IAM7G45U,EAAUp/U,UAAUuB,oBAAsB,WAClCoD,KAAK6vB,MAAM04D,cAGfvoF,KAAK6vB,MAAM03D,IAAI/7E,GAAQkgF,eAAgB1rF,KAAK+pT,WAC5C/pT,KAAK6vB,MAAM03D,IAAI,eAAgCvnF,KAAK06U,mBACpD16U,KAAK6vB,MAAM03D,IAAI,QAASvnF,KAAK26U,2BAC7B36U,KAAK6vB,MAAM03D,IAAI/7E,GAAQigF,gBAAiBzrF,KAAK46U,WAC7C56U,KAAK6vB,MAAM03D,IAAI/7E,GAAQmgF,cAAe3rF,KAAK06U,qBAK/CD,EAAUp/U,UAAUw/U,qBAAuB,SAAUhrT,GACjD7vB,KAAK05U,QAAU7pT,EAAM7uB,QAAQsC,GAAK,uBAClCtD,KAAK45U,WAAa/pT,EAAM7uB,QAAQsC,GAAK,kBACrCtD,KAAK86U,YAAcjrT,EAAM7uB,QAAQsC,GAAK,kBACtCtD,KAAK+6U,iBAAmBlrT,EAAM7uB,QAAQsC,GAAK,kBAC3CtD,KAAKg7U,YAAcnrT,EAAM7uB,QAAQsC,GAAK,iBACtCtD,KAAKqoT,uBACLroT,KAAKumO,WAAa,KAClBvmO,KAAKi7U,aAAuC,WAAxBprT,EAAMw2M,eAM9Bo0G,EAAUp/U,UAAUitT,gBAAkB,SAAUz4R,GAC5C7vB,KAAK66U,qBAAqBhrT,GAC1B7vB,KAAK+e,OAASrgB,KAAWmxB,EAAM+R,cAAe,MAAM,GACpD5hC,KAAKw5U,eACC3pT,EAAMw2M,cAAc9nO,QAAQ,SAAW,GACzCyB,KAAKk7U,gBAAgBrrT,EAAO7vB,KAAK65U,cAAchqT,EAAMw4R,oBAAqBroT,KAAKqoT,uBAGvFoyB,EAAUp/U,UAAU8/U,cAAgB,SAAUp8T,GAC1C,OAAIA,EACQA,EAAO46T,gBAAkB35U,KAAK05U,QAAU,WAAa36T,EAAO9M,MAEjE,aAEXwoU,EAAUp/U,UAAU6/U,gBAAkB,SAAUrrT,EAAOurT,GACnD,IAAK,IAAIh9U,EAAK,EAAGi9U,EAAYD,EAASh9U,EAAKi9U,EAAU5+U,OAAQ2B,IAAM,CAC/D,IAAI6T,EAAQopU,EAAUj9U,GACtB4B,KAAK4mT,iBAAiB30S,EAAO4d,EAAO7vB,KAAKs7U,kBAAkBzrT,EAAO5d,GAAO,MAGjFwoU,EAAUp/U,UAAUigV,kBAAoB,SAAUzrT,EAAO5d,EAAO+qO,QAC7C,IAAXA,IAAqBA,EAAS,IAClC,IAAI/vL,EAAYp9B,EAAM7uB,QAAQsC,GAAK,WAAa2O,EAAM8M,OAAS,UAAiB9M,EAAMkhB,MAClFpU,EAAS8Q,EAAM9Q,OAAO9M,EAAM8M,QAGhC,OAFAkuC,GAAcluC,EAAOinN,cAAgC,YAAhBjnN,EAAOrY,MAAsC,WAAhBqY,EAAOrY,MACrEqY,EAAOknN,OAAOnvM,QAAYm2B,EAAY,UAAY+vL,EAAU/vL,GACxDv8B,GAAWu8B,GAA6B,cAAhBluC,EAAOrY,MAAwBqY,EAAOknN,OAAOnvM,QAAWpG,GAAWu8B,EAAY,KAAO,OAE1HwtR,EAAUp/U,UAAUkgV,mBAAqB,SAAU1rT,EAAO5d,GAEtD,IAAK,IADDupU,KACKp9U,EAAK,EAAGyE,EAAKgtB,EAAM+R,cAAexjC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAI2gB,EAASlc,EAAGzE,GAChB6T,EAAQ,IAAIkiB,GAAMpV,EAAO9M,MAAOA,EAAMkhB,OACtCqoT,EAASh3U,KAAKxE,KAAKs7U,kBAAkBzrT,EAAO5d,GAAO,IAEvD,OAAOupU,GAEXf,EAAUp/U,UAAUogV,aAAe,SAAU5rT,EAAO9Q,EAAQ9M,EAAO+qO,GAE/D,YADe,IAAXA,IAAqBA,EAAS,IAC9Bh9O,KAAKi7U,aACEj7U,KAAK07U,kBAAkB38T,GAED,YAAxB8Q,EAAMw2M,cACJrmO,KAAKu7U,mBAAmB1rT,EAAO5d,GAG/BjS,KAAKs7U,kBAAkBzrT,EAAO5d,EAAO+qO,IAQpDy9F,EAAUp/U,UAAUs/U,0BAA4B,SAAUr+U,GACrB,SAA7B0D,KAAK6vB,MAAMw2M,gBAAsF,IAA1D/pO,EAAM6K,OAAO7D,GAAG/E,QAAQyB,KAAK6vB,MAAM7uB,QAAQsC,GAAK,MAGvFhH,EAAM6K,OAAO7D,GAAG/E,QAAQ,aAAe,GACvCyB,KAAK4mT,iBAAiB5mT,KAAKg0B,YAAY13B,EAAM6K,OAAO7D,IAAKtD,KAAK6vB,MAAOvzB,EAAM6K,SAGnFszU,EAAUp/U,UAAUurT,iBAAmB,SAAU30S,EAAO4d,EAAO7uB,GAM3D,OALAhB,KAAKi7U,aAAuC,WAAxBprT,EAAMw2M,cACc,kBAApCx2M,EAAM9Q,OAAO9M,EAAM8M,QAAQrY,MAC3B1F,EAAQsC,KAAOusB,EAAM7uB,QAAQsC,GAAK,WAAa2O,EAAM8M,OAAS,UAAY9M,EAAMkhB,MAAQ,aACxFnyB,EAAUA,EAAQqT,eAEdwb,EAAMw2M,eACV,IAAK,SACDrmO,KAAKqxE,UAAUxhD,EAAO5d,EAAOjS,KAAK07U,kBAAkB7rT,EAAM9Q,OAAO9M,EAAM8M,UACvE/e,KAAK27U,WAAW9rT,EAAM7uB,QAAQsC,GAAIusB,EAAM+R,eACxC,MACJ,IAAK,QACIuY,MAAMloC,EAAMkhB,SACbnzB,KAAKqxE,UAAUxhD,EAAO5d,GAAQjR,IAC9BhB,KAAK27U,WAAW9rT,EAAM7uB,QAAQsC,GAAIusB,EAAM+R,gBAE5C,MACJ,IAAK,UACIuY,MAAMloC,EAAMkhB,SACbnzB,KAAK47U,iBAAiB/rT,EAAOA,EAAM9Q,OAAQ9M,GAC3CjS,KAAK27U,WAAW9rT,EAAM7uB,QAAQsC,GAAIusB,EAAM+R,kBAKxD64S,EAAUp/U,UAAUg2E,UAAY,SAAUxhD,EAAO5d,EAAO4pU,GAC/ChsT,EAAMq/R,gBAA2D,IAAzCr/R,EAAMw2M,cAAc9nO,QAAQ,SACrDyB,KAAK87U,0BAA0BjsT,EAAO7vB,KAAKqoT,oBAAqBp2S,EAAO4d,EAAM9Q,QAEjF,IAAI1b,EAAYw4U,EAAiB,KAAOA,EAAiB,GAAGhpU,aAAa,UAAY,IACjFgpU,EAAiB,IAAMx4U,EAAU9E,QAAQyB,KAAK+7U,kBAAkBF,EAAiB,GAAGv4U,MAAQ,GAC5FtD,KAAKg8U,aAAaH,GAClB77U,KAAKi8U,iBAAiBj8U,KAAKqoT,oBAAqBp2S,KAGhDjS,KAAKk8U,YAAYL,GACjB77U,KAAKi8U,iBAAiBj8U,KAAKqoT,oBAAqBp2S,GAAO,KAG/DwoU,EAAUp/U,UAAUugV,iBAAmB,SAAU/rT,EAAO9Q,EAAQ9M,GAC5DjS,KAAKqxE,UAAUxhD,EAAO5d,EAAOjS,KAAKu7U,mBAAmB1rT,EAAO,IAAIsE,GAAMliB,EAAM8M,OAAQ9M,EAAMkhB,UAE9FsnT,EAAUp/U,UAAUygV,0BAA4B,SAAUjsT,EAAO5d,EAAOuiP,EAAcj+N,GAElF,IAAK,IADDxX,EACK5iB,EAAI,EAAGA,EAAI8V,EAAMxV,OAAQN,IAC9B4iB,EAASwX,EAAiBtkB,EAAM9V,GAAG4iB,SAC9B/e,KAAKi7U,eAAiBj7U,KAAKm8U,SAASlqU,EAAM9V,GAAIq4P,EAAcx0P,KAAKi7U,eAClC,YAA/Bj7U,KAAK2S,QAAQ0zN,gBAAgCrmO,KAAKm8U,SAASlqU,EAAM9V,GAAIq4P,GAAc,KAClFx0P,KAAKi7U,cAAgBj7U,KAAKm8U,SAASlqU,EAAM9V,GAAIq4P,GAAc,KAAUx0P,KAAKm8U,SAASlqU,EAAM9V,GAAIq4P,GAAc,MAC7Gx0P,KAAKg8U,aAAah8U,KAAKy7U,aAAa5rT,EAAO9Q,EAAQ9M,EAAM9V,KACzD8V,EAAMwW,OAAOtsB,EAAG,GAChBA,MAIZs+U,EAAUp/U,UAAUsgV,WAAa,SAAUS,EAASx6S,GAEhD,IAAK,IADDj9B,EAAa3E,KAAKg6U,gBAAgBh6U,KAAKqoT,qBAClCjqT,EAAK,EAAGyjC,EAAkBD,EAAexjC,EAAKyjC,EAAgBplC,OAAQ2B,IAAM,CACjF,IAAI2gB,EAAS8iB,EAAgBzjC,GACzB2gB,EAAO+X,UACP92B,KAAKq8U,uBAAuB3rT,GAAW0rT,EAAU,cAAgBr9T,EAAO9M,OAAQjS,KAAKm7U,cAAcp8T,GAASpa,GACvGlH,EAAkBizB,GAAW0rT,EAAU,cAAgBr9T,EAAO9M,SAC/DjS,KAAKq8U,uBAAuB3rT,GAAW0rT,EAAU,cAAgBr9T,EAAO9M,OAAQjS,KAAKm7U,cAAcp8T,GAASpa,MAK5H81U,EAAUp/U,UAAUghV,uBAAyB,SAAUr7U,EAASqC,EAAWsB,GAMvE,IAAK,IAJD21U,EACAgC,EACA5pG,EAHAt4N,EAAYpa,KAAKi7U,cAAgBj6U,GAAWA,EAAQuQ,WAIpDgrU,EAAgBv7U,EACX7E,EAAI,EAAGA,EAAIie,EAAS3d,OAAQN,IACjCm+U,EAAmBlgU,EAASje,GAAG0W,aAAa,UAAY,GACxDypU,EAAkBliU,EAASje,GAAGsE,WAAWoS,aAAa,UAAY,IACrB,IAAzCynU,EAAiB/7U,QAAQ8E,KACe,IAAxCi5U,EAAgB/9U,QAAQ8E,IAAqBsB,EAC7C3E,KAAKq6U,YAAYjgU,EAASje,GAAI6D,KAAK45U,aAGnC2C,EAAgBniU,EAASje,GACzB6D,KAAKu6U,eAAengU,EAASje,GAAI6D,KAAK45U,aAG1C55U,KAAK2S,QAAQuzS,cAAgBlmT,KAAK2S,QAAQs9N,eAAen5M,UACzD47M,EAAclyO,SAASyuB,eAAejvB,KAAK2S,QAAQ3R,QAAQsC,GAAK,uBAAyBD,EAAUnG,MAAM,YAAY,OAEjHo9U,EAAmBiC,EAAc1pU,aAAa,UAAY,GAC1DypU,EAAkBC,EAAc97U,WAAWoS,aAAa,UAAY,IACvB,IAAzCynU,EAAiB/7U,QAAQ8E,KAA6D,IAAxCi5U,EAAgB/9U,QAAQ8E,IAAqBsB,EAC3F3E,KAAKq6U,YAAY3nG,EAAa1yO,KAAK45U,YAGnC55U,KAAKu6U,eAAe7nG,EAAa1yO,KAAK45U,cAKtDa,EAAUp/U,UAAU6gV,YAAc,SAAUt4U,GACxC,IAAK,IAAIxF,EAAK,EAAGukE,EAAa/+D,EAAUxF,EAAKukE,EAAWlmE,OAAQ2B,IAAM,CAClE,IAAI4C,EAAU2hE,EAAWvkE,GACrB4C,IACAhB,KAAKu6U,eAAev5U,EAAQP,WAAYT,KAAK45U,YAC7C55U,KAAKu6U,eAAev5U,EAAShB,KAAK45U,YAClC55U,KAAKq6U,YAAYr5U,EAAShB,KAAK+7U,kBAAkB/6U,EAAQsC,QAIrEm3U,EAAUp/U,UAAU0gV,kBAAoB,SAAUz4U,GAC9C,OAAOtD,KAAKm7U,cAAcn7U,KAAK2S,QAAQoM,OAAO/e,KAAKg0B,YAAY1wB,GAAIyb,UAEvE07T,EAAUp/U,UAAU2gV,aAAe,SAAUp4U,GACzC,IAAK,IAAIxF,EAAK,EAAG46I,EAAap1I,EAAUxF,EAAK46I,EAAWv8I,OAAQ2B,IAAM,CAClE,IAAI4C,EAAUg4I,EAAW56I,GACrB4C,GACAhB,KAAKu6U,eAAev5U,EAAShB,KAAK+7U,kBAAkB/6U,EAAQsC,OAIxEm3U,EAAUp/U,UAAU4gV,iBAAmB,SAAUb,EAASnpU,EAAO7N,GAC7D,IAAK,IAAIjI,EAAI,EAAGA,EAAIi/U,EAAQ3+U,OAAQN,IAC5B6D,KAAKm8U,SAASf,EAAQj/U,GAAI8V,EAAOjS,KAAKi7U,gBACtCG,EAAQ3yT,OAAOtsB,EAAG,GAClBA,KAGJiI,GACAg3U,EAAQ52U,KAAKyN,IAGrBwoU,EAAUp/U,UAAU8gV,SAAW,SAAUv9U,EAAOC,EAAQ29U,GACpD,OAAS59U,EAAMmgB,SAAWlgB,EAAOkgB,QAA0C,YAA/B/e,KAAK2S,QAAQ0zN,gBAAgCm2G,KACjFA,GAAoB59U,EAAMu0B,QAAUt0B,EAAOs0B,QAOvDsnT,EAAUp/U,UAAUktT,gBAAkB,SAAU14R,EAAO4sT,GACnDz8U,KAAKi7U,aAA2B,WAAZwB,EACpB,IAAIp0B,EAAsB3pT,KAAWsB,KAAKqoT,oBAAqB,MAAM,GACrEroT,KAAK08U,uBAAuB7sT,EAAO7vB,KAAKqoT,oBAAqBx4R,EAAM9Q,QACnE/e,KAAK27U,WAAW9rT,EAAM7uB,QAAQsC,GAAIusB,EAAM+R,eACxC5hC,KAAKk7U,gBAAgBrrT,EAAOw4R,IAGhCoyB,EAAUp/U,UAAUshV,gBAAkB,SAAU9sT,EAAO9Q,GACnD,IAAI69T,EAAc58U,KAAKm7U,cAActrT,EAAM+R,cAAc7iB,IACrD88T,EAAmBr7U,SAASkN,uBAAuBkvU,GACvD58U,KAAKi7U,aAAuC,WAAxBprT,EAAMw2M,cAC1B,IAAIw2G,GAAqB,EACzB,GAAIhB,EAAiBp/U,OAAS,EAAG,CAE7B,IAAK,IADDmH,KACKzH,EAAI,EAAGA,EAAI0/U,EAAiBp/U,OAAQN,IACzCyH,EAASY,KAAKq3U,EAAiB1/U,IAEnC6D,KAAKg8U,aAAap4U,GAClB5D,KAAKi7U,cAAe,EACpBj7U,KAAKi8U,iBAAiBj8U,KAAKqoT,oBAAqB,IAAIl0R,GAAMpV,EAAQmtF,MAClE,IAAK,IAAI9tG,EAAK,EAAGyE,EAAKgtB,EAAM+R,cAAexjC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAI24N,EAAWl0N,EAAGzE,GAElB,GADAw+U,EAAc58U,KAAKm7U,cAAcpkH,GAC7Bv2N,SAASkN,uBAAuBkvU,GAAangV,OAAS,EAAG,CACzD,IAAK,IAAIwH,EAAK,EAAG64U,EAAal5U,EAAUK,EAAK64U,EAAWrgV,OAAQwH,IAAM,CAClE,IAAIjD,EAAU87U,EAAW74U,GACzBjE,KAAKq8U,uBAAuBr7U,EAAS47U,GAAa,GAEtDC,GAAqB,EACrB,OAGJA,IACA78U,KAAKi7U,aAAuC,WAAxBprT,EAAMw2M,cAC1BrmO,KAAK27U,WAAW9rT,EAAM7uB,QAAQsC,GAAIusB,EAAM+R,oBAG3C,CAED,IAAK,IADD2qM,EAAiBvsO,KAAK07U,kBAAkB7rT,EAAM+R,cAAc7iB,IACvDtU,EAAK,EAAGsyU,EAAmBxwG,EAAgB9hO,EAAKsyU,EAAiBtgV,OAAQgO,IAAM,CACpF,IAAIqiO,EAAgBiwG,EAAiBtyU,GACrCzK,KAAKq8U,uBAAuBvvG,EAAe8vG,GAAa,GAE5D58U,KAAKi7U,cAAe,EACpBj7U,KAAKqxE,UAAUxhD,EAAO,IAAIsE,GAAMpV,EAAQmtF,KAAMqgI,GAC9CvsO,KAAKi7U,aAAuC,WAAxBprT,EAAMw2M,cAC1BrmO,KAAK27U,WAAW9rT,EAAM7uB,QAAQsC,GAAIusB,EAAM+R,iBAGhD64S,EAAUp/U,UAAUqgV,kBAAoB,SAAU38T,GAC9C,IAAIwtN,GAAkBxtN,EAAO+tN,eAI7B,OAHI/tN,EAAOknN,OAAOnvM,SAA2B,YAAhB/X,EAAOrY,MAAsC,WAAhBqY,EAAOrY,OAAsBqY,EAAOinN,cAC1FuG,EAAe/nO,KAAKua,EAAO8tN,eAExBN,GAEXkuG,EAAUp/U,UAAU24B,YAAc,SAAU1wB,GACxC,IAAI4wB,GAAO,MAAO,OAelB,OAdI5wB,EAAG/E,QAAQ,gBAAkB,GAC7B21B,EAAM5wB,EAAGpG,MAAM,gBACX,GAAKg3B,EAAI,GAER5wB,EAAG/E,QAAQ,gBAAkB,GAClC21B,EAAM5wB,EAAGpG,MAAM,gBACX,GAAKg3B,EAAI,GAER5wB,EAAG/E,QAAQ,YAAc,EAC9B21B,EAAM5wB,EAAGpG,MAAM,YAAY,GAAGA,MAAM,WAE/BoG,EAAG/E,QAAQ,aAAe,IAC/B21B,EAAI,GAAK5wB,EAAGpG,MAAM,YAAY,IAE3B,IAAIi3B,GAAMC,SAASF,EAAI,GAAI,IAAKE,SAASF,EAAI,GAAI,MAO5DumT,EAAUp/U,UAAU2hV,8BAAgC,SAAUntT,EAAOotT,GACjEj9U,KAAK08U,uBAAuB7sT,EAAO7vB,KAAKqoT,oBAAqBx4R,EAAM9Q,QACnE,IAAI2T,EAAO,IAAI6C,GAAK0nT,EAASlwU,EAAGkwU,EAASjwU,EAAGiwU,EAASjnU,MAAOinU,EAASlnU,QACjEmnU,EAAa,IAAIjqT,GAAcpD,EAAMu+M,qBAAqBzQ,eAAe5wN,EAAG8iB,EAAMu+M,qBAAqBzQ,eAAe3wN,GAC1HhN,KAAKm9U,aAAazqT,EAAMwqT,GACxB,IAAIjmT,EACAhlB,EACAmrU,KACAC,KACJr9U,KAAKi7U,cAAe,EA4CpB,IAAK,IA1CDh8U,EAAU,SAAU8f,GACpB,GAAIA,EAAO+X,QAAS,CAChBG,EAASlY,EAAOkY,OAChBmmT,KACA,IAAIE,EACAC,GACC1tT,EAAMswM,eAAgD,IAAhCphN,EAAOrY,KAAKnI,QAAQ,QACzCsxB,EAAMswM,eAAgD,IAAhCphN,EAAOrY,KAAKnI,QAAQ,QAK5C++U,EAAgBv+T,EAAOjH,MAAM4a,KAAK3lB,EAAImwU,EAAWnwU,EACjDwwU,EAAgBx+T,EAAOnH,MAAM8a,KAAK1lB,EAAIkwU,EAAWlwU,IALjDswU,EAAgBv+T,EAAOjH,MAAM4a,KAAK1lB,EAAIkwU,EAAWlwU,EACjDuwU,EAAgBx+T,EAAOnH,MAAM8a,KAAK3lB,EAAImwU,EAAWnwU,GAMrD,IAAK,IAAI0W,EAAI,EAAGA,EAAIwT,EAAOx6B,OAAQgnB,IAAK,CACpC,IAAIsW,EAAyB,cAAhBhb,EAAOrY,KAAuBuwB,EAAOxT,GAAGsW,OACjD9C,EAAOxT,GAAGqjN,QAAQ,GAAG95N,EACrBwwU,OAAiB,GAEjBA,EADgB,kBAAhBz+T,EAAOrY,KACUuwB,EAAOxT,GAAGqjN,QAAQlqM,KAAK,SAAU4nB,GAC9C,OAAO1uB,GAAa0uB,EAAOz3C,EAAIuwU,EAAe94R,EAAOx3C,EAAIuwU,EAAe7qT,KAI3DuE,EAAOxT,GAAGgkN,gBAAgB7qM,KAAK,SAAU1D,GACtD,OAAOA,GAAYpD,GAAaoD,EAASnsB,EAAIuwU,EAAepkT,EAASlsB,EAAIuwU,EAAe7qT,OAGtD,cAApB3T,EAAOosL,WACzBl5L,EAAQ,IAAIkiB,GAAMpV,EAAO9M,MAAOglB,EAAOxT,GAAGxR,OAC1Ck9F,EAAO99B,UAAUxhD,EAAO5d,EAAOk9F,EAAOssO,aAAa5rT,EAAO9Q,EAAQ9M,IAClEmrU,EAAoB54U,MAAOuI,EAAGkqB,EAAOxT,GAAGmO,OAAO1kB,WAAYF,EAAG+sB,KAE9DyjT,GAAkC,cAAhBz+T,EAAOrY,MACzB02U,EAAoB54U,MAAOuI,EAAGkqB,EAAOxT,GAAGmO,OAAO1kB,WAAYF,EAAGiqB,EAAOxT,GAAGqjN,QAAQ,GAAG95N,IAG3FqwU,EAAqB74U,KAAK44U,KAG9BjuO,EAASnvG,KACJ5B,EAAK,EAAGyE,EAAKgtB,EAAM+R,cAAexjC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE7Da,EADa4D,EAAGzE,IAGpB4B,KAAK27U,WAAW9rT,EAAM7uB,QAAQsC,GAAIusB,EAAM+R,eACxC5hC,KAAKumO,WAAa,IAAIhxM,GAAK0nT,EAASlwU,EAAGkwU,EAASjwU,EAAGiwU,EAASjnU,MAAOinU,EAASlnU,QAC5E/V,KAAKy9U,kBAAmBR,EAASlwU,EAAIkwU,EAASjnU,MAAQinU,EAASjwU,GAC/D,IAAI/M,GACA82B,KAAM+hM,GACN4kH,mBAAoBL,EACpBhlT,QAAQ,GAEZxI,EAAMnJ,QAAQoyM,GAAc74N,IAEhCw6U,EAAUp/U,UAAU8hV,aAAe,SAAUzqT,EAAM2tO,GAC/C3tO,EAAK3lB,GAAKszP,EAAKtzP,EACf2lB,EAAK1lB,GAAKqzP,EAAKrzP,GAOnBytU,EAAUp/U,UAAUsiV,iBAAmB,SAAU9tT,EAAOotT,GACpD,IAAIW,EAAkB/tT,EAAMu+M,qBAAqBzQ,eACjD,OAAQ9tM,EAAMw2M,eACV,IAAK,QACD42G,EAASjwU,EAAI4wU,EAAgB5wU,EAC7BiwU,EAASlnU,OAAS6nU,EAAgB7nU,OAClC,MACJ,IAAK,QACDknU,EAASlwU,EAAI6wU,EAAgB7wU,EAC7BkwU,EAASjnU,MAAQ4nU,EAAgB5nU,MAGzC,GAAIinU,EAASjnU,MAAQ,GAAKinU,EAASlnU,OAAS,EACxC,OAAO,KAEX,IAAI/U,EAAU0vB,GAAW1wB,KAAKg7U,aAI9B,GAHIh7U,KAAKy1H,WACLhlG,GAAczwB,KAAK86U,aAEnB95U,EACAhB,KAAKs3E,cAAct2E,EAASi8U,OAE3B,CACD,IAAIY,EAAYhuT,EAAME,SAAS+9C,aAAcxqE,GAAItD,KAAK+6U,mBACtDlrT,EAAMW,UAAU7uB,YAAYk8U,IAC5B78U,EAAU6uB,EAAME,SAASuU,cAAc,IAAI04L,GAAWh9N,KAAKg7U,YAAanrT,EAAM6F,WAAWzH,mBAAqB4H,MAAOhG,EAAM6F,WAAWxH,oBAAqBlY,MAAO,GAAK,EAAGinU,KAClKz5U,aAAa,QAAS,gBAC9Bq6U,EAAUl8U,YAAYX,KAG9By5U,EAAUp/U,UAAUoiV,kBAAoB,SAAU1wU,EAAGC,GACjD,IAAIyoH,EAAYz1H,KAAK6vB,MAAME,SAAS+9C,aAChCxqE,GAAItD,KAAK86U,YACTp2U,MAAO,yCAEX+wH,EAAU9zH,YAAY3B,KAAK6vB,MAAME,SAASsU,WAAW,IAAI44L,GAAaj9N,KAAK86U,YAAc,UAAW,WAAajlT,MAAO71B,KAAK6vB,MAAM6F,WAAWvH,sBAAuBnY,MAAO,GAAK,EAAGjJ,EAAGC,EAAG,MAC1L,IAAI6nB,EAAY,MAAQ9nB,EAAI,GAAK,KAAOC,EAAI,GAAK,OAASD,EAAI,GAAK,KAAOC,EAAI,GAAK,OAASD,EAAI,GAAK,KAAOC,EAAI,GAC5G,OAASD,EAAI,GAAK,KAAOC,EAAI,GACjCyoH,EAAU9zH,YAAY3B,KAAK6vB,MAAME,SAASyF,UACtClyB,GAAItD,KAAK86U,YAAc,SAAUhhT,EAAGjF,EACpCyJ,OAAQt+B,KAAK6vB,MAAM6F,WAAWvH,sBAC9B+W,eAAgB,EAAG9G,KAAMp+B,KAAK6vB,MAAM6F,WAAWvH,yBAEnDnuB,KAAKy1H,UAAYA,EACjB/kG,GAAW1wB,KAAK+6U,kBAAkBp5U,YAAY8zH,IAOlDglN,EAAUp/U,UAAUyiV,sBAAwB,SAAUjuT,EAAOvzB,GACpDA,EAAM6K,OAAO7D,GAAG/E,QAAQyB,KAAK86U,cAAgB,IAAuC,IAAhCx+U,EAAMoK,KAAKnI,QAAQ,UACxEyB,KAAK08U,uBAAuB7sT,EAAO7vB,KAAKqoT,oBAAqBx4R,EAAM9Q,QACnE/e,KAAK27U,WAAW9rT,EAAM7uB,QAAQsC,GAAIusB,EAAM+R,eACxCr9B,EAAOmsB,GAAW1wB,KAAK+6U,mBACvB/6U,KAAK+9U,mBAAkB,EAAOluT,EAAMW,UAAW,QAC/CxwB,KAAKumO,WAAa,OAQ1Bk0G,EAAUp/U,UAAU2iV,sBAAwB,SAAUnuT,EAAOqJ,EAAU+kT,GACnE,IAAIvrT,EAAO,IAAI6C,GAAKv1B,KAAKumO,WAAWx5N,EAAG/M,KAAKumO,WAAWv5N,EAAGhN,KAAKumO,WAAWvwN,MAAOhW,KAAKumO,WAAWxwN,QAC7FmoU,EAASl+U,KAAKm+U,eAAetuT,EAAMW,UAAWkC,EAAMwG,GACpDl5B,KAAKo+U,WACL1rT,EAAO6I,GAAuB7I,EAAK3lB,EAAG2lB,EAAK1lB,EAAI0lB,EAAK3lB,EAAI2lB,EAAK1c,MAAS0c,EAAK1lB,EAAI0lB,EAAK3c,OAAS8Z,EAAMu+M,qBAAqBzQ,gBACxH39N,KAAK29U,iBAAiB9tT,EAAO6C,GAC7B1yB,KAAKi9U,SAAWvqT,GAEhBurT,IACAj+U,KAAKo+U,SAAWF,IAGxBzD,EAAUp/U,UAAU8iV,eAAiB,SAAUE,EAAgB3rT,EAAMwG,GACjE,IAAIolT,EAAc,YACdJ,GAAS,EACb,GAAKl+U,KAAKo+U,SAeL,CACD,IAAIrxU,EAAI2lB,EAAK3lB,EACTC,EAAI0lB,EAAK1lB,EACTgJ,EAASkjB,EAASnsB,EAAIA,EACtBgJ,EAAUmjB,EAASlsB,EAAIA,EAC3B,OAAQhN,KAAKu+U,YACT,KAAK,EACDxoU,EAAS1J,KAAKE,IAAKmmB,EAAK3c,OAAS2c,EAAK1lB,EAAKksB,EAASlsB,GACpD0lB,EAAK1lB,EAAIX,KAAK8T,IAAKuS,EAAK3c,OAAS2c,EAAK1lB,EAAIksB,EAASlsB,GACnD0lB,EAAK3c,OAASA,EACd,MACJ,KAAK,EACDC,EAAQ3J,KAAKE,IAAKmmB,EAAK1c,MAAQ0c,EAAK3lB,EAAKmsB,EAASnsB,GAClD2lB,EAAK3lB,EAAIV,KAAK8T,IAAKuS,EAAK1c,MAAQ0c,EAAK3lB,EAAImsB,EAASnsB,GAClD2lB,EAAK1c,MAAQA,EACb,MACJ,KAAK,EACD0c,EAAK3c,OAAS1J,KAAKE,IAAIwJ,GACvB2c,EAAK1lB,EAAIX,KAAK8T,IAAI+Y,EAASlsB,EAAGA,GAC9B,MACJ,KAAK,EACD0lB,EAAK1c,MAAQ3J,KAAKE,IAAIyJ,GACtB0c,EAAK3lB,EAAIV,KAAK8T,IAAI+Y,EAASnsB,EAAGA,GAC9B,MACJ,KAAK,EACD2lB,EAAK1c,MAAQ3J,KAAKE,IAAIyJ,GACtB0c,EAAK3c,OAAS1J,KAAKE,IAAIwJ,GACvB2c,EAAK3lB,EAAIV,KAAK8T,IAAI+Y,EAASnsB,EAAGA,GAC9B2lB,EAAK1lB,EAAIX,KAAK8T,IAAI+Y,EAASlsB,EAAGA,SArCtC,IAAK,IALDwxU,GAAe,IAAIjpT,GAAK7C,EAAK3lB,EAAI2lB,EAAK1lB,EAAI,GAAK0lB,EAAK1c,MAAQ,EAAG,IAC/D,IAAIuf,GAAM7C,EAAK3lB,EAAI,GAAK2lB,EAAK1lB,EAAG,GAAI0lB,EAAK3c,QACzC,IAAIwf,GAAK7C,EAAK3lB,EAAI2lB,EAAK1lB,EAAI0lB,EAAK3c,OAAS,GAAK2c,EAAK1c,MAAQ,GAAI,IAC/D,IAAIuf,GAAM7C,EAAK3lB,EAAI2lB,EAAK1c,MAAQ,GAAK0c,EAAK1lB,EAAI,EAAG,GAAI0lB,EAAK3c,OAAS,IACnE,IAAIwf,GAAM7C,EAAK3lB,EAAI2lB,EAAK1c,MAAQ,GAAM0c,EAAK1lB,EAAI0lB,EAAK3c,OAAS,GAAK,GAAI,KACjE5Z,EAAI,EAAGA,EAAIqiV,EAAY/hV,OAAQN,IACpC,GAAI25B,GAAaoD,EAASnsB,EAAGmsB,EAASlsB,EAAGwxU,EAAYriV,IAAK,CACtDmiV,EAAqB,IAANniV,EAAWmiV,EAAeniV,EAAI,GAAM,EAAK,YAAc,YACtE+hV,GAAS,EACTl+U,KAAKu+U,WAAapiV,EAClB,MAsCZ,OAFA6D,KAAK+9U,kBAAkBG,EAAQxtT,GAAW1wB,KAAKg7U,aAAcsD,GAC7Dt+U,KAAK+9U,kBAAkBG,EAAQG,EAAgBC,GACxCJ,GAEXzD,EAAUp/U,UAAU0iV,kBAAoB,SAAUU,EAAUC,EAAaJ,GACrEA,EAAcG,EAAWH,EAAet+U,KAAK2S,QAAQ6d,YAAckuT,EAAe,OAAS,OAC3FA,EAAYl7U,aAAa,QAAS,UAAY86U,EAAc,MAEhE7D,EAAUp/U,UAAUqhV,uBAAyB,SAAU7sT,EAAO5d,EAAOskB,GACjEtkB,EAAMwW,OAAO,EAAGxW,EAAMxV,QAEtB,IAAK,IADD8vO,EACKnuO,EAAK,EAAGytO,EAAqBt1M,EAAkBn4B,EAAKytO,EAAmBpvO,OAAQ2B,IAAM,CAC1F,IAAI2gB,EAAS8sN,EAAmBztO,GAChCmuO,EAAiBvsO,KAAK07U,kBAAkB38T,GACxC/e,KAAKg8U,aAAazvG,GAClB,IAAK,IAAI1pO,EAAK,EAAG87U,EAAmBpyG,EAAgB1pO,EAAK87U,EAAiBliV,OAAQoG,IAAM,CACpF,IAAIiqO,EAAgB6xG,EAAiB97U,GACrC7C,KAAKg8U,aAAah8U,KAAKw6U,YAAY1tG,OAI/C2tG,EAAUp/U,UAAUi8E,cAAgB,SAAUtzE,EAAKi5O,GAE/C,IAAK,IAAI7+O,EAAK,EAAGC,EADNC,OAAOhB,KAAK2/O,GACS7+O,EAAKC,EAAO5B,OAAQ2B,IAAM,CACtD,IAAIf,EAAMgB,EAAOD,GACjB4F,EAAIR,aAAanG,EAAK4/O,EAAO5/O,MAQrCo9U,EAAUp/U,UAAUujV,iBAAmB,SAAU/uT,EAAOgvT,EAAcC,GAClE,IAAIpsT,EAAO,IAAI6C,GAAKv1B,KAAKumO,WAAWx5N,EAAG/M,KAAKumO,WAAWv5N,EAAGhN,KAAKumO,WAAWvwN,MAAOhW,KAAKumO,WAAWxwN,QACjG2c,EAAK3lB,GAAM8xU,EAAa9xU,EAAI8iB,EAAMq2M,OAClCxzM,EAAK1lB,GAAM6xU,EAAa7xU,EAAI6iB,EAAMs2M,OAClCzzM,EAAO6I,GAAuB7I,EAAK3lB,EAAG2lB,EAAK1lB,EAAG0lB,EAAK3lB,EAAI2lB,EAAK1c,MAAO0c,EAAK3c,OAAS2c,EAAK1lB,EAAG6iB,EAAMu+M,qBAAqBzQ,gBAChHmhH,EACA9+U,KAAK29U,iBAAiB9tT,EAAO6C,GAG7B1yB,KAAKg9U,8BAA8BntT,EAAO6C,IAQlD+nT,EAAUp/U,UAAUq/U,kBAAoB,SAAU75U,GAC9C,IAAIgvB,EAAQ7vB,KAAK6vB,MACW,SAAxBA,EAAMw2M,iBAGLrmO,KAAK++U,UAAY/+U,KAAKo+U,WAAap+U,KAAKi9U,SAASjnU,MAAQ,GAAKhW,KAAKi9U,SAASlnU,OAAS,EACtF/V,KAAKg9U,8BAA8BntT,EAAO7vB,KAAKi9U,UAE1Cj9U,KAAKg/U,cAAgBh/U,KAAKumO,WAAWvwN,OAAShW,KAAKumO,WAAWxwN,QACnE/V,KAAK4+U,iBAAiB/uT,EAAO7vB,KAAKi9U,UAEtCj9U,KAAK++U,UAAW,EAChB/+U,KAAKg/U,cAAe,EACpBh/U,KAAKo+U,UAAW,EAChBp+U,KAAK89U,sBAAsBjuT,EAAOhvB,KAEtC45U,EAAUp/U,UAAU4jV,YAAc,SAAUpvT,EAAO8tM,GAC/C,OAAOpiM,GAAuB1L,EAAMk8R,WAAYl8R,EAAMo8R,WAAYp8R,EAAMq2M,OAAQr2M,EAAMs2M,OAAQxI,IAGlG88G,EAAUp/U,UAAUg2G,UAAY,SAAUxhF,EAAO8tM,EAAgBouF,EAAYE,EAAY3vT,GACrF0D,KAAK++U,SAAYlvT,EAAMw2M,cAAc9nO,QAAQ,SAAW,IAAOsxB,EAAMs8R,cAAgBt8R,EAAMmB,UAC/D,eAAxBnB,EAAMk3M,cACN/mO,KAAK++U,WACL/+U,KAAKi9U,SAAW,IAAI1nT,GAAK1F,EAAMk8R,WAAYl8R,EAAMo8R,WAAY,EAAG,IAC5Dp8R,EAAMk8R,WAAapuF,EAAe5wN,GAAK8iB,EAAMk8R,WAAcpuF,EAAe5wN,EAAI4wN,EAAe3nN,OAC7F6Z,EAAMo8R,WAAatuF,EAAe3wN,GAAK6iB,EAAMo8R,WAActuF,EAAe3wN,EAAI2wN,EAAe5nN,UAC7F/V,KAAK++U,UAAW,IAGpB/+U,KAAKumO,aACLvmO,KAAKi9U,SAAW,IAAI1nT,GAAK1F,EAAMk8R,WAAYl8R,EAAMo8R,WAAY,EAAG,GAChEjsT,KAAKg+U,sBAAsBnuT,EAAO,IAAIoD,GAAc84R,EAAYE,IAAa,GAC7EjsT,KAAKg/U,aAAelpT,GAAai2R,EAAYE,EAAYjsT,KAAKumO,cAItEk0G,EAAUp/U,UAAU0uT,UAAY,SAAUztT,GACtC,IAAIuzB,EAAQ7vB,KAAK6vB,MACjB,GAA4B,SAAxBA,EAAMw2M,cAAV,CAGmB,cAAf/pO,EAAMoK,OAAyB8E,GAAQub,OAASvb,GAAQ2gU,SAAWnsU,KAAK++U,UAAYziV,EAAMopB,gBAC1FppB,EAAMopB,iBAESoQ,GAAajG,EAAMq2M,OAAQr2M,EAAMs2M,OAAQt2M,EAAMu+M,qBAAqBzQ,iBAE/E39N,KAAKg/U,eAAiBh/U,KAAKo+U,SAC3Bp+U,KAAK4+U,iBAAiB/uT,EAAO7vB,KAAKi9U,UAAU,GAEvCj9U,KAAK++U,WAAa/+U,KAAKo+U,WAC5Bp+U,KAAKi9U,SAAWj9U,KAAKi/U,YAAYpvT,EAAOA,EAAMu+M,qBAAqBzQ,gBACnE39N,KAAK29U,iBAAiB9tT,EAAO7vB,KAAKi9U,WAElCj9U,KAAKumO,YACLvmO,KAAKg+U,sBAAsBnuT,EAAO,IAAIoD,GAAcpD,EAAMq2M,OAAQr2M,EAAMs2M,UAI5EnmO,KAAK06U,kBAAkBp+U,KAO/Bm+U,EAAUp/U,UAAU0kC,cAAgB,WAChC,MAAO,aAOX06S,EAAUp/U,UAAUiX,QAAU,SAAUud,GACpC7vB,KAAKpD,uBAGF69U,GACTlB,ICzrBE2F,GAA2B,WAK3B,SAASA,EAAUrvT,GACf7vB,KAAKm/U,YAAc,EACnBn/U,KAAK6vB,MAAQA,EAqnBjB,OAnnBAqvT,EAAU7jV,UAAUw/U,qBAAuB,SAAU97T,EAAQknN,GACzD,IAAI54N,EACAsgG,EAAS5uF,EAAO8Q,MAAME,SAC1B1iB,EAA2C,cAA/B0R,EAAO8Q,MAAMk3M,cAAgC,aAAehoN,EAAOgV,SAAShnB,EAAI,IAAOgS,EAAOgV,SAAU,EAAI,IAAM,GAC1HkyM,EAAOzjJ,UAAU1rD,UACjB/X,EAAOmuN,aAAev/H,EAAO7/B,aACzBxqE,GAAMtD,KAAK6vB,MAAM7uB,QAAQsC,GAAK,aAAeyb,EAAO9M,MACpD5E,UAAaA,EACb0/N,YAAa,QAAU/sO,KAAK6vB,MAAM7uB,QAAQsC,GAAK,wBAA0Byb,EAAO9M,MAAQ,MAE5F8M,EAAO4W,YAAcg4E,EAAO7/B,aACxBxqE,GAAMtD,KAAK6vB,MAAM7uB,QAAQsC,GAAK,YAAcyb,EAAO9M,MACnD5E,UAAaA,EACb0/N,YAAa,QAAU/sO,KAAK6vB,MAAM7uB,QAAQsC,GAAK,wBAA0Byb,EAAO9M,MAAQ,OAGhGjS,KAAK0sO,aAAiC,YAAhB3tN,EAAOrY,OAAsBu/N,EAAOnvM,SAAa92B,KAAKgmO,aAAajnN,GAAiC,EAArBknN,EAAOlwN,OAAS,EACrH/V,KAAKo/U,SAAWp/U,KAAK6vB,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAQ,UACpEjS,KAAKq/U,qBAAqBtgU,EAAQA,EAAOknN,OAAOzjJ,UAAUtuE,UAC1DlU,KAAKs/U,gBAAsD,eAApCt/U,KAAK6vB,MAAM+zM,UAAUt2M,WACxCttB,KAAK6vB,MAAMvC,YAActtB,KAAK6vB,MAAM6F,WAAWpI,WAAattB,KAAK6vB,MAAM+zM,UAAUt2M,YAEzF4xT,EAAU7jV,UAAUgkV,qBAAuB,SAAUtgU,EAAQ7K,GACzD,IAAK6K,EAAOyO,SAASsJ,QACjB,OAAO,KAEN,GAAI/X,EAAOyO,SAASsJ,SAAwC,eAA7B92B,KAAK6vB,MAAMk3M,cAAgC,CAC3E,IAAIlyM,EAAY9V,EAAOyO,SAASqH,UAC5B0qT,EAAiBv/U,KAAK6vB,MAAMu8M,eAAemzG,eAC3CC,EAAiBx/U,KAAK6vB,MAAMu8M,eAAeozG,eAC3Cx/U,KAAKgmO,aAAajnN,IACD,QAAb7K,GAAmC,SAAbA,IAElBlU,KAAKm/U,YADS,SAAdtqT,GAAsC,UAAdA,EACL2qT,EAGA,GAGV,UAAbtrU,GAAqC,SAAbA,IAEpBlU,KAAKm/U,YADS,SAAdtqT,GAAsC,SAAdA,EACL0qT,EAGA,KAKV,QAAbrrU,GAAmC,UAAbA,GAAqC,SAAbA,IAC3B,SAAd2gB,GAAsC,SAAdA,GAA2B9V,EAAO8Q,MAAMswM,aAIjEngO,KAAKm/U,YAAc,EAHnBn/U,KAAKm/U,YAAcI,GAMV,WAAbrrU,GAAsC,SAAbA,IAErBlU,KAAKm/U,YADS,SAAdtqT,GAAsC,UAAdA,EACL2qT,EAGA,SAM/Bx/U,KAAKm/U,YAAc,GAG3BD,EAAU7jV,UAAU2qO,aAAe,SAAUjnN,GACzC,OAAOA,EAAOinN,cAAgC,cAAhBjnN,EAAOrY,MAMzCw4U,EAAU7jV,UAAUsyG,OAAS,SAAU5uF,EAAQ8Q,EAAO2yD,GAClD,IAAIziF,EAAQC,KAEZA,KAAK66U,qBAAqB97T,EAAQA,EAAOknN,QACzC,IAAIvzM,EACA+sT,EACAC,EACAtnT,EACA6M,EACAjI,EACJh9B,KAAKqvU,SAAWx/S,EAAMsG,oBACtBn2B,KAAK2/U,cAAgB5gU,EAAOnH,MAAM2b,WAClC,IAAIvyB,EAAUG,EAAc,OACxBmC,GAAIusB,EAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAQ,0BAGvD8M,EAAOkY,OAAOC,IAAI,SAAU/D,EAAOlhB,GAC/BlS,EAAMk9B,OAASulD,EAAUvlD,OACzB,IACI2iT,EADApoB,KAEAn3D,EAAOthP,EAAOgV,SAClBkR,GAAWjvB,MAAOwsE,EAAUv9C,OAAOjvB,MAAO6f,MAAO2sD,EAAUv9C,OAAOpP,OAClE,IAAIgqT,EAAYnhV,KAAW7B,EAAS,aAAc2lF,EAAUzzD,MAAO,MAAM,GACzE,GAAKoE,EAAMs0M,gBAAgBhrO,QAAU02B,EAAMs0M,gBAAgB,IACtC,kBAAhB1oN,EAAOrY,MAA4BysB,EAAM2zM,QAAQrqO,OAAS,CAE3DmjV,GADApoB,EAAY37R,GAAa1I,EAAOpU,IACRtiB,OACxB,IAAK,IAAIN,EAAI,EAAGA,EAAIyjV,EAAazjV,IAC7Bi8B,GACIC,QAAQ,EAAOtB,KAAMmhM,GAAYn5M,OAAQA,EACzCoU,MAAOA,EAAOrE,KAAM0oS,EAAUr7T,GAAI8oC,OAAQA,EAC1CpP,MAAO2sD,EAAUpkD,KAAMnvB,SAAUuzE,EAAUvzE,SAAU8f,KAAM8wT,GAE/DhwT,EAAMnJ,QAAQwxM,GAAY9/L,GACrBA,EAASC,SACVt4B,EAAM+/U,eAAiB1nT,EAASvC,MAChC91B,EAAMggV,iBAAiB3nT,GACvBr4B,EAAM2sO,aAA+B,WAAhB3tN,EAAOrY,KAAqBysB,EAAM2zM,QAAQ,GAAG/wN,OAAS,EAAKhW,EAAM2sO,aAC5D,OAAtBt0M,EAASnpB,SACTlP,EAAMigV,wBAAwBh/U,EAAS+d,EAAQyjE,EAAWrvD,EAAOiF,EAAUj8B,IAG3E6gC,EAAWnO,GAAYuJ,EAAStJ,KAAM0zD,EAAUzzD,MAE3CrX,GADLgb,EAAO3yB,EAAMkgV,sBAAsB9sT,EAAOpU,EAAQie,EAAUwlD,EAAWrmF,GAClD0zB,EAAMs3R,qBAAsB9mD,KAC7CxwO,EAAMs3R,qBAAqB3iT,KAAK,IAAI+wB,GAAK7C,EAAK3lB,EAAIszP,EAAKtzP,EAAG2lB,EAAK1lB,EAAIqzP,EAAKrzP,EAAG0lB,EAAK1c,MAAO0c,EAAK3c,SACxFhW,EAAMmgV,SACNnhU,EAAOmuN,aAAavrO,YAAYkuB,EAAME,SAASuU,cAAc,IAAI04L,GAAWj9N,EAAMq/U,SAAWntU,EAAQ,cAAgB9V,EAAGi8B,EAASvC,MAAOuC,EAAS6M,OAAQu9C,EAAU/0E,QAASilB,EAAM8vD,EAAU9oD,GAAI8oD,EAAU7oD,MAG9M8lT,EAAWjiT,GAAkBG,GAAe59B,EAAM+/U,iBAClDJ,EAAWrzU,KAAK4xB,OAAoB,IAAbwhT,EAASriT,EAAuB,IAAbqiT,EAASpiT,EAAuB,IAAboiT,EAASniT,GAAW,KACjF3H,GAAY,IAAIC,GAAW71B,EAAMq/U,SAAWntU,EAAQ,SAAW9V,EAAGu2B,EAAK3lB,EAAIhN,EAAMk9B,OAAOzwB,KAAOwwB,EAAShnB,MAAQ,EAAG0c,EAAK1lB,EAAIjN,EAAMk9B,OAAOvwB,IAAwB,EAAlBswB,EAASjnB,OAAa,EAAG,SAAUqiB,EAAStJ,KAAM,YAAe4D,EAAM,EAAI,IAAOA,EAAM,EAAI,IAAK,QAAS0F,EAASrJ,KAAMqJ,EAASrJ,KAAK8G,QAChR6pT,GAAY,KAAuB,SAAhB3gU,EAAOrY,KAAmB,QAAU,SAAUqY,EAAO4W,mBAOlG30B,EAAQ2lE,mBACRj2C,GAAWb,EAAM7uB,QAAQsC,GAAK,sBAAsB3B,YAAYX,IAQxEk+U,EAAU7jV,UAAU2kV,wBAA0B,SAAU3rU,EAAe0K,EAAQyjE,EAAWrvD,EAAO32B,EAAM8nO,GACnGtkO,KAAKi9B,QAAWzwB,KAAM,EAAGC,MAAO,EAAGE,OAAQ,EAAGD,IAAK,GACnD,IAAI2zP,EAAOthP,EAAOgV,SACd4G,EAAeD,GAAev5B,EAAc,OAC5CmC,GAAItD,KAAK6vB,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAQ,cAClDkhB,EAAMlhB,OAASqyN,EAAc,IAAMA,EAAc,IACvD/gO,OAAQ,uCAAyC/G,EAAKq5B,MAAQ,IAC1DiF,GAAa0nD,EAAUzzD,MAAQ,WAAavyB,EAAKyoC,OAAOjvB,MAAQ,YAAcxZ,EAAKyoC,OAAOpP,MAAQ,MACtG1C,EAAMlhB,MAAOzV,EAAKyS,SAAUjP,KAAK6vB,MAAOsD,EAAOpU,GAC/C7J,EAAc6lB,GAAmBJ,GACjCjI,EAAO1yB,KAAKigV,sBAAsB9sT,EAAOpU,GAAU/I,MAAOd,EAAYc,MAAOD,OAAQb,EAAYa,QAAUysE,EAAW8hJ,GAC1H3pM,EAAaj2B,MAAM8H,MAAsC,eAA7BxM,KAAK6vB,MAAMk3M,cAAiC,EAAIhoN,EAAOgV,SAAShnB,GAAK2lB,EAAK3lB,EAAK,KAC3G4tB,EAAaj2B,MAAMgI,KAAqC,eAA7B1M,KAAK6vB,MAAMk3M,cAAiC,EAAIhoN,EAAOgV,SAAS/mB,GAAK0lB,EAAK1lB,EAAK,KAC1G,IAAIyyU,EAAWjiT,GAAkBG,GAAe39B,KAAK8/U,iBACjDK,EAAQphU,EAAO8Q,MAAMsG,oBAAsBpX,EAAOjH,MAAQiH,EAAOnH,MACjEwoU,EAAQrhU,EAAO8Q,MAAMsG,oBAAsBpX,EAAOnH,MAAQmH,EAAOjH,MACrE6iB,EAAaj2B,MAAMmxB,MAAQ2sD,EAAUzzD,KAAK8G,QACpCxpB,KAAK4xB,OAAoB,IAAbwhT,EAASriT,EAAuB,IAAbqiT,EAASpiT,EAAuB,IAAboiT,EAASniT,GAAW,MAAU,IAAM,QAAU,SAClG3C,EAAagsC,oBAAsBjvD,GAAUgb,EAAM1yB,KAAK6vB,MAAMs3R,qBAAsB9mD,KAC1D,OAAtBthP,EAAOid,iBAAwC7gC,IAAjBg4B,EAAM4G,QAAwB3I,GAAO+B,EAAM4G,OAAQhb,EAAOnH,MAAMoa,eAC7FjT,EAAOrY,KAAKnI,QAAQ,QAAU,GAAK6yB,GAAOrS,EAAOitN,cAAcjP,UAAU5pM,EAAMlhB,OAAQ8M,EAAOnH,MAAMoa,gBACtGZ,GAAO+B,EAAMvB,OAAQ7S,EAAOjH,MAAMka,eAAiBrW,WAAWgf,EAAaj2B,MAAMgI,MAAQyzU,EAAMztT,KAAK1lB,GACvG2O,WAAWgf,EAAaj2B,MAAM8H,OAAS4zU,EAAM1tT,KAAK3lB,GAAK4O,WAAWgf,EAAaj2B,MAAMgI,MAAQyzU,EAAMztT,KAAK1lB,EAAImzU,EAAMztT,KAAK3c,QACvH4F,WAAWgf,EAAaj2B,MAAM8H,OAAS4zU,EAAM1tT,KAAK3lB,EAAIqzU,EAAM1tT,KAAK1c,QACjEhW,KAAK6vB,MAAMs3R,qBAAqB3iT,KAAK,IAAI+wB,GAAK7C,EAAK3lB,EAAIszP,EAAKtzP,EAAG2lB,EAAK1lB,EAAIqzP,EAAKrzP,EAAG0lB,EAAK1c,MAAO0c,EAAK3c,SACjG1B,EAAc1S,YAAYg5B,GACtB5b,EAAO6vB,UAAU3O,QAAUjgC,KAAK6vB,MAAMs9M,eACtCntO,KAAKwtO,qBAAqBzuN,EAAQ4b,KAI9CukT,EAAU7jV,UAAU4kV,sBAAwB,SAAU9sT,EAAOpU,EAAQie,EAAUwlD,EAAW8hJ,GACtF,IAAI+7G,EAAc/7G,EAAa,GAAqB,WAAhBvlN,EAAOrY,KAAqBysB,EAAM2zM,QAAQ,GAAwB3zM,EAAM2zM,QAAQ,GAChHxC,EAAa,GAAqB,kBAAhBvlN,EAAOrY,OACzB25U,EAA8B,IAAf/7G,EAAoBnxM,EAAM2zM,QAAQ,GAAK3zM,EAAM2zM,QAAQ,IAExE,IAAI5tM,EACJA,EAAWl5B,KAAKsgV,iBAAiBntT,EAAOpU,EAAQie,EAAUsnM,GAC1D,IAEI5xM,EADAqB,EAAWhV,EAAOgV,SAGtB,GAAK/zB,KAAK6vB,MAAMsG,qBAAwBn2B,KAAKgmO,aAAajnN,IAA2B,kBAAhBA,EAAOrY,KAcvE,CACD1G,KAAKugV,UAAYrnT,EAASlsB,EACtBwzU,EAAiBxjT,EAAShnB,MAAQhW,KAAKgwF,YAAchwF,KAAKi9B,OAAOzwB,KAAOxM,KAAKi9B,OAAOxwB,MApB9E,EAqBVysB,EAASnsB,EAA2B,SAAvBy1E,EAAUtuE,SAAsBglB,EAASnsB,EAClD/M,KAAKygV,mBAAmBD,EAAgBtnT,EAASnsB,EAAGy1E,EAAUx6B,UAAW70B,EAAM4G,OAAS,GAC5Fb,EAASnsB,EAAI/M,KAAK0gV,sBAAsBxnT,EAASnsB,EAAGszU,EAAaltT,EAAM4G,OAAS,IAAM/5B,KAAK2/U,cAAen9P,EAAUtuE,SAAU6K,EAAQie,EAAUsnM,EAAYnxM,OAnB1D,CAClGnzB,KAAK2gV,UAAYznT,EAASnsB,EAC1B,IAAIyzU,EAAiBxjT,EAASjnB,OAA6B,EAAnB/V,KAAKgwF,YAAmBhwF,KAAK0sO,aACjE1sO,KAAKi9B,OAAOtwB,OAAS3M,KAAKi9B,OAAOvwB,IAP3B,EAQVwsB,EAASlsB,EAA4B,SAAvBw1E,EAAUtuE,SAAuBglB,EAASlsB,EACpDhN,KAAKygV,mBAAmBD,EAAgBtnT,EAASlsB,EAAGw1E,EAAUx6B,YAAWhoD,KAAKgmO,aAAajnN,IAAUoU,EAAM4G,OAAS,GAExHb,EAASlsB,EAAMhN,KAAKgmO,aAAajnN,IAA2B,kBAAhBA,EAAOrY,KAE/C1G,KAAK0gV,sBAAsBxnT,EAASlsB,EAAGqzU,EAAaltT,EAAM4G,OAAS,IAAM/5B,KAAK2/U,cAAen9P,EAAUtuE,SAAU6K,EAAQie,EAAUsnM,EAAYnxM,GAD/InzB,KAAK4gV,sBAAsB1nT,EAASlsB,EAAGw1E,EAAUtuE,SAAU6K,EAAQoU,EAAO6J,EAAUsnM,GAEpFtkO,KAAKgmO,aAAajnN,IAAwC,eAA7B/e,KAAK6vB,MAAMk3M,gBACxC7tM,EAAWl5B,KAAK6gV,2BAA2B3nT,EAAUspD,EAAUtuE,SAAU6K,EAAQoU,EAAO6J,EAAUsnM,IAoB1G,OAVA5xM,EAAOqK,GAAc7D,EAAU8D,EAAUh9B,KAAKi9B,SAElCjwB,EAAI+mB,EAAShe,QAAY2c,EAAK3lB,EAAIgnB,EAAS/d,OAClD0c,EAAK3lB,EAAI2lB,EAAK1c,MAAQ,GAAO0c,EAAK1lB,EAAI0lB,EAAK3c,OAAS,IACrD2c,EAAK3lB,EAAI2lB,EAAK3lB,EAAI,EA7BR,EA6BsB2lB,EAAK3lB,EACrC2lB,EAAK1lB,EAAI0lB,EAAK1lB,EAAI,EA9BR,EA8BsB0lB,EAAK1lB,EACrC0lB,EAAK3lB,GAAM2lB,EAAK3lB,EAAI2lB,EAAK1c,MAAS+d,EAAS/d,MAAS0c,EAAK3lB,EAAI2lB,EAAK1c,MAAS+d,EAAS/d,MA/B1E,EA+B4F,EACtG0c,EAAK1lB,GAAM0lB,EAAK1lB,EAAI0lB,EAAK3c,OAAUge,EAAShe,OAAU2c,EAAK1lB,EAAI0lB,EAAK3c,OAAUge,EAAShe,OAhC7E,EAgCgG,EAC1G/V,KAAK8/U,eAAyC,gBAAxB9/U,KAAK8/U,eAAmC9/U,KAAKs/U,gBAAkBt/U,KAAK8/U,gBAEvFptT,GAGXwsT,EAAU7jV,UAAUwlV,2BAA6B,SAAU3nT,EAAUhlB,EAAU6K,EAAQoU,EAAOhE,EAAMm1M,GAChG,IACIw8G,EACAn/T,EAASwR,EAAM0zM,WAAW/yM,WAAa,GAAMznB,KAAKkR,IAAO4V,EAAM0zM,WAAWlhM,SAAWxS,EAAM0zM,WAAW/yM,YAAc,EAuCxH,OArCIgtT,EADe,IAAfx8G,EACenxM,EAAM0zM,WAAWj6N,OAASumB,EAAM0zM,WAAW7/L,YAAc7T,EAAM0zM,WAAW7/L,YACnF7T,EAAM0zM,WAAWj6N,OAGRumB,EAAM0zM,WAAWj6N,OAASumB,EAAM0zM,WAAW7/L,YAAc7T,EAAM0zM,WAAW7/L,YACnF7T,EAAM0zM,WAAWj6N,OAE3B5M,KAAK8/U,eAAyC,gBAAxB9/U,KAAK8/U,eAAmC9/U,KAAKs/U,gBAAkBt/U,KAAK8/U,eACtF/gU,EAAOgnN,SAASxnO,QAAQ,aAAe,EACvC2V,EAAwB,UAAbA,EAAuB,MAAQA,EAErC6K,EAAOgnN,SAASxnO,QAAQ,UAAY,IACzC2V,EAAyB,UAAbA,GAAqC,QAAbA,EAAsBA,EAAW,QAGrE4sU,EADa,UAAb5sU,EAC8B,IAAfowN,EAAmBw8G,EAAe,GAAcA,EAAe,GAE5D,WAAb5sU,EACU4sU,EAAe,EAtBpB,EAwBQ,QAAb5sU,EACyB,IAAfowN,EAAmBw8G,EAAe,GAAcA,EAAe,GAE5D,WAAb5sU,EA3BK,EA+BS,IAAfowN,EACew8G,GAAgB/hU,EAAO8Q,MAAMjjB,OAASk0U,EAhC/C,EAiCkB,mBAApB/hU,EAAOgnN,SAAgC+6G,EAAe,GAAcA,EAAe,GAGxEA,GAAgB/hU,EAAO8Q,MAAMjjB,OAASk0U,EApC/C,EAoCwEA,EAAe,GAGrG5nT,EAASnsB,EAAIgS,EAAOgV,SAAS/d,MAAQ,EAAI+I,EAAOgV,SAAShnB,EAAI+zU,EAAez0U,KAAKwV,IAAIF,GACrFuX,EAASlsB,EAAI+R,EAAOgV,SAAShe,OAAS,EAAIgJ,EAAOgV,SAAS/mB,EAAI8zU,EAAez0U,KAAKyV,IAAIH,GAC/EuX,GAKXgmT,EAAU7jV,UAAUilV,iBAAmB,SAAUntT,EAAOpU,EAAQie,EAAUsnM,GACtE,IAAIprM,EAAW,IAAIjG,GAAc,EAAG,GAChCotT,EAA+B,WAAhBthU,EAAOrY,MAAqB49N,EAAa,EAAKnxM,EAAM2zM,QAAQ,GAAK3zM,EAAM2zM,QAAQ,GAC9E,kBAAhB/nN,EAAOrY,OACP25U,EAA8B,IAAf/7G,EAAoBnxM,EAAM2zM,QAAQ,GAAK3zM,EAAM2zM,QAAQ,IAExE,IAAIhvN,EAAQiH,EAAOjH,MACfF,EAAQmH,EAAOnH,MACf6b,EAAa1U,EAAO8Q,MAAMsG,oBAC9B,GAAoB,kBAAhBpX,EAAOrY,KAA0B,CAEjC,OADA1G,KAAK0sO,aAAe,EACZpI,GACJ,KAAK,EACDprM,EAAWgC,GAAS/H,EAAMvB,OAAQuB,EAAMgJ,OAAQrkB,EAAOF,EAAO6b,GAC9D,MACJ,KAAK,EACDyF,EAAWgC,GAAS/H,EAAMvB,OAAQuB,EAAMuF,QAAS5gB,EAAOF,EAAO6b,GAC/D,MACJ,KAAK,EACDyF,EAAWgC,GAAS/H,EAAMvB,OAAQuB,EAAMsF,QAAS3gB,EAAOF,EAAO6b,GAC/D,MACJ,KAAK,EACDyF,EAAWgC,GAAS/H,EAAMvB,OAAQuB,EAAMiJ,cAAetkB,EAAOF,EAAO6b,GACrE,MACJ,KAAK,EACDyF,EAAWgC,GAAS/H,EAAMvB,OAAQuB,EAAMkJ,cAAevkB,EAAOF,EAAO6b,GACrE,MACJ,QACIyF,EAAWgC,GAAS/H,EAAMvB,OAAQuB,EAAMmJ,SAASgoM,EAAa,GAAIxsN,EAAOF,EAAO6b,GAChFzzB,KAAK0sO,aAAe3tN,EAAOknN,OAAOlwN,OAAS,EAInDmjB,EAASnsB,EAAIomB,EAAM2zM,QAAQ,GAAG/5N,EAAKomB,EAAM2zM,QAAQ,GAAG9wN,MAAQ,OAG5DkjB,EADoB,IAAforM,GAAmC,IAAfA,EACd,IAAIrxM,GAAcE,EAAMs0M,gBAAgB,GAAG16N,EAAGomB,EAAMs0M,gBAAgB,GAAGz6N,GAE7D,IAAfs3N,GAAmC,IAAfA,GAAqC,WAAhBvlN,EAAOrY,KAGjD+sB,GACQ1mB,EAAGszU,EAAYtzU,EAAKszU,EAAiB,MAAI,EAAGrzU,EAAGqzU,EAAYrzU,IAG3DD,EAAGszU,EAAYtzU,EAAIszU,EAAYrqU,MAAOhJ,EAAGqzU,EAAYrzU,EAAKqzU,EAAkB,OAAI,GANlF,IAAIptT,GAAcE,EAAMs0M,gBAAgB,GAAG16N,EAAGomB,EAAMs0M,gBAAgB,GAAGz6N,GAStF,GAAIs3N,EAAa,GAAqB,kBAAhBvlN,EAAOrY,KACzB,GAAIqY,EAAO8Q,MAAMsG,oBAAqB,CAClC,IAAIpgB,EAASsqU,EAAYtqU,OACzBmjB,EAASlsB,EAAIqzU,EAAYrzU,EAAI+I,EAAS,EAAI,GAAoB,IAAfuuN,EAAmB,GAAK,OAEtE,CACD,IAAItuN,EAAQqqU,EAAYrqU,MACxBkjB,EAASnsB,EAAIszU,EAAYtzU,EAAIiJ,EAAQ,EAAI,GAAoB,IAAfsuN,EAAmB,GAAK,GAG9E,OAAOprM,GAEXgmT,EAAU7jV,UAAUqlV,sBAAwB,SAAUK,EAAeruT,EAAM6M,EAASrrB,EAAU6K,EAAQie,EAAUsnM,EAAYnxM,GACxH,GAAmC,eAA/BpU,EAAO8Q,MAAMk3M,cACb,OAAO,KAEX,IACI9pM,EAASj9B,KAAKi9B,OACd+jT,EAAchhV,KAAKqvU,SAA6BryS,EAAShnB,MAA3BgnB,EAASjnB,OACvCkrU,EAAajhV,KAAKgwF,YAAcgxP,EAAa,EAHnC,EAad,OATIjiU,EAAOrY,KAAKnI,QAAQ,aAAe,EACnC2V,EAAwB,UAAbA,EAAuB,MAAQA,EAErC6K,EAAOrY,KAAKnI,QAAQ,UAAY,EACrC2V,EAAyB,UAAbA,GAAqC,QAAbA,EAAsBA,EAAW,OAEhD,cAAhB6K,EAAOrY,OACZwN,EAAwB,SAAbA,EAAsB,SAAWA,GAExCA,GACJ,IAAK,SACD6sU,EAAiB/gV,KAAKqvU,SAGlB9vS,EAAWwhT,EAAgBruT,EAAK1c,MAAQirU,EAAahkT,EAAOzwB,KACvDu0U,EAAgBruT,EAAK1c,MAAQirU,EAAahkT,EAAOxwB,MAHtD8yB,EAAWwhT,EAAgBruT,EAAK3c,OAASkrU,EAAahkT,EAAOvwB,IACxDq0U,EAAgBruT,EAAK3c,OAASkrU,EAAahkT,EAAOtwB,OAG3D,MACJ,IAAK,SACDo0U,EAAgBA,EAAiB/gV,KAAKqvU,SAEjC9vS,EAAUwhT,EAAiBruT,EAAK1c,MAAQ,EAAK+qU,EAAiBruT,EAAK1c,MAAQ,EAD3EupB,EAAUwhT,EAAiBruT,EAAK3c,OAAS,EAAKgrU,EAAiBruT,EAAK3c,OAAS,EAElF,MACJ,IAAK,OACDgrU,EAAgB/gV,KAAKkhV,4BAA4BH,EAAeruT,EAAM6M,EAASxgB,EAAQie,EAAUsnM,EAAYnxM,GAC7G,MACJ,QACI8tT,GAAcjhV,KAAKm/U,YACnB4B,EAAgB/gV,KAAKmhV,6BAA6BJ,EAAeruT,EAAMxe,EAAU6K,EAAQulN,EAAY28G,EAAY1hT,GAGzH,IAAI2mK,EAASlmM,KAAKqvU,SACb0R,EAAgBruT,EAAK3lB,GAAKg0U,EAAgBruT,EAAK3lB,EAAI2lB,EAAK1c,MAD/B+qU,EAAgBruT,EAAK1lB,GAAK+zU,EAAgBruT,EAAK1lB,EAAI0lB,EAAK3c,OAKtF,OAHA/V,KAAK8/U,eAAiB55I,EACO,gBAAxBlmM,KAAK8/U,eAAmC9/U,KAAKs/U,gBAAkBt/U,KAAK8/U,eAC3C,gBAAxB9/U,KAAK8/U,eAAoC3sT,EAAM0C,OAAS9W,EAAO8qD,SAAY7pE,KAAK8/U,eAC/EiB,GAEX7B,EAAU7jV,UAAUulV,sBAAwB,SAAUG,EAAe7sU,EAAU6K,EAAQoU,EAAOhE,EAAMm1M,GAOhG,OALKvlN,EAAOrY,KAAKnI,QAAQ,SAAW,GAAqB,cAAhBwgB,EAAOrY,MACzC1G,KAAK2/U,eAAsD,SAArC5gU,EAAOknN,OAAOzjJ,UAAUtuE,WACjDA,EAAwB,QAAbA,EAAqB,SAAwB,WAAbA,EAAwB,MAAQA,GAE/ElU,KAAK8/U,eAAyC,gBAAxB9/U,KAAK8/U,eAAmC9/U,KAAKs/U,gBAAkBt/U,KAAK8/U,eAClF5rU,GACJ,IAAK,MACL,IAAK,QACD6sU,EAAgBA,EAAgB/gV,KAAK0sO,aAAe1sO,KAAKgwF,YAAc7gE,EAAKpZ,OAAS,EAAI/V,KAAKi9B,OAAOtwB,OAT/F,EAUF3M,KAAKm/U,YACT,MACJ,IAAK,SACD4B,EAAgBA,EAAgB/gV,KAAK0sO,aAAe1sO,KAAKgwF,YAAc7gE,EAAKpZ,OAAS,EAAI/V,KAAKi9B,OAAOvwB,IAb/F,EAcF1M,KAAKm/U,YACT,MACJ,IAAK,OACD4B,EAAgB/gV,KAAKohV,4BAA4BL,EAAe/gV,KAAK0sO,aAAc3tN,EAAQoU,EAAOhE,EAAMm1M,GAGhH,OAAOy8G,GAEX7B,EAAU7jV,UAAU0kV,iBAAmB,SAAUr7U,GAC7C1E,KAAKkgV,QAA2B,gBAAhBx7U,EAAMmxB,OAA2BnxB,EAAMugC,OAAOjvB,MAAQ,EACtEhW,KAAKgwF,YAActrF,EAAMugC,OAAOjvB,MAC3BhW,KAAKkgV,UACNlgV,KAAKi9B,QAAWzwB,KAAM,EAAGC,MAAO,EAAGE,OAAQ,EAAGD,IAAK,KAG3DwyU,EAAU7jV,UAAU6lV,4BAA8B,SAAUH,EAAeruT,EAAM6M,EAASxgB,EAAQoQ,EAAMm1M,EAAYnxM,GAOhH,IANA,IAAI+F,EACAmoT,EACAC,GAAY,EACZptU,EAAW,EACX4zB,EAAa9nC,KAAK6vB,MAAMs3R,qBACxBo6B,GAAkD,IAAlCxiU,EAAOrY,KAAKnI,QAAQ,UAAmC,SAAhBwgB,EAAOrY,KAAkB,EAAI,EACjF46U,GAAaptU,EAAWqtU,GAC3BroT,EAAWl5B,KAAK0gV,sBAAsBK,EAAeruT,EAAM6M,EAASv/B,KAAKsgE,YAAYpsD,GAAW6K,EAAQoQ,EAAMm1M,EAAYnxM,GAOtHmuT,EANCthV,KAAKqvU,UAKNgS,EAAYtkT,GAAc,IAAI9J,GAAciG,EAAUl5B,KAAKugV,WAAYpxT,EAAMnvB,KAAKi9B,SAC5DlwB,EAAI,GAAK2K,GAAU2pU,EAAWv5S,EAAY/oB,EAAOgV,WACnEstT,EAAUt0U,EAAIs0U,EAAUrrU,MAAQ+I,EAAOgV,SAAS/d,OANpDqrU,EAAYtkT,GAAc,IAAI9J,GAAcjzB,KAAK2gV,UAAWznT,GAAW/J,EAAMnvB,KAAKi9B,SAC5DjwB,EAAI,GAAK0K,GAAU2pU,EAAWv5S,EAAY/oB,EAAOgV,WAAastT,EAAUr0U,EAAI+R,EAAOgV,SAAShe,OAOtH7B,IAEJ,OAAOglB,GAGXgmT,EAAU7jV,UAAUolV,mBAAqB,SAAUzjV,EAAO+jV,EAAe/4R,EAAWzoB,GAChF,OAAQyoB,GACJ,IAAK,MACD+4R,EAAiB/gV,KAAKqvU,SACjB9vS,EAAUwhT,EAAgB/jV,EAAQ+jV,EAAgB/jV,EADrBuiC,EAAUwhT,EAAgB/jV,EAAQ+jV,EAAgB/jV,EAEpF,MACJ,IAAK,OACD+jV,EAAiB/gV,KAAKqvU,SACjB9vS,EAAUwhT,EAAgB/jV,EAAQ+jV,EAAgB/jV,EADrBuiC,EAAUwhT,EAAgB/jV,EAAQ+jV,EAAgB/jV,EAEpF,MACJ,IAAK,SACD+jV,EAAgBA,EAGxB,OAAOA,GAGX7B,EAAU7jV,UAAU8lV,6BAA+B,SAAUjoT,EAAUxG,EAAMxe,EAAU6K,EAAQ9M,EAAOgvU,EAAY1hT,GAC9G,IACI7yB,EADAuwB,EAASj9B,KAAKi9B,OAElB,OAAQle,EAAOrY,MACX,IAAK,cACL,IAAK,YACL,IAAK,OACDgG,EAAiB,IAAVuF,IAAgBjS,KAAK2/U,eAA6B,IAAV1tU,GAAejS,KAAK2/U,cACnEzmT,EAAWl5B,KAAKwhV,oBAAoBttU,EAAUglB,EAAU+nT,EAAYhkT,EAAQvK,EAAMhmB,GAClF,MACJ,IAAK,SACDA,GAAiB,IAAVuF,GAAyB,IAAVA,KAAiBjS,KAAK2/U,gBAC1B,IAAV1tU,GAAyB,IAAVA,IAAgBjS,KAAK2/U,cAC5CzmT,EAAWl5B,KAAKwhV,oBAAoBttU,EAAUglB,EAAU+nT,EAAYhkT,EAAQvK,EAAMhmB,EAAKuF,EAAQ,GAC/F,MACJ,IAAK,gBACGA,GAAS,GACTvF,EAAiB,IAAVuF,IAAgBjS,KAAK2/U,eAA6B,IAAV1tU,GAAejS,KAAK2/U,cACnEzmT,EAAWl5B,KAAKwhV,oBAAoBttU,EAAUglB,EAAU+nT,EAAYhkT,EAAQvK,EAAMhmB,IAI9EwsB,EADAl5B,KAAK2/U,cACO3/U,KAAKqvU,SAAgDn2S,EAAW+nT,EAAahkT,EAAOxwB,MAApEysB,EAAW+nT,EAAahkT,EAAOvwB,IAG/C1M,KAAKqvU,SAAmDn2S,EAAW+nT,EAAahkT,EAAOzwB,KAAvE0sB,EAAW+nT,EAAahkT,EAAOtwB,OAGnE,MACJ,QAEQusB,EADCqG,GAAwB,QAAbrrB,IAAyBqrB,GAAwB,UAAbrrB,EACpClU,KAAKqvU,SAAmDn2S,EAAW+nT,EAAahkT,EAAOzwB,KAAvE0sB,EAAW+nT,EAAahkT,EAAOtwB,OAG/C3M,KAAKqvU,SAAgDn2S,EAAW+nT,EAAahkT,EAAOxwB,MAApEysB,EAAW+nT,EAAahkT,EAAOvwB,IAIvE,OAAOwsB,GAKXgmT,EAAU7jV,UAAUmmV,oBAAsB,SAAUttU,EAAUglB,EAAU+nT,EAAYhkT,EAAQvK,EAAMhmB,EAAKwkB,GAoBnG,YAnBe,IAAXA,IAAqBA,GAAS,GAY1BgI,EAXHl5B,KAAKqvU,SAUF3iU,EACyB,UAAbwH,GAAyBgd,EAAgDgI,EAAW+nT,EAAahkT,EAAOxwB,MAArEysB,EAAW+nT,EAAahkT,EAAOzwB,KAGrD,UAAb0H,GAAyBgd,EACjCgI,EAAWxG,EAAK1c,MAAQirU,EAAahkT,EAAOzwB,KADD0sB,EAAWxG,EAAK1c,MAAQirU,EAAahkT,EAAOxwB,MAb3FC,EACyB,UAAbwH,GAAyBgd,EAAkDgI,EAAW+nT,EAAahkT,EAAOvwB,IAAvEwsB,EAAW+nT,EAAahkT,EAAOtwB,OAGrD,UAAbuH,GAAyBgd,EACjCgI,EAAWxG,EAAK3c,OAASkrU,EAAahkT,EAAOtwB,OADFusB,EAAWxG,EAAK3c,OAASkrU,EAAahkT,EAAOvwB,KAexGwyU,EAAU7jV,UAAU+lV,4BAA8B,SAAUp0U,EAAG4hU,EAAY7vT,EAAQoU,EAAOhE,EAAMm1M,GAC5F,IAGIpwN,EAGA8wN,EAEAq8G,EACAlU,EACAsU,EAVAxqT,EAASlY,EAAOkY,OAChBhlB,EAAQkhB,EAAMlhB,MACd8nB,EAAS9C,EAAOhlB,GAAO8nB,OAEvBrI,EAAYuF,EAAOx6B,OAAS,EAAIwV,EAAQglB,EAAOhlB,EAAQ,GAAK,KAC5Duf,EAAgBvf,EAAQ,EAAIglB,EAAOhlB,EAAQ,GAAK,KAEhDqvU,GAAY,EAIZx5S,EAAa9nC,KAAK6vB,MAAMs3R,qBAC5B,GAAoB,WAAhBpoS,EAAOrY,KACPwN,EAAW,WAEV,GAAI6K,EAAOrY,KAAKnI,QAAQ,SAAW,EACpC2V,EAAW,MACPjC,IACAiC,EAAasd,GAAkBA,EAAcsF,SAAYiD,EAASvI,EAAcuI,SAAW/5B,KAAK2/U,eACzF5lT,IAAWvI,EAAcuI,OAAkB,SAAR,YAG7C,GAAoB,kBAAhBhb,EAAOrY,KACO,IAAf49N,GAAmC,IAAfA,GAAoBA,EAAa,EACrDpwN,EAAW6K,EAAOnH,MAAM2b,WAAa,SAAW,MAE5B,IAAf+wM,GAAmC,IAAfA,EACzBpwN,EAAW6K,EAAOnH,MAAM2b,WAAa,MAAQ,UAG7C+tT,GAAY,EACZptU,EAAW,SACX8wN,EAAYhlO,KAAK4gV,sBAAsB5zU,EAAGkH,EAAU6K,EAAQoU,EAAOhE,EAAMm1M,SAI7E,GAAc,IAAVryN,EACAiC,GAAawd,IAAcA,EAAUoF,SAAWiD,EAASrI,EAAUqI,QAC9DA,EAASrI,EAAUqI,QAAU/5B,KAAK2/U,cAAkB,MAAQ,cAEhE,GAAI1tU,IAAUglB,EAAOx6B,OAAS,EAC/ByX,GAAasd,IAAkBA,EAAcsF,SAAWiD,EAASvI,EAAcuI,QAC1EA,EAASvI,EAAcuI,QAAU/5B,KAAK2/U,cAAkB,MAAQ,cAGrE,GAAKjuT,EAAUoF,SAAatF,GAAiBA,EAAcsF,QAGtD,GAAKpF,EAAUoF,SAAYtF,EAI3B,CACD,IAAIwiD,GAAStiD,EAAUqI,OAASvI,EAAcuI,QAAU,EACpD2nT,EAAc1tQ,EAAQ/hE,GAAUyf,EAAUqI,OAAUi6C,GAAS/hE,EAAQ,IACzEiC,EAAYlU,KAAK2/U,cACb+B,EAAa3nT,EAAS,SAAW,MADJ2nT,EAAa3nT,EAAS,MAAQ,cAN/D7lB,EAAYwd,EAAUqI,OAASA,GAAWvI,GAAiBA,EAAcuI,OAASA,EAC9E,SAAW,WAJf7lB,EAAW,MAgBvB,IAFAi5T,EAAwB,WAAbj5T,EACXutU,GAAiB,QAAS,MAAO,SAAU,SAAU,QAAQljV,QAAQ2V,GAC9DotU,GAAaG,EAAgB,GAChCz8G,EAAYhlO,KAAK4gV,sBAAsB5zU,EAAGhN,KAAKsgE,YAAYmhR,GAAgB1iU,EAAQoU,EAAOhE,EAAMm1M,GAEhGg9G,GADAD,EAAYtkT,GAAc,IAAI9J,GAAcjzB,KAAK2gV,UAAW37G,GAAY71M,EAAMnvB,KAAKi9B,SAC7DjwB,EAAI,GAAK0K,GAAU2pU,EAAWv5S,EAAY/oB,EAAOgV,WAC/DstT,EAAUr0U,EAAIq0U,EAAUtrU,OAAUgJ,EAAOgV,SAAShe,OAC1D0rU,EAAgBtU,EAAWsU,EAAgB,EAAIA,EAAgB,EAC/DtU,GAAW,EAEf,OAAOnoG,GAOXk6G,EAAU7jV,UAAUmyO,qBAAuB,SAAUzuN,EAAQ/d,GAMzD,IAAK,IAFDk4B,EAHAyoT,EAAgB5iU,EAAOmuN,aAAa37N,WACpCqwU,EAAW7iU,EAAO4W,YAAYpkB,WAC9B1R,EAAQkf,EAAO6vB,UAAU/uC,MAAQkf,EAAO6vB,UAAU1jC,SAElDzO,EAASuE,EAAU,EAAI4gV,EAASnlV,OAC3BN,EAAI,EAAGA,EAAIM,EAAQN,IACpB6E,GACAA,EAAQ0D,MAAMC,WAAa,SAC3Bq0B,GAAgBh4B,EAASnB,EAAO,IAAK,YAGrCq5B,EAAW,IAAIjG,IAAgB2uT,EAASzlV,GAAG0W,aAAa,OAAW+uU,EAASzlV,GAAG0W,aAAa,SAAY,GAAM+uU,EAASzlV,GAAG0W,aAAa,OAAW+uU,EAASzlV,GAAG0W,aAAa,UAAa,GACxL8kB,GAAciqT,EAASzlV,GAAI0D,EAAO,IAAKkf,EAAQ,KAAMma,GAAU,GAC3DyoT,EAAcxlV,KACd+8B,EAAW,IAAIjG,IAAgB0uT,EAAcxlV,GAAG0W,aAAa,OAAW8uU,EAAcxlV,GAAG0W,aAAa,SAAY,GAAM8uU,EAAcxlV,GAAG0W,aAAa,OAAW8uU,EAAcxlV,GAAG0W,aAAa,UAAa,GAC5M8kB,GAAcgqT,EAAcxlV,GAAI0D,EAAO,IAAKkf,EAAQ,KAAMma,GAAU,MAKpFgmT,EAAU7jV,UAAUilE,YAAc,SAAUruD,GACxC,OAAS,QAAS,MAAO,SAAU,SAAU,QAAQA,IAKzDitU,EAAU7jV,UAAU0kC,cAAgB,WAEhC,MAAO,aAOXm/S,EAAU7jV,UAAUiX,QAAU,SAAUud,KAGjCqvT,KCjoBP2C,GAA0B,WAK1B,SAASA,EAAShyT,GACd7vB,KAAK6vB,MAAQA,EA2RjB,OArRAgyT,EAASxmV,UAAUsyG,OAAS,SAAU5uF,GAClC,GAAiC,eAA7B/e,KAAK6vB,MAAMk3M,cACX,OAAO,KAEX/mO,KAAKmB,cAAc4d,GACnB/e,KAAK8hV,eAAe/iU,IAExB8iU,EAASxmV,UAAUymV,eAAiB,SAAU/iU,GAc1C,IAAK,IAXD6vN,EACAmzG,EAHApsH,EAAc52M,EAAO9M,MAIrB+vU,EAAWjjU,EAAOyO,SAClBy0T,EAAcljU,EAAOyO,SAASy0T,YAO9BC,GANSnjU,EAAOkmB,QAME,GAAI,KACjB7mC,EAAK,EAAGyE,EAAKkc,EAAOkY,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI+jV,EAAUt/U,EAAGzE,GACjB,GAAI+jV,EAAQrrT,SAAWqrT,EAAQ16G,gBAAgB,GAAI,CAC/C,IAAI26G,EAAS,EACTC,EAAS,EACb,OAAQL,EAASzjT,MACb,IAAK,WACD8jT,EAASL,EAASM,cAClB,MACJ,IAAK,aACDF,EAASJ,EAASO,gBAClB,MACJ,IAAK,OACDH,EAASJ,EAASO,gBAClBF,EAASL,EAASM,cAG1BJ,EAAiBliV,KAAK,YAAcgiV,EAASt7U,KAAO,SAASy7U,EAASpjU,EAAQ/e,KAAK6vB,MAAMsG,oBAAqBisT,EAAQC,GACtHzzG,EAAW5uO,KAAK6vB,MAAM7uB,QAAQsC,GAAK,0BAAiCqyN,EAAc,UAAYwsH,EAAQlwU,MACtG8vU,EAAQ/hV,KAAK6vB,MAAM7uB,QAAQsC,GAAK,wBAA+BqyN,EAAc,UAAYwsH,EAAQlwU,MACjG,IAAI+8N,EAAc,IAAIv5M,GAAWm5M,EAAU,GAAIozG,EAAShsU,MAAOgsU,EAASnsT,OAAS71B,KAAK6vB,MAAM6F,WAAWlI,SAAU,KAAM,GAAI00T,EAAe,IACtIhlU,EAAOld,KAAK6vB,MAAME,SAASyF,SAASw5M,GACxCjwN,EAAOiuN,gBAAgBrrO,YAAYub,GACnC,IAAIslU,EAAY,IAAI/sT,GAAWssT,EAAO,GAAIE,EAAYjsU,MAAOisU,EAAYpsT,OAAS71B,KAAK6vB,MAAM6F,WAAWlI,SAAU,KAAM,GAAI00T,EAAe,IACvIO,EAAUziV,KAAK6vB,MAAME,SAASyF,SAASgtT,GAC3CzjU,EAAOiuN,gBAAgBrrO,YAAY8gV,MAK/CZ,EAASxmV,UAAUqnV,aAAe,SAAUvvT,EAAOpU,EAAQ0U,EAAY+H,EAAIC,GACvE,IAAIumT,EAAWjjU,EAAOyO,SAClBqH,EAAYmtT,EAASntT,UACrBqE,KAEAa,GADehb,EAAOitN,cACbjtN,EAAOrY,KAAKnI,QAAQ,aAAe,EAAIwgB,EAAOitN,cAAcjP,UAAU5pM,EAAMlhB,OAC9D,YAAtB8M,EAAOid,YAAkD,qBAAtBjd,EAAOid,WAAsCjd,EAAOkY,OAAO9D,EAAMlhB,OAAW,KAC5GkhB,EAAM4G,QACVyjB,EAAatiB,GAAS/H,EAAMvB,QAAyB,SAAdiD,GAAsC,SAAdA,EAA2C,WAAlBmtT,EAASt7U,MAC9E,eAAlBs7U,EAASzjT,MAA2C,SAAlByjT,EAASzjT,KAA4D/C,EAAxCA,EAAKwmT,EAASW,wBAA+B,GAAI5oT,GAAyB,SAAdlF,GAAsC,SAAdA,EAA2C,WAAlBmtT,EAASt7U,MACnK,aAAlBs7U,EAASzjT,MAAyC,SAAlByjT,EAASzjT,KAA0D9C,EAAtCA,EAAKumT,EAASY,sBAA6B,GAAI7jU,EAAOjH,MAAOiH,EAAOnH,MAAO6b,GAE7I,GADAyF,EAAS10B,KAAKg5C,GACVz+B,EAAOinN,aAAc,CACrB,IAAIujG,EAAWp2S,EAAMs0M,gBAAgB,GACrCvuM,EAAS10B,KAAK+kU,OAEb,CACGA,EAAWruS,GAAS/H,EAAMvB,OAAQuB,EAAM4G,OAAQhb,EAAOjH,MAAOiH,EAAOnH,MAAO6b,GAChFyF,EAAS10B,KAAK+kU,GAElB,IAAI7xR,EAAWxc,GAAS/H,EAAMvB,QAAyB,UAAdiD,GAAuC,SAAdA,EAA2C,WAAlBmtT,EAASt7U,MAC7E,eAAlBs7U,EAASzjT,MAA2C,SAAlByjT,EAASzjT,KAA4D/C,EAAxCA,EAAKwmT,EAASa,wBAA+B,GAAI9oT,GAAyB,UAAdlF,GAAuC,SAAdA,EAA2C,WAAlBmtT,EAASt7U,MACpK,aAAlBs7U,EAASzjT,MAAyC,SAAlByjT,EAASzjT,KAA0D9C,EAAtCA,EAAKumT,EAASc,sBAA6B,GAAI/jU,EAAOjH,MAAOiH,EAAOnH,MAAO6b,GAQ7I,OAPAyF,EAAS10B,KAAKkzC,GAEdvkB,EAAM0yD,MAA2B,aAAlBm8P,EAASzjT,KAAuByjT,EAASM,cAAgBN,EAASO,gBACjFviV,KAAKw/U,eAAoC,aAAlBwC,EAASzjT,MAAyC,SAAlByjT,EAASzjT,KAAoB9K,EAAcyF,EAAS,GAAGnsB,EAAImsB,EAAS,GAAGnsB,EACzHmsB,EAAS,GAAGlsB,EAAIksB,EAAS,GAAGlsB,EAAM,EACvChN,KAAKu/U,eAAoC,aAAlByC,EAASzjT,MAAyC,SAAlByjT,EAASzjT,KAAoB9K,EAAcyF,EAAS,GAAGnsB,EAAImsB,EAAS,GAAGnsB,EACzHmsB,EAAS,GAAGlsB,EAAIksB,EAAS,GAAGlsB,EAAM,EAChChN,KAAK+iV,kBAAkB7pT,EAAS,GAAIA,EAAS,GAAIA,EAAS,GAAIna,EAAQ0U,IAGjFouT,EAASxmV,UAAU2nV,oBAAsB,SAAU7vT,EAAOpU,EAAQ0U,EAAY2uT,EAAQC,EAAQvqU,EAAOF,GAClFmH,EAAOyO,SACtB,OAAOxtB,KAAK0iV,aAAavvT,EAAOpU,EAAQ0U,EAAY2uT,EAAQC,IAEhER,EAASxmV,UAAU4nV,yBAA2B,SAAU9vT,EAAOpU,EAAQ0U,EAAY2uT,EAAQC,EAAQvqU,EAAOF,GAGtG,OAFAwqU,EAAUA,EAAS,IAAOjvT,EAAMvB,OAChCywT,EAAUA,EAAS,IAAOlvT,EAAM4G,OACzB/5B,KAAK0iV,aAAavvT,EAAOpU,EAAQ0U,EAAY2uT,EAAQC,IAEhER,EAASxmV,UAAU6nV,gCAAkC,SAAU/vT,EAAOpU,EAAQ0U,EAAY2uT,EAAQC,EAAQvqU,EAAOF,GAC7G,IAAIurU,EAAUnjV,KAAKojV,gBAAgBrkU,EAAQA,EAAOyO,SAAS+Q,MAG3D,OAFA6jT,GAAmBe,EAAQ5mH,qBAAuB4mH,EAAQ1mH,eAC1D4lH,GAAmBc,EAAQ9mH,mBAAqB8mH,EAAQ3mH,aACjDx8N,KAAK0iV,aAAavvT,EAAOpU,EAAQ0U,EAAY2uT,EAAQC,IAEhER,EAASxmV,UAAUgoV,4BAA8B,SAAUlwT,EAAOpU,EAAQ0U,EAAY2uT,EAAQC,EAAQvqU,EAAOF,GACzG,IAAInb,EAASsiB,EAAOkY,OAAOx6B,OACvB0mV,EAAUnjV,KAAKojV,gBAAgBrkU,EAAQA,EAAOyO,SAAS+Q,MAG3D,OAFA6jT,EAAWA,EAASe,EAAQ5mH,qBAAwBlwN,KAAKQ,KAAKpQ,GAC9D4lV,EAAWA,EAASc,EAAQ9mH,mBAAsBhwN,KAAKQ,KAAKpQ,GACrDuD,KAAK0iV,aAAavvT,EAAOpU,EAAQ0U,EAAY2uT,EAAQC,IAEhER,EAASxmV,UAAUioV,qBAAuB,SAAUnwT,EAAOpU,EAAQ0U,EAAY2uT,EAAQC,EAAQvqU,EAAOF,GACnFmH,EAAOyO,SACtB,OAAOxtB,KAAK0iV,aAAavvT,EAAOpU,EAAQ0U,EAAY2uT,EAAQC,IAEhER,EAASxmV,UAAUkoV,uBAAyB,SAAUhmV,EAAOyzD,EAAKhyC,EAAK6V,EAAW2uT,EAAWC,GACzF,IAAIvmU,EAAO,GACPwmU,EAAe,GAMnB,OALAxmU,GAAQ,MAAQ3f,EAAMwP,EAAI,IAAMikD,EAAIhkD,EAAI,MAAQgS,EAAIjS,EAAI,IAAMikD,EAAIhkD,EAClE02U,GAA+B,SAAd7uT,GAAsC,SAAdA,EAAwB,MAASt3B,EAAO,EAAI,KAAOyzD,EAAIhkD,EAAIy2U,GAAa,MAC1GlmV,EAAO,EAAI,KAAOyzD,EAAIhkD,EAAIy2U,GAAa,GAC9CC,GAA+B,UAAd7uT,GAAuC,SAAdA,EAAwB,MAAS7V,EAAK,EAAI,KAAOgyC,EAAIhkD,EAAIy2U,GAAa,MACzGzkU,EAAK,EAAI,KAAOgyC,EAAIhkD,EAAIy2U,GAAa,KACpCvmU,EAAMwmU,IAElB7B,EAASxmV,UAAUsoV,qBAAuB,SAAUpmV,EAAOyzD,EAAKhyC,EAAK6V,EAAW2uT,EAAWC,GACvF,IAAIvmU,EAAO,GACPwmU,EAAe,GAMnB,OALAxmU,GAAQ,MAAQ8zC,EAAIjkD,EAAI,IAAMxP,EAAMyP,EAAI,MAAQgkD,EAAIjkD,EAAI,IAAMiS,EAAIhS,EAClE02U,GAA+B,SAAd7uT,GAAsC,SAAdA,EAAwB,OAASm8B,EAAIjkD,EAAI02U,GAAa,IAAMlmV,EAAMyP,EAAI,OACxGgkD,EAAIjkD,EAAI02U,GAAa,IAAMlmV,EAAMyP,EAAI,GAC5C02U,GAA+B,UAAd7uT,GAAuC,SAAdA,EAAwB,OAASm8B,EAAIjkD,EAAI02U,GAAa,IAAMzkU,EAAIhS,EAAI,OACvGgkD,EAAIjkD,EAAI02U,GAAa,IAAMzkU,EAAIhS,EAAI,IAClCkQ,EAAMwmU,IAElB7B,EAASxmV,UAAUuoV,iBAAmB,SAAUrmV,EAAOyzD,EAAKhyC,EAAK6V,EAAW2uT,EAAWC,GACnF,IAAIC,EAAe,GACfxmU,EAAO,GACP2mU,EAAQ7jV,KAAKujV,uBAAuBhmV,EAAOyzD,EAAKhyC,EAAK6V,EAAW2uT,EAAWC,GAC3EK,EAAQ9jV,KAAK2jV,qBAAqBpmV,EAAOyzD,EAAKhyC,EAAK6V,EAAW2uT,EAAWC,GAG7E,OAFAvmU,EAAO2mU,EAAM,GAAGrpU,OAAOspU,EAAM,IAC7BJ,EAAeG,EAAM,GAAGrpU,OAAOspU,EAAM,KAC7B5mU,EAAMwmU,IAElB7B,EAASxmV,UAAU0nV,kBAAoB,SAAUxlV,EAAOyzD,EAAKhyC,EAAKD,EAAQ0U,GACtE,IAII0uD,EAJAttD,EAAY9V,EAAOyO,SAASqH,UAC5B0J,EAAOxf,EAAOyO,SAAS+Q,KACvBklT,EAAY1kU,EAAOyO,SAASy0T,YAAYxlV,OAIxC+mV,EAAYjlT,EAChB,OAAQA,GACJ,IAAK,OACDilT,EAAYjlT,EACZ,MACJ,IAAK,aACDilT,EAAY,EAAe,WAAajlT,EACxC,MACJ,IAAK,WACDilT,EAAY,EAAe,aAAejlT,EAGlD,OAAQilT,GACJ,IAAK,aACDrhQ,EAAQniF,KAAKujV,uBAAuBhmV,EAAOyzD,EAAKhyC,EAAK6V,EAAW2uT,EAAWC,GAC3E,MACJ,IAAK,WACDthQ,EAAQniF,KAAK2jV,qBAAqBpmV,EAAOyzD,EAAKhyC,EAAK6V,EAAW2uT,EAAWC,GACzE,MACJ,IAAK,OACDthQ,EAAQniF,KAAK4jV,iBAAiBrmV,EAAOyzD,EAAKhyC,EAAK6V,EAAW2uT,EAAWC,GAG7E,OAAQthQ,EAAM,GAAIA,EAAM,KAG5B0/P,EAASxmV,UAAU+nV,gBAAkB,SAAUrkU,EAAQwf,GACnD,IAKIwlT,EACAC,EAGAC,EACAC,EAVAC,EAAS,EACTC,EAAS,EACT5nH,EAAe,EACfC,EAAiB,EAQjBhgO,EAASsiB,EAAOkY,OAAOx6B,OAC3B,OAAQ8hC,GACJ,IAAK,WAEDi+L,GADA4nH,EAASjyT,GAAIpT,EAAOwqN,QACI9sO,EACxB,MACJ,IAAK,aAEDggO,GADA0nH,EAAShyT,GAAIpT,EAAOooN,QACM1qO,EAC1B,MACJ,IAAK,OAED+/N,GADA4nH,EAASjyT,GAAIpT,EAAOwqN,QACI9sO,EAExBggO,GADA0nH,EAAShyT,GAAIpT,EAAOooN,QACM1qO,EAElC,IAAK,IAAI2B,EAAK,EAAGyE,EAAKkc,EAAOkY,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI+0B,EAAQtwB,EAAGzE,GACF,aAATmgC,EACA6lT,GAAkB/3U,KAAKs9D,IAAKx2C,EAAM4G,OAASyiM,EAAe,GAE5C,eAATj+L,EACL4lT,GAAkB93U,KAAKs9D,IAAKx2C,EAAMvB,OAAS6qM,EAAiB,IAG5D2nH,GAAkB/3U,KAAKs9D,IAAKx2C,EAAM4G,OAASyiM,EAAe,GAC1D2nH,GAAkB93U,KAAKs9D,IAAKx2C,EAAMvB,OAAS6qM,EAAiB,IAOpE,OAJAsnH,EAAkBK,GAAU3nV,EAAS,GACrCwnV,EAAgB53U,KAAKQ,KAAKu3U,GAAU3nV,EAAS,IAC7CunV,EAAkBG,GAAU1nV,EAAS,GACrCynV,EAAgB73U,KAAKQ,KAAKs3U,GAAU1nV,EAAS,IACtC,IAAI0/N,GAAK4nH,EAAiBE,EAAeD,EAAiBE,EAAe1nH,EAAcC,IAElGolH,EAASxmV,UAAU8F,cAAgB,SAAU4d,GACzC,IAEI1R,EADAsgG,EAAS5uF,EAAO8Q,MAAME,SAE1B1iB,EAA2C,cAA/B0R,EAAO8Q,MAAMk3M,cAAgC,aAAehoN,EAAOgV,SAAShnB,EAAI,IAAOgS,EAAOgV,SAAU,EAAI,IAAM,GAC9H,IAAI24M,GAAgB3tN,EAAOknN,OAAOlwN,OAJf,GAIwC,EACvD42N,GAAe5tN,EAAOknN,OAAOjwN,MALd,GAKsC,EACzD,GAAmC,cAA/B+I,EAAO8Q,MAAMk3M,cAA+B,CAC5C,IAAIs9G,EAAmB12O,EAAO0N,aAAa,IAAI2hH,GAAWh9N,KAAK6vB,MAAM7uB,QAAQsC,GAAK,0BAA4Byb,EAAO9M,MAAO,eAAiB+D,MAAO,EAAG6f,MAAO,QAAU,GACpK9oB,GAAI4/N,EAAa3/N,GAAI0/N,EACrB12N,MAAO+I,EAAOgV,SAAS/d,MAAsB,EAAd22N,EAAiB52N,OAAQgJ,EAAOgV,SAAShe,OAAwB,EAAf22N,KAErF3tN,EAAOiuN,gBAAkBr/H,EAAO7/B,aAC5BxqE,GAAMtD,KAAK6vB,MAAM7uB,QAAQsC,GAAK,gBAAkByb,EAAO9M,MACvD5E,UAAaA,EACb0/N,YAAa,QAAU/sO,KAAK6vB,MAAM7uB,QAAQsC,GAAK,0BAA4Byb,EAAO9M,MAAQ,MAE9F8M,EAAOiuN,gBAAgBrrO,YAAY0iV,KAQ3CxC,EAASxmV,UAAUgyO,oBAAsB,SAAUtuN,GAC/C,IAAIulU,EAAmBvlU,EAAOiuN,gBAAgBz7N,WAC9C,IAAK+yU,EACD,OAAO,KAIX,IAFA,IAAIzkV,EAAQkf,EAAO6vB,UAAU/uC,MAAQkf,EAAO6vB,UAAU1jC,SAClDuY,EAAI,EACDA,EAAI6gU,EAAiB7nV,QAAQ,CAChC,IAAK,IAAIN,EAAI,EAAGA,EAAI4iB,EAAOkY,OAAOx6B,OAAQN,IACjC4iB,EAAOkY,OAAO96B,GAAGsrO,gBAAgB,KAGtC68G,EAAiB7gU,GAAG/e,MAAMC,WAAa,SACvCq0B,GAAgBsrT,EAAiB7gU,GAAI5jB,EAAO,IAAKkf,EAAO8Q,MAAMsG,oBAAsB,cAAgB,iBAAiB,IAEzH1S,MAMRo+T,EAASxmV,UAAU0kC,cAAgB,WAE/B,MAAO,YAOX8hT,EAASxmV,UAAUiX,QAAU,SAAUud,KAGhCgyT,KCtSPh2P,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAqBxCq4P,GAAwB,SAAU73P,GAElC,SAAS63P,EAAO10T,GACZ,IAAI9vB,EAAQ2sF,EAAOprF,KAAKtB,KAAM6vB,IAAU7vB,KAGxC,OAFAD,EAAMuwO,QAAUvwO,EAChBA,EAAMrD,mBACCqD,EA8NX,OAnOA8rF,GAAU04P,EAAQ73P,GAUlB63P,EAAOlpV,UAAUqB,iBAAmB,WAC5BsD,KAAK6vB,MAAM04D,cAGfvoF,KAAK6vB,MAAMs3D,GAAG37E,GAAQkgF,eAAgB1rF,KAAK+pT,UAAW/pT,MACtDA,KAAK6vB,MAAMs3D,GAAG,QAASnnF,KAAKizH,MAAOjzH,MACnCA,KAAK6vB,MAAMs3D,GAAG37E,GAAQmgF,cAAe3rF,KAAKgqT,SAAUhqT,QAKxDukV,EAAOlpV,UAAUuB,oBAAsB,WAC/BoD,KAAK6vB,MAAM04D,cAGfvoF,KAAK6vB,MAAM03D,IAAI/7E,GAAQkgF,eAAgB1rF,KAAK+pT,WAC5C/pT,KAAK6vB,MAAM03D,IAAI,QAASvnF,KAAKizH,OAC7BjzH,KAAK6vB,MAAM03D,IAAI/7E,GAAQmgF,cAAe3rF,KAAKgqT,YAK/Cu6B,EAAOlpV,UAAU0uT,UAAY,SAAUlpT,GAC/Bb,KAAK6vB,MAAMogN,eAAen5M,UAAY92B,KAAK6vB,MAAMmB,SACjDhxB,KAAK4qF,KAAK/pF,IAMlB0jV,EAAOlpV,UAAU2uT,SAAW,SAAUnpT,GAC9Bb,KAAK6vB,MAAMogN,eAAen5M,SAAW92B,KAAK6vB,MAAMmB,SAChDhxB,KAAK4qF,KAAK/pF,IAQlB0jV,EAAOlpV,UAAU8qT,iBAAmB,SAAUq+B,EAAyB30T,GACnE7vB,KAAKkxO,qBAEL,IAAK,IADDl1M,EACK59B,EAAK,EAAGqmV,EAA4BD,EAAyBpmV,EAAKqmV,EAA0BhoV,OAAQ2B,IAAM,CAC/G,IAAI2gB,EAAS0lU,EAA0BrmV,GACf,cAApB2gB,EAAOosL,WACPnvK,EAAsC,eAAxBnM,EAAMk3M,cAAkChoN,EAAOgnN,SACzDhnN,EAAOrY,KACX1G,KAAKkxO,kBAAkB1sO,KAAK,IAAIgvO,GAAcz0N,EAAOgY,KAAMhY,EAAO8qD,SAAU9qD,EAAO2zN,YAAa3zN,EAAO+X,QAASkF,EAAYjd,EAAOknN,OAAO9sM,MAAOpa,EAAOknN,OAAOnvM,aAK3KytT,EAAOlpV,UAAUk1O,gBAAkB,SAAUv7M,EAAeq7M,EAAcL,GACtE,IAAIx1K,EAAUw1K,EAAOx1K,QACjBkqR,EAAc,EACdC,EAAa,EACZ3kV,KAAK20B,WAINgwT,EAAc30G,EAAOh6N,MAA4C,EAAlCgf,EAAchf,MAAQ,IAAO,EAH5D0uU,EAAe10G,EAAOj6N,OAA8C,EAAnCif,EAAcjf,OAAS,IAAO,EAKnEs6N,EAAat6N,QAAU2uU,EACvBr0G,EAAar6N,OAAS2uU,EACJ30G,EAAOxsJ,YAAzB,IAQIohQ,EAPArhQ,EAAaysJ,EAAOzsJ,WACpBkuJ,EAAezB,EAAOyB,aACtBpwM,EAAe,EACf49Q,EAAW,EACXruE,EAAc,EACdi0G,EAAe,EACfp1G,EAAW,EAEfzvO,KAAK0wO,cAAgBrkO,KAAKC,IAAIuiB,GAAY,cAAemhN,EAAO4C,WAAW78N,OAAQi6N,EAAOxsJ,aAE1F,IAAK,IADDmqB,GAAS,EACJvvG,EAAK,EAAGyE,EAAK7C,KAAKkxO,kBAAmB9yO,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAChE,IAAIuzO,EAAe9uO,EAAGzE,GACtBwmV,GACIxmT,KAAMuzM,EAAavzM,KAAMtP,KAAM6iN,EAAa7iN,KAAMqK,MAAOw4M,EAAax4M,MACtEo5M,YAAaZ,EAAaY,YAAax7M,KAAMkhM,GAAc5/L,QAAQ,GAEvEr4B,KAAK6vB,MAAMnJ,QAAQuxM,GAAc2sH,GACjCjzG,EAAahkI,QAAUi3O,EAAgBvsT,OACvCs5M,EAAa7iN,KAAO81T,EAAgB91T,KACpC6iN,EAAavzM,KAAOwmT,EAAgBxmT,KACpCuzM,EAAax4M,MAAQyrT,EAAgBzrT,MACrCw4M,EAAaY,YAAcqyG,EAAgBryG,YAC3CZ,EAAa30M,SAAWnO,GAAY8iN,EAAa7iN,KAAMkhN,EAAO4C,WAC1DjB,EAAahkI,QAAgC,KAAtBgkI,EAAa7iN,OACpC6+E,GAAS,EAETsxM,GADAruE,EAAcrtJ,EAAakuJ,EAAeE,EAAa30M,SAAShnB,MAAQwkD,GAEpE61K,EAAar6N,MAASwkD,EAAUykP,GAAaj/S,KAAK20B,cAClD0M,EAAeh1B,KAAKC,IAAI+0B,EAAe49Q,EAAWzkP,GAAWx6D,KAAK20B,WAAa,EAAIi8M,IAClE,IAAbnB,GAAmBmB,IAAgBquE,IACnCxvE,EAAW,GAEfwvE,EAAWj/S,KAAK20B,WAAa,EAAIi8M,EAEjCi0G,IADAp1G,GAC4BzvO,KAAK0wO,cAAgBl2K,GAAYA,IAIzEqqR,EAAex4U,KAAKC,IAAIu4U,EAAe7kV,KAAK0wO,cAAgBl2K,EAAWA,GACvEx6D,KAAKgyO,SAAW3B,EAAat6N,OAAS8uU,EACtC7kV,KAAKuxO,WAAa9B,EACd9hI,EACA3tG,KAAKywO,UAAUpkO,KAAKC,IAAK2yS,EAAWzkP,EAAUn5B,GAAewjT,EAAc70G,EAAQK,GAGnFrwO,KAAKywO,UAAU,EAAG,EAAGT,EAAQK,IAIrCk0G,EAAOlpV,UAAUu2O,eAAiB,SAAUD,EAAcp0O,EAAOi0O,EAAaszG,EAAYpyT,EAAMzT,EAAO+xN,GACnG,IAAIx2K,EAAUx6D,KAAKgwO,OAAOx1K,QACtBuqR,EAAiBD,EAAW5rT,SAASnsB,EAAIykO,EAAcszG,EAAW9nT,SAAShnB,MAC1E+uU,GAAiBpzG,EAAa30M,SAAShnB,MAAQw7N,GAAiB9+M,EAAK3lB,EAAI2lB,EAAK1c,MAAQhW,KAAKgwO,OAAOzsJ,WAAa,GAChHvjF,KAAK20B,YACLg9M,EAAaz4M,SAASnsB,EAAIxP,EAAMwP,EAChC4kO,EAAaz4M,SAASlsB,EAAKiS,IAAU+xN,EAAe8zG,EAAW5rT,SAASlsB,EACpE83U,EAAW5rT,SAASlsB,EAAIhN,KAAK0wO,cAAgBl2K,IAGjDm3K,EAAaz4M,SAASnsB,EAAKkS,IAAU+xN,EAAe8zG,EAAW5rT,SAASnsB,EAAIg4U,EAC5EpzG,EAAaz4M,SAASlsB,EAAI83U,EAAW5rT,SAASlsB,GAElD,IAAIg4U,EAAchlV,KAAKqwO,aAAatjO,EAAI/M,KAAKqwO,aAAar6N,OAAU27N,EAAaz4M,SAASnsB,EACtFykO,EAAcxxO,KAAKgwO,OAAOzsJ,WAAa,GAC3CouJ,EAAa7iN,KAAO6P,IAAUqmT,EAAW7lU,QAAQ,GAAIwyN,EAAa7iN,KAAM9uB,KAAKgwO,OAAO4C,YAGxF2xG,EAAOlpV,UAAU4pV,YAAc,SAAUtvH,GACrC,IAAI9lM,EAAQ7vB,KAAK6vB,MACb9Q,EAAS8Q,EAAM+R,cAAc+zL,GAC7Bqa,EAAShwO,KAAKkxO,kBAAkBvb,GAChC0yF,KAIJ,GAHIx4R,EAAMy2M,kBACN+hF,EAAsB3pT,KAAWmxB,EAAMy2M,gBAAgB+hF,oBAAqB,MAAM,IAElFx4R,EAAMogN,eAAe8B,iBAAkB,CAQvC,GAPKhzN,EAAO+X,QAIR/X,EAAO+X,SAAU,EAHjB/X,EAAO+X,SAAU,EAKrBk5M,EAAOl5M,QAAW/X,EAAc,QAC5B8Q,EAAMW,UAAUjf,WAAW9U,OAAS,EAAG,CACvC,KAAOozB,EAAMW,UAAU0gH,WACnBrhH,EAAMW,UAAUlrB,YAAYuqB,EAAMW,UAAU0gH,WAEhD3sI,EAAOsrB,EAAMW,WAEjBX,EAAMs9M,eAAgB,EACtBt9M,EAAM+5R,YACN/5R,EAAMuuM,cACNr/M,EAAO2rN,mBACP1qO,KAAKklV,cAAcr1T,EAAM+R,eACzB/R,EAAM06M,eACN16M,EAAMnJ,QAAQ,UAAYmJ,MAAOA,IAC7Bw4R,EAAoB5rT,OAAS,IAC7BozB,EAAMy2M,gBAAgB+hF,oBAAsBA,EAC5Cx4R,EAAMy2M,gBAAgBiiF,gBAAgB14R,EAAOA,EAAMw2M,qBAGlDx2M,EAAMy2M,iBACXz2M,EAAMy2M,gBAAgBq2G,gBAAgB9sT,EAAO8lM,IAGrD4uH,EAAOlpV,UAAU6pV,cAAgB,SAAU3uT,GACvC,IAAK,IAAIn4B,EAAK,EAAGytO,EAAqBt1M,EAAkBn4B,EAAKytO,EAAmBpvO,OAAQ2B,IAAM,CAC7EytO,EAAmBztO,GACzB8V,cAAW/Y,IAO1BopV,EAAOlpV,UAAU43H,MAAQ,SAAU32H,GAC/B,GAAK0D,KAAK6vB,MAAMogN,eAAen5M,QAA/B,CAOA,IAAK,IADD6+L,EAHAxuL,EAAW7qC,EAAM6K,OAAO7D,GAInBlF,EAAK,EAAG+mV,GAHInlV,KAAKkwO,SAAW,SAAUlwO,KAAKkwO,SAAW,iBAC3DlwO,KAAKkwO,SAAW,WAE8B9xO,EAAK+mV,EAAgB1oV,OAAQ2B,IAAM,CACjF,IAAIkF,EAAK6hV,EAAgB/mV,GACrB+oC,EAAS5oC,QAAQ+E,IAAO,IACxBqyN,EAAcvhM,SAAS+S,EAASjqC,MAAMoG,GAAI,GAAI,IAC9CtD,KAAKilV,YAAYtvH,IAGrBxuL,EAAS5oC,QAAQyB,KAAKkwO,SAAW,YAAc,EAC/ClwO,KAAKqzO,WAAW/2O,GAAO,GAElB6qC,EAAS5oC,QAAQyB,KAAKkwO,SAAW,cAAgB,GACtDlwO,KAAKqzO,WAAW/2O,GAAO,KAM/BioV,EAAOlpV,UAAU0kC,cAAgB,WAC7B,MAAO,UAOXwkT,EAAOlpV,UAAUiX,QAAU,SAAUud,GACjC7vB,KAAKpD,uBAEF2nV,GACT/0G,ICjPE41G,GAAgC,WAKhC,SAASA,EAAezyU,GACpB3S,KAAK2S,QAAUA,EA8LnB,OAtLAyyU,EAAe/pV,UAAUsyG,OAAS,SAAUtmD,EAAYp1C,GACpDjS,KAAKw6N,QAA2C,UAAjCx6N,KAAK2S,QAAQotB,gBAC5B//B,KAAKqnD,WAAaA,EAKlB,OAJmB3sB,GAAev5B,EAAc,OAC5CmC,GAAItD,KAAK2S,QAAQ3R,QAAQsC,GAAK,eAAiB2O,EAC/C1O,OAAQ,wBACR0O,EAAOo1C,EAAWzsB,QAAS56B,KAAK2S,UAQxCyyU,EAAe/pV,UAAUgqV,wBAA0B,SAAUnsT,GACzD,IAAIxG,EAWJ,OAVAA,EAAkC,UAA3B1yB,KAAKqnD,WAAW7C,OACnB,IAAIjvB,GAAK,EAAG,EAAGv1B,KAAK2S,QAAQqiB,cAAchf,MAAOhW,KAAK2S,QAAQqiB,cAAcjf,QAC5E/V,KAAKw6N,QACDx6N,KAAK2S,QAAQy7N,qBAAqBzQ,eAClC39N,KAAK2S,QAAQoM,OAAO,GAAGumU,kBAC/BpsT,EAASnsB,GAAmC,iBAAtB/M,KAAKqnD,WAAWt6C,EACH,iBAAtB/M,KAAKqnD,WAAWt6C,EAAkB/M,KAAKqnD,WAAWt6C,EAAI,EAC/D8xB,GAAe7+B,KAAKqnD,WAAWt6C,EAAG2lB,EAAK1c,QAAU0c,EAAK3lB,EAC1DmsB,EAASlsB,GAAmC,iBAAtBhN,KAAKqnD,WAAWr6C,EAAkBhN,KAAKqnD,WAAWr6C,EACpE6xB,GAAe7+B,KAAKqnD,WAAWr6C,EAAG0lB,EAAK3c,SAAW2c,EAAK1lB,GACpD,GAOXo4U,EAAe/pV,UAAUkqV,wBAA0B,SAAUrsT,GACzD,IAAIu3S,EAAiB,IAAIx9S,GAAc,EAAG,GAC1C,GAAIjzB,KAAKw6N,QAAS,CAUd,IAAK,IATD1iN,OAAQ,EACRF,OAAQ,EACRiY,EAAQ7vB,KAAK2S,QACb00C,EAAarnD,KAAKqnD,WAClBz1B,OAAS,EACT4zT,GAAQ,EACRxuT,EAAYqwB,EAAWrwB,UACvBgyR,EAAY3hQ,EAAW2hQ,UACvBv1R,EAAa5D,EAAMsG,oBACd/3B,EAAK,EAAGyE,EAAKgtB,EAAM8vM,gBAAiBvhO,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/D,IAAI+X,EAAOtT,EAAGzE,GACd,GAAI44B,IAAc7gB,EAAK4gB,MAAsB,MAAbC,GAAmC,iBAAd7gB,EAAK4gB,KAEtD,IADAjf,EAAQ3B,GACEmb,UAAU/yB,QAAQ,aAAe,EAAG,CAC1C,IAAIknV,EAAkC,qBAApB3tU,EAAMwZ,UAAoC+1B,EAAWt6C,EAAEsT,UAAWnT,WAChFm6C,EAAWt6C,EACf,GAAI+K,EAAM0oN,OAAOjiO,QAAQknV,GAAe,EACpC,OAAO,EAGP7zT,EAAS9Z,EAAM0oN,OAAOjiO,QAAQknV,QAGjC,GAAwB,aAApB3tU,EAAMwZ,UAA0B,CACrC,IAAIgmE,GAAWr0B,SAAU,OAAQv8D,KAAM,YACvCkrB,EAAuC,iBAAtB5xB,KAAKqnD,WAAWt6C,EAC7BqT,KAAK4pC,MAAMn6B,EAAM6gD,KAAK87B,cAAclV,EAAzBznE,CAAiCA,EAAM6gD,KAAK47B,cAAchV,EAAzBznE,CAAiC,IAAIzP,KAAKg+C,GAASpU,MAAM2wI,WAAYtyK,IAAKg/B,EAAWt6C,IAAKsb,QAAU,OAGpJuJ,GAAUy1B,EAAWt6C,OAGpBi8S,IAAc7yS,EAAK4gB,MAAsB,MAAbiyR,GAAmC,iBAAd7yS,EAAK4gB,QAE3DyuT,EAA4B,iBAD5B5tU,EAAQzB,GACMmb,WAGtB,SAAIxZ,GAASF,GAASwZ,GAA2B,gBAApBtZ,EAAMwZ,UAA8BX,GAAQiB,EAAQ9Z,EAAM6Y,SAAWiB,EAAQ9Z,EAAMka,iBAC5Gy+S,EAAiBv1S,GAAStJ,EAAQR,GAAQo0T,EAAQ70T,IAAS3wB,KAAKqnD,WAAWr6C,EAAG4K,EAAM+Y,UAAY3wB,KAAKqnD,WAAWr6C,EAAI4K,EAAMoa,eAAiBq1B,EAAWr6C,EAClJw4U,EAAQn5U,KAAKs9D,IAAI/xD,EAAM+Y,QAAS/Y,EAAMoa,aAAa1lB,MAC9C+6C,EAAWr6C,EAAI4K,EAAMoa,aAAa1lB,IAAMsL,EAAMoa,aAAa1lB,IAAMsL,EAAMoa,aAAa7R,IAAKrI,EAAOF,EAAO6b,GAChHyF,EAASnsB,EAAI0jU,EAAe1jU,GAAK0mB,EAAa7b,EAAM8a,KAAK3lB,EAAI+K,EAAM4a,KAAK3lB,GACxEmsB,EAASlsB,EAAIyjU,EAAezjU,GAAKymB,EAAa3b,EAAM4a,KAAK1lB,EAAI4K,EAAM8a,KAAK1lB,IAKrE,GAGP,OAAOhN,KAAK0lV,0BAA0BxsT,IAS9CksT,EAAe/pV,UAAUqxT,kBAAoB,SAAUrlQ,EAAYp1C,EAAOoC,GACtE,IAAIsxU,EACAzsT,EACJA,EAAW,IAAIjG,GAAc,EAAG,GAChC0yT,EAAoB3lV,KAAK2tG,OAAOtmD,EAAYp1C,GACxCjS,KAAK,gBAAkBqnD,EAAWu+R,gBAAkB,SAAS1sT,IAC7Dl5B,KAAK6lV,gBAAgB3sT,EAAUysT,EAAmBtxU,IAQ1D+wU,EAAe/pV,UAAUqqV,0BAA4B,SAAUxsT,GAG3D,IAAK,IADD/F,EACK/0B,EAAK,EAAGyE,EAFE7C,KAAK2S,QAEWivB,cAAc,GAAG3K,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC9E,IAAI0nV,EAAWjjV,EAAGzE,GAClB,GAA0B,iBAAf0nV,EAAS/4U,GAChB,GAAIqT,KAAK4pC,MAAM87R,EAAS/4U,KAAOqT,KAAK4pC,MAAMhqD,KAAKqnD,WAAWt6C,IACtD+4U,EAAS94U,IAAMhN,KAAKqnD,WAAWr6C,EAAG,CAClCmmB,EAAQ2yT,EACR,YAIJ,GAAIA,EAAS/4U,IAAM/M,KAAKqnD,WAAWt6C,GAAK+4U,EAAS94U,IAAMhN,KAAKqnD,WAAWr6C,EAAG,CACtEmmB,EAAQ2yT,EACR,OAIZ,SAAI3yT,IAASA,EAAM2D,WACfoC,EAASnsB,EAAIomB,EAAMs9S,eAAe1jU,EAClCmsB,EAASlsB,EAAImmB,EAAMs9S,eAAezjU,GAC3B,IAafo4U,EAAe/pV,UAAUwqV,gBAAkB,SAAU3sT,EAAUl4B,EAASqT,GACpE,IAAIa,EAAc6lB,GAAmB/5B,GACjCo3B,GACAC,QAAQ,EAAOtB,KAAMgiM,GAAkBn+L,QAAS55B,EAChDk4B,SAAUA,GAEdl5B,KAAK2S,QAAQ+T,QAAQqyM,GAAkB3gM,GAClCA,EAASC,SACVD,EAASwC,QAAQl2B,MAAM8H,KAAOxM,KAAK+lV,kBAAkB/lV,KAAKqnD,WAAWyF,oBAAqB53C,EAAYc,MAAOoiB,EAASc,SAASnsB,GAAK,KACpIqrB,EAASwC,QAAQl2B,MAAMgI,IAAM1M,KAAK+lV,kBAAkB/lV,KAAKqnD,WAAW0F,kBAAmB73C,EAAYa,OAAQqiB,EAASc,SAASlsB,GAAK,KAClIorB,EAASwC,QAAQp3B,aAAa,aAAcxD,KAAKqnD,WAAW2M,aAAe,cAC3E34B,GAAcjD,EAASwC,QAASvmB,KAUxC+wU,EAAe/pV,UAAU0qV,kBAAoB,SAAU/9R,EAAW74B,EAAMnyB,GACpE,OAAQgrD,GACJ,IAAK,MACL,IAAK,OACDhrD,GAASmyB,EACT,MACJ,IAAK,SACL,IAAK,MACDnyB,GAAS,EACT,MACJ,IAAK,SACL,IAAK,SACDA,GAAUmyB,EAAO,EAGzB,OAAOnyB,GAEJooV,KC7MPv5P,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAgBxC85P,GAAiC,SAAUt5P,GAM3C,SAASs5P,EAAgBrzU,EAASy9C,GAC9B,IAAIrwD,EAAQ2sF,EAAOprF,KAAKtB,KAAM2S,IAAY3S,KAG1C,OAFAD,EAAM8vB,MAAQld,EACd5S,EAAMqwD,YAAcA,EACbrwD,EAiCX,OA1CA8rF,GAAUm6P,EAAiBt5P,GAgB3Bs5P,EAAgB3qV,UAAU+sT,kBAAoB,SAAUpnT,GACpD,IAAIjB,EAAQC,KACZA,KAAKowD,YAAcpwD,KAAK6vB,MAAMugC,YAC9BpwD,KAAKqU,cAAgBlT,EAAc,OAC/BmC,GAAItD,KAAK6vB,MAAM7uB,QAAQsC,GAAK,4BAEhCtD,KAAKowD,YAAYl5B,IAAI,SAAUmwB,EAAYp1C,GACvClS,EAAM2sT,kBAAkBrlQ,EAAYp1C,EAAOlS,EAAMsU,iBAErDgnB,GAAcr7B,KAAKqU,cAAerT,IAOtCglV,EAAgB3qV,UAAUiX,QAAU,SAAUK,KAM9CqzU,EAAgB3qV,UAAU0kC,cAAgB,WAEtC,MAAO,cAEJimT,GACTZ,IC5DEv5P,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAkBxC+5P,GAAqC,SAAUv5P,GAE/C,SAASu5P,IACL,OAAkB,OAAXv5P,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAoT/D,OAtTA6rF,GAAUo6P,EAAqBv5P,GAS/Bu5P,EAAoB5qV,UAAUsyG,OAAS,SAAU5uF,EAAQjH,EAAOF,EAAO6b,GAKnE,IAAK,IAHD2E,EADAo9R,EAAiBx1T,KAAKs0T,kBAAkBv1S,GAInC3gB,GADS2gB,EAAOkmB,OAAOjvB,MAClB,GAAGnT,EAAKkc,EAAOkY,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI+0B,EAAQtwB,EAAGzE,GACf+0B,EAAMs0M,mBACNt0M,EAAM2zM,WACN,IAAIo/G,OAAiB,EACjB/yT,EAAM2D,SAAWvF,GAAYxS,EAAOkY,OAAO9D,EAAMlhB,MAAQ,GAAIkhB,EAAOpU,EAAOkY,OAAO9D,EAAMlhB,MAAQ,GAAI8M,KACpG/e,KAAKmmV,kBAAkBhzT,EAAMnmB,EAAGmmB,EAAOpU,EAAOqnU,aAE9CpmV,KAAKqmV,gBAAgBtnU,EAAQoU,EAAOqiS,GAEpC0wB,EAAiBlmV,KAAK40T,aAAczhS,EAAMvB,OAAS4jS,EAAej4T,MAAQ41B,EAAMiJ,cAAgBjJ,EAAMvB,OAAS4jS,EAAex2S,IAAMmU,EAAMkJ,cAAetd,GACzJoU,EAAM2zM,QAAQtiO,KAAK0hV,IACnB9tT,EAAWp4B,KAAKg2J,aAAaj3I,EAAQoU,EAAOpU,EAAO8qD,UAC/Ch0C,MAASp4B,EAAkBshB,EAAOkmB,OAAOpP,QAAkC,gBAAxB9W,EAAOkmB,OAAOpP,MAC7DgI,GAAmB9e,EAAO8qD,UAAW,IADmD9qD,EAAOkmB,OAAOpP,MAE1G7f,MAAO+I,EAAOkmB,OAAOjvB,MAAQ+I,EAAOkmB,OAAOjvB,MAAQ,KAEzCqiB,QACVr4B,KAAKsmV,oBAAoBvnU,EAAQoU,EAAO+yT,EAAgB9tT,EAAUp4B,KAAKsqC,cAAcnX,EAAOpU,EAAQmc,GAAS/H,EAAMvB,OAAQuB,EAAMgJ,OAAQrkB,EAAOF,EAAO6b,GAAayH,GAAS/H,EAAMvB,OAAS4jS,EAAer5R,OAAQhJ,EAAMqxI,QAAS1sJ,EAAOF,EAAO6b,IAAc+hS,EAAer5R,SAIrRpd,EAAOknN,OAAOnvM,SACd/X,EAAO8Q,MAAMy9M,aAAa3/H,OAAO5uF,IASzCknU,EAAoB5qV,UAAUgrV,gBAAkB,SAAUtnU,EAAQoU,EAAOqiS,GACrE,IAAI+wB,EAAYvmV,KAAK40T,aAAczhS,EAAMvB,OAAS4jS,EAAer5R,OAAShJ,EAAMuF,QAAUvF,EAAMvB,OAAS4jS,EAAer5R,OAAShJ,EAAMsF,QAAS1Z,GAChJ/e,KAAKwmV,cAAcznU,EAAQoU,EAAOozT,EAAWxnU,EAAO8Q,MAAMsG,sBAS9D8vT,EAAoB5qV,UAAUmrV,cAAgB,SAAUznU,EAAQoU,EAAOqxB,EAAQ/wB,GAC3E,IAAIu8D,EAAcjxE,EAAOkmB,OAAOjvB,OAAS,EACpCyd,GAKD+wB,EAAOx3C,GAAKgjF,EAAc,EAC1BxrC,EAAOzuC,OAASyuC,EAAOzuC,QAAUi6E,IALjCxrC,EAAOz3C,GAAKijF,EAAc,EAC1BxrC,EAAOxuC,MAAQwuC,EAAOxuC,OAASg6E,GAMnC78D,EAAM2zM,QAAQtiO,KAAKggD,IASvByhS,EAAoB5qV,UAAUivC,cAAgB,SAAUnX,EAAOpU,EAAQod,EAAQqoI,GAC3E,IAAIm1J,EAAUxmS,EAAM2zM,QAAQ,GACxB8yF,EAAUzmS,EAAM2zM,QAAQ,GACxBjyM,EAAY,GAEZ9B,GADQhU,EAAO8Q,MAAMsG,oBAAsBwjS,EAAQ5jT,OAAS4jT,EAAQ3jT,MAC3D+I,EAAO8Q,MAAMsG,oBAAsBwjS,EAAQ3sT,EAAI2sT,EAAQ5jT,OAAS,EACzE4jT,EAAQ5sT,EAAI4sT,EAAQ3jT,MAAQ,GAC5BywU,EAAW7sB,EAAQ7sT,EAAI6sT,EAAQ5jT,MAC/B0wU,EAAY9sB,EAAQ5sT,EAAI4sT,EAAQ7jT,OAChC4wU,EAAWhtB,EAAQ5sT,EAAI4sT,EAAQ3jT,MAC/B+7L,EAAY4nH,EAAQ3sT,EAAI2sT,EAAQ5jT,OA6BpC,OA5BKgJ,EAAO8Q,MAAMsG,qBAedn2B,KAAKwmV,cAAcznU,EAAQoU,GAASpmB,EAAG4sT,EAAQ5sT,EAAGC,EAAG4sT,EAAQ5sT,EAAGgJ,MAAO,EAAGD,OAAQ2wU,EAAY9sB,EAAQ5sT,IAAK,GAC3GhN,KAAKwmV,cAAcznU,EAAQoU,GAASpmB,EAAG45U,EAAU35U,EAAG4sT,EAAQ5sT,EAAGgJ,MAAO,EAAGD,OAAQ2wU,EAAY9sB,EAAQ5sT,IAAK,GAC1G6nB,GAAa,KAAO8kS,EAAQ5sT,EAAI,IAAM6sT,EAAQ5sT,EAAI,MAAQ2sT,EAAQ5sT,EAAI,IAAM25U,EAC5E7xT,GAAa,KAAO8kS,EAAQ5sT,EAAI,IAAMgmB,EAAS,OAAc6mS,EAAQ7sT,EAAI,IAAMgmB,EAC/E8B,GAAa,MAAQ+kS,EAAQ7sT,EAAI,IAAM6sT,EAAQ5sT,EAAI,OAAcy5U,EAAW,IAAM7sB,EAAQ5sT,EACtF,MAAQy5U,EAAW,IAAMC,EAAY,MAAQ9sB,EAAQ7sT,EAAI,IAAM25U,EAAY,KAC/E7xT,GAAa,MAAQ4xT,EAAW,IAAM1zT,EAAS,MAAQ4zT,EAAW,IAAM5zT,EACxE8B,GAAa,MAAQ8xT,EAAW,IAAM/sB,EAAQ5sT,EAAI,MAAQ25U,EAAW,IAAMD,EAC3E7xT,GAAa,MAAQsH,EAAOpvB,EAAI,IAAM6sT,EAAQ5sT,EAAI,OAAcmvB,EAAOpvB,EAAI,IAAM25U,EACjF7xT,GAAa9V,EAAO6nU,SAChB,MAAQpiL,EAAQz3J,EAAI,GAAK,KAAOy3J,EAAQx3J,EAAI,GAAK,OAASw3J,EAAQz3J,EAAI,GAAK,KAAOy3J,EAAQx3J,EAAI,GAC1F,MAAQw3J,EAAQz3J,EAAI,GAAK,KAAOy3J,EAAQx3J,EAAI,GAAK,OAASw3J,EAAQz3J,EAAI,GAAK,KAAOy3J,EAAQx3J,EAAI,GAAK,KAzB3GhN,KAAKwmV,cAAcznU,EAAQoU,GAASpmB,EAAG6sT,EAAQ7sT,EAAGC,EAAG2sT,EAAQ3sT,EAAGgJ,MAAOywU,EAAW7sB,EAAQ7sT,EAAGgJ,OAAQ,IAAK,GAC1G/V,KAAKwmV,cAAcznU,EAAQoU,GAASpmB,EAAG6sT,EAAQ7sT,EAAGC,EAAG+kM,EAAW/7L,MAAOywU,EAAW7sB,EAAQ7sT,EAAGgJ,OAAQ,IAAK,GAC1G8e,GAAa,KAAO+kS,EAAQ7sT,EAAI,IAAM4sT,EAAQ3sT,EAAI,OAAcy5U,EAAW,IAAM9sB,EAAQ3sT,EACzF6nB,GAAa,MAAQ9B,EAAS,IAAM4mS,EAAQ3sT,EAAI,OAAc+lB,EAAS,IAAM6mS,EAAQ5sT,EACrF6nB,GAAa,MAAQ+kS,EAAQ7sT,EAAI,IAAM6sT,EAAQ5sT,EAAI,OAAcy5U,EAAW,IAAM7sB,EAAQ5sT,EACtF,MAAQy5U,EAAW,IAAMC,EAAY,MAAQ9sB,EAAQ7sT,EAAI,IAAM25U,EAAY,KAC/E7xT,GAAa,MAAQ9B,EAAS,IAAM2zT,EAAY,MAAQ3zT,EAAS,IAAMg/K,EACvEl9K,GAAa,MAAQ+kS,EAAQ7sT,EAAI,IAAMglM,EAAY,MAAQ00I,EAAW,IAAM10I,EAC5El9K,GAAa,MAAQ+kS,EAAQ7sT,EAAI,IAAMovB,EAAOnvB,EAAI,MAAQy5U,EAAW,IAAMtqT,EAAOnvB,EAClF6nB,GAAa9V,EAAO6nU,SAChB,OAASpiL,EAAQz3J,EAAI,GAAK,KAAOy3J,EAAQx3J,EAAI,GAAK,OAASw3J,EAAQz3J,EAAI,GAAK,KAAOy3J,EAAQx3J,EAAI,GAC3F,OAASw3J,EAAQz3J,EAAI,GAAK,KAAOy3J,EAAQx3J,EAAI,GAAK,OAASw3J,EAAQz3J,EAAI,GAAK,KAAOy3J,EAAQx3J,EAAI,GAAK,IAgBzG6nB,GAUXoxT,EAAoB5qV,UAAUirV,oBAAsB,SAAUvnU,EAAQoU,EAAOT,EAAM0F,EAAUvD,EAAWsH,GACpG,IAAIjD,EACA/J,EACAy/M,EAAW7vN,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAQ,UAAYkhB,EAAMlhB,MACnFjR,EAAU+d,EAAO8Q,MAAME,SAASyF,SAAS,IAAIC,GAAWm5M,EAAW,WAAYx2M,EAASgG,KAAMhG,EAAS6M,OAAOjvB,MAAOoiB,EAAS6M,OAAOpP,MAAO9W,EAAOtR,QAASsR,EAAO+0C,UAAWj/B,IAClL7zB,EAAQwC,aAAa,aAAc2vB,EAAMpmB,EAAEG,WAAa,IAAMimB,EAAMuF,QAAQxrB,WACtE,IAAMimB,EAAMsF,QAAQvrB,WAAa,IAAMimB,EAAMkJ,cAAcnvB,WAAa,IAAMimB,EAAMiJ,cAAclvB,YACxG,IAAImH,EAAgB0K,EAAO8Q,MAAME,SAAS+9C,aACtCxqE,GAAMsrO,IAEVv6N,EAAc1S,YAAYX,GAC1B,IAAK,IAAI7E,EAAI,EAAGA,EAAIg3B,EAAMmJ,SAAS7/B,OAAQN,IACvC+8B,EAAWgC,GAAU/H,EAAMvB,OAASuK,EAAShJ,EAAMmJ,SAASngC,GAAI4iB,EAAOjH,MAAOiH,EAAOnH,MAAOmH,EAAO8Q,MAAMsG,qBACzGhH,EAAO,IAAIM,GAAK1Q,EAAOknN,OAAOjwN,MAAO+I,EAAOknN,OAAOlwN,QACnDod,EAAMs0M,gBAAgBjjO,KAAK00B,GAC3Bl5B,KAAKwmV,cAAcznU,EAAQoU,GACvBpmB,EAAGmsB,EAASnsB,EAAKoiB,EAAKnZ,MAAQ,EAAIhJ,EAAGksB,EAASlsB,EAAKmiB,EAAKpZ,OAAS,EACjEC,MAAOmZ,EAAKnZ,MAAOD,OAAQoZ,EAAKpZ,SACjC,GAEPgJ,EAAO+tN,cAAcnrO,YAAY0S,IAQrC4xU,EAAoB5qV,UAAU8qV,kBAAoB,SAAU18G,EAASt2M,EAAOoL,GACxE,IAAImhS,EAASj2F,EAAQhtO,OACjBoqV,GACAriL,QAASryI,GAAIs3M,GAAWi2F,EACxBrjS,cAAe,EAAGD,cAAe,EACjC1D,QAAS,EAAGD,QAAS,EACrB0D,OAAQ,EAAGG,aAEF,cAATiC,GACAsoT,EAASxqT,cAAgBr8B,KAAK8mV,0BAA0Br9G,EAASi2F,EAAQ,KACzEmnB,EAASzqT,cAAgBp8B,KAAK8mV,0BAA0Br9G,EAASi2F,EAAQ,KACzEmnB,EAAS1qT,OAASn8B,KAAK8mV,0BAA0Br9G,EAASi2F,EAAQ,KAEpD,cAATnhS,GACLsoT,EAASxqT,cAAgBr8B,KAAK+mV,0BAA0Bt9G,EAASi2F,EAAQ,KACzEmnB,EAASzqT,cAAgBp8B,KAAK+mV,0BAA0Bt9G,EAASi2F,EAAQ,KACzEmnB,EAAS1qT,OAASn8B,KAAK+mV,0BAA0Bt9G,EAASi2F,EAAQ,MAGlEmnB,EAAS1qT,OAAS+B,GAAUurM,GAC5BzpO,KAAKgnV,kBAAkBv9G,EAASi2F,EAAQmnB,IAE5C7mV,KAAKinV,iBAAiBx9G,EAASi2F,EAAQmnB,GACvC1zT,EAAMsF,QAAUouT,EAASpuT,QACzBtF,EAAMuF,QAAUmuT,EAASnuT,QACzBvF,EAAMkJ,cAAgBwqT,EAASxqT,cAC/BlJ,EAAMiJ,cAAgByqT,EAASzqT,cAC/BjJ,EAAMgJ,OAAS0qT,EAAS1qT,OACxBhJ,EAAMmJ,SAAWuqT,EAASvqT,SAC1BnJ,EAAMqxI,QAAUqiL,EAASriL,SAQ7ByhL,EAAoB5qV,UAAUyrV,0BAA4B,SAAUr9G,EAASxqN,EAAOioU,GAChF,GAAc,IAAVjoU,EACA,OAAO,EAEN,GAAc,IAAVA,EACL,OAAOwqN,EAAQ,GAEnB,IACIimB,EAAOw3F,GAAcjoU,EAAQ,GAC7BkoU,EAAc96U,KAAKkT,MAAMlT,KAAKE,IAAImjP,IAClC03F,EAAe13F,EAAOy3F,EAU1B,OAToB,IAAhBA,EACQ19G,EAAQ,GAEX09G,EAAcloU,EAAQ,EACnBwqN,EAAQxqN,EAAQ,GAGhBmoU,GAAgB39G,EAAQ09G,GAAe19G,EAAQ09G,EAAc,IAAM19G,EAAQ09G,EAAc,IAUzGlB,EAAoB5qV,UAAU0rV,0BAA4B,SAAUt9G,EAASxqN,EAAOioU,GAChF,GAAc,IAAVjoU,EACA,OAAO,EAEN,GAAc,IAAVA,EACL,OAAOwqN,EAAQ,GAEnB,IACIimB,EAAOw3F,GAAcjoU,EAAQ,GAC7BkoU,EAAc96U,KAAKkT,MAAMlT,KAAKE,IAAImjP,IAGtC,OAFmBA,EAAOy3F,IACF19G,EAAQ09G,EAAc,GAAK19G,EAAQ09G,IAAgB19G,EAAQ09G,IAUvFlB,EAAoB5qV,UAAU2rV,kBAAoB,SAAUv9G,EAASxqN,EAAO4nU,GACxE,GAAc,IAAV5nU,EAGA,OAFA4nU,EAASxqT,cAAgBotM,EAAQ,GACjCo9G,EAASzqT,cAAgBqtM,EAAQ,GAC1B,KAEX,IAAI49G,EAAapoU,EAAQ,GAAM,EAC3BqoU,EAAaroU,EAAQ,EACrBsoU,EAAqB99G,EAAQpoO,MAAM,EAAGimV,GACtCE,EAAqB/9G,EAAQpoO,MAAMgmV,EAAaC,EAAaA,EAAa,EAAGroU,GACjF4nU,EAASxqT,cAAgB6B,GAAUqpT,GACnCV,EAASzqT,cAAgB8B,GAAUspT,IAWvCvB,EAAoB5qV,UAAU4rV,iBAAmB,SAAUx9G,EAASxqN,EAAO4nU,GAGvE,IAAK,IADDY,EAAW,KADKZ,EAASzqT,cAAgByqT,EAASxqT,eAE7ClgC,EAAI,EAAGA,EAAI8iB,EAAO9iB,IAAK,CAC5B,KAAIstO,EAAQttO,GAAK0qV,EAASxqT,cAAgBorT,GAGrC,CACDZ,EAASpuT,QAAUgxM,EAAQttO,GAC3B,MAJA0qV,EAASvqT,SAAS93B,KAAKilO,EAAQttO,IAOvC,IAASA,EAAI8iB,EAAQ,EAAG9iB,GAAK,EAAGA,IAAK,CACjC,KAAIstO,EAAQttO,GAAK0qV,EAASzqT,cAAgBqrT,GAGrC,CACDZ,EAASnuT,QAAU+wM,EAAQttO,GAC3B,MAJA0qV,EAASvqT,SAAS93B,KAAKilO,EAAQttO,MAa3C8pV,EAAoB5qV,UAAU+xO,YAAc,SAAUruN,GAClD/e,KAAK+3B,QAAQhZ,IAKjBknU,EAAoB5qV,UAAU0kC,cAAgB,WAC1C,MAAO,uBAUXkmT,EAAoB5qV,UAAUiX,QAAU,SAAUud,KAK3Co2T,GACT5xB,IC1UExoO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCw7P,GAAwC,SAAUh7P,GAElD,SAASg7P,IACL,OAAkB,OAAXh7P,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAyF/D,OA3FA6rF,GAAU67P,EAAwBh7P,GASlCg7P,EAAuBrsV,UAAUsyG,OAAS,SAAU5uF,EAAQjH,EAAOF,EAAO6b,GACtE,IACIy/R,EAKAy0B,EACA96N,EAEA+6N,EATA7nV,EAAQC,KAERw9C,EAAa,KACb3oB,EAAY,GACZ2mQ,EAASnvR,KAAKC,IAAIyS,EAAOnH,MAAMoa,aAAa7R,IAAK,GACjDnN,KAKAy2B,EAAWzpC,KAAKg2T,aAAaj3S,EAAQA,EAAO0qB,UAChD1qB,EAAOkY,OAAOC,IAAI,SAAU/D,EAAOh3B,EAAGo2T,GAClCp/R,EAAMs0M,mBACNt0M,EAAM2zM,WACN8gH,GAAW,EACPz0T,EAAM2D,SAAWvF,GAAYghS,EAAap2T,EAAI,GAAIg3B,EAAOo/R,EAAap2T,EAAI,GAAI4iB,KAC9E8V,GAAa90B,EAAM41T,qBAAqBxiS,EAAMvB,OAAQ4pQ,EAAQz8Q,EAAQ0U,EAAYyH,GAAUsiB,EAAY,KACxGA,EAAaA,GAAc,IAAIvqB,GAAcE,EAAMvB,OAAQ4pQ,GAC3D03B,EAAah4R,GAAS/H,EAAMvB,OAAQuB,EAAM4G,OAAQjiB,EAAOF,EAAO6b,GAC5Do5F,GAAY9sH,EAAM0tO,cAAct6M,EAAO05F,EAAU9tG,EAA+B,MAAvBA,EAAOm3S,YAAqBzsR,IACrFm+S,GAAW,EACXD,EAAczsT,GAASsiB,EAAWzwC,EAAGyuR,EAAQ1jR,EAAOF,EAAO6b,GAC3DoB,GAAc,KAAaq+R,EAAY,EAAI,IAAOA,EAAY,EAAI,IAClEr+R,GAAc,KAAaq+R,EAAY,EAAI,IAAOy0B,EAAa,EAAI,IACnE5nV,EAAM8nV,mBAAmB70U,EAAS+L,EAAQ8tG,EAAUh4F,EAAW,UAAYg4F,EAAS56G,OACpF4iB,EAAY,KAAaq+R,EAAY,EAAI,IAAOy0B,EAAa,EAAI,MAC5Dz0B,EAAY,EAAI,IAAOA,EAAY,EAAI,MAG5Cr+R,GAAc,KAAaq+R,EAAY,EAAI,IAAOA,EAAY,EAAI,IAClEnzT,EAAM0tO,cAAct6M,EAAO,KAAMpU,EAA+B,MAAvBA,EAAOm3S,YAAqBzsR,IAErE8oR,EAAap2T,EAAI,KAAOo2T,EAAap2T,EAAI,GAAG26B,SAA8C,SAAnC/X,EAAOuqN,mBAAmB/qM,OACjF1J,GAAa90B,EAAM81T,uBAAwB9oT,EAAKomB,EAAMvB,OAAQ5kB,EAAKwuR,GAAUh+O,EAAYz+B,EAAQ0U,EAAYyH,IAC7GsiB,EAAa,MAEjBqvE,EAAW15F,EACXpzB,EAAMyzT,mBAAmBrgS,EAAOpU,EAAQ0U,EAAYyH,OAGvD0sT,IACD/yT,EAAY9V,EAAOkY,OAAOx6B,OAAS,EAC9Bo4B,EAAY70B,KAAK21T,qBAAqB9oM,EAASj7F,OAAQ4pQ,EAAQz8Q,EAAQ0U,EAAYyH,GAAU,KAAM,KAAQ,GAChHl7B,KAAK6nV,mBAAmB70U,EAAS+L,EAAQ8tG,EAAUh4F,EAAW,KAElE70B,KAAKo2T,iBAAiBr3S,EAAQ/L,EAASy2B,GACvCzpC,KAAK+uO,aAAahwN,IAKtB2oU,EAAuBrsV,UAAUwsV,mBAAqB,SAAU70U,EAAS+L,EAAQoU,EAAO0B,EAAWvxB,GAC/F0P,EAAQxO,KAAK,IAAIixB,GAAW1W,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAQ3O,EAAIyb,EAAO0uN,cAAct6M,EAAOpU,EAAO8qD,UAAW9qD,EAAOkmB,OAAOjvB,MAAO+I,EAAOkmB,OAAOpP,MAAO9W,EAAOtR,QAASsR,EAAO+0C,UAAWj/B,KAOpN6yT,EAAuBrsV,UAAUiX,QAAU,SAAUud,KAQrD63T,EAAuBrsV,UAAU0kC,cAAgB,WAI7C,MAAO,0BAOX2nT,EAAuBrsV,UAAU+xO,YAAc,SAAUruN,GACrD/e,KAAKyzT,kBAAkB10S,EAAQA,EAAO6vB,YAEnC84S,GACThyB,IC5GE7pO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexC47P,GAAwC,SAAUp7P,GAElD,SAASo7P,IACL,OAAkB,OAAXp7P,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA0E/D,OA5EA6rF,GAAUi8P,EAAwBp7P,GASlCo7P,EAAuBzsV,UAAUsyG,OAAS,SAAU5uF,EAAQjH,EAAOF,EAAO6b,GAOtE,IAAK,IANDo5F,EAAW,KACXrvE,EAAa,IACb02Q,EAAgBl0T,KAAKmyT,wBAAwBpzS,GAC7C/L,KACA6hB,EAAY,GACZ4U,EAAWzpC,KAAKg2T,aAAaj3S,EAAQA,EAAO0qB,UACvCrrC,EAAK,EAAG+1T,EAAkBD,EAAe91T,EAAK+1T,EAAgB13T,OAAQ2B,IAAM,CACjF,IAAI+0B,EAAQghS,EAAgB/1T,GAC5B+0B,EAAM2zM,WACF3zM,EAAM2D,SAAWvF,GAAY2iS,EAAc/gS,EAAMlhB,MAAQ,GAAIkhB,EAAO+gS,EAAc/gS,EAAMlhB,MAAQ,GAAI8M,IACpG8V,GAAa70B,KAAKizT,iBAAiBpmM,EAAU15F,EAAOpU,EAAQ0U,EAAYyH,GAAUsiB,GAClE,MAAZqvE,EACI7sH,KAAKytO,cAAct6M,EAAO05F,EAAU9tG,EAA+B,MAAvBA,EAAOm3S,YAAqBzsR,IACxEz2B,EAAQxO,KAAK,IAAIixB,GAAW1W,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAQ,UAAY46G,EAAS56G,MAAO,OAAQ8M,EAAO/I,MAAO+I,EAAO0uN,cAAc5gH,EAAU9tG,EAAO8qD,UAAW9qD,EAAOtR,QAASsR,EAAO+0C,UAAWj/B,IACvN2oB,EAAa,IACb3oB,EAAY,IAGZ2oB,EAAa,IAIjBx9C,KAAKytO,cAAct6M,EAAO,KAAMpU,EAA+B,MAAvBA,EAAOm3S,YAAqBzsR,GAExEojF,EAAW15F,EACXnzB,KAAKwzT,mBAAmBrgS,EAAOpU,EAAQ0U,EAAYyH,MAGnD2xF,EAA+C,SAAnC9tG,EAAOuqN,mBAAmB/qM,KAAmBsuF,EAAW,KACpErvE,EAAiD,SAAnCz+B,EAAOuqN,mBAAmB/qM,KAAmBif,EAAa,IACxErqB,EAAMs0M,oBAGI,KAAd5yM,GACA7hB,EAAQxO,KAAK,IAAIixB,GAAW1W,EAAO8Q,MAAM7uB,QAAQsC,GAAK,WAAayb,EAAO9M,MAAO,OAAQ8M,EAAO/I,MAAO+I,EAAO0uN,cAAcymF,EAAcA,EAAcz3T,OAAS,GAAIsiB,EAAO8qD,UAAW9qD,EAAOtR,QAASsR,EAAO+0C,UAAWj/B,IAE7N70B,KAAKo2T,iBAAiBr3S,EAAQ/L,EAASy2B,GACvCzpC,KAAK+uO,aAAahwN,IAOtB+oU,EAAuBzsV,UAAU+xO,YAAc,SAAUruN,GACrD/e,KAAKyzT,kBAAkB10S,EAAQA,EAAO6vB,YAK1Ck5S,EAAuBzsV,UAAU0kC,cAAgB,WAI7C,MAAO,0BAOX+nT,EAAuBzsV,UAAUiX,QAAU,SAAUud,KAK9Ci4T,GACTpyB,ICtFEqyB,GAAiC,WAKjC,SAASA,EAAgBl4T,GAErB7vB,KAAKgoV,mBAELhoV,KAAKioV,yBAELjoV,KAAKkoV,mBAELloV,KAAKmoV,yBACLnoV,KAAK6vB,MAAQA,EA+ajB,OAzaAk4T,EAAgB1sV,UAAUwgO,0BAA4B,SAAU1lN,GAC5D,IAKIkqB,EACAtqB,EAEAomC,EARAn/C,EAAQ,EACRorV,KACAC,KACA1zT,EAAkC,aAArBxe,EAAKyiB,YAClB0vT,EAAY3zT,EAAaxe,EAAKuc,KAAK3c,OAASI,EAAKuc,KAAK1c,MAK1DG,EAAKylN,iBAAiB1kM,IAAI,SAAUqxT,EAAYt2U,GAC5Cs2U,EAAWz8B,WAAW50R,IAAI,SAAUsxT,GACL,KAAvBA,EAAc15T,MAAuC,OAAxB05T,EAAcjrV,OAAwC,OAAtBirV,EAAcxpU,MAC3EqhB,EAAYxR,GAAY25T,EAAc15T,KAAMy5T,EAAW31G,WACvD78N,EAAS4e,EAAa0L,EAAUrqB,MAAQqqB,EAAUtqB,OAClDA,GAAU,EAAIwyU,EAAWtjT,OAAOjvB,OACA,eAA3BuyU,EAAWtjT,OAAOv+B,KARrB,GAQuD,GACzDy1C,EAA0C,OAAnCqsS,EAAcC,iBAA6BD,EAAcC,iBAC3Dn1T,GAAgD,iBAAtBk1T,EAAcxpU,IAAmB4X,OAAO,IAAIxW,KAAKooU,EAAcxpU,MACtFwpU,EAAcxpU,IAAK7I,GAAQmyU,EAC1Bh1T,GAAkD,iBAAxBk1T,EAAcjrV,MAAqBq5B,OAAO,IAAIxW,KAAKooU,EAAcjrV,QACxFirV,EAAcjrV,MAAO4Y,GAAQmyU,EACpCjoT,EAAUrqB,MAAQmmC,EAdrB,IAcuCA,EAAM,GAA8B,SAAxBosS,EAAW1uU,WAAyB8a,IACrF5e,GAAoB8qB,GAAS2nT,EAAc15T,KAAMqtB,EAfnD,GAekEosS,EAAW31G,WAAiB,QAEhGw1G,EAAuBn2U,GAAUm2U,EAAuBn2U,GAClDm2U,EAAuBn2U,GAAS8D,EAAUA,EAASqyU,EAAuBn2U,GADf8D,KAIzEsyU,EAAWp2U,GAASjV,EACpBA,GAASorV,EAAuBn2U,GAAUm2U,EAAuBn2U,GAtBvD,GAsB2E,IAEzFkE,EAAKokN,sBAAwBv9N,GAAyB,KAAfmZ,EAAKuqB,OAAiB1gC,KAAK6vB,MAAMq2R,cAAgBlmT,KAAK6vB,MAAMogN,eAAen5M,QAC5G0jC,EAAc,GAChB7lC,GACA30B,KAAKmoV,sBAAwBC,EAC7BpoV,KAAKkoV,gBAAkBG,IAGvBroV,KAAKioV,sBAAwBG,EAC7BpoV,KAAKgoV,gBAAkBK,IAQ/BN,EAAgB1sV,UAAUkqO,4BAA8B,SAAUpvN,EAAMlE,EAAO3R,EAAQ+kO,GACnF,IACIt4N,EACAC,EAEAqyB,EAGA8kM,EAGA5mO,EACAyhB,EACAqhB,EACAswS,EAEAx0R,EACAtoC,EAEAukB,EACAlR,EAnBAnnB,EAAQC,KAKRs/B,GAAUnpB,EAAKkrG,gBAAkBlrG,EAAKukN,aAAevkN,EAAKykN,eAAe7kN,OAAS,GACjFI,EAAK4kN,aAAmB,OAHf,GAMV2tH,EAAW,GAKXC,EAAmC,YAAvBxyU,EAAKkrG,cAGjB9tF,EAAapd,EAAKod,WAGlBuB,EAAkB3e,EAAK2e,gBACvBG,EAAkB0zT,GAAalrV,EAAkB0Y,EAAK+pN,WAAa/pN,EAAK8e,gBAAkB,EAC9FA,GAAqCH,GAAmB,EAAI,EAC5D67S,EAAU77S,IAAoB6zT,IAAgB7zT,GAAmB6zT,EAC5DtjH,EAASr4N,EAAIsyB,EAASnpB,EAAKykN,eAAe5kN,MAAUqvN,EAASr4N,EAAIsyB,EAASnpB,EAAKokN,sBACpFv6N,KAAKs2T,eAAejxF,EAASt4N,EAAIoJ,EAAKykN,eAAe5kN,MAAO26T,EAAQ17S,EAAiB9e,EAAKokN,sBAtB5E,GAsB6G8K,EAASrvN,MAAQ,EAAIG,EAAKykN,eAAe5kN,MAAOhW,KAAK6vB,MAAM7uB,QAAQsC,GAAK,mBAAqB2O,EAAOjS,KAAK6vB,MAAM7uB,QAAQsC,GAAK,uBAAyB2O,GAChRkE,EAAKylN,iBAAiB1kM,IAAI,SAAUqxT,EAAYxmL,GAC5C2mL,EAAW,GACXH,EAAWz8B,WAAW50R,IAAI,SAAUsxT,EAAersV,GAI/C,GAHA+qB,EAAennB,EAAM8vB,MAAME,SAAS+9C,aAAcxqE,GAAIvD,EAAM8vB,MAAM7uB,QAAQsC,GAAK2O,EAAQ,mBAAqB8vJ,IAC5GxkK,EAAuC,iBAAxBirV,EAAcjrV,MAAqBq5B,OAAO,IAAIxW,KAAKooU,EAAcjrV,QAAUirV,EAAcjrV,MACxGyhB,EAAmC,iBAAtBwpU,EAAcxpU,IAAmB4X,OAAO,IAAIxW,KAAKooU,EAAcxpU,MAAQwpU,EAAcxpU,KAC5FzhB,GAAS4Y,EAAK6b,aAAa7R,KAAO5iB,GAAS4Y,EAAK6b,aAAa1lB,KAC3D0S,GAAO7I,EAAK6b,aAAa7R,KAAOnB,GAAO7I,EAAK6b,aAAa1lB,QAC7D8rB,EAAWr4B,EAAM6oV,wBAAwBzyU,EAAMqyU,EAAc15T,KAAM3Y,EAAKylN,iBAAiB75D,GAAO6wE,UAAWz8N,EAAKylN,iBAAiB75D,GAAO/5G,YAC1H3vB,OAAQ,CAClBgH,EAAS/L,GAAmB/1B,EAAO4Y,GAAQkvN,EAASrvN,MACpDmuN,EAAO7wM,GAAmBtU,EAAK7I,GAAQkvN,EAASrvN,MAChDmuN,EAAO5wM,GAAc8L,EAAQA,EAAS8kM,GAAM,GAAKA,EACjD9jM,EAAYxR,GAAYuJ,EAAStJ,KAAMsJ,EAASw6M,WAChDz2L,GAA2C,OAAnCqsS,EAAcC,iBAA6BtkH,EAAO9kM,EAASmpT,EAAcC,kBArCnF,GAsCE17U,EAAIsyB,EAASgmM,EAASt4N,EAtCxB,GAuCEC,GAAO8nB,IAAoB6zT,IAAgB7zT,GAAmB6zT,EAAerpT,EAAS+lM,EAASr4N,EAC3FqzB,EAAUtqB,OAAS,EAxCzB,GAwCuChW,EAAMioV,gBAAgBjmL,GAAWsjE,EAASr4N,EAAIsyB,EAASe,EAAUtqB,OAAS,EAC3GhW,EAAMkoV,sBAAsBlmL,GAAShiK,EAAMioV,gBAAgBjmL,IAAW9sI,EAC/C,WAAvBmD,EAAS4vB,WACTj7C,IAAMo3N,EAAO9kM,EA3CnB,IA2CuC,EACjCxrB,EAAS,UAEmB,QAAvBukB,EAAS4vB,WACdj7C,EAAIA,GAAKo3N,EAAO9kM,EA/CtB,IA+C0CkpT,EAAWtjT,OAAOjvB,MAAQ,EAC9DnC,EAAS,QAGTA,EAAS,QACT9G,GAAKw7U,EAAWtjT,OAAOjvB,MAAQ,GAEnChJ,EAA+B,eAA3Bu7U,EAAWtjT,OAAOv+B,MACdouB,GAAmB6zT,GAAe7zT,IAAoB6zT,EAAc37U,EAvD9E,GAuD4FA,EAAIwtD,EAAextD,EAC7G,IAAIgG,EAAU,IAAI4iB,GAAW71B,EAAM8vB,MAAM7uB,QAAQsC,GAAK2O,EAAQ,+BAAiC8vJ,EAAQ,SAAW5lK,EAAG4Q,EAAGC,EAAG6G,EAAQukB,EAAStJ,MAChH,SAAxBy5T,EAAW1uU,WACX7G,EAAQ8b,KAAgC,SAAxBy5T,EAAW1uU,SACvBgnB,GAASzI,EAAStJ,KAAMqtB,EAAK/jB,EAASw6M,WAAaj0M,GAASwd,EAAK/jB,EAAStJ,KAAMsJ,EAASw6M,WAC7F5/N,EAAQjG,EAAIiG,EAAQjG,EAAIytD,GAE5B7kC,GAAY3iB,EAASolB,EAASw6M,UAAWx6M,EAASw6M,UAAU/8M,OAAS91B,EAAM8vB,MAAM6F,WAAW7I,UAAW3F,GACnGqhU,EAAWtjT,OAAOjvB,MAAQ,GAAgC,kBAA3BuyU,EAAWtjT,OAAOv+B,OACjDgiV,EAAW3oV,EAAM8oV,uBAAuB9mL,EAAOoiE,EAAO9kM,EAhE5D,GAgE8ElpB,EAAMkpB,EAAQC,EAAQe,EAAWrtB,EAASqyN,EAAUjtM,EAAS4vB,UAAW0gS,EAAUC,EAAW7zT,IAEzK/0B,EAAM+oV,cAAcnnV,YAAYulB,MAI3B,KAAbwhU,GACA3oV,EAAMgpV,oBAAoBhnL,EAAO9vJ,EAAOkE,EAAMuyU,KAGtDpoV,EAAOqB,YAAY3B,KAAK8oV,gBAO5Bf,EAAgB1sV,UAAUwtV,uBAAyB,SAAUvkH,EAAYnoL,EAAKhmC,EAAMkpB,EAAQC,EAAQe,EAAWuE,EAAaygM,EAAUr9K,EAAW9qC,EAAMyrU,EAAW7zT,GAC9J,IACIk0T,EACAC,EACAjsV,EACAksV,EAJA1uR,EAAU,GAKV2uR,EAAahzU,EAAKylN,iBAAiB0I,GACnCtuN,EAAQmmC,EAAMqe,EACdzkD,EAAS/V,KAAKioV,sBAAsB3jH,GAAc9pK,EAClDvlC,EAAyC,YAAvB9e,EAAKkrG,cAA8BlrG,EAAK8e,gBAAkB,EAC5EloB,EAAIsyB,EAASgmM,EAASt4N,EACtBC,GAAO8nB,GAAmB6zT,GAAe7zT,IAAoB6zT,EAAerpT,EAAS+lM,EAASr4N,EAC9FhN,KAAKgoV,gBAAgB1jH,GAAcrvM,EAAoBowM,EAASr4N,EAAIsyB,EACpEt/B,KAAKgoV,gBAAgB1jH,GAAcrvM,EACvC,OAAQk0T,EAAWlkT,OAAOv+B,MACtB,IAAK,4BACL,IAAK,YACL,IAAK,mBAEDwW,GAAQ,IAAMnQ,EAAI,IAAMC,EAAI,IAAMD,EAAI,KAAOC,GAD7C+I,GAAY+e,GAAmB6zT,GAAe7zT,IAAoB6zT,EAAc5yU,GAAUA,IAEtF,KAAOhJ,EAAIiJ,GAAS,IAAMhJ,EAAI,KAAOD,EAAIiJ,GAAS,KAAOhJ,EAAI+I,GACjEmH,GAAoC,8BAA3BisU,EAAWlkT,OAAOv+B,KAAyC,OAAkB,KAAOsG,EAAI+I,GAAU,IAAO,IAClHmH,GAAmC,cAA3BisU,EAAWlkT,OAAOv+B,KAAwB,IAAMqG,EAAI,IAAMC,EAAI,KAAOD,EAAIiJ,GAAS,IAAMhJ,EAAK,IACrG,MACJ,IAAK,QACiB,SAAdg7C,GACAhrD,EAAQ4nC,EAAY73B,EACpBm8U,EAAStkT,EAAY73B,EAAIszB,EAAUrqB,MAAQ,GAExB,WAAdgyC,GACLhrD,EAAQ4nC,EAAY73B,EAAIszB,EAAUrqB,MAAQ,EAAI,EAC9CkzU,EAAStkT,EAAY73B,EAAIszB,EAAUrqB,MAAQ,EAAI,IAG/ChZ,EAAQ4nC,EAAY73B,EAAIszB,EAAUrqB,MAAQ,EAC1CkzU,EAAStkT,EAAY73B,GAGzBmQ,GAAQ,IAAMnQ,EAAI,IAAMC,EAAI,IAAMD,EAAI,KAAOC,GAD7C+I,GAAY+e,GAAmB6zT,GAAe7zT,IAAoB6zT,EAAc5yU,GAAUA,GAChC,GACtD,IAAMhJ,EAAI,KAAOC,EAAI+I,EAAS,GAAK,KAAO/Y,EAAQ,GAAK,KAAOgQ,EAAI+I,EAAS,GAC3E,MAAiB,KAAO/I,EAAI+I,EAAS,GAAK,KAAOhJ,EAAIiJ,GAAS,KAAOhJ,EAAI+I,EAAS,GAClF,KAAOhJ,EAAIiJ,GAAS,KAAOhJ,EAAI+I,EAAS,GAAK,KAAOhJ,EAAIiJ,GAAS,MACrE,MACJ,IAAK,cACK8e,GAAmB6zT,GAAe7zT,IAAoB6zT,GACxDnuR,EAAU,GACVwuR,EAAW,GACXC,EAAW,IAGXzuR,GAAW,GACXwuR,GAAY,GACZC,GAAY,GAGZ/rU,GADc,WAAd8qC,EACQ,IAAMj7C,EAAI,IAAMC,EAAI,MAAQD,EAAI,IAAMC,EAAI,KAAOD,EAAI,GAAK,KAAOC,EAAIwtD,GAAW,KAAOztD,EAAI,IAAM,KACpGC,EAAIwtD,GAAW,KAAOztD,EAAIiJ,EAAQ,EAAI,GAAK,KAAOhJ,EAAIwtD,GAAW,KAAOztD,EAAIiJ,EAAQ,GAAK,KAAOhJ,EAAIg8U,GACrG,KAAOj8U,EAAIiJ,EAAQ,EAAI,GAAK,KAAOhJ,EAAIwtD,GAAW,KAAOztD,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIwtD,GAAW,OAChGztD,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIwtD,GAAW,KAAOztD,EAAIiJ,GAAS,KAAOhJ,EAAIi8U,GAAY,KAAOl8U,EAAIiJ,GAAS,MAEzF,SAAdgyC,EACG,IAAMj7C,EAAI,IAAMC,EAAI,MAAQD,EAAI,IAAMC,EAAI,KAAOD,EAAI,GAAK,KAAOC,EAAIwtD,GAAW,KAAOztD,EAAI,IAAM,KACpGC,EAAIwtD,GAAW,KAAOztD,EAAI,IAAM,KAAOC,EAAIg8U,GAAY,KAAOj8U,EAAI,IAAM,KAAOC,EAAIwtD,GAAW,KAC9FztD,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIwtD,GAAW,OAASztD,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIwtD,GAAW,KAAOztD,EAAIiJ,GAAS,KAC3GhJ,EAAIi8U,GAAY,KAAOl8U,EAAIiJ,GAAS,MAGnC,IAAMjJ,EAAI,IAAMC,EAAI,MAAQD,EAAI,IAAMC,EAAI,KAAOD,EAAI,GAAK,KAAOC,EAAIwtD,GAAW,KAAOztD,EAAI,IAAM,KACpGC,EAAIwtD,GAAW,KAAOztD,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIwtD,GAAW,KAAOztD,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIg8U,GACnG,KAAOj8U,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIwtD,GAAW,KAAOztD,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIwtD,GAAW,OAC3FztD,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIwtD,GAAW,KAAOztD,EAAIiJ,GAAS,KAAOhJ,EAAIi8U,GAAY,KAAOl8U,EAAIiJ,GAAS,MAI1H,OAAOkH,GAOX6qU,EAAgB1sV,UAAUgpO,4BAA8B,SAAUluN,EAAMlE,EAAO3R,EAAQoyB,GACnF,IACI2N,EACAqwS,EAEA3jU,EACAC,EAIAsyB,EAEApY,EACA+8M,EACA7rM,EAEA76B,EACAyhB,EACAm9B,EAjBAp8C,EAAQC,KAGR2oV,EAAmC,YAAvBxyU,EAAKkrG,cAIjBhiF,GAAUlpB,EAAKukN,eAAiBvkN,EAAKkrG,cAAgBlrG,EAAKykN,eAAe7kN,OAAS,GACjFI,EAAK4kN,aAAkB,MAFd,GAIV79M,EAAO,GAIPqW,EAAapd,EAAKod,WAKlBuB,EAAkB3e,EAAK2e,gBACvBG,EAAkB0zT,GAAalrV,EAAkB0Y,EAAK+pN,WAAa/pN,EAAK8e,gBAAkB,EAC9FA,GAAqCH,EAAkB,GAAK,EAC5D47S,EAAU57S,IAAoB6zT,IAAgB7zT,GAAmB6zT,EAC5Dj2T,EAAK3lB,EAAIoJ,EAAKokN,sBAAwBl7L,EAjB7B,GAiBkD3M,EAAK3lB,EAAIsyB,EACzEr/B,KAAKs2T,eAAeoa,EAAQz7S,EAAiBvC,EAAK1lB,EAAImJ,EAAKykN,eAAe5kN,MAAO0c,EAAK3c,OAAS,EAAII,EAAKykN,eAAe5kN,MAAOG,EAAKokN,sBAlBrH,GAkBsJv6N,KAAK6vB,MAAM7uB,QAAQsC,GAAK,mBAAqB2O,EAAOjS,KAAK6vB,MAAM7uB,QAAQsC,GACrO,uBAAyB2O,GAC/BkE,EAAKylN,iBAAiB1kM,IAAI,SAAUqxT,EAAYxmL,GAC5C7kJ,EAAO,GACPqrU,EAAWz8B,WAAW50R,IAAI,SAAUsxT,EAAersV,GAI/C,GAHA+qB,EAAennB,EAAM8vB,MAAME,SAAS+9C,aAAcxqE,GAAIvD,EAAM8vB,MAAM7uB,QAAQsC,GAAK2O,EAAQ,mBAAqB8vJ,IAC5G/iJ,EAAmC,iBAAtBwpU,EAAcxpU,IAAmB4X,OAAO,IAAIxW,KAAKooU,EAAcxpU,MAAQwpU,EAAcxpU,MAClGzhB,EAAuC,iBAAxBirV,EAAcjrV,MAAqBq5B,OAAO,IAAIxW,KAAKooU,EAAcjrV,QAAUirV,EAAcjrV,QACzF4Y,EAAK6b,aAAa7R,KAAO5iB,GAAS4Y,EAAK6b,aAAa1lB,KAC3D0S,GAAO7I,EAAK6b,aAAa7R,KAAOnB,GAAO7I,EAAK6b,aAAa1lB,OAC7DgzB,EAAShM,KAA4Bnd,GAASuc,EAAW,OACzDuxM,EAAO3wM,KAA0Bnd,GAASuc,EAAW,OACrDuxM,EAAO1wM,GAAc+L,EAAQA,EAAS2kM,GAAM,GAAKA,IACjD7rM,EAAWr4B,EAAM6oV,wBAAwBzyU,EAAMqyU,EAAc15T,KAAMy5T,EAAW31G,UAAW21G,EAAWvgS,YACtF3vB,QAAQ,CAClBgI,EAAYxR,GAAYuJ,EAAStJ,KAAMsJ,EAASw6M,WAChDz2L,EAAM8nL,EAAO3kM,EACbvyB,EAAI2lB,EAAK3lB,EAAIsyB,EAASt/B,EAAMmoV,gBAAgBnmL,GACvChiK,EAAMooV,sBAAsBpmL,GAAS,EAAKvnG,EAC/CxtD,EAAI0lB,EAAK3c,OAAS2c,EAAK1lB,EAAIsyB,EAAU6c,EAAM,EAEvCpvC,EADA+nB,EACI6zT,EAAYj2T,EAAK3lB,EAAIsyB,EAASm7B,EAAez6D,EAAMooV,sBAAsBpmL,GAAS,EAClFhiK,EAAMmoV,gBAAgBnmL,GAAS9sI,EAAkBvC,EAAK3lB,EAAIsyB,EAAUt/B,EAAMooV,sBAAsBpmL,GAAS,EACzGhiK,EAAMmoV,gBAAgBnmL,GAASvnG,EAG/BmuR,EAAY57U,EAAIkoB,EAAkBvC,EAAK3lB,EAAIsyB,EAASm7B,EAAez6D,EAAMooV,sBAAsBpmL,GAAS,EACxGhiK,EAAMmoV,gBAAgBnmL,GAEH,WAAvB3pI,EAAS4vB,UACTh7C,GAAKqzB,EAAUtqB,OAAS,EAEI,QAAvBqiB,EAAS4vB,UACdh7C,GAAKmvC,EAAM,EAAI9b,EAAUtqB,OAAS,EAGlC/I,EAAIA,EAAImvC,EAAM,EAAI9b,EAAUtqB,OAEhChJ,EAA+B,eAA3Bw7U,EAAWtjT,OAAOv+B,MAA4BouB,GAAmB6zT,GAChE7zT,IAAoB6zT,EAAc57U,EAzDzC,GAyDuDA,EAzDvD,GAyDsEA,EACpE,IAAIiG,EAAU,IAAI4iB,GAAW71B,EAAM8vB,MAAM7uB,QAAQsC,GAAK2O,EAAQ,+BAAiC8vJ,EAAQ,SAAW5lK,EAAG4Q,EAAGC,EA9C3H,SA8CsIorB,EAAStJ,MAC5I9b,EAAQ8b,KAAgC,SAAxBy5T,EAAW1uU,SACvB8kB,GAA6C,OAAnC6pT,EAAcC,iBAA4B1oV,EAAMooV,sBAAsBpmL,GAC5EymL,EAAcC,iBAAmBrwT,EAAStJ,KAAMsJ,EAASw6M,WAAa5/N,EAAQ8b,KACtF6G,GAAY3iB,EAASolB,EAASw6M,UAAWx6M,EAASw6M,UAAU/8M,OAAS91B,EAAM8vB,MAAM6F,WAAW7I,UAAW3F,GACnGqhU,EAAWtjT,OAAOjvB,MAAQ,GAAgC,kBAA3BuyU,EAAWtjT,OAAOv+B,OACjDwW,EAAOnd,EAAMqpV,uBAAuBrnL,EAAO5lH,EAAKhmC,EAAM8tN,EAAM5kM,EAAQC,EAAQe,EAAWrtB,EAAS0f,EAAM0F,EAAS4vB,UAAW9qC,EAAMyrU,EAAW7zT,IAE/I/0B,EAAM+oV,cAAcnnV,YAAYulB,MAI/B,KAAThK,GACAnd,EAAMgpV,oBAAoBhnL,EAAO9vJ,EAAOkE,EAAM+G,KAGtD5c,EAAOqB,YAAY3B,KAAK8oV,gBAO5Bf,EAAgB1sV,UAAU+tV,uBAAyB,SAAU9kH,EAAYnoL,EAAKhmC,EAAM8tN,EAAM5kM,EAAQC,EAAQe,EAAWuE,EAAalS,EAAMs1B,EAAW9qC,EAAMyrU,EAAW7zT,GAChK,IAEIk0T,EACAC,EAHAlzU,EAASkuN,EAAO3kM,EAChBk7B,EAAU,GAGV2uR,EAAahzU,EAAKylN,iBAAiB0I,GACnCt3N,EAAI0lB,EAAK1lB,EAAI0lB,EAAK3c,OAASkuN,EAC3BhvM,EAAkB0zT,GAAalrV,EAAkB0Y,EAAK+pN,WAAa/pN,EAAK8e,gBAAkB,EAC9FA,GAAqCH,EAAkB,GAAK,EAC5D,IAAI9e,EAAQhW,KAAKmoV,sBAAsB7jH,GAAc9pK,EACjDztD,IAAQ+nB,GAAmB6zT,GAAe7zT,IAAoB6zT,EAAcj2T,EAAK3lB,EAAIsyB,EACrFr/B,KAAKkoV,gBAAgB5jH,GAAc5xM,EAAK3lB,EAAIsyB,EAASr/B,KAAKkoV,gBAAgB5jH,IAAervM,EAC7F,OAAQk0T,EAAWlkT,OAAOv+B,MACtB,IAAK,4BACL,IAAK,YACL,IAAK,mBAEDwW,GAAQ,IAAMnQ,EAAI,IAAMC,EAAI,KAAOD,GADnCiJ,GAAW8e,GAAmB6zT,GAAe7zT,IAAoB6zT,GAAe3yU,EAAQA,IACxC,IAAMhJ,EAClD,IAAMD,EAAI,KAAOC,EAAI+I,GAAU,KAAOhJ,EAAIiJ,GAAS,KAAOhJ,EAAI+I,GAClEmH,GAAoC,8BAA3BisU,EAAWlkT,OAAOv+B,KAAyC,MAAaqG,EAAIiJ,GAAS,IAAMhJ,EAAI,IAAO,IAC/GkQ,GAAoC,cAA3BisU,EAAWlkT,OAAOv+B,KAAyB,MAAY,KAAOsG,EAAI+I,GAAU,OAAkB,IAAM/I,EAAI,IAAO,IACxH,MACJ,IAAK,QAEDkQ,GAAQ,OAAa,IAAMlQ,EAAI,OAASD,GADxCiJ,GAAW8e,GAAmB6zT,GAAe7zT,IAAoB6zT,EAAc3yU,GAASA,GACpC,GAAK,IAAMhJ,EAAI,OAASD,EAAIiJ,EAAQ,GAAK,KACxF4uB,EAAY53B,EAAIqzB,EAAUtqB,OAAS,EAAI,GAAK,OAAShJ,EAAIiJ,EAAQ,GAAK,KACtE4uB,EAAY53B,EAAIqzB,EAAUtqB,OAAS,EAAI,GACxC,OAAShJ,EAAIiJ,EAAQ,GAAK,KAAOhJ,EAAI+I,GAAU,QAAc,KAAO/I,EAAI+I,GAC5E,MACJ,IAAK,cACK+e,GAAmB6zT,GAAe7zT,IAAoB6zT,GACxDnuR,GAAW,GACXwuR,GAAY,GACZC,GAAY,IAGZzuR,EAAU,GACVwuR,EAAW,GACXC,EAAW,GAGX/rU,GADc,WAAd8qC,EACQ,KAAOj7C,EAAI,IAAMC,EAAI,MAAQD,EAAI,IAAMC,EAAI,KAAOD,EAAIytD,GAAW,IAAMxtD,EAAI,KAAOD,EAAIytD,GAAW,KAAOxtD,EAAI,IAC9G,OAASD,EAAIytD,GAAW,KAAOxtD,GAAK+I,EAAS,IAAM,GAAK,OAAShJ,EAAIi8U,GAAY,KAAOh8U,GAAK+I,EAAS,IAAM,EAAI,GAChH,OAAShJ,EAAIytD,GAAW,KAAOxtD,GAAK+I,EAAS,IAAM,EAAI,IAAM,OAAShJ,EAAIytD,GAAW,KAAOxtD,GAAK+I,EAAS,KAC5G,OAAShJ,EAAIytD,GAAW,KAAOxtD,GAAK+I,EAAS,KAAO,KAAOhJ,EAAIk8U,GAAY,KAAOj8U,EAAI+I,GAAU,IAC9FhJ,EAAI,KAAOC,EAAI+I,GAEF,QAAdiyC,EACG,KAAOj7C,EAAI,IAAMC,EAAI,MAAQD,EAAI,IAAMC,EAAI,KAAOD,EAAIytD,GAAW,IAAMxtD,EAAI,KAAOD,EAAIytD,GAAW,KAAOxtD,EAAI,IAC9G,OAASD,EAAIytD,GAAW,KAAOxtD,EAAI+I,EAAS,IAAM,QAAehJ,EAAIi8U,GAAY,KAAOh8U,GAAK+I,EAAS,KACxG,OAAShJ,EAAIytD,GAAW,KAAOxtD,GAAK+I,EAAS,KAAO,OAAShJ,EAAIytD,GAAW,KAAOxtD,GAAK+I,EAAS,KACjG,MAAQhJ,EAAIytD,GAAW,KAAOxtD,GAAK+I,EAAS,KAAO,KAAOhJ,EAAIytD,GAAW,KAAOxtD,EAAI+I,GAAU,IAAMhJ,EAAI,KACrGC,EAAI+I,GAGH,KAAOhJ,EAAI,IAAMC,EAAI,MAAQD,EAAI,IAAMC,EAAI,KAAOD,EAAIytD,GAAW,IAAMxtD,EAAI,KAAOD,EAAIytD,GAAW,KAAOxtD,EAAI,IAC9G,OAASD,EAAIi8U,GAAY,KAAOh8U,EAAI,IACtC,OAASD,EAAIytD,GAAW,KAAOxtD,EAAI,IAAM,OAASD,EAAIytD,GAAW,KAAOxtD,GAAK+I,EAAS,KACtF,MAAQhJ,EAAIytD,GAAW,KAAOxtD,GAAK+I,EAAS,KAAO,KAAOhJ,EAAIk8U,GAAY,KAAOj8U,EAAI+I,GAAU,IAAMhJ,EACrG,KAAOC,EAAI+I,GAI3B,OAAOmH,GAOX6qU,EAAgB1sV,UAAUi7T,eAAiB,SAAUvpT,EAAGC,EAAG+I,EAAQC,EAAOqzU,EAAQC,GAC9EtpV,KAAK8oV,cAAgB9oV,KAAK6vB,MAAME,SAAS+9C,aACrCxqE,GAAMgmV,EACNv8G,YAAa,QAAUs8G,EAAS,MAEpCrpV,KAAK8oV,cAAcnnV,YAAY3B,KAAK6vB,MAAME,SAASsrF,cAC/C/3G,GAAM+lV,EACNt8U,EAAKA,EACLC,EAAKA,EACLgJ,MAASA,EACTD,OAAUA,EACVqoB,KAAQ,QACR8G,eAAgB,EAAG5G,OAAU,WAQrCypT,EAAgB1sV,UAAU0tV,oBAAsB,SAAUQ,EAAaliT,EAAWlxB,EAAM+G,GACpF,IAAIsoN,EAAgBxlO,KAAK6vB,MAAME,SAASyF,SAAS,IAAIC,GAAWz1B,KAAK6vB,MAAM7uB,QAAQsC,GAAK+jC,EAAY,8BAAgCkiT,EAAa,cAAepzU,EAAKylN,iBAAiB2tH,GAAatkT,OAAOjvB,MAAOG,EAAKylN,iBAAiB2tH,GAAatkT,OAAOpP,OAAS71B,KAAK6vB,MAAM6F,WAAW3I,SAAU,EAAG,GAAI7P,IAC3SsoN,EAAchiO,aAAa,QAAS,wBACpCxD,KAAK8oV,cAAcnnV,YAAY6jO,IAOnCuiH,EAAgB1sV,UAAUutV,wBAA0B,SAAUzyU,EAAM2Y,EAAM8jN,EAAWzxM,GACjF,IAAI/I,EAMJ,OALAA,GACIC,QAAQ,EAAOtB,KAAMuhM,GAAsBniN,KAAMA,EACjD2Y,KAAMA,EAAM8jN,UAAWA,EAAW5qL,UAAW7mB,GAEjDnhC,KAAK6vB,MAAMnJ,QAAQ4xM,GAAsBlgM,GAClCA,GAMX2vT,EAAgB1sV,UAAU0kC,cAAgB,WACtC,MAAO,mBAMXgoT,EAAgB1sV,UAAUiX,QAAU,aAG7By1U,KC/aPyB,GAAgC,WAKhC,SAASA,KA8IT,OAtIAA,EAAenuV,UAAUirT,eAAiB,SAAUrvG,EAAQlnL,GACxD,IAAI05T,EAAc15T,EAAS+9C,aACvBxqE,GAAI,aAAe2zM,EAAO9gM,KAAK4gB,KAC/B1pB,UAAW,cAAgB4pM,EAAOtiL,WAAasiL,EAAOlhM,OAAS,KAC3D,eAAiBkhM,EAAOtiL,WAAa,KAAO,KAAO,MAEvD+0T,EAAgB35T,EAAS+9C,aACzBxqE,GAAI,sBAAwB2zM,EAAO9gM,KAAK4gB,OAExC4yT,EAAa55T,EAAS+9C,aACtBxqE,GAAI,mBAAqB2zM,EAAO9gM,KAAK4gB,KACrC1pB,UAAW,mBASf,OAPArN,KAAKsuB,SAAS2oL,EAAQlnL,EAAU25T,GAChC1pV,KAAKuuB,MAAM0oL,EAAQlnL,EAAU45T,GAC7B3pV,KAAK4pV,aAAa3yI,EAAQlnL,EAAU45T,GACpC3pV,KAAK6pV,OAAO5yI,EAAQlnL,EAAU45T,GAC9B3pV,KAAK8pV,UAAU7yI,EAAQlnL,EAAU45T,GACjCF,EAAY9nV,YAAY+nV,GACxBD,EAAY9nV,YAAYgoV,GACjBF,GAMXD,EAAenuV,UAAUizB,SAAW,SAAU2oL,EAAQlnL,EAAUzvB,GAC5D,IAAIoE,EAAQuyM,EAAO8yI,oBACfC,EAAcj6T,EAASuU,cAAc,IAAI04L,GAAW,qBAAuB/lB,EAAO9gM,KAAK4gB,KAAMryB,EAAM4pB,UAAYtY,MAAO,EAAG6f,MAAOnxB,EAAM4pB,UAAY,EAAG,IAAIiH,GAAK,EAAG,EAAG0hL,EAAOjhM,MAAOihM,EAAOlhM,QAAS,EAAG,IACzMzV,EAAOqB,YAAYqoV,IAMvBR,EAAenuV,UAAUwuV,OAAS,SAAU5yI,EAAQlnL,EAAUzvB,GAC1D,IAAIoE,EAAQuyM,EAAO8yI,oBACfzyP,EAAS,IAAI7hE,GAAW,uBAAyBwhL,EAAO9gM,KAAK4gB,KAAMryB,EAAM+pB,MAAO,EAAG/pB,EAAM+pB,MAAO,EAAG,GAAI,IAC3GzuB,KAAKiqV,aAAel6T,EAASyF,SAAS8hE,GACtCA,EAAOh0F,GAAK,wBAA0B2zM,EAAO9gM,KAAK4gB,KAClD/2B,KAAKkqV,cAAgBn6T,EAASyF,SAAS8hE,GACvCt3F,KAAKmqV,kBAAkBnqV,KAAKoqV,WAAYpqV,KAAKqqV,eAAgBpzI,EAAOlhM,QACpEzV,EAAOqB,YAAY3B,KAAKiqV,cACxB3pV,EAAOqB,YAAY3B,KAAKkqV,gBAQ5BV,EAAenuV,UAAU8uV,kBAAoB,SAAUC,EAAYC,EAAgBt0U,GAC/E,IACIu0U,EAAgB,MAASF,EAAaG,EAAoB,GAAK,IAAOx0U,EAAS,EAAK,OACnFq0U,EAAaG,EAAmB,GAAK,UAAyBH,EAAaG,EAAmB,GAAK,OACpGC,EAAiB,MAASJ,EAAaC,EAAiBE,EAAoB,IAAO,IAAOx0U,EAAS,EACjG,OAAcq0U,EAAaC,EAAiBE,EAAmB,GAAK,YAA2BH,EACjGC,EAAiBE,EAAmB,GAAK,SAC7CvqV,KAAKiqV,aAAazmV,aAAa,IAAK8mV,GACpCtqV,KAAKkqV,cAAc1mV,aAAa,IAAKgnV,IAQzChB,EAAenuV,UAAUkzB,MAAQ,SAAU0oL,EAAQlnL,EAAUzvB,GACzD22M,EAAO53K,OAASr/B,KAAKoqV,WACrB,IAAI1lV,EAAQuyM,EAAO8yI,oBACnB/pV,KAAKo1J,OAASrlI,EAASuU,cAAc,IAAI04L,GAAW,kBAAoB/lB,EAAO9gM,KAAK4gB,KAAMryB,EAAM6pB,OAASvY,MAAO,EAAG6f,MAAO,IAAM,EAAG,IAAIN,GAAKv1B,KAAKoqV,WAAY,EAAGpqV,KAAKqqV,eAAgBpzI,EAAOlhM,UAC5LzV,EAAOqB,YAAY3B,KAAKo1J,SAQ5Bo0L,EAAenuV,UAAUuuV,aAAe,SAAU3yI,EAAQlnL,EAAUzvB,GAChE,IAAIoE,EAAQuyM,EAAO8yI,oBACfzyP,EAAS,IAAI2lI,GAAa,wBAA0BhmB,EAAO9gM,KAAK4gB,KAAMryB,EAAM4c,QAAUtL,MAAO,EAAG6f,MAAOnxB,EAAM4c,QAAU,EAAGthB,KAAKoqV,WAAYnzI,EAAOlhM,OAAS,EAAG,GAO9J85T,EAAa9/S,EAASyqF,aAC1Bq1N,EAAW7tU,UAPW,4hBAQtB,IAAIyoV,EAAc16T,EAAS+9C,aACvBxqE,GAAI2zM,EAAO9gM,KAAK4gB,KAAO,kBAE3B0zT,EAAYzoV,UAAY,wGAClBi1M,EAAO9gM,KAAK4gB,KAAO,iHACQkgL,EAAO9gM,KAAK4gB,KAAO,WACpD/2B,KAAK0qV,cAAgB36T,EAASsU,WAAWizD,GACzCA,EAAOh0F,GAAK,yBAA2B2zM,EAAO9gM,KAAK4gB,KACnDugE,EAAO19D,GAAK55B,KAAKoqV,WAAapqV,KAAKqqV,eACnCrqV,KAAK2qV,eAAiB56T,EAASsU,WAAWizD,GAC1Ch3F,EAAOqB,YAAYkuU,GACnBvvU,EAAOqB,YAAY3B,KAAK0qV,eACxBpqV,EAAOqB,YAAY3B,KAAK2qV,gBACxBrqV,EAAOqB,YAAY8oV,IAQvBjB,EAAenuV,UAAUyuV,UAAY,SAAU7yI,EAAQlnL,EAAUzvB,GAC7D,IAAIsqV,EAAc,EACd3jR,EAAa,EAIbviE,EAAQuyM,EAAO8yI,oBACfzyP,EAAS,IAAI2lI,GAAa,yBAAgChmB,EAAO9gM,KAAK4gB,KAAMryB,EAAMgqB,MAAQ1Y,MAAO,EAAG6f,MAAOnxB,EAAMgqB,MAAQ,EAAG,EAAG,EAAG,GACtI1uB,KAAK6qV,WAAa96T,EAAS+9C,aACvBxqE,GAAI,wBAA0B2zM,EAAO9gM,KAAK4gB,KAC1C1pB,UAAW,cAAiBrN,KAAKoqV,WAAapqV,KAAKqqV,eAAiB,EAL1DS,GAKiE7zI,EAAOtiL,WAAa,GAAK,IAChG,KAAOsiL,EAAOtiL,WAAa,KAAO,KAAO,aAAesiL,EAAOtiL,WAAa,MAAQ,KAAO,MAEnG,IAAK,IAAIx4B,EAAI,EAAGA,GAAK,EAAGA,IACpBm7F,EAAOh0F,GAAK,uBAAyBnH,EAAI,IAAM86M,EAAO9gM,KAAK4gB,KAC3DugE,EAAO19D,GAAKgxT,EACZtzP,EAAOz9D,GAAKotC,EACZjnE,KAAK6qV,WAAWlpV,YAAYouB,EAASsU,WAAWizD,IAChDszP,EAAoB,IAANzuV,EAAU,EAAKyuV,EAAc,EAC3C3jR,EAAa9qE,GAAK,EAAI,EAAI,EAE9BmE,EAAOqB,YAAY3B,KAAK6qV,aAErBrB,KC/JPuB,GAA2B,WAM3B,SAASA,EAAUtoV,EAAW0T,GAC1BnW,KAAKyC,UAAYA,EACjBzC,KAAK4D,YACL5D,KAAKgrV,eAAiB,IAAIxB,GAC1BxpV,KAAKmW,KAAOA,EACZnW,KAAKirV,kBAAoBjrV,KAAKkrV,gBAAgB5vV,KAAK0E,MACnDA,KAAKmrV,gBAAkBnrV,KAAKorV,cAAc9vV,KAAK0E,MAC/CA,KAAKqrV,gBAAkB,IACvBrrV,KAAKyL,UAAYD,GAAQC,UACzBzL,KAAKs1U,YAAc9pU,GAAQqb,KAAKkQ,KAoZpC,OA9YAg0T,EAAU1vV,UAAUiwV,WAAa,SAAUzqV,GACvC,IAAIiL,EACAI,EACAk/S,EACAvqT,EAAE6F,KAAKnI,QAAQ,UAAY,GAE3BuN,GADAs/S,EAAWvqT,GACMu/D,eAAe,GAAGrK,QACnC7pD,EAAQk/S,EAAShrP,eAAe,GAAGpK,UAGnClqD,EAAQjL,EAAEk1D,QACV7pD,EAAQrL,EAAEm1D,SAEd,IAAI+S,EAAUr4C,GAAW,gBAAkB1wB,KAAKmW,KAAK4gB,MAAMnrB,wBAC3D5L,KAAKkmO,OAASp6N,EAAQO,KAAKC,IAAIy8D,EAAQv8D,KAAM,GAC7CxM,KAAKmmO,OAASj6N,EAAQG,KAAKC,IAAIy8D,EAAQr8D,IAAK,IAMhDq+U,EAAU1vV,UAAUopB,WAAa,SAAUzjB,GACvCuE,GAAanB,IAAIpD,EAASwK,GAAQigF,gBAAiBzrF,KAAKurV,gBAAiBvrV,MACzEuF,GAAanB,IAAIpD,EAASwK,GAAQkgF,eAAgB1rF,KAAKkrV,gBAAiBlrV,MACxEuF,GAAanB,IAAIpD,EAASwK,GAAQmgF,cAAe3rF,KAAKorV,cAAeprV,MACrEuF,GAAanB,IAAIpD,EAAS,aAAchB,KAAKwrV,iBAAkBxrV,MAC/DnE,OAAOa,iBAAiB,YAAasD,KAAKirV,mBAAmB,GAC7DpvV,OAAOa,iBAAiB,UAAWsD,KAAKmrV,iBAAiB,IAM7DJ,EAAU1vV,UAAU+kH,aAAe,SAAUp/G,GACzCuE,GAAahB,OAAOvD,EAASwK,GAAQigF,gBAAiBzrF,KAAKurV,iBAC3DhmV,GAAahB,OAAOvD,EAASwK,GAAQkgF,eAAgB1rF,KAAKkrV,iBAC1D3lV,GAAahB,OAAOvD,EAASwK,GAAQmgF,cAAe3rF,KAAKorV,eACzD7lV,GAAahB,OAAOvD,EAAS,aAAchB,KAAKwrV,kBAChD3vV,OAAOe,oBAAoB,YAAaoD,KAAKirV,mBAAmB,GAChEpvV,OAAOe,oBAAoB,UAAWoD,KAAKmrV,iBAAiB,IAMhEJ,EAAU1vV,UAAUkwV,gBAAkB,SAAU1qV,GAC5C,IAAIyC,EAAKzC,EAAEsG,OAAO7D,GACdZ,EAAO1C,KAAKgrV,eAOhB,GANAhrV,KAAKsrV,WAAWzqV,GAChBb,KAAKyrV,aAAezrV,KAAKwgF,QAAQl9E,EAAI,iBAAmBtD,KAAKwgF,QAAQl9E,EAAI,eACzEtD,KAAK0rV,cAAgB1rV,KAAKwgF,QAAQl9E,EAAI,kBAAoBtD,KAAKwgF,QAAQl9E,EAAI,gBAC3EtD,KAAK2rV,WAAa3rV,KAAK20B,WAAa30B,KAAKmmO,OAASnmO,KAAKkmO,OACvDlmO,KAAK4rV,cAAgBlpV,EAAK2nV,eAC1BrqV,KAAK6rV,cAAgBnpV,EAAK0nV,WACtBpqV,KAAKwgF,QAAQl9E,EAAI,mBACjBtD,KAAK8rV,aAAc,EACnB9rV,KAAKwwB,UAAU9rB,MAAMm2D,OAAS,wBAE7B,GAAI76D,KAAKwgF,QAAQl9E,EAAI,sBAAuB,CAC7C,IAAIw4N,EAAW97N,KAAK+rV,WAAW/rV,KAAK2rV,WAAY3rV,KAAK6rV,cAAe,GAChE7rV,KAAKqrV,iBACLvvH,EAAW97N,KAAKgsV,SAASlwH,GAAYA,EAAWp5N,EAAK0nV,WACrDpqV,KAAKwsO,iBAAiB9pO,EAAK0nV,WAAYtuH,KAGvCp5N,EAAK0nV,WAAapqV,KAAKgsV,SAASlwH,GAAYA,EAAWp5N,EAAK0nV,WAC5DpqV,KAAKisV,cAAcvpV,EAAK0nV,WAAY1nV,EAAK2nV,gBACzCrqV,KAAKksV,sBAAsBxpV,EAAK0nV,WAAY1nV,EAAK2nV,mBAS7DU,EAAU1vV,UAAUmlF,QAAU,SAAUl9E,EAAIqM,GACxC,OAAOrM,EAAG/E,QAAQoR,IAAU,GAMhCo7U,EAAU1vV,UAAU2wV,SAAW,SAAUlwH,GAErC,OAAQA,EADW,GACgB,GAC/BA,EAAW97N,KAAKgrV,eAAeX,eAFhB,GAEiDrqV,KAAKgW,OAQ7E+0U,EAAU1vV,UAAU0wV,WAAa,SAAUI,EAASC,EAAQ7B,GACxD,IAAIwB,EAAa,IAAc/rV,KAAKgW,MAAuB,EAAfu0U,GAQ5C,OANIwB,EADAI,EAAUC,EACGA,GAAUA,EAASL,EAAaxB,EAAewB,EAAaxB,GAG5D6B,GAAUA,EAASpsV,KAAKgrV,eAAeX,eAAiB0B,EAAa/rV,KAAKgW,MAAQu0U,EAC3FwB,EAAaxB,IASzBQ,EAAU1vV,UAAU6wV,sBAAwB,SAAUpwH,EAAUuwH,GAC5D,IAAIl2U,EAAOnW,KAAKmW,KAChBnW,KAAKkiO,YAAa,EAClB,IAEIoqH,EAAqBxwH,EAAWuwH,EAFjB,EACD,EAGlBrsV,KAAK03N,cAAgBoE,GAAYA,EADZyuH,KACyC,EADzCA,IAC8D,KAAOvqV,KAAK20B,WACzFxe,EAAKuc,KAAK3c,OAAS/V,KAAKgW,OAC9BhW,KAAK6vE,YAAcw8Q,GAAgBC,IAAuBtsV,KAAKgW,MAAQu0U,EAA6B,KAAOvqV,KAAK20B,WAC1Gxe,EAAKuc,KAAK3c,OAAS/V,KAAKgW,OAC9BG,EAAKuhN,aAAe13N,KAAK03N,aACzBvhN,EAAK05D,WAAa7vE,KAAK6vE,YAM3Bk7Q,EAAU1vV,UAAU6vV,gBAAkB,SAAUrqV,GAC5C,IAAIsG,EAAStG,EAAEsG,OACXzE,EAAO1C,KAAKgrV,eAChBhrV,KAAKsrV,WAAWzqV,GAChBb,KAAKusV,UAAUplV,GACfnH,KAAK6b,SAAS1U,GACFnH,KAAK+pV,oBAAjB,IACIoC,EAAUnsV,KAAK20B,WAAa30B,KAAKmmO,OAASnmO,KAAKkmO,OACnD,GAAIlmO,KAAK8rV,YAAa,CAClB9rV,KAAKwwB,UAAU9rB,MAAMm2D,OAAS,mBAC9B,IAAIihK,EAAWp5N,EAAK0nV,YAAc+B,EAAUnsV,KAAK2rV,YAC7CQ,GAAW,GAAKA,GAAWrwH,EAAWp5N,EAAK2nV,iBAC3C3nV,EAAK0nV,WAAapqV,KAAKgsV,SAASlwH,GAAYA,EAAWp5N,EAAK0nV,WAC5DpqV,KAAKisV,cAAcvpV,EAAK0nV,WAAY1nV,EAAK2nV,gBACzCrqV,KAAK2rV,WAAaQ,EAClBnsV,KAAKksV,sBAAsBpwH,EAAUp5N,EAAK2nV,sBAGzCrqV,KAAKyrV,cAAgBzrV,KAAK0rV,gBAC/B1rV,KAAKwsV,YAAY3rV,IAOzBkqV,EAAU1vV,UAAUmwV,iBAAmB,SAAU3qV,GAC7C,IAAIkoE,EAAUr4C,GAAW,gBAAkB1wB,KAAKmW,KAAK4gB,MAAMnrB,wBAC3D5L,KAAKkmO,OAASrlO,EAAEk1D,QAAU1pD,KAAKC,IAAIy8D,EAAQv8D,KAAM,GACjDxM,KAAKmmO,OAAStlO,EAAEm1D,QAAU3pD,KAAKC,IAAIy8D,EAAQr8D,IAAK,GAChD,IAKIuqU,EALAz7C,EAAS,GACT94R,EAAO1C,KAAKgrV,eACZ70U,EAAOnW,KAAKmW,KACZ0e,EAAkC,YAArB70B,KAAKs1U,aAA8Bt1U,KAAKyL,UACrB5K,EAAE+lI,WAAa,IAAO,EAAI,GAAK,GAA7D/lI,EAAQ,OAAI,EAAI,EAAI,GAAK,GAE/Bo2U,EAAa5qU,KAAKC,IAAID,KAAKC,IAAI,EAAIguB,GAAOnkB,EAAK05D,WAAY,EAAG,GAAI,GAAM,IAAOh7C,EAAY,KACzE,IAEd2mQ,GADAA,EAA8B,eAArBrlR,EAAKyiB,YAA+B54B,KAAKkmO,OAAS/vN,EAAKuc,KAAK1c,MAAQ,EAAKhW,KAAKmmO,OAAShwN,EAAKuc,KAAK3c,QACxF,EAAI,EAAIylR,EAAS,EAAI,EAAIA,EAC3Cx7R,KAAK6vE,WAA6B,IAAfonQ,EAAoB,EAAI38S,GAAO,EAAI28S,EAAY,EAAG,GACrEj3U,KAAK03N,aAA+B,IAAfu/G,EAAoB,EAAI9gU,EAAKuhN,cAAiBvhN,EAAK05D,WAAa7vE,KAAK6vE,YAAc2rN,GAE5G94R,EAAK0nV,WAAapqV,KAAKgsV,SAAShsV,KAAK03N,aAAe13N,KAAKgW,OAAShW,KAAK03N,aAAe13N,KAAKgW,MAAQtT,EAAK0nV,WACxGpqV,KAAKkiO,YAAa,EAClBliO,KAAKisV,cAAcvpV,EAAK0nV,WAAY1nV,EAAK2nV,gBACzCl0U,EAAK05D,WAAa7vE,KAAK6vE,WACvB15D,EAAKuhN,aAAe13N,KAAK03N,cAM7BqzH,EAAU1vV,UAAU+vV,cAAgB,SAAUvqV,GAG1Cb,KAAKq/B,OAASr/B,KAAKgrV,eAAeZ,WAClC,IAAIkC,EAAqBtsV,KAAKq/B,OAASr/B,KAAKgrV,eAAeX,eAHxC,EACD,GAIdrqV,KAAKyrV,cAAgBzrV,KAAK0rV,iBAC1B1rV,KAAKmW,KAAK05D,WAAcy8Q,GAAsBtsV,KAAKgW,MAAQ,GAAMhW,KAAKq/B,OAFrDkrT,KAEiF,EAAK,EAAIvqV,KAAK6vE,YAEpH7vE,KAAK8rV,aAAc,EACnB9rV,KAAKyrV,cAAe,EACpBzrV,KAAK0rV,eAAgB,GAMzBX,EAAU1vV,UAAUsyG,OAAS,WAOzB,OANA3tG,KAAKysV,cACLzsV,KAAKsb,WACLtb,KAAK0sV,kBDlOb,SAAgCC,EAAW58T,GACvC,IAAI2C,EAAOi6T,EAAUx2U,KAAKuc,KACtBk6T,EAAkD,eAA/BD,EAAUx2U,KAAKyiB,YACtC+zT,EAAUn8T,UAAYT,EAASyQ,WAC3Bl9B,GAAI,gBAAkBqpV,EAAUx2U,KAAK4gB,KACrC/gB,MAAO22U,EAAUh4T,WAAag4T,EAAU52U,OAAS42U,EAAU32U,MAC3DD,OAAQ42U,EAAUh4T,WAAag4T,EAAU32U,MAAQ22U,EAAU52U,OAC3DrR,MAAO,6BAA+BioV,EAAUx2U,KAAK2e,iBAAmB83T,GAAoB,GAAK,GAAKl6T,EAAK1lB,GAAK,cACzG2/U,EAAUx2U,KAAK2e,kBAAoB83T,EAAmB,GAAK,GAAKl6T,EAAK3lB,GAAM4/U,EAAUh4T,WAAag4T,EAAU52U,OAAS,IACtH,oBAEV42U,EAAU/oV,SAASY,KAAKmoV,EAAUn8T,WCwN9Bq8T,CAAgB7sV,KAAMA,KAAKyC,UAAUstB,UACrC/vB,KAAKykB,WAAWzkB,KAAKwwB,WACrBxwB,KAAKwwB,UAAU7uB,YAAY3B,KAAKgrV,eAAe1kC,eAAetmT,KAAMA,KAAKyC,UAAUstB,WAC5E/vB,KAAKwwB,WAKhBu6T,EAAU1vV,UAAUigB,SAAW,WAC3Btb,KAAK+pV,oBAAsB37T,GAAuBpuB,KAAKyC,UAAU4Y,QAKrE0vU,EAAU1vV,UAAUqxV,gBAAkB,WAC9BlsV,SAASyuB,eAAe,gBAAkBjvB,KAAKmW,KAAK4gB,OACpDxyB,EAAO/D,SAASyuB,eAAe,gBAAkBjvB,KAAKmW,KAAK4gB,QAOnEg0T,EAAU1vV,UAAUkxV,UAAY,SAAUplV,GACtC,IAAI7D,EAAK6D,EAAO7D,GAChBtD,KAAKwwB,UAAU9rB,MAAMm2D,OAASv3D,EAAG/E,QAAQ,oBAAsB,GAAK+E,EAAG/E,QAAQ,gBAAkB,EAC7F,eAAkB+E,EAAG/E,QAAQ,YAAc,GAAK+E,EAAG/E,QAAQ,WAAa,EAAKyB,KAAK20B,WAAa,YAC/F,YAAc,QAMtBo2T,EAAU1vV,UAAUwgB,SAAW,SAAU1U,GACrC,IAAI7D,EAAK6D,EAAO7D,GACZwpV,EAAcxpV,EAAG/E,QAAQ,iBAAmB,GAAK+E,EAAG/E,QAAQ,gBAAkB,EAC9EwuV,EAAezpV,EAAG/E,QAAQ,kBAAoB,GAAK+E,EAAG/E,QAAQ,iBAAmB,EACjFmG,EAAQ1E,KAAK+pV,oBACbE,EAAejqV,KAAKgrV,eAAef,aACnCC,EAAgBlqV,KAAKgrV,eAAed,cACpCQ,EAAgB1qV,KAAKgrV,eAAeN,cACpCC,EAAiB3qV,KAAKgrV,eAAeL,eACrCqC,EAAShtV,KAAKitV,cAAc9lV,EAAQ8iV,GACxCS,EAAchmV,MAAM05B,KAAO0uT,GAAeE,EAAStoV,EAAM8pB,YAAc9pB,EAAM4c,OAC7EqpU,EAAejmV,MAAM05B,KAAO2uT,GAAgBC,EAAStoV,EAAM8pB,YAAc9pB,EAAM4c,OAC/EopU,EAAchmV,MAAM45B,OAASwuT,GAAeE,EAAStoV,EAAM8pB,YAAc9pB,EAAM4c,OAC/EqpU,EAAejmV,MAAM45B,OAASyuT,GAAgBC,EAAStoV,EAAM8pB,YAAc9pB,EAAM4c,OACpD,iBAAzBthB,KAAKyC,UAAU4Y,QACf4uU,EAAavlV,MAAM05B,KAAO0uT,GAAeE,EAAStoV,EAAMiqB,WAAajqB,EAAM+pB,MAC3Ew7T,EAAavlV,MAAM45B,OAASwuT,GAAeE,EAAStoV,EAAMiqB,WAAajqB,EAAM+pB,MAC7Ey7T,EAAcxlV,MAAM05B,KAAO2uT,GAAgBC,EAAStoV,EAAMiqB,WAAajqB,EAAM+pB,MAC7Ey7T,EAAcxlV,MAAM45B,OAASyuT,GAAgBC,EAAStoV,EAAMiqB,WAAajqB,EAAM+pB,MAC/Ei8T,EAAchmV,MAAM45B,OAASwuT,GAAeE,EAAStoV,EAAM8pB,YAAc9pB,EAAM4c,OAC/EqpU,EAAejmV,MAAM45B,OAASyuT,GAAgBC,EAAStoV,EAAM8pB,YAAc9pB,EAAM4c,SAQzFypU,EAAU1vV,UAAU4xV,cAAgB,SAAU9lV,EAAQnD,GAClD,OAAQmD,EAAO7D,GAAGpG,MAAM,KAAK,KAAO8G,EAAIV,GAAGpG,MAAM,KAAK,IAM1D6tV,EAAU1vV,UAAUmxV,YAAc,SAAU3rV,GAK7Bb,KAAKgrV,eAJhB,IAAIqB,EAMAD,EAASpsV,KAAK6rV,cACdM,EAAUnsV,KAAK20B,WAAa30B,KAAKmmO,OAASnmO,KAAKkmO,OAC/ClnJ,EAAO3yE,KAAKE,IAAIvM,KAAK2rV,WAAaQ,GACtC,GAAInsV,KAAKyrV,cAAgBU,GAAW,EAAG,CACnC,IAAIrwH,EAAWswH,GAAUD,EAAUnsV,KAAK2rV,WAAa3sQ,GAAQA,GAC7DqtQ,EAAevwH,EAVA,GAU2B,EAAI97N,KAAK4rV,eAAiBO,EAAUnsV,KAAK2rV,YAAc3sQ,EAAOA,GACpGh/E,KAAK4rV,cACT9vH,EAAWA,EAZI,GAYuB,EAAIA,EAAWswH,EACjDC,GATY9B,IASqB4B,EAAUrwH,EAAWuwH,IACtDrsV,KAAKgrV,eAAeZ,WAAapqV,KAAK6rV,cAAgB/vH,EACtD97N,KAAKgrV,eAAeX,eAAiBrqV,KAAK4rV,cAAgBS,EAC1DrsV,KAAK2rV,WAAaQ,EAClBnsV,KAAKisV,cAAcnwH,EAAUuwH,GAC7BrsV,KAAKksV,sBAAsBpwH,EAAUuwH,SAGpCrsV,KAAK0rV,gBACVW,EAAeF,GAlBC5B,GAkB0BvqV,KAAKgrV,eAAeZ,YAAc+B,GAAWnsV,KAAKgW,MAtB7E,EAuBXm2U,EAAUnsV,KAAKgrV,eAAeZ,WAAapqV,KAAK4rV,cACpD5rV,KAAKgrV,eAAeX,eAAiBrqV,KAAK4rV,cAAgBS,EAC1DrsV,KAAK2rV,WAAaQ,EAClBnsV,KAAKisV,cAAcjsV,KAAKq/B,OAAQgtT,GAChCrsV,KAAKksV,sBAAsBlsV,KAAKq/B,OAAQgtT,KAQhDtB,EAAU1vV,UAAU4wV,cAAgB,SAAUnwH,EAAUuwH,GACpD,IACI3pV,EAAO1C,KAAKgrV,eAIhBtoV,EAAK0yJ,OAAO5xJ,aAAa,IAAKs4N,EAAS5uN,YACvCxK,EAAK0yJ,OAAO5xJ,aAAa,QAAS6oV,EAAan/U,YAC/CxK,EAAKgoV,cAAclnV,aAAa,KAAMs4N,EAAS5uN,YAC/CxK,EAAKioV,eAAennV,aAAa,MAAOs4N,EAAWuwH,GAAcn/U,YACjExK,EAAKynV,kBAAkBruH,EAAUuwH,EAAcrsV,KAAK+V,QACpDrT,EAAKmoV,WAAWrnV,aAAa,YAAa,cAAgBs4N,EAAWuwH,EAAe,EANtEvB,GAM4E9qV,KAAK20B,WAAa,GAAK,IAC7G,KAAO30B,KAAK20B,WAAa,KAAO,KAAO,aAAe30B,KAAK20B,WAAa,MAAQ,KAAO,MAK/Fo2T,EAAU1vV,UAAUoxV,YAAc,WAC9B,IAIIt2U,EAAOnW,KAAKmW,KAChBnW,KAAK20B,WAAkC,aAArBxe,EAAKyiB,YACvB,IAAIyzT,EAAel2U,EAAK05D,YAAc7vE,KAAK20B,WAAaxe,EAAKuc,KAAK3c,OAASI,EAAKuc,KAAK1c,OACrFq2U,EAAeA,EAJK9B,GAI0B8B,EAJ1B9B,GAKpBvqV,KAAK0vH,QAAUv5G,EAAKuc,KAAK3lB,EACzB/M,KAAKyvH,QAAUt5G,EAAKuc,KAAK1lB,EACzBhN,KAAKgW,MAAQhW,KAAK20B,WAAaxe,EAAKuc,KAAK3c,OAASI,EAAKuc,KAAK1c,MAC5DhW,KAAK+V,OAAS,GACd,IAAI+lN,EAAW3lN,EAAKuhN,cAAgB13N,KAAK20B,WAAaxe,EAAKuc,KAAK3c,OAAS/V,KAAKgW,OAC9EhW,KAAKgrV,eAAeZ,WAAatuH,EAbd,EAawCA,EAbxC,EAcnB97N,KAAKgrV,eAAeX,eAAmBgC,EAAersV,KAAKgrV,eAAeZ,WAAcpqV,KAAKgW,SACvFq2U,EAAersV,KAAKgW,MAAQhW,KAAKgrV,eAAeZ,WAfnC,GAsBvBW,EAAU1vV,UAAUkuT,SAAW,SAAUpzS,EAAM1T,GAC3C0T,EAAK+e,iBAAmB,IAAI61T,EAAUtoV,EAAW0T,IAOrD40U,EAAU1vV,UAAUmxO,iBAAmB,SAAU3/G,EAAU9rG,GACvD,IACI+6M,EADA/7N,EAAQC,KAERgW,EAAQhW,KAAKgrV,eAAeX,eAChC,IAAIvyT,OAAcC,QAAQ52B,EAAc,QACpC+J,SAAUlL,KAAKqrV,gBACfrzT,SAAU,SAAU/3B,GAChB67N,EAAWrkM,GAAOx3B,EAAKg4B,UAAW,EAAGlX,EAAU8rG,EAAU5sH,EAAKiL,UAAY2hH,EAC1E9sH,EAAMksV,cAAcnwH,EAAU9lN,GAC9BjW,EAAMmsV,sBAAsBpwH,EAAU9lN,IAE1CgJ,IAAK,SAAUmN,GACXpsB,EAAMirV,eAAeZ,WAAarpU,EAClChhB,EAAMs/B,OAASte,EACfhhB,EAAMksV,cAAclrU,EAAS/K,GAC7BjW,EAAMmsV,sBAAsBnrU,EAAS/K,OAOjD+0U,EAAU1vV,UAAUiX,QAAU,WAC1B,IAAIvS,EAAQC,KACRA,KAAKipE,KACLjpE,KAAKipE,KAAK/xC,IAAI,SAAU/gB,GACpBA,EAAK+e,iBAAiB5iB,aAI1BtS,KAAK4D,SAASszB,IAAI,SAAUl2B,GACxBjB,EAAMqgH,aAAap/G,GACnBuD,EAAOvD,EAAQ+b,cAEnB/c,KAAK4D,cAMbmnV,EAAU1vV,UAAU0kC,cAAgB,WAChC,MAAO,aAEJgrT,K9R5aPl/P,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAe5D8vT,GAAgD,SAAUxgQ,GAE1D,SAASwgQ,IACL,OAAkB,OAAXxgQ,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA0B/D,OA5BA6rF,GAAUqhQ,EAAgCxgQ,GAI1CN,IACIllF,EAAS,OACVgmV,EAA+B7xV,UAAW,eAAW,GACxD+wF,IACIllF,EAAS,MACVgmV,EAA+B7xV,UAAW,SAAK,GAClD+wF,IACIllF,EAAS,MACVgmV,EAA+B7xV,UAAW,SAAK,GAClD+wF,IACIllF,EAAS,UACVgmV,EAA+B7xV,UAAW,uBAAmB,GAChE+wF,IACIllF,EAAS,UACVgmV,EAA+B7xV,UAAW,cAAU,GACvD+wF,IACIllF,EAAS,WACVgmV,EAA+B7xV,UAAW,yBAAqB,GAClE+wF,IACIllF,EAAS,WACVgmV,EAA+B7xV,UAAW,2BAAuB,GACpE+wF,IACIllF,EAAS,OACVgmV,EAA+B7xV,UAAW,mBAAe,GACrD6xV,GACT1sR,IAKE2sR,GAA+C,SAAUzgQ,GAEzD,SAASygQ,IACL,OAAkB,OAAXzgQ,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAgC/D,OAlCA6rF,GAAUshQ,EAA+BzgQ,GAIzCN,IACIllF,GAAS,IACVimV,EAA8B9xV,UAAW,eAAW,GACvD+wF,IACIllF,EAAS,OACVimV,EAA8B9xV,UAAW,YAAQ,GACpD+wF,IACIllF,EAAS,gBACVimV,EAA8B9xV,UAAW,YAAQ,GACpD+wF,IACIllF,EAAS,WACVimV,EAA8B9xV,UAAW,gBAAY,GACxD+wF,IACIllF,EAAS,IACVimV,EAA8B9xV,UAAW,UAAM,GAClD+wF,IACIllF,EAAS,IACVimV,EAA8B9xV,UAAW,UAAM,GAClD+wF,IACIrkF,GAAUiO,MAAO,KAAM6f,MAAO,MAAQy/L,KACvC63H,EAA8B9xV,UAAW,cAAU,GACtD+wF,IACIrkF,GAAUonB,KAAM,OAAQ0G,MAAO,MAAQw/L,KACxC83H,EAA8B9xV,UAAW,YAAQ,GACpD+wF,IACIrkF,KAAYm2C,KACbivS,EAA8B9xV,UAAW,sBAAkB,GAC9D+wF,IACIllF,EAAS,OACVimV,EAA8B9xV,UAAW,gBAAY,GACjD8xV,GACT3sR,IAKE4sR,GAA2B,WAY3B,OAXA,WACIptV,KAAK82B,SAAU,EACf92B,KAAKywU,eAAiB,KAEtBzwU,KAAKwkD,OAAS,KAEdxkD,KAAKqgV,YAAc,KAEnBrgV,KAAKqtV,cAAe,EACpBrtV,KAAK8mO,QAAU,SAQnBwmH,GAAoC,SAAU5gQ,GAE9C,SAAS4gQ,IAyBL,IAAIvtV,EAAmB,OAAX2sF,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAWhE,OATAD,EAAMk3B,UAENl3B,EAAMwtV,YAAc,EAEpBxtV,EAAMimO,cAAe,EAErBjmO,EAAMg0B,SAAW,IAAIwB,GAAK,EAAG,EAAG,EAAG,GAEnCx1B,EAAMorM,SAAW,SACVprM,EAkUX,OAvWA8rF,GAAUyhQ,EAAoB5gQ,GAwC9B4gQ,EAAmBjyV,UAAUwuO,mBAAqB,SAAU2jH,EAAc7/O,GACtE,IAAI5tG,EAAQC,KACR8pO,EAAa9pO,KAAK8kE,YAAc0oR,EAAa1oR,WACjD,GAAIrnE,EAAkBuC,KAAK88D,OACvB98D,KAAKiqO,oBACDlrO,OAAQ+qO,EAAY7qN,MAAO6qN,EAAWrtO,QACvC+wV,EAAc7/O,OAHrB,CAMkB3tG,KAAK+pO,WAAWjE,QAAQ9lO,KAAK+pO,WAAWC,gBAAgB1pE,iBAC9DgkC,KAAK,SAAUzjM,GAAK,OAAOd,EAAMkqO,mBAAmBppO,EAAG2sV,EAAc7/O,OAMrF2/O,EAAmBjyV,UAAU4uO,mBAAqB,SAAUppO,EAAG2sV,EAAc7/O,GACzE,IAAIv1E,GACArB,KAAMqhM,GAAcr5M,OAAQ/e,KAAMxD,KAAMqE,EAAE9B,QAE9CyuV,EAAa9mU,QAAQ0xM,GAAchgM,GACnCp4B,KAAKytV,WAA0B,KAAb5sV,EAAE9B,OAAgB8B,EAAE9B,UACtCiB,KAAKm4C,UAAUn4C,KAAKytV,WAAYD,KAC1BA,EAAaE,eAAiBF,EAAa5rT,cAAcnlC,QAAUkxG,GACrE6/O,EAAapjH,gBAIrBkjH,EAAmBjyV,UAAU88C,UAAY,SAAUp5C,EAAQyuV,GACvD,IAAI/wV,EAAS6B,OAAOhB,KAAKyB,GAAQtC,OAEjC,GADAuD,KAAKutV,YAAc,EACJ,IAAX9wV,EACA,OAAO,KAEXuD,KAAK2tV,gBAAgB5uV,GACrBiB,KAAKi3B,UACLj3B,KAAK4tV,UAAY,EAIjB,IAAK,IAHDz6T,EACAk+D,EAASrxF,KAAKoxD,SAAS30D,OAASuD,KAAKoxD,SAAW1kC,GAAe8gU,EAAanyU,OAC5EwyU,EAAYhvT,GAAe7+B,KAAK8tV,QAAS9tV,KAAKutV,aACzCpxV,EAAI,EAAGA,EAAIM,EAAQN,IAAK,EAC7Bg3B,EAAQnzB,KAAK+tV,UAAUhvV,EAAQ5C,EAAGk1F,IACbrkF,EAChBhN,KAAKguV,OAAO76T,EAAO06T,EAAW1xV,KAC3BsB,EAAkB01B,EAAMnmB,KACxBmmB,EAAM2D,SAAU,GAEpB92B,KAAKiuV,WAAW96T,EAAOk+D,IAI/B,GADArxF,KAAKkuV,YAAcluV,KAAK8tV,QACpB9tV,KAAK4tV,UAAY,EAAG,CACpB,IAAIO,EAAY,IAAIf,GACpBe,EAAUphV,EAAI,SACdohV,EAAUnhV,EAAIhN,KAAK4tV,UACnBO,EAAUr/T,KAAOq/T,EAAUjyH,aAAeiyH,EAAUphV,EAAI,KAAO/M,KAAK4tV,UACpE5tV,KAAKiuV,WAAWE,EAAW98P,KAMnCi8P,EAAmBjyV,UAAU4yV,WAAa,SAAU96T,EAAOk+D,GACvDl+D,EAAMlhB,MAAQjS,KAAKi3B,OAAOx6B,OAC1B02B,EAAM0C,MAAQ1C,EAAM0C,OAASw7D,EAAOl+D,EAAMlhB,MAAQo/E,EAAO50F,QACzDuD,KAAKi3B,OAAOzyB,KAAK2uB,IAKrBm6T,EAAmBjyV,UAAU2yV,OAAS,SAAU76T,EAAO06T,EAAW57U,GAC9D,IAAKxU,EAAkBowV,GAAY,CAC/B,GAAuB,UAAnB7tV,KAAKouV,WAAyB/hV,KAAKE,IAAI4mB,EAAMnmB,IAAM6gV,EAEnD,OADA7tV,KAAK4tV,WAAavhV,KAAKE,IAAI4mB,EAAMnmB,IAC1B,EAEN,GAAuB,UAAnBhN,KAAKouV,WAAyBn8U,GAAS47U,EAE5C,OADA7tV,KAAK4tV,WAAavhV,KAAKE,IAAI4mB,EAAMnmB,IAC1B,EAGf,OAAO,GAKXsgV,EAAmBjyV,UAAUsyV,gBAAkB,SAAU5uV,GAErD,IAAK,IADDtC,EAAS6B,OAAOhB,KAAKyB,GAAQtC,OACxBN,EAAI,EAAGA,EAAIM,EAAQN,IACnBsB,EAAkBsB,EAAO5C,GAAG6D,KAAKwyB,UAClCxyB,KAAKutV,aAAelhV,KAAKE,IAAIxN,EAAO5C,GAAG6D,KAAKwyB,UAOxD86T,EAAmBjyV,UAAU0yV,UAAY,SAAUvxV,EAAML,EAAGk1F,GACxD,IAAIl+D,EAAQ,IAAIi6T,GAOhB,OANAj6T,EAAMpmB,EAAIlQ,EAASmD,KAAKqoO,MAAO7rO,EAAKL,IACpCg3B,EAAMnmB,EAAInQ,EAASmD,KAAKwyB,MAAOh2B,EAAKL,IACpCg3B,EAAM0C,MAAQh5B,EAASmD,KAAKkpO,kBAAmB1sO,EAAKL,IACpDg3B,EAAMrE,KAAOqE,EAAM+oM,aAAer/N,EAASmD,KAAKwiF,UAAUzrD,MAAQ,GAAIv6B,EAAKL,IAC3Eg3B,EAAMlC,QAAUp0B,EAASmD,KAAKmpO,oBAAsB,GAAI3sO,EAAKL,IAC7D6D,KAAKquV,iBAAiBl7T,EAAOh3B,EAAGK,EAAM60F,GAC/Bl+D,GAMXm6T,EAAmBjyV,UAAU6wO,aAAe,SAAUshH,GAClD,IAAIc,EAAcd,EAAaz9T,SAAS+9C,aAAcxqE,GAAIkqV,EAAaxsV,QAAQsC,GAAK,WAAatD,KAAKiS,QACtGjS,KAAKuuV,aAAaf,EAAcc,GAChC,IAAIE,EACAhB,EAAaiB,6BAA+BzuV,KAAKwiF,UAAU1rD,WAC3D03T,EAAiBhB,EAAaz9T,SAAS+9C,aAAcxqE,GAAIkqV,EAAaxsV,QAAQsC,GAAK,qBAAuBtD,KAAKiS,SAChGvN,MAAMC,WAChB3E,KAAK4uC,UAAU3O,QAAUutT,EAAargH,eAA+B,QAAdntO,KAAK0G,KAAkB,SAAW,UAC9F1G,KAAK0uV,gBAAgBlB,EAAcgB,IAErB,QAAdxuV,KAAK0G,OACL1G,KAAK2uV,cAAc3uV,KAAK4uV,WAAY5uV,KAAKslV,mBACzCkI,EAAaqB,gBAAgB1hH,cAAcqgH,EAAcxtV,KAAK4uC,UAAW5uC,KAAMsuV,IAE/Ed,EAAasB,2BACb9uV,KAAK4uV,WAAW7hV,GAAKygV,EAAauB,gBAClC/uV,KAAK4uV,WAAW5hV,GAAKwgV,EAAauB,gBAClC/uV,KAAK4uV,WAAW74U,QAAWy3U,EAAauB,gBAAkB/uV,KAAK4uV,WAAW5hV,EAC1EhN,KAAK4uV,WAAW54U,OAAUw3U,EAAauB,gBAAkB/uV,KAAK4uV,WAAW7hV,IAMjFugV,EAAmBjyV,UAAUkzV,aAAe,SAAUf,EAAcc,GAGhE,IAAK,IADDh3P,EADA03P,EAAUxB,EAAaxsV,QAAQsC,GAAK,WAAatD,KAAKiS,MAAQ,UAEzD7T,EAAK,EAAGyE,EAAK7C,KAAKi3B,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACrD,IAAI+0B,EAAQtwB,EAAGzE,GACXg6B,GACAC,QAAQ,EAAOtB,KAAMohM,GAAap5M,OAAQ/e,KAAMmzB,MAAOA,EAAOiL,KAAMjL,EAAM0C,MAC1EoP,OAAQjlC,KAAKqpO,QAAQl2M,IAAWnd,MAAOhW,KAAKspO,mBAAmBrkM,OAAOjvB,MAAO6f,MAAO71B,KAAKspO,mBAAmBrkM,OAAOpP,QAC7G7f,MAAOhW,KAAKilC,OAAOjvB,MAAO6f,MAAO71B,KAAKilC,OAAOpP,QAEvD23T,EAAa9mU,QAAQyxM,GAAa//L,GAClCjF,EAAM0C,MAAQuC,EAASgG,KACnBjL,EAAM2D,UACNwgE,EAAS,IAAI7hE,GAAWu5T,EAAU77T,EAAMlhB,MAAOkhB,EAAM0C,MAAOuC,EAAS6M,OAAOjvB,OAAS,EAAGoiB,EAAS6M,OAAOpP,OAAS1C,EAAM0C,MAAO,EAAG,GAAI,IACrI23T,EAAcp3T,GAAiBp2B,KAAK0G,MAAQ,gBACxCuoV,YAAY97T,EAAOnzB,KAAMwtV,EAAcl2P,GAC3Cg3P,EAAY3sV,YAAY6rV,EAAaz9T,SAASyF,SAAS8hE,KAG/Dk2P,EAAa0B,mBAAmBvtV,YAAY2sV,IAKhDhB,EAAmBjyV,UAAUqzV,gBAAkB,SAAUlB,EAAcgB,GACnEhB,EAAaiB,4BAA4BU,eAIzC,IAAK,IAHDnuV,EAAUG,EAAc,OACxBmC,GAAIkqV,EAAaxsV,QAAQsC,GAAK,mCAEzBlF,EAAK,EAAGyE,EAAK7C,KAAKi3B,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACrD,IAAI+0B,EAAQtwB,EAAGzE,GACX+0B,EAAM2D,SACN02T,EAAaiB,4BAA4BC,gBAAgBv7T,EAAOnzB,KAAKwiF,UAAWgsQ,EAAgBxuV,KAAKi3B,OAAQj3B,KAAKiS,MAAOjR,GAGjG,OAA5BhB,KAAKwiF,UAAUvzE,UAAqBjO,EAAQ2lE,mBAC5Cj2C,GAAW88T,EAAaxsV,QAAQsC,GAAK,sBAAsB3B,YAAYX,GAE3EwsV,EAAa0B,mBAAmBvtV,YAAY6sV,IAMhDlB,EAAmBjyV,UAAUszV,cAAgB,SAAUS,EAAYnoS,GAC/DmoS,EAAWriV,EAAIk6C,EAAMl6C,EAAIqiV,EAAWriV,EAAIk6C,EAAMl6C,EAAIqiV,EAAWriV,EAC7DqiV,EAAWpiV,EAAIi6C,EAAMj6C,EAAIoiV,EAAWpiV,EAAIi6C,EAAMj6C,EAAIoiV,EAAWpiV,EAC7DoiV,EAAWr5U,OAAUkxC,EAAMj6C,EAAIi6C,EAAMlxC,OAAUq5U,EAAWr5U,OAAUkxC,EAAMj6C,EAAIi6C,EAAMlxC,OAAUq5U,EAAWr5U,OACzGq5U,EAAWp5U,MAASixC,EAAMl6C,EAAIk6C,EAAMjxC,MAASo5U,EAAWp5U,MAASixC,EAAMl6C,EAAIk6C,EAAMjxC,MAASo5U,EAAWp5U,OAMzGs3U,EAAmBjyV,UAAUgzV,iBAAmB,SAAUl7T,EAAOh3B,EAAGK,EAAM60F,GACtE,IAAK5zF,EAAkB01B,EAAMnmB,GACzB,OAAO,KAGX,OADAmmB,EAAM0C,MAAQ71B,KAAKspO,mBAAmBlrM,MAAQjL,EAAM0C,MAC5C71B,KAAKspO,mBAAmB/qM,MAC5B,IAAK,OACDpL,EAAMnmB,EAAI,EACVmmB,EAAM2D,SAAU,EAChB,MACJ,IAAK,UACD,IAAI+1F,EAAWrwH,EAAKL,EAAI,GAAMK,EAAKL,EAAI,GAAG6D,KAAKwyB,QAAU,EAAK,EAC1DyW,EAAOzsC,EAAKL,EAAI,GAAMK,EAAKL,EAAI,GAAG6D,KAAKwyB,QAAU,EAAK,EAC1DW,EAAMnmB,GAAKX,KAAKE,IAAIsgH,GAAYxgH,KAAKE,IAAI08B,IAAS,EAClDjpC,KAAKutV,aAAep6T,EAAMnmB,EAC1BmmB,EAAM2D,SAAU,EAChB,MACJ,QACI3D,EAAM2D,SAAU,IAO5Bw2T,EAAmBjyV,UAAUguO,QAAU,SAAUl2M,GAC7C,OAAOA,EAAM0C,QAAU71B,KAAKspO,mBAAmBlrM,MAEnDguD,IACIllF,EAAS,KACVomV,EAAmBjyV,UAAW,kBAAc,GAC/C+wF,IACIllF,KACDomV,EAAmBjyV,UAAW,aAAS,GAC1C+wF,IACIllF,EAAS,KACVomV,EAAmBjyV,UAAW,aAAS,GAC1C+wF,IACIllF,EAAS,KACVomV,EAAmBjyV,UAAW,YAAQ,GACzC+wF,IACIllF,EAAS,KACVomV,EAAmBjyV,UAAW,0BAAsB,GACvD+wF,IACIllF,EAAS,KACVomV,EAAmBjyV,UAAW,aAAS,GAC1C+wF,IACIllF,GAAS,IACVomV,EAAmBjyV,UAAW,eAAW,GAC5C+wF,IACIrkF,GAAU8tB,MAAO,KAAM7f,MAAO,GAAKs/M,KACpCg4H,EAAmBjyV,UAAW,cAAU,GAC3C+wF,IACIrkF,EAAQ,KAAM+vB,KACfw1T,EAAmBjyV,UAAW,iBAAa,GAC9C+wF,IACIllF,EAAS,eACVomV,EAAmBjyV,UAAW,mBAAe,GAChD+wF,IACIllF,EAAS,KACVomV,EAAmBjyV,UAAW,yBAAqB,GACtD+wF,IACIllF,EAAS,OACVomV,EAAmBjyV,UAAW,sBAAkB,GACnD+wF,IACIllF,EAAS,OACVomV,EAAmBjyV,UAAW,eAAW,GAC5C+wF,IACIllF,EAAS,UACVomV,EAAmBjyV,UAAW,iBAAa,GAC9C+wF,IACIrkF,KAAYolV,KACbG,EAAmBjyV,UAAW,iBAAa,GAC9C+wF,IACIllF,OACDomV,EAAmBjyV,UAAW,gBAAY,GAC7C+wF,IACIllF,EAAS,IACVomV,EAAmBjyV,UAAW,kBAAc,GAC/C+wF,IACIllF,EAAS,OACVomV,EAAmBjyV,UAAW,gBAAY,GAC7C+wF,IACIllF,EAAS,QACVomV,EAAmBjyV,UAAW,cAAU,GAC3C+wF,IACIllF,EAAS,MACVomV,EAAmBjyV,UAAW,mBAAe,GAChD+wF,IACIllF,EAAS,QACVomV,EAAmBjyV,UAAW,YAAQ,GACzC+wF,IACIllF,GAAS,IACVomV,EAAmBjyV,UAAW,qBAAiB,GAClD+wF,IACIllF,GAAS,IACVomV,EAAmBjyV,UAAW,eAAW,GAC5C+wF,IACIllF,EAAS,QACVomV,EAAmBjyV,UAAW,qBAAiB,GAClD+wF,IACIllF,GAAS,IACVomV,EAAmBjyV,UAAW,kBAAc,GAC/C+wF,IACIllF,EAAS,OACVomV,EAAmBjyV,UAAW,oBAAgB,GACjD+wF,IACIrkF,GAAUw2B,KAAM,QAAUq3L,KAC3B03H,EAAmBjyV,UAAW,0BAAsB,GACvD+wF,IACIllF,EAAS,IACVomV,EAAmBjyV,UAAW,gBAAY,GAC7C+wF,IACIllF,EAAS,QACVomV,EAAmBjyV,UAAW,aAAS,GAC1C+wF,IACIllF,EAAS,QACVomV,EAAmBjyV,UAAW,cAAU,GAC3C+wF,IACIllF,EAAS,QACVomV,EAAmBjyV,UAAW,iBAAa,GAC9C+wF,IACIllF,EAAS,QACVomV,EAAmBjyV,UAAW,kBAAc,GAC/C+wF,IACIllF,EAAS,WACVomV,EAAmBjyV,UAAW,mBAAe,GAChD+wF,IACIllF,EAAS,IACVomV,EAAmBjyV,UAAW,eAAW,GACrCiyV,GACT9sR,I+R3dE6uR,GAAkC,WAElC,SAASA,EAAiB7B,GACtBxtV,KAAKwtV,aAAeA,EA+LxB,OA7LAlvV,OAAOuJ,eAAewnV,EAAiBh0V,UAAW,UAK9CqM,IAAK,WACD,OAAO1H,KAAKsvV,YAA0D,QAA5CtvV,KAAKwtV,aAAa5rT,cAAc,GAAGl7B,KACzD1G,KAAKwtV,aAAaqB,gBAAgB97T,OAAS,OAMnD1rB,IAAK,SAAUrK,GACXgD,KAAKsvV,UAAYtyV,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewnV,EAAiBh0V,UAAW,UAK9CqM,IAAK,WACD,YAA0BvM,IAAnB6E,KAAKuvV,UAA0BvvV,KAAKuvV,UACvCvvV,KAAKwtV,aAAaqB,gBAAgBjiV,QAM1CvF,IAAK,SAAUrK,GACXgD,KAAKuvV,UAAYvyV,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewnV,EAAiBh0V,UAAW,eAK9CqM,IAAK,WACD,YAA+BvM,IAAxB6E,KAAKwvV,eAA+BxvV,KAAKwvV,eAC5CxvV,KAAKwtV,aAAaqB,gBAAgBY,aAM1CpoV,IAAK,SAAUrK,GACXgD,KAAKwvV,eAAiBxyV,GAE1B2K,YAAY,EACZC,cAAc,IAMlBynV,EAAiBh0V,UAAUq0V,WAAa,WACpC,MAAkC,QAA3B1vV,KAAKwtV,aAAa9mV,MAM7B2oV,EAAiBh0V,UAAUs0V,eAAiB,SAAUrzV,GAClD,GAAIA,EAAM6K,OAAO7D,GAAG/E,QAAQ,aAAe,GAAKjC,EAAM6K,OAAO7D,GAAG/E,QAAQ,gBAAkB,EAAG,CACzF,IAAIq5B,EAAa5D,GAAY13B,EAAM6K,OAAO7D,IAAI6vB,MAC9C,GAAIgnB,MAAMviB,IAAgBt7B,EAAM6K,OAAO7D,GAAG/E,QAAQ,gBAAkB,GACQ,YAAxEyB,KAAKwtV,aAAa5rT,cAAc,GAAG3K,OAAOW,GAAYypF,cACtD,OAAO,KAEXrhH,KAAK4vV,cAAch4T,EAAY53B,KAAKwtV,cACpCxtV,KAAK6vV,aAAaj4T,KAO1By3T,EAAiBh0V,UAAUy0V,cAAgB,WACvC,GAAI9vV,KAAKwtV,aAAa5rT,cAAc,GAAGmuT,WACnC,IAAK,IAAI3xV,EAAK,EAAGyE,EAAK7C,KAAKwtV,aAAa5rT,cAAc,GAAG3K,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnF,IAAI+0B,EAAQtwB,EAAGzE,GACf4B,KAAK4vV,cAAcz8T,EAAMlhB,MAAOjS,KAAKwtV,mBAGnC/vV,EAAkBuC,KAAKwtV,aAAa5rT,cAAc,GAAGouT,eAC3DhwV,KAAK4vV,cAAc5vV,KAAKwtV,aAAa5rT,cAAc,GAAGouT,aAAchwV,KAAKwtV,cAE7E,GAAIxtV,KAAKwtV,aAAayC,6BAAmE,SAApCjwV,KAAKwtV,aAAannH,eACnErmO,KAAKwtV,aAAayC,4BAA4B5nC,oBAAoB5rT,OAClE,IAAK,IAAIwH,EAAK,EAAGwG,EAAKzK,KAAKwtV,aAAayC,4BAA4B5nC,oBAAqBpkT,EAAKwG,EAAGhO,OAAQwH,IAAM,CAC3G,IAAIgO,EAAQxH,EAAGxG,GACfjE,KAAK4vV,cAAc39U,EAAMkhB,MAAOnzB,KAAKwtV,cAAc,GACnDxtV,KAAK6vV,aAAa59U,EAAMkhB,SAOpCk8T,EAAiBh0V,UAAUw0V,aAAe,SAAU59U,GAGhD,IAAK,IAFD+8U,EAAUhvV,KAAKwtV,aAAaxsV,QAAQsC,GAAK,mBAEpClF,EAAK,EAAG2jC,EADJ/hC,KAAKwtV,aAAa5rT,cAAc,GAAG3K,OACZ74B,EAAK2jC,EAAStlC,OAAQ2B,IAAM,CAC5D,IAAIqzB,EAAesQ,EAAS3jC,GACxB6T,IAAUwf,EAAaxf,OACvBjS,KAAKkwV,eAAez+T,EAAaxf,MAAO+8U,EAAShvV,KAAK+yB,UAQlEs8T,EAAiBh0V,UAAUu0V,cAAgB,SAAU39U,EAAO4d,EAAOsgU,QAC/C,IAAZA,IAAsBA,GAAU,GACpC,IACIjgQ,EADA8+P,EAAUhvV,KAAKwtV,aAAaxsV,QAAQsC,GAAK,mBAGzC6vB,GADSnzB,KAAKwtV,aAAa5rT,cAAc,GAAG3K,OACpC6K,GAAa7vB,EAAOjS,KAAKwtV,aAAa5rT,cAAc,GAAG3K,SACnE,GAAIx5B,EAAkB01B,GAClB,OAAO,KAMP+8D,EAJClwF,KAAK0vV,aAIM78T,GAAiBM,EAAMi9T,SAAUvgU,EAAMk/T,gBAAiB/uV,KAAK+yB,SAH3DhmB,EAAG8iB,EAAMk/T,gBAAiB/hV,EAAG,GAK3ChN,KAAKqwV,UAAUrB,EAAU/8U,IAAUk+U,EACnCnwV,KAAKswV,aAAar+U,EAAOi+E,EAAW8+P,EAAShvV,KAAK+yB,SAAYhmB,EAAG,EAAGC,EAAG,IAGvEhN,KAAKkwV,eAAej+U,EAAO+8U,EAAShvV,KAAK+yB,SAMjDs8T,EAAiBh0V,UAAUg1V,UAAY,SAAU/sV,GAC7C,IAAItC,EAAU0vB,GAAWptB,GACzB,SAAItC,GAAkD,oBAAtCA,EAAQ6R,aAAa,cAA4E,OAAtC7R,EAAQ6R,aAAa,cACtD,iBAAtC7R,EAAQ6R,aAAa,eAU7Bw8U,EAAiBh0V,UAAU60V,eAAiB,SAAUj+U,EAAOs+U,EAASx9T,GAElE/yB,KAAKwwV,aAAav+U,EAAOs+U,EADV,oBAMnBlB,EAAiBh0V,UAAUm1V,aAAe,SAAUv+U,EAAOs+U,EAASr8U,GAChElU,KAAKywV,oBAAoBF,EAAUt+U,EAAOiC,GACtClU,KAAKwtV,aAAa5rT,cAAc,GAAG4gD,UAAU1rD,UAC7Cy5T,EAAUvwV,KAAKwtV,aAAaxsV,QAAQsC,GAAK,uBACzCtD,KAAKywV,oBAAoBF,EAAU,SAAWt+U,EAAOiC,GACrDlU,KAAKywV,oBAAoBF,EAAU,QAAUt+U,EAAOiC,GACpDlU,KAAKywV,oBAAoBF,EAAU,aAAet+U,EAAOiC,KAMjEm7U,EAAiBh0V,UAAUo1V,oBAAsB,SAAUntV,EAAI4Q,GAC3D,IAAIlT,EAAU0vB,GAAWptB,GACrBtC,GACAA,EAAQwC,aAAa,YAAa0Q,IAM1Cm7U,EAAiBh0V,UAAUi1V,aAAe,SAAUr+U,EAAOi+E,EAAWqgQ,EAASx9T,GAC3E,IAAI7e,EAAW,cAAgBg8E,EAAUnjF,EAAIgmB,EAAOhmB,GAAK,MAAQmjF,EAAUljF,EAAI+lB,EAAO/lB,GAAK,IAC3FhN,KAAKwwV,aAAav+U,EAAOs+U,EAASr8U,IAE/Bm7U,KC3MPxjQ,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAoBxCwkQ,GAAyB,SAAUhkQ,GAEnC,SAASgkQ,IACL,OAAkB,OAAXhkQ,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAyJ/D,OA3JA6rF,GAAU6kQ,EAAShkQ,GAQnBgkQ,EAAQr1V,UAAUs1V,eAAiB,SAAU9gU,EAAO9Q,GAChD/e,KAAKwtV,aAAe39T,EACpB,IAAIV,EAAO9iB,KAAK8T,IAAI0P,EAAM+tM,gBAAgB5nN,MAAO6Z,EAAM+tM,gBAAgB7nN,QACvE/V,KAAK4wV,WAAW7xU,GAChB/e,KAAK4M,OAASiyB,GAAe9f,EAAOnS,OAAQuiB,EAAO,GACnDnvB,KAAKgnC,YAAcnI,GAAe9f,EAAOioB,YAAahnC,KAAK4M,QAC3D5M,KAAKyvV,YAA4C,WAA9B1wU,EAAOyjE,UAAUtuE,UAA2BlU,KAAK4M,OAAS5M,KAAKgnC,aAAe,EAAKhnC,KAAKgnC,YACtGhnC,KAAK4M,OAASiyB,GAAe9f,EAAOyjE,UAAUquQ,eAAep0V,QAAU,KAAM0yB,EAAO,GACzFU,EAAMk/T,gBAAkBhwU,EAAOoxU,QAAUtxT,GAAe9f,EAAO+xU,cAAe9wV,KAAK4M,QAAU,EAC7F5M,KAAK+wV,WAAWlhU,EAAO9Q,GACvB/e,KAAKgxV,kBAAkBjyU,EAAQA,EAAOyjE,UAAU1rD,QAAS/X,EAAOyjE,UAAUtuE,UAC1ElU,KAAKgmC,YAAc,MAMvB0qT,EAAQr1V,UAAU01V,WAAa,SAAUvD,EAAczuU,GACnD/e,KAAKwtV,aAAeA,EACpBxtV,KAAK+yB,QACDhmB,EAAG8xB,GAAe,MAAO2uT,EAAa5vH,gBAAgB5nN,OAAUw3U,EAAa5vH,gBAAiB,EAC9F5wN,EAAG6xB,GAAe,MAAO2uT,EAAa5vH,gBAAgB7nN,QAAWy3U,EAAa5vH,gBAAiB,GAEnG,IAAIqzH,EAAmBjxV,KAAKkxV,eAAenyU,GACvCoyU,EAAyB,IAAIl+T,GAAcg+T,EAAiBlkV,EAAIkkV,EAAiBj7U,MAAQ,EAAGi7U,EAAiBjkV,EAAIikV,EAAiBl7U,OAAS,GAC/I/V,KAAK+yB,OAAOhmB,GAAM/M,KAAK+yB,OAAOhmB,EAAIokV,EAAuBpkV,EACzD/M,KAAK+yB,OAAO/lB,GAAMhN,KAAK+yB,OAAO/lB,EAAImkV,EAAuBnkV,EACzDhN,KAAKwtV,aAAaz6T,OAAS/yB,KAAK+yB,QAKpC29T,EAAQr1V,UAAUu1V,WAAa,SAAU7xU,GACrC,IAAI4mB,EAAWloC,EAAkBshB,EAAO4mB,UAAY5mB,EAAO+U,WAAa/U,EAAO4mB,SAC/E3lC,KAAKgmC,YAAcL,EAAW5mB,EAAO+U,YAAc,IACnD9zB,KAAK8zB,WAAa/U,EAAO+U,WAAa,GACtC9zB,KAAKgmC,WAAahmC,KAAKgmC,YAAc,EAAK,IAAMhmC,KAAKgmC,WAAchmC,KAAKgmC,WACxEhmC,KAAK8zB,YAAc9zB,KAAK8zB,WAAa,EAAK9zB,KAAK8zB,WAAa,IAAO9zB,KAAK8zB,YAAc,KAM1F48T,EAAQr1V,UAAU21V,kBAAoB,SAAUjyU,EAAQ+X,EAAS5iB,GAC7D,IAAIoxU,EAAoBtlV,KAAKkxV,eAAenyU,GAC5CA,EAAOumU,kBAAoBA,EAC3BvmU,EAAO6vU,WAAa,IAAIr5T,GAAK+vT,EAAkBv4U,EAAGu4U,EAAkBt4U,EAAGs4U,EAAkBtvU,MAAQsvU,EAAkBv4U,EAAGu4U,EAAkBvvU,OAASuvU,EAAkBt4U,GAC/J8pB,GAAwB,YAAb5iB,IACX6K,EAAO6vU,WAAa,IAAIr5T,GAAK62C,EAAAA,EAAUA,EAAAA,GAAWA,EAAAA,GAAWA,EAAAA,KAOrEskR,EAAQr1V,UAAU61V,eAAiB,SAAUnyU,GACzC,IAAI2T,EAAO,IAAI6C,GAAK62C,EAAAA,EAAUA,EAAAA,GAAWA,EAAAA,GAAWA,EAAAA,GACpDpsE,KAAK4wV,WAAW7xU,GAChB,IAAIxhB,EAAQyC,KAAK8zB,WACb+0H,EAAQ7oJ,KAAKgmC,WACbhnB,GAAOhf,KAAK8zB,WAAa+0H,GAAS,IACtC7pI,EAAe,IAARA,EAAa,IAAMA,EAC1BD,EAAO4vU,cAAcj8T,EAAM1yB,KAAKoxV,iBAAiB7zV,IACjDwhB,EAAO4vU,cAAcj8T,EAAM1yB,KAAKoxV,iBAAiBpyU,IACjDD,EAAO4vU,cAAcj8T,EAAM,IAAI6C,GAAKv1B,KAAK+yB,OAAOhmB,EAAG/M,KAAK+yB,OAAO/lB,EAAG,EAAG,IACrE,IAAIqkV,GAA0C,GAAzBhlV,KAAKkT,MAAMhiB,EAAQ,IAAW,IAAM,IACrD+zV,EAAuC,GAAvBjlV,KAAKkT,MAAMP,EAAM,IAAY,IACjDsyU,EAAiC,IAAjBA,EAAsB,IAAMA,GACxCzoM,GAAS,IAAMyoM,IAAiBD,KAChCtyU,EAAO4vU,cAAcj8T,EAAM1yB,KAAKoxV,iBAAiBC,IACjDtyU,EAAO4vU,cAAcj8T,EAAM1yB,KAAKoxV,iBAAiBE,MAEvC,IAAV/zV,GAAgBA,EAAQsrJ,GAAS,MACjC9pI,EAAO4vU,cAAcj8T,EAAM1yB,KAAKoxV,iBAAiB,IAGrD,IAAK,IADD30V,EAAS40V,IAAkBC,EAAe,EAAIjlV,KAAKkT,MAAMspI,EAAQ,IAC5D1sJ,EAAI,EAAGA,EAAIM,EAAQN,MACxBk1V,GAAgC,IACXC,GAAgBtyU,EAAMzhB,GAAoB,MAAVsrJ,IACjD9pI,EAAO4vU,cAAcj8T,EAAM1yB,KAAKoxV,iBAAiBC,IAKzD,OAFA3+T,EAAK1c,OAAS0c,EAAK3lB,EACnB2lB,EAAK3c,QAAU2c,EAAK1lB,EACb0lB,GAKXg+T,EAAQr1V,UAAU+1V,iBAAmB,SAAUzvU,GAC3C,IAAIuX,EAAWrG,GAAiBlR,EAAO3hB,KAAK4M,OAAQ5M,KAAK+yB,QACzD,OAAO,IAAIwC,GAAK2D,EAASnsB,EAAGmsB,EAASlsB,EAAG,EAAG,IAK/C0jV,EAAQr1V,UAAU+qC,WAAa,SAAUrT,EAAQx1B,EAAOyhB,EAAKpS,EAAQo6B,GACjE,IAAIlU,EAAS9T,EAAMzhB,EAEf0yF,GADJn9D,EAASA,EAAS,EAAKA,EAAS,IAAOA,GAClB,IAAO,EAAI,EAChC,OAAKkU,GAA+B,IAAhBA,EAIThnC,KAAKuxV,gBAAgBx+T,EAAQF,GAAiBt1B,EAAOqP,EAAQmmB,GAASF,GAAiB7T,EAAKpS,EAAQmmB,GAASnmB,EAAQimB,GAAiBt1B,EAAOypC,EAAajU,GAASF,GAAiB7T,EAAKgoB,EAAajU,GAASiU,EAAaipD,GAH5NjwF,KAAKwxV,WAAWz+T,EAAQF,GAAiBt1B,EAAOqP,EAAQmmB,GAASF,GAAiB7T,EAAKpS,EAAQmmB,GAASnmB,EAAQqjF,IAS/HygQ,EAAQr1V,UAAUm2V,WAAa,SAAUz+T,EAAQx1B,EAAOyhB,EAAKpS,EAAQk6B,GACjE,MAAO,KAAO/T,EAAOhmB,EAAI,IAAMgmB,EAAO/lB,EAAI,MAAQzP,EAAMwP,EAAI,IAAMxP,EAAMyP,EAAI,MAAQJ,EAAS,IACzFA,EAAS,MAAQk6B,EAAY,MAAQ9nB,EAAIjS,EAAI,IAAMiS,EAAIhS,EAAI,MAKnE0jV,EAAQr1V,UAAUk2V,gBAAkB,SAAUx+T,EAAQx1B,EAAOyhB,EAAKpS,EAAQg6B,EAAYC,EAAUG,EAAaF,GACzG,MAAO,KAAOvpC,EAAMwP,EAAI,IAAMxP,EAAMyP,EAAI,MAAQJ,EAAS,IAAMA,EAAS,MAAQk6B,EAC5E,MAAQ9nB,EAAIjS,EAAI,IAAMiS,EAAIhS,EAAI,MAAQ65B,EAAS95B,EAAI,IAAM85B,EAAS75B,EAAI,MAAQg6B,EAC9E,IAAMA,EAAc,MAAQF,EAAY,MAAQF,EAAW75B,EAAI,IAAM65B,EAAW55B,EAAI,MAK5F0jV,EAAQr1V,UAAU+xO,YAAc,SAAU/rO,EAAO0d,GAC7C,IAEI/hB,EAFA+C,EAAQC,KACR8zB,EAAa/U,EAAO+U,WAAa,GAEjClnB,EAAmG,IAA1FP,KAAKC,IAAItM,KAAKwtV,aAAax4T,cAAcjf,OAAQ/V,KAAKwtV,aAAax4T,cAAchf,OAC9FpJ,QAAUA,EACV,IAAI2qB,EAASD,GAAqB,UAClC,IAAIQ,OAAcC,QAAQ12B,GACtB6J,SAAU6T,EAAO6vB,UAAU1jC,SAC3BrL,MAAOkf,EAAO6vB,UAAU/uC,MACxBm4B,SAAU,SAAU/3B,GAChBjD,EAAQu6B,EAAOt3B,EAAKg4B,UAAWnE,EAAY/zB,EAAMimC,WAAY/lC,EAAKiL,UAClE7J,EAAMmC,aAAa,IAAKzD,EAAMqmC,WAAWrmC,EAAMgzB,OAAQe,EAAY92B,EAAO4P,EAAQ,KAEtFoS,IAAK,SAAU/e,GACXoB,EAAMmC,aAAa,IAAKzD,EAAMqmC,WAAWrmC,EAAMgzB,OAAQ,EAAG,UAAWnmB,EAAQ,IAC7E7M,EAAMytV,aAAa9mU,Q1MlKJ,qB0MkKiC3H,OAAQA,EAAQyuU,aAAcztV,EAAMytV,eAC/D98T,GAAW3wB,EAAMytV,aAAaxsV,QAAQsC,GAAK,qBAAuByb,EAAO9M,OAC/EvN,MAAMC,WAAa5E,EAAMytV,aAAajlQ,YAAc,SAAW,cAInFmoQ,GACTrB,ICjLExjQ,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCulQ,GAA2B,SAAU/kQ,GAErC,SAAS+kQ,IACL,OAAkB,OAAX/kQ,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA0D/D,OA5DA6rF,GAAU4lQ,EAAW/kQ,GAQrB+kQ,EAAUp2V,UAAU4zV,YAAc,SAAU97T,EAAOpU,EAAQ8Q,EAAOynE,GAC9D,IAAInlE,EAAMpT,EAAOwuU,YACbz6T,EAAS,EAAUzmB,KAAKE,IAAI4mB,EAAMnmB,GAAKmlB,EAAQnyB,KAAe,WAAK,KAKvE,OAJAs3F,EAAOx9D,EAAI95B,KAAK0xV,cAAcv+T,EAAOL,GACrCK,EAAMi9T,UAAYpwV,KAAK8zB,WAAchB,EAAS,GAAM,IACpDK,EAAMwS,SAAW3lC,KAAK8zB,WAAa,IACnCX,EAAMs9S,eAAiB59S,GAAiBM,EAAMi9T,UAAWpwV,KAAK4M,OAAS5M,KAAKgnC,aAAe,EAAGhnC,KAAK+yB,QAC5FukE,GAKXm6P,EAAUp2V,UAAUq2V,cAAgB,SAAUv+T,EAAOL,GACjD,GAAe,OAAXA,IAAoBK,EAAMnmB,EAC1B,MAAO,GAEX,IAAIkQ,EAAOld,KAAKomC,WAAWpmC,KAAK+yB,OAAQ/yB,KAAK8zB,WAAa,KAAM9zB,KAAK8zB,WAAahB,GAAU,IAAK9yB,KAAK4M,OAAQ5M,KAAKgnC,aAEnH,OADAhnC,KAAK8zB,YAAchB,EACZ5V,GAMXu0U,EAAUp2V,UAAU8xO,cAAgB,SAAUqgH,EAAcl2P,EAAQv4E,EAAQ1d,GACxE,IAAIswV,EAAUnE,EAAaxsV,QAAQsC,GAAK,cAAgByb,EAAO9M,MAC/D,GAAI8M,EAAO6vB,UAAU3O,QAAUutT,EAAargH,cAAe,CACvD,IAAIkF,EAAWm7G,EAAaz9T,SAAS0qF,gBAAiBn3G,GAAIquV,EAAU,cAChEz0U,EAAO,IAAIuY,GAAWk8T,EAAU,SAAU,cAAe,EAAG,cAAe,EAAG,GAAI,IAClFC,EAAYpE,EAAaz9T,SAASyF,SAAStY,GAC/Cm1N,EAAS1wO,YAAYiwV,GACrBpE,EAAah9T,UAAU7uB,YAAY0wO,GACnChxO,EAAMmC,aAAa,QAAS,kBAAoB6uO,EAAS/uO,GAAK,KAC9DtD,KAAKotO,YAAYwkH,EAAW7yU,KAMpC0yU,EAAUp2V,UAAU0kC,cAAgB,WAChC,MAAO,aAOX0xT,EAAUp2V,UAAUiX,QAAU,SAAUk7U,KAKjCiE,GACTf,IC7EE7kQ,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAmC5Dy0T,GAAmC,SAAUnlQ,GAM7C,SAASmlQ,EAAkB7+U,EAAShS,GAChC,IAAIjB,EAAQ2sF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAInD,OAFAD,EAAMgvV,gBAAkB,EACxBhvV,EAAMwlT,QAAU,MACTxlT,EA6zBX,OAv0BA8rF,GAAUgmQ,EAAmBnlQ,GAY7BpuF,OAAOuJ,eAAegqV,EAAkBx2V,UAAW,QAE/CqM,IAAK,WACD,OAAI1H,KAAK+e,QAAU/e,KAAK+e,OAAOtiB,OACpBuD,KAAK+e,OAAO,GAAGrY,KAEnB,OAEXiB,YAAY,EACZC,cAAc,IAMlBiqV,EAAkBx2V,UAAUoX,UAAY,WAIpC,GAHAzS,KAAKogH,eACLpgH,KAAK2N,aACL3N,KAAKmtO,eAAgB,EACG,KAApBntO,KAAKgB,QAAQsC,GAAW,CACxB,IAAIwkC,EAAatnC,SAASkN,uBAAuB,uBAAuBjR,OACxEuD,KAAKgB,QAAQsC,GAAK,aAAetD,KAAKulT,QAAU,IAAMz9Q,EAE1DjI,GAAc7/B,MACdA,KAAKykB,cAKTotU,EAAkBx2V,UAAUwgB,SAAW,WAEnC7b,KAAK01B,WAAa9I,GAAc5sB,KAAKqb,QAKzCw2U,EAAkBx2V,UAAUsyG,OAAS,WACjC3tG,KAAK0mB,Q5M7FK,Q4M6FW8mU,aAAcxtV,OACnCA,KAAK6b,WACL7b,KAAK8xV,cAAgB,IAAIzC,GAAiBrvV,MAC1CA,KAAK6uV,gBAAkB,IAAI4C,GAAUzxV,MACrCA,KAAK6lT,yBACL7lT,KAAKsgF,eAKTuxQ,EAAkBx2V,UAAU+kH,aAAe,WAEvC,IAAI2xO,EAAgBvmV,GAAQC,UACxBlO,EAAQiO,GAAQigF,gBAChBb,EAAOp/E,GAAQkgF,eACf7sE,EAAOrT,GAAQmgF,cACftzD,EAAS05T,EAAgB,eAAiB,aAE9CxsV,GAAahB,OAAOvE,KAAKgB,QAAS4pF,EAAM5qF,KAAKgyV,uBAC7CzsV,GAAahB,OAAOvE,KAAKgB,QAAS6d,EAAM7e,KAAKiyV,sBAC7C1sV,GAAahB,OAAOvE,KAAKgB,QAASzD,EAAOyC,KAAKkyV,wBAC9C3sV,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAKmyV,0BAChD5sV,GAAahB,OAAOvE,KAAKgB,QAAS,cAAehB,KAAKoyV,wBACtD7sV,GAAahB,OAAOvE,KAAKgB,QAASq3B,EAAQr4B,KAAKqyV,wBAC/Cx2V,OAAOe,oBAAqB4O,GAAQwlB,SAAY,gBAAiBn1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKsyV,qBAKxJT,EAAkBx2V,UAAUopB,WAAa,WAErC,IAAIstU,EAAgBvmV,GAAQC,UACxBlO,EAAQiO,GAAQigF,gBAChB5sE,EAAOrT,GAAQmgF,cACff,EAAOp/E,GAAQkgF,eACfrzD,EAAS05T,EAAgB,eAAiB,aAE9CxsV,GAAanB,IAAIpE,KAAKgB,QAAS4pF,EAAM5qF,KAAKgyV,sBAAuBhyV,MACjEuF,GAAanB,IAAIpE,KAAKgB,QAAS6d,EAAM7e,KAAKiyV,qBAAsBjyV,MAChEuF,GAAanB,IAAIpE,KAAKgB,QAASzD,EAAOyC,KAAKkyV,uBAAwBlyV,MACnEuF,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAKmyV,yBAA0BnyV,MACvEuF,GAAanB,IAAIpE,KAAKgB,QAAS,cAAehB,KAAKoyV,uBAAwBpyV,MAC3EuF,GAAanB,IAAIpE,KAAKgB,QAASq3B,EAAQr4B,KAAKqyV,uBAAwBryV,MACpEnE,OAAOa,iBAAkB8O,GAAQwlB,SAAY,gBAAiBn1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKsyV,mBAAmBh3V,KAAK0E,OACzK,IAAIy7G,GAAMz7G,KAAKgB,SAEfhB,KAAK+kQ,SAAS/kQ,KAAKgB,UAKvB6wV,EAAkBx2V,UAAU4vT,WAAa,SAAUpqT,GAC/C,IAAIiL,EACAI,EACA68D,EAAUr4C,GAAW1wB,KAAKgB,QAAQsC,GAAK,QAAQsI,wBAC/C8mB,EAAO1yB,KAAKgB,QAAQ4K,wBACxB,GAAI/K,EAAE6F,KAAKnI,QAAQ,UAAY,EAAG,CAC9ByB,KAAKgxB,SAAU,EACf,IAAIo6R,EAAWvqT,EACfqL,EAAQk/S,EAAShrP,eAAe,GAAGpK,QACnClqD,EAAQs/S,EAAShrP,eAAe,GAAGrK,aAGnC/1D,KAAKgxB,QAA4B,UAAlBnwB,EAAE0pT,aAA6C,MAAlB1pT,EAAE0pT,YAC9Cz+S,EAAQjL,EAAEk1D,QACV7pD,EAAQrL,EAAEm1D,QAEdh2D,KAAKmmO,OAAUj6N,EAAQwmB,EAAKhmB,IAAOL,KAAKC,IAAIy8D,EAAQr8D,IAAMgmB,EAAKhmB,IAAK,GACpE1M,KAAKkmO,OAAUp6N,EAAQ4mB,EAAKlmB,KAAQH,KAAKC,IAAIy8D,EAAQv8D,KAAOkmB,EAAKlmB,KAAM,IAO3EqlV,EAAkBx2V,UAAU42V,qBAAuB,SAAUpxV,GAazD,OAZAb,KAAKirT,WAAWpqT,GAChBb,KAAK0mB,QAAQkyM,IAAgBzxN,OAAQtG,EAAEsG,OAAO7D,GAAIyJ,EAAG/M,KAAKkmO,OAAQl5N,EAAGhN,KAAKmmO,SACtEnmO,KAAKgxB,UACLhxB,KAAK2rT,aAAa9qT,EAAGb,KAAKkmO,OAAQlmO,KAAKmmO,OAAQnmO,KAAKgxB,SAChDhxB,KAAKyuV,6BAA+BzuV,KAAK4hC,cAAc,GAAG4gD,UAAU1rD,SACpE92B,KAAKyuV,4BAA4B7jQ,KAAK/pF,EAAGb,KAAKkmO,OAAQlmO,KAAKmmO,OAAQnmO,KAAKgxB,SAExEhxB,KAAK8uV,0BAA4B9uV,KAAKiwO,eAAen5M,SACrD92B,KAAK8uV,yBAAyBlkQ,KAAK/pF,IAG3Cb,KAAK+N,OAAOvC,GAAQmgF,cAAe9qF,IAC5B,GAYXgxV,EAAkBx2V,UAAU62V,uBAAyB,SAAUrxV,GAG3D,OAFAb,KAAKirT,WAAWpqT,GAChBb,KAAK0mB,QAAQiyM,IAAkBxxN,OAAQtG,EAAEsG,OAAO7D,GAAIyJ,EAAG/M,KAAKkmO,OAAQl5N,EAAGhN,KAAKmmO,UACrE,GAOX0rH,EAAkBx2V,UAAUi3V,mBAAqB,SAAUzxV,GACvD,IAAId,EAAQC,KACZA,KAAKmtO,eAAgB,EACrB,IAAIltO,GACAutV,aAAcxtV,KACdmrT,aAAc,IAAI17R,GAAKzvB,KAAKg1B,cAAchf,MAAOhW,KAAKg1B,cAAcjf,QACpEghB,K5M3KS,U4M4KTm0R,YAAa,IAAIz7R,GAAK,EAAG,IAgB7B,OAdIzvB,KAAK8jT,UACL5jT,aAAaF,KAAK8jT,UAEtB9jT,KAAK8jT,SAAW3jT,WAAW,WACnBJ,EAAMwoF,YACNroF,aAAaH,EAAM+jT,WAGvBjkR,GAAc9/B,GACdE,EAAKirT,YAAcnrT,EAAMi1B,cACzBj1B,EAAM2mB,Q5MxLG,U4MwLczmB,GACvBF,EAAMmlV,gBACNnlV,EAAMqqO,iBACP,MACI,GAKXynH,EAAkBx2V,UAAU8oT,OAAS,SAAUz9S,EAAM26O,EAAUzoN,EAAawrR,EAAUpuS,EAAOD,GACvE,IAAI8tS,GAAY7jT,MACtBmkT,OAAOz9S,EAAM26O,EAAUzoN,EAAcwrR,IAAuBpkT,MAAQgW,EAAOD,IAK3F87U,EAAkBx2V,UAAU0F,MAAQ,SAAUuC,GACxB,IAAIugT,GAAY7jT,MACtBe,MAAMuC,IAKtBuuV,EAAkBx2V,UAAU0pQ,SAAW,SAAU/jQ,GAC7CA,EAAQ0D,MAAMg3G,YAAc,UAC5B16G,EAAQ0D,MAAMkmT,cAAgB,UAC9B5pT,EAAQ0D,MAAMmmT,iBAAmB,OACjC7pT,EAAQ0D,MAAMomT,aAAe,OAC7B9pT,EAAQ0D,MAAMqmT,iBAAmB,OACjC/pT,EAAQ0D,MAAMwP,SAAW,YAK7B29U,EAAkBx2V,UAAUmxT,mBAAqB,SAAUC,EAAiB7xR,GACxE,IACI55B,EADAqmD,EAAarnD,KAAKowD,YAAYq8P,GAE9BhsT,EAAaiwB,GAAW1wB,KAAKgB,QAAQsC,GAAK,2BAC1Cs3B,IACAysB,EAAWzsB,QAAUA,EACjBn6B,GACAO,EAAUhB,KAAKmB,cAAc,OAC7BsvB,GAAczwB,KAAKgB,QAAQsC,GAAK,eAAiBmpT,GACjDzsT,KAAKmoT,iBAAiBuE,kBAAkBrlQ,EAAYolQ,EAAiBzrT,GACrEP,EAAWkB,YAAYX,EAAQoZ,SAAS,KAGxCpa,KAAKmoT,iBAAiBC,kBAAkB13R,GAAW1wB,KAAKgB,QAAQsC,GAAK,yBASjFuuV,EAAkBx2V,UAAU22V,sBAAwB,SAAUnxV,GAgB1D,OAfAb,KAAKirT,WAAWpqT,GAChBb,KAAK0mB,QAAQ8xM,IAAkBrxN,OAAQtG,EAAEsG,OAAO7D,GAAIyJ,EAAG/M,KAAKkmO,OAAQl5N,EAAGhN,KAAKmmO,SACxEnmO,KAAK0rT,WACL1rT,KAAKyrT,kB5MhQM,Y4MgQuB5qT,EAAEsG,QAEpCnH,KAAK8uV,0BAA4B9uV,KAAKiwO,eAAen5M,SACrD92B,KAAK8uV,yBAAyBlkQ,KAAK/pF,GAEnCb,KAAKyuV,6BAA+BzuV,KAAK4hC,cAAc,IAAM5hC,KAAK4hC,cAAc,GAAG4gD,UAAU1rD,SAC7F92B,KAAKyuV,4BAA4B7jQ,KAAK/pF,EAAGb,KAAKkmO,OAAQlmO,KAAKmmO,QAE1DnmO,KAAKgxB,SACNhxB,KAAK2rT,aAAa9qT,EAAGb,KAAKkmO,OAAQlmO,KAAKmmO,QAE3CnmO,KAAK+N,OAAOvC,GAAQkgF,eAAgB7qF,IAC7B,GAEXgxV,EAAkBx2V,UAAUswT,aAAe,SAAUrvT,EAAOyQ,EAAGC,EAAGgkB,GAC9D,IAAImW,EAAW7qC,EAAM6K,OAAO7D,GACvBhH,EAAM6K,OAAO6U,YAAYzd,QAAQ,QAAU,GAAO4oC,IAAcnnC,KAAKgB,QAAQsC,GAAK,SACnFwtB,GAAY9wB,KAAK0gC,MAAO3zB,EAAGC,EAAGhN,KAAKgB,QAAQ4D,YAAa5E,KAAKgB,QAAQsC,GAAK,qBAAsBotB,GAAW1wB,KAAKgB,QAAQsC,GAAK,sBAAuB0tB,GAGpJP,GAAczwB,KAAKgB,QAAQsC,GAAK,uBAQxCuuV,EAAkBx2V,UAAU82V,yBAA2B,SAAUtxV,GAe7D,OAdAb,KAAKirT,WAAWpqT,GACZb,KAAK8uV,0BAA4B9uV,KAAKiwO,eAAen5M,SACrD92B,KAAK8uV,yBAAyB77N,MAAMpyH,GAEb,SAAvBb,KAAKqmO,eAA4BrmO,KAAKiwV,6BACtCjwV,KAAKiwV,4BAA4BtV,0BAA0B36U,KAAMa,GAEjEb,KAAK4hC,cAAc,GAAGuuT,SACtBnwV,KAAK8xV,cAAcnC,eAAe9uV,GAEtCb,KAAK0mB,QAAQ+xM,IAAmBtxN,OAAQtG,EAAEsG,OAAO7D,GAAIyJ,EAAG/M,KAAKkmO,OAAQl5N,EAAGhN,KAAKmmO,SACzEnmO,KAAKwrT,YACLxrT,KAAKyrT,kB5M3SO,a4M2SuB5qT,EAAEsG,SAElC,GAEX0qV,EAAkBx2V,UAAUowT,kBAAoB,SAAUnvT,EAAO0E,GAC7D,IAAIo6U,EAAUpnT,GAAYhzB,EAAQsC,IAAI,GAClC83U,EAAQr8T,QAAU,GAAKq8T,EAAQjoT,OAAS,GACxCnzB,KAAK0mB,QAAQpqB,GAASyiB,OAAQ/e,KAAK+e,OAAOq8T,EAAQr8T,QAC9CoU,MAAOnzB,KAAK+e,OAAOq8T,EAAQr8T,QAAQkY,OAAOmkT,EAAQjoT,OAClDwiM,YAAaylH,EAAQr8T,OAAQ6Y,WAAYwjT,EAAQjoT,MACjDpmB,EAAG/M,KAAKkmO,OAAQl5N,EAAGhN,KAAKmmO,UAQpC0rH,EAAkBx2V,UAAU+2V,uBAAyB,SAAU91V,GAC3D,OAAsB,IAAlBA,EAAMy2H,SAAuC,UAAtBz2H,EAAMiuT,cAC7BjuT,EAAMopB,iBACNppB,EAAMiqI,mBACC,IASfsrN,EAAkBx2V,UAAUg3V,uBAAyB,SAAUxxV,GAI3D,OAHAb,KAAKirT,WAAWpqT,GAChBb,KAAK0mB,QAAQgyM,IAAmBvxN,OAAQtG,EAAEsG,OAAO7D,GAAIyJ,EAAG/M,KAAKkmO,OAAQl5N,EAAGhN,KAAKmmO,SAC7EnmO,KAAK+N,OAAOvC,GAAQC,UAAY,eAAiB,aAAc5K,IACxD,GAKXgxV,EAAkBx2V,UAAUsS,WAAa,WACrC3N,KAAK0wE,KAAO,IAAI27B,IAKpBwlP,EAAkBx2V,UAAUk3V,aAAe,WACvCvyV,KAAK4pT,YACLppR,GAAUxgC,OAOd6xV,EAAkBx2V,UAAUuuT,UAAY,WAEpC,GADAn5R,GAAczwB,KAAKgB,QAAQsC,GAAK,sBAC5BtD,KAAKwwB,UAAW,CAChB,KAAOxwB,KAAKwwB,UAAUjf,WAAW9U,OAAS,GACtCuD,KAAKwwB,UAAUlrB,YAAYtF,KAAKwwB,UAAUzT,aAEzC/c,KAAKwwB,UAAU8K,iBAAmBt7B,KAAKwwB,UAAU/vB,YAClD8D,EAAOvE,KAAKwwB,WAGpBC,GAAc,sBACdA,GAAc,0BAKlBohU,EAAkBx2V,UAAUm3V,uBAAyB,WACjDxyV,KAAKgB,QAAQW,YAAY3B,KAAKmB,cAAc,OACxCmC,GAAItD,KAAKgB,QAAQsC,GAAK,qBACtBC,OAAQ,yBAMhBsuV,EAAkBx2V,UAAUwqT,uBAAyB,WACjD7lT,KAAK4hC,iBACL,IAAK,IAAIzlC,EAAI,EAAG8+B,EAAWj7B,KAAK+e,OAAOtiB,OAAQN,EAAI8+B,EAAU9+B,IAEzD,GADA6D,KAAK+e,OAAO5iB,GAAG8V,MAAQ9V,EACnB6D,KAAK+e,OAAO5iB,GAAGuK,OAAS1G,KAAK0G,MAAsC,IAA9B1G,KAAK4hC,cAAcnlC,OAAc,CACtEuD,KAAK4hC,cAAcp9B,KAAKxE,KAAK+e,OAAO5iB,IACpC,QAOZ01V,EAAkBx2V,UAAUilF,YAAc,SAAUqtB,QACjC,IAAXA,IAAqBA,GAAS,GAClC3tG,KAAK0tV,aAAe,EACpB,IAAK,IAAItvV,EAAK,EAAGyE,EAAK7C,KAAK4hC,cAAexjC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAI2gB,EAASlc,EAAGzE,GAChB2gB,EAAOgrN,WAAa,IAAI4D,GAAK5uN,EAAO+lD,YAAc9kE,KAAK8kE,WAAY/lD,EAAO+9C,OAC1E/9C,EAAO8qN,mBAAmB7pO,KAAM2tG,KAOxCkkP,EAAkBx2V,UAAU+uO,aAAe,WACvCpqO,KAAKyyV,qBACLzyV,KAAKuyV,eACLvyV,KAAK8vS,kBACL9vS,KAAKsmT,iBACL,IAAItlT,EAAUR,SAASyuB,eAAe,oBAClCjuB,GACAA,EAAQuD,UAMhBstV,EAAkBx2V,UAAUo3V,mBAAqB,WAC7C,IAAI1zU,EAAS/e,KAAK4hC,cAAc,GAC3BnkC,EAAkBshB,EAAO0uU,aAAkBhwV,EAAkBshB,EAAOmvU,cACrEnvU,EAAOmvU,cAAgBnvU,EAAO+uU,SAC9B/uU,EAAOo5B,UAAUp5B,EAAO0uU,WAAYztV,OAM5C6xV,EAAkBx2V,UAAUy0S,gBAAkB,WAC1C9vS,KAAK49N,gBAAkB,IAAIroM,GAAKv1B,KAAKi9B,OAAOzwB,KAAMxM,KAAKi9B,OAAOvwB,IAAK1M,KAAKg1B,cAAchf,MAAOhW,KAAKg1B,cAAcjf,QAChH/V,KAAK2gC,mBACL3gC,KAAK2gC,gBAAkBF,GAASzgC,KAAK0gC,MAAO1gC,KAAKkhC,WAAYlhC,KAAK49N,gBAAgB5nN,OAClF4c,GAAa5yB,KAAK49N,gBAAiB,IAAIroM,GAAK,EAAI1G,GAAY7uB,KAAK0gC,MAAO1gC,KAAKkhC,YAAYnrB,OAAS/V,KAAK2gC,gBAAgBlkC,OAASuD,KAAKi9B,OAAOxwB,MAAQzM,KAAKi9B,OAAOzwB,KAAMxM,KAAKi9B,OAAOtwB,OAAS3M,KAAKi9B,OAAOvwB,MACvM1M,KAAKowO,yBAKTyhH,EAAkBx2V,UAAU+0O,sBAAwB,WAChD,IAAKpwO,KAAK8uV,2BAA6B9uV,KAAKiwO,eAAen5M,QACvD,OAAO,KAEX92B,KAAK8uV,yBAAyB3oC,iBAAiBnmT,KAAMA,KAAK4hC,eAC1D5hC,KAAK8uV,yBAAyB1+G,sBAAsBpwO,KAAK49N,gBAAiB59N,KAAKg1B,gBAMnF68T,EAAkBx2V,UAAUirT,eAAiB,WACzCtmT,KAAKumT,eACLvmT,KAAKwmT,cACLxmT,KAAKwyV,yBACLxyV,KAAKksO,eACLlsO,KAAK+wO,eACL/wO,KAAKgB,QAAQW,YAAY3B,KAAKwwB,WAC9BxwB,KAAK0yV,mBACL1yV,KAAK2vV,iBACL3vV,KAAK8mT,mBACL9mT,KAAK6mT,8BACL7mT,KAAK0mB,QAAQ,UAAY8mU,aAAcxtV,OACvCA,KAAKmtO,eAAgB,GAKzB0kH,EAAkBx2V,UAAUwrT,4BAA8B,WACtD,IAAI8rC,EAAgBjiU,GAAW1wB,KAAKgB,QAAQsC,GAAK,sBACjD,GAAKqvV,EAAL,CAGA,IAAIjgU,EAAO1yB,KAAKgB,QAAQ4K,wBACpBm9D,EAAUr4C,GAAW1wB,KAAKgB,QAAQsC,GAAK,QAAQsI,wBACnD+mV,EAAcjuV,MAAM8H,KAAOH,KAAKC,IAAIy8D,EAAQv8D,KAAOkmB,EAAKlmB,KAAM,GAAK,KACnEmmV,EAAcjuV,MAAMgI,IAAML,KAAKC,IAAIy8D,EAAQr8D,IAAMgmB,EAAKhmB,IAAK,GAAK,OAKpEmlV,EAAkBx2V,UAAUyrT,iBAAmB,WACvC9mT,KAAKmoT,kBACLnoT,KAAKmoT,iBAAiBC,kBAAkB13R,GAAW1wB,KAAKgB,QAAQsC,GAAK,wBAM7EuuV,EAAkBx2V,UAAUs0V,eAAiB,WACzC,IAAK3vV,KAAK4hC,cAAc,GAAGuuT,QACvB,OAAO,KAEXnwV,KAAK8xV,cAAchC,iBAKvB+B,EAAkBx2V,UAAU6wO,aAAe,WACvClsO,KAAKwwB,UAAU7uB,YAAY3B,KAAK+vB,SAAS+9C,aAAcxqE,GAAItD,KAAKgB,QAAQsC,GAAK,uBAC7E,IAAK,IAAIlF,EAAK,EAAGyE,EAAK7C,KAAK4hC,cAAexjC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAI2gB,EAASlc,EAAGzE,GACZ2gB,EAAO+X,SAAW92B,KAAMo2B,GAAiBrX,EAAOrY,MAAQ,kBACxD1G,KAAMo2B,GAAiBrX,EAAOrY,MAAQ,gBAAiBiqV,eAAe3wV,KAAM+e,GAC5EA,EAAOmtN,aAAalsO,SAOhC6xV,EAAkBx2V,UAAUkrT,aAAe,WACvC,IAAI/rP,EAAUx6D,KAAKilC,OAAOjvB,MAC1BhW,KAAKwwB,UAAU7uB,YAAY3B,KAAK+vB,SAASuU,cAAc,IAAI04L,GAAWh9N,KAAKgB,QAAQsC,GAAK,UAAWtD,KAAKstB,YAActtB,KAAK01B,WAAWpI,WAAYttB,KAAKilC,OAAQ,EAAG,IAAI1P,GAAKilC,EAAU,EAAGA,EAAU,EAAGx6D,KAAKg1B,cAAchf,MAAQwkD,EAASx6D,KAAKg1B,cAAcjf,OAASykD,OAKzQq3R,EAAkBx2V,UAAU01O,aAAe,WACvC,IAAK/wO,KAAK8uV,2BAA6B9uV,KAAKiwO,eAAen5M,QACvD,OAAO,KAEP92B,KAAK8uV,yBAAyB59G,kBAAkBz0O,SACb,QAA/BuD,KAAK4hC,cAAc,GAAGl7B,MACtB1G,KAAK8uV,yBAAyB8D,uBAAuB5yV,KAAK4hC,cAAc,GAAGgtT,WAAY5uV,KAAK8uV,yBAAyBz+G,aAAcrwO,KAAKi9B,QAE5Ij9B,KAAK8uV,yBAAyB/9G,aAAa/wO,KAAMA,KAAKiwO,eAAgBjwO,KAAK8uV,yBAAyBz+G,gBAM5GwhH,EAAkBx2V,UAAUq3V,iBAAmB,WAC3C,IAAK1yV,KAAKiwV,6BAAsD,SAAvBjwV,KAAKqmO,cAC1C,OAAO,KAEX,IAAIgiF,EAAsB3pT,KAAWsB,KAAKiwV,4BAA4B5nC,oBAAqB,MAAM,GACjGroT,KAAKiwV,4BAA4B3nC,gBAAgBtoT,MAC7CqoT,EAAoB5rT,OAAS,IAC7BuD,KAAKiwV,4BAA4B5nC,oBAAsBA,EACvDroT,KAAKiwV,4BAA4B1nC,gBAAgBvoT,KAAMA,KAAKqmO,iBAMpEwrH,EAAkBx2V,UAAUmrT,YAAc,WACtC,IAAKxmT,KAAK0gC,MACN,OAAO,KAEX,IAAIo6L,EAAYjsM,GAAY7uB,KAAK0gC,MAAO1gC,KAAKkhC,YACzCrtB,EAA2C,SAAlC7T,KAAKkhC,WAAWC,cAA2B,QAClB,QAAlCnhC,KAAKkhC,WAAWC,cAA0B,MAAQ,SACtDxL,GAAY,IAAIC,GAAW51B,KAAKgB,QAAQsC,GAAK,SAAUw9B,GAAe9gC,KAAKg1B,cAAeh1B,KAAKi9B,OAAOzwB,KAAMxM,KAAKi9B,OAAOzwB,KAAMxM,KAAKkhC,YAAalhC,KAAKi9B,OAAOvwB,IAA0B,EAAnBouN,EAAU/kN,OAAa,EAAIlC,EAAQ7T,KAAK2gC,gBAAiB,GAAI,QAAS3gC,KAAKkhC,WAAYlhC,KAAKkhC,WAAWrL,OAAS71B,KAAK01B,WAAWtI,WAAYptB,KAAKwwB,YAMxTqhU,EAAkBx2V,UAAU6zV,iBAAmB,WAC3C,OAAOlvV,KAAKwwB,UAAUjvB,qBAAqB,KAAK,IAMpDswV,EAAkBx2V,UAAU6pV,cAAgB,WACxC,IAAK,IAAI9mV,EAAK,EAAGyE,EAAK7C,KAAK4hC,cAAexjC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAI2gB,EAASlc,EAAGzE,GAChB4B,KAAK6yV,cAAc9zU,EAAOkY,UAOlC46T,EAAkBx2V,UAAUw3V,cAAgB,SAAU57T,GAClD,IAAK,IAAI74B,EAAK,EAAG2jC,EAAW9K,EAAQ74B,EAAK2jC,EAAStlC,OAAQ2B,IAAM,CAC5D,IAAI+0B,EAAQ4O,EAAS3jC,GACrB+0B,EAAMkuF,cAAgB,KACtBluF,EAAMktT,YAAc,KACpBltT,EAAMk6T,cAAe,IAO7BwE,EAAkBx2V,UAAU0kC,cAAgB,WACxC,MAAO,qBAMX8xT,EAAkBx2V,UAAUiX,QAAU,WAClCtS,KAAKogH,eACL1zB,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKgB,QAAQ8C,UAAUS,OAAO,wBAOlCstV,EAAkBx2V,UAAU+2F,gBAAkB,WAC1C,IAAIgB,KAuCJ,OArCAA,EAAQ5uF,MACJouF,OAAQ5yF,KAAK0G,KAAO,SACpBzG,MAAOD,QAEPA,KAAKiwO,eAAen5M,SACpBs8D,EAAQ5uF,MACJouF,OAAQ,qBACR3yF,MAAOD,QAGXA,KAAK8yV,2BACL1/P,EAAQ5uF,MACJouF,OAAQ,wBACR3yF,MAAOD,QAGXA,KAAKixB,QAAQgP,QACbmzD,EAAQ5uF,MACJouF,OAAQ,sBACR3yF,MAAOD,QAGY,SAAvBA,KAAKqmO,eACLjzI,EAAQ5uF,MACJouF,OAAQ,wBACR3yF,MAAOD,QAGIA,KAAKowD,YAAYxzB,KAAK,SAAU5/B,GAC/C,OAA0B,OAAlBA,EAAM49B,WAGdw4D,EAAQ5uF,MACJouF,OAAQ,aACR3yF,MAAOD,QAGRozF,GAKXy+P,EAAkBx2V,UAAUy3V,wBAA0B,WAClD,IAAK,IAAI10V,EAAK,EAAGyE,EAAK7C,KAAK+e,OAAQ3gB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAErD,GADayE,EAAGzE,GACLokF,UAAU1rD,QACjB,OAAO,EAGf,OAAO,GAMX+6T,EAAkBx2V,UAAU+yG,eAAiB,WACzC,MAAO,IAMXyjP,EAAkBx2V,UAAU0tF,kBAAoB,SAAUiF,EAASC,GAI/D,IAAK,IAHD12C,GACAw7S,iBAAiB,EAAOhkC,eAAe,GAElC3wT,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,GAAU5vF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACD4B,KAAKmtO,eAAgB,EACrB,MACJ,IAAK,QACL,IAAK,SACL,IAAK,QACL,IAAK,SACD51L,EAAOw3Q,eAAgB,EACvB,MACJ,IAAK,aACG/gO,EAAQ9sD,aAAe8sD,EAAQ9sD,WAAW/R,MAAQ6+D,EAAQ9sD,WAAWN,cACrE2W,EAAOw3Q,eAAgB,EAGvBx3Q,EAAOw7S,iBAAkB,EAE7B,MACJ,IAAK,iBACDx7S,EAAOw3Q,eAAgB,EACvBx3Q,EAAOw7S,iBAAkB,EACzB,MACJ,IAAK,aACD/yV,KAAKsgF,aAAY,GACjB/oC,EAAOw3Q,eAAgB,EACvB,MACJ,IAAK,SAGD,IAAK,IAFDltT,EAAM7B,KAAK+e,OAAOtiB,OAClBwyT,GAAgB,EACX9yT,EAAI,EAAGA,EAAI0F,EAAK1F,IACjB6xF,EAAQjvE,OAAO5iB,KAAO6xF,EAAQjvE,OAAO5iB,GAAG2oE,YAAckpB,EAAQjvE,OAAO5iB,GAAGq2B,OAASw7D,EAAQjvE,OAAO5iB,GAAGksO,SACnG4mF,GAAgB,GAGpBA,IACAjvT,KAAKsgF,aAAY,GACjB/oC,EAAOw3Q,eAAgB,GAE3B,MACJ,IAAK,SACL,IAAK,eACDriO,EAAOrxF,UAAUyvD,QAAQxpD,KAAKtB,MAC9B,MACJ,IAAK,aACL,IAAK,SACL,IAAK,cACL,IAAK,oBACDu3C,EAAOw7S,iBAAkB,EACzB,MACJ,IAAK,gBACL,IAAK,sBACL,IAAK,gBACG/yV,KAAKiwV,8BACDxyV,EAAkBuC,KAAKiwV,4BAA4B5nC,qBACnDroT,KAAKiwV,4BAA4B3nC,gBAAgBtoT,MAGjDA,KAAKiwV,4BAA4B1nC,gBAAgBvoT,KAAMiuF,EAAQo4I,kBAM9E9uL,EAAOw3Q,eAAiBx3Q,EAAOw7S,iBAChC/yV,KAAKuyV,eACLvyV,KAAKsmT,kBAEA/uQ,EAAOw3Q,gBACZ/uT,KAAKklV,gBACLllV,KAAKuyV,eACLvyV,KAAK8vS,kBACL9vS,KAAKsmT,mBAGbl6N,IACIllF,EAAS,OACV2qV,EAAkBx2V,UAAW,aAAS,GACzC+wF,IACIllF,EAAS,OACV2qV,EAAkBx2V,UAAW,cAAU,GAC1C+wF,IACIllF,EAAS,OACV2qV,EAAkBx2V,UAAW,aAAS,GACzC+wF,IACIllF,EAAS,KACV2qV,EAAkBx2V,UAAW,kBAAc,GAC9C+wF,IACIrkF,EAAQ+hN,GAAMkL,eAAgBK,KAC/Bw8H,EAAkBx2V,UAAW,kBAAc,GAC9C+wF,IACIrkF,KAAYwnO,KACbsiH,EAAkBx2V,UAAW,sBAAkB,GAClD+wF,IACIrkF,KAAY8tN,KACbg8H,EAAkBx2V,UAAW,eAAW,GAC3C+wF,IACIllF,EAAS,SACV2qV,EAAkBx2V,UAAW,qBAAiB,GACjD+wF,IACIllF,GAAS,IACV2qV,EAAkBx2V,UAAW,qBAAiB,GACjD+wF,IACI/jF,KAAeotN,KAChBo8H,EAAkBx2V,UAAW,2BAAuB,GACvD+wF,IACIrkF,KAAYytN,KACbq8H,EAAkBx2V,UAAW,cAAU,GAC1C+wF,IACIllF,GAAS,IACV2qV,EAAkBx2V,UAAW,yBAAqB,GACrD+wF,IACIrkF,GAAU8tB,MAAO,UAAW7f,MAAO,GAAKs/M,KACzCu8H,EAAkBx2V,UAAW,cAAU,GAC1C+wF,IACIllF,EAAS,OACV2qV,EAAkBx2V,UAAW,kBAAc,GAC9C+wF,IACI/jF,OAAiBilV,KAClBuE,EAAkBx2V,UAAW,cAAU,GAC1C+wF,IACI/jF,OAAiB6kV,KAClB2E,EAAkBx2V,UAAW,mBAAe,GAC/C+wF,IACIllF,EAAS,aACV2qV,EAAkBx2V,UAAW,aAAS,GACzC+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,cAAU,GAC1C+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,YAAQ,GACxC+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,oBAAgB,GAChD+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,oBAAgB,GAChD+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,kBAAc,GAC9C+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,qBAAiB,GACjD+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,mBAAe,GAC/C+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,wBAAoB,GACpD+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,mBAAe,GAC/C+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,sBAAkB,GAClD+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,uBAAmB,GACnD+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,kBAAc,GAC9C+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,iBAAa,GAC7C+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,yBAAqB,GACrD+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,sBAAkB,GAClD+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,uBAAmB,GACnD+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,oBAAgB,GAChD+wF,IACItjF,KACD+oV,EAAkBx2V,UAAW,eAAW,GAC3C+wF,IACIllF,EAAS,QACV2qV,EAAkBx2V,UAAW,oBAAgB,GAChDw2V,EAAoBzlQ,IAChBhjF,GACDyoV,IAEL1kP,ICv3BEthB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexC8mQ,GAAgC,SAAUtmQ,GAE1C,SAASsmQ,IACL,OAAkB,OAAXtmQ,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAyF/D,OA3FA6rF,GAAUmnQ,EAAgBtmQ,GAQ1BsmQ,EAAe33V,UAAUs1V,eAAiB,SAAU9gU,EAAO9Q,GACvD,IAAIk0U,EAAkBpjU,EAAM+tM,gBAC5B7+M,EAAOm0U,aAAe,IAAIzjU,GAAKoP,GAAe9f,EAAO/I,MAAOi9U,EAAgBj9U,OAAQ6oB,GAAe9f,EAAOhJ,OAAQk9U,EAAgBl9U,SAClIgJ,EAAOo0U,SAAW,IAAI1jU,GAAKoP,GAAe9f,EAAOq0U,UAAWH,EAAgBj9U,OAAQ6oB,GAAe9f,EAAOs0U,WAAYJ,EAAgBl9U,SACtI/V,KAAKgxV,kBAAkBjyU,EAAQA,EAAOyjE,UAAU1rD,QAAS/X,EAAOyjE,UAAUtuE,SAAU2b,GACvD,QAAzB9Q,EAAO+xU,gBACP/xU,EAAO+xU,cAAgB,QAE3BjhU,EAAMk/T,gBAAkBlwT,GAAe9f,EAAO+xU,cAAemC,EAAgBj9U,OAC7E,IAAIihB,EAASlY,EAAOkY,OACpBj3B,KAAKszV,oBAAoBr8T,EAAQlY,IAMrCi0U,EAAe33V,UAAUi4V,oBAAsB,SAAUr8T,EAAQlY,EAAQ64B,QACrD,IAAZA,IAAsBA,GAAU,GASpC,IAAK,IARD21S,EAAcxuU,EAAOwuU,YAErBgG,EAAWlnV,KAAK8T,IAAI9T,KAAKC,IAAIyS,EAAOw0U,SAAU,GAAI,GAElDC,EAAQ,GAAKjG,GAAe,EAAIgG,GAAY,EAAIA,KAChDE,EAAUF,GAAYt8T,EAAOx6B,OAAS,GACtCuQ,EAAI,EAEC7Q,EAAI86B,EAAOx6B,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACzC,IAAI8V,EAAQ2lC,EAAU3gB,EAAOx6B,OAAS,EAAIN,EAAIA,EAC9C,GAAI86B,EAAOhlB,GAAO6kB,QAAS,CACvB,IAAI/gB,EAASy9U,EAAQv8T,EAAOhlB,GAAOjF,EACnCiqB,EAAOhlB,GAAOyhV,OAAS1mV,EACvBiqB,EAAOhlB,GAAO0hV,YAAc59U,EAC5B/I,GAAK+I,EAAS09U,KAQ1BT,EAAe33V,UAAUu4V,iBAAmB,SAAU70U,EAAQoU,EAAO8D,GACjE,IAAI1E,EAAO0E,EAAOx6B,OAAS,EACvBkQ,EAAyB,WAAhBoS,EAAOrY,KAAoBuwB,EAAOx6B,OAAS,EAAIw6B,EAAOx6B,OAAS,EACxEsQ,GAAKkqB,EAAO,GAAGlqB,EAAIkqB,EAAOtqB,GAAQI,GAAK,EACvCN,GAASwqB,EAAO,GAAGlqB,EAAIkqB,EAAOtqB,EAAS,GAAGI,GAAK,EACnDomB,EAAMqxB,OAAS,IAAIjvB,GAAKxoB,EAAGkqB,EAAO,GAAGjqB,EAAGP,EAAQM,EAAGkqB,EAAOtqB,GAAQK,EAAIiqB,EAAO,GAAGjqB,GAChFmmB,EAAMs9S,gBACF1jU,EAAGomB,EAAMqxB,OAAOz3C,EAAIomB,EAAMqxB,OAAOxuC,MAAQ,EACzChJ,EAAGmmB,EAAMqxB,OAAOx3C,EAAImmB,EAAMqxB,OAAOzuC,OAAS,GAE9Cod,EAAM0gU,aACF9mV,EAAGomB,EAAMs9S,eAAe1jU,GAAKkqB,EAAO,GAAGlqB,EAAIkqB,EAAO1E,GAAMxlB,GAAK,EAC7DC,EAAGmmB,EAAMs9S,eAAezjU,GAAKiqB,EAAO,GAAGjqB,EAAIiqB,EAAO1E,GAAMvlB,GAAK,IAOrEgmV,EAAe33V,UAAUy4V,SAAW,SAAUC,GAE1C,IAAK,IADD72U,EAAO,IACF/gB,EAAI,EAAGA,EAAI43V,EAAUt3V,OAAQN,IAClC+gB,GAAQ62U,EAAU53V,GAAG4Q,EAAI,IAAMgnV,EAAU53V,GAAG6Q,EACxC7Q,IAAM43V,EAAUt3V,OAAS,IACzBygB,GAAQ,MAGhB,OAAOA,GAMX81U,EAAe33V,UAAU21V,kBAAoB,SAAUjyU,EAAQ+X,EAAS5iB,EAAU2b,GAC9E,IAAI9iB,GAAK8iB,EAAM+tM,gBAAgB5nN,MAAQ+I,EAAOm0U,aAAal9U,OAAS,EAChEhJ,GAAK6iB,EAAM+tM,gBAAgB7nN,OAASgJ,EAAOm0U,aAAan9U,QAAU,EAClEuvU,EAAoB,IAAI/vT,GAAKxoB,EAAGC,EAAG+R,EAAOm0U,aAAal9U,MAAO+I,EAAOm0U,aAAan9U,QACtFgJ,EAAO6vU,WAAa,IAAIr5T,GAAK+vT,EAAkBv4U,EAAGu4U,EAAkBt4U,EAAGs4U,EAAkBtvU,MAAQsvU,EAAkBv4U,EAAGu4U,EAAkBvvU,OAASuvU,EAAkBt4U,GACnK+R,EAAOumU,kBAAoBA,EACvBxuT,GAAwB,YAAb5iB,IACX6K,EAAO6vU,WAAa,IAAIr5T,GAAK62C,EAAAA,EAAUA,EAAAA,GAAWA,EAAAA,GAAWA,EAAAA,KAG9D4mR,GACT3D,IC5GExjQ,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAcxC8nQ,GAA8B,SAAUtnQ,GAExC,SAASsnQ,IACL,OAAkB,OAAXtnQ,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA0F/D,OA5FA6rF,GAAUmoQ,EAActnQ,GAOxBsnQ,EAAa34V,UAAU44V,eAAiB,SAAU9gU,EAAOpU,EAAQ8Q,GAC7D,IAAI8+D,EACAtkB,EACAD,EACA8pR,EACAC,EACAn3B,EACAo3B,EACAC,EACAn/O,EAAOn2F,EAAOm0U,aAGdoB,GADczkU,EAAM+tM,gBAAgB5nN,MAAQ+I,EAAOm0U,aAAal9U,OAAS,EACzC6Z,EAAM+tM,gBAAgB7wN,EACtDwnV,EAAY1kU,EAAM+tM,gBAAgB5wN,GAAK6iB,EAAM+tM,gBAAgB7nN,OAASm/F,EAAKn/F,QAAU,EAErFrJ,EAAMymB,EAAMugU,OAASx+O,EAAKn/F,OAC1BpJ,EAASD,EAAMymB,EAAMwgU,YAAcz+O,EAAKn/F,OACxCo9U,EAAWp0U,EAAOo0U,SACtBxkQ,EAAYwkQ,EAASn9U,OAASk/F,EAAKl/F,MAAQm9U,EAASn9U,SAAWk/F,EAAKn/F,OAASo9U,EAASp9U,OAASrJ,IAC1FwoG,EAAKn/F,OAASo9U,EAASp9U,SAG5Bm+U,GAFA7pR,EAAa6qC,EAAKl/F,MAAQ,EAAK24E,EAAY,GAEtBA,EAEjBA,EADAhiF,EAASuoG,EAAKn/F,OAASo9U,EAASp9U,QAAUm/F,EAAKn/F,SAAWo9U,EAASp9U,OACvDo9U,EAASn9U,MAGTm9U,EAASn9U,OAASk/F,EAAKl/F,MAAQm9U,EAASn9U,SAC9Ck/F,EAAKn/F,OAASo9U,EAASp9U,OAASpJ,IAAWuoG,EAAKn/F,OAASo9U,EAASp9U,SAG5Eo+U,GADA/pR,EAAgB8qC,EAAKl/F,MAAQ,EAAM24E,EAAY,GACpBA,EACvBjiF,GAAOwoG,EAAKn/F,OAASo9U,EAASp9U,QAC9Bs0D,EAAYD,EAAe4yP,EAAa9nN,EAAKl/F,MAAQ,EAAKm9U,EAASn9U,MAAQ,EAC3Ek+U,EAASC,EAAYC,EAAUl/O,EAAKl/F,MAAQ,EAAKm9U,EAASn9U,MAAQ,GAE7DrJ,EAAUuoG,EAAKn/F,OAASo9U,EAASp9U,SAEtCq+U,EAASD,GADTn3B,EAAY5yP,EAAgB8qC,EAAKl/F,MAAQ,EAAK24E,EAAY,GACzBA,EACjC0lQ,EAAUn/O,EAAKn/F,OAASo9U,EAASp9U,QAErCrJ,GACO6nV,EAGP,IAIIC,GAAUznV,EAAGunV,EAvCJ,EAuCgCH,EAAWnnV,EANxDL,GAAU4nV,GAONE,GAAU1nV,EAAGunV,EAxCJ,EAwCgClqR,EAAcp9D,EAAGL,IAN9D0nV,GAAWE,KAQPC,GAAUznV,EAAGunV,EA1CJ,EA0CgCF,EAAQpnV,EAAGqnV,GACpDI,GAAU1nV,EAAGunV,EA3CJ,EA2CgCt3B,EAAWhwT,EAAGqnV,IAE3D,IAAIj6O,IAVUrtG,EAAGunV,EAnCJ,EAmCgCjqR,EAAWr9D,EAAGN,IAC7CK,EAAGunV,EApCJ,EAoCgCJ,EAAQlnV,EAAGN,GAS3B8nV,GARfznV,EAAGunV,EArCJ,EAqCgCH,EAAWnnV,EAAGL,IAC7CI,EAAGunV,EAtCJ,EAsCgClqR,EAAcp9D,EAAGL,GAOZ8nV,GAClDz0V,KAAK4zV,iBAAiB70U,EAAQoU,EAAOinF,GAErC,OADgBp6G,KAAK8zV,SAAS15O,IAOlC45O,EAAa34V,UAAU4zV,YAAc,SAAU97T,EAAOpU,EAAQ8Q,EAAO7c,GACjE,IAAI6hB,EAAY70B,KAAKi0V,eAAe9gU,EAAOpU,EAAQ8Q,GACnDsD,EAAMi9T,SAAW,EACjBp9U,EAAQ8mB,EAAIjF,GAKhBm/T,EAAa34V,UAAU0kC,cAAgB,WACnC,MAAO,gBAOXi0T,EAAa34V,UAAUiX,QAAU,SAAUk7U,KAKpCwG,GACThB,IC5GEnnQ,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAcxCwoQ,GAA+B,SAAUhoQ,GAEzC,SAASgoQ,IACL,OAAkB,OAAXhoQ,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAiI/D,OAnIA6rF,GAAU6oQ,EAAehoQ,GAOzBgoQ,EAAcr5V,UAAU44V,eAAiB,SAAU9gU,EAAOpU,EAAQ8Q,GAC9D,IAAIqlF,EAAOn2F,EAAOm0U,aAEdqB,EAAY1kU,EAAM+tM,gBAAgB5wN,GAAK6iB,EAAM+tM,gBAAgB7nN,OAASm/F,EAAKn/F,QAAU,EAKrFu+U,GADczkU,EAAM+tM,gBAAgB5nN,MAAQ+I,EAAOm0U,aAAal9U,OAAS,EACzC6Z,EAAM+tM,gBAAgB7wN,EAEtDL,EAAMymB,EAAMugU,OACZ/mV,EAASwmB,EAAMugU,OAASvgU,EAAMwgU,YAE9BtpR,EAAY,IAAO,EAAIl3C,EAAMugU,QAC7BtpR,EAAe,IAAO,EAAIz9D,GAC9BD,GAAO6nV,EAAYr/O,EAAKn/F,OACxBpJ,GAAU4nV,EAAYr/O,EAAKn/F,OAC3B,IAgBIqkG,IAfArtG,EAAGunV,EAZM,EAYsBjqR,EAAY6qC,EAAKl/F,MAChDhJ,EAAGN,EAAMwoG,EAAKn/F,SAGdhJ,EAAGunV,EAhBM,GAgBuB,EAAIjqR,GAAa6qC,EAAKl/F,MACtDhJ,EAAGN,EAAMwoG,EAAKn/F,SAGdhJ,EAAGunV,EApBM,GAoBuB,EAAIlqR,GAAgB8qC,EAAKl/F,MACzDhJ,EAAGL,EAASuoG,EAAKn/F,SAGjBhJ,EAAGunV,EAxBM,EAwBsBlqR,EAAe8qC,EAAKl/F,MACnDhJ,EAAGL,EAASuoG,EAAKn/F,SAGrB/V,KAAK4zV,iBAAiB70U,EAAQoU,EAAOinF,GAErC,OADgBp6G,KAAK8zV,SAAS15O,IAOlCs6O,EAAcr5V,UAAUi4V,oBAAsB,SAAUr8T,EAAQlY,GACjC,WAAvBA,EAAO41U,YACPjoQ,EAAOrxF,UAAUi4V,oBAAoBhyV,KAAKtB,KAAMi3B,EAAQlY,GAAQ,GAGhE/e,KAAK40V,yBAAyB71U,IAMtC21U,EAAcr5V,UAAUu5V,yBAA2B,SAAU71U,GAUzD,IAAK,IATDE,EAAQF,EAAOkY,OAAOx6B,OACtBo4V,EAAc91U,EAAOwuU,YAErBvgV,KACA+I,KAEA++U,EADWzoV,KAAK8T,IAAI,EAAG9T,KAAKC,IAAIyS,EAAOw0U,SAAU,KACzBt0U,EAAQ,GAChC81U,EAAS/0V,KAAKg1V,iBAAiB,EAAGH,GAClCI,EAAQ,EACH94V,EAAI,EAAGA,EAAI8iB,EAAO9iB,IACnB4iB,EAAOkY,OAAO96B,GAAG26B,UACjB9pB,EAAE7Q,GAAK84V,EACPl/U,EAAO5Z,GAAK6D,KAAKg1V,iBAAiBC,EAAO5oV,KAAKE,IAAIwS,EAAOkY,OAAO96B,GAAG6Q,IACnEioV,GAASl/U,EAAO5Z,GAAK24V,EAAYC,GAIpC,IADDG,EAAO,GAAKD,EAAQH,EAAYC,GACpC,IAAS54V,EAAI,EAAGA,EAAI8iB,EAAO9iB,IACnB4iB,EAAOkY,OAAO96B,GAAG26B,UACjB/X,EAAOkY,OAAO96B,GAAGu3V,OAASwB,EAAOloV,EAAE7Q,GACnC4iB,EAAOkY,OAAO96B,GAAGw3V,YAAcuB,EAAOn/U,EAAO5Z,KAOzDu4V,EAAcr5V,UAAU25V,iBAAmB,SAAUhoV,EAAGmoV,GAEpD,OADan1V,KAAKo1V,uBAAuB,EAAG,EAAIpoV,GAAImoV,IAMxDT,EAAcr5V,UAAU+5V,uBAAyB,SAAU95S,EAAGhe,EAAGoiC,GAC7D,IAAI21R,EACAC,EACAx7T,EAAIwD,EAAIA,EAAI,EAAIge,EAAIokB,EACxB,GAAI5lC,GAAK,EAAG,CACR,IAAIy7T,EAAKlpV,KAAKQ,KAAKitB,GAGnB,OAFAu7T,IAAU/3T,EAAIi4T,IAAO,EAAIj6S,GACzBg6S,IAAUh4T,EAAIi4T,IAAO,EAAIj6S,GAClBjvC,KAAKC,IAAI+oV,EAAOC,GAE3B,OAAO,GAKXZ,EAAcr5V,UAAU4zV,YAAc,SAAU97T,EAAOpU,EAAQ8Q,EAAO7c,GAClE,IAAI6hB,EAAY70B,KAAKi0V,eAAe9gU,EAAOpU,EAAQ8Q,GACnDsD,EAAMi9T,SAAW,EACjBp9U,EAAQ8mB,EAAIjF,GAKhB6/T,EAAcr5V,UAAU0kC,cAAgB,WACpC,MAAO,iBAOX20T,EAAcr5V,UAAUiX,QAAU,SAAUk7U,KAKrCkH,GACT1B,ICtJEnnQ,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAoBxCspQ,GAAoC,SAAU9oQ,GAM9C,SAAS8oQ,EAAmB3lU,GACxB,IAAI9vB,EAAQ2sF,EAAOprF,KAAKtB,KAAM6vB,IAAU7vB,KAGxC,OAFAD,EAAMuwO,QAAUvwO,EAChBA,EAAM01V,UAAY,IAAIlgU,GAAK,EAAG1F,EAAMoN,OAAOvwB,IAAK,EAAG,GAC5C3M,EAsSX,OA/SA8rF,GAAU2pQ,EAAoB9oQ,GAgB9B8oQ,EAAmBn6V,UAAU8qT,iBAAmB,SAAUt2R,EAAO9Q,GAC7D/e,KAAKkxO,qBACL,IAAK,IAAI/0O,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,IAAI6/B,EAAajd,EAAO5iB,GAAGuK,KACR,QAAfs1B,GAAuC,aAAfA,IACxBA,EAAwC,MAA1Bjd,EAAO5iB,GAAG6qC,aAAiD,OAA1BjoB,EAAO5iB,GAAG6qC,YACrD,WAAa,OAErB,IAAK,IAAI5oC,EAAK,EAAGyE,EAAKkc,EAAO5iB,GAAG86B,OAAQ74B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC1D,IAAI+0B,EAAQtwB,EAAGzE,GACVX,EAAkB01B,EAAMpmB,IAAOtP,EAAkB01B,EAAMnmB,IACxDhN,KAAKkxO,kBAAkB1sO,KAAK,IAAIgvO,GAAcrgN,EAAMpmB,EAAEG,WAAYimB,EAAM0C,MAAO9W,EAAO5iB,GAAGu2O,YAAav/M,EAAM2D,QAASkF,EAAY,KAAM,KAAM7I,EAAMlhB,MAAO8M,EAAO5iB,GAAG8V,WASpLujV,EAAmBn6V,UAAUk1O,gBAAkB,SAAUv7M,EAAeq7M,EAAcL,GAClF,IAAI20G,EAAa,EACbD,EAAc,EACdlqR,EAAUw1K,EAAOx1K,QAChBx6D,KAAK20B,WAINgwT,EAAc30G,EAAOh6N,MAA4C,EAAlCgf,EAAchf,MAAQ,IAAO,EAH5D0uU,EAAe10G,EAAOj6N,OAA8C,EAAnCif,EAAcjf,OAAS,IAAO,EAKnEs6N,EAAar6N,OAAS2uU,EACtBt0G,EAAat6N,QAAU2uU,EACvB,IAAIjzG,EAAezB,EAAOyB,aACtBpwM,EAAe,EACfkiD,EAAaysJ,EAAOzsJ,WACpB07N,EAAW,EACXxvE,EAAW,EACX8rE,KACAspC,EAAe,EACfj0G,EAAc,EAClB5wO,KAAK0wO,cAAgBrkO,KAAKC,IAAIuiB,GAAY,cAAemhN,EAAO4C,WAAW78N,OAAQi6N,EAAOxsJ,aAG1F,IAAK,IAFDohQ,EACAj3O,GAAS,EACJvvG,EAAK,EAAGyE,EAAK7C,KAAKkxO,kBAAmB9yO,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAChE,IAAIuzO,EAAe9uO,EAAGzE,GACtBwmV,GAAoBxmT,KAAMuzM,EAAavzM,KAAMtP,KAAM6iN,EAAa7iN,KAAMqK,MAAOw4M,EAAax4M,MACtFpC,KAAM,eAAgBsB,QAAQ,GAClCr4B,KAAK6vB,MAAMnJ,QAAQ,eAAgBk+T,GACnCjzG,EAAahkI,QAAUi3O,EAAgBvsT,OACvCs5M,EAAa7iN,KAAO81T,EAAgB91T,KACpC6iN,EAAavzM,KAAOwmT,EAAgBxmT,KACpCuzM,EAAax4M,MAAQyrT,EAAgBzrT,MACrCw4M,EAAa30M,SAAWnO,GAAY8iN,EAAa7iN,KAAMkhN,EAAO4C,WAC1DjB,EAAahkI,QAAgC,KAAtBgkI,EAAa7iN,OACpC6+E,GAAS,EACTijI,EAAcrtJ,EAAakuJ,EAAeE,EAAa30M,SAAShnB,MAAQwkD,EACpEx6D,KAAK20B,YAELkwT,IADEp1G,GAC0BzvO,KAAK0wO,cAAgBl2K,GAAYA,EACxDi1K,GAAYzvO,KAAK0wO,cAAgBl2K,GAAYA,EAAU61K,EAAat6N,SACrE8uU,EAAex4U,KAAKC,IAAIu4U,EAAep1G,GAAYzvO,KAAK0wO,cAAgBl2K,GAAYA,GACpFykP,GAAsB59Q,EACtBk6Q,EAAY/2S,KAAK68B,GACjBrhC,KAAKuxO,WAAallO,KAAKC,IAAImjO,EAAUzvO,KAAKuxO,YAAc,GACxDlwM,EAAe,EACfouM,EAAW,GAEfpuM,EAAeh1B,KAAKC,IAAIskO,EAAavvM,KAGrC49Q,GAAsBruE,EAClBP,EAAar6N,MAASwkD,EAAUykP,IAChC59Q,EAAeh1B,KAAKC,IAAI+0B,EAAe49Q,EAAWzkP,EAAUo2K,GAC3C,IAAbnB,GAAmBmB,IAAgBquE,IACnCxvE,EAAW,GAEfwvE,EAAWruE,EAEXi0G,IADAp1G,GAC4BzvO,KAAK0wO,cAAgBl2K,GAAYA,KAKzEx6D,KAAK20B,YACLsqR,GAAsB59Q,EACtBrhC,KAAKgyO,SAAW3B,EAAar6N,MAASipS,EAAWzkP,EACjDqqR,EAAex4U,KAAKC,IAAIu4U,GAAgB7kV,KAAKuxO,YAAc,IAAMvxO,KAAK0wO,cAAgBl2K,GAAYA,GAClGx6D,KAAKgyO,SAAWhyO,KAAKgyO,UAAahyO,KAAKuxO,WAAa,EAChDgqE,EAAYA,EAAY9+S,OAAS,KAAO4kC,GACxCk6Q,EAAY/2S,KAAK68B,KAIrBrhC,KAAKgyO,SAAW3B,EAAat6N,OAAS8uU,EACtC7kV,KAAKuxO,WAAavxO,KAAK01V,cAAgBjmH,EACvCo1G,EAAex4U,KAAKC,IAAIu4U,EAAe7kV,KAAK0wO,cAAgBl2K,EAAWA,IAE3Ex6D,KAAK6vO,WAAa,EAClB,IAAI75N,EAAQhW,KAAK20B,WAAa30B,KAAK21V,aAAap6C,EAAalrE,EAAar6N,MAAOwkD,EAASykP,EAAWzkP,GACjGnuD,KAAKC,IAAI2yS,EAAWzkP,EAASn5B,GAC7BssE,EACA3tG,KAAKywO,UAAUz6N,EAAO6uU,EAAc70G,EAAQK,GAG5CrwO,KAAKywO,UAAU,EAAG,EAAGT,EAAQK,IAMrCmlH,EAAmBn6V,UAAUs6V,aAAe,SAAUn2R,EAASxpD,EAAOwkD,EAASykP,GAC3E,IAAI22C,EAAgBp7R,EACpBx6D,KAAK61V,eAAiBxpV,KAAKC,IAAI/Q,MAAM,KAAMikE,GAC3C,IAAK,IAAIphE,EAAK,EAAG03V,EAAYt2R,EAASphE,EAAK03V,EAAUr5V,OAAQ2B,IAAM,CAClD03V,EAAU13V,GAGvB,GAFAw3V,GAAiB51V,KAAK61V,eACtB71V,KAAK6vO,aACD+lH,EAAgBp7R,EAAUxkD,EAAO,CACjC4/U,GAAiB51V,KAAK61V,eACtB71V,KAAK6vO,aACL,OASR,OANA7vO,KAAKgyO,SAAY4jH,EAAgB32C,GAAcj/S,KAAKuxO,WAAa,EAC7DqkH,IAAkBp7R,IAClBo7R,EAAgB5/U,GAEpBhW,KAAK6vO,WAAaxjO,KAAKC,IAAI,EAAGtM,KAAK6vO,YACnC7vO,KAAK4+B,SAAWg3T,EACTA,GAKXJ,EAAmBn6V,UAAU06V,cAAgB,SAAUjkC,EAAI97S,EAAOggV,GAI9D,OAHIh2V,KAAK20B,aACL3e,EAAQhW,KAAK4+B,UAEV5oB,GAAgC,EAAtBhW,KAAKgwO,OAAOx1K,QAAex6D,KAAKgwO,OAAOzsJ,WAAavjF,KAAKgwO,OAAOyB,eAMrF+jH,EAAmBn6V,UAAUu2O,eAAiB,SAAUD,EAAcp0O,EAAOi0O,EAAaszG,EAAYpyT,EAAMzT,EAAO+xN,GAC/G,IAAIx2K,EAAUx6D,KAAKgwO,OAAOx1K,QAC1B,GAAIx6D,KAAK20B,WACD1V,IAAU+xN,GAAgB8zG,EAAW5rT,SAASlsB,EAA0B,IAArBhN,KAAK0wO,cAAkC,EAAVl2K,EAAe9nC,EAAK1lB,EAAI0lB,EAAK3c,QAC7G47N,EAAaz4M,SAASnsB,EAAI+3U,EAAW5rT,SAASnsB,GAAMkS,IAAU+xN,EAAe,EAAIhxO,KAAK61V,gBACtFlkH,EAAaz4M,SAASlsB,EAAIzP,EAAMyP,EAChChN,KAAK4vO,iBAAiBprO,KAAKmtO,EAAaz4M,SAASnsB,EAAK/M,KAAKgwO,OAAOzsJ,WAAa,EAAK/oB,GACpFx6D,KAAKuxO,eAGLI,EAAaz4M,SAASnsB,EAAI+3U,EAAW5rT,SAASnsB,EAC9C4kO,EAAaz4M,SAASlsB,EAAI83U,EAAW5rT,SAASlsB,EAAIhN,KAAK0wO,cAAgBl2K,OAG1E,CACD,IAAIuqR,EAAiBD,EAAW5rT,SAASnsB,EAAIykO,EAAcszG,EAAW9nT,SAAShnB,MAC1E+uU,GAAiBpzG,EAAa30M,SAAShnB,MAAQw7N,GAAiB9+M,EAAK3lB,EAAI2lB,EAAK1c,MAAQhW,KAAKgwO,OAAOzsJ,WAAa,GAChHouJ,EAAaz4M,SAASlsB,EAAKiS,IAAU+xN,EAAe8zG,EAAW5rT,SAASlsB,EACpE83U,EAAW5rT,SAASlsB,EAAIhN,KAAK0wO,cAAgBl2K,EACjDm3K,EAAaz4M,SAASnsB,EAAIxP,EAAMwP,IAGhC4kO,EAAaz4M,SAASlsB,EAAI83U,EAAW5rT,SAASlsB,EAC9C2kO,EAAaz4M,SAASnsB,EAAKkS,IAAU+xN,EAAe8zG,EAAW5rT,SAASnsB,EAAIg4U,GAEhF/kV,KAAKuxO,WAAavxO,KAAK01V,cAE3B,IAAIO,EAAiBj2V,KAAK+1V,cAAcpkH,EAAaz4M,SAASnsB,EAAG/M,KAAKqwO,aAAar6N,MAAOhW,KAAKqwO,aAAatjO,GAC5G4kO,EAAa7iN,KAAO6P,IAAUs3T,EAAe92U,QAAQ,GAAIwyN,EAAa7iN,KAAM9uB,KAAKgwO,OAAO4C,YAO5F4iH,EAAmBn6V,UAAUu3V,uBAAyB,SAAUhE,EAAYsH,EAAaj5T,GACrF,IAAIoB,EACJ,OAAQr+B,KAAKkU,UACT,IAAK,OACDmqB,GAAUuwT,EAAW7hV,EAAImpV,EAAYlgV,MAASinB,EAAOzwB,MAAQ,EAC7D0pV,EAAYnpV,EAAK6hV,EAAW7hV,EAAImpV,EAAYlgV,MAASinB,EAAOzwB,KAAO0pV,EAAYnpV,EAC1E6hV,EAAW7hV,EAAImpV,EAAYlgV,MAASqoB,EACzC,MACJ,IAAK,QACDA,GAAUr+B,KAAK6vB,MAAMmF,cAAchf,MAAQinB,EAAOxwB,OAAUmiV,EAAW7hV,EAAI6hV,EAAW54U,MAAQkgV,EAAYlgV,QAAU,EACpHkgV,EAAYnpV,EAAK6hV,EAAW7hV,EAAI6hV,EAAW54U,MAAQkgV,EAAYlgV,MAAUhW,KAAK6vB,MAAMmF,cAAchf,MAAQinB,EAAOxwB,MAC7GypV,EAAYnpV,EAAK6hV,EAAW7hV,EAAI6hV,EAAW54U,MAAQqoB,EACvD,MACJ,IAAK,MACDr+B,KAAKm2V,aAAan2V,KAAK6vB,OACvBwO,GAAUuwT,EAAW5hV,EAAIkpV,EAAYngV,QAAW/V,KAAKy1V,UAAUzoV,EAAIhN,KAAKy1V,UAAU1/U,SAAW,EAC7FmgV,EAAYlpV,EAAK4hV,EAAW5hV,EAAIkpV,EAAYngV,OAAUknB,EAAOvwB,IAAMwpV,EAAYlpV,EAC1E4hV,EAAW5hV,EAAIkpV,EAAYngV,OAAUsoB,EAC1C,MACJ,IAAK,SACDA,GAAUr+B,KAAK6vB,MAAMmF,cAAcjf,OAASknB,EAAOtwB,QAAWiiV,EAAW5hV,EAAI4hV,EAAW74U,OAASmgV,EAAYngV,SAAW,EACxHmgV,EAAYlpV,EAAI4hV,EAAW5hV,EAAI4hV,EAAW74U,OAASmgV,EAAYngV,OAAU/V,KAAK6vB,MAAMmF,cAAcjf,OAASknB,EAAOtwB,OAC9GupV,EAAYlpV,EAAK4hV,EAAW5hV,EAAI4hV,EAAW74U,OAAUsoB,IAOrEm3T,EAAmBn6V,UAAU86V,aAAe,SAAU3I,GAClD,IAAKA,EAAa9sT,MACd,OAAO,KAEX,IAAIo6L,EAAYjsM,GAAY2+T,EAAa9sT,MAAO8sT,EAAatsT,YAC7DlhC,KAAKy1V,UAAY,IAAIlgU,GAAKi4T,EAAax4T,cAAchf,MAAQ,EAAI8kN,EAAU9kN,MAAQ,EAAGw3U,EAAavwT,OAAOvwB,IAAKouN,EAAU9kN,MAAO8kN,EAAU/kN,SAK9Iy/U,EAAmBn6V,UAAU+6V,cAAgB,SAAUnkV,EAAOi/N,GAC1D,IAAK,IAAI9yO,EAAK,EAAGi4V,EAAsBnlH,EAAmB9yO,EAAKi4V,EAAoB55V,OAAQ2B,IAAM,CAC7F,IAAI4xO,EAASqmH,EAAoBj4V,GACjC,GAAI4xO,EAAOp4M,aAAe3lB,EACtB,OAAO+9N,EAGf,OAAO,MAMXwlH,EAAmBn6V,UAAU43H,MAAQ,SAAU32H,GAC3C,IAAI6qC,EAAW7qC,EAAM6K,OAAO7D,GACxBgzV,GAAiBt2V,KAAKkwO,SAAW,SAAUlwO,KAAKkwO,SAAW,UAC3DlwO,KAAKkwO,SAAW,kBAEhBlwO,KAAK6vB,MAAMogU,6BACWvxV,KAAWsB,KAAK6vB,MAAMogU,4BAA4B5nC,oBAAqB,MAAM,GAEvG,IAAK,IAAIjqT,EAAK,EAAG+mV,EAAkBmR,EAAel4V,EAAK+mV,EAAgB1oV,OAAQ2B,IAAM,CACjF,IAAIkF,EAAK6hV,EAAgB/mV,GACzB,GAAI+oC,EAAS5oC,QAAQ+E,IAAO,EAAG,CAC3B,IAAIs0B,EAAaxD,SAAS+S,EAASjqC,MAAMoG,GAAI,GAAI,IAC7CizV,EAAgBv2V,KAAK6vB,MAAM+R,cAAc,GACzCzO,EAAQ2O,GAAalK,EAAY2+T,EAAct/T,QAC/C06M,EAAe3xO,KAAKo2V,cAAcx+T,EAAY53B,KAAKkxO,mBACnDlxO,KAAK6vB,MAAMogN,eAAe8B,kBAC1B5+M,EAAM2D,SAAW3D,EAAM2D,QACvB66M,EAAa76M,QAAU3D,EAAM2D,QAC7B92B,KAAK6vB,MAAM+5R,YACPz2R,EAAM2D,QACNy/T,EAAchJ,aAAep6T,EAAMnmB,EAGnCupV,EAAchJ,aAAep6T,EAAMnmB,EAEvChN,KAAK6vB,MAAMgjU,cAAc0D,EAAct/T,QACvCj3B,KAAK6vB,MAAMy2R,kBAENtmT,KAAK6vB,MAAMogU,6BAChBjwV,KAAK6vB,MAAMogU,4BAA4BtT,gBAAgB38U,KAAK6vB,MAAO,EAAG+H,IAI9EuP,EAAS5oC,QAAQyB,KAAKkwO,SAAW,YAAc,EAC/ClwO,KAAKqzO,WAAW/2O,GAAO,GAElB6qC,EAAS5oC,QAAQyB,KAAKkwO,SAAW,cAAgB,GACtDlwO,KAAKqzO,WAAW/2O,GAAO,IAM/Bk5V,EAAmBn6V,UAAU0kC,cAAgB,WACzC,MAAO,sBAOXy1T,EAAmBn6V,UAAUiX,QAAU,SAAUud,KAK1C2lU,GACThmH,ICrUE3jJ,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAyBxCsqQ,GAAuC,SAAU9pQ,GAEjD,SAAS8pQ,EAAsBhJ,GAC3B,IAAIztV,EAAQ2sF,EAAOprF,KAAKtB,KAAMwtV,IAAiBxtV,KAE/C,GADAD,EAAMuD,GAAKkqV,EAAaxsV,QAAQsC,GAAK,qBACjCkqV,EAAa9sT,MAAO,CACpB,IAAIo6L,EAAYjsM,GAAY2+T,EAAa9sT,MAAO8sT,EAAatsT,YAC7DnhC,EAAM01V,UAAY,IAAIlgU,GAAKi4T,EAAax4T,cAAchf,MAAQ,EAAI8kN,EAAU9kN,MAAQ,EAAGw3U,EAAavwT,OAAOvwB,IAAKouN,EAAU9kN,MAAO8kN,EAAU/kN,QAE/I,OAAOhW,EA4kBX,OAplBA8rF,GAAU2qQ,EAAuB9pQ,GAcjC8pQ,EAAsBn7V,UAAUo7V,qBAAuB,SAAUtjU,EAAOqvD,EAAWxlD,EAAU/F,EAAQ32B,EAAQgD,GACzG,IAAIsJ,EAAS5M,KAAK0vV,aAAe1vV,KAAKyvV,YAAczvV,KAAK02V,iBAAiBvjU,EAAOqvD,GACjFxiF,KAAK22V,eAAexjU,EAAOqvD,EAAUtuE,SAAU8oB,EAAUpwB,EAAQ5M,KAAK42V,aACtEzjU,EAAM0jU,WAAa1jU,EAAMi9T,SACzBj9T,EAAMkuF,cAAgB7+B,EAAUtuE,SAC5BlU,KAAKwtV,aAAasJ,mBAClB92V,KAAK+2V,cAAc5jU,EAAOqvD,EAAWxlD,EAAU/F,EAAQ32B,EAAQgD,IAMvEkzV,EAAsBn7V,UAAUs7V,eAAiB,SAAUxjU,EAAOjf,EAAU8oB,EAAUyyT,EAAaxyT,EAAQ0I,QACtF,IAAbA,IAAuBA,EAAW,GACtC,IAAIkxT,EAAalxT,GAAYxS,EAAMi9T,SAE/Bl3T,EAAWrG,GAAiBgkU,EAAYpH,EAAazvV,KAAK0vV,aAAe1vV,KAAK+yB,OAC9E/yB,KAAKsgV,iBAAiBntT,EAAOjf,IACjCglB,EAASlsB,EAAkB,WAAbkH,EAA0BglB,EAASlsB,EAAIgwB,EAASjnB,OAAS,EAAKmjB,EAASlsB,EACrFksB,EAASnsB,EAAkB,WAAbmH,EAA0BglB,EAASnsB,EAAIiwB,EAAShnB,MAAQ,EAAKkjB,EAASnsB,EACpFomB,EAAMktT,YAAc,IAAI9qT,GAAK2D,EAASnsB,EAAGmsB,EAASlsB,EAAGgwB,EAAShnB,MAAkB,EAATinB,EAAaD,EAASjnB,OAAmB,EAATknB,GACtF,YAAb/oB,IACAif,EAAMktT,YAAYrzU,GAAKmmB,EAAMktT,YAAYtqU,OAAS,EAC9C8gV,GAAc,IAAMA,GAAc,IAClC1jU,EAAMktT,YAAYtzU,GAAMomB,EAAMktT,YAAYrqU,MATtC,GAYJmd,EAAMktT,YAAYtzU,GAZd,KAmBhBypV,EAAsBn7V,UAAU07V,cAAgB,SAAU5jU,EAAOqvD,EAAWxlD,EAAU/F,EAAQ32B,EAAQgD,GAClG,IAAI0zV,EAAWh3V,KAAK0vV,aAChBD,EAAcuH,EAAWh3V,KAAK4M,OAAS5M,KAAK02V,iBAAiBvjU,EAAOqvD,GAGxEitQ,GAAe5wT,GAFOm4T,EAAYx0Q,EAAUquQ,eAAep0V,QAAU,KACjE,MAC2CgzV,GAC/C,IAAIj+T,EAAgBxxB,KAAKi3V,kBAAkBhgU,EAAQ9D,EAAMlhB,MAAOkhB,EAAMkuF,eAyBtE,GAxB2B,WAAvB7+B,EAAUtuE,UACNsd,GAAiBA,EAAc6uT,cAAgBxjT,GAAU1J,EAAMktT,YAAa7uT,EAAc6uT,cACvFrgV,KAAKk3V,cAAc/jU,EAAO8D,MAAa+/T,IAAal6T,GAAa3J,EAAMqxB,OAAQrxB,EAAMktT,gBACxFltT,EAAMkuF,cAAgB,UACjB21O,IACDvH,EAAczvV,KAAK02V,iBAAiBvjU,EAAOqvD,IAE/CxiF,KAAK22V,eAAexjU,EAAOA,EAAMkuF,cAAerkF,EAAUyyT,EAAazvV,KAAK42V,cAC5EplU,EAAgBxxB,KAAKi3V,kBAAkBhgU,EAAQ9D,EAAMlhB,MAAOkhB,EAAMkuF,kBAC5CxkF,GAAU1J,EAAMktT,YAAa7uT,EAAc6uT,cAC7DrgV,KAAKm3V,2BAA2BhkU,EAAO3B,KACvCxxB,KAAKo3V,mBAAmB5lU,EAAe2B,EAAOqvD,EAAUv9C,OAAOjvB,MAAOy5U,EAAazyT,EAAUh9B,KAAK42V,cAKtGplU,GAAiBA,EAAc6uT,cAAgBxjT,GAAU1J,EAAMktT,YAAa7uT,EAAc6uT,cACvFrgV,KAAKk3V,cAAc/jU,EAAO8D,IAAWj3B,KAAKm3V,2BAA2BhkU,EAAO3B,KAC/ExxB,KAAKo3V,mBAAmB5lU,EAAe2B,EAAOqvD,EAAUv9C,OAAOjvB,MAAOy5U,EAAazyT,EAAUh9B,KAAK42V,cAGtG52V,KAAKk3V,cAAc/jU,EAAO8D,IAAYj3B,KAAKy1V,WAAatiU,EAAMktT,aAAexjT,GAAU1J,EAAMktT,YAAargV,KAAKy1V,aAC/Gz1V,KAAKq3V,sBAAsBlkU,GAE3BnzB,KAAKwtV,aAAasB,0BAA4B37T,EAAMk6T,cAAgBl6T,EAAMktT,YAAa,CACvF,IAAI3tT,EAAO1yB,KAAKwtV,aAAasB,yBAAyBz+G,aAClD71K,EAAUx6D,KAAKwtV,aAAav9G,eAAehrM,OAAOjvB,MAAQ,EAC9DhW,KAAKs3V,aAAankU,EAAO,IAAIoC,GAAK7C,EAAK3lB,EAAIytD,EAAS9nC,EAAK1lB,EAAIwtD,EAAS9nC,EAAK1c,MAAS,EAAIwkD,EAAU9nC,EAAK3c,OAAU,EAAIykD,GAAWgoB,EAAUzzD,KAAM/uB,KAAKwtV,aAAasB,yBAAyB56U,UAE/L,GAAIif,EAAMk6T,cAAgBl6T,EAAMktT,YAAa,CACzC,IAAInsU,EAAWlU,KAAK0vV,aAAgBv8T,EAAMktT,YAAYtzU,GAAK/M,KAAK+yB,OAAOhmB,EAAK,cAAgB,aACxF,cACJ/M,KAAKs3V,aAAankU,EAAOnzB,KAAKshF,SAAUkB,EAAUzzD,KAAM7a,GAExDif,EAAMk6T,cAAgBl6T,EAAMktT,cAAiBltT,EAAMktT,YAAYrzU,EAAImmB,EAAMktT,YAAYtqU,OACrF/V,KAAKshF,SAASt0E,EAAIhN,KAAKshF,SAASvrE,QAAUod,EAAMktT,YAAYrzU,EAAIhN,KAAKshF,SAASt0E,GAAOmmB,EAAMktT,YAAYtzU,EAAI/M,KAAKshF,SAASv0E,GACzHomB,EAAMktT,YAAYtzU,EAAIomB,EAAMktT,YAAYrqU,MAAQhW,KAAKshF,SAASv0E,EAAI/M,KAAKshF,SAAStrE,QAChFhW,KAAKq3V,sBAAsBlkU,IAQnCqjU,EAAsBn7V,UAAUuvF,KAAO,SAAU/pF,EAAGkM,EAAGC,EAAGgkB,GACtD,IAAIjxB,EAAQC,KACZ,GAAIa,EAAEsG,OAAO6U,YAAYzd,QAAQ,QAAU,EAAG,CAC1C,IAAI4oC,EAAWtmC,EAAEsG,OAAO7D,GAAGpG,MAAM8C,KAAKsD,IACtC,GAAwB,IAApB6jC,EAAS1qC,OAAc,CACvB,IAAIk5N,EAAcvhM,SAAS+S,EAAS,GAAGjqC,MAAM,UAAU,GAAI,IACvD06B,EAAaxD,SAAS+S,EAAS,GAAGjqC,MAAM,UAAU,GAAI,IAC1D,IAAKi9C,MAAMw7K,KAAiBx7K,MAAMviB,GAAa,CACvC5G,GACAP,GAAczwB,KAAKwtV,aAAaxsV,QAAQsC,GAAK,0BAEjD,IAAI6vB,EAAQwO,GAAmBg0L,EAAc31N,KAAiB,aAAE4hC,eAAe3K,OAAOW,GACtF9G,GAAYqC,EAAMrE,MAAQqE,EAAMnmB,EAAEE,WAAYH,EAAGC,EAAGhN,KAAKshF,SAAStrE,MAAOhW,KAAKwtV,aAAaxsV,QAAQsC,GAAK,yBAA0BotB,GAAW1wB,KAAKwtV,aAAaxsV,QAAQsC,GAAK,8BAKpLmtB,GAAczwB,KAAKwtV,aAAaxsV,QAAQsC,GAAK,0BAE7C0tB,IACA9wB,aAAaF,KAAKuzO,cAClBvzO,KAAKuzO,aAAepzO,WAAW,WAAcswB,GAAc1wB,EAAMytV,aAAaxsV,QAAQsC,GAAK,2BAA8B,OAMjIkzV,EAAsBn7V,UAAU47V,kBAAoB,SAAUhgU,EAAQhlB,EAAOiC,GAEzE,IAAK,IADDif,EAAQ8D,EAAO,GACV96B,EAAI8V,EAAQ,EAAG9V,GAAK,EAAGA,IAE5B,IADAg3B,EAAQ8D,EAAO96B,IACL26B,SAAW3D,EAAMk6T,cAAgBl6T,EAAMktT,aAAeltT,EAAMkuF,gBAAkBntG,EACpF,OAAOif,EAGf,OAAO,MAKXqjU,EAAsBn7V,UAAU67V,cAAgB,SAAUzlU,EAAcwF,GACpE,IAAK,IAAI96B,EAAIs1B,EAAaxf,MAAQ,EAAG9V,GAAK,EAAGA,IACzC,GAAI86B,EAAO96B,GAAG26B,SAAWG,EAAO96B,GAAGkxV,cAAgBp2T,EAAO96B,GAAGkkV,aAAe5uT,EAAa4uT,aACrF5uT,EAAa47T,cAAgBxwT,GAAUpL,EAAa4uT,YAAappT,EAAO96B,GAAGkkV,aAC3E,OAAO,EAGf,OAAO,GAKXmW,EAAsBn7V,UAAUi8V,aAAe,SAAUnkU,EAAOT,EAAM3D,EAAM7a,GACxE,GAAI2oB,GAAU1J,EAAMktT,YAAa3tT,GAAO,CACpC,IAAIvD,EAAOgE,EAAMktT,YAAYrqU,MACZ,UAAb9B,EACAib,EAAOuD,EAAK3lB,EAAIomB,EAAMktT,YAAYtzU,EAEhB,SAAbmH,GACLib,EAAOgE,EAAMktT,YAAYtzU,GAAK2lB,EAAK3lB,EAAI2lB,EAAK1c,QACjC,IACPmZ,GAAQgE,EAAMktT,YAAYrqU,MAC1Bmd,EAAMktT,YAAYtzU,EAAI2lB,EAAK3lB,EAAI2lB,EAAK1c,OAGtB,gBAAb9B,EACLib,EAAQuD,EAAK3lB,EAAI2lB,EAAK1c,MAASmd,EAAMktT,YAAYtzU,EAE/B,eAAbmH,GACLib,EAAQgE,EAAMktT,YAAYtzU,EAAIomB,EAAMktT,YAAYrqU,MAAS0c,EAAK3lB,GACnDomB,EAAMktT,YAAYrqU,QACzBmd,EAAMktT,YAAYtzU,EAAI2lB,EAAK3lB,GAI/B/M,KAAKq3V,sBAAsBlkU,GAE3BA,EAAMk6T,cAAgBl6T,EAAMktT,cACxBlxT,EAAOgE,EAAMktT,YAAYrqU,QACzBmd,EAAM9f,MAAQsrB,GAASxP,EAA2B,EAAnBnvB,KAAK42V,YAAkBzjU,EAAM9f,MAAO0b,GACnEoE,EAAMktT,YAAYrqU,MAAQmZ,GAEH,IAAvBgE,EAAM9f,MAAM5W,QAAgB02B,EAAM9f,MAAM9U,QAAQ,QAAU,GAC1DyB,KAAKq3V,sBAAsBlkU,MAQ3CqjU,EAAsBn7V,UAAUg8V,sBAAwB,SAAUlkU,GAC9DA,EAAMk6T,cAAe,EACrBl6T,EAAMktT,YAAc,MAKxBmW,EAAsBn7V,UAAU+7V,mBAAqB,SAAU5lU,EAAe2B,EAAO8R,EAAQwqT,EAAa8H,EAAUt6T,GAChH,GAAKj9B,KAAK0vV,aAGL,CACD,IAAImH,EAAa72V,KAAKw3V,mBAAmBhmU,EAAc6uT,YAAaltT,EAAMktT,YAAaltT,EAAMi9T,SAAmB,EAATnrT,GAMvG,IALAjlC,KAAK22V,eAAexjU,EAAO,UAAWokU,EAAU9H,EAAaxyT,EAAQ45T,GACjEA,EAAa1jU,EAAMwS,UACnB3lC,KAAKq3V,sBAAsBlkU,GAE/BA,EAAM0jU,WAAaA,EACZ1jU,EAAMk6T,eAAiBxwT,GAAUrL,EAAc6uT,YAAaltT,EAAMktT,cAAgBwW,GAAcrlU,EAAcqlU,YAC9G72V,KAAKm3V,2BAA2BhkU,EAAO3B,KAAiB,CAC3D,GAAIqlU,EAAa1jU,EAAMwS,SAAU,CAC7B3lC,KAAKq3V,sBAAsBlkU,GAC3B,MAEJA,EAAM0jU,WAAaA,EACnB72V,KAAK22V,eAAexjU,EAAO,UAAWokU,EAAU9H,EAAaxyT,EAAQ45T,GACrEA,GAAc,SAjBlB72V,KAAKy3V,yBAAyBtkU,EAAO3B,EAAei+T,EAAa8H,EAAUt6T,IAwBnFu5T,EAAsBn7V,UAAUo8V,yBAA2B,SAAUtkU,EAAO2gS,EAAWxhR,EAAUtV,EAAUC,GACvG,IAAIy6T,EAAavkU,EAAMktT,YAEnBsX,EAA2C,WAA3B33V,KAAKwtV,aAAa9mV,KAClCotT,EAAUusB,YAAYrzU,GAAK0qV,EAAW1qV,EAAI0qV,EAAW3hV,QACrDod,EAAMktT,YAAYrzU,GAAK8mT,EAAUusB,YAAYrzU,EAAI8mT,EAAUusB,YAAYtqU,QACvE4hV,EAAgB,IAChBxkU,EAAMktT,YAAYrzU,GAAgC,WAA3BhN,KAAKwtV,aAAa9mV,KAAoBixV,GAAiBA,IAMtFnB,EAAsBn7V,UAAU87V,2BAA6B,SAAUhkU,EAAO05F,GAC1E,IAAItvH,EAAQyC,KAAKsgV,iBAAiBntT,GAC9BnU,EAAM,IAAIiU,GAAc,EAAG,GAC/BjzB,KAAK43V,eAAezkU,EAAMktT,YAAaltT,EAAM0jU,WAAY73U,GACzD,IAAI64U,EAAgB73V,KAAKsgV,iBAAiBzzN,GACtCirO,EAAc,IAAI7kU,GAAc,EAAG,GAEvC,OADAjzB,KAAK43V,eAAe/qO,EAASwzN,YAAaxzN,EAASgqO,WAAYiB,GACxD93V,KAAK+3V,yBAAyBx6V,EAAOyhB,EAAKmU,EAAMktT,cACnDrgV,KAAK+3V,yBAAyBx6V,EAAOyhB,EAAK6tG,EAASwzN,cACnDrgV,KAAK+3V,yBAAyBF,EAAeC,EAAa3kU,EAAMktT,cAKxEmW,EAAsBn7V,UAAU08V,yBAA2B,SAAUC,EAAOC,EAAOvlU,GAC/E,IAAI6zM,GACA,IAAItzM,GAAc5mB,KAAK4xB,MAAMvL,EAAK3lB,GAAIV,KAAK4xB,MAAMvL,EAAK1lB,IACtD,IAAIimB,GAAc5mB,KAAK4xB,MAAOvL,EAAK3lB,EAAI2lB,EAAK1c,OAAS3J,KAAK4xB,MAAMvL,EAAK1lB,IACrE,IAAIimB,GAAc5mB,KAAK4xB,MAAOvL,EAAK3lB,EAAI2lB,EAAK1c,OAAS3J,KAAK4xB,MAAOvL,EAAK1lB,EAAI0lB,EAAK3c,SAC/E,IAAIkd,GAAc5mB,KAAK4xB,MAAMvL,EAAK3lB,GAAIV,KAAK4xB,MAAOvL,EAAK1lB,EAAI0lB,EAAK3c,UAEpEiiV,EAAMjrV,EAAIV,KAAK4xB,MAAM+5T,EAAMjrV,GAC3BirV,EAAMhrV,EAAIX,KAAK4xB,MAAM+5T,EAAMhrV,GAC3BirV,EAAMlrV,EAAIV,KAAK4xB,MAAMg6T,EAAMlrV,GAC3BkrV,EAAMjrV,EAAIX,KAAK4xB,MAAMg6T,EAAMjrV,GAC3B,IAAK,IAAI7Q,EAAI,EAAGA,EAAIoqO,EAAW9pO,OAAQN,IACnC,GAAI6D,KAAKk4V,iBAAiBF,EAAOC,EAAO1xH,EAAWpqO,GAAIoqO,GAAYpqO,EAAI,GAAKoqO,EAAW9pO,SACnF,OAAO,EAGf,OAAO,GAKX+5V,EAAsBn7V,UAAU68V,iBAAmB,SAAU38S,EAAQvS,EAAQmvT,EAASC,GAClF,IAAI59S,EAAKxR,EAAOh8B,EAAIuuC,EAAOvuC,EACvB0tC,EAAKa,EAAOxuC,EAAIi8B,EAAOj8B,EACvB6tC,EAAKJ,EAAKe,EAAOxuC,EAAI2tC,EAAKa,EAAOvuC,EACjCytC,EAAK29S,EAAQprV,EAAImrV,EAAQnrV,EACzB2tC,EAAKw9S,EAAQprV,EAAIqrV,EAAQrrV,EACzB8tC,EAAKJ,EAAK09S,EAAQprV,EAAI4tC,EAAKw9S,EAAQnrV,EACnCsnB,EAAQkmB,EAAKG,EAAKF,EAAKC,EAC3B,GAAc,IAAVpmB,EAAa,CACb,IAAIvnB,GAAK4tC,EAAKC,EAAKF,EAAKG,GAAMvmB,EAC1BtnB,GAAKwtC,EAAKK,EAAKJ,EAAKG,GAAMtmB,EAC1B+jU,EAAOhsV,KAAK8T,IAAIo7B,EAAOxuC,EAAGi8B,EAAOj8B,IAAMA,GAAKA,GAAKV,KAAKC,IAAIivC,EAAOxuC,EAAGi8B,EAAOj8B,GAI/E,OAHAsrV,EAAOA,GAAQhsV,KAAK8T,IAAIo7B,EAAOvuC,EAAGg8B,EAAOh8B,IAAMA,GAAKA,GAAKX,KAAKC,IAAIivC,EAAOvuC,EAAGg8B,EAAOh8B,GACnFqrV,EAAOA,GAAQhsV,KAAK8T,IAAIg4U,EAAQprV,EAAGqrV,EAAQrrV,IAAMA,GAAKA,GAAKV,KAAKC,IAAI6rV,EAAQprV,EAAGqrV,EAAQrrV,GACvFsrV,EAAOA,GAAQhsV,KAAK8T,IAAIg4U,EAAQnrV,EAAGorV,EAAQprV,IAAMA,GAAKA,GAAKX,KAAKC,IAAI6rV,EAAQnrV,EAAGorV,EAAQprV,GAG3F,OAAO,GAKXwpV,EAAsBn7V,UAAUm8V,mBAAqB,SAAU54V,EAAOC,EAAQ8iB,EAAO64C,GACjF,IAAIztD,EAAInO,EAAMmO,EAQd,OAPI4U,GAAS,IAAMA,GAAS,KACxB9iB,EAAOmO,EAAIpO,EAAMoO,GAAKwtD,EAAU37D,EAAOkX,OAAS,GAChDhJ,EAAInO,EAAMmO,EAAInO,EAAMoX,OAGpBnX,EAAOmO,EAAIpO,EAAMoO,EAAIpO,EAAMmX,OAASykD,EAEjCtnC,GAASlzB,KAAK+yB,OAAQ,IAAIE,GAAclmB,EAAGlO,EAAOmO,KAK7DwpV,EAAsBn7V,UAAUi9V,iBAAmB,SAAUjlV,EAAO8f,EAAOqvD,EAAWxjE,QACtE,IAARA,IAAkBA,EAAM,GAC5B,IAAI+4B,EAAYyqC,EAAUquQ,eACtBpB,EAAczvV,KAAK0vV,aAAe1vV,KAAKyvV,YAAczvV,KAAK02V,iBAAiBvjU,EAAOqvD,GAClFjlF,EAAQyC,KAAKu4V,uBAAuBplU,EAAO4kB,GAC3C8+S,EAAa73U,GAAOmU,EAAMi9T,SAC1Bh4R,EAAS,IAAInlC,GAAc,EAAG,GAC9BykB,EAAW13C,KAAK43V,eAAevkV,EAAOwjV,EAAYz+R,EAAQrgB,EAAU/hC,OACxE,GAAuB,UAAnB+hC,EAAUrxC,KAAkB,CAC5B,GAAI1G,KAAK0vV,aAAc,CAGnB,OADAt3R,EAASvlC,GAAiBgkU,EAAYpH,GAD9BA,EAAczvV,KAAK4M,QAC8B,EAAI5M,KAAK+yB,QAC3D,KAAOx1B,EAAMwP,EAAI,IAAMxP,EAAMyP,EAAI,KAAOorD,EAAOrrD,EAAI,IAAMqrD,EAAOprD,EAAI,IAAM0qC,EAAS3qC,EAAI,IAAM2qC,EAAS1qC,EAG7G,OAAOhN,KAAKw4V,gBAAgBj7V,EAAOm6C,GAIvC,MAAO,KAAOn6C,EAAMwP,EAAI,IAAMxP,EAAMyP,EAAI,MAAQorD,EAAOrrD,EAAI,IAAMqrD,EAAOprD,EAAI,MAAQ0qC,EAAS3qC,EAAI,IAAM2qC,EAAS1qC,GAMxHwpV,EAAsBn7V,UAAUm9V,gBAAkB,SAAUj7V,EAAOyhB,GAC/D,IAAIy5U,GAAiBl7V,EAAOyhB,GAC5B,GAAIzhB,EAAMyP,IAAMgS,EAAIhS,EAChB,MAAO,KAAOzP,EAAMwP,EAAI,IAAMxP,EAAMyP,EAAI,MAAQgS,EAAIjS,EAAI,IAAMiS,EAAIhS,EAGtE,IAAK,IADDkQ,EAAO,IACF/gB,EAAI,EAAGA,GAAK,GAAIA,IAAK,CAC1B,IAAI4hD,EAAI5hD,EAAI,GACR86B,EAASj3B,KAAK04V,eAAe36S,EAAG06S,EAAe,EAAG,GACtDv7U,GAAQ+Z,EAAOlqB,EAAI,IAAMkqB,EAAOjqB,EACtB,KAAN7Q,IACA+gB,GAAQ,MAGhB,OAAOA,GAKXs5U,EAAsBn7V,UAAUq9V,eAAiB,SAAU36S,EAAG06S,EAAexmV,EAAOgN,GAChF,GAAc,IAAVA,EACA,OAAOw5U,EAAcxmV,GAEzB,IAAI0mV,EAAK34V,KAAK04V,eAAe36S,EAAG06S,EAAexmV,EAAOgN,EAAQ,GAC1Dq7R,EAAKt6S,KAAK04V,eAAe36S,EAAG06S,EAAexmV,EAAQ,EAAGgN,EAAQ,GAC9DlS,GAAK4rV,EAAI,EAAIA,EAAG5rV,GAChBC,GAAK2rV,EAAI,EAAIA,EAAG3rV,GAGhB0uB,GAAM,EAAIqiB,GAAKhxC,EAAIgxC,GAFbu8P,EAAI,EAAIA,EAAGvtS,GAGjB4uB,GAAM,EAAIoiB,GAAK/wC,EAAI+wC,GAFbu8P,EAAI,EAAIA,EAAGttS,GAGrB,OAAI2rV,EAAG5rV,GACMA,EAAG2uB,EAAI1uB,EAAG2uB,IAS3B66T,EAAsBn7V,UAAUu8V,eAAiB,SAAUgB,EAAYj3U,EAAOy2C,EAAQnzB,QACnE,IAAXA,IAAqBA,EAAS,GAClC,IAAItsB,EAAO,IAAIsa,GAAc2lU,EAAW7rV,EAAG6rV,EAAW5rV,GAatD,OAZI2U,GAAS,IAAMA,GAAS,KACxBhJ,EAAK5L,GAAK6rV,EAAW5iV,MAAQivB,EAAS,EACtCtsB,EAAK3L,GAAK4rV,EAAW7iV,OAAS,EAC9BqiD,EAAOrrD,EAAI4L,EAAK5L,EAAI,GACpBqrD,EAAOprD,EAAI2L,EAAK3L,IAGhB2L,EAAK5L,GAAKk4B,EAAS,EACnBtsB,EAAK3L,GAAK4rV,EAAW7iV,OAAS,EAC9BqiD,EAAOrrD,EAAI4L,EAAK5L,EAAI,GACpBqrD,EAAOprD,EAAI2L,EAAK3L,GAEb2L,GAKX69U,EAAsBn7V,UAAUq7V,iBAAmB,SAAUvjU,EAAOqvD,GAChE,GAAIrvD,EAAMkuF,eAAiB7+B,EAAUtuE,WAAaif,EAAMkuF,eAAiB7+B,EAAUquQ,eAAep0V,OAAQ,CACtG,IAAIw+B,EAAW4D,GAAe2jD,EAAUquQ,eAAep0V,QAAU,OAAQuD,KAAKwtV,aAAa5vH,gBAAgB5nN,OAC3G,GAAIilB,EAAWj7B,KAAKwtV,aAAa5vH,gBAAgB5nN,MAC7C,OAAOilB,EAGf,IAGI8lT,EAHA7sU,EAAWif,EAAMkuF,eAAiB7+B,EAAUtuE,SAC5C6K,EAAS/e,KAAKwtV,aAAa5rT,cAAc,GACzCq/S,GAAcjhV,KAAKwtV,aAAa5vH,gBAAgB5nN,MAAQ+I,EAAOm0U,aAAal9U,OAAS,EAEzF,OAAQ9B,GACJ,IAAK,SACD,OAAO,EACX,IAAK,UAED,OADA6sU,EAAgB5tT,EAAMs9S,eAAe1jU,EAAIomB,EAAM0gU,YAAY9mV,EACpD/M,KAAKwtV,aAAa5vH,gBAAgB5nN,MAAQ+qU,EAAgBE,IAM7EuV,EAAsBn7V,UAAUilV,iBAAmB,SAAUntT,EAAOjf,GAEhE,QADiB,IAAbA,IAAuBA,EAAW,WACP,QAA3BlU,KAAKwtV,aAAa9mV,KAAgB,CAClCwN,EAAWif,EAAMkuF,eAAiBntG,EAClC,IAAI2hQ,GACA9oQ,EAAGomB,EAAMs9S,eAAe1jU,EACxBC,EAAGmmB,EAAMs9S,eAAezjU,EAAImmB,EAAM0gU,YAAY7mV,GAElD,OAAQkH,GACJ,IAAK,SACD2hQ,EAAW7oQ,EAAImmB,EAAMqxB,OAAOx3C,EAAImmB,EAAMqxB,OAAOzuC,OAAS,EACtD,MACJ,IAAK,UACD8/P,EAAW9oQ,GAAKomB,EAAM0gU,YAAY9mV,EAE1C,OAAO8oQ,EAGP,OAAOhjP,GAAiBM,EAAMi9T,SAAUpwV,KAAK4M,OAAQ5M,KAAK+yB,SAMlEyjU,EAAsBn7V,UAAUk9V,uBAAyB,SAAUplU,EAAO4kB,GACtE,OAAO/3C,KAAK0vV,aAAe78T,GAAiBM,EAAMi9T,SAAUpwV,KAAK4M,OAASmrC,EAAU/hC,MAAOhW,KAAK+yB,QAC5F/yB,KAAKsgV,iBAAiBntT,IAM9BqjU,EAAsBn7V,UAAU8zV,aAAe,WAC3CnvV,KAAKshF,SAAW,IAAI/rD,GAAK,EAAG,EAAGv1B,KAAKwtV,aAAax4T,cAAchf,MAAOhW,KAAKwtV,aAAax4T,cAAcjf,QACtG,IAAIknB,EAASj9B,KAAKwtV,aAAavwT,OAC/BxK,GAAkBzyB,KAAKshF,SAAU,IAAI67I,GAAUlgM,EAAOzwB,KAAMywB,EAAOxwB,MAAOwwB,EAAOvwB,IAAKuwB,EAAOtwB,UAKjG6pV,EAAsBn7V,UAAUqzV,gBAAkB,SAAUv7T,EAAOqvD,EAAWliF,EAAQ22B,EAAQlY,EAAQ8b,GAClG,IAAIv3B,EAAKtD,KAAKwtV,aAAaxsV,QAAQsC,GAAK,qBAAuByb,EAAS,IACpEyvU,EAAiBxuV,KAAKwtV,aAAaz9T,SAAS+9C,aAAcxqE,GAAIA,EAAK,KAAO6vB,EAAMlhB,QACpFkhB,EAAM9f,MAAQ8f,EAAM+oM,cAAgB/oM,EAAMnmB,EAAEE,WAC5C,IAAI+3B,GAAWjvB,MAAOwsE,EAAUv9C,OAAOjvB,MAAO6f,MAAO2sD,EAAUv9C,OAAOpP,OAClEgqT,EAAYnhV,KAAW7B,EAAS,aAAc2lF,EAAUzzD,MAAO,MAAM,GACrEqJ,GACAC,QAAQ,EAAOtB,KAAMmhM,GAAYn5M,OAAQ/e,KAAKwtV,aAAa5rT,cAAc,GAAIzO,MAAOA,EACpFrE,KAAMqE,EAAM9f,MAAO4xB,OAAQA,EAAQpP,MAAO2sD,EAAUpkD,KAAMnvB,SAAUuzE,EAAUvzE,SAAU8f,KAAM8wT,GAElG7/U,KAAKwtV,aAAa9mU,QAAQwxM,GAAY9/L,GACtC,IAAIygU,EAAmC,OAAtBzgU,EAASnpB,SAC1BkkB,EAAMk6T,cAAgBj1T,EAASC,OAC/BlF,EAAMrE,KAAOqE,EAAM9f,MAAQ+kB,EAAStJ,KACpC9uB,KAAK42V,YAAcx+T,EAAS6M,OAAOjvB,MAAS,EAAIoiB,EAAS6M,OAAOjvB,MAAS,EAEzE,IAAI2kB,EAAex5B,EAAc,OAC7BmC,GAAItD,KAAKwtV,aAAaxsV,QAAQsC,GAAK,uBAAiC6vB,EAAMlhB,MAC1E1O,OAAQ,uCAAyC60B,EAASvC,MAAQ,IAC9DiF,GAAa0nD,EAAUzzD,MAAQ,WAAaqJ,EAAS6M,OAAOjvB,MAAQ,YAAcoiB,EAAS6M,OAAOpP,MAAQ,MAE9GmH,EAAW67T,EAAa74V,KAAK84V,gBAAgBn+T,EAAcxH,EAAOiF,GAClEvJ,GAAYsE,EAAM9f,MAAOmvE,EAAUzzD,MAIvC,GAHAiO,EAASjnB,QAAU,EACnBinB,EAAShnB,OAAS,EAClBhW,KAAKy2V,qBAAqBtjU,EAAOqvD,EAAWxlD,EAAU/F,EAAQu3T,EAAgBlrV,GAC1E6vB,EAAMk6T,aAAc,CAYpB,GAXArtV,KAAK+4V,mBAAmB5lU,EAAMktT,YAAarjT,GACvC67T,EACA74V,KAAKg5V,iBAAiBr+T,EAAcxH,EAAO0H,EAAiB2nD,EAAUzzD,KAAK8G,MAAOuC,EAASvC,QAG3F24T,EAAe7sV,YAAY3B,KAAKwtV,aAAaz9T,SAASuU,cAAc,IAAI04L,GAAW15N,EAAK,SAAW6vB,EAAMlhB,MAAOmmB,EAASvC,MAAOuC,EAAS6M,OAAQ,EAAG9R,EAAMktT,YAAa79P,EAAU9oD,GAAI8oD,EAAU7oD,MAC/LhE,GAAY,IAAIC,GAAWtyB,EAAK,QAAU6vB,EAAMlhB,MAAOkhB,EAAMktT,YAAYtzU,EAAI/M,KAAK42V,YAAazjU,EAAMktT,YAAYrzU,EAAuB,EAAlBgwB,EAASjnB,OAAa,EAAK/V,KAAK42V,YAAa,QAASzjU,EAAM9f,MAAO,GAAI,QAAS+kB,EAASrJ,KAAMqJ,EAASrJ,KAAK8G,OAAS71B,KAAKi5V,kBAAkB9lU,EAAOiF,EAASvC,OAAQ24T,IAE3RxuV,KAAKwtV,aAAasB,2BAAoD,YAAvBtsQ,EAAUtuE,UAA0BlU,KAAKwtV,aAAasJ,oBACrG92V,KAAKwtV,aAAa5rT,cAAc,GAAG+sT,cAAc3uV,KAAKwtV,aAAa5rT,cAAc,GAAGgtT,WAAYz7T,EAAMktT,aAE9E,YAAxBltT,EAAMkuF,cAA6B,CACnC,IAAInkG,EAAOld,KAAKs4V,iBAAiB55V,KAAWy0B,EAAMktT,YAAa,MAAM,GAAOltT,EAAOqvD,EAAWrvD,EAAM0jU,YAChGvjC,EAActzT,KAAKwtV,aAAaz9T,SAASyF,SAAS,IAAIC,GAAWnyB,EAAK,aAAe6vB,EAAMlhB,MAAO,cAAeuwE,EAAUquQ,eAAe76U,MAAOwsE,EAAUquQ,eAAeh7T,OAAS1C,EAAM0C,MAAO,EAAG2sD,EAAUquQ,eAAe/8R,UAAW52C,IAC3OsxU,EAAe7sV,YAAY2xT,GAE/BhzT,EAAOqB,YAAY6sV,KAS3BgI,EAAsBn7V,UAAUy9V,gBAAkB,SAAU93V,EAASmyB,EAAOiF,GACxE,IAAI8gU,EAGJ,OAFAl4V,EAAU05B,GAAe15B,EAASmyB,EAAMlhB,MAAOmmB,EAASnpB,SAAUjP,KAAKwtV,aAAcr6T,EAAOnzB,KAAKwtV,aAAa5rT,cAAc,IAC5Hs3T,EAAan+T,GAAmB/5B,IACvBgV,MAAOkjV,EAAWljV,MAAOD,OAAQmjV,EAAWnjV,SAUzDygV,EAAsBn7V,UAAU29V,iBAAmB,SAAUr+T,EAAcxH,EAAO7yB,EAAQ64V,EAAY/6T,GAClGzD,EAAaj2B,MAAM8H,KAAQ2mB,EAAMktT,YAAa,EAAI,KAClD1lT,EAAaj2B,MAAMgI,IAAOymB,EAAMktT,YAAa,EAAI,KACjD1lT,EAAaj2B,MAAMmxB,MAAQsjU,GACvBn5V,KAAKi5V,kBAAkB9lU,EAAOiL,GAC9BzD,EAAagsC,oBACbrmE,EAAOqB,YAAYg5B,GACnB36B,KAAKo5V,oBAAoBp5V,KAAKwtV,aAAc7yT,KAMpD67T,EAAsBn7V,UAAU49V,kBAAoB,SAAU9lU,EAAO0C,GACjE,IAAIwjU,EAQA5Z,EAAWjiT,GAAkBG,GADjC07T,EAAqC,iBALjCA,EADAr5V,KAAK42V,aAAe,EACO,gBAAV/gU,EAA0B71B,KAAKs5V,mBAAmBnmU,GAAS0C,EAG3D71B,KAAKs5V,mBAAmBnmU,IAESt3B,OAAOsR,iBAAiB3M,SAASuL,KAAM,MAAMw+C,gBAAkB8uS,IAGrH,OADehtV,KAAK4xB,OAAoB,IAAbwhT,EAASriT,EAAuB,IAAbqiT,EAASpiT,EAAuB,IAAboiT,EAASniT,GAAW,MAClE,IAAM,QAAU,SAOvCk5T,EAAsBn7V,UAAU+9V,oBAAsB,SAAU5L,EAAcxsV,GAC1E,IAAI+d,EAASyuU,EAAa5rT,cAAc,GACpC/hC,EAAQkf,EAAO6vB,UAAU/uC,MAAQkf,EAAO6vB,UAAU1jC,SAClD6T,EAAO6vB,UAAU3O,QAAUutT,EAAargH,gBACxCnsO,EAAQ0D,MAAMC,WAAa,SAC3Bq0B,GAAgBh4B,EAASnB,EAAO,IAAK,YAM7C22V,EAAsBn7V,UAAUi+V,mBAAqB,SAAUnmU,GAC3D,MAA+B,YAAxBA,EAAMkuF,cACTrhH,KAAKwtV,aAAalgU,YAActtB,KAAKwtV,aAAa93T,WAAWpI,WAAa6F,EAAM0C,OAKxF2gU,EAAsBn7V,UAAU09V,mBAAqB,SAAU1Y,EAAarjT,EAAUw9B,QAClE,IAAZA,IAAsBA,EAAU,GACpC6lR,EAAYtqU,QAAUykD,EACtB6lR,EAAYrqU,OAASwkD,EACrB6lR,EAAYtzU,GAAKytD,EAAU,EAC3B6lR,EAAYrzU,GAAKwtD,EAAU,EAC3Bx9B,EAASjnB,QAAUykD,EACnBx9B,EAAShnB,OAASwkD,GAKtBg8R,EAAsBn7V,UAAU0kC,cAAgB,WAC5C,MAAO,yBAOXy2T,EAAsBn7V,UAAUiX,QAAU,SAAUk7U,KAK7CgJ,GACTnH,IC/mBExjQ,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAoBxCqtQ,GAAqC,SAAU7sQ,GAE/C,SAAS6sQ,EAAoB/L,GACzB,IAAIztV,EAAQ2sF,EAAOprF,KAAKtB,KAAMwtV,IAAiBxtV,KAG/C,OAFAD,EAAMytV,aAAeA,EACrBztV,EAAMrD,mBACCqD,EAoIX,OAzIA8rF,GAAU0tQ,EAAqB7sQ,GAU/B6sQ,EAAoBl+V,UAAUqB,iBAAmB,WACzCsD,KAAKwtV,aAAajlQ,cAGtBvoF,KAAKwtV,aAAarmQ,GAAG37E,GAAQC,UAAY,eAAiB,aAAczL,KAAKisU,kBAAmBjsU,MAChGA,KAAKwtV,aAAarmQ,GAAG37E,GAAQkgF,eAAgB1rF,KAAK8tO,iBAAkB9tO,MACpEA,KAAKwtV,aAAarmQ,GAAG37E,GAAQmgF,cAAe3rF,KAAK4tN,eAAgB5tN,QAErEu5V,EAAoBl+V,UAAU4wU,kBAAoB,SAAUprU,GACxDb,KAAKsyU,cAAc,MAEvBinB,EAAoBl+V,UAAUuyN,eAAiB,SAAU/sN,GACrD,IAAI8R,EAAU3S,KAAKwtV,aACf76U,EAAQse,QAAQgP,QAAUttB,EAAQqe,SAAW8E,GAAanjB,EAAQuzN,OAAQvzN,EAAQwzN,OAAQxzN,EAAQirN,mBAClG59N,KAAKixB,QAAQpwB,GACbb,KAAKsyU,cAAc,OAG3BinB,EAAoBl+V,UAAUyyO,iBAAmB,SAAUjtO,GACvD,IAAI8R,EAAU3S,KAAKwtV,aAEf76U,EAAQse,QAAQgP,QAAUnK,GAAanjB,EAAQuzN,OAAQvzN,EAAQwzN,OAAQxzN,EAAQirN,kBAC/E59N,KAAKixB,QAAQpwB,IAQrB04V,EAAoBl+V,UAAU41B,QAAU,SAAU30B,GAC9C,IAAI41U,EAAalyU,KAAK0wB,WAAW1wB,KAAKgB,QAAQsC,GAAK,gBAC/C8tU,EAAYc,GAAc99S,SAAS89S,EAAWr/T,aAAa,WAAY,IAAM,EAC7E40S,EAAaznT,KAAKmxU,kBAAkBC,GACxCpxU,KAAKwyU,oBAAoBl2U,EAAO0D,KAAKwtV,cAAepc,EAAW3pB,IAEnE8xC,EAAoBl+V,UAAUm3U,oBAAsB,SAAU3xU,EAAGgvB,EAAOu+S,EAAS3mB,GAC7E,IAAIjrT,EAAOwD,KAAKw5V,WAAW34V,EAAGgvB,EAAOA,EAAMq2M,OAAQr2M,EAAMs2M,QACrDzzM,EAAO7C,EAAM+tM,gBACjB59N,KAAK4lO,kBACDppO,EAAK22B,OAAWnzB,KAAK6lO,eAAe,IAAO7lO,KAAK6lO,eAAe,GAAG1yM,QAAU32B,EAAK22B,OAa5E32B,EAAK22B,OAASnzB,KAAK6oB,WACpB7oB,KAAKsyU,cAAc,KACnBtyU,KAAK6oB,UAAW,GAdhB7oB,KAAK6oO,SAASrsO,EAAM4xU,EAAS3mB,GAAY,KACrCznT,KAAKg2J,aAAax5J,EAAM4xU,EAASpuU,KAAK+nE,eAAevrE,EAAMqzB,EAAMoB,UACjEjxB,KAAKy0B,cAAc5E,EAAOu+S,EAASpuU,KAAKyyU,WAAWj2U,GAAOA,EAAK22B,MAAMs9S,eAAgBj0U,EAAKuiB,OAAOgV,SAAUv3B,EAAK22B,OAAQ,UAAW,EAAGT,EAAM,KAAMl2B,EAAK22B,QAGvJnzB,KAAKqxU,gBAAgBrxU,KAAK2S,SAC1B3S,KAAK0wB,WAAW1wB,KAAKgB,QAAQsC,GAAK,YAAYiB,UAElDvE,KAAK6oB,UAAW,IAU5B0wU,EAAoBl+V,UAAUm+V,WAAa,SAAU34V,EAAGgvB,EAAO9iB,EAAGC,GAC9D,IACI1J,EAAK0wB,GADInzB,EAAEsG,OACa7D,IAAI,GAChC,IAAK62C,MAAM72C,EAAGyb,QAAS,CACnB,IAAI42M,EAAcryN,EAAGyb,OACjB6Y,EAAat0B,EAAG6vB,MACpB,KAAK11B,EAAkBk4N,IAAiBx7K,MAAMw7K,IAAiBl4N,EAAkBm6B,IAAgBuiB,MAAMviB,IAAa,CAChH,IAAI7Y,EAAS/e,KAAK2hC,mBAAmBg0L,EAAa9lM,EAAM+R,eACxD,GAAI7iB,EAAOwvN,cACP,OAAO,IAAIjR,GAAav+M,EAAOkY,OAAOW,GAAa7Y,IAI/D,OAAO,IAAIu+M,GAAa,KAAM,OAKlCi8H,EAAoBl+V,UAAUsmC,mBAAqB,SAAU1vB,EAAO2vB,GAChE,OAAOA,EAAc,IAEzB23T,EAAoBl+V,UAAU0sE,eAAiB,SAAUvrE,EAAMy0B,GAC3D,IAAIlS,EAASviB,EAAKuiB,OACdyd,EAASvL,EAAQuL,OAASvL,EAAQuL,OAAS,iCAC/C,OAAOx8B,KAAK0yU,cAAcl2U,EAAK22B,MAAOpU,EAAQyd,IAElD+8T,EAAoBl+V,UAAUo3U,WAAa,SAAUj2U,GACjD,MAAoB,KAAhBwD,KAAKmmF,OACE,IAEXnmF,KAAKmmF,OAASnmF,KAAK0yU,cAAcl2U,EAAK22B,MAAO32B,EAAKuiB,OAAQ/e,KAAKmmF,QACM,KAAjEnmF,KAAKmmF,OAAO52E,QAAQ,OAAQ,IAAIA,QAAQ,SAAU,IAAIW,OAC/ClQ,KAAKmmF,OAET,KAEXozQ,EAAoBl+V,UAAUq3U,cAAgB,SAAUv/S,EAAOpU,EAAQyd,GAGnE,IAAK,IAFDx/B,EACA01D,EACKt0D,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK61B,GAAQ/0B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIk1U,EAAYzwU,EAAGzE,GACnBpB,EAAQ,IAAIknB,OAAO,WAAkBovT,EAAY,IAAK,MACtD92S,EAASA,EAAOjtB,QAAQvS,EAAMT,OAAQ42B,EAAMmgT,IAEhD,IAAK,IAAIrvU,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAKgB,OAAOi1U,eAAex0T,IAAU9a,EAAKwG,EAAGhO,OAAQwH,IAAM,CAChFqvU,EAAY7oU,EAAGxG,GACnBjH,EAAQ,IAAIknB,OAAO,YAAmBovT,EAAY,IAAK,MACvD5gR,EAAY3zC,EAAOu0T,GACnB92S,EAASA,EAAOjtB,QAAQvS,EAAMT,OAAQm2D,GAE1C,OAAOl2B,GAKX+8T,EAAoBl+V,UAAU0kC,cAAgB,WAC1C,MAAO,uBAOXw5T,EAAoBl+V,UAAUiX,QAAU,SAAUud,KAK3C0pU,GACTroB,IC/JErlP,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAmBxCutQ,GAAuC,SAAU/sQ,GAEjD,SAAS+sQ,EAAsBjM,GAC3B,IAAIztV,EAAQ2sF,EAAOprF,KAAKtB,KAAMwtV,IAAiBxtV,KAE/C,OADAD,EAAMgwB,SAAWy9T,EAAaz9T,SACvBhwB,EAmRX,OAvRA8rF,GAAU4tQ,EAAuB/sQ,GASjC+sQ,EAAsBp+V,UAAUw/U,qBAAuB,SAAU2S,GAC7DxtV,KAAK05U,QAAU8T,EAAaxsV,QAAQsC,GAAK,uBACzCtD,KAAK45U,WAAa4T,EAAaxsV,QAAQsC,GAAK,kBAC5CtD,KAAKqoT,uBACLroT,KAAKumO,WAAa,MAOtBkzH,EAAsBp+V,UAAUitT,gBAAkB,SAAUklC,GACxDxtV,KAAK66U,qBAAqB2S,GAC1BxtV,KAAK+e,OAASrgB,KAAW8uV,EAAa5rT,cAAe,MAAM,GAC3D5hC,KAAKw5U,eACLx5U,KAAKk7U,gBAAgBl7U,KAAK65U,cAAc2T,EAAanlC,oBAAqBroT,KAAKqoT,qBAAsBmlC,IAKzGiM,EAAsBp+V,UAAU8/U,cAAgB,SAAUp8T,GACtD,OAAQA,EAAO46T,gBAAkB35U,KAAK05U,QAAU,WAAa36T,EAAO9M,OAKxEwnV,EAAsBp+V,UAAUogV,aAAe,SAAU+R,EAAczuU,EAAQ9M,GAC3E,OAAQjS,KAAKs7U,kBAAkBrpU,KAKnCwnV,EAAsBp+V,UAAUigV,kBAAoB,SAAUrpU,GAC1D,IAAIg7C,EAAYjtD,KAAK2S,QAAQ3R,QAAQsC,GAAK,WAAa2O,EAAM8M,OAAS,UAAY9M,EAAMkhB,MACxF,OAAO3yB,SAASyuB,eAAeg+B,IAMnCwsS,EAAsBp+V,UAAUs/U,0BAA4B,SAAU6S,EAAclxV,IAChB,IAA5DA,EAAM6K,OAAO7D,GAAG/E,QAAQivV,EAAaxsV,QAAQsC,GAAK,OAGlDhH,EAAM6K,OAAO7D,GAAG/E,QAAQ,aAAe,GAAKjC,EAAM6K,OAAO7D,GAAG/E,QAAQ,gBAAkB,IACtFyB,KAAK4mT,iBAAiB5yR,GAAY13B,EAAM6K,OAAO7D,IAAKkqV,EAAclxV,EAAM6K,SAMhFsyV,EAAsBp+V,UAAUurT,iBAAmB,SAAU30S,EAAOu7U,EAAcxsV,GAI9E,OAHAA,EAAUA,EAAQsC,GAAG/E,QAAQ,cAAgB,EACzCivV,EAAa0B,mBAAmB39U,WAAWU,EAAM8M,QAAQxN,WAAWU,EAAMkhB,OACxEnyB,EACEwsV,EAAannH,eACjB,IAAK,QACIlsL,MAAMloC,EAAMkhB,SACbnzB,KAAKqxE,UAAUm8Q,EAAcv7U,GAAQjR,IACrChB,KAAK27U,WAAW6R,EAAaxsV,QAAQsC,GAAIkqV,EAAa5rT,kBAQtE63T,EAAsBp+V,UAAUg2E,UAAY,SAAUm8Q,EAAcv7U,EAAO4pU,GAClE2R,EAAat+B,eACdlvT,KAAK87U,0BAA0B0R,EAAcxtV,KAAKqoT,oBAAqBp2S,EAAOu7U,EAAazuU,QAE/F,IAAI1b,EAAYw4U,EAAiB,KAAOA,EAAiB,GAAGhpU,aAAa,UAAY,IACjFgpU,EAAiB,IAAMx4U,EAAU9E,QAAQyB,KAAK+7U,kBAAkBF,EAAiB,GAAGv4U,MAAQ,GAC5FtD,KAAKg8U,aAAaH,EAAkB5pU,GACpCjS,KAAKi8U,iBAAiBj8U,KAAKqoT,oBAAqBp2S,KAGhDjS,KAAKk8U,YAAYL,EAAkB5pU,GACnCjS,KAAKi8U,iBAAiBj8U,KAAKqoT,oBAAqBp2S,GAAO,KAO/DwnV,EAAsBp+V,UAAUktT,gBAAkB,SAAUilC,EAAc/Q,GACtE,IAAIp0B,EAAsB3pT,KAAWsB,KAAKqoT,oBAAqB,MAAM,GACrEroT,KAAK08U,uBAAuB8Q,EAAcxtV,KAAKqoT,qBAC/CroT,KAAK27U,WAAW6R,EAAaxsV,QAAQsC,GAAIkqV,EAAa5rT,eACtD5hC,KAAKk7U,gBAAgB7yB,EAAqBmlC,IAK9CiM,EAAsBp+V,UAAUqhV,uBAAyB,SAAU8Q,EAAcpS,GAC3DoS,EAAa0B,mBAC/B,IAAK,IAAI9wV,EAAK,EAAGi9U,EAAYD,EAASh9U,EAAKi9U,EAAU5+U,OAAQ2B,IAAM,CAC/D,IAAI6T,EAAQopU,EAAUj9U,GACtB4B,KAAKg8U,cAAch8U,KAAKs7U,kBAAkBrpU,IAASA,KAO3DwnV,EAAsBp+V,UAAUshV,gBAAkB,SAAU6Q,EAAczuU,EAAQ6Y,GAChE41T,EAAa0B,mBAAmB39U,WAAWwN,GAAQxN,WAAWqmB,GAC1D53B,KAAKm7U,cAAcqS,EAAa5rT,cAAc7iB,IADhE,IAEIwtN,EAAiBihH,EAAa0B,mBAAmB39U,WAAWwN,GAAQxN,WAAWqmB,GACnF53B,KAAKqxE,UAAUm8Q,EAAc,IAAIr5T,GAAMpV,EAAQ6Y,IAAc20M,IAC7DvsO,KAAK27U,WAAW6R,EAAaxsV,QAAQsC,GAAIkqV,EAAa5rT,gBAK1D63T,EAAsBp+V,UAAU6/U,gBAAkB,SAAUE,EAASoS,GAEjE,IAAK,IADDxsV,EACK5C,EAAK,EAAGs7V,EAAYte,EAASh9U,EAAKs7V,EAAUj9V,OAAQ2B,IAAM,CAC/D,IAAI6T,EAAQynV,EAAUt7V,IACtB4C,EAAUhB,KAAKs7U,kBAAkBrpU,KAE7BjS,KAAK4mT,iBAAiB30S,EAAOu7U,EAAcxsV,KAOvDy4V,EAAsBp+V,UAAUygV,0BAA4B,SAAU0R,EAAcv7U,EAAOuiP,EAAcj+N,GAErG,IAAK,IADDxX,EACK5iB,EAAI,EAAGA,EAAI8V,EAAMxV,OAAQN,IAC9B4iB,EAASwX,EAAiBtkB,EAAM9V,GAAG4iB,QAC9B/e,KAAK25V,YAAY1nV,EAAM9V,GAAIq4P,KAC5Bx0P,KAAKg8U,aAAah8U,KAAKy7U,aAAa+R,EAAczuU,EAAQ9M,EAAM9V,IAAK8V,EAAM9V,IAC3E8V,EAAMwW,OAAOtsB,EAAG,GAChBA,MAOZs9V,EAAsBp+V,UAAUsgV,WAAa,SAAUie,EAAOh4T,GAE1D,IAAK,IADDj9B,EAAa3E,KAAK65V,qBAAqB75V,KAAKqoT,qBACvCjqT,EAAK,EAAGyjC,EAAkBD,EAAexjC,EAAKyjC,EAAgBplC,OAAQ2B,IAAM,CACjF,IAAI2gB,EAAS8iB,EAAgBzjC,GACzB2gB,EAAO+X,SACP92B,KAAKq8U,uBAAuB77U,SAASyuB,eAAe2qU,EAAQ,qBAAsB55V,KAAKm7U,cAAcp8T,GAASpa,KAO1H80V,EAAsBp+V,UAAUghV,uBAAyB,SAAUr7U,EAASqC,EAAWsB,GAKnF,IAAK,IAHD+tO,EACAonH,EACAC,EAHA3/U,EAAYpZ,EAAQuQ,WAAW,GAAa,WAIvCpV,EAAI,EAAGA,EAAIie,EAAS3d,OAAQN,IACjC29V,EAAe1/U,EAASje,GAAG0W,aAAa,UAAY,GACpDknV,EAAc3/U,EAASje,GAAGsE,WAAWoS,aAAa,UAAY,IACrB,IAArCinV,EAAav7V,QAAQ8E,KAAyD,IAApC02V,EAAYx7V,QAAQ8E,IAAqBsB,EACnF3E,KAAKq6U,YAAYjgU,EAASje,GAAI6D,KAAK45U,YAGnC55U,KAAKu6U,eAAengU,EAASje,GAAI6D,KAAK45U,YAEtC55U,KAAK2S,QAAQm8U,0BAA4B9uV,KAAK2S,QAAQs9N,eAAen5M,UACrE47M,EAAclyO,SAASyuB,eAAejvB,KAAK2S,QAAQ3R,QAAQsC,GAAK,uBAAyBnH,OAE5C,IAArC29V,EAAav7V,QAAQ8E,KAAyD,IAApC02V,EAAYx7V,QAAQ8E,IAAqBsB,EACnF3E,KAAKq6U,YAAY3nG,EAAa1yO,KAAK45U,YAGnC55U,KAAKu6U,eAAe7nG,EAAa1yO,KAAK45U,cAS1D6f,EAAsBp+V,UAAU6gV,YAAc,SAAUt4U,EAAUqO,GAC9D,IAAK,IAAI7T,EAAK,EAAGukE,EAAa/+D,EAAUxF,EAAKukE,EAAWlmE,OAAQ2B,IAAM,CAClE,IAAI4C,EAAU2hE,EAAWvkE,GACrBs0O,OAAc,EACd1xO,IACIhB,KAAK2S,QAAQm8U,0BAA4B9uV,KAAK2S,QAAQs9N,eAAen5M,UACrE47M,EAAclyO,SAASyuB,eAAejvB,KAAK2S,QAAQ3R,QAAQsC,GAAK,uBAAyB2O,EAAMkhB,OAC/FnzB,KAAKu6U,eAAe7nG,EAAa1yO,KAAK45U,YACtC55U,KAAKq6U,YAAY3nG,EAAa1yO,KAAK+7U,kBAAkBrpG,EAAYpvO,MAErEtD,KAAKu6U,eAAev5U,EAAQP,WAAYT,KAAK45U,YAC7C55U,KAAKu6U,eAAev5U,EAAShB,KAAK45U,YAClC55U,KAAKq6U,YAAYr5U,EAAShB,KAAK+7U,kBAAkB/6U,EAAQsC,QAOrEm2V,EAAsBp+V,UAAU0gV,kBAAoB,SAAUz4U,GAC1D,OAAOtD,KAAKm7U,cAAcn7U,KAAK2S,QAAQoM,OAAOiV,GAAY1wB,GAAIyb,UAKlE06U,EAAsBp+V,UAAU2gV,aAAe,SAAUp4U,EAAUqO,GAE/D,IAAK,IADDygO,EACKt0O,EAAK,EAAG46I,EAAap1I,EAAUxF,EAAK46I,EAAWv8I,OAAQ2B,IAAM,CAClE,IAAI4C,EAAUg4I,EAAW56I,GACrB4C,IACIhB,KAAK2S,QAAQm8U,0BAA4B9uV,KAAK2S,QAAQs9N,eAAen5M,UACrE47M,EAAclyO,SAASyuB,eAAejvB,KAAK2S,QAAQ3R,QAAQsC,GAAK,uBAAyB2O,EAAMkhB,OAC/FnzB,KAAKu6U,eAAe7nG,EAAa1yO,KAAK+7U,kBAAkBrpG,EAAYpvO,MAExEtD,KAAKu6U,eAAev5U,EAAShB,KAAK+7U,kBAAkB/6U,EAAQsC,QAOxEm2V,EAAsBp+V,UAAU4gV,iBAAmB,SAAUb,EAASnpU,EAAO7N,GACzE,IAAK,IAAIjI,EAAI,EAAGA,EAAIi/U,EAAQ3+U,OAAQN,IAC5B6D,KAAK25V,YAAYve,EAAQj/U,GAAI8V,KAC7BmpU,EAAQ3yT,OAAOtsB,EAAG,GAClBA,KAGJiI,GACAg3U,EAAQ52U,KAAKyN,IAMrBwnV,EAAsBp+V,UAAUs+V,YAAc,SAAU/6V,EAAOC,GAC3D,OAASD,EAAMu0B,QAAUt0B,EAAOs0B,OAAWv0B,EAAMmgB,SAAWlgB,EAAOkgB,QAKvE06U,EAAsBp+V,UAAUw+V,qBAAuB,SAAUxxC,GAE7D,IAAK,IADDvxR,GAAU,EACL14B,EAAK,EAAG47V,EAAwB3xC,EAAqBjqT,EAAK47V,EAAsBv9V,OAAQ2B,IAAM,CAEnG,GAAI0jC,GADOk4T,EAAsB57V,GACX+0B,MAAOnzB,KAAK2S,QAAQivB,cAAc,GAAG3K,QAAQH,QAAS,CACxEA,GAAU,EACV,OAGR,OAAOA,GAKX2iU,EAAsBp+V,UAAU0kC,cAAgB,WAC5C,MAAO,yBAOX05T,EAAsBp+V,UAAUiX,QAAU,SAAUk7U,KAG7CiM,GACTlgB,ICzSE1tP,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAgBxC+tQ,GAAwC,SAAUvtQ,GAMlD,SAASutQ,EAAuBtnV,GAC5B,IAAI5S,EAAQ2sF,EAAOprF,KAAKtB,KAAM2S,IAAY3S,KAE1C,OADAD,EAAMm6V,IAAMvnV,EACL5S,EAgCX,OAxCA8rF,GAAUouQ,EAAwBvtQ,GAclCutQ,EAAuB5+V,UAAU+sT,kBAAoB,SAAUpnT,GAC3D,IAAIjB,EAAQC,KACZA,KAAKowD,YAAcpwD,KAAKk6V,IAAI9pS,YAC5BpwD,KAAKqU,cAAgBlT,EAAc,OAC/BmC,GAAItD,KAAKk6V,IAAIl5V,QAAQsC,GAAK,4BAE9BtD,KAAKowD,YAAYl5B,IAAI,SAAUmwB,EAAYp1C,GACvClS,EAAM2sT,kBAAkBrlQ,EAAYp1C,EAAOlS,EAAMsU,iBAErDgnB,GAAcr7B,KAAKqU,cAAerT,IAKtCi5V,EAAuB5+V,UAAU0kC,cAAgB,WAE7C,MAAO,cAOXk6T,EAAuB5+V,UAAUiX,QAAU,SAAUK,KAG9CsnV,GACT7U,IzSvBE+U,GAA2B,WAQ3B,OAPA,SAAmBptV,EAAGC,EAAG4kB,EAAQmI,EAAQjD,QACrB,IAAZA,IAAsBA,GAAU,GACpC92B,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAK4xB,OAASA,EACd5xB,KAAK82B,QAAUA,M0S5CnB+0D,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAmBxCkuQ,GAA6B,SAAU1tQ,GAEvC,SAAS0tQ,EAAYjpU,GACjB,IAAIpxB,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KASjC,OARAD,EAAM+kE,WAAa3zC,EAAM2zC,WACzB/kE,EAAMsoO,MAAQl3M,EAAMk3M,MACpBtoO,EAAMyyB,MAAQrB,EAAMqB,MACpBzyB,EAAM+8D,MAAQ3rC,EAAM2rC,MACpB/8D,EAAMq3B,KAAOg1C,EAAAA,EACbrsE,EAAMs3B,MAAQ+0C,EAAAA,EACdrsE,EAAMo3N,KAAO/qJ,EAAAA,EACbrsE,EAAMq3N,MAAQhrJ,EAAAA,EACPrsE,EA6LX,OAxMA8rF,GAAUuuQ,EAAa1tQ,GAiBvB0tQ,EAAY/+V,UAAUg/V,YAAc,SAAU1nV,GAC1C,IACImyD,EACAhI,EAFA/8D,EAAQC,KAGZA,KAAKs6V,aAAe,EACpB3nV,EAAQ4nV,YAAYtjU,UAChBtkB,EAAQoM,OAAOtiB,OACfkW,EAAQoM,OAAOmY,IAAI,SAAUnY,GACzB+lD,EAAa/lD,EAAO+lD,YAAcnyD,EAAQmyD,WAC1ChI,EAAQ/9C,EAAO+9C,OAASnqD,EAAQmqD,MAChC/9C,EAAOkY,UACPl3B,EAAMy6V,kBAAkB11R,EAAYhI,EAAOnqD,EAASoM,KAIxD/e,KAAKw6V,kBAAkB7nV,EAAQmyD,WAAYnyD,EAAQmqD,MAAOnqD,IAGlEynV,EAAY/+V,UAAUm/V,kBAAoB,SAAU11R,EAAYhI,EAAOnqD,EAASoM,GAC5E,IAAIhf,EAAQC,KACZ,IAAIvC,EAAkBq/D,IAAWr/D,EAAkBqnE,GAAnD,CAIAnyD,EAAQo3N,WAAa,IAAI4D,GAAK7oK,EAAYhI,GACxBnqD,EAAQo3N,WAAWjE,QAAQnzN,EAAQo3N,WAAWC,gBAAgB1pE,iBACpEgkC,KAAK,SAAUzjM,GAAK,OAAOd,EAAMkqO,mBAAmBppO,EAAG8R,EAASoM,UALxE/e,KAAKiqO,oBAAqBlrO,OAAQ+lE,EAAY7lD,MAAO6lD,EAAWroE,QAAUkW,EAASoM,IAW3Fq7U,EAAY/+V,UAAU4uO,mBAAqB,SAAUppO,EAAG8R,EAASoM,GAC7D,IAAI07U,EAAwB,KAAb55V,EAAE9B,OAAgB8B,EAAE9B,UACnCiB,KAAKooO,gBAAgBqyH,EAAU9nV,EAASrU,OAAOhB,KAAKm9V,GAAUh+V,OAAQsiB,GACtE/e,KAAKs6V,cAAgBv7U,EAAS,EAAI/e,KAAKs6V,aAClCv7U,GAAU/e,KAAKs6V,eAAiB3nV,EAAQoM,OAAOtiB,SAChDuD,KAAK06V,aAAa/nV,GAClB3S,KAAK26V,wBAAwBhoV,GAC7B3S,KAAK46V,aAAajoV,GAClBA,EAAQ0nV,gBAQhBD,EAAY/+V,UAAU+sO,gBAAkB,SAAUqyH,EAAU9nV,EAAS9Q,EAAKkd,GAKtE,IAJA,IACIoU,EADAh3B,EAAI,EAEJksO,EAAStpN,GAAUA,EAAOspN,OAAU11N,EAAQ01N,MAC5C71M,EAASzT,GAAUA,EAAOyT,OAAU7f,EAAQ6f,MACzCr2B,EAAI0F,IACPsxB,EAAQ,IAAIgnU,GAAUt9V,EAASwrO,EAAOoyH,EAASt+V,IAAKU,EAAS21B,EAAOioU,EAASt+V,MACvEy1B,QAAUuB,EAAMpmB,EACtBomB,EAAM4G,QAAU5G,EAAMnmB,EAClB+R,GACAA,EAAOkY,OAAOzyB,KAAK2uB,GAEvBnzB,KAAKo3B,KAAO/qB,KAAK8T,IAAIngB,KAAKo3B,KAAMjE,EAAMvB,QACtC5xB,KAAKm3N,KAAO9qN,KAAK8T,IAAIngB,KAAKm3N,KAAMhkM,EAAM4G,QACtC/5B,KAAKq3B,KAAOhrB,KAAKC,IAAItM,KAAKq3B,KAAMlE,EAAMvB,QACtC5xB,KAAKo3N,KAAO/qN,KAAKC,IAAItM,KAAKo3N,KAAMjkM,EAAM4G,QACtCpnB,EAAQ4nV,YAAYtjU,OAAOzyB,KAAK2uB,GAChCh3B,KAGRi+V,EAAY/+V,UAAUq/V,aAAe,SAAU/nV,GAC3C,IAAIkoV,EACA1kV,GACAsiB,QAAS9lB,EAAQ8lB,QAASC,QAAS/lB,EAAQ+lB,QAC3Cv2B,SAAUwQ,EAAQxQ,SAAUmvB,UAAW3e,EAAQ2e,UAC/CiC,WAAY5gB,EAAQO,UAAW4oB,YAAanpB,EAAQmpB,YACpDnL,QAAShe,EAAQge,QAASsyC,SAAUtwD,EAAQswD,SAAUitP,aAAcv9S,EAAQu9S,cAEhFlwT,KAAK8X,MAAQ3B,EACbnW,KAAK8X,MAAMuvD,aAAe10D,EAAQ00D,aAClCrnE,KAAK8X,MAAMihB,cAAgB,EAC3B/4B,KAAK8X,MAAMmrD,SAAWtwD,EAAQswD,SAC9BjjE,KAAK8X,MAAMs+M,cAAgB,GAAI,EAAG,EAAG,GACrCp2N,KAAK8X,MAAM4a,KAAO/f,EAAQojB,OAC1B/1B,KAAK8X,MAAM0c,iBACXx0B,KAAK8X,MAAM8gB,YAAc,cACzBiiU,EAAaloV,EAAQyjB,GAAiBzjB,EAAQ2e,WAAa,WAChDnR,IAAMngB,KAAKo3B,KACtByjU,EAAWvuV,IAAMtM,KAAKq3B,KACtBwjU,EAAWxkI,eAAer2N,KAAK8X,MAAOnF,EAAQojB,QACjB,gBAAzB/1B,KAAK8X,MAAMwZ,WACXupU,EAAWrjI,kBAAkBx3N,KAAK8X,MAAO9X,KAAK8X,MAAMy+M,YAAYp2M,IAAKngB,KAAK8X,MAAMy+M,YAAYjqN,IAAKtM,KAAK8X,MAAMy+M,YAAYp0N,UAE5HnC,KAAK8X,MAAMy+M,YAAYjiM,MAAQt0B,KAAK8X,MAAMy+M,YAAYjqN,IAAMtM,KAAK8X,MAAMy+M,YAAYp2M,IACnFngB,KAAK8X,MAAMka,aAAehyB,KAAK8X,MAAMy+M,YACrCskI,EAAW/jI,uBAAuB92N,KAAK8X,MAAOnF,IAMlDynV,EAAY/+V,UAAUu/V,aAAe,SAAUjoV,GAO3C3S,KAAK4X,OALD2pN,gBAAkBvrN,MAAO,GAAKihN,aAAc,OAC5C2D,gBAAkB5kN,MAAO,GAAKqf,YAAclG,KAAM,KAClD2H,SAAS,EAAOxF,UAAW,SAAUmH,QAAS,KAAMC,QAAS,KAC7Dv2B,SAAU,MAGdnC,KAAK4X,MAAM8a,KAAO/f,EAAQojB,OAC1B/1B,KAAK4X,MAAMmhB,cAAgB,EAC3B/4B,KAAK4X,MAAMw+M,cAAgB,GAAI,EAAG,EAAG,GACrCp2N,KAAK4X,MAAMghB,YAAc,WACzBjmB,EAAQmoV,aAAa36U,IAAMngB,KAAKm3N,KAChCxkN,EAAQmoV,aAAaxuV,IAAMtM,KAAKo3N,KAChCzkN,EAAQmoV,aAAazkI,eAAer2N,KAAK4X,MAAOjF,EAAQojB,QACxDpjB,EAAQmoV,aAAatjI,kBAAkBx3N,KAAK4X,MAAO5X,KAAK4X,MAAM2+M,YAAYp2M,IAAKngB,KAAK4X,MAAM2+M,YAAYjqN,IAAKtM,KAAK4X,MAAM2+M,YAAYp0N,UAClInC,KAAK4X,MAAM2+M,YAAYjiM,MAAQt0B,KAAK4X,MAAM2+M,YAAYjqN,IAAMtM,KAAK4X,MAAM2+M,YAAYp2M,IACnFngB,KAAK4X,MAAMoa,aAAehyB,KAAK4X,MAAM2+M,aAOzC6jI,EAAY/+V,UAAU6wO,aAAe,SAAUv5N,GAC3C,IAAI5S,EAAQC,KACR+6V,EAAapoV,EAAQod,SAAS+9C,aAAcxqE,GAAIqP,EAAQ3R,QAAQsC,GAAK,WACrE+tF,EAAS3kE,GAAe/Z,EAAQ0I,OACpC1I,EAAQoM,OAAOmY,IAAI,SAAUnY,EAAQ9M,GACjC8M,EAAOjH,MAAQ/X,EAAM+X,MACrBiH,EAAOnH,MAAQ7X,EAAM6X,MACrBmH,EAAO8Q,MAAQld,EACfoM,EAAO9M,MAAQA,EACf8M,EAAOjH,MAAMyb,WAAa5gB,EAAQO,UAClC6L,EAAO8qD,SAAW9qD,EAAOqf,MAAQizD,EAAOp/E,EAAQo/E,EAAO50F,QACvDsD,EAAMi7V,oBAAoBroV,EAASoM,EAAQ9M,GAC3CU,EAAQyjB,GAAiBrX,EAAOrY,MAAQ,gBAAgBinG,OAAO5uF,EAAQhf,EAAM+X,MAAO/X,EAAM6X,OAAO,GACjGmjV,EAAWp5V,YAAYod,EAAO+tN,eAC1B/tN,EAAO6vB,UAAU3O,QAAUttB,EAAQw6N,eACnCx6N,EAAQyjB,GAAiBrX,EAAOrY,MAAQ,gBAAgB0mO,YAAYruN,KAG5EpM,EAAQ6d,UAAU7uB,YAAYo5V,GAC1BpoV,EAAQoM,OAAOtiB,QACfuD,KAAKi7V,iBAAiBtoV,EAASooV,IAGvCX,EAAY/+V,UAAU2/V,oBAAsB,SAAUroV,EAASoM,EAAQ9M,GACnE,IAAIg7C,EAAYt6C,EAAQ3R,QAAQsC,GAChCyb,EAAOgV,SAAW,IAAIwB,GAAKv1B,KAAK8X,MAAM4a,KAAK3lB,EAAG/M,KAAK4X,MAAM8a,KAAK1lB,EAAGhN,KAAK8X,MAAM4a,KAAK1c,MAAOhW,KAAK4X,MAAM8a,KAAK3c,QACxGgJ,EAAO6tN,gBAAkBj6N,EAAQod,SAASsrF,aAAa,IAAI2hH,GAAW/vK,EAAY,wBAA0Bh7C,EAAO,eAAiB+D,MAAO,EAAG6f,MAAO,QAAU,GAC3J9oB,EAAG,EAAGC,EAAG,EACTgJ,MAAO+I,EAAOgV,SAAS/d,MACvBD,OAAQgJ,EAAOgV,SAAShe,UAE5BgJ,EAAO+tN,cAAgBn6N,EAAQod,SAAS+9C,aACpCxqE,GAAM2pD,EAAY,cAAgBh7C,EAClC5E,UAAa,aAAe0R,EAAOgV,SAAShnB,EAAI,IAAOgS,EAAOgV,SAAU,EAAI,IAC5Eg5M,YAAa,QAAU9/K,EAAY,wBAA0Bh7C,EAAQ,MAEzE8M,EAAO+tN,cAAcnrO,YAAYod,EAAO6tN,kBAE5CwtH,EAAY/+V,UAAUs/V,wBAA0B,SAAUhoV,GACtD,IAAI6nD,EAAU7nD,EAAQsqB,OAAOtwB,OACzBuuV,EAAcrsU,GAAY,SAAUlc,EAAQ0iB,YAAYtf,OAC5D/V,KAAKovT,8BAA8BpvT,KAAK8X,MAAO,IAAI2X,GAAK9c,EAAQojB,OAAO/f,MAAOrD,EAAQojB,OAAOhgB,QAAS/V,KAAKo3B,KAAMp3B,KAAKq3B,MAAM,IACxH1kB,EAAQ2tB,gBAAwC,aAAtB3tB,EAAQ2e,WACI,UAAlCtxB,KAAK8X,MAAMw3S,oBAAmC38S,EAAQoM,OAAOtiB,SACjEkW,EAAQojB,OAAOhgB,QAAqC,YAA1BpD,EAAQ0uG,eAAyD,IAA1B1uG,EAAQoM,OAAOtiB,OAAgB+9D,EAAU0gS,EACrGA,EAAc,EAAI1gS,GAEtB7nD,EAAQoM,OAAOtiB,SAChBkW,EAAQojB,OAAO/oB,GAAK2F,EAAQojB,OAAOhgB,OAAS,EAC5CpD,EAAQojB,OAAOhgB,OAASpD,EAAQojB,OAAOhgB,OAAS,IAGxDqkV,EAAY/+V,UAAU4/V,iBAAmB,SAAUtoV,EAASwoV,GACxD,IAAInoV,EAAU,IAAIyiB,GAAW9iB,EAAQ3R,QAAQsC,GAAK,gBAAiB,cAAeqP,EAAQyoV,gBAAgBplV,MAAOrD,EAAQyoV,gBAAgBvlU,MAAO,EAAG,GAAK,KAAQljB,EAAQojB,OAAQ,EAAI,IAAOpjB,EAAQojB,OAAQ,EACvM,OAASpjB,EAAQojB,OAAOhpB,EAAI4F,EAAQojB,OAAO/f,OAAS,IAAMrD,EAAQojB,OAAO/oB,EACzE,OAAS2F,EAAQojB,OAAOhpB,EAAI4F,EAAQojB,OAAO/f,OAAS,KAAOrD,EAAQojB,OAAO/oB,EAAI2F,EAAQojB,OAAOhgB,QAC7F,MAASpD,EAAQojB,OAAQ,EAAI,KAAOpjB,EAAQojB,OAAO/oB,EAAI2F,EAAQojB,OAAOhgB,QAAU,KAChFiZ,EAAarc,EAAQod,SAASyF,SAASxiB,GAC3CL,EAAQ6d,UAAU7uB,YAAYqtB,IAE3BorU,GACTjrC,IC7NEtjO,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAgBxCmvQ,GAAoC,SAAU3uQ,GAE9C,SAAS2uQ,EAAmBlqU,GACxB,IAAIpxB,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KAIjC,OAHAD,EAAMu7V,oBACNv7V,EAAMw7V,qBACNx7V,EAAMy7V,eAAiBrqU,EAChBpxB,EAsXX,OA5XA8rF,GAAUwvQ,EAAoB3uQ,GAW9B2uQ,EAAmBhgW,UAAUogW,gBAAkB,WAC3C,IAQI7b,EARAxkH,EAAS,EACTzoN,EAAU3S,KAAKw7V,eACfj6H,EAAiB5uN,EAAQ4uN,eACzB3G,EAAiBjoN,EAAQioN,eACzBiI,EAAY,GACZC,EAAY,GACZpwM,EAAO/f,EAAQojB,OACf2lU,EAAY/oV,EAAQ27N,YAAYx2N,MAGhC6jV,GADQD,EAAU1pU,aACDrf,EAA4B,qBAAI,cAAgB,MACrE3S,KAAK47V,UAAYjpV,EAAQod,SAAS+9C,aAAcxqE,GAAIqP,EAAQ3R,QAAQsC,GAAK,eACzE,IAAIu4V,EAAiC,YAAzBlpV,EAAQ+nN,cAAwD,IAA1B/nN,EAAQoM,OAAOtiB,OAC7Di2B,EAAK1lB,EAAI0lB,EAAK3c,OAAS6kN,EAAe7kN,OAAS2c,EAAK1lB,EAAI0lB,EAAK3c,OAAS6kN,EAAe7kN,OAEzF/V,KAAKs7V,oBACLI,EAAUrmU,WAAa1iB,EAAQ0iB,WAC/BqmU,EAAUz4R,SAAWtwD,EAAQswD,SAC7By4R,EAAUxrC,aAAev9S,EAAQu9S,aACjCwrC,EAAUlhI,SAAU,EACM,aAAtB7nN,EAAQ2e,YACRtxB,KAAKovT,8BAA8BssC,EAAWhpU,EAAMgpU,EAAUllI,YAAYj5N,MAAOm+V,EAAUllI,YAAYx3M,IAAK08U,EAAUlhI,SACtHx6N,KAAKsvT,mBAAqBosC,EAAUpsC,mBACpCtvT,KAAK87V,eAAeJ,IAExB17V,KAAKs7V,iBAAmBI,EAAUlnU,cAClCx0B,KAAK+7V,eACLnc,EAAc8b,EAAUlnU,cAAc/3B,OACtC,IAAK,IAAIN,EAAI,EAAGA,EAAIyjV,EAAazjV,IAC7B6D,KAAK+7V,YAAYv3V,KAAKxE,KAAKs7V,iBAAiBn/V,GAAGa,QAC/Co+N,EAAU9nM,GAAmBtzB,KAAKs7V,iBAAiBn/V,GAAGa,MAAO0+V,GAAahpU,EAAK1c,MAAS0c,EAAK3lB,IAC/E2lB,EAAK3lB,GAAM2lB,EAAK3lB,EAAI2lB,EAAK1c,OAAUolN,IAC7CyH,EAAYA,EAAUroN,OAAO,KAAO4gN,EAAS,KAAOzoN,EAAQojB,OAAO/oB,EAAI2F,EAAQojB,OAAOhgB,QAClF,MAAQqlN,EAAS,IAAMzoN,EAAQojB,OAAO/oB,EAAI,KAC9C81N,EAAYA,EAAUtoN,OAAO,OAAkB,KAAOkY,EAAK1lB,EAAI0lB,EAAK3c,QAChE,QAAmB,IAAM8lV,EAAO,MAG5C,IAAI7oV,EAAU,IAAIyiB,GAAW9iB,EAAQ3R,QAAQsC,GAAK,iBAAkB,cAAei+N,EAAevrN,MAAOrD,EAAQoM,OAAOtiB,OAASk/V,GAAiBp6H,EAAe1rM,OAASljB,EAAQ+iB,WAAWqN,cAAgB,cAAe,EAAGw+L,EAAeztK,UAAW+uK,GACzP7iO,KAAK47V,UAAUj6V,YAAYgR,EAAQod,SAASyF,SAASxiB,IACrDA,EAAU,IAAIyiB,GAAW9iB,EAAQ3R,QAAQsC,GAAK,iBAAkB,cAAes3N,EAAe5kN,MAAO2lV,GAAiB/gI,EAAe/kM,OAASljB,EAAQ+iB,WAAWqN,cAAe,EAAGw+L,EAAeztK,UAAWgvK,GAC7M9iO,KAAK47V,UAAUj6V,YAAYgR,EAAQod,SAASyF,SAASxiB,KAKzDqoV,EAAmBhgW,UAAU2gW,iBAAmB,WAC5C,IAEIp5H,EAFAzsN,EAAOnW,KAAKw7V,eAAeltH,YAAYx2N,MACvCnF,EAAU3S,KAAKw7V,eAGft0U,GADOvU,EAAQojB,OACApjB,EAAQod,SAAS+9C,aAAcxqE,GAAIqP,EAAQ3R,QAAQsC,GAAK,iBACvE24V,EAAoBtpV,EAAQod,SAAS+9C,aAAcxqE,GAAIqP,EAAQ3R,QAAQsC,GAAK,0BAC5E44V,EAAqBvpV,EAAQod,SAAS+9C,aAAcxqE,GAAIqP,EAAQ3R,QAAQsC,GAAK,2BAC7E64V,EAAgBhmV,EAKpB,GAJAysN,EAAS5iO,KAAKo8V,WAAWzpV,GAAS,GAClC3S,KAAKq8V,gBAAgBlmV,EAAMysN,EAAQ,cAAejwN,EAASspV,GAC3DE,EAAc90R,aAAe80R,EAAc7sC,mBAAsB38S,EAAQw3L,SACrEnqM,KAAKs8V,sBAAsBnmV,EAAKm5S,oBAChC38S,EAAQ2tB,gBAAwC,aAAtB3tB,EAAQ2e,WAAwD,UAA5BtxB,KAAKsvT,mBAAgC,CACnG6sC,EAAcnqU,aAAa7vB,SAAW,EACtCg6V,EAAc3nU,iBACdx0B,KAAK87V,eAAeK,GACpBn8V,KAAKu7V,kBAAoBY,EAAc3nU,cACvCouM,EAAS5iO,KAAKo8V,WAAWzpV,GAAS,GAClC,IAAIsyB,EAASjlC,KAAKq8V,gBAAgBF,EAAev5H,EAAQ,mBAAoBjwN,EAASupV,GAClFh/U,EAAO,IAAIuY,GAAW9iB,EAAQ3R,QAAQsC,GAAK,uBAAwB,cAAeqP,EAAQioN,eAAe5kN,MAAOrD,EAAQioN,eAAe/kM,OAASljB,EAAQ+iB,WAAWqN,cAAe,EAAGpwB,EAAQ4uN,eAAeztK,UAAW7uB,GAC3NjlC,KAAK47V,UAAUj6V,YAAYgR,EAAQod,SAASyF,SAAStY,IAEzDvK,EAAQ27N,YAAYx2N,MAAM0c,cAAgB7hB,EAAQ27N,YAAYx2N,MAAM0c,cAAcha,OAAO2hV,EAAc3nU,eACvGtN,EAAavlB,YAAYs6V,GACzB/0U,EAAavlB,YAAYu6V,GAEzBvpV,EAAQ6d,UAAU7uB,YAAY3B,KAAK47V,WACnCjpV,EAAQ6d,UAAU7uB,YAAYulB,IAMlCm0U,EAAmBhgW,UAAUihW,sBAAwB,SAAU51V,GAC3D,IAAIyvE,GAAS,QAAS,UAAW,SAAU,QAAS,OAAQ,QAAS,UAAW,WAChF,MAAiB,UAATzvE,EAAmB,QAAUyvE,EAAMA,EAAM53E,QAAQmI,GAAQ,IAMrE20V,EAAmBhgW,UAAUygW,eAAiB,SAAU3lV,GACpDA,EAAKqe,iBACL,IACI+nU,EADAh/V,EAAQ,IAAI6iB,KAAKjK,EAAK6b,aAAa7R,KAEnChe,EAAWnC,KAAKw7V,eAAer5V,SAAWnC,KAAKw7V,eAAer5V,SAAW,EAC7E,OAAQgU,EAAKm5S,oBACT,IAAK,QACD/xT,EAAQ,IAAI6iB,KAAK7iB,EAAMgqE,cAAcr6D,YACrC,MACJ,IAAK,UAEG3P,EADAA,EAAMkqE,YAAc,EACZ,IAAIrnD,KAAK7iB,EAAMgqE,cAAe,EAAG,GAEpChqE,EAAMkqE,YAAc,EACjB,IAAIrnD,KAAK7iB,EAAMgqE,cAAe,EAAG,GAEpChqE,EAAMkqE,YAAc,EACjB,IAAIrnD,KAAK7iB,EAAMgqE,cAAe,EAAG,GAGjC,IAAInnD,KAAK7iB,EAAMgqE,cAAe,EAAG,GAE7C,MACJ,IAAK,SACDhqE,EAAQ,IAAI6iB,KAAK7iB,EAAMgqE,cAAehqE,EAAMkqE,YAC5C,MACJ,IAAK,QACDlqE,EAAQ,IAAI6iB,KAAK7iB,EAAMgqE,cAAehqE,EAAMkqE,WAAYlqE,EAAMoqE,UAAYpqE,EAAM2nE,UAChF,MACJ,IAAK,OACD3nE,EAAQ,IAAI6iB,KAAK7iB,EAAMgqE,cAAehqE,EAAMkqE,WAAYlqE,EAAMoqE,WAC9D,MACJ,IAAK,QACDpqE,EAAQ,IAAI6iB,KAAK7iB,EAAMgqE,cAAehqE,EAAMkqE,WAAYlqE,EAAMoqE,UAAWpqE,EAAMqqE,YAC/E,MACJ,IAAK,UACDrqE,EAAQ,IAAI6iB,KAAK7iB,EAAMgqE,cAAehqE,EAAMkqE,WAAYlqE,EAAMoqE,UAAWpqE,EAAMqqE,WAAYrqE,EAAMuqE,cACjG,MACJ,IAAK,UACDvqE,EAAQ,IAAI6iB,KAAK7iB,EAAMgqE,cAAehqE,EAAMkqE,WAAYlqE,EAAMoqE,UAAWpqE,EAAMqqE,WAAYrqE,EAAMuqE,aAAcvqE,EAAMyoE,cAO7H,IAJAu2R,EAAeh/V,EAAM8iB,UACrBrgB,KAAKw7V,eAAeh/T,OAASx8B,KAAKw7V,eAAe9qR,KAAK47B,eAClD9vE,OAAQrmB,EAAK2lB,YAAap1B,KAAM0vB,GAAiBjgB,EAAK+5S,cAAejtP,SAAUjjE,KAAKuvT,YAAYp5S,KAE7FomV,EAAepmV,EAAK6b,aAAa1lB,KACpC6J,EAAKqe,cAAchwB,KAAK,IAAI+zB,GAAcv4B,KAAKkhG,YAAYlhG,KAAKw7V,eAAeh/T,OAAO,IAAIpc,KAAKm8U,IAAgBpmV,EAAMA,EAAKqe,cAAc/3B,QAAS8/V,EAAcv8V,KAAKw7V,eAAenmU,aACnLknU,EAAev8V,KAAKonE,yBAAyBjxD,EAAMomV,EAAcp6V,GAAUke,WASnFg7U,EAAmBhgW,UAAU6lG,YAAc,SAAUpyE,EAAM3Y,EAAMlE,GAC7D,IAAIuqV,EAAc1tU,EACd2tU,EAAez8V,KAAKw7V,eAAel7T,gBAAmD,IAAjCtgC,KAAKs7V,iBAAiB7+V,OAC/E,OAAQ0Z,EAAKm5S,oBACT,IAAK,UACGxgS,EAAKvwB,QAAQ,QAAU,EACvBi+V,EAAeC,EAAiD,WAAlC3tU,EAAKvf,QAAQ,MAAO,YAE7Cuf,EAAKvwB,QAAQ,QAAU,EAC5Bi+V,EAAeC,EAAiD,WAAlC3tU,EAAKvf,QAAQ,MAAO,YAE7Cuf,EAAKvwB,QAAQ,QAAU,EAC5Bi+V,EAAeC,EAAiD,WAAlC3tU,EAAKvf,QAAQ,MAAO,YAE7Cuf,EAAKvwB,QAAQ,QAAU,IAC5Bi+V,EAAeC,EAAiD,WAAlC3tU,EAAKvf,QAAQ,MAAO,aAEtD,MACJ,IAAK,QACDitV,EAAc,UAAWvqV,EACzB,MACJ,QACIuqV,EAAc1tU,EAGtB,OAAO0tU,GAOXnB,EAAmBhgW,UAAU+gW,WAAa,SAAUzpV,EAAS+pV,GACzD,IAAI95H,EACAnhO,EAAYkR,EAAQojB,OAAO/oB,EAAI2F,EAAQojB,OAAOhgB,OAC9C4mV,EAAahqV,EAAQioN,eAAe7kN,OACpCy/Q,EAAa3mQ,GAAY,gBAAiBlc,EAAQ0iB,YAAYtf,OAC9DykD,EAAU,EAuBd,OArBIooK,EAD2B,YAA1BjwN,EAAQ0uG,eAAwD,YAAzB1uG,EAAQ+nN,cAAyD,IAA1B/nN,EAAQoM,OAAOtiB,OACrFgF,EAAYk7V,EAAaniS,EAAuB,IAAbg7N,EAEb,WAA1B7iR,EAAQ0uG,eAAuD,WAAzB1uG,EAAQ+nN,aAC1Cj5N,EAAYk7V,EAAaniS,EAEH,WAA1B7nD,EAAQ0uG,eAAuD,YAAzB1uG,EAAQ+nN,aAC1Cj5N,EAAY+4D,EAGZ/4D,EAAY+4D,EAAwB,IAAbg7N,EAEhCknE,IACAliS,EAAU,GACoB,YAA1B7nD,EAAQ0uG,eAAyD,IAA1B1uG,EAAQoM,OAAOtiB,OACtDmmO,GAAUpoK,EAAuB,IAAbg7N,EAGpB5yD,EAAmC,YAAzBjwN,EAAQ+nN,cAAwD,IAA1B/nN,EAAQoM,OAAOtiB,OAC3DgF,EAAYk7V,EAAaniS,EAAuB,IAAbg7N,EAAoB/zR,EAAY+4D,EAAuB,IAAbg7N,GAGlF5yD,GAUXy4H,EAAmBhgW,UAAUghW,gBAAkB,SAAUlmV,EAAMysN,EAAQt/N,EAAIqP,EAASuU,GAChF,IACI7T,EACAupV,EACAxhI,EAGAyhI,EANAC,EAAY3mV,EAAKqe,cAAc/3B,OAI/Bi2B,EAAO/f,EAAQojB,OACfkP,EAAS,GAET02T,EAAiBhpV,EAA4B,qBAAI,cAAgB,KACjEoqV,EAAQpqV,EAAQO,UAAawf,EAAK3lB,EAAI2lB,EAAK1c,MAAS0c,EAAK3lB,EACzDs6D,EAAelxD,EAAKm5S,mBACpB0tC,EAAuC,aAAtBrqV,EAAQ2e,UACzBwrU,EAAY,EAAK3mV,EAAKqe,cAAc,GAAGx3B,MAAQmZ,EAAKqe,cAAc,GAAGx3B,OAChEmZ,EAAK6b,aAAa1lB,IAAM6J,EAAKqe,cAAc,GAAGx3B,OAAS,EAAI,EAC1C,aAAtB2V,EAAQ2e,WAA8C,YAAjB+1C,GAA+C,UAAjBA,GACnErnE,KAAKi9V,mBAAmB9mV,EAAMxD,GAElC,IAAK,IAAIxW,EAAI,EAAG0F,EAAMi7V,EAAW3gW,EAAI0F,EAAK1F,IA0BtC,GAzBAkX,EAAQ8C,EAAKqe,cAAcr4B,GAC3BkX,EAAM8b,KAAON,GAAYxb,EAAMyb,KAAM3Y,EAAKkf,YACF,WAApC1iB,EAAQuqV,wBACR9hI,EAAU9nM,GAAoBjgB,EAAMrW,MAAQggW,EAAiB,EAAI7mV,GAAQuc,EAAK1c,MAAS0c,EAAK3lB,EAEtFzJ,EAAG/E,QAAQ,cAAgB,IACjC68N,EAASp7N,KAAKm9V,cAAchnV,EAAMha,IAEtC0gW,EAAcvpU,GAAoBjgB,EAAW,MAAG8C,GAAQuc,EAAK1c,MAAS0c,EAAK3lB,GAEhE,IAAN5Q,GAAYA,IAAMga,EAAKqe,cAAc/3B,OAAS,GAAKkW,EAAQO,YAAekoN,EAAS1oM,EAAK3lB,IACzFquN,EAAS1oM,EAAK3lB,EAAIsG,EAAM8b,KAAKnZ,MAAQ,IAEpC7Z,IAAMga,EAAKqe,cAAc/3B,OAAS,GAAY,IAANN,GAAWwW,EAAQO,YAC1DkoN,EAAS/nN,EAAM8b,KAAKnZ,MAAU0c,EAAK3lB,EAAI2lB,EAAK1c,QAC9ColN,EAAS1oM,EAAK3lB,EAAI2lB,EAAK1c,MAAQ3C,EAAM8b,KAAKnZ,MAAQ,GAGlD1S,EAAG/E,QAAQ,qBAAuB,GAC9B68N,GAAU1oM,EAAK3lB,GAAM2lB,EAAK3lB,EAAI2lB,EAAK1c,OAAUolN,IAC7Cn2L,EAASA,EAAOzqB,OAAO,KAAOqiV,EAAa,IAAMj6H,EAC7C,MAAQi6H,EAAa,KAAOj6H,EAASvvN,EAAM8b,KAAKpZ,UAIvB,SAAjCpD,EAAQ4oN,sBACF,IAANp/N,IAAW6D,KAAKs7N,YAAYnlN,EAAMilN,EAAQ/nN,EAAM8b,KAAKnZ,MAAO+mV,EAAOH,EAAUztU,KAAKnZ,OADtF,CAKA,IAAIoiB,OAAW,EACX/C,EAAa1iB,EAAQ0iB,WACrB3wB,GACAyqB,KAAMkG,EAAWlG,KAAM0G,MAAO8lU,GAAiBtmU,EAAWQ,OAASljB,EAAQ+iB,WAAWuN,eACtF3T,WAAY+F,EAAW/F,WACvBD,UAAWgG,EAAWhG,WAAa1c,EAAQ0iB,WAAWhG,UACtDD,WAAYiG,EAAWjG,YAAczc,EAAQ0iB,WAAWjG,WACxD3hB,QAAS4nB,EAAW5nB,SAAWkF,EAAQ0iB,WAAW5nB,QAClD0zB,cAAe9L,EAAW8L,eAAiBxuB,EAAQ0iB,WAAW8L,cAC9DP,aAAcvL,EAAWuL,cAAgBjuB,EAAQ0iB,WAAWuL,cAEhExI,GACIC,QAAQ,EAAOtB,KAAM,cACrBjI,KAAMzb,EAAMyb,KAAM9xB,MAAOqW,EAAMrW,MAAOq4B,WAAY3wB,EAClD8/C,OAAQ,IAAIjvB,GAAK6lM,EAAQwH,EAAQvvN,EAAM8b,KAAKnZ,MAAO3C,EAAM8b,KAAKpZ,SAElEpD,EAAQ+T,QAAQ,cAAe0R,GAC1BA,EAASC,SACV1lB,EAAQ6tN,OAAOh8N,KAAK4zB,GAKxBzC,GAAY,IAAIC,GAAW51B,KAAKw7V,eAAex6V,QAAQsC,GAAKA,EAAKnH,EAAGi/N,EAAQwH,EAAQ,SAAUxqM,EAAStJ,MAAOsJ,EAAS/C,WAAY+C,EAAS/C,WAAWQ,OAASljB,EAAQ+iB,WAAWuN,eAAgB/b,GAAc1jB,aAAa,QAA4B,aAAnB2S,EAAKmb,UAA2B,kBAAoB,mBAC3RyrU,EAAQ3hI,EACRwhI,EAAYvpV,GAEhB,OAAO4xB,GAKXo2T,EAAmBhgW,UAAUigO,YAAc,SAAUnlN,EAAM2lN,EAAUuwH,EAAc0Q,EAAOK,GACtF,OAAQjnV,EAAe,WAAK2lN,EAAWuwH,EAAe,EAAI0Q,EAAQK,EAAY,EACzEthI,EAAWuwH,EAAe,EAAI0Q,EAAQK,EAAY,GAO3D/B,EAAmBhgW,UAAU4hW,mBAAqB,SAAU9mV,EAAMxD,GAS9D,IAAK,IALDoqV,EACAjhI,EAJA0E,EAASrqN,EAAKqe,cACdorT,EAAcp/G,EAAO/jO,OACrBs5B,EAASpjB,EAAQojB,OAGjB5zB,EAAiC,aAAtBwQ,EAAQ2e,UACnBsuT,EAAc,EAAKp/G,EAAO,GAAGxjO,MAAQwjO,EAAO,GAAGxjO,MAASmZ,EAAK6b,aAAa7vB,SACxE,EACGhG,EAAI,EAAGA,EAAIyjV,EAAazjV,IAC7B2/N,EAAYxoM,GAAoBktM,EAAOrkO,GAAGa,MAAQmF,EAAW,EAAIgU,GAAQ4f,EAAO/f,MAAS+f,EAAOhpB,EAChGyzN,EAAOrkO,GAAGgzB,KAAON,GAAY2xM,EAAOrkO,GAAG2yB,KAAM3Y,EAAKkf,YAExC,IAANl5B,GAAW2/N,EAAW/lM,EAAOhpB,IAC7B+uN,EAAW/lM,EAAOhpB,EAAIyzN,EAAOrkO,GAAGgzB,KAAKnZ,MAAQ,GAEjB,YAA5BG,EAAKm5S,mBACK,IAANnzT,IACKqkO,EAAOrkO,GAAG2yB,KAAKvwB,QAAQ,YAAc,GACrCyB,KAAKs7N,YAAYnlN,EAAM2lN,EAAU0E,EAAOrkO,GAAGgzB,KAAKnZ,MAAO+mV,EAAOv8H,EAAOrkO,EAAI,GAAGgzB,KAAKnZ,QAClFwqN,EAAO68H,MAAM,SAAUhqV,GAEnB,OADAA,EAAMyb,KAAOzb,EAAMyb,KAAK5hB,WAAWqC,QAAQ,UAAW,QAC/C,IAEX4G,EAAKqe,cAAgBgsM,EACrBxgO,KAAKi9V,mBAAmB9mV,EAAMxD,IAG1B3S,KAAKs7N,YAAYnlN,EAAM2lN,EAAU0E,EAAOrkO,GAAGgzB,KAAKnZ,MAAO+mV,EAAOv8H,EAAOrkO,EAAI,GAAGgzB,KAAKnZ,SACjFwqN,EAAO68H,MAAM,SAAUhqV,GAEnB,OADAA,EAAMyb,KAAOzb,EAAMyb,KAAK5hB,WAAWqC,QAAQ,MAAO,MAC3C,IAEX4G,EAAKqe,cAAgBgsM,IAKA,UAA5BrqN,EAAKm5S,oBACC,IAANnzT,GAAcqkO,EAAOrkO,GAAG2yB,KAAKvwB,QAAQ,SAAW,GAChDyB,KAAKs7N,YAAYnlN,EAAM2lN,EAAU0E,EAAOrkO,GAAGgzB,KAAKnZ,MAAO+mV,EAAOv8H,EAAOrkO,EAAI,GAAGgzB,KAAKnZ,SAClFwqN,EAAO68H,MAAM,SAAUhqV,GAEnB,OADAA,EAAMyb,KAAOzb,EAAMyb,KAAK5hB,WAAWqC,QAAQ,OAAQ,MAC5C,IAEX4G,EAAKqe,cAAgBgsM,GAG7Bu8H,EAAQjhI,GAQhBu/H,EAAmBhgW,UAAU8hW,cAAgB,SAAUhnV,EAAMlE,GACzD,IAAIoB,EAAQ8C,EAAKqe,cAAcviB,GAC3BqrV,EAAYnnV,EAAKqe,cAAcviB,EAAQ,GACvC8jB,EAAS/1B,KAAKw7V,eAAezlU,OACjC,MAAwD,SAAhD/1B,KAAKw7V,eAAe0B,wBACvB5pU,GAAoBjgB,EAAW,MAAG8C,GAAQ4f,EAAO/f,MAAS+f,EAAOhpB,EAAIsG,EAAM8b,KAAKnZ,MAAQ,EACxFsd,GAAoBgqU,EAAYA,EAAUtgW,MAAQmZ,EAAK6b,aAAa1lB,IAAM6J,GAAQ4f,EAAO/f,MAAS+f,EAAOhpB,EAAIsG,EAAM8b,KAAKnZ,OAE1HqlV,GACT7rC,K1SzYF,SAAW9X,GAEPA,EAAoB5iF,eAChB3lM,KAAM,OACNC,WAAY,SACZyG,MAAO,KACPxG,UAAW,SACXC,WAAY,YAGhBooR,EAAoBxiF,kBAChB/lM,KAAM,OACNC,WAAY,SACZyG,MAAO,KACPxG,UAAW,SACXC,WAAY,YAfpB,CAiBGooR,KAAwBA,Q2StB3B,ICAW5tF,GDAPj+H,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAS5DmgU,GAAsC,SAAU7wQ,GAEhD,SAAS6wQ,IACL,IAAIx9V,EAAmB,OAAX2sF,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAGhE,OADAD,EAAMg0B,SAAW,IAAIwB,GAAK,EAAG,EAAG,EAAG,GAC5Bx1B,EAgCX,OArCA8rF,GAAU0xQ,EAAsB7wQ,GAOhCN,IACIllF,EAAS,OACVq2V,EAAqBliW,UAAW,kBAAc,GACjD+wF,IACIllF,EAAS,OACVq2V,EAAqBliW,UAAW,aAAS,GAC5C+wF,IACIllF,EAAS,OACVq2V,EAAqBliW,UAAW,aAAS,GAC5C+wF,IACIllF,EAAS,OACVq2V,EAAqBliW,UAAW,aAAS,GAC5C+wF,IACIllF,EAAS,SACVq2V,EAAqBliW,UAAW,YAAQ,GAC3C+wF,IACIrkF,GAAUk4B,QAAQ,GAASnI,KAC5BylU,EAAqBliW,UAAW,iBAAa,GAChD+wF,IACIrkF,GAAU8tB,MAAO,cAAe7f,MAAO,GAAKs/M,KAC7CioI,EAAqBliW,UAAW,cAAU,GAC7C+wF,IACIllF,EAAS,OACVq2V,EAAqBliW,UAAW,YAAQ,GAC3C+wF,IACIllF,EAAS,IACVq2V,EAAqBliW,UAAW,aAAS,GAC5C+wF,IACIllF,EAAS,MACVq2V,EAAqBliW,UAAW,iBAAa,GACzCkiW,GACT/8R,IAKEg9R,GAA+B,SAAU9wQ,GAEzC,SAAS8wQ,IACL,OAAkB,OAAX9wQ,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBA6rF,GAAU2xQ,EAAe9wQ,GAIzBN,IACIllF,EAAS,OACVs2V,EAAcniW,UAAW,aAAS,GACrC+wF,IACIllF,EAAS,OACVs2V,EAAcniW,UAAW,cAAU,GACtC+wF,IACIrkF,GAAUiO,MAAO,EAAG6f,MAAO,MAAQy/L,KACpCkoI,EAAcniW,UAAW,cAAU,GACtC+wF,IACIllF,EAAS,OACVs2V,EAAcniW,UAAW,YAAQ,GACpC+wF,IACIllF,EAAS,WACVs2V,EAAcniW,UAAW,YAAQ,GAC7BmiW,GACTh9R,IAKEi9R,GAA+B,SAAU/wQ,GAEzC,SAAS+wQ,IACL,OAAkB,OAAX/wQ,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAU4xQ,EAAe/wQ,GAIzBN,IACIrkF,KAAYy1V,KACbC,EAAcpiW,UAAW,aAAS,GACrC+wF,IACIllF,EAAS,OACVu2V,EAAcpiW,UAAW,2BAAuB,GACnD+wF,IACIllF,EAAS,OACVu2V,EAAcpiW,UAAW,6BAAyB,GAC9CoiW,GACTj9R,IAKEk9R,GAAyB,SAAUhxQ,GAEnC,SAASgxQ,IACL,OAAkB,OAAXhxQ,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAU6xQ,EAAShxQ,GAInBN,IACIllF,EAAS,UACVw2V,EAAQriW,UAAW,oBAAgB,GACtC+wF,IACIllF,EAAS,IACVw2V,EAAQriW,UAAW,gBAAY,GAClC+wF,IACIllF,EAAS,OACVw2V,EAAQriW,UAAW,YAAQ,GAC9B+wF,IACIllF,GAAS,IACVw2V,EAAQriW,UAAW,gBAAY,GAC3BqiW,GACTl9R,IAKEm9R,GAAwC,SAAUjxQ,GAElD,SAASixQ,IACL,OAAkB,OAAXjxQ,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAU8xQ,EAAwBjxQ,GAIlCN,IACIllF,EAAS,KACVy2V,EAAuBtiW,UAAW,cAAU,GAC/C+wF,IACIllF,EAAS,WACVy2V,EAAuBtiW,UAAW,gBAAY,GACjD+wF,IACI/jF,KAAeq1V,KAChBC,EAAuBtiW,UAAW,eAAW,GACzCsiW,GACTn9R,IAKEo9R,GAAsC,SAAUlxQ,GAEhD,SAASkxQ,IACL,OAAkB,OAAXlxQ,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA0B/D,OA5BA6rF,GAAU+xQ,EAAsBlxQ,GAIhCN,IACIllF,GAAS,IACV02V,EAAqBviW,UAAW,cAAU,GAC7C+wF,IACIllF,EAAS,MACV02V,EAAqBviW,UAAW,eAAW,GAC9C+wF,IACIllF,EAAS,OACV02V,EAAqBviW,UAAW,YAAQ,GAC3C+wF,IACIllF,EAAS,OACV02V,EAAqBviW,UAAW,cAAU,GAC7C+wF,IACIrkF,EAAQ2vS,GAAoBxiF,iBAAkBG,KAC/CuoI,EAAqBviW,UAAW,iBAAa,GAChD+wF,IACIllF,EAAS,OACV02V,EAAqBviW,UAAW,gBAAY,GAC/C+wF,IACIrkF,GAAU8tB,MAAO,UAAW7f,MAAO,IAAOs/M,KAC3CsoI,EAAqBviW,UAAW,cAAU,GAC7C+wF,IACIllF,EAAS,aACV02V,EAAqBviW,UAAW,mBAAe,GAC3CuiW,GACTp9R,IElLEq9R,GAA6B,WAC7B,SAASA,EAAY1sU,GACjBnxB,KAAK2S,QAAUwe,EACfnxB,KAAKi3B,UACLj3B,KAAK41U,MAAQpqU,GAAQub,OAASvb,GAAQ2gU,OACtC,IAAI59S,EAAQ4C,EAAMyR,uBAAuBrU,MACzCvuB,KAAK89V,aAAgD,IAAhC3sU,EAAMuE,WAAWmN,YAAqD,IAAjC1R,EAAMuE,WAAWoN,YAC3E9iC,KAAKitD,UAAY97B,EAAMnwB,QAAQsC,GAC/BtD,KAAK+9V,aAAe5sU,EAAMuE,WAAWmN,WAAa,EAClD7iC,KAAKtD,mBACLsD,KAAKg+V,WAAa7sU,EAAMoP,qBAAuB,cAC1ChS,EAAM6P,MAAQjN,EAAMuE,WAAW0N,gBA0ZxC,OApZAy6T,EAAYxiW,UAAUsyG,OAAS,SAAUx8E,GACrC,IAAIpB,EAAWoB,EAAMpB,SACjBrrB,EAAQysB,EAAMyR,uBACd+4T,EAAiBxqU,EAA0B,qBAAI,cAAgB,KAC/D8sU,EAAcluU,EAAS+9C,aACvBxqE,GAAMtD,KAAKitD,UAAY,WACvBvoD,MAAQysB,EAA0B,qBAAI,uBAAyB,KAE/DmmE,EAAS,IAAI0lI,GAAWh9N,KAAKitD,UAAY,sBAAuB0uS,GAAiBj3V,EAAMw5V,uBAAyB/sU,EAAMuE,WAAWwN,qBAAuBltB,MAAO,GAAK,GACpKjJ,EAAGokB,EAAM4E,OAAOhpB,EAAGC,EAAGmkB,EAAM4E,OAAO/oB,EACnCgJ,MAAOmb,EAAM4E,OAAO/f,MAAQ,EAC5BD,OAAQob,EAAM4E,OAAOhgB,SAEzB/V,KAAKm+V,sBAAwBpuU,EAASuU,cAAcgzD,GACpDA,EAAOh0F,GAAKtD,KAAKitD,UAAY,uBAC7BjtD,KAAKo+V,uBAAyBruU,EAASuU,cAAcgzD,GACrDA,EAAOh0F,GAAKtD,KAAKitD,UAAY,gBAC7BqqC,EAAOl5D,KAAOu9T,GAAiBj3V,EAAM6+B,qBAAuBpS,EAAMuE,WAAW6N,oBAC7EvjC,KAAKokJ,gBAAkBr0H,EAASuU,cAAcgzD,GAC9Ct3F,KAAKokJ,gBAAgB5gJ,aAAa,QAAS,wBAC3CxD,KAAKq+V,WAAatuU,EAAS+9C,aACvBxqE,GAAMtD,KAAKitD,UAAY,cAAevoD,MAAS,sBAEnD1E,KAAKs+V,YAAcvuU,EAAS+9C,aACxBxqE,GAAMtD,KAAKitD,UAAY,eAAgBvoD,MAAS,sBAEpD1E,KAAKu+V,YAAYxuU,EAAUoB,EAAM4E,OAAQ/1B,KAAKq+V,WAAYr+V,KAAKitD,UAAY,cAAegxS,GAC1Fj+V,KAAKu+V,YAAYxuU,EAAUoB,EAAM4E,OAAQ/1B,KAAKs+V,YAAat+V,KAAKitD,UAAY,gBAC5EgxS,EAAYt8V,YAAY3B,KAAKm+V,uBAC7BF,EAAYt8V,YAAY3B,KAAKo+V,wBAC7BH,EAAYt8V,YAAY3B,KAAKokJ,iBAC7B65M,EAAYt8V,YAAY3B,KAAKq+V,YAC7BJ,EAAYt8V,YAAY3B,KAAKs+V,aAC7BntU,EAAMX,UAAU7uB,YAAYs8V,IAShCJ,EAAYxiW,UAAUkjW,YAAc,SAAU5wP,EAAQ53E,EAAQz1B,EAAQgD,EAAI26V,GACtE,IAQIhlB,EARAtmU,EAAU3S,KAAK2S,QACf6rV,EAAQ7rV,EAAQiwB,uBAAuBrU,MACvC7pB,EAAQiO,EAAQ+iB,WAChB1oB,EAAI+oB,EAAO/oB,EAAI+oB,EAAOhgB,OAAS,EAC/BhJ,EAAI/M,KAAK+9V,aACTU,EAAc9rV,EAAQ+iB,WAAWoN,YAAc,EAAK,EACpD64T,EAAgBhpV,EAAQ4tB,qBAAuB,cAAgB,KAC/Dm+T,EAAY/C,GAAiB6C,EAAMv5T,OAAOpP,OAASnxB,EAAMy+B,eAE7D7iC,EAAOqB,YAAYgsG,EAAOn4E,SAAS,IAAIC,GAAWnyB,EAAK,aAAc,cAAek7V,EAAMv5T,OAAOjvB,MAAOrD,EAAQoM,OAAOtiB,OAASiiW,EAAY,cAAe,EAAG,KAAM,OAAkB,IAAO3oU,EAAQ,EAAI,QAAwB,KAAOA,EAAO/oB,EAAI+oB,EAAOhgB,QAAU,OACpQ/V,KAAK2+V,OAAS3xV,EAAK2F,EAAQ+iB,WAAWoN,YAAc,EACpD9iC,KAAK4+V,QAAU7oU,EAAO/oB,EAAIhN,KAAK2+V,OAAS3+V,KAAK2+V,OAAS5oU,EAAO/oB,EACzDixV,IAAgBtrV,EAAQ4tB,wBACxB04S,EAAgBtrO,EAAO6M,cACTx4G,UAAY,iEACdhC,KAAK2+V,OAAS,YAAchsV,EAAQ+iB,WAAWmN,WAAa,aAAelwB,EAAQ+iB,WAAWoN,YAAc,UAC1F,WAAf07T,EAAM93V,KAAoB,MAAQ,MAAQ,4gBAOzDu3V,EAAYt8V,YAAYs3U,IAE5B34U,EAAO0B,WAAa,0KAED,WAAfw8V,EAAM93V,KACNpG,EAAOqB,YAAYs3B,IAAalsB,EAAGA,EAAGC,EAAGA,GAAK,UAAYgJ,MAAOrD,EAAQ+iB,WAAWmN,WAAY9sB,OAAQpD,EAAQ+iB,WAAWoN,aAAe,GAAI,IAAIrN,GAAWnyB,EAAK,eAAgBq4V,GAAiB37V,KAAKg+V,WAAYQ,EAAMv5T,OAAOjvB,MAAO0oV,EAAW,EAAG,MAAO,UAG7Pp+V,EAAOqB,YAAYgsG,EAAOrpE,cAAc,IAAI04L,GAAW15N,EAAK,eAAgBq4V,GAAiB37V,KAAKg+V,YAAchoV,MAAOwoV,EAAMv5T,OAAOjvB,MAAO6f,MAAO6oU,GAAa,GAC3J3xV,EAAGA,EAAK4F,EAAQ+iB,WAAWmN,WAAa,EAAI71B,EAAGA,EAAK2F,EAAQ+iB,WAAWoN,YAAc,EACrF9sB,MAAOrD,EAAQ+iB,WAAWmN,WAC1B9sB,OAAQpD,EAAQ+iB,WAAWoN,aAC5B,EAAG,KAEN9iC,KAAK89V,cACLx9V,EAAOqB,YAAYgsG,EAAOn4E,SAAS,IAAIC,GAAWnyB,EAAK,aAAc,cAAe,EAAGq4V,GAAiBhpV,EAAQ+iB,WAAW2N,UAAW,EAAG,KAAM,MAAat2B,EAAI,GAAK,KAAOC,EAAIyxV,GAAc,OAAmB1xV,EAAI,GAAK,KAAOC,EAAIyxV,GAAc,QAC7N,KAAOzxV,EAAIyxV,GAAc,QAAwB,KAAOzxV,EAAIyxV,GAAc,OAC/E1xV,EAAI,GAAK,KAAOC,EAAIyxV,GAAc,OAAmB1xV,EAAI,GAAK,KAAOC,EAAIyxV,GAAc,QAQhHZ,EAAYxiW,UAAUwjW,UAAY,SAAUthW,EAAOyhB,EAAK0H,EAASoK,GAC7D,IAAIK,EAAQnxB,KAAK2S,QACb6nD,EAAUrpC,EAAM4E,OAAOhpB,EACvB8rU,EAAY1nT,EAAMm9M,YAAYx2N,MAAMy+M,YACpCuoI,EAAyC,IAAxB3tU,EAAMpS,OAAOtiB,OAC5BuiB,GAAOzhB,IACTA,GAASyhB,EAAKA,EAAMzhB,GAAO,IAE/BA,EAAQyhB,GAAOzhB,EAAQA,GAASyhB,EAAKA,EAAMzhB,GAAO,GAClDA,EAAQ8O,KAAKC,IAAI/O,EAAOs7U,EAAU14T,KAClCnB,EAAM3S,KAAK8T,IAAInB,EAAK65T,EAAUvsU,KAC9BtM,KAAKq/B,OAASm7B,EAAUt4B,GAAa3kC,EAAOs7U,EAAW1nT,EAAM4E,OAAO/f,MAAOmb,EAAMje,WACjFlT,KAAKmkO,KAAO3pK,EAAUt4B,GAAaljB,EAAK65T,EAAW1nT,EAAM4E,OAAO/f,MAAOmb,EAAMje,WAC7E,IAAI6rV,EAAY5tU,EAAMje,UAAYlT,KAAKmkO,KAAOnkO,KAAKq/B,OAC/C4B,EAAe9P,EAAMje,UAAYlT,KAAKq/B,OAASr/B,KAAKmkO,KACxDnkO,KAAKg/V,YAAc3yV,KAAKE,IAAIvM,KAAKmkO,KAAOnkO,KAAKq/B,QAC7Cr/B,KAAKokJ,gBAAgB5gJ,aAAa,IAAK,EAAc,IACrDxD,KAAKokJ,gBAAgB5gJ,aAAa,QAASxD,KAAKg/V,YAAc,IAC9Dh/V,KAAKm+V,sBAAsB36V,aAAa,QAAUu7V,EAAYvkS,EAAW,IACzEx6D,KAAKo+V,uBAAuB56V,aAAa,IAAKy9B,EAAe,IAC7DjhC,KAAKo+V,uBAAuB56V,aAAa,QAAU2tB,EAAM4E,OAAO/f,OAASirB,EAAeu5B,GAAY,IACpGx6D,KAAKq+V,WAAW76V,aAAa,YAAa,cAAgBxD,KAAKq/B,OAASr/B,KAAK+9V,cAAgB,QAC7F/9V,KAAKs+V,YAAY96V,aAAa,YAAa,cAAgBxD,KAAKmkO,KAAOnkO,KAAK+9V,cAAgB,QAC5F,IAAIvxV,EAAOxM,KAAK2S,QAAQ6d,UAAU5kB,wBAAwBY,KACtDxM,KAAK2S,QAAQ3R,QAAQ4K,wBAAwBY,KAC7CyyV,EAAQj/V,KAAK2S,QAAQO,UAAYlT,KAAKmkO,KAAOnkO,KAAKq/B,OAClD6/T,EAASl/V,KAAK2S,QAAQO,UAAYlT,KAAKq/B,OAASr/B,KAAKmkO,KACzDnkO,KAAKm/V,UACDpyV,EAAG+xV,EAAiBtyV,EAAOguD,EAAUA,EACrCxtD,EAAG8xV,EAAiB,EAAI3tU,EAAM4E,OAAO/oB,EACrCgJ,MAAO8oV,EAAiBG,EAAQzkS,EAAUykS,EAC1ClpV,OAAQ+oV,EAAiB9+V,KAAK2+V,OAASxtU,EAAM4E,OAAOhgB,QAExD/V,KAAKo/V,WACDryV,EAAG+xV,EAAiBtyV,EAAO0yV,EAASA,EACpClyV,EAAG8xV,EAAiB,EAAI3tU,EAAM4E,OAAO/oB,EACrCgJ,MAAQmb,EAAM4E,OAAO/f,OAASirB,EAAeu5B,GAC7CzkD,OAAQ+oV,EAAiB9+V,KAAK2+V,OAASxtU,EAAM4E,OAAOhgB,QAExD/V,KAAK45T,SACD7sT,EAAG+xV,EAAiBG,EAAQzyV,EAAO,EACnCQ,EAAG8xV,EAAiB,EAAI3tU,EAAM4E,OAAO/oB,EACrCgJ,MAAO8oV,EAAiBzyV,KAAKE,IAAIvM,KAAKmkO,KAAOnkO,KAAKq/B,QAAU6/T,EAC5DnpV,OAAQ+oV,EAAiB9+V,KAAK2+V,OAASxtU,EAAM4E,OAAOhgB,QAExD/V,KAAKq/V,aAAe9hW,EACpByC,KAAKs/V,WAAatgV,EACd8R,IACA9wB,KAAK2S,QAAQ4sV,mBAAmBC,kBAAkBx/V,MAClDA,KAAK2S,QAAQ4sV,mBAAmBE,mBAAmBz/V,OAEnD0mB,GACA1mB,KAAKg2J,aAAa6iL,IAO1BglB,EAAYxiW,UAAU26J,aAAe,SAAU7kI,GAC3C,IAAIiH,EACAtgB,EAAQ9X,KAAK2S,QAAQ27N,YAAYx2N,MACjCwZ,EAAYxZ,EAAMwZ,UACtB8G,GACIC,QAAQ,EACR96B,MAAqB,aAAd+zB,EAA2B,IAAIlR,KAAKpgB,KAAKq/V,cAC7B,gBAAd/tU,EAA8BjlB,KAAKs9D,IAAI7xD,EAAM6Y,QAAS3wB,KAAKq/V,cAAgBr/V,KAAKq/V,aACrFrgV,IAAmB,aAAdsS,EAA2B,IAAIlR,KAAKpgB,KAAKs/V,YAC3B,gBAAdhuU,EAA8BjlB,KAAKs9D,IAAI7xD,EAAM6Y,QAAS3wB,KAAKs/V,YAAct/V,KAAKs/V,WACnFvoU,KAAM,UACNsL,aAAcD,GAAapiC,KAAKi3B,OAAQj3B,KAAKq/V,aAAcr/V,KAAKs/V,YAChE5nI,cAAe13N,KAAK2S,QAAQO,UAAYie,EAAM7kB,IAAMtM,KAAKs/V,WACrDt/V,KAAKq/V,aAAeluU,EAAMhR,KAAOgR,EAAMmD,MAC3Cu7C,YAAa7vE,KAAKs/V,WAAat/V,KAAKq/V,cAAgBluU,EAAMmD,OAE9Dt0B,KAAK2S,QAAQ+T,QAAQ,UAAW0R,IAKpCylU,EAAYxiW,UAAUqB,iBAAmB,WACjCsD,KAAK2S,QAAQ41E,cAGjBvoF,KAAK2S,QAAQw0E,GAAG37E,GAAQkgF,eAAgB1rF,KAAK8tO,iBAAkB9tO,MAC/DA,KAAK2S,QAAQw0E,GAAG37E,GAAQigF,gBAAiBzrF,KAAKyhH,iBAAkBzhH,MAChEA,KAAK2S,QAAQw0E,GAAG37E,GAAQmgF,cAAe3rF,KAAK4tN,eAAgB5tN,MAC5DA,KAAK2S,QAAQw0E,GAAG37E,GAAQC,UAAY,eAAiB,aAAczL,KAAKs5U,mBAAoBt5U,QAKhG69V,EAAYxiW,UAAUuB,oBAAsB,WACpCoD,KAAK2S,QAAQ41E,cAGjBvoF,KAAK2S,QAAQ40E,IAAI/7E,GAAQkgF,eAAgB1rF,KAAK8tO,kBAC9C9tO,KAAK2S,QAAQ40E,IAAI/7E,GAAQigF,gBAAiBzrF,KAAKyhH,kBAC/CzhH,KAAK2S,QAAQ40E,IAAI/7E,GAAQmgF,cAAe3rF,KAAK4tN,gBAC7C5tN,KAAK2S,QAAQ40E,IAAI/7E,GAAQC,UAAY,eAAiB,aAAczL,KAAKs5U,sBAO7EukB,EAAYxiW,UAAUyyO,iBAAmB,SAAUjtO,GAC/C,IAGItD,EACAyhB,EAJArM,EAAU3S,KAAK2S,QACfkmU,EAAYlmU,EAAQ27N,YAAYx2N,MAAMy+M,YACtCxgM,EAASpjB,EAAQojB,OAIrB,GADA/1B,KAAK0/V,iBAAiB7+V,EAAEsG,OAAO7D,IAC3BtD,KAAKo1G,QAAUziG,EAAQuzN,QAAUnwM,EAAOhpB,EAAG,CAC3C,OAAQ/M,KAAK2/V,eACT,IAAK,OACDhtV,EAAQ4V,WAAavoB,KAAK4/V,cAAcvzV,KAAKE,IAAIoG,EAAQuzN,OAASnwM,EAAOhpB,IACzE,MACJ,IAAK,QACD4F,EAAQ+kB,SAAW13B,KAAK4/V,cAAcvzV,KAAKE,IAAIoG,EAAQuzN,OAASnwM,EAAOhpB,IACvE,MACJ,IAAK,SACDxP,EAAQ8O,KAAKC,IAAItM,KAAK4/V,cAAcvzV,KAAKE,IAAIvM,KAAKq/B,QAAUr/B,KAAK6/V,cAAgBltV,EAAQuzN,QAAUnwM,EAAOhpB,IAAK8rU,EAAU14T,KACzHnB,EAAM3S,KAAK8T,IAAIngB,KAAK4/V,cAAcvzV,KAAKE,IAAIvM,KAAKmkO,MAAQnkO,KAAK6/V,cAAgBltV,EAAQuzN,QAAUnwM,EAAOhpB,IAAK8rU,EAAUvsU,KAClGD,KAAKkT,MAAMlT,KAAKE,IAAI21B,GAAaljB,EAAK65T,EAAWlmU,EAAQojB,OAAO/f,MAAOrD,EAAQO,WAC9FgvB,GAAa3kC,EAAOs7U,EAAWlmU,EAAQojB,OAAO/f,MAAOrD,EAAQO,eAC5C7G,KAAKkT,MAAMvf,KAAKg/V,eACjCrsV,EAAQ4V,WAAahrB,EACrBoV,EAAQ+kB,SAAW1Y,GAI3Bne,EAAE6kB,gBAAkB1lB,KAAK41U,OACzB/0U,EAAE6kB,iBAEN1lB,KAAK6+V,UAAUlsV,EAAQ4V,WAAY5V,EAAQ+kB,UAAW/kB,EAAQmtV,qBAAuBntV,EAAQ4sV,oBAAsB5sV,EAAQse,QAAQgP,QACnIjgC,KAAK6/V,cAAgBltV,EAAQuzN,SAOrC23H,EAAYxiW,UAAUukW,cAAgB,SAAU7yV,GAC5C,IAAI4F,EAAU3S,KAAK2S,QACfkmU,EAAYlmU,EAAQ27N,YAAYx2N,MAAMy+M,YAE1C,OAAOp0L,GAAsBp1B,EADhB4F,EAAQojB,OACkB/f,MAAO6iU,EAAWlmU,EAAQO,YAMrE2qV,EAAYxiW,UAAUomH,iBAAmB,SAAU5gH,GAC/Cb,KAAK2/V,cAAgB3/V,KAAK0/V,iBAAiB7+V,EAAEsG,OAAO7D,IACpDtD,KAAKokJ,gBAAgB5gJ,aAAa,QAAS,4BAC3CxD,KAAKo1G,SAAkC,mBAAvBp1G,KAAK2/V,gBAAuC3/V,KAAK2/V,eACjE3/V,KAAK6/V,cAAgB7/V,KAAK2S,QAAQo5S,YAMtC8xC,EAAYxiW,UAAUqkW,iBAAmB,SAAUp8V,GAC/C,IAAIy8V,EAAa//V,KAAK2S,QAAQ+iB,WAAW4N,gBACzC,OAAIhgC,EAAG/E,QAAQyB,KAAKitD,UAAY,gBAAkB,GAC9CjtD,KAAKq+V,WAAW9sV,WAAW,GAAG/N,aAAa,OAAQu8V,GAC5C,QAEFz8V,EAAG/E,QAAQyB,KAAKitD,UAAY,iBAAmB,GACpDjtD,KAAKs+V,YAAY/sV,WAAW,GAAG/N,aAAa,OAAQu8V,GAC7C,SAEFz8V,EAAG/E,QAAQyB,KAAKitD,UAAY,kBAAoB,EAC9C,SAEF3pD,EAAG/E,QAAQ,mBAAqB,GACrCyB,KAAKq+V,WAAW9sV,WAAW,GAAG/N,aAAa,OAAQxD,KAAKg+V,YACxDh+V,KAAKs+V,YAAY/sV,WAAW,GAAG/N,aAAa,OAAQxD,KAAKg+V,YAClD,kBAEF16V,EAAG/E,QAAQyB,KAAKitD,UAAY,gBAAkB,GAAgC,aAA3BjtD,KAAK2S,QAAQ2e,WACrEtxB,KAAKskO,YAAchhO,EAAGpG,MAAM,KAAK,GAC1B,oBAEFoG,EAAG/E,QAAQyB,KAAKitD,UAAY,oBAAsB,GAAgC,aAA3BjtD,KAAK2S,QAAQ2e,WACzEtxB,KAAKskO,YAAchhO,EAAGpG,MAAM,KAAK,GAC1B,sBAGP8C,KAAKq+V,WAAW9sV,WAAW,GAAG/N,aAAa,OAAQxD,KAAKg+V,YACxDh+V,KAAKs+V,YAAY/sV,WAAW,GAAG/N,aAAa,OAAQxD,KAAKg+V,YACrDh+V,KAAK2S,QAAQqtV,uBACbhgW,KAAK2S,QAAQqtV,qBAAqBnyO,eAAgB,GAE/C,OAOfgwO,EAAYxiW,UAAUuyN,eAAiB,SAAU/sN,GAC7C,IAAI8R,EAAU3S,KAAK2S,QACfwe,EAAQxe,EAAQ27N,YAAYx2N,MAAMy+M,YAClC7vM,EAAU/T,EAAQmtV,qBAClBG,EAAiBttV,EAAQse,QAAQgP,OACrC,GAA2B,mBAAvBjgC,KAAK2/V,cAAoC,CACzC,IAAI3iW,OAAQ,EACRO,OAAQ,EACRyhB,OAAM,EACNigH,EAAQtsH,EAAQO,UAChBgtV,EAAavtV,EAAQ+kB,SAAW/kB,EAAQ4V,WACxC5V,EAAQo5S,WAAa/rT,KAAKq/B,QAC1BriC,EAAQqP,KAAKC,IAAItM,KAAK4/V,cAAejtV,EAAQo5S,WAAc/rT,KAAKg/V,YAAc,EAAKrsV,EAAQojB,OAAOhpB,GAAKokB,EAAMhR,KAC7GnB,EAAMigH,EAAQjiI,EAASA,EAAQkjW,EAC/B3iW,EAAQ0hI,EAASjiI,EAAQkjW,EAAcljW,IAGvCA,EAAQqP,KAAK8T,IAAIngB,KAAK4/V,cAAejtV,EAAQo5S,WAAc/rT,KAAKg/V,YAAc,EAAKrsV,EAAQojB,OAAOhpB,GAAKokB,EAAM7kB,KAC7G/O,EAAQ0hI,EAAQjiI,EAASA,EAAQkjW,EACjClhV,EAAMigH,EAASjiI,EAAQkjW,EAAcljW,GAEzCgD,KAAKwsO,iBAAiBjvO,EAAOyhB,EAAKrM,GAClC+T,GAAU,OAET,GAA2B,qBAAvB1mB,KAAK2/V,eAA+D,sBAAvB3/V,KAAK2/V,cAAuC,CAC9F,IAAIQ,EAAcxtV,EAAQytV,UAAUpgW,KAAK2/V,eAAe3/V,KAAKskO,WAAa,GAC1EtkO,KAAKwsO,iBAAiB75N,EAAQytV,UAAUpgW,KAAK2/V,eAAe3/V,KAAKskO,YAAYtnO,MAAQmjW,EAAcA,EAAYnjW,MAAQm0B,EAAM7kB,IAAMqG,GACnI+T,GAAU,EAEV1mB,KAAKo1G,QAAUziG,EAAQ0tV,gBACvBrgW,KAAKsgW,iBAAiB3tV,EAAS3S,KAAKq/V,aAAcr/V,KAAKs/V,WAAY54U,EAASu5U,GAC5Ev5U,GAAU,GAEVA,GACA1mB,KAAK6+V,UAAU7+V,KAAKq/V,aAAcr/V,KAAKs/V,YAAY,EAAMW,GAElC,OAAvBjgW,KAAK2/V,eACD3/V,KAAK2S,QAAQwtB,uBAAuBC,QAAQ3jC,OAAS,IACrDuD,KAAK2S,QAAQqtV,qBAAqBnyO,eAAgB,EAClD7tH,KAAK2S,QAAQqtV,qBAAqBO,WAAW9mR,UAAY,IAAIr5D,KAAKpgB,KAAKq/V,cACvEr/V,KAAK2S,QAAQqtV,qBAAqBO,WAAW7mR,QAAU,IAAIt5D,KAAKpgB,KAAKs/V,aAG7Et/V,KAAKokJ,gBAAgB5gJ,aAAa,QAAS,wBAC3CmP,EAAQ4V,WAAavoB,KAAKq/V,aAC1B1sV,EAAQ+kB,SAAW13B,KAAKs/V,WACxBt/V,KAAKo1G,QAAS,EACdp1G,KAAKskO,WAAa,KAClBtkO,KAAK2/V,cAAgB,MAQzB9B,EAAYxiW,UAAUilW,iBAAmB,SAAU3tV,EAASpV,EAAOyhB,EAAK0H,EAASuK,GAC7E,IAAImB,EAASzf,EAAQytV,UAAUrE,YAC/B3pU,EAAO5tB,KAAKmO,EAAQ27N,YAAYx2N,MAAMy+M,YAAYjqN,KAClDtM,KAAK6+V,UAAUv8T,GAAgBlQ,EAAQ70B,GAAQ+kC,GAAgBlQ,EAAQpT,GAAM0H,EAASuK,GACtFte,EAAQ4V,WAAavoB,KAAKq/V,aAC1B1sV,EAAQ+kB,SAAW13B,KAAKs/V,YAO5BzB,EAAYxiW,UAAUmxO,iBAAmB,SAAUjvO,EAAOyhB,EAAKrM,GAC3D,IAAI5S,EAAQC,KACRq/V,EAAer/V,KAAKq/V,aACpBC,EAAat/V,KAAKs/V,WAClBkB,EAAa7tV,EAAQmtV,qBACrBvxH,EAAgB57N,EAAQse,QAAQgP,OACpC,IAAInI,OAAcC,QAAQ52B,EAAc,QACpC+J,SAAUlL,KAAK2S,QAAQ8tV,kBACvBzoU,SAAU,SAAU/3B,GAChBF,EAAM8+V,UAAUpnU,GAAOx3B,EAAKg4B,UAAW,EAAG16B,EAAQ8hW,EAAcp/V,EAAKiL,UAAYm0V,EAAc5nU,GAAOx3B,EAAKg4B,UAAW,EAAGjZ,EAAMsgV,EAAYr/V,EAAKiL,UAAYo0V,GAAakB,EAAYjyH,IAEzLvvN,IAAK,SAAUmN,GACPxZ,EAAQ0tV,cACRtgW,EAAMugW,iBAAiB3tV,EAASpV,EAAOyhB,GAAK,EAAMuvN,GAGlDxuO,EAAM8+V,UAAUthW,EAAOyhB,GAAK,EAAMuvN,GAEtCxuO,EAAM4S,QAAQ4V,WAAaxoB,EAAMs/V,aACjCt/V,EAAM4S,QAAQ+kB,SAAW33B,EAAMu/V,WAC3Bv/V,EAAM4S,QAAQwtB,uBAAuBC,QAAQ3jC,OAAS,IACtDsD,EAAM4S,QAAQqtV,qBAAqBnyO,eAAgB,EACnD9tH,EAAM4S,QAAQqtV,qBAAqBO,WAAW9mR,UAAY,IAAIr5D,KAAKrgB,EAAMs/V,cACzEt/V,EAAM4S,QAAQqtV,qBAAqBO,WAAW7mR,QAAU,IAAIt5D,KAAKrgB,EAAMu/V,iBAQvFzB,EAAYxiW,UAAUi+U,mBAAqB,WACvCt5U,KAAKo1G,QAAS,EACdp1G,KAAK2/V,cAAgB,KACrB3/V,KAAK2S,QAAQ4V,WAAavoB,KAAKq/V,aAC/Br/V,KAAK2S,QAAQ+kB,SAAW13B,KAAKs/V,YAKjCzB,EAAYxiW,UAAUiX,QAAU,WAC5BtS,KAAKpD,uBAEFihW,KC7aPhyQ,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAsB5DsjU,GAAgC,SAAUh0Q,GAM1C,SAASg0Q,EAAe1tV,EAAShS,GAC7B,IAAIjB,EAAQ2sF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAInD,OAFAD,EAAMotO,eAAgB,EACtBptO,EAAMwlT,QAAU,MACTxlT,EAslBX,OAhmBA8rF,GAAU60Q,EAAgBh0Q,GAe1Bg0Q,EAAerlW,UAAUoX,UAAY,WAGjC,GAFAzS,KAAKogH,eACLpgH,KAAK2N,aACmB,KAApB3N,KAAKgB,QAAQsC,GAAW,CACxB,IAAIwkC,EAAatnC,SAASkN,uBAAuB,oBAAoBjR,OACrEuD,KAAKgB,QAAQsC,GAAK,kBAAoBtD,KAAKulT,QAAU,IAAMz9Q,EAE/D9nC,KAAKykB,cAKTi8U,EAAerlW,UAAUw/U,qBAAuB,WAC5C76U,KAAK86V,aAAe,IAAI7kI,GACxBj2N,KAAKwgO,UACLxgO,KAAKu6V,YAAc,IAAIsD,GAAY79V,MACnCA,KAAKsuO,YAAc,IAAI8rH,GAAYp6V,MACnCA,KAAK2gW,iBAAmB,IAAI9sC,GAC5B7zT,KAAKogW,UAAY,IAAI/E,GAAmBr7V,OAK5C0gW,EAAerlW,UAAUsS,WAAa,WAClC3N,KAAK0wE,KAAO,IAAI27B,IAKpBq0P,EAAerlW,UAAUulW,eAAiB,WACtC,IAAIC,EAAgC,aAAnB7gW,KAAKsxB,UAClBH,EAAQnxB,KAAKsuO,YAAYx2N,MAAMy+M,YACnCv2N,KAAKuoB,WAAavoB,KAAKuoB,WAAavoB,KAAKuoB,WAAevoB,KAAKhD,MAAM,GAC9D6jW,EAAa7gW,KAAKhD,MAAM,GAAGqjB,WAAargB,KAAKhD,MAAM,GADgBm0B,EAAMhR,IAE9EngB,KAAK03B,SAAW13B,KAAK03B,SAAW13B,KAAK03B,SAAa13B,KAAKhD,MAAM,GACxD6jW,EAAa7gW,KAAKhD,MAAM,GAAGqjB,WAAargB,KAAKhD,MAAM,GADUm0B,EAAM7kB,KAM5Eo0V,EAAerlW,UAAUsyG,OAAS,WAC9B3tG,KAAK0mB,QAAQ,QAAU80U,eAAgBx7V,OACvCA,KAAK6b,WACL7b,KAAK66U,uBACL76U,KAAK8gW,iBACL9gW,KAAK8vS,kBACL9vS,KAAKsuO,YAAY+rH,YAAYr6V,MAC7B,IAAIgB,EAAUR,SAASyuB,eAAe,oBAClCjuB,GACAA,EAAQuD,UAMhBm8V,EAAerlW,UAAUwgB,SAAW,WAEhC7b,KAAK01B,WAAagN,GAAmB1iC,KAAKqb,MAAOrb,OAKrD0gW,EAAerlW,UAAUylW,eAAiB,WACtC9gW,KAAK4pT,YACLppR,GAAUxgC,MACVA,KAAK+gW,yBAKTL,EAAerlW,UAAUy0S,gBAAkB,WACvC,IAAIhrE,EAAe9kO,KAAKsgC,eAAiB,GAAK,EAC1C/R,EAAQvuB,KAAK4iC,uBAAuBrU,MACpC8R,EAAYxR,GAAY,aAAc7uB,KAAKq1B,YAAYtf,OACvDknB,EAASj9B,KAAKi9B,OACd6hU,GAAkB9+V,KAAK+e,OAAOtiB,OAC9BujC,GAAiBhgC,KAAKugC,sBACtBu+T,GAAkB9+V,KAAKixB,QAAQgP,OAAS,GAAK,EAC7Cv6B,EAAW1F,KAAKggW,qBAChBhgW,KAAKggW,sBAAwBhgW,KAAKmgC,uBAAuBC,QAAQ3jC,OAAS,IAC1EiJ,EAASs7V,oBAAuBj0V,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAGC,MAAO,GAC9DtQ,EAASs7V,mBAAmBhrV,MAAQhW,KAAKg1B,cAAchf,MACvDtQ,EAASs7V,mBAAmBjrV,OAAS/V,KAAKmgC,uBAAuBpqB,OACjErQ,EAASs7V,mBAAmBh0V,EAA6C,WAAzChN,KAAKmgC,uBAAuBjsB,SACxDlU,KAAKg1B,cAAcjf,OAASrQ,EAASs7V,mBAAmBjrV,OAAS,GAEzE,IAAIkrV,EAA2D,QAAzCjhW,KAAKmgC,uBAAuBjsB,UAAsBxO,EACpEA,EAASs7V,mBAAmBh0V,EAAItH,EAASs7V,mBAAmBjrV,OAAS,EACzE/V,KAAK+1B,OAAS,IAAIR,GAAMv1B,KAAK01B,WAAWmN,WAAa,EAAItU,EAAM0W,OAAOjvB,MAAQinB,EAAOzwB,KAAOywB,EAAOvwB,IAAMszB,EAAeihU,EAAiBjhW,KAAKg1B,cAAchf,MAAQhW,KAAK01B,WAAWmN,WAAmC,EAArBtU,EAAM0W,OAAOjvB,MAAainB,EAAOzwB,KAAOywB,EAAOxwB,MAAOzM,KAAKg1B,cAAcjf,OAASknB,EAAOvwB,IAAMuwB,EAAOtwB,OAASqzB,GAAgBt6B,EAAWA,EAASs7V,mBAAmBjrV,OAAS,IACjX,IAAImrV,GAAwC,YAAvBlhW,KAAKqhH,eAA+By9O,EACpDz+T,EAAYykM,EAAgB,IAA6B,YAAtB9kO,KAAK06N,cAA8BokI,EACtE9+V,KAAK46N,eAAqB,OAAI,GAEnC,GADA56N,KAAK+1B,OAAOhgB,QAAUmrV,EAClBpC,EAAgB,CAChB,IAAI/oV,EAAS/V,KAAKsgC,eAAiBtgC,KAAK+1B,OAAOhgB,QAAU,EAAc+uN,GAAgB9kO,KAAK+1B,OAAOhgB,OACnG/V,KAAK+1B,OAAO/oB,GAAMhN,KAAK01B,WAAWoN,YAAc/sB,GAAU/V,KAAK01B,WAAWoN,YAAc/sB,GAAU,EAAI,EAEtG/V,KAAKugC,uBACLvgC,KAAK+1B,OAAO/oB,EAAI,EAChBhN,KAAK+1B,OAAOhgB,OAAS/V,KAAKmgC,uBAAuBpqB,SAMzD2qV,EAAerlW,UAAUg/V,YAAc,WACnCr6V,KAAKsuO,YAAYpC,aAAalsO,MAC9BA,KAAKogW,UAAU3E,kBACfz7V,KAAKogW,UAAUpE,mBACfh8V,KAAKwyV,yBACLxyV,KAAK4gW,iBACL5gW,KAAKmhW,uBACLnhW,KAAKohW,eACLphW,KAAKgB,QAAQW,YAAY3B,KAAKwwB,WAC9BxwB,KAAK0mB,QAAQ,UAAY80U,eAAgBx7V,OACzCA,KAAKu6V,YAAYsE,UAAU7+V,KAAKuoB,WAAYvoB,KAAK03B,UAAU,EAAO13B,KAAKixB,QAAQgP,QAAuC,WAA7BjgC,KAAKixB,QAAQowU,cAK1GX,EAAerlW,UAAU8lW,qBAAuB,WACxCnhW,KAAKggW,uBACLhgW,KAAKggW,qBAAqBsB,sBAAsBthW,MAChDA,KAAKggW,qBAAqBuB,mBAMlCb,EAAerlW,UAAUm3V,uBAAyB,WAE9C,GAAIxyV,KAAKixB,QAAQgP,OAAQ,CACrB,IAAIwnR,EAAaznT,KAAKmB,cAAc,OACpCsmT,EAAWnkT,GAAKtD,KAAKgB,QAAQsC,GAAK,qBAClCmkT,EAAWjkT,aAAa,QAAS,sBACjCxD,KAAKgB,QAAQW,YAAY8lT,KAMjCi5C,EAAerlW,UAAU+lW,aAAe,WACpCphW,KAAKu6V,YAAY5sP,OAAO3tG,MACxBA,KAAKu6V,YAAYsE,UAAU7+V,KAAKuoB,WAAYvoB,KAAK03B,UAAU,EAAM13B,KAAKixB,QAAQgP,QAAuC,WAA7BjgC,KAAKixB,QAAQowU,cAOzGX,EAAerlW,UAAUuuT,UAAY,WAC7Bl5R,GAAW1wB,KAAKgB,QAAQsC,GAAK,uBAC7BiB,EAAOmsB,GAAW1wB,KAAKgB,QAAQsC,GAAK,uBAGxC,GAAItD,KAAKwwB,UAAW,CAChB,KAAOxwB,KAAKwwB,UAAUjf,WAAW9U,OAFlB,GAGXuD,KAAKwwB,UAAUlrB,YAAYtF,KAAKwwB,UAAUzT,aAEzC/c,KAAKwwB,UAAU8K,iBAAmBt7B,KAAKwwB,UAAU/vB,YAClD8D,EAAOvE,KAAKwwB,aAQxBkwU,EAAerlW,UAAU+kH,aAAe,WAEpC,IAAIxE,EAAapwG,GAAQigF,gBACrB8wB,EAAY/wG,GAAQkgF,eACpBm+N,EAAYr+S,GAAQmgF,cACpB8wB,EAAcjxG,GAAQC,UAAY,eAAiB,aAEvDlG,GAAahB,OAAOvE,KAAKgB,QAAS46G,EAAY57G,KAAKwhW,kBACnDj8V,GAAahB,OAAOvE,KAAKgB,QAASu7G,EAAWv8G,KAAK+pT,WAClDxkT,GAAahB,OAAOvE,KAAKgB,QAAS6oT,EAAW7pT,KAAKgqT,UAClDzkT,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAKyhW,mBAEhDl8V,GAAahB,OAAOvE,KAAKgB,QAASy7G,EAAaz8G,KAAKmqT,YACpDtuT,OAAOe,oBAAqB4O,GAAQwlB,SAAY,gBAAiBn1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAK0hW,cAKxJhB,EAAerlW,UAAUopB,WAAa,WAElC,IAAIg4F,EAAcjxG,GAAQC,UAAY,eAAiB,aAEvDlG,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQigF,gBAAiBzrF,KAAKwhW,iBAAkBxhW,MAC/EuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQkgF,eAAgB1rF,KAAK+pT,UAAW/pT,MACvEuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQmgF,cAAe3rF,KAAKgqT,SAAUhqT,MACrEuF,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAKyhW,kBAAmBzhW,MAEhEuF,GAAanB,IAAIpE,KAAKgB,QAASy7G,EAAaz8G,KAAKmqT,WAAYnqT,MAC7DnE,OAAOa,iBAAkB8O,GAAQwlB,SAAY,gBAAiBn1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAK0hW,YAAYpmW,KAAK0E,OAClK,IAAIgB,EAAUhB,KAAKgB,QACnBA,EAAQ0D,MAAMg3G,YAAc,OAC5B16G,EAAQ0D,MAAMkmT,cAAgB,OAC9B5pT,EAAQ0D,MAAMmmT,iBAAmB,OACjC7pT,EAAQ0D,MAAMomT,aAAe,OAC7B9pT,EAAQ0D,MAAMqmT,iBAAmB,OACjC/pT,EAAQ0D,MAAMwP,SAAW,WACzBlT,EAAQ0D,MAAM6pC,QAAU,SAO5BmyT,EAAerlW,UAAUqmW,YAAc,SAAU7gW,GAC7C,IAAId,EAAQC,KACZA,KAAKmtO,eAAgB,EACjBntO,KAAK8jT,UACL5jT,aAAaF,KAAK8jT,UAEtB,IAAIxwN,GACAkoQ,eAAgBx7V,KAChB+2B,KAAM,UACNm0R,YAAa,IAAIz7R,GAAK,EAAG,GACzB07R,aAAc,IAAI17R,GAAKzvB,KAAKg1B,cAAchf,MAAOhW,KAAKg1B,cAAcjf,SAaxE,OAXA/V,KAAK8jT,SAAW3jT,WAAW,WACnBJ,EAAMwoF,YACNroF,aAAaH,EAAM+jT,WAGvB/jT,EAAM+gW,iBACNxtQ,EAAI43N,YAAcnrT,EAAMi1B,cACxBj1B,EAAM2mB,QAAQ,UAAW4sE,GACzBvzF,EAAM+vS,kBACN/vS,EAAMuuO,YAAY+rH,YAAYt6V,KAC/B,MACI,GAOX2gW,EAAerlW,UAAU0uT,UAAY,SAAUlpT,GAG3C,OAFAb,KAAKkmO,OAASlmO,KAAK2hW,UAAU9gW,GAC7Bb,KAAK+N,OAAOvC,GAAQkgF,eAAgB7qF,IAC7B,GAOX6/V,EAAerlW,UAAU8uT,WAAa,SAAUtpT,GAC5C,IAAI47G,EAAcjxG,GAAQC,UAAY,eAAiB,aAGvD,OAFAzL,KAAKkmO,OAASlmO,KAAK2hW,UAAU9gW,GAC7Bb,KAAK+N,OAAO0uG,EAAa57G,IAClB,GAOX6/V,EAAerlW,UAAUomW,kBAAoB,SAAU5gW,GAEnD,OADAb,KAAK+N,OAAO,QAASlN,IACd,GAKX6/V,EAAerlW,UAAU0F,MAAQ,SAAUuC,GACvC,IAAIugT,GAAY7jT,MAAMe,MAAMuC,IAOhCo9V,EAAerlW,UAAU8oT,OAAS,SAAUz9S,EAAM26O,EAAUzoN,EAAawrR,EAAUpuS,EAAOD,GACtFquS,EAAWA,IAAuBpkT,MAClC,IAAI6jT,GAAY7jT,MAAMmkT,OAAOz9S,EAAM26O,EAAUzoN,EAAawrR,EAAUpuS,EAAOD,IAK/E2qV,EAAerlW,UAAU0lW,sBAAwB,WAC7C,IAAIruU,EAAO,IAAIsqM,GAAWh9N,KAAKgB,QAAQsC,GAAK,eAAgBtD,KAAK01B,WAAWpI,YAActX,MAAO,EAAG6f,MAAO,eAAiB,EAAG,IAAIN,GAAK,EAAG,EAAGv1B,KAAKg1B,cAAchf,MAAOhW,KAAKg1B,cAAcjf,SAC3L/V,KAAKwwB,UAAU7uB,YAAY3B,KAAK+vB,SAASuU,cAAc5R,KAO3DguU,EAAerlW,UAAUmmW,iBAAmB,SAAU3gW,GAGlD,OAFAb,KAAK+rT,WAAa/rT,KAAK2hW,UAAU9gW,GACjCb,KAAK+N,OAAOvC,GAAQigF,gBAAiB5qF,IAC9B,GAOX6/V,EAAerlW,UAAU2uT,SAAW,SAAUnpT,GAG1C,OAFAb,KAAKkmO,OAASlmO,KAAK2hW,UAAU9gW,GAC7Bb,KAAK+N,OAAOvC,GAAQmgF,cAAe9qF,IAC5B,GAaX6/V,EAAerlW,UAAUsmW,UAAY,SAAU9gW,GAC3C,IAAIiL,EAAQjL,EAAE6F,KAAKnI,QAAQ,UAAY,EACnCsC,EAAEu/D,eAAe,GAAGrK,QAAUl1D,EAAEk1D,QAChCrjC,EAAO1yB,KAAKgB,QAAQ4K,wBACpBm9D,EAAUr4C,GAAW1wB,KAAKgB,QAAQsC,GAAK,QAAQsI,wBACnD,OAAQE,EAAQ4mB,EAAKlmB,KAAQH,KAAKC,IAAIy8D,EAAQv8D,KAAOkmB,EAAKlmB,KAAM,IAOpEk0V,EAAerlW,UAAU+yG,eAAiB,WAEtC,OAAOpuG,KAAK4uG,cADK,YAQrB8xP,EAAerlW,UAAU0tF,kBAAoB,SAAUiF,EAASC,GAC5D,IAAIl+D,GAAW,EACXg/R,GAAgB,EAChB6yC,GAAe,EACnB5hW,KAAKmtO,eAAgB,EACrB,IAAK,IAAI/uO,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,GAAU5vF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACL,IAAK,SACL,IAAK,kBACL,IAAK,iBACL,IAAK,gBACL,IAAK,eACL,IAAK,aACD2wT,GAAgB,EAChB,MACJ,IAAK,SACL,IAAK,YACL,IAAK,aACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,eACL,IAAK,UACL,IAAK,YACL,IAAK,iBACL,IAAK,iBACL,IAAK,yBACL,IAAK,cACL,IAAK,WACL,IAAK,eACL,IAAK,0BACDh/R,GAAW,EACX,MACJ,IAAK,QACD/vB,KAAKmtO,eAAgB,EACrB,MACJ,IAAK,SACDzgJ,EAAOrxF,UAAUyvD,QAAQxpD,KAAKtB,MAC9B,MACJ,IAAK,QACD4hW,GAAe,IAItB7yC,GAAiBh/R,IAClB/vB,KAAK4pT,YACL5pT,KAAKsuO,YAAY+rH,YAAYr6V,OAE7B+uT,IACA/uT,KAAK4pT,YACL5pT,KAAK8vS,kBACL9vS,KAAKsuO,YAAY+rH,YAAYr6V,OAE5B+uT,GAAkBh/R,IAAY6xU,IAC/B5hW,KAAK4gW,iBACL5gW,KAAKu6V,YAAYsE,UAAU7+V,KAAKuoB,WAAYvoB,KAAK03B,UAAU,EAAM13B,KAAKixB,QAAQgP,QAAuC,WAA7BjgC,KAAKixB,QAAQowU,eAQ7GX,EAAerlW,UAAU+2F,gBAAkB,WACvC,IAAIryF,EAAQC,KACRozF,KAyBJ,OAxBApzF,KAAK+e,OAAOmY,IAAI,SAAUnY,GACtBq0E,EAAQ5uF,MACJouF,OAAQ7zE,EAAOrY,KAAO,SACtBzG,MAAOF,OAGXC,KAAKmgC,uBAAuBC,QAAQ3jC,OAAS,GAC7C22F,EAAQ5uF,MACJouF,OAAQ,iBACR3yF,MAAOD,QAGQ,WAAnBA,KAAKsxB,WACL8hE,EAAQ5uF,MACJouF,OAAQ5yF,KAAKsxB,UACbrxB,MAAOD,QAGXA,KAAKixB,QAAQgP,QACbmzD,EAAQ5uF,MACJouF,OAAQ,eACR3yF,MAAOD,QAGRozF,GAKXstQ,EAAerlW,UAAU0kC,cAAgB,WACrC,MAAO,kBAQX2gU,EAAerlW,UAAUiX,QAAU,WAC/BtS,KAAKogH,eACLpgH,KAAKu6V,YAAYjoV,UACjBo6E,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKgB,QAAQ8C,UAAUS,OAAO,qBAElC6nF,IACIllF,EAAS,OACVw5V,EAAerlW,UAAW,aAAS,GACtC+wF,IACIllF,EAAS,OACVw5V,EAAerlW,UAAW,cAAU,GACvC+wF,IACIllF,EAAS,OACVw5V,EAAerlW,UAAW,kBAAc,GAC3C+wF,IACIllF,EAAS,OACVw5V,EAAerlW,UAAW,aAAS,GACtC+wF,IACIllF,EAAS,OACVw5V,EAAerlW,UAAW,aAAS,GACtC+wF,IACIllF,EAAS,OACVw5V,EAAerlW,UAAW,aAAS,GACtC+wF,IACI/jF,KAAek1V,KAChBmD,EAAerlW,UAAW,cAAU,GACvC+wF,IACIrkF,KAAY61V,KACb8C,EAAerlW,UAAW,eAAW,GACxC+wF,IACIllF,EAAS,OACVw5V,EAAerlW,UAAW,eAAW,GACxC+wF,IACIllF,EAAS,OACVw5V,EAAerlW,UAAW,eAAW,GACxC+wF,IACIllF,EAAS,OACVw5V,EAAerlW,UAAW,gBAAY,GACzC+wF,IACIllF,EAAS,SACVw5V,EAAerlW,UAAW,oBAAgB,GAC7C+wF,IACIllF,EAAS,SACVw5V,EAAerlW,UAAW,4BAAwB,GACrD+wF,IACIllF,EAAS,KACVw5V,EAAerlW,UAAW,eAAW,GACxC+wF,IACIllF,EAAS,WACVw5V,EAAerlW,UAAW,iBAAa,GAC1C+wF,IACIllF,EAAS,YACVw5V,EAAerlW,UAAW,qBAAiB,GAC9C+wF,IACIllF,EAAS,MACVw5V,EAAerlW,UAAW,yBAAqB,GAClD+wF,IACIllF,GAAS,IACVw5V,EAAerlW,UAAW,sBAAkB,GAC/C+wF,IACIllF,GAAS,IACVw5V,EAAerlW,UAAW,4BAAwB,GACrD+wF,IACIllF,GAAS,IACVw5V,EAAerlW,UAAW,4BAAwB,GACrD+wF,IACIllF,GAAS,IACVw5V,EAAerlW,UAAW,qBAAiB,GAC9C+wF,IACIllF,GAAS,IACVw5V,EAAerlW,UAAW,4BAAwB,GACrD+wF,IACIllF,KACDw5V,EAAerlW,UAAW,eAAW,GACxC+wF,IACIllF,EAAS,YACVw5V,EAAerlW,UAAW,oBAAgB,GAC7C+wF,IACIrkF,EAAQ2vS,GAAoB5iF,cAAeO,KAC5CqrI,EAAerlW,UAAW,kBAAc,GAC3C+wF,IACIrkF,KAAY8xN,KACb6mI,EAAerlW,UAAW,sBAAkB,GAC/C+wF,IACIrkF,KAAYiyN,KACb0mI,EAAerlW,UAAW,sBAAkB,GAC/C+wF,IACIrkF,KAAY01V,KACbiD,EAAerlW,UAAW,8BAA0B,GACvD+wF,IACIrkF,KAAY41V,KACb+C,EAAerlW,UAAW,8BAA0B,GACvD+wF,IACIrkF,GAAU8tB,MAAO,UAAW7f,MAAO,GAAKs/M,KACzCorI,EAAerlW,UAAW,uBAAmB,GAChD+wF,IACIllF,EAAS,aACVw5V,EAAerlW,UAAW,aAAS,GACtC+wF,IACIllF,OACDw5V,EAAerlW,UAAW,aAAS,GACtC+wF,IACIllF,EAAS,KACVw5V,EAAerlW,UAAW,mBAAe,GAC5C+wF,IACIllF,EAAS,KACVw5V,EAAerlW,UAAW,gBAAY,GACzC+wF,IACIllF,EAAS,aACVw5V,EAAerlW,UAAW,oBAAgB,GAC7C+wF,IACIllF,EAAS,WACVw5V,EAAerlW,UAAW,+BAA2B,GACxD+wF,IACIrkF,GAAU2E,IAAK,EAAGC,OAAQ,EAAGF,MAAO,EAAGD,KAAM,GAAKgpN,KACnDkrI,EAAerlW,UAAW,cAAU,GACvC+wF,IACItjF,KACD43V,EAAerlW,UAAW,YAAQ,GACrC+wF,IACItjF,KACD43V,EAAerlW,UAAW,cAAU,GACvC+wF,IACItjF,KACD43V,EAAerlW,UAAW,eAAW,GACxC+wF,IACItjF,KACD43V,EAAerlW,UAAW,mBAAe,GAC5C+wF,IACItjF,KACD43V,EAAerlW,UAAW,eAAW,GACxC+wF,IACItjF,KACD43V,EAAerlW,UAAW,qBAAiB,GAC9C+wF,IACItjF,KACD43V,EAAerlW,UAAW,sBAAkB,GAC/C+wF,IACItjF,KACD43V,EAAerlW,UAAW,mBAAe,GAC5CqlW,EAAiBt0Q,IACbhjF,GACDs3V,IAELvzP,ICtoBEthB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAM5DykU,GAAc,YAMdC,GAAiB,eAgBjBC,GAAyB,SAAUr1Q,GAOnC,SAASq1Q,EAAQ/uV,EAAShS,GACtB,OAAO0rF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAuSlD,OA9SA6rF,GAAUk2Q,EAASr1Q,GAanBq1Q,EAAQ1mW,UAAUoX,UAAY,WAC1BzS,KAAKgiW,QAAUx2V,GAAQqb,KAAKkQ,KAC5B/2B,KAAKiiW,aAAgC,YAAjBjiW,KAAKgiW,QACzBhiW,KAAK4mB,SAAWpb,GAAQob,SACxB,IAAI5lB,EAAUhB,KAAKgB,QACnBhB,KAAKkiW,QAA2B,SAAjBliW,KAAKgiW,SAAuC,SAAjBhiW,KAAKgiW,QAC/ChiW,KAAK+vG,aACc,KAAf/uG,EAAQsC,KACRtC,EAAQsC,GAAK9D,EAAY,WACzBQ,KAAKmiW,UAAW,GAEpBnhW,EAAQ0D,MAAM6pC,QAAU,QACpBvuC,KAAKkT,WACLlS,EAAQ8C,UAAUM,IAlDhB,UAyDV29V,EAAQ1mW,UAAUsyG,OAAS,WACvB3tG,KAAKy8H,YAAc,IAAIhhB,GAAMz7G,KAAKgB,SAAWi2M,OAAQj3M,KAAKoiW,aAAa9mW,KAAK0E,QACvEA,KAAK4mB,SAKN5mB,KAAKgB,QAAQ8C,UAAUM,IAtDlB,oBAkDLpE,KAAKqiW,cAAcriW,KAAKgB,SACxBuE,GAAanB,IAAIpE,KAAKsiW,UAAW,SAAUtiW,KAAKq8H,cAAer8H,QAMvE+hW,EAAQ1mW,UAAU00G,WAAa,WAC3B,IAAIuyP,EAAYtiW,KAAKmB,cAAc,OAASkC,UAjE/B,sBAkETk/V,EAAYviW,KAAKmB,cAAc,OAASkC,UAnE/B,kBAoEbk/V,EAAU/+V,aAAa,WAAY,MAGnC,IAAK,IAFDQ,EAAMhE,KAAKgB,QAEN5C,EAAK,EAAGokW,KADCnhW,MAAMC,KAAK0C,EAAIoW,UACOhc,EAAKokW,EAAW/lW,OAAQ2B,IAAM,CAClE,IAAI2oI,EAAQy7N,EAAWpkW,GACvBkkW,EAAU3gW,YAAYolI,GAE1Bw7N,EAAU5gW,YAAY2gW,GACtBt+V,EAAIrC,YAAY4gW,GAChBA,EAAU79V,MAAMqV,UAAY,SAC5B/Z,KAAKsiW,UAAYC,EACjBviW,KAAKyiW,YAAcH,GAEvBP,EAAQ1mW,UAAU+yG,eAAiB,WAE/B,OAAOpuG,KAAK4uG,cADK,gBAQrBmzP,EAAQ1mW,UAAU0kC,cAAgB,WAC9B,MAAO,WAMXgiU,EAAQ1mW,UAAUiX,QAAU,WACxB,IAAItO,EAAMhE,KAAKgB,QACfgD,EAAIU,MAAM6pC,QAAU,GACpBvqC,EAAIF,UAAUS,OAvGP,aAyGP,IAAK,IADDm+V,EAAM98V,EAAU,MAAQ5B,EAAIV,GAAK,QAAUw+V,GAAgB99V,GACtD5F,EAAK,EAAGyE,KAAQxB,MAAMC,KAAKtB,KAAKyiW,YAAYroV,UAAWhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAClF,IAAIsE,EAAOG,EAAGzE,GACd4F,EAAIrC,YAAYe,GAEhB1C,KAAKmiW,UACLniW,KAAKgB,QAAQ0K,gBAAgB,MAEjCrG,EAAOrF,KAAKsiW,WACRI,EAAIjmW,OAAS,IACb4I,EAAOq9V,EAAI,IACXr9V,EAAOq9V,EAAI,KAEfn9V,GAAahB,OAAOvE,KAAKsiW,UAAW,SAAUtiW,KAAKq8H,eACnDr8H,KAAKy8H,YAAYnqH,UACjBtS,KAAKy8H,YAAc,KACnB/vC,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,OAQlC+hW,EAAQ1mW,UAAUixM,QAAU,SAAUtvM,GAClC,IAAI2lW,EAAU/8V,EAAU,gCAA2C5F,KAAKgB,SACxEhE,EAAQgD,KAAKgB,QAAQ8C,UAAUM,IAAIy9V,IAAe7hW,KAAKgB,QAAQ8C,UAAUS,OAAOs9V,IAChFc,EAAQvjW,QAAQ,SAAU0G,GACtBA,EAAGtC,aAAa,WAAaxG,EAAc,KAAN,QAG7C+kW,EAAQ1mW,UAAUgnW,cAAgB,SAAUrhW,GACxC,IAAIsC,EAAKtC,EAAQsC,GAAGkX,OAAO,QACvBooV,EAAW,KAAO5hW,EAAQsC,GAAGkX,OAAO,QAAUsnV,GAAiB,uBAC/DY,EAAM1iW,KAAKmB,cAAc,OAASmC,GAAIA,EAAGkX,OAAO,UAAWnX,UAAWu/V,IAC1EF,EAAIl/V,aAAa,gBAAiB,SAClC,IAAIq/V,EAAU7iW,KAAKmB,cAAc,OAASkC,UAAWy/V,0CACjDC,EAAU,KAAO/hW,EAAQsC,GAAGkX,OAAO,QAAUsnV,GAAiB,sBAC9DkB,EAAShjW,KAAKmB,cAAc,OAASmC,GAAIA,EAAGkX,OAAO,SAAUnX,UAAW0/V,EAAU,IAAMlB,KAC5FmB,EAAOx/V,aAAa,gBAAiB,QACrC,IAAIy/V,EAAcjjW,KAAKmB,cAAc,OAASkC,UAAW6/V,yCACzDF,EAAOrhW,YAAYshW,GACnBP,EAAI/gW,YAAYkhW,GAChBH,EAAIl/V,aAAa,WAAY,KAC7BxC,EAAQW,YAAY+gW,GACpB1hW,EAAQkE,aAAa89V,EAAQhiW,EAAQ+b,YACjC/c,KAAKkiW,UACLQ,EAAI5+V,UAAUM,IAAI,cAClB4+V,EAAOl/V,UAAUM,IAAI,eAEzBpE,KAAKmjW,cAAcT,EAAKM,KAE5BjB,EAAQ1mW,UAAU+nW,WAAa,SAAUviW,GACrC,IAAId,EAAQC,KACZ,GAAc,UAAVa,EAAExD,IAAiB,CAKnB2C,KAAKqjW,SAAWxnW,OAAOsE,WAAW,WAH9BJ,EAAMujW,YAAa,EACnBvjW,EAAMwjW,aAAa,GAAI1iW,EAAEsG,SAI1B,OAGX46V,EAAQ1mW,UAAUmoW,QAAU,SAAU3iW,GACpB,UAAVA,EAAExD,MAGF2C,KAAKsjW,WACLtjW,KAAKsjW,YAAa,EAGlBziW,EAAEsG,OAAO8rH,QAEb/yH,aAAaF,KAAKqjW,YAEtBtB,EAAQ1mW,UAAU8nW,aAAe,SAAUn/V,GACvC,IAAIjE,EAAQC,KACZgE,EAAI5E,QAAQ,SAAU0G,GAClB,IAAI21G,GAAM31G,GAAM42H,QAAS38H,EAAM0jW,eAAenoW,KAAKyE,GAAQu8G,iBAAkB,MAC7Ex2G,EAAGpJ,iBAAiB,UAAWqD,EAAMqjW,WAAW9nW,KAAKyE,IACrD+F,EAAGpJ,iBAAiB,QAASqD,EAAMyjW,QAAQloW,KAAKyE,IAChD+F,EAAGpJ,iBAAiB,UAAWqD,EAAM2jW,aAAapoW,KAAKyE,IACvD+F,EAAGpJ,iBAAiB,WAAYqD,EAAM2jW,aAAapoW,KAAKyE,IACxD+F,EAAGpJ,iBAAiB,cAAe,SAAUmE,GACzCA,EAAE6kB,mBAENngB,GAAanB,IAAI0B,EAAI,QAAS/F,EAAM4jW,kBAAmB5jW,MAG/DgiW,EAAQ1mW,UAAUqoW,aAAe,WAC7BphW,cAActC,KAAK6xE,UAEvBkwR,EAAQ1mW,UAAUooW,eAAiB,SAAU5iW,GACzC,IAAId,EAAQC,KACRg9H,EAAOn8H,EAAEi8G,cAAc31G,OAC3B61H,EAAOh9H,KAAKmE,SAAS64H,EAAM8kO,IAAkB9kO,EAAK73H,kBAAoB63H,EAKtEh9H,KAAK6xE,QAAUh2E,OAAOuG,YAAY,WAF9BrC,EAAMwjW,aAFM,GAEkBvmO,IAI/B,KAEP+kO,EAAQ1mW,UAAU8I,SAAW,SAAUH,EAAKX,GACxC,OAAOW,EAAIF,UAAUK,SAASd,IAElC0+V,EAAQ1mW,UAAUkoW,aAAe,SAAUK,EAAW5mO,GAClD,IAAIh8H,EAAUhB,KAAKsiW,UACfuB,EAAU7jW,KAAKgB,QACf8C,EAAYk5H,EAAKl5H,UACjBA,EAAUK,SAAS29V,MACnBh+V,EAAYk5H,EAAKr6H,cAAc,gBAAoBmB,WAEnD9D,KAAKmE,SAAS0/V,EA1NZ,UA0NiC7jW,KAAKiiW,eACxC2B,GAAaA,GAEjB,IAAIE,EAAW9iW,EAAQgL,YACjBhM,KAAKmE,SAAS0/V,EA9Nd,UA8NmC7jW,KAAKiiW,cAAiBjiW,KAAKkiW,QAC5Dp+V,EAAUK,SA1NF,qBA2NRnD,EAAQgL,WAAa83V,EAAWF,EAGhC5iW,EAAQgL,WAAa83V,EAAWF,EAIhC9/V,EAAUK,SAjOH,oBAkOPnD,EAAQgL,WAAa83V,EAAWF,EAGhC5iW,EAAQgL,WAAa83V,EAAWF,GAI5C7B,EAAQ1mW,UAAUsoW,kBAAoB,SAAU9iW,GAC5Cb,KAAKujW,aAAavjW,KAAK+jW,WAAYljW,EAAEsG,SAEzC46V,EAAQ1mW,UAAU+mW,aAAe,SAAUvhW,GACvC,IACIyxC,EADAtuC,EAAMhE,KAAKsiW,UAEfhwT,EAAWzxC,EAAEk8G,UACR/8G,KAAY,SAAKA,KAAKmE,SAASnE,KAAKgB,QAtPnC,WAuPFsxC,GAAYA,GAEU,SAAtBzxC,EAAEo8G,gBACFj5G,EAAIgI,WAAahI,EAAIgI,WAAasmC,EAEP,UAAtBzxC,EAAEo8G,kBACPj5G,EAAIgI,WAAahI,EAAIgI,WAAasmC,IAG1CyvT,EAAQ1mW,UAAU2oW,eAAiB,SAAUC,EAAYC,GACrDD,EAAWngW,UAAUM,IAAIy9V,IACzBoC,EAAWzgW,aAAa,gBAAiB,QACzCygW,EAAWv4V,gBAAgB,YAC3BpJ,cAActC,KAAK6xE,SACnBqyR,EAAcpgW,UAAUS,OAAOs9V,IAC/BqC,EAAc1gW,aAAa,gBAAiB,SAC5C0gW,EAAc1gW,aAAa,WAAY,KACvCxD,KAAK0jW,gBAET3B,EAAQ1mW,UAAUghI,cAAgB,SAAUx7H,GACxC,IAAIsG,EAAStG,EAAEsG,OACX6O,EAAQ7O,EAAOvC,YACfi/V,EAAU7jW,KAAKgB,QACfmjW,EAAankW,KAAKgB,QAAQ2B,cAAc,sBACxCyhW,EAAcpkW,KAAKgB,QAAQ2B,cAAc,uBACzCqJ,EAAa7E,EAAO6E,WAIxB,GAHIA,GAAc,IACdA,GAAcA,GAEC,IAAfA,GACMhM,KAAKmE,SAAS0/V,EArRlB,UAqRuC7jW,KAAKiiW,cAAiBjiW,KAAKkiW,QAChEliW,KAAKgkW,eAAeG,EAAYC,GAGhCpkW,KAAKgkW,eAAeI,EAAaD,QAGpC,GAAI93V,KAAK6lB,KAAKlc,EAAQhK,EAAa,KAAO7E,EAAOg6D,aAC5CnhE,KAAKmE,SAAS0/V,EA7RlB,UA6RuC7jW,KAAKiiW,cAAiBjiW,KAAKkiW,QAChEliW,KAAKgkW,eAAeI,EAAaD,GAGjCnkW,KAAKgkW,eAAeG,EAAYC,OAGnC,CACD,IAAIC,EAASrkW,KAAKgB,QAAQ2B,cAAc,IAAMm/V,GAAiB,IAAMD,IACjEwC,IACAA,EAAOvgW,UAAUS,OAAOs9V,IACxBwC,EAAO7gW,aAAa,gBAAiB,SACrC6gW,EAAO7gW,aAAa,WAAY,QAW5Cu+V,EAAQ1mW,UAAU0tF,kBAAoB,SAAUiF,EAASC,GACrD,IAAK,IAAI7vF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,GAAU5vF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,aACD,MACJ,IAAK,YACD4vF,EAAQ96E,UAAYlT,KAAKgB,QAAQ8C,UAAUM,IA3TjD,SA2TgEpE,KAAKgB,QAAQ8C,UAAUS,OA3TvF,YAgUV6nF,IACIllF,EAAS,KACV66V,EAAQ1mW,UAAW,kBAAc,GACpC0mW,EAAU31Q,IACNhjF,GACD24V,IAEL50P,IC1VEthB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAW5DknU,GAAY,kBACZC,GAAW,iBAEXC,GAAgB,cAChBC,GAAgB,kBAChBC,GAAgB,oBAEhB7C,GAAc,YAEd8C,GAAe,eACfC,GAAmB,kBACnBC,GAAkB,kBAElBC,GAAc,YAKdC,GAAc,aAGdC,GAAiB,gBACjBC,GAAY,kBAEZC,GAAiB,eACjBC,GAAiB,WACjBC,GAAa,gBAGbC,GAAyB,uBAEzBC,GAA2B,uBAI3BC,GAAsB,kBAItBp4M,GAAsB,SAAUzgE,GAEhC,SAASygE,IACL,OAAkB,OAAXzgE,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA4C/D,OA9CA6rF,GAAUshE,EAAMzgE,GAIhBN,IACIllF,EAAS,KACVimJ,EAAK9xJ,UAAW,UAAM,GACzB+wF,IACIllF,EAAS,KACVimJ,EAAK9xJ,UAAW,YAAQ,GAC3B+wF,IACIllF,EAAS,SACVimJ,EAAK9xJ,UAAW,aAAS,GAC5B+wF,IACIllF,EAAS,KACVimJ,EAAK9xJ,UAAW,gBAAY,GAC/B+wF,IACIllF,GAAS,IACVimJ,EAAK9xJ,UAAW,yBAAqB,GACxC+wF,IACIllF,EAAS,KACVimJ,EAAK9xJ,UAAW,kBAAc,GACjC+wF,IACIllF,EAAS,KACVimJ,EAAK9xJ,UAAW,kBAAc,GACjC+wF,IACIllF,EAAS,SACVimJ,EAAK9xJ,UAAW,gBAAY,GAC/B+wF,IACIllF,EAAS,KACVimJ,EAAK9xJ,UAAW,gBAAY,GAC/B+wF,IACIllF,EAAS,WACVimJ,EAAK9xJ,UAAW,YAAQ,GAC3B+wF,IACIllF,EAAS,SACVimJ,EAAK9xJ,UAAW,kBAAc,GACjC+wF,IACIllF,EAAS,OACVimJ,EAAK9xJ,UAAW,sBAAkB,GACrC+wF,IACIllF,EAAS,KACVimJ,EAAK9xJ,UAAW,mBAAe,GAClC+wF,IACIllF,EAAS,SACVimJ,EAAK9xJ,UAAW,aAAS,GACrB8xJ,GACT3sF,IAYEglS,GAAyB,SAAU94Q,GAOnC,SAAS84Q,EAAQxyV,EAAShS,GACtB,IAAIjB,EAAQ2sF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAenD,OAXAD,EAAMy4G,YACFuL,SAAU,YACVC,UAAW,aACXF,OAAQ,UACRD,SAAU,YACV4hP,UAAW,QACX3yM,WAAY,SACZp9C,IAAK,MACLQ,KAAM,OACNl3F,IAAK,OAEFjf,EAkmDX,OAxnDA8rF,GAAU25Q,EAAS94Q,GA4BnB84Q,EAAQnqW,UAAUiX,QAAU,WACxB,IAAIvS,EAAQC,KACRgE,EAAMhE,KAAKgB,QAQf,IAPA0rF,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKqlB,eACLrlB,KAAK0lW,OAAOtmW,QAAQ,SAAU4E,GACrBkxE,EAAMn1E,EAAMiB,QAAQ2B,cAAcqB,MACnCxD,SAASuL,KAAKpK,YAAY5B,EAAMiB,QAAQ2B,cAAcqB,IAAMU,MAAM6pC,QAAU,UAG7EvqC,EAAI+Y,YACP/Y,EAAIsB,YAAYtB,EAAI+Y,YAEpB/c,KAAK2lW,SACL3hW,EAAIrC,YAAY3B,KAAK4lW,SAEzB5lW,KAAK6lW,gBACL7lW,KAAK8lW,OAAS,KACd9lW,KAAK+lW,UAAY,KACjB/lW,KAAKuE,OAAOvE,KAAKgB,QAAS,aAC1BgD,EAAI0H,gBAAgB,UACnB,gBAAiB,mBAAoB,gBAAiB,QAAQtM,QAAQ,SAAU4mW,GAC7EjmW,EAAMiB,QAAQ0K,gBAAgBs6V,MAOtCR,EAAQnqW,UAAUoX,UAAY,WAC1B,IAAIlF,GAAc04V,iBAAiB,EAAMlC,WAAY/jW,KAAK+jW,YAC1D/jW,KAAK0mB,QAAQ,eAAgBnZ,GAC7BvN,KAAKimW,gBAAkB14V,EAAU04V,gBACjCjmW,KAAK+jW,WAAax2V,EAAUw2V,WAC5B/jW,KAAKkmW,aAAe,KACpBlmW,KAAK8lW,OAAS,KACd9lW,KAAK0lW,UACL1lW,KAAKmmW,aAAenmW,KAAK67D,MACzB77D,KAAKomW,cAAgB,EACjBpmW,KAAKkT,WACLlT,KAAKoE,IAAIpE,KAAKgB,QAtKZ,UAyKVwkW,EAAQnqW,UAAUopB,WAAa,WAC3Blf,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAK+gH,aAAc/gH,MAC3DnE,OAAOa,iBAAiB,SAAUsD,KAAKk+U,OAAO5iV,KAAK0E,OACnDA,KAAKqmW,UAAY,IAAIruP,GAAeh4G,KAAKgB,SACrC83G,UAAW94G,KAAKkjJ,iBAAiB5nJ,KAAK0E,MACtCw4G,WAAYx4G,KAAKw4G,aAErBjzG,GAAanB,IAAIpE,KAAKgB,QAAS,UAAWhB,KAAKsmW,WAAYtmW,MAC3DA,KAAKgB,QAAQwC,aAAa,WAAY,MAE1CgiW,EAAQnqW,UAAUirW,WAAa,SAAUzlW,GACrC,GAAyB,UAArBA,EAAEsG,OAAOnE,QAAb,CAGA,IAAIujW,GAAYrxR,EAAMl1E,KAAK8lW,SAAWrhW,EAAUzE,KAAK8lW,OAAO9kW,UAAkC,aAAtBhB,KAAKwmW,aAC3D,IAAd3lW,EAAEonB,UAA8D,IAA7CpnB,EAAEsG,OAAOrD,UAAUK,SAAS,cAAyBoiW,GACxEvmW,KAAK8lW,OAAOhjR,MAAO/rD,KAAM,UAAW7rB,SAAU,OAEpB,KAAdrK,EAAEonB,SAAgC,KAAdpnB,EAAEonB,SAAgC,KAAdpnB,EAAEonB,SAAgC,KAAdpnB,EAAEonB,UAE1EpnB,EAAE6kB,mBAGV8/U,EAAQnqW,UAAUgqB,aAAe,WAC7B9f,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAK+gH,cAChD/gH,KAAKymW,iBACLzmW,KAAKqmW,UAAU/zV,UACf/M,GAAahB,OAAO/D,SAAU,SAAUR,KAAK0mW,UAC7CnhW,GAAahB,OAAOvE,KAAKgB,QAAS,UAAWhB,KAAKsmW,YAClD/gW,GAAahB,OAAO/D,SAAU,QAASR,KAAK0mW,WAEhDlB,EAAQnqW,UAAUwqW,cAAgB,WAC9B7lW,KAAK2mW,WACL3mW,KAAK4mW,YAAeC,SAAWC,WAAaC,YAEhDvB,EAAQnqW,UAAUqrW,SAAW,SAAU7lW,GACnC,IAAImmW,EAASnhW,EAAQhF,EAAEsG,OAAQ,YAC3BnH,KAAK8lW,QAAUrhW,EAAUzE,KAAK8lW,OAAO9kW,WAAagmW,GAAgC,UAAtBhnW,KAAKwmW,cACjExmW,KAAK8lW,OAAOhjR,MAAO/rD,KAAM,UAAW7rB,SAAU,OAGtDs6V,EAAQnqW,UAAUorW,eAAiB,WAC3BzmW,KAAKkmW,eACDlmW,KAAK+lW,WACL/lW,KAAKoE,IAAIpE,KAAKkmW,aAAallW,QAAS+jW,IAExC/kW,KAAKkmW,aAAa5zV,UAClBtS,KAAKkmW,aAAe,OAG5BV,EAAQnqW,UAAU4rW,aAAe,cAC1B5lW,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,IAAM+iW,KAAWnlW,QAAQ,SAAU0G,GAC3ET,EAAOS,KAEX,IAAIohW,EAAYlnW,KAAKgB,QAAQ2B,cAAc,IAAM2hW,IAC7CtkW,KAAK+lW,eACF1kW,MAAMC,KAAK4lW,EAAU9sV,UAAUhb,QAAQ,SAAU0G,GAChDT,EAAOS,KAEX9F,KAAK+lW,WAAY,EACjB/lW,KAAKuE,OAAO2iW,EAAWnC,KAE3B/kW,KAAK6lW,iBAETL,EAAQnqW,UAAU8rW,YAAc,WACxBnnW,KAAKkmW,eACLlmW,KAAKuE,OAAOvE,KAAKkmW,aAAallW,QA3O5B,SA4OFhB,KAAKymW,kBAETzmW,KAAKuE,OAAOvE,KAAKgB,QAASukW,IACtBvlW,KAAK8lW,QACL9lW,KAAKonW,aAAapnW,KAAK8lW,OAAO9kW,SAAS,IAG/CwkW,EAAQnqW,UAAU+I,IAAM,SAAUJ,EAAKqkB,GACnCrkB,EAAIF,UAAUM,IAAIikB,IAEtBm9U,EAAQnqW,UAAUkJ,OAAS,SAAUP,EAAKqkB,GACtCrkB,EAAIF,UAAUS,OAAO8jB,IAEzBm9U,EAAQnqW,UAAUgsW,aAAe,SAAUrjW,GACvC,IAAIsjW,EAAStjW,EAAImB,kBACbmiW,GACAA,EAAOplW,QACPlC,KAAKunW,gBAAgBvjW,IAGrBA,EAAI9B,SAGZsjW,EAAQnqW,UAAUmsW,YAAc,SAAUC,EAAWzqO,GAWjD,OATIyqO,GAAaznW,KAAK8lW,QAAUrhW,EAAUzE,KAAK8lW,OAAO9kW,SAC3ChB,KAAK8lW,OAAO9kW,QAAQ2B,cAAc,IAAM4hW,IAE1CvkW,KAAKgB,UAAYg8H,GAAQyqO,EACvBznW,KAAKgB,QAAQ2B,cAAc,IAAM4hW,GAAW,SAAW1C,GAAc,WAAa2C,GAAgB,MAGlG3+V,EAAQm3H,EAAM,IAAMunO,KAInCiB,EAAQnqW,UAAUqsW,YAAc,SAAUC,EAAM9mW,EAAGm8H,EAAM4qO,EAAQC,GAC7D,IAAI/B,EAAS9lW,KAAK8lW,OACdjC,EAAU7jW,KAAKgB,QACf8mW,GAAe/wU,KAAM,UAAW7rB,SAAU,KAC9C,OAAQrK,EAAE8uD,QACN,IAAK,YACGk0S,IAAY7mO,EACZh9H,KAAKqnW,aAAaM,GAEZC,GACN5nW,KAAK+nW,SAASJ,EAAM,QAExB,MACJ,IAAK,WACIC,GACD5nW,KAAK+nW,SAASJ,EAAM,YAExB,MACJ,IAAK,OACL,IAAK,MACD,IAAI3jW,OAAM,EACN0mD,OAAQ,EACZ,GAAIi9S,EAAM,CACN,IAAIK,EAAaniW,EAAQ8hW,EAAM,YAC3BK,EACIvjW,EAAUzE,KAAK8lW,OAAO9kW,WACtB0pD,EAAQs9S,EAAW5tV,SAEfpW,EADa,SAAbnD,EAAE8uD,OACIjF,EAAM,GAGNA,EAAMA,EAAMjuD,OAAS,KAKnCiuD,EAAQ1qD,KAAKgB,QAAQQ,iBAAiB,IAAM8iW,GAAY,KAAOC,IAE3DvgW,EADa,SAAbnD,EAAE8uD,OACIjF,EAAM,GAGNA,EAAMA,EAAMjuD,OAAS,IAG/BuH,GACAhE,KAAKqnW,aAAarjW,GAG1B,MACJ,IAAK,SACL,IAAK,WACD,IAAIhH,EAAqB,WAAb6D,EAAE8uD,OAAsB,WAAa,OACjD,GAAIm2S,GAAUjgW,EAAQm3H,EAAM,YAAa,CACrC,IAAIgqO,EAASlB,EAAO9kW,QAChBinW,EAAajB,EAAO7hW,kBACxB,GAAe,aAAVnI,GAAwBirW,IAAeN,GAAoB,SAAV3qW,GAAoBgqW,EAAO71N,mBAAqBw2N,EAClG,OAGA3nW,KAAK+nW,SAASJ,EAAM3qW,OAGN,aAAb6D,EAAE8uD,QAAyBm2S,GAAUrhW,EAAUqhW,EAAO9kW,UAC3DhB,KAAKqnW,aAAaM,GAEtB,MACJ,IAAK,MACD,IAAKE,IAAcD,EAAQ,CACvB,IAAI7gO,EAAQ4gO,EAAKxiW,kBACb0+V,IAAY7mO,IACRh9H,KAAKkoW,UACLloW,KAAKkoW,UAAUhmW,SAGflC,KAAKmoW,gBAAgBphO,GACrBA,EAAM7kI,SAEVlC,KAAKgB,QAAQ0K,gBAAgB,aAGrC,MACJ,IAAK,aACGo6V,GAAgC,aAAtB9lW,KAAKwmW,cACfV,EAAOhjR,KAAKglR,GAEhB,MACJ,IAAK,YACD,IAAKF,EACD,OAEA9B,IAAWrhW,EAAUqhW,EAAO9kW,UAC5B8kW,EAAO9kW,QAAQ0D,MAAMgI,IAAMm3V,EAAQnwS,aAAe,KAClDoyS,EAAOl1O,MAAO75F,KAAM,SAAU7rB,SAAU,OAGxC46V,EAAOhjR,KAAKglR,KAK5BtC,EAAQnqW,UAAU6nJ,iBAAmB,SAAUriJ,GAC3C,IAAIm8H,EAAOn8H,EAAEsG,OACb,GAAqB,UAAjB61H,EAAKh6H,SAAwC,aAAjBg6H,EAAKh6H,UAA0BhD,KAAKgB,QAAQ8C,UAAUK,SAAS09V,IAA/F,CAGAhhW,EAAE6kB,iBACF,IAAIiiV,EACAF,EAAYzqO,EAAKl5H,UAAUK,SAAS2gW,IACpCsD,EAAgBprO,EAAKl5H,UAAUK,SAhXrB,kBAiXdwjW,EAAO3nW,KAAKwnW,YAAYC,EAAWzqO,KACvBorO,IACRpoW,KAAK0nW,YAAYC,EAAM9mW,EAAGm8H,EAAMyqO,EAAWW,KASnD5C,EAAQnqW,UAAUixM,QAAU,SAAUtvM,GAClC,IAAI6mW,EAAU7jW,KAAKgB,QACnBhE,EAAQ6mW,EAAQ//V,UAAUM,IAAIy9V,IAAegC,EAAQ//V,UAAUS,OAAOs9V,IACtEgC,EAAQrgW,aAAa,WAAaxG,EAAc,KAAN,KACtCgD,KAAKkoW,WACLloW,KAAKkoW,UAAU1kW,aAAa,WAAaxG,EAAc,KAAN,KAEjDgD,KAAKkmW,cACLlmW,KAAKkmW,aAAa55J,QAAQtvM,GAE1BgD,KAAK8lW,SACDrhW,EAAUzE,KAAK8lW,OAAO9kW,UAAkC,aAAtBhB,KAAKwmW,cACvCxmW,KAAK8lW,OAAOhjR,OAEhB+gR,EAAQlhW,cAAc,IAAMkhW,EAAQvgW,GAAK,QAAQE,aAAa,WAAaxG,EAAc,KAAN,OAG3FwoW,EAAQnqW,UAAU0sW,SAAW,SAAUliW,EAASoP,GAC5C,IAAIozV,EAAM/pW,OAAOuH,GAASoP,EAAM,kBAC5B9Q,EAAW,SAAU2B,GACrB,OAAOA,EAAGhC,UAAUK,SAASqgW,KAAkB1+V,EAAGhC,UAAUK,SAAS09V,KAEzE,GAAIwG,EAAK,CACL,IAAIC,EAAUnkW,EAASkkW,GACvB,GAAIC,EAAS,CACT,IAAIhqW,OAAO+pW,GAAKpzV,EAAM,kBASlB,OANA,GAFAozV,EAAM/pW,OAAO+pW,GAAKpzV,EAAM,kBACxBqzV,EAAUnkW,EAASkkW,GAGf,YADAroW,KAAK+nW,SAASM,EAAKpzV,GAQ/BjV,KAAKqnW,aAAagB,QAEjB,GAAIroW,KAAK+lW,UAAW,CACrB,IAAIrjW,EAAOpE,OAAOuH,EAAQwO,eAAeY,EAAM,kBAI/C,GAHKigE,EAAMxyE,IAAkC,IAAzBA,EAAK0X,SAAS3d,SAC9BiG,EAAOpE,OAAOoE,GAAMuS,EAAM,oBAEzBigE,EAAMxyE,IAASA,EAAK0X,SAAS3d,OAAS,EACvC,GAAY,SAARwY,EAAgB,CAEZ9Q,EADA2B,EAAKpD,EAAKC,cAAc,IAAM4hW,KAE9BvkW,KAAK+nW,SAASjiW,EAAImP,IAGlBnP,EAAGX,kBAAkBjD,QACrBlC,KAAKunW,gBAAgBzhW,QAGxB,CACD,IAAIA,EACA3B,EADA2B,EAAKpD,EAAKyuI,kBAEVnxI,KAAK+nW,SAASjiW,EAAImP,GAGlBjV,KAAKqnW,aAAavhW,MAMtC0/V,EAAQnqW,UAAU0lH,aAAe,SAAUlgH,GACvC,IAAIm8H,EAAOn8H,EAAEsG,OACTohW,EAAUvrO,EAAKl5H,UACfE,EAAMhE,KAAKgB,QACXwnW,GAAkBtzR,EAAMrvE,EAAQm3H,EAAM,IAAMgoO,KAC5CyD,EAAW5iW,EAAQm3H,EAAO,IAAM8nO,IAC/B2D,IACDA,EAAWzrO,IAEVh5H,EAAIoW,SAAS,GAAGtW,UAAUK,SAAS,cAAiBokW,EAAQpkW,SAAS2gW,MACtEyD,EAAUvrO,EAAKr6H,cAAc,YAAYmB,YAEzCykW,EAAQpkW,SAASsgW,KAAkB8D,EAAQpkW,SAASugW,MACpD1kW,KAAK0oW,kBAAkB1kW,EAAKykW,EAxd1B,SA0dN,IAAI59J,EACA88J,EAAO9hW,EAAQhF,EAAEsG,OAAQ,IAAMo9V,IACnC,IAAKrvR,EAAMyyR,KAASA,EAAK7jW,UAAUK,SAAS09V,KAAkB4G,EAAS3kW,UAAUK,SAAS2gW,IAA1F,CAGI6C,IACA98J,EAAU7qM,KAAK67D,MAAM77D,KAAK2mW,QAAQpoW,QAAQopW,KAE9C,IAAIp6V,GAAcuvG,cAAej8G,EAAGmd,KAAM6sL,GAC1C7qM,KAAK0mB,QAAQ,UAAWnZ,GACnB2nE,EAAMl1E,KAAK8lW,UAAW0C,GAAmBj7V,EAAU8qB,QAAgC,UAAtBr4B,KAAKwmW,cACnExmW,KAAK8lW,OAAOhjR,MAAO/rD,KAAM,UAAW7rB,SAAU,QAItDs6V,EAAQnqW,UAAUqtW,kBAAoB,SAAU1kW,EAAKykW,EAAUE,GAC3D,IAAI7C,EAAS9lW,KAAK8lW,OACdrhW,EAAUqhW,EAAO9kW,UACjBynW,EAAS3kW,UAAUS,OAAO2gW,IAC1BY,EAAOhjR,MAAO/rD,KAAM,UAAW7rB,SAAU,QAGrClH,EAAIF,UAAUK,SAASwkW,KACvB7C,EAAO5yV,WAAY,EACnB4yV,EAAO5xV,UAAakC,EAAG,OAAQC,EAAG,QAEf,IAAnByvV,EAAOj6V,SAAkB7H,EAAIF,UAAUK,SAASwkW,KAChD7C,EAAO5yV,WAAY,EACnB4yV,EAAO5xV,UAAakC,EAAG,QAASC,EAAG,QAEvCyvV,EAAO5hT,WACP4hT,EAAOz3O,kBACPy3O,EAAO9kW,QAAQ0D,MAAMgI,IAAM1M,KAAKgB,QAAQ0yD,aAAe,KAC7B,aAAtB1zD,KAAKwmW,eACLV,EAAO9kW,QAAQ0D,MAAMioD,UAAY,OAErC87S,EAAS3kW,UAAUM,IAAI8gW,IACvBY,EAAOl1O,MAAO75F,KAAM,SAAU7rB,SAAU,QAOhDs6V,EAAQnqW,UAAUsyG,OAAS,WACvB3tG,KAAK+vG,aACL/vG,KAAK++M,gBACL/+M,KAAK6tJ,YACL7tJ,KAAKykB,cAET+gV,EAAQnqW,UAAU00G,WAAa,WAC3B,IAAI/5F,EAAQzT,EAAWvC,KAAKgW,OACxBD,EAASxT,EAAWvC,KAAK+V,QACH,SAAtBvK,GAAQqb,KAAKkQ,MAAmC,SAAhB/2B,KAAK+V,QAA2C,aAAtB/V,KAAKwmW,cAC/DzhG,EAAS/kQ,KAAKgB,SAAW+U,OAAUA,IAEvCgvP,EAAS/kQ,KAAKgB,SAAWgV,MAASA,IAIlCtS,EAAW1D,KAAKgB,SAFZ4Q,KAAQ,UAAW0zG,gBAAiB,QAAS8qC,gBAAiB,QAASw4M,mBAAoB,gBAInGpD,EAAQnqW,UAAU0jN,cAAgB,WAC9B/+M,KAAK2lW,QAAW3lW,KAAKgB,QAAQoZ,SAAS3d,OAAS,EAAKuD,KAAKgB,QAAQ2B,cAAc,OAAS,KACxF3C,KAAK4mW,YAAeC,SAAWC,WAAaC,WAC5C/mW,KAAKohF,cACLphF,KAAK6oW,qBACD7oW,KAAK+lW,WACL/lW,KAAK8oW,kBAEL9oW,KAAK8lW,QAAU9lW,KAAK8lW,OAAO9kW,QAAQ2lE,kBAAoB,GAAK3mE,KAAK+oW,kBAAkB/oW,KAAKgB,QAAShB,KAAK8lW,OAAO9kW,UAC7GhB,KAAKonW,aAAapnW,KAAK8lW,OAAO9kW,SAAS,IAG/CwkW,EAAQnqW,UAAU2tW,YAAc,SAAUhoW,EAASioW,IAC1CjpW,KAAKkmW,cAAgBlmW,KAAKkpW,cAAcloW,EAASioW,EAAW,MACzDjpW,KAAK+lW,WACL/lW,KAAKgB,QAAQ2B,cAAc,IAAM2hW,GAAY,sBAAuB54V,gBAAgB,SAExF1L,KAAKkmW,aAAe,IAAInE,IAAUgC,WAAY/jW,KAAK+jW,WAAY7wV,UAAWlT,KAAKkT,YAC/ElT,KAAKkmW,aAAa/kW,cAAgBnB,KAAKmB,cACvCnB,KAAKkmW,aAAa53T,SAAS26T,EAAW,IACtCjpW,KAAKuE,OAAOvE,KAAKkmW,aAAallW,QAAS+jW,IACvChgG,EAAS/kQ,KAAKgB,SAAW6Y,SAAU,aAG3C2rV,EAAQnqW,UAAU8tW,aAAe,SAAUttS,GACvC,IACIn3D,EADAsR,EAAQ,EAQZ,SANG3U,MAAMC,KAAKsE,EAAU,IAAM2+V,GAAU1oS,IAAQz8D,QAAQ,SAAU0G,GAC1DrB,EAAUqB,KACVpB,EAAQ7I,OAAOsR,iBAAiBrH,GAChCkQ,GAAUlQ,EAAGlB,YAAc+W,WAAWjX,EAAMksG,aAAej1F,WAAWjX,EAAMy/C,eAG7EnuC,GAEXwvV,EAAQnqW,UAAU6tW,cAAgB,SAAUloW,EAASooW,GACjD,GAAIl0R,EAAMl0E,IAAYk0E,EAAMk0R,KAAe3kW,EAAUzD,GACjD,OAAO,EAEX,IAAIqoW,EAAWroW,EAAQ4D,YACnB0kW,EAAYF,EAAUxkW,aACtB5E,KAAK+lW,WAAa/lW,KAAKkmW,cAAiBmD,IAAaC,KACrDA,EAAYtpW,KAAKmpW,aAAanpW,KAAKkmW,aAAekD,EAAUzmW,cAAc,sBAAwBymW,IAEtG,IAAIG,EAASvoW,EAAQ2B,cAAc,IAAMmiW,IACrC0E,EAAYxoW,EAAQ2B,cAAc,iBACtC,OAAI2mW,EAAYD,GAAYE,EAASA,EAAO3kW,YAAe4kW,EAAoC,EAAxBA,EAAU5kW,YAAkB,IAQvG4gW,EAAQnqW,UAAUouW,gBAAkB,WAChCzpW,KAAKk+U,UAETsnB,EAAQnqW,UAAUwtW,mBAAqB,WACnC,IAAI7kW,EAAMhE,KAAKgB,QACXioW,EAAajlW,EAAIrB,cAAc,IAAM2hW,IACrCoF,EAAgB1pW,KAAKomW,cAAgB,EACzC,GAAIpiW,GAAOA,EAAIoW,SAAS3d,OAAS,EAM7B,OALAuD,KAAK2pW,UAAY3lW,EAAIY,YACrB5E,KAAKuE,OAAOvE,KAAKgB,QAAS,aACA,SAAtBwK,GAAQqb,KAAKkQ,MAAmC,SAAhB/2B,KAAK+V,SACrC/R,EAAIU,MAAMqR,OAAS,IAEf/V,KAAKwmW,cACT,IAAK,aACGtxR,EAAMl1E,KAAKkmW,eACXlmW,KAAKgpW,YAAYhlW,EAAKA,EAAI0J,uBAAuB42V,KAErD,MACJ,IAAK,QACDtkW,KAAKoE,IAAIpE,KAAKgB,QAAS,aACnBhB,KAAK+lW,WACL/lW,KAAK4pW,qBAEL5pW,KAAKkpW,cAAcllW,EAAKilW,IAAeS,KACvC1pW,KAAK6pW,eAAe7lW,KAAQ3C,MAAMC,KAAKsE,EAAU,IAAM0+V,GAAY,KAAOC,GAAUvgW,KACpFhE,KAAKgB,QAAQ2B,cAAc,IAAMmiW,IAAathW,aAAa,WAAY,MAEvExD,KAAK+lW,YACL/lW,KAAKoE,IAAI6kW,EAAYlE,IACrB/kW,KAAK8oW,mBAET,MACJ,IAAK,WACD9oW,KAAKoE,IAAI6kW,EAtlBV,sBAulB4B,WAAvBjlW,EAAIU,MAAMmV,WACV7V,EAAIU,MAAMmV,SAAW,IAEC,SAAtBrO,GAAQqb,KAAKkQ,MAAwC,SAArB/yB,EAAIU,MAAMqR,SAC1C/R,EAAIU,MAAMqR,OAAS,QAEvB,MACJ,IAAK,WACD/V,KAAKoE,IAAIpE,KAAKgB,QA3lBJ,uBA4lBNhB,KAAKkpW,cAAcllW,EAAKilW,IAAeS,KACvC1pW,KAAK6pW,eAAe7lW,KAAQ3C,MAAMC,KAAKsE,EAAU,IAAM0+V,GAAY,KAAOC,GAAUvgW,KACpFhE,KAAKgB,QAAQ2B,cAAc,IAAMmiW,IAAathW,aAAa,WAAY,QAK3FgiW,EAAQnqW,UAAUwyJ,UAAY,WAC1B,IAEIi8M,EAFA9oW,EAAUhB,KAAKgB,QACf+oW,KAAa1oW,MAAMC,KAAKN,EAAQQ,iBAAiB,IAAMgjW,KAEvDwF,EAAWhpW,EAAQ2B,cAAc,IAAM0iW,IACvC4E,EAAYjpW,EAAQ2B,cAAc,IAAM2iW,IAEtB,QADtBwE,EAAsC,aAAtB9pW,KAAKwmW,aAA8BwD,EAAWC,KAEhC,aAAtBjqW,KAAKwmW,aACLsD,EAAchmW,UAAUS,OAAO8gW,IAEJ,aAAtBrlW,KAAKwmW,cACVsD,EAAchmW,UAAUS,OAAO+gW,KAGvC,IAAK,IAAInpW,EAAI,EAAGA,GAAK4tW,EAAQttW,OAAS,EAAGN,IACjC4tW,EAAQ5tW,GAAGgY,WAAa,IAAgC,IAA1B41V,EAAQ5tW,GAAGgY,aACf,aAAtBnU,KAAKwmW,aACLuD,EAAQ5tW,GAAG2H,UAAUM,IAAIihW,IAEE,aAAtBrlW,KAAKwmW,cACVuD,EAAQ5tW,GAAG2H,UAAUM,IAAIkhW,MAKzCE,EAAQnqW,UAAUwuW,eAAiB,SAAU7lW,EAAK0jM,GAC9C,IAAIwiK,EAAWlmW,EAAIrB,cAAc,IAAMmiW,IAClCoF,GACDlqW,KAAKmqW,gBAAgBnmW,GAEzBkmW,EAAWlmW,EAAIrB,cAAc,IAAMmiW,IACnC,IAAIuE,EAAYrlW,EAAIY,YAAeslW,EAAoB,YACvDlqW,KAAKgB,QAAQ8C,UAAUS,OAAO,SAC9BwgQ,EAAS/kQ,KAAKgB,SAAW6zB,UAAW,YACpC70B,KAAKoqW,cAAcpmW,EAAK0jM,EAAU2hK,GAAU,GACxCrpW,KAAKkT,WACLlT,KAAKgB,QAAQ8C,UAAUM,IAAI,SAE/BpE,KAAKgB,QAAQ0D,MAAM2lW,eAAe,aAClCrqW,KAAKwtJ,eAETg4M,EAAQnqW,UAAUivW,iBAAmB,SAAUC,EAASC,EAAUxmW,EAAKymW,EAAWC,GAC9E,IAAI1pW,EAAUupW,EAAQvpW,QAClB0pD,EAAQ9kD,EAAU,IAAMg/V,GAAkB5gW,GAC1C2mW,EAAY,EAEZC,EAAU,KADKvpW,MAAMC,KAAKsE,EAAU,IAAMq/V,GAAWjkW,EAAQ2B,cAAc,IAAM2hW,MAE3EllW,QAAQ,SAAU0G,EAAImM,GAC5By4C,EAAQ9kD,EAAU,IAAMg/V,GAAkB5gW,GACtC8B,EAAGhC,UAAUK,SAASygW,KAAqBl6S,EAAMjuD,OAAS,EACtD8tW,EAAQM,UAAYngT,EAAMjuD,OAASwV,GACnCjO,EAAIkB,aAAaY,EAAI4kD,EAAMz4C,MACzB24V,IAGF5mW,EAAIkB,aAAaY,EAAI9B,EAAIoW,SAASswC,EAAMjuD,WACtCmuW,GAGD9kW,EAAGhC,UAAUK,SAASygW,KAC3B5gW,EAAIkB,aAAaY,EAAI9B,EAAI+Y,cACvB6tV,GAEGL,EAAQM,UAAY/kW,EAAGhC,UAAUK,SAAS0gW,KAAoB7gW,EAAIoW,SAAS3d,OAAS,GAAsB,IAAjBiuD,EAAMjuD,QACpGuH,EAAIkB,aAAaY,EAAI9B,EAAI+Y,cACvB6tV,GAEG9kW,EAAGhC,UAAUK,SAAS0gW,IAC3B2F,EAAShmW,KAAKsB,GAETykW,EAAQM,UACb7mW,EAAIkB,aAAaY,EAAI9B,EAAIuN,WAAWo5V,EAAYC,MAC9CD,GAGF3mW,EAAIrC,YAAYmE,GAEhBA,EAAGhC,UAAUK,SAASqgW,IACtBz/F,EAASj/P,GAAMyoC,QAAS,GAAIx4B,OAAQ20V,EAAY,OAGhD3lG,EAASj/P,GAAMyoC,QAAS,GAAIx4B,OAAQ00V,EAAY,SAGxDD,EAASprW,QAAQ,SAAU0G,GACvB9B,EAAIrC,YAAYmE,KAGpB,IAAK,IADD6gW,EAAU/gW,EAAU,IAAM2+V,GAAUvjW,EAAQ2B,cAAc,IAAM2hW,KAC3DnoW,EAAIwqW,EAAQlqW,OAAS,EAAGN,GAAK,EAAGA,IAAK,CAC1C,IAAI2uW,EAAcnE,EAAQxqW,GAC1B,IAAI2uW,EAAYhnW,UAAUK,SAASqgW,KAAwC,aAAtBxkW,KAAKwmW,aAItD,MAHAzhG,EAAS+lG,GAAev8T,QAAS,WAO7Ci3T,EAAQnqW,UAAUmyJ,YAAc,WAC5B,IACIi9M,EACAV,EACAW,EACAK,EAJA/pW,EAAUhB,KAAKgB,QAKO,aAAtBhB,KAAKwmW,eACLuE,EAAU/pW,EAAQ2B,cAAc,IAAM6hW,GAAgB,SAAWS,GAAY,MAC7EyF,EAAsC,SAAzB1pW,EAAQ0D,MAAMqR,QAA8C,KAAzB/U,EAAQ0D,MAAMqR,OAAiB,KAAOg1V,EAAQr3S,cAElGq2S,EAAU/oW,EAAQ2B,cAAc,IAAM4hW,GAAW,SAAWC,GAAgB,WAAaS,GAAY,MACrGwF,EAAsC,SAAzBzpW,EAAQ0D,MAAMqR,QAA8C,KAAzB/U,EAAQ0D,MAAMqR,OAAiB,KAAOg0V,EAAQr2S,aAC9F,IAAI1vD,EAEJ,GAAIhD,EAAQ2B,cAAc,IAAM3B,EAAQsC,GAAK,UAAY0hW,IACrDhhW,EAAMhD,EAAQ2B,cAAc,IAAM3B,EAAQsC,GAAK,UAAY0hW,QAE1D,CACD,IAAIgG,EAAYhrW,KAAKmB,cAAc,OAC/BmC,GAAItC,EAAQsC,GAAK,SAAUD,UAAW2hW,GAAiB,wBAEvD52M,EAAWpuJ,KAAKmB,cAAc,OAASmC,GAAItC,EAAQsC,GAAK,SAAUD,UAAW2hW,KACjFhhW,EAA4B,aAAtBhE,KAAKwmW,aAA8BwE,EAAY58M,EAEzDpuJ,KAAKsqW,iBAAiBtqW,QAAgBgE,EAAKymW,EAAWC,GACtD1qW,KAAKirW,UAAUjqW,EAASgD,IAE5BwhW,EAAQnqW,UAAU4vW,UAAY,SAAUjqW,EAASgD,GAC7C,GAAKhE,KAAK8lW,OAyBL,CACD,IAAI13M,EAAWpuJ,KAAK8lW,OAAO9kW,QAC3B+jQ,EAAS32G,GAAYxhG,UAAW,GAAIre,QAAS,UAC7Cw2N,EAAS32G,GAAYxhG,UAAWwhG,EAAS16F,aAAe,KAAMnlB,QAAS,SA5BzD,CACdvtC,EAAQW,YAAYqC,GACpB+gQ,EAAS/kQ,KAAKgB,SAAW6Y,SAAU,KACnC,IAAIqxV,EAAYrvW,OAAOsR,iBAAiBnM,GACpCq/D,EAAQ,IAAI8tD,GAAM,MAClBY,SAAU/uH,KAAKgB,QACfiL,QAAS0P,WAAWuvV,EAAUn1V,QAC9B7C,UAAWlT,KAAKkT,UAChBxR,KAAM1B,KAAKylW,UAAUnqW,KAAK0E,MAC1BiC,MAAOjC,KAAK8yJ,WAAWx3J,KAAK0E,MAC5B0wH,WAAar6G,EAAGrW,KAAKimW,gBAAkB,OAAS,QAChD/xV,SAAUlU,KAAKkT,WAAckD,EAAG,OAAQC,EAAG,QAAYD,EAAG,QAASC,EAAG,SAEhD,aAAtBrW,KAAKwmW,eACLnmS,EAAMrqD,MAAQ2F,WAAWuvV,EAAUl1V,OAAqD,EAA1C2F,WAAWuvV,EAAUC,kBACnE9qS,EAAMx0D,QAAU,GAEpBw0D,EAAM/xB,SAAStqC,GACfuB,GAAanB,IAAI5D,SAAU,SAAUR,KAAK0mW,SAASprW,KAAK0E,OACxDuF,GAAanB,IAAI5D,SAAU,SAAUR,KAAK0mW,SAASprW,KAAK0E,OACxDqgE,EAAMr/D,QAAQ0D,MAAMkoD,UAAYyT,EAAMr/D,QAAQ0yD,aAAe,KAC7D2M,EAAMyiB,OACN9iF,KAAK8lW,OAASzlS,EACdrgE,KAAKgB,QAAQwC,aAAa,gBAAiB,UAQnDgiW,EAAQnqW,UAAU+vW,iBAAmB,SAAUC,GACjB,aAAtBrrW,KAAKwmW,eACL6E,EAASrrW,KAAKoE,IAAIpE,KAAKgB,QAASukW,IAAuBvlW,KAAKuE,OAAOvE,KAAKgB,QAASukW,MAGzFC,EAAQnqW,UAAUoqW,UAAY,SAAU5kW,GACpC,IAAIilW,EAAS9lW,KAAK8lW,OACdoF,EAAYrvW,OAAOsR,iBAAiBnN,KAAKgB,SAC7C8kW,EAAO75V,QAAU0P,WAAWuvV,EAAUn1V,QACtC+vV,EAAO5hT,WACP,IAAIkqG,EAAWpuJ,KAAK8lW,OAAO9kW,QACvBsqW,EAAUtrW,KAAK8lW,OAAO9kW,QAAQqT,cAC9Bo0V,EAAW6C,EAAQ3oW,cAAc,IAAMmiW,IAC3C//F,EAAS+gG,EAAO9kW,SAAW+U,OAAQ,OAAQ62C,UAAW,KACtDk5S,EAAO9kW,QAAQ0D,MAAMkoD,UAAYk5S,EAAO9kW,QAAQ0yD,aAAe,KACrC,aAAtB1zD,KAAKwmW,eACLV,EAAO9kW,QAAQ0D,MAAMioD,UAAY,IAErC,IAAI4+S,EAAcn9M,EAASh6I,UAAYg6I,EAAS16F,aAAep/C,GAAkBg3V,GAAS5+V,IACtF8+V,EAAU/C,EAAStjW,kBACvBsjW,EAAS3kW,UAAUM,IAAI8gW,IACvBphW,EAAU0nW,GAAU/G,KAAiBC,KACrC1kW,KAAKorW,kBAAiB,GACtB,IAAIK,EAAYv2R,EAAMr5E,OAAO4zH,SAAW,EAAI5zH,OAAO4zH,QACnD,GAAM5zH,OAAOyd,YAAcmyV,EAAaF,GAAiBvrW,KAAKgB,QAAQoT,UAAYg6I,EAAS16F,aAAe,CACtG,IAAIg4S,EAAkBt9M,EAAS16F,cAAiB63S,EAAc1vW,OAAOyd,YAAcmyV,EAAa,GAChG3F,EAAO/vV,OAAS21V,EAAiB,KACjC,IAAK,IAAIvvW,EAAI,EAAGA,GAAKiyJ,EAASznF,kBAAmBxqE,IAAK,CAClD,IAAI6H,EAAMoqJ,EAASh0I,SAASje,GAC5B,GAAI6H,EAAIoQ,UAAYpQ,EAAI0vD,aAAeg4S,EAAgB,CACnDA,EAAiB1nW,EAAIoQ,UACrB,OAGR2wP,EAAS+gG,EAAO9kW,SAAW4rD,UAAW8+S,EAAiB,SAG/DlG,EAAQnqW,UAAUy3J,WAAa,SAAUjyJ,GACrC,IACI4nW,EADUzoW,KAAKgB,QACI2B,cAAc,IAAMmiW,IACvC0G,EAAU/C,EAAStjW,kBACvBsjW,EAAS3kW,UAAUS,OAAO2gW,IAC1BphW,EAAU0nW,GAAU9G,KAAiBD,KACrCzkW,KAAKorW,kBAAiB,IAE1B5F,EAAQnqW,UAAU+uW,cAAgB,SAAUpmW,EAAK2nW,EAAOtC,EAAUuC,GAgB9D,IAAK,IAfDC,EAAc7rW,KAAKomW,cAAgB,EAEnC0F,EAASzC,EACT0C,EAAW,EACXt1J,EAAY,EACZu1J,EAAe,EACfC,EAAa,SAAUjoW,EAAKqkB,GAC5B,IAAI6jV,GAAO,EAMX,OALA7jV,EAAIjpB,QAAQ,SAAU+6J,GACdn2J,EAAIF,UAAUK,SAASg2J,KACvB+xM,GAAO,KAGRA,GAEF/vW,EAdCwvW,EAAMlvW,OAcG,EAAGN,GAAK,EAAGA,IAAK,CAC/B,IAAIgwW,EAAOxwV,WAAY9f,OAAOsR,iBAAiBw+V,EAAMxvW,IAAKy0G,aAC1Du7P,GAAQxwV,WAAY9f,OAAOsR,iBAAiBw+V,EAAMxvW,IAAKgoD,YACvD,IAAIioT,EAAcT,EAAMxvW,KAAO6D,KAAK2mW,QAAQ,GACxCyF,IACApsW,KAAKqsW,YAAcF,GAEvB,IAAIG,EAAWF,EAAeT,EAAMxvW,GAAGyI,YAAcunW,EAAQR,EAAMxvW,GAAGyI,YAMtE,GALIqnW,EAAWN,EAAMxvW,IAAKipW,MAAgByG,IACtCF,EAAMxvW,GAAG2H,UAAUM,IAAI6gW,IACvBlgG,EAAS4mG,EAAMxvW,IAAMoyC,QAAS,OAAQse,SAAUy/S,EAAW,OAC3DN,KAECL,EAAMxvW,GAAGgY,WAAaw3V,EAAMxvW,GAAGyI,YAAcunW,EAAQ9C,EAAU,CAChE,GAAIsC,EAAMxvW,GAAG2H,UAAUK,SAASqgW,KAC5B,GAA0B,aAAtBxkW,KAAKwmW,aAA6B,CAClC,GAAI/vJ,IAAcu1J,EAAc,CAExBC,EADAM,EAASZ,EAAMxvW,IACKqoW,GAAeW,OACnCwG,EAAMxvW,GAAG2H,UAAUM,IAAI6gW,IACvB+G,KAGRv1J,SAEC,GAA0B,UAAtBz2M,KAAKwmW,aAA0B,CACpC,GAAIuF,EAAW,GAAKt1J,IAAcu1J,EAAc,CAC5C,IAAIO,EACAN,EADAM,EAASZ,EAAMxvW,EAAIs6M,GAAas1J,EAAW,KACvBvH,GAAeW,MACnCpgG,EAASwnG,GAAUh+T,QAAS,SAGpCw9T,IACAt1J,EAAY,EACZu1J,EAAe,QAInBv1J,IAEAk1J,EAAMxvW,GAAG2H,UAAUK,SAASygW,KAAqBgH,EACjDvC,GAAasC,EAAMxvW,GAAGyI,cAEhBqnW,EAAWN,EAAMxvW,IAAKqoW,GAAeW,KAM3CkE,GAAasC,EAAMxvW,GAAGyI,eALtB+mW,EAAMxvW,GAAG2H,UAAUM,IAAI6gW,IACvBlgG,EAAS4mG,EAAMxvW,IAAMoyC,QAAS,OAAQse,SAAUy/S,EAAW,OAC3DN,MAOZ,GAAIJ,EAAK,CACL,IAAIY,EAAW5mW,EAAU,IAAM2+V,GAAW,SAAWU,GAAY,IAAKjlW,KAAKgB,SAC3EhB,KAAKoqW,cAAcpmW,EAAKwoW,EAAUV,GAAQ,KAGlDtG,EAAQnqW,UAAU8uW,gBAAkB,SAAUnpW,GAC1C,IAAIsC,EAAKtC,EAAQsC,GAAGkX,OAAO,QACvBnX,EAAY,KAAOrC,EAAQsC,GAAGkX,OAAO,kBACzCnX,EAAkC,aAAtBrD,KAAKwmW,aAA8BnjW,EAAY,kBAAwBA,EACnF,IAAIq/V,EAAM1iW,KAAKmB,cAAc,OAASmC,GAAIA,EAAID,UAAWA,IAC/B,SAAtBmI,GAAQqb,KAAKkQ,MAAyC,SAAtBvrB,GAAQqb,KAAKkQ,MAC7C2rU,EAAI5+V,UAAUM,IAAI,cAEtB,IAAIy+V,EAAU7iW,KAAKmB,cAAc,OAASkC,UAAWqhW,GAAgB,aACrEhC,EAAI/gW,YAAYkhW,GAChBH,EAAIl/V,aAAa,WAAY,KAC7BxC,EAAQW,YAAY+gW,IAExB8C,EAAQnqW,UAAUoxW,WAAa,SAAUd,EAAOzpM,EAAMwqM,EAAQ5mW,EAAI6mW,EAAKC,EAAOC,EAAKC,GAC/E,IAAIC,EAAcD,EACd9F,EAAShnW,KAAK8lW,OAAO9kW,QAErBgsW,EAAYpnW,EAAU,IAAMq/V,GAAY,SAAWL,GAAmB,IAAKoC,GAAQvqW,OACnFwvW,EAAa,SAAUjoW,EAAKqkB,GAC5B,OAAOrkB,EAAIF,UAAUK,SAASkkB,IAElC,GAAuC,IAAnCziB,EALQ,0DAKS+lW,GAAOlvW,OAAc,CACtC,IAAIwwW,EAAStB,EAAMvxV,SAAS8nJ,GAAQA,EAAOwqM,GAAU,GACjDQ,GAAgBh4R,EAAM+3R,IAAWhB,EAAWgB,EAAQ9H,IACxD,IAAMjwR,EAAM+3R,IAAWhB,EAAWgB,EAAQzI,MAAmB//V,EAAUwoW,IAAYC,EAAa,CAE5FD,EAAOvoW,MAAM6pC,QAAU,UACvB,IAAI4+T,EAAcF,EAAOroW,YAAyE,EAA1D+W,WAAW9f,OAAOsR,iBAAiB8/V,GAAQr8P,aAC/Ew8P,EAAUH,EAAO31J,uBAChBs1J,EAAQO,EAAeN,GAAOF,GAC/BhB,EAAMzmW,aAAaY,EAAI6lW,EAAMvxV,SAAU8nJ,EAAO6qM,GAAgB7qM,EAAOwqM,KAChEx3R,EAAMk4R,KACPA,EAAQ1oW,MAAM6pC,QAAU,KAIxB6+T,EAAQtpW,UAAUK,SAASqgW,MAC3B4I,EAAQ1oW,MAAM6pC,QAZL,QAejB0+T,EAAOvoW,MAAM6pC,QAAU,QAGvBo9T,EAAMzmW,aAAaY,EAAI6lW,EAAMvxV,SAAU8nJ,EAAO6qM,GAAgB7qM,EAAOwqM,UAIzEf,EAAMzmW,aAAaY,EAAI6lW,EAAMvxV,SAAU8nJ,EAAO6qM,EAAeC,KAGrExH,EAAQnqW,UAAU+rW,aAAe,SAAUh5M,EAAU97I,GACjD,IAAIvS,EAAQC,KACRgE,EAAMhE,KAAKgB,QACXuoW,EAASvlW,EAAIrB,cAAc,IAAMmiW,IACjCp9J,EAAW1jM,EAAIrB,cAAc,IAAM2hW,IACvC,IAAIpvR,EAAMq0R,GAAV,CAGA7hK,EAASh8L,gBAAgB,SACzB0iJ,EAAS1pJ,MAAM6pC,QAAU,QACzB,IAAIv4B,EAAQhS,EAAIY,aAAe2kW,EAAO3kW,YAAc8iM,EAAS9iM,aACzDyoW,EAAgB,KACjBhsW,MAAMC,KAAK8sJ,EAASh0I,UAAUhb,QAAQ,SAAU0G,GAC/CunW,GAAiBttW,EAAMstW,cAAcvnW,GACrCi/P,EAASj/P,GAAMoO,SAAY,OAE1B8B,EAAQuzV,EAAO3kW,eAAyD,IAAvB5E,KAAKomW,gBACvD9zV,GAAU,GAEdtS,KAAKstW,gBAAgBt3V,EAAOo4I,EAAU97I,GACtC87I,EAAS1pJ,MAAM6pC,QAAU,GACQ,IAA7B6/G,EAASh0I,SAAS3d,QAAgB8sW,GAAUvpW,KAAK8lW,SACjDzgW,EAAOkkW,GACPA,EAAS,KACTvpW,KAAK8lW,OAAOxzV,UACZjN,EAAOrF,KAAK8lW,OAAO9kW,SACnBhB,KAAK8lW,OAAS,KACd9hW,EAAIR,aAAa,gBAAiB,SAClCQ,EAAIF,UAAUS,OAAO,gBAG7BihW,EAAQnqW,UAAUkyW,eAAiB,SAAUt7V,EAAOy1L,GAChD,IAAI8lK,KAAensW,MAAMC,KAAKomM,EAASlmM,iBAAiB,IAAM2jW,KAC1DsI,KACAxuV,EAAQ,EACZ,OAAIuuV,EAAU/wW,OAAS,GACnB+wW,EAAUpuW,QAAQ,SAAU4E,GACxBypW,EAAUjpW,QAAQnD,MAAMC,KAAKomM,EAASttL,UAAU7b,QAAQyF,MAMhEypW,EAAUruW,QAAQ,SAAUipB,GACpBA,GAAOpW,GACPgN,MAGDA,GAPI,GASfumV,EAAQnqW,UAAU0tW,kBAAoB,SAAUh9J,EAAMi7J,GAClDA,EAAOtiW,MAAM6pC,QAAU,QACvB,IAAIq+T,EAAQ5sW,KAAKqtW,cAAcrG,EAAO7hW,mBACtC6hW,EAAO7hW,kBAAkBT,MAAM2lW,eAAe,YAC9C,IAAIqD,EAAY3hK,EAAKnnM,YAAcmnM,EAAKppM,cAAc,IAAMmiW,IAAalgW,YACrE+oW,EAAe5hK,EAAKppM,cAAc,IAAM2hW,IAAW1/V,YAEvD,OADAoiW,EAAOtiW,MAAM2lW,eAAe,WACxBqD,EAAad,EAAQe,GAK7BnI,EAAQnqW,UAAUgyW,cAAgB,SAAUvnW,GACxCA,EAAGpB,MAAMwP,SAAW,WACpB,IAAI05V,EAAU9nW,EAAGlB,YACbipW,EAAU/nW,EAAGnD,cAAc,oBAC/B,GAAImD,EAAGhC,UAAUK,SAAS,iBAAmB2B,EAAGhC,UAAUK,SAASwgW,IAAe,CAC9E,IAAI3vO,EAAMlvH,EAAGsU,SAAS,IACjB86D,EAAM24R,IAAY/nW,EAAGhC,UAAUK,SAASwgW,IACzCkJ,EAAQnpW,MAAM6pC,QAAU,QAElB2mC,EAAM24R,IAAY/nW,EAAGhC,UAAUK,SAzgCjC,oBA0gCJ0pW,EAAQnpW,MAAM6pC,QAAU,SAE5BymF,EAAItwH,MAAMmoD,SAAW,KACrB+gT,EAAUjyV,WAAW7V,EAAGpB,MAAMmoD,UAC9BmoE,EAAItwH,MAAMmoD,SAAW,GAChBqoB,EAAM24R,KACPA,EAAQnpW,MAAM6pC,QAAU,IAGhC,OAAOq/T,GAEXpI,EAAQnqW,UAAUiyW,gBAAkB,SAAUt3V,EAAOo4I,EAAU97I,GA8D3D,IAAK,IA3DD06V,EACA/6V,EAHA45V,EAAc7rW,KAAKomW,cAAgB,EACnC0H,EAAY9tW,KAAK2mW,QAIjBj/J,EAAW1nM,KAAKgB,QAAQ2B,cAAc,IAAM2hW,IAC5CyI,EAAc,EACd9tW,EAAU,SAAU6G,GACpB,GAAIA,EAAGhC,UAAUK,SAASihW,KAAeyG,IAAgBv5V,EACrD,MAAO,WAEX,IAAIs7V,EAAUz+P,EAAOk+P,cAAcvnW,GAKnC,GAJIA,IAAOqpG,EAAOw3P,QAAQ,KACtBiH,GAAWz+P,EAAOk9P,aAEtBvmW,EAAGpB,MAAMwP,SAAW,KAChB05V,EAAU53V,GAAS1D,GAyCnB,MAAO,QAnCP,GALAxM,EAAGpB,MAAMmoD,SAAW,GACf/mD,EAAGhC,UAAUK,SAAS0gW,KACvB/+V,EAAGhC,UAAUS,OAAO0gW,IAExBhzV,EAAQk9F,EAAOw3P,QAAQpoW,QAAQuH,GAC3BqpG,EAAO42P,UAAW,CAClB,IAAI9wV,EAAMk6F,EAAOtzC,MAAM5pD,GAAOw7C,MAC9Bx7C,EAAQk9F,EAAOy3P,YAAY3xV,EAAM,KAAKW,eAAerX,QAAQuH,GAC7DgoW,EAAY3+P,EAAOy3P,YAAY3xV,EAAM,KAAKW,eAC1C8xL,EAAWv4F,EAAOnuG,QAAQ2B,cAAc,IAAM2hW,GAAY,eAAsBrvV,EAAIW,eAExF,IAAIm4V,EAAiB,EACO,aAAxB5+P,EAAOq3P,cACPsH,EAAUzsW,MAAM,EAAG4Q,GAAO7S,QAAQ,SAAU0G,IACpCA,EAAGhC,UAAUK,SAASygW,KAAqB9+V,EAAGhC,UAAUK,SAASqgW,OAC7D1+V,EAAGhC,UAAUK,SAASqgW,MACtB1+V,EAAGpB,MAAM6pC,QAAU,GACnBv4B,GAASlQ,EAAGlB,aAEhBmpW,OAIZhB,EAAc59P,EAAOo+P,eAAet7V,EAAOy1L,GACvC5hM,EAAGhC,UAAUK,SAASygW,KACtBz1P,EAAOs9P,WAAW/kK,EAAUz1L,EAAO87V,EAAgBjoW,EAAIwM,EAASs7V,EAAS53V,EAAO+2V,GAChF/2V,GAASlQ,EAAGlB,aAEG,IAAVqN,GACLy1L,EAASxiM,aAAaY,EAAI4hM,EAAS3qL,YACnC/G,GAASlQ,EAAGlB,cAGZooW,EAAYpnW,EAAU,IAAMg/V,GAAkBz1P,EAAO22P,OAAO9kW,SAASvE,OACrEirM,EAASxiM,aAAaY,EAAI4hM,EAASttL,SAAUnI,EAAQ86V,EAAeC,IACpEh3V,GAASlQ,EAAGlB,aAEhBkB,EAAGpB,MAAMqR,OAAS,IAMtBo5F,EAASnvG,KACJ5B,EAAK,EAAGyE,KAAQxB,MAAMC,KAAK8sJ,EAASh0I,UAAWhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAG1E,GAAgB,UADFa,EADL4D,EAAGzE,IAGR,MAEQ4B,KAAKkpW,cAAclpW,KAAKgB,QAAShB,KAAKgB,QAAQ0M,uBAAuB42V,IAAW,MAC1EhyV,GAClBtS,KAAK6oW,sBAGbrD,EAAQnqW,UAAUuuW,kBAAoB,WAClC,IAAI5rV,EAAOhe,KAAKgB,QAAQ2B,cAAc,IAAM2hW,IAC5C,IAAIpvR,EAAMl3D,IAAUA,EAAKla,UAAUK,SAAS4gW,IAA5C,CAGA/kW,KAAKuE,OAAOyZ,EAAM+mV,IAClB,IAAIqE,KAAe/nW,MAAMC,KAAK0c,EAAKzM,YACnC63V,EAAU,GAAG19V,gBAAgB,SAC7B09V,EAAU,GAAG19V,gBAAgB,WAEjC85V,EAAQnqW,UAAU2yW,mBAAqB,WACnC,IAAIhwV,EAAOhe,KAAKgB,QAAQ2B,cAAc,IAAM2hW,IAC5CtkW,KAAKoE,IAAI4Z,EAAM+mV,IACf/kW,KAAK8oW,mBAETtD,EAAQnqW,UAAUytW,gBAAkB,WAChC,IAAI9qV,EAAOhe,KAAKgB,QAAQ2B,cAAc,IAAM2hW,IAC5C,IAAIpvR,EAAMl3D,IAAUA,EAAKla,UAAUK,SAAS4gW,IAA5C,CAGA,IACIqE,EADAX,EAAWzoW,KAAKgB,QAAQ2B,cAAc,IAAMmiW,IAQ5C7nU,GALAmsU,EADAppW,KAAKkmW,gBACU7kW,MAAMC,KAAK0c,EAAKrb,cAAc,sBAAsByX,aAGpD/Y,MAAMC,KAAK0c,EAAKzM,aAEZ,GAAG3M,YAAcwkW,EAAU,GAAGxkW,YACjDqpW,EAAUjuW,KAAKgB,QAAQ4D,YAC3B,GAAI6jW,EAAU,CACVwF,GAAWxF,EAAS7jW,YACpB,IAAIspW,EAASzF,EAAS7jW,YAAc,KACpCwkW,EAAU,GAAG19V,gBAAgB,SAC7B1L,KAAKkT,UAAYk2V,EAAU,GAAG1kW,MAAM8H,KAAO0hW,EAAS9E,EAAU,GAAG1kW,MAAM+H,MAAQyhW,EAEnF,KAAID,GAAWhxU,GAAf,CAGA,IAAIjgC,GAAWixW,EAAUhxU,EAAWmsU,EAAU,GAAGxkW,aAAe,EAChEwkW,EAAU,GAAG19V,gBAAgB,SAC7B,IAAIygW,EAAQ/C,EAAU,GAAGxkW,YAAc5H,EAAS,KAChDgD,KAAKkT,UAAYk2V,EAAU,GAAG1kW,MAAMksG,YAAcu7P,EAAO/C,EAAU,GAAG1kW,MAAMy/C,WAAagoT,KAE7F3G,EAAQnqW,UAAU8yW,cAAgB,SAAUnwV,EAAMowV,EAASn5V,GACvD,IAAIlV,EAAQC,KACZ,IAAIge,EAAKqwV,mBAAuC,SAAlBrwV,EAAKnE,SAAnC,CAGA,IAAIy0V,KAIJ,GAHAA,EAAS9pW,KAAKxE,KAAKmB,cAAc,OAASkC,UAxoC/B,oBAyoCXirW,EAAS9pW,KAAKxE,KAAKmB,cAAc,OAASkC,UAxoC7B,sBAyoCbirW,EAAS9pW,KAAKxE,KAAKmB,cAAc,OAASkC,UA3oC9B,qBA4oCA,IAAR4R,GAA4B,SAAf+I,EAAKyvC,MAClB6gT,EAASlvW,QAAQ,SAAU4E,GACvBoqW,EAAQzsW,YAAYqC,KAExBhE,KAAK+lW,WAAY,EACjB/lW,KAAKoE,IAAIgqW,EAASrJ,SAEjB,GAAmB,SAAf/mV,EAAKyvC,MAAkB,CAC5B,IAAI8gT,EAAWH,EAAQ78V,WACnBi9V,EAAcF,EAAS,MACxBjtW,MAAMC,KAAKitW,GAAUnvW,QAAQ,SAAU0G,GACtC/F,EAAM6mW,WAAWC,MAAMriW,KAAKsB,GAC5B0oW,EAAY7sW,YAAYmE,KAE5BsoW,EAAQzsW,YAAY6sW,GACpBJ,EAAQzsW,YAAY2sW,EAAS,IAC7BF,EAAQzsW,YAAY2sW,EAAS,IAC7BtuW,KAAK+lW,WAAY,EACjB/lW,KAAKoE,IAAIgqW,EAASrJ,OAG1BS,EAAQnqW,UAAUozW,aAAe,WAC7B,IAAI1uW,EAAQC,KACZA,KAAK4lW,QAAU5lW,KAAK2lW,QAAQ/jW,WAAU,GACtC5B,KAAKoE,IAAIpE,KAAK2lW,QAASrB,IACvBtkW,KAAK2mW,cACatlW,MAAMC,KAAKtB,KAAK2lW,QAAQvrV,UACjChb,QAAQ,SAAU4E,GACH,QAAhBA,EAAIhB,UACJjD,EAAM4mW,QAAQniW,KAAKR,GACnBA,EAAIR,aAAa,gBAAiB,SAClCzD,EAAMqE,IAAIJ,EAAKugW,QAI3BiB,EAAQnqW,UAAU+lF,YAAc,WAC5B,IACIstR,EACAtF,EACAuF,EAHA3qW,EAAMhE,KAAKgB,QAIX66D,EAAQ77D,KAAK67D,MAIjB,GAHI73D,GAAOA,EAAIoW,SAAS3d,OAAS,IAC7BiyW,EAAa1qW,EAAIrB,cAAc,IAAM2hW,KAErB,MAAhBtkW,KAAK2lW,QACL3lW,KAAKyuW,oBAEJ,GAAIzqW,GAAO63D,EAAMp/D,OAAS,EAAG,CACzBiyW,IACDA,EAAa1uW,KAAKmB,cAAc,OAASkC,UAAWihW,MAExD,IAAK,IAAInoW,EAAI,EAAGA,EAAI0/D,EAAMp/D,OAAQN,IAC9BitW,EAAYppW,KAAK4uW,mBAAmB/yS,EAAM1/D,GAAIA,IACL,IAArC6D,KAAK2mW,QAAQpoW,QAAQ6qW,IACrBppW,KAAK2mW,QAAQniW,KAAK4kW,GAEjBppW,KAAK+lW,WACN/lW,KAAKmuW,cAActyS,EAAM1/D,GAAIuyW,EAAYvyW,IAE7CwyW,EAAWD,EAAW/rW,cAAc,cAAgBk5D,EAAM1/D,GAAGsxD,MAAM73C,iBAEzDimD,EAAM1/D,GAAGkyW,mBAA2C,SAAtBxyS,EAAM1/D,GAAG0d,UACzC7Z,KAAK4mW,YAAY/qS,EAAM1/D,GAAGsxD,MAAQ,KAAK73C,eAAepR,KAAK4kW,GAE/DuF,EAAShtW,YAAYynW,IAGrBsF,EAAW/sW,YAAYynW,GAG/BplW,EAAIrC,YAAY+sW,KAGxBlJ,EAAQnqW,UAAUwzW,QAAU,SAAUv6M,EAAMtzJ,GAGxC,IAAK,IADDm4G,EADA97G,EAAMiB,OAAOhB,KAAKg3J,GAEbn4J,EAAI,EAAGA,EAAIkB,EAAIZ,OAAQN,IAEjB,WADXg9G,EAAS97G,EAAIlB,IACQ6D,KAAKoE,IAAIpD,EAASszJ,EAAKn7C,IAAWn4G,EAAQwC,aAAa21G,EAAQm7C,EAAKn7C,KAUjGqsP,EAAQnqW,UAAU+7E,YAAc,SAAUvb,EAAOsjE,GAC7C,IAAIv7H,EAAWi4D,EACXh6D,EAAM+B,EAASnH,OACfy4E,EAAMiqD,KACNA,GAAW,GAEf,IAAIl/F,EAAS,SAAUk/F,EAAUn7H,GACzBm7H,GACAn7H,EAAIF,UAAUS,OAAOs9V,IACrB79V,EAAIR,aAAa,gBAAiB,WAGlCQ,EAAIF,UAAUM,IAAIy9V,IAClB79V,EAAIR,aAAa,gBAAiB,UAG1C,GAAI3B,GAAOA,EAAM,EAAG,CAChB,IAAK,IAAIzD,EAAK,EAAGyE,KAAQxB,MAAMC,KAAKsC,GAAWxF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAEjE6hC,EAAOk/F,EADGt8H,EAAGzE,IAGjB+gI,EAAW96H,EAAYT,EAAUi+V,IAAel+V,EAASC,EAAUi+V,QAElE,CAGD5hU,EAAOk/F,EADAt9H,GAAe,IAARA,EAAa+B,EAAS,GAAKi4D,KAUjD2pS,EAAQnqW,UAAUyzW,SAAW,SAAUjzS,EAAO5pD,GAC1C,IAAIg3V,EACA8F,EAAW/uW,KAAKgB,QAAQ2B,cAAc,IAAM2hW,IAChD,GAAIpvR,EAAM65R,GACN/uW,KAAKgvW,cAAcnzS,OADvB,CAIA,IAAI6rI,EACAunK,EAAU,OACV/5R,EAAMjjE,KACNA,EAAQ,GAEZ4pD,EAAMz8D,QAAQ,SAAUyB,GACfq0E,EAAMr0E,EAAE4sD,QAAsB,SAAZ5sD,EAAE4sD,OAAgC,SAAZwhT,IACzCA,EAAUpuW,EAAE4sD,SAGpB,IAAK,IAAIrvD,EAAK,EAAG8wW,EAAUrzS,EAAOz9D,EAAK8wW,EAAQzyW,OAAQ2B,IAAM,CACzD,IAAI4f,EAAOkxV,EAAQ9wW,GAOnB,GANI82E,EAAMl3D,EAAKtX,QACXsX,EAAKtX,KAAO,UAEhBuiW,EAAarjW,EAAU,IAAM2+V,GAAUvkW,KAAKgB,SAC5Cgd,EAAKyvC,MAAQwhT,EACbvnK,EAAW1nM,KAAK4uW,mBAAmB5wV,EAAM/L,GACrCjS,KAAK2mW,QAAQlqW,QAAUwV,GAASg3V,EAAWxsW,QAAU,EAAG,CACpDy4E,EAAMl1E,KAAKkmW,eACXlmW,KAAKmnW,cAET,IAAIgI,EAA6B,MAAlBnxV,EAAKyvC,MAAM,GAAa,EAAsB,MAAlBzvC,EAAKyvC,MAAM,GAAa,EAAI,EACnEzpD,OAAM,EACLhE,KAAK+lW,WAAyB,SAAZkJ,EAQdjvW,KAAK+lW,YACV/hW,EAAM6B,EAAQojW,EAAW,GAAI,IAAM3E,IAAWlqV,SAAS+0V,IACnDjqW,aAAawiM,EAAU1jM,EAAIoW,SAASnI,IACxCjS,KAAK4mW,YAAY5oV,EAAKyvC,MAAQ,KAAK73C,eAAe6S,OAAOxW,EAAO,EAAGy1L,GACnE1nM,KAAKguW,sBAEsB,IAAtB/E,EAAWxsW,QAChBwsW,EAAarjW,EAAU,IAAM0+V,GAAWtkW,KAAKgB,UAClC,GAAGW,YAAY+lM,GAG1BuhK,EAAW,GAAGxoW,WAAWyE,aAAawiM,EAAUuhK,EAAWh3V,KAlB3DjS,KAAKmuW,cAAcnwV,EAAM+wV,EAAU,GACnC/uW,KAAK+lW,WAAY,GACjB/hW,EAAM6B,EAAQojW,EAAW,GAAI,IAAM3E,IAAWlqV,SAAS+0V,IACnDxtW,YAAY+lM,GAChB1nM,KAAK4mW,YAAY5oV,EAAKyvC,MAAQ,KAAK73C,eAAepR,KAAKkjM,GACvD1nM,KAAKguW,sBAeThuW,KAAK67D,MAAMpzC,OAAOxW,EAAO,EAAG+L,GAC5Bhe,KAAK2mW,QAAQl+U,OAAOxW,EAAO,EAAGy1L,GAC9Bz1L,IACAjS,KAAK2pW,UAAYoF,EAASnqW,aAGlCmqW,EAASrqW,MAAMsR,MAAQ,GACvBhW,KAAK6oW,uBAQTrD,EAAQnqW,UAAU+zW,YAAc,SAAUnvW,GACtC,IACIgS,EADArO,EAAW3D,EAEXgpW,KAAgB5nW,MAAMC,KAAKsE,EAAU,IAAM2+V,GAAUvkW,KAAKgB,UAC9D,GAA0B,mBACtBiR,EAAQmiB,SAASn0B,EAAKiN,WAAY,IAClClN,KAAKqvW,kBAAkBp9V,EAAOg3V,QAG9B,GAAIrlW,GAAYA,EAASnH,OAAS,EAC9B,IAAK,IAAI2B,EAAK,EAAGyE,KAAQxB,MAAMC,KAAKsC,GAAWxF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACjE,IAAI4F,EAAMnB,EAAGzE,GACb6T,EAAQjS,KAAK2mW,QAAQpoW,QAAQyF,GAC7BhE,KAAKqvW,kBAAkBp9V,EAAOg3V,GAC9BA,EAAarjW,EAAU,IAAM2+V,GAAUvkW,KAAKgB,aAG/C,CACGgD,EAAOJ,GAAYA,EAASnH,QAA8B,IAApBmH,EAASnH,OAAgBmH,EAAS,GAAK3D,EACjFgS,EAAQg3V,EAAW1qW,QAAQyF,GAC3BhE,KAAKqvW,kBAAkBp9V,EAAOg3V,GAGtCjpW,KAAKk+U,UAETsnB,EAAQnqW,UAAUg0W,kBAAoB,SAAUp9V,EAAOg3V,GACnD,GAAIjpW,KAAK2mW,QAAQ10V,IAAUg3V,EAAWh3V,GAAQ,CAC1C,IAAIq9V,EAAStvW,KAAK2mW,QAAQpoW,QAAQ0qW,EAAWh3V,IAC7C,GAAIjS,KAAK+lW,UAAW,CAChB,IAAIwJ,OAAW,EACfA,EAAWvvW,KAAK4mW,YAAY5mW,KAAK67D,MAAMyzS,GAAQ7hT,MAAQ,KAAK73C,eAAerX,QAAQyB,KAAK2mW,QAAQ2I,IAChGtvW,KAAK4mW,YAAY5mW,KAAK67D,MAAMyzS,GAAQ7hT,MAAQ,KAAK73C,eAAe6S,OAAO8mV,EAAU,GAErFlqW,EAAO4jW,EAAWh3V,IAClBjS,KAAK67D,MAAMpzC,OAAO6mV,EAAQ,GAC1BtvW,KAAK2mW,QAAQl+U,OAAO6mV,EAAQ,KAGpC9J,EAAQnqW,UAAUm0W,eAAiB,SAAUC,EAAc/nK,EAAU1pL,EAAM/L,GACvE,IAEIy9V,EAFAC,EAAW3xV,EAAKtX,KAChB6rG,EAASk9P,EAKb,GAH8B,qBAC1BC,EAA2C,mBAArBn9P,EAAe,UAEX,oBAAam9P,GAmCtC,GAAiB,UAAbC,EAAsB,CACvB3rW,EAAMhE,KAAKmB,cAAc,SAC7B6c,EAAK1a,GAAMU,EAAIV,GAAK0a,EAAK1a,GAAOU,EAAIV,GAAK9D,EAAY,WACrDkoM,EAAS/lM,YAAYqC,GACrBuuG,EAAOjkE,SAAStqC,QAvCoC,CACpD,IAAIw2B,OAAa,EACbnS,EAAMonV,EACVpnV,EAAiC,mBAAYonV,EAAav/V,OAASu/V,EACnE,IAEI,GAA8B,oBAAav6R,EAAMu6R,EAAazsW,UAGzD,GAAIxC,SAASgB,iBAAiB6mB,GAAK5rB,OAAQ,CAC5C,IAAIuH,EACA4rW,GADA5rW,EAAMxD,SAASmC,cAAc0lB,IACfvmB,UAAUoO,OAC5Bw3L,EAAS/lM,YAAYqC,GACrBA,EAAIU,MAAM6pC,QAAU,GACf2mC,EAAM06R,IACP5vW,KAAK0lW,OAAOlhW,KAAK6jB,SARrBq/K,EAAS/lM,YAAY8tW,GAY7B,MAAO5uW,GACH25B,EAAaukC,GAAiB12C,GAElC,IAAIg4N,OAAY,EACXnrK,EAAM16C,KACP6lN,EAAY7lN,KAAex6B,KAAM,cAEhCk1E,EAAMmrK,IAAcA,EAAU5jP,OAAS,MACrC4E,MAAMC,KAAK++O,GAAWjhP,QAAQ,SAAU4E,GAClCkxE,EAAMlxE,EAAIhB,WACXgB,EAAIU,MAAM6pC,QAAU,IAExBm5J,EAAS/lM,YAAYqC,KAUjChE,KAAKoE,IAAIsjM,EAz6CE,cA06CX1nM,KAAK2mW,QAAQniW,KAAKkjM,IAEtB89J,EAAQnqW,UAAUw0W,gBAAkB,SAAU7xV,EAAM0pL,GAChD,IAAIooK,EAAM9vW,KAAKmB,cAAc,UAAYkC,UAv6C/B,eAw6CVysW,EAAItsW,aAAa,OAAQ,UACzB,IACI2xE,EACA46R,EAFAC,EAAUhyV,EAAK8Q,KAGnB9Q,EAAK1a,GAAMwsW,EAAIxsW,GAAK0a,EAAK1a,GAAMwsW,EAAIxsW,GAAK9D,EAAY,aACpD,IAAIywW,EAASjwW,KAAKmB,cAAc,OAASkC,UAAW,oBAChD2sW,GACAC,EAAOjuW,UAAYguW,EACnBF,EAAInuW,YAAYsuW,GAChBH,EAAIhsW,UAAUM,IAAI,eAGlBpE,KAAKoE,IAAIsjM,EAAU,iBAEnB1pL,EAAKkyV,YAAclyV,EAAKmyV,cACnBnyV,EAAKkyV,YAAclyV,EAAKmyV,YAAenyV,EAAKkyV,YAC7C/6R,EAAUn3D,EAAKkyV,WAAa,WAC5BH,EAAU,SAGV56R,EAAUn3D,EAAKmyV,WAAa,WAC5BJ,EAAU,UAGlB,IAAIz9O,EAAS,IAAI3S,IAASxqC,QAASA,EAAS8qC,aAAc8vP,IAM1D,OALAz9O,EAAOnxH,cAAgBnB,KAAKmB,cAC5BmxH,EAAOhkF,SAASwhU,GACZ9xV,EAAKhI,OACL+uP,EAAS+qG,GAAO95V,MAASzT,EAAWyb,EAAKhI,SAEtC85V,GAEXtK,EAAQnqW,UAAUuzW,mBAAqB,SAAU5wV,EAAM/L,GACnD,IAAIy1L,EACAooK,EASJ,IARApoK,EAAW1nM,KAAKmB,cAAc,OAASkC,UAAWkhW,MACzC/gW,aAAa,gBAAiB,SAClCxD,KAAK2mW,UACN3mW,KAAK2mW,YAEL3oV,EAAKu5D,gBACLv3E,KAAK6uW,QAAQ7wV,EAAKu5D,eAAgBmwH,GAElC1pL,EAAKoyV,YAAa,CAClB,IAAIC,EAAUrwW,KAAKmB,cAAc,OAASa,UAAWgc,EAAKoyV,cAC1D1oK,EAASlkM,aAAa,QAAS6sW,EAAQr0V,aAK3C,GAHIgC,EAAK/K,WACLy0L,EAASrkM,UAAYqkM,EAASrkM,UAAY,IAAM2a,EAAK/K,UAErD+K,EAAK/O,SACLjP,KAAKwvW,eAAexxV,EAAK/O,SAAUy4L,EAAU1pL,EAAM/L,QAGnD,OAAQ+L,EAAKtX,MACT,IAAK,UACDopW,EAAM9vW,KAAK6vW,gBAAgB7xV,EAAM0pL,IAC7BlkM,aAAa,WAAY,MAC7BkkM,EAAS/lM,YAAYmuW,GACrBpoK,EAAShrM,iBAAiB,QAASsD,KAAKswW,UAAUh1W,KAAK0E,OACvD,MACJ,IAAK,YACDA,KAAKoE,IAAIsjM,EAAU88J,IAI/B,GAAIxmV,EAAKuyV,WAAY,CACjB,IAAIC,EAAOxyV,EAAKuyV,WACH,YAATC,GACAxwW,KAAKoE,IAAIsjM,EAj/CL,kBAk/CJ1nM,KAAKoE,IAAIsjM,EAAU,iBAEL,aAAT8oK,GACLxwW,KAAKoE,IAAIsjM,EAAUi9J,IAG3B,GAAI3mV,EAAKnE,SAAU,CACf,IAAIA,EAAWmE,EAAKnE,SACH,SAAbA,EACA7Z,KAAKoE,IAAIsjM,EAAUk9J,IAED,SAAb/qV,IACA6tL,EAAS5jM,UAAUK,SAASqgW,KAC7BxkW,KAAKoE,IAAIsjM,EAAUm9J,KAQ/B,MAJsB,SAAlB7mV,EAAKnE,UAAuBmE,EAAKqwV,oBAAsB3mK,EAAS5jM,UAAUK,SAASqgW,MACnFxkW,KAAKoE,IAAIsjM,EAAU09J,IACnBplW,KAAKomW,iBAEF1+J,GAEX89J,EAAQnqW,UAAUi1W,UAAY,SAAUzvW,GACpCb,KAAKunW,gBAAgB1mW,EAAEmvG,gBAE3Bw1P,EAAQnqW,UAAUksW,gBAAkB,SAAUvjW,GAC1ChE,KAAKmoW,gBAAgBnkW,EAAImB,mBACzBnF,KAAKkoW,UAAUhmW,SAEnBsjW,EAAQnqW,UAAU8sW,gBAAkB,SAAUr/J,GACrC5zH,EAAMl1E,KAAKkoW,YACZloW,KAAKkoW,UAAU1kW,aAAa,WAAY,MAE5CxD,KAAKkoW,UAAYp/J,EACb5zH,EAAMl1E,KAAK2lW,WAAa78J,EAAOz0L,cAAcvQ,UAAUK,SAvhDhD,cAwhDP2kM,EAAOp9L,gBAAgB,YAGvB1L,KAAKkoW,UAAU1kW,aAAa,WAAY,MAGhDgiW,EAAQnqW,UAAU+yG,eAAiB,WAC/B,OAAOpuG,KAAK4uG,kBAOhB42P,EAAQnqW,UAAU0kC,cAAgB,WAC9B,MAAO,WAEXylU,EAAQnqW,UAAU2zW,cAAgB,SAAUhhR,GACxChuF,KAAK67D,MAAQ77D,KAAKmmW,aAClBnmW,KAAKmnW,cACLnnW,KAAKinW,eACLjnW,KAAK67D,MAAQmyB,EACbhuF,KAAKmmW,aAAenmW,KAAK67D,MACzB77D,KAAKohF,cACLphF,KAAK6oW,sBAETrD,EAAQnqW,UAAU6iV,OAAS,WACvB,IAAIl6U,EAAMhE,KAAKgB,QACfhB,KAAK6qW,UAAW,EACZ7qW,KAAK+lW,WACL/lW,KAAK8oW,kBAEL9oW,KAAK8lW,QAAgC,UAAtB9lW,KAAKwmW,cACpBxmW,KAAK8lW,OAAOhjR,OAEhB,IAAIomR,EAAgBlpW,KAAKkpW,cAAcllW,EAAKA,EAAI0J,uBAAuB42V,IAAW,IAIlF,GAHK4E,GACDlpW,KAAKymW,kBAELyC,IAAiBlpW,KAAKkmW,cAAiBlmW,KAAK2pW,YAAc3lW,EAAIY,YAAlE,CAMA,IAHI5E,KAAK2pW,UAAY3lW,EAAIY,aAAeskW,IACpClpW,KAAK6oW,qBAEL7oW,KAAK8lW,OAAQ,CACb,GAA0B,aAAtB9lW,KAAKwmW,aAA6B,CAClC,IAAI0E,EAAYrvW,OAAOsR,iBAAiBnN,KAAKgB,SAC7ChB,KAAK8lW,OAAO9vV,MAAQ2F,WAAWuvV,EAAUl1V,OAAqD,EAA1C2F,WAAWuvV,EAAUC,kBAEzEnrW,KAAK+lW,WACL/lW,KAAK4pW,oBAET5pW,KAAKonW,aAAapnW,KAAK8lW,OAAO9kW,SAAS,GACnChB,KAAK+lW,WACL/lW,KAAKguW,qBAGbhuW,KAAK2pW,UAAY3lW,EAAIY,YACrB5E,KAAK6qW,UAAW,EAChB7qW,KAAK6tJ,cAST23M,EAAQnqW,UAAU0tF,kBAAoB,SAAUiF,EAASC,GAErD,IAAK,IADDwiR,EAAOzwW,KAAKgB,QACP5C,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,GAAU5vF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACD,GAAM4vF,EAAQnyB,iBAAiBr9D,OAASyvF,EAAQpyB,iBAAiBr9D,MA8B7DwB,KAAKgvW,cAAchhR,EAAQnyB,YA5B3B,IAAK,IADD60S,EAAcpyW,OAAOhB,KAAK0wF,EAAQnyB,OAC7B1/D,EAAI,EAAGA,EAAIu0W,EAAYj0W,OAAQN,IAAK,CACzC,IAAI8V,EAAQmiB,SAAS91B,OAAOhB,KAAK0wF,EAAQnyB,OAAO1/D,GAAI,IAChDk7D,EAAW/4D,OAAOhB,KAAK0wF,EAAQnyB,MAAM5pD,IAAQ,GAE7C0+V,GADcryW,OAAO2vF,EAAQpyB,MAAM5pD,IAAQolD,GAC7B/4D,OAAO0vF,EAAQnyB,MAAM5pD,IAAQolD,IAC/C,GAAIr3D,KAAK+lW,WAA0B,UAAb1uS,EAAsB,CACxCr3D,KAAK8qD,UACL,MAEJ,IAAI8lT,EAA6B,sBAAbv5S,IAAqCs5S,EACrDE,EAA4B,aAAbx5S,GAAkD,IAAvBr3D,KAAKomW,eAC/C,GAAoBpmW,KAAK67D,MAAM5pD,GAAwB,mBAAK4+V,MAC1D7wW,KAAKomW,cAEPlxR,EAAMl1E,KAAKkmW,eACXlmW,KAAKmnW,cAGT9hW,KADiBhE,MAAMC,KAAKsE,EAAU,IAAM0+V,GAAY,KAAOC,GAAUkM,IAC1Dx+V,IACfjS,KAAK2mW,QAAQl+U,OAAOxW,EAAO,GAC3BjS,KAAK8uW,UAAU9uW,KAAK67D,MAAM5pD,IAASA,GACnCjS,KAAK67D,MAAMpzC,OAAOxW,EAAO,GACrBjS,KAAK67D,MAAM5pD,GAAOhD,UAClBjP,KAAK2mW,QAAQl+U,OAAOzoB,KAAK67D,MAAMp/D,OAAQ,GAOnD,MACJ,IAAK,QACD,IAAIowW,EAAM4D,EAAK7rW,YACfmgQ,EAAS0rG,GAAQz6V,MAASzT,EAAWyrF,EAAQh4E,SAC7ChW,KAAK6oW,qBACD7oW,KAAK8lW,QAAU+G,EAAM4D,EAAK7rW,aAC1B5E,KAAKonW,aAAapnW,KAAK8lW,OAAO9kW,SAAS,GAE3C,MACJ,IAAK,SACD+jQ,EAAS/kQ,KAAKgB,SAAW+U,OAAUxT,EAAWyrF,EAAQj4E,UACtD,MACJ,IAAK,eACD/V,KAAKmnW,cACLnnW,KAAK6oW,qBACD7oW,KAAKkT,WACLlT,KAAKoE,IAAIqsW,EAvpDnB,SAypDMzwW,KAAKypW,kBACL,MACJ,IAAK,YACDz7Q,EAAQ96E,UAAYlT,KAAKoE,IAAIqsW,EA5pDnC,SA4pDoDzwW,KAAKuE,OAAOksW,EA5pDhE,SA6pDWv7R,EAAMl1E,KAAKkmW,gBACZl4Q,EAAQ96E,UAAYlT,KAAKoE,IAAIpE,KAAKkmW,aAAallW,QA9pDzD,SA8pD6EhB,KAAKuE,OAAOvE,KAAKkmW,aAAallW,QA9pD3G,UAgqDWk0E,EAAMl1E,KAAK8lW,UACZ93Q,EAAQ96E,UAAYlT,KAAKoE,IAAIpE,KAAK8lW,OAAO9kW,QAjqDnD,SAiqDuEhB,KAAKuE,OAAOvE,KAAK8lW,OAAO9kW,QAjqD/F,UAmqDUhB,KAAK+lW,WACL/lW,KAAK8oW,qBAYzBtD,EAAQnqW,UAAU25M,SAAW,SAAU/iM,EAAOjV,GAC1C,GAAIgD,KAAK2mW,QAAQ10V,GAAQ,CACrB,IAAIg3V,KAAgB5nW,MAAMC,KAAKsE,EAAU,IAAM2+V,GAAUvkW,KAAKgB,WAChD,IAAVhE,EACAisW,EAAWh3V,GAAOnO,UAAUM,IA3pD3B,YA8pDD6kW,EAAWh3V,GAAOnO,UAAUS,OA9pD3B,YAgqDLvE,KAAKypW,oBAGbr9Q,IACI/jF,KAAe8kJ,KAChBq4M,EAAQnqW,UAAW,aAAS,GAC/B+wF,IACIllF,EAAS,SACVs+V,EAAQnqW,UAAW,aAAS,GAC/B+wF,IACIllF,EAAS,SACVs+V,EAAQnqW,UAAW,cAAU,GAChC+wF,IACIllF,EAAS,eACVs+V,EAAQnqW,UAAW,oBAAgB,GACtC+wF,IACIllF,GAAS,IACVs+V,EAAQnqW,UAAW,iBAAa,GACnC+wF,IACItjF,KACD08V,EAAQnqW,UAAW,eAAW,GACjC+wF,IACItjF,KACD08V,EAAQnqW,UAAW,eAAW,GACjC+wF,IACItjF,KACD08V,EAAQnqW,UAAW,iBAAa,GACnC+wF,IACItjF,KACD08V,EAAQnqW,UAAW,oBAAgB,GACtCmqW,EAAUp5Q,IACNhjF,GACDo8V,IAELr4P,ICtvDEthB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAQ5D0zU,GAAiB,eACjBC,GAAW,cACXxM,GAAW,eAGXyM,GAAa,iBAEbC,GAAgB,yBAChBC,GAAc,gBACdC,GAAY,kBACZC,GAAgB,gBAIhBC,GAAc,iBAEdC,GAAa,aACbC,GAAa,WAEb1P,GAAc,YACd2P,GAAiB,qBAEjBC,GAAkB,iBAClBC,GAAyC,SAAUhlR,GAEnD,SAASglR,IACL,OAAkB,OAAXhlR,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAU6lR,EAAyBhlR,GAInCN,IACIllF,EAAS,cACVwqW,EAAwBr2W,UAAW,cAAU,GAChD+wF,IACIllF,EAAS,MACVwqW,EAAwBr2W,UAAW,gBAAY,GAClD+wF,IACIllF,EAAS,WACVwqW,EAAwBr2W,UAAW,cAAU,GACzCq2W,GACTlxS,IAEEmxS,GAA4C,SAAUjlR,GAEtD,SAASilR,IACL,OAAkB,OAAXjlR,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAU8lR,EAA4BjlR,GAItCN,IACIrkF,GAAUwvB,OAAQ,UAAWrsB,SAAU,IAAK8U,OAAQ,UAAY0xV,KACjEC,EAA2Bt2W,UAAW,gBAAY,GACrD+wF,IACIrkF,GAAUwvB,OAAQ,YAAarsB,SAAU,IAAK8U,OAAQ,UAAY0xV,KACnEC,EAA2Bt2W,UAAW,cAAU,GAC5Cs2W,GACTnxS,IAKEoxS,GAA+B,SAAUllR,GAEzC,SAASklR,IACL,OAAkB,OAAXllR,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBA6rF,GAAU+lR,EAAellR,GAIzBN,IACIllF,OAAS/L,IACVy2W,EAAcv2W,UAAW,eAAW,GACvC+wF,IACIllF,OAAS/L,IACVy2W,EAAcv2W,UAAW,cAAU,GACtC+wF,IACIllF,OAAS/L,IACVy2W,EAAcv2W,UAAW,gBAAY,GACxC+wF,IACIllF,OAAS/L,IACVy2W,EAAcv2W,UAAW,eAAW,GACvC+wF,IACIllF,GAAS,IACV0qW,EAAcv2W,UAAW,gBAAY,GACjCu2W,GACTpxS,IAYEqxS,GAA2B,SAAUnlR,GAOrC,SAASmlR,EAAU7+V,EAAShS,GACxB,IAAIjB,EAAQ2sF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAYnD,OARAD,EAAMy4G,YACFsL,OAAQ,UACRD,SAAU,YACVlO,MAAO,QACPt3E,MAAO,QACP63E,KAAM,OACNl3F,IAAK,OAEFjf,EAi4BX,OAp5BA8rF,GAAUgmR,EAAWnlR,GAyBrBmlR,EAAUx2W,UAAUiX,QAAU,WAC1B,IAAIvS,EAAQC,KACRgE,EAAMhE,KAAKgB,QASf,IARA0rF,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKqlB,eACLrlB,KAAK8xW,WAAY,EACjB9xW,KAAK+xW,YAAY3yW,QAAQ,SAAU4yW,GAC1B98R,EAAMn1E,EAAMiB,QAAQ2B,cAAcqvW,MACnCxxW,SAASuL,KAAKpK,YAAY5B,EAAMiB,QAAQ2B,cAAcqvW,IAASttW,MAAM6pC,QAAU,UAGhFvqC,EAAI+Y,YACP/Y,EAAIsB,YAAYtB,EAAI+Y,YAExB,GAAI/c,KAAK2lW,QACL,KAAO3lW,KAAK4lW,QAAQ7oV,YAChB/Y,EAAIrC,YAAY3B,KAAK4lW,QAAQ7oV,YAGrC/Y,EAAI0H,gBAAgB,UACnB,gBAAiB,uBAAwB,QAAQtM,QAAQ,SAAU4mW,GAChEjmW,EAAMiB,QAAQ0K,gBAAgBs6V,MAGtC6L,EAAUx2W,UAAUoX,UAAY,WAC5B,IAAIw/V,EAASpsW,EAAQ7F,KAAKgB,QAAS,IAAMkwW,IACzClxW,KAAKkyW,UAAW,EAChBlyW,KAAK+xW,eACA/xW,KAAK8xW,YACN9xW,KAAK8xW,WAAY,GAEhB58R,EAAM+8R,GAKPjyW,KAAKgB,QAAQ8C,UAAUM,IAAI0sW,KAJ3BmB,EAAOnuW,UAAUM,IA/Hd,YAgIHpE,KAAKkyW,UAAW,GAKhBlyW,KAAKkT,WACLlT,KAAKoE,IAAIpE,KAAKgB,QA9IZ,SAgJDhB,KAAKwtG,oBAAqBt4B,EAAMl1E,KAAKmyW,iBACtCnyW,KAAKmyW,mBAGbN,EAAUx2W,UAAU+I,IAAM,SAAUJ,EAAKqkB,GACrCrkB,EAAIF,UAAUM,IAAIikB,IAEtBwpV,EAAUx2W,UAAUkJ,OAAS,SAAUP,EAAKqkB,GACxCrkB,EAAIF,UAAUS,OAAO8jB,IAMzBwpV,EAAUx2W,UAAUsyG,OAAS,WACzB3tG,KAAK+vG,aACL/vG,KAAK++M,gBACL/+M,KAAKykB,cAETotV,EAAUx2W,UAAU00G,WAAa,WAC7B,IAAI/5F,EAAQzT,EAAWvC,KAAKgW,OACxBD,EAASxT,EAAWvC,KAAK+V,QAC7BgvP,EAAS/kQ,KAAKgB,SAAWgV,MAASA,EAAOD,OAAUA,IAI/C/V,KAAKmyW,cAAc11W,OAAS,IAC5BuD,KAAKoyW,WAAapyW,KAAKmyW,eAE3BzuW,EAAW1D,KAAKgB,SALZskH,gBAAiB,QAAS1zG,KAAQ,eAAgBygW,uBAAwB,SAMtD,WAApBryW,KAAKsyW,YACLtyW,KAAKgB,QAAQwC,aAAa,uBAAwB,UAG1DquW,EAAUx2W,UAAU0jN,cAAgB,WAChC/+M,KAAK2lW,QAAW3lW,KAAKgB,QAAQoZ,SAAS3d,OAAS,EAAKgJ,EAAO,MAAOzF,KAAKgB,SAAW,KAClFhB,KAAKohF,cACLphF,KAAKuyW,kBAETV,EAAUx2W,UAAUgqB,aAAe,WAC/B9f,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAK+gH,cAC3C7rC,EAAMl1E,KAAKqmW,YACZrmW,KAAKqmW,UAAU/zV,WAGvBu/V,EAAUx2W,UAAUopB,WAAa,WAC7Blf,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAK+gH,aAAc/gH,MACtDA,KAAKkyW,UAAalyW,KAAK8xW,WACxBnnW,EAAa3K,KAAKgB,SAAW0E,SAAU,IAAMsrW,KAE5ChxW,KAAKkyW,WACNlyW,KAAKqmW,UAAY,IAAIruP,GAAeh4G,KAAKgB,SACrC83G,UAAW94G,KAAKkjJ,iBAAiB5nJ,KAAK0E,MACtCw4G,WAAYx4G,KAAKw4G,WACjBlnC,UAAW,cAIvBugS,EAAUx2W,UAAUuoI,QAAU,SAAU/iI,GACpCA,EAAEsG,OAAOkN,cAAcvQ,UAAUM,IArNrB,iBAuNhBytW,EAAUx2W,UAAUwoI,SAAW,SAAUhjI,GACrCA,EAAEsG,OAAOkN,cAAcvQ,UAAUS,OAxNrB,iBA0NhBstW,EAAUx2W,UAAUozW,aAAe,WAC/B,IAAI1uW,EAAQC,KACZA,KAAK4lW,QAAU5lW,KAAKgB,QAAQY,WAAU,GACtC,IACIg5B,EADA43U,EAAYxyW,KAAKgB,QAAQoZ,SAE7BzW,EAAS6uW,GAAYjO,QAClBljW,MAAMC,KAAKkxW,GAAWpzW,QAAQ,SAAU0G,GAEvC,GADAA,EAAGxC,GAAK9D,EAAY,cAChBsG,EAAGsU,SAAS3d,OAAS,EAAG,CACxBsD,EAAMqE,IAAI0B,EAAGsU,SAAS,GAAI42V,IAC1B,IAAI7qR,EAASrgF,EAAGsU,SAAS,GACzB1W,EAAWyiF,GAAUm7C,SAAY,IAAK1vH,KAAQ,UAAW6gW,aAAcD,EAAU/1W,OAAOyQ,aACxFi5E,EAAO7iF,GAAK9D,EAAY,gBACxB+F,GAAanB,IAAI+hF,EAAQ,QAASpmF,EAAM6jI,QAAS7jI,GACjDwF,GAAanB,IAAI+hF,EAAQ,OAAQpmF,EAAM8jI,SAAU9jI,GACjD,IAAIw1H,EAAYpvC,EAAOhhF,kBACnBowH,GACAA,EAAUzxH,UAAUM,IAAI6sW,KAE5Br2U,EAAU90B,EAAGsU,SAAS,MAElBwgB,EAAQt3B,GAAK9D,EAAY,eACzB2mF,EAAO3iF,aAAa,gBAAiBo3B,EAAQt3B,IAC7Cs3B,EAAQl2B,MAAM6pC,QAAU,GACxBzoC,EAAGhC,UAAUM,IAtOlB,YAuOK0B,EAAGsU,SAAS,GAAGzY,YAAY5B,EAAM2yW,sBACjC5uW,EAAU82B,GAAUs2U,GAAaG,QACjC3tW,EAAWk3B,GAAW8iC,kBAAmByoB,EAAO7iF,GAAI63H,cAAe,UACnEvgG,EAAUA,EAAQz1B,qBAEdy1B,EAAQ92B,UAAUM,IAAI+sW,IACtBv2U,EAAQl2B,MAAM6pC,QAAU,SAM5CsjU,EAAUx2W,UAAUq3W,mBAAqB,WACrC,IAAIC,EAAU3yW,KAAKmB,cAAc,OAASkC,UAAW+tW,KACjDwB,EAAa5yW,KAAKmB,cAAc,QAAUkC,UAzPhC,gCA2Pd,OADAsvW,EAAQhxW,YAAYixW,GACbD,GAEXd,EAAUx2W,UAAUk3W,eAAiB,WACjC,IAAI1wW,EAAM7B,KAAKoyW,WAAW31W,OAC1B,GAAY,IAARoF,EAGJ,GAAwB,WAApB7B,KAAKsyW,WACLtyW,KAAK6yW,YAAW,EAAM7yW,KAAKoyW,WAAWvwW,EAAM,SAG5C,IAAK,IAAI1F,EAAI,EAAGA,EAAI0F,EAAK1F,IACrB6D,KAAK6yW,YAAW,EAAM7yW,KAAKoyW,WAAWj2W,KAIlD01W,EAAUx2W,UAAU+lF,YAAc,WAC9B,IAEIgoR,EAFArpW,EAAQC,KACRgE,EAAMhE,KAAKgB,QAEXk0E,EAAMl1E,KAAKoyW,cACXpyW,KAAKoyW,eAET,IAAIv2S,EAAQ77D,KAAK67D,MACZqZ,EAAMl1E,KAAK2lW,SAGP3hW,GAAO63D,EAAMp/D,OAAS,GAC3Bo/D,EAAMz8D,QAAQ,SAAU4e,EAAM/L,GAC1Bm3V,EAAYrpW,EAAM+yW,gBAAgB90V,EAAM/L,GACxCjO,EAAIrC,YAAYynW,GACZA,EAAUziS,kBAAoB,IAC9BphE,GAAanB,IAAIglW,EAAUzmW,cAAc,IAAMquW,IAAa,QAASjxW,EAAM6jI,QAAS7jI,GACpFwF,GAAanB,IAAIglW,EAAUzmW,cAAc,IAAMquW,IAAa,OAAQjxW,EAAM8jI,SAAU9jI,MAR5FC,KAAKyuW,gBAaboD,EAAUx2W,UAAU0lH,aAAe,SAAUlgH,GACzC,IAGIoR,EACA0gW,EAJA5yW,EAAQC,KACRg9H,EAAOn8H,EAAEsG,OACToG,KAIJ,GADc1H,EAAQm3H,EAAM,IAAM+zO,MAClB/wW,KAAKgB,QAArB,CAGAg8H,EAAKl5H,UAAUM,IAAI,YACnB,IAAI2uW,EAAYltW,EAAQm3H,EAAM,IAAMunO,IAChCyO,EAAWntW,EAAQm3H,EAAM,IAAMg0O,IAC/BiC,EAAWptW,EAAQm3H,EAAM,IAAMk0O,IAC/B6B,IAAc79R,EAAM89R,IAAa99R,EAAM+9R,MACvCD,EAAWD,EAAU34V,SAAS,GAC9B64V,EAAWF,EAAU34V,SAAS,IAE9B44V,IACAL,EAAUltW,EAAO,IAAM2rW,GAAe4B,IAE1C,IAAIE,EACAD,IACAC,EAAertW,EAAQotW,EAAU,IAAM1O,KAE3C,IAAI4O,KACJlhW,EAAQjS,KAAKozW,eAAeL,GACxBG,IACA3lW,EAAUyQ,KAAOhe,KAAK67D,MAAM77D,KAAKozW,eAAeF,KAEpD3lW,EAAUuvG,cAAgBj8G,KACVq0E,EAAMy9R,IAAYz9R,EAAMl1E,KAAK2lW,UAAYoN,EAAUpsS,mBAAqB,KACvEuO,EAAM+9R,IAAc/9R,EAAMzvE,EAAO,IAAMurW,GAAa,KAAOI,GAAe8B,MACvFH,EAAUpxW,YAAY3B,KAAKqzW,iBAAiBphW,IAC5CjS,KAAKszW,eAAeP,IAExB/yW,KAAK0mB,QAAQ,UAAWnZ,GACxB,IAAIgmW,EAAeN,IAAa/9R,EAAMzvE,EAAO,YAAawtW,IAG1D,GAFAM,EAAcA,IAAgBr+R,EAAMzvE,EAAO,IAAMsrW,GAAUkC,OAAgBptW,EAAQm3H,EAAM,IAAM+zO,MAAc/wW,KAAKgB,UAClHg8H,EAAKl5H,UAAUS,OAAO,cAClBy4H,EAAKl5H,UAAUK,SAAS+sW,KAAgBl0O,EAAKl5H,UAAUK,SAASgtW,KAAcoC,GAAlF,IAGGlyW,MAAMC,KAAKtB,KAAKgB,QAAQoZ,UAAUhb,QAAQ,SAAU0G,GAC/CA,EAAGhC,UAAUK,SAASotW,KACtB4B,EAAW3uW,KAAKsB,KAGxB,IAAI0tW,KAAgBnyW,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,IAAM+iW,GAAW,iBAC9E,GAAIiP,EAAW/2W,OAAS,EACpB,IAAK,IAAI2B,EAAK,EAAGq1W,EAAeD,EAAYp1W,EAAKq1W,EAAah3W,OAAQ2B,IAAM,CACxE,IAAI0H,EAAK2tW,EAAar1W,GACtB+0W,EAAW3uW,KAAKsB,EAAGuO,eAG3B,IAAIq/V,GAAyD,IAAtCP,EAAW50W,QAAQ20W,IAA+D,SAAvCD,EAASpgW,aAAa,aACpF8gW,GAAa,EACjB,IAAKz+R,EAAM69R,KAAe79R,EAAM89R,GAAW,CACvC,IAAIY,EAAanuW,EAAO,IAAMyrW,GAAa6B,GAEvCc,EADYhuW,EAAQktW,EAAW,IAAMjC,IACbnuW,cAAc,IAAM8uW,IAChD,GAAIv8R,EAAM0+R,GACN,OAEJD,EAAcE,IAAgBd,GAC1BtuW,EAAUmvW,IAAiBF,IAAoBR,EAAapvW,UAAUK,SAASmtW,KAI1E6B,EAAW12W,OAAS,GAA0B,WAApBuD,KAAKsyW,aAA4BoB,GAC5DP,EAAW/zW,QAAQ,SAAU0G,GACzB/F,EAAM+zW,SAASruW,EAAO,IAAMyrW,GAAaprW,IACzCA,EAAGhC,UAAUS,OAAOktW,MAG5BzxW,KAAK6+J,OAAO+0M,IATZ5zW,KAAK8zW,SAASF,GAWb1+R,EAAM2+R,IAAiBF,GACxBE,EAAY/vW,UAAUS,OAAOktW,QAIzCI,EAAUx2W,UAAU04W,aAAe,SAAUpkT,EAAQo8I,EAAM/uE,GACvD,IAAI2qO,EACAqM,EAAWnuW,EAAQm3H,EAAM,IAAMunO,IAC/BvnO,IAAS+uE,EACT47J,GAAoB,WAAXh4S,EAAsBqtE,EAAKmU,iBAAmBnU,GAAMr6H,cAAc,IAAMquW,IAE5Eh0O,EAAKl5H,UAAUK,SAAS6sW,MAC7BgD,EAAuB,WAAXrkT,EAAsBqkT,EAAS18J,uBAAyB08J,EAAS/xP,sBAEzE0lP,EAAOliW,EAAO,IAAMurW,GAAYgD,IAGpCrM,GACAA,EAAKzlW,SAGb2vW,EAAUx2W,UAAU6nJ,iBAAmB,SAAUriJ,GAC7C,IAAIm8H,EAAOn8H,EAAEsG,OAEb,IAAI+tE,EADSrvE,EAAQhF,EAAEsG,OAAQ6pW,MACTh0O,EAAKl5H,UAAUK,SAAS4sW,KAAc/zO,EAAKl5H,UAAUK,SAAS6sW,IAApF,CAGA,IAEIp2U,EADAmxK,EAAO/rM,KAAKgB,QAEhB,OAAQH,EAAE8uD,QACN,IAAK,SAGL,IAAK,WACD3vD,KAAK+zW,aAAalzW,EAAE8uD,OAAQo8I,EAAM/uE,GAClC,MACJ,IAAK,QACL,IAAK,SAEI9nD,EADLt6C,EAAUoiG,EAAK/a,qBACQrnF,EAAQ92B,UAAUK,SAAS+sW,IACJ,SAAtCt2U,EAAQ/nB,aAAa,cACrBmqH,EAAK/J,QAIT+J,EAAK/J,QAET,MACJ,IAAK,OACL,IAAK,OACmB,SAAbpyH,EAAE8uD,OAAoBo8I,EAAK5mM,kBAAkBiV,SAAS,GAAK2xL,EAAK56D,iBAAiB/2H,SAAS,IAC5FlY,WAIjB2vW,EAAUx2W,UAAU44W,kBAAoB,WACpC,IAAI9tR,EAASnmF,KAAKmB,cAAc,OAASkC,UAAW2tW,GAAY1tW,GAAI9D,EAAY,kBAMhF,OADAkE,EAAWyiF,GAHPm7C,SAAY,IAAK1vH,KAAQ,UAAWu+I,gBAAiB,QAAS5kC,gBAAiB,QAC/EjG,gBAAiB,QAASmtP,aAAczyW,KAAK67D,MAAMp/D,OAAOyQ,aAGvDi5E,GAEX0rR,EAAUx2W,UAAUy3W,gBAAkB,SAAU90V,EAAM/L,GAClD,IAAIy1L,EAGJ,GAFAA,EAAW1nM,KAAKmB,cAAc,OAASkC,UAAWkhW,KAClD78J,EAASpkM,GAAK9D,EAAY,cACtBwe,EAAKmoE,OAAQ,CACb,IAAI+tR,EAASl0W,KAAKi0W,oBACdE,EAASn0W,KAAKmB,cAAc,OAASkC,UAAW4tW,KACpDiD,EAAOvyW,YAAYwyW,GACnBD,EAAOvyW,YAAY3B,KAAKo0W,aAAaD,EAAQn2V,EAAKmoE,OAAQl0E,GAAO,IACjEy1L,EAAS/lM,YAAYuyW,GAEzB,IAAIG,EAAM5uW,EAAO,IAAMurW,GAAYtpK,GASnC,IARI1pL,EAAK0kL,UAAaxtH,EAAMjjE,IAAYjS,KAAKwtG,oBACD,IAApCxtG,KAAKoyW,WAAW7zW,QAAQ0T,IACxBjS,KAAKoyW,WAAW5tW,KAAKyN,GAGzB+L,EAAK/K,UACLy0L,EAAS5jM,UAAUM,IAAI4Z,EAAK/K,UAE5B+K,EAAKm3D,QAAS,CACd,IAAIm/R,EAAYt0W,KAAKmB,cAAc,OAASkC,UAzcpC,wBA0cJsqC,EAAO3tC,KAAKmB,cAAc,QAAUkC,UAAW2a,EAAKm3D,QAAU,aAClEm/R,EAAU3yW,YAAYgsC,GAClBunC,EAAMm/R,KACNA,EAAMr0W,KAAKi0W,qBACPtyW,YAAY2yW,GAChB5sK,EAAS/lM,YAAY0yW,IAGrBA,EAAInvW,aAAaovW,EAAWD,EAAI9iW,WAAW,IAGnD,GAAIyM,EAAK4c,QAAS,CACd,IAAI25U,EAAUv0W,KAAK0yW,qBACfx9R,EAAMm/R,KACNA,EAAMr0W,KAAKi0W,oBACXvsK,EAAS/lM,YAAY0yW,IAEzBA,EAAI1yW,YAAY4yW,GAChBv0W,KAAKoE,IAAIsjM,EAndN,YAqdP,OAAOA,GAEXmqK,EAAUx2W,UAAU+4W,aAAe,SAAUpwW,EAAKhH,EAAOiV,EAAOua,GAC5D,IAAIgO,EACAg6U,EACJ,IACI,GAAIh0W,SAASgB,iBAAiBxE,GAAOP,OAAQ,CACzC,IAAIg4W,EAASj0W,SAASmC,cAAc3F,GACpCw3W,EAAYC,EAAO3yW,UAAUoO,OAC7BlM,EAAIrC,YAAY8yW,GAChBA,EAAO/vW,MAAM6pC,QAAU,IAG/B,MAAO1tC,GACH25B,EAAaukC,GAAiB/hE,GAElC,IAAIqjP,EAkBJ,OAjBKnrK,EAAM16C,KACP6lN,EAAY7lN,KAEX06C,EAAMmrK,MAAcA,EAAU5jP,OAAS,IAAOy4E,EAAMmrK,EAAU,GAAGr9O,UAAiC,IAArBq9O,EAAU5jP,OAQzD,IAA1BuH,EAAI2iE,oBACT3iE,EAAIhC,UAAYhF,MARbqE,MAAMC,KAAK++O,GAAWjhP,QAAQ,SAAU0G,GAClCovE,EAAMpvE,EAAG9C,WACV8C,EAAGpB,MAAM6pC,QAAU,IAEvBvqC,EAAIrC,YAAYmE,KAMnBovE,EAAMs/R,IACPx0W,KAAK+xW,YAAYvtW,KAAKxH,GAEnBgH,GAEX6tW,EAAUx2W,UAAUi4W,eAAiB,SAAUlF,GAC3C,IAAIjoR,EAAS1gF,EAAO,IAAMurW,GAAY5C,GAClCxzU,EAAUn1B,EAAO,IAAMyrW,GAAa9C,GACxCjoR,EAAO3iF,aAAa,gBAAiBo3B,EAAQt3B,IAC7Cs3B,EAAQp3B,aAAa,kBAAmB2iF,EAAO7iF,KAEnDuuW,EAAUx2W,UAAUg4W,iBAAmB,SAAUphW,GAC7C,IAAI2oB,EAAU56B,KAAK67D,MAAM5pD,GAAO2oB,QAC5B85U,EAAU10W,KAAKmB,cAAc,OAASkC,UAAW6tW,GAAc,IAAMG,GAAa/tW,GAAI9D,EAAY,iBACtGkE,EAAWgxW,GAAWv5O,cAAe,SACrC,IAAIw5O,EAAM30W,KAAKmB,cAAc,OAASkC,UAAW8tW,KAEjD,OADAuD,EAAQ/yW,YAAY3B,KAAKo0W,aAAaO,EAAK/5U,EAAS3oB,GAAO,IACpDyiW,GAEX7C,EAAUx2W,UAAUwjK,OAAS,SAAU7hC,GACnC,IAAIzvH,EACAqnW,EAAc/uW,EAAQm3H,EAAM,IAAMunO,IACtC,KAAIrvR,EAAM8nD,IAAUv4H,EAAUu4H,IAA4C,SAAnCA,EAAKnqH,aAAa,cAA4B+hW,EAAY9wW,UAAUK,SAAS09V,KAApH,CAGA,IACIgS,EADYhuW,EAAQ+uW,EAAa,IAAM9D,IACfnuW,cAAc,IAAM8uW,IAC5C7iU,GACA7X,KAAM/2B,KAAK4uC,UAAUiwH,OAAOtnI,OAC5BrsB,SAAUlL,KAAK4uC,UAAUiwH,OAAO3zJ,SAChC0iF,eAAgB5tF,KAAK4uC,UAAUiwH,OAAO7+I,QAEtC2tB,EAAOloC,EAAO,IAAM2rW,GAAewD,GAAazvW,kBACpDoI,GAAcvM,QAAS4zW,EACnB52V,KAAMhe,KAAK67D,MAAM77D,KAAKozW,eAAewB,IACrCC,YAAY,GAChB,IAAIC,EAAMlmU,EAAU7X,KAEpB,GADA/2B,KAAK0mB,QAAQ,YAAanZ,IACtBA,EAAU8qB,OAAd,CASA,GANAsV,EAAK7pC,UAAUM,IAAIotW,IACnBxxW,KAAK+0W,kBAAkBH,GAClB1/R,EAAM2+R,IACPA,EAAY/vW,UAAUS,OAAOktW,IAEjCmD,EAAY9wW,UAAUM,IAAIqtW,IACF,SAAnB7iU,EAAU7X,KAGX,OAFA/2B,KAAKg1W,eAAe,QAASrnU,EAAMqvF,EAAM43O,EAAarnW,QACtDvN,KAAKg1W,eAAe,MAAOrnU,EAAMqvF,EAAM43O,EAAarnW,GAGxDvN,KAAKi1W,gBAAgBH,EAAKnnU,EAAMqvF,EAAM43O,EAAahmU,EAAWrhC,MAElEskW,EAAUx2W,UAAU45W,gBAAkB,SAAUC,EAAIC,EAAKn4O,EAAM43O,EAAa78U,EAAS93B,GACjF,IACI8V,EADAhW,EAAQC,KAGZA,KAAKo1W,iBAAmBR,EAAYtxW,GACzB,cAAP4xW,GACAn9U,EAAQnZ,MAAQ,WACZ7e,EAAMi1W,eAAe,QAASG,EAAKn4O,EAAM43O,EAAa30W,GACtD+8H,EAAKt4H,MAAMwP,SAAW,WACtB6B,EAAS6+V,EAAYlhT,aACXspE,EAAKtpE,aACfspE,EAAKt4H,MAAMkoD,UAAaowE,EAAiB,aAAI,KAC7C43O,EAAYlwW,MAAMkoD,UAAY,IAElC70B,EAAQC,SAAW,WACf48U,EAAYlwW,MAAMioD,UAAa52C,EAASinH,EAAKtpE,aAAgB,MAEjE37B,EAAQ/Y,IAAM,WACV+lP,EAAS/nI,GAAQ9oH,SAAY,GAAI04C,UAAa,KAC9CgoT,EAAYlwW,MAAMioD,UAAY,GAC9B5sD,EAAMi1W,eAAe,MAAOG,EAAKn4O,EAAM43O,EAAa30W,MAIxD83B,EAAQnZ,MAAQ,WACZ7e,EAAMi1W,eAAe,QAASG,EAAKn4O,EAAM43O,EAAa30W,IAE1D83B,EAAQ/Y,IAAM,WACVjf,EAAMi1W,eAAe,MAAOG,EAAKn4O,EAAM43O,EAAa30W,KAG5D,IAAI63B,GAAUC,GAASA,QAAQilG,IAEnC60O,EAAUx2W,UAAU25W,eAAiB,SAAUh9U,EAAU2V,EAAMqvF,EAAM43O,EAAarnW,GAC9EvN,KAAKuE,OAAOy4H,EAAMq0O,IAClBrxW,KAAKoE,IAAIwwW,EAAatD,IACtBtxW,KAAKoE,IAAIupC,EAjlBG,iBAklBK,QAAb3V,IACAh4B,KAAKoE,IAAIwwW,EAAarD,IACtBv0O,EAAKx5H,aAAa,cAAe,SACjCE,EAAWs5H,EAAKs6E,wBAA0B/rF,gBAAiB,OAAQ4kC,gBAAiB,SACpFxiH,EAAK7pC,UAAUS,OAAOitW,IACtBxxW,KAAK0mB,QAAQ,WAAYnZ,KAGjCskW,EAAUx2W,UAAU05W,kBAAoB,SAAU/2V,GAC9C,IAAI/L,EAAQjS,KAAKozW,eAAep1V,IACW,IAAvChe,KAAKmyW,cAAc5zW,QAAQ0T,IAC3BjS,KAAKmyW,cAAc3tW,KAAKyN,IAGhC4/V,EAAUx2W,UAAU+3W,eAAiB,SAAUp1V,GAC3C,SAAU3c,MAAMC,KAAKtB,KAAKgB,QAAQoZ,UAAU7b,QAAQyf,IAExD6zV,EAAUx2W,UAAUg6W,iBAAmB,SAAUr3V,GAC7C,IAAI/L,EAAQjS,KAAKozW,eAAep1V,GAChChe,KAAKmyW,cAAc1pV,OAAOzoB,KAAKmyW,cAAc5zW,QAAQ0T,GAAQ,IAEjE4/V,EAAUx2W,UAAUy4W,SAAW,SAAU92O,GACrC,IAAIzvH,EACAqnW,EAAc/uW,EAAQm3H,EAAM,IAAMunO,IACtC,IAAIrvR,EAAM8nD,IAAUv4H,EAAUu4H,KAAS43O,EAAY9wW,UAAUK,SAAS09V,IAAtE,CAGA,IAAIjzT,GACA7X,KAAM/2B,KAAK4uC,UAAUklU,SAASv8U,OAC9BrsB,SAAUlL,KAAK4uC,UAAUklU,SAAS5oW,SAClC0iF,eAAgB5tF,KAAK4uC,UAAUklU,SAAS9zV,QAExC2tB,EAAOloC,EAAO,IAAM2rW,GAAewD,GAAazvW,kBACpDoI,GAAcvM,QAAS4zW,EACnB52V,KAAMhe,KAAK67D,MAAM77D,KAAKozW,eAAewB,IACrCC,YAAY,GAChB,IAAIC,EAAMlmU,EAAU7X,KAEpB,GADA/2B,KAAK0mB,QAAQ,YAAanZ,IACtBA,EAAU8qB,OAAd,CAMA,GAHAr4B,KAAKq1W,iBAAiBT,GACtBA,EAAY9wW,UAAUM,IAAIqtW,IAC1B9jU,EAAK7pC,UAAUM,IAAIotW,IACK,SAAnB5iU,EAAU7X,KAGX,OAFA/2B,KAAKs1W,iBAAiB,QAAS3nU,EAAMqvF,EAAM43O,EAAarnW,QACxDvN,KAAKs1W,iBAAiB,MAAO3nU,EAAMqvF,EAAM43O,EAAarnW,GAG1DvN,KAAKu1W,kBAAkBT,EAAK93O,EAAM43O,EAAajnU,EAAMiB,EAAWrhC,MAEpEskW,EAAUx2W,UAAUk6W,kBAAoB,SAAUL,EAAIl4O,EAAMw4O,EAAUL,EAAKp9U,EAAS93B,GAChF,IACI8V,EACA0/V,EACAC,EACArhO,EAJAt0I,EAAQC,KAKZA,KAAKo1W,iBAAmBI,EAASlyW,GACtB,YAAP4xW,GACAn9U,EAAQnZ,MAAQ,WACZ82V,EAAaF,EAAS9hT,aACtB8hT,EAAS9wW,MAAMioD,UAAY+oT,EAAa,KACxC14O,EAAKt4H,MAAMwP,SAAW,WACtB6B,EAASy/V,EAAS9hT,aAClB+hT,EAAaz4O,EAAKtpE,aAClBspE,EAAKt4H,MAAMkoD,UAAY6oT,EAAa,KACpC11W,EAAMu1W,iBAAiB,QAASH,EAAKn4O,EAAMw4O,EAAUv1W,IAEzD83B,EAAQC,SAAW,YACfq8G,EAAWt+H,GAAU0/V,EAAaz4O,EAAKtpE,eAC1BgiT,IACTF,EAAS9wW,MAAMioD,UAAY0nF,EAAS,OAG5Ct8G,EAAQ/Y,IAAM,WACVg+G,EAAKt4H,MAAM6pC,QAAU,OACrBxuC,EAAMu1W,iBAAiB,MAAOH,EAAKn4O,EAAMw4O,EAAUv1W,GACnDu1W,EAAS9wW,MAAMioD,UAAY,GAC3Bo4M,EAAS/nI,GAAQ9oH,SAAY,GAAI04C,UAAa,GAAIre,QAAW,QAIjExW,EAAQnZ,MAAQ,WACZ7e,EAAMu1W,iBAAiB,QAASH,EAAKn4O,EAAMw4O,EAAUv1W,IAEzD83B,EAAQ/Y,IAAM,WACVjf,EAAMu1W,iBAAiB,MAAOH,EAAKn4O,EAAMw4O,EAAUv1W,KAG3D,IAAI63B,GAAUC,GAASA,QAAQilG,IAEnC60O,EAAUx2W,UAAUi6W,iBAAmB,SAAUt9U,EAAU2V,EAAMqvF,EAAM43O,EAAarnW,GAChFvN,KAAKuE,OAAOopC,EA9qBA,iBA+qBZ3tC,KAAKuE,OAAOqwW,EAAatD,IACR,QAAbt5U,IACAh4B,KAAKoE,IAAI44H,EAAMq0O,IACf1jU,EAAK7pC,UAAUS,OAAOitW,IACtBxxW,KAAKuE,OAAOqwW,EAAarD,IACzBv0O,EAAKx5H,aAAa,cAAe,QACjCE,EAAWs5H,EAAKs6E,wBAA0B/rF,gBAAiB,QAAS4kC,gBAAiB,UACrFnwJ,KAAK0mB,QAAQ,WAAYnZ,KAQjCskW,EAAUx2W,UAAU0kC,cAAgB,WAChC,MAAO,aAEX8xU,EAAUx2W,UAAUs6W,iBAAmB,WACnC,IAAIvH,KAAa/sW,MAAMC,KAAKtB,KAAKgB,QAAQoZ,UACrCw7V,EAAU51W,KAAK67D,MAAMp/D,OACzB2xW,EAAQhvW,QAAQ,SAAU4E,GACtByB,EAAO,IAAMurW,GAAYhtW,GAAKR,aAAa,aAAc,GAAKoyW,MAUtE/D,EAAUx2W,UAAU45M,QAAU,SAAUj3L,EAAM/L,GAC1C,IAAIjO,EAAMhE,KAAKgB,QAIf,GAHIk0E,EAAMjjE,KACNA,EAAQjS,KAAK67D,MAAMp/D,QAEnBuH,EAAI2iE,mBAAqB10D,EAAO,CAChCjS,KAAK67D,MAAMpzC,OAAOxW,EAAO,EAAG+L,GAC5B,IAAI63V,EAAe71W,KAAK8yW,gBAAgB90V,EAAM/L,GAC1CjO,EAAI2iE,oBAAsB10D,EAC1BjO,EAAIrC,YAAYk0W,GAGhB7xW,EAAIkB,aAAa2wW,EAAc7xW,EAAIoW,SAASnI,IAEhD1M,GAAanB,IAAIyxW,EAAalzW,cAAc,IAAMquW,IAAa,QAAShxW,KAAK4jI,QAAS5jI,MACtFuF,GAAanB,IAAIyxW,EAAalzW,cAAc,IAAMquW,IAAa,OAAQhxW,KAAK6jI,SAAU7jI,MACtFA,KAAK21W,mBAET31W,KAAKmyW,iBACLnyW,KAAK81W,oBAAoB9xW,GACrBga,EAAK0kL,UACL1iM,KAAK6yW,YAAW,EAAM5gW,IAG9B4/V,EAAUx2W,UAAUy6W,oBAAsB,SAAU9xW,GAChD,IAAIjE,EAAQC,QACTqB,MAAMC,KAAK0C,EAAIoW,UAAUhb,QAAQ,SAAU0G,GACtCA,EAAGhC,UAAUK,SAASmtW,KACtBvxW,EAAMg1W,kBAAkBjvW,MASpC+rW,EAAUx2W,UAAUkzD,WAAa,SAAUt8C,GACvC,IAAIjO,EAAMhE,KAAKgB,QAAQoZ,SAASnI,GAC5BijE,EAAMlxE,KAGVqB,EAAOrB,GACPhE,KAAK67D,MAAMpzC,OAAOxW,EAAO,GACzBjS,KAAK21W,mBACL31W,KAAKmyW,iBACLnyW,KAAK81W,oBAAoB91W,KAAKgB,WAOlC6wW,EAAUx2W,UAAUoK,OAAS,SAAUwM,GACnC,IAAIjO,EAAMhE,KAAKgB,QAAQoZ,SAASnI,GAC5BijE,EAAMlxE,IAAQkxE,EAAMzvE,EAAO,IAAMurW,GAAYhtW,KAGjDA,EAAIoW,SAAS,GAAGlY,SASpB2vW,EAAUx2W,UAAU25M,SAAW,SAAU/iM,EAAOgpH,GAC5C,IAAIj3H,EAAMhE,KAAKgB,QAAQoZ,SAASnI,GAC5BijE,EAAMlxE,KAGNkxE,EAAM+lD,KACNA,GAAW,GAEfA,EAAWj7H,KAAKoE,IAAIJ,EAlyBT,UAkyB8BhE,KAAKuE,OAAOP,EAlyB1C,YA2yBf6tW,EAAUx2W,UAAUs5M,WAAa,SAAU1iM,EAAOktH,GAC9C,IAAIn7H,EAAMhE,KAAKgB,QAAQoZ,SAASnI,GAChC,IAAIijE,EAAMlxE,GAAV,CAGA,IAAI+xW,EAAY/xW,EAAImB,kBAChBg6H,GACAn/H,KAAKuE,OAAOP,EAAK69V,IACjBn+V,EAAWqyW,GAAaz0O,SAAY,IAAKhc,gBAAiB,UAC1DywP,EAAU7zW,UAGN8B,EAAIF,UAAUK,SAASotW,MACvBvxW,KAAK6yW,YAAW,EAAO5gW,GACvBjS,KAAK+zW,aAAa,WAAY/zW,KAAKgB,QAAS+0W,IAEhD/1W,KAAKoE,IAAIJ,EAAK69V,IACdkU,EAAUvyW,aAAa,gBAAiB,QACxCuyW,EAAUrqW,gBAAgB,eAUlCmmW,EAAUx2W,UAAUw3W,WAAa,SAAUmD,EAAU/jW,GACjD,IAAIlS,EAAQC,KACR+rM,EAAO/rM,KAAKgB,QAChB,GAAIk0E,EAAMjjE,GACN,GAAwB,WAApBjS,KAAKsyW,YAA2B0D,EAAU,CAC1C,IAAIhyW,EAAM+nM,EAAK3xL,SAAS2xL,EAAKplI,kBAAoB,GACjD3mE,KAAKi2W,WAAWD,EAAUhyW,EAAKhE,KAAKozW,eAAepvW,QAElD,CACD,IAAIga,EAAOvY,EAAO,IAAMzF,KAAKo1W,iBAAkBp1W,KAAKgB,YACjDK,MAAMC,KAAKtB,KAAKgB,QAAQoZ,UAAUhb,QAAQ,SAAU0G,GACnD/F,EAAMk2W,WAAWD,EAAUlwW,EAAI/F,EAAMqzW,eAAettW,IACpDA,EAAGhC,UAAUS,OAAOktW,MAExB,IAAIyE,EAAezwW,EAAO,IAAMgsW,GAAiBzxW,KAAKgB,SAClDk1W,GACAA,EAAapyW,UAAUS,OAAOktW,IAE9BzzV,GACAA,EAAKla,UAAUM,IAAIqtW,QAI1B,CAED,GAAIv8R,EADAlxE,EAAMhE,KAAKgB,QAAQoZ,SAASnI,MACbjO,EAAIF,UAAUK,SAr1B9B,aAq1BqDH,EAAIF,UAAUK,SAASotW,KAAeyE,EAC1F,OAGwB,WAApBh2W,KAAKsyW,YACLtyW,KAAK6yW,YAAW,GAEpB7yW,KAAKi2W,WAAWD,EAAUhyW,EAAKiO,KAI3C4/V,EAAUx2W,UAAU46W,WAAa,SAAUD,EAAUhyW,EAAKiO,GACtD,IAAI0iW,EAAM3wW,EAAIoW,SAAS,GACvB,IAAIpW,EAAIF,UAAUK,SAAS09V,IAA3B,CAGA,GAAI3sR,EAAMy/R,IAAQqB,EACdrB,EAAM30W,KAAKqzW,iBAAiBphW,GAC5BjO,EAAIrC,YAAYgzW,GAChB30W,KAAKszW,eAAetvW,QAEnB,GAAIkxE,EAAMy/R,GACX,OAEJqB,EAAWh2W,KAAK6+J,OAAO81M,GAAO30W,KAAK8zW,SAASa,KAEhD9C,EAAUx2W,UAAU4rW,aAAe,cAC5B5lW,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,IAAM+iW,KAAWnlW,QAAQ,SAAU0G,GAAMT,EAAOS,MAEhG+rW,EAAUx2W,UAAU86W,WAAa,SAAUn4V,EAAM/L,GAC7C,IAAKijE,EAAMl3D,GAAO,CACd,IAAI6sL,EAAU7qM,KAAK67D,MAAM5pD,GACzBjS,KAAK67D,MAAMpzC,OAAOxW,EAAO,GACzB5M,EAAO2Y,GACPhe,KAAKi1M,QAAQpK,EAAS54L,KAG9B4/V,EAAUx2W,UAAU+yG,eAAiB,WAEjC,OAAOpuG,KAAK4uG,cADK,mBAUrBijQ,EAAUx2W,UAAU0tF,kBAAoB,SAAUiF,EAASC,GAEvD,IAAK,IADDmoR,EAAQp2W,KAAKgB,QACR5C,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,GAAU5vF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACD,GAAM4vF,EAAQnyB,iBAAiBr9D,OAASyvF,EAAQpyB,iBAAiBr9D,MAwB7DwB,KAAKinW,eACLjnW,KAAKohF,cACLphF,KAAKuyW,sBAxBL,IAAK,IADD8D,EAAc/3W,OAAOhB,KAAK0wF,EAAQnyB,OAC7Bp4C,EAAI,EAAGA,EAAI4yV,EAAY55W,OAAQgnB,IAAK,CACzC,IAAIxR,EAAQmiB,SAAS91B,OAAOhB,KAAK0wF,EAAQnyB,OAAOp4C,GAAI,IAChD4zC,EAAW/4D,OAAOhB,KAAK0wF,EAAQnyB,MAAM5pD,IAAQ,GAC7C+L,EAAOpY,EAAU,IAAM2+V,GAAUvkW,KAAKgB,SAASiR,GAC/C1K,EAASjJ,OAAO2vF,EAAQpyB,MAAM5pD,IAAQolD,GACtC3rC,EAASptB,OAAO0vF,EAAQnyB,MAAM5pD,IAAQolD,GACzB,WAAbA,GAAsC,YAAbA,GAAuC,aAAbA,GACnDr3D,KAAKm2W,WAAWn4V,EAAM/L,GAET,aAAbolD,GAA4B6d,EAAMl3D,KAClCA,EAAKla,UAAUS,OAAOgD,GACtByW,EAAKla,UAAUM,IAAIsnB,IAEN,YAAb2rC,GAA2B6d,EAAMl3D,IAAkC,IAAzBA,EAAK5D,SAAS3d,SACpDuhB,EAAKla,UAAUK,SAASmtW,KACxBtxW,KAAK6yW,YAAW,EAAO5gW,GAE3B5M,EAAO2Y,EAAKrb,cAAc,IAAMuuW,MAS5C,MACJ,IAAK,YACDljR,EAAQ96E,UAAYlT,KAAKoE,IAAIgyW,EA36BnC,SA26BqDp2W,KAAKuE,OAAO6xW,EA36BjE,SA46BM,MACJ,IAAK,SACDrxG,EAAS/kQ,KAAKgB,SAAW+U,OAAUxT,EAAWyrF,EAAQj4E,UACtD,MACJ,IAAK,QACDgvP,EAAS/kQ,KAAKgB,SAAWgV,MAASzT,EAAWyrF,EAAQh4E,SACrD,MACJ,IAAK,aAC0B,WAAvBg4E,EAAQskR,YACRtyW,KAAKgB,QAAQwC,aAAa,uBAAwB,SAC9CxD,KAAKmyW,cAAc11W,OAAS,GAC5BuD,KAAK6yW,YAAW,IAIpB7yW,KAAKgB,QAAQwC,aAAa,uBAAwB,WAMtE4oF,IACI/jF,KAAeupW,KAChBC,EAAUx2W,UAAW,aAAS,GACjC+wF,IACIllF,EAAS,SACV2qW,EAAUx2W,UAAW,aAAS,GACjC+wF,IACIllF,EAAS,SACV2qW,EAAUx2W,UAAW,cAAU,GAClC+wF,IACIllF,EAAS,aACV2qW,EAAUx2W,UAAW,kBAAc,GACtC+wF,IACIrkF,KAAY4pW,KACbE,EAAUx2W,UAAW,iBAAa,GACrC+wF,IACItjF,KACD+oW,EAAUx2W,UAAW,eAAW,GACnC+wF,IACItjF,KACD+oW,EAAUx2W,UAAW,iBAAa,GACrC+wF,IACItjF,KACD+oW,EAAUx2W,UAAW,gBAAY,GACpC+wF,IACItjF,KACD+oW,EAAUx2W,UAAW,eAAW,GACnC+wF,IACItjF,KACD+oW,EAAUx2W,UAAW,iBAAa,GACrCw2W,EAAYzlR,IACRhjF,GACDyoW,IAEL1kQ,ICtgCEthB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAS5Dk5U,GAAY,YAGZC,GAAU,YACVx7J,GAAS,gBAITz3F,GAAW,aACXkzP,GAAY,cAEZ7kW,GAAU,wBAIV8kW,GAAO,cAKPC,GAA0B,SAAUhqR,GAEpC,SAASgqR,IACL,OAAkB,OAAXhqR,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBA6rF,GAAU6qR,EAAUhqR,GAIpBN,IACIllF,EAAS,KACVwvW,EAASr7W,UAAW,eAAW,GAClC+wF,IACIllF,EAAS,KACVwvW,EAASr7W,UAAW,UAAM,GAC7B+wF,IACIllF,GAAS,IACVwvW,EAASr7W,UAAW,iBAAa,GACpC+wF,IACI/jF,KAAequW,IAChBA,EAASr7W,UAAW,aAAS,GAChC+wF,IACIllF,EAAS,KACVwvW,EAASr7W,UAAW,YAAQ,GAC/B+wF,IACIllF,EAAS,KACVwvW,EAASr7W,UAAW,WAAO,GACvBq7W,GACTl2S,IAcEm2S,GAA6B,SAAUjqR,GAMvC,SAASiqR,EAAY3jW,EAAShS,GAC1B,IAAIjB,EAAQ2sF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAInD,OAHAD,EAAM6uC,UAAY,IAAI9W,OACtB/3B,EAAM62W,UACN72W,EAAM82W,WAAY,EACX92W,EAu+BX,OAj/BA8rF,GAAU8qR,EAAajqR,GAgBvBiqR,EAAYt7W,UAAUoX,UAAY,WAC9B,GAA6B,oBAAzBzS,KAAKgB,QAAQgC,QAA+B,CAC5ChD,KAAKgB,QAAQ0D,MAAM6pC,QAAU,OAC7BvuC,KAAKgB,QAAQ8C,UAAUS,OAAO,KAAOvE,KAAK+/B,iBAC1C//B,KAAKgB,QAAQ8C,UAAUS,OAAO,aAC9B,IAAIgO,EAAS1V,EAAS,gBAAiBmD,KAAKgB,SACxCmvI,EAAKnwI,KAAKmB,cAAc,MAC5BnB,KAAK82W,UAAY92W,KAAKgB,QACtBhB,KAAKgB,QAAUmvI,EACfnwI,KAAKgB,QAAQ8C,UAAUM,IAAI,aAC3BpE,KAAKgB,QAAQ8C,UAAUM,IAAI,KAAOpE,KAAK+/B,iBACvC3iC,EAAS,gBAAiBmV,EAAQvS,KAAKgB,SAClChB,KAAKgB,QAAQsC,KACdtD,KAAKgB,QAAQsC,GAAK9D,EAAYQ,KAAK+/B,oBAQ/C42U,EAAYt7W,UAAUsyG,OAAS,WAC3B3tG,KAAKmhH,cACLnhH,KAAKohF,cACLphF,KAAKykB,cAETkyV,EAAYt7W,UAAU8lH,YAAc,WAChC,IAAIpvG,EAAU/R,KAAK6gH,aACd9uG,IACDA,EAAU/R,KAAKmB,cAAc,OAASkC,UAAWsO,KACjDnR,SAASuL,KAAKpK,YAAYoQ,IAE1B/R,KAAKiT,UACLlB,EAAQjO,UAAUM,IAAIpE,KAAKiT,UAE3BjT,KAAKkT,WACLnB,EAAQjO,UAAUM,IAxGpB,SA0GFV,EAAW1D,KAAKgB,SAAW4Q,KAAQ,OAAQ0vH,SAAY,MACvDvvH,EAAQpQ,YAAY3B,KAAKgB,UAE7B21W,EAAYt7W,UAAU+lF,YAAc,WAC3BphF,KAAK67D,MAAMp/D,SACZuD,KAAK67D,MAAQs7E,GAAS0xD,sBAAsB7oM,KAAKgB,SACjDhB,KAAKgB,QAAQgB,UAAY,IAE7B,IAAImuI,EAAKnwI,KAAK0tJ,YAAY1tJ,KAAK67D,OAC/Bz2D,EAAO5G,MAAMnD,UAAUgG,MAAMC,KAAK6uI,EAAG/1H,UAAWpa,KAAKgB,SACrDhB,KAAKgB,QAAQ8C,UAAUM,IAAI,kBAE/BuyW,EAAYt7W,UAAUopB,WAAa,WAC/B,IAAI1S,EAAU/R,KAAK6gH,aACnB,GAAI7gH,KAAKmH,OAAQ,CAGb,IAAK,IAFDA,OAAS,EACT4vW,EAAcnxW,EAAU5F,KAAKmH,QACxBhL,EAAI,EAAG0F,EAAMk1W,EAAYt6W,OAAQN,EAAI0F,EAAK1F,IAC/CgL,EAAS4vW,EAAY56W,GACjBqP,GAAQub,MACR,IAAI00F,GAAMt0G,GAAUu1H,QAAS18H,KAAKoiW,aAAa9mW,KAAK0E,QAGpDuF,GAAanB,IAAI+C,EAAQ,cAAenH,KAAKg3W,aAAch3W,MAGnEA,KAAK27H,cAAgBx0H,EACrB,IAAK,IAAI/I,EAAK,EAAGyE,EAAK2W,GAAoBxZ,KAAK27H,eAAgBv9H,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACjF,IAAIw2G,EAAW/xG,EAAGzE,GAClBmH,GAAanB,IAAIwwG,EAAU,SAAU50G,KAAKq8H,cAAer8H,OAG5DwL,GAAQob,WACTrhB,GAAanB,IAAI2N,EAAS,YAAa/R,KAAKi3W,aAAcj3W,MAC1DuF,GAAanB,IAAI5D,SAAU,YAAaR,KAAKyhH,iBAAkBzhH,OAEnEA,KAAKk3W,qBAAuBl3W,KAAK+gH,aAAazlH,KAAK0E,MACnDuF,GAAanB,IAAI5D,SAAU,QAASR,KAAKk3W,qBAAsBl3W,MAC/D,IAAIg4G,GAAejmG,GACf+mG,UAAW94G,KAAKyuJ,gBAAgBnzJ,KAAK0E,MACrCw4G,YACIlC,UAAWggQ,GACXlgQ,QAjJF,UAkJET,MA3JJ,QA4JIQ,UAxJA,YAyJAE,WAxJC,aAyJDN,OA7JH,YAgKLprG,EAAaoH,GAAWrM,SAAU,kBAEtCixW,EAAYt7W,UAAUomH,iBAAmB,SAAU5gH,GAC3CgF,EAAQhF,EAAEsG,OAAQ,IAAMwK,MAAa3R,KAAK6gH,cAC1C7gH,KAAKm3W,UAAUn3W,KAAK42W,OAAOn6W,OAAQoE,IAG3C81W,EAAYt7W,UAAUozJ,gBAAkB,SAAU5tJ,GAE9C,OADAA,EAAE6kB,iBACM7kB,EAAE8uD,QACN,KAAK2mT,GACL,IAnKE,UAoKEt2W,KAAK2uJ,iBAAiB9tJ,GACtB,MACJ,IA1KK,aA2KDb,KAAKo3W,qBAAqBv2W,GAC1B,MACJ,IA9KI,YA+KAb,KAAKq3W,kBAAkBx2W,GACvB,MACJ,IArLA,QAsLIb,KAAKo3W,qBAAqBv2W,GAC1B,MACJ,IAvLC,SAwLGb,KAAKq3W,kBAAkBx2W,KAInC81W,EAAYt7W,UAAUszJ,iBAAmB,SAAU9tJ,GAC/C,IACIy2W,EADUt3W,KAAK6gH,aACDzmG,SAASpa,KAAK42W,OAAOn6W,QACnCoyJ,EAAahuJ,EAAE8uD,SAAW2mT,GAAY,EAAIgB,EAAI3wS,kBAAoB,EAClE4wS,EAAS1oN,EACT2oN,EAAMx3W,KAAKy3W,aAAaH,EAAKf,IAC7BiB,IACAD,EAASv3W,KAAK03W,OAAOJ,EAAKE,GAC1BA,EAAI1zW,UAAUS,OAAOgyW,IACrB11W,EAAE8uD,SAAW2mT,GAAYiB,IAAWA,IAChCA,KAAY12W,EAAE8uD,SAAW2mT,GAAYgB,EAAI3wS,mBAAqB,KAC9D4wS,EAAS1oN,IAGjB,IAAI8oN,EAAML,EAAIl9V,SAASm9V,GACvBA,EAASv3W,KAAKgvJ,UAAU2oN,EAAKJ,EAAQ12W,EAAE8uD,QACvC2nT,EAAIl9V,SAASm9V,GAAQzzW,UAAUM,IAAImyW,IACnCe,EAAIl9V,SAASm9V,GAAQr1W,SAEzBy0W,EAAYt7W,UAAU2zJ,UAAY,SAAU2oN,EAAK1lW,EAAO09C,GACpD,IACI2nT,EADUt3W,KAAK6gH,aACDzmG,SAASpa,KAAK42W,OAAOn6W,QAQvC,OAPIk7W,EAAI7zW,UAAUK,SAASqyW,KAAcmB,EAAI7zW,UAAUK,SAtMhD,eAsMsEwzW,EAAI7zW,UAAUK,SAASsyW,OAC9F9mT,IAAW2mT,IA/MR,eA+MuB3mT,EAA0B19C,IAAUA,OAEpE0lW,EAAML,EAAIl9V,SAASnI,IACXnO,UAAUK,SAASqyW,KAAcmB,EAAI7zW,UAAUK,SA1MhD,eA0MsEwzW,EAAI7zW,UAAUK,SAASsyW,OAChGxkW,EAAQjS,KAAKgvJ,UAAU2oN,EAAK1lW,EAAO09C,IAEhC19C,GAEX0kW,EAAYt7W,UAAU+7W,qBAAuB,SAAUv2W,GACnD,IAAI0M,EACAwE,EAAU/R,KAAK6gH,aACfy2P,EAAMvlW,EAAQqI,SAASpa,KAAK42W,OAAOn6W,QACnC+6W,EAAMx3W,KAAKy3W,aAAaH,EAAKf,IACjC,GAAIiB,EAAK,CACL,IAAID,EAASv3W,KAAK03W,OAAOJ,EAAKE,GAC1BZ,EAAS52W,KAAK42W,OAAOp8V,OAAO+8V,GAC5BtlW,OAAQ,EACR+L,EAAOhe,KAAKkuG,QAAQ0oQ,GACpB54V,EAAK69C,MAAMp/D,QACXuD,KAAK42W,OAAOpyW,KAAK+yW,GACjBv3W,KAAK43W,SAASJ,EAAKx5V,EAAM,KAAM,KAAMnd,GACrC22W,EAAI1zW,UAAUS,OAAOgyW,IACrBiB,EAAI1zW,UAAUM,IAAIk/G,IA1OtB,UA2OQziH,EAAE8uD,SACFpiD,GAAcvM,QAASw2W,EAAKx5V,KAAMA,GAClChe,KAAK0mB,QAAQ,SAAUnZ,IAE3BiqW,EAAIt1W,QACJo1W,EAAMvlW,EAAQqI,SAASpa,KAAK42W,OAAOn6W,QACnCwV,EAAQjS,KAAKgvJ,UAAUsoN,EAAIl9V,SAAS,GAAI,EAAGvZ,EAAE8uD,QAC7C2nT,EAAIl9V,SAASnI,GAAOnO,UAAUM,IAAImyW,IAClCe,EAAIl9V,SAASnI,GAAO/P,SAnPxB,UAsPQrB,EAAE8uD,SACF6nT,EAAI1zW,UAAUS,OAAOgyW,IACrBiB,EAAI1zW,UAAUM,IAAIk/G,IAClB/1G,GAAcvM,QAASw2W,EAAKx5V,KAAMA,GAClChe,KAAK0mB,QAAQ,SAAUnZ,GACvBvN,KAAKm3W,UAAU,KAAMt2W,MAKrC81W,EAAYt7W,UAAUg8W,kBAAoB,SAAUx2W,GAChD,GAAIb,KAAK42W,OAAOn6W,OAAQ,CACpB,IAAIsV,EAAU/R,KAAK6gH,aACnB7gH,KAAKm3W,UAAUn3W,KAAK42W,OAAOn6W,OAAQoE,GACnC,IAAIy2W,EAAMvlW,EAAQqI,SAASpa,KAAK42W,OAAOn6W,QACnCo7W,EAAM73W,KAAKy3W,aAAaH,EAAKh0P,IAC7Bu0P,IACAA,EAAIr0W,aAAa,gBAAiB,SAClCq0W,EAAI/zW,UAAUS,OAAO++G,IACrBu0P,EAAI/zW,UAAUM,IAAImyW,IAClBsB,EAAI31W,aAzQP,WA6QGrB,EAAE8uD,QACF3vD,KAAKm3W,UAAU,KAAMt2W,IAIjC81W,EAAYt7W,UAAUghI,cAAgB,SAAUx7H,GAC5Cb,KAAKm3W,UAAU,KAAMt2W,IAEzB81W,EAAYt7W,UAAU+mW,aAAe,SAAUvhW,GAC3Cb,KAAK62W,WAAY,EACjB72W,KAAKg3W,aAAan2W,EAAEi8G,gBAExB65P,EAAYt7W,UAAU27W,aAAe,SAAUn2W,GAC3CA,EAAE6kB,iBACF1lB,KAAKm3W,UAAU,KAAMt2W,GACjBb,KAAKqtJ,QAAQxsJ,EAAEsG,UACXtG,EAAEu/D,eACFpgE,KAAK43W,SAAS,KAAM,KAAM/2W,EAAEu/D,eAAe,GAAGl0D,MAAQ,EAAGrL,EAAEu/D,eAAe,GAAGt0D,MAAQ,EAAGjL,GAGxFb,KAAK43W,SAAS,KAAM,KAAM/2W,EAAEqL,MAAQ,EAAGrL,EAAEiL,MAAQ,EAAGjL,KAOhE81W,EAAYt7W,UAAU4G,MAAQ,WAC1BjC,KAAKm3W,aAETR,EAAYt7W,UAAU87W,UAAY,SAAUW,EAASj3W,GAGjD,QAFgB,IAAZi3W,IAAsBA,EAAU,QAC1B,IAANj3W,IAAgBA,EAAI,MACpBb,KAAK+3W,gBAOL,IAAK,IAND5nO,OAAK,EACLnyH,OAAO,EACP69C,OAAQ,EACRy4D,OAAY,EACZg7B,OAAkB,EAClBv9I,EAAU/R,KAAK6gH,aACVjxG,EAAMmC,EAAQ40D,kBAAmB/2D,EAAMkoW,EAASloW,IAErDisD,GADA79C,EAAOhe,KAAK42W,OAAOn6W,OAASuD,KAAKkuG,QAAQluG,KAAK42W,QAAU,MACzC54V,EAAK69C,MAAQ77D,KAAK67D,MAEjCyzF,GAAoBtuJ,QADpBmvI,EAAKp+H,EAAQqI,SAASxK,EAAM,GACKq8L,WAAYjuL,EAAM69C,MAAOA,EAAOv/D,MAAOuE,EAAGw3B,QAAQ,GACnFr4B,KAAK0mB,QAAQ,cAAe4oI,GACvBA,EAAgBj3H,SACjBr4B,KAAKg4W,gBAAgB7nO,GAAI,GACzBnwI,KAAK42W,OAAOn6W,OAASq7W,EAAUA,EAAU,EAAIA,EAC7CxjP,GAActzH,QAASmvI,EAAI87D,WAAYjuL,EAAM69C,MAAOA,GACpD77D,KAAK0mB,QAAQ,UAAW4tG,KAKxCqiP,EAAYt7W,UAAU08W,cAAgB,WAClC,OAAQ/3W,KAAK42W,OAAOn6W,OAAS,GAAMuD,KAAKgB,QAAQ8C,UAAUK,SAAS,kBAAoBM,EAAUzE,KAAKgB,SAASsqH,WAEnHqrP,EAAYt7W,UAAUgyJ,QAAU,SAAUlmJ,GACtC,IAAIkmJ,GAAU,EACd,GAAIrtJ,KAAK2nC,OAAQ,CACb0lH,GAAU,EAEV,IAAK,IADD1lH,EAAS3nC,KAAK2nC,OAAOzqC,MAAM,KACtBf,EAAI,EAAG0F,EAAMsF,EAAOrD,UAAUrH,OAAQN,EAAI0F,EAAK1F,IACpD,GAAIwrC,EAAOppC,QAAQ4I,EAAOrD,UAAU3H,KAAO,EAAG,CAC1CkxJ,GAAU,EACV,OAIZ,OAAOA,GAUXspN,EAAYt7W,UAAUqG,KAAO,SAAUgL,EAAKF,EAAMrF,GAC9CnH,KAAK43W,SAAS,KAAM,KAAMlrW,EAAKF,EAAM,KAAMrF,IAE/CwvW,EAAYt7W,UAAUu8W,SAAW,SAAUnnO,EAAIzyH,EAAMtR,EAAKF,EAAM3L,EAAGsG,QACnD,IAARuF,IAAkBA,EAAM,QACf,IAATF,IAAmBA,EAAO,QACpB,IAAN3L,IAAgBA,EAAI,WACT,IAAXsG,IAAqBA,EAASnH,KAAK27H,eACvC,IAAIwU,EAEAp+H,EAAU/R,KAAK6gH,aACnB,GAAI4vB,EAAI,CAEJ,GADAN,EAAKnwI,KAAK0tJ,YAAY1vI,EAAK69C,OACvBrwD,GAAQob,SAAU,CAClB7U,EAAQm/H,UAAUxsI,MAAM6pC,QAAU,OAClC,IAAI/xC,GAASsyB,KAAM9Q,EAAK8Q,KAAMqmD,QAAS8iS,sBACnCC,EAAQ,IAAIxB,GAAS12W,KAAK67D,MAAM,GAAI,KAAMr/D,GAAM,GAChD27W,EAAMn4W,KAAK0tJ,aAAawqN,IAAQ99V,SAAS,GAC7C+9V,EAAIr0W,UAAUM,IAAI22M,IAClB5qE,EAAGjrI,aAAaizW,EAAKhoO,EAAG/1H,SAAS,IAErC+1H,EAAGzrI,MAAMs/D,OAAShkE,KAAKgB,QAAQ0D,MAAMs/D,OACrCjyD,EAAQpQ,YAAYwuI,QAGpBA,EAAKnwI,KAAKgB,SACP0D,MAAMs/D,OAAShqD,GAAiB7S,GAAkBnH,KAAKgB,SAASkM,WAE9DlN,KAAK80E,SAAS27D,EAAKA,EAAGntI,GAAK,MAAM,GAC1C,IACIiK,GAAcvM,QAASmvI,EAAIt0E,MADnB40E,EAAKzyH,EAAK69C,MAAQ77D,KAAK67D,MACUowI,WAAYjuL,EAAM1hB,MAAOuE,EAAGw3B,QAAQ,GACjFr4B,KAAK0mB,QAAQ,aAAcnZ,GACvBA,EAAU8qB,OACVr4B,KAAK42W,OAAOj+M,OAGZ34J,KAAK6Y,YAAY43H,EAAIN,EAAIzjI,EAAKF,GAC9BxM,KAAKg4W,gBAAgB7nO,KAG7BwmO,EAAYt7W,UAAUwd,YAAc,SAAU43H,EAAIN,EAAIzjI,EAAKF,GAGvD,GADAxM,KAAKo4W,gBAAgBjoO,GACjBA,IAAOnwI,KAAKgB,QAAS,CAKrB,IAJIq3W,EAAU3gW,GAAUy4H,EAAI,KAAM3jI,EAAME,IAC5BnO,QAAQ,UAAY,IAC5BiO,GAAc2jI,EAAGvrI,aAEjByzW,EAAQ95W,QAAQ,WAAa,EAAG,CAEhCmO,GADIf,EAASsK,GAAIk6H,EAAI,MAAQ/5H,GAAG,EAAOC,GAAG,IAAU3J,IAAKA,EAAKF,KAAMA,KACvDE,IAAM,GAGvB,IADA2rW,EAAU3gW,GAAUy4H,EAAI,KAAM3jI,EAAME,IACxBnO,QAAQ,SAAW,EAAG,CAE9BiO,GADIb,EAASsK,GAAIk6H,EAAI,MAAQ/5H,GAAG,EAAMC,GAAG,IAAW3J,IAAKA,EAAKF,KAAMA,KACtDA,WAIlB,GAAIhB,GAAQob,SACRla,EAAMkqB,OAAO52B,KAAKgB,QAAQ0D,MAAMgI,IAAI6C,QAnBnC,KAmB+C,KAChD/C,EAAOoqB,OAAO52B,KAAKgB,QAAQ0D,MAAM8H,KAAK+C,QApBrC,KAoBiD,SAEjD,CACD,IACI5D,EACJe,GADIf,EAAS2I,GAAkBm8H,EADvBzwI,KAAKkT,UAAY,OAAS,QACI,QACzBxG,IACbF,EAAOb,EAAOa,KACd,IAAI6rW,EACAC,GADAD,EAAU3gW,GAAUy4H,EAAI,KAAMnwI,KAAKkT,UAAY1G,EAAO2jI,EAAGvrI,YAAc4H,EAAME,IACxDnO,QAAQ,SAAW,GAAK85W,EAAQ95W,QAAQ,UAAY,EACzE+5W,IAEA9rW,GADAb,EAAS2I,GAAkBm8H,EAAIzwI,KAAKkT,UAAY,QAAU,OAAQ,QACpD1G,OAEdxM,KAAKkT,WAAaolW,KAClB9rW,EAAQxM,KAAKkT,WAAaolW,EAAc9rW,EAAOA,EAAO2jI,EAAGvrI,aAEzDyzW,EAAQ95W,QAAQ,WAAa,IAE7BmO,GADAf,EAASsK,GAAIk6H,EAAI,MAAQ/5H,GAAG,EAAOC,GAAG,IAAU3J,IAAKA,EAAKF,KAAMA,KACnDE,KAIzB1M,KAAKo4W,gBAAgBjoO,GAAI,GACzBA,EAAGzrI,MAAMgI,IAAMA,EA3CN,KA4CTyjI,EAAGzrI,MAAM8H,KAAOA,EA5CP,MA8CbmqW,EAAYt7W,UAAU+8W,gBAAkB,SAAUjoO,EAAI1rI,QAChC,IAAdA,IAAwBA,GAAY,GACxC0rI,EAAGzrI,MAAMC,WAAaF,EAAY,SAAW,GAC7C0rI,EAAGzrI,MAAM6pC,QAAU9pC,EAAY,QAAU,QAE7CkyW,EAAYt7W,UAAUqyJ,YAAc,SAAU7xF,GAC1C,IAAI97D,EAAQC,KACR2tJ,EAAW3tJ,KAAKu4W,SAAS18S,EAAO,WAChC00J,GACA5iE,SAAUA,EACV/6I,WAAY,OACZo0L,aAAc,SAAU/mM,GACfA,EAAK86F,QAAQz3F,KACdrD,EAAK86F,QAAQz3F,GAAK9D,EAAY,aAElCS,EAAK86F,QAAQxjB,gBACT3lE,KAAM,WACN0vH,SAAU,OAGlB6lE,YAAa,SAAUlnM,GAQnB,GAPIA,EAAK86F,QAAQ8yD,YACb5tJ,EAAK+d,KAAKla,UAAUM,IAAIoyW,IACxBv2W,EAAK+d,KAAKtS,gBAAgB,UAE1BiiJ,GAAa1tJ,EAAK86F,QAAQ5lB,SAAYl1E,EAAK86F,QAAQ8yD,WACnD5tJ,EAAK+d,KAAKla,UAAUM,IAAI,eAExBnE,EAAK86F,QAAQl/B,OAAS57D,EAAK86F,QAAQl/B,MAAMp/D,OAAQ,CACjD,IAAIynE,EAAOnkE,EAAMoB,cAAc,QAAUkC,UAAW40W,oBACpDh4W,EAAK+d,KAAKrc,YAAYuiE,GACtBjkE,EAAK+d,KAAKxa,aAAa,gBAAiB,QACxCvD,EAAK+d,KAAKxa,aAAa,gBAAiB,SACxCvD,EAAK+d,KAAKtS,gBAAgB,QAC1BzL,EAAK+d,KAAKla,UAAUM,IAAI,qBAE5B,IAAImJ,GAAcyQ,KAAM/d,EAAK86F,QAAS/5F,QAASf,EAAK+d,MACpDje,EAAM2mB,QAAQ,mBAAoBnZ,KAGtC4iI,EAAKgH,GAASkzD,WAAWrqM,KAAKmB,cAAenB,KAAKw4W,YAAY38S,EAAMx6D,SAAUkvN,GAAiB,GAEnG,OADApgF,EAAG3sI,aAAa,WAAY,KACrB2sI,GAEXwmO,EAAYt7W,UAAUm9W,YAAc,SAAU38S,GAG1C,IAAK,IAFD79C,EACAy6V,KACKt8W,EAAI,EAAG0F,EAAMg6D,EAAMp/D,OAAQN,EAAI0F,EAAK1F,IACzC6hB,EAAO69C,EAAM1/D,GAAG8G,WAChBw1W,EAAUj0W,KAAKwZ,GAEnB,OAAOy6V,GAEX9B,EAAYt7W,UAAU47W,aAAe,SAAUp2W,GAC3C,IAAIkR,EAAU/R,KAAK6gH,aACfmc,EAAOn8H,EAAEsG,OACTwwW,EAAM33W,KAAKkvJ,MAAMlyB,GACrB,GAAI26O,GAAO9xW,EAAQ8xW,EAAK,IAAMhmW,IAAU,CACpC,IAAI6lW,EAAM/xW,EAAO,IAAM8wW,GAASxkW,GAC5BylW,GACAA,EAAI1zW,UAAUS,OAAOgyW,IAEzBoB,EAAI7zW,UAAUM,IAAImyW,IACbv2W,KAAK04W,iBACN14W,KAAK+gH,aAAalgH,KAI9B81W,EAAYt7W,UAAUk9W,SAAW,SAAU18S,EAAOqC,GAC9C,IAAK,IAAI/hE,EAAI,EAAG0F,EAAMg6D,EAAMp/D,OAAQN,EAAI0F,EAAK1F,IACzC,GAAI0/D,EAAM1/D,GAAG+hE,GACT,OAAO,EAGf,OAAO,GAEXy4S,EAAYt7W,UAAUwlH,WAAa,WAC/B,OAAOh7G,EAAQ7F,KAAKgB,QAAS,IAAM2Q,KAEvCglW,EAAYt7W,UAAU0lH,aAAe,SAAUlgH,GAC3C,GAAIb,KAAK62W,UACL72W,KAAK62W,WAAY,MAEhB,CACD,IAAI9kW,EAAU/R,KAAK6gH,aACfmc,EAAOn8H,EAAEsG,OACTwwW,EAAM33W,KAAKkvJ,MAAMlyB,GACjB27O,EAAahB,EAAM9xW,EAAQ8xW,EAAK,IAAMhmW,IAAW,KACjDinW,EAAWjB,GAAOgB,GAAc5mW,EAAQ5M,kBAAkB7B,KAAOq1W,EAAWxzW,kBAAkB7B,GAClG,GAAIs1W,GAAuB,UAAX/3W,EAAE6F,OAAqBixW,EAAI7zW,UAAUK,SAAS42M,IAAS,CACnE/6M,KAAK64W,cAAclB,GACnB,IAAIf,EAAS52W,KAAK80E,SAAS6iS,EAAIr0W,IAAI,GAE/BiK,GAAcvM,QAAS22W,EAAK35V,KAD5BA,EAAOhe,KAAKkuG,QAAQ0oQ,IAExB52W,KAAK0mB,QAAQ,SAAUnZ,GAE3B,GAAIqrW,IAAwB,cAAX/3W,EAAE6F,MAAwB8E,GAAQob,UAAY5mB,KAAK04W,iBAAkB,CAClF,IAAIvoO,OAAK,EACT,GAAIwnO,EAAI7zW,UAAUK,SAAS42M,IAAS,CAChC5qE,EAAKp+H,EAAQqI,SAASpa,KAAK42W,OAAOn6W,OAAS,GAC3CuD,KAAKg4W,gBAAgB7nO,IACjB0nO,EAAM73W,KAAKy3W,aAAatnO,EAAI7sB,MAE5Bu0P,EAAI/zW,UAAUS,OAAO++G,IAEzBj+G,EAAOsyW,EAAIl3W,YACXT,KAAK42W,OAAOj+M,WAGZ,IAAKg/M,EAAI7zW,UAAUK,SAASqyW,IAAY,CACpC,IAAIsC,GAAc,EACdxB,EAAMK,EAAIl3W,WACVs4W,EAAS/4W,KAAK03W,OAAOJ,EAAKK,GAC9B,IAAKnsW,GAAQob,SAAU,CACnB,IAAIoyV,EAASh5W,KAAK03W,OAAO3lW,EAASulW,GAIlC,GAHIt3W,KAAK42W,OAAOoC,KAAYD,IACxBD,GAAc,GAEdE,IAAWh5W,KAAK42W,OAAOn6W,SAAsB,cAAXoE,EAAE6F,MAAwBoyW,GAAc,CAC1E,IAAIjB,GAAAA,EAAM73W,KAAKy3W,aAAaH,EAAKh0P,MAE7Bu0P,EAAI/zW,UAAUS,OAAO++G,IAEzBtjH,KAAKm3W,UAAU6B,EAAS,EAAGn4W,IAGnC,GAAIi4W,EAAa,CACb,IACI96V,EADAmN,EAAMnrB,KAAK42W,OAAOp8V,OAAOu+V,IACzB/6V,EAAOhe,KAAKkuG,QAAQ/iF,IACf0wC,MAAMp/D,QACI,cAAXoE,EAAE6F,MACF1G,KAAK64W,cAAclB,GAEvBA,EAAIn0W,aAAa,gBAAiB,QAClCxD,KAAK42W,OAAOpyW,KAAKu0W,GACjB/4W,KAAK43W,SAASD,EAAK35V,EAAM,KAAM,KAAMnd,IAGtB,cAAXA,EAAE6F,MACF1G,KAAKm3W,UAAU,KAAMt2W,SAQpB,OAAjBm8H,EAAKh6H,SAAoBg6H,EAAK3oH,gBAAkBtC,GAC3C4lW,GAAQA,EAAIh1W,cAAc,aAC3B3C,KAAKm3W,UAAU,KAAMt2W,KAMzC81W,EAAYt7W,UAAUw9W,cAAgB,SAAUpoO,GAC5C,IAAIonO,EAAM73W,KAAKy3W,aAAahnO,EAAGp8H,cAAeivG,IAC1Cu0P,GACAA,EAAI/zW,UAAUS,OAAO++G,IAEzBmtB,EAAG3sI,UAAUS,OAAOgyW,IACpB9lO,EAAG3sI,UAAUM,IAAIk/G,KAErBqzP,EAAYt7W,UAAUo8W,aAAe,SAAUtnO,EAAI8oO,GAC/C,IAAK,IAAI98W,EAAI,EAAG0F,EAAMsuI,EAAG/1H,SAAS3d,OAAQN,EAAI0F,EAAK1F,IAC/C,GAAIg0I,EAAG/1H,SAASje,GAAG2H,UAAUK,SAAS80W,GAClC,OAAO9oO,EAAG/1H,SAASje,GAG3B,OAAO,MAEXw6W,EAAYt7W,UAAU6yG,QAAU,SAAU0oQ,GAEtC,IAAIzrV,GADJyrV,EAASA,EAAOv1W,SACCs3J,MAEjB,OADY34J,KAAK8gP,SAAS81H,GACbzrV,IAEjBwrV,EAAYt7W,UAAUylP,SAAW,SAAU81H,GAEvC,IAAK,IADD/6S,EAAQ77D,KAAK67D,MACR1/D,EAAI,EAAGA,EAAIy6W,EAAOn6W,OAAQN,IAC/B0/D,EAAQA,EAAM+6S,EAAOz6W,IAAI0/D,MAE7B,OAAOA,GAEX86S,EAAYt7W,UAAUq8W,OAAS,SAAUvnO,EAAIM,EAAIyoO,QAC7B,IAAZA,IAAsBA,GAAU,GACpC,IAAI/tV,EAAM3sB,MAAMnD,UAAUkD,QAAQ+C,KAAK6uI,EAAG/1H,SAAUq2H,GAIpD,OAHIyoO,GAAW/oO,EAAG/1H,SAAS,GAAGtW,UAAUK,SAAS42M,KAC7C5vL,IAEGA,GAEXwrV,EAAYt7W,UAAU6zJ,MAAQ,SAAUxsJ,GACpC,MAAqB,OAAjBA,EAAKM,QACEN,EAEJmD,EAAQnD,EAAM,OASzBi0W,EAAYt7W,UAAU0tF,kBAAoB,SAAUiF,EAASC,GAEzD,IAAK,IADDl8E,EAAU/R,KAAK6gH,aACVziH,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,GAAU5vF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,WACG6vF,EAAQh7E,UACRlB,EAAQjO,UAAUS,OAAO0pF,EAAQh7E,UAEjC+6E,EAAQ/6E,UACRlB,EAAQjO,UAAUM,IAAI4pF,EAAQ/6E,UAElC,MACJ,IAAK,YACDlB,EAAQjO,UAAUm/G,OA1oB5B,SA2oBU,MACJ,IAAK,SACDjjH,KAAKm3W,YACLn3W,KAAK2nC,OAASqmD,EAAQrmD,OACtB,MACJ,IAAK,kBACD3nC,KAAKogH,eACLpgH,KAAK04W,gBAAkB1qR,EAAQ0qR,gBAC/B14W,KAAKykB,aACL,MACJ,IAAK,SACDzkB,KAAKogH,eACLpgH,KAAKmH,OAAS6mF,EAAQ7mF,OACtBnH,KAAKykB,aACL,MACJ,IAAK,QAKD,IAAK,IAJD0G,OAAM,EACNyrV,OAAS,EACT54V,OAAO,EACP1gB,EAAOgB,OAAOhB,KAAK0wF,EAAQnyB,OACtB1/D,EAAI,EAAGA,EAAImB,EAAKb,OAAQN,KAC7By6W,EAAS52W,KAAKm5W,oBAAoBnrR,KAAap3D,OAAOt5B,EAAKnB,MAChDM,QAAUuD,KAAK6gH,aAAazmG,SAAS3d,SAC5C0uB,EAAMyrV,EAAOj+M,MACb36I,EAAOhe,KAAK8gP,SAAS81H,GACrB52W,KAAKo5W,aAAap7V,EAAKmN,IAAOnN,EAAKmN,GAAK2D,MACxC9uB,KAAKuuD,WAAWvwC,EAAM44V,EAAQzrV,IAElCyrV,EAAOn6W,OAAS,KAMpCk6W,EAAYt7W,UAAU89W,oBAAsB,SAAUnrR,EAAS/7E,EAAOkZ,GAClElZ,EAAMzN,KAAK2mB,GACX,IAAI9tB,EAAMiB,OAAOhB,KAAK0wF,EAAQnyB,MAAM1wC,IAAMwtI,MAC1C,GAAY,UAARt7J,EAAiB,CACjB,IAAI2gB,EAAOgwE,EAAQnyB,MAAM1wC,GACzBnrB,KAAKm5W,oBAAoBn7V,EAAM/L,EAAO2kB,OAAOt4B,OAAOhB,KAAK0gB,EAAK69C,OAAO88F,YAGzD,kBAARt7J,GAA2B4U,EAAMxV,OAAS,GAC1CwV,EAAM0mJ,MAGd,OAAO1mJ,GAEX0kW,EAAYt7W,UAAUkzD,WAAa,SAAUvwC,EAAM44V,EAAQzrV,GACvDnN,EAAKyK,OAAO0C,EAAK,GACjB,IAAIkuV,EAAMr5W,KAAK6gH,aAAazmG,SACxBw8V,EAAOn6W,OAAS48W,EAAI58W,QACpB4I,EAAOg0W,EAAIzC,EAAOn6W,QAAQ2d,SAAS+Q,KAO3CwrV,EAAYt7W,UAAU+kH,aAAe,WACjC,IAAIruG,EAAU/R,KAAK6gH,aACnB,GAAI7gH,KAAKmH,OAAQ,CAIb,IAAK,IAHDA,OAAS,EACTs1H,OAAc,EACds6O,EAAcnxW,EAAU5F,KAAKmH,QACxBhL,EAAI,EAAG0F,EAAMk1W,EAAYt6W,OAAQN,EAAI0F,EAAK1F,IAC/CgL,EAAS4vW,EAAY56W,GACjBqP,GAAQub,OACR01G,EAAcj6H,EAAY2E,EAAQs0G,MAE9BghB,EAAYnqH,UAIhB/M,GAAahB,OAAO4C,EAAQ,cAAenH,KAAKg3W,cAGxD,IAAK,IAAI54W,EAAK,EAAGyE,EAAK2W,GAAoBxZ,KAAK27H,eAAgBv9H,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACjF,IAAIywH,EAAWhsH,EAAGzE,GAClBmH,GAAahB,OAAOsqH,EAAU,SAAU7uH,KAAKq8H,gBAGhD7wH,GAAQob,WACTrhB,GAAahB,OAAOwN,EAAS,YAAa/R,KAAKi3W,cAC/C1xW,GAAahB,OAAO/D,SAAU,YAAaR,KAAKyhH,mBAEpDl8G,GAAahB,OAAO/D,SAAU,QAASR,KAAKk3W,sBAC5C,IAAI9vP,EAAiB5kH,EAAYuP,EAASimG,IACtCoP,GACAA,EAAe90G,WAGvBqkW,EAAYt7W,UAAU28W,gBAAkB,SAAU7nO,EAAImpO,GAClD,IAAIv5W,EAAQC,UACO,IAAfs5W,IAAyBA,GAAa,GACJ,SAAlCt5W,KAAK02H,kBAAkBn/F,QAAsB+hV,EAI7Ct5W,KAAK4uC,UAAU7W,QAAQo4G,GACnBp5G,KAAM/2B,KAAK02H,kBAAkBn/F,OAC7BrsB,SAAUlL,KAAK02H,kBAAkBxrH,SACjC0iF,eAAgB5tF,KAAK02H,kBAAkB12G,OACvCpB,MAAO,SAAU5L,GACbA,EAAQhS,QAAQ0D,MAAM6pC,QAAU,QAChCv7B,EAAQhS,QAAQ0D,MAAMkoD,UAAY55C,EAAQhS,QAAQ4K,wBAAwBmK,OAAS,MAEvFiJ,IAAK,SAAUhM,GACXjT,EAAMif,IAAIhM,EAAQhS,QAASs4W,MAZnCt5W,KAAKgf,IAAImxH,EAAImpO,IAiBrB3C,EAAYt7W,UAAU2jB,IAAM,SAAUmxH,EAAImpO,GACtC,GAAIA,EAAY,CACZnpO,EAAGzrI,MAAM6pC,QAAU,QACnB4hG,EAAGzrI,MAAMkoD,UAAY,GACrB,IAAI5uC,EAAOhe,KAAK42W,OAAOn6W,OAASuD,KAAKkuG,QAAQluG,KAAK42W,QAAU,KACxDrpW,GAAcvM,QAASmvI,EAAI87D,WAAYjuL,EAAM69C,MAAO79C,EAAOA,EAAK69C,MAAQ77D,KAAK67D,OAEjF,GADA77D,KAAK0mB,QAAQ,SAAUnZ,GACnB4iI,EAAGxtI,cAAc,IAAM4zW,IACvBpmO,EAAGxtI,cAAc,IAAM4zW,IAASr0W,YAE/B,CACD,IAAI8B,OAAM,GACVA,EAAMhE,KAAK6gH,aAAazmG,SAASpa,KAAK03W,OAAO13W,KAAK6gH,aAAcsvB,GAAM,IAElEnsI,EAAIrB,cAAc,IAAM2gH,IAAUphH,QAGlClC,KAAKgB,QAAQkB,cAKrB,GAAIiuI,IAAOnwI,KAAKgB,QAAS,CACrB,IAAIw2W,EAAMx3W,KAAKy3W,aAAaz3W,KAAKgB,QAASu1W,IACtCiB,GACAA,EAAI1zW,UAAUS,OAAOgyW,IAEzB,IAAIsB,EAAM73W,KAAKy3W,aAAaz3W,KAAKgB,QAASsiH,IACtCu0P,GACAA,EAAI/zW,UAAUS,OAAO++G,IAEzB6sB,EAAGzrI,MAAM6pC,QAAU,YAGnBlpC,EAAO8qI,IAQnBwmO,EAAYt7W,UAAU+yG,eAAiB,WACnC,MAAO,IAOXuoQ,EAAYt7W,UAAU0kC,cAAgB,WAClC,MAAO,eAEX42U,EAAYt7W,UAAUy5E,SAAW,SAAUt4E,EAAM+8W,EAAY19S,EAAO+6S,EAAQ4C,QAC1D,IAAV39S,IAAoBA,EAAQ77D,KAAK67D,YACtB,IAAX+6S,IAAqBA,WACN,IAAf4C,IAAyBA,GAAa,GAE1C,IAAK,IADDx7V,EACK7hB,EAAI,EAAG0F,EAAMg6D,EAAMp/D,OAAQN,EAAI0F,EAAK1F,IAAK,CAE9C,GADA6hB,EAAO69C,EAAM1/D,IACRo9W,EAAav7V,EAAK1a,GAAK0a,EAAK8Q,QAAUtyB,EAAM,CAC7Co6W,EAAOpyW,KAAKrI,GACZ,MAEC,GAAI6hB,EAAK69C,MAAMp/D,OAAQ,CAExB,IAAmC,KADnCm6W,EAAS52W,KAAK80E,SAASt4E,EAAM+8W,EAAYv7V,EAAK69C,MAAO+6S,GAAQ,IAClDA,EAAOn6W,OAAS,GAKtB,CACDm6W,EAAO17W,QAAQiB,GACf,MANIA,IAAM0F,EAAM,GACZ+0W,EAAOj+M,WASXx8J,IAAM0F,EAAM,GACZ+0W,EAAOpyW,MAAM,GAIzB,OAASg1W,IAA6B,IAAf5C,EAAO,GAAkBA,MASpDD,EAAYt7W,UAAU+7E,YAAc,SAAUvb,EAAO57B,EAAQs5U,QAC1C,IAAXt5U,IAAqBA,GAAS,GAMlC,IAAK,IALDkwG,EACAhlH,EACAyrV,EACA92P,EAr1BG,aAs1BH/tG,EAAU/R,KAAK6gH,aACV1kH,EAAI,EAAGA,EAAI0/D,EAAMp/D,OAAQN,IAE9BgvB,GADAyrV,EAAS52W,KAAK80E,SAASjZ,EAAM1/D,GAAIo9W,IACpB5gN,OACbxoB,EAAKp+H,EAAQqI,SAASw8V,EAAOn6W,WAErBwjC,EACIz0B,GAAQob,WAAaupH,EAAGrsI,UAAUK,SAAS,iBAC3CgsI,EAAG/1H,SAAS+Q,EAAM,GAAGrnB,UAAUS,OAAOu7G,GAGtCqwB,EAAG/1H,SAAS+Q,GAAKrnB,UAAUS,OAAOu7G,GAIlCt0G,GAAQob,WAAaupH,EAAGrsI,UAAUK,SAAS,iBAC3CgsI,EAAG/1H,SAAS+Q,EAAM,GAAGrnB,UAAUM,IAAI07G,GAGnCqwB,EAAG/1H,SAAS+Q,GAAKrnB,UAAUM,IAAI07G,KAYnD62P,EAAYt7W,UAAUo+W,UAAY,SAAU59S,EAAO09S,GAC/Cv5W,KAAK05W,cAAc79S,GAAO,EAAO09S,IAQrC5C,EAAYt7W,UAAUs+W,UAAY,SAAU99S,EAAO09S,GAC/Cv5W,KAAK05W,cAAc79S,GAAO,EAAM09S,IAEpC5C,EAAYt7W,UAAUq+W,cAAgB,SAAU79S,EAAO+9S,EAAQL,GAK3D,IAAK,IAJDppO,EACAl+H,EACA2kW,EACA7kW,EAAU/R,KAAK6gH,aACV1kH,EAAI,EAAGA,EAAI0/D,EAAMp/D,OAAQN,IAE9B8V,GADA2kW,EAAS52W,KAAK80E,SAASjZ,EAAM1/D,GAAIo9W,IAClB5gN,OACfxoB,EAAKp+H,EAAQqI,SAASw8V,EAAOn6W,WAErBm9W,EACIpuW,GAAQob,WAAaupH,EAAGrsI,UAAUK,SAAS,iBAC3CgsI,EAAG/1H,SAASnI,EAAQ,GAAGnO,UAAUM,IAAIqyW,IAGrCtmO,EAAG/1H,SAASnI,GAAOnO,UAAUM,IAAIqyW,IAIjCjrW,GAAQob,WAAaupH,EAAGrsI,UAAUK,SAAS,iBAC3CgsI,EAAG/1H,SAASnI,EAAQ,GAAGnO,UAAUS,OAAOkyW,IAGxCtmO,EAAG/1H,SAASnI,GAAOnO,UAAUS,OAAOkyW,MAYxDE,EAAYt7W,UAAU+zW,YAAc,SAAUvzS,EAAO09S,GAIjD,IAAK,IAHDpuV,EACAyrV,EACAiD,EACK19W,EAAI,EAAGA,EAAI0/D,EAAMp/D,OAAQN,IAE9BgvB,GADAyrV,EAAS52W,KAAK80E,SAASjZ,EAAM1/D,GAAIo9W,IACpB5gN,MACbkhN,EAAS75W,KAAK8gP,SAAS81H,GACvB52W,KAAKuuD,WAAWsrT,EAAQjD,EAAQzrV,IAUxCwrV,EAAYt7W,UAAU+9W,YAAc,SAAUv9S,EAAO/sC,EAAMyqV,GACvDv5W,KAAK85W,YAAYj+S,EAAO/sC,EAAMyqV,IASlC5C,EAAYt7W,UAAU6J,aAAe,SAAU22D,EAAO/sC,EAAMyqV,GACxDv5W,KAAK85W,YAAYj+S,EAAO/sC,EAAMyqV,GAAY,IAE9C5C,EAAYt7W,UAAUy+W,YAAc,SAAUj+S,EAAO/sC,EAAMyqV,EAAYQ,QACnD,IAAZA,IAAsBA,GAAU,GAOpC,IAAK,IANDtpO,EACAtlH,EACAyrV,EACAiD,EACAG,EAEK79W,EAAI,EAAGA,EAAI0/D,EAAMp/D,OAAQN,IAAK,CAEnCgvB,GADAyrV,EAAS52W,KAAK80E,SAAShmD,EAAMyqV,IAChB5gN,MACbkhN,EAAS75W,KAAK8gP,SAAS81H,GACvBoD,EAAW,IAAItD,GAASmD,EAAO,GAAI,QAASh+S,EAAM1/D,IAAI,GACtD09W,EAAOpxV,OAAOsxV,EAAU5uV,EAAM,EAAIA,EAAK,EAAG6uV,GAC1C,IAAIX,EAAMr5W,KAAK6gH,aAAazmG,SACxBw8V,EAAOn6W,OAAS48W,EAAI58W,SACpB0uB,EAAM4uV,EAAU5uV,EAAM,EAAIA,EACfnrB,KAAKu4W,SAASsB,EAAQ,WACjCppO,EAAKzwI,KAAK0tJ,YAAYmsN,GAAQz/V,SAAS+Q,GACvCkuV,EAAIzC,EAAOn6W,QAAQyI,aAAaurI,EAAI4oO,EAAIzC,EAAOn6W,QAAQ2d,SAAS+Q,OAQ5EwrV,EAAYt7W,UAAUiX,QAAU,WAC5B,IAAIvS,EAAQC,KACR+R,EAAU/R,KAAK6gH,aACf9uG,IACA26E,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKogH,eACDpgH,KAAK82W,UACL92W,KAAK82W,UAAUpyW,MAAM6pC,QAAU,SAG/BvuC,KAAKm3W,YACLn3W,KAAKgB,QAAQgB,UAAY,IACxB,MAAO,OAAQ,UAAW,WAAW5C,QAAQ,SAAU/B,GACpD0C,EAAMiB,QAAQ0D,MAAM2lW,eAAehtW,MAEtC,OAAQ,WAAY,QAAS,SAAS+B,QAAQ,SAAU/B,IACZ,KAApC,QAAS,SAASkB,QAAQlB,IAAgB0C,EAAMiB,QAAQ6R,aAAaxV,IACtE0C,EAAMiB,QAAQ0K,gBAAgBrO,KAGtC0U,EAAQtR,WAAWyE,aAAalF,KAAKgB,QAAS+Q,IAElD1M,EAAO0M,KAGfq6E,IACIllF,EAAS,KACVyvW,EAAYt7W,UAAW,gBAAY,GACtC+wF,IACIllF,EAAS,KACVyvW,EAAYt7W,UAAW,cAAU,GACpC+wF,IACIllF,GAAS,IACVyvW,EAAYt7W,UAAW,uBAAmB,GAC7C+wF,IACI/jF,KAAequW,KAChBC,EAAYt7W,UAAW,aAAS,GACnC+wF,IACIllF,EAAS,KACVyvW,EAAYt7W,UAAW,cAAU,GACpC+wF,IACIllF,GAAWgE,SAAU,IAAK8U,OAAQ,OAAQuX,OAAQ,eACnDo/U,EAAYt7W,UAAW,yBAAqB,GAC/C+wF,IACItjF,KACD6tW,EAAYt7W,UAAW,wBAAoB,GAC9C+wF,IACItjF,KACD6tW,EAAYt7W,UAAW,kBAAc,GACxC+wF,IACItjF,KACD6tW,EAAYt7W,UAAW,cAAU,GACpC+wF,IACItjF,KACD6tW,EAAYt7W,UAAW,mBAAe,GACzC+wF,IACItjF,KACD6tW,EAAYt7W,UAAW,eAAW,GACrC+wF,IACItjF,KACD6tW,EAAYt7W,UAAW,cAAU,GACpCs7W,EAAcvqR,IACVhjF,GACDutW,IAELxpQ,ICpkCEthB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAS5D4zU,GAAa,eACbE,GAAc,YAGd3M,GAAW,SAGXgN,GAAa,WACb1P,GAAc,YACdoY,GAAa,WAIbC,GAAiB,eAIjBC,GAAW,aAGXC,GAAe,kBACfC,GAAc,iBAEdC,GAAe,kBAGfC,GAAe,aAGfC,GAAmC,SAAU9tR,GAE7C,SAAS8tR,IACL,OAAkB,OAAX9tR,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAU2uR,EAAmB9tR,GAI7BN,IACIllF,EAAS,gBACVszW,EAAkBn/W,UAAW,cAAU,GAC1C+wF,IACIllF,EAAS,MACVszW,EAAkBn/W,UAAW,gBAAY,GAC5C+wF,IACIllF,EAAS,SACVszW,EAAkBn/W,UAAW,cAAU,GACnCm/W,GACTh6S,IAEEi6S,GAAsC,SAAU/tR,GAEhD,SAAS+tR,IACL,OAAkB,OAAX/tR,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAU4uR,EAAsB/tR,GAIhCN,IACIrkF,GAAUwvB,OAAQ,cAAersB,SAAU,IAAK8U,OAAQ,QAAUw6V,KACnEC,EAAqBp/W,UAAW,gBAAY,GAC/C+wF,IACIrkF,GAAUwvB,OAAQ,eAAgBrsB,SAAU,IAAK8U,OAAQ,QAAUw6V,KACpEC,EAAqBp/W,UAAW,YAAQ,GACpCo/W,GACTj6S,IAKEk6S,GAAwB,SAAUhuR,GAElC,SAASguR,IACL,OAAkB,OAAXhuR,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAU6uR,EAAQhuR,GAIlBN,IACIllF,EAAS,KACVwzW,EAAOr/W,UAAW,YAAQ,GAC7B+wF,IACIllF,EAAS,KACVwzW,EAAOr/W,UAAW,eAAW,GAChC+wF,IACIllF,EAAS,SACVwzW,EAAOr/W,UAAW,oBAAgB,GAC9Bq/W,GACTl6S,IAKEm6S,GAAyB,SAAUjuR,GAEnC,SAASiuR,IACL,OAAkB,OAAXjuR,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAU8uR,EAASjuR,GAInBN,IACIrkF,KAAY2yW,KACbC,EAAQt/W,UAAW,cAAU,GAChC+wF,IACIllF,EAAS,KACVyzW,EAAQt/W,UAAW,eAAW,GACjC+wF,IACIllF,EAAS,KACVyzW,EAAQt/W,UAAW,gBAAY,GAClC+wF,IACIllF,GAAS,IACVyzW,EAAQt/W,UAAW,gBAAY,GAC3Bs/W,GACTn6S,IAaEo6S,GAAqB,SAAUluR,GAO/B,SAASkuR,EAAI5nW,EAAShS,GAClB,IAAIjB,EAAQ2sF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAuBnD,OAtBAD,EAAM6wH,MAAS75F,KAAM,YAAa7rB,SAAU,KAC5CnL,EAAM+iF,MAAS/rD,KAAM,UAAW7rB,SAAU,KAC1CnL,EAAMmvM,kBACNnvM,EAAM86W,QAAU,IAAI/iV,GAAU/3B,EAAMmvM,gBACpCnvM,EAAM6sD,UAAY,EAClB7sD,EAAM2gC,MAAQ,QACd3gC,EAAM6oC,UAAY,EAIlB7oC,EAAMy4G,YACF9C,IAAK,MACLQ,KAAM,OACNl3F,IAAK,MACL22F,MAAO,QACPt3E,MAAO,QACPm4E,OAAQ,SACRuN,SAAU,YACVC,UAAW,aACXF,OAAQ,UACRD,SAAU,aAEP9jH,EA+xCX,OA7zCA8rF,GAAU+uR,EAAKluR,GAoCfkuR,EAAIv/W,UAAUiX,QAAU,WACpB,IAAIvS,EAAQC,KASZ,GARKk1E,EAAMl1E,KAAK86W,QACZ96W,KAAK86W,MAAMxoW,UAEftS,KAAKogH,gBACJ,OAAQ,gBAAiB,wBAAyB,WAAY,oBAAoBhhH,QAAQ,SAAUipB,GACjGtoB,EAAMiB,QAAQ0K,gBAAgB2c,KAElCroB,KAAK+6W,qBACA/6W,KAAK64V,WAGL,CACD,IAAImiB,EAASv1W,EAAO,aAAyByrW,GAAalxW,KAAKgB,SAC/DhB,KAAKgB,QAAQ8C,UAAUS,OAjKhB,cAkKF2wE,EAAM8lS,KACPA,EAAOh5W,UAAYhC,KAAK4P,UAN5B5P,KAAKgB,QAAQgB,UAAY,GAS7B0qF,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAK0mB,QAAQ,cAMjBk0V,EAAIv/W,UAAUoX,UAAY,WACtB,IAAIw/V,EAASpsW,EAAQ7F,KAAKgB,QAAS,IAAMkwW,IACzClxW,KAAKi7W,UAAY,EACjBj7W,KAAKkyW,UAAW,EAChBlyW,KAAKk7W,SAAU,EACfl7W,KAAK2xH,YAAa,EAClB3xH,KAAKm7W,WAAY,EACjBn7W,KAAKo7W,kBACLp7W,KAAK+xW,eACA78R,EAAM+8R,KACPA,EAAO59V,cAAcvQ,UAAUM,IA1L5B,YA2LHpE,KAAKkyW,UAAW,GAEpB,IAAIn7U,EAAOvrB,GAAQqb,KAAKkQ,KACpBskV,EAAgB,SAATtkV,EAAmB,OAAmB,SAATA,EAAmB,SAAqB,WAATA,EAAqB,WAAa,GACzGguO,EAAS/kQ,KAAKgB,SAAWgV,MAASzT,EAAWvC,KAAKgW,OAAQD,OAAUxT,EAAWvC,KAAK+V,UACpF/V,KAAK2+H,YAAY3+H,KAAKgB,QAAShB,KAAKiT,UAAU,GAC9CvP,EAAW1D,KAAKgB,SAAW4Q,KAAM,UAAW0zG,gBAAiB,QAASO,wBAAyB,KAC/F7lH,KAAK2+H,YAAY3+H,KAAKgB,QAASq6W,GAAK,IAMxCT,EAAIv/W,UAAUsyG,OAAS,WACnB3tG,KAAKs7W,OAASt7W,KAAKmB,cAAc,QAAUkC,UAAWk4W,WAAkBrB,GAAgBz2W,OAASi9B,MAAO1gC,KAAK0gC,SAC7G1gC,KAAKw7W,kBACLx7W,KAAKykB,aACLzkB,KAAK2xH,YAAa,GAEtBipP,EAAIv/W,UAAUmgX,gBAAkB,WAC5B,IAAIx3W,EAAMhE,KAAKgB,QACf,GAAIhB,KAAK67D,MAAMp/D,OAAS,GAA6B,IAAxBuH,EAAIoW,SAAS3d,OACtCuH,EAAIrC,YAAY3B,KAAKmB,cAAc,OAASkC,UAAW6tW,MACvDlxW,KAAKy7W,eAAez7W,KAAK07W,gBAAiB17W,KAAKmB,cAAc,OAASkC,UAAW2tW,MACjFhxW,KAAK64V,YAAa,OAEjB,GAAI74V,KAAKgB,QAAQoZ,SAAS3d,OAAS,EAAG,CACvCuD,KAAK64V,YAAa,EAClB70V,EAAIF,UAAUM,IApNP,cAqNP,IAAI+hF,EAASniF,EAAIrB,cAAc,IAAMquW,IACjC7qR,GAAmC,WAAzBnmF,KAAK07W,iBACf17W,KAAKy7W,eAAez7W,KAAK07W,gBAAiBv1R,GAGlD,IAAKjR,EAAMzvE,EAAO,IAAMurW,GAAYhxW,KAAKgB,YAAck0E,EAAMzvE,EAAO,IAAMyrW,GAAalxW,KAAKgB,UAAW,CAOnG,GANAhB,KAAK27W,eACL37W,KAAK61E,QAAUpwE,EAAO,IAAMurW,GAAa,KAAOoJ,GAAcp6W,KAAKgB,SAC9Dk0E,EAAMl1E,KAAK61E,UACZlrE,EAAa3K,KAAK61E,SAAWnwE,SAAU,gBAE3C1F,KAAKy5H,gBACD7zH,EAAU,IAAMy0W,GAAar6W,KAAKgB,SAASvE,OAAS,EAAG,CACvDuD,KAAK61E,QAAUpwE,EAAO,IAAMurW,GAAa,KAAOoJ,GAAcp6W,KAAKgB,SACnEhB,KAAK47W,QAAU57W,KAAKmB,cAAc,OAASkC,UAAWw4W,kCACtD,IAAIC,EAASr2W,EAAO,qBAAsBzF,KAAK61E,SAC1CX,EAAM4mS,GAIP97W,KAAK61E,QAAQ3wE,aAAalF,KAAK47W,QAAS57W,KAAK61E,QAAQ94D,YAHrD++V,EAAO52W,aAAalF,KAAK47W,QAASE,EAAO/+V,YAK7C/c,KAAK+7W,kBAAiB,GACtB/7W,KAAKyF,OAAOzF,KAAKg8W,cAErBh8W,KAAKq+I,OAAOr+I,KAAKkT,aAGzB0nW,EAAIv/W,UAAUsgX,aAAe,WACzB,IAAI57W,EAAQC,KACRi8W,KAEJ,GADAj8W,KAAKm0W,OAAS1uW,EAAO,IAAMurW,GAAYhxW,KAAKgB,SACvChB,KAAK64V,WAGL,CAGD,IAAK,IAFD55U,EAAQjf,KAAKm0W,OAAO/5V,SAAS3d,OAC7By/W,KACK//W,EAAI,EAAGA,EAAI8iB,EAAO9iB,IACvB+/W,EAAS13W,KAAKxE,KAAKm0W,OAAO/5V,SAAS4D,KAAK7hB,GAAG6F,WAE3Cid,EAAQ,IACRjf,KAAKm0W,OAAOnyW,UAAY,GACxBhC,KAAKm0W,OAAOxyW,YAAY3B,KAAKmB,cAAc,OAASkC,UAlQpD,aAmQA64W,EAAS98W,QAAQ,SAAU4e,EAAM/L,GAC7BlS,EAAM6oC,UAAY32B,EAClB,IAAIqiJ,GACAjxJ,UAAWkhW,GAAUjhW,GAAIihW,UAAiBtyV,EAC1CxO,OAASmO,KAAM,MAAOuqW,gBAAiBjL,GAAc,IAAMj/V,EAAOs5G,gBAAiB,UAEnF6wP,EAAMr8W,EAAMoB,cAAc,QAC1BkC,UA9PT,aA8P8BrB,UAAWgc,EAAMva,OAASmO,KAAQ,kBACxD9P,UACCu6W,EAAOt8W,EAAMoB,cAAc,OAC3BkC,UA9PJ,cA8P8BrB,UAAWo6W,EAAMr8W,EAAMu7W,OAAOx5W,YACzDA,UACCmZ,EAAOlb,EAAMoB,cAAc,OAASkC,UAAW82W,GAAUn4W,UAAWq6W,EAAM54W,OAASmiH,SAAU,QACjGngH,EAAO,WAAiB1F,EAAMiB,SAASW,YAAY5B,EAAMoB,cAAc,MAAOmzJ,IAC9E1uJ,EAAU,UAAgB7F,EAAMiB,SAASiR,GAAOtQ,YAAYsZ,WAzBpEghW,EAAWj8W,KAAKs8W,YAAYt8W,KAAK67D,MAAO,GA6B5C77D,KAAK86W,MAAQ,IAAItV,IACbxvV,MAAO,OACPwwV,aAAcxmW,KAAKwmW,aACnB3qS,MAA4B,IAApBogT,EAASx/W,OAAgBw/W,KACjCM,QAASv8W,KAAK+gH,aAAazlH,KAAK0E,QAEpCA,KAAK86W,MAAM35W,cAAgBnB,KAAKmB,cAChCnB,KAAK86W,MAAMxsU,SAAStuC,KAAKm0W,QACzBzwW,EAAW1D,KAAKgB,SAAW4nW,mBAAoB,eAC/C5oW,KAAKw8W,eAAex8W,KAAKy8W,iBACzBz8W,KAAKgH,eAAgB00W,gBAAkB17W,KAAKgB,QAAQoZ,SAAS4D,KAAK,GAAGla,UAAUK,SAAS6sW,IAAe,MAAQ,WAAY,IAE/H4J,EAAIv/W,UAAUo+H,cAAgB,WAC1Bz5H,KAAKg7W,OAASv1W,EAAO,IAAMyrW,GAAalxW,KAAKgB,SAC7C,IAAI07W,EAAU92W,EAAU,IAAMy0W,GAAar6W,KAAKgB,SAChD,GAAIhB,KAAK64V,WAAY,CACjB74V,KAAK4P,IAAO5P,KAAKg7W,OAAO5gW,SAAS3d,OAAS,EAAKuD,KAAKg7W,OAAOh5W,UAAY,GAEvE,IAAK,IADD63O,EAAW75O,KAAKg7W,OAAO5gW,SAClBje,EAAI,EAAGA,EAAIugX,EAAQjgX,OAAQN,IAC5B09O,EAASp9O,OAAS,GAAKN,IACvB09O,EAAS77N,KAAK7hB,GAAGkH,WAAakhW,GAC9B7gW,EAAWm2O,EAAS77N,KAAK7hB,IAAMyV,KAAQ,WAAY8rD,kBAAmB6mS,UAAiBpoW,IACvF09O,EAAS77N,KAAK7hB,GAAGmH,GAAK4tW,GAAc,IAAM/0W,KAK1Dy+W,EAAIv/W,UAAUshX,cAAgB,WAC1B38W,KAAKw7W,kBACAtmS,EAAMl1E,KAAKg7W,UACZh7W,KAAKy8H,YAAc,IAAIhhB,GAAMz7G,KAAKg7W,QAAU3oK,MAAOryM,KAAK48W,aAAathX,KAAK0E,UAGlF46W,EAAIv/W,UAAUihX,YAAc,SAAUzgT,EAAO5pD,GACzC,IAGI4qW,EAHA98W,EAAQC,KACR88W,EAAUl3W,EAAU,IAAMy0W,GAAar6W,KAAKgB,SAASvE,OACrDsgX,KAoEJ,OAlEAlhT,EAAMz8D,QAAQ,SAAU4e,EAAM7hB,GAC1B,GAAI+4E,EAAMl3D,EAAKmoE,SAAWjR,EAAMl3D,EAAKmoE,OAAOr3D,MACxC/uB,EAAM87D,MAAMpzC,OAAOtsB,EAAG,OAD1B,CAIA,IAAI8Y,EAAOigE,EAAMl3D,EAAKmoE,OAAO85B,cAAiB,GAAKjiG,EAAKmoE,OAAO85B,aAC3Do7P,EAAOnmS,EAAMl3D,EAAKmoE,OAAOhR,SAAY,GAAKn3D,EAAKmoE,OAAOhR,QACtDinS,EAAMp+V,EAAKmoE,OAAOr3D,KACtB/uB,EAAM6oC,UAA0B,IAAZk0U,EAAiB3gX,EAAM4D,EAAe,UAAKkS,EAAQ9V,EAAM4D,EAAM6oC,UAAY,EAC/F,IAAIk3E,EAAY9hG,EAAa,SAAI,uBAAwC,GACzE6+V,EAAa98W,EAAMoB,cAAc,OAASkC,UAzTvC,aAyT4DI,OAASmO,KAAQ,kBAChF,IAAIorW,EAAUZ,aAAe99W,OAAU89W,EAAIt6W,UAAYs6W,EACnDa,GAAa/nS,EAAM8nS,IAAoB,KAAVA,EAC5B9nS,EAAMknS,EAAIp5W,SAIXjD,EAAMm9W,kBAAkBL,EAAYT,GAHpCS,EAAWl7W,YAAYy6W,GAK3B,IACIzuU,EAAO5tC,EAAMoB,cAAc,QAC3BkC,UAAWk4W,6BAAwDtmW,EAAM,IAAMomW,IAE/E8B,EAAQp9W,EAAMoB,cAAc,OAASkC,UAnUjC,gBAqUR,GADA85W,EAAMx7W,YAAYk7W,GACL,KAART,QAAsBjhX,IAARihX,GAA8B,KAARf,EAAzC,CAIiB,KAARe,QAAsBjhX,IAARihX,GAA8B,KAARf,GACxB,SAARpmW,GAA0B,QAARA,EACnBkoW,EAAMj4W,aAAayoC,EAAMwvU,EAAMh4W,mBAG/Bg4W,EAAMx7W,YAAYgsC,GAEfkvU,IAGU,KAARxB,EAAcwB,EAAalvU,KACvBA,IACTtoC,EAAOw3W,GACPM,EAAMx7W,YAAYgsC,IAI9B,IAAIyvU,EAAap/V,EAAa,aAAW4nG,SAAU,MACnDu3P,EAAMx7W,YAAY5B,EAAMu7W,OAAO15W,WAAU,IACzC,IAAIqZ,EAAOlb,EAAMoB,cAAc,OAASkC,UAAW82W,GAAU12W,MAAO25W,IACpEniW,EAAKtZ,YAAYw7W,GACbp9W,EAAMq7W,oBACNr7W,EAAMq7W,eAAe52W,KAAK+/V,UAAiBxkW,EAAM6oC,WAGjD7oC,EAAMq7W,eAAe3yV,OAAQxW,EAAQ9V,EAAI,EAAGooW,UAAiBxkW,EAAM6oC,WAEvE,IAGIy0U,GAAU9lS,gBAFVj0E,GAAIihW,UAAiBxkW,EAAM6oC,UAAWh3B,KAAM,MAAO25G,gBAAiB,SAEjCt8G,SAAUgM,GACjDoiW,EAAMpqW,SAAW+K,EAAK/K,SAAW,IAAM6sG,EAAW,KAAgB,KAARu7P,EAAc,MAAQpmW,EAAM,IAAM,KAASgoW,EAAuB,GA9WzH,UA+WS,QAARhoW,GAAyB,WAARA,GACjBlV,EAAMiB,QAAQ8C,UAAUM,IAAI,mBAEhC24W,EAAOv4W,KAAK64W,OAETN,GAEXnC,EAAIv/W,UAAUiiX,kBAAoB,SAAUh6W,GACxC,IAAIi6W,EAAY33W,EAAU,UAAYorW,GAAa,KAAOqJ,GAAc,IAAM9I,GAAYvxW,KAAKgB,SAAS,GAIxG,GAH6B,WAAzBhB,KAAK07W,kBACL6B,EAAY33W,EAAU,UAAYorW,GAAa,KAAOqJ,GAAc,IAAM9I,GAAYvxW,KAAKgB,QAAQoZ,SAAS,IAAI,KAE/G86D,EAAMqoS,GAAY,CACnBA,EAAUz5W,UAAUS,OAAOgtW,IAC3B,IAAIxqQ,EAAK/mG,KAAKw9W,SAASD,EAAUj6W,IACvBtD,KAAKy9W,QAAQh4W,EAAO,IAAMyrW,GAAalxW,KAAKgB,SAASoZ,SAAU82V,GAAc,IAAMnqQ,KAGrG6zQ,EAAIv/W,UAAUqiX,mBAAqB,SAAU15W,GACzChE,KAAK29W,MAAQl4W,EAAO,iBAAkBzF,KAAKgB,SAC3C,IAAIwqW,EAAU/lW,EAAO,aAAczF,KAAKgB,SACpC48W,EAAWn4W,EAAO,IAAM20W,GAAcp6W,KAAKgB,SAO/C,OANKhB,KAAKkT,WAAes4V,EAAQr3V,WAAaq3V,EAAQ5mW,YAAeg5W,EAASzpW,aACrEnU,KAAKkT,WAAas4V,EAAQr3V,WAAaypW,EAASh5W,eACrDZ,EAAIF,UAAUM,IAAIk2W,IAClBt6W,KAAK29W,MAAMz4W,aAAalB,EAAIpC,WAAU,GAAOgE,EAAU,IAAM00W,GAAct6W,KAAK29W,OAAO,IACvF35W,EAAIlC,UAAY,KAEb,GAEX84W,EAAIv/W,UAAUsyN,aAAe,SAAUxmN,GACnC,IAAI02W,EAAS12W,EAAOxE,cAAc,qBAC7BuyE,EAAM2oS,KACPA,EAAO/7W,UAAY,GACnBqF,EAAOxE,cAAc,IAAMw3W,IAAUr2W,UAAUS,OAAO,aAE1DvE,KAAK89W,OAASl4W,EAAU,IAAMw0W,GAAe,KAAOC,GAAar6W,KAAKm0W,QACtE,IAAIjjO,EAAYlxI,KAAK89W,OAAO99W,KAAK89W,OAAOrhX,OAAS,GACjD,GAA2B,IAAvBuD,KAAK89W,OAAOrhX,OAAc,CAK1B,GAJA0K,EAAOrD,UAAUS,OAAO+1W,IACxBt6W,KAAK61E,QAAQl0E,YAAYwF,EAAOvF,WAAU,IAC1C5B,KAAK+9W,SAAW52W,EAAO7D,GACvB6D,EAAOrF,UAAY,GACf9B,KAAK09W,mBAAmBxsO,GAAY,CACpC,IAAI8sO,EAAUh+W,KAAK61E,QAAQq7D,UAAUomE,uBACrCt3M,KAAK09W,mBAAmBM,GAE5Bh+W,KAAKk7W,SAAU,EAEnB,OAAOt1W,EAAU,IAAMy0W,GAAar6W,KAAK61E,SAASp5E,OAAS,GAE/Dm+W,EAAIv/W,UAAUmhX,eAAiB,SAAUn0V,GACrC,IAAI41V,EAAMx4W,EAAO,IAAMurW,GAAYhxW,KAAKgB,UAC/B,IAARqnB,EAAgB41V,EAAIn6W,UAAUM,IAlalB,gBAkawC65W,EAAIn6W,UAAUS,OAlatD,gBAmabvE,KAAK86W,MAAMrR,kBACXzpW,KAAKk+W,yBAETtD,EAAIv/W,UAAU8iX,iBAAmB,SAAU37U,EAAMzhB,GAE9B/gB,KAAKkT,WAAalT,KAAKgB,QAAQ8C,UAAUK,SAhblD,SAmcN,OAlBInE,KAAKk7W,SAAW14U,GAAQzhB,EACe,gBAAnC/gB,KAAK4uC,UAAUi+E,SAASt1F,QACVR,KAAM,eAChB7rB,SAAUlL,KAAK4uC,UAAUi+E,SAAS3hH,SAAU0iF,eAAgB5tF,KAAK4uC,UAAUi+E,SAAS7sG,QAG5E,KAImB,iBAA/BhgB,KAAK4uC,UAAU3F,KAAK1R,QACNR,KAAM,gBAChB7rB,SAAUlL,KAAK4uC,UAAU3F,KAAK/9B,SAAU0iF,eAAgB5tF,KAAK4uC,UAAU3F,KAAKjpB,QAGpE,MAKxB46V,EAAIv/W,UAAU+iX,qBAAuB,SAAUC,EAAQpD,GACnD,IAAIl7W,EAAQC,KACRs+W,EAAat+W,KAAKm+W,iBAAiBlD,EAAWj7W,KAAKg8W,cAClD9mS,EAAMopS,GAmBPD,EAAOv6W,UAAUS,OAAOgtW,KAlBxB+M,EAAW1/V,MAAQ,WACfmmP,EAASs5G,GAAUnqW,SAAY,aAC/BmqW,EAAOv6W,UAAUM,IAAIm2W,IACrB8D,EAAOv6W,UAAUM,IAAI,WAEzBk6W,EAAWt/V,IAAM,WACbq/V,EAAO35W,MAAM6pC,QAAU,OACvB8vU,EAAOv6W,UAAUS,OAAOgtW,IACxB8M,EAAOv6W,UAAUS,OAAOg2W,IACxB8D,EAAOv6W,UAAUS,OAAO,UACxBwgQ,EAASs5G,GAAU9vU,QAAW,GAAIr6B,SAAY,KACb,IAA7BmqW,EAAO9sW,WAAW9U,QAAiBsD,EAAM84V,YACzCxzV,EAAOg5W,IAGf,IAAIvmV,GAAUwmV,GAAYvmV,QAAQsmV,KAM1CzD,EAAIv/W,UAAUkjX,iBAAmB,SAAUj7W,EAAItG,GAC3C,IAGIqhX,EAHAt+W,EAAQC,KACRi7W,EAAYj7W,KAAKi7W,aACG55W,MAAMC,KAAKtB,KAAKgB,QAAQ2B,cAAc,IAAMuuW,IAAa92V,UAElEhb,QAAQ,SAAU4e,GACzBA,EAAK1a,KAAOvD,EAAMy+W,gBAClBH,EAASrgW,KAGjB,IAAIggW,EAAUh+W,KAAK89W,OAAO7C,GACtBl0Q,EAAK/mG,KAAKw9W,SAASx9W,KAAK89W,OAAO99W,KAAKg8W,cAAc14W,IAClDm7W,EAASz+W,KAAK0+W,cAAc1+W,KAAKg7W,OAAQj0Q,GAC7C,GAAI7xB,EAAMmpS,KAAYnpS,EAAM8oS,GAAU,CAClC,IAAIW,EAAO3+W,KAAKw9W,SAASQ,EAAQ16W,IACjC+6W,EAASr+W,KAAK0+W,cAAc1+W,KAAKg7W,OAAQ2D,GAG7C,GADA3+W,KAAKw+W,cAAgBC,EAAOn7W,GACxBtD,KAAK2xH,aAAwB,IAAV30H,GAAmBgD,KAAK4uC,gBAAoBsmC,EAAMl1E,KAAK4uC,WACtEyvU,GAAUA,IAAWI,GACrBJ,EAAOv6W,UAAUS,OAAOgtW,QAFhC,CAMA,IACI+M,EADA1uW,EAAMnK,EAAO,IAAMyrW,GAAalxW,KAAKgB,SAEzC,GAAIhB,KAAKi7W,UAAYj7W,KAAKg8W,eAAiBh8W,KAAKk7W,QAAS,CACrD,IAAI0D,EAAU5+W,KAAK4uC,UAAUi+E,SAASt1F,OACtC+mV,GACIvnV,KAAoB,SAAZ6nV,EAAsB,GAAmB,gBAAZA,EAA6BA,EAAU,cAC5E1zW,SAAUlL,KAAK4uC,UAAUi+E,SAAS3hH,SAClC0iF,eAAgB5tF,KAAK4uC,UAAUi+E,SAAS7sG,aAG3C,GAAIhgB,KAAKk7W,SAAWl7W,KAAKi7W,UAAYj7W,KAAKg8W,cAAgBh8W,KAAKi7W,YAAcj7W,KAAKg8W,aAAc,CACjG,IAAI6C,EAAS7+W,KAAK4uC,UAAU3F,KAAK1R,OACjC+mV,GACIvnV,KAAmB,SAAX8nV,EAAqB,GAAkB,iBAAXA,EAA6BA,EAAS,eAC1E3zW,SAAUlL,KAAK4uC,UAAU3F,KAAK/9B,SAC9B0iF,eAAgB5tF,KAAK4uC,UAAU3F,KAAKjpB,QAG5Cs+V,EAAWtmV,SAAW,WAClBpoB,EAAI9L,UAAUM,IAAIm2W,IAClBx6W,EAAM++W,mBAEVR,EAAWt/V,IAAM,WACbpP,EAAI9L,UAAUS,OAAOg2W,IACrBkE,EAAO36W,UAAUM,IAAImtW,KAEpBvxW,KAAK2xH,YAAez8C,EAAMmpS,IAC3Br+W,KAAKo+W,qBAAqBC,EAAQpD,GAEtCj7W,KAAKk7W,SAAU,EACS,KAApBoD,EAAWvnV,KACX0nV,EAAO36W,UAAUM,IAAImtW,IAGrB,IAAIz5U,GAAUwmV,GAAYvmV,QAAQ0mV,KAG1C7D,EAAIv/W,UAAU0jX,WAAa,SAAUd,GACjC,IAAIe,EAAYn5W,EAAQo4W,EAAK,IAAMjN,GAAa,KAAOqJ,IACnD4E,EAAWj/W,KAAKk/W,YAAYF,IAC3B9pS,EAAMl1E,KAAKgnW,SAAWiX,EAAIn6W,UAAUK,SAAS,aAC7CnE,KAAKgnW,OAAOljW,UAAUK,SA7gBd,gBA6gB0CnE,KAAK8lW,OAAOhjR,KAAK9iF,KAAK8iF,MAAQ9iF,KAAK8lW,OAAOl1O,KAAK5wH,KAAK4wH,MAElGqtP,EAAIn6W,UAAUK,SAAS,gBAC5B85W,EAAIhrP,QAGC/9C,EAAM8pS,KAA2D,IAA7CA,EAAUl7W,UAAUK,SAASotW,MAClDvxW,KAAKyF,OAAOw5W,GACP/pS,EAAMl1E,KAAKgnW,SACZhnW,KAAK8lW,OAAOhjR,KAAK9iF,KAAK8iF,QAKtC83R,EAAIv/W,UAAU6jX,YAAc,SAAUlhW,GAClC,OAAOxf,MAAMnD,UAAUkD,QAAQ+C,KAAKsE,EAAU,IAAMorW,GAAa,KAAOqJ,GAAar6W,KAAKgB,SAAUgd,IAExG48V,EAAIv/W,UAAUmiX,SAAW,SAAUl6W,GAC/B,OAAOA,EAAGiM,QAAQg1V,UAAgB,KAEtCqW,EAAIv/W,UAAU0/W,mBAAqB,WAC/B,IAAIh7W,EAAQC,KACZA,KAAK+xW,YAAY3yW,QAAQ,SAAU4yW,GAC1B98R,EAAMn1E,EAAMiB,QAAQ2B,cAAcqvW,MACnCxxW,SAASuL,KAAKpK,YAAY5B,EAAMiB,QAAQ2B,cAAcqvW,IAASttW,MAAM6pC,QAAU,WAI3FqsU,EAAIv/W,UAAU8jX,gBAAkB,SAAUn7W,EAAK4L,GAC3C,IAAIwvW,EAAUp/W,KAAKmB,cAAc,OACjCnB,KAAKq/W,eAAeD,EAASxvW,EAAK,WACA,IAA9BwvW,EAAQ7tW,WAAW9U,QACnBuH,EAAIrC,YAAYy9W,IAGxBxE,EAAIv/W,UAAUgkX,eAAiB,SAAUr7W,EAAKqkB,EAAK/d,GAC5B,iBAAR+d,IACPA,EAAMA,EAAInY,QAEd,IACIovW,EADA9kV,EAAaxrB,GAAQqZ,GAEpB6sD,EAAM16C,KACP8kV,EAAc9kV,KAAex6B,KAAMsK,KAElC4qE,EAAM16C,IAAe8kV,EAAY7iX,OAAS,MACxC4E,MAAMC,KAAKg+W,GAAalgX,QAAQ,SAAU0G,GACzC9B,EAAIrC,YAAYmE,MAI5B80W,EAAIv/W,UAAU6hX,kBAAoB,SAAUl8W,EAAS8tB,GACjD9uB,KAAKq/W,eAAer+W,EAAS8tB,EAAM,eAEvC8rV,EAAIv/W,UAAU8yD,WAAa,SAAUnqD,EAAK4L,EAAKi6I,GAC3C,IAAImoN,EACJ,GAAmB,iBAARpiW,GAAoBslE,EAAMtlE,EAAI5N,WACrC,GAAe,MAAX4N,EAAI,IAAyB,MAAXA,EAAI,GACtB,GAAIpP,SAASgB,iBAAiBoO,GAAKnT,OAAQ,CACvC,IAAIg4W,EAASj0W,SAASmC,cAAciN,GACpCoiW,EAASyC,EAAO3yW,UAAUoO,OACT,UAAb25I,EACA7lJ,EAAIrC,YAAY8yW,EAAO7yW,WAAU,KAGjCoC,EAAIrC,YAAY8yW,GAChBA,EAAO/vW,MAAM6pC,QAAU,SAI3BvuC,KAAKm/W,gBAAgBn7W,EAAK4L,QAI9B5P,KAAKm/W,gBAAgBn7W,EAAK4L,QAI9B5L,EAAIrC,YAAYiO,GAEfslE,EAAM88R,KAC2C,IAA9ChyW,KAAK+xW,YAAYxzW,QAAQqR,EAAI1C,aAC7BlN,KAAK+xW,YAAYvtW,KAAKoL,EAAI1C,aAItC0tW,EAAIv/W,UAAUqjX,cAAgB,SAAU1D,EAAQj0Q,GAQ5C,OANI/mG,KAAKgB,QAAQ8C,UAAUK,SA1nBpB,YA2nBGsB,EAAO,sCAAoEshG,EAAI/mG,KAAKgB,SAGpFhB,KAAKy9W,QAAQzC,EAAO5gW,SAAU82V,GAAc,IAAMnqQ,IAIhE6zQ,EAAIv/W,UAAUoiX,QAAU,SAAU5hT,EAAOx+D,GAErC,IAAK,IADD2G,EACK7H,EAAI,EAAGA,EAAI0/D,EAAMp/D,OAAQN,IAC9B,GAAI0/D,EAAM1/D,GAAGmH,KAAOjG,EAAK,CACrB2G,EAAM63D,EAAM1/D,GACZ,MAGR,OAAO6H,GAEX42W,EAAIv/W,UAAUogX,eAAiB,SAAU8D,EAAOv7W,GACjC,WAAVu7W,EAAsBv/W,KAAKgB,QAAQW,YAAYqC,GAAOhE,KAAKgB,QAAQkE,aAAalB,EAAKyB,EAAO,IAAMyrW,GAAalxW,KAAKgB,WAEzH45W,EAAIv/W,UAAUsjI,YAAc,SAAU36H,EAAKm2J,EAAK9xI,GAC5C,GAAY,KAAR8xI,EAIJ,IAAK,IADD91D,EAAO81D,EAAIj9J,MAAM,KACZf,EAAI,EAAGA,EAAIkoG,EAAK5nG,OAAQN,IACzBksB,EACArkB,EAAIF,UAAUM,IAAIigG,EAAKloG,IAGvB6H,EAAIF,UAAUS,OAAO8/F,EAAKloG,KAItCy+W,EAAIv/W,UAAU0gX,iBAAmB,SAAU1zV,GACvC,IAAI6sD,EAAMl1E,KAAKg7W,QAAf,CAGA,IACI7G,EAAS1uW,EAAO,IAAMurW,GAAYhxW,KAAKgB,SAC3C,GAA8B,SAA1BhB,KAAKw/W,iBAA6B,CAClC,GAAoB,SAAhBx/W,KAAK+V,OACL,OAGAgvP,EAAS/kQ,KAAKg7W,QAAUjlW,OAAW/V,KAAKgB,QAAQ0yD,aAAeygT,EAAOzgT,aAAgB,YAGzF,GAA8B,SAA1B1zD,KAAKw/W,iBACVz6G,EAAS/kQ,KAAKgB,SAAW+U,OAAU,SACnCgvP,EAAS/kQ,KAAKg7W,QAAUjlW,OAAU,cAEjC,GAA8B,SAA1B/V,KAAKw/W,iBAA6B,CACvC,IAAI5vW,EAAMhK,EAAU,uBAAuC5F,KAAKgB,SAChE,IAAwB,IAApBhB,KAAK64V,WACL,IAAK,IAAI18V,EAAI,EAAGA,EAAIyT,EAAInT,OAAQN,IAC5ByT,EAAIzT,GAAGqH,aAAa,QAAS,sCAC7BxD,KAAK4sD,UAAYvgD,KAAKC,IAAItM,KAAK4sD,UAAW5sD,KAAKilQ,UAAUr1P,EAAIzT,KAC7DyT,EAAIzT,GAAGuI,MAAM2lW,eAAe,WAC5Bz6V,EAAIzT,GAAGuI,MAAM2lW,eAAe,kBAG/B,CACDrqW,KAAKg7W,OAASv1W,EAAO,IAAMyrW,GAAalxW,KAAKgB,UACjC,IAARqnB,GACAroB,KAAKg7W,OAAOr5W,YAAY3B,KAAKmB,cAAc,OACvCmC,GAAK4tW,GAAc,KAAU7tW,UAAWkhW,UAAiBgN,GACzD9tW,OAASmO,KAAQ,WAAY8rD,kBAAmB6mS,eAInD,IADDvgW,EAAMhE,KAAKg7W,OAAO5gW,SAAS4D,KAAK,GACpC,IAAS7hB,EAAI,EAAGA,EAAI6D,KAAK67D,MAAMp/D,OAAQN,IACnC6D,KAAKmuD,WAAWnqD,EAAKhE,KAAK67D,MAAM1/D,GAAGy+B,QAAS,SAC5C56B,KAAK4sD,UAAYvgD,KAAKC,IAAItM,KAAK4sD,UAAW5sD,KAAKilQ,UAAUjhQ,IACzDA,EAAIhC,UAAY,GAEpBhC,KAAK+xW,eACL/xW,KAAKmuD,WAAWnqD,EAAKhE,KAAK67D,MAAM,GAAGjhC,QAAS,UAC5C52B,EAAIF,UAAUS,OAAOgtW,IAEzBxsG,EAAS/kQ,KAAKg7W,QAAUjlW,OAAU/V,KAAK4sD,UAAY,YAGnDm4M,EAAS/kQ,KAAKg7W,QAAUjlW,OAAU,WAG1C6kW,EAAIv/W,UAAU4pQ,UAAY,SAAUjhQ,GAChC,IAAIsxR,EAAKz5R,OAAOsR,iBAAiBnJ,GACjC,OAAOA,EAAI0vD,aAAe/3C,WAAW25Q,EAAGloR,iBAAiB,gBAAkBuO,WAAW25Q,EAAGloR,iBAAiB,mBACtGuO,WAAW25Q,EAAGloR,iBAAiB,eAAiBuO,WAAW25Q,EAAGloR,iBAAiB,mBAEvFwtW,EAAIv/W,UAAUyjX,gBAAkB,WAC5B,IAAIb,EAAMx4W,EAAO,IAAM40W,GAAc,IAAM9I,GAAYvxW,KAAKgB,SAI5D,GAH6B,WAAzBhB,KAAK07W,kBACLuC,EAAMx4W,EAAO,IAAM40W,GAAc,IAAM9I,GAAYvxW,KAAKgB,QAAQoZ,SAAS,KAEjE,OAAR6jW,EAAJ,CAGA,IAAIlyK,EAAOlmM,EAAQo4W,EAAK,UACxB,GAAIj+W,KAAKgB,UAAY+qM,EAArB,CAGA,IAAI0zK,EAAQh6W,EAAO,IAAMurW,GAAa,KAAOoJ,GAAe,sBAAuBp6W,KAAKgB,QAAQoZ,SAAS,IACzGpa,KAAK61E,QAAUpwE,EAAO,IAAMurW,GAAa,KAAOoJ,GAAcp6W,KAAKgB,SACnE,IAAIshH,EAAM78G,EAAO,IAAMurW,GAAa,gBAAsBhxW,KAAKgB,SAClC,WAAzBhB,KAAK07W,kBACL+D,EAAQh6W,EAAO,IAAMurW,GAAa,KAAOoJ,GAAe,sBAAuBp6W,KAAKgB,QAAQoZ,SAAS,KAEzG,IAAIslW,EAAWxqS,EAAMuqS,GAAUz/W,KAAK61E,QAAQjxE,YAAc66W,EAAM76W,YAE5DmgQ,EAASziJ,EADG,IAAZo9P,GACgBlzW,KAAQyxW,EAAI9pW,WAAa,KAAM1H,MAASizW,GAAWzB,EAAI9pW,WAAa8pW,EAAIr5W,aAAe,OAGvF4H,KAAQ,OAAQC,MAAS,SAExCyoE,EAAMl1E,KAAK47W,UACZ57W,KAAK47W,QAAQ93W,UAAUS,OAAO01W,OAGtCW,EAAIv/W,UAAUskX,UAAY,SAAU3iX,GAChCgD,KAAK89W,OAASl4W,EAAU,IAAMorW,GAAa,KAAOqJ,GAAar6W,KAAKgB,SACpE,IAAIi9W,EAAMj+W,KAAK89W,OAAO9gX,GAItB,GAHIA,GAAS,GACTgD,KAAKgH,eAAgBg1W,aAAch/W,IAAS,KAE5CA,EAAQ,GAAKm9C,MAAMn9C,IAAiC,IAAvBgD,KAAK89W,OAAOrhX,QAG7C,GAAIwhX,EAAIn6W,UAAUK,SAASotW,IACvBvxW,KAAK8+W,sBADT,CAIA,IAAK9+W,KAAK64V,WAAY,CAClB,IAAIr2T,EAAOxiC,KAAK89W,OAAO99W,KAAKi7W,WACvB/lS,EAAM1yC,IACPA,EAAK92B,gBAAgB,iBAEzBhI,EAAWu6W,GAAO9B,gBAAiBjL,GAAc,IAAMl0W,IAE3D,IAAIsG,EAAK26W,EAAI36W,GACbtD,KAAKs9W,kBAAkBh6W,GACvB26W,EAAIn6W,UAAUM,IAAImtW,IAClB0M,EAAIz6W,aAAa,gBAAiB,QAClC,IAAIujG,EAAKnwE,OAAO52B,KAAKw9W,SAASl6W,IAK9B,GAJI4xE,EAAMl1E,KAAKw+W,iBACXx+W,KAAKw+W,cAAgBtN,GAAc,IAAMnqQ,GAE7CrjG,EAAW1D,KAAKgB,SAAW6kH,wBAAyBviH,IAChDtD,KAAK64V,YACL,GAAIpzV,EAAO,IAAMyrW,GAAalxW,KAAKgB,SAASoZ,SAAS3d,OAAS,EAAG,CAC7D,IAAImjX,EAAQ5/W,KAAKy9W,QAAQh4W,EAAO,IAAMyrW,GAAalxW,KAAKgB,SAASoZ,SAAU82V,GAAc,IAAMnqQ,GAC1F7xB,EAAM0qS,IACPA,EAAM97W,UAAUM,IAAImtW,IAExBvxW,KAAKu+W,iBAAiBj7W,EAAItD,KAAKyvU,sBAGlC,CACDzvU,KAAKg7W,OAASv1W,EAAO,aAAyByrW,GAAalxW,KAAKgB,SAChE,IAAIgd,EAAOhe,KAAK0+W,cAAc1+W,KAAKg7W,OAAQh7W,KAAKw9W,SAASl6W,IACzD,GAAI4xE,EAAMl3D,GAAO,CACbhe,KAAKg7W,OAAOr5W,YAAY3B,KAAKmB,cAAc,OACvCmC,GAAI4tW,GAAc,IAAMlxW,KAAKw9W,SAASl6W,GAAKD,UAAWkhW,UAAiBgN,GACvE9tW,OAASmO,KAAM,WAAY8rD,kBAAmB6mS,UAAiBvkW,KAAKw9W,SAASl6W,OAEjF,IAAIu8W,EAAS7/W,KAAK0+W,cAAc1+W,KAAKg7W,OAAQh7W,KAAKw9W,SAASl6W,IACvDw8W,EAAYthX,MAAMnD,UAAUkD,QAAQ+C,KAAKtB,KAAKo7W,eAAgB6C,EAAI36W,IACtEtD,KAAKmuD,WAAW0xT,EAAQ7/W,KAAK67D,MAAMikT,GAAWllV,QAAS,eAGvD5c,EAAKla,UAAUM,IAAImtW,IAEvBvxW,KAAKu+W,iBAAiBj7W,EAAItD,KAAKyvU,iBAEnCzvU,KAAK8+W,kBACL,IAAIiB,EAAat6W,EAAO,IAAMurW,GAAa,KAAO1tW,EAAItD,KAAKgB,SAC3DhB,KAAKggX,sBAAsBD,GAC3BA,EAAWhjW,WAAW7a,QACtB,IAAI+9W,GACAC,aAAclgX,KAAKmgX,SACnBC,cAAepgX,KAAKi7W,UACpBe,aAAciC,EACdniT,cAAe9+D,EACfqjX,SAAUrgX,KAAKm7W,WAEdn7W,KAAK2xH,YAAoC,IAAtB3xH,KAAKg8W,cACzBh8W,KAAK0mB,QAAQ,WAAYu5V,KAGjCrF,EAAIv/W,UAAUilX,SAAW,SAAUzkT,GAC/B77D,KAAKugX,WAAY,EACjBvgX,KAAK61E,QAAUpwE,EAAO,IAAMurW,GAAa,KAAOoJ,GAAcp6W,KAAKgB,SACnEhB,KAAK86W,MAAMj/S,MAAQ77D,KAAKs8W,YAAYzgT,EAAO,GAC3C77D,KAAK86W,MAAM52T,WACXlkD,KAAKugX,WAAY,GAErB3F,EAAIv/W,UAAUgjJ,OAAS,SAAUrhJ,GAC7BgD,KAAK86W,MAAM5nW,UAAYlW,EACvBgD,KAAK86W,MAAM52T,WACXlkD,KAAK2+H,YAAY3+H,KAAKgB,QA/zBhB,QA+zBkChE,GACxCgD,KAAKwgX,uBAET5F,EAAIv/W,UAAUmlX,oBAAsB,WAC3BtrS,EAAMl1E,KAAK47W,UACZ57W,KAAK47W,QAAQ93W,UAAUM,IAAI61W,IAE/Bj6W,KAAK8+W,mBAETlE,EAAIv/W,UAAUopB,WAAa,WACvB5oB,OAAOa,iBAAiB,SAAUsD,KAAKk+W,sBAAsB5iX,KAAK0E,OAClEuF,GAAanB,IAAIpE,KAAKgB,QAAS,YAAahB,KAAK6wM,aAAc7wM,MAC/DuF,GAAanB,IAAIpE,KAAKgB,QAAS,UAAWhB,KAAKygX,aAAczgX,MACxDk1E,EAAMl1E,KAAKg7W,UACZh7W,KAAKy8H,YAAc,IAAIhhB,GAAMz7G,KAAKg7W,QAAU3oK,MAAOryM,KAAK48W,aAAathX,KAAK0E,SAE9EA,KAAKqmW,UAAY,IAAIruP,GAAeh4G,KAAKgB,SAAW83G,UAAW94G,KAAKiuN,WAAW3yN,KAAK0E,MAAOw4G,WAAYx4G,KAAKw4G,aAC5Gx4G,KAAK0gX,aAAe,IAAI1oQ,GAAeh4G,KAAKgB,SACxC83G,UAAW94G,KAAKiuN,WAAW3yN,KAAK0E,MAChCw4G,YAAcm6G,UAAW,YAAaj9G,IAAK,MAAOqoG,SAAU,aAC5DzsI,UAAW,aAGnBspS,EAAIv/W,UAAU+kH,aAAe,WACzBpgH,KAAKqmW,UAAU/zV,UACftS,KAAK0gX,aAAapuW,UACb4iE,EAAMl1E,KAAKg7W,SACZh7W,KAAKy8H,YAAYnqH,UAErBzW,OAAOe,oBAAoB,SAAUoD,KAAKk+W,sBAAsB5iX,KAAK0E,OACrEA,KAAKgB,QAAQpE,oBAAoB,YAAaoD,KAAK6wM,aAAav1M,KAAK0E,QAEzE46W,EAAIv/W,UAAU0lH,aAAe,SAAU9gH,GACnCD,KAAKgB,QAAQ8C,UAAUS,OA51Bf,aA61BR,IAAI05W,EAAMh+W,EAAK68G,cAAc31G,OACzB63W,EAAYn5W,EAAQo4W,EAAK,IAAM5D,IAC/B4E,EAAWj/W,KAAKk/W,YAAYF,GAC5Bf,EAAIn6W,UAAUK,SAAS+1W,IACvBl6W,KAAK2gX,UAAU1B,IAGfj/W,KAAKk7W,SAAU,EACVhmS,EAAM8pS,IAAcC,IAAaj/W,KAAKg8W,cACvCh8W,KAAKyF,OAAOw5W,KAIxBrE,EAAIv/W,UAAUuhX,aAAe,SAAU/7W,GACnC,KAAIA,EAAEq8G,SAAW,GAAKhoC,EAAMr0E,EAAEi8G,cAAc18C,iBAA5C,CAIA,GADApgE,KAAKm7W,WAAY,EACQ,UAArBt6W,EAAE88G,gBAAoD,IAAtB39G,KAAKg8W,cACrC,IAAK,IAAI31V,EAAIrmB,KAAKg8W,aAAe,EAAG31V,GAAK,EAAGA,IACxC,IAAKrmB,KAAK89W,OAAOz3V,GAAGviB,UAAUK,SAAS,YAAa,CAChDnE,KAAKyF,OAAO4gB,GACZ,YAIP,GAAyB,SAArBxlB,EAAE88G,gBAA8B39G,KAAKg8W,eAAiBp2W,EAAU,IAAMy0W,GAAar6W,KAAKgB,SAASvE,OAAS,EAC/G,IAAK,IAAIN,EAAI6D,KAAKg8W,aAAe,EAAG7/W,EAAI6D,KAAK89W,OAAOrhX,OAAQN,IACxD,IAAK6D,KAAK89W,OAAO3hX,GAAG2H,UAAUK,SAAS,YAAa,CAChDnE,KAAKyF,OAAOtJ,GACZ,MAIZ6D,KAAKm7W,WAAY,IAErBP,EAAIv/W,UAAUolX,aAAe,SAAU5/W,GACnC,GAAmB,KAAdA,EAAEonB,SAA8B,KAAZpnB,EAAE03G,OAAgC,KAAd13G,EAAEonB,SAA8B,KAAZpnB,EAAE03G,MAAe,CAEzErjC,EADUrvE,EAAQhF,EAAEsG,OAAQ,IAAM6pW,MAEnCnwW,EAAE6kB,mBAIdk1V,EAAIv/W,UAAU4yN,WAAa,SAAUptN,GACjC,IAAIb,KAAKgB,QAAQ8C,UAAUK,SAAS09V,IAApC,CAGA7hW,KAAKgB,QAAQ8C,UAAUM,IA74Bf,aA84BR,IAAI65W,EAAMp9W,EAAEsG,OACRy5W,EAASn7W,EAAO,IAAMurW,GAAa,KAAOO,GAAYvxW,KAAKgB,SACjD4E,EAAU,IAAMy0W,GAAc,SAAWC,GAAe,IAAKt6W,KAAKgB,SAKhF,OAJAhB,KAAKgnW,OAASvhW,EAAO,iBAAkBzF,KAAKgB,SACvCk0E,EAAMl1E,KAAKgnW,UACZhnW,KAAK8lW,OAAS9lW,KAAKgnW,OAAO/9Q,cAAc,IAEpCpoF,EAAE8uD,QACN,IAAK,QACL,IAAK,QACD,GAAIsuT,EAAI5pW,cAAcvQ,UAAUK,SAAS09V,IACrC,OAEJ,GAAiB,UAAbhhW,EAAE8uD,QAAsBsuT,EAAIn6W,UAAUK,SAAS,aAC/C,MAEJnE,KAAK++W,WAAWd,GAChB,MACJ,IAAK,MACL,IAAK,WACGA,EAAIn6W,UAAUK,SAASg2W,MAC+C,IAAnEt0W,EAAQo4W,EAAK,IAAM5D,IAAav2W,UAAUK,SAASotW,KACtD0M,EAAIz6W,aAAa,WAAY,MAE7BxD,KAAK8lW,QAAUrhW,EAAUzE,KAAK8lW,OAAO9kW,UACrChB,KAAK8lW,OAAOhjR,KAAK9iF,KAAK8iF,MAE1B89R,EAAOxmW,SAAS4D,KAAK,GAAGxa,aAAa,WAAY,KACjD,MACJ,IAAK,WACL,IAAK,YACD,IAAIwa,EAAOnY,EAAQrF,SAAS+xH,cAAe,IAAM8nP,IAC5CnlS,EAAMl3D,IACPhe,KAAKggX,sBAAsBhiW,GAE/B,MACJ,IAAK,YACDnd,EAAE6kB,kBACGwvD,EAAMl1E,KAAKgnW,SAAWhnW,KAAKgnW,OAAOljW,UAAUK,SAr6B3C,kBAs6BFnE,KAAK8lW,OAAOl1O,KAAK5wH,KAAK4wH,MAE1B,MACJ,IAAK,SACD,IAAIouP,EAAYn5W,EAAQo4W,EAAK,IAAM5D,IACnC,IAA6B,IAAzBr6W,KAAKy8W,kBAA6BvnS,EAAM8pS,GAAY,CACpD,IAAI6B,EAAS7B,EAAUpjO,aAClB1mE,EAAM2rS,IAAWA,EAAO/8W,UAAUK,SAASk2W,KAC5CwG,EAAO9jW,WAAW7a,QAEtBlC,KAAK2gX,UAAU3gX,KAAKk/W,YAAYF,IAEpCh/W,KAAK8+W,qBAIjBlE,EAAIv/W,UAAU6iX,sBAAwB,WAClC,IAAIhW,EAAYziW,EAAO,IAAM40W,GAAc,IAAMC,GAAe,IAAM/I,GAAYvxW,KAAKgB,SAClFk0E,EAAMgzR,IACPloW,KAAKyF,OAAOzF,KAAKk/W,YAAYhX,IAEjCloW,KAAKwgX,uBAET5F,EAAIv/W,UAAU2kX,sBAAwB,SAAU74W,GAE5C,IAAK+tE,EADQzvE,EAAO,qBAAsBzF,KAAK61E,UAC/C,CACI,IAAIirS,EAASr7W,EAAO,iBAAkBzF,KAAK61E,SACvCkrS,EAAWD,EAAO90W,WAClBg1W,EAASD,EAAWD,EAAOl8W,YAC3Bq8W,EAAW95W,EAAOgN,WAClBk1V,EAAWliW,EAAOvC,YAClBs8W,EAAS/5W,EAAOgN,WAAahN,EAAOvC,YACxC,GAAKm8W,EAAWE,GAAcD,EAASE,EAAS,CAC5C,IAAIC,EAAeH,EAASC,EAC5BH,EAAO90W,WAAa+0W,GAAY1X,EAAW8X,QAG3C,GAAKJ,EAAWE,GAAcD,EAASE,EAAS,CACxCC,EAAeD,EAASH,EAC5BD,EAAO90W,WAAa+0W,GAAY1X,EAAW8X,MAQ3DvG,EAAIv/W,UAAUw1M,aAAe,SAAUhwM,GACnC,IAAIo9W,EAAMp9W,EAAEsG,QACP+tE,EAAM+oS,EAAIn6W,YAAcm6W,EAAIn6W,UAAUK,SAAS+1W,KAChD+D,EAAIz6W,aAAa,QAAS,IAAI41G,GAAK,OAASgoQ,iBAAkBphX,KAAK0gC,OAAS1gC,KAAKgO,QAAQwnE,YAAY,sBAU7GolS,EAAIv/W,UAAUgmX,UAAY,SAAUpvW,EAAOjV,GACvC,IAAI64E,EAAUjwE,EAAU,IAAMy0W,GAAar6W,KAAKgB,SAASiR,GACrDijE,EAAMW,MAGI,IAAV74E,GACA64E,EAAQ/xE,UAAUS,OAAOs9V,GAr+BnB,aAs+BNhsR,EAAQ94D,WAAWvZ,aAAa,WAAY,QAG5CqyE,EAAQ/xE,UAAUM,IAAIy9V,GAz+BhB,aA0+BNhsR,EAAQ94D,WAAWrR,gBAAgB,YAC/BmqE,EAAQ/xE,UAAUK,SAASotW,KAC3BvxW,KAAKyF,OAAOwM,EAAQ,IAGvBijE,EAAMl1E,KAAK67D,MAAM5pD,MAClBjS,KAAK67D,MAAM5pD,GAAO6tG,UAAY9iH,EAC9BgD,KAAKkkD,YAET2xB,EAAQryE,aAAa,iBAA4B,IAAVxG,EAAkB,QAAU,UAQvE49W,EAAIv/W,UAAUimX,OAAS,SAAUzlT,EAAO5pD,GACpC,IAAIlS,EAAQC,KACRuhX,EAAe,EAKnB,GAJKvhX,KAAKugX,WACNvgX,KAAK0mB,QAAQ,UAAY86V,WAAY3lT,IAEzC77D,KAAKm0W,OAAS1uW,EAAO,IAAMurW,GAAYhxW,KAAKgB,SACxCk0E,EAAMl1E,KAAKm0W,QAGX,OAFAn0W,KAAK67D,MAAQA,OACb77D,KAAK28W,gBAGT,IAAI8E,EAAa77W,EAAU,IAAMy0W,GAAar6W,KAAKgB,SAASvE,OAO5D,GANmB,IAAfglX,IACAF,EAAevhX,KAAK4oC,UAAY,GAEhCssC,EAAMjjE,KACNA,EAAQwvW,EAAa,KAErBA,EAAaxvW,GAASA,EAAQ,GAAKkoC,MAAMloC,IAA7C,CAGmB,IAAfwvW,GAAqBvsS,EAAMl1E,KAAKm0W,UAChCn0W,KAAKm0W,OAAOzvW,MAAM6pC,QAAU,IAE3B2mC,EAAMl1E,KAAK47W,UACZ57W,KAAK47W,QAAQ93W,UAAUM,IAAI61W,IAE/Bj6W,KAAK61E,QAAUpwE,EAAO,IAAMurW,GAAa,KAAOoJ,GAAcp6W,KAAKgB,SACnE,IAAIi7W,EAAWj8W,KAAKs8W,YAAYzgT,EAAO5pD,GACvC4pD,EAAMz8D,QAAQ,SAAU4e,EAAMuhW,GAE1B,GADAx/W,EAAM87D,MAAMpzC,OAAQxW,EAAQstW,EAAQ,EAAGvhW,GACnCje,EAAM84V,aAAe3jR,EAAMl3D,EAAKmoE,UAAYjR,EAAMl3D,EAAKmoE,OAAOr3D,MAAO,CACrE,IAAIi4E,EAAKw6Q,EAAehC,EACpBv7W,EAAMjE,EAAMoB,cAAc,OAC1BmC,GAAI4tW,GAAc,IAAMnqQ,EAAI1jG,UAAWkhW,GAAU9gW,OAASmO,KAAM,WAAY8rD,kBAAmB6mS,UAAiBx9P,KAEpHhnG,EAAMi7W,OAAO91W,aAAalB,EAAKjE,EAAMi7W,OAAO5gW,SAAUnI,EAAQstW,IAC9D,IAAIM,EAAS9/W,EAAM2+W,cAAc3+W,EAAMi7W,OAAQj0Q,EAAG75F,YAClDnN,EAAMouD,WAAW0xT,EAAQ7hW,EAAK4c,QAAS,aAG/C56B,KAAK86W,MAAMhM,SAASmN,EAAUhqW,GACzBjS,KAAKugX,WACNvgX,KAAK0mB,QAAQ,SAAW86V,WAAY3lT,IAEpC77D,KAAKg8W,eAAiB/pW,EACtBjS,KAAKyF,OAAOwM,GAGZjS,KAAK8+W,oBAQblE,EAAIv/W,UAAUslX,UAAY,SAAU1uW,GAChC,IAAIgsW,EAAMr4W,EAAU,IAAMy0W,GAAar6W,KAAKgB,SAASiR,GACjDyvW,GAAeC,YAAa1D,EAAK2D,aAAc3vW,GAEnD,GADAjS,KAAK0mB,QAAQ,WAAYg7V,IACrBxsS,EAAM+oS,GAAV,CAGAj+W,KAAK86W,MAAM1L,YAAYn9V,GACvBjS,KAAK67D,MAAMpzC,OAAOxW,EAAO,GACzBjS,KAAKo7W,eAAe3yV,OAAOxW,EAAO,GAClCjS,KAAKwgX,sBACL,IAAIqB,EAASp8W,EAAO,cAA0BzF,KAAKw9W,SAASS,EAAI36W,IAAKmC,EAAO,IAAMyrW,GAAalxW,KAAKgB,UAC/Fk0E,EAAM2sS,IACPx8W,EAAOw8W,GAEX7hX,KAAK0mB,QAAQ,UAAWg7V,GACpBzD,EAAIn6W,UAAUK,SAASotW,MACvBt/V,EAASA,EAAQrM,EAAU,IAAMy0W,GAAc,SAAWC,GAAe,IAAKt6W,KAAKgB,SAASvE,OAAS,EAAKwV,EAAQ,EAAIA,EACtHjS,KAAKyvU,iBAAkB,EACvBzvU,KAAKg8W,aAAe/pW,EACpBjS,KAAKyF,OAAOwM,IAE0C,IAAtDrM,EAAU,IAAMy0W,GAAar6W,KAAKgB,SAASvE,SAC3CuD,KAAKm0W,OAAOzvW,MAAM6pC,QAAU,QAEhCvuC,KAAKyvU,iBAAkB,IAQ3BmrC,EAAIv/W,UAAUymX,QAAU,SAAU7vW,EAAOjV,GACrC,IAAIghB,EAAOpY,EAAU,IAAMy0W,GAAar6W,KAAKgB,SAASiR,GACtD,IAAIijE,EAAMl3D,GAAV,CAOA,GAJIk3D,EAAMl4E,KACNA,GAAQ,GAEZgD,KAAK47W,QAAQ93W,UAAUM,IAAI61W,KACb,IAAVj9W,GAEA,GADAghB,EAAKla,UAAUM,IAAI61W,IACfj8V,EAAKla,UAAUK,SAASotW,IACxB,GAAc,IAAVt/V,EACA,IAAK,IAAI9V,EAAI8V,EAAQ,EAAG9V,GAAK,EAAGA,IAAK,CACjC,IAAK6D,KAAK89W,OAAO3hX,GAAG2H,UAAUK,SAAS,YAAa,CAChDnE,KAAKyF,OAAOtJ,GACZ,MAEC,GAAU,IAANA,EACL,IAAK,IAAIkqB,EAAIpU,EAAQ,EAAGoU,EAAIrmB,KAAK89W,OAAOrhX,OAAQ4pB,IAC5C,IAAKrmB,KAAK89W,OAAOz3V,GAAGviB,UAAUK,SAAS,YAAa,CAChDnE,KAAKyF,OAAO4gB,GACZ,YAOhB,IAASA,EAAIpU,EAAQ,EAAGoU,EAAIrmB,KAAK89W,OAAOrhX,OAAQ4pB,IAC5C,IAAKrmB,KAAK89W,OAAOz3V,GAAGviB,UAAUK,SAAS,YAAa,CAChDnE,KAAKyF,OAAO4gB,GACZ,YAOhBrI,EAAKla,UAAUS,OAAO01W,IAE1Bj6W,KAAK8+W,kBACL9gW,EAAKxa,aAAa,cAAe,GAAKxG,KAO1C49W,EAAIv/W,UAAUoK,OAAS,SAAUxF,GAC7BD,KAAK61E,QAAUpwE,EAAO,IAAMurW,GAAa,KAAOoJ,GAAcp6W,KAAKgB,SACnEhB,KAAK89W,OAASl4W,EAAU,IAAMorW,GAAa,KAAOqJ,GAAar6W,KAAKgB,SACpEhB,KAAKmgX,SAAWngX,KAAK89W,OAAO99W,KAAKi7W,WACjC,IAAIgD,EAAMj+W,KAAK89W,OAAO79W,GACjBi1E,EAAMl1E,KAAKmgX,WAAcngX,KAAKmgX,SAASr8W,UAAUK,SAAS09V,KAC3D7hW,KAAKmgX,SAAS/lW,SAAS4D,KAAK,GAAGxa,aAAa,WAAY,MAE5D,IAAIy8W,GACAC,aAAclgX,KAAKmgX,SACnBC,cAAepgX,KAAKi7W,UACpBe,aAAch8W,KAAK89W,OAAO99W,KAAKg8W,cAC/BlgT,cAAe97D,KAAKg8W,aACpB+F,cAAe9D,EACf+D,eAAgB/hX,EAChBogX,SAAUrgX,KAAKm7W,WAKnB,GAHKn7W,KAAK2xH,YAAoC,IAAtB3xH,KAAKg8W,cACzBh8W,KAAK0mB,QAAQ,YAAau5V,IAE1BA,EAAS5nV,OAGb,GAAoB,iBAATp4B,EAAmB,CAC1B,IAAKi1E,EAAMl1E,KAAK89W,OAAO79W,KAAUD,KAAK89W,OAAO79W,GAAM6D,UAAUK,SAAS09V,IAClE,IAAK,IAAI1lW,EAAI8D,EAAO,EAAG9D,EAAI6D,KAAK67D,MAAMp/D,OAAQN,IAAK,CAC/C,IAA+B,IAA3B6D,KAAK67D,MAAM1/D,GAAG2jH,SAAoB,CAClC7/G,EAAO9D,EACP,MAGA8D,EAAO,EAInB,GAAID,KAAK89W,OAAOrhX,OAASwD,GAAQA,GAAQ,IAAMk6C,MAAMl6C,GAAO,CACxD,GAAKD,KAAK89W,OAAO99W,KAAKg8W,cAAcl4W,UAAUK,SAAS,aAInD,IAAShI,EAAI6D,KAAKg8W,aAAc7/W,GAAK,EAAGA,IACpC,IAAK6D,KAAK89W,OAAO3hX,GAAG2H,UAAUK,SAAS,YAAa,CAChDnE,KAAKi7W,UAAY9+W,EACjB,YANR6D,KAAKi7W,UAAYj7W,KAAKg8W,aAUtBh8W,KAAK89W,OAAO79W,GAAM6D,UAAUK,SAASm2W,IACrCt6W,KAAK2/W,UAAU3/W,KAAK2tN,aAAa3tN,KAAK89W,OAAO79W,KAG7CD,KAAK2/W,UAAU1/W,QAInBD,KAAK2/W,UAAU,QAGd1/W,0BACLD,KAAK2/W,UAAU3/W,KAAKk/W,YAAYj/W,KASxC26W,EAAIv/W,UAAUixM,QAAU,SAAUtvM,GAC9BgD,KAAK2+H,YAAY3+H,KAAKgB,QAAS6gW,GAAa7kW,GAC5CgD,KAAKgB,QAAQwC,aAAa,gBAAiB,GAAKxG,IAMpD49W,EAAIv/W,UAAU+yG,eAAiB,WAC3B,OAAOpuG,KAAK4uG,cAAc,eAAgB,cAO9CgsQ,EAAIv/W,UAAU0kC,cAAgB,WAC1B,MAAO,OASX66U,EAAIv/W,UAAU0tF,kBAAoB,SAAUiF,EAASC,GACjD,IAAK,IAAI7vF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,GAAU5vF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACD2mQ,EAAS/kQ,KAAKgB,SAAWgV,MAAOzT,EAAWyrF,EAAQh4E,SACnD,MACJ,IAAK,SACD+uP,EAAS/kQ,KAAKgB,SAAW+U,OAAQxT,EAAWyrF,EAAQj4E,UACpD/V,KAAK+7W,kBAAiB,GACtB,MACJ,IAAK,WACD/7W,KAAK2+H,YAAY3+H,KAAKgB,QAASgtF,EAAQ/6E,UAAU,GACjD,MACJ,IAAK,QACD,GAAM+6E,EAAQnyB,iBAAiBr9D,OAASyvF,EAAQpyB,iBAAiBr9D,MAuD7DwB,KAAK4oC,UAAY,EACbssC,EAAMl1E,KAAK86W,OACX96W,KAAK28W,iBAGL38W,KAAKsgX,SAAStyR,EAAQnyB,OAClB77D,KAAK+xW,YAAYt1W,OAAS,GAC1BuD,KAAK+6W,qBAET/6W,KAAK+xW,eACLtsW,EAAO,aAAyByrW,GAAalxW,KAAKgB,SAASgB,UAAY,GACvEhC,KAAKyF,OAAOzF,KAAKg8W,oBAhErB,IAAK,IADD3F,EAAc/3W,OAAOhB,KAAK0wF,EAAQnyB,OAC7B1/D,EAAI,EAAGA,EAAIk6W,EAAY55W,OAAQN,IAAK,CACzC,IAAI8V,EAAQmiB,SAAS91B,OAAOhB,KAAK0wF,EAAQnyB,OAAO1/D,GAAI,IAChDk7D,EAAW/4D,OAAOhB,KAAK0wF,EAAQnyB,MAAM5pD,IAAQ,GAC7C1K,EAASjJ,OAAO2vF,EAAQpyB,MAAM5pD,IAAQolD,GACtC3rC,EAASptB,OAAO0vF,EAAQnyB,MAAM5pD,IAAQolD,GACtCqlT,EAAUj3W,EAAO,IAAM20W,GAAe,KAAO7V,GAAW,IAAMtyV,EAAOjS,KAAKgB,SAC1EihX,EAAUx8W,EAAO,yBAA+CwM,EAAOjS,KAAKgB,SAChF,GAAiB,WAAbq2D,EAAuB,CACvB,IAAIxtB,KACJA,EAAIrlC,KAAKxE,KAAK67D,MAAM5pD,IACpBjS,KAAK67D,MAAMpzC,OAAOxW,EAAO,GACzBjS,KAAKo7W,eAAe3yV,OAAOxW,EAAO,GAClCjS,KAAK86W,MAAMj/S,MAAMpzC,OAAOxW,EAAO,GAC/B,IAAIiwW,EAAcxF,EAAQ54W,UAAUK,SAAS81W,IAC7C50W,EAAOq3W,GACP18W,KAAKugX,WAAY,EACjBvgX,KAAKshX,OAAOz3U,EAAK53B,GACbiwW,GACAliX,KAAK8hX,QAAQ7vW,GAEjBjS,KAAKugX,WAAY,EAErB,GAAiB,YAAblpT,IAA2B6d,EAAM+sS,GAAU,CAE3C,IAD+B,iBAAXv2V,GAAuBwpD,EAAMxpD,EAAO1pB,cAC3B,MAAd0pB,EAAO,IAA4B,MAAdA,EAAO,KAAeA,EAAOjvB,OAAQ,CACrE,IAAIg4W,EAASj0W,SAASmC,cAAc+oB,GACpCu2V,EAAQtgX,YAAY8yW,GACpBA,EAAO/vW,MAAM6pC,QAAU,OAEP,KAAX7iB,GAA+B,MAAdnkB,EAAO,IAC7B/G,SAASuL,KAAKpK,YAAY3B,KAAKgB,QAAQ2B,cAAc4E,IAAS7C,MAAM6pC,QAAU,OAC9E0zU,EAAQjgX,UAAY0pB,GAGpBu2V,EAAQjgX,UAAY0pB,EAGX,aAAb2rC,IACK6d,EAAMwnS,KACPA,EAAQ54W,UAAUS,OAAOgD,GACzBm1W,EAAQ54W,UAAUM,IAAIsnB,IAErBwpD,EAAM+sS,KACPA,EAAQn+W,UAAUS,OAAOgD,GACzB06W,EAAQn+W,UAAUM,IAAIsnB,KAGb,aAAb2rC,GACAr3D,KAAKqhX,UAAUpvW,GAAoB,IAAXyZ,GAmBpC,MACJ,IAAK,kBACD1rB,KAAKw8W,eAAexuR,EAAQyuR,iBAC5B,MACJ,IAAK,eACDz8W,KAAKg8W,aAAe/tR,EAAQ+tR,aAC5Bh8W,KAAKyF,OAAOuoF,EAAQguR,cACpB,MACJ,IAAK,kBACD,IAAImG,EAAa18W,EAAO,IAAMurW,GAAYhxW,KAAKgB,SAC/ChB,KAAKy7W,eAAeztR,EAAQ0tR,gBAAiByG,GAC7CniX,KAAKyF,OAAOzF,KAAKg8W,cACjB,MACJ,IAAK,YACDh8W,KAAKq+I,OAAOrwD,EAAQ96E,WACpB,MACJ,IAAK,eACDlT,KAAK86W,MAAMtU,aAAex4Q,EAAQw4Q,aAClCxmW,KAAK86W,MAAM52T,WACXlkD,KAAKk+W,wBACL,MACJ,IAAK,mBACDl+W,KAAK+7W,kBAAiB,GACtB/7W,KAAKyF,OAAOzF,KAAKg8W,iBAKjC5vR,IACI/jF,KAAesyW,KAChBC,EAAIv/W,UAAW,aAAS,GAC3B+wF,IACIllF,EAAS,SACV0zW,EAAIv/W,UAAW,aAAS,GAC3B+wF,IACIllF,EAAS,SACV0zW,EAAIv/W,UAAW,cAAU,GAC5B+wF,IACIllF,EAAS,KACV0zW,EAAIv/W,UAAW,gBAAY,GAC9B+wF,IACIllF,EAAS,IACV0zW,EAAIv/W,UAAW,oBAAgB,GAClC+wF,IACIllF,EAAS,QACV0zW,EAAIv/W,UAAW,uBAAmB,GACrC+wF,IACIllF,EAAS,YACV0zW,EAAIv/W,UAAW,wBAAoB,GACtC+wF,IACIllF,EAAS,eACV0zW,EAAIv/W,UAAW,oBAAgB,GAClC+wF,IACIllF,GAAS,IACV0zW,EAAIv/W,UAAW,iBAAa,GAC/B+wF,IACIllF,GAAS,IACV0zW,EAAIv/W,UAAW,yBAAqB,GACvC+wF,IACIllF,GAAS,IACV0zW,EAAIv/W,UAAW,uBAAmB,GACrC+wF,IACIrkF,KAAY0yW,KACbG,EAAIv/W,UAAW,iBAAa,GAC/B+wF,IACItjF,KACD8xW,EAAIv/W,UAAW,eAAW,GAC7B+wF,IACItjF,KACD8xW,EAAIv/W,UAAW,cAAU,GAC5B+wF,IACItjF,KACD8xW,EAAIv/W,UAAW,aAAS,GAC3B+wF,IACItjF,KACD8xW,EAAIv/W,UAAW,iBAAa,GAC/B+wF,IACItjF,KACD8xW,EAAIv/W,UAAW,gBAAY,GAC9B+wF,IACItjF,KACD8xW,EAAIv/W,UAAW,gBAAY,GAC9B+wF,IACItjF,KACD8xW,EAAIv/W,UAAW,eAAW,GAC7B+wF,IACItjF,KACD8xW,EAAIv/W,UAAW,iBAAa,GAC/Bu/W,EAAMxuR,IACFhjF,GACDwxW,IAELztQ,ICx8CEthB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAc5D+lF,GAAO,aAEPi/P,GAAc,qBACdC,GAAa,oBACbC,GAAW,cACXC,GAAW,cACXC,GAAa,gBACb9mK,GAAQ,UACRrhD,GAAS,WACTooN,GAAO,kBACPC,GAAU,YACV5oP,GAAO,UACP6oP,GAAW,iBAGXC,GAAY,eAMZC,GAAU,YAEVC,GAAW,cAIXC,GAAU,YACVz/P,GAAW,aACX0/P,GAAW,aACXC,GAAgB,mBAKhBC,GAAQ,UAERC,GAAe,qBACfC,GAAgB,UAEhB35J,GAAQ,eAIR45J,IACAC,SAAU,OACV75K,SAAU,WACVQ,SAAU,QACVF,SAAU,GACVD,YAAa,IAKby5K,GAAgC,SAAU72R,GAE1C,SAAS62R,IACL,OAAkB,OAAX72R,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAkD/D,OApDA6rF,GAAU03R,EAAgB72R,GAI1BN,IACIllF,EAAS,UACVq8W,EAAeloX,UAAW,aAAS,GACtC+wF,IACIllF,OACDq8W,EAAeloX,UAAW,kBAAc,GAC3C+wF,IACIllF,EAAS,aACVq8W,EAAeloX,UAAW,gBAAY,GACzC+wF,IACIllF,EAAS,gBACVq8W,EAAeloX,UAAW,mBAAe,GAC5C+wF,IACIllF,EAAS,mBACVq8W,EAAeloX,UAAW,sBAAkB,GAC/C+wF,IACIllF,EAAS,YACVq8W,EAAeloX,UAAW,eAAW,GACxC+wF,IACIllF,EAAS,OACVq8W,EAAeloX,UAAW,UAAM,GACnC+wF,IACIllF,EAAS,aACVq8W,EAAeloX,UAAW,gBAAY,GACzC+wF,IACIllF,EAAS,cACVq8W,EAAeloX,UAAW,iBAAa,GAC1C+wF,IACIllF,EAAS,aACVq8W,EAAeloX,UAAW,gBAAY,GACzC+wF,IACIllF,EAAS,OACVq8W,EAAeloX,UAAW,aAAS,GACtC+wF,IACIllF,EAAS,aACVq8W,EAAeloX,UAAW,gBAAY,GACzC+wF,IACIllF,EAAS,OACVq8W,EAAeloX,UAAW,iBAAa,GAC1C+wF,IACIllF,EAAS,SACVq8W,EAAeloX,UAAW,YAAQ,GACrC+wF,IACIllF,EAAS,YACVq8W,EAAeloX,UAAW,eAAW,GACxC+wF,IACIllF,EAAS,gBACVq8W,EAAeloX,UAAW,mBAAe,GACrCkoX,GACT/iT,IAKEgjT,GAAgC,SAAU92R,GAE1C,SAAS82R,IACL,OAAkB,OAAX92R,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAU23R,EAAgB92R,GAI1BN,IACIllF,EAAS,cACVs8W,EAAenoX,UAAW,cAAU,GACvC+wF,IACIllF,EAAS,MACVs8W,EAAenoX,UAAW,gBAAY,GACzC+wF,IACIllF,EAAS,WACVs8W,EAAenoX,UAAW,cAAU,GAChCmoX,GACThjT,IAKEijT,GAAuC,SAAU/2R,GAEjD,SAAS+2R,IACL,OAAkB,OAAX/2R,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAU43R,EAAuB/2R,GAIjCN,IACIrkF,GAAUwvB,OAAQ,UAAWrsB,SAAU,IAAK8U,OAAQ,UAAYwjW,KACjEC,EAAsBpoX,UAAW,gBAAY,GAChD+wF,IACIrkF,GAAUwvB,OAAQ,YAAarsB,SAAU,IAAK8U,OAAQ,UAAYwjW,KACnEC,EAAsBpoX,UAAW,cAAU,GACvCooX,GACTjjT,IAaEkjT,GAA0B,SAAUh3R,GAEpC,SAASg3R,EAAS1wW,EAAShS,GACvB,IAAIjB,EAAQ2sF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAEnD,OADAD,EAAM4jX,iBAAkB,EACjB5jX,EA4hFX,OAhiFA8rF,GAAU63R,EAAUh3R,GAMpBk3R,EAAaF,EAMbA,EAASroX,UAAU0kC,cAAgB,WAC/B,MAAO,YAKX2jV,EAASroX,UAAUoX,UAAY,WAC3B,IAAI1S,EAAQC,KACZA,KAAK6jX,oBACL7jX,KAAK8jX,iBAAkB,EACvB9jX,KAAKsiB,WAAY,EACjBtiB,KAAKw4G,YACDzC,OAAQ,SACR/2F,IAAK,MACL22F,MAAO,QACPe,GAAI,KACJR,KAAM,OACN2N,SAAU,YACVE,SAAU,YACVC,UAAW,aACXF,OAAQ,UACRigQ,SAAU,iBACVC,OAAQ,eACRC,UAAW,aACXC,SAAU,YACVC,QAAS,WACTC,MAAO,SACPC,UAAW,kBACXC,QAAS,gBACTC,WAAY,cACZC,UAAW,aACXC,SAAU,YACVC,OAAQ,uBACRC,KAAM,qBACNC,QAAS,mBACTC,OAAQ,kBACRC,MAAO,iBACPzmV,MAAO,SAEXr+B,KAAKotM,gBACDhF,gBAAgB,EAChBz6C,UAAU,EACV46C,gBAAiB85K,GACjB/6K,eAAgB+7K,GAChB/6K,mBAAoB,OACpBnB,YAAa,SAAUtmM,GACnBd,EAAMglX,iBAAiBlkX,KAG/Bb,KAAKglX,eAAehlX,KAAKssB,QACzBtsB,KAAK8uM,OAAS,IAAIh3K,OAClB93B,KAAKilX,YACLjlX,KAAKklX,UAAW,EAChBllX,KAAKmlX,gBACDjwS,EAAMl1E,KAAKgrD,gBACXhrD,KAAKgH,eAAgBgkD,mBAAqB,GAE1CkqB,EAAMl1E,KAAKolX,eACXplX,KAAKgH,eAAgBo+W,kBAAoB,IAQjD1B,EAASroX,UAAU+yG,eAAiB,WAEhC,OAAOpuG,KAAK4uG,cADK,gBAAiB,kBAOtC80Q,EAASroX,UAAUsyG,OAAS,WACxB3tG,KAAKsiB,WAAY,EACjBtiB,KAAK+vG,aACL/vG,KAAKqlX,iBACLrlX,KAAKslX,kBACLtlX,KAAKygI,YACLzgI,KAAKulX,kBAAkBvlX,KAAKqiE,cAC5BriE,KAAKwlX,eAAexlX,KAAKylX,kBACzBzlX,KAAKykB,cAETi/V,EAASroX,UAAU00G,WAAa,WAC5B/vG,KAAKgB,QAAQwC,aAAa,OAAQ,QAClCxD,KAAKgB,QAAQwC,aAAa,WAAY,KACtCxD,KAAKgB,QAAQwC,aAAa,wBAAyBxD,KAAKgB,QAAQsC,GAAK,WACrEtD,KAAK2+H,YAAY,KAAM3+H,KAAKiT,UAC5BjT,KAAKouH,eACLpuH,KAAK0lX,WAAW1lX,KAAK2lX,eACrB3lX,KAAK4lX,eAAiB5lX,KAAKy6B,iBAAiBz6B,KAAK6lX,eAErDnC,EAASroX,UAAU+yH,aAAe,WAC9BpuH,KAAKkT,UAAYvP,GAAU3D,KAAKgB,SAxP9B,SAwP+CqD,GAAarE,KAAKgB,SAxPjE,UA0PN0iX,EAASroX,UAAUolI,UAAY,WAC3B,IACI31H,GACApF,SAFU,6BAGVqF,OAAQ,IAAM43W,GAAW,OAAS7oP,GAAO,8BAA2CqpP,IAExFnjX,KAAK0uJ,SAAW/jJ,EAAa3K,KAAKgB,QAAS8J,GAC3C,IAAIg7W,GACApgX,SAAU,IAAMi9W,GAAW,OAAS7oP,GACpC7uH,gBAAgB,GAEpBjL,KAAK+lX,aAAep7W,EAAa3K,KAAKgB,QAAS8kX,IAEnDpC,EAASroX,UAAUqqX,WAAa,SAAUx3K,GACtCA,EAAYvqM,GAAU3D,KAAKgB,SA/PjB,kBA+P0CqD,GAAarE,KAAKgB,SA/P5D,mBAiQd0iX,EAASroX,UAAU2qX,eAAiB,SAAU93K,GAC1C,IAAI+3K,EAAUxgX,EAAO,IAAM+8W,GAAYxiX,KAAKgB,SACxCktM,EACA+3K,EAAQziX,aAAa,uBAAwB,QAG7CyiX,EAAQv6W,gBAAgB,yBAGhCg4W,EAASroX,UAAUo/B,iBAAmB,SAAUxrB,GAC5C,GAAIA,EACA,IAEI,GAAIzO,SAASgB,iBAAiByN,GAAUxS,OACpC,OAAOuS,GAAQxO,SAASmC,cAAcsM,GAAUjN,UAAUkO,QAGlE,MAAOrP,GACH,OAAOmO,GAAQC,KAK3By0W,EAASroX,UAAUgqX,eAAiB,WAChC,IAAItlX,EAAQC,KACZA,KAAKilX,SAASzgX,KAAK,SACfxE,KAAKssB,OAAOw4C,sBAAsBC,GAClC/kE,KAAKssB,OAAOw4C,WAAWw5F,aAAat+J,KAAKszM,SAAStzM,KAAKssB,SAASg4K,KAAK,SAAUzjM,GAC3Ed,EAAMklX,SAAStsN,MACf54J,EAAMmmX,SAAWrlX,EAAE9B,OACnBgB,EAAMomX,eAAiBpmX,EAAMqmX,UAC7BrmX,EAAMsmX,cACNtmX,EAAMqhF,aAAY,GACY,IAA1BrhF,EAAMklX,SAASxoX,QAAiBsD,EAAMmlX,UACtCnlX,EAAMumX,cAKdtmX,KAAKilX,SAAStsN,MACVzjF,EAAMl1E,KAAKssB,OAAOw4C,YAClB9kE,KAAKumX,SAAWvmX,KAAKkmX,aAGrBlmX,KAAKkmX,SAAWlmX,KAAKssB,OAAOw4C,WAC5B9kE,KAAKqmX,eAETrmX,KAAKohF,aAAY,IAEQ,IAAzBphF,KAAKilX,SAASxoX,QAAiBuD,KAAKklX,UACpCllX,KAAKsmX,YAGb5C,EAASroX,UAAUi4M,SAAW,SAAUhlM,EAAQtR,QAC9B,IAAVA,IAAoBA,EAAQ,MAChC,IACI8/D,EADA0C,KAEJ,GAAKlxD,EAAOwuD,MAgBRA,EAAQxuD,EAAOwuD,MAAMz9D,YAhBN,CACfy9D,EAAQ,IAAI8H,GAEZ,IAAK,IADDt6D,EAAOtK,KAAK8+D,oBAAoBxwD,GAC3BlQ,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKgN,GAAOlM,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC3D,IAAI4jE,EAAMn/D,EAAGzE,GACD,eAAR4jE,GAAgC,cAARA,GAA+B,UAARA,GAAqB1zD,EAAO0zD,KACtC,IAAlCxC,EAAQjhE,QAAQ+P,EAAO0zD,KAC1BxC,EAAQh7D,KAAK8J,EAAO0zD,IAG5BlF,EAAMr3D,OAAO+5D,GACTl1D,EAAK3D,eAAe,cACpBm2D,EAAMx3B,KAAKh3B,EAAOowJ,WAU1B,OAJAvnB,GAASuxD,WAAW1oM,KAAK2oM,UAAWr6L,EAAOwgB,KAAMguC,GAC5CoY,EAAMl4E,IAAWk4E,EAAM5mE,EAAOk4W,WAC/B1pT,EAAMqI,MAAM72D,EAAOk4W,SAAU,QAAUxmX,KAAKmmX,eAAiBxqW,WAAW3e,GAASA,GAE9E8/D,GAEX4mT,EAASroX,UAAU+qX,QAAU,WACzB,QAAOpmX,KAAKkmX,SAAS,IAA6D,iBAA/CrpX,EAASmD,KAAKssB,OAAOhpB,GAAItD,KAAKkmX,SAAS,KAE9ExC,EAASroX,UAAUgrX,YAAc,WAE7B,GADArmX,KAAK4lF,SAAW5lF,KAAKymX,YAAYzmX,KAAKkmX,SAAUlmX,KAAKssB,QAC/B,IAAlBtsB,KAAK4lF,SAAgB,CACrB5lF,KAAK0mX,YAAc1mX,KAAK2mX,eAAe3mX,KAAKkmX,SAAUlmX,KAAKssB,OAAOk6V,UAClE,IAAII,EAAY5mX,KAAK6mX,cAAc7mX,KAAKkmX,cAAU/qX,GAAW,GACzD+5E,EAAM0xS,GACN5mX,KAAKumX,YAGLvmX,KAAKumX,SAAWK,OAIpB5mX,KAAKumX,SAAWvmX,KAAKkmX,UAG7BxC,EAASroX,UAAU+lF,YAAc,SAAU0lS,GACvC9mX,KAAKotM,eAAe9F,eAAevlC,MAAQ,EAC3C/hK,KAAKgqM,UAAY7yD,GAASkzD,WAAWrqM,KAAKmB,cAAe2lX,EAAW9mX,KAAKumX,SAAWvmX,KAAK+mX,cAAc/mX,KAAKumX,UAAWvmX,KAAKotM,gBAC5HptM,KAAKgB,QAAQW,YAAY3B,KAAKgqM,WAC9BhqM,KAAKgnX,aAAahnX,KAAKgB,UAE3B0iX,EAASroX,UAAU0pX,iBAAmB,SAAUlkX,GAC5C,GAAIb,KAAK2nM,aAAc,CACnB,IAAIs/K,EAAcn0W,GAAe9S,KAAKmB,eAAe,GAAQ8R,SAAUjT,KAAKknX,aACxEv5U,EAAOloC,EAAO,cAAe5E,EAAEmd,MAC/B1a,EAAKzC,EAAEmd,KAAKnL,aAAa,YAC7BhS,EAAEmd,KAAKzM,WAAW,GAAGrM,aAAa+hX,EAAapmX,EAAEmd,KAAKzM,WAAW,GAAGA,WAAW2jE,EAAMvnC,GAAQ,EAAI,IACjG,IAAI6/K,EAAa3wN,EAASgE,EAAEyrB,OAAO49K,UAAWrpM,EAAEk6F,SAC5C/6F,KAAKolX,aAAa7mX,QAAQ+E,IAAO,GACjCmC,EAAO,WAAqBwhX,GAAanjX,UAAUM,IAAI8+W,IACvD+D,EAAYzjX,aAAa,eAAgB,QACzCxD,KAAKmnX,SAAStmX,EAAEmd,OAEVk3D,EAAMs4I,IAAyC,SAA1BA,EAAWtgN,WAMtC+5W,EAAYzjX,aAAa,eAAgB,UALzCiC,EAAO,WAAqBwhX,GAAanjX,UAAUM,IAAI8+W,IACvD+D,EAAYzjX,aAAa,eAAgB,QACzCxD,KAAKmnX,SAAStmX,EAAEmd,OAKpB,IAAIopW,EAAQ3hX,EAAO,WAAqBwhX,GACxC1hX,GAAanB,IAAIgjX,EAAO,YAAapnX,KAAKqnX,kBAAmBrnX,MAC7DuF,GAAanB,IAAIgjX,EAAO,UAAWpnX,KAAKqnX,kBAAmBrnX,MAE3DA,KAAK2lX,eACL3lX,KAAKsnX,cAAczmX,EAAEmd,MAErBhe,KAAKunX,sBAAwB1mX,EAAEmd,KAAKla,UAAUK,SAASm/G,KACvDziH,EAAEmd,KAAKxa,aAAa,gBAAiB,SAEzC,IAAI8oB,EAASzrB,EAAEyrB,OAGf,GAFAtsB,KAAKwnX,eAAe3mX,EAAGyrB,EAAOosH,SAAUp1B,IACxCtjH,KAAKwnX,eAAe3mX,EAAGyrB,EAAOo2K,SAAUsgL,KACnC9tS,EAAMl1E,KAAK4lX,gBAAiB,CAC7B,IAAIt3K,EAAUztM,EAAEmd,KAAKrb,cAAc,IAAM4/W,IACzCj0K,EAAQtsM,UAAY,GACpBoD,EAAOpF,KAAK4lX,eAAe/kX,EAAEk6F,SAAUuzG,GAE3C,IAAI/gM,GACAhN,KAAMM,EAAEmd,KACRypW,SAAU5mX,EAAEk6F,QACZjsE,KAAMjuB,EAAEiuB,MAEZ9uB,KAAK0mB,QAAQ,WAAYnZ,IAE7Bm2W,EAASroX,UAAUgsX,kBAAoB,SAAUxmX,GAE7C0S,GAAmB1S,EADF4E,EAAO,sBAAsB5E,EAAEsG,OAAOkN,iBAG3DqvW,EAASroX,UAAUmsX,eAAiB,SAAU3mX,EAAG8uD,EAAQ18C,GACrD,IACIy0W,EAAc7qX,EAAS8yD,EADhB9uD,EAAEk6F,SAER7lB,EAAMwyS,IAA2C,UAA3BA,EAAYx6W,YACnCrM,EAAEmd,KAAKla,UAAUM,IAAI6O,IAG7BywW,EAASroX,UAAUorX,YAAc,SAAUtjN,EAAI70J,GAC3C,GAAItO,KAAKssB,OAAOw4C,sBAAsBC,GAAa,CAC/C,IAAK,IAAI5oE,EAAI,EAAGA,EAAIgnK,EAAG1mK,OAAQN,IAC3B,GAA6B,iBAAjBmS,EAAOjO,OAAuB60E,EAAMr4E,EAASyR,EAAOjO,MAAO8iK,EAAGhnK,KACtE,OAAO,EAGf,OAAO,EAEFA,EAAI,EAAb,IAAK,IAAW0F,EAAMshK,EAAG1mK,OAAQN,EAAI0F,EAAK1F,IAAK,CAC3C,GAA6B,iBAAjBmS,EAAOjO,QAAwB60E,EAAMr4E,EAASyR,EAAOjO,MAAO8iK,EAAGhnK,KACvE,OAAO,EAEX,IAAK+4E,EAAMr4E,EAASyR,EAAOk4W,SAAUrjN,EAAGhnK,OAAS+4E,EAAMr4E,EAASyR,EAAO05L,YAAa7kC,EAAGhnK,KACnF,OAAO,EAGf,OAAO,GAEXunX,EAASroX,UAAUsrX,eAAiB,SAAU7hT,EAAYqlI,GAItD,IAAK,IAHDS,GAAW,IAAIhmI,IAAQ0vB,MAAM61G,GAC7BhnC,EAAKhsB,GAASyxD,cAAc9jI,EAAY8lI,GACxCE,KACKrnL,EAAI,EAAGA,EAAI0/I,EAAG1mK,OAAQgnB,IAAK,CAChC,IAAIonL,EAAU1nC,EAAG1/I,GAAGo4C,MACpBivI,EAAQtmM,KAAKqmM,GAEjB,OAAOC,GAEX44K,EAASroX,UAAU0rX,cAAgB,SAAU1iR,GAIzC,OAHIA,GAA2B,SAAnBrkG,KAAK2oM,YACbtkG,EAAO8yC,GAASyxD,cAAcvkG,EAAM8yC,GAASuxD,WAAW1oM,KAAK2oM,UAAW3oM,KAAKssB,OAAOwC,QAEjFu1E,GAEXq/Q,EAASroX,UAAU2rX,aAAe,SAAUhmX,GAExC,IAAK,IADD2mX,EAAS/hX,EAAU,cAAa5E,GAC3BqlB,EAAI,EAAGA,EAAIshW,EAAOlrX,OAAQ4pB,IAC/BshW,EAAOthW,GAAG7iB,aAAa,MA1bvB,cA4bJ,GAAIxD,KAAKklX,SAAU,CAEf,IAAK,IADD0C,EAAShiX,EAAU,IAAM09G,GAAUtiH,GAC9B7E,EAAI,EAAGA,EAAIyrX,EAAOnrX,OAAQN,IAAK,CACpC6D,KAAK6nX,WAAWD,EAAOzrX,GAAI,MAC3B,MAEJkI,EAAYujX,EAAQtkQ,IAGxB,IAAK,IADDwkQ,EAASliX,EAAU,IAAM08W,GAAW,SAAWU,GAAW,IAAKhiX,GAC1DyiB,EAAI,EAAGA,EAAIqkW,EAAOrrX,OAAQgnB,IAAK,CACpC,IAAIkqB,EAAOloC,EAAO,cAAeqiX,EAAOrkW,IACpCkqB,GAAQA,EAAK7pC,UAAUK,SAASk+W,MAChCyF,EAAOrkW,GAAGjgB,aAAa,gBAAiB,SACxCG,GAAUmkX,EAAOrkW,IAAKw/V,KAIzB,IADD8E,EAASniX,EAAU,IAAMo9W,GAAUhiX,GACvC,IAAS7E,EAAI,EAAGA,EAAI4rX,EAAOtrX,OAAQN,IAC/B6D,KAAKgoX,iBAAiBD,EAAO5rX,IAEjCkI,EAAY0jX,EAAQ/E,IACpBhjX,KAAKioX,aACDjoX,KAAKklX,UACLllX,KAAKkoX,qBAGbxE,EAASroX,UAAU6sX,kBAAoB,WACnC,IAAInoX,EAAQC,KACZ,GAAIA,KAAK2nM,aAAc,CACnB,IAAIwgL,KAAa3tW,UAAWxa,KAAKolX,cACjCplX,KAAKolX,aAAahmX,QAAQ,SAAUpC,EAAOiV,GAEnCijE,EADWn1E,EAAMiB,QAAQ2B,cAAc,cAAgB3F,EAAQ,SAE/DmrX,EAAUA,EAAQxgV,OAAO,SAAU9mC,GAAK,OAAOA,IAAM7D,OAG7DgD,KAAKgH,eAAgBo+W,aAAc+C,IAAW,KAGtDzE,EAASroX,UAAU+sX,uBAAyB,SAAUpnX,GAClD,IAAKk0E,EAAMl0E,GAAU,CACjB,GAAIA,EAAQ8C,UAAUK,SAASg/G,IAC3B,OAEJ,IAAI6mF,EAAYhpM,EACZA,EAAQ8C,UAAUK,SAASm+W,MAC3Bt4K,EAAYvkM,EAAO,IAAM+8W,GAAYxhX,IAEzC,IAAIokX,EAAex/W,EAAU,WAAaokM,GACtCt/I,EAAQ9kD,EAAU,IAAM08W,GAAUt4K,GAClCq+K,EAAcrnX,EAAQ0M,uBAAuBy1W,IAAc,GAC3Dz4T,EAAMjuD,SAAW2oX,EAAa3oX,OAC9BuD,KAAK2gH,YAAY0nQ,EAAa,QAAS,MAAM,GAAM,GAE9CjD,EAAa3oX,OAAS,EAC3BuD,KAAK2gH,YAAY0nQ,EAAa,gBAAiB,MAAM,GAAM,GAE9B,IAAxBjD,EAAa3oX,QAClBuD,KAAK2gH,YAAY0nQ,EAAa,UAAW,MAAM,GAAM,GAEzD,IAAIC,EAAWziX,EAAQ7E,EAAS,IAAMwhX,IACtC,IAAKttS,EAAMozS,GAAW,CAClB,IAAIC,EAAgB1iX,EAAQyiX,EAAU,IAAMhG,IAC5CtiX,KAAKooX,uBAAuBG,MAIxC7E,EAASroX,UAAUmtX,sBAAwB,SAAUxnX,EAASH,GAC1D,IAAKq0E,EAAMl0E,GAAU,CACjB,IAAI25B,EAAel1B,EAAO,IAAM+8W,GAAYxhX,GACxCynX,OAAa,EACjB,IAAKvzS,EAAMv6C,GAAe,CACtB8tV,EAAa7iX,EAAU,IAAMu9W,GAAcxoV,GAG3C,IAAK,IAFDuvK,EAAYlpM,EAAQ0M,uBAAuB01W,IAAe,GAAGt/W,UAAUK,SAAS++W,IAChFwF,OAAe,EACVz2W,EAAQ,EAAGA,EAAQw2W,EAAWhsX,OAAQwV,IAAS,CACpD,GAAKijE,EAAMl1E,KAAK2oX,kBAAqBzzS,EAAMr4E,EAASmD,KAAKssB,OAAO49K,UAAWlqM,KAAK2oX,gBAAgB12W,KAG3F,CACD,IAAI22W,EAAgBH,EAAWx2W,GAAOvE,uBAAuB01W,IAAe,GAAGt/W,UAAUK,SAAS++W,IAClGwF,GAAiB1oX,KAAKklX,UAAY0D,EAAiB,QAAW1+K,EAAY,QAAU,eAJpFw+K,EAAe7rX,EAASmD,KAAKssB,OAAO49K,UAAWlqM,KAAK2oX,gBAAgB12W,IAAU,QAAU,UAM5FjS,KAAK2gH,YAAY8nQ,EAAWx2W,GAAQy2W,EAAc7nX,GAAG,GAAM,OAK3E6iX,EAASroX,UAAUwtX,iBAAmB,SAAUn+T,EAAOo+T,GACnD,GAAK5zS,EAAMxqB,GAYP,IAAK,IADD+9T,EAAa7iX,EAAU,IAAMu9W,GAAcnjX,KAAKgB,SAC3CiR,EAAQ,EAAGA,EAAQw2W,EAAWhsX,OAAQwV,IAC3CjS,KAAK2gH,YAAY8nQ,EAAWx2W,GAAQ62W,EAAU,QAAU,gBAZ5D,IAAK,IAAI3sX,EAAI,EAAG0F,EAAM6oD,EAAMjuD,OAAQN,EAAI0F,EAAK1F,IAAK,CAC9C,IAAI4sX,EAAQ/oX,KAAK0wB,WAAWg6B,EAAMvuD,IAClC,IAAI+4E,EAAM6zS,GAAV,CAGA,IAAIC,EAAWvjX,EAAO,IAAM+8W,GAAa,KAAOW,GAAc4F,GAC9D/oX,KAAKipX,kBAAkBD,GAAWF,EAASC,EAAO,SAU9DrF,EAASroX,UAAUslH,YAAc,SAAU5uG,EAASg2C,EAAOlnD,EAAGqoX,EAAWC,GACrE,IAAIvoQ,EACArzG,EACA67W,EAASvjX,EAAQkM,EAAS,IAAMuwW,IACpC,GAAK4G,IACDlpX,KAAK6jX,oBACLt2W,EAAYvN,KAAKqpX,cAAcD,EAAQrhU,EAAOlnD,GAC9Cb,KAAK0mB,QAAQ,eAAgBnZ,IACzBA,EAAU8qB,QAJlB,CAQA,IAAIjlB,EAAYrB,EAAQrE,uBAAuB01W,IAAe,GAsB9D,GArBc,UAAVr7T,GAAsB30C,EAAUtP,UAAUK,SAAS++W,IAMpC,YAAVn7T,IAAwB30C,EAAUtP,UAAUK,SAAS++W,KAAU9vW,EAAUtP,UAAUK,SA9jBhF,YA+jBRE,GAAa+O,IAAa8vW,GA/jBlB,WAgkBRljX,KAAKspX,YAAYF,GACjBxoQ,EAAY,SAEG,kBAAV74D,GAA8B30C,EAAUtP,UAAUK,SAnkB/C,YAokBRiP,EAAUtP,UAAUS,OAAO2+W,IAC3B9vW,EAAUtP,UAAUM,IArkBZ,UAskBRpE,KAAKspX,YAAYF,GACjBxoQ,EAAY,UAdZxtG,EAAUtP,UAAUS,OAzjBZ,UA0jBR6O,EAAUtP,UAAUM,IAAI8+W,IACxBljX,KAAKmnX,SAASiC,GACdxoQ,EAAY,QAahBA,EAAsB,UAAV74D,EAAoB,OAAmB,YAAVA,EAAsB,QAAU64D,EACpE1rC,EAAM0rC,IACP7uG,EAAQvO,aAAa,eAAgBo9G,GAErCuoQ,EAAO,CACP,IAAI3sX,KAAUge,UAAWxa,KAAK6jX,kBAC9Bt2W,EAAYvN,KAAKqpX,cAAcD,EAAQrhU,EAAOlnD,GAC1C1D,EAAY+rX,KACZ37W,EAAU/Q,KAAOA,GAGpB0sX,GACIh0S,EAAM0rC,KACP7uG,EAAQvO,aAAa,eAAgBo9G,GACrCrzG,EAAU/Q,KAAK,GAAGgW,QAAUouG,EAC5B5gH,KAAK0mB,QAAQ,cAAenZ,GAC5BvN,KAAK6jX,uBAIjBH,EAASroX,UAAU8rX,SAAW,SAAU4B,GACpC,IAAIzlX,EAAKylX,EAAMl2W,aAAa,YACvBqiE,EAAM5xE,KAA0C,IAAnCtD,KAAKolX,aAAa7mX,QAAQ+E,IACxCtD,KAAKolX,aAAa5gX,KAAKlB,IAG/BogX,EAASroX,UAAUiuX,YAAc,SAAUP,GACvC,IAAI92W,EAAQjS,KAAKolX,aAAa7mX,QAAQwqX,EAAMl2W,aAAa,aACrDZ,GAAS,GACTjS,KAAKolX,aAAa38V,OAAOxW,EAAO,IAGxCyxW,EAASroX,UAAUguX,cAAgB,SAAUD,EAAQz5T,EAAQ9uD,GACzDb,KAAK6jX,iBAAiBr/W,KAAKxE,KAAKupX,YAAYH,IAC5C,IAAI3B,EAAWznX,KAAK6jX,iBACpB,OAASl0T,OAAQA,EAAQt3B,QAAQ,EAAO21F,cAAc94C,EAAMr0E,GAAmBN,KAAM6oX,EAAQ5sX,KAAMirX,IAEvG/D,EAASroX,UAAUirX,SAAW,WACZ7gX,EAAO,IAAM+8W,GAAYxiX,KAAKgB,SACpCwC,aAAa,OAAQ6/W,GAAaC,UAC1CtjX,KAAKgmX,eAAehmX,KAAKunX,qBACzB,IAAIiC,EAAY/jX,EAAO,IAAM68W,GAAUtiX,KAAKgB,SACxCwoX,IACA7lX,GAAU6lX,GAAY//J,IACtBzpN,KAAKypX,aAAa,KAAMD,IAE5BxpX,KAAK0pX,oBACL1pX,KAAKkoX,oBACLloX,KAAKklX,UAAW,EAChBllX,KAAKsiB,WAAY,EACjB,IAAI/U,GAAc/Q,KAAMwD,KAAKkmX,UAC7BlmX,KAAK0mB,QAAQ,YAAanZ,IAE9Bm2W,EAASroX,UAAUquX,kBAAoB,WACnC,IAAI9B,EAAShiX,EAAU,IAAM09G,GAAUtjH,KAAKgB,SACxC2oX,EAAQ3pX,KAAKgrD,cACjB,GAAI2+T,EAAMltX,OAAS,EAAG,CAClBuD,KAAKgH,eAAgBgkD,mBAAqB,GAC1C,IAAK,IAAI7uD,EAAI,EAAGA,EAAIwtX,EAAMltX,OAAQN,IAAK,CACnC,IAAIytX,EAAQnkX,EAAO,cAAgBkkX,EAAMxtX,GAAK,KAAM6D,KAAKgB,SAEzD,GADAhB,KAAK6nX,WAAW+B,EAAO,MAAM,IACxB5pX,KAAKunX,oBACN,YAKRvnX,KAAK6pX,iBAAiBjC,GAE1BvjX,EAAYujX,EAAQtkQ,KAExBogQ,EAASroX,UAAUwuX,iBAAmB,SAAUjC,GAC5C,IAAK,IAAIzrX,EAAI,EAAGA,EAAIyrX,EAAOnrX,SAClBmrX,EAAOzrX,GAAG2H,UAAUK,SAAS,cAC9BnE,KAAK6nX,WAAWD,EAAOzrX,GAAI,MAAM,GAEhC6D,KAAKunX,qBAJqBprX,OASvCunX,EAASroX,UAAU0lH,aAAe,SAAUzkH,GACxC,IAAI6K,EAAS7K,EAAMwgH,cAAc31G,OAEjC,GADA5B,GAAahB,OAAOvE,KAAKgB,QAAS,cAAehB,KAAK8pX,oBACjD3iX,IAAUnH,KAAK8jX,gBAApB,CAII,IAAIhgX,EAAYqD,EAAOrD,UACnB2sI,EAAK5qI,EAAQsB,EAAQ,IAAMm7W,IAC/B,GAAK7xO,EAAL,CAMI,GAFAzwI,KAAKywM,cACLzwM,KAAK+pX,gBAAgBt5O,GACjBzwI,KAAK2nM,eAAiBl3D,EAAG3sI,UAAUK,SAAS,aAAc,CAC1D,IAAI6lX,EAAenkX,EAAQsB,EAAQ,IAAMg8W,IACzC,IAAKjuS,EAAM80S,GAAe,CACtB,IAAI3pF,EAAe56R,EAAO,WAAqBukX,GAG/C,OAFAhqX,KAAKipX,kBAAkBe,EAAc3pF,EAAav8R,UAAUK,SAAS++W,IAAQzyO,EAAIn0I,EAAMwgH,oBACvF98G,KAAKiqX,kBAAkB3tX,EAAMwgH,cAAe2zB,IAIhD3sI,EAAUK,SAASk+W,IACnBriX,KAAKkqX,aAAaz5O,EAAItpI,EAAQ7K,GAEzBwH,EAAUK,SAASi+W,IACxBpiX,KAAKmqX,aAAa15O,EAAItpI,EAAQ7K,GAGzBwH,EAAUK,SAASq+W,KAAgB1+W,EAAUK,SAASm+W,KACvDtiX,KAAKoqX,aAAa35O,EAAIn0I,EAAMwgH,eAAe,GAGnD98G,KAAKiqX,kBAAkB3tX,EAAMwgH,cAAe2zB,MAIxDizO,EAASroX,UAAUgvX,kBAAoB,SAAUt4W,EAAS69M,EAAS/uN,GAC/D,IAAIuoX,EAASvjX,EAAQkM,EAAS,IAAMuwW,IACpCtiX,KAAK6jX,oBACL,IAAIjjQ,EAAagvG,EAAmB,QAAT,OACtB16I,EAAM0rC,IACP7uG,EAAQvO,aAAa,eAAgBo9G,GAEzC,IAAIrzG,EAAYvN,KAAKqpX,cAAcD,EAAQx5J,EAAU,UAAY,QAAS/uN,GAE1E,OADAb,KAAK0mB,QAAQ,eAAgBnZ,GACtBA,GAEXm2W,EAASroX,UAAUivX,iBAAmB,SAAUv4W,EAAS69M,EAAS/uN,GACjDgF,EAAQkM,EAAS,IAAMuwW,IAApC,IACI/0W,EAAYvN,KAAKqpX,cAAct3W,EAAS69M,EAAU,UAAY,QAAS/uN,GAC3E0M,EAAU/Q,KAAO+Q,EAAU/Q,KAAKisB,OAAO,EAAGlb,EAAU/Q,KAAKC,OAAS,GAClEuD,KAAK0mB,QAAQ,cAAenZ,IAEhCm2W,EAASroX,UAAU4uX,kBAAoB,SAAUppX,EAAG4vI,GAChD,IAAIljI,GACAjR,MAAOuE,EACPN,KAAMkwI,GAEVzwI,KAAK0mB,QAAQ,cAAenZ,IAEhCm2W,EAASroX,UAAUkvX,WAAa,SAAUnB,EAAQz7U,GAC9C,IAAI5tC,EAAQC,KACR2tC,EAAK7pC,UAAUK,SAASs+W,KACxBziX,KAAK8iB,YAAY6qB,GAErBtpC,GAAaspC,GAAO00U,IACpB1+W,GAAUgqC,GAAOy0U,IACjB,IAAI7kX,EAAQ,EACRyhB,EAAM,EACNtM,EAAQ1S,KACRmwI,EAAK1qI,EAAO,IAAM+8W,GAAY4G,GAC9BL,EAAQK,EACZppX,KAAKwqX,UAAUzB,EAAO54O,GACjBnwI,KAAKsiB,UAqBNtiB,KAAKyqX,aAAa1B,EAAO54O,EAAIxiG,GApB7B3tC,KAAK8uM,OAAO/2K,QAAQo4G,GAChBp5G,KAAM/2B,KAAK4uC,UAAUiwH,OAAOtnI,OAC5BrsB,SAAUlL,KAAK4uC,UAAUiwH,OAAO3zJ,SAChC0iF,eAAgB5tF,KAAK4uC,UAAUiwH,OAAO7+I,OACtCpB,MAAO,SAAU3e,GACb8oX,EAAMrkX,MAAMmV,SAAW,SACvBtc,EAAQwrX,EAAMr1T,aACd10C,EAAMvZ,EAAO,IAAMk9W,GAAUyG,GAAQ11T,cAEzC17B,SAAU,SAAU/3B,GAChBA,EAAKe,QAAQ0D,MAAM6pC,QAAU,QAC7B77B,EAAMg4W,cAAczqX,EAAM1C,EAAOyhB,IAErCA,IAAK,SAAU/e,GACXA,EAAKe,QAAQ0D,MAAM6pC,QAAU,QAC7BxuC,EAAM0qX,aAAa1B,EAAO54O,EAAIxiG,OAQ9C+1U,EAASroX,UAAUovX,aAAe,SAAUrB,EAAQj5O,EAAIxiG,GACpDwiG,EAAGzrI,MAAM6pC,QAAU,QACnB66U,EAAO1kX,MAAM6pC,QAAU,QACvB66U,EAAO1kX,MAAMmV,SAAW,GACxBuvW,EAAO1kX,MAAMqR,OAAS,GACtB1R,GAAaspC,GAAO+0U,IACpB0G,EAAO5lX,aAAa,gBAAiB,QACrCa,GAAa+kX,GAASnG,IAClBjjX,KAAKklX,UAAYllX,KAAK2qX,aACtB3qX,KAAK2qX,WAAa3qX,KAAK4qX,eAAexB,EAAQ,MAC9CppX,KAAK0mB,QAAQ,eAAgB1mB,KAAK2qX,cAG1CjH,EAASroX,UAAU8uX,aAAe,SAAUf,EAAQz7U,EAAM9sC,GACtD,IAAId,EAAQC,KACZ,IAAI2tC,EAAK7pC,UAAUK,SAASu+W,IAA5B,CAII/+W,GAAUgqC,GAAO+0U,IAErB,IAAImI,EACJ,GAAI7qX,KAAKklX,WACL2F,EAAU7qX,KAAK4qX,eAAexB,EAAQvoX,GACtCb,KAAK0mB,QAAQ,iBAAkBmkW,GAC3BA,EAAQxyV,QACRh0B,GAAaspC,GAAO+0U,QAJ5B,CAQAr+W,GAAaspC,GAAOy0U,IACpBz+W,GAAUgqC,GAAO00U,IACjB,IAAI9kX,EAAQ,EACRyhB,EAAM,EACNtM,EAAQ1S,KACRmwI,EAAK1qI,EAAO,IAAM+8W,GAAY4G,GAC9BL,EAAQK,EACZzlX,GAAUylX,GAASnG,IACnBjjX,KAAK8uM,OAAO/2K,QAAQo4G,GAChBp5G,KAAM/2B,KAAK4uC,UAAUklU,SAASv8U,OAC9BrsB,SAAUlL,KAAK4uC,UAAUklU,SAAS5oW,SAClC0iF,eAAgB5tF,KAAK4uC,UAAUklU,SAAS9zV,OACxCpB,MAAO,SAAU3e,GACb8oX,EAAMrkX,MAAMmV,SAAW,SACvBtc,EAAQkI,EAAO,IAAMk9W,GAAUyG,GAAQ11T,aACvC10C,EAAM+pW,EAAMr1T,cAEhB17B,SAAU,SAAU/3B,GAChByS,EAAMg4W,cAAczqX,EAAM1C,EAAOyhB,IAErCA,IAAK,SAAU/e,GACX8oX,EAAMrkX,MAAMmV,SAAW,GACvB5Z,EAAKe,QAAQ0D,MAAM6pC,QAAU,OAC7Bw6U,EAAMrkX,MAAMqR,OAAS,GACrB1R,GAAaspC,GAAO+0U,IACpB0G,EAAO5lX,aAAa,gBAAiB,SACjCzD,EAAMmlX,UACNnlX,EAAM2mB,QAAQ,gBAAiBmkW,SAK/CnH,EAASroX,UAAUmvX,UAAY,SAAUpB,EAAQj5O,GAC7CA,EAAGzrI,MAAM6pC,QAAU,QACnB4hG,EAAGzrI,MAAMC,WAAa,SACtBykX,EAAO1kX,MAAMqR,OAASqzW,EAAO11T,aAAe,KAC5Cy8E,EAAGzrI,MAAM6pC,QAAU,OACnB4hG,EAAGzrI,MAAMC,WAAa,IAE1B++W,EAASroX,UAAUqvX,cAAgB,SAAUzqX,EAAM1C,EAAOyhB,GACtD,IACI8rW,GAAiB9rW,EAAMzhB,KADV0C,EAAKiL,SAAWjL,EAAKg4B,WAAah4B,EAAKiL,UACR3N,EAChD0C,EAAKe,QAAQqT,cAAc3P,MAAMqR,OAAS+0W,EAAgB,MAE9DpH,EAASroX,UAAU2sX,iBAAmB,SAAU+C,EAAUC,GACtD,IAAIjrX,EAAQC,KACRirX,EAAQxlX,EAAO,cAAeslX,GAClC,IAAI71S,EAAM+1S,GAAV,CAGAjrX,KAAK+hB,YAAYkpW,GACjB,IAAIC,EACJ,GAAIlrX,KAAKssB,OAAOw4C,sBAAsBC,GAAa,CAC/C,IAAIg9F,EAAQ/hK,KAAK8gE,QAAQiqT,EAAU,IAAMvI,IAAY/lX,OACjD0uX,EAAWnrX,KAAKorX,eAAeprX,KAAKssB,OAAQy1I,EAAO,GACvD,GAAI7sF,EAAMi2S,IAAaj2S,EAAMi2S,EAASrmT,YAGlC,OAFAz/D,EAAO4lX,QACPF,EAASr/W,gBAAgB,iBAG7B1L,KAAKilX,SAASzgX,KAAK,SACnB2mX,EAASrmT,WAAWw5F,aAAat+J,KAAKszM,SAAS63K,EAAUJ,EAASl4W,aAAa,cAAcyxL,KAAK,SAAUzjM,GAIxG,GAHAd,EAAMklX,SAAStsN,MACfuyN,EAAarqX,EAAE9B,OACfgB,EAAM4oX,gBAAkBuC,EACpBh2S,EAAMg2S,IAAqC,IAAtBA,EAAWzuX,OAChC4I,EAAO4lX,GACPF,EAASr/W,gBAAgB,qBAExB,CACD3L,EAAMilX,eAAemG,GACrB,IAAI7nX,EAAKynX,EAASl4W,aAAa,YAC3B40W,EAAW1nX,EAAMsrX,cAAc/nX,GACnClG,EAAS,QAAS8tX,EAAYzD,GAC9B1nX,EAAMqtM,eAAe9F,eAAevlC,MAAQpmJ,WAAWovW,EAASl4W,aAAa,eAAiB,EAC9Fk4W,EAASppX,YAAYw1I,GAASkzD,WAAWtqM,EAAMoB,cAAe+pX,EAAYnrX,EAAMqtM,iBAChFrtM,EAAMwqX,WAAWQ,EAAUE,GAC3BlrX,EAAMurX,gBAAgBP,GACtBhrX,EAAMinX,aAAa+D,GACnBhrX,EAAMwrX,eAAeR,EAAUC,GAEL,IAA1BjrX,EAAMklX,SAASxoX,QAAiBsD,EAAMmlX,UACtCnlX,EAAMumX,iBAIb,CAGD,GAFA4E,EAAalrX,KAAK6mX,cAAc7mX,KAAKkmX,SAAU6E,EAASl4W,aAAa,aACrE7S,KAAK2oX,gBAAkBuC,EACnBh2S,EAAMg2S,IAAqC,IAAtBA,EAAWzuX,OAGhC,OAFA4I,EAAO4lX,QACPF,EAASr/W,gBAAgB,iBAIzB1L,KAAKotM,eAAe9F,eAAevlC,MAAQpmJ,WAAWovW,EAASl4W,aAAa,eAAiB,EAC7Fk4W,EAASppX,YAAYw1I,GAASkzD,WAAWrqM,KAAKmB,cAAenB,KAAK+mX,cAAcmE,GAAalrX,KAAKotM,iBAClGptM,KAAKuqX,WAAWQ,EAAUE,GAC1BjrX,KAAKsrX,gBAAgBP,GACrB/qX,KAAKgnX,aAAa+D,GAClB/qX,KAAKurX,eAAeR,EAAUC,MAI1CtH,EAASroX,UAAUiwX,gBAAkB,SAAUtqX,GACvChB,KAAK2nM,eACL3nM,KAAKwoX,sBAAsBxnX,GAC3BhB,KAAKooX,uBAAuBpnX,IAEhChB,KAAK2oX,gBAAkB,MAE3BjF,EAASroX,UAAUmwX,UAAY,SAAUl9W,EAAQm9W,EAAWC,GACxD,OAAID,IAAcC,EACPp9W,EAGAtO,KAAKwrX,UAAUxrX,KAAK2rX,eAAer9W,GAASm9W,EAAWC,EAAY,IAGlFhI,EAASroX,UAAU+vX,eAAiB,SAAU98W,EAAQm9W,EAAWC,GAC7D,OACID,IAAcC,EACP1rX,KAAK2rX,eAAer9W,GAGpBtO,KAAKorX,eAAeprX,KAAK2rX,eAAer9W,GAASm9W,EAAWC,EAAY,IAGvFhI,EAASroX,UAAUswX,eAAiB,SAAUr9W,GAC1C,MAAgC,iBAAjBA,EAAOjO,OAAsB60E,EAAM5mE,EAAOjO,OAAUiO,EAASA,EAAOjO,OAEvFqjX,EAASroX,UAAUwrX,cAAgB,SAAU9pX,EAAK49D,EAAUixT,QACzC,IAAXA,IAAqBA,GAAS,GAClC,IAAIr6W,EACJ,GAAI2jE,EAAMn4E,GACN,OAAOwU,EAEN,GAAsB,IAAlBvR,KAAK4lF,SACV,OAAO5lF,KAAK6rX,cAAc7rX,KAAK0mX,YAAa/rT,EAAUixT,GAGtD,GAAiC,iBAAtB5rX,KAAKssB,OAAOjsB,MACnB,IAAK,IAAIlE,EAAI,EAAG2vX,EAAS/uX,EAAIN,OAAQN,EAAI2vX,EAAQ3vX,IAAK,CAClD,IAAI4vX,EAASlvX,EAASmD,KAAKssB,OAAOhpB,GAAIvG,EAAIZ,IAC1C,GAAI4vX,GAAUA,EAAO7+W,aAAeytD,EAChC,OAAO99D,EAASmD,KAAKssB,OAAOjsB,MAAOtD,EAAIZ,IAEtC,IAAK+4E,EAAMr4E,EAASmD,KAAKssB,OAAOjsB,MAAOtD,EAAIZ,WAEzBhB,KADnBoW,EAAavR,KAAK6mX,cAAchqX,EAASmD,KAAKssB,OAAOjsB,MAAOtD,EAAIZ,IAAKw+D,IAEjE,MAMpB,OAAOppD,GAEXmyW,EAASroX,UAAUwwX,cAAgB,SAAUrvX,EAAMm+D,EAAUixT,GAEzD,IAAI12S,EAAM14E,GAGV,IAAK,IAAIL,EAAI,EAAG2vX,EAAStvX,EAAKC,OAAQN,EAAI2vX,EAAQ3vX,IAAK,CACnD,GAAK+4E,EAAM14E,EAAKL,GAAG,KAAQ+4E,EAAMr4E,EAASmD,KAAKssB,OAAOk6V,SAAUhqX,EAAKL,GAAG,KAKnE,OAAIyvX,EACEpvX,EAAKL,MALZ,GAAIU,EAASmD,KAAKssB,OAAOk6V,SAAUhqX,EAAKL,GAAG,IAAI+Q,aAAeytD,EAC1D,OAAOn+D,EAAKL,KAY5BunX,EAASroX,UAAUkwX,eAAiB,SAAUvqX,EAASgqX,GACnD,GAAIA,EAEA,IAAK,IADDgB,EAASpmX,EAAU,IAAMy8W,GAAYrhX,GAChC7E,EAAI,EAAG0F,EAAMmqX,EAAOvvX,OAAQN,EAAI0F,EAAK1F,IAAK,CAC/C,IACI20M,EAAQjrM,EADDmmX,EAAO7vX,GACQ,IAAMmmX,IAChCtiX,KAAK2qX,WAAa3qX,KAAK4qX,eAAe95K,EAAO,MAC7C9wM,KAAK0mB,QAAQ,gBAAiB1mB,KAAK2qX,YACnC3qX,KAAKgoX,iBAAiBl3K,EAAOk6K,KAIzCtH,EAASroX,UAAU+uX,aAAe,SAAU35O,EAAI5vI,EAAGorX,GAC1Cx7O,EAAG3sI,UAAUK,SAAS,eACnBnE,KAAKunX,sBAAyB1mX,GAAKA,EAAEmnB,SAAYikW,IAAgBjsX,KAAKksX,SAASz7O,GAC/EzwI,KAAKmsX,aAAa17O,EAAI5vI,GAGtBb,KAAK6nX,WAAWp3O,EAAI5vI,EAAGorX,KAInCvI,EAASroX,UAAU6wX,SAAW,SAAUz7O,GACpC,QAAOA,EAAG3sI,UAAUK,SAASk2J,KAEjCqpN,EAASroX,UAAUwsX,WAAa,SAAUp3O,EAAI5vI,EAAGorX,GAC7C,GAAI/2S,EAAMu7D,KAASzwI,KAAKunX,qBAAuBvnX,KAAKksX,SAASz7O,KAAQv7D,EAAMr0E,GACvEb,KAAK+pX,gBAAgBt5O,OADzB,CAIA,IAAIljI,EACJ,IAAIvN,KAAKklX,WACL33W,EAAYvN,KAAKosX,eAAe37O,EAAI,SAAU5vI,GAC9Cb,KAAK0mB,QAAQ,gBAAiBnZ,IAC1BA,EAAU8qB,QAHlB,CAUA,GAHKr4B,KAAKunX,sBAAyB0E,GAAiBprX,KAAMA,GAAMA,EAAEmnB,WAC9DhoB,KAAKqsX,kBAELrsX,KAAKunX,qBAAuB1mX,GAAKA,EAAEw3G,SAAU,CACxCr4G,KAAKssX,YACNtsX,KAAKssX,UAAY77O,GAErB,IAAI7qH,EAAa5lB,KAAKusX,OAAOhuX,QAAQyB,KAAKssX,WACtCxmW,EAAW9lB,KAAKusX,OAAOhuX,QAAQkyI,GACnC,GAAI7qH,EAAaE,EAAU,CACvB,IAAIuT,EAAOzT,EACXA,EAAaE,EACbA,EAAWuT,EAEf,IAAK,IAAIl9B,EAAIypB,EAAYzpB,GAAK2pB,EAAU3pB,IAAK,CACzC,IAAIqwX,EAAWxsX,KAAKusX,OAAOpwX,GACvBsI,EAAU+nX,KAAcA,EAAS1oX,UAAUK,SAAS,cACpDnE,KAAKysX,UAAUD,SAKvBxsX,KAAKssX,UAAY77O,EACjBzwI,KAAKysX,UAAUh8O,GAEnBzwI,KAAK+pX,gBAAgBt5O,GACjBzwI,KAAKklX,UACLllX,KAAK0mB,QAAQ,eAAgBnZ,MAGrCm2W,EAASroX,UAAU8wX,aAAe,SAAU17O,EAAI5vI,GAC5C,IAAI0M,EACAvN,KAAKklX,WACL33W,EAAYvN,KAAKosX,eAAe37O,EAAI,YAAa5vI,GACjDb,KAAK0mB,QAAQ,gBAAiBnZ,GAC1BA,EAAU8qB,UAIlBr4B,KAAK0wM,aAAajgE,GAClBzwI,KAAK+pX,gBAAgBt5O,GACjBzwI,KAAKklX,UACLllX,KAAK0mB,QAAQ,eAAgBnZ,KAGrCm2W,EAASroX,UAAU0uX,gBAAkB,SAAUt5O,GAC3C,IAAKv7D,EAAMu7D,GAAK,CACZ,IAAIi8O,EAAc1sX,KAAK2sX,iBACnBD,GACAroX,GAAaqoX,GAAcjjK,IAE/B9lN,GAAU8sI,GAAKg5E,IACfzpN,KAAKypX,aAAaiD,EAAaj8O,KAGvCizO,EAASroX,UAAUoxX,UAAY,SAAU1D,GACrCA,EAAMvlX,aAAa,gBAAiB,QACpCG,GAAUolX,GAAQ1uN,IAClB,IAAI/2J,EAAKylX,EAAMl2W,aAAa,YACvBqiE,EAAM5xE,KAA2C,IAApCtD,KAAKgrD,cAAczsD,QAAQ+E,IACzCtD,KAAKgrD,cAAcxmD,KAAKlB,IAGhCogX,EAASroX,UAAUq1M,aAAe,SAAUq4K,GACpC/oX,KAAKunX,oBACLwB,EAAMvlX,aAAa,gBAAiB,SAGpCulX,EAAMr9W,gBAAgB,iBAE1BrH,GAAa0kX,GAAQ1uN,IACrB,IAAIpoJ,EAAQjS,KAAKgrD,cAAczsD,QAAQwqX,EAAMl2W,aAAa,aACtDZ,GAAS,GACTjS,KAAKgrD,cAAcviC,OAAOxW,EAAO,IAGzCyxW,EAASroX,UAAUgxX,gBAAkB,WAEjC,IAAK,IADD35K,EAAa1yM,KAAKgB,QAAQQ,iBAAiB,IAAM64J,IAC5Cj8J,EAAK,EAAGo0M,EAAeE,EAAYt0M,EAAKo0M,EAAa/1M,OAAQ2B,IAAM,CACxE,IAAI4F,EAAMwuM,EAAap0M,GACnB4B,KAAKunX,oBACLvjX,EAAIR,aAAa,gBAAiB,SAGlCQ,EAAI0H,gBAAgB,iBAG5BrH,EAAYquM,EAAYr4C,IACxBr6J,KAAKgH,eAAgBgkD,mBAAqB,IAE9C04T,EAASroX,UAAU+wX,eAAiB,SAAUhD,EAAQz5T,EAAQ9uD,GAC1D,IAAI4mX,EAAWznX,KAAKupX,YAAYH,GAChC,OAASz5T,OAAQA,EAAQt3B,QAAQ,EAAO21F,cAAc94C,EAAMr0E,GAAmBN,KAAM6oX,EAAQ3B,SAAUA,IAE3G/D,EAASroX,UAAUiqX,gBAAkB,WACjCtlX,KAAK4sX,aAAkC,SAAlB5sX,KAAK6sX,SAAwBrhX,GAAQob,SAAW,QAAU,WAAc5mB,KAAK6sX,UAEtGnJ,EAASroX,UAAUyxX,cAAgB,SAAUjsX,GACzC,IAAIsG,EAAStG,EAAEi8G,cAAc31G,QACxBA,GAAUA,EAAOrD,UAAUK,SA9mC5B,YA8mC+CgD,EAAOrD,UAAUK,SAASg/G,KACzEh8G,EAAOrD,UAAUK,SAASq+W,KAAer7W,EAAOrD,UAAUK,SAASm+W,KACnEn7W,EAAOrD,UAAUK,SAAS21H,KAAS95H,KAAK2nM,cAAgB9hM,EAAQsB,EAAQ,IAAMg8W,KAI9EnjX,KAAK+sX,qBAAqBlnX,EAAQsB,EAAQ,IAAMm7W,IAAWzhX,IAGnE6iX,EAASroX,UAAU0xX,qBAAuB,SAAU3D,EAAQvoX,GACxD,IAAI8sC,EAAOloC,EAAO,cAAe2jX,GACjC,GAAKz7U,IAAQA,EAAK7pC,UAAUK,SAASu+W,IAArC,CAIoB/0U,EAAK7pC,UACPK,SAASk+W,IACnBriX,KAAKkqX,aAAad,EAAQz7U,EAAM9sC,GAGhCb,KAAKmqX,aAAaf,EAAQz7U,EAAM9sC,KAI5C6iX,EAASroX,UAAU6uX,aAAe,SAAUd,EAAQz7U,EAAM9sC,EAAGmqX,GACzD,IAAIr9U,EAAK7pC,UAAUK,SAASu+W,IAM5B,GAFI/+W,GAAUgqC,GAAO+0U,IAEjB1iX,KAAKklX,WACLllX,KAAK2qX,WAAa3qX,KAAK4qX,eAAexB,EAAQvoX,GAC9Cb,KAAK0mB,QAAQ,gBAAiB1mB,KAAK2qX,YAC/B3qX,KAAK2qX,WAAWtyV,QAChBh0B,GAAaspC,GAAO+0U,QAJ5B,CAQA,IAAIvyO,EAAK1qI,EAAO,IAAM+8W,GAAY4G,GAC9Bj5O,GAAsB,OAAhBA,EAAGj+H,SACTlS,KAAKuqX,WAAWnB,EAAQz7U,GAGxB3tC,KAAKgoX,iBAAiBoB,EAAQ4B,KAGtCtH,EAASroX,UAAU6nJ,iBAAmB,SAAUriJ,GAC5C,IAAIsG,EAAStG,EAAEsG,OACXulX,EAAc1sX,KAAK2sX,iBACvB,GAAIxlX,GAAUA,EAAOrD,UAAUK,SAhqC3B,WAgqCJ,CACI,IAAI6oX,EAAS7lX,EACI,UAAbtG,EAAE8uD,QACFq9T,EAAO32O,OACPr2I,KAAKgB,QAAQkB,QACbyB,GAAU+oX,GAAchxK,KAEN,WAAb76M,EAAE8uD,SACPq9T,EAAOhwX,MAAQgD,KAAKitX,QACpBD,EAAO32O,OACPr2I,KAAKgB,QAAQkB,QACbyB,GAAU+oX,GAAchxK,SAXhC,CAeA76M,EAAE6kB,iBACF,IAAInY,GACA8qB,QAAQ,EACR/7B,MAAOuE,EACPN,KAAMmsX,GAGV,GADA1sX,KAAK0mB,QAAQ,WAAYnZ,IACrBA,EAAU8qB,OAGd,OAAQx3B,EAAE8uD,QACN,IAAK,QACG3vD,KAAK2nM,cACL3nM,KAAKktX,UAAUrsX,GAEnB,MACJ,IAAK,YACDb,KAAKmtX,UAASntX,KAAKkT,UAA0BrS,GAC7C,MACJ,IAAK,WACDb,KAAKmtX,WAASntX,KAAKkT,UAA0BrS,GAC7C,MACJ,IAAK,YACDb,KAAKotX,gBAAe,EAAMvsX,GAC1B,MACJ,IAAK,WACL,IAAK,WACL,IAAK,SACDb,KAAKqtX,cAAa,GAClB,MACJ,IAAK,UACDrtX,KAAKotX,gBAAe,EAAOvsX,GAC3B,MACJ,IAAK,SACL,IAAK,SACL,IAAK,OACDb,KAAKqtX,cAAa,GAClB,MACJ,IAAK,OACL,IAAK,YACL,IAAK,WACL,IAAK,SACDrtX,KAAKstX,kBAAiB,GACtB,MACJ,IAAK,MACL,IAAK,WACL,IAAK,UACL,IAAK,QACDttX,KAAKstX,kBAAiB,GACtB,MACJ,IAAK,QACL,IAAK,YACL,IAAK,aACL,IAAK,UACDttX,KAAKoqX,aAAasC,EAAa7rX,GAC/B,MACJ,IAAK,KACGb,KAAKqiE,eAAiBqqT,EAAY5oX,UAAUK,SAAS,cACrDnE,KAAKutX,cAAcb,EAAa7rX,GAEpC,MACJ,IAAK,QACD,GAAIb,KAAKunX,oBAAqB,CAC1B,IAAIK,EAAShiX,EAAU,8BAA0C5F,KAAKgB,SACtEhB,KAAK6pX,iBAAiBjC,OAKtClE,EAASroX,UAAUmyX,gBAAkB,SAAUC,GAC3C,IAAIC,EAAY1tX,KAAK2sX,iBAAiBhqX,cAAc,IAAMggX,IACtD1tW,EAAMy4W,EAAU9hX,wBAChBtL,EAASN,KAAK2tX,gBAAgB3tX,KAAKgB,SACvC,IAAKk0E,EAAM50E,GAAS,CAChB,IAAIstX,EAAYttX,EAAOsL,wBACnBqJ,EAAItI,OAASihX,EAAUjhX,OACvBrM,EAAO6L,WAAa8I,EAAItI,OAASihX,EAAUjhX,OAEtCsI,EAAIvI,IAAMkhX,EAAUlhX,MACzBpM,EAAO6L,WAAayhX,EAAUlhX,IAAMuI,EAAIvI,KAGhC1M,KAAK6tX,oBAAoBH,IAErCA,EAAUl6Q,eAAei6Q,IAGjC/J,EAASroX,UAAUwyX,oBAAsB,SAAUC,GAC/C,IAAI74W,EAAM64W,EAAQliX,wBAClB,OAAQqJ,EAAIvI,KAAO,GAAKuI,EAAIzI,MAAQ,GAAKyI,EAAItI,SAAW9Q,OAAOyd,aAAe9Y,SAAS4L,gBAAgBujB,eACnG1a,EAAIxI,QAAU5Q,OAAO0d,YAAc/Y,SAAS4L,gBAAgBsjB,cAEpEg0V,EAASroX,UAAUsyX,gBAAkB,SAAUptX,GAC3C,OAAI20E,EAAM30E,GACC,KAEHA,EAAKwtX,aAAextX,EAAKovB,aAAgBpvB,EAAOP,KAAK2tX,gBAAgBptX,EAAK8T,gBAEtFqvW,EAASroX,UAAU+xX,eAAiB,SAAUY,EAAWntX,GACrD,GAAIb,KAAKunX,oBAAqB,CAC1B,IAAImF,EAAc1sX,KAAK2sX,iBACnBsB,EAAWD,EAAYhuX,KAAKkuX,YAAYxB,GAAe1sX,KAAKmuX,YAAYzB,GAC5E1sX,KAAKywM,cACLzwM,KAAK+pX,gBAAgBkE,GACrBjuX,KAAKoqX,aAAa6D,EAAUptX,GAAG,GAC/Bb,KAAKwtX,iBAAiBQ,QAGtBhuX,KAAKqtX,aAAaW,IAG1BtK,EAASroX,UAAU6xX,UAAY,SAAUrsX,GACrC,IAAI6rX,EAAc1sX,KAAK2sX,iBACnByB,EAAY3oX,EAAO,IAAM09W,GAAcuJ,GACvCxiL,EAAYzkM,EAAO,YAAsB2oX,GAAWtqX,UAAUK,SAAS++W,IACtEwJ,EAAY5oX,UAAUK,SAAS,cAChCnE,KAAKipX,kBAAkBmF,EAAWlkL,EAAWwiL,EAAa7rX,IAGlE6iX,EAASroX,UAAU4tX,kBAAoB,SAAUmF,EAAWx+J,EAASn/E,EAAI5vI,GACrDb,KAAKqqX,kBAAkB+D,EAAWx+J,EAAS/uN,GAC7Cw3B,SAGdr4B,KAAK2gH,YAAYytQ,EAAWx+J,EAAU,UAAY,QAAS/uN,GAAG,GAC9Db,KAAKwoX,sBAAsB/3O,GAC3BzwI,KAAKooX,uBAAuBviX,EAAQA,EAAQ4qI,EAAI,IAAM+xO,IAAa,IAAMF,KACzEtiX,KAAKsqX,iBAAiB8D,EAAWx+J,EAAS/uN,KAE9C6iX,EAASroX,UAAU8xX,SAAW,SAAUkB,EAAYxtX,GAChD,IAAI6rX,EAAc1sX,KAAK2sX,iBACnBh/U,EAAOloC,EAAO,cAAeinX,GACjC,GAAI2B,EAAY,CACZ,IAAK1gV,EACD,OAEKA,EAAK7pC,UAAUK,SAASk+W,IAC7BriX,KAAKkqX,aAAawC,EAAa/+U,EAAM9sC,GAGrCb,KAAKsuX,cAAc5B,GAAa,QAIpC,GAAI/+U,GAAQA,EAAK7pC,UAAUK,SAASi+W,IAChCpiX,KAAKmqX,aAAauC,EAAa/+U,EAAM9sC,OAEpC,CACD,IAAIkqX,EAAWllX,EAAQA,EAAQ6mX,EAAa,IAAMlK,IAAa,IAAMF,IACrE,IAAKyI,EACD,OAGKA,EAASjnX,UAAUK,SAAS,eAC7BnE,KAAKuuX,SAAS7B,EAAa3B,GAC3B/qX,KAAKwtX,iBAAgB,MAMzC9J,EAASroX,UAAUgyX,aAAe,SAAUW,GACxC,IAAItB,EAAc1sX,KAAK2sX,iBACvB3sX,KAAKsuX,cAAc5B,EAAasB,IAEpCtK,EAASroX,UAAUiyX,iBAAmB,SAAUkB,GAC5C,IAAI9B,EAAc1sX,KAAK2sX,iBACnB8B,EAAWD,EAAcxuX,KAAK0uX,cAAgB1uX,KAAK2uX,aAClDF,EAAS3qX,UAAUK,SAAS,eAC7BnE,KAAKuuX,SAAS7B,EAAa+B,GAC3BzuX,KAAKwtX,gBAAgBgB,KAG7B9K,EAASroX,UAAUsxX,eAAiB,WAChC,IAAI3Q,EACA4S,EAAQnpX,EAAO,IAAM68W,GAAW,IAAM74J,GAAOzpN,KAAKgB,SAItD,OAHIk0E,EAAM05S,KACN5S,EAAev2W,EAAO,IAAM68W,GAAUtiX,KAAKgB,UAExCk0E,EAAM05S,GAAU15S,EAAM8mS,GAAgBh8W,KAAKgB,QAAQmE,kBAAoB62W,EAAgB4S,GAElGlL,EAASroX,UAAUizX,cAAgB,SAAU79O,EAAIu9O,GAC7C,IAAIC,EAAWD,EAAYhuX,KAAKkuX,YAAYz9O,GAAMzwI,KAAKmuX,YAAY19O,GAGnE,GAFAzwI,KAAKuuX,SAAS99O,EAAIw9O,GAClBjuX,KAAKwtX,iBAAiBQ,GAClBC,EAASnqX,UAAUK,SAAS,aAAc,CAC1C,IAAI+sI,EAAY+8O,EAAS/8O,UACO,MAA5B+8O,EAASz1K,iBAA2By1K,EAASnqX,UAAUK,SAAS,aAChEnE,KAAKsuX,cAAcL,GAAU,GAEA,MAAxBA,EAASryO,aAAuBqyO,EAASnqX,UAAUK,SAAS,oBACjEnE,KAAKsuX,cAAcL,GAAU,GAEA,MAAxBA,EAASryO,aAAuB1K,EAAUptI,UAAUK,SAAS,kBAClEnE,KAAKsuX,cAAcL,GAAU,GAG7BjuX,KAAKsuX,cAAcL,EAAUD,KAIzCtK,EAASroX,UAAU6yX,YAAc,SAAUz9O,GACvC,IACIw9O,EADAh8W,EAAQjS,KAAKusX,OAAOhuX,QAAQkyI,GAEhC,GAGI,GAFAx+H,IACAg8W,EAAWjuX,KAAKusX,OAAOt6W,GACnBijE,EAAM+4S,GACN,OAAOx9O,SAELhsI,EAAUwpX,IACpB,OAAOA,GAEXvK,EAASroX,UAAU8yX,YAAc,SAAU19O,GACvC,IACIo+O,EADA58W,EAAQjS,KAAKusX,OAAOhuX,QAAQkyI,GAEhC,GAGI,GAFAx+H,IACA48W,EAAW7uX,KAAKusX,OAAOt6W,GACnBijE,EAAM25S,GACN,OAAOp+O,SAELhsI,EAAUoqX,IACpB,OAAOA,GAEXnL,EAASroX,UAAUqzX,YAAc,WAC7B,IACID,EADAx8W,EAAQ,EAEZ,GACIw8W,EAAWzuX,KAAKusX,OAAOt6W,GACvBA,WACMxN,EAAUgqX,IACpB,OAAOA,GAEX/K,EAASroX,UAAUszX,WAAa,WAC5B,IACIG,EADA78W,EAAQjS,KAAKusX,OAAO9vX,OAAS,EAEjC,GACIqyX,EAAU9uX,KAAKusX,OAAOt6W,GACtBA,WACMxN,EAAUqqX,IACpB,OAAOA,GAEXpL,EAASroX,UAAUkzX,SAAW,SAAUQ,EAASd,GAC7C5pX,GAAa0qX,IAAWrzK,GAAO+N,KAC1BwkK,EAASnqX,UAAUK,SAAS,eAC7BR,GAAUsqX,IAAYvyK,GAAO+N,KAC7BzpN,KAAKypX,aAAasF,EAASd,KAGnCvK,EAASroX,UAAUouX,aAAe,SAAUsF,EAASd,GACjDjuX,KAAKgB,QAAQ0K,gBAAgB,yBACzBqjX,GACAA,EAAQrjX,gBAAgB,MAE5BuiX,EAASzqX,aAAa,KAAMxD,KAAKgB,QAAQsC,GAAK,WAC9CtD,KAAKgB,QAAQwC,aAAa,wBAAyBxD,KAAKgB,QAAQsC,GAAK,YAEzEogX,EAASroX,UAAUuoI,QAAU,WACpB5jI,KAAK2jX,iBACNhgX,GAAU3D,KAAK2sX,kBAAmBjxK,IAEtC17M,KAAK2jX,iBAAkB,GAE3BD,EAASroX,UAAUwoI,SAAW,WAC1Bx/H,GAAarE,KAAK2sX,kBAAmBjxK,KAEzCgoK,EAASroX,UAAU0rN,YAAc,SAAUlmN,GACvC,IAAIsG,EAAStG,EAAEsG,OACXrD,EAAYqD,EAAOrD,UACnB4qN,EAAY7oN,EAAQsB,EAAQ,IAAMm7W,KACjC5zJ,GAAa5qN,EAAUK,SAASq+W,KAAe1+W,EAAUK,SAASm+W,IACnEtiX,KAAKywM,cAIDie,IAAcA,EAAU5qN,UAAUK,SAAS,cAC3CnE,KAAK2uN,SAASD,IAI1Bg1J,EAASroX,UAAUszN,SAAW,SAAUl+E,GAC/BA,EAAG3sI,UAAUK,SAASu3M,MACvB17M,KAAKywM,cACL9sM,GAAU8sI,GAAKirE,MAIvBgoK,EAASroX,UAAU2rN,aAAe,SAAUnmN,GACxCb,KAAKywM,eAETizK,EAASroX,UAAUo1M,YAAc,WAC7B,IAAIu+K,EAAcppX,EAAU,WAAa5F,KAAKgB,SAC1CguX,GAAeA,EAAYvyX,QAC3B4H,EAAY2qX,EAAatzK,KAIjCgoK,EAASroX,UAAUkuX,YAAc,SAAUH,EAAQ6F,GAC/C,IAAK/5S,EAAMk0S,IAAWA,EAAOtlX,UAAUK,SAASm+W,KAAaz8W,EAAQujX,EAAQ,cAAetlX,UAAUK,SAASg/G,IAAO,CAClH,IAAI7/G,EAAK8lX,EAAOv2W,aAAa,YACzBic,EAAO9uB,KAAKonI,QAAQgiP,EAAQ6F,GAC5BC,EAAQrpX,EAAQujX,EAAO3oX,WAAY,IAAM6hX,IACzC6M,EAAMD,EAAQA,EAAMr8W,aAAa,YAAc,KAC/C6lI,EAAW0wO,EAAOtlX,UAAUK,SAASk2J,IACrCqoC,EAAqD,SAAzC0mL,EAAOv2W,aAAa,iBAChCL,EAAU,KAId,OAHIxS,KAAK2nM,eACLn1L,EAAU/M,EAAO,IAAM09W,GAAciG,GAAQv2W,aAAa,kBAErDvP,GAAIA,EAAIwrB,KAAMA,EAAM03V,SAAU2I,EAAKz2O,SAAUA,EAAUgqD,SAAUA,EAAUwH,UAAW13L,GAEnG,OAASlP,GAAI,GAAIwrB,KAAM,GAAI03V,SAAU,GAAI9tO,SAAU,GAAIgqD,SAAU,GAAIwH,UAAW,KAEpFw5K,EAASroX,UAAU+rI,QAAU,SAAUgiP,EAAQ6F,GAC3C,GAAIA,EAAQ,CACR,IAAIxH,EAAWznX,KAAKqrX,cAAcjC,EAAOv2W,aAAa,aAClDkvJ,EAAQpmJ,WAAWytW,EAAOv2W,aAAa,eAE3C,OAAOhW,EADUmD,KAAKwrX,UAAUxrX,KAAKssB,OAAQy1I,EAAO,GACzBjzI,KAAM24V,GAErC,OAAOhiX,EAAO,IAAM88W,GAAU6G,GAAQptW,aAE1C0nW,EAASroX,UAAUuvX,eAAiB,SAAUxB,EAAQvoX,GAClD,IAAI4mX,EAAWznX,KAAKupX,YAAYH,GAChC,OAAS/wV,QAAQ,EAAO21F,cAAc94C,EAAMr0E,GAAmBN,KAAM6oX,EAAQ3B,SAAUA,EAAUnrX,MAAOuE,IAE5G6iX,EAASroX,UAAU+zX,cAAgB,WAC/BpvX,KAAKgB,QAAQgB,UAAY,GACzBhC,KAAKmlX,gBACLnlX,KAAKgH,eAAgBgkD,iBAAmBo6T,kBAAoB,GAC5DplX,KAAKklX,UAAW,EAChBllX,KAAKqlX,kBAET3B,EAASroX,UAAUsjI,YAAc,SAAUC,EAAUywP,GAC5Cn6S,EAAM0pD,IAA0B,KAAbA,GACpBv6H,GAAarE,KAAKgB,SAAU49H,EAAS1hI,MAAM,MAE1Cg4E,EAAMm6S,IAA0B,KAAbA,GACpB1rX,GAAU3D,KAAKgB,SAAUquX,EAASnyX,MAAM,OAGhDwmX,EAASroX,UAAUi0X,eAAiB,SAAUzuX,GAC1C,IAAIsG,EAAStG,EAAEsG,OACf,MAAKA,GAAUA,EAAOrD,UAAUK,SAASg/G,KAASh8G,EAAOrD,UAAUK,SAASq+W,KACxEr7W,EAAOrD,UAAUK,SAASm+W,KAAan7W,EAAOrD,UAAUK,SAAS21H,KACjE3yH,EAAOrD,UAAUK,SAzgDjB,YAygDoCgD,EAAOrD,UAAUK,SAxgDhD,kBAsgDT,CAMI,IAAI4kX,EAAQljX,EAAQsB,EAAQ,IAAMm7W,IAClCtiX,KAAKutX,cAAcxE,EAAOloX,KAGlC6iX,EAASroX,UAAUkyX,cAAgB,SAAUxE,EAAOloX,GAChD,IAAI0uX,EAAY9pX,EAAO,IAAMm9W,GAAW5iX,KAAKgB,SACzCuuX,GACAA,EAAUl5O,OAEd,IAAIi4D,EAAU7oM,EAAO,IAAM88W,GAAUwG,GACrC/oX,KAAKwvX,cAAczG,GACnB,IAAIrhL,EAAW1nM,KAAKmB,cAAc,SAAWkC,UAAWu/W,GAAWn/W,OAASzG,MAAOgD,KAAKitX,WACpF1/W,EAAYvN,KAAKyvX,aAAa1G,EAAO,KAAMrhL,EAAS5lM,WAExD,GADA9B,KAAK0mB,QAAQ,cAAenZ,IACxBA,EAAU8qB,OAAd,CAGA,IACI3zB,EAAQ,UADG4pM,EAAQ1pM,YAAc,GACH,KAClCjB,GAAUolX,GA7hDJ,aA8hDNz6K,EAAQtsM,UAAYuL,EAAUiqD,UAC9B,IAAIw1T,EAASvnX,EAAO,IAAMm9W,GAAWt0K,GACrCtuM,KAAKulB,SAAWqG,GAAMq0G,aAClBj/H,QAASgsX,EACT/pX,YACIiQ,UAAWlT,KAAKkT,YAErBlT,KAAKmB,eACRnB,KAAKulB,SAAS3K,UAAUpX,aAAa,QAASkB,GAC9CsoX,EAAO9qX,QACP,IAAI6pB,EAAWihW,EACfjhW,EAAS9F,kBAAkB,EAAG8F,EAAS/uB,MAAMP,QAC7CuD,KAAK0vX,gBAAgB1C,KAEzBtJ,EAASroX,UAAUm0X,cAAgB,SAAUzG,GACzC,IAAIzlX,EAAKylX,EAAMl2W,aAAa,YAC5B7S,KAAK2vX,SAAW3vX,KAAKqrX,cAAc/nX,GACnC,IAAIy+J,EAAQpmJ,WAAWotW,EAAMl2W,aAAa,eAC1C7S,KAAK4vX,WAAa5vX,KAAKwrX,UAAUxrX,KAAKssB,OAAQy1I,EAAO,GACrD/hK,KAAKitX,QAAUpwX,EAASmD,KAAK4vX,WAAW9gW,KAAM9uB,KAAK2vX,WAEvDjM,EAASroX,UAAUw0X,cAAgB,SAAUhvX,GACzC,GAAK4E,EAAO,IAAMm9W,GAAW5iX,KAAKgB,SAAlC,CAGA,IAAImG,EAAStG,EAAEsG,OACX8rD,EAAU9rD,EAAOnK,MACjB8yX,EAASjqX,EAAQsB,EAAQ,IAAMo7W,IAC/BwG,EAAQljX,EAAQsB,EAAQ,IAAMm7W,IAClCj9W,EAAOrF,KAAKulB,SAAS3K,WACrB5a,KAAK+vX,cAAchH,EAAO+G,EAAQ78T,GAAS,KAE/CywT,EAASroX,UAAU00X,cAAgB,SAAUhH,EAAO+G,EAAQ78T,EAAS+8T,GACjE,IAAIziX,EAAYvN,KAAKyvX,aAAa1G,EAAO91T,EAAS,MAClDjzD,KAAK0mB,QAAQ,aAAcnZ,GAC3B0lD,EAAU1lD,EAAU8qB,OAAS9qB,EAAU0/W,QAAU1/W,EAAU0lD,QAC3D,IAAI6uG,EAAU1kK,EAAS4C,KAAK4vX,WAAW9gW,KAAMmkC,EAASjzD,KAAK2vX,UACtDz6S,EAAMl1E,KAAK4lX,gBAKZkK,EAAO9tX,UAAYixD,GAJnB68T,EAAO9tX,UAAY,GACnBoD,EAAOpF,KAAK4lX,eAAe9jN,GAAUguN,IAKrCE,IACA3rX,GAAa0kX,GA3kDX,aA4kDF+G,EAAO5tX,UAGfwhX,EAASroX,UAAUq1B,WAAa,SAAU1sB,GACtC,OAAIkxE,EAAMlxE,GACC,KAEa,iBAARA,EACLhE,KAAKgB,QAAQ2B,cAAc,cAAgBqB,EAAM,MAEpC,iBAARA,EACLA,EAGA,MAGf0/W,EAASroX,UAAUo0X,aAAe,SAAU1G,EAAO91T,EAAS+5T,GAExD,OAAS30V,QAAQ,EAAO46B,QAASA,EAAS1yD,KAAMwoX,EAAOtB,SAD5CznX,KAAKupX,YAAYR,GAC2CkE,QAASjtX,KAAKitX,QAASz1T,UAAWw1T,IAE7GtJ,EAASroX,UAAUgwX,cAAgB,SAAU/nX,GAEzC,IAAI4xE,EAAM5xE,GAAV,CAGK,GAAsB,IAAlBtD,KAAK4lF,SASV,OAAO5lF,KAAKiwX,mBAAmBjwX,KAAKkmX,SAAUlmX,KAAKssB,OAAQhpB,GAR3D,IAAK,IAAInH,EAAI,EAAG2vX,EAAS9rX,KAAKkmX,SAASzpX,OAAQN,EAAI2vX,EAAQ3vX,IAAK,CAC5D,IAAI4vX,EAASlvX,EAASmD,KAAKssB,OAAOhpB,GAAItD,KAAKkmX,SAAS/pX,IACpD,IAAK+4E,EAAMl1E,KAAKkmX,SAAS/pX,MAAQ+4E,EAAM62S,IAAWA,EAAO7+W,aAAe5J,EACpE,OAAOtD,KAAKkmX,SAAS/pX,MASrCunX,EAASroX,UAAU40X,mBAAqB,SAAUlzX,EAAKuR,EAAQhL,GAC3D,IAAI4rG,EACJ,GAAIh6B,EAAMn4E,GACN,OAAOmyG,EAEX,IAAK,IAAI/yG,EAAI,EAAG2vX,EAAS/uX,EAAIN,OAAQN,EAAI2vX,EAAQ3vX,IAAK,CAClD,IAAI4vX,EAASlvX,EAASyR,EAAOhL,GAAIvG,EAAIZ,IACrC,GAAIY,EAAIZ,IAAM4vX,GAAUA,EAAO7+W,aAAe5J,EAC1C,OAAOvG,EAAIZ,GAEV,GAA4B,iBAAjBmS,EAAOjO,OAAuB60E,EAAMr4E,EAASyR,EAAOjO,MAAOtD,EAAIZ,MAO1E,GAAI6D,KAAKssB,OAAOw4C,sBAAsBC,KAAgBmQ,EAAMr4E,EAAS,QAASE,EAAIZ,KAAM,CAGzF,QAAgBhB,KADhB+zG,EAAUlvG,KAAKiwX,mBAAmBpzX,EADtB,QACsCE,EAAIZ,IAAK6D,KAAK2rX,eAAer9W,GAAShL,IAEpF,WAX6E,CACjF,IAAI4sX,EAAYrzX,EAASyR,EAAOjO,MAAOtD,EAAIZ,IAE3C,QAAgBhB,KADhB+zG,EAAUlvG,KAAKiwX,mBAAmBC,EAAWlwX,KAAK2rX,eAAer9W,GAAShL,IAEtE,OAWZ,OAAO4rG,GAEXw0Q,EAASroX,UAAUmqX,eAAiB,SAAU2K,GACtCA,EACAnwX,KAAKowX,iBAGLpwX,KAAKqwX,eAGb3M,EAASroX,UAAU+0X,eAAiB,WAChC,IACIE,EADAvwX,EAAQC,KAER0S,EAAQ1S,KACZA,KAAK80H,QAAU,IAAIxlB,GAAUtvG,KAAKgB,SAC9B0wG,gBAAgB,EAChB6B,kBAAkB,EAClBzC,WAAY,IAAM6xQ,GAClBzzW,OAAQ,SAAUrO,GACdd,EAAM+wG,WAAajwG,EAAE0zG,OAAOptG,OAC5B,IAAIopX,EAAW1qX,EAAQ9F,EAAM+wG,WAAY,IAAMqS,IAC3CqtQ,EAAW3qX,EAAQ9F,EAAM+wG,WAAY,IAAM6xQ,IAK/C,GAJA5iX,EAAM0wX,OAAS5qX,EAAQ9F,EAAM+wG,WAAY,IAAMwxQ,IAC3CviX,EAAM4lX,gBAAkB6K,GAAYzwX,EAAM+wG,WAAWhtG,UAAUK,SAAS4+W,MACxEyN,EAAWzwX,EAAM+wG,WAAWmR,qBAE3BliH,EAAM+wG,aAAejwG,EAAEG,QAAQ0vX,WAAWH,KAAcC,GACzDzwX,EAAM+wG,WAAWhtG,UAAUK,SAASg/G,KAASpjH,EAAM+wG,WAAWhtG,UAAUK,SAASq+W,KACjFziX,EAAM+wG,WAAWhtG,UAAUK,SAASm+W,KAAaviX,EAAM0wX,OAAO3sX,UAAUK,SAAS,aACjF,OAAO,EAEX,IAAIwsX,EAAYH,EAAS5uX,WAAU,GACnC,GAAIszE,EAAMzvE,EAAO,cAAekrX,IAAY,CACxC,IAAIhjV,EAAOj7B,EAAMvR,cAAc,OAASkC,UAAWy2H,WAAauoP,KAChEsO,EAASzrX,aAAayoC,EAAMgjV,EAASv2W,SAAS,IAElD,IAAInH,EAAW29W,0BAA8B7wX,EAAMkT,SAAW,KAAOlT,EAAMmT,UA/qDjF,QA+qDmG,KAC7Fo9W,EAAa59W,EAAMvR,cAAc,OAASkC,UAAW4P,KAC1CtR,YAAYgvX,GACvB,IAAIE,EAAO9wX,EAAMirD,cAAcvuD,OAC/B,GAAIo0X,EAAO,GAAK9wX,EAAMwnX,qBAAuBxnX,EAAM0wX,OAAO3sX,UAAUK,SAASk2J,IAAS,CAClF,IAAIy2N,EAAQp+W,EAAMvR,cAAc,QAAUkC,UAnqD9C,eAmqDoErB,UAAW,GAAK6uX,IAChFP,EAAW3uX,YAAYmvX,GAK3B,OAHAtwX,SAASuL,KAAKpK,YAAY2uX,GAC1B9vX,SAASuL,KAAKrH,MAAMm2D,OAAS,GAC7B96D,EAAM0yG,SAAW1yG,EAAMwpX,YAAYxpX,EAAM0wX,QAClCH,GAEXj/Q,UAAW,SAAUxwG,GACjB8C,GAAU5D,EAAMiB,SA1rDjB,cA2rDC,IAAIuM,EAAYxN,EAAMgxX,aAAalwX,EAAEvE,MAAOyD,EAAO,KAAMc,EAAEsG,QACvDoG,EAAUyjX,YAAYltX,UAAUK,SAhsDtC,aAisDMoJ,EAAU8qB,QAAS,EAGnBt4B,EAAM2mB,QAAQ,gBAAiBnZ,GAE/BA,EAAU8qB,QACVhzB,EAAOirX,GACPjsX,GAAatE,EAAMiB,SApsDxB,cAqsDKjB,EAAM+jX,iBAAkB,GAGxB/jX,EAAM+jX,iBAAkB,GAGhCxxQ,KAAM,SAAUzxG,GACZd,EAAM+0H,QAAQ9tH,eAAgBstG,UAAY5nG,KAAOwoE,EAAMr0E,EAAEvE,MAAMo2E,gBAAkBlnE,GAAQob,SAAY,IAAM,MAC3G7mB,EAAMkxX,WAAWpwX,EAAGyvX,IAExB38Q,SAAU,SAAU9yG,GAChBwD,GAAatE,EAAMiB,SAhtDpB,cAitDCjB,EAAMmxX,mBACN,IAAIC,EAAatwX,EAAEsG,OACfiqX,EAAYvrX,EAAQsrX,EAAY,gBAC/BA,GAAeC,IAChB/rX,EAAOxE,EAAEqO,QACT1O,SAASuL,KAAKrH,MAAMm2D,OAAS,IAEjC,IAAIttD,EAAYxN,EAAMgxX,aAAalwX,EAAEvE,MAAOyD,EAAOoxX,EAAYA,GAC/DpxX,EAAM2mB,QAAQ,eAAgBnZ,GAC1BA,EAAU8qB,SACNx3B,EAAEqO,OAAOzO,YACT4E,EAAOxE,EAAEqO,QAEb1O,SAASuL,KAAKrH,MAAMm2D,OAAS,IAEjC96D,EAAM+jX,iBAAkB,KAGhC9jX,KAAKqxX,QAAU,IAAIr8Q,GAAUh1G,KAAKgB,SAC9BlB,IAAK,SAAUe,GACNq0E,EAAMr0E,IAAOA,EAAEsG,OAAOrD,UAAUK,SAAS0+W,MAC1CriX,SAASuL,KAAKrH,MAAMm2D,OAAS,gBAGrCy2T,KAAM,SAAUzwX,GACZL,SAASuL,KAAKrH,MAAMm2D,OAAS,IAEjCg6C,KAAM,SAAUh0G,GACZd,EAAMwxX,WAAW1wX,OAI7B6iX,EAASroX,UAAU41X,WAAa,SAAUpwX,EAAGyvX,GACzC,IAAIc,EAAWvrX,EAAQhF,EAAEsG,OAAQ,gBAC7BqqX,EAAW3rX,EAAQhF,EAAEsG,OAAQ,IAAMw7W,IACnCh1U,EAAOloC,EAAO,cAAe6qX,GACjCjsX,GAAaspC,IAnvDR,YAmvDwBm1U,GAjvDvB,aACD,cAivDL9iX,KAAKkxX,mBACL1wX,SAASuL,KAAKrH,MAAMm2D,OAAS,GAC7B,IAAI/2D,EAAYjD,EAAEsG,OAAOrD,UAIzB,GAHI9D,KAAK2lX,gBAAkB6L,IAAat8S,EAAMpxE,IAAcA,EAAUK,SAAS4+W,MAC3EyO,EAAW3wX,EAAEsG,OAAO86G,oBAEpBmvQ,EAAU,CACV,IAAIK,EAAS5rX,EAAQhF,EAAEsG,OAAQ,IAAMm7W,IACrC,IAAK8O,EAASttX,UAAUK,SAASg/G,KAAUquQ,IACrCC,EAAOf,WAAW1wX,KAAKywX,UAAYzwX,KAAK0xX,aAAa1xX,KAAKywX,OAAQgB,GACpE,GAAIA,GAAU5wX,GAAMA,EAAEvE,MAAM2P,QAAU,EAAI,CACtCtI,GAAUgqC,GAAOm1U,IACjB,IAAI6O,EAAS3xX,KAAKmB,cAAc,OAASkC,UAAWw/W,KAChD5wW,EAAQjS,KAAK2lX,kBACjB8L,EAAOvsX,aAAaysX,EAAQF,EAAOr3W,SAASnI,SAE3C,GAAIw/W,GAAU5wX,GAAMA,EAAEsG,OAAOusD,aAAe,GAAK7yD,EAAEvE,MAAM2P,QAAWpL,EAAEsG,OAAOusD,aAAe,GAAM,CACnG/vD,GAAUgqC,GAAOm1U,IACb6O,EAAS3xX,KAAKmB,cAAc,OAASkC,UAAWw/W,KAChD5wW,EAAQjS,KAAK2lX,kBACjB8L,EAAOvsX,aAAaysX,EAAQF,EAAOr3W,SAASnI,SAG5CtO,GAAUgqC,GA3wDjB,iBA8wD8B,OAAtB9sC,EAAEsG,OAAO+K,UAAuBu/W,EAAOf,WAAW1wX,KAAKywX,SAAYzwX,KAAK0xX,aAAa1xX,KAAKywX,OAAQgB,GAIlG5wX,EAAEsG,OAAOrD,UAAUK,SAAS0+W,IACjCl/W,GAAUgqC,GAAOm1U,IAGjBn/W,GAAUgqC,GApxDZ,eA6wDEhqC,GAAUgqC,GAAOm1U,IACjB9iX,KAAK4xX,iBAAiB/wX,SAU1B8C,GAAUgqC,GAvxDT,aAwxDDntC,SAASuL,KAAKrH,MAAMm2D,OAAS,cAEjC76D,KAAK0mB,QAAQ,eAAgB1mB,KAAK+wX,aAAalwX,EAAEvE,MAAO0D,KAAMa,EAAEsG,OAAQtG,EAAEsG,UAE9Eu8W,EAASroX,UAAUk2X,WAAa,SAAU1wX,GAKtC,IAAK,IAFDi0H,EAFA7oH,EAAUpL,EAAEvE,MAAM2P,QAClBklX,EAAatwX,EAAEsG,OAEf0qX,EAAehxX,EAAE4xG,SAAS+B,UACrBr4G,EAAI,EAAGA,EAAI01X,EAAa5oS,cAAcxsF,OAAQN,IACnD,GAAI01X,EAAa5oS,cAAc9sF,aAAcynX,EAAY,CACrD9uP,EAAU+8P,EAAa5oS,cAAc9sF,GACrC,MAGR,GAAI24H,GAAWA,EAAQhkB,WAAY,CAC/B,IACI2/Q,EAAU5qX,EADGivH,EAAQhkB,WACS,IAAMwxQ,IACpCmP,EAAU5rX,EAAQsrX,EAAY,IAAM7O,IAMxC,GALc,MAAVmP,GAAkBN,EAAWrtX,UAAUK,SAASg/G,MAChDsuQ,EAASN,EAAWhsX,mBAExBE,EAAOxE,EAAE00G,gBACT/0G,SAASuL,KAAKrH,MAAMm2D,OAAS,IACxB42T,GAAUA,EAAOf,WAAWD,IAAWzwX,KAAK0xX,aAAajB,EAAQgB,GAClE,OAEJ,GAAI38P,EAAQyyP,sBAAwBkJ,EAAO3sX,UAAUK,SAASk2J,KAAYpuJ,EAAU,GAC/EpL,EAAEsG,OAAOusD,aAAe,GAAKznD,EAAWpL,EAAEsG,OAAOusD,aAAe,IAE5D,CAAA,IADDk0T,EAAShiX,EAAU,IAAMy0J,GAAQvlC,EAAQ9zH,SAC7C,IAAS7E,EAAI,EAAGA,EAAIyrX,EAAOnrX,OAAQN,IAC3Bs1X,EAAOf,WAAW9I,EAAOzrX,KAAO6D,KAAK0xX,aAAa9J,EAAOzrX,GAAIs1X,IAGjEzxX,KAAK8xX,WAAWX,EAAYvJ,EAAOzrX,GAAIs1X,EAAQ5wX,EAAGi0H,EAAS7oH,QAI/DjM,KAAK8xX,WAAWX,EAAYV,EAAQgB,EAAQ5wX,EAAGi0H,EAAS7oH,GAGhEjM,KAAK0mB,QAAQ,cAAe1mB,KAAK+wX,aAAalwX,EAAEvE,MAAOw4H,EAASq8P,EAAYtwX,EAAEsG,OAAQtG,EAAE4xG,SAASgC,kBAErGivQ,EAASroX,UAAUy2X,WAAa,SAAUX,EAAYV,EAAQgB,EAAQ5wX,EAAGi0H,EAAS7oH,GACzEwkX,EAAO3sX,UAAUK,SAAS,cAAiBstX,EAAO3tX,UAAUK,SAAS,eAC1C,OAAxBgtX,EAAWj/W,SACXlS,KAAK+xX,kBAAkBtB,EAAQgB,EAAQ5wX,EAAGi0H,GAErCq8P,EAAWhsX,mBAAqBgsX,EAAWrtX,UAAUK,SAASg/G,IACrB,OAA1CguQ,EAAWhsX,kBAAkB+M,UAC7BlS,KAAK+xX,kBAAkBtB,EAAQgB,EAAQ5wX,EAAGi0H,GAI9C90H,KAAKgyX,gBAAgBvB,EAAQgB,EAAQ38P,EAAS,KAAMj0H,EAAGoL,KAInEy3W,EAASroX,UAAU02X,kBAAoB,SAAUtB,EAAQgB,EAAQ5wX,EAAGi0H,GAChE,IAGI82O,EAHAqmB,EAASpsX,EAAQ4rX,EAAQ,IAAMjP,IAC/B0P,EAAersX,EAAQ4qX,EAAQ,IAAMjO,IACrC2P,EAAetsX,EAAQqsX,EAAc,IAAM5P,IAE3CzhX,EAAEsG,OAAOusD,aAAe,GAAK7yD,EAAEvE,MAAM2P,QAAUpL,EAAEsG,OAAOusD,aAAe,EACvEk4S,GAAM,EAED/qW,EAAEvE,MAAM2P,QAAU,IACvB2/V,GAAM,GAEVqmB,EAAO/sX,aAAaurX,EAAQ7kB,EAAM/qW,EAAEsG,OAAStG,EAAEsG,OAAO86G,oBACtDjiH,KAAKoyX,cAAcF,EAAcC,GACjCnyX,KAAKqyX,gBAAgB5B,GACjB37P,EAAQ9zH,QAAQsC,KAAOtD,KAAKgB,QAAQsC,GACpCtD,KAAKioX,cAGLnzP,EAAQw9P,iBACRtyX,KAAKsyX,mBAGb5O,EAASroX,UAAU22X,gBAAkB,SAAUvB,EAAQgB,EAAQ38P,EAAS7iH,EAAOpR,EAAGoU,GAC9E,IAAIi9W,EAAersX,EAAQ4qX,EAAQ,IAAMjO,IACrC2P,EAAetsX,EAAQqsX,EAAc,IAAM5P,IAC3CiQ,EAAe1sX,EAAQ4rX,EAAQ,IAAMjP,IACzC,GAAI3hX,GAAMoU,EAAM,EACZs9W,EAAartX,aAAaurX,EAAQgB,QAEjC,GAAI5wX,GAAMA,EAAEsG,OAAOusD,aAAe,GAAKz+C,EAAOpU,EAAEsG,OAAOusD,aAAe,GACvE6+T,EAAartX,aAAaurX,EAAQgB,EAAOxvQ,wBAExC,CACD,IAAIgwQ,EAASjyX,KAAKwyX,aAAaf,GAC/BQ,EAAO/sX,aAAaurX,EAAQwB,EAAO1gX,WAAWU,IAElDjS,KAAKoyX,cAAcF,EAAcC,GACjCnyX,KAAKqyX,gBAAgB5B,GACjB37P,EAAQ9zH,QAAQsC,KAAOtD,KAAKgB,QAAQsC,GACpCtD,KAAKioX,cAGLnzP,EAAQw9P,iBACRtyX,KAAKsyX,mBAGb5O,EAASroX,UAAUm3X,aAAe,SAAUf,GACxC,IAAIgB,EAAWhtX,EAAO,cAAegsX,GACjCgB,GAAYA,EAAS3uX,UAAUK,SAASk+W,KACxCriX,KAAKkqX,aAAauH,EAAQgB,EAAU,MAExC,IAAIR,EAASxsX,EAAO,IAAM+8W,GAAYiP,GACtC,GAAIv8S,EAAM+8S,GAAS,CACfjyX,KAAK0mB,QAAQ,gBAAiB1mB,KAAK4qX,eAAe6G,EAAQ,OACtDv8S,EAAMu9S,IACNt7O,GAASm0D,aAAatrM,KAAKmB,cAAeswX,EAAQrP,GAAapiX,KAAKotM,gBAGxE/oM,GADWoB,EAAO,cAAegsX,IACbpP,IACpB4P,EAAS96O,GAASsvD,WAAWzmM,KAAKmB,iBAAmB,KAAMnB,KAAKotM,gBAChEqkL,EAAO9vX,YAAYswX,GACnBR,EAAOjuX,aAAa,gBAAiB,QACrCa,GAAaotX,GAASxO,IACtBjjX,KAAK0mB,QAAQ,eAAgB1mB,KAAK4qX,eAAe6G,EAAQ,OAE7D,OAAOQ,GAEXvO,EAASroX,UAAU+2X,cAAgB,SAAUF,EAAcC,GACvD,GAAIA,GAAmD,IAAnCD,EAAavrT,kBAAyB,CACtD,IAAI+rT,EAAWjtX,EAAO,cAAe0sX,GACrC9sX,EAAO6sX,GACP7sX,EAAOqtX,GACPP,EAAazmX,gBAAgB,mBAGrCg4W,EAASroX,UAAUg3X,gBAAkB,SAAU5B,GAC3C,IAAI1uN,EAAQ/hK,KAAK8gE,QAAQ2vT,EAAQ,IAAMjO,IAAY/lX,OACnDg0X,EAAOjtX,aAAa,aAAc,GAAKu+J,GACvC/hK,KAAK2yX,qBAAqBltX,EAAO,IAAM+8W,GAAYiO,GAAS1uN,EAAQ,IAExE2hN,EAASroX,UAAUs3X,qBAAuB,SAAU3xX,EAAS+gK,GACzD,IAAK7sF,EAAMl0E,GAEP,IAAK,IADD8mX,EAAS9mX,EAAQuQ,WACZpV,EAAI,EAAG0F,EAAMimX,EAAOrrX,OAAQN,EAAI0F,EAAK1F,IAAK,CAC/C,IAAI4sX,EAAQjB,EAAO3rX,GACnB4sX,EAAMvlX,aAAa,aAAc,GAAKu+J,GACtC/hK,KAAK2yX,qBAAqBltX,EAAO,IAAM+8W,GAAYuG,GAAQhnN,EAAQ,KAI/E2hN,EAASroX,UAAUu2X,iBAAmB,SAAU/wX,GAC5C,IAAI+qW,EACA/qW,EAAEvE,MAAM2P,QAAUpL,EAAEsG,OAAOusD,aAAe,EAC1Ck4S,GAAM,EAED/qW,EAAEvE,MAAM2P,QAAU,IACvB2/V,GAAM,GAEV,IAAI+lB,EAAS3xX,KAAKmB,cAAc,OAASkC,UAAWw/W,KAChD5wW,EAAQjS,KAAK2lX,cAAiB/Z,EAAM,EAAI,EAAMA,EAAM,EAAI,EAC5D/qW,EAAEsG,OAAOjC,aAAaysX,EAAQ9wX,EAAEsG,OAAOiT,SAASnI,KAEpDyxW,EAASroX,UAAU61X,iBAAmB,WAClC,IAAI0B,EAASntX,EAAO,IAAMo9W,IACtB+P,GACAvtX,EAAOutX,IAGflP,EAASroX,UAAUg1X,YAAc,WACzBrwX,KAAK80H,SAAW90H,KAAKqxX,UACrBrxX,KAAK80H,QAAQxiH,UACbtS,KAAKqxX,QAAQ/+W,YAGrBoxW,EAASroX,UAAU01X,aAAe,SAAUz0X,EAAOS,EAAKo0X,EAAYhqX,EAAQ0rX,GACxE,IAAIpB,EAASN,EAAatrX,EAAQsrX,EAAY,IAAM7O,IAAY,KAC5DwQ,EAAWrB,EAASzxX,KAAKupX,YAAYkI,GAAU,KAC/CT,EAAcj0X,EAAMA,EAAI0zX,OAASoC,EACjCE,EAAkBh2X,EAAMA,EAAI01G,SAAW,KACvCugR,EAAY7B,EAAanxX,KAAK8gE,QAAQqwT,EAAY,gBAAkB,KACpE8B,EAAe,KAyBnB,OAvBI9B,IAEI8B,EADqB,IAArBD,EAAUv2X,OACK,KAEV00X,EAAWrtX,UAAUK,SAAS,eACpB6uX,EAAU,GAGVA,EAAU,IAG7B7B,GAActrX,EAAQsrX,EAAY,iBAC9B70X,EAAM2P,SAAW,GAGZ9E,EAAOusD,cAAgB,IAAMp3D,EAAM2P,QAAU9E,EAAOusD,aAAe,KACxEu/T,EACeptX,EAAQsrX,EAAY,mBAOvC94V,QAAQ,EACR/7B,MAAOA,EACP00X,YAAaA,EACb+B,gBAAiBA,EACjBG,YAAazB,EACb0B,gBAAiBL,EACjB3rX,OAAQA,EACRgqX,WAAY8B,IAGpBvP,EAASroX,UAAU+3X,WAAa,SAAUC,GACtC,IAAIxxX,EAAM7B,KAAKusX,OAAO9vX,OACtB,GAAI42X,EACA,IAAK,IAAIl3X,EAAI,EAAGA,EAAI0F,EAAK1F,IACrB6D,KAAKsnX,cAActnX,KAAKusX,OAAOpwX,SAInC,IAASA,EAAI,EAAGA,EAAI0F,EAAK1F,IAAK,CAE1BkJ,EADaI,EAAO,IAAMs9W,GAAS/iX,KAAKusX,OAAOpwX,OAK3DunX,EAASroX,UAAUisX,cAAgB,SAAUtpW,GACzC,IAAIs1W,EAAStzX,KAAKmB,cAAc,OAASkC,UAAW0/W,KACpD/kW,EAAK9Y,aAAaouX,EAAQt1W,EAAKzM,WAAW,KAE9CmyW,EAASroX,UAAUk4X,eAAiB,SAAUF,GAC1C,GAAIA,EAEA,IAAK,IAAIj1X,EAAK,EAAGo1X,EADJ5tX,EAAU,IAAM08W,GAAW,+BAAgCtiX,KAAKgB,SACzC5C,EAAKo1X,EAAS/2X,OAAQ2B,IAAM,CAClDo1X,EAASp1X,GACfoF,aAAa,gBAAiB,cAKtC,IAAK,IAAIX,EAAK,EAAG4wX,EADJ7tX,EAAU,IAAM08W,GAAW,0BAA2BtiX,KAAKgB,SACpC6B,EAAK4wX,EAASh3X,OAAQoG,IAAM,CAClD4wX,EAAS5wX,GACf6I,gBAAgB,mBAIhCg4W,EAASroX,UAAUq4X,gBAAkB,SAAU1yX,EAAS+gK,EAAO4xN,GAC3D,GAAI5xN,EAAQ,IAAM7sF,EAAMl0E,GAEpB,IAAK,IADD8mX,EAAS9nX,KAAK4zX,gBAAgBD,EAAoB3yX,EAAQuQ,YACrDpV,EAAI,EAAG0F,EAAMimX,EAAOrrX,OAAQN,EAAI0F,EAAK1F,IAAK,CAC/C,IAAI4sX,EAAQjB,EAAO3rX,GACfwxC,EAAOloC,EAAO,IAAM28W,GAAa38W,EAAO,IAAMk9W,GAAUoG,IACvD7zS,EAAMvnC,IACP3tC,KAAKmqX,aAAapB,EAAOp7U,EAAM,MAEnC3tC,KAAK0zX,gBAAgBjuX,EAAO,IAAM+8W,GAAYuG,GAAQhnN,EAAQ,EAAG4xN,KAI7EjQ,EAASroX,UAAUw4X,iBAAmB,SAAUF,GAE5C,IAAK,IADD3H,EAAShsX,KAAK4zX,gBAAgBD,EAAoB/tX,EAAU,IAAMw8W,GAAapiX,KAAKgB,UAC/E7E,EAAI,EAAG0F,EAAMmqX,EAAOvvX,OAAQN,EAAI0F,EAAK1F,IAAK,CAC/C,IAAIwxC,EAAOq+U,EAAO7vX,GACd4sX,EAAQljX,EAAQ8nC,EAAM,IAAM20U,IAChCtiX,KAAKmqX,aAAapB,EAAOp7U,EAAM,QAGvC+1U,EAASroX,UAAUy4X,cAAgB,SAAU9yX,EAAS+gK,EAAO4xN,GACzD,GAAI5xN,EAAQ,IAAM7sF,EAAMl0E,GAEpB,IAAK,IADD+mX,EAAS/nX,KAAK4zX,gBAAgBD,EAAoB3yX,EAAQuQ,YACrDpV,EAAI,EAAG0F,EAAMkmX,EAAOtrX,OAAQN,EAAI0F,EAAK1F,IAAK,CAC/C,IAAI4sX,EAAQhB,EAAO5rX,GACfwxC,EAAOloC,EAAO,IAAM48W,GAAY58W,EAAO,IAAMk9W,GAAUoG,IACtD7zS,EAAMvnC,IACP3tC,KAAKkqX,aAAanB,EAAOp7U,EAAM,MAEnC3tC,KAAK8zX,cAAcruX,EAAO,IAAM+8W,GAAYuG,GAAQhnN,EAAQ,EAAG4xN,KAI3EjQ,EAASroX,UAAU04X,eAAiB,SAAUJ,GAE1C,IAAK,IADDK,EAASh0X,KAAK4zX,gBAAgBD,EAAoB/tX,EAAU,IAAMy8W,GAAYriX,KAAKgB,UAC9E7E,EAAI,EAAG0F,EAAMmyX,EAAOv3X,OAAQN,EAAI0F,EAAK1F,IAAK,CAC/C,IAAIwxC,EAAOqmV,EAAO73X,GACd4sX,EAAQljX,EAAQ8nC,EAAM,IAAM20U,IAChCtiX,KAAKkqX,aAAanB,EAAOp7U,EAAM,MAAM,KAG7C+1U,EAASroX,UAAUu4X,gBAAkB,SAAUD,EAAoBjpU,GAC/D,IAAIupU,EAASz1X,MAAMnD,UAAUgG,MAAMC,KAAKopD,GACxC,GAAIipU,EACA,IAAK,IAAIx3X,EAAI,EAAGA,EAAI83X,EAAOx3X,OAAQN,IAC1BsI,EAAUwvX,EAAO93X,MAClB83X,EAAOxrW,OAAOtsB,EAAG,GACjBA,KAIZ,OAAO83X,GAEXvQ,EAASroX,UAAU64X,WAAa,SAAU3zX,GACtC,IAAI2xX,EAAersX,EAAQtF,EAAM,IAAMiiX,IACnC2P,EAAetsX,EAAQqsX,EAAc,IAAM5P,IAC/Cj9W,EAAO9E,GACPP,KAAKoyX,cAAcF,EAAcC,GACjCnyX,KAAKsyX,kBAET5O,EAASroX,UAAUi3X,eAAiB,WAChCtyX,KAAKioX,aACLjoX,KAAKm0X,uBAETzQ,EAASroX,UAAU4sX,WAAa,WAC5BjoX,KAAKusX,OAAS/tX,MAAMnD,UAAUgG,MAAMC,KAAKsE,EAAU,IAAM08W,GAAUtiX,KAAKgB,WAE5E0iX,EAASroX,UAAU84X,oBAAsB,WACrCn0X,KAAKgH,eAAgBgkD,mBAAqB,GAC1C,IAAI48T,EAAShiX,EAAU,IAAMy0J,GAAQr6J,KAAKgB,SAC1ChB,KAAK6pX,iBAAiBjC,IAE1BlE,EAASroX,UAAU+4X,cAAgB,SAAU1pU,EAAOhlD,EAAU2uX,GAC1D,IAAK,IAAIl4X,EAAI,EAAG0F,EAAM6oD,EAAMjuD,OAAQN,EAAI0F,EAAK1F,IAAK,CAC9C,IAAI4sX,EAAQ/oX,KAAK0wB,WAAWg6B,EAAMvuD,IAClC,IAAI+4E,EAAM6zS,GAAV,CAGA,IAAIp7U,EAAOloC,EAAO,IAAMC,EAAUD,EAAO,IAAMk9W,GAAUoG,IACpD7zS,EAAMvnC,KACP0mV,EAAWr0X,KAAKkqX,aAAanB,EAAOp7U,EAAM,MAAQ3tC,KAAKmqX,aAAapB,EAAOp7U,EAAM,UAI7F+1U,EAASroX,UAAUi5X,cAAgB,SAAU5pU,EAAO+mU,EAAQx/W,EAAOsiX,GAC/D,IAAIxyN,EAAQ0vN,EAAS91W,WAAW81W,EAAO5+W,aAAa,eAAiB,EAAI,EACrE0hX,GACAv0X,KAAKw0X,aAAazyN,GAKtB,IAAK,IAHDtxB,EAAK0G,GAASiwD,uBAAuBpnM,KAAKmB,cAAeupD,EAAO1qD,KAAKotM,eAAgBrrC,GACrFkwN,EAASR,EAASzxX,KAAKwyX,aAAaf,GAAUhsX,EAAO,IAAM+8W,GAAYxiX,KAAKgB,SAC5EyzX,EAAUxC,EAAO1gX,WAAWU,GACvB9V,EAAI,EAAGA,EAAIs0I,EAAGh0I,OAAQN,IAC3B81X,EAAO/sX,aAAaurI,EAAGt0I,GAAIs4X,GAE/Bz0X,KAAKgnX,aAAaiL,IAEtBvO,EAASroX,UAAUm5X,aAAe,SAAUzyN,GACxC,IAAIzzJ,EAAoB,IAAVyzJ,EAAe/hK,KAAKssB,OAAStsB,KAAKorX,eAAeprX,KAAKssB,OAAQy1I,EAAQ,EAAG,GACvF/hK,KAAKglX,eAAe12W,IAExBo1W,EAASroX,UAAU2pX,eAAiB,SAAU12W,GAC1C,IAAIhE,EAAOtK,KAAK8+D,oBAAoBxwD,GACpCtO,KAAKotM,eAAe9gL,OAAShiB,EAC7BtK,KAAKotM,eAAe9gL,OAAO8M,IAAM9uB,EAAK3D,eAAe,eAAiB2D,EAAKoqX,YAAc,eAE7FhR,EAASroX,UAAUs5X,gBAAkB,SAAUjqU,GAC3C,IAAK,IAAIvuD,EAAI,EAAG0F,EAAM6oD,EAAMjuD,OAAQN,EAAI0F,EAAK1F,IAAK,CAC9C,IAAI4sX,EAAQ/oX,KAAK0wB,WAAWg6B,EAAMvuD,IAC9B+4E,EAAM6zS,KAGVA,EAAMvlX,aAAa,gBAAiB,QACpCG,GAAUolX,GA5nER,gBA+nEVrF,EAASroX,UAAUu5X,eAAiB,SAAUlqU,GAC1C,IAAK,IAAIvuD,EAAI,EAAG0F,EAAM6oD,EAAMjuD,OAAQN,EAAI0F,EAAK1F,IAAK,CAC9C,IAAI4sX,EAAQ/oX,KAAK0wB,WAAWg6B,EAAMvuD,IAC9B+4E,EAAM6zS,KAGVA,EAAMr9W,gBAAgB,iBACtBrH,GAAa0kX,GAtoEX,gBAyoEVrF,EAASroX,UAAU8pX,cAAgB,WAC/B,IAAInhX,EAAM6B,EAAQ7F,KAAKgB,QAAS,aAChChB,KAAKknX,WAAahyS,EAAMlxE,GAAO,GA/nE3B,WAioER0/W,EAASroX,UAAUq0X,gBAAkB,SAAU1C,GAC3CznX,GAAanB,IAAI4oX,EAAQ,OAAQhtX,KAAK6vX,cAAe7vX,OAEzD0jX,EAASroX,UAAUkqX,kBAAoB,SAAU4K,GAC7C,GAAIA,EAAQ,CACR,IAAI0E,EAAU70X,KACdA,KAAK80X,aAAe,IAAIr5Q,GAAMz7G,KAAKgB,SAC/Bs8G,IAAK,SAAUz8G,GACQ,IAAfA,EAAE86G,WACF96G,EAAEi8G,cAAcp3F,iBAChBmvW,EAAQvF,eAAezuX,EAAEi8G,wBAMjC98G,KAAK80X,cACL90X,KAAK80X,aAAaxiX,WAI9BoxW,EAASroX,UAAU05X,eAAiB,SAAU5E,GAC1C,GAAIA,EAAQ,CACR,IAAI6E,EAAUh1X,KACdA,KAAKi1X,cAAgB,IAAIx5Q,GAAMz7G,KAAKgB,SAChCs8G,IAAK,SAAUz8G,GACXA,EAAEi8G,cAAcp3F,iBAChBsvW,EAAQj0Q,aAAalgH,WAKzBb,KAAKi1X,eACLj1X,KAAKi1X,cAAc3iX,WAI/BoxW,EAASroX,UAAU65X,kBAAoB,SAAU/E,GAC7C,IAAIpwX,EAAQC,KACZ,GAAImwX,EAAQ,CACR,IAAIgF,EAAUn1X,KACdA,KAAKo1X,eAAiB,IAAI35Q,GAAMz7G,KAAKgB,SACjCs8G,IAAK,SAAUz8G,IACgB,UAAvBd,EAAM6sX,cAAoD,aAAvB7sX,EAAM6sX,cAA8C,IAAf/rX,EAAE86G,WAC1Ew5Q,EAAQrI,cAAcjsX,WAM9Bb,KAAKo1X,gBACLp1X,KAAKo1X,eAAe9iX,WAIhCoxW,EAASroX,UAAUomH,iBAAmB,SAAU5gH,GAC5Cb,KAAK2jX,iBAAkB,GACnB9iX,EAAEw3G,UAAYx3G,EAAEmnB,UAChBnnB,EAAE6kB,iBAEF7kB,EAAEmnB,SAAWhoB,KAAKunX,qBAClBhiX,GAAanB,IAAIpE,KAAKgB,QAAS,cAAehB,KAAK8pX,mBAAoB9pX,OAI/E0jX,EAASroX,UAAUyuX,mBAAqB,SAAUjpX,GAC9CA,EAAE6kB,kBAENg+V,EAASroX,UAAUopB,WAAa,WAC5Blf,GAAanB,IAAIpE,KAAKgB,QAAS,YAAahB,KAAKyhH,iBAAkBzhH,MACnEA,KAAK+0X,gBAAe,GACpB/0X,KAAKk1X,mBAAkB,GACvB3vX,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAK4jI,QAAS5jI,MACtDuF,GAAanB,IAAIpE,KAAKgB,QAAS,OAAQhB,KAAK6jI,SAAU7jI,MACtDuF,GAAanB,IAAIpE,KAAKgB,QAAS,YAAahB,KAAK+mN,YAAa/mN,MAC9DuF,GAAanB,IAAIpE,KAAKgB,QAAS,WAAYhB,KAAKgnN,aAAchnN,MAC9DA,KAAKonH,eAAiB,IAAIpP,GAAeh4G,KAAKgB,SAC1C83G,UAAW94G,KAAKkjJ,iBAAiB5nJ,KAAK0E,MACtCw4G,WAAYx4G,KAAKw4G,WACjBlnC,UAAW,aAGnBoyS,EAASroX,UAAU+kH,aAAe,WAC9B76G,GAAahB,OAAOvE,KAAKgB,QAAS,YAAahB,KAAKyhH,kBACpDzhH,KAAK+0X,gBAAe,GACpB/0X,KAAKk1X,mBAAkB,GACvB3vX,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAK4jI,SAChDr+H,GAAahB,OAAOvE,KAAKgB,QAAS,OAAQhB,KAAK6jI,UAC/Ct+H,GAAahB,OAAOvE,KAAKgB,QAAS,YAAahB,KAAK+mN,aACpDxhN,GAAahB,OAAOvE,KAAKgB,QAAS,WAAYhB,KAAKgnN,cACnDhnN,KAAKonH,eAAe90G,WAExBoxW,EAASroX,UAAUylE,QAAU,SAAU9/D,EAAS0E,GAG5C,IAFA,IAAI2vX,KACAvvX,EAAK9E,EAAQP,YACTy0E,EAAMpvE,IACNE,EAAQF,EAAIJ,IACZ2vX,EAAQ7wX,KAAKsB,GAEjBA,EAAKA,EAAGrF,WAEZ,OAAO40X,GAEX3R,EAASroX,UAAUq2X,aAAe,SAAUpxX,EAAQD,GAEhD,IADA,IAAIE,EAAOF,EAAMI,YACTy0E,EAAM30E,IAAO,CACjB,GAAIA,IAASD,EACT,OAAO,EAEXC,EAAOA,EAAKE,WAEhB,OAAO,GAEXijX,EAASroX,UAAU0mB,YAAc,SAAU/gB,GACvC2C,GAAU3C,GAAUyhX,IACpBhoW,IACItT,OAAQnG,EACRgV,MAAOxK,GAAQob,SAAW,GAAK,IAChC5mB,KAAKmB,eACR4gB,GAAY/gB,IAEhB0iX,EAASroX,UAAUynB,YAAc,SAAU9hB,GACvC8hB,GAAY9hB,GACZA,EAAQgB,UAAY,GACpBqC,GAAarD,GAAUyhX,KAE3BiB,EAASroX,UAAUi6X,gBAAkB,SAAU5qU,GAC3CA,EAAQjC,KAAKuB,MAAMvB,KAAKC,UAAUgC,IAClC1qD,KAAKu1X,WAAWv1X,KAAKolX,cACjB16T,EAAMjuD,OAAS,GACfuD,KAAKw1X,SAAS9qU,IAUtBg5T,EAASroX,UAAU0tF,kBAAoB,SAAUiF,EAASC,GACtD,IAAK,IAAI7vF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,GAAU5vF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,mBACD4B,KAAKwlX,eAAexlX,KAAKylX,kBACzB,MACJ,IAAK,eACDzlX,KAAKulX,kBAAkBvlX,KAAKqiE,cAC5B,MACJ,IAAK,sBACD,GAAIriE,KAAKgrD,cAAcvuD,OAAS,EAAG,CAC/B,IAAImtX,EAAQ5pX,KAAK0wB,WAAW1wB,KAAKgrD,cAAc,IAC/ChrD,KAAKklX,UAAW,EAChBllX,KAAKqsX,kBACLrsX,KAAK6nX,WAAW+B,EAAO,MACvB5pX,KAAKklX,UAAW,EAEpBllX,KAAKgmX,eAAehmX,KAAKunX,qBACzBvnX,KAAKuzX,eAAevzX,KAAKunX,qBACzB,MACJ,IAAK,eACGvnX,KAAK2nM,eACL3nM,KAAKolX,aAAen3R,EAAQm3R,aAC5BplX,KAAKs1X,gBAAgBtnS,EAAQo3R,eAEjC,MACJ,IAAK,WACDplX,KAAK2+H,YAAY1wC,EAAQh7E,SAAU+6E,EAAQ/6E,UAC3C,MACJ,IAAK,YACDjT,KAAKouH,eACL,MACJ,IAAK,WACDpuH,KAAKk1X,mBAAkB,GACvBl1X,KAAKslX,kBACLtlX,KAAKk1X,mBAAkB,GACvB,MACJ,IAAK,SACDl1X,KAAKglX,eAAehlX,KAAKssB,QACzBtsB,KAAKovX,gBACL,MACJ,IAAK,gBACDpvX,KAAK0lX,WAAW1lX,KAAK2lX,eACrB3lX,KAAKozX,WAAWpzX,KAAK2lX,eACrB,MACJ,IAAK,eACD3lX,KAAK4lX,eAAiB5lX,KAAKy6B,iBAAiBz6B,KAAK6lX,cACjD7lX,KAAKovX,gBACL,MACJ,IAAK,gBACDpvX,KAAKqsX,kBACLrsX,KAAKgH,eAAgBgkD,cAAegjC,EAAQhjC,gBAAiB,GAC7DhrD,KAAK0pX,oBACL,MACJ,IAAK,eAGL,IAAK,YACD1pX,KAAKovX,mBAQrB1L,EAASroX,UAAUiX,QAAU,WACzBtS,KAAKgB,QAAQ0K,gBAAgB,yBAC7B1L,KAAKgB,QAAQ0K,gBAAgB,YAC7B1L,KAAKogH,eACLpgH,KAAKulX,mBAAkB,GACvBvlX,KAAK0uJ,WACL1uJ,KAAK+lX,eACL/lX,KAAK2+H,YAAY3+H,KAAKiT,SAAU,MAChCjT,KAAKwlX,gBAAe,GACpBxlX,KAAK0lX,YAAW,GAChB1lX,KAAKgB,QAAQgB,UAAY,GACzB0qF,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,OASlC0jX,EAASroX,UAAUo6X,SAAW,SAAU/qU,EAAOvjD,EAAQ8K,GACnD,IAAIijE,EAAMxqB,GAAV,CAGA,IAAI+mU,EAASzxX,KAAK0wB,WAAWvpB,GAE7B,GADAujD,EAAQ1qD,KAAK+mX,cAAcr8T,GACvB1qD,KAAKssB,OAAOw4C,sBAAsBC,GAClC/kE,KAAKs0X,cAAc5pU,EAAO+mU,EAAQx/W,GAAO,QAExC,GAAsB,IAAlBjS,KAAK4lF,SACV5lF,KAAKs0X,cAAc5pU,EAAO+mU,EAAQx/W,QAGlC,GAAIw/W,EACAzxX,KAAKs0X,cAAc5pU,EAAO+mU,EAAQx/W,QAGlC,IAAK,IAAI9V,EAAI,EAAGA,EAAIuuD,EAAMjuD,OAAQN,IAAK,CACnC,IAAIgzX,EAAMtyX,EAASmD,KAAKssB,OAAOk6V,SAAU97T,EAAMvuD,IAC/Cs1X,EAAStC,EAAMnvX,KAAK0wB,WAAWy+V,EAAIjiX,YAAciiX,EACjDnvX,KAAKs0X,eAAe5pU,EAAMvuD,IAAKs1X,EAAQx/W,MAWvDyxW,EAASroX,UAAUq6X,UAAY,SAAUn1X,GACrC,IAAIyD,EAAMhE,KAAK0wB,WAAWnwB,GACrB20E,EAAMlxE,IACPhE,KAAKutX,cAAcvpX,EAAK,OAQhC0/W,EAASroX,UAAUm6X,SAAW,SAAU9qU,GAChC1qD,KAAK2nM,cACL3nM,KAAK6oX,iBAAiBn+T,GAAO,IAWrCg5T,EAASroX,UAAUs6X,YAAc,SAAUjrU,EAAOq3G,EAAO4xN,GAChDz+S,EAAMxqB,GAIHq3G,EAAQ,EACR/hK,KAAK0zX,gBAAgBjuX,EAAO,IAAM+8W,GAAYxiX,KAAKgB,SAAU+gK,EAAO4xN,GAGpE3zX,KAAK6zX,iBAAiBF,GAP1B3zX,KAAKo0X,cAAc1pU,EAAO03T,IAAa,IAe/CsB,EAASroX,UAAUu6X,aAAe,SAAUlrU,GACnCwqB,EAAMxqB,IACP1qD,KAAK20X,gBAAgBjqU,IAO7Bg5T,EAASroX,UAAUw6X,YAAc,SAAUnrU,GAClCwqB,EAAMxqB,IACP1qD,KAAK40X,eAAelqU,IAS5Bg5T,EAASroX,UAAUy6X,cAAgB,SAAUv1X,GACzC,IAAIwoX,EAAQ/oX,KAAK0wB,WAAWnwB,GAC5B,IAAI20E,EAAM6zS,GAAV,CAGA,IAAIjoT,EAAU9gE,KAAK8gE,QAAQioT,EAAO,IAAMzG,IACxCtiX,KAAK+1X,UAAUj1T,GACf3gE,WAAW,WAAc4oX,EAAMv1Q,gBAAe,IAAU,OAU5DkwQ,EAASroX,UAAU06X,UAAY,SAAUrrU,EAAOq3G,EAAO4xN,GAC9Cz+S,EAAMxqB,GAIHq3G,EAAQ,EACR/hK,KAAK8zX,cAAcruX,EAAO,IAAM+8W,GAAYxiX,KAAKgB,SAAU+gK,EAAO4xN,GAGlE3zX,KAAK+zX,eAAeJ,GAPxB3zX,KAAKo0X,cAAc1pU,EAAO23T,IAAY,IAe9CqB,EAASroX,UAAU26X,QAAU,SAAUz1X,GACnC,IAAIyD,EAAMhE,KAAK0wB,WAAWnwB,GAC1B,OAAOP,KAAKupX,YAAYvlX,GAAK,IAQjC0/W,EAASroX,UAAU46X,UAAY,SAAUC,EAAa/uX,EAAQ8K,GAC1D,IAAIw/W,EAASzxX,KAAK0wB,WAAWvpB,GAC7B,IAAI+tE,EAAMu8S,GAGV,IAAK,IAAIt1X,EAAI,EAAGA,EAAI+5X,EAAYz5X,OAAQN,IAAK,CACzC,IAAIs0X,EAASzwX,KAAK0wB,WAAWwlW,EAAY/5X,IACrC+4E,EAAMu7S,IAAWgB,EAAOf,WAAWD,IAAWzwX,KAAK0xX,aAAajB,EAAQgB,IAG5EzxX,KAAKgyX,gBAAgBvB,EAAQgB,EAAQzxX,KAAMiS,KAOnDyxW,EAASroX,UAAU86X,YAAc,SAAUzrU,GACvC,IAAKwqB,EAAMxqB,GACP,IAAK,IAAIvuD,EAAI,EAAG0F,EAAM6oD,EAAMjuD,OAAQN,EAAI0F,EAAK1F,IAAK,CAC9C,IAAI4sX,EAAQ/oX,KAAK0wB,WAAWg6B,EAAMvuD,IAC9B+4E,EAAM6zS,IAGV/oX,KAAKk0X,WAAWnL,KAS5BrF,EAASroX,UAAU+6X,WAAa,SAAUjvX,EAAQ8rD,GAC9C,IAAIiiB,EAAM/tE,KAAW+tE,EAAMjiB,IAAajzD,KAAKqiE,aAA7C,CAGA,IAAI0mT,EAAQ/oX,KAAK0wB,WAAWvpB,GAC5B,IAAI+tE,EAAM6zS,GAAV,CAGA,IAAI+G,EAASrqX,EAAO,IAAM88W,GAAUwG,GACpC/oX,KAAKwvX,cAAczG,GACnB,IAAIx7W,EAAYvN,KAAKyvX,aAAa1G,EAAO,KAAM,MAC/C/oX,KAAK0mB,QAAQ,cAAenZ,GACxBA,EAAU8qB,QAGdr4B,KAAK+vX,cAAchH,EAAO+G,EAAQ78T,GAAS,MAO/CywT,EAASroX,UAAUk6X,WAAa,SAAU7qU,GAClC1qD,KAAK2nM,cACL3nM,KAAK6oX,iBAAiBn+T,GAAO,IAGrC0hC,IACIllF,GAAS,IACVw8W,EAASroX,UAAW,wBAAoB,GAC3C+wF,IACIllF,GAAS,IACVw8W,EAASroX,UAAW,oBAAgB,GACvC+wF,IACIllF,GAAS,IACVw8W,EAASroX,UAAW,2BAAuB,GAC9C+wF,IACIrkF,KAAY07W,KACbC,EAASroX,UAAW,iBAAa,GACpC+wF,IACIllF,KACDw8W,EAASroX,UAAW,oBAAgB,GACvC+wF,IACIllF,EAAS,KACVw8W,EAASroX,UAAW,gBAAY,GACnC+wF,IACIllF,GAAS,IACVw8W,EAASroX,UAAW,yBAAqB,GAC5C+wF,IACIllF,GAAS,IACVw8W,EAASroX,UAAW,iBAAa,GACpC+wF,IACIllF,EAAS,SACVw8W,EAASroX,UAAW,gBAAY,GACnC+wF,IACIrkF,KAAYw7W,KACbG,EAASroX,UAAW,cAAU,GACjC+wF,IACIllF,GAAS,IACVw8W,EAASroX,UAAW,qBAAiB,GACxC+wF,IACIllF,KACDw8W,EAASroX,UAAW,oBAAgB,GACvC+wF,IACIllF,KACDw8W,EAASroX,UAAW,qBAAiB,GACxC+wF,IACIllF,EAAS,SACVw8W,EAASroX,UAAW,iBAAa,GACpC+wF,IACIllF,GAAS,IACVw8W,EAASroX,UAAW,oBAAgB,GACvC+wF,IACItjF,KACD46W,EAASroX,UAAW,eAAW,GAClC+wF,IACItjF,KACD46W,EAASroX,UAAW,iBAAa,GACpC+wF,IACItjF,KACD46W,EAASroX,UAAW,gBAAY,GACnC+wF,IACItjF,KACD46W,EAASroX,UAAW,iBAAa,GACpC+wF,IACItjF,KACD46W,EAASroX,UAAW,gBAAY,GACnC+wF,IACItjF,KACD46W,EAASroX,UAAW,mBAAe,GACtC+wF,IACItjF,KACD46W,EAASroX,UAAW,oBAAgB,GACvC+wF,IACItjF,KACD46W,EAASroX,UAAW,mBAAe,GACtC+wF,IACItjF,KACD46W,EAASroX,UAAW,qBAAiB,GACxC+wF,IACItjF,KACD46W,EAASroX,UAAW,sBAAkB,GACzC+wF,IACItjF,KACD46W,EAASroX,UAAW,oBAAgB,GACvC+wF,IACItjF,KACD46W,EAASroX,UAAW,qBAAiB,GACxC+wF,IACItjF,KACD46W,EAASroX,UAAW,oBAAgB,GACvC+wF,IACItjF,KACD46W,EAASroX,UAAW,mBAAe,GACtC+wF,IACItjF,KACD46W,EAASroX,UAAW,kBAAc,GACrC+wF,IACItjF,KACD46W,EAASroX,UAAW,mBAAe,GACtC+wF,IACItjF,KACD46W,EAASroX,UAAW,oBAAgB,GACvC+wF,IACItjF,KACD46W,EAASroX,UAAW,qBAAiB,GACxC+wF,IACItjF,KACD46W,EAASroX,UAAW,oBAAgB,GACvC+wF,IACItjF,KACD46W,EAASroX,UAAW,qBAAiB,GACxCqoX,EAAWE,EAAax3R,IACpBhjF,GACDs6W,GAEH,IAAIE,GACNz2Q,IC7tFEthB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAQ5Di5V,GAAQ,UACRC,GAAO,SACPC,GAAY,eASZC,GAAa,eACbC,GAAuB,sBACvBC,GAAmB,sBACnBC,GAAU,oBACVC,GAAkB,qBAelBC,GAAyB,SAAUnqS,GAEnC,SAASmqS,EAAQ7jX,EAAShS,GACtB,OAAO0rF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAkhBlD,OAphBA6rF,GAAUgrS,EAASnqS,GAInBmqS,EAAQx7X,UAAUoX,UAAY,WAC1BzS,KAAK6nI,YAETgvP,EAAQx7X,UAAUsyG,OAAS,WACvB3tG,KAAK+vG,aACL/vG,KAAKykB,cAEToyW,EAAQx7X,UAAU00G,WAAa,WAC3B/vG,KAAK82X,YACL92X,KAAK2D,WACL3D,KAAK4pI,YACD5pI,KAAK+2X,YACL/2X,KAAKg3X,UAELh3X,KAAKqrW,OACLrrW,KAAK4wH,OAGL5wH,KAAKi3X,gBAETj3X,KAAKk3X,QAAQl3X,KAAK0G,MAClB1G,KAAKm3X,0BACLn3X,KAAKy0H,gBAEToiQ,EAAQx7X,UAAUo5H,aAAe,WAC7Bz0H,KAAKkT,UAAavP,GAAU3D,KAAKgB,SAvD/B,SAwDGqD,GAAarE,KAAKgB,SAxDrB,UA0DN61X,EAAQx7X,UAAUy7X,UAAY,WAC1B92X,KAAKo3X,oBAAsBp3X,KAAKgB,QAAQs2M,wBAA0Bt3M,KAAKgB,QAAQqT,cAClD,iBAAjBrU,KAAW,QACnBA,KAAKgH,eAAgBG,OAAQ3G,SAASmC,cAAc3C,KAAKmH,UAAW,GAEpEnH,KAAKmH,SACLnH,KAAKmH,OAAOjC,aAAalF,KAAKgB,QAAShB,KAAKmH,OAAOiT,SAAS,IAC5DzW,GAAU3D,KAAKgB,SAAU41X,IACzBjzX,GAAU3D,KAAKmH,QAASwvX,MAGhCE,EAAQx7X,UAAU87X,wBAA0B,WACpCn3X,KAAKq3X,qBACL9xX,GAAanB,IAAI5D,SAAU,uBAAwBR,KAAKs3X,qBAAsBt3X,MAG9EuF,GAAahB,OAAO/D,SAAU,uBAAwBR,KAAKs3X,uBAGnET,EAAQx7X,UAAUwsI,SAAW,WACrB7nI,KAAK+2X,YAAgC,SAAlB/2X,KAAKkU,SACxB6wP,EAAS/kQ,KAAKgB,SAAWgV,MAAShW,KAAK+yN,aAAa/yN,KAAKu3X,YAEpDv3X,KAAK+2X,YAAgC,UAAlB/2X,KAAKkU,SAC7B6wP,EAAS/kQ,KAAKgB,SAAWgV,MAAShW,KAAK+yN,aAAa/yN,KAAKu3X,YAEnDv3X,KAAK+2X,YACXhyH,EAAS/kQ,KAAKgB,SAAWgV,MAAShW,KAAK+yN,aAAa/yN,KAAKgW,UAGjE6gX,EAAQx7X,UAAU03N,aAAe,SAAU/8M,GAUvC,OARIA,EADiB,iBAAVA,EACCzT,EAAWyT,GAEG,iBAAVA,EACHA,EAAMrG,MAAM,WAAcqG,EAAQzT,EAAWyT,GAG9C,QAIhB6gX,EAAQx7X,UAAUuuI,UAAY,WAC1Bm7H,EAAS/kQ,KAAKgB,SAAWw2X,UAAW,GAAKx3X,KAAKgkE,UAElD6yT,EAAQx7X,UAAUsI,SAAW,WACzB,IAAI8zX,EAAej3X,SAASmC,cAAc,mBACrClF,EAAmBg6X,GACpBz3X,KAAKgB,QAAQihH,qBACbt+G,GAAU8zX,GAAgBz3X,KAAKgB,QAAQihH,qBAAsBw0Q,KAE5Dz2X,KAAK+2X,YAA4B,SAAd/2X,KAAK0G,MACzB/C,GAAU3D,KAAKgB,UAAWw1X,KAE9BnyX,GAAarE,KAAKgB,UAAWs1X,GAAMD,GA/G/B,UACD,SAGC,UADD,SADA,WA8GHr2X,KAAKgB,QAAQ8C,UAAUM,IAxHpB,aAyHHT,GAAU3D,KAAKgB,SAA6B,UAAlBhB,KAAKkU,SAjH3B,UACD,UAiHe,SAAdlU,KAAK0G,MAAoB8E,GAAQob,UAAa5mB,KAAK+2X,WAInDpzX,GAAU3D,KAAKgB,SAAUq1X,IAHzB1yX,GAAU3D,KAAKgB,SAAUs1X,KAMjCO,EAAQx7X,UAAUq8X,gBAAkB,WAChC,IAAIC,EAAUn3X,SAASmC,cAAc,oBACjC3C,KAAKgB,QAAQihH,mBACbjiH,KAAKmH,QAAUnH,KAAK43X,cAAgBD,EACpCtzX,GAAaszX,GA/HH,cAiIL33X,KAAK43X,cAAgB53X,KAAKszJ,QAC/BtzJ,KAAKszJ,MAAM5uJ,MAAM6pC,QAAU,OAC3BvuC,KAAKszJ,MAAMxxJ,UAAY,GACvB9B,KAAKszJ,MAAQ,OAOrBujO,EAAQx7X,UAAUynF,KAAO,WACrB,IAAI+0S,GAAmB1rW,MAAOnsB,KAAMgB,QAAShB,KAAKgB,QAASq3B,QAAQ,GAEnE,GADAr4B,KAAK0mB,QAAQ,QAASmxW,IACjBA,EAAex/V,OAAQ,CACxB,GAAIr4B,KAAKgB,QAAQ8C,UAAUK,SAASkyX,IAChC,OAEJ,GAAIr2X,KAAKgB,QAAQ8C,UAAUK,SAASmyX,IAAO,CACvC,IAAIwB,GAAoB/gW,KAAM,SAAU/1B,QAAShB,KAAKgB,SACtDhB,KAAK0mB,QAAQ,SAAUoxW,GAE3Bn0X,GAAU3D,KAAKgB,SAAUq1X,IACzBhyX,GAAarE,KAAKgB,SAAUs1X,IAC5Bt2X,KAAK+2X,WAAahyH,EAAS/kQ,KAAKgB,SAAWgV,MAASzT,EAAWvC,KAAKu3X,YAChExyH,EAAS/kQ,KAAKgB,SAAWgV,MAASzT,EAAWvC,KAAKgW,SACtDhW,KAAKg3X,UACLh3X,KAAKk3X,QAAQl3X,KAAK0G,MAClB,IAAIixX,EAAUn3X,SAASmC,cAAc,oBACjC3C,KAAKgB,QAAQihH,oBACZjiH,KAAK+2X,YAAcY,IACpBA,EAAQjzX,MAAM2I,UAAY,kBACR,SAAlBrN,KAAKkU,SAAsByjX,EAAQjzX,MAAMy/C,WAAa,MAAQwzU,EAAQjzX,MAAMksG,YAAc,OAE9F5wG,KAAK03X,kBACL13X,KAAKm3X,0BACLn3X,KAAK+3X,eACa,UAAd/3X,KAAK0G,MACLlG,SAASuL,KAAKjI,UAAUS,OAAO,sBAEnCvE,KAAKgH,eAAgBqkW,QAAQ,IAAS,KAO9CwrB,EAAQx7X,UAAUu1H,KAAO,WACrB,IAAIonQ,GAAkB7rW,MAAOnsB,KAAMgB,QAAShB,KAAKgB,QAASq3B,QAAQ,GAElE,GADAr4B,KAAK0mB,QAAQ,OAAQsxW,IAChBA,EAAc3/V,OAAQ,CAEvB,GADAh0B,GAAarE,KAAKgB,SAAUw1X,IACxBx2X,KAAKgB,QAAQ8C,UAAUK,SAASmyX,IAChC,OAEJ,GAAIt2X,KAAKgB,QAAQ8C,UAAUK,SAASkyX,IAAQ,CACxC,IAAIyB,GAAoB/gW,KAAM,SAAU/1B,QAAShB,KAAKgB,SACtDhB,KAAK0mB,QAAQ,SAAUoxW,GAE3Bn0X,GAAU3D,KAAKgB,UAAWs1X,GAAMC,KAChCxxH,EAAS/kQ,KAAKgB,SAAWqM,UAAa,KACtChJ,GAAarE,KAAKgB,SAAUq1X,IAC5BtxH,EAAS/kQ,KAAKgB,SAAWgV,MAASzT,EAAWvC,KAAKgW,SAC/BhW,KAAKgB,QAAQ4K,wBAAwBoK,MACxDhW,KAAKk3X,QAAQl3X,KAAK0G,MAClB1G,KAAKi4X,iBACLj4X,KAAKm3X,0BACLn3X,KAAK+3X,eACa,UAAd/3X,KAAK0G,MACLlG,SAASuL,KAAKjI,UAAUM,IAAI,sBAEhCpE,KAAKgH,eAAgBqkW,QAAQ,IAAQ,KAG7CwrB,EAAQx7X,UAAU08X,aAAe,WACzB/3X,KAAK+3B,QACL1zB,GAAarE,KAAKgB,SAAU01X,IAG5B/yX,GAAU3D,KAAKgB,SAAU01X,KAGjCG,EAAQx7X,UAAU27X,QAAU,WACpBh3X,KAAK+2X,YAAgC,SAAlB/2X,KAAKkU,WAAwBlU,KAAKk4X,WACrDnzH,EAAS/kQ,KAAKgB,SAAWqM,UAAa,gCAA0CrN,KAAK+yN,aAAa/yN,KAAKu3X,UAAY,MAE9Gv3X,KAAK+2X,YAAgC,UAAlB/2X,KAAKkU,WAAyBlU,KAAKk4X,YAC3DnzH,EAAS/kQ,KAAKgB,SAAWqM,UAAa,gCAA+CrN,KAAK+yN,aAAa/yN,KAAKu3X,UAAY,MAExHv3X,KAAKgB,QAAQ8C,UAAUK,SAASkyX,KAAUr2X,KAAK+2X,YAC/ChyH,EAAS/kQ,KAAKgB,SAAWgV,MAAShW,KAAK+yN,aAAa/yN,KAAKu3X,aAGjEV,EAAQx7X,UAAU48X,eAAiB,WAC/B,GAAIj4X,KAAKmH,QAAUnH,KAAK43X,aAAc,CAGlCj0X,GAFcnD,SAASmC,cAAc,oBACjC3C,KAAKgB,QAAQihH,oBAhOP,mBAmOLjiH,KAAK43X,eAAiB53X,KAAKszJ,OAAStzJ,KAAKk4X,aAC9Cl4X,KAAKszJ,MAAQtzJ,KAAKmB,cAAc,OAChCnB,KAAKszJ,MAAMjwJ,UAtOD,oBAuOVrD,KAAKszJ,MAAM5uJ,MAAM6pC,QAAU,QAC3B/tC,SAASuL,KAAKpK,YAAY3B,KAAKszJ,SAGvCujO,EAAQx7X,UAAU+yG,eAAiB,WAC/B,OAAOpuG,KAAK4uG,cAAc,OAAQ,WAAY,YAOlDioR,EAAQx7X,UAAU0kC,cAAgB,WAC9B,MAAO,WAMX82V,EAAQx7X,UAAU4nH,OAAS,SAAUpiH,GACjCb,KAAKgB,QAAQ8C,UAAUK,SAASmyX,IAAQt2X,KAAK8iF,OAAS9iF,KAAK4wH,QAE/DimQ,EAAQx7X,UAAU68X,SAAW,WACzB,QAAOl4X,KAAKgB,QAAQ8C,UAAUK,SAASmyX,KAE3CO,EAAQx7X,UAAU47X,cAAgB,WAC1Bj3X,KAAKm4X,YAAcn4X,KAAKm4X,WAAWnyX,QACnChG,KAAK4wH,OAEA5wH,KAAKm4X,YAAcn4X,KAAKk4X,YAC7Bl4X,KAAK8iF,QAGb+zS,EAAQx7X,UAAU6iV,OAAS,SAAUr9U,GACf,SAAdb,KAAK0G,OACD8E,GAAQob,SACRjjB,GAAU3D,KAAKgB,SAtQpB,UAyQK2C,GAAU3D,KAAKgB,SAxQpB,WA2QHhB,KAAKi3X,iBAETJ,EAAQx7X,UAAUi8X,qBAAuB,SAAUz2X,GAC3CgF,EAAQhF,EAAEsG,OAAQ,yBAGtBnH,KAAK8iF,QAET+zS,EAAQx7X,UAAU+8X,qBAAuB,SAAUn4X,GACzB,SAAlBD,KAAKkU,UAA+C,UAAxBjU,EAAK09G,gBAChC19G,EAAKo/B,QAAU,IAAMp/B,EAAK88G,WAAa,IAAM98G,EAAKi9G,UAAY,GAC/Dl9G,KAAK4wH,OAEkB,SAAlB5wH,KAAKkU,UAA+C,SAAxBjU,EAAK09G,eACtC39G,KAAK8iF,OAEkB,UAAlB9iF,KAAKkU,UAAgD,UAAxBjU,EAAK09G,eACvC39G,KAAK8iF,OAEkB,UAAlB9iF,KAAKkU,UAAgD,SAAxBjU,EAAK09G,gBACnC9hH,OAAO0d,WAAatZ,EAAKo/B,QAAU,IAAMp/B,EAAK88G,WAAa,IAAM98G,EAAKi9G,UAAY,IACtFl9G,KAAK4wH,QAGbimQ,EAAQx7X,UAAUg9X,kBAAoB,WAC9Br4X,KAAKs4X,gBACLt4X,KAAKu4X,eAAiB,IAAI98Q,GAAMj7G,SAASuL,MAAQsmM,MAAOryM,KAAKo4X,qBAAqB98X,KAAK0E,QACvFA,KAAKw4X,WAAa,IAAI/8Q,GAAMz7G,KAAKgB,SAAWqxM,MAAOryM,KAAKo4X,qBAAqB98X,KAAK0E,SAG9EA,KAAKu4X,gBAAkBv4X,KAAKw4X,aAC5Bx4X,KAAKu4X,eAAejmX,UACpBtS,KAAKw4X,WAAWlmX,YAI5BukX,EAAQx7X,UAAUopB,WAAa,WAC3BzkB,KAAKq4X,oBACLx8X,OAAOa,iBAAiB,SAAUsD,KAAKk+U,OAAO5iV,KAAK0E,QAEvD62X,EAAQx7X,UAAU+kH,aAAe,WAC7BvkH,OAAOe,oBAAoB,SAAUoD,KAAKk+U,OAAO5iV,KAAK0E,OACtDuF,GAAahB,OAAO/D,SAAU,uBAAwBR,KAAKs3X,sBACvDt3X,KAAKu4X,gBACLv4X,KAAKu4X,eAAejmX,UAEpBtS,KAAKw4X,YACLx4X,KAAKw4X,WAAWlmX,WAGxBukX,EAAQx7X,UAAU0tF,kBAAoB,SAAUiF,EAASC,GAGrD,IAAK,IAFD0pS,EAAUn3X,SAASmC,cAAc,oBACjC3C,KAAKgB,QAAQihH,mBACR7jH,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,GAAU5vF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,SACD4B,KAAKqrW,OAASrrW,KAAK4wH,OAAS5wH,KAAK8iF,OACjC,MACJ,IAAK,QACD9iF,KAAK6nI,WACA7nI,KAAKk4X,YACNl4X,KAAKg3X,UAET,MACJ,IAAK,UACDh3X,KAAK+3X,eACL,MACJ,IAAK,OACD1zX,GAAarE,KAAKgB,UAAWw1X,KAC7Bx2X,KAAK2D,WACL3D,KAAKk3X,QAAQl3X,KAAK0G,MAClB,MACJ,IAAK,WACD1G,KAAKgB,QAAQ0D,MAAM2I,UAAY,GAC/BrN,KAAKg3X,UACDW,IACkB,SAAlB33X,KAAKkU,SAAsByjX,EAAQjzX,MAAMksG,YAAc,MAAQ+mR,EAAQjzX,MAAMy/C,WAAa,OAExE,UAAlBnkD,KAAKkU,UACL7P,GAAarE,KAAKgB,SA7V/B,UA8Va2C,GAAU3D,KAAKgB,SA/V3B,aAkWYqD,GAAarE,KAAKgB,SAlW9B,WAmWY2C,GAAU3D,KAAKgB,SAlW5B,WAoWShB,KAAKk3X,QAAQl3X,KAAK0G,MAClB,MACJ,IAAK,eACG1G,KAAK43X,aACL53X,KAAKi4X,iBAGDj4X,KAAKszJ,QACLtzJ,KAAKszJ,MAAM5uJ,MAAM6pC,QAAU,OAC3BvuC,KAAKszJ,MAAMxxJ,UAAY,GACvB9B,KAAKszJ,MAAQ,MAGrB,MACJ,IAAK,SAC4B,iBAAjBtzJ,KAAW,QACnBA,KAAKgH,eAAgBG,OAAQ3G,SAASmC,cAAc3C,KAAKmH,UAAW,GAEpE1J,EAAkBuC,KAAKmH,SACvB9C,GAAarE,KAAKgB,SAAU41X,IAC5BvyX,GAAa4pF,EAAQ9mF,QAASwvX,IAC9B5xH,EAAS4yH,GAAWc,cAAe,EAAGC,eAAgB,IACtDl4X,SAASuL,KAAKuyH,sBAAsB,aAAct+H,KAAKgB,UAGvD0rF,EAAOrxF,UAAUyvD,QAAQxpD,KAAKtB,MAElC,MACJ,IAAK,uBACDA,KAAKm3X,0BACL,MACJ,IAAK,aACIn3X,KAAKk4X,YACNl4X,KAAKg3X,UAET,MACJ,IAAK,SACDh3X,KAAK4pI,YACL,MACJ,IAAK,aACD5pI,KAAKi3X,gBACL,MACJ,IAAK,iBACDj3X,KAAKq4X,oBACL,MACJ,IAAK,YACDr4X,KAAKy0H,kBAKrBoiQ,EAAQx7X,UAAU67X,QAAU,SAAUxwX,GAClC,IAAIgtT,EAAe1zT,KAAKgB,QAAQ4K,wBAAwBoK,MACxDhW,KAAK4pI,YACD5pI,KAAK+2X,YACLpzX,GAAU3D,KAAKgB,SAnad,UAqaL,IAAI22X,EAAUn3X,SAASmC,cAAc,oBACjC3C,KAAKgB,QAAQihH,mBACb01Q,IACAA,EAAQjzX,MAAM2I,UAAY,kBACrB7B,GAAQob,UAA0B,SAAd5mB,KAAK0G,OACR,SAAlB1G,KAAKkU,SAAsByjX,EAAQjzX,MAAMy/C,WAAa,MAAQwzU,EAAQjzX,MAAMksG,YAAc,QAGlG,IAAI3zE,GAASj9B,KAAKkU,SAAsBw/S,EAAe,MACnD21C,EAA6B,SAAlBrpW,KAAKkU,SAAsBw/S,KAE1C,OADArvT,GAAarE,KAAKgB,UAraf,SADA,SAEC,YAqaI0F,GACJ,IAAK,OACD/C,GAAU3D,KAAKgB,UAxapB,WAyaS22X,IAAY33X,KAAK+2X,YAAc/2X,KAAKgB,QAAQ8C,UAAUK,SAASmyX,OAC7C,SAAlBt2X,KAAKkU,SAAsByjX,EAAQjzX,MAAMy/C,WAAalnB,EAAS06V,EAAQjzX,MAAMksG,YAAc3zE,GAE/F,MACJ,IAAK,QACDt5B,GAAU3D,KAAKgB,UA7anB,YA8aQ22X,IAAY33X,KAAK+2X,YAAc/2X,KAAKgB,QAAQ8C,UAAUK,SAASmyX,OAC/DqB,EAAQjzX,MAAM2I,UAAY,cAAgBg8V,EAAW,OAEzD,MACJ,IAAK,OACD1lW,GAAU3D,KAAKgB,UArbpB,WAsbShB,KAAK+2X,YAAc/2X,KAAKgB,QAAQ8C,UAAUK,SAASkyX,KAC/CsB,IACkB,SAAlB33X,KAAKkU,SAAsByjX,EAAQjzX,MAAMy/C,WAAalnB,EAAS06V,EAAQjzX,MAAMksG,YAAc3zE,GAGnG,MACJ,IAAK,OACDt5B,GAAU3D,KAAKgB,UAAWu1X,KACtB/qX,GAAQob,SACJ+wW,GAAY33X,KAAe,aAAMA,KAAKk4X,YACpB,SAAlBl4X,KAAKkU,SAAsByjX,EAAQjzX,MAAMy/C,WAAalnB,EAAS06V,EAAQjzX,MAAMksG,YAAc3zE,EAC3Ft5B,GAAU3D,KAAKgB,SAhc5B,WAmca2C,GAAU3D,KAAKgB,SApc5B,WAwcS2C,GAAU3D,KAAKgB,SAvcxB,UAwca22X,IAAY33X,KAAK+2X,YAAc/2X,KAAKgB,QAAQ8C,UAAUK,SAASmyX,OAC7C,SAAlBt2X,KAAKkU,SAAsByjX,EAAQjzX,MAAMy/C,WAAalnB,EAAS06V,EAAQjzX,MAAMksG,YAAc3zE,GAE/Fj9B,KAAKgH,eAAgBqkW,QAAQ,IAAQ,IAEzCrrW,KAAKi4X,mBAOjBpB,EAAQx7X,UAAUiX,QAAU,WACxBo6E,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,MAC9BqE,GAAarE,KAAKgB,UAAWs1X,GAAMD,GAtdhC,SACC,UAFD,SADA,SADC,UAydsEE,GAAWG,GA3dvE,aA4dOD,GAAsBD,KAC3Cx2X,KAAK03X,kBACL13X,KAAKgB,QAAQ0D,MAAMsR,MAAQ,GAC3BhW,KAAKgB,QAAQ0D,MAAMs/D,OAAS,GAC5BhkE,KAAKgB,QAAQ0D,MAAM2I,UAAY,GAC/B,IAAIsqX,EAAUn3X,SAASmC,cAAc,oBAC9B3C,KAAKgB,QAAQihH,mBACfxkH,EAAkBk6X,KACnBA,EAAQjzX,MAAMu4B,OAAS,GACvB06V,EAAQjzX,MAAM2I,UAAY,IAE1BrN,KAAKmH,SACL9C,GAAarE,KAAKgB,SAAU41X,IAC5BvyX,GAAarE,KAAKmH,QAASwvX,IAC4B,SAAnD32X,KAAKo3X,oBAAoB/iX,cAAcrR,SACvChD,KAAKo3X,oBAAoB32X,WAAWyE,aAAalF,KAAKgB,QAAShB,KAAKo3X,oBAAoBx7O,cAGhG57I,KAAKogH,gBAETh0B,IACIllF,EAAS,SACV2vX,EAAQx7X,UAAW,gBAAY,GAClC+wF,IACIllF,EAAS,OACV2vX,EAAQx7X,UAAW,kBAAc,GACpC+wF,IACIllF,GAAS,IACV2vX,EAAQx7X,UAAW,kBAAc,GACpC+wF,IACIllF,GAAS,IACV2vX,EAAQx7X,UAAW,sBAAkB,GACxC+wF,IACIllF,GAAS,IACV2vX,EAAQx7X,UAAW,cAAU,GAChC+wF,IACIllF,GAAS,IACV2vX,EAAQx7X,UAAW,iBAAa,GACnC+wF,IACIllF,GAAS,IACV2vX,EAAQx7X,UAAW,eAAW,GACjC+wF,IACIllF,EAAS,SACV2vX,EAAQx7X,UAAW,cAAU,GAChC+wF,IACIllF,GAAS,IACV2vX,EAAQx7X,UAAW,4BAAwB,GAC9C+wF,IACIllF,EAAS,SACV2vX,EAAQx7X,UAAW,gBAAY,GAClC+wF,IACIllF,EAAS,OACV2vX,EAAQx7X,UAAW,cAAU,GAChC+wF,IACIllF,GAAS,IACV2vX,EAAQx7X,UAAW,oBAAgB,GACtC+wF,IACIllF,EAAS,SACV2vX,EAAQx7X,UAAW,YAAQ,GAC9B+wF,IACIllF,EAAS,SACV2vX,EAAQx7X,UAAW,aAAS,GAC/B+wF,IACIllF,EAAS,MACV2vX,EAAQx7X,UAAW,cAAU,GAChC+wF,IACItjF,KACD+tX,EAAQx7X,UAAW,eAAW,GACjC+wF,IACItjF,KACD+tX,EAAQx7X,UAAW,aAAS,GAC/B+wF,IACItjF,KACD+tX,EAAQx7X,UAAW,YAAQ,GAC9B+wF,IACItjF,KACD+tX,EAAQx7X,UAAW,cAAU,GAChC+wF,IACItjF,KACD+tX,EAAQx7X,UAAW,iBAAa,GACnCw7X,EAAUzqS,IACNhjF,GACDytX,IAEL1pR,ICnkBEwrR,GAAgC,WAEhC,SAASA,EAAen9B,GACpBx7V,KAAK2S,QAAU6oV,EAoMnB,OA9LAm9B,EAAet9X,UAAUimW,sBAAwB,SAAU3uV,GAE9B3S,KAAKghW,mBAA9B,IACIr+T,EAAYhwB,EAAQ+iB,WAAWmN,WACnC7iC,KAAK44X,kBAAoBz3X,EAAc,OACnCmC,GAAIqP,EAAQ3R,QAAQsC,GAAK,qBACzBC,OAAQ,WAAavD,KAAKghW,mBAAmBhrV,MAAQ2sB,GAAa,cAC9D3iC,KAAKghW,mBAAmBjrV,OAAS,UACjC/V,KAAKghW,mBAAmBh0V,EAAI,YAC3BhN,KAAKghW,mBAAmBj0V,EAAI41B,EAAY,GAAK,2BAEtD3iC,KAAK2S,QAAQ3R,QAAQW,YAAY3B,KAAK44X,oBAK1CD,EAAet9X,UAAUkmW,eAAiB,WACtC,IAAIxhW,EAAQC,KACR64X,EAAkB13X,EAAc,OAASmC,GAAItD,KAAK2S,QAAQ3R,QAAQsC,GAAK,cAC3EtD,KAAK44X,kBAAkBj3X,YAAYk3X,GAInC,IAAK,IAFDnzX,KACAqtH,EAAU/yH,KAAK2S,QAAQwtB,uBAAuBC,QACzCjkC,EAAI,EAAGA,EAAI42H,EAAQt2H,OAAQN,IAChCuJ,EAASlB,MAAOipD,MAAO,OAAQ3+B,KAAMikG,EAAQ52H,GAAG2yB,OAEpD9uB,KAAK84X,WAAa94X,KAAK2S,QAAQ3R,QAAQsC,GAAK,YAC5CoC,EAASlB,MAAOyK,SAAU,8BAAgCjP,KAAK84X,WAAa,kBAAmBrrU,MAAO,UACtG,IAAIsrU,GACArzX,SAAUA,EACVqxB,KAAM,gBACNsB,QAAQ,EACR2gW,oBAAoB,EACpBp+V,QAAS,IAEb56B,KAAK2S,QAAQ+T,QAAQ,iBAAkBqyW,GACvC/4X,KAAKi5X,QAAU,IAAIzzB,IACf3pS,MAAOk9T,EAAYrzX,SAAUqQ,OAAQ/V,KAAKghW,mBAAmBjrV,OAC7DwmW,QAAS,SAAUt8W,GACfF,EAAM4vI,YAAY1vI,EAAMF,EAAM4S,UAC/B6sQ,QAAS,WACRz/Q,EAAM2qD,MAAQ3qD,EAAMk5X,QAAQj4X,QAAQQ,iBAAiB,mBAAmB,GACpE/D,EAAkBsC,EAAM+7D,gBACxBi3D,EAAQ77F,IAAI,SAAU8pS,EAAQ/uT,GACtB+uT,EAAOtoL,WACP34I,EAAM4S,QAAQ4V,WAAaxoB,EAAMm5X,aAAal4D,EAAO35P,aAActnE,EAAM4S,QAAQ+kB,SAAUspS,EAAO7+T,UAAUke,UAC5GtgB,EAAM+7D,cAAiB/7D,EAAM2qD,MAAMn5C,WAAW9U,OAASs2H,EAAQt2H,OAAUwV,KAIrFlS,EAAMo5X,iBAAiBp5X,EAAM+7D,kBAGrC97D,KAAKi5X,QAAQ3qV,SAASuqV,GACtB74X,KAAK6tH,eAAgB,EAErB7tH,KAAKugW,WAAa,IAAI1kJ,IAClB17L,IAAK,IAAIC,KAAKpgB,KAAK2S,QAAQ27N,YAAYl3M,MACvC9qB,IAAK,IAAI8T,KAAKpgB,KAAK2S,QAAQ27N,YAAYj3M,MACvCmF,OAAQ,iBACRxV,YAAa,iBACb1B,iBAAiB,EACjBm0D,UAAW,IAAIr5D,KAAKpgB,KAAK2S,QAAQ4V,YACjCmxD,QAAS,IAAIt5D,KAAKpgB,KAAK2S,QAAQ+kB,UAC/B8nP,QAAS,SAAUv/Q,GACf,GAAI84X,EAAYC,mBAAoB,CAChC,IAAII,EAAoB54X,SAASkN,uBAAuB,wBAAwB,GAChF0rX,EAAkB10X,MAAM6pC,QAAU,OAClC6qV,EAAkB96P,sBAAsB,WAAYn9H,EAAc,OAASmC,GAAI,cAC3EtB,UAAW+2X,EAAYn+V,QAASv3B,UAAW,mBAC/CqtB,GAAW,eAAe4tG,sBAAsB,aAAen9H,EAAc,QAAUmC,GAAI,WACvFD,UAAW,0CAA2CE,OAAQ,wBAClE/C,SAASyuB,eAAe,eAAeoqW,QAAU,WAC7Ct5X,EAAMwgW,WAAW3vO,KAAKlgG,GAAW,mBAI7ClQ,OAAQ,SAAUvgB,GACVF,EAAM8tH,eACN9tH,EAAM4S,QAAQ4nV,YAAY/tH,iBAAiBvsO,EAAKw5E,UAAUp5D,UAAWpgB,EAAKy5E,QAAQr5D,UAAWtgB,EAAM4S,YAI/G3S,KAAKugW,WAAWjyT,SAAS,IAAMtuC,KAAK84X,aAMxCH,EAAet9X,UAAU89X,iBAAmB,SAAUr9T,GAClD,GAAI97D,KAAK2S,QAAQ4tB,qBAAsB,CACnC,IAAK,IAAIpkC,EAAI,EAAG8+B,EAAWj7B,KAAK0qD,MAAMn5C,WAAW9U,OAAQN,EAAI8+B,EAAU9+B,IACnE6D,KAAK0qD,MAAMn5C,WAAWpV,GAAGoV,WAAW,GAAGzN,UAAUS,OAAO,YACxDvE,KAAK0qD,MAAMn5C,WAAWpV,GAAGoV,WAAW,GAAGzN,UAAUS,OAAO,YAE5DvE,KAAK0qD,MAAMn5C,WAAWuqD,GAAevqD,WAAW,GAAGzN,UAAUM,IAAI,UACjEpE,KAAK0qD,MAAMn5C,WAAWuqD,GAAevqD,WAAW,GAAGzN,UAAUM,IAAI,cAMzEu0X,EAAet9X,UAAUs0I,YAAc,SAAU1vI,EAAM0S,GACnD,IAII2mX,EACAC,EALAx5X,EAAQC,KAERw5X,GADex5X,KAAKi5X,QAAQp9T,MACf57D,EAAK+d,MAClBo3I,EAASziJ,EAAQ4nV,YAGjBxnO,EAAUpgH,EAAQwtB,uBAAuBC,QACzC+9F,EAASpL,EAAQprF,OAAO,SAAUqtF,GAAO,OAAQA,EAAIlmG,OAAS0qW,EAAW1qW,OAsB7E,GArBAikG,EAAQ77F,IAAI,SAAU8pS,EAAQ/uT,GACtB+uT,EAAOlyS,OAAS7uB,EAAK+d,KAAK8Q,OAC1B/uB,EAAM+7D,cAAiB/7D,EAAM2qD,MAAMn5C,WAAW9U,OAASs2H,EAAQt2H,OAAUwV,KAGjFjS,KAAKm5X,iBAAiBn5X,KAAK87D,eACW,QAAlC09T,EAAW1qW,KAAKlZ,eAChB0jX,EAAe3mX,EAAQ27N,YAAYl3M,KACnCmiW,EAAa5mX,EAAQ27N,YAAYj3M,KACjC+9H,EAAOo3E,iBAAiB8sJ,EAAcC,EAAY5mX,IAEX,QAAlC6mX,EAAW1qW,KAAKlZ,eACrB0jX,EAAe,IAAIl5W,KAAK,IAAIA,KAAKg1I,EAAOkqM,YAAY/3R,cAAcr6D,YAAYmT,UAC9Ek5W,EAAankO,EAAOkqM,WACpBlqM,EAAOo3E,iBAAiB8sJ,EAAcC,EAAY5mX,IAEX,KAAlC6mX,EAAW1qW,KAAKlZ,gBACrB0jX,EAAet5X,KAAKk5X,aAAa/6P,EAAO,GAAG92D,aAAc+tF,EAAOkqM,WAAYnhO,EAAO,GAAGh8H,UAAUke,UAChGk5W,EAAankO,EAAOkqM,WACpBlqM,EAAOo3E,iBAAiB8sJ,EAAcC,EAAY5mX,IAElD+d,GAAW1wB,KAAK84X,WAAa,YAActtX,GAAQob,SAAU,CAC/C8J,GAAW1wB,KAAK84X,WAAa,UACnCt3X,iBAAiB,mBAAmB,GAAGkD,MAAM6pC,QAAU,SASvEoqV,EAAet9X,UAAU69X,aAAe,SAAUxyX,EAAMsY,EAAK7c,GACzD,IAAIpD,EAAS,IAAIqhB,KAAKpB,GACtB,OAAQtY,GACJ,IAAK,UACD3H,EAAOyoE,SAASzoE,EAAO0oE,WAAc,EAAItlE,GACzC,MACJ,IAAK,SACDpD,EAAOyoE,SAASzoE,EAAO0oE,WAAatlE,GACpC,MACJ,IAAK,QACDpD,EAAO2oE,QAAQ3oE,EAAO4oE,UAAwB,EAAXxlE,GACnC,MACJ,IAAK,OACDpD,EAAO2oE,QAAQ3oE,EAAO4oE,UAAYxlE,GAClC,MACJ,IAAK,QACDpD,EAAOknE,SAASlnE,EAAO6oE,WAAazlE,GACpC,MACJ,IAAK,UACDpD,EAAO8oE,WAAW9oE,EAAO+oE,aAAe3lE,GACxC,MACJ,IAAK,UACDpD,EAAOgnE,WAAWhnE,EAAOinE,aAAe7jE,GACxC,MACJ,QACIpD,EAAOuoE,YAAYvoE,EAAOwoE,cAAgBplE,GAGlD,OAAOpD,GAMX45X,EAAet9X,UAAU0kC,cAAgB,WACrC,MAAO,kBAOX44V,EAAet9X,UAAUiX,QAAU,aAK5BqmX,KCrMPc,GAA8B,WAK9B,SAASA,EAAatoW,GAClBnxB,KAAK2S,QAAUwe,EACfnxB,KAAKitD,UAAY97B,EAAMnwB,QAAQsC,GAuKnC,OAjKAm2X,EAAap+X,UAAUmkW,kBAAoB,SAAUjF,GACjDv6V,KAAK05X,iBACL,IAAI9+V,EAAU56B,KAAK25X,kBAAkBp/B,EAAY8E,cAC7Cu6B,EAAe55X,KAAK65X,eAAej/V,GACnClI,EAAO1yB,KAAK2S,QAAQO,UAAYqnV,EAAY6E,UAAY7E,EAAY4E,SACpEy6B,EAAelnW,EAAK1c,QACpB0c,EAAO6nU,EAAY3gC,SAEvB55T,KAAK85X,YAAc95X,KAAKmrI,cAAcz4G,EAAM1yB,KAAKmB,cAAc,gBAAiBo5V,EAAYl7T,OAAQzE,IAMxG6+V,EAAap+X,UAAUw+X,eAAiB,SAAU78X,GAC9C,IACI+xB,EAAO/uB,KAAK2S,QAAQse,QAAQ2hN,UAWhC,OAVI5yO,KAAK2S,QAAQse,QAAQhiB,SACbyrB,GAAev5B,EAAc,OACjCmC,GAAI,iBACJC,OAAQ,wBACR,EAAGvD,KAAK2S,QAAQse,QAAQhiB,SAAUjP,KAAK2S,SAAS/G,wBAAwBoK,MAIpE6Y,GAAY7xB,EAAM,GAAI+xB,GAAM/Y,MAAQ,IAQpDyjX,EAAap+X,UAAUokW,mBAAqB,SAAUlF,GAClDv6V,KAAK05X,iBACL,IAAI9+V,EAAU56B,KAAK25X,kBAAkBp/B,EAAY+E,YAC7Cs6B,EAAe55X,KAAK65X,eAAej/V,GACnClI,EAAO1yB,KAAK2S,QAAQO,UAAYqnV,EAAY4E,SAAW5E,EAAY6E,UACnEw6B,EAAelnW,EAAK1c,SACpB0c,EAAO6nU,EAAY3gC,SACd7sT,EAAK/M,KAAK2S,QAAQoM,OAAOtiB,OAAkB,EAATi2B,EAAK3lB,GAEhD/M,KAAK+5X,aAAe/5X,KAAKmrI,cAAcz4G,EAAM1yB,KAAKmB,cAAc,iBAAkBo5V,EAAYp2H,KAAMvpM,IAMxG6+V,EAAap+X,UAAU8F,cAAgB,SAAUmC,GAC7C,GAAIotB,GAAW1wB,KAAKitD,UAAY3pD,GAC5B,OAAOotB,GAAW1wB,KAAKitD,UAAY3pD,GAGnC,IAAItC,EAAUR,SAASW,cAAc,OAKrC,OAJAH,EAAQsC,GAAKtD,KAAKitD,UAAY3pD,EAC9BtC,EAAQqC,UAAY,eACpBrC,EAAQwC,aAAa,QAAS,qDAC9BktB,GAAW1wB,KAAKitD,UAAY,sBAAsBtrD,YAAYX,GACvDA,GAUfy4X,EAAap+X,UAAU8vI,cAAgB,SAAUp1G,EAAQz1B,EAAQ86N,EAAQxgM,GACrE,IAAIjoB,EAAU3S,KAAK2S,QACfse,EAAUte,EAAQse,QAClBmH,GACAC,QAAQ,EAAOtB,KAAM,gBAAiBjI,KAAM8L,EAC5Cg4M,UAAW3hN,EAAQ2hN,WAEvB5yO,KAAK2S,QAAQ+T,QAAQ,gBAAiB0R,GACtC,IAAI5rB,EAAOmG,EAAQ6d,UAAU5kB,wBAAwBY,KACjDmG,EAAQ3R,QAAQ4K,wBAAwBY,KAC5C,OAAK4rB,EAASC,OAsBH,KArBA,IAAIy5S,IACP54S,UAAYnsB,EAAGquN,EAAQpuN,EAAG2F,EAAQ4nV,YAAYqE,SAC9ChkU,QAASxC,EAAStJ,KAAMmgT,QAAS,EACjCW,cAAc,EACdT,QAAS,EAAGlwS,aAAc,EAAGvF,GAAI,EAAGC,GAAI,EACxC01S,SAAU18T,EAAQoM,OAAOtiB,OAAS,EAClC+1T,WAAYz8R,EAAQqI,KAAMnN,EAAQmN,KAClC/iB,MAAOrb,KAAK2S,QAAQ0I,MAEpBk2Q,YAAcxkR,EAAGP,GACjBy4B,OAAQhU,EAAQgU,OAAQx3B,QAASwjB,EAAQxjB,QACzCwB,SAAUgiB,EAAQhiB,SAClB2jO,UAAWx6M,EAASw6M,UACpBp2O,MACIe,MAASyC,KAAK25X,kBAAkB35X,KAAK2S,QAAQ4V,YAAY,GACzDvJ,IAAOhf,KAAK25X,kBAAkB35X,KAAK2S,QAAQ+kB,UAAU,GACrD16B,MAAS49B,EAAQ,KAEtBt6B,IAUXm5X,EAAap+X,UAAUs+X,kBAAoB,SAAU38X,GACjD,IAGI8xB,EAHAnc,EAAU3S,KAAK2S,QACfse,EAAUte,EAAQse,QAClBnZ,EAAQnF,EAAQ27N,YAAYx2N,MAE5B0kB,EAASvL,EAAQuL,QAAU1kB,EAAMgkB,YACjCg8L,EAAuC,OAA5Bt7L,EAAO7sB,MAAM,WACxB2hB,EAAYxZ,EAAMwZ,UAetB,MAdkB,aAAdA,EACAxC,EAAQnc,EAAQ+9D,KAAK47B,eACjB9vE,OAAQA,GAAU,aAClB91B,KAAM0vB,GAAiBzjB,EAAQu9S,cAC/BjtP,SAAUtwD,EAAQqnX,eAAezqE,YAAYz3S,IAH1C,CAIH,IAAIsI,KAAKpjB,KAGb8a,EAAM0kB,OAAS7pB,EAAQ+9D,KAAKC,iBACxBn0C,OAAQs7L,EAAW,GAAKt7L,EACxBo0C,YAAaj+D,EAAQk+D,uBAEzB/hD,EAAOnc,EAAQmoV,aAAa33Q,YAAYrrE,EAAOggN,EAAUt7L,EAAsB,gBAAdlL,EAA8BjlB,KAAKs9D,IAAI7xD,EAAM6Y,QAAS3zB,GAASA,KAE5H8xB,IAKZ2qW,EAAap+X,UAAUq+X,eAAiB,WACpC,IAAI35X,EAAQC,KAEgB,aADdA,KAAK2S,QAAQse,QACfowU,cACR5kU,GAAUz8B,KAAKqyU,iBACXryU,KAAK+5X,eACL/5X,KAAKqyU,gBAAkBlyU,WAAW,WAC9BJ,EAAM+5X,YAAYjpD,UAClB9wU,EAAMg6X,aAAalpD,WACpB,QAOf4oD,EAAap+X,UAAU0kC,cAAgB,WACnC,MAAO,gBAOX05V,EAAap+X,UAAUiX,QAAU,SAAUud,KAGpC4pW,KCvLP5tS,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAG5D68V,GAAgC,SAAUvtS,GAE1C,SAASutS,IACL,OAAkB,OAAXvtS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBA6rF,GAAUouS,EAAgBvtS,GAI1BN,IACIllF,EAAS,aACV+yX,EAAe5+X,UAAW,kBAAc,GAC3C+wF,IACIllF,EAAS,WACV+yX,EAAe5+X,UAAW,iBAAa,GAC1C+wF,IACIllF,EAAS,YACV+yX,EAAe5+X,UAAW,kBAAc,GAC3C+wF,IACIllF,EAAS,SACV+yX,EAAe5+X,UAAW,YAAQ,GACrC+wF,IACIllF,EAAS,IACV+yX,EAAe5+X,UAAW,eAAW,GACjC4+X,GACTz5T,IAEE05T,GAAkC,SAAUxtS,GAE5C,SAASwtS,IACL,OAAkB,OAAXxtS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAUquS,EAAkBxtS,GAI5BN,IACIllF,EAAS,KACVgzX,EAAiB7+X,UAAW,WAAO,GACtC+wF,IACIllF,EAAS,KACVgzX,EAAiB7+X,UAAW,cAAU,GACzC+wF,IACIllF,EAAS,KACVgzX,EAAiB7+X,UAAW,aAAS,GACxC+wF,IACIllF,EAAS,KACVgzX,EAAiB7+X,UAAW,YAAQ,GAChC6+X,GACT15T,IAEE25T,GAAkC,SAAUztS,GAE5C,SAASytS,IACL,OAAkB,OAAXztS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAUsuS,EAAkBztS,GAI5BN,IACIllF,EAAS,IACVizX,EAAiB9+X,UAAW,aAAS,GACxC+wF,IACIllF,EAAS,IACVizX,EAAiB9+X,UAAW,eAAW,GAC1C+wF,IACIllF,EAAS,gBACVizX,EAAiB9+X,UAAW,aAAS,GACjC8+X,GACT35T,IAME45T,GAAgC,WAOhC,OANA,SAAwBrtX,EAAGC,EAAGgJ,EAAOD,GACjC/V,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAKlBskX,GAAiC,WAGjC,OAFA,gBAKAC,GAA8B,WAG9B,OAFA,gBAKAC,GAA6B,WAG7B,OAFA,gBAKAC,GAA2C,SAAU9tS,GAErD,SAAS8tS,IACL,OAAkB,OAAX9tS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAE/D,OAJA6rF,GAAU2uS,EAA2B9tS,GAI9B8tS,GACTH,IAEEI,GAAwC,SAAU/tS,GAElD,SAAS+tS,IACL,OAAkB,OAAX/tS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAE/D,OAJA6rF,GAAU4uS,EAAwB/tS,GAI3B+tS,GACTD,IAEEE,GAA6B,WAG7B,OAFA,gBAKAC,GAA6B,WAG7B,OAFA,gBAQAxoV,GAAuB,WAGvB,OAFA,gBAKAyoV,GAA8B,WAG9B,OAFA,gBAKAC,GAA+B,WAQ/B,OAPA,SAAuBv3X,EAAI86B,EAAMywM,EAAa7+I,EAAaviF,GACvDzN,KAAKsD,GAAKA,EACVtD,KAAKo+B,KAAOA,EACZp+B,KAAK6uO,YAAcA,EACnB7uO,KAAKgwF,YAAcA,EACnBhwF,KAAKyN,QAAUA,MAKnBqtX,GAAyC,WAGzC,OAFA,gBAKAC,GAA2B,WAK3B,OAJA,WACI/6X,KAAKg7X,iBAAmB,EACxBh7X,KAAKi7X,UAAY,MAKrBC,GAAsC,WAGtC,OAFA,gBAKAC,GAA6B,WAG7B,OAFA,gBAMAx3V,GAAgC,WAKhC,OAJA,SAAwB3tB,EAAOD,GAC3B/V,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAKlBqlX,GAA+B,WAG/B,OAFA,gBvTvMAvvS,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAgIxCz2D,GAA4B,WAU5B,OATA,SAAoBnyB,EAAI86B,EAAMpoB,EAAO6f,EAAOpoB,EAASqmD,EAAWh6B,GAC5D95B,KAAKsD,GAAKA,EACVtD,KAAKyN,QAAUA,EACfzN,KAAKo+B,KAAOA,EACZp+B,KAAKs+B,OAASzI,EACd71B,KAAK,gBAAkBgW,EACvBhW,KAAK,oBAAsB8zD,EAC3B9zD,KAAK85B,EAAIA,MASbkjM,GAA4B,SAAUtwI,GAEtC,SAASswI,EAAW15N,EAAI86B,EAAM6G,EAAQx3B,EAASilB,GAC3C,IAAI3yB,EAAQ2sF,EAAOprF,KAAKtB,KAAMsD,EAAI86B,EAAM6G,EAAOjvB,MAAOivB,EAAOpP,MAAOpoB,IAAYzN,KAKhF,OAJAD,EAAMiN,EAAI0lB,EAAK1lB,EACfjN,EAAMgN,EAAI2lB,EAAK3lB,EACfhN,EAAMgW,OAAS2c,EAAK3c,OACpBhW,EAAMiW,MAAQ0c,EAAK1c,MACZjW,EAEX,OATA8rF,GAAUmxI,EAAYtwI,GASfswI,GACTvnM,IAMEwnM,GAA8B,SAAUvwI,GAExC,SAASuwI,EAAa35N,EAAI86B,EAAM6G,EAAQx3B,EAASmsB,EAAIC,EAAIuD,EAAG02B,GACxD,IAAI/zD,EAAQ2sF,EAAOprF,KAAKtB,KAAMsD,EAAI86B,EAAM6G,EAAOjvB,MAAOivB,EAAOpP,MAAOpoB,IAAYzN,KAKhF,OAJAD,EAAM85B,GAAKA,EACX95B,EAAM65B,GAAKA,EACX75B,EAAMq9B,EAAIA,EACVr9B,EAAM,oBAAsB+zD,EACrB/zD,EAEX,OATA8rF,GAAUoxI,EAAcvwI,GASjBuwI,GACTxnM,IA0BEG,GAA4B,WAQ5B,OAPA,SAAoBtyB,EAAIyJ,EAAGC,EAAG6G,EAAQib,GAClC9uB,KAAKsD,GAAKA,EACVtD,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAK6T,OAASA,EACd7T,KAAK8uB,KAAOA,O2S5MpB,SAAWg7L,GAEPA,EAAMgL,eACF3lM,KAAM,OACNC,WAAY,SACZyG,MAAO,KACPxG,UAAW,SACXC,WAAY,sCAGhBw6L,EAAMuxK,qBACFlsW,KAAM,OACNC,WAAY,SACZyG,MAAO,KACPxG,UAAW,SACXC,WAAY,sCAGhBw6L,EAAMwxK,wBACFnsW,KAAM,OACNC,WAAY,SACZyG,MAAO,KACPxG,UAAW,SACXC,WAAY,sCAGhBw6L,EAAMyxK,eACFpsW,KAAM,OACNC,WAAY,SACZyG,MAAO,KACPxG,UAAW,SACXC,WAAY,sCAGhBw6L,EAAMqL,iBACFhmM,KAAM,OACNC,WAAY,SACZyG,MAAO,KACPxG,UAAW,SACXC,WAAY,sCAvCpB,CAyCGw6L,KAAUA,Qa1Cb,IAAIj+H,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAK5Do+V,GAA6B,SAAU9uS,GAEvC,SAAS8uS,IACL,OAAkB,OAAX9uS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBA6rF,GAAU2vS,EAAa9uS,GAIvBN,IACIllF,GAAS,IACVs0X,EAAYngY,UAAW,eAAW,GACrC+wF,IACIllF,EAAS,KACVs0X,EAAYngY,UAAW,YAAQ,GAClC+wF,IACIllF,EAAS,KACVs0X,EAAYngY,UAAW,mBAAe,GACzC+wF,IACIllF,EAAS,WACVs0X,EAAYngY,UAAW,qBAAiB,GAC3C+wF,IACIrkF,EAAQ+hN,GAAMqL,gBAAiB8kK,KAChCuB,EAAYngY,UAAW,iBAAa,GAChCmgY,GACTh7T,IAEEi7T,GAAgC,SAAU/uS,GAE1C,SAAS+uS,IACL,OAAkB,OAAX/uS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAU4vS,EAAgB/uS,GAI1BN,IACIllF,EAAS,IACVu0X,EAAepgY,UAAW,SAAK,GAClC+wF,IACIllF,EAAS,IACVu0X,EAAepgY,UAAW,SAAK,GAC3BogY,GACTj7T,IAEEk7T,GAAuC,SAAUhvS,GAEjD,SAASgvS,IACL,OAAkB,OAAXhvS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAU6vS,EAAuBhvS,GAIjCN,IACIllF,EAAS,IACVw0X,EAAsBrgY,UAAW,aAAS,GAC7C+wF,IACIllF,EAAS,OACVw0X,EAAsBrgY,UAAW,aAAS,GACtCqgY,GACTl7T,IAEEm7T,GAAiC,SAAUjvS,GAE3C,SAASivS,IACL,OAAkB,OAAXjvS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAU8vS,EAAiBjvS,GAI3BN,IACIllF,EAAS,KACVy0X,EAAgBtgY,UAAW,aAAS,GACvC+wF,IACIllF,EAAS,KACVy0X,EAAgBtgY,UAAW,cAAU,GACxC+wF,IACIrkF,KAAY2zX,KACbC,EAAgBtgY,UAAW,cAAU,GACjCsgY,GACTn7T,IAEEo7T,GAA8B,SAAUlvS,GAExC,SAASkvS,IACL,OAAkB,OAAXlvS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAU+vS,EAAclvS,GAIxBN,IACIllF,EAAS,IACV00X,EAAavgY,UAAW,aAAS,GACpC+wF,IACIllF,EAAS,OACV00X,EAAavgY,UAAW,aAAS,GAC7BugY,GACTp7T,IAEEq7T,GAA0C,SAAUnvS,GAEpD,SAASmvS,IACL,OAAkB,OAAXnvS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAqD/D,OAvDA6rF,GAAUgwS,EAA0BnvS,GAIpCN,IACIllF,GAAS,IACV20X,EAAyBxgY,UAAW,eAAW,GAClD+wF,IACIllF,EAAS,WACV20X,EAAyBxgY,UAAW,gBAAY,GACnD+wF,IACIllF,EAAS,WACV20X,EAAyBxgY,UAAW,iBAAa,GACpD+wF,IACIllF,EAAS,OACV20X,EAAyBxgY,UAAW,aAAS,GAChD+wF,IACIllF,EAAS,OACV20X,EAAyBxgY,UAAW,cAAU,GACjD+wF,IACIllF,EAAS,WACV20X,EAAyBxgY,UAAW,aAAS,GAChD+wF,IACIllF,EAAS,OACV20X,EAAyBxgY,UAAW,gBAAY,GACnD+wF,IACIllF,EAAS,OACV20X,EAAyBxgY,UAAW,mBAAe,GACtD+wF,IACIllF,EAAS,IACV20X,EAAyBxgY,UAAW,mBAAe,GACtD+wF,IACIllF,EAAS,IACV20X,EAAyBxgY,UAAW,oBAAgB,GACvD+wF,IACIllF,EAAS,KACV20X,EAAyBxgY,UAAW,mBAAe,GACtD+wF,IACIllF,GAAS,IACV20X,EAAyBxgY,UAAW,wBAAoB,GAC3D+wF,IACIrkF,KAAYyzX,KACbK,EAAyBxgY,UAAW,aAAS,GAChD+wF,IACIrkF,KAAY0zX,KACbI,EAAyBxgY,UAAW,gBAAY,GACnD+wF,IACIrkF,KAAY4zX,KACbE,EAAyBxgY,UAAW,iBAAa,GACpD+wF,IACIrkF,KAAY6zX,KACbC,EAAyBxgY,UAAW,cAAU,GACjD+wF,IACIrkF,EAAQ+hN,GAAMqL,gBAAiB8kK,KAChC4B,EAAyBxgY,UAAW,iBAAa,GAC7CwgY,GACTr7T,IC9JEqrB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAQ5D0+V,GAA0C,SAAUpvS,GAEpD,SAASovS,IACL,OAAkB,OAAXpvS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAUiwS,EAA0BpvS,GAIpCN,IACIllF,EAAS,IACV40X,EAAyBzgY,UAAW,aAAS,GAChD+wF,IACIllF,EAAS,KACV40X,EAAyBzgY,UAAW,iBAAa,GACpD+wF,IACIllF,GAAS,IACV40X,EAAyBzgY,UAAW,eAAW,GAClD+wF,IACIllF,EAAS,IACV40X,EAAyBzgY,UAAW,eAAW,GAC3CygY,GACTt7T,IAKEu7T,GAA0C,SAAUrvS,GAEpD,SAASqvS,IACL,OAAkB,OAAXrvS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAUkwS,EAA0BrvS,GAIpCN,IACIllF,EAAS,IACV60X,EAAyB1gY,UAAW,aAAS,GAChD+wF,IACIllF,EAAS,KACV60X,EAAyB1gY,UAAW,iBAAa,GACpD+wF,IACIllF,GAAS,IACV60X,EAAyB1gY,UAAW,eAAW,GAClD+wF,IACIllF,EAAS,IACV60X,EAAyB1gY,UAAW,aAAS,GACzC0gY,GACTv7T,IAKEw7T,GAAoC,SAAUtvS,GAE9C,SAASsvS,IACL,OAAkB,OAAXtvS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAUmwS,EAAoBtvS,GAI9BN,IACIllF,GAAS,IACV80X,EAAmB3gY,UAAW,eAAW,GAC5C+wF,IACIllF,EAAS,IACV80X,EAAmB3gY,UAAW,aAAS,GAC1C+wF,IACIllF,EAAS,KACV80X,EAAmB3gY,UAAW,iBAAa,GACvC2gY,GACTx7T,IAEEy7T,GAAgC,SAAUvvS,GAE1C,SAASuvS,IACL,OAAkB,OAAXvvS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBA6rF,GAAUowS,EAAgBvvS,GAI1BN,IACIllF,GAAS,IACV+0X,EAAe5gY,UAAW,eAAW,GACxC+wF,IACIllF,EAAS,YACV+0X,EAAe5gY,UAAW,qBAAiB,GAC9C+wF,IACIllF,EAAS,SACV+0X,EAAe5gY,UAAW,4BAAwB,GACrD+wF,IACIrkF,KAAY+zX,KACbG,EAAe5gY,UAAW,sBAAkB,GAC/C+wF,IACIrkF,KAAYg0X,KACbE,EAAe5gY,UAAW,sBAAkB,GAC/C+wF,IACIrkF,KAAYi0X,KACbC,EAAe5gY,UAAW,gBAAY,GACzC+wF,IACIrkF,EAAQ+hN,GAAMgL,cAAemlK,KAC9BgC,EAAe5gY,UAAW,kBAAc,GACpC4gY,GACTz7T,IChHEqrB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAK5D8+V,GAA0B,SAAUxvS,GAEpC,SAASwvS,IACL,OAAkB,OAAXxvS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBA6rF,GAAUqwS,EAAUxvS,GAIpBN,IACIllF,GAAS,IACVg1X,EAAS7gY,UAAW,eAAW,GAClC+wF,IACIllF,EAAS,KACVg1X,EAAS7gY,UAAW,YAAQ,GAC/B+wF,IACIllF,EAAS,KACVg1X,EAAS7gY,UAAW,mBAAe,GACtC+wF,IACIllF,EAAS,QACVg1X,EAAS7gY,UAAW,qBAAiB,GACxC+wF,IACIllF,GAAS,IACVg1X,EAAS7gY,UAAW,kBAAc,GACrC+wF,IACIllF,EAAS,OACVg1X,EAAS7gY,UAAW,oBAAgB,GACvC+wF,IACIrkF,EAAQ+hN,GAAMwxK,uBAAwBrB,KACvCiC,EAAS7gY,UAAW,iBAAa,GAC7B6gY,GACT17T,IAEE27T,GAAuB,SAAUzvS,GAEjC,SAASyvS,IACL,OAAkB,OAAXzvS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA6B/D,OA/BA6rF,GAAUswS,EAAOzvS,GAIjBN,IACIllF,GAAS,IACVi1X,EAAM9gY,UAAW,eAAW,GAC/B+wF,IACIllF,EAAS,KACVi1X,EAAM9gY,UAAW,YAAQ,GAC5B+wF,IACIllF,EAAS,KACVi1X,EAAM9gY,UAAW,mBAAe,GACnC+wF,IACIllF,EAAS,WACVi1X,EAAM9gY,UAAW,qBAAiB,GACrC+wF,IACIllF,GAAS,IACVi1X,EAAM9gY,UAAW,kBAAc,GAClC+wF,IACIllF,EAAS,OACVi1X,EAAM9gY,UAAW,oBAAgB,GACpC+wF,IACIrkF,KAAYm0X,KACbC,EAAM9gY,UAAW,gBAAY,GAChC+wF,IACIrkF,EAAQ+hN,GAAMuxK,oBAAqBpB,KACpCkC,EAAM9gY,UAAW,YAAQ,GAC5B+wF,IACIrkF,EAAQ+hN,GAAMuxK,oBAAqBpB,KACpCkC,EAAM9gY,UAAW,iBAAa,GAC1B8gY,GACT37T,ICjFEqrB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAK5Dg/V,GAAqC,SAAU1vS,GAE/C,SAAS0vS,IACL,OAAkB,OAAX1vS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAUuwS,EAAqB1vS,GAI/BN,IACIllF,EAAS,IACVk1X,EAAoB/gY,UAAW,aAAS,GAC3C+wF,IACIllF,EAAS,OACVk1X,EAAoB/gY,UAAW,aAAS,GACpC+gY,GACT57T,IAEE67T,GAA+B,SAAU3vS,GAEzC,SAAS2vS,IACL,OAAkB,OAAX3vS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBA6rF,GAAUwwS,EAAe3vS,GAIzBN,IACIllF,GAAS,IACVm1X,EAAchhY,UAAW,eAAW,GACvC+wF,IACIllF,EAAS,OACVm1X,EAAchhY,UAAW,YAAQ,GACpC+wF,IACIllF,EAAS,MACVm1X,EAAchhY,UAAW,eAAW,GACvC+wF,IACIllF,EAAS,KACVm1X,EAAchhY,UAAW,gBAAY,GACxC+wF,IACIrkF,KAAYq0X,KACbC,EAAchhY,UAAW,cAAU,GAC/BghY,GACT77T,IAEE87T,GAAoC,SAAU5vS,GAE9C,SAAS4vS,IACL,OAAkB,OAAX5vS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAUywS,EAAoB5vS,GAI9BN,IACIllF,EAAS,IACVo1X,EAAmBjhY,UAAW,aAAS,GAC1C+wF,IACIllF,EAAS,UACVo1X,EAAmBjhY,UAAW,aAAS,GACnCihY,GACT97T,IAEE+7T,GAA6C,SAAU7vS,GAEvD,SAAS6vS,IACL,OAAkB,OAAX7vS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAU0wS,EAA6B7vS,GAIvCN,IACIllF,EAAS,KACVq1X,EAA4BlhY,UAAW,aAAS,GACnD+wF,IACIllF,EAAS,UACVq1X,EAA4BlhY,UAAW,aAAS,GAC5CkhY,GACT/7T,IAEEg8T,GAAoD,SAAU9vS,GAE9D,SAAS8vS,IACL,OAAkB,OAAX9vS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAU2wS,EAAoC9vS,GAI9CN,IACIllF,EAAS,IACVs1X,EAAmCnhY,UAAW,aAAS,GAC1D+wF,IACIllF,EAAS,OACVs1X,EAAmCnhY,UAAW,aAAS,GACnDmhY,GACTh8T,IAEEi8T,GAAuC,SAAU/vS,GAEjD,SAAS+vS,IACL,OAAkB,OAAX/vS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBA6rF,GAAU4wS,EAAuB/vS,GAIjCN,IACIllF,GAAS,IACVu1X,EAAsBphY,UAAW,eAAW,GAC/C+wF,IACIllF,EAAS,KACVu1X,EAAsBphY,UAAW,gBAAY,GAChD+wF,IACIllF,EAAS,OACVu1X,EAAsBphY,UAAW,YAAQ,GAC5C+wF,IACIllF,EAAS,IACVu1X,EAAsBphY,UAAW,eAAW,GAC/C+wF,IACIrkF,KAAYw0X,KACbE,EAAsBphY,UAAW,cAAU,GAC9C+wF,IACIrkF,KAAYy0X,KACbC,EAAsBphY,UAAW,qBAAiB,GACrD+wF,IACIrkF,EAAQ+hN,GAAMyxK,cAAetB,KAC9BwC,EAAsBphY,UAAW,iBAAa,GAC1CohY,GACTj8T,IAEEk8T,GAA8B,SAAUhwS,GAExC,SAASgwS,IACL,OAAkB,OAAXhwS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA6B/D,OA/BA6rF,GAAU6wS,EAAchwS,GAIxBN,IACIllF,GAAS,IACVw1X,EAAarhY,UAAW,eAAW,GACtC+wF,IACIllF,EAAS,WACVw1X,EAAarhY,UAAW,aAAS,GACpC+wF,IACIllF,EAAS,IACVw1X,EAAarhY,UAAW,aAAS,GACpC+wF,IACIllF,EAAS,IACVw1X,EAAarhY,UAAW,cAAU,GACrC+wF,IACIllF,EAAS,KACVw1X,EAAarhY,UAAW,gBAAY,GACvC+wF,IACIllF,EAAS,KACVw1X,EAAarhY,UAAW,YAAQ,GACnC+wF,IACIllF,EAAS,IACVw1X,EAAarhY,UAAW,eAAW,GACtC+wF,IACIrkF,KAAYu0X,KACbI,EAAarhY,UAAW,cAAU,GACrC+wF,IACIrkF,KAAY00X,KACbC,EAAarhY,UAAW,iBAAa,GACjCqhY,GACTl8T,IAEEm8T,GAAkC,SAAUjwS,GAE5C,SAASiwS,IACL,OAAkB,OAAXjwS,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA4C/D,OA9CA6rF,GAAU8wS,EAAkBjwS,GAI5BN,IACIllF,EAAS,YACVy1X,EAAiBthY,UAAW,kBAAc,GAC7C+wF,IACIllF,OACDy1X,EAAiBthY,UAAW,cAAU,GACzC+wF,IACIllF,EAAS,KACVy1X,EAAiBthY,UAAW,kBAAc,GAC7C+wF,IACIllF,EAAS,KACVy1X,EAAiBthY,UAAW,iBAAa,GAC5C+wF,IACIllF,EAAS,OACVy1X,EAAiBthY,UAAW,kBAAc,GAC7C+wF,IACIllF,EAAS,KACVy1X,EAAiBthY,UAAW,YAAQ,GACvC+wF,IACIllF,EAAS,OACVy1X,EAAiBthY,UAAW,YAAQ,GACvC+wF,IACIllF,GAAS,IACVy1X,EAAiBthY,UAAW,uBAAmB,GAClD+wF,IACIllF,EAAS,WACVy1X,EAAiBthY,UAAW,yBAAqB,GACpD+wF,IACIllF,GAAS,IACVy1X,EAAiBthY,UAAW,yBAAqB,GACpD+wF,IACIllF,EAAS,IACVy1X,EAAiBthY,UAAW,aAAS,GACxC+wF,IACIllF,EAAS,IACVy1X,EAAiBthY,UAAW,eAAW,GAC1C+wF,IACIrkF,KAAY20X,KACbC,EAAiBthY,UAAW,cAAU,GACzC+wF,IACIrkF,KAAYs0X,KACbM,EAAiBthY,UAAW,eAAW,GACnCshY,GACTn8T,IChNEutQ,GAA4B,WAC5B,SAASA,KAuDT,OArDAA,EAAW1yU,UAAUuhY,oBAAsB,SAAUl5V,EAAYhD,EAAO3K,GACpE,IAAIhpB,EACAC,EACAgJ,EACAD,EACA8mX,EACA5/V,EAASyG,EAAWzG,OACpBgI,EAASvB,EAAWuB,OACpB63V,EAAa98X,KAAK+8X,eAAer5V,EAAY3N,GASjD,OARAhpB,EAAI+vX,EAA4B,gBAAI7/V,EAAOzwB,KAAOy4B,EAAOjvB,MACzD6mX,EAAaC,EAA6B,iBAAI7/V,EAAOzwB,KAAOywB,EAAOxwB,MAAS,EAAIw4B,EAAOjvB,MACvFA,EAAQ0tB,EAAW1O,cAAqB,OAAKjoB,EAAI8vX,GACjD7vX,EAAIiwB,EAAY,IAAK,EAAIyG,EAAWs5V,eAAkBF,EAA6B,iBAC/EA,EAAgC,oBAAIA,EAA4B,gBAAI73V,EAAOjvB,MAC/ED,EAAS2tB,EAAW1O,cAAsB,QAAK8nW,EAA6B,iBACvE,EAAIp5V,EAAWs5V,eAAkBF,EAAgC,oBAAI7/V,EAAY,IAClF6/V,EAA4B,gBAAIA,EAA+B,qBAC1D/vX,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOA,EAAOD,OAAQA,IAE/Cg4T,EAAW1yU,UAAU0hY,eAAiB,SAAUr5V,EAAY3N,GACxD,IAeIsI,EAfAqC,EAAQgD,EAAWhD,MACnBsvM,EAAStsM,EAAWusM,eACpB/7N,EAAW87N,EAAO97N,SAAS0B,cAC3BqnX,EAAiB,EACjBC,EAAsB,EAEtBnuW,EAAO2U,EAAW3U,KAClBouW,EAAmB,EAEnBC,EAAeptJ,EAAO/qM,OAAOjvB,MAC7BqnX,EAAkB,EAClBC,EAAmB,EACnBC,EAAkB,EAClBC,EAAqB,EACrBC,EAAW,EAaf,OAXIztJ,EAAgB,UAChB3xM,EAAStI,EAAO/f,QAA4B0tB,EAAWs5V,eAAkB,EAAII,EAC7EC,EAA+B,SAAbnpX,EAAsBmqB,EAAQ,EAChDi/V,EAAgC,UAAbppX,EAAuBmqB,EAAQ,EAClDo/V,EAAWztJ,EAAc,MAAEl5M,QAAUjI,GAAYmhN,EAAc,MAAElhN,KAAMC,GAAc,OAAI,EACzFwuW,EAA+B,QAAbrpX,EAAqBwvB,EAAWs5V,eAAiBjnW,EAAOhgB,OAAS0nX,EAAW,EAC9FD,EAAkC,WAAbtpX,EAAwBwvB,EAAWs5V,eAAiBjnW,EAAOhgB,OAAS0nX,EAAW,GAExGR,EAAiBpuW,GAAY6R,EAAMg9V,SAAS5uW,KAAMC,GAAc,OAC7B,KAAf2R,EAAM5R,MAAgB4R,EAAe,QAAzDy8V,EApBkB,EAqBlBD,EAAkD,KAA3Bx8V,EAAgB,SAAE5R,MAAgB4R,EAAgB,SAAE5J,UAAW,GAElFumW,gBAAiBA,EAAiBC,iBAAkBA,EACpDC,gBAAiBA,EAAiBC,mBAAoBA,EACtDL,iBAAkBA,EAAkBD,oBAAqBA,IAG1DnvD,KCrDP4vD,GAA4B,WAC5B,SAASA,IACL39X,KAAK49X,eAAiB,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,IAAM,IAAM,IAAM,GAC7E,EAAG,GAAK,GAAK,GAAK,GAAK,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IACvD59X,KAAK69X,0BACL79X,KAAK89X,8BACL99X,KAAK+9X,oBACL/9X,KAAK60B,UAAY,IAAIkmW,GA+gCzB,OA7gCA4C,EAAWtiY,UAAU2iY,WAAa,SAAUt6V,EAAY3N,GACpD/1B,KAAKi+X,mBAAmBv6V,EAAY3N,GACpC/1B,KAAKk+X,sBAAsBx6V,EAAY3N,GACvC/1B,KAAKm+X,oBAAoBz6V,GACzB1jC,KAAKo+X,oBAAoB16V,GACzB1jC,KAAKq+X,sBAAsB36V,GAC3B1jC,KAAKs+X,kBAAkB56V,GACnBA,EAAW66V,eAAeznW,SAC1B92B,KAAKw+X,YAAY96V,GAEjBA,EAAW+6V,WAAW3nW,SACtB92B,KAAK0+X,YAAYh7V,GAEjBA,EAAW66V,eAAeznW,SAC1B92B,KAAK2+X,gBAAgBj7V,GAErBA,EAAW+6V,WAAW3nW,SACtB92B,KAAK4+X,gBAAgBl7V,IAG7Bi6V,EAAWtiY,UAAUmjY,YAAc,SAAU96V,GACzC,IAAI69L,EAAiB79L,EAAW66V,eAAeh9J,eAC3C+B,EAAiB5/L,EAAW66V,eAAej7J,eAC3Cv2M,EAAW2W,EAAW66V,eAAexxW,SACrCw0M,EAAezqM,SACf92B,KAAK6+X,sBAAsBn7V,GAE3B4/L,EAAexsM,SACf92B,KAAK8+X,sBAAsBp7V,GAE3B3W,EAAS+J,SACT92B,KAAK++X,gBAAgBr7V,IAG7Bi6V,EAAWtiY,UAAUqjY,YAAc,SAAUh7V,GACzC,IAAI69L,EAAiB79L,EAAW+6V,WAAWl9J,eACvC+B,EAAiB5/L,EAAW+6V,WAAWn7J,eACvCv2M,EAAW2W,EAAW+6V,WAAW1xW,SACjCw0M,EAAezqM,SACf92B,KAAKg/X,sBAAsBt7V,GAE3B4/L,EAAexsM,SACf92B,KAAKi/X,sBAAsBv7V,GAE3B3W,EAAS+J,SACT92B,KAAKk/X,gBAAgBx7V,IAG7Bi6V,EAAWtiY,UAAUgjY,sBAAwB,SAAU36V,GAC9BA,EAAW66V,eAAeh9J,eAA/C,IACI+B,EAAiB5/L,EAAW66V,eAAej7J,eAC/CtjO,KAAKm/X,uBAAuBz7V,GACxB4/L,EAAexsM,SACf92B,KAAKo/X,uBAAuB17V,IAGpCi6V,EAAWtiY,UAAUijY,kBAAoB,SAAU56V,GAC1BA,EAAW+6V,WAAWl9J,eAA3C,IACI+B,EAAiB5/L,EAAW+6V,WAAWn7J,eAC3CtjO,KAAKq/X,uBAAuB37V,GACxB4/L,EAAexsM,SACf92B,KAAKs/X,uBAAuB57V,IAGpCi6V,EAAWtiY,UAAU4iY,mBAAqB,SAAUv6V,EAAY3N,GAC5D,IAAIwpW,EACAC,EAGAzyX,EACAC,EAHAgJ,EAAQ0tB,EAAW1O,cAAchf,MACjCD,EAAS2tB,EAAW1O,cAAcjf,OAGtCC,EAAQ+f,EAAO/f,MACfD,EAASggB,EAAOhgB,OAChBwpX,EAAiBlzX,KAAK8T,IAAInK,EAAOD,GACjCypX,EAAkBnzX,KAAK8T,IAAInK,EAAOD,GAClChJ,EAAIgpB,EAAOhpB,GAAKgpB,EAAO/f,MAAQ,EAAIupX,EAAiB,GACpDvyX,EAAI+oB,EAAO/oB,IAAM+I,EAASypX,GAAmB,EAAI,GAAKzpX,EAASypX,GAAmB,EAAI,GACtF97V,EAAWkgM,WAAc72N,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOupX,EAAgBxpX,OAAQypX,IAExE7B,EAAWtiY,UAAU6iY,sBAAwB,SAAUx6V,EAAY3N,GAC/D,IACI0pW,EAAgB,EAChBzpX,EAAQ0tB,EAAWkgM,UAAU5tN,MAC7BpJ,EAAS82B,EAAW92B,OACxB6yX,EAAgBz/X,KAAK0/X,mBAAmBh8V,GACxC,IAAIi8V,EAAuD,YAAxCj8V,EAAW+6V,WAAWp9Q,cAAgCo+Q,EAL3D,GAAA,GAOVG,GADW5pX,EAAsB,EAAd2pX,EAAkB,EAAI3pX,EAAsB,EAAd2pX,EAAkB,GACzC,EAC1BE,EAAoBjzX,EAAS,EAAI,EAAKA,EAAS,GAAM,GAAMA,EAC/D5M,KAAK8/X,WAAaF,EAAeC,EACjC7/X,KAAK+/X,YAAcr8V,EAAWkgM,UAAU72N,EAAI4yX,EAAeC,GAAgB,EAAIC,GAC/E7/X,KAAKggY,WAAat8V,EAAWkgM,UAAU52N,EAAI2yX,EAAeC,GAAgB,EAAIC,GAC9E7/X,KAAKigY,cAAgBjgY,KAAK+/X,YAAc//X,KAAK8/X,WAC7C9/X,KAAKkgY,cAAgBnqW,EAAO/oB,EAAI+oB,EAAOhgB,OAAS,GAEpD4nX,EAAWtiY,UAAUqkY,mBAAqB,SAAUh8V,GAKhD,IAAK,IADD1G,EAHA0iW,EAAqB,EACrB3wW,EAAO2U,EAAW66V,eAAelpW,WAG5Bl5B,EAAI,EAAGA,EAAI6D,KAAK49X,aAAanhY,OAAQN,IAGtCujY,GADJ1iW,EAAWnO,GADH7uB,KAAK49X,aAAazhY,GAAG+Q,WACC6hB,IACI/Y,QAC9B0pX,EAAqB1iW,EAAShnB,OAGtC,OAAO0pX,GAEX/B,EAAWtiY,UAAU8kY,oBAAsB,WAMvC,IAAK,IAJDC,EAAY,EACZ38W,EAAI,EACJ+8M,KACA1zN,EAA6B,EAAlB9M,KAAK8/X,WACX3jY,EAAI,EAAGA,EAAI,EAAGA,GAAQ,GAAK,CAEhC,IACIkkY,GAAa,EACbC,GAAa,EACb1zX,EAAWE,GAHH,IADZ3Q,EAAIkQ,KAAK4xB,MAAU,GAAJ9hC,GAAU,IACJ,IAGc,EAAK,EACtB,IAAdikY,GAA2B,IAANjkY,GAMrBA,EAAI,IACJkkY,EAAargY,KAAK68B,UAAU,EAAG/vB,EAAUF,EAlBnB,KAoBtBzQ,EAAI,IACJmkY,EAAatgY,KAAK68B,UAAU,EAAG/vB,EAAUF,EArBnB,KAuBtByzX,GAAcC,GAGdF,EAAYxzX,GA1BU,KA2BtB4zN,EAAO/8M,GAAKtnB,EACZsnB,IACA28W,EAAYxzX,KAjBZwzX,EAAYxzX,EACZ4zN,EAAO/8M,GAAKtnB,EACZsnB,KAmBR,IAAK,IADD88W,GAAgB,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IAC/Bl6W,EAAI,EAAGA,EAAIk6W,EAAa9jY,OAAQ4pB,IACrCm6M,EAAO/8M,GAAK88W,EAAal6W,GACzB5C,IAEJ,OAAO+8M,GAEXm9J,EAAWtiY,UAAUwhC,UAAY,SAAU9vB,EAAG+sB,EAAGsmW,EAAWI,GACxD,IAAIC,EACA7zX,EAGJ,OAFA6zX,EAAQ,GAAK1zX,EAAI,GACjBH,EAAWktB,EAAI2mW,EAAS,EAAK,EACtBL,EAAYxzX,EAAS4zX,GAEhC7C,EAAWtiY,UAAU8iY,oBAAsB,SAAUz6V,GAWjD,IAAK,IATD32B,EAEAH,EACAgtB,EACA9sB,EAA6B,EAAlB9M,KAAK8/X,WAChBY,EAAuB1gY,KAAKmgY,sBAC5BtmW,EAAK75B,KAAKkgY,cACVS,EAAe3gY,KAAK+/X,YACpB9gC,EAAQj/V,KAAK+/X,YACR5jY,EAAI,EAAGA,EAAIukY,EAAqBjkY,OAAQN,IAG7CyQ,EAAUE,GADF,IADRC,EAAI2zX,EAAqBvkY,IACR,IACa,EACA,cAA1BunC,EAAWk9V,aACX3hC,EAAQ0hC,EAAe7zX,EAAqB,EAATF,GAEvCgtB,EAAKqlU,EAAQryV,EACb5M,KAAK89X,2BAA2Bt5X,MAC5B4c,QAASwY,EAAIvY,QAASwY,EAAIjtB,OAAQA,EAAQ5P,MAAO+P,EAAGy3C,OAAQ,QAIxEm5U,EAAWtiY,UAAU+iY,oBAAsB,SAAU16V,GACjD,IAAIm9V,EACAp6V,EAEAz5B,EADAF,EAA6B,EAAlB9M,KAAK8/X,WAEhB3sW,EAAQ,IAAIgf,GACc,cAA1BzO,EAAWk9V,YACXztW,EAAMpmB,EAAI/M,KAAK+/X,YAAcjzX,EAC7BqmB,EAAMnmB,EAAIhN,KAAKggY,WAAahgY,KAAK8/X,aAGjC3sW,EAAMpmB,EAAI/M,KAAK+/X,YACf5sW,EAAMnmB,EAAIhN,KAAKggY,WAAahgY,KAAK8/X,YAErC,IAAK,IAAI3jY,EAAI,EAAGA,EAAI6D,KAAK49X,aAAanhY,OAAQN,IAC1C6Q,EAAIhN,KAAK49X,aAAazhY,GACtBsqC,EAAYp6B,KAAKE,IAAM,EAAIS,EAAKF,EAAY,GAExC+zX,EAD0B,cAA1Bn9V,EAAWk9V,WACH5zX,EAAI,EAAImmB,EAAMnmB,EAAIy5B,EAAYtT,EAAMnmB,EAAIy5B,EAGxCz5B,EAAI,EAAImmB,EAAMnmB,EAAIy5B,EAAYtT,EAAMnmB,EAAIy5B,EAEpDzmC,KAAK69X,uBAAuBr5X,MACxB4c,QAAS+R,EAAMpmB,EAAGsU,QAASw/W,EAAOj0X,OAAQ65B,EAAWzpC,MAAOgQ,KAIxE2wX,EAAWtiY,UAAU8jY,uBAAyB,SAAUz7V,GACpD,IACI8Z,EACA9F,EACAopV,EACAC,EACA5xW,EALA6xW,KAMJhhY,KAAKihY,uBACL,IAAK,IAAI9kY,EAAI,EAAGA,EAAI6D,KAAK89X,2BAA2BrhY,OAAQN,IAAK,CAC7D,IAAI+kY,EAAc,IAAI1G,GACtB0G,EAAclhY,KAAK89X,2BAA2B3hY,GAC9C6kY,EAAYhhY,KAAKmhY,iCAAiCD,EAAYlkY,OAChC,cAA1B0mC,EAAWk9V,YACXE,EAAeE,EAAU,GACzBD,EAAeC,EAAU,KAGzBF,EAAeE,EAAU,GACzBD,EAAeC,EAAU,IAE7B7xW,GAASnZ,MAAOkrX,EAAYt0X,OAAQmJ,OAAQmrX,EAAYt0X,QAC9B,IAAtBs0X,EAAYlkY,OAAuC,KAAtBkkY,EAAYlkY,OACzCwgD,EAAax9C,KAAKohY,yBAAyBN,EAAa,GAAG1/W,QAAS0/W,EAAa,GAAGz/W,QAASy/W,EAAa,GAAGl0X,OAAQs0X,EAAY9/W,QAAS8/W,EAAY7/W,QAAS6/W,EAAYt0X,OAAQ82B,EAAWk9V,YAC9LlpV,EAAW13C,KAAKohY,yBAAyBL,EAAa,GAAG3/W,QAAS2/W,EAAa,GAAG1/W,QAAS0/W,EAAa,GAAGn0X,OAAQs0X,EAAY9/W,QAAS8/W,EAAY7/W,QAAS6/W,EAAYt0X,OAAQ82B,EAAWk9V,YAC5L5gY,KAAKihY,oBAAoBz8X,MACrBg5C,WAAYA,EACZ9F,SAAUA,EACV2pV,cAAe,EAAIh1X,KAAKkR,GACxB+jX,eAA2C,cAA1B59V,EAAWk9V,WACxB5gY,KAAK60B,UAA4B,iBAAI70B,KAAK60B,UAAqB,UACnE0sW,YAAY,EACZpyW,KAAMA,MAIVquB,GAAezwC,EAAGm0X,EAAY9/W,QAAU8/W,EAAYt0X,OAAQI,EAAGk0X,EAAY7/W,SAC3Eq2B,GAAa3qC,EAAGm0X,EAAY9/W,QAAU8/W,EAAYt0X,OAAQI,EAAGk0X,EAAY7/W,QAAU,KACnFrhB,KAAKihY,oBAAoBz8X,MACrBg5C,WAAYA,EACZ9F,SAAUA,EACV2pV,cAAe,EAAIh1X,KAAKkR,GACxB+jX,eAAgBthY,KAAK60B,UAAqB,UAC1C0sW,YAAY,EACZpyW,KAAMA,OAKtBwuW,EAAWtiY,UAAUgkY,uBAAyB,SAAU37V,GACpD,IAAI89V,EACAC,EACAz0X,EAEA00X,EACAC,EAEAC,EACApkV,EACA9F,EACAvoB,EACAmyW,EARAN,KASJhhY,KAAK6hY,uBACL7hY,KAAK+9X,oBACLyD,EAAUx9V,KACV,IAAK,IAAI7nC,EAAI,EAAGA,EAAI6D,KAAK69X,uBAAuBphY,OAAQN,KACpDslY,EAAczhY,KAAK69X,uBAAuB1hY,IAC1ByQ,QAAU40X,IAG1Bx0X,EAAIy0X,EAAYzkY,MAEhB0kY,GADAV,EAAYhhY,KAAK8hY,gCAAgCL,EAAap1X,KAAKE,IAAIS,GAAI02B,IAC3C,GAChCi+V,EAAsBX,EAAU,GAEhCY,EADwB5hY,KAAK+hY,oBAAoB/hY,KAAKigY,cAAejgY,KAAKkgY,cAAeyB,EAAoB50X,EAAG40X,EAAoB30X,IACpF,IAAMX,KAAKkR,IACjD,IAANvQ,GACAwwC,GAAezwC,EAAG20X,EAAoB30X,EAAGC,EAAG00X,EAAoB10X,GAChE0qC,GAAa3qC,EAAG40X,EAAoB50X,EAAGC,EAAG20X,EAAoB30X,GAC9DmiB,GAASnZ,MAAOyrX,EAAY70X,OAAQmJ,OAAQ0rX,EAAY70X,QACxD00X,EAAiBt0X,EAAI,EAAIhN,KAAK60B,UAAqB,UAAI70B,KAAK60B,UAA4B,iBACxF70B,KAAK6hY,oBAAoBr9X,MACrBg5C,WAAYA,EACZ9F,SAAUA,EACVvoB,KAAMA,EACNkyW,cAAe,EAAIh1X,KAAKkR,GACxBgkX,YAAY,EACZD,eAAgBA,IAEpBthY,KAAK+9X,iBAAiBv5X,MAClB4c,QAASugX,EAAoB50X,EAC7BsU,QAASsgX,EAAoB30X,EAC7B2U,MAAOigX,EACP5kY,MAAOgQ,EACPJ,OAAQ5M,KAAK8/X,WACbt7U,OAAQ,SAIZhH,GAAezwC,EAAG/M,KAAK+/X,YAAa/yX,EAAGhN,KAAKkgY,eAC5CxoV,GAAa3qC,EAAG/M,KAAKigY,cAAgBjgY,KAAK8/X,WAAY9yX,EAAGhN,KAAKkgY,eAC9DlgY,KAAK6hY,oBAAoBr9X,MACrBg5C,WAAYA,EACZ9F,SAAUA,EACVvoB,KAAM,KACNkyW,cAAe,KACfE,WAAY,KACZD,eAAgB,OAEpBthY,KAAK+9X,iBAAiBv5X,MAClB4c,QAAoC,cAA1BsiB,EAAWk9V,WAChB5gY,KAAKigY,cAAgBjgY,KAAK8/X,WAAe9/X,KAAKigY,cAAgBjgY,KAAK8/X,WACxEz+W,QAASrhB,KAAKkgY,cACdv+W,MAAkC,cAA1B+hB,EAAWk9V,WACf,IAAM,IACV5jY,MAAOgQ,EACPJ,OAAQ5M,KAAK8/X,WACbt7U,OAAQ,UAKxBm5U,EAAWtiY,UAAU0mY,oBAAsB,SAAU3gX,EAASC,EAAS2gX,EAASC,GAC5E,IAAIjvW,EAGJ,OAFAA,EAAS3mB,KAAK+mB,MAAM6uW,EAAU5gX,EAAS2gX,EAAU5gX,GACjD4R,EAASA,EAAS,EAAKA,EAAU,IAAM3mB,KAAKkR,GAAK,IAAQyV,GAG7D2qW,EAAWtiY,UAAUymY,gCAAkC,SAAUL,EAAazkY,EAAO0mC,GACjF,IAEI9J,EACAC,EAHAmnW,KACAE,KAsBJ,OAnBAtnW,EAAK55B,KAAKigY,cACVpmW,EAAK75B,KAAKkgY,cACNljY,GAAS,GACTgkY,EAAU,GAAgC,cAA1Bt9V,EAAWk9V,YACrB7zX,EAAG6sB,EAAK55B,KAAK8/X,WAAY9yX,EAAG6sB,IAAS9sB,EAAG6sB,EAAK55B,KAAK8/X,WAAY9yX,EAAG6sB,GAGvEqnW,EADKlkY,GAAS,EACAgD,KAAK89X,2BAA2Bn2V,OAAO,SAAU+3B,GAAK,OAAmB,KAAZA,EAAE1iE,QAExEA,GAAS,EACAgD,KAAK89X,2BAA2Bn2V,OAAO,SAAU+3B,GAAK,OAAmB,IAAZA,EAAE1iE,QAG/DgD,KAAK89X,2BAA2Bn2V,OAAO,SAAU+3B,GAAK,OAAmB,IAAZA,EAAE1iE,QAE7EkkY,EAAYzkY,OAAS,IACrBukY,EAAU,GAAKhhY,KAAKohY,yBAAyBK,EAAYrgX,QAASqgX,EAAYpgX,QAASogX,EAAY70X,OAAQs0X,EAAY,GAAG9/W,QAAS8/W,EAAY,GAAG7/W,QAAS6/W,EAAY,GAAGt0X,OAAQ82B,EAAWk9V,aAEjMI,EAAU,GAAKhhY,KAAKohY,yBAAyBK,EAAYrgX,QAASqgX,EAAYpgX,QAASogX,EAAY70X,OAAQgtB,EAAIC,EAAI75B,KAAK8/X,WAAYp8V,EAAWk9V,YACxII,GAEXrD,EAAWtiY,UAAU8lY,iCAAmC,SAAUnkY,GAC9D,IACIklY,EACAC,EAFAC,KAyBJ,OAtBIplY,GAAS,IACTklY,EAAY,EACZC,GAAa,GAERnlY,GAAS,GACdklY,EAAY,EACZC,GAAa,GAERnlY,GAAS,GACdklY,EAAY,EACZC,GAAa,GAERnlY,GAAS,GACdklY,EAAY,GACZC,GAAa,KAGbD,EAAY,GACZC,GAAa,IAEjBC,EAAW,GAAKpiY,KAAK69X,uBAAuBl2V,OAAO,SAAU+3B,GAAK,OAAOA,EAAE1iE,QAAUklY,IACrFE,EAAW,GAAKpiY,KAAK69X,uBAAuBl2V,OAAO,SAAU+3B,GAAK,OAAOA,EAAE1iE,QAAUmlY,IAC9EC,GAEXzE,EAAWtiY,UAAUgnY,gCAAkC,SAAUrlY,GAC7D,IAAIklY,EACAC,EACAG,KAuCJ,OAtCItlY,GAAS,IACTklY,EAAY,EACZC,GAAa,GAERnlY,GAAS,IACdklY,EAAY,GACZC,GAAa,IAERnlY,GAAS,IACdklY,EAAY,GACZC,GAAa,IAERnlY,GAAS,IACdklY,EAAY,EACZC,GAAa,GAERnlY,GAAS,GACdklY,EAAY,IACZC,GAAa,KAERnlY,GAAS,KACdklY,EAAY,EACZC,GAAa,GAERnlY,GAAS,GACdklY,EAAY,EACZC,GAAa,GAERnlY,GAAS,GACdklY,EAAY,EACZC,GAAa,IAGbD,EAAY,GACZC,GAAa,IAEjBG,EAAY,GAAKtiY,KAAK69X,uBAAuBl2V,OAAO,SAAU+3B,GAAK,OAAOA,EAAS,QAAMwiU,IACzFI,EAAY,GAAKtiY,KAAK69X,uBAAuBl2V,OAAO,SAAU+3B,GAAK,OAAOA,EAAS,QAAMyiU,IAClFG,GAEX3E,EAAWtiY,UAAU+lY,yBAA2B,SAAU5lW,EAAIC,EAAI6M,EAAI5M,EAAIC,EAAI4M,EAAIq4V,GAC9E,IAAIhnW,EACAC,EACA0oW,EACAC,EACAlnV,EACAmnV,EACA/iU,EACAq7C,EACA2nR,EACAC,EACAC,EACA5nR,EACA6nR,EACAC,EACAC,EACA5vW,GAAUpmB,EAAG,EAAGC,EAAG,GAoCvB,OAnCA4sB,EAAK4B,EAAKE,EACV7B,EAAK4B,EAAKE,EACV4mW,EAAYl2X,KAAKQ,KAAK+sB,EAAKA,EAAKC,EAAKA,GACrC2oW,EAAeD,EAAYA,EAC3BjnV,GAAKhT,EAAKA,EAAKC,EAAKA,IAAO,EAAIi6V,GAC/BC,EAAiBn6V,EAAKA,EAAKC,EAAKA,EAChCm3B,EAAIrzD,KAAKQ,KAAK,GAAKy7B,EAAKA,EAAKC,EAAKA,GAAMi6V,EAAgBC,EAAgBA,GAAkBD,EAAeA,GAAgB,GACzHznR,GAAMv/E,EAAKE,GAAM,EAAI4f,GAAK5f,EAAKF,GAC/BknW,EAAKhjU,GAAK/jC,EAAKF,GAAM,EACrBknW,EAAM5nR,EAAK2nR,EACXE,EAAM7nR,EAAK2nR,EACX1nR,GAAMv/E,EAAKE,GAAM,EAAI2f,GAAK3f,EAAKF,GAC/BonW,EAAKnjU,GAAKlkC,EAAKE,GAAM,EACrBonW,EAAM9nR,EAAK6nR,EACXE,EAAM/nR,EAAK6nR,EACQ,cAAfjC,EACIgC,EAAMD,GACNxvW,EAAMpmB,EAAI61X,EACVzvW,EAAMnmB,EAAI+1X,IAGV5vW,EAAMpmB,EAAI41X,EACVxvW,EAAMnmB,EAAI81X,GAIVH,EAAMC,GACNzvW,EAAMpmB,EAAI41X,EACVxvW,EAAMnmB,EAAI81X,IAGV3vW,EAAMpmB,EAAI61X,EACVzvW,EAAMnmB,EAAI+1X,IAGTh2X,EAAGomB,EAAMpmB,EAAGC,EAAGmmB,EAAMnmB,IAElC2wX,EAAWtiY,UAAUwjY,sBAAwB,SAAUn7V,GACnD,IACIorS,EACA9tU,EACAkc,EAHA8P,EAAgB0W,EAAW66V,eAAeh9J,eAI9CutG,EAAeprS,EAAW3T,SAAS+9C,aAAcxqE,GAAMogC,EAAW1iC,QAAQsC,GAAK,sCAC/E4Z,EAAOld,KAAKgjY,uBAAuBhjY,KAAKihY,qBACxC,IAAIgC,EAAiB,IAAIxtW,GAAWiO,EAAW1iC,QAAQsC,GAAK,gCAAiC,OAAQ0pB,EAAqB,MAAG0W,EAAWhO,WAAW1I,cAAeA,EAAuB,QAAGA,EAAyB,UAAG9P,GACxNlc,EAAU0iC,EAAW3T,SAASyF,SAASytW,GACvCn0D,EAAantU,YAAYX,GACzB0iC,EAAWlT,UAAU7uB,YAAYmtU,IAErC6uD,EAAWtiY,UAAU2jY,sBAAwB,SAAUt7V,GACnD,IACIorS,EACA9tU,EACAkc,EAHA8P,EAAgB0W,EAAW+6V,WAAWl9J,eAI1CutG,EAAeprS,EAAW3T,SAAS+9C,aAAcxqE,GAAMogC,EAAW1iC,QAAQsC,GAAK,kCAC/E4Z,EAAOld,KAAKgjY,uBAAuBhjY,KAAK6hY,qBACxC,IAAIqB,EAAiB,IAAIztW,GAAWiO,EAAW1iC,QAAQsC,GAAK,4BAA6B,OAAQ0pB,EAAqB,MAAG0W,EAAWhO,WAAW1I,cAAeA,EAAuB,QAAGA,EAAyB,UAAG9P,GACpNlc,EAAU0iC,EAAW3T,SAASyF,SAAS0tW,GACvCp0D,EAAantU,YAAYX,GACzB0iC,EAAWlT,UAAU7uB,YAAYmtU,IAErC6uD,EAAWtiY,UAAU0jY,gBAAkB,SAAUr7V,GAC7C,IACI6X,EACAvS,EACA7Z,EACAsZ,EAEA9mB,EAEAkT,EARAjoB,EAAS5M,KAAK8/X,WAOd/yW,EAAW2W,EAAW66V,eAAexxW,SAErC+hT,EAAeprS,EAAW3T,SAAS+9C,aAAcxqE,GAAMogC,EAAW1iC,QAAQsC,GAAK,mBACnFi4C,GAAWxuC,EAAG/M,KAAKigY,cAAgBrzX,EAAQI,EAAGhN,KAAKkgY,eACnDl3V,GAAWj8B,EAAG/M,KAAKigY,cAAgBrzX,EAAQI,EAAIhN,KAAKkgY,cAAgB,KACpE/wW,GAASnZ,MAAOpJ,EAAQmJ,OAAQnJ,GAChC67B,EAAQzoC,KAAK60B,UAAqB,UAElClT,EAAkB,EAAVtV,KAAKkR,GACbsX,EAAY,IAAW0mB,EAAOxuC,EAAI,IAAMwuC,EAAOvuC,EAAI,MAAkBmiB,EAAKnZ,MACtE,IAAMmZ,EAAKpZ,OAAS,IAAM4L,EAAQ,MAAyB8mB,EAAQ,IAAMO,EAAOj8B,EAAI,IAAMi8B,EAAOh8B,EACrG,IAAIgG,EAAU,IAAIyiB,GAAWiO,EAAW1iC,QAAQsC,GAAK,sBAAuB,OAAQypB,EAAS/W,MAAO0tB,EAAWhO,WAAW3I,SAAU,EAAGA,EAAS+mC,UAAWj/B,GACvJ7zB,EAAU0iC,EAAW3T,SAASyF,SAASxiB,GAC3C87T,EAAantU,YAAYX,GACzB0iC,EAAWlT,UAAU7uB,YAAYmtU,IAErC6uD,EAAWtiY,UAAU6jY,gBAAkB,SAAUx7V,GAC7C,IACI6X,EACAvS,EACA7Z,EACAsZ,EAIA5T,EARAjoB,EAAS5M,KAAK8/X,WAOd/yW,EAAW2W,EAAW+6V,WAAW1xW,SAErCwuB,GAAWxuC,EAAG/M,KAAKigY,cAAgBrzX,EAAQI,EAAGhN,KAAKkgY,eACnDl3V,GAAWj8B,EAAG/M,KAAKigY,cAAgBrzX,EAAQI,EAAGhN,KAAKkgY,eACnD/wW,GAASnZ,MAAO,EAAGD,OAAQ,GAC3B0yB,EAAQzoC,KAAK60B,UAA4B,iBAGzCA,EAAY,KAAY0mB,EAAOxuC,EAAI,IAAMwuC,EAAOvuC,EAAI,MAChDmiB,EAAKnZ,MAAQ,IAAMmZ,EAAKpZ,OAAS,QAAuC0yB,EAAQ,IAChFO,EAAOj8B,EAAI,IAAMi8B,EAAOh8B,EAC5B,IAAIgG,EAAU,IAAIyiB,GAAWiO,EAAW1iC,QAAQsC,GAAK,kBAAmB,OAAQypB,EAAS/W,MAAO0tB,EAAWhO,WAAW3I,SAAU,EAAGA,EAAS+mC,UAAWj/B,GACnJi6S,EAAeprS,EAAW3T,SAAS+9C,aAAcxqE,GAAMogC,EAAW1iC,QAAQsC,GAAK,mBAC/EtC,EAAU0iC,EAAW3T,SAASyF,SAASxiB,GAC3C87T,EAAantU,YAAYX,GACzB0iC,EAAWlT,UAAU7uB,YAAYmtU,IAErC6uD,EAAWtiY,UAAUsjY,gBAAkB,SAAUj7V,GAiB7C,IAAK,IAdDy/V,EACA9vX,EACAtG,EACAC,EACAgwB,EAEAomW,EACAC,EACAC,EAEAC,EACAC,EACAC,EAdArjD,EAAQ18S,EAAW66V,eACnBxvW,EAAO2U,EAAW66V,eAAelpW,WAcjC8vR,EAAWzhR,EAAW3T,SAAS+9C,aAAcxqE,GAAIogC,EAAW1iC,QAAQsC,GAAK,iBACpEnH,EAAI,EAAGA,EAAI6D,KAAK89X,2BAA2BrhY,OAAQN,IAGxD,GAFAgnY,EAAanjY,KAAK89X,2BAA2B3hY,GAC7CkX,EAAQrT,KAAK89X,2BAA2B3hY,GAAGa,MAAMkQ,WACxB,IAArBi2X,EAAWnmY,MAAe,CAa1B,GAZA+P,EAA+B,cAA1B22B,EAAWk9V,WACZuC,EAAW/hX,QAAU+hX,EAAWv2X,OAASu2X,EAAW/hX,QAAU+hX,EAAWv2X,OAC7EI,EAAIm2X,EAAW9hX,QACf2b,EAAWnO,GAAYxb,EAAO0b,GAC9BhiB,EAA+B,cAA1B22B,EAAWk9V,WAA8B7zX,EAAIiwB,EAAShnB,MAAQjJ,EACvC,YAAxBqzU,EAAM/+N,cACNr0G,GAAKgwB,EAASjnB,OAAS,EAGvB/I,GAAKgwB,EAASjnB,OAElB/V,KAAK89X,2BAA2B3hY,GAAGqoD,OAASxkD,KAAK0jY,gBAAgBrwX,EAAO2pB,EAAUjwB,EAAGC,GAClD,SAA/BozU,EAAM7kH,qBAAiC,CAGvC8nK,GADAD,EADWpjY,KAAK89X,2BAA2B3hY,GACjBqoD,OAAOzuB,QACP/f,MAC1BstX,EAAOF,EAAer2X,EACtB,IAAK,IAAI0W,EAAI,EAAGA,EAAItnB,EAAGsnB,IAGnB+/W,GADAD,EADWvjY,KAAK89X,2BAA2Br6W,GACjB+gC,OAAOzuB,QACP/f,MAC1BytX,EAAOF,EAAex2X,EACS,cAA1B22B,EAAWk9V,YACX6C,EAAOD,MACRnwX,EAAQ,IAEmB,eAA1BqwB,EAAWk9V,YACZ,EAAS0C,EAAOD,IAChBhwX,EAAQ,IAIpB,IAAIswX,GAA6B70W,KAAMzb,EAAMnG,WAAYH,EAAGA,EAAGC,EAAGA,EAC9D+pB,KAAM,kBAAmBsB,QAAQ,GACrCqL,EAAWhd,QAAQ,kBAAmBi9W,GACtC,IACI3iY,EAAUkjC,GADA,IAAItO,GAAW8N,EAAW1iC,QAAQsC,GAAK,WAAanH,EAAGwnY,EAAyB52X,EAAG42X,EAAyB32X,EAAG,OAAQ22X,EAAyB70W,MACrHC,EAAM2U,EAAWhO,WAAW7I,UAAWs4R,GAChFA,EAASxjT,YAAYX,GAG7B0iC,EAAWlT,UAAU7uB,YAAYwjT,IAErCw4E,EAAWtiY,UAAUujY,gBAAkB,SAAUl7V,GAuB7C,IAAK,IAnBDrwB,EACA2pB,EACArb,EACAzN,EACA0vX,EACAN,EACAO,EACAR,EACAS,EAEAV,EACAK,EACAM,EACAP,EACAQ,EAEAT,EAlBAx0W,EAAO2U,EAAW+6V,WAAWppW,WAC7B4uW,EAAiB,IAAIxJ,GAkBrByJ,EAAQxgW,EAAW+6V,WACnBt5E,EAAWzhR,EAAW3T,SAAS+9C,aAAcxqE,GAAIogC,EAAW1iC,QAAQsC,GAAK,iBACpEnH,EAAI,EAAGA,EAAI6D,KAAK+9X,iBAAiBthY,OAAQN,IAAK,CAcnD,GAbA8nY,EAAiBjkY,KAAK+9X,iBAAiB5hY,GACvCkX,EAAQ4wX,EAAejnY,MAAMkQ,WAC7B8vB,EAAWnO,GAAYxb,EAAO0b,GAC9BpN,EAAQtV,KAAK4xB,MAA6B,IAAvBgmW,EAAetiX,OAAe,IACrB,YAAxBuiX,EAAM7iR,eACNntG,EAAWlU,KAAKmkY,oBAAoBnkY,KAAKigY,cAAejgY,KAAKkgY,cAAe+D,EAAsB,MAAGjkY,KAAK8/X,WA5B9F,GA6BZ8D,EAAe5jY,KAAKokY,yBAAyBziX,EAAOzN,EAASnH,EAAGmH,EAASlH,EAAGgwB,KAG5E9oB,EAAWlU,KAAKmkY,oBAAoBnkY,KAAKigY,cAAejgY,KAAKkgY,cAAe+D,EAAsB,MAAGjkY,KAAK8/X,WAhC9F,GAiCZ8D,EAAe5jY,KAAKqkY,wBAAwB1iX,EAAOzN,EAASnH,EAAGmH,EAASlH,EAAGgwB,IAE/Eh9B,KAAK+9X,iBAAiB5hY,GAAW,OAAI6D,KAAK0jY,gBAAgBrwX,EAAO2pB,EAAU4mW,EAAa72X,EAAG62X,EAAa52X,GACrE,SAA/Bk3X,EAAM3oK,qBAAiC,CAGvC8nK,GADAD,EADWpjY,KAAK+9X,iBAAiB5hY,GACC,OAAU,QACX,MACjC2nY,EAAYV,EAAuB,OACnCE,EAAOF,EAAkB,EACzBS,EAAOT,EAAkB,EACzB,IAAK,IAAI3/W,EAAI,EAAGA,EAAItnB,EAAGsnB,IAGnB+/W,GADAD,EADWvjY,KAAK+9X,iBAAiBt6W,GACC,OAAU,QACX,MACjCugX,EAAYT,EAAuB,OACnCE,EAAOF,EAAkB,EACzBQ,EAAOR,EAAkB,EACpBE,GAAQH,EAAOD,GAAcC,GAAQG,EAAOD,GAAcO,GAAQF,EAAOC,GACtED,GAAQE,EAAOC,IACnB3wX,EAAQ,KAIpB,IAAIswX,GAA6B70W,KAAMzb,EAAMnG,WAAYH,EAAG62X,EAAa72X,EACrEC,EAAG42X,EAAa52X,EAAG+pB,KAAM,kBAAmBsB,QAAQ,GACxDqL,EAAWhd,QAAQ,kBAAmBi9W,GACtC,IACI3iY,EAAUkjC,GADA,IAAItO,GAAW8N,EAAW1iC,QAAQsC,GAAK,WAAanH,EAAGwnY,EAAyB52X,EAAG42X,EAAyB32X,EAAG,OAAQ22X,EAAyB70W,MACrHC,EAAM2U,EAAWhO,WAAW7I,UAAWs4R,GAChFA,EAASxjT,YAAYX,GAEzB0iC,EAAWlT,UAAU7uB,YAAYwjT,IAErCw4E,EAAWtiY,UAAUqoY,gBAAkB,SAAUrwX,EAAO2pB,EAAUsnW,EAAeC,GACrD,IAAIhK,GAG5B,OADsBxkW,QADPhpB,EAAGu3X,EAAet3X,EAAGu3X,EAAevuX,MAAOgnB,EAAShnB,MAAOD,OAAQinB,EAASjnB,QACrDyhT,UAAWnkT,IAGrDsqX,EAAWtiY,UAAUyjY,sBAAwB,SAAUp7V,GACnD,IACIorS,EACA9tU,EACAkc,EAHA+P,EAAgByW,EAAW66V,eAAej7J,eAI9CwrG,EAAeprS,EAAW3T,SAAS+9C,aAAcxqE,GAAMogC,EAAW1iC,QAAQsC,GAAK,sCAC/E4Z,EAAOld,KAAKgjY,uBAAuBhjY,KAAKwkY,qBACxC,IAAIC,EAAiB,IAAIhvW,GAAWiO,EAAW1iC,QAAQsC,GAAK,gCAAiC,OAAQ2pB,EAAqB,MAAGyW,EAAWhO,WAAWzI,cAAeA,EAAuB,QAAGA,EAAyB,UAAG/P,GACxNlc,EAAU0iC,EAAW3T,SAASyF,SAASivW,GACvC31D,EAAantU,YAAYX,GACzB0iC,EAAWlT,UAAU7uB,YAAYmtU,IAErC6uD,EAAWtiY,UAAU4jY,sBAAwB,SAAUv7V,GACnD,IACIorS,EACA9tU,EACAkc,EAHA+P,EAAgByW,EAAW+6V,WAAWn7J,eAI1CwrG,EAAeprS,EAAW3T,SAAS+9C,aAAcxqE,GAAMogC,EAAW1iC,QAAQsC,GAAK,kCAC/E4Z,EAAOld,KAAKgjY,uBAAuBhjY,KAAK0kY,oBACxC,IAAIC,EAAiB,IAAIlvW,GAAWiO,EAAW1iC,QAAQsC,GAAK,4BAA6B,OAAQ2pB,EAAqB,MAAGyW,EAAWhO,WAAWzI,cAAeA,EAAuB,QAAGA,EAAyB,UAAG/P,GACpNlc,EAAU0iC,EAAW3T,SAASyF,SAASmvW,GACvC71D,EAAantU,YAAYX,GACzB0iC,EAAWlT,UAAU7uB,YAAYmtU,IAErC6uD,EAAWtiY,UAAU2nY,uBAAyB,SAAU/rW,GAapD,IAAK,IAZDuE,EACAC,EACAC,EACAC,EAGAipW,EAAc,IAAIxJ,GAIlByJ,EAAK,GAEA1oY,EAAI,EAAGA,EAAI86B,EAAOx6B,OAAQN,IAE/Bq/B,GADAopW,EAAc3tW,EAAO96B,IACJqhD,WAAWzwC,EAC5B0uB,EAAKmpW,EAAYpnV,WAAWxwC,EAC5B0uB,EAAKkpW,EAAYltV,SAAS3qC,EAC1B4uB,EAAKipW,EAAYltV,SAAS1qC,EAM1B63X,EAAKA,EAAM,KAAYrpW,EAAK,IAAMC,EAAK,OALlCmpW,EAAYz1W,KAAOy1W,EAAYz1W,KAAKnZ,MAAQ,GAKa,KAJzD4uX,EAAYz1W,KAAOy1W,EAAYz1W,KAAKpZ,OAAS,GAIuB,KAHjE6uX,EAAYvD,cAAgBuD,EAAYvD,cAAgB,GAIpD,KAHCuD,EAAYrD,WAAa,EAAI,GAGX,KAFvBqD,EAAYtD,eAAiBsD,EAAYtD,eAAiB,GAErB,IAAM5lW,EAAK,IAAMC,EAAK,IAGvE,OADOkpW,EAAG33X,YAGdywX,EAAWtiY,UAAU+jY,uBAAyB,SAAU17V,GACpD,IAAIo9V,EACAC,EAGAQ,EACA/jV,EACA9F,EACAvoB,EACAyK,EAEA9sB,EACA+/G,EACA5jF,EACA5K,EACApf,EACA9c,EACAyK,EAbAo0X,KAMA/vI,EAAWvtN,EAAW66V,eAAej7J,eAAerkN,MASxDjf,KAAKwkY,uBACL13X,EAA6B,EAAlB9M,KAAK8/X,WAChB,IAAK,IAAI3jY,EAAI,EAAGA,EAAI6D,KAAK89X,2BAA2BrhY,OAAS,EAAGN,IAAK,CACjE0wH,EAAW7sH,KAAK89X,2BAA2B3hY,GAC3C8sC,EAAOjpC,KAAK89X,2BAA2B3hY,EAAI,GAG3CgG,GAFAk8B,EAAgD,GAAvCwuF,EAAiB,OAAI5jF,EAAa,UAC3ChqB,EAAQ5S,KAAKkT,MAAO0xO,EAAW,IAAO5yN,IAEtC,IAAK,IAAI5a,EAAI,EAAGA,EAAIxE,EAAOwE,IACvB7W,EAASq8B,EAAa,OAAKxlB,EAAIthB,EAAY,EAG3Cy3B,GAFmC,cAA1B8J,EAAWk9V,WACf5gY,KAAK+/X,YAAcjzX,EAAsB,EAATF,EAAc5M,KAAK+/X,aAC3CnzX,EACb20X,EAAat4V,EAAY,MAAI,EAC7B+3V,EAAYhhY,KAAKqiY,gCAAgCp5V,EAAY,OAC/B,cAA1BvF,EAAWk9V,YACXE,EAAeE,EAAU,GACzBD,EAAeC,EAAU,KAGzBF,EAAeE,EAAU,GACzBD,EAAeC,EAAU,IAE7BxjV,EAAax9C,KAAKohY,yBAAyBN,EAAa,GAAG1/W,QAAS0/W,EAAa,GAAGz/W,QAASy/W,EAAa,GAAGl0X,OAAQgtB,EAAIizF,EAAkB,QAAGjgH,EAAQ82B,EAAWk9V,YACjKlpV,EAAW13C,KAAKohY,yBAAyBL,EAAa,GAAG3/W,QAAS2/W,EAAa,GAAG1/W,QAAS0/W,EAAa,GAAGn0X,OAAQgtB,EAAIizF,EAAkB,QAAGjgH,EAAQ82B,EAAWk9V,YAC/JzxW,GAASnZ,MAAOpJ,EAAQmJ,OAAQnJ,GAChC5M,KAAKwkY,oBAAoBhgY,MACrBg5C,WAAYA,EACZ9F,SAAUA,EACV2pV,cAAe,EAAIh1X,KAAKkR,GACxB+jX,eAA2C,cAA1B59V,EAAWk9V,WACxB5gY,KAAK60B,UAA4B,iBAAI70B,KAAK60B,UAAqB,UACnE0sW,WAAYA,EACZpyW,KAAMA,MAMtBwuW,EAAWtiY,UAAUikY,uBAAyB,SAAU57V,GACpD,IACIohW,EACAC,EAEAC,EACA9D,EACAlwS,EACAi0S,EACAC,EACAC,EACAt4Q,EACA5jF,EACA9Z,EACAmjB,EACArzB,EACA9c,EACAijY,EAhBAn0I,EAAWvtN,EAAW+6V,WAAWn7J,eAAerkN,MAiBpD+xE,EAAgB3kF,KAAKkR,IAAwB,EAAlBvd,KAAK8/X,YAChCmF,EAAYH,EAAmC,cAA1BphW,EAAWk9V,WAC5B5gY,KAAKigY,cAAgBjgY,KAAK8/X,WAAa9/X,KAAKigY,cAAgBjgY,KAAK8/X,WACrEoF,EAAYllY,KAAKkgY,cACjBlgY,KAAK0kY,sBACLS,GAAkBp4X,EAAGk4X,EAAWj4X,EAAGk4X,GACnC,IAAK,IAAI/oY,EAAI,EAAGA,EAAI6D,KAAK+9X,iBAAiBthY,OAAS,EAAGN,IAAK,CACvD0wH,EAAW7sH,KAAK+9X,iBAAiB5hY,GACjC8sC,EAAOjpC,KAAK+9X,iBAAiB5hY,EAAI,GACH,cAA1BunC,EAAWk9V,YACXmE,EAA8B,MAAlB97V,EAAY,MAAY,EAAIA,EAAY,MACpD+7V,EAAe34X,KAAKE,IAAIw4X,EAAYl4Q,EAAgB,SAGpDk4Q,EAAkC,MAAtBl4Q,EAAgB,MAAY,EAAIA,EAAgB,MAC5Dm4Q,EAAe34X,KAAKE,IAAIw4X,EAAY97V,EAAY,QAEpDqJ,EAAY0+C,EAAgB,IAAOg0S,EAEnC7iY,EAAW6iY,GADX/lX,EAAQ5S,KAAKkT,MAAO0xO,EAAW,IAAO3+M,IAEtC8yV,EAAcn8V,EAAY,MAAI,EAAIA,EAAY,MAAI4jF,EAAgB,MAClEq0Q,EAAclhY,KAAKqlY,gCAAgCh5X,KAAKE,IAAI64X,IAC5D,IAAK,IAAI3hX,EAAI,EAAGA,EAAIxE,EAAOwE,IAAK,CAC5B,IAAIm+W,EAAwBz/X,EAAWshB,GAA4B,MAAtBopG,EAAgB,MAAYk4Q,EAAYl4Q,EAAgB,OACjG80Q,EAAsB3hY,KAAKmkY,oBAAoBnkY,KAAKigY,cAAejgY,KAAKkgY,cAAe0B,EAAsB5hY,KAAK8/X,YAClHlzX,EAAS5M,KAAKymC,UAAU0+V,EAAexD,EAAqBC,GAC5Df,EAAQe,EAAuB,IAAM5hY,KAAKkgY,cAAgBtzX,EAAS5M,KAAKkgY,cAAgBtzX,EACxF80X,EAAsB1hY,KAAKohY,yBAAyB0D,EAAOjE,EAAOj0X,EAAQs0X,EAAY,GAAG9/W,QAAS8/W,EAAY,GAAG7/W,QAAS6/W,EAAY,GAAGt0X,OAAQ82B,EAAWk9V,YAC5JpjV,GAAezwC,EAAG20X,EAAoB30X,EAAGC,EAAG00X,EAAoB10X,GAChE0qC,GAAa3qC,EAAG40X,EAAoB50X,EAAGC,EAAG20X,EAAoB30X,GAClEmiB,GAASnZ,MAAOpJ,EAAQmJ,OAAQnJ,GAChC,IAAI00X,EAAiBz0Q,EAAgB,OAAK,EAAI7sH,KAAK60B,UAAqB,UAAI70B,KAAK60B,UAA4B,iBAC7G70B,KAAK0kY,mBAAmBlgY,MACpBg5C,WAAYA,EACZ9F,SAAUA,EACV2pV,cAAe,EAAIh1X,KAAKkR,GACxB+jX,eAAgBA,EAChBC,YAAY,EACZpyW,KAAMA,OAMtBwuW,EAAWtiY,UAAUgqY,gCAAkC,SAAUD,GAC7D,IACIE,EAcJ,OAZIA,EADAF,GAAe,EACJ,GAENA,GAAe,IACT,GAENA,GAAe,GACT,EAGA,EAEDplY,KAAK89X,2BAA2Bn2V,OAAO,SAAU+3B,GAAK,OAAOA,EAAS,QAAM4lU,KAG9F3H,EAAWtiY,UAAU8oY,oBAAsB,SAAUvqW,EAAIC,EAAIlY,EAAOyb,GAChE,IAAIg+L,EACAwH,EACA5vM,EAIJ,OAHAA,EAASrR,GAAStV,KAAKkR,GAAK,KAC5B69M,EAASxhM,EAAKwD,EAAI/wB,KAAKwV,IAAImR,GAC3B4vM,EAAS/oM,EAAKuD,EAAI/wB,KAAKyV,IAAIkR,IAClBjmB,EAAGquN,EAAQpuN,EAAG41N,IAE3B+6J,EAAWtiY,UAAUgpY,wBAA0B,SAAU1iX,EAAO4jX,EAAIC,EAAIxoW,GACpE,IAAIjwB,EAAIw4X,EACJv4X,EAAIw4X,EAgER,OA/Dc,IAAV7jX,GAAyB,MAAVA,GACf5U,GAAKiwB,EAAShnB,MACdhJ,GAAKgwB,EAASjnB,OAAS,GAER,KAAV4L,GACL5U,GAAKiwB,EAAShnB,MACdhJ,GAAKgwB,EAASjnB,OAAS,GAER,MAAV4L,EACL3U,GAAKgwB,EAASjnB,OAEC,MAAV4L,EACL3U,GAAKgwB,EAASjnB,OAAS,EAElB4L,EAAQ,GAAKA,GAAS,GAC3B5U,GAAMiwB,EAAc,MAEfrb,EAAQ,IAAMA,GAAS,IAC5B5U,GAAMiwB,EAAShnB,MAAQgnB,EAAShnB,MAAQ,EACxChJ,GAAKgwB,EAASjnB,OAAS,GAElB4L,EAAQ,IAAMA,EAAQ,IAC3B5U,GAAMiwB,EAAShnB,MAAQgnB,EAAShnB,MAAQ,EACxChJ,GAAKgwB,EAASjnB,OAAS,GAElB4L,EAAQ,IAAMA,GAAS,KAC5B5U,GAAMiwB,EAAShnB,MAAQ,EACvBhJ,GAAMgwB,EAAe,OAAI,IAEpBrb,EAAQ,KAAOA,GAAS,KAC7B5U,GAAMiwB,EAAShnB,MAAQ,EACvBhJ,GAAMgwB,EAASjnB,OAAS,GAEnB4L,EAAQ,KAAOA,EAAQ,KAC5B5U,GAAMiwB,EAAShnB,MAAQ,EACvBhJ,GAAMgwB,EAAe,QAEhBrb,EAAQ,KAAOA,GAAS,KAC7B5U,GAAMiwB,EAAShnB,MAAQ,EACvBhJ,GAAMgwB,EAASjnB,OAAS,GAEnB4L,EAAQ,KAAOA,EAAQ,IAC5B3U,GAAMgwB,EAASjnB,OAAS,EAEnB4L,EAAQ,KAAOA,EAAQ,IAC5B3U,GAAMgwB,EAASjnB,OAAS,EAEnB4L,EAAQ,KAAOA,GAAS,KAC7B5U,GAAMiwB,EAAShnB,MAAQgnB,EAAShnB,MAAQ,EACxChJ,GAAMgwB,EAASjnB,OAAS,GAEnB4L,EAAQ,KAAOA,GAAS,KAC7B5U,GAAMiwB,EAAShnB,MAAQgnB,EAAShnB,MAAQ,EACxChJ,GAAMgwB,EAASjnB,OAAS,GAEnB4L,EAAQ,KAAOA,GAAS,KAC7B5U,GAAMiwB,EAAShnB,MAAQgnB,EAAShnB,MAAQ,EACxChJ,GAAKgwB,EAASjnB,OAAS,GAElB4L,EAAQ,MACb5U,GAAKiwB,EAAShnB,MACdhJ,GAAKgwB,EAASjnB,OAAS,IAElBhJ,EAAGA,EAAGC,EAAGA,IAEtB2wX,EAAWtiY,UAAU+oY,yBAA2B,SAAUziX,EAAO4jX,EAAIC,EAAIxoW,GACrE,IAAIjwB,EAAIw4X,EACJv4X,EAAIw4X,EAoDR,OAnDc,KAAV7jX,GACA5U,GAAKiwB,EAAShnB,MAAQ,EACtBhJ,GAAKgwB,EAASjnB,QAEC,MAAV4L,GACL5U,GAAMiwB,EAAShnB,MAAQ,EACvBhJ,GAAKgwB,EAASjnB,OAAS,GAER,MAAV4L,GACL5U,GAAKiwB,EAAShnB,MAAQ,EACtBhJ,GAAKgwB,EAASjnB,OAAS,GAER,MAAV4L,GACL5U,GAAK,EACLC,GAAKgwB,EAASjnB,OAAS,GAElB4L,EAAQ,GAAKA,GAAS,IAC3B5U,GAAKiwB,EAAShnB,MAAQ,EACtBhJ,GAAKgwB,EAASjnB,OAAS,GAElB4L,EAAQ,IAAMA,GAAS,IAC5B5U,GAAKiwB,EAAShnB,MAAQ,EACtBhJ,GAAKgwB,EAASjnB,OAAS,GAElB4L,EAAQ,IAAMA,GAAS,IAC5B5U,GAAKiwB,EAAShnB,MAAQ,EACtBhJ,GAAKgwB,EAASjnB,QAET4L,EAAQ,IAAMA,GAAS,KAC5B5U,GAAKiwB,EAAShnB,MACdhJ,GAAKgwB,EAASjnB,QAET4L,EAAQ,KAAOA,GAAS,KAC7B5U,GAAMiwB,EAAShnB,MAAQgnB,EAAShnB,MAAQ,EACxChJ,GAAKgwB,EAASjnB,OAAS,GAElB4L,EAAQ,KAAOA,GAAS,KAC7B5U,GAAKiwB,EAAShnB,MAAQgnB,EAAShnB,MAAQ,EACvChJ,GAAKgwB,EAASjnB,OAAS,GAElB4L,EAAQ,KAAOA,GAAS,KAC7B5U,GAAKiwB,EAAShnB,MACdhJ,GAAKgwB,EAASjnB,OAAS,GAElB4L,EAAQ,KAAOA,GAAS,IAC7B3U,GAAKgwB,EAASjnB,OAAS,EAElB4L,EAAQ,MACb3U,GAAKgwB,EAASjnB,OAAS,EACvBhJ,GAAKiwB,EAAShnB,MAAQ,IAEjBjJ,EAAGA,EAAGC,EAAGA,IAEtB2wX,EAAWtiY,UAAUorC,UAAY,SAAU+W,EAAY9F,EAAU/1B,GAC7D,IAAI8jX,EACAC,EACA5vQ,EACA/3E,EACAlkB,EAEA7G,EAQJ,OAPAA,EAASrR,EAAQ,IAAO,GAAKtV,KAAKkR,GAAK,IAAQ,IAAMlR,KAAKkR,GAAK,IAC/DkoX,GAAM/tV,EAAS3qC,EAAIywC,EAAWzwC,GAAK,EACnC24X,GAAMhuV,EAAS1qC,EAAIwwC,EAAWxwC,GAAK,EACnC8oH,GAAKzpH,KAAKwV,IAAImR,GAAU0yW,EAAKr5X,KAAKyV,IAAIkR,GAAUyyW,IAAOp5X,KAAKwV,IAAImR,GAAUyyW,EAAKp5X,KAAKyV,IAAIkR,GAAU0yW,GAClG3nV,GAAK2nV,EAAKD,EAAK3vQ,GAAKzpH,KAAKyV,IAAIkR,GAC7B6G,EAAK2jB,EAAWxwC,EAAIX,KAAKyV,IAAIkR,GAAU+qB,EAC9B1xC,KAAKE,IAAIixC,EAAWxwC,EAAI6sB,IAG9B8jW,KCxhCP7uJ,GAAwB,WACxB,SAASA,KAsFT,OApFAA,EAAOzzO,UAAUszU,WAAa,SAAUjrS,EAAYiiW,EAAa72D,EAAc82D,GAC3E,GAAIliW,EAAW3kB,OAAO4mX,GAAa1/J,OAAOnvM,QAAS,CAC/C,IAAImvM,EAASviM,EAAW3kB,OAAO4mX,GAAa1/J,OACxChnN,EAAQykB,EAAW3kB,OAAO4mX,GAAa1uW,OAAOx6B,OAAS,EACvDuZ,EAAQiwN,EAAOjwN,MACfD,EAASkwN,EAAOlwN,OAChBu0R,EAAarkE,EAAO9sM,MACpB0sW,EAAQniW,EAAW3T,SAAS+9C,aAAcxqE,GAAMogC,EAAW1iC,QAAQsC,GAAK,cACxDqiY,EAAc,YAClC72D,EAAantU,YAAYkkY,GAMzB,IAAK,IALD71S,EAAci2I,EAAOhhM,OAAOjvB,MAC5B64N,EAAc5I,EAAOhhM,OAAOpP,MAC5BpoB,EAAUw4N,EAAOx4N,QACjB2wB,EAAO6nM,EAAO7nM,KAAO6nM,EAAO7nM,KAAQsF,EAAW3kB,OAAO4mX,GAAavnW,MACnEsF,EAAWoiW,aAAaH,EAAcjiW,EAAWoiW,aAAarpY,QACzDN,EAAI,EAAGA,EAAI8iB,EAAQ,EAAG9iB,IAAK,CAChC,IAAI05Q,EAAa+vH,EAAazpY,GAAU,MACpCy7B,EAAaz7B,EACb6W,EAAU,IAAI6nX,GAAcn3V,EAAW1iC,QAAQsC,GAAK,UAAYqiY,EAAc,UAAY/tW,EAAa,UAAYA,EAAYwG,EAAMywM,EAAa7+I,EAAaviF,GACnKo4X,EAAMlkY,YAAY3B,KAAKi5B,WAAWqxQ,EAAYrkE,EAAOp+B,SAAUguE,EAAY,IAAIlyO,GAAe3tB,EAAOD,GAAS/C,EAAS0wB,OAInIorM,EAAOzzO,UAAU49B,WAAa,SAAUqxQ,EAAYlxQ,EAAKF,EAAU/J,EAAMnc,EAAS0wB,GAC9E,IAAIgqC,EAEAq4T,EACA/rE,EACA98S,EAHAic,EAAQmxQ,EAAW10R,cAInBqvB,GAAWpP,MAAO7iB,EAAqB,YAAGgD,MAAOhD,EAAqB,aACtEvF,EAAUuF,EAAQvF,QAClB4xB,EAASnG,EAASnsB,EAClBuyB,EAASpG,EAASlsB,EAClBJ,EAASP,KAAKQ,KAAKsiB,EAAKpZ,OAASoZ,EAAKpZ,OAASoZ,EAAKnZ,MAAQmZ,EAAKnZ,OAAS,EAC9E,OAAQmjB,GACJ,IAAK,SACD4sW,EAAgB,IAAI9oK,GAAajqN,EAAY,GAAGA,EAAc,KAAGiyB,EAAQx3B,EAASyrB,EAASnsB,EAAGmsB,EAASlsB,EAAGJ,EAAQ,MAClH8gE,EAAYhqC,EAAW3T,SAASsU,WAAW0hW,GAC3C,MACJ,IAAK,YACD7oX,EAAO,MAAamiB,GAAWlQ,EAAKnZ,MAAQ,GAAM,KAAOspB,GAAWnQ,EAAKpZ,OAAS,GAC9E,OAAmBspB,EAAUlQ,EAAKnZ,MAAQ,GAAM,KAAOspB,GAAWnQ,EAAKpZ,OAAS,GAAM,OACzEspB,EAAUlQ,EAAKnZ,MAAQ,GAAM,KAAOspB,EAAUnQ,EAAKpZ,OAAS,GACzE,OAAmBspB,GAAWlQ,EAAKnZ,MAAQ,GAC3C,KAAOspB,EAAUnQ,EAAKpZ,OAAS,GAAM,OACpCspB,GAAWlQ,EAAKnZ,MAAQ,GAAM,KAAOspB,GAAWnQ,EAAKpZ,OAAS,GAAM,IACzEikT,EAAc,IAAIvkS,GAAWziB,EAAY,GAAGA,EAAc,KAAGiyB,EAAOjvB,MAAOivB,EAAOpP,MAAOpoB,EAAS,GAAIyP,GACtGwwD,EAAYhqC,EAAW3T,SAASyF,SAASwkS,GACzC,MACJ,IAAK,WACD98S,EAAO,MAAamiB,GAAWlQ,EAAKnZ,MAAQ,GAAM,KAAOspB,EAAUnQ,EAAKpZ,OAAS,GAAM,QAA6B,KAC/GupB,GAAWnQ,EAAKpZ,OAAS,GAAM,OAAmBspB,EAAUlQ,EAAKnZ,MAAQ,GAAM,KAC/EspB,EAAUnQ,EAAKpZ,OAAS,GAAM,OAC9BspB,GAAWlQ,EAAKnZ,MAAQ,GAAM,KAAOspB,EAAUnQ,EAAKpZ,OAAS,GAAM,IACxEikT,EAAc,IAAIvkS,GAAWziB,EAAY,GAAGA,EAAc,KAAGiyB,EAAOjvB,MAAOivB,EAAOpP,MAAOpoB,EAAS,GAAIyP,GACtGwwD,EAAYhqC,EAAW3T,SAASyF,SAASwkS,GACzC,MACJ,IAAK,UACD98S,EAAO,MAAamiB,GAAWlQ,EAAKnZ,MAAQ,GAAM,MAAiB,QACpD,KAAOspB,GAAWnQ,EAAKpZ,OAAS,GAAM,OAAmBspB,EAAUlQ,EAAKnZ,MAAQ,GAAM,MACtF,QAA6B,KAAOspB,EAAUnQ,EAAKpZ,OAAS,GAAM,OAC5EspB,GAAWlQ,EAAKnZ,MAAQ,GAAM,MAAiB,IACpDgkT,EAAc,IAAIvkS,GAAWziB,EAAY,GAAGA,EAAc,KAAGiyB,EAAOjvB,MAAOivB,EAAOpP,MAAOpoB,EAAS,GAAIyP,GACtGwwD,EAAYhqC,EAAW3T,SAASyF,SAASwkS,GACzC,MACJ,IAAK,WAED,IAAK,IAAI79T,EAAI,EAAGA,GAAK,EAAGA,IAAK,CACzB,IAAIy1B,EAAShlB,EAASP,KAAKwV,IAAKxV,KAAKkR,GAAK,KAFrC,GAE6CphB,IAC9C49B,EAASntB,EAASP,KAAKyV,IAAKzV,KAAKkR,GAAK,KAHrC,GAG6CphB,IAE9C+gB,EADM,IAAN/gB,EACO,MAAakjC,EAASzN,GAAU,KAAO0N,EAASvF,GAAU,IAG1D7c,EAAK1C,OAAO,MAAa6kB,EAASzN,GAAU,KAAO0N,EAASvF,GAAU,KAGrF7c,EAAOA,EAAK1C,OAAO,KACnBw/S,EAAc,IAAIvkS,GAAWziB,EAAY,GAAGA,EAAc,KAAGiyB,EAAOjvB,MAAOivB,EAAOpP,MAAOpoB,EAAS,GAAIyP,GACtGwwD,EAAYhqC,EAAW3T,SAASyF,SAASwkS,GAGjD,OAAOtsP,GAEJohK,KCjFPowG,GAA2B,WAC3B,SAASA,IACLl/U,KAAK4kC,eACL5kC,KAAKgmY,gBACLhmY,KAAKimY,aAsPT,OApPA/mD,EAAU7jV,UAAU6qY,cAAgB,SAAUxiW,EAAYiiW,EAAa72D,EAAc82D,EAAc7vW,GAC/F/1B,KAAK4kC,eACL5kC,KAAKimY,aAWL,IAAK,IATDruW,EAEA4sB,EACA68D,EACAm2M,EACAx6R,EANAC,EAASyG,EAAWzG,OAEpBgpM,EAASviM,EAAW3kB,OAAO4mX,GAAa1/J,OAKxCzjJ,EAAYyjJ,EAAOzjJ,UACnBzzD,EAAOyzD,EAAUowJ,UACjB3zN,EAAQ2mX,EAAanpY,OAChBN,EAAI,EAAGA,EAAI8iB,EAAO9iB,IAAK,CAE5B6gC,EAAWnO,GADX2oS,EAAY9zR,EAAW3kB,OAAO4mX,GAAa1uW,OAAO96B,GAAGgqY,UAAUj5X,WAC7B6hB,GAElC,IAAIq3W,GADJ5hV,EAASohV,EAAazpY,GAAU,OACd4Q,EAAIiwB,EAAShnB,MAAQ,EACnCqwX,EAAO7hV,EAAOx3C,GAAKgwB,EAASjnB,OAASkwN,EAAe,OAAKhpM,EAAU,KACnEjnB,EAAQgnB,EAAShnB,MAASinB,EAAOzwB,KAAO,EAAMywB,EAAOxwB,MAAQ,EAC7DsJ,EAASinB,EAASjnB,OAAUknB,EAAOvwB,IAAM,EAAMuwB,EAAOtwB,OAAS,EACnEirB,EAAaz7B,EACbklH,EAAgB,IAAIy5Q,GACpBz5Q,GAAkBsyN,MAAOyyD,EAAQnpW,EAAOzwB,KAAO,EAAI85X,MAAOD,EAAQtwX,EAAS,EAAKknB,EAAOvwB,IAAM,EAAGK,EAAGq5X,EAAMp5X,EAAGq5X,GAC5GrmY,KAAK4kC,YAAYzoC,IACbmH,GAAIogC,EAAW1iC,QAAQsC,GAAK,UAAYqiY,EAAc,UAAY/tW,EAAa,yBAAgCz7B,EAC/G4Q,EAAGs0G,EAAqB,MACxBr0G,EAAGq0G,EAAqB,MACxBjjF,KAAM,QACNtP,KAAM0oS,EACNzoS,KAAMA,EACNk5C,UAAWm+T,EACXl+T,UAAWm+T,EACXrwX,MAAOA,EACPD,OAAQA,EACRmjB,SAAUsrB,EACVwhV,aAAc3kR,EACdvqF,SAAS,EACTyvW,cAAe,MAGvB,IAAIC,EAAc,IAAIrL,GACtBqL,EAAY5hW,YAAc5kC,KAAK4kC,YAC/B5kC,KAAKgmY,aAAaxhY,KAAKgiY,GACvBxmY,KAAKymY,oBAAoB/iW,EAAYiiW,EAAanjT,EAAWssP,EAAc/4S,EAAQ6vW,IAEvF1mD,EAAU7jV,UAAUqrY,qBAAuB,SAAUzvW,EAAQ0+L,GAGzD,IAAK,IAFDl5N,EAASw6B,EAAoB,YAAEx6B,OAE1B4pB,EAAI,EAAGA,EAAI5pB,EAAQ4pB,IACxBrmB,KAAKimY,UAAUjmY,KAAKimY,UAAUxpY,QAAUw6B,EAAoB,YAAE5Q,GAC9DrmB,KAAKumY,eAAgB,EACrBvmY,KAAK2mY,kBAAkBtgX,EAAG4Q,EAJlB,EAIiC0+L,GACzC31N,KAAKgmY,aAAarwK,GAA0B,YAAEtvM,GAAK4Q,EAAoB,YAAE5Q,GACzErmB,KAAKgmY,aAAarwK,GAA0B,YAAEtvM,GAAGkgX,cAAgBvmY,KAAKumY,eAG9ErnD,EAAU7jV,UAAUsrY,kBAAoB,SAAUxqY,EAAG86B,EAAQhY,EAAOuzD,GAMhE,IAAK,IAFDpxC,EACAw7T,EAJAngW,EAASuD,KAAKimY,UAAUxpY,OAKnBgnB,EAAI,EAAGA,EAAIhnB,EAAQgnB,IAIxB,GAHAm5U,EAAY58V,KAAKimY,UAAUxiX,GAC3B2d,EAAephC,KAAKimY,UAAUxpY,EAAS,GAC7BuD,KAAK0X,UAAUklV,EAAWx7T,GAGhC,OADAphC,KAAKumY,eAAgB,EACbtnX,GACJ,KAAK,EAEDjf,KAAK4mY,YAAYxlW,GACjBphC,KAAK48V,UAAYA,EACjBx7T,EAAwB,UAAIphC,KAAK48V,UAAqB,WAAK58V,KAAK48V,UAAiB,MAAI,EACjFx7T,EAAoB,MAAI,EAhB9B,IAiBEA,EAAgB,EAAIA,EAAwB,UAAIo5B,EAChDv7C,GAAS,EACTjf,KAAK2mY,kBAAkBxqY,EAAG86B,EAAQhY,EAAOuzD,GACzC,MACJ,KAAK,EAEDxyE,KAAK4mY,YAAYxlW,GACjBA,EAAwB,UAAIphC,KAAK48V,UAAqB,UAAI58V,KAAK48V,UAAiB,MAAI,EAChFx7T,EAAoB,MAAI,EAzB9B,GA0BEA,EAAgB,EAAIA,EAAwB,UAAIo5B,EAChDp5B,EAAwB,UAAIA,EAAuB,SAAEp0B,EAAIo0B,EAAqB,OAAI,EAAIo5B,EACtFp5B,EAAgB,EAAIA,EAAwB,UAAMA,EAAqB,OAAI,EAAMo5B,EACjFv7C,GAAS,EACTjf,KAAK2mY,kBAAkBxqY,EAAG86B,EAAQhY,EAAOuzD,GACzC,MACJ,KAAK,EAEDxyE,KAAK4mY,YAAYxlW,GACjBA,EAAwB,UAAIA,EAAuB,SAAEp0B,EAAIo0B,EAAqB,OAAI,EAAIo5B,EACtFp5B,EAAgB,EAAIA,EAAwB,UAAKA,EAAqB,OAAI,EAAKo5B,EAC/Ev7C,GAAS,EACTjf,KAAK2mY,kBAAkBxqY,EAAG86B,EAAQhY,EAAOuzD,GACzC,MACJ,KAAK,EAEDxyE,KAAK4mY,YAAYxlW,GACjBA,EAAwB,UAAIphC,KAAK48V,UAAqB,UAAI58V,KAAK48V,UAAiB,MAAI,EAC9Ex7T,EAAoB,MAAI,EA5ChC,GA6CEA,EAAgB,EAAIA,EAAwB,UAAIo5B,EAChDp5B,EAAwB,UAAIA,EAAqB,OAAI,EAAIA,EAAuB,SAAEp0B,EAAIwtD,EACtFp5B,EAAgB,EAAIA,EAAwB,UAAMA,EAAqB,OAAI,EAAMo5B,EACjFv7C,GAAS,EACTjf,KAAK2mY,kBAAkBxqY,EAAG86B,EAAQhY,EAAOuzD,GACzC,MACJ,KAAK,EAEDxyE,KAAK4mY,YAAYxlW,GACjBA,EAAwB,UAAKphC,KAAK48V,UAAqB,UAAI58V,KAAK48V,UAAiB,MAAI,EACjFx7T,EAAoB,MAAI,EAvD9B,GAwDEA,EAAgB,EAAIA,EAAwB,UAAIo5B,EAChDv7C,GAAS,EACTjf,KAAK2mY,kBAAkBxqY,EAAG86B,EAAQhY,EAAOuzD,GACzC,MACJ,KAAK,EAEDxyE,KAAK4mY,YAAYxlW,GACjBA,EAAwB,UAAIphC,KAAK48V,UAAqB,UAAI58V,KAAK48V,UAAiB,MAAI,EAChFx7T,EAAoB,MAAI,EAhE9B,GAiEEA,EAAgB,EAAIA,EAAwB,UAAIo5B,EAChDp5B,EAAwB,UAAIphC,KAAK48V,UAAqB,UAAIx7T,EAAqB,OAlEjF,GAmEEA,EAAgB,EAAIA,EAAwB,UAAIA,EAAqB,OAAI,EAAIo5B,EAC7Ev7C,GAAS,EACTjf,KAAK2mY,kBAAkBxqY,EAAG86B,EAAQhY,EAAOuzD,GACzC,MACJ,KAAK,EAEDxyE,KAAK4mY,YAAYxlW,GACjBA,EAAwB,UAAKphC,KAAK48V,UAAsB,WAAKx7T,EAAqB,OA1EpF,IA2EEA,EAAgB,EAAIA,EAAwB,UAAKA,EAAqB,OAAI,EAAKo5B,EAC/Ev7C,GAAS,EACTjf,KAAK2mY,kBAAkBxqY,EAAG86B,EAAQhY,EAAOuzD,GACzC,MACJ,KAAK,EAEDxyE,KAAK4mY,YAAYxlW,GACjBA,EAAwB,UAAIphC,KAAK48V,UAAqB,UAAI58V,KAAK48V,UAAiB,MAAI,EAChFx7T,EAAoB,MAAI,EAnF9B,GAoFEA,EAAgB,EAAIA,EAAwB,UAAIo5B,EAChDp5B,EAAwB,UAAIphC,KAAK48V,UAAqB,UAAIx7T,EAAqB,OArFjF,GAsFEA,EAAgB,EAAIA,EAAwB,UAAKA,EAAqB,OAAI,EAAKo5B,EAC/Ev7C,GAAS,EACTjf,KAAK2mY,kBAAkBxqY,EAAG86B,EAAQhY,EAAOuzD,GACzC,MACJ,KAAK,EACDvzD,EAAQ,EACRjf,KAAK2mY,kBAAkBxqY,EAAG86B,EAAQhY,EAAOuzD,KAM7D0sQ,EAAU7jV,UAAUqc,UAAY,SAAUmvX,EAAYC,GAClD,IAAI/+U,GAAQ,EAOZ,OANI8+U,IAAeC,IACf/+U,IAAY8+U,EAAc,EAAIA,EAAmB,OAAMC,EAAe,GACjED,EAAc,EAAKC,EAAc,EAAIA,EAAmB,QACvDD,EAAc,EAAIA,EAAkB,MAAI,EAAKC,EAAc,EAAIA,EAAkB,MAAI,GACtFD,EAAc,EAAIA,EAAkB,MAAI,EAAKC,EAAc,EAAIA,EAAkB,MAAI,IAEvF/+U,GAEXm3R,EAAU7jV,UAAUurY,YAAc,SAAUn1W,GACxCA,EAAwB,UAAIA,EAA2B,aAAK,EAC5DA,EAAwB,UAAIA,EAA2B,aAAK,EAC5DA,EAAgB,EAAIA,EAA2B,aAAS,MACxDA,EAAgB,EAAIA,EAA2B,aAAS,OAE5DytT,EAAU7jV,UAAU0rY,mBAAqB,SAAUrjW,EAAYiyL,EAAa1jN,EAAOwf,EAAcq9S,GAClFr9S,EAAwB,UACxBA,EAAwB,UADnC,IAGIwyM,EADA/qM,EAAWzH,EAAuB,SAGlCwyM,EADA/qM,EAASlsB,EAAIykB,EAAgB,EACrBA,EAAiB,EAGjBA,EAAgB,EAAIA,EAAqB,OAAI,EAEzD,IAAIu1W,EAAqB,KAAa9tW,EAAU,EAAI,IAAOA,EAAU,EAAI,MACpEzH,EAAiB,EAAI,MACtBw1W,EAAsBvjW,EAAW3kB,OAAO42M,GAAasQ,OAAOzjJ,UAAU0kT,cACtE5oW,EAAS2oW,EAAoBpxW,MAAQoxW,EAAoBpxW,MACxD6N,EAAW3kB,OAAO42M,GAAav3L,MAC5BsF,EAAWoiW,aAAanwK,EAAcjyL,EAAWoiW,aAAarpY,QAClEuW,EAAU,IAAIyiB,GAAWiO,EAAW1iC,QAAQsC,GAAK,iCAAwCqyN,EAAc,SAAW1jN,EAAO,OAAQg1X,EAAoBjxX,MAAOsoB,EAAQ,EAAG,OAAQ0oW,GAC/KhmY,EAAU0iC,EAAW3T,SAASyF,SAASxiB,GAC3C87T,EAAantU,YAAYX,IAE7Bk+U,EAAU7jV,UAAUorY,oBAAsB,SAAU/iW,EAAYiiW,EAAanjT,EAAWssP,EAAc/4S,EAAQ6vW,GAC1G,IAAK,IAAIzpY,EAAI,EAAGA,EAAIunC,EAAW3kB,OAAO4mX,GAAa1uW,OAAOx6B,OAAQN,IAC9D,GAAIqmF,EAAUvzE,SAAU,CACpB,IAAIk4X,EAAuBhmY,EAAc,OACrCmC,GAAIogC,EAAW1iC,QAAQsC,GAAK,gBAAkBqiY,EAAc,wBAC5DtiY,UAAW,WACXE,OAAQ,wBAMZ/C,SAASyuB,eAAeyU,EAAW1iC,QAAQsC,GAAK,sBAAsB3B,YAAYwlY,GAClF,IACIjgX,OAAe,EACf5jB,EAAKk/E,EAAUvzE,SAAW,eAAiB02X,EAAc,cAAgBxpY,EAAIunC,EAAW1iC,QAAQsC,GAChG9G,GAAS22B,MAAOuQ,EAAW3kB,OAAO4mX,GAAa1uW,OAAO96B,GAAGgqY,WAG7Dj/W,EAAe2c,GAFFtJ,GAAoBioD,EAAUvzE,SACrBurB,CAAWkJ,GACuBpgC,EAAI9G,GAC5D2qY,EAAqBxlY,YAAYulB,GACjCA,EAAaxiB,MAAM8H,KAAOo5X,EAAazpY,GAAGg3B,MAAMpmB,EAAIma,EAAatiB,YAAc,EAAI,KACnFsiB,EAAaxiB,MAAMgI,IAAMk5X,EAAazpY,GAAGg3B,MAAMnmB,EAAIka,EAAawsC,aAC5DhwB,EAAW3kB,OAAO4mX,GAAa1/J,OAAOlwN,OAAS,EAAI,KACvD,IAAIvJ,EAAO4nB,SAASlN,EAAaxiB,MAAM8H,KAAM,IACzCusC,EAAQ3kB,SAASlN,EAAaxiB,MAAMgI,IAAK,IACzCsJ,EAAQkR,EAAatiB,YACrBmR,EAASmR,EAAawsC,aACtBlP,EAASohV,EAAazpY,GAAU,MAChCklH,GAAkBsyN,MAAOnnU,EAAM85X,MAAOvtV,EACtChsC,EAAGP,EAAMQ,EAAG+rC,GAChB/4C,KAAKgmY,aAAaL,GAA0B,YAAExpY,IAC1CmH,GAAIA,EACJyJ,EAAGP,EACHQ,EAAG+rC,EACH3a,KAAM,QACNtP,KAAM,GACNC,KAAMyzD,EAAUowJ,UAChB3qK,UAAWz7D,EACX07D,UAAWnvB,EACX/iC,MAAOA,EACPD,OAAQA,EACRmjB,SAAUsrB,EACVwhV,aAAc3kR,EACdvqF,SAAS,EACTyvW,cAAe,QAKxBrnD,KC3PPkoD,GAA8B,WAC9B,SAASA,IACLpnY,KAAKw2B,WACLx2B,KAAKypO,WACLzpO,KAAK4lY,gBACL5lY,KAAKqnY,gBACLrnY,KAAKk5B,YACLl5B,KAAKwiF,UAAY,IAAI08P,GA0PzB,OAxPAkoD,EAAa/rY,UAAUilF,YAAc,SAAUvhE,GAC3C,IAAIi4O,EAAYj4O,EAAO+lD,WACnBwiU,EAAavoX,EAAOuoX,WACpBnB,EAAYpnX,EAAOonX,UACvBpnX,EAAOkY,UACP,IAAK,IAAI96B,EAAI,EAAGA,EAAI66P,EAAUv6P,OAAQN,IAClC4iB,EAAOkY,OAAOzyB,MAAO8iY,WAAYtwI,EAAU76P,GAAGmrY,GAC1CnB,UAAWnvI,EAAU76P,GAAGgqY,MAIpCiB,EAAa/rY,UAAUu6Q,KAAO,SAAUlyO,EAAY6jW,EAAYxxW,GAS5D,IAAK,IAPDyxW,EACAC,EAIAxD,EACAhyX,EAPA68T,EAAeprS,EAAW3T,SAAS+9C,aAAcxqE,GAAMogC,EAAW1iC,QAAQsC,GAAK,2BAG/Eyb,EAAS2kB,EAAW3kB,OACpBu7U,EAAev7U,EAAOtiB,OACtBirY,EAAkBH,EAAWzH,WAGxBttT,EAAI,EAAGA,EAAI8nR,EAAc9nR,IAAK,CACnC,IAAImjJ,EAAcnjJ,EACdzzD,EAAOyzD,GAAG1N,YAAc/lD,EAAOyzD,GAAG80T,YAAcvoX,EAAOyzD,GAAG2zT,WAC1DnmY,KAAKsgF,YAAYvhE,EAAOyzD,IAE5BxyE,KAAK4lY,aAAapzT,MAClBxyE,KAAKk5B,SAASs5C,MACd,IAAK,IAAI/uD,EAAI,EAAGA,EAAI1E,EAAOyzD,GAAGv7C,OAAOx6B,OAAQgnB,IACzCzjB,KAAKw2B,QAAQ/S,GAAK1E,EAAOyzD,GAAGv7C,OAAOxT,GAAe,WAClDzjB,KAAKypO,QAAQhmN,GAAK1E,EAAOyzD,GAAGv7C,OAAOxT,GAAc,UASrD,IAAK,IAPDkkX,EAAcJ,EAAWtH,cACzB2H,EAAcL,EAAWrH,cACzBpzX,EAAmC,EAAxBy6X,EAAWzH,WAGtB+H,EAAcD,EACdE,GAHwB/6X,EAAG46X,GAA0C,cAA1BjkW,EAAWk9V,WAClD8G,GAAmBA,GAAkB16X,EAAG46X,GAEV76X,EAC7BsZ,EAAI,EAAGA,EAAItH,EAAOyzD,GAAGv7C,OAAOx6B,OAAQ4pB,IAAK,CAC9C,IAAIihX,EAAatnY,KAAKw2B,QAAQnQ,GAC1B0hX,EAAcj7X,GAAY,GAAKw6X,EAAa,IAAO,EACnDnB,EAAYnmY,KAAKypO,QAAQpjN,GACzB2hX,EAAa37X,KAAKE,IAAM,EAAI45X,EAAar5X,EAAY,GAC3B,cAA1B42B,EAAWk9V,YACX6G,EAActB,EAAY,EAAIyB,EAAcI,EAAaJ,EAAcI,EACvER,EAAeD,EAAWxH,YAAcjzX,EAAWi7X,IAGnDN,EAActB,EAAY,EAAIyB,EAAcI,EAAaJ,EAAcI,EACvER,EAAeD,EAAWxH,YAAcgI,GAE5C9D,EAAiBsD,EAAWnG,yBAAyB0G,EAAaL,EAAaO,EAAYR,EAAaK,EAAaE,EAAYrkW,EAAWk9V,YAC5I,IAAIY,EAAUx9V,KACV33B,KAAKE,IAAI45X,GAAa3E,IACtByC,EAAel3X,EAA+B,cAA1B22B,EAAWk9V,WAC3B4G,EAAcO,EAAaP,EAAcO,EAC7C9D,EAAej3X,EAAI46X,GAEvB5nY,KAAK4lY,aAAapzT,GAAGnsD,GAAK,IAAIs0W,GAC9B36X,KAAK4lY,aAAapzT,GAAGnsD,IAAO8M,MAAO8wW,EAAgBl3X,EAAGu6X,EAAYt6X,EAAGm5X,GACrEnmY,KAAKk5B,SAASs5C,GAAGnsD,IAAOtZ,EAAGk3X,EAAel3X,EAAGC,EAAGi3X,EAAej3X,GAEnE,IAAK,IAAI7Q,EAAI,EAAGA,EAAI4iB,EAAOyzD,GAAGv7C,OAAOx6B,OAAS,EAAGN,IAC7C8V,EAAQ9V,EAAI,EACZ6D,KAAKqnY,aAAalrY,GAAK,IAAIu+X,GAC3B16X,KAAKqnY,aAAalrY,IAAOq/B,GAAIx7B,KAAKw2B,QAAQr6B,GAAIs/B,GAAIz7B,KAAKypO,QAAQttO,GAAIu/B,GAAI17B,KAAKw2B,QAAQvkB,GAAQ0pB,GAAI37B,KAAKypO,QAAQx3N,IAEjHyxB,EAAWlT,UAAU7uB,YAAYmtU,GACjC9uU,KAAKioY,WAAWvkW,EAAYiyL,EAAam5G,EAAc/4S,GAE3D,IAAStS,EAAI,EAAGA,EAAIigB,EAAW3kB,OAAOtiB,OAAQgnB,IAC1C,GAAIigB,EAAW3kB,OAAO0E,GAAGqzU,mBAAqBpzT,EAAW3kB,OAAO0E,GAAGwiN,OAAOzjJ,UAAU1rD,QAAS,CACzF,IAAIoxW,EAAUxkW,EAAW3T,SAAS+9C,aAAcxqE,GAAMogC,EAAW1iC,QAAQsC,GAAK,cACxDmgB,EAAI,+BACtBziB,EAAUR,SAASyuB,eAAeyU,EAAW1iC,QAAQsC,GAAK,wBAA+BmgB,KAEzFziB,EAAQW,YAAYumY,GAExBloY,KAAKwiF,UAAUkkT,qBAAqB1mY,KAAKwiF,UAAUwjT,aAAaviX,GAAIA,GACpE,IAAS4C,EAAI,EAAGA,EAAIqd,EAAW3kB,OAAO0E,GAAGwT,OAAOx6B,OAAQ4pB,IAAK,GACrDoL,EAAezxB,KAAKwiF,UAAUwjT,aAAaviX,GAAgB,YAAE4C,IAC/C4hD,UAAYx2C,EAAazb,MAAU0tB,EAAWkgM,UAAU72N,EAAI22B,EAAWkgM,UAAU5tN,OAC5Fyb,EAAaw2C,UAAYvkC,EAAWkgM,UAAU72N,GAAK0kB,EAAay2C,UAAYxkC,EAAWkgM,UAAU52N,GACpGykB,EAAay2C,UAAYz2C,EAAa1b,OAAS2tB,EAAWkgM,UAAU52N,EAAI02B,EAAWkgM,UAAU7tN,UAC7F/V,KAAKwiF,UAAUwjT,aAAaviX,GAAGmhB,YAAYve,GAAGkgX,eAAgB,EAC9DvmY,KAAKwiF,UAAUwjT,aAAaviX,GAAGmhB,YAAYve,GAAGyQ,SAAU,GAExDrF,EAA4B,eAC5BzxB,KAAKwiF,UAAUukT,mBAAmBrjW,EAAYjgB,EAAG4C,EAAGoL,EAAcy2W,IAKlF,IAASzkX,EAAI,EAAGA,EAAIigB,EAAW3kB,OAAOtiB,OAAQgnB,IAAK,CAC/C,IAAI++D,EAAY9+C,EAAW3kB,OAAO0E,GAAGwiN,OAAOzjJ,UAC5C,GAAI9+C,EAAW3kB,OAAO0E,GAAGwiN,OAAOzjJ,UAAU1rD,QAAS,CAC/C,IAAI91B,EAAUR,SAASyuB,eAAeyU,EAAW1iC,QAAQsC,GAAK,wBAA+BmgB,GACzF0kX,EAAQzkW,EAAW3T,SAAS+9C,aAAcxqE,GAAMogC,EAAW1iC,QAAQsC,GAAK,cACtDmgB,EAAI,eACtBziB,GACAA,EAAQW,YAAYwmY,GAExB,IAAS9hX,EAAI,EAAGA,EAAIqd,EAAW3kB,OAAO0E,GAAGwT,OAAOx6B,OAAQ4pB,IAAK,CACzD,IAAIoL,EAAezxB,KAAKwiF,UAAUwjT,aAAaviX,GAAgB,YAAE4C,GACjE,IAAKm8D,EAAUvzE,UAAYwiB,EAAaqF,QAAS,CAC7C,IAAI9jB,EAAU,IAAIkoX,GAClBloX,EAAUhT,KAAKwiF,UAAUwjT,aAAaviX,GAAgB,YAAE4C,GACxD,IAAI0I,EAAO2U,EAAW3U,KAClBhiB,EAAIiG,EAAmB,UACvBhG,EAAIgG,EAAmB,UACvB1P,EAAKogC,EAAW1iC,QAAQsC,GAAK,UAAYmgB,EAAI,UAAY4C,EAAI,oBAA2BA,EACxF+X,EAAOokD,EAAgB,KAAIA,EAAgB,KAAK9+C,EAAW3kB,OAAO0E,GAAG2a,MACrEsF,EAAWoiW,aAAariX,EAAIigB,EAAWoiW,aAAarpY,QACpDwoC,EAASvB,EAAW3kB,OAAO0E,GAAGwiN,OAAOzjJ,UAAUv9C,OAC/CmjW,EAAc,IAAIprK,GAAW15N,EAAI86B,EAAM6G,EAAQjyB,EAAiB,QAAG,IAAIonX,GAAertX,EAAGC,EAAGgG,EAAe,MAAGA,EAAgB,SAC9Hq1X,EAAU3kW,EAAW3T,SAASuU,cAAc8jW,GAChDD,EAAMxmY,YAAY0mY,GAClB,IAAIC,GAAwBx5W,KAAM9b,EAAc,KAAGjG,EAAGiG,EAAW,EAAGhG,EAAGgG,EAAW,EAAG2iN,YAAalyM,EAC9FmU,WAAYvR,EAAG0Q,KAAM,aAAcsB,QAAQ,GAC/CqL,EAAWhd,QAAQ,aAAc4hX,GACjC,IACIn7S,EAAYjpD,GADE,IAAItO,GAAW5iB,EAAY,GAAGs1X,EAAoBv7X,EAAGu7X,EAAoBt7X,EAAG,QAASs7X,EAAoBx5W,MAC5EC,EAAM2U,EAAWhO,WAAW8sD,UAAW2lT,GACtFA,EAAMxmY,YAAYwrF,QAEjB,GAAI3K,EAAUvzE,SAAU,CACzB,IAAIs5X,EAAY/nY,SAASyuB,eAAeuzD,EAAUvzE,SAAW,eAAiBwU,EAAI,cAC9E4C,EAAIqd,EAAW1iC,QAAQsC,IAC3BilY,EAAU7jY,MAAM8H,KAAOxM,KAAKwiF,UAAUwjT,aAAaviX,GAAgB,YAAE4C,GAAG4hD,UAAY,KACpFsgU,EAAU7jY,MAAMgI,IAAM1M,KAAKwiF,UAAUwjT,aAAaviX,GAAgB,YAAE4C,GAAG6hD,UAAY,QAKnG,IAAS/rE,EAAI,EAAGA,EAAIunC,EAAW3kB,OAAOtiB,OAAQN,IAC1C,GAAIunC,EAAW3kB,OAAO5iB,GAAGszU,iBAAmB/rS,EAAWypM,cAAe,CAC9DzpM,EAAW3kB,OAAO5iB,GAAG8pO,OAAOzjJ,UAAUvzE,UACtCjP,KAAKwoY,yBAAyBrsY,EAAGunC,GAEjC1iC,EAAUR,SAASyuB,eAAeyU,EAAW1iC,QAAQsC,GAAK,wBAA+BnH,GAC7F6D,KAAKwsO,iBAAiB9oM,EAAY1iC,EAAS7E,KAIvDirY,EAAa/rY,UAAU4sY,WAAa,SAAUvkW,EAAYiiW,EAAa72D,EAAc/4S,GACjF,IAAI0yW,EAAQ/kW,EAAW3T,SAAS+9C,aAAcxqE,GAAMogC,EAAW1iC,QAAQsC,GAAK,wBAA+BqiY,EACvG54J,YAAa,QAAUrpM,EAAW1iC,QAAQsC,GAAK,wBAC3CqiY,EAAc,MACtB8C,EAAMjlY,aAAa,aAAckgC,EAAW3kB,OAAO4mX,GAAahhY,YAChEmqU,EAAantU,YAAY8mY,GAMzB,IAAK,IAJDvrX,EAEAlc,EAHA6jY,EAAK,GAIL5lX,GAFSykB,EAAW3kB,OAAO4mX,GAAa1/J,OAEhCviM,EAAW3kB,OAAO4mX,GAAa1uW,OAAOx6B,OAAS,GAClDN,EAAI,EAAGA,EAAI8iB,EAAO9iB,IAAK,CAC5B,IAAIo/C,EAASv7C,KAAK4lY,aAAaD,GAAaxpY,GAAU,MAClD6sC,EAAShpC,KAAK4lY,aAAaD,GAAaxpY,EAAI,GAAU,MAC1D0oY,EAAKA,EAAM,KAAatpV,EAAQ,EAAI,IAAOA,EAAQ,EAAI,MAC5CvS,EAAQ,EAAI,IAAOA,EAAQ,EAAI,IAE9C9rB,EAAO2nX,EAAG33X,WACV,IAAIkxB,EAAOsF,EAAW3kB,OAAO4mX,GAAavnW,MAAQsF,EAAWoiW,aAAaH,EAAcjiW,EAAWoiW,aAAarpY,QAC5GisY,GAAoB55W,KAAM4U,EAAW3kB,OAAO4mX,GAAa5uW,KAAMqH,KAAMA,EACrErH,KAAM,eAAgBsB,QAAQ,GAClCqL,EAAWhd,QAAQ,eAAgBgiX,GACnC,IAAI11X,EAAU,IAAIyiB,GAAWiO,EAAW1iC,QAAQsC,GAAK,UAAYqiY,EAAc,UAAW,OAAQjiW,EAAW3kB,OAAO4mX,GAAa3vX,MAAO0yX,EAAgBtqW,KAAMsF,EAAW3kB,OAAO4mX,GAAal4X,QAAS,OAAQyP,GAC9Mld,KAAK4sO,gBAAkBlpM,EAAW3T,SAASsrF,aAAa,IAAI2hH,GAAWt5L,EAAW1iC,QAAQsC,GAAK,wBAA0BqiY,EAAa,eAAiB3vX,MAAO,EAAG6f,MAAO,QAAU,GAC9K9oB,EAAGgpB,EAAOhpB,EAAGC,EAAG+oB,EAAO/oB,EACvBgJ,MAAO0tB,EAAW1O,cAAchf,MAChCD,OAAQ2tB,EAAW1O,cAAcjf,UAErC0yX,EAAM9mY,YAAY3B,KAAK4sO,iBACvB,IAAI+7J,EAASjlW,EAAW3T,SAAS+9C,aAAcxqE,GAAMogC,EAAW1iC,QAAQsC,GAAK,OAASqiY,IACtF3kY,EAAU0iC,EAAW3T,SAASyF,SAASxiB,GACvC21X,EAAOhnY,YAAYX,GACnBynY,EAAM9mY,YAAYgnY,IACC,IAAI75J,IACV6/F,WAAWjrS,EAAYiiW,EAAa8C,EAAOzoY,KAAK4lY,aAAaD,IAC1E3lY,KAAKwiF,UAAU0jT,cAAcxiW,EAAYiiW,EAAa8C,EAAOzoY,KAAK4lY,aAAaD,GAAc5vW,IAEjGqxW,EAAa/rY,UAAUmtY,yBAA2B,SAAU7C,EAAajiW,GAKrE,IAAK,IAJDjnC,EAASinC,EAAW3kB,OAAO4mX,GAAa1uW,OAAOx6B,OAG/CyO,EAAWyQ,WAAW+nB,EAAW3kB,OAAO4mX,GAAallC,mBAChDtkW,EAAI,EAAGA,EAAIM,EAAQN,IAAK,CAC7B,IAAI6E,EAAUR,SAASyuB,eAAeyU,EAAW3kB,OAAO4mX,GAAa1/J,OAAOzjJ,UAAUvzE,SAClF,eAAiB02X,EAAc,cAAgBxpY,EAAIunC,EAAW1iC,QAAQsC,IAC1EtC,EAAQ0D,MAAMC,WAAa,SAC3Bq0B,GAAgB0K,EAAY1iC,EANpB,EAMoCkK,EAAU,YAiB9Dk8X,EAAa/rY,UAAUmxO,iBAAmB,SAAU9oM,EAAY+kW,EAAO9yK,GACnE,IAOI34N,EAPA4xC,EAAY,IAAI9W,OAEhB/D,GADUvzB,SAASyuB,eAAe,mCACvBw5W,EAAMl3X,WAAW,GAAGA,WAAW,GAAGA,WAAW,IACxDgmB,EAASD,GAAqB,UAC9BsxW,EAAYtxW,GAAqB,WACjCthB,GAAS+d,EAASlhB,aAAa,SAC/B9F,GAAKgnB,EAASlhB,aAAa,KAE/B+7B,EAAU7W,QAAQhE,GACd7oB,SAAUyQ,WAAW+nB,EAAW3kB,OAAO42M,GAAa8qI,mBACpDzoU,SAAU,SAAU/3B,GACc,cAA1ByjC,EAAWk9V,YACX5jY,EAAQu6B,EAAOt3B,EAAKg4B,UAAYh4B,EAAKJ,MAAO,EAAGmW,EAAO/V,EAAKiL,UAC3D6oB,EAASvwB,aAAa,QAASxG,EAAMkQ,cAGrClQ,EAAQ4rY,EAAU3oY,EAAKg4B,UAAYh4B,EAAKJ,MAAOmW,EAAO,EAAG/V,EAAKiL,UAC9D6oB,EAASvwB,aAAa,IAAKxG,EAAMkQ,cAGzC8R,IAAK,SAAUmN,GACmB,cAA1BuX,EAAWk9V,WACX7sW,EAASvwB,aAAa,QAASwS,EAAM9I,YAGrC6mB,EAASvwB,aAAa,IAAKuJ,EAAEG,YAEjC,IAAI5Q,GACA+7B,QAAQ,EAAOtB,KCxPJ,oBDwP6B2M,WAAYA,GAExDA,EAAWhd,QC1PI,oBD0PuBpqB,OAIlD8qY,EAAa/rY,UAAUm1O,YAAc,SAAUm1J,EAAa/tW,GACxD,IAAI7qB,EACAC,EAGJ,OAFAD,EAAI/M,KAAKk5B,SAASysW,GAAa/tW,GAAY7qB,EAC3CC,EAAIhN,KAAKk5B,SAASysW,GAAa/tW,GAAY5qB,GAClCD,EAAGA,EAAGC,EAAGA,IAEfo6X,KElQPvjF,GAA6B,WAK7B,SAASA,EAAYlxS,GACjB3S,KAAK2S,QAAUA,EA6GnB,OAvGAkxS,EAAYxoT,UAAU0F,MAAQ,SAAU6C,GACpC5D,KAAK6oY,gBAAkBhtY,OAAO6F,KAAK,GAAI,QAAS,UAAY7F,OAAO+zH,YAAc,UAAY/zH,OAAO8zH,WAAa,cACjH3vH,KAAK6oY,gBAAgB35S,OAAO,EAAG,GAC/BlvF,KAAK6oY,gBAAgB/kF,SAASC,OAAOC,WAAYD,OAAOE,aACxD,IAAI7rR,GACAC,QAAQ,EAAOy1B,YAAa9tD,KAAKkkT,eAAetgT,GAAWmzB,KCpBpC,eDsB3B/2B,KAAK2S,QAAQ+T,QCtBc,cDsBiB0R,GACvCA,EAASC,QACVwwW,EAAgBzwW,EAAS01B,YAAa9tD,KAAK6oY,kBAQnDhlF,EAAYxoT,UAAU6oT,eAAiB,SAAU4kF,GAC7C,IAAI5nY,EAAMC,EAAc,OAiBxB,OAhBI2nY,EACIA,aAAuBtqY,MACvBsqY,EAAY1pY,QAAQ,SAAUpC,GAC1BkE,EAAIS,YAAY+uB,GAAW1zB,GAAO4E,WAAU,MAG3CknY,aAAuB3yQ,QAC5Bj1H,EAAIS,YAAYmnY,EAAYlnY,WAAU,IAGtCV,EAAIS,YAAY+uB,GAAWo4W,GAAalnY,WAAU,IAItDV,EAAIS,YAAY3B,KAAK2S,QAAQ3R,QAAQY,WAAU,IAE5CV,GAOX2iT,EAAYxoT,UAAU8oT,OAAS,SAAU4kF,EAAY1nJ,EAAUzoN,GAC3D,IAAI74B,EAAQC,KACRgpY,EAAS7nY,EAAc,UACvBmC,GAAI,aACJG,OACIuS,MAAShW,KAAK2S,QAAQqiB,cAAchf,MAAM9I,WAC1C6I,OAAU/V,KAAK2S,QAAQqiB,cAAcjf,OAAO7I,cAGhDq3S,IAAe/4S,GAAQg/E,UAAUt9E,WAAW3O,QAAQ,mBAAqB,GAC7Eq6B,EAAcn7B,EAAkBm7B,GAAe8vO,GAAmBqG,UAAYn2O,EAC9E,IAAI4rR,EAAU,sFACVxkT,KAAK2S,QAAQ6d,UAAU1uB,UACvB,SACAs3B,EAAMv9B,OAAOomP,IAAIC,gBAAgB,IAAIT,KAAoB,QAAfsnJ,GAAwBvkF,KACjE,IAAKC,eAAiBC,kBAAkB1kT,KAAK2S,QAAQ6d,aAAe9pB,KAAM,mBAC/E,GAAmB,QAAfqiY,EACA/oY,KAAK2kT,gBAAgBtjE,EAAU0nJ,EAAY3vW,EAAKmrR,OAE/C,CACD,IAAIK,EAAU,IAAIzzN,MACd0zN,EAAQmkF,EAAOv6S,WAAW,MAC9Bm2N,EAAQjgO,kBAGJ,GAFAkgO,EAAM5zN,UAAU2zN,EAAS,EAAG,GAC5B/oT,OAAOomP,IAAIE,gBAAgB/oN,GACR,QAAf2vW,EAAsB,CACtB,IAAIllG,EAAa,IAAIh8B,GACjBi9C,EAAckkF,EAAO15S,UAAU,cAAc//E,QAAQ,aAAc,sBACvEs0R,EAAW15O,aAAavxB,YAAcA,EACtCksR,EAAcA,EAAYzjT,MAAMyjT,EAAYvmT,QAAQ,KAAO,GAC3DslS,EAAWzqD,MAAMh1O,MAAMuwQ,SAAS1jL,UAAU,IAAIupL,GAAUsqC,GAAc,EAAG,EAAI/kT,EAAM4S,QAAQqiB,cAAchf,MAAQ,GAAKjW,EAAM4S,QAAQqiB,cAAcjf,QAC9IwuS,IACA1gB,EAAW70M,KAAKqyJ,EAAW,QAC3BwiD,EAAWvxR,gBAIfvS,EAAM4kT,gBAAgBtjE,EAAU0nJ,EAAYC,EAAO15S,UAAU,aAAa//E,QAAQ,YAAa,sBAAuBg1S,IAG9HK,EAAQtlT,IAAM85B,IAStByqR,EAAYxoT,UAAUspT,gBAAkB,SAAUtjE,EAAU0nJ,EAAY3vW,EAAKmrR,GACzEpjT,EAAc,KACVsC,OACIs+O,SAAYV,EAAW,IAAM0nJ,EAAWpsU,oBACxC3iC,KAAQZ,KAEbzlB,cAAc,IAAI6vM,WAAW+gG,EAAa,QAAU,QACnD78L,KAAM7rH,OACNopT,SAAS,EACTC,YAAY,MAGbrB,KE1HPh4N,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAgC5D6rW,GAA4B,SAAUv8S,GAKtC,SAASu8S,EAAWj2X,EAAShS,GACzB,OAAO0rF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KA4alD,OAjbA6rF,GAAUo9S,EAAYv8S,GAUtBu8S,EAAW5tY,UAAU0kC,cAAgB,WACjC,MAAO,cAMXkpW,EAAW5tY,UAAU+yG,eAAiB,WAClC,MAAO,IAKX66R,EAAW5tY,UAAUsqT,eAAiB,WAClC3lT,KAAK4pT,YACLppR,GAAUxgC,OAEdipY,EAAW5tY,UAAUmrT,YAAc,SAAU9lR,EAAOh6B,EAAMy+S,GACtD,IAEIp4S,EACAC,EAHA+hB,EAAO2R,EAAM3R,KAAO2R,EAAM3R,KAAO2R,EAAMkyM,UACvC51M,EAAWnO,GAAY6R,EAAM5R,KAAMC,GAGnCoS,EAAgBT,EAAMS,cACtB+nW,EAAYxoW,EAAM5R,KAClBq6W,EAAiB1rY,EAAkBijC,EAAMW,cACzCh1B,KAAKE,IAAIvM,KAAKi9B,OAAOzwB,KAAOxM,KAAKi9B,OAAOxwB,MAASzM,KAAKg1B,cAAmB,OACzE0L,EAAMW,aACN+nW,EAAmBpsW,EAAShnB,MAAQmzX,EAEpCp8X,EADAiwB,EAAShnB,MAAQhW,KAAKg1B,cAAchf,MAChChW,KAAKi9B,OAAOzwB,KAAOxM,KAAKilC,OAAOjvB,MAGb,WAAlBmrB,EAA8BnhC,KAAKg1B,cAAchf,MAAQ,EAAIgnB,EAAgB,MAAI,EAC9D,SAAlBmE,EAA4BnhC,KAAKi9B,OAAOzwB,KAAOxM,KAAKg9X,eAAiBh9X,KAAKilC,OAAOjvB,MAAUhW,KAAKg1B,cAAchf,MACzGgnB,EAAgB,OAAKh9B,KAAKi9B,OAAOxwB,MAAQzM,KAAKg9X,eAAiBh9X,KAAKilC,OAAOjvB,OAEzFhJ,EAAIhN,KAAKi9B,OAAOvwB,IAAMswB,EAAiB,OAAI,EAAIh9B,KAAKg9X,eAChDt8V,EAAM2oW,YAAcD,IAEpBpsW,EAAWnO,GADXq6W,EAAYvqW,GAASwqW,EAAezoW,EAAM5R,KAAMC,GACdA,IAEtCo2R,EAAWnlT,KAAK+vB,SAAS+9C,aAAcxqE,GAAItD,KAAKgB,QAAQsC,GAAK,iBAC7D,IAAIgmY,GAAmBx6W,KAAMo6W,EAAWn8X,EAAGA,EAAGC,EAAGA,EAAG+pB,KAAM,cAAesB,QAAQ,GACjFr4B,KAAK0mB,QHtFY,cGsFS4iX,GAEZplW,GADA,IAAItO,GAAW51B,KAAKgB,QAAQsC,GAAK,eAAiBoD,EAAM4iY,EAAev8X,EAAGu8X,EAAet8X,EAAG,QAASs8X,EAAex6W,MACzFC,EAAM/uB,KAAK01B,WAAWtI,WAAY+3R,GACnE3hT,aAAa,aAAck9B,EAAMszB,aAAetzB,EAAM5R,MAC9D,IAAIy6W,GAAkBx8X,EAAGA,EAAGC,EAAGA,EAAGgwB,SAAUA,GAC5Ch9B,KAAKwwB,UAAU7uB,YAAYwjT,GACC,KAAxBzkR,EAAMg9V,SAAS5uW,MAAe4R,EAAMg9V,SAAS5mW,SAC7C92B,KAAKwpY,eAAe9oW,EAAOh6B,EAAMs2B,EAAUh9B,KAAKg1B,cAAeu0W,EAAepkF,IAGtF8jF,EAAW5tY,UAAUmuY,eAAiB,SAAU9oW,EAAOh6B,EAAMs2B,EAAU7N,EAAMo6W,EAAepkF,GACxF,IAAIp4S,EACAC,EAIA2qT,EAHA5oS,EAAO2R,EAAMg9V,SAAS9qJ,UACtB62J,EAAW/oW,EAAMg9V,SACjBgM,EAAe76W,GAAY46W,EAAS36W,KAAMC,GAE1C46W,EAAeF,EAAS36W,KACxB86W,EAAmBnsY,EAAkBgsY,EAASpoW,cACzB,IAApBrhC,KAAK+1B,OAAO/f,MAAgByzX,EAASpoW,aACtCooW,EAASJ,YAAcK,EAAa1zX,MAAQ4zX,IAC5CD,EAAehrW,GAASirW,EAAkBH,EAAS36W,KAAMC,IAE7DhiB,EAAwC,QAApC2zB,EAAgB,SAAES,cAA2BooW,EAAcx8X,EAAKw8X,EAAcvsW,SAAc,MACvD,SAApC0D,EAAgB,SAAES,cAA4BooW,EAAcx8X,EACxDw8X,EAAcx8X,EAAKw8X,EAAcvsW,SAAShnB,MAAQ,EAC3DhJ,EAAIu8X,EAAcv8X,EAAK,EAAIhN,KAAKg9X,eAChCrlE,EAAiD,QAApCj3R,EAAgB,SAAES,cAA0B,MAChB,SAApCT,EAAgB,SAAES,cAA4B,QAAU,SAC7D,IAAI0oW,GAAsB/6W,KAAM66W,EAAc58X,EAAGA,EAAGC,EAAGA,EAAG+pB,KAAM,iBAAkBsB,QAAQ,GAC1Fr4B,KAAK0mB,QH/Ge,iBG+GSmjX,GAC7B,IACI7oY,EAAUkjC,GADA,IAAItO,GAAW51B,KAAKgB,QAAQsC,GAAK,eAAiBoD,EAAMmjY,EAAkB98X,EAAG88X,EAAkB78X,EAAG2qT,EAAYkyE,EAAkB/6W,MACrGC,EAAM/uB,KAAK01B,WAAWtI,WAAY+3R,GAC3EnkT,EAAQwC,aAAa,aAAcimY,EAASz1U,aAAey1U,EAAS36W,MACpEq2R,EAASxjT,YAAYX,IAMzBioY,EAAW5tY,UAAUkrT,aAAe,WAChC,IAAIthR,EAASjlC,KAAKilC,OACdpP,EAAuB,iBAAf71B,KAAKqb,MAA2B,UAAY,UACxDrb,KAAKstB,WAAattB,KAAKstB,WAAattB,KAAKstB,WAAauI,EACtD,IAAIi0W,EAAa,IAAI9sK,GAAWh9N,KAAKgB,QAAQsC,GAAK,oBAAqBtD,KAAKstB,WAAY2X,EAAQ,EAAG,IAAIm1V,GAAen1V,EAAOjvB,MAAQ,EAAGivB,EAAOjvB,MAAQ,EAAGhW,KAAKg1B,cAAchf,MAAQivB,EAAOjvB,MAAOhW,KAAKg1B,cAAcjf,OAASkvB,EAAOjvB,QACtOhW,KAAKwwB,UAAU7uB,YAAY3B,KAAK+vB,SAASuU,cAAcwlW,KAM3Db,EAAW5tY,UAAU0tF,kBAAoB,SAAUiF,EAASC,GACxDjuF,KAAKmtO,eAAgB,EAErB,IAAK,IADDp9M,GAAW,EACN3xB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,GAAU5vF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,aACD2xB,GAAW,EACX,MACJ,IAAK,OACD/vB,KAAK2lT,iBACL51R,GAAW,EACX,MACJ,IAAK,QACD/vB,KAAKmtO,eAAgB,EACrBp9M,GAAW,EACX,MACJ,IAAK,SACDA,GAAW,GAInBA,GACA/vB,KAAK2tG,UAMbs7R,EAAW5tY,UAAUoX,UAAY,WAC7BzS,KAAK0mB,QAAQ,QAAUgd,WAAY1jC,OACnCA,KAAK+pY,eACL/pY,KAAKwlT,sBACLxlT,KAAKgqY,cAETf,EAAW5tY,UAAUmqT,oBAAsB,WACvCxlT,KAAKmtO,eAAgB,GAKzB87J,EAAW5tY,UAAUwgB,SAAW,WAE5B7b,KAAK01B,WzB/Hb,SAA8Bra,GAC1B,IAAI3W,EACJ,OAAQ2W,GACJ,IAAK,eACD3W,GACImoB,UAAW,UACXE,SAAU,UACVC,cAAe,UACfC,cAAe,UACfG,WAAY,UACZC,YAAa,UACbC,WAAY,UACZC,WAAY,UACZK,YAAa,UACb40D,UAAW,UACX30D,iBAAkB,UAClBC,kBAAmB,UACnBC,kBAAmB,WAEvB,MACJ,QACIrpB,GACImoB,UAAW,UACXE,SAAU,UACVC,cAAe,UACfC,cAAe,UACfG,WAAY,UACZC,YAAa,UACbC,WAAY,UACZC,WAAY,OACZK,YAAa,uBACb40D,UAAW,UACX30D,iBAAkB,UAClBC,kBAAmB,UACnBC,kBAAmB,WAI/B,OAAOrpB,EyByFekoB,CAAc5sB,KAAKqb,OACrCrb,KAAK8lY,azBvJb,SAA+BzqX,GAC3B,IAAIsR,EACJ,OAAQtR,GACJ,IAAK,eACDsR,GAAW,UAAW,UAAW,UAAW,UAAW,UACnD,UAAW,UAAW,UAAW,UAAW,WAChD,MACJ,IAAK,SACDA,GAAW,UAAW,UAAW,UAAW,UAAW,UACnD,UAAW,UAAW,UAAW,UAAW,WAChD,MACJ,IAAK,YACDA,GAAW,UAAW,UAAW,UAAW,UAAW,UACnD,UAAW,UAAW,UAAW,UAAW,WAChD,MACJ,QACIA,GAAW,UAAW,UAAW,UAAW,UAAW,UACnD,UAAW,UAAW,UAAW,UAAW,WAGxD,OAAOA,EyBmIiBD,CAAe1sB,KAAKqb,QAM5C4tX,EAAW5tY,UAAUsyG,OAAS,WAC1B3tG,KAAK2lT,iBACL3lT,KAAKgB,QAAQW,YAAY3B,KAAKwwB,WAC9BxwB,KAAK6b,WACL7b,KAAKwyV,yBACLxyV,KAAKumT,eACDvmT,KAAKiqY,wBAA0BjqY,KAAKiwO,eAAen5M,UACnD92B,KAAKqwO,aAAerwO,KAAKiqY,uBAAuBl5J,aAAa/wO,OAEjEA,KAAKqwO,aAAerwO,KAAKqwO,aAAerwO,KAAKqwO,cAAiBtjO,EAAG,EAAGC,EAAG,EAAGgJ,MAAO,EAAGD,OAAQ,GAC5F,IAAIy8S,EAAa,IAAIub,GACrB/tU,KAAK+1B,OAASy8R,EAAWoqE,oBAAoB58X,KAAMA,KAAK0gC,MAAO1gC,KAAKqwO,cAC5C,KAApBrwO,KAAK0gC,MAAM5R,MAAe9uB,KAAK0gC,MAAM5J,SACrC92B,KAAKwmT,YAAYxmT,KAAK0gC,MAAO,QAAS,MAE1C,IAAI6mW,EAAa,IAAI5J,GACrB4J,EAAWvJ,WAAWh+X,KAAMA,KAAK+1B,QACjC/1B,KAAKkqY,aAAe,IAAI9C,GACxBpnY,KAAKkqY,aAAat0H,KAAK51Q,KAAMunY,EAAYvnY,KAAK+1B,QAC9C/1B,KAAK0mB,QAAQ,UAAYgd,WAAY1jC,QAEzCipY,EAAW5tY,UAAUm3V,uBAAyB,WAC1C,GAAI/0V,EAAkB+C,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,uBAAwB,CACpF,IAAI6mY,EAAmBnqY,KAAKmB,cAAc,OACtCmC,GAAItD,KAAKgB,QAAQsC,GAAK,qBACtBC,OAAQ,kCAEZvD,KAAKgB,QAAQW,YAAYwoY,GACzB,IAAIz3W,EAAO1yB,KAAKgB,QAAQ4K,wBACpBm9D,EAAUvoE,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,QACxD,GAAIylE,EAAS,CACT,IAAIqhU,EAAgBrhU,EAAQn9D,wBAC5Bu+X,EAAiBzlY,MAAM8H,KAAOH,KAAKC,IAAI89X,EAAc59X,KAAOkmB,EAAKlmB,KAAM,GAAK,KAC5E29X,EAAiBzlY,MAAMgI,IAAML,KAAKC,IAAI89X,EAAc19X,IAAMgmB,EAAKhmB,IAAK,GAAK,WAI7E+jB,GAAczwB,KAAKgB,QAAQsC,GAAK,uBASxC2lY,EAAW5tY,UAAUiX,QAAU,WAC3BtS,KAAK+pY,eACLr9S,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKgB,QAAQ8C,UAAUS,OAAO,iBAKlC0kY,EAAW5tY,UAAU2uY,WAAa,WAC9BzkY,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAKqqY,kBAAmBrqY,MAChEuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQkgF,eAAgB1rF,KAAK+pT,UAAW/pT,MACvEuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQmgF,cAAe3rF,KAAKgqT,SAAUhqT,MACrEnE,OAAOa,iBAAkB8O,GAAQwlB,SAAY,gBAAiBn1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKsqY,mBAAmBhvY,KAAK0E,QAE7KipY,EAAW5tY,UAAU0uT,UAAY,SAAUlpT,GACxB,cAAXA,EAAE6F,KACF1G,KAAKgxB,SAAU,EAGfhxB,KAAKgxB,QAA4B,UAAlBnwB,EAAE0pT,aAA6C,MAAlB1pT,EAAE0pT,aAAuBvqT,KAAKgxB,QAE1EhxB,KAAKuqY,sBAAwBvqY,KAAKgxB,SAClChxB,KAAKuqY,oBAAoBC,oBAAoBxqY,KAAMa,IAG3DooY,EAAW5tY,UAAU2uT,SAAW,SAAUnpT,GAOtC,GANe,aAAXA,EAAE6F,KACF1G,KAAKgxB,SAAU,EAGfhxB,KAAKgxB,QAA4B,UAAlBnwB,EAAE0pT,aAA6C,MAAlB1pT,EAAE0pT,YAE9CvqT,KAAKuqY,qBAAuBvqY,KAAKgxB,QAAS,CAC1C,IAAIy5W,EAAmBzqY,KAAKuqY,oBAAoBC,oBAAoBxqY,KAAMa,GACtE4pY,IACAzqY,KAAK0qY,UAAYvqY,WAAW,WACxBsqY,EAAiB55D,WAClB,QAQfo4D,EAAW5tY,UAAUgvY,kBAAoB,SAAUxpY,GAC/C,IACIsmC,EADYtmC,EAAEsG,OACO7D,GACrB+Q,EAAgB7T,SAASyuB,eAAekY,GAAU9yB,cAEtD,GAAsB,8BADL7T,SAASyuB,eAAe5a,EAAc/Q,IAAI+Q,cAC5C/Q,IAAsCtD,KAAKiwO,eAAe8B,iBAAkB,CAMvF,IAAK,IALDp3M,EAAetmB,EAAc9C,WAAW,GACxCo5X,EAAgBt2X,EAAc9C,WAAW,GACzCq5X,EAAajwW,EAAa3e,YAC1B25M,OAAc,EACdv3L,OAAO,EACFjiC,EAAI,EAAGA,EAAI6D,KAAKiqY,uBAAuBY,aAAapuY,OAAQN,IAC7DyuY,IAAe5qY,KAAKiqY,uBAAuBY,aAAa1uY,GAAS,OACjEw5N,EAAc31N,KAAKiqY,uBAAuBY,aAAa1uY,GAAGw5N,YAC1Dv3L,EAAOp+B,KAAKiqY,uBAAuBY,aAAa1uY,GAAGiiC,MAG3D,IAAI0uM,EAAgBtsO,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,wBAA+BqyN,GAC5C,YAA7CmX,EAAcj6N,aAAa,eAC3B83X,EAAcnnY,aAAa,OAAQ,QACnCspO,EAActpO,aAAa,aAAc,UACzCxD,KAAK+e,OAAO42M,GAAahxN,WAAa,WAGtCgmY,EAAcnnY,aAAa,OAAQ46B,GACnC0uM,EAActpO,aAAa,aAAc,WACzCxD,KAAK+e,OAAO42M,GAAahxN,WAAa,aAOlDskY,EAAW5tY,UAAU0uY,aAAe,WAChCxkY,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAKqqY,mBAChD9kY,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQkgF,eAAgB1rF,KAAK+pT,WAC/DxkT,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQmgF,cAAe3rF,KAAKgqT,UAC9DnuT,OAAOe,oBAAqB4O,GAAQwlB,SAAY,gBAAiBn1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKsqY,qBAExJrB,EAAW5tY,UAAU0F,MAAQ,SAAUuC,GACjB,IAAIugT,GAAY7jT,MACtBe,MAAMuC,IAOtB2lY,EAAW5tY,UAAU8oT,OAAS,SAAUz9S,EAAM26O,EAAUzoN,GACpC,IAAIirR,GAAY7jT,MACtBmkT,OAAOz9S,EAAM26O,EAAUzoN,IAKrCqwW,EAAW5tY,UAAUivY,mBAAqB,SAAUzpY,GAChD,IAAId,EAAQC,KAQZ,OAPAA,KAAKmtO,eAAgB,EACjBntO,KAAK8jT,UACL5jT,aAAaF,KAAK8jT,UAEtB9jT,KAAK8jT,SAAW3jT,WAAW,WACvBJ,EAAM4tG,UACP,MACI,GAOXs7R,EAAW5tY,UAAU+2F,gBAAkB,WACnC,IAAIgB,KACApzF,KAAKiwO,eAAen5M,SACpBs8D,EAAQ5uF,MACJouF,OAAQ,mBACR3yF,MAAOD,QAGf,IAAK,IAAI7D,EAAI,EAAGA,EAAI6D,KAAK+e,OAAOtiB,OAAQN,IACpC,GAAI6D,KAAK+e,OAAO5iB,GAAG80B,QAAQ6F,QAAS,CAChCs8D,EAAQ5uF,MACJouF,OAAQ,gBACR3yF,MAAOD,QAEX,MAGR,OAAOozF,GAOX61S,EAAW5tY,UAAUuuT,UAAY,WAC7Bn5R,GAAczwB,KAAKgB,QAAQsC,GAAK,sBAEhC,GAAItD,KAAKwwB,UAAW,CAChB,KAAOxwB,KAAKwwB,UAAUjf,WAAW9U,OAFlB,GAGXuD,KAAKwwB,UAAUlrB,YAAYtF,KAAKwwB,UAAUzT,aAEzC/c,KAAKwwB,UAAU8K,iBAAmBt7B,KAAKwwB,UAAU/vB,YAClD8D,EAAOvE,KAAKwwB,aAIxB47D,IACIllF,EAAS,cACV+hY,EAAW5tY,UAAW,kBAAc,GACvC+wF,IACIllF,EAAS,KACV+hY,EAAW5tY,UAAW,aAAS,GAClC+wF,IACIllF,EAAS,KACV+hY,EAAW5tY,UAAW,cAAU,GACnC+wF,IACIllF,GAAS,IACV+hY,EAAW5tY,UAAW,oBAAgB,GACzC+wF,IACIllF,EAAS,aACV+hY,EAAW5tY,UAAW,aAAS,GAClC+wF,IACIrkF,KAAYmyX,KACb+O,EAAW5tY,UAAW,cAAU,GACnC+wF,IACIrkF,KAAYkyX,KACbgP,EAAW5tY,UAAW,YAAQ,GACjC+wF,IACIrkF,KAAYoyX,KACb8O,EAAW5tY,UAAW,cAAU,GACnC+wF,IACIrkF,KAAYo0X,KACb8M,EAAW5tY,UAAW,aAAS,GAClC+wF,IACI/jF,OAAiBs0X,KAClBsM,EAAW5tY,UAAW,cAAU,GACnC+wF,IACIrkF,KAAY8zX,KACboN,EAAW5tY,UAAW,sBAAkB,GAC3C+wF,IACIrkF,KAAYk0X,KACbgN,EAAW5tY,UAAW,sBAAkB,GAC3C+wF,IACIrkF,KAAYk0X,KACbgN,EAAW5tY,UAAW,kBAAc,GACvC+wF,IACIllF,EAAS,OACV+hY,EAAW5tY,UAAW,kBAAc,GACvC+wF,IACIllF,EAAS,KACV+hY,EAAW5tY,UAAW,sBAAkB,GAC3C+wF,IACIllF,EAAS,IACV+hY,EAAW5tY,UAAW,cAAU,GACnC+wF,IACItjF,KACDmgY,EAAW5tY,UAAW,mBAAe,GACxC+wF,IACItjF,KACDmgY,EAAW5tY,UAAW,yBAAqB,GAC9C+wF,IACItjF,KACDmgY,EAAW5tY,UAAW,YAAQ,GACjC+wF,IACItjF,KACDmgY,EAAW5tY,UAAW,cAAU,GACnC+wF,IACItjF,KACDmgY,EAAW5tY,UAAW,oBAAgB,GACzC+wF,IACItjF,KACDmgY,EAAW5tY,UAAW,mBAAe,GACxC+wF,IACItjF,KACDmgY,EAAW5tY,UAAW,sBAAkB,GAC3C+wF,IACItjF,KACDmgY,EAAW5tY,UAAW,kBAAc,GACvC+wF,IACItjF,KACDmgY,EAAW5tY,UAAW,uBAAmB,GAC5C+wF,IACItjF,KACDmgY,EAAW5tY,UAAW,oBAAgB,GACzC4tY,EAAa78S,IACThjF,GACD6/X,IAEL97R,IC9dE29R,GAA+B,WAC/B,SAASA,KA4GT,OA1GAA,EAAczvY,UAAUmvY,oBAAsB,SAAU9mW,EAAY7iC,GAChE,IAAIuqT,EACAt/S,EACAI,EACW,aAAXrL,EAAE6F,MAAkC,cAAX7F,EAAE6F,MAE3BoF,GADAs/S,EAAWvqT,GACMu/D,eAAe,GAAGrK,QACnC7pD,EAAQk/S,EAAShrP,eAAe,GAAGpK,QACnCh2D,KAAK6pI,oBAAiB1uI,IAGtB+Q,EAAQrL,EAAEm1D,QACVlqD,EAAQjL,EAAEk1D,SAEd/1D,KAAKirT,WAAWvnR,EAAY53B,EAAOI,GACnC,IAAK,IAAI/P,EAAI,EAAGA,EAAIunC,EAAW3kB,OAAOtiB,OAAQN,IAAK,CAC/C,IAAI4iB,EAAS2kB,EAAW3kB,OAAO5iB,GAC3Bw5N,EAAcx5N,EACd4uY,EAAe,IAAInQ,GAEvB,IADAmQ,EAAe/qY,KAAKgrY,eAAetnW,EAAY1jC,KAAKkmO,OAAQlmO,KAAKmmO,OAAQpnN,EAAQ42M,IAChEz8L,UAAYna,EAAOkS,QAAQ6F,SAAiC,YAAtB/X,EAAOpa,WAA0B,CACpF3E,KAAKy0B,cAAciP,EAAY7iC,EAAGkqY,EAAa94X,MAAO0jN,EAAa52M,GACnE,MAEK/e,KAAK6pI,gBAAkB7pI,KAAK6pI,eAAe5pG,SAAWlhB,EAAOkS,QAAQhiB,UAC1EjP,KAAK6pI,eAAegnM,UACpB7wU,KAAK6pI,eAAe5pG,QAAS,GAExBlhB,EAAOkS,QAAQhiB,UACpBjP,KAAK6pI,eAAegnM,UAG5B,OAAO7wU,KAAK6pI,gBAEhBihQ,EAAczvY,UAAU4vT,WAAa,SAAUvnR,EAAY53B,EAAOI,GAC9D,IAAIwmB,EAAOgR,EAAW1iC,QAAQ4K,wBAC1Bm9D,EAAUvoE,SAASyuB,eAAeyU,EAAW1iC,QAAQsC,GAAK,QAAQsI,wBACtE5L,KAAKkmO,OAAUp6N,EAAQ4mB,EAAKlmB,KAAQH,KAAKC,IAAIy8D,EAAQv8D,KAAOkmB,EAAKlmB,KAAM,GACvExM,KAAKmmO,OAAUj6N,EAAQwmB,EAAKhmB,IAAOL,KAAKC,IAAIy8D,EAAQr8D,IAAMgmB,EAAKhmB,IAAK,IAExEo+X,EAAczvY,UAAUo5B,cAAgB,SAAUiP,EAAY7iC,EAAGoqY,EAAYtF,EAAa5mX,GACtF,IAAIq8M,EAASr8M,EAAOkY,OAAOg0W,GAAY3D,WACnC1kK,EAAS7jN,EAAOkY,OAAOg0W,GAAY9E,UACnC/1B,GAAeh1I,EAAS,SAA0BwH,EAAS,QAC3D8J,EAAehpM,EAAW3kB,OAAO4mX,GAAa1/J,OAAOlwN,OAAS,EAC9D7U,EAAMV,SAASyuB,eAAeyU,EAAW1iC,QAAQsC,GAAK,2BACtD7F,EAAkByD,KAClBA,EAAMC,EAAc,OAASmC,GAAIogC,EAAW1iC,QAAQsC,GAAK,0BACrDC,OAAQ,wDACZ/C,SAASyuB,eAAeyU,EAAW1iC,QAAQsC,GAAK,sBAAsB3B,YAAYT,IAEtFlB,KAAK6pI,eAAiB,IAAI57F,IACtBhO,QAAQ,EACRkmD,OAAQ,MAAQpnE,EAAOgY,KAAO,OAC9B6D,QAASw1U,EACTnrU,OAAQlmB,EAAOkS,QAAQgU,OACvB7G,KAAMsF,EAAWhO,WAAW9H,YAC5BpxB,MAAQ2pY,UAAWvjK,GACnB3zN,SAAU8P,EAAOkS,QAAQhiB,SACzBiqB,UAAYnsB,EAAG/M,KAAK2gV,UAAYj9S,EAAW1iC,QAAQmT,WAC/CnH,EAAGhN,KAAKugV,UAAY7zG,EAAehpM,EAAW1iC,QAAQoT,WAC1D+5N,QAAQ,EACRqkF,WAAY,IAAI4nE,GAAe12V,EAAW3N,OAAOhpB,EAAG22B,EAAW3N,OAAO/oB,EAAG02B,EAAW3N,OAAO/f,MAAO0tB,EAAW3N,OAAOhgB,QACpH4W,SAAU5N,EAAOqf,MAAQsF,EAAWoiW,aAAaH,EAAcjiW,EAAWoiW,aAAarpY,SACvFsyU,QAAS,UACT1zT,MAAOqoB,EAAWroB,QAEtBrb,KAAK6pI,eAAe+oG,UAAUtjN,WAAa,qCAC3CtvB,KAAK6pI,eAAev7F,SAASptC,IAEjC4pY,EAAczvY,UAAU2vY,eAAiB,SAAUtnW,EAAY32B,EAAGC,EAAG+R,EAAQ4mX,GAIzE,IAAK,IAHD/tW,EACAszW,EACAC,EACK1nX,EAAI,EAAGA,EAAI1E,EAAOkY,OAAOx6B,OAAQgnB,IAAK,CAC3CynX,EAAaxnW,EAAWwmW,aAAa15J,YAAYm1J,EAAaliX,GAC9DzjB,KAAK2gV,UAAYuqD,EAAWn+X,EAC5B/M,KAAKugV,UAAY2qD,EAAWl+X,EAC5B4qB,EAAanU,EACb,IAAI63B,EAAIvuC,EAAIm+X,EAAWn+X,EACnBuwB,EAAItwB,EAAIk+X,EAAWl+X,EAEvB,GADeX,KAAKE,IAAIF,KAAKQ,KAAMyuC,EAAIA,EAAMhe,EAAIA,IAClCve,EAAOknN,OAAOjwN,MAAO,CAChCm1X,EAAaD,EACbtzW,EAAanU,EACb,OAGR,OAASyV,SAAUiyW,EAAYl5X,MAAO2lB,IAK1CkzW,EAAczvY,UAAU0kC,cAAgB,WACpC,MAAO,iBAOX+qW,EAAczvY,UAAUiX,QAAU,SAAUoxB,KAKrConW,KC7GPM,GAAkC,WAClC,SAASA,IACLprY,KAAK6qY,gBAuXT,OArXAO,EAAiB/vY,UAAU01O,aAAe,SAAUrtM,GAGhD,OAFA1jC,KAAKowO,sBAAsB1sM,GAC3B1jC,KAAKqrY,YAAY3nW,GACV1jC,KAAKsrY,oBAEhBF,EAAiB/vY,UAAU+0O,sBAAwB,SAAU1sM,GACzD1jC,KACK6qY,gBACL,IAuBIU,EAGAl7J,EAzBAL,EAAStsM,EAAWusM,eACpBu7J,EAAmBx7J,EAAOj6N,OAC1B01X,EAAkBz7J,EAAOh6N,MACzB01X,EAAc17J,EAAO07J,YAAc,EAAI17J,EAAO07J,YAAc,EAC5Dx3X,EAAW87N,EAAO97N,SAAS0B,cAC3BmZ,EAAOihN,EAAOtvM,MAAMkyM,UAGpB+4J,EAAkB,EAClBC,EAAmB,EACnBj7J,EAAe,EACfk7J,EAAiBnoW,EAAW1O,cAAchf,OAAsC,EAA5B0tB,EAAWs5V,eAA6C,EAAtBhtJ,EAAO/qM,OAAOjvB,MACvE,EAA1B0tB,EAAWuB,OAAOjvB,OAGrBy5N,GAFkB/rM,EAAW1O,cAAcjf,OAAW2tB,EAAWs5V,eAAuBhtJ,EAAO/qM,OAAOjvB,MACnG0tB,EAAWuB,OAAOjvB,MACVg6N,EAAOP,UAClBC,EAAcM,EAAON,YACrB5U,EAAYjsM,GAAY6U,EAAWusM,eAAsB,MAAQ,KAAGlhN,GACpE+8W,EAAc,EACdC,EAAiB,EACjBC,EAAc,EACdC,EAAe,EAEfC,EAAgB,EAChBzvY,EAASinC,EAAW3kB,OAAOtiB,OAE/B,GAAIinC,EAAWusM,eAAen5M,SAAsB,IAAXr6B,EAAc,CAClC,WAAbyX,GAAsC,QAAbA,GAAmC,WAAbA,GAC1Cu7N,GAAYC,GAAiBD,GAAYC,EAC1CD,EAAWhzO,EAASizO,EAEH,MAAZD,GAAmC,MAAfC,EACzBD,EAAWhzO,EAASizO,EAEH,MAAZD,GAAmC,MAAfC,IACzBD,EAAW,GAEXA,IACA87J,EAAal/X,KAAK6lB,KAAKz1B,EAASgzO,MAI/BA,GAAYC,GAAiBD,GAAYC,EAC1CA,EAAcjzO,EAASgzO,EAEN,MAAZA,GAAmC,MAAfC,EACzBA,EAAcjzO,EAASgzO,EAEN,MAAZA,GAAmC,MAAfC,IACzBA,EAAc,GAEdA,IACA67J,EAAa77J,IAGrB,IAAK,IAAIvzO,EAAI,EAAGA,EAAIM,EAAQN,IAAK,CAC7B6D,KAAK6qY,aAAarmY,MACdsqB,KAAM4U,EAAW3kB,OAAO5iB,GAAS,KAAIunC,EAAW3kB,OAAO5iB,GAAS,KAAI,SAAWA,EAC/Ew5N,YAAax5N,EACbg9B,MAAOuK,EAAWusM,eAAe92M,MACjCiF,KAAMsF,EAAW3kB,OAAO5iB,GAAGiiC,MAAQsF,EAAWoiW,aAAa3pY,EAAIunC,EAAWoiW,aAAarpY,QACvFs5B,OAAQ,OAEZ,IAAIo2W,EAAansY,KAAKosY,eAAe1oW,EAAY1jC,KAAK6qY,aAAa1uY,IACnEwvY,EAAkBt/X,KAAKC,IAAI6/X,EAAkB,MAAGR,GAChDC,EAAmBv/X,KAAKC,IAAI6/X,EAAmB,OAAGP,GAClD5rY,KAAK6qY,aAAa1uY,GAAW,QAAM6Z,MAAO21X,EAAiB51X,OAAQ61X,GACnEM,GAAgC,EAChCF,EAAcA,EAAcL,EAAkBD,EAC9CO,EAAe5/X,KAAKC,IAAIs/X,EAAkBK,GACzB,QAAb/3X,GAAmC,WAAbA,GAAsC,WAAbA,GAC3C83X,EAAcH,IACdG,GAAeG,EAAWn2X,MAAQ01X,EAClCI,EAAcz/X,KAAKC,IAAIw/X,EAAaE,GACpCA,EAAcG,EAAWn2X,MAAQ01X,EACjCK,EAAiBA,EAAiBE,EAAeP,GAGrDQ,IAAkBX,GAAcpvY,IAAMM,EAAS,IAC/CqvY,EAAcz/X,KAAKC,IAAIw/X,EAAaE,GAEpCr7J,EADAo7J,EAAiBA,EAAiBE,EAAeP,EAEjDQ,EAAgB,EAChBD,EAAe,EACfD,EAAc,GAMtB37J,GAAiBtjO,EAAG,EAAGC,EAAG,EAAGgJ,MAHpB8kN,EAAe,MAAIgxK,EAAcJ,EAAe5wK,EAAU9kN,MAAQwkD,GAAckxU,EACrFI,EAActxU,GAAyC,EAA1B92B,EAAWuB,OAAOjvB,MAERD,OADlC46N,EAAejtM,EAAWs5V,gBAGvCh9X,KAAKsrY,mBAAqBj7J,EACH,MAAnBo7J,IACAzrY,KAAKsrY,mBAAmBt1X,MAAQy1X,GAEZ,MAApBD,IACAxrY,KAAKsrY,mBAAmBv1X,OAASy1X,IAGzCJ,EAAiB/vY,UAAU+wY,eAAiB,SAAU1oW,EAAY3kB,GAC9D,IAAIixN,EAAStsM,EAAWusM,eACpBs6D,EAAcv6D,EAAOq8J,UAAUr2X,MAC/Bs2X,EAAet8J,EAAOq8J,UAAUt2X,OAChCinB,EAAWnO,GAAY9P,EAAO+P,KAAMkhN,EAAO4C,WAG/C,OAAS58N,MAFGu0R,EAAcvtQ,EAAShnB,MAAQg6N,EAAOyB,aAE3B17N,OADV1J,KAAKC,IAAIggY,EAActvW,EAASjnB,UAIjDq1X,EAAiB/vY,UAAUgwY,YAAc,SAAU3nW,GAC/C,IAKIrE,EACAC,EANA0wM,EAAStsM,EAAWusM,eACpBs8J,EAAiBv8J,EAAO97N,SAAS0B,cACjCoyC,EAAYgoL,EAAOhoL,UACnBqoL,EAAerwO,KAAKsrY,mBACpB1sW,EAAW,EAGX4tW,EAAY9oW,EAAWhD,MAAM3R,KAAO2U,EAAWhD,MAAM3R,KAAO2U,EAAWhD,MAAMkyM,UAC7E65J,EAAwB59W,GAAY6U,EAAWhD,MAAM5R,KAAM09W,GAAWz2X,OACtE22X,EAA2B79W,GAAY6U,EAAWhD,MAAMg9V,SAAS5uW,KAAM4U,EAAWhD,MAAMg9V,SAAS9qJ,WAAW78N,OAC5GinX,EAAiBt5V,EAAWs5V,eAC5BrxX,EAAS8gY,EAAwBC,EAA2B1P,EAAiBt5V,EAAWzG,OAAOvwB,IAC/Fg/X,EAAc17J,EAAO07J,YAAc,EAAI17J,EAAO07J,YAAc,EAC5DG,EAAiBnoW,EAAW1O,cAAchf,MAC1C22X,EAAkBjpW,EAAW1O,cAAcjf,OAC3CqnX,EAAeptJ,EAAO/qM,OAAOjvB,MAC7B46N,EAAc,EAEdg8J,EADY/9W,GAAYmhN,EAAc,MAAQ,KAAGA,EAAOtvM,MAAMkyM,WAChC78N,OAC9B82X,EAAanpW,EAAWuB,OAAOjvB,MAC/B82X,EAAWjB,EAAgC,EAAbgB,EAC9BE,EAAYJ,EAAiC,EAAbE,EAEpC,GADAx8J,EAAat6N,QAAU62X,EACA,WAAnBL,EAA6B,CAC7B,OAAQA,GACJ,IAAK,SACDl8J,EAAarjO,EAAI+/X,GAAa18J,EAAat6N,SAA0BinX,GACrE,MACJ,IAAK,MACD3sJ,EAAarjO,EAAI6/X,EAAalhY,EAC9B,MACJ,IAAK,QACD0kO,EAAatjO,EAAI+/X,EAAWz8J,EAAar6N,MAA0B,EAAjBgnX,EAClD,MACJ,IAAK,OACD3sJ,EAAatjO,EAAI8/X,EAA+B,EAAjB7P,EAGvC,GAAuB,SAAnBuP,GAAgD,UAAnBA,EAC7B,OAAQvkV,GACJ,IAAK,SACDqoL,EAAarjO,EAAK+/X,EAAY,GAAO18J,EAAat6N,OAAwB,EAAfqnX,GAAoB,EAAMJ,EAAiB,EACtG,MACJ,IAAK,OACD3sJ,EAAarjO,EAAI6/X,EAA+B,EAAjB7P,EAAsBrxX,EACrD,MACJ,IAAK,MACD0kO,EAAarjO,EAAI+/X,GAAa18J,EAAat6N,UAA6C,EAAjBinX,OAK/E,OAAQh1U,GACJ,IAAK,SACDqoL,EAAatjO,EAAK+/X,EAAW,GAAOz8J,EAAar6N,MAAuB,EAAfonX,GAAoB,EAAMJ,EAAiB,EACpG,MACJ,IAAK,OACD3sJ,EAAatjO,EAAI8/X,EAA+B,EAAjB7P,EAC/B,MACJ,IAAK,MACD3sJ,EAAatjO,EAAI+/X,GAAYz8J,EAAar6N,SAA4C,EAAjBgnX,QAMjF3sJ,EAAarjO,EAAKgjO,EAAO92M,SAASlsB,EAAI+/X,EAAa/8J,EAAO92M,SAASlsB,EAAI,EACvEqjO,EAAatjO,EAAKijO,EAAO92M,SAASnsB,EAAI+/X,EAAY98J,EAAO92M,SAASnsB,EAAI,EAE1E,GAAuB,WAAnBw/X,GAAkD,QAAnBA,EAC/B,IAAK,IAAIpwY,EAAI,EAAGA,EAAI6D,KAAK6qY,aAAapuY,OAAQN,IAE1C,IADAy0O,GAAe5wO,KAAK6qY,aAAa1uY,GAAG45B,OAAO/f,MAAQ01X,GACjCoB,EAAU,CACxBz8J,EAAatjO,EAAK+/X,EAAW,GAAOz8J,EAAar6N,MAAuB,EAAfonX,GAAoB,EAAMJ,EAAiB,EACpG,MAIZ,IAAIgQ,EAAatpW,EAAW3T,SAAS+9C,aAAcxqE,GAAMogC,EAAW1iC,QAAQsC,GAAK,kBACjFogC,EAAWlT,UAAU7uB,YAAYqrY,GACjChtY,KAAKitY,gBAAkBvpW,EAAW3T,SAAS+9C,aAAcxqE,GAAMogC,EAAW1iC,QAAQsC,GAAK,qBACvF,IAAIw4N,EAAWz8L,EAAS29V,EACpBkQ,EAAW5tW,EAAS09V,EACE,KAAtBhtJ,EAAOtvM,MAAM5R,MAAekhN,EAAOtvM,MAAM5J,UACzCk2W,EAAWrrY,YAAY3B,KAAKmtY,gBAAgBzpW,EAAYssM,EAAQK,EAAc28J,IAC9EE,EAAW5tW,EAAS09V,EAAiB4P,GAEzC,IAAK,IAAIvmX,EAAI,EAAGA,EAAIrmB,KAAK6qY,aAAapuY,OAAQ4pB,MACrC2pN,EAAOP,SAAWO,EAAON,aAAeM,EAAOP,WAAaO,EAAON,cAChD,QAAnB68J,GAA+C,WAAnBA,GAAkD,WAAnBA,GAUtDW,EAAWltY,KAAK6qY,aAAaxkX,GAAW,OAAEtQ,OAAS21X,EACrDkB,EAAoBC,EAAax8J,EAAat6N,OAASupB,IACvD4tW,EAAW5tW,EACXw8L,GAAYl9L,KAEhB5+B,KAAKmxO,YAAcnxO,KAAKotY,eAAe1pW,EAAYssM,EAAQhwO,KAAK6qY,aAAaxkX,GAAIA,MAA2BgqN,GAC5G28J,EAAWrrY,YAAY3B,KAAKmxO,aAC5B+7J,GAAYltY,KAAK6qY,aAAaxkX,GAAW,OAAEtQ,OAAS21X,EACpD9sW,EAAWvyB,KAAKC,IAAIsyB,EAAU5+B,KAAK6qY,aAAaxkX,GAAW,OAAErQ,SAjBxD8lN,EAAW97N,KAAK6qY,aAAaxkX,GAAW,OAAErQ,MAASq6N,EAAar6N,MAAQqpB,IACzEy8L,EAAWkhK,EACXkQ,GAAYltY,KAAK6qY,aAAaxkX,GAAW,OAAEtQ,OAAS21X,GAExD1rY,KAAKmxO,YAAcnxO,KAAKotY,eAAe1pW,EAAYssM,EAAQhwO,KAAK6qY,aAAaxkX,GAAIA,EAAGy1M,IAAsBuU,GAC1G28J,EAAWrrY,YAAY3B,KAAKmxO,aAC5BrV,GAAY97N,KAAK6qY,aAAaxkX,GAAW,OAAErQ,MAAQ01X,GAc3DsB,EAAWxpY,aAAa,YAAa,aAAe6sO,EAAatjO,EAAEG,WAAa,IAAMmjO,EAAarjO,EAAEE,WAAa,KAClHlN,KAAKqtY,iBAAiBL,EAAYtpW,EAAYssM,EAAQK,IAE1D+6J,EAAiB/vY,UAAUgyY,iBAAmB,SAAUL,EAAYtpW,EAAYssM,EAAQK,GACpF,IAAIy5J,EAAa,IAAI9sK,GAAWt5L,EAAW1iC,QAAQsC,GAAK,kBAAwB,OAAQ0sO,EAAO/qM,OAAQ,EAAG,IAAIm1V,GAAe,EAAG,EAAG/pJ,EAAar6N,MAAOq6N,EAAat6N,SACpKi3X,EAAWrrY,YAAY+hC,EAAW3T,SAASuU,cAAcwlW,KAE7DsB,EAAiB/vY,UAAU8xY,gBAAkB,SAAUzpW,EAAYssM,EAAQK,EAAc28J,GACrF,IAAIhQ,EAAiBt5V,EAAWs5V,eAC5BliK,EAAYjsM,GAAYmhN,EAAOtvM,MAAM5R,KAAMkhN,EAAOtvM,MAAMkyM,WACxD06J,EAAaxyK,EAAU9kN,MACvB0yS,EAAc5tF,EAAU/kN,OACxBorB,EAAgB6uM,EAAOtvM,MAAMS,cAC7B9B,EAAS,EACTkuW,EAAoBl9J,EAAar6N,MACjCspB,EAAS09V,EAAkBt0E,EAAc,EAC7C,OAAQvnR,GACJ,IAAK,MACD9B,EAASkuW,EAAoBD,EAAajuW,EAC1C,MACJ,IAAK,SACDA,EAASkuW,EAAoB,EAAI,EAAe,EAGpDluW,EAAS,IACTA,EAAS,EACTkuW,EAAoBD,GAEpBC,EAAoBD,EAAajuW,IACjCkuW,EAAoBD,EAAajuW,GAErC,IACIr+B,EAAUkjC,GADA,IAAItO,GAAW8N,EAAW1iC,QAAQsC,GAAK,mBAAoB+7B,EAAQC,EAAQ,QAAS0wM,EAAOtvM,MAAM5R,MACtEkhN,EAAOtvM,MAAMkyM,UAAWlvM,EAAWhO,WAAWrI,YAAa2/W,GAEpG,OADAhsY,EAAQwC,aAAa,aAAcwsO,EAAOtvM,MAAMszB,aAAeg8K,EAAOtvM,MAAM5R,MACrE9tB,GAEXoqY,EAAiB/vY,UAAU+xY,eAAiB,SAAU1pW,EAAYssM,EAAQ66J,EAAcxkX,EAAGtZ,EAAGC,EAAGqjO,GAC7F,IAAIn3M,EAIAs8P,EAFAj4L,EAASyyI,EAAOq8J,UACFr8J,EAAO07J,YAEhBr/X,KAAKQ,KAAK0wF,EAAc,MAAIA,EAAc,MAAIA,EAAe,OAAIA,EAAe,QACzFi4L,EAAa3mQ,GAAYg8W,EAAmB,KAAG76J,EAAO4C,WAAW78N,OACjEmjB,GACInsB,EAAGA,EAAIwwF,EAAc,MAAI,EACzBvwF,EAAIA,GAAKwoR,EAAaj4L,EAAe,OAAIi4L,EAAaj4L,EAAe,QAAK,GAE9E,IAAI4zI,EAAcztM,EAAW3T,SAAS+9C,aAAcxqE,GAAIogC,EAAW1iC,QAAQsC,GAAK,cAAqB+iB,EAAEnZ,aACvGikO,EAAmB,MAAU,OAAInB,EAAO+B,iBAAmB,UAAY,UACvE,IAAI6yG,GAAoB91T,KAAM+7W,EAAmB,KAAGzsW,KAAMysW,EAAmB,KACzE1xW,MAAO0xW,EAAoB,MAAG9zW,KAAM,eAAgBsB,QAAQ,GAChEqL,EAAWhd,QAAQ,eAAgBk+T,GACnC,IAAIzrT,EAAQn5B,KAAKwtY,gBAAgB9pW,EAAYmnW,EAAc3xW,EAASnsB,EAAGmsB,EAASlsB,EAAGqZ,EAAG2pN,EAAQ40G,GAC9FzzG,EAAYxvO,YAAYw3B,GACxB,IAAInmB,EAAU,IAAI4iB,GAAW8N,EAAW1iC,QAAQsC,GAAK,kBAAoB+iB,EAAEnZ,WAAYgsB,EAASnsB,EAAIwwF,EAAc,MAAI,EAAIyyI,EAAOyB,aAAcv4M,EAASlsB,EAAIwoR,EAAa,EAAG,QAASovD,EAAgB91T,MACjM9tB,EAAUkjC,GAAkBlxB,EAASg9N,EAAO4C,UAAWlvM,EAAWhO,WAAWrI,YAAa8jN,GAI9F,OAHAnwO,EAAQwC,aAAa,aAAcwsO,EAAOh8K,aAAe,6BAA+BhhD,EAAQ8b,KAAO,WACvGqiN,EAAYxvO,YAAYX,GACxBhB,KAAKitY,gBAAgBtrY,YAAYwvO,GAC1BnxO,KAAKitY,iBAEhB7B,EAAiB/vY,UAAUmyY,gBAAkB,SAAU9pW,EAAYmnW,EAAcrxW,EAAMC,EAAMxnB,EAAO+9N,EAAQ40G,GACxG,IAAI5jV,EACA+kY,EACA/rE,EACA98S,EACAqgF,EAASyyI,EAAOq8J,UAChBr2X,EAAQunF,EAAc,MACtBxnF,EAASwnF,EAAe,OACxBxwF,EAAIysB,GAASxjB,EAAQ,EAErBivB,GAAWpP,MAAO0nE,EAAOt4D,OAAOpP,MAAO7f,MAAOunF,EAAOt4D,OAAOjvB,OAE5DooB,EAAgD,YAAxCsF,EAAW3kB,OAAO9M,GAAOtN,WAA4BigV,EAAgBxmT,KAAO,OACpFjF,EAAQyrT,EAAgBzrT,MAAMvjB,cAC9BhJ,EAASP,KAAKQ,KAAKkJ,EAASA,EAASC,EAAQA,GAAS,EAC1D,OAAQmjB,GACJ,IAAK,SACD4sW,EAAgB,IAAI9oK,GAAav5L,EAAW1iC,QAAQsC,GAAK,uBAA8B2O,EAAM/E,WAAYkxB,EAAM6G,EANzG,EAM0HzL,EAAMC,EAAM7sB,EAAQ,MACpJ5L,EAAU0iC,EAAW3T,SAASsU,WAAW0hW,GACzC,MACJ,IAAK,YACD7oX,EAAO,KAAYnQ,EAAI,KAAO0sB,GAAS1jB,EAAS,GAAM,OACpCC,EAAQ,EAAKwjB,GAAQ,KAAOC,GAAS1jB,EAAS,GAAM,OACrDyjB,EAAQxjB,EAAQ,GAAM,KAAOyjB,EAAQ1jB,EAAS,GAAM,MACrDhJ,EAAI,KAAO0sB,EAAQ1jB,EAAS,GAAM,MAClChJ,EAAI,KAAO0sB,GAAS1jB,EAAS,GAAM,KACnDikT,EAAc,IAAIvkS,GAAWiO,EAAW1iC,QAAQsC,GAAK,uBAA8B2O,EAAM/E,WAAYkxB,EAAM6G,EAAOjvB,MAAOivB,EAAOpP,MAAO,EAAG,GAAI3Y,GAC9Ilc,EAAU0iC,EAAW3T,SAASyF,SAASwkS,GACvC,MACJ,IAAK,UACD98S,EAAO,KAAYnQ,EAAI,IAAM0sB,EAAO,MACpBD,EAAO,KAAOC,GAAS1jB,EAAS,GAAM,OACpCC,EAAQ,EAAKwjB,GAAQ,IAAMC,EAAO,MACpCD,EAAO,KAAOC,EAAQ1jB,EAAS,GAAM,MACrChJ,EAAI,IAAM0sB,EAAO,KACjCugS,EAAc,IAAIvkS,GAAWiO,EAAW1iC,QAAQsC,GAAK,uBAA8B2O,EAAM/E,WAAYkxB,EAAM6G,EAAOjvB,MAAOivB,EAAOpP,MAAO,EAAG,GAAI3Y,GAC9Ilc,EAAU0iC,EAAW3T,SAASyF,SAASwkS,GACvC,MACJ,IAAK,WAED,IAAK,IAAIv2S,EAAI,EAAGA,GAAK,EAAGA,IAAK,CACzB,IAAImO,EAAShlB,EAASP,KAAKwV,IAAKxV,KAAKkR,GAAK,KAFrC,GAE6CkG,IAC9CsW,EAASntB,EAASP,KAAKyV,IAAKzV,KAAKkR,GAAK,KAHrC,GAG6CkG,IAE9CvG,EADM,IAANuG,EACO,MAAamO,EAAS4H,GAAQ,KAAOC,EAAOM,GAAU,IAGtD7c,EAAK1C,OAAO,MAAagf,EAAO5H,GAAU,KAAO6H,EAAOM,GAAU,KAGjF7c,EAAOA,EAAK1C,OAAO,KACnBw/S,EAAc,IAAIvkS,GAAWiO,EAAW1iC,QAAQsC,GAAK,uBAA8B2O,EAAM/E,WAAYkxB,EAAM6G,EAAOjvB,MAAOivB,EAAOpP,MAAO,EAAG,GAAI3Y,GAC9Ilc,EAAU0iC,EAAW3T,SAASyF,SAASwkS,GACvC,MACJ,IAAK,WACD98S,EAAO,KAAYnQ,EAAI,KAAQgJ,EAAS,EAAK0jB,GAAQ,MACrCD,EAAO,KAAOC,GAAS1jB,EAAS,GAAM,OACrCyjB,EAAQxjB,EAAQ,GAAM,KAAOyjB,EAAQ1jB,EAAS,GAAM,MACrDhJ,EAAI,KAAO0sB,EAAQ1jB,EAAS,GAAM,KAClDikT,EAAc,IAAIvkS,GAAWiO,EAAW1iC,QAAQsC,GAAK,uBAA8B2O,EAAM/E,WAAYkxB,EAAM6G,EAAOjvB,MAAOivB,EAAOpP,MAAO,EAAG,GAAI3Y,GAC9Ilc,EAAU0iC,EAAW3T,SAASyF,SAASwkS,GAG/C,OAAOh5T,GAKXoqY,EAAiB/vY,UAAU0kC,cAAgB,WACvC,MAAO,oBAOXqrW,EAAiB/vY,UAAUiX,QAAU,SAAUoxB,KAKxC0nW,KC5XPv/S,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAS5DqwW,GAAiC,SAAU/gT,GAE3C,SAAS+gT,IACL,OAAkB,OAAX/gT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAU4hT,EAAiB/gT,GAI3BN,IACIllF,EAAS,KACVumY,EAAgBpyY,UAAW,aAAS,GACvC+wF,IACIllF,EAAS,IACVumY,EAAgBpyY,UAAW,aAAS,GAChCoyY,GACTjtU,IAKEktU,GAA+B,SAAUhhT,GAEzC,SAASghT,IACL,OAAkB,OAAXhhT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBA6rF,GAAU6hT,EAAehhT,GAIzBN,IACIllF,EAAS,OACVwmY,EAAcryY,UAAW,YAAQ,GACpC+wF,IACIllF,EAAS,OACVwmY,EAAcryY,UAAW,aAAS,GACrC+wF,IACIllF,EAAS,uCACVwmY,EAAcryY,UAAW,kBAAc,GAC1C+wF,IACIllF,EAAS,OACVwmY,EAAcryY,UAAW,kBAAc,GAC1C+wF,IACIllF,EAAS,OACVwmY,EAAcryY,UAAW,iBAAa,GACzC+wF,IACIllF,EAAS,IACVwmY,EAAcryY,UAAW,eAAW,GAChCqyY,GACTltU,IAKEmtU,GAAmC,SAAUjhT,GAE7C,SAASihT,IACL,OAAkB,OAAXjhT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAU8hT,EAAmBjhT,GAI7BN,IACIllF,GAAS,IACVymY,EAAkBtyY,UAAW,eAAW,GAC3C+wF,IACIllF,EAAS,OACVymY,EAAkBtyY,UAAW,aAAS,GACzC+wF,IACIllF,EAAS,IACVymY,EAAkBtyY,UAAW,aAAS,GAClCsyY,GACTntU,IAKEotU,GAA0C,SAAUlhT,GAEpD,SAASkhT,IACL,OAAkB,OAAXlhT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBA6rF,GAAU+hT,EAA0BlhT,GAIpCN,IACIllF,GAAS,IACV0mY,EAAyBvyY,UAAW,eAAW,GAClD+wF,IACIllF,EAAS,KACV0mY,EAAyBvyY,UAAW,YAAQ,GAC/C+wF,IACIllF,EAAS,KACV0mY,EAAyBvyY,UAAW,gBAAY,GACnD+wF,IACIllF,EAAS,KACV0mY,EAAyBvyY,UAAW,cAAU,GACjD+wF,IACIrkF,GAAU8tB,MAAO,UAAW7f,MAAO,IAAOy3X,KAC3CG,EAAyBvyY,UAAW,cAAU,GACjD+wF,IACIrkF,GAAUonB,KAAM,OAAQC,WAAY,SAAUC,UAAW,SAAUC,WAAY,sCAAwCo+W,KACxHE,EAAyBvyY,UAAW,iBAAa,GACpD+wF,IACIrkF,KAAY4lY,KACbC,EAAyBvyY,UAAW,yBAAqB,GACrDuyY,GACTptU,IAKEqtU,GAA+B,SAAUnhT,GAEzC,SAASmhT,IACL,OAAkB,OAAXnhT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAUgiT,EAAenhT,GAIzBN,IACIllF,EAAS,gBACV2mY,EAAcxyY,UAAW,kBAAc,GAC1C+wF,IACIrkF,KAAY0lY,KACbI,EAAcxyY,UAAW,cAAU,GAC/BwyY,GACTrtU,IAKEstU,GAA8B,SAAUphT,GAExC,SAASohT,IACL,OAAkB,OAAXphT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBA6rF,GAAUiiT,EAAcphT,GAIxBN,IACIllF,GAAS,IACV4mY,EAAazyY,UAAW,eAAW,GACtC+wF,IACIllF,EAAS,OACV4mY,EAAazyY,UAAW,aAAS,GACpC+wF,IACIllF,EAAS,KACV4mY,EAAazyY,UAAW,iBAAa,GACxC+wF,IACIllF,EAAS,IACV4mY,EAAazyY,UAAW,aAAS,GACpC+wF,IACIllF,EAAS,IACV4mY,EAAazyY,UAAW,eAAW,GAC/ByyY,GACTttU,IAKEutU,GAAmC,SAAUrhT,GAE7C,SAASqhT,IACL,OAAkB,OAAXrhT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAUkiT,EAAmBrhT,GAI7BN,IACIllF,EAAS,OACV6mY,EAAkB1yY,UAAW,kBAAc,GAC9C+wF,IACIllF,EAAS,OACV6mY,EAAkB1yY,UAAW,gBAAY,GAC5C+wF,IACIllF,EAAS,OACV6mY,EAAkB1yY,UAAW,aAAS,GACzC+wF,IACIllF,EAAS,OACV6mY,EAAkB1yY,UAAW,eAAW,GACpC0yY,GACTvtU,IAKEwtU,GAA8B,SAAUthT,GAExC,SAASshT,IACL,OAAkB,OAAXthT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBA6rF,GAAUmiT,EAActhT,GAIxBN,IACIllF,EAAS,OACV8mY,EAAa3yY,UAAW,YAAQ,GACnC+wF,IACIllF,EAAS,OACV8mY,EAAa3yY,UAAW,YAAQ,GACnC+wF,IACIllF,EAAS,OACV8mY,EAAa3yY,UAAW,YAAQ,GACnC+wF,IACIllF,EAAS,OACV8mY,EAAa3yY,UAAW,YAAQ,GACnC+wF,IACIllF,EAAS,IACV8mY,EAAa3yY,UAAW,aAAS,GACpC+wF,IACIrkF,KAAY+lY,KACbE,EAAa3yY,UAAW,oBAAgB,GACpC2yY,GACTxtU,IAKEytU,GAAyB,SAAUvhT,GAEnC,SAASuhT,IACL,OAAkB,OAAXvhT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAUoiT,EAASvhT,GAInBN,IACIllF,EAAS,IACV+mY,EAAQ5yY,UAAW,YAAQ,GAC9B+wF,IACIllF,EAAS,IACV+mY,EAAQ5yY,UAAW,aAAS,GAC/B+wF,IACIllF,EAAS,IACV+mY,EAAQ5yY,UAAW,cAAU,GAChC+wF,IACIllF,EAAS,IACV+mY,EAAQ5yY,UAAW,WAAO,GACtB4yY,GACTztU,IAKE0tU,GAAyC,SAAUxhT,GAEnD,SAASwhT,IACL,OAAkB,OAAXxhT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBA6rF,GAAUqiT,EAAyBxhT,GAInCN,IACIllF,OACDgnY,EAAwB7yY,UAAW,eAAW,GACjD+wF,IACIllF,EAAS,IACVgnY,EAAwB7yY,UAAW,eAAW,GACjD+wF,IACIllF,EAAS,IACVgnY,EAAwB7yY,UAAW,YAAQ,GAC9C+wF,IACIllF,EAAS,YACVgnY,EAAwB7yY,UAAW,YAAQ,GAC9C+wF,IACIrkF,GAAUiO,MAAO,GAAKy3X,KACvBS,EAAwB7yY,UAAW,cAAU,GACzC6yY,GACT1tU,IAKE2tU,GAA6B,SAAUzhT,GAEvC,SAASyhT,IACL,OAAkB,OAAXzhT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAUsiT,EAAazhT,GAIvBN,IACIllF,EAAS,IACVinY,EAAY9yY,UAAW,SAAK,GAC/B+wF,IACIllF,EAAS,IACVinY,EAAY9yY,UAAW,SAAK,GACxB8yY,GACT3tU,IAKE4tU,GAA4C,SAAU1hT,GAEtD,SAAS0hT,IACL,OAAkB,OAAX1hT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBA6rF,GAAUuiT,EAA4B1hT,GAItCN,IACIllF,OACDknY,EAA2B/yY,UAAW,eAAW,GACpD+wF,IACIllF,EAAS,IACVknY,EAA2B/yY,UAAW,eAAW,GACpD+wF,IACIllF,EAAS,gBACVknY,EAA2B/yY,UAAW,YAAQ,GACjD+wF,IACIllF,EAAS,KACVknY,EAA2B/yY,UAAW,cAAU,GACnD+wF,IACIrkF,GAAU8tB,MAAO,cAAe7f,MAAO,GAAKy3X,KAC7CW,EAA2B/yY,UAAW,cAAU,GACnD+wF,IACIrkF,GAAUonB,KAAM,OAAQC,WAAY,SAAUC,UAAW,SAAUC,WAAY,sCAAwCo+W,KACxHU,EAA2B/yY,UAAW,iBAAa,GACtD+wF,IACIrkF,KAAYomY,KACbC,EAA2B/yY,UAAW,cAAU,GAC5C+yY,GACT5tU,ItUrTEqrB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAkBxCz8D,GAAsB,WAKtB,OAJA,SAAczZ,EAAOD,GACjB/V,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAwClBwf,GAAsB,WAOtB,OANA,SAAcxoB,EAAGC,EAAGgJ,EAAOD,GACvB/V,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MASlB0f,GAA4B,WAU5B,OATA,SAAoBnyB,EAAI86B,EAAMpoB,EAAO6f,EAAOpoB,EAASqmD,EAAWh6B,GAC5D95B,KAAKsD,GAAKA,EACVtD,KAAKo+B,KAAOA,EACZp+B,KAAKyN,QAAUA,EACfzN,KAAK,gBAAkBgW,EACvBhW,KAAKs+B,OAASzI,EACd71B,KAAK85B,EAAIA,EACT95B,KAAK,oBAAsB8zD,MAS/BkpK,GAA4B,SAAUtwI,GAEtC,SAASswI,EAAW15N,EAAI86B,EAAM6G,EAAQx3B,EAASilB,EAAM27W,EAAIC,EAAIC,EAAIC,QAClD,IAAPH,IAAiBA,EAAK,QACf,IAAPC,IAAiBA,EAAK,QACf,IAAPC,IAAiBA,EAAK,QACf,IAAPC,IAAiBA,EAAK,GAC1B,IAAIzuY,EAAQ2sF,EAAOprF,KAAKtB,KAAMsD,EAAI86B,EAAM6G,EAAOjvB,MAAOivB,EAAOpP,MAAOpoB,IAAYzN,KAMhF,OALAD,EAAM2yB,KAAOA,EACb3yB,EAAMwkC,QAAU8pW,EAChBtuY,EAAMykC,SAAW8pW,EACjBvuY,EAAM0kC,WAAa8pW,EACnBxuY,EAAM2kC,YAAc8pW,EACbzuY,EAEX,OAdA8rF,GAAUmxI,EAAYtwI,GAcfswI,GACTvnM,IAMEwnM,GAA8B,SAAUvwI,GAExC,SAASuwI,EAAa35N,EAAI86B,EAAM6G,EAAQx3B,EAASmsB,EAAIC,EAAIuD,EAAG02B,GACxD,IAAI/zD,EAAQ2sF,EAAOprF,KAAKtB,KAAMsD,EAAI86B,EAAM6G,EAAOjvB,MAAOivB,EAAOpP,MAAOpoB,IAAYzN,KAKhF,OAJAD,EAAM85B,GAAKA,EACX95B,EAAM65B,GAAKA,EACX75B,EAAMq9B,EAAIA,EACVr9B,EAAM,oBAAsB+zD,EACrB/zD,EAEX,OATA8rF,GAAUoxI,EAAcvwI,GASjBuwI,GACTxnM,IAiFEG,GAA4B,WAa5B,OAZA,SAAoBtyB,EAAIyJ,EAAGC,EAAG6G,EAAQib,EAAM6Q,EAAUtyB,QAChC,IAAdA,IAAwBA,EAAY,IACxCrN,KAAKqN,UAAY,GACjBrN,KAAK2/B,SAAW,OAChB3/B,KAAKsD,GAAKA,EACVtD,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAK6T,OAASA,EACd7T,KAAK8uB,KAAOA,EACZ9uB,KAAKqN,UAAYA,EACjBrN,KAAK2/B,SAAWA,MuUnNpB8uW,GAAmC,WAKnC,SAASA,EAAkBtqW,GACvBnkC,KAAKmkC,UAAYA,EAuvBrB,OAlvBAsqW,EAAkBpzY,UAAUilF,YAAc,SAAU9jF,QACnC,IAATA,IAAmBA,EAAOwD,KAAKmkC,UAAU2gC,YACxC9kE,KAAKmkC,UAAU2gC,WAAWroE,SAGrB09C,MAAM39C,EAAK,KAAoC,YAA7BwD,KAAKmkC,UAAU7S,UAIvCtxB,KAAK,UAAYA,KAAKmkC,UAAU7S,aAHhCtxB,KAAKmkC,UAAUuqW,cAAgBlyY,EAKnCwD,KAAK2uY,oBAKTF,EAAkBpzY,UAAUuzY,gBAAkB,SAAUpyY,EAAMuQ,EAAGC,GAC7D,IAAIjN,EAAQC,UACC,IAATxD,IAAmBA,EAAOwD,KAAKmkC,UAAU2gC,iBACnC,IAAN/3D,IAAgBA,EAAI/M,KAAKmkC,UAAUkkM,YAC7B,IAANr7N,IAAgBA,EAAIhN,KAAKmkC,UAAU3R,OACvC,IAAI6G,KACA7C,KACJh6B,EAAK4C,QAAQ,SAAUpC,EAAOiV,IACS,IAA/BukB,EAAQj4B,QAAQvB,EAAM+P,KACtBypB,EAAQhyB,KAAKxH,EAAM+P,IAEvB,IAAIisP,KACJA,EAAYj5P,EAAMokC,UAAUkkM,OAAS7xM,EAAQj4B,QAAQvB,EAAM+P,IAC3DisP,EAAYj5P,EAAMokC,UAAU3R,OAASx1B,EAAMgQ,GAC3CqsB,EAAK70B,KAAKw0P,KAEdh5P,KAAKmkC,UAAUuqW,cAAgBr1W,GAKnCo1W,EAAkBpzY,UAAUwzY,gBAAkB,SAAUryY,EAAMuQ,EAAGC,QAChD,IAATxQ,IAAmBA,EAAOwD,KAAKmkC,UAAU2gC,iBACnC,IAAN/3D,IAAgBA,EAAI/M,KAAKmkC,UAAUkkM,YAC7B,IAANr7N,IAAgBA,EAAIhN,KAAKmkC,UAAU3R,OACvC,IAAI6G,KACJ78B,EAAK4C,QAAQ,SAAUpC,EAAOiV,GAC1B,IAAI+mP,KACJA,EAAYjsP,GAAK/P,EAAM+P,GAAGsT,UAC1B24O,EAAYhsP,GAAKhQ,EAAMgQ,GACvBqsB,EAAK70B,KAAKw0P,KAEdh5P,KAAKmkC,UAAUuqW,cAAgBr1W,GAMnCo1W,EAAkBpzY,UAAU6wO,aAAe,WACvC,IAAI4iK,EAAQ9uY,KAAKmkC,UACjBnkC,KAAKqpV,OAASylD,EAAM9tY,QAAQsC,GAAK,uBACjCtD,KAAK+uY,WACL,IAAI9uY,GACA82B,KAAM,kBAAmBsB,QAAQ,EAAOs2D,UAAWmgT,EAAMngT,UAAW1pD,OAAQ6pW,EAAM7pW,OAAQ7G,KAAM0wW,EAAM1wW,KAAM+F,UAAW2qW,GAG3H,GADAA,EAAMpoX,QAAQzmB,EAAK82B,KAAM92B,GACpBD,KAAKk0T,gBAAiBj0T,EAAKo4B,OAAhC,CAGA,GAAmB,QAAfy2W,EAAMpoY,MAAiC,YAAfooY,EAAMpoY,MAAsBooY,EAAME,kBAAkBvyY,OAAQ,CAEpF,IAAK,IADD63F,EAAQt0F,KAAKmkC,UAAUpU,SAAS+9C,aAAcxqE,GAAItD,KAAKmkC,UAAUnjC,QAAQsC,GAAK,2BACzEnH,EAAI,EAAGA,EAAI2yY,EAAME,kBAAkBvyY,OAAQN,KAC3C2yY,EAAMG,aAAa12U,MAAQu2U,EAAME,kBAAkB7yY,GAAG+yY,YACtDJ,EAAMG,aAAax2U,MAAQq2U,EAAME,kBAAkB7yY,GAAGgzY,WACvDnvY,KAAKovY,UAAUN,EAAME,kBAAkB7yY,GAAIm4F,EAAOn4F,GAG1D6D,KAAKmkC,UAAU3T,UAAU7uB,YAAY2yF,GAEzCt0F,KAAK,SAAW8uY,EAAMpoY,MAAM1G,KAAKk0T,cAAej0T,GAChDD,KAAK+uO,aAAa/uO,KAAKk0T,eACvBl0T,KAAKqvY,YAAYrvY,KAAKk0T,iBAK1Bu6E,EAAkBpzY,UAAU+zY,UAAY,SAAUJ,EAAmB16S,EAAOriF,GACxE,IAAIka,EAAQnsB,KAAKmkC,UACbpuB,EAAUoW,EAAM6I,cAAoB,OAAwB,EAApB7I,EAAMquC,QAAQ9tD,IACtDsJ,EAASmW,EAAM6I,cAAmB,MAAyB,EAArB7I,EAAMquC,QAAQhuD,KACpD8iY,EAAUN,EAAkBE,WAC5BK,EAAUP,EAAkBG,SAC5BK,EAAYz5X,EAAWA,EAAS/V,KAAKyvY,OAAUH,EAAUtvY,KAAKmgB,KAASgM,EAAMquC,QAAQ9tD,IACrFgjY,EAAY35X,EAAWA,EAAS/V,KAAKyvY,OAAUF,EAAUvvY,KAAKmgB,KAASgM,EAAMquC,QAAQ9tD,IACrFgjY,EAAY35X,EAASoW,EAAMquC,QAAQ9tD,IACnCgjY,EAAY35X,EAASoW,EAAMquC,QAAQ9tD,IAE9BgjY,EAAY,EAAIvjX,EAAMquC,QAAQ9tD,MACnCgjY,EAAY,EAAIvjX,EAAMquC,QAAQ9tD,KAE9B8iY,EAAYz5X,EAASoW,EAAMquC,QAAQ9tD,IACnC8iY,EAAYz5X,EAASoW,EAAMquC,QAAQ9tD,IAE9B8iY,EAAY,EAAIrjX,EAAMquC,QAAQ9tD,MACnC8iY,EAAY,EAAIrjX,EAAMquC,QAAQ9tD,KAElC,IAAIwQ,EAAO,KAAQiP,EAAMquC,QAAY,KAAI,IAAMg1U,EAAW,OAASx5X,EAASmW,EAAMquC,QAAY,MAAK,IAAMg1U,EACrG,OAASx5X,EAASmW,EAAMquC,QAAY,MAAK,IAAMk1U,EAAW,MAASvjX,EAAMquC,QAAY,KAAI,IAAMk1U,EAAW,MAC1GC,GACArsY,GAAM6oB,EAAMnrB,QAAQsC,GAAK,cAAgB2O,EACzCmsB,KAAQ4wW,EAAkBn5W,MAC1BpoB,QAAWuhY,EAAkBvhY,QAC7B6wB,OAAU,cACV4G,eAAgB/Y,EAAMwiE,UACtB70D,EAAK5c,EACLwlN,mBAAoB,IAExBltM,GAASx1B,KAAKmkC,UAAWwrW,EAAYr7S,IAKzCm6S,EAAkBpzY,UAAUu0Y,WAAa,SAAU34W,EAAQh3B,GAMvD,IAAK,IALD6uY,EAAQ9uY,KAAKmkC,UACb9G,EAAIr9B,KAAKmkC,UAAUpU,SAAS+9C,aAAcxqE,GAAIwrY,EAAM9tY,QAAQsC,GAAK,eACjEypO,YAAa,QAAU/sO,KAAKqpV,OAAS,MACrCsmD,EAAa,IAAIl6W,GAAWq5W,EAAM9tY,QAAQsC,GAAK,kBAAmB,cAAerD,EAAK0uF,UAAW1uF,EAAKm+B,KAAM0wW,EAAMrhY,SAClHqsB,EAAI,GACC39B,EAAI,EAAG0F,EAAMo1B,EAAOx6B,OAAQN,EAAI0F,EAAK1F,IAChC,IAANA,IACA29B,EAAI,KAAO7C,EAAO,GAAGlqB,EAAI,IAAMkqB,EAAO96B,GAAG6Q,EAAI,KAEjD8sB,GAAK,KAAO7C,EAAO96B,GAAG4Q,EAAI,IAAMkqB,EAAO96B,GAAG6Q,EAAI,IAElD2iY,EAAW71W,EAAIA,EACftE,GAASx1B,KAAKmkC,UAAWwrW,EAAYtyW,GACrCr9B,KAAKmkC,UAAU3T,UAAU7uB,YAAY07B,IAMzCoxW,EAAkBpzY,UAAUw0Y,UAAY,SAAU54W,EAAQh3B,GACtD,IAOI6vY,EACAC,EAOA7zW,EACAD,EAhBA6yW,EAAQ9uY,KAAKmkC,UACbpuB,EAAS+4X,EAAM95W,cAAcjf,QAAU+4X,EAAMt0U,QAAQ9tD,IAAMoiY,EAAMt0U,QAAQ7tD,QACzEqJ,EAAQ84X,EAAM95W,cAAchf,OAAS84X,EAAMt0U,QAAQhuD,KAAOsiY,EAAMt0U,QAAQ/tD,OACxEyoG,EAAQn/F,GAAUC,EAASD,EAAS,EAAIC,EAAQ,EAChDI,EAAI04X,EAAM95W,cAAchf,MAAQ,EAChCK,EAAIy4X,EAAM95W,cAAcjf,OAAS,EACjC80D,EAAM,EAGNvsC,EAASr+B,EAAKglC,OAAOpP,MACrBpoB,EAAUqhY,EAAMrhY,QAChBm+C,EAAc3rD,EAAKglC,OAAOjvB,MAC1Bq7E,EAAUy9S,EAAMniX,QAAc,OAAImiX,EAAMniX,SAAW,UAAW,UAAW,UAAW,UAAW,UAC/F,UAAW,UAAW,UAAW,UAAW,WAC5C2nE,EAAQt0F,KAAKmkC,UAAUpU,SAAS+9C,aAAcxqE,GAAIwrY,EAAM9tY,QAAQsC,GAAK,iBAGrEywV,EAAYr1V,QAAeu4B,GAC/B,GAAI63W,EAAMkB,gBAAkBlB,EAAMmB,cAAe,CAC7C,IAAIC,EAAgBn8C,EAAU78T,IAAI,SAAUokB,GAAK,OAAOA,EAAEw3Q,OAC1D52R,EAAM7vB,KAAK8T,IAAI5kB,MAAM,KAAM20Y,GAC3Bj0W,EAAO5vB,KAAKC,IAAI/Q,MAAM,KAAM20Y,GAEhClwY,KAAKmwY,wBACL,IAAK,IAAIh0Y,EAAI,EAAGi0Y,EAAQ,GAAIC,OAAQ,EAAQpgT,OAAO,EAAQ9zF,EAAI86B,EAAOx6B,OAAQN,IAAK,CAG/Ek0Y,GAFAD,GAASvlU,IACTA,EAAM5zC,EAAO96B,GAAW,QAExB2zY,GAASM,EAAQ,IAAM/jY,KAAKkR,GAAK,IACjCwyX,GAASM,EAAQ,IAAMhkY,KAAKkR,GAAK,IACjC0Z,EAAO96B,GAAU,MAAI2zY,EACrB74W,EAAO96B,GAAW,OAAI4zY,EACtB9/S,EAAQplB,EAAM,IAAO,IAAM,IAC3B,IAAIxxC,EAAOpC,EAAO96B,GAAgB,aAC9B2tC,GAAI1zB,EAAK8+F,EAAO7oG,KAAKwV,IAAIiuX,GAAS/lW,GAAI1zB,EACjC6+F,EAAO7oG,KAAKyV,IAAIguX,GAASQ,GAAIl6X,EAAK8+F,EAAO7oG,KAAKwV,IAAIkuX,GAASQ,GAAIl6X,EAAK6+F,EAAO7oG,KAAKyV,IAAIiuX,IAEzFS,EAAU,KAAOp6X,EAAI,IAAMC,EAAI,MAAQgjB,EAAS,GAAI,IAAMA,EAAS,GAAI,MAAQ67E,EAAO,IACtFA,EAAO,MAAQjlB,EAAO,MAAQ52D,EAAS,GAAI,IAAMA,EAAS,GAAI,KAC9Ds2W,GACArsY,GAAMwrY,EAAM9tY,QAAQsC,GAAK,kBAAoBnH,EAC7CsR,QAAWA,EACX2wB,KAAQizD,EAAOl1F,EAAIk1F,EAAO50F,QAC1B6hC,OAAUA,EACV4G,eAAgB0mB,EAChB9xB,EAAK02W,EACL9tK,mBAAoB,IAExB1iO,KAAKywY,mBAAmBx5W,EAAO96B,GAAI2yY,EAAOa,EAAYxzY,EAAG8/B,EAAMC,EAAKjF,EAAOx6B,QAC3E,IAAIi0Y,EAAY1wY,KAAK2wY,mBAAmB,iBAAkBx0Y,EAAGwzY,EAAWvxW,MAAQvI,MAAOyI,EAAQtoB,MAAO41C,IAItG,GAHA+jV,EAAWvxW,KAAOsyW,EAAUtyW,KAC5BuxW,EAAWrxW,OAASoyW,EAAUzrW,OAAOpP,MACrC85W,EAAW,gBAAkBe,EAAUzrW,OAAOjvB,OACzC06X,EAAUr4W,OAAQ,CACL7C,GAASx1B,KAAKmkC,UAAWwrW,EAAYr7S,GAC3C9wF,aAAa,aAAcsrY,EAAMhqU,WAAW3oE,GAAG2yY,EAAMzmK,OAAS,MAAQpxM,EAAO96B,GAAG22T,MAE5F,IAAI89E,EAAab,EAAQD,EACrB9+U,GACAjkD,EAAGqJ,EAAM8+F,EAAO,EAAK7oG,KAAKwV,IAAIiuX,EAASc,EAAa,GACpD5jY,EAAGqJ,EAAM6+F,EAAO,EAAK7oG,KAAKyV,IAAIguX,EAASc,EAAa,IAExD35W,EAAO96B,GAAG+8B,SAASnsB,EAAIikD,EAAIjkD,EAC3BkqB,EAAO96B,GAAG+8B,SAASlsB,EAAIgkD,EAAIhkD,EAE/BhN,KAAKmkC,UAAU3T,UAAU7uB,YAAY2yF,IAKzCm6S,EAAkBpzY,UAAUo1Y,mBAAqB,SAAUp3W,EAAMy1W,EAAOx3S,EAAQn7F,EAAG8/B,EAAMC,EAAKz/B,GACtF48B,EAAKy5R,KAAO,GAAKg8E,EAAM+B,qBACvBv5S,EAAOl5D,KAAO0wW,EAAM+B,mBACpB7wY,KAAKmwY,qBAAqB3rY,KAAKrI,IAEzB,IAANA,GAAW2yY,EAAMgC,iBACjBx5S,EAAOl5D,KAAO0wW,EAAMgC,gBACpB9wY,KAAK+wY,gBAAkB50Y,GAEjBA,IAAOM,EAAS,GAAOqyY,EAAMkC,gBACnC15S,EAAOl5D,KAAO0wW,EAAMkC,cACpBhxY,KAAKixY,cAAgB90Y,GAErBk9B,EAAKy5R,OAAS72R,GAAQ6yW,EAAMkB,gBAC5B14S,EAAOl5D,KAAO0wW,EAAMkB,eACpBhwY,KAAKkxY,eAAiB/0Y,GAEjBk9B,EAAKy5R,OAAS52R,GAAO4yW,EAAMmB,gBAChC34S,EAAOl5D,KAAO0wW,EAAMmB,cACpBjwY,KAAKmxY,cAAgBh1Y,IAM7BsyY,EAAkBpzY,UAAU2iY,WAAa,SAAU/mW,EAAQh3B,GAOvD,IAAK,IAND6uY,EAAQ9uY,KAAKmkC,UACbmwD,EAAQt0F,KAAKmkC,UAAUpU,SAAS+9C,aAAcxqE,GAAIwrY,EAAM9tY,QAAQsC,GAAK,eACrEypO,YAAa,QAAU/sO,KAAKqpV,OAAS,MACrCsmD,EAAa,IAAIl6W,GAAWq5W,EAAM9tY,QAAQsC,GAAK,kBAAmBrD,EAAKm+B,KAAM,EAAG,cAAe0wW,EAAMrhY,SACrGqsB,EAAI,GACJ1qB,EAAM,GACDjT,EAAI,EAAG0F,EAAMo1B,EAAOx6B,OAAQN,EAAI0F,EAAK1F,IAChC,IAANA,EACAiT,GAAO,KAAO6nB,EAAO96B,GAAG4Q,EAAI,IAAMkqB,EAAO96B,GAAG6Q,EAAI,KAGhD8sB,EAAI,KAAO7C,EAAO96B,GAAG4Q,EAAI,IAAM/M,KAAKoxY,WAAa,IACjDhiY,EAAM,KAAO6nB,EAAO96B,GAAG4Q,EAAI,IAAMkqB,EAAO96B,GAAG6Q,EAAI,KAEnD8sB,GAAK,KAAO7C,EAAO96B,GAAG4Q,EAAI,IAAMkqB,EAAO96B,GAAG6Q,EAAI,IAC1C7Q,IAAO0F,EAAM,IACbi4B,GAAK,KAAO7C,EAAO96B,GAAG4Q,EAAI,IAAM/M,KAAKoxY,WAAa,MAG1DzB,EAAW71W,EAAIA,EACftE,GAASx1B,KAAKmkC,UAAWwrW,EAAYr7S,GACrCq7S,EAAa,IAAIl6W,GAAWq5W,EAAM9tY,QAAQsC,GAAK,sBAAuB,cAAerD,EAAKglC,OAAOjvB,MAAO/V,EAAKglC,OAAOpP,MAAOi5W,EAAMrhY,QAAS,GAAI2B,GAC9IomB,GAASx1B,KAAKmkC,UAAWwrW,EAAYr7S,GACrCt0F,KAAKmkC,UAAU3T,UAAU7uB,YAAY2yF,IAKzCm6S,EAAkBpzY,UAAUg2Y,aAAe,SAAUp6W,EAAQh3B,GACzD,IAIIqxY,EACAC,EALAzC,EAAQ9uY,KAAKmkC,UACb4vT,EAAYr1V,QAAeu4B,GAC3Bq9D,EAAQt0F,KAAKmkC,UAAUpU,SAAS+9C,aAAcxqE,GAAIwrY,EAAM9tY,QAAQsC,GAAK,eACrEypO,YAAa,QAAU/sO,KAAKqpV,OAAS,MAGzC,GAAIrpV,KAAKmkC,UAAU6rW,gBAAkBhwY,KAAKmkC,UAAU8rW,cAAe,CAC/D,IAAIuB,EAAaz9C,EAAU78T,IAAI,SAAUokB,GAAK,OAAOA,EAAEm2V,iBACvDF,EAAUllY,KAAK8T,IAAI5kB,MAAM,KAAMi2Y,GAC/BF,EAASjlY,KAAKC,IAAI/Q,MAAM,KAAMi2Y,GAElC,IAGIn4W,EAHA/1B,EAAKwrY,EAAM9tY,QAAQsC,GAAK,qBACxB8kY,EAAc,IAAIprK,GAAW15N,EAAI,GAAIrD,EAAKglC,OAAQ6pW,EAAMrhY,QAAS,MACjEikY,EAAgB5C,EAAMniX,QAAQlwB,OAE9BoF,EAAMo1B,EAAOx6B,OACjBuD,KAAKmwY,wBACL,IAAK,IAAIh0Y,EAAI,EAAGA,EAAI0F,EAAK1F,IAAK,CAC1Bk9B,EAAOpC,EAAO96B,GACdisY,EAAY9kY,GAAKA,EAAKnH,EACtBisY,EAAYhqW,KAAO,EAAkB0wW,EAAMniX,QAAQxwB,EAAIu1Y,GAAiBzxY,EAAKm+B,KAC7EgqW,EAAY11W,KAAO,IAAI6C,GAAK8D,EAAKtsB,EAAGssB,EAAKrsB,EAAGqsB,EAAKrjB,MAAOqjB,EAAKtjB,QAC7D/V,KAAK2xY,iBAAgB,EAAMt4W,EAAMy1W,EAAO1G,EAAajsY,EAAGo1Y,EAASD,EAAQzvY,GACzEw3B,EAAKH,SAASlsB,EAAKqsB,EAAKo4W,gBAAkBzxY,KAAKoxY,WAAc/3W,EAAKrsB,EAAKqsB,EAAKrsB,EAAIqsB,EAAKtjB,OACrFsjB,EAAKH,SAASnsB,EAAIssB,EAAKtsB,EAAKssB,EAAKrjB,MAAQ,EACzCoyX,EAAY9pW,OAASr+B,EAAKglC,OAAOpP,MAAS51B,EAAKglC,OAAY,MAAImjW,EAAYhqW,KAC3E,IAAIsyW,EAAY1wY,KAAK2wY,mBAAmB,iBAAkBx0Y,EAAGisY,EAAYhqW,MAAQvI,MAAOuyW,EAAY9pW,OAAQtoB,MAAO/V,EAAKglC,OAAOjvB,QAI/H,GAHAoyX,EAAYhqW,KAAOsyW,EAAUtyW,KAC7BgqW,EAAY9pW,OAASoyW,EAAUzrW,OAAOpP,MACtCuyW,EAAY,gBAAkBsI,EAAUzrW,OAAOjvB,OAC1C06X,EAAUr4W,OAAQ,CACLiM,GAAcwqW,EAAO1G,EAAa9zS,GACxC9wF,aAAa,aAAcsrY,EAAMhqU,WAAW3oE,GAAG2yY,EAAMzmK,OAAS,MAAQpxM,EAAO96B,GAAG22T,OAGhG9yT,KAAKmkC,UAAU3T,UAAU7uB,YAAY2yF,IAKzCm6S,EAAkBpzY,UAAUu2Y,cAAgB,SAAU36W,EAAQh3B,GAS1D,IAAK,IAHDo5B,EALAy1W,EAAQ9uY,KAAKmkC,UACbmwD,EAAQt0F,KAAKmkC,UAAUpU,SAAS+9C,aAAcxqE,GAAIwrY,EAAM9tY,QAAQsC,GAAK,eACrEypO,YAAa,QAAU/sO,KAAKqpV,OAAS,MACrC/lV,EAAKwrY,EAAM9tY,QAAQsC,GAAK,sBACxB0P,EAAU,IAAIgqN,GAAW15N,EAAI,GAAIrD,EAAKglC,OAAQ6pW,EAAMrhY,QAAS,MAE7D5L,EAAMo1B,EAAOx6B,OACbi1Y,EAAgB5C,EAAMniX,QAAQlwB,OACzBN,EAAI,EAAGA,EAAI0F,EAAK1F,IAAK,CAC1Bk9B,EAAOpC,EAAO96B,GACd6W,EAAQ1P,GAAKA,EAAKnH,EAClB6W,EAAQorB,KAAO,EAAkB0wW,EAAMniX,QAAQxwB,EAAIu1Y,GAAmBr4W,EAAKy5R,OAAS9yT,KAAKsoV,UACpFtoV,KAAKmkC,UAAU0tW,eAAiB,UAAex4W,EAAKy5R,KAAO9yT,KAAKsoV,UAAaroV,EAAKm+B,KAClF0wW,EAAM+B,oBAAsB,UACjC79X,EAAQsrB,OAAUr+B,EAAKglC,OAAY,MAAKhlC,EAAKglC,OAAY,MAAIjyB,EAAQorB,KACrEprB,EAAQ0f,KAAO,IAAI6C,GAAK8D,EAAKtsB,EAAGssB,EAAKrsB,EAAGqsB,EAAKrjB,MAAOqjB,EAAKtjB,QACzDsjB,EAAKH,SAASnsB,EAAIssB,EAAKtsB,EAAKssB,EAAKrjB,MAAQ,EACzCqjB,EAAKH,SAASlsB,EAAKqsB,EAAKy5R,MAAQ9yT,KAAKsoV,UAAcjvT,EAAM,EAAKA,EAAKrsB,EAAIqsB,EAAKtjB,OAC5E,IAAI26X,EAAY1wY,KAAK2wY,mBAAmB,iBAAkBx0Y,EAAG6W,EAAQorB,MAAQvI,MAAO7iB,EAAQsrB,OAAQtoB,MAAO/V,EAAKglC,OAAOjvB,QAIvH,GAHAhD,EAAQorB,KAAOsyW,EAAUtyW,KACzBprB,EAAQsrB,OAASoyW,EAAUzrW,OAAOpP,MAClC7iB,EAAQ,gBAAkB09X,EAAUzrW,OAAOjvB,OACtC06X,EAAUr4W,OAAQ,CACLiM,GAAcwqW,EAAO97X,EAASshF,GACpC9wF,aAAa,aAAcsrY,EAAMhqU,WAAW3oE,GAAG2yY,EAAMzmK,OAAS,MAAQpxM,EAAO96B,GAAG22T,OAGhG9yT,KAAKmkC,UAAU3T,UAAU7uB,YAAY2yF,IAEzCm6S,EAAkBpzY,UAAU0zO,aAAe,SAAU93M,GACjD,IAAI63W,EAAQ9uY,KAAKmkC,UACb8hM,EAAS6oK,EAAMgD,eACnB,GAAoB,QAAfhD,EAAMpoY,MAAiC,YAAfooY,EAAMpoY,MAAuBu/N,EAAOnvM,QAAQr6B,OAAzE,CAGA,IAKI48B,EAGAk4W,EACAD,EATAv9C,EAAYr1V,QAAeu4B,GAC3Bq9D,EAAQt0F,KAAKmkC,UAAUpU,SAAS+9C,aAChCxqE,GAAIwrY,EAAM9tY,QAAQsC,GAAK,sBACvBypO,YAAa,QAAU/sO,KAAKqpV,OAAS,MAGrC/lV,EAAKwrY,EAAM9tY,QAAQsC,GAAK,qBACxBg0F,EAAS,IAAI2lI,GAAa,GAAIgJ,EAAO7nM,KAAM6nM,EAAOhhM,OAAQghM,EAAOx4N,QAAS,EAAG,EAAGw4N,EAAO92M,KAAO,EAAG,IAGjG2H,EAAUmvM,EAAOnvM,QAAQvV,OAC7B,GAAKuV,EAAQlhB,cAAcrX,QAAQ,SAAW,GAAOu4B,EAAQlhB,cAAcrX,QAAQ,QAAU,EAAI,CAC7F,IAAIizY,EAAaz9C,EAAU78T,IAAI,SAAUokB,GAAK,OAAOA,EAAEm2V,iBACvDF,EAAUllY,KAAK8T,IAAI5kB,MAAM,KAAMi2Y,GAC/BF,EAASjlY,KAAKC,IAAI/Q,MAAM,KAAMi2Y,GAElCxxY,KAAKmwY,wBACL,IAAK,IAAIh0Y,EAAI,EAAG8+B,EAAWhE,EAAOx6B,OAAQN,EAAI8+B,EAAU9+B,IAAK,CACzDk9B,EAAOpC,EAAO96B,GACdm7F,EAAOh0F,GAAKA,EAAKnH,EACjBm7F,EAAO19D,GAAKP,EAAKH,SAASnsB,EAC1BuqF,EAAOz9D,GAAKR,EAAKH,SAASlsB,EAC1BsqF,EAAOl5D,KAAO6nM,EAAO7nM,KACrB,IAAIuvE,EAAU72E,EAAQlhB,cAAcrX,QAAQ,QAAU,EACtDovG,EAAS3tG,KAAK2xY,gBAAgBhkS,EAAQt0E,EAAMy1W,EAAOx3S,EAAQn7F,EAAGo1Y,EAASD,EAAQr2W,EAAUnE,EAAQlhB,eACjG0hF,EAAOh5D,OAAS2nM,EAAOhhM,OAAOpP,OAASyhE,EAAOl5D,KAC9C,IAAI2zW,GACAh7W,KAAM,kBAAmBsB,QAAQ,EAAO4M,QAAUpP,MAAOyhE,EAAOh5D,OAAQtoB,MAAOiwN,EAAOhhM,OAAOjvB,OAASooB,KAAMk5D,EAAOl5D,KACnHxG,WAAYz7B,EAAGgoC,UAAWnkC,KAAKmkC,UAAWp3B,EAAGuqF,EAAO19D,GAAI5sB,EAAGsqF,EAAOz9D,GAAI1K,KAAM82M,EAAO92M,MAGvF,GADAnvB,KAAKmkC,UAAUzd,QAAQqrX,EAAWh7W,KAAMg7W,GACpCpkS,IAAWokS,EAAW15W,OAAQ,CAC9Bi/D,EAAOl5D,KAAO2zW,EAAW3zW,KACzBk5D,EAAOh5D,OAASyzW,EAAW9sW,OAAOpP,MAClCyhE,EAAO,gBAAkBy6S,EAAW9sW,OAAOjvB,MAC3CshF,EAAOl6D,EAAI20W,EAAW5iX,KAAO,EACfkV,GAAWyqW,EAAOx3S,EAAQhD,GAChC9wF,aAAa,aAAcsrY,EAAMhqU,WAAW3oE,GAAG2yY,EAAMzmK,OAAS,MAAQpxM,EAAO96B,GAAG22T,OAGhG9yT,KAAKmkC,UAAU3T,UAAU7uB,YAAY2yF,KAKzCm6S,EAAkBpzY,UAAUs2Y,gBAAkB,SAAUhkS,EAAQt0E,EAAMy1W,EAAOx3S,EAAQn7F,EAAGo1Y,EAASD,EAAQ70Y,EAAQq6B,GA2B7G,YA1BgB,IAAZA,IAAsBA,EAAU,IAChCuC,EAAKo4W,eAAiBzxY,KAAKoxY,aAC3B95S,EAAOl5D,KAAO0wW,EAAM+B,oBAAsBv5S,EAAOl5D,KACjDp+B,KAAKmwY,qBAAqB3rY,KAAKrI,GAC/BwxG,EAASA,GAAW72E,EAAQv4B,QAAQ,aAAe,GAE7C,IAANpC,GACAm7F,EAAOl5D,KAAO0wW,EAAMgC,iBAAmBx5S,EAAOl5D,KAC9Cp+B,KAAK+wY,gBAAkB50Y,EACvBwxG,EAASA,GAAW72E,EAAQv4B,QAAQ,UAAY,GAE1CpC,IAAOM,EAAS,IACtB66F,EAAOl5D,KAAO0wW,EAAMkC,eAAiB15S,EAAOl5D,KAC5Cp+B,KAAKixY,cAAgB90Y,EACrBwxG,EAASA,GAAW72E,EAAQv4B,QAAQ,QAAU,GAE9C86B,EAAKo4W,iBAAmBF,GACxBj6S,EAAOl5D,KAAO0wW,EAAMkB,gBAAkB14S,EAAOl5D,KAC7Cp+B,KAAKkxY,eAAiB/0Y,EACtBwxG,EAASA,GAAW72E,EAAQv4B,QAAQ,SAAW,GAE1C86B,EAAKo4W,iBAAmBH,IAC7Bh6S,EAAOl5D,KAAO0wW,EAAMmB,eAAiB34S,EAAOl5D,KAC5Cp+B,KAAKmxY,cAAgBh1Y,EACrBwxG,EAASA,GAAW72E,EAAQv4B,QAAQ,QAAU,GAE3CovG,GAKX8gS,EAAkBpzY,UAAUg0Y,YAAc,SAAUp4W,GAChD,IAAI63W,EAAQ9uY,KAAKmkC,UACbq+C,EAAYssT,EAAMkD,kBAClBn8W,EAAyB,iBAAhBi5W,EAAMzzX,MAA4B,UAAY,UAE3D,GADAwa,EAAS2sD,EAAUowJ,UAAe,MAAIpwJ,EAAUowJ,UAAU/8M,MAAQA,EAC9C,YAAfi5W,EAAMpoY,MAAuB87E,EAAU1rD,QAAQr6B,OAApD,CAoBA,IAAK,IAbD4gC,EACAhE,EALA06T,EAAYr1V,QAAeu4B,GAC3B3zB,EAAKwrY,EAAM9tY,QAAQsC,GAAK,oBACxBgxF,EAAQt0F,KAAKmkC,UAAUpU,SAAS+9C,aAAcxqE,GAAIwrY,EAAM9tY,QAAQsC,GAAK,qBACrEoB,MAAO,wBAAyBqoO,YAAa,QAAU/sO,KAAKqpV,OAAS,MAGrE4oD,EAAS3uY,EAAK,QACd4uY,EAAS5uY,EAAK,QACdg0F,EAAS,IAAI1hE,GAAW,GAAI,EAAG,EAAG,SAAU,GAAI,UAChDP,EAAamtD,EAAUowJ,UACvB4+J,EAAaz9C,EAAU78T,IAAI,SAAUokB,GAAK,OAAOA,EAAEm2V,iBACnDF,EAAUllY,KAAK8T,IAAI5kB,MAAM,KAAMi2Y,GAC/BF,EAASjlY,KAAKC,IAAI/Q,MAAM,KAAMi2Y,GAE9Bh3U,EAA8B,gBAAnBgoB,EAAUpkD,MAA0BokD,EAAUv9C,OAAOjvB,MAAS,EAAI,EAC7EmZ,EAAON,GAAY,yBAA0BwG,GAC7C+yW,EAAc,IAAIprK,GAAW,GAAIx6I,EAAUpkD,KAAMokD,EAAUv9C,OAAQu9C,EAAU/0E,QAAS,MACjFtR,EAAI,EAAGmpO,EAAWruM,EAAOx6B,OAAQN,EAAImpO,EAAUnpO,IAAK,CACzDk9B,EAAOpC,EAAO96B,GACdm7F,EAAOh0F,GAAK2uY,EAAS91Y,EACrBm7F,EAAOvqF,EAAIssB,EAAKH,SAASnsB,EAAIy1E,EAAU72E,OAAOoB,EAC9CuqF,EAAOtqF,GAAqB,QAAf8hY,EAAMpoY,KAAkB2yB,EAAKH,SAASlsB,EAAMqsB,EAAKo4W,eAAiBzxY,KAAKoxY,WAAe/3W,EAAKH,SAASlsB,EAC5GmiB,EAAKpZ,OAAS,EATX,EASwBykD,EAAYnhC,EAAKH,SAASlsB,EAAKmiB,EAAKpZ,OAAS,EATrE,EASkFykD,GAAagoB,EAAU72E,OAAOqB,EACxHsqF,EAAOxoE,KAA6B,KAArB0zD,EAAUhmD,OAAiBx8B,KAAKmyY,UAAU3vT,EAAUhmD,OAAQx8B,KAAKmkC,UAAU2gC,WAAW3oE,IACjGk9B,EAAKy5R,KAAK5lT,WACd,IAAIklY,GACAr7W,KAAM,qBAAsBsB,QAAQ,EAAO4M,OAAQu9C,EAAUv9C,OAAQ7G,KAAMokD,EAAUpkD,KAAMxG,WAAYz7B,EACvGgoC,UAAWnkC,KAAKmkC,UAAWp3B,EAAGuqF,EAAOvqF,EAAGC,EAAGsqF,EAAOtqF,EAAG8hB,KAAMwoE,EAAOxoE,KAAM+G,MAAOA,GAEnF71B,KAAKmkC,UAAUzd,QAAQ0rX,EAAUr7W,KAAMq7W,GACvCjjX,EAAON,GAAYujX,EAAUtjX,KAAMuG,GACnCiiE,EAAOxoE,KAAOsjX,EAAUtjX,KACxB,IAAI6+E,EAAUnrB,EAAU1rD,QAAQvV,OAAO3L,cAAcrX,QAAQ,QAAU,GACvEovG,EAAS3tG,KAAKqyY,gBAAgB1kS,EAAQt0E,EAAMl9B,EAAGqmF,EAAW8iJ,EAAUisK,EAASD,MAC9Dc,EAAU/5W,SACrB+vW,EAAY9kY,GAAK4uY,EAAS/1Y,EAC1BisY,EAAYhqW,KAAOg0W,EAAUh0W,KAC7BgqW,EAAY9pW,OAAS8zW,EAAUntW,OAAOpP,MACtCuyW,EAAY,gBAAkBgK,EAAUntW,OAAOjvB,MAC/CshF,EAAOvqF,EAAIqlY,EAAUrlY,EACrBuqF,EAAOtqF,EAAIolY,EAAUplY,EACrBo7X,EAAY11W,KAAO,IAAI6C,GAAK+hE,EAAOvqF,GAAMoiB,EAAKnZ,MAAQ,EAAKwkD,GAAW88B,EAAOtqF,EAAIwtD,EAAWrrC,EAAKpZ,OAAS,KAAQoZ,EAAKnZ,MAAmB,EAAVwkD,EAAcrrC,EAAKpZ,OAAoB,EAAVykD,GAE7Jl2B,GAAcwqW,EAAO1G,EADrB/qW,EAAIr9B,KAAKmkC,UAAUpU,SAAS+9C,aAAcxqE,GAAIA,EAAK,IAAMnH,KAEzD+nC,GAAkBozD,EAAQjiE,EAAY+8W,EAAUv8W,MAAOwH,GACvDi3D,EAAM3yF,YAAY07B,IAG1Br9B,KAAKmkC,UAAU3T,UAAU7uB,YAAY2yF,KAKzCm6S,EAAkBpzY,UAAUg3Y,gBAAkB,SAAU1kS,EAAQt0E,EAAMl9B,EAAGkX,EAAO5W,EAAQ80Y,EAASD,GAC7F,IAAIjkD,EAAeh6U,EAAMyjB,QAAQvV,OAAO3L,cAgBxC,OAfIyjB,EAAKo4W,eAAiBzxY,KAAKoxY,aAC3BzjS,EAASA,GAAW0/O,EAAa9uV,QAAQ,aAAe,GAElD,IAANpC,EACAwxG,EAASA,GAAW0/O,EAAa9uV,QAAQ,UAAY,EAE/CpC,IAAOM,EAAS,IACtBkxG,EAASA,GAAW0/O,EAAa9uV,QAAQ,QAAU,GAEnD86B,EAAKo4W,iBAAmBF,EACxB5jS,EAASA,GAAW0/O,EAAa9uV,QAAQ,SAAW,EAE/C86B,EAAKo4W,iBAAmBH,IAC7B3jS,EAASA,GAAW0/O,EAAa9uV,QAAQ,QAAU,GAEhDovG,GAKX8gS,EAAkBpzY,UAAU82Y,UAAY,SAAU31W,EAAQhgC,GACtD,GAAIiB,EAAkB++B,GAClB,OAAO,KAGX,IAAK,IAAIp+B,EAAK,EAAGC,EADNC,OAAOhB,KAAKd,GACS4B,EAAKC,EAAO5B,OAAQ2B,IAAM,CACtD,IAAIf,EAAMgB,EAAOD,GACjBo+B,EAASA,EAAOt/B,MAAM,KAAOG,EAAM,KAAKkkB,KAAK/kB,EAAKa,IAEtD,OAAOm/B,GAKXiyW,EAAkBpzY,UAAUszY,gBAAkB,WAC1C3uY,KAAKsyY,WAAWtyY,KAAKmkC,UAAUuqW,gBAKnCD,EAAkBpzY,UAAUk3Y,YAAc,SAAU/1Y,EAAMuQ,EAAGrG,GACzD,IAAIvE,EAAW,EACXq5B,EAAKh/B,EAAK,GAAGuQ,GACb2uB,EAAKj+B,EAAkBjB,EAAK,SAAMrB,EAAYqB,EAAK,GAAGuQ,GAC1D,IAAKtP,EAAkB+9B,KAAQ/9B,EAAkBi+B,GAAK,CAClD,IACI6lS,KADO7iU,KAAWlC,GAEjB4C,QAAQ,SAAUpC,GACdS,EAAkBT,EAAM+P,KACzBw0T,EAAY/8T,KAAKxH,KAGzBukU,EAAYpqS,KAAK,SAAUmkB,EAAGhe,GAC1B,OAAI7/B,EAAkB69C,EAAEvuC,KAAOtP,EAAkB6/B,EAAEvwB,IACxC,EAEJuuC,EAAEvuC,GAAKuwB,EAAEvwB,KAEpB5K,EAAWo/T,EAAY,GAAGx0T,GAAKw0T,EAAY,GAAGx0T,GAElD,OAAO5K,GAMXssY,EAAkBpzY,UAAUi3Y,WAAa,SAAU91Y,GAC/C,IACI8P,EACA6T,EACAm4C,EACAE,EAEAn/B,EANAlN,EAAQnsB,KAAKmkC,UAKbquW,EAAkBh2Y,EAAKC,OAEvBg2Y,EAAc,EACdC,EAAiBl0Y,MAAMC,QAAQjC,IAA4B,iBAAZA,EAAK,GACxD,GAAIk2Y,EACA,GAAmB,QAAfvmX,EAAMzlB,KACN,IAAK,IAAIvK,EAAI,EAAGA,EAAIq2Y,EAAiBr2Y,IACjCs2Y,GAAepmY,KAAKE,IAAI/P,EAAKL,SAIjCmQ,EAAMD,KAAKC,IAAI/Q,MAAM,KAAMiB,GAC3B2jB,EAAM9T,KAAK8T,IAAI5kB,MAAM,KAAMiB,GAC3B87D,EAAO,EACPE,EAAOg6U,EAAkB,OAI7B,GAAmB,QAAfrmX,EAAMzlB,KACN,IAASvK,EAAI,EAAGA,EAAIq2Y,EAAiBr2Y,IACjCs2Y,GAAepmY,KAAKE,IAAI/P,EAAKL,GAAGgwB,EAAMqG,YAGzC,CACD,GAAI/0B,EAAkBjB,EAAK,GAAG2vB,EAAMk8M,QAAS,CACzC,IAAIsqK,EAAMn2Y,EAAK06B,IAAI,SAAUwwE,GAAK,OAAOA,EAAEv7E,EAAMqG,SACjDlmB,EAAMD,KAAKC,IAAI/Q,MAAM,KAAMo3Y,GAC3BxyX,EAAM9T,KAAK8T,IAAI5kB,MAAM,KAAMo3Y,QAK3BrmY,GADA+sB,GADAA,EAAO36B,KAAWlC,IACN26B,KAAK,SAAUmkB,EAAGhe,GAAK,OAAOge,EAAEnvB,EAAMqG,OAAS8K,EAAEnR,EAAMqG,UACxD6G,EAAK58B,OAAS,GAAG0vB,EAAMqG,OAClCrS,EAAMkZ,EAAK,GAAGlN,EAAMqG,OAEnB/0B,EAAkBjB,EAAK,GAAG2vB,EAAMk8M,SAMjC/vK,EAAO,EACPE,EAAOg6U,EAAkB,IALzBh6U,GADAn/B,EAAOA,EAAKlC,KAAK,SAAUmkB,EAAGhe,GAAK,OAAOge,EAAEnvB,EAAMk8M,OAAS/qM,EAAEnR,EAAMk8M,UACvDhvM,EAAK58B,OAAS,GAAG0vB,EAAMk8M,OACnC/vK,EAAOj/B,EAAK,GAAGlN,EAAMk8M,QAQjC,IAAI1sM,EACA5lB,EACAC,EAEAylB,EAEAtI,EAHAqI,EAAK,EAELg/B,EAAUruC,EAAMquC,QAEhBrkD,EAAOgW,EAAM8iX,aACbjyY,EAAQmZ,EAAKnZ,MACjB,GAAmB,QAAfmvB,EAAMzlB,KAAgB,CACtB1G,KAAK+3I,UAAYy6P,EACjBz8X,EAASoW,EAAM6I,cAAcjf,QAAUykD,EAAQ7tD,OAAS6tD,EAAQ9tD,KAChEsJ,EAAQmW,EAAM6I,cAAchf,OAASwkD,EAAQhuD,KAAOguD,EAAQ/tD,OAC5D+rD,EAAO/6D,EAAkB0Y,EAAKqiD,MAAQA,EAAOriD,EAAKqiD,KAClDF,EAAO76D,EAAkB0Y,EAAKmiD,MAAQA,EAAOniD,EAAKmiD,KAClDhsD,EAAM7O,EAAkB0Y,EAAKsiD,MAAQnsD,EAAM6J,EAAKsiD,KAChDt4C,EAAM1iB,EAAkB0Y,EAAKoiD,MAAQp4C,EAAMhK,EAAKoiD,KAChD,IAAI1iC,EAAyB,iBAAhB1J,EAAM9Q,MAA4B,UAAY,UAC3Dwa,EAAS1f,EAAKy8X,aAAkB,MAAIz8X,EAAKy8X,aAAa/8W,MAAQA,EAC9D,IAAItoB,GACAwpB,KAAM,gBAAiBsB,QAAQ,EAAO8L,UAAWhY,EAAOqsC,KAAMA,EAAMF,KAAMA,EAAMG,KAAMnsD,EAAKisD,KAAMp4C,EACjGnjB,MAAOmZ,EAAKnZ,MAAO0hW,UAAW7oU,EAAO84D,UAAWx4E,EAAKy8X,aAAa58X,OAGtE,GADAmW,EAAMzF,QAAQ,gBAAiBnZ,GAC3BA,EAAU8qB,OAEV,YADAr4B,KAAKk0T,kBAGT17P,EAAOjrD,EAAUirD,KACjBF,EAAO/qD,EAAU+qD,KACjBhsD,EAAMiB,EAAUkrD,KAChBt4C,EAAM5S,EAAUgrD,KAChBv7D,EAAQgD,KAAKsoV,UAAY/6U,EAAUvQ,MACnCgD,KAAK6yY,UAAYtlY,EAAUmxV,UAC3B1+V,KAAK8yY,UAAYvlY,EAAUohF,UAC3B,IAAIokT,EAAQv6U,EAAOF,EACfm3U,EAAQnjY,EAAM6T,EAClB4yX,EAAmB,IAAVA,EAAe,EAAIA,EAC5BtD,EAAmB,IAAVA,EAAe,EAAIA,EAC5BzvY,KAAK+yY,MAAQA,EACb/yY,KAAKyvY,MAAQA,EACbzvY,KAAKmgB,IAAMA,EACXqb,EAAK,EACLC,EAAK1lB,EAAWA,EAAS05X,GAAWtvX,EACpCsb,EAAMtb,EAAM,GAAK7T,GAAO,EAAK,EAAK6T,EAAM,GAAK7T,EAAM,EAAKmvB,EAAK1lB,EACzD/Y,GAASmjB,GAAOnjB,GAASsP,IACzBmvB,EAAK1lB,EAAS1J,KAAK4xB,MAAMloB,IAAW/Y,EAAQmjB,GAAOngB,KAAKyvY,SAE5DzvY,KAAKoxY,WAAa31W,EAAK++B,EAAQ9tD,IAO9B,IAJDK,EACAC,EACAknT,KACA/xT,EAAWnC,KAAKuyY,YAAY/1Y,EAAM2vB,EAAMk8M,MAAOl8M,EAAMmF,WACzD,IAASn1B,EAAI,EAAGA,EAAIq2Y,EAAiBr2Y,IAcjC,GAbIsB,EAAkBjB,EAAKL,GAAGgwB,EAAMk8M,SAAW5qO,EAAkBjB,EAAKL,GAAGgwB,EAAMqG,SAAuC,IAA1Bh2B,EAAKL,GAAGgwB,EAAMqG,QACnGkgX,GACH3lY,EAAI5Q,EACJ6Q,EAAIxQ,EAAKL,IAEJsB,EAAkBjB,EAAKL,GAAGgwB,EAAMk8M,SACrCt7N,EAAI5Q,EACJ6Q,EAAIxQ,EAAKL,GAAGgwB,EAAMqG,SAGlBzlB,EAAIvQ,EAAKL,GAAGgwB,EAAMk8M,OAClBr7N,EAAIxQ,EAAKL,GAAGgwB,EAAMqG,SAElB/0B,EAAkBsP,KAAMtP,EAAkBuP,GAA9C,CAGA,GAAmB,SAAfmf,EAAMzlB,MAAkC,SAAfylB,EAAMzlB,KAC/Bi1B,EAAMxb,IAAQ7T,GAA2B,IAApBkmY,EAAyBz8X,EAAS1J,KAAK4xB,MAAMloB,IAAW/I,EAAImT,GAAOngB,KAAKyvY,QAAUj1U,EAAQ9tD,IAC/GymB,GAAUpmB,EAAIurD,IAASE,EAAQnsD,KAAK4xB,MAAMjoB,IAAUjJ,EAAIurD,GAAQt4D,KAAK+yY,QAAU/8X,EAAQ,EAAGhJ,EAAG2uB,EAAI81W,eAAgB91W,QAEhH,GAAmB,WAAfxP,EAAMzlB,MAAoC,YAAfylB,EAAMzlB,KAAoB,CAC1D,IAAIssY,EAAWh9X,IAAWwiD,EAAOF,GAAQn2D,EAAY,GAKrD,GAFA6wY,KACAx3W,GAAQzuB,EAAIurD,GAAQn2D,GAAa6wY,QACd,YAAf7mX,EAAMzlB,KAAoB,CAM1BysB,GAAUpmB,EAAGyuB,EAAIxuB,EAFjB2uB,EAAM3uB,EAAIhQ,EAAU+Y,EAAS,EAAM/I,EAAIhQ,EAFnB,GAE6B+Y,EAF7B,GAGdA,EAA2BA,EAFV,GAGCA,OAAS/I,IAAMhQ,EAAU+Y,EAAS,EAAKA,EAAS,GAAIC,MAAOg9X,EAC/EvB,eAAiB91W,EAAKF,EAAOA,EAAKpvB,KAAKE,IAAIovB,EAAKF,GAAOE,OAE1D,CACD,IAAI+rE,EAAM3xF,EAAS/V,KAAKyvY,OAAUziY,EAAImT,GAClC8yX,EAAMjmY,IAAMmT,GAAOnT,EAAIhQ,EAA+B,IAApBw1Y,GAAwC,IAAfxyY,KAAKyvY,MAC/D15X,EAAS/V,KAAKyvY,OAAUtvX,EAAM,GAAU,EAAJunF,EACpC16F,IAAMV,GAAOU,EAAIhQ,GAA6B,IAApBw1Y,GAAwC,IAAfxyY,KAAKyvY,MAAgB15X,EAAS/V,KAAKyvY,QAAWnjY,EAAM,GAAKo7F,EAEjHv0E,GACIpmB,EAAGyuB,EAAIxuB,GAFX2uB,EAAKtvB,KAAKE,IAAIwJ,EAASk9X,IAEHx3W,EAAMA,EAAKE,EAAI5lB,OAAQ1J,KAAKE,IAAIovB,EAAKF,GACrDzlB,MAAOg9X,EAAUvB,eAAiB91W,EAAKF,EAAOA,EAAKpvB,KAAKE,IAAIovB,EAAKF,GAAOE,QAI5D,QAAfxP,EAAMzlB,OAEXysB,GACI44M,QAFO1/N,KAAKE,IAAIS,GAAKylY,EAAe,IAElB3/W,OAAUzmB,KAAKE,IAAIS,GAAKylY,EAAe,MAG9C,QAAftmX,EAAMzlB,OACNysB,EAAMpmB,GAAKytD,EAAQhuD,KACnB2mB,EAAMnmB,GAAKwtD,EAAQ9tD,KAEJ,YAAfyf,EAAMzlB,OACNysB,EAAMs+W,gBAAkBj3U,EAAQ9tD,KAEpCymB,EAAM+F,UAAansB,EAAGomB,EAAMpmB,EAAGC,EAAGmmB,EAAMnmB,GACxCmmB,EAAM0/R,KAAO9lT,EACbomB,EAAM2/R,KAAO9lT,EACbknT,EAAc1vT,KAAK2uB,GAEvB+gS,EAAc/8R,KAAK,SAAUmkB,EAAGhe,GAC5B,OAAOge,EAAEvuC,EAAIuwB,EAAEvwB,IAEnB/M,KAAKk0T,cAAgBA,GAKzBu6E,EAAkBpzY,UAAU0zY,SAAW,WACnC,IAAID,EAAQ9uY,KAAKmkC,UACbpuB,EAAS/V,KAAKoxY,WAClB,GAAoB,YAAftC,EAAMpoY,MAAuC,QAAfooY,EAAMpoY,MAAmBooY,EAAMG,aAAa2D,aAAa97W,QAAS,CACjG,IAAIhf,GACAxU,GAAMwrY,EAAM9tY,QAAQsC,GAAK,mBACzBk4B,GAAMszW,EAAMt0U,QAAQhuD,KAAMivB,GAAM1lB,EAChC2lB,GAAMozW,EAAM95W,cAAchf,MAAQ84X,EAAMt0U,QAAQ/tD,MAAOkvB,GAAM5lB,EAC7DuoB,OAAUt+B,KAAK6yY,UACfplY,QAAWqhY,EAAMG,aAAa2D,aAAanlY,QAC3Ci1N,mBAAoBosK,EAAMG,aAAa2D,aAAa9+U,UACpD5uB,eAAgBllC,KAAK8yY,UACrB/lK,YAAa,QAAU/sO,KAAKqpV,OAAS,KAEzCylD,EAAMt+W,UAAU7uB,YAAYmtY,EAAM/+W,SAASg/D,SAASj3E,MAM5D22X,EAAkBpzY,UAAUs1Y,mBAAqB,SAAU55W,EAAM56B,EAAGiiC,EAAM6G,GACtE,IAAIhlC,GACA82B,KAAMA,EAAMsB,QAAQ,EAAO4M,OAAQA,EAAQ7G,KAAMA,EAAM+F,UAAWnkC,KAAKmkC,UAAWvM,WAAYz7B,GAGlG,OADA6D,KAAKmkC,UAAUzd,QAAQqQ,EAAM92B,GACtBA,GAEJwuY,KCnwBP5iT,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAoB5D81W,GAA2B,SAAUxmT,GAMrC,SAASwmT,EAAUlgY,EAAShS,GACxB,IAAIjB,EAAQ2sF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAGnD,OADAD,EAAM6mB,SAAWpb,GAAQob,SAClB7mB,EA4dX,OAreA8rF,GAAUqnT,EAAWxmT,GAcrBwmT,EAAU73Y,UAAUoX,UAAY,WAC5BzS,KAAKogH,eACLpgH,KAAK0mB,QAAQ,QAAUyd,UAAWnkC,OAClCA,KAAKmzY,kBAAoB,IAAI1E,GAAkBzuY,MAC/CA,KAAKozY,YACLpzY,KAAKykB,aACLzkB,KAAK2N,cAKTulY,EAAU73Y,UAAUsyG,OAAS,WAEzB3tG,KAAKmzY,kBAAkB7yT,cACvBtgF,KAAKqzY,kBACLrzY,KAAKgB,QAAQW,YAAY3B,KAAKwwB,WAC9BxwB,KAAK6mT,8BACL7mT,KAAK0mB,QAAQ,UAAYyd,UAAWnkC,QAKxCkzY,EAAU73Y,UAAUg4Y,gBAAkB,WAElCrzY,KAAKumT,eACLvmT,KAAKszY,YACLtzY,KAAKmzY,kBAAkBjnK,gBAK3BgnK,EAAU73Y,UAAUi4Y,UAAY,WAC5B,IAAI7rF,EAAaznT,KAAKmB,cAAc,OACpCsmT,EAAWnkT,GAAKtD,KAAKgB,QAAQsC,GAAK,qBAClCmkT,EAAWjkT,aAAa,QAAS,sBACjCxD,KAAKgB,QAAQW,YAAY8lT,GACzBznT,KAAKgB,QAAQ0D,MAAM6pC,QAAU,QAC7BvuC,KAAKgB,QAAQ0D,MAAMwP,SAAW,YAKlCg/X,EAAU73Y,UAAUwrT,4BAA8B,WAC9C,IAAI7lT,EAAU6jC,GAAa7kC,KAAKgB,QAAQsC,GAAK,sBAC7C,GAAKtC,EAAL,CAGA,IAAI0xB,EAAO1yB,KAAKgB,QAAQ4K,wBACpBm9D,EAAUlkC,GAAa7kC,KAAKgB,QAAQsC,GAAK,QAAQsI,wBACrD5K,EAAQ0D,MAAM8H,KAAOH,KAAKC,IAAIy8D,EAAQv8D,KAAOkmB,EAAKlmB,KAAM,GAAK,KAC7DxL,EAAQ0D,MAAMgI,IAAML,KAAKC,IAAIy8D,EAAQr8D,IAAMgmB,EAAKhmB,IAAK,GAAK,OAM9DwmY,EAAU73Y,UAAUkrT,aAAe,WAC/B,IACIujF,EADA9zX,EAAQhW,KAAKuzY,cAActuW,OAAOjvB,OAElCA,EAAQ,GAAuC,gBAAlChW,KAAKuzY,cAAcjmX,cAChCw8W,EAAa,IAAI9sK,GAAWh9N,KAAKgB,QAAQsC,GAAK,mBAAoBtD,KAAKuzY,cAAcjmX,WAAYttB,KAAKuzY,cAActuW,OAAQ,EAAG,IAAI1P,GAAKvf,EAAQ,EAAGA,EAAQ,EAAGhW,KAAKg1B,cAAchf,MAAQA,EAAOhW,KAAKg1B,cAAcjf,OAASC,IAC5NhW,KAAKwwB,UAAU7uB,YAAY2iC,GAActkC,KAAM8pY,KAGnD,IAAItvU,EAAUx6D,KAAKw6D,QACnBsvU,EAAa,IAAI9sK,GAAWh9N,KAAKgB,QAAQsC,GAAK,uBAAwB,eAAiBuyB,MAAO,cAAe7f,MAAO,GAAK,EAAG,IAAIuf,GAAKilC,EAAQhuD,KAAMguD,EAAQ9tD,IAAK1M,KAAKg1B,cAAchf,OAASwkD,EAAQhuD,KAAOguD,EAAQ/tD,OAAQzM,KAAKg1B,cAAcjf,QAAUykD,EAAQ9tD,IAAM8tD,EAAQ7tD,UAC9Q,IAAI+tG,EAAW16G,KAAK+vB,SAAS0qF,gBAAiBn3G,GAAItD,KAAKgB,QAAQsC,GAAK,yBACpEghC,GAActkC,KAAM8pY,EAAYpvR,GAChC16G,KAAKwwB,UAAU7uB,YAAY+4G,IAK/Bw4R,EAAU73Y,UAAU+3Y,UAAY,WAC5BpzY,KAAK4pT,YACLppR,GAAUxgC,OAKdkzY,EAAU73Y,UAAUuuT,UAAY,WAC5B,GAAI5pT,KAAKwwB,UAAW,CAChB,KAAOxwB,KAAKwwB,UAAUjf,WAAW9U,OAAS,GACtCuD,KAAKwwB,UAAUlrB,YAAYtF,KAAKwwB,UAAUzT,aAEzC/c,KAAKwwB,UAAU8K,iBAAmBt7B,KAAKwwB,UAAU/vB,YAClD8D,EAAOvE,KAAKwwB,YxUyH5B,SAA8BltB,GAC1B,IAAItC,EAAUR,SAASyuB,eAAe3rB,GAC/BtC,GAAUuD,EAAOvD,GwUxHpByvB,CAAczwB,KAAKgB,QAAQsC,GAAK,sBAC5BtD,KAAKwzY,wBACLxzY,KAAKwzY,uBAAuBC,yBAMpCP,EAAU73Y,UAAUsS,WAAa,WAC7B3N,KAAK0wE,KAAO,IAAI27B,GAChBrsG,KAAK45G,aAAe,IAAIR,GAAKp5G,KAAK+/B,gBAAiB//B,KAAKusT,sBAAuBvsT,KAAKgO,SAOxFklY,EAAU73Y,UAAU+2F,gBAAkB,WAClC,IAAIgB,KAOJ,OANIpzF,KAAK0zY,gBAAgB58W,SAAW92B,KAAK0zY,gBAAgBC,kBAAkB78W,UACvEs8D,EAAQ5uF,MACJouF,OAAQ,mBACR3yF,MAAOD,QAGRozF,GAKX8/S,EAAU73Y,UAAU+kH,aAAe,WAC/B,IACI/nF,EAAS7sB,GAAQC,UAAY,eAAiB,aAElDlG,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQkgF,eAAgB1rF,KAAK4zY,eAC/DruY,GAAahB,OAAOvE,KAAKgB,QAASq3B,EAAQr4B,KAAK6zY,qBAC/CtuY,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQmgF,cAAe3rF,KAAK8zY,mBAC9Dj4Y,OAAOe,oBAAqB4O,GAAQwlB,SAAY,gBAAiBn1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAK+zY,kBAKxJb,EAAU73Y,UAAUopB,WAAa,WAC7B,IAAI4T,EAAS7sB,GAAQC,UAAY,eAAiB,aAElDlG,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQkgF,eAAgB1rF,KAAK4zY,cAAe5zY,MAC3EuF,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAKg0Y,eAAgBh0Y,MAC7DuF,GAAanB,IAAIpE,KAAKgB,QAASq3B,EAAQr4B,KAAK6zY,oBAAqB7zY,MACjEuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQmgF,cAAe3rF,KAAK8zY,kBAAmB9zY,MAC9EnE,OAAOa,iBAAkB8O,GAAQwlB,SAAY,gBAAiBn1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAK+zY,gBAAgBz4Y,KAAK0E,OACtK,IAAIy7G,GAAMz7G,KAAKgB,UAMnBkyY,EAAU73Y,UAAU04Y,gBAAkB,SAAUlzY,GAC5C,IAAId,EAAQC,KACRC,GACA82B,KAAM,SACNo0R,aAAcnrT,KAAKg1B,cACnBmP,UAAWnkC,KACXkrT,YAAa,IAAIz7R,GAAK,EAAG,IAkB7B,OAhBIzvB,KAAK8jT,UACL5jT,aAAaF,KAAK8jT,UAEtB9jT,KAAK8jT,SAAW3jT,WAAW,WACnBJ,EAAMwoF,YACNroF,aAAaH,EAAM+jT,WAGvB/jT,EAAMqgH,eACNrgH,EAAMqzY,YACNrzY,EAAMmoF,YAAa,EACnBnoF,EAAM0kB,aACNxkB,EAAKirT,YAAcnrT,EAAMi1B,cACzBj1B,EAAM2mB,QAAQ,SAAUzmB,GACxBF,EAAM4tG,WACP,MACI,GAOXulS,EAAU73Y,UAAUu4Y,cAAgB,SAAU/yY,GAC1Cb,KAAKi0Y,oBAAoBpzY,GACzBb,KAAK+N,OAAOvC,GAAQkgF,eAAgB7qF,GACpC,IAAIZ,GACA82B,KAAM,qBAAsBsB,QAAQ,EAAO8L,UAAWnkC,KAAM1D,MAAOuE,GAEvEb,KAAK0mB,QAAQzmB,EAAK82B,KAAM92B,GACxB,IAAIurT,EAAaxrT,KAAKk0Y,cAAcrzY,GACpC,GAAI2qT,EAAW0oF,cAAe,CAC1B,IAAIxD,GACA35W,KAAM,uBAAwBsB,QAAQ,EAAO/7B,MAAOuE,EAAGsjC,UAAWnkC,KAAM43B,WAAY4zR,EAAW5zR,YAEnG53B,KAAK0mB,QAAQgqX,EAAU35W,KAAM25W,GAEjC,OAAO,GAOXwC,EAAU73Y,UAAU24Y,eAAiB,SAAUnzY,GAC3Cb,KAAKi0Y,oBAAoBpzY,GACzB,IAAIZ,GACA82B,KAAM,sBAAuBsB,QAAQ,EAAO8L,UAAWnkC,KAAM1D,MAAOuE,GAExEb,KAAK0mB,QAAQzmB,EAAK82B,KAAM92B,GACxB,IAAIurT,EAAaxrT,KAAKk0Y,cAAcrzY,GACpC,GAAI2qT,EAAW0oF,cAAe,CAC1B,IAAIxD,GACA35W,KAAM,wBAAyBsB,QAAQ,EAAO/7B,MAAOuE,EAAGsjC,UAAWnkC,KAAM43B,WAAY4zR,EAAW5zR,YAEpG53B,KAAK0mB,QAAQgqX,EAAU35W,KAAM25W,GAEjC,OAAO,GAKXwC,EAAU73Y,UAAU64Y,cAAgB,SAAUrzY,GAC1C,IAAId,EAAQC,KACRm0Y,EAAUn0Y,KAAKgB,QAAQsC,GAAK,IAC5BA,EAAKzC,EAAEsG,OAAO7D,GAAGiM,QAAQ4kY,EAAS,IAAIj3Y,MAAM,KAChD,GAAIoG,EAAG,KAAOtD,KAAK0G,KAAKkP,cAAe,CACnC,IAAIw+X,EAAUhgX,SAAS9wB,EAAG,GAAI,IAS9B,OARK7F,EAAkB22Y,KAAYj6V,MAAMi6V,IAA4B,SAAdp0Y,KAAK0G,MAAiC,SAAd1G,KAAK0G,MAChF1G,KAAKmzY,kBAAkBj/E,cAAc90T,QAAQ,SAAU+zB,EAAOh3B,GACtD25B,GAAa/1B,EAAMmmO,OAAQnmO,EAAMomO,OAAQ,IAAI5wM,GAAKpC,EAAMpmB,EAAI,EAAGomB,EAAMnmB,EAAI,EAAG,GAAI,OAChFonY,EAAUj4Y,MAKb+3Y,eAAe,EAAMt8W,WAAYw8W,GAE9C,OAASF,eAAe,EAAOt8W,WAAY,OAO/Cs7W,EAAU73Y,UAAUy4Y,kBAAoB,SAAUjzY,GAG9C,OAFAb,KAAKi0Y,oBAAoBpzY,GACzBb,KAAK+N,OAAOvC,GAAQmgF,cAAe9qF,IAC5B,GAOXqyY,EAAU73Y,UAAUw4Y,oBAAsB,SAAUhzY,GAGhD,OAFAb,KAAKi0Y,oBAAoBpzY,GACzBb,KAAK+N,OAAOvC,GAAQC,UAAY,eAAiB,aAAc5K,IACxD,GAKXqyY,EAAU73Y,UAAU44Y,oBAAsB,SAAUpzY,GAChD,IAAIqL,EACAJ,EACJ,GAAIjL,EAAE6F,KAAKnI,QAAQ,UAAY,EAAG,CAC9ByB,KAAKgxB,SAAU,EACf,IAAIo6R,EAAWvqT,EACfiL,EAAQs/S,EAAShrP,eAAe,GAAGrK,QACnC7pD,EAAQk/S,EAAShrP,eAAe,GAAGpK,aAGnCh2D,KAAKgxB,QAA4B,UAAlBnwB,EAAE0pT,aAA6C,MAAlB1pT,EAAE0pT,YAC9Cr+S,EAAQrL,EAAEm1D,QACVlqD,EAAQjL,EAAEk1D,QAEd,IAAIrjC,EAAO1yB,KAAKgB,QAAQ4K,wBACpBm9D,EAAUlkC,GAAa7kC,KAAKgB,QAAQsC,GAAK,QAAQsI,wBACrD5L,KAAKmmO,OAAUj6N,EAAQwmB,EAAKhmB,IAAOL,KAAKC,IAAIy8D,EAAQr8D,IAAMgmB,EAAKhmB,IAAK,GACpE1M,KAAKkmO,OAAUp6N,EAAQ4mB,EAAKlmB,KAAQH,KAAKC,IAAIy8D,EAAQv8D,KAAOkmB,EAAKlmB,KAAM,IAM3E0mY,EAAU73Y,UAAU0tF,kBAAoB,SAAUiF,EAASC,GAGvD,IAAK,IAFD0f,GAAS,EACT7iD,GAAU,EACL1sD,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,GAAU5vF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACL,IAAK,QACL,IAAK,aACL,IAAK,eACL,IAAK,OACL,IAAK,YACD0sD,GAAU,EACV,MACJ,IAAK,SACL,IAAK,iBACL,IAAK,oBACL,IAAK,kBACL,IAAK,kBACL,IAAK,iBACL,IAAK,gBACL,IAAK,gBACL,IAAK,qBACL,IAAK,QACD6iD,GAAS,GAIjB7iD,GACA9qD,KAAKozY,YACLpzY,KAAKmzY,kBAAkB7yT,cACvBtgF,KAAKq0Y,oBAEA1mS,IACL3tG,KAAKozY,YACLpzY,KAAKq0Y,qBAMbnB,EAAU73Y,UAAUg5Y,iBAAmB,WAEnCr0Y,KAAKqzY,kBACLrzY,KAAKgB,QAAQW,YAAY3B,KAAKwwB,WAC9BxwB,KAAK6mT,+BAKTqsF,EAAU73Y,UAAU0kC,cAAgB,WAChC,MAAO,aAKXmzW,EAAU73Y,UAAUiX,QAAU,WAC1Bo6E,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,OAMlCkzY,EAAU73Y,UAAU+yG,eAAiB,WACjC,MAAO,IAEXhiB,IACIllF,EAAS,OACVgsY,EAAU73Y,UAAW,aAAS,GACjC+wF,IACIllF,EAAS,OACVgsY,EAAU73Y,UAAW,cAAU,GAClC+wF,IACIrkF,KAAY0lY,KACbyF,EAAU73Y,UAAW,cAAU,GAClC+wF,IACIllF,EAAS,SACVgsY,EAAU73Y,UAAW,YAAQ,GAChC+wF,IACIllF,OACDgsY,EAAU73Y,UAAW,kBAAc,GACtC+wF,IACIllF,EAAS,YACVgsY,EAAU73Y,UAAW,iBAAa,GACrC+wF,IACIllF,EAAS,OACVgsY,EAAU73Y,UAAW,aAAS,GACjC+wF,IACIllF,EAAS,OACVgsY,EAAU73Y,UAAW,aAAS,GACjC+wF,IACIllF,EAAS,YACVgsY,EAAU73Y,UAAW,YAAQ,GAChC+wF,IACIllF,EAAS,KACVgsY,EAAU73Y,UAAW,sBAAkB,GAC1C+wF,IACIllF,EAAS,KACVgsY,EAAU73Y,UAAW,qBAAiB,GACzC+wF,IACIllF,EAAS,KACVgsY,EAAU73Y,UAAW,uBAAmB,GAC3C+wF,IACIllF,EAAS,KACVgsY,EAAU73Y,UAAW,qBAAiB,GACzC+wF,IACIllF,EAAS,KACVgsY,EAAU73Y,UAAW,0BAAsB,GAC9C+wF,IACIllF,EAAS,KACVgsY,EAAU73Y,UAAW,qBAAiB,GACzC+wF,IACIllF,OACDgsY,EAAU73Y,UAAW,eAAW,GACnC+wF,IACIllF,EAAS,IACVgsY,EAAU73Y,UAAW,iBAAa,GACrC+wF,IACIllF,EAAS,IACVgsY,EAAU73Y,UAAW,eAAW,GACnC+wF,IACIllF,EAAS,OACVgsY,EAAU73Y,UAAW,cAAU,GAClC+wF,IACIllF,GAAS,IACVgsY,EAAU73Y,UAAW,4BAAwB,GAChD+wF,IACIrkF,KAAY6lY,KACbsF,EAAU73Y,UAAW,uBAAmB,GAC3C+wF,IACIrkF,KAAY8lY,KACbqF,EAAU73Y,UAAW,qBAAiB,GACzC+wF,IACI/jF,KAAe0lY,KAChBmF,EAAU73Y,UAAW,yBAAqB,GAC7C+wF,IACIrkF,KAAYimY,KACbkF,EAAU73Y,UAAW,oBAAgB,GACxC+wF,IACIrkF,KAAYmmY,KACbgF,EAAU73Y,UAAW,sBAAkB,GAC1C+wF,IACIrkF,KAAYqmY,KACb8E,EAAU73Y,UAAW,yBAAqB,GAC7C+wF,IACIrkF,KAAYkmY,KACbiF,EAAU73Y,UAAW,eAAW,GACnC+wF,IACIllF,EAAS,aACVgsY,EAAU73Y,UAAW,aAAS,GACjC+wF,IACItjF,KACDoqY,EAAU73Y,UAAW,cAAU,GAClC+wF,IACItjF,KACDoqY,EAAU73Y,UAAW,YAAQ,GAChC+wF,IACItjF,KACDoqY,EAAU73Y,UAAW,yBAAqB,GAC7C+wF,IACItjF,KACDoqY,EAAU73Y,UAAW,uBAAmB,GAC3C+wF,IACItjF,KACDoqY,EAAU73Y,UAAW,qBAAiB,GACzC+wF,IACItjF,KACDoqY,EAAU73Y,UAAW,sBAAkB,GAC1C+wF,IACItjF,KACDoqY,EAAU73Y,UAAW,4BAAwB,GAChD+wF,IACItjF,KACDoqY,EAAU73Y,UAAW,6BAAyB,GACjD+wF,IACItjF,KACDoqY,EAAU73Y,UAAW,0BAAsB,GAC9C+wF,IACItjF,KACDoqY,EAAU73Y,UAAW,2BAAuB,GAC/C+wF,IACItjF,KACDoqY,EAAU73Y,UAAW,0BAAsB,GAC9C+wF,IACItjF,KACDoqY,EAAU73Y,UAAW,uBAAmB,GAC3C+wF,IACItjF,KACDoqY,EAAU73Y,UAAW,cAAU,GAClC63Y,EAAY9mT,IACRhjF,GACD8pY,IAEL/lS,ICngBEmnS,GAAkC,WAClC,SAASA,EAAiBnwW,GACtBnkC,KAAKmkC,UAAYA,EACjBnkC,KAAKtD,mBAoNT,OA/MA43Y,EAAiBj5Y,UAAUqB,iBAAmB,WACtCsD,KAAKmkC,UAAUokD,cAInBvoF,KAAKmkC,UAAUgjD,GAAG37E,GAAQC,UAAY,eAAiB,aAAczL,KAAKisU,kBAAmBjsU,MAC7FA,KAAKmkC,UAAUgjD,GAAG37E,GAAQkgF,eAAgB1rF,KAAK8tO,iBAAkB9tO,MACjEA,KAAKmkC,UAAUgjD,GAAG37E,GAAQmgF,cAAe3rF,KAAK4tN,eAAgB5tN,QAElEs0Y,EAAiBj5Y,UAAU4wU,kBAAoB,SAAUprU,GACrDb,KAAKyzY,yBAETa,EAAiBj5Y,UAAUuyN,eAAiB,SAAU/sN,GAC7Cb,KAAKmkC,UAAUnT,UAGpBhxB,KAAKu0Y,eAAe1zY,GACpBb,KAAK6wU,YAETyjE,EAAiBj5Y,UAAUw1U,QAAU,WACjC3wU,aAAaF,KAAKuzO,cAClBvzO,KAAKuzO,aAAepzO,WAAWH,KAAKyzY,sBAAsBn4Y,KAAK0E,MAAO,MAM1Es0Y,EAAiBj5Y,UAAUo4Y,sBAAwB,WAC/CzzY,KAAKsyU,gBACLtyU,KAAKw0Y,iBAETF,EAAiBj5Y,UAAUyyO,iBAAmB,SAAUjtO,GACpDb,KAAKu0Y,eAAe1zY,IAExByzY,EAAiBj5Y,UAAUk5Y,eAAiB,SAAU1zY,GAClD,IAAI+2B,EACAk3W,EAAQ9uY,KAAKmkC,UACb+vR,EAAgB46E,EAAMqE,kBAAkBj/E,cACxChuF,EAAS4oK,EAAM5oK,OACfC,EAAS2oK,EAAM3oK,OACnB,GAAmB,QAAf2oK,EAAMpoY,KAKN,IAAK,IAHD+tY,EADY/1Y,QAAew1T,GACEh9R,IAAI,SAAU/D,GAAS,OAAOA,EAAM+F,SAASnsB,IAC1EssB,EAAO+yC,EAAAA,EAEFjwE,EAAI,EAAG6iF,OAAO,EAAQn9E,EAAM4yY,EAAiBh4Y,OAAQN,EAAI0F,EAAK1F,IAE/Dk9B,GADJ2lD,EAAO3yE,KAAKE,IAAI25N,EAASuuK,EAAiBt4Y,OAEtCk9B,EAAO2lD,EACSy1T,EAAiBt4Y,GACjCy7B,EAAaz7B,OAIpB,CACD,IAAIgL,EAAStG,EAAEsG,OAAO7D,GACtBs0B,EAAaxD,SAASjtB,EAAOjK,MAAM,SAAS,GAAI,IAEpD,GAAIi9C,MAAMviB,KAAgB9B,GAAaowM,EAAQC,EAAQ,IAAI5wM,GAAK,EAAG,EAAGu5W,EAAM95W,cAAchf,MAAO84X,EAAM95W,cAAcjf,SAGjH,OAFA/V,KAAKw0Y,qBACLx0Y,KAAKsyU,gBAGLtyU,KAAK43B,aAAeA,IAGxB53B,KAAK43B,WAAaA,EAClB53B,KAAK00Y,kBAAkBxgF,EAAct8R,IACrC53B,KAAKmrI,cAAc+oL,EAAct8R,MAKrC08W,EAAiBj5Y,UAAUq5Y,kBAAoB,SAAUz9W,GACrD,IAAI63W,EAAQ9uY,KAAKmkC,UACbwwW,EAAU7F,EAAM4E,gBAAgBC,kBAChC99W,EAAyB,iBAAhBi5W,EAAMzzX,MAA4B,UAAY,UAE3D,GADAwa,EAAS8+W,EAAa,MAAIA,EAAQ9+W,MAAQA,EACrC8+W,EAAQ79W,SAA0B,QAAfg4W,EAAMpoY,KAA9B,CAGA,IAAI4tF,EAAQzvD,GAAaiqW,EAAM9tY,QAAQsC,GAAK,wBACxC7F,EAAkB62F,KAClBA,EAAQw6S,EAAM/+W,SAAS+9C,aAAcxqE,GAAIwrY,EAAM9tY,QAAQsC,GAAK,yBAC5DwrY,EAAMt+W,UAAU7uB,YAAY2yF,IAEhC,IAAIsgT,EAAU/vW,GAAaiqW,EAAM9tY,QAAQsC,GAAK,sBAC1Cw2B,EAAI,KAAO7C,EAAOiC,SAASnsB,EAAI,IAAM+hY,EAAMt0U,QAAQ9tD,IAAM,MAAQuqB,EAAOiC,SAASnsB,EAAI,KACpF+hY,EAAM95W,cAAcjf,OAAS+4X,EAAMt0U,QAAQ7tD,QAChD,GAAIlP,EAAkBm3Y,GAAU,CAC5B,IAAIjF,EAAa,IAAIl6W,GAAWq5W,EAAM9tY,QAAQsC,GAAK,qBAAsB,cAAeqxY,EAAQ3+X,MAAO6f,EAAO,GAC9G85W,EAAW71W,EAAIA,EACftE,GAASs5W,EAAOa,EAAYr7S,QAG5BsgT,EAAQpxY,aAAa,IAAKs2B,GAC1B86W,EAAQpxY,aAAa,eAAgBmxY,EAAQ3+X,MAAM9I,YACnD0nY,EAAQpxY,aAAa,SAAUqyB,KAMvCy+W,EAAiBj5Y,UAAU8vI,cAAgB,SAAUl0G,GACjD,IAAI63W,EAAQ9uY,KAAKmkC,UACblT,EAAU69W,EAAM4E,gBACpB,GAAKziX,EAAQ6F,QAAb,CAGA,IAAI51B,EAAM2jC,GAAaiqW,EAAM9tY,QAAQsC,GAAK,0BACtC7F,EAAkByD,KAClBA,EAAMC,EAAc,OAASmC,GAAIwrY,EAAM9tY,QAAQsC,GAAK,yBAChDC,OAAQ,wDACZshC,GAAaiqW,EAAM9tY,QAAQsC,GAAK,sBAAsB3B,YAAYT,IAE1D4tY,EAAMgD,eAAeh7W,QAAc,QAAIg4W,EAAMgD,eAAe3iX,KAAxE,IACIpiB,EAAIkqB,EAAO47R,KAAK3lT,WACI,aAApB4hY,EAAMx9W,UACNvkB,EAAI+hY,EAAMhqU,WAAW7tC,EAAO47R,MAAMi8E,EAAMzmK,OAEf,aAApBymK,EAAMx9W,YACXvkB,EAAI,IAAIqT,KAAK6W,EAAO47R,MAAMgiF,gBAEtB59W,EAAO67R,KAAK5lT,WAApB,IACI4hB,EAAO9uB,KAAK63N,UAAUi3K,EAAM4E,gBAAgBl3W,OAAQsyW,EAAO/hY,EAAG/M,KAAKmjF,YAAYlsD,EAAO67R,KAAMg8E,GAAO5hY,YACnGgsB,GAAansB,EAAGkqB,EAAOiC,SAASnsB,EAAGC,EAAGiqB,EAAOiC,SAASlsB,GAC1DksB,EAA0B,QAAf41W,EAAMpoY,MAAmBqG,EAAGkqB,EAAOiC,SAASnsB,EAAGC,EAAGiqB,EAAOiC,SAASlsB,GAAMksB,EACnF,IAAI47W,GACA/9W,KAAM,oBAAqBsB,QAAQ,EAAOvJ,KAAMA,EAChD8jN,WACIzjN,KAAM8B,EAAQ2hN,UAAUzjN,KACxB1hB,QAASwjB,EAAQ2hN,UAAUnlO,QAC3B2hB,WAAY6B,EAAQ2hN,UAAUxjN,WAC9BC,UAAW4B,EAAQ2hN,UAAUvjN,UAC7BC,WAAY2B,EAAQ2hN,UAAUtjN,WAC9BuG,MAAO5E,EAAQ2hN,UAAU/8M,QAIjC,GADAi5W,EAAMpoX,QAAQouX,EAAa/9W,KAAM+9W,IAC7BA,EAAaz8W,OAAjB,CAGc,IAAI4V,IACdrT,QAASk6W,EAAahmX,KACtBmW,OAAQhU,EAAQgU,OAChBh2B,SAAUgiB,EAAQhiB,SAClBzS,KAAMsyY,EAAMhqU,WAAW9kE,KAAK43B,YAC5BwG,KAAMnN,EAAQmN,KACdw0M,UAAWkiK,EAAaliK,UACxB68F,iBAAiB,EACjBv2S,UAAYnsB,EAAGmsB,EAASnsB,EAAGC,EAAGksB,EAASlsB,GACvCmhO,QAAQ,EACRqkF,WAAY,IAAIj9R,GAAK,EAAG,EAAGu5W,EAAM95W,cAAchf,MAAO84X,EAAM95W,cAAcjf,QAC1EsF,MAAOyzX,EAAMzzX,QAETizB,SAASptC,MAKrBozY,EAAiBj5Y,UAAUw8N,UAAY,SAAUr7L,EAAQsyW,EAAO/hY,EAAGC,GAC/D,GAAIvP,EAAkB++B,IAAsB,KAAXA,EAC7B,OAAQxvB,GAEZ,IAAI8hB,EAAO0N,EAEX,OADA1N,EAAOA,EAAK5xB,MAAM,KAAO4xY,EAAMzmK,MAAQ,KAAK9mN,KAAKxU,GAAG7P,MAAM,KAAO4xY,EAAMt8W,MAAQ,KAAKjR,KAAKvU,IACjF8hB,IAEZwlX,EAAiBj5Y,UAAU8nF,YAAc,SAAUnmF,EAAOmnC,GAUtD,OAPIA,EAAU3H,SAAW2d,MAAMvjB,OAAO55B,IACjBmnC,EAAUusC,KAAKC,iBAAkBn0C,OAAQ2H,EAAU3H,OAAQo0C,YAAazsC,EAAU0sC,sBACrFJ,CAAezzE,GAGfA,GAOtBs3Y,EAAiBj5Y,UAAUm5Y,cAAgB,WACvC,IAAIG,EAAU30Y,KAAKmkC,UAAUnjC,QAAQ2B,cAAc,IAAM3C,KAAKmkC,UAAUnjC,QAAQsC,GAAK,wBACrF,OAAOqxY,EAAUpwY,EAAOowY,GAAW,MAKvCL,EAAiBj5Y,UAAUi3U,cAAgB,WACvCtyU,KAAK43B,WAAa,KAClB,IAAI3G,EAAUjxB,KAAKmkC,UAAUnjC,QAAQ2B,cAAc,IAAM3C,KAAKmkC,UAAUnjC,QAAQsC,GAAK,0BACrF,OAAO2tB,EAAU1sB,EAAO0sB,GAAW,MAKvCqjX,EAAiBj5Y,UAAU0kC,cAAgB,WACvC,MAAO,oBAKXu0W,EAAiBj5Y,UAAUiX,QAAU,SAAU6xB,KAGxCmwW,KC5NXS,GAAY/mS,OAAQgnS,GAAiBC,GAAoBC,GAAmBC,GAAmBC,GAAuBC,GAAgBC,GAAiBC,GAAgBC,GAAqBC,GAAqBC,GAA2BC,GAAyBC,GAAgBC,GAAwBC,GAAwBC,GAAmBC,GAAcC,GAAgBC,GAAeC,GAAeC,GAAkBC,GAAaC,GAAWC,GAAgBC,GAAgBC,GAAsBC,GAAiBC,GAA0BC,GAAsBC,GAAsBC,GAAmBC,GAAkBC,GAAkBC,GAAmBC,GAAmBC,GAAmBC,GAAwCC,GAAoBC,GAAmBC,GAAmBC,GAAwBC,GAA0BC,GAAqBC,GAA0BC,GAAsBC,GAAeC,GAAiBC,GAAuBC,GAA6BC,GAA6BC,IACrgCC,GAAwBnqS,OAAQoqS,GAAgBC,GAAmBC,GAAoBC,GAA0BC,GAAyBC,GAA4BC,GAA4BC,IAClMC,GAAqB5qS,OAAQ6qS,GAAmBC,GAAqBxD,GAAiBE,GAAqBW,GAAeC,IAC1H2C,GAAgB/qS,OAAQgrS,IACxBC,GAAiBjrS,OAAQkrS,GAAuBC,QCFrCrvL,+jCpVmDX,SAAqBttN,EAAM8vB,EAAQ8sX,GAC/B,IAAIC,EAAW36Y,KAAWlC,EAAM,MAgBhC,OAfA68Y,EAASliX,KAAK,SAAUmkB,EAAGhe,GAGvB,IAAK,IAFD1+B,EAAQ,EACRC,EAAS,EACJ1C,EAAI,EAAGA,EAAImwB,EAAO7vB,OAAQN,IAC/ByC,GAAS08C,EAAEhvB,EAAOnwB,IAClB0C,GAAUy+B,EAAEhR,EAAOnwB,IAEvB,OAAMi9Y,GAAgBx6Y,EAAQC,GAAYu6Y,GAAgBx6Y,EAAQC,GACtD,EAEHD,IAAUC,EACR,EAEJ,IAEJw6Y,ytE2FnES,cAEF,yBAEa,oNAsBP,uBAED,yGAYF,sBAEI,g2CgP1CU,mTjUJ/BxtT,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAgaxC0wI,GAAiC,WAIjC,OAHA,SAAyBt5N,GACrBtD,KAAKsD,GAAKA,MAMdmyB,GAA4B,SAAUi3D,GAEtC,SAASj3D,EAAWnyB,EAAI86B,EAAMpoB,EAAO6f,EAAOpoB,EAASqmD,EAAWh6B,EAAGzsB,EAAW3I,QACxD,IAAd2I,IAAwBA,EAAY,SAC1B,IAAV3I,IAAoBA,EAAQ,IAChC,IAAI3E,EAAQ2sF,EAAOprF,KAAKtB,KAAMsD,IAAOtD,KASrC,OARAD,EAAM0N,QAAUA,EAChB1N,EAAMq+B,KAAOA,EACbr+B,EAAMu+B,OAASzI,EACf91B,EAAM,gBAAkBiW,EACxBjW,EAAM,oBAAsB+zD,EAC5B/zD,EAAM+5B,EAAIA,EACV/5B,EAAMsN,UAAYA,EAClBtN,EAAM2E,MAAQA,EACP3E,EAEX,OAfA8rF,GAAUp2D,EAAYi3D,GAefj3D,GACTmnM,IAGEI,GAA4B,SAAUtwI,GAEtC,SAASswI,EAAW15N,EAAI86B,EAAM6G,EAAQx3B,EAASilB,GAC3C,IAAI3yB,EAAQ2sF,EAAOprF,KAAKtB,KAAMsD,IAAOtD,KASrC,OARAD,EAAMiN,EAAI0lB,EAAK1lB,EACfjN,EAAMgN,EAAI2lB,EAAK3lB,EACfhN,EAAMgW,OAAS2c,EAAK3c,OACpBhW,EAAMiW,MAAQ0c,EAAK1c,MACnBjW,EAAM0N,QAAUA,EAChB1N,EAAMq+B,KAAOA,EACbr+B,EAAMu+B,OAAS2G,EAAOpP,MACtB91B,EAAM,gBAAkBklC,EAAOjvB,MACxBjW,EAEX,OAbA8rF,GAAUmxI,EAAYtwI,GAafswI,GACTJ,IAKEntM,GAAsB,WAKtB,OAJA,SAAczZ,EAAOD,GACjB/V,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAMlBowB,GAA+B,WAK/B,OAJA,SAAuBp5B,EAAGC,GACtBhN,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,MAMbuoB,GAAsB,WAOtB,OANA,SAAcxoB,EAAGC,EAAGgJ,EAAOD,GACvB/V,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAMlB6f,GAA4B,SAAU82D,GAEtC,SAAS92D,EAAWtyB,EAAIyJ,EAAGC,EAAG6G,EAAQib,EAAMzhB,EAAWsyB,QACjC,IAAdtyB,IAAwBA,EAAY,IACxC,IAAItN,EAAQ2sF,EAAOprF,KAAKtB,KAAMsD,IAAOtD,KASrC,OARAD,EAAMsN,UAAY,GAClBtN,EAAM4/B,SAAW,OACjB5/B,EAAMgN,EAAIA,EACVhN,EAAMiN,EAAIA,EACVjN,EAAM8T,OAASA,EACf9T,EAAM+uB,KAAOA,EACb/uB,EAAMsN,UAAYA,EAClBtN,EAAM4/B,SAAWA,EACV5/B,EAEX,OAdA8rF,GAAUj2D,EAAY82D,GAcf92D,GACTgnM,IAGErkM,GAA+B,WAM/B,OALA,SAAuBzJ,EAAM9xB,EAAOmyB,GAChCnvB,KAAK8uB,KAAOA,EACZ9uB,KAAKhD,MAAQA,EACbgD,KAAKmvB,KAAOA,M2UpgBhB08D,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAM5Dk4L,GAAwB,SAAU5oI,GAElC,SAAS4oI,IACL,OAAkB,OAAX5oI,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAUypI,EAAQ5oI,GAIlBN,IACIllF,EAAS,KACVouN,EAAOj6N,UAAW,aAAS,GAC9B+wF,IACIllF,EAAS,IACVouN,EAAOj6N,UAAW,aAAS,GACvBi6N,GACT90J,IAKE60J,GAAsB,SAAU3oI,GAEhC,SAAS2oI,IACL,OAAkB,OAAX3oI,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBA6rF,GAAUwpI,EAAM3oI,GAIhBN,IACIllF,EAAS,SACVmuN,EAAKh6N,UAAW,YAAQ,GAC3B+wF,IACIllF,EAAS,KACVmuN,EAAKh6N,UAAW,aAAS,GAC5B+wF,IACIllF,EAAS,aACVmuN,EAAKh6N,UAAW,kBAAc,GACjC+wF,IACIllF,EAAS,WACVmuN,EAAKh6N,UAAW,kBAAc,GACjC+wF,IACIllF,EAAS,WACVmuN,EAAKh6N,UAAW,iBAAa,GAChC+wF,IACIllF,EAAS,IACVmuN,EAAKh6N,UAAW,eAAW,GACvBg6N,GACT70J,IAKEg1J,GAAwB,SAAU9oI,GAElC,SAAS8oI,IACL,OAAkB,OAAX9oI,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAU2pI,EAAQ9oI,GAIlBN,IACIllF,EAAS,KACVsuN,EAAOn6N,UAAW,YAAQ,GAC7B+wF,IACIllF,EAAS,KACVsuN,EAAOn6N,UAAW,aAAS,GAC9B+wF,IACIllF,EAAS,KACVsuN,EAAOn6N,UAAW,WAAO,GAC5B+wF,IACIllF,EAAS,KACVsuN,EAAOn6N,UAAW,cAAU,GACxBm6N,GACTh1J,IAKEq1J,GAAiC,SAAUnpI,GAE3C,SAASmpI,IACL,OAAkB,OAAXnpI,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBA6rF,GAAUgqI,EAAiBnpI,GAI3BN,IACIllF,GAAS,IACV2uN,EAAgBx6N,UAAW,cAAU,GACxC+wF,IACIllF,EAAS,YACV2uN,EAAgBx6N,UAAW,YAAQ,GACtC+wF,IACIrkF,GAAU8tB,MAAO,UAAW1G,KAAM,QAAUkmM,KAC7CQ,EAAgBx6N,UAAW,iBAAa,GAC3C+wF,IACIllF,EAAS,OACV2uN,EAAgBx6N,UAAW,cAAU,GACxC+wF,IACIllF,EAAS,OACV2uN,EAAgBx6N,UAAW,gBAAY,GAC1C+wF,IACIllF,GAAS,IACV2uN,EAAgBx6N,UAAW,uBAAmB,GACjD+wF,IACIrkF,KAAYutN,KACbO,EAAgBx6N,UAAW,cAAU,GACjCw6N,GACTr1J,KDhHF,SAAWspJ,GAEPA,EAAMgL,eACF3lM,KAAM,OACNC,WAAY,SACZyG,MAAO,KACPxG,UAAW,SACXC,WAAY,YAGhBw6L,EAAM9mL,cAAgB,KAEtB8mL,EAAMwvL,cAAgB,KAEtBxvL,EAAMyvL,aAAe,KAdzB,CAeGzvL,KAAUA,QEnBb,IAAIj+H,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAQ5Do8W,GAAsB,SAAU9sT,GAEhC,SAAS8sT,IACL,OAAkB,OAAX9sT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAU2tT,EAAM9sT,GAIhBN,IACIllF,EAAS,IACVsyY,EAAKn+Y,UAAW,aAAS,GAC5B+wF,IACIllF,EAAS,KACVsyY,EAAKn+Y,UAAW,iBAAa,GAChC+wF,IACIllF,EAAS4iN,GAAM9mL,gBAChBw2W,EAAKn+Y,UAAW,aAAS,GACrBm+Y,GACTh5U,IAKEw7E,GAAuB,SAAUtvD,GAEjC,SAASsvD,IACL,OAAkB,OAAXtvD,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBA6rF,GAAUmwD,EAAOtvD,GAIjBN,IACIrkF,EAAQ+hN,GAAMgL,cAAeO,KAC9Br5E,EAAM3gJ,UAAW,YAAQ,GAC5B+wF,IACIllF,EAAS,KACV80I,EAAM3gJ,UAAW,cAAU,GAC9B+wF,IACIllF,EAAS,WACV80I,EAAM3gJ,UAAW,gBAAY,GAChC+wF,IACIllF,EAAS,SACV80I,EAAM3gJ,UAAW,mBAAe,GACnC+wF,IACIllF,GAAS,IACV80I,EAAM3gJ,UAAW,iBAAa,GACjC+wF,IACIllF,GAAS,IACV80I,EAAM3gJ,UAAW,qBAAiB,GACrC+wF,IACIllF,EAAS,IACV80I,EAAM3gJ,UAAW,cAAU,GACvB2gJ,GACTx7E,IAKEi5U,GAAuB,SAAU/sT,GAEjC,SAAS+sT,IACL,OAAkB,OAAX/sT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBA6rF,GAAU4tT,EAAO/sT,GAIjBN,IACIllF,EAAS,OACVuyY,EAAMp+Y,UAAW,aAAS,GAC7B+wF,IACIllF,EAAS,OACVuyY,EAAMp+Y,UAAW,WAAO,GAC3B+wF,IACIllF,EAAS,OACVuyY,EAAMp+Y,UAAW,cAAU,GAC9B+wF,IACIllF,EAAS,KACVuyY,EAAMp+Y,UAAW,kBAAc,GAClC+wF,IACIllF,EAAS,KACVuyY,EAAMp+Y,UAAW,gBAAY,GAChC+wF,IACIllF,EAAS,OACVuyY,EAAMp+Y,UAAW,aAAS,GACtBo+Y,GACTj5U,IAKEk5U,GAAsB,SAAUhtT,GAEhC,SAASgtT,IACL,OAAkB,OAAXhtT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBA6rF,GAAU6tT,EAAMhtT,GAIhBN,IACIllF,EAAS,OACVwyY,EAAKr+Y,UAAW,aAAS,GAC5B+wF,IACIllF,EAAS,OACVwyY,EAAKr+Y,UAAW,cAAU,GAC7B+wF,IACIllF,EAAS,OACVwyY,EAAKr+Y,UAAW,gBAAY,GAC/B+wF,IACIllF,EAAS,IACVwyY,EAAKr+Y,UAAW,cAAU,GAC7B+wF,IACIllF,EAAS4iN,GAAMwvL,gBAChBI,EAAKr+Y,UAAW,aAAS,GAC5B+wF,IACIllF,EAAS,WACVwyY,EAAKr+Y,UAAW,gBAAY,GAC/B+wF,IACIllF,GAAS,IACVwyY,EAAKr+Y,UAAW,qBAAiB,GAC7Bq+Y,GACTl5U,IAKEm5U,GAAqB,SAAUjtT,GAE/B,SAASitT,IACL,OAAkB,OAAXjtT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAU8tT,EAAKjtT,GAIfN,IACIllF,EAAS,YACVyyY,EAAIt+Y,UAAW,aAAS,GAC3B+wF,IACIrkF,GAAU8tB,MAAOi0L,GAAMyvL,aAAcvjY,MAAO,GAAKs/M,KAClDqkL,EAAIt+Y,UAAW,cAAU,GAC5B+wF,IACIllF,EAAS,IACVyyY,EAAIt+Y,UAAW,cAAU,GACrBs+Y,GACTn5U,IAKEo5U,GAA4B,SAAUltT,GAEtC,SAASktT,IACL,OAAkB,OAAXltT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAU+tT,EAAYltT,GAItBN,IACIllF,EAAS4iN,GAAMyvL,eAChBK,EAAWv+Y,UAAW,aAAS,GAClC+wF,IACIrkF,GAAU8tB,MAAOi0L,GAAMyvL,aAAcvjY,MAAO,GAAKs/M,KAClDskL,EAAWv+Y,UAAW,cAAU,GACnC+wF,IACIllF,EAAS,OACV0yY,EAAWv+Y,UAAW,cAAU,GAC5Bu+Y,GACTp5U,IAKE1oC,GAA2B,SAAU40D,GAErC,SAAS50D,IACL,OAAkB,OAAX40D,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAU/zD,EAAW40D,GAIrBN,IACIllF,GAAS,IACV4wB,EAAUz8B,UAAW,cAAU,GAClC+wF,IACIllF,EAAS,MACV4wB,EAAUz8B,UAAW,gBAAY,GAC7By8B,GACT0oC,IAKEq5U,GAA4B,SAAUntT,GAEtC,SAASmtT,IACL,OAAkB,OAAXntT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBA6rF,GAAUguT,EAAYntT,GAItBN,IACIllF,EAAS,OACV2yY,EAAWx+Y,UAAW,eAAW,GACpC+wF,IACIllF,EAAS,KACV2yY,EAAWx+Y,UAAW,aAAS,GAClC+wF,IACIllF,EAAS,QACV2yY,EAAWx+Y,UAAW,cAAU,GACnC+wF,IACIllF,EAAS,OACV2yY,EAAWx+Y,UAAW,cAAU,GACnC+wF,IACIllF,GAAS,IACV2yY,EAAWx+Y,UAAW,iBAAa,GACtC+wF,IACIrkF,GAAUonB,KAAM,OAAQ0G,MAAO,WAAaw/L,KAC7CwkL,EAAWx+Y,UAAW,iBAAa,GACtC+wF,IACIllF,EAAS,OACV2yY,EAAWx+Y,UAAW,mBAAe,GACjCw+Y,GACTr5U,IAKEs5U,GAAyB,SAAUptT,GAEnC,SAASotT,IACL,OAAkB,OAAXptT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA4C/D,OA9CA6rF,GAAUiuT,EAASptT,GAInBN,IACIllF,EAAS,OACV4yY,EAAQz+Y,UAAW,aAAS,GAC/B+wF,IACIllF,EAAS,WACV4yY,EAAQz+Y,UAAW,YAAQ,GAC9B+wF,IACIllF,EAAS,OACV4yY,EAAQz+Y,UAAW,gBAAY,GAClC+wF,IACIllF,EAAS,OACV4yY,EAAQz+Y,UAAW,cAAU,GAChC+wF,IACIllF,EAAS,KACV4yY,EAAQz+Y,UAAW,oBAAgB,GACtC+wF,IACIrkF,KAAY4xY,KACbG,EAAQz+Y,UAAW,WAAO,GAC7B+wF,IACIrkF,KAAY6xY,KACbE,EAAQz+Y,UAAW,kBAAc,GACpC+wF,IACIllF,EAAS4iN,GAAMyvL,eAChBO,EAAQz+Y,UAAW,aAAS,GAC/B+wF,IACIrkF,GAAU8tB,MAAO,UAAW7f,MAAO,GAAKs/M,KACzCwkL,EAAQz+Y,UAAW,cAAU,GAChC+wF,IACIrkF,EAAQ,KAAM+vB,KACfgiX,EAAQz+Y,UAAW,iBAAa,GACnC+wF,IACIllF,EAAS,WACV4yY,EAAQz+Y,UAAW,mBAAe,GACrC+wF,IACIllF,EAAS,IACV4yY,EAAQz+Y,UAAW,oBAAgB,GACtC+wF,IACIllF,EAAS,OACV4yY,EAAQz+Y,UAAW,mBAAe,GACrC+wF,IACIllF,EAAS,IACV4yY,EAAQz+Y,UAAW,mBAAe,GAC9By+Y,GACTt5U,IAKE25J,GAAsB,SAAUztI,GAEhC,SAASytI,IAML,IAAIp6N,EAAmB,OAAX2sF,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAGhE,OADAD,EAAMy0B,iBACCz0B,EA4CX,OAtDA8rF,GAAUsuI,EAAMztI,GAYhBN,IACIllF,EAAS,OACVizN,EAAK9+N,UAAW,eAAW,GAC9B+wF,IACIllF,EAAS,OACVizN,EAAK9+N,UAAW,eAAW,GAC9B+wF,IACIllF,EAAS,OACVizN,EAAK9+N,UAAW,cAAU,GAC7B+wF,IACIrkF,KAAYyxY,KACbr/K,EAAK9+N,UAAW,iBAAa,GAChC+wF,IACI/jF,OAAiBoxY,KAClBt/K,EAAK9+N,UAAW,cAAU,GAC7B+wF,IACI/jF,OAAiByxY,KAClB3/K,EAAK9+N,UAAW,gBAAY,GAC/B+wF,IACI/jF,OAAiBwxY,KAClB1/K,EAAK9+N,UAAW,mBAAe,GAClC+wF,IACIrkF,GAAUiO,MAAO,EAAGD,OAAQ,IAAM2jY,KACnCv/K,EAAK9+N,UAAW,kBAAc,GACjC+wF,IACIrkF,GAAUiO,MAAO,EAAGD,OAAQ,GAAK2jY,KAClCv/K,EAAK9+N,UAAW,kBAAc,GACjC+wF,IACIllF,EAAS,MACVizN,EAAK9+N,UAAW,kBAAc,GACjC+wF,IACIllF,EAAS,MACVizN,EAAK9+N,UAAW,gBAAY,GAC/B+wF,IACIllF,EAAS,cACVizN,EAAK9+N,UAAW,iBAAa,GAChC+wF,IACIllF,EAAS,OACVizN,EAAK9+N,UAAW,kBAAc,GACjC+wF,IACIrkF,KAAYi0I,KACbm+E,EAAK9+N,UAAW,kBAAc,GAC1B8+N,GACT35J,ICtUEu5U,GAA6B,WAK7B,SAASA,EAAY30W,GACjBplC,KAAKolC,MAAQA,EACbplC,KAAKitD,UAAY7nB,EAAMpkC,QAAQsC,GAiFnC,OA5EAy2Y,EAAY1+Y,UAAUyrT,iBAAmB,SAAU3wS,EAAMlE,GACrD,IAAIlS,EAAQC,KACRgB,EAAUG,EAAc,OACxBmC,GAAItD,KAAKitD,UAAY,gBAAkBh7C,IAEvCoC,EAAgBqc,GAAW1wB,KAAKitD,UAAY,sBAChD92C,EAAKi6C,YAAYl5B,IAAI,SAAUmwB,EAAYolQ,GACZ,OAAvBplQ,EAAWzsB,SACX76B,EAAM26B,eAAe15B,EAASyrT,EAAiBx6S,KAGnDoC,GAAiBrT,EAAQ2lE,mBACzBtyD,EAAc1S,YAAYX,IAMlC+4Y,EAAY1+Y,UAAUq/B,eAAiB,SAAU15B,EAASyrT,EAAiBplR,GACvE,IAAIlxB,EAAOnW,KAAKolC,MAAM6jC,KAAK5hC,GACvBggB,EAAalxC,EAAKi6C,YAAYq8P,GAC9B9xR,EAAex5B,EAAc,OAC7BmC,GAAItD,KAAKitD,UAAY,SAAW5lB,EAAY,eAAiBolR,EAC7DlpT,OAAQ,+BAAiC8jD,EAAW2c,OAAS,eACxD3c,EAAW2yV,UAAY,WAAa3yV,EAAW1lC,MAAQ,IAAM,OAAS,gBAAkB,MAE7FyW,GACAC,QAAQ,EAAOtB,KChCG,mBDgCqB6D,QAASysB,EAAWzsB,QAC3DzkB,KAAMA,EAAMkxC,WAAYA,EAAYurL,UAAWvrL,EAAWurL,WAE9D5yO,KAAKolC,MAAM1e,QCnCW,mBDmCe0R,GACrC,IAAIoC,EACAK,EACJ,IAAKzC,EAASC,OAAQ,CAElB,IADAmC,EAAaD,GAAoBnC,EAASwC,WACxBJ,EAAWrkB,GAAM1Z,OAE/B,IADAo+B,EAAkBL,EAAWrkB,GACtB0kB,EAAgBp+B,OAAS,GAC5Bk+B,EAAah5B,YAAYk5B,EAAgB,SAI7CF,EAAah5B,YAAYR,EAAc,OACnCa,UAAWo2B,EAASwC,QACpBr3B,OAAQu3B,GAAa1C,EAASw6M,cAGtC5yO,KAAKi6Y,eAAet/W,EAAcxkB,EAAMkxC,GACxCrmD,EAAQW,YAAYg5B,KAM5Bo/W,EAAY1+Y,UAAU4+Y,eAAiB,SAAUj5Y,EAASmV,EAAMkxC,GAC5D,IAAInuB,EAAWgN,GAAqBmhB,EAAW1lC,MAAQ,GAAIkd,GAAewoB,EAAWz6C,OAAQuJ,EAAK+jY,eAAgBl6Y,KAAKolC,MAAMmkS,UACzHr0T,EAAc6lB,GAAmB/5B,GACrCA,EAAQ0D,MAAM8H,KAAQ0sB,EAASnsB,EAAKmI,EAAYc,MAAQ,EAAM,KAC9DhV,EAAQ0D,MAAMgI,IAAOwsB,EAASlsB,EAAKkI,EAAYa,OAAS,EAAM,KAC9D/U,EAAQwC,aAAa,aAAc6jD,EAAW2M,aAAe,eAKjE+lV,EAAY1+Y,UAAU0kC,cAAgB,WAElC,MAAO,eAOXg6W,EAAY1+Y,UAAUiX,QAAU,SAAU8yB,KAGnC20W,KEvFPI,GAA8B,WAK9B,SAASA,EAAa/0W,GAClBplC,KAAKolC,MAAQA,EACbplC,KAAKgB,QAAUokC,EAAMpkC,QACrBhB,KAAKixB,QAAUmU,EAAMnU,QACrBjxB,KAAK4yO,UAAY5yO,KAAKixB,QAAQ2hN,UAC9B5yO,KAAKo6Y,YAAcp6Y,KAAKixB,QAAQgU,OAChCjlC,KAAKq6Y,UAAY,IAAIpsW,IACjBI,QAAS,SACTisW,aAAct6Y,KAAKu6Y,eAAej/Y,KAAK0E,MACvCouC,WAAYpuC,KAAKw6Y,qBAAqBl/Y,KAAK0E,MAC3Cq7H,UAAW,EAAGQ,WAAY,MAE9B77H,KAAKq6Y,UAAU/rW,SAAStuC,KAAKgB,SA8MjC,OAzMAm5Y,EAAa9+Y,UAAU8vI,cAAgB,SAAUhkI,GAC7C,IACInG,EACA2gB,EAFA84X,EAAiBvzW,GAAW//B,EAAO7D,GAAItD,KAAKolC,OAGhDplC,KAAK06Y,YAAc16Y,KAAKolC,MAAM6jC,KAAKwxU,EAAepzW,WAClDrnC,KAAKy6Y,eAAkBz6Y,KAAK06Y,YAAoB,SAAED,EAAenzW,cACjE3lB,EAAQ6jB,GAAkBxlC,KAAKy6Y,eAAexnQ,aAAcjzI,KAAK06Y,YAAY1oX,aAAa1lB,IAAKtM,KAAK06Y,YAAY1oX,aAAa7R,IAAKngB,KAAK06Y,YAAY5mX,WAAY9zB,KAAK06Y,YAAY/0W,SAAyC,cAA/B3lC,KAAK06Y,YAAY7lX,WAA6B,IAExL,QADhD7zB,EAAUhB,KAAK26Y,oBAAoBh5X,IACvB9O,aAAa,qBACrB7S,KAAK2vE,aAAahuD,GAClB3hB,KAAKq6Y,UAAU34Y,KAAKV,KAM5Bm5Y,EAAa9+Y,UAAUs/Y,oBAAsB,SAAUh5X,GACnD,IAAIuX,EAAWgN,GAAqBvkB,EAAO3hB,KAAK06Y,YAAYR,cAAel6Y,KAAKolC,MAAMmkS,UAClFvoU,EAAU0vB,GAAW1wB,KAAKgB,QAAQsC,GAAK,iBAa3C,OAZItC,GACAA,EAAQ0D,MAAM8H,KAAO0sB,EAASnsB,EAAI,KAClC/L,EAAQ0D,MAAMgI,IAAMwsB,EAASlsB,EAAI,OAGjChM,EAAUG,EAAc,OACpBmC,GAAItD,KAAKgB,QAAQsC,GAAK,gBACtBC,OAAQ,0BAA4B21B,EAASnsB,EAAI,UAAYmsB,EAASlsB,EAClE,mDAER0jB,GAAW1wB,KAAKgB,QAAQsC,GAAK,sBAAsB3B,YAAYX,IAE5DA,GAKXm5Y,EAAa9+Y,UAAUs0E,aAAe,SAAUhuD,GAC5C,QAAQ,GACJ,KAAMA,GAAS,GAAKA,GAAS,GACzB3hB,KAAKq6Y,UAAUnmY,SAAW,cAC1B,MACJ,KAAMyN,GAAS,IAAMA,EAAQ,GACzB3hB,KAAKq6Y,UAAUnmY,SAAW,cAC1B,MACJ,KAAMyN,GAAS,IAAMA,EAAQ,IACzB3hB,KAAKq6Y,UAAUnmY,SAAW,aAC1B,MACJ,KAAMyN,GAAS,KAAOA,EAAQ,IAC1B3hB,KAAKq6Y,UAAUnmY,SAAW,aAC1B,MACJ,KAAMyN,GAAS,KAAOA,EAAQ,IAC1B3hB,KAAKq6Y,UAAUnmY,SAAW,UAC1B,MACJ,KAAMyN,GAAS,KAAOA,EAAQ,IAC1B3hB,KAAKq6Y,UAAUnmY,SAAW,UAC1B,MACJ,KAAMyN,GAAS,KAAOA,EAAQ,IAC1B3hB,KAAKq6Y,UAAUnmY,SAAW,WAC1B,MACJ,QACIlU,KAAKq6Y,UAAUnmY,SAAW,WAGlClU,KAAKq6Y,UAAUn2V,YAKnBi2V,EAAa9+Y,UAAUk/Y,eAAiB,SAAUt6Y,GAC9C,IAAI26Y,EAAgB56Y,KAAKolC,MAAMnU,QAAQuL,QAAUx8B,KAAK06Y,YAAYrlX,WAAWmH,OACzET,EAAoB6+W,GAAoD,OAAnCA,EAAcjrY,MAAM,WACzD6sB,EAASx8B,KAAKolC,MAAMsrC,KAAKC,iBACzBn0C,OAAQ+K,GAAeqzW,GAAgBhqU,YAAa5wE,KAAKolC,MAAMyrC,uBAE/Dj2C,EAAUmB,EACV6+W,EAAcrrY,QAAQ,IAAI2U,OAAO,UAAW,KAAMsY,EAAOx8B,KAAKy6Y,eAAexnQ,eAC7Ez2G,EAAOx8B,KAAKy6Y,eAAexnQ,cAG3B76G,GACAC,QAAQ,EAAOtB,KDlGA,gBCmGf6D,QAJJA,EAAU56B,KAAKixB,QAAQhiB,SACnBsrB,GAAoBv6B,KAAKixB,QAAQhiB,SAAjCsrB,CAA2Cv6B,KAAK06Y,aAAa,GAAK9/W,EAIlEqK,OAAQjlC,KAAKo6Y,YACbjkY,KAAMnW,KAAK06Y,YAAatxU,QAASppE,KAAKy6Y,eACtC7nK,UAAW5yO,KAAK4yO,WAEpB5yO,KAAKolC,MAAM1e,QDxGQ,gBCwGe0R,GAClCp4B,KAAKo6Y,YAAchiX,EAAS6M,OAC5BhlC,EAAKo4B,OAASD,EAASC,OACvBr4B,KAAKq6Y,UAAUz/W,QAAUxC,EAASwC,QAClC56B,KAAK4yO,UAAYx6M,EAASw6M,UAC1B5yO,KAAKq6Y,UAAUn2V,YAKnBi2V,EAAa9+Y,UAAUm/Y,qBAAuB,SAAUv6Y,GACpD,IAKI0vH,EACAp2G,EANAwV,EAAO/uB,KAAK4yO,UACZ/D,EAAc7uO,KAAKo6Y,YAAYvkX,MAC/BoP,EAASjlC,KAAKo6Y,YAAYpkY,MAC1B6kY,EAAc,EAIlB56Y,EAAKe,QAAQ8C,UAAUS,OAAO,iBAC9BtE,EAAKe,QAAQ8C,UAAUM,IAAI,gBAC3B,IAAIo0H,EAAWv4H,EAAKe,QAAQ2B,cAAc,gBAC1CsD,EAAkBhG,EAAKe,SACnBupD,gBAAmBvqD,KAAKixB,QAAQmN,KAAMywM,YAAeA,GAAe,UACpE7+I,YAAe/qD,EAAS,OAE5Bh/B,EAAkBhG,EAAKe,QAAQ2B,cAAc,mBACzCkzB,MAAS9G,EAAK8G,MAAOvG,WAAcP,EAAKO,WAAYJ,SAAYH,EAAKI,KACrEC,WAAcL,EAAKK,WAAY3hB,QAAWshB,EAAKthB,QAAQP,WAAYmiB,UAAaN,EAAKM,YAEzFppB,EAAkBhG,EAAKe,QAAQ2B,cAAc,iBACzCqT,MAAS,GAAK6kY,EAAc51W,GAAU,KAAMlvB,OAAU8kY,EAAc51W,EAAS,OAE7EuzF,EAAS10H,UAAUK,SAAS,cAE5BwrH,GADAkrR,EAAc56Y,EAAKe,QAAQ2B,cAAc,gBAAgB+wD,cAC9B,KAC3BztD,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzCm4Y,iBAAoB,cAAeC,gBAAmB,cAAeC,kBAAqBnsK,EAC1FhiB,gBAAmBl9F,EAAYw7O,iBAAoBx7O,EAAYmkC,kBAAqBnkC,IAExFp2G,EAAcshY,EAAc51W,EAAU,KACtCh/B,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzCm4Y,iBAAoB,cAAeC,gBAAmB,cAAeC,kBAAqBh7Y,KAAKixB,QAAQmN,KACvGyuL,gBAAmBtzM,EAAY4xV,iBAAoB5xV,EAAYu6I,kBAAqBv6I,EACpF/M,KAAQy4B,EAAS,KAAMv4B,IAAOu4B,EAAS,KAAMsJ,QAAW,UAGvDiqF,EAAS10H,UAAUK,SAAS,iBAEjCwrH,GADAkrR,EAAc56Y,EAAKe,QAAQ2B,cAAc,gBAAgB+wD,cAC9B,KAC3BztD,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzCm4Y,iBAAoB,cAAeC,gBAAmB,cAAeE,eAAkBpsK,EACvFhiB,gBAAmBl9F,EAAYw7O,iBAAoBx7O,EAAYurR,eAAkBvrR,IAErFp2G,EAAcshY,EAAc51W,EAAU,KACtCh/B,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzCm4Y,iBAAoB,cAAeC,gBAAmB,cAAeE,eAAkBj7Y,KAAKixB,QAAQmN,KACpGyuL,gBAAmBtzM,EAAY4xV,iBAAoB5xV,EAAY2hY,eAAkB3hY,EACjF/M,KAAQy4B,EAAS,KAAMv4B,IAAO,IAAK6hC,QAAW,UAG7CiqF,EAAS10H,UAAUK,SAAS,eACjC8B,EAAkBhG,EAAKe,QAAQ2B,cAAc,iBACzCqT,MAAS6kY,EAAc51W,EAAS,KAAMlvB,OAAU,GAAK8kY,EAAc51W,GAAU,OAGjF0qF,GADAkrR,EAAc56Y,EAAKe,QAAQ2B,cAAc,gBAAgBiC,aAC9B,KAC3BqB,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzCs4Y,eAAkB,cAAeD,kBAAqB,cAAeF,iBAAoBjsK,EACzFqsK,eAAkBvrR,EAAYmkC,kBAAqBnkC,EAAYw7O,iBAAoBx7O,IAEvFp2G,EAAcshY,EAAc51W,EAAU,KACtCh/B,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzCs4Y,eAAkB,cAAeD,kBAAqB,cAAeF,iBAAoB96Y,KAAKixB,QAAQmN,KACtG88W,eAAkB3hY,EAAYu6I,kBAAqBv6I,EAAY4xV,iBAAoB5xV,EACnF/M,KAAQy4B,EAAS,KAAMv4B,IAAOu4B,EAAS,KAAMsJ,QAAW,WAI5DtoC,EAAkBhG,EAAKe,QAAQ2B,cAAc,iBACzCqT,MAAU6kY,EAAc51W,EAAU,KAAMlvB,OAAU,GAAK8kY,EAAc51W,GAAU,OAGnF0qF,GADAkrR,EAAc56Y,EAAKe,QAAQ2B,cAAc,gBAAgBiC,aAC9B,KAC3BqB,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzCs4Y,eAAkB,cAAeD,kBAAqB,cAAeD,gBAAmBlsK,EACxFqsK,eAAkBvrR,EAAYmkC,kBAAqBnkC,EAAYk9F,gBAAmBl9F,IAEtFp2G,EAAcshY,EAAc51W,EAAU,KACtCh/B,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzCs4Y,eAAkB,cAAeD,kBAAqB,cAAeD,gBAAmB/6Y,KAAKixB,QAAQmN,KACrG88W,eAAkB3hY,EAAYu6I,kBAAqBv6I,EAAYszM,gBAAmBtzM,EAClF/M,MAASy4B,GAAU,EAAI,GAAK,GAAK,KAAMv4B,IAAOu4B,EAAS,KAAMsJ,QAAW,UAGhFvuC,KAAKq6Y,UAAUvvV,QAAQ7qD,EAAKkH,QAC5BlB,EAAkBhG,EAAKe,SACnButC,QAAW,QAAS4sW,mBAAsB,WAC1CC,mBAAsBp7Y,KAAKixB,QAAQw+S,gBAAkB,SAAW,SAMxE0qE,EAAa9+Y,UAAU0kC,cAAgB,WAEnC,MAAO,WAOXo6W,EAAa9+Y,UAAUiX,QAAU,SAAU8yB,KAGpC+0W,KCjOPkB,GAA8B,WAK9B,SAASA,EAAaj2W,GAClBplC,KAAKolC,MAAQA,EA+MjB,OAxMAi2W,EAAahgZ,UAAUigZ,kBAAoB,SAAUnlY,EAAMlE,EAAOjR,EAASokC,GACvE,IAAI9X,EAAanX,EAAKmX,WACtBttB,KAAKu7Y,cAAcplY,GACA,OAAfmX,GACA6X,GAAW,IAAI1P,GAAW2P,EAAMpkC,QAAQsC,GAAK,kBAAoB2O,EAAOqb,EAAY,EAAG,cAAe,KAAM,IAAK8Y,GAAWhB,EAAMmkS,SAAU,EAAG,IAAMl9T,KAAK8T,IAAIhK,EAAKuc,KAAK1c,MAAOG,EAAKuc,KAAK3c,QAAU,GAAK,GAAI,wBAAyB/U,EAASokC,IAQtPi2W,EAAahgZ,UAAUimO,aAAe,SAAUnrN,EAAMlE,EAAOjR,EAASokC,GAClE,IAAItR,EAAa3d,EAAK2d,WAClB6R,EAAWxvB,EAAKwvB,SAChBxvB,EAAKyjN,UAAU5jN,MAAQ,IACvB8d,EAAc+R,GAAgB/R,EAAY6R,IAA0B,EAAGA,EAAW,KAAK,GAAjC7R,EACtDqR,GAAW,IAAI1P,GAAW2P,EAAMpkC,QAAQsC,GAAK,aAAe2O,EAAO,cAAekE,EAAKyjN,UAAU5jN,MAAOG,EAAKyjN,UAAU/jM,MAAO,KAAM1f,EAAKyjN,UAAU9lK,UAAW1tB,GAAWhB,EAAMmkS,SAAUz1S,EAAa,GAAI6R,EAAW,GAAIxvB,EAAK+jY,eAAgB,GAAI,wBAAyBl5Y,EAASokC,KAQ5Ri2W,EAAahgZ,UAAUmgZ,eAAiB,SAAUrlY,EAAMlE,EAAOjR,EAASokC,GACpE,IAMIlM,EAEArlB,EACA8N,EACAtO,EAVA6T,EAAeke,EAAMrV,SAAS+9C,aAC9BxqE,GAAI8hC,EAAMpkC,QAAQsC,GAAK,gBAAkB2O,IAEzCkO,EAAMhK,EAAK6b,aAAa7R,IACxB7T,EAAM6J,EAAK6b,aAAa1lB,IACxBi1B,EAAkBprB,EAAKqe,cAEvB9vB,EAAQyR,EAAKkf,WAIbzoB,EAASuJ,EAAK+jY,cAEK,YAAnBx1Y,EAAMwP,SACNtH,GAAWuJ,EAAKslY,UAAYtlY,EAAK4kN,aAAahlN,OAASI,EAAKyjN,UAAU5jN,MAAQ,KAI9EpJ,GAAWuJ,EAAKulY,SAAWvlY,EAAK4kN,aAAahlN,OAASI,EAAKyjN,UAAU5jN,MAAQ,IACxEtR,EAAMs1Y,UAPI,GAOuB,GAE1C,IAAK,IAAI79Y,EAAI,EAAG8+B,EAAWsG,EAAgB9kC,OAAQN,EAAI8+B,EAAU9+B,IAClD,IAANA,GAAiC,UAAtBuI,EAAMi3Y,aACjBx/Y,IAAO8+B,EAAW,GAA4B,SAAtBv2B,EAAMi3Y,cAGnCtoY,EAAQkuB,EAAgBplC,GAExB+8B,EAAWgN,GADXvkB,EAAQtV,KAAK4xB,MAAMuH,GAAkBnyB,EAAMrW,MAAOsP,EAAK6T,EAAKhK,EAAK2d,WAAY3d,EAAKwvB,SAA6B,cAAnBxvB,EAAK0e,YAC1DjoB,EAAQw4B,EAAMmkS,UACrD11T,EAAS7T,KAAK47Y,WAAW1iX,EAAUx0B,EAAOid,EAAOtO,GACjDsiB,GAAY,IAAIC,GAAWwP,EAAMpkC,QAAQsC,GAAK,SAAW2O,EAAQ,UAAY9V,EAAG+8B,EAASnsB,EAAGmsB,EAASlsB,EAAG6G,EAAQR,EAAMyb,KAAMpqB,EAAMs1Y,UAAY,WAAar4X,EAAQ,IAAM,IAAOuX,EAAU,EAAI,IAAMA,EAASlsB,EAAI,IAAM,GAAI,QAAStI,EAAMqqB,KAAMrqB,EAAMm3Y,cAAgBr0W,GAAcn0B,EAAMrW,MAAOmZ,EAAKsxB,OAAQ/iC,EAAMqqB,KAAK8G,OAASnxB,EAAMqqB,KAAK8G,MAAO3O,EAAc,yBAEtWlmB,EAAQW,YAAYulB,IAMxBm0X,EAAahgZ,UAAUugZ,WAAa,SAAU1iX,EAAUx0B,EAAOid,EAAOtO,GAClE,GAAI3O,EAAMs1Y,UACN,MAAO,SAEX,IAAInmY,EAA4B,WAAnBnP,EAAMwP,SACbyN,EAAQ,KAAOA,EAAQ,IAAO,QAAY,IAAMA,GAASA,EAAQ,GAAM,MAAQ,SAC/EA,EAAQ,KAAOA,EAAQ,IAAO,MAAU,IAAMA,GAASA,EAAQ,GAAM,QAAU,SAMrF,OALAuX,EAASlsB,GAAwB,WAAnBtI,EAAMwP,SACdyN,GAAS,KAAOA,GAAS,IAAQtO,EAAM8b,KAAKpZ,OAAS,EAClD4L,GAAS,IAAMA,GAAS,IAAO,EAAItO,EAAM8b,KAAKpZ,OAAS,EAC1D4L,GAAS,KAAOA,GAAS,IAAO,EAC7BA,GAAS,IAAMA,GAAS,IAAOtO,EAAM8b,KAAKpZ,OAAS,EAAI1C,EAAM8b,KAAKpZ,OAAS,EAC7ElC,GAOXwnY,EAAahgZ,UAAUygZ,mBAAqB,SAAU3lY,EAAMlE,EAAOjR,EAASokC,GACxE,IAAI22W,EAAoB32W,EAAMrV,SAAS+9C,aACnCxqE,GAAI8hC,EAAMpkC,QAAQsC,GAAK,wBAA0B2O,IAEjD+pY,EAAiB7lY,EAAK8lY,WACtBC,EAA4C,OAA5BF,EAAe75Y,SAC/B65Y,EAAe75Y,SAAYgU,EAAK6b,aAAa7vB,SAAW,EACxDg6Y,EAAeH,EAAeH,cAClC,GAAIG,EAAehmY,OAASgmY,EAAejmY,QAAUmmY,EAAe,CAChE,IAAK,IAAI//Y,EAAIga,EAAK6b,aAAa7R,IAAK7T,EAAM6J,EAAK6b,aAAa1lB,IAAKnQ,GAAKmQ,EAAKnQ,GAAK+/Y,EACxEl8Y,KAAKo8Y,YAAY79Y,SAASpC,EAAEgjB,QAAQ,IAAM,GAC1CgmB,GAAW,IAAI1P,GAAW2P,EAAMpkC,QAAQsC,GAAK,wBAA0B2O,EAAQ,IAAM9V,EAAG,cAAe6/Y,EAAehmY,MAAOmmY,EAAe30W,GAAcrrC,EAAGga,EAAKsxB,OAAQu0W,EAAenmX,OAASmmX,EAAenmX,MAAO,KAAM,IAAK71B,KAAKq8Y,eAAelgZ,EAAG6/Y,EAAgB7lY,GAAO,GAAI,wBAAyB4lY,EAAmB32W,GAGzUpkC,EAAQW,YAAYo6Y,KAQ5BV,EAAahgZ,UAAUihZ,mBAAqB,SAAUnmY,EAAMlE,EAAOjR,EAASokC,GACxE,IAAIm3W,EAAoBn3W,EAAMrV,SAAS+9C,aACnCxqE,GAAI8hC,EAAMpkC,QAAQsC,GAAK,wBAA0B2O,IAEjDuqY,EAAiBrmY,EAAKsmY,WACtBN,EAAeK,EAAeX,cAElC,GADA77Y,KAAKo8Y,eACDI,EAAexmY,OAASwmY,EAAezmY,QAAUI,EAAK6b,aAAa7vB,SAAU,CAC7E,IAAK,IAAIhG,EAAIga,EAAK6b,aAAa7R,IAAK7T,EAAM6J,EAAK6b,aAAa1lB,IAAKnK,EAAWgU,EAAK6b,aAAa7vB,SAAUhG,GAAKmQ,EAAKnQ,GAAKgG,EACnHnC,KAAKo8Y,YAAY53Y,MAAMrI,EAAEgjB,QAAQ,IACjCgmB,GAAW,IAAI1P,GAAW2P,EAAMpkC,QAAQsC,GAAK,wBAA0B2O,EAAQ,IAAM9V,EAAG,cAAeqgZ,EAAexmY,MAAOmmY,EAAe30W,GAAcrrC,EAAGga,EAAKsxB,OAAQ+0W,EAAe3mX,OAAS2mX,EAAe3mX,MAAO,KAAM,IAAK71B,KAAKq8Y,eAAelgZ,EAAGqgZ,EAAgBrmY,GAAO,GAAI,wBAAyBomY,EAAmBn3W,GAErUpkC,EAAQW,YAAY46Y,KAQ5BlB,EAAahgZ,UAAUghZ,eAAiB,SAAUr/Y,EAAOgW,EAASmD,GAC9D,IAAIumY,EAAiBvmY,EAAKyjN,UAAU5jN,MAAQ,EAAKhD,EAAQrH,OACrDg9U,EAAiC,YAArB31U,EAAQkB,SACpByN,EAAQ6jB,GAAkBxoC,EAAOmZ,EAAK6b,aAAa1lB,IAAK6J,EAAK6b,aAAa7R,IAAKhK,EAAK2d,WAAY3d,EAAKwvB,SAA6B,cAAnBxvB,EAAK0e,WACpHt3B,EAAQ2oC,GAAqBvkB,EAAOxL,EAAK+jY,eACxCvxD,EAAY+zD,GAAiBA,GAAgB18Y,KAAKolC,MAAMmkS,UACzDvqT,EAAMknB,GAAqBvkB,EAAOxL,EAAK+jY,eACtCvxD,EAAY+zD,GAAiBA,IAC7B/zD,EAAY31U,EAAQ+C,QAAU/C,EAAQ+C,QAAS/V,KAAKolC,MAAMmkS,UAC/D,MAAO,KAAOhsU,EAAMwP,EAAI,IAAMxP,EAAMyP,EAAI,MAAQgS,EAAIjS,EAAI,IAAMiS,EAAIhS,EAAI,KAO1EquY,EAAahgZ,UAAUshZ,cAAgB,SAAUxmY,EAAMlE,EAAOjR,EAASokC,GACnE,IAIItR,EACA6R,EAEApd,EACAmP,EAGA2O,EACAC,EAZAvmC,EAAQC,KACR48Y,EAAex3W,EAAMrV,SAAS+9C,aAC9BxqE,GAAI8hC,EAAMpkC,QAAQsC,GAAK,gBAAkB2O,IAIzC2zB,EAAiC,cAAnBzvB,EAAK0e,UAGnB1U,EAAMhK,EAAK6b,aAAa7R,IACxB7T,EAAM6J,EAAK6b,aAAa1lB,IAG5B6J,EAAKsxB,OAAOvQ,IAAI,SAAU/F,EAAO0rX,GAC7B98Y,EAAM+8Y,qBAAqB3mY,EAAMgb,GACjC5I,EAAalc,KAAK8T,IAAI9T,KAAKC,IAAI6kB,EAAM5zB,MAAO4iB,GAAMgR,EAAMnS,KACxD0Y,EAAWrrB,KAAK8T,IAAI9T,KAAKC,IAAI6kB,EAAM5zB,MAAO4zB,EAAMnS,KAAM1S,GAClDic,IAAemP,IACf5D,EAAa0R,GAAkBjd,EAAYjc,EAAK6T,EAAKhK,EAAK2d,WAAY3d,EAAKwvB,SAAUC,GACrFD,EAAWH,GAAkB9N,EAAUprB,EAAK6T,EAAKhK,EAAK2d,WAAY3d,EAAKwvB,SAAUC,GAE7ES,EADAlV,EAAMkV,WAAW5pC,OAAS,EACbqoC,GAAQ3T,EAAMkV,WAAYlV,EAAM+oX,eAGhC/oX,EAAMkV,WAGnBC,EADAnV,EAAMmV,SAAS7pC,OAAS,EACbqoC,GAAQ3T,EAAMmV,SAAUnV,EAAM+oX,eAG9B/oX,EAAMmV,SAErBX,EAAWC,EAAcD,GAAY7R,EAAYA,EAAa6R,GAAU,GACxEW,EAAWV,EAAcU,GAAYD,EAAYA,EAAaC,GAAU,GACxEnB,GAAW,IAAI1P,GAAW2P,EAAMpkC,QAAQsC,GAAK,SAAW2O,EAAQ,UAAY4qY,EAAY1rX,EAAMyW,WAAY,EAAGzW,EAAMyW,WAAY,EAAG,IAAKxB,GAAWhB,EAAMmkS,SAAUl9T,KAAKkT,MAAMuU,GAAaznB,KAAK6lB,KAAKyT,GAAWxU,EAAM+oX,cAAe7zW,EAAYC,GAAW,GAAI,wBAAyBs2W,EAAcx3W,MAG9SpkC,EAAQW,YAAYi7Y,IAMxBvB,EAAahgZ,UAAUyhZ,qBAAuB,SAAU3mY,EAAMgb,GAC1D,IAAIvkB,EAA0B,OAAjBukB,EAAMvkB,OAAkBukB,EAAMvkB,OAAS,OACpDukB,EAAM+oX,cAAgBr7W,GAAejyB,EAAQuJ,EAAK+jY,gBAOtDmB,EAAahgZ,UAAUkgZ,cAAgB,SAAUplY,GAC7C,IAAI4mY,GAA8B/8Y,KAAKolC,MAAM/pB,ONhMlC,UAAW,UAAW,UAAW,UAAW,YMiMvDlF,EAAKsxB,OAAOvQ,IAAI,SAAU/F,EAAOlf,GAC7Bkf,EAAMyW,WAAazW,EAAM0E,MAAQ1E,EAAM0E,MAAQknX,EAAY9qY,EAAQ8qY,EAAYtgZ,WAGhF4+Y,KCnNP2B,GAAiC,WAKjC,SAASA,EAAgB53W,GACrBplC,KAAKolC,MAAQA,EAsMjB,OA/LA43W,EAAgB3hZ,UAAU4hZ,aAAe,SAAU9mY,EAAMkxB,EAAWrmC,EAASokC,EAAOrN,GAChF,IAAIh4B,EAAQC,UACI,IAAZ+3B,IAAsBA,GAAU,GACpC,IAGI4C,EAHA6tC,EAAiBpjC,EAAMrV,SAAS+9C,aAChCxqE,GAAI8hC,EAAMpkC,QAAQsC,GAAK,kBAAoB+jC,IAI/ClxB,EAAKgzD,SAASjyC,IAAI,SAAUkyC,EAAS9hC,GACzBnxB,EAAK6b,aACbo3C,EAAQkqP,eACRvzT,EAAMm9Y,uBAAuB/mY,EAAMizD,GACnCzuC,EAAeyK,EAAMrV,SAAS+9C,aAC1BxqE,GAAI8hC,EAAMpkC,QAAQsC,GAAK,SAAW+jC,EAAY,YAAcC,IAEhEvnC,EAAM,OAASqpE,EAAQ1iE,KAAO,WAAWyP,EAAMkxB,EAAWC,EAAc3M,EAAcyK,GACtFrlC,EAAMo9Y,gBAAgBhnY,EAAMizD,EAASA,EAAQ6pE,cAC7CzqE,EAAe7mE,YAAYg5B,GACvB5C,GACAh4B,EAAMq9Y,mBAAmBh0U,EAASjzD,KAG1CnV,EAAQW,YAAY6mE,IAMxBw0U,EAAgB3hZ,UAAU6hZ,uBAAyB,SAAU/mY,EAAMizD,GAE/DA,EAAQ8wU,cAAmC,OAAnB9wU,EAAQx8D,OAC3BuJ,EAAK+jY,eAAiB/jY,EAAKulY,QAFlB,GAGV78W,GAAeuqC,EAAQx8D,OAAQuJ,EAAK+jY,gBAM5C8C,EAAgB3hZ,UAAUgiZ,kBAAoB,SAAUlnY,EAAMkxB,EAAWp1B,EAAOoC,EAAe+wB,GAC3F,IACIk4W,EACApkX,EACArE,EAGA0oX,EANAn0U,EAAUjzD,EAAKgzD,SAASl3D,GAIxB++C,EAAM5rB,EAAMmkS,SACZvzT,EAAQozD,EAAQo0U,aAAe,EAGnCtkX,EAAWgN,GAAqB,EAAGkjC,EAAQ8wU,cAAelpV,GAC1Dn8B,EAAY,KAAOm8B,EAAIjkD,EAAI,KAAOikD,EAAIhkD,EAAIgJ,GAAS,MAASkjB,EAAU,EAAI,IAAM83B,EAAIhkD,EAChF,MAASgkD,EAAK,EAAI,KAAOA,EAAIhkD,EAAIgJ,GAAS,KAC9CozD,EAAQkqP,YAAY9uT,KAAK2gC,GAAW,IAAI1P,GAAW2P,EAAMpkC,QAAQsC,GAAK,SAAW+jC,EAAY,mBAAqBp1B,EAAOm3D,EAAQvzC,MAAOuzC,EAAQnkC,OAAOjvB,MAAOozD,EAAQnkC,OAAOpP,MAAO,KAAM,IAAKhB,GAAYxgB,EAAe+wB,IAC1Nk4W,EAAgBz+W,GAAeuqC,EAAQq0U,WAAWhhZ,OAAQ2sE,EAAQ8wU,eAElEqD,EAAgB,KAAOvsV,EAAIjkD,EAAI,KAAOikD,EAAIhkD,EAAIgJ,GAAS,MAASkjB,EAAU,EAAI,KAAO83B,EAAIhkD,EAAIgJ,GACzF,MAAQkjB,EAASnsB,EAAI,KAAOikD,EAAIhkD,EAAIgJ,GAAS,MAAQg7C,EAAIjkD,EAAI,KAAOikD,EAAIhkD,EAAIgJ,GAE5EsnY,IACApkX,EAAWgN,GAAqB,IAAKo3W,EAAel4W,EAAMmkS,UAC1D10S,EAAY,KAAOm8B,EAAIjkD,EAAI,KAAOikD,EAAIhkD,EAAIgJ,GACtC,MAASkjB,EAAU,EAAI,KAAO83B,EAAIhkD,EAAIgJ,GACtC,MAASkjB,EAAU,EAAI,KAAO83B,EAAIhkD,EAAIgJ,GACtC,MAASg7C,EAAK,EAAI,KAAOA,EAAIhkD,EAAIgJ,GAAS,KAC9CozD,EAAQkqP,YAAY9uT,KAAK2gC,GAAW,IAAI1P,GAAW2P,EAAMpkC,QAAQsC,GAAK,SAAW+jC,EAAY,uBAAyBp1B,EAAOm3D,EAAQq0U,WAAW5nX,MAAOuzC,EAAQq0U,WAAWx4W,OAAOjvB,MAAOozD,EAAQq0U,WAAWx4W,OAAOpP,MAAO,KAAM,IAAKhB,GAAYxgB,EAAe+wB,IAC/Pm4W,GAAiB,MAAQrkX,EAASnsB,EAAI,KAAOikD,EAAIhkD,EAAIgJ,GAAS,MAAQkjB,EAASnsB,EAAI,KAAOikD,EAAIhkD,EAAIgJ,IAGlGozD,EAAQs0U,IAAI9wY,QACZw8D,EAAQkqP,YAAY9uT,KAAK2gC,GAAW7L,GAAgB03B,EAAK,SAAU,IAAIvhC,GAA0B,EAArB25C,EAAQs0U,IAAI9wY,OAAiC,EAArBw8D,EAAQs0U,IAAI9wY,QAAa,GAAI,IAAI6oB,GAAW2P,EAAMpkC,QAAQsC,GAAK,SAAW+jC,EAAY,sBAAwBp1B,EAAOm3D,EAAQs0U,IAAI7nX,MAAOuzC,EAAQs0U,IAAIz4W,OAAOjvB,MAAOozD,EAAQs0U,IAAIz4W,OAAOpP,MAAO,KAAM,IAAK,GAAI,KAAMxhB,EAAe+wB,EAAO,YAE/UgkC,EAAQkqP,YAAY9uT,KAAK2gC,GAAW,IAAI1P,GAAW2P,EAAMpkC,QAAQsC,GAAK,SAAW+jC,EAAY,uBAAyBp1B,EAAO,cAAe,EAAG,cAAe,KAAM,IAAKsrY,EAAgB,MAAOlpY,EAAe+wB,KAOnN43W,EAAgB3hZ,UAAU8hZ,gBAAkB,SAAUhnY,EAAMizD,EAASpsE,GACjE,IAAIk8B,EAAWl5B,KAAKolC,MAAMmkS,SACtB3jS,EAAiC,cAAnBzvB,EAAK0e,UACnBf,EAAa0R,GAAkBrvB,EAAK6b,aAAa7R,IAAKhK,EAAK6b,aAAa1lB,IAAK6J,EAAK6b,aAAa7R,IAAKhK,EAAK2d,WAAY3d,EAAKwvB,SAAUC,GACpID,EAAWH,GAAkBxoC,EAAOmZ,EAAK6b,aAAa1lB,IAAK6J,EAAK6b,aAAa7R,IAAKhK,EAAK2d,WAAY3d,EAAKwvB,SAAUC,GACtHD,EAAWC,EAAcD,GAAY7R,EAAYA,EAAa6R,GAAU,GACxEyjC,EAAQkqP,YAAYp8R,IAAI,SAAUl2B,GACT,aAAjBooE,EAAQ1iE,KACR1F,EAAQwC,aAAa,IAAKujC,GAAe7N,EAAUpF,EAAY6R,EAAUyjC,EAAQ8wU,cAAgB9wU,EAAQ8wU,cAAgB9wU,EAAQo0U,eAGjIx8Y,EAAQwC,aAAa,YAAa,UAAYgiC,GAAkBxoC,EAAOmZ,EAAK6b,aAAa1lB,IAAK6J,EAAK6b,aAAa7R,IAAKhK,EAAK2d,WAAY3d,EAAKwvB,SAAUC,GAAe,IAAM1M,EAASnsB,EAAI,IAAMmsB,EAASlsB,EAAI,KAE9MhM,EAAQwC,aAAa,aAAc4lE,EAAQpV,aAAe,WAAah3D,EAAMkQ,eAOrF8vY,EAAgB3hZ,UAAUsiZ,kBAAoB,SAAUxnY,EAAMkxB,EAAWp1B,EAAOoC,EAAe+wB,GAC3F,IAAIgkC,EAAUjzD,EAAKgzD,SAASl3D,GACxBinB,EAAWgN,GAAqB,EAAGkjC,EAAQ8wU,cAAe90W,EAAMmkS,UACpEngQ,EAAQkqP,YAAY9uT,KAAK2gC,GAAW7L,GAAgBJ,EAAUkwC,EAAQmpK,YAAa,IAAI9iN,GAAK25C,EAAQujK,YAAavjK,EAAQsjK,cAAetjK,EAAQy+H,SAAU,IAAIpyK,GAAW2P,EAAMpkC,QAAQsC,GAAK,SAAW+jC,EAAY,mBAAqBp1B,EAAOm3D,EAAQvzC,MAAOuzC,EAAQnkC,OAAOjvB,MAAOozD,EAAQnkC,OAAOpP,MAAO,KAAM,IAAK,GAAI,KAAMxhB,EAAe+wB,EAA+B,WAAxBgkC,EAAQmpK,YAA2B,UAAqC,UAAxBnpK,EAAQmpK,YAA0B,QAAU,UAMrbyqK,EAAgB3hZ,UAAUuiZ,oBAAsB,SAAUznY,EAAMkxB,EAAWp1B,EAAOoC,EAAe+wB,GAC7F,IAAIgkC,EAAUjzD,EAAKgzD,SAASl3D,GAC5Bm3D,EAAQkqP,YAAY9uT,KAAK2gC,GAAW,IAAI1P,GAAW2P,EAAMpkC,QAAQsC,GAAK,SAAW+jC,EAAY,qBAAuBp1B,EAAOm3D,EAAQvzC,MAAOuzC,EAAQnkC,OAAOjvB,MAAOozD,EAAQnkC,OAAOpP,MAAO,EAAG,IAAK,IAAKxhB,EAAe+wB,KAMtN43W,EAAgB3hZ,UAAU+hZ,mBAAqB,SAAUh0U,EAASjzD,GAC9D,IAAIpW,EAAQC,KACRuoB,EAAapS,EAAK6b,aAAa7R,IAC/BuX,EAAW0xC,EAAQ6pE,aACnB7pE,EAAQx6B,UAAU3O,QAAU1X,IAAemP,GAAY13B,KAAKolC,MAAMy4W,gBAClEz0U,EAAQkqP,YAAYp8R,IAAI,SAAUl2B,GACT,aAAjBooE,EAAQ1iE,KACR3G,EAAM+9Y,yBAAyB98Y,EAASunB,EAAYmP,EAAUvhB,EAAMizD,EAASA,EAAQ8wU,cAAgB9wU,EAAQ8wU,cAAgB9wU,EAAQo0U,cAGrIz9Y,EAAMg+Y,uBAAuB/8Y,EAASunB,EAAYmP,EAAUvhB,EAAMizD,EAASA,EAAQ8wU,cAAgB9wU,EAAQ8wU,cAAgB9wU,EAAQo0U,iBAUnJR,EAAgB3hZ,UAAU0iZ,uBAAyB,SAAU/8Y,EAASzD,EAAOyhB,EAAK7I,EAAMizD,EAASx8D,EAAQo6B,GACrG,IAKIg3W,EALAj+Y,EAAQC,KACR4lC,EAAiC,cAAnBzvB,EAAK0e,UACnBf,EAAa0R,GAAkBjoC,EAAO4Y,EAAK6b,aAAa1lB,IAAK6J,EAAK6b,aAAa7R,IAAKhK,EAAK2d,WAAY3d,EAAKwvB,SAAUC,GACpHq4W,EAAaz4W,GAAkBxmB,EAAK7I,EAAK6b,aAAa1lB,IAAK6J,EAAK6b,aAAa7R,IAAKhK,EAAK2d,WAAY3d,EAAKwvB,SAAUC,GAClHD,EAAW7R,EAAamqX,EAAcA,EAAa,IAAOA,EAE9D,IAAInmX,OAAcC,QAAQ/2B,GACtBkK,SAAUk+D,EAAQx6B,UAAU1jC,SAC5B8sB,SAAU,SAAU/3B,GAChB+9Y,EAAczgZ,EAAQyhB,GAAO3S,KAAK4xB,MAAMnK,KAAgBznB,KAAK4xB,MAAM0H,GAC/DC,EAAeD,EAAW7R,EAAe6R,EAAW7R,EAAa,IACjE8R,EAAeD,EAAW7R,EAAa,IAAQ6R,EAAW7R,EAC9D9yB,EAAQ0D,MAAMkqC,UAAY,OAC1B5tC,EAAQwC,aAAa,YAAa,UAAYi0B,GAAOx3B,EAAKg4B,UAAWnE,EAAYkqX,EAAY/9Y,EAAKiL,UAAY,IAC1GnL,EAAMqlC,MAAMmkS,SAASx8T,EAAEG,WAAa,IAAMnN,EAAMqlC,MAAMmkS,SAASv8T,EAAEE,WAAa,MAEtF8R,IAAK,SAAUmN,GACXpsB,EAAMo9Y,gBAAgBhnY,EAAMizD,EAASpqD,IAChB,WAAjBoqD,EAAQ1iE,MAAsB1F,EAAQsC,GAAG/E,QAAQ,uBAAyB,IAC1EwB,EAAMqlC,MAAM1e,QHtKD,qBGsK8BvQ,KAAMA,EAAMizD,QAASA,QAU9E4zU,EAAgB3hZ,UAAUyiZ,yBAA2B,SAAU98Y,EAASzD,EAAOyhB,EAAK7I,EAAMizD,EAASx8D,EAAQo6B,GACvG,IAKIg3W,EALAj+Y,EAAQC,KACR4lC,EAAiC,cAAnBzvB,EAAK0e,UACnBf,EAAa0R,GAAkBjoC,EAAO4Y,EAAK6b,aAAa1lB,IAAK6J,EAAK6b,aAAa7R,IAAKhK,EAAK2d,WAAY3d,EAAKwvB,SAAUC,GACpHs4W,EAAW14W,GAAkBrvB,EAAK6b,aAAa7R,IAAKhK,EAAK6b,aAAa1lB,IAAK6J,EAAK6b,aAAa7R,IAAKhK,EAAK2d,WAAY3d,EAAKwvB,SAAUC,GAClIq4W,EAAaz4W,GAAkBxmB,EAAK7I,EAAK6b,aAAa1lB,IAAK6J,EAAK6b,aAAa7R,IAAKhK,EAAK2d,WAAY3d,EAAKwvB,SAAUC,GAElHD,EAAW7R,EAAamqX,EAAcA,EAAa,IAAOA,EAC9D,IAAInmX,OAAcC,QAAQ/2B,GACtBkK,SAAUk+D,EAAQx6B,UAAU1jC,SAC5B8sB,SAAU,SAAUs7D,GAChBtyF,EAAQ0D,MAAMkqC,UAAY,OAC1BovW,EAAczgZ,EAAQyhB,GAAO3S,KAAK4xB,MAAMnK,KAAgBznB,KAAK4xB,MAAM0H,GAC/DC,EAAeD,EAAW7R,EAAe6R,EAAW7R,EAAa,IACjE8R,EAAeD,EAAW7R,EAAa,IAAQ6R,EAAW7R,EAC1D8R,EACA5kC,EAAQwC,aAAa,IAAKujC,GAAehnC,EAAMqlC,MAAMmkS,SAAU20E,EAAUzmX,GAAO67D,EAAIr7D,UAAWnE,EAAYkqX,EAAY1qT,EAAIpoF,UAAY,KAAQ0B,EAAQo6B,IAGvJhmC,EAAQwC,aAAa,IAAKujC,GAAehnC,EAAMqlC,MAAMmkS,SAAU9xS,GAAO67D,EAAIr7D,UAAWnE,EAAYkqX,EAAY1qT,EAAIpoF,UAAWgzY,EAAW,KAAQtxY,EAAQo6B,KAG/JhoB,IAAK,SAAUmN,GACXpsB,EAAMo9Y,gBAAgBhnY,EAAMizD,EAASpqD,GACrCjf,EAAMqlC,MAAM1e,QHxMG,qBGwM0BvQ,KAAMA,EAAMizD,QAASA,QAInE4zU,KC1MPmB,GAAiC,WACjC,SAASA,EAAgB/4W,GACrBplC,KAAKolC,MAAQA,EACbplC,KAAKo+Y,aAAe,IAAI/C,GAAaj2W,GACrCplC,KAAKq+Y,gBAAkB,IAAIrB,GAAgB53W,GA+P/C,OAxPA+4W,EAAgB9iZ,UAAUqiO,YAAc,SAAUhrM,GAC9C1yB,KAAKs+Y,gBAAgBt+Y,KAAKolC,MAAO1S,GACjC1yB,KAAKu+Y,uBAOTJ,EAAgB9iZ,UAAUkjZ,oBAAsB,WAI5C,IAAK,IAHDC,EACAtE,EACAuE,EAAqB,EAChBrgZ,EAAK,EAAGyE,EAAK7C,KAAKolC,MAAM6jC,KAAM7qE,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAI+X,EAAOtT,EAAGzE,GACdogZ,EAAenyY,KAAK8T,IAAIhK,EAAKuc,KAAK1c,MAAOG,EAAKuc,KAAK3c,QAAU,EAC7DmkY,EAA+B,MAAf/jY,EAAKvJ,OAAiBiyB,GAAe1oB,EAAKvJ,OAAQ4xY,GAAeA,EAKjFtE,GAJAuE,EAAqBpyY,KAAKC,IAAI/Q,MAAM8Q,KAAM8J,EAAKsxB,OAAOvQ,IAAI,SAAUl6B,GAChE,OAAOA,EAAM4P,OACR5P,EAAM4P,OAAOrO,QAAQ,KAAO,EAAI,IAAM61B,SAASp3B,EAAM4P,OAAQ,IAAO,MAEvC,KAAsB,MAAfuJ,EAAKvJ,OAC7B,IAAhBstY,EAAuBuE,EAAqBvE,EACjD/jY,EAAK+jY,cAAgBA,EAAgB/jY,EAAKslY,SAC1CtlY,EAAK6b,aAAa7vB,SAAWnC,KAAK0+Y,yBAAyBvoY,EAAMA,EAAKuc,MACtE1yB,KAAK82N,uBAAuB3gN,KAQpCgoY,EAAgB9iZ,UAAUijZ,gBAAkB,SAAUl5W,EAAO1S,GACzD,IACIP,EADApyB,EAAQC,KAEZA,KAAKw5N,YAAYp0L,EAAM6jC,KAAMv2C,GAC7B0S,EAAM6jC,KAAK/xC,IAAI,SAAU/gB,EAAMlE,GAC3BkgB,EAAMkT,GAAapzB,EAAOlS,EAAMw5N,SAAS98N,OAAYsD,EAAMw5N,UAC3DpjN,EAAKuc,KAAO,IAAI6C,GAAK7C,EAAK3lB,EAAIolB,EAAKO,EAAK1lB,EAAImlB,EAAKO,EAAK1c,MAAe,EAANmc,EAAUO,EAAK3c,OAAgB,EAANoc,MAQhGgsX,EAAgB9iZ,UAAUsjZ,oBAAsB,SAAUjsX,GACtD,IAAK,IAAIt0B,EAAK,EAAGyE,EAAK7C,KAAKolC,MAAM6jC,KAAM7qE,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAI+X,EAAOtT,EAAGzE,GACd4B,KAAKy3N,sBAAsBthN,EAAMuc,GACjC1yB,KAAK82N,uBAAuB3gN,KAQpCgoY,EAAgB9iZ,UAAUo8N,sBAAwB,SAAUthN,EAAMuc,GAC9D,IAAIvwB,EAAWgU,EAAKsmY,WAAWt6Y,SAC3BujC,EAAer5B,KAAK8T,IAAqB,OAAjBhK,EAAKsiB,QAAmB,EAAItiB,EAAKsiB,QAAStiB,EAAKuiB,SACvE+M,EAAep5B,KAAKC,IAAI6J,EAAKsiB,QAA0B,OAAjBtiB,EAAKuiB,QAAmB,IAAMviB,EAAKuiB,SAC7EviB,EAAKgzD,SAASjyC,IAAI,SAAUkyC,GACxBA,EAAQ6pE,aAAiC,OAAlB7pE,EAAQpsE,MAC3BosE,EAAQpsE,MAAQ0oC,EAAeA,EAAe0jC,EAAQpsE,MAAQyoC,EAAeA,EAAe2jC,EAAQpsE,MAClG0oC,EACNA,EAAgC,OAAjBvvB,EAAKsiB,QAAmBpsB,KAAK8T,IAAIipD,EAAQ6pE,aAAcvtG,GAAgBA,EACtFD,EAAgC,OAAjBtvB,EAAKuiB,QAAmBrsB,KAAKC,IAAI88D,EAAQ6pE,aAAcxtG,GAAgBA,IAE1FC,EAAgBA,IAAiBD,EACf,OAAbtjC,EAAoBujC,EAAevjC,EAAWujC,EAAe,EAAKA,EACvEvvB,EAAK6b,cAAiB7R,IAAKulB,EAAcp5B,IAAKm5B,EAActjC,SAAUA,GACtEgU,EAAK6b,aAAa7vB,SAAWnC,KAAK0+Y,yBAAyBvoY,EAAMuc,IAOrEyrX,EAAgB9iZ,UAAUqjZ,yBAA2B,SAAUvoY,EAAMuc,GACjE,GAAiC,OAA7Bvc,EAAKsmY,WAAWt6Y,SAChB,OAAOgU,EAAKsmY,WAAWt6Y,SAE3B,IAAI6jC,EAAa7vB,EAAKwvB,SAAWxvB,EAAK2d,WAEtC,OADAkS,EAAaA,GAAc,EAAKA,EAAa,IAAOA,EAC7ChmC,KAAKupE,sBAAsBpzD,EAAK6b,aAAa1lB,IAAK6J,EAAK6b,aAAa7R,IAAKhK,EAAK+jY,cAAgB/jY,EAAK+jY,cAAiBxnX,EAAK1c,MAAQ,EAAIgwB,IAOhJm4W,EAAgB9iZ,UAAUkuE,sBAAwB,SAAU4pE,EAAUD,EAAUtmI,EAAQkmB,GAMpF,IAAK,IALDwB,EAAQ6+G,EAAWD,EACnBliD,EAAgB,EAAI3kF,KAAKkR,GAAK3Q,GAAUkmB,EAAS,KACjDgG,EAAwBzsB,KAAKC,WAAK0kF,EAAsC,GACxEvnB,EAAen1C,EAAQwE,EACvB4wC,EAAcr9D,KAAKs9D,IAAI,GAAIt9D,KAAKkT,MAAMlT,KAAKwkB,IAAI44C,GAAgBp9D,KAAKwkB,IAAI,MACnEzyB,EAAK,EAAGyE,GAAM,GAAI,EAAG,EAAG,GAAIzE,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IACIorE,EAAkBE,EADP7mE,EAAGzE,GAElB,GAAI06B,EAAyBxE,EAAQk1C,EACjC,MAEJC,EAAeD,EAEnB,OAAOC,GAOX00U,EAAgB9iZ,UAAUy7N,uBAAyB,SAAU3gN,GACzD,IAKIiiB,EALA1zB,EAAQyR,EAAKkf,WACb0G,EAAoBr3B,EAAM83B,QAA4C,OAAlC93B,EAAM83B,OAAO7sB,MAAM,WACvD6sB,EAASx8B,KAAKolC,MAAMsrC,KAAKC,iBACzBn0C,OAAQ+K,GAAe7iC,EAAM83B,QAASo0C,YAAa5wE,KAAKolC,MAAMyrC,uBAGlE16D,EAAKqe,iBACL,IAAK,IAAIr4B,EAAIga,EAAK6b,aAAa7R,IAAKhe,EAAWgU,EAAK6b,aAAa7vB,SAAUmK,EAAM6J,EAAK6b,aAAa1lB,IAAMnQ,GAAKmQ,GAAOnK,EAAWhG,GAAKgG,EACjIi2B,GACIC,QAAQ,EAAOtB,KJvIF,kBIuIyB5gB,KAAMA,EAC5C2Y,KAAMiN,EAAoBr3B,EAAM83B,OAAOjtB,QAAQ,IAAI2U,OAAO,UAAW,KAAMsY,EAAOrgC,IAC9EqgC,EAAOrgC,GACXa,MAAOb,GAEX6D,KAAKolC,MAAM1e,QJ5IM,kBI4ImB0R,GAC/BA,EAASC,QACVliB,EAAKqe,cAAchwB,KAAK,IAAI+zB,GAAcH,EAAStJ,KAAM3yB,IAGjE6D,KAAK+3N,iBAAiB/3N,KAAKolC,MAAOjvB,IAOtCgoY,EAAgB9iZ,UAAUm+N,YAAc,SAAUvwJ,EAAMv2C,GACpD,IAAI08Q,EACAx/K,EACAt2G,EACAslY,EACAC,EACAC,EAEAC,EAAkB,EAClBC,EAAkB,EAClBnrD,EAAc,EAClB7zV,KAAKu5N,YACLv5N,KAAK2+Y,oBAAoBjsX,GACzB,IAAK,IAAIt0B,EAAK,EAAGszT,EAASzoP,EAAM7qE,EAAKszT,EAAOj1T,OAAQ2B,IAAM,CACtD,IAAI+X,EAAOu7S,EAAOtzT,GAClBgxS,EAAYj5R,EAAKyjN,UAAU5jN,MAAQ,EACnC45G,EAAc,EACdt2G,EAAc,EACdslY,EAAkD,YAA7BzoY,EAAKsmY,WAAWvoY,SACrC6qY,EAAkB5oY,EAAKsmY,WAAW9wY,OAClCkzY,EAAkD,YAA7B1oY,EAAK8lY,WAAW/nY,SACrC8qY,EAAkB7oY,EAAK8lY,WAAWtwY,OAClCmzY,EAA8C,YAA7B3oY,EAAKkf,WAAWnhB,SACjC2/U,EAAc19U,EAAKkf,WAAW1pB,OAE9BikH,GAAiBgvR,GAAsBC,GAAsBC,EAAgC,EAlB/E,EAmBdlvR,IAAgBgvR,EAAsBzoY,EAAKsmY,WAAW1mY,OAASq5R,EAAY,IACtE0vG,EAAkB3oY,EAAK4kN,aAAahlN,OApLlC,GAoL0D89U,EAAe,IAC1EgrD,IAAuBD,EAAuBzoY,EAAK8lY,WAAWlmY,OAASq5R,EAAY,GAAKA,EAC9Fx/K,GAAgBgvR,GAAsBC,EAAsBxyY,KAAKC,IAAIyyY,EAAiBC,GACjFJ,EAAqBG,EAAkBF,EAAqBG,EAAkB,EAEnF1lY,IAAiBslY,EAA2D,EAArCzoY,EAAKsmY,WAAW1mY,OAASq5R,IAC1D0vG,EAA2E,EAAzD3oY,EAAK4kN,aAAahlN,OA1LnC,GA0L2D89U,KAC3DgrD,GAAsBD,EAAuBzoY,EAAK8lY,WAAWlmY,OAASq5R,EAAY,GAAKA,EAC9F91R,GAAiBslY,GAAuBC,EAClCD,EAAwCC,EAAuC,EAAlBG,EAAxCD,EADmC1yY,KAAKC,IAAIyyY,EAAiBC,GAEpFh/Y,KAAKu5N,SAASv5N,KAAKu5N,SAAS98N,OAAS,KACrCuD,KAAKu5N,SAASv5N,KAAKu5N,SAAS98N,OAAS,IAAO6c,EAAcs2G,GAE9Dz5G,EAAKslY,SAAW7rR,EAjCF,EAkCdz5G,EAAKulY,QAAUpiY,EACfs2G,EAAe5vH,KAAKolC,MAAM6jC,KAAKxsE,SAAYuD,KAAKu5N,SAAS98N,OAAS,EAAM,EAAImzH,EAC5E5vH,KAAKu5N,SAAS/0N,KAAKorH,KAQ3BuuR,EAAgB9iZ,UAAU4lO,WAAa,SAAUlpM,GAC7C,IAAIh4B,EAAQC,UACI,IAAZ+3B,IAAsBA,GAAU,GACpC,IAEI/2B,EAFAokC,EAAQplC,KAAKolC,MACbrV,EAAW/vB,KAAKo+Y,aAEhBa,EAAe75W,EAAMrV,SAAS+9C,aAC9BxqE,GAAM8hC,EAAMpkC,QAAQsC,GAAK,kBACzBypO,YAAa,QAAU3nM,EAAMpkC,QAAQsC,GAAK,yBAG9C8hC,EAAMpkC,QAAQW,YAAYR,EAAc,OACpCmC,GAAI8hC,EAAMpkC,QAAQsC,GAAK,qBACvBC,OAAQ,wBAEZ6hC,EAAM6jC,KAAK/xC,IAAI,SAAU/gB,EAAMlE,GAC3BjR,EAAUokC,EAAMrV,SAAS+9C,aACrBxqE,GAAI8hC,EAAMpkC,QAAQsC,GAAK,eAAiB2O,IAE5C8d,EAASurX,kBAAkBnlY,EAAMlE,EAAOjR,EAASokC,GACjDrV,EAAS4sX,cAAcxmY,EAAMlE,EAAOjR,EAASokC,GAC7CrV,EAASuxM,aAAanrN,EAAMlE,EAAOjR,EAASokC,GAC5CrV,EAASusX,mBAAmBnmY,EAAMlE,EAAOjR,EAASokC,GAClDrV,EAAS+rX,mBAAmB3lY,EAAMlE,EAAOjR,EAASokC,GAClDrV,EAASyrX,eAAerlY,EAAMlE,EAAOjR,EAASokC,GAC9CrlC,EAAMs+Y,gBAAgBpB,aAAa9mY,EAAMlE,EAAOjR,EAASokC,EAAOrN,GAC5DqN,EAAM85W,mBACN95W,EAAM85W,kBAAkBp4F,iBAAiB3wS,EAAMlE,GAEnDgtY,EAAat9Y,YAAYX,KAG7BokC,EAAM5U,UAAU7uB,YAAYyjC,EAAMrV,SAASsrF,cACvC/3G,GAAM8hC,EAAMpkC,QAAQsC,GAAK,sBACzByJ,EAAK,EAAGC,EAAK,EACbgJ,MAASovB,EAAMpQ,cAAchf,MAC7BD,OAAUqvB,EAAMpQ,cAAcjf,OAC9BqoB,KAAQ,cAAeE,OAAU,iBAErC8G,EAAM5U,UAAU7uB,YAAYs9Y,IAMhCd,EAAgB9iZ,UAAU08N,iBAAmB,SAAU3yL,EAAOjvB,GAC1DA,EAAK4kN,aAAe,IAAItrM,GAAK,EAAG,GAChC,IAAK,IAAIrxB,EAAK,EAAGyE,EAAKsT,EAAKqe,cAAep2B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIiV,EAAQxQ,EAAGzE,GACfiV,EAAM8b,KAAON,GAAYxb,EAAMyb,KAAM3Y,EAAKkf,WAAWtG,MACrD5Y,EAAK4kN,aAAa/kN,MAAQ3C,EAAM8b,KAAKnZ,MAAQG,EAAK4kN,aAAa/kN,MAC3D3C,EAAM8b,KAAKnZ,MAAQG,EAAK4kN,aAAa/kN,MACzCG,EAAK4kN,aAAahlN,OAAS1C,EAAM8b,KAAKpZ,OAASI,EAAK4kN,aAAahlN,OAC7D1C,EAAM8b,KAAKpZ,OAASI,EAAK4kN,aAAahlN,SAG3CooY,KC7QPtyT,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GA4B5D+hX,GAA+B,SAAUzyT,GAMzC,SAASyyT,EAAcnsY,EAAShS,GAC5B,OAAO0rF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAkqBlD,OAxqBA6rF,GAAUszT,EAAezyT,GAWzByyT,EAAc9jZ,UAAUoX,UAAY,WAChCzS,KAAKogH,eACLpgH,KAAK0mB,QLlDK,QKkDW0e,MAAOplC,OAC5BA,KAAKo/Y,cACLp/Y,KAAKwlT,sBACLxlT,KAAK2N,aACL3N,KAAKwgC,YACLxgC,KAAKykB,cAET06X,EAAc9jZ,UAAU+jZ,YAAc,WACf,iBAAfp/Y,KAAKqb,OACLrb,KAAKkhC,WAAWrL,MAAQ71B,KAAKkhC,WAAWrL,OAAS,UACjD71B,KAAKq/Y,eAAe,UAAW,aAG/Br/Y,KAAKkhC,WAAWrL,MAAQ71B,KAAKkhC,WAAWrL,OAAS,UACjD71B,KAAKq/Y,eAAe,UAAW,aAGvCF,EAAc9jZ,UAAUgkZ,eAAiB,SAAUC,EAAYC,GAC3D,IAAK,IAAInhZ,EAAK,EAAGyE,EAAK7C,KAAKipE,KAAM7qE,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnD,IAAI+X,EAAOtT,EAAGzE,GACd+X,EAAKyjN,UAAU/jM,MAAQ1f,EAAKyjN,UAAU/jM,OAAS0pX,EAC/CppY,EAAKkf,WAAWtG,KAAK8G,MAAQ1f,EAAKkf,WAAWtG,KAAK8G,OAASypX,EAC3DnpY,EAAKsmY,WAAW5mX,MAAQ1f,EAAKsmY,WAAW5mX,OAAS0pX,EACjDppY,EAAK8lY,WAAWpmX,MAAQ1f,EAAK8lY,WAAWpmX,OAAS0pX,EACjD,IAAK,IAAIt7Y,EAAK,EAAGwG,EAAK0L,EAAKgzD,SAAUllE,EAAKwG,EAAGhO,OAAQwH,IAAM,CACvD,IAAImlE,EAAU3+D,EAAGxG,GACjBmlE,EAAQvzC,MAAQuzC,EAAQvzC,OAAS0pX,EACjCn2U,EAAQq0U,WAAW5nX,MAAQuzC,EAAQq0U,WAAW5nX,OAAS0pX,EACvDn2U,EAAQq0U,WAAWx4W,OAAOpP,MAAQuzC,EAAQq0U,WAAWx4W,OAAOpP,OAAS0pX,EACrEn2U,EAAQs0U,IAAI7nX,MAAQuzC,EAAQs0U,IAAI7nX,OAAS0pX,EACzCn2U,EAAQs0U,IAAIz4W,OAAOpP,MAAQuzC,EAAQs0U,IAAIz4W,OAAOpP,OAAS0pX,KAOnEJ,EAAc9jZ,UAAUsyG,OAAS,WAC7B3tG,KAAK8vS,kBACL9vS,KAAKsmT,kBAKT64F,EAAc9jZ,UAAU+kH,aAAe,WACnC76G,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQigF,gBAAiBzrF,KAAKw/Y,kBAChEj6Y,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQkgF,eAAgB1rF,KAAK+pT,WAC/DxkT,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQmgF,cAAe3rF,KAAKgqT,UAC9DzkT,GAAahB,OAAOvE,KAAKgB,QAAS,cAAehB,KAAKy/Y,iBACtDl6Y,GAAahB,OAAOvE,KAAKgB,QAAUwK,GAAQC,UAAY,eAAiB,aAAezL,KAAKmqT,YAC5FtuT,OAAOe,oBAAqB4O,GAAQwlB,SAAY,gBAAiBn1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAK0/Y,cAKxJP,EAAc9jZ,UAAUopB,WAAa,WAEjClf,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQigF,gBAAiBzrF,KAAKw/Y,iBAAkBx/Y,MAC/EuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQkgF,eAAgB1rF,KAAK+pT,UAAW/pT,MACvEuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQmgF,cAAe3rF,KAAKgqT,SAAUhqT,MACrEuF,GAAanB,IAAIpE,KAAKgB,QAAS,cAAehB,KAAKy/Y,gBAAiBz/Y,MACpEuF,GAAanB,IAAIpE,KAAKgB,QAAUwK,GAAQC,UAAY,eAAiB,aAAezL,KAAKmqT,WAAYnqT,MACrGnE,OAAOa,iBAAkB8O,GAAQwlB,SAAY,gBAAiBn1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAK0/Y,YAAYpkZ,KAAK0E,OAElKA,KAAK2/Y,cAAc3/Y,KAAKgB,UAO5Bm+Y,EAAc9jZ,UAAU0uT,UAAY,SAAUlpT,GAC1C,IAAIZ,EAAOD,KAAK4/Y,aAAa/+Y,EAAG,YLhHZ,kBKiHpBb,KAAK0mB,QLjHe,iBKiHSzmB,GAC7B,IAAI4/Y,EACA5uX,EAAUjxB,KAAK0lT,cAuBnB,OAtBKzlT,EAAKo4B,SACFr4B,KAAKixB,QAAQgP,QAAUhP,IACnBhxB,EAAKkH,OAAO7D,GAAG/E,QAAQ,cAAgB,IAAMyB,KAAK8/Y,cAClD7uX,EAAQk6G,cAAclrI,EAAKkH,QAG3B8pB,EAAQopX,UAAUp4Y,SAGtBjC,KAAK+/Y,mBAAqB//Y,KAAK8/Y,gBAC/BD,GACI1pY,KAAMnW,KAAKggZ,WACX52U,QAASppE,KAAK8/Y,cACdv7Q,cAAevkI,KAAK8/Y,cAAc7sQ,aAClCl8G,KLxHE,WKyHFk8G,aAAc,MAElBjzI,KAAKigZ,YAAY,IAAI95W,GAAclmC,EAAK8M,EAAG9M,EAAK+M,IAChD6yY,EAAS5sQ,aAAejzI,KAAK8/Y,cAAc7sQ,aAC3CjzI,KAAK0mB,QL7HC,WK6HiBm5X,MAGxB,GAOXV,EAAc9jZ,UAAU8uT,WAAa,SAAUtpT,GAC3Cb,KAAKggZ,WAAa,KAClBhgZ,KAAK8/Y,cAAgB,KACrB9/Y,KAAKwwB,UAAUhtB,aAAa,SAAU,QACtC,IAAIvD,EAAOD,KAAK4/Y,aAAa/+Y,EAAG,YLnJX,mBKwJrB,OAJAb,KAAK0mB,QLpJgB,kBKoJSzmB,GAC1BD,KAAKixB,QAAQgP,QAAUjgC,KAAK0lT,eAC5B1lT,KAAK0lT,cAAc20F,UAAUp4Y,SAE1B,GAOXk9Y,EAAc9jZ,UAAUokZ,gBAAkB,SAAUnjZ,GAChD,OAAsB,IAAlBA,EAAMy2H,SAAuC,UAAtBz2H,EAAMiuT,cAC7BjuT,EAAMopB,iBACNppB,EAAMiqI,mBACC,IAQf44Q,EAAc9jZ,UAAU4kZ,YAAc,SAAU/mX,GAC5C,IAAI/iB,EAAOnW,KAAKggZ,WACZ7uX,EAAQhb,EAAK6b,aACbh1B,EAAQ+oC,GAAkBE,GAAqBjmC,KAAKupU,SAAUrwS,GAAW/H,EAAM7kB,IAAK6kB,EAAMhR,IAAKhK,EAAK2d,WAAY3d,EAAKwvB,SAA6B,cAAnBxvB,EAAK0e,WACpI73B,GAASm0B,EAAMhR,KAAOnjB,GAASm0B,EAAM7kB,MACrCtM,KAAK8/Y,cAAc7sQ,aAAej2I,EAClCgD,KAAK8/Y,cAAc9iZ,MAAQA,EAC3BgD,KAAKkgZ,qBAAqB7B,gBAAgBlB,gBAAgBhnY,EAAMnW,KAAK8/Y,cAAe9iZ,KAQ5FmiZ,EAAc9jZ,UAAUmkZ,iBAAmB,SAAU3+Y,GACjD,IAAI45Y,EACAx6Y,EAAOD,KAAK4/Y,aAAa/+Y,EAAG,aL1LZ,kBKyMpB,OAdAb,KAAK0mB,QL3Le,iBK2LSzmB,IACxBA,EAAKo4B,QAAUp4B,EAAKkH,OAAO7D,GAAG/E,QAAQ,cAAgB,GACvD0B,EAAKkH,OAAO7D,GAAG/E,QAAQyB,KAAKgB,QAAQsC,GAAK,WAAa,IACtDm3Y,EAAiBvzW,GAAWjnC,EAAKkH,OAAO7D,GAAItD,MAC5CA,KAAKggZ,WAAahgZ,KAAKipE,KAAKwxU,EAAepzW,WAC3CrnC,KAAK8/Y,cAAgB9/Y,KAAKggZ,WAAW72U,SAASsxU,EAAenzW,cAC7DtnC,KAAK0mB,QL7LM,aK8LPvQ,KAAMnW,KAAKggZ,WACXjpX,KL/LO,YKgMPqyC,QAASppE,KAAK8/Y,cACd7sQ,aAAcjzI,KAAK8/Y,cAAc7sQ,eAErCjzI,KAAKwwB,UAAUhtB,aAAa,SAAU,aAEnC,GAOX27Y,EAAc9jZ,UAAU2uT,SAAW,SAAUnpT,GACzC,IAAIZ,EAAOD,KAAK4/Y,aAAa/+Y,EAAG,WL/Md,gBKgNdmwB,EAA4B,UAAlBnwB,EAAE0pT,aAA6C,MAAlB1pT,EAAE0pT,aAAkC,aAAX1pT,EAAE6F,KAElEuqB,EAAUjxB,KAAK0lT,cAqBnB,OApBA1lT,KAAK0mB,QLnNa,eKmNSzmB,GACvBD,KAAKggZ,YAAchgZ,KAAK8/Y,gBACxB9/Y,KAAK0mB,QL/MI,WKgNLqQ,KLhNK,UKiNL5gB,KAAMnW,KAAKggZ,WACX52U,QAASppE,KAAK8/Y,cACd7sQ,aAAcjzI,KAAK8/Y,cAAc7sQ,gBAEhChzI,EAAKo4B,QAAUrH,GAAWhxB,KAAKixB,QAAQgP,QAAUhP,GAC9ChxB,EAAKkH,OAAO7D,GAAG/E,QAAQ,cAAgB,IACvC0yB,EAAQk6G,cAAclrI,EAAKkH,QACTtL,OAAOsE,WAAW,WAChC8wB,EAAQopX,UAAUp4Y,SACnB,MAGXjC,KAAKggZ,WAAa,KAClBhgZ,KAAK8/Y,cAAgB,MAEzB9/Y,KAAKwwB,UAAUhtB,aAAa,SAAU,SAC/B,GAOX27Y,EAAc9jZ,UAAUukZ,aAAe,SAAU/+Y,EAAG6F,EAAMqwB,GACtD,IAAIrE,EAAO1yB,KAAKgB,QAAQ4K,wBACpBstB,EAAW,IAAIiN,IAAezT,EAAKlmB,MAAOkmB,EAAKhmB,KAC/CskB,EAAWnwB,EAAE6F,OAASA,EAG1B,OAFAwyB,EAASnsB,GAAKikB,EAAUnwB,EAAEu/D,eAAe,GAAGrK,QAAUl1D,EAAEk1D,QACxD78B,EAASlsB,GAAKgkB,EAAUnwB,EAAEu/D,eAAe,GAAGpK,QAAUn1D,EAAEm1D,SAEpD39B,QAAQ,EAAOtB,KAAMA,EACrBhqB,EAAGmsB,EAASnsB,EAAGC,EAAGksB,EAASlsB,EAC3B7F,OAAkBtG,EAAEsG,SAQ5Bg4Y,EAAc9jZ,UAAUqkZ,YAAc,SAAU7+Y,GAC5C,IAAId,EAAQC,KACRC,GACAmlC,MAAOplC,KACPmrT,aAAc,IAAI17R,GAAKzvB,KAAKg1B,cAAchf,MAAOhW,KAAKg1B,cAAcjf,QACpEghB,KL5PS,UK6PTm0R,YAAa,IAAIz7R,GAAK,EAAG,IAe7B,OAbAzvB,KAAK69Y,gBAAiB,EAClB79Y,KAAK8jT,UACL5jT,aAAaF,KAAK8jT,UAElB9jT,KAAKgB,QAAQ8C,UAAUK,SAAS,qBAChCnE,KAAK8jT,SAAWjoT,OAAOsE,WAAW,WAC9BJ,EAAMygC,YACNzgC,EAAM+vS,kBACN/vS,EAAMumT,iBACNrmT,EAAKirT,YAAcnrT,EAAMi1B,cACzBj1B,EAAM2mB,QLzQD,UKyQkBzmB,IACxB,OAEA,GAKXk/Y,EAAc9jZ,UAAUskZ,cAAgB,SAAU3+Y,GAC9CA,EAAQ0D,MAAMg3G,YAAc17G,KAAK+/Y,kBAAoB,OAAS,UAC9D/+Y,EAAQ0D,MAAMkmT,cAAgB5qT,KAAK+/Y,kBAAoB,OAAS,UAChE/+Y,EAAQ0D,MAAMmmT,iBAAmB,OACjC7pT,EAAQ0D,MAAMomT,aAAe,OAC7B9pT,EAAQ0D,MAAMqmT,iBAAmB,OACjC/pT,EAAQ0D,MAAMwP,SAAW,YAK7BirY,EAAc9jZ,UAAUsS,WAAa,WACjC3N,KAAK0wE,KAAO,IAAI27B,IAKpB8yS,EAAc9jZ,UAAUmlC,UAAY,WAChCxgC,KAAK4pT,YACL5pT,KAAKmgZ,mBACLngZ,KAAKwwB,UAAYxwB,KAAK+vB,SAASyQ,WAC3Bl9B,GAAItD,KAAKgB,QAAQsC,GAAK,OACtB0S,MAAOhW,KAAKg1B,cAAchf,MAC1BD,OAAQ/V,KAAKg1B,cAAcjf,UAQnCopY,EAAc9jZ,UAAUuuT,UAAY,WAEhC,GADAn5R,GAAczwB,KAAKgB,QAAQsC,GAAK,sBAC5BtD,KAAKwwB,UAAW,CAChB,KAAOxwB,KAAKwwB,UAAUjf,WAAW9U,OAAS,GACtCuD,KAAKwwB,UAAUlrB,YAAYtF,KAAKwwB,UAAUzT,aAEzC/c,KAAKwwB,UAAU8K,iBAAmBt7B,KAAKwwB,UAAU/vB,YAClD8D,EAAOvE,KAAKwwB,aAQxB2uX,EAAc9jZ,UAAUmqT,oBAAsB,WAC1CxlT,KAAK+vB,SAAW,IAAIC,GAAYhwB,KAAKgB,QAAQsC,IAC7CtD,KAAKkgZ,qBAAuB,IAAI/B,GAAgBn+Y,MAChDA,KAAK69Y,gBAAiB,GAK1BsB,EAAc9jZ,UAAU8kZ,iBAAmB,WACvC,IAAI3pY,EAAiBxW,KAAKgB,QAAQ4D,YAC9BqS,EAAkBjX,KAAKgB,QAAQ0yD,aAC/B19C,EAAQ6oB,GAAe7+B,KAAKgW,MAAOQ,IAAmBA,GAAkB,IACxET,EAAS8oB,GAAe7+B,KAAK+V,OAAQkB,IAAoBA,GAAmB,IAChFjX,KAAKg1B,cAAgB,IAAIvF,GAAKzZ,EAAOD,IAKzCopY,EAAc9jZ,UAAUy0S,gBAAkB,WACtC,IACI7yQ,EAASj9B,KAAKi9B,OAEdyrR,EAAc,EACd1oT,KAAK0gC,QACLgoR,EAAc75R,GAAY7uB,KAAK0gC,MAAO1gC,KAAKkhC,YAAYnrB,OAL7C,GAOd,IAAIrJ,EAAMuwB,EAAOvwB,IAAMg8S,EAAc1oT,KAAKilC,OAAOjvB,MAC7CxJ,EAAOywB,EAAOzwB,KAAOxM,KAAKilC,OAAOjvB,MACjCA,EAAQhW,KAAKg1B,cAAchf,MAAQxJ,EAAOywB,EAAOxwB,MAAQzM,KAAKilC,OAAOjvB,MACrED,EAAS/V,KAAKg1B,cAAcjf,OAASrJ,EAAM1M,KAAKilC,OAAOjvB,MAAQinB,EAAOtwB,OACtEC,EAASP,KAAK8T,IAAInK,EAAOD,GAAU,EACnC2c,EAAO,IAAI6C,GAAM/oB,EAAQwJ,EAAQ,EAAKpJ,EAAUF,EAAOqJ,EAAS,EAAKnJ,EAAkB,EAATA,EAAqB,EAATA,GAC1FwU,EAA2B,OAAjBphB,KAAKohB,QACfyd,GAAe7+B,KAAKohB,QAASphB,KAAKg1B,cAAchf,OAAS0c,EAAK3lB,EAAK2lB,EAAK1c,MAAQ,EAChFqL,EAA2B,OAAjBrhB,KAAKqhB,QACfwd,GAAe7+B,KAAKqhB,QAASrhB,KAAKg1B,cAAcjf,QAAU2c,EAAK1lB,EAAK0lB,EAAK3c,OAAS,EACtF/V,KAAKupU,SAAW,IAAIpjS,GAAc/kB,EAASC,GAC3CrhB,KAAKkgZ,qBAAqBxiL,YAAYhrM,IAK1CysX,EAAc9jZ,UAAUirT,eAAiB,SAAUvuR,QAC/B,IAAZA,IAAsBA,GAAU,GACpC/3B,KAAKumT,eACLvmT,KAAKwmT,cACLxmT,KAAKkgZ,qBAAqBj/K,WAAWlpM,GACrC/3B,KAAKgB,QAAQW,YAAY3B,KAAKwwB,WAC9BxwB,KAAK0mB,QLzYO,UKyYW0e,MAAOplC,QAKlCm/Y,EAAc9jZ,UAAUmrT,YAAc,WAClC,GAAIxmT,KAAK0gC,MAAO,CACZ,IAAIvR,EAAON,GAAY7uB,KAAK0gC,MAAO1gC,KAAKkhC,YAEpClgC,EAAU20B,GADA,IAAIC,GAAW51B,KAAKgB,QAAQsC,GAAK,sBAAuBtD,KAAKg1B,cAAchf,MAAQ,EAAGhW,KAAKi9B,OAAOvwB,IAAWyiB,EAAKpZ,OAAS,EAAnB,EAAuB,SAAU/V,KAAK0gC,OACzH1gC,KAAKkhC,WAAYlhC,KAAKkhC,WAAWrL,MAAO71B,KAAKwwB,UAAW,IAC3FxvB,EAAQwC,aAAa,aAAcxD,KAAKg0D,aAAeh0D,KAAK0gC,OAC5D1/B,EAAQwC,aAAa,WAAYxD,KAAK4lH,SAAS14G,cAMvDiyY,EAAc9jZ,UAAUkrT,aAAe,WACnC,IAAIv2N,EAAchwF,KAAKilC,OAAOjvB,OAC1Bg6E,EAAc,GAA0B,OAApBhwF,KAAKstB,YAA2C,gBAApBttB,KAAKstB,aACrDttB,KAAKwwB,UAAU7uB,YAAY3B,KAAK+vB,SAASuU,cAAc,IAAI04L,GAAWh9N,KAAKgB,QAAQsC,GAAK,uBAAwBtD,KAAKstB,WAAYttB,KAAKilC,OAAQ,KAAM,IAAI1P,GAAKy6D,EAAc,EAAGA,EAAc,EAAGhwF,KAAKg1B,cAAchf,MAAQg6E,EAAahwF,KAAKg1B,cAAcjf,OAASi6E,OAM3QmvT,EAAc9jZ,UAAU8hZ,gBAAkB,SAAU91W,EAAWC,EAActqC,GACzE,IAAI+C,EAAQC,KACRmW,EAAOnW,KAAKipE,KAAK5hC,GACjB+hC,EAAUjzD,EAAKgzD,SAAS7hC,GACxBg2W,EAAgBl0U,EAAQ8wU,cACxBzqE,EAAkBrmQ,EAAQx6B,UAAU3O,OAExCjjC,GADAA,EAAQA,EAAQmZ,EAAK6b,aAAa7R,IAAMhK,EAAK6b,aAAa7R,IAAMnjB,GAChDmZ,EAAK6b,aAAa1lB,IAAM6J,EAAK6b,aAAa1lB,IAAMtP,EAChEosE,EAAQkqP,YAAYp8R,IAAI,SAAUl2B,GACT,aAAjBooE,EAAQ1iE,MACRs+B,GAAUhkC,EAASooE,EAAQvzC,MAAOuzC,EAAQnkC,QACtCwqS,EACA1vU,EAAMmgZ,qBAAqB7B,gBAAgBP,yBAAyB98Y,EAASooE,EAAQ6pE,aAAcj2I,EAAOmZ,EAAMizD,EAASk0U,EAAgBA,EAAgBl0U,EAAQo0U,cAGjKz9Y,EAAMmgZ,qBAAqB7B,gBAAgBlB,gBAAgBhnY,EAAMizD,EAASpsE,KAI1EgE,EAAQsC,GAAG/E,QAAQ,wBAA0B,EAC7CymC,GAAUhkC,EAASooE,EAAQs0U,IAAI7nX,MAAOuzC,EAAQs0U,IAAIz4W,QAE7CjkC,EAAQsC,GAAG/E,QAAQ,yBAA2B,EACnDymC,GAAUhkC,EAASooE,EAAQq0U,WAAW5nX,MAAOuzC,EAAQq0U,WAAWx4W,QAE3DjkC,EAAQsC,GAAG/E,QAAQ,yBAA2B,EACnDymC,GAAUhkC,EAAS,eAAiB60B,MAAO,cAAe7f,MAAO,IAGjEgvB,GAAUhkC,EAASooE,EAAQvzC,MAAOuzC,EAAQnkC,QAE1CwqS,EACA1vU,EAAMmgZ,qBAAqB7B,gBAAgBN,uBAAuB/8Y,EAASooE,EAAQ6pE,aAAcj2I,EAAOmZ,EAAMizD,EAASk0U,EAAgBA,EAAgBl0U,EAAQo0U,cAG/Jz9Y,EAAMmgZ,qBAAqB7B,gBAAgBlB,gBAAgBhnY,EAAMizD,EAASpsE,MAItFosE,EAAQ6pE,aAAej2I,EACvBosE,EAAQpsE,MAAQA,GAKpBmiZ,EAAc9jZ,UAAUmxT,mBAAqB,SAAUnlR,EAAWolR,EAAiB7xR,GAC/E,IAAIwlX,EAA+E,OAA9D1vX,GAAW1wB,KAAKgB,QAAQsC,GAAK,gBAAkB+jC,GAChErmC,EAAU0vB,GAAW1wB,KAAKgB,QAAQsC,GAAK,gBAAkB+jC,IACzDrnC,KAAKmB,cAAc,OACfmC,GAAItD,KAAKgB,QAAQsC,GAAK,gBAAkB+jC,IAE5CggB,EAAarnD,KAAKipE,KAAK5hC,GAAW+oB,YAAYq8P,GAClC,OAAZ7xR,IACAnK,GAAczwB,KAAKgB,QAAQsC,GAAK,SAAW+jC,EAAY,eAAiBolR,GACxEplQ,EAAWzsB,QAAUA,EACrB56B,KAAKk/Y,kBAAkBxkX,eAAe15B,EAASyrT,EAAiBplR,GAC3D+4W,GACD1vX,GAAW1wB,KAAKgB,QAAQsC,GAAK,sBAAsB3B,YAAYX,KAO3Em+Y,EAAc9jZ,UAAUm4I,cAAgB,SAAUnsG,EAAWw1W,EAAYt/Y,EAAOyhB,GAC5E,IASIqnB,EATArlC,EAAU0vB,GAAW1wB,KAAKgB,QAAQsC,GAAK,SAAW+jC,EAAY,UAAYw1W,GAC1E1mY,EAAOnW,KAAKipE,KAAK5hC,GACjBlW,EAAQhb,EAAKsxB,OAAOo1W,GACpBhkE,EAAY1iU,EAAK6b,aACjB4T,EAAiC,cAAnBzvB,EAAK0e,UACnBtM,EAAalc,KAAK8T,IAAI9T,KAAKC,IAAI/O,EAAOs7U,EAAU14T,KAAMnB,GACtD0Y,EAAWrrB,KAAK8T,IAAI9T,KAAKC,IAAI/O,EAAOyhB,GAAM65T,EAAUvsU,KACpDwnB,EAAa0R,GAAkBjd,EAAYswT,EAAUvsU,IAAKusU,EAAU14T,IAAKhK,EAAK2d,WAAY3d,EAAKwvB,SAAUC,GACzGD,EAAWH,GAAkB9N,EAAUmhT,EAAUvsU,IAAKusU,EAAU14T,IAAKhK,EAAK2d,WAAY3d,EAAKwvB,SAAUC,GAGrGS,EADAlV,EAAMkV,WAAW5pC,OAAS,EACbqoC,GAAQ3T,EAAMkV,WAAYlV,EAAM+oX,eAGhC/oX,EAAMkV,WAEvB,IAAIC,EAEAA,EADAnV,EAAMmV,SAAS7pC,OAAS,EACbqoC,GAAQ3T,EAAMmV,SAAUnV,EAAM+oX,eAG9B/oX,EAAMmV,SAErBX,EAAWC,EAAcD,GAAY7R,EAAYA,EAAa6R,GAAU,GACxEW,EAAWV,EAAcU,GAAYD,EAAYA,EAAaC,GAAU,GACxEtlC,EAAQwC,aAAa,IAAK4iC,GAAWpmC,KAAKupU,SAAUl9T,KAAK4xB,MAAMnK,GAAaznB,KAAK4xB,MAAM0H,GAAWxU,EAAM+oX,cAAe7zW,EAAYC,IACnItB,GAAUhkC,EAAUmwB,EAAM0E,MAAQ1E,EAAM0E,MAAQ1E,EAAMyW,YAClD/R,MAAQ1E,EAAM0E,MAAQ1E,EAAM0E,MAAQ1E,EAAMyW,WAC1C5xB,MAAO,KASfmpY,EAAc9jZ,UAAUiX,QAAU,WAC9BtS,KAAKogH,eACLpgH,KAAK4pT,YACLl9N,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,OAOlCm/Y,EAAc9jZ,UAAU+2F,gBAAkB,WACtC,IAAIgB,KACAitT,GAAmB,EAmBvB,OAlBWrgZ,KAAKipE,KACX/xC,IAAI,SAAU/gB,GACfA,EAAKi6C,YAAYl5B,IAAI,SAAUmwB,GAC3Bg5V,EAAmBA,GAA2C,OAAvBh5V,EAAWzsB,YAGtDylX,GACAjtT,EAAQ5uF,MACJouF,OAAQ,cACR3yF,MAAOD,KAAM+5Y,MAGjB/5Y,KAAKixB,QAAQgP,QACbmzD,EAAQ5uF,MACJouF,OAAQ,UACR3yF,MAAOD,KAAMm6Y,MAGd/mT,GAMX+rT,EAAc9jZ,UAAU+yG,eAAiB,WACrC,OAAOpuG,KAAK4uG,kBAMhBuwS,EAAc9jZ,UAAU0tF,kBAAoB,SAAUiF,EAASC,GAK3D,IAAK,IAHDl+D,GAAW,EACXg/R,GAAgB,EAChBuxF,GAA0B,EACrBliZ,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,GAAU5vF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,SACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,SACD4B,KAAKwgC,YACLuuR,GAAgB,EAChB,MACJ,IAAK,QACDA,EAAmC,KAAlB/gO,EAAQttD,OAAkC,KAAlButD,EAAQvtD,MACjD3Q,IAA+B,KAAlBi+D,EAAQttD,OAAkC,KAAlButD,EAAQvtD,OAC7C,MACJ,IAAK,aACGstD,EAAQ9sD,YAAc8sD,EAAQ9sD,WAAW/R,KACzC4/R,GAAgB,EAGhBh/R,GAAW,EAEf,MACJ,IAAK,SAGL,IAAK,aACDA,GAAW,EACX,MACJ,IAAK,OACDuwX,GAA0B,IAIjCvxF,GAAiBh/R,IAClB/vB,KAAK4pT,YACL5pT,KAAKsmT,kBAELyI,IACA/uT,KAAK4pT,YACL5pT,KAAK8vS,kBACL9vS,KAAKsmT,mBAELg6F,GAA4BvwX,GAAag/R,IACzC/uT,KAAK4pT,YACL5pT,KAAK8vS,kBACL9vS,KAAKsmT,gBAAe,KAO5B64F,EAAc9jZ,UAAU0kC,cAAgB,WACpC,MAAO,iBAEXqsD,IACIllF,EAAS,OACVi4Y,EAAc9jZ,UAAW,aAAS,GACrC+wF,IACIllF,EAAS,OACVi4Y,EAAc9jZ,UAAW,cAAU,GACtC+wF,IACIrkF,GAAU8tB,MAAO,cAAe7f,MAAO,GAAKs/M,KAC7C6pL,EAAc9jZ,UAAW,cAAU,GACtC+wF,IACIllF,EAAS,gBACVi4Y,EAAc9jZ,UAAW,kBAAc,GAC1C+wF,IACIllF,EAAS,KACVi4Y,EAAc9jZ,UAAW,aAAS,GACrC+wF,IACIrkF,GAAUonB,KAAM,OAAQ0G,MAAO,MAAQw/L,KACxC8pL,EAAc9jZ,UAAW,kBAAc,GAC1C+wF,IACIrkF,KAAYytN,KACb2pL,EAAc9jZ,UAAW,cAAU,GACtC+wF,IACI/jF,OAAiB8xN,KAClBglL,EAAc9jZ,UAAW,YAAQ,GACpC+wF,IACIrkF,KAAY8tN,KACbspL,EAAc9jZ,UAAW,eAAW,GACvC+wF,IACIllF,GAAS,IACVi4Y,EAAc9jZ,UAAW,yBAAqB,GACjD+wF,IACIllF,EAAS,OACVi4Y,EAAc9jZ,UAAW,eAAW,GACvC+wF,IACIllF,EAAS,OACVi4Y,EAAc9jZ,UAAW,eAAW,GACvC+wF,IACIllF,EAAS,aACVi4Y,EAAc9jZ,UAAW,aAAS,GACrC+wF,IACIllF,GAAS,IACVi4Y,EAAc9jZ,UAAW,4BAAwB,GACpD+wF,IACIllF,EAAS,OACVi4Y,EAAc9jZ,UAAW,mBAAe,GAC3C+wF,IACIllF,EAAS,IACVi4Y,EAAc9jZ,UAAW,gBAAY,GACxC+wF,IACItjF,KACDq2Y,EAAc9jZ,UAAW,cAAU,GACtC+wF,IACItjF,KACDq2Y,EAAc9jZ,UAAW,YAAQ,GACpC+wF,IACItjF,KACDq2Y,EAAc9jZ,UAAW,yBAAqB,GACjD+wF,IACItjF,KACDq2Y,EAAc9jZ,UAAW,uBAAmB,GAC/C+wF,IACItjF,KACDq2Y,EAAc9jZ,UAAW,wBAAoB,GAChD+wF,IACItjF,KACDq2Y,EAAc9jZ,UAAW,qBAAiB,GAC7C+wF,IACItjF,KACDq2Y,EAAc9jZ,UAAW,iBAAa,GACzC+wF,IACItjF,KACDq2Y,EAAc9jZ,UAAW,gBAAY,GACxC+wF,IACItjF,KACDq2Y,EAAc9jZ,UAAW,eAAW,GACvC+wF,IACItjF,KACDq2Y,EAAc9jZ,UAAW,sBAAkB,GAC9C+wF,IACItjF,KACDq2Y,EAAc9jZ,UAAW,uBAAmB,GAC/C+wF,IACItjF,KACDq2Y,EAAc9jZ,UAAW,sBAAkB,GAC9C+wF,IACItjF,KACDq2Y,EAAc9jZ,UAAW,oBAAgB,GAC5C+wF,IACItjF,KACDq2Y,EAAc9jZ,UAAW,eAAW,GACvC8jZ,EAAgB/yT,IACZhjF,GACD+1Y,IAELhyS,ICntBFozS,GAAoBvyS,OAAQwyS,GAAmBC,QlVGpCr1W,0oCmVDP3b,GAAsB,WACtB,SAASA,EAAKzZ,EAAOD,GACjB/V,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,EAqBlB,OAnBA0Z,EAAKp0B,UAAUguO,QAAU,WACrB,OAAuB,IAAhBrpO,KAAK+V,QAA+B,IAAf/V,KAAKgW,OAerCyZ,EAAKp0B,UAAUgE,MAAQ,WACnB,OAAO,IAAIowB,EAAKzvB,KAAKgW,MAAOhW,KAAK+V,SAE9B0Z,KC3BPo8D,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAM5D+U,GAAuB,SAAUu6C,GAEjC,SAASv6C,IACL,OAAkB,OAAXu6C,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAqH/D,OAvHA6rF,GAAU15C,EAAOu6C,GAIjBv6C,EAAMrB,OAAS,SAAUyK,EAAQvS,GAC7B,OAAIuS,IAAWvS,MAGVuS,IAAWvS,MAGRuS,IAAWvS,GAAUuS,EAAOxuC,IAAMi8B,EAAOj8B,GAAKwuC,EAAOvuC,IAAMg8B,EAAOh8B,IAK9EmlC,EAAMC,aAAe,SAAUjf,GAC3B,OAAIA,EAAMpmB,IAAKomB,EAAMnmB,GAmCzBmlC,EAAM9kC,UAAY,SAAU8lB,EAAOxR,EAAOllB,GACtC,IAAI+uC,GAAOz+B,EAAG,EAAGC,EAAG,GAGpB,OAFAw+B,EAAGz+B,EAAIV,KAAK4xB,MAA6D,KAAtD9K,EAAMpmB,EAAItQ,EAAS4P,KAAKwV,IAAIF,EAAQtV,KAAKkR,GAAK,OAAe,IAChFiuB,EAAGx+B,EAAIX,KAAK4xB,MAA6D,KAAtD9K,EAAMnmB,EAAIvQ,EAAS4P,KAAKyV,IAAIH,EAAQtV,KAAKkR,GAAK,OAAe,IACzEiuB,GAEX2G,EAAMgH,WAAa,SAAU9Q,EAAGxnC,GAE5B,OADawL,KAAKQ,KAAKR,KAAKs9D,IAAKthC,EAAEt7B,EAAIlM,EAAEkM,EAAI,GAAKV,KAAKs9D,IAAKthC,EAAEr7B,EAAInM,EAAEmM,EAAI,KAG5EmlC,EAAM8G,UAAY,SAAUsC,EAAQvS,GAChC,IAAIrnB,EAAQtV,KAAK+mB,MAAM4V,EAAOh8B,EAAIuuC,EAAOvuC,EAAGg8B,EAAOj8B,EAAIwuC,EAAOxuC,GAM9D,OALA4U,EAAS,IAAMA,EAAQtV,KAAKkR,IAC5BoE,GAAS,KACG,IACRA,GAAS,KAENA,GAEXwwB,EAAM+F,eAAiB,SAAU0mR,EAAKC,GAClC,OAAOxyT,KAAKQ,KAAKR,KAAKs9D,IAAIk1P,EAAI9xT,EAAI6xT,EAAI7xT,EAAG,GAAKV,KAAKs9D,IAAIk1P,EAAI7xT,EAAI4xT,EAAI5xT,EAAG,KAE1EmlC,EAAMuuW,YAAc,SAAUnkZ,EAAQ4K,EAAQw5Y,EAASlkZ,GACnD,IACIklB,EADA6pB,EAAKm1W,GAAY5zY,EAAGxQ,EAAOwQ,EAAGC,EAAGzQ,EAAOyQ,IAAQD,EAAG5F,EAAO4F,EAAGC,EAAG7F,EAAO6F,GA4B3E,OA1BIzQ,EAAOwQ,IAAM5F,EAAO4F,EAChBxQ,EAAOyQ,EAAI7F,EAAO6F,GAAK2zY,GAAWpkZ,EAAOyQ,EAAI7F,EAAO6F,IAAM2zY,EAC1Dn1W,EAAGx+B,GAAKvQ,EAGR+uC,EAAGx+B,GAAKvQ,EAGPF,EAAOyQ,IAAM7F,EAAO6F,EACrBzQ,EAAOwQ,EAAI5F,EAAO4F,GAAK4zY,GAAWpkZ,EAAOwQ,EAAI5F,EAAO4F,IAAM4zY,EAC1Dn1W,EAAGz+B,GAAKtQ,EAGR+uC,EAAGz+B,GAAKtQ,EAIRkkZ,GACAh/X,EAAQ3hB,KAAKi5C,UAAU18C,EAAQ4K,GAC/BqkC,EAAKxrC,KAAKqN,UAAU9Q,EAAQolB,EAAOllB,KAGnCklB,EAAQ3hB,KAAKi5C,UAAU9xC,EAAQ5K,GAC/BivC,EAAKxrC,KAAKqN,UAAUlG,EAAQwa,EAAOllB,IAGpC+uC,GAEX2G,EAAMtd,UAAY,SAAU+pS,EAAKC,GAC7B,OAAIxyT,KAAKE,IAAIsyT,EAAI9xT,EAAI6xT,EAAI7xT,GAAKV,KAAKE,IAAIsyT,EAAI7xT,EAAI4xT,EAAI5xT,GACxC4xT,EAAI7xT,EAAI8xT,EAAI9xT,EAAI,QAAU,OAG1B6xT,EAAI5xT,EAAI6xT,EAAI7xT,EAAI,SAAW,OAG1Co/E,IACIllF,EAAS,IACVirC,EAAM92C,UAAW,SAAK,GACzB+wF,IACIllF,EAAS,IACVirC,EAAM92C,UAAW,SAAK,GAClB82C,GACTquB,IC1IEjrC,GAAsB,WACtB,SAASA,EAAKxoB,EAAGC,EAAGgJ,EAAOD,GAKvB/V,KAAK+M,EAAI6pB,OAAOC,UAKhB72B,KAAKgN,EAAI4pB,OAAOC,UAKhB72B,KAAKgW,MAAQ,EAKbhW,KAAK+V,OAAS,OACJ5a,IAAN4R,QAAyB5R,IAAN6R,GACnBD,EAAIC,EAAI4pB,OAAOC,UACf7gB,EAAQD,EAAS,SAGH5a,IAAV6a,IACAA,EAAQ,QAEG7a,IAAX4a,IACAA,EAAS,IAGjB/V,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,EAqLlB,OAnLAzX,OAAOuJ,eAAe0tB,EAAKl6B,UAAW,QAClCqM,IAAK,WACD,OAAO1H,KAAK+M,GAEhBpF,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0tB,EAAKl6B,UAAW,SAClCqM,IAAK,WACD,OAAO1H,KAAK+M,EAAI/M,KAAKgW,OAEzBrO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0tB,EAAKl6B,UAAW,OAClCqM,IAAK,WACD,OAAO1H,KAAKgN,GAEhBrF,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0tB,EAAKl6B,UAAW,UAClCqM,IAAK,WACD,OAAO1H,KAAKgN,EAAIhN,KAAK+V,QAEzBpO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0tB,EAAKl6B,UAAW,WAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAKwM,KAAMQ,EAAGhN,KAAK0M,MAEnC/E,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0tB,EAAKl6B,UAAW,YAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAKyM,MAAOO,EAAGhN,KAAK0M,MAEpC/E,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0tB,EAAKl6B,UAAW,cAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAKwM,KAAMQ,EAAGhN,KAAK2M,SAEnChF,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0tB,EAAKl6B,UAAW,eAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAKyM,MAAOO,EAAGhN,KAAK2M,SAEpChF,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0tB,EAAKl6B,UAAW,cAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAKwM,KAAMQ,EAAGhN,KAAKgN,EAAIhN,KAAK+V,OAAS,IAErDpO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0tB,EAAKl6B,UAAW,eAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAKyM,MAAOO,EAAGhN,KAAKgN,EAAIhN,KAAK+V,OAAS,IAEtDpO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0tB,EAAKl6B,UAAW,aAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAK+M,EAAI/M,KAAKgW,MAAQ,EAAGhJ,EAAGhN,KAAK0M,MAEjD/E,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0tB,EAAKl6B,UAAW,gBAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAK+M,EAAI/M,KAAKgW,MAAQ,EAAGhJ,EAAGhN,KAAK2M,SAEjDhF,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0tB,EAAKl6B,UAAW,UAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAK+M,EAAI/M,KAAKgW,MAAQ,EAAGhJ,EAAGhN,KAAKgN,EAAIhN,KAAK+V,OAAS,IAEnEpO,YAAY,EACZC,cAAc,IAElB2tB,EAAKl6B,UAAUy1C,OAAS,SAAU8vW,EAAOC,GACrC,OAAOD,EAAM7zY,IAAM8zY,EAAM9zY,GAAK6zY,EAAM5zY,IAAM6zY,EAAM7zY,GAAK4zY,EAAM5qY,QAAU6qY,EAAM7qY,OAAS4qY,EAAM7qY,SAAW8qY,EAAM9qY,QAE/Gwf,EAAKl6B,UAAU4hD,UAAY,SAAUvqB,GACjC,IAAIjmB,EAAQJ,KAAKC,IAAIsqB,OAAOs1E,MAAQlsG,KAAKyM,OAASzM,KAAK+M,IAAM6pB,OAAOC,UAAYnE,EAAKjmB,MAAQzM,KAAKyM,MAAOimB,EAAKjmB,OAC1GE,EAASN,KAAKC,IAAIsqB,OAAOs1E,MAAQlsG,KAAK2M,QAAU3M,KAAKgN,IAAM4pB,OAAOC,UAAYnE,EAAK/lB,OAAS3M,KAAK2M,OAAQ+lB,EAAK/lB,QAKlH,OAJA3M,KAAK+M,EAAIV,KAAK8T,IAAIngB,KAAKwM,KAAMkmB,EAAKlmB,MAClCxM,KAAKgN,EAAIX,KAAK8T,IAAIngB,KAAK0M,IAAKgmB,EAAKhmB,KACjC1M,KAAKgW,MAAQvJ,EAAQzM,KAAK+M,EAC1B/M,KAAK+V,OAASpJ,EAAS3M,KAAKgN,EACrBhN,MAEXu1B,EAAKl6B,UAAUylZ,WAAa,SAAU3tX,GAClC,GAAInzB,KAAK+M,IAAM6pB,OAAOC,UAGlB,OAFA72B,KAAK+M,EAAIomB,EAAMpmB,OACf/M,KAAKgN,EAAImmB,EAAMnmB,GAGnB,IAAID,EAAIV,KAAK8T,IAAIngB,KAAKwM,KAAM2mB,EAAMpmB,GAC9BC,EAAIX,KAAK8T,IAAIngB,KAAK0M,IAAKymB,EAAMnmB,GAC7BP,EAAQJ,KAAKC,IAAItM,KAAKyM,MAAO0mB,EAAMpmB,GACnCJ,EAASN,KAAKC,IAAItM,KAAK2M,OAAQwmB,EAAMnmB,GACzChN,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQvJ,EAAQzM,KAAK+M,EAC1B/M,KAAK+V,OAASpJ,EAAS3M,KAAKgN,GAYhCuoB,EAAKl6B,UAAUkqD,QAAU,SAAUiV,GAK/B,OAJAx6D,KAAK+M,GAAKytD,EACVx6D,KAAKgN,GAAKwtD,EACVx6D,KAAKgW,OAAmB,EAAVwkD,EACdx6D,KAAK+V,QAAoB,EAAVykD,EACRx6D,MAeXu1B,EAAKl6B,UAAU0lZ,WAAa,SAAUruX,GAClC,QAAI1yB,KAAKyM,MAAQimB,EAAKlmB,MAAQxM,KAAKwM,KAAOkmB,EAAKjmB,OAASzM,KAAK0M,IAAMgmB,EAAK/lB,QAAU3M,KAAK2M,OAAS+lB,EAAKhmB,MAKzG6oB,EAAKl6B,UAAUyhC,aAAe,SAAUpK,GACpC,OAAO1yB,KAAKwM,MAAQkmB,EAAKlmB,MAAQxM,KAAKyM,OAASimB,EAAKjmB,OAASzM,KAAK0M,KAAOgmB,EAAKhmB,KAAO1M,KAAK2M,QAAU+lB,EAAK/lB,QAE7G4oB,EAAKl6B,UAAU01C,cAAgB,SAAU5d,EAAOqnC,GAE5C,YADgB,IAAZA,IAAsBA,EAAU,GAC7Bx6D,KAAKwM,KAAOguD,GAAWrnC,EAAMpmB,GAAK/M,KAAKyM,MAAQ+tD,GAAWrnC,EAAMpmB,GAChE/M,KAAK0M,IAAM8tD,GAAWrnC,EAAMnmB,GAAKhN,KAAK2M,OAAS6tD,GAAWrnC,EAAMnmB,GAU3EuoB,EAAK+vB,SAAW,SAAUruB,GAEtB,IAAK,IADDvE,EAAO,IAAI6C,EACNn3B,EAAK,EAAG2jC,EAAW9K,EAAQ74B,EAAK2jC,EAAStlC,OAAQ2B,IAAM,CAC5D,IAAIotC,EAAKzJ,EAAS3jC,GAClBs0B,EAAKouX,WAAWt1W,GAEpB,OAAO9Y,GAEX6C,EAAKovO,MAAQ,IAAIpvO,EAAKqB,OAAOC,UAAWD,OAAOstS,UAAW,EAAG,GACtD3uS,MrVxNX,SAAW6V,GACPA,EAAYA,EAAsB,SAAI,GAAK,WAC3CA,EAAYA,EAAyB,YAAI,GAAK,cAC9CA,EAAYA,EAAqB,QAAI,GAAK,UAC1CA,EAAYA,EAAqB,QAAI,GAAK,UAJ9C,CAKGA,KAAgBA,QAEnB,IsVAW+uB,GtVAPhvB,GAAwB,WAexB,OAdA,SAAgBQ,EAAKI,EAAKF,EAAKD,EAAK//B,EAASI,EAASvF,GAClD1G,KAAK2rC,IAAMA,EACX3rC,KAAK+rC,IAAMA,EACX/rC,KAAK6rC,IAAMA,EACX7rC,KAAK4rC,IAAMA,EACX5rC,KAAK6L,QAAUA,EACf7L,KAAKiM,QAAUA,EAMfjM,KAAK0G,KAAOA,OsVZpB,SAAWyzD,GAEPA,EAAeA,EAAwB,QAAI,GAAK,UAEhDA,EAAeA,EAAuB,OAAI,GAAK,SAE/CA,EAAeA,EAAsB,MAAI,GAAK,QAE9CA,EAAeA,EAAwB,QAAI,GAAK,UARpD,CASGA,KAAmBA,QActB,IAAW6mV,IACX,SAAWA,GAEPA,EAAgBA,EAAsB,KAAI,GAAK,OAE/CA,EAAgBA,EAAqC,oBAAI,GAAK,sBAE9DA,EAAgBA,EAAmC,kBAAI,GAAK,oBAE5DA,EAAgBA,EAA2B,UAAI,GAAK,YAEpDA,EAAgBA,EAAuC,sBAAI,GAAK,wBAEhEA,EAAgBA,EAAqC,oBAAI,GAAK,sBAE9DA,EAAgBA,EAA6B,YAAI,IAAM,cAEvDA,EAAgBA,EAA8B,aAAI,IAAM,eAExDA,EAAgBA,EAAqB,IAAI,IAAM,MAlBnD,CAmBGA,KAAoBA,QAoBvB,IAAWnxV,IACX,SAAWA,GAEPA,EAAoBA,EAA0B,KAAI,GAAK,OAEvDA,EAAoBA,EAA0C,qBAAI,GAAK,uBAEvEA,EAAoBA,EAA0C,qBAAI,GAAK,uBAEvEA,EAAoBA,EAAqC,gBAAI,GAAK,kBAElEA,EAAoBA,EAAqC,gBAAI,IAAM,kBAEnEA,EAAoBA,EAAqC,gBAAI,IAAM,kBAEnEA,EAAoBA,EAAqC,gBAAI,IAAM,kBAEnEA,EAAoBA,EAAgC,WAAI,KAAO,aAE/DA,EAAoBA,EAAgC,WAAI,KAAO,aAE/DA,EAAoBA,EAAiC,YAAI,KAAO,cAEhEA,EAAoBA,EAAiC,YAAI,MAAQ,cAEjEA,EAAoBA,EAA4B,OAAI,MAAQ,SAE5DA,EAAoBA,EAAgC,WAAI,MAAQ,aAEhEA,EAAoBA,EAA6B,QAAI,MAAQ,UAE7DA,EAAoBA,EAA+B,UAAI,MAAQ,YAE/DA,EAAoBA,EAAyB,IAAI,OAAS,MAhC9D,CAiCGA,KAAwBA,QAuB3B,IAAWzR,IACX,SAAWA,GAEPA,EAAqBA,EAA2B,KAAI,GAAK,OAEzDA,EAAqBA,EAA6B,OAAI,GAAK,SAE3DA,EAAqBA,EAA6B,OAAI,GAAK,SAE3DA,EAAqBA,EAA2B,KAAI,GAAK,OAEzDA,EAAqBA,EAAoC,cAAI,IAAM,gBAEnEA,EAAqBA,EAAoC,cAAI,IAAM,gBAEnEA,EAAqBA,EAAuC,iBAAI,IAAM,mBAEtEA,EAAqBA,EAAgC,UAAI,KAAO,YAEhEA,EAAqBA,EAA+B,SAAI,KAAO,WAE/DA,EAAqBA,EAAqC,eAAI,KAAO,iBAErEA,EAAqBA,EAAsC,gBAAI,MAAQ,kBAEvEA,EAAqBA,EAAoC,cAAI,MAAQ,gBAErEA,EAAqBA,EAA8B,QAAI,MAAQ,UAE/DA,EAAqBA,EAAqC,eAAI,MAAQ,iBAEtEA,EAAqBA,EAAkC,YAAI,MAAQ,cAEnEA,EAAqBA,EAA+B,SAAI,OAAS,WAEjEA,EAAqBA,EAA8B,QAAI,OAAS,UAlCpE,CAmCGA,KAAyBA,QAS5B,IAAW6iW,IACX,SAAWA,GAEPA,EAAsBA,EAAgC,SAAI,GAAK,WAE/DA,EAAsBA,EAAuC,gBAAI,GAAK,kBAJ1E,CAKGA,KAA0BA,QAkC7B,IAAW3iW,IACX,SAAWA,GAEPA,EAAgBA,EAAsB,KAAI,GAAK,OAE/CA,EAAgBA,EAAwB,OAAI,GAAK,SAEjDA,EAAgBA,EAAsB,KAAI,GAAK,OAE/CA,EAAgBA,EAAwB,OAAI,GAAK,SAEjDA,EAAgBA,EAAwB,OAAI,IAAM,SAElDA,EAAgBA,EAA+B,cAAI,IAAM,gBAEzDA,EAAgBA,EAAwB,OAAI,IAAM,SAElDA,EAAgBA,EAA2B,UAAI,KAAO,YAEtDA,EAAgBA,EAA4B,WAAI,KAAO,aAEvDA,EAAgBA,EAA4B,WAAI,KAAO,aAEvDA,EAAgBA,EAA4B,WAAI,MAAQ,aAExDA,EAAgBA,EAA2B,UAAI,MAAQ,YAEvDA,EAAgBA,EAAyB,QAAI,IAAM,UAEnDA,EAAgBA,EAAiC,gBAAI,MAAQ,kBAE7DA,EAAgBA,EAA4B,WAAI,MAAQ,aAExDA,EAAgBA,EAAiC,gBAAI,OAAS,kBAE9DA,EAAgBA,EAA6B,YAAI,OAAS,cAE1DA,EAAgBA,EAAiC,gBAAI,OAAS,kBAE9DA,EAAgBA,EAA4B,WAAI,QAAU,aAE1DA,EAAgBA,EAAiC,gBAAI,QAAU,kBAE/DA,EAAgBA,EAA6B,YAAI,QAAU,cAE3DA,EAAgBA,EAAwB,OAAI,SAAW,SAEvDA,EAAgBA,EAA6B,YAAI,SAAW,cAE5DA,EAAgBA,EAAyB,QAAI,SAAW,UAExDA,EAAgBA,EAAgC,eAAI,SAAW,iBAE/DA,EAAgBA,EAA0B,SAAI,SAAW,WAEzDA,EAAgBA,EAAyB,QAAI,SAAW,UAtD5D,CAuDGA,KAAoBA,QAgBvB,IAAWwR,IACX,SAAWA,GAEPA,EAAkBA,EAA0B,OAAI,GAAK,SAErDA,EAAkBA,EAAmC,gBAAI,GAAK,kBAE9DA,EAAkBA,EAAmC,gBAAI,GAAK,kBAE9DA,EAAkBA,EAAmC,gBAAI,IAAM,kBAE/DA,EAAkBA,EAA8B,WAAI,IAAM,aAE1DA,EAAkBA,EAAmC,gBAAI,IAAM,kBAE/DA,EAAkBA,EAA+B,YAAI,KAAO,cAE5DA,EAAkBA,EAAmC,gBAAI,KAAO,kBAEhEA,EAAkBA,EAA8B,WAAI,KAAO,aAE3DA,EAAkBA,EAAmC,gBAAI,MAAQ,kBAEjEA,EAAkBA,EAA+B,YAAI,MAAQ,cAE7DA,EAAkBA,EAA2B,QAAI,MAAQ,UAxB7D,CAyBGA,KAAsBA,QAkBzB,IAAW1O,IACX,SAAWA,GAEPA,EAAmBA,EAAyB,KAAI,GAAK,OAErDA,EAAmBA,EAA6B,SAAI,GAAK,WAEzDA,EAAmBA,EAA6B,SAAI,GAAK,WAEzDA,EAAmBA,EAA4B,QAAI,GAAK,UAExDA,EAAmBA,EAAoC,gBAAI,IAAM,kBAEjEA,EAAmBA,EAA8B,UAAI,IAAM,YAE3DA,EAAmBA,EAAiC,aAAI,IAAM,eAE9DA,EAAmBA,EAAyB,KAAI,IAAM,OAEtDA,EAAmBA,EAAyB,KAAI,KAAO,OAEvDA,EAAmBA,EAAyB,KAAI,KAAO,OAEvDA,EAAmBA,EAAwB,IAAI,KAAO,MAEtDA,EAAmBA,EAA4B,QAAI,KAAO,UAxB9D,CAyBGA,KAAuBA,QAa1B,IAAWX,IACX,SAAWA,GAEPA,EAAaA,EAAmB,KAAI,GAAK,OAEzCA,EAAaA,EAA2B,aAAI,GAAK,eAEjDA,EAAaA,EAA6B,eAAI,GAAK,iBAEnDA,EAAaA,EAAsB,QAAI,GAAK,UAE5CA,EAAaA,EAAuB,SAAI,GAAK,WAE7CA,EAAaA,EAA6B,eAAI,IAAM,iBAEpDA,EAAaA,EAAsB,QAAI,GAAK,UAdhD,CAeGA,KAAiBA,QAMpB,IAAWygW,IACX,SAAWA,GAEPA,EAAUA,EAAgB,KAAI,GAAK,OAEnCA,EAAUA,EAAkB,OAAI,GAAK,SAJzC,CAKGA,KAAcA,QAMjB,IAAWC,IACX,SAAWA,GAEPA,EAAWA,EAAmB,OAAI,GAAK,SAEvCA,EAAWA,EAAgB,IAAI,GAAK,MAJxC,CAKGA,KAAeA,QAWlB,IAAWC,IACX,SAAWA,GAEPA,EAAaA,EAAmB,KAAI,GAAK,OAEzCA,EAAaA,EAAsB,QAAI,GAAK,UAE5CA,EAAaA,EAAmB,KAAI,GAAK,OAEzCA,EAAaA,EAAkB,IAAI,GAAK,MAExCA,EAAaA,EAAoB,MAAI,GAAK,QAV9C,CAWGA,KAAiBA,QAyEpB,IAAWC,IACX,SAAWA,GAEPA,EAAKA,EAAW,KAAI,MAAQ,OAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAW,KAAI,IAAM,OAE1BA,EAAKA,EAAS,GAAI,IAAM,KAExBA,EAAKA,EAAY,MAAI,IAAM,QAE3BA,EAAKA,EAAW,KAAI,IAAM,OAE1BA,EAAKA,EAAa,OAAI,IAAM,SAE5BA,EAAKA,EAAY,MAAI,IAAM,QAE3BA,EAAKA,EAAa,OAAI,IAAM,SAE5BA,EAAKA,EAAe,SAAI,IAAM,WAE9BA,EAAKA,EAAU,IAAI,IAAM,MAEzBA,EAAKA,EAAW,KAAI,IAAM,OAE1BA,EAAKA,EAAa,OAAI,IAAM,SAE5BA,EAAKA,EAAU,IAAI,GAAK,MAExBA,EAAKA,EAAY,MAAI,IAAM,QAE3BA,EAAKA,EAAgB,UAAI,GAAK,YAE9BA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAU,IAAI,KAAO,MAE1BA,EAAKA,EAAU,IAAI,KAAO,MAE1BA,EAAKA,EAAU,IAAI,KAAO,MAE1BA,EAAKA,EAAW,KAAI,IAAM,OAE1BA,EAAKA,EAAW,KAAI,KAAO,OAE3BA,EAAKA,EAAY,MAAI,KAAO,QApIhC,CAqIGA,KAASA,QAWZ,IAAW3/V,IACX,SAAWA,GAEPA,EAAcA,EAAsB,OAAI,GAAK,SAE7CA,EAAcA,EAA4B,aAAI,GAAK,eAEnDA,EAAcA,EAA0B,WAAI,GAAK,aAEjDA,EAAcA,EAAwB,SAAI,IAAM,WAEhDA,EAAcA,EAAwB,SAAI,IAAM,WAEhDA,EAAcA,EAAqB,MAAI,IAAM,QAE7CA,EAAcA,EAAqB,MAAI,KAAO,QAdlD,CAeGA,KAAkBA,QAErB,IAAW/N,IACX,SAAWA,GACPA,EAAaA,EAAmB,KAAI,GAAK,OACzCA,EAAaA,EAAkB,IAAI,GAAK,MACxCA,EAAaA,EAAkB,IAAI,GAAK,MACxCA,EAAaA,EAAoB,MAAI,GAAK,QAC1CA,EAAaA,EAAmB,KAAI,GAAK,OACzCA,EAAaA,EAAmB,KAAI,GAAK,OAN7C,CAOGA,KAAiBA,QAKpB,IAAW2tW,IACX,SAAWA,GACPA,EAAaA,EAA+B,iBAAI,GAAK,mBACrDA,EAAaA,EAA2B,aAAI,GAAK,eACjDA,EAAaA,EAA6B,eAAI,GAAK,iBACnDA,EAAaA,EAA6B,eAAI,GAAK,iBACnDA,EAAaA,EAA8B,gBAAI,GAAK,kBACpDA,EAAaA,EAAyB,WAAI,GAAK,aAC/CA,EAAaA,EAAmB,KAAI,GAAK,OACzCA,EAAaA,EAAgC,kBAAI,GAAK,oBACtDA,EAAaA,EAAgC,kBAAI,GAAK,oBACtDA,EAAaA,EAA+B,iBAAI,GAAK,mBACrDA,EAAaA,EAAgC,kBAAI,IAAM,oBACvDA,EAAaA,EAAoB,MAAI,IAAM,QAC3CA,EAAaA,EAA0B,YAAI,IAAM,cACjDA,EAAaA,EAA2B,aAAI,IAAM,eAClDA,EAAaA,EAAwB,UAAI,IAAM,YAC/CA,EAAaA,EAAwB,UAAI,IAAM,YAC/CA,EAAaA,EAAuB,SAAI,IAAM,WAC9CA,EAAaA,EAAuB,SAAI,IAAM,WAC9CA,EAAaA,EAAqC,uBAAI,IAAM,yBAC5DA,EAAaA,EAA4B,cAAI,IAAM,gBACnDA,EAAaA,EAAyB,WAAI,IAAM,aAChDA,EAAaA,EAAyB,WAAI,IAAM,aAChDA,EAAaA,EAAwB,UAAI,IAAM,YAvBnD,CAwBGA,KAAiBA,QAKpB,IAAWz/V,IACX,SAAWA,GAEPA,EAAgBA,EAAsB,KAAI,GAAK,OAE/CA,EAAgBA,EAAsB,KAAI,GAAK,OAE/CA,EAAgBA,EAAsB,KAAI,GAAK,OANnD,CAOGA,KAAoBA,QAKvB,ICjtBIuL,GAAgC,WAChC,SAASA,IAILptD,KAAKqvD,OAAUtiD,EAAG,GAAKC,EAAG,IAI1BhN,KAAKuhZ,QAAS,EAIdvhZ,KAAK82B,SAAU,EAIf92B,KAAK6L,QAAU,EAIf7L,KAAKiM,QAAU,EAIfjM,KAAK+oC,aAAe,EAIpB/oC,KAAK2sD,eAAYxxD,EAIjB6E,KAAK6sD,cAAW1xD,EAIhB6E,KAAK4+B,cAAWzjC,EAIhB6E,KAAK4sD,eAAYzxD,EAIjB6E,KAAKgW,WAAQ7a,EAIb6E,KAAK+V,YAAS5a,EAId6E,KAAKsmD,YAAc,EAInBtmD,KAAKi9B,QAAWzwB,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GAInD3M,KAAK8sD,oBAAsB,OAI3B9sD,KAAK+sD,kBAAoB,OAIzB/sD,KAAKgnD,aAAe,QAIpBhnD,KAAKqN,UAAY6zY,GAAUM,KAAON,GAAUO,OAI5CzhZ,KAAK0E,OAAU05B,KAAM,QAASstB,YAAa,QAASj+C,QAAS,EAAGm+C,YAAa,GAI7E5rD,KAAK24D,YAAc,IAAIlpC,GAIvBzvB,KAAKy5C,WAAa,IAAIhqB,GAItBzvB,KAAKumD,gBAAkB,EACvBvmD,KAAK0hZ,aAAc,EAInB1hZ,KAAK+1B,OAAS,IAAIR,GAAK,EAAG,EAAG,EAAG,GAIhCv1B,KAAKkpC,QAAU,IAAI3T,GAAK,EAAG,EAAG,EAAG,GAIjCv1B,KAAK+zD,OAAS,KAId/zD,KAAKg0D,YAAc,GAInBh0D,KAAK2hZ,YAAa,EAClB3hZ,KAAK4hZ,eAAgB,EAErB5hZ,KAAKkU,cAAW/Y,EAChB6E,KAAK6hZ,cAAW1mZ,EAChB6E,KAAK8hZ,OAAQ,EACb9hZ,KAAK+hZ,oBAAiB5mZ,EACtB6E,KAAKsD,GAAKqzD,KAsGd,OA9FAvJ,EAAe/xD,UAAU2mZ,6BAA+B,SAAUj1Y,EAAGC,EAAGuxB,GACpEv+B,KAAK6hZ,SAAWtjX,EAChBv+B,KAAKkU,UAAanH,EAAGA,EAAGC,EAAGA,IAM/BogD,EAAe/xD,UAAU4mZ,oBAAsB,SAAU9yX,GACrD,QAAsBh0B,IAAlB6E,KAAKkU,SACL,MAAsB,aAAlBlU,KAAK6hZ,SACE7hZ,KAAKkU,UAIRnH,EAAG/M,KAAKkU,SAASnH,EAAIoiB,EAAKnZ,MAAOhJ,EAAGhN,KAAKkU,SAASlH,EAAImiB,EAAKpZ,SAM3EzX,OAAOuJ,eAAeulD,EAAe/xD,UAAW,eAC5CqM,IAAK,WACD,OAAO1H,KAAK+hZ,gBAAkB/hZ,KAAK+1B,QAEvC1uB,IAAK,SAAU0uB,GACX/1B,KAAK+hZ,eAAiBhsX,GAE1BpuB,YAAY,EACZC,cAAc,IAMlBwlD,EAAe/xD,UAAUokO,QAAU,SAAUzqM,GACzC,IAAIhf,OAAuB7a,IAAf6E,KAAKgW,MAAsBhW,KAAKgW,OAASgf,EAAchf,OAAS,GAAKhW,KAAKi9B,OAAOzwB,KAAOxM,KAAKi9B,OAAOxwB,MAC5GsJ,OAAyB5a,IAAhB6E,KAAK+V,OAAuB/V,KAAK+V,QAAUif,EAAcjf,QAAU,GAAK/V,KAAKi9B,OAAOvwB,IAAM1M,KAAKi9B,OAAOtwB,OAGnH,OAFA3M,KAAK24D,YAAc,IAAIlpC,GAAKzZ,EAAOD,GACnC/V,KAAK24D,YAAc34D,KAAKkiZ,oBAAoBliZ,KAAK24D,YAAa3jC,GACvDh1B,KAAK24D,aAMhBvL,EAAe/xD,UAAU8mZ,QAAU,SAAUxpV,GAGzC,OAFA34D,KAAKy5C,WAAakf,EAClB34D,KAAKoiZ,eACEpiZ,KAAKy5C,YAKhB2T,EAAe/xD,UAAU+mZ,aAAe,WACpCpiZ,KAAK+1B,OAASoxB,GAAUnnD,OAO5BotD,EAAe/xD,UAAU6mZ,oBAAsB,SAAUvpV,EAAa3jC,GA8BlE,OA5BIh1B,KAAK4hZ,eAAkB5hZ,KAAKgW,OAAUhW,KAAK6sD,UAAa7sD,KAAK4+B,WAC7D+5B,EAAY3iD,MAAQ,KAEpBhW,KAAK4hZ,eAAkB5hZ,KAAK+V,QAAW/V,KAAK2sD,WAAc3sD,KAAK4sD,YAC/D+L,EAAY5iD,OAAS,UAEL5a,IAAhBw9D,QAA4Cx9D,IAAf6E,KAAKgW,YAClB7a,IAAhB6E,KAAK+V,WACL4iD,EAAcA,GAAe,IAAIlpC,IACrBzZ,WAAuB7a,IAAf6E,KAAKgW,OAAuBgf,EAAchf,OAAS,GACjEhW,KAAKi9B,OAAOzwB,KAAOxM,KAAKi9B,OAAOxwB,MAAQzM,KAAKgW,MAClD2iD,EAAY5iD,YAAyB5a,IAAhB6E,KAAK+V,QAAwBif,EAAcjf,QAAU,GACpE/V,KAAKi9B,OAAOvwB,IAAM1M,KAAKi9B,OAAOtwB,OAAS3M,KAAK+V,aAGhC5a,IAAlB6E,KAAK6sD,WACL8L,EAAY3iD,MAAQ3J,KAAKC,IAAIqsD,EAAY3iD,MAAOhW,KAAK6sD,gBAElC1xD,IAAnB6E,KAAK2sD,YACLgM,EAAY5iD,OAAS1J,KAAKC,IAAIqsD,EAAY5iD,OAAQ/V,KAAK2sD,iBAGrCxxD,IAAlB6E,KAAK4+B,WACL+5B,EAAY3iD,MAAQ3J,KAAK8T,IAAIw4C,EAAY3iD,MAAOhW,KAAK4+B,gBAElCzjC,IAAnB6E,KAAK4sD,YACL+L,EAAY5iD,OAAS1J,KAAK8T,IAAIw4C,EAAY5iD,OAAQ/V,KAAK4sD,YAEpD+L,GAEJvL,KClOPy+B,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAG5DilX,GAAkB,SAAUtlZ,GAC5B,OAAQA,EAAI2J,MACR,IAAK,SACD,OAAO47Y,GACX,IAAK,SACD,OAAOC,GACX,QACI,OAAOD,KAMfnlL,GAA2B,WAO3B,OANA,SAAmB3wN,EAAMC,EAAOC,EAAKC,GACjC3M,KAAKwM,KAAOA,EACZxM,KAAKyM,MAAQA,EACbzM,KAAK0M,IAAMA,EACX1M,KAAK2M,OAASA,MAQlB6oN,GAAwB,SAAU9oI,GAElC,SAAS8oI,IACL,OAAkB,OAAX9oI,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAU2pI,EAAQ9oI,GAIlBN,IACIllF,EAAS,IACVsuN,EAAOn6N,UAAW,YAAQ,GAC7B+wF,IACIllF,EAAS,IACVsuN,EAAOn6N,UAAW,aAAS,GAC9B+wF,IACIllF,EAAS,IACVsuN,EAAOn6N,UAAW,WAAO,GAC5B+wF,IACIllF,EAAS,IACVsuN,EAAOn6N,UAAW,cAAU,GACxBm6N,GACTh1J,IAKEnhB,GAAwB,SAAUqtC,GAElC,SAASrtC,IACL,OAAkB,OAAXqtC,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAUxsC,EAAQqtC,GAIlBN,IACIllF,EAAS,KACVm4C,EAAOhkD,UAAW,aAAS,GAC9B+wF,IACIllF,EAAS,IACVm4C,EAAOhkD,UAAW,gBAAY,GACjC+wF,IACIllF,EAAS,KACVm4C,EAAOhkD,UAAW,eAAW,GAChC+wF,IACIllF,EAAS,cACVm4C,EAAOhkD,UAAW,aAAS,GACvBgkD,GACTmhB,IAKEgiV,GAAsB,SAAU91T,GAEhC,SAAS81T,IACL,OAAkB,OAAX91T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAU22T,EAAM91T,GAIhBN,IACIllF,EAAS,KACVs7Y,EAAKnnZ,UAAW,aAAS,GAC5B+wF,IACIllF,EAAS,IACVs7Y,EAAKnnZ,UAAW,cAAU,GAC7B+wF,IACIllF,EAAS,IACVs7Y,EAAKnnZ,UAAW,eAAW,GACvBmnZ,GACThiV,IAKEiiV,GAA0B,SAAU/1T,GAEpC,SAAS+1T,IACL,OAAkB,OAAX/1T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAU42T,EAAU/1T,GAIpBN,IACI/jF,KAAem6Y,KAChBC,EAASpnZ,UAAW,aAAS,GAChC+wF,IACIllF,EAAS,SACVu7Y,EAASpnZ,UAAW,YAAQ,GAC/B+wF,IACIllF,EAAS,KACVu7Y,EAASpnZ,UAAW,UAAM,GACtBonZ,GACTjiV,IAKE8hV,GAAgC,SAAU51T,GAE1C,SAAS41T,IACL,OAAkB,OAAX51T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAUy2T,EAAgB51T,GAI1BN,IACIllF,EAAS,IACVo7Y,EAAejnZ,UAAW,UAAM,GACnC+wF,IACIllF,EAAS,IACVo7Y,EAAejnZ,UAAW,UAAM,GACnC+wF,IACIllF,EAAS,IACVo7Y,EAAejnZ,UAAW,UAAM,GACnC+wF,IACIllF,EAAS,IACVo7Y,EAAejnZ,UAAW,UAAM,GAC5BinZ,GACTG,IAKEF,GAAgC,SAAU71T,GAE1C,SAAS61T,IACL,OAAkB,OAAX71T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBA6rF,GAAU02T,EAAgB71T,GAI1BN,IACIllF,EAAS,IACVq7Y,EAAelnZ,UAAW,UAAM,GACnC+wF,IACIllF,EAAS,IACVq7Y,EAAelnZ,UAAW,UAAM,GACnC+wF,IACIllF,EAAS,IACVq7Y,EAAelnZ,UAAW,UAAM,GACnC+wF,IACIllF,EAAS,IACVq7Y,EAAelnZ,UAAW,UAAM,GACnC+wF,IACIllF,EAAS,KACVq7Y,EAAelnZ,UAAW,SAAK,GAC3BknZ,GACTE,IAKEC,GAA4B,SAAUh2T,GAEtC,SAASg2T,IACL,OAAkB,OAAXh2T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBA6rF,GAAU62T,EAAYh2T,GAItBN,IACIllF,EAAS,UACVw7Y,EAAWrnZ,UAAW,YAAQ,GACjC+wF,IACIllF,EAAS,UACVw7Y,EAAWrnZ,UAAW,mBAAe,GACxC+wF,IACIllF,EAAS,KACVw7Y,EAAWrnZ,UAAW,uBAAmB,GAC5C+wF,IACIllF,EAAS,IACVw7Y,EAAWrnZ,UAAW,mBAAe,GACxC+wF,IACIllF,EAAS,IACVw7Y,EAAWrnZ,UAAW,eAAW,GACpC+wF,IACIlkF,EAAem6Y,KAChBK,EAAWrnZ,UAAW,gBAAY,GAC9BqnZ,GACTliV,IAKE/U,GAA6B,SAAUihC,GAEvC,SAASjhC,IACL,OAAkB,OAAXihC,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAK/D,OAPA6rF,GAAUpgC,EAAaihC,GAIvBN,IACIllF,EAAS,gBACVukD,EAAYpwD,UAAW,YAAQ,GAC3BowD,GACTi3V,IAKE70E,GAA2B,SAAUnhP,GAErC,SAASmhP,IACL,OAAkB,OAAXnhP,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAgC/D,OAlCA6rF,GAAUgiP,EAAWnhP,GAIrBN,IACIllF,EAAS,UACV2mU,EAAUxyU,UAAW,aAAS,GACjC+wF,IACIllF,EAAS,UACV2mU,EAAUxyU,UAAW,kBAAc,GACtC+wF,IACIllF,EAAS,KACV2mU,EAAUxyU,UAAW,gBAAY,GACpC+wF,IACIllF,GAAS,IACV2mU,EAAUxyU,UAAW,cAAU,GAClC+wF,IACIllF,GAAS,IACV2mU,EAAUxyU,UAAW,YAAQ,GAChC+wF,IACIllF,EAAS,kBACV2mU,EAAUxyU,UAAW,kBAAc,GACtC+wF,IACIllF,EAAS,qBACV2mU,EAAUxyU,UAAW,oBAAgB,GACxC+wF,IACIllF,EAAS,WACV2mU,EAAUxyU,UAAW,iBAAa,GACrC+wF,IACIllF,EAAS,SACV2mU,EAAUxyU,UAAW,sBAAkB,GAC1C+wF,IACIllF,EAAS,SACV2mU,EAAUxyU,UAAW,oBAAgB,GACjCwyU,GACT60E,ICjQE72T,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAkBxCt7B,GAA2B,SAAU87B,GAErC,SAAS97B,IACL,IAAI7wD,EAAmB,OAAX2sF,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAUhE,OANAD,EAAMy6D,QAAU,IAAI2iK,GAAU,EAAG,EAAG,EAAG,GAEvCp9N,EAAM4iZ,mBAAgBxnZ,EAEtB4E,EAAM6iZ,iBAAkB,EACxB7iZ,EAAM8iZ,gBAAkB,EACjB9iZ,EA4KX,OAxLA8rF,GAAUj7B,EAAW87B,GAiBrB97B,EAAUv1D,UAAU2sM,YAAc,WAC9B,YAAsB7sM,IAAlB6E,KAAKoa,UAA0Bpa,KAAKoa,SAAS3d,OAAS,GAU9Dm0D,EAAUv1D,UAAUokO,QAAU,SAAUzqM,GAEpCh1B,KAAK2iZ,mBAAgBxnZ,EACrB,IACIkF,EAIAyiZ,EALAC,OAAU5nZ,EAMd,GAAI6E,KAAKgoM,cAAe,CAEpB,IAAK,IAAI7rM,EAAI,EAAGA,EAAI6D,KAAKoa,SAAS3d,OAAQN,IAAK,CAE3C,IAAI6mZ,EAAsC,aAD1C3iZ,EAAQL,KAAKoa,SAASje,IACJ2wD,qBAAiE,YAA5BzsD,EAAM0sD,mBACzD/sD,KAAK4iZ,iBAAmBI,GAAU3iZ,aAAiBuwD,QAAuCz1D,IAA1BkF,EAAMuiZ,kBACtEviZ,EAAMo/N,QAAQzqM,GAElB8tX,EAAc9iZ,KAAKijZ,kBAAkB5iZ,GACH,YAA9BA,EAAMysD,qBAAiE,YAA5BzsD,EAAM0sD,yBACtB5xD,IAAvB6E,KAAK2iZ,cACL3iZ,KAAK2iZ,cAAgBG,EAGrB9iZ,KAAK2iZ,cAAc1lW,UAAU6lW,IAIzC,QAA2B3nZ,IAAvB6E,KAAK2iZ,eAAoD,IAArB3iZ,KAAKsmD,YAAmB,CAC5D,IAAI48V,GACAn2Y,EAAG/M,KAAK2iZ,cAAc51Y,EAAI/M,KAAK2iZ,cAAc3sY,MAAQhW,KAAKqvD,MAAMtiD,EAChEC,EAAGhN,KAAK2iZ,cAAc31Y,EAAIhN,KAAK2iZ,cAAc5sY,OAAS/V,KAAKqvD,MAAMriD,GAEjEm2Y,EAAWtyV,GAAY7wD,KAAKsmD,iBAAanrD,OAAWA,EAAW+nZ,GACnEljZ,KAAK2iZ,cAAc51Y,EAAIo2Y,EAASp2Y,EAAI/M,KAAK2iZ,cAAc3sY,MAAQhW,KAAKqvD,MAAMtiD,EAC1E/M,KAAK2iZ,cAAc31Y,EAAIm2Y,EAASn2Y,EAAIhN,KAAK2iZ,cAAc5sY,OAAS/V,KAAKqvD,MAAMriD,EAE3EhN,KAAK2iZ,gBACLI,EAAU,IAAItzX,GAAKzvB,KAAK2iZ,cAAc3sY,MAAOhW,KAAK2iZ,cAAc5sY,SAMxE,OAHAgtY,EAAU/iZ,KAAKkiZ,oBAAoBa,EAAS/tX,GAC5Ch1B,KAAKojZ,gBAAgBL,GACrB/iZ,KAAK24D,YAAcoqV,EACZA,GAMXnyV,EAAUv1D,UAAU8mZ,QAAU,SAAUxpV,GACpC,IAAIt4D,EAEAyiZ,EAAc9iZ,KAAK2iZ,cACvB,GAAIG,EAAa,CACL9iZ,KAAK6L,QACL7L,KAAKiM,QAIb,GAHAjM,KAAK6L,QAAUi3Y,EAAY/1Y,EAAI+1Y,EAAY9sY,MAAQhW,KAAKqvD,MAAMtiD,EAC9D/M,KAAKiM,QAAU62Y,EAAY91Y,EAAI81Y,EAAY/sY,OAAS/V,KAAKqvD,MAAMriD,EAE3DhN,KAAKgoM,cAEL,IAAK,IAAI7rM,EAAI,EAAGA,EAAI6D,KAAKoa,SAAS3d,OAAQN,IAAK,CAE3C,IAAIgmZ,GAAU,EACoB,aAFlC9hZ,EAAQL,KAAKoa,SAASje,IAEZ2wD,sBACNzsD,EAAMwL,QAAU7L,KAAK6L,QACrBxL,EAAMkmD,gBAAkBvmD,KAAKumD,gBAAkBvmD,KAAKsmD,YACpD67V,GAAU,GAEkB,YAA5B9hZ,EAAM0sD,oBACN1sD,EAAM4L,QAAUjM,KAAKiM,QACrB5L,EAAMkmD,gBAAkBvmD,KAAKumD,gBAAkBvmD,KAAKsmD,YACpD67V,GAAU,IAEVA,GAAWniZ,KAAK4iZ,iBAAoBviZ,aAAiBuwD,QAAuCz1D,IAA1BkF,EAAMuiZ,kBACxEviZ,EAAM8hZ,QAAQ9hZ,EAAMs4D,cAQpC,OAHA34D,KAAKy5C,WAAakf,EAClB34D,KAAKoiZ,eACLpiZ,KAAK6iZ,gBAAkB7iZ,KAAKsmD,YACrBqS,GAOX/H,EAAUv1D,UAAU+nZ,gBAAkB,SAAUj0X,GAC5C,GAAInvB,KAAKgoM,cACL,IAAK,IAAI5pM,EAAK,EAAGyE,EAAK7C,KAAKoa,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIiC,EAAQwC,EAAGzE,GACmB,YAA9BiC,EAAMysD,0BAAiE3xD,IAA5BkF,EAAMs4D,YAAY3iD,QAC7D3V,EAAMs4D,YAAY3iD,MAAQmZ,EAAKnZ,MAAQ3V,EAAM48B,OAAOzwB,KAAOnM,EAAM48B,OAAOxwB,OAE5C,YAA5BpM,EAAM0sD,wBAAgE5xD,IAA7BkF,EAAMs4D,YAAY5iD,SAC3D1V,EAAMs4D,YAAY5iD,OAASoZ,EAAKpZ,OAAS1V,EAAM48B,OAAOvwB,IAAMrM,EAAM48B,OAAOtwB,QAEzEtM,aAAiBuwD,GACjBvwD,EAAM+iZ,gBAAgB/iZ,EAAMs4D,eAS5C/H,EAAUv1D,UAAUgoZ,aAAe,SAAUl0X,GACzCA,EAAKnZ,OAAShW,KAAKw6D,QAAQhuD,KAAOxM,KAAKw6D,QAAQ/tD,MAC/C0iB,EAAKpZ,QAAU/V,KAAKw6D,QAAQ9tD,IAAM1M,KAAKw6D,QAAQ7tD,QAOnDikD,EAAUv1D,UAAUioZ,0BAA4B,SAAUjjZ,EAAO0yB,GAC7D,IACIpnB,EAAS+sD,IADG3rD,EAAGgmB,EAAOhmB,EAAI1M,EAAMs4D,YAAY3iD,MAAQ,EAAGhJ,EAAG+lB,EAAO/lB,EAAI3M,EAAMs4D,YAAY5iD,OAAS,GACpE1V,GAEhCsL,EAASklD,GAAYxwD,EAAMimD,YAAavzB,EAAOhmB,EAAGgmB,EAAO/lB,EAAGrB,GAE5DA,EAASklD,GAAY7wD,KAAKsmD,YAActmD,KAAKumD,gBAAiBvmD,KAAK6L,QAAS7L,KAAKiM,QAASN,GAC1FtL,EAAMwL,QAAUF,EAAOoB,EACvB1M,EAAM4L,QAAUN,EAAOqB,GAG3B4jD,EAAUv1D,UAAU4nZ,kBAAoB,SAAU5iZ,GAC9C,IACIkjZ,EACJA,EAAYljZ,EAAMs4D,YAAYt5D,QACdgB,EAAMimD,YAActmD,KAAKsmD,YAAzC,IACIpV,EAAgB7wC,EAAMwL,QAAtBqlC,EAAkC7wC,EAAM4L,QACxCO,EAAO0kC,EAAaqyW,EAAUvtY,MAAQ3V,EAAMgvD,MAAMtiD,EAClDL,EAAMwkC,EAAaqyW,EAAUxtY,OAAS1V,EAAMgvD,MAAMriD,EAClDP,EAAQD,EAAO+2Y,EAAUvtY,MACzBrJ,EAASD,EAAM62Y,EAAUxtY,OACzBwuB,GAAYx3B,EAAGP,EAAMQ,EAAGN,GACxB83B,GAAaz3B,EAAGN,EAAOO,EAAGN,GAC1B+3B,GAAe13B,EAAGP,EAAMQ,EAAGL,GAC3B+3B,GAAgB33B,EAAGN,EAAOO,EAAGL,GAWjC,OAVA43B,EAAUssB,GAAYxwD,EAAMimD,YAAajmD,EAAMwL,QAASxL,EAAM4L,QAASs4B,GACvEC,EAAWqsB,GAAYxwD,EAAMimD,YAAajmD,EAAMwL,QAASxL,EAAM4L,QAASu4B,GACxEC,EAAaosB,GAAYxwD,EAAMimD,YAAajmD,EAAMwL,QAASxL,EAAM4L,QAASw4B,GAC1EC,EAAcmsB,GAAYxwD,EAAMimD,YAAajmD,EAAMwL,QAASxL,EAAM4L,QAASy4B,GAClD,IAArB1kC,KAAKsmD,cACL/hB,EAAUssB,IAAa7wD,KAAKsmD,iBAAanrD,OAAWA,EAAWopC,GAC/DC,EAAWqsB,IAAa7wD,KAAKsmD,iBAAanrD,OAAWA,EAAWqpC,GAChEC,EAAaosB,IAAa7wD,KAAKsmD,iBAAanrD,OAAWA,EAAWspC,GAClEC,EAAcmsB,IAAa7wD,KAAKsmD,iBAAanrD,OAAWA,EAAWupC,IAEhEnP,GAAK+vB,UAAU/gB,EAASC,EAAUC,EAAYC,KAElDksB,GACTxD,IC5MEy+B,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAkBxCryC,GAA6B,SAAU6yC,GAKvC,SAAS7yC,IACL,IAAI95C,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KAejC,OAXAD,EAAMytC,SAAW,GAIjBztC,EAAM6pC,eAAgB,EAItB7pC,EAAMyjZ,aAAe,GAErBzjZ,EAAMmyD,eAAiB,IAAI38B,GACpBx1B,EAiGX,OArHA8rF,GAAUhyC,EAAa6yC,GAsBvBpuF,OAAOuJ,eAAegyC,EAAYx+C,UAAW,QACzCqM,IAAK,WACD,OAAO1H,KAAKwtC,UAEhBnmC,IAAK,SAAUrK,GACPgD,KAAKwtC,WAAaxwC,IAClBgD,KAAKwtC,SAAWxwC,EAChBgD,KAAKuhZ,QAAS,IAGtB55Y,YAAY,EACZC,cAAc,IAGlBiyC,EAAYx+C,UAAU88C,UAAY,WAC9B,IAAIp4C,EAAQC,KAQZ,OAPKA,KAAKyjZ,aACNzjZ,KAAKyjZ,WAAatjZ,WAAW,WACzBJ,EAAMk3B,OAAS,KACfl3B,EAAM0jZ,WAAa,MACpB,MAEPzjZ,KAAKi3B,OAASj3B,KAAKi3B,QAAUw6B,GAAkBzxD,MhVhBvD,SAAgCgB,EAASi2B,GAErC,IAAK,IADDysX,KACKtlZ,EAAK,EAAG2jC,EAAW9K,EAAQ74B,EAAK2jC,EAAStlC,OAAQ2B,IAAM,CAC5D,IAAI+0B,EAAQ4O,EAAS3jC,GACjBwgU,GACA7xT,EAAG/L,EAAQ6K,QAAU7K,EAAQy4C,WAAWzjC,MAAQhV,EAAQquD,MAAMtiD,EAAIomB,EAAMpmB,EACxEC,EAAGhM,EAAQiL,QAAUjL,EAAQy4C,WAAW1jC,OAAS/U,EAAQquD,MAAMriD,EAAImmB,EAAMnmB,GAEzEu+B,OAAS,EACT5pB,EAAQ3gB,EAAQslD,YAActlD,EAAQulD,gBACtC5kC,GAEAwqB,GADAZ,EAASL,KACYvpB,EAAO3gB,EAAQ6K,QAAS7K,EAAQiL,SAErDs/B,IACAqzR,EAAMtzR,GAAuBC,EAAQqzR,IAEzC8kF,EAAcl/Y,KAAKo6T,GAEvB,OAAO8kF,EgVFIC,CAAgB3jZ,KAAMA,KAAKi3B,SAMtC4iB,EAAYx+C,UAAUokO,QAAU,SAAUzqM,GAmBtC,OAjBIh1B,KAAK2hZ,iBAA6BxmZ,IAAf6E,KAAKgW,YAAuC7a,IAAhB6E,KAAK+V,OACpD/V,KAAKkyD,eAAiB,IAAI38B,GAAKv1B,KAAK6L,QAAU7L,KAAKgW,MAAQhW,KAAKqvD,MAAMtiD,EAAG/M,KAAKiM,QAAUjM,KAAK+V,OAAS/V,KAAKqvD,MAAMriD,EAAGhN,KAAKgW,MAAOhW,KAAK+V,QAEhI/V,KAAKuhZ,SAAWvhZ,KAAK4pC,oBAAiCzuC,IAAf6E,KAAKgW,YAAuC7a,IAAhB6E,KAAK+V,UAE7E/V,KAAKkyD,eAAiBI,GAAYtyD,KAAKxD,KAAOwD,KAAKxD,KAAO,UAE3CrB,IAAf6E,KAAKgW,MACLhW,KAAK24D,YAAc,IAAIlpC,GAAKzvB,KAAKkyD,eAAel8C,MAAOhW,KAAK+V,QAAU/V,KAAKkyD,eAAen8C,aAErE5a,IAAhB6E,KAAK+V,OACV/V,KAAK24D,YAAc,IAAIlpC,GAAKzvB,KAAKgW,OAAShW,KAAKkyD,eAAel8C,MAAOhW,KAAKkyD,eAAen8C,QAGzF/V,KAAK24D,YAAc,IAAIlpC,GAAKzvB,KAAKgW,MAAOhW,KAAK+V,QAEjD/V,KAAK24D,YAAc34D,KAAKkiZ,oBAAoBliZ,KAAK24D,YAAa3jC,GACvDh1B,KAAK24D,aAMhB9e,EAAYx+C,UAAU8mZ,QAAU,SAAUxpV,GAWtC,OAVI34D,KAAKuhZ,QAAUvhZ,KAAKy5C,WAAWzjC,QAAU2iD,EAAY3iD,OAAShW,KAAKy5C,WAAW1jC,SAAW4iD,EAAY5iD,UACrG/V,KAAKuhZ,QAAS,EACdvhZ,KAAKwjZ,aAAexjZ,KAAKugB,WAAWvgB,KAAKxD,KAAMwD,KAAKkyD,eAAgByG,GAC/D34D,KAAK2hZ,aACN3hZ,KAAKi3B,OAAS,OAGtBj3B,KAAKy5C,WAAaz5C,KAAK24D,YACvB34D,KAAKoiZ,eACLpiZ,KAAKuhZ,QAAS,EACPvhZ,KAAKy5C,YAQhBI,EAAYx+C,UAAUklB,WAAa,SAAUitB,EAAUzX,EAAQ0jB,GAC3D,IAAIjP,GAAU,EACVynB,EAAgB,GAChBxlB,GAAU1W,EAAOhpB,EACjB2/B,GAAU3W,EAAO/oB,EACjB+6B,KAeJ,OAdI0R,EAAWzjC,QAAU+f,EAAO/f,OAASyjC,EAAW1jC,SAAWggB,EAAOhgB,SAClE02B,EAASgN,EAAWzjC,MAAQ4gB,OAAOb,EAAO/f,MAAQ+f,EAAO/f,MAAQ,GACjE02B,EAAS+M,EAAW1jC,OAAS6gB,OAAOb,EAAOhgB,OAASggB,EAAOhgB,OAAS,GACpEy0B,GAAU,GAEdzC,EAAkBF,GAAgB2F,GAClCzF,EAAkB6C,GAAqB7C,GAEnCkqB,GADCznB,GAAWxqC,KAAKuhZ,SAAWvhZ,KAAK4pC,cACjBA,GAAc7B,EAAiB0E,EAAQC,EAAQlC,EAASzU,EAAOhpB,EAAGgpB,EAAO/oB,EAAG,EAAG,GAG/Es9B,GAAcvC,GAElCyC,GAAU,EACHynB,GAEJpY,GACTuT,ICzIEy+B,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAgBxCr+B,GAAsC,SAAU6+B,GAKhD,SAAS7+B,EAAqB0D,EAAQL,GAClC,IAAInxD,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KAUjC,OATAD,EAAMvD,KAAO,GACbuD,EAAMwxD,OAAS,GACfxxD,EAAMmxD,UAAY,GAIlBnxD,EAAM+jD,MAAQ,UACd/jD,EAAMmxD,UAAYA,EAClBnxD,EAAMwxD,OAASA,EACRxxD,EAmDX,OAlEA8rF,GAAUh+B,EAAsB6+B,GAiBhCpuF,OAAOuJ,eAAegmD,EAAqBxyD,UAAW,WAIlDqM,IAAK,WACD,OAAO1H,KAAKxD,MAEhB6K,IAAK,SAAUrK,GACXgD,KAAKxD,KAAOQ,EACZgD,KAAKiP,SAAWk/C,GAAWnuD,MAAM,GACjCA,KAAKuhZ,QAAS,GAElB55Y,YAAY,EACZC,cAAc,IAMlBimD,EAAqBxyD,UAAUokO,QAAU,SAAUzqM,GAC/C,GAAIh1B,KAAKuhZ,OAAQ,CACb,IAAI7uX,EjV8OhB,SAAqCk7B,GACjC,IAAIgE,EAAiB,iBACrB/1D,OAAO+1D,GAAgBltD,MAAMC,WAAa,UAC1C,IAAIi/Y,EAAY/nZ,OAAO+1D,GAAgBx3C,SAAS,GAChDwpY,EAAUjiZ,YAAYisD,GACtB,IAAI73B,EAAS63B,EAAchiD,wBACvB4mD,EAAYoxV,EAAUh4Y,wBACtB8mB,EAAOqD,EAKX,OAJArD,EAAK3lB,EAAIgpB,EAAOvpB,KAAOgmD,EAAUhmD,KACjCkmB,EAAK1lB,EAAI+oB,EAAOrpB,IAAM8lD,EAAU9lD,IAChCk3Y,EAAUt+Y,YAAYsoD,GACtB/xD,OAAO+1D,GAAgBltD,MAAMC,WAAa,SACnC+tB,EiV1PYmxX,CAAqB7jZ,KAAKiP,UACrCjP,KAAK8jZ,YAAc,IAAIr0X,GACvBzvB,KAAK8jZ,YAAY9tY,MAAQ0c,EAAK1c,MAC9BhW,KAAK8jZ,YAAY/tY,OAAS2c,EAAK3c,OAC/B,IAAIhJ,EAAI2lB,EAAK3lB,EACTC,EAAI0lB,EAAK1lB,EACbhN,KAAK+jZ,kBAAqBh3Y,EAAGA,EAAGC,EAAGA,GACnChN,KAAKuhZ,QAAS,EAElB,QAAmBpmZ,IAAf6E,KAAKgW,YAAuC7a,IAAhB6E,KAAK+V,OAAsB,CACvD,IAAIiuY,EjVqPhB,SAAiCp2V,GAC7B,IAAIgE,EAAiB,iBACrB/1D,OAAO+1D,GAAgBltD,MAAMC,WAAa,UAC1C,IAAIi/Y,EAAY/nZ,OAAO+1D,GAAgBx3C,SAAS,GAChDwpY,EAAUjiZ,YAAYisD,GACtB,IAAI4E,EAAYoxV,EAAUh4Y,wBAG1B,OAFAg4Y,EAAUt+Y,YAAYsoD,GACtB/xD,OAAO+1D,GAAgBltD,MAAMC,WAAa,SACnC6tD,EiV7PwByxV,CAAiBjkZ,KAAKiP,UAC7CjP,KAAK24D,YAAc,IAAIlpC,GAAKu0X,EAAiBhuY,MAAOguY,EAAiBjuY,aAGrE/V,KAAK24D,YAAc,IAAIlpC,GAAKzvB,KAAKgW,MAAOhW,KAAK+V,QAGjD,OADA/V,KAAK24D,YAAc34D,KAAKkiZ,oBAAoBliZ,KAAK24D,YAAa3jC,GACvDh1B,KAAK24D,aAMhB9K,EAAqBxyD,UAAU8mZ,QAAU,SAAUxpV,GAG/C,OAFA34D,KAAKy5C,WAAa,IAAIhqB,GAAKzvB,KAAK24D,YAAY3iD,MAAOhW,KAAK24D,YAAY5iD,QACpE/V,KAAKoiZ,eACEpiZ,KAAKy5C,YAEToU,GACTT,ICpFEy+B,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAgBxC//B,GAA6B,SAAUugC,GAKvC,SAASvgC,IACL,IAAIpsD,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KAqBjC,OAjBAD,EAAMic,YAAc,GACpBjc,EAAMwsD,WACF12B,MAAO,QAGX91B,EAAMk0D,QAAS,EACfl0D,EAAMmkZ,aAINnkZ,EAAM2E,OACFmxB,MAAO,QAASuI,KAAM,QAASstB,YAAa,QAC5CE,YAAa,EAAGt8B,WAAY,QAASJ,SAAU,GAAIK,WAAY,gBAC/Du8B,aAAc,mBAAoBE,UAAW,SAAUD,QAAQ,EAAOF,MAAM,EAC5EI,eAAgB,OAAQN,gBAAiB,GAAIl+C,QAAS,EAAGy+C,SAAU,KACnEtrB,aAAc,QAEX7gC,EA0EX,OApGA8rF,GAAU1/B,EAAaugC,GA4BvBpuF,OAAOuJ,eAAeskD,EAAY9wD,UAAW,WACzCqM,IAAK,WACD,OAAO1H,KAAKgc,aAEhB3U,IAAK,SAAUrK,GACPgD,KAAKgc,cAAgBhf,IACrBgD,KAAKgc,YAAchf,EACnBgD,KAAKuhZ,QAAS,EACdvhZ,KAAKi0D,QAAS,IAGtBtsD,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeskD,EAAY9wD,UAAW,cACzCqM,IAAK,WACD,OAAO1H,KAAKkkZ,WAEhB78Y,IAAK,SAAUrK,GACXgD,KAAKkkZ,UAAYlnZ,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeskD,EAAY9wD,UAAW,cACzCqM,IAAK,WACD,OAAO1H,KAAKmkZ,gBAEhB98Y,IAAK,SAAUrK,GACXgD,KAAKmkZ,eAAiBnnZ,GAE1B2K,YAAY,EACZC,cAAc,IAGlBukD,EAAY9wD,UAAU+wD,mBAAqB,WACvCpsD,KAAKuhZ,QAAS,GAMlBp1V,EAAY9wD,UAAUokO,QAAU,SAAUzqM,GACtC,IAAI7F,EAcJ,OAZIA,EADAnvB,KAAKuhZ,OACE1yX,GAAY7uB,KAAMA,KAAK0E,MAAO1E,KAAK46B,QAAS56B,KAAKgW,OAGjDhW,KAAK24D,iBAEGx9D,IAAf6E,KAAKgW,YAAuC7a,IAAhB6E,KAAK+V,OACjC/V,KAAK24D,YAAc,IAAIlpC,GAAKN,EAAKnZ,MAAOmZ,EAAKpZ,QAG7C/V,KAAK24D,YAAc,IAAIlpC,GAAKzvB,KAAKgW,MAAOhW,KAAK+V,QAEjD/V,KAAK24D,YAAc34D,KAAKkiZ,oBAAoBliZ,KAAK24D,YAAa3jC,GACvDh1B,KAAK24D,aAMhBxM,EAAY9wD,UAAU8mZ,QAAU,SAAUxpV,GAOtC,OANIA,EAAY3iD,QAAUhW,KAAKy5C,WAAWzjC,OAAS2iD,EAAY5iD,SAAW/V,KAAKy5C,WAAW1jC,QAAU/V,KAAKuhZ,UACrGvhZ,KAAKi0D,QAAS,GAElBj0D,KAAKy5C,WAAakf,EAClB34D,KAAKoiZ,eACLpiZ,KAAKuhZ,QAAS,EACPvhZ,KAAKy5C,YAET0S,GACTiB,ICtHEy+B,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAgBxC3+B,GAA8B,SAAUm/B,GAKxC,SAASn/B,IACL,IAAIxtD,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KAiBjC,OAbAD,EAAMqkZ,YAAc,GAIpBrkZ,EAAM2tD,WAAa,OAInB3tD,EAAMytD,WAAa,OAInBztD,EAAMskZ,QAAU,UACTtkZ,EAyCX,OA/DA8rF,GAAUt+B,EAAcm/B,GAwBxBpuF,OAAOuJ,eAAe0lD,EAAalyD,UAAW,UAC1CqM,IAAK,WACD,OAAO1H,KAAKokZ,aAEhB/8Y,IAAK,SAAUrK,GACXgD,KAAKokZ,YAAcpnZ,EACnBgD,KAAKuhZ,QAAS,GAElB55Y,YAAY,EACZC,cAAc,IAMlB2lD,EAAalyD,UAAUokO,QAAU,SAAUzqM,GAavC,OAZIh1B,KAAKuhZ,SAA4B,YAAjBvhZ,KAAKqkZ,cAAwClpZ,IAAf6E,KAAKgW,YAAuC7a,IAAhB6E,KAAK+V,UAC/E/V,KAAK8jZ,YnV8NjB,SAA6BvnZ,EAAQunZ,GACjC,IAAIlyV,EAAiB,iBACrB/1D,OAAO+1D,GAAgBltD,MAAMC,WAAa,UAC1C,IAAI6xD,EAAe36D,OAAO+1D,GAAgBx3C,SAAS,GACnDo8C,EAAahzD,aAAa,MAAOjH,GACjC,IAAIw5B,EAASygC,EAAa5qD,wBACtBoK,EAAQ+f,EAAO/f,MACfD,EAASggB,EAAOhgB,OAGpB,OAFA+tY,EAAc,IAAIr0X,GAAKzZ,EAAOD,GAC9Bla,OAAO+1D,GAAgBltD,MAAMC,WAAa,SACnCm/Y,EmVxOoBQ,CAAatkZ,KAAKzD,OAAQyD,KAAK8jZ,aAClD9jZ,KAAKuhZ,QAAS,QAECpmZ,IAAf6E,KAAKgW,YAAuC7a,IAAhB6E,KAAK+V,QACjC/V,KAAK24D,YAAc,IAAIlpC,GAAKzvB,KAAKgW,MAAOhW,KAAK+V,QAC7C/V,KAAK8jZ,YAAc9jZ,KAAK24D,aAGxB34D,KAAK24D,YAAc34D,KAAK8jZ,YAE5B9jZ,KAAK24D,YAAc34D,KAAKkiZ,oBAAoBliZ,KAAK24D,YAAa3jC,GACvDh1B,KAAK24D,aAMhBpL,EAAalyD,UAAU8mZ,QAAU,SAAUxpV,GAGvC,OAFA34D,KAAKy5C,WAAa,IAAIhqB,GAAKzvB,KAAK24D,YAAY3iD,MAAOhW,KAAK24D,YAAY5iD,QACpE/V,KAAKoiZ,eACEpiZ,KAAKy5C,YAET8T,GACTH,ICjFEy+B,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAkBxCq4T,GAAwB,SAAU73T,GAElC,SAAS63T,IACL,IAAIxkZ,EAAmB,OAAX2sF,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAMhE,OADAD,EAAM6iZ,qBAAkBznZ,EACjB4E,EAyKX,OAjLA8rF,GAAU04T,EAAQ73T,GAclB63T,EAAOlpZ,UAAUokO,QAAU,SAAUzqM,GACjC,IAAI+tX,OAAU5nZ,EACVwnZ,OAAgBxnZ,EACpB,GAAI6E,KAAKgoM,cAAe,CAEpB,IAAK,IAAI5pM,EAAK,EAAGyE,EAAK7C,KAAKoa,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIiC,EAAQwC,EAAGzE,GACfiC,EAAMo/N,QAAQzqM,GACd,IAAIuuX,EAAYljZ,EAAMs4D,YAAYt5D,QACR,IAAtBgB,EAAMimD,cACNi9V,EAAYlrV,GAAWkrV,EAAWljZ,EAAMimD,cAE5C,IAAI75C,EAAQ82Y,EAAUvtY,MAAQ3V,EAAM48B,OAAOxwB,MACvCE,EAAS42Y,EAAUxtY,OAAS1V,EAAM48B,OAAOtwB,OACzCm2Y,EAAc,IAAIvtX,GAAKl1B,EAAM48B,OAAOzwB,KAAMnM,EAAM48B,OAAOvwB,IAAKD,EAAOE,GACvE,GAAItM,EAAMyhZ,MAAO,CAEb,QAAiB3mZ,IADFkF,EAAM4hZ,oBAAoBsB,GAErC,cAGcpoZ,IAAlBwnZ,EACAA,EAAgBG,EAGhBH,EAAc1lW,UAAU6lW,GAGhC,GAAIH,EAAe,CACf,IAAI70I,EAAa,EACbC,EAAY,EAChBD,EAAazhQ,KAAKC,IAAIq2Y,EAAcn2Y,KAAM,GAC1CuhQ,EAAY1hQ,KAAKC,IAAIq2Y,EAAcj2Y,IAAK,GACxCq2Y,EAAU,IAAItzX,GAAKkzX,EAAc3sY,MAAQ83P,EAAY60I,EAAc5sY,OAASg4P,IASpF,OANAg1I,EAAUr2T,EAAOrxF,UAAU6mZ,oBAAoB5gZ,KAAKtB,KAAM+iZ,EAAS/tX,GACnE03D,EAAOrxF,UAAU+nZ,gBAAgB9hZ,KAAKtB,KAAM+iZ,GAE5CA,EAAQ/sY,OAAShW,KAAKw6D,QAAQhuD,KAAOxM,KAAKw6D,QAAQ/tD,MAClDs2Y,EAAQhtY,QAAU/V,KAAKw6D,QAAQ9tD,IAAM1M,KAAKw6D,QAAQ7tD,OAClD3M,KAAK24D,YAAcoqV,EACZA,GAKXwB,EAAOlpZ,UAAU8mZ,QAAU,SAAUxpV,GAEjC,GADA34D,KAAK+8C,YAAc,IAAIxnB,GACnBv1B,KAAKgoM,cAAe,CACpB,IAAIh7L,OAAI,EACJD,OAAI,EACRC,EAAIhN,KAAKiM,QAAU0sD,EAAY5iD,OAAS/V,KAAKqvD,MAAMriD,EAAIhN,KAAKw6D,QAAQ9tD,IACpEK,EAAI/M,KAAK6L,QAAU8sD,EAAY3iD,MAAQhW,KAAKqvD,MAAMtiD,EAAI/M,KAAKw6D,QAAQhuD,KACnE,IAAK,IAAIpO,EAAK,EAAGyE,EAAK7C,KAAKoa,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIiC,EAAQwC,EAAGzE,GACf,GAA6C,IAAxCiC,EAAMgN,UAAY6zY,GAAUO,QAAe,CAC5CphZ,EAAMkmD,gBAAkBvmD,KAAKumD,gBAAkBvmD,KAAKsmD,YACpD,IAAIi9V,EAAYljZ,EAAMs4D,YAAYt5D,QACR,IAAtBgB,EAAMimD,cACNi9V,EAAYlrV,GAAWkrV,EAAWljZ,EAAMimD,cAE5C,IAAI/hB,OAAU,EACVxR,GAAWhmB,EAAG,EAAGC,EAAG,GACpBw3Y,EAASz3Y,EACT03Y,EAASz3Y,EACb,GAA2B,UAAvB3M,EAAM2mD,aAA0B,CAChC,IAAI9yC,EAAW7T,EAAM4hZ,oBAAoBtpV,QACxBx9D,IAAb+Y,IACAswY,GAAUtwY,EAASnH,EACnB03Y,GAAUvwY,EAASlH,GAS3B+lB,GAAWhmB,GALPw3B,EADuB,WAAvBlkC,EAAM2mD,aACIhnD,KAAK0kZ,wBAAwBrkZ,EAAOkjZ,EAAW5qV,EAAa6rV,EAAQC,GAGpEzkZ,KAAK2kZ,wBAAwBtkZ,EAAOmkZ,EAAQC,IAEpC13Y,EAAIw2Y,EAAUvtY,MAAQ,EAAGhJ,EAAGu3B,EAAQv3B,EAAIu2Y,EAAUxtY,OAAS,GACjF22E,EAAOrxF,UAAUioZ,0BAA0BhiZ,KAAKtB,KAAMK,EAAO0yB,GAEjE1yB,EAAM8hZ,QAAQ9hZ,EAAMs4D,aACpB34D,KAAK+8C,YAAYE,UAAU58C,EAAM08C,cAMzC,OAHA/8C,KAAKy5C,WAAakf,EAClB34D,KAAKoiZ,eACLpiZ,KAAK+8C,YAAYE,UAAUj9C,KAAK+1B,QACzB4iC,GAUX4rV,EAAOlpZ,UAAUqpZ,wBAA0B,SAAUrkZ,EAAOkjZ,EAAWqB,EAAY73Y,EAAGC,GAClF,OAAQ3M,EAAMysD,qBACV,IAAK,OACL,IAAK,OACD//C,GAAK1M,EAAM48B,OAAOzwB,KAClB,MACJ,IAAK,QACDO,GAAK63Y,EAAW5uY,MAAQutY,EAAUvtY,MAAQ3V,EAAM48B,OAAOxwB,MACvD,MACJ,IAAK,UACL,IAAK,SACDM,GAAK63Y,EAAW5uY,MAAQ,EAAIutY,EAAUvtY,MAAQ,EAGtD,OAAQ3V,EAAM0sD,mBACV,IAAK,OACL,IAAK,MACD//C,GAAK3M,EAAM48B,OAAOvwB,IAClB,MACJ,IAAK,SACDM,GAAK43Y,EAAW7uY,OAASwtY,EAAUxtY,OAAS1V,EAAM48B,OAAOtwB,OACzD,MACJ,IAAK,UACL,IAAK,SACDK,GAAK43Y,EAAW7uY,OAAS,EAAIwtY,EAAUxtY,OAAS,EAGxD,OAAShJ,EAAGA,EAAGC,EAAGA,IAQtBu3Y,EAAOlpZ,UAAUspZ,wBAA0B,SAAUtkZ,EAAO0M,EAAGC,GAC3D,OAAQ3M,EAAMysD,qBACV,IAAK,OACL,IAAK,OACD//C,GAAK1M,EAAM48B,OAAOzwB,KAClB,MACJ,IAAK,UACL,IAAK,SACDO,GAAK1M,EAAMs4D,YAAY3iD,MAAQ3V,EAAMgvD,MAAMtiD,EAC3C,MACJ,IAAK,QACDA,GAAK1M,EAAMs4D,YAAY3iD,MAAQ3V,EAAM48B,OAAOxwB,MAGpD,OAAQpM,EAAM0sD,mBACV,IAAK,OACL,IAAK,MACD//C,GAAK3M,EAAM48B,OAAOvwB,IAClB,MACJ,IAAK,UACL,IAAK,SACDM,GAAK3M,EAAMs4D,YAAY5iD,OAAS1V,EAAMgvD,MAAMriD,EAC5C,MACJ,IAAK,SACDA,GAAK3M,EAAMs4D,YAAY5iD,OAAS1V,EAAM48B,OAAOtwB,OAGrD,OAASI,EAAGA,EAAGC,EAAGA,IAEfu3Y,GACT3zV,I7V9LEzjB,IAEAixN,UAAa,4BAEbymJ,QAAW,sKAGXC,QAAW,iDAEXC,cAAiB,8BAEjBC,SAAY,6BAEZC,KAAQ,yPAIRC,KAAQ,oNAGRC,SAAY,2CAEZC,SAAY,2JAGZC,QAAW,yKAGXC,UAAa,iGAEbC,QAAW,mNAIXC,cAAiB,4EAEjBC,SAAY,8cAMZC,QAAW,sF8VjDX75T,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAS5DuoX,GAAsB,SAAUj5T,GAEhC,SAASi5T,IACL,OAAkB,OAAXj5T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAsC/D,OAxCA6rF,GAAU85T,EAAMj5T,GAIhBN,IACIllF,EAAS,KACVy+Y,EAAKtqZ,UAAW,UAAM,GACzB+wF,IACIllF,EAAS,WACVy+Y,EAAKtqZ,UAAW,2BAAuB,GAC1C+wF,IACIllF,EAAS,WACVy+Y,EAAKtqZ,UAAW,yBAAqB,GACxC+wF,IACIrkF,KAAYytN,KACbmwL,EAAKtqZ,UAAW,cAAU,GAC7B+wF,IACIllF,EAAS,KACVy+Y,EAAKtqZ,UAAW,aAAS,GAC5B+wF,IACIllF,EAAS,KACVy+Y,EAAKtqZ,UAAW,cAAU,GAC7B+wF,IACIrkF,KAAY26Y,KACbiD,EAAKtqZ,UAAW,aAAS,GAC5B+wF,IACIllF,EAAS,WACVy+Y,EAAKtqZ,UAAW,aAAS,GAC5B+wF,IACIllF,EAASizD,GAAeyrV,UACzBD,EAAKtqZ,UAAW,kBAAc,GACjC+wF,IACIllF,EAAS,KACVy+Y,EAAKtqZ,UAAW,gBAAY,GAC/B+wF,IACIllF,EAAS26C,GAAgB4pJ,OAC1Bk6M,EAAKtqZ,UAAW,mBAAe,GAClC+wF,IACIllF,KACDy+Y,EAAKtqZ,UAAW,eAAW,GACvBsqZ,GACTnlV,IAKExG,GAA2B,SAAU0yB,GAGrC,SAAS1yB,EAAU15D,EAAQ+Q,EAAU5K,EAAchI,GAC/C,OAAOiuF,EAAOprF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAKzE,OARA6rF,GAAU7xB,EAAW0yB,GAKrBN,IACIrkF,GAAUgF,EAAG,GAAKC,EAAG,IAAOmlC,KAC7B6nB,EAAU3+D,UAAW,cAAU,GAC3B2+D,GACT2rV,IChFE95T,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAS5DyoX,GAA2B,SAAUn5T,GAErC,SAASm5T,IACL,OAAkB,OAAXn5T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAUg6T,EAAWn5T,GAIrBN,IACIllF,EAAS,SACV2+Y,EAAUxqZ,UAAW,aAAS,GACjC+wF,IACIllF,EAAS,KACV2+Y,EAAUxqZ,UAAW,eAAW,GACnC+wF,IACIllF,EAAS,KACV2+Y,EAAUxqZ,UAAW,YAAQ,GAChC+wF,IACIllF,EAAS,SACV2+Y,EAAUxqZ,UAAW,sBAAkB,GACnCwqZ,GACTrlV,IAKEq5U,GAA4B,SAAUntT,GAEtC,SAASmtT,IACL,OAAkB,OAAXntT,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAyC/D,OA3CA6rF,GAAUguT,EAAYntT,GAItBN,IACIllF,EAAS,KACV2yY,EAAWx+Y,UAAW,eAAW,GACpC+wF,IACIllF,GAAS,IACV2yY,EAAWx+Y,UAAW,kBAAc,GACvC+wF,IACIllF,EAAS+5Y,GAAsB6E,kBAChCjM,EAAWx+Y,UAAW,mBAAe,GACxC+wF,IACIrkF,OAAQ5M,EAAW0qZ,KACpBhM,EAAWx+Y,UAAW,iBAAa,GACtC+wF,IACIllF,EAAS,KACV2yY,EAAWx+Y,UAAW,UAAM,GAC/B+wF,IACIllF,KACD2yY,EAAWx+Y,UAAW,aAAS,GAClC+wF,IACIllF,KACD2yY,EAAWx+Y,UAAW,cAAU,GACnC+wF,IACIrkF,GAAU6jD,YAAa,EAAGF,YAAa,cAAettB,KAAM,eAAiByvS,KAC9EgsE,EAAWx+Y,UAAW,aAAS,GAClC+wF,IACIllF,EAAS,WACV2yY,EAAWx+Y,UAAW,2BAAuB,GAChD+wF,IACIllF,EAAS,WACV2yY,EAAWx+Y,UAAW,yBAAqB,GAC9C+wF,IACIrkF,KAAYytN,KACbqkL,EAAWx+Y,UAAW,cAAU,GACnC+wF,IACIllF,EAAS,UACV2yY,EAAWx+Y,UAAW,YAAQ,GACjC+wF,IACIllF,KACD2yY,EAAWx+Y,UAAW,eAAW,GAC7Bw+Y,GACTr5U,IAKEulV,GAAiC,SAAUr5T,GAG3C,SAASq5T,EAAgBzlZ,EAAQ+Q,EAAU5K,EAAchI,GACrD,OAAOiuF,EAAOprF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAKzE,OARA6rF,GAAUk6T,EAAiBr5T,GAK3BN,IACIrkF,GAAUgF,EAAG,GAAKC,EAAG,IAAOmlC,KAC7B4zW,EAAgB1qZ,UAAW,cAAU,GACjC0qZ,GACTlM,IAKEmM,GAAgC,SAAUt5T,GAG1C,SAASs5T,EAAe1lZ,EAAQ+Q,EAAU5K,EAAchI,GACpD,OAAOiuF,EAAOprF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAWzE,OAdA6rF,GAAUm6T,EAAgBt5T,GAK1BN,IACIllF,EAAS,KACV8+Y,EAAe3qZ,UAAW,cAAU,GACvC+wF,IACIrkF,GAAUgF,EAAG,EAAGC,EAAG,GAAKmlC,KACzB6zW,EAAe3qZ,UAAW,oBAAgB,GAC7C+wF,IACIllF,EAAS,WACV8+Y,EAAe3qZ,UAAW,iBAAa,GACnC2qZ,GACTnM,I9VvFExsW,IACAj3B,EAAK,kCACL6vY,OAAU,gDACVzrG,OAAU,6BAEV/sQ,IACAy4W,UAAa,oDACb1rG,OAAU,4BACV2rG,OAAU,qEACVC,UAAa,iPAIbC,cAAiB,sCACjBC,eAAkB,wCAClBC,YAAe,6CACfC,MAAS,uBACTd,QAAW,+BACXO,OAAU,iDCnDVp4W,IAEA44W,QAAW,gEAEXC,SAAY,yFAEZC,SAAY,iEAEZC,kBAAqB,6EAErBC,WAAc,gOAGdC,SAAY,yQAIZC,WAAc,iOAGdC,eAAkB,oOAGlBC,KAAQ,8HAGRC,cAAiB,mXAIjBC,QAAW,+HAGXC,gBAAmB,6PAInBC,GAAM,6JAGNC,gBAAmB,wOAInBC,QAAW,uBAEXC,gBAAmB,qCAEnBC,MAAS,sBAETC,iBAAoB,yCAEpBC,wBAA2B,4GAG3B9N,WAAc,oFAEd+N,YAAe,gHAEfj6K,KAAQ,iCAERk6K,KAAQ,8CAERC,MAAS,0HAETC,YAAe,sWAKfC,QAAW,wPAGXC,YAAe,wQAIfC,UAAa,0FAEbC,WAAc,iH8VtFdt8T,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAQ5DgrX,GAA2B,SAAU17T,GAErC,SAAS07T,IACL,OAAkB,OAAX17T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA4C/D,OA9CA6rF,GAAUu8T,EAAW17T,GAIrBN,IACIllF,EAAS,SACVkhZ,EAAU/sZ,UAAW,aAAS,GACjC+wF,IACIllF,EAAS,UACVkhZ,EAAU/sZ,UAAW,YAAQ,GAChC+wF,IACIllF,EAAS,SACVkhZ,EAAU/sZ,UAAW,2BAAuB,GAC/C+wF,IACIllF,EAAS,SACVkhZ,EAAU/sZ,UAAW,yBAAqB,GAC7C+wF,IACIllF,EAAS,KACVkhZ,EAAU/sZ,UAAW,aAAS,GACjC+wF,IACIllF,EAAS,KACVkhZ,EAAU/sZ,UAAW,cAAU,GAClC+wF,IACIrkF,GAAUgF,EAAG,GAAKC,EAAG,GAAKmlC,KAC3Bi2W,EAAU/sZ,UAAW,cAAU,GAClC+wF,IACIllF,EAAS,YACVkhZ,EAAU/sZ,UAAW,mBAAe,GACvC+wF,IACIllF,EAAS,IACVkhZ,EAAU/sZ,UAAW,mBAAe,GACvC+wF,IACIrkF,KAAYytN,KACb4yL,EAAU/sZ,UAAW,cAAU,GAClC+wF,IACIllF,EAAS,KACVkhZ,EAAU/sZ,UAAW,gBAAY,GACpC+wF,IACIllF,EAAS,KACVkhZ,EAAU/sZ,UAAW,eAAW,GACnC+wF,IACIllF,EAAS,IACVkhZ,EAAU/sZ,UAAW,oBAAgB,GACxC+wF,IACIrkF,GAAUyE,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GAAK6oN,KACnD4yL,EAAU/sZ,UAAW,eAAW,GAC5B+sZ,GACT5nV,I7VtEEqrB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAO5DirX,GAAgC,SAAU37T,GAE1C,SAAS27T,IACL,OAAkB,OAAX37T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBA6rF,GAAUw8T,EAAgB37T,GAI1BN,IACIllF,EAAS,KACVmhZ,EAAehtZ,UAAW,eAAW,GACxC+wF,IACIllF,EAAS,YACVmhZ,EAAehtZ,UAAW,gBAAY,GACzC+wF,IACIllF,EAAS,UACVmhZ,EAAehtZ,UAAW,oBAAgB,GAC7C+wF,IACIllF,GAAS,IACVmhZ,EAAehtZ,UAAW,sBAAkB,GAC/C+wF,IACIllF,EAAS,SACVmhZ,EAAehtZ,UAAW,aAAS,GACtC+wF,IACIllF,EAAS,SACVmhZ,EAAehtZ,UAAW,cAAU,GACvC+wF,IACIllF,KACDmhZ,EAAehtZ,UAAW,iBAAa,GACnCgtZ,GACT7nV,I8VhDEqrB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAU5DkrX,GAA0B,SAAU57T,GAEpC,SAAS47T,IACL,OAAkB,OAAX57T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAmC/D,OArCA6rF,GAAUy8T,EAAU57T,GAIpBN,IACIllF,EAAS,KACVohZ,EAASjtZ,UAAW,UAAM,GAC7B+wF,IACIllF,GAAU,IACXohZ,EAASjtZ,UAAW,cAAU,GACjC+wF,IACIrkF,KAAYytN,KACb8yL,EAASjtZ,UAAW,cAAU,GACjC+wF,IACIllF,GAAS,IACVohZ,EAASjtZ,UAAW,eAAW,GAClC+wF,IACI/jF,KAAe2xD,KAChBsuV,EAASjtZ,UAAW,aAAS,GAChC+wF,IACIllF,GAAS,IACVohZ,EAASjtZ,UAAW,kBAAc,GACrC+wF,IACIrkF,KAAYsgZ,KACbC,EAASjtZ,UAAW,eAAW,GAClC+wF,IACIrkF,KAAYqgZ,KACbE,EAASjtZ,UAAW,kBAAc,GACrC+wF,IACIrkF,KAAYqgZ,KACbE,EAASjtZ,UAAW,oBAAgB,GACvC+wF,IACIllF,GAAS,IACVohZ,EAASjtZ,UAAW,yBAAqB,GAC5C+wF,IACIllF,KACDohZ,EAASjtZ,UAAW,eAAW,GAC3BitZ,GACT9nV,I5V/DEqrB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAoB5DmrX,GAAmB,SAAUxrZ,GAC7B,OAAQA,EAAI2J,MACR,IAAK,OACD,OAAO8hZ,GACX,QACI,OAAOC,KAGfC,GAAiB,SAAU3rZ,GAC3B,OAAQA,EAAI2J,MACR,IAAK,WACD,OAAOiyC,GACX,IAAK,SACD,OAAOD,GACX,IAAK,aACD,OAAOtF,GACX,QACI,OAAOuF,KAMfgwW,GAA2B,SAAUj8T,GAErC,SAASi8T,IACL,OAAkB,OAAXj8T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBA6rF,GAAU88T,EAAWj8T,GAIrBN,IACIllF,EAAS,KACVyhZ,EAAUttZ,UAAW,aAAS,GACjC+wF,IACIllF,EAAS,KACVyhZ,EAAUttZ,UAAW,cAAU,GAClC+wF,IACIllF,EAAS,UACVyhZ,EAAUttZ,UAAW,aAAS,GACjC+wF,IACIrkF,GAAUq2B,KAAM,QAASstB,YAAa,QAASE,YAAa,GAAK82V,KAClEiG,EAAUttZ,UAAW,aAAS,GACjC+wF,IACIrkF,GAAUgF,EAAG,EAAGC,EAAG,IAAOmlC,KAC3Bw2W,EAAUttZ,UAAW,aAAS,GACjC+wF,IACIllF,EAAS,KACVyhZ,EAAUttZ,UAAW,gBAAY,GAC7BstZ,GACTnoV,IAEEooV,GAAwB,SAAUl8T,GAElC,SAASk8T,IACL,OAAkB,OAAXl8T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAU+8T,EAAQl8T,GAIlBN,IACIllF,EAAS,IACV0hZ,EAAOvtZ,UAAW,aAAS,GAC9B+wF,IACIllF,EAAS,IACV0hZ,EAAOvtZ,UAAW,gBAAY,GAC1ButZ,GACTpoV,IAKEioV,GAAgC,SAAU/7T,GAE1C,SAAS+7T,IACL,OAAkB,OAAX/7T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAK/D,OAPA6rF,GAAU48T,EAAgB/7T,GAI1BN,IACIllF,EAAS,SACVuhZ,EAAeptZ,UAAW,YAAQ,GAC9BotZ,GACTjoV,IAKEgoV,GAA0B,SAAU97T,GAEpC,SAAS87T,IACL,OAAkB,OAAX97T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAU28T,EAAU97T,GAIpBN,IACIllF,EAAS,aACVshZ,EAASntZ,UAAW,YAAQ,GAC/B+wF,IACIllF,EAAS,WACVshZ,EAASntZ,UAAW,gBAAY,GACnC+wF,IACIllF,EAAS,YACVshZ,EAASntZ,UAAW,eAAW,GAClC+wF,IACIllF,EAAS,YACVshZ,EAASntZ,UAAW,mBAAe,GAC/BmtZ,GACTC,IAEEI,GAAkC,SAAUn8T,GAG5C,SAASm8T,EAAiBvoZ,EAAQ+Q,EAAU5K,EAAchI,GACtD,IAAIsB,EAAQ2sF,EAAOprF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAE1E,OADAD,EAAMk3B,UACCl3B,EAKX,OAVA8rF,GAAUg9T,EAAkBn8T,GAO5BN,IACIllF,EAAS,aACV2hZ,EAAiBxtZ,UAAW,YAAQ,GAChCwtZ,GACTroV,IAEE7nB,GAAiC,SAAU+zC,GAE3C,SAAS/zC,IACL,OAAkB,OAAX+zC,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAK/D,OAPA6rF,GAAUlzC,EAAiB+zC,GAI3BN,IACIrkF,GAAUgF,EAAG,EAAGC,EAAG,GAAKmlC,KACzBwG,EAAgBt9C,UAAW,aAAS,GAChCs9C,GACTkwW,IAEEnwW,GAA+B,SAAUg0C,GAEzC,SAASh0C,IACL,OAAkB,OAAXg0C,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAUnzC,EAAeg0C,GAIzBN,IACIrkF,GAAUgF,EAAG,EAAGC,EAAG,GAAKmlC,KACzBuG,EAAcr9C,UAAW,cAAU,GACtC+wF,IACIrkF,GAAUgF,EAAG,EAAGC,EAAG,GAAKmlC,KACzBuG,EAAcr9C,UAAW,cAAU,GACtC+wF,IACIrkF,GAAU4Z,MAAO,EAAG2wB,SAAU,GAAKs2W,KACpClwW,EAAcr9C,UAAW,eAAW,GACvC+wF,IACIrkF,GAAU4Z,MAAO,EAAG2wB,SAAU,GAAKs2W,KACpClwW,EAAcr9C,UAAW,eAAW,GAChCq9C,GACTC,IAEEvF,GAAmC,SAAUs5C,GAE7C,SAASt5C,IACL,OAAkB,OAAXs5C,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAUz4C,EAAmBs5C,GAI7BN,IACIllF,EAAS,OACVksC,EAAkB/3C,UAAW,cAAU,GAC1C+wF,IACIllF,EAAS,OACVksC,EAAkB/3C,UAAW,iBAAa,GACtC+3C,GACTy1W,IA2HE3qW,GAA2B,SAAUwuC,GAGrC,SAASxuC,EAAU59C,EAAQ+Q,EAAU5K,EAAchI,GAC/C,IAAIsB,EAAQ2sF,EAAOprF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAK1E,OAHAD,EAAM46D,SAAW,GAEjB56D,EAAM+oZ,WACC/oZ,EAopBX,OA5pBA8rF,GAAU3tC,EAAWwuC,GAYrBxuC,EAAU7iD,UAAUgtP,KAAO,SAAUt6M,GAC5B/tC,KAAKsD,KACNtD,KAAKsD,GAAKqzD,MAEd,IAAIoyV,EACAnuY,EAAY,IAAI2pY,GAChBh6W,EAAU,IAAIsP,GAClBtP,EAAQjnC,GAAKtD,KAAKsD,GAAK,QACvB,IAAIqrD,EAAe,IAAI9U,GACnBqD,EAAkB,IAAIrD,GAC1BtP,EAAUvqC,KAAKgpZ,kBAAkBhpZ,KAAMuqC,GACvC,IAAIxU,EACAkB,KAQJ,OAPAA,EAASj3B,KAAKipZ,mBAAmBjpZ,KAAK0G,MACtCuwB,EAASj3B,KAAK+uD,eAAe/uD,KAAMi3B,GACnClB,EAASR,GAAK+vB,SAASruB,GACvBrc,EAAU5E,MAAQ+f,EAAO/f,MACzB4E,EAAU7E,OAASggB,EAAOhgB,OAC1B6E,EAAU/O,QAAUkqB,EAAOhpB,EAAI6N,EAAUy0C,MAAMtiD,EAAIgpB,EAAO/f,MAC1D4E,EAAU3O,QAAU8pB,EAAO/oB,EAAI4N,EAAUy0C,MAAMriD,EAAI+oB,EAAOhgB,OAClD/V,KAAKm5B,MAAMzyB,MACf,IAAK,OACD,OAAQ1G,KAAKm5B,MAAM+vX,MACf,IAAK,WACDH,EAAc/oZ,KAAKmpZ,sBACnB,MACJ,IAAK,eACDJ,EAAc,IAAIlvW,IACN/iB,SAAU,EACtB92B,KAAKopZ,yBACL,MACJ,IAAK,UACDL,EAAc/oZ,KAAKqpZ,qBACnB9+W,EAAUvqC,KAAKgpZ,kBAAkBhpZ,KAAMuqC,GACvCvqC,KAAKspZ,oBAAoBtpZ,KAAM+oZ,IAK/C,IAAIQ,EAAcvpZ,KAAKklD,mBACvB,GAAkB,WAAdllD,KAAK0G,KAAmB,CACxB,IAAIooD,EAAe9uD,KAAKypC,SAAS,GAC7BmN,EAAc52C,KAAKypC,SAASzpC,KAAKypC,SAAShtC,OAAS,GACvD8sZ,GAAgBp3W,GAAMC,aAAawE,EAAY5N,QAA+B4N,EAAYwO,aAAjCxO,EAAY5N,OAChEmJ,GAAMC,aAAa0c,EAAavT,QAAgCuT,EAAa3J,aAAnC2J,EAAavT,QAEhE,IACI2N,EAAiBnb,EAAqB,eACxB/tC,KAAKivC,eAAgBjvC,KAAKivC,cAAcvqC,MAAMknD,YAQhE,GAPA+C,EAAe3uD,KAAKwpZ,oBAAoBvyX,EAAO,GAAIsyX,EAAY,GAAIvpZ,KAAKg9C,iBAAiB,EAAMkM,GAC/FhM,EAAkBl9C,KAAKwpZ,oBAAoBvyX,EAAOA,EAAOx6B,OAAS,GAAI8sZ,EAAYA,EAAY9sZ,OAAS,GAAIuD,KAAKk9C,iBAAiB,EAAOgM,GACxIyF,EAAarrD,GAAKtD,KAAKsD,GAAK,UAC5B45C,EAAgB55C,GAAKtD,KAAKsD,GAAK,UAC/BinC,EAAQ7lC,MAAQ1E,KAAK0E,MAErB6lC,EAAQ7lC,MAAY,KAAI,mBACDvJ,IAAnB+tD,EAA8B,CAE9B,IAAIugW,EAAiBvgW,EAAelpD,KAAM+tC,GAC1CxD,EAAQypB,YAAcy1V,GAAkCzpZ,KAAKsD,GAEjEsX,EAAUlW,MAAMgnD,YAAc,cAC9B9wC,EAAUlW,MAAM05B,KAAO,cACvBxjB,EAAUlW,MAAMknD,YAAc,EAC9BhxC,EAAUR,UAAYmwB,EAASokB,EAAczR,GAC7CtiC,EAAUtX,GAAKtD,KAAKsD,QACAnI,IAAhB4tZ,GACAnuY,EAAUR,SAAS5V,KAAKukZ,GAE5BnuY,EAAU/O,QAAU0+B,EAAQ1+B,QAC5B+O,EAAU3O,QAAUs+B,EAAQt+B,QAC5B2O,EAAU5E,MAAQu0B,EAAQv0B,MAC1B4E,EAAU7E,OAASw0B,EAAQx0B,OAC3B,IAAK,IAAI5Z,EAAI,EAAG6D,KAAKowD,YAA2Bj0D,EAAI6D,KAAKowD,YAAY3zD,OAAQN,IACzEye,EAAUR,SAAS5V,KAAKxE,KAAK0pZ,qBAAqB1pZ,KAAKowD,YAAYj0D,GAAI6D,KAAKklD,mBAAoBnvB,EAAQmzB,IAG5G,OADAlpD,KAAK+R,QAAU6I,EACRA,GAEXsjC,EAAU7iD,UAAU8tZ,oBAAsB,WACtC,IAEIQ,EAFAp/W,EAAU,IAAIsP,GACd+vW,EAAU,IAAI/vW,GAMlB,GAJ8B,WAAzB75C,KAAKm5B,MAAc,UAAgC,WAAdn5B,KAAK0G,OAC3C1G,KAAKk9C,gBAAgB/jB,MAAQ,QAC7Bn5B,KAAKk9C,gBAAgBx4C,MAAM05B,KAAO,SAER,YAAzBp+B,KAAKm5B,MAAc,SAAiB,CACrCoR,EAAUvqC,KAAKgpZ,kBAAkBhpZ,KAAMuqC,GAEvC,IAAK,IADDg/W,EAAcvpZ,KAAKklD,mBACdzhC,EAAI,EAAGA,EAAI8lY,EAAY9sZ,OAAS,EAAGgnB,IACxChnB,QAAkBuD,KAAKsyC,SAASi3W,EAAY9lY,GAAI8lY,EAAY9lY,EAAI,IAChEkmY,EAAc3pZ,KAAK8zV,SAASy1D,EAAY9lY,GAAI8lY,EAAY9lY,EAAI,IAC5DmmY,EAAQptZ,KAAOmtZ,EAAY,GAC3BC,EAAQtmZ,GAAKtD,KAAKsD,GAAK,IAAOtD,KAAKm5B,MAAc,SACjDywX,EAAQ/9Y,QAAU89Y,EAAY,GAAG58Y,EACjC68Y,EAAQ39Y,QAAU09Y,EAAY,GAAG38Y,EACjC48Y,EAAQtjW,YAAc,GACtBsjW,EAAQv8Y,UAAY6zY,GAAUM,KAElCxhZ,KAAKk9C,gBAAgB/jB,MAAQ,QAC7Bn5B,KAAKk9C,gBAAgBx4C,MAAM05B,KAAO,QAUtC,MAR8B,gBAAzBp+B,KAAKm5B,MAAc,WACpBn5B,KAAKk9C,gBAAgB/jB,MAAQ,QAC7Bn5B,KAAKg9C,gBAAgB7jB,MAAQ,UAC7Bn5B,KAAKg9C,gBAAgBt4C,MAAM05B,KAAO,QAClCp+B,KAAKk9C,gBAAgBx4C,MAAM05B,KAAO,QAClCp+B,KAAKg9C,gBAAgBhnC,MAAQ,GAC7BhW,KAAKg9C,gBAAgBjnC,OAAS,IAE3B6zY,GAEX1rW,EAAU7iD,UAAU+tZ,uBAAyB,WACR,YAA5BppZ,KAAKm5B,MAAiB,cACvBn5B,KAAKk9C,gBAAgB/jB,MAAQ,QAC7Bn5B,KAAKk9C,gBAAgBx4C,MAAM05B,KAAO,SAEL,gBAA5Bp+B,KAAKm5B,MAAiB,cACvBn5B,KAAK0E,MAAMinD,gBAAkB,MAC7B3rD,KAAKk9C,gBAAgBx4C,MAAM05B,KAAO,QAClCp+B,KAAKk9C,gBAAgB/jB,MAAQ,SAEA,kBAA5Bn5B,KAAKm5B,MAAiB,cACvBn5B,KAAK0E,MAAMinD,gBAAkB,MAC7B3rD,KAAKk9C,gBAAgB/jB,MAAQ,QAC7Bn5B,KAAKk9C,gBAAgBx4C,MAAM05B,KAAO,QAClCp+B,KAAKg9C,gBAAgB7jB,MAAQ,QAC7Bn5B,KAAKg9C,gBAAgBt4C,MAAM05B,KAAO,QAClCp+B,KAAKg9C,gBAAgBhnC,MAAQ,EAC7BhW,KAAKg9C,gBAAgBjnC,OAAS,KAGtCmoC,EAAU7iD,UAAUguZ,mBAAqB,WACrC,IAAIQ,EAAiB,IAAIhwW,GAiBzB,OAhBA75C,KAAK0E,MAAMinD,gBAAkB,MAC7B3rD,KAAKk9C,gBAAgB/jB,MAAQ,QAC7Bn5B,KAAKk9C,gBAAgBlnC,MAAQ,EAC7BhW,KAAKk9C,gBAAgBnnC,OAAS,GAC9B/V,KAAKg9C,gBAAgB7jB,MAAQ,SACC,sBAAxBn5B,KAAKm5B,MAAa,SACM,yBAAxBn5B,KAAKm5B,MAAa,UACpB0wX,EAAevmZ,GAAKtD,KAAKsD,GAAK,IAAOtD,KAAKm5B,MAAa,QACvD0wX,EAAe7zY,MAAQ,GACvB6zY,EAAe9zY,OAAS,GACxB8zY,EAAertZ,KAAO,yDACtBqtZ,EAAe/8V,oBAAsB,SACrC+8V,EAAe98V,kBAAoB,SACnC88V,EAAex8Y,UAAY6zY,GAAUM,KACrCqI,EAAenlZ,MAAM05B,KAAgC,yBAAxBp+B,KAAKm5B,MAAa,QAA+B,YAAc,SAEzF0wX,GAGX3rW,EAAU7iD,UAAUi3C,SAAW,SAAUssR,EAAKC,GAC1C,OAAOxyT,KAAKQ,KAAKR,KAAKs9D,IAAIk1P,EAAI9xT,EAAI6xT,EAAI7xT,EAAG,GAAKV,KAAKs9D,IAAIk1P,EAAI7xT,EAAI4xT,EAAI5xT,EAAG,KAE1EkxC,EAAU7iD,UAAUy4V,SAAW,SAAUg2D,EAAUC,GAC/C,IAAIC,GAAmBj9Y,EAAG+8Y,EAAS/8Y,EAAGC,EAAG88Y,EAAS98Y,GAC9CslC,EAAWtyC,KAAKsyC,SAASw3W,EAAUC,GACvCz3W,EAAWjmC,KAAK8T,IAAI,GAAImyB,EAAW,GACnC,IAAI3wB,EAAQs3B,GAAU6wW,EAAUC,GAC5BE,EAAgB93W,GAAM9kC,WAAYN,EAAGi9Y,EAAej9Y,EAAGC,EAAGg9Y,EAAeh9Y,GAAK2U,EAAO2wB,GACrF43W,EAAc/3W,GAAM9kC,WAAYN,EAAGk9Y,EAAcl9Y,EAAGC,EAAGi9Y,EAAcj9Y,GAAK2U,GAAQ,IAClFwoY,EAAYh4W,GAAM9kC,WAAYN,EAAGm9Y,EAAYn9Y,EAAGC,EAAGk9Y,EAAYl9Y,GAAK2U,EAAO,IAE/E,OADW,IAAMuoY,EAAYn9Y,EAAI,IAAMm9Y,EAAYl9Y,EAAI,KAAOm9Y,EAAUp9Y,EAAI,IAAMo9Y,EAAUn9Y,EAC9Ei9Y,IAGlB/rW,EAAU7iD,UAAUquZ,qBAAuB,SAAUriW,EAAYpwB,EAAQlB,EAAQmzB,GAC7E7B,EAAW/jD,GAAK+jD,EAAW/jD,IAAMqzD,KACjC,IAAIyzV,EAAU,IAAIj+V,GAClBi+V,EAAQjsW,YAAckJ,EAAWlJ,YACjCisW,EAAQtzX,QAAUuwB,EAAW1iD,WAC7BylZ,EAAQt9V,oBAAsBzF,EAAWyF,oBACzCs9V,EAAQr9V,kBAAoB1F,EAAW0F,uBAClB5xD,IAAjB46B,EAAO/f,QACPo0Y,EAAQp0Y,OAASqxC,EAAWrxC,OAAS+f,EAAO/f,OAASqxC,EAAWpqB,OAAOzwB,KAAO66C,EAAWpqB,OAAOxwB,OAEpG29Y,EAAQntX,OAASoqB,EAAWpqB,OAC5BmtX,EAAQ9mZ,GAAKtD,KAAKsD,GAAK,IAAM+jD,EAAW/jD,GACnB,IAAjByyB,EAAO/f,QACP+f,EAAO/f,MAAQhW,KAAK0E,MAAMknD,aAER,IAAlB71B,EAAOhgB,SACPggB,EAAOhgB,OAAS/V,KAAK0E,MAAMknD,aAE/Bw+V,EAAQxvX,QAAUysB,EAAWzsB,QAC7BwvX,EAAQ1lZ,MAAQ2iD,EAAW3iD,MAE3B,IAAI+kZ,EACAz1V,EAAc/P,GAAYiF,GAO9B,OANI8K,IACAy1V,EAAiBz1V,EAAY3M,EAAYrnD,OAE7CoqZ,EAAQp2V,YAAcy1V,GAAkCW,EAAQ9mZ,GAChEtD,KAAKqqZ,iBAAiBhjW,EAAYpwB,EAAQlB,EAAQq0X,GAClDA,EAAQ1lZ,MAAMk8B,aAAe,OACtBwpX,GAGXlsW,EAAU7iD,UAAUgvZ,iBAAmB,SAAUhjW,EAAYpwB,EAAQlB,EAAQJ,GACzE,IAAI65B,EACA2zV,EACA11V,EACAtF,EACAD,EACApB,EACAwjW,GAAev9Y,EAAG,EAAGC,EAAG,GAC5Bq6C,EAAWpqB,QAAWzwB,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GACzDgpB,EAAYy2B,qBACZz2B,EAAY3f,OAASqxC,EAAWrxC,OAAS+f,EAAO/f,OAAS2f,EAAYsH,OAAOzwB,KAAOmpB,EAAYsH,OAAOxwB,MAEtG02Y,GADA3zV,EAAepI,GAAsBnwB,EAAQowB,EAAYtxB,IACjC5C,MACH,IAAjB4C,EAAO/f,QACP+f,EAAO/f,MAAQhW,KAAK0E,MAAMknD,aAER,IAAlB71B,EAAOhgB,SACPggB,EAAOhgB,OAAS/V,KAAK0E,MAAMknD,aAE/B9E,GAAgB/5C,GAAKo2Y,EAASp2Y,EAAIgpB,EAAOhpB,GAAKgpB,EAAO/f,MAAQhJ,GAAKm2Y,EAASn2Y,EAAI+oB,EAAO/oB,GAAK+oB,EAAOhgB,QAClGu0Y,EAAWv9Y,EAAIgpB,EAAO/f,MAAQ8wC,EAAY/5C,EAC1Cu9Y,EAAWt9Y,EAAI+oB,EAAOhgB,OAAS+wC,EAAY95C,EAE3Cm7C,GADAsF,EAAQxF,GAAqBZ,EAAYmI,EAAa7tC,MAAOsV,IAC9CkxB,OACfD,EAASuF,EAAMvF,OACf,IAAIqiW,EACAC,EACW,SAAXriW,GACAoiW,EAAU,OACVD,EAAWv9Y,GAAKs6C,EAAWojW,aAAa19Y,GAExB,UAAXo7C,GACLoiW,EAAU,QACVD,EAAWv9Y,GAAKs6C,EAAWojW,aAAa19Y,GAExB,WAAXo7C,IACLoiW,EAAU,UAEC,QAAXriW,GACAsiW,EAAS,MACTF,EAAWt9Y,GAAKq6C,EAAWojW,aAAaz9Y,GAExB,WAAXk7C,GACLsiW,EAAS,SACTF,EAAWt9Y,GAAKq6C,EAAWojW,aAAaz9Y,GAExB,WAAXk7C,IACLsiW,EAAS,UAEb70X,EAAYm3B,oBAAsBy9V,EAClC50X,EAAYo3B,kBAAoBy9V,EAChC70X,EAAYqsX,6BAA6BsI,EAAWv9Y,EAAGu9Y,EAAWt9Y,EAAG,YACrE2oB,EAAYqxB,aAAe,SAG/B9I,EAAU7iD,UAAU4tZ,mBAAqB,SAAUviZ,EAAMuwB,EAAQ6X,GACjDziC,KAAKE,IAAIvM,KAAKgvC,YAAYjiC,EAAI/M,KAAKi3C,YAAYlqC,GAC9CV,KAAKE,IAAIvM,KAAKgvC,YAAYhiC,EAAIhN,KAAKi3C,YAAYjqC,GAD5D,IAGI09Y,EADK77W,GAAoB7uC,KAAM8uC,GACZztC,MAAM,GAK7B,OAJIqpZ,GAAaA,EAAUjuZ,OAAS,IAChCuD,KAAKgvC,YAAc07W,EAAU,GAC7B1qZ,KAAKi3C,YAAcyzW,EAAUA,EAAUjuZ,OAAS,IAE7CiuZ,GAGXxsW,EAAU7iD,UAAUsvZ,cAAgB,SAAU5yW,EAAW9gB,EAAQ2zX,GAC7D,IAAIz3X,GAAUpmB,EAAG,EAAGC,EAAG,GACnBzP,GAAUwP,EAAG,EAAGC,EAAG,GACnBgS,GAAQjS,EAAG,EAAGC,EAAG,GACjBvQ,EAASw6B,EAAOx6B,OACpBc,EAASqtZ,EAAgC3zX,EAAO,GAA5BA,EAAOx6B,EAAS,GACpCuiB,EAAO4rY,EAAgC3zX,EAAO,GAA5BA,EAAOx6B,EAAS,GAClC,IAAIoF,EAAMswC,GAAM+F,eAAe36C,EAAOyhB,GACtCnd,EAAe,IAARA,EAAa,EAAIA,EACxB,IAAImU,EAAQ+hC,EAAUrzC,MAAMknD,YAAc,EAC1Cz4B,EAAMpmB,EAAKV,KAAK4xB,MAAM1gC,EAAMwP,EAAIiJ,GAASgJ,EAAIjS,EAAIxP,EAAMwP,GAAKlL,GAC5DsxB,EAAMnmB,EAAKX,KAAK4xB,MAAM1gC,EAAMyP,EAAIgJ,GAASgJ,EAAIhS,EAAIzP,EAAMyP,GAAKnL,GAC5D,IAAI+pD,EAAc,EACdrrD,EAAOqqZ,EAAW7yW,EAAU9I,cAAgB8I,EAAUvI,cAQ1D,OAPIjvC,IACAqrD,EAAcrrD,EAAKmE,MAAMknD,cAExBg/V,GAAgD,SAApC7yW,EAAUiF,gBAAgB7jB,QACrCyxX,GAAgD,SAApC7yW,EAAUmF,gBAAgB/jB,SACxChG,EAAQgf,GAAMuuW,YAAYvtX,EAAOnU,GAAK,EAAO4sC,EAAc,IAExDz4B,GAGX+qB,EAAU7iD,UAAU0zD,eAAiB,SAAUhX,EAAWtE,GAOtD,MANwC,SAApCsE,EAAUiF,gBAAgB7jB,QAC1Bsa,EAAI,GAAKzzC,KAAK2qZ,cAAc5yW,EAAWtE,GAAK,IAER,SAApCsE,EAAUmF,gBAAgB/jB,QAC1Bsa,EAAIA,EAAIh3C,OAAS,GAAKuD,KAAK2qZ,cAAc5yW,EAAWtE,GAAK,IAEtDA,GAGXyK,EAAU7iD,UAAUwzD,qBAAuB,SAAU9W,EAAW9gB,EAAQj2B,GACpE,IAAI6pZ,EACA90X,EAAS,IAAIR,GAGjB,GAFAs1X,EACc7qZ,KAAK8qZ,eAAe/yW,EAAW9gB,GACtB,WAAnB8gB,EAAUrxC,MACV,GAAI1G,KAAKypC,SAAShtC,OAAS,EACvB,IAAK,IAAIN,EAAI,EAAGA,EAAI6D,KAAKypC,SAAShtC,OAAQN,IAAK,CAC3C,IAAIouC,EAAUvqC,KAAKypC,SAASttC,GACxB4uZ,EAAmBhzW,EAAUtO,SAASttC,GACtCo/C,EAAUpJ,GAAMC,aAAa7H,EAAQgR,QAAoCwvW,EAAiB5lW,aAA3C4lW,EAAiBxvW,OAChEvS,EAAUmJ,GAAMC,aAAa7H,EAAQvB,QAAoC+hX,EAAiB3lW,aAA3C2lW,EAAiB/hX,OACpEjT,EAAOknB,UAAUM,GAAgBhT,EAAQtT,OAAO,GAAIskB,EAAQvS,EAAQuB,EAAQtT,OAAO,GAAI8gB,UAK/FhiB,EAASR,GAAK+vB,SAASruB,GAa3B,OAXAj2B,EAAQgV,MAAQ+f,EAAO/f,MACvBhV,EAAQ+U,OAASggB,EAAOhgB,OACxB/U,EAAQ6K,QAAUkqB,EAAOhpB,EAAI/L,EAAQgV,MAAQ,EAC7ChV,EAAQiL,QAAU8pB,EAAO/oB,EAAIhM,EAAQ+U,OAAS,EAC9C/U,EAAQxE,KAAOquZ,EACX9yW,EAAUhmC,UACVgmC,EAAUhmC,QAAQlG,QAAU7K,EAAQ6K,QACpCksC,EAAUhmC,QAAQ9F,QAAUjL,EAAQiL,QACpC8rC,EAAUhmC,QAAQiE,MAAQ+f,EAAO/f,MACjC+hC,EAAUhmC,QAAQgE,OAASggB,EAAOhgB,QAE/B/U,GAGXk9C,EAAU7iD,UAAU2tZ,kBAAoB,SAAUjxW,EAAWizW,GACzD,IAEI/zX,KAKJ,OAJAA,EAASj3B,KAAKipZ,mBAAmBlxW,EAAUrxC,MAC3C1G,KAAKklD,mBAAqBjuB,EAC1B+zX,EAAerJ,YAAa,EAC5BqJ,EAAiBhrZ,KAAK6uD,qBAAqB9W,EAAW9gB,EAAQ+zX,IAIlE9sW,EAAU7iD,UAAUmuZ,oBAAsB,SAAU1iW,EAAamkW,EAAe19W,EAAWq9W,EAAU1hW,GACjG,IAAIgiW,EAAS,IAAIrxW,GAKjB,GAJAqxW,EAEO79Y,UAAY6zY,GAAUM,KAC7BxhZ,KAAKgvD,uBAAuBk8V,EAAQpkW,EAAamkW,EAAe19W,QACzCpyC,IAAnB+tD,EAA8B,CAE9B,IAAIugW,EAAiBvgW,EAAe3b,EAAWvtC,MAC/CkrZ,EAAOl3V,YAAcy1V,GACc,SAEvC,OAAOyB,GAEXhtW,EAAU7iD,UAAU8vZ,WAAa,SAAUpzW,EAAW76B,EAAM0a,GACxD,IAAI4V,EAAWtwB,EACf,GAAI66B,EAAU+wW,QAAQrsZ,OAAS,EAC3B,GAAuB,aAAnBs7C,EAAUrxC,KACV,IAAK,IAAIywJ,EAAI,EAAGA,EAAIp/G,EAAU+wW,QAAQrsZ,OAAQ06J,IAAK,EAC3Ci0P,EAASrzW,EAAU+wW,QAAQ3xP,IACnBywL,WACRp6S,GAAY,KAAO49W,EAAO5tW,WAAWzwC,EAAI,IAAMq+Y,EAAO5tW,WAAWxwC,EACjEwgC,GAAY49W,EAAOluY,KACnBkuY,EAAOxjE,UAAW,QAIzB,GAAuB,eAAnB7vS,EAAUrxC,KACf,IAASywJ,EAAI,EAAGA,EAAIp/G,EAAU+wW,QAAQrsZ,OAAQ06J,IAAK,CAC/C,IAAIi0P,GAAAA,EAASrzW,EAAU+wW,QAAQ3xP,IACpBk0P,oBAAsBzzX,IACxBwzX,EAAOxjE,UACJwjE,EAAOC,oBAAsBzzX,IAC7B4V,GAAY,KAAO49W,EAAO5tW,WAAWzwC,EAAI,IAAMq+Y,EAAO5tW,WAAWxwC,EACjEwgC,GAAY49W,EAAOluY,KACnBkuY,EAAOxjE,UAAW,IAO1C,OAAOp6S,GAGX0Q,EAAU7iD,UAAU2zD,uBAAyB,SAAUhuD,EAASwqC,EAAIy/W,EAAe19W,GAC/E,IAAI+9W,EACA3pY,EACJ3gB,EAAQ6K,QAAU2/B,EAAGz+B,EACrB/L,EAAQiL,QAAUu/B,EAAGx+B,EACrB2U,EAAQwwB,GAAM8G,UAAUzN,EAAIy/W,GAC5BK,EAAUh+W,GAAkBC,EAAUpU,MAAOoU,GAC7C,IAAIpe,EAAO,IAAIM,GAAK8d,EAAUv3B,MAAOu3B,EAAUx3B,QAC/C/U,EAAQquD,MAAMtiD,EAAIwgC,EAAU8hB,MAAMtiD,EAClC/L,EAAQquD,MAAMriD,EAAIugC,EAAU8hB,MAAMriD,EAClChM,EAAQ0D,MAAQ6oC,EAAU7oC,MAC1B1D,EAAQslD,YAAc3kC,EACtB3gB,EAAQxE,KAAO8uZ,EACftqZ,EAAQgV,MAAQmZ,EAAKnZ,MACrBhV,EAAQ+U,OAASoZ,EAAKpZ,QAG1BmoC,EAAU7iD,UAAUyvZ,eAAiB,SAAU/yW,EAAW9gB,GAOtD,IANA,IACIs0X,EACAvsY,EACAwsY,EAHAtuY,EAAO,GAIPu2B,KACAhwB,EAAI,EACDA,EAAIwT,EAAOx6B,QACdg3C,EAAIjvC,MAAOuI,EAAGkqB,EAAOxT,GAAG1W,EAAGC,EAAGiqB,EAAOxT,GAAGzW,IACxCyW,IAEJ,IAAK,IAAI+uD,EAAI,EAAGA,EAAIz6B,EAAU+wW,QAAQrsZ,OAAQ+1E,IAAK,CAClCz6B,EAAU+wW,QAAQt2U,GACxBo1Q,UAAW,EAGtB,GADAn0S,EAAMzzC,KAAK+uD,eAAehX,EAAWtE,GACjCzzC,KAAK+oC,aAAe,GAAmB,WAAd/oC,KAAK0G,KAC9B,IAAK,IAAIu+T,EAAM,EAAGA,EAAMxxR,EAAIh3C,OAAS,EAAGwoU,IAAO,CAC3CsmF,EAAQ93W,EAAIwxR,GACA,IAARA,IACA/nT,EAAO,IAAMquY,EAAMx+Y,EAAI,IAAMw+Y,EAAMv+Y,GAEvC,IAAI+nC,EAAY5C,GAAM+F,eAAezE,EAAIwxR,GAAMxxR,EAAIwxR,EAAM,IACrDlwR,EAAY,IAGJ/1B,EAFJimT,EAAMxxR,EAAIh3C,OAAS,EACfs4C,EAAgC,EAApB/0C,KAAK+oC,aACXoJ,GAAMuuW,YAAYjtW,EAAIwxR,GAAMxxR,EAAIwxR,EAAM,IAAI,EAAOlwR,EAAY,GAG7D5C,GAAMuuW,YAAYjtW,EAAIwxR,GAAMxxR,EAAIwxR,EAAM,IAAI,EAAOjlU,KAAK+oC,cAI1D0K,EAAIwxR,EAAM,GAEhBA,EAAM,IACFlwR,EAAgC,EAApB/0C,KAAK+oC,cACjByiX,EAAKr5W,GAAMuuW,YAAYjtW,EAAIwxR,GAAMxxR,EAAIwxR,EAAM,IAAI,EAAMlwR,EAAY,GAC7DkwR,EAAMxxR,EAAIh3C,OAAS,IACnBuiB,EAAM,OAIVwsY,EAAKr5W,GAAMuuW,YAAYjtW,EAAIwxR,GAAMxxR,EAAIwxR,EAAM,IAAI,EAAMjlU,KAAK+oC,eAG9DyiX,IACAtuY,GAAQ,IAAMquY,EAAMx+Y,EAAI,IAAMw+Y,EAAMv+Y,EAAI,IAAMw+Y,EAAGz+Y,EAAI,IAAMy+Y,EAAGx+Y,GAE9DgS,IACI+4B,EAAU+wW,QAAQrsZ,OAAS,IAC3BygB,EAAOld,KAAKmrZ,WAAWpzW,EAAW76B,EAAM+nT,GACjB,eAAnBltR,EAAUrxC,OACVwW,EAAOld,KAAKmrZ,WAAWpzW,EAAW76B,EAAM+nT,EAAM,KAGtD/nT,GAAQ,KAAO8B,EAAIjS,EAAI,IAAMiS,EAAIhS,SAM7C,GAAkB,WAAdhN,KAAK0G,KAAmB,CAGxB,IAAK,IAFDmuB,OAAY,EACZ4U,EAAWzpC,KAAKypC,SACXgiX,EAAM,EAAGA,EAAMhiX,EAAShtC,OAAQgvZ,IACjCh4W,EAAIh3C,OAAS,IACbgtC,EAASgiX,GAAKtmW,cAAiBp4C,EAAG,EAAGC,EAAG,GACxCy8B,EAASgiX,GAAKrmW,cAAiBr4C,EAAG,EAAGC,EAAG,KAExCmlC,GAAMC,aAAa3I,EAASgiX,GAAKlwW,SAAY9R,EAASgiX,GAAKp5W,QAAQ1wB,OAAU8nB,EAASgiX,GAAKp5W,QAAQC,SAM9F7I,EAASgiX,GAAKp5W,QAAQ1wB,OAAS8nB,EAASgiX,GAAKp5W,QAAQC,SAC1D7I,EAASgiX,GAAKtmW,aAAehT,GAAM9kC,UAAUomC,EAAIg4W,GAAMhiX,EAASgiX,GAAKp5W,QAAQ1wB,MAAO8nB,EAASgiX,GAAKp5W,QAAQC,UAG1G7I,EAASgiX,GAAKtmW,cACVp4C,EAAG08B,EAASgiX,GAAKlwW,OAAOxuC,GAAK08B,EAASgiX,GAAKtmW,aAAap4C,EACxDC,EAAGy8B,EAASgiX,GAAKlwW,OAAOvuC,GAAKy8B,EAASgiX,GAAKtmW,aAAan4C,KAXvD+qC,EAAUxI,UAAYvvC,KAAKs6D,eAAiBt6D,KAAKivC,gBAClDpa,EAAY4b,GAAazwC,KAAKivC,cAAclZ,OAAQ0d,EAAIg4W,IAAM,IAElEhiX,EAASgiX,GAAKtmW,aAAe7H,GAAgB7J,EAAIg4W,GAAMh4W,EAAIg4W,EAAM,GAAI52X,KAWrEsd,GAAMC,aAAa3I,EAASgiX,GAAKziX,SAAYS,EAASgiX,GAAKl5W,QAAQ5wB,OAAU8nB,EAASgiX,GAAKl5W,QAAQD,SAM9F7I,EAASgiX,GAAKl5W,QAAQ5wB,OAAS8nB,EAASgiX,GAAKl5W,QAAQD,SAC1D7I,EAASgiX,GAAKrmW,aAAejT,GAAM9kC,UAAUomC,EAAIg4W,EAAM,GAAIhiX,EAASgiX,GAAKl5W,QAAQ5wB,MAAO8nB,EAASgiX,GAAKl5W,QAAQD,UAG9G7I,EAASgiX,GAAKrmW,cACVr4C,EAAG08B,EAASgiX,GAAKziX,OAAOj8B,GAAK08B,EAASgiX,GAAKrmW,aAAar4C,EACxDC,EAAGy8B,EAASgiX,GAAKziX,OAAOh8B,GAAKy8B,EAASgiX,GAAKrmW,aAAap4C,KAXvD+qC,EAAU2zW,UAAY1rZ,KAAK2rZ,eAAiB3rZ,KAAKwvC,gBAClD3a,EAAY4b,GAAazwC,KAAKwvC,cAAczZ,OAAQ0d,EAAIg4W,EAAM,IAAI,IAEtEhiX,EAASgiX,GAAKrmW,aAAe9H,GAAgB7J,EAAIg4W,EAAM,GAAIh4W,EAAIg4W,GAAM52X,IAY7E4e,EAAIhrB,OAAO,EAAG,GAAK1b,EAAG08B,EAAS,GAAG0b,aAAap4C,EAAGC,EAAGy8B,EAAS,GAAG0b,aAAan4C,IAC9EymC,EAAIhrB,OAAOgrB,EAAIh3C,OAAS,EAAG,GACvBsQ,EAAG08B,EAASA,EAAShtC,OAAS,GAAG2oD,aAAar4C,EAAGC,EAAGy8B,EAASA,EAAShtC,OAAS,GAAG2oD,aAAap4C,IAEnGymC,EAAMzzC,KAAK+uD,eAAehX,EAAWtE,GACrC,IAAK,IAAIm4W,EAAM,EAAGA,EAAMniX,EAAShtC,OAAQmvZ,IAAO,CAChC,IAARA,IACA1uY,EAAO,IAAMu2B,EAAI,GAAG1mC,EAAI,IAAM0mC,EAAI,GAAGzmC,GAEzC,IAAI6rC,EAAa+yW,IAAQniX,EAAShtC,OAAS,EAAKg3C,EAAIA,EAAIh3C,OAAS,GAAGsQ,EAAI,IAAM0mC,EAAIA,EAAIh3C,OAAS,GAAGuQ,EAC9Fy8B,EAASmiX,GAAK30X,OAAOwS,EAASmiX,GAAK30X,OAAOx6B,OAAS,GAAGsQ,EAAI,IAAM08B,EAASmiX,GAAK30X,OAAOwS,EAASmiX,GAAK30X,OAAOx6B,OAAS,GAAGuQ,EAC1HkQ,GAAQ,IACJusB,EAASmiX,GAAKzmW,aAAap4C,EAAI,IAAM08B,EAASmiX,GAAKzmW,aAAan4C,EAAI,IAAMy8B,EAASmiX,GAAKxmW,aAAar4C,EAAI,IACvG08B,EAASmiX,GAAKxmW,aAAap4C,EAAI,IAAM6rC,QAI/C,IAAK,IAAIxyB,EAAI,EAAGA,EAAIotB,EAAIh3C,OAAQ4pB,IAC5BklY,EAAQ93W,EAAIptB,GACF,IAANA,IACAnJ,EAAO,IAAMquY,EAAMx+Y,EAAI,IAAMw+Y,EAAMv+Y,GAEnCqZ,EAAI,IACJnJ,EAAOld,KAAKmrZ,WAAWpzW,EAAW76B,EAAMmJ,GACxCnJ,GAAQ,KAAYquY,EAAMx+Y,EAAI,IAAMw+Y,EAAMv+Y,GAK1D,OAAOkQ,GAGXghC,EAAU7iD,UAAU4zD,mBAAqB,SAAUlX,GAC/C,IAAI/2C,EACJ,OAAQ+2C,EAAU5e,MAAMzyB,MACpB,IAAK,OACGqxC,EAAUhmC,QAAQqI,SAAS,aAAcy/B,KACzC74C,EAAU+2C,EAAUhmC,QAAQqI,SAAS,IAEZ,YAAzB29B,EAAU5e,MAAM+vX,MAChBlpZ,KAAKspZ,oBAAoBvxW,EAAW/2C,KAMpDk9C,EAAU7iD,UAAUiuZ,oBAAsB,SAAUvxW,EAAW/2C,GAM3D,IAAK,IAJD2gB,EACA6pB,EACA/uC,EAAS,EACT8sZ,EAAcvpZ,KAAKklD,mBACd/oD,EAAI,EAAGA,EAAIotZ,EAAY9sZ,OAAS,EAAGN,IAAK,CAE7C,IAAIurD,EAPY,IAMhBjrD,GAAkBuD,KAAKsyC,SAASi3W,EAAYptZ,GAAIotZ,EAAYptZ,EAAI,KAE5DM,GAAUirD,IACV/lC,EAAQs3B,GAAUswW,EAAYptZ,GAAIotZ,EAAYptZ,EAAI,IAClDqvC,EAAK2G,GAAM9kC,UAAUk8Y,EAAYptZ,GAAIwlB,EAAO+lC,IAGpD1mD,EAAQ6K,QAAU2/B,EAAGz+B,EACrB/L,EAAQiL,QAAUu/B,EAAGx+B,GAGzBkxC,EAAU7iD,UAAUyoD,MAAQ,SAAU2M,EAAIC,EAAI16C,EAAOD,EAAQ46C,GACzD,IAAImhQ,EAAK,EACLD,EAAK,EACT,GAAI7xT,KAAK+R,SAAW/R,KAAK+R,QAAQgrC,YAAa,CAC1C,IAAIA,EAAcD,GAAe98C,MAC7B6rZ,GAAa7rZ,KAAK+R,QAAQgkB,OAAO/f,OAAShW,KAAK0E,MAAMknD,aAAe,GAAK,EACzEkgW,GAAc9rZ,KAAK+R,QAAQgkB,OAAOhgB,QAAU/V,KAAK0E,MAAMknD,aAAe,GAAK,EAC/EkmQ,EAAM/0Q,EAAY/mC,MAAQ61Y,EAC1Bh6F,EAAM90Q,EAAYhnC,OAAS+1Y,EAC3Br7V,GAAMz6C,EAAS3J,KAAKC,IAAIwlT,EAAID,IAAQg6F,EACpCn7V,GAAM36C,EAAU1J,KAAKC,IAAIwlT,EAAID,IAAQi6F,EACrCh6F,EAAKD,EAAKxlT,KAAK8T,IAAI2xS,EAAID,GAE3BphQ,EAAKC,EAAKrkD,KAAK8T,IAAIswC,EAAIC,GACvB,IAAInlB,EAASL,KAEbiB,GAAaZ,IADbolB,EAAYA,GAAa3wD,KAAK+R,SACEu0C,YAAaqK,EAAU9kD,QAAS8kD,EAAU1kD,SAC1EugC,GAAYjB,EAAQklB,EAAIC,EAAIC,EAAU9kD,QAAS8kD,EAAU1kD,SACzDkgC,GAAaZ,EAAQolB,EAAUrK,YAAaqK,EAAU9kD,QAAS8kD,EAAU1kD,SACzE,IAAIgrB,EAASgV,GAAwBV,EAAQvrC,KAAKklD,oBAKlD,OAJAllD,KAAKgvC,YAAc/X,EAAO,GAC1Bj3B,KAAKi3C,YAAchgB,EAAOA,EAAOx6B,OAAS,GAC1Cw6B,EAASj3B,KAAKklD,mBAAqBrW,GAAoB7uC,MACvDyuD,GAAgBzuD,KAAMi3B,IACblqB,EAAG+kT,EAAI9kT,EAAG6kT,IAEvBzlO,IACIlkF,EAAeqgZ,KAChBrqW,EAAU7iD,UAAW,aAAS,GACjC+wF,IACIllF,EAASk3C,GAAqB2tW,UAC/B7tW,EAAU7iD,UAAW,mBAAe,GACvC+wF,IACIllF,EAAS,KACVg3C,EAAU7iD,UAAW,mBAAe,GACvC+wF,IACI/jF,KAAe29Y,KAChB9nW,EAAU7iD,UAAW,mBAAe,GACvC+wF,IACIrkF,KAAYoqC,KACb+L,EAAU7iD,UAAW,mBAAe,GACvC+wF,IACIrkF,KAAYoqC,KACb+L,EAAU7iD,UAAW,mBAAe,GACvC+wF,IACIzjF,EAAkB+/Y,KACnBxqW,EAAU7iD,UAAW,gBAAY,GACpC+wF,IACIllF,EAAS,KACVg3C,EAAU7iD,UAAW,gBAAY,GACpC+wF,IACIllF,EAAS,KACVg3C,EAAU7iD,UAAW,gBAAY,GACpC+wF,IACIllF,EAAS,KACVg3C,EAAU7iD,UAAW,kBAAc,GACtC+wF,IACIllF,EAAS,aACVg3C,EAAU7iD,UAAW,YAAQ,GAChC+wF,IACIllF,EAAS,IACVg3C,EAAU7iD,UAAW,oBAAgB,GACxC+wF,IACIrkF,GAAUoxB,MAAO,QAAUwvX,KAC5BzqW,EAAU7iD,UAAW,uBAAmB,GAC3C+wF,IACIrkF,GAAUoxB,MAAO,SAAWwvX,KAC7BzqW,EAAU7iD,UAAW,uBAAmB,GAC3C+wF,IACIrkF,KAAYsgZ,KACbnqW,EAAU7iD,UAAW,eAAW,GACnC+wF,IACIllF,EAAS,KACVg3C,EAAU7iD,UAAW,oBAAgB,GACxC+wF,IACIllF,EAAS,KACVg3C,EAAU7iD,UAAW,oBAAgB,GACxC+wF,IACIrkF,GAAU6jD,YAAa,EAAGF,YAAa,SAAWD,KACnDvN,EAAU7iD,UAAW,aAAS,GACjC+wF,IACIllF,EAAS,OACVg3C,EAAU7iD,UAAW,eAAW,GAC5B6iD,GACToqW,I6Vx9BEz8T,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAa5D4uX,GAA4B,SAAUt/T,GAEtC,SAASs/T,IACL,OAAkB,OAAXt/T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA4C/D,OA9CA6rF,GAAUmgU,EAAYt/T,GAItBN,IACIllF,EAAS,KACV8kZ,EAAW3wZ,UAAW,YAAQ,GACjC+wF,IACIllF,EAAS,KACV8kZ,EAAW3wZ,UAAW,gBAAY,GACrC+wF,IACIllF,EAAS,YACV8kZ,EAAW3wZ,UAAW,uBAAmB,GAC5C+wF,IACIllF,EAAS,QACV8kZ,EAAW3wZ,UAAW,YAAQ,GACjC+wF,IACIllF,EAAS,KACV8kZ,EAAW3wZ,UAAW,mBAAe,GACxC+wF,IACIllF,EAAS,KACV8kZ,EAAW3wZ,UAAW,mBAAe,GACxC+wF,IACIllF,EAAS,KACV8kZ,EAAW3wZ,UAAW,YAAQ,GACjC+wF,IACIllF,EAAS,UACV8kZ,EAAW3wZ,UAAW,iBAAa,GACtC+wF,IACIllF,EAAS,KACV8kZ,EAAW3wZ,UAAW,oBAAgB,GACzC+wF,IACIllF,GAAS,IACV8kZ,EAAW3wZ,UAAW,eAAW,GACpC+wF,IACIllF,EAAS,IACV8kZ,EAAW3wZ,UAAW,cAAU,GACnC+wF,IACIrkF,KAAYytN,KACbw2L,EAAW3wZ,UAAW,cAAU,GACnC+wF,IACIllF,EAAS,WACV8kZ,EAAW3wZ,UAAW,2BAAuB,GAChD+wF,IACIllF,EAAS,WACV8kZ,EAAW3wZ,UAAW,yBAAqB,GACvC2wZ,GACTxrV,IAKE/hB,GAA0B,SAAUiuC,GAEpC,SAASjuC,IACL,OAAkB,OAAXiuC,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAqE/D,OAvEA6rF,GAAUptC,EAAUiuC,GAOpBjuC,EAASpjD,UAAUgtP,KAAO,SAAUt6M,GAChC,IAAInzB,EAAY,IAAIg2C,GAIpB,GAHAh2C,EAAUgoY,iBAAkB,EAC5BhoY,EACUR,YACNpa,KAAK0qD,OAAS1qD,KAAKyqD,WAAY,CAC/B,IAAK,IAAItuD,EAAI,EAAGA,EAAI6D,KAAK0qD,MAAMjuD,OAAQN,IAAK,CACxC,IACI4V,EADOg8B,EAAQ2sB,UAAU16D,KAAK0qD,MAAMvuD,GAAGmH,IACxByO,QAMnB6I,EAAUR,SAAS5V,KAAKuN,GAE5B,IAAK,IAAI0R,EAAI,EAAGA,EAAIzjB,KAAKyqD,WAAWhuD,OAAQgnB,IAAK,CAEzC1R,EADYg8B,EAAQ2sB,UAAU16D,KAAKyqD,WAAWhnC,GAAGngB,IAC7ByO,QAIxB6I,EAAUR,SAAS5V,KAAKuN,IAIhC,OADA/R,KAAK+R,QAAU6I,EACRA,GAEXwxE,IACIllF,EAAS,OACVu3C,EAASpjD,UAAW,eAAW,GAClC+wF,IACI/jF,KAAek3C,KAChBd,EAASpjD,UAAW,aAAS,GAChC+wF,IACI/jF,KAAe61C,KAChBO,EAASpjD,UAAW,kBAAc,GACrC+wF,IACIllF,KACDu3C,EAASpjD,UAAW,aAAS,GAChC+wF,IACIllF,KACDu3C,EAASpjD,UAAW,cAAU,GACjC+wF,IACIllF,EAAS,IACVu3C,EAASpjD,UAAW,mBAAe,GACtC+wF,IACIllF,EAAS,IACVu3C,EAASpjD,UAAW,eAAW,GAClC+wF,IACIllF,EAAS,IACVu3C,EAASpjD,UAAW,eAAW,GAClC+wF,IACIrkF,GAAUgF,EAAG,GAAKC,EAAG,IAAOmlC,KAC7BsM,EAASpjD,UAAW,aAAS,GAChC+wF,IACIllF,EAAS,sBACVu3C,EAASpjD,UAAW,+BAA2B,GAClD+wF,IACI/jF,KAAe2jZ,KAChBvtW,EAASpjD,UAAW,mBAAe,GACtC+wF,IACIllF,EAAS2oD,GAAoBo8V,MAC9BxtW,EAASpjD,UAAW,mBAAe,GAC/BojD,GACT+hB,ICzJEqrB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexCn+B,GAAoC,SAAU2+B,GAK9C,SAAS3+B,EAAmBwD,EAAQL,GAChC,IAAInxD,EAAQ2sF,EAAOprF,KAAKtB,OAASA,KAMjC,OALAD,EAAMvD,KAAO,GACbuD,EAAMwxD,OAAS,GACfxxD,EAAMmxD,UAAY,GAClBnxD,EAAMmxD,UAAYA,EAClBnxD,EAAMwxD,OAASA,EACRxxD,EAiBX,OA5BA8rF,GAAU99B,EAAoB2+B,GAa9BpuF,OAAOuJ,eAAekmD,EAAmB1yD,UAAW,WAIhDqM,IAAK,WACD,OAAO1H,KAAKxD,MAEhB6K,IAAK,SAAUrK,GACXgD,KAAKxD,KAAOQ,EACZgD,KAAKiP,SAAWk/C,GAAWnuD,MAAM,GACjCA,KAAKuhZ,QAAS,GAElB55Y,YAAY,EACZC,cAAc,IAEXmmD,GACTX,IC7CEy+B,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GA4B5D8uX,GAAe,SAAUnvZ,GACzB,OAAQA,EAAI2J,MACR,IAAK,QACD,OAAOylZ,GACX,IAAK,OACD,OAAOC,GACX,IAAK,OACD,OAAOC,GACX,IAAK,QACD,OAAOl7T,GACX,IAAK,OACD,OAAOnkC,GACX,IAAK,OACD,OAAOs/V,GACX,IAAK,SACD,OAAOC,GACX,IAAK,OACD,OAAOC,GACX,QACI,OAAOL,KAMfM,GAAuB,SAAU//T,GAEjC,SAAS+/T,IACL,OAAkB,OAAX//T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAK/D,OAPA6rF,GAAU4gU,EAAO//T,GAIjBN,IACIllF,EAAS,UACVulZ,EAAMpxZ,UAAW,YAAQ,GACrBoxZ,GACTjsV,IAKE6rV,GAAsB,SAAU3/T,GAEhC,SAAS2/T,IACL,OAAkB,OAAX3/T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAUwgU,EAAM3/T,GAIhBN,IACIllF,EAAS,SACVmlZ,EAAKhxZ,UAAW,YAAQ,GAC3B+wF,IACIllF,EAAS,KACVmlZ,EAAKhxZ,UAAW,YAAQ,GACpBgxZ,GACTI,IAKEF,GAAwB,SAAU7/T,GAElC,SAAS6/T,IACL,OAAkB,OAAX7/T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAU0gU,EAAQ7/T,GAIlBN,IACIllF,EAAS,WACVqlZ,EAAOlxZ,UAAW,YAAQ,GAC7B+wF,IACIllF,EAAS,KACVqlZ,EAAOlxZ,UAAW,eAAW,GAChC+wF,IACIllF,EAAS,YACVqlZ,EAAOlxZ,UAAW,aAAS,GACvBkxZ,GACTE,IAKED,GAAsB,SAAU9/T,GAEhC,SAAS8/T,IACL,OAAkB,OAAX9/T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAU2gU,EAAM9/T,GAIhBN,IACIllF,EAAS,SACVslZ,EAAKnxZ,UAAW,YAAQ,GAC3B+wF,IACIllF,EAAS,KACVslZ,EAAKnxZ,UAAW,eAAW,GACvBmxZ,GACTC,IAKEt7T,GAAuB,SAAUzE,GAEjC,SAASyE,IACL,OAAkB,OAAXzE,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAUsF,EAAOzE,GAIjBN,IACIllF,EAAS,UACViqF,EAAM91F,UAAW,YAAQ,GAC5B+wF,IACIllF,EAAS,KACViqF,EAAM91F,UAAW,cAAU,GAC9B+wF,IACIllF,EAAS,KACViqF,EAAM91F,UAAW,aAAS,GAC7B+wF,IACIllF,EAAS,SACViqF,EAAM91F,UAAW,aAAS,GACtB81F,GACTs7T,IAKEz/V,GAAsB,SAAU0/B,GAEhC,SAAS1/B,IACL,OAAkB,OAAX0/B,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAU7+B,EAAM0/B,GAIhBN,IACIllF,EAAS,SACV8lD,EAAK3xD,UAAW,YAAQ,GAC3B+wF,IACIllF,EAAS,KACV8lD,EAAK3xD,UAAW,eAAW,GAC9B+wF,IACIrkF,KAAYytN,KACbxoK,EAAK3xD,UAAW,cAAU,GACtB2xD,GACTy/V,IAKEN,GAA4B,SAAUz/T,GAEtC,SAASy/T,IACL,OAAkB,OAAXz/T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAUsgU,EAAYz/T,GAItBN,IACIllF,EAAS,UACVilZ,EAAW9wZ,UAAW,YAAQ,GACjC+wF,IACIllF,EAAS,cACVilZ,EAAW9wZ,UAAW,aAAS,GAClC+wF,IACIllF,EAAS,IACVilZ,EAAW9wZ,UAAW,oBAAgB,GACzC+wF,IACI/jF,KAAe8pC,KAChBg6W,EAAW9wZ,UAAW,cAAU,GAC5B8wZ,GACTM,IAKEL,GAA2B,SAAU1/T,GAErC,SAAS0/T,IACL,OAAkB,OAAX1/T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAUugU,EAAW1/T,GAIrBN,IACIllF,EAAS,SACVklZ,EAAU/wZ,UAAW,YAAQ,GAChC+wF,IACIllF,EAAS,eACVklZ,EAAU/wZ,UAAW,aAAS,GAC1B+wZ,GACTK,IAKEC,GAA6B,SAAUhgU,GAEvC,SAASggU,IACL,OAAkB,OAAXhgU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAK/D,OAPA6rF,GAAU6gU,EAAahgU,GAIvBN,IACIllF,EAAS,SACVwlZ,EAAYrxZ,UAAW,YAAQ,GAC3BqxZ,GACTlsV,IAKEmsV,GAAgC,SAAUjgU,GAE1C,SAASigU,IACL,OAAkB,OAAXjgU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAU8gU,EAAgBjgU,GAI1BN,IACIllF,EAAS,SACVylZ,EAAetxZ,UAAW,YAAQ,GACrC+wF,IACIllF,GAAS,IACVylZ,EAAetxZ,UAAW,kBAAc,GACpCsxZ,GACTnsV,IAKEosV,GAA0B,SAAUlgU,GAEpC,SAASkgU,IACL,OAAkB,OAAXlgU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAU+gU,EAAUlgU,GAIpBN,IACIllF,EAAS,SACV0lZ,EAASvxZ,UAAW,YAAQ,GAC/B+wF,IACIllF,EAAS,SACV0lZ,EAASvxZ,UAAW,YAAQ,GAC/B+wF,IACIllF,GAAS,IACV0lZ,EAASvxZ,UAAW,YAAQ,GAC/B+wF,IACIllF,GAAS,IACV0lZ,EAASvxZ,UAAW,oBAAgB,GAChCuxZ,GACTpsV,IAKEqsV,GAA2B,SAAUngU,GAErC,SAASmgU,IACL,OAAkB,OAAXngU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAUghU,EAAWngU,GAIrBN,IACIllF,EAAS,UACV2lZ,EAAUxxZ,UAAW,aAAS,GACjC+wF,IACIllF,EAAS,SACV2lZ,EAAUxxZ,UAAW,eAAW,GAC5BwxZ,GACTrsV,IAKEssV,GAA8B,SAAUpgU,GAExC,SAASogU,IACL,OAAkB,OAAXpgU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAsC/D,OAxCA6rF,GAAUihU,EAAcpgU,GAIxBN,IACIllF,EAAS,SACV4lZ,EAAazxZ,UAAW,eAAW,GACtC+wF,IACIllF,EAAS,UACV4lZ,EAAazxZ,UAAW,aAAS,GACpC+wF,IACIllF,EAAS,KACV4lZ,EAAazxZ,UAAW,UAAM,GACjC+wF,IACIrkF,KAAYoqC,KACb26W,EAAazxZ,UAAW,cAAU,GACrC+wF,IACI/jF,KAAe09Y,KAChB+G,EAAazxZ,UAAW,mBAAe,GAC1C+wF,IACI/jF,KAAe2xD,KAChB8yV,EAAazxZ,UAAW,aAAS,GACpC+wF,IACIllF,KACD4lZ,EAAazxZ,UAAW,aAAS,GACpC+wF,IACIllF,KACD4lZ,EAAazxZ,UAAW,cAAU,GACrC+wF,IACIrkF,KAAYytN,KACbs3L,EAAazxZ,UAAW,cAAU,GACrC+wF,IACIllF,EAAS,WACV4lZ,EAAazxZ,UAAW,2BAAuB,GAClD+wF,IACIllF,EAAS,WACV4lZ,EAAazxZ,UAAW,yBAAqB,GAChD+wF,IACIllF,GAAS,IACV4lZ,EAAazxZ,UAAW,eAAW,GAC/ByxZ,GACTtsV,IAEEusV,GAA2C,SAAUrgU,GAErD,SAASqgU,IACL,OAAkB,OAAXrgU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAUkhU,EAA2BrgU,GAIrCN,IACIrkF,GAAUzE,GAAI,UAAWhH,MAAO,MAAOqP,QAAUoB,EAAG,EAAGC,EAAG,KAAS8/Y,KACpEC,EAA0B1xZ,UAAW,eAAW,GACnD+wF,IACIrkF,GAAUzE,GAAI,UAAWhH,MAAO,eAAgBoqB,QAAS,QAAS/a,QAAUoB,EAAG,IAAMC,EAAG,IAAO8/Y,KAChGC,EAA0B1xZ,UAAW,eAAW,GACnD+wF,IACIrkF,GAAUzE,GAAI,SAAUhH,MAAO,eAAgBoqB,QAAS,SAAU/a,QAAUoB,EAAG,IAAMC,EAAG,IAAO8/Y,KAChGC,EAA0B1xZ,UAAW,cAAU,GAC3C0xZ,GACTvsV,IAKEwsV,GAAgC,SAAUtgU,GAE1C,SAASsgU,IACL,OAAkB,OAAXtgU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA6B/D,OA/BA6rF,GAAUmhU,EAAgBtgU,GAI1BN,IACIllF,EAAS,SACV8lZ,EAAe3xZ,UAAW,YAAQ,GACrC+wF,IACIllF,GAAS,IACV8lZ,EAAe3xZ,UAAW,aAAS,GACtC+wF,IACIllF,EAAS,YACV8lZ,EAAe3xZ,UAAW,gBAAY,GACzC+wF,IACIllF,GAAS,IACV8lZ,EAAe3xZ,UAAW,oBAAgB,GAC7C+wF,IACIllF,EAAS,SACV8lZ,EAAe3xZ,UAAW,YAAQ,GACrC+wF,IACIllF,GAAS,IACV8lZ,EAAe3xZ,UAAW,iBAAa,GAC1C+wF,IACI/jF,KAAeykZ,KAChBE,EAAe3xZ,UAAW,cAAU,GACvC+wF,IACIrkF,KAAYglZ,KACbC,EAAe3xZ,UAAW,mBAAe,GAC5C+wF,IACIllF,OAAS/L,IACV6xZ,EAAe3xZ,UAAW,iBAAa,GACnC2xZ,GACTxsV,IAKEysV,GAA8B,SAAUvgU,GAExC,SAASugU,IACL,OAAkB,OAAXvgU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAUohU,EAAcvgU,GAIxBN,IACIllF,EAAS,SACV+lZ,EAAa5xZ,UAAW,gBAAY,GACvC+wF,IACIrkF,KAAY6kZ,KACbK,EAAa5xZ,UAAW,YAAQ,GACnC+wF,IACIrkF,KAAYilZ,KACbC,EAAa5xZ,UAAW,kBAAc,GAClC4xZ,GACTzsV,IAKE0sV,GAAgC,SAAUxgU,GAG1C,SAASwgU,EAAe5sZ,EAAQ+Q,EAAU5K,EAAchI,GACpD,OAAOiuF,EAAOprF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAoBzE,OAvBA6rF,GAAUqhU,EAAgBxgU,GAK1BN,IACIllF,EAAS,KACVgmZ,EAAe7xZ,UAAW,YAAQ,GACrC+wF,IACIllF,EAAS,KACVgmZ,EAAe7xZ,UAAW,UAAM,GACnC+wF,IACIllF,KACDgmZ,EAAe7xZ,UAAW,aAAS,GACtC+wF,IACIllF,KACDgmZ,EAAe7xZ,UAAW,cAAU,GACvC+wF,IACIllF,KACDgmZ,EAAe7xZ,UAAW,aAAS,GACtC+wF,IACIllF,KACDgmZ,EAAe7xZ,UAAW,cAAU,GAChC6xZ,GACT1sV,IAKE8rV,GAA2B,SAAU5/T,GAErC,SAAS4/T,IACL,OAAkB,OAAX5/T,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBA6rF,GAAUygU,EAAW5/T,GAIrBN,IACIllF,EAAS,SACVolZ,EAAUjxZ,UAAW,YAAQ,GAChC+wF,IACIllF,EAAS,UACVolZ,EAAUjxZ,UAAW,aAAS,GACjC+wF,IACIrkF,KAAY8kZ,KACbP,EAAUjxZ,UAAW,aAAS,GACjC+wF,IACIrkF,KAAY2kZ,KACbJ,EAAUjxZ,UAAW,eAAW,GACnC+wF,IACIrkF,KAAY4kZ,KACbL,EAAUjxZ,UAAW,kBAAc,GACtC+wF,IACIrkF,KAAYklZ,KACbX,EAAUjxZ,UAAW,gBAAY,GACpC+wF,IACI/jF,KAAe6kZ,KAChBZ,EAAUjxZ,UAAW,mBAAe,GAChCixZ,GACTG,IAKEltW,GAAsB,SAAUmtC,GAGhC,SAASntC,EAAKj/C,EAAQ+Q,EAAU5K,EAAchI,GAC1C,IAAIsB,EAAQ2sF,EAAOprF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAS1E,OAPAD,EAAM46D,SAAW,GAEjB56D,EAAMotZ,UAAY,GAElBptZ,EAAMqtZ,YAENrtZ,EAAMstZ,WACCttZ,EA8aX,OA1bA8rF,GAAUtsC,EAAMmtC,GAchBpuF,OAAOuJ,eAAe03C,EAAKlkD,UAAW,cAElCqM,IAAK,WACD,OAAqB,OAAjB1H,KAAK+R,QACE/R,KAAK+R,QAAQ0nC,WAGb,IAAIhqB,GAAKzvB,KAAKgW,OAAS,EAAGhW,KAAK+V,QAAU,IAGxDpO,YAAY,EACZC,cAAc,IAOlB23C,EAAKlkD,UAAUgtP,KAAO,SAAUt6M,GAC5B,IACI6kM,EADAh4M,EAAU,IAAIwyB,GAMlB,OAFAptD,KAAKm5B,MAAuB,qBAC5Bn5B,KAAKm5B,MAAmB,iBAChBn5B,KAAKm5B,MAAMzyB,MACf,IAAK,OACD,IAAI2mD,EAAc,IAAIxT,GACtBwT,EAAY7wD,KAAOwD,KAAKm5B,MAAM38B,KAC9Bo+B,EAAUyyB,EACV,MACJ,IAAK,QACD,IAAIC,EAAe,IAAIC,GACvBD,EAAa/wD,OAASyD,KAAKm5B,MAAM58B,OACjC+wD,EAAaE,WAAaxtD,KAAKm5B,MAAMs0B,MACrCH,EAAaI,WAAa1tD,KAAKm5B,MAAM2qB,MACrClpB,EAAU0yB,EACV,MACJ,IAAK,OACD,IAAItxC,EAAc,IAAImwC,GACtBnwC,EAAY4e,QAAU56B,KAAKm5B,MAAMyB,QACjCA,EAAU5e,EACV42N,EAAY5yO,KAAK0E,MACjBk2B,EAAQl2B,MAAQkuO,EAChB,MACJ,IAAK,QACD,GAAyB,cAArB5yO,KAAKm5B,MAAMA,MAAuB,EAElCyB,EADI0yX,EAAa,IAAIlgW,IAEbrkB,aAAe/oC,KAAKm5B,MAAM4P,kBAEjC,GAAyB,YAArB/oC,KAAKm5B,MAAMA,MAAqB,CACrC,IAAIjc,EAAO,IAAI28B,GACf38B,EAAK1gB,KAAO4sC,GAAeppC,KAAKm5B,MAAMlC,QACtC2D,EAAU1d,MAET,CACD,IAAIowY,EAAa,IAAIzzW,GACjB0zW,EAAiBrgX,GAAcltC,KAAKm5B,MAAMA,OAC9Cm0X,EAAW9wZ,KAAO+wZ,EAClB3yX,EAAU0yX,EAEd,MACJ,IAAK,OACD,IAAIE,EAAY,IAAI3zW,GAChBwU,EAAgBzgB,GAAa5tC,KAAKm5B,MAAMA,OAC5Cq0X,EAAUhxZ,KAAO6xD,EACjBzzB,EAAU4yX,EACV,MACJ,IAAK,OACD,GAAIz/W,EAAQ0/W,WAAY,CACpB7yX,EAAUmT,EAAQ0/W,WAAWC,gBAAgB9yX,EAAS56B,KAAM+tC,GAC5D,IAAI4/W,EAAa3tZ,KAAKm5B,MAAMy0X,SAASD,WACrC,GAAIA,EAAWE,WAAaF,EAAWE,UAAUpxZ,OAE7C,IAAK,IAAI2B,EAAK,EAAG0vZ,EADF9tZ,KAAKm5B,MAAMy0X,SAASD,WAAWE,UACNzvZ,EAAK0vZ,EAAWrxZ,OAAQ2B,IAAM,CAClE,IAAIjC,EAAI2xZ,EAAW1vZ,IACf2vC,EAAQ2sB,UAAUv+D,IAAQ4xC,EAAQ2sB,UAAUv+D,GAAGgxZ,WAAap/W,EAAQ2sB,UAAUv+D,GAAGgxZ,YAAcntZ,KAAKsD,KACpGyqC,EAAQ2sB,UAAUv+D,GAAGgxZ,UAAYntZ,KAAKsD,GAClCqqZ,EAAWI,WACXhgX,EAAQigX,wBAAwBjgX,EAAQ2sB,UAAUv+D,GAAG4V,QAASg8B,EAAQ2sB,UAAUv+D,IAAKwxZ,EAAWI,WAEpGnzX,EAAQxgB,SAAS5V,KAAKupC,EAAQ2sB,UAAUv+D,GAAG4V,WAK3D,MACJ,IAAK,SACD,IAAI67C,EAAgB,IAAIC,GAAqB7tD,KAAKsD,GAAIyqC,EAAQ/sC,QAAQsC,IACtEsqD,EAAchzB,QAAU56B,KAAKm5B,MAAMyB,QACnCgzB,EAAc9J,MAAQ9jD,KAAKm5B,MAAM2qB,MACjClpB,EAAUgzB,EACV,MACJ,IAAK,OACD,IAAIE,EAAc,IAAIC,GAAmB/tD,KAAKsD,GAAIyqC,EAAQ/sC,QAAQsC,IAClEwqD,EAAYlzB,QAAU56B,KAAKm5B,MAAMyB,QACjCA,EAAUkzB,EA0ClB,OAvCAlzB,EAAQt3B,GAAKtD,KAAKsD,GAAK,WACvBs3B,EAAQosB,aAAe,cACJ7rD,IAAf6E,KAAKgW,QACL4kB,EAAQ5kB,MAAQhW,KAAKgW,OAEzB4kB,EAAQkyB,oBAAsB,eACV3xD,IAAhB6E,KAAK+V,SACL6kB,EAAQ7kB,OAAS/V,KAAK+V,aAEH5a,IAAnB6E,KAAK2sD,YACL/xB,EAAQ+xB,UAAY3sD,KAAK2sD,gBAENxxD,IAAnB6E,KAAK4sD,YACLhyB,EAAQgyB,UAAY5sD,KAAK4sD,gBAEPzxD,IAAlB6E,KAAK6sD,WACLjyB,EAAQiyB,SAAW7sD,KAAK6sD,eAEN1xD,IAAlB6E,KAAK4+B,WACLhE,EAAQgE,SAAW5+B,KAAK4+B,UAEH,cAArB5+B,KAAKm5B,MAAMA,OAA0Bn5B,KAAKm5B,MAAM4P,eAChDnO,EAAQgnX,eAAgB,GAE5BhnX,EAAQmyB,kBAAoB,UACxB/sD,KAAKm5B,iBAAiB6zB,KACtBpyB,EAAQqC,OAASj9B,KAAKm5B,MAAM8D,QAE5BmiB,GAAUp/C,OAC0C,IAA/CA,KAAKm+C,YAAcG,GAAgBe,UACpCzkB,EAAQm5B,OAAS/zD,KAAK+zD,QAGN,SAApB/zD,KAAKm5B,MAAMzyB,MAAwC,YAArB1G,KAAKm5B,MAAMA,OACpB,eAArBn5B,KAAKm5B,MAAMA,OACa,SAApBn5B,KAAKm5B,MAAMzyB,OACXk0B,EAAQl2B,MAAQ1E,KAAK0E,OAGtBk2B,GAIX2kB,EAAKlkD,UAAU4yZ,cAAgB,WACtBjuZ,KAAKsD,KACNtD,KAAKsD,GAAKqzD,MAGd,IAAIqyU,EAAShpY,KAAKoa,SAAW,IAAIw2C,GAAc,IAAI2zV,GAgBnD,OAfAvb,EAAO1lY,GAAKtD,KAAKsD,GACjB0lY,EAAOn9X,QAAU7L,KAAK6L,QACtBm9X,EAAO/8X,QAAUjM,KAAKiM,QACtB+8X,EAAOlyW,QAAU92B,KAAK82B,QACtBkyW,EAAOtkY,MAAM05B,KAAOp+B,KAAKuqD,gBACzBy+U,EAAOtkY,MAAMgnD,YAAc1rD,KAAK6uO,YAChCm6J,EAAOtkY,MAAMknD,YAAc5rD,KAAKgwF,YAChCg5S,EAAO1iV,YAActmD,KAAKsmD,YAC1B0iV,EAAOr8U,UAAY3sD,KAAK2sD,UACxBq8U,EAAOn8U,SAAW7sD,KAAK6sD,SACvBm8U,EAAOp8U,UAAY5sD,KAAK4sD,UACxBo8U,EAAOpqW,SAAW5+B,KAAK4+B,SACvBoqW,EAAO35U,MAAQrvD,KAAKqvD,MACpB25U,EAAO/rW,OAASj9B,KAAKi9B,OACrBj9B,KAAK+R,QAAUi3X,EACRA,GAGXzpV,EAAKlkD,UAAU6yZ,UAAY,SAAUC,EAAsBvzY,GAC1C5a,KAAK+R,QAElB,IAAK,IADDw+B,EACKp0C,EAAI,EAAG6D,KAAKswD,MAAqBn0D,EAAI6D,KAAKswD,MAAM7zD,OAAQN,IAAK,CAClEo0C,EAAOvwC,KAAKouZ,gBAAgBpuZ,KAAKswD,MAAMn0D,IAEvC,IAAIstZ,OAAiB,EACjB4E,EAAuBpqW,GAAYkqW,GACnCE,IACA5E,EAAiB4E,EAAqB99W,EAAMvwC,OAEhDuwC,EAAKyjB,YAAcy1V,GAAkCl5W,EAAKjtC,GAC1DsX,EAAUR,SAAS5V,KAAK+rC,KAGhCgP,EAAKlkD,UAAUizZ,aAAe,SAAU7kW,EAAQ9b,GAC5C,IAAI5gC,EACAC,EAiBJ,MAhB2B,gBAAvBy8C,EAAO7wB,aACP7rB,EAAI4gC,EAAKhiC,OAAOoB,EAChBC,EAAI,EAAI2gC,EAAKhiC,OAAOqB,GAEQ,gBAAvBy8C,EAAO7wB,aACZ7rB,EAAI4gC,EAAKhiC,OAAOqB,EAChBA,EAAI2gC,EAAKhiC,OAAOoB,GAEY,gBAAvB08C,EAAO7wB,aACZ7rB,EAAI,EAAI4gC,EAAKhiC,OAAOqB,EACpBA,EAAI2gC,EAAKhiC,OAAOoB,IAGhBA,EAAI4gC,EAAKhiC,OAAOoB,EAChBC,EAAI2gC,EAAKhiC,OAAOqB,IAEXD,EAAGA,EAAGC,EAAGA,IAGtBuyC,EAAKlkD,UAAUkzZ,UAAY,SAAUJ,EAAsB1kW,EAAQ7uC,EAAWs2C,GAC7DlxD,KAAK+R,QAAlB,IACIpG,EACAgiC,EAAO3tC,KAAK60W,WAAa70W,KAAKwuZ,WAAaxuZ,KAAKyuZ,aACpD,GAAmB,SAAf9gX,EAAKxU,MAAkB,CACvB,IAAIisF,EAAgB,IAAIm/R,GACxBn/R,EAAc08R,OAAQ,EAEtB18R,EAAc9hH,GAAKtD,KAAKsD,GAAK,gBAC7B8hH,EAAchrG,YACdgrG,EAAcrvG,OAAS43B,EAAK53B,OAC5BqvG,EAAcpvG,MAAQ23B,EAAK33B,MAC3BovG,EAAc1gH,MAAMgnD,YAAc,cAClC05D,EAAcnoF,OAAS0Q,EAAK1Q,OAC5BmoF,EAAct4D,oBAAsB,SACpCs4D,EAAcr4D,kBAAoB,SAClCq4D,EAActuF,QAAU92B,KAAK82B,QAC7BnrB,EAAS3L,KAAKsuZ,aAAa7kW,EAAQ9b,GACnCy3E,EAAc48R,6BAA6Br2Y,EAAOoB,EAAGpB,EAAOqB,EAAG,YAC/Do4G,EAAcp+D,aAAe,QAC7BhnD,KAAK0uZ,eAAe/gX,EAAMy3E,EAAe+oS,EAAsBj9V,GAE/D,IAAIu4V,OAAiB,EACjB4E,EAAuBpqW,GAAYkqW,GACnCE,IACA5E,EAAiB4E,EAAqB1gX,EAAM3tC,OAEhDolH,EAAcpxD,YAAcy1V,GAAkCrkS,EAAc9hH,GAC5EsX,EAAUR,SAAS5V,KAAK4gH,KAIhC7lE,EAAKlkD,UAAUszZ,gBAAkB,SAAUR,EAAsBvzY,GAE7D,IAAK,IADDysC,EACKlrD,EAAI,EAAG6D,KAAKowD,YAA2Bj0D,EAAI6D,KAAKowD,YAAY3zD,OAAQN,IAAK,CAC9EkrD,EAAarnD,KAAK4uZ,sBAAsB5uZ,KAAKowD,YAAYj0D,IAEzD,IAAIstZ,OAAiB,EACjB4E,EAAuBpqW,GAAYkqW,GACnCE,IACA5E,EAAiB4E,EAAqBhnW,EAAYrnD,OAEtDqnD,EAAW2M,YAAcy1V,GAAkCpiW,EAAW/jD,GACtEsX,EAAUR,SAAS5V,KAAK6iD,KAIhC9H,EAAKlkD,UAAU+yZ,gBAAkB,SAAU99V,GACvCA,EAAMhtD,GAAKgtD,EAAMhtD,IAAMqzD,KAEvB,IAAIk4V,EAAc,IAAIh1W,GACtBg1W,EAAY94Y,OAASu6C,EAAMv6C,OAC3B84Y,EAAY74Y,MAAQs6C,EAAMt6C,MAC1B,IAAI84Y,EAA4B,WAAhBx+V,EAAMn3B,MAAsBm3B,EAAM9iB,SAAWJ,GAAakjB,EAAMn3B,OAChF01X,EAAYvrZ,GAAKtD,KAAKsD,GAAK,IAAOgtD,EAAQ,GAC1Cu+V,EAAY5xX,OAASqzB,EAAMrzB,OAC3B4xX,EAAYryZ,KAAOsyZ,EACnB,IAAIpqZ,EAAQ4rD,EAAM5rD,MAclB,OAbAmqZ,EAAYnqZ,OACR05B,KAAM15B,EAAM05B,KAAMstB,YAAahnD,EAAMgnD,YAAaQ,SAAU,KAC5Dz+C,QAAS/I,EAAM+I,QAASk+C,gBAAiBjnD,EAAMinD,gBAAiBC,YAAalnD,EAAMknD,aAEvFijW,EAAY/hW,oBAAsBwD,EAAMxD,oBACxC+hW,EAAY9hW,kBAAoBuD,EAAMvD,kBACtC8hW,EAAY7M,6BAA6B1xV,EAAM3kD,OAAOoB,EAAGujD,EAAM3kD,OAAOqB,EAAG,iBACtD7R,IAAf6E,KAAKgW,YAAuC7a,IAAhB6E,KAAK+V,SACjC84Y,EAAY/M,OAAQ,GAExB+M,EAAY7nW,aAAe,QAC3B6nW,EAAY/3X,WAAUk5B,GAAqBM,EAAO6J,GAAeE,UAC5DrK,GAAqBM,EAAO6J,GAAeC,QAAWpK,GAAqBM,EAAO6J,GAAeyrV,UAC/FiJ,GAGXtvW,EAAKlkD,UAAUuzZ,sBAAwB,SAAUvnW,GAC7CA,EAAW/jD,GAAK+jD,EAAW/jD,IAAMqzD,KACjC,IAAItjD,EAAQg0C,EACR0nW,EAAoB,IAAI5iW,GAC5B4iW,EAAkB5wW,YAAckJ,EAAWlJ,YAC3C4wW,EAAkBh5Y,OAASsxC,EAAWtxC,OACtCg5Y,EAAkB/4Y,MAAQqxC,EAAWrxC,MACrC+4Y,EAAkBj4X,QAAUuwB,EAAW1iD,WACvCoqZ,EAAkBzrZ,GAAKtD,KAAKsD,GAAK,IAAM+jD,EAAW/jD,GAClD,IAAIoB,EAAQ2iD,EAAW3iD,MACnB8nD,EAAOnF,EAAWkF,UAAUC,KAAOnF,EAAWkF,eAAYpxD,EAwB9D,OAvBA4zZ,EAAkBrqZ,OACd05B,KAAM15B,EAAM05B,KAAMstB,YAAahnD,EAAMgnD,YAAaE,YAAalnD,EAAMknD,YACrEC,KAAMnnD,EAAMmnD,KAAMC,aAAcpnD,EAAMonD,aACtCj2B,MAAO22B,EAAOA,EAAK32B,OAASk5X,EAAkBxiW,UAAU12B,MAAQnxB,EAAMmxB,MAAOtG,WAAY7qB,EAAM6qB,WAC/FD,WAAY5qB,EAAM4qB,WAAYJ,SAAUxqB,EAAMwqB,SAAU68B,OAAQrnD,EAAMqnD,OAAQG,SAAU,KAAMz+C,QAAS/I,EAAM+I,QAC7Gk+C,gBAAiBjnD,EAAMinD,gBAAiBK,UAAWtnD,EAAMsnD,UAAWprB,aAAcymB,EAAW3iD,MAAMk8B,aACnGqrB,eAAgBO,EAAOA,EAAKP,gBAAkB8iW,EAAkBxiW,UAAUN,eAAiBvnD,EAAMunD,gBAErG8iW,EAAkBxiW,UAAUC,KAAOnF,EAAWkF,UAAUC,WAAQrxD,EAChE4zZ,EAAkBxiW,UAAU3xB,QAAUysB,EAAWkF,UAAU3xB,cAAWz/B,EACtE4zZ,EAAkBxiW,UAAUN,eAAiB5E,EAAWkF,UAAUN,qBAAkB9wD,EACpF4zZ,EAAkBn0X,QAAU4xB,EAAOA,EAAK5xB,SAAWm0X,EAAkBxiW,UAAUC,KAAOnF,EAAWzsB,aAC9Ez/B,IAAf6E,KAAKgW,QACL+4Y,EAAkB/4Y,MAAQhW,KAAKgW,MAAQqxC,EAAWpqB,OAAOzwB,KAAO66C,EAAWpqB,OAAOxwB,OAEtFsiZ,EAAkB9xX,OAASoqB,EAAWpqB,OACtC8xX,EAAkBjiW,oBAAsBzF,EAAWyF,oBACnDiiW,EAAkBhiW,kBAAoB1F,EAAW0F,kBACjDgiW,EAAkB/M,6BAA6B3uY,EAAM1H,OAAOoB,EAAGsG,EAAM1H,OAAOqB,EAAG,iBAC5D7R,IAAf6E,KAAKgW,YAAuC7a,IAAhB6E,KAAK+V,SACjCg5Y,EAAkBjN,OAAQ,GAE9BiN,EAAkB/nW,aAAe,QAC1B+nW,GAEXxvW,EAAKlkD,UAAU2zZ,kBAAoB,SAAUh8Y,EAASoyG,GAClD,IAAI1yF,EAAO,IAAI06B,GAgBf,OAfA16B,EAAKpvB,GAAK8hH,EAAc9hH,GAAK,QAC7BovB,EAAK3c,OAAS/C,EAAQ+C,OACtB2c,EAAK1c,MAAQhD,EAAQgD,MACrB0c,EAAKoE,QAAUsuF,EAActuF,QAC7BpE,EAAKuK,OAASjqB,EAAQiqB,OACtBvK,EAAKqW,aAAe/1B,EAAQ+1B,aAC5BrW,EAAKhuB,OACD05B,KAAMprB,EAAQorB,KAAMstB,YAAa14C,EAAQ67N,YACzCjjL,YAAa54C,EAAQg9E,aAEzBt9D,EAAKsvX,6BAA6B,GAAK,GAAK,YAC5CtvX,EAAKo6B,oBAAsB,SAC3Bp6B,EAAKq6B,kBAAoB,SACzBr6B,EAAKs0B,aAAe,SACpBt0B,EAAKshC,YAActhC,EAAKshC,aAAe,mCAChCthC,GAEX6sB,EAAKlkD,UAAUqzZ,eAAiB,SAAU17Y,EAASoyG,EAAe+oS,EAAsBj9V,GACpF,IAAI+9V,EAEJ,GADA7pS,EAAchrG,SAAS5V,KAAKxE,KAAKgvZ,kBAAkBh8Y,EAASoyG,IACtC,aAAlBpyG,EAAQmmB,OACR81X,EAAc,IAAIphW,GAAqB7tD,KAAKsD,GAAI4tD,IACpCt2B,QAAU5nB,EAAQ4nB,QAC9Bq0X,EAAYl5Y,OAAS,GACrBk5Y,EAAYj5Y,MAAQ,OAEnB,EACDi5Y,EAAc,IAAIp1W,IACNr9C,KAAOkxC,GAAa16B,GAChC,IAAIk8Y,EAAoB58V,GAAY28V,EAAYzyZ,MAChDyyZ,EAAYl5Y,OACRm5Y,EAAkBn5Y,OAAS,GAAKm5Y,EAAkBn5Y,OAAS,IAAM/C,EAAQwnD,QAAQ7tD,OAASqG,EAAQwnD,QAAQ9tD,KAC9GuiZ,EAAYj5Y,MACRk5Y,EAAkBl5Y,MAAQ,GAAKk5Y,EAAkBl5Y,MAAQ,IAAMhD,EAAQwnD,QAAQhuD,KAAOwG,EAAQwnD,QAAQ/tD,OAE9GwiZ,EAAY3rZ,GAAK8hH,EAAc9hH,GAAK,SACpC2rZ,EAAYniW,oBAAsB,SAClCmiW,EAAYliW,kBAAoB,SAChCkiW,EAAYn4X,QAAUsuF,EAActuF,QACpCm4X,EAAYn4X,QAAUsuF,EAActuF,QACpCm4X,EAAYvqZ,OACR05B,KAAM,QAASstB,YAAa14C,EAAQ67N,YACpCjjL,YAAa54C,EAAQg9E,aAEzBi/T,EAAYjN,6BAA6B,GAAK,GAAK,YACnDiN,EAAYjoW,aAAe,SAC3BioW,EAAYj7V,YAAcoxD,EAAcpxD,aAAe,mCACvDoxD,EAAchrG,SAAS5V,KAAKyqZ,IAEhC7iU,IACI/jF,KAAe09Y,KAChBxmW,EAAKlkD,UAAW,mBAAe,GAClC+wF,IACIllF,EAAS,IACVq4C,EAAKlkD,UAAW,eAAW,GAC9B+wF,IACIllF,EAAS,IACVq4C,EAAKlkD,UAAW,eAAW,GAC9B+wF,IACIrkF,GAAUgF,EAAG,GAAKC,EAAG,IAAOmlC,KAC7BoN,EAAKlkD,UAAW,aAAS,GAC5B+wF,IACIllF,KACDq4C,EAAKlkD,UAAW,aAAS,GAC5B+wF,IACIllF,KACDq4C,EAAKlkD,UAAW,cAAU,GAC7B+wF,IACIllF,KACDq4C,EAAKlkD,UAAW,gBAAY,GAC/B+wF,IACIllF,KACDq4C,EAAKlkD,UAAW,iBAAa,GAChC+wF,IACIllF,KACDq4C,EAAKlkD,UAAW,gBAAY,GAC/B+wF,IACIllF,KACDq4C,EAAKlkD,UAAW,iBAAa,GAChC+wF,IACIllF,EAAS,IACVq4C,EAAKlkD,UAAW,mBAAe,GAClC+wF,IACIrkF,KAAY8lU,KACbtuR,EAAKlkD,UAAW,aAAS,GAC5B+wF,IACIllF,EAAS,gBACVq4C,EAAKlkD,UAAW,uBAAmB,GACtC+wF,IACIllF,EAAS,SACVq4C,EAAKlkD,UAAW,mBAAe,GAClC+wF,IACIllF,EAAS,IACVq4C,EAAKlkD,UAAW,mBAAe,GAClC+wF,IACIllF,KACDq4C,EAAKlkD,UAAW,YAAQ,GAC3B+wF,IACIlkF,EAAegkZ,KAChB3sW,EAAKlkD,UAAW,aAAS,GAC5B+wF,IACIllF,EAAS,OACVq4C,EAAKlkD,UAAW,eAAW,GAC9B+wF,IACIllF,EAASo3C,GAAgBytW,UAC1BxsW,EAAKlkD,UAAW,mBAAe,GAClC+wF,IACIrkF,KAAYs3C,KACbE,EAAKlkD,UAAW,cAAU,GAC7B+wF,IACIllF,KACDq4C,EAAKlkD,UAAW,gBAAY,GACxBkkD,GACT+oW,ICr5BEz8T,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAkB5DwlB,GAAuB,SAAU8pC,GAKjC,SAAS9pC,EAAM5vC,EAAShS,GACpB,IAAIjB,EAAQ2sF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAGnD,OAFAD,EAAM4L,OAAS,EACf5L,EAAM+jD,MAAQ,EACP/jD,EA8VX,OAtWA8rF,GAAUjpC,EAAO8pC,GAcjB9pC,EAAMvnD,UAAUoX,UAAY,WACxBzS,KAAKogH,eACLpgH,KAAKykB,cAMTm+B,EAAMvnD,UAAUsyG,OAAS,WACrB3tG,KAAKmvZ,uBAMTvsW,EAAMvnD,UAAU0kC,cAAgB,WAC5B,MAAO,SAMX6iB,EAAMvnD,UAAUiX,QAAU,WACtBtS,KAAKogH,eACLpgH,KAAK+N,OAAO,cACZ2+E,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKgB,QAAQ8C,UAAUS,OAAO,YAMlCq+C,EAAMvnD,UAAU+yG,eAAiB,WAE7B,OAAOpuG,KAAK4uG,cADK,YAOrBhsD,EAAMvnD,UAAU0tF,kBAAoB,SAAUiF,EAASC,GACnD,IAAK,IAAI7vF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,GAAU5vF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,SACL,IAAK,WACL,IAAK,eACL,IAAK,gBACL,IAAK,cACL,IAAK,YACD4B,KAAKijD,iBAKrBL,EAAMvnD,UAAU8zZ,oBAAsB,WAClCnvZ,KAAKgB,QAAQ0D,MAAMsnD,UAAY,OAC/BhsD,KAAKovZ,mBACLpvZ,KAAKijD,eAETL,EAAMvnD,UAAU+zZ,iBAAmB,WAC/B,IAAIhtW,EAAgBpiD,KAAKqiD,mBACrBnhD,EAAMV,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,gBASpD,OARKpC,KACDA,EAAMV,SAASW,cAAc,QACzBqC,aAAa,KAAMxD,KAAKgB,QAAQsC,GAAK,gBACzCpC,EAAIwD,MAAMqR,OAASqsC,EAAcrsC,OAAS,KAC1C7U,EAAIwD,MAAMsR,MAAQosC,EAAcpsC,MAAQ,KACxC9U,EAAIwD,MAAM2qZ,SAAW,OACrBrvZ,KAAKgB,QAAQW,YAAYT,IAEtBA,GAEX0hD,EAAMvnD,UAAU4nD,YAAc,WAC1B,IAAIf,EAAYliD,KAAKmiD,eACjBC,EAAgBpiD,KAAKqiD,mBACrB5lD,EAAS,EACTkP,EAAS,EACTqpB,EAAgB,IAAIvF,GACpBxS,EAAMjd,KAAKsvZ,YAAYltW,GAC3B,GAAInlC,IACAxgB,EAASuD,KAAKvD,OACdu4B,EAAcjf,OAASmsC,EACvBv2C,EAAS3L,KAAK2L,OACVlP,GAAUA,IAAW2vE,EAAAA,GAAU,CAC/B,IAAImjV,EAAa9yZ,EAASuD,KAAK6iD,aAC3B2sW,EAAa7jZ,EACjB3L,KAAKyvZ,eAAeD,EAAaD,EAAaljZ,KAAKE,IAAIijZ,GAAcvyY,EAAKilC,KAItFU,EAAMvnD,UAAUo0Z,eAAiB,SAAUlyZ,EAAOyhB,EAAK/B,EAAKilC,GAGxD,IAFA,IAAIwtW,EAAMnyZ,EACNoyZ,GAAUA,MAAO,GACdD,EAAM1wY,GAAK,CACd,IAAI4wY,EAAe5vZ,KAAK6vZ,cAAcH,EAAKzyY,GACvC2yY,IACA3yY,EAAItb,YAAYiuZ,EAAarlX,SAC7BmlX,EAAM1vZ,KAAK8vZ,cAAcvyZ,EAAOyhB,EAAK4wY,EAAcF,EAAKC,EAAOztW,MAI3EU,EAAMvnD,UAAUy0Z,cAAgB,SAAUvyZ,EAAOyhB,EAAK4wY,EAAcF,EAAKC,EAAOztW,GAC5E,IAAI6tW,EAAW/vZ,KAAKgwZ,mBAAmBhwZ,KAAK8jD,OACxC4rW,IAAQnyZ,GACRyC,KAAKuoB,WAAalc,KAAKkT,MAAMhiB,EAAQwyZ,GAAYA,EAAW/vZ,KAAK8jD,MACjE9jD,KAAKuoB,WAAcvoB,KAAKuoB,WAAa,GAAO,EAAIqO,OAAQ52B,KAAe,WAAEmf,QAAQ,IAAMnf,KAAKuoB,WAC5FqnY,EAAav8Y,MAAM2I,YAAchc,KAAKuoB,WAAWrb,WACjDlN,KAAKiwZ,cAAgBP,EAAM1vZ,KAAKuoB,WAAavoB,KAAK8jD,MACzB,eAArB9jD,KAAK44B,YACL54B,KAAKokD,aAAe7mD,EAAQmyZ,EAG5B1vZ,KAAKskD,aAAe/mD,EAAQmyZ,IAIhC1vZ,KAAKuoB,WAAcmnY,EAAM1vZ,KAAK8jD,MAC9B9jD,KAAKuoB,WAAcvoB,KAAKuoB,WAAa,GAAO,EAAIqO,OAAQ52B,KAAe,WAAEmf,QAAQ,IAAMnf,KAAKuoB,WAC5FqnY,EAAav8Y,MAAM2I,YAAchc,KAAKuoB,WAAWrb,YAErDlN,KAAKkwZ,gBAAgBN,EAAc1tW,GACnC,IAAIguC,EAAkC,eAArBlwF,KAAK44B,YAAkC+2X,EAAMA,MAAQ,GAAO,OAAW,QAAUA,EAAMA,MAAQ,IAIhH,OAHAC,EAAarlX,QAAQ/mC,aAAa,YAAa,aAAe0sF,EAAY,KAC1Ey/T,EAAMA,OAASI,EACfL,GAAOK,GAGXntW,EAAMvnD,UAAU60Z,gBAAkB,SAAUN,EAAc1tW,GACtD,IAAI8P,EAAO49V,EAAarlX,QAAQ2mG,UAAU3+E,UACtCtQ,EAAqC,eAArBjiD,KAAK44B,YACrBu3X,EAA0C,kBAAvBnwZ,KAAKowZ,cACxBrjZ,EAAIk1C,EAAe,EAAI,EACvBj1C,EAAIi1C,EAAgBkuW,EAAmBjuW,EAAY,UAClDA,EAAY,MAAiB8P,EAAKj8C,OACnCm6E,EAAYigU,IAAqBn+V,EAAKh8C,MAAQ,GAAK,KAAQksC,EAAY,EAAK8P,EAAKj8C,UAC9Ei8C,EAAKh8C,MAAQ,GAAK,KAAQksC,EAAY,EAAK8P,EAAKj8C,OAAS,GAC5Du+I,EAAOryG,GAAiBl1C,EAAKA,EAAGC,EAAKA,IACnCD,EAAKA,EAAGC,EAAKA,EAAGK,UAAa,wBAA+B6iF,EAAY,KAC9E36B,GAAgBq6V,EAAarlX,QAAQ2mG,UAAWojB,IAEpD1xG,EAAMvnD,UAAUw0Z,cAAgB,SAAUH,EAAKzyY,GAC3C,IAAIstB,EAAUvqC,KAAKqwZ,eAAeX,EAAKzyY,GAEvC,OAASstB,QAASA,EAASl3B,MADfrT,KAAKswZ,gBAAgBrzY,EAAKstB,KAG1CqY,EAAMvnD,UAAUg1Z,eAAiB,SAAUX,EAAKzyY,GAC5C,IAAI4+U,EACA00D,EAEAlzX,EADAwlB,EAAe7iD,KAAKgwZ,mBAAmBhwZ,KAAK8jD,OAGhDzmB,EAAIi4B,GAAiB,KADRo1E,MAAS,oBAEtB,IAAK,IAAIvuI,EAAI,EAAGA,EAAI6D,KAAKmC,SAAUhG,IAC/Bo0Z,EAAe1tW,EAAe7iD,KAAKmC,SACnC05V,EAAO77V,KAAK8wI,WAAW7zH,EAAKszY,EAAcp0Z,EAAI,EAAGuzZ,GACjDryX,EAAE17B,YAAYk6V,GAElB,OAAOx+T,GAEXulB,EAAMvnD,UAAUm1Z,aAAe,SAAUvzY,EAAKszY,EAAc9zZ,GACxD,IAAIomD,EAAe7iD,KAAKgwZ,mBAAmBhwZ,KAAK8jD,OAC5C5B,EAAYliD,KAAKmiD,eAGrB,OAFAouW,GAA+B9zZ,EAAS,EACxCA,EAAW8zZ,EAAe1tW,GAAkB,EAAKX,EAAwB,GAAZA,GAGjEU,EAAMvnD,UAAUy1I,WAAa,SAAU7zH,EAAKszY,EAAc9zZ,EAAQizZ,GAC9D,IACIrpW,EAGApmD,EACAq0J,EAHAm8P,EAAYzwZ,KAAKwwZ,aAAavzY,EAAKszY,EAAc9zZ,GACjDylD,EAAYliD,KAAKmiD,eAGjBF,EAAqC,eAArBjiD,KAAK44B,YACrBu3X,EAA0C,kBAAvBnwZ,KAAKowZ,cACxBpsW,EAAcC,GAAYjkD,KAAKgkD,aACnC/jD,GAAS0iD,WATLA,EASmB87S,WAAYgyD,EAAWF,aAAgBvwZ,KAAK6iD,aAAe7iD,KAAKmC,UAAa1F,EAAS,IACzGunD,GACAA,EAAY/jD,GAEhBwwZ,EAAYxwZ,EAAKw+V,WACjB,IAAItrU,EAAQo9X,GAAgB9zZ,EAAS,GAQrC,OAHA63J,GAAS94H,GAJAymB,EAAe9uB,EAASg9X,EAAkBjuW,EAAY,EAI5CzmB,GAFVwmB,EAAgBkuW,EAAkBjuW,EAAaA,GAAaA,EAAYuuW,GAAet9X,EAEnEuI,GAHpBumB,EAAe9uB,EAASg9X,EAAmBjuW,EAAYuuW,EAAcvuW,GAAaA,EAAYuuW,GAGhE90X,GAD9BsmB,EAAgBkuW,EAAmBjuW,EAAYuuW,EAAa,EAAKt9X,EACzB+R,eAAgB,IAAK5G,OAAU,UAChF+nB,EAAOiP,GAAiB,OAAQg/F,IAC3B9wJ,aAAa,QAAS,gBACpB6iD,GAEXzD,EAAMvnD,UAAUi1Z,gBAAkB,SAAUrzY,EAAKstB,GAC7C,IAAIzb,EACJ,GAAIyb,EAAS,CAETzb,EAAOwmC,GAAiB,QADXo1E,MAAS,uBAEtBngG,EAAQ5oC,YAAYmtB,GAExB,OAAOA,GAMX8zB,EAAMvnD,UAAU20Z,mBAAqB,SAAUlsW,GAC3C,GAA0B,MAAtB9jD,KAAK6iD,aACL,OAAO7iD,KAAK6iD,aAEhB,IAEI3hD,EADAwvZ,EAAY,EAOhB,IAFAxvZ,EAFY,IAGZA,EAHY,IACCmL,KAAKs9D,IAAI,EAAGt9D,KAAK4xB,MAAM5xB,KAAKwkB,IAAIizB,GAASz3C,KAAKwkB,IAAI,KAGxD3vB,EAAM,KACTwvZ,GAAa,GACbxvZ,GAAO,GAEX,KAAOA,EAAM,IACTwvZ,GAAa,GACbxvZ,GAAO,GAKX,OAHIA,GAhBO,IAgBQA,EAhBR,IAgBuB,IAC9BA,EAjBO,GAiBDmL,KAAK4xB,MAAM/8B,EAjBV,KAmBJA,EAAM4iD,EAAQ4sW,GAEzB9tW,EAAMvnD,UAAUs1Z,iBAAmB,SAAUC,EAAU5tW,EAAUsxG,GAC7D,IAAIjuG,EAQJ,OAPIrD,KACAqD,EAAOuqW,EAAS3hY,eAAe+zB,EAAS1/C,GAAK,aAEzC+iD,EAAK5lD,WAAW6E,YAAY+gD,GAEhCA,EAAOiP,GAAiB,OAAQg/F,IAE7BjuG,GAOXzD,EAAMvnD,UAAUw1Z,gBAAkB,SAAU7tW,EAAUvxB,EAAc9lB,GAChE,IAAIilZ,EACA1uW,EACA4B,EACAk7B,EACA7iF,EACAm4J,EACAjuG,EACApE,EAAoC,eAArBjiD,KAAK44B,YACpBk4X,EAAmB9tW,EAASzhD,qBAAqB,OACrD,IAAKpF,EAAI,EAAGA,EAAI20Z,EAAiBr0Z,OAAQN,IAAK,CACtC20Z,EAAiB30Z,KACjBy0Z,EAAWE,EAAiB30Z,IAEhC,MAEJ,GAAIy0Z,EAAU,CACV1uW,EAAYliD,KAAKmiD,eACjBmyG,GACIhxJ,GAAM0/C,EAAS1/C,GAAK,UAAWk4B,GAAM,EAAGC,GAAM,EAAGC,GAAOumB,EAAe,EAAIC,EAC3EvmB,GAAOsmB,EAAeC,EAAY,EAAI5jB,OAAUt+B,KAAK+wZ,YAAa7rX,eAAgB,IAClFwlG,MAAS,oBAEbrkF,EAAOrmD,KAAK2wZ,iBAAiBC,EAAU5tW,EAAUsxG,GACjDxwG,EAAQ9jD,KAAK8jD,MACbk7B,EAAOh/E,KAAK2L,OAAS3L,KAAKiwZ,cAC1B,IACIrlU,GADQ3oC,EAAexwB,EAAa1kB,EAAI0kB,EAAazkB,GACrC82C,EAASn4C,EAASqzE,EACtC34B,EAAK7iD,aAAa,YAAa,cAAgBy+C,EAAiB2oC,EAAO,GAAO,OAAW,QAAUA,EAAO,KAAS,KACnHgmU,EAASjvZ,YAAY0kD,KAG7BzD,EAAMvnD,UAAUgnD,iBAAmB,WAC/B,OAAO,IAAI5yB,GAAKzvB,KAAKgB,QAAUhB,KAAKgB,QAAQ4K,wBAAwBoK,MAAQ,EAAGhW,KAAKgB,QAAUhB,KAAKgB,QAAQ4K,wBAAwBmK,OAAS,IAEhJ6sC,EAAMvnD,UAAU8mD,aAAe,WAC3B,OAAOniD,KAAK2yB,WAEhBiwB,EAAMvnD,UAAUi0Z,YAAc,SAAUltW,GACpC,IAAI4uW,EAEA/zY,EADAilC,EAAYliD,KAAKmiD,eAErB,GAAIniD,KAAKgB,UACLgwZ,EAAaxwZ,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,iBACvC,CAQZ,GADA2Z,EAAMq4C,GAAiB,OALnBhyD,GAAMtD,KAAKgB,QAAQsC,GAAK,aACxB0S,MAA4B,eAArBhW,KAAK44B,YAAgCwpB,EAAcpsC,MAAQ,IAAOksC,EAAY,KACrFnsC,OAA6B,eAArB/V,KAAK44B,YAA+BspB,EAAaE,EAAcrsC,OAAS,IAAO,KACvFrR,MAAO,sBAGPssZ,EAAWz/Y,WAAW9U,OAAS,EAC/B,IAAK,IAAIN,EAAI60Z,EAAWz/Y,WAAW9U,OAAS,EAAGN,GAAK,EAAGA,IACnD60Z,EAAWz/Y,WAAWpV,GAAGsE,WAAW6E,YAAY0rZ,EAAWz/Y,WAAWpV,IAG9E60Z,EAAWrvZ,YAAYsb,GAG/B,OAAOA,GAKX2lC,EAAMvnD,UAAUopB,WAAa,aAM7Bm+B,EAAMvnD,UAAU+kH,aAAe,aAG/Bh0B,IACIllF,EAAS,IACV07C,EAAMvnD,UAAW,gBAAY,GAChC+wF,IACIllF,EAAS,MACV07C,EAAMvnD,UAAW,oBAAgB,GACpC+wF,IACIllF,EAAS,eACV07C,EAAMvnD,UAAW,mBAAe,GACnC+wF,IACIllF,EAAS,kBACV07C,EAAMvnD,UAAW,qBAAiB,GACrC+wF,IACIllF,EAAS,QACV07C,EAAMvnD,UAAW,mBAAe,GACnC+wF,IACIllF,EAAS,KACV07C,EAAMvnD,UAAW,iBAAa,GACjC+wF,IACIllF,EAAS,OACV07C,EAAMvnD,UAAW,mBAAe,GACnC+wF,IACIllF,EAAS,MACV07C,EAAMvnD,UAAW,cAAU,GACvBunD,GACTuqD,I7VklBS8jT,GAAgB,SAAUl0Z,GAWjC,OAVIA,IAIIA,OAHiB5B,IAAjB4B,EAAIwyC,eAA8Cp0C,IAApB4B,EAAIiyC,kBACjB7zC,IAAjB4B,EAAI2uZ,eAA8CvwZ,IAApB4B,EAAIk6C,kBACrB97C,IAAb4B,EAAI2J,KACEw3C,GAGAqB,IAGPxiD,G8V79BPmxF,GAAgC,WAChC,SAASA,KAkjBT,OAhjBAA,EAAeO,WAAa,SAAUu6S,GAClC,OAAOA,EAAOv6S,WAAW,OAE7BP,EAAeQ,cAAgB,SAAUs6S,EAAQhzX,EAAOD,GAChDizX,IACAA,EAAOxlY,aAAa,QAASwS,EAAM9I,YACnC87X,EAAOxlY,aAAa,SAAUuS,EAAO7I,cAI7CghF,EAAe7yF,UAAU61Z,eAAiB,SAAUl+Y,EAASw7E,EAAKzhF,EAAGC,GACjE,IAAIV,EACA6T,EACAgxY,EACJ,GAA8B,SAA1Bn+Y,EAAQk5C,SAASxlD,KAAiB,CAClC,IAAK,IAAIvK,EAAI,EAAGA,EAAI6W,EAAQk5C,SAASklW,MAAM30Z,OAAQN,IAC/CmQ,OAAcnR,IAARmR,EAAoB0G,EAAQk5C,SAASklW,MAAMj1Z,GAAGwP,OAASU,KAAKC,IAAIA,EAAK0G,EAAQk5C,SAASklW,MAAMj1Z,GAAGwP,QACrGwU,OAAchlB,IAARglB,EAAoBnN,EAAQk5C,SAASklW,MAAMj1Z,GAAGwP,OAASU,KAAK8T,IAAIA,EAAKnN,EAAQk5C,SAASklW,MAAMj1Z,GAAGwP,QAEzG,GAA8B,WAA1BqH,EAAQk5C,SAASxlD,KAAmB,CACpC,IAAI+wB,EAASzkB,EAAQk5C,SACrBilW,EAAM3iU,EAAI4C,qBAAqBrkF,EAAI0qB,EAAO+D,GAAIxuB,EAAIyqB,EAAOgE,GAAI1uB,EAAI0qB,EAAOiE,GAAI1uB,EAAIyqB,EAAOkE,QAEtF,CACD,IAAI01X,EAASr+Y,EAAQk5C,SACrBilW,EAAM3iU,EAAIiD,qBAAqB1kF,EAAIskZ,EAAOt2S,GAAI/tG,EAAIqkZ,EAAOr2S,GAAI,EAAGjuG,EAAIskZ,EAAOz3X,GAAI5sB,EAAIqkZ,EAAOx3X,GAAIw3X,EAAOj0X,GAEzG,IAASjhC,EAAI,EAAGA,EAAI6W,EAAQk5C,SAASklW,MAAM30Z,OAAQN,IAAK,CACpD,IAAIi/G,EAASpoG,EAAQk5C,SAASklW,MAAMj1Z,GAChCwP,EAASwU,EAAM,GAAK7T,EAAM8uG,EAAOzvG,SAAW,EAAIW,GAAO8uG,EAAOzvG,OAASW,EAC3E6kZ,EAAIt/T,aAAalmF,EAAQyvG,EAAOvlF,OAEpC24D,EAAIkB,UAAYyhU,EAEpB,OAAO3iU,GAEXN,EAAe7yF,UAAUi2Z,aAAe,SAAUt+Y,EAASg2X,EAAQlhW,QAC5C,IAAfA,IAAyBA,EAAa,MAC1C,IAAI0mD,EAAMN,EAAeO,WAAWu6S,GACpCx6S,EAAIQ,OACJR,EAAIS,YACJT,EAAIM,YAAcN,EAAIkB,UAAY18E,EAAQ+gD,OAAOl+B,MACjD24D,EAAIgB,YAAcx8E,EAAQ+gD,OAAOtmD,QACjC,IACI0lB,EAAQgf,GAAM9kC,WADFN,EAAG,EAAGC,EAAG,GACYgG,EAAQ+gD,OAAOpyC,MAAO3O,EAAQ+gD,OAAOzhB,UACtEkmS,EAASxlU,EAAQjG,EAAIomB,EAAMpmB,EAC3B0rU,EAASzlU,EAAQhG,EAAImmB,EAAMnmB,EAC3B4mD,EAAS4kR,EAASxlU,EAAQgD,MAAQhD,EAAQ4gD,OAC1CC,EAAS4kR,EAASzlU,EAAQ+C,OAAS/C,EAAQ6gD,OAC/C7zD,KAAKuxZ,cAAcvoB,EAAQh2X,EAAQ2O,MAAOiyC,EAAQC,GAC9C/rB,GACA0mD,EAAI0B,UAAUsoP,EAAQC,GACtBz4U,KAAKsjF,WAAW0lT,EAAQh2X,EAAS80B,GACjC0mD,EAAI0B,WAAWsoP,GAASC,KAGxBjqP,EAAI97D,KAAK8lT,EAAQC,EAAQzlU,EAAQgD,MAAOhD,EAAQ+C,QAChDy4E,EAAImB,SAAS6oP,EAAQC,EAAQzlU,EAAQgD,MAAOhD,EAAQ+C,SAExDy4E,EAAIpwD,OACJowD,EAAIlwD,SACJkwD,EAAIqB,YACJrB,EAAIY,WAERlB,EAAeI,aAAe,SAAUhrF,EAAI0S,EAAOD,GAC/C,IAAIw4E,EAAY/tF,SAASW,cAAc,UAGvC,OAFAotF,EAAU/qF,aAAa,KAAMF,GAC7BtD,KAAK0uF,cAAcH,EAAWv4E,EAAOD,GAC9Bw4E,GAGXL,EAAe7yF,UAAU0pQ,SAAW,SAAUikI,EAAQtkY,GAClD,IAAI8pF,EAAMN,EAAeO,WAAWu6S,GACjB,SAAftkY,EAAM05B,OACN15B,EAAM05B,KAAO,eAEI,SAAjB15B,EAAM45B,SACN55B,EAAM45B,OAAS,eAEnBkwD,EAAIM,YAAcpqF,EAAM45B,OACxBkwD,EAAIG,UAAYjqF,EAAMknD,YACI,IAAtBlnD,EAAMknD,cACN4iC,EAAIM,YAAc,eAEtBN,EAAIgB,YAAc9qF,EAAM+I,QACxB,IAAIqmD,KACApvD,EAAMovD,YACNA,EAAY9zD,KAAKwxZ,eAAe9sZ,EAAMovD,YAE1C06B,EAAIK,YAAY/6B,GACZpvD,EAAMwnD,UAAoC,SAAxBxnD,EAAMwnD,SAASxlD,KACjC1G,KAAKkxZ,eAAexsZ,EAAO8pF,EAAK,EAAG,GAGnCA,EAAIkB,UAAYhrF,EAAM05B,MAG9B8vD,EAAe7yF,UAAUk2Z,cAAgB,SAAUvoB,EAAQrnX,EAAO5U,EAAGC,GACjE,IAAIwhF,EAAMN,EAAeO,WAAWu6S,GACpCx6S,EAAI0B,UAAUnjF,EAAGC,GACjBwhF,EAAI5tE,OAAOe,EAAQtV,KAAKkR,GAAK,KAC7BixE,EAAI0B,WAAWnjF,GAAIC,IAEvBkhF,EAAe7yF,UAAUo2Z,aAAe,SAAUzoB,EAAQl6W,GACtD,IAAI0/D,EAAMN,EAAeO,WAAWu6S,GAChCj6W,EAAO,GACPD,EAAKi9B,SACLh9B,GAAQ,WAERD,EAAK+8B,OACL98B,GAAQ,SAEZA,GAASD,EAAa,SAAI,MAC1BC,GAAQD,EAAKQ,WACbk/D,EAAIz/D,KAAOA,GAEfm/D,EAAe7yF,UAAUm2Z,eAAiB,SAAU19V,GAIhD,IAAK,IAHD49V,KACA7jQ,GAAwC,IAA5B/5F,EAAUv1D,QAAQ,KAAc,IAAM,IAE7CH,EAAK,EAAGuzZ,EADI79V,EAAU52D,MAAM2wJ,GACezvJ,EAAKuzZ,EAAiBl1Z,OAAQ2B,IAAM,CACpF,IAAIjC,EAAIw1Z,EAAiBvzZ,GACzBszZ,EAAOltZ,KAAKoyB,OAAOz6B,IAEvB,OAAOu1Z,GAGXxjU,EAAe7yF,UAAUipC,cAAgB,SAAU0kW,EAAQh2X,GACvD,IAAwB,IAApBA,EAAQ8jB,QACR,GAAI9jB,EAAQ+1B,aACR/1B,EAAQxW,KAAOssC,GAAiB91B,EAAQ+1B,aAAc/1B,EAAQ+C,OAAQ/C,EAAQgD,OAC9EhW,KAAKw1B,SAASwzW,EAAQh2X,OAErB,CACD,IAAIw7E,EAAMN,EAAeO,WAAWu6S,GAChCh2X,EAAQ+gD,QACR/zD,KAAKsxZ,aAAat+Y,EAASg2X,GAE/Bx6S,EAAIQ,OACJR,EAAIS,YACej8E,EAAQ+1B,aAA3B,IACI6qB,EAAS5gD,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQ4gD,OAC7CC,EAAS7gD,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQ6gD,OAClD7zD,KAAKuxZ,cAAcvoB,EAAQh2X,EAAQ2O,MAAOiyC,EAAQC,GAClD7zD,KAAK+kQ,SAASikI,EAAQh2X,GACtBw7E,EAAI97D,KAAK1f,EAAQjG,EAAGiG,EAAQhG,EAAGgG,EAAQgD,MAAOhD,EAAQ+C,QACtDy4E,EAAImB,SAAS38E,EAAQjG,EAAGiG,EAAQhG,EAAGgG,EAAQgD,MAAOhD,EAAQ+C,QAC1Dy4E,EAAIpwD,OACJowD,EAAIlwD,SACJkwD,EAAIqB,YACJrB,EAAIY,YAqChBlB,EAAe7yF,UAAUm6B,SAAW,SAAUwzW,EAAQh2X,GAClD,IAAI80B,KAEJA,EAAawB,GADbxB,EAAaD,GAAgB70B,EAAQxW,OAEjCwW,EAAQ+gD,QACR/zD,KAAKsxZ,aAAat+Y,EAASg2X,EAAQlhW,GAEvC,IAAI0mD,EAAMN,EAAeO,WAAWu6S,GACpCx6S,EAAIQ,OACJR,EAAIS,YACJ,IAAIp7B,EAAS7gD,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQ6gD,OAC9CD,EAAS5gD,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQ4gD,OACjD5zD,KAAKuxZ,cAAcvoB,EAAQh2X,EAAQ2O,MAAOiyC,EAAQC,GAClD7zD,KAAK+kQ,SAASikI,EAAQh2X,GACtBw7E,EAAI0B,UAAUl9E,EAAQjG,EAAGiG,EAAQhG,GACjChN,KAAKsjF,WAAW0lT,EAAQh2X,EAAS80B,GACjC0mD,EAAIpwD,OACJowD,EAAI0B,WAAWl9E,EAAQjG,GAAIiG,EAAQhG,GACnCwhF,EAAIlwD,SACJkwD,EAAIY,WAERlB,EAAe7yF,UAAUioF,WAAa,SAAU0lT,EAAQh2X,EAAS80B,GAC7D,IAAwB,IAApB90B,EAAQ8jB,QAAkB,CAC1B,IASImE,EATAuzD,EAAMN,EAAeO,WAAWu6S,GAChCz/V,OAAK,EACLC,OAAK,EACLhO,OAAK,EACLC,OAAK,EACLC,OAAK,EACLC,OAAK,EACL5uB,OAAI,EACJC,OAAI,EAEJ7Q,OAAI,EAEJy1Z,EAAO9pX,EACX,IAAK/6B,EAAI,EAAGC,EAAI,EAAG7Q,EAAI,EAAG8+B,EAAW22X,EAAKn1Z,OAAQN,EAAI8+B,IAAY9+B,EAAG,CACjE,IACIktC,EADMuoX,EAAKz1Z,GAEX+rC,EAAOmB,EAAIlB,QAmBf,OAlBI,OAAQkB,IACR7N,EAAK6N,EAAI7N,IAET,OAAQ6N,IACR3N,EAAK2N,EAAI3N,IAET,OAAQ2N,IACR5N,EAAK4N,EAAI5N,IAET,OAAQ4N,IACR1N,EAAK0N,EAAI1N,IAET,MAAO0N,IACPt8B,EAAIs8B,EAAIt8B,GAER,MAAOs8B,IACPr8B,EAAIq8B,EAAIr8B,GAEJk7B,GACJ,IAAK,IACDsmD,EAAIU,OAAOniF,EAAGC,GACdq8B,EAAIt8B,EAAIA,EACRs8B,EAAIr8B,EAAIA,EACR,MACJ,IAAK,IACDwhF,EAAIW,OAAOpiF,EAAGC,GACdq8B,EAAIt8B,EAAIA,EACRs8B,EAAIr8B,EAAIA,EACR,MACJ,IAAK,IACDwhF,EAAI8B,cAAc90D,EAAIC,EAAIC,EAAIC,EAAI5uB,EAAGC,GACrCq8B,EAAIt8B,EAAIA,EACRs8B,EAAIr8B,EAAIA,EACRq8B,EAAI7N,GAAKA,EACT6N,EAAI5N,GAAKA,EACT4N,EAAI3N,GAAKA,EACT2N,EAAI1N,GAAKA,EACT,MACJ,IAAK,IACD6yD,EAAIqjU,iBAAiBr2X,EAAIC,EAAI1uB,EAAGC,GAChCq8B,EAAIt8B,EAAIA,EACRs8B,EAAIr8B,EAAIA,EACRq8B,EAAI7N,GAAKA,EACT6N,EAAI5N,GAAKA,EACT,MACJ,IAAK,IACD,IAAIgH,EAAY8G,EAAZ9G,EAAmB+G,EACnB9P,EAAK2P,EAAIf,GACT3O,EAAK0P,EAAId,GACTupX,EAAgBzoX,EAAI1nB,OAAStV,KAAKkR,GAAK,KACvCirB,EAAWa,EAAIb,SACfC,EAAQY,EAAIZ,MACZspX,EAAUhlZ,EAAVglZ,EAAgB/kZ,EAChBglZ,GACAjlZ,EAAGV,KAAKwV,IAAIiwY,IAAkBrvX,EAASsvX,GAAQ,EAAM1lZ,KAAKyV,IAAIgwY,IAAkBrvX,EAASsvX,GAAQ,EACjG/kZ,GAAIX,KAAKyV,IAAIgwY,IAAkBrvX,EAASsvX,GAAQ,EAAM1lZ,KAAKwV,IAAIiwY,IAAkBrvX,EAASsvX,GAAQ,GAElG3pX,EAAI/7B,KAAKs9D,IAAIqoV,EAAMjlZ,EAAG,GAAKV,KAAKs9D,IAAIjwC,EAAI,GAAKrtB,KAAKs9D,IAAIqoV,EAAMhlZ,EAAG,GAAKX,KAAKs9D,IAAIhwC,EAAI,GACjFyO,EAAI,IACJ1O,GAAMrtB,KAAKQ,KAAKu7B,GAChBzO,GAAMttB,KAAKQ,KAAKu7B,IAEpB,IAAI/hB,EAAKha,KAAKs9D,IAAIhwC,EAAI,GAAKttB,KAAKs9D,IAAIqoV,EAAMjlZ,EAAG,GACzCs7B,GAAKG,IAAaC,GAAS,EAAI,GAAKp8B,KAAKQ,MAAOR,KAAKs9D,IAAIjwC,EAAI,GAAKrtB,KAAKs9D,IAAIhwC,EAAI,GAAOttB,KAAKs9D,IAAIjwC,EAAI,GAAKrtB,KAAKs9D,IAAIqoV,EAAMhlZ,EAAG,GAAMqZ,IAC/Hha,KAAKs9D,IAAIjwC,EAAI,GAAKrtB,KAAKs9D,IAAIqoV,EAAMhlZ,EAAG,GAAKX,KAAKs9D,IAAIhwC,EAAI,GAAKttB,KAAKs9D,IAAIqoV,EAAMjlZ,EAAG,KAC9EotC,MAAM9R,KACNA,EAAI,GAER,IAAI4pX,EAAW5pX,EAAI3O,EAAKs4X,EAAMhlZ,EAAI2sB,EAA9Bs4X,EAAqC5pX,GAAK1O,EAAKq4X,EAAMjlZ,EAAI2sB,EACzDw4X,GACAnlZ,GAAI01B,EAASsvX,GAAQ,EAAM1lZ,KAAKwV,IAAIiwY,GAAiBG,EAAQ5lZ,KAAKyV,IAAIgwY,GAAiBG,EACvFjlZ,GAAIy1B,EAASsvX,GAAQ,EAAM1lZ,KAAKyV,IAAIgwY,GAAiBG,EAAQ5lZ,KAAKwV,IAAIiwY,GAAiBG,GAEvFz3W,EAAKx6C,KAAKs7C,GAAG,EAAG,KAAM02W,EAAMjlZ,EAAIklZ,GAASv4X,GAAKs4X,EAAMhlZ,EAAIilZ,GAASt4X,IACjEm8F,IAAMk8R,EAAMjlZ,EAAIklZ,GAASv4X,GAAKs4X,EAAMhlZ,EAAIilZ,GAASt4X,GACjD2/H,KAAO04P,EAAMjlZ,EAAIklZ,GAASv4X,IAAMs4X,EAAMhlZ,EAAIilZ,GAASt4X,GACnDw4X,EAAKnyZ,KAAKs7C,EAAEw6E,EAAGwjC,GAoBnB,GAnBIt5J,KAAKo9B,EAAE04F,EAAGwjC,KAAO,IACjB64P,EAAK9lZ,KAAKkR,IAEVvd,KAAKo9B,EAAE04F,EAAGwjC,IAAM,IAChB64P,EAAK,GAQT9oX,EAAI6oX,MAAQA,EACZ7oX,EAAIyoX,cAAgBA,EACpBzoX,EAAI3P,GAAKA,EACT2P,EAAI1P,GAAKA,EACT0P,EAAImR,GAAKA,EACTnR,EAAI8oX,GAAKA,EACT9oX,EAAIZ,MAAQA,EACD,MAAP+lD,EAAa,CACb,IAAI4jU,EAAK14X,EAAKC,EAAKD,EAAKC,EACpB04X,EAAK34X,EAAKC,EAAK,EAAID,EAAKC,EACxB24X,EAAK54X,EAAKC,EAAKA,EAAKD,EAAK,EAC7B80D,EAAIQ,OACJR,EAAI0B,UAAUgiU,EAAMnlZ,EAAGmlZ,EAAMllZ,GAC7BwhF,EAAI5tE,OAAOkxY,GACXtjU,EAAI1qC,MAAMuuW,EAAIC,GACd9jU,EAAI+B,IAAI,EAAG,EAAG6hU,EAAI53W,EAAIA,EAAK23W,GAAK1pX,GAChC+lD,EAAI1qC,MAAM,EAAIuuW,EAAI,EAAIC,GACtB9jU,EAAI5tE,QAAQkxY,GACZtjU,EAAI0B,WAAWgiU,EAAMnlZ,GAAImlZ,EAAMllZ,GAC/BwhF,EAAIY,UAER,MACJ,IAAK,IACL,IAAK,IACDZ,EAAIqB,YACJ9iF,EAAIw8B,EACJv8B,EAAIw8B,EAGZD,EAAKx8B,EACLy8B,EAAKx8B,KAIjBkhF,EAAe7yF,UAAUo1F,SAAW,SAAUu4S,EAAQh2X,GAClD,GAAIA,EAAQ4nB,UAA+B,IAApB5nB,EAAQ8jB,QAAkB,CAC7C,IAAI03D,EAAMN,EAAeO,WAAWu6S,GACpCx6S,EAAIQ,OACJhvF,KAAK+kQ,SAASikI,EAAQh2X,GACtB,IAAI4gD,EAAS5gD,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQ4gD,OAC7CC,EAAS7gD,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQ6gD,OAClD7zD,KAAKuxZ,cAAcvoB,EAAQh2X,EAAQ2O,MAAOiyC,EAAQC,GAClD7zD,KAAKyxZ,aAAazoB,EAAQh2X,GAC1B,IAAI7W,EAAI,EACJoV,KACJA,EAAayB,EAAQzB,WACrB,IAAIoiD,EAAa3gD,EAAQ2gD,WAEzB,GADA66B,EAAIkB,UAAY18E,EAAQ6iB,MACpB89B,EAAY,CACZ,IAAIz/C,EAAWlU,KAAKuyZ,WAAWv/Y,EAAS2gD,EAAYpiD,GACpD,IAAKpV,EAAI,EAAGA,EAAIoV,EAAW9U,OAAQN,IAAK,CACpC,IAAIkE,EAAQkR,EAAWpV,GACnB0P,EAAUqI,EAASnH,EAAI1M,EAAM0M,EAAI4mD,EAAW5mD,EAC5Cd,EAAUiI,EAASlH,EAAI3M,EAAM0yD,GAAK52D,EAA0B,GAApB6W,EAAgB,SAK5D,GAJI2gD,EAAW39C,MAAQhD,EAAQgD,OAAkC,SAAzBhD,EAAQ4tB,eAC5CvgC,EAAMyuB,KAAOqpC,GAAS93D,EAAMyuB,KAAM9b,IAEtCw7E,EAAIqC,SAASxwF,EAAMyuB,KAAMjjB,EAASI,GACH,cAA3B+G,EAAQi5C,gBACsB,aAA3Bj5C,EAAQi5C,gBACmB,gBAA3Bj5C,EAAQi5C,eAAkC,CAC7C,IAAIumW,EAAc3mZ,EACd4mZ,OAAc,EAEdC,EAAY7mZ,EADC2iF,EAAI3/D,YAAYxuB,EAAMyuB,MAAM9Y,MAEzC28Y,OAAY,EAChB,OAAQ3/Y,EAAQi5C,gBACZ,IAAK,YACDwmW,EAAcxmZ,EAAU,EACxB0mZ,EAAY1mZ,EAAU,EACtB,MACJ,IAAK,WACDwmZ,EAAev+Y,EAASlH,EAAI3M,EAAM0yD,GAAK52D,EACvCw2Z,EAAaz+Y,EAASlH,EAAI3M,EAAM0yD,GAAK52D,EACrC,MACJ,IAAK,cACDs2Z,GAAgBxmZ,EAAUiI,EAASlH,EAAI3M,EAAM0yD,GAAK52D,GAAK,EAAK,EAC5Dw2Z,GAAc1mZ,EAAUiI,EAASlH,EAAI3M,EAAM0yD,GAAK52D,GAAK,EAAK,EAElEqyF,EAAIS,YACJT,EAAIU,OAAOsjU,EAAaC,GACxBjkU,EAAIW,OAAOujU,EAAWC,GACtBnkU,EAAIM,YAAc97E,EAAQ6iB,MAC1B24D,EAAIG,UAA+B,IAAnB37E,EAAQkc,SACxBs/D,EAAIgB,YAAcx8E,EAAQvF,QAC1B+gF,EAAIlwD,WAIhBkwD,EAAIY,YAGZlB,EAAe7yF,UAAU41F,UAAY,SAAU+3S,EAAQjsY,GACnD,IAAIgD,EAAQC,KACZ,GAAIjD,EAAI+5B,QAAS,CACb,IAAI+tR,EAAQ32N,EAAeO,WAAWu6S,GACtCnkF,EAAM71N,OACOjyF,EAAIgQ,EAAIhQ,EAAIiZ,MAAQjZ,EAAI62D,OACxB72D,EAAIiQ,EAAIjQ,EAAIgZ,OAAShZ,EAAI82D,OADtC,IAEIq9B,EAAW,IAAIC,MACnBD,EAAS5xF,IAAMvC,EAAIR,OAUnB20F,EAASvM,OAAS,WACdkgO,EAAMjkS,OAAO7jB,EAAI4kB,MAAQtV,KAAKkR,GAAK,KACnC,IAAI8oL,EAAQ,IAAIl1G,MAChBk1G,EAAM/mM,IAAMvC,EAAIR,OAChBwD,EAAMsmM,MAAMw+G,EAAOx+G,EAAOtpM,EAAIgQ,EAAGhQ,EAAIiQ,EAAGjQ,EAAIiZ,MAAOjZ,EAAIgZ,OAAQhZ,GAC/D8nT,EAAMjkS,QAAS7jB,EAAI4kB,MAAQtV,KAAKkR,GAAK,MAEzCsnS,EAAMz1N,YAGdlB,EAAe7yF,UAAUgrM,MAAQ,SAAU73G,EAAK63G,EAAOt5L,EAAGC,EAAGgJ,EAAOD,EAAQ68Y,GACxEpkU,EAAIS,YACJ,IAAI4jU,EAAWxsN,EAAMrwL,MACjB88Y,EAAYzsN,EAAMtwL,OAClBg9Y,EAAe/8Y,EACfg9Y,EAAej9Y,EACfk9Y,EAAc,EACdr+H,EAAe,EACnB,GAAIg+H,GAA2C,SAA3BA,EAAa5qW,UAAsB,CACnD,IAAIkrW,EAASN,EAAa5qW,UAAUpyC,cAAcygB,OAAO,EAAG,GACxD88X,EAASP,EAAa5qW,UAAUpyC,cAAcygB,OAAO,EAAG,GAC5D,GAA2B,UAAvBu8X,EAAa9uW,MAAmB,CAChC,IAAIxI,EAAI,WACJ23W,EAAcF,EACdn+H,EAAek+H,EAAYC,EAAeF,GAE1Cv1X,EAAI,WACJ21X,EAAcJ,EAAWG,EAAeF,EACxCl+H,EAAeo+H,GAEfD,EAAeC,GACf13W,IACI03W,EAAep+H,GACft3P,KAGCy1X,IAAiBC,EAClBH,EAAWC,EACXx1X,IAGAge,KAIJhe,IACIy1X,EAAeE,GACf33W,KAGR,IAAI9f,EAAKx7B,KAAKozZ,eAAeF,EAAQD,EAAaF,EAAcF,GAC5Dp3X,EAAKz7B,KAAKozZ,eAAeD,EAAQv+H,EAAco+H,EAAcF,GAC7DO,EAASR,EAAWr3X,EACpB83X,EAAUR,EAAYr3X,EACtB83X,EAASN,EAAez3X,GAAMy3X,EAAcJ,GAC5CW,EAAU5+H,EAAgBn5P,GAAMm5P,EAAek+H,GAC/CW,EAAUjzZ,SAASW,cAAc,UACrCsyZ,EAAQjwZ,aAAa,QAASwS,EAAM9I,YACpCumZ,EAAQjwZ,aAAa,SAAUuS,EAAO7I,YAC3BumZ,EAAQhlU,WAAW,MACzBwC,UAAUo1G,EAAO7qK,EAAIC,EAAI43X,EAAQC,EAAS,EAAG,EAAGC,EAAQC,GAC7DhlU,EAAIyC,UAAUwiU,EAAS1mZ,EAAGC,EAAGgJ,EAAOD,QAEnC,GAA2B,SAAvB68Y,EAAa9uW,MAAkB,CACpC,IAAI4vW,EAAYZ,EAAYD,EACxBc,EAAaX,EAAeD,EAChCE,EAAcU,EAAYD,EAAWX,EAAeC,EAAeU,EACnE9+H,EAAe++H,EAAYD,EAAWX,EAAeW,EAAWV,EAChEjmZ,GAAK/M,KAAK4zZ,cAAcV,EAAQD,EAAaF,GAC7C/lZ,GAAKhN,KAAK4zZ,cAAcT,EAAQv+H,EAAco+H,GAC9CxkU,EAAIyC,UAAUo1G,EAAO,EAAG,EAAGwsN,EAAUC,EAAW/lZ,EAAGC,EAAGimZ,EAAar+H,QAGnEpmM,EAAIyC,UAAUo1G,EAAOt5L,EAAGC,EAAGgJ,EAAOD,QAItCy4E,EAAIyC,UAAUo1G,EAAOt5L,EAAGC,EAAGgJ,EAAOD,GAEtCy4E,EAAIqB,aAER3B,EAAe7yF,UAAU+3Z,eAAiB,SAAU9/T,EAAK/vB,EAAKs3K,EAAMv7O,GAChE,OAAQg0F,GACJ,IAAK,MAAO,OAAO,EACnB,IAAK,MAAO,OAAQ/vB,EAAMs3K,GAAQ,EAAIv7O,EAAMikE,EAC5C,IAAK,MAAO,OAAQA,EAAMs3K,GAAQv7O,EAAMikE,EACxC,QAAS,OAAO,IAGxB2qB,EAAe7yF,UAAUu4Z,cAAgB,SAAUtgU,EAAK/vB,EAAKs3K,GACzD,IAAIvuO,EAAMD,KAAKC,IAAIi3D,EAAKs3K,GACpB16N,EAAM9T,KAAK8T,IAAIojD,EAAKs3K,GACxB,OAAQvnJ,GACJ,IAAK,MAAO,OAAO,EACnB,IAAK,MAAO,OAAQhnF,EAAM6T,GAAO,EACjC,IAAK,MAAO,OAAO7T,EAAM6T,EACzB,QAAS,OAAO,IAKxB+tE,EAAe7yF,UAAUm3E,EAAI,SAAU8mF,GAAK,OAAOjtJ,KAAKQ,KAAKR,KAAKs9D,IAAI2vF,EAAE,GAAI,GAAKjtJ,KAAKs9D,IAAI2vF,EAAE,GAAI,KAEhGprE,EAAe7yF,UAAU+hC,EAAI,SAAU04F,EAAGwjC,GAAK,OAAQxjC,EAAE,GAAKwjC,EAAE,GAAKxjC,EAAE,GAAKwjC,EAAE,KAAOt5J,KAAKwyE,EAAEsjD,GAAK91H,KAAKwyE,EAAE8mF,KAExGprE,EAAe7yF,UAAUigD,EAAI,SAAUw6E,EAAGwjC,GAAK,OAAQxjC,EAAE,GAAKwjC,EAAE,GAAKxjC,EAAE,GAAKwjC,EAAE,IAAM,EAAI,GAAKjtJ,KAAKghE,KAAKrtE,KAAKo9B,EAAE04F,EAAGwjC,KAEjHprE,EAAe7yF,UAAUk3Z,WAAa,SAAUzjY,EAAM6kC,EAAYpiD,GAC9D,IAAIwkB,EAAS,IAAItG,GAAKkkC,EAAW39C,MAAOzE,EAAW9U,OAAUqyB,EAAa,UACtE5a,GAAanH,EAAG,EAAGC,EAAG,GACtB6mZ,EAAS/kY,EAAK/hB,EACd+mZ,EAAShlY,EAAK9hB,EAGd+mZ,EAFuB,GAAbjlY,EAAK9Y,MAGfg+Y,EAFwB,GAAdllY,EAAK/Y,OAmBnB,MAhBuB,SAAnB+Y,EAAKk9B,UACL+nW,EAAS,EAEe,WAAnBjlY,EAAKk9B,UAEN+nW,EADApgW,EAAW39C,MAAQ8Y,EAAK9Y,QAAgC,aAAtB8Y,EAAK8R,cAAqD,SAAtB9R,EAAK8R,cAClE,EAGa,GAAb9R,EAAK9Y,MAGM,UAAnB8Y,EAAKk9B,YACV+nW,EAAuB,EAAbjlY,EAAK9Y,OAEnB9B,EAASnH,EAAI8mZ,EAASE,GAAUpgW,EAAaA,EAAW5mD,EAAI,GAC5DmH,EAASlH,EAAI8mZ,EAASE,EAASj+X,EAAOhgB,OAAS,EACxC7B,GAEJg6E,KChjBPl+D,GAA6B,WAC7B,SAASA,KA2jBT,OAzjBAA,EAAY30B,UAAUi2Z,aAAe,SAAUt+Y,EAASg2X,EAAQlhW,EAAYmsX,QACrD,IAAfnsX,IAAyBA,EAAa,MAC1C,IAMIphC,EACAuyU,EANA9lT,EAAQgf,GAAM9kC,WADCN,EAAG,EAAGC,EAAG,GACYgG,EAAQ+gD,OAAOpyC,MAAO3O,EAAQ+gD,OAAOzhB,UACzE4hX,EAAKlhZ,EAAQjG,EAAIomB,EAAMpmB,EACvBonZ,EAAKnhZ,EAAQhG,EAAImmB,EAAMnmB,EACTgG,EAAQgD,MAAQhD,EAAQ4gD,OACxB5gD,EAAQ+C,OAAS/C,EAAQ6gD,OAGvCogW,IACAh7E,EAAgBg7E,EAAUhlY,eAAe+5W,EAAO1lY,GAAK,YAEpD21U,IACDvyU,EAAOohC,EAAa,OAAS,OAC7BmxS,EAAgBz4U,SAAS4C,gBAAgB,6BAA8BsD,GACvEsiY,EAAOrnY,YAAYs3U,IAEvB,IAAI3kL,GACAhxJ,GAAM0lY,EAAO1lY,GAAK,UAAW86B,KAAQprB,EAAQ+gD,OAAOl+B,MAAOyI,OAAUtrB,EAAQ+gD,OAAOl+B,MACpFpoB,QAAWuF,EAAQ+gD,OAAOtmD,QAAQP,WAClCG,UAAa,UAAY2F,EAAQ2O,MAAQ,KAAO3O,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQ4gD,QAAU,KACvF5gD,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQ6gD,QAAU,eAClC7gD,EAAQjG,EAAIomB,EAAMpmB,GAAK,KAAOiG,EAAQhG,EAAImmB,EAAMnmB,GAAK,KAE7E,GAAIinZ,EAAW,CACX,IAAIG,EAAeH,EAAUhlY,eAAe+5W,EAAO1lY,IAC/C8wZ,GACAA,EAAalvZ,aAAa+zU,EAAem7E,EAAar3Y,YAG9Dw4C,GAAgB0jR,EAAe3kL,GAC1BxsH,EAGIA,GACL9nC,KAAKsjF,WAAW21P,EAAejmU,EAAS80B,GAHxCytB,GAAgB0jR,GAAiBjjU,MAAShD,EAAQgD,MAAOD,OAAU/C,EAAQ+C,UAMnFia,EAAY30B,UAAUm2Z,eAAiB,SAAU19V,GAE7C,UAEJ9jC,EAAY30B,UAAUipC,cAAgB,SAAUrnB,EAAKjK,EAASk+C,EAAWmjW,EAAUnvN,EAAY+uN,EAAWK,GAClGthZ,EAAQ+gD,SAAWsgW,GACnBr0Z,KAAKsxZ,aAAat+Y,EAASiK,OAAK9hB,EAAW84Z,GAE/C,IAAI3wZ,EAEAA,EADA0P,EAAQ1P,KAAO2Z,EAAI3Z,GACd0P,EAAQ1P,GAAK,aAGb0P,EAAQ1P,GAEjB,IAAIovB,EACAuhY,IACAvhY,EAAOuhY,EAAUhlY,eAAe3rB,IAE/BovB,IAAQwyK,IACTxyK,EAAOlyB,SAAS4C,gBAAgB,6BAA8B,QAC9D6Z,EAAItb,YAAY+wB,IAEpB,IAAIumT,EACAg7E,IAAcjhZ,EAAQ+gD,SACtBklR,EAAgBg7E,EAAUhlY,eAAejc,EAAQ1P,GAAK,0BAElD21U,EAAcx4U,WAAW6E,YAAY2zU,GAG7C,IAAI3kL,GACAhxJ,GAAMA,EAAIyJ,EAAKiG,EAAQjG,EAAEG,WAAYF,EAAKgG,EAAQhG,EAAEE,WAAY8I,MAAShD,EAAQgD,MAAM9I,WACvF6I,OAAU/C,EAAQ+C,OAAO7I,WAAYvI,WAAcqO,EAAQ8jB,QAAU,UAAY,SACjFzpB,UAAa,UAAY2F,EAAQ2O,MAAQ,KAClC3O,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQ4gD,QAAU,KAAO5gD,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQ6gD,QAAU,IAC3Gn6B,GAAM1mB,EAAQ+1B,cAAgB,EAAGpP,GAAM3mB,EAAQ+1B,cAAgB,EAAGt7B,QAAWuF,EAAQvF,QACrF83G,aAAc+uS,GAAwB,IAEtCthZ,EAAQ03H,QACR4pB,EAAY,MAAIthJ,EAAQ03H,OAGvB4pR,IACDhgQ,EAFe,kBAEM,QAEzB/+F,GAAgB7iC,EAAM4hI,GACtBt0J,KAAKu0Z,YAAY7hY,EAAM1f,EAASk+C,IAEpClhC,EAAY30B,UAAUm5Z,sBAAwB,SAAUC,EAAUzhZ,GAC9D,IAAI0f,EACJA,EAAO+hY,EAASh0Z,WAAWwuB,eAAejc,EAAQ1P,IAClD,IAAIgxJ,EACJA,GACIhxJ,GAAM0P,EAAQ1P,GAAIyJ,EAAKiG,EAAQjG,EAAEG,WAAYF,EAAKgG,EAAQhG,EAAEE,WAAY8I,MAAShD,EAAQgD,MAAM9I,WAC/F6I,OAAU/C,EAAQ+C,OAAO7I,WAAYG,UAAa,UAAY2F,EAAQ2O,MAAQ,KACvE3O,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQ4gD,QAAU,KAAO5gD,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQ6gD,QAAU,IAC3G62E,MAAO,6BAENh4G,IACDA,EAAOlyB,SAAS4C,gBAAgB,6BAA8B,QAC9DqxZ,EAAS9yZ,YAAY+wB,IAEzB1yB,KAAKu0Z,YAAY7hY,EAAM1f,GACvBuiD,GAAgB7iC,EAAM4hI,IAE1BtkI,EAAY30B,UAAUq5Z,eAAiB,SAAUv/V,EAAaC,GAE1D,OADeE,GAAiBH,EAAaC,IAIjDplC,EAAY30B,UAAU0zF,SAAW,SAAU0lU,EAAUzhZ,GACjD,IAAIqzC,EAAO7lD,SAAS4C,gBAAgB,6BAA8B,QAClEpD,KAAKu0Z,YAAYluW,EAAMrzC,GACvB,IAAI4gD,EAAS5gD,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQ4gD,OAC7CC,EAAS7gD,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQ6gD,OAE9CygG,GACAhxJ,GAAM0P,EAAQ1P,GACdk4B,GAAMxoB,EAAQwqC,WAAWzwC,EAAIiG,EAAQjG,EACrC0uB,GAAMzoB,EAAQwqC,WAAWxwC,EAAIgG,EAAQhG,EACrC0uB,GAAM1oB,EAAQ0kC,SAAS3qC,EAAIiG,EAAQjG,EACnC4uB,GAAM3oB,EAAQ0kC,SAAS1qC,EAAIgG,EAAQhG,EACnCsxB,OAAUtrB,EAAQsrB,OAClB4G,eAAgBlyB,EAAQ44C,YAAY1+C,WAAYO,QAAWuF,EAAQvF,QAAQP,WAC3EG,UAAa,UAAY2F,EAAQ2O,MAAQ,IAAMiyC,EAAS,IAAMC,EAAS,IACvElvD,WAAcqO,EAAQ8jB,QAAU,UAAY,UAE5C9jB,EAAQ03H,QACR4pB,EAAY,MAAIthJ,EAAQ03H,OAE5Bn1E,GAAgBlP,EAAMiuG,GACtBmgQ,EAAS9yZ,YAAY0kD,IAGzBr2B,EAAY30B,UAAUgpC,WAAa,SAAUowX,EAAUzhZ,EAAS2hZ,EAAgBL,GAC5E,IAAIhzY,EAAS9gB,SAAS4C,gBAAgB,6BAA8B,UACpEpD,KAAKu0Z,YAAYjzY,EAAQtO,GACzB,IAAI4hZ,EAAW5hZ,EAAQ03H,OAAS,GAC3BiqR,IACDC,GAAY,eAEhB,IAAItgQ,GACAhxJ,GAAM0P,EAAQ1P,GACds2B,GAAM5mB,EAAQoO,QACdyY,GAAM7mB,EAAQqO,QACd+b,EAAKpqB,EAAQpG,OACbjI,WAAcqO,EAAQ8jB,QAAU,UAAY,SAC5C4zG,MAASkqR,EACTrvS,aAAc+uS,EAAYA,EAAU,cAAgB,IAExDhzY,EAAO5c,MAAM6pC,QAAUv7B,EAAQ8jB,QAAU,QAAU,OACnDy+B,GAAgBj0C,EAAQgzI,GACxBmgQ,EAAS9yZ,YAAY2f,IAEzB0O,EAAY30B,UAAUm6B,SAAW,SAAUvY,EAAKjK,EAASk+C,EAAWg0I,EAAY+uN,EAAWK,GACvF,IACIvnZ,EAAIV,KAAKkT,MAAuB,GAAhBlT,KAAK+S,SAAiB,GACrCnC,EAAI3Z,GAAgByJ,EAAEG,WAC3B,IAAI46B,KAEJA,EAAawB,GADbxB,EAAaD,GAAgB70B,EAAQxW,OAEjCwW,EAAQ+gD,QACR/zD,KAAKsxZ,aAAat+Y,EAASiK,EAAK6qB,EAAYmsX,GAEhD,IAAIh7E,EACAg7E,IAAcjhZ,EAAQ+gD,SACtBklR,EAAgBg7E,EAAUhlY,eAAejc,EAAQ1P,GAAK,0BAElD21U,EAAcx4U,WAAW6E,YAAY2zU,GAG7C,IAAI/7T,EACA+2Y,IACA/2Y,EAAO+2Y,EAAUhlY,eAAejc,EAAQ1P,KAEvC4Z,IAAQgoL,IACThoL,EAAO1c,SAAS4C,gBAAgB,6BAA8B,QAC9D6Z,EAAItb,YAAYub,IAEpBld,KAAKsjF,WAAWpmE,EAAMlK,EAAS80B,GAC/B,IAAIwsH,GACAhxJ,GAAM0P,EAAQ1P,GAAI+J,UAAa,UAAY2F,EAAQ2O,MAAQ,KAAO3O,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQ4gD,QAAU,KACzG5gD,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQ6gD,QAAU,cAAsB7gD,EAAS,EAAI,IAAOA,EAAS,EAAI,IAC7GrO,WAAcqO,EAAQ8jB,QAAU,UAAY,SAAUrpB,QAAWuF,EAAQvF,QACzE83G,aAAc+uS,GAAwB,IAEtCthZ,EAAQ03H,QACR4pB,EAAY,MAAIthJ,EAAQ03H,OAE5Bn1E,GAAgBr4C,EAAMo3I,GACtBt0J,KAAKu0Z,YAAYr3Y,EAAMlK,EAASk+C,IAEpClhC,EAAY30B,UAAUioF,WAAa,SAAUrmE,EAAKjK,EAAS80B,GACvD,IAAItM,EACAC,EACAC,EACAC,EACA5uB,EACAC,EACAvQ,EACAN,EACAstC,EAAW3B,EACXhO,EAAI,GACR,IAAK/sB,EAAI,EAAGC,EAAI,EAAG7Q,EAAI,EAAGM,EAASgtC,EAAShtC,OAAQN,EAAIM,IAAUN,EAAG,CACjE,IACIouC,EADMd,EAASttC,GAEf+rC,EAAOqC,EAAQpC,QAmBnB,OAlBI,OAAQoC,IACR/O,EAAK+O,EAAQ/O,IAEb,OAAQ+O,IACR7O,EAAK6O,EAAQ7O,IAEb,OAAQ6O,IACR9O,EAAK8O,EAAQ9O,IAEb,OAAQ8O,IACR5O,EAAK4O,EAAQ5O,IAEb,MAAO4O,IACPx9B,EAAIw9B,EAAQx9B,GAEZ,MAAOw9B,IACPv9B,EAAIu9B,EAAQv9B,GAERk7B,GACJ,IAAK,IACDpO,EAAIA,EAAI,IAAM/sB,EAAEG,WAAa,IAAMF,EAAEE,WAAa,IAClD,MACJ,IAAK,IACD4sB,EAAIA,EAAI,IAAM/sB,EAAEG,WAAa,IAAMF,EAAEE,WAAa,IAClD,MACJ,IAAK,IACD4sB,EAAIA,EAAI,IAAM0B,EAAGtuB,WAAa,IAAMuuB,EAAGvuB,WAAa,IAAMwuB,EAAGxuB,WAAa,IAAMyuB,EAAGzuB,WAAa,IAChG4sB,GAAK/sB,EAAEG,WAAa,IAAMF,EAAEE,WAAa,IACzC,MACJ,IAAK,IACD4sB,EAAIA,EAAI,IAAM0B,EAAGtuB,WAAa,IAAMuuB,EAAGvuB,WAAa,IAAMH,EAAEG,WAAa,IAAMF,EAAEE,WAAa,IAC9F,MACJ,IAAK,IACD4sB,EAAIA,EAAI,IAAMyQ,EAAQjC,GAAGp7B,WAAa,IAAMq9B,EAAQhC,GAAGr7B,WAAa,IAAMq9B,EAAQ5oB,MAAMzU,WAAa,IACrG4sB,GAAKyQ,EAAQ/B,SAASt7B,WAAa,IAAMq9B,EAAQ9B,MAAQ,IAAM17B,EAAEG,WAAa,IAAMF,EAAEE,WAAa,IACnG,MACJ,IAAK,IACL,IAAK,IACD4sB,GAAQ,MAIpB7c,EAAIzZ,aAAa,IAAKs2B,IAE1B9J,EAAY30B,UAAUw5Z,gBAAkB,SAAU/lY,EAAM9b,GACpD8b,EAAKpqB,MAAM2qB,UAAYrc,EAAQ+4C,OAAS,SAAW,SACnDj9B,EAAKpqB,MAAM0qB,WAAapc,EAAQ64C,KAAO,OAAS,SAChD/8B,EAAKpqB,MAAMwqB,SAAWlc,EAAQkc,SAAShiB,WAAa,KACpD4hB,EAAKpqB,MAAM4qB,WAAatc,EAAQsc,YAEpCU,EAAY30B,UAAUo1F,SAAW,SAAUu4S,EAAQh2X,EAASihZ,EAAWK,EAAWpjW,GAC9E,QAAwB/1D,IAApB6X,EAAQ4nB,QAAuB,CAC/B,IAAIgnT,OAAW,EACXrwU,OAAa,EACboiD,OAAa,EACbz/C,OAAW,EACX7T,OAAQ,EACRm/B,OAAe,EACf3zB,EAAU,EACVI,EAAU,EACV9P,EAAI,EACJ2yB,OAAO,EAIX,GAHImlY,IACAnlY,EAAOmlY,EAAUhlY,eAAejc,EAAQ1P,GAAK,UAE7CwrB,GACA,GAAI9b,EAAQihD,OACR,KAAOnlC,EAAK/R,YACR+R,EAAKxpB,YAAYwpB,EAAK/R,iBAK9B/J,EAAQihD,QAAS,EACjBnlC,EAAOtuB,SAAS4C,gBAAgB,6BAA8B,QACnC,aAAvB4P,EAAQuc,YACRT,EAAKijC,eAAe,uCAAwC,YAAa,YAE7Ei3U,EAAOrnY,YAAYmtB,GAEvB,IAAI8kC,EAAS5gD,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQ4gD,OAC7CC,EAAS7gD,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQ6gD,OAClD,GAAI7gD,EAAQihD,OAUR,IATAj0D,KAAKu0Z,YAAYzlY,EAAM9b,EAASk+C,GAChClxD,KAAK60Z,gBAAgB/lY,EAAM9b,GAC3B4uU,EAAWphV,SAASi2D,eAAezjD,EAAQ4nB,SAC3CrpB,EAAayB,EAAQzB,WACrBoiD,EAAa3gD,EAAQ2gD,WACrBz/C,EAAWlU,KAAK80Z,cAAc9hZ,EAAS2gD,EAAYpiD,GAC/CoiD,EAAW39C,MAAQhD,EAAQgD,OAAkC,SAAzBhD,EAAQ4tB,eAC5CrvB,EAAW,GAAGud,KAAOqpC,GAASnlD,EAAQ4nB,QAAS5nB,IAE9C7W,EAAI,EAAGA,EAAIoV,EAAW9U,OAAQN,IAC/BqjC,EAAeh/B,SAAS4C,gBAAgB,6BAA8B,SACtEw+U,EAAWphV,SAASi2D,eAAellD,EAAWpV,GAAG2yB,MACjDzuB,EAAQkR,EAAWpV,GACnB0P,EAAUqI,EAASnH,EAAI1M,EAAM0M,EAAI4mD,EAAW5mD,EAC5Cd,EAAUiI,EAASlH,EAAI3M,EAAM0yD,KAAiC,GAApB//C,EAAgB,SAC1DuiD,GAAgB/1B,GAAgBzyB,EAAKlB,EAAQqB,WAAYF,EAAKf,EAAQiB,aACtE4hB,EAAKtrB,aAAa,OAAQnD,EAAMyuB,MAChC0Q,EAAa79B,YAAYigV,GACzB9yT,EAAKntB,YAAY69B,GAGrBxsB,EAAQi5C,gBAA6C,gBAA3Bj5C,EAAQi5C,iBAClCj5C,EAAQi5C,eAAiBwH,GAAkBzgD,EAAQi5C,iBASvDsJ,GAAgBzmC,GANZxrB,GAAM0P,EAAQ1P,GAAK,QAAS86B,KAAQprB,EAAQ6iB,MAAOlxB,WAAcqO,EAAQ8jB,QAAU,UAAY,SAC/Fi+X,kBAAmB/hZ,EAAQi5C,eAAgB5+C,UAAa,UAAY2F,EAAQ2O,MAAQ,MACnE,MAAiB,cACZ3O,EAAS,EAAI,IAAOA,EAAS,EAAI,IAAKvF,QAAWuF,EAAQvF,QAC/E83G,aAAc+uS,GAAwB,OAKlDtkY,EAAY30B,UAAU41F,UAAY,SAAU+3S,EAAQjsY,EAAKk3Z,GACrD,IACI5tN,EADKtpM,EAAIuG,GAET2wZ,IACA5tN,EAAQ4tN,EAAUhlY,eAAelyB,EAAIuG,GAAK,UAEzC+iM,IACDA,EAAQ7lM,SAAS4C,gBAAgB,6BAA8B,SAC/D4lY,EAAOrnY,YAAY0kM,IAEvB,IAAIn1G,EAAW,IAAIC,MACnBD,EAAS5xF,IAAMvC,EAAIR,OACnB,IAAIunD,EAAsB,SAAd/mD,EAAI+mD,MAAmB/mD,EAAI+mD,MAAQ,GAC3CkxW,EAAWj4Z,EAAIirD,UACfitW,EAAcD,EAAS11Y,OAAO,GAAG1J,cAAgBo/Y,EAAS3zZ,MAAM,GAChEyiD,IACAmxW,GAAe,IAAMnxW,EAAMxkC,OAAO,GAAG1J,cAAgBkuC,EAAMziD,MAAM,IAQrEk0D,GAAgB8wI,GALZ/iM,GAAMvG,EAAIuG,GAAK,QAASyJ,EAAKhQ,EAAIgQ,EAAEG,WAAYF,EAAKjQ,EAAIiQ,EAAEE,WAAYG,UAAa,UAAYtQ,EAAI4kB,MAAQ,KACpG5kB,EAAIgQ,EAAIhQ,EAAIiZ,MAAQjZ,EAAI62D,QAAU,KAAO72D,EAAIiQ,EAAIjQ,EAAIgZ,OAAShZ,EAAI82D,QAAU,IACnF79C,MAASjZ,EAAIiZ,MAAM9I,WAAYvI,WAAc5H,EAAI+5B,QAAU,UAAY,SACvE/gB,OAAUhZ,EAAIgZ,OAAO7I,WAAYotG,oBAAuB26S,IAG5D5uN,EAAMt0I,eAAe,+BAAgC,aAAcm/B,EAAS5xF,IAAI4N,aAGpF8iB,EAAY30B,UAAU65Z,gBAAkB,SAAUl0Z,EAASgoY,EAAQ37X,GAC/D,IAAI+gD,EACJ,GAAI46U,EAAQ,CACR,IAAI7sY,OAAI,EACR,IAAKA,EAAI,EAAGA,EAAI6sY,EAAOz3X,WAAW9U,OAAQN,IAClC6sY,EAAOz3X,WAAWpV,GAAGmH,KAAOtC,EAAQsC,GAAK,kBACzC8qD,EAAc46U,EAAOz3X,WAAWpV,IAI5C,IAAKiyD,EAAa,EAKdA,EAAc9L,GAAkB,OAH5Bh/C,GAAMtC,EAAQsC,GAAK,gBACnBonI,MAAS,oBAGD/oI,YAAYX,EAAQiO,SAASrN,WAAU,IACnDonY,EAAOrnY,YAAYysD,GAEvBA,EAAY5qD,aAAa,QAAS,UAAaxC,EAAQy4C,WAAiB,OAAI,aAAgBz4C,EAAQy4C,WAAgB,MAChH,WAAcz4C,EAAQkoC,QAAS,EAAI,WAAeloC,EAAQkoC,UAAc,yCAChCloC,EAAQulD,gBAAkB,uCAC7BvlD,EAAe,QAAI,UAAY,UAAY,MAGxFgvB,EAAY30B,UAAU85Z,kBAAoB,SAAUn0Z,EAASgoY,EAAQjzX,EAAQC,EAAOi+Y,GAChF,IAAI/lW,EACAwsD,EACAu5S,IACA/lW,EAAgB+lW,EAAUhlY,eAAejuB,EAAQsC,GAAK,mBACtDo3G,EAAWu5S,EAAUhlY,eAAejuB,EAAQsC,GAAK,UAEhD4qD,KACDA,EAAgB1tD,SAAS4C,gBAAgB,6BAA8B,MACzDI,aAAa,KAAMxC,EAAQsC,GAAK,mBAC9C4qD,EAAcvsD,YAAYX,EAAQiO,SAASrN,WAAU,IACrDonY,EAAOrnY,YAAYusD,IAEnBwsD,GACAxsD,EAAc5oD,YAAYo1G,GAE9BxsD,EAAc1qD,aAAa,QAAS,eAAkBxC,EAAe,QAAI,UAAY,UAAY,KACjGhB,KAAKo1Z,kBAAkBp0Z,EAASktD,EAAen4C,EAAQC,GACjC,UAAlBhV,EAAQ8iD,OACR9jD,KAAKq7G,aAAar6G,EAASktD,EAAen4C,EAAQC,EAAOi+Y,GAE7D1+V,GAAgBrH,EAAeltD,EAAQgzD,aAAgBuxD,aAAcvkH,EAAQgzD,kBAEjFhkC,EAAY30B,UAAU+5Z,kBAAoB,SAAUp0Z,EAASktD,EAAen4C,EAAQC,GAChF,IAAI4jX,EAA6C,IAA9B54X,EAAQ8iZ,YAAY9tY,MAAchV,EAAQ8iZ,YAAY9tY,MAAQ,EAC7Eq/Y,EAA+C,IAA/Br0Z,EAAQ8iZ,YAAY/tY,OAAe/U,EAAQ8iZ,YAAY/tY,OAAS,EAChFhJ,EAAI/L,EAAQ+iZ,iBAAiBh3Y,EAAIiJ,EAAQ4jX,EACzC5sX,EAAIhM,EAAQ+iZ,iBAAiB/2Y,EAAI+I,EAASs/Y,EAC9CnnW,EAAc1qD,aAAa,YAAa,UAAYxC,EAAQulD,gBAAkB,IAAMvlD,EAAQ6K,QAAU,IAAM7K,EAAQiL,QAChH,gBAAkBjL,EAAQ6K,QAAUkB,EAAIiJ,EAAQhV,EAAQquD,MAAMtiD,GAAK,KAAO/L,EAAQiL,QAAUe,EAAI+I,EAAS/U,EAAQquD,MAAMriD,GACvH,WAAcgJ,EAAQ4jX,EAAgB,IAAO7jX,EAASs/Y,EAAiB,MAW/ErlY,EAAY30B,UAAUggH,aAAe,SAAU96G,EAAM+zF,EAAOv+E,EAAQC,EAAOi+Y,GACvE,IAAIr6B,EAAer5X,EAAKujZ,YAAY9tY,MAChCq/Y,EAAgB90Z,EAAKujZ,YAAY/tY,OAGjCu/Y,GAFc/0Z,EAAKk5C,WAAWzjC,MACfzV,EAAKk5C,WAAW1jC,OACnBxV,EAAKyV,OAASA,EAAQ4jX,IAClC27B,EAAah1Z,EAAKwV,QAAUA,EAASs/Y,GACrCtoZ,EAAIxM,EAAKwjZ,iBAAiBh3Y,GAAKxM,EAAKyV,OAASzV,EAAKwV,OAAS,GAAK6jX,EAAe07B,GAAa,GAC5FtoZ,EAAIzM,EAAKwjZ,iBAAiB/2Y,GAAKzM,EAAKwV,QAAUxV,EAAKyV,MAAQ,GAAKq/Y,EAAgBE,GAAc,GAC9F76S,EAAWu5S,EAAUhlY,eAAe1uB,EAAK+C,GAAK,UAClDo3G,EAAWl6G,SAAS4C,gBAAgB,6BAA8B,aACzDI,aAAa,KAAMjD,EAAK+C,GAAK,SACtCgxF,EAAM3yF,YAAY+4G,GAClB,IAAIhoF,EAAOuhY,EAAUhlY,eAAe1uB,EAAK+C,GAAK,cAC9CovB,EAAOlyB,SAAS4C,gBAAgB,6BAA8B,QAC9Ds3G,EAAS/4G,YAAY+wB,GAOrB,OAFA6iC,GAAgB7iC,GAHZpvB,GAAM/C,EAAK+C,GAAK,aAAc0S,MAASs/Y,EAAUpoZ,WAAY6I,OAAUw/Y,EAAWroZ,WAClFH,EAAKA,EAAEG,WAAYF,EAAKA,EAAEE,aAG9BonF,EAAM9wF,aAAa,YAAa,QAAUjD,EAAK+C,GAAK,UAC7CgxF,GAEXtkE,EAAY30B,UAAU61Z,eAAiB,SAAUl+Y,EAASiK,EAAKi0C,GAC3D,IAAI5kD,EACA6T,EACAgxY,EACAiD,EAAer/V,GAAsB7D,GACrCiqD,EAAOi5S,EAAanlY,eAAeiiC,EAAY,oBAC9CiqD,IACDA,EAAO7lD,GAAiB,QAAUhyD,GAAI4tD,EAAY,qBAClDkjW,EAAalvZ,aAAai2G,EAAMi5S,EAAar3Y,aAEjD,IAAIs0Y,EACA55X,EACJ,GAE8B,SAA1BzkB,EAAQk5C,SAASxlD,KAAiB,CAClC,IAAK,IAAIvK,EAAI,EAAGA,EAAI6W,EAAQk5C,SAASklW,MAAM30Z,OAAQN,IAC/CmQ,EAAOA,EAAyCD,KAAKC,IAAIA,EAAK0G,EAAQk5C,SAASklW,MAAMj1Z,GAAGwP,QAA3EqH,EAAQk5C,SAASklW,MAAMj1Z,GAAGwP,OACvCwU,EAAOA,EAAyC9T,KAAK8T,IAAIA,EAAKnN,EAAQk5C,SAASklW,MAAMj1Z,GAAGwP,QAA3EqH,EAAQk5C,SAASklW,MAAMj1Z,GAAGwP,OAEb,WAA1BqH,EAAQk5C,SAASxlD,OACjB+wB,EAASzkB,EAAQk5C,UACV5oD,GAAK2Z,EAAI3Z,GAAK,WACrB6tZ,EAAMiD,EAAanlY,eAAehS,EAAI3Z,GAAK,aAEvC6tZ,EAAI1wZ,WAAW6E,YAAY6rZ,GAE/BA,EAAMnxZ,KAAKoxF,qBAAqB35D,GAChC0jF,EAAKx5G,YAAYwvZ,MAGjBE,EAASr+Y,EAAQk5C,UACV5oD,GAAK2Z,EAAI3Z,GAAK,UACrB6tZ,EAAMiD,EAAanlY,eAAehS,EAAI3Z,GAAK,YAC3C6tZ,EAAMiD,EAAanlY,eAAehS,EAAI3Z,GAAK,aAEvC6tZ,EAAI1wZ,WAAW6E,YAAY6rZ,GAE/BA,EAAMnxZ,KAAKyxF,qBAAqB4/T,GAChCl2S,EAAKx5G,YAAYwvZ,IAErB,IAASh1Z,EAAI,EAAGA,EAAI6W,EAAQk5C,SAASklW,MAAM30Z,OAAQN,IAAK,CACpD,IAAIi/G,EAASpoG,EAAQk5C,SAASklW,MAAMj1Z,GAChCq5Z,EAAWr1Y,EAAM,GAAK7T,EAAM8uG,EAAOzvG,SAAW,EAAIW,GAAO8uG,EAAOzvG,OAASW,EACzEmpZ,EAAcj1Z,SAAS4C,gBAAgB,6BAA8B,QACzEmyD,GAAgBkgW,GAAe9pZ,OAAU6pZ,EAAStoZ,WAAYxI,MAAS,cAAgB02G,EAAOvlF,QAC9Fs7X,EAAIxvZ,YAAY8zZ,IAGxB,OAAOtE,GAEXnhY,EAAY30B,UAAU+1F,qBAAuB,SAAU35D,GACnD,IAAIi+X,EAAiBl1Z,SAAS4C,gBAAgB,6BAA8B,kBAK5E,OADAmyD,GAAgBmgW,GAFZpyZ,GAAMm0B,EAAOn0B,GAAIk4B,GAAM/D,EAAO+D,GAAK,IAAKC,GAAMhE,EAAOgE,GAAK,IAAKC,GAAMjE,EAAOiE,GAAK,IAAKC,GAAMlE,EAAOkE,GAAK,MAGrG+5X,GAEX1lY,EAAY30B,UAAUo2F,qBAAuB,SAAU4/T,GACnD,IAAIsE,EAAiBn1Z,SAAS4C,gBAAgB,6BAA8B,kBAK5E,OADAmyD,GAAgBogW,GAFZryZ,GAAM+tZ,EAAO/tZ,GAAIs2B,GAAMy3X,EAAOz3X,GAAK,IAAKC,GAAMw3X,EAAOx3X,GAAK,IAAKuD,EAAKi0X,EAAOj0X,EAAI,IAAK29E,GAAMs2S,EAAOt2S,GAAK,IAAKC,GAAMq2S,EAAOr2S,GAAK,MAG1H26S,GAEX3lY,EAAY30B,UAAUk5Z,YAAc,SAAUt3Y,EAAKvY,EAAOwsD,GACnC,SAAfxsD,EAAM05B,OACN15B,EAAM05B,KAAO,eAEI,SAAjB15B,EAAM45B,SACN55B,EAAM45B,OAAS,eAEnB,IACIF,EADA01B,KAEJ,QAAwB34D,IAApBuJ,EAAMovD,UAAyB,CAE/BA,GADqB,IAAIo6B,IACEsjU,eAAe9sZ,EAAMovD,WAEpD,GAAIpvD,EAAMwnD,UAAoC,SAAxBxnD,EAAMwnD,SAASxlD,KAAiB,CAElD03B,EAAO,QADGp+B,KAAKkxZ,eAAexsZ,EAAOuY,EAAKi0C,GACrB5tD,GAAK,SAG1B86B,EAAO15B,EAAM05B,KAEb15B,EAAM45B,QACNrhB,EAAIzZ,aAAa,SAAUkB,EAAM45B,aAEXnjC,IAAtBuJ,EAAMknD,aACN3uC,EAAIzZ,aAAa,eAAgBkB,EAAMknD,YAAY1+C,YAEnD4mD,GACA72C,EAAIzZ,aAAa,mBAAoBswD,EAAU5mD,YAE/CkxB,GACAnhB,EAAIzZ,aAAa,OAAQ46B,IAKjCpO,EAAY30B,UAAUy5Z,cAAgB,SAAUhmY,EAAM8mY,EAAWrkZ,GAC7D,IAAIwkB,EAAS,IAAItG,GAAKmmY,EAAU5/Y,MAAOzE,EAAW9U,OAAUqyB,EAAa,UACrE7Z,GAAQlI,EAAG,EAAGC,EAAG,GAKjBouN,EAFuB,GAAbtsM,EAAK9Y,MAGf4sN,EAFwB,GAAd9zM,EAAK/Y,OAmBnB,MAhBuB,SAAnB+Y,EAAKk9B,UACLovK,EAAS,EAEe,WAAnBtsM,EAAKk9B,UAENovK,EADAw6L,EAAU5/Y,MAAQ8Y,EAAK9Y,QAAgC,aAAtB8Y,EAAK8R,cAAqD,SAAtB9R,EAAK8R,cACjE,EAGa,GAAb9R,EAAK9Y,MAGM,UAAnB8Y,EAAKk9B,YACVovK,EAAuB,EAAbtsM,EAAK9Y,OAEnBf,EAAIlI,EApBI,EAoBIquN,GAAUw6L,EAAYA,EAAU7oZ,EAAI,GAChDkI,EAAIjI,EApBI,EAoBI41N,EAAS7sM,EAAOhgB,OAAS,EAC9Bd,GAEJ+a,KChjBP6lY,GAAiC,WACjC,SAASA,EAAgB9+X,EAAM++X,EAAWC,GACtC/1Z,KAAK+vB,SAAW,KAChB/vB,KAAK+1Z,WAAY,EACjB/1Z,KAAKkxD,UAAYn6B,EACjB/2B,KAAKgB,QAAUwzD,GAAkBx0D,KAAKkxD,WACtClxD,KAAKojF,YAAc0yU,EACnB91Z,KAAK+1Z,UAAYA,EACjB/1Z,KAAK+vB,SAAWgmY,EAAY,IAAI/lY,GAAgB,IAAIk+D,GA65BxD,OA35BA2nU,EAAgBx6Z,UAAUkxV,UAAY,SAAUy8C,EAAQnuU,GACpDmuU,EAAOtkY,MAAMm2D,OAASA,GAG1Bg7V,EAAgBx6Z,UAAU26Z,UAAY,WAClCh2Z,KAAKi2Z,aAAej2Z,KAAKgB,QAAQ0M,uBAAuB,wBAAwB,GAChF1N,KAAKk2Z,gBAAkBl2Z,KAAKgB,QAAQ0M,uBAAuB,mBAAmB,GAC9E1N,KAAKm2Z,eAAiBn2Z,KAAKgB,QAAQ0M,uBAAuB,kBAAkB,GAC5E1N,KAAKo2Z,gBAAkBp2Z,KAAKgB,QAAQ0M,uBAAuB,mBAAmB,IAElFmoZ,EAAgBx6Z,UAAUs5D,gBAAkB,WAExC,OADmBA,GAAgB30D,KAAKkxD,YAG5C2kW,EAAgBx6Z,UAAUg7Z,aAAe,SAAUr1Z,EAAS26H,EAAeqtQ,GACvE,OAAIhpY,KAAKkxD,WAAalwD,GAAWA,EAAQsC,GACjCtC,EAAQsC,GAAGpG,MAAM,iBAAiBT,OAAS,GAAKuE,EAAQsC,GAAGpG,MAAM,aAAaT,OAAS,EAChFuD,KAAKi2Z,aAEZt6R,GAAmC,aAAlBA,EACV37H,KAAKk2Z,gBAEPl1Z,aAAmB6sD,GACjB7tD,KAAKm2Z,eAGLn2Z,KAAKo2Z,gBAGbptB,GAEX6sB,EAAgBx6Z,UAAUi7Z,iBAAmB,SAAUt1Z,EAASu1Z,EAAerkF,GAC3E,IAAIskF,EAAgBD,EACpB,GAAIrkF,GAAclyU,KAAKkxD,WAAalwD,GAAWA,EAAQsC,GAAI,CACnDtC,EAAQsC,GAAGpG,MAAM,iBAAiBT,OAAS,GAC3C+5Z,EAAgBtkF,EAAWjjT,eAAejvB,KAAKkxD,UAAY,oBAC3DqlW,EAAgB,MAEXv1Z,EAAQsC,GAAGpG,MAAM,aAAaT,OAAS,EAC5C+5Z,EAAgBtkF,EAAWjjT,eAAejvB,KAAKkxD,UAAY,iBAEtDlwD,aAAmB6sD,IACxB2oW,EAAgBtkF,EAAWjjT,eAAejvB,KAAKkxD,UAAY,gBAC3DqlW,EAAgB,MAGhBC,EAAgBtkF,EAAWjjT,eAAejvB,KAAKkxD,UAAY,iBAE/D,IAAI49Q,EAAe9uU,KAAKy2Z,gBAAgBz1Z,EAASu1Z,GAAiBC,GAClEA,EAAgB1nF,EAAazxS,EACzByxS,EAAa7xT,MACbi1T,EAAapD,EAAa7xT,KAGlC,OAASogB,EAAGm5X,EAAev5Y,IAAKi1T,IAEpC2jF,EAAgBx6Z,UAAUo7Z,gBAAkB,SAAUz1Z,EAASgoY,GAC3D,IAAIyrB,EAEAviF,EADA+hF,EAAYj0Z,KAAKq2Z,aAAar1Z,GAElC,GAAIgoY,GAAUirB,EAAW,CACrB,GAAIA,KACAQ,EAAWR,EAAUhlY,eAAejuB,EAAQsC,GAAK,mBAChC2wZ,IAAcj0Z,KAAKm2Z,eAAgB,CAChD,IAAIO,EAAY12Z,KAAKm2Z,eACrB1B,EAAWiC,EAAUznY,eAAejuB,EAAQsC,GAAK,iBACjD4uU,EAAawkF,EAGhBjC,IACDA,EAAWz0Z,KAAKojF,YAAYsxU,eAAe,KAAOpxZ,GAAItC,EAAQsC,GAAK,kBACnE0lY,EAAOrnY,YAAY8yZ,IAG3B,OAASp3X,EAAGo3X,EAAUx3Y,IAAKi1T,IAE/B2jF,EAAgBx6Z,UAAUs7Z,cAAgB,SAAU31Z,EAASgoY,EAAQ4tB,EAAWvpZ,EAAW4mZ,EAAW4C,GAC9F71Z,aAAmB4vD,GACnB5wD,KAAKw7W,gBAAgBx6W,EAASgoY,EAAQ4tB,EAAWvpZ,EAAW4mZ,EAAW4C,GAElE71Z,aAAmBusD,GACxBvtD,KAAK82Z,mBAAmB91Z,EAASgoY,EAAQ37X,EAAW4mZ,GAE/CjzZ,aAAmB64C,GACxB75C,KAAK+2Z,kBAAkB/1Z,EAASgoY,EAAQ37X,EAAW4mZ,GAE9CjzZ,aAAmBmrD,GACxBnsD,KAAKkkC,kBAAkBljC,EAASgoY,EAAQ37X,EAAW4mZ,GAE9CjzZ,aAAmB6sD,GACxB7tD,KAAKg3Z,oBAAoBh2Z,EAASgoY,EAAQ37X,EAAW4mZ,GAEhDjzZ,aAAmB+sD,GACxB/tD,KAAKi3Z,kBAAkBj2Z,EAASgoY,EAAQ4tB,EAAWvpZ,EAAW4mZ,GAG9Dj0Z,KAAKk3Z,WAAWl2Z,EAASgoY,EAAQ37X,EAAW4mZ,IAGpD4B,EAAgBx6Z,UAAU87Z,uBAAyB,SAAUpqZ,EAAGC,EAAGguO,EAAG94I,EAAG8mS,EAAQjrV,GAC7EhxC,GAAKA,EAAIgxC,EAAE+zQ,IAAM/zQ,EAAE+F,MACnB92C,GAAKA,EAAI+wC,EAAE8zQ,IAAM9zQ,EAAE+F,MACnB,IAAI9wC,GACAgD,MAAOglO,EAAIj9L,EAAE+F,MAAO/tC,OAAQmsF,EAAInkD,EAAE+F,MAClC/2C,EAAGA,EAAI,GAAKC,EAAGA,EAAI,GAAKoxB,KAAM,cAAeE,OAAQ,OAAQ3c,MAAO,EACpEiyC,OAAQ,GAAKC,OAAQ,GAAKjI,YAAa,EACvCkI,UAAW,MAAOrmD,QAAS,EAC3BqpB,SAAS,EAAMxzB,GAAI0lY,EAAO1lY,GAAK,oBAE/B8zZ,EAAep3Z,KAAK20D,kBACxB30D,KAAKojF,YAAYoxU,sBAAsB4C,EAAcpkZ,IAKzD6iZ,EAAgBx6Z,UAAUg8Z,kBAAoB,SAAUr2Z,EAASgoY,EAAQ37X,GACrE,IAAI2I,EAAQhV,EAAQy4C,WAAWzjC,OAAS,EACpCD,EAAS/U,EAAQy4C,WAAW1jC,QAAU,EACtChJ,EAAI/L,EAAQ6K,QAAUmK,EAAQhV,EAAQquD,MAAMtiD,EAC5CC,EAAIhM,EAAQiL,QAAU8J,EAAS/U,EAAQquD,MAAMriD,EACjDD,GAAKA,EAAIM,EAAUykT,IAAMzkT,EAAUy2C,MACnC92C,GAAKA,EAAIK,EAAUwkT,IAAMxkT,EAAUy2C,MACnC,IAAI9wC,GACAgD,MAAOA,EAAQ3I,EAAUy2C,MAAO/tC,OAAQA,EAAS1I,EAAUy2C,MAC3D/2C,EAAGA,EAAGC,EAAGA,EAAGoxB,KAAM,cAAeE,OAAQ,UAAW3c,MAAO3gB,EAAQslD,YACnEsN,OAAQ5yD,EAAQquD,MAAMtiD,EAAG8mD,OAAQ7yD,EAAQquD,MAAMriD,EAAG4+C,YAAa,EAC/DkI,UAAW,GAAIrmD,QAAS,EAAGs7B,aAAc,EACzCjS,SAAS,EAAMxzB,GAAI0lY,EAAO1lY,GAAK,eAAgBonI,MAAO,yBAE1D1qI,KAAKojF,YAAY9+C,cAAc0kW,EAAQh2X,EAAShT,KAAKkxD,YAEzD2kW,EAAgBx6Z,UAAU0zF,SAAW,SAAUi6S,EAAQh2X,GACnDhT,KAAKojF,YAAY2L,SAASi6S,EAAQh2X,IAEtC6iZ,EAAgBx6Z,UAAUm6B,SAAW,SAAUwzW,EAAQh2X,GACnDhT,KAAKojF,YAAY5tD,SAASwzW,EAAQh2X,EAAShT,KAAKkxD,YAEpD2kW,EAAgBx6Z,UAAUi8Z,mBAAqB,SAAUt2Z,EAASgoY,EAAQ7qV,EAAa4F,EAAa2L,EAAqBriD,EAAWkqZ,EAASC,GACzI,IAAIhrZ,EAAOxL,EAAQ6K,QAAU7K,EAAQy4C,WAAWzjC,MAAQhV,EAAQquD,MAAMtiD,EAClEL,EAAM1L,EAAQiL,QAAUjL,EAAQy4C,WAAW1jC,OAAS/U,EAAQquD,MAAMriD,EAClE+I,EAAS/U,EAAQy4C,WAAW1jC,OAC5BC,EAAQhV,EAAQy4C,WAAWzjC,MAC3BmoC,EAAc2R,GAAkB3Q,SAChCn/C,KAAKy3Z,gBAAgBz2Z,EAASgoY,EAAQ37X,EAAWqiD,EAAqB6nW,GACtEv3Z,KAAK03Z,kBAAkB12Z,EAASgoY,EAAQ37X,EAAWqiD,EAAqB6nW,IAE5Ev3Z,KAAKumT,aAAavlT,EAASgoY,EAAQ37X,EAAWmqZ,GAC9C,IAAIG,EAAY32Z,EAAQy4C,WAAWzjC,MAAQ+tC,EACvC6zW,EAAa52Z,EAAQy4C,WAAW1jC,OAASguC,EACzC4zW,GAAa,IAAMC,GAAc,KAE7BloW,EAAsBG,GAAoBzP,iBAC1CpgD,KAAK63Z,qBAAqB,kBAAmB72Z,EAASwL,EAAME,EAAKs8X,EAAQj5U,GAAcL,EAAqB,mBAAoBvR,EAAc2R,GAAkB1P,gBAAiB/yC,OAAWlS,EAAWo8Z,GAAWhyS,aAAc,uEAAoEpqH,EAAW,uCAE/Su0D,EAAsBG,GAAoB9P,iBAC1C//C,KAAK63Z,qBAAqB,kBAAmB72Z,EAASwL,EAAOwJ,EAAOtJ,EAAKs8X,EAAQj5U,GAAcL,EAAqB,mBAAoBvR,EAAc2R,GAAkB/P,gBAAiB1yC,OAAWlS,EAAWo8Z,GAAWhyS,aAAc,wEAAqEpqH,EAAW,uCAExTu0D,EAAsBG,GAAoB3P,iBAC1ClgD,KAAK63Z,qBAAqB,kBAAmB72Z,EAASwL,EAAME,EAAMqJ,EAAQizX,EAAQj5U,GAAcL,EAAqB,mBAAoBvR,EAAc2R,GAAkB5P,gBAAiB7yC,OAAWlS,EAAWo8Z,GAAWhyS,aAAc,0EAAuEpqH,EAAW,uCAE3Tu0D,EAAsBG,GAAoBhQ,iBAC1C7/C,KAAK63Z,qBAAqB,kBAAmB72Z,EAASwL,EAAOwJ,EAAOtJ,EAAMqJ,EAAQizX,EAAQj5U,GAAcL,EAAqB,mBAAoBvR,EAAc2R,GAAkBjQ,gBAAiBxyC,OAAWlS,EAAWo8Z,GAAWhyS,aAAc,2EAAwEpqH,EAAW,wCAGxUu0D,EAAsBG,GAAoB5P,aAC1CjgD,KAAK63Z,qBAAqB,cAAe72Z,EAASwL,EAAOwJ,EAAQ,EAAGtJ,EAAKs8X,EAAQj5U,GAAcL,EAAqB,eAAgBvR,EAAc2R,GAAkB7P,YAAa5yC,OAAWlS,EAAWo8Z,GAAWhyS,aAAc,kEAA+DpqH,EAAW,mCAE1Su0D,EAAsBG,GAAoB7P,aAC1ChgD,KAAK63Z,qBAAqB,cAAe72Z,EAASwL,EAAOwJ,EAAQ,EAAGtJ,EAAMqJ,EAAQizX,EAAQj5U,GAAcL,EAAqB,eAAgBvR,EAAc2R,GAAkB9P,YAAa3yC,OAAWlS,EAAWo8Z,GAAWhyS,aAAc,qEAAkEpqH,EAAW,mCAEtTu0D,EAAsBG,GAAoB1P,YAC1CngD,KAAK63Z,qBAAqB,aAAc72Z,EAASwL,EAAME,EAAMqJ,EAAS,EAAGizX,EAAQj5U,GAAcL,EAAqB,cAAevR,EAAc2R,GAAkB3P,WAAY9yC,OAAWlS,EAAWo8Z,GAAWhyS,aAAc,mEAAgEpqH,EAAW,kCAEzSu0D,EAAsBG,GAAoB/P,YAC1C9/C,KAAK63Z,qBAAqB,aAAc72Z,EAASwL,EAAOwJ,EAAOtJ,EAAMqJ,EAAS,EAAGizX,EAAQj5U,GAAcL,EAAqB,cAAevR,EAAc2R,GAAkBhQ,WAAYzyC,OAAWlS,EAAWo8Z,GAAWhyS,aAAc,oEAAiEpqH,EAAW,mCAG1T06Z,EAAgBx6Z,UAAUy8Z,qBAAuB,SAAUpyZ,EAAUsjY,EAAQ7qV,EAAauR,EAAqBriD,EAAW0qZ,EAAiBC,EAAiBC,GACxJ,IAGI97Z,EACAouC,EAJAyE,EAActpC,EAASspC,YACvBiI,EAAcvxC,EAASuxC,YACvBllC,EAAUrM,EAASqM,QAKvB,GAFA/R,KAAK63Z,qBAAqB,uBAAwB9lZ,EAASi9B,EAAYjiC,EAAGiiC,EAAYhiC,EAAGg8X,EAAQj5U,GAAcL,EAAqB,wBAAyBvR,EAAc2R,GAAkBooW,gBAAiB7qZ,EAAW0qZ,OAAiB58Z,GAAaoqH,aAAc,wDAAqDpqH,EAAW,yCACrU6E,KAAK63Z,qBAAqB,uBAAwB9lZ,EAASklC,EAAYlqC,EAAGkqC,EAAYjqC,EAAGg8X,EAAQj5U,GAAcL,EAAqB,wBAAyBvR,EAAc2R,GAAkBqoW,gBAAiB9qZ,EAAW2qZ,OAAiB78Z,GAAaoqH,aAAc,wDAAqDpqH,EAAW,yCACjU88Z,EACA,IAAuB,aAAlBvyZ,EAASgB,MAAyC,WAAlBhB,EAASgB,OAAsBhB,EAAS+jC,SAAShtC,OAAS,EAC3F,IAAKN,EAAI,EAAGA,EAAIuJ,EAAS+jC,SAAShtC,OAAS,EAAGN,IAC1CouC,EAAU7kC,EAAS+jC,SAASttC,GAC5B6D,KAAK63Z,qBAAsB,kBAAoB17Z,EAAI,GAAK4V,EAASw4B,EAAQpX,MAAMpmB,EAAGw9B,EAAQpX,MAAMnmB,EAAGg8X,GAAQ,EAAM7qV,EAAc2R,GAAkBooW,gBAAiB7qZ,EAAW0qZ,EAAiB,KAAM,KAAM57Z,QAI9M,IAAKA,EAAI,EAAGA,EAAIuJ,EAAS+jC,SAAShtC,OAAQN,IAAK,CAC3C,IAAIktC,EAAM3jC,EAAS+jC,SAASttC,GAC5B6D,KAAKo4Z,uBAAuB,eAAiBj8Z,EAAI,GAAI4V,EAASs3B,EAAK2/V,EAAQj5U,GAAcL,EAAqB,wBAAyBriD,GAInJ,GAAsB,WAAlB3H,EAASgB,KACT,IAAKvK,EAAI,EAAGA,EAAIuJ,EAAS+jC,SAAShtC,OAAQN,IAAK,CAC3C,IAAIk8Z,EAAY3yZ,EAAS+jC,SAASttC,GAC9Bm8Z,EAAenmX,GAAMC,aAAaimX,EAAU98W,QAC1C88W,EAAUlzW,aAD0CkzW,EAAU98W,OAEpEv7C,KAAK63Z,qBAAqB,gBAAkB17Z,EAAI,GAAK,KAAM4V,EAASumZ,EAAYvrZ,EAAGurZ,EAAYtrZ,EAAGg8X,EAAQj5U,GAAcL,EAAqB,wBAAyBvR,EAAc2R,GAAkBooW,gBAAiB7qZ,OAAWlS,OAAWA,GAAaoqH,aAAc,wDAAqDpqH,EAAW,oCACpU40D,GAAcL,EAAqB,yBACnC1vD,KAAKu4Z,iBAAiB,eAAiBp8Z,EAAI,GAAK,KAAM4V,EAASi3X,EAAQqvB,EAAUphY,OAAO,GAAKkb,GAAMC,aAAaimX,EAAU98W,QAA6B88W,EAAUlzW,aAA7BkzW,EAAU98W,OAAiCluC,GAEnLirZ,EAAenmX,GAAMC,aAAaimX,EAAUrvX,QAA6BqvX,EAAUjzW,aAA7BizW,EAAUrvX,OAChEhpC,KAAK63Z,qBAAqB,gBAAkB17Z,EAAI,GAAK,KAAM4V,EAASumZ,EAAYvrZ,EAAGurZ,EAAYtrZ,EAAGg8X,EAAQj5U,GAAcL,EAAqB,wBAAyBvR,EAAc2R,GAAkBqoW,gBAAiB9qZ,OAAWlS,OAAWA,GAAaoqH,aAAc,wDAAqDpqH,EAAW,oCACpU40D,GAAcL,EAAqB,yBACnC1vD,KAAKu4Z,iBAAiB,eAAiBp8Z,EAAI,GAAK,KAAM4V,EAASi3X,EAAQqvB,EAAUphY,OAAO,GAAKkb,GAAMC,aAAaimX,EAAUrvX,QAA6BqvX,EAAUjzW,aAA7BizW,EAAUrvX,OAAiC37B,KAK/LwoZ,EAAgBx6Z,UAAU+8Z,uBAAyB,SAAU90Z,EAAIoC,EAAU6kC,EAASy+V,EAAQrkY,EAAYo5C,GACpG,IAAInlB,EACA9B,EACAr6B,EACAgnB,EAAI,EACR,IAAKA,EAAI,EAAGA,EAAI8mB,EAAQtT,OAAOx6B,OAAS,EAAGgnB,IACvChnB,EAAS01C,GAAM+F,eAAe3N,EAAQtT,OAAOxT,GAAI8mB,EAAQtT,OAAOxT,EAAI,IACpEmV,EAAe2R,EAAQtT,OAAOxT,GAAGzW,EAAEmS,QAAQ,KAAOorB,EAAQtT,OAAOxT,EAAI,GAAGzW,EAAEmS,QAAQ,GAAM,aAAe,WACvG2X,EAAWr6B,GAAU,GACrBuD,KAAKw4Z,sBAAuBl1Z,EAAK,KAAOmgB,EAAI,GAAK/d,GAAa6kC,EAAQtT,OAAOxT,GAAG1W,EAAIw9B,EAAQtT,OAAOxT,EAAI,GAAG1W,GAAK,GAAQw9B,EAAQtT,OAAOxT,GAAGzW,EAAIu9B,EAAQtT,OAAOxT,EAAI,GAAGzW,GAAK,EAAKg8X,EAAQlyW,EAAS8B,EAAamlB,IAGnN83W,EAAgBx6Z,UAAUm9Z,sBAAwB,SAAUl1Z,EAAIoC,EAAUqH,EAAGC,EAAGg8X,EAAQlyW,EAAS8B,EAAamlB,GAC1G,IAAI7gC,EACAglF,EACAo3D,EACgB,eAAhB1gI,GACA1b,EAAO,4BACPglF,GAAK,GACLo3D,GAAK,IAGLp8I,EAAO,4BACPglF,GAAK,EACLo3D,GAAK,IAET,IAAItmJ,GACAjG,GAAKA,EAAIgxC,EAAE+zQ,IAAM/zQ,EAAE+F,MAASo+C,EAAGl1F,GAAKA,EAAI+wC,EAAE8zQ,IAAM9zQ,EAAE+F,MAASw1G,EAAG33I,MAAO,EACrEyc,KAAM,UAAWE,OAAQ,QAASstB,YAAa,EAAGkI,UAAW,GAAIt3D,KAAM0gB,EACvElH,MAAO,GAAID,OAAQ,GAAI69C,OAAQ,EAAGC,OAAQ,EAAGpmD,QAAS,EAAGqpB,QAASA,EAASxzB,GAAIA,GAEnFtD,KAAKojF,YAAY5tD,SAASwzW,EAAQh2X,EAAShT,KAAKkxD,YAEpD2kW,EAAgBx6Z,UAAUo8Z,gBAAkB,SAAUz2Z,EAASgoY,EAAQ37X,EAAWqiD,EAAqB6nW,GACnG,IAAIxlZ,EAAU/Q,EAEV81B,KAAW44B,EAAsBG,GAAoB1Q,QACrDo4W,IACAzgY,GAAU,GAEd,IAAI9jB,EAAUhT,KAAKy4Z,kBAAkB1mZ,EAAS1E,GAC9C2F,EAAQorB,KAAO,OACfprB,EAAQsrB,OAAS,QACjBtrB,EAAQ44C,YAAc,EACtB54C,EAAQ8gD,UATQ,MAUhB9gD,EAAQ8jB,QAAUA,EAClB,IAAIgtB,EAAQz2C,EAAUy2C,MACtB9wC,EAAQjG,GAAK+2C,EACb9wC,EAAQhG,GAAK82C,EACb9wC,EAAQgD,OAAS8tC,EACjB9wC,EAAQ+C,QAAU+tC,EAClB9wC,EAAQ1P,GAAK,YACb0P,EAAQ03H,MAAQ,uBAChB,IAAIltF,GAAezwC,EAAGgF,EAAQ0nC,WAAWzjC,MAAQjE,EAAQs9C,MAAMtiD,EAAI+2C,EAAO92C,GAAI,IAC1E0qC,GAAa3qC,EAAGgF,EAAQ0nC,WAAWzjC,MAAQjE,EAAQs9C,MAAMtiD,EAAI+2C,EAAO92C,EAAG,GAC3EgG,EAAQwqC,WAAaA,EACrBxqC,EAAQ0kC,SAAWA,EACnB13C,KAAKojF,YAAY2L,SAASi6S,EAAQh2X,IAEtC6iZ,EAAgBx6Z,UAAUk9Z,iBAAmB,SAAUj1Z,EAAIyO,EAASi3X,EAAQzrY,EAAOyhB,EAAK3R,GACpF,IACI2F,EAAUhT,KAAKy4Z,kBAAkB1mZ,EAAS1E,GAC9C2F,EAAQ1P,GAAKA,EACb0P,EAAQsrB,OAAS,QACjBtrB,EAAQ44C,YAAc,EACtB54C,EAAQ8gD,UALQ,MAMhB9gD,EAAQorB,KAAO,OACfprB,EAAQ03H,MAAQ,wBAChB13H,EAAQjG,EAAI,EACZiG,EAAQhG,EAAI,EACZ,IAAI82C,EAAQz2C,EAAUy2C,MAKlBtG,GAAezwC,GAJTxP,EAAMwP,EAAIM,EAAUykT,IAAMhuQ,EAIV92C,GAHhBzP,EAAMyP,EAAIK,EAAUwkT,IAAM/tQ,GAIhCpM,GAAa3qC,GAHPiS,EAAIjS,EAAIM,EAAUykT,IAAMhuQ,EAGV92C,GAFdgS,EAAIhS,EAAIK,EAAUwkT,IAAM/tQ,GAGlC9wC,EAAQwqC,WAAaA,EACrBxqC,EAAQ0kC,SAAWA,EACnB13C,KAAKojF,YAAY2L,SAASi6S,EAAQh2X,IAEtC6iZ,EAAgBx6Z,UAAUw8Z,qBAAuB,SAAUv0Z,EAAIoC,EAAUk0B,EAAIC,EAAImvW,EAAQlyW,EAAS69X,EAAgB52W,EAAG26W,EAAWnB,EAASjD,EAAWr1Y,EAAO5b,GACvJ,IAAI0O,EAAUrM,EACVkH,EAAS,EACTu2Y,GAAap2Y,EAAG6sB,EAAI5sB,EAAG6sB,GAC3B,GAA4B,IAAxB9nB,EAAQu0C,aAAiD,IAA5Bv0C,EAAQw0C,gBAAuB,CAC5D,IAAIhb,EAASL,KACbiB,GAAaZ,EAAQx5B,EAAQu0C,YAAcv0C,EAAQw0C,gBAAiBx0C,EAAQlG,QAASkG,EAAQ9F,SAC7Fk3Y,EAAW73W,GAAuBC,EAAQ43W,GAE9C,IAAInwY,EAAUhT,KAAKy4Z,kBAAkB1mZ,GACrCiB,EAAQsrB,OAAS,QACjBtrB,EAAQ44C,YAAc,OACRzwD,IAAV8jB,GACArS,EAAS,EACToG,EAAQ1P,GAAK,cAAgB2b,EAC7BjM,EAAQorB,KAAO,YAGfxxB,EAAS,EACToG,EAAQorB,KAAOs6X,EAAY,UAAY,SAE3C1lZ,EAAQoO,SAAW+hY,EAASp2Y,EAAIgxC,EAAE+zQ,IAAM/zQ,EAAE+F,MAC1C9wC,EAAQqO,SAAW8hY,EAASn2Y,EAAI+wC,EAAE8zQ,IAAM9zQ,EAAE+F,MAC1C9wC,EAAQpG,OAASA,EACjBoG,EAAQ2O,MAAQ,EAChB3O,EAAQ1P,GAAKA,EACb0P,EAAQ8jB,QAAUA,EAClB9jB,EAAQ03H,MAAQrnI,EACZq1Z,IACA1lZ,EAAQ03H,OAAS,gBAEjB6sR,IACAvkZ,EAAQ8jB,SAAU,GAEtB92B,KAAKojF,YAAY/+C,WAAW2kW,EAAQh2X,EAAS2hZ,EAAgBL,IAEjEuB,EAAgBx6Z,UAAUkrT,aAAe,SAAU7gT,EAAUsjY,EAAQ37X,EAAWmqZ,GAC5E,IAAIzlZ,EAAUrM,EACVsN,EAAUhT,KAAKy4Z,kBAAkB1mZ,EAAS1E,GAC9C2F,EAAQjG,GAAKM,EAAUy2C,MACvB9wC,EAAQhG,GAAKK,EAAUy2C,MACvB9wC,EAAQgD,OAAS3I,EAAUy2C,MAC3B9wC,EAAQ+C,QAAU1I,EAAUy2C,MAC5B9wC,EAAQorB,KAAO,cACfprB,EAAQsrB,OAAS,UACjBtrB,EAAQ44C,YAAc,GACtB54C,EAAQ8gD,UAAY,MACpB9gD,EAAQ03H,MAAQ,mBAChB13H,EAAQ1P,GAAK,aACRk0Z,IACDxkZ,EAAQ03H,OAAS,eAErB13H,EAAQ+1B,aAAe,EACvB,IAAIkrX,EAAYj0Z,KAAKq2Z,aAAa3wZ,EAAU,YAC5C1F,KAAKojF,YAAY9+C,cAAc0kW,EAAQh2X,EAAShT,KAAKkxD,eAAW/1D,GAAW,EAAM84Z,IAErF4B,EAAgBx6Z,UAAUs9Z,kBAAoB,SAAUxpW,EAAc65U,EAAQ37X,GAE1E,IAAK,IADD0E,EAAUo9C,EAAap9C,QAClB3T,EAAK,EAAGyE,EAAKssD,EAAa8J,YAAa76D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAClE,IAAIrB,EAAM8F,EAAGzE,GAET+kZ,GADU,IAAItpW,QACH,GACXr9C,EAAOO,EAAIywC,UACf21W,EAAWj0V,GAAsBC,EAAcpyD,EAAKsQ,IAC3CN,GAAKo2Y,EAASp2Y,EAAIM,EAAUykT,IAAMzkT,EAAUy2C,MACrDq/V,EAASn2Y,GAAKm2Y,EAASn2Y,EAAIK,EAAUwkT,IAAMxkT,EAAUy2C,MACjD/mD,EAAI+5B,UACJ/5B,EAAI+5B,WAAWq4B,EAAahR,YAAc0R,GAAoBm8V,aAElE,IAAI10T,EAASt3F,KAAKy4Z,kBAAkB1mZ,GACpCulF,EAAOh0F,GAAKvG,EAAIg6B,KAAO,cACvBugE,EAAOl5D,KAAOrhC,EAAIwtD,gBAClB+sC,EAAOh5D,OAASvhC,EAAI8xO,YACpBv3I,EAAO1rC,YAAc7uD,EAAIizF,YACzBsH,EAAOl2E,QAAU+hY,EAASp2Y,EAC1BuqF,EAAOj2E,QAAU8hY,EAASn2Y,EAC1BsqF,EAAO1qF,OAAoB,GAAX7P,EAAIoyB,KACpBmoE,EAAOozC,MAAQ,8BACfpzC,EAAO31E,MAAQ,EACf21E,EAAOxgE,QAAU/5B,EAAI+5B,QACrBwgE,EAAO7pF,QAAU,EACjBzN,KAAKojF,YAAY/+C,WAAW2kW,EAAQ1xS,EAAQ,GAAKiuB,aAAcxoH,EAAIg6B,KAAO,gBAC1E,IACIgR,KAEJA,EAAkB6C,GADlB7C,EAAkBF,GAAgBrrC,IAElC,IAAIo8Z,EAAWtmW,GAAY91D,GAIvBslK,EAAUl4H,GAAc7B,GAFdhrC,EAAIoyB,KAAO,IAAOpyB,EAAIoyB,MAAQypY,EAAS5iZ,OACvCjZ,EAAIoyB,KAAO,IAAOpyB,EAAIoyB,MAAQypY,EAAS7iZ,QACQ,EAAM6iZ,EAAS7rZ,EAAG6rZ,EAAS5rZ,EAAG,EAAG,GAC9F4rZ,EAAWtmW,GAAYwvG,GACvB,IAAI9uJ,GACAjG,EAAGo2Y,EAASp2Y,EAAI6rZ,EAAS5iZ,MAAQ,EACjChJ,EAAGm2Y,EAASn2Y,EAAI4rZ,EAAS7iZ,OAAS,EAClC4L,MAAO,EAAGre,GAAI,GACdonI,MAAO,4BACPtsG,KAAMrhC,EAAI87Z,UAAWv6X,OAAQvhC,EAAIwtD,gBAAiBqB,YAAa,GAAKkI,UAAW,GAAIt3D,KAAMslK,EACzF9rJ,MAAOjZ,EAAIoyB,KAhBE,EAgBiBpZ,OAAQhZ,EAAIoyB,KAhB7B,EAgBgDykC,OAAQ,EAAGC,OAAQ,EAAGpmD,QAAS,EAAGqpB,QAAS/5B,EAAI+5B,SAEhH92B,KAAKojF,YAAY5tD,SAASwzW,EAAQh2X,EAAShT,KAAKkxD,eAAW/1D,OAAWA,GAAaoqH,aAAcxoH,EAAIg6B,KAAO,kBAGpH8+X,EAAgBx6Z,UAAUq8Z,kBAAoB,SAAU3lZ,EAASi3X,EAAQ37X,EAAWqiD,EAAqB6nW,GACvF,IAAI19W,GAAlB,IACIspW,EACAh0X,EAAO,IAAIM,GACfN,EAAKnZ,MAAQ,GACbmZ,EAAKpZ,OAAS,GACd,IAAIrJ,EAAMqF,EAAQ9F,QAAU8F,EAAQ0nC,WAAW1jC,OAAShE,EAAQs9C,MAAMriD,EAClER,EAAOuF,EAAQlG,QAAUkG,EAAQ0nC,WAAWzjC,MAAQjE,EAAQs9C,MAAMtiD,EAClE+pB,KAAW44B,EAAsBG,GAAoB1Q,QACrDo4W,IACAzgY,GAAU,GAEd,IAgBI88B,EAASpnD,EAAOuF,EAAQs9C,MAAMtiD,EAAIgF,EAAQ0nC,WAAWzjC,MACrD69C,EAASnnD,EAIb,GAHAknD,GAAUA,EAASvmD,EAAUykT,IAAMzkT,EAAUy2C,MAC7C+P,GAAUA,EAASxmD,EAAUwkT,IAAMxkT,EAAUy2C,MAC7Cq/V,GAAap2Y,EAAG6mD,EAAsB,GAAbzkC,EAAKnZ,MAAahJ,EAAG6mD,EAAS,GAAmB,GAAd1kC,EAAKpZ,QACrC,IAAxBhE,EAAQu0C,aAAiD,IAA5Bv0C,EAAQw0C,gBAAuB,CAC5D,IAAIhb,EAASL,KACbiB,GAAaZ,EAAQx5B,EAAQu0C,YAAcv0C,EAAQw0C,iBAAkBl5C,EAAUykT,GAAK//S,EAAQlG,SAAWwB,EAAUy2C,OAAQz2C,EAAUwkT,GAAK9/S,EAAQ9F,SAAWoB,EAAUy2C,OACrKq/V,EAAW73W,GAAuBC,EAAQ43W,GAE9C,IAAInwY,GACAjG,EAAGo2Y,EAASp2Y,EACZC,EAAGm2Y,EAASn2Y,EACZ2U,MAAO5P,EAAQu0C,YACfloB,KAAM,UAAWE,OAAQ,QAASstB,YAAa,GAAKkI,UAAW,GAAIt3D,KA9B5D,wqDA+BPwZ,MAAO,GAAID,OAAQ,GAAI69C,OAAQ,EAAGC,OAAQ,EAAGpmD,QAAS,EAAGqpB,QAASA,EAASxzB,GAAIyO,EAAQzO,GAAIonI,MAAO,2BAEtG13H,EAAQ1P,GAAK,cACbtD,KAAKojF,YAAY5tD,SAASwzW,EAAQh2X,EAAShT,KAAKkxD,WAAW,OAAM/1D,GAAaoqH,aAAc,yCAEhGswS,EAAgBx6Z,UAAU07Z,kBAAoB,SAAU/1Z,EAASgoY,EAAQ37X,EAAW4mZ,GAChF,IAAIjhZ,EAAUhT,KAAKy4Z,kBAAkBz3Z,EAASqM,GAC9C2F,EAAQxW,KAAOwE,EAAQwiZ,aACvBxwY,EAAQxW,KAAOwE,EAAQwiZ,aACvB,IAAI8Q,EAAYtzZ,EAAQgzD,YAAchzD,EAAQgzD,YAAchzD,EAAQsC,GACpEtD,KAAK+vB,SAASyF,SAASwzW,EAAQh2X,EAAShT,KAAKkxD,eAAW/1D,EAAW84Z,EAAWK,IAElFuB,EAAgBx6Z,UAAUy9Z,mBAAqB,SAAUnuW,EAAcouW,EAASh7W,EAAGyE,EAAeM,EAAQC,GAEtG,IAAIr0C,EAAUlO,SAAS4C,gBAAgB,6BAA8B,WACjE+3G,EAAO36G,SAAS4C,gBAAgB,6BAA8B,QAClE+3G,EAAK33G,aAAa,KAAMxD,KAAKkxD,UAAY,uBACrCvG,EAAaxM,YAAc6iW,GAAgBgY,qBAC3CruW,EAAaxM,YAAc6iW,GAAgBiY,oBAC3CvqZ,EAAQlL,aAAa,KAAMxD,KAAKkxD,UAAY,YAEhD,IAAIgoW,EAAS,EACTC,EAAU,EACVC,EAAgB,EAChBC,EAAgB,EAChBv1W,EAAQ,EACRw1W,GAAc,EAClB,GAAI92W,EAAce,YAAcf,EAAc+2W,aAAez2W,GAAUC,EACnEq2W,EAAgBr2W,EAAOitW,mBAAmBjyW,EAAE+F,OAC5Cu1W,EAAgBv2W,EAAOktW,mBAAmBjyW,EAAE+F,OAC5C6G,EAAa6uW,oBAAoBC,iBAAmBL,EAAgBt2W,EAAO3gD,UAC3EwoD,EAAa+uW,kBAAkBD,iBAAmBJ,EAAgBt2W,EAAO5gD,UACzEm3Z,GAAc,MAEb,CACD,IAAK,IAAIl7Z,EAAK,EAAGyE,EAAK8nD,EAAa+uW,kBAAkBC,cAAev7Z,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAEtF86Z,GADYr2Z,EAAGzE,GAGnB,IAAK,IAAI6F,EAAK,EAAGwG,EAAKkgD,EAAa6uW,oBAAoBG,cAAe11Z,EAAKwG,EAAGhO,OAAQwH,IAAM,CAExFk1Z,GADY1uZ,EAAGxG,GAGnB6/C,EAAQ9jD,KAAK45Z,kBAAkBjvW,EAAc5M,EAAE+F,OAEnDo1W,EAASI,EAAcD,EAAgBH,EAASp1W,EAChDq1W,EAAUG,EAAcF,EAAgBD,EAAUr1W,EAKlDyR,GAAgB7mD,GAHZpL,GAAItD,KAAKkxD,UAAY,WAAYnkD,EAAG,EAAGC,EAAG,EAAGgJ,MAAOkjZ,EACpDnjZ,OAAQojZ,EAASU,aAAc,mBAGnC75Z,KAAK85Z,uBAAuBprZ,EAASwqZ,EAAQC,EAASr1W,EAAO6G,EAAcnI,EAAeO,EAAQu2W,GAClGt5Z,KAAK+5Z,qBAAqBrrZ,EAASwqZ,EAAQC,EAASr1W,EAAO6G,EAAcnI,EAAeM,EAAQw2W,GAChGn+S,EAAKx5G,YAAY+M,GACjBqqZ,EAAQp3Z,YAAYw5G,IAExB06S,EAAgBx6Z,UAAUy+Z,uBAAyB,SAAUprZ,EAASwqZ,EAAQC,EAASr1W,EAAO6G,EAAcnI,EAAeO,EAAQu2W,GAC/H,IAEIU,EAFA37X,EAAQ,EACRy1B,KAEJ,GAAInJ,EAAaxM,YAAc6iW,GAAgBgY,oBAAqB,CAChE,IAAIiB,EAAYtvW,EAAa6uW,oBAAoBG,cAC/BhvW,EAAa6uW,oBAAoB96D,UAC/C/zS,EAAa6uW,oBAAoBU,gBACjCpmW,EAAY9zD,KAAK+vB,SAASyhY,eAAe7mW,EAAa6uW,oBAAoBU,gBAE1E13W,EAAce,YAAcf,EAAc+2W,aAAex2W,IACzDk3W,EAAYj6Z,KAAKm6Z,oBAAoBF,EAAWz3W,EAAeO,EAAQo2W,IAE3E,IAAK,IAAIh9Z,EAAI,EAAGA,EAAI89Z,EAAUx9Z,OAAQN,GAAQ,EAAG,CAC7C69Z,EAAQx5Z,SAAS4C,gBAAgB,6BAA8B,QAC/D,IAAI02B,EAAIuE,EAAQ47X,EAAU99Z,GAAK,EAC/B29B,EAAIw/X,EAAcx/X,EAAIA,EAAIgqB,EAO1ByR,GAAgBykW,GALZ90X,eAAgB+0X,EAAU99Z,GAAImiC,OAAUqsB,EAAa6uW,oBAAoB96D,UACzE5kU,EAAK,QAAc,KAAOo/X,EAAS,MAAY,KAC/CplW,UAAaA,EAAU5mD,WACvBw9H,MAA0B,OAAjBuvR,EAAU99Z,GAAc,uBAAyB,wBAG9DuS,EAAQ/M,YAAYq4Z,GACpB37X,GAAS47X,EAAU99Z,EAAI,GAAK89Z,EAAU99Z,MAIlD05Z,EAAgBx6Z,UAAU0+Z,qBAAuB,SAAUrrZ,EAASwqZ,EAAQC,EAASr1W,EAAO6G,EAAcnI,EAAeM,EAAQw2W,GAC7H,IAEIc,EAFA/7X,EAAQ,EACRy1B,KAEJ,GAAInJ,EAAaxM,YAAc6iW,GAAgBiY,kBAAmB,CAC9D,IAAIgB,EAAYtvW,EAAa+uW,kBAAkBC,cAC7BhvW,EAAa+uW,kBAAkBh7D,UAC7C/zS,EAAa+uW,kBAAkBQ,gBAC/BpmW,EAAY9zD,KAAK+vB,SAASyhY,eAAe7mW,EAAa+uW,kBAAkBQ,gBAExE13W,EAAce,YAAcf,EAAc+2W,aAAez2W,IACzDm3W,EAAYj6Z,KAAKm6Z,oBAAoBF,EAAWz3W,EAAeM,EAAQo2W,IAE3E,IAAK,IAAI/8Z,EAAI,EAAGA,EAAI89Z,EAAUx9Z,OAAQN,GAAQ,EAAG,CAC7Ci+Z,EAAQ55Z,SAAS4C,gBAAgB,6BAA8B,QAC/D,IAAI02B,EAAIuE,EAAQ47X,EAAU99Z,GAAK,EAC/B29B,EAAIw/X,EAAcx/X,EAAIA,EAAIgqB,EAO1ByR,GAAgB6kW,GALZl1X,eAAgB+0X,EAAU99Z,GAAImiC,OAAUqsB,EAAa+uW,kBAAkBh7D,UACvE5kU,EAAK,MAAY,SAAe,IAAMq/X,EAAU,KAChDrlW,UAAaA,EAAU5mD,WACvBw9H,MAA0B,OAAjBuvR,EAAU99Z,GAAc,uBAAyB,wBAG9DuS,EAAQ/M,YAAYy4Z,GACpB/7X,GAAS47X,EAAU99Z,EAAI,GAAK89Z,EAAU99Z,MAIlD05Z,EAAgBx6Z,UAAUg/Z,WAAa,SAAU1vW,EAAc2vW,EAASjtZ,EAAWm1C,EAAeM,EAAQC,GACtG,IACI5mD,EADAunE,EAAO42V,EAAQrrY,eAAejvB,KAAKkxD,UAAY,cAE/CooW,GAAc,EAClB,GAAI51V,EAAM,CACN,IAAIh1D,EAAU4rZ,EAAQrrY,eAAejvB,KAAKkxD,UAAY,YAClDxiD,GACAA,EAAQjO,WAAW6E,YAAYoJ,GAEnC,IAAI0qZ,EAAgB,EAChBC,EAAgB,EAChBv1W,EAAQ,EACRtB,EAAce,YAAcf,EAAc+2W,aAAex2W,GAAUD,GACnEs2W,EAAgBr2W,EAAOitW,mBAAmB3iZ,EAAUy2C,OACpDu1W,EAAgBv2W,EAAOktW,mBAAmB3iZ,EAAUy2C,OACpDw1W,GAAc,EACd3uW,EAAa6uW,oBAAoBC,iBAAmBL,EAAgBt2W,EAAO3gD,UAC3EwoD,EAAa+uW,kBAAkBD,iBAAmBJ,EAAgBt2W,EAAO5gD,WAGzE2hD,EAAQ9jD,KAAK45Z,kBAAkBjvW,EAAct9C,EAAUy2C,OAE3D,IAAI/tC,EAAS,EACb,IAAK5Z,EAAI,EAAGA,EAAIwuD,EAAa6uW,oBAAoBG,cAAcl9Z,OAAQN,IACnE4Z,GAAU40C,EAAa6uW,oBAAoBG,cAAcx9Z,GAE7D,IAAI6Z,EAAQ,EACZ,IAAK7Z,EAAI,EAAGA,EAAIwuD,EAAa+uW,kBAAkBC,cAAcl9Z,OAAQN,IACjE6Z,GAAS20C,EAAa+uW,kBAAkBC,cAAcx9Z,GAE1D,IAAIm4J,GACAvnJ,GAAIM,EAAUykT,GAAKzkT,EAAUy2C,MAC7B92C,GAAIK,EAAUwkT,GAAKxkT,EAAUy2C,OAEjCyR,GAAgBmO,EAAM4wF,GACtBt+I,EAAQsjZ,EAAcD,EAAgBrjZ,EAAQ8tC,EAC9C/tC,EAASujZ,EAAcF,EAAgBrjZ,EAAS+tC,EAChDwwG,GACIhxJ,GAAItD,KAAKkxD,UAAY,WAAYnkD,EAAG,EAAGC,EAAG,EAAGgJ,MAAOA,EACpDD,OAAQA,EAAQ8jZ,aAAc,kBAGlCtkW,GADA7mD,EAAUlO,SAAS4C,gBAAgB,6BAA8B,WACxCkxJ,GACzBt0J,KAAK85Z,uBAAuBprZ,EAASsH,EAAOD,EAAQ+tC,EAAO6G,EAAcnI,EAAeO,EAAQu2W,GAChGt5Z,KAAK+5Z,qBAAqBrrZ,EAASsH,EAAOD,EAAQ+tC,EAAO6G,EAAcnI,EAAeM,EAAQw2W,GACnFgB,EAAQrrY,eAAejvB,KAAKkxD,UAAY,sBAC9CvvD,YAAY+M,KAGzBmnZ,EAAgBx6Z,UAAU8+Z,oBAAsB,SAAUF,EAAWz3W,EAAeG,EAAOE,GAGvF,IAAK,IAFD03W,KACAhK,EAAe1tW,EAAeF,EAAMxgD,SAC/BhG,EAAI,EAAGA,EAAqB,EAAjBwmD,EAAMxgD,SAAchG,IAEhCo+Z,EAAYp+Z,GADZA,EAAI,GAAM,EACc,IAANA,EAAW,KAAO,IAGnBo0Z,EAAegK,EAAYp+Z,EAAI,GAGxD,OAAOo+Z,GAEX1E,EAAgBx6Z,UAAUu+Z,kBAAoB,SAAUjvW,EAAc7G,GAClE,GAAIA,GAAS,EACT,KAAOA,GAAS,GACZA,GAAS,OAGZ,GAAIA,GAAS,GACd,KAAOA,GAAS,IACZA,GAAS,EAGjB,IAAI3nD,EAGJ,GAFAwuD,EAAa6uW,oBAAoBC,gBAAkB9uW,EAAa6uW,oBAAoBgB,cACpF7vW,EAAa+uW,kBAAkBD,gBAAkB9uW,EAAa+uW,kBAAkBc,cAClE,IAAV12W,EAAa,CACb,IAAI22W,EAAY9vW,EAAa6uW,oBAE7B,IADAiB,EAAUhB,mBACLt9Z,EAAI,EAAGA,EAAIs+Z,EAAUD,cAAc/9Z,OAAQN,IAC5Cs+Z,EAAUhB,gBAAgBt9Z,GAAKs+Z,EAAUD,cAAcr+Z,GAAK2nD,EAIhE,KAFA22W,EAAY9vW,EAAa+uW,mBACfD,mBACLt9Z,EAAI,EAAGA,EAAIs+Z,EAAUD,cAAc/9Z,OAAQN,IAC5Cs+Z,EAAUhB,gBAAgBt9Z,GAAKs+Z,EAAUD,cAAcr+Z,GAAK2nD,EAGpE,OAAOA,GAEX+xW,EAAgBx6Z,UAAU6oC,kBAAoB,SAAUljC,EAASgoY,EAAQ37X,EAAW4mZ,GAChF,IAAIjhZ,EAAUhT,KAAKy4Z,kBAAkBz3Z,EAASqM,GAC9C2F,EAAQ+1B,aAAe,EACvB/oC,KAAK+vB,SAASuU,cAAc0kW,EAAQh2X,EAAShT,KAAKkxD,eAAW/1D,OAAWA,EAAW84Z,GACnFjhZ,EAAQuc,WAAagkC,GAAmBvyD,EAAQ0D,MAAM6qB,WAAYvuB,EAAQ0D,MAAMonD,cAChF94C,EAAQ4nB,QAAU55B,EAAQ45B,QAC1B5nB,EAAQ6/C,UAAYY,GAAkBzyD,EAAQ0D,MAAMonD,cACpD94C,EAAQg5C,UAAYkI,GAAkBlzD,EAAQ0D,MAAMsnD,WACpDh5C,EAAQ6iB,MAAQ70B,EAAQ0D,MAAMmxB,MAC9B7iB,EAAQ+4C,OAAS/qD,EAAQ0D,MAAMqnD,OAC/B/4C,EAAQ64C,KAAO7qD,EAAQ0D,MAAMmnD,KAC7B74C,EAAQkc,SAAWluB,EAAQ0D,MAAMwqB,SACjClc,EAAQsc,WAAatuB,EAAQ0D,MAAM4qB,WACnCtc,EAAQ4tB,aAAe5/B,EAAQ0D,MAAMk8B,aACrC5tB,EAAQi5C,eAAiBjrD,EAAQ0D,MAAMunD,eACvCj5C,EAAQihD,OAASjzD,EAAQizD,OACzBjhD,EAAQ2gD,WAAa3yD,EAAQ2yD,WAC7B3gD,EAAQzB,WAAavQ,EAAQuQ,WAC7ByB,EAAQ8gD,UAAY,GACpB9gD,EAAQ44C,YAAc,EACtB54C,EAAQorB,KAAO,GACf,IAAIk2X,EAAYtzZ,EAAQgzD,YAAchzD,EAAQgzD,YAAchzD,EAAQ45B,QAAU55B,EAAQ45B,QAAU55B,EAAQsC,GACxGtD,KAAK+vB,SAAS0gE,SAASu4S,EAAQh2X,EAASihZ,EAAWK,EAAWt0Z,KAAKkxD,WAC/DlxD,KAAK+1Z,YACL/0Z,EAAQizD,QAAS,IAGzB4hW,EAAgBx6Z,UAAU27Z,oBAAsB,SAAUh2Z,EAASgoY,EAAQ37X,EAAW4mZ,GAClF,IAAI9vH,EACAE,EACAqyH,EAAY12Z,KAAKq2Z,aAAar1Z,OAAS7F,EAAW6tY,IAAWirB,EAC7DyG,EAAc16Z,KAAKs2Z,iBAAiBt1Z,EAASgoY,EAAQ0tB,GAAWr5X,GAAK2rW,EACrEh2X,EAAUhT,KAAKy4Z,kBAAkBz3Z,EAASqM,GAK9C,OAJA2F,EAAQorB,KAAO,cACfprB,EAAQ+1B,aAAe/nC,EAAQ+nC,aAC/B/1B,EAAQsrB,OAAS,cACjBt+B,KAAK+vB,SAASuU,cAAc0kW,EAAQh2X,EAAShT,KAAKkxD,eAAW/1D,OAAWA,EAAW84Z,GAC3EjzZ,EAAQ8iD,OACZ,IAAK,OACDqgP,EAAgBnjS,EAAQ8iZ,YAAY9tY,MACpCquR,EAAiBrjS,EAAQ8iZ,YAAY/tY,OACrC,MACJ,IAAK,UACDouR,EAAgBnjS,EAAQy4C,WAAWzjC,MACnCquR,EAAiBrjS,EAAQy4C,WAAW1jC,OACpC,MACJ,IAAK,OAEGouR,EAAgBE,EADhBrjS,EAAQy4C,WAAWzjC,OAAShV,EAAQy4C,WAAW1jC,OACd/U,EAAQy4C,WAAWzjC,MAGnBhV,EAAQy4C,WAAW1jC,OAExD,MACJ,IAAK,QAEGouR,EAAgBE,EADhBrjS,EAAQy4C,WAAWzjC,OAAShV,EAAQy4C,WAAW1jC,OACd/U,EAAQy4C,WAAWzjC,MAGnBhV,EAAQy4C,WAAW1jC,OAI5D/V,KAAKojF,aACLpjF,KAAKojF,YAAY+xU,kBAAkBn0Z,EAAS05Z,EAAar2H,EAAgBF,EAAeuyH,IAGhGb,EAAgBx6Z,UAAU47Z,kBAAoB,SAAUj2Z,EAASgoY,EAAQ4tB,EAAWvpZ,EAAW4mZ,GAC3F,IAAIjhZ,EAAUhT,KAAKy4Z,kBAAkBz3Z,EAASqM,GAC9C2F,EAAQorB,KAAO,cACfprB,EAAQ+1B,aAAe/nC,EAAQ+nC,aAC/B/1B,EAAQsrB,OAAS,cACjBt+B,KAAK+vB,SAASuU,cAAc0kW,EAAQh2X,EAAShT,KAAKkxD,eAAW/1D,OAAWA,EAAW84Z,GAC/Ej0Z,KAAKojF,aACLpjF,KAAKojF,YAAY8xU,gBAAgBl0Z,EAAS41Z,EAAUx8Y,SAAS,GAAI/M,IAGzEwoZ,EAAgBx6Z,UAAUy7Z,mBAAqB,SAAU91Z,EAASgoY,EAAQ37X,EAAW4mZ,GACjF,IAAIjhZ,EAAUhT,KAAKy4Z,kBAAkBz3Z,EAASqM,GAC9C2F,EAAQ+1B,aAAe,EACvB/oC,KAAK+vB,SAASuU,cAAc0kW,EAAQh2X,EAAShT,KAAKkxD,eAAW/1D,OAAWA,EAAW84Z,GAEnF,IAAIp6I,EACAC,EACA6gJ,EACAC,EACJ,GAAwB,YAApB55Z,EAAQqjZ,QACRxqI,EAAa74Q,EAAQy4C,WAAWzjC,MAChC8jQ,EAAc94Q,EAAQy4C,WAAW1jC,WAEhC,CACD,IAAI6jX,EAAe54X,EAAQ8iZ,YAAY9tY,MACnCq/Y,EAAgBr0Z,EAAQ8iZ,YAAY/tY,OACpC8kZ,EAAa7nZ,EAAQgD,MAAQ4jX,EAC7BjmC,EAAc3gV,EAAQ+C,OAASs/Y,EAC/ByF,OAAQ,EACZ,OAAQ95Z,EAAQqjZ,SACZ,IAAK,OAEDxqI,EAAa+/G,GADbkhC,EAAQzuZ,KAAK8T,IAAI06Y,EAAYlnE,IAE7B75E,EAAcu7I,EAAgByF,EAC9B9nZ,EAAQjG,GAAKV,KAAKE,IAAIyG,EAAQgD,MAAQ6jQ,GAAc,EACpD7mQ,EAAQhG,GAAKX,KAAKE,IAAIyG,EAAQ+C,OAAS+jQ,GAAe,EACtD,MACJ,IAAK,QACD+gJ,EAAa7nZ,EAAQgD,MAAQ4jX,EAC7BjmC,EAAc3gV,EAAQ+C,OAASs/Y,EAE/Bx7I,EAAa+/G,GADbkhC,EAAQzuZ,KAAKC,IAAIuuZ,EAAYlnE,IAE7B75E,EAAcu7I,EAAgByF,EAC9BH,EAAc3nZ,EAAQgD,MAAQ6jQ,EAAa+/G,EAC3CghC,EAAe5nZ,EAAQ+C,OAAS+jQ,EAAcu7I,EAC9C,MACJ,IAAK,OACDx7I,EAAa+/G,EACb9/G,EAAcu7I,GAI1BriZ,EAAQgD,MAAQ6jQ,EAChB7mQ,EAAQ+C,OAAS+jQ,EAIjB9mQ,EAAQ2nZ,YAAcA,EACtB3nZ,EAAQ4nZ,aAAeA,EACvB5nZ,EAAQzW,OAASyE,EAAQzE,OACzByW,EAAQg1C,UAAYhnD,EAAQwsD,WAC5Bx6C,EAAQ8wC,MAAQ9iD,EAAQ0sD,WACxB16C,EAAQghD,YAAchzD,EAAQgzD,YAAchzD,EAAQgzD,YAAchzD,EAAQsC,GAC1EtD,KAAK+vB,SAASkhE,UAAU+3S,EAAQh2X,EAASihZ,IAE7C4B,EAAgBx6Z,UAAUmgX,gBAAkB,SAAUlnR,EAAO00S,EAAQ4tB,EAAWvpZ,EAAW4mZ,EAAW4C,GAClG,IAAIkE,GAAc99Y,IAAKg3Y,EAAW52X,EAAG2rW,GACrC,GAAIhpY,KAAKkxD,YACL+iW,EAAYj0Z,KAAKq2Z,aAAa/hU,IAAU2/T,EACpCj0Z,KAAK+1Z,WAAW,CAChB,IAAIjnF,OAAe,EACnBA,EAAe9uU,KAAKs2Z,iBAAiBhiU,EAAO00S,EAAQirB,GAAW52X,GAAK2rW,EACpEirB,EAAYj0Z,KAAKq2Z,aAAar2Z,KAAKg7Z,gBAAgB1mU,EAAMl6E,YAAc65Y,EACvE,IAAIgH,EAAkBj7Z,KAAKs2Z,iBAAiBt2Z,KAAKg7Z,gBAAgB1mU,EAAMl6E,UAAW00T,EAAcmlF,GAChG8G,EAAU99Y,IAAMg+Y,EAAgBh+Y,KAAOg3Y,EACvC8G,EAAU19X,EAAI49X,EAAgB59X,GAAKyxS,EAC/B+nF,GACI5C,IACKA,EAAUhlY,eAAe8rY,EAAU19X,EAAE/5B,KACtC0lY,EAAOrnY,YAAYo5Z,EAAU19X,IAGrC2rW,EAAS+xB,EAAU19X,GAGnB2rW,EAAS+xB,EAAU19X,EAK/B,GADAr9B,KAAKk3Z,WAAW5iU,EAAO00S,EAAQ37X,EAAW4mZ,GACtC3/T,EAAM0zG,cAGN,IAAK,IADDkzN,EADAC,OAAU,EAEL/8Z,EAAK,EAAGyE,EAAKyxF,EAAMl6E,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACxD,IAAIiC,EAAQwC,EAAGzE,GACf61Z,EAAYj0Z,KAAKq2Z,aAAar2Z,KAAKg7Z,gBAAgB1mU,EAAMl6E,WAAa/Z,IAAU4zZ,EAC5Ej0Z,KAAK+1Z,YAELoF,GADAD,EAAcl7Z,KAAKs2Z,iBAAiBt2Z,KAAKg7Z,gBAAgB1mU,EAAMl6E,WAAa/Z,EAAO2oY,EAAQirB,IACrE52X,GAAK2rW,EACvBkyB,EAAYj+Y,MACZg3Y,EAAYiH,EAAYj+Y,MAGhCjd,KAAK22Z,cAAct2Z,EAAO86Z,GAAWnyB,EAAQ4tB,EAAWvpZ,EAAW4mZ,GAAW,KAI1F4B,EAAgBx6Z,UAAU2/Z,gBAAkB,SAAU5gZ,EAAU6E,GAC5D,GAAI7E,GAAYA,EAAS3d,OAAS,EAAuB,CACrD,IAAI4D,EAAQ+Z,EAAS,GACrB,GAAI/Z,aAAiBwtD,GACjB,OAAOxtD,EAEFA,EAAM+Z,UAAY/Z,EAAM+Z,SAAS3d,QACtCuD,KAAKg7Z,gBAAgB36Z,EAAM+Z,SAAU6E,KAAW,KAK5D42Y,EAAgBx6Z,UAAU67Z,WAAa,SAAUl2Z,EAASgoY,EAAQ37X,EAAW4mZ,GACzE,IAAIjhZ,EAAUhT,KAAKy4Z,kBAAkBz3Z,EAASqM,GAC9C2F,EAAQ+1B,aAAe/nC,EAAQ+nC,cAAgB,EAC/C,IAAIurX,EAAYtzZ,EAAQgzD,YAAchzD,EAAQgzD,YAAchzD,EAAQsC,GACpEtD,KAAK+vB,SAASuU,cAAc0kW,EAAQh2X,EAAShT,KAAKkxD,eAAW/1D,OAAWA,EAAW84Z,EAAWK,IAElGuB,EAAgBx6Z,UAAU+/Z,SAAW,SAAUpyB,EAAQh2X,GACnDA,EAAQ+1B,aAAe,EACvB/oC,KAAKojF,YAAY9+C,cAAc0kW,EAAQh2X,EAAShT,KAAKkxD,YAEzD2kW,EAAgBx6Z,UAAUo9Z,kBAAoB,SAAUz3Z,EAASqM,GAC7D,IAAI2F,GACAgD,MAAOhV,EAAQy4C,WAAWzjC,MAAOD,OAAQ/U,EAAQy4C,WAAW1jC,OAC5DhJ,EAAG/L,EAAQ6K,QAAU7K,EAAQy4C,WAAWzjC,MAAQhV,EAAQquD,MAAMtiD,EAAI,GAClEC,EAAGhM,EAAQiL,QAAUjL,EAAQy4C,WAAW1jC,OAAS/U,EAAQquD,MAAMriD,EAAI,GACnEoxB,KAAMp9B,EAAQ0D,MAAM05B,KAAME,OAAQt9B,EAAQ0D,MAAMgnD,YAAa/pC,MAAO3gB,EAAQslD,YAActlD,EAAQulD,gBAClGqN,OAAQ5yD,EAAQquD,MAAMtiD,EAAG8mD,OAAQ7yD,EAAQquD,MAAMriD,EAAG4+C,YAAa5qD,EAAQ0D,MAAMknD,YAC7EkI,UAAW9yD,EAAQ0D,MAAMinD,iBAAmB,GAAIl+C,QAASzM,EAAQ0D,MAAM+I,QAASsmD,OAAQ/yD,EAAQ+yD,OAChG7H,SAAUlrD,EAAQ0D,MAAMwnD,SAAUp1B,QAAS91B,EAAQ81B,QAASxzB,GAAItC,EAAQsC,GAAI0wD,YAAahzD,EAAQgzD,aAMrG,OAJI3mD,IACA2F,EAAQjG,GAAKM,EAAUykT,GACvB9+S,EAAQhG,GAAKK,EAAUwkT,IAEpB7+S,GAEX6iZ,EAAgBwF,yBAA2B,SAAU/tY,EAAY2jC,EAAgBlkD,EAAGC,EAAGgJ,EAAOD,GAC1EvV,SAASyuB,eAAegiC,EAAe3tD,IAAvD,IAEI6D,EADkB4tD,GAAsB9D,EAAe3tD,IAC9B2rB,eAAegiC,EAAe3tD,GAAK,UAChE,IAAK6D,GAAUmmB,EAAW/wB,OAAQ,CAC9B,IAAI++Z,E/VndhB,SAAwCpqW,GAMpC,OAJqBsD,GAAkBtD,GAEVxjD,uBAAuB,4BAC3B,G+V8cE6tZ,CAAwBtqW,EAAe3tD,KAC1D6D,EAAS3G,SAAS4C,gBAAgB,6BAA8B,UACzDI,aAAa,KAAMytD,EAAe3tD,GAAK,UAC9Cg4Z,EAAa35Z,YAAYwF,GAE7B,GAAIA,EAAQ,CACRA,EAAO4qD,eAAe,+BAAgC,aAAczkC,EAAW/wB,QAC/E,IAAIunD,EAA6B,SAArBx2B,EAAWw2B,MAAmBx2B,EAAWw2B,MAAQ,GACzDkxW,EAAW1nY,EAAWmgC,MACtBwnW,EAAcD,EAAS11Y,OAAO,GAAG1J,cAAgBo/Y,EAAS3zZ,MAAM,GAAK,IACnEyiD,EAAMxkC,OAAO,GAAG1J,cAAgBkuC,EAAMziD,MAAM,GAChCb,SAASyuB,eAAegiC,EAAe3tD,IAMzDiyD,GAAgBpuD,GAJZ7D,GAAM2tD,EAAe3tD,GAAK,SAAUyJ,EAAKA,EAAGC,EAAKA,EACjDgJ,MAASA,EAAOD,OAAUA,EAC1BukG,oBAAuB26S,MAKnCY,EAAgBx6Z,UAAUmga,gBAAkB,SAAUnuZ,EAAWouZ,GAE7D,GAAIA,EAAS,E/VlhBrB,SAAgCvqW,GAI5B,OAFsBoD,GAAmBpD,GACVjiC,eAAeiiC,EAAY,kB+VghB/BwqW,CAAgB17Z,KAAKkxD,WAC3B1tD,aAAa,YAAa,aAChC6J,EAAUykT,GAAKzkT,EAAUy2C,MAAS,IAAOz2C,EAAUwkT,GAAKxkT,EAAUy2C,MAAS,WAC5Ez2C,EAAUy2C,MAAQ,M/V3dpC,SAA6BoN,GAIzB,OAFqB4D,GAAgB5D,GACLjiC,eAAeiiC,EAAY,c+V4dvCyqW,CAAa37Z,KAAKkxD,WACxB1tD,aAAa,YAAa,aAAgB6J,EAAUykT,GAAKzkT,EAAUy2C,MAAS,IAC/Ez2C,EAAUwkT,GAAKxkT,EAAUy2C,MAAS,M/VndjD,SAA8BoN,GAI1B,OAFqB0D,GAAgB1D,GACLjiC,eAAeiiC,EAAY,kB+VkdtC0qW,CAAc57Z,KAAKkxD,WACzB1tD,aAAa,YAAa,aAC9B6J,EAAUykT,GAAKzkT,EAAUy2C,MAAS,IAAOz2C,EAAUwkT,GAAKxkT,EAAUy2C,MAAS,WAC5Ez2C,EAAUy2C,MAAQ,M/V/dhC,SAAuCoN,GAInC,OAFqB0D,GAAgB1D,GACLjiC,eAAeiiC,EAAY,qB+V8drC2qW,CAAuB77Z,KAAKkxD,WAClC1tD,aAAa,YAAa,aAC/B6J,EAAUykT,GAAKzkT,EAAUy2C,MAAS,IAAOz2C,EAAUwkT,GAAKxkT,EAAUy2C,MAAS,WAC5Ez2C,EAAUy2C,MAAQ,KAENmR,GAAej1D,KAAKkxD,WAC1B1tD,aAAa,YAAa,aAC/B6J,EAAUykT,GAAKzkT,EAAUy2C,MAAS,IAAOz2C,EAAUwkT,GAAKxkT,EAAUy2C,MAAS,WAC5Ez2C,EAAUy2C,MAAQ,KAERoR,GAAal1D,KAAKkxD,WAAW92C,SAAS,GAC5C1V,MAAM2I,UAAY,aACrBA,EAAUykT,GAAKzkT,EAAUy2C,MAAS,MAASz2C,EAAUwkT,GAAKxkT,EAAUy2C,MAAS,YAC9Ez2C,EAAUy2C,MAAQ,KAG5B+xW,EAAgBx6Z,UAAU+6X,WAAa,SAAUp1X,EAAS86Z,EAAsBlF,EAAWvpZ,GACvFrN,KAAK22Z,cAAc31Z,EAAS86Z,EAAsBlF,EAAWvpZ,EAAWrN,KAAKq2Z,aAAar1Z,KAEvF60Z,KC57BPhqU,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAO5D2+X,GAA4B,SAAUrvU,GAEtC,SAASqvU,IACL,OAAkB,OAAXrvU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAUkwU,EAAYrvU,GAItBN,IACIllF,EAAS,KACV60Z,EAAW1ga,UAAW,cAAU,GACnC+wF,IACIllF,EAAS,gBACV60Z,EAAW1ga,UAAW,aAAS,GAClC+wF,IACIllF,EAAS,SACV60Z,EAAW1ga,UAAW,aAAS,GAClC+wF,IACIllF,EAAS,SACV60Z,EAAW1ga,UAAW,aAAS,GAC3B0ga,GACTv7V,IAKEw7V,GAA8B,SAAUtvU,GAExC,SAASsvU,IACL,OAAkB,OAAXtvU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KA0B/D,OA5BA6rF,GAAUmwU,EAActvU,GAIxBN,IACIllF,EAAS,OACV80Z,EAAa3ga,UAAW,aAAS,GACpC+wF,IACIllF,EAAS,OACV80Z,EAAa3ga,UAAW,cAAU,GACrC+wF,IACIrkF,KAAYytN,KACbwmM,EAAa3ga,UAAW,cAAU,GACrC+wF,IACIllF,EAAS,cACV80Z,EAAa3ga,UAAW,mBAAe,GAC1C+wF,IACIllF,EAAS,aACV80Z,EAAa3ga,UAAW,2BAAuB,GAClD+wF,IACIrkF,KAAYg0Z,KACbC,EAAa3ga,UAAW,kBAAc,GACzC+wF,IACIllF,GAAS,IACV80Z,EAAa3ga,UAAW,oBAAgB,GAC3C+wF,IACIllF,GAAS,IACV80Z,EAAa3ga,UAAW,sBAAkB,GACtC2ga,GACTx7V,IAKEy7V,GAAgC,SAAUvvU,GAE1C,SAASuvU,IACL,OAAkB,OAAXvvU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAmC/D,OArCA6rF,GAAUowU,EAAgBvvU,GAI1BN,IACIllF,EAAS,IACV+0Z,EAAe5ga,UAAW,wBAAoB,GACjD+wF,IACIllF,EAAS,IACV+0Z,EAAe5ga,UAAW,sBAAkB,GAC/C+wF,IACIllF,EAAS,IACV+0Z,EAAe5ga,UAAW,mBAAe,GAC5C+wF,IACIllF,EAAS,IACV+0Z,EAAe5ga,UAAW,qBAAiB,GAC9C+wF,IACIllF,EAAS,IACV+0Z,EAAe5ga,UAAW,sBAAkB,GAC/C+wF,IACIllF,EAAS,KACV+0Z,EAAe5ga,UAAW,eAAW,GACxC+wF,IACIllF,EAAS,KACV+0Z,EAAe5ga,UAAW,eAAW,GACxC+wF,IACIllF,EAAS,YACV+0Z,EAAe5ga,UAAW,mBAAe,GAC5C+wF,IACIllF,KACD+0Z,EAAe5ga,UAAW,sBAAkB,GAC/C+wF,IACIllF,GAAS,IACV+0Z,EAAe5ga,UAAW,qBAAiB,GAC9C+wF,IACIrkF,GAAUyE,KAAM,GAAIC,MAAO,GAAIC,IAAK,GAAIC,OAAQ,IAAM6oN,KACvDymM,EAAe5ga,UAAW,wBAAoB,GAC1C4ga,GACTz7V,IClHE07V,GAAgC,WAChC,SAASA,IACLl8Z,KAAKm8Z,YAQT,OANAD,EAAe7ga,UAAU+ga,SAAW,SAAUrlY,EAAMrwB,GAChD1G,KAAKm8Z,SAASplY,GAAQrwB,GAE1Bw1Z,EAAe7ga,UAAU0nE,WAAa,SAAUhsC,GAC5C,OAAO/2B,KAAKm8Z,SAASplY,IAElBmlY,KCdPrwU,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAO5Di/X,GAA2B,SAAU3vU,GAErC,SAAS2vU,IACL,OAAkB,OAAX3vU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAUwwU,EAAW3vU,GAIrBN,IACIllF,EAAS,cACVm1Z,EAAUhha,UAAW,iBAAa,GACrC+wF,IACIllF,EAAS,KACVm1Z,EAAUhha,UAAW,qBAAiB,GACzC+wF,IACIllF,GAAU,KAAM,MAAO,IAAM,MAAO,IAAM,MAAO,IAAM,MAAO,IAAM,SACrEm1Z,EAAUhha,UAAW,qBAAiB,GACzC+wF,IACIllF,GAAU,MACXm1Z,EAAUhha,UAAW,qBAAiB,GAClCgha,GACT77V,IAKE87V,GAA8B,SAAU5vU,GAExC,SAAS4vU,IACL,OAAkB,OAAX5vU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBA6rF,GAAUywU,EAAc5vU,GAIxBN,IACIrkF,KAAYs0Z,KACbC,EAAajha,UAAW,2BAAuB,GAClD+wF,IACIrkF,KAAYs0Z,KACbC,EAAajha,UAAW,yBAAqB,GAChD+wF,IACIllF,EAAS85Y,GAAgBiL,MAC1BqQ,EAAajha,UAAW,mBAAe,GAC1C+wF,IACIllF,EAAS,IACVo1Z,EAAajha,UAAW,iBAAa,GACxC+wF,IACIllF,EAAS,IACVo1Z,EAAajha,UAAW,0BAAsB,GAC1Ciha,GACT97V,ICjEEqrB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAM5Dm/X,GAA8B,SAAU7vU,GAExC,SAAS6vU,IACL,OAAkB,OAAX7vU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBA6rF,GAAU0wU,EAAc7vU,GAIxBN,IACIllF,EAAS,IACVq1Z,EAAalha,UAAW,gBAAY,GACvC+wF,IACIllF,EAAS,MACVq1Z,EAAalha,UAAW,oBAAgB,GAC3C+wF,IACIllF,EAAS,eACVq1Z,EAAalha,UAAW,mBAAe,GAC1C+wF,IACIllF,EAAS,kBACVq1Z,EAAalha,UAAW,qBAAiB,GAC5C+wF,IACIllF,EAAS,QACVq1Z,EAAalha,UAAW,mBAAe,GAC1C+wF,IACIllF,EAAS,KACVq1Z,EAAalha,UAAW,iBAAa,GACxC+wF,IACIllF,EAAS,OACVq1Z,EAAalha,UAAW,mBAAe,GACnCkha,GACT/7V,IAKEg8V,GAA+B,SAAU9vU,GAEzC,SAAS8vU,IACL,OAAkB,OAAX9vU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBA6rF,GAAU2wU,EAAe9vU,GAIzBN,IACIllF,GAAS,IACVs1Z,EAAcnha,UAAW,kBAAc,GAC1C+wF,IACIllF,GAAS,IACVs1Z,EAAcnha,UAAW,mBAAe,GAC3C+wF,IACIrkF,GAAU6wB,YAAa,cAAgB2jY,KACxCC,EAAcnha,UAAW,uBAAmB,GAC/C+wF,IACIrkF,GAAU6wB,YAAa,YAAc2jY,KACtCC,EAAcnha,UAAW,qBAAiB,GACtCmha,GACTh8V,ICtEEqrB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAM5Dq/X,GAA4B,SAAU/vU,GAEtC,SAAS+vU,IACL,OAAkB,OAAX/vU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBA6rF,GAAU4wU,EAAY/vU,GAItBN,IACIllF,EAAS,KACVu1Z,EAAWpha,UAAW,UAAM,GAC/B+wF,IACIllF,EAAS,OACVu1Z,EAAWpha,UAAW,mBAAe,GACxC+wF,IACIllF,EAAS,KACVu1Z,EAAWpha,UAAW,YAAQ,GACjC+wF,IACIllF,EAAS,KACVu1Z,EAAWpha,UAAW,gBAAY,GACrC+wF,IACIllF,KACDu1Z,EAAWpha,UAAW,YAAQ,GACjC+wF,IACIllF,KACDu1Z,EAAWpha,UAAW,iBAAa,GAC/Boha,GACTj8V,IC5CEqrB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAO5Ds/X,GAAwB,SAAUhwU,GAElC,SAASgwU,IACL,OAAkB,OAAXhwU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAwD/D,OA1DA6rF,GAAU6wU,EAAQhwU,GAIlBN,IACIllF,EAAS,KACVw1Z,EAAOrha,UAAW,iBAAa,GAClC+wF,IACIllF,EAAS,KACVw1Z,EAAOrha,UAAW,yBAAqB,GAC1C+wF,IACIllF,EAAS,KACVw1Z,EAAOrha,UAAW,uBAAmB,GACxC+wF,IACIllF,EAAS,KACVw1Z,EAAOrha,UAAW,oBAAgB,GACrC+wF,IACIllF,EAAS,KACVw1Z,EAAOrha,UAAW,oBAAgB,GACrC+wF,IACIllF,EAAS,KACVw1Z,EAAOrha,UAAW,oBAAgB,GACrC+wF,IACIrkF,GAAUyE,KAAM,GAAIE,IAAK,GAAID,MAAO,EAAGE,OAAQ,GAAK6oN,KACrDknM,EAAOrha,UAAW,cAAU,GAC/B+wF,IACIllF,EAAS,SACVw1Z,EAAOrha,UAAW,2BAAuB,GAC5C+wF,IACIllF,EAAS,SACVw1Z,EAAOrha,UAAW,yBAAqB,GAC1C+wF,IACIllF,EAAS,gBACVw1Z,EAAOrha,UAAW,mBAAe,GACpC+wF,IACIllF,EAAS,SACVw1Z,EAAOrha,UAAW,2BAAuB,GAC5C+wF,IACIllF,EAAS,YACVw1Z,EAAOrha,UAAW,yBAAqB,GAC1C+wF,IACIllF,EAAS,SACVw1Z,EAAOrha,UAAW,YAAQ,GAC7B+wF,IACIllF,KACDw1Z,EAAOrha,UAAW,qBAAiB,GACtC+wF,IACIllF,KACDw1Z,EAAOrha,UAAW,iBAAa,GAClC+wF,IACIllF,KACDw1Z,EAAOrha,UAAW,cAAU,GAC/B+wF,IACIllF,GAAS,IACVw1Z,EAAOrha,UAAW,uBAAmB,GACxC+wF,IACIllF,EAAS,KACVw1Z,EAAOrha,UAAW,YAAQ,GACtBqha,GACTl8V,InWyQE1F,IACA2wI,KAAQ,UACRtsJ,OAAU,YACVd,OAAU,UACVG,KAAQ,OACR2B,WAAc,WACdL,WAAc,WACdE,YAAe,WACfC,YAAe,WACf6B,KAAQ,YACR66W,SAAY,YACZ58W,gBAAmB,YACnBK,gBAAmB,YACnBP,gBAAmB,YACnBK,gBAAmB,YACnB08W,mBAAsB,OACtBC,mBAAsB,OACtBC,kBAAqB,OACrBC,kBAAqB,OACrBC,WAAc,OACdC,WAAc,OACdpwG,IAAO,UACPg5F,UAAa,UACbqX,SAAY,WoWjXZrxU,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAyBxCixU,GAA0B,WAK1B,SAASA,EAASh1X,EAASi1X,QACD,IAAlBA,IAA4BA,GAAgB,GAIhDp9Z,KAAKq9Z,eAAiB,KAItBr9Z,KAAKs9Z,UAAW,EAIhBt9Z,KAAKu9Z,iBAAkB,EAIvBv9Z,KAAKuU,eAAiB,KACtBvU,KAAKw9Z,SAAU,EACfx9Z,KAAKy9Z,kBAAmB,EAExBz9Z,KAAK09Z,cAIL19Z,KAAK29Z,aAAgBjzW,SAAWD,eAChCzqD,KAAK49Z,mBAAsBlzW,SAAWD,eACtCzqD,KAAKq9Z,eAAiBl1X,EACtBnoC,KAAKu9Z,gBAAkBH,EA0C3B,OAxCAD,EAAS9ha,UAAUwia,YAAc,SAAUtpZ,GACvCvU,KAAKuU,eAAiBA,EACtBvU,KAAKs9Z,UAAW,GAEpBH,EAAS9ha,UAAUyia,UAAY,SAAU79Z,GACrCD,KAAKuU,eAAiBtU,EAAK1D,OAC3ByD,KAAKqvS,cAAgBrvS,KAAK6gQ,gBAAkB7gQ,KAAK+9Z,aAAe99Z,EAAKiU,SACrElU,KAAKy9Z,kBAAmB,EACxBz9Z,KAAK69Z,YAAY59Z,EAAK1D,QACtByD,KAAKq9Z,eAAeW,iBAAiBh+Z,KAAKu9Z,kBAE9CJ,EAAS9ha,UAAU0uT,UAAY,SAAU9pT,GAGrC,OAFAD,KAAK6gQ,gBAAkB5gQ,EAAKiU,UAEpBlU,KAAKw9Z,SAEjBL,EAAS9ha,UAAU4ia,QAAU,SAAUh+Z,GACnCD,KAAK6gQ,gBAAkB5gQ,EAAKiU,SAE5BlU,KAAKy9Z,kBAAmB,EACxBz9Z,KAAKq9Z,eAAea,eAAel+Z,KAAKu9Z,iBAExCv9Z,KAAKm+Z,aAEThB,EAAS9ha,UAAU8ia,UAAY,WACtBn+Z,KAAKy9Z,kBACNz9Z,KAAKq9Z,eAAerwR,eAExBhtI,KAAKq9Z,eAAiB,KACtBr9Z,KAAKuU,eAAiB,KACtBvU,KAAK6gQ,gBAAkB,KACvB7gQ,KAAKs9Z,UAAW,EAChBt9Z,KAAKw9Z,SAAU,GAEnBL,EAAS9ha,UAAUqrI,WAAa,SAAUzmI,GACtCD,KAAK6gQ,gBAAkB5gQ,EAAKiU,UAEhCipZ,EAAS9ha,UAAU8uT,WAAa,SAAUlqT,GACtCD,KAAKi+Z,QAAQh+Z,IAEVk9Z,KAMPiB,GAA4B,SAAU1xU,GAEtC,SAAS0xU,IACL,OAAkB,OAAX1xU,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAoD/D,OAtDA6rF,GAAUuyU,EAAY1xU,GAItB0xU,EAAW/ia,UAAUyia,UAAY,SAAU79Z,GACvCD,KAAKs9Z,UAAW,EAChB5wU,EAAOrxF,UAAUyia,UAAUx8Z,KAAKtB,KAAMC,IAE1Cm+Z,EAAW/ia,UAAU0uT,UAAY,SAAU9pT,GAGvC,GAFAysF,EAAOrxF,UAAU0uT,UAAUzoT,KAAKtB,KAAMC,GAElCD,KAAKs9Z,WAAsE,IAA1DnrX,GAAMrB,OAAO9wC,KAAK6gQ,gBAAiB7gQ,KAAK+9Z,cAAyB,CAClF,IAAIrrY,EAAO6C,GAAK+vB,UAAUtlD,KAAK+9Z,aAAc/9Z,KAAK6gQ,kBAClD7gQ,KAAKq9Z,eAAelG,uBAAuBzkY,EAAK3lB,EAAG2lB,EAAK1lB,EAAG0lB,EAAK1c,MAAO0c,EAAK3c,QAEhF,OAAQ/V,KAAKw9Z,SAEjBY,EAAW/ia,UAAU4ia,QAAU,SAAUh+Z,GAErC,IAA8D,IAA1DkyC,GAAMrB,OAAO9wC,KAAK6gQ,gBAAiB7gQ,KAAK+9Z,eAA2B/9Z,KAAKs9Z,SAAU,CAClF,IAAI94W,EAASjvB,GAAK+vB,UAAUtlD,KAAK+9Z,aAAc/9Z,KAAK6gQ,kBACpD7gQ,KAAKq9Z,eAAegB,sBAAsB75W,OAEzC,CAED,IAAI85W,EAAat+Z,KAAKq9Z,eAAekB,oBAChCv+Z,KAAKq9Z,eAAerkW,gBAAmB/4D,EAAK4mB,MAAS5mB,EAAK4mB,KAAKmB,QAQ5D/nB,GAAQA,EAAK1D,SACRyD,KAAKq9Z,eAAenjW,WAAWj6D,EAAK1D,QAIb,IAApB0D,EAAKu+Z,YACLx+Z,KAAKq9Z,eAAeoB,SAASx+Z,EAAK1D,QAJtCyD,KAAKq9Z,eAAeqB,eAAez+Z,EAAK1D,SAAS,KATzDyD,KAAKq9Z,eAAesB,eAA+B,OAAhB1+Z,EAAK1D,QACpC0D,EAAK1D,QACLyD,KAAKq9Z,eAAeqB,eAAez+Z,EAAK1D,SAAS,EAAO+ha,IAiBpEt+Z,KAAKs9Z,UAAW,EAChB5wU,EAAOrxF,UAAU4ia,QAAQ38Z,KAAKtB,KAAMC,IAExCm+Z,EAAW/ia,UAAU8uT,WAAa,SAAUlqT,GACpCD,KAAKs9Z,UACLt9Z,KAAKi+Z,QAAQh+Z,IAGdm+Z,GACTjB,IAKEyB,GAA6B,SAAUlyU,GAEvC,SAASkyU,EAAYvB,EAAgB3lX,GACjC,IAAI33C,EAAQ2sF,EAAOprF,KAAKtB,KAAMq9Z,GAAgB,IAASr9Z,KAEvD,OADAD,EAAM23C,SAAWA,EACV33C,EAgLX,OApLA8rF,GAAU+yU,EAAalyU,GAMvBkyU,EAAYvja,UAAUyia,UAAY,SAAU79Z,GACxCD,KAAKs9Z,UAAW,EAChBt9Z,KAAK29Z,iBAAcxia,EACb6E,gBAAgB6+Z,KAClB7+Z,KAAK29Z,YAAcp1W,GAAYtoD,EAAK1D,SAExCmwF,EAAOrxF,UAAUyia,UAAUx8Z,KAAKtB,KAAMC,GACtC,IACIwqD,EAMJ,GALIxqD,EAAK1D,QAAU0D,EAAK1D,OAAOkuD,cACd19C,EAAG/M,KAAK+9Z,aAAahxZ,EAAGC,EAAGhN,KAAK+9Z,aAAa/wZ,GAC1Dy9C,EAAaxqD,EAAK1D,OAAOkuD,WAAW,IAGlB,sBAAlBzqD,KAAK03C,UAAsD,sBAAlB13C,KAAK03C,SAC9C,IAAK,IAAIv7C,EAAI,EAAGA,EAAIsuD,EAAWhhB,SAAShtC,OAAQN,IAAK,CACjD,IAAIouC,EAAUkgB,EAAWhhB,SAASttC,GAC9B2ia,EAAiB3sX,GAAMC,aAAa7H,EAAQgR,QAA2BhR,EAAQ4a,aAAzB5a,EAAQgR,OAC9DwjX,EAAiB5sX,GAAMC,aAAa7H,EAAQvB,QAA2BuB,EAAQ6a,aAAzB7a,EAAQvB,QAC9D7kC,GAASnE,KAAK6gQ,gBAAiBi+J,EAAer0W,EAAWjF,aACzDrhD,GAASnE,KAAK6gQ,gBAAiBk+J,EAAet0W,EAAWjF,eACzDxlD,KAAKg/Z,gBAAkBz0X,GAInCvqC,KAAK6gQ,gBAAkB5gQ,EAAKiU,UAEhC0qZ,EAAYvja,UAAU4ia,QAAU,SAAUh+Z,GAGtC,GAFAD,KAAKq9Z,eAAe4B,iBACpBj/Z,KAAKq9Z,eAAe6B,aACbl/Z,gBAAgB6+Z,KAA8C,uBAAlB7+Z,KAAK03C,UACjDvF,GAAMrB,OAAO7wC,EAAK1D,OAAOkuD,WAAW,GAAGzb,YAAahvC,KAAK29Z,YAAYlzW,WAAW,GAAGzb,cACjF/uC,EAAK1D,OAAOkuD,WAAW,GAAGlb,WAAavvC,KAAK29Z,YAAYlzW,WAAW,GAAGlb,YACxD,uBAAlBvvC,KAAK03C,UACCvF,GAAMrB,OAAO7wC,EAAK1D,OAAOkuD,WAAW,GAAGxT,YAAaj3C,KAAK29Z,YAAYlzW,WAAW,GAAGxT,cAC9Eh3C,EAAK1D,OAAOkuD,WAAW,GAAGihW,WAAa1rZ,KAAK29Z,YAAYlzW,WAAW,GAAGihW,WAgCjF,KAAM1rZ,gBAAgB6+Z,IACJ,sBAAlB7+Z,KAAK03C,UAAsD,sBAAlB13C,KAAK03C,WAC3C13C,KAAK29Z,aAAe19Z,EAAK1D,OAAQ,CAG7B4ia,GACAz4Z,KAAM,iBAAkB04Z,WAFtB72W,GAAYtoD,EAAK1D,QAEsB8ia,WAAYr/Z,KAAK29Z,YAAaxyN,SAAU,YAErFnrM,KAAKq9Z,eAAeiC,gBAAgBH,QAxCwD,CAChG,IAAII,OAAY,EACZxnX,OAAY,EACZ93C,EAAK1D,QAAU0D,EAAK1D,OAAOkuD,aAC3B80W,GACIxyZ,EAAG/M,KAAK+9Z,aAAahxZ,EAAGC,EAAGhN,KAAK+9Z,aAAa/wZ,GAEjD+qC,EAAY93C,EAAK1D,OAAOkuD,WAAW,IAEvC,IAAI+0W,OAAiB,EACjBC,OAAiB,EACrB,GAAIx/Z,EAAKkH,OAAQ,CACb,IAAIA,EAASnH,KAAKq9Z,eAAeqC,WAAWz/Z,EAAKuvC,cAAevvC,EAAKkH,OAA0B,uBAAlBnH,KAAK03C,UACjFvwC,aAAkB6yD,GAAawlW,EAAiBr4Z,EAAO7D,GAAKm8Z,EAAiBt4Z,EAAO7D,GAEzF,IAAIgwF,GACAv7C,UAAWA,EAAWgQ,MAAO,YAAahY,WAAY0vX,EACtDz2Z,SAAUu2Z,EAAWj4Z,SAAUi4Z,EAAWlnY,QAAQ,EAAO4X,WAAYuvX,GAErE94Y,EAA4B,uBAAlB1mB,KAAK03C,SAAoC4pW,GAAaqe,kBAAoBre,GAAase,kBAGrG,GAFA5/Z,KAAKq9Z,eAAernQ,aAAatvI,EAAS4sE,GAC1CtzF,KAAKq9Z,eAAewC,sBAAsB9nX,GAAW,GACjD/3C,KAAK29Z,aAAe19Z,EAAK1D,OAAQ,CACjC,IAEI4ia,GACAz4Z,KAAM,oBAAqB04Z,WAAY72W,GAFrCA,GAAYtoD,EAAK1D,SAEsC8ia,WAAY92W,GAAYvoD,KAAK29Z,aACtFxyN,SAAU,YAEdnrM,KAAKq9Z,eAAeiC,gBAAgBH,IAc5CzyU,EAAOrxF,UAAU4ia,QAAQ38Z,KAAKtB,KAAMC,IAExC2+Z,EAAYvja,UAAU0uT,UAAY,SAAU9pT,GAExC,GADAysF,EAAOrxF,UAAU0uT,UAAUzoT,KAAKtB,KAAMC,KAC/BD,gBAAgB6+Z,MAA8C,uBAAlB7+Z,KAAK03C,UACpDvF,GAAMrB,OAAO7wC,EAAK1D,OAAOkuD,WAAW,GAAGzb,YAAahvC,KAAK29Z,YAAYlzW,WAAW,GAAGzb,cAChE,uBAAlBhvC,KAAK03C,UACFvF,GAAMrB,OAAO7wC,EAAK1D,OAAOkuD,WAAW,GAAGxT,YAAaj3C,KAAK29Z,YAAYlzW,WAAW,GAAGxT,cAAgB,CACvG,IAAIjuC,OAAW,EACXyhD,OAAa,EACbxqD,EAAK1D,QAAU0D,EAAK1D,OAAOkuD,aAC3BzhD,GAAa+D,EAAG/M,KAAK+9Z,aAAahxZ,EAAGC,EAAGhN,KAAK+9Z,aAAa/wZ,GAC1Dy9C,EAAaxqD,EAAK1D,OAAOkuD,WAAW,IAExC,IAAIxa,OAAa,EACbF,OAAa,EACjB,GAAI9vC,EAAKkH,OAAQ,CACb4oC,EAAa9vC,EAAKkH,OAAO7D,IACrB6D,EAASnH,KAAKq9Z,eAAeqC,WAAWz/Z,EAAKuvC,cAAevvC,EAAKkH,OAA0B,uBAAlBnH,KAAK03C,qBAC/DsiB,IAAa7yD,aAAkB2lZ,GAAgB78W,EAAa9oC,EAAO7D,GAAKysC,EAAa5oC,EAAO7D,GAEnH,IAAIgwF,GACAv7C,UAAW0S,EAAY1C,MAAO,QAAShY,WAAYA,EACnD/mC,SAAUA,EAAU1B,SAAU0B,EAAUqvB,QAAQ,EAAO4X,WAAYA,GAEnEvpB,EAA4B,uBAAlB1mB,KAAK03C,SACf4pW,GAAaqe,kBAAoBre,GAAase,kBAClD5/Z,KAAKq9Z,eAAernQ,aAAatvI,EAAS4sE,GAG9C,GADAtzF,KAAK6gQ,gBAAkB5gQ,EAAKiU,SACxBlU,KAAK6gQ,iBAAmB7gQ,KAAK+9Z,aAAc,CAC3C,IAAI7pX,EAAQl0C,KAAK6gQ,gBAAgB9zP,EAAI/M,KAAK+9Z,aAAahxZ,EACnD2mC,EAAQ1zC,KAAK6gQ,gBAAgB7zP,EAAIhN,KAAK+9Z,aAAa/wZ,EACnD1F,OAAW,EACX0B,OAAW,EACfhJ,KAAK6gQ,gBAAkB7gQ,KAAKq9Z,eAAeyC,iBAAiB9/Z,KAAK6gQ,iBACjE,IAAI9oN,OAAY,EACZ93C,EAAK1D,QAAU0D,EAAK1D,OAAOkuD,aAC3BnjD,GACIyF,EAAG/M,KAAK6gQ,gBAAgB9zP,EAAGC,EAAGhN,KAAK6gQ,gBAAgB7zP,GAEvDhE,GACI+D,EAAG/M,KAAK+9Z,aAAahxZ,EAAGC,EAAGhN,KAAK+9Z,aAAa/wZ,GAEjD+qC,EAAY93C,EAAK1D,OAAOkuD,WAAW,IAEvC,IAAIs1W,OAAe,EACfC,OAAe,EACnB,GAAI//Z,EAAKkH,OAAQ,CACb,IAAIA,GAAAA,EAASnH,KAAKq9Z,eAAeqC,WAAWz/Z,EAAKuvC,cAAevvC,EAAKkH,OAA0B,uBAAlBnH,KAAK03C,qBAC/DsiB,GAAa+lW,EAAe54Z,EAAO7D,GAAK08Z,EAAe74Z,EAAO7D,GAEjFgwF,GACAv7C,UAAWA,EAAWgQ,MAAO,WAAYhY,WAAYiwX,EACrDh3Z,SAAUA,EAAU1B,SAAUA,EAAU+wB,QAAQ,EAAO4X,WAAY8vX,GAEvE,KAAM//Z,gBAAgB6+Z,IAAuB,CACrCn4Y,EAA4B,uBAAlB1mB,KAAK03C,SACf4pW,GAAaqe,kBAAoBre,GAAase,kBAClD5/Z,KAAKq9Z,eAAernQ,aAAatvI,EAAS4sE,GAiB9C,KAfKA,EAAIj7D,QAAUr4B,KAAKs9Z,eAA8Bnia,IAAlB6E,KAAK03C,UAAoC,IAAVxD,GAAyB,IAAVR,KAC9E1zC,KAAKw9Z,SAAWx9Z,KAAKq9Z,eAAe4C,kBAAkBjga,KAAK03C,SAAUz3C,EAAK1D,OAAQyD,KAAK6gQ,gBAAiB7gQ,KAAKg/Z,gBAAiB/+Z,EAAKkH,OAAQ44Z,GAC3I//Z,KAAKq9Z,eAAe4B,iBAChBh/Z,EAAKkH,SAA8B,uBAAlBnH,KAAK03C,UAAqC+H,GAAcx/C,EAAKkH,SACxD,uBAAlBnH,KAAK03C,UAAqC4H,GAAar/C,EAAKkH,UAC5DnH,KAAKq9Z,eAAe6C,cAAclga,KAAK03C,SAAUz3C,EAAM8/Z,EAAcC,IACrEhga,KAAKq9Z,eAAe8C,WAAWlga,EAAK1D,OAAQyD,KAAK03C,UAErD13C,KAAKq9Z,eAAe+C,QAAQpga,KAAK03C,SAAUz3C,KAED,IAArCD,KAAK03C,SAASn5C,QAAQ,YAC3ByB,KAAKq9Z,eAAe8C,WAAWlga,EAAK1D,OAAQyD,KAAK03C,UACjD13C,KAAKq9Z,eAAe4B,mBAGxBj/Z,KAAKq9Z,eAAegD,0BAA2B,CAC/C,IAAIzlY,EAAU56B,KAAK25X,kBAAkB15X,EAAKiU,UAC1ClU,KAAKq9Z,eAAevsY,YAAY7wB,EAAK1D,OAAQ0D,EAAKiU,SAAU0mB,EAAS,cAAe56B,KAAKy9Z,kBACzFz9Z,KAAKy9Z,kBAAmB,GAIhC,OADAz9Z,KAAK+9Z,aAAe/9Z,KAAK6gQ,iBACjB7gQ,KAAKw9Z,SAEjBoB,EAAYvja,UAAU8uT,WAAa,SAAUlqT,GACzCD,KAAKi+Z,QAAQh+Z,IAEjB2+Z,EAAYvja,UAAUs+X,kBAAoB,SAAUzlX,GAChD,MAAO,KAAO7H,KAAK4xB,MAAM/pB,EAASnH,GAAK,MAAaV,KAAK4xB,MAAM/pB,EAASlH,IAE5E4xZ,EAAYvja,UAAU8ia,UAAY,WAC9BzxU,EAAOrxF,UAAU8ia,UAAU78Z,KAAKtB,MAChCA,KAAK+9Z,aAAe,KACpB/9Z,KAAK03C,SAAW,MAEbknX,GACTzB,IAKEmD,GAA0B,SAAU5zU,GAEpC,SAAS4zU,EAASjD,EAAgBkD,GAC9B,IAAIxga,EAAQ2sF,EAAOprF,KAAKtB,KAAMq9Z,GAAgB,IAASr9Z,KAGvD,OAFAD,EAAMiwG,cAAgB,KACtBjwG,EAAMyga,WAAaD,EACZxga,EAyLX,OA9LA8rF,GAAUy0U,EAAU5zU,GAOpB4zU,EAASjla,UAAUyia,UAAY,SAAU79Z,GACrC,GAAIA,EAAK1D,kBAAkBgjD,IAAQt/C,EAAK1D,kBAAkB2hD,GAAW,CACjEl+C,KAAKq9Z,eAAeqB,eAAez+Z,EAAK1D,QAAS0D,EAAK4mB,MAAQ5mB,EAAK4mB,KAAKmB,SACxE,IAAIy4Y,GAAmB/1W,SAAWD,eAC9BxqD,EAAK1D,kBAAkBgjD,GACvBkhX,EAAe/1W,MAAMlmD,KAAK+jD,GAAYtoD,EAAK1D,SAG3Ckka,EAAeh2W,WAAWjmD,KAAK+jD,GAAYtoD,EAAK1D,SAEpDyD,KAAK29Z,YAAcp1W,GAAYk4W,QAG/Bzga,KAAK29Z,YAAcp1W,GAAYtoD,EAAK1D,QAExCyD,KAAK49Z,kBAAoB59Z,KAAKq9Z,eAAeqD,cAAczga,EAAK1D,QAChEmwF,EAAOrxF,UAAUyia,UAAUx8Z,KAAKtB,KAAMC,GACtCD,KAAK2ga,eAAkB5zZ,EAAG,EAAGC,EAAG,IAEpCszZ,EAASjla,UAAU4ia,QAAU,SAAUh+Z,GACnC,IAAIlD,EACA6ja,GAAe,EACnB,GAAwB,SAApB5ga,KAAKwga,WAAuB,CAC5B,GAAIvga,EAAK1D,kBAAkBgjD,IAAQt/C,EAAK1D,kBAAkB2hD,GAAW,CACjE,IAAIkhX,GAAe10W,SAAWD,eAC1BxqD,EAAK1D,kBAAkBgjD,GACvB6/W,EAAW10W,MAAMlmD,KAAK+jD,GAAYtoD,EAAK1D,SAGvC6ia,EAAW30W,WAAWjmD,KAAK+jD,GAAYtoD,EAAK1D,SAEhDQ,EAAMwrD,GAAY62W,GAClB,IAAIrtZ,EAAU9R,EAAK1D,OAAOwV,QAC1BhV,EAAI8O,QAAUkG,EAAQlG,QACtB9O,EAAIkP,QAAU8F,EAAQ9F,aAGtBlP,EAAMwrD,GAAYtoD,EAAK1D,QAE3B,GAAIQ,EAAI8O,UAAY7L,KAAK29Z,YAAY9xZ,SAAW9O,EAAIkP,UAAYjM,KAAK29Z,YAAY1xZ,QAAS,CACtF,IAAIszZ,OAAY,EACZtxW,OAAY,EACZhuD,EAAK1D,SACL0xD,GAAcpiD,QAAS5L,EAAK1D,OAAOwV,QAAQlG,QAASI,QAAShM,EAAK1D,OAAOwV,QAAQ9F,SACjFszZ,GAAc1zZ,QAAS5L,EAAK1D,OAAOwV,QAAQlG,QAASI,QAAShM,EAAK1D,OAAOwV,QAAQ9F,UAErF,IAAIqnF,GACA/2F,OAAQ0D,EAAK1D,OAAQwrD,MAAO,YAAa/+C,SAAUu2Z,EAAWj4Z,SAAU2mD,EACxE9mD,OAAQnH,KAAKgwG,cAAe7vC,eAAgBngE,KAAK6gQ,gBAAiBggK,WAAW,EAAMxoY,QAAQ,GAE/Fr4B,KAAKq9Z,eAAernQ,aAAasrP,GAAa9sR,eAAgBlhC,GAC9DtzF,KAAKq9Z,eAAeyD,mBACpBF,GAAe,EACf,IAAIzB,GACAz4Z,KAAM,kBACN04Z,WAAY72W,GAAYxrD,GAAMsia,WAAY92W,GAAYvoD,KAAK29Z,aAAcxyN,SAAU,YAEvF,GAAIpuM,EAAI2tD,MAAM,IAAM3tD,EAAI2tD,MAAM,GAAGyiW,UAAW,CACxC,IAAI4T,GACAr6Z,KAAM,cAAeykM,SAAU,WAC/Bk0N,WAAYr/Z,KAAK49Z,kBAAmBwB,WAAYp/Z,KAAKq9Z,eAAeqD,cAAczga,EAAK1D,SAE3FyD,KAAKq9Z,eAAeiC,gBAAgByB,GAExC/ga,KAAKq9Z,eAAeiC,gBAAgBH,GAErBn/Z,KAAKq9Z,eAAe2D,UAAUhha,KAAK+9Z,aAAc/9Z,KAAK6gQ,gBAAiB,EAAG,GAG7F,GAFA7gQ,KAAKq9Z,eAAe6B,aACpBl/Z,KAAKq9Z,eAAe4D,oBAChBhha,EAAK1D,QAAUyD,KAAKgwG,eAAiB3vD,GAAargD,KAAKgwG,gBACvDhwG,KAAKq9Z,eAAe6D,YAAYjha,EAAK1D,OAAQyD,KAAKgwG,eAAgB,CAClEhwG,KAAKq9Z,eAAexoT,KAAK70G,KAAKuU,eAAgBvU,KAAKgwG,cAAehwG,KAAK6gQ,iBACnEvtK,GACAtyF,QAASf,EAAK1D,OAAQ4K,OAAQnH,KAAKgwG,cAAe97F,SAAUlU,KAAK6gQ,gBAAiBxoO,QAAQ,GAE9Fr4B,KAAKq9Z,eAAernQ,aAAasrP,GAAazsS,KAAMvhB,GAExDtzF,KAAKq9Z,eAAe4B,iBAChB2B,GACA5ga,KAAKq9Z,eAAe8D,iBAG5Bz0U,EAAOrxF,UAAU4ia,QAAQ38Z,KAAKtB,KAAMC,IAExCqga,EAASjla,UAAU0uT,UAAY,SAAU9pT,GACrCysF,EAAOrxF,UAAU0uT,UAAUzoT,KAAKtB,KAAMC,GACtC,IAAIs7R,GAAS,EACTt7R,EAAK1D,kBAAkBgjD,IAAQt/C,EAAK1D,kBAAkB2hD,GAClDj+C,EAAK1D,kBAAkBgjD,GACnBt/C,EAAK1D,OAAOsP,UAAY7L,KAAK29Z,YAAYjzW,MAAM,GAAG7+C,SAClD5L,EAAK1D,OAAO0P,UAAYjM,KAAK29Z,YAAYjzW,MAAM,GAAGz+C,UAClDsvR,GAAS,GAITppP,GAAMrB,OAAO7wC,EAAK1D,OAAOyyC,YAAahvC,KAAK29Z,YAAYlzW,WAAW,GAAGzb,cACrEmD,GAAMrB,OAAO7wC,EAAK1D,OAAO06C,YAAaj3C,KAAK29Z,YAAYlzW,WAAW,GAAGxT,eACrEskP,GAAS,GAKbt7R,EAAK1D,OAAOwV,QAAQlG,UAAY7L,KAAK29Z,YAAY5rZ,QAAQlG,SACzD5L,EAAK1D,OAAOwV,QAAQ9F,UAAYjM,KAAK29Z,YAAY5rZ,QAAQ9F,UACzDsvR,GAAS,GAGjB,IAAIgkI,EACAt/Z,EAAK1D,SACLgja,GAAc1zZ,QAAS5L,EAAK1D,OAAOwV,QAAQlG,QAASI,QAAShM,EAAK1D,OAAOwV,QAAQ9F,UAErF,IAAIqnF,GACA/2F,OAAQ0D,EAAK1D,OAAQwrD,MAAO,QAAS/+C,SAAUu2Z,EAAWj4Z,SAAUi4Z,EACpEp4Z,OAAQlH,EAAKkH,OAAQg5D,eAAgBlgE,EAAKiU,SAAU2sZ,WAAW,EAAMxoY,QAAQ,GAMjF,GAJIkjQ,GACAv7R,KAAKq9Z,eAAernQ,aAAasrP,GAAa9sR,eAAgBlhC,GAElEtzF,KAAK6gQ,gBAAkB5gQ,EAAKiU,SACJ,SAApBlU,KAAKwga,WAAuB,CACpBxga,KAAK6gQ,gBAAgB9zP,EAAI/M,KAAK+9Z,aAAahxZ,EAC3C/M,KAAK6gQ,gBAAgB7zP,EAAIhN,KAAK+9Z,aAAa/wZ,EADnD,IAEIknC,EAAQl0C,KAAK2ga,cAAc5zZ,GAAK/M,KAAK6gQ,gBAAgB9zP,EAAI/M,KAAK+9Z,aAAahxZ,GAC3E2mC,EAAQ1zC,KAAK2ga,cAAc3zZ,GAAKhN,KAAK6gQ,gBAAgB7zP,EAAIhN,KAAK+9Z,aAAa/wZ,GAC/EhN,KAAKq9Z,eAAe+D,gBAAgBnha,EAAMD,KAAK6gQ,iBAC/C7gQ,KAAKq9Z,eAAe8C,WAAWlga,EAAK1D,QACpCyD,KAAKq9Z,eAAe6B,aACpB,IAAImC,EACApzW,OAAY,EACZqzW,EAAetha,KAAKq9Z,eAAe2D,UAAUhha,KAAK+9Z,aAAc/9Z,KAAK6gQ,gBAAiB3sN,EAAOR,GACjG1zC,KAAK2ga,cAAc5zZ,EAAImnC,EAAQotX,EAAav0Z,EAC5C/M,KAAK2ga,cAAc3zZ,EAAI0mC,EAAQ4tX,EAAat0Z,EACxC/M,EAAK1D,SACL8ka,GAAgBx1Z,QAAS5L,EAAK1D,OAAOwV,QAAQlG,QAASI,QAAShM,EAAK1D,OAAOwV,QAAQ9F,SACnFgiD,GACIpiD,QAAS5L,EAAK1D,OAAOwV,QAAQlG,QAAUy1Z,EAAav0Z,EACpDd,QAAShM,EAAK1D,OAAOwV,QAAQ9F,QAAUq1Z,EAAat0Z,IAGxDhN,KAAKgwG,eAAiB/vG,EAAKkH,SAAWnH,KAAKgwG,eAC3ChwG,KAAKq9Z,eAAekE,oBAAoBtha,EAAK1D,OAAQ0D,EAAKkH,OAAQnH,KAAKgwG,eAE3EhwG,KAAKgwG,cAAgB/vG,EAAKkH,OAC1B,IAAIq6Z,GACAjla,OAAQ0D,EAAK1D,OAAQwrD,MAAO,WAAY/+C,SAAUq4Z,EAAa/5Z,SAAU2mD,EACzE9mD,OAAQlH,EAAKkH,OAAQg5D,eAAgBlgE,EAAKiU,SAAU2sZ,WAAW,EAAMxoY,QAAQ,GAGjF,GADAr4B,KAAKq9Z,eAAernQ,aAAasrP,GAAa9sR,eAAgBgtS,IACzDA,EAAMnpY,OAAQ,CACfr4B,KAAKw9Z,SAAWx9Z,KAAKq9Z,eAAeoE,oBAAoBH,EAAav0Z,EAAGu0Z,EAAat0Z,GACrF,IAAIwwZ,GAAYx9Z,KAAKq9Z,eAAepoT,UAAUj1G,KAAKuU,eAAgBvU,KAAKgwG,cAAehwG,KAAK6gQ,iBAC5F7gQ,KAAKw9Z,QAAUx9Z,KAAKw9Z,SAAWA,EASnC,GAPIx9Z,KAAKgwG,eAAkB/vG,EAAK1D,SAAWyD,KAAKgwG,eAC5ChwG,KAAKq9Z,eAAe6D,YAAYjha,EAAK1D,OAAQyD,KAAKgwG,eAClDhwG,KAAKq9Z,eAAeqE,gBAAgB1ha,KAAKgwG,eAGzChwG,KAAKq9Z,eAAe4D,oBAEpBjha,KAAKq9Z,eAAegD,0BAA2B,CAC/C,IAAIzlY,EAAU56B,KAAK25X,kBAAkB15X,EAAK1D,QAC1CyD,KAAKq9Z,eAAevsY,YAAY7wB,EAAK1D,OAAQ0D,EAAKiU,SAAU0mB,EAAS,WAAY56B,KAAKy9Z,kBACtFz9Z,KAAKy9Z,kBAAmB,QAI5Bz9Z,KAAKq9Z,eAAesE,SAAS1ha,EAAK1D,OAAQ0D,EAAKgvC,cAAehvC,EAAKiU,SAASnH,EAAI/M,KAAK+9Z,aAAahxZ,EAAG9M,EAAKiU,SAASlH,EAAIhN,KAAK+9Z,aAAa/wZ,GAG7I,OADAhN,KAAK+9Z,aAAe/9Z,KAAK6gQ,iBACjB7gQ,KAAKw9Z,SAEjB8C,EAASjla,UAAUs+X,kBAAoB,SAAUp5X,GAC7C,MAAO,KAAO8L,KAAK4xB,MAAM19B,EAAKwR,QAAQgkB,OAAOhpB,GAAK,MAAaV,KAAK4xB,MAAM19B,EAAKwR,QAAQgkB,OAAO/oB,IAElGszZ,EAASjla,UAAU8uT,WAAa,SAAUlqT,GACtCD,KAAKi+Z,QAAQh+Z,IAEjBqga,EAASjla,UAAU8ia,UAAY,WAC3BzxU,EAAOrxF,UAAU8ia,UAAU78Z,KAAKtB,MAChCA,KAAKgwG,cAAgB,KACrBhwG,KAAK+9Z,aAAe,MAEjBuC,GACTnD,IAKEyE,GAA4B,SAAUl1U,GAEtC,SAASk1U,EAAWvE,GAChB,OAAO3wU,EAAOprF,KAAKtB,KAAMq9Z,GAAgB,IAASr9Z,KA0EtD,OA5EA6rF,GAAU+1U,EAAYl1U,GAItBk1U,EAAWvma,UAAUyia,UAAY,SAAU79Z,GAEvC,GADAD,KAAK29Z,YAAcp1W,GAAYtoD,EAAK1D,QAChCyD,KAAK29Z,YAAYjzW,MAAM,IAAM1qD,KAAK29Z,YAAYjzW,MAAM,GAAGtwC,SAGvD,IAAK,IADDswC,EAAQ1qD,KAAKq9Z,eAAewE,kBAAkB7ha,KAAK29Z,YAAYjzW,MAAM,OAChEvuD,EAAI,EAAGA,EAAIuuD,EAAMjuD,OAAQN,IAAK,CACnC,IAAIoE,EAAOP,KAAKq9Z,eAAeyE,WAAWp3W,EAAMvuD,GAAGmH,IACnDtD,KAAK09Z,WAAWhzW,EAAMvuD,GAAGmH,IAAMilD,GAAYhoD,GAGnDmsF,EAAOrxF,UAAUyia,UAAUx8Z,KAAKtB,KAAMC,IAE1C2ha,EAAWvma,UAAU4ia,QAAU,SAAUh+Z,GACrC,GAAID,KAAK29Z,YAAYr3W,cAAgBrmD,EAAK1D,OAAOwV,QAAQu0C,YAAa,CAClE,IAAIt9C,GAAas9C,YAAarmD,EAAK1D,OAAOwV,QAAQu0C,aAC9CgtC,GACA/2F,OAAQ0D,EAAK1D,OAAQwrD,MAAO,YAAa/+C,SAAUA,EACnD1B,SAAU0B,EAAUqvB,QAAQ,GAEhCr4B,KAAKq9Z,eAAernQ,aAAasrP,GAAaygB,aAAczuU,GAC5D,IAEI6rU,GACAz4Z,KAAM,kBAAmB04Z,WAAY72W,GAFnCA,GAAYtoD,EAAK1D,SAEoC8ia,WAAY92W,GAAYvoD,KAAK29Z,aAAcxyN,SAAU,WAC5GuyN,WAAY19Z,KAAK09Z,YAErB19Z,KAAKq9Z,eAAeiC,gBAAgBH,GACpCn/Z,KAAKq9Z,eAAe4B,iBAExBvyU,EAAOrxF,UAAU4ia,QAAQ38Z,KAAKtB,KAAMC,IAExC2ha,EAAWvma,UAAU0uT,UAAY,SAAU9pT,GAEvC,GADAysF,EAAOrxF,UAAU0uT,UAAUzoT,KAAKtB,KAAMC,GAClCD,KAAK29Z,YAAYr3W,cAAgBrmD,EAAK1D,OAAOwV,QAAQu0C,YAAa,CAClE,IAAIh/B,GAAeg/B,YAAarmD,EAAK1D,OAAOwV,QAAQu0C,aAChD07W,GACAzla,OAAQ0D,EAAK1D,OAAQwrD,MAAO,QAAS/+C,SAAUse,EAAYhgB,SAAUggB,EAAY+Q,QAAQ,GAE7Fr4B,KAAKq9Z,eAAernQ,aAAasrP,GAAaygB,aAAcC,GAEhEhia,KAAK6gQ,gBAAkB5gQ,EAAKiU,SAC5B,IAAIg9B,GAAankC,EAAG/M,KAAKuU,eAAexC,QAAQlG,QAASmB,EAAGhN,KAAKuU,eAAexC,QAAQ9F,SACpF0V,EAAQwwB,GAAM8G,UAAU/H,EAAUlxC,KAAK6gQ,iBAAmB,GAC1DohK,EAAYjia,KAAKq9Z,eAAe4E,UAAUtgZ,GAE9CA,IADAA,EAAsB,IAAdsgZ,EAAkBA,EAAYtgZ,GACrB,KAAO,IACxB,IAAI3Y,GAAas9C,YAAarmD,EAAK1D,OAAOwV,QAAQu0C,aAC9Ch/C,GAAag/C,YAAa3kC,GAC1B2xE,GACA/2F,OAAQ0D,EAAK1D,OAAQwrD,MAAO,WAAY/+C,SAAUA,EAClD1B,SAAUA,EAAU+wB,QAAQ,GAMhC,GAJAr4B,KAAKq9Z,eAAernQ,aAAasrP,GAAaygB,aAAczuU,GACvDA,EAAIj7D,SACLr4B,KAAKw9Z,SAAYx9Z,KAAKq9Z,eAAe6E,oBAAoBvgZ,EAAQ3hB,KAAKuU,eAAexC,QAAQu0C,cAE7FtmD,KAAKq9Z,eAAegD,0BAA2B,CAC/C,IAAIzlY,EAAU56B,KAAK25X,kBAAkB15X,EAAK1D,QAC1CyD,KAAKq9Z,eAAevsY,YAAY7wB,EAAK1D,OAAQ0D,EAAKiU,SAAU0mB,EAAS,aAAc56B,KAAKy9Z,kBACxFz9Z,KAAKy9Z,kBAAmB,EAE5B,OAAQz9Z,KAAKw9Z,SAEjBoE,EAAWvma,UAAUs+X,kBAAoB,SAAUp5X,GAC/C,OAAO8L,KAAK4xB,MAAO19B,EAAK+lD,YAAc,KAAMp5C,WAAa,KAE7D00Z,EAAWvma,UAAU8uT,WAAa,SAAUlqT,GACxCD,KAAKi+Z,QAAQh+Z,IAEjB2ha,EAAWvma,UAAU8ia,UAAY,WAC7BzxU,EAAOrxF,UAAU8ia,UAAU78Z,KAAKtB,OAE7B4ha,GACTzE,IAKEgF,GAA4B,SAAUz1U,GAEtC,SAASy1U,EAAW9E,EAAgBl0X,GAChC,IAAIppC,EAAQ2sF,EAAOprF,KAAKtB,KAAMq9Z,GAAgB,IAASr9Z,KAGvD,OAFAD,EAAMqia,cAAgB,IAAI7sY,GAC1Bx1B,EAAMopC,OAASA,EACRppC,EA8QX,OAnRA8rF,GAAUs2U,EAAYz1U,GAOtBy1U,EAAW9ma,UAAUyia,UAAY,SAAU79Z,GAIvC,GAHAD,KAAK29Z,YAAcp1W,GAAYtoD,EAAK1D,QACpCyD,KAAK49Z,kBAAoB59Z,KAAKq9Z,eAAeqD,cAAczga,EAAK1D,QAChEmwF,EAAOrxF,UAAUyia,UAAUx8Z,KAAKtB,KAAMC,GAClCD,KAAK29Z,YAAYjzW,MAAM,IAAM1qD,KAAK29Z,YAAYjzW,MAAM,GAAGtwC,SAGvD,IAAK,IADDswC,EAAQ1qD,KAAKq9Z,eAAewE,kBAAkB7ha,KAAK29Z,YAAYjzW,MAAM,OAChEvuD,EAAI,EAAGA,EAAIuuD,EAAMjuD,OAAQN,IAAK,CACnC,IAAIoE,EAAOP,KAAKq9Z,eAAeyE,WAAWp3W,EAAMvuD,GAAGmH,IACnDtD,KAAK09Z,WAAWhzW,EAAMvuD,GAAGmH,IAAMilD,GAAYhoD,GAGnDmsF,EAAOrxF,UAAUyia,UAAUx8Z,KAAKtB,KAAMC,GACtCD,KAAKoia,cAAcr1Z,EAAI9M,EAAK1D,OAAOwV,QAAQlG,QAC3C7L,KAAKoia,cAAcp1Z,EAAI/M,EAAK1D,OAAOwV,QAAQ9F,QAC3CjM,KAAKoia,cAAcrsZ,OAAS9V,EAAK1D,OAAOwV,QAAQ0nC,WAAW1jC,OAC3D/V,KAAKoia,cAAcpsZ,MAAQ/V,EAAK1D,OAAOwV,QAAQ0nC,WAAWzjC,OAE9DmsZ,EAAW9ma,UAAU4ia,QAAU,SAAUh+Z,GAErC,GADAD,KAAKq9Z,eAAe6B,aAChBl/Z,KAAK29Z,YAAY9xZ,UAAY5L,EAAK1D,OAAOwV,QAAQlG,SAAW7L,KAAK29Z,YAAY1xZ,UAAYhM,EAAK1D,OAAOwV,QAAQ9F,QAAS,CACtHjM,KAAKw9Z,QAAUx9Z,KAAK8uQ,WAAW7uQ,EAAK1D,OAAQyD,KAAK6gQ,gBAAiB7gQ,KAAK+9Z,aAAc/9Z,KAAKmpC,QAC1F,IAAIngC,GACA6C,QAAS5L,EAAK1D,OAAOwV,QAAQlG,QAASI,QAAShM,EAAK1D,OAAOwV,QAAQ9F,QACnE+J,MAAO/V,EAAK1D,OAAOwV,QAAQ0nC,WAAWzjC,MAAOD,OAAQ9V,EAAK1D,OAAOwV,QAAQ0nC,WAAW1jC,QAEpFu9E,GACA/2F,OAAQ0D,EAAK1D,OAAQwrD,MAAO,YAC5B/+C,SAAUA,EAAU1B,SAAU0B,EAAUqvB,QAAQ,GAEpDr4B,KAAKq9Z,eAAernQ,aAAasrP,GAAa+gB,WAAY/uU,GAC1D,IAAIv2F,EAAMwrD,GAAYtoD,EAAK1D,QACvB4ia,GACAz4Z,KAAM,cAAe04Z,WAAY72W,GAAYxrD,GAAMsia,WAAY92W,GAAYvoD,KAAK29Z,aAAcxyN,SAAU,WACxGuyN,WAAY19Z,KAAK09Z,YAIrB,GAFA19Z,KAAKq9Z,eAAeyD,mBACpB9ga,KAAKq9Z,eAAeiC,gBAAgBH,GAChCpia,EAAI2tD,MAAM,IAAM3tD,EAAI2tD,MAAM,GAAGyiW,UAAW,CACxC,IAAImV,GACA57Z,KAAM,cAAe04Z,WAAYp/Z,KAAKq9Z,eAAeqD,cAAczga,EAAK1D,QACxE8ia,WAAYr/Z,KAAK49Z,kBAAmBzyN,SAAU,YAElDnrM,KAAKq9Z,eAAeiC,gBAAgBgD,GAExCtia,KAAKq9Z,eAAe8D,iBAGxB,OADAz0U,EAAOrxF,UAAU4ia,QAAQ38Z,KAAKtB,KAAMC,IAC5BD,KAAKw9Z,SAEjB2E,EAAW9ma,UAAU0uT,UAAY,SAAU9pT,GAEvC,GADAysF,EAAOrxF,UAAU0uT,UAAUzoT,KAAKtB,KAAMC,GAClCD,KAAK29Z,YAAY9xZ,UAAY5L,EAAK1D,OAAOwV,QAAQlG,SAAW7L,KAAK29Z,YAAY1xZ,UAAYhM,EAAK1D,OAAOwV,QAAQ9F,QAAS,CACtH,IAAIjD,GACA6C,QAAS5L,EAAK1D,OAAOwV,QAAQlG,QAASI,QAAShM,EAAK1D,OAAOwV,QAAQ9F,QACnE+J,MAAO/V,EAAK1D,OAAOwV,QAAQ0nC,WAAWzjC,MAAOD,OAAQ9V,EAAK1D,OAAOwV,QAAQ0nC,WAAW1jC,QAEpFu9E,GACA/2F,OAAQ0D,EAAK1D,OAAQwrD,MAAO,QAAS/+C,SAAUA,EAAU1B,SAAUtH,KAAKuU,eAAgB8jB,QAAQ,GAEpGr4B,KAAKq9Z,eAAernQ,aAAasrP,GAAa+gB,WAAY/uU,GAE9DtzF,KAAK6gQ,gBAAkB5gQ,EAAKiU,SAC5B,IAEI2oL,GAAY9vL,EAFR/M,KAAK6gQ,gBAAgB9zP,EAAI/M,KAAKqvS,cAActiS,EAE9BC,EADdhN,KAAK6gQ,gBAAgB7zP,EAAIhN,KAAKqvS,cAAcriS,GAEpD6vL,EAAUhsI,IAAa7wD,KAAKuU,eAAexC,QAAQu0C,iBAAanrD,OAAWA,EAAW0hM,GAC5E78L,KAAKuU,eAAexC,QAAQ0nC,WAAWzjC,MAAQ6mL,EAAQ9vL,EAAK/M,KAAKuU,eAAexC,QAAQ0nC,WAAWzjC,MACnGhW,KAAKuU,eAAexC,QAAQ0nC,WAAW1jC,OAAS8mL,EAAQ7vL,EAAKhN,KAAKuU,eAAexC,QAAQ0nC,WAAW1jC,OAI9G,GAHA8mL,EAAU78L,KAAKuia,WAAW1lO,GAC1B78L,KAAKq9Z,eAAe6B,aACpBl/Z,KAAKw9Z,SAAYx9Z,KAAK8uQ,WAAW7uQ,EAAK1D,OAAQyD,KAAKqvS,cAAervS,KAAK6gQ,gBAAiB7gQ,KAAKmpC,QACzFnpC,KAAKq9Z,eAAegD,0BAA2B,CAC/C,IAAIzlY,EAAU56B,KAAK25X,kBAAkB15X,EAAK1D,QAC1CyD,KAAKq9Z,eAAevsY,YAAY7wB,EAAK1D,OAAQ0D,EAAKiU,SAAU0mB,EAAS,aAAc56B,KAAKy9Z,kBACxFz9Z,KAAKy9Z,kBAAmB,EAG5B,OADAz9Z,KAAK+9Z,aAAe/9Z,KAAK6gQ,iBACjB7gQ,KAAKw9Z,SAEjB2E,EAAW9ma,UAAU8uT,WAAa,SAAUlqT,GACxCD,KAAKi+Z,QAAQh+Z,IAEjBkia,EAAW9ma,UAAUs+X,kBAAoB,SAAUp5X,GAC/C,MAAO,KAAO8L,KAAK4xB,MAAM19B,EAAKwR,QAAQgkB,OAAO/f,OAAS,MAAa3J,KAAK4xB,MAAM19B,EAAKwR,QAAQgkB,OAAOhgB,SAEtGosZ,EAAW9ma,UAAUmna,SAAW,WAC5B,OAAQxia,KAAKmpC,QACT,IAAK,aACD,OAASp8B,EAAG,EAAGC,EAAG,IACtB,IAAK,aACD,OAASD,EAAG,EAAGC,EAAG,IACtB,IAAK,cACD,OAASD,EAAG,GAAKC,EAAG,GACxB,IAAK,cACD,OAASD,EAAG,GAAKC,EAAG,GACxB,IAAK,kBACD,OAASD,EAAG,EAAGC,EAAG,GACtB,IAAK,kBACD,OAASD,EAAG,EAAGC,EAAG,GACtB,IAAK,kBACD,OAASD,EAAG,EAAGC,EAAG,GACtB,IAAK,kBACD,OAASD,EAAG,EAAGC,EAAG,GAE1B,OAASD,EAAG,GAAKC,EAAG,KAExBm1Z,EAAW9ma,UAAUkna,WAAa,SAAU/hZ,GACxC,OAAQxgB,KAAKmpC,QACT,IAAK,aACD,OAASp8B,EAAGyT,EAAOzT,EAAGC,EAAG,GAC7B,IAAK,kBACD,OAAOwT,EACX,IAAK,cACD,OAASzT,EAAG,EAAGC,EAAGwT,EAAOxT,GAC7B,IAAK,cACD,OAASD,EAAG,EAAGC,GAAIwT,EAAOxT,GAC9B,IAAK,kBACD,OAASD,EAAGyT,EAAOzT,EAAGC,GAAIwT,EAAOxT,GACrC,IAAK,kBACD,OAASD,GAAIyT,EAAOzT,EAAGC,GAAIwT,EAAOxT,GACtC,IAAK,aACD,OAASD,GAAIyT,EAAOzT,EAAGC,EAAG,GAC9B,IAAK,kBACD,OAASD,GAAIyT,EAAOzT,EAAGC,EAAGwT,EAAOxT,GAEzC,OAAOwT,GAKX2hZ,EAAW9ma,UAAUyzQ,WAAa,SAAU31O,EAAOqkB,EAAY9F,EAAUvO,GACrE,IAOIoC,EAPAk3X,GAAmBC,SAAS,EAAO/2Z,OAAQ,EAAGa,MAAM,EAAOC,OAAO,GAClEk2Z,GAAiBD,SAAS,EAAO/2Z,OAAQ,EAAGe,KAAK,EAAOC,QAAQ,GAChEi2Z,EAAO5ia,KAAK6gQ,gBAAgB9zP,EAAI/M,KAAKqvS,cAActiS,EACnD81Z,EAAO7ia,KAAK6gQ,gBAAgB7zP,EAAIhN,KAAKqvS,cAAcriS,EACnD81Z,EAAc9ia,KAAKq9Z,eAAe0F,gBAC/B/ia,KAAKq9Z,eAAe0F,eAAeC,UACtCC,EAAWH,EAAc9ia,KAAKq9Z,eAAe0F,eAAeG,WAAa,KAG7E/2X,GADAZ,EAASL,MACa/R,EAAMmtB,YAAa,EAAG,GACpCntB,EAAMttB,QACNstB,EAAMltB,QADd,IAEI+uO,EAAI7hN,EAAMnjB,MACVksF,EAAI/oE,EAAMpjB,OACFojB,EAAMk2B,MAAMtiD,EACZosB,EAAMk2B,MAAMriD,EACxB,IAGIgyE,EAHAmkV,EAAa,EACbC,EAAc,EACdhB,EAAgBpia,KAAKoia,cAEzB,OAAQj5X,GACJ,IAAK,aAEDy5X,GADA5jV,EAAO1zC,GAAuBC,GAAWx+B,EAAG61Z,EAAM51Z,EAAG61Z,KACzC91Z,EACZ81Z,EAAO7jV,EAAKhyE,EACZo2Z,EAAc,EACdR,EAAOE,EAAc9ia,KAAKq9Z,eAAe0F,eAAeM,SAASZ,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM1pY,EAAOue,IAAa8F,EAAYx9C,KAAKoia,eAAiBQ,EAC3KC,EAAO,EACPM,GAAcf,EAAcpsZ,MAAQ4sZ,GAAQzpY,EAAMnjB,MAClD,MACJ,IAAK,aAED4sZ,GADA5jV,EAAO1zC,GAAuBC,GAAWx+B,EAAG61Z,EAAM51Z,EAAG61Z,KACzC91Z,EACZ81Z,EAAO7jV,EAAKhyE,EACZ41Z,EAAOE,EAAc9ia,KAAKq9Z,eAAe0F,eAAeO,UAAUb,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM1pY,EAAOue,IAAa8F,EAAYx9C,KAAKoia,eACvJQ,EACJC,EAAO,EACPM,GAAcf,EAAcpsZ,MAAQ4sZ,GAAQzpY,EAAMnjB,MAClDotZ,EAAc,EACd,MACJ,IAAK,cACDD,EAAa,EAEbP,GADA5jV,EAAO1zC,GAAuBC,GAAWx+B,EAAG61Z,EAAM51Z,EAAG61Z,KACzC91Z,EACZ81Z,EAAO7jV,EAAKhyE,EACZ61Z,EAAOC,EAAc9ia,KAAKq9Z,eAAe0F,eAAeQ,QAAQd,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM1pY,EAAOue,IAAa8F,EAAYx9C,KAAKoia,eACrJS,EACJO,GAAehB,EAAcrsZ,OAAS8sZ,GAAQ1pY,EAAMpjB,OACpD,MACJ,IAAK,cACDotZ,EAAa,EAEbP,GADA5jV,EAAO1zC,GAAuBC,GAAWx+B,EAAG61Z,EAAM51Z,EAAG61Z,KACzC91Z,EACZ81Z,EAAO7jV,EAAKhyE,EACZ61Z,EAAOC,EAAc9ia,KAAKq9Z,eAAe0F,eAAeS,WAAWf,EAAgBE,EAAcM,EAAUjkV,EAAKjyE,EAAGiyE,EAAKhyE,EAAGmsB,EAAOue,IAAa8F,EAAYx9C,KAAKoia,eAC5JS,EACJO,GAAehB,EAAcrsZ,OAAS8sZ,GAAQ1pY,EAAMpjB,OACpD,MACJ,IAAK,kBAED6sZ,GADA5jV,EAAO1zC,GAAuBC,GAAWx+B,EAAG61Z,EAAM51Z,EAAG61Z,KACzC91Z,EACZ81Z,EAAO7jV,EAAKhyE,EACZ41Z,EAAOE,EAAc9ia,KAAKq9Z,eAAe0F,eAAeO,UAAUb,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM1pY,EAAOue,IAAa8F,EAAYx9C,KAAKoia,eACvJQ,EACJC,EAAOC,EAAc9ia,KAAKq9Z,eAAe0F,eAAeQ,QAAQd,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM1pY,EAAOue,IAAa8F,EAAYx9C,KAAKoia,eACrJS,EACJM,GAAcf,EAAcpsZ,MAAQ4sZ,GAAQzpY,EAAMnjB,MAClDotZ,GAAehB,EAAcrsZ,OAAS8sZ,GAAQ1pY,EAAMpjB,OACpD,MACJ,IAAK,kBAED6sZ,GADA5jV,EAAO1zC,GAAuBC,GAAWx+B,EAAG61Z,EAAM51Z,EAAG61Z,KACzC91Z,EACZ81Z,EAAO7jV,EAAKhyE,EACZ61Z,EAAOC,EAAc9ia,KAAKq9Z,eAAe0F,eAAeQ,QAAQd,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM1pY,EAAOue,IAAa8F,EAAYx9C,KAAKoia,eACrJS,EACJD,EAAOE,EAAc9ia,KAAKq9Z,eAAe0F,eAAeM,SAASZ,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM1pY,EAAOue,IAAa8F,EAAYx9C,KAAKoia,eACtJQ,EACJO,GAAcf,EAAcpsZ,MAAQ4sZ,GAAQzpY,EAAMnjB,MAClDotZ,GAAehB,EAAcrsZ,OAAS8sZ,GAAQ1pY,EAAMpjB,OACpD,MACJ,IAAK,kBAED6sZ,GADA5jV,EAAO1zC,GAAuBC,GAAWx+B,EAAG61Z,EAAM51Z,EAAG61Z,KACzC91Z,EACZ81Z,EAAO7jV,EAAKhyE,EACZ61Z,EAAOC,EAAc9ia,KAAKq9Z,eAAe0F,eAAeS,WAAWf,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM1pY,EAAOue,IAAa8F,EAAYx9C,KAAKoia,eACxJS,EACJD,EAAOE,EAAc9ia,KAAKq9Z,eAAe0F,eAAeO,UAAUb,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM1pY,EAAOue,IAAa8F,EAAYx9C,KAAKoia,eACvJQ,EACJQ,GAAehB,EAAcrsZ,OAAS8sZ,GAAQ1pY,EAAMpjB,OACpDotZ,GAAcf,EAAcpsZ,MAAQ4sZ,GAAQzpY,EAAMnjB,MAClD,MACJ,IAAK,kBAED4sZ,GADA5jV,EAAO1zC,GAAuBC,GAAWx+B,EAAG61Z,EAAM51Z,EAAG61Z,KACzC91Z,EACZ81Z,EAAO7jV,EAAKhyE,EACZ61Z,EAAOC,EAAc9ia,KAAKq9Z,eAAe0F,eAAeS,WAAWf,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM1pY,EAAOue,IAAa8F,EAAY4kX,GAAiBS,EACxKD,EAAOE,EAAc9ia,KAAKq9Z,eAAe0F,eAAeM,SAASZ,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM1pY,EAAOue,IAAa8F,EAAY4kX,GAAiBQ,EACtKO,GAAcf,EAAcpsZ,MAAQ4sZ,GAAQzpY,EAAMnjB,MAClDotZ,GAAehB,EAAcrsZ,OAAS8sZ,GAAQ1pY,EAAMpjB,OAG5D,OAAO/V,KAAKyja,aAAal4X,EAAQ43X,EAAYC,EAAaj6X,EAAQqU,EAAY9F,EAAUve,IAK5FgpY,EAAW9ma,UAAUooa,aAAe,SAAUl4X,EAAQ43X,EAAYC,EAAaj6X,EAAQqU,EAAY9F,EAAUn7C,GAC7E,IAAxBA,EAAOmuD,MAAMjuD,QAAgBF,EAAOmuD,MAAM,GAAGvM,YAAcG,GAAgBolX,cAC5D,eAAXv6X,GAAsC,eAAXA,GAAsC,gBAAXA,GAAuC,gBAAXA,EAC5D,IAAhBi6X,GAAoC,IAAfD,IACvBC,EAAcD,EAAa92Z,KAAKC,IAAoB,IAAhB82Z,EAAoB,EAAIA,EAA4B,IAAfD,EAAmB,EAAIA,IAIpGC,EAAcD,EADT3lX,IAAe9F,EACOrrC,KAAKC,IAAI82Z,EAAaD,GAGtB,GAGnC,IAAIn6Z,GACA6C,QAAStP,EAAOsP,QAASI,QAAS1P,EAAO0P,QACzC+J,MAAOzZ,EAAOyZ,MAAOD,OAAQxZ,EAAOwZ,QAExC/V,KAAKw9Z,QAAUx9Z,KAAKq9Z,eAAesG,mBAAmBR,EAAYC,EAAapja,KAAKwia,YACpF,IAIIlvU,GAAQ/2F,OAAQA,EAAQwrD,MAAO,WAAY/+C,SAAUA,EAAU1B,UAH/DuE,QAAStP,EAAOsP,QAASI,QAAS1P,EAAO0P,QACzC+J,MAAOzZ,EAAOyZ,MAAOD,OAAQxZ,EAAOwZ,QAE+CsiB,QAAQ,GAK/F,OAJAr4B,KAAKq9Z,eAAernQ,aAAasrP,GAAa+gB,WAAY/uU,GACtDA,EAAIj7D,QACJr4B,KAAKq9Z,eAAesG,mBAAmB,EAAIR,EAAY,EAAIC,EAAapja,KAAKwia,YAE1Exia,KAAKw9Z,SAET2E,GACThF,IAKEyG,GAAiC,SAAUl3U,GAE3C,SAASk3U,EAAgBvG,EAAgBtmW,GACrC,IAAIh3D,EAAQ2sF,EAAOprF,KAAKtB,KAAMq9Z,GAAgB,IAASr9Z,KAEvD,OADAD,EAAMg3D,aAAeA,EACdh3D,EA4CX,OAhDA8rF,GAAU+3U,EAAiBl3U,GAM3Bk3U,EAAgBvoa,UAAUyia,UAAY,SAAU79Z,GAC5CysF,EAAOrxF,UAAUyia,UAAUx8Z,KAAKtB,KAAMC,GACtCD,KAAKs9Z,UAAW,GAEpBsG,EAAgBvoa,UAAU0uT,UAAY,SAAU9pT,GAC5CysF,EAAOrxF,UAAU0uT,UAAUzoT,KAAKtB,KAAMC,GACtC,IAAI4ja,EACAtja,GACAsL,QAAS7L,KAAK6gQ,gBAAgB9zP,EAAGiJ,MAAO,EAAGD,OAAQ,EACnD9J,QAASjM,KAAK6gQ,gBAAgB7zP,GAKlC,GAHKhN,KAAK2kD,gBACN3kD,KAAK2kD,cAAgB3kD,KAAKq9Z,eAAeyG,WAAWvja,IAEpDP,KAAKs9Z,WAAsE,IAA1DnrX,GAAMrB,OAAO9wC,KAAK6gQ,gBAAiB7gQ,KAAK+9Z,cAAyB,CAClF,IAAIrrY,EAAO6C,GAAK+vB,UAAUtlD,KAAK+9Z,aAAc/9Z,KAAK6gQ,mBAClDgjK,EAA2B7ja,KAAKq9Z,eAAewG,8BAAyB1oa,OAAWA,EAAWu3B,KAE1F1yB,KAAKq9Z,eAAe0G,oBAAoB/ja,KAAK2kD,cAAejyB,GAGpE,OAAOmxY,GAEXD,EAAgBvoa,UAAU4ia,QAAU,SAAUh+Z,GAC1C,IACIyyB,EAAO6C,GAAK+vB,UAAUtlD,KAAK+9Z,aAAc/9Z,KAAK6gQ,kBACvB7gQ,KAAKq9Z,eAAewG,8BAAyB1oa,OAAWA,EAAWu3B,GAC1F1yB,KAAK2kD,eAAiB3kD,KAAK2kD,yBAAyBpF,KACpDv/C,KAAKq9Z,eAAe2G,mBAAmBhka,KAAK2kD,eAC5C3kD,KAAK2kD,cAAgB,MAEzB+nC,EAAOrxF,UAAU4ia,QAAQ38Z,KAAKtB,KAAMC,GACpCD,KAAKs9Z,UAAW,GAEpBsG,EAAgBvoa,UAAU8ia,UAAY,WAClCzxU,EAAOrxF,UAAU8ia,UAAU78Z,KAAKtB,OAEpC4ja,EAAgBvoa,UAAU8uT,WAAa,SAAUlqT,GACzCD,KAAKs9Z,UACLt9Z,KAAKi+Z,QAAQh+Z,IAGd2ja,GACTzG,IAKE0B,GAAsC,SAAUnyU,GAEhD,SAASmyU,EAAqBxB,EAAgB3lX,EAAUqf,GACpD,IAAIh3D,EAAQ2sF,EAAOprF,KAAKtB,KAAMq9Z,EAAgB3lX,IAAa13C,KAE3D,OADAD,EAAMg3D,aAAeA,EACdh3D,EA6CX,OAjDA8rF,GAAUgzU,EAAsBnyU,GAMhCmyU,EAAqBxja,UAAUyia,UAAY,SAAU79Z,GACjDysF,EAAOrxF,UAAUyia,UAAUx8Z,KAAKtB,KAAMC,GACtCD,KAAKs9Z,UAAW,GAEpBuB,EAAqBxja,UAAU0uT,UAAY,SAAU9pT,GACjD,GAAID,KAAKs9Z,SAAU,CACf,IAAIvlX,GACA/I,YAAahvC,KAAK6gQ,gBAAiB5pN,YAAaj3C,KAAK6gQ,iBAEpD7gQ,KAAK2kD,gBACN3kD,KAAK2kD,cAAgB3kD,KAAKq9Z,eAAeyG,WAAW/rX,IAExD93C,EAAK1D,OAASyD,KAAK2kD,cACf1kD,EAAKkH,QACLnH,KAAKq9Z,eAAe+C,QAAQpga,KAAK03C,SAAUz3C,GAE/CD,KAAK03C,SAAW,qBASpB,OAPK13C,KAAKs9Z,WACNt9Z,KAAKq9Z,eAAe4B,iBAChBh/Z,EAAK1D,QAAU0D,EAAKgvC,eACpBjvC,KAAKq9Z,eAAehG,kBAAkBp3Z,GAAM,IAGpDysF,EAAOrxF,UAAU0uT,UAAUzoT,KAAKtB,KAAMC,IAC9BD,KAAKw9Z,SAEjBqB,EAAqBxja,UAAU4ia,QAAU,SAAUh+Z,GAC3CD,KAAK2kD,eAAiB3kD,KAAK2kD,yBAAyBzG,KACpDl+C,KAAKq9Z,eAAe2G,mBAAmBhka,KAAK2kD,eAC5C3kD,KAAK2kD,cAAgB,MAEzB3kD,KAAKs9Z,UAAW,EAChB5wU,EAAOrxF,UAAU4ia,QAAQ38Z,KAAKtB,KAAMC,IAExC4+Z,EAAqBxja,UAAU8ia,UAAY,WACvCzxU,EAAOrxF,UAAU8ia,UAAU78Z,KAAKtB,OAEpC6+Z,EAAqBxja,UAAU8uT,WAAa,SAAUlqT,GAC9CD,KAAKs9Z,UACLt9Z,KAAKi+Z,QAAQh+Z,IAGd4+Z,GACTD,IAEEqF,GAAiC,SAAUv3U,GAE3C,SAASu3U,EAAgB5G,GACrB,OAAO3wU,EAAOprF,KAAKtB,KAAMq9Z,GAAgB,IAASr9Z,KAmDtD,OArDA6rF,GAAUo4U,EAAiBv3U,GAI3Bu3U,EAAgB5oa,UAAUyia,UAAY,SAAU79Z,GAC5CysF,EAAOrxF,UAAUyia,UAAUx8Z,KAAKtB,KAAMC,GACtCD,KAAKq9Z,eAAesB,iBACpB,IAAIp+Z,GACA44B,OAASzyB,KAAM,QACfmF,QAAS7L,KAAK6gQ,gBAAgB9zP,EAAGiJ,MAAO,GAAID,OAAQ,GACpD9J,QAASjM,KAAK6gQ,gBAAgB7zP,GAE7B/M,EAAK1D,SACNyD,KAAKkka,YAAclka,KAAKq9Z,eAAeyG,WAAWvja,KAG1D0ja,EAAgB5oa,UAAU0uT,UAAY,SAAU9pT,GAE5C,GADAysF,EAAOrxF,UAAU0uT,UAAUzoT,KAAKtB,KAAMC,GACjCD,KAAKkka,YAQNlka,KAAKkka,YAAYx/Z,MAAMgnD,YAAc,QACrC1rD,KAAKkka,YAAYx/Z,MAAMinD,gBAAkB,MACzC3rD,KAAKkka,YAAYx/Z,MAAM05B,KAAO,kBAVX,CACnB,IAAI79B,GACA44B,OAASzyB,KAAM,QAAUmF,QAAS7L,KAAK6gQ,gBAAgB9zP,EAAGiJ,MAAO,GAAID,OAAQ,GAC7ErR,OAASinD,gBAAiB,MAAOvtB,KAAM,eAAiBnyB,QAASjM,KAAK6gQ,gBAAgB7zP,GAE1FhN,KAAKkka,YAAclka,KAAKq9Z,eAAeyG,WAAWvja,GAOtD,GAAIP,KAAKs9Z,WAAsE,IAA1DnrX,GAAMrB,OAAO9wC,KAAK6gQ,gBAAiB7gQ,KAAK+9Z,cAAyB,CAClF,IAAIrrY,EAAO6C,GAAK+vB,UAAUtlD,KAAK+9Z,aAAc/9Z,KAAK6gQ,kBAClD7gQ,KAAKq9Z,eAAe0G,oBAAoB/ja,KAAKkka,YAAaxxY,GAE9D,OAAQ1yB,KAAKw9Z,SAEjByG,EAAgB5oa,UAAU4ia,QAAU,SAAUh+Z,GACtCD,KAAKkka,aACLlka,KAAKkka,YAAYx/Z,MAAMgnD,YAAc,OACrC1rD,KAAKkka,YAAYx/Z,MAAM05B,KAAO,QAG9Bp+B,KAAKkka,YAAcjka,EAAK1D,OAExByD,KAAKkka,cAAgBlka,KAAKkka,uBAAuB3kX,IAAQv/C,KAAKkka,uBAAuBhmX,KACrFl+C,KAAKq9Z,eAAe8G,QAAQnka,KAAKkka,YAAalka,KAAK6gQ,iBAEvDn0K,EAAOrxF,UAAU4ia,QAAQ38Z,KAAKtB,KAAMC,GACpCD,KAAKs9Z,UAAW,GAEpB2G,EAAgB5oa,UAAU8ia,UAAY,WAClCzxU,EAAOrxF,UAAU8ia,UAAU78Z,KAAKtB,OAE7Bika,GACT9G,IAKEiH,GAA6B,SAAU13U,GAEvC,SAAS03U,EAAY/G,EAAgBjpF,GACjC,IAAIr0U,EAAQ2sF,EAAOprF,KAAKtB,KAAMq9Z,IAAmBr9Z,KAEjD,OADAD,EAAMyqT,QAAU4pB,EACTr0U,EA4CX,OAhDA8rF,GAAUu4U,EAAa13U,GAMvB03U,EAAY/oa,UAAUyia,UAAY,SAAU79Z,GACxCysF,EAAOrxF,UAAUyia,UAAUx8Z,KAAKtB,KAAMC,GACtCD,KAAKs9Z,UAAW,GAEpB8G,EAAY/oa,UAAU0uT,UAAY,SAAU9pT,GAExC,GADAysF,EAAOrxF,UAAU0uT,UAAUzoT,KAAKtB,KAAMC,GAClCD,KAAKs9Z,SACL,GAAKt9Z,KAAKwqT,UAAqE,IAA1Dr4Q,GAAMrB,OAAO9wC,KAAK6gQ,gBAAiB7gQ,KAAK+9Z,eAKxD,GAAI99Z,EAAKoka,YAAY5na,QAAU,EAAG,CACnC,IAAI6na,EAAcrka,EAAK2yE,aAAa,GAChC2xV,EAActka,EAAK2yE,aAAa,GAChC4xV,EAAavka,EAAKoka,YAAY,GAC9BI,EAAaxka,EAAKoka,YAAY,GAC9BvgX,EAAQ9jD,KAAK+yE,YAAYyxV,EAAYC,GAAczka,KAAK+yE,YAAYuxV,EAAaC,GACjFG,EAAazka,EAAKiU,SACtBlU,KAAKq9Z,eAAejpF,KAAKtwR,EAAO,EAAG,EAAG4gX,GACtC1ka,KAAK2ka,YAAYL,EAAaE,GAC9Bxka,KAAK2ka,YAAYJ,EAAaE,QAdoD,CAClF,IAAIhwX,EAAOz0C,KAAK6gQ,gBAAgB9zP,EAAI/M,KAAK+9Z,aAAahxZ,EAClD63Z,EAAO5ka,KAAK6gQ,gBAAgB7zP,EAAIhN,KAAK+9Z,aAAa/wZ,EACtDhN,KAAKq9Z,eAAepmN,OAAOxiK,EAAMmwX,EAAM5ka,KAAK6gQ,iBAcpD,OAAQ7gQ,KAAKw9Z,SAEjB4G,EAAY/oa,UAAU4ia,QAAU,SAAUh+Z,GACtCysF,EAAOrxF,UAAU4ia,QAAQ38Z,KAAKtB,KAAMC,GACpCD,KAAKs9Z,UAAW,GAEpB8G,EAAY/oa,UAAU8ia,UAAY,WAC9BzxU,EAAOrxF,UAAU8ia,UAAU78Z,KAAKtB,OAEpCoka,EAAY/oa,UAAU03E,YAAc,SAAU8xV,EAAQC,GAClD,IAAI/3Z,EAAI+3Z,EAAOh5Z,MAAQ+4Z,EAAO/4Z,MAC1BkB,EAAI83Z,EAAO54Z,MAAQ24Z,EAAO34Z,MAC9B,OAAOG,KAAKQ,KAAME,EAAIA,EAAMC,EAAIA,IAEpCo3Z,EAAY/oa,UAAUspa,YAAc,SAAUI,EAAYC,GACtDD,EAAWj5Z,MAAQk5Z,EAAUl5Z,MAC7Bi5Z,EAAW74Z,MAAQ84Z,EAAU94Z,OAE1Bk4Z,GACTjH,IAKE8H,GAA4B,SAAUv4U,GAEtC,SAASu4U,EAAW5H,GAChB,OAAO3wU,EAAOprF,KAAKtB,KAAMq9Z,GAAgB,IAASr9Z,KAMtD,OARA6rF,GAAUo5U,EAAYv4U,GAItBu4U,EAAW5pa,UAAU4ia,QAAU,SAAUh+Z,GACrCD,KAAKq9Z,eAAejrD,WAAWnyW,GAC/BysF,EAAOrxF,UAAU4ia,QAAQ38Z,KAAKtB,KAAMC,IAEjCgla,GACT9H,IAKE+H,GAA2B,SAAUx4U,GAErC,SAASw4U,EAAU7H,GACf,OAAO3wU,EAAOprF,KAAKtB,KAAMq9Z,GAAgB,IAASr9Z,KAOtD,OATA6rF,GAAUq5U,EAAWx4U,GAIrBw4U,EAAU7pa,UAAU4ia,QAAU,SAAUh+Z,GAC1BpE,OAAO6F,KAAKzB,EAAKgvC,cAAcsd,UAAUC,KAAM,UACrDtqD,QACJwqF,EAAOrxF,UAAU4ia,QAAQ38Z,KAAKtB,KAAMC,IAEjCila,GACT/H,IAKEgI,GAAoC,SAAUz4U,GAE9C,SAASy4U,EAAmB9H,GACxB,OAAO3wU,EAAOprF,KAAKtB,KAAMq9Z,GAAgB,IAASr9Z,KA8DtD,OAhEA6rF,GAAUs5U,EAAoBz4U,GAI9By4U,EAAmB9pa,UAAUyia,UAAY,SAAU79Z,GAG/C,GAFAysF,EAAOrxF,UAAUyia,UAAUx8Z,KAAKtB,KAAMC,GACtCD,KAAKs9Z,UAAW,EACXt9Z,KAAK2kD,cAeL,CACD,IAAInZ,OAAK,EACLzuC,EAAMiD,KAAK2kD,cAAcxrB,MAE7BqS,GAAOz+B,GADPy+B,EAAKzuC,EAAIk6B,OAAOl6B,EAAIk6B,OAAOx6B,OAAS,IACvBsQ,EAAGC,EAAGw+B,EAAGx+B,GACtBhN,KAAK2kD,cAAcxrB,MAAMlC,OAAOzyB,KAAKgnC,OApBhB,CACrBxrC,KAAKw9C,YAAezwC,EAAG/M,KAAKqvS,cAActiS,EAAGC,EAAGhN,KAAKqvS,cAAcriS,GACnE,IAAIzM,GACAsL,QAAS7L,KAAK6gQ,gBAAgB9zP,EAC9Bd,QAASjM,KAAK6gQ,gBAAgB7zP,EAC9BgJ,MAAO,EAAGD,OAAQ,EAClBrR,OAASgnD,YAAa,QAASE,YAAa,GAC5CzyB,OACIzyB,KAAM,QACNyyB,MAAO,UACPlC,SAAWlqB,EAAG/M,KAAKw9C,WAAWzwC,EAAGC,EAAGhN,KAAKw9C,WAAWxwC,IAAOD,EAAG/M,KAAK6gQ,gBAAgB9zP,EAAGC,EAAGhN,KAAK6gQ,gBAAgB7zP,MAGtHhN,KAAK2kD,cAAgB3kD,KAAKq9Z,eAAeyG,WAAWvja,KAU5D4ka,EAAmB9pa,UAAU0uT,UAAY,SAAU9pT,GAE/C,GADAysF,EAAOrxF,UAAU0uT,UAAUzoT,KAAKtB,KAAMC,GAClCD,KAAKs9Z,SAAU,CACf,IAAIvga,EAAMiD,KAAK2kD,cAAcxrB,MAC7B,GAAIn5B,KAAK2kD,eAAiB3kD,KAAK6gQ,kBAC3B9jQ,EAAIk6B,OAAOl6B,EAAIk6B,OAAOx6B,OAAS,GAAGsQ,EAAI/M,KAAK6gQ,gBAAgB9zP,EAC3DhQ,EAAIk6B,OAAOl6B,EAAIk6B,OAAOx6B,OAAS,GAAGuQ,EAAIhN,KAAK6gQ,gBAAgB7zP,EAC3DhN,KAAK2kD,cAAc5yC,QAAQqI,SAAS,GAAG5d,KAAO4sC,GAAeppC,KAAK2kD,cAAcxrB,MAAMlC,QAClFj3B,KAAKs9Z,WAAsE,IAA1DnrX,GAAMrB,OAAO9wC,KAAK6gQ,gBAAiB7gQ,KAAK+9Z,eAAyB,CAClF,IAAIv5W,EAASjvB,GAAK+vB,SAAStlD,KAAK2kD,cAAcxrB,MAAMlC,QACpDj3B,KAAKq9Z,eAAe0G,oBAAoB/ja,KAAK2kD,cAAeH,IAIxE,OAAO,GAEX2gX,EAAmB9pa,UAAU4ia,QAAU,SAAUh+Z,EAAMmla,GACnD14U,EAAOrxF,UAAU0uT,UAAUzoT,KAAKtB,KAAMC,GAClCD,KAAKs9Z,WACLt9Z,KAAKs9Z,UAAW,EACZt9Z,KAAK2kD,eACL3kD,KAAKq9Z,eAAe2G,mBAAmBhka,KAAK2kD,gBAGpD3kD,KAAKm+Z,aAETgH,EAAmB9pa,UAAUqrI,WAAa,SAAUzmI,GAChDysF,EAAOrxF,UAAUqrI,WAAWplI,KAAKtB,KAAMC,GACvCD,KAAK+pT,UAAU9pT,IAEnBkla,EAAmB9pa,UAAU8ia,UAAY,WACrCn+Z,KAAKs9Z,UAAW,EAChBt9Z,KAAK2kD,cAAgB,MAElBwgX,GACThI,ICptCEtxU,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAqBxCm5U,GAAkC,SAAU34U,GAE5C,SAAS24U,EAAiBhI,EAAgB3lX,GACtC,IAAI33C,EAAQ2sF,EAAOprF,KAAKtB,KAAMq9Z,GAAgB,IAASr9Z,KAEvD,OADAD,EAAM23C,SAAWA,EACV33C,EA2nBX,OA/nBA8rF,GAAUw5U,EAAkB34U,GAM5B24U,EAAiBhqa,UAAUyia,UAAY,SAAU79Z,GAC7CD,KAAKs9Z,UAAW,EAChBt9Z,KAAK29Z,YAAcp1W,GAAYtoD,EAAK1D,QACpCmwF,EAAOrxF,UAAUyia,UAAUx8Z,KAAKtB,KAAMC,GACtC,IAAIwqD,EACAxqD,EAAK1D,QAAU0D,EAAK1D,OAAOkuD,aAC3BA,EAAaxqD,EAAK1D,OAAOkuD,WAAW,IAGxC,IAAK,IAAItuD,EAAI,EAAGA,EAAIsuD,EAAWhhB,SAAShtC,OAAQN,IAAK,CACjD,IAAIouC,EAAUkgB,EAAWhhB,SAASttC,GAClC,GAAsB,eAAlB6D,KAAK03C,SACL,IAAK,IAAIj0B,EAAI,EAAGA,EAAI8mB,EAAQtT,OAAOx6B,OAAS,EAAGgnB,IAAK,CAChD,IAAI0zB,GAAapqC,EAAG,EAAGC,EAAG,GAC1BmqC,EAASpqC,GAAMw9B,EAAQtT,OAAOxT,GAAG1W,EAAIw9B,EAAQtT,OAAOxT,EAAI,GAAG1W,GAAK,EAChEoqC,EAASnqC,GAAMu9B,EAAQtT,OAAOxT,GAAGzW,EAAIu9B,EAAQtT,OAAOxT,EAAI,GAAGzW,GAAK,EAC5D7I,GAASnE,KAAK6gQ,gBAAiB1pN,EAAU,MACzCn3C,KAAKg/Z,gBAAkBz0X,EACvBvqC,KAAKsla,aAAe7hZ,QAKxBtf,GAASnE,KAAK6gQ,gBAAiBt2N,EAAQpX,MAAO,MAC9CnzB,KAAKg/Z,gBAAkBz0X,KAKvC86X,EAAiBhqa,UAAU0uT,UAAY,SAAU9pT,GAG7C,GAFAysF,EAAOrxF,UAAU0uT,UAAUzoT,KAAKtB,KAAMC,GACtCD,KAAK6gQ,gBAAkB5gQ,EAAKiU,SACxBlU,KAAK6gQ,iBAAmB7gQ,KAAK+9Z,aAAc,CAC3C,IAAIrqX,EAAQ1zC,KAAK6gQ,gBAAgB7zP,EAAIhN,KAAK+9Z,aAAa/wZ,EACnDknC,EAAQl0C,KAAK6gQ,gBAAgB9zP,EAAI/M,KAAK+9Z,aAAahxZ,EACvD/M,KAAK6gQ,gBAAkB7gQ,KAAKq9Z,eAAeyC,iBAAiB9/Z,KAAK6gQ,iBACjE,IAAI9oN,OAAY,EAIhB,GAHI93C,EAAK1D,QAAU0D,EAAK1D,OAAOkuD,aAC3B1S,EAAY93C,EAAK1D,OAAOkuD,WAAW,IAEnCzqD,KAAKs9Z,eAA8Bnia,IAAlB6E,KAAK03C,UAAoC,IAAVxD,GAAyB,IAAVR,EAAa,CAC5E,GAAsB,eAAlB1zC,KAAK03C,SACL13C,KAAKw9Z,SAAWx9Z,KAAKula,sBAAsBxtX,EAAW/3C,KAAKg/Z,gBAAiBh/Z,KAAK6gQ,gBAAiB7gQ,KAAKsla,kBAEtG,CACD,IAAIxzG,EAAK9xT,KAAK6gQ,gBAAgB9zP,EAAI/M,KAAKg/Z,gBAAgB7rY,MAAMpmB,EACzD8kT,EAAK7xT,KAAK6gQ,gBAAgB7zP,EAAIhN,KAAKg/Z,gBAAgB7rY,MAAMnmB,EACzDiF,EAAQ8lC,EAAUtO,SAASlrC,QAAQyB,KAAKg/Z,iBAC5Ch/Z,KAAKw9Z,SAAWx9Z,KAAKq9Z,eAAemI,iBAAiBztX,EAAW+5Q,EAAID,GAAI,EAAO5/S,GAEnFjS,KAAKq9Z,eAAe4B,kBAI5B,OADAj/Z,KAAK+9Z,aAAe/9Z,KAAK6gQ,iBACjB7gQ,KAAKw9Z,SAEjB6H,EAAiBhqa,UAAU4ia,QAAU,SAAUh+Z,GAC3C,IAAI83C,EAIJ,GAHI93C,EAAK1D,QAAU0D,EAAK1D,OAAOkuD,aAC3B1S,EAAY93C,EAAK1D,OAAOkuD,WAAW,IAEnCxqD,GAAQA,EAAK1D,QAAU0D,EAAK4mB,MAAQ5mB,EAAK4mB,KAAKmB,SAAW/nB,EAAK4mB,KAAKwxF,UAA+B,aAAnBtgE,EAAUrxC,KACzF1G,KAAKyla,mBAAmB1tX,EAAW/3C,KAAK6gQ,sBAGxC,GAAsB,eAAlB7gQ,KAAK03C,UAA6B13C,KAAKg/Z,gBAAiB,CACxD,IAAI/sZ,EAAQ8lC,EAAUtO,SAASlrC,QAAQyB,KAAKg/Z,iBACxCx8X,EAAOuV,EAAUtO,SAASx3B,EAAQ,GAClCg3B,EAAO8O,EAAUtO,SAASx3B,EAAQ,GACtC,GAAIA,IAAU8lC,EAAUtO,SAAShtC,OAAS,GACnCuD,KAAK0la,kBAAkB3tX,EAAW/3C,KAAKg/Z,iBAC1CjnX,EAAUtO,SAAShhB,OAAOsvB,EAAUtO,SAAShtC,OAAS,EAAG,QAGzD,GAAI+lC,GAAQn2B,KAAKE,IAAIi2B,EAAK/lC,QAAU,EAClB,IAAVwV,GACAjS,KAAK2la,kBAAkB5tX,EAAW9lC,QAGrC,GAAIg3B,EAAM,CACX,IAAIpnC,EAAMswC,GAAM+F,eAAejP,EAAKhS,OAAO,GAAIgS,EAAKhS,OAAO,IACvDgE,EAAagO,EAAKxsC,QAA0B,IAAhBwsC,EAAKxsC,OAAgBwsC,EAAKxsC,OAASoF,EAC9DwK,KAAKE,IAAI0uB,IAAa,GACvBj7B,KAAK4la,kBAAkB7tX,EAAW9lC,GAI9CjS,KAAKq9Z,eAAewI,eAAe9tX,GAG3C,GAAI/3C,KAAK29Z,YAAa,CAClB,IAEIwB,GACAz4Z,KAAM,iBAAkB04Z,WAFtB72W,GAAYtoD,EAAK1D,QAEsB8ia,WAAYr/Z,KAAK29Z,YAAaxyN,SAAU,YAErFnrM,KAAKq9Z,eAAeiC,gBAAgBH,GAExCzyU,EAAOrxF,UAAU4ia,QAAQ38Z,KAAKtB,KAAMC,IAExCola,EAAiBhqa,UAAUsqa,kBAAoB,SAAU5tX,EAAW9lC,GAChE,IAAIrT,EAAQm5C,EAAUtO,SAASx3B,EAAQ,GACnCg3B,EAAO8O,EAAUtO,SAASx3B,EAAQ,GAEtC,MADcg3B,EAAKxsC,QAA0B,IAAhBwsC,EAAKxsC,OAAgBwsC,EAAKxsC,OAAS01C,GAAM+F,eAAejP,EAAKhS,OAAO,GAAIgS,EAAKhS,OAAO,MACjG,GAAI,CAChB,IAAI1E,EAAOwlB,EAAUtO,SAASx3B,EAAQ,GACtC8lC,EAAUtO,SAAShhB,OAAOxW,EAAQ,EAAG,GACrC,IAAIs4B,EAAUvqC,KAAKg/Z,gBACO,SAAtBz0X,EAAQ1V,WAA8C,UAAtB0V,EAAQ1V,WACxCj2B,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAGsQ,EAAIwlB,EAAK0E,OAAO,GAAGlqB,EACzDwlB,EAAK0E,OAAO,GAAGjqB,EAAIpO,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAGuQ,IAGzDpO,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAGuQ,EAAIulB,EAAK0E,OAAO,GAAGjqB,EACzDulB,EAAK0E,OAAO,GAAGlqB,EAAInO,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAGsQ,IAEzDw9B,EAAQ9tC,QAA6B,IAAnB8tC,EAAQ9tC,SAC1BuD,KAAKy3C,qBAAqB74C,GAE9BoB,KAAKy3C,qBAAqBllB,KAGlC8yY,EAAiBhqa,UAAUo8C,qBAAuB,SAAUlN,GACpDA,EAAQ1V,YAAc0V,EAAQ9tC,QAA6B,IAAnB8tC,EAAQ9tC,UAChD8tC,EAAQ9tC,OAAS01C,GAAM+F,eAAe3N,EAAQtT,OAAO,GAAIsT,EAAQtT,OAAOsT,EAAQtT,OAAOx6B,OAAS,IAChG8tC,EAAQ1V,UAAYsd,GAAMtd,UAAU0V,EAAQtT,OAAO,GAAIsT,EAAQtT,OAAOsT,EAAQtT,OAAOx6B,OAAS,MAGtG4oa,EAAiBhqa,UAAUuqa,kBAAoB,SAAU7tX,EAAW9lC,GAChE,IAAIs4B,EAAUvqC,KAAKg/Z,gBACfpga,EAAQm5C,EAAUtO,SAASx3B,EAAQ,GACnCsgB,EAAOwlB,EAAUtO,SAASx3B,EAAQ,GAClCg3B,EAAO8O,EAAUtO,SAASx3B,EAAQ,GAuBtC,GAtBIg3B,EAAKxsC,QAA0B,IAAhBwsC,EAAKxsC,QACpBs7C,EAAUtO,SAAShhB,OAAOxW,EAAO,GACP,QAAtBs4B,EAAQ1V,WAA6C,WAAtB0V,EAAQ1V,WACvCtC,EAAK0E,OAAO,GAAGjqB,EAAIu9B,EAAQtT,OAAO,GAAGjqB,EACrCpO,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAGsQ,EAAIwlB,EAAK0E,OAAO,GAAGlqB,IAGzDwlB,EAAK0E,OAAO,GAAGlqB,EAAIw9B,EAAQtT,OAAO,GAAGlqB,EACrCnO,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAGuQ,EAAIulB,EAAK0E,OAAO,GAAGjqB,KAI7D+qC,EAAUtO,SAAShhB,OAAOxW,EAAQ,EAAG,GACX,QAAtBs4B,EAAQ1V,WAA6C,WAAtB0V,EAAQ1V,UACvCj2B,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAGsQ,EAAIk8B,EAAKhS,OAAOgS,EAAKhS,OAAOx6B,OAAS,GAAGsQ,EAG9EnO,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAGuQ,EAAIi8B,EAAKhS,OAAOgS,EAAKhS,OAAOx6B,OAAS,GAAGuQ,EAElFhN,KAAKy3C,qBAAqB74C,GAC1B2rC,EAAQ9tC,OAAS8tC,EAAQ1V,UAAY,MAErCj2B,GAAS2zB,IACT3zB,EAAMnC,OAAS01C,GAAM+F,eAAet5C,EAAMq4B,OAAO,GAAI1E,EAAK0E,OAAO,IACjEr4B,EAAMi2B,UAAYsd,GAAMtd,UAAUj2B,EAAMq4B,OAAO,GAAI1E,EAAK0E,OAAO,IAC3D1E,EAAK91B,QAA0B,IAAhB81B,EAAK91B,QAAc,CAClC81B,EAAK91B,OAAS01C,GAAM+F,eAAet5C,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAI81B,EAAK0E,OAAO1E,EAAK0E,OAAOx6B,OAAS,IAC3G,IAAI8+C,EAAS38C,EAAMq4B,OACf+R,EAASzW,EAAK0E,OAClB1E,EAAKsC,UAAYsd,GAAMtd,UAAU0mB,EAAOA,EAAO9+C,OAAS,GAAIusC,EAAOA,EAAOvsC,OAAS,MAI/F4oa,EAAiBhqa,UAAUoqa,mBAAqB,SAAU1tX,EAAW5kB,GAGjE,IAAK,IAFD2yY,EACAR,EACKnpa,EAAI,EAAGA,EAAI47C,EAAUtO,SAAShtC,OAAQN,IAAK,CAE5CgI,GAASgvB,GADToX,EAAWwN,EAAkB,SAAE57C,IACPg3B,MAAO4kB,EAAUyN,cACzC8/W,EAAenpa,EACf2pa,GAAY,GAGpB,GAAIA,QAA8B3qa,IAAjBmqa,GACb,GAAIvtX,EAAUtO,UAAYsO,EAAUtO,SAAS67X,IAA2D,aAA1CvtX,EAAUtO,SAAS67X,GAAc5+Z,KAAqB,CAChH,IAAI6jC,EAAUwN,EAAUtO,SAAS67X,GAC7Bz4S,EAAW90E,EAAUtO,SAAS67X,EAAe,GAC7Cz4S,IACA90E,EAAUtO,SAAShhB,OAAO68Y,EAAc,GACxCz4S,EAAS51F,OAAO,GAAKsT,EAAQtT,OAAO,SAI3C,CACD,IAAIhlB,EAAQjS,KAAK+la,UAAUhuX,EAAW5kB,GACtC,GAAI4kB,EAAUtO,UAAYsO,EAAUtO,SAASx3B,IAA6C,aAAnC8lC,EAAUtO,SAASx3B,GAAOvL,KAAqB,CAC9F6jC,EAAUwN,EAAUtO,SAASx3B,GAAjC,IACI+zZ,EAAS,IAAIrtX,GAAgBZ,EAAW,YAAcrxC,KAAM,WAAYysB,MAAOA,IAAS,GAC5F6yY,EAAO/uY,OAAO,GAAKsT,EAAQtT,OAAO,GAClC+uY,EAAO/uY,OAAO,GAAK9D,EACnBoX,EAAQtT,OAAO,GAAK9D,EACpB4kB,EAAUtO,SAAShhB,OAAOxW,EAAO,EAAG+zZ,GACpCF,GAAY,GAGhBA,GACA9la,KAAKq9Z,eAAewI,eAAe9tX,IAG3CstX,EAAiBhqa,UAAU0qa,UAAY,SAAUhuX,EAAW5kB,GAExD,IAAK,IADD8yY,KACK9pa,EAAI,EAAGA,EAAI47C,EAAUtO,SAAShtC,OAAQN,IAAK,CAChD,IAAIouC,EAAUwN,EAAUtO,SAASttC,GAC7Bu2B,EAAO6C,GAAK+vB,UAAU/a,EAAQtT,OAAO,GAAIsT,EAAQtT,OAAO,KAC5DvE,EAAK6yB,QAAQxN,EAAUyN,YACnB9yB,EAAKqe,cAAc5d,IACnB8yY,EAAiBzha,KAAK+lC,GAG9B,GAAgC,IAA5B07X,EAAiBxpa,OACjB,OAAOs7C,EAAUtO,SAASlrC,QAAQ0na,EAAiB,IAS9C,IANDnL,OAAQ,EACR36Y,OAAM,EACNlO,OAAQ,EACRo3B,OAAM,EACNiwH,OAAI,EACJp3D,OAAI,EACR,IAAS/lG,EAAI,EAAGA,EAAI8pa,EAAiBxpa,OAAQN,IACzCktC,EAAM48X,EAAiB9pa,GACvBm9J,GAAKnmI,EAAMnmB,EAAIq8B,EAAIpS,OAAO,GAAGjqB,IAAMq8B,EAAIpS,OAAO,GAAGjqB,EAAImmB,EAAMnmB,GAC3Dk1F,GAAK/uE,EAAMpmB,EAAIs8B,EAAIpS,OAAO,GAAGlqB,IAAMs8B,EAAIpS,OAAO,GAAGlqB,EAAIomB,EAAMpmB,GAC3D+tZ,EAAQzuZ,KAAKE,IAAI+sJ,EAAIp3D,GACX,IAAN/lG,IACAgkB,EAAM26Y,EACN7oZ,EAAQ,GAER6oZ,EAAQ36Y,IACRA,EAAM26Y,EACN7oZ,EAAQ9V,GAGhB,OAAO47C,EAAUtO,SAASlrC,QAAQ0na,EAAiBh0Z,KAG3DozZ,EAAiBhqa,UAAUkqa,sBAAwB,SAAUxoa,EAAKwtC,EAASpX,EAAOmyY,GAC9E,IAAI7uX,GAAiB1pC,EAAG,EAAGC,EAAG,GAC9BypC,EAAa1pC,GAAMw9B,EAAQtT,OAAOquY,GAAcv4Z,EAAIw9B,EAAQtT,OAAOquY,EAAe,GAAGv4Z,GAAK,EAC1F0pC,EAAazpC,GAAMu9B,EAAQtT,OAAOquY,GAAct4Z,EAAIu9B,EAAQtT,OAAOquY,EAAe,GAAGt4Z,GAAK,EAC1F,IAAI6kT,EAAK1+R,EAAMnmB,EAAIypC,EAAazpC,EAC5B8kT,EAAK3+R,EAAMpmB,EAAI0pC,EAAa1pC,EAC5BkF,EAAQlV,EAAI0sC,SAASlrC,QAAQgsC,GAC7BgN,GAAS,EACMhN,EAAQtT,OAAO,GAAGjqB,EAAEmS,QAAQ,GAAOorB,EAAQtT,OAAO,GAAGjqB,EAAEmS,QAAQ,GAuBlF,OApBe,IAAXlN,IACc,IAAVA,GAAuC,IAAxBlV,EAAI0sC,SAAShtC,QAA0C,IAA1B8tC,EAAQtT,OAAOx6B,QAC3DwV,EAAQjS,KAAKkma,YAAYnpa,EAAKwtC,EAASunR,EAAID,EAAI5/S,GAC/CslC,GAAS,GAEJtlC,IAAUlV,EAAI0sC,SAAShtC,OAAS,GAA4B,OAAtB8tC,EAAQ1V,WAAyC,OAAnB0V,EAAQ9tC,OAIlE,IAAVwV,IACLA,EAAQjS,KAAKmma,mBAAmBppa,EAAKwtC,EAASunR,EAAID,EAAI5/S,GACtDslC,GAAS,IALTtlC,EAAQjS,KAAKoma,mBAAmBrpa,EAAKwtC,EAASunR,EAAID,EAAIyzG,GACtD/tX,GAAS,GAMTA,IACAv3C,KAAKg/Z,gBAAkBz0X,EAAUxtC,EAAI0sC,SAASx3B,GAC9CjS,KAAKsla,aAAe,GAExBtla,KAAKqma,uBAAuBtpa,EAAKkV,EAAO6/S,EAAID,GAC5C7xT,KAAKq9Z,eAAewI,eAAe9oa,KAEhC,GAEXsoa,EAAiBhqa,UAAU6qa,YAAc,SAAUnpa,EAAKwtC,EAASunR,EAAID,EAAIl2P,GACrE,IACI9mC,EAEAhzB,EADA4nC,KAEAhtC,EAAS01C,GAAM+F,eAAe3N,EAAQtT,OAAO,GAAIsT,EAAQtT,OAAO,IAChEqvY,EAAmBn0X,GAAMtd,UAAU0V,EAAQtT,OAAO,GAAIsT,EAAQtT,OAAO,IAQzE,OAPAwS,EAASjlC,KAAK,IAAI4uC,GAAkBr2C,EAAK,YAAc2J,KAAM,aAAcmuB,UAAWyxY,EAAkB7pa,OAAQA,EAAS,IAAK,IAC9Ho4B,EAAa0V,EAAQtT,OAAO,GAAGjqB,IAAMu9B,EAAQtT,OAAO,GAAGjqB,EAAO6kT,EAAK,EAAK,SAAW,MAAWC,EAAK,EAAK,QAAU,OAClHjwT,EAAO0oC,EAAQtT,OAAO,GAAGlqB,IAAMw9B,EAAQtT,OAAO,GAAGlqB,EAAK8kT,EAAKC,EAC3DroR,EAASjlC,KAAK,IAAI4uC,GAAkBr2C,EAAK,YAAc2J,KAAM,aAAcmuB,UAAWA,EAAWp4B,OAAQoF,IAAO,IAChH4nC,EAASjlC,KAAK,IAAI4uC,GAAkBr2C,EAAK,YAAc2J,KAAM,aAAcmuB,UAAWyxY,EAAkB7pa,OAAQA,EAAS,IAAK,IAC9HM,EAAI0sC,SAAWA,EAASjvB,OAAOzd,EAAI0sC,UAC3BkyB,EAAO,GAGnB0pW,EAAiBhqa,UAAU8qa,mBAAqB,SAAUppa,EAAKwtC,EAASunR,EAAID,EAAIl2P,GAC5E,IAAI9mC,EACAp4B,EAEA8pa,EACAt0Z,EACAu0Z,EAHA/8X,KAIJ,GAAI1sC,EAAIu9D,cAAgB/vB,EAAQ9tC,QAAUM,EAAI0sC,SAAS,GAAGxS,OAAOx6B,OAAS,EAAG,CACzEM,EAAI0sC,SAAShhB,OAAO,EAAG,GAEvB,IAAK,IADD+Z,OAAO,EACFrmC,EAAI,EAAGA,EAAIouC,EAAQtT,OAAOx6B,OAAS,EAAGN,IAAK,CAChD,IAAI0F,EAAMswC,GAAM+F,eAAe3N,EAAQtT,OAAO96B,GAAIouC,EAAQtT,OAAO96B,EAAI,IACjEs8C,EAAMtG,GAAMtd,UAAU0V,EAAQtT,OAAO96B,GAAIouC,EAAQtT,OAAO96B,EAAI,IAEvC,KADzBqqa,EAAY,IAAIpzX,GAAkBr2C,EAAK,YAAc2J,KAAM,aAAcmuB,UAAW4jB,EAAKh8C,OAAQoF,IAAO,IAC1FpF,UACN+lC,GAA4B,QAAnBA,EAAK3N,WAA0C,WAAnB2N,EAAK3N,UAI1C2xY,EAAU3xY,UAAYg9R,EAAK,EAAI,SAAW,MAH1C20G,EAAU3xY,UAAYi9R,EAAK,EAAI,QAAU,QAMjDtvR,EAAOgkY,EACP/8X,EAASjlC,KAAKgia,GAElBzpa,EAAI0sC,SAAWA,EAASjvB,OAAOzd,EAAI0sC,UACnCx3B,EAAQ,MAEP,CACDs0Z,GAAc7/Z,KAAM,aAAcmuB,UAAW0V,EAAQ1V,UAAWp4B,OAAQ8tC,EAAQ9tC,OAAS,GACzFgtC,EAASjlC,KAAK,IAAI4uC,GAAkBr2C,EAAK,WAAYwpa,GAAW,IACtC,WAAtBh8X,EAAQ1V,WAAgD,QAAtB0V,EAAQ1V,WAC1Cp4B,EAAS4P,KAAKE,IAAIulT,GAClBj9R,EAAYi9R,EAAK,EAAI,QAAU,SAG/Br1T,EAAS4P,KAAKE,IAAIslT,GAClBh9R,EAAYg9R,EAAK,EAAI,SAAW,OAEpC20G,EAAY,IAAIpzX,GAAkBr2C,EAAK,YAAc2J,KAAM,aAAcmuB,UAAWA,EAAWp4B,OAAQA,IAAU,GACjHgtC,EAASjlC,KAAKgia,GACd,IAAIC,EAAU1pa,EAAI0sC,SAAS,GACvBg9X,GAAWA,EAAQhqa,SACnBgqa,EAAQhqa,OAAUo4B,IAAc4xY,EAAQ5xY,UAAa4xY,EAAQhqa,OAASA,EAASgqa,EAAQhqa,OAASA,GAEpGwV,EAAQ,EACRs4B,EAAQ9tC,OAAS,EAAI8tC,EAAQ9tC,OAAS,EACtCM,EAAI0sC,SAAWA,EAASjvB,OAAOzd,EAAI0sC,UAEvC,OAAOx3B,GAEXozZ,EAAiBhqa,UAAUgra,uBAAyB,SAAUtpa,EAAKkV,EAAO6/S,EAAID,GAC1E,IAAI9wS,EAAUhkB,EAAI0sC,SAASx3B,GACvBylC,EAAW32B,EAAQkW,OAAOlW,EAAQkW,OAAOx6B,OAAS,GAClD+gD,EAAaz8B,EAAQkW,OAAO,GAC5ByvY,GAAe,EACnB,GAAqB,eAAjB3lZ,EAAQra,KAAuB,CAC/Bqa,EAAQkW,OAAO,GAAKumB,EACpBz8B,EAAQkW,OAAOlW,EAAQkW,OAAOx6B,OAAS,GAAKi7C,EAK5C,GAJW36C,EAAI0sC,SAASx3B,EAAQ,KAE5By0Z,EAAe1ma,KAAK2ma,sBAAsB70G,EAAID,EAAI90T,EAAKkV,IAEvDlV,EAAI0sC,SAAShtC,OAAS,EAAIwV,GAASy0Z,EAAc,CACjD,IAAIE,EAAc7pa,EAAI0sC,SAASx3B,EAAQ,GACvCjS,KAAK6ma,kBAAkB9pa,EAAKgkB,EAAS6lZ,EAAa90G,EAAID,MAIlEwzG,EAAiBhqa,UAAU+qa,mBAAqB,SAAUruX,EAAWxN,EAASunR,EAAID,EAAIyzG,GAClF,IACI1ma,EACA4na,EACA3ka,EACA42C,EAJAxmC,EAAQ8lC,EAAUtO,SAASlrC,QAAQgsC,GAKvCwN,EAAUtO,SAASkvH,MACnB,IAAIpmI,EAAOwlB,EAAUtO,SAASsO,EAAUtO,SAAShtC,OAAS,GAC1DmC,EAAS2zB,GAAsB,eAAdA,EAAK7rB,KAAyB6rB,EAAO,KACtD,IAAK,IAAIp2B,EAAI,EAAGA,EAAIouC,EAAQtT,OAAOx6B,OAAS,EAAGN,IAC3C0F,EAAMswC,GAAM+F,eAAe3N,EAAQtT,OAAO96B,GAAIouC,EAAQtT,OAAO96B,EAAI,IACjEs8C,EAAMtG,GAAMtd,UAAU0V,EAAQtT,OAAO96B,GAAIouC,EAAQtT,OAAO96B,EAAI,IAC5Dqqa,EAAY,IAAIpzX,GAAkB2E,EAAW,YAAcrxC,KAAM,aAAcjK,OAAQoF,EAAKgzB,UAAW4jB,IAAO,GAC9GV,EAAUtO,SAASjlC,KAAKgia,GACxB5na,EAAQ4na,EAEZ,IAAIM,EAAMxB,EACV,IAA8B,IAA1B/6X,EAAQtT,OAAOx6B,QAAgBqqa,IAAQv8X,EAAQtT,OAAOx6B,OAAS,KAC3DmC,IACAA,EAAMnC,QAAU,QAERtB,IAAR2ra,GAAmB,CACnB,IAAId,OAAS,EACbnka,EAAM,EAAIswC,GAAM+F,eAAe3N,EAAQtT,OAAOsT,EAAQtT,OAAOx6B,OAAS,GAAI8tC,EAAQtT,OAAOsT,EAAQtT,OAAOx6B,OAAS,IAAM,EACvHg8C,EAAMtG,GAAMtd,UAAU0V,EAAQtT,OAAOsT,EAAQtT,OAAOx6B,OAAS,GAAI8tC,EAAQtT,OAAOsT,EAAQtT,OAAOx6B,OAAS,IACxGupa,EAAS,IAAI5yX,GAAkB2E,EAAW,YAAcrxC,KAAM,aAAcjK,OAAQoF,EAAKgzB,UAAW4jB,IACpGV,EAAUtO,SAASjlC,KAAKwha,GAGhC,IAAIe,EAAU,IAAI3zX,GAAkB2E,EAAW,YAAcrxC,KAAM,eAAgB,GAInF,OAHAqxC,EAAUtO,SAASjlC,KAAKuia,GACxB/ma,KAAKq9Z,eAAewI,eAAe9tX,GACnC9lC,GAAgBqzZ,GAGpBD,EAAiBhqa,UAAU2ra,kBAAoB,SAAUxkY,EAAMuV,EAAW9lC,EAAO6/S,EAAID,GACjF,GAAc,IAAV5/S,GAAsC,IAAvBuwB,EAAKvL,OAAOx6B,QAAgB+lC,EAAK/lC,OAAS,EAAG,CAC5D,IAAIF,EAASw7C,EAAU9I,cAAc/F,QACjCnoB,EAAUg3B,EAAUtO,SAASx3B,GAC7Bg3B,EAAO8O,EAAUtO,SAASx3B,EAAQ,GAClC+zZ,OAAS,EACTz7X,KACJy7X,EAAS,IAAI5yX,GAAkB2E,EAAW,YAAcrxC,KAAM,aAAcjK,OAAQ,GAAIo4B,UAAW2N,EAAK3N,YACxG0V,EAAQ/lC,KAAKwha,GACb,IAAInka,OAAM,EAENA,EADsB,SAAtBkf,EAAQ8T,UACD9T,EAAQkW,OAAO,GAAGlqB,GAAKxQ,EAAOs0C,WAAW9jC,EAAI,IAEzB,UAAtBgU,EAAQ8T,UACLt4B,EAAOq0C,YAAY7jC,EAAI,GAAMgU,EAAQkW,OAAO,GAAGlqB,EAE5B,WAAtBgU,EAAQ8T,UACLt4B,EAAOo0C,aAAa3jC,EAAI,GAAM+T,EAAQkW,OAAO,GAAGjqB,EAGjD+T,EAAQkW,OAAO,GAAGjqB,GAAKzQ,EAAOm0C,UAAU1jC,EAAI,IAE7C+T,EAAQ8T,UAClBmxY,EAAS,IAAI5yX,GAAkB2E,EAAW,YAAcrxC,KAAM,aAAcjK,OAAQoF,EAAKgzB,UAAW9T,EAAQ8T,YAC5G0V,EAAQ/lC,KAAKwha,GACbjlZ,EAAQtkB,OAASskB,EAAQtkB,OAASoF,EAC9BonC,GAAQA,EAAKxsC,QAAUwsC,EAAKpU,YACxBoU,EAAKpU,YAAc2N,EAAK3N,UACxBoU,EAAKxsC,QAAU,GAEVwsC,EAAKpU,YAAc6d,GAAqBlQ,EAAK3N,aAClDoU,EAAKxsC,QAAU,KAGvBs7C,EAAUtO,SAAWc,EAAQ/vB,OAAOu9B,EAAUtO,UAC9CzpC,KAAKg/Z,gBAAkBjnX,EAAUtO,SAAS,KAGlD47X,EAAiBhqa,UAAUsra,sBAAwB,SAAU70G,EAAID,EAAI95Q,EAAW9lC,GAC5E,IAAI8O,EAAUg3B,EAAUtO,SAASx3B,GAC7BuwB,EAAOuV,EAAUtO,SAASx3B,EAAQ,GACtCuwB,EACKvL,OAAOuL,EAAKvL,OAAOx6B,OAAS,GAAKskB,EAAQkW,OAAO,GACrD,IAAIgwY,GAAgBlvX,EAAUxI,UAAuC,KAA3BwI,EAAUuiB,aAChDosW,GAAe,EAyBnB,MAxBkB,eAAdlkY,EAAK97B,OACkB,WAAnB87B,EAAK3N,UACL2N,EAAK/lC,QAAUo1T,EAES,QAAnBrvR,EAAK3N,UACV2N,EAAK/lC,QAAUo1T,EAES,UAAnBrvR,EAAK3N,UACV2N,EAAK/lC,QAAUq1T,EAGftvR,EAAK/lC,QAAUq1T,EAEY,KAA3B/5Q,EAAUuiB,cAAuB93B,EAAK/lC,OAAS,EAC/CuD,KAAKgna,kBAAkBxkY,EAAMuV,EAAW9lC,EAAO6/S,EAAID,GAE9C95Q,EAAUxI,UAAuC,KAA3BwI,EAAUuiB,cAAuB93B,EAAK/lC,OAAS,GAAe,IAAVwV,IAC/Ey0Z,GAAe,EACf1ma,KAAKkna,mBAAmBnvX,EAAWh3B,IAEnCkmZ,GACAjna,KAAKmna,uBAAuB3kY,IAG7BkkY,GAEXrB,EAAiBhqa,UAAU8ra,uBAAyB,SAAU58X,GACtDA,EAAQ9tC,OAAS,IACjB8tC,EAAQ1V,UAAY6d,GAAqBnI,EAAQ1V,WACjD0V,EAAQ9tC,SAAW,IAG3B4oa,EAAiBhqa,UAAUwra,kBAAoB,SAAU9pa,EAAKgkB,EAASkoB,EAAM6oR,EAAID,GACpE9wS,EAAQkW,OAAOlW,EAAQkW,OAAOx6B,OAAS,GAChDwsC,EAAKhS,OAAO,GAAKlW,EAAQkW,OAAOlW,EAAQkW,OAAOx6B,OAAS,GACpDwsC,GAAsB,eAAdA,EAAKviC,OACTuiC,EAAKxsC,QAA0B,IAAhBwsC,EAAKxsC,UACG,SAAnBwsC,EAAKpU,WAA2C,UAAnBoU,EAAKpU,UACvB,IAAPi9R,IACA7oR,EAAKxsC,OAA6B,UAAnBwsC,EAAKpU,UAAyBoU,EAAKxsC,OAASq1T,EAAK7oR,EAAKxsC,OAASq1T,GAC1E7oR,EAAKxsC,QAA0B,IAAhBwsC,EAAKxsC,SACpBuD,KAAKmna,uBAAuBl+X,IAKzB,IAAP4oR,IACA5oR,EAAKxsC,OAA6B,WAAnBwsC,EAAKpU,UAA0BoU,EAAKxsC,OAASo1T,EAAK5oR,EAAKxsC,OAASo1T,GAC3E5oR,EAAKxsC,QAA0B,IAAhBwsC,EAAKxsC,SACpBuD,KAAKmna,uBAAuBl+X,MAOpDo8X,EAAiBhqa,UAAU6ra,mBAAqB,SAAUnvX,EAAWinX,GACjE,IAKIhwX,EALA/8B,EAAQ8lC,EAAUtO,SAASlrC,QAAQyga,GACnCoI,GAAc,EACdrmZ,EAAUg3B,EAAUtO,SAASx3B,GAC7BuwB,EAAOuV,EAAUtO,SAASx3B,EAAQ,GAGtC,GAAIuwB,EAAK/lC,OAAS,GAAKs7C,EAAUxI,SAAU,CACvC,IAAIO,EAAaiI,EAAU9I,cAAc/F,QACrCO,KACA88X,OAAY,EACZc,GAAoB,EACxBrna,KAAKmna,uBAAuBpmZ,GAC5B,IAAIkoB,EAAO8O,EAAUtO,SAASx3B,EAAQ,GAClCq1Z,EAAWvvX,EAAUtO,SAASx3B,EAAQ,GAO1C,OANIg3B,GACAjpC,KAAKmna,uBAAuBl+X,GAE5Bq+X,GACAtna,KAAKmna,uBAAuBG,GAExB9kY,EAAK3N,WACT,IAAK,MACL,IAAK,SACDma,EAAejuB,EAAQtkB,OAAS,GAA2B,SAAtBskB,EAAQ8T,UAAwBib,EAAWe,WAAaf,EAAWc,YACpG7vB,EAAQtkB,OAASqzC,EAAW95B,MAAQ,EAChC3J,KAAKE,IAAIi2B,EAAK/lC,QAAUqzC,EAAW/5B,OAAS,IAC5CysB,EAAK/lC,OAAS01C,GAAM+F,eAAepI,EAAW/c,OAAQyP,EAAKvL,OAAOuL,EAAKvL,OAAOx6B,OAAS,IACvFskB,EAAQkW,OAAO,GAAGlqB,EAAIiiC,EAAYjiC,EAClCgU,EAAQtkB,OAAS01C,GAAM+F,eAAen3B,EAAQkW,OAAO,GAAIlW,EAAQkW,OAAOlW,EAAQkW,OAAOx6B,OAAS,IAChGskB,EAAQtkB,QAAU,GAClB2qa,GAAc,IAIdn+X,GAAQA,EAAKpU,WAAaoU,EAAKxsC,SAC/BwsC,EAAKhS,OAAO,GAAGjqB,EAAIgiC,EAAYhiC,EAC/Bi8B,EAAKhS,OAAO,GAAGlqB,EAAIk8B,EAAKhS,OAAOgS,EAAKhS,OAAOx6B,OAAS,GAAGsQ,EAA2B,UAAtBgU,EAAQ8T,UAChEma,EAAYjiC,EAAI,GAAKiiC,EAAYjiC,EAAI,IAE7Cq6Z,GAAc,EACdC,GAAoB,GAExB,MACJ,IAAK,OACL,IAAK,QACDr4X,EAAejuB,EAAQtkB,OAAS,GAA2B,QAAtBskB,EAAQ8T,UAAuBib,EAAWY,UAAYZ,EAAWa,aAClG5vB,EAAQtkB,OAASqzC,EAAW/5B,OAAS,EACjC1J,KAAKE,IAAIi2B,EAAK/lC,QAAUqzC,EAAW95B,MAAQ,IAC3CwsB,EAAK/lC,OAAS01C,GAAM+F,eAAepI,EAAW/c,OAAQyP,EAAKvL,OAAOuL,EAAKvL,OAAOx6B,OAAS,IACvFskB,EAAQkW,OAAO,GAAGjqB,EAAIgiC,EAAYhiC,EAClC+T,EAAQtkB,OAAS01C,GAAM+F,eAAen3B,EAAQkW,OAAO,GAAIlW,EAAQkW,OAAOlW,EAAQkW,OAAOx6B,OAAS,IAChGskB,EAAQtkB,QAAU,GAClB2qa,GAAc,IAIdn+X,GAAQA,EAAKpU,WAAaoU,EAAKxsC,SAC/BwsC,EAAKhS,OAAO,GAAGlqB,EAAIiiC,EAAYjiC,EAC/Bk8B,EAAKhS,OAAO,GAAGjqB,EAAIi8B,EAAKhS,OAAOgS,EAAKhS,OAAOx6B,OAAS,GAAGuQ,EAA2B,WAAtB+T,EAAQ8T,UAChEma,EAAYhiC,EAAI,GAAKgiC,EAAYhiC,EAAI,IAE7Co6Z,GAAc,EACdC,GAAoB,GAIhCrna,KAAKmna,uBAAuB3kY,GAC5BxiC,KAAKmna,uBAAuBpmZ,GACxBqmZ,IACAb,GAAc7/Z,KAAM,aAAcmuB,UAAW9T,EAAQ8T,UAAWp4B,OAAQ,IACxEgtC,EAASjlC,KAAK,IAAI4uC,GAAkB2E,EAAW,WAAYwuX,GAAW,IAClEc,IACIp+X,GAAQA,EAAKpU,WAAaoU,EAAKxsC,SAC/BwsC,EAAKxsC,OAAS01C,GAAM+F,eAAejP,EAAKhS,OAAO,GAAIgS,EAAKhS,OAAOgS,EAAKhS,OAAOx6B,OAAS,KAEpF6qa,GAAYA,EAASzyY,WAAayyY,EAAS7qa,SAC3C6qa,EAAS7qa,OAAS01C,GAAM+F,eAAejP,EAAKhS,OAAOgS,EAAKhS,OAAOx6B,OAAS,GAAI6qa,EAASrwY,OAAOqwY,EAASrwY,OAAOx6B,OAAS,KAEzHs7C,EAAUtO,SAAShhB,OAAOxW,EAAQ,EAAG,IAEzC8lC,EAAUtO,SAAWA,EAASjvB,OAAOu9B,EAAUtO,WAEnDzpC,KAAKg/Z,gBAAmB,EAAsBjnX,EAAUtO,SAASx3B,EAAQ,GACrE8lC,EAAUtO,SAASx3B,EAAQ,GAC/BjS,KAAKq9Z,eAAewI,eAAe9tX,KAG3CstX,EAAiBhqa,UAAUqqa,kBAAoB,SAAU3tX,EAAWinX,GAChE,GAAIjnX,EAAU2zW,UAAuC,KAA3B3zW,EAAU4zW,aAAqB,CACrD,IAAI4b,OAAa,EACbC,OAAW,EACXC,OAAa,EACbC,OAAW,EACXx+X,EAAU6O,EAAUvI,cAActG,QAClCy+X,EAAgB3I,EAAgB/nY,OAAO,GACvC2wY,EAAe5I,EAAgB/nY,OAAO+nY,EAAgB/nY,OAAOx6B,OAAS,GACxC,UAA9Buia,EAAgBnqY,WAAuD,SAA9BmqY,EAAgBnqY,WACzD0yY,GAAex6Z,EAAG46Z,EAAc56Z,EAAGC,EAAG26Z,EAAc36Z,GACpDw6Z,GACIz6Z,EAAkC,SAA9BiyZ,EAAgBnqY,UAAwB+yY,EAAa76Z,EAAIm8B,EAAQlzB,MAAQ,EAAI4xZ,EAAa76Z,EAAIm8B,EAAQlzB,MAAQ,EAClHhJ,EAAG46Z,EAAa56Z,GAEpBy6Z,GAAe16Z,EAAGm8B,EAAQnW,OAAOhmB,EAAGC,EAAGk8B,EAAQnW,OAAO/lB,EAAIk8B,EAAQnzB,QAClE2xZ,GAAa36Z,EAAGm8B,EAAQnW,OAAOhmB,EAAGC,EAAGk8B,EAAQnW,OAAO/lB,EAAIk8B,EAAQnzB,UAGhEwxZ,GAAex6Z,EAAG46Z,EAAc56Z,EAAGC,EAAG26Z,EAAc36Z,GACpDw6Z,GACIz6Z,EAAG66Z,EAAa76Z,EAChBC,EAAkC,WAA9BgyZ,EAAgBnqY,UAA0B+yY,EAAa56Z,EAAIk8B,EAAQnzB,OAAS,EAAI6xZ,EAAa56Z,EAAIk8B,EAAQnzB,OAAS,GAE1H0xZ,GAAe16Z,EAAGm8B,EAAQnW,OAAOhmB,EAAIm8B,EAAQlzB,MAAOhJ,EAAGk8B,EAAQnW,OAAO/lB,GACtE06Z,GAAa36Z,EAAGm8B,EAAQnW,OAAOhmB,EAAIm8B,EAAQlzB,MAAOhJ,EAAGk8B,EAAQnW,OAAO/lB,IAIxE,OAAQ8kC,IAFMsG,GAAImvX,EAAWx6Z,EAAGsrC,GAAIkvX,EAAWv6Z,EAAGsrC,GAAIkvX,EAASz6Z,EAAGwrC,GAAIivX,EAASx6Z,IACjEorC,GAAIqvX,EAAW16Z,EAAGsrC,GAAIovX,EAAWz6Z,EAAGsrC,GAAIovX,EAAS36Z,EAAGwrC,GAAImvX,EAAS16Z,IACvC,QAE5C,OAAO,GAOXq4Z,EAAiBhqa,UAAUiX,QAAU,aAQrC+yZ,EAAiBhqa,UAAU0kC,cAAgB,WAIvC,MAAO,wBAEJslY,GACTlI,IC1nBE0K,GAAqC,WAErC,SAASA,EAAoB95X,EAASsvX,GAClCr9Z,KAAK8na,cAAgB,OACrB9na,KAAKkC,OAAQ,EACblC,KAAK+na,WAAY,EACjB/na,KAAKgoa,aAAc,EACnBhoa,KAAKs9Z,UAAW,EAChBt9Z,KAAKioa,iBAAkB,EACvBjoa,KAAK+tC,QAAU,KACf/tC,KAAKkoa,aAAe,KACpBloa,KAAKwgD,KAAO,KACZxgD,KAAKuN,UAAY,KACjBvN,KAAK+tC,QAAUA,EACf/tC,KAAKkoa,aAAe,IAAIC,GACxBnoa,KAAKq9Z,eAAiBA,EAm5B1B,OAj5BA/+Z,OAAOuJ,eAAegga,EAAoBxsa,UAAW,UACjDqM,IAAK,WACD,OAAO1H,KAAK8na,eAEhBzga,IAAK,SAAUsoD,GACPA,IAAW3vD,KAAK8na,gBACW,aAAvB9na,KAAK8na,gBACL9na,KAAK+tC,QAAQyS,OAASC,GAAaO,SAC/BhhD,KAAKwgD,MACLxgD,KAAKwgD,KAAKy9W,SAAU/pZ,SAAUlU,KAAK6gQ,kBAEvC7gQ,KAAKwgD,KAAO,MAEhBxgD,KAAK8na,cAAgBn4W,EACM,SAAvB3vD,KAAK8na,eAAmD,WAAvB9na,KAAK8na,eACpC9na,KAAK+tC,QAAQ0T,eAAiBC,GAAc0mX,SAI9Cpoa,KAAK+tC,QAAQ0T,eAAiBzhD,KAAK+tC,QAAQ0T,gBAAkBC,GAAcC,WAH3E3hD,KAAK+tC,QAAQ0T,eAAiBzhD,KAAK+tC,QAAQ0T,eAAiBC,GAAcC,WAK9E3hD,KAAK+tC,QAAQw+S,UAAUvsV,KAAK+tC,QAAQ6sB,UAAUjL,EAAQ3vD,KAAKs9Z,aAGnE31Z,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAegga,EAAoBxsa,UAAW,WACjDqM,IAAK,WACD,OAAO1H,KAAK+na,WAEhB1ga,IAAK,SAAUm2Z,GACXx9Z,KAAK+na,UAAYvK,EACbx9Z,KAAKw9Z,QACLx9Z,KAAK+tC,QAAQw+S,UAAU,eAGvBvsV,KAAK+tC,QAAQw+S,UAAUvsV,KAAK+tC,QAAQ6sB,UAAU56D,KAAK2vD,OAAQ3vD,KAAKs9Z,YAGxE31Z,YAAY,EACZC,cAAc,IAGlBiga,EAAoBxsa,UAAUwmF,iBAAmB,SAAUhhF,GACvD,IAAIuqT,EACAv/S,EACAI,GAC6B,IAA7BpL,EAAE6F,KAAKnI,QAAQ,UAEfsN,GADAu/S,EAAWvqT,GACQu/D,eAAe,GAAGrK,QACrC9pD,EAAUm/S,EAAShrP,eAAe,GAAGpK,UAGrCnqD,EAAUhL,EAAEk1D,QACZ9pD,EAAUpL,EAAEm1D,SAEhB,IAAI9hD,EAAW,IAAIub,GACnBvb,EAAWiuC,GAAaniD,KAAK+tC,SAC7B,IAAIs6X,EAAeroa,KAAK+tC,QAAQ/sC,QAAQ4K,wBAOxC,OANAC,EAAUA,EAAU7L,KAAK+tC,QAAQu6X,cAAct8Z,WAAaq8Z,EAAa77Z,KAAO0H,EAAS8B,MACzF/J,EAAUA,EAAUjM,KAAK+tC,QAAQu6X,cAAcn8Z,UAAYk8Z,EAAa37Z,IAAMwH,EAAS6B,OACvFlK,GAAW7L,KAAK+tC,QAAQoV,SAAS91C,UAAUy2C,MAC3C73C,GAAWjM,KAAK+tC,QAAQoV,SAAS91C,UAAUy2C,MAC3Cj4C,GAAW7L,KAAK+tC,QAAQoV,SAAS91C,UAAUykT,GAC3C7lT,GAAWjM,KAAK+tC,QAAQoV,SAAS91C,UAAUwkT,IAClC9kT,EAAGlB,EAASmB,EAAGf,IAK5B47Z,EAAoBxsa,UAAUkta,aAAe,SAAUlxV,GACnD,IAAIt3E,EAAQC,KAOZ,OANIA,KAAK8jT,UACL5jT,aAAaF,KAAK8jT,UAEtB9jT,KAAK8jT,SAAW3jT,WAAW,WACvBJ,EAAMyoa,mBAAmBzoa,EAAMguC,QAAQ/sC,UACxC,MACI,GAKX6ma,EAAoBxsa,UAAUmta,mBAAqB,SAAUxna,GACzD,IAAI4Z,EAAYpa,SAASyuB,eAAejuB,EAAQsC,IAChD,GAAIsX,EAAW,CACX,IAAImb,EAASnb,EAAUhP,wBACvB5L,KAAK+tC,QAAQoV,SAASslX,gBAAgB1yY,EAAO/f,MAAO+f,EAAOhgB,QAC3D,IAAI7B,EAAW,IAAIub,GACnBvb,EAAWiuC,GAAaniD,KAAK+tC,SAC7B,IAAI/3B,EAAQhW,KAAK+tC,QAAQ26X,aAAa1oa,KAAK+tC,QAAQ/3B,MAAO9B,EAAS8B,OAC/DD,EAAS/V,KAAK+tC,QAAQ26X,aAAa1oa,KAAK+tC,QAAQh4B,OAAQ7B,EAAS6B,QACrE/V,KAAK+tC,QAAQu6X,cAAc5ja,MAAMsR,MAAQA,EACzChW,KAAK+tC,QAAQu6X,cAAc5ja,MAAMqR,OAASA,EAC1C/V,KAAK+tC,QAAQoV,SAASgqJ,UAClBntM,KAAK+tC,QAAQyU,cAAce,YAC3BN,GAAYjjD,KAAK+tC,WAK7B85X,EAAoBxsa,UAAUsta,gBAAkB,WAC5C,OAAS3oa,KAAKwgD,gBAAgB8/W,IAAYtga,KAAKwgD,gBAAgBohX,KAAe5ha,KAAKgoa,aAGvFH,EAAoBxsa,UAAUuta,aAAe,WACzC,GAAiD,IAA5C5oa,KAAK+tC,QAAQmd,cAAcR,MAAMjuD,QAAiE,IAAjDuD,KAAK+tC,QAAQmd,cAAcT,WAAWhuD,OAAe,CACvG,IAAI4nG,KACJA,EAAOA,EAAK7pF,OAAOxa,KAAK+tC,QAAQmd,cAAcR,MAAO1qD,KAAK+tC,QAAQmd,cAAcT,YAChFzqD,KAAKw9Z,QAAWx9Z,KAAKgoa,aAA+B,IAAhB3jU,EAAK5nG,QAAgBuD,KAAKwgD,gBAAgB49W,KAAe7/W,GAAQ8lD,EAAK,MAGlHwjU,EAAoBxsa,UAAUwta,gBAAkB,SAAU1ha,EAAQ2ha,GAC9D,IAAIC,EAAgB5ha,EACpB,GAAI4ha,EACA,KAAoC,OAA7BA,EAActoa,YAAqB,CACtC,GAAuC,iBAA5Bsoa,EAAc1la,aAClByla,IAAoE,IAAvDC,EAAc1la,UAAU9E,QAAQ,mBAC3Cuqa,IAAyE,IAA5DC,EAAc1la,UAAU9E,QAAQ,wBAClD,OAAOwqa,EAGPA,EAAgBA,EAActoa,WAI1C,OAAO,MAEXona,EAAoBxsa,UAAU2ta,UAAY,SAAU3xV,GAChD,OAAOqT,UAAUi6C,SAASh1H,MAAM,OAAS0nE,EAAIgvD,QAAUhvD,EAAIrvD,SAE/D6/Y,EAAoBxsa,UAAU4ta,YAAc,SAAU5ra,EAAKL,GACvD,OAAQ0tF,UAAUi6C,SAASh1H,MAAM,QAAkB,cAARtS,GAAiC,WAAVL,GAEtE6qa,EAAoBxsa,UAAUyia,UAAY,SAAUzmV,GAChDr3E,KAAKkC,OAAQ,EACb,IAAI4zD,EAEJ,GADAA,EAAUuhB,EAAIvhB,SACT91D,KAAKkpa,qBAAqB7xV,IAASl2B,GAAgBnhD,KAAK+tC,UACxD4S,GAAW3gD,KAAK+tC,WAAakT,GAAYjhD,KAAK+tC,SAI/C,GAHoB,WAAhB/tC,KAAK2vD,QAAuC,SAAhB3vD,KAAK2vD,QACjC3vD,KAAK+tC,QAAQo7X,qBAAqBnpa,KAAKopa,aAAcjvW,GAAeC,OAAO,GAE3Ep6D,KAAKwgD,gBAAgB2kX,KAAsC,IAAf9tV,EAAI8mD,QAAgC,IAAhB9mD,EAAI07C,SAAgB,CACpF,IAAIz/B,GACAtyF,QAAShB,KAAK+tC,QAAS75B,SAAUlU,KAAK6gQ,gBAAiB5hP,MAAOo4D,EAAI07C,QAASrmE,aAAc1sD,KAAKuN,UAAUm/C,cAE5G1sD,KAAKs9Z,UAAW,EAChBt9Z,KAAKwgD,KAAKy9W,QAAQj+Z,KAAKuN,UAAW+lF,QAEjC,IAAuB,IAAlBtzF,KAAKs9Z,WAA2C,IAArBt9Z,KAAKgoa,aAAwBhoa,KAAKwgD,gBAAgB2kX,GACnFnla,KAAKgoa,aAAc,EACnBhoa,KAAKuN,aACLvN,KAAKqpa,kBAAkBrpa,KAAK6gQ,gBAAiB7gQ,KAAKuN,WAClDvN,KAAKuN,UAAU2G,SAAWlU,KAAK6gQ,gBAC/B7gQ,KAAKwgD,KAAKs9W,UAAU99Z,KAAKuN,eAExB,CACDvN,KAAKgoa,aAAc,EACnBhoa,KAAK6gQ,gBAAkB7gQ,KAAK+9Z,aAAe/9Z,KAAK6hF,iBAAiBxK,GACjEr3E,KAAKuN,aACLvN,KAAK+tC,QAAQu7X,UACb,IAAInia,OAAS,EACT+/C,EAAUlnD,KAAKkoa,aAAaqB,sBAAsBvpa,KAAK6gQ,gBAAiB7gQ,KAAK+tC,QAAS/tC,KAAKuN,UAAW,KAAMvN,KAAK2vD,QACjH5yD,EAAMiD,KAAKkoa,aAAasB,qBAAqBxpa,KAAK+tC,QAASmZ,EAASlnD,KAAK2vD,OAAQ3vD,KAAKs9Z,SAAUt9Z,KAAKuN,UAAW8pE,GAChHoyV,EAAgB,KACR,OAAR1sa,IACA0sa,EAAgBzpa,KAAK+tC,QAAQ27X,sBAAsB3sa,EAAKiD,KAAK6gQ,oBAEzD15P,EAASnH,KAAKq9Z,eAAeqC,WAAW+J,EAAe1sa,IAG/DiD,KAAK2vD,OAAS3vD,KAAK+tC,QAAQ47X,mBAAmB5sa,EAAK0sa,EAAezpa,KAAK6gQ,gBAAiB15P,GAExF,IAAI6gB,EAAUhoB,KAAKgpa,UAAU3xV,GAa7B,GAZIrvD,GAAWqvD,EAAIghC,UAAYr4G,KAAK+tC,QAAQ2rB,2BACxC15D,KAAK2vD,OAAS,cAER3nC,IAAWqvD,EAAIghC,UAAe13D,GAAW3gD,KAAK+tC,WACpD/tC,KAAK2vD,OAAS,UAElB3vD,KAAKwgD,KAAOxgD,KAAK+tC,QAAQ67X,QAAQ5pa,KAAK2vD,QACjC3vD,KAAKwgD,OACNxgD,KAAK2vD,OAAS,SACd3vD,KAAKwgD,KAAOxgD,KAAK+tC,QAAQ67X,QAAQ5pa,KAAK2vD,SAE1C3vD,KAAKqpa,kBAAkBrpa,KAAK6gQ,gBAAiB7gQ,KAAKuN,WAC9Cya,GAAWqvD,EAAIghC,SAAU,CACzB,IAAIxxF,EAAQmB,GAAWqvD,EAAIghC,UAAcrwF,QAASA,EAASqwF,SAAUhhC,EAAIghC,WAAerwF,SAAS,GACjGhoB,KAAKuN,UAAUsZ,KAAOA,EAE1B7mB,KAAKuN,UAAU2G,SAAWlU,KAAK6gQ,gBAC/B7gQ,KAAKwgD,KAAKs9W,UAAU99Z,KAAKuN,WACzBvN,KAAK6pa,kBAAqBtta,OAAQyD,KAAKuN,UAAUhR,OAAQ0yC,cAAejvC,KAAKuN,UAAU0hC,eACvFjvC,KAAK6pa,iBAAiB31Z,SAAWlU,KAAK6gQ,gBACtC7gQ,KAAK6pa,iBAAiBhjZ,KAAO7mB,KAAKuN,UAAUsZ,KAC5C7mB,KAAKs9Z,UAAW,EACC,eAAbjmV,EAAI3wE,OACAovD,GAAWA,EAAQr5D,QAAU,IAC7BuD,KAAKg1U,eAAiBp/Q,GAAgB51D,KAAKg1U,eAAgB39P,EAAKvhB,IAE/DA,GACDuhB,EAAI3xD,kBAKf1lB,KAAK6oa,gBAAgBxxV,EAAIlwE,SAAYnH,KAAK6oa,gBAAgBxxV,EAAIlwE,QAAQ,IAAW2uD,GAClFuhB,EAAI3xD,kBAGZmiZ,EAAoBxsa,UAAUyua,gBAAkB,SAAUjpa,EAAG9D,GACrDiD,KAAKwgD,gBAAgB2kX,IACrBnla,KAAKwgD,KAAKupQ,UAAU/pT,KAAKuN,WAEzBvN,KAAK+tC,QAAQsc,eAAe0/W,cAC5B/pa,KAAKgqa,gBAAgBnpa,GAGhBb,KAAKw9Z,SACLx9Z,KAAKwgD,KAAKupQ,UAAU/pT,KAAKuN,WAG9BvN,KAAKuN,UAAUpG,SACfnH,KAAKopa,aAAeppa,KAAKuN,UAAUpG,QAEvC,IAAI8ia,IAASjqa,KAAKuN,UAAUpG,kBAAkBo4C,IAAQxiD,aAAewiD,IACjEv/C,KAAKwgD,gBAAgBo+W,IACrB5+Z,KAAK+tC,QAAQo7X,qBAAqBnpa,KAAKopa,wBAAwB7pX,GAAOv/C,KAAKopa,aAAeppa,KAAKkqa,UAAW/vW,GAAeyrV,QAAUzrV,GAAeC,MAAO6vW,GAEzJjqa,KAAKopa,wBAAwB7pX,IAC1Bv/C,KAAKkqa,qBAAqB3qX,IAAQv/C,KAAKkqa,WAAalqa,KAAKkqa,UAAU5ma,KAAOtD,KAAKopa,aAAa9la,IAC/FtD,KAAK+tC,QAAQo7X,qBAAqBnpa,KAAKkqa,UAAW/vW,GAAeyrV,QAAUzrV,GAAeC,OAAO,GAErGp6D,KAAKopa,aAAea,EAAS,KAAOlta,EACpCiD,KAAKkqa,UAAYD,EAAS,KAAOlta,GAGrC8qa,EAAoBxsa,UAAU0uT,UAAY,SAAUlpT,EAAGi1D,GAEnD,GADA91D,KAAKkC,OAAQ,EACTi/C,GAAgBnhD,KAAK+tC,UAAa4S,GAAW3gD,KAAK+tC,WAAakT,GAAYjhD,KAAK+tC,SAAW,CAC3F/tC,KAAK6gQ,gBAAkB7gQ,KAAK6hF,iBAAiBhhF,GAC7C,IAAIqmD,EAAUlnD,KAAK+tC,QAAQw7X,sBAAsBvpa,KAAK6gQ,iBAClD9jQ,EAAMiD,KAAK+tC,QAAQy7X,qBAAqBtiX,EAASlnD,KAAK2vD,OAAQ3vD,KAAKs9Z,W1WzKnF,SAAiCvvX,EAAStc,GAClCsc,EAAQyU,cAAce,aACtBxV,EAAQ+U,OAAO+tW,gBAAgB9iX,EAAQ+U,OAAO9hD,QAASywB,EAAcsc,EAAQoV,SAASC,kBACtFrV,EAAQgV,OAAO8tW,gBAAgB9iX,EAAQgV,OAAO/hD,QAASywB,EAAcsc,EAAQoV,SAASG,iB0WuKlF6mX,CAAiBnqa,KAAK+tC,QAAS/tC,KAAK6gQ,iBACpC,IAAImiJ,GAAQ,EACR77Y,OAAS,EAUb,GATe,cAAXtG,EAAE6F,OACFovD,EAAUj1D,EAAEi1D,UACGA,EAAQr5D,OAAS,IAC5BuD,KAAK+0U,cAAgBn/Q,GAAgB51D,KAAK+0U,cAAel0U,EAAGi1D,GACxC,cAAhB91D,KAAK2vD,SACLqzV,GAAQ,KAI0C,IAA1D7wW,GAAMrB,OAAO9wC,KAAK6gQ,gBAAiB7gQ,KAAK+9Z,eAA2B/9Z,KAAKs9Z,SAAU,CAClF,IAAyB,IAArBt9Z,KAAKgoa,aAAyBhlB,EAAO,CACrChjZ,KAAKuN,aACL,IAAIk8Z,EAAgB,KACR,OAAR1sa,IACA0sa,EAAgBzpa,KAAK+tC,QAAQ27X,sBAAsB3sa,EAAKiD,KAAK6gQ,iBACzD9jQ,IAAQiD,KAAKopa,cACTppa,KAAKopa,eACLppa,KAAKoqa,eACLpqa,KAAK+tC,QAAQo7X,qBAAqBnpa,KAAKopa,aAAcjvW,GAAeC,OAAO,IAE3Er9D,aAAewiD,KACfv/C,KAAKkqa,UAAYnta,GAErBiD,KAAKopa,aAAersa,EACpBiD,KAAKqqa,aAAarqa,KAAK6gQ,iBAAiB,IAElC7gQ,KAAKopa,cAAgBppa,KAAKopa,eAAiBrsa,GACjDiD,KAAKqqa,aAAarqa,KAAK6gQ,iBAAiB,GAExC4oK,IACAtia,EAASnH,KAAKq9Z,eAAeqC,WAAW+J,EAAe1sa,KAG/DiD,KAAK2vD,OAAS3vD,KAAK+tC,QAAQ47X,mBAAmB5sa,EAAK0sa,EAAezpa,KAAK6gQ,gBAAiB15P,GACxFnH,KAAKqpa,kBAAkBrpa,KAAK6gQ,gBAAiB7gQ,KAAKuN,WAClDvN,KAAKwgD,KAAOxgD,KAAK4pa,QAAQ5pa,KAAK2vD,QAC9B3vD,KAAKsqa,cACDtqa,KAAKwgD,gBAAgBq+W,GACrB7+Z,KAAKwgD,KAAKupQ,UAAU/pT,KAAKuN,WAEpBvN,KAAKwgD,gBAAgB2kX,GAC1Bnla,KAAKwgD,KAAKupQ,UAAU/pT,KAAKuN,WAEpBuoD,GAAW91D,KAAKwgD,gBAAgB4jX,IACrCpka,KAAKwgD,KAAKs9W,UAAU99Z,KAAKuN,WAE7BvN,KAAK4oa,eACL,IAAIqB,GAAS,IACPjqa,KAAKopa,cAAmBppa,KAAKwgD,gBAAgB4jX,MAAiBrna,aAAewiD,KAClC,IAA5Cv/C,KAAK+tC,QAAQmd,cAAcR,MAAMjuD,QAAiBy9D,GAAWl6D,KAAK+tC,QAAS/tC,KAAKopa,iBACjFa,GAAS,GAEbjqa,KAAK+tC,QAAQo7X,qBAAqBnpa,KAAKopa,aAAcjvW,GAAeC,MAAO6vW,GAC/D,OAARlta,GAAgBiD,KAAKopa,eACrBppa,KAAKopa,aAAe,KACpBppa,KAAKoqa,gBAETpnB,GAAQ,MAEP,CAOD,GANAhjZ,KAAKuN,UAAU2G,SAAWlU,KAAK6gQ,gBACX,SAAhB7gQ,KAAK2vD,SAAsBuK,GAAWl6D,KAAK+tC,QAAS/tC,KAAKuN,UAAUhR,QAAQ,IAC3EyD,KAAKuN,UAAUhR,kBAAkBkiD,IACjCz+C,KAAKqpa,kBAAkBrpa,KAAK6gQ,gBAAiB7gQ,KAAKuN,WAEtDvN,KAAKsqa,cACDzpa,EAAEmnB,SAAWnnB,EAAEw3G,SAAU,CACzB,IAAIxxF,EAAQhmB,EAAEmnB,SAAWnnB,EAAEw3G,UAAcrwF,QAASnnB,EAAEmnB,QAASqwF,SAAUx3G,EAAEw3G,WAAerwF,SAAS,GACjGhoB,KAAKuN,UAAUsZ,KAAOA,EAEtB03B,GAAQxhD,IAAQkhD,GAAUlhD,IAAQiD,KAAK6pa,kBACvC7pa,KAAK6pa,iBAAiBtta,QAA0B,WAAhByD,KAAK2vD,UAChCuK,GAAWl6D,KAAK+tC,QAAS/tC,KAAKuN,UAAUhR,QAAQ,IACjDyD,KAAKuN,UAAUhR,kBAAkBkiD,IACjCz+C,KAAKqpa,kBAAkBrpa,KAAK6gQ,gBAAiB7gQ,KAAKuN,WAEhDxQ,aAAemhD,OAAenhD,aAAemhD,KAC7C/5C,GAASnE,KAAK6gQ,gBAAiB9jQ,EAAIiyC,YAAajyC,EAAIyoD,aAClDrhD,GAASnE,KAAK6gQ,gBAAiB9jQ,EAAIk6C,YAAal6C,EAAIyoD,eACxDxlD,KAAK2vD,OAAS,QAElB3vD,KAAKwgD,KAAOxgD,KAAK4pa,QAAQ5pa,KAAK2vD,QAC9B3vD,KAAKwgD,KAAKs9W,UAAU99Z,KAAK6pa,mBAE7B7pa,KAAKqpa,kBAAkBrpa,KAAK6gQ,gBAAiB7gQ,KAAKuN,UAAWvN,KAAKuN,UAAUhR,QAC5EyD,KAAK4oa,eACL5oa,KAAKs9Z,UAAW,EAChBt9Z,KAAK6pa,iBAAmB,KACxB7pa,KAAK8pa,gBAAgBjpa,EAAG9D,GAE5BiD,KAAK+9Z,aAAe/9Z,KAAK6gQ,gBACpB7gQ,KAAK6oa,gBAAgBhoa,EAAEsG,QAAQ,IAChCtG,EAAE6kB,oBAKlBmiZ,EAAoBxsa,UAAU2ua,gBAAkB,SAAUnpa,GACtD,IAAI0pa,EAAqBvqa,KAAKwqa,gBAAgB3pa,GAC9C,IAAK0pa,GAAsBvqa,KAAKioa,gBAC5Bjoa,KAAKioa,iBAAkB,EACvB3la,cAActC,KAAKyqa,mBAElB,GAAIF,GACL,IAAKvqa,KAAKwgD,gBAAgB8/W,IAAYtga,KAAKwgD,gBAAgB2hX,IACpDnia,KAAKwgD,gBAAgB49W,KAAep+Z,KAAKs9Z,SAAU,CACtD,IAAIoN,EAAY1qa,KAEZA,KAAK+tC,QAAQsc,eAAe0/W,eAAiBQ,IAAuBvqa,KAAKioa,kBACzEjoa,KAAKioa,iBAAkB,EACvBjoa,KAAKyqa,aAAeroa,YAAY,SAAUnC,GACtCyqa,EAAUC,aAAaJ,EAAoB1pa,EAJrC,MAAA,YAUlBb,KAAKw9Z,SAAYx9Z,KAAKwgD,KAAKupQ,UAAU/pT,KAAKuN,YAIlDs6Z,EAAoBxsa,UAAU4ia,QAAU,SAAU5mV,GAC9C,IAAIvhB,EAEJ,GADAA,EAAUuhB,EAAIvhB,SACT91D,KAAKkpa,qBAAqB7xV,IAASl2B,GAAgBnhD,KAAK+tC,UACrD4S,GAAW3gD,KAAK+tC,WAAakT,GAAYjhD,KAAK+tC,SAAW,CAC7D,GAAI/tC,KAAKwgD,SAAWxgD,KAAKwgD,gBAAgB2kX,KACnCnla,KAAKwgD,gBAAgB2kX,IAAsC,IAAf9tV,EAAIwvD,QAAgB,CAGlE,GAFA7mI,KAAK+tC,QAAQu7X,UACb9oa,SAASyuB,eAAejvB,KAAK+tC,QAAQ/sC,QAAQsC,GAAK,WAAWpB,SACxDlC,KAAKs9Z,UAA0B,IAAdjmV,EAAIkhC,OACF,SAAhBv4G,KAAK2vD,OAAmB,CACxB3vD,KAAK2vD,OAAS,SACd,IAAIzI,EAAUlnD,KAAK+tC,QAAQw7X,sBAAsBvpa,KAAK6gQ,iBAClD9jQ,EAAMiD,KAAK+tC,QAAQy7X,qBAAqBtiX,EAASlnD,KAAK2vD,OAAQ3vD,KAAKs9Z,UACnEsN,GAAmB,GACjBvzV,EAAIrvD,SAAWhoB,KAAKgoa,aAClBhoa,KAAK+tC,QAAQmd,cAAcR,MAAMjuD,OAASuD,KAAK+tC,QAAQmd,cAAcT,WAAWhuD,OAAU,GAC7E,IAAd46E,EAAIkhC,QACPqyT,GAAmB,EACnB5qa,KAAKq9Z,eAAesB,kBAEnBzkW,GAAWl6D,KAAK+tC,QAAShxC,IAAU6ta,GACpC5qa,KAAKq9Z,eAAeqB,eAAe3ha,IAO/C,GAHAiD,KAAKs9Z,UAAW,EAChBt9Z,KAAKgoa,aAAc,EACnBhoa,KAAK6gQ,gBAAkB7gQ,KAAK6hF,iBAAiBxK,GACzCr3E,KAAKwgD,OAASxgD,KAAKwgD,KAAKu9W,cAAgB/9Z,KAAKwgD,gBAAgB0kX,IAAY,CACzElla,KAAKuN,UAAU2G,SAAWlU,KAAK6gQ,gBAC/B7gQ,KAAKqpa,kBAAkBrpa,KAAK6gQ,gBAAiB7gQ,KAAKuN,UAAWvN,KAAKuN,UAAUhR,QAC5E,IAAIyrB,EAAUhoB,KAAKgpa,UAAU3xV,GAC7B,GAAIrvD,GAAWqvD,EAAIghC,SAAU,CACzB,IAAIxxF,EAAQmB,GAAWqvD,EAAIghC,UAAcrwF,QAASA,EAASqwF,SAAUhhC,EAAIghC,WACnErwF,SAAS,GACfhoB,KAAKuN,UAAUsZ,KAAOA,EAE1B7mB,KAAKuN,UAAUixZ,WAAannV,EAAIwvD,OAChC7mI,KAAKwgD,KAAKy9W,QAAQj+Z,KAAKuN,WAG3B,GADAvN,KAAKw9Z,SAAU,EACXx9Z,KAAKopa,aAAc,CACnB,IAAIn5W,EAAiBkK,GAAeyrV,QAChC1rV,GAAWl6D,KAAK+tC,QAAS/tC,KAAKopa,gBAC9Bn5W,GAAkBkK,GAAeC,OAErCp6D,KAAK+tC,QAAQo7X,qBAAqBnpa,KAAKopa,aAAcn5W,GAAgB,GACrEjwD,KAAKopa,aAAe,KAExBppa,KAAKg1U,eAAiB,KACtBh1U,KAAK+0U,cAAgB,KACf/0U,KAAKwgD,gBAAgByjX,KACvBjka,KAAKwgD,KAAO,MAGfsV,GACDuhB,EAAI3xD,iBAER1lB,KAAK+tC,QAAQwsB,0BAAuBp/D,EACpC,IAAIuK,EAAW1F,KAAK+tC,QAAQmd,cAI5B,IAHKlrD,KAAKs9Z,UAAY53Z,EAASqM,SAAWrM,EAASuzD,YAAYx8D,OAAS,GACpEuD,KAAK+tC,QAAQwzT,gBAAe,IAE3BvhW,KAAKs9Z,WAAat9Z,KAAK+tC,QAAQgrB,cAAe,CAC/C,IAAIu6B,GACAtyF,QAAShB,KAAKuN,UAAUhR,QAAUyD,KAAK+tC,QAAS75B,SAAUlU,KAAKuN,UAAU2G,SAAU+K,MAAOo4D,EAAIwvD,OAC9Fn6E,aAAc1sD,KAAKuN,UAAUm/C,cAEjC1sD,KAAK+tC,QAAQioH,aAAasrP,GAAaruR,MAAO3/B,GAElDtzF,KAAKuN,eAKbs6Z,EAAoBxsa,UAAU8uT,WAAa,SAAU9yO,GAE7Cr3E,KAAKwgD,MAAQxgD,KAAKs9Z,UAClBt9Z,KAAKwgD,KAAK2pQ,WAAWnqT,KAAKuN,WAE1BvN,KAAKuN,WAAavN,KAAKuN,UAAUhR,SACjCyD,KAAK+tC,QAAQo7X,qBAAqBnpa,KAAKuN,UAAUhR,OAAQ49D,GAAeC,OAAO,GAC/Ep6D,KAAKopa,aAAe,MAEpBppa,KAAKwgD,gBAAgBo+W,IAAe5+Z,KAAKuN,WAAavN,KAAKuN,UAAUpG,QAAUnH,KAAKuN,UAAUpG,kBAAkBo4C,KAChHv/C,KAAK+tC,QAAQo7X,qBAAqBnpa,KAAKuN,UAAUpG,OAAQgzD,GAAeC,MAAQD,GAAeyrV,SAAS,GACxG5lZ,KAAKopa,aAAe,MAExB,IAAI1ja,EAAW1F,KAAK+tC,QAAQmd,cACxBxlD,GAAYA,EAASqM,SACrB/R,KAAK+tC,QAAQwzT,gBAAe,GAEhCvhW,KAAKgoa,aAAc,EACnBhoa,KAAKkC,OAAQ,EACblC,KAAKg1U,eAAiB,KACtBh1U,KAAK+0U,cAAgB,KACrB/0U,KAAKq9Z,eAAe6B,aACpBl/Z,KAAKs9Z,UAAW,EAChBt9Z,KAAKuN,aACLvN,KAAKwgD,KAAO,K1WvZpB,WACI,IACIylL,EACA9pO,EAFA0ua,EAAUrqa,SAASkN,uBAAuB,oBAG9C,GAAIm9Z,GAAWA,EAAQpua,OAAS,EAC5B,IAAKN,EAAI0ua,EAAQpua,OAAS,EAAGN,GAAK,EAAGA,KACjC8pO,EAAS4kM,EAAQ1ua,KAEb8pO,EAAOxlO,WAAW6E,YAAY2gO,G0WgZtC6kM,GACAzzV,EAAI3xD,kBAGRmiZ,EAAoBxsa,UAAUqrI,WAAa,SAAUrvD,GACjD,IAAI8yI,EAAM9yI,EAAIuvD,WAAa,IAAM,GAAKvvD,EAAIwvD,OAAS,EAC/CpgF,EAAgBzmD,KAAK6hF,iBAAiBxK,GAC1Cr3E,KAAK+tC,QAAQu7X,UACbtpa,KAAK+tC,QAAQW,cAAczsC,QAE3B,GADcjC,KAAKgpa,UAAU3xV,GAEzBr3E,KAAK+tC,QAAQqmS,KAAKjqH,MAAa,MAAW1jK,GAC1C4wB,EAAI3xD,qBAEH,CACD,IAAI09B,EAAmBpjD,KAAK+tC,QAAQoV,SAASC,iBACzCE,EAAiBtjD,KAAK+tC,QAAQoV,SAASG,eACvC9iC,EAAS2pM,EAAK,IAAM,GACpBnqN,KAAKwgD,MAAQxgD,KAAKwgD,gBAAgB2kX,KAClCnla,KAAKuN,aACLvN,KAAKqpa,kBAAkB5iX,EAAezmD,KAAKuN,WAC3CvN,KAAKuN,UAAU2G,SAAWuyC,EAC1BzmD,KAAKwgD,KAAKkmF,WAAW1mI,KAAKuN,YAE1B8pE,EAAIghC,SACJr4G,KAAK+tC,QAAQoV,SAASixR,KAAK,EAAG5zT,EAAQ,EAAGimC,GAGzCzmD,KAAK+tC,QAAQoV,SAASixR,KAAK,EAAG,EAAG5zT,EAAQimC,GAEzCrD,IAAqBpjD,KAAK+tC,QAAQoV,SAASC,kBACxCE,IAAmBtjD,KAAK+tC,QAAQoV,SAASG,gBAC5C+zB,EAAI3xD,mBAKhBmiZ,EAAoBxsa,UAAU82H,QAAU,SAAU96C,GAC9C,KAAMr3E,KAAK+tC,QAAQ0T,eAAiBC,GAAc0mX,YAC5Cpoa,KAAKkpa,qBAAqB7xV,IAAsB,WAAZA,EAAIh6E,KAAoC,KAAhBg6E,EAAIpvD,QAAiB,CACnF,IACIkgB,OAAU,EACV4iY,EAAU1zV,EAAIpvD,QAAUovD,EAAIpvD,QAAUovD,EAAIkhC,MAC1Cl7G,EAAMg6E,EAAIh6E,IACV2qB,EAAUhoB,KAAKgpa,UAAU3xV,GAC7B,GAAIr3E,KAAK+tC,QAAQob,gBAAkBnpD,KAAK+tC,QAAQpF,SAE5C,IAAK,IADDA,EAAW3oC,KAAK+tC,QAAQpF,SACnBvqC,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKqrC,GAAWvqC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/D,IAAIspB,EAAM7kB,EAAGzE,GAEb,IADA+pC,EAAUnoC,KAAK+tC,QAAQpF,SAASjhB,MAChBygB,EAAQ6iY,QAAQC,cAAgB9iY,EAAQ6iY,QAAQ3ta,OACvD0ta,IAAY5iY,EAAQ6iY,QAAQ3ta,KAAQA,IAAQgkZ,GAAKl5W,EAAQ6iY,QAAQ3ta,MAC/D2C,KAAKipa,YAAY5ra,EAAKqqB,OAClBygB,EAAQ6iY,QAAQC,eAAmB5zV,EAAI8gC,SAAa9gC,EAAIghC,WAAerwF,GACzEmgB,EAAQ6iY,QAAQC,eAAiBjjZ,GAAWqvD,EAAI8gC,QAAU9gC,EAAIghC,WAC1Dr4G,KAAKkra,cAAc/iY,EAAQ6iY,QAAQC,eAAiB5zV,EAAI8gC,QACxDn4G,KAAKmra,gBAAgBhjY,EAAQ6iY,QAAQC,eAAiB5zV,EAAIghC,UAC1Dr4G,KAAKora,eAAejjY,EAAQ6iY,QAAQC,eAAiBjjZ,GAAY,CAC1E,IAAIqhC,EAAapF,GAAY9b,EAAQkhB,YACrC,GAAIA,GAAcA,GACdgiX,iBAAoBC,cACpBC,UAAWpjY,EAAQojY,YACnB,CAKA,GAJAl0V,EAAI3xD,iBACY,WAAZ2xD,EAAIh6E,KAAqB2C,KAAKkpa,qBAAqB7xV,IACnD72E,SAASyuB,eAAejvB,KAAK+tC,QAAQu6X,cAAchla,IAAIpB,QAEvDimC,EAAQihB,QAAS,CAIHnF,GAAY9b,EAAQihB,QAClCA,EAAUiiX,iBAAoBC,cAAeC,UAAWpjY,EAAQojY,YAGpE,WAQ5B1D,EAAoBxsa,UAAUmva,gBAAkB,SAAU3pa,GACtD,IAAIqT,EAAWlU,KAAK6hF,iBAAiBhhF,GACrCqT,EAASnH,GAAK/M,KAAK+tC,QAAQoV,SAASY,YACpC7vC,EAASlH,GAAKhN,KAAK+tC,QAAQoV,SAASY,YACpC,IAAIynX,EACAC,EAAmBzra,KAAK+tC,QAAQsc,eAAeohX,iBAgBnD,OAfIzra,KAAK+tC,QAAQsc,eAAe0/W,gBACxB71Z,EAASnH,EAAI/M,KAAK+tC,QAAQoV,SAASC,iBAAmBqoX,EAAiBh/Z,MAAQzM,KAAK+tC,QAAQoV,SAASQ,cAAgB,GACrH6nX,EAAiB,QAEZt3Z,EAASnH,EAAI/M,KAAK+tC,QAAQoV,SAASC,iBAAmBqoX,EAAiBj/Z,KAC5Eg/Z,EAAiB,OAEZt3Z,EAASlH,EAAIhN,KAAK+tC,QAAQoV,SAASG,eAAiBmoX,EAAiB9+Z,OAC1E3M,KAAK+tC,QAAQoV,SAASO,eAAiB,GACvC8nX,EAAiB,SAEZt3Z,EAASlH,EAAIhN,KAAK+tC,QAAQoV,SAASG,eAAiBmoX,EAAiB/+Z,MAC1E8+Z,EAAiB,QAGlBA,GAEX3D,EAAoBxsa,UAAUsva,aAAe,SAAUrzU,EAAQz2F,EAAGhB,EAAO6ra,GACrE,IAAIx3Z,EAAWojF,EACf,IAAKt3F,KAAKwgD,gBAAgB8/W,IAAYtga,KAAKwgD,gBAAgB2hX,IACpDnia,KAAKwgD,gBAAgB49W,KAAep+Z,KAAKs9Z,SAAU,CACtDt9Z,KACKuN,UAAU2G,UAAanH,EAAG/M,KAAKwgD,KAAKu9W,aAAahxZ,EAAGC,EAAGhN,KAAKwgD,KAAKu9W,aAAa/wZ,GACnF,IAAIiI,EAAMjV,KAAK6hF,iBAAiBhhF,GAG5B2L,GAFmBxM,KAAK+tC,QAAQsc,eAAeohX,iBAExC,GACP1yX,EAAQ,EACZ,OAAQ7kC,GACJ,IAAK,QACDlU,KAAKuN,UAAU2G,SAASnH,GAAK,GAC7BP,EAAO,GACP,MACJ,IAAK,OACDxM,KAAKuN,UAAU2G,SAASnH,GAAK,GAC7BP,GAAQ,GACR,MACJ,IAAK,SACDxM,KAAKuN,UAAU2G,SAASlH,GAAK,GAC7B+rC,EAAQ,GACR,MACJ,IAAK,MACD/4C,KAAKuN,UAAU2G,SAASlH,GAAK,GAC7B+rC,GAAS,GAGjB/4C,KAAKwgD,KAAKupQ,UAAU/pT,KAAKuN,WACzBvN,KAAK+tC,QAAQoV,SAASixR,KAAK,GAAI5nU,GAAOusC,EAAO9jC,KAGrD4yZ,EAAoBxsa,UAAUiva,YAAc,WAExC,IAAK,IADDnja,EAASnH,KAAK+tC,QAAQw7X,sBAAsBvpa,KAAK6gQ,iBAC5C1kQ,EAAI,EAAGA,EAAIgL,EAAO1K,OAAQN,IAC3B6D,KAAKuN,UAAUm/C,eAAiBvlD,EAAOhL,IACvCgL,EAAOshB,OAAOtsB,EAAG,GAGzB,IAAIm3F,GACAq4U,QAASxka,EACTnG,QAAUhB,KAAKuN,UAAUhR,SAAWyD,KAAKuN,UAAUm/C,kBAAgBvxD,EAAY6E,KAAKuN,UAAUhR,OAC9FmwD,aAAc1sD,KAAKuN,UAAUm/C,eAE7B1sD,KAAK4ra,sBAA0B5ra,KAAKuN,UAAUm/C,cAAiB1sD,KAAK4ra,uBAAyB5ra,KAAKuN,UAAUm/C,eAC5G4mC,EAAItyF,QAAUhB,KAAK4ra,qBACnBt4U,EAAIq4U,QAAUr4U,EAAI5mC,kBAAevxD,EACjC6E,KAAK+tC,QAAQioH,aAAasrP,GAAan3F,WAAY72N,GACnDtzF,KAAK4ra,qBAAuB,QAE3B5ra,KAAK4ra,sBAAwB5ra,KAAKuN,UAAUhR,QAAWyD,KAAK4ra,uBAAyB5ra,KAAKuN,UAAUm/C,gBACrG1sD,KAAK4ra,qBAAuB5ra,KAAKuN,UAAUm/C,aAC3C1sD,KAAK+tC,QAAQioH,aAAasrP,GAAauqB,WAAYv4U,IAEnDtzF,KAAKuN,UAAUm/C,cACf1sD,KAAK+tC,QAAQioH,aAAasrP,GAAarsS,UAAW3hB,IAG1Du0U,EAAoBxsa,UAAUgva,aAAe,SAAU5jX,EAAeqlX,GAClE,IAAKA,EAAa,CACd,IAAIC,EAAqB/ra,KAAKopa,wBAAwB7pX,IAClDv/C,KAAKopa,aAAajrX,YAAcG,GAAgBrQ,SAC9CjuC,KAAKopa,wBAAwBlrX,IAAcl+C,KAAKopa,aAAajrX,YAAcC,GAAqBnQ,QACtGQ,GAAczuC,KAAK+tC,QAASg+X,EAAmB/ra,KAAKopa,kBAAejua,GACnE,IAAIwQ,EAAS66C,GAAiBxmD,KAAK+tC,QAAS0Y,EAAezmD,KAAKopa,cAChEppa,KAAK+tC,QAAQW,cAAczsC,QAC3BjC,KAAK+tC,QAAQW,cAAc7iC,QAAUF,EAAOoB,EAC5C/M,KAAK+tC,QAAQW,cAAcziC,QAAUN,EAAOqB,EAC5ChN,KAAK+tC,QAAQW,cAAcwV,W3W1hBvC,SAAiC3jD,EAAMwtC,GACnC,IAAIga,EAAQ,EAiBZ,OAhBIxnD,aAAgB29C,GACZ39C,EAAK49C,YAAcC,GAAqBnQ,QACxC8Z,EAAQxnD,EAAK49C,YAAcC,GAAqBnQ,QAE3C1tC,EAAK49C,YAAcC,GAAqBuI,iBAC7CoB,EAAQha,EAAQoQ,YAAciD,GAAmBnT,SAIjD1tC,EAAK49C,YAAcG,GAAgBrQ,QACnC8Z,EAAQxnD,EAAK49C,YAAcG,GAAgBrQ,QAEtC1tC,EAAK49C,YAAcG,GAAgBqI,iBACxCoB,EAAQha,EAAQoQ,YAAciD,GAAmBnT,SAGlD8Z,E2WygBKikX,CAAiBhsa,KAAKopa,aAAcppa,KAAK+tC,UACzC/tC,KAAK+tC,QAAQW,cAAchtC,KAAK1B,KAAK+tC,QAAQ/sC,WAIzD6ma,EAAoBxsa,UAAU+ua,aAAe,WACzCpqa,KAAK+tC,QAAQW,cAAczsC,SAE/B4la,EAAoBxsa,UAAU6va,cAAgB,SAAUe,GACpD,SAAIA,EAAc7qB,GAAa8qB,MAKnCrE,EAAoBxsa,UAAU+va,eAAiB,SAAUa,GACrD,SAAIA,EAAc7qB,GAAa+qB,UAKnCtE,EAAoBxsa,UAAU8va,gBAAkB,SAAUc,GACtD,SAAIA,EAAc7qB,GAAagrB,QAMnCvE,EAAoBxsa,UAAUgxa,SAAW,SAAUh1V,GAC/Cr3E,KAAK+tC,QAAQu+X,sBAGjBzE,EAAoBxsa,UAAUkxa,YAAc,SAAUl1V,GAClD,GAAIl2B,GAAgBnhD,KAAK+tC,SAAU,CAC/B,IAAIsZ,OAAa,EACbH,EAAUlnD,KAAK+tC,QAAQw7X,sBAAsBvpa,KAAK6gQ,iBAClD9jQ,EAAMiD,KAAK+tC,QAAQy7X,qBAAqBtiX,EAASlnD,KAAK2vD,OAAQ3vD,KAAKs9Z,UACvE,GAAY,OAARvga,GAAgBokD,GAAgBnhD,KAAK+tC,SAGrC,GAFAsZ,EACarnD,KAAK+tC,QAAQ27X,sBAAsB3sa,EAAKiD,KAAK6gQ,iBACtD7gQ,KAAKwgD,MAAQxgD,KAAKwgD,gBAAgB2kX,GAAoB,CACtD,IAAI3D,GACAjla,OAAQQ,GAAOiD,KAAK+tC,QAAS75B,SAAUlU,KAAK6gQ,gBAAiB5hP,MAAOo4D,EAAIwvD,QAE5E7mI,KAAKwgD,KAAKy9W,QAAQj+Z,KAAKuN,UAAWi0Z,GAClCxha,KAAKgoa,aAAc,EACnBhoa,KAAKuN,aACLvN,KAAKwgD,KAAO,KACZ62B,EAAI3xD,qBAEH,CACD,IAAIwlD,EAAQlrE,KAAK+tC,QAAQsvX,eAAemP,eAAezva,EAAIuG,IAC3D,GAAI4nE,IAAUA,EAAMuhW,MAAQvhW,EAAMp0C,WACxB92B,KAAK+tC,QAAQ0T,eAAiBC,GAAc0mX,UAAW,CACzD,IAAI9ka,EAAK,GACe,mBAApBvG,EAAIo8B,MAAMA,QACV71B,EAAKvG,EAAIuG,GAAGpG,MAAM,oBAAoB,IAE1C8C,KAAK+tC,QAAQ2+X,cAAc3va,EAAKuG,IAAO+jD,aAAsB8E,GACxD9E,EAAa,GAAEnqD,MAAMH,EAAIuG,GAAK,KAAK,QAAKnI,KAK7D,IAAIm4F,GACA/2F,OAAQQ,GAAOiD,KAAK+tC,QAAS75B,SAAUlU,KAAK6gQ,gBAAiB5hP,MAAOo4D,EAAIwvD,QAE5E7mI,KAAK+tC,QAAQioH,aAAasrP,GAAairB,YAAaj5U,KAM5Du0U,EAAoBxsa,UAAUsxa,YAAc,SAAUt1V,GAClD,IACIz4C,EAEAguY,EACAC,EACAtsa,EACAwV,EACAC,EACA82Z,EAEAC,EACAC,EAAcxsa,SAASyuB,eAAejvB,KAAK+tC,QAAQ/sC,QAAQsC,GAAK,YAChE2pa,EAAiBzsa,SAASyuB,eAAejvB,KAAK+tC,QAAQ/sC,QAAQsC,GAAK,mBACnEwrB,EAAQk+Y,EAAiB,MACzB3mX,EAAOv3B,EAAK5xB,MAAM,QACtBqD,EAAQP,KAAK+tC,QAAQmd,cAAcR,MAAM,GAAM1qD,KAAK+tC,QAAQmd,cAAcR,MAAM,GAAK1qD,KAAK+tC,QAAQmd,cAAcT,WAAW,KAC9GzqD,KAAKwgD,gBAAgByjX,KAC9B1ja,EAAOP,KAAK+tC,QAAQ2sB,UAAU16D,KAAK+tC,QAAQm/X,YAAYvyW,WAEvDp6D,IAA8B,SAApBA,EAAK44B,MAAMzyB,MAAmBnG,EAAK6vD,YAAY3zD,OAAS,GAA2B,SAApB8D,EAAK44B,MAAMzyB,QACpFmma,EAAc7sa,KAAK+tC,QAAQ8yE,WAAWtgH,EAAKwR,QAAS/R,KAAK+tC,QAAQm/X,YAAY5pa,IAE7Es7B,GADAA,EAAWr+B,EAAKwR,QAAQgkB,OAAO/f,MAAQ62Z,EAAY92Y,OAAO/f,MAAQzV,EAAKwR,QAAQgkB,OAAO/f,MAAQ62Z,EAAY92Y,OAAO/f,OArBtG,GAsBsB4oB,EAtBtB,GAuBXkuY,EAAax5W,GAAgBu5W,EAAYnoa,MAAOoqB,OAAM3zB,OAAWA,EAAWyjC,GAC5EguY,EAAWh2Y,OAAQo2Y,EAAYtoa,MAAc,SAAExH,MAAM,MAAM,IACvDmpD,EAAK5pD,OAAS,GAA+B,KAA1B4pD,EAAKA,EAAK5pD,OAAS,KACtCqwa,EAAW/2Z,OAAS+2Z,EAAW/2Z,OAAS62Z,GAG5C52Z,EA7BW,IA4BXA,EAAQ82Z,EAAW92Z,OA5BR,GA6B6BA,EACxCD,EA5BY,GA4BU+2Z,EAAW/2Z,OA5BrB,GA4B2C+2Z,EAAW/2Z,OAClEg3Z,EAAa/sa,KAAK+tC,QAAQoV,SAAS91C,UACnC4/Z,EAAevoa,MAAM8H,MAAWqga,EAAY92Y,OAAOhD,OAAOhmB,EAAIgga,EAAWj7G,IAAMi7G,EAAWjpX,MAAS9tC,EAAQ,EAAK,IAAO,KACvHi3Z,EAAevoa,MAAMgI,KAAUmga,EAAY92Y,OAAOhD,OAAO/lB,EAAI+/Z,EAAWl7G,IAAMk7G,EAAWjpX,MAAS/tC,EAAS,EAAK,EAAK,KACrHk3Z,EAAevoa,MAAMsR,MAAQA,EAAQ,KACrCi3Z,EAAevoa,MAAMqR,OAASA,EAAS,KACvCi3Z,EAAYtoa,MAAMioD,UAAYA,OAC9BqgX,EAAYtoa,MAAMmoD,SAAWA,OAC7BmgX,EAAYtoa,MAAMsR,MAAQA,EAAQ,KAClCg3Z,EAAYtoa,MAAMqR,OAASA,EAAS,OAM5C8xZ,EAAoBxsa,UAAU8xa,cAAgB,SAAU5sa,EAAMsjI,GAC1D,SAAI7jI,KAAKwgD,gBAAgByjX,IAAmBpgS,KACxC7jI,KAAKwgD,KAAO,KACRjgD,IAAWsgD,GAAkB7gD,KAAK+tC,WAClC/tC,KAAK+tC,QAAQ4W,mBAAgBxpD,EAC7B6E,KAAK+tC,QAAQwsB,0BAAuBp/D,IAEpCo1D,GAAwBvwD,KAAK+tC,QAAQ2c,MAAOnqD,EAAK+C,MAAOitD,GAAwBvwD,KAAK+tC,QAAQ0c,WAAYlqD,EAAK+C,MAO1Huka,EAAoBxsa,UAAU6ta,qBAAuB,SAAU7xV,GAC3D,SAAKA,EAAIlwE,QAAUkwE,EAAIlwE,OAAO7D,KAAOtD,KAAK+tC,QAAQ/sC,QAAQsC,GAAK,aAKnEuka,EAAoBxsa,UAAUgua,kBAAoB,SAAUn1Z,EAAUjU,EAAM1D,GACxE0D,EAAKiU,SAAWA,EAChB,IAAInX,EACAmqD,EACC3qD,GAYD2qD,EAAUlnD,KAAK+tC,QAAQw7X,sBAAsBvpa,KAAK6gQ,gBAAiBtkQ,GACnEQ,EAAMiD,KAAK+tC,QAAQq/X,2BAA2BlmX,EAASlnD,KAAK2vD,OAAQ3vD,KAAKs9Z,SAAUr9Z,EAAKiU,SAAU3X,IAZ9E,SAAhByD,KAAK2vD,QAAqC,uBAAhB3vD,KAAK2vD,QAAmD,eAAhB3vD,KAAK2vD,QACvD,eAAhB3vD,KAAK2vD,QAA2C,sBAAhB3vD,KAAK2vD,QAAkD,sBAAhB3vD,KAAK2vD,QAC5D,uBAAhB3vD,KAAK2vD,QAAmD,WAAhB3vD,KAAK2vD,SAA0D,IAAnC3vD,KAAK2vD,OAAOpxD,QAAQ,UACxFxB,EAAMiD,KAAK+tC,QAAQmd,eAGnBhE,EAAUlnD,KAAK+tC,QAAQw7X,sBAAsBvpa,KAAK6gQ,iBAClD9jQ,EAAMiD,KAAK+tC,QAAQy7X,qBAAqBtiX,EAASlnD,KAAK2vD,OAAQ3vD,KAAKs9Z,WAO3E,IAAIvrZ,EAeJ,OAdIhV,IACAgV,EAAU/R,KAAK+tC,QAAQ27X,sBAAsB3sa,EAAKiD,KAAK6gQ,kBAEtDtkQ,GAKD0D,EAAKkH,OAASpK,EACdkD,EAAKuvC,cAAgBz9B,IALrB9R,EAAK1D,OAASQ,EACdkD,EAAKgvC,cAAgBl9B,GAMzB9R,EAAKysD,aAAe1sD,KAAKuN,UAAUm/C,aACnCzsD,EAAK2yE,aAAe5yE,KAAKg1U,eACzB/0U,EAAKoka,YAAcrka,KAAK+0U,cACjB90U,GAGX4na,EAAoBxsa,UAAUgya,UAAY,WACtCrta,KAAK2vD,OAAS,SACd3vD,KAAKopa,aAAe,KACpBppa,KAAKkqa,UAAY,KACjBlqa,KAAKwgD,KAAOxgD,KAAK+tC,QAAQ67X,QAAQ5pa,KAAK2vD,QACtC3vD,KAAK4oa,gBAGTf,EAAoBxsa,UAAUuua,QAAU,SAAUj6W,GAC9C,OAAQA,GACJ,IAAK,SACD,OAAO,IAAIyuW,GAAWp+Z,KAAKq9Z,gBAAgB,GAC/C,IAAK,OACD,OAAO,IAAIiD,GAAStga,KAAKq9Z,gBAC7B,IAAK,SACD,OAAO,IAAIuE,GAAW5ha,KAAKq9Z,gBAC/B,IAAK,kBACD,OAAO,IAAI4H,GAAWjla,KAAKq9Z,gBAC/B,IAAK,YACD,OAAO,IAAI6H,GAAUlla,KAAKq9Z,gBAC9B,IAAK,kBACL,IAAK,kBACL,IAAK,kBACL,IAAK,kBACL,IAAK,cACL,IAAK,cACL,IAAK,aACL,IAAK,aACD,OAAO,IAAI8E,GAAWnia,KAAKq9Z,eAAgB1tW,GAC/C,IAAK,qBACL,IAAK,qBACL,IAAK,oBACL,IAAK,oBACD,OAAO,IAAIivW,GAAY5+Z,KAAKq9Z,eAAgB1tW,GAChD,IAAK,aACL,IAAK,aACD,OAAO,IAAI01W,GAAiBrla,KAAKq9Z,eAAgB1tW,GACrD,IAAK,OACD,IACIjpD,EAAOg+C,GAAe1kD,KAAK+tC,QAAQ4W,eACvC,GAAa,SAATj+C,GAA6D,SAA1C1G,KAAK+tC,QAAQ4W,cAAcxrB,MAAMzyB,KACpD,OAAO,IAAIu9Z,GAAgBjka,KAAKq9Z,gBAE/B,GAAa,SAAT32Z,GAA+D,YAA5C1G,KAAK+tC,QAAQ4W,cAAcxrB,MAAW,QAC5Dn5B,KAAK+tC,QAAQ4W,cAAcxrB,MAAY,OACzC,OAAO,IAAIgsY,GAAmBnla,KAAKq9Z,gBAElC,GAAa,SAAT32Z,GACK,SAATA,GAA+D,YAA5C1G,KAAK+tC,QAAQ4W,cAAcxrB,MAAW,OACrDn5B,KAAK+tC,QAAQ4W,cAAcxrB,MAAY,OAC5C,OAAO,IAAIyqY,GAAgB5ja,KAAKq9Z,eAAgBr9Z,KAAK+tC,QAAQ4W,eAE5D,GAAa,cAATj+C,EACL,OAAO,IAAIm4Z,GAAqB7+Z,KAAKq9Z,eAAgB,qBAAsBr9Z,KAAK+tC,QAAQ4W,eAE5F,MACJ,IAAK,MACD,OAAO,IAAIy/W,GAAYpka,KAAKq9Z,gBAAgB,GAChD,IAAK,YACD,OAAO,IAAI+G,GAAYpka,KAAKq9Z,gBAAgB,GAChD,IAAK,WACD,OAAO,IAAIiD,GAAStga,KAAKq9Z,eAAgB,QAC7C,IAAK,WACD,OAAO,IAAIwB,GAAqB7+Z,KAAKq9Z,eAAgB,qBAAsBr9Z,KAAK+tC,QAAQ4W,eAEhG,OAAO,MAGXkjX,EAAoBxsa,UAAUu/D,UAAY,SAAUjL,GAChD,OAAOiL,GAAUjL,EAAQ3vD,KAAK+tC,QAAQmd,cAAc5E,cAIxDuhX,EAAoBxsa,UAAUqua,sBAAwB,SAAU3sa,EAAKmX,GACjE,OAAOlU,KAAKkoa,aAAaoF,6BAA6Bvwa,EAAKmX,IAG/D2zZ,EAAoBxsa,UAAUkua,sBAAwB,SAAUr1Z,EAAU3X,GACtE,OAAOyD,KAAKkoa,aAAaqB,sBAAsBr1Z,EAAUlU,KAAK+tC,QAAS/tC,KAAKuN,UAAWhR,IAG3Fsra,EAAoBxsa,UAAUmua,qBAAuB,SAAUtiX,EAASyI,EAAQ2tW,GAC5E,OAAOt9Z,KAAKkoa,aAAasB,qBAAqBxpa,KAAK+tC,QAASmZ,EAASyI,EAAQ2tW,EAAUt9Z,KAAKuN,UAAWvN,KAAK6gQ,kBAGhHgnK,EAAoBxsa,UAAUkya,qBAAuB,SAAUrmX,EAASyI,EAAQ2tW,EAAUppZ,EAAU3X,GAChG,OAAOyD,KAAKkoa,aAAasB,qBAAqBxpa,KAAK+tC,QAASmZ,EAASyI,EAAQ2tW,EAAUt9Z,KAAKuN,UAAW2G,EAAU3X,IAGrHsra,EAAoBxsa,UAAUsua,mBAAqB,SAAU5sa,EAAKgV,EAASmC,EAAU/M,GACjF,OAAOyxD,GAAmB77D,EAAKgV,EAAS/R,KAAK6gQ,gBAAiB7gQ,KAAK+tC,QAAS/tC,KAAKg1U,eAAgBh1U,KAAK+0U,cAAe5tU,IAElH0ga,KAIPM,GAA8B,WAC9B,SAASA,KAkRT,OA/QAA,EAAa9sa,UAAUkua,sBAAwB,SAAU/9X,EAAIuC,EAASxgC,EAAWhR,EAAQixa,GAErF,IAAIC,KACAlxa,GAAUA,aAAkBkiD,IACxBliD,EAAOmuD,MAAMjuD,OAASF,EAAOkuD,WAAWhuD,SAAW,IACnDF,EAAUA,EAAOmuD,MAAM,IAAMnuD,EAAOkuD,WAAW,IACpCrwC,UAAuC,IAA3B7d,EAAO6d,SAAS3d,SACnC8Q,EAAUm/C,aAAenwD,GAWrC,IAAK,IAPDqe,EACAmb,EACA11B,EACAkrC,EAGAmiY,EADAC,KAEKvva,EAAK,EAAGwva,EAHF7/X,EAAQ8/X,cAAcC,YAAY,IAAIv4Y,GAAKiW,EAAGz+B,EAAI,GAAIy+B,EAAGx+B,EAAI,GAAI,IAAK,MAG7C5O,EAAKwva,EAAWnxa,OAAQ2B,IAAM,CAClE,IACI+0B,EAAQqY,EAEZ,GADAzV,GAFIh5B,EAAM6wa,EAAWxva,IAER2T,QAAQgrC,aAChBhgD,IAAQR,GAAUwxC,EAAQwsB,gCAAgCrc,KAC1DnhD,aAAemhD,GAAanhD,IAAQgxC,EAAQwsB,qBAA+Bx9D,EAAIgV,QAAQ+kB,QAAS,CAEjG,IADIo0C,EAAQn9B,EAAQsvX,eAAemP,eAAezva,EAAIuG,OACxC4nE,EAAMuhW,MAAQvhW,EAAMp0C,QAAS,CAEvC,GADA42Y,EAAcC,EAAcziW,EAAMlH,QAAU2pW,EAAcziW,EAAMlH,YAC5DjnE,EAAIupD,YAAa,CACjB1rC,EAAY7d,EAAIgV,QAEhBo6B,GADAZ,EAASL,OACctwB,EAAU0rC,YAAc1rC,EAAU2rC,iBAAkBxpD,EAAI8O,QAAS9O,EAAIkP,SAC5FknB,EAAQmY,GAAuBC,EAAQC,GACvCzV,EAASnb,EAAUsuB,QACnB,IAAK,IAAIrmC,EAAK,EAAGoB,EAAK2W,EAAUR,SAAUvX,EAAKoB,EAAGxH,OAAQoG,IACtDxC,EAAQ4D,EAAGpB,GACXkzB,EAAOknB,UAAU58C,EAAM6oC,SAG/B,KAAK3sC,IAAwC,IAA7B29D,GAAWnsB,EAAShxC,KAC5B2hD,GAAuB3hD,KAClBA,aAAemhD,GAAa+G,GAAqBloD,EAAKyuC,GAAMzV,EAAOgb,cAAc5d,IAAQ,CAC1F,IAAIqnC,EAAWz9D,aAAemhD,GAAanhD,EAAIyoD,YAAc,EAAI,EAEvDxlD,KAAK0pa,sBAAsB3sa,EAAKyuC,EAAIgvB,KAEtCz9D,aAAemhD,IAAanQ,EAAQ0/W,aACpC1wZ,EAAMgxC,EAAQ0/W,WAAWsgB,uBAAuBhxa,EAAKgxC,IAEzDgjB,GAAah0D,EAAK,SAAU2wa,OAQxD,IAAK,IAAIjja,EAAK,EAAGqgO,EAAK/8L,EAAQuc,OAAQ7/C,EAAKqgO,EAAGruO,OAAQgO,IAGlD,IAAK,IAFDygE,EAAQ4/J,EAAGrgO,GAENsgO,EAAK,EAAGijM,EADjBP,EAAeA,EAAajzZ,OAAOmzZ,EAAcziW,EAAMlH,aACP+mK,EAAKijM,EAAevxa,OAAQsuO,IAAM,CAC9E,IAAIhuO,EAEJ,GAAuB,UAFnBA,EAAMixa,EAAejjM,IAEjB5xM,MAAMzyB,MAAmB3J,EAAIowZ,cAAgBp/W,EAAoB,aAAEyS,gBAAgB8/W,KACtFvyX,EAAoB,aAAEyS,gBAAgB8/W,IAAajgX,GAAatjD,IAAO,EACpEkV,EAAQw7Z,EAAalva,QAAQwvC,EAAQ2sB,UAAU39D,EAAIowZ,cAC1C,GACTsgB,EAAahlZ,OAAOxW,EAAO,IAK3C,IAAK,IAAI9V,EAAI,EAAGA,EAAIsxa,EAAahxa,OAAQN,IAAK,CAC1C,IAAIs3F,EAAY1lD,EAAQ2sB,UAAU+yW,EAAatxa,GAAGw+D,UAClD,GAAI84B,EAEA,IAAK,IADDw6U,EAAcjua,KAAK0pa,sBAAsBj2U,EAAWjoD,GAC/C/nB,EAAI,EAAGA,EAAIgwE,EAAUnjC,MAAM7zD,OAAQgnB,IACxC,GAAIwqZ,EAAY3qa,GAAGqM,MAAM,IAAM8jF,EAAUnjC,MAAM7sC,GAAGngB,GAAK,KAAM,CACzD,IAAIitC,EAAOkjD,EAAUnjC,MAAM7sC,GAC3B,GAAIs+B,GAAQxR,IAAkBqR,GAAQrR,GAClC,OAAOk9X,EAKvB,KAAOh6U,GAAW,CACd,IAAIxhF,EACJ,IAAe,KADXA,EAAQw7Z,EAAalva,QAAQk1F,IAK7B,MAHAg6U,EAAahlZ,OAAOxW,EAAO,GAK/BwhF,EAAY1lD,EAAQ2sB,UAAU+4B,EAAU94B,WAGhD,OAAO8yW,GAGXtF,EAAa9sa,UAAUs8C,SAAW,SAAU81X,EAAc1/X,EAAS4hB,GAC/D,IACIpvD,EADAw3C,EAAYhK,EAAQmd,cAAcT,WAAW,GASjD,QAPAlqD,EAAkB,uBAAXovD,EAAkC5hB,EAAQ2sB,UAAU3iB,EAAU2zW,UACjEnrZ,EAAOwtC,EAAQ2sB,UAAU3iB,EAAUxI,aACzBhvC,EAAK4sZ,WAAcsgB,EAAatgB,YAAa5sZ,EAAK4sZ,YAAcsgB,EAAatgB,WACnF5sZ,EAAK4sZ,YAAcsgB,EAAatgB,YAChCsgB,EAAe,MAGhBA,GAIXtF,EAAa9sa,UAAUmua,qBAAuB,SAAUz7X,EAASmZ,EAASyI,EAAQ2tW,EAAUr9C,EAAU/rW,EAAU3X,GAI5G,IACIkxa,EAAe,KACnB,GAAuB,IAAnBvmX,EAAQzqD,OAMR,GALIF,GAAUA,aAAkBkiD,IACxBliD,EAAOmuD,MAAMjuD,OAASF,EAAOkuD,WAAWhuD,SAAW,IACnDF,EAAUA,EAAOmuD,MAAM,IAAMnuD,EAAOkuD,WAAW,IAGvC,uBAAXkF,GAAmCpzD,GAAqB,aAAXozD,IAC5C5O,GAAYhT,IAAY8S,GAAkB9S,KAAakjX,GAAcljX,EAAQ4W,iBAAmBzG,IAElG,IAAK,IADDnG,EAAYhK,EAAQmd,cAAcT,WAAW,GACxCtuD,EAAI+qD,EAAQzqD,OAAS,EAAGN,GAAK,EAAGA,IACrC,GAAI+qD,EAAQ/qD,aAAcojD,IAAQE,GAAcyH,EAAQ/qD,IAMpD,OALAsxa,EAAevmX,EAAQ/qD,GACnB47C,IACA01X,EAAezta,KAAK23C,SAAS81X,EAAc1/X,EAAS4hB,IAExDswT,EAASvzT,aAAe+gX,EACjBA,OAId,GAAe,uBAAX99W,GAAmCpzD,GACxC,IAASJ,EAAI+qD,EAAQzqD,OAAS,EAAGN,GAAK,EAAGA,IACrC,GAAI+qD,EAAQ/qD,aAAcojD,IAAQD,GAAa4H,EAAQ/qD,IAInD,OAHAsxa,EAAevmX,EAAQ/qD,GACvBsxa,EAAezta,KAAK23C,SAAS81X,EAAc1/X,EAAS4hB,GACpDswT,EAASvzT,aAAe+gX,EACjBA,MAId,CAAA,GAAIlxa,IAAsB,SAAXozD,GAAsB5hB,EAAoB,aAAEyS,gBAAgB8/W,IAAY,CAEnF,IADDruZ,EAAQ,EACZ,IAAS9V,EAAI,EAAGA,EAAI+qD,EAAQzqD,OAAQN,IAAK,CACrC,IAAIk9B,EAAO6tB,EAAQ/qD,GACfI,IAAW88B,IAASA,aAAgB6kB,KACnChqC,GAAYmlB,EAAKtnB,QAAQgkB,OAAOgb,cAAc78B,KAC3CmsC,GAAahnB,KACRo0Y,GAKDA,EAAex7Z,GAASonB,EAAK2qC,OAASypW,EAAep0Y,EACrDpnB,EAAQ5F,KAAKC,IAAI2F,EAAOonB,EAAK2qC,SAJ7B/xD,GADAw7Z,EAAep0Y,GACM2qC,QAoBrC,OAXIypW,GAA4C,SAA5BA,EAAat0Y,MAAMzyB,OAE/B+ma,EADA1/X,EAAQmd,cAAcR,MAAMjuD,OAAS,GAAmD,SAA9CsxC,EAAQmd,cAAcR,MAAM,GAAGvxB,MAAMzyB,KAChE+ma,EAGA,MAGnBA,IACAxtD,EAASvzT,aAAe+gX,GAErBA,EAEN,GAAe,WAAX99W,GAAuB5hB,EAAoB,aAAEyS,KAAM,CACxD,IAASrkD,EAAI+qD,EAAQzqD,OAAS,EAAGN,GAAK,EAAGA,IACrC,GAAI+qD,EAAQ/qD,aAAc+hD,IAClBgJ,EAAQ/qD,EAAI,aAAcojD,IAAQ2H,EAAQ/qD,EAAI,GAAGm0D,MAAO,CAExD,IADI29W,EAAcjua,KAAKkua,kBAAkBhnX,EAAQ/qD,EAAI,GAAG4V,QAASmC,OAAU/Y,MACtD8ya,EAAY3qa,GAAGqM,MAAM,yBAA2Bs+Z,EAAY3qa,GAAGqM,MAAM,wBACtF,OAAOu3C,EAAQ/qD,EAAI,GAEvB,IAAK,IAAIsnB,EAAI,EAAGA,EAAIyjC,EAAQ/qD,EAAI,GAAGm0D,MAAM7zD,OAAQgnB,IAC7C,GAAIwqZ,GAAeA,EAAY3qa,GAAGqM,MAAM,IAAMu3C,EAAQ/qD,EAAI,GAAGm0D,MAAM7sC,GAAGngB,GAAK,MACnEs+C,GAAQsF,EAAQ/qD,EAAI,GAAGm0D,MAAM7sC,IAC7B,OAAOyjC,EAAQ/qD,EAAI,GAS3C,GAFAsxa,EAAevmX,EAAQA,EAAQzqD,OAAS,GACxCwjX,EAASvzT,aAAe+gX,EACpBA,EAAa9yW,SAGb,IAFA,IAAI59D,EAAM0wa,EACN/0R,EAAWx+E,GAAWnsB,EAAShxC,GAC5BA,KACCm9D,GAAWnsB,EAAShxC,IAAS27I,IAGjC+0R,EAAe1wa,EACfA,EAAMgxC,EAAQ2sB,UAAU39D,EAAI49D,eAInC,GAAe,QAAXhL,GAA+B,oBAAXA,GACzB,IAASxzD,EAAI+qD,EAAQzqD,OAAS,EAAGN,GAAK,EAAGA,IACrC,GAAI+qD,EAAQ/qD,aAAcojD,GAAM,CAC5B,IAAI0uX,EAAcjua,KAAKkua,kBAAkBhnX,EAAQ/qD,GAAG4V,QAASmC,OAAU/Y,GACvE,GAAgB,oBAAXw0D,GAA2C,QAAXA,GAAuBs+W,IAAgBA,EAAY3qa,GAAGqM,MAAM,yBAA2Bs+Z,EAAY3qa,GAAGqM,MAAM,wBAC7I,OAAOu3C,EAAQ/qD,SAM3Bsxa,EAAevmX,EAAQA,EAAQzqD,OAAS,GACpCwjX,GAAYwtD,IACZxtD,EAASvzT,aAAe+gX,GAIpC,OAAOA,GAIXtF,EAAa9sa,UAAUiya,6BAA+B,SAAUvwa,EAAKmX,GAEjE,OAAInX,aAAe0hD,GACU,IAArB1hD,EAAI2tD,MAAMjuD,QAAkBM,EAAI0tD,YAAe1tD,EAAI0tD,WAAWhuD,OAGvDM,EAAI2tD,QAAS3tD,EAAI2tD,MAAMjuD,QAAqC,IAA1BM,EAAI0tD,WAAWhuD,OAOzD,KANQuD,KAAK0pa,sBAAsB3sa,EAAI0tD,WAAW,GAAIv2C,GAH9ClU,KAAK0pa,sBAAsB3sa,EAAI2tD,MAAM,GAAIx2C,GAO7ClU,KAAK0pa,sBAAsB3sa,EAAKmX,IAI/Ci0Z,EAAa9sa,UAAUqua,sBAAwB,SAAU3sa,EAAKmX,EAAUsmD,GACpE,OAAOx6D,KAAKkua,kBAAkBnxa,EAAIgV,QAASmC,EAAUsmD,IAGzD2tW,EAAa9sa,UAAU6ya,kBAAoB,SAAUtzZ,EAAW1G,EAAUsmD,GACtE,IAAK,IAAIr+D,EAAIye,EAAUR,SAAS3d,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACrD,IAAI6E,EAAU4Z,EAAUR,SAASje,GACjC,GAAI6E,GAAWA,EAAQ+7C,YAAYhM,cAAc78B,GAAW,CACxD,GAAIlT,aAAmB4vD,GAAW,CAC9B,IAAIzpD,EAASnH,KAAKkua,kBAAkBlta,EAASkT,GAC7C,GAAI/M,EACA,OAAOA,EAGf,GAAInG,EAAQ+0B,OAAOgb,cAAc78B,GAC7B,OAAOlT,GAInB,OAAI4Z,EAAUmb,OAAOgb,cAAc78B,EAAUsmD,IAAqC,SAAzB5/C,EAAUlW,MAAM05B,KAC9DxjB,EAEJ,MAEJutZ,KCrtCPt8U,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAM5D+wY,GAAuB,SAAUzhV,GAGjC,SAASyhV,EAAM7ta,EAAQ+Q,EAAU5K,EAAchI,GAC3C,IAAIsB,EAAQ2sF,EAAOprF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAM1E,OAJAD,EAAMqua,cAAgB,EAEtBrua,EAAMsua,eACNtua,EAAMmnD,WACCnnD,EAoBX,OA7BA8rF,GAAUsiV,EAAOzhV,GAWjBN,IACIllF,EAAS,KACVina,EAAM9ya,UAAW,UAAM,GAC1B+wF,IACIllF,GAAS,IACVina,EAAM9ya,UAAW,eAAW,GAC/B+wF,IACIllF,GAAS,IACVina,EAAM9ya,UAAW,YAAQ,GAC5B+wF,IACIllF,KACDina,EAAM9ya,UAAW,eAAW,GAC/B+wF,IACIllF,KACDina,EAAM9ya,UAAW,eAAW,GAC/B+wF,IACIllF,GAAU,IACXina,EAAM9ya,UAAW,cAAU,GACvB8ya,GACT3tW,ICvBE8tW,GAAgC,WAChC,SAASA,EAAevgY,GACpB/tC,KAAKuua,iBACLvua,KAAKwua,mBACLxua,KAAKyua,gBACLzua,KAAK09Z,cACL19Z,KAAK0ua,eACL1ua,KAAK+tC,QAAUA,EAwkFnB,OAtkFAzvC,OAAOuJ,eAAeyma,EAAejza,UAAW,kBAC5CqM,IAAK,WACD,OAAO1H,KAAK+tC,QAAQg1X,gBAExBp7Z,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyma,EAAejza,UAAW,uBAC5CqM,IAAK,WACD,OAAO1H,KAAK+tC,QAAQ4gY,qBAExBhna,YAAY,EACZC,cAAc,IAGlB0ma,EAAejza,UAAU2ia,iBAAmB,SAAUZ,GAClDp9Z,KAAK+nD,OAAU/mD,QAAShB,KAAK+tC,QAAQmd,cAAe0jX,OAAQ,MACxDxR,GACAp9Z,KAAK+tC,QAAQ8a,uBAAsB,GAEvC8L,GAAgB30D,KAAK+tC,QAAQ/sC,QAAQsC,IAAIoB,MAAM+oE,cAAgB,QAGnE6gW,EAAejza,UAAU6ia,eAAiB,SAAUd,GAChDp9Z,KAAK+nD,MAAQ,KACTq1W,GACAp9Z,KAAK+tC,QAAQ8a,uBAAsB,GAEvC8L,GAAgB30D,KAAK+tC,QAAQ/sC,QAAQsC,IAAIoB,MAAM+oE,cAAgB,OAKnE6gW,EAAejza,UAAUy1B,YAAc,SAAUvwB,EAAM2T,EAAU0mB,EAASi0Y,EAAUpR,GAChF,IAAI19Z,EAAQC,KACRy9Z,IACAz9Z,KAAK+tC,QAAQW,cAAcx6B,SAAW,eACtClU,KAAK+tC,QAAQW,cAAcE,WAAcltC,MAAQ7B,MAAO,EAAGqL,SAAU,IACrElL,KAAK+tC,QAAQ9c,QAAQ+1B,aAA4B,gBAAb6nX,EAA6B,QAAU,SAC3E7ua,KAAK+tC,QAAQW,cAAc2sF,UAAY,EACvCr7H,KAAK+tC,QAAQW,cAAcmtF,WAAa,GAE5C77H,KAAK+tC,QAAQW,cAAc9T,QAAUA,EACrC,IAAImsB,EAAgBP,GAAiBxmD,KAAK+tC,SAAWhhC,EAAGmH,EAASnH,EAAGC,EAAGkH,EAASlH,GAAKzM,GACrFP,KAAK+tC,QAAQW,cAAc7iC,QAAUk7C,EAAch6C,GAAkB,gBAAb8ha,EAA6B,GAAK,GAC1F7ua,KAAK+tC,QAAQW,cAAcziC,QAAU86C,EAAc/5C,EAAI,GACvDhN,KAAK+tC,QAAQW,cAAcwV,WACvBu5W,GACAt9Z,WAAW,WACPJ,EAAMguC,QAAQW,cAAchtC,KAAK3B,EAAMguC,QAAQ/sC,UAChD,IAMXsta,EAAejza,UAAU2xI,aAAe,WACpChtI,KAAK+tC,QAAQW,cAAczsC,SAK/Bqsa,EAAejza,UAAUgla,wBAA0B,WAC/C,SAAIrga,KAAK+tC,QAAQmd,cAAc/M,YAAc0R,GAAoBi/W,UAUrER,EAAejza,UAAU4ja,eAAiB,WACtCj/Z,KAAK+tC,QAAQkxX,kBAKjBqP,EAAejza,UAAU26J,aAAe,SAAU15J,EAAO2D,GACrD,GAAI3D,IAAUglZ,GAAazsS,MAAQv4G,IAAUglZ,GAAa9sR,gBACtDl4H,IAAUglZ,GAAaytB,iBAAkB,CACzC,GAAI/ua,KAAK+tC,QAAQgrB,cACb,OAKJ,GAHIz8D,IAAUglZ,GAAazsS,OACvB50G,EAAK1D,OAASyD,KAAK+tC,SAEnB/tC,KAAK+tC,QAAQwsB,qBACb,OAGRv6D,KAAK+tC,QAAQioH,aAAa15J,EAAO2D,IAKrCqua,EAAejza,UAAU+la,gBAAkB,SAAUnha,EAAM4gQ,GACvD,GAAI7gQ,KAAK+tC,QAAQgrB,cAAe,CAC5B,IAAIi2W,GACAhua,QAASf,EAAK1D,OAAQ4K,OAAQlH,EAAKkH,OAAQs/C,cAAeo6M,EAAiB9yN,QAAS/tC,KAAK+tC,SAE7F/tC,KAAKg2J,aAAasrP,GAAa2tB,SAAUD,KAMjDV,EAAejza,UAAU8ka,WAAa,SAAUpja,EAAK26C,GACjD,IAGIK,EAHA+wC,KACAD,KAUJ,GAPI9rF,aAAe0hD,GAEf1G,EADgBh7C,EACU0tD,WAAW,GAEhC1tD,aAAemhD,IAAal+C,KAAK+tC,QAAQwsB,uBAC9CxiB,EAAY/3C,KAAK+tC,QAAQwsB,sBAEzBx9D,GAAOg7C,IAAcshB,GAAoBr5D,KAAK+tC,UAAY/tC,KAAK+tC,QAAQwsB,sBACvE,IAAI7iB,GAA0B,uBAAbA,GAAkD,uBAAbA,GAejD,GAAkB,eAAbA,GAA0C,eAAbA,IAA+BK,EAAUxI,UAAYwI,EAAU2zW,UAAW,CAC7G5iU,GACIv5C,SAAUwI,EAAUxI,SAAU+qB,aAAcviB,EAAUuiB,aACtDoxV,SAAU3zW,EAAU2zW,SAAUC,aAAc5zW,EAAU4zW,cAE1D5zW,EAAUxI,SAAW,GACrBwI,EAAUuiB,aAAe,GACzBviB,EAAU2zW,SAAW,GACrB3zW,EAAU4zW,aAAe,GAKzB,IAAIr4T,GACAv7C,UAAWA,EAAW/uC,SAAU8/E,EAChCxhF,SANJuhF,GACIt5C,SAAUwI,EAAUxI,SAAU+qB,aAAcviB,EAAUuiB,aACtDoxV,SAAU3zW,EAAU2zW,SAAUC,aAAc5zW,EAAU4zW,cAIhCtzX,QAAQ,EAAO0vB,MAAO,WAAYmnX,aAAcx3X,GAE1E13C,KAAKg2J,aAAasrP,GAAaytB,iBAAkBz7U,GAC7CA,EAAIj7D,QACJ0f,EAAUxI,SAAWu5C,EAAWv5C,SAChCwI,EAAUuiB,aAAewuB,EAAWxuB,aACpCviB,EAAU2zW,SAAW5iU,EAAW4iU,SAChC3zW,EAAU4zW,aAAe7iU,EAAW6iU,eAGpC3rZ,KAAK+tC,QAAQohY,wBAAwBp3X,EAAW+wC,EAAYD,GAC5D7oF,KAAK+tC,QAAQqhY,oBAAoBr3X,GACjCu7C,GACIv7C,UAAWA,EAAW/uC,SAAU8/E,EAChCxhF,SAAUuhF,EAAYxwD,QAAQ,EAAO0vB,MAAO,UAAWmnX,aAAcx3X,GAEzE13C,KAAKg2J,aAAasrP,GAAaytB,iBAAkBz7U,SA9CiC,CACtF,IAAI+7U,EAAyB,uBAAb33X,EAAoC,WAAa,WAC7D43X,EAAyB,uBAAb53X,EAAoC,eAAiB,eACjEK,EAAUs3X,KACVvmV,EAAWumV,GAAat3X,EAAUs3X,GAClCt3X,EAAUs3X,GAAa,GACvBxmV,EAAWwmV,GAAat3X,EAAUs3X,IAC9Bt3X,EAAUuiB,cAAgBviB,EAAU4zW,gBACpC7iU,EAAWwmV,GAAav3X,EAAUu3X,GAClCv3X,EAAUu3X,GAAa,GACvBzmV,EAAWymV,GAAav3X,EAAUu3X,IAEtCtva,KAAKuva,sBAAsBx3X,EAAW+wC,EAAYD,EAAYnxC,MAuC9E42X,EAAejza,UAAUk0a,sBAAwB,SAAUx3X,EAAW+wC,EAAYD,EAAYnxC,GAC1F,IAAI23X,EAAyB,uBAAb33X,EAAoC,WAAa,WAC7D43X,EAAyB,uBAAb53X,EAAoC,eAAiB,eACjE47C,GACAv7C,UAAWA,EAAW/uC,UAAYuoD,OAAQu3B,EAAWumV,GAAYG,OAAQ1mV,EAAWwmV,IACpFhoa,UAAYiqD,OAAQs3B,EAAWwmV,GAAYG,OAAQ3mV,EAAWymV,IAC9Dj3Y,QAAQ,EAAO0vB,MAAO,WAAYmnX,aAAcx3X,GAEpD13C,KAAKg2J,aAAasrP,GAAaytB,iBAAkBz7U,GAC7CA,EAAIj7D,QACJ0f,EAAUs3X,GAAavmV,EAAWumV,GAClCt3X,EAAUu3X,GAAaxmV,EAAWwmV,GAClCzmV,EAAaC,IAGb9oF,KAAK+tC,QAAQohY,wBAAwBp3X,EAAW+wC,EAAYD,GAC5D7oF,KAAK+tC,QAAQqhY,oBAAoBr3X,GACjCu7C,GACIv7C,UAAWA,EAAW/uC,UAAYuoD,OAAQu3B,EAAWumV,GAAYG,OAAQ1mV,EAAWwmV,IACpFhoa,UAAYiqD,OAAQs3B,EAAWwmV,GAAYG,OAAQ3mV,EAAWymV,IAC9Dj3Y,QAAQ,EAAO0vB,MAAO,UAAWmnX,aAAcx3X,GAEnD13C,KAAKg2J,aAAasrP,GAAaytB,iBAAkBz7U,KAMzDg7U,EAAejza,UAAUqka,WAAa,SAAU1+Z,EAASyua,EAAYlza,GACjE,GACIkza,aAAsBlwX,GAAM,CAC5B,GAAIv+C,GAAWA,EAAQsC,KAAOmsa,EAAWnsa,GAAK,WAC1C,OAAOmsa,EAEX,GAAIlza,GAAoC,SAA1Bkza,EAAWt2Y,MAAMzyB,MAA8C,aAA3B+oa,EAAWt2Y,MAAMA,OACb,gBAA9Cs2Y,EAAWt2Y,MAAMy0X,SAASD,WAAWjnZ,KAAwB,CAC7D,IAAIgpa,EAAcD,EAAWt2Y,MAAMy0X,SAASD,WAAW+hB,YACvD,GAAIA,EAAY1jL,QAAQl1N,SAA8D,IAAnD91B,EAAQsC,GAAG/E,QAAQkxa,EAAWnsa,GAAK,YAClE,OAAOosa,EAAY1jL,QAEvB,GAAI0jL,EAAYr3Y,OAAOvB,SAA6D,IAAlD91B,EAAQsC,GAAG/E,QAAQkxa,EAAWnsa,GAAK,WACjE,OAAOosa,EAAYr3Y,OAEvB,GAAIq3Y,EAAYC,QAAQ74Y,SAA8D,IAAnD91B,EAAQsC,GAAG/E,QAAQkxa,EAAWnsa,GAAK,YAClE,OAAOosa,EAAYC,QAI/B,GAAI3ua,aAAmB64C,GACnB,IAAK,IAAI19C,EAAI,EAAGA,EAAIsza,EAAWn/W,MAAM7zD,OAAQN,IAAK,CAC9C,IAAIo0C,EAAOk/X,EAAWn/W,MAAMn0D,GAC5B,GAAI6E,EAAQsC,KAAOmsa,EAAWnsa,GAAK,IAAMitC,EAAKjtC,GAC1C,OAAOitC,GAKvB,OAAOk/X,GAKXnB,EAAejza,UAAU6ka,cAAgB,SAAUxoX,EAAUz3C,EAAM8/Z,EAAcC,GAC7E,IACII,EACAnga,EAAK1D,kBAAkBkiD,GAEvB2hX,EADWnga,EAAK1D,OACGkuD,WAAW,GAEzBxqD,EAAK1D,kBAAkB2hD,IAAal+C,KAAK+tC,QAAQwsB,uBACtD6lW,EAAUpga,KAAK+tC,QAAQwsB,sBAERv6D,KAAK0/Z,WAAWz/Z,EAAKuvC,cAAevvC,EAAKkH,OAAqB,uBAAbuwC,GAApE,IAEIk4X,EAAuB,uBAAbl4X,EAAoC,eAAiB,eACnE,OAAI0oX,EAFuB,uBAAb1oX,EAAoC,WAAa,cAEtCsoX,GAAgBI,EAAQwP,KAAa7P,GAQlEuO,EAAejza,UAAU+ka,QAAU,SAAU1oX,EAAUz3C,GACnD,IAEI4va,EACAC,EAEA/3X,EALA8wC,KACAC,KAKA7oF,EAAK1D,kBAAkBkiD,GAEvB1G,EADgB93C,EAAK1D,OACKkuD,WAAW,GAEhCxqD,EAAK1D,kBAAkB2hD,IAAal+C,KAAK+tC,QAAQwsB,uBACtDxiB,EAAY/3C,KAAK+tC,QAAQwsB,sBAE7B,IAAIpzD,EAASnH,KAAK0/Z,WAAWz/Z,EAAKuvC,cAAevvC,EAAKkH,OAAqB,uBAAbuwC,GAC1D23X,EAAyB,uBAAb33X,EAAoC,WAAa,WAC7D43X,EAAyB,uBAAb53X,EAAoC,eAAiB,eACrE,GAAIvwC,aAAkBo4C,GAClBupC,EAAWumV,GAAat3X,EAAUs3X,GAClCt3X,EAAUs3X,GAAaloa,EAAO7D,GAC9BulF,EAAWwmV,GAAat3X,EAAUs3X,GAClCvmV,EAAWwmV,GAAav3X,EAAUu3X,GAClCtva,KAAKuva,sBAAsBx3X,EAAW+wC,EAAYD,EAAYnxC,OAE7D,CACDm4X,EAAY93X,EAAUs3X,GACtBS,EAAY/3X,EAAUu3X,GACtBv3X,EAAUu3X,GAAanoa,EAAO7D,GAC9By0C,EAAUs3X,GAAapva,EAAKkH,OAAO7D,GACnCulF,EAAWwmV,GAAat3X,EAAUs3X,GAClCxmV,EAAWymV,GAAav3X,EAAUu3X,GAClC,IAAIh8U,GACAv7C,UAAWA,EAAW/uC,UAAYuoD,OAAQs+W,EAAWL,OAAQM,GAC7Dxoa,UAAYiqD,OAAQs3B,EAAWwmV,GAAYG,OAAQ3mV,EAAWymV,IAC9Dj3Y,QAAQ,EAAO0vB,MAAO,WAAYmnX,aAAcx3X,GAEpD13C,KAAKg2J,aAAasrP,GAAaytB,iBAAkBz7U,GAC7CA,EAAIj7D,QACJ0f,EAAUs3X,GAAaQ,EACvB93X,EAAUu3X,GAAaQ,EACvBjnV,EAAWwmV,GAAaQ,EACxBhnV,EAAWymV,GAAaQ,IAGxB9va,KAAK+tC,QAAQohY,wBAAwBp3X,KAAe8wC,GACpD7oF,KAAK+tC,QAAQqhY,oBAAoBr3X,GACjCu7C,GACIv7C,UAAWA,EAAW/uC,UAAYuoD,OAAQs+W,EAAWL,OAAQM,GAC7Dxoa,UAAYiqD,OAAQs3B,EAAWwmV,GAAYG,OAAQ3mV,EAAWymV,IAAcj3Y,QAAQ,EACpF0vB,MAAO,UAAWmnX,aAAcx3X,GAEpC13C,KAAKg2J,aAAasrP,GAAaytB,iBAAkBz7U,IAGzDtzF,KAAKq3Z,kBAAkBp3Z,OAAM9E,EAAwB,uBAAbu8C,IAG5C42X,EAAejza,UAAU00a,IAAM,WAC3B/va,KACKuua,cAAcyB,WAAa,EAC5Bhwa,KAAK+tC,QAAQkiY,gBACbjwa,KAAK+tC,QAAQmiY,YAAYpP,mBAE7B9ga,KAAKuua,cAAc4B,WAAanwa,KAAKowa,cACjCpwa,KAAK+tC,QAAQkiY,gBACbjwa,KAAK+tC,QAAQmiY,YAAY/O,iBAEH,QAAtBnha,KAAK+tC,QAAQxP,MACbv+B,KAAK+tC,QAAQsiY,uBAIrB/B,EAAejza,UAAU6gS,SAAW,SAAUhxN,EAAOhkB,GACjDgkB,EAAM5nE,GAAK4nE,EAAM5nE,IAAMqzD,KACvBuU,EAAMlH,OAAShkE,KAAK+tC,QAAQuc,OAAO7tD,QACnCyuE,EAAQ,IAAIijW,GAAMnua,KAAK+tC,QAAS,SAAUm9B,GAAO,IAC3CkjW,cAAgB,EACtBljW,EAAMmjW,eACNrua,KAAK+tC,QAAQuc,OAAO9lD,KAAK0mE,GACzBlrE,KAAK+tC,QAAQuiY,iBAAiBplW,EAAMlH,QAAUkH,EAAM5nE,GACpDtD,KAAK+tC,QAAQwiY,YAAcrlW,EACdA,EAAMhkB,QACnB,GAAIA,EACA,IAAK,IAAI/qD,EAAI,EAAGA,EAAI+qD,EAAQzqD,OAAQN,IAChC6D,KAAK+tC,QAAQ3pC,IAAI8iD,EAAQ/qD,KAKrCmya,EAAejza,UAAUmxa,eAAiB,SAAUgE,GAEhD,IAAK,IADDlmX,EAAStqD,KAAK+tC,QAAQuc,OACjBnuD,EAAI,EAAGA,EAAImuD,EAAO7tD,OAAQN,IAAK,CAEpC,GADemuD,EAAOnuD,GAAG+qD,QAAQ3oD,QAAQiya,IACzB,EACZ,OAAOlmX,EAAOnuD,GAGtB,OAAO6D,KAAK+tC,QAAQwiY,aAGxBjC,EAAejza,UAAU6na,SAAW,SAAUloI,GAE1C,IAAK,IADD1wO,EAAStqD,KAAK+tC,QAAQuc,OACjBnuD,EAAI,EAAGA,EAAImuD,EAAO7tD,OAAQN,IAC/B,GAAImuD,EAAOnuD,GAAGmH,KAAO03R,EACjB,OAAO1wO,EAAOnuD,IAM1Bmya,EAAejza,UAAUo1a,YAAc,SAAUC,GAC7C,IAAIpmX,EAAStqD,KAAKkja,SAASwN,GAC3B,GAAIpmX,EAAQ,CAGR,IAAK,IAFDr4C,EAAQjS,KAAK+tC,QAAQuc,OAAO/rD,QAAQ+rD,GACpCqmX,EAAcrmX,EAAOpD,QAChB/qD,EAAIw0a,EAAYl0a,OAAS,EAAGN,GAAK,EAAGA,IACzC6D,KAAK+tC,QAAQ0wX,SAASz+Z,KAAK+tC,QAAQ2sB,UAAUi2W,EAAYx0a,KACzD6D,KAAK+tC,QAAQxpC,OAAOvE,KAAK+tC,QAAQ2sB,UAAUi2W,EAAYx0a,KACrC,kBAAdmuD,EAAOhnD,IACHtD,KAAK+tC,QAAQwiY,YAAYjta,KAAOota,IAChC1wa,KAAK+tC,QAAQwiY,YAAcvwa,KAAK+tC,QAAQuc,OAAOtqD,KAAK+tC,QAAQuc,OAAO7tD,OAAS,WAIjFuD,KAAK+tC,QAAQuiY,iBAAiBhmX,EAAO0Z,QAC5ChkE,KAAK+tC,QAAQuc,OAAO7hC,OAAOxW,EAAO,GACR,QAAtBjS,KAAK+tC,QAAQxP,MACbv+B,KAAK+tC,QAAQsiY,wBAKzB/B,EAAejza,UAAUu1a,YAAc,SAAU1pX,EAAS2pX,GACtD,IAAI3lW,EAAQlrE,KAAKkja,SAAS2N,IAAgB7wa,KAAK+tC,QAAQwiY,YACvDvwa,KAAK+tC,QAAQ+iY,eAAe5lW,EAAM5nE,IAElC,IAAK,IADDyta,EACK3ya,EAAK,EAAG4ya,EAAY9pX,EAAS9oD,EAAK4ya,EAAUv0a,OAAQ2B,IAAM,CAC/D,IAAIjC,EAAI60a,EAAU5ya,GACJ4B,KAAKwsa,eAAerwa,GACd+qD,QAAQ3oD,QAAQpC,IACvB,IACT40a,EAAc/wa,KAAK+tC,QAAQ2sB,UAAUv+D,GACrC6D,KAAK+tC,QAAQ0wX,SAASsS,GACtB/wa,KAAK+tC,QAAQxpC,OAAOvE,KAAK+tC,QAAQ2sB,UAAUv+D,IAC3C6D,KAAK+tC,QAAQ3pC,IAAI2sa,MAK7BzC,EAAejza,UAAU41a,WAAa,SAAUj2I,GAC/Bh7R,KAAK+tC,QAAQuc,OAA1B,IACI4gB,EAAQlrE,KAAKkja,SAASloI,GAC1B,GAAI9vN,EAAO,CACP,IAAIgmW,KACAC,GACA7ta,GAAI03R,EAAY,IAAMrkO,KAAYzP,WAAapwB,SAAS,EAAM21Y,MAAM,GAExEzsa,KAAKk8R,SAASi1I,GACdA,EAASntW,OAAShkE,KAAK+tC,QAAQuc,OAAO7tD,OAAS,EAC/C,IACK,IAAI2B,EAAK,EAAGyE,EAAKqoE,EAAMhkB,QAAS9oD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIrB,EAAM8F,EAAGzE,GACb8ya,EAAc1sa,KAAKxE,KAAK+tC,QAAQ2sB,UAAU39D,IAE9CiD,KAAKoxa,MAAMF,KAInB5C,EAAejza,UAAUkE,KAAO,WAG5B,OAFAS,KAAKuua,cAAcyB,WAAa,EAChChwa,KAAKuua,cAAc4B,WAAanwa,KAAKowa,cAC9Bpwa,KAAKuua,cAAc4B,YAG9B7B,EAAejza,UAAU+0a,YAAc,WACnC,IAAIllX,KACAnuD,KAEJ,GADAiD,KAAKuua,cAAc7Q,cACf19Z,KAAK+tC,QAAQmd,cAAcT,WAAWhuD,OAAS,EAAG,CAClDyuD,EAAgBlrD,KAAK+tC,QAAQmd,cAAcT,WAC3C,IAAK,IAAIhnC,EAAI,EAAGA,EAAIynC,EAAczuD,OAAQgnB,IAAK,CAC3C,IAAIziB,EAAU3B,GAAO6rD,EAAcznC,IACnC1mB,EAAIyH,KAAKxD,IAGjB,GAAIhB,KAAK+tC,QAAQmd,cAAcR,MAAMjuD,OAAS,EAAG,CAC7CyuD,EAAgBA,EAAc1wC,OAAOxa,KAAK+tC,QAAQmd,cAAcR,OAChE,IAASjnC,EAAI,EAAGA,EAAIzjB,KAAK+tC,QAAQmd,cAAcR,MAAMjuD,OAAQgnB,IAAK,CAC9D,IAAIljB,EAAOlB,GAAMW,KAAK+tC,QAAQmd,cAAcR,MAAMjnC,IAClDzjB,KACKqxa,cAAc9wa,GACnBxD,EAAIyH,KAAKnF,GAAMkB,IACf,IAAIgrC,EAASL,KAEb,GADAiB,GAAaZ,GAAShrC,EAAK+lD,YAAa/lD,EAAKsL,QAAStL,EAAK0L,SACvD1L,EAAK6Z,SAAU,CAKf,IAAK,IAJDsjZ,EAAa19Z,KAAKuua,cAAc7Q,WAChC4T,OAAW,EAEX5mX,EAAQ1qD,KAAK6ha,kBAAkBtha,MAAgB,GAC1CpE,EAAI,EAAGA,EAAIuuD,EAAMjuD,OAAQN,IAAK,CAEnC,IAAImsD,EAAeo1W,GADnB4T,EAAWtxa,KAAK+tC,QAAQ2sB,UAAUhQ,EAAMvuD,GAAGmH,KACJA,IAAMjE,GAAMiya,GAC/C3mY,EAAYW,GAAuBC,GAAUx+B,EAAGu7C,EAAav2C,QAAQlG,QAASmB,EAAGs7C,EAAav2C,QAAQ9F,UACtGqla,aAAoB/xX,KACpB+I,EAAaz8C,QAAU8+B,EAAU59B,EACjCu7C,EAAar8C,QAAU0+B,EAAU39B,EACjCs7C,EAAahC,aAAe/lD,EAAK+lD,aAGzCtmD,KAAKuua,cAAc7Q,WAAaA,IAI5C,GAAsC,IAAlC19Z,KAAKuua,cAAcyB,WAAkB,CACrChwa,KAAK8ga,mBACL,IAAK,IAAI1ia,EAAK,EAAGmza,EAAkBrmX,EAAe9sD,EAAKmza,EAAgB90a,OAAQ2B,IAAM,CACjF,IAAI4f,EAAOuzZ,EAAgBnza,GACvB4B,KAAK+tC,QAAQ2sB,UAAU18C,EAAK1a,KAC5BtD,KAAK+tC,QAAQxpC,OAAOyZ,GAG5Bhe,KAAKmha,iBAGT,OADAnha,KAAKwxa,aAAaz0a,EAAK,UAChBA,GAEXuxa,EAAejza,UAAUg2a,cAAgB,SAAU9wa,GAC/C,GAAwB,SAApBA,EAAK44B,MAAMzyB,MAAmBnG,EAAK44B,MAAMy0X,UACzCrtZ,EAAK44B,MAAMy0X,SAASD,WAAWE,WAC/BttZ,EAAK44B,MAAMy0X,SAASD,WAAWE,UAAUpxZ,OAAS,EAAG,CAErD,IAAK,IAAI2B,EAAK,EAAGqza,EADDlxa,EAAK44B,MAAMy0X,SAASD,WAAWE,UACLzvZ,EAAKqza,EAAYh1a,OAAQ2B,IAAM,CACrE,IAAIjC,EAAIs1a,EAAYrza,GACpB4B,KAAKyua,aAAatya,GAAMkD,GAAMW,KAAK+tC,QAAQ2sB,UAAUv+D,IACjD6D,KAAKyua,aAAatya,GAAGg9B,MAAMy0X,SAASD,WAAWE,WAC/C7tZ,KAAKyua,aAAatya,GAAGg9B,MAAMy0X,SAASD,WAAWE,UAAUpxZ,OAAS,GAClEuD,KAAKqxa,cAAcrxa,KAAKyua,aAAatya,IAG7C6D,KAAKuua,cAAcE,aAAezua,KAAKyua,eAI/CH,EAAejza,UAAUi5F,MAAQ,WAC7B,IACIo9U,EAAkB1xa,KAAK+tC,QAAgB,oBAC3C/tC,KAAK+tC,QAAQ8a,uBAAsB,GACnC7oD,KAAK+tC,QAAQ0T,eAAiBzhD,KAAK+tC,QAAQ0T,eAAiBC,GAAciwX,MAC1E,IAAIzmX,KACAnuD,KACJA,EAAIuG,GAAK,QAAUqzD,MACnB55D,EAAM,IAAIwiD,GAAKv/C,KAAK+tC,QAAS,QAAShxC,GAAK,IACvCqd,YAEJ8wC,GADAA,EAAgBlrD,KAAK+tC,QAAQmd,cAAcR,OACblwC,OAAOxa,KAAK+tC,QAAQmd,cAAcT,YAChE,IAAK,IAAItuD,EAAI,EAAGA,EAAI+uD,EAAczuD,OAAQN,IACjC+uD,EAAc/uD,GAAGw+D,UAClB59D,EAAIqd,SAAS5V,KAAK0mD,EAAc/uD,GAAGmH,IAG3CtD,KAAK+tC,QAAQ3pC,IAAIrH,GACjB,IAAIoia,GAAUz4Z,KAAM,QAAS24Z,WAAYtia,EAAKqia,WAAYria,EAAKouM,SAAU,YACzEnrM,KAAKs/Z,gBAAgBH,GACrBn/Z,KAAK+tC,QAAQ0T,eAAiBzhD,KAAK+tC,QAAQ0T,gBAAkBC,GAAciwX,MAC3E3xa,KAAK+tC,QAAQ8a,sBAAsB6oX,IAGvCpD,EAAejza,UAAUu2a,QAAU,SAAU70a,GACzC,IACI20a,EAAkB1xa,KAAK+tC,QAAgB,oBAC3C/tC,KAAK+tC,QAAQ8a,uBAAsB,GACnC7oD,KAAK+tC,QAAQ0T,eAAiBzhD,KAAK+tC,QAAQ0T,eAAiBC,GAAciwX,MAC1E,IAAIzmX,KACAnuD,EACAmuD,EAAc1mD,KAAKzH,GAGnBmuD,EAAgBlrD,KAAK+tC,QAAQmd,cAAcR,MAE/C,IAAK,IAAIvuD,EAAI,EAAGA,EAAI+uD,EAAczuD,OAAQN,IAAK,CAC3C,IAAIoE,EAAO2qD,EAAc/uD,GACrBgja,GACAz4Z,KAAM,UAAW24Z,WAAY92W,GAAYhoD,GACzC6+Z,WAAY72W,GAAYhoD,GAAO4qM,SAAU,YAK7C,GAHMnrM,KAAK+tC,QAAQ0T,eAAiBC,GAAcmwX,UAC9C7xa,KAAKs/Z,gBAAgBH,GAErB5+Z,EAAK6Z,SAAU,CAEf,IAAK,IADD3Z,EAAaT,KAAK+tC,QAAQ2sB,UAAUn6D,EAAKo6D,UACpCl3C,EAAIljB,EAAK6Z,SAAS3d,OAAS,EAAGgnB,GAAK,EAAGA,IAC1CzjB,KAAK+tC,QAAQ2sB,UAAUn6D,EAAK6Z,SAAS,IAAKugD,SAAW,GACtD36D,KAAK+tC,QAAQ+jY,YAAY9xa,KAAK+tC,QAAQ2sB,UAAUn6D,EAAK6Z,SAAS,IAAK7Z,GAC/DA,EAAKo6D,UAAYp6D,EAAK6Z,SAAS,IAC/Bpa,KAAK+tC,QAAQgkY,SAAStxa,EAAYF,EAAK6Z,SAAS,IAGpD7Z,EAAKo6D,UACL36D,KAAK+tC,QAAQ+jY,YAAYvxa,EAAME,GAGvCT,KAAK+tC,QAAQmmV,WAAW3zX,GACxBP,KAAK2+Z,iBAET3+Z,KAAK+tC,QAAQ0T,eAAiBzhD,KAAK+tC,QAAQ0T,gBAAkBC,GAAciwX,MAC3E3xa,KAAK+tC,QAAQ8a,sBAAsB6oX,IAGvCpD,EAAejza,UAAU+1a,MAAQ,SAAUr0a,GACvC,GAAIA,GAAOiD,KAAKuua,cAAc4B,WAAY,CACtCnwa,KAAK+tC,QAAQ8a,uBAAsB,GACnC,IAAImpX,EAAcj1a,EAAMiD,KAAKiya,aAAal1a,GACtCiD,KAAKuua,cAAc4B,WACvB,GAAI6B,EAAa,CACb,IAAI/lD,EAAqC,IAAvB+lD,EAAYv1a,OAC1By1a,GAAc,EACdC,KACAC,KACkC,IAAlCpya,KAAKuua,cAAcyB,YACnBhwa,KAAK2+Z,iBAEL3+Z,KAAK+tC,QAAQkiY,iBACbiC,GAAc,EACdlya,KAAK+tC,QAAQmiY,YAAYpP,oBAE7B,IAAK,IAAI1ia,EAAK,EAAGi0a,EAAgBL,EAAa5za,EAAKi0a,EAAc51a,OAAQ2B,IAAM,CAE3E+za,GADI5ya,EAAO8ya,EAAcj0a,IACRkF,IAAM/D,EAE3B,IAAK,IAAIkkB,EAAI,EAAGA,EAAIuuZ,EAAYv1a,OAAQgnB,IAAK,CACzC,IAAIlkB,EAAOyya,EAAYvuZ,GACvB,GAAIwtY,GAAc1xZ,KAAU2+C,GAAW,CACnC,IAAIo0X,EAAYjza,GAAME,GAClBgyD,EAAS+gX,EAAU/iY,SACvB+iY,EAAU/iY,SAAW,GACjB4iY,EAAY5gX,IAAW6gX,EAAS7gX,KAChC+gX,EAAU/iY,SAAW6iY,EAAS7gX,IAElCA,EAAS+gX,EAAU5mB,SACnB4mB,EAAU5mB,SAAW,GACjBymB,EAAY5gX,IAAW6gX,EAAS7gX,KAChC+gX,EAAU5mB,SAAW0mB,EAAS7gX,IAElC,IAAI09C,EAASjvG,KAAKuya,eAAeD,EAAWrmD,GAC5CmmD,EAAS7ya,EAAK+D,IAAM2rG,EAAO3rG,OAE1B,CACD,IAAIkva,EAAUxya,KAAK4B,UAAUrC,EAAM0sX,GAEnC,GAAIumD,EAAS,CACTJ,EAAS7ya,EAAK+D,IAAMkva,EAAQlva,GAC5B,IAAImva,EAAQlza,EAAK8tZ,QACjB,GAAIolB,EACA,IAAK,IAAI5va,EAAK,EAAG6va,EAAUD,EAAO5va,EAAK6va,EAAQj2a,OAAQoG,IAAM,CAEzD,GAAIsva,EADAx5Z,EAAO+5Z,EAAQ7va,KACMuva,EAASz5Z,GAAO,EACjCg6Z,EAAe3ya,KAAK+tC,QAAQ2sB,UAAU03W,EAASz5Z,KACtC+yY,SAAW0mB,EAAS7ya,EAAK+D,IACtCtD,KAAK+tC,QAAQohY,wBAAwBwD,GAAgBjnB,SAAU,KAAQA,SAAUinB,EAAajnB,YAK1G,GADA+mB,EAAQlza,EAAK6tZ,SAET,IAAK,IAAInpZ,EAAK,EAAG2ua,EAAUH,EAAOxua,EAAK2ua,EAAQn2a,OAAQwH,IAAM,CACzD,IAAI0U,EACJ,GAAIw5Z,EADAx5Z,EAAOi6Z,EAAQ3ua,KACMmua,EAASz5Z,GAAO,CACrC,IAAIg6Z,GAAAA,EAAe3ya,KAAK+tC,QAAQ2sB,UAAU03W,EAASz5Z,KACtC42B,SAAW6iY,EAAS7ya,EAAK+D,IACtCtD,KAAK+tC,QAAQohY,wBAAwBwD,GAAgBpjY,SAAU,KAAQA,SAAUojY,EAAapjY,gBAOlG,IAAhB2iY,IACAlya,KAAK+tC,QAAQmiY,YAAY/O,iBACzB+Q,GAAc,GAEQ,QAAtBlya,KAAK+tC,QAAQxP,MACbv+B,KAAK+tC,QAAQsiY,sBAEjBrwa,KAAKuua,cAAcyB,aACnBhwa,KAAK+tC,QAAQ8a,uBAAsB,MAI/CylX,EAAejza,UAAU42a,aAAe,SAAUl1a,GAC9C,IAAIkyG,EACA4jU,KACJ7ya,KAAKuua,cAAcyB,WAAa,EAChC,IAAK,IAAI7za,EAAI,EAAGA,EAAIY,EAAIN,OAAQN,IAC5B8yG,EAAS1mD,GAAYxrD,EAAIZ,IACzB02a,EAAQrua,KAAKyqG,GAEjB,OAAO4jU,GAEXvE,EAAejza,UAAUk3a,eAAiB,SAAUx6X,EAAWk0U,GAC3D,IAAI0mD,EACApqX,EAAclpD,GAAM04C,GAKxB,OAJA/3C,KAAK8ya,gBAAgBvqX,GACrBA,EAAYyb,QAAU,EACtB2uW,EAAe3ya,KAAK+tC,QAAQ3pC,IAAImkD,GAChCvoD,KAAK0+Z,eAAeiU,GAAe1mD,GAC5B0mD,GAEXrE,EAAejza,UAAUuG,UAAY,SAAUrB,EAAM0rX,EAAa7xW,GAC9D,IAAIo4Z,EAGA/9V,EAFA+5V,KACAjmX,EAAclpD,GAAMkB,GAEpBA,EAAK44B,OAA6B,SAApB54B,EAAK44B,MAAMzyB,MAAmBnG,EAAK44B,MAAMy0X,UACvDrtZ,EAAK44B,MAAMy0X,SAASD,WAAWE,WAC5BttZ,EAAK44B,MAAMy0X,SAASD,WAAWE,UAAUpxZ,SAC5Cg4E,EAAUlsB,EAAYpvB,MAAMy0X,SAASD,WAAWE,UAChDtlW,EAAYyb,QAAU,EACtBzb,EAAYpvB,MAAMy0X,SAASD,WAAWE,eAEtCttZ,EAAK6Z,WAAY7Z,EAAK6Z,SAAS3d,QAAY2d,GAAaA,EAAS3d,QAIjEuD,KAAK8ya,gBAAgBvqX,GACrBA,EAAYyb,QAAU,EAClB5pD,IACAmuC,EAAYnuC,SAAWA,GAE3Bo4Z,EAAUxya,KAAK+tC,QAAQ3pC,IAAImkD,IAR3BiqX,EAAUxya,KAAK+ya,WAAWxya,EAAM0rX,GAUpC,IAAK,IAAI7tX,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKkxa,GAAkBpwa,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtE,IAAIjC,EAAI0G,EAAGzE,GACX4B,KAAK+tC,QAAQ3pC,IAAIoqa,EAAgBrya,IASrC,OAPIs4E,GAAWA,EAAQh4E,SACnB+1a,EAAQr5Y,MAAMy0X,SAASD,WAAWE,UAAYp5U,EAC9Cz0E,KAAKgza,kBAAkBR,IAEvBA,GACAxya,KAAK0+Z,eAAe8T,GAAUvmD,GAE3BumD,GAEXlE,EAAejza,UAAU23a,kBAAoB,SAAUzya,GACnD,IAAIw3C,KACA1e,KACJ,GAAwB,SAApB94B,EAAK44B,MAAMzyB,MAAmBnG,EAAK44B,MAAMy0X,UACzCrtZ,EAAK44B,MAAMy0X,SAASD,WAAWE,WAC5BttZ,EAAK44B,MAAMy0X,SAASD,WAAWE,UAAUpxZ,OAE5C,IAAK,IADDg4E,EAAUl0E,EAAK44B,MAAMy0X,SAASD,WAAWE,UACpCxwX,EAAI,EAAGA,EAAIo3C,EAAQh4E,OAAQ4gC,IAAK,CAErC,IAAK,IADDh9B,EAAQL,KAAK+tC,QAAQ2sB,UAAU+Z,EAAQp3C,KAAOr9B,KAAKuua,cAAcE,aAAah6V,EAAQp3C,IACjFj/B,EAAK,EAAGyE,EAAKxC,EAAM+sZ,SAAUhvZ,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACxD,IAAIqlB,EAAI5gB,EAAGzE,GACP25C,EAAUx5C,QAAQklB,GAAK,GACvBs0B,EAAUvzC,KAAKif,GAGvB,IAAK,IAAIxf,EAAK,EAAGwG,EAAKpK,EAAMgtZ,QAASppZ,EAAKwG,EAAGhO,OAAQwH,IAAM,CACnDwf,EAAIhZ,EAAGxG,GACP8zC,EAAUx5C,QAAQklB,GAAK,GACvBs0B,EAAUvzC,KAAKif,GAGvB,IAAIwvZ,EAAa1qX,GAAYvoD,KAAKuua,cAAcE,aAAah6V,EAAQp3C,KACrE41Y,EAAW9lB,UAAY5sZ,EAAK+C,GAC5B,IAAIkva,EAAUxya,KAAK4B,UAAUqxa,GAAY,GACzC55Y,EAAKo7C,EAAQp3C,IAAMm1Y,EAAQlva,GAC3BmxE,EAAQp3C,GAAKm1Y,EAAQlva,GACrBtD,KAAK+tC,QAAQmlY,WAAWV,EAASjya,EAAK+C,IACtC,IAAK,IAAIwnO,EAAK,EAAGqoM,EAAcp7X,EAAW+yL,EAAKqoM,EAAY12a,OAAQquO,IAAM,CACrE,IAAI3uO,EAAIg3a,EAAYroM,GAEhBsoM,EAAa7qX,GADJvoD,KAAK+tC,QAAQ2sB,UAAUv+D,IAAM6D,KAAK+tC,QAAQslY,eAAel3a,IAElEk9B,EAAK+5Y,EAAW7jY,WAAalW,EAAK+5Y,EAAW1nB,YAC7C0nB,EAAWpvW,QAAU,EACrBovW,EAAW9va,IAAMqzD,KACjBy8W,EAAW7jY,SAAWlW,EAAK+5Y,EAAW7jY,UACtC6jY,EAAW1nB,SAAWryX,EAAK+5Y,EAAW1nB,UACtC3zW,EAAUtvB,OAAOsvB,EAAUx5C,QAAQpC,GAAI,GACvC6D,KAAK+tC,QAAQ3pC,IAAIgva,OAMrC9E,EAAejza,UAAU03a,WAAa,SAAUh2a,EAAKkvX,GACjD,IACIqnD,KACAl5Z,KAEJ,GADAA,EAAWA,EAASI,OAAOzd,EAAIqd,UAC3Bpa,KAAKuua,cAAc7Q,WACnB,IAAK,IAAIvha,EAAI,EAAGA,EAAIie,EAAS3d,OAAQN,IAAK,CACtC,IAAIo3a,EAAWvza,KAAKuua,cAAc7Q,WAAWtjZ,EAASje,IACtD,GAAIo3a,EAAU,CACV,IAAItkU,OAAS,EAETA,EADAgiT,GAAcsiB,KAAcr1X,GACnBl+C,KAAKuya,eAAegB,EAAUtnD,GAG9BjsX,KAAK4B,UAAU2xa,EAAUtnD,GAEtCqnD,EAAY9ua,KAAKyqG,EAAO3rG,KAKpC,OADgBtD,KAAK4B,UAAU7E,EAAKkvX,EAAaqnD,IAIrDhF,EAAejza,UAAUy3a,gBAAkB,SAAU/1a,GACjDA,EAAIuG,IAAMqzD,KACV,IAAIqoB,EAAuC,GAAhCh/E,KAAKuua,cAAcyB,WAC9B,GAAI/e,GAAcl0Z,KAASmhD,GAAW,CAOlC,GANAnhD,EAAIiyC,aACAjiC,EAAGhQ,EAAIiyC,YAAYjiC,EAAIiyE,EAAMhyE,EAAGjQ,EAAIiyC,YAAYhiC,EAAIgyE,GAExDjiF,EAAIk6C,aACAlqC,EAAGhQ,EAAIk6C,YAAYlqC,EAAIiyE,EAAMhyE,EAAGjQ,EAAIk6C,YAAYjqC,EAAIgyE,GAEvC,WAAbjiF,EAAI2J,KAEJ,IAAK,IADD+iC,EAAW1sC,EAAI0sC,SACVttC,EAAI,EAAGA,EAAIstC,EAAShtC,OAAQN,IAC5Bg2C,GAAMC,aAAa3I,EAASttC,GAAGo/C,UAChC9R,EAASttC,GAAGo/C,QACRxuC,EAAG08B,EAASttC,GAAGo/C,OAAOxuC,EAAIiyE,EAAMhyE,EAAGy8B,EAASttC,GAAGo/C,OAAOvuC,EAAIgyE,IAG7D7sC,GAAMC,aAAa3I,EAASttC,GAAG6sC,UAChCS,EAASttC,GAAG6sC,QACRj8B,EAAG08B,EAASttC,GAAG6sC,OAAOj8B,EAAIiyE,EAAMhyE,EAAGy8B,EAASttC,GAAG6sC,OAAOh8B,EAAIgyE,IAK1E,IAAiB,aAAbjiF,EAAI2J,MAAoC,WAAb3J,EAAI2J,OAC3B3J,EAAI0sC,UAAY1sC,EAAI0sC,SAAShtC,OAAS,EAEtC,IADIgtC,EAAW1sC,EAAI0sC,SACVttC,EAAI,EAAGA,EAAIstC,EAAShtC,OAAS,EAAGN,IACrCstC,EAASttC,GAAGg3B,MAAMpmB,GAAKiyE,EACvBv1C,EAASttC,GAAGg3B,MAAMnmB,GAAKgyE,OAMnCjiF,EAAI8O,SAAWmzE,EACfjiF,EAAIkP,SAAW+yE,GAMvBsvV,EAAejza,UAAUyoa,WAAa,SAAU/ma,GAC5C,IAAIkyG,EACA1mD,EACJA,EAAclpD,GAAMW,KAAK+tC,QAAQ4W,eACjC,IAAK,IAAIvmD,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKP,GAAMqB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC1D,IAAIkM,EAAOzH,EAAGzE,GACdmqD,EAAYj+C,GAAQvN,EAAIuN,GAc5B,OAZI2mZ,GAAcjxZ,KAAK+tC,QAAQ4W,iBAAmBpF,KAC9C0vD,EAAS,IAAI1vD,GAAKv/C,KAAK+tC,QAAS,QAASwa,GAAa,IAC/CjlD,IAAMtD,KAAK+tC,QAAQ4W,cAAcrhD,IAAM,QAAUqzD,KACxD32D,KAAK+tC,QAAQylY,WAAWvkU,MAGxBA,EAAS,IAAI/wD,GAAUl+C,KAAK+tC,QAAS,aAAcwa,GAAa,IACzDjlD,IAAMtD,KAAK+tC,QAAQ4W,cAAcrhD,IAAM,aAAeqzD,KAC7D32D,KAAK+tC,QAAQylY,WAAWvkU,IAE5BjvG,KAAK+tC,QAAQqhY,oBAAoBngU,GACjCjvG,KAAK+tC,QAAQwsB,qBAAuB00C,EAC7BA,GAKXq/T,EAAejza,UAAU2oa,mBAAqB,SAAUjna,GACpD,IAAIkyG,EACJjvG,KAAK+tC,QAAQ0lY,gBAAgB12a,GAC7BiD,KAAK+tC,QAAQ2lY,uBAAuB1za,KAAK+tC,QAAQ2sB,UAAU39D,EAAIuG,YACxDtD,KAAK+tC,QAAQ2sB,UAAU39D,EAAIuG,IAClC2rG,EAASjvG,KAAK+tC,QAAQ3pC,IAAIrH,GACA,QAAtBiD,KAAK+tC,QAAQxP,MACbv+B,KAAK+tC,QAAQsiY,sBAEjBrwa,KAAK0+Z,eAAezvT,IAChBlyG,IAAU8jD,GAAkB7gD,KAAK+tC,WACjC/tC,KAAK+tC,QAAQyS,OAASC,GAAaO,SACnChhD,KAAK+tC,QAAQwsB,0BAAuBp/D,IAM5Cmza,EAAejza,UAAU8oa,QAAU,SAAUpna,EAAK8jQ,GAC9C,IAAIx5M,EAAarnD,KAAK+tC,QAAQ27X,sBAAsB3sa,EAAK8jQ,GACzD7gQ,KAAK+tC,QAAQ2+X,cAAc3va,EAAKsqD,aAAsB8E,GAAe9E,EAAa,GAAEnqD,MAAM,KAAK,QAAK/B,IAGxGmza,EAAejza,UAAUqja,cAAgB,SAAU3ha,EAAK42a,EAAmB3qa,GACvE,IAAIsqF,GACAtqF,SAAUA,MAA0B1B,SAAUvK,EAAK62a,MAAO5za,KAAK+tC,QAAQ0T,eACvEsG,MAAO,WAAYrhD,KAAM,WAAY2xB,QAAQ,GAGjDr4B,KAAK+tC,QAAQioH,aAAasrP,GAAauyB,gBAAiBvgV,GACxD,IAAIwgV,E7WntBZ,SAA+B3nZ,GAC3B,OAAOA,EAAMq0B,KAAOC,GAAaS,e6WktBA6yX,CAAe/za,KAAK+tC,SAC7CimY,EAAuBzzX,GAAgBvgD,KAAK+tC,SAChD,GAAIimY,GAAwBF,EAAwB,CAChD,IAAKA,IAA4B/2a,EAAIN,OAAS,GAAOk3a,GAAoC,IAAf52a,EAAIN,QAAgB,CAC1F,GAAmB,IAAfM,EAAIN,OAIJ,OAHAuD,KAAK2+Z,iBAMb,KAAKqV,GAAuC,IAAfj3a,EAAIN,QAAkBk3a,GAAsB36W,GAAah5D,KAAK+tC,UAEvF,YADA/tC,KAAK2+Z,iBAIb,IAAKrrU,EAAIj7D,OAAQ,CACb,IAAK,IAAIl8B,EAAI,EAAGA,EAAIY,EAAIN,OAAQN,IAAK,CACjC,IAAI8yG,EAASlyG,EAAIZ,GAEjB,IADS,EACJ68D,GAAah5D,KAAK+tC,SAGlB,CACD,IAAK5xC,EAAI,GAAKw3a,IAAsB1kU,EAAO70F,WAAa60F,EAAOt0C,SAC3D,IAAK,IAAIjzC,EAAM,EAAGA,EAAM1nB,KAAK+tC,QAAQmd,cAAcR,MAAMjuD,OAAQirB,IAAO,CACpE,IAAIjnB,EAAaT,KAAK+tC,QAAQ2sB,UAAU16D,KAAK+tC,QAAQmd,cAAcR,MAAMhjC,GAAKizC,UAC1El6D,IACAA,EAAaT,KAAKi0a,WAAWxza,KAErBwuG,EAAO3rG,KAAO7C,EAAW6C,IACzBtD,KAAKk0a,YAAYjlU,GAMrCjvG,KAAKm0a,gBAAgBllU,GACZjvG,KAAKo0a,uBAAuBnlU,IAEjCjvG,KAAKyF,OAAOwpG,EAAQ9yG,EAAI,GAAKw3a,GAAmB,QAnBpD3za,KAAKyF,OAAOwpG,EAAQ9yG,EAAI,GAAKw3a,GAAmB,GAuBxDrgV,GACItqF,SAAUA,MAA0B1B,SAAUvK,EAAK62a,MAAO5za,KAAK+tC,QAAQ0T,eACvEsG,MAAO,UAAWrhD,KAAM,WAAY2xB,QAAQ,GAEhDr4B,KAAK+tC,QAAQioH,aAAasrP,GAAauyB,gBAAiBvgV,GACxDtzF,KAAK+tC,QAAQwzT,eAAeoyE,GAAsB52a,GAAOA,EAAIN,OAAS,KAM9E6xa,EAAejza,UAAU44a,WAAa,SAAU1za,GAK5C,OAJIA,EAAKo6D,WACLp6D,EAAOP,KAAK+tC,QAAQ2sB,UAAUn6D,EAAKo6D,UACnC36D,KAAKi0a,WAAW1za,IAEbA,GAEX+ta,EAAejza,UAAU84a,gBAAkB,SAAUllU,GACjD,GAAIjvG,KAAKq0a,aAAaplU,GAElB,IAAK,IADD4+S,EAAY,EAAS10X,MAAMy0X,SAASD,WAAWE,UAC1C1xZ,EAAI,EAAGA,EAAI0xZ,EAAUpxZ,OAAQN,IAAK,CACvC,IAAI82a,EAAajza,KAAK+tC,QAAQ2sB,UAAUmzV,EAAU1xZ,IAC9C6D,KAAKq0a,aAAapB,IAClBjza,KAAK0+Z,eAAeuU,IAAa,GAErCjza,KAAKy+Z,SAASwU,KAI1B3E,EAAejza,UAAU64a,YAAc,SAAUjlU,GAC7C,IAAK,IAAIxrF,EAAI,EAAGA,EAAIwrF,EAAO70F,SAAS3d,OAAQgnB,IAAK,CAC7C,IAAIwvZ,EAAajza,KAAK+tC,QAAQ2sB,UAAUu0C,EAAO70F,SAASqJ,IACpDwvZ,EAAW74Z,UACXpa,KAAKk0a,YAAYjB,GAErBjza,KAAKy+Z,SAASz+Z,KAAK+tC,QAAQ2sB,UAAUu0C,EAAO70F,SAASqJ,OAM7D6qZ,EAAejza,UAAU+4a,uBAAyB,SAAU7za,GACxD,IACID,EADAmF,GAAS,EAEb,GAAIlF,EAAK4sZ,UAED1nZ,GADAy0D,GAAWl6D,KAAK+tC,QAAS/tC,KAAK+tC,QAAQ2sB,UAAUn6D,EAAK4sZ,aAI5CntZ,KAAKo0a,uBAAuBp0a,KAAK+tC,QAAQ2sB,UAAUn6D,EAAK4sZ,iBAGpE,GAAI5sZ,aAAgB29C,KACjB39C,EAAKgvC,UAAYvvC,KAAK+tC,QAAQ2sB,UAAUn6D,EAAKgvC,WAC7CvvC,KAAK+tC,QAAQ2sB,UAAUn6D,EAAKgvC,UAAU49W,YACtC7sZ,EAASN,KAAK+tC,QAAQ2sB,UAAUn6D,EAAKgvC,UAAU49W,WAE/C5sZ,EAAKmrZ,UAAY1rZ,KAAK+tC,QAAQ2sB,UAAUn6D,EAAKmrZ,WAC7C1rZ,KAAK+tC,QAAQ2sB,UAAUn6D,EAAKmrZ,UAAUyB,YACtC7sZ,EAASN,KAAK+tC,QAAQ2sB,UAAUn6D,EAAKmrZ,UAAUyB,WAE/C7sZ,GAAQ,CACR,GAAI45D,GAAWl6D,KAAK+tC,QAAS/tC,KAAK+tC,QAAQ2sB,UAAUp6D,IAChD,OAAO,EAGPmF,EAASzF,KAAKo0a,uBAAuBp0a,KAAK+tC,QAAQ2sB,UAAUp6D,IAIxE,OAAOmF,GAKX6oa,EAAejza,UAAUg5a,aAAe,SAAU9za,GAC9C,SAAIA,GACyB,SAApBA,EAAK44B,MAAMzyB,MAAoBnG,EAAK44B,MAAMy0X,UAC3CrtZ,EAAK44B,MAAMy0X,SAASD,WAAWE,WAC/BttZ,EAAK44B,MAAMy0X,SAASD,WAAWE,UAAUpxZ,OAAS,IAO9D6xa,EAAejza,UAAUoK,OAAS,SAAU1I,EAAK42a,EAAmBW,GAChE,IAAIC,EAAWv0a,KAAKwsa,eAAezva,EAAIuG,IACvC,GAAK26C,GAAUlhD,MAAUA,aAAe0hD,MAAcyb,GAAWl6D,KAAK+tC,QAAShxC,IACvEw3a,IAAaA,EAAS9H,MAAQ8H,EAASz9Y,SAAY/5B,EAAIgV,QAAQ+kB,QAAS,EAC5E68Y,IAAoB36W,GAAah5D,KAAK+tC,UAAW4lY,IAE7C3za,KAAK2+Z,iBAET,IAAI6V,EAAgBx0a,KAAK+tC,QAAQmd,cACnBnuD,aACSwiD,GACnBi1X,EAAc9pX,MAAMlmD,KAAKzH,GAGzBy3a,EAAc/pX,WAAWjmD,KAAKzH,GAE7B42a,GASDa,EAAczia,QAAQu0C,YAAckuX,EAAcluX,YAAc,EAChEkuX,EAAczia,QAAQqI,SAAS5V,KAAKzH,EAAIgV,WATxCyia,EAAcnsL,KAAKroP,KAAK+tC,SACW,IAA/BymY,EAAc9pX,MAAMjuD,QAAoD,IAApC+3a,EAAc/pX,WAAWhuD,SAC7D+3a,EAAcluX,YAAckuX,EAAc9pX,MAAM,GAAGpE,YACnDkuX,EAAczia,QAAQu0C,YAAckuX,EAAc9pX,MAAM,GAAGpE,YAC3DkuX,EAAczia,QAAQs9C,MAAQmlX,EAAc9pX,MAAM,GAAG2E,QAOxDilX,GACDt0a,KAAK+tC,QAAQwzT,eAAeoyE,KAKxCrF,EAAejza,UAAUoja,SAAW,SAAU1ha,GAC1C,IAAI03a,KACJA,EAASjwa,KAAKzH,GACd,IAAIu2F,GACAtqF,SAAUyra,EAAUnta,YAAcssa,MAAO5za,KAAK+tC,QAAQ0T,eACtDsG,MAAO,WAAYrhD,KAAM,UAAW2xB,QAAQ,GAKhD,GAHKr4B,KAAK+tC,QAAQgrB,eACd/4D,KAAK+tC,QAAQioH,aAAasrP,GAAauyB,gBAAiBvgV,GAExDp5B,GAAWl6D,KAAK+tC,QAAShxC,GAAM,CAC/B,IAAI23a,EAAgB10a,KAAK+tC,QAAQmd,cAC7Bj5C,OAAQ,EACRlV,aAAewiD,IACfttC,EAAQyia,EAAchqX,MAAMnsD,QAAQxB,EAAK,GACzC23a,EAAchqX,MAAMjiC,OAAOxW,EAAO,KAGlCA,EAAQyia,EAAcjqX,WAAWlsD,QAAQxB,EAAK,GAC9C23a,EAAcjqX,WAAWhiC,OAAOxW,EAAO,KAE3CqhF,GACItqF,SAAUyra,EAAUnta,YAAcssa,MAAO5za,KAAK+tC,QAAQ0T,eACtDsG,MAAO,UAAWrhD,KAAM,UAAW2xB,QAAQ,IAEtCA,SACLpmB,EAAQyia,EAAc3ia,QAAQqI,SAAS7b,QAAQxB,EAAIgV,QAAS,GAC5D2ia,EAAc3ia,QAAQqI,SAASqO,OAAOxW,EAAO,GAC7CjS,KAAK+tC,QAAQkxX,iBACRj/Z,KAAK+tC,QAAQgrB,eACd/4D,KAAK+tC,QAAQioH,aAAasrP,GAAauyB,gBAAiBvgV,MAMxEg7U,EAAejza,UAAUs5a,iBAAmB,SAAUt0a,GAElD,IAAK,IADD+Z,KACKje,EAAI,EAAGA,EAAIkE,EAAM5D,OAAQN,IAAK,CACnC,IAAIg2E,EAAY9xE,EAAMlE,GAClBg2E,EAAU/3D,UAAY+3D,EAAU/3D,SAAS3d,OAAS,EAClD2d,EAASI,OAAOxa,KAAK20a,iBAAiBxiW,EAAU/3D,YAGhDA,EAAS5V,KAAK2tE,EAAU7uE,IACpB6uE,aAAqBhmB,IACrB/xC,EAAS5V,KAAK2tE,EAAU7uE,GAAK,UAIzC,OAAO8W,GAEXk0Z,EAAejza,UAAUu5a,YAAc,SAAUrjX,EAAQm6V,GACrD,IAAImpB,EAAargX,GAAkBk3V,EAAW,iBAC1CopB,EAAWtgX,GAAkBjD,EAAS,iBAC1CsjX,EAAWp0a,WAAWyE,aAAa4va,EAAUD,IAGjDvG,EAAejza,UAAU05a,kBAAoB,SAAU/5I,GACnD,IAAI9vN,EAAQlrE,KAAKkja,SAASloI,GAC1B,GAAI9vN,GAA0B,IAAjBA,EAAMlH,OAAc,CAC7B,IAAI/xD,EAAQi5D,EAAMlH,OAClB,GAA0B,QAAtBhkE,KAAK+tC,QAAQxP,KAAgB,CAC7B,IAAIy2Y,EAAqB9pW,EAAMhkB,QAC3B+tX,EAAej1a,KAAKkja,SAASlja,KAAK+tC,QAAQuiY,iBAAiBr+Z,EAAQ,IAAIi1C,QAAQ,GACnF,GAAI+tX,EACA,IAAK,IAAI72a,EAAK,EAAG82a,EAAuBF,EAAoB52a,EAAK82a,EAAqBz4a,OAAQ2B,IAAM,CAChG,IAAIrB,EAAMm4a,EAAqB92a,GAC/B4B,KAAK40a,YAAY73a,EAAKk4a,IAIlC,IAAIpE,EAAc7wa,KAAKkja,SAASlja,KAAK+tC,QAAQuiY,iBAAiBr+Z,EAAQ,IACtE4+Z,EAAY7sW,OAAS6sW,EAAY7sW,OAAS,EAC1CkH,EAAMlH,OAASkH,EAAMlH,OAAS,EAC9B,IAAI3qC,EAAOr5B,KAAK+tC,QAAQuiY,iBAAiBr+Z,GACzCjS,KAAK+tC,QAAQuiY,iBAAiBr+Z,GAASjS,KAAK+tC,QAAQuiY,iBAAiBr+Z,EAAQ,GAC7EjS,KAAK+tC,QAAQuiY,iBAAiBr+Z,EAAQ,GAAKonB,EACjB,WAAtBr5B,KAAK+tC,QAAQxP,MACbv+B,KAAK+tC,QAAQsiY,wBAKzB/B,EAAejza,UAAU85a,kBAAoB,SAAUn6I,GACnD,IAAI9vN,EAAQlrE,KAAKkja,SAASloI,GAC1B,GAAI9vN,GAASA,EAAMlH,OAAShkE,KAAK+tC,QAAQuc,OAAO7tD,OAAS,EAAG,CACxD,IAAIwV,EAAQi5D,EAAMlH,OAClB,GAA0B,QAAtBhkE,KAAK+tC,QAAQxP,KAGb,IAAK,IAFD02Y,EAAej1a,KAAKkja,SAASlja,KAAK+tC,QAAQuiY,iBAAiBr+Z,EAAQ,IAAIi1C,QAAQ,GAE1E9oD,EAAK,EAAGg3a,EADQlqW,EAAMhkB,QAC6B9oD,EAAKg3a,EAAqB34a,OAAQ2B,IAAM,CAChG,IAAIrB,EAAMq4a,EAAqBh3a,GAC3B62a,GACAj1a,KAAK40a,YAAYK,EAAcl4a,GAI3C,IAAI8za,EAAc7wa,KAAKkja,SAASlja,KAAK+tC,QAAQuiY,iBAAiBr+Z,EAAQ,IACtE4+Z,EAAY7sW,OAAS6sW,EAAY7sW,OAAS,EAC1CkH,EAAMlH,OAASkH,EAAMlH,OAAS,EAC9B,IAAI3qC,EAAOr5B,KAAK+tC,QAAQuiY,iBAAiBr+Z,GACzCjS,KAAK+tC,QAAQuiY,iBAAiBr+Z,GAASjS,KAAK+tC,QAAQuiY,iBAAiBr+Z,EAAQ,GAC7EjS,KAAK+tC,QAAQuiY,iBAAiBr+Z,EAAQ,GAAKonB,EACjB,WAAtBr5B,KAAK+tC,QAAQxP,MACbv+B,KAAK+tC,QAAQsiY,wBAKzB/B,EAAejza,UAAUg6a,WAAa,WAClC,GAAIr8W,GAAah5D,KAAK+tC,SAAU,CAM5B,IAAK,IALDunY,EAAWt1a,KAAK+tC,QAAQmd,cAAcR,MAAMjuD,OAASuD,KAAK+tC,QAAQmd,cAAcR,MAAM,GAAGpnD,GACvFtD,KAAK+tC,QAAQmd,cAAcT,WAAW,GAAGnnD,GAC3C2O,EAAQjS,KAAK+tC,QAAQ2sB,UAAU46W,GAAUtxW,OACzCuxW,EAAWv1a,KAAK+tC,QAAQuc,OAAO/rD,QAAQyB,KAAKwsa,eAAe8I,IAC3DjH,EAAcrua,KAAK+tC,QAAQuc,OAAOirX,GAAUlH,YACvClya,EAAI8V,EAAO9V,EAAI,EAAGA,IACnBkya,EAAYlya,KAEPkya,EAAYlya,EAAI,IAOjBkya,EAAYlya,GAAKkya,EAAYlya,EAAI,GACjC6D,KAAK+tC,QAAQ2sB,UAAU2zW,EAAYlya,IAAI6nE,OAAS7nE,IAPhDkya,EAAYlya,EAAI,GAAKkya,EAAYlya,GACjC6D,KAAK+tC,QAAQ2sB,UAAU2zW,EAAYlya,EAAI,IAAI6nE,OAAS7nE,SAC7Ckya,EAAYlya,KAW/B,GAFAkya,EAAY,GAAKrua,KAAK+tC,QAAQ2sB,UAAU46W,GAAUhya,GAClDtD,KAAK+tC,QAAQ2sB,UAAU46W,GAAUtxW,OAAS,EAChB,QAAtBhkE,KAAK+tC,QAAQxP,KAAgB,CAG7B,IAFA,IACIp3B,EAASkna,EADTlya,EAAI,IAEAgL,GAAUhL,EAAI8V,GAClB9K,EAASkna,IAAclya,GAE3B6D,KAAK40a,YAAYU,EAAUnua,QAG3BnH,KAAK+tC,QAAQynY,wBAKzBlH,EAAejza,UAAUo6a,aAAe,WACpC,GAAIz8W,GAAah5D,KAAK+tC,SAAU,CAQ5B,IAAK,IAPDyiY,EAAaxwa,KAAK+tC,QAAQmd,cAAcR,MAAMjuD,OAASuD,KAAK+tC,QAAQmd,cAAcR,MAAM,GAAGpnD,GACzFtD,KAAK+tC,QAAQmd,cAAcT,WAAW,GAAGnnD,GAC3Ciya,EAAWv1a,KAAK+tC,QAAQuc,OAAO/rD,QAAQyB,KAAKwsa,eAAegE,IAC3DnC,EAAcrua,KAAK+tC,QAAQuc,OAAOirX,GAAUlH,YAE5CqH,EAAc9+Y,OAAOt4B,OAAOhB,KAAK+wa,GAAal3Y,KAAK,SAAUmkB,EAAGhe,GAAK,OAAO1G,OAAO0kB,GAAK1kB,OAAO0G,KAAOsa,UAAU,IAE3Gz7C,EADG6D,KAAK+tC,QAAQ2sB,UAAU81W,GAAYxsW,OAC3B7nE,EAAIu5a,EAAav5a,IAE7Bkya,EAAYlya,KACPkya,EAAYlya,EAAI,IAOjBkya,EAAYlya,GAAKkya,EAAYlya,EAAI,GACjC6D,KAAK+tC,QAAQ2sB,UAAU2zW,EAAYlya,IAAI6nE,OAAS7nE,IAPhDkya,EAAYlya,EAAI,GAAKkya,EAAYlya,GACjC6D,KAAK+tC,QAAQ2sB,UAAU2zW,EAAYlya,EAAI,IAAI6nE,OAAS7nE,SAC7Ckya,EAAYlya,KAW/B,GAFAkya,EAAYqH,GAAe11a,KAAK+tC,QAAQ2sB,UAAU81W,GAAYlta,GAC9DtD,KAAK+tC,QAAQ2sB,UAAU81W,GAAYxsW,OAAS0xW,EAClB,QAAtB11a,KAAK+tC,QAAQxP,KAAgB,CAC7B,IAAIo3Y,EAAe31a,KAAK+tC,QAAQ4nY,aAG5B30a,GAFQhB,KAAK20a,iBAAiB30a,KAAK+tC,QAAQ2sB,UAAU81W,GAAYz+Z,QAAQqI,UAE/Do6C,GAAkBg8W,EAAa,kBAC7Cxva,EAAQP,WAAW6E,YAAYtE,GAC/B,IAAI41Z,EAAY1hW,GAAal1D,KAAK+tC,QAAQ/sC,QAAQsC,IAClDtD,KAAK+tC,QAAQ6nY,gBAAgBjf,cAAc32Z,KAAK+tC,QAAQ2sB,UAAU81W,GAAYz+Z,QAAS4ja,EAAc/e,QAGrG52Z,KAAK+tC,QAAQynY,wBAKzBlH,EAAejza,UAAUm2a,aAAe,SAAUqE,EAAWC,GACzD,IAAIxya,EAAKwya,GAAkB,SAI3B,OAHAD,EAAYA,EAAU1+Y,KAAK,SAAUmkB,EAAGhe,GACpC,OAAOge,EAAEh4C,GAAMg6B,EAAEh6B,MAKzBgra,EAAejza,UAAU06a,YAAc,WACnC,GAAI/8W,GAAah5D,KAAK+tC,SAAU,CAC5B,IAAIwjB,EAASvxD,KAAK+tC,QAAQmd,cAAcR,MAAMjuD,OAASuD,KAAK+tC,QAAQmd,cAAcR,MAAM,GAAGpnD,GACrFtD,KAAK+tC,QAAQmd,cAAcT,WAAW,GAAGnnD,GAC3CytE,EAAa/wE,KAAK+tC,QAAQuc,OAAO/rD,QAAQyB,KAAKwsa,eAAej7W,IAC7D88W,EAAcrua,KAAK+tC,QAAQuc,OAAOymB,GAAYs9V,YAE9Cp8Z,GADc3T,OAAOhB,KAAK+wa,GAAa5xa,OAC/BuD,KAAK+tC,QAAQ2sB,UAAUnJ,IAC/BykX,KACA38Y,EAAOr5B,KAAK+tC,QAAQ8/X,cAAcC,YAAY77Z,EAAMF,QAAQgkB,QAC5DsD,EAAK58B,OAAS,IACd48B,EAAOr5B,KAAKwxa,aAAan4Y,IAE7B,IAAK,IAAIj7B,EAAK,EAAGisB,EAASgP,EAAMj7B,EAAKisB,EAAO5tB,OAAQ2B,IAAM,CACtD,IAAIjC,EAAIkuB,EAAOjsB,GACf,GAAI6T,EAAM3O,KAAOnH,EAAEmH,GAAI,CAEnB,GAAIytE,IADe/wE,KAAKwsa,eAAerwa,EAAEmH,IAAI0gE,QACTptC,OAAO52B,KAAK+tC,QAAQ2sB,UAAUnJ,GAAQyS,QAAUptC,OAAOz6B,EAAE6nE,SACzF/xD,EAAMF,QAAQgkB,OAAOgrX,WAAW5kZ,EAAE4V,QAAQgkB,QAAS,CACnDigZ,EAAexxa,KAAKrI,GACpB,QAIZ,GAAI65a,EAAev5a,OAAS,EAAG,CAC3B,IAAIw5a,EAAgBD,EAAe,GAAGhyW,OAClCkyW,EAAgBjka,EAAM+xD,OACbqqW,EAAY4H,GAEzBj2a,KAAK+tC,QAAQuc,OAAO,GAAG+jX,YAAY4H,GAAiBhka,EAAM3O,GAC1DtD,KAAK+tC,QAAQ2sB,UAAU2zW,EAAY4H,IAAgBjyW,OAASiyW,EAC5Dj2a,KAAK+tC,QAAQuc,OAAO,GAAG+jX,YAAY6H,GAAiBF,EAAe,GAAG1ya,GACtEtD,KAAK+tC,QAAQ2sB,UAAU2zW,EAAY6H,IAAgBlyW,OAASkyW,EAClC,QAAtBl2a,KAAK+tC,QAAQxP,KACbv+B,KAAK40a,YAAYvG,EAAYz3Y,OAAOo/Y,EAAe,GAAGhyW,SAAUzS,GAGhEvxD,KAAK+tC,QAAQynY,yBAM7BlH,EAAejza,UAAU86a,aAAe,WACpC,GAAIn9W,GAAah5D,KAAK+tC,SAAU,CAC5B,IAAIunY,EAAWt1a,KAAK+tC,QAAQmd,cAAcR,MAAMjuD,OAASuD,KAAK+tC,QAAQmd,cAAcR,MAAM,GAAGpnD,GACvFtD,KAAK+tC,QAAQmd,cAAcT,WAAW,GAAGnnD,GAC3Ciya,EAAWv1a,KAAK+tC,QAAQuc,OAAO/rD,QAAQyB,KAAKwsa,eAAe8I,IAC3DjH,EAAcrua,KAAK+tC,QAAQuc,OAAOirX,GAAUlH,YAE5C9ta,GADcjC,OAAOhB,KAAK+wa,GAAa5xa,OAChCuD,KAAK+tC,QAAQ2sB,UAAU46W,IAC9BU,KACA38Y,EAAOr5B,KAAK+tC,QAAQ8/X,cAAcC,YAAYvta,EAAKwR,QAAQgkB,QAC3DsD,EAAK58B,OAAS,IACd48B,EAAOr5B,KAAKwxa,aAAan4Y,IAE7B,IAAK,IAAIj7B,EAAK,EAAGg4a,EAAS/8Y,EAAMj7B,EAAKg4a,EAAO35a,OAAQ2B,IAAM,CACtD,IAAIjC,EAAIi6a,EAAOh4a,GACf,GAAImC,EAAK+C,KAAOnH,EAAEmH,GAAI,CAEdiya,IADev1a,KAAKwsa,eAAerwa,EAAEmH,IAAI0gE,QACXptC,OAAO52B,KAAK+tC,QAAQ2sB,UAAU46W,GAAUtxW,QAAUptC,OAAOz6B,EAAE6nE,SACzFzjE,EAAKwR,QAAQgkB,OAAOgrX,WAAW5kZ,EAAE4V,QAAQgkB,SACzCigZ,EAAexxa,KAAKrI,IAIhC,GAAI65a,EAAev5a,OAAS,EAAG,CAC3B,IAAIw5a,EAAgBD,EAAeA,EAAev5a,OAAS,GAAGunE,OAC1DkyW,EAAgB31a,EAAKyjE,OACZqqW,EAAY4H,GAEzB5H,EAAY4H,GAAiB11a,EAAK+C,GAClCtD,KAAK+tC,QAAQ2sB,UAAU2zW,EAAY4H,IAAgBjyW,OAASiyW,EAC5D5H,EAAY6H,GAAiBF,EAAeA,EAAev5a,OAAS,GAAG6G,GACvEtD,KAAK+tC,QAAQ2sB,UAAU2zW,EAAY6H,IAAgBlyW,OAASkyW,EAClC,QAAtBl2a,KAAK+tC,QAAQxP,KACbv+B,KAAK40a,YAAYU,EAAUjH,EAAY2H,EAAeA,EAAev5a,OAAS,GAAGunE,SAGjFhkE,KAAK+tC,QAAQynY,yBAK7BlH,EAAejza,UAAUg7a,oBAAsB,WAC3C,IAAI7B,EAAgBx0a,KAAK+tC,QAAQmd,cACjCspX,EAAcnsL,KAAKroP,KAAK+tC,SACW,IAA/BymY,EAAc9pX,MAAMjuD,QAAoD,IAApC+3a,EAAc/pX,WAAWhuD,SAC7D+3a,EAAcluX,YAAckuX,EAAc9pX,MAAM,GAAGpE,YACnDkuX,EAAczia,QAAQu0C,YAAckuX,EAAc9pX,MAAM,GAAGpE,YAC3DkuX,EAAczia,QAAQs9C,MAAQmlX,EAAc9pX,MAAM,GAAG2E,QAI7Di/W,EAAejza,UAAUgja,sBAAwB,SAAU75W,GACvDxkD,KAAKs2a,0BACLt2a,KAAK2+Z,iBACL,IAAI4X,KACAC,KACJD,EAAWv2a,KAAK+tC,QAAQ0oY,mBAAmBF,IAEvCC,EADuD,sBAAvDx2a,KAAK+tC,QAAQmd,cAAcwrX,wBACbnyX,GAAeC,EAAQ+xX,GAGvBv2a,KAAK+tC,QAAQ8/X,cAAcC,YAAYtpX,IAEzC/nD,QACZuD,KAAK0+Z,cAAc8X,GAAa,IAGxClI,EAAejza,UAAUi7a,wBAA0B,WAC/C,IACIt1a,EADayzD,GAAmBz0D,KAAK+tC,QAAQ/sC,QAAQsC,IAChC2rB,eAAejvB,KAAK+tC,QAAQ/sC,QAAQsC,GAAK,mCAC9DtC,GACAuD,EAAOvD,IAIfsta,EAAejza,UAAU4ka,kBAAoB,SAAUvoX,EAAU36C,EAAKo2B,EAAOoX,EAASpjC,EAAQ44Z,GAC1F,IACIhoX,EAEA+5Q,EAEAD,EAEA8kH,GAAmB,EAYvB,OAXI55a,aAAe0hD,GAEf1G,EADgBh7C,EACU0tD,WAAW,GAEhC1tD,aAAemhD,IAAal+C,KAAK+tC,QAAQwsB,uBAC9Cv6D,KAAK2+Z,iBACL5mX,EAAY/3C,KAAK+tC,QAAQwsB,sBAEZ,sBAAb7iB,GAAiD,sBAAbA,IACpCi/X,GAAmB,GAEN,uBAAbj/X,GAAkD,sBAAbA,GACrCo6Q,EAAK3+R,EAAMpmB,GAAK4pa,EAAmBpsY,EAAQ4a,aAAap4C,EAAIgrC,EAAU/I,YAAYjiC,GAClF8kT,EAAK1+R,EAAMnmB,GAAK2pa,EAAmBpsY,EAAQ4a,aAAan4C,EAAI+qC,EAAU/I,YAAYhiC,GAC3EhN,KAAK42a,cAAc7+X,EAAW+5Q,EAAID,EAAI,KAAM1+R,EAAOukB,OAAUv8C,EAAWgM,EAAQ44Z,OAAc5ka,EAAWovC,KAGhHunR,EAAK3+R,EAAMpmB,GAAK4pa,EAAmBpsY,EAAQ6a,aAAar4C,EAAIgrC,EAAUd,YAAYlqC,GAClF8kT,EAAK1+R,EAAMnmB,GAAK2pa,EAAmBpsY,EAAQ6a,aAAap4C,EAAI+qC,EAAUd,YAAYjqC,GAC3EhN,KAAK62a,cAAc9+X,EAAW+5Q,EAAID,EAAI,KAAM1+R,EAAOukB,OAAUv8C,EAAWovC,KAGvF+jY,EAAejza,UAAUkja,kBAAoB,WACzC,IAAImW,EAAgB10a,KAAK+tC,QAAQmd,cACjC,OAAQwpX,EAAmB,MAAEl6Z,OAAOk6Z,EAAcjqX,aAGtD6jX,EAAejza,UAAUsja,eAAiB,SAAUmY,GAChD,GAAI99W,GAAah5D,KAAK+tC,SAAU,CAC5B,IAAI2mY,EAAgB10a,KAAK+tC,QAAQmd,cAC7BozW,EAAat+Z,KAAKu+Z,oBAClBjrU,GACAtqF,SAAUs1Z,EAAYh3Z,YAAcssa,MAAO5za,KAAK+tC,QAAQ0T,eACxDsG,MAAO,WAAYrhD,KAAM,UAAW2xB,QAAQ,GAE5Cy+Y,GACA92a,KAAK+tC,QAAQioH,aAAasrP,GAAauyB,gBAAiBvgV,GAEvDA,EAAIj7D,SACLq8Y,EAAc7oa,QAAU,EACxB6oa,EAAczoa,QAAU,EACxByoa,EAAc1+Z,MAAQ,EACtB0+Z,EAAc3+Z,OAAS,EACvB2+Z,EAAcpuX,YAAc,EAC5BouX,EAAchqX,SACdgqX,EAAcjqX,cACdiqX,EAAc3ia,QAAU,KACxB/R,KAAK+tC,QAAQgpY,qBACTD,IACAxjV,GACItqF,SAAUs1Z,EAAYh3Z,YAAcssa,MAAO5za,KAAK+tC,QAAQ0T,eACxDsG,MAAO,UAAWrhD,KAAM,UAAW2xB,QAAQ,GAE/Cr4B,KAAK+tC,QAAQioH,aAAasrP,GAAauyB,gBAAiBvgV,OAMxEg7U,EAAejza,UAAUi3G,KAAO,SAAUv1G,EAAK+0T,EAAID,GAC/C,IAAIy/G,EAEJ,GAAI/yX,GAAQxhD,IAAQiD,KAAK6ja,yBAAyB/xG,EAAID,EAAI90T,EAAIgV,QAAQgkB,SAAWurB,GAAgBthD,KAAK+tC,SAClG,GAAIhxC,aAAewiD,GAAM,CACrB,IAAIggX,GAAc1zZ,QAAS9O,EAAI8O,QAASI,QAASlP,EAAIkP,SAGrD,GAFAlP,EAAI8O,SAAWimT,EACf/0T,EAAIkP,SAAW4lT,EACX90T,EAAIqd,SAEJ,IAAK,IADDswC,EAAQ1qD,KAAK6ha,kBAAkB9ka,MAC1BZ,EAAI,EAAGA,EAAIuuD,EAAMjuD,OAAQN,IAC9Bm1a,EAAYtxa,KAAK+tC,QAAQ2sB,UAAUhQ,EAAMvuD,GAAGmH,IAC5CtD,KAAKsyG,KAAKg/T,EAAUx/G,EAAID,GAGhC7xT,KAAK+tC,QAAQipY,mBAAmBj6a,EAAKwia,GAAa1zZ,QAAS9O,EAAI8O,QAASI,QAASlP,EAAIkP,cAEpF,CACD,IAAI8rC,EAAYh7C,EACZw6C,EAA4B,WAAnBQ,EAAUrxC,KACnBuwa,GAAU,EAad,GAZKl/X,EAAU9I,cAIXgoY,GAAU,EAHVj3a,KAAK42a,cAAc7+X,EAAW+5Q,EAAID,GAAI,EAAM,KAAM,GAAIt6Q,GAKrDQ,EAAUvI,cAIXynY,GAAU,EAHVj3a,KAAK62a,cAAc9+X,EAAW+5Q,EAAID,GAAI,EAAM,KAAM,GAAIt6Q,IAKrD0/X,EAAS,CACVj3a,KAAKwla,iBAAiBztX,EAAW+5Q,EAAID,GAAI,GACzC,IAAIp4P,GAASzqB,YAAa+I,EAAU/I,YAAaiI,YAAac,EAAUd,aACxEj3C,KAAK+tC,QAAQohY,wBAAwBp3X,KAAe0hB,MAMpE60W,EAAejza,UAAUwqa,eAAiB,SAAU9tX,GAChD,IAAI0hB,GACAzqB,YAAa+I,EAAU/I,YAAaiI,YAAac,EAAUd,YAC3D1H,SAAUwI,EAAUxI,SAAWwI,EAAUxI,cAAWp0C,EACpDuwZ,SAAU3zW,EAAU2zW,SAAW3zW,EAAU2zW,cAAWvwZ,EACpDm/D,aAAcviB,EAAUuiB,aAAeviB,EAAUuiB,kBAAen/D,EAChEwwZ,aAAc5zW,EAAU4zW,aAAe5zW,EAAU4zW,kBAAexwZ,EAChEsuC,SAAUsO,EAAUtO,SAAWsO,EAAUtO,cAAWtuC,GAExD6E,KAAK+tC,QAAQohY,wBAAwBp3X,KAAe0hB,GAEpDz5D,KAAK+tC,QAAQkxX,kBAGjBqP,EAAejza,UAAUu7a,cAAgB,SAAU75a,EAAK+0T,EAAID,EAAIyiH,EAAenhZ,EAAOukB,EAAUH,EAAQpwC,EAAQ44Z,EAAcmX,EAAc3sY,GACxI,IAAIwN,EAAY/3C,KAAK+tC,QAAQ2sB,UAAU39D,EAAIuG,IACvCuga,EAA2B7ja,KAAK6ja,yBAAyB/xG,EAAID,EAAI95Q,EAAUhmC,QAAQgkB,QASvF,GARI6oB,GAAiB7G,IAAc8rX,GACd,sBAAbnsX,GAAqC4J,GAAgBthD,KAAK+tC,WAC9DgK,EAAU/I,YAAYjiC,GAAK+kT,EAC3B/5Q,EAAU/I,YAAYhiC,GAAK6kT,EACV,uBAAbn6Q,GAAwD,eAAnBK,EAAUrxC,MAC/C1G,KAAKm3a,oBAAoBp/X,EAAW5wC,EAAQ44Z,EAAcmX,IAG3C,WAAnBn/X,EAAUrxC,KACV,GAAI6jC,EACAvqC,KAAKo3a,sBAAsBr6a,EAAmB,KAAb26C,EAAmB,qBAAuBA,EAAUo6Q,EAAID,EAAItnR,EAASpX,GAAQokB,QAG9G,IAAK,IAAIp7C,EAAI,EAAGA,EAAIY,EAAI0sC,SAAShtC,OAAQN,IACrC6D,KAAKo3a,sBAAsBr6a,EAAmB,KAAb26C,EAAmB,qBAAuBA,EAAUo6Q,EAAID,EAAI90T,EAAI0sC,SAASttC,GAAIg3B,GAAQokB,GAOlI,OAHK+8X,GACDt0a,KAAK6la,eAAe9tX,GAEjB8rX,GAKXyK,EAAejza,UAAU87a,oBAAsB,SAAUp/X,EAAW5wC,EAAQ44Z,EAAcmX,GACtF,GAAIn/X,EAAUtO,UAAgD,OAApCsO,EAAUtO,SAAS,GAAG5U,aACtC1tB,GAAiC,KAAvB4wC,EAAUxI,UAAoB2nY,GAAe,CAC7D,IAAIt4a,EAAQm5C,EAAUtO,SAAS,GAC3B5qC,EAASk5C,EAAUtO,SAAS,GAC5BlpC,EAAOP,KAAK+tC,QAAQ2sB,UAAU3iB,EAAUxI,UACxC8nY,OAAW,EAiBf,GAhBAz4a,EAAMq4B,OAAO,GAAK8gB,EAAU/I,YACJ,QAApBpwC,EAAMi2B,WAA2C,WAApBj2B,EAAMi2B,WACnCj2B,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAGsQ,EAAIgrC,EAAU/I,YAAYjiC,EAChElO,EAAOo4B,OAAO,GAAGjqB,EAAIpO,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAGuQ,IAG3DpO,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAGuQ,EAAI+qC,EAAU/I,YAAYhiC,EAChEnO,EAAOo4B,OAAO,GAAGlqB,EAAInO,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAGsQ,GAE3DnO,EAAMi2B,YAAcj2B,EAAMnC,QAA2B,IAAjBmC,EAAMnC,UAC1CmC,EAAMnC,OAAS01C,GAAM+F,eAAet5C,EAAMq4B,OAAO,GAAIr4B,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,KAExFoC,EAAOg2B,YAAch2B,EAAOpC,QAA4B,IAAlBoC,EAAOpC,UAC7CoC,EAAOpC,OAAS01C,GAAM+F,eAAet5C,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAIoC,EAAOo4B,OAAOp4B,EAAOo4B,OAAOx6B,OAAS,IACjHoC,EAAOg2B,UAAYsd,GAAMtd,UAAUj2B,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAIoC,EAAOo4B,OAAOp4B,EAAOo4B,OAAOx6B,OAAS,KAEpF,KAA3Bs7C,EAAUuiB,cAAuB17D,EAAMnC,OAAS,GAChD,GAAIs7C,EAAUtO,SAAShtC,OAAS,EAAG,CAC/B,IAAIwsC,EAAO8O,EAAUtO,SAAS,GAC1B6tY,EAAgBnlY,GAAMtd,UAAUoU,EAAKhS,OAAO,GAAIgS,EAAKhS,OAAO,IAC5Dr4B,EAAMi2B,YAAc6d,GAAqB4kY,IACjB,UAApB14a,EAAMi2B,UACNoU,EAAKhS,OAAO,GAAGlqB,EAAInO,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAGsQ,EAAIxM,EAAKwR,QAAQm3B,QAAQ0H,YAAY7jC,EAAI,GAEzE,SAApBnO,EAAMi2B,UACXoU,EAAKhS,OAAO,GAAGlqB,EAAInO,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAGsQ,EAAIxM,EAAKwR,QAAQm3B,QAAQ2H,WAAW9jC,EAAI,GAExE,QAApBnO,EAAMi2B,UACXoU,EAAKhS,OAAO,GAAGjqB,EAAIpO,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAGuQ,EAAIzM,EAAKwR,QAAQm3B,QAAQwH,UAAU1jC,EAAI,GAGhGi8B,EAAKhS,OAAO,GAAGjqB,EAAIpO,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,GAAGuQ,EAAIzM,EAAKwR,QAAQm3B,QAAQyH,aAAa3jC,EAAI,GAEnGi8B,EAAKpU,WAAaoU,EAAKxsC,SACvBwsC,EAAKxsC,OAAS01C,GAAM+F,eAAejP,EAAKhS,OAAO,GAAIgS,EAAKhS,OAAOgS,EAAKhS,OAAOx6B,OAAS,KAExFmC,EAAMnC,OAAS01C,GAAM+F,eAAet5C,EAAMq4B,OAAO,GAAIr4B,EAAMq4B,OAAOr4B,EAAMq4B,OAAOx6B,OAAS,KAEnFmC,EAAMi2B,YAAcyiZ,GAAiBruY,EAAKpU,WAAaoU,EAAKxsC,QACzC,QAApBmC,EAAMi2B,WAA2C,WAApBj2B,EAAMi2B,WACnCoU,EAAKhS,OAAO,GAAKr4B,EAAMq4B,OAAO,GAC9BgS,EAAKhS,OAAOgS,EAAKhS,OAAOx6B,OAAS,GAAGsQ,EAAIk8B,EAAKhS,OAAO,GAAGlqB,IAGvDk8B,EAAKhS,OAAO,GAAKr4B,EAAMq4B,OAAO,GAC9BgS,EAAKhS,OAAOgS,EAAKhS,OAAOx6B,OAAS,GAAGuQ,EAAIi8B,EAAKhS,OAAO,GAAGjqB,GAE3Di8B,EAAKxsC,OAAS01C,GAAM+F,eAAejP,EAAKhS,OAAO,GAAIgS,EAAKhS,OAAOgS,EAAKhS,OAAOx6B,OAAS,IACpFs7C,EAAUtO,SAAShhB,OAAO,EAAG,IAG7B7pB,EAAMnC,OAAS,QAInBmC,EAAMnC,OAAS,QAGlB,GAAImC,EAAMnC,OAAS,EACpB,GAA2B,KAAvBs7C,EAAUxI,SAAiB,CAkB3B,GAjByB,UAArB1wC,EAAOg2B,WACPwiZ,EAAW92a,EAAKwR,QAAQm3B,QAAQ0H,YAChC/xC,EAAOo4B,OAAOp4B,EAAOo4B,OAAOx6B,OAAS,GAAGuQ,EAAIqqa,EAASrqa,GAE3B,SAArBnO,EAAOg2B,WACZwiZ,EAAW92a,EAAKwR,QAAQm3B,QAAQ2H,WAChChyC,EAAOo4B,OAAOp4B,EAAOo4B,OAAOx6B,OAAS,GAAGuQ,EAAIqqa,EAASrqa,GAE3B,QAArBnO,EAAOg2B,WACZwiZ,EAAW92a,EAAKwR,QAAQm3B,QAAQwH,UAChC7xC,EAAOo4B,OAAOp4B,EAAOo4B,OAAOx6B,OAAS,GAAGsQ,EAAIsqa,EAAStqa,IAGrDsqa,EAAW92a,EAAKwR,QAAQm3B,QAAQyH,aAChC9xC,EAAOo4B,OAAOp4B,EAAOo4B,OAAOx6B,OAAS,GAAGsQ,EAAIsqa,EAAStqa,GAEzDlO,EAAOpC,OAAS01C,GAAM+F,eAAem/X,EAAUx4a,EAAOo4B,OAAOp4B,EAAOo4B,OAAOx6B,OAAS,IAChFs7C,EAAUtO,SAAShtC,OAAS,EAAG,EAC3BwsC,EAAO8O,EAAUtO,SAAS,IACrB5U,WAAaoU,EAAKxsC,SACvBwsC,EAAKxsC,OAAS01C,GAAM+F,eAAer5C,EAAOo4B,OAAOp4B,EAAOo4B,OAAOx6B,OAAS,GAAIwsC,EAAKhS,OAAOgS,EAAKhS,OAAOx6B,OAAS,KAGrHs7C,EAAUtO,SAAShhB,OAAO,EAAG,QAG7BsvB,EAAUtO,SAAShhB,OAAO,EAAG,QAKjCthB,GAAU44Z,GAAgBhoX,EAAUuiB,eAAiBylW,GACrDhoX,EAAUtO,UAAgD,OAApCsO,EAAUtO,SAAS,GAAG5U,WAAsB1tB,GAAUA,aAAkBo4C,GAC9Fv/C,KAAKu3a,sBAAsBx/X,EAAW5wC,EAAQ44Z,GAEzC54Z,IAAW4wC,EAAUxI,WAAapoC,EAAO7D,IAAiC,KAA3By0C,EAAUuiB,eAC9DviB,EAAUtO,UAAgD,OAApCsO,EAAUtO,SAAS,GAAG5U,WAAsB1tB,GAAUA,aAAkBo4C,IAC9Fv/C,KAAKw3a,sBAAsBz/X,EAAW5wC,IAOlDmna,EAAejza,UAAUk8a,sBAAwB,SAAUx/X,EAAW5wC,EAAQ44Z,GAC1E,IAAIxvX,EAAOvwC,KAAK+tC,QAAQ8yE,WAAW15G,EAAO4K,QAASguZ,GAC/C5sY,GAAUpmB,EAAGwjC,EAAK1kC,QAASmB,EAAGujC,EAAKtkC,SACnC4oB,EAAYya,GAAiBnc,EAAOhsB,EAAO4K,QAAQm3B,QAAS/hC,EAAO4K,QAAQgkB,QAC3E+4B,EAAe/W,EAAUtO,SAAS,GAClCguY,EAAgB1/X,EAAUtO,SAAS,GACvC,GAAIqlB,EAAaj6B,YAAcA,EAAW,CACtC,IAAI4U,KACA88X,KACJ,GAAIz3W,EAAaj6B,YAAc6d,GAAqB7d,GAAY,CAC5D0xY,KACA,IAAImR,OAAa,EACC,QAAd7iZ,GAAqC,WAAdA,GACvB6iZ,EAA4B,QAAd7iZ,GACVnuB,KAAM,aAAcixa,YAAY,EAAM9iZ,UAAWA,EACjDp4B,OAAQ4P,KAAKE,IAAIuiD,EAAa73B,OAAO,GAAGjqB,EAAImmB,EAAMnmB,KAG9CtG,KAAM,aAAcixa,YAAY,EAAM9iZ,UAAWA,EACjDp4B,OAAQ4P,KAAKE,IAAI4mB,EAAMnmB,EAAI8hD,EAAa73B,OAAO,GAAGjqB,IAE1Du5Z,EAAaz3W,EAAa73B,OAAO,GAAGlqB,EAAIomB,EAAMpmB,GACxCrG,KAAM,aAAcixa,YAAY,EAAM9iZ,UAAW,QAASp4B,OAASqyD,EAAa73B,OAAO,GAAGlqB,EAAIomB,EAAMpmB,IACpGrG,KAAM,aAAcixa,YAAY,EAAM9iZ,UAAW,OAAQp4B,OAAS02B,EAAMpmB,EAAI+hD,EAAa73B,OAAO,GAAGlqB,KAGzG2qa,EAA4B,UAAd7iZ,GACVnuB,KAAM,aAAcixa,YAAY,EAAM9iZ,UAAWA,EACjDp4B,OAAQ4P,KAAKE,IAAIuiD,EAAa73B,OAAO,GAAGlqB,EAAIomB,EAAMpmB,KAG9CrG,KAAM,aAAcixa,YAAY,EAAM9iZ,UAAWA,EACjDp4B,OAAQ4P,KAAKE,IAAI4mB,EAAMpmB,EAAI+hD,EAAa73B,OAAO,GAAGlqB,IAE1Dw5Z,EAAaz3W,EAAa73B,OAAO,GAAGjqB,EAAImmB,EAAMnmB,GACxCtG,KAAM,aAAcmuB,UAAW,MAAO8iZ,YAAY,EAAMl7a,OAASqyD,EAAa73B,OAAO,GAAGjqB,EAAImmB,EAAMnmB,IAClGtG,KAAM,aAAcmuB,UAAW,SAAU8iZ,YAAY,EAAMl7a,OAAS02B,EAAMnmB,EAAI8hD,EAAa73B,OAAO,GAAGjqB,IAE/Gy8B,EAASjlC,KAAK,IAAI4uC,GAAkB2E,EAAW,WAAY2/X,GAAY,IACvEjuY,EAASjlC,KAAK,IAAI4uC,GAAkB2E,EAAW,WAAYwuX,GAAW,SAGtEA,GAAc7/Z,KAAM,aAAcmuB,UAAWA,EAAWp4B,OAAQ,GAAIk7a,YAAY,GAChFluY,EAASjlC,KAAK,IAAI4uC,GAAkB2E,EAAW,WAAYwuX,GAAW,IAEtEz3W,EAAaj6B,YAAc6d,GAAqB7d,KAC9B,QAAdA,GAAqC,WAAdA,GACvBi6B,EAAa73B,OAAO,GAAGlqB,EAAIomB,EAAMpmB,EACjC+hD,EAAa73B,OAAO,GAAGjqB,EAAI8hD,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,GAAGuQ,EAAmB,QAAd6nB,EAChF1B,EAAMnmB,EAAI,GAAKmmB,EAAMnmB,EAAI,KAG7B8hD,EAAa73B,OAAO,GAAGjqB,EAAImmB,EAAMnmB,EACjC8hD,EAAa73B,OAAO,GAAGlqB,EAAI+hD,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,GAAGsQ,EAAmB,UAAd8nB,EAChF1B,EAAMpmB,EAAI,GAAKomB,EAAMpmB,EAAI,IAEjC+hD,EAAaryD,OAAS01C,GAAM+F,eAAe4W,EAAa73B,OAAO,GAAI63B,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,IACpHg7a,EAAch7a,OAAS01C,GAAM+F,eAAe4W,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,GAAIg7a,EAAcxgZ,OAAOwgZ,EAAcxgZ,OAAOx6B,OAAS,KAExJs7C,EAAUtO,SAAWA,EAASjvB,OAAOu9B,EAAUtO,eAG/CqlB,EAAa73B,OAAO,GAAK9D,EACP,QAAd0B,GAAqC,WAAdA,EACvBi6B,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,GAAGsQ,EAAIomB,EAAMpmB,EAG9D+hD,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,GAAGuQ,EAAImmB,EAAMnmB,EAElE8hD,EAAaryD,OAAS01C,GAAM+F,eAAe4W,EAAa73B,OAAO,GAAI63B,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,IACpHg7a,EAAch7a,OAAS01C,GAAM+F,eAAe4W,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,GAAIg7a,EAAcxgZ,OAAOwgZ,EAAcxgZ,OAAOx6B,OAAS,KAO5J6xa,EAAejza,UAAUwka,sBAAwB,SAAU9nX,EAAW6/X,GAClE,IAAK,IAAIz7a,EAAI,EAAGA,EAAI47C,EAAUtO,SAAShtC,OAAS,EAAGN,IAAK,CACpD,IAAIouC,EAAUwN,EAAUtO,SAAS,GAC7Bc,EAAQotY,aACJC,EACArtY,EAAQotY,YAAa,GAGrB5/X,EAAUtO,SAAShhB,OAAOtsB,EAAG,GAC7BA,QAQhBmya,EAAejza,UAAUm8a,sBAAwB,SAAUz/X,EAAW5wC,GAClEnH,KAAK6/Z,sBAAsB9nX,GAC3B,IACI/I,EACA6oY,EAFA5oY,EAAgB9nC,EAAO4K,QAAQqI,SAAS,GAAG8uB,QAG3C4lB,EAAe/W,EAAUtO,SAAS,GAClCm9X,EAAc7uX,EAAUtO,SAAS,GACjCA,KACJ,GAA+B,UAA3BqlB,EAAaj6B,WAAoD,SAA3Bi6B,EAAaj6B,UAEnD,GADAma,EAA0C,SAA3B8f,EAAaj6B,UAAwBoa,EAAc4B,WAAa5B,EAAc2B,YACzFke,EAAaryD,OAASwyC,EAAcj5B,OAAsC,SAA3B84C,EAAaj6B,WAC5Dma,EAAYjiC,GAAK+hD,EAAa73B,OAAO,GAAGlqB,GAAkC,UAA3B+hD,EAAaj6B,WAC5Dma,EAAYjiC,GAAK+hD,EAAa73B,OAAO,GAAGlqB,EACxC+hD,EAAa73B,OAAO,GAAGjqB,EAAI8hD,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,GAAGuQ,EAAIgiC,EAAYhiC,EAC/F8hD,EAAa73B,OAAO,GAAGlqB,EAAIiiC,EAAYjiC,EACvC+hD,EAAaryD,OAAS01C,GAAM+F,eAAe4W,EAAa73B,OAAO,GAAI63B,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,IACpHmqa,EAAYnqa,OAAS01C,GAAM+F,eAAe4W,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,GAAImqa,EAAY3vY,OAAO2vY,EAAY3vY,OAAOx6B,OAAS,QAE7I,CACD,IAAIo4B,OAAY,EAOhBgjZ,EAA8B,YAL1BhjZ,EADA+xY,EAAY/xY,UACA+xY,EAAY/xY,UAGZsd,GAAMtd,UAAU+xY,EAAY3vY,OAAO,GAAI2vY,EAAY3vY,OAAO2vY,EAAY3vY,OAAOx6B,OAAS,KAE5DwyC,EAAc0B,aAAe1B,EAAcyB,UACjFk2X,EAAYnqa,QAAUmqa,EAAY/xY,YAClC+xY,EAAYnqa,OACO,QAAdo4B,EAAuBi6B,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,GAAGuQ,GAAK6qa,EAAa7qa,EAAI,IAC7F6qa,EAAa7qa,EAAI,GAAM8hD,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,GAAGuQ,GAExF8hD,EAAaryD,OAASqyD,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,GAAGsQ,EAAI8qa,EAAa9qa,EAC3F+hD,EAAaj6B,UAAai6B,EAAaryD,OAAS,EAAK,QAAU,OAC/D,IAAI8pa,GAAc7/Z,KAAM,aAAcmuB,UAAWA,EAAWp4B,OAAQ,IACpEgtC,EAASjlC,KAAK,IAAI4uC,GAAkB2E,EAAW,WAAYwuX,GAAW,IACtExuX,EAAUtO,SAAWA,EAASjvB,OAAOu9B,EAAUtO,eAKnD,GADAuF,EAA0C,WAA3B8f,EAAaj6B,UAA0Boa,EAAc0B,aAAe1B,EAAcyB,UAC7Foe,EAAaryD,OAASwyC,EAAcl5B,QAAuC,QAA3B+4C,EAAaj6B,WAC7Dma,EAAYhiC,GAAK8hD,EAAa73B,OAAO,GAAGjqB,GACZ,WAA3B8hD,EAAaj6B,WAA0Bma,EAAYhiC,GAAK8hD,EAAa73B,OAAO,GAAGjqB,EAChF8hD,EAAa73B,OAAO,GAAGlqB,EAAI+hD,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,GAAGsQ,EAAIiiC,EAAYjiC,EAC/F+hD,EAAa73B,OAAO,GAAGjqB,EAAIgiC,EAAYhiC,EACvC8hD,EAAaryD,OAAS01C,GAAM+F,eAAe4W,EAAa73B,OAAO,GAAI63B,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,IACpHmqa,EAAYnqa,OAAS01C,GAAM+F,eAAe4W,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,GAAImqa,EAAY3vY,OAAO2vY,EAAY3vY,OAAOx6B,OAAS,QAE7I,CACDo7a,EAA0C,SAA1BjR,EAAY/xY,UAAwBoa,EAAc4B,WAAa5B,EAAc2B,YACzF/b,OAAY,EAEZA,EADA+xY,EAAY/xY,UACA+xY,EAAY/xY,UAGZsd,GAAMtd,UAAU+xY,EAAY3vY,OAAO,GAAI2vY,EAAY3vY,OAAO2vY,EAAY3vY,OAAOx6B,OAAS,IAElGmqa,EAAYnqa,QAAUmqa,EAAY/xY,YAClC+xY,EAAYnqa,OACO,SAAdo4B,EAAwBi6B,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,GAAGsQ,GAAK8qa,EAAa9qa,EAAI,IAC9F8qa,EAAa9qa,EAAI,GAAM+hD,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,GAAGsQ,GAExF+hD,EAAaryD,OAASqyD,EAAa73B,OAAO63B,EAAa73B,OAAOx6B,OAAS,GAAGuQ,EAAI6qa,EAAa7qa,EAC3F8hD,EAAaj6B,UAAai6B,EAAaryD,OAAS,EAAK,SAAW,MAC5D8pa,GAAc7/Z,KAAM,aAAcmuB,UAAWA,EAAWp4B,OAAQ,IACpEgtC,EAASjlC,KAAK,IAAI4uC,GAAkB2E,EAAW,WAAYwuX,GAAW,IACtExuX,EAAUtO,SAAWA,EAASjvB,OAAOu9B,EAAUtO,YAO3D6kY,EAAejza,UAAU+7a,sBAAwB,SAAUr/X,EAAW/6C,EAAO80T,EAAID,EAAIxoR,EAAKlW,EAAOokB,GAC7F,IAAItlC,EAAS8lC,EAAUtO,SAASlrC,QAAQ8qC,GACpCkB,EAAUwN,EAAUtO,SAASx3B,GAC7Bs4B,IACc,sBAAVvtC,IAAkCutC,EAAQ8H,QAAQ1wB,OAAS4oB,EAAQ8H,QAAQC,UAC3E/H,EAAQ8H,SACJC,SAAUyF,EAAUzF,SAASyF,EAAU/I,YAAa7b,GACpDxR,MAAOwwB,GAAM8G,UAAUlB,EAAU/I,YAAa7b,IAGnC,sBAAVn2B,IAAkCutC,EAAQgI,QAAQ5wB,OAAS4oB,EAAQgI,QAAQD,UAChF/H,EAAQgI,SACJD,SAAUyF,EAAUzF,SAASyF,EAAUd,YAAa9jB,GACpDxR,MAAOwwB,GAAM8G,UAAUlB,EAAUd,YAAa9jB,KAGlC,uBAAVn2B,IAAmC+6C,EAAUxI,UAAsB,uBAAVvyC,IAAmC+6C,EAAU2zW,WACzGn0W,GAAU8F,GAAc9S,EAAQ8H,UAAYgL,GAAc9S,EAAQgI,UACjEJ,GAAMC,aAAa7H,EAAQgR,UAC3BhR,EAAQ4a,aAAe7H,GAAgBvF,EAAU/I,YAAa+I,EAAUd,cAExE9E,GAAMC,aAAa7H,EAAQvB,UAC3BuB,EAAQ6a,aAAe9H,GAAgBvF,EAAUd,YAAac,EAAU/I,eAG7D,sBAAVhyC,GAA4C,uBAAVA,IAAmCu6C,GAAU8F,GAAc9S,EAAQ8H,UAC1G9H,EAAQ4a,aAAap4C,GAAK+kT,EAC1BvnR,EAAQ4a,aAAan4C,GAAK6kT,EACpB1/Q,GAAMC,aAAa7H,EAAQgR,cAC7BhR,EAAQgR,QAAWxuC,EAAGw9B,EAAQ4a,aAAap4C,EAAGC,EAAGu9B,EAAQ4a,aAAan4C,MAG3D,sBAAVhQ,GAA4C,uBAAVA,IAAmCu6C,GAAU8F,GAAc9S,EAAQgI,YAC1GhI,EAAQ6a,aAAar4C,GAAK+kT,EAC1BvnR,EAAQ6a,aAAap4C,GAAK6kT,EACpB1/Q,GAAMC,aAAa7H,EAAQvB,cAC7BuB,EAAQvB,QAAWj8B,EAAGw9B,EAAQ6a,aAAar4C,EAAGC,EAAGu9B,EAAQ6a,aAAap4C,OAMtFsha,EAAejza,UAAUw7a,cAAgB,SAAU95a,EAAK+0T,EAAID,EAAIyiH,EAAenhZ,EAAOukB,EAAUH,EAAQhN,GACpG,IAAIwN,EAAY/3C,KAAK+tC,QAAQ2sB,UAAU39D,EAAIuG,IACvCw0a,EAAsB93a,KAAK6ja,yBAAyB/xG,EAAID,EAAI95Q,EAAUhmC,QAAQgkB,QAClF,GAAI+oB,GAAiB/G,IAA2B,sBAAbL,GAC5BogY,GAAuBx2X,GAAgBthD,KAAK+tC,WAC/CgK,EAAUd,YAAYlqC,GAAK+kT,EAC3B/5Q,EAAUd,YAAYjqC,GAAK6kT,EACV,uBAAbn6Q,GAAwD,eAAnBK,EAAUrxC,MAC/CqxC,EAAUtO,UAAYsO,EAAUtO,SAAShtC,OAAS,GAAG,CACrD,IAAI+lC,EAAOuV,EAAUtO,SAASsO,EAAUtO,SAAShtC,OAAS,GACtD+lC,GAA4E,IAApEuV,EAAUtO,SAASsO,EAAUtO,SAAShtC,OAAS,GAAGw6B,OAAOx6B,SAC1C,SAAnB+lC,EAAK3N,WAA2C,UAAnB2N,EAAK3N,UAClC2N,EAAKvL,OAAOuL,EAAKvL,OAAOx6B,OAAS,GAAGsQ,EAAIgrC,EAAUd,YAAYlqC,EAG9Dy1B,EAAKvL,OAAOuL,EAAKvL,OAAOx6B,OAAS,GAAGuQ,EAAI+qC,EAAUd,YAAYjqC,EAElEw1B,EAAK/lC,OAAS01C,GAAM+F,eAAe1V,EAAKvL,OAAO,GAAIuL,EAAKvL,OAAOuL,EAAKvL,OAAOx6B,OAAS,IACpF+lC,EAAK3N,UAAYsd,GAAMtd,UAAU2N,EAAKvL,OAAO,GAAIuL,EAAKvL,OAAOuL,EAAKvL,OAAOx6B,OAAS,KAI9F,GAAuB,WAAnBs7C,EAAUrxC,KACV,GAAI6jC,EACAvqC,KAAKo3a,sBAAsBr6a,EAAmB,KAAb26C,EAAmB,qBAAuBA,EAAUo6Q,EAAID,EAAItnR,EAASpX,GAAQokB,QAG9G,IAAK,IAAIp7C,EAAI,EAAGA,EAAIY,EAAI0sC,SAAShtC,OAAQN,IACrC6D,KAAKo3a,sBAAsBr6a,EAAmB,KAAb26C,EAAmB,qBAAuBA,EAAUo6Q,EAAID,EAAI90T,EAAI0sC,SAASttC,GAAIg3B,GAAQokB,GAOlI,OAHK+8X,GACDt0a,KAAK6la,eAAe9tX,GAEjB+/X,GAGXxJ,EAAejza,UAAUmqa,iBAAmB,SAAUzoa,EAAK+0T,EAAID,EAAIyiH,EAAeyD,GAC9E,IAAIhgY,EAAY/3C,KAAK+tC,QAAQ2sB,UAAU39D,EAAIuG,IAC3C,IAAwB,aAAnBy0C,EAAUrxC,MAA0C,WAAnBqxC,EAAUrxC,OAAsBqxC,EAAUtO,SAAShtC,OAAS,EAAG,CACjG,QAAsBtB,IAAlB48a,GAA+BhgY,EAAUtO,SAASsuY,GAClDhgY,EAAUtO,SAASsuY,GAAe5kZ,MAAMpmB,GAAK+kT,EAC7C/5Q,EAAUtO,SAASsuY,GAAe5kZ,MAAMnmB,GAAK6kT,OAG7C,IAAK,IAAI11T,EAAI,EAAGA,EAAI47C,EAAUtO,SAAShtC,OAAS,EAAGN,IAC/C47C,EAAUtO,SAASttC,GAAGg3B,MAAMpmB,GAAK+kT,EACjC/5Q,EAAUtO,SAASttC,GAAGg3B,MAAMnmB,GAAK6kT,EAGpCyiH,GACDt0a,KAAK6la,eAAe9tX,GAG5B,OAAO,GAGXu2X,EAAejza,UAAU28a,cAAgB,SAAU13a,EAAQ4mD,EAASvlC,EAAO0tC,EAAO4oX,GAC9E5oX,EAAQA,MACR,IAAI9jB,EAASL,KACbiB,GAAaZ,EAAQ5pB,EAAO0tC,EAAMtiD,EAAGsiD,EAAMriD,GAC3C,IAAK,IAAI5O,EAAK,EAAG85a,EAAYhxX,EAAS9oD,EAAK85a,EAAUz7a,OAAQ2B,IAAM,CAC/D,IAAIrB,EAAMm7a,EAAU95a,GACpB,GAAIrB,aAAewiD,IACf,GAAIL,GAAUniD,IAAQukD,GAAgBthD,KAAK+tC,SAAU,CACjD,IAAsB,IAAlBkqY,GAA2B33a,IAAWvD,EAAK,CAC3CA,EAAIupD,aAAe3kC,EACnB5kB,EAAIupD,aAAevpD,EAAIupD,YAAc,KAAO,IAC5C,IAAI3b,EAAYW,GAAuBC,GAAUx+B,EAAGhQ,EAAI8O,QAASmB,EAAGjQ,EAAIkP,UACxElP,EAAI8O,QAAU8+B,EAAU59B,EACxBhQ,EAAIkP,QAAU0+B,EAAU39B,EACxBhN,KAAK+tC,QAAQipY,mBAAmBj6a,MAAW8O,QAAS9O,EAAI8O,QAASI,QAASlP,EAAIkP,QAASq6C,YAAavpD,EAAIupD,cAE5G,GAAIvpD,EAAIowZ,UAAW,CACf,IAAIv4S,EAAW50G,KAAK+tC,QAAQ2sB,UAAU39D,EAAIowZ,WACtClmW,EAAQjnD,KAAK+tC,QAAQ0/W,WAAW0qB,iBAAiBvjU,EAAU73G,EAAIuG,GAAItD,KAAK+tC,SAC5E/tC,KAAK+tC,QAAQ0/W,WAAW2qB,oBAAoBnxX,EAAOlqD,EAAKiD,KAAK+tC,SAE7DhxC,EAAIqd,UAAYrd,EAAIqd,SAAS3d,QAC7BuD,KAAKw6U,YAAYz9U,EAAKmqD,SAK9BlnD,KAAKq4a,aAAat7a,EAAK4kB,EAAO0tC,IAAWtiD,EAAGhQ,EAAIgV,QAAQlG,QAASmB,EAAGjQ,EAAIgV,QAAQ9F,UAEpFjM,KAAK+tC,QAAQqhY,oBAAoBrya,GAErCiD,KAAK+tC,QAAQkxX,kBAGjBqP,EAAejza,UAAUyka,iBAAmB,SAAUj/J,GAKlD,OAJK7gQ,KAAK+tC,QAAQ4c,aAAaxM,YAAc6iW,GAAgBs3B,aACtDt4a,KAAK+ia,gBACR/ia,KAAK+tC,QAAQg1X,eAAejD,iBAAiBj/J,GAE1CA,GAEXytK,EAAejza,UAAU4ma,UAAY,SAAUtgZ,GAC3C,OAAK3hB,KAAK+tC,QAAQ4c,aAAaxM,YAAc6iW,GAAgBs3B,aACtDt4a,KAAK+ia,eACD/ia,KAAK+ia,eAAed,UAAUjia,KAAK+tC,QAASpsB,GAG5C,GAGf2sZ,EAAejza,UAAUg9a,aAAe,SAAU5+W,EAAM93C,EAAO0tC,GAC3D,IAAKoK,EAAKxqB,gBAAkBwqB,EAAKjqB,cAAe,CAC5C,IAAIjE,EAASL,KACbiB,GAAaZ,EAAQ5pB,EAAO0tC,EAAMtiD,EAAGsiD,EAAMriD,GAC3CysD,EAAKzqB,YAAc1D,GAAuBC,EAAQkuB,EAAKzqB,aACvDyqB,EAAKxiB,YAAc3L,GAAuBC,EAAQkuB,EAAKxiB,aACvD,IAAI+2C,GAAYh/C,YAAayqB,EAAKzqB,YAAaiI,YAAawiB,EAAKxiB,aACjEj3C,KAAK+tC,QAAQohY,wBAAwB11W,KAAUu0B,KAIvDsgV,EAAejza,UAAUyoD,MAAQ,SAAU/mD,EAAK0zD,EAAIC,EAAIrB,EAAOsB,GAC3D,IAAIpwD,EAAOP,KAAK+tC,QAAQ2sB,UAAU39D,EAAIuG,IAClCgua,EAAW/wa,EAEXS,EAAUT,EAAKwR,QACnB,QAAiC5W,IAA7B6F,EAAQy4C,WAAWzjC,YAAqD7a,IAA9B6F,EAAQy4C,WAAW1jC,QAAwBurC,GAAgBthD,KAAK+tC,SAAU,CACpH,GAAIujY,EAASl3Z,SAAU,CAEnB,IAAK,IAAIhc,EAAK,EAAG+pX,EADLnoX,KAAK6ha,kBAAkByP,MACDlza,EAAK+pX,EAAQ1rX,OAAQ2B,IAAM,CACzD,IAAIi7B,EAAO8uV,EAAQ/pX,GACnB4B,KAAKu4a,YAAY9nX,EAAIC,EAAIrB,EAAOh2B,EAAMr4B,EAAS2vD,GAEnD5zD,EAAIgV,QAAQ0tN,QAAQ,IAAIhwM,IACxB1yB,EAAIgV,QAAQowY,QAAQplZ,EAAIgV,QAAQ4mD,aAChC34D,KAAK+tC,QAAQyqY,kBAAkBj4a,QAG/BP,KAAKu4a,YAAY9nX,EAAIC,EAAIrB,EAAO9uD,EAAMS,EAAS2vD,GAEnD,IAAI56B,EAASoxB,GAAUpqD,EAAIgV,SAE3B,IAD+B/R,KAAK6ja,8BAAyB1oa,OAAWA,EAAW46B,GAG/E,OADA/1B,KAAK8jD,MAAM/mD,EAAK,EAAI0zD,EAAI,EAAIC,EAAIrB,IACzB,EAEXrvD,KAAK+tC,QAAQqhY,oBAAoBrya,GAErC,OAAO,GAGXuxa,EAAejza,UAAUwma,kBAAoB,SAAUtha,EAAMmqD,EAAOutX,GAEhE,IAAK,IADD5+Y,EAAO94B,EACFpE,EAAI,EAAGA,EAAIk9B,EAAKjf,SAAS3d,OAAQN,KACtCoE,EAAQP,KAAK+tC,QAAQ2sB,UAAUrhC,EAAKjf,SAASje,KACnCie,UAIF69Z,GACAvtX,EAAMlmD,KAAKjE,GAEfmqD,EAAQ1qD,KAAK6ha,kBAAkBtha,EAAMmqD,IANrCA,EAAMlmD,KAAKjE,GASnB,OAAOmqD,GAEX4jX,EAAejza,UAAUm/U,YAAc,SAAUj6U,EAAMmqD,GACnD,IAAIrxB,EAAO94B,EACX,GAAIA,EAAK6Z,SACL,IAAK,IAAIje,EAAI,EAAGA,EAAIk9B,EAAKjf,SAAS3d,OAAQN,IACtCoE,EAAQP,KAAK+tC,QAAQ2sB,UAAUrhC,EAAKjf,SAASje,IAC7CuuD,EAAMlmD,KAAKjE,GAGnB,OAAOmqD,GAGX4jX,EAAejza,UAAUyma,WAAa,SAAUx+Z,GAE5C,OADWtD,KAAK+tC,QAAQ2sB,UAAUp3D,IAItCgra,EAAejza,UAAUk9a,YAAc,SAAU9nX,EAAIC,EAAIrB,EAAOtyD,EAAKiE,EAAS2vD,GAC1EF,EAAKA,EAAK,EAAI,EAAIA,EAClBC,EAAKA,EAAK,EAAI,EAAIA,EAGL3zD,EAAIgV,QAAQlG,QAAkB9O,EAAIgV,QAAQ9F,QAC5ClP,EAAIgV,QAAQ0nC,WAAWzjC,MAAejZ,EAAIgV,QAAQ0nC,WAAW1jC,OAExE,GAAW,IAAP06C,GAAmB,IAAPC,EAAU,CACtB,IAAI16C,OAAQ,EACRD,OAAS,EACb,GAAIhZ,aAAewiD,GAAM,CACrB,IACIk/R,OAAW,EACXx3R,OAAQ,EACY,UAHpB1mD,EAAOxD,GAGFo8B,MAAMzyB,MAAmBnG,EAAK44B,MAAMy0X,SAASD,WAAWE,WAC1DttZ,EAAK44B,MAAMy0X,SAASD,WAAWE,UAAUpxZ,OAAS,IACrDwqD,EAAQjnD,KAAK+tC,QAAQ0/W,WAAW0qB,iBAAiB53a,EAAMA,EAAK+C,GAAItD,KAAK+tC,SACrE0wS,EAAWl+U,EAAKwR,QAAQgkB,OAAO+G,aAAamqB,IAEhDjxC,EAAQzV,EAAKwR,QAAQ0nC,WAAWzjC,MAAQy6C,EACxC16C,EAASxV,EAAKwR,QAAQ0nC,WAAW1jC,OAAS26C,OACpBv1D,IAAlBoF,EAAKq+B,UAA4C,IAAlBr+B,EAAKq+B,WACpC5oB,EAAQ3J,KAAK8T,IAAI5f,EAAKq+B,SAAU5oB,SAEd7a,IAAlBoF,EAAKssD,UAA4C,IAAlBtsD,EAAKssD,WACpC72C,EAAQ3J,KAAKC,IAAI/L,EAAKssD,SAAU72C,SAEb7a,IAAnBoF,EAAKqsD,WAA8C,IAAnBrsD,EAAKqsD,YACrC72C,EAAS1J,KAAK8T,IAAI5f,EAAKqsD,UAAW72C,SAEf5a,IAAnBoF,EAAKosD,WAA8C,IAAnBpsD,EAAKosD,YACrC52C,EAAS1J,KAAKC,IAAI/L,EAAKosD,UAAW52C,IAElC0oU,IACAzoU,EAAQ3J,KAAKC,IAAI0J,EAAQixC,EAAMx6C,MAAQlM,EAAKwR,QAAQgkB,OAAOhpB,GAC3DgJ,EAAS1J,KAAKC,IAAIyJ,EAASkxC,EAAMt6C,OAASpM,EAAKwR,QAAQgkB,OAAO/oB,IAElEyjD,EAAKz6C,EAAQzV,EAAKk5C,WAAWzjC,MAC7B06C,EAAK36C,EAASxV,EAAKk5C,WAAW1jC,OAElC,IAAIw1B,EAASL,KACTutY,OAAa,EACZ9nX,IACDA,EAAY5zD,GAGhB,IAAIgQ,GADJ0ra,EAAa9nX,EAAU5+C,SACJlG,QAAU4sa,EAAWh/X,WAAWzjC,MAAQyia,EAAWppX,MAAMtiD,EACxEC,EAAIyra,EAAWxsa,QAAUwsa,EAAWh/X,WAAW1jC,OAAS0ia,EAAWppX,MAAMriD,EACzEkkC,GAAankC,EAAGA,EAAI0ra,EAAWh/X,WAAWzjC,MAAQq5C,EAAMtiD,EAAGC,EAAGA,EAAIyra,EAAWh/X,WAAW1jC,OAASs5C,EAAMriD,GAK3G,GAJAkkC,EAAW2f,GAAY4nX,EAAWnyX,YAAamyX,EAAW5sa,QAAS4sa,EAAWxsa,QAASilC,GACvF/E,GAAaZ,GAASktY,EAAWnyX,YAAapV,EAASnkC,EAAGmkC,EAASlkC,GACnEw/B,GAAYjB,EAAQklB,EAAIC,EAAIxf,EAASnkC,EAAGmkC,EAASlkC,GACjDm/B,GAAaZ,EAAQktY,EAAWnyX,YAAapV,EAASnkC,EAAGmkC,EAASlkC,GAC9DjQ,aAAewiD,GAAM,CACrB,IAAIh/C,EAEAw4C,EADAvsC,OAAO,EAEPskD,EAAcxlB,GAAuBC,GAAUx+B,GAH/CxM,EAAOxD,GAGgDgV,QAAQlG,QAASmB,EAAGzM,EAAKwR,QAAQ9F,UACxFysa,EAAUn4a,EAAKwR,QAAQlG,QAAUtL,EAAKwR,QAAQ0nC,WAAWzjC,MAAQzV,EAAK8uD,MAAMtiD,EAC5E4ra,EAASp4a,EAAKwR,QAAQ9F,QAAU1L,EAAKwR,QAAQ0nC,WAAW1jC,OAASxV,EAAK8uD,MAAMriD,EAChF,GAAIgJ,EAAQ,EACR,GAAIzV,EAAK4sZ,UAAW,CAChB,IAAIt+R,EAAW7uH,KAAK+tC,QAAQ2sB,UAAUn6D,EAAK4sZ,aACtCt+R,EAASjwF,UAAcr+B,EAAK08B,OAAOzwB,KAAOwJ,EAAS64G,EAASjwF,YAC7Dr+B,EAAKyV,MAAQA,EACbzV,EAAKsL,QAAUilD,EAAY/jD,QAI/BxM,EAAKyV,MAAQA,EACbzV,EAAKsL,QAAUilD,EAAY/jD,EAGnC,GAAIgJ,EAAS,EACT,GAAIxV,EAAK4sZ,UAAW,CAChB,IAAI/9R,EAAWpvH,KAAK+tC,QAAQ2sB,UAAUn6D,EAAK4sZ,aACtC/9R,EAASxiE,WAAersD,EAAK08B,OAAOvwB,IAAMqJ,EAAUq5G,EAASxiE,aAC9DrsD,EAAKwV,OAASA,EACdxV,EAAK0L,QAAU6kD,EAAY9jD,QAI/BzM,EAAKwV,OAASA,EACdxV,EAAK0L,QAAU6kD,EAAY9jD,EAGnCR,EAAOjM,EAAKwR,QAAQlG,QAAUtL,EAAKwR,QAAQ0nC,WAAWzjC,MAAQzV,EAAK8uD,MAAMtiD,EACzEgsC,EAAQx4C,EAAKwR,QAAQ9F,QAAU1L,EAAKwR,QAAQ0nC,WAAW1jC,OAASxV,EAAK8uD,MAAMriD,EAC5DhN,KAAK+tC,QAAQ2sB,UAAUn6D,EAAK4sZ,aACzB5sZ,EAAK08B,OAAOvwB,KAAOqsC,EAAQ4/X,IAAY,GACpDp4a,EAAK08B,OAAOzwB,MAAQA,EAAOksa,IAAY,GACxC14a,KAAK+tC,QAAQipY,mBAAmBj6a,MAC5BkgC,QAAUvwB,IAAKnM,EAAK08B,OAAOvwB,IAAKF,KAAMjM,EAAK08B,OAAOzwB,QAItDxM,KAAK+tC,QAAQipY,mBAAmBj6a,MAC5BiZ,MAAOzV,EAAKyV,MAAOD,OAAQxV,EAAKwV,OAAQlK,QAAStL,EAAKsL,QACtDI,QAAS1L,EAAK0L,QAASgxB,QAAUvwB,IAAKnM,EAAK08B,OAAOvwB,KAAOqsC,EAAQ4/X,GAASnsa,KAAMjM,EAAK08B,OAAOzwB,MAAQA,EAAOksa,UAIlH,CACD,IAAI3gY,EAAYh7C,EAChB,IAAKg7C,EAAU9I,gBAAkB8I,EAAUvI,cAAe,CACtDuI,EAAU/I,YAAc1D,GAAuBC,EAAQwM,EAAU/I,aACjE+I,EAAUd,YAAc3L,GAAuBC,EAAQwM,EAAUd,aACjE,IAAI+2C,GAAYh/C,YAAa+I,EAAU/I,YAAaiI,YAAac,EAAUd,aAC3Ej3C,KAAK+tC,QAAQohY,wBAAwBp3X,KAAei2C,IAG5D,IAAIvtF,EAAaT,KAAK+tC,QAAQ2sB,UAAU39D,EAAIowZ,WAC5C,GAAI1sZ,EAAY,CACGA,EAAWsR,QAAQgkB,OACtBh5B,EAAIgV,QAAQgkB,OACpBkxB,EAAQjnD,KAAK+tC,QAAQ0/W,WAAW0qB,iBAAiB13a,EAAY1D,EAAIuG,GAAItD,KAAK+tC,SAC9E/tC,KAAK+tC,QAAQ0/W,WAAW2qB,oBAAoBnxX,EAAOlqD,EAAKiD,KAAK+tC,YAKzEugY,EAAejza,UAAUsma,SAAW,SAAU5ka,EAAKkxa,EAAan8G,EAAID,GAChE,IAAI0tG,EACAqZ,EACAroY,EAAOvwC,KAAK0/Z,WAAWuO,EAAalxa,GACpCg5B,EAASoxB,GAAUpqD,EAAIgV,SACvBE,EAAQo+C,GAActzD,EAAKwzC,EAAKjtC,IAChCgtD,KACJA,EAAMr+C,IAAWtG,QAAUoB,EAAGwjC,EAAK5kC,OAAOoB,EAAGC,EAAGujC,EAAK5kC,OAAOqB,IACxDujC,GAAQwR,GAAQxR,EAAMvwC,KAAK+tC,WAC3BwxX,GAAcjvW,MAAOA,GACrB/f,EAAK5kC,OAAOoB,GAAM+kT,EAAK/7R,EAAO/f,MAC9Bu6B,EAAK5kC,OAAOqB,GAAM6kT,EAAK97R,EAAOhgB,QAC9Bu6C,MACMr+C,IAAWtG,QAAUoB,EAAGwjC,EAAK5kC,OAAOoB,EAAGC,EAAGujC,EAAK5kC,OAAOqB,IAC5D4ra,GAAkBtoX,MAAOA,GACzBtwD,KAAK+tC,QAAQipY,mBAAmBj6a,EAAKwia,EAAWqZ,GAChD54a,KAAK+tC,QAAQqhY,oBAAoBrya,KAIzCuxa,EAAejza,UAAUqla,cAAgB,SAAUnka,GAC/C,IACIk4E,EADA/uE,GAAaglD,SAAWD,eAS5B,OAPIluD,aAAkBgjD,GAClBk1B,EAAUl4E,EAAO4wZ,UAEZ5wZ,GAAUA,EAAOmuD,OAAUnuD,EAAOmuD,MAAY,QAChDnuD,EAAOmuD,MAAM,GAAGyiW,YACnB14U,EAAUl4E,EAAOmuD,MAAM,GAAGyiW,WAE1B14U,GACA/uE,EAASglD,MAAMlmD,KAAKnF,GAAMW,KAAK+tC,QAAQ2sB,UAAU+Z,KAC1C/uE,GAEJA,GAEX4oa,EAAejza,UAAUwoa,yBAA2B,SAAU/xG,EAAID,EAAIgnH,GAClE,IAAI1uX,EAAenqD,KAAK+tC,QAAQoc,aAC5B2tX,EAAsB93a,KAAK+tC,QAAQoc,aAAa2tX,oBAChD30X,EAAWnjD,KAAK+tC,QAAQoV,SAC5B,GAA4B,SAAxB20X,GAA0D,YAAxBA,EAAmC,CACrE,IAAIgB,EAAkBD,OAAyD19a,EAA5C6E,KAAK+tC,QAAQmd,cAAcn5C,QAAQgkB,OAClE/f,EAAgC,SAAxB8ha,EAAiC3tX,EAAan0C,MAAQmtC,EAASQ,cACvE5tC,EAAiC,SAAxB+ha,EAAiC3tX,EAAap0C,OAASotC,EAASO,eACzE3tB,EAAS8iZ,EACTpsa,GAASosa,EAAa9iZ,EAAOtpB,MAAQqsa,EAAersa,QAAUqlT,GAAM,GACpEtlT,GAAQqsa,EAAa9iZ,EAAOvpB,KAAOssa,EAAetsa,OAASslT,GAAM,GACjEinH,GAASF,EAAa9iZ,EAAOrpB,IAAMosa,EAAepsa,MAAQmlT,GAAM,GAChEllT,GAAUksa,EAAa9iZ,EAAOppB,OAASmsa,EAAensa,SAAWklT,GAAM,GAC3E,OAAIplT,GAASuJ,GAASxJ,GAAQ,GACvBG,GAAUoJ,GAAUgja,GAAS,EAKxC,OAAO,GAIXzK,EAAejza,UAAUoma,oBAAsB,SAAU3vG,EAAID,GACzD,IAAI90T,EAAMiD,KAAK+tC,QAAQmd,cAMvB,OALIlrD,KAAK+nD,QAAU/nD,KAAK+nD,MAAM6mX,SAC1B5ua,KAAK+nD,MAAM6mX,UACX5ua,KAAK+nD,MAAM6mX,OAAO/ia,QAAU9O,EAAI8O,QAChC7L,KAAK+nD,MAAM6mX,OAAO3ia,QAAUlP,EAAIkP,WAEhCjM,KAAK6ja,yBAAyB/xG,EAAID,KAClC7xT,KAAK+tC,QAAQukE,KAAKv1G,EAAK+0T,EAAID,IACpB,IAKfy8G,EAAejza,UAAUsoa,mBAAqB,SAAUtR,EAAIC,EAAIjjW,GAC5D,IAAItyD,EAAMiD,KAAK+tC,QAAQmd,cASvB,OARIlrD,KAAK+nD,QAAU/nD,KAAK+nD,MAAM6mX,SAC1B5ua,KAAK+nD,MAAM6mX,UACX5ua,KAAK+nD,MAAM6mX,OAAO/ia,QAAU9O,EAAI8O,QAChC7L,KAAK+nD,MAAM6mX,OAAO3ia,QAAUlP,EAAIkP,QAChCjM,KAAK+nD,MAAM6mX,OAAO54Z,MAAQjZ,EAAIiZ,MAC9BhW,KAAK+nD,MAAM6mX,OAAO74Z,OAAShZ,EAAIgZ,OAC/B/V,KAAK+nD,MAAM6mX,OAAOv/W,MAAQA,GAEvBrvD,KAAK+tC,QAAQ+V,MAAM/mD,EAAKs1Z,EAAIC,EAAIjjW,IAG3Ci/W,EAAejza,UAAU6ma,oBAAsB,SAAUvgZ,GACrD,IAAI5kB,EAAMiD,KAAK+tC,QAAQmd,cAKvB,OAJIlrD,KAAK+nD,QAAU/nD,KAAK+nD,MAAM6mX,SAC1B5ua,KAAK+nD,MAAM6mX,UACX5ua,KAAK+nD,MAAM6mX,OAAOjtZ,MAAQ5kB,EAAIupD,aAE3BtmD,KAAK+tC,QAAQntB,OAAO7jB,EAAK4kB,IAGpC2sZ,EAAejza,UAAU29D,aAAe,WACpC,OAAOA,GAAah5D,KAAK+tC,UAG7BugY,EAAejza,UAAU6+D,WAAa,SAAUl5D,GAC5C,OAAOk5D,GAAWl6D,KAAK+tC,QAAS/sC,IAKpCsta,EAAejza,UAAU+2W,WAAa,SAAUnyW,GAC5C,IAAIM,EAAQN,EAAKkH,QAAUlH,EAAK1D,OAChCyD,KAAKuqX,WAAWhqX,GAAM,EAAOP,KAAK+tC,UAGtCugY,EAAejza,UAAUkvX,WAAa,SAAUhqX,EAAMy4a,EAAYjrY,GAC9D,IACImZ,EACA23G,EAASm6Q,EAAaz4a,EAAKs0W,YAAct0W,EAAKs0W,WAclD,OAbA70W,KAAKooM,eAAe7nM,EAAMs+J,EAAQ7+J,KAAK+tC,SACvCxtC,EAAKs0W,WAAah2M,EAClB7+J,KAAK+tC,QAAQ0b,OAAOwvX,UAAY14a,EAAK+C,GAChC01a,GACDh5a,KAAK+tC,QAAQmrY,WAAW34a,GAExBP,KAAK+tC,QAAQ4gY,qBAAuB3ua,KAAK+tC,QAAQ0b,OAAOgmR,kBACxDzvU,KAAK+tC,QAAQorY,0BAA0BC,aAAc,GAEzDlyX,EAAUlnD,KAAK+tC,QAAQi0N,WACnBhiQ,KAAK+tC,QAAQ4gY,qBAAuB3ua,KAAK+tC,QAAQ0b,OAAOgmR,iBACxDzvU,KAAK2ua,oBAAoB9vQ,OAAO7+J,KAAK+tC,QAAQorY,0BAA0BC,YAAalyX,EAAS3mD,EAAMP,KAAK+tC,SAErGmZ,GAMXonX,EAAejza,UAAU+sM,eAAiB,SAAU7rM,EAAQoI,EAAYopC,GACpE,IAAK,IAAI5xC,EAAI,EAAGA,EAAII,EAAO6wZ,SAAS3wZ,OAAQN,IAAK,CAC7C,IAAI47C,EAAYhK,EAAQ2sB,UAAUn+D,EAAO6wZ,SAASjxZ,IAC9CgL,EAAS4mC,EAAQ2sB,UAAU3iB,EAAU2zW,UACzC3zW,EAAUjhB,QAAUnyB,EAChBwC,EAAO0tW,YACP70W,KAAKooM,eAAejhM,EAAQxC,EAAYopC,GAE5C,IAAIwxX,GACAzoY,QAAS3vB,EAAO2vB,SAEpB3vB,EAAO2vB,QAAUnyB,EACjB,IAAIspD,GACAn3B,QAAS3vB,EAAO2vB,SAEpBiX,EAAQipY,mBAAmB7va,EAAQo4Z,EAAWtxW,GAC9ClgB,EAAQohY,wBAAwBp3X,EAAWwnX,EAAWtxW,KAM9DqgX,EAAejza,UAAU0oa,oBAAsB,SAAUhna,EAAK21B,GACtD31B,aAAewiD,KACfxiD,EAAI8O,QAAU6mB,EAAK3lB,EAAI2lB,EAAK1c,MAAQ,EACpCjZ,EAAIkP,QAAUymB,EAAK1lB,EAAI0lB,EAAK3c,OAAS,EACrChZ,EAAIiZ,MAAQ0c,EAAK1c,MACjBjZ,EAAIgZ,OAAS2c,EAAK3c,OAClB/V,KAAK+tC,QAAQipY,mBAAmBj6a,MAC5BiZ,MAAO0c,EAAK1c,MAAOD,OAAQ2c,EAAK3c,OAAQlK,QAAS9O,EAAI8O,QACrDI,QAASlP,EAAIkP,UAES,QAAtBjM,KAAK+tC,QAAQxP,MACbv+B,KAAK+tC,QAAQsiY,wBAKzB/B,EAAejza,UAAU87Z,uBAAyB,SAAUpqZ,EAAGC,EAAGgJ,EAAOD,GACrE/V,KAAK+tC,QAAQopX,uBAAuBpqZ,EAAGC,EAAGgJ,EAAOD,IAGrDu4Z,EAAejza,UAAUyla,iBAAmB,WACxC9ga,KAAK+tC,QAAQ+yX,oBAGjBwN,EAAejza,UAAU8la,eAAiB,WACtCnha,KAAK+tC,QAAQozX,kBAGjBmN,EAAejza,UAAUkma,oBAAsB,SAAUlha,EAAOg5a,EAAWC,GACvE,IAAIv8a,EAAMiD,KAAK+tC,QAAQ2sB,UAAUr6D,EAAMiD,KAAOjD,EAAMqqD,MAAM,GAC1D,GAAI4uX,GACI,GAASv8a,EAAIowZ,WAAapwZ,EAAIowZ,YAAcmsB,EAAUvna,QAAQzO,GAAI,CAClE,IAAI/C,EAAOlB,GAAMtC,GACjBwD,EAAK4sZ,UAAYpwZ,EAAIowZ,UACrBntZ,KAAK+tC,QAAQ+yX,mBAGb,IAAK,IAFD2R,KAEKt2a,GADTs2a,EAAQA,EAAMj4Z,OAAOzd,EAAIqwZ,SAAUrwZ,EAAIswZ,UACpB5wZ,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACxC,IAAI47C,EAAY/3C,KAAK+tC,QAAQ2sB,UAAU+3W,EAAMt2a,IACzC47C,GACA/3C,KAAK+tC,QAAQxpC,OAAOwzC,GAG5B,IAAIwhY,OAAiB,GACrBA,EAAkBv5a,KAAK+tC,QAAQ2sB,UAAU39D,EAAIowZ,WAAWh0X,MAAMy0X,SAASD,WAAoB,eAC5EllY,OAAO8wZ,EAAeh7a,QAAQ,EAAM+E,IAAK,GACxDtD,KAAK+tC,QAAQ0/W,WAAW+rB,oBAAoBx5a,KAAK+tC,QAAQ2sB,UAAU39D,EAAIowZ,WAAWp7Y,QAAS,EAAMzO,IACjGtD,KAAK+tC,QAAQ2sB,UAAU,EAAMp3D,IAAI6pZ,UAAY,GAC7CpwZ,EAAI8O,QAAU9O,EAAIgV,QAAQlG,QAC1B9O,EAAIkP,QAAUlP,EAAIgV,QAAQ9F,QAC1B,IACIkzZ,GACAz4Z,KAAM,kBAAmB04Z,YAAc10W,OAFzBrrD,GAAMtC,KAE2Csia,YAAc30W,OAAQnqD,IAAS4qM,SAAU,YAE5GnrM,KAAKs/Z,gBAAgBH,GACrBn/Z,KAAK+tC,QAAQozX,mBAKzBmN,EAAejza,UAAU6la,YAAc,SAAU3ka,EAAQk9a,GACrD,IAAIl5a,EAAOP,KAAK+tC,QAAQ2sB,UAAUn+D,EAAO+G,KAAO/G,EAAOmuD,MAAM,GAC7D,OAAInqD,GAA4B,SAApBA,EAAK44B,MAAMzyB,MACdnG,EAAK4sZ,YAAcssB,EAAYn2a,IAAQ/C,EAAK+C,KAAOm2a,EAAYtsB,YAChEssB,EAAYtgZ,MAAMy0X,SAASD,WAAWI,WASlDugB,EAAejza,UAAUg8Z,kBAAoB,SAAUp3Z,EAAMy5a,EAAoBn9a,GAChE,IAAIg5B,GACjB,GAAIt1B,EAAKkH,kBAAkBo4C,IAASm6X,GAAsBz5a,EAAK1D,kBAAkBgjD,GAAO,CACpF,IAAIo6X,EAAMD,EAAqBz5a,EAAK1D,OAAS0D,EAAKkH,OAC9Cyya,EAAUF,EAAqBz5a,EAAKgvC,cAAgBhvC,EAAKuvC,cACzDroC,EAASnH,KAAK0/Z,WAAWka,EAASD,EAAKp9a,GACvCyE,OAAU,EACd,GAAImG,aAAkB2lZ,GAIlB,IAAK,IAHD0iB,EAASroa,EAAO7D,GAChB/C,EAAON,EAAKkH,OAEP/I,EAAK,EAAGyE,EADFtC,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GAAGA,SAAS,GAC9BA,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC3D,IAAIiC,EAAQwC,EAAGzE,GACf,GAAIiC,EAAMiD,KAAO/C,EAAK+C,GAAK,IAAMksa,EAAQ,CACrCxua,EAAUX,EAAM+Z,SAAS,GACzB,YAKRpZ,EAAUmG,aAAkBo4C,GACxBp4C,EAAO4K,QAAU2na,EAAqBz5a,EAAKgvC,cAAgBhvC,EAAKuvC,cAExExvC,KAAK+tC,QAAQspX,kBAAkBr2Z,KAKvCsta,EAAejza,UAAU45G,UAAY,SAAU14G,EAAQ4K,EAAQ+M,GAG3D,OAAO,GAKXo6Z,EAAejza,UAAU2la,UAAY,SAAUxjX,EAAY9F,EAAUo6Q,EAAID,GACrE,IACI1+R,EADAp2B,EAAMiD,KAAK+tC,QAAQmd,cAEnB2uX,EAAcniY,EAAS3qC,EAAIywC,EAAWzwC,EACtC+sa,EAAapiY,EAAS1qC,EAAIwwC,EAAWxwC,EAErCs0Z,EADJnuY,GAAUpmB,EAAG+kT,EAAI9kT,EAAG6kT,GAKpB,OAHI7xT,KAAK+ia,iBACLzB,EAAetha,KAAK+tC,QAAQg1X,eAAe/B,UAAUhha,KAAK+tC,QAAShxC,EAAK88a,EAAaC,EAAY3mZ,EAAOqqB,EAAY9F,IAEjH4pX,GAKXgN,EAAejza,UAAU6ja,WAAa,WAC7Bl/Z,KAAK+tC,QAAQ4c,aAAaxM,YAAc6iW,GAAgB+4B,cAAiB/5a,KAAK+ia,gBAC/E/ia,KAAK+ia,eAAeiX,iBAAiBh6a,KAAK+tC,UAIlDugY,EAAejza,UAAUw5G,KAAO,SAAUt4G,EAAQ4K,EAAQ+M,GAElDlU,KAAK+tC,QAAQ0/W,aACbztZ,KAAK+tC,QAAQ0/W,WAAWwsB,cAAc9ya,EAAS5K,aAAkBgjD,GAAQhjD,EAASA,EAAOmuD,MAAM,GAAI1qD,KAAK+tC,SACxG/tC,KAAK+tC,QAAQsiY,wBAIrB/B,EAAejza,UAAUika,gBAAkB,SAAUH,GACjDn/Z,KAAK+tC,QAAQuxX,gBAAgBH,IAGjCmP,EAAejza,UAAUoyD,MAAQ,SAAUvG,EAASowC,GAChD,GAAIpwC,EAAQzqD,OAAS,EAAG,CACpB,IAAIN,EAAI,EACJsnB,EAAI,EACJsS,EAASoxB,GAAUD,EAAQ,GAAGn1C,SAC9Bmoa,GAAYxvX,SAAWD,eACvB0vX,GAAYzvX,SAAWD,eAC3B,IAAKtuD,EAAI,EAAGA,EAAI+qD,EAAQzqD,OAAQN,IAAK,CACjC,IAAI21T,EAAK,EACLD,EAAK,EACM,SAAXv6N,EAEIw6N,EADA5qQ,EAAQ/qD,aAAcojD,GACjBxpB,EAAOwO,QAAQx3B,EAChBm6C,EAAQ/qD,GAAG6Z,MAAQ,EAAIkxC,EAAQ/qD,GAAG0P,QAGjCkqB,EAAOwO,QAAQx3B,EAAIm6C,EAAQ/qD,GAAG6yC,YAAYjiC,EAGnC,UAAXuqF,EAEDw6N,EADA5qQ,EAAQ/qD,aAAcojD,GACjBxpB,EAAOyO,SAASz3B,EACjBm6C,EAAQ/qD,GAAG6Z,MAAQ,EAAIkxC,EAAQ/qD,GAAG0P,QAGjCkqB,EAAOyO,SAASz3B,EAAIm6C,EAAQ/qD,GAAG4V,QAAQgkB,OAAO/f,MAC/CkxC,EAAQ/qD,GAAG6yC,YAAYjiC,EAGf,QAAXuqF,EAEDu6N,EADA3qQ,EAAQ/qD,aAAcojD,GACjBxpB,EAAOrpB,IAAMw6C,EAAQ/qD,GAAG4Z,OAAS,EAAImxC,EAAQ/qD,GAAG8P,QAGhD8pB,EAAOrpB,IAAMw6C,EAAQ/qD,GAAG6yC,YAAYhiC,EAG7B,WAAXsqF,EAEDu6N,EADA3qQ,EAAQ/qD,aAAcojD,GACjBxpB,EAAOppB,OAASu6C,EAAQ/qD,GAAG4Z,OAAS,EAAImxC,EAAQ/qD,GAAG8P,QAGnD8pB,EAAOppB,OAASu6C,EAAQ/qD,GAAG6yC,YAAYhiC,EAGhC,WAAXsqF,EACDpwC,EAAQ/qD,aAAcojD,GACtBuyQ,EAAK/7R,EAAOhD,OAAOhmB,EAAIm6C,EAAQ/qD,GAAG0P,SAGlC4X,EAAIpX,KAAKE,IAAIwpB,EAAO/f,MAChBkxC,EAAQ/qD,GAAG4V,QAAQgkB,OAAO/f,OAC9B87S,EAAK/7R,EAAO0O,WAAW13B,EAAI0W,EAAI,EAAIyjC,EAAQ/qD,GAAG6yC,YAAYjiC,GAG9C,WAAXuqF,IAEDu6N,EADA3qQ,EAAQ/qD,aAAcojD,GACjBxpB,EAAOhD,OAAO/lB,EAAIk6C,EAAQ/qD,GAAG8P,QAG7B8pB,EAAOhD,OAAO/lB,EAAIk6C,EAAQ/qD,GAAG6yC,YAAYhiC,GAGtDkta,EAAUl6a,KAAKo6a,YAAYF,EAAShzX,EAAQ/qD,IAC5C6D,KAAKsyG,KAAKprD,EAAQ/qD,GAAI21T,EAAID,GAC1B7xT,KAAK+tC,QAAQkxX,iBACbkb,EAAUn6a,KAAKo6a,YAAYD,EAASjzX,EAAQ/qD,IAEhD+9a,EAAU76a,GAAM66a,GAChBC,EAAU96a,GAAM86a,GAChB,IAAIhb,GACAz4Z,KAAM,QAASykM,SAAU,WACzBk0N,WAAY92W,GAAY2xX,GAAU9a,WAAY72W,GAAY4xX,IAE9Dn6a,KAAKs/Z,gBAAgBH,KAI7BmP,EAAejza,UAAUg/a,WAAa,SAAUnzX,EAASowC,GACrD,GAAIpwC,EAAQzqD,OAAS,EAAG,CACpB,IAAIN,EAAI,EAKJsQ,GAHO,IAAI8oB,GAGH,GACR/oB,EAAO,EACP8ta,EAAQ,EACR3ta,EAAS,EACTomB,EAAS,EACTqlC,EAAS,EACTmiX,EAAM,EAENC,GAAoB9vX,SAAWD,eAC/BgwX,GAAoB/vX,SAAWD,eAEnC,IADAvD,EAAU/vB,GAAK+vB,GACV/qD,EAAI,EAAGA,EAAI+qD,EAAQzqD,OAAQN,IAC5BsQ,EAAQA,EAAQy6C,EAAQ/qD,GAAG4V,QAAQgkB,OAAOyO,SAASz3B,EAAIm6C,EAAQ/qD,EAAI,GAAG4V,QAAQgkB,OAAOyO,SAASz3B,EAC9FP,EAAOA,EAAO06C,EAAQ/qD,GAAG4V,QAAQgkB,OAAOwO,QAAQx3B,EAAIm6C,EAAQ/qD,EAAI,GAAG4V,QAAQgkB,OAAOwO,QAAQx3B,EAC1Futa,EAAQA,EAAQpzX,EAAQ/qD,GAAG4V,QAAQgkB,OAAOyO,SAASx3B,EAAIk6C,EAAQ/qD,EAAI,GAAG4V,QAAQgkB,OAAOyO,SAASx3B,EAC9FL,EAASA,EAASu6C,EAAQ/qD,GAAG4V,QAAQgkB,OAAO2O,YAAY13B,EAAIk6C,EAAQ/qD,EAAI,GAAG4V,QAAQgkB,OAAO2O,YAAY13B,EACtG+lB,EAASA,EAASm0B,EAAQ/qD,GAAG4V,QAAQgkB,OAAOhD,OAAOhmB,EAAIm6C,EAAQ/qD,EAAI,GAAG4V,QAAQgkB,OAAOhD,OAAOhmB,EAC5FqrD,EAASA,EAASlR,EAAQ/qD,GAAG4V,QAAQgkB,OAAOhD,OAAO/lB,EAAIk6C,EAAQ/qD,EAAI,GAAG4V,QAAQgkB,OAAOhD,OAAO/lB,EAC5Futa,EAAMA,EAAMrzX,EAAQ/qD,GAAG4V,QAAQgkB,OAAOyO,SAASx3B,EAAIk6C,EAAQ/qD,EAAI,GAAG4V,QAAQgkB,OAAO2O,YAAY13B,EAEjG,IAAK7Q,EAAI,EAAGA,EAAI+qD,EAAQzqD,OAAS,EAAGN,IAAK,CACrC,IAAI21T,EAAK,EACLD,EAAK,EACLrvR,EAAO2kB,GAAUD,EAAQ/qD,EAAI,GAAG4V,SAChCgP,EAAUomC,GAAUD,EAAQ/qD,GAAG4V,SACpB,gBAAXulF,GAAuC,WAAXA,EAC5Bw6N,EAAKtvR,EAAKzP,OAAOhmB,EAAIgU,EAAQgS,OAAOhmB,EAAKgmB,GAAUm0B,EAAQzqD,OAAS,GAEpD,UAAX66F,EACLw6N,EAAKtvR,EAAKgC,SAASz3B,EAAIgU,EAAQyjB,SAASz3B,EAAKN,GAASy6C,EAAQzqD,OAAS,GAEvD,SAAX66F,EACLw6N,EAAKtvR,EAAK+B,QAAQx3B,EAAIgU,EAAQwjB,QAAQx3B,EAAKP,GAAQ06C,EAAQzqD,OAAS,GAEpD,WAAX66F,EACLu6N,EAAKrvR,EAAKzP,OAAO/lB,EAAI+T,EAAQgS,OAAO/lB,EAAKorD,GAAUlR,EAAQzqD,OAAS,GAEpD,QAAX66F,EACLu6N,EAAKrvR,EAAKgC,SAASx3B,EAAI+T,EAAQyjB,SAASx3B,EAAKsta,GAASpzX,EAAQzqD,OAAS,GAEvD,WAAX66F,EACLu6N,EAAKrvR,EAAKkC,YAAY13B,EAAI+T,EAAQ2jB,YAAY13B,EAAKL,GAAUu6C,EAAQzqD,OAAS,GAE9D,gBAAX66F,IACLu6N,EAAKrvR,EAAKkC,YAAY13B,EAAI+T,EAAQyjB,SAASx3B,EAAKuta,GAAOrzX,EAAQzqD,OAAS,IAE5E+9a,EAAkBx6a,KAAKo6a,YAAYI,EAAiBtzX,EAAQ/qD,IAC5D6D,KAAKsyG,KAAKprD,EAAQ/qD,GAAI21T,EAAID,GAC1B7xT,KAAK+tC,QAAQkxX,iBACbwb,EAAkBz6a,KAAKo6a,YAAYK,EAAiBvzX,EAAQ/qD,IAEhEq+a,EAAkBn7a,GAAMm7a,GACxBC,EAAkBp7a,GAAMo7a,GACxB,IAAItb,GACAz4Z,KAAM,aAAcykM,SAAU,WAC9Bk0N,WAAY92W,GAAYiyX,GAAkBpb,WAAY72W,GAAYkyX,IAEtEz6a,KAAKs/Z,gBAAgBH,KAI7BmP,EAAejza,UAAUq/a,SAAW,SAAUxzX,EAASowC,GACnD,GAAIpwC,EAAQzqD,OAAS,EAAG,CACpB,IAAIN,EAAI,EACJkzD,OAAQ,EACZA,GAAUtiD,EAAG,GAAKC,EAAG,IACrB,IAAI+oB,EAASoxB,GAAUD,EAAQ,GAAGn1C,SAC9BstZ,GAAe30W,SAAWD,eAC1B20W,GAAe10W,SAAWD,eAC9B,IAAKtuD,EAAI,EAAGA,EAAI+qD,EAAQzqD,OAAQN,IAAK,CACjC,IAAIu2B,EAAOy0B,GAAUD,EAAQ/qD,GAAG4V,SAC5B0+C,EAAK,EACLC,EAAK,EACM,UAAX4mC,EACA7mC,EAAK16B,EAAO/f,MAAQ0c,EAAK1c,MAET,WAAXshF,EACL5mC,EAAK36B,EAAOhgB,OAAS2c,EAAK3c,OAEV,SAAXuhF,IACL7mC,EAAK16B,EAAO/f,MAAQ0c,EAAK1c,MACzB06C,EAAK36B,EAAOhgB,OAAS2c,EAAK3c,QAE9BspZ,EAAar/Z,KAAKo6a,YAAY/a,EAAYn4W,EAAQ/qD,IAClD6D,KAAK8jD,MAAMoD,EAAQ/qD,GAAIs0D,EAAIC,EAAIrB,GAC/B+vW,EAAap/Z,KAAKo6a,YAAYhb,EAAYl4W,EAAQ/qD,IAEtD6D,KAAK+tC,QAAQkxX,iBACbI,EAAahga,GAAMgga,GACnBD,EAAa//Z,GAAM+/Z,GACnB,IAAID,GACAz4Z,KAAM,SAAUykM,SAAU,WAC1Bk0N,WAAY92W,GAAY82W,GAAaD,WAAY72W,GAAY62W,IAEjEp/Z,KAAKs/Z,gBAAgBH,KAG7BmP,EAAejza,UAAU++a,YAAc,SAAUO,EAAgB59a,GAO7D,OANIA,aAAewiD,GACfo7X,EAAejwX,MAAMlmD,KAAKnF,GAAMtC,IAGhC49a,EAAelwX,WAAWjmD,KAAKnF,GAAMtC,IAElC49a,GAGXrM,EAAejza,UAAU47M,OAAS,SAAUvnF,EAASD,EAASi1S,GAC1D,IAAIkW,E7Wl4EZ,SAAwBzuZ,GACpB,OAASA,EAAMgyB,YAAciD,GAAmBy5X,K6Wi4EjCC,CAAQ96a,KAAK+tC,SACpBgtY,E7W/3EZ,SAAwB5uZ,GACpB,OAASA,EAAMgyB,YAAciD,GAAmB45X,K6W83EjCC,CAAQj7a,KAAK+tC,SACxB/tC,KAAK+tC,QAAQkmS,KAAKvkN,EAAUkrT,EAAOlrT,EAAU,GAAK1vH,KAAK+tC,QAAQoV,SAASY,aAAc0rE,EAAUsrT,EAAOtrT,EAAU,GAAKzvH,KAAK+tC,QAAQoV,SAASY,YAAa2gX,IAK7J4J,EAAejza,UAAUqma,gBAAkB,SAAU1ga,GACjDhB,KAAK+tC,QAAQspX,kBAAkBr2Z,EAAQ+Q,UAK3Cu8Z,EAAejza,UAAU4la,kBAAoB,WACzCjha,KAAK+tC,QAAQmtY,oBAGjB5M,EAAejza,UAAU+4U,KAAO,SAAUtwR,EAAO4rE,EAASD,EAASi1S,GAC/D1ka,KAAK+tC,QAAQoV,SAASixR,KAAKtwR,EAAO4rE,EAAU1vH,KAAK+tC,QAAQoV,SAASY,YAAa0rE,EAAUzvH,KAAK+tC,QAAQoV,SAASY,YAAa2gX,IAEzH4J,KCrmFP6M,GAAiC,WACjC,SAASA,EAAgBptY,GAErB/tC,KAAKqN,WAAcykT,GAAI,EAAGD,GAAI,EAAG/tQ,MAAO,GACxC9jD,KAAKo7a,WAAa,EAClBp7a,KAAKq7a,YAAc,EACnBr7a,KAAKs7a,kBAAoB,EACzBt7a,KAAKkjD,QAAU,EACfljD,KAAKqjD,QAAU,EACfrjD,KAAKqsa,UAAW,EAChBrsa,KAAKu7a,YAAc,EACnBv7a,KAAKw7a,YAAc,EACnBx7a,KAAK+tC,QAAUA,EACf/tC,KAAKknD,WAkgBT,OAhgBA5oD,OAAOuJ,eAAesza,EAAgB9/a,UAAW,kBAE7CqM,IAAK,WACD,OAAO1H,KAAKq7a,aAGhBh0a,IAAK,SAAUsE,GACX3L,KAAKq7a,YAAc1va,EACnB3L,KAAK+tC,QAAQsc,eAAe3G,eAAiB/3C,GAEjDhE,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesza,EAAgB9/a,UAAW,eAE7CqM,IAAK,WACD,OAAO1H,KAAKs7a,mBAGhBj0a,IAAK,SAAUsE,GACX3L,KAAKs7a,kBAAoB3va,EACzB3L,KAAK+tC,QAAQsc,eAAetG,YAAcp4C,GAE9ChE,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesza,EAAgB9/a,UAAW,iBAE7CqM,IAAK,WACD,OAAO1H,KAAKo7a,YAGhB/za,IAAK,SAAUsE,GACX3L,KAAKo7a,WAAazva,EAClB3L,KAAK+tC,QAAQsc,eAAe1G,cAAgBh4C,GAEhDhE,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesza,EAAgB9/a,UAAW,oBAE7CqM,IAAK,WACD,OAAO1H,KAAKkjD,SAGhB77C,IAAK,SAAUsE,GACX3L,KAAKkjD,QAAUv3C,EACXU,KAAKE,IAAIvM,KAAKkjD,QAAUljD,KAAK+tC,QAAQsc,eAAejH,kBAAoB,IACxEpjD,KAAKqsa,UAAW,GAEpBrsa,KAAK+tC,QAAQsc,eAAejH,iBAAmBz3C,GAEnDhE,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesza,EAAgB9/a,UAAW,kBAE7CqM,IAAK,WACD,OAAO1H,KAAKqjD,SAGhBh8C,IAAK,SAAUsE,GACX3L,KAAKqjD,QAAU13C,EACXU,KAAKE,IAAIvM,KAAKqjD,QAAUrjD,KAAK+tC,QAAQsc,eAAe/G,gBAAkB,IACtEtjD,KAAKqsa,UAAW,GAEpBrsa,KAAK+tC,QAAQsc,eAAe/G,eAAiB33C,GAEjDhE,YAAY,EACZC,cAAc,IAGlBuza,EAAgB9/a,UAAUogb,oBAAsB,SAAUv4X,EAASG,GAC/D,IAAIx3C,EAAU,EACVI,EAAU,EACVixS,EAAal9S,KAAK07a,gBACtBx+H,EAAWnwS,GAAK/M,KAAK+jD,YACrBm5P,EAAWlwS,GAAKhN,KAAK+jD,YACrBm5P,EAAWlnS,OAAShW,KAAK+jD,YACzBm5P,EAAWnnS,QAAU/V,KAAK+jD,YAC1Bl4C,EAAUQ,KAAKC,IAAI,EAAG42C,EAAUg6P,EAAW1wS,MAC3CP,EAAUI,KAAKC,IAAI,EAAG+2C,EAAU65P,EAAWxwS,UAC3BvR,IAAZ+nD,QAAqC/nD,IAAZkoD,GACzBrjD,KAAKojD,iBAAmBv3C,EACxB7L,KAAKsjD,eAAiBr3C,EACtBjM,KAAK+tC,QAAQ68O,UAAU/+Q,EAASI,IAGhCjM,KAAK+tC,QAAQ68O,WAAW5qR,KAAKojD,iBAAmB85P,EAAWnwS,GAAI/M,KAAKsjD,eAAiB45P,EAAWlwS,GAEpGhN,KAAKqN,WACDykT,GAAIzlT,KAAKC,IAAItM,KAAKojD,kBAAmB85P,EAAW1wS,MAAQxM,KAAK+jD,YAAa8tQ,GAAIxlT,KAAKC,IAAItM,KAAKsjD,gBAAiB45P,EAAWxwS,KAAO1M,KAAK+jD,YACpID,MAAO9jD,KAAK+jD,cAIpBo3X,EAAgB9/a,UAAUsgb,gBAAkB,SAAUz4X,EAASG,GAC3DrjD,KAAKqsa,UAAW,EAChB,IAAInvH,EAAal9S,KAAK07a,gBACtBx+H,EAAWnwS,GAAK/M,KAAK+jD,YACrBm5P,EAAWlwS,GAAKhN,KAAK+jD,YACrBm5P,EAAWlnS,OAAShW,KAAK+jD,YACzBm5P,EAAWnnS,QAAU/V,KAAK+jD,YAC1B,IAAIh3C,GAAKmwS,EAAW1wS,KAChBQ,GAAKkwS,EAAWxwS,IAChBrF,GAAM,EACNu0a,EAAY57a,KAAK2jD,cAAgB3jD,KAAK+jD,YACtC83X,EAAa77a,KAAK0jD,eAAiB1jD,KAAK+jD,YACxC06D,EAAO1xG,EAAIm2C,EACf,GAAIu7D,IAASz+G,KAAKojD,iBAAkB,CAC5Br2C,EAAI/M,KAAKojD,mBACLpjD,KAAKojD,iBAAmBq7D,EACxBz+G,KAAKojD,kBAAoBF,EAGzBljD,KAAKojD,iBAAmBq7D,EAE5Bp3G,GAAM,GAEV,IAAIoF,EAAQJ,KAAKC,IAAI4wS,EAAWzwS,MAAQzM,KAAKw7a,YAAaI,GAC1D,IAAKv0a,GAAOoF,GAASgyG,EAAOz+G,KAAK2jD,cAAe,CAC5C,IAAIm4X,GAAer9T,EAAOm9T,EAAY57a,KAAKw7a,YACvCO,GAAgB/7a,KAAKojD,iBAAmBw4X,EAAY57a,KAAKw7a,YACzDM,EAAcC,EAEd/7a,KAAKojD,iBAAmBq7D,EAGpBq9T,EAAc5+H,EAAWzwS,MAAQqva,EAAcC,EAC/C/7a,KAAKojD,iBAAmBq7D,EAGxBz+G,KAAKojD,mBAAqB85P,EAAWzwS,MAAQzM,KAAKw7a,YAAcI,GAGxEv0a,GAAM,EAELA,IACDrH,KAAKojD,iBAAmBr2C,EAAIm2C,GAGpC77C,GAAM,EAEN,IAAIq3G,EAAO1xG,EAAIq2C,EACf,GAAIq7D,IAAS1+G,KAAKsjD,eAAgB,CAC1Bt2C,EAAIhN,KAAKsjD,iBACLtjD,KAAKsjD,eAAiBo7D,EACtB1+G,KAAKsjD,gBAAkBD,EAGvBrjD,KAAKsjD,eAAiBo7D,EAE1Br3G,GAAM,GAEV,IAAIsF,EAASN,KAAKC,IAAI4wS,EAAWvwS,OAAS3M,KAAKu7a,YAAaM,GAC5D,IAAKx0a,GAAOsF,GAAU+xG,EAAOm9T,EAAY,CACrC,IAAIG,GAAgBt9T,EAAOm9T,EAAa77a,KAAKu7a,YACzC7/G,GAAiB17T,KAAKsjD,eAAiBu4X,EAAa77a,KAAKu7a,YACzDS,EAAetgH,EAEf17T,KAAKsjD,eAAiBo7D,EAGlBs9T,EAAe9+H,EAAWvwS,OAASqva,EAAetgH,EAClD17T,KAAKsjD,eAAiBo7D,EAGtB1+G,KAAKsjD,iBAAmB45P,EAAWvwS,OAAS3M,KAAKu7a,YAAcM,GAGvEx0a,GAAM,EAELA,IACDrH,KAAKsjD,eAAiBt2C,EAAIq2C,GAGlCrjD,KAAKqN,WACDykT,GAAIzlT,KAAKC,IAAItM,KAAKojD,kBAAmB85P,EAAW1wS,MAAQxM,KAAK+jD,YAAa8tQ,GAAIxlT,KAAKC,IAAItM,KAAKsjD,gBAAiB45P,EAAWxwS,KAAO1M,KAAK+jD,YACpID,MAAO9jD,KAAK+jD,aAEhB/jD,KAAKmtM,UACDntM,KAAKqsa,UACLrsa,KAAK+tC,QAAQu7X,WAIrB6R,EAAgB9/a,UAAU8xM,QAAU,WAChC,IAAI+vG,EAAal9S,KAAK07a,gBACtBx+H,EAAWnwS,GAAK/M,KAAK+jD,YACrBm5P,EAAWlwS,GAAKhN,KAAK+jD,YACrBm5P,EAAWlnS,OAAShW,KAAK+jD,YACzBm5P,EAAWnnS,QAAU/V,KAAK+jD,YAC1B,IAAIh3C,EAAIV,KAAK8T,IAAI+8R,EAAWnwS,GAAI/M,KAAKojD,kBACjCp2C,EAAIX,KAAK8T,IAAI+8R,EAAWlwS,GAAIhN,KAAKsjD,gBAGjCi4X,GAFQv7a,KAAKojD,iBAAmBpjD,KAAK2jD,cAAgBu5P,EAAWzwS,MACxDzM,KAAKsjD,eAAiBtjD,KAAK0jD,eAAiBw5P,EAAWvwS,OACjD3M,KAAKi8a,eACnBT,EAAcx7a,KAAKi8a,eAClBj8a,KAAKsjD,gBAAkB45P,EAAWlwS,IAAMhN,KAAKsjD,eAAiBtjD,KAAK0jD,gBAAkBw5P,EAAWvwS,SACjG6ua,EAAc,IAEbx7a,KAAKojD,kBAAoB85P,EAAWnwS,IAAM/M,KAAKojD,iBAAmBpjD,KAAK2jD,eAAiBu5P,EAAWzwS,QACpG8ua,EAAc,GAElBv7a,KAAKu7a,YAAcA,EACnBv7a,KAAKw7a,YAAcA,EACnBx7a,KAAKk8a,aAAe7va,KAAKC,IAAI4wS,EAAWzwS,OAAQzM,KAAKojD,iBAAmBpjD,KAAK2jD,cAAgB63X,GAAezua,EAC5G/M,KAAKm8a,cAAgB9va,KAAKC,IAAI4wS,EAAWvwS,QAAS3M,KAAKsjD,eAAiBtjD,KAAK0jD,eAAiB63X,GAAevua,EAC7GhN,KAAK+tC,QAAQo/J,QAAQntM,KAAKk8a,aAAcl8a,KAAKm8a,eAC7Cn8a,KAAK+tC,QAAQ/sC,QAAQ0D,MAAMmV,SAAW,UAG1Csha,EAAgB9/a,UAAUota,gBAAkB,SAAUzyZ,EAAOD,GACzD/V,KAAK2jD,cAAgB3tC,EACrBhW,KAAK0jD,eAAiB3tC,GAM1Bola,EAAgB9/a,UAAUqgb,cAAgB,SAAUrT,EAAc7jX,GAC9D,IAAI9xB,EAAO,IAAI6C,GACf,GACe,YAAXivB,GAA4D,OAApCxkD,KAAK+tC,QAAQoc,aAAan0C,OAAuD,OAArChW,KAAK+tC,QAAQoc,aAAap0C,OAAiB,CAC/G,IAAIC,EAAQhW,KAAK+tC,QAAQoc,aAAan0C,MAClCD,EAAS/V,KAAK+tC,QAAQoc,aAAap0C,OACnCqma,EAAW,EACXC,EAAY,EAChB,GAAIr8a,KAAK+tC,QAAQoc,aAAamyX,aAAc,CAExC,IADA5pZ,EAAO1yB,KAAK+tC,QAAQ8/X,cAAc6N,cAAc,EAAG,IAC1Cjva,MAAQuJ,EAAO,CAEpBA,GADIjJ,EAAIV,KAAK6lB,KAAKQ,EAAKjmB,MAAQuJ,GAGnC,GAAI0c,EAAK/lB,OAASoJ,EAAQ,CAEtBA,GADIhJ,EAAIV,KAAK6lB,KAAKQ,EAAK/lB,OAASoJ,GAGpC,GAAI2c,EAAKlmB,KAAO,GAAKH,KAAKE,IAAImmB,EAAKlmB,MAAQ4va,EAAU,CACjD,IAAIrva,EAAIV,KAAK6lB,KAAK7lB,KAAKE,IAAImmB,EAAKlmB,MAAQxM,KAAK+tC,QAAQoc,aAAan0C,OAClEoma,EAAWp8a,KAAK+tC,QAAQoc,aAAan0C,MAAQjJ,EAEjD,GAAI2lB,EAAKhmB,IAAM,GAAKL,KAAKE,IAAImmB,EAAKhmB,KAAO2va,EAAW,CAC5Ctva,EAAIV,KAAK6lB,KAAK7lB,KAAKE,IAAImmB,EAAKhmB,KAAO1M,KAAK+tC,QAAQoc,aAAap0C,QACjEsma,EAAYr8a,KAAK+tC,QAAQoc,aAAap0C,OAAShJ,GAGvD,OAAO,IAAIwoB,IAAO6mZ,GAAaC,EAAYrma,EAAQoma,EAAUrma,EAASsma,GAGtE,IAAI7gJ,EAAS6sI,OAAelta,EAAY,EACxC,OAAO6E,KAAK+tC,QAAQ8/X,cAAc6N,cAAclgJ,EAAQA,IAOhE2/I,EAAgB9/a,UAAUkhb,aAAe,SAAUr/H,GAgB/C,IAfA,IAAI/gT,EAAI,EACJsnB,EAAI,EACJ61I,GAAK,EACLxxH,KACAtM,EAAK,EACLE,EAAK,EACLD,EAAK,EACLE,EAAK,EACLnvB,EAAOxM,KAAK+tC,QAAQoc,aAAaltB,OAAOzwB,KACxCC,EAAQzM,KAAK+tC,QAAQoc,aAAaltB,OAAOxwB,MACzCC,EAAM1M,KAAK+tC,QAAQoc,aAAaltB,OAAOvwB,IACvCC,EAAS3M,KAAK+tC,QAAQoc,aAAaltB,OAAOtwB,OAC1C6va,EAAa,EACbC,EAAc,EACdlyY,GAAY/O,GAAIA,EAAIC,GAAIA,EAAIC,GAAIA,EAAIC,GAAIA,GACrCuhR,EAAWlnS,MAAQ7Z,IACtBA,GAAS6D,KAAK+tC,QAAQoc,aAAan0C,MAAQhW,KAAK+tC,QAAQoc,aAAan0C,MAAQknS,EAAWlnS,SAC9EhW,KAAK+tC,QAAQoc,aAAan0C,QAChCu0B,GACI/O,GAAI0hR,EAAW1wS,KAAOA,EAAMivB,GAAIyhR,EAAWxwS,IAAMA,EACjDgvB,GAAIwhR,EAAW1wS,KAAOA,EAAMmvB,GAAIuhR,EAAWvwS,OAASA,GAExDm7B,IAAawxH,GAAK/uH,GAElBpuC,EAAI+gT,EAAWlnS,QAKfu0B,GAAY/O,GAJZA,EAAK0hR,EAAW34Q,QAAQx3B,EAAI/M,KAAK+tC,QAAQoc,aAAan0C,MAAQwma,EAI1C/gZ,GAHpBA,EAAKyhR,EAAW34Q,QAAQv3B,EAAIN,EAGAgvB,GAF5BA,EAAKwhR,EAAWz4Q,WAAW13B,EAAI/M,KAAK+tC,QAAQoc,aAAan0C,MAAQwma,EAE7B7gZ,GADpCA,EAAKuhR,EAAWz4Q,WAAWz3B,EAAIL,GAE/Bm7B,IAAawxH,GAAK/uH,EAClBiyY,KAEAt/H,EAAWlnS,QAAU7Z,IACrBouC,GACI/O,GAAI0hR,EAAWzwS,MAAQA,EAAOgvB,GAAIyhR,EAAWxwS,IAAMA,EACnDgvB,GAAIwhR,EAAWzwS,MAAQA,EAAOkvB,GAAIuhR,EAAWvwS,OAASA,GAE1Dm7B,IAAawxH,GAAK/uH,GAG1B,KAAO2yQ,EAAWnnS,OAAS0N,IACvBA,GAASzjB,KAAK+tC,QAAQoc,aAAap0C,OAAS/V,KAAK+tC,QAAQoc,aAAap0C,OAASmnS,EAAWnnS,UAChF/V,KAAK+tC,QAAQoc,aAAap0C,SAChCw0B,GACI/O,GAAI0hR,EAAW1wS,KAAOA,EAAMivB,GAAIyhR,EAAWxwS,IAAMA,EACjDgvB,GAAIwhR,EAAWzwS,MAAQA,EAAOkvB,GAAIuhR,EAAWxwS,IAAMA,GAEvDo7B,IAAawxH,GAAK/uH,GAElB9mB,EAAIy5R,EAAWnnS,SAKfw0B,GAAY/O,GAJZA,EAAK0hR,EAAW34Q,QAAQx3B,EAAIP,EAIRivB,GAHpBA,EAAKyhR,EAAW34Q,QAAQv3B,EAAIhN,KAAK+tC,QAAQoc,aAAap0C,OAAS0ma,EAGnC/gZ,GAF5BA,EAAKwhR,EAAW14Q,SAASz3B,EAAIN,EAEOkvB,GADpCA,EAAKuhR,EAAW14Q,SAASx3B,EAAIhN,KAAK+tC,QAAQoc,aAAap0C,OAAS0ma,GAEhE30Y,IAAawxH,GAAK/uH,EAClBkyY,KAEAv/H,EAAWnnS,SAAW0N,IACtB8mB,GACI/O,GAAI0hR,EAAW1wS,KAAOA,EAAMivB,GAAIyhR,EAAWvwS,OAASA,EACpD+uB,GAAIwhR,EAAWzwS,MAAQA,EAAOkvB,GAAIuhR,EAAWvwS,OAASA,GAE1Dm7B,IAAawxH,GAAK/uH,GAG1B,OAAOzC,GAGXqzY,EAAgB9/a,UAAU+4U,KAAO,SAAUt2S,EAAQ4+Y,EAAQC,EAAQjY,GAC/D,G9W1JR,SAAwBv4Y,GACpB,OAAOA,EAAMgyB,YAAciD,GAAmBwqJ,K8WyJtCgxO,CAAQ58a,KAAK+tC,UAAuB,IAAXjQ,G9WtJrC,SAAuB3R,GACnB,OAAOA,EAAMgyB,YAAciD,GAAmByrQ,I8WqJIgwH,CAAO78a,KAAK+tC,UAAuB,IAAXjQ,EAAe,CACjF,IAAIyN,EAASL,KAKb,GAJAsB,GAAYjB,EAAQvrC,KAAK+jD,YAAa/jD,KAAK+jD,aAC3CnX,GAAgBrB,EAAQvrC,KAAKojD,iBAAkBpjD,KAAKsjD,gBACpDohX,EAAaA,IAAgB33Z,EAAG/M,KAAK2jD,cAAgB,EAAG32C,EAAGhN,KAAK0jD,eAAiB,GACjFghX,EAAap5X,GAAuBC,EAAQm5X,GACvC1ka,KAAK+jD,YAAcjmB,GAAW99B,KAAK+tC,QAAQsc,eAAeyyX,SAC1D98a,KAAK+jD,YAAcjmB,GAAW99B,KAAK+tC,QAAQsc,eAAe0yX,QAAS,CACpE/8a,KAAK+jD,aAAejmB,EACpB,IAAIo/Q,EAAal9S,KAAK07a,gBACtBx+H,EAAWnwS,GAAK/M,KAAK+jD,YACrBm5P,EAAWlwS,GAAKhN,KAAK+jD,YAErB,IAAIi5X,EAAe9xY,KACnBsB,GAAYwwY,EAAcl/Y,EAAQA,EAAQ4mY,EAAW33Z,EAAG23Z,EAAW13Z,GACnE4/B,GAAgBowY,EAAcN,GAAU,EAAGC,GAAU,GACrDvwY,GAAeb,EAAQyxY,GACvB,IAAIryY,EAAYW,GAAuBC,GAAUx+B,EAAG,EAAGC,EAAG,IAC3C,IAAX8wB,IACA6M,EAAY3qC,KAAKi9a,iBAAiBtyY,EAAU59B,EAAG49B,EAAU39B,IAE7DhN,KAAKqN,WACDykT,GAAIzlT,KAAKC,IAAIq+B,EAAU59B,GAAImwS,EAAW1wS,MAAQxM,KAAK+jD,YACnD8tQ,GAAIxlT,KAAKC,IAAIq+B,EAAU39B,GAAIkwS,EAAWxwS,KAAO1M,KAAK+jD,YAClDD,MAAO9jD,KAAK+jD,aAEhB/jD,KAAKojD,iBAAmBzY,EAAU59B,EAClC/M,KAAKsjD,eAAiB3Y,EAAU39B,EAChChN,KAAKmtM,UACqB,QAAtBntM,KAAK+tC,QAAQxP,MACbv+B,KAAK+tC,QAAQsiY,sBAEjBrwa,KAAK+tC,QAAQ68O,WAAW5qR,KAAKojD,iBAAmB85P,EAAWnwS,GAAI/M,KAAKsjD,eAAiB45P,EAAWlwS,GAChGi2C,GAAYjjD,KAAK+tC,YAK7BotY,EAAgB9/a,UAAU6hb,UAAY,SAAUlqa,GAE5C,IAAIurB,GADJvrB,EAAUA,OACSurB,KACfimB,EAASxxC,EAAQwxC,OACjBvnB,EAASjqB,EAAQiqB,WACjBkgZ,EAAYnqa,EAAQmqa,UACpBC,EAAepqa,EAAQoqa,aAC3BngZ,EAAOtwB,OAASswB,EAAOtwB,QAAU,GACjCswB,EAAOvwB,IAAMuwB,EAAOvwB,KAAO,GAC3BuwB,EAAOzwB,KAAOywB,EAAOzwB,MAAQ,GAC7BywB,EAAOxwB,MAAQwwB,EAAOxwB,OAAS,GAC/B,IACIqxB,EADA/H,EAASqnZ,EAETV,GAAU18a,KAAKojD,iBACfu5X,GAAU38a,KAAKsjD,eAGnB,GAAgB,kBAFhBkB,EAASA,GAAkB,iBAEOxkD,KAAK+tC,QAAQoc,aAAan0C,OAAShW,KAAK+tC,QAAQoc,aAAap0C,QACvF/V,KAAK+tC,QAAQ2c,MAAMjuD,OAAS,GAAKuD,KAAK+tC,QAAQ0c,WAAWhuD,OAAS,EAAI,CAC1E8hC,EAAOA,GAAc,OACN,iBAAXimB,IACAzuB,EAAS/1B,KAAK07a,eAAc,EAAMl3X,IAEtC,IAAIV,GAAU/2C,EAAG,EAAGC,EAAG,GACvB82C,EAAM/2C,GAAK/M,KAAK2jD,eAAiB1mB,EAAOzwB,KAAOywB,EAAOxwB,QAAWspB,EAAY,MAC7E+tB,EAAM92C,GAAKhN,KAAK0jD,gBAAkBzmB,EAAOvwB,IAAMuwB,EAAOtwB,SAAYopB,EAAa,QAC1EonZ,GAAepnZ,EAAO/f,MAAQhW,KAAKojD,iBAAoBpjD,KAAK2jD,eAC5D5tB,EAAOhgB,OAAS/V,KAAKsjD,eAAkBtjD,KAAK0jD,iBAC7CI,EAAM/2C,EAAIV,KAAK8T,IAAI,EAAG2jC,EAAM/2C,GAC5B+2C,EAAM92C,EAAIX,KAAK8T,IAAI,EAAG2jC,EAAM92C,IAEhC,IAAI6iE,OAAa,EACbzuD,OAAU,EACVC,OAAU,EACd,OAAQkd,GACJ,IAAK,QAEDT,GADA+xC,EAAa/rB,EAAM/2C,GACG/M,KAAK+jD,YAE3B24X,IADAt7Z,GAAWphB,KAAK2jD,cAAiB5tB,EAAY,MAAI85C,GAAc,EAAI95C,EAAOhpB,EAAI8iE,IACzD5yC,EAAOzwB,KAAOywB,EAAOxwB,OAAS,EAAIojE,EACvD8sW,IAAW38a,KAAKsjD,eAAiBxlB,EACjC6+Y,EAAoB,iBAAXn4X,EAA4Bm4X,EAASA,EAAS38a,KAAKsjD,eAAiBxlB,EAC7E,MACJ,IAAK,SAEDA,GADA+xC,EAAa/rB,EAAM92C,GACIhN,KAAK+jD,YAC5B3iC,GAAYphB,KAAK2jD,cAAiB5tB,EAAY,MAAI85C,GAAc,EAAK95C,EAAOhpB,EAAI8iE,EAChFxuD,GAAYrhB,KAAK0jD,eAAkB3tB,EAAa,OAAI85C,GAAc,EAAK95C,EAAO/oB,EAAI6iE,EAClF6sW,GAAUt7Z,GAAW6b,EAAOzwB,KAAOywB,EAAOxwB,OAAS,EAAIojE,EACvD8sW,GAAUt7Z,GAAW4b,EAAOvwB,IAAMuwB,EAAOtwB,QAAU,EAAIkjE,EACvD,MACJ,IAAK,OAED/xC,GADA+xC,EAAaxjE,KAAK8T,IAAI2jC,EAAM/2C,EAAG+2C,EAAM92C,IACdhN,KAAK+jD,YAC5B3iC,GAAWphB,KAAK2jD,cAAiB5tB,EAAY,MAAI85C,GAAc,EAAI95C,EAAOhpB,EAAI8iE,EAC9ExuD,GAAWrhB,KAAK0jD,eAAkB3tB,EAAa,OAAI85C,GAAc,EAAI95C,EAAO/oB,EAAI6iE,EAChF6sW,GAAUt7Z,GAAW6b,EAAOzwB,KAAOywB,EAAOxwB,OAAS,EAAIojE,EACvD8sW,GAAUt7Z,GAAW4b,EAAOvwB,IAAMuwB,EAAOtwB,QAAU,EAAIkjE,EAG/D7vE,KAAKo0U,KAAKt2S,EAAQ4+Y,EAAQC,GAAU5va,EAAG,EAAGC,EAAG,SAG7C8wB,EAAS,EAAI99B,KAAK+jD,YAClB/jD,KAAKo0U,KAAKt2S,EAAQ4+Y,EAAQC,GAAU5va,EAAG,EAAGC,EAAG,KAIrDmua,EAAgB9/a,UAAUgib,cAAgB,SAAU3qZ,GAChD,IAAI3lB,EAAI,EACJC,EAAI,EACJ82C,EAAQ9jD,KAAK+jD,YACbhuB,EAASrD,EACT4qZ,GAAWt9a,KAAKojD,iBAChBm6X,GAAWv9a,KAAKsjD,eACpBvtB,EAAS,IAAIR,GAAKQ,EAAOhpB,EAAI+2C,EAAO/tB,EAAO/oB,EAAI82C,EAAO/tB,EAAO/f,MAAQ8tC,EAAO/tB,EAAOhgB,OAAS+tC,GACjF,IAAIvuB,GAAK+nZ,EAASC,EAASv9a,KAAK2jD,cAAe3jD,KAAK0jD,gBACpD5mB,aAAa/G,KAChBA,EAAOtpB,OAAU6wa,EAAUt9a,KAAK2jD,gBAChC52C,EAAIgpB,EAAOtpB,MAAQzM,KAAK2jD,eAExB5tB,EAAOhpB,GAAKuwa,IACZvwa,EAAIgpB,EAAOhpB,GAEXgpB,EAAOppB,QAAW4wa,EAAUv9a,KAAK0jD,iBACjC12C,EAAI+oB,EAAOppB,OAAS3M,KAAK0jD,gBAEzB3tB,EAAO/oB,GAAKuwa,IACZvwa,EAAI+oB,EAAO/oB,GAEfhN,KAAKo0U,KAAK,GAAIp0U,KAAKojD,iBAAmBr2C,GAAI/M,KAAKsjD,eAAiBt2C,EAAG,QAI3Emua,EAAgB9/a,UAAUmib,cAAgB,SAAUznZ,GAChD,IAAI+tB,EAAQ9jD,KAAK+jD,YACb05X,EAAe,IAAIloZ,GAAKQ,EAAOhpB,EAAI+2C,EAAO/tB,EAAO/oB,EAAI82C,EAAO/tB,EAAO/f,MAAQ8tC,EAAO/tB,EAAOhgB,OAAS+tC,GAClGw5X,EAAUG,EAAa1wa,EAAI0wa,EAAazna,MAAQ,EAAIhW,KAAK2jD,cAAgB,EACzE45X,EAAUE,EAAazwa,EAAIywa,EAAa1na,OAAS,EAAI/V,KAAK0jD,eAAiB,EAC/E1jD,KAAKo0U,KAAK,GAAIp0U,KAAKojD,iBAAmBk6X,GAAUt9a,KAAKsjD,eAAiBi6X,EAAS,OAEnFpC,EAAgB9/a,UAAU4hb,iBAAmB,SAAU/5X,EAASG,GAC5D,GAAgD,aAA5CrjD,KAAK+tC,QAAQsc,eAAeqzX,YAA4B,CACxD,IAAI3nZ,OAAS,EACmC,YAA5C/1B,KAAK+tC,QAAQsc,eAAeqzX,cAC5B3nZ,EAAS/1B,KAAK+tC,QAAQsc,eAAeszX,iBAEzC5nZ,EAASA,GAAU/1B,KAAK07a,eAAc,IAC/B3ua,GAAK/M,KAAK+jD,YACjBhuB,EAAO/oB,GAAKhN,KAAK+jD,YACjBhuB,EAAO/f,OAAShW,KAAK+jD,YACrBhuB,EAAOhgB,QAAU/V,KAAK+jD,YACtBb,IAAY,EACZG,IAAY,EACZ,IAAIu6X,EAAevxa,KAAKC,IAAIypB,EAAOtpB,MAAOzM,KAAK2jD,eAC/C,KAAMT,GAAWntB,EAAOhpB,IAAMm2C,EAAUljD,KAAK2jD,eAAiB5tB,EAAOtpB,OACjEy2C,GAAWntB,EAAOtpB,MAAQzM,KAAK2jD,gBAC5BT,GAAWntB,EAAOhpB,GAAMm2C,EAAUljD,KAAK2jD,eAAiBi6X,GAE3D,GAAI16X,GAAWntB,EAAOhpB,EAClBm2C,EAAU72C,KAAKC,IAAIypB,EAAOhpB,EAAGV,KAAK8T,IAAI+iC,EAASA,GAAWA,EAAUljD,KAAK2jD,cAAgB3jD,KAAKw7a,YAAcoC,SAE3G,CACD,IAAIC,EAAU9nZ,EAAOtpB,MAAQzM,KAAK2jD,cAClCT,EAAU72C,KAAK8T,IAAI09Z,EAAS9nZ,EAAOhpB,GAG3C,IAAI+wa,EAAgBzxa,KAAKC,IAAIypB,EAAOppB,OAAQ3M,KAAK0jD,gBACjD,KAAML,GAAWttB,EAAO/oB,GAAKq2C,EAAUrjD,KAAK0jD,gBAAkB3tB,EAAOppB,QAC9D02C,GAAWttB,EAAO/oB,GAAKq2C,EAAUrjD,KAAK0jD,gBAAkBo6X,GAE3D,GAAIz6X,GAAWttB,EAAO/oB,EAClBq2C,EAAUh3C,KAAKC,IAAIypB,EAAO/oB,EAAGX,KAAK8T,IAAIkjC,EAASA,GAAWA,EAAUrjD,KAAK0jD,eAAiB1jD,KAAKu7a,YAAcuC,SAE5G,CACGD,EAAU9nZ,EAAOppB,OAAS3M,KAAK0jD,eACnCL,EAAUh3C,KAAK8T,IAAI4V,EAAO/oB,EAAG6wa,GAGrC36X,IAAY,EACZG,IAAY,EAEhB,OAASt2C,EAAGm2C,EAASl2C,EAAGq2C,IAErB83X,KCjhBP4C,GAAsB,WAEtB,SAASA,EAAKvxa,EAAME,EAAKsJ,EAAOD,EAAQioa,GACpCh+a,KAAKknD,WACLlnD,KAAKwM,KAAOA,EACZxM,KAAK0M,IAAMA,EACX1M,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,EACd/V,KAAK6ta,cAAgBmQ,EAqJzB,OAlJAD,EAAK1ib,UAAU4ib,UAAY,SAAUC,EAAiBC,GAChC,MAAdn+a,KAAKpB,OAAiBoB,KAAKpB,MAAM08N,YAAY4iN,IAC7Cl+a,KAAKpB,MAAMq/a,UAAUC,EAAiBC,GAEvB,MAAfn+a,KAAKnB,QAAkBmB,KAAKnB,OAAOy8N,YAAY4iN,IAC/Cl+a,KAAKnB,OAAOo/a,UAAUC,EAAiBC,GAEzB,MAAdn+a,KAAKo+a,OAAiBp+a,KAAKo+a,MAAM9iN,YAAY4iN,IAC7Cl+a,KAAKo+a,MAAMH,UAAUC,EAAiBC,GAEvB,MAAfn+a,KAAKq+a,QAAkBr+a,KAAKq+a,OAAO/iN,YAAY4iN,IAC/Cl+a,KAAKq+a,OAAOJ,UAAUC,EAAiBC,GAEvCn+a,KAAKknD,QAAQzqD,OAAS,GACtB0hb,EAAM35a,KAAKxE,OAGnB+9a,EAAK1ib,UAAUigO,YAAc,SAAUv9K,GACnC,QAAI/9C,KAAKwM,KAAOxM,KAAKgW,MAAQ+nC,EAAEvxC,MAAQxM,KAAK0M,IAAM1M,KAAK+V,OAASgoC,EAAErxC,KAAO1M,KAAKwM,KAAOuxC,EAAEtxC,OAASzM,KAAK0M,IAAMqxC,EAAEpxC,SAMjHoxa,EAAK1ib,UAAUijb,WAAa,WAIxB,IAHA,IAEIC,EAFAp3a,EAAS,KACT4Z,EAAU/gB,KAEI,MAAX+gB,GAEHA,GADAw9Z,EAAUx9Z,EAAQy9Z,QAAQr3a,IACR5K,OAClB4K,EAASo3a,EAAQp3a,QAAUA,EAE/B,OAAOA,GAEX42a,EAAK1ib,UAAUmjb,QAAU,SAAUr3a,GAE/B,IAAIs3a,EAAYz+a,KAAKgW,MAAQ,EACzB0oa,EAAa1+a,KAAK+V,OAAS,EAC/B,GAAI0oa,GAAa,KAAQC,GAAc,IAAM,CACzC,IAAI/qH,EAAU3zT,KAAKwM,KAAOiya,EACtB7qH,EAAU5zT,KAAK0M,IAAMgya,EACzB,GAAI1+a,KAAK6ta,cAAc8Q,YAAchrH,EAAS,CAC1C,GAAI3zT,KAAK6ta,cAAc+Q,aAAehrH,EAAS,CAC3C,IAAK5zT,KAAKpB,MAAO,EACTigb,EAAU,IAAId,EAAK/9a,KAAKwM,KAAMxM,KAAK0M,IAAK+xa,EAAWC,EAAY1+a,KAAK6ta,gBAChEvta,OAASN,KACjBA,KAAKpB,MAAQigb,EAEjB,OAAStib,OAAQyD,KAAKpB,OAE1B,GAAIoB,KAAK6ta,cAAciR,UAAYlrH,EAAS,CACxC,IAAK5zT,KAAKo+a,MAAO,EACTS,EAAU,IAAId,EAAK/9a,KAAKwM,KAAMonT,EAAS6qH,EAAWC,EAAY1+a,KAAK6ta,gBAC/Dvta,OAASN,KACjBA,KAAKo+a,MAAQS,EAEjB,OAAStib,OAAQyD,KAAKo+a,aAGzB,GAAIp+a,KAAK6ta,cAAckR,WAAaprH,EAAS,CAC9C,GAAI3zT,KAAK6ta,cAAc+Q,aAAehrH,EAAS,CAC3C,IAAK5zT,KAAKnB,OAAQ,EACVggb,EAAU,IAAId,EAAKpqH,EAAS3zT,KAAK0M,IAAK+xa,EAAWC,EAAY1+a,KAAK6ta,gBAC9Dvta,OAASN,KACjBA,KAAKnB,OAASggb,EAElB,OAAStib,OAAQyD,KAAKnB,QAE1B,GAAImB,KAAK6ta,cAAciR,UAAYlrH,EAAS,CACxC,IAAK5zT,KAAKq+a,OAAQ,CACd,IAAIQ,GAAAA,EAAU,IAAId,EAAKpqH,EAASC,EAAS6qH,EAAWC,EAAY1+a,KAAK6ta,gBAC7Dvta,OAASN,KACjBA,KAAKq+a,OAASQ,EAElB,OAAStib,OAAQyD,KAAKq+a,UAMlC,OAFSr+a,KACTA,KAAKknD,QAAQ1iD,KAAKxE,KAAK6ta,cAAc17V,YAC5BhrE,OAAQnH,OAGrB+9a,EAAK1ib,UAAU2jb,YAAc,WACzB,OAAIh/a,KAAK6ta,cAAckR,WAAa/+a,KAAKwM,MAAQxM,KAAK6ta,cAAc8Q,YAAc3+a,KAAKwM,KAAOxM,KAAKgW,OAC/FhW,KAAK6ta,cAAciR,UAAY9+a,KAAK0M,KAAO1M,KAAK6ta,cAAc+Q,aAAe5+a,KAAK0M,IAAM1M,KAAK+V,QAMrGgoa,EAAK1ib,UAAU4jb,aAAe,SAAU1+a,GACpC,IAAI2+a,KACJl/a,KAAK6ta,cAAcsR,eAAe5+a,GAElC,IADA,IAAI6+a,EAAO,MACHF,EAAaG,SAEjBD,GADAF,EAAel/a,KAAK6ta,cAAcyR,WAAWl7a,IAAIg7a,IAC7BA,KAExB,OAAOA,GAEXrB,EAAK1ib,UAAU+I,IAAM,SAAUg7a,GAE3B,GADAA,EAAO,KACHp/a,KAAKg/a,cAEL,OADAI,EAAOp/a,KAAKs+a,cACHe,SAAS,EAAMD,KAAMA,GAG9B,IAAIpsD,OAAY,EACZusD,IAAkC,IAAxBv/a,KAAKknD,QAAQzqD,QAAiBuD,KAAKpB,OAAUoB,KAAKnB,QAAWmB,KAAKo+a,OAC3Ep+a,KAAKq+a,QACNmB,EAAwB,EAAbx/a,KAAKgW,MAChBypa,EAA0B,EAAdz/a,KAAK+V,OA6BrB,OA5BI/V,KAAK6ta,cAAckR,UAAY/+a,KAAKwM,KAChCxM,KAAK6ta,cAAciR,SAAW9+a,KAAK0M,KACnCsmX,EAAY,IAAI+qD,EAAK/9a,KAAKwM,KAAOxM,KAAKgW,MAAOhW,KAAK0M,IAAM1M,KAAK+V,OAAQypa,EAAUC,EAAWz/a,KAAK6ta,eAC1F0R,IACDvsD,EAAUqrD,OAASr+a,QAIvBgzX,EAAY,IAAI+qD,EAAK/9a,KAAKwM,KAAOxM,KAAKgW,MAAOhW,KAAK0M,IAAK8ya,EAAUC,EAAWz/a,KAAK6ta,eAC5E0R,IACDvsD,EAAUn0X,OAASmB,OAItBA,KAAK6ta,cAAciR,SAAW9+a,KAAK0M,KACxCsmX,EAAY,IAAI+qD,EAAK/9a,KAAKwM,KAAMxM,KAAK0M,IAAM1M,KAAK+V,OAAQypa,EAAUC,EAAWz/a,KAAK6ta,eAC7E0R,IACDvsD,EAAUorD,MAAQp+a,QAItBgzX,EAAY,IAAI+qD,EAAK/9a,KAAKwM,KAAMxM,KAAK0M,IAAK8ya,EAAUC,EAAWz/a,KAAK6ta,eAC/D0R,IACDvsD,EAAUp0X,MAAQoB,OAG1BA,KAAKM,OAAS0yX,EACdhzX,KAAK6ta,cAAcyR,WAAatsD,GACvBqsD,SAAS,EAAOD,KAAMA,IAIhCrB,KC5JP2B,GAA+B,WAE/B,SAASA,EAAcvN,GACnBnya,KAAK2/a,SAAW,IAChB3/a,KAAKmya,YAAcA,EACnBnya,KAAKs/a,WAAa,IAAIvB,GAAK,EAAG,EAAmB,EAAhB/9a,KAAK2/a,SAA8B,EAAhB3/a,KAAK2/a,SAAc3/a,MACvEA,KAAK4/a,SAAWhpZ,OAAOC,UACvB72B,KAAK6/a,WAAajpZ,OAAOC,UACzB72B,KAAK8/a,QAAUlpZ,OAAOC,UACtB72B,KAAK+/a,YAAcnpZ,OAAOC,UAC1B72B,KAAKggb,aAsUT,OAnUAN,EAAcrkb,UAAUo4a,gBAAkB,SAAUlza,GAChD,GAAIP,KAAKggb,UAAUz/a,EAAK+C,IAAK,CACzB,IAAI87a,EAAOp/a,KAAKggb,UAAUz/a,EAAK+C,IAC3B2O,EAAQmta,EAAKl4X,QAAQ3oD,QAAQgC,IAClB,IAAX0R,IACAmta,EAAKl4X,QAAQz+B,OAAOxW,EAAO,GAC3BjS,KAAKu3C,OAAO6nY,UACLp/a,KAAKggb,UAAUz/a,EAAK+C,OAIvCo8a,EAAcrkb,UAAUk8C,OAAS,SAAU6nY,GACvC,GAAIA,EAAK9+a,QAAkC,IAAxB8+a,EAAKl4X,QAAQzqD,QAAgB2ib,EAAKxgb,OAASwgb,EAAKvgb,QAAUugb,EAAKhB,OAASgB,EAAKf,OAAhG,CACI,IAAIzpU,EAAWwqU,EAAK9+a,OAChBs0G,EAASh2G,QAAUwgb,EACnBxqU,EAASh2G,MAAQ,KAEZg2G,EAAS/1G,SAAWugb,EACzBxqU,EAAS/1G,OAAS,KAEb+1G,EAASwpU,QAAUgB,EACxBxqU,EAASwpU,MAAQ,KAEZxpU,EAASypU,SAAWe,IACzBxqU,EAASypU,OAAS,MAEtBr+a,KAAKu3C,OAAO6nY,EAAK9+a,aAGb8+a,IAASp/a,KAAKs/a,YAAeF,EAAKxgb,OAAUwgb,EAAKvgb,QAAWugb,EAAKhB,OAAUgB,EAAKf,SAChFe,EAAK5ya,KAAO,EACZ4ya,EAAKppa,MAAQ,IACbopa,EAAK1ya,IAAM,EACX0ya,EAAKrpa,OAAS,MAK1B2pa,EAAcrkb,UAAU4jb,aAAe,SAAU1+a,GAC7C,IAAI6+a,EAAOp/a,KAAKs/a,WAAWL,aAAa1+a,GACxCP,KAAKggb,UAAUz/a,EAAK+C,IAAM87a,GAE9BM,EAAcrkb,UAAU4kb,WAAa,SAAU1/a,GAC3CP,KAAKm/a,eAAe5+a,GACpB,IAAI2/a,EAAY3/a,EAAKw8C,YACrB,GAAO5C,MAAM+lY,EAAUnza,IAAOotC,MAAM+lY,EAAUlza,IACzCmtC,MAAM+lY,EAAUlqa,QAAWmkC,MAAM+lY,EAAUnqa,QAC5C,OAAO,EAGX,GAAI/V,KAAKggb,UAAUz/a,EAAK+C,IAAK,CACdtD,KAAKggb,UAAUz/a,EAAK+C,IACrB07a,gBACNh/a,KAAKyza,gBAAgBlza,GACrBP,KAAKi/a,aAAa1+a,SAItBP,KAAKi/a,aAAa1+a,GAEtB,IAAIP,KAAKmgb,mBAAmBD,IACxBlgb,KAAKogb,cAAgB7/a,GACrBP,KAAK+1M,aAAex1M,GACpBP,KAAKqgb,eAAiB9/a,GACtBP,KAAKg2M,gBAAkBz1M,EAGtB,CACD,IAAIm/Q,GAAW,EAiDf,OAhDI1/Q,KAAK4/a,WAAa5/a,KAAK++a,WAAax+a,IAASP,KAAKogb,cAC9Cpgb,KAAK4/a,UAAY5/a,KAAK++a,WACtB/+a,KAAK4/a,SAAW5/a,KAAK++a,UACrB/+a,KAAKogb,YAAc7/a,EACnBm/Q,GAAW,GAENn/Q,IAASP,KAAKogb,cACnBpgb,KAAK4/a,SAAWhpZ,OAAOC,UACvB72B,KAAKsgb,SAAStgb,KAAKs/a,YACnB5/J,GAAW,IAGf1/Q,KAAK8/a,UAAY9/a,KAAK8+a,UAAYv+a,IAASP,KAAK+1M,aAC5C/1M,KAAK8/a,SAAW9/a,KAAK8+a,UACrB9+a,KAAK8/a,QAAU9/a,KAAK8+a,SACpB9+a,KAAK+1M,WAAax1M,EAClBm/Q,GAAW,GAENn/Q,IAASP,KAAK+1M,aACnB/1M,KAAK8/a,QAAUlpZ,OAAOC,UACtB72B,KAAKugb,QAAQvgb,KAAKs/a,YAClB5/J,GAAW,IAGf1/Q,KAAK+/a,aAAe//a,KAAK4+a,aAAer+a,IAASP,KAAKg2M,gBAClDh2M,KAAK+/a,YAAc//a,KAAK4+a,aACxBl/J,GAAW,EACX1/Q,KAAK+/a,WAAa//a,KAAK4+a,YACvB5+a,KAAKg2M,cAAgBz1M,GAEhBA,IAASP,KAAKg2M,gBACnBh2M,KAAK+/a,YAAcnpZ,OAAOC,UAC1B72B,KAAKwgb,WAAWxgb,KAAKs/a,YACrB5/J,GAAW,IAGf1/Q,KAAK6/a,YAAc7/a,KAAK2+a,YAAcp+a,IAASP,KAAKqgb,eAChDrgb,KAAK6/a,WAAa7/a,KAAK2+a,YACvB3+a,KAAK6/a,UAAY7/a,KAAK2+a,WACtB3+a,KAAKqgb,aAAe9/a,EACpBm/Q,GAAW,GAENn/Q,IAASP,KAAKqgb,eACnBrgb,KAAK6/a,WAAajpZ,OAAOC,UACzB72B,KAAKygb,UAAUzgb,KAAKs/a,YACpB5/J,GAAW,IAGZA,EAGX,OADA1/Q,KAAKm/a,eAAe,OACb,GAEXO,EAAcrkb,UAAU8kb,mBAAqB,SAAU5/a,GACnD,OAAIA,EAAKiM,MAAQxM,KAAK4/a,UAAYr/a,EAAKkM,OAASzM,KAAK6/a,WAAat/a,EAAKmM,KAAO1M,KAAK8/a,SAC5Ev/a,EAAKoM,QAAU3M,KAAK+/a,YAQ/BL,EAAcrkb,UAAU4ib,UAAY,SAAUz5X,GAC1C,IAAI25X,KAEJ,OADAn+a,KAAKs/a,WAAWrB,UAAUz5X,EAAQ25X,GAC3BA,GAGXuB,EAAcrkb,UAAUyya,YAAc,SAAUtpX,GAG5C,IAAK,IADD0C,KACK9oD,EAAK,EAAGsib,EAFL1gb,KAAKi+a,UAAUz5X,GAEOpmD,EAAKsib,EAAQjkb,OAAQ2B,IAEnD,IAAK,IAAIyE,EAAK,EAAGoB,EADNy8a,EAAQtib,GACQ8oD,QAASrkD,EAAKoB,EAAGxH,OAAQoG,IAAM,CACtD,IAAI9F,EAAMkH,EAAGpB,GACT9F,EAAIggD,YAAYgkW,WAAWv8V,IAC3B0C,EAAQ1iD,KAAKxE,KAAKmya,YAAYp1a,EAAIuG,KAI9C,OAAO4jD,GAGXw4X,EAAcrkb,UAAU+mZ,aAAe,SAAU7hZ,GAC7C,IAAIm/Q,GAAW,EAyBf,OAxBIn/Q,IAASP,KAAK+1M,aACd/1M,KAAK8/a,QAAUlpZ,OAAOC,UACtB72B,KAAK+1M,WAAa,KAClB/1M,KAAKugb,QAAQvgb,KAAKs/a,YAClB5/J,GAAW,GAEXn/Q,IAASP,KAAKogb,cACdpgb,KAAK4/a,SAAWhpZ,OAAOC,UACvB72B,KAAKogb,YAAc,KACnBpgb,KAAKsgb,SAAStgb,KAAKs/a,YACnB5/J,GAAW,GAEXn/Q,IAASP,KAAKqgb,eACdrgb,KAAK6/a,WAAajpZ,OAAOC,UACzB72B,KAAKqgb,aAAe,KACpBrgb,KAAKygb,UAAUzgb,KAAKs/a,YACpB5/J,GAAW,GAEXn/Q,IAASP,KAAKg2M,gBACdh2M,KAAK+/a,YAAcnpZ,OAAOC,UAC1B72B,KAAKg2M,cAAgB,KACrBh2M,KAAKwgb,WAAWxgb,KAAKs/a,YACrB5/J,GAAW,GAERA,GAEXggK,EAAcrkb,UAAUmlb,WAAa,SAAUpB,GAGnCA,EAAKhB,OAASgB,EAAKf,QACfe,EAAKhB,OACLp+a,KAAKwgb,WAAWpB,EAAKhB,OAErBgB,EAAKf,QACLr+a,KAAKwgb,WAAWpB,EAAKf,UAIrBe,EAAKvgb,QACLmB,KAAKwgb,WAAWpB,EAAKvgb,QAErBugb,EAAKxgb,OACLoB,KAAKwgb,WAAWpB,EAAKxgb,QAIjC,IAAK,IAAIR,EAAK,EAAGyE,EAAKu8a,EAAKl4X,QAAS9oD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtD,IAAImC,EAAOsC,EAAGzE,GACV4B,KAAK+/a,YAAcx/a,EAAKw8C,YAAYpwC,SACpC3M,KAAK+/a,WAAax/a,EAAKw8C,YAAYpwC,OACnC3M,KAAKg2M,cAAgBz1M,KAIjCm/a,EAAcrkb,UAAUolb,UAAY,SAAUrB,GAGlCA,EAAKvgb,QAAUugb,EAAKf,QAChBe,EAAKvgb,QACLmB,KAAKygb,UAAUrB,EAAKvgb,QAEpBugb,EAAKf,QACLr+a,KAAKygb,UAAUrB,EAAKf,UAIpBe,EAAKxgb,OACLoB,KAAKygb,UAAUrB,EAAKxgb,OAEpBwgb,EAAKhB,OACLp+a,KAAKygb,UAAUrB,EAAKhB,QAIhC,IAAK,IAAIhgb,EAAK,EAAGyE,EAAKu8a,EAAKl4X,QAAS9oD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtD,IAAImC,EAAOsC,EAAGzE,GACV4B,KAAK6/a,WAAat/a,EAAKw8C,YAAYtwC,QACnCzM,KAAK6/a,UAAYt/a,EAAKw8C,YAAYtwC,MAClCzM,KAAKqgb,aAAe9/a,KAIhCm/a,EAAcrkb,UAAUilb,SAAW,SAAUlB,GAGjCA,EAAKxgb,OAASwgb,EAAKhB,OACfgB,EAAKxgb,OACLoB,KAAKsgb,SAASlB,EAAKxgb,OAEnBwgb,EAAKhB,OACLp+a,KAAKsgb,SAASlB,EAAKhB,SAInBgB,EAAKvgb,QACLmB,KAAKsgb,SAASlB,EAAKvgb,QAEnBugb,EAAKf,QACLr+a,KAAKsgb,SAASlB,EAAKf,SAI/B,IAAK,IAAIjgb,EAAK,EAAGyE,EAAKu8a,EAAKl4X,QAAS9oD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtD,IAAImC,EAAOsC,EAAGzE,GACV4B,KAAK4/a,UAAYr/a,EAAKw8C,YAAYvwC,OAClCxM,KAAK4/a,SAAWr/a,EAAKw8C,YAAYvwC,KACjCxM,KAAKogb,YAAc7/a,KAI/Bm/a,EAAcrkb,UAAUklb,QAAU,SAAUnB,GAGhCA,EAAKxgb,OAASwgb,EAAKvgb,QACfugb,EAAKxgb,OACLoB,KAAKugb,QAAQnB,EAAKxgb,OAElBwgb,EAAKvgb,QACLmB,KAAKugb,QAAQnB,EAAKvgb,UAIlBugb,EAAKhB,OACLp+a,KAAKugb,QAAQnB,EAAKhB,OAElBgB,EAAKf,QACLr+a,KAAKugb,QAAQnB,EAAKf,SAI9B,IAAK,IAAIjgb,EAAK,EAAGyE,EAAKu8a,EAAKl4X,QAAS9oD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtD,IAAImC,EAAOsC,EAAGzE,GACV4B,KAAK8/a,SAAWv/a,EAAKw8C,YAAYrwC,MACjC1M,KAAK8/a,QAAUv/a,EAAKw8C,YAAYrwC,IAChC1M,KAAK+1M,WAAax1M,KAK9Bm/a,EAAcrkb,UAAU8jb,eAAiB,SAAU5+a,GAE/C,GADAP,KAAKmyE,UAAY5xE,EACbA,EAAM,CACN,IAAI68B,EAAI78B,EAAKw8C,YACb/8C,KAAK++a,UAAYnoZ,OAAOwG,EAAE5wB,MAC1BxM,KAAK8+a,SAAWloZ,OAAOwG,EAAE1wB,KACzB1M,KAAK2+a,WAAa/nZ,OAAOwG,EAAE3wB,OAC3BzM,KAAK4+a,YAAchoZ,OAAOwG,EAAEzwB,aAG5B3M,KAAK++a,UAAYnoZ,OAAOC,UACxB72B,KAAK8+a,SAAWloZ,OAAOC,UACvB72B,KAAK2+a,YAAc/nZ,OAAOC,UAC1B72B,KAAK4+a,aAAehoZ,OAAOC,WAInC6oZ,EAAcrkb,UAAUqgb,cAAgB,SAAUiF,EAASC,GACvD,GAAI5gb,KAAK4/a,WAAahpZ,OAAOC,UACzB,OAAO,IAAItB,GAAK,EAAG,EAAG,EAAG,GAE7B,IAAI/oB,OAAmBrR,IAAZwlb,EAAwBt0a,KAAK8T,IAAIngB,KAAK4/a,SAAU,GAAK5/a,KAAK4/a,SACjElza,OAAkBvR,IAAZylb,EAAwBv0a,KAAK8T,IAAIngB,KAAK8/a,QAAS,GAAK9/a,KAAK8/a,QACnE,OAAO,IAAIvqZ,GAAKlpB,KAAK4xB,MAAMzxB,GAAOH,KAAK4xB,MAAMvxB,GAAML,KAAK4xB,MAAMj+B,KAAK6/a,UAAYrza,GAAOH,KAAK4xB,MAAMj+B,KAAK+/a,WAAarza,KAGvHgza,EAAcrkb,UAAUmjb,QAAU,SAAUj+a,GACxC,OAAOP,KAAKggb,UAAUz/a,EAAK+C,KAExBo8a,KCrVP7zV,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAM5DyjZ,GAA4B,SAAUn0V,GAEtC,SAASm0V,IACL,OAAkB,OAAXn0V,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVA6rF,GAAUg1V,EAAYn0V,GAItBN,IACIllF,KACD25a,EAAWxlb,UAAW,WAAO,GAChC+wF,IACIllF,KACD25a,EAAWxlb,UAAW,oBAAgB,GAClCwlb,GACTrgX,IAEEsgX,GAAyB,SAAUp0V,GAEnC,SAASo0V,IACL,OAAkB,OAAXp0V,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBA6rF,GAAUi1V,EAASp0V,GAInBN,IACIllF,EAAS,KACV45a,EAAQzlb,UAAW,YAAQ,GAC9B+wF,IACIllF,KACD45a,EAAQzlb,UAAW,kBAAc,GACpC+wF,IACIllF,KACD45a,EAAQzlb,UAAW,eAAW,GACjC+wF,IACIrkF,KAAY84a,KACbC,EAAQzlb,UAAW,eAAW,GACjC+wF,IACIllF,EAAS,KACV45a,EAAQzlb,UAAW,iBAAa,GAC5Bylb,GACTtgX,IAEEugX,GAAgC,SAAUr0V,GAE1C,SAASq0V,IACL,OAAkB,OAAXr0V,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAK/D,OAPA6rF,GAAUk1V,EAAgBr0V,GAI1BN,IACI/jF,KAAey4a,KAChBC,EAAe1lb,UAAW,gBAAY,GAClC0lb,GACTvgX,IAKEwgX,GAAqC,SAAUt0V,GAE/C,SAASs0V,IACL,OAAkB,OAAXt0V,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAUm1V,EAAqBt0V,GAI/BN,IACIllF,KACD85a,EAAoB3lb,UAAW,YAAQ,GAC1C+wF,IACIllF,KACD85a,EAAoB3lb,UAAW,0BAAsB,GACxD+wF,IACIllF,KACD85a,EAAoB3lb,UAAW,aAAS,GACpC2lb,GACTxgX,ICtFEqrB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GA8D5D2tB,GAAyB,SAAU2hC,GAKnC,SAAS3hC,EAAQ/3C,EAAShS,GACtB,IAAIjB,EAAQ2sF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAQnD,OANAD,EAAMsza,kBAENtza,EAAMkhb,cAENlhb,EAAMmta,aAAgB5pa,GAAI,GAAIq3D,SAAU,GAAIumX,SAAS,GACrDnhb,EAAMohb,YAAc,KACbphb,EA+3IX,OA54IA8rF,GAAU9gC,EAAS2hC,GAenB3hC,EAAQ1vD,UAAU+lb,gBAAkB,SAAUC,GAG1C,IAAK,IADDtkb,EADA+qC,KAEK1pC,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0C,KAAK06D,WAAYt8D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACrE,IAAIf,EAAMwF,EAAGzE,IACbrB,EAAMiD,KAAK06D,UAAUr9D,MACRgkb,GAAetkb,aAAemhD,KAAgBmjY,GAAetkb,aAAewiD,KACrFzX,EAAWtjC,KAAKzH,GAGxBiD,KAAKshb,aAAax5Y,IAQtBijB,EAAQ1vD,UAAU0tF,kBAAoB,SAAUiF,EAASC,GAKrD,IAAK,IAHDszV,KACAC,GAAgB,EAChBC,GAAqB,EAChBrjb,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,GAAU5vF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACL,IAAK,SACD4B,KAAKgB,QAAQ0D,MAAMsR,MAAQhW,KAAK0oa,aAAa1oa,KAAKgW,OAClDhW,KAAKgB,QAAQ0D,MAAMqR,OAAS/V,KAAK0oa,aAAa1oa,KAAK+V,QACnD/V,KAAK0hb,aAAalZ,mBAAmBxoa,KAAKgB,SAC1C,IAAK,IAAIiD,EAAK,EAAGwG,EAAKzK,KAAK6qD,MAAO5mD,EAAKwG,EAAGhO,OAAQwH,IAAM,CACpD,IAAIyjH,EAAOj9G,EAAGxG,GACVo1B,EAAOr5B,KAAK6qD,MAAM68D,GAChBruF,aAAgB0xB,GAClB1xB,EAAKsoZ,WAAWtoZ,GAGxB,MACJ,IAAK,QACD,GAAI20D,EAAQtjC,MAAMjuD,OAAS,GAA8B,IAAzBwxF,EAAQvjC,MAAMjuD,OAC1CuD,KAAKohb,kBACLK,GAAqB,MAEpB,CACD,IAAK,IAAI32M,EAAK,EAAGC,EAAKzsO,OAAOhB,KAAK0wF,EAAQtjC,OAAQogL,EAAKC,EAAGtuO,OAAQquO,IAAM,CACpE,IAAIztO,EAAM0tO,EAAGD,GACT74N,EAAQ2kB,OAAOv5B,GACfqvD,EAAe1sD,KAAK0qD,MAAMz4C,GAC1BokW,EAAcroR,EAAQtjC,MAAMz4C,GAChCuva,EAAgBA,QAAmDrmb,IAAlCk7W,EAAYurE,kBAC7C5hb,KAAKg3a,mBAAmBtqX,EAAcuhC,EAAQvjC,MAAMz4C,GAAQokW,GAC5DkrE,EAAY/8a,KAAKkoD,GAEH,WAAd1sD,KAAKu+B,MACLv+B,KAAKqwa,sBAGb,MACJ,IAAK,aAED,GAAIriV,EAAQvjC,WAAWhuD,OAAS,GAAmC,IAA9BwxF,EAAQxjC,WAAWhuD,OACpDuD,KAAKohb,iBAAgB,GACrBK,GAAqB,MAEpB,CACD,IAAK,IAAIz2M,EAAK,EAAGC,EAAK3sO,OAAOhB,KAAK0wF,EAAQvjC,YAAaugL,EAAKC,EAAGxuO,OAAQuuO,IAAM,CACrE3tO,EAAM4tO,EAAGD,GACT/4N,EAAQ2kB,OAAOv5B,GACfqvD,EAAe1sD,KAAKyqD,WAAWx4C,GAC/BokW,EAAcroR,EAAQvjC,WAAWx4C,GACrCjS,KAAKmva,wBAAwBziX,EAAcuhC,EAAQxjC,WAAWx4C,GAAQokW,GAAa,GACnFkrE,EAAY/8a,KAAKkoD,GAErB1sD,KAAK6hb,iBACa,WAAd7hb,KAAKu+B,MACLv+B,KAAKqwa,sBAGb,MACJ,IAAK,kBACDrwa,KAAK6hb,iBACa,WAAd7hb,KAAKu+B,MACLv+B,KAAKqwa,sBAET,MACJ,IAAK,kBACDrwa,KAAK8hb,uBACL,MACJ,IAAK,eACD9hb,KAAK+hb,mBACL/hb,KAAKgib,aACL,MACJ,IAAK,gBACD,GAAIh0V,EAAQ9iC,cAAc+N,aAAej5D,KAAKkrD,cAAcn5C,SAAW/R,KAAKkrD,cAAc+N,aAClFj5D,KAAKkrD,cAAc+N,YAAYx8D,OAAS,EAAG,CAC3CuD,KAAKuhW,gBAAe,GACpB,MAGR,GAAIvzQ,EAAQ9iC,cAAc/M,YAAa,CACnCn+C,KAAKuhW,gBAAe,GACpB,MAEJ,MACJ,IAAK,eACDvhW,KAAKiib,mBAAmBj0V,GACxB,MACJ,IAAK,iBACDhuF,KAAKkib,eACL,MACJ,IAAK,SACDV,GAAgB,EAChB,MACJ,IAAK,qBACDxhb,KAAK4oD,QACL5oD,KAAKmib,cACLX,GAAgB,EAChB,MACJ,IAAK,UACD1zY,GAAY9tC,MACZ,MACJ,IAAK,gBACDA,KAAKoib,oBAAoBp0V,GACzB,MACJ,IAAK,SACDhuF,KAAKqib,YAAYr0V,GACjB,MACJ,IAAK,iBACDhuF,KAAKsib,qBAAqBt0V,IAIlCwzV,GACAxhb,KAAKgiQ,WAET,IAAI/hQ,GAASe,QAASugb,EAAa3N,MAAO5za,KAAKyhD,eAAgBz4C,SAAUilF,EAAS3mF,SAAU0mF,GAE5F,GADAhuF,KAAKg2J,aAAasrP,GAAaihC,eAAgBtib,IAC1Cwhb,GAAuBzhb,KAAKwib,gBAAoBxib,KAAKyib,aAAaz0V,EAASC,GAAW,CACvF,IAAIkxU,GAAUz4Z,KAAM,kBAAmB24Z,WAAYpxU,EAASmxU,WAAYpxU,EAASm9G,SAAU,YAC3FnrM,KAAKs/Z,gBAAgBH,GAEzBn/Z,KAAK0ib,sBACDjB,IACAzhb,KAAKmib,aAAY,GACjBnib,KAAKqwa,wBAIbtlX,EAAQ1vD,UAAU4mb,mBAAqB,SAAUj0V,IACzCA,EAAQrjC,aAAaxM,aAAe6vC,EAAQrjC,aAAa6uW,qBACzDxrU,EAAQrjC,aAAa+uW,oBACrB15Z,KAAK41a,gBAAgBvb,WAAWr6Z,KAAK2qD,aAAcmK,GAAgB90D,KAAKgB,QAAQsC,IAAKtD,KAAKmjD,SAAS91C,UAAWrN,KAAKwiD,cAAexiD,KAAK8iD,OAAQ9iD,KAAK+iD,SAG5JgI,EAAQ1vD,UAAU+mb,oBAAsB,SAAUp0V,QACJ7yF,IAAtC6yF,EAAQxrC,cAAc+2W,aACtBv5Z,KAAK41a,gBAAgBvb,WAAWr6Z,KAAK2qD,aAAcmK,GAAgB90D,KAAKgB,QAAQsC,IAAKtD,KAAKmjD,SAAS91C,UAAWrN,KAAKwiD,cAAexiD,KAAK8iD,OAAQ9iD,KAAK+iD,aAE/G5nD,IAArC6yF,EAAQxrC,cAAce,YACtBvjD,KAAK8hb,uBACL9hb,KAAKmjD,SAASgqJ,UACdntM,KAAK2ib,qBAE0Cxnb,IAA1C6yF,EAAQxrC,cAAcC,sBACatnD,IAAxC6yF,EAAQxrC,cAAcE,qBACkCvnD,IAApD6yF,EAAQxrC,cAAcC,gBAAgB9vB,gBACYx3B,IAAlD6yF,EAAQxrC,cAAcE,cAAc/vB,WACpC8wB,GAAoBzjD,MACpBA,KAAK8hb,uBACL9hb,KAAKmjD,SAASgqJ,UACdntM,KAAK2ib,gBAGL1/X,GAAYjjD,OAGpBA,KAAK41a,gBAAgBvb,WAAWr6Z,KAAK2qD,aAAcmK,GAAgB90D,KAAKgB,QAAQsC,IAAKtD,KAAKmjD,SAAS91C,UAAWrN,KAAKwiD,cAAexiD,KAAK8iD,OAAQ9iD,KAAK+iD,SAMxJgI,EAAQ1vD,UAAU+yG,eAAiB,WAE/B,OAAOpuG,KAAK4uG,cADK,YAMrB7jD,EAAQ1vD,UAAUoX,UAAY,WAC1BzS,KAAK4ib,6BACL5ib,KAAK+nF,qBAAsB,EAC3B/nF,KAAK6iE,eAAiB,IAAIq5V,GAC1Bl8Z,KAAK6ib,qBACL7ib,KAAK8ib,cACL9ib,KAAK+ib,YACL/ib,KAAKogH,eACLpgH,KAAKykB,aACLzkB,KAAKgB,QAAQ8C,UAAUM,IAAI,cAE/B2mD,EAAQ1vD,UAAUunb,2BAA6B,WAC3C5ib,KAAKgjb,eACDC,KAAM,OACNC,IAAK,MACLC,MAAO,QACPC,KAAM,OACNC,KAAM,OACNC,UAAW,aACXC,SAAU,WACV5R,MAAO,QACP6R,QAAS,WACTC,MAAO,QACPC,aAAc,iBACdC,YAAa,eACbC,WAAY,eACZC,aAAc,iBAElB7jb,KAAK8jb,aAAe,EACpB9jb,KAAKswa,oBACLtwa,KAAK06D,aACL16D,KAAKihb,cACLjhb,KAAK2oC,YACA3oC,KAAK4qD,YACN5qD,KAAK6qD,UAET7qD,KAAKq9Z,eAAiB,IAAIiR,GAAetua,MACzCA,KAAK0hb,aAAe,IAAI7Z,GAAoB7na,KAAMA,KAAKq9Z,gBACvDr9Z,KAAK6ta,cAAgB,IAAI6R,GAAc1/a,KAAK06D,WAC5C16D,KAAKmjD,SAAW,IAAIg4X,GAAgBn7a,OAExC+qD,EAAQ1vD,UAAUwnb,mBAAqB,WACnC7ib,KAAK6iE,eAAeu5V,SAAS,eAAgBp8Z,KAAKi6E,UAAY,IAAIm/B,GAAKp5G,KAAK+/B,gBAAiB//B,KAAKgjb,cAAehjb,KAAKgO,UAK1H+8C,EAAQ1vD,UAAUsyG,OAAS,WACvB3tG,KAAK+jb,cACL/jb,KAAK41a,gBAAkB,IAAI/f,GAAgB71Z,KAAKgB,QAAQsC,GAAI,IAAI0sB,GAA6B,QAAdhwB,KAAKu+B,MACpFv+B,KAAKgkb,aACLhkb,KAAKikb,0BACLjkb,KAAK41a,gBAAgB5f,YACrBh2Z,KAAKmib,aAAY,GACjBnib,KAAKgiQ,WACLhiQ,KAAK+hb,mBACL/hb,KAAKkkb,mBACLlkb,KAAK41a,gBAAgB9c,mBAAmB94Z,KAAK2qD,aAAcmK,GAAgB90D,KAAKgB,QAAQsC,IAAKtD,KAAKmjD,SAAS91C,UAAWrN,KAAKwiD,cAAexiD,KAAK8iD,OAAQ9iD,KAAK+iD,QAC5J/iD,KAAKq9Z,eAAegZ,sBAIpBr2a,KAAK+N,OAAO,mBAIZ/N,KAAK0mB,QAAQ,QACb1mB,KAAKmjD,SAASgqJ,UACdntM,KAAKmjD,SAASs4X,sBACdz7a,KAAKqwa,sBAILrwa,KAAK+N,OAAO,kBACZ/N,KAAK+nF,qBAAsB,EAC3B/nF,KAAK0uC,cAAgBZ,GAAY9tC,MACjCA,KAAKyhD,eAAiBC,GAAcyiY,OACpCnkb,KAAKkib,eACLlib,KAAK4qD,WAAY,GAKrBG,EAAQ1vD,UAAU0kC,cAAgB,WAC9B,MAAO,WAOXgrB,EAAQ1vD,UAAU+2F,gBAAkB,WAChC,IAAIgB,KA8EJ,OA7EAA,EAAQ5uF,MACJouF,OAAQ,OACR3yF,UAEJmzF,EAAQ5uF,MACJouF,OAAQ,WACR3yF,UAEJmzF,EAAQ5uF,MACJouF,OAAQ,uBACR3yF,UAEAD,KAAKm+C,YAAciD,GAAmBywX,UACtCz+U,EAAQ5uF,MACJouF,OAAQ,WACR3yF,WAGiB,wBAArBD,KAAKypD,OAAO/iD,MAAuD,qBAArB1G,KAAKypD,OAAO/iD,MAC1D1G,KAAKypD,OAAOgmR,kBACZr8O,EAAQ5uF,MACJouF,OAAQ,gBACR3yF,UAGJD,KAAK2qD,aAAaxM,aAClBi1C,EAAQ5uF,MACJouF,OAAQ,WACR3yF,MAAOD,QAGfozF,EAAQ5uF,MACJouF,OAAQ,iBACR3yF,MAAOD,QAEPA,KAAKiqD,oBAAoB2mE,MACzBx9B,EAAQ5uF,MACJouF,OAAQ,cACR3yF,MAAOD,KAAMA,KAAK6iE,kBAGD,wBAArB7iE,KAAKypD,OAAO/iD,MAAuD,qBAArB1G,KAAKypD,OAAO/iD,MAC1D0sF,EAAQ5uF,MACJouF,OAAQ,sBACR3yF,UAGiB,4BAArBD,KAAKypD,OAAO/iD,MACZ0sF,EAAQ5uF,MACJouF,OAAQ,0BACR3yF,UAGiB,YAArBD,KAAKypD,OAAO/iD,MACZ0sF,EAAQ5uF,MACJouF,OAAQ,eACR3yF,UAGiB,eAArBD,KAAKypD,OAAO/iD,MACZ0sF,EAAQ5uF,MACJouF,OAAQ,aACR3yF,UAGiB,sBAArBD,KAAKypD,OAAO/iD,MACZ0sF,EAAQ5uF,MACJouF,OAAQ,oBACR3yF,WAGJD,KAAK8oD,mBAAmBs1G,aAAep+J,KAAK8oD,mBAAmBtsD,OAC/D42F,EAAQ5uF,MACJouF,OAAQ,cACR3yF,UAGDmzF,GAKXroC,EAAQ1vD,UAAUiX,QAAU,WAYxB,GAXAhQ,cAActC,KAAKmhb,aACnBnhb,KAAKmhb,YAAc,KACfnhb,KAAK8iD,QAAU9iD,KAAK+iD,SACpB/iD,KAAK8iD,OAAOxwC,UACZtS,KAAK+iD,OAAOzwC,WAEhBtS,KAAK0uC,cAAcp8B,UACnBtS,KAAKokb,UAAU9xa,UACftS,KAAKogH,eACLpgH,KAAK+N,OAAO,cACZ2+E,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,MAC1BQ,SAASyuB,eAAejvB,KAAKgB,QAAQsC,IAAK,CAC1CtD,KAAKgB,QAAQ8C,UAAUS,OAAO,aAE9B,IADA,IAAI8/a,EAAiB7jb,SAASkN,uBAAuB,kBAC9C22a,EAAe5nb,OAAS,GAC3B4nb,EAAe,GAAG5jb,WAAW6E,YAAY++a,EAAe,IAE5D,IAAIzpZ,EAAUp6B,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,WACpDs3B,GACA56B,KAAKgB,QAAQsE,YAAYs1B,GAE7B,IAAIg3B,EAAiB,iBACjB/1D,OAAO+1D,KACP/1D,OAAO+1D,GAAgB0E,YAAc,EACK,IAAtCz6D,OAAO+1D,GAAgB0E,aACvBz6D,OAAO+1D,GAAgBnxD,WAAW6E,YAAYzJ,OAAO+1D,IACrD/1D,OAAO+1D,GAAkB,SAQzC7G,EAAQ1vD,UAAUopB,WAAa,WAC3B,IAAIm3F,EAAapwG,GAAQigF,gBACrBo+N,EAAYr+S,GAAQmgF,cACpB4wB,EAAY/wG,GAAQkgF,eACpB+wB,EAAcjxG,GAAQC,UAAY,eAAiB,aACnDsmV,EAAgBvmV,GAAQC,UACxB8pU,EAAmC,YAAtB/pU,GAAQqb,KAAKkQ,KACzBg7T,EAAgB,aAAe,iBAAoB,aACxDxsV,GAAanB,IAAIpE,KAAKsoa,cAAe1sT,EAAY57G,KAAK0hb,aAAa5jB,UAAW99Z,KAAK0hb,cACnFn8a,GAAanB,IAAIpE,KAAKsoa,cAAe/rT,EAAWv8G,KAAK0hb,aAAa33H,UAAW/pT,KAAK0hb,cAClFn8a,GAAanB,IAAIpE,KAAKsoa,cAAez+G,EAAW7pT,KAAK0hb,aAAazjB,QAASj+Z,KAAK0hb,cAChFn8a,GAAanB,IAAIpE,KAAKsoa,cAAe7rT,EAAaz8G,KAAK0hb,aAAav3H,WAAYnqT,KAAK0hb,cACrFn8a,GAAanB,IAAIpE,KAAKsoa,cAAe,UAAWtoa,KAAK0hb,aAAavvT,QAASnyH,KAAK0hb,cAChFn8a,GAAanB,IAAIpE,KAAKsoa,cAAe,WAAYtoa,KAAK0hb,aAAanV,YAAavsa,KAAK0hb,cACrFn8a,GAAanB,IAAIpE,KAAKsoa,cAAe,SAAUtoa,KAAK0hb,aAAarV,SAAUrsa,KAAK0hb,cAChFn8a,GAAanB,IAAIpE,KAAKsoa,cAAe/yF,EAAYv1U,KAAK0hb,aAAah7S,WAAY1mI,KAAK0hb,cACpFn8a,GAAanB,IAAIvI,OAAQ,SAAUmE,KAAK0hb,aAAanZ,aAAcvoa,KAAK0hb,cACxE1hb,KAAKskb,kBAKTv5X,EAAQ1vD,UAAU+kH,aAAe,WAC7B,IAAIxE,EAAapwG,GAAQigF,gBACrB8wB,EAAY/wG,GAAQkgF,eACpB+wB,EAAcjxG,GAAQC,UAAY,eAAiB,aACnDsmV,EAAgBvmV,GAAQC,UACxB8pU,EAAmC,YAAtB/pU,GAAQqb,KAAKkQ,KACzBg7T,EAAgB,aAAe,iBAAoB,aACpDloC,EAAYr+S,GAAQmgF,cACxBpmF,GAAahB,OAAOvE,KAAKsoa,cAAe1sT,EAAY57G,KAAK0hb,aAAa5jB,WACtEv4Z,GAAahB,OAAOvE,KAAKsoa,cAAe/rT,EAAWv8G,KAAK0hb,aAAa33H,WACrExkT,GAAahB,OAAOvE,KAAKsoa,cAAez+G,EAAW7pT,KAAK0hb,aAAazjB,SACrE14Z,GAAahB,OAAOvE,KAAKsoa,cAAe7rT,EAAaz8G,KAAK0hb,aAAav3H,YACvE5kT,GAAahB,OAAOvE,KAAKsoa,cAAe,UAAWtoa,KAAK0hb,aAAavvT,SACrE5sH,GAAahB,OAAOvE,KAAKsoa,cAAe,WAAYtoa,KAAK0hb,aAAanV,aACtEhna,GAAahB,OAAOvE,KAAKsoa,cAAe,SAAUtoa,KAAK0hb,aAAarV,UACpE9ma,GAAahB,OAAOvE,KAAKsoa,cAAe/yF,EAAYv1U,KAAK0hb,aAAah7S,YACtEnhI,GAAahB,OAAO1I,OAAQ,SAAUmE,KAAK0hb,aAAanZ,eAQ5Dx9W,EAAQ1vD,UAAUoK,OAAS,SAAUyhD,EAASysX,GAC3B,MAAXzsX,GACAlnD,KAAKq9Z,eAAeqB,cAAcx3W,EAASysX,IAMnD5oX,EAAQ1vD,UAAUuK,UAAY,WAC1B,IAAIslD,KACJA,EAAgBlrD,KAAKukb,kBAAkBvkb,KAAKuwa,YAAYrpX,SACxDlnD,KAAKyF,OAAOylD,IAMhBH,EAAQ1vD,UAAUoja,SAAW,SAAU1ha,GAC/BA,GAAOm9D,GAAWl6D,KAAMjD,IACxBiD,KAAKq9Z,eAAeoB,SAAS1ha,IAMrCguD,EAAQ1vD,UAAUsja,eAAiB,WAC/B3+Z,KAAKq9Z,eAAesB,gBAAe,IAKvC5zW,EAAQ1vD,UAAUmpb,eAAiB,WAC/Bxkb,KAAK0hb,aAAalZ,mBAAmBxoa,KAAKgB,UAE9C+pD,EAAQ1vD,UAAUopb,WAAa,WAC3Bzkb,KAAK+va,OAKThlX,EAAQ1vD,UAAU00a,IAAM,WACpB/va,KAAKq9Z,eAAe0S,OAKxBhlX,EAAQ1vD,UAAU63a,WAAa,SAAUz+V,EAAS9Z,GAC1C36D,KAAKytZ,YACLztZ,KAAKytZ,WAAWylB,WAAWz+V,EAAS9Z,EAAU36D,OAMtD+qD,EAAQ1vD,UAAUqpb,cAAgB,SAAUphb,GACpCtD,KAAKytZ,YACLztZ,KAAKytZ,WAAWi3B,cAAcphb,EAAItD,OAG1C+qD,EAAQ1vD,UAAUspb,aAAe,WAC7B3kb,KAAKoxa,SAMTrmX,EAAQ1vD,UAAU+1a,MAAQ,SAAUr0a,GAChCiD,KAAKq9Z,eAAe+T,MAAMr0a,IAK9BguD,EAAQ1vD,UAAU6hb,UAAY,SAAUlqa,GACpChT,KAAKmjD,SAAS+5X,UAAUlqa,IAK5B+3C,EAAQ1vD,UAAUgib,cAAgB,SAAUp2X,GACxCjnD,KAAKmjD,SAASk6X,cAAcp2X,IAKhC8D,EAAQ1vD,UAAUmib,cAAgB,SAAUv2X,GACxCjnD,KAAKmjD,SAASq6X,cAAcv2X,IAEhC8D,EAAQ1vD,UAAUupb,YAAc,WAC5B5kb,KAAKT,QAKTwrD,EAAQ1vD,UAAUkE,KAAO,WAErB,OADUS,KAAKq9Z,eAAe99Z,QAMlCwrD,EAAQ1vD,UAAUi5F,MAAQ,WACtBt0F,KAAKq9Z,eAAe/oU,SAKxBvpC,EAAQ1vD,UAAUu2a,QAAU,WACxB5xa,KAAKq9Z,eAAeuU,WAKxB7mX,EAAQ1vD,UAAUg6a,WAAa,WAC3Br1a,KAAKq9Z,eAAegY,cAMxBtqX,EAAQ1vD,UAAUy1a,eAAiB,SAAU91I,GACzC,IAAI9vN,EAAQlrE,KAAKq9Z,eAAe6F,SAASloI,GACzCh7R,KAAKuwa,YAAcrlW,GAOvBngB,EAAQ1vD,UAAU6gS,SAAW,SAAUhxN,EAAOylW,GAC1C3wa,KAAKq9Z,eAAenhI,SAAShxN,EAAOylW,IAMxC5lX,EAAQ1vD,UAAUo1a,YAAc,SAAUC,GACtC1wa,KAAKq9Z,eAAeoT,YAAYC,IAMpC3lX,EAAQ1vD,UAAUu1a,YAAc,SAAU1pX,EAAS2pX,GAC/C7wa,KAAKq9Z,eAAeuT,YAAY1pX,EAAS2pX,IAM7C9lX,EAAQ1vD,UAAU05a,kBAAoB,SAAU/5I,GAC5Ch7R,KAAKq9Z,eAAe0X,kBAAkB/5I,IAM1CjwO,EAAQ1vD,UAAU85a,kBAAoB,SAAUn6I,GAC5Ch7R,KAAKq9Z,eAAe8X,kBAAkBn6I,IAM1CjwO,EAAQ1vD,UAAU41a,WAAa,SAAUj2I,GACrCh7R,KAAKq9Z,eAAe4T,WAAWj2I,IAKnCjwO,EAAQ1vD,UAAUo6a,aAAe,WAC7Bz1a,KAAKq9Z,eAAeoY,gBAKxB1qX,EAAQ1vD,UAAUwpb,YAAc,WAC5B7kb,KAAKq9Z,eAAe0Y,eAKxBhrX,EAAQ1vD,UAAU86a,aAAe,WAC7Bn2a,KAAKq9Z,eAAe8Y,gBAKxBprX,EAAQ1vD,UAAUiL,UAAY,SAAUywB,GACpC,OAAO/2B,KAAK06D,UAAU3jC,IAK1Bg0B,EAAQ1vD,UAAUypb,eAAiB,WAC/B,OAAO9kb,KAAKuwa,aAEhBxlX,EAAQ1vD,UAAU0pb,aAAe,SAAUlwZ,EAAW9nB,EAAGC,GAC5B,iBAAd6nB,GACP70B,KAAKglb,MAAMnwZ,IASnBk2B,EAAQ1vD,UAAU2pb,MAAQ,SAAUnwZ,EAAW9nB,EAAGC,GAC9C,IAAI8kT,EAAK,EACLD,EAAK,EAES,SAAdh9R,GAAsC,UAAdA,EAExBi9R,GADmC,SAAdj9R,GACM,EAAI,IAAM9nB,GAAQ,GAI7C8kT,GADmC,OAAdh9R,GACM,EAAI,IAAM7nB,GAAQ,GAEjD,IAAIjQ,EAAMiD,KAAKkrD,cACflrD,KAAKsyG,KAAKv1G,EAAK+0T,EAAID,IAQvB9mQ,EAAQ1vD,UAAUi3G,KAAO,SAAUv1G,EAAK+0T,EAAID,GACxC,GAAI7xT,KAAKytZ,YAAe1wZ,aAAewiD,GAAO,CAE1C,GADcv/C,KAAKytZ,WAAWw3B,qBAAqBlob,EAAKiD,KAAM8xT,EAAID,GAE9D,OAGR,GAAI90T,aAAe0hD,GAAU,CACzB,GAAI1hD,EAAI2tD,OAAS3tD,EAAI2tD,MAAMjuD,OACvB,IAAK,IAAI2B,EAAK,EAAGyE,EAAK9F,EAAI2tD,MAAOtsD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnD,IAAImC,EAAOsC,EAAGzE,GACd4B,KAAKsyG,KAAK/xG,EAAMuxT,EAAID,GAG5B,GAAI90T,EAAI0tD,YAAc1tD,EAAI0tD,WAAWhuD,OACjC,IAAK,IAAIwH,EAAK,EAAGwG,EAAK1N,EAAI0tD,WAAYxmD,EAAKwG,EAAGhO,OAAQwH,IAAM,CACxD,IAAIw1D,EAAOhvD,EAAGxG,GACdjE,KAAKsyG,KAAK74C,EAAMq4P,EAAID,GAG5B7xT,KAAKi/Z,sBAGDlia,aAAewiD,IACXv/C,KAAKytZ,YACLztZ,KAAKytZ,WAAWw3B,qBAAqBlob,EAAKiD,KAAM8xT,EAAID,GAG5D7xT,KAAKq9Z,eAAe/qT,KAAKv1G,EAAK+0T,EAAID,IAU1C9mQ,EAAQ1vD,UAAUyoD,MAAQ,SAAU/mD,EAAKs1Z,EAAIC,EAAIjjW,GAC7C,IAAIw0W,GAA2B,EAC/B,GAAI9ma,aAAe0hD,GAAU,CACzB,GAAI1hD,EAAI2tD,OAAS3tD,EAAI2tD,MAAMjuD,OACvB,IAAK,IAAI2B,EAAK,EAAGyE,EAAK9F,EAAI2tD,MAAOtsD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnD,IAAImC,EAAOsC,EAAGzE,GACdyla,EAA2B7ja,KAAKq9Z,eAAev5W,MAAMvjD,EAAM8xZ,EAAIC,EAAIjjW,EAAOtyD,GAGlF,GAAIA,EAAI0tD,YAAc1tD,EAAI0tD,WAAWhuD,OACjC,IAAK,IAAIwH,EAAK,EAAGwG,EAAK1N,EAAI0tD,WAAYxmD,EAAKwG,EAAGhO,OAAQwH,IAAM,CACxD,IAAIw1D,EAAOhvD,EAAGxG,GACdjE,KAAKq9Z,eAAev5W,MAAM2V,EAAM44V,EAAIC,EAAIjjW,EAAOtyD,GAGvDiD,KAAKi/Z,sBAGLj/Z,KAAKq9Z,eAAev5W,MAAM/mD,EAAKs1Z,EAAIC,EAAIjjW,GAE3C,OAAOw0W,GAQX94W,EAAQ1vD,UAAUulB,OAAS,SAAU7jB,EAAK4kB,EAAO0tC,GAC7C,IAAIw0W,EACJ,GAAI9ma,EAEA,GADAsyD,EAAQA,IAAWtiD,EAAGhQ,EAAIgV,QAAQlG,QAASmB,EAAGjQ,EAAIgV,QAAQ9F,SACtDlP,aAAe0hD,GAAU,CACzB1hD,EAAIupD,aAAe3kC,EACnB5kB,EAAIgV,QAAQu0C,aAAe3kC,EAC3B,IAAIoU,EAASoxB,GAAUpqD,EAAIgV,SAE3B,KADA8xZ,EAA2B7ja,KAAKq9Z,eAAewG,8BAAyB1oa,OAAWA,EAAW46B,IAI1F,OAFAh5B,EAAIupD,aAAe3kC,EACnB5kB,EAAIgV,QAAQu0C,aAAe3kC,EACpBkiZ,EAEX,IAAI38W,KAEJA,GADAA,EAAUA,EAAQ1sC,OAAOzd,EAAI2tD,QACXlwC,OAAOzd,EAAI0tD,YAC7BzqD,KAAKq9Z,eAAe2a,cAAcj7a,EAAKmqD,EAASvlC,EAAO0tC,QAGvDrvD,KAAKq9Z,eAAe2a,cAAcj7a,GAAMA,GAAM4kB,EAAO0tC,GAG7D,OAAOw0W,GAQX94W,EAAQ1vD,UAAUu7a,cAAgB,SAAU75a,EAAK+0T,EAAID,GACjD7xT,KAAKq9Z,eAAeuZ,cAAc75a,EAAK+0T,EAAID,IAQ/C9mQ,EAAQ1vD,UAAUw7a,cAAgB,SAAU95a,EAAK+0T,EAAID,GACjD7xT,KAAKq9Z,eAAewZ,cAAc95a,EAAK+0T,EAAID,IAO/C9mQ,EAAQ1vD,UAAUkua,sBAAwB,SAAUr1Z,EAAU3X,GAC1D,OAAOyD,KAAK0hb,aAAanY,sBAAsBr1Z,EAAU3X,IAQ7DwuD,EAAQ1vD,UAAUmua,qBAAuB,SAAUtiX,EAASyI,EAAQ2tW,GAChE,OAAOt9Z,KAAK0hb,aAAalY,qBAAqBtiX,EAASyI,EAAQ2tW,IAQnEvyW,EAAQ1vD,UAAU+xa,2BAA6B,SAAUlmX,EAASyI,EAAQ2tW,EAAUppZ,EAAU3X,GAC1F,OAAOyD,KAAK0hb,aAAanU,qBAAqBrmX,EAASyI,EAAQ2tW,EAAUppZ,EAAU3X,IAOvFwuD,EAAQ1vD,UAAUqua,sBAAwB,SAAU3sa,EAAKmX,GACrD,OAAOlU,KAAK0hb,aAAahY,sBAAsB3sa,EAAKmX,IAQxD62C,EAAQ1vD,UAAUsua,mBAAqB,SAAU5sa,EAAKgV,EAASmC,EAAU/M,GACrE,OAAOnH,KAAK0hb,aAAa/X,mBAAmB5sa,EAAKgV,EAASmC,EAAU/M,IAMxE4jD,EAAQ1vD,UAAUuua,QAAU,SAAUj6W,GAClC,IAAInP,EACA0kY,EAAgBjhY,GAAYjkD,KAAKklb,eACrC,OAAIA,IACA1kY,EAAO0kY,EAAcv1X,IAEVnP,EAGRxgD,KAAK0hb,aAAa9X,QAAQj6W,IAMrC5E,EAAQ1vD,UAAUu/D,UAAY,SAAUjL,EAAQ84J,GAC5C,IAAI5tJ,EACAsqX,EAAkBlhY,GAAYjkD,KAAKmlb,iBACvC,OAAIA,IACAtqX,EAASsqX,EAAgBx1X,EAAQ84J,IAEtB5tJ,EAGR76D,KAAK0hb,aAAa9mX,UAAUjL,IAMvC5E,EAAQ1vD,UAAU0ob,YAAc,WACxB/jb,KAAKiwa,gBACLjwa,KAAKiwa,eAAe8T,YAAY/jb,OAOxC+qD,EAAQ1vD,UAAUika,gBAAkB,SAAUH,GACtCn/Z,KAAKiwa,gBAAmBjwa,KAAKm+C,YAAciD,GAAmBywX,WAAc7xa,KAAK+4D,gBACjF/4D,KAAKiwa,eAAe3Q,gBAAgBH,EAAOn/Z,MACxB,eAAfm/Z,EAAMz4Z,MAAwC,aAAfy4Z,EAAMz4Z,MACrC1G,KAAKolb,qBAAqBjmB,KAKtCp0W,EAAQ1vD,UAAU+pb,qBAAuB,SAAUjmB,GAC/C,IAAI3+Y,KAIAjkB,KAWJ,OAVI4ia,GAASA,EAAMC,YAAgBD,EAAMC,WAAgB,iBAAa5ga,OAChE2ga,EAAMC,WAAqB,sBAAa5ga,MAC1CjC,EAAS4ia,EAAMC,WAAW10W,MAAMlwC,OAAO2kZ,EAAMC,WAAW30W,YAGpD00W,EAAMC,YACN7ia,EAAOiI,KAAK26Z,EAAMC,YAG1B5+Y,EAAW,KAAI2+Y,EAAMz4Z,KACby4Z,EAAMz4Z,MACV,IAAK,kBACD8Z,EAAe,UAAM3U,QAASszZ,EAAME,WAAWxzZ,QAASI,QAASkzZ,EAAME,WAAWpzZ,SAClFuU,EAAe,UAAM3U,QAASszZ,EAAMC,WAAWvzZ,QAASI,QAASkzZ,EAAMC,WAAWnzZ,SAClF,MACJ,IAAK,kBACDuU,EAAe,UAAM8lC,YAAa64W,EAAME,WAAW/4W,aACnD9lC,EAAe,UAAM8lC,YAAa64W,EAAMC,WAAW94W,aACnD,MACJ,IAAK,cACD9lC,EAAe,UACX3U,QAASszZ,EAAME,WAAWxzZ,QAASI,QAASkzZ,EAAME,WAAWpzZ,QAC7D+J,MAAOmpZ,EAAME,WAAWrpZ,MAAOD,OAAQopZ,EAAME,WAAWtpZ,QAE5DyK,EAAe,UACX3U,QAASszZ,EAAMC,WAAWvzZ,QAASI,QAASkzZ,EAAMC,WAAWnzZ,QAC7D+J,MAAOmpZ,EAAMC,WAAWppZ,MAAOD,OAAQopZ,EAAMC,WAAWrpZ,QAE5D,MACJ,IAAK,oBACDyK,EAAO2+Y,EAAMkmB,YAAc9ob,EAC3B,MACJ,IAAK,oBACDikB,EAAe,UAAM3U,QAASszZ,EAAME,WAAWxzZ,QAASI,QAASkzZ,EAAME,WAAWpzZ,SAClFuU,EAAe,UAAM3U,QAASszZ,EAAMC,WAAWvzZ,QAASI,QAASkzZ,EAAMC,WAAWnzZ,SAG1F,IAAIqnF,GACAsgV,MAAOzU,EAAMh0N,SAAU5uM,OAAQA,EAAQikB,OAAQA,GAE/CjkB,EAAOE,QACPuD,KAAKg2J,aAAasrP,GAAagkC,cAAehyV,IAMtDvoC,EAAQ1vD,UAAUyla,iBAAmB,WAEjC9ga,KAAKs/Z,iBADS54Z,KAAM,aAAcykM,SAAU,cAMhDpgJ,EAAQ1vD,UAAU8la,eAAiB,WAE/Bnha,KAAKs/Z,iBADS54Z,KAAM,WAAYykM,SAAU,cAM9CpgJ,EAAQ1vD,UAAUkqb,KAAO,WACjBvlb,KAAKiwa,gBAAmBjwa,KAAKm+C,YAAciD,GAAmBywX,UAC9D7xa,KAAKiwa,eAAesV,KAAKvlb,OAMjC+qD,EAAQ1vD,UAAUmqb,KAAO,WACjBxlb,KAAKiwa,gBAAmBjwa,KAAKm+C,YAAciD,GAAmBywX,UAC9D7xa,KAAKiwa,eAAeuV,KAAKxlb,OAQjC+qD,EAAQ1vD,UAAUoyD,MAAQ,SAAU6pC,EAAQpwC,GACnCA,IAEDA,GADAA,MACkB1sC,OAAOxa,KAAKkrD,cAAcR,MAAO1qD,KAAKkrD,cAAcT,aAE1EzqD,KAAKyhD,eAAiBzhD,KAAKyhD,eAAiBC,GAAc+jY,aAC1Dzlb,KAAKq9Z,eAAe5vW,MAAMvG,EAASowC,IAOvCvsC,EAAQ1vD,UAAUg/a,WAAa,SAAU/iV,EAAQpwC,GACxCA,IAEDA,GADAA,MACkB1sC,OAAOxa,KAAKkrD,cAAcR,MAAO1qD,KAAKkrD,cAAcT,aAE1EzqD,KAAKyhD,eAAiBzhD,KAAKyhD,eAAiBC,GAAc+jY,aAC1Dzlb,KAAKq9Z,eAAegd,WAAWnzX,EAASowC,IAO5CvsC,EAAQ1vD,UAAUq/a,SAAW,SAAUpjV,EAAQpwC,GACtCA,IAEDA,GADAA,MACkB1sC,OAAOxa,KAAKkrD,cAAcR,MAAO1qD,KAAKkrD,cAAcT,aAE1EzqD,KAAKyhD,eAAiBzhD,KAAKyhD,eAAiBC,GAAc+jY,aAC1Dzlb,KAAKq9Z,eAAeqd,SAASxzX,EAASowC,IAO1CvsC,EAAQ1vD,UAAU+4U,KAAO,SAAUt2S,EAAQ4nZ,GACvC1lb,KAAKmjD,SAASixR,KAAKt2S,EAAQ,EAAG,EAAG4nZ,IAOrC36X,EAAQ1vD,UAAUsqb,OAAS,SAAU3ya,GACjC,IAAI8qB,EAAS9qB,EAAQ68D,WAAa78D,EAAQ68D,WAAa,GACvD/xC,EAA0B,YAAjB9qB,EAAQtM,KAAqB,GAAK,EAAIo3B,GAAW,EAAIA,EAC9D99B,KAAKmjD,SAASixR,KAAKt2S,EAAQ,EAAG,EAAG9qB,EAAQ0xZ,aAO7C35W,EAAQ1vD,UAAU44U,IAAM,SAAU7wR,EAAkBE,EAAgBoiY,GAChE1lb,KAAKmjD,SAASixR,KAAK,EAAGhxR,EAAkBE,EAAgBoiY,IAK5D36X,EAAQ1vD,UAAU48D,MAAQ,WACtBj4D,KAAKmjD,SAASixR,KAAK,EAAIp0U,KAAKmjD,SAASY,aAAc/jD,KAAKmjD,SAASC,kBAAmBpjD,KAAKmjD,SAASG,gBAAkBv2C,EAAG,EAAGC,EAAG,KAGjI+9C,EAAQ1vD,UAAU26J,aAAe,SAAU1kF,EAAWrxE,GAC9CA,GACAD,KAAK4lb,iBAAiB3lb,GAE1BD,KAAK0mB,QAAQ46X,GAAahwU,GAAYrxE,IAE1C8qD,EAAQ1vD,UAAUuqb,iBAAmB,SAAU3lb,GAC3C,IAAIe,EAAUf,EAAKe,QACff,EAAKe,SAAWA,aAAmBy9C,IAAaz9C,EAAQ0pD,MAAMjuD,OAASuE,EAAQypD,WAAWhuD,SAAW,IACrGwD,EAAKe,QAAoC,IAAzBA,EAAQ0pD,MAAMjuD,OAAgBuE,EAAQ0pD,MAAM,GAAK1pD,EAAQypD,WAAW,KAO5FM,EAAQ1vD,UAAU+I,IAAM,SAAUrH,GAC9B,IAAIkyG,EACJ,GAAIlyG,EAAK,CAEL,GADAA,EAAMwrD,GAAYxrD,GACdiD,KAAKytZ,aACAztZ,KAAKytZ,WAAWo4B,OAAO9ob,GACxB,OAAO,KAGf,IAAIkD,GACAe,QAASjE,EAAK62a,MAAO5za,KAAKyhD,eAAgBsG,MAAO,WAAYrhD,KAAM,WAAY2xB,QAAQ,GAE3Fr4B,KAAKg2J,aAAasrP,GAAawkC,iBAAkB7lb,GACjDlD,EACIuG,GAAKvG,EAAIuG,IAAMqzD,KACnB,IAAIrM,EAAStqD,KAAKuwa,YAClB,IAAKtwa,EAAKo4B,SAAWiyB,EAAOmiX,KAAM,CAQ9B,GAPIniX,EAAOpD,QAAQ3oD,QAAQxB,EAAIuG,IAAM,IAAMgnD,EAAOmiX,OACzCniX,EAAOxzB,UACRwzB,EAAOxzB,SAAU,EACjB92B,KAAKkkD,YAEToG,EAAOpD,QAAQ1iD,KAAKzH,EAAIuG,KAExB2tZ,GAAcl0Z,KAASmhD,GACvB+wD,EAAS,IAAI/wD,GAAUl+C,KAAM,aAAcjD,GAAK,GAChDiD,KAAKyqD,WAAWjmD,KAAKyqG,GACrBjvG,KAAKwza,WAAWvkU,IACI,IAAhBlyG,EAAI+5B,SACJ92B,KAAKguZ,wBAAwB/+S,EAAOl9F,QAASk9F,EAAQlyG,EAAI+5B,SAE7D92B,KAAK+lb,YAAY92U,QAOjB,GAJAA,EAAS,IAAI1vD,GAAKv/C,KAAM,QAASjD,GAAK,GAEtCiD,KAAK0qD,MAAMlmD,KAAKyqG,GAChBjvG,KAAKwza,WAAWvkU,EAAQ3kD,GACpBtqD,KAAKytZ,WAAY,CACjB,GAAIx+S,EAAO91E,MAAMi3B,aAAmD,IAApC6+C,EAAO91E,MAAMi3B,YAAY3zD,OACrD,IAAK,IAAI2B,EAAK,EAAGyE,EAAK7C,KAAKytZ,WAAWu4B,sBAAsB/2U,GAAS7wG,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvF,IAAI86D,EAAQr2D,EAAGzE,GACf4B,KAAKimb,eAAe/sX,EAAO5O,GAAQ,GAGvC2kD,EAAO91E,MAAMy0X,UAAY3+S,EAAO91E,MAAMy0X,SAASD,WAAWE,WAC1D5+S,EAAO91E,MAAMy0X,SAASD,WAAWE,UAAUpxZ,QAC3CuD,KAAKytZ,WAAWy4B,YAAYj3U,EAAQjvG,MAQhD,GAJAC,GACIe,QAASiuG,EAAQ2kU,MAAO5za,KAAKyhD,eAAgBsG,MAAO,UAAWrhD,KAAM,WAAY2xB,QAAQ,GAE7Fr4B,KAAKg2J,aAAasrP,GAAawkC,iBAAkB7lb,KAC3CD,KAAKyhD,eAAiBC,GAAcmwX,UAAe7xa,KAAKyhD,eAAiBC,GAAciwX,OAAQ,CACjG,IAAIxS,GACAz4Z,KAAM,oBAAqB2+a,WAAY,SAAUhmB,WAAY92W,GAAYxrD,GACzEqia,WAAY72W,GAAYxrD,GAAMouM,SAAU,YAE5CnrM,KAAKs/Z,gBAAgBH,GAEzBn/Z,KAAKyhD,eAAiBzhD,KAAKyhD,eAAiBC,GAAc+jY,aACxC,QAAdzlb,KAAKu+B,OACLv+B,KAAKmmb,eAAel3U,GACpBjvG,KAAKova,oBAAoBngU,GACrBA,EAAO91E,MAAMy0X,UAAY3+S,EAAO91E,MAAMy0X,SAASD,WAAWE,WAC1D5+S,EAAO91E,MAAMy0X,SAASD,WAAWE,UAAUpxZ,QAC3CuD,KAAKomb,gBAAgBn3U,KAMrC,OADAjvG,KAAK0ib,oBAAoBhhY,GAAc+jY,cAChCx2U,GAEXlkD,EAAQ1vD,UAAU8qb,eAAiB,SAAU5lb,GACzC,GAAIA,EAAK6Z,SACL,IAAK,IAAIhc,EAAK,EAAGyE,EAAKtC,EAAK6Z,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIqlB,EAAI5gB,EAAGzE,GACX,GAAI4B,KAAK06D,UAAUj3C,IAAMzjB,KAAK06D,UAAUj3C,GAAGk3C,SAAU,CACjD,IAAIt6D,EAAQm0D,GAAkB/wC,EAAI,iBAClCpjB,EAAMI,WAAW6E,YAAYjF,MAM7C0qD,EAAQ1vD,UAAU+qb,gBAAkB,SAAU7lb,GAC1C,GAAIP,KAAKytZ,YAAcltZ,GAAQA,EAAK44B,OAAS54B,EAAK44B,MAAMy0X,UACpDrtZ,EAAK44B,MAAMy0X,SAASD,WAAWE,WAC/BttZ,EAAK44B,MAAMy0X,SAASD,WAAWE,UAAUpxZ,OAAQ,CACjD,IAAIoxZ,EAAYttZ,EAAK44B,MAAMy0X,SAASD,WAAWE,UAC/C7tZ,KAAK40a,YAAYr0a,EAAK+C,IACtB,IAAK,IAAIlF,EAAK,EAAGqza,EAAc5jB,EAAWzvZ,EAAKqza,EAAYh1a,OAAQ2B,IAAM,CACrE,IAAIqlB,EAAIguZ,EAAYrza,GACpB4B,KAAK40a,YAAYnxZ,GAGjB,IAAK,IAFDgvZ,KAEKt2a,GADTs2a,EAAQA,EAAMj4Z,OAAOxa,KAAK06D,UAAUj3C,GAAG2pY,SAAUptZ,KAAK06D,UAAUj3C,GAAG4pY,UAChD5wZ,OAAS,EAAGN,GAAK,EAAGA,IACnC6D,KAAK40a,YAAYnC,EAAMt2a,IAG/B,IAAK,IAAI0G,EAAK,EAAGwjb,EAAcx4B,EAAWhrZ,EAAKwjb,EAAY5pb,OAAQoG,IAAM,CACjE4gB,EAAI4ia,EAAYxjb,GAChB7C,KAAK06D,UAAUj3C,GAAG0V,MAAMy0X,SAASD,WAAWE,WAC5C7tZ,KAAK06D,UAAUj3C,GAAG0V,MAAMy0X,SAASD,WAAWE,UAAUpxZ,QACtDuD,KAAKomb,gBAAgBpmb,KAAK06D,UAAUj3C,UAK5CzjB,KAAK40a,YAAYr0a,EAAK+C,KAI9BynD,EAAQ1vD,UAAUu5a,YAAc,SAAUrjX,GACtC,IAAIlxD,EAAQm0D,GAAkBjD,EAAS,iBACnCjxD,EAASD,EAAMgU,cACnBhU,EAAMI,WAAW6E,YAAYjF,GAC7BC,EAAOqB,YAAYtB,IAOvB0qD,EAAQ1vD,UAAUirb,kBAAoB,SAAUj/X,EAAY9mD,GACxD,GAAIP,KAAKytZ,WAAY,CACjB,IAAI11W,EAAY/3C,KAAKytZ,WAAW84B,cAAchmb,EAAM8mD,EAAYrnD,MAChEA,KAAKimb,eAAeluY,EAAW/3C,KAAKq9Z,eAAemP,eAAejsa,EAAK+C,KAAK,GAC5EtD,KAAKova,oBAAoB7ua,KAMjCwqD,EAAQ1vD,UAAUmrb,qBAAuB,SAAUzuY,EAAW6yW,GAC1D,IAAIrqZ,EACAkya,KAEJ,GADAlya,EAAOqqZ,EAAW5qZ,KAAK06D,UAAU3iB,EAAUxI,UAAYvvC,KAAK06D,UAAU3iB,EAAU2zW,UAG5E,IAAK,IAAIvvZ,GADTs2a,EAAQ7nB,EAAWrqZ,EAAK6sZ,SAAW7sZ,EAAK8sZ,SACrB5wZ,OAAS,EAAGN,GAAK,EAAGA,IAC/Bs2a,EAAMt2a,KAAO47C,EAAUz0C,IACvBmva,EAAMhqZ,OAAOtsB,EAAG,IAShC4uD,EAAQ1vD,UAAUorb,yBAA2B,SAAUlmb,GAInD,IAAK,IAHDw3C,EACA06X,KAEKt2a,GADTs2a,EAAQA,EAAMj4Z,OAAOja,EAAK6sZ,SAAU7sZ,EAAK8sZ,UACtB5wZ,OAAS,EAAGN,GAAK,EAAGA,KACnC47C,EAAY/3C,KAAK06D,UAAU+3W,EAAMt2a,OAE7B6D,KAAKqza,eAAet7X,EAAUz0C,IAAMilD,GAAYxQ,GAChD/3C,KAAKuE,OAAOwzC,KAIxBgT,EAAQ1vD,UAAUq4a,uBAAyB,SAAU32a,GACjD,IAAImuE,EAAQlrE,KAAKsqD,OAAO/rD,QAAQyB,KAAKq9Z,eAAemP,eAAezva,EAAIuG,KAEnEojb,EADU1mb,KAAKsqD,OAAO4gB,GAAOhkB,QACV3oD,QAAQxB,EAAIuG,IAC/Bojb,GAAY,IACRxsX,GAAWl6D,KAAMjD,IACjBiD,KAAKy+Z,SAAS1ha,GAElBiD,KAAKsqD,OAAO4gB,GAAOhkB,QAAQz+B,OAAOi+Z,EAAU,UACrC1mb,KAAKsqD,OAAO4gB,GAAOmjW,YAAYrua,KAAK06D,UAAU39D,EAAIuG,IAAI0gE,UAGrEjZ,EAAQ1vD,UAAUsrb,eAAiB,SAAUC,GACzC,GAAkB,QAAd5mb,KAAKu+B,MAAiC,WAAdv+B,KAAKu+B,MAA+C,WAA1BqoZ,EAAWztZ,MAAMzyB,KAAoB,CACvF,IAAImgb,EAAkBryX,GAAkBoyX,EAAWtjb,GAAK,iBACpDujb,GACAA,EAAgBpmb,WAAW6E,YAAYuhb,GAG/C7mb,KAAKw1a,sBAGL,IACK,IAFDx0a,EADAoZ,EAAWwsa,EAAW70a,QAAQqI,SAGzBje,EAAI,EAAGA,EAAIie,EAAS3d,OAAQN,IACjC,GAAIie,EAASje,aAAc0xD,IAA0BzzC,EAASje,GAAK,IAAMie,EAASje,GAAK,GAAEoC,QAAQ,gBAAkB,EAAI,CAC9G6b,EAASje,GAAK,GAAEoC,QAAQ,gBAAkB,KAC3CyC,EAAUwzD,GAAkBp6C,EAASje,GAAGmH,GAAK,wBACrC7C,WAAW6E,YAAYtE,IAC/BA,EAAUwzD,GAAkBp6C,EAASje,GAAGmH,GAAK,uBACrC7C,WAAW6E,YAAYtE,IAEnC,IAAK,IAAI5C,EAAK,EAAGyE,EAAK7C,KAAK6qD,MAAOzsD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpD,IAAI6uD,EAAYpqD,EAAGzE,GACnBqyB,GAAcrW,EAASje,GAAGmH,GAAK,gBAAiB2pD,SAGnD,GAAI7yC,EAASje,aAAc4xD,GAC5B,IAAK,IAAI9pD,EAAK,EAAGwG,EAAKzK,KAAK6qD,MAAO5mD,EAAKwG,EAAGhO,OAAQwH,IAAM,CAChDgpD,EAAYxiD,EAAGxG,GACnBwsB,GAAcrW,EAASje,GAAGmH,GAAK,gBAAiB2pD,KAKhElC,EAAQ1vD,UAAUyrb,cAAgB,WAC9B9mb,KAAKuE,UAOTwmD,EAAQ1vD,UAAUkJ,OAAS,SAAUxH,GACjC,IAAImuD,KACJA,EAAgBA,EAAc1wC,OAAOxa,KAAKkrD,cAAcR,MAAO1qD,KAAKkrD,cAAcT,YAClF,IAAIxqD,EACAiya,GAAc,EAClB,GAAIn1a,GAEA,IADAA,EAAMiD,KAAK06D,UAAU39D,EAAIuG,OlX/xCrC,SAA0B/C,GAQtB,OANIA,aAAgB29C,GACR39C,EAAK49C,YAAcC,GAAqB2oY,OAGxCxmb,EAAK49C,YAAcG,GAAgByoY,OkX0xC3BC,CAAUjqb,IAASiD,KAAKyhD,eAAiBC,GAAcm+F,OAAS,CACxE,GAAI7/I,KAAKytZ,YACDztZ,KAAKytZ,WAAWw5B,0BAA0Blqb,EAAKiD,MAE/C,YADAA,KAAKw1a,sBAWb,GAPAv1a,GACIe,QAASjE,EAAK62a,MAAO5za,KAAKyhD,eAC1BsG,MAAO,WAAYrhD,KAAM,UAAW2xB,QAAQ,GAE1Cr4B,KAAKyhD,eAAiBC,GAAcm+F,OACtC7/I,KAAKg2J,aAAasrP,GAAawkC,iBAAkB7lb,IAEhDA,EAAKo4B,OAAQ,CACd,KAAOr4B,KAAKyhD,eAAiBC,GAAcmwX,YACtC90a,aAAewiD,IAAQxiD,aAAemhD,IAAY,CACnD,IAAIihX,GACAz4Z,KAAM,oBAAqB2+a,WAAY,SAAUhmB,WAAY92W,GAAYxrD,GACzEqia,WAAY72W,GAAYxrD,GAAMouM,SAAU,YAEtCnrM,KAAKyhD,eAAiBC,GAAcm+F,OAClC30F,EAAczuD,OAAS,GAAKuD,KAAKiwa,iBAAmBjwa,KAAKypD,OAAO/iD,OAChE1G,KAAKkwa,YAAYpP,mBACjBoR,GAAc,GAGlBn1a,aAAewiD,IACfv/C,KAAKymb,yBAAyB1pb,GAE5BiD,KAAKyhD,eAAiBC,GAAcm+F,OACtC7/I,KAAKs/Z,gBAAgBH,GAGzBpia,EAAIqd,UACJpa,KAAKknb,YAAYnqb,GAEjBA,EAAI49D,UACJ36D,KAAK8xa,YAAY/0a,GAErB,IAAIkV,OAAQ,EACZjS,KAAKyhD,eAAiBzhD,KAAKyhD,eAAiBC,GAAc+jY,aAC1D,IAAImB,EAAa5mb,KAAK06D,UAAU39D,EAAIuG,IAChCsjb,aAAsBrnY,IACQ,SAA1BqnY,EAAWztZ,MAAMzyB,MAAmB1G,KAAKytZ,YACzCztZ,KAAKytZ,WAAW05B,oBAAoBP,EAAY5mb,OAGrC,KADfiS,EAAQjS,KAAK0qD,MAAMnsD,QAAQqob,MAEvB5mb,KAAK0qD,MAAMjiC,OAAOxW,EAAO,GACzBjS,KAAKonb,gBAAgBR,OAKV,KADf30a,EAAQjS,KAAKyqD,WAAWlsD,QAAQqob,KAE5B5mb,KAAKyqD,WAAWhiC,OAAOxW,EAAO,GAElCjS,KAAK+lb,YAAYa,GACjB5mb,KAAKwmb,qBAAqBzpb,GAAK,GAC/BiD,KAAKwmb,qBAAqBzpb,GAAK,IAE/Bm1a,GACAlya,KAAKkwa,YAAY/O,iBAEjBjnW,GAAWl6D,KAAM4mb,IACjB5mb,KAAKy+Z,SAASmoB,GAElB5mb,KAAK0za,uBAAuB32a,GACxBiD,KAAKu6D,uBACLv6D,KAAKu6D,qBAAqBxoD,aAAU5W,UAEjC6E,KAAK06D,UAAU39D,EAAIuG,IAC1BtD,KAAK2mb,eAAeC,GACF,QAAd5mb,KAAKu+B,MACLv+B,KAAKqwa,sBAEHrwa,KAAKyhD,eAAiBC,GAAcm+F,QACtC7/I,KAAKyza,gBAAgBmT,GACrB3mb,GACIe,QAASjE,EAAK62a,MAAO5za,KAAKyhD,eAC1BsG,MAAO,UAAWrhD,KAAM,UAAW2xB,QAAQ,GAE/Cr4B,KAAKg2J,aAAasrP,GAAawkC,iBAAkB7lb,GACjDD,KAAKqta,oBAKhB,GAAIniX,EAAczuD,OAAS,EAAG,CAC3BuD,KAAKiwa,iBACLjwa,KAAKkwa,YAAYpP,mBACjBoR,GAAc,GAElB,IAAK,IAAI/1a,EAAI,EAAGA,EAAI+uD,EAAczuD,OAAQN,IAAK,CAChC+uD,EAAc/uD,GACrB6D,KAAK06D,UAAUxP,EAAc/uD,GAAGmH,KAChCtD,KAAKuE,OAAO2mD,EAAc/uD,IAG9B+1a,GACAlya,KAAKkwa,YAAY/O,iBAErBnha,KAAK2+Z,mBAKb5zW,EAAQ1vD,UAAUy2a,YAAc,SAAUvxa,EAAME,GAC5C,IAAI6C,EAQJ,GAPA7C,EAAaA,EAAaT,KAAK06D,UAAUj6D,EAAW6C,IAAMtD,KAAK06D,UAAUn6D,EAAKo6D,UAE1Er3D,EADgB,iBAAT/C,EACFA,EAGAA,EAAK+C,GAEV7C,GAAcA,EAAW2Z,SAAU,CACnC,IAAK,IAAIje,EAAI,EAAGA,EAAIsE,EAAW2Z,SAAS3d,OAAQN,IACxCsE,EAAW2Z,SAASje,KAAOmH,IAC3B7C,EAAW2Z,SAASqO,OAAOtsB,EAAG,GAC9BsE,EAAWsR,QAAQqI,SAASqO,OAAOtsB,EAAG,IAG9CsE,EAAWsR,QAAQ0tN,QAAQ,IAAIhwM,IAC/BhvB,EAAWsR,QAAQowY,QAAQ1hZ,EAAWsR,QAAQ4mD,eAItD5N,EAAQ1vD,UAAU02a,SAAW,SAAUxxa,EAAMF,GACzC,IAAIiD,EACA7C,EAAaT,KAAK06D,UAAUn6D,EAAK+C,IACrC,GAAI7C,EAAW2Z,WACU,iBAAV/Z,EACHL,KAAK06D,UAAUr6D,KACfiD,EAAKjD,IAITiD,EAAKjD,EAAMiD,GAAKjD,EAAMiD,IAAMqzD,KAC5B32D,KAAKoE,IAAI/D,IAETiD,GAAI,CACYtD,KAAK06D,UAAUp3D,GACrBq3D,SAAWl6D,EAAW6C,GAChC7C,EAAW2Z,SAAS5V,KAAKlB,GACzB7C,EAAWsR,QAAQqI,SAAS5V,KAAKxE,KAAK06D,UAAUp3D,GAAIyO,SACpDtR,EAAWsR,QAAQ0tN,QAAQ,IAAIhwM,IAC/BhvB,EAAWsR,QAAQowY,QAAQ1hZ,EAAWsR,QAAQ4mD,eAO1D5N,EAAQ1vD,UAAUutD,MAAQ,WACtB5oD,KAAKshb,gBAETv2X,EAAQ1vD,UAAUimb,aAAe,SAAUx5Y,GACvC,IAAIof,KAMAA,EALCpf,IACDof,EAAUA,EAAQ1sC,OAAOxa,KAAK0qD,QACZlwC,OAAOxa,KAAKyqD,YAKlCzqD,KAAKyhD,eAAiBzhD,KAAKyhD,eAAiBC,GAAcm+F,MAC1D,IAAK,IAAIzhJ,EAAK,EAAG4ya,EAAY9pX,EAAS9oD,EAAK4ya,EAAUv0a,OAAQ2B,IAAM,CAC/D,IAAIrB,EAAMi0a,EAAU5ya,GAChB4B,KAAK06D,UAAU39D,EAAIuG,KACnBtD,KAAKuE,OAAOxH,GAGpBiD,KAAKyhD,eAAiBzhD,KAAKyhD,gBAAkBC,GAAcm+F,MAC3D7/I,KAAK6ta,cAAgB,IAAI6R,GAAc1/a,KAAK06D,WAC5C16D,KAAK+jb,eAETh5X,EAAQ1vD,UAAUgsb,gBAAkB,WAChCrnb,KAAK0sa,iBAOT3hX,EAAQ1vD,UAAUqxa,cAAgB,SAAUnsa,EAAM+C,GAC9C,IAAKq9C,GAAW3gD,OAASugD,GAAgBvgD,MAAO,CAC5C,IACI8uB,OAAO,EACPiH,OAAS,EAEThpB,OAAI,EACJC,OAAI,EACJ6/Z,OAAc,EACdx/Z,EAAYrN,KAAKmjD,SAAS91C,UAI9B,GAHK9M,IACDA,EAAQP,KAAKkrD,cAAcR,MAAM,GAAM1qD,KAAKkrD,cAAcR,MAAM,GAAK1qD,KAAKkrD,cAAcT,WAAW,IAEnGlqD,EAAM,CACN,IAAI+mb,GAAiB,EAuBrB,GAtBItnb,KAAKytZ,aACLof,EAAc7sa,KAAKytZ,WAAW85B,yBAAyBhnb,EAAM+C,MAEzD/C,EAAOP,KAAK06D,UAAUn6D,EAAK+C,GAAGpG,MAAM,oBAAoB,KAG3D2va,EAcDya,GAAiB,GAbO,SAApB/mb,EAAK44B,MAAMzyB,MAA+C,IAA5BnG,EAAK6vD,YAAY3zD,SAC/CuD,KAAKkta,YAAYgU,SAAU,EAC3Blhb,KAAK8ga,mBACL9ga,KAAKwnb,UAAUjnb,IAAS+C,GAAIqzD,KAAY/7B,QAAS,QAEhDt3B,IAA4B,SAApB/C,EAAK44B,MAAMzyB,MAAmBnG,EAAK6vD,YAAY3zD,OAAS,GAA2B,SAApB8D,EAAK44B,MAAMzyB,QACnFpD,EAA0B,SAApB/C,EAAK44B,MAAMzyB,KAAoBnG,EAAKwR,QAAQqI,SAAS,GAAK,GAAEld,MAAM,KAAK,GAAKqD,EAAK6vD,YAAY,GAAG9sD,IAEtGA,IACAupa,EAAc7sa,KAAK6gH,WAAWtgH,EAAKwR,QAASzO,KAMhD/C,GAAQssa,KlXj1C5B,SAA+BxlX,EAAY9mD,GACvC,IAAIxC,EAAY,EAEhB,OADAA,EAAawC,aAAgB29C,GAAaE,GAAqBqpY,SAAWnpY,GAAgBmpY,SAClE,SAApBlnb,EAAK44B,MAAMzyB,KACJnG,EAAK49C,YAAcG,GAAgBmpY,SAErClnb,EAAK49C,YAAcpgD,EACpBspD,EAAWlJ,YAAc8iW,GAAsB6E,gBACxC,EAGA,EAGNz+V,EAAWlJ,YAAc8iW,GAAsBwmC,SAC7C,EAEJ,EkXi0CWC,CAAe7a,EAAatsa,IAAS+mb,GAAiB,CACxD,IAAI5ib,EAASmoa,EAAiB,MAC1BjuY,OAAW,EAEfA,EAxCO,IAuCPA,EAAWiuY,EAAY92Y,OAAO/f,MAAQzV,EAAKwR,QAAQgkB,OAAO/f,MAAQ62Z,EAAY92Y,OAAO/f,MAAQzV,EAAKwR,QAAQgkB,OAAO/f,OAvC1G,GAwCqC4oB,EAC5C,IAAI+oZ,EAAcnnb,SAASW,cAAc,OACrCymb,EAAWpnb,SAASW,cAAc,YACtCwmb,EAAYhmb,YAAYimb,GACxB94Z,EAAO+9Y,EAAYjyY,SACnB7E,EAASu9B,GAAgBu5W,EAAYnoa,MAAOoqB,OAAM3zB,OAAWA,EAAWyjC,IAC7DyqM,YAEHtzM,EADoB,SAApBx1B,EAAK44B,MAAMzyB,KACF,IAAI+oB,GAAKygC,GAAe3vD,EAAOssa,EAAc,GAAE3va,MAAMqD,EAAK+C,GAAK,KAAK,IAAI0S,OAAS,GAAI62Z,EAAYnoa,MAAMwqB,UAGvG,IAAIO,GAAMlvB,EAAKyV,MAAQ,GAAM,GAAKzV,EAAKyV,MAAO62Z,EAAYnoa,MAAMwqB,WAGjF6G,EAAO/f,MAAQ3J,KAAKC,IAAIypB,EAAO/f,MAAO,IACtCjJ,GAAQ8/Z,EAAY92Y,OAAOhD,OAAOhmB,EAAIM,EAAUykT,IAAMzkT,EAAUy2C,MAAS/tB,EAAO/f,MAAQ,EAAK,IAC7FhJ,GAAQ6/Z,EAAY92Y,OAAOhD,OAAO/lB,EAAIK,EAAUwkT,IAAMxkT,EAAUy2C,MAAS/tB,EAAOhgB,OAAS,EAAK,EAM9Fs/C,GAAiBsyX,GAJbrkb,GAAMtD,KAAKgB,QAAQsC,GAAK,kBACxBoB,MAAS,2BAAkCqI,EAAI,UAAYC,EAAI,aAAe+oB,EAAO/f,MAAQ,GACzF,aAAe+f,EAAOhgB,OAAS,qBAAuBxV,EAAK+C,GAAK,MAWxE+xD,GAAiBuyX,GAPbtkb,GAAMtD,KAAKgB,QAAQsC,GAAK,WACxBoB,MAAS,UAAYqxB,EAAO/f,MAAQ,GAAK,aAAe+f,EAAOhgB,OAC3D,8DACiBrR,EAAM4qB,WAAa,cAAgB5qB,EAAMwqB,SAAW,iBACpE29Y,EAAYnoa,MAAMsnD,UAAU2Q,oBAAuB,IACxD+tE,MAAS,wBAGbk9S,EAASljb,MAAM0qB,WAAc1qB,EAAU,KAAI,OAAS,GACpDkjb,EAASljb,MAAM2qB,UAAa3qB,EAAY,OAAI,SAAW,GACvDkjb,EAASljb,MAAMunD,eAAkBvnD,EAAoB,eAAIA,EAAMunD,eAAiB,GAChF27X,EAASjmb,YAAYnB,SAASi2D,eAAe3nC,IAC7C9uB,KAAKkta,YAAYvyW,SAAWp6D,EAAK+C,GACjCtD,KAAKkta,YAAY5pa,GAAKA,EACtBupa,EAAY/1Y,SAAU,EACtB92B,KAAKova,oBAAoB7ua,GACzBP,KAAKyhD,eAAiBzhD,KAAKyhD,eAAiBC,GAAc0mX,SAC1Dpoa,KAAKsoa,cAAc3ma,YAAYgmb,GAC/Bpib,GAAanB,IAAIwjb,EAAU,QAAS5nb,KAAK0hb,aAAa/U,YAAa3sa,KAAK0hb,cACxEn8a,GAAanB,IAAIwjb,EAAU,WAAY5nb,KAAK6nb,aAAc7nb,MAC1D4nb,EAAS1lb,QACT0lb,EAASnib,aAQzBslD,EAAQ1vD,UAAU2mQ,SAAW,WACzB,IACIv4M,EADAlS,GAAS,EAETyhY,EAAah5a,KAAK+nF,oBACtB/nF,KAAK6oD,uBAAsB,GAC3B,IAAIi/X,GAAa/6a,EAAG/M,KAAKmjD,SAASQ,cAAe32C,EAAGhN,KAAKmjD,SAASO,gBAwBlE,GAvBI1jD,KAAKm5a,2BACL1vX,EAASzpD,KAAKm5a,0BAA0B4O,aAAa/nb,KAAK0qD,MAAO1qD,KAAK06D,UAAW16D,KAAKypD,OAAQq+X,EAAU9nb,KAAK8oD,mBAAmBxlD,IAChIi0C,GAAS,GAEJv3C,KAAKgob,oBACVhob,KAAKgob,mBAAmBD,aAAa/nb,KAAK0qD,MAAO1qD,KAAK06D,UAAW16D,KAAKypD,OAAQq+X,EAAU9nb,KAAK8oD,mBAAmBxlD,GAAItD,KAAK8oD,mBAAmBijJ,MAC5Ix0J,GAAS,GAEJv3C,KAAKiob,kBACVjob,KAAKiob,iBAAiBF,aAAa/nb,KAAK0qD,MAAO1qD,KAAK06D,UAAW16D,KAAKypD,OAAQq+X,GAC5EvwY,GAAS,GAEJv3C,KAAKkob,yBACVlob,KAAKkob,wBAAwBC,aAAenob,KAAKypD,OAAO0+X,aACxDnob,KAAKkob,wBAAwBE,aAAepob,KAAKypD,OAAO2+X,aACxDpob,KAAKkob,wBAAwBG,aAAerob,KAAKypD,OAAO4+X,aACxDrob,KAAKkob,wBAAwBH,aAAa/nb,KAAK0qD,MAAO1qD,KAAKyqD,WAAYzqD,KAAKkob,wBAAyBlob,KAAK06D,UAAW16D,KAAKypD,OAAQq+X,GAClIvwY,GAAS,GAEJv3C,KAAKsob,gCACVtob,KAAKsob,8BAA8BtmL,SAAShiQ,KAAK0qD,MAAO1qD,KAAK06D,UAAW16D,KAAKypD,OAAQq+X,GACrFvwY,GAAS,GAETA,EAAQ,CACRv3C,KAAKs0a,eAAgB,EAErB,IAAK,IADD7pX,KACKrsD,EAAK,EAAGyE,EAAK7C,KAAK0qD,MAAOtsD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpD,IACImC,EADMsC,EAAGzE,GAOb,GALA4B,KAAKk5a,WAAW34a,GAChBP,KAAKuob,yBAAyBhob,GAC9BP,KAAKg3a,mBAAmBz2a,MAAYsL,QAAStL,EAAKsL,QAASI,QAAS1L,EAAK0L,UAAW,GACpF1L,EAAKwR,QAAQ0tN,QAAQ,IAAIhwM,GAAKlvB,EAAKwR,QAAQiE,MAAOzV,EAAKwR,QAAQgE,SAC/DxV,EAAKwR,QAAQowY,QAAQ5hZ,EAAKwR,QAAQ4mD,aAC9Bp4D,EAAK8sZ,QAAQ5wZ,OAAS,EACtB,IAAK,IAAIgnB,EAAI,EAAGA,EAAIljB,EAAK8sZ,QAAQ5wZ,OAAQgnB,IAAK,CAE1CgnC,GADI1S,EAAY/3C,KAAK06D,UAAUn6D,EAAK8sZ,QAAQ5pY,KACvBngB,IAAMy0C,EAGnC,GAAIx3C,EAAK6sZ,SAAS3wZ,OAAS,EACvB,IAAK,IAAI4pB,EAAI,EAAGA,EAAI9lB,EAAK6sZ,SAAS3wZ,OAAQ4pB,IAAK,CAC3C,IAAImia,EAAaxob,KAAK06D,UAAUn6D,EAAK6sZ,SAAS/mY,IAC9CokC,EAAW+9X,EAAWllb,IAAMklb,GAIxC,IAAK,IAAIvkb,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAKmtD,GAAaxmD,EAAKwG,EAAGhO,OAAQwH,IAAM,CACjE,IACI8zC,EAEJ0W,GAFI1W,EAAY0S,EADLhgD,EAAGxG,IAEDjE,KAAKm4C,UAAUJ,IAE5BA,EAAUhmC,QAAQ0tN,QAAQ,IAAIhwM,QAAKt0B,OAAWA,IAC9C48C,EAAUhmC,QAAQowY,QAAQpqW,EAAUhmC,QAAQ4mD,aAC5C34D,KAAKigb,WAAWloY,GAEpB/3C,KAAKs0a,eAAgB,EACrBt0a,KAAKgib,aACLhib,KAAKqwa,sBAKT,OAHK2I,GACDh5a,KAAK6oD,sBAAsBmwX,GAExBvvX,GAKXsB,EAAQ1vD,UAAUotb,YAAc,WAC5B,OAAOpgY,GAAUroD,OAMrB+qD,EAAQ1vD,UAAUqtb,YAAc,SAAUlsb,GACtC,OAAOmsD,GAAYnsD,EAAMwD,OAM7B+qD,EAAQ1vD,UAAUstb,cAAgB,SAAU31a,GACxC,GAAIhT,KAAK4ob,qBAAsB,CAE3B,OADW5ob,KAAK4ob,qBAAqBD,cAAc31a,GAGvD,MAAO,IAMX+3C,EAAQ1vD,UAAU0F,MAAQ,SAAUiS,GAC5BhT,KAAK4ob,sBACL5ob,KAAK4ob,qBAAqB7nb,MAAMiS,IAMxC+3C,EAAQ1vD,UAAUwtb,SAAW,SAAU9rb,EAAKuzD,GACxC,IAAI2+C,EACA3+C,EAAM7zD,OAAS,GACfuD,KAAK8ga,mBAET,IAAK,IAAI3ka,EAAI,EAAGA,EAAIm0D,EAAM7zD,OAAQN,IAAK,CACnC8yG,EAAS,IAAIj1C,GAAUj9D,EAAK,QAASuzD,EAAMn0D,IAAI,GAC/CY,EAAIuzD,MAAM9rD,KAAKyqG,GAGf,GAFalyG,EAAIgV,QACVqI,SAAS5V,KAAKzH,EAAIqxZ,gBAAgBrxZ,EAAIuzD,MAAMvzD,EAAIuzD,MAAM7zD,OAAS,OAChEuD,KAAKyhD,eAAiBC,GAAcmwX,UAAe7xa,KAAKyhD,eAAiBC,GAAciwX,OAAQ,CACjG,IAAIxS,GACAz4Z,KAAM,wBAAyB2+a,WAAY,SAAUhmB,WAAY92W,GAAY0mD,GAC7EmwT,WAAY72W,GAAYxrD,GAAMouM,SAAU,YAE5CnrM,KAAKs/Z,gBAAgBH,IAGzB7uW,EAAM7zD,OAAS,GACfuD,KAAKmha,iBAETpka,EAAIgV,QAAQ0tN,QAAQ,IAAIhwM,GAAK1yB,EAAIiZ,MAAOjZ,EAAIgZ,SAC5ChZ,EAAIgV,QAAQowY,QAAQplZ,EAAIgV,QAAQ4mD,aAChC34D,KAAKova,oBAAoBrya,IAK7BguD,EAAQ1vD,UAAUmsb,UAAY,SAAUzqb,EAAKyjO,GACzC,IACIvxH,EADA+5R,EAASjsY,EAAIgV,QAEbyuN,EAAO/jO,OAAS,GAChBuD,KAAK8ga,mBAET,IAAK,IAAI3ka,EAAI,EAAGA,EAAIqkO,EAAO/jO,OAAQN,IAAK,CACpC,GAAIY,aAAewiD,GAGf,GAFA0vD,EAAS,IAAI82S,GAAgBhpZ,EAAK,cAAeyjO,EAAOrkO,IAAI,GAC5DY,EAAIqzD,YAAY5rD,KAAKyqG,GACjBlyG,EAAIqd,UAEJ,IAAK,IADD7Z,EAAOxD,EACF2qB,EAAM,EAAGA,EAAMnnB,EAAKwR,QAAQqI,SAAS3d,OAAQirB,IAClD,GAAsC,oBAAlCnnB,EAAKwR,QAAQqI,SAASsN,GAAKpkB,GAA0B,CACrC/C,EAAKwR,QAAQqI,SAASsN,GAC5BtN,SAAS5V,KAAKzH,EAAI6xZ,sBAAsB7xZ,EAAIqzD,YAAYrzD,EAAIqzD,YAAY3zD,OAAS,WAKnGusY,EAAO5uX,SAAS5V,KAAKzH,EAAI6xZ,sBAAsB7xZ,EAAIqzD,YAAYrzD,EAAIqzD,YAAY3zD,OAAS,UAG3F,GAAIM,aAAemhD,GAAW,CAC/B+wD,EAAS,IAAI+2S,GAAejpZ,EAAK,cAAeyjO,EAAOrkO,IAAI,GAC3DY,EAAIqzD,YAAY5rD,KAAKyqG,GACrB,IAAI1kE,EAAUy+V,EAAO5uX,SAAS,GAC1B2b,EAAS,IAAIR,GAAKgV,EAAQ1+B,QAAU0+B,EAAQv0B,MAAQ,EAAGu0B,EAAQt+B,QAAUs+B,EAAQx0B,OAAS,EAAGw0B,EAAQv0B,MAAOu0B,EAAQx0B,QACxHizX,EAAO5uX,SAAS5V,KAAKzH,EAAI2sZ,qBAAqB3sZ,EAAIqzD,YAAYrzD,EAAIqzD,YAAY3zD,OAAS,GAAIM,EAAImoD,mBAAoBnvB,EAAQ/1B,KAAKkpD,iBAEpI,KAAMlpD,KAAKyhD,eAAiBC,GAAcmwX,UAAe7xa,KAAKyhD,eAAiBC,GAAciwX,OAAQ,CACjG,IAAIxS,GACAz4Z,KAAM,yBAA0B2+a,WAAY,SAAUhmB,WAAY92W,GAAY0mD,GAC9EmwT,WAAY72W,GAAYxrD,GAAMouM,SAAU,YAE5CnrM,KAAKs/Z,gBAAgBH,IAGzB3+L,EAAO/jO,OAAS,GAChBuD,KAAKmha,iBAETpka,EAAIgV,QAAQ0tN,QAAQ,IAAIhwM,GAAKu5W,EAAOhzX,MAAOgzX,EAAOjzX,SAClDhZ,EAAIgV,QAAQowY,QAAQnZ,EAAOrwU,aAC3B34D,KAAKova,oBAAoBrya,IAK7BguD,EAAQ1vD,UAAUytb,aAAe,SAAU/rb,EAAKyjO,GACxCA,EAAO/jO,OAAS,GAChBuD,KAAK8ga,mBAET,IAAK,IAAIr9Y,EAAI+8M,EAAO/jO,OAAS,EAAGgnB,GAAK,EAAGA,IACpC,IAAK,IAAItnB,EAAI,EAAGA,EAAIY,EAAIgV,QAAQqI,SAAS3d,OAAQN,IAAK,CAClD,IAAI6sY,EAASjsY,EAAIgV,QAAQqI,SAASje,GAClC,GAAI6sY,aAAkB78U,IACd68U,EAAO1lY,GAAGqM,MAAM,IAAM6wN,EAAO/8M,GAAGngB,GAAK,KAAM,CAC3C,IAAK,IAAI+iB,EAAI,EAAGA,EAAItpB,EAAIqzD,YAAY3zD,OAAQ4pB,IACxC,GAAI2iX,EAAO1lY,GAAGqM,MAAM,IAAM5S,EAAIqzD,YAAY/pC,GAAG/iB,GAAK,KAAM,CACpD,KAAMtD,KAAKyhD,eAAiBC,GAAcmwX,UAAW,CACjD,IAAI1S,GACAz4Z,KAAM,yBAA0B2+a,WAAY,SAAUhmB,WAAY92W,GAAYxrD,EAAIqzD,YAAY/pC,IAC9F+4Y,WAAY72W,GAAYxrD,GAAMouM,SAAU,YAE5CnrM,KAAKs/Z,gBAAgBH,GAEzBpia,EAAIqzD,YAAY3nC,OAAOpC,EAAG,GAIlC,GADAtpB,EAAIgV,QAAQqI,SAASqO,OAAOtsB,EAAG,GACb,QAAd6D,KAAKu+B,KAAgB,CACrB,IAAIv9B,EAAUwzD,GAAkBw0U,EAAO1lY,IACvC,GAAItC,EAAS,CACT,IAAImsF,EAAY34B,GAAkBw0U,EAAO1lY,IACzC6pF,EAAU1sF,WAAW6E,YAAY6nF,GAEnB34B,GAAkBw0U,EAAO1lY,GAAK,WAE5CtC,EAAUwzD,GAAkBw0U,EAAO1lY,GAAK,UAChC7C,WAAW6E,YAAYtE,QAInChB,KAAKw1a,uBAMrBh1M,EAAO/jO,OAAS,GAChBuD,KAAKmha,kBAMbp2W,EAAQ1vD,UAAU0tb,YAAc,SAAUhsb,EAAKuzD,GACvCA,EAAM7zD,OAAS,GACfuD,KAAK8ga,mBAET,IAAK,IAAIr9Y,EAAI,EAAGA,EAAI6sC,EAAM7zD,OAAQgnB,IAC9B,IAAK,IAAItnB,EAAI,EAAGA,EAAIY,EAAIgV,QAAQqI,SAAS3d,OAAQN,IAAK,CAClD,IAAI6sY,EAASjsY,EAAIgV,QAAQqI,SAASje,GAClC,GAAI6sY,aAAkBnvV,IACdmvV,EAAO1lY,GAAGqM,MAAM,IAAM2gD,EAAM7sC,GAAGngB,GAAK,KAAM,CAC1C,IAAK,IAAI+iB,EAAI,EAAGA,EAAItpB,EAAIuzD,MAAM7zD,OAAQ4pB,IAClC,GAAI2iX,EAAO1lY,GAAGqM,MAAM,IAAM5S,EAAIuzD,MAAMjqC,GAAG/iB,GAAK,KAAM,CAC9C,KAAMtD,KAAKyhD,eAAiBC,GAAcmwX,UAAW,CACjD,IAAI1S,GACAz4Z,KAAM,wBAAyB2+a,WAAY,SAAUhmB,WAAY92W,GAAYxrD,EAAIuzD,MAAMjqC,IACvF+4Y,WAAY72W,GAAYxrD,GAAMouM,SAAU,YAE5CnrM,KAAKs/Z,gBAAgBH,GAEzBpia,EAAIuzD,MAAM7nC,OAAOpC,EAAG,GAI5B,GADAtpB,EAAIgV,QAAQqI,SAASqO,OAAOtsB,EAAG,GACb,QAAd6D,KAAKu+B,KAAgB,CACrB,IAAIv9B,EAAUwzD,GAAkBw0U,EAAO1lY,IACvCtC,EAAQP,WAAW6E,YAAYtE,QAG/BhB,KAAKw1a,uBAMrBllX,EAAM7zD,OAAS,GACfuD,KAAKmha,kBAUbp2W,EAAQ1vD,UAAUqta,aAAe,SAAUsgB,EAAM9mY,GAC7C,IAAIllD,EAUJ,GARIA,EADAgsb,EAAK97a,WAAW3O,QAAQ,MAAQ,EACxByqb,EAAK97a,WAER87a,EAAK97a,WAAW3O,QAAQ,KAAO,OACdpD,IAAd+mD,EAA0B,OAAS8mY,EAAK97a,WAGxC87a,EAAK97a,WAAa,KAE1Bg1C,EAAW,CACIC,GAAaniD,MAC5BhD,EAAQ,QAAUA,EAAQ,MAAQklD,EAAY,MAElD,OAAOllD,GAEX+tD,EAAQ1vD,UAAUsnb,aAAe,WACzB3ib,KAAKwiD,cAAce,ajXv4D/B,SAAqCxV,GACjC,IAAImU,EAAYC,GAAapU,GAMzBk7Y,EAAU3mY,GAAkB,OAJ5Bh/C,GAAMyqC,EAAQ/sC,QAAQsC,GAAK,gBAC3BoB,MAAO,UAAYw9C,EAAUnsC,OAAS,YAAcmsC,EAAUlsC,MAAQ,oCACtE00H,MAAO,oBAGX38F,EAAQ/sC,QAAQkE,aAAa+jb,EAASl7Y,EAAQ/sC,QAAQ+b,YiXg4D9Cmsa,CAAqBlpb,MACrBgiD,GAAYhiD,MAAM,GAClBgiD,GAAYhiD,MAAM,IAGlByjD,GAAoBzjD,OAG5B+qD,EAAQ1vD,UAAUymb,qBAAuB,WACrC,IAAI5ta,EAAW,IAAIub,GACnBvb,EAAWiuC,GAAaniD,MACxB,IAAIgB,EAAUR,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,WACpD0S,EAAQhW,KAAK0oa,aAAa1oa,KAAKgW,MAAO9B,EAAS8B,OAC/CD,EAAS/V,KAAK0oa,aAAa1oa,KAAK+V,OAAQ7B,EAAS6B,QACjDrR,EAAQ1E,KAAKwiD,cAAce,WAC3B,SAAWvtC,EAAQ,YAAcD,EAAS,QAC7B7B,EAAS6B,OAAS,WAAa7B,EAAS8B,MAAQ,uDAE7D,SAAWA,EAAQ,YAAcD,EAAS,yDAE1Cu+I,GACAhxJ,GAAMtD,KAAKgB,QAAQsC,GAAK,UACxBg+H,SAAY,IACZ58H,MAASA,GAER1D,GAKDhB,KAAKsoa,cAAgBtna,EACrBhB,KAAKsoa,cAAc9ka,aAAa,QAASkB,KALzC1E,KAAKsoa,cAAgBhmX,GAAkB,MAAOgyG,GAC9Ct0J,KAAKgB,QAAQW,YAAY3B,KAAKsoa,gBAMlCtoa,KAAKsoa,cAAc5ja,MAAM4oB,WAAattB,KAAKuqD,iBAE/CQ,EAAQ1vD,UAAUynb,YAAc,WAC5B9ib,KAAK8hb,uBACLzsX,GAAiBr1D,KAAKgB,SAClB0D,MAAO,SAAW1E,KAAK0oa,aAAa1oa,KAAKgW,OAAS,YAC5ChW,KAAK0oa,aAAa1oa,KAAK+V,QAAU,yCAI/Cg1C,EAAQ1vD,UAAU8tb,sBAAwB,SAAUpzZ,EAAQqzZ,GACxD,IAAIC,EAAUrpb,KAAKwgC,UAAUxgC,KAAKgB,QAAQsC,GAAK,uBAAwByyB,EAAO/f,MAAO+f,EAAOhgB,QAC5Fsza,EAAQ7lb,aAAa,QAAS4lb,GAC9B,IAAIE,EAAkBh0X,GAAiB,KACnChyD,GAAMtD,KAAKgB,QAAQsC,GAAK,wBACxBonI,MAAS,6BAEb2+S,EAAQ1nb,YAAY2nb,GACpB,IACIh8Z,EAAagoC,GAAiB,KADrBhyD,GAAMtD,KAAKgB,QAAQsC,GAAK,mBAAoBonI,MAAS,uBAElE2+S,EAAQ1nb,YAAY2rB,GACpBttB,KAAKsoa,cAAc3ma,YAAY0nb,IAEnCt+X,EAAQ1vD,UAAUkub,gBAAkB,SAAUxzZ,EAAQqzZ,GAClD,IAAII,EAAaxpb,KAAKwgC,UAAUxgC,KAAKgB,QAAQsC,GAAK,gBAAiByyB,EAAO/f,MAAO+f,EAAOhgB,QACxFyza,EAAWhmb,aAAa,QAAS,gBACjC,IAAI82Z,EAAUhlW,GAAiB,KAAOhyD,GAAMtD,KAAKgB,QAAQsC,GAAK,YAAa0S,MAAS,OAAQD,OAAU,SAClG2c,EAAO4iC,GAAiB,QACxBhyD,GAAMtD,KAAKgB,QAAQsC,GAAK,aAAcyJ,EAAK,IAAKC,EAAK,IAAKgJ,MAAS,OAAQD,OAAU,OACrFqoB,KAAQ,QAAUp+B,KAAKgB,QAAQsC,GAAK,cAExCg3Z,EAAQ34Z,YAAY+wB,GACpB82Z,EAAW7nb,YAAY24Z,GACvBt6Z,KAAKsoa,cAAc3ma,YAAY6nb,GAC/Bj0X,GAAgBi0X,GAAc9kb,MAAS0kb,KAE3Cr+X,EAAQ1vD,UAAUoub,mBAAqB,SAAU1zZ,EAAQqzZ,GACrD,IAAI1lb,EAOJ,GANA1D,KAAK0pb,gBAAkBlpb,SAASW,cAAc,OAC9CuC,GACIJ,GAAMtD,KAAKgB,QAAQsC,GAAK,oBACxBoB,MAAS,SAAWqxB,EAAO/f,MAAQ,cAAgB+f,EAAOhgB,OAAS,MAAQqza,GAE/E/zX,GAAiBr1D,KAAK0pb,gBAAiBhmb,GACrB,QAAd1D,KAAKu+B,KAAgB,CACrB,IAAIorZ,EAAa3pb,KAAKwgC,UAAUxgC,KAAKgB,QAAQsC,GAAK,oBAAqByyB,EAAO/f,MAAO+f,EAAOhgB,QAC5F4za,EAAWnmb,aAAa,QAAS,2BACjCmmb,EAAWnmb,aAAa,QAAS,mBACjC,IAAImya,EAAergX,GAAiB,KAAOhyD,GAAMtD,KAAKgB,QAAQsC,GAAK,kBAC/Dsmb,EAAsBt0X,GAAiB,QAC3Ct1D,KAAK21a,aAAeA,EACpBA,EAAanya,aAAa,QAAS,wBACnComb,EAAoBjob,YAAYg0a,GAChCgU,EAAWhob,YAAYiob,GACvB5pb,KAAK0pb,gBAAgB/nb,YAAYgob,QAGjC3pb,KAAK21a,aAAeznV,GAAeI,aAAatuF,KAAKgB,QAAQsC,GAAK,WAAYyyB,EAAO/f,MAAO+f,EAAOhgB,QACnG/V,KAAK21a,aAAanya,aAAa,QAAS,uCACxCxD,KAAK0pb,gBAAgB/nb,YAAY3B,KAAK21a,cAE1C31a,KAAKsoa,cAAc3ma,YAAY3B,KAAK0pb,kBAExC3+X,EAAQ1vD,UAAU2ob,WAAa,WAC3B,IAAIoF,EAAc,0EAEdrzZ,EADYv1B,SAASyuB,eAAejvB,KAAKgB,QAAQsC,IAC9BsI,wBACnBi+a,E/Wr/CZ,WACI,IAAIC,EAAQtpb,SAASW,cAAc,OACnC2ob,EAAMplb,MAAMC,WAAa,SACzBmlb,EAAMplb,MAAMsR,MAAQ,QACpBxV,SAASuL,KAAKpK,YAAYmob,GAC1B,IAAIC,EAAgBD,EAAMl+a,wBAAwBoK,MAElD8za,EAAMplb,MAAMmV,SAAW,SAEvB,IAAIsI,EAAQ3hB,SAASW,cAAc,OACnCghB,EAAMzd,MAAMsR,MAAQ,OACpB8za,EAAMnob,YAAYwgB,GAClB,IAAI6na,EAAkB7na,EAAMvW,wBAAwBoK,MAGpD,OADA8za,EAAMrpb,WAAW6E,YAAYwkb,GACtBC,EAAgBC,E+Ws+CAC,GACnBjqb,KAAKmjD,SAAS84X,cAAgB4N,EAC9B7pb,KAAKmjD,SAASslX,gBAAgB1yY,EAAO/f,MAAO+f,EAAOhgB,QACnD/V,KAAK2ib,eACLtsX,KAEAr2D,KAAKmpb,sBAAsBpzZ,EAAQqzZ,GACnCppb,KAAKupb,gBAAgBxzZ,EAAQqzZ,GAC7Bppb,KAAKypb,mBAAmB1zZ,EAAQqzZ,GAChCppb,KAAKkqb,gBAAgBn0Z,EAAQqzZ,GAC7Bppb,KAAKmqb,uBAAuBp0Z,EAAQqzZ,GACpCppb,KAAKoqb,kBAAkBr0Z,EAAQqzZ,GAC/Bppb,KAAKqqb,mBAAmBt0Z,EAAQqzZ,IAEpCr+X,EAAQ1vD,UAAUgvb,mBAAqB,SAAUt0Z,EAAQqzZ,GACrD,IAAI7yX,EAAajU,GAAkB,OAC/Bh/C,GAAMtD,KAAKgB,QAAQsC,GAAK,uBACxBoB,MAAS,SAAWqxB,EAAO/f,MAAQ,aAAe+f,EAAOhgB,OAAS,MAAQqza,IAE1EkB,EAAgBtqb,KAAKwgC,UAAUxgC,KAAKgB,QAAQsC,GAAK,sBAAuByyB,EAAO/f,MAAO+f,EAAOhgB,QACjGu0a,EAAc9mb,aAAa,QAAS,mBACpC8mb,EAAc9mb,aAAa,QAAS,wBACpCxD,KAAKo3Z,aAAe9hW,GAAiB,KAAOhyD,GAAMtD,KAAKgB,QAAQsC,GAAK,oBACpEtD,KAAKo3Z,aAAa5zZ,aAAa,QAAS,0BACxC8mb,EAAc3ob,YAAY3B,KAAKo3Z,cAC/B7gW,EAAW50D,YAAY2ob,GACvBtqb,KAAKsoa,cAAc3ma,YAAY40D,GAC/B,IAAIg0X,EAAcj1X,GAAiB,KAAOhyD,GAAMtD,KAAKgB,QAAQsC,GAAK,qBAClEtD,KAAKo3Z,aAAaz1Z,YAAY4ob,GAC9Bh1X,GAAgB+0X,GAAiB5lb,MAAO,0BAE5CqmD,EAAQ1vD,UAAU8ub,uBAAyB,SAAUp0Z,EAAQqzZ,GACzD,IAAIoB,EAAcxqb,KAAKwgC,UAAUxgC,KAAKgB,QAAQsC,GAAK,oBAAqByyB,EAAO/f,MAAO+f,EAAOhgB,QAC7Fy0a,EAAYhnb,aAAa,QAAS,wBAClC,IAAIinb,EAAgBn1X,GAAiB,KACjChyD,GAAMtD,KAAKgB,QAAQsC,GAAK,gBACxBonI,MAAS,gBACThmI,MAAS,yBAEb8lb,EAAY7ob,YAAY8ob,GACxB,IAAIC,EAAiBp1X,GAAiB,KAClChyD,GAAMtD,KAAKgB,QAAQsC,GAAK,mBACxBonI,MAAS,iBACThmI,MAAS,yBAEb8lb,EAAY7ob,YAAY+ob,GACxB1qb,KAAKsoa,cAAc3ma,YAAY6ob,GAC/Bj1X,GAAgBi1X,GAAe9lb,MAAS0kb,KAE5Cr+X,EAAQ1vD,UAAU6ub,gBAAkB,SAAUn0Z,EAAQqzZ,GAClDppb,KAAK42Z,UAAYt0W,GAAkB,OAC/Bh/C,GAAMtD,KAAKgB,QAAQsC,GAAK,aACxBoB,MAAS,SAAWqxB,EAAO/f,MAAQ,cAAgB+f,EAAOhgB,OAAS,6EAEnE20H,MAAS,iBAEb,IAAIigT,EAAeroY,GAAkB,OACjCh/C,GAAMtD,KAAKgB,QAAQsC,GAAK,iBACxBoB,MAAS,2DAEb1E,KAAK42Z,UAAUj1Z,YAAYgpb,GAC3B3qb,KAAKsoa,cAAc3ma,YAAY3B,KAAK42Z,YAExC7rW,EAAQ1vD,UAAU+ub,kBAAoB,SAAUr0Z,EAAQqzZ,GACpD,IAAIwB,EAAiB5qb,KAAKwgC,UAAUxgC,KAAKgB,QAAQsC,GAAK,mBAAoByyB,EAAO/f,MAAO+f,EAAOhgB,QAC3F2kZ,EAAcplW,GAAiB,KAAOhyD,GAAMtD,KAAKgB,QAAQsC,GAAK,eAAgBoB,MAAS,wBAC3Fkmb,EAAejpb,YAAY+4Z,GAC3B16Z,KAAK0pb,gBAAgB/nb,YAAYipb,GACjCr1X,GAAgBq1X,GAAkBlgT,MAAS,iBAAkBhmI,MAAS0kb,KAE1Er+X,EAAQ1vD,UAAUmlC,UAAY,SAAUl9B,EAAI0S,EAAOD,GAC/C,IAAI+jG,EAASt5G,SAAS4C,gBAAgB,6BAA8B,OAEpE,OADAmyD,GAAgBukD,GAAUx2G,GAAMA,EAAI0S,MAASA,EAAOD,OAAUA,IACvD+jG,GAEX/uD,EAAQ1vD,UAAU8mb,YAAc,SAAU0I,GACjC7qb,KAAK4qD,WACN5qD,KAAK8qb,WAET9qb,KAAK+qb,mBACL/qb,KAAK6hb,eAAegJ,IAExB9/X,EAAQ1vD,UAAU0vb,iBAAmB,WAQjC,IACK,IARDC,EAAYhrb,KAAKsqD,OAAO7tD,OAAS,EAEjCguD,KACAwgY,KACAC,KAEAjtP,KAEK7/L,EAAK,EAAGyE,EAAK7C,KAAK0qD,MAAOtsD,EAAKyE,EAAGpG,OAAQ2B,IAAM,EAChDrB,EAAM8F,EAAGzE,IACTkF,GAAKvG,EAAIuG,IAAMqzD,KACnB32D,KAAKmrb,WAAWpub,EAAKiub,GACrBC,EAAUlub,EAAIuG,IAAMvG,EAExB,IAAK,IAAIkH,EAAK,EAAGwG,EAAKzK,KAAKyqD,WAAYxmD,EAAKwG,EAAGhO,OAAQwH,IAAM,EACrDlH,EAAM0N,EAAGxG,IACTX,GAAKvG,EAAIuG,IAAMqzD,KACnB32D,KAAKmrb,WAAWpub,EAAKiub,GACrBC,EAAUlub,EAAIuG,IAAMvG,EAExB,IAAK,IAAI+tO,EAAK,EAAGC,EAAK/qO,KAAKsqD,OAAQwgL,EAAKC,EAAGtuO,OAAQquO,IAAM,CAErD,IAAK,IAAIE,EAAK,EAAGC,GADb//J,EAAQ6/J,EAAGD,IACa5jL,QAAS8jL,EAAKC,EAAGxuO,OAAQuuO,IAAM,CAEvD,GAAIigN,EADAlub,EAAMkuO,EAAGD,IAET,GAAMigN,EAAUlub,aAAgBmhD,GAa3B,CAED,IADInG,EAAYkzY,EAAUlub,IACZwyC,UAAYwI,EAAU2zW,SAAU,CAC1C,IAAI57W,EAAam7Y,EAAUlzY,EAAUxI,UACjCQ,EAAak7Y,EAAUlzY,EAAU2zW,UACjC57W,GAAcA,EAAW/9B,SAAWg+B,GAAcA,EAAWh+B,QAC7D/R,KAAKimb,eAAegF,EAAUlub,GAAMmuE,GAGpCzgB,EAAWjmD,KAAKymb,EAAUlub,SAI9BiD,KAAKimb,eAAegF,EAAUlub,GAAMmuE,QAzBpC+/W,EAAUlub,GAAKqd,SACf6jL,EAAOz5L,KAAKzH,GAENkub,EAAUlub,GAAKo8B,iBAAiBmzX,IACtC2+B,EAAUlub,GAAKo8B,MAAMy0X,SAASD,WAAWE,WACzCo9B,EAAUlub,GAAKo8B,MAAMy0X,SAASD,WAAWE,UAAUpxZ,OAAS,EAC5Dyub,EAAUD,EAAUlub,GAAKuG,IAAMvG,EAG/BiD,KAAKorb,UAAUH,EAAUlub,GAAMmuE,GAqB/C,GAAIlrE,KAAKytZ,WACL,IAAK,IAAI49B,EAAK,EAAGC,EAAKtrb,KAAKytZ,WAAW89B,yBAA0BF,EAAKC,EAAG7ub,OAAQ4ub,IAAM,CAClF,IAAItub,EAAMuub,EAAGD,GACbrrb,KAAKimb,eAAelpb,EAAKmuE,GAAO,IAI5C,IAAK,IAAIsgX,EAAK,EAAGC,EAAKntb,OAAOhB,KAAK4tb,GAAYM,EAAKC,EAAGhvb,OAAQ+ub,IAAM,CAC5Dzub,EAAM0ub,EAAGD,GACbxrb,KAAKwza,WAAWyX,EAAUlub,IAC1BiD,KAAKytZ,WAAWy4B,YAAY+E,EAAUlub,GAAMiD,MAEhD,IAAK,IAAI0rb,EAAK,EAAGC,EAAW1tP,EAAQytP,EAAKC,EAASlvb,OAAQivb,IAAM,CACxD3ub,EAAM4ub,EAASD,GAAnB,IACIxgX,EAAQlrE,KAAKq9Z,eAAemP,eAAezva,GAC/CiD,KAAKorb,UAAUH,EAAUlub,GAAMmuE,GAEnC,IAAK,IAAI0gX,EAAK,EAAGC,EAAephY,EAAYmhY,EAAKC,EAAapvb,OAAQmvb,IAAM,CACxE,IAAI7zY,EAAY8zY,EAAaD,GACzB1gX,EAAQlrE,KAAKq9Z,eAAemP,eAAez0X,EAAUz0C,IACzDtD,KAAKimb,eAAeluY,EAAWmzB,KAGvCngB,EAAQ1vD,UAAU8vb,WAAa,SAAUpub,EAAKiub,GAC1C,IAAI9/W,EACA8/W,IACA9/W,EAAQlrE,KAAKq9Z,eAAemP,eAAezva,EAAIuG,KAE9C0nb,GAAc9/W,IACmC,IAA9ClrE,KAAKuwa,YAAYrpX,QAAQ3oD,QAAQxB,EAAIuG,KACrCtD,KAAKuwa,YAAYrpX,QAAQ1iD,KAAKzH,EAAIuG,IAG1CtD,KAAKkvN,UAAUhkJ,GAASlrE,KAAKuwa,YAAaxza,IAE9CguD,EAAQ1vD,UAAUgnb,YAAc,SAAUr0V,GACtC,IAAK,IAAI5vF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,EAAQ1jC,QAASlsD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAGrE,IAAK,IAFDf,EAAMwF,EAAGzE,GAEJ6F,EAAK,EAAG6nb,EADC9rb,KAAKsqD,OAAOjtD,GAAK6pD,QACWjjD,EAAK6nb,EAAcrvb,OAAQwH,IAAM,CAC3E,IAAIlH,EAAM+ub,EAAc7nb,GACpB1D,EAAOP,KAAK06D,UAAU39D,QACU5B,IAAhC6yF,EAAQ1jC,OAAOjtD,GAAKy5B,QACpB92B,KAAKguZ,wBAAwBztZ,EAAKwR,QAASxR,EAAMytF,EAAQ1jC,OAAOjtD,GAAKy5B,UAEnC,IAA7Bk3D,EAAQ1jC,OAAOjtD,GAAKova,MACzBzsa,KAAKy+Z,SAASl+Z,QAGWpF,IAA7B6yF,EAAQ1jC,OAAOjtD,GAAKova,OACpBzsa,KAAKsqD,OAAOjtD,GAAKova,KAAOz+U,EAAQ1jC,OAAOjtD,GAAKova,MAGlC,QAAdzsa,KAAKu+B,MACLv+B,KAAKqwa,uBAGbtlX,EAAQ1vD,UAAUinb,qBAAuB,SAAUt0V,GAC/C,IAAI+9V,GAAS/rb,KAAKmjD,SAASC,iBAAmB4qC,EAAQ3jC,eAAejH,kBAAoB,EACrF4oY,EAAQhsb,KAAKmjD,SAASG,eAAiB0qC,EAAQ3jC,eAAe/G,gBAAkB,EAChFt6C,GACAijb,eAAgBjsb,KAAKqqD,eAAe/G,eAAgB4oY,iBAAkBlsb,KAAKqqD,eAAejH,iBAC1F+oY,eAAgBnsb,KAAKqqD,eAAe3G,eAAgB0oY,cAAepsb,KAAKqqD,eAAe1G,cACvF0oY,YAAarsb,KAAKmjD,SAASY,aAElB,IAATgoY,GAAuB,IAATC,GACdhsb,KAAKi0U,IAAI83G,EAAMC,GAEnB,IAKI14V,GACAtqF,SAAUA,EAAU1B,UALpB2kb,eAAgBjsb,KAAKqqD,eAAe/G,eAAgB4oY,iBAAkBlsb,KAAKqqD,eAAejH,iBAC1F+oY,eAAgBnsb,KAAKqqD,eAAe3G,eAAgB0oY,cAAepsb,KAAKqqD,eAAe1G,cACvF0oY,YAAarsb,KAAKmjD,SAASY,aAGaxnD,OAAQyD,MAEpDA,KAAKg2J,aAAasrP,GAAagrC,aAAch5V,IAEjDvoC,EAAQ1vD,UAAUyvb,SAAW,WACrB9qb,KAAKusb,oBACDvsb,KAAK8oD,mBAAmBs1G,aAAep+J,KAAK8oD,mBAAmBs1G,YAAYt5F,iBACpB3pE,IAAvD6E,KAAK8oD,mBAAmBs1G,YAAYt5F,WAAW1rC,IAC/Cp5B,KAAKusb,kBAAkBC,WAAWxsb,KAAK8oD,mBAAoB9oD,MAG3DA,KAAKusb,kBAAkBzB,SAAS9qb,KAAK8oD,mBAAoB9oD,QAIrE+qD,EAAQ1vD,UAAU+vb,UAAY,SAAUrub,EAAKmuE,GACzClrE,KAAKs0a,eAAgB,EACrBt0a,KAAKwza,WAAWz2a,EAAKmuE,GACrBlrE,KAAKs0a,eAAgB,GAEzBvpX,EAAQ1vD,UAAU4qb,eAAiB,SAAUlpb,EAAKmuE,EAAOuhX,GACrDzsb,KAAKs0a,eAAgB,EACrBt0a,KAAKwza,WAAWz2a,EAAKmuE,EAAOuhX,GAC5Bzsb,KAAK+lb,YAAYhpb,GACjBiD,KAAKs0a,eAAgB,GAEzBvpX,EAAQ1vD,UAAU6zN,UAAY,SAAUhkJ,EAAOnuE,GAE3C,IAAI2vb,EAAexhX,EACnB,IAAsB,IAAlB,EAAMlH,OAAe,CACrB,KAAO0oX,EAAare,YAAYqe,EAAate,aAAe,IACxDljW,EAAMkjW,eAEVrxa,EAAIinE,SAAW0oX,EAAate,iBAE3B,CACD,IAAIn8Z,EAAQlV,EAAIinE,OAChB,GAAI0oX,EAAare,YAAYp8Z,GAEzB,IACK,IAFDyja,EAAcp3a,OAAOhB,KAAKovb,EAAare,aAAa5xa,OAE/CN,EAAI,EAAGA,EAAIu5a,EAAav5a,IAC7B,GAAIA,IAAM8V,EAAO,CACb,IAAK,IAAIgzT,EAAMywG,EAAazwG,EAAMhzT,EAAOgzT,IACrCynH,EAAare,YAAYppG,GAAOynH,EAAare,YAAYppG,EAAM,GAC3DjlU,KAAK06D,UAAUgyX,EAAare,YAAYppG,MACxCjlU,KAAK06D,UAAUgyX,EAAare,YAAYppG,IAAMjhQ,OAASihQ,GAG/DynH,EAAare,YAAYlya,GAAKY,EAAIuG,MAOtDynD,EAAQ1vD,UAAU4ob,wBAA0B,WACxC,IAAK,IAAI7lb,EAAK,EAAGyE,EAAK7C,KAAKsqD,OAAQlsD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACrD,IAAI8sE,EAAQroE,EAAGzE,GACf8sE,EAAMlH,OAAShkE,KAAKsqD,OAAO/rD,QAAQ2sE,GACnClrE,KAAKswa,iBAAiBplW,EAAMlH,QAAUkH,EAAM5nE,GAEhD,GAA2B,IAAvBtD,KAAKsqD,OAAO7tD,OAAc,CAK1BuD,KAAKq9Z,eAAenhI,UAHhB54R,GAAI,gBAAiBwzB,SAAS,EAAM21Y,MAAM,EAAOvlX,WAAa8c,OAAQ,EACtEoqW,cAAe,EAAGC,iBAI1Brua,KAAK8wa,eAAe9wa,KAAKsqD,OAAOtqD,KAAKsqD,OAAO7tD,OAAS,GAAG6G,KAG5DynD,EAAQ1vD,UAAUgya,UAAY,WAC1Brta,KAAK0hb,aAAarU,aAGtBtiX,EAAQ1vD,UAAUm4a,WAAa,SAAUz2a,EAAKmuE,EAAOuhX,GAEjD,QADuB,IAAnBA,IAA6BA,GAAiB,QACtCtxb,IAAR4B,EAAmB,CAWnB,GAVI0vb,IACKvhX,IACDlrE,KAAKmrb,WAAWpub,GAAK,GACrBmuE,EAAQlrE,KAAKuwa,cAGbxza,aAAewiD,IAAQxiD,aAAemhD,KACtCl+C,KAAKkvN,UAAUhkJ,EAAOnuE,IAG1BA,aAAewiD,IACf,GAAIktY,EAAgB,CAEhB,GADIhgG,EAAcxoS,GAAYjkD,KAAK4pD,iBAClB,EACT+iY,EAAWlgG,EAAY1vV,EAAKiD,QAChB2sb,IAAa5vb,GACzB46D,GAAag1X,EAAU5vb,GAG/BiD,KAAK4sb,SAAS7vb,EAAKiD,KAAKgB,QAAQsC,UAGnC,GAAIvG,aAAemhD,GAAW,CAC/B,IAAIuuS,EACJ,GADIA,EAAcxoS,GAAYjkD,KAAK8pD,sBAClB,CACb,IAAI6iY,GAAAA,EAAWlgG,EAAY1vV,EAAKiD,QAChB2sb,IAAa5vb,GACzB46D,GAAag1X,EAAU5vb,GAEvBA,EAAI0sC,SAAShtC,QACTM,EAAI2J,OAAS3J,EAAI0sC,SAAS,GAAG/iC,OAC7B3J,EAAI0sC,aAIhB,IAAIqG,EAAa9vC,KAAK06D,UAAU39D,EAAIwyC,UAChCQ,EAAa/vC,KAAK06D,UAAU39D,EAAI2uZ,UAapC,QAZmBvwZ,IAAf20C,GAA4B2P,GAAc3P,KAC1C/yC,EAAIkyC,cAAgBjvC,KAAK6sb,kBAAkB/8Y,EAAY/yC,GAAK,GACxDA,EAAIu9D,eACJv9D,EAAIoyC,kBAAoBnvC,KAAK6gH,WAAW/wE,EAAW/9B,QAAShV,EAAIu9D,qBAGrDn/D,IAAf40C,GAA4BuP,GAAavP,KACzChzC,EAAIyyC,cAAgBxvC,KAAK6sb,kBAAkB98Y,EAAYhzC,GAAK,GACxDA,EAAI4uZ,eACJ5uZ,EAAImzC,kBAAoBlwC,KAAK6gH,WAAW9wE,EAAWh+B,QAAShV,EAAI4uZ,iBAGnE8gC,EAAgB,CAEjBh+X,GAAgB1xD,EADHA,EAAIksZ,mBAAmBlsZ,EAAI2J,OAGxC+lb,GACA1vb,EAAIsrP,KAAKroP,MAEbjD,EAAIgV,QAAQ0tN,QAAQ,IAAIhwM,QAAKt0B,OAAWA,IACxC4B,EAAIgV,QAAQowY,QAAQplZ,EAAIgV,QAAQ4mD,aAMpC,GAJI34D,KAAKytZ,YAAc1wZ,aAAewiD,IACZ,SAAnBxiD,EAAIo8B,MAAMzyB,MAAmB3J,EAAIo8B,MAAMi3B,YAAY3zD,OAAS,GAC/DuD,KAAKytZ,WAAWwyB,WAAWljb,EAAKiD,MAEhCysb,EAAgB,CAEhB,IAD+Bzsb,KAAKq9Z,eAAewG,8BAAyB1oa,OAAWA,EAAW4B,EAAIgV,QAAQgkB,QAG1G,IAAK,IADDx1B,EAAOxD,aAAewiD,GAAOv/C,KAAK0qD,MAAQ1qD,KAAKyqD,WAC1CtuD,EAAI,EAAGA,GAAKoE,EAAK9D,OAAQN,IAC1BoE,EAAKpE,IAAMY,EAAIuG,KAAO/C,EAAKpE,GAAGmH,IAC9B/C,EAAKkoB,OAAOtsB,EAAG,GAI3B+uE,EAAMmjW,YAAYtxa,EAAIinE,QAAUjnE,EAAIuG,GAGxC,GADAtD,KAAK06D,UAAU39D,EAAIuG,IAAMvG,EACrBA,aAAewiD,IAAQxiD,EAAIqd,SAAU,CACrCpa,KAAKw4a,kBAAkBz7a,GACvBiD,KAAKihb,WAAWlkb,EAAIuG,IAAMvG,EAAIqd,SAC9B,IAASje,EAAI,EAAGA,EAAIY,EAAIqd,SAAS3d,OAAQN,IAAK,EACtCoE,EAAQP,KAAK06D,UAAU39D,EAAIqd,SAASje,KACnCw+D,SAAW59D,EAAIuG,IAEnBtD,KAAK4qD,WAAa7tD,EAAIupD,aACvBtmD,KAAKq9Z,eAAe2a,cAAcj7a,GAAMA,GAAMA,EAAIupD,aAAev5C,EAAGhQ,EAAI8O,QAASmB,EAAGjQ,EAAIkP,UAAW,GAG3GjM,KAAKigb,WAAWljb,IAEA,IAAhBA,EAAI+5B,SACJ92B,KAAKguZ,wBAAwBjxZ,EAAIgV,QAAShV,GAAK,IAGvDguD,EAAQ1vD,UAAUktb,yBAA2B,SAAUhob,GAC1B,wBAArBP,KAAKypD,OAAO/iD,MAAuD,qBAArB1G,KAAKypD,OAAO/iD,MACrC,4BAArB1G,KAAKypD,OAAO/iD,OAER1G,KAAK8sb,wBAAwBvsb,EAAMA,EAAKiuZ,YACxCxuZ,KAAK8sb,wBAAwBvsb,EAAMA,EAAKkuZ,gBAIpD1jW,EAAQ1vD,UAAUyxb,wBAA0B,SAAUvsb,EAAMotC,GACxD,GAAmB,SAAfA,EAAKxU,OAC4B,SAA7BwU,EAAKmf,qBAA6D,SAA3Bnf,EAAKof,mBAC1B,KAAlBpf,EAAKhiC,OAAOoB,GAA8B,IAAlB4gC,EAAKhiC,OAAOqB,EAAS,CAC7C,IAAIs5L,EAActmM,KAAK6gH,WAAWtgH,EAAKwR,QAAS,gBAC5ClG,OAAU,EACVI,OAAU,EACkB,gBAA5BjM,KAAKypD,OAAO7wB,aAA6D,gBAA5B54B,KAAKypD,OAAO7wB,aACzD/sB,EAAU,GACVI,EAAsC,gBAA5BjM,KAAKypD,OAAO7wB,YAAgC,EAAI,GAEzB,gBAA5B54B,KAAKypD,OAAO7wB,aAA6D,gBAA5B54B,KAAKypD,OAAO7wB,cAC9D/sB,EAAsC,gBAA5B7L,KAAKypD,OAAO7wB,YAAgC,EAAI,EAC1D3sB,EAAU,IAEdq6L,EAAY07M,6BAA6Bn2Y,EAASI,EAAS,YAC3Dq6L,EAAYx5I,oBAAsB,SAClCw5I,EAAYv5I,kBAAoB,SAChCxsD,EAAKwR,QAAQ0tN,QAAQ,IAAIhwM,GAAKlvB,EAAKwR,QAAQiE,MAAOzV,EAAKwR,QAAQgE,SAC/DxV,EAAKwR,QAAQowY,QAAQ5hZ,EAAKwR,QAAQ4mD,eAO9C5N,EAAQ1vD,UAAUm9a,kBAAoB,SAAUj4a,IACvCA,EAAK6Z,UAAY7Z,EAAK6Z,SAAS3d,OAAS,GAAO8D,EAAc,aAC9DP,KAAK06D,UAAUn6D,EAAK+C,IAAIuI,QAAUtL,EAAKwR,QAAQlG,QAC/C7L,KAAK06D,UAAUn6D,EAAK+C,IAAI2I,QAAU1L,EAAKwR,QAAQ9F,QAC1C1L,EAAK6Z,UAAY7Z,EAAK6Z,SAAS3d,OAAS,IACzCuD,KAAK06D,UAAUn6D,EAAK+C,IAAI0S,MAAQzV,EAAKwR,QAAQ0nC,WAAWzjC,MACxDhW,KAAK06D,UAAUn6D,EAAK+C,IAAIyS,OAASxV,EAAKwR,QAAQ0nC,WAAW1jC,UAIrEg1C,EAAQ1vD,UAAUuxb,SAAW,SAAU7vb,EAAKm0D,GACxC,IAEIt2B,EAFAouW,EAASjsY,EAAIkxZ,gBACb8+B,EAAgB,IAAIxoC,GAKxB,GAHKvb,EAAO5uX,WACR4uX,EAAO5uX,aAEPrd,EAAIqd,SAAU,CACd4uX,EAAO4Z,iBAAkB,EACzB,IAAK,IAAIzmZ,EAAI,EAAGA,EAAIY,EAAIqd,SAAS3d,OAAQN,IACjC6D,KAAK06D,UAAU39D,EAAIqd,SAASje,KAC5B6sY,EAAO5uX,SAAS5V,KAAKxE,KAAK06D,UAAU39D,EAAIqd,SAASje,IAAI4V,SAG7Dg7a,EAAczpb,GAAK,kBACnBypb,EAAcrob,MAAM05B,KAAO,OAC3B2uZ,EAAcrob,MAAMgnD,YAAc,OAClCqhY,EAAcjgY,oBAAsB,UACpCigY,EAAchgY,kBAAoB,UAClCggY,EAAc3ya,YACd4uX,EAAO5uX,SAAS5V,KAAKuob,OAEpB,CACD,IAAI9jY,EAAkBhF,GAAYjkD,KAAKipD,iBACnCA,IACAruB,EAAUquB,EAAgBlsD,EAAKiD,OAE9B46B,IACDA,EAAU79B,EAAIsrP,KAAKroP,OAEvBgpY,EAAO5uX,SAAS5V,KAAKo2B,GAGzB,IAAI6uX,EACJA,EAAiBxlW,GAAYjkD,KAAKkpD,iBAE7BnsD,EAAIqd,SAAW4uX,EAASpuW,GAASo5B,YADlCy1V,IAIgD1sZ,EAAIqzD,YAAY3zD,OAASM,EAAIqzD,YAAY,GAAGx1B,QAAU79B,EAAIuG,IAE9G,IAAIsX,EAAY7d,EAAIqd,SAAW2ya,EAAgB/jD,EAC/CjsY,EAAI4xZ,gBAAgB3uZ,KAAKkpD,eAAgBtuC,GACzC7d,EAAImxZ,UAAUluZ,KAAKkpD,eAAgBtuC,GACnC7d,EAAIwxZ,UAAUvuZ,KAAKkpD,eAAgBlpD,KAAKypD,OAAQ7uC,EAAWs2C,GAC3D83U,EAAOvpK,QAAQ,IAAIhwM,GAAK1yB,EAAIiZ,MAAOjZ,EAAIgZ,SACvCizX,EAAOmZ,QAAQnZ,EAAOrwU,cAE1B5N,EAAQ1vD,UAAUguD,WAAa,WAC3B,OAAO,GAEX0B,EAAQ1vD,UAAU0nb,UAAY,WACrB/ib,KAAK4qD,YACN5qD,KAAK6qD,MAAMrmD,KAAKxE,KAAKgB,QAAQsC,IAC7BtD,KAAK6qD,MAAM7qD,KAAKgB,QAAQsC,IAAMtD,OAGtC+qD,EAAQ1vD,UAAU6mb,aAAe,WAC7B,IACI8K,EAAchtb,KAAKmpD,eAAexgB,SAClCA,GACAppC,MACI6pD,QAASppD,KAAK4kb,YAAYtpb,KAAK0E,MAAOqpD,WAAYrpD,KAAKqpD,WAAW/tD,KAAK0E,MACvEgra,SAAW3ta,IAAKgkZ,GAAKt8S,EAAGkmU,aAAc7pB,GAAa+qB,UAEvDiF,OACIhoX,QAASppD,KAAK2kb,aAAarpb,KAAK0E,MAAOqpD,WAAYrpD,KAAKqpD,WAAW/tD,KAAK0E,MACxEgra,SAAW3ta,IAAKgkZ,GAAK4rC,EAAGhiB,aAAc7pB,GAAa+qB,UAEvD4D,KACI3mX,QAASppD,KAAKykb,WAAWnpb,KAAK0E,MAAOqpD,WAAYrpD,KAAKqpD,WAAW/tD,KAAK0E,MACtEgra,SAAW3ta,IAAKgkZ,GAAKjrY,EAAG60Z,aAAc7pB,GAAa+qB,UAEvD31T,QACIptD,QAASppD,KAAK8mb,cAAcxrb,KAAK0E,MAAOqpD,WAAYrpD,KAAKqpD,WAAW/tD,KAAK0E,MACzEgra,SAAW3ta,IAAKgkZ,GAAK0lC,SAEzBnhb,WACIwjD,QAASppD,KAAK4F,UAAUtK,KAAK0E,MAAOqpD,WAAYrpD,KAAKqpD,WAAW/tD,KAAK0E,MACrEgra,SAAW3ta,IAAKgkZ,GAAKn8S,EAAG+lU,aAAc7pB,GAAa+qB,UAEvDoZ,MACIn8X,QAASppD,KAAKulb,KAAKjqb,KAAK0E,MAAOqpD,WAAYrpD,KAAKqpD,WAAW/tD,KAAK0E,MAChEgra,SAAW3ta,IAAKgkZ,GAAK15S,EAAGsjU,aAAc7pB,GAAa+qB,UAEvDqZ,MACIp8X,QAASppD,KAAKwlb,KAAKlqb,KAAK0E,MAAOqpD,WAAYrpD,KAAKqpD,WAAW/tD,KAAK0E,MAChEgra,SAAW3ta,IAAKgkZ,GAAKhrY,EAAG40Z,aAAc7pB,GAAa+qB,UAEvD+gB,SACI9jY,QAASppD,KAAK+kb,aAAazpb,KAAK0E,KAAM,MACtCqpD,WAAYrpD,KAAKqpD,WAAW/tD,KAAK0E,MAAOgra,SAAW3ta,IAAKgkZ,GAAK8rC,IAC7D5hB,UAAW,MAEf6hB,YACIhkY,QAASppD,KAAK+kb,aAAazpb,KAAK0E,KAAM,SACtCqpD,WAAYrpD,KAAKqpD,WAAW/tD,KAAK0E,MAAOgra,SAAW3ta,IAAKgkZ,GAAKltH,OAC7Do3I,UAAW,SAEf8hB,WACIjkY,QAASppD,KAAK+kb,aAAazpb,KAAK0E,KAAM,QACtCqpD,WAAYrpD,KAAKqpD,WAAW/tD,KAAK0E,MAAOgra,SAAW3ta,IAAKgkZ,GAAKisC,MAC7D/hB,UAAW,QAEfgiB,WACInkY,QAASppD,KAAK+kb,aAAazpb,KAAK0E,KAAM,QACtCqpD,WAAYrpD,KAAKqpD,WAAW/tD,KAAK0E,MAAOgra,SAAW3ta,IAAKgkZ,GAAKhpH,MAC7DkzI,UAAW,QAEfiiB,WACIpkY,QAASppD,KAAKqnb,gBAAgB/rb,KAAK0E,MACnCqpD,WAAYrpD,KAAKqpD,WAAW/tD,KAAK0E,MAAOgra,SAAW3ta,IAAKgkZ,GAAKosC,KAEjEnkB,SACIlgX,QAASppD,KAAK0tb,eAAepyb,KAAK0E,MAClCqpD,WAAYrpD,KAAKqpD,WAAW/tD,KAAK0E,MAAOgra,SAAW3ta,IAAKgkZ,GAAKssC,SAEjEC,iBAEIvkY,WAAYrpD,KAAKqpD,WAAW/tD,KAAK0E,MAAOgra,SAAW3ta,IAAKgkZ,GAAKzmC,MAEjEizE,qBAEIxkY,WAAYrpD,KAAKqpD,WAAW/tD,KAAK0E,MAAOgra,SAAW3ta,IAAKgkZ,GAAKzmC,IAAKqwD,aAAc7pB,GAAa+qB,UAEjG2hB,mBACI1kY,QAASppD,KAAKqnb,gBAAgB/rb,KAAK0E,MACnCqpD,WAAYrpD,KAAKqpD,WAAW/tD,KAAK0E,MAAOgra,SAAW3ta,IAAKgkZ,GAAK0sC,SAGrE/tb,KAAKgub,mBAAmBhB,EAAarkZ,IAEzCoiB,EAAQ1vD,UAAU4yb,iBAAmB,SAAUC,EAAYvlZ,GAEvD,IAAK,IADDR,EACK/pC,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKqrC,GAAWvqC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/D,IAAIf,EAAMwF,EAAGzE,GAEb,GADA+pC,EAAUQ,EAAStrC,GACf6wb,EAAWljB,QAAQ3ta,MAAQ8qC,EAAQ6iY,QAAQ3ta,KAAO6wb,EAAWljB,QAAQC,eAAiB9iY,EAAQ6iY,QAAQC,aAAc,QAC7GtiY,EAAStrC,GAChB,SAIZ0tD,EAAQ1vD,UAAU2yb,mBAAqB,SAAUhB,EAAarkZ,GAC1D,IAAIxsC,EAAI,EACR,GAAI6wb,EACA,IAAK7wb,EAAI,EAAGA,EAAI6wb,EAAYvwb,OAAQN,IAC5BwsC,EAASqkZ,EAAY7wb,GAAG46B,OAASi2Z,EAAY7wb,IACzC6wb,EAAY7wb,GAAGktD,aACf1gB,EAASqkZ,EAAY7wb,GAAG46B,MAAMsyB,WAAa2jY,EAAY7wb,GAAGktD,YAE1D2jY,EAAY7wb,GAAGitD,UACfzgB,EAASqkZ,EAAY7wb,GAAG46B,MAAMqyB,QAAU4jY,EAAY7wb,GAAGitD,UAEvD4jY,EAAY7wb,GAAG6ua,QAAQ3ta,KAAO2vb,EAAY7wb,GAAG6ua,QAAQC,gBACrDtiY,EAASqkZ,EAAY7wb,GAAG46B,MAAMi0Y,QAAUgiB,EAAY7wb,GAAG6ua,SAE1B,KAA7BgiB,EAAY7wb,GAAGova,YACf5iY,EAASqkZ,EAAY7wb,GAAG46B,MAAMw0Y,UAAYyhB,EAAY7wb,GAAGova,aAI7Dvra,KAAKiub,iBAAiBjB,EAAY7wb,GAAIwsC,GACtCA,EAASqkZ,EAAY7wb,GAAG46B,OACpBqyB,QAAS4jY,EAAY7wb,GAAGitD,QAASC,WAAY2jY,EAAY7wb,GAAGktD,WAAY2hX,QAASgiB,EAAY7wb,GAAG6ua,QAChGO,UAAWyhB,EAAY7wb,GAAGova,YAK1Cvra,KAAK2oC,SAAWA,GAGpBoiB,EAAQ1vD,UAAU+rb,gBAAkB,SAAU7mb,GAC1C,IAAK,IAAInC,EAAK,EAAGyE,EAAKtC,EAAK8sZ,QAASjvZ,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtD,IAAIua,EAAO9V,EAAGzE,GACV4B,KAAK06D,UAAU/hD,KACf3Y,KAAK06D,UAAU/hD,GAAM+yY,SAAW,IAGxC,IAAK,IAAIznZ,EAAK,EAAGwG,EAAKlK,EAAK6sZ,SAAUnpZ,EAAKwG,EAAGhO,OAAQwH,IAAM,CACnD0U,EAAOlO,EAAGxG,GACVjE,KAAK06D,UAAU/hD,KACf3Y,KAAK06D,UAAU/hD,GAAM42B,SAAW,IAGxChvC,EAAK8sZ,WACL9sZ,EAAK6sZ,aAGTriW,EAAQ1vD,UAAU8yb,qBAAuB,SAAU5tb,EAAMoE,GACrD,IAAK,IAAIxI,EAAI,EAAGA,EAAIoE,EAAKwR,QAAQqI,SAAS3d,OAAQN,IAAK,CACnD,IAAIkE,EAAQE,EAAKwR,QAAQqI,SAASje,GAC9BmH,EAAKjD,EAAMiD,GAAGpG,MAAMqD,EAAK+C,IAAI,GAC7BjD,EAAMiD,IAAMA,GAAMA,EAAGqM,MAAM,YAC3BtP,EAAMy2B,QAAUnyB,EAChB3E,KAAKoub,iCAAiC/tb,EAAOsE,MAKzDomD,EAAQ1vD,UAAU0qb,YAAc,SAAUhpb,GACtC,QAAqB5B,IAAjB4B,EAAIwyC,UAA2C,KAAjBxyC,EAAIwyC,SAAiB,EAC/ChvC,EAAOP,KAAK06D,UAAU39D,EAAIwyC,YAClBhvC,EAAK6sZ,UAAqC,IAAzB7sZ,EAAK6sZ,SAAS3wZ,SACvC8D,EAAK6sZ,aAEL7sZ,GAAQA,EAAK6sZ,WAA+C,IAAnC7sZ,EAAK6sZ,SAAS7uZ,QAAQxB,EAAIuG,KACnD/C,EAAK6sZ,SAAS5oZ,KAAKzH,EAAIuG,IAG/B,QAAqBnI,IAAjB4B,EAAI2uZ,UAA2C,KAAjB3uZ,EAAI2uZ,SAAiB,CACnD,IAAInrZ,EAOJ,IAPIA,EAAOP,KAAK06D,UAAU39D,EAAI2uZ,YAClBnrZ,EAAK8sZ,SAAmC,IAAxB9sZ,EAAK8sZ,QAAQ5wZ,SACrC8D,EAAK8sZ,YAEL9sZ,GAAQA,EAAK8sZ,UAA6C,IAAlC9sZ,EAAK8sZ,QAAQ9uZ,QAAQxB,EAAIuG,KACjD/C,EAAK8sZ,QAAQ7oZ,KAAKzH,EAAIuG,IAEtB/C,GAAQA,EAAKu2B,SAAWv2B,EAAK6sZ,SAAU,CACvC,IAAIpwZ,EAAiC,IAAzBuD,EAAK6sZ,SAAS3wZ,OAC1BuD,KAAKmub,qBAAqB5tb,EAAMvD,MAK5C+tD,EAAQ1vD,UAAUgzb,eAAiB,WAC/Brub,KAAK+qb,mBACL/qb,KAAKgiQ,WACLhiQ,KAAK6hb,iBACL7hb,KAAKmjD,SAASgqJ,WAGlBpiJ,EAAQ1vD,UAAU+za,oBAAsB,SAAUrya,GAE9C,IAAK,IADD2qH,EACKtpH,EAAK,EAAGyE,EAAK7C,KAAK6qD,MAAOzsD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpD,IAAIi7B,EAAOx2B,EAAGzE,GAEd,GAAkB,SADlBspH,EAAO1nH,KAAK6qD,MAAMxxB,IACTkF,MAAkBv+B,KAAKyhD,eAAgB,CAC5C,IAAIm1W,EAAY1hW,GAAal1D,KAAKgB,QAAQsC,IACtCw4Z,EAAuBt7Z,SAASyuB,eAAey4F,EAAK1mH,QAAQsC,GAAK,iBACrEtD,KAAK41a,gBAAgBx/C,WAAWr5X,EAAIgV,QAAS+pZ,EAAsBlF,OAAWz7Z,QAG9E6E,KAAKsub,0BAA0B5mU,KAK3C38D,EAAQ1vD,UAAUkpb,kBAAoB,SAAUhD,GAE5C,IAAK,IADD1L,KACKz3a,EAAK,EAAGmwb,EAAgBhN,EAAanjb,EAAKmwb,EAAc9xb,OAAQ2B,IAAM,CAC3E,IAAIrB,EAAMwxb,EAAcnwb,GACpB4B,KAAK06D,UAAU39D,IACf84a,EAAUrxa,KAAKxE,KAAK06D,UAAU39D,IAGtC,OAAO84a,GAGX9qX,EAAQ1vD,UAAUg1a,oBAAsB,WAEpC,IAAK,IADD3oT,EACKtpH,EAAK,EAAGyE,EAAK7C,KAAK6qD,MAAOzsD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpD,IAAIi7B,EAAOx2B,EAAGzE,GAEd,QADAspH,EAAO1nH,KAAK6qD,MAAMxxB,IACLkF,MACT,IAAK,MACDv+B,KAAKwub,uBAAuB9mU,GAC5B,MACJ,IAAK,SACD1nH,KAAKw1a,yBAMrBzqX,EAAQ1vD,UAAUm6a,oBAAsB,WACpC,IAAK,IAAIp3a,EAAK,EAAGyE,EAAK7C,KAAK6qD,MAAOzsD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpD,IAAIi7B,EAAOx2B,EAAGzE,GACVspH,EAAO1nH,KAAK6qD,MAAMxxB,GACtBr5B,KAAKsub,0BAA0B5mU,KAGvC38D,EAAQ1vD,UAAUozb,mBAAqB,SAAU/mU,GAE7C,IAAK,IADDkvS,EAAY1hW,GAAawyD,EAAK1mH,QAAQsC,IACjCnH,EAAI,EAAGA,EAAI6D,KAAKwqD,cAAc/tD,OAAQN,IAAK,CAChD,IAAI6E,EAAUhB,KAAKwqD,cAAcruD,GAC7B6E,aAAmB4vD,KACnB5vD,EAAQ6hZ,gBAAkB,GAE9B7hZ,EAAQy+N,QAAQ,IAAIhwM,GAAKzuB,EAAQgV,MAAOhV,EAAQ+U,SAChD/U,EAAQmhZ,QAAQnhZ,EAAQ23D,aACxB+uD,EAAKkuT,gBAAgBjf,cAAc31Z,EAAS0mH,EAAKiuT,aAAc/e,KAGvE7rW,EAAQ1vD,UAAU03V,gBAAkB,SAAUrrO,GAC1C,IAAK1nH,KAAKuoF,YAAa,CACnBvoF,KAAK0ub,YAAYhnU,GACbA,aAAgB38D,IAChB28D,EAAKiuT,aAAalnV,WAAW,MAAM2nP,aAAa1uN,EAAKvkE,SAASY,YAAa,EAAG,EAAG2jE,EAAKvkE,SAASY,YAAa,EAAG,GAC/G2jE,EAAKiuT,aAAalnV,WAAW,MAAM3qC,MAAM,IAAK,MAElD,IAAI8yW,EAAY1hW,GAAawyD,EAAK1mH,QAAQsC,IAC7BtD,KAAK6ta,cAAc6N,gBAChC17a,KAAK2ub,sBAAsBjnU,EAAKiuT,aAAcjuT,EAAKkuT,gBAAiBhf,GAChElvS,aAAgB38D,IAChB28D,EAAKiuT,aAAajxa,MAAM2I,UAAY,SAAY,EAAI,EAAK,IACzDq6G,EAAKiuT,aAAajxa,MAAM2Y,gBAAkB,OAE9Crd,KAAKmhb,YAAc,OAI3Bp2X,EAAQ1vD,UAAUizb,0BAA4B,SAAU5mU,GACpD,IAAI3nH,EAAQC,KACM,QAAd0nH,EAAKnpF,MAAmBv+B,KAAKuoF,cACzBvoF,KAAKwqD,cAAc/tD,OAAS,GAC5BuD,KAAKyub,mBAAmB/mU,GAEvB1nH,KAAKyhD,gBAAmE,IAAhDzhD,KAAKyhD,eAAiBC,GAAcyiY,QAGvDnkb,KAAKmhb,cACXnhb,KAAKmhb,YAAchhb,WAAW,WAC1BJ,EAAMgzV,gBAAgBrrO,IACvB,KALH1nH,KAAK+yV,gBAAgBrrO,KAUjC38D,EAAQ1vD,UAAU8ta,qBAAuB,SAAU5oa,EAAM0vD,EAAgB2+X,GACrE,IAAI3gB,EACAtpX,GAAkB3kD,KAAK2kD,gBAAiB3kD,KAAK2kD,cAAcxrB,MAC/D,GAAI54B,aAAgBg/C,IAAQoF,GAAiBpG,GAAQh+C,GAAO,CAGxD,IAAK,IAFD+vD,EAAQ/vD,EAAK+vD,MACb2uI,GAAU,EACL9iM,EAAI,EAAGA,EAAIm0D,EAAM7zD,OAAQN,IAC9B8xa,EAAcjua,KAAK6gH,WAAWtgH,EAAKwR,QAASu+C,EAAMn0D,GAAGmH,KACjD2sD,EAAiBkK,GAAeC,OAASnK,EAAiBkK,GAAeyrV,UACrE51V,GAAqBM,EAAMn0D,GAAI8zD,KAC/Bg+W,EAAYn3Y,SAAW83Z,EACvB3vP,GAAU,GAIlBA,GACAj/L,KAAKova,oBAAoB7ua,KAKrCwqD,EAAQ1vD,UAAUmzb,uBAAyB,SAAU9mU,GACjClnH,SAASyuB,eAAey4F,EAAK1mH,QAAQsC,IAC9BsI,wBAMvB,IAAK,IAJD5K,EAEA86Z,EAAuBt7Z,SAASyuB,eAAey4F,EAAK1mH,QAAQsC,GAAK,iBACjEszZ,EAAY1hW,GAAawyD,EAAK1mH,QAAQsC,IACjCnH,EAAI,EAAGA,EAAI6D,KAAKwqD,cAAc/tD,OAAQN,KAC3C6E,EAAUhB,KAAKwqD,cAAcruD,IACrBsjO,QAAQ,IAAIhwM,GAAKzuB,EAAQgV,MAAOhV,EAAQ+U,SAChD/U,EAAQmhZ,QAAQnhZ,EAAQ23D,aACxB34D,KAAK41a,gBAAgBjf,cAAc31Z,EAAS86Z,EAAsBlF,GAEtE52Z,KAAK2ub,sBAAsB7yB,EAAsB97Z,KAAK41a,gBAAiBhf,IAG3E7rW,EAAQ1vD,UAAUszb,sBAAwB,SAAU3lD,EAAQj5W,EAAU6mY,EAAWvpZ,QAC3D,IAAdA,IAAwBA,GAAY,GACxC,IAAK,IAAIjP,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0C,KAAKswa,kBAAmBlya,EAAKyE,EAAGpG,OAAQ2B,IAGtE,IAAK,IAFDsya,EAAU7ta,EAAGzE,GACb8sE,EAAQlrE,KAAKq9Z,eAAe6F,SAASlja,KAAKswa,iBAAiBI,IACtDzsa,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAK4tE,EAAMmjW,aAAcpqa,EAAKwG,EAAGhO,OAAQwH,IAAM,CACxE,IAAI1D,EAAOkK,EAAGxG,GACVjD,EAAUhB,KAAK06D,UAAUwQ,EAAMmjW,YAAY9ta,IAAOwR,QAChD/R,KAAK06D,UAAUwQ,EAAMmjW,YAAY9ta,IAAe,UAC7CP,KAAK06D,UAAUwQ,EAAMmjW,YAAY9ta,IAAgB,WACtDwvB,EAAS4mY,cAAc31Z,EAASgoY,EAAQ4tB,GAAa7mY,EAASgmY,WAAa1oZ,EAAarN,KAAKmjD,SAAS91C,eAAYlS,KAMlI4vD,EAAQ1vD,UAAUwmb,eAAiB,SAAUgJ,GACzC,GAAI7qb,KAAK6ub,eACL,IAAK,IAAI1yb,EAAI,EAAGA,EAAI6D,KAAKyqD,WAAWhuD,OAAQN,IAAK,CAC7C,IAAI47C,EAAY/3C,KAAKyqD,WAAWtuD,GAChC6D,KAAK6ub,eAAehN,eAAe9pY,EAAW/3C,MAC9C,IAAIgpY,EAAShpY,KAAKyqD,WAAWtuD,GAAG4V,QAChC,GAAIi3X,EAAQ,CACR,IAAIpE,EAAcoE,EAAO5uX,SAAS,GAC9B5d,EAAOooY,EAAYpoY,KACvBu7C,EAAUixW,kBAAkBjxW,EAAW6sV,GACnCA,EAAYpoY,OAASA,IACrBwsY,EAAOvpK,QAAQ,IAAIhwM,IACnBu5W,EAAOmZ,QAAQnZ,EAAOrwU,aACJ,QAAd34D,KAAKu+B,MAAmBssZ,GACxB7qb,KAAKova,oBAAoBr3X,OAQjDgT,EAAQ1vD,UAAUkxV,UAAY,SAAU1xR,GACpC76D,KAAK41a,gBAAgBrpF,UAAUvsV,KAAKsoa,cAAeztW,IAGvD9P,EAAQ1vD,UAAUqzb,YAAc,SAAUhnU,GACtC,IAAI1xG,EACAD,EAGJ,GAFAC,EAAQ0xG,EAAKkyQ,cAAgBlyQ,EAAKiuT,aAAa3/Z,MAC/CD,EAAS2xG,EAAK2tS,eAAiB3tS,EAAKiuT,aAAa5/Z,OAC/B,QAAd2xG,EAAKnpF,KAAgB,CACX2vD,GAAeO,WAAWi5B,EAAKiuT,cACrCmZ,UAAU,EAAG,EAAG94a,EAAOD,KAInCg1C,EAAQ1vD,UAAUixa,mBAAqB,WACnCtsa,KAAKmjD,SAASw4X,gBAAgB37a,KAAKsoa,cAAct8Z,WAAYhM,KAAKsoa,cAAcn8Z,WAChF82C,GAAYjjD,OAGhB+qD,EAAQ1vD,UAAUuvR,UAAY,SAAU/+Q,EAASI,GAC7C,IAAI2O,EAAYpa,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,WACtDsX,IACAA,EAAU5O,WAAaH,EACvB+O,EAAUzO,UAAYF,IAI9B8+C,EAAQ1vD,UAAU8xM,QAAU,SAAUn3L,EAAOD,GACzC,GAAI/V,KAAK21a,eAAiB31a,KAAKs0a,cAAe,CAC1C,IAAIpga,EAAWiuC,GAAaniD,MAC5BgW,GAAS9B,EAAS8B,MAClBD,GAAU7B,EAAS6B,OACnB,IAAIggB,EAAS/1B,KAAK6ta,cAAc6N,gBAChC3lZ,EAAOhpB,GAAK/M,KAAKmjD,SAASY,YAC1BhuB,EAAO/oB,GAAKhN,KAAKmjD,SAASY,YAC1BhuB,EAAO/f,OAAShW,KAAKmjD,SAASY,YAC9BhuB,EAAOhgB,QAAU/V,KAAKmjD,SAASY,YAC/B,IAAIjmB,EAAuB,QAAd99B,KAAKu+B,KAAiB,EAAI,IACnCo3Y,EAA6B,QAAd31a,KAAKu+B,KACpB+1B,GAAmBt0D,KAAKgB,QAAQsC,IAAMtD,KAAK21a,aAC/CA,EAAanya,aAAa,SAAUs6B,EAAS9nB,GAAO9I,YACpDyoa,EAAanya,aAAa,UAAWs6B,EAAS/nB,GAAQ7I,YACtD,IAAIonJ,GAASt+I,MAASA,EAAM9I,WAAY6I,OAAUA,EAAO7I,YACzDlN,KAAK0pb,gBAAgBhlb,MAAMsR,MAAQA,EAAQ,KAC3ChW,KAAK0pb,gBAAgBhlb,MAAMqR,OAASA,EAAS,KAC7Cw/C,GAAgBV,GAAkB70D,KAAKgB,QAAQsC,IAAKgxJ,GACpD/+F,GAAgBX,GAAgB50D,KAAKgB,QAAQsC,IAAKgxJ,GAClD,IAAIy6R,EAAat6X,GAAmBz0D,KAAKgB,QAAQsC,IACjDiyD,GAAgBw5X,EAAYz6R,GAC5By6R,EAAWtub,WAAWiE,MAAMsR,MAAQA,EAAQ,KAC5C+4a,EAAWtub,WAAWiE,MAAMqR,OAASA,EAAS,KAC9C,IAAIi5a,EAAYl6X,GAAgB90D,KAAKgB,QAAQsC,IAC7CiyD,GAAgBy5X,EAAW16R,GAC3Bt0J,KAAK41a,gBAAgBvb,WAAWr6Z,KAAK2qD,aAAcqkY,EAAWhvb,KAAKmjD,SAAS91C,UAAWrN,KAAKwiD,cAAexiD,KAAK8iD,OAAQ9iD,KAAK+iD,QAC7HwS,GAAgBR,GAAsB/0D,KAAKgB,QAAQsC,IAAKgxJ,GACxDt0J,KAAK42Z,UAAUlyZ,MAAMsR,MAAQA,EAAQ,KACrChW,KAAK42Z,UAAUlyZ,MAAMqR,OAASA,EAAS,KACvC/V,KAAK41a,gBAAgBpa,gBAAgBx7Z,KAAKmjD,SAAS91C,UAAyB,QAAdrN,KAAKu+B,MACjD,QAAdv+B,KAAKu+B,MACLv+B,KAAKqwa,sBAETrwa,KAAKi/Z,iBACLj/Z,KAAKkkb,iBAAiBnuZ,KAO9Bg1B,EAAQ1vD,UAAU4zb,iBAAmB,WACjC,GAAIjvb,KAAK21a,aAAc,CACnB,IAAItvX,EAAO2O,GAAmBh1D,KAAKgB,QAAQsC,IAC3C,GAAI+iD,GAAQA,EAAK90C,WAEb,IAAK,IADD0pB,EAAWorB,EAAK90C,WAAW9U,OACtBN,EAAI,EAAGA,EAAI8+B,EAAU9+B,IAC1BkqD,EAAK/gD,YAAY+gD,EAAK90C,WAAW,MASjDw5C,EAAQ1vD,UAAU6ob,iBAAmB,SAAUnuZ,GAC3C/1B,KAAKivb,mBACL,IAAIC,EAAkBl6X,GAAmBh1D,KAAKgB,QAAQsC,IACtD,GAAI4rb,EAAiB,CACjB,IAAI/yb,EAAI,EACR45B,EAAS/1B,KAAKmjD,SAASu4X,eAAc,GACrC,IAAI3ua,GAAK/M,KAAKmjD,SAAS91C,UAAUykT,GAAK/7R,EAAOhpB,GAAK/M,KAAKmjD,SAASY,YAC5D/2C,GAAKhN,KAAKmjD,SAAS91C,UAAUwkT,GAAK97R,EAAO/oB,GAAKhN,KAAKmjD,SAASY,YAC5DhuC,EAASggB,EAAOhgB,OAAS/V,KAAKmjD,SAASY,YACvC/tC,EAAQ+f,EAAO/f,MAAQhW,KAAKmjD,SAASY,YACzC8xW,GAAgBwF,yBAAyBr7Z,KAAKmqD,aAAa78B,WAAYttB,KAAKgB,QAAS+L,EAAGC,EAAGgJ,EAAOD,GAClG,IAAI/C,GACA1P,GAAI4rb,EAAgB5rb,GAAK,OAAQyJ,EAAGA,EACpCC,EAAGA,EACH+I,OAAQA,EACRC,MAAOA,EAAO2L,MAAO,EAAG2c,OAAQ,GAAIstB,YAAa,EACjDxtB,KAAMp+B,KAAKmqD,aAAa78B,WAAWuI,MAAOpoB,QAAS,EACnDmmD,OAAQ,EAAGC,OAAQ,EAAG/8B,SAAS,EAAMg9B,UAAW,KAGpD,GADA9zD,KAAK41a,gBAAgBxa,SAAS8zB,EAAiBl8a,GAC3ChT,KAAKmqD,aAAaglY,eAAgB,CAClC,IAAIrnZ,EAAa9nC,KAAKmjD,SAASo5X,aAAaxmZ,GAC5C,IAAK55B,EAAI,EAAGA,EAAI2rC,EAAWrrC,OAAQN,IAC/B6D,KAAK41a,gBAAgB7mV,SAASmgW,GAC1BxkT,MAAO,uBACPtsG,KAAM,OAAQE,OAAQ,UAAWstB,YAAa,EAAGkI,UAAW,QAC5DrmD,QAAS,EAAGV,EAAG,EAAGC,EAAG,EAAGgJ,MAAO,EAAGD,OAAQ,EAAG4L,MAAO,EAAGiyC,OAAQ,EAAGC,OAAQ,EAAG/8B,SAAS,EACtF0mB,YACIzwC,GAAI+6B,EAAW3rC,GAAGq/B,GAAKx7B,KAAKmjD,SAAS91C,UAAUykT,IAAM9xT,KAAKmjD,SAASY,YACnE/2C,GAAI86B,EAAW3rC,GAAGs/B,GAAKz7B,KAAKmjD,SAAS91C,UAAUwkT,IAAM7xT,KAAKmjD,SAASY,aAEvErM,UACI3qC,GAAI+6B,EAAW3rC,GAAGu/B,GAAK17B,KAAKmjD,SAAS91C,UAAUykT,IAAM9xT,KAAKmjD,SAASY,YACnE/2C,GAAI86B,EAAW3rC,GAAGw/B,GAAK37B,KAAKmjD,SAAS91C,UAAUwkT,IAAM7xT,KAAKmjD,SAASY,aACpEzgD,GAAIwkC,EAAW3rC,GAAGs/B,KAAOqM,EAAW3rC,GAAGw/B,GAAK,kBAAoB,qBAMvFovB,EAAQ1vD,UAAU0mb,iBAAmB,WACjC,IAAI1oZ,EAAO,EAC2B,aAAlCr5B,KAAKmqD,aAAavxB,YACd54B,KAAKmqD,aAAan0C,MAAQhW,KAAKmqD,aAAap0C,SAC5CsjB,EAAOr5B,KAAKmqD,aAAap0C,OACzB/V,KAAKmqD,aAAap0C,OAAS/V,KAAKmqD,aAAan0C,MAC7ChW,KAAKmqD,aAAan0C,MAAQqjB,GAI1Br5B,KAAKmqD,aAAap0C,OAAS/V,KAAKmqD,aAAan0C,QAC7CqjB,EAAOr5B,KAAKmqD,aAAan0C,MACzBhW,KAAKmqD,aAAan0C,MAAQhW,KAAKmqD,aAAap0C,OAC5C/V,KAAKmqD,aAAap0C,OAASsjB,IAOvC0xB,EAAQ1vD,UAAU+zb,YAAc,SAAUC,EAAU/rb,GAChD,GAAI+rb,EACIA,IACArvb,KAAK6qD,MAAMrmD,KAAK6qb,EAAS/rb,IACzBtD,KAAK6qD,MAAMwkY,EAAS/rb,IAAM+rb,EAC1BA,EAASC,eAAeD,GACxBA,EAASzZ,gBAAgB5f,YACzBq5B,EAAS1N,WAAW0N,GACpBrvb,KAAKuvb,YAAYF,QAGpB,CACD,IAAK,IAAIlzb,EAAI,EAAGA,EAAI6D,KAAK6qD,MAAMpuD,OAAQN,IAC/B6D,KAAK6qD,MAAM1uD,KAAOmH,IAClB+rb,EAAYrvb,KAAK6qD,MAAMvnD,IAG/BtD,KAAK6qD,MAAMvnD,QAAMnI,EACjB,IAAI8W,EAAQjS,KAAK6qD,MAAMtsD,QAAQ+E,GAC/BtD,KAAK6qD,MAAMpiC,OAAOxW,EAAO,KAGjC84C,EAAQ1vD,UAAUk0b,YAAc,SAAUF,GACtC,GAAIA,EAAU,CACV,IAAIt/Z,EAAW,IAAI8lY,GAAgBw5B,EAAS/rb,GAAI,IAAI0sB,IAAe,GAC/DqN,EAAI78B,SAASyuB,eAAeoga,EAASrub,QAAQsC,GAAK,iBAClDszZ,EAAY1hW,GAAam6X,EAASrub,QAAQsC,IAC9CtD,KAAK2ub,sBAAsBtxZ,EAAGgyZ,EAASzZ,iBAAmB7lZ,EAAU6mY,KAG5E7rW,EAAQ1vD,UAAUm0b,uBAAyB,SAAUjvb,EAAMi0a,GAGvD,IAAK,IADD/3a,EAAS8D,EAAK9D,OACTN,EAAI,EAAGA,EAAIM,EAAQN,IAAK,CAC7B,IAAIY,EAAMwD,EAAKpE,GACXszb,GAAa,EACbC,GAAa,EACbC,EAAmBnb,EAAc5kX,kBACjC7yD,aAAewiD,IACfkwY,EAAiC,SAAnB1yb,EAAIo8B,MAAMzyB,MAAwC,aAApB3J,EAAIo8B,MAAMA,QACL,IAA5Cp8B,EAAIo8B,MAAMy0X,SAASD,WAAWI,WACX,mBAApBhxZ,EAAIo8B,MAAMA,MACdu2Z,EAAiC,SAAnB3yb,EAAIo8B,MAAMzyB,MAAuC,mBAApB3J,EAAIo8B,MAAMA,MAChD+lB,GAAUniD,IAAU4yb,EAAmB7/X,GAAkB3Q,SAAWswY,IACrEE,IAAuC7/X,GAAkB3Q,QAExDQ,GAAU5iD,EAAK,cAAkB4yb,EAAmB7/X,GAAkBjQ,kBAAoB6vY,IAC3FC,IAAuC7/X,GAAkBjQ,iBAExDF,GAAU5iD,EAAK,cAAkB4yb,EAAmB7/X,GAAkB1P,kBAAoBsvY,IAC3FC,IAAuC7/X,GAAkB1P,iBAExDT,GAAU5iD,EAAK,SAAa4yb,EAAmB7/X,GAAkBhQ,aAAe4vY,IACjFC,IAAuC7/X,GAAkBhQ,YAExDH,GAAU5iD,EAAK,SAAa4yb,EAAmB7/X,GAAkB3P,aAAeuvY,IACjFC,IAAuC7/X,GAAkB3P,YAExDR,GAAU5iD,EAAK,UAAc4yb,EAAmB7/X,GAAkB7P,cAAgByvY,IACnFC,IAAuC7/X,GAAkB7P,aAExDN,GAAU5iD,EAAK,UAAc4yb,EAAmB7/X,GAAkB9P,cAAgB0vY,IACnFC,IAAuC7/X,GAAkB9P,aAExDL,GAAU5iD,EAAK,cAAkB4yb,EAAmB7/X,GAAkB/P,kBAAoB2vY,IAC3FC,IAAuC7/X,GAAkB/P,iBAExDJ,GAAU5iD,EAAK,cAAkB4yb,EAAmB7/X,GAAkB5P,kBAAoBwvY,IAC3FC,IAAuC7/X,GAAkB5P,mBAI7DyvY,GAAsC7/X,GAAkBi8V,QACpDntW,GAAiB7hD,GACjB4yb,GAAsC7/X,GAAkBooW,gBAGxDy3B,IAAuC7/X,GAAkBooW,gBAEzDp5W,GAAiB/hD,GACjB4yb,GAAsC7/X,GAAkBqoW,gBAGxDw3B,IAAuC7/X,GAAkBqoW,iBAGjEqc,EAAc5kX,kBAAoB+/X,IAI1C5kY,EAAQ1vD,UAAUkmW,eAAiB,SAAUoyE,GACzC,IAAIxkZ,EAAO,IAAIM,GACX+kZ,EAAgBx0a,KAAKkrD,cACCspX,EAAcr2X,YAExC,GADAn+C,KAAK+2a,qBACD/2a,KAAKq9Z,eAAerkW,eAAgB,CAWpC,GAVmC,IAA/Bw7W,EAAc9pX,MAAMjuD,QAAoD,IAApC+3a,EAAc/pX,WAAWhuD,SAC7D+3a,EAAcluX,YAAckuX,EAAc9pX,MAAM,GAAGpE,YACnDkuX,EAAcnlX,MAAQmlX,EAAc9pX,MAAM,GAAG2E,OAEjDmlX,EAAczia,QAAQ0tN,QAAQtwM,GAC9BqlZ,EAAczia,QAAQowY,QAAQqyB,EAAczia,QAAQ4mD,aACpD67W,EAAcx+Z,MAAQw+Z,EAAczia,QAAQ0nC,WAAWzjC,MACvDw+Z,EAAcz+Z,OAASy+Z,EAAczia,QAAQ0nC,WAAW1jC,OACxDy+Z,EAAc3oa,QAAU2oa,EAAczia,QAAQlG,QAC9C2oa,EAAcvoa,QAAUuoa,EAAczia,QAAQ9F,QACZ,IAA9Buoa,EAAcluX,YAAmB,CACjC,IAAK,IAAIloD,EAAK,EAAGyE,EAAK2xa,EAAc9pX,MAAOtsD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAIrB,EAAM8F,EAAGzE,GACbrB,EAAI8O,QAAU9O,EAAIgV,QAAQlG,QAC1B9O,EAAIkP,QAAUlP,EAAIgV,QAAQ9F,QAE9B,IAAK,IAAIhI,EAAK,EAAGwG,EAAK+pa,EAAc/pX,WAAYxmD,EAAKwG,EAAGhO,OAAQwH,IACjDwG,EAAGxG,GAITjE,KAAK6ta,cAAc6N,gBAAhC,IACI7iD,OAAkB,EAKtB,GAJAA,EAAkBnkU,GAAmB10D,KAAKgB,QAAQsC,IAClDkxa,EAAc5kX,kBAAoBE,GAAkBi8V,QACpD/rZ,KAAKwvb,uBAAuBhb,EAAc9pX,MAAO8pX,GACjDx0a,KAAKwvb,uBAAuBhb,EAAc/pX,WAAY+pX,GAClDA,EAAc9pX,MAAMjuD,OAAS+3a,EAAc/pX,WAAWhuD,SAAW,GACjE,GAAI+3a,EAAc9pX,MAAM,aAAcnL,GAClCv/C,KAAK41a,gBAAgBte,mBAAmBkd,EAAc9pX,MAAM,GAAG34C,QAAS8mX,EAAiB27C,EAAc5kX,kBAAmB5vD,KAAKmjD,SAASY,YAAaywX,EAAcr2X,YAAan+C,KAAKmjD,SAAS91C,eAAWlS,EAAWojD,GAAQi2X,EAAc9pX,MAAM,UAE/O,GAAI8pX,EAAc/pX,WAAW,aAAcvM,GAAW,CACvD,IAAInG,EAAYy8X,EAAc/pX,WAAW,GACzCzqD,KAAK41a,gBAAgB9d,qBAAqB//W,EAAW8gV,EAAiB27C,EAAc5kX,kBAAmB4kX,EAAcr2X,YAAan+C,KAAKmjD,SAAS91C,eAAuClS,IAA5B48C,EAAU9I,mBAAyD9zC,IAA5B48C,EAAUvI,iBAA8BxvC,KAAK05D,6BAA8B1a,GAAoBjH,WAIrS/3C,KAAK41a,gBAAgBte,mBAAmBkd,EAAczia,QAAS8mX,EAAiB27C,EAAc5kX,kBAAmB5vD,KAAKmjD,SAASY,YAAaywX,EAAcr2X,YAAan+C,KAAKmjD,SAAS91C,eAAWlS,EAAWojD,GAAQi2X,IAEvNx0a,KAAK41a,gBAAgBjd,kBAAkB6b,EAAe37C,EAAiB74X,KAAKmjD,SAAS91C,aAI7F09C,EAAQ1vD,UAAU4ja,eAAiB,WAClBj/Z,KAAK6ta,cAAc6N,gBAAhC,IACIvsZ,EAAO,IAAIM,GACX+kZ,EAAgBx0a,KAAKkrD,cACrBwE,EAAsB8kX,EAAcr2X,YAKxC,GAJMn+C,KAAKyhD,eAAiBC,GAAcC,YAAmD,IAApC3hD,KAAKkrD,cAAcR,MAAMjuD,SAC9EuD,KAAKkrD,cAAc5E,YAActmD,KAAKkrD,cAAcR,MAAM,GAAGpE,YAC7DtmD,KAAKkrD,cAAcn5C,QAAQu0C,YAActmD,KAAKkrD,cAAcR,MAAM,GAAGpE,kBAE9CnrD,IAAvB6E,KAAKkrD,gBACLlrD,KAAK+2a,qBACyB,OAA1BvC,EAAczia,SAAoByia,EAAczia,QAAQqI,SAAS3d,QAAQ,CAGzE,GAFA+3a,EAAczia,QAAQ0tN,QAAQtwM,GAC9BqlZ,EAAczia,QAAQowY,QAAQqyB,EAAczia,QAAQ4mD,aAClB,IAA9B67W,EAAcluX,aAAqBkuX,EAAcluX,cAAgBkuX,EAAczia,QAAQ8wY,gBACvF,IAAK,IAAIzkZ,EAAK,EAAGyE,EAAK2xa,EAAc9pX,MAAOtsD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAIrB,EAAM8F,EAAGzE,GACbrB,EAAI8O,QAAU9O,EAAIgV,QAAQlG,QAC1B9O,EAAIkP,QAAUlP,EAAIgV,QAAQ9F,QAGlCuoa,EAAcx+Z,MAAQw+Z,EAAczia,QAAQ0nC,WAAWzjC,MACvDw+Z,EAAcz+Z,OAASy+Z,EAAczia,QAAQ0nC,WAAW1jC,OACxDy+Z,EAAc3oa,QAAU2oa,EAAczia,QAAQlG,QAC9C2oa,EAAcvoa,QAAUuoa,EAAczia,QAAQ9F,QAC9C,IAAI4sX,OAAkB,EACtBA,EAAkBnkU,GAAmB10D,KAAKgB,QAAQsC,IAClD,IAAIqla,EAAkB3oa,KAAK0hb,aAAa/Y,kBAOxC,GANA6L,EAAc5kX,kBAAoBE,GAAkBi8V,QACpD/rZ,KAAKwvb,uBAAuBhb,EAAc9pX,MAAO8pX,GACjDx0a,KAAKwvb,uBAAuBhb,EAAc/pX,WAAY+pX,GAClDx0a,KAAKkrD,cAAc/M,YAAc0R,GAAoBm8V,YACrDhsZ,KAAK41a,gBAAgBjd,kBAAkB6b,EAAe37C,EAAiB74X,KAAKmjD,SAAS91C,WAErFmna,EAAc9pX,MAAMjuD,OAAS+3a,EAAc/pX,WAAWhuD,SAAW,EACjE,GAAI+3a,EAAc/pX,WAAW,aAAcvM,GAAW,CAClD,IAAInG,EAAYy8X,EAAc/pX,WAAW,GACzCzqD,KAAK41a,gBAAgB9d,qBAAqB//W,EAAW8gV,EAAiB27C,EAAc5kX,kBAAmBF,EAAqB1vD,KAAKmjD,SAAS91C,eAAuClS,IAA5B48C,EAAU9I,mBAAyD9zC,IAA5B48C,EAAUvI,iBAA8BxvC,KAAK05D,6BAA8B1a,GAAoBjH,UAEtRy8X,EAAc9pX,MAAM,aAAcnL,IACvCv/C,KAAK41a,gBAAgBte,mBAAmBkd,EAAc9pX,MAAM,GAAG34C,QAAS8mX,EAAiB27C,EAAc5kX,kBAAmB5vD,KAAKmjD,SAASY,YAAaywX,EAAcr2X,YAAan+C,KAAKmjD,SAAS91C,UAAWs7Z,EAAiBpqX,GAAQi2X,EAAc9pX,MAAM,UAI1P1qD,KAAK41a,gBAAgBte,mBAAmBkd,EAAczia,QAAS8mX,EAAiB27C,EAAc5kX,kBAAmB5vD,KAAKmjD,SAASY,YAAaywX,EAAcr2X,YAAan+C,KAAKmjD,SAAS91C,UAAWs7Z,EAAiBpqX,GAAQi2X,MAMzOzpX,EAAQ1vD,UAAU87Z,uBAAyB,SAAUpqZ,EAAGC,EAAGgJ,EAAOD,GAC9D/V,KAAK+2a,qBACL/2a,KAAK41a,gBAAgBze,uBAAuBpqZ,EAAGC,EAAGgJ,EAAOD,EAAQ/V,KAAKo3Z,aAAcp3Z,KAAKmjD,SAAS91C,YAKtG09C,EAAQ1vD,UAAUg8Z,kBAAoB,SAAUr2Z,GAC5C,IAAI4ub,EAAan7X,GAAmBz0D,KAAKgB,QAAQsC,IACjDtD,KAAK41a,gBAAgBve,kBAAkBr2Z,EAAS4ub,EAAY5vb,KAAKmjD,SAAS91C,YAK9E09C,EAAQ1vD,UAAU6/a,iBAAmB,WACjC,IAAI0U,EAAan7X,GAAmBz0D,KAAKgB,QAAQsC,IAC7Cusb,EAAcD,EAAW3ga,eAAe2ga,EAAWtsb,GAAK,gBACxDusb,GACAA,EAAYpvb,WAAW6E,YAAYuqb,IAI3C9kY,EAAQ1vD,UAAUo7a,mBAAqB,SAAUvrX,GAC7C,IAAK,IAAI/uD,EAAI,EAAGA,EAAI6D,KAAK0qD,MAAMjuD,OAAQN,IAAK,CACxC,IAAIoE,EAAOP,KAAK0qD,MAAMvuD,GACtB+uD,EAAc1mD,KAAKjE,GAEvB,IAASpE,EAAI,EAAGA,EAAI6D,KAAKyqD,WAAWhuD,OAAQN,IAAK,CAC7C,IAAIs9D,EAAOz5D,KAAKyqD,WAAWtuD,GAC3B+uD,EAAc1mD,KAAKi1D,GAEvB,OAAOvO,GAGXH,EAAQ1vD,UAAU07a,mBAAqB,WACnC,IAAI6Y,EAAan7X,GAAmBz0D,KAAKgB,QAAQsC,IAE7Cwsb,GADcF,EAAW3ga,eAAe2ga,EAAWtsb,GAAK,gBACxCssb,EAAW3ga,eAAejvB,KAAKo3Z,aAAa9zZ,GAAK,qBACjEwsb,GACAA,EAAcrvb,WAAW6E,YAAYwqb,GAEzC9vb,KAAKk7a,mBAGL,IAAK,IADD76a,EADAkR,EAAamjD,GAAmB10D,KAAKgB,QAAQsC,IAAIiO,WAE5CpV,EAAIoV,EAAW9U,OAAQN,EAAI,EAAGA,KACnCkE,EAAQkR,EAAWpV,EAAI,IACjBsE,WAAW6E,YAAYjF,IAIrC0qD,EAAQ1vD,UAAUwlH,WAAa,SAAUn2D,EAAOpnD,GAC5C,IAAIyO,EACJzO,EAAKonD,EAAMpnD,GAAK,IAAMA,EAEtB,IAAK,IADDsX,EAAY8vC,aAAiB65V,GAAS75V,EAAQ1qD,KAAK+vb,iBAAiB/vb,KAAK06D,UAAUhQ,EAAMpnD,KACpFnH,EAAI,EAAGA,EAAIye,EAAUR,SAAS3d,OAAQN,IACvCmH,IAAOsX,EAAUR,SAASje,GAAGmH,KAC7ByO,EAAU6I,EAAUR,SAASje,IAGrC,OAAO4V,GAEXg5C,EAAQ1vD,UAAUwxb,kBAAoB,SAAUtsb,EAAMw3C,EAAWx7C,GAC7D,GAAwB,SAApBgE,EAAK44B,MAAMzyB,MAAmBnG,EAAKwR,QAAQqI,SAAS,aAAcmqY,GAAQ,CAC1E,GAAyB,aAArBhkZ,EAAK44B,MAAMA,MAAsB,CACjC,GAAI58B,GAAkD,gBAAxCgE,EAAK44B,MAAMy0X,SAASD,WAAWjnZ,MACtCqxC,EAAUuiB,aAAc,CAC3B,IAAIk1W,EAASz3X,EAAUuiB,aACnBs6C,EAAWr0G,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GAAGA,SAAS,GAC7D,GAAIw6F,EAASx6F,SACT,IAAK,IAAIhc,EAAK,EAAGyE,EAAK+xG,EAASx6F,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC3D,IAAIiC,EAAQwC,EAAGzE,GACf,GAAIiC,EAAMy2B,SAAWz2B,EAAMiD,KAAO/C,EAAK+C,GAAK,IAAMksa,EAC9C,OAAOnva,EAAM+Z,SAAS,IAKtC,OAAO7Z,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GAAGA,SAAS,GAEzD,OAAO7Z,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GAE7C,OAAKpa,KAAKgwb,eAAezvb,EAAKwR,QAAQqI,SAAS,KACtC7Z,EAAK6Z,SAIP7Z,EAAKwR,QAHGxR,EAAKwR,QAAQqI,SAAS,IAKzC2wC,EAAQ1vD,UAAU20b,eAAiB,SAAUzvb,GACzC,OAAOA,EAAK08B,SAAgC,IAArB18B,EAAK08B,OAAOzwB,MAAkC,IAApBjM,EAAK08B,OAAOvwB,KAAmC,IAAtBnM,EAAK08B,OAAOxwB,OAAsC,IAAvBlM,EAAK08B,OAAOtwB,SAErHo+C,EAAQ1vD,UAAUwsb,aAAe,WAC7B7nb,KAAKspa,SAAQ,IAEjBv+W,EAAQ1vD,UAAUqyb,eAAiB,WAC/B1tb,KAAKspa,WAKTv+W,EAAQ1vD,UAAUiua,QAAU,SAAUzlS,GAClC,GAAI7jI,KAAKyhD,eAAiBC,GAAc0mX,SAAU,CAC9C,IAAIwf,EAAWpnb,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,YACrDwrB,EAAO84Z,EAAS5qb,MACpBuI,GAAahB,OAAOqjb,EAAU,QAAS5nb,KAAK0hb,aAAa/U,aACzDpna,GAAahB,OAAOqjb,EAAU,WAAY5nb,KAAK6nb,cAC/C,IAAI7mb,EAAUR,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,mBACpDrD,GAAS+I,SAAUhI,EAAQgb,YAAa1U,SAAUwnB,EAAMuJ,QAAQ,GAChEivZ,GAAiB,EACjB/mb,OAAO,EACXS,EAAQP,WAAW6E,YAAYtE,GAC/B,IAAI6ra,OAAc,EAclB,GAbI7sa,KAAKytZ,aACLltZ,EAAOP,KAAKytZ,WAAWwiC,qBAAqBjwb,KAAKkta,YAAalta,MAC9D6sa,EAAc7sa,KAAKytZ,WAAW85B,yBAAyBhnb,EAAMP,KAAKkta,YAAY5pa,KAC9Egkb,IAAiB/mb,IAETS,EAAQgb,cAAgB8S,IACxB9uB,KAAKg2J,aAAasrP,GAAa4uC,SAAUjwb,GACpCA,EAAKo4B,QACNr4B,KAAKytZ,WAAW0iC,4BAA4B5vb,EAAMP,KAAKkta,YAAap+Y,EAAM9uB,SAKrFsnb,EAAgB,CACjB/mb,EAAOP,KAAK06D,UAAU16D,KAAKkta,YAAYvyW,UACvC,IAAIy1X,EAAapwb,KAAK0hb,aAAavU,cAAc5sa,GAAM,GAClD6vb,GAAcpvb,EAAQgb,cAAgB8S,GACvC9uB,KAAKg2J,aAAasrP,GAAa4uC,SAAUjwb,GAExC4sa,IACDA,EAAc7sa,KAAK6gH,WAAWtgH,EAAKwR,QAAS/R,KAAKkta,YAAY5pa,KAEjE,IAAI+jD,EAAa6I,GAAe3vD,EAAMP,KAAKkta,YAAY5pa,IAMvD,GALI+jD,EAAWzsB,UAAY9L,GAAS7uB,EAAKo4B,SACrCgvB,EAAWzsB,QAAU9L,EACrB9uB,KAAKkkD,WACLlkD,KAAKi/Z,kBAELmxB,IACApwb,KAAK0za,uBAAuBnza,GAC5BP,KAAKyza,gBAAgBlza,UACdP,KAAK06D,UAAU16D,KAAKkta,YAAYvyW,UAC1B,KAAT7rC,GAAa,CACb9uB,KAAK2+Z,iBACL,IAAIr2W,EAAeC,GAAYhoD,GAC/BA,EAAOP,KAAKoE,IAAIkkD,GAChBtoD,KAAKova,oBAAoB7ua,GACzBP,KAAKq9Z,eAAe53Z,OAAOzF,KAAK06D,UAAUn6D,EAAK+C,MAI3Dupa,EAAY/1Y,SAAU,EACtB92B,KAAKova,oBAAoB7ua,GACzBP,KAAKyhD,eAAiBzhD,KAAKyhD,gBAAkBC,GAAc0mX,SACvDpoa,KAAKkta,YAAYgU,SACjBlhb,KAAKmha,iBAETnha,KAAKkta,aAAgB5pa,GAAI,GAAIq3D,SAAU,GAAIumX,SAAS,KAI5Dn2X,EAAQ1vD,UAAUmnb,aAAe,WAC7B,UAAKxib,KAAKyhD,eAAiBC,GAAcyiY,SAAcnkb,KAAKyhD,eAAiBC,GAAcC,YACpF3hD,KAAKyhD,eAAiBC,GAAcmwX,UAAiB7xa,KAAKyhD,eAAiBC,GAAc+jY,eAOpG16X,EAAQ1vD,UAAUonb,aAAe,SAAUz0V,EAASC,GAChD,SAAID,EAAQvjC,YAAcwjC,EAAQxjC,YAAcujC,EAAQtjC,OAASujC,EAAQxjC,YAClEujC,EAAQ7jC,cAAgB8jC,EAAQ9jC,cAAgB6jC,EAAQ9jC,iBAAmB+jC,EAAQ/jC,kBAK9Fa,EAAQ1vD,UAAUqnb,oBAAsB,SAAU/yX,GAC9C,IAAI0gY,IAAW1gY,EACX3vD,KAAKyhD,eAAiBC,GAAcmwX,YAAcwe,GAAa1gY,IAAWjO,GAAcmwX,YACxF7xa,KAAKyhD,eAAiBzhD,KAAKyhD,gBAAkBC,GAAcmwX,UAE3D7xa,KAAKyhD,eAAiBC,GAAc+jY,gBAAkB4K,GAAY1gY,IAAWjO,GAAc+jY,gBAC3Fzlb,KAAKyhD,eAAiBzhD,KAAKyhD,gBAAkBC,GAAc+jY,eAInE16X,EAAQ1vD,UAAU64X,WAAa,SAAU3zX,GACrCP,KAAK0za,uBAAuBnza,GAC5BP,KAAKyza,gBAAgBzza,KAAK06D,UAAUn6D,EAAK+C,YAClCtD,KAAK06D,UAAUn6D,EAAK+C,IACvB/C,EAAK6Z,iBACEpa,KAAKihb,WAAW1gb,EAAK+C,IAEhCtD,KAAK0qD,MAAMjiC,OAAOzoB,KAAK0qD,MAAMnsD,QAAQgC,GAAO,IAGhDwqD,EAAQ1vD,UAAU6rb,YAAc,SAAU3mb,GACtC,IACI+wa,KACA/wa,EAAK6Z,WACLk3Z,EAAWtxa,KAAKq9Z,eAAe7iF,YAAYj6U,OAE/C,IAAK,IAAInC,EAAK,EAAGkyb,EAAahf,EAAUlza,EAAKkyb,EAAW7zb,OAAQ2B,IAAM,CAClE,IAAIssD,EAAQ4lY,EAAWlyb,GACnB4B,KAAK06D,UAAUhQ,EAAMpnD,KACrBtD,KAAKuE,OAAOmmD,KAOxBK,EAAQ1vD,UAAUk1b,aAAe,SAAU7jY,EAAcS,EAAWkpT,GAChE,KAAMr2W,KAAKyhD,eAAiBC,GAAcC,YAAa,CACnD,IAAIsF,EAAQyF,EAAa36C,QAAQqI,SAAS,GAAG2b,OAE7C,IAD+B/1B,KAAKq9Z,eAAewG,8BAAyB1oa,OAAWA,EAAW8rD,GAE9F,GAAIyF,aAAwBnN,GAAM,CAE9B,IAAK,IADDixY,EAAUrjY,EACL/uD,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK+4W,GAAcj4W,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAElE,OADIf,EAAMwF,EAAGzE,IAET,IAAK,QACDsuD,EAAa12C,MAAQw6a,EAAQx6a,MAC7B,MACJ,IAAK,SACD02C,EAAa32C,OAASy6a,EAAQz6a,OAC9B,MACJ,IAAK,UACD22C,EAAa7gD,QAAU2kb,EAAQ3kb,QAC/B,MACJ,IAAK,UACD6gD,EAAazgD,QAAUukb,EAAQvkb,QAC/B,MACJ,IAAK,cACDygD,EAAapG,YAAckqY,EAAQlqY,aAI/CtmD,KAAKg3a,mBAAmBtqX,EAAc2pT,EAAalpT,OAElD,CACD,IAAK,IAAIlpD,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAK+4W,GAAcpyW,EAAKwG,EAAGhO,OAAQwH,IAAM,CAClE,IAAI5G,EAAMoN,EAAGxG,GACTwsb,EAAetjY,EACfujY,EAAoBhkY,EAAa1d,YACjC2hZ,EAAoBjkY,EAAazV,YACrC,OAAQ55C,GACJ,IAAK,cACDqzb,EAAkB3jb,EAAI0jb,EAAazhZ,YAAYjiC,GAAK2jb,EAAkB3jb,EACtE2jb,EAAkB1jb,EAAIyjb,EAAazhZ,YAAYhiC,GAAK0jb,EAAkB1jb,EACtE,MACJ,IAAK,cACD2jb,EAAkB5jb,EAAI0jb,EAAax5Y,YAAYlqC,GAAK4jb,EAAkB5jb,EACtE4jb,EAAkB3jb,EAAIyjb,EAAax5Y,YAAYjqC,GAAK2jb,EAAkB3jb,GAGlFhN,KAAKmva,wBAAwBziX,EAAc2pT,EAAalpT,MAKxEpC,EAAQ1vD,UAAUu1b,yBAA2B,SAAUlkY,EAAcS,EAAW5sD,EAAMg3C,GAUlF,YATmBp8C,IAAfoF,EAAKmE,OAAmD,SAA5BgoD,EAAavzB,MAAMzyB,OAC/C6kD,GAAYhrD,EAAKmE,MAAOgoD,EAAa36C,QAAQqI,SAAS,IACtDm9B,GAAS,QAEYp8C,IAArBoF,EAAK49C,cACLn+C,KAAKwvb,uBAAuBxvb,KAAKkrD,cAAcR,MAAO1qD,KAAKkrD,eAC3DlrD,KAAKi/Z,iBACL1nX,GAAS,GAENA,GAEXwT,EAAQ1vD,UAAUw1b,uBAAyB,SAAUnkY,EAAcokY,GAC/D,IAAIh/H,EACAD,EACAk/H,GAAgB,EACpB,IAAqF,IAAjFD,EAAoBhgZ,OAAOggZ,EAAqBpkY,EAAa36C,QAAQgkB,SACjE22B,EAAa0gW,SAAS3wZ,OAAS,EAC/B,IAAK,IAAI4pB,EAAI,EAAGA,EAAIqmC,EAAa0gW,SAAS3wZ,OAAQ4pB,IAAK,CACnD,IAAI0xB,EAAY/3C,KAAK06D,UAAUhO,EAAa0gW,SAAS/mY,IAOrD,GALI0qa,EADuB,KAAvBh5Y,EAAU2zW,UACM1rZ,KAAKq9Z,eAAenjW,WAAWl6D,KAAK06D,UAAU3iB,EAAU2zW,YAGxD1rZ,KAAKq9Z,eAAenjW,WAAWl6D,KAAK06D,UAAU3iB,EAAUz0C,KAErD,eAAnBy0C,EAAUrxC,MAAyBqxC,EAAUtO,UAAYsO,EAAUtO,SAAShtC,OAAS,GAAKs0b,EAAe,CACzG,OAAQh5Y,EAAUtO,SAAS,GAAG5U,WAC1B,IAAK,SACDi9R,EAAKplQ,EAAa36C,QAAQgkB,OAAO4a,aAAa5jC,EAAI+jb,EAAoBngZ,aAAa5jC,EACnF8kT,EAAKnlQ,EAAa36C,QAAQgkB,OAAO4a,aAAa3jC,EAAI8jb,EAAoBngZ,aAAa3jC,EACnF,MACJ,IAAK,MACD8kT,EAAKplQ,EAAa36C,QAAQgkB,OAAO2a,UAAU3jC,EAAI+jb,EAAoBpgZ,UAAU3jC,EAC7E8kT,EAAKnlQ,EAAa36C,QAAQgkB,OAAO2a,UAAU1jC,EAAI8jb,EAAoBpgZ,UAAU1jC,EAC7E,MACJ,IAAK,OACD8kT,EAAKplQ,EAAa36C,QAAQgkB,OAAO8a,WAAW9jC,EAAI+jb,EAAoBjgZ,WAAW9jC,EAC/E8kT,EAAKnlQ,EAAa36C,QAAQgkB,OAAO8a,WAAW7jC,EAAI8jb,EAAoBjgZ,WAAW7jC,EAC/E,MACJ,IAAK,QACD8kT,EAAKplQ,EAAa36C,QAAQgkB,OAAO6a,YAAY7jC,EAAI+jb,EAAoBlgZ,YAAY7jC,EACjF8kT,EAAKnlQ,EAAa36C,QAAQgkB,OAAO6a,YAAY5jC,EAAI8jb,EAAoBlgZ,YAAY5jC,EAGzFhN,KAAKq9Z,eAAeuZ,cAAc7+X,EAAW+5Q,EAAID,GAAI,EAAM,KAAM,0BAAsB12T,OAAWA,OAAWA,GAAW,MAQ5I4vD,EAAQ1vD,UAAU27a,mBAAqB,SAAUtqX,EAAcS,EAAW5sD,EAAMywb,GAC5E,IAOIz5Y,EAPA05Y,EAAiBvkY,EAAa36C,QAAQgrC,YACtC+zY,EAAsBpkY,EAAa36C,QAAQgkB,OAC3C04B,GAAkB,EAmFtB,QA3EmBtzD,IAAfoF,EAAKyV,OAAwB02C,EAAatyC,WAC1CsyC,EAAa36C,QAAQqI,SAAS,GAAGpE,MAAQzV,EAAKyV,MAC9CuhC,GAAS,EACTkX,GAAkB,QAEFtzD,IAAhBoF,EAAKwV,QAAyB22C,EAAatyC,WAC3CsyC,EAAa36C,QAAQqI,SAAS,GAAGrE,OAASxV,EAAKwV,OAC/CwhC,GAAS,EACTkX,GAAkB,GAEtBlX,EAASv3C,KAAK4wb,yBAAyBlkY,EAAcS,EAAW5sD,EAAMg3C,QAC7Cp8C,IAArBoF,EAAK49C,aAA6BiB,GAAU+N,KAAe/N,GAAU7+C,KACrEmsD,EAAa36C,QAAQqI,SAAS,GAAG25C,OAAS3U,GAAUsN,GAAgBA,EAAaqH,OAAS,WAEzE54D,IAAjBoF,EAAKsL,UACL6gD,EAAa36C,QAAQlG,QAAUtL,EAAKsL,QACpC0rC,GAAS,EACTkX,GAAkB,QAEDtzD,IAAjBoF,EAAK0L,UACLygD,EAAa36C,QAAQ9F,QAAU1L,EAAK0L,QACpCsrC,GAAS,EACTkX,GAAkB,QAEHtzD,IAAfoF,EAAK8uD,QACL3C,EAAa36C,QAAQs9C,MAAQ9uD,EAAK8uD,MAClC9X,GAAS,QAESp8C,IAAlBoF,EAAKssD,WACLH,EAAa36C,QAAQ86C,SAAWtsD,EAAKssD,SACrCtV,GAAS,EACTkX,GAAkB,QAECtzD,IAAnBoF,EAAKosD,YACLD,EAAa36C,QAAQ46C,UAAYpsD,EAAKosD,UACtCpV,GAAS,EACTkX,GAAkB,QAEAtzD,IAAlBoF,EAAKq+B,WACL8tB,EAAa36C,QAAQ6sB,SAAWr+B,EAAKq+B,SACrC2Y,GAAS,EACTkX,GAAkB,QAECtzD,IAAnBoF,EAAKqsD,YACLF,EAAa36C,QAAQ66C,UAAYrsD,EAAKqsD,UACtCrV,GAAS,EACTkX,GAAkB,QAEGtzD,IAArBoF,EAAK+lD,cACLoG,EAAa36C,QAAQu0C,YAAc/lD,EAAK+lD,YACxC/O,GAAS,EACTkX,GAAkB,QAEOtzD,IAAzBoF,EAAKgqD,kBACLmC,EAAa36C,QAAQrN,MAAM05B,KAAO79B,EAAKgqD,sBAEtBpvD,IAAjBoF,EAAKu2B,SACL92B,KAAKguZ,wBAAwBthW,EAAa36C,QAAS26C,EAAcA,EAAa51B,cAE/D37B,IAAfoF,EAAK44B,OAAmD,SAA5BuzB,EAAavzB,MAAMzyB,OAC/C6wC,GAAS,EACT2V,GAAY3sD,EAAMmsD,EAAcS,EAAWntD,MAC3CyuD,GAAkB,GAElBluD,EAAK08B,SACLsa,GAAS,EACTv3C,KAAKkxb,aAAaxkY,EAAcnsD,GAChCkuD,GAAkB,SAEDtzD,IAAfoF,EAAK44B,YAA2Ch+B,IAApBoF,EAAK44B,MAAMzyB,WAAsCvL,IAAfoF,EAAKyV,YAClD7a,IAAhBoF,EAAKwV,aAAuC5a,IAAfoF,EAAKmE,QAAoD,SAA5BgoD,EAAavzB,MAAMzyB,MAAmB1G,KAAKytZ,aACxGl2W,GAAS,EACTkX,GAAkB,EAClBzuD,KAAKytZ,WAAW0jC,WAAW5wb,EAAM4sD,EAAWT,EAAc1sD,YAE3C7E,IAAfoF,EAAK+vD,MACL,IAAK,IAAIlyD,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKiD,EAAK+vD,OAAQlyD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACjE,IAAIf,EAAMwF,EAAGzE,GACT6T,EAAQ2kB,OAAOv5B,GACnBk6C,GAAS,EACT,IAAIiU,EAAgBjrD,EAAK+vD,MAAMjzD,GAC3B+zb,EAAa1kY,EAAa4D,MAAMr+C,GACpCjS,KAAKqxb,WAAW7lY,EAAe4lY,EAAY1kY,EAAa36C,SAGhE,QAAyB5W,IAArBoF,EAAK6vD,kBAA4Cj1D,IAAfoF,EAAKyV,MACvC,IAAK,IAAI/R,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAKiD,EAAK6vD,aAAe1D,EAAa0D,aAAcnsD,EAAKwG,EAAGhO,OAAQwH,IAAM,CAC/F5G,EAAMoN,EAAGxG,GACTgO,EAAQ2kB,OAAOv5B,GACnBk6C,GAAS,EACLiU,EAAgBjrD,EAAK6vD,YAAc7vD,EAAK6vD,YAAY/yD,GAAOqvD,EAAa0D,YAA5E,IACI9D,EAAmBI,EAAa0D,YAAYn+C,GAChD,GAAIq6C,EAAkB,CAClB,IAAIwiN,IAAapiN,EAAa12C,MAC9BhW,KAAKqqZ,iBAAiB7+V,EAAec,EAAkBI,EAAa36C,QAAS26C,EAAcoiN,SAI/E3zQ,IAApBoF,EAAKiuZ,iBAAkDrzZ,IAAtBoF,EAAKkuZ,mBAAkDtzZ,IAApBoF,EAAKs0W,aACzE70W,KAAKk5a,WAAWxsX,GAChB1sD,KAAKuob,yBAAyB77X,QACNvxD,IAApBoF,EAAKs0W,YACL70W,KAAKq9Z,eAAe9yC,WAAW79T,GAAc,EAAM1sD,MAEvDu3C,GAAS,QAEQp8C,IAAjBoF,EAAK0wB,SACLjxB,KAAKyuC,cAAcie,EAAcnsD,GAEjCg3C,IACMv3C,KAAKyhD,eAAiBC,GAAcC,YAClC3hD,KAAKsxb,kBAAkB5kY,IACvB1sD,KAAKi/Z,sBAGW9ja,IAApB6E,KAAKytZ,YACLztZ,KAAKytZ,WAAW8jC,yBAAyB7kY,GAAgB7gD,QAAUshD,EAAUthD,SAAW6gD,EAAa7gD,QAAUI,QAAUkhD,EAAUlhD,SAAWygD,EAAazgD,SAAYjM,MAE3K0sD,EAAa36C,QAAQ0tN,QAAQ,IAAIhwM,GAAKi9B,EAAa36C,QAAQgkB,OAAO/f,MAAO02C,EAAa36C,QAAQgkB,OAAOhgB,SACrG22C,EAAa36C,QAAQowY,QAAQz1V,EAAa36C,QAAQ4mD,aAClD34D,KAAKuwb,aAAa7jY,EAAcS,EAAW5sD,GACtCywb,EAOGtkY,GAAgBA,EAAa51B,SAAW41B,EAAa0gW,UACrDptZ,KAAKmub,qBAAqBzhY,EAAgD,IAAjCA,EAAa0gW,SAAS3wZ,SAPnEuD,KAAK6wb,uBAAuBnkY,EAAcokY,GACtCriY,GACAzuD,KAAKwxb,qBAAqB9kY,SAQVvxD,IAApB6E,KAAKytZ,YACLztZ,KAAKytZ,WAAWy4B,YAAYx5X,EAAc1sD,MAE9CA,KAAKw4a,kBAAkB9rX,IACyD,IAA5EukY,EAAengZ,OAAOmgZ,EAAgBvkY,EAAa36C,QAAQgrC,cAC3D/8C,KAAKigb,WAAWvzX,IAEiE,IAAjFokY,EAAoBhgZ,OAAOggZ,EAAqBpkY,EAAa36C,QAAQgkB,UACrE/1B,KAAKyxb,gBAAgB/kY,GACjBA,EAAatyC,UACbpa,KAAKw4a,kBAAkB9rX,IAGb,QAAd1sD,KAAKu+B,MACLv+B,KAAKova,oBAAoB1iX,KAIrC3B,EAAQ1vD,UAAUm2b,qBAAuB,SAAU9kY,GAC/C,GAAIA,EAAa2gW,QAAQ5wZ,OAAS,EAC9B,IAAK,IAAIgnB,EAAI,EAAGA,EAAIipC,EAAa2gW,QAAQ5wZ,OAAQgnB,IAAK,CAClD,IAAIs0B,EAAY/3C,KAAK06D,UAAUhO,EAAa2gW,QAAQ5pY,IAChDg2C,GACAzqB,YAAa+I,EAAU/I,YAAaiI,YAAac,EAAUd,YAAa1H,SAAUwI,EAAUxI,SAC5Fm8W,SAAU3zW,EAAU2zW,SAAUpxV,aAAcviB,EAAUuiB,aAAcqxV,aAAc5zW,EAAU4zW,cAEhG3rZ,KAAKmva,wBAAwBp3X,KAAe0hB,GAGpD,GAAI/M,EAAa0gW,SAAS3wZ,OAAS,EAC/B,IAAK,IAAI4pB,EAAI,EAAGA,EAAIqmC,EAAa0gW,SAAS3wZ,OAAQ4pB,IAAK,CACnD,IAAImia,EAAaxob,KAAK06D,UAAUhO,EAAa0gW,SAAS/mY,IAClDozC,GACAzqB,YAAaw5Y,EAAWx5Y,YAAaiI,YAAauxY,EAAWvxY,YAAa1H,SAAUi5Y,EAAWj5Y,SAC/Fm8W,SAAU88B,EAAW98B,SAAUpxV,aAAckuX,EAAWluX,aAAcqxV,aAAc68B,EAAW78B,cAEnG3rZ,KAAKmva,wBAAwBqZ,KAAgB/uX,GAGjD/M,EAAaiO,UACb36D,KAAKwxb,qBAAqBxxb,KAAK06D,UAAUhO,EAAaiO,YAI9D5P,EAAQ1vD,UAAUq2b,6BAA+B,SAAUhlY,EAAcuhC,EAASD,EAASixU,GAUvF,YATqB9ja,IAAjB6yF,EAAQtnF,MAAsBsnF,EAAQtnF,OAASunF,EAAQvnF,MACnDgmD,EAAajjB,SAAShtC,OAAS,QAA0BtB,IAArB6yF,EAAQvkD,WAC5CijB,EAAajjB,kBAGEtuC,IAAlB6yF,EAAQ70D,YAA+Ch+B,IAAvBuxD,EAAavzB,OAC9CuzB,EAAavzB,OAAqC,SAA5BuzB,EAAavzB,MAAMzyB,MAAmB1G,KAAKytZ,YACjEztZ,KAAKytZ,WAAWkkC,oBAAoBjlY,EAAcuhC,EAASD,EAAShuF,WAEvC7E,IAA7BuxD,EAAavO,aACbn+C,KAAKwvb,uBAAuBxvb,KAAKkrD,cAAcT,WAAYzqD,KAAKkrD,eACzD+zW,GAAiB,GAErBA,GAGXl0W,EAAQ1vD,UAAU8za,wBAA0B,SAAUziX,EAAcuhC,EAASD,EAAS4jW,GAClF,IAAIX,EAAiBvkY,EAAa36C,QAAQgkB,OACtCkpY,GAAiB,EACjBhoY,KAKJ,GAJAgoY,EAAiBj/Z,KAAK0xb,6BAA6BhlY,EAAcuhC,EAASD,EAASixU,QAC3D9ja,IAApB6yF,EAAQl3D,SACR92B,KAAKguZ,wBAAwBthW,EAAa36C,QAASi8E,EAASthC,EAAa51B,cAEjD37B,IAAxB6yF,EAAQh/C,kBAAqD7zC,IAAxB6yF,EAAQ/2C,kBACrB97C,IAArB6yF,EAAQz+C,eAA+Cp0C,IAArB6yF,EAAQ09T,eACpBvwZ,IAAzB6yF,EAAQ1zB,mBAAuDn/D,IAAzB6yF,EAAQ29T,mBAC7BxwZ,IAAjB6yF,EAAQtnF,WAA2CvL,IAArB6yF,EAAQvkD,SAAwB,CAC9D,QAA0BtuC,IAArB6yF,EAAQz+C,UAA0By+C,EAAQz+C,WAAa0+C,EAAQ1+C,UAAay+C,EAAQ1zB,aAAc,CACnG,IAAIxqB,EAAa9vC,KAAK06D,UAAUhO,EAAand,UAI7C,GAHKO,IAAc2P,GAAc3P,KAC7B4c,EAAazd,cAAgBa,EAAa9vC,KAAK6sb,kBAAkB/8Y,EAAY4c,GAAc,QAAQvxD,QAE9EA,IAArB6yF,EAAQz+C,eAA+Cp0C,IAArB8yF,EAAQ1+C,UAA+C,KAArB0+C,EAAQ1+C,SAAiB,CAC7F,IAAIsiZ,EAAY7xb,KAAK06D,UAAUuzB,EAAQ1+C,eACrBp0C,IAAd02b,GAA2BA,EAAUzkC,WAA6D,IAAjDykC,EAAUzkC,SAAS7uZ,QAAQmuD,EAAappD,KACzFirD,GAAWsjY,EAAUzkC,SAAU1gW,EAAappD,IAGpDtD,KAAK+lb,YAAYr5X,GAErB,QAAyBvxD,IAArB6yF,EAAQ09T,UAA0B19T,EAAQ09T,WAAaz9T,EAAQy9T,SAAU,CACzE,IAAI37W,EAAa/vC,KAAK06D,UAAUszB,EAAQ09T,UAIxC,GAHK37W,IAAcuP,GAAavP,KAC5B2c,EAAald,cAAgBO,EAAa/vC,KAAK6sb,kBAAkB98Y,EAAY2c,GAAc,QAASvxD,QAExFA,IAAZ8yF,QAA8C9yF,IAArB8yF,EAAQy9T,UAA+C,KAArBz9T,EAAQy9T,SAAiB,CACpF,IAAI4tB,EAAYt5a,KAAK06D,UAAUuzB,EAAQy9T,eACrBvwZ,IAAdm+a,GAA2BA,EAAUjsB,UAA2D,IAAhDisB,EAAUjsB,QAAQ9uZ,QAAQmuD,EAAappD,KACvFirD,GAAW+qX,EAAUjsB,QAAS3gW,EAAappD,IAGnDtD,KAAK+lb,YAAYr5X,GAErB,QAA6BvxD,IAAzB6yF,EAAQ1zB,cAA8B0zB,EAAQ1zB,eAAiB2zB,EAAQ3zB,aAAc,CACrF,IAAI/9D,OAAS,EACTmwD,EAAand,UAAYvvC,KAAK06D,UAAUhO,EAAand,YACrDhzC,EAASyD,KAAK06D,UAAUhO,EAAand,UAAUx9B,SAEnD26C,EAAavd,kBAAoB5yC,EAC7ByD,KAAK6gH,WAAWtkH,EAAQyxF,EAAQ1zB,mBAAgBn/D,EAExD,QAA6BA,IAAzB6yF,EAAQ29T,cAA8B39T,EAAQ29T,eAAiB19T,EAAQ09T,aAAc,CACrF,IAAIxkZ,OAAS,EACTulD,EAAag/V,UAAY1rZ,KAAK06D,UAAUhO,EAAag/V,YACrDvkZ,EAASnH,KAAK06D,UAAUhO,EAAag/V,UAAU35Y,SAEnD26C,EAAaxc,kBAAoB/oC,EAC7BnH,KAAK6gH,WAAW15G,EAAQ6mF,EAAQ29T,mBAAgBxwZ,EAExD87B,EAASj3B,KAAKm4C,UAAUuU,GAM5B,QAHsBvxD,IAAlB6yF,EAAQtpF,OACR6mD,GAAYyiC,EAAQtpF,MAAOgoD,EAAa36C,QAAQqI,SAAS,KAEzD6c,EAAOx6B,OAAS,QAAiCtB,IAA5B6yF,EAAQhxC,sBAA6D7hD,IAA5B6yF,EAAQ9wC,sBAC7C/hD,IAAzB6yF,EAAQjlD,gBACR0lB,GAAgB/B,EAAcz1B,EAAOx6B,OAAS,EAAIw6B,EAASy1B,EAAaxH,yBACnD/pD,IAAjB6yF,EAAQtnF,OACRu4Z,GAAiB,GAEjBhoY,EAAOx6B,OAAS,GAAG,CAGnB,GAFAiwD,EAAa36C,QAAQ0tN,QAAQ,IAAIhwM,GAAKi9B,EAAa36C,QAAQiE,MAAO02C,EAAa36C,QAAQgE,SACvF22C,EAAa36C,QAAQowY,QAAQz1V,EAAa36C,QAAQ4mD,aAC9CjM,EAAa0D,YAAY3zD,OACzB,IAAK,IAAI2B,EAAK,EAAGyE,EAAK6pD,EAAa0D,YAAahyD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAClE,IAAIipD,EAAaxkD,EAAGzE,GAChB0zb,OAAoB,EACxBA,EAAoB9xb,KAAK6gH,WAAWn0D,EAAa36C,QAASs1C,EAAW/jD,IACrEopD,EAAa29V,iBAAiBhjW,EAAYqF,EAAaxH,mBAAoBwH,EAAa36C,QAAQgkB,OAAQ+7Z,GAGhHplY,EAAa36C,QAAQ0tN,QAAQ,IAAIhwM,GAAKi9B,EAAa36C,QAAQiE,MAAO02C,EAAa36C,QAAQgE,SACvF22C,EAAa36C,QAAQowY,QAAQz1V,EAAa36C,QAAQ4mD,aAClD34D,KAAKuwb,aAAa7jY,EAAcuhC,EAASD,IAG5CA,EAAQh/C,aAAeg/C,EAAQ/2C,aAAe+2C,EAAQvkD,WACpDzpC,KAAKyhD,iBAAmBC,GAAcyiY,SACzCllB,GAAiB,GAEhB2yB,GACD5xb,KAAK6hb,iBAET7hb,KAAK+xb,kBAAkB/jW,EAASthC,GAChCA,EAAa36C,QAAQ0tN,QAAQ,IAAIhwM,GAAKi9B,EAAa36C,QAAQiE,MAAO02C,EAAa36C,QAAQgE,SACvF22C,EAAa36C,QAAQowY,QAAQz1V,EAAa36C,QAAQ4mD,cACyB,IAAvEs4X,EAAengZ,OAAOmgZ,EAAgBvkY,EAAa36C,QAAQgkB,UAC3D/1B,KAAKigb,WAAWvzX,GAChB1sD,KAAKyxb,gBAAgB/kY,KAEF,IAAnBuyW,GAA2Bj/Z,KAAKsxb,kBAAkB5kY,IAClD1sD,KAAKi/Z,iBAES,QAAdj/Z,KAAKu+B,MACLv+B,KAAKova,oBAAoB1iX,IAGjC3B,EAAQ1vD,UAAU88C,UAAY,SAAUuU,EAAcz1B,GAIlD,OAFMy1B,EAAau8V,mBAAmBv8V,EAAahmD,KAAMuwB,EAA6B,4BAArBj3B,KAAKypD,OAAO/iD,MAA2D,qBAArB1G,KAAKypD,OAAO/iD,KAC3H1G,KAAKypD,OAAO7wB,iBAAcz9B,IAOlC4vD,EAAQ1vD,UAAU22b,mBAAqB,SAAUhxb,EAAS81B,EAASrpB,GAC/D,QAAgBtS,IAAZ27B,EACA92B,KAAKguZ,wBAAwBhtZ,EAAShB,KAAK06D,UAAU15D,EAAQsC,IAAKwzB,OAEjE,CACD91B,EAAQ0D,MAAM+I,QAAUA,EACxB,IAAK,IAAItR,EAAI,EAAGA,EAAI6E,EAAQoZ,SAAS3d,OAAQN,IACrC6E,EAAQoZ,SAASje,aAAcy0D,IAC/B5wD,KAAKgyb,mBAAmBhxb,EAAQoZ,SAASje,QAAIhB,EAAWsS,GAE5DzM,EAAQoZ,SAASje,GAAGuI,MAAM+I,QAAUA,IAQhDs9C,EAAQ1vD,UAAUi2b,kBAAoB,SAAU5kY,GAC5C,IAAI8nX,EAAgBx0a,KAAKkrD,cACrBgP,GAAa,EACb+3X,KAOJ,OANAA,EAAWA,EAASz3a,OAAOg6Z,EAAc9pX,MAAO8pX,EAAc/pX,aACjDhuD,OAAS,GACdiwD,EAAappD,KAAO2ub,EAASA,EAASx1b,OAAS,GAAG6G,KAClD42D,GAAa,GAGdA,GAMXnP,EAAQ1vD,UAAU+yb,iCAAmC,SAAUptb,EAAS81B,GACpE,GAAI91B,aAAmB4vD,GACnB,IAAK,IAAIz0D,EAAI,EAAGA,EAAI6E,EAAQoZ,SAAS3d,OAAQN,IACzC6D,KAAKoub,iCAAiCptb,EAAQoZ,SAASje,GAAI26B,GAGnE91B,EAAQ81B,QAAUA,GAMtBi0B,EAAQ1vD,UAAU2yZ,wBAA0B,SAAUhtZ,EAASjE,EAAK+5B,GAChE,QAAgB37B,IAAZ27B,EAAuB,CAEvB,GADA91B,EAAQ81B,QAAUA,EACd/5B,aAAewiD,GAAM,CAErB,GAAKxiD,EAAIqd,SAQL,IAAK,IAAIhc,EAAK,EAAGyE,EAAK9F,EAAIqd,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtD,IAAIiC,EAAQwC,EAAGzE,GACf4B,KAAKguZ,wBAAwBhuZ,KAAK06D,UAAUr6D,GAAO0R,QAAS/R,KAAK06D,UAAUr6D,GAAQy2B,QATvF91B,EAAQoZ,SAAS,GAAG0c,QAAUA,EAC9B92B,KAAKoub,iCAAiCptb,EAAQoZ,SAAS,GAAI0c,GACpC,SAAnB/5B,EAAIo8B,MAAMzyB,MAAmB1G,KAAKytZ,YAClCztZ,KAAKytZ,WAAWO,wBAAwBjxZ,EAAK+5B,EAAS92B,MAU9D,GAAIjD,EAAIuzD,MACJ,IAAK,IAAIrsD,EAAK,EAAGwG,EAAK1N,EAAIuzD,MAAOrsD,EAAKwG,EAAGhO,OAAQwH,IAAM,CACnD,IAAIssC,EAAO9lC,EAAGxG,GACd,GAAIssC,EAAK5rC,WAAaw1D,GAAeE,QAAS,EACtCtoD,EAAU/R,KAAK6gH,WAAW7/G,EAASuvC,EAAKjtC,KACpCwzB,QAAUA,GAI9B,GAAI/5B,EAAIqzD,YACJ,IAAK,IAAI06K,EAAK,EAAGC,EAAKhuO,EAAIqzD,YAAa06K,EAAKC,EAAGtuO,OAAQquO,IAAM,CACzD,IAAIzjL,EAAa0jL,EAAGD,IAChB/4N,EAAU/R,KAAK6gH,WAAW7/G,EAASqmD,EAAW/jD,KAC1CwzB,QAAUA,QAM1B,IAAK,IAAI36B,EAAI,EAAGA,EAAI,EAAGA,IACnB6E,EAAQoZ,SAASje,GAAG26B,QAAUA,EAGtC,GAAI/5B,EAAIqzD,YAEJ,IAAK,IAAI46K,EAAK,EAAGC,EAAKluO,EAAIqzD,YAAa46K,EAAKC,EAAGxuO,OAAQuuO,IAAM,CACrD3jL,EAAa4jL,EAAGD,IAChBj5N,EAAU/R,KAAK6gH,WAAW7/G,EAASqmD,EAAW/jD,KAC1CwzB,QAAUA,EAG1B,GAAI/5B,EAAIyxZ,YAAczxZ,EAAI0xZ,aAAc,CACpC,IAAI18Y,EACJ,GADIA,EAAU/R,KAAK6gH,WAAW7/G,EAAS,gBAC1B,CACT,IAAS7E,EAAI,EAAGA,EAAI4V,EAAQqI,SAAS3d,OAAQN,IACzC4V,EAAQqI,SAASje,GAAG26B,QAAUA,EAElC/kB,EAAQ+kB,QAAUA,IAGV,IAAZA,GACA92B,KAAKy+Z,SAASz+Z,KAAK06D,UAAU15D,EAAQsC,KAEzCtD,KAAKova,oBAAoBpva,KAAK06D,UAAU15D,EAAQsC,OAGxDynD,EAAQ1vD,UAAU02b,kBAAoB,SAAU/jW,EAASthC,GACrD,QAA4BvxD,IAAxB6yF,EAAQ59B,YACR,IAAK,IAAIhyD,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,EAAQ59B,aAAchyD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC1E,IAAIf,EAAMwF,EAAGzE,GACT6T,EAAQ2kB,OAAOv5B,GACfmuD,EAAgBwiC,EAAQ59B,YAAY/yD,GACpCivD,EAAmBI,EAAa0D,YAAYn+C,GAChDjS,KAAKqqZ,iBAAiB7+V,EAAec,EAAkBI,EAAa36C,QAAS26C,KAKzF3B,EAAQ1vD,UAAUgvZ,iBAAmB,SAAU7+V,EAAec,EAAkB5B,EAAOgC,EAAcwlY,GACjG,IAAIJ,EACAK,GAAY,EAEhB,QAA0Bh3b,KAD1B22b,EAAoB9xb,KAAK6gH,WAAWn2D,EAAO4B,EAAiBhpD,KACvB,CASjC,QAR4BnI,IAAxBqwD,EAAcx1C,YAAgD7a,IAAzBqwD,EAAcz1C,SACnD+7a,EAAkB97a,MAAQw1C,EAAcx1C,MACxC87a,EAAkB/7a,OAASy1C,EAAcz1C,OACzCo8a,GAAY,GAEZD,GACAJ,EAAkB1lY,qBAElBE,aAA4By5V,SACH5qZ,IAAzBqwD,EAAc7/C,OAAsB,CACpC,IAAIA,EAAS6/C,EAAc7/C,OAC3Bwmb,GAAY,EACZ,IAAItmb,OAAuB1Q,IAAbwQ,EAAOoB,EAAkBpB,EAAOoB,EAC1Cu/C,EAAiB3gD,OAAOoB,EACxBd,OAAuB9Q,IAAbwQ,EAAOqB,EAAkBrB,EAAOqB,EAC1Cs/C,EAAiB3gD,OAAOqB,EAC5B8kb,EAAkB9vC,6BAA6Bn2Y,EAASI,EAAS,YACjE6lb,EAAkB9qY,aAAe,aAE5BsF,aAA4B05V,SACR7qZ,IAAzBqwD,EAAc7/C,QACd+gD,EAAa29V,iBAAiB/9V,EAAkBI,EAAaxH,mBAAoBwH,EAAa36C,QAAQgkB,OAAQ+7Z,GAE7GxlY,aAA4B05V,IAAmBx6V,EAAci/V,oBACzBtvZ,IAAjCqwD,EAAci/V,aAAa19Y,QACM5R,IAAjCqwD,EAAci/V,aAAaz9Y,IAC3Bmlb,GAAY,SAGSh3b,IAAzBqwD,EAAcvuB,SACdk1Z,GAAY,OACwBh3b,IAAhCqwD,EAAcvuB,OAAOtwB,SACrBmlb,EAAkB70Z,OAAOtwB,OAAS6+C,EAAcvuB,OAAOtwB,aAE1BxR,IAA7BqwD,EAAcvuB,OAAOvwB,MACrBolb,EAAkB70Z,OAAOvwB,IAAM8+C,EAAcvuB,OAAOvwB,UAEtBvR,IAA9BqwD,EAAcvuB,OAAOzwB,OACrBslb,EAAkB70Z,OAAOzwB,KAAOg/C,EAAcvuB,OAAOzwB,WAEtBrR,IAA/BqwD,EAAcvuB,OAAOxwB,QACrBqlb,EAAkB70Z,OAAOxwB,MAAQ++C,EAAcvuB,OAAOxwB,SAG1D0lb,GAAaD,KACbJ,EAAkB97a,OAASs2C,EAAiBt2C,OAAS02C,EAAa12C,OAC5D87a,EAAkB70Z,OAAOzwB,KAAOslb,EAAkB70Z,OAAOxwB,YAEzBtR,IAAtCqwD,EAAcsB,sBACdglY,EAAkBhlY,oBAAsBtB,EAAcsB,oBACtDqlY,GAAY,QAEwBh3b,IAApCqwD,EAAcuB,oBACd+kY,EAAkB/kY,kBAAoBvB,EAAcuB,kBACpDolY,GAAY,QAEiBh3b,IAA7BqwD,EAAc7mD,aACdmtb,EAAkBh7Z,WAAW4zB,EAAM5zB,UAAW00B,EAAc7mD,kBAE9BxJ,IAA9BqwD,EAAcrN,cACd2zY,EAAkB3zY,YAAcqN,EAAcrN,kBAEtBhjD,IAAxBqwD,EAAc9mD,OACd6mD,GAAYC,EAAc9mD,MAAOotb,QAEL32b,IAA5BqwD,EAAce,WACdF,GAAgBb,EAAce,UAAWulY,EAAmBxlY,QAElCnxD,IAA1BqwD,EAAc5wB,SACVk3Z,IACAK,GAAY,EACZL,EAAkBl3Z,QAAU4wB,EAAc5wB,UAGhC,IAAdu3Z,IACAL,EAAkBryN,QAAQ,IAAIhwM,GAAKqia,EAAkB97a,MAAO87a,EAAkB/7a,SAC9E+7a,EAAkB3vC,QAAQ2vC,EAAkBn5X,cAEhDm5X,EAAkB1lY,uBAK1BrB,EAAQ1vD,UAAUg2b,WAAa,SAAU7lY,EAAe4lY,EAAY1mY,GAChE,IAAI0nY,EACAD,GAAY,EAEhB,QAAoBh3b,KADpBi3b,EAAcpyb,KAAK6gH,WAAWn2D,EAAO0mY,EAAW9tb,KACjB,CAC3B,QAA6BnI,IAAzBqwD,EAAc7/C,OAAsB,CACpCwmb,GAAY,EACZ,IAAItmb,OAAqC1Q,IAA3BqwD,EAAc7/C,OAAOoB,EAAkBy+C,EAAc7/C,OAAOoB,EACtEqkb,EAAWzlb,OAAOoB,EAClBd,OAAqC9Q,IAA3BqwD,EAAc7/C,OAAOqB,EAAkBw+C,EAAc7/C,OAAOqB,EACtEokb,EAAWzlb,OAAOqB,EACtBolb,EAAYpwC,6BAA6Bn2Y,EAASI,EAAS,YAC3Dmmb,EAAYprY,aAAe,QAqD/B,QAnD4B7rD,IAAxBqwD,EAAcx1C,QACdm8a,GAAY,EACZC,EAAYp8a,MAAQw1C,EAAcx1C,YAET7a,IAAzBqwD,EAAcz1C,SACdo8a,GAAY,EACZC,EAAYr8a,OAASy1C,EAAcz1C,aAEN5a,IAA7BqwD,EAAc7mD,aACdytb,EAAYt7Z,WAAW4zB,EAAM5zB,UAAWk5B,GAAqBohY,EAAYj3X,GAAeE,gBAE/Dl/D,IAAzBqwD,EAAcvuB,SACdk1Z,GAAY,OACwBh3b,IAAhCqwD,EAAcvuB,OAAOtwB,SACrBylb,EAAYn1Z,OAAOtwB,OAAS6+C,EAAcvuB,OAAOtwB,aAEpBxR,IAA7BqwD,EAAcvuB,OAAOvwB,MACrB0lb,EAAYn1Z,OAAOvwB,IAAM8+C,EAAcvuB,OAAOvwB,UAEfvR,IAA/BqwD,EAAcvuB,OAAOxwB,QACrB2lb,EAAYn1Z,OAAOxwB,MAAQ++C,EAAcvuB,OAAOxwB,YAEjBtR,IAA/BqwD,EAAcvuB,OAAOxwB,QACrB2lb,EAAYn1Z,OAAOzwB,KAAOg/C,EAAcvuB,OAAOzwB,YAGbrR,IAAtCqwD,EAAcsB,sBACdqlY,GAAY,EACZC,EAAYtlY,oBAAsBtB,EAAcsB,0BAEZ3xD,IAApCqwD,EAAcuB,oBACdolY,GAAY,EACZC,EAAYrlY,kBAAoBvB,EAAcuB,wBAEtB5xD,IAAxBqwD,EAAc9mD,aACmBvJ,IAA7BqwD,EAAc9mD,MAAM05B,OACpBg0Z,EAAY1tb,MAAM05B,KAAOotB,EAAc9mD,MAAM05B,WAEbjjC,IAAhCqwD,EAAc9mD,MAAM+I,UACpB2kb,EAAY1tb,MAAM+I,QAAU+9C,EAAc9mD,MAAM+I,cAEZtS,IAApCqwD,EAAc9mD,MAAMgnD,cACpB0mY,EAAY1tb,MAAMgnD,YAAcF,EAAc9mD,MAAMgnD,kBAEhBvwD,IAApCqwD,EAAc9mD,MAAMknD,cACpBwmY,EAAY1tb,MAAMknD,YAAcJ,EAAc9mD,MAAMknD,kBAEZzwD,IAAxCqwD,EAAc9mD,MAAMinD,kBACpBymY,EAAY1tb,MAAMinD,gBAAkBH,EAAc9mD,MAAMinD,uBAGpCxwD,IAAxBqwD,EAAcryB,OACVi5Z,EACA,GAA4B,WAAxB5mY,EAAcryB,OAAsBqyB,EAAche,SAClD4kZ,EAAY51b,KAAOgtB,OAAOgiC,EAAche,UACxC2kZ,GAAY,MAEX,CACD,IAAIrjC,EAAW1hX,GAAaoe,EAAcryB,OAC1Ci5Z,EAAY51b,KAAOsyZ,GAIb,IAAdqjC,IACAC,EAAY3yN,QAAQ,IAAIhwM,GAAK2ia,EAAYp8a,MAAOo8a,EAAYr8a,SAC5Dq8a,EAAYjwC,QAAQiwC,EAAYz5X,gBAM5C5N,EAAQ1vD,UAAU69a,WAAa,SAAUxsX,GACrC,IAAI04D,EAAgBplH,KAAK6gH,WAAWn0D,EAAa36C,QAAS,gBAC1D,GAAIqzG,EAAe,CACf,GAAkB,QAAdplH,KAAKu+B,KAAgB,CACrB,IAAIoP,EAAO6mB,GAAkB9H,EAAa36C,QAAQzO,GAAK,iBACvD,GAAIqqC,EAAM,CACN,IAAI0kZ,EAAW79X,GAAkB7mB,EAAKrqC,GAAK,SACvCgvb,EAAY99X,GAAkB7mB,EAAKrqC,GAAK,UACxCsqD,EAAgB4G,GAAkB89X,EAAUhvb,GAAK,mBACjDsqD,GACAA,EAAcntD,WAAW6E,YAAYsoD,GAEzC0kY,EAAU7xb,WAAW6E,YAAYgtb,GACjCD,EAAS5xb,WAAW6E,YAAY+sb,GAChC1kZ,EAAKltC,WAAW6E,YAAYqoC,IAGpC,IAAI17B,EAAQy6C,EAAa36C,QAAQqI,SAAS7b,QAAQ6mH,GAClD14D,EAAa36C,QAAQqI,SAASqO,OAAOxW,EAAO,GAEhD,IAAI86a,EAAgB/sb,KAAK+vb,iBAAiBrjY,GAC1CA,EAAa6hW,UAAUvuZ,KAAKkpD,eAAgBlpD,KAAKypD,OAAQsjY,EAAe/sb,KAAKgB,QAAQsC,KAEzFynD,EAAQ1vD,UAAU00b,iBAAmB,SAAUrjY,GAC3C,GAAIA,EAAatyC,SACb,IAAK,IAAIje,EAAI,EAAGA,EAAIuwD,EAAa36C,QAAQqI,SAAS3d,OAAQN,IACtD,GAA4C,oBAAxCuwD,EAAa36C,QAAQqI,SAASje,GAAGmH,GACjC,OAAOopD,EAAa36C,QAAQqI,SAASje,GAIjD,OAAOuwD,EAAa36C,SAExBg5C,EAAQ1vD,UAAUozC,cAAgB,SAAUie,EAAcnsD,QACzBpF,IAAzBoF,EAAK0wB,QAAQ2J,UACb8xB,EAAaz7B,QAAQ2J,QAAUr6B,EAAK0wB,QAAQ2J,cAElBz/B,IAA1BoF,EAAK0wB,QAAQ/c,WACbw4C,EAAaz7B,QAAQ/c,SAAW3T,EAAK0wB,QAAQ/c,eAErB/Y,IAAxBoF,EAAK0wB,QAAQlb,SACb22C,EAAaz7B,QAAQlb,OAASxV,EAAK0wB,QAAQlb,aAEpB5a,IAAvBoF,EAAK0wB,QAAQjb,QACb02C,EAAaz7B,QAAQjb,MAAQzV,EAAK0wB,QAAQjb,YAEV7a,IAAhCoF,EAAK0wB,QAAQ0d,iBACb+d,EAAaz7B,QAAQ0d,eAAiBpuC,EAAK0wB,QAAQ0d,iBAI3Doc,EAAQ1vD,UAAU4kb,WAAa,SAAUljb,GACtBiD,KAAK6ta,cAAcoS,WAAWljb,EAAIgV,WAChC/R,KAAKs0a,eAClBt0a,KAAKgib,cAIbj3X,EAAQ1vD,UAAUo4a,gBAAkB,SAAU12a,GAC1CiD,KAAK6ta,cAAc4F,gBAAgB12a,EAAIgV,SACxB/R,KAAK6ta,cAAczrB,aAAarlZ,EAAIgV,WAClC/R,KAAKs0a,eAClBt0a,KAAKgib,cAIbj3X,EAAQ1vD,UAAUo2b,gBAAkB,SAAUlxb,GAC1C,IAAI+wa,EACA/wa,EAAKo6D,YACL22W,EAAWtxa,KAAK06D,UAAUn6D,EAAKo6D,WAClBA,SACT36D,KAAKyxb,gBAAgBngB,IAGrBA,EAASv/Z,QAAQ0tN,QAAQ,IAAIhwM,IAC7B6hZ,EAASv/Z,QAAQowY,QAAQmvB,EAASv/Z,QAAQ4mD,aAC1C34D,KAAKw4a,kBAAkBlH,GACvBtxa,KAAKova,oBAAoBkC,MAIrCvmX,EAAQ1vD,UAAU2mb,WAAa,WAC3B,GAAIhib,KAAKyhD,eAAiBC,GAAcyiY,OAAQ,CAC5Cnkb,KAAKmjD,SAASgqJ,UACdntM,KAAKmjD,SAASs4X,sBAEd,IAAK,IAAIr9a,EAAK,EAAGyE,EAAK7C,KAAK6qD,MAAOzsD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpD,IAAIi7B,EAAOx2B,EAAGzE,GACVspH,EAAO1nH,KAAK6qD,MAAMxxB,GAChBquF,aAAgB38D,GAClB28D,EAAKi6T,WAAWj6T,MAMhC38D,EAAQ1vD,UAAUwtD,sBAAwB,SAAU5oB,GAChDjgC,KAAK+nF,oBAAsB9nD,GAG/B8qB,EAAQ1vD,UAAU61b,aAAe,SAAU3wb,EAAMs8L,QAClB1hM,IAAvB0hM,EAAQ5/J,OAAOvwB,MACfnM,EAAK08B,OAAOvwB,IAAMmwL,EAAQ5/J,OAAOvwB,UAEPvR,IAA1B0hM,EAAQ5/J,OAAOtwB,SACfpM,EAAK08B,OAAOtwB,OAASkwL,EAAQ5/J,OAAOtwB,aAEZxR,IAAxB0hM,EAAQ5/J,OAAOzwB,OACfjM,EAAK08B,OAAOzwB,KAAOqwL,EAAQ5/J,OAAOzwB,WAETrR,IAAzB0hM,EAAQ5/J,OAAOxwB,QACflM,EAAK08B,OAAOxwB,MAAQowL,EAAQ5/J,OAAOxwB,QAK3Cs+C,EAAQ1vD,UAAUipb,eAAiB,WAC/B,IAAIvkb,EAAQC,KAEZA,KAAKokb,UAAY,IAAIpvU,GAAUh1G,KAAKgB,SACpChB,KAAKokb,UAAUjvU,OAAS,eAExBn1G,KAAKokb,UAAU9yD,KAAO,SAAUrxX,GAC5B,GAAKF,EAAMg5D,cAgEH94D,EAAK3D,MAAMw5D,SAAW71D,EAAK3D,MAAMw5D,QAAQr5D,QACzCsD,EAAM2hb,aAAa33H,UAAU9pT,EAAK3D,MAAO2D,EAAK3D,MAAMw5D,cAhExD,GAAI71D,EAAKwyG,SAAU,CACf,IAAIxD,OAAS,EACT/6F,EAAWnU,EAAM2hb,aAAa7/V,iBAAiB5hF,EAAK3D,OACpDgsD,OAAe,EACfiqY,EAAiBtyb,EAAKwyG,SAASvjG,OAC/Bsjb,EAAYD,EAAe1/a,aAAa,aAC5C,GAAI2/a,EAAW,CACX,IAAI/oB,EAAgBjpa,SAASyuB,eAAeuja,GAAWvpW,cAAc,GAErElpF,EAAMqkb,UAAgB,cAAI3a,EAC1B,IAAIgpB,EAAkB,kBACtB,GAAIhpB,EAAe,CACf,IAAI1sa,EAAM0sa,EAAcgpB,GACxBnqY,EAAeC,GAAYkhX,EAAcgpB,IACzC,IAAI1gb,EAAUhV,EAAIgV,QAAQqI,SAAS,GAAGA,SAAS,GAC/C,GAAIqvZ,EAAcgpB,aAA4BlzY,GAAM,CAChD+I,EAAaz8C,QAAUqI,EAASnH,EAAI,GAAKu7C,EAAatyC,OAASjE,EAAQ0nC,WAAWzjC,OAAS,EAC3FsyC,EAAar8C,QAAUiI,EAASlH,GAAKs7C,EAAavyC,QAAUhE,EAAQ0nC,WAAW1jC,QAAU,EACzF,IAAIy8Z,EAAU,IAAIjzX,GAAKx/C,EAAO,QAASuoD,GAAc,GAC1B,SAAvBkqX,EAAQr5Y,MAAMzyB,MAAmB8ra,EAAQr5Y,MAAMy0X,SAASD,WAAWE,WAChE2kB,EAAQr5Y,MAAMy0X,SAASD,WAAWE,UAAUpxZ,SAC/C+1a,EAAQr5Y,MAAMy0X,SAASD,WAAWE,cAEtC5+S,EAASujU,OAER,GAAI/I,EAAcgpB,aAA4Bv0Y,GAAW,CAC1D+wD,EAAS,IAAI/wD,GAAUn+C,EAAO,aAAcuoD,GAAc,GAC1D,IAAIvyB,EAASR,GAAK+vB,UAAU2pD,EAAOjgE,YAAaigE,EAAOh4D,cACnD66Q,EAAK59S,EAASnH,EAAIgpB,EAAOhD,OAAOhmB,EAChC8kT,EAAK39S,EAASlH,EAAI+oB,EAAOhD,OAAO/lB,EACpCiiG,EAAOjgE,YAAYjiC,GAAK+kT,EACxB7iN,EAAOjgE,YAAYhiC,GAAK6kT,EACxB5iN,EAAOh4D,YAAYlqC,GAAK+kT,EACxB7iN,EAAOh4D,YAAYjqC,GAAK6kT,EAE5B5iN,EAAO3rG,IAAMqzD,KACb,IAAI28B,GACA/2F,OAAQkta,EAAezoa,QAASiuG,EAAQ52E,QAAQ,EAChD0V,QAAShuC,GAEbA,EAAMi2J,aAAasrP,GAAaoxC,UAAWp/V,GACtCvzF,EAAMwwa,YAAY9D,MAASn5U,EAAIj7D,SAChCt4B,EAAmB,YAAIkvG,EACvBlvG,EAAMu0a,eAAgB,EACtBv0a,EAAMyza,WAAWvkU,GACjBlvG,EAAMg5D,cAAgBk2C,EACH,QAAflvG,EAAMw+B,MACNx+B,EAAMswa,6BAEHtwa,EAAmB,YAC1BA,EAAMs9Z,eAAe53Z,OAAOwpG,GAC5BlvG,EAAM2hb,aAAa5jB,UAAU79Z,EAAK3D,OAClCyD,EAAM2hb,aAAa33H,UAAU9pT,EAAK3D,MAAO2D,GACzCF,EAAMu0a,eAAgB,EACtBv0a,EAAMiib,aACNuQ,EAAe7tb,MAAM+I,QAAU,KAGvC1N,EAAMqkb,UAAUqO,GAAmBF,KAWnDvyb,KAAKokb,UAAUvvU,KAAO,SAAU50G,GAC5B,GAAIF,EAAMg5D,cAAe,CACjB94D,EAAK3D,MAAMw5D,SACX/1D,EAAM2hb,aAAazjB,QAAQh+Z,EAAK3D,OAEpC,IAAI2yG,OAAS,EAIT3b,GACA/2F,OAAQwD,EAAMqkb,UAAgB,cAC9Bpjb,QAASjB,EAAMg5D,cAAe5xD,OAAQpH,EAAOs4B,QAAQ,EACrDnkB,UAAYnH,EAAGhN,EAAMg5D,cAAchnD,QAAQlG,QAASmB,EAAGjN,EAAMg5D,cAAchnD,QAAQ9F,UAEvFlM,EAAMi2J,aAAasrP,GAAazsS,KAAMvhB,GACtC,IAAIhrC,OAAe,EAEnBA,EAAeC,GAAYxoD,EAAMg5D,eACjCh5D,EAAM0za,gBAAgB1za,EAAMg5D,eAC5Bh5D,EAAM2za,uBAAuB3za,EAAM26D,UAAU36D,EAAMg5D,cAAcz1D,KACjEvD,EAAM4mb,eAAe5mb,EAAMg5D,sBACpBh5D,EAAM26D,UAAU36D,EAAMg5D,cAAcz1D,IAC3CvD,EAAMg5D,cAAgB,KACtBh5D,EAAM8oD,uBAAsB,GACvByqC,EAAIj7D,SACLt4B,EAAM+ga,mBACN/ga,EAAMqE,IAAIkkD,GACN/H,GAAgBxgD,IAChBA,EAAM0F,QAAQ1F,EAAM26D,UAAUpS,EAAe,OAGrDvoD,EAAM8oD,uBAAsB,GAC5BomD,EAASlvG,EAAM26D,UAAUpS,EAAe,IACpCvoD,EAAM0tZ,YAAcx+S,aAAkB1vD,IAAQ+I,EAAa6kW,YAC3Dl+S,EAAOk+S,UAAY7kW,EAAa6kW,UAChCptZ,EAAM0tZ,WAAWwsB,cAAcl6a,EAAM26D,UAAUu0C,EAAOk+S,WAAYl+S,EAAQlvG,IAE9EA,EAAMoha,iBACa,QAAfpha,EAAMw+B,MACNx+B,EAAMswa,6BAEHtwa,EAAMqkb,UAAgB,cAGjC7/a,EAAOxE,EAAMqkb,UAAyB,kBAE1Cpkb,KAAKokb,UAAUtkb,IAAM,SAAUG,GAC3B,GAAIF,EAAMg5D,gBAAkBh5D,EAAM2hb,aAAax/a,MAAO,CAClDnC,EAAM0+Z,SAAS1+Z,EAAMg5D,eACrBh5D,EAAM0za,gBAAgB1za,EAAMg5D,eACT,QAAfh5D,EAAMw+B,MAAqD,WAAnCx+B,EAAMg5D,cAAc5/B,MAAMzyB,MAClD3G,EAAM4mb,eAAe5mb,EAAMg5D,eAE/Bh5D,EAAM2za,uBAAuB3za,EAAM26D,UAAU36D,EAAMg5D,cAAcz1D,YAC1DvD,EAAM26D,UAAU36D,EAAMg5D,cAAcz1D,IAC3CvD,EAAMi2J,aAAasrP,GAAaqxC,WAAa3xb,QAASjB,EAAMg5D,cAAehrB,QAAShuC,IACjE,QAAfA,EAAMw+B,KACNx+B,EAAMswa,sBAGNtwa,EAAM4mb,eAAe5mb,EAAMg5D,eAE/Bh5D,EAAMg5D,cAAgB,KAEtBh5D,EAAMqkb,UAAyB,gBAAE1/a,MAAM+I,QAAU,WAE1C1N,EAAMqkb,UAAgB,iBAIzCh4V,IACIllF,EAAS,SACV6jD,EAAQ1vD,UAAW,aAAS,GAC/B+wF,IACIllF,EAAS,QACV6jD,EAAQ1vD,UAAW,YAAQ,GAC9B+wF,IACIllF,EAAS,SACV6jD,EAAQ1vD,UAAW,cAAU,GAChC+wF,IACIrkF,KAAYi5a,KACbj2X,EAAQ1vD,UAAW,2BAAuB,GAC7C+wF,IACIllF,EAASk6C,GAAmB2qW,UAC7BhhW,EAAQ1vD,UAAW,mBAAe,GACrC+wF,IACIllF,EAASu5C,GAAasrW,UACvBhhW,EAAQ1vD,UAAW,YAAQ,GAC9B+wF,IACIllF,EAAS,QACV6jD,EAAQ1vD,UAAW,uBAAmB,GACzC+wF,IACIllF,EAAS,gBACV6jD,EAAQ1vD,UAAW,uBAAmB,GACzC+wF,IACIrkF,KAAYu0Z,KACbvxW,EAAQ1vD,UAAW,oBAAgB,GACtC+wF,IACIrkF,KAAYy0Z,KACbzxW,EAAQ1vD,UAAW,qBAAiB,GACvC+wF,IACIrkF,KAAYi0Z,KACbjxW,EAAQ1vD,UAAW,oBAAgB,GACtC+wF,IACI/jF,KAAek3C,KAChBwL,EAAQ1vD,UAAW,aAAS,GAC/B+wF,IACIllF,KACD6jD,EAAQ1vD,UAAW,qBAAiB,GACvC+wF,IACI/jF,KAAe61C,KAChB6M,EAAQ1vD,UAAW,kBAAc,GACpC+wF,IACIllF,OACD6jD,EAAQ1vD,UAAW,qBAAiB,GACvC+wF,IACIrkF,KAAYsgZ,KACbt9V,EAAQ1vD,UAAW,eAAW,GACjC+wF,IACIrkF,KAAY00Z,KACb1xW,EAAQ1vD,UAAW,0BAAsB,GAC5C+wF,IACIllF,KACD6jD,EAAQ1vD,UAAW,eAAW,GACjC+wF,IACIllF,KACD6jD,EAAQ1vD,UAAW,uBAAmB,GACzC+wF,IACIllF,KACD6jD,EAAQ1vD,UAAW,4BAAwB,GAC9C+wF,IACIllF,KACD6jD,EAAQ1vD,UAAW,uBAAmB,GACzC+wF,IACIllF,KACD6jD,EAAQ1vD,UAAW,sBAAkB,GACxC+wF,IACIllF,KACD6jD,EAAQ1vD,UAAW,yBAAqB,GAC3C+wF,IACIllF,KACD6jD,EAAQ1vD,UAAW,qBAAiB,GACvC+wF,IACIllF,KACD6jD,EAAQ1vD,UAAW,uBAAmB,GACzC+wF,IACIrkF,KAAY02C,KACbsM,EAAQ1vD,UAAW,qBAAiB,GACvC+wF,IACIrkF,KAAYk0Z,KACblxW,EAAQ1vD,UAAW,sBAAkB,GACxC+wF,IACIrkF,KAAY20Z,KACb3xW,EAAQ1vD,UAAW,cAAU,GAChC+wF,IACIrkF,KAAYg5a,KACbh2X,EAAQ1vD,UAAW,sBAAkB,GACxC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,kBAAc,GACpC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,iBAAa,GACnC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,iBAAa,GACnC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,gBAAY,GAClC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,aAAS,GAC/B+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,qBAAiB,GACvC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,mBAAe,GACrC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,gBAAY,GAClC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,oBAAgB,GACtC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,uBAAmB,GACzC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,kBAAc,GACpC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,wBAAoB,GAC1C+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,yBAAqB,GAC3C+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,yBAAqB,GAC3C+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,sBAAkB,GACxC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,sBAAkB,GACxC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,yBAAqB,GAC3C+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,oBAAgB,GACtC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,wBAAoB,GAC1C+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,eAAW,GACjC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,kBAAc,GACpC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,kBAAc,GACpC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,iBAAa,GACnC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,uBAAmB,GACzC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,wBAAoB,GAC1C+wF,IACI/jF,KAAe8la,KAChBpjX,EAAQ1vD,UAAW,cAAU,GAChC+wF,IACItjF,KACDiiD,EAAQ1vD,UAAW,YAAQ,GACvB0vD,GACToiD,IC78IEylV,GAAgC,WAChC,SAASA,EAAe7kZ,GACpB/tC,KAAK+tC,QAAUA,EAslBnB,OAhlBA6kZ,EAAev3b,UAAUstb,cAAgB,SAAU31a,GAC/C,IAAI6/a,EACAzV,EACAxiZ,EAGA2D,EADA/hC,EAAO,OAEPs2b,KACA71Z,EAASjqB,EAAQiqB,WACjBunB,EAASxxC,GAAWA,EAAQwxC,OAASxxC,EAAQwxC,OAAS,UAC1DjmB,EAAOvrB,GAAWA,EAAQurB,KAAOvrB,EAAQurB,KAAO,WAChD,IAAIxI,EAAS/1B,KAAK+yb,iBAAiBvuY,EAAQxxC,GACvCA,EAAQ+iB,SACRqnZ,GAAe,EACfrnZ,EAAOhpB,EAAIiG,EAAQ+iB,OAAOhpB,EAAIiG,EAAQ+iB,OAAOhpB,EAAIgpB,EAAOhpB,EACxDgpB,EAAO/oB,EAAIgG,EAAQ+iB,OAAO/oB,EAAIgG,EAAQ+iB,OAAO/oB,EAAI+oB,EAAO/oB,EACxD+oB,EAAO/f,MAAQhD,EAAQ+iB,OAAO/f,OAAS+f,EAAO/f,MAC9C+f,EAAOhgB,OAAS/C,EAAQ+iB,OAAOhgB,QAAUggB,EAAOhgB,QAEpDknB,GACIvwB,SAAoBvR,IAAf8hC,EAAOvwB,IAAoBuwB,EAAOvwB,IAAM,GAC7CC,YAA0BxR,IAAlB8hC,EAAOtwB,OAAuBswB,EAAOtwB,OAAS,GACtDF,WAAwBtR,IAAjB8hC,EAAOxwB,MAAsBwwB,EAAOxwB,MAAQ,GACnDD,UAAsBrR,IAAhB8hC,EAAOzwB,KAAqBywB,EAAOzwB,KAAO,IAExCxM,KAAK+tC,QAAQ2c,MACV,iBAAXlG,IACAzuB,EAAOhpB,GAAKkwB,EAAOzwB,KACnBupB,EAAO/oB,GAAKiwB,EAAOvwB,IACnBqpB,EAAO/f,OAASinB,EAAOzwB,KAAOywB,EAAOxwB,MACrCspB,EAAOhgB,QAAUknB,EAAOvwB,IAAMuwB,EAAOtwB,QAEzC,IAAI00O,EAAWruO,EAAQquO,UAAY,UACnC,GAAuB,QAAnBruO,EAAQwpB,QAER,GAAa,QADbhgC,EAAOwD,KAAKgzb,UAAUhgb,EAAS+iB,EAAQkH,EAAQsB,EAAM6+Y,EAAc54X,EAAQ68L,IAEvE,OAAO7kP,MAGV,CACDq2b,EAAW7/a,EAAQwpB,OACnBxpB,EAAQ+iB,OAASA,EACjB/iB,EAAQiqB,OAASA,EACjB,IAAIhgB,EAAM2d,EAAU56B,KAAKizb,aAAajgb,EAASiqB,GAC/C,GAAa,SAATsB,EACA,OAAO3D,EAEX,IAAI0mN,GAAS,IAAImjE,eAAgBC,kBAAkBznS,GACnD61a,EAAQtub,KAAK88O,GAEjB,GAAa,aAAT/iN,GAAgC,OAAT/hC,EACvB,IAOK,IAAI8gC,EAAI,EAAGA,EAAIw1Z,EAAQr2b,OAAQ6gC,IAAK,CACrC,IAAI+sH,EAAO,IAAIo3F,MAAMqxM,EAAQx1Z,KAAO52B,KAAM,6BAC1C,GAA0B,SAAtB8E,GAAQqb,KAAKkQ,KACbl7B,OAAO6uF,UAAUq6N,iBAAiB16J,EAAMg3F,EAAW,IAAMwxM,OAExD,CACD,IAAIK,EAAM1yb,SAASW,cAAc,KAC7Bi4B,EAAM6oN,IAAIC,gBAAgB73F,GAC9B6oS,EAAIl5Z,KAAOZ,EACX85Z,EAAI1vb,aAAa,WAAY69O,EAAW,IAAMwxM,GAC9C,IAAIhyb,EAAIL,SAASiT,YAAY,eAC7B5S,EAAEsyb,eAAe,SAAS,GAAM,EAAMt3b,OAAQ,EAAG,EAAG,EAAG,EAAG,GAAG,GAAO,GAAO,GAAO,EAAO,EAAG,MAC5Fq3b,EAAIv/a,cAAc9S,IAI9B,OAAO,MAEX+xb,EAAev3b,UAAU23b,UAAY,SAAUhgb,EAAS+iB,EAAQkH,EAAQsB,EAAM6+Y,EAAc54X,EAAQ68L,GAChG,IACIwxM,EACAj4Z,EAFA76B,EAAQC,KAGZgT,EAAQ+iB,OAASA,EACjB/iB,EAAQwxC,OAASA,EACjB,IAEI4uY,KACJpzb,KAAKqzb,uBAAuBrgb,EAAS+iB,GACrC,IAAIizW,EAAShpY,KAAKszb,iBACdv9Z,OAAQA,EAAQkH,OAAQA,EAAQunB,OAAQA,EAAQ/X,OAAQz5B,EAAc,OACtE05B,OAAQ15B,EAAc,QACvBoqa,GACHyV,EAAW7/a,EAAQwpB,QAAU,MAC7B,IAAI6pK,EAAQzrK,EAAUouW,EAAO15S,YAC7B,GAAa,SAAT/wD,EACA,OAAO3D,EAEX,GAAI5nB,EAAQspa,aAAc,CAMtB,GALAtpa,EAAQkvP,WAAalvP,EAAQkvP,WAAalvP,EAAQkvP,WAAaliQ,KAAK+tC,QAAQoc,aAAap0C,OACzF/C,EAAQgrS,UAAYhrS,EAAQgrS,UAAYhrS,EAAQgrS,UAAYh+S,KAAK+tC,QAAQoc,aAAan0C,MACtFhD,EAAQkvP,WAAalvP,EAAQkvP,WAAalvP,EAAQkvP,WAAa8mI,EAAOhzX,MACtEhD,EAAQgrS,UAAYhrS,EAAQgrS,UAAYhrS,EAAQgrS,UAAYgrF,EAAOjzX,OACnEknB,EAASjqB,EAAQiqB,WACbjqB,EAAQ07P,kBACyB,cAA5B17P,EAAQ07P,iBAAmC17P,EAAQkvP,WAAalvP,EAAQgrS,WAC7C,aAA5BhrS,EAAQ07P,iBAAkC17P,EAAQgrS,UAAYhrS,EAAQkvP,YAAY,CAClF,IAAI7oO,EAAOrmB,EAAQgrS,UACnBhrS,EAAQgrS,UAAYhrS,EAAQkvP,WAC5BlvP,EAAQkvP,WAAa7oO,EAG7BrmB,EAAQiqB,QACJvwB,IAAMytC,MAAMld,EAAOvwB,KAAoB,EAAbuwB,EAAOvwB,IACjCC,OAASwtC,MAAMld,EAAOtwB,QAA0B,EAAhBswB,EAAOtwB,OACvCH,KAAO2tC,MAAMld,EAAOzwB,MAAsB,EAAdywB,EAAOzwB,KACnCC,MAAQ0tC,MAAMld,EAAOxwB,OAAwB,EAAfwwB,EAAOxwB,OAEzC,IAAIulF,EAAQxxF,SAASW,cAAc,OAC/BmzJ,GACAhxJ,GAAMtD,KAAK+tC,QAAQ/sC,QAAQsC,GAAK,cAChChE,IAAO+mM,GAEXr0G,EAAMxuF,aAAa,KAAMxD,KAAK+tC,QAAQ/sC,QAAQsC,GAAK,eACnD+xD,GAAiB28B,EAAOsiE,GACxBtiE,EAAMrN,OAAS,WACXyuW,EAASrzb,EAAMwzb,iBAAiBvhW,EAAOh/E,GAAS,GAChDjT,EAAMyzb,YAAYJ,EAAQ/xM,EAAUwxM,EAAUxsP,SAIlD+sP,GAAU/sP,GACVrmM,KAAKwzb,YAAYJ,EAAQ/xM,EAAUwxM,EAAUxsP,GAEjD,OAAO,MAEXusP,EAAev3b,UAAUm4b,YAAc,SAAUJ,EAAQ/xM,EAAUwxM,EAAUxsP,GAGzE,IAAK,IAFDysP,KACAr2b,EAAY22b,aAAkB77X,YAAgC,EAAhB67X,EAAO32b,OAChD4gC,EAAI,EAAGA,EAAI5gC,EAAQ4gC,IAAK,CAO7B,IAAK,IAJDo2Z,EAFIL,EAAO/1Z,GACD9tB,QAAQ,iBAAkB,IACrBrS,MAAM,KACrBw2b,EAAaC,KAAKF,EAAO,IACzBnyM,EAAS,IAAI+F,YAAYqsM,EAAWj3b,QACpCm3b,EAAW,IAAI5vR,WAAWs9E,GACrBnlP,EAAI,EAAGA,EAAIu3b,EAAWj3b,OAAQN,IACnCy3b,EAASz3b,GAAKu3b,EAAW/kV,WAAWxyG,GAExC22b,EAAQtub,KAAK88O,GAyBjB,IAAK,IAvBDriP,EAAU,SAAUwkB,GACpB,IAAI6Z,EAAI,IAAImkN,MAAMqxM,EAAQrva,KAAO/c,KAAM,6BACvC,GAA0B,SAAtB8E,GAAQqb,KAAKkQ,KACbl7B,OAAO6uF,UAAUq6N,iBAAiBznR,EAAG+jN,EAAW,IAAMwxM,OAErD,CACD,IAAIgB,EAAgBrzb,SAASW,cAAc,KACvC2yb,EAAU7xM,IAAIC,gBAAgB5kN,GAClCu2Z,EAAc75Z,KAAO85Z,EACrBD,EAAcrwb,aAAa,WAAY69O,EAAW,IAAMwxM,GACxD,IAAIkB,EAAevzb,SAASiT,YAAY,eACxCsgb,EAAaZ,eAAe,SAAS,GAAM,EAAMt3b,OAAQ,EAAG,EAAG,EAAG,EAAG,GAAG,GAAO,GAAO,GAAO,EAAO,EAAG,MACvGsE,WAAW,WACP0zb,EAAclgb,cAAcogb,IAClB,GAATtwa,EAAI,MASRA,EAAI,EAAGA,EAAIqva,EAAQr2b,OAAQgnB,IAChCxkB,EAAQwkB,IAGhBmva,EAAev3b,UAAU24b,gBAAkB,SAAUhhb,GAGjD,IAAK,IADDihb,EACK71b,EAAK,EAAG+pX,EAFLnoX,KAAK+tC,QAAQ2c,MAEStsD,EAAK+pX,EAAQ1rX,OAAQ2B,IAAM,CACzD,IAAImC,EAAO4nX,EAAQ/pX,GACfmC,EAAKu2B,WACoB,QAAnB9jB,EAAQwpB,QAAsBj8B,aAAgBstD,IAA2BttD,aAAgBwtD,MACpE,QAAnB/6C,EAAQwpB,QAAsBj8B,aAAgBwtD,MAK9CkmY,EAJCA,EAIYA,EAAWh3Y,UAAU18C,EAAKwR,QAAQgrC,aAHlCx8C,EAAKwR,QAAQgrC,cAS1C,IAAK,IAAIl6C,EAAK,EAAGgpb,EADA7rb,KAAK+tC,QAAQ0c,WACc5nD,EAAKgpb,EAAapvb,OAAQoG,IAAM,CACxE,IAAIk1C,EAAY8zY,EAAahpb,GACzBk1C,EAAUjhB,UAKNm9Z,EAJCA,EAIYA,EAAWh3Y,UAAUlF,EAAUhmC,QAAQgrC,aAHvChF,EAAUhmC,QAAQgrC,aAO3C,OAAOk3Y,GAAc,IAAI1+Z,GAAK,EAAG,EAAG,EAAG,IAE3Cq9Z,EAAev3b,UAAU03b,iBAAmB,SAAUx0Z,EAAMvrB,GACxD,IAAI0f,EAAO1yB,KAAKg0b,gBAAgBhhb,GAC5BxG,EAAOkmB,EAAKlmB,KACZE,EAAMgmB,EAAKhmB,IACXD,EAAQimB,EAAKjmB,MAAQimB,EAAKlmB,KAC1BG,EAAS+lB,EAAK/lB,OAAS+lB,EAAKhmB,IACnB,YAAT6xB,IACIv+B,KAAK+tC,QAAQoc,cAAgBnqD,KAAK+tC,QAAQoc,aAAamyX,cACvD9va,EAAOkmB,EAAKlmB,KACZE,EAAMgmB,EAAKhmB,IACP1M,KAAK+tC,QAAQoc,aAAan0C,QAC1BxJ,EAAOH,KAAKkT,MAAM/S,EAAOxM,KAAK+tC,QAAQoc,aAAan0C,OAAShW,KAAK+tC,QAAQoc,aAAan0C,MACtFvJ,EAAQJ,KAAK6lB,KAAKQ,EAAKjmB,MAAQzM,KAAK+tC,QAAQoc,aAAan0C,OAAShW,KAAK+tC,QAAQoc,aAAan0C,MAAQxJ,GAEpGxM,KAAK+tC,QAAQoc,aAAap0C,SAC1BrJ,EAAML,KAAKkT,MAAM7S,EAAM1M,KAAK+tC,QAAQoc,aAAap0C,QAAU/V,KAAK+tC,QAAQoc,aAAap0C,OACrFpJ,EAASN,KAAK6lB,KAAKQ,EAAK/lB,OAAS3M,KAAK+tC,QAAQoc,aAAap0C,QAAU/V,KAAK+tC,QAAQoc,aAAap0C,OAASrJ,GAExF,IAAfgmB,EAAK1c,OAAoD,OAApChW,KAAK+tC,QAAQoc,aAAan0C,QAChDvJ,EAAQzM,KAAK+tC,QAAQoc,aAAan0C,OAEjB,IAAhB0c,EAAK3c,QAAsD,OAArC/V,KAAK+tC,QAAQoc,aAAap0C,SACjDpJ,EAAS3M,KAAK+tC,QAAQoc,aAAap0C,UAInC/V,KAAK+tC,QAAQoc,aAAan0C,QAC1BxJ,EAAO,EACPC,EAAQzM,KAAK+tC,QAAQoc,aAAan0C,OAElChW,KAAK+tC,QAAQoc,aAAap0C,SAC1BrJ,EAAM,EACNC,EAAS3M,KAAK+tC,QAAQoc,aAAap0C,UAI/C,IAAIy8C,EAAY,IAAIj9B,GAKpB,OAJAi9B,EAAUzlD,EAAIP,EACdgmD,EAAUxlD,EAAIN,EACd8lD,EAAUx8C,MAAQvJ,EAClB+lD,EAAUz8C,OAASpJ,EACZ6lD,GAEXogY,EAAev3b,UAAUg4b,uBAAyB,SAAUrgb,EAAS+iB,GAGjE/iB,EAAc,OAAI,EAClBA,EAAc,OAAI,EAClBA,EAAQkvP,WAAalvP,EAAQkvP,YAAcliQ,KAAK+tC,QAAQoc,aAAap0C,OACrE/C,EAAQgrS,UAAYhrS,EAAQgrS,WAAah+S,KAAK+tC,QAAQoc,aAAan0C,MACnE,IAAID,EAAS/C,EAAQkvP,YAAcnsO,EAAOhgB,OACtCC,EAAQhD,EAAQgrS,WAAajoR,EAAO/f,MAChB,YAApBhD,EAAQqxY,SAA6C,SAApBrxY,EAAQqxY,SAA0C,UAApBrxY,EAAQqxY,UACvErxY,EAAc,OAAIgD,EAAQ+f,EAAO/f,MACjChD,EAAc,OAAI+C,EAASggB,EAAOhgB,OACV,SAApB/C,EAAQqxY,QACRrxY,EAAc,OAAIA,EAAc,OAAI3G,KAAK8T,IAAInN,EAAc,OAAGA,EAAc,QAEnD,UAApBA,EAAQqxY,UACbrxY,EAAc,OAAIA,EAAc,OAAI3G,KAAKC,IAAI0G,EAAc,OAAGA,EAAc,SAEhF+iB,EAAO/f,MAAQA,EACf+f,EAAOhgB,OAASA,GAEpBggB,EAAOhpB,GAAKiG,EAAc,OAC1B+iB,EAAO/oB,GAAKgG,EAAc,QAE9B4/a,EAAev3b,UAAU43b,aAAe,SAAUjgb,EAASiqB,GACvD,IAAIhgB,EAAMjd,KAAK+tC,QAAQvN,UAAUxgC,KAAK+tC,QAAQ/sC,QAAQsC,GAAK,eAAgB0P,EAAQ+iB,OAAO/f,MAAOhD,EAAQ+iB,OAAOhgB,QAChHvV,SAASuL,KAAKpK,YAAYsb,GAC1B,IAAIogB,EAAIi4B,GAAiB,KAAOhyD,GAAMtD,KAAK+tC,QAAQ/sC,QAAQsC,GAAK,oBAC5DkhD,EAASxxC,GAAWA,EAAQwxC,OAASxxC,EAAQwxC,OAAS,UACtDzuB,EAAS/1B,KAAK+yb,iBAAiBvuY,EAAQxxC,GACvCxG,EAAOupB,EAAOhpB,EACdL,EAAMqpB,EAAO/oB,EACbgJ,EAAQ+f,EAAO/f,MACfD,EAASggB,EAAOhgB,OACpBkH,EAAItb,YAAY07B,GAChB,IAAIi3H,GACAjnJ,UAAa,eAAiB2F,EAAQ+iB,OAAOhpB,EAAIkwB,EAAOzwB,MAAQ,OAASwG,EAAQ+iB,OAAO/oB,EAAIiwB,EAAOvwB,KAAO,IAC1GK,EAAKyc,OAAOhd,GACZQ,EAAKwc,OAAO9c,GAAMsJ,MAASwT,OAAOxT,GAAQD,OAAUyT,OAAOzT,IAE/Dw/C,GAAgBl4B,EAAGi3H,GACnB,IAAIhmI,EAAW9tB,SAASyuB,eAAejvB,KAAK+tC,QAAQ/sC,QAAQsC,GAAK,wBAAwB1B,WAAU,GAOnG,GANA0yJ,GACIvnJ,EAAK,EACLC,EAAK,EAAGgJ,MAASwT,OAAOxT,EAAQinB,EAAOzwB,KAAOywB,EAAOxwB,OAAQsJ,OAAUyT,OAAOzT,EAASknB,EAAOvwB,IAAMuwB,EAAOtwB,SAE/G4oD,GAAgBjnC,EAAUgmI,GAC1Br3I,EAAItb,YAAY2sB,GACU,QAAtBtuB,KAAK+tC,QAAQxP,KAAgB,CAC7B,IAAI21Z,EAAkB5/X,GAAmBt0D,KAAK+tC,QAAQ/sC,QAAQsC,IAC9D2Z,EAAItb,YAAYuyb,EAAgBjla,eAAejvB,KAAK+tC,QAAQ4nY,aAAarya,IAAI1B,WAAU,IACvF,IAAK,IAAIzF,EAAI,EAAGA,EAAI8gB,EAAI1L,WAAW9U,OAAQN,IAAK,CAC5C,IAAI6E,EAAUic,EAAI1L,WAAWpV,GACV,yBAAf6E,EAAQsC,IACRtC,EAAQwC,aAAa,YAAa,eAAiBuyB,EAAOhpB,EAAIkwB,EAAOzwB,MAAQ,OACvEupB,EAAO/oB,EAAIiwB,EAAOvwB,KAAO,UAItC,CACD2wB,EAAIi4B,GAAiB,KAAOhyD,GAAMtD,KAAK+tC,QAAQ/sC,QAAQsC,GAAK,kBAC5D2Z,EAAItb,YAAY07B,GAChBA,EAAE75B,aAAa,YAAa,eAAiBwP,EAAQ+iB,OAAOhpB,EAAIkwB,EAAOzwB,MAAQ,OACzEwG,EAAQ+iB,OAAO/oB,EAAIiwB,EAAOvwB,KAAO,KAC3B1M,KAAK+tC,QAAQ2c,MAAzB,IAEI36B,EAAW,IAAI8lY,GAAgB,GAAI,MAAM,GACzCe,EAAY1hW,GAAal1D,KAAK+tC,QAAQ/sC,QAAQsC,IAClDtD,KAAK+tC,QAAQ4gZ,sBAAsB1xa,EAAK8S,EAAU6mY,GAAW,GAGjE,OADAp2Z,SAASuL,KAAKzG,YAAY2X,GACnBA,GAEX21a,EAAev3b,UAAUi4b,gBAAkB,SAAUtgb,EAASoqa,GAC1D,IAII54X,EAASxxC,EAAQ+iB,OACjBkH,EAASjqB,EAAQiqB,OACjBsB,EAAOvrB,GAAWA,EAAQwxC,OAASxxC,EAAQwxC,OAAS,UACpD04P,EAAal9S,KAAK+yb,iBAAiBx0Z,EAAMvrB,GACzCmhb,EAAUn0b,KAAK+tC,QAAQoc,aAAa78B,WAAWuI,MAC/CmzW,EAAS96S,GAAeI,aAAatuF,KAAK+tC,QAAQ/sC,QAAQsC,GAAK,WAAY0P,EAAQ+iB,OAAO/f,MAAOhD,EAAQ+iB,OAAOhgB,QAEhHpQ,EAAUqjY,EAAOv6S,WAAW,MAChC9oF,EAAQuqF,WAAW1rC,EAAOz3C,GAAIy3C,EAAOx3C,GACrCrH,EAAQqpF,OACRrpF,EAAQ+pF,UAAY1vF,KAAK+tC,QAAQoc,aAAa78B,WAAWuI,MACzD2uB,EAAkB,YAATjmB,EAAqB2+Q,EAAa14P,EAC3C7+C,EAAQgqF,SAASnrC,EAAOz3C,EAAGy3C,EAAOx3C,EAAGw3C,EAAOxuC,MAAOwuC,EAAOzuC,QAC1D,IAAIq+a,EAAQp0b,KAAK+tC,QAAQoc,aAAa78B,WACtC,GAAI8ma,GAASA,EAAM73b,OAAQ,CACvB2gT,EAAal9S,KAAK+yb,iBAAiBx0Z,EAAMvrB,GACzC,IAAIqzL,EAAQ,IAAIl1G,MAChBk1G,EAAM/mM,IAAM80b,EAAM73b,OAClB,IAAI83b,EAAcn3I,EAAWlnS,MAAQqwL,EAAMrwL,MACvCs+a,EAAcp3I,EAAWnnS,OAASswL,EAAMtwL,OACxChJ,EAAImwS,EAAWnwS,EACfC,EAAIkwS,EAAWlwS,EACfgJ,EAAQknS,EAAWlnS,MACnBD,EAASmnS,EAAWnnS,OACpBw+a,EAAav0b,KAAKw0b,kBAAkBJ,GACxC,GAAoB,SAAhBA,EAAMtwY,OAAoC,SAAhBswY,EAAM3mY,MAAkB,CAClD,IAAIgnY,EAA6B,SAAhBL,EAAMtwY,MAAmBz3C,KAAK8T,IAAIk0a,EAAaC,GAAejob,KAAKC,IAAI+nb,EAAaC,GACrGt+a,EAAQy+a,EAAapuP,EAAMrwL,MAC3BD,EAAS0+a,EAAapuP,EAAMtwL,OACxBq+a,EAAM3mY,MAAMlvD,QAAQ,SAAW,EAC/BwO,IAAMmwS,EAAWlnS,MAAQA,GAAS,EAE7Bo+a,EAAM3mY,MAAMlvD,QAAQ,SAAW,IACpCwO,EAAIA,EAAImwS,EAAWlnS,MAAQA,GAE3Bo+a,EAAM3mY,MAAMlvD,QAAQ,SAAW,EAC/ByO,IAAMkwS,EAAWnnS,OAASA,GAAU,EAE/Bq+a,EAAM3mY,MAAMlvD,QAAQ,SAAW,IACpCyO,EAAIA,EAAIkwS,EAAWnnS,OAASA,GAEmB,SAA/C/V,KAAK+tC,QAAQoc,aAAa78B,WAAWuI,OAAmE,gBAA/C71B,KAAK+tC,QAAQoc,aAAa78B,WAAWuI,QAC9FlwB,EAAQ+pF,UAAY,QACpB/pF,EAAQgqF,SAASutN,EAAWnwS,EAAIiG,EAAc,OAAGkqS,EAAWlwS,EAAIgG,EAAc,OAAGkqS,EAAWlnS,MAAQhD,EAAc,OAAGkqS,EAAWnnS,OAAS/C,EAAc,SAEvJuhb,GACA5ub,EAAQsrF,UAAUo1G,EAAOt5L,EAAGC,EAAGynb,EAAapuP,EAAMrwL,MAAOy+a,EAAapuP,EAAMtwL,aAG3Ew+a,GACL5ub,EAAQsrF,UAAUo1G,EAAOt5L,EAAGC,EAAGkwS,EAAWlnS,MAAOknS,EAAWnnS,aAIhEpQ,EAAQ+pF,UAAwB,gBAAZykW,EAA4B,QAAUA,EAC1Dxub,EAAQgqF,SAAUutN,EAAWnwS,EAAIiG,EAAc,OAAKiqB,EAAOzwB,KAAO0wS,EAAWlwS,EAAIgG,EAAc,OAAKiqB,EAAOvwB,IAAMwwS,EAAWlnS,MAAQhD,EAAc,OAAKiqB,EAAOzwB,KAAOywB,EAAOxwB,MAAQuG,EAAc,OAAIkqS,EAAWnnS,OAAUknB,EAAOvwB,IAAMuwB,EAAOtwB,QAEnP,IAAI+nb,EAAU10b,KAAK+tC,QAAQoc,aAAa78B,WAAWuI,MAC/C8+Z,EAAU30b,KAAK+tC,QAAQoc,aAAan0C,MACpC2+a,IACAhvb,EAAQmpF,YAA0B,SAAZ4lW,EAAqB,cAAgBA,EAC3D/ub,EAAQgpF,UAAYgmW,EACpBhvb,EAAQivb,WAAW13I,EAAWnwS,EAAIiG,EAAc,OAAGkqS,EAAWlwS,EAAIgG,EAAc,OAAGkqS,EAAWlnS,MAAQhD,EAAc,OAAGkqS,EAAWnnS,OAAS/C,EAAc,SAE7JrN,EAAQypF,UACR,IAAIwnU,EAAY1hW,GAAal1D,KAAK+tC,QAAQ/sC,QAAQsC,IAC9CysB,EAAW,IAAI8lY,GAAgB,GAAI,MAAM,GAE7C,OADA71Z,KAAK+tC,QAAQ4gZ,sBAAsB3lD,EAAQj5W,EAAU6mY,GAAW,GACzD5tB,GAEX4pD,EAAev3b,UAAUm5b,kBAAoB,SAAUlL,GACnD,IAEItgD,EAFAjhV,GAAQ,EAGZ,GAAIuhY,EAAgB/sb,OAChB,IAEI,IAAIiyF,GADJw6S,EAAS96S,GAAeI,aAAatuF,KAAK+tC,QAAQ/sC,QAAQsC,GAAK,cAAe,IAAK,MAClEmrF,WAAW,MAC5BD,EAAIQ,OACJ,IAAIq3G,EAAQ,IAAIl1G,MAChBk1G,EAAM/mM,IAAMgqb,EAAgB/sb,OAC5BiyF,EAAIyC,UAAUo1G,EAAO,EAAG,EAAG,IAAK,KAChC73G,EAAIY,UACM45S,EAAO15S,YAErB,MAAOzuF,GACHknD,GAAQ,EAGhB,OAAOA,GAEX6qY,EAAev3b,UAAUw5b,oBAAsB,SAAUx6U,EAAKrnG,GAC1D,IAAIgD,EAAQ,EACRD,EAAS,EACToZ,EAAO,IAAIM,GAOf,GANAzZ,EAAQqkG,EAAIrkG,MACZD,EAASskG,EAAItkG,QACT/C,EAAQkvP,YAAclvP,EAAQgrS,aAC9BjoS,EAAS/C,EAAQkvP,WAAalvP,EAAQkvP,WAAansP,EACnDC,EAAQhD,EAAQgrS,UAAYhrS,EAAQgrS,UAAYhoS,GAEhDhD,EAAQ07P,kBACyB,cAA5B17P,EAAQ07P,iBAAmC34P,EAASC,GAAsC,aAA5BhD,EAAQ07P,iBAAkC14P,EAAQD,GAAQ,CACzH,IAAIsjB,EAAOrjB,EACXA,EAAQD,EACRA,EAASsjB,EAKjB,OAFAlK,EAAKpZ,OAASA,EACdoZ,EAAKnZ,MAAQA,EACNmZ,GAEXyja,EAAev3b,UAAUk4b,iBAAmB,SAAUl5U,EAAKrnG,EAAS8hb,GAChE,IAGI92I,EACA97C,EAJA6yL,KACA7zb,EAAMV,SAASW,cAAc,OAC7B4+J,EAAW//J,KAAK60b,oBAAoBx6U,EAAKrnG,GAGzCiqB,EAASjqB,EAAQiqB,OACjB+3Z,EAAQ/3Z,EAAOzwB,KACfyob,EAAOh4Z,EAAOvwB,IACdwob,EAASj4Z,EAAOxwB,MAChB0ob,EAAUl4Z,EAAOtwB,OACjBI,EAAI,EAERixS,EAAYj+I,EAAS/pJ,MAAQjJ,EAC7Bm1P,EAAaniG,EAAShqJ,OAFd,EAGR,IAAIq/a,EAAS,EACTC,EAAS,EACb,GAAIrib,GAAWA,EAAQspa,cAAqC,YAAnBtpa,EAAQwxC,OAAuB,CACpEtjD,EAAIwD,MAAMqR,OAAS,OACnB7U,EAAIwD,MAAMsR,MAAQ,OAClB,IAAIs/a,EAAYj7U,EAAItkG,OAChBw/a,EAAWl7U,EAAIrkG,MAEf7Z,EAAI,EACJsnB,EAAI,EACJ2V,OAAM,EACNk8X,EAAY,EACZC,EAAa,EACb/mU,OAAM,EACNw6S,OAAS,EACb,EAAG,CACC,GACIssB,EAAYv1P,EAAS/pJ,MACrBu/Y,EAAax1P,EAAShqJ,OACjBq/a,EAASr1R,EAAS/pJ,OAAUu/a,IAC7BjgC,EAAaigC,EAAWH,GAEvBC,EAASt1R,EAAShqJ,QAAWu/a,IAC9B//B,EAAc+/B,EAAYD,IAG9B7mW,GADAw6S,EAAS96S,GAAeI,aAAatuF,KAAK+tC,QAAQ/sC,QAAQsC,GAAK,iBAAkBy8J,EAAS/pJ,MAAO+pJ,EAAShqJ,SAC7F04E,WAAW,OACpBwC,UAAUopB,EAAKttG,EAAIqob,EAASJ,EA9BpC,EA8B+CK,EAASJ,EAAM3/B,EAAY4/B,EAASF,EAAOz/B,EAAa4/B,EAAUF,EAAM,EAAID,EAAO,EAAIC,EAAM3/B,EAAY4/B,EAASF,EAAOz/B,EAAa4/B,EAAUF,GACtLG,EAASr1R,EAAS/pJ,OAAUu/a,IAC7BH,GAAWA,EAASG,GAExBn8Z,EAAM4vW,EAAO15S,YACbd,EAAIY,UACJgmW,GAAUp3I,EACN82I,EACAC,EAAWvwb,KAAK40B,GAGhBp5B,KAAKw1b,WAAWt0b,EAAKk4B,EAAKj9B,EAAI,GAAKsnB,EAAGu6R,EAAY,MAAO97C,EAAa,OAE1E/lQ,UACKi5b,EAASG,GAClB9xa,IACAtnB,EAAI4Q,EAAIqob,EAAS,EACZC,EAASt1R,EAAShqJ,QAAWu/a,IAC9BD,GAAWA,EAASC,GAExBD,GAAUnzL,QACLmzL,EAASC,OAGjB,CACD,IAGIG,EACAC,EAFAC,EAAa31b,KAAK60b,oBAAoBx6U,EAAKrnG,GAG/Cyib,EAAcE,EAAW3/a,MACzB0/a,EAAeC,EAAW5/a,OACtBy4E,OAAM,EACNw6S,OAAS,EACT5vW,OAAM,GAEVo1D,GADAw6S,EAAS96S,GAAeI,aAAatuF,KAAK+tC,QAAQ/sC,QAAQsC,GAAK,WAAYmyb,EAAaC,IAC3EjnW,WAAW,OACpBwC,UAAUopB,EAZJ,EAYe26U,EAXf,EAW4BC,EAAM56U,EAAIrkG,OAASk/a,EAASF,GAAQ36U,EAAItkG,QAAUk/a,EAAOE,GAAU,EAAIH,EAAO,EAAIC,EAAMQ,GAAeP,EAASF,GAAQU,GAAgBT,EAAOE,IACrL/7Z,EAAM4vW,EAAO15S,YACbd,EAAIY,UACJpvF,KAAKw1b,WAAWt0b,EAAKk4B,EAAK,GAE9B,OAAI07Z,EACOC,EAGA7zb,GAGf0xb,EAAev3b,UAAUm6b,WAAa,SAAUt0b,EAAKk4B,EAAKj9B,EAAG6hT,EAAW97C,GACpE,IACI5tG,EADAj6C,EAAM75G,SAASW,cAAc,OAE7B0oM,EAAWrpM,SAASW,cAAc,OAEtCk0D,GAAiBglD,EADjBi6C,GAAS5pB,MAAS,uBAAwBhmI,MAAS,SAAWs5S,EAAY,UAAY97C,IAEtF7sM,GAAiBw0I,EAAUv1C,GAE3Bj/F,GAAiBglD,EADjBi6C,GAAShxJ,GAAMtD,KAAK+tC,QAAQ/sC,QAAQsC,GAAK,qBAAuBnH,EAAGuI,MAAS,aAAcpF,IAAO85B,IAEjGywK,EAASloM,YAAY04G,GACrBn5G,EAAIS,YAAYkoM,IAMpB+oP,EAAev3b,UAAU0F,MAAQ,SAAUiS,GACvC,IAAIjT,EAAQC,KACZgT,EAAQurB,KAAO,OACfvrB,EAAQiqB,QAAWvwB,IAAK,EAAGC,OAAQ,EAAGF,MAAO,EAAGD,KAAM,GACtD,IAAI4sB,EAAMp5B,KAAK2ob,cAAc31a,GACzBqnG,EAAM75G,SAASW,cAAc,OAC7BmzJ,GACAhxJ,GAAMtD,KAAK+tC,QAAQ/sC,QAAQsC,GAAK,cAChChE,IAAO85B,GAEXi8B,GAAiBglD,EAAKi6C,GACtBj6C,EAAI11B,OAAS,WACT,IAAIzjF,EAAMnB,EAAMwzb,iBAAiBl5U,EAAKrnG,GAElC4ib,EAAY/5b,OAAO6F,KAAK,IACX,MAAbk0b,GACK10b,aAAeq2D,cAChBq+X,EAAUp1b,SAASuB,MAAM,mMAGzB6zb,EAAUp1b,SAASuB,MAAM,gEACzB6zb,EAAUp1b,SAASuB,MAAM,WAAab,EAAIc,UAAY,aACtD4zb,EAAUp1b,SAASyB,WAUnC2wb,EAAev3b,UAAUiX,QAAU,aAQnCsgb,EAAev3b,UAAU0kC,cAAgB,WAIrC,MAAO,kBAEJ6yZ,KCrmBP/mW,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAexC2pW,GAA4B,SAAUnpW,GAEtC,SAASmpW,IACL,IAAI91b,EAAmB,OAAX2sF,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAUhE,OANAD,EAAM64B,YAAc,WAKpB74B,EAAM6iZ,qBAAkBznZ,EACjB4E,EAgJX,OA5JA8rF,GAAUgqW,EAAYnpW,GAkBtBmpW,EAAWx6b,UAAUokO,QAAU,SAAUzqM,GACrC,IAAI85O,EAAkC,eAArB9uQ,KAAK44B,YAA+B54B,KAAK81b,sBAAwB91b,KAAK+1b,oBAEvF,OADA/1b,KAAK24D,YAAc34D,KAAKg2b,kBAAkBhha,EAAe85O,GAClD9uQ,KAAK24D,aAMhBk9X,EAAWx6b,UAAU8mZ,QAAU,SAAUxpV,GACrC,IAAIm2M,EAAkC,eAArB9uQ,KAAK44B,YAA+B54B,KAAKi2b,uBAAyBj2b,KAAKk2b,qBAGxF,OAFAl2b,KAAKy5C,WAAaz5C,KAAKm2b,kBAAkBx9X,EAAam2M,GACtD9uQ,KAAKoiZ,eACEpiZ,KAAKy5C,YAMhBo8Y,EAAWx6b,UAAU26b,kBAAoB,SAAUhha,EAAe85O,GAC9D,IAAIi0I,OAAU5nZ,EACd,QAAsBA,IAAlB6E,KAAKoa,UAA0Bpa,KAAKoa,SAAS3d,OAAS,EACtD,IAAK,IAAI2B,EAAK,EAAGyE,EAAK7C,KAAKoa,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIiC,EAAQwC,EAAGzE,GACfiC,EAAMkmD,gBAAkBvmD,KAAKsmD,YAActmD,KAAKumD,gBAEhDlmD,EAAMo/N,QAAQzqM,GACd,IAAIuuX,EAAYljZ,EAAMs4D,YAAYt5D,QAElCW,KAAKo2b,iBAAiB/1b,EAAOkjZ,GAEH,IAAtBljZ,EAAMimD,cACNi9V,EAAYlrV,GAAWkrV,EAAWljZ,EAAMimD,mBAG5BnrD,IAAZ4nZ,EACAA,EAAUQ,EAGVz0I,EAAWy0I,EAAWR,GAQlC,OAJAA,EAAUr2T,EAAOrxF,UAAU6mZ,oBAAoB5gZ,KAAKtB,KAAM+iZ,EAAS/tX,GACnEh1B,KAAKojZ,gBAAgBL,GAErB/iZ,KAAKqjZ,aAAaN,GACXA,GAEX8yC,EAAWx6b,UAAU86b,kBAAoB,SAAUx9X,EAAahjD,GAC5D,QAAsBxa,IAAlB6E,KAAKoa,UAA0Bpa,KAAKoa,SAAS3d,OAAS,EAAG,CACzD,IAAIsQ,OAAI,EACJC,OAAI,EACRD,EAAI/M,KAAK6L,QAAU8sD,EAAY3iD,MAAQhW,KAAKqvD,MAAMtiD,EAAI/M,KAAKw6D,QAAQhuD,KACnEQ,EAAIhN,KAAKiM,QAAU0sD,EAAY5iD,OAAS/V,KAAKqvD,MAAMriD,EAAIhN,KAAKw6D,QAAQ9tD,IACpE,IAAK,IAAItO,EAAK,EAAGyE,EAAK7C,KAAKoa,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIiC,EAAQwC,EAAGzE,GACXmlZ,EAAYljZ,EAAMs4D,YAAYt5D,QAC9Bg3b,EAAc9yC,EACO,aAArBvjZ,KAAK44B,YACL5rB,GAAK3M,EAAM48B,OAAOvwB,IAGlBK,GAAK1M,EAAM48B,OAAOzwB,KAEI,IAAtBnM,EAAMimD,cACN+vY,EAAch+X,GAAWkrV,EAAWljZ,EAAMimD,cAE9C,IAAIvzB,EAASpd,EAAe5I,EAAGC,EAAG3M,EAAOL,KAAM24D,EAAa09X,GAC5D3pW,EAAOrxF,UAAUioZ,0BAA0BhiZ,KAAKtB,KAAMK,EAAO0yB,GAC7D1yB,EAAM8hZ,QAAQoB,GACW,aAArBvjZ,KAAK44B,YACL5rB,GAAKqpb,EAAYtgb,OAAS1V,EAAM48B,OAAOtwB,OAGvCI,GAAKspb,EAAYrgb,MAAQ3V,EAAM48B,OAAOxwB,OAIlD,OAAOksD,GAEXk9X,EAAWx6b,UAAUy6b,sBAAwB,SAAUz1b,EAAOC,GAC1DA,EAAOyV,OAAS1J,KAAKC,IAAIjM,EAAM0V,OAAQzV,EAAOyV,QAC9CzV,EAAO0V,OAAS3V,EAAM2V,OAE1B6/a,EAAWx6b,UAAU06b,oBAAsB,SAAU11b,EAAOC,GACxDA,EAAO0V,MAAQ3J,KAAKC,IAAIjM,EAAM2V,MAAO1V,EAAO0V,OAC5C1V,EAAOyV,QAAU1V,EAAM0V,QAE3B8/a,EAAWx6b,UAAU46b,uBAAyB,SAAUlpb,EAAGC,EAAG3M,EAAOC,EAAQg2b,EAAaxzC,GACtF,IAAIzhY,EAAU,EACd,GAAgC,QAA5BhhB,EAAM0sD,kBACN1rC,EAAUrU,EAAI3M,EAAM48B,OAAOvwB,IAAMo2Y,EAAY/sY,OAAS,OAErD,GAAgC,WAA5B1V,EAAM0sD,kBAAgC,CAE3C1rC,EADmB/gB,EAAO2L,QAAUqqb,EAAYvgb,QAAU,EAAIzV,EAAO+uD,MAAMriD,GAClD1M,EAAOk6D,QAAQ7tD,OAAStM,EAAM48B,OAAOtwB,OAASm2Y,EAAY/sY,OAAS,OAG5FsL,EAAU/gB,EAAO2L,QAAUqqb,EAAYvgb,OAASzV,EAAO+uD,MAAMriD,EAAIspb,EAAYvgb,OAAS,EAE1F,OAAShJ,EAAGA,EAAI+1Y,EAAY9sY,MAAQ,EAAGhJ,EAAGqU,IAE9Cw0a,EAAWx6b,UAAU66b,qBAAuB,SAAUnpb,EAAGC,EAAG3M,EAAOC,EAAQskZ,EAAYrB,GACnF,IAAIniY,EAAU,EACd,GAAkC,SAA9B/gB,EAAMysD,oBACN1rC,EAAUrU,EAAI1M,EAAM48B,OAAOzwB,KAAO+2Y,EAAUvtY,MAAQ,OAEnD,GAAkC,UAA9B3V,EAAMysD,oBAAiC,CAE5C1rC,EADkB9gB,EAAOuL,QAAU+4Y,EAAW5uY,OAAS,EAAI1V,EAAO+uD,MAAMtiD,GAChDzM,EAAOk6D,QAAQ/tD,MAAQpM,EAAM48B,OAAOxwB,MAAQ82Y,EAAUvtY,MAAQ,OAGtFoL,EAAU9gB,EAAOuL,QAAU+4Y,EAAW5uY,MAAQ1V,EAAO+uD,MAAMtiD,EAAI63Y,EAAW5uY,MAAQ,EAEtF,OAASjJ,EAAGqU,EAASpU,EAAGA,EAAIu2Y,EAAUxtY,OAAS,IAEnD8/a,EAAWx6b,UAAU+nZ,gBAAkB,SAAUj0X,GAC7C,QAAsBh0B,IAAlB6E,KAAKoa,UAA0Bpa,KAAKoa,SAAS3d,OAAS,EACtD,IAAK,IAAI2B,EAAK,EAAGyE,EAAK7C,KAAKoa,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIiC,EAAQwC,EAAGzE,GACU,aAArB4B,KAAK44B,YAC6B,YAA9Bv4B,EAAMysD,sBACNzsD,EAAMs4D,YAAY3iD,MAAQmZ,EAAKnZ,OAIH,YAA5B3V,EAAM0sD,oBACN1sD,EAAMs4D,YAAY5iD,OAASoZ,EAAKpZ,UAMpD8/a,EAAWx6b,UAAU+6b,iBAAmB,SAAU/1b,EAAO8uB,GACrDA,EAAKpZ,QAAU1V,EAAM48B,OAAOvwB,IAAMrM,EAAM48B,OAAOtwB,OAC/CwiB,EAAKnZ,OAAS3V,EAAM48B,OAAOzwB,KAAOnM,EAAM48B,OAAOxwB,OAE5Copb,GACTjlY,ICtKE2lY,GAA6B,WAK7B,SAASA,IACLv2b,KAAKw2b,aAiOT,OAzNAD,EAAYl7b,UAAUiX,QAAU,aAQhCikb,EAAYl7b,UAAU0kC,cAAgB,WAIlC,MAAO,eAQXw2Z,EAAYl7b,UAAUyvb,SAAW,SAAUtub,EAAMuxC,GAC7C,IAAI+2B,EAGAs5F,EAAc5hK,EAAK4hK,iBACvBt5F,EAAatoE,EAAKA,MAAQ4hK,EAAoB,MAAKA,EAAoB,OAClEA,EAAYt5F,WAAas5F,EAAYt5F,WAAWE,UAAO7pE,KAC1C2pE,EAAWroE,QACzBuD,KAAKy2b,gBAAgBj6b,EAAMsoE,EAAY/2B,IAS/CwoZ,EAAYl7b,UAAUmxb,WAAa,SAAUhwb,EAAMuxC,GAC/C,IAEIhvC,EAFAgB,EAAQC,KAGRsO,EAAS9R,EACb,GAHiBA,EAGF4hK,uBAAuBr5F,GAAa,CAC/C,IAAIjI,EAAQxuD,EAAO8vJ,YAAYgmC,aAC/B5nM,EAAK4hK,YAAYE,aAAaxhG,GAAOwnI,KAAK,SAAUzjM,GAEhD9B,EAAS8B,EAAM,OACVktC,EAAQw6C,cACTxoF,EAAM02b,gBAAgBj6b,EAAMuC,EAAQgvC,GACpCA,EAAQsgZ,iBACRtgZ,EAAQrnB,QAAQ,cAAgBqnB,QAASA,SAKzDwoZ,EAAYl7b,UAAUo7b,gBAAkB,SAAUnob,EAAQ9R,EAAMuxC,GAC5D/tC,KAAKw2b,aACL,IAAIz5b,EACAysX,EAGAxrW,EACA04a,EAHAC,KACAl8X,KAGJ,QAAat/D,IAATqB,EAAoB,CACpB,IAAK,IAAI4gC,EAAI,EAAGA,EAAI5gC,EAAKC,OAAQ2gC,SAEAjiC,KAD7B4B,EAAMP,EAAK4gC,IACH9uB,EAAOqsD,WAAoD,OAAzB59D,EAAIuR,EAAOqsD,WACjB,iBAAzB59D,EAAIuR,EAAOqsD,eACsBx/D,IAApCw7b,EAAU55b,EAAIuR,EAAOqsD,WACrBg8X,EAAU55b,EAAIuR,EAAOqsD,WAAWkB,MAAMr3D,KAAKzH,GAG3C45b,EAAU55b,EAAIuR,EAAOqsD,YAAekB,OAAQ9+D,IAIhD45b,EAAY32b,KAAK42b,wBAAwB75b,EAAK45b,EAAWrob,EAAQ9R,GAEjE8R,EAAOy9L,OAAShvM,EAAIuR,EAAOhL,MAC3BkmX,GAAc3tT,OAAQ9+D,KAG9B,GAAIysX,EACA/uT,EAAWj2D,KAAKglX,QAGhB,IAAK,IAAIprX,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKq5b,GAAYv4b,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAChE,IAAI+4J,EAAIt0J,EAAGzE,GACN+4J,GAAW,cAANA,GAA2B,OAANA,GAAsB,SAANA,GAC3C18F,EAAWj2D,KAAKmyb,EAAUx/R,IAItC,IAAK,IAAIh7J,EAAI,EAAGA,EAAIs+D,EAAWh+D,OAAQN,IACnC,IAAK,IAAIsnB,EAAI,EAAGA,EAAIg3C,EAAWt+D,GAAG0/D,MAAMp/D,OAAQgnB,IAAK,CACjDzF,EAAOy8C,EAAWt+D,GAAG0/D,MAAMp4C,GAC3B,IAAIljB,EAAOP,KAAK62b,kBAAkBvob,EAAQ0P,EAAM+vB,GAChDA,EAAQ2c,MAAMlmD,KAAKjE,GACnBP,KAAKw2b,UAAUx4a,EAAK1P,EAAOhL,KAAO/C,OAEhBpF,KADlBu7b,EAAYC,EAAUp2b,EAAK/D,KAAK8R,EAAOhL,OAEnCtD,KAAKgoX,iBAAiB15W,EAAQoob,EAAWn2b,EAAK+C,GAAIqzb,EAAW5oZ,IAK7E/tC,KAAKw2b,UAAY,MASrBD,EAAYl7b,UAAUu7b,wBAA0B,SAAU75b,EAAK45b,EAAWrob,EAAQ9R,GAG9E,IAAK,IADD8D,EADAwgE,EAAU/jE,EAAIuR,EAAOqsD,UAEhBx+D,EAAI,EAAGA,EAAI2kE,EAAQrkE,OAAQN,IAE5Bw6b,EADJr2b,EAASwgE,EAAQ3kE,IAEbw6b,EAAUr2b,GAAQu7D,MAAMr3D,KAAKzH,GAG7B45b,EAAUr2b,IAAYu7D,OAAQ9+D,IAGtC,OAAO45b,GAQXJ,EAAYl7b,UAAUw7b,kBAAoB,SAAUvob,EAAQ0P,EAAM+vB,GAC9D,IAEI+oZ,GAAcxzb,GADTqzD,KACiBn6D,KAAMwhB,GAC5B+qC,EAAY9E,GAAY31C,EAAOy6C,WAC/BA,GACAA,EAAU+tY,EAAW94a,EAAM+vB,GAE/B,IAAIhxC,EAAM,IAAIwiD,GAAKxR,EAAS,QAAS+oZ,GAAW,GAChD,OAAK92b,KAAK07D,mBAAmB3+D,EAAKgxC,EAASz/B,EAAOhL,GAAIgL,EAAOqsD,UAIlD36D,KAAKw2b,UAAUx4a,EAAK1P,EAAOhL,KAH3BvG,GAMfw5b,EAAYl7b,UAAU2sX,iBAAmB,SAAU15W,EAAQhO,EAAQtD,EAAO+5b,EAAShpZ,GAI/E,IAAK,IAHD1tC,EACAq2b,EACAn2b,EACKkjB,EAAI,EAAGA,EAAInjB,EAAOu7D,MAAMp/D,OAAQgnB,IAAK,CAC1CpjB,EAAQC,EAAOu7D,MAAMp4C,GACrBljB,EAAOP,KAAK62b,kBAAkBvob,EAAQjO,EAAO0tC,GAC7C,IAAIipZ,GAAW,EACVh3b,KAAK07D,mBAAmBn7D,EAAMwtC,EAASz/B,EAAOhL,GAAIgL,EAAOqsD,UAK1Dq8X,GAAW,GAJXh3b,KAAKw2b,UAAUn2b,EAAMiO,EAAOhL,KAAO/C,EACnCwtC,EAAQ2c,MAAMlmD,KAAKjE,IAKlBP,KAAKi3b,kBAAkBlpZ,EAAS/wC,EAAOuD,EAAK+C,KAC7CyqC,EAAQ0c,WAAWjmD,KAAKxE,KAAKk3b,uBAAuBl6b,EAAOuD,EAAK+C,GAAIyqC,IAEnEipZ,QAEiB77b,KADlBu7b,EAAYK,EAAQx2b,EAAK/D,KAAK8R,EAAOhL,OAEjCtD,KAAKgoX,iBAAiB15W,EAAQoob,EAAWn2b,EAAK+C,GAAIyzb,EAAShpZ,KAK3EwoZ,EAAYl7b,UAAU47b,kBAAoB,SAAUlpZ,EAAS+B,EAAYC,GACrE,GAAmB,KAAfD,GAAoC,KAAfC,EACrB,IAAK,IAAI5zC,EAAI,EAAGA,EAAI4xC,EAAQ0c,WAAWhuD,OAAQN,IAAK,CAChD,IAAI47C,EAAYhK,EAAQ0c,WAAWtuD,GACnC,QAAkBhB,IAAd48C,GAA4BA,EAAUxI,WAAaO,GAAciI,EAAU2zW,WAAa37W,EACxF,OAAO,EAInB,OAAO,GASXwmZ,EAAYl7b,UAAUqgE,mBAAqB,SAAUn7D,EAAMwtC,EAASzqC,EAAIq3D,GACpE,IAAI59D,EAAMiD,KAAKw2b,UAAUj2b,EAAK/D,KAAK8G,IACnC,YAAYnI,IAAR4B,GAAqBA,EAAIP,KAAK8G,KAAQ/C,EAAK/D,KAAK8G,IAAOvG,EAAIP,KAAKm+D,KAAcp6D,EAAK/D,KAAKm+D,IAahG47X,EAAYl7b,UAAU67b,uBAAyB,SAAUttE,EAAOutE,EAAOppZ,GACnE,IAAIqpZ,GACA9zb,GAAIqzD,KAAYpnB,SAAUq6U,EAAO8hC,SAAUyrC,GAG/C,OADU,IAAIj5Y,GAAUnQ,EAAS,aAAcqpZ,GAAW,IAGvDb,KCxOAc,IACPz8Z,QAAS,oBACTr7B,KAAM,SACN6xa,MAAO,UACPmU,KAAM,SACNC,KAAM,SACNzV,IAAK,QACLnqa,UAAW,cACX0xb,SAAU,aACVhjW,MAAO,UACPs9U,QAAS,YACT6D,aAAc,eACdJ,WAAY,aACZwP,YAAa,iBACb1O,aAAc,iBACd32Q,MAAO,WAMP+3R,GAAoC,WACpC,SAASA,EAAmBj3b,EAAQk3b,GAChCx3b,KAAKy3b,gBAILz3b,KAAK03b,gBAIL13b,KAAK23b,eACL33b,KAAK2/I,WAAa3/I,KAAK43b,eACvB53b,KAAKM,OAASA,EACdN,KAAK6iE,eAAiB20X,EACtBx3b,KAAKtD,mBA4TT,OAtTA66b,EAAmBl8b,UAAUqB,iBAAmB,WACxCsD,KAAKM,OAAOioF,aAGhBvoF,KAAKM,OAAO6mF,GAAG,eAAgBnnF,KAAK2tG,OAAQ3tG,OAMhDu3b,EAAmBl8b,UAAUuB,oBAAsB,WAC3CoD,KAAKM,OAAOioF,aAGhBvoF,KAAKM,OAAOinF,IAAI,eAAgBvnF,KAAK2tG,SAEzC4pV,EAAmBl8b,UAAUsyG,OAAS,WAClC3tG,KAAKiyH,KAAOjyH,KAAK6iE,eAAeE,WAAW,gBAC3C/iE,KAAKgB,QAAUG,EAAc,MAAQmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,iBAClEtD,KAAKM,OAAOU,QAAQW,YAAY3B,KAAKgB,SACrC,IAAImG,EAAS,IAAMnH,KAAKM,OAAOU,QAAQsC,GACvCtD,KAAK63b,YAAc,IAAIC,IACnBj8X,MAAO77D,KAAK+3b,eACZ7kb,UAAWlT,KAAKM,OAAO4S,UACvBs6F,kBAAmBxtG,KAAKM,OAAOktG,kBAC/Bx/F,OAAQhO,KAAKM,OAAO0N,OACpB7G,OAAQA,EACR1B,OAAQzF,KAAKg4b,qBAAqB18b,KAAK0E,MACvCouC,WAAYpuC,KAAKi4b,sBAAsB38b,KAAK0E,MAC5C6yJ,OAAQ7yJ,KAAKk4b,gBAAgB58b,KAAK0E,MAClCm4b,QAASn4b,KAAKo4b,mBAAmB98b,KAAK0E,MACtCiT,SAAU,mBAEdjT,KAAK63b,YAAYvpZ,SAAStuC,KAAKgB,UAEnCu2b,EAAmBl8b,UAAU08b,aAAe,WACxC,IAAIt/E,KACA4/E,KACAC,KACJ,IAAKt4b,KAAKM,OAAO2pD,oBAAoBsuY,mBAAoB,CACrD,IAAK,IAAIn6b,EAAK,EAAGyE,EAAK7C,KAAKw4b,kBAAmBp6b,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAChE,IAAI4f,EAAOnb,EAAGzE,IACqC,IAA/C4f,EAAK2+C,oBAAoBp+D,QAAQ,SACA,aAA7Byf,EAAK2+C,qBACL27X,EAAW9zb,KAAKxE,KAAKy4b,kBAAkBz6a,KAGS,IAA/CA,EAAK2+C,oBAAoBp+D,QAAQ,SACL,UAA7Byf,EAAK2+C,qBACL07X,EAAW7zb,KAAKxE,KAAKy4b,kBAAkBz6a,IAI3Cy6V,EAAUj0W,KAAKxE,KAAKy4b,kBAAkBz6a,IAG9C,GAAIs6a,EAAW77b,OAAS,EAAG,EACnBi8b,EAAa14b,KAAKy4b,kBAAkB,aAC7B58X,MAAQy8X,EACnB7/E,EAAUj0W,KAAKk0b,GAEnB,GAAIL,EAAW57b,OAAS,EAAG,CACvB,IAAIi8b,GAAAA,EAAa14b,KAAKy4b,kBAAkB,UAC7B58X,MAAQw8X,EACnB5/E,EAAUj0W,KAAKk0b,IAGvB,GAAI14b,KAAKM,OAAO2pD,oBAAoB4R,MAChC,IAAK,IAAI53D,EAAK,EAAGwG,EAAKzK,KAAKM,OAAO2pD,oBAAoB4R,MAAO53D,EAAKwG,EAAGhO,OAAQwH,IAAM,CAC/E,IAAI00b,EAAalub,EAAGxG,GACpBw0W,EAAUj0W,KAAKm0b,GAGvB,OAAOlgF,GAEX8+E,EAAmBl8b,UAAU68b,gBAAkB,WAC3Cl4b,KAAKqrW,QAAS,GAElBksF,EAAmBl8b,UAAU28b,qBAAuB,SAAU/3b,GAE1D,OADWD,KAAK44b,aAAa34b,EAAK+d,KAAK1a,KAEnC,IAAK,MACDtD,KAAKM,OAAOyva,MACZ,MACJ,IAAK,OACD/va,KAAKM,OAAOf,OACZ,MACJ,IAAK,OACDS,KAAKM,OAAOilb,OACZ,MACJ,IAAK,OACDvlb,KAAKM,OAAOklb,OACZ,MACJ,IAAK,QACDxlb,KAAKM,OAAO8wa,QACZ,MACJ,IAAK,YACDpxa,KAAKM,OAAOsF,YACZ,MACJ,IAAK,QACD5F,KAAKM,OAAOg0F,QACZ,MACJ,IAAK,UACDt0F,KAAKM,OAAOsxa,UACZ,MACJ,IAAK,oBACD5xa,KAAKM,OAAOm1a,eACZ,MACJ,IAAK,mBACDz1a,KAAKM,OAAOukb,cACZ,MACJ,IAAK,kBACD7kb,KAAKM,OAAO+0a,aACZ,MACJ,IAAK,oBACDr1a,KAAKM,OAAO61a,eAGpB31a,SAASyuB,eAAejvB,KAAKM,OAAOU,QAAQsC,GAAK,WAAWpB,QAC5DlC,KAAKM,OAAOomB,QvCojBpB,mBuCpjB8CzmB,IAE1Cs3b,EAAmBl8b,UAAU+8b,mBAAqB,SAAUn4b,GAEpDA,EAAK47D,MAAMp/D,OAAS,GAAKwD,EAAK47D,MAAM,GAAS,qBAAai8X,IAC1D93b,KAAK64b,oBAGbtB,EAAmBl8b,UAAUy9b,cAAgB,SAAU96a,GACnD,OAAOhe,KAAKiyH,KAAKz8C,YAAYx1E,KAAK2/I,WAAW3hI,KAEjDu5a,EAAmBl8b,UAAUw9b,iBAAmB,WAC5C74b,KAAK63b,YAAYp+E,UAAUz5W,KAAK23b,aAAa,GAC7C33b,KAAK63b,YAAYzgX,YAAYp3E,KAAK03b,cAAc,GAAO,GACvD13b,KAAK23b,eACL33b,KAAK03b,gBACL13b,KAAKqrW,QAAS,GAElBksF,EAAmBl8b,UAAU09b,YAAc,SAAU/6a,EAAM1hB,GACvD,IAAIe,EAAM2C,KAAK44b,aAAa56a,EAAK1a,IACrBtD,KAAKy3b,aAAap6b,IACe,IAAzC2C,KAAKw4b,kBAAkBj6b,QAAQlB,IAC3B2gB,EAAK7W,QAAU7K,IACd0D,KAAKg5b,aAAah7a,IACnBhe,KAAK23b,YAAYnzb,KAAKwZ,EAAK1a,KAIvCi0b,EAAmBl8b,UAAU48b,sBAAwB,SAAUh4b,GAC3D,IAAIg5b,EAAch5b,EAClBg5b,EAAYtB,eACZ,IAAK,IAAIv5b,EAAK,EAAGyE,EAAK5C,EAAK47D,MAAOz9D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpD,IAAI4f,EAAOnb,EAAGzE,GAEd,GADA4B,KAAK+4b,YAAY/6a,EAAM/d,EAAK3D,OACxB0hB,EAAK69C,MAAMp/D,OACX,IAAK,IAAIwH,EAAK,EAAGwG,EAAKuT,EAAK69C,MAAO53D,EAAKwG,EAAGhO,OAAQwH,IAAM,CACpD,IAAIi1b,EAAUzub,EAAGxG,GACjBjE,KAAK+4b,YAAYG,EAASj5b,EAAK3D,QAI3C0D,KAAKuN,UAAYtN,EAAK3D,MACtB0D,KAAKM,OAAOomB,QvCihBpB,kBuCjhB6Cuya,GACjCA,EAAYp9X,MAAMp/D,SAAWw8b,EAAYtB,YAAYl7b,QACrDw8b,EAAY5ga,QAAS,EACrB4ga,EAAYtB,iBAGZ33b,KAAK23b,YAAc33b,KAAK23b,YAAYn9a,OAAOy+a,EAAYtB,aACvD33b,KAAK63b,YAAYzgX,YAAYp3E,KAAK03b,cAAc,GAAO,GACvD13b,KAAK63b,YAAYl+E,UAAU35W,KAAK23b,aAAa,KAGrDJ,EAAmBl8b,UAAU29b,aAAe,SAAUh7a,GAClD,IAAIm7a,EAAiBn5b,KAAKM,OAAO4qD,cAAcR,MAAMjuD,OACjDuD,KAAKM,OAAO4qD,cAAcT,WAAWhuD,OAErC0K,GAAS,EACb,OAFenH,KAAK44b,aAAa56a,EAAK1a,KAGlC,IAAK,OACD6D,KAASnH,KAAKM,OAAO4va,cAAelwa,KAAKM,OAAO4va,YAAYkpB,SAC5D,MACJ,IAAK,OACDjyb,KAASnH,KAAKM,OAAO4va,cAAelwa,KAAKM,OAAO4va,YAAYmpB,SAC5D,MACJ,IAAK,QACDlyb,IAASnH,KAAKM,OAAO+8Z,eAAekR,cAAc4B,WAClD,MACJ,IAAK,YACDhpa,KAASnH,KAAKM,OAAOoqD,MAAMjuD,OAASuD,KAAKM,OAAOmqD,WAAWhuD,QAC3D,MACJ,IAAK,WACD0K,KAAWgyb,EAAiB,GAAOn5b,KAAKM,OAAO4qD,cAAcR,MAAM,IAAM1qD,KAAKM,OAAO4qD,cAAcR,MAAM,GAAGtwC,UACrGpa,KAAKM,OAAO4qD,cAAcR,MAAM,GAAGtwC,SAAS3d,OAAS,GAC5D,MACJ,IAAK,QACD0K,EAASgyb,EAAiB,EAC1B,MACJ,IAAK,UACDhyb,KAAWnH,KAAKM,OAAO4qD,cAAcR,MAAM,IAAM1qD,KAAKM,OAAO4qD,cAAcR,MAAM,GAAGtwC,UAC7Epa,KAAKM,OAAO4qD,cAAcR,MAAM,GAAGtwC,SAAS3d,OAAS,GAC5D,MACJ,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,oBACL,IAAK,mBACL,IAAK,kBACL,IAAK,oBACD0K,IAASgyb,EAGjB,OAAOhyb,GAQXowb,EAAmBl8b,UAAUiX,QAAU,WACnCtS,KAAK63b,YAAYvlb,UACjB/N,EAAOvE,KAAKgB,SACZhB,KAAKpD,uBAET26b,EAAmBl8b,UAAU0kC,cAAgB,WACzC,MAAO,eAEXw3Z,EAAmBl8b,UAAUi+b,WAAa,SAAUt7a,GAChD,OAAOhe,KAAKM,OAAOU,QAAQsC,GAAK,gBAAkB0a,GAEtDu5a,EAAmBl8b,UAAUu9b,aAAe,SAAUt1b,GAClD,OAAOA,EAAGiM,QAAQvP,KAAKM,OAAOU,QAAQsC,GAAK,gBAAiB,KAEhEi0b,EAAmBl8b,UAAUo9b,kBAAoB,SAAUz6a,GACvD,IAAIu7a,EACJ,OAAQv7a,GACJ,IAAK,OACDu7a,GAAapyb,OAAQkwb,GAAUz8Z,QAASu6C,QAASkiX,GAAU93b,MAC3D,MACJ,IAAK,MACDg6b,GAAapyb,OAAQkwb,GAAUz8Z,QAASu6C,QAASkiX,GAAUtnB,KAC3D,MACJ,IAAK,QACDwpB,GAAapyb,OAAQkwb,GAAUz8Z,QAASu6C,QAASkiX,GAAUjmB,OAC3D,MACJ,IAAK,OACDmoB,GAAapyb,OAAQkwb,GAAUz8Z,QAASu6C,QAASkiX,GAAU9R,MAC3D,MACJ,IAAK,OACDgU,GAAapyb,OAAQkwb,GAAUz8Z,QAASu6C,QAASkiX,GAAU7R,MAC3D,MACJ,IAAK,WACD+T,GAAapyb,OAAQkwb,GAAUz8Z,SAC/B,MACJ,IAAK,QACD2+Z,GAAapyb,OAAQkwb,GAAUz8Z,QAASu6C,QAASkiX,GAAU/iW,OAC3D,MACJ,IAAK,UACDilW,GAAapyb,OAAQkwb,GAAUz8Z,QAASu6C,QAASkiX,GAAUzlB,SAC3D,MACJ,IAAK,QACD2nB,GAAapyb,OAAQkwb,GAAUz8Z,QAASu6C,QAASkiX,GAAU73R,OAC3D,MACJ,IAAK,oBACD+5R,GAAapyb,OAAQkwb,GAAUz8Z,QAASu6C,QAASkiX,GAAU5hB,cAC3D,MACJ,IAAK,mBACD8jB,GAAapyb,OAAQkwb,GAAUz8Z,QAASu6C,QAASkiX,GAAUxS,aAC3D,MACJ,IAAK,kBACD0U,GAAapyb,OAAQkwb,GAAUz8Z,QAASu6C,QAASkiX,GAAUhiB,YAC3D,MACJ,IAAK,oBACDkkB,GAAapyb,OAAQkwb,GAAUz8Z,QAASu6C,QAASkiX,GAAUlhB,cAC3D,MACJ,IAAK,YACDojB,GAAapyb,OAAQkwb,GAAUz8Z,SAOvC,OAJA56B,KAAKy3b,aAAaz5a,IACd8Q,KAAM9uB,KAAK84b,cAAc96a,GAAO1a,GAAItD,KAAKs5b,WAAWt7a,GACpD7W,OAAQoyb,EAASpyb,OAAQguE,QAASokX,EAASpkX,QAAU,WAAaokX,EAASpkX,QAAU,IAElFn1E,KAAKy3b,aAAaz5a,IAE7Bu5a,EAAmBl8b,UAAUm9b,gBAAkB,WAC3C,OACI,OACA,MAAO,QAAS,OAAQ,OAAQ,YAAa,WAAY,QAAS,UAAW,QAC7E,oBAAqB,mBAAoB,kBAAmB,sBAGpEjB,EAAmBl8b,UAAUu8b,aAAe,WACxC,OACIr4b,KAAQ,OACRwwa,IAAO,MACPqB,MAAS,QACTmU,KAAQ,OACRC,KAAQ,OACR5/a,UAAa,YACb0xb,SAAY,WACZhjW,MAAS,QACTs9U,QAAW,UACXpyQ,MAAS,QACTg6R,kBAAqB,eACrBC,iBAAoB,cACpBC,gBAAmB,aACnBC,kBAAqB,iBAGtBpC,KhXjVPqC,GAA8B,WAM9B,SAASA,IAGL55b,KAAK65b,qBA8pET,OA3pEAv7b,OAAOuJ,eAAe+xb,EAAav+b,UAAW,4BAC1CqM,IAAK,WAED,IAAK,IADD+iD,KACKrsD,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0C,KAAK65b,mBAAoBz7b,EAAKyE,EAAGpG,OAAQ2B,IAGvE,IAAK,IAFDf,EAAMwF,EAAGzE,GACT+ga,EAAQn/Z,KAAK65b,kBAAkBx8b,GAC1B4G,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAK6ha,GAAQl7Z,EAAKwG,EAAGhO,OAAQwH,IAAM,CAC5D,IAAIojD,EAAa58C,EAAGxG,GAEpBwmD,EAAWjmD,KAAK26Z,EAAM93W,GAAiB,WAG/C,OAAOoD,GAEX9iD,YAAY,EACZC,cAAc,IAGlBgyb,EAAav+b,UAAU2qb,sBAAwB,SAAUjpb,GACrD,IAAI0tD,KACJ,GAAuB,SAAnB1tD,EAAIo8B,MAAMzyB,MAAoD,IAAjC3J,EAAIo8B,MAAMi3B,YAAY3zD,OAEnD,IAAK,IADD0ia,EAAQn/Z,KAAK65b,kBAAkB98b,EAAIuG,IAC9BlF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK6ha,GAAQ/ga,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIipD,EAAaxkD,EAAGzE,GAEpBqsD,EAAWjmD,KAAK26Z,EAAM93W,GAAe,WAG7C,OAAOoD,GAEXmvY,EAAav+b,UAAUslB,QAAU,SAAUpgB,EAAMq6B,GAC7C,IAAIzL,EAAO,IAAIM,GAAKlvB,EAAKyV,MAAOzV,EAAKwV,QACrC,QAAmB5a,IAAfg0B,EAAKnZ,YAAuC7a,IAAhBg0B,EAAKpZ,OAAsB,CAKvD,GAJM6kB,aAAmBif,KACrB1qB,EAAKnZ,MAAQmZ,EAAKnZ,OAAS,GAC3BmZ,EAAKpZ,OAASoZ,EAAKpZ,QAAU,IAE7B6kB,EAAQ6e,WAAWzjC,OAAS4kB,EAAQ6e,WAAW1jC,OAC/C,OAAO6kB,EAAQ6e,WAGf7e,EAAQ6kM,QAAQ,IAAIhwM,IACpBN,EAAKnZ,MAAQmZ,EAAKnZ,OAAS4kB,EAAQ+9B,YAAY3iD,MAC/CmZ,EAAKpZ,OAASoZ,EAAKpZ,QAAU6kB,EAAQ+9B,YAAY5iD,YAE/B5a,IAAlBoF,EAAKq+B,WACLzP,EAAKnZ,MAAQ3J,KAAK8T,IAAIgP,EAAKnZ,MAAOzV,EAAKq+B,gBAEpBzjC,IAAnBoF,EAAKqsD,YACLz9B,EAAKpZ,OAAS1J,KAAK8T,IAAIgP,EAAKpZ,OAAQxV,EAAKqsD,iBAEvBzxD,IAAlBoF,EAAKssD,WACL19B,EAAKnZ,MAAQ3J,KAAKC,IAAI6iB,EAAKnZ,MAAOzV,EAAKssD,gBAEpB1xD,IAAnBoF,EAAKosD,YACLx9B,EAAKpZ,OAAS1J,KAAKC,IAAI6iB,EAAKpZ,OAAQxV,EAAKosD,YAGjD,OAAOx9B,GAGXyqa,EAAav+b,UAAUqyZ,gBAAkB,SAAU9yX,EAASr6B,EAAMwtC,GAC9D,IAAI5U,EAAQ54B,EAAK44B,MAsBjB,GArBoB,UAAhBA,EAAMA,QACNyB,EAAU56B,KAAK85b,kBAAkBv5b,EAAM44B,EAAM78B,QAE7B,YAAhB68B,EAAMA,QACNyB,EAAU56B,KAAK+5b,oBAAoBx5b,IAEnB,eAAhB44B,EAAMA,QACNyB,EAAU56B,KAAKg6b,uBAAuBz5b,IAEtB,YAAhB44B,EAAMA,OAAuC,eAAhBA,EAAMA,QACnCyB,EAAU56B,KAAKi6b,cAAc15b,IAQb,aAAhB44B,EAAMA,QACNyB,EAAU56B,KAAKk6b,qBAAqB35b,IAGpC44B,EAAMi3B,YAAY3zD,OAAS,EAC3B,IAAK,IAAIN,EAAI,EAAGA,EAAIg9B,EAAMi3B,YAAY3zD,QAAU08B,EAAMi3B,YAAYj0D,GAAG2yB,KAAM3yB,IACvEy+B,EAAQxgB,SAAS5V,KAAKxE,KAAKm6b,sBAAsB55b,EAAMwtC,EAAS5U,EAAMi3B,YAAYj0D,GAAIy+B,IAI9F,OADAA,EAAQl2B,MAAMinD,gBAAkB,UACzB/wB,GAGXg/Z,EAAav+b,UAAU4+b,cAAgB,SAAU15b,GAC7C,IAAI65b,EAAY,IAAIvgZ,GAEpB75C,KAAK+kQ,SAASq1L,EAAW75b,GAC2B,IAA/CA,EAAK49C,YAAcG,GAAgBe,UACpC+6Y,EAAUrmY,OAASxzD,EAAKwzD,QAE5B,IAAIsmY,EAAgBt/X,GAAqBx6D,EAAK44B,MAAMA,OAOpD,OANAiha,EAAU59b,KAAO69b,EACjBD,EAAU92b,GAAK/C,EAAK+C,GAAK,IAAM/C,EAAK44B,MAAMA,WACvBh+B,IAAfoF,EAAKyV,YAAuC7a,IAAhBoF,EAAKwV,SACjCqkb,EAAUpkb,MAAQzV,EAAKyV,MACvBokb,EAAUrkb,OAASxV,EAAKwV,QAErBqkb,GAkBXR,EAAav+b,UAAU0+b,oBAAsB,SAAUx5b,GACnD,IAAI+5b,EAAe,IAAI/1C,GAEnBg2C,EAAc,IAAI1gZ,GACtB0gZ,EAAYj3b,GAAK/C,EAAK+C,GAAK,aAC3Bi3b,EAAY1ub,QAAUtL,EAAKsL,QAC3B0ub,EAAYtub,QAAU1L,EAAK0L,QAC3Bsub,EAAY/9b,KAAO,0CACnBwD,KAAK+kQ,SAASw1L,EAAah6b,GAE3B,IAAIi6b,EAAkB,IAAI3gZ,GAC1B2gZ,EAAgBl3b,GAAK/C,EAAK+C,GAAK,iBAE/Bk3b,EAAgB91b,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAC3C+sb,EAAgB1tY,oBAAsB,SACtC0tY,EAAgBztY,kBAAoB,SACpCytY,EAAgBxzY,aAAe,SAC/B,IACIyzY,EADAC,EAAYn6b,EAAK44B,MAAMwha,QAE3BF,EAA2Bt/X,GAA4Bu/X,EAAUh0b,MAC1C,eAAnBg0b,EAAUh0b,MAA4C,wBAAnBg0b,EAAUh0b,MAAqD,uBAAnBg0b,EAAUh0b,KACzF8zb,EAAgB91b,MAAM05B,KAAO,QAG7Bo8Z,EAAgB91b,MAAM05B,KAAO,QAEjCo8Z,EAAgBh+b,KAAOi+b,EAEvBH,EAAa51b,MAAM05B,KAAO,cAC1Bk8Z,EAAa51b,MAAMgnD,YAAc,cACjC4uY,EAAa51b,MAAMknD,YAAc,EACjC0uY,EAAalgb,UAAYmgb,EAAaC,GACtC,IAAIrra,EAAOnvB,KAAK2gB,QAAQpgB,EAAMg6b,GAE9B,OADAv6b,KAAK46b,sBAAsBr6b,EAAK44B,MAAMwha,QAASL,EAAcnra,EAAKnZ,MAAOmZ,EAAKpZ,QACvEukb,GAGXV,EAAav+b,UAAU2+b,uBAAyB,SAAUz5b,GACtD,IAAIs6b,EAAkB,IAAIt2C,GACtBprX,EAAQ54B,EAAK44B,MAAM2ha,WAEnBC,EAAc,IAAIlhZ,GACtBkhZ,EAAYz3b,GAAK/C,EAAK+C,GAAK,aAC3By3b,EAAYv+b,KAAO,iGACnB,IAAI2yB,EAAOnvB,KAAK2gB,QAAQpgB,EAAMw6b,GAC9BA,EAAY/kb,MAAQmZ,EAAKnZ,MACzB+kb,EAAYhlb,OAASoZ,EAAKpZ,OAC1B/V,KAAK+kQ,SAASg2L,EAAax6b,GAE3B,IAAIy6b,EAAkB,IAAInhZ,GAC1BmhZ,EAAgB13b,GAAK/C,EAAK+C,GAAK,UAC/B03b,EAAgBhlb,MAAQ,GACxBglb,EAAgBjlb,OAAS,GACzBilb,EAAgB/9Z,OAAOzwB,KAAO,EAC9Bwub,EAAgB/9Z,OAAOvwB,IAAM,EAC7Bsub,EAAgBx+b,KAAO,uDAEvBw+b,EAAgBt2b,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAE3C,IAAIwtb,EAAwB,IAAIphZ,GAYhC,OAXAohZ,EAAsB33b,GAAK/C,EAAK+C,GAAK,gBACrC23b,EAAsBjlb,MAAQ,IAC9Bilb,EAAsBllb,OAAS,GAC/Bklb,EAAsBv2b,MAAM05B,KAAO,QACnC68Z,EAAsBnka,SAAU,EAChCmka,EAAsBnuY,oBAAsB,SAC5CmuY,EAAsBluY,kBAAoB,SAC1CkuY,EAAsBj0Y,aAAe,SAErCi0Y,EAAsBv2b,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QACjDwtb,EAAsBz+b,KAAO,+FACrB28B,EAAMzyB,MACV,IAAK,OACDs0b,EAAgBlka,SAAU,EAC1B,MACJ,IAAK,QACDkka,EAAgBt2b,MAAM05B,KAAO,QAC7B,MACJ,IAAK,SACD48Z,EAAgBt2b,MAAM05B,KAAO,QAWrC,OARyB,IAArBjF,EAAM2O,aACNmzZ,EAAsBnka,SAAU,GAGpC+ja,EAAgBn2b,MAAM05B,KAAO,cAC7By8Z,EAAgBn2b,MAAMgnD,YAAc,cACpCmvY,EAAgBn2b,MAAMknD,YAAc,EACpCivY,EAAgBzgb,UAAY2gb,EAAaC,EAAiBC,GACnDJ,GAGXjB,EAAav+b,UAAU6/b,iBAAmB,SAAU36b,GAChD,IACI46b,EADQ56b,EAAK44B,MAAMy0X,SACNutC,KACbC,EAAa,IAAI72C,GAEjB82C,EAAW,IAAIjuY,GACnBiuY,EAAStyZ,aAAe,GACxB,IAAI5Z,EAAOnvB,KAAK2gB,QAAQpgB,EAAM86b,GAC9BA,EAAS/3b,GAAK/C,EAAK+C,GAAK,UACxB+3b,EAASrlb,MAAQmZ,EAAKnZ,MACtBqlb,EAAStlb,OAASoZ,EAAKpZ,OACvB/V,KAAK+kQ,SAASs2L,EAAU96b,QAELpF,IAAdggc,EAAK75b,OAAqC,IAAd65b,EAAK75b,OAClC+5b,EAAS32b,MAAMknD,YAAc,GAEjCwvY,EAAWplb,MAAQmZ,EAAKnZ,MACxBolb,EAAWrlb,OAASoZ,EAAKpZ,OACzB,IACIhJ,EADAuub,EAAat7b,KAAKu7b,kBAAkBh7b,GAEpCi7b,EAA0B,GAAbF,EACbpmV,EAAO/lF,EAAKnZ,MAAQ,EAAIwlb,EAExBzub,EADe,IAAfuub,EACIpmV,EAAO,EAGPA,EAA0B,GAAlBomV,EAAa,GAG7B,IACIG,EADAC,EAAe,IAAI7hZ,GAEL,YAAdshZ,EAAKz0b,MAAoC,SAAdy0b,EAAKz0b,MAChCg1b,EAAa1lb,MAAQ,GACrB0lb,EAAa3lb,OAAS,KAGtB2lb,EAAa1lb,MAAQ,GACrB0lb,EAAa3lb,OAAS,IAE1B2lb,EAAap4b,GAAK/C,EAAK+C,GAAK,eAC5Bo4b,EAAaz+Z,OAAOzwB,KAAO,EAC3Bkvb,EAAaz+Z,OAAOvwB,IAAM,EAC1B+ub,EAAmBpgY,GAAyB8/X,EAAKz0b,MACjDg1b,EAAal/b,KAAOi/b,EACpBC,EAAah3b,MAAM05B,KAAO,cAC1Bs9Z,EAAah3b,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAExC2tb,EAAW12b,MAAM05B,KAAO,cACxBg9Z,EAAW12b,MAAMgnD,YAAc,cAC/B0vY,EAAW12b,MAAMknD,YAAc,EAC/BwvY,EAAWhhb,UAAYihb,EAAUK,GAEjC,IAEIC,EAFAC,EAAWT,EAAKU,KAChBC,EAAe,IAAIjiZ,GAEvB8hZ,EAAiBpgY,GAAyBqgY,GAC1CE,EAAat/b,KAAOm/b,EACpBG,EAAap3b,MAAM05B,KAAO,QAEtB09Z,EAAahla,QADA,SAAb8ka,EAMe,IAAfN,IACAvub,EAAImoG,EAAO,GAEf4mV,EAAa7+Z,OAAOzwB,KAAOO,GACE,IAAzB+ub,EAAahla,UACb/pB,GAAK,IAET+ub,EAAa9lb,MAAQ,GACrB8lb,EAAa/lb,OAAS,GACtB+lb,EAAa7+Z,OAAOtwB,OAAS,EAC7Bmvb,EAAax4b,GAAK/C,EAAK+C,GAAK,UAC5Bw4b,EAAahvY,oBAAsB,OACnCgvY,EAAa/uY,kBAAoB,SACjC+uY,EAAa95C,6BAA6B,EAAG,EAAG,YAChD85C,EAAa90Y,aAAe,QAC5B80Y,EAAap3b,MAAM05B,KAAO,cAC1Bs9Z,EAAah3b,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QACxC2tb,EAAWhhb,SAAS5V,KAAKs3b,GAEzB,IAAIC,EAAe,IAAIliZ,GAcvB,OAbAkiZ,EAAe/7b,KAAKg8b,yBAAyBz7b,EAAMw7b,IACzB,IAAtBZ,EAAKc,aACLF,EAAajla,SAAU,EAGvBila,EAAajla,SAAU,EAER,IAAfwka,IACAvub,EAAImoG,EAAO,GAEf6mV,EAAa9+Z,OAAOzwB,KAAOO,EAAI,EAC/BA,GAAK,GACLqub,EAAWhhb,SAAS5V,KAAKu3b,GAClBX,GAGXxB,EAAav+b,UAAUy+b,kBAAoB,SAAUv5b,EAAM27b,EAAUC,EAAK74b,GACtE,IACIhH,EACAoqB,EACA1Q,EACAD,EAJAqmb,EAAa,IAAI73C,GAKrBjhZ,EAAKA,GAAM/C,EAAK+C,GAChB,IAAIwrZ,EAAW,qVAGXutC,EAAa97b,EAAK44B,MAAM78B,MAO5B,GANyB,UAArBiE,EAAK44B,MAAMA,QACX78B,EAAQ+/b,EAAW//b,MACnBoqB,EAAU21a,EAAW31a,SAEzB1Q,EAAQkmb,EAASlmb,MACjBD,EAASmmb,EAASnmb,OACdomb,EACAnmb,EAAQA,GAAS,GACjBD,EAASA,GAAU,QAElB,QAAuB5a,IAAnB+gc,EAASlmb,YAA2C7a,IAApB+gc,EAASnmb,OAAsB,CACpE,IAAIu9S,EAAc,IAAIz5Q,GACtBy5Q,EAAY92T,KAAOsyZ,EACnB,IAAI3/X,EAAOnvB,KAAK2gB,QAAQpgB,EAAM+yT,GAC9Bt9S,EAAQmZ,EAAKnZ,MACbD,EAASoZ,EAAKpZ,OAElB,IAAIumb,EAAgB/7b,EAAK44B,MAAMy0X,SAC/B,GAAyB,aAArBrtZ,EAAK44B,MAAMA,MAAsB,CAChBmja,EAAc3uC,WAC/BrxZ,EAAQ4/b,EAAS5/b,MACjBoqB,EAAUw1a,EAASx1a,QAGvB,IAAI61a,EAAe,IAAI1iZ,GACvB0iZ,EAAa//b,KAAOsyZ,EACpBytC,EAAaj5b,GAAKA,EAAK,WACvBi5b,EAAavmb,MAAQA,EACrBumb,EAAaxmb,OAASA,EACtBwmb,EAAazvY,oBAAsB,SACnCyvY,EAAaxvY,kBAAoB,SACjCwvY,EAAav1Y,aAAe,SAC5BhnD,KAAK+kQ,SAASw3L,EAAch8b,GAE5B,IAAIi8b,EAAe,IAAI3iZ,GACvB2iZ,EAAahgc,KAAOsyZ,EACpB0tC,EAAal5b,GAAKA,EAAK,WACvBk5b,EAAa93b,MAAMwnD,SAAW3rD,EAAKmE,MAAMwnD,SACzCswY,EAAa1vY,oBAAsB,SACnC0vY,EAAazvY,kBAAoB,SACjCyvY,EAAax1Y,aAAe,SAE5Bw1Y,EAAa93b,MAAMgnD,YAAcnrD,EAAKmE,MAAMgnD,YAC5C8wY,EAAa93b,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAExC,IAAIgvb,EAAc,IAAI5iZ,GAClB6iZ,EAAkBzhY,GAA4Bv0C,GASlD,OARA+1a,EAAYjgc,KAAOkgc,EACnBD,EAAYn5b,GAAKA,EAAK,aACtBm5b,EAAY3vY,oBAAsB,SAClC2vY,EAAY1vY,kBAAoB,SAChC0vY,EAAYz1Y,aAAe,SAE3By1Y,EAAY/3b,MAAMgnD,YAAcnrD,EAAKmE,MAAMgnD,YAC3C+wY,EAAY/3b,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAC/BnR,GACJ,IAAK,QACDkgc,EAAa1la,SAAU,EACvB,MACJ,IAAK,uBACDyla,EAAa73b,MAAMinD,gBAAkB,MACrC6wY,EAAa1la,SAAU,EACvB,MACJ,IAAK,eACDyla,EAAa73b,MAAM05B,KAAO,QAC1Bm+Z,EAAa73b,MAAMwnD,SAAW,KAC9B,MACJ,IAAK,8BACDqwY,EAAa73b,MAAM05B,KAAO,QAC1Bm+Z,EAAa73b,MAAMwnD,SAAW,KAC9BqwY,EAAa73b,MAAMinD,gBAAkB,MACrC6wY,EAAa93b,MAAMinD,gBAAkB,MACrC,MACJ,IAAK,uBACL,IAAK,MACD4wY,EAAa73b,MAAM05B,KAAiB,QAAV9hC,EAAkB,QAAU,QACtDigc,EAAa73b,MAAMwnD,SAAW,KAC9BuwY,EAAY/3b,MAAM05B,KAAO,QACzBq+Z,EAAY/3b,MAAMgnD,YAAcnrD,EAAKmE,MAAM05B,KASnD,OALAg+Z,EAAW13b,MAAM05B,KAAO,cACxBg+Z,EAAW13b,MAAMgnD,YAAc,cAC/B0wY,EAAW13b,MAAMknD,YAAc,EAC/BwwY,EAAWhib,UAAYmib,EAAcC,EAAcC,GACnDz8b,KAAK28b,qBAAqBN,EAAYD,EAAYpmb,EAAOD,GAClDqmb,GAEXxC,EAAav+b,UAAUuhc,mBAAqB,SAAUr8b,EAAMyoY,GACxD,IAAI1sY,EAAQiE,EAAK44B,MAAM78B,MAAMA,MACzBigc,EAAevzD,EAAO,GACtBwzD,EAAexzD,EAAO,GACRA,EAAO,GACzB,OAAQ1sY,GACJ,IAAK,QACDkgc,EAAa1la,SAAU,EACvB,MACJ,IAAK,uBACDyla,EAAa73b,MAAMinD,gBAAkB,MACrC6wY,EAAa1la,SAAU,IAInC8ia,EAAav+b,UAAUwhc,wBAA0B,SAAUt8b,GACvD,GAAIA,EAAK44B,MAAMy0X,SAASD,WAAY,CAChC,IAAIA,EAAaptZ,EAAK44B,MAAMy0X,SAASD,WACjCmvC,EAAcnvC,EAAWhkZ,OAAOlN,OAChCwV,EAAiD,gBAAxC1R,EAAK44B,MAAMy0X,SAASD,WAAWjnZ,KAA0B,EAAI,EACtEq2b,EAAiBx8b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GAOvD,IANyB,IAArBuzY,EAAWqvC,QACXD,EAAe3ib,SAAS,EAAInI,EAAQ6qb,GAAahma,SAAU,IAE/B,IAA5B62X,EAAWsuC,eACXc,EAAe3ib,SAAS,EAAInI,EAAQ6qb,GAAahma,SAAU,GAE3Dgma,EAAc,EACd,IAAK,IAAI3gc,EAAI,EAAGA,EAAI2gc,EAAa3gc,IAC7B6D,KAAK48b,mBAAmBr8b,EAAMw8b,EAAe3ib,SAAS,EAAIje,GAAGie,YAM7Ew/a,EAAav+b,UAAU4hc,uBAAyB,SAAU18b,GACtD,IAEIoJ,EACArN,EAOAyQ,EAVAmwb,EAAmB,IAAI34C,GAIvB44C,EAAkB,IAAItjZ,GAEtBujZ,GADyB,IAAI74C,GACN,IAAI1qW,IAC3B1gB,EAAQ54B,EAAK44B,MAAMy0X,SACnBD,EAAax0X,EAAMw0X,WACnB0vC,EAAgBr9b,KAAKs9b,wBAAwB/8b,GAE7Cg9b,EAAiB,IAAInwY,GACzBmwY,EAAej6b,GAAK/C,EAAK+C,GAAK,gBAC9Bi6b,EAAe74b,MAAM05B,KAAO,cAC5Bm/Z,EAAex0Z,aAAe,GAC9B,IAAI5Z,EAAOnvB,KAAK2gB,QAAQpgB,EAAMg9b,GAC9BA,EAAevnb,MAAQmZ,EAAKnZ,MAC5Bunb,EAAexnb,OAASoZ,EAAKpZ,OAC7Bmnb,EAAiB9ib,UAAYmjb,GACC,gBAA1Bpka,EAAMw0X,WAAWjnZ,MACjB1G,KAAKw9b,6BAA6Bj9b,EAAMA,EAAK44B,MAAO+ja,GAExD,IAEI1B,EADgB,GACH6B,EACbnoV,EAAO/lF,EAAKnZ,MAAQ,EAEpBjJ,EADkB,IAAlBswb,EACInoV,IAGAA,EAAQsmV,EAAa,EARb,GAQoB6B,EAAgB,GAAkB,EAGtEr9b,KAAK+kQ,SAASw4L,EAAgBh9b,GACsB,IAA/CA,EAAK49C,YAAcG,GAAgBe,UACpC69Y,EAAiBnpY,OAASxzD,EAAKwzD,QAEnC,IAAI0pY,EAAiB,IAAI5jZ,GAsBzB,GArBA4jZ,EAAen6b,GAAK/C,EAAK+C,GAAK,eAC9Bm6b,EAAeznb,MAAQ,GACvBynb,EAAe1nb,OAAS,GACxB0nb,EAAe/4b,MAAM05B,KAAO,QAC5Bq/Z,EAAexga,OAAOtwB,OAAS,EAC/B8wb,EAAe3wY,oBAAsB,OACrC2wY,EAAe1wY,kBAAoB,SACnC0wY,EAAez7C,6BAA6B,EAAG,EAAG,YAClDy7C,EAAez2Y,aAAe,QAC9By2Y,EAAejhc,KAAOu+D,GAAqB,kBAC3C0iY,EAAexga,OAAOzwB,KAAOO,GACA,IAAzB4gZ,EAAWI,WAAuBJ,EAAWE,UAI7C4vC,EAAe3ma,SAAU,EAHzB2ma,EAAe3ma,SAAU,GAKE,IAA3B2ma,EAAe3ma,UACf/pB,GAAK,IAETmwb,EAAiB9ib,SAAS5V,KAAKi5b,GACP,UAApB9vC,EAAWjnZ,KAAkB,CAC7B62b,EAAe74b,MAAMknD,YAAc,EACnC2xY,EAAe74b,MAAMinD,gBAAkB,MACvChiD,EAASgkZ,EAAWhkZ,OACpB,IAAK,IAAIxN,EAAI,EAAGA,EAAIwN,EAAOlN,OAAQN,IAC/BG,EAAQqN,EAAOxN,GACf6D,KAAK09b,gBAAgBphc,EAAOiE,EAAM28b,GAI1CE,EAAuBp9b,KAAK29b,2BAA2Bp9b,GACjC,IAAlB88b,IACAtwb,EAAImoG,EAAO,GAEfkoV,EAAqBnga,OAAOzwB,KAAOO,GACE,IAAjCqwb,EAAqBtma,UACrB/pB,GAAK6wb,IAETV,EAAiB9ib,SAAS5V,KAAK44b,GAE/BG,EAAej6b,GAAK/C,EAAK+C,GAAK,YACF,YAAxBqqZ,EAAWkwC,WACXN,EAAe74b,MAAMknD,YAAc,EACnC2xY,EAAe74b,MAAMinD,gBAAkB,OAEf,SAAxBgiW,EAAWkwC,WACXN,EAAe74b,MAAMknD,YAAc,EACnC2xY,EAAe74b,MAAMinD,gBAAkB,OAEf,UAAxBgiW,EAAWkwC,WACXN,EAAe74b,MAAMknD,YAAc,EACnC2xY,EAAe74b,MAAMinD,gBAAkB,OAG3CwxY,EAAkBn9b,KAAK89b,kBAAkBv9b,EAAM48b,EAAiBxvC,GAC1C,IAAlB0vC,IACAtwb,EAAImoG,EAAO,GAEfioV,EAAgBlga,OAAOzwB,KAAOO,GACE,IAA5Bowb,EAAgBrma,UAChB/pB,GAAK6wb,IAETV,EAAiB9ib,SAAS5V,KAAK24b,GAE/B,IAAIY,EAAiB,IAAIlkZ,GAoBzB,OAnBgC,IAA5B8zW,EAAWsuC,aACX8B,EAAejna,SAAU,EAGzBina,EAAejna,SAAU,EAE7Bina,EAAiB/9b,KAAKg8b,yBAAyBz7b,EAAMw9b,GAC/B,IAAlBV,IACAtwb,EAAImoG,EAAO,GAEf6oV,EAAe9ga,OAAOzwB,KAAOO,GACE,IAA3Bgxb,EAAejna,UACf/pB,GAAK6wb,IAETV,EAAiB9ib,SAAS5V,KAAKu5b,GAE/Bb,EAAiBx4b,MAAMgnD,YAAc,cACrCwxY,EAAiBx4b,MAAMknD,YAAc,EACrCsxY,EAAiBx4b,MAAM05B,KAAO,cACvB8+Z,GAEXtD,EAAav+b,UAAUqic,gBAAkB,SAAUphc,EAAOiE,EAAMqa,EAAWtX,GACvEsX,EAAUR,SAAWQ,EAAUR,aAC/B,IAAI4jb,EACJA,EAAiBh+b,KAAK85b,kBAAkBv5b,EAAMjE,GAAO,EAAMgH,GAC3DtD,KAAKi+b,uBAAuB19b,EAAMy9b,EAAgB1hc,GAClD0hc,EAAe16b,GAAKA,GAAO/C,EAAK+C,GAAK,oBACrC06b,EAAehob,MAAQ1Z,EAAM0Z,OAAS,GACtCgob,EAAejob,OAASzZ,EAAMyZ,QAAU,GAExCiob,EAAeh8C,6BAA6B1lZ,EAAMqP,OAAOoB,EAAGzQ,EAAMqP,OAAOqB,EAAG,YAC5Egxb,EAAeh3Y,aAAe,QAE9Bg3Y,EAAe/ga,OAAS3gC,EAAM2gC,OAE9B+ga,EAAelxY,oBAAsBxwD,EAAMwwD,oBAC3CkxY,EAAejxY,kBAAoBzwD,EAAMywD,kBAEzCixY,EAAet5b,MAAM05B,KAAO,cAC5B4/Z,EAAet5b,MAAMgnD,YAAc,cACnCsyY,EAAet5b,MAAMknD,YAAc,EACnChxC,EAAUR,SAAS5V,KAAKw5b,IAE5BpE,EAAav+b,UAAUmic,6BAA+B,SAAUj9b,EAAM44B,EAAOve,GACzE,IAAI2oE,EAAa3oE,EAAUR,SAAS,GAAGpE,MACnCwtE,EAAc5oE,EAAUR,SAAS,GAAGrE,OACpCmob,EAAY,IAAI9wY,GACpB8wY,EAAUjha,QAAWzwB,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GACxDuxb,EAAU56b,GAAK/C,EAAK+C,GAAK,2BACzB46b,EAAUn1Z,aAAe,GACzBm1Z,EAAUlob,MAAQutE,EAAa,EAC/B26W,EAAUnob,OAASytE,EAAc,EACjC5oE,EAAUR,SAAS5V,KAAK05b,GACxB,IAAIC,EAAoB,IAAI55C,GAC5B45C,EAAkB76b,GAAK/C,EAAK+C,GAAK,sBACjC66b,EAAkBz5b,MAAMwnD,SAAW3rD,EAAKmE,MAAMwnD,SAC9C,IAAIwjX,EAAcv2Y,EAAMy0X,SAASD,WAAW+hB,YAC5C1va,KAAK09b,gBAAgBhuB,EAAY1jL,QAASzrP,EAAM49b,EAAmB59b,EAAK+C,GAAK,YAC7EtD,KAAK09b,gBAAgBhuB,EAAYr3Y,OAAQ93B,EAAM49b,EAAmB59b,EAAK+C,GAAK,WAC5EtD,KAAK09b,gBAAgBhuB,EAAYC,QAASpva,EAAM49b,EAAmB59b,EAAK+C,GAAK,YAC7EtD,KAAKoub,iCAAiC+P,EAAkB/jb,SAAS,GAAIs1Z,EAAY1jL,QAAQl1N,SACzF92B,KAAKoub,iCAAiC+P,EAAkB/jb,SAAS,GAAIs1Z,EAAYr3Y,OAAOvB,SACxF92B,KAAKoub,iCAAiC+P,EAAkB/jb,SAAS,GAAIs1Z,EAAYC,QAAQ74Y,SACzFqna,EAAkBr8C,OAAQ,EAC1Bq8C,EAAkBnob,MAAQutE,EAC1B46W,EAAkBpob,OAASytE,EAC3B26W,EAAkBz5b,MAAM05B,KAAO+/Z,EAAkBz5b,MAAMgnD,YAAc,cACrE9wC,EAAUR,SAAS5V,KAAK25b,IAG5BvE,EAAav+b,UAAUsic,2BAA6B,SAAUp9b,GAC1D,IACIq7b,EAEAwC,EAHAjla,EAAQ54B,EAAK44B,MAAMy0X,SAEnBywC,EAAiB,IAAIxkZ,GAsBzB,OAnBA+hZ,EADiBzia,EAAMw0X,WACDkuC,KACtBuC,EAAqB7iY,GAAyBqgY,GAE1CyC,EAAevna,QADF,SAAb8ka,EAMJyC,EAAe/6b,GAAK/C,EAAK+C,GAAK,QAC9B+6b,EAAe7hc,KAAO4hc,EACtBC,EAAe35b,MAAM05B,KAAO,QAC5Biga,EAAerob,MAAQ,GACvBqob,EAAetob,OAAS,GACxBsob,EAAevxY,oBAAsB,OACrCuxY,EAAetxY,kBAAoB,SACnCsxY,EAAer8C,6BAA6B,EAAG,EAAG,YAClDq8C,EAAer3Y,aAAe,QAC9Bq3Y,EAAepha,OAAOtwB,OAAS,EAC/B0xb,EAAe35b,MAAM05B,KAAO,cACrBiga,GAGXzE,EAAav+b,UAAUi3G,KAAO,SAAUv1G,EAAK+0T,EAAID,EAAI9jR,GACjD,IAAIxtC,EAAOwtC,EAAQ2sB,UAAU,EAAMyyV,WAC/BpwZ,EAAIkgC,OAAOvwB,IAAMmlT,GAAM,GACvB9jR,EAAQipY,mBAAmBj6a,MAAWkgC,QAAUvwB,IAAK3P,EAAIkgC,OAAOvwB,IAAMmlT,KAEtE90T,EAAIkgC,OAAOzwB,KAAOslT,GAAM,GACxB/jR,EAAQipY,mBAAmBj6a,MAAWkgC,QAAUzwB,KAAMzP,EAAIkgC,OAAOzwB,KAAOslT,KAE5E,IAEI7qQ,EAAQjnD,KAAKm4a,iBAAiB53a,EAAMxD,EAAIuG,GAAIyqC,GAChD/tC,KAAKo4a,oBAAoBnxX,EAAOlqD,EAAKgxC,GACrCxtC,EAAKwR,QAAQ0tN,QAAQ,IAAIhwM,QAAKt0B,OAAWA,IACzCoF,EAAKwR,QAAQowY,QAAQ5hZ,EAAKwR,QAAQ4mD,aAClC5qB,EAAQynY,sBACRznY,EAAQkxX,iBACRj/Z,KAAKkmb,YAAYnpb,EAAKgxC,IAG1B6rZ,EAAav+b,UAAU4+a,cAAgB,SAAU9ya,EAAQ5K,EAAQwxC,GAC7D,GAAIxxC,GAAgC,SAAtBA,EAAO48B,MAAMzyB,KAAiB,CACxC,IAAIinZ,EAAa5/W,EAAQ2sB,UAAUvzD,EAAO7D,IAAI61B,MAAMy0X,SAASD,WAC7D,GAAI5/W,EAAQgrB,eAAuC,SAAtB5xD,EAAOgyB,MAAMzyB,OAAoBinZ,EAAWI,UAErE,YADAxxZ,EAAO4wZ,UAAYhmZ,EAAO7D,IAI9B,GADAqqZ,EAAWE,UAAYF,EAAWE,cAC9BF,EAAWE,YAA0D,IAA7CF,EAAWE,UAAUtvZ,QAAQhC,EAAO+G,MAAeqqZ,EAAWI,UAAW,CACjGJ,EAAWE,UAAUrpZ,KAAKjI,EAAO+G,IACjC,IAAIg7b,EAAc/1Y,GAAYhsD,GAC1Bgic,EAAUxwZ,EAAQ2sB,UAAUn+D,EAAO+G,IAAIyO,QACvCy9B,EAAgBzB,EAAQ2sB,UAAUvzD,EAAO7D,IAAIyO,QACjDwsb,EAAQtha,OAAOvwB,IAAO6xb,EAAQtyb,QAAWsyb,EAAQ9kZ,WAAW1jC,OAAS,GAC9D5O,EAAO8E,QAAW9E,EAAOsyC,WAAW1jC,OAAS,GACpDwob,EAAQtha,OAAOzwB,KAAQ+xb,EAAQ1yb,QAAW0yb,EAAQ9kZ,WAAWzjC,MAAQ,GAC9D7O,EAAO0E,QAAW1E,EAAOsyC,WAAWzjC,MAAQ,GACnDuob,EAAQtha,OAAOvwB,IAAO6xb,EAAQtha,OAAOvwB,IAAM,EAAK,EAAI6xb,EAAQtha,OAAOvwB,IACnE6xb,EAAQtha,OAAOzwB,KAAQ+xb,EAAQtha,OAAOzwB,KAAO,EAAK,EAAI+xb,EAAQtha,OAAOzwB,KACrEuhC,EAAQ2sB,UAAUn+D,EAAO+G,IAAI6pZ,UAAYhmZ,EAAO7D,GAChDksC,EAAcp1B,SAAS5V,KAAKupC,EAAQ2sB,UAAUn+D,EAAO+G,IAAIyO,SACzD,IAAIk1C,EAAQjnD,KAAKm4a,iBAAiBhxa,EAAQ5K,EAAO+G,GAAIyqC,GACrD/tC,KAAKo4a,oBAAoBnxX,EAAO1qD,EAAQwxC,GACxCyB,EAAciwL,QAAQ,IAAIhwM,QAAKt0B,OAAWA,IAC1Cq0C,EAAc2yW,QAAQ3yW,EAAcmpB,aACpC5qB,EAAQynY,sBACRznY,EAAQkxX,iBAGR,IAAK,IAFDwT,KAEKt2a,GADTs2a,EAAQA,EAAMj4Z,OAAOje,EAAO6wZ,SAAU7wZ,EAAO8wZ,UAC1B5wZ,OAAS,EAAGN,GAAK,EAAGA,IACnC4xC,EAAQxpC,OAAOwpC,EAAQ2sB,UAAU+3W,EAAMt2a,KAE3C,IACIgja,GACAz4Z,KAAM,kBAAmB24Z,YAAc30W,OAAQ4zY,IAC/Cl/B,YAAc10W,OAHRnC,GAAYhsD,KAGY4uM,SAAU,YAE5Cp9J,EAAQuxX,gBAAgBH,GACH,QAAjBpxX,EAAQxP,MACJhiC,EAAOynE,OAAS78D,EAAO68D,QACvBj2B,EAAQq4Y,gBAAgB7pb,GAGhCyD,KAAKkmb,YAAY3pb,EAAQwxC,MAKrC6rZ,EAAav+b,UAAU6qb,YAAc,SAAUnpb,EAAKgxC,GAChD,GAAuB,SAAnBhxC,EAAIo8B,MAAMzyB,MAAmB3J,EAAIo8B,MAAMy0X,SAASD,WAAWE,YAC1D9wZ,EAAIo8B,MAAMy0X,SAASD,WAAWI,UAE/B,IAAK,IAAI3vZ,EAAK,EAAGogc,EADEzhc,EAAIo8B,MAAMy0X,SAASD,WAAWE,UACDzvZ,EAAKogc,EAAe/hc,OAAQ2B,IAAM,CAC9E,IAAIjC,EAAIqic,EAAepgc,GACnBsuD,EAAe3e,EAAQ2sB,UAAUv+D,GACjCuwD,IACA3e,EAAQyjZ,qBAAqB9kY,GAC7BA,EAAa36C,QAAQ0tN,QAAQ,IAAIhwM,GAAKi9B,EAAa36C,QAAQiE,MAAO02C,EAAa36C,QAAQgE,SACvF22C,EAAa36C,QAAQowY,QAAQz1V,EAAa36C,QAAQ4mD,aAC9CjM,EAAavzB,MAAMy0X,SAASD,WAAWE,WACpCnhW,EAAavzB,MAAMy0X,SAASD,WAAWE,UAAUpxZ,QACpDuD,KAAKkmb,YAAYx5X,EAAc3e,MAOnD6rZ,EAAav+b,UAAU8rb,oBAAsB,SAAUP,EAAY74Y,GAC/D,IAAI/sC,EAAU+sC,EAAQ2sB,UAAUksX,EAAWz5B,WAC3C,GAA8B,SAA1By5B,EAAWztZ,MAAMzyB,MAAmBkgb,EAAWztZ,MAAMy0X,SAASD,WAAWE,WACzE+4B,EAAWztZ,MAAMy0X,SAASD,WAAWE,UAAUpxZ,OAAS,EAExD,IAAK,IAAIgnB,GADLoqY,EAAY+4B,EAAWztZ,MAAMy0X,SAASD,WAAWE,WAC9BpxZ,OAAS,EAAGgnB,GAAK,EAAGA,IACvCsqB,EAAQxpC,OAAOwpC,EAAQ2sB,UAAUmzV,EAAUpqY,KAGnD,GAAIziB,EAAS,CACT+sC,EAAQ04Y,yBAAyBG,GACjC,IAAI/4B,EAAY7sZ,EAAQm4B,MAAMy0X,SAASD,WAAWE,UAClD7tZ,KAAKw5a,oBAAoBx4a,EAAQ+Q,QAAS60a,EAAWtjb,IACrD,IAAIm7b,EAAe5wC,EAAUtvZ,QAAQqob,EAAWtjb,IAChDuqZ,EAAUplY,OAAOg2a,EAAc,KAIvC7E,EAAav+b,UAAUm+a,oBAAsB,SAAUzna,EAASglB,GAC5D,IAAK,IAAI34B,EAAK,EAAGyE,EAAKkP,EAAQqI,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC1D,IAAIjC,EAAI0G,EAAGzE,GACPjC,EAAEmH,KAAOyzB,EACThlB,EAAQqI,SAASqO,OAAO1W,EAAQqI,SAAS7b,QAAQpC,GAAI,GAEhDA,EAAEie,UACPpa,KAAKw5a,oBAAoBr9a,EAAG46B,KAKxC6ia,EAAav+b,UAAUqpb,cAAgB,SAAUphb,EAAIyqC,GACjD,IAAIxtC,EAAOwtC,EAAQ2sB,UAAUp3D,GAC7B,GAAI/C,EAAM,CACN,IAAIq0G,EAAW7mE,EAAQ2sB,UAAUn6D,EAAK4sZ,WACtC,GAAIv4S,GAAoC,SAAxBA,EAASz7E,MAAMzyB,KAAiB,CAC5C,IAAImnZ,EAAYj5S,EAASz7E,MAAMy0X,SAASD,WAAWE,UACnD9/W,EAAQ04Y,yBAAyBlmb,GACjCP,KAAKw5a,oBAAoB5kU,EAAS7iG,QAASzO,GAC3C,IAAIm7b,EAAe5wC,EAAUtvZ,QAAQ+E,GACrCuqZ,EAAUplY,OAAOg2a,EAAc,GAC/Bl+b,EAAK4sZ,UAAY,GACjBp/W,EAAQsiY,sBACRtiY,EAAQkxX,oBAKpB26B,EAAav+b,UAAU63a,WAAa,SAAUz+V,EAAS9Z,EAAU5sB,GAC7D,IAAIzqC,EACJmxE,EAAQnxE,GAAKmxE,EAAQnxE,IAAMqzD,KAC3BrzD,EAAKmxE,EAAQnxE,GACb,IAAI/C,EAAOwtC,EAAQ2sB,UAAUp3D,GACxB/C,GACDwtC,EAAQ3pC,IAAIqwE,GAEhBA,EAAQ04U,UAAYxyV,EACpB,IAAIl6D,EAAastC,EAAQ2sB,UAAUC,GAC/BgzV,EAAaltZ,EAAW04B,MAAMy0X,SAASD,WAC3C,GAAIptZ,GAAQE,GAAwC,SAA1BA,EAAW04B,MAAMzyB,MAAuC,SAApBnG,EAAK44B,MAAMzyB,MACrEinZ,EAAWE,YAAcF,EAAWI,UAAW,CAC/CxtZ,EAAK4sZ,UAAYxyV,EACjB,IAAIkzV,EAAYptZ,EAAW04B,MAAMy0X,SAASD,WAAWE,UASrD,GARIA,EAAUtvZ,QAAQ+E,GAAM,GACxBuqZ,EAAUrpZ,KAAKlB,GAEnB7C,EAAWsR,QAAQqI,SAAS5V,KAAKjE,EAAKwR,SACtCtR,EAAWsR,QAAQ0tN,QAAQ,IAAIhwM,IAC/BhvB,EAAWsR,QAAQowY,QAAQ1hZ,EAAWsR,QAAQ4mD,aAC9C5qB,EAAQ0/W,WAAWy4B,YAAYzlb,EAAYstC,GAC3CA,EAAQsiY,sBACa,QAAjBtiY,EAAQxP,MAAmBh+B,EAAK44B,OAAS54B,EAAK44B,MAAMy0X,WAChDrtZ,EAAK44B,MAAMy0X,SAASD,WAAWE,UAAY,CACnCr5V,GAAkBmG,EAAW,iBACnCh5D,YAAY6yD,GAAkBigB,EAAQnxE,GAAK,qBAK7Ds2b,EAAav+b,UAAU88a,iBAAmB,SAAU53a,EAAMm+b,EAAc3wZ,GACpE,IACIkZ,EADA4mW,EAAYttZ,EAAK44B,MAAMy0X,SAASD,WAAWE,UAE/C,GAAIA,GAAaA,EAAUpxZ,OACvB,IAAK,IAAI2B,EAAK,EAAGqza,EAAc5jB,EAAWzvZ,EAAKqza,EAAYh1a,OAAQ2B,IAAM,CACrE,IAAIjC,EAAIs1a,EAAYrza,GAChBsgc,IAAiBvic,IAKb8qD,EAJCA,EAIOlZ,EAAQ2sB,UAAUv+D,GAAG4V,QAAQgkB,OAAOknB,UAAUgK,GAH9ClZ,EAAQ2sB,UAAUv+D,GAAG4V,QAAQgkB,QAQrD,OAAOkxB,GAASlZ,EAAQ2sB,UAAUgkY,GAAc3sb,QAAQgkB,QAG5D6ja,EAAav+b,UAAU+8a,oBAAsB,SAAUnxX,EAAOlqD,EAAKgxC,GAC/D,IAAImG,EACAR,EAEAjnC,EACAE,EAFApM,EAAOwtC,EAAQ2sB,UAAU39D,EAAIowZ,WAG7B99V,GAAUtiD,EAAG,GAAKC,EAAG,IACpBzM,EAAKwR,QAAQgkB,OAAOvpB,KAAOzP,EAAIkgC,OAAOzwB,KAAOzP,EAAIiZ,MAAUzV,EAAKwR,QAAQgkB,OAAY,QACrFtpB,GAAQ,GAEPlM,EAAKwR,QAAQgkB,OAAOrpB,IAAM3P,EAAIkgC,OAAOvwB,IAAM3P,EAAIgZ,OAAWxV,EAAKwR,QAAQgkB,OAAa,SACrFppB,GAAS,GAETF,IACA4iD,EAAMtiD,EAAI,GAEVJ,IACA0iD,EAAMriD,EAAI,GAEd,IAAIysC,EAAal5C,EAAKwR,QAAQ0nC,WAC1BhtC,IACAynC,GAASn3C,EAAIgV,QAAQkrB,OAAOzwB,KAAOzP,EAAIgV,QAAQgkB,OAAO/f,OAASyjC,EAAWzjC,OAE1ErJ,IACA+mC,GAAS32C,EAAIgV,QAAQkrB,OAAOvwB,IAAM3P,EAAIgV,QAAQgkB,OAAOhgB,QAAU0jC,EAAW1jC,SAE1Em+B,EAAQ,GAAKR,EAAQ,IACrB3F,EAAQsvX,eAAev5W,MAAM/V,EAAQ2sB,UAAU39D,EAAIowZ,WAAYj5W,GAAS,EAAGR,GAAS,EAAG2b,IAI/FuqY,EAAav+b,UAAU2gc,yBAA2B,SAAUz7b,EAAMo+b,GAe9D,OAdAA,EAAiBr7b,GAAK/C,EAAK+C,GAAK,kBAChCq7b,EAAiB3ob,MAAQ,GACzB2ob,EAAiB5ob,OAAS,GAC1B4ob,EAAiB1ha,OAAOtwB,OAAS,EACjCgyb,EAAiBj6b,MAAM05B,KAAO,cAC9Buga,EAAiB7xY,oBAAsB,OACvC6xY,EAAiB5xY,kBAAoB,SACrC4xY,EAAiB33Y,aAAe,SAChC23Y,EAAiBnic,KAAO,8iBAMjBmic,GAGX/E,EAAav+b,UAAU6+b,qBAAuB,SAAU35b,GACpD,IACIq6B,EADAwha,EAAa,IAAI73C,GAEjBprX,EAAQ54B,EAAK44B,MAAMy0X,SACnButC,EAAOhia,EAAMy0X,SACbD,EAAax0X,EAAMw0X,WACJx0X,EAAMy0X,SAWzB,MAVa,SAATutC,IACAvga,EAAU56B,KAAKk7b,iBAAiB36b,IAEvB,eAAT46b,GAAyBxtC,IACzB/yX,EAAU56B,KAAKi9b,uBAAuB18b,IAE1C67b,EAAWhib,UAAYwgB,GACvBwha,EAAW13b,MAAM05B,KAAO,cACxBg+Z,EAAW13b,MAAMgnD,YAAc,cAC/B0wY,EAAW13b,MAAMknD,YAAc,EACxBwwY,GAGXxC,EAAav+b,UAAU4ic,uBAAyB,SAAU19b,EAAMq+b,EAAwBj1b,GACpF,IAAIymD,EACAE,EACJ,GAAkC,IAA9B3mD,EAAOymD,YAAY3zD,OACnB,IAAK,IAAIN,EAAI,EAAGA,EAAIwN,EAAOymD,YAAY3zD,OAAQN,IAAK,CAChD,IAAIo+O,EAAQ5wO,EAAOymD,YAAYj0D,IAC/Bi0D,EAAc7vD,EAAKquZ,sBAAsBr0K,IAC7BvkO,MAAQrM,EAAOqM,MAC3Bo6C,EAAYr6C,OAASpM,EAAOoM,OAC5B6ob,EAAuBxkb,SAAS5V,KAAK4rD,GAG7C,GAA4B,IAAxBzmD,EAAO2mD,MAAM7zD,OACb,IAASN,EAAI,EAAGA,EAAIwN,EAAO2mD,MAAM7zD,OAAQN,IAAK,CAC1C,IAAIo0C,EAAO5mC,EAAO2mD,MAAMn0D,GACxBm0D,EAAQ/vD,EAAK6tZ,gBAAgB79W,GAC7BquZ,EAAuBxkb,SAAS5V,KAAK8rD,KAKjDspY,EAAav+b,UAAUyic,kBAAoB,SAAUv9b,EAAMs+b,EAAWlxC,GAkBlE,OAjBAkxC,EAAUv7b,GAAK/C,EAAK+C,GAAK,WACzBu7b,EAAU7ob,MAAQ,GAClB6ob,EAAU9ob,OAAS,EACnB8ob,EAAUn6b,MAAM05B,KAAO,QACvByga,EAAU5ha,OAAOtwB,OAAS,EAC1Bkyb,EAAU/xY,oBAAsB,OAChC+xY,EAAU9xY,kBAAoB,SAC9B8xY,EAAU73Y,aAAe,SACzB63Y,EAAUric,KAAO,mUAGbmxZ,IAAmC,IAArBA,EAAWqvC,MACzB6B,EAAU/na,SAAU,EAGpB+na,EAAU/na,SAAU,EAEjB+na,GAGXjF,EAAav+b,UAAU8+b,sBAAwB,SAAU55b,EAAMwtC,EAASsZ,EAAYzsB,GAChFysB,EAAW/jD,GAAK+jD,EAAW/jD,IAAMqzD,KACjC,IAAImoY,EAAsB,IAAIv6C,GAC1Bw6C,EAAiB,IAAIllZ,GACrBlkB,EAAc,IAAIw2B,GAEtB4yY,EAAez7b,GAAK/C,EAAK+C,GAAK,IAAM+jD,EAAW/jD,GAAK,QACpDy7b,EAAe/ob,MAAQqxC,EAAWrxC,MAClC+ob,EAAehpb,OAASsxC,EAAWtxC,OACnCgpb,EAAe/3Y,aAAe,SAC9BrxB,EAAYryB,GAAK/C,EAAK+C,GAAK,IAAM+jD,EAAW/jD,GAAK,QACjDqyB,EAAYiF,QAAUysB,EAAWv4B,KACjC,IAAIpqB,EAAQnE,EAAKmE,MACjBixB,EAAYjxB,OACRwqB,SAAUxqB,EAAMwqB,SAAU68B,OAAQrnD,EAAMqnD,OAAQG,SAAU,KAAMz+C,QAAS/I,EAAM+I,QAC/Eo+C,KAAMnnD,EAAMmnD,KAAMC,aAAcpnD,EAAMonD,aAAcj2B,MAAOnxB,EAAMmxB,MAAOuI,KAAM,QAC9E9O,WAAY5qB,EAAM4qB,WAAYC,WAAY7qB,EAAM6qB,WAAYqR,aAAc,OAC1E8qB,YAAa,OAAQE,YAAa,EAClCD,gBAAiBjnD,EAAMinD,gBAAiBK,UAAWtnD,EAAMsnD,UAAWC,eAAgBvnD,EAAMunD,gBAE9Ft2B,EAAYm3B,oBAAsB,SAClCn3B,EAAYo3B,kBAAoB,SAChCp3B,EAAYqxB,aAAe,SAC3BrxB,EAAYsH,QAAWzwB,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GAC1Dmyb,EAAoBjzb,QAAUtL,EAAKsL,QAAUw7C,EAAW5qD,OACpD4P,KAAKwV,IAAIwlC,EAAW1lC,OAAStV,KAAKkR,GAAK,MAC3Cuhb,EAAoB7yb,QAAU1L,EAAK0L,QAAUo7C,EAAW5qD,OACpD4P,KAAKyV,IAAIulC,EAAW1lC,OAAStV,KAAKkR,GAAK,MAC3Cuhb,EAAoBh9C,OAAQ,EAC5Bg9C,EAAoBzxb,UAAY6zY,GAAUM,KAC1Cs9C,EAAoBx7b,GAAK/C,EAAK+C,GAAK,mBAAqB+jD,EAAW/jD,GACnEw7b,EAAoBp6b,MAAMgnD,YAAc,cACxCozY,EAAoB7ha,QAAWzwB,KA3BlB,GA2BgCC,MA3BhC,GA2B+CC,IA3B/C,GA2B4DC,OA3B5D,IA4Bbmyb,EAAoB93Y,aAAe,SACnC83Y,EAAoBx4Y,YAAc,EAClCw4Y,EAAoB1kb,UAAY2kb,EAAgBppa,GAChD,IAAIqpa,EAAiB,IAAIz/Y,GAAKh/C,EAAK44B,MAAO,eAAiB71B,GAAIw7b,EAAoBx7b,GAAI61B,OAASzyB,KAAM,OAAQyyB,MAAO,oBAAsB,GAC3I6la,EAAe1uY,QAEPhtD,GAAIy7b,EAAez7b,GAAK,QAAS61B,MAAO,SACxCxtB,QAAUoB,EAAG,EAAGC,EAAG,MAG3Bgyb,EAAenzb,QAAUizb,EAAoBjzb,QAC7Cmzb,EAAe/yb,QAAU6yb,EAAoB7yb,QAC7C+yb,EAAejtb,QAAU+sb,EACzBA,EAAoB1kb,SAAS5V,KAAKw6b,EAAe5wC,gBAAgB4wC,EAAe1uY,MAAM,KACtF,IAAIv6B,EAAS,IAAIR,GAAK,EAAG,EAAG,EAAG,QACZp6B,IAAfoF,EAAKyV,YAAuC7a,IAAhBoF,EAAKwV,SACjCggB,EAAS,IAAIR,GAAKh1B,EAAKsL,QAAUtL,EAAKyV,MAAQ,EAAGzV,EAAK0L,QAAU1L,EAAKwV,OAAS,EAAGxV,EAAKyV,MAAOzV,EAAKwV,SAEtG/V,KAAKi/b,kBAAkBlpa,EAAQ+oa,GAAuB/xb,EAAGiyb,EAAenzb,QAASmB,EAAGgyb,EAAe/yb,SAAW+yb,EAAgB33Y,EAAW5qD,OAAQ4qD,EAAW1lC,OAC5J,IAAIo2B,GACAz0C,GAAI/C,EAAK+C,GAAK,IAAM+jD,EAAW/jD,GAAK,aACpC66C,YAAaC,GAAqB2tW,SAAW3tW,GAAqBW,cAClExP,SAAUhvC,EAAK+C,GAAIooZ,SAAUozC,EAAoBx7b,GACjD45C,iBAAmB/jB,MAAO,SAE1B+la,EAAsB,IAAIhhZ,GAAU39C,EAAK44B,MAAO,cAAe4e,GAAW,GAC9EmnZ,EAAoBvzC,aAAeqzC,EAAe1uY,MAAM,GAAGhtD,GAC3D47b,EAAoB72M,KAAKt6M,GACzBmxZ,EAAoBntb,QAAQ+vY,OAAQ,EACpCo9C,EAAoBntb,QAAQ1E,UAAY6zY,GAAUM,KAClD5mX,EAAQxgB,SAAS5V,KAAK06b,EAAoBntb,SAC1Cmtb,EAAoBl7X,OAAS,IAC7B,IAAIm7V,EAAQn/Z,KAAK65b,kBAAkBt5b,EAAK+C,IACnC67Z,IACDA,MAECA,EAAM93W,EAAW/jD,MAClB67Z,EAAM93W,EAAW/jD,QASrB,OALA67Z,EAAM93W,EAAW/jD,IAAW,KAAI07b,EAChC7/B,EAAM93W,EAAW/jD,IAAW,UAAI47b,EAChCl/b,KAAK65b,kBAAkBt5b,EAAK+C,IAAM67Z,EAClCpxX,EAAQylY,WAAWwrB,OAAgB7jc,GAAW,GAC9C6jc,EAAeh7X,OAAS,IACjB86X,GAGXlF,EAAav+b,UAAUksb,yBAA2B,SAAUhnb,EAAM+C,GAC9D,GAAI/C,GAA4B,SAApBA,EAAK44B,MAAMzyB,KAAiB,CAEpC,GAAoB,mBADRnG,EAAK44B,MACPA,MACN,OAAO54B,EAAKwR,QAAQqI,SAAS,GAE5B,GAAIpa,KAAK65b,kBAAkBt5b,EAAK+C,KAAOtD,KAAK65b,kBAAkBt5b,EAAK+C,IAAIA,GAAK,CAC7E,IAAI07b,EAAiBh/b,KAAK65b,kBAAkBt5b,EAAK+C,IAAIA,GAAI/C,KACzD,OAAOP,KAAKunb,yBAAyByX,EAAgB17b,IAG7D,OAAO,MAGXs2b,EAAav+b,UAAUkrb,cAAgB,SAAUhmb,EAAM8mD,EAAYtZ,GAC/D,IAAIoxZ,EAAmB5+b,EAAKwR,QAAQqI,SAAS,GACzC+e,EAAQ54B,EAAK44B,MACbima,EAAgB,IAAIlyC,GAAe/zX,EAAO,cAAekuB,GAAY,GAKzE,OAJAluB,EAAMi3B,YAAY5rD,KAAK46b,GACvBD,EAAiB/kb,SAAS5V,KAAKxE,KAAKm6b,sBAAsB55b,EAAMwtC,EAASsZ,EAAY83Y,IACrF5+b,EAAKwR,QAAQ0tN,QAAQ,IAAIhwM,IACzBlvB,EAAKwR,QAAQowY,QAAQ5hZ,EAAKwR,QAAQ4mD,aAC3B34D,KAAK65b,kBAAkBt5b,EAAK+C,IAAI+jD,EAAW/jD,IAAIy0C,WAE1D6hZ,EAAav+b,UAAUgkc,iBAAmB,SAAUtic,EAAKgxC,GACrD,IAAIqsZ,EAAYr9b,EAAIo8B,MACpB,GAAIiha,EAAUhqY,YAAY3zD,OACtB,IAAK,IAAI2B,EAAK,EAAGyE,EAAKu3b,EAAUhqY,YAAahyD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/D,IAAIipD,EAAaxkD,EAAGzE,GACpB4B,KAAKs/b,wBAAwBvic,EAAKsqD,EAAYtZ,UAG/C/tC,KAAK65b,kBAAkB98b,EAAIuG,KAGtCs2b,EAAav+b,UAAU4rb,0BAA4B,SAAU1mb,EAAMwtC,GAI/D,GAAwB,SAApBxtC,EAAK44B,MAAMzyB,KACX,GAAyB,mBAArBnG,EAAK44B,MAAMA,MAMX,IAAK,IALD71B,EAAK/C,EAAK+C,GAAGpG,MAAM,KACnBizD,EAAe7sD,EAAGA,EAAG7G,OAAS,GAC9B80D,EAASjuD,EAAGA,EAAG7G,OAAS,GACxBgE,EAAastC,EAAQ2sB,UAAUnJ,GAC/B6oY,EAAY35b,EAAW04B,MAClB/6B,EAAK,EAAGyE,EAAKu3b,EAAUhqY,YAAahyD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/D,IAAIipD,EAAaxkD,EAAGzE,GACpB,GAAIipD,EAAW/jD,KAAO6sD,EAAc,CAEhC,IAAe,IADHiqY,EAAUhqY,YAAY7xD,QAAQ8oD,GAItC,OAFAtZ,EAAQ04Y,yBAAyBlmb,GACjCP,KAAKs/b,wBAAwB7+b,EAAY4mD,EAAYtZ,IAC9C,QAKdxtC,EAAK44B,MAAMi3B,aAAe7vD,EAAK44B,MAAMi3B,YAAY3zD,QACtDuD,KAAKq/b,iBAAiB9+b,EAAMwtC,GAGpC,OAAO,GAEX6rZ,EAAav+b,UAAUikc,wBAA0B,SAAU7+b,EAAY4mD,EAAYtZ,GAC/E,IAAIqsZ,EAAY35b,EAAW04B,MACvBlnB,EAAQmob,EAAUhqY,YAAY7xD,QAAQ8oD,GAC1C,IAAe,IAAXp1C,EAAc,CACdmob,EAAUhqY,YAAY3nC,OAAOxW,EAAO,GACpC,IAAIktZ,EAAQn/Z,KAAK65b,kBAAkBp5b,EAAW6C,IAC9C,GAAI67Z,GAASA,EAAM93W,EAAW/jD,IAAK,CAC/B,IAAI07b,EAAiB7/B,EAAM93W,EAAW/jD,IAAI/C,KACtC2+b,EAAsB//B,EAAM93W,EAAW/jD,IAAIy0C,UAC/ChK,EAAQ44Y,eAAeqY,GACvBjxZ,EAAQ44Y,eAAeuY,GACvB,IAAIK,EAAc9+b,EAAWsR,QAAQqI,SAAS,GAC9CnI,EAAQstb,EAAYnlb,SAAS7b,QAAQygc,EAAejtb,SACpDwtb,EAAYnlb,SAASqO,OAAOxW,EAAO,GACnCA,EAAQstb,EAAYnlb,SAAS7b,QAAQ2gc,EAAoBntb,SACzDwtb,EAAYnlb,SAASqO,OAAOxW,EAAO,GACnC87B,EAAQ0lY,gBAAgBurB,GACxBjxZ,EAAQ0lY,gBAAgByrB,UACjBnxZ,EAAQ2sB,UAAUskY,EAAe17b,WACjCyqC,EAAQ2sB,UAAUwkY,EAAoB57b,WACtC67Z,EAAM93W,EAAW/jD,OAIpCs2b,EAAav+b,UAAU4jc,kBAAoB,SAAUO,EAAcztb,EAASmC,EAAU3T,EAAM9D,EAAQklB,GAChG,IAAI2kC,EAActmD,KAAKy/b,uBAAuBvrb,EAAUsrb,GACpDhjc,EAAO,GACP82T,EAAcvhT,EAAQqI,SAAS,GAC/B6zZ,EAAcl8Z,EAAQqI,SAAS,GAC/Bub,EAAc5jB,EAAQqI,SAAS,GACnCk5S,EAAYxmQ,oBAAsB,UAClCwmQ,EAAYvmQ,kBAAoB,UAChCp3B,EAAYsH,OAAOzwB,KAAOmpB,EAAYsH,OAAOxwB,MAAQ,EACrDkpB,EAAYsH,OAAOvwB,IAAMipB,EAAYsH,OAAOtwB,OAAS,EACrD,IAAIwmB,EACAoX,EACgB,IAAhB+b,GACA9pD,EAAO,0BACP82T,EAAYt9S,MAAQ,GACpBs9S,EAAYxmQ,oBAAsB,OAClCmhX,EAAYjsB,6BAA6B,EAAG,GAAK,YACjDrsX,EAAYsH,OAAOvwB,IAAMipB,EAAYsH,OAAOtwB,OAAS,GACrDwmB,EAAQqsa,EAAa5uZ,YACrBrG,GACI6N,GAAIonZ,EAAa/yb,MAAO4rC,GAAImnZ,EAAa9yb,IACzC4rC,GAAIknZ,EAAa/yb,MAAO8rC,GAAIinZ,EAAa7yb,SAGxB,MAAhB25C,GACL9pD,EAAO,0BACP82T,EAAYt9S,MAAQ,GACpBs9S,EAAYxmQ,oBAAsB,QAClCmhX,EAAYjsB,6BAA6B,EAAG,GAAK,YACjDrsX,EAAYsH,OAAOvwB,IAAMipB,EAAYsH,OAAOtwB,OAAS,GACrDwmB,EAAQqsa,EAAa3uZ,WACrBtG,GACI6N,GAAIonZ,EAAahzb,KAAM6rC,GAAImnZ,EAAa9yb,IACxC4rC,GAAIknZ,EAAahzb,KAAM+rC,GAAIinZ,EAAa7yb,SAGvB,KAAhB25C,GACL9pD,EAAO,0BACP82T,EAAYv9S,OAAS,GACrBu9S,EAAYvmQ,kBAAoB,MAChCkhX,EAAYjsB,6BAA6B,GAAK,EAAG,YACjDrsX,EAAYsH,OAAOzwB,KAAOmpB,EAAYsH,OAAOxwB,MAAQ,GACrD0mB,EAAQqsa,EAAa7uZ,aACrBpG,GACI6N,GAAIonZ,EAAa/yb,MAAO4rC,GAAImnZ,EAAa7yb,OACzC2rC,GAAIknZ,EAAahzb,KAAM+rC,GAAIinZ,EAAa7yb,UAI5CnQ,EAAO,0BACP82T,EAAYv9S,OAAS,GACrBu9S,EAAYvmQ,kBAAoB,SAChCkhX,EAAYjsB,6BAA6B,GAAK,EAAG,YACjDrsX,EAAYsH,OAAOzwB,KAAOmpB,EAAYsH,OAAOxwB,MAAQ,GACrD0mB,EAAQqsa,EAAa9uZ,UACrBnG,GACI6N,GAAIonZ,EAAa/yb,MAAO4rC,GAAImnZ,EAAa9yb,IACzC4rC,GAAIknZ,EAAahzb,KAAM+rC,GAAIinZ,EAAa9yb,MAGhD,IAAIqmB,EAASysa,EAAazsa,OAE1BI,EAAQ2mB,GAAsBvP,GAAUxX,EADzBof,GAAM9kC,UAAU6G,EAAUyN,EAAOtV,KAAKC,IAAIkzb,EAAaxpb,MAAOwpb,EAAazpb,UAC/B,EAAOgd,GAClEugS,EAAY92T,KAAOA,OACJrB,IAAXsB,QAAkCtB,IAAVwmB,IACxBwR,EAAQgf,GAAM9kC,UAAU8lB,EAAOxR,EAAOllB,GACtCsV,EAAQlG,QAAUtL,EAAKsL,QAAUsnB,EAAMpmB,EACvCgF,EAAQ9F,QAAU1L,EAAK0L,QAAUknB,EAAMnmB,IAG/C4sb,EAAav+b,UAAU40b,qBAAuB,SAAU/iB,EAAan/X,GACjE,GAAI/tC,KAAK65b,kBAAmB,CACxB,IAAI6F,EAAexyB,EAAYvyW,SAC3BxK,EAAe+8W,EAAY5pa,GAC3B7C,EAAastC,EAAQ2sB,UAAUglY,GACnC,OAAIj/b,GAAwC,SAA1BA,EAAW04B,MAAMzyB,MAAmB1G,KAAK65b,kBAAkB6F,IACzE1/b,KAAK65b,kBAAkB6F,GAAcvvY,GAC9B1vD,EAEJ,KAEX,OAAO,MAGXm5b,EAAav+b,UAAU80b,4BAA8B,SAAU1vb,EAAYysa,EAAap+Y,EAAMif,GAC1F,IAAI2xZ,EAAexyB,EAAYvyW,SAC3BxK,EAAe+8W,EAAY5pa,GAC/B,GAAItD,KAAK65b,kBAAkB6F,IAAiB1/b,KAAK65b,kBAAkB6F,GAAcvvY,GAC7E,IAAK,IAAI/xD,EAAK,EAAGyE,EAAKpC,EAAW04B,MAAMi3B,YAAahyD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtE,IAAIipD,EAAaxkD,EAAGzE,GACpB,GAAIipD,EAAW/jD,KAAO6sD,EAAc,CAChC9I,EAAWv4B,KAAOA,EAClB,IAAI/c,EAAU/R,KAAK65b,kBAAkB6F,GAAcvvY,GAAc5vD,KAAKwR,QAAQqI,SAAS,GACvFrI,EAAQ6oB,QAAU9L,EAClB/c,EAAQ+kB,SAAU,EAClBr2B,EAAWsR,QAAQ0tN,QAAQ,IAAIhwM,IAC/BhvB,EAAWsR,QAAQowY,QAAQ1hZ,EAAWsR,QAAQ4mD,gBAK9DihY,EAAav+b,UAAU4kb,WAAa,SAAUvzX,EAAc3e,GACxD,IACIixZ,EADA33Y,EAAaqF,EAAavzB,MAAMi3B,YAEpC,GAAI/I,GAAcA,EAAW5qD,OAAS,EAClC,IAAK,IAAIN,EAAI,EAAGA,EAAIkrD,EAAW5qD,OAAQN,IACnC6ic,EAAiBh/b,KAAK65b,kBAAkBntY,EAAappD,IAAI+jD,EAAWlrD,GAAGmH,IAAI/C,KAC3EwtC,EAAQkyY,WAAW+e,IAK/BpF,EAAav+b,UAAUk2b,yBAA2B,SAAU7kY,EAAcS,EAAWpf,GACjF,GAAgC,SAA5B2e,EAAavzB,MAAMzyB,KAAiB,CACpC,IAAI2gD,EAAaqF,EAAavzB,MAAMi3B,YACpC,GAAI/I,GAAcA,EAAW5qD,OAAS,EAClC,IAAK,IAAIN,EAAI,EAAGA,EAAIuwD,EAAa36C,QAAQqI,SAAS,GAAGA,SAAS3d,OAAQN,IAClE,IAAK,IAAIsnB,EAAI,EAAGA,EAAI4jC,EAAW5qD,OAAQgnB,IAAK,CACxC,IAAI0sC,EAAezD,EAAa36C,QAAQqI,SAAS,GAAGA,SAASje,GAAGmH,GAAGpG,MAAM,KAEzE,GADSizD,EAAaA,EAAa1zD,OAAS,KACjC4qD,EAAW5jC,GAAGngB,GAAI,CACzB,IAAI07b,EAAiBh/b,KAAK65b,kBAAkBntY,EAAappD,IAAI+jD,EAAW5jC,GAAGngB,IAAI/C,KAC3Ew3C,EAAY/3C,KAAK65b,kBAAkBntY,EAAappD,IAAI+jD,EAAW5jC,GAAGngB,IAAIy0C,UAEtE7jC,GADYo7B,GAAiByI,EAAUd,YAAayV,EAAa36C,QAAQgkB,OAAQ22B,EAAa36C,QAAQgkB,QAC3FgiB,EAAU/I,aACzB96B,GACInH,EAAGgrC,EAAU/I,YAAYjiC,EAAI2/C,EAAa7gD,QAAWshD,EAAiB,QACtEngD,EAAG+qC,EAAU/I,YAAYhiC,EAAI0/C,EAAazgD,QAAWkhD,EAAiB,SAE1Ej5C,EAAWi+B,GAAM9kC,UAAU6G,EAAUmzC,EAAW5jC,GAAG9B,MAAO0lC,EAAW5jC,GAAGhnB,QACxEiwD,EAAa36C,QAAQqI,SAAS,GAAGA,SAASje,GAAG0P,QACzCmzb,EAAenzb,QAAUqI,EAASnH,EACtC2/C,EAAa36C,QAAQqI,SAAS,GAAGA,SAASje,GAAG8P,QACzC+yb,EAAe/yb,QAAUiI,EAASlH,EACtC+gC,EAAQkyY,WAAW+e,OAQ3CpF,EAAav+b,UAAU0ya,uBAAyB,SAAUhxa,EAAKgxC,GAC3D,GAAIhxC,EAAI2uZ,SAAU,CACd,IAAI37W,EAAahC,EAAQ2sB,UAAU39D,EAAI2uZ,UACvC,GAA8B,SAA1B37W,EAAW5W,MAAMzyB,MAA8C,mBAA3BqpC,EAAW5W,MAAMA,MACrD,OAAO4W,EAGf,OAAOhzC,GAGX68b,EAAav+b,UAAUwqb,OAAS,SAAU9ob,GACtC,OAAIA,EAAIo8B,OAA4B,SAAnBp8B,EAAIo8B,MAAMzyB,MAAuC,mBAApB3J,EAAIo8B,MAAMA,OAM5Dyga,EAAav+b,UAAUiic,wBAA0B,SAAU/8b,GACvD,IAEIq7b,EAFA38a,EAAQ,EAGR0uY,EAFQptZ,EAAK44B,MAAMy0X,SAEAD,WAiBvB,YAfiBxyZ,KADjBygc,EAAWjuC,EAAWkuC,OACqB,SAAbD,GAC1B38a,SAE6B9jB,IAA5BwyZ,EAAWsuC,eACgB,IAA5BtuC,EAAWsuC,cACXh9a,SAE0B9jB,IAAzBwyZ,EAAWI,YACa,IAAzBJ,EAAWI,WACX9uY,SAEsB9jB,IAArBwyZ,EAAWqvC,QACS,IAArBrvC,EAAWqvC,OACX/9a,IAEGA,GAGX26a,EAAav+b,UAAUkgc,kBAAoB,SAAUh7b,GACjD,IAAI0e,EAAQ,EAERk8a,EADQ56b,EAAK44B,MAAMy0X,SACNutC,KAUjB,YAR2Bhgc,IAAtBggc,EAAKc,eACgB,IAAtBd,EAAKc,cACLh9a,SAEe9jB,IAAdggc,EAAKU,MACQ,SAAdV,EAAKU,MACL58a,IAEGA,GAGX26a,EAAav+b,UAAU0pQ,SAAW,SAAU1kQ,EAAOE,GAE/CF,EAAMqE,MAAM05B,KAAO79B,EAAKmE,MAAM05B,KAC9B/9B,EAAMqE,MAAMgnD,YAAcnrD,EAAKmE,MAAMgnD,YACrCrrD,EAAMqE,MAAMknD,YAAcrrD,EAAKmE,MAAMknD,YACrCvrD,EAAMqE,MAAMinD,gBAAkBprD,EAAKmE,MAAMinD,gBACzCtrD,EAAMqE,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QACjCpN,EAAMqE,MAAMwnD,SAAW3rD,EAAKmE,MAAMwnD,SACkB,IAA/C3rD,EAAK49C,YAAcG,GAAgBe,UACpCh/C,EAAM0zD,OAASxzD,EAAKwzD,SAO5B6lY,EAAav+b,UAAU81b,WAAa,SAAU96E,EAAalpT,EAAWT,EAAc3e,GAChF,IAAI4xZ,EAAWtpF,EAAYl9U,UACvB4ja,EAAiBrwY,EAAa36C,QAAQqI,SAAS,GAC/Cwlb,EAAclzY,EAAavzB,MAAMA,MACjC0ma,OAAoC1kc,IAAtBk7W,EAAYrgW,YAA8C7a,IAAvBk7W,EAAYtgW,OACjE,GAAuB,YAAnB4pb,EAASxma,OAAuBwma,EAAShF,QACzCjuY,EAAa36C,QAAQqI,SAAS,GAAKpa,KAAK+5b,oBAAoBrtY,QAE3D,GAAuB,eAAnBizY,EAASxma,OAA0Bwma,EAAS7E,WACjDpuY,EAAa36C,QAAQqI,SAAS,GAAKpa,KAAKg6b,uBAAuBttY,QAE9D,GAAuB,aAAnBizY,EAASxma,OAAwBwma,EAAS/xC,SAC/ClhW,EAAa36C,QAAQqI,SAAS,GAAKpa,KAAKk6b,qBAAqBxtY,QAE5D,GAAuB,UAAnBizY,EAASxma,OAAqBwma,EAASrjc,MAAO,CACnD,IAAI+/b,EAAasD,EAASrjc,MAC1BowD,EAAa36C,QAAQqI,SAAS,GAAKpa,KAAK85b,kBAAkBptY,EAAc2vY,OAEhD,YAAnBsD,EAASxma,OAA0C,eAAnBwma,EAASxma,MAC9CuzB,EAAa36C,QAAQqI,SAAS,GAAKpa,KAAKi6b,cAAcvtY,QAK5BvxD,IAArBwkc,EAAShF,SAA0C,YAAhBiF,GAA6BC,EACrE7/b,KAAK8/b,kBAAkBpzY,EAAc2pT,QAERl7W,IAAxBwkc,EAAS7E,YAA6C,eAAhB8E,GAAgCC,EAC3E7/b,KAAK+/b,qBAAqBrzY,EAAc2pT,EAAalpT,QAE1BhyD,IAAtBwkc,EAAS/xC,UAA2C,aAAhBgyC,GAA8BC,EACvE7/b,KAAKggc,mBAAmBtzY,EAAc2pT,EAAalpT,EAAWpf,SAEtC5yC,IAAnBwkc,EAASrjc,OAAwC,UAAhBsjc,GAA2BC,IACjE7/b,KAAKigc,gBAAgBvzY,EAAc2pT,EAAalpT,GAEhDkpT,EAAY3xW,OACZ6mD,GAAY8qT,EAAY3xW,MAAOq4b,aAA0BnsY,GAA0C,aAA7BlE,EAAavzB,MAAMA,MACrF4ja,EAAe3ib,SAAS,GAAGA,SAAS,GACpC2ib,EAAe3ib,SAAS,GAAK2ib,IAIzCnD,EAAav+b,UAAUykc,kBAAoB,SAAUv/b,EAAM81W,GACvD,IAAI+jF,EAAY75b,EAAK44B,MACjB4ja,EAAiBx8b,EAAKwR,QAAQqI,SAAS,GAC3C,GAAIggb,EAAW,CACX7uY,GAAYhrD,EAAKmE,MAAOq4b,EAAe3ib,SAAS,IAChD,IAAI8lb,EAAuB/kY,GAA4Bi/X,EAAUO,QAAQj0b,MACzEq2b,EAAe3ib,SAAS,GAAG5d,KAAO0jc,OAEZ/kc,IAAtBk7W,EAAYrgW,YAA8C7a,IAAvBk7W,EAAYtgW,QAC/C/V,KAAK46b,sBAAsBr6b,EAAK44B,MAAMwha,QAASoC,EAAgB1mF,EAAYrgW,OAASzV,EAAKyV,MAAOqgW,EAAYtgW,QAAUxV,EAAKwV,SAInI6jb,EAAav+b,UAAU0kc,qBAAuB,SAAUx/b,EAAMu2D,EAAW3J,GACrE,IAAIitY,EAAYtjY,EAAU39B,MACtB4ja,EAAiBx8b,EAAKwR,QAAQqI,SAAS,GAC3C,GAAIggb,EAAW,CACX,IAAI+F,EAAuBpD,EAAe3ib,SAAS,GAC/Cgmb,EAAuBrD,EAAe3ib,SAAS,GAMnD,QALwBjf,IAApB27D,EAAUpyD,QACV6mD,GAAYuL,EAAUpyD,MAAOq4b,EAAe3ib,SAAS,IACrD+lb,EAAqBz7b,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAChD2yb,EAAqB17b,MAAM+I,QAAUlN,EAAKmE,MAAM+I,SAEhD2sb,EAAUU,WAAY,CACtB,OAAQV,EAAUU,WAAWp0b,MACzB,IAAK,OACDy5b,EAAqBrpa,SAAU,EAC/B,MACJ,IAAK,QACDqpa,EAAqBz7b,MAAM05B,KAAO,QAClC,MACJ,IAAK,SACD+ha,EAAqBz7b,MAAM05B,KAAO,QAGF,SAApC+uB,EAAUh0B,MAAM2ha,WAAWp0b,OAC3By5b,EAAqBrpa,SAAU,QAEW37B,IAA1C27D,EAAU39B,MAAM2ha,WAAWhzZ,aAC3Bs4Z,EAAqBtpa,QAAUsja,EAAUU,WAAWhzZ,kBAIxC3sC,IAApB27D,EAAU9gD,YAA4C7a,IAArB27D,EAAU/gD,QAC3C/V,KAAKqgc,0BAA0B9/b,EAAK44B,MAAM2ha,WAAYiC,EAAgBjmY,EAAU9gD,OAASzV,EAAKyV,MAAO8gD,EAAU/gD,QAAUxV,EAAKwV,SAItI6jb,EAAav+b,UAAUsvF,SAAW,SAAUpqF,EAAM4sD,EAAW7wD,EAAOgkc,EAAQC,EAAQC,GAChF,OAAQlkc,GACJ,IAAK,QACDikc,EAAOzpa,SAAU,EACjBwpa,EAAO57b,MAAMinD,gBAAkB,GAC/B60Y,EAAO97b,MAAM05B,KAAO,QACpBoia,EAAO97b,MAAMgnD,YAAc,QAC3B40Y,EAAO57b,MAAM05B,KAAO,QACpB,MACJ,IAAK,uBACDkia,EAAO57b,MAAMinD,gBAAkB,MAC/B60Y,EAAO97b,MAAM05B,KAAO,QACpBkia,EAAO57b,MAAM05B,KAAO,QACpBoia,EAAO97b,MAAMgnD,YAAc,QAC3B60Y,EAAOzpa,SAAU,EACjB,MACJ,IAAK,eACDwpa,EAAO57b,MAAMinD,gBAAkB,GAC/B20Y,EAAO57b,MAAM05B,KAAO,QACpBmia,EAAO77b,MAAMinD,gBAAkB,GAC/B20Y,EAAO57b,MAAMwnD,SAAW,KACxBs0Y,EAAO97b,MAAM05B,KAAO,QACpBoia,EAAO97b,MAAMgnD,YAAc,QAC3B1rD,KAAKygc,sBAAsBtzY,EAAWozY,GACtC,MACJ,IAAK,8BACDD,EAAO57b,MAAM05B,KAAO,QACpBkia,EAAO57b,MAAMwnD,SAAW,KACxBs0Y,EAAO97b,MAAM05B,KAAO,QACpBoia,EAAO97b,MAAMgnD,YAAc,QAC3B40Y,EAAO57b,MAAMinD,gBAAkB,MAC/B40Y,EAAO77b,MAAMinD,gBAAkB,MAC/B3rD,KAAKygc,sBAAsBtzY,EAAWozY,GACtC,MACJ,IAAK,uBACL,IAAK,MACDD,EAAO57b,MAAM05B,KAAiB,QAAV9hC,EAAkB,QAAU,QAChDgkc,EAAO57b,MAAMinD,gBAAkB,GAC/B40Y,EAAO77b,MAAMinD,gBAAkB,GAC/B20Y,EAAO57b,MAAMwnD,SAAW,KACxBs0Y,EAAO97b,MAAM05B,KAAO,QACpBp+B,KAAKygc,sBAAsBtzY,EAAWozY,GACtCC,EAAO97b,MAAMgnD,YAAcnrD,EAAKmE,MAAM05B,OAKlDw7Z,EAAav+b,UAAUolc,sBAAwB,SAAUtzY,EAAWozY,GAC5DpzY,EAAUh0B,MAAMy0X,UAAYzgW,EAAUh0B,MAAMy0X,SAASD,YACrDxgW,EAAUh0B,MAAMy0X,SAASD,WAAWhkZ,aACcxO,IAAlDgyD,EAAUh0B,MAAMy0X,SAASD,WAAWhkZ,OAAO,SACaxO,IAAxDgyD,EAAUh0B,MAAMy0X,SAASD,WAAWhkZ,OAAO,GAAGrN,MACc,yBAAxD6wD,EAAUh0B,MAAMy0X,SAASD,WAAWhkZ,OAAO,GAAGrN,OACU,UAAxD6wD,EAAUh0B,MAAMy0X,SAASD,WAAWhkZ,OAAO,GAAGrN,QAC9Cikc,EAAOzpa,SAAU,QAGU37B,IAA1BgyD,EAAUh0B,MAAM78B,QACe,yBAAhC6wD,EAAUh0B,MAAM78B,MAAMA,OACU,UAAhC6wD,EAAUh0B,MAAM78B,MAAMA,QACtBikc,EAAOzpa,SAAU,KAK7B8ia,EAAav+b,UAAU4kc,gBAAkB,SAAU1/b,EAAMu2D,EAAW3J,GAChE,IAAIitY,EAAYtjY,EAAU39B,MACtB4ja,EAAiBx8b,EAAKwR,QAAQqI,SAAS,GAC3C,GAAIggb,EAAW,CACX,IAGI5mb,EAHAktb,EAAuB3D,EAAe3ib,SAAS,GAC/C+lb,EAAuBpD,EAAe3ib,SAAS,GAC/Cgmb,EAAuBrD,EAAe3ib,SAAS,GAE/CsM,OAAU,OACUvrB,IAApB27D,EAAUpyD,QACV6mD,GAAYhrD,EAAKmE,MAAOq4b,EAAe3ib,SAAS,SAChBjf,IAA5B27D,EAAUpyD,MAAM+I,cAAyDtS,IAAhC27D,EAAUpyD,MAAMgnD,cACzDy0Y,EAAqBz7b,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAChD0yb,EAAqBz7b,MAAMgnD,YAAcnrD,EAAKmE,MAAMgnD,cAG5Dl4C,EAAU4mb,EAAU99b,MAAMA,MAC1BoqB,EAAU0za,EAAU99b,MAAMoqB,aACVvrB,IAAZqY,GACAxT,KAAK2qF,SAASpqF,EAAM4sD,EAAW35C,EAASktb,EAAsBP,EAAsBC,QAExEjlc,IAAZurB,GACA1mB,KAAK2gc,uBAAuBpgc,EAAMu2D,QAGlB37D,IAApB27D,EAAU9gD,YAA4C7a,IAArB27D,EAAU/gD,QAC3C/V,KAAK28b,qBAAqBp8b,EAAK44B,MAAM78B,MAAOygc,EAAgBjmY,EAAU9gD,OAASzV,EAAKyV,MAAO8gD,EAAU/gD,QAAUxV,EAAKwV,SAI5H6jb,EAAav+b,UAAUslc,uBAAyB,SAAUpgc,EAAMu2D,GAC5D,IAAIsjY,EAAY75b,EAAK44B,MACjB4ja,EAAiBx8b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,IACnD08C,EAAUpyD,YACuBvJ,IAAhC27D,EAAUpyD,MAAMgnD,kBAAyDvwD,IAA5B27D,EAAUpyD,MAAM+I,SAC9D89C,GAAYhrD,EAAKmE,MAAOq4b,GAE5B,IAAI6D,EAAuB3lY,GAA4Bm/X,EAAU99b,MAAMoqB,SACnE0za,EAAU99b,MAAMoqB,UAChBq2a,EAAehnb,OAAiC,GAAxBgnb,EAAehnb,QAE3Cgnb,EAAevgc,KAAOokc,GAG1BhH,EAAav+b,UAAU2kc,mBAAqB,SAAUz/b,EAAMu2D,EAAW3J,EAAWpf,GAC9E,IAAIqsZ,EAAYtjY,EAAU39B,MACtB4ja,EAAiBx8b,EAAKwR,QAAQqI,SAAS,GACvC+U,EAAOnvB,KAAK2gB,QAAQpgB,EAAMw8b,EAAe3ib,SAAS,GAAGA,SAAS,IAClE,GAAIggb,EAAW,CACX,IAAInsW,EAAU9gC,EAAUh0B,MAAMy0X,SAASA,SACnCizC,EAAmBtgc,EAAK44B,MAAMy0X,SAASA,SAC3C,GAAiB,eAAZ3/T,GAAwC,SAAZA,GAA6C,eAArB4yW,GAA0D,SAArBA,EAIzF,CACD,GAAyB,SAArBA,QAA2D1lc,IAA5Bi/b,EAAUxsC,SAASutC,KAAoB,CACtEn7b,KAAK8gc,uBAAuBvgc,EAAMu2D,GAClC,IAAIumY,EAAgBr9b,KAAKu7b,kBAAkBh7b,GACvCwM,OAAI,EACJyub,EAA6B,GAAhB6B,EACbnoV,EAAO/lF,EAAKnZ,MAAQ,EAAIwlb,EAExBzub,EADkB,IAAlBswb,EACInoV,EAAO,EAGPA,EAA6B,GAArBmoV,EAAgB,QAEKlic,IAAjCi/b,EAAUxsC,SAASutC,KAAKU,MACxB77b,KAAK+gc,2BAA2Bxgc,EAAMu2D,EAAW/pD,EAAGswb,EAAenoV,EAAM,GAGxD,eAArB2rV,QAAuE1lc,IAAlCi/b,EAAUxsC,SAASD,YACxD3tZ,KAAKghc,6BAA6Bzgc,EAAMu2D,EAAW3J,EAAWpf,QArBlEA,EAAQ44Y,eAAepmb,GACvBA,EAAKwR,QAAQqI,SAAS,GAAKpa,KAAKk6b,qBAAqB35b,GAuBzDP,KAAKihc,uBAAuB1gc,EAAK44B,MAAMy0X,SAAUmvC,EAAgBjmY,EAAU9gD,OAASmZ,EAAKnZ,MAAO8gD,EAAU/gD,QAAUoZ,EAAKpZ,OAAQxV,QAE7GpF,IAApB27D,EAAU9gD,YAA4C7a,IAArB27D,EAAU/gD,QAC3C/V,KAAKihc,uBAAuB1gc,EAAK44B,MAAMy0X,SAAUmvC,EAAgBjmY,EAAU9gD,OAASmZ,EAAKnZ,MAAO8gD,EAAU/gD,QAAUoZ,EAAKpZ,OAAQxV,IAIzIq5b,EAAav+b,UAAUylc,uBAAyB,SAAUvgc,EAAMu2D,GAC5D,IAAIsjY,EAAYtjY,EAAU39B,MACtB4ja,EAAiBx8b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GACnD+gb,EAAOf,EAAUxsC,SAASutC,KAO9B,GANkB,YAAdA,EAAKz0b,MAAoC,SAAdy0b,EAAKz0b,KAChCq2b,EAAe3ib,SAAS,GAAGrE,OAAS,GAGpCgnb,EAAe3ib,SAAS,GAAGrE,OAAS,QAEtB5a,IAAdggc,EAAKz0b,KAAoB,CACzB,IAAIw6b,EAAoB7lY,GAAyB8/X,EAAKz0b,MACtDq2b,EAAe3ib,SAAS,GAAG5d,KAAO0kc,OAED/lc,IAAjCi/b,EAAUxsC,SAASutC,KAAK75b,QACa,IAAjC84b,EAAUxsC,SAASutC,KAAK75b,KACxBy7b,EAAe3ib,SAAS,GAAG1V,MAAMknD,YAAc,EAG/CmxY,EAAe3ib,SAAS,GAAG1V,MAAMknD,YAAc,QAGVzwD,IAAzCi/b,EAAUxsC,SAASutC,KAAKc,gBACqB,IAAzC7B,EAAUxsC,SAASutC,KAAKc,aACxBc,EAAe3ib,SAAS,GAAG0c,SAAU,EAGrCima,EAAe3ib,SAAS,GAAG0c,SAAU,IAKjD8ia,EAAav+b,UAAU0lc,2BAA6B,SAAUxgc,EAAMu2D,EAAW/pD,EAAGswb,EAAenoV,EAAM33G,GACnG,IAGIs+b,EAEAsF,EALA/G,EAAYtjY,EAAU39B,MACtB4ja,EAAiBx8b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GACnDwzY,EAAWwsC,EAAUxsC,SAErB37Y,EAAQ,EAEZ,QAA4B9W,IAAxByyZ,EAASD,WAA0B,CACnC,IAAIA,EAAaC,EAASD,WAC1B17Y,EAAsC,gBAA7B27Y,EAASD,WAAWjnZ,KAA0B,EAAI,EAE3Dy6b,EAAoB5lY,GADpBsgY,EAAOluC,EAAWkuC,MAElBkB,EAAe3ib,SAAS,EAAInI,GAAOzV,KAAO2kc,EAC1CpE,EAAe3ib,SAAS,EAAInI,GAAO6kB,QAAoB,SAAT+ka,YAEvB1gc,IAAlByyZ,EAASutC,WAA6Chgc,IAAvByyZ,EAASutC,KAAKU,OAClDsF,EAAoB5lY,GAAyBqyV,EAASutC,KAAKU,MAC3DkB,EAAe3ib,SAAS,GAAG5d,KAAO2kc,EAClCpE,EAAe3ib,SAAS,GAAG0c,QAAkC,SAAvB82X,EAASutC,KAAKU,MAExD77b,KAAKohc,kBAAkBrE,EAAgBM,EAAenoV,EAAMnoG,EAAGxP,EAAQ0U,IAG3E2nb,EAAav+b,UAAU+lc,kBAAoB,SAAUrE,EAAgBM,EAAenoV,EAAMnoG,EAAGxP,GACzF,GAAsB,IAAlB8/b,EACA,IAAK,IAAIlhc,EAAIoB,EAAOpB,EAAI4gc,EAAe3ib,SAAS3d,OAAQN,IAC1C,IAANA,IAAkD,IAAvC4gc,EAAe3ib,SAASje,GAAG26B,UACtCima,EAAe3ib,SAASje,GAAG8gC,OAAOzwB,KAAOO,EACzCA,EAAImoG,EAAO,OAIlB,CACDnoG,EAAImoG,EAA6B,GAArBmoV,EAAgB,GAC5B,IAASlhc,EAAIoB,EAAOpB,EAAI4gc,EAAe3ib,SAAS3d,OAAQN,IAC1C,IAANA,IAAkD,IAAvC4gc,EAAe3ib,SAASje,GAAG26B,UACtCima,EAAe3ib,SAASje,GAAG8gC,OAAOzwB,KAAOO,EACzCA,GAAK,MAMrB6sb,EAAav+b,UAAU2lc,6BAA+B,SAAUzgc,EAAMu2D,EAAW3J,EAAWpf,GACxF,IAKIhhC,EALAqtb,EAAYtjY,EAAU39B,MACtB4ja,EAAiBx8b,EAAKwR,QAAQqI,SAAS,GACvC+U,EAAOnvB,KAAK2gB,QAAQpgB,EAAMw8b,EAAe3ib,SAAS,GAAGA,SAAS,IAC9DuzY,EAAaysC,EAAUxsC,SAASD,WAChC0vC,EAAgBr9b,KAAKs9b,wBAAwB/8b,GAE7Ci7b,EAA6B,GAAhB6B,EACbnoV,EAAO/lF,EAAKnZ,MAAQ,EAAIwlb,EAExBzub,EADkB,IAAlBswb,EACInoV,EAAO,EAGPA,EAA6B,GAArBmoV,EAAgB,GAEhC9xY,GAAYhrD,EAAKmE,MAAOq4b,EAAe3ib,SAAS,GAAGA,SAAS,SAClCjf,IAAtBwyZ,EAAWhkZ,QACX3J,KAAKqhc,0BAA0B9gc,EAAMu2D,EAAW3J,EAAWpf,QAEtC5yC,IAArBwyZ,EAAWqvC,OACXh9b,KAAKshc,0BAA0B/gc,EAAM4sD,EAAWwgW,EAAY5gZ,EAAGswb,EAAenoV,QAEtD/5G,IAAxBwyZ,EAAWkwC,UACX79b,KAAKuhc,6BAA6Bhhc,EAAMotZ,QAEfxyZ,IAAzBwyZ,EAAWI,WACX/tZ,KAAKwhc,8BAA8Bjhc,EAAM4sD,EAAWwgW,EAAY5gZ,EAAGswb,EAAenoV,EAAMnnE,QAE5D5yC,IAA5BwyZ,EAAWsuC,cACXj8b,KAAKyhc,iCAAiClhc,EAAM4sD,EAAWwgW,EAAY5gZ,EAAGswb,EAAenoV,QAEjE/5G,IAApBwyZ,EAAWkuC,MACX77b,KAAK0hc,yBAAyBnhc,EAAM4sD,EAAWwgW,EAAY5gZ,EAAGswb,EAAenoV,QAElD/5G,IAA3BwyZ,EAAW+hB,aACX1va,KAAK2hc,gCAAgCphc,EAAMu2D,EAAW3J,EAAWpf,IAIzE6rZ,EAAav+b,UAAUgmc,0BAA4B,SAAU9gc,EAAMu2D,EAAW3J,EAAWpf,GAUrF,IAAK,IATDqsZ,EAAYtjY,EAAU39B,MACtB4ja,EAAiBx8b,EAAKwR,QAAQqI,SAAS,GACvCmlb,EAAcxC,EAAe3ib,SAAS,GAItCuzY,GADyBovC,EAAe3ib,SAAS,GAAGA,SAAS3d,OAChD29b,EAAUxsC,SAASD,YAG3BvvZ,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKqwZ,EAAWhkZ,QAASvL,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACxE,IAAIf,EAAMwF,EAAGzE,GACTwjc,EAAahra,OAAOv5B,GACpBwkc,EAAetC,EAAYnlb,SAASwnb,EAJhC,GAKJE,EAAcvhc,EAAK44B,MAAMy0X,SAASD,WAAWhkZ,OAAOi4b,GACxD5hc,KAAK+hc,mBAAmBxhc,EAAMotZ,EAAWhkZ,OAAOi4b,GAAaE,EAAaD,EAAc/qY,EAAW3J,EAAWpf,KAGtH6rZ,EAAav+b,UAAU0mc,mBAAqB,SAAUxhc,EAAMyhc,EAAUF,EAAaD,EAAc/qY,EAAW3J,EAAWpf,GACnH,IAKI60E,EACAl8F,EANAq2a,EAAiBx8b,EAAKwR,QAAQqI,SAAS,GACvCggb,EAAYtjY,EAAU39B,MACtBmna,EAASuB,EAAaznb,SAAS,GAC/Bmmb,EAASsB,EAAaznb,SAAS,GAC/Bomb,EAASqB,EAAaznb,SAAS,GAgBnC,GAbI08C,EAAUpyD,aAC0BvJ,IAAhC27D,EAAUpyD,MAAMgnD,kBAAyDvwD,IAA5B27D,EAAUpyD,MAAM+I,UAC7Dsvb,EAAe3ib,SAAS,GAAGA,SAAS,GAAG1V,MAAMgnD,YAAcoL,EAAUpyD,MAAMgnD,YAC3EqxY,EAAe3ib,SAAS,GAAGA,SAAS,GAAG1V,MAAM+I,QAAUqpD,EAAUpyD,MAAM+I,eAGzCtS,IAAlCi/b,EAAUxsC,SAASD,aACnB/qS,EAAYo/U,EAAS1lc,MACrBoqB,EAAUs7a,EAASt7a,cAELvrB,IAAdynH,GACA5iH,KAAK2qF,SAAS7zB,EAAW3J,EAAWy1D,EAAW09U,EAAQC,EAAQC,QAEnDrlc,IAAZurB,EAAuB,CACnBowC,EAAUpyD,OACV6mD,GAAYuL,EAAUpyD,MAAOq4b,EAAe3ib,SAAS,IAEzD,IAAIwmb,EAAuB3lY,GAA4Bv0C,GACvDm7a,EAAaznb,SAAS,GAAG5d,KAAOokc,EAqBpC,QAnBwBzlc,IAApB6mc,EAASjsb,aAA2C5a,IAAnB6mc,EAAShsb,OAC1ChW,KAAKiic,aAAaD,EAAUH,QAEZ1mc,IAAhB6mc,EAAS1+b,KACTu+b,EAAav+b,GAAK0+b,EAAS1+b,SAEPnI,IAApB6mc,EAAS/ka,SACT4ka,EAAa5ka,OAAS+ka,EAAS/ka,aAEE9hC,IAAjC6mc,EAASl1Y,sBACT+0Y,EAAa/0Y,oBAAsBk1Y,EAASl1Y,0BAEb3xD,IAA/B6mc,EAASj1Y,oBACT80Y,EAAa90Y,kBAAoBi1Y,EAASj1Y,wBAEtB5xD,IAApB6mc,EAASr2b,SACTk2b,EAAa7/C,6BAA6B8/C,EAAYn2b,OAAOoB,EAAG+0b,EAAYn2b,OAAOqB,EAAG,YACtF60b,EAAa76Y,aAAe,cAEH7rD,IAAzB6mc,EAAS5xY,YAA2B,CACpC,IAAIA,OAAc,EACd/I,EAAa01Y,EAAe3ib,SAAS,GAAGA,SAAS,GACjDynb,EAAaznb,SAAS,IAAMynb,EAAaznb,SAAS3d,OAAS,IAC3D2zD,EAAcyxY,EAAaznb,SAAS,GACpC2zB,EAAQs8W,iBAAiB23C,EAAS5xY,YAAY,GAAIA,EAAa/I,IAGvE,QAAuBlsD,IAAnB6mc,EAAS1xY,MAAqB,CAC9B,IAAIA,OAAQ,EACR/f,EAAOwsZ,EAAe3ib,SAAS,GAAGA,SAAS,GAC3Cynb,EAAaznb,SAAS,IAAMynb,EAAaznb,SAAS3d,OAAS,IAC3D6zD,EAAQuxY,EAAaznb,SAAS,GAC9B2zB,EAAQsjZ,WAAW2Q,EAAS1xY,MAAM,GAAIA,EAAO/f,SAG5Bp1C,IAArB6mc,EAASlra,SACT92B,KAAKoub,iCAAiCyT,EAAcG,EAASlra,UAGrE8ia,EAAav+b,UAAUsmc,gCAAkC,SAAUphc,EAAMu2D,EAAW3J,EAAWpf,GAC3F,IAEI+zZ,EAFApyB,EAAc54W,EAAU39B,MAAMy0X,SAASD,WAAW+hB,YAClDsuB,EAAiBz9b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GAAGA,SAAS,QAEvCjf,IAAxBu0a,EAAY1jL,UACZ81M,EAAcvhc,EAAK44B,MAAMy0X,SAASD,WAAW+hB,YAAY1jL,QACzDhsP,KAAK+hc,mBAAmBxhc,EAAMmva,EAAY1jL,QAAS81M,EAAa9D,EAAe5jb,SAAS,GAAI08C,EAAW3J,EAAWpf,SAE3F5yC,IAAvBu0a,EAAYr3Y,SACZypa,EAAcvhc,EAAK44B,MAAMy0X,SAASD,WAAW+hB,YAAYr3Y,OACzDr4B,KAAK+hc,mBAAmBxhc,EAAMmva,EAAYr3Y,OAAQypa,EAAa9D,EAAe5jb,SAAS,GAAI08C,EAAW3J,EAAWpf,SAEzF5yC,IAAxBu0a,EAAYC,UACZmyB,EAAcvhc,EAAK44B,MAAMy0X,SAASD,WAAW+hB,YAAYC,QACzD3va,KAAK+hc,mBAAmBxhc,EAAMmva,EAAYC,QAASmyB,EAAa9D,EAAe5jb,SAAS,GAAI08C,EAAW3J,EAAWpf,IAEtH,IAAK,IAAI3vC,EAAK,EAAGyE,EAAKtC,EAAK6sZ,SAAUhvZ,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIua,EAAO9V,EAAGzE,GACV25C,EAAYhK,EAAQ2sB,UAAU/hD,GAClC,OAAQo/B,EAAUuiB,cACd,IAAK,UACGo1W,EAAY1jL,cAA2C7wP,IAAhCu0a,EAAY1jL,QAAQl1N,SAC3CiX,EAAQohY,wBAAwBp3X,MAAiBuiB,aAAc,YAEnE,MACJ,IAAK,SACGo1W,EAAYr3Y,aAAyCl9B,IAA/Bu0a,EAAYr3Y,OAAOvB,SACzCiX,EAAQohY,wBAAwBp3X,MAAiBuiB,aAAc,WAEnE,MACJ,IAAK,UACGo1W,EAAYC,cAA2Cx0a,IAAhCu0a,EAAYC,QAAQ74Y,SAC3CiX,EAAQohY,wBAAwBp3X,MAAiBuiB,aAAc,eAOnFs/X,EAAav+b,UAAU4mc,aAAe,SAAUt4b,EAAQu4b,QAC9B/mc,IAAlBwO,EAAOoM,SACPmsb,EAAansb,OAASpM,EAAOoM,OAC7Bmsb,EAAa9nb,SAAS,GAAGrE,OAASpM,EAAOoM,OACzCmsb,EAAa9nb,SAAS,GAAGrE,OAAyB,IAAhBpM,EAAOoM,OACzCmsb,EAAa9nb,SAAS,GAAGrE,OAAyB,IAAhBpM,EAAOoM,aAExB5a,IAAjBwO,EAAOqM,QACPksb,EAAalsb,MAAQrM,EAAOqM,MAC5Bksb,EAAa9nb,SAAS,GAAGpE,MAAQrM,EAAOqM,MACxCksb,EAAa9nb,SAAS,GAAGpE,MAAuB,IAAfrM,EAAOqM,MACxCksb,EAAa9nb,SAAS,GAAGpE,MAAuB,IAAfrM,EAAOqM,QAIhD4jb,EAAav+b,UAAUimc,0BAA4B,SAAU/gc,EAAM4sD,EAAWwgW,EAAY5gZ,EAAGswb,EAAenoV,GAC5F30G,EAAK44B,MAAjB,IACI4ja,EAAiBx8b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GACnDnI,EAAiD,gBAAxC1R,EAAK44B,MAAMy0X,SAASD,WAAWjnZ,KAA0B,EAAI,GACjD,IAArBinZ,EAAWqvC,MACXD,EAAe3ib,SAAS,EAAInI,GAAO6kB,SAAU,EAG7Cima,EAAe3ib,SAAS,EAAInI,GAAO6kB,SAAU,EAEjD92B,KAAKohc,kBAAkBrE,EAAgBM,EAAenoV,EAAMnoG,EAAG,EAAIkF,IAGvE2nb,EAAav+b,UAAUkmc,6BAA+B,SAAUhhc,EAAMotZ,GACtDptZ,EAAK44B,MAAjB,IACI4ja,EAAkBx8b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GAAGA,SAAS,GACxC,YAAxBuzY,EAAWkwC,WACXd,EAAer4b,MAAMknD,YAAc,EACnCmxY,EAAer4b,MAAMinD,gBAAkB,OAEf,SAAxBgiW,EAAWkwC,WACXd,EAAer4b,MAAMknD,YAAc,EACnCmxY,EAAer4b,MAAMinD,gBAAkB,OAEf,UAAxBgiW,EAAWkwC,WACXd,EAAer4b,MAAMknD,YAAc,EACnCmxY,EAAer4b,MAAMinD,gBAAkB,QAI/CiuY,EAAav+b,UAAU2yZ,wBAA0B,SAAUztZ,EAAMu2B,EAASiX,GACtE,GAAIxtC,EAAK44B,MAAMy0X,SAASD,WAAWE,WAC5BttZ,EAAK44B,MAAMy0X,SAASD,WAAWE,UAAUpxZ,OAAS,EAErD,IAAK,IADDoxZ,EAAYttZ,EAAK44B,MAAMy0X,SAASD,WAAWE,UACtCpqY,EAAIoqY,EAAUpxZ,OAAS,EAAGgnB,GAAK,EAAGA,IAAK,CAC5C,IAAI0+a,EAAcp0Z,EAAQ2sB,UAAUmzV,EAAUpqY,IAC9C0+a,EAAYrra,QAAUA,EACtBiX,EAAQigX,wBAAwBm0C,EAAYpwb,QAASowb,EAAarra,GAC9DA,IACgC,UAA5Bqra,EAAYhpa,MAAMA,OAClBn5B,KAAK48b,mBAAmBuF,EAAaA,EAAYpwb,QAAQqI,SAAS,GAAGA,UAE7B,eAAxC+nb,EAAYhpa,MAAMy0X,SAASA,UAC3B5tZ,KAAK68b,wBAAwBsF,IAIrC,IAAK,IADD13Y,EAAa03Y,EAAY90C,QAAQ7yY,OAAO2nb,EAAY/0C,UAC/CjxZ,EAAIsuD,EAAWhuD,OAAS,EAAGN,GAAK,EAAGA,IAAK,CAC7C,IAAI47C,EAAYhK,EAAQ2sB,UAAUjQ,EAAWtuD,IAC7C47C,EAAUjhB,QAAUA,EACpBiX,EAAQigX,wBAAwBj2W,EAAUhmC,QAASgmC,EAAWjhB,IAItEA,IACyB,UAArBv2B,EAAK44B,MAAMA,OACXn5B,KAAK48b,mBAAmBr8b,EAAMA,EAAKwR,QAAQqI,SAAS,GAAGA,UAEtB,eAAjC7Z,EAAK44B,MAAMy0X,SAASA,UACpB5tZ,KAAK68b,wBAAwBt8b,GAEI,SAAjCA,EAAK44B,MAAMy0X,SAASA,UACC,aAArBrtZ,EAAK44B,MAAMA,OAAgE,SAAxC54B,EAAK44B,MAAMy0X,SAASD,WAAWkuC,OAClEt7b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GAAGA,SAAS,GAAG0c,SAAU,KAKvE8ia,EAAav+b,UAAUmmc,8BAAgC,SAAUjhc,EAAM4sD,EAAWwgW,EAAY5gZ,EAAGswb,EAAenoV,EAAMnnE,GAClH,IAAI+uZ,EAAcv8b,EAAK44B,MAAMy0X,SAASD,WAAWhkZ,OAAOlN,OACpDsgc,EAAiBx8b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GACnDnI,EAAiD,gBAAxC1R,EAAK44B,MAAMy0X,SAASD,WAAWjnZ,KAA0B,EAAI,GAC7C,IAAzBinZ,EAAWI,WACX/tZ,KAAKguZ,wBAAwBztZ,GAAM,EAAMwtC,GACzCgvZ,EAAe3ib,SAASnI,EAAQ6qb,GAAahma,SAAU,IAGvD92B,KAAKguZ,wBAAwBztZ,GAAM,EAAOwtC,GAC1CgvZ,EAAe3ib,SAASnI,EAAQ6qb,GAAahma,SAAU,GAE3D92B,KAAKohc,kBAAkBrE,EAAgBM,EAAenoV,EAAMnoG,EAAG,EAAI+vb,IAGvElD,EAAav+b,UAAUomc,iCAAmC,SAAUlhc,EAAM4sD,EAAWwgW,EAAY5gZ,EAAGswb,EAAenoV,GAC/G,IAAI6nV,EAAiBx8b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GACnDnI,EAAiD,gBAAxC1R,EAAK44B,MAAMy0X,SAASD,WAAWjnZ,KAA0B,EAAI,GAC1C,IAA5BinZ,EAAWsuC,aACXc,EAAe3ib,SAAS,EAAInI,GAAO6kB,SAAU,EAG7Cima,EAAe3ib,SAAS,EAAInI,GAAO6kB,SAAU,EAEjD92B,KAAKohc,kBAAkBrE,EAAgBM,EAAenoV,EAAMnoG,EAAG,EAAIkF,IAGvE2nb,EAAav+b,UAAUqmc,yBAA2B,SAAUnhc,EAAM4sD,EAAWwgW,EAAY5gZ,EAAGswb,EAAenoV,GACvGl1G,KAAK+gc,2BAA2Bxgc,EAAMA,EAAMwM,EAAGswb,EAAenoV,EAAM,IAGxE0kV,EAAav+b,UAAUs2b,oBAAsB,SAAUjlY,EAAcS,EAAWq7X,EAAYz6Y,GACxF,IAAIq0Z,EAAW5Z,EAAWrvZ,MAU1B,YAT0Bh+B,IAAtBinc,EAASC,WACT31Y,EAAe1sD,KAAKsic,YAAY51Y,EAAcS,EAAWq7X,EAAYz6Y,SAE5C5yC,IAAzBinc,EAASG,cACT71Y,EAAe1sD,KAAKwic,eAAe91Y,EAAcS,EAAWq7X,EAAYz6Y,SAEnD5yC,IAArBinc,EAASzhc,UACT+rD,EAAe1sD,KAAKyic,WAAW/1Y,EAAcS,EAAWq7X,EAAYz6Y,IAEjE2e,GAGXktY,EAAav+b,UAAUinc,YAAc,SAAU51Y,EAAcS,EAAWq7X,EAAYz6Y,GAQhF,GAPoC,WAA/By6Y,EAAWrvZ,MAAc,WAC1B4U,EAAQohY,wBAAwBziX,EAAcS,GAC1CzmD,KAAM,WACNw2C,iBAAmB/jB,MAAO,QAASz0B,OAAS05B,KAAM,YAEtDsuB,EAAa36C,QAAQqI,SAAS,GAAG0c,SAAU,GAEX,YAA/B0xZ,EAAWrvZ,MAAc,SAAiB,CAC3C4U,EAAQohY,wBAAwBziX,EAAcS,GAC1CzmD,KAAM,WACNw2C,iBAAmB/jB,MAAO,QAASz0B,OAAS05B,KAAM,UAClD4e,iBAAmB7jB,MAAO,UAE9B,IAAIoR,EAAU,IAAIsP,GAEd8vW,GADU,IAAI9vW,QACA,GAClBtP,EAAUmiB,EAAas8V,kBAAkBt8V,EAAcniB,GAEvD,IAAK,IADDg/W,EAAc78V,EAAaxH,mBACtBzhC,EAAI,EAAGA,EAAI8lY,EAAY9sZ,OAAS,EAAGgnB,IACxChnB,QAAkBiwD,EAAapa,SAASi3W,EAAY9lY,GAAI8lY,EAAY9lY,EAAI,IACxEkmY,EAAcj9V,EAAaonS,SAASy1D,EAAY9lY,GAAI8lY,EAAY9lY,EAAI,IAExEipC,EAAa36C,QAAQqI,SAAS,GAAG5d,KAAOmtZ,EAAY,GACpDj9V,EAAa36C,QAAQqI,SAAS,GAAG9W,GAAKopD,EAAappD,GAAK,IAAOklb,EAAWrvZ,MAAc,SACxFuzB,EAAa36C,QAAQqI,SAAS,GAAGvO,QAAU89Y,EAAY,GAAG58Y,EAC1D2/C,EAAa36C,QAAQqI,SAAS,GAAGnO,QAAU09Y,EAAY,GAAG38Y,EAC1D0/C,EAAa36C,QAAQqI,SAAS,GAAGksC,YAAc,GAC/CoG,EAAa36C,QAAQqI,SAAS,GAAG/M,UAAY6zY,GAAUM,KAU3D,MARoC,gBAA/BgnC,EAAWrvZ,MAAc,WAC1B4U,EAAQohY,wBAAwBziX,EAAcS,GAC1CzmD,KAAM,WACNw2C,iBAAmB/jB,MAAO,QAASz0B,OAAS05B,KAAM,UAClD4e,iBAAmB7jB,MAAO,UAAWnjB,MAAO,GAAID,OAAQ,GAAIrR,OAAS05B,KAAM,YAE/EsuB,EAAa36C,QAAQqI,SAAS,GAAG0c,SAAU,GAExC41B,GAGXktY,EAAav+b,UAAUmnc,eAAiB,SAAU91Y,EAAcS,EAAWq7X,EAAYz6Y,GAsBnF,MArBuC,YAAlCy6Y,EAAWrvZ,MAAiB,aAC7B4U,EAAQohY,wBAAwBziX,EAAcS,GAC1CzmD,KAAM,WAAYhC,OAASinD,gBAAiB,QAC5CzO,iBAAmB/jB,MAAO,QAASz0B,OAAS05B,KAAM,UAClD4e,iBAAmB7jB,MAAO,UAGK,gBAAlCqvZ,EAAWrvZ,MAAiB,aAC7B4U,EAAQohY,wBAAwBziX,EAAcS,GAC1CzmD,KAAM,WAAYhC,OAASinD,gBAAiB,OAC5CzO,iBAAmB/jB,MAAO,QAASz0B,OAAS05B,KAAM,UAClD4e,iBAAmB7jB,MAAO,UAGK,kBAAlCqvZ,EAAWrvZ,MAAiB,aAC7B4U,EAAQohY,wBAAwBziX,EAAcS,GAC1CzmD,KAAM,WAAYhC,OAASinD,gBAAiB,OAC5CzO,iBAAmB/jB,MAAO,QAASz0B,OAAS05B,KAAM,UAClD4e,iBAAmB7jB,MAAO,QAASnjB,MAAO,EAAGD,OAAQ,GAAIrR,OAAS05B,KAAM,YAGzEsuB,GAGXktY,EAAav+b,UAAUonc,WAAa,SAAU/1Y,EAAcS,EAAWq7X,EAAYz6Y,GAC/E,IACIpsB,EACA6pB,EACJ,GAAkC,YAA7B2hB,EAAUh0B,MAAa,SACxB,QAAmCh+B,IAA9Bqtb,EAAWrvZ,MAAa,QAAiB,CAC1C,GAAoC,sBAA9BqvZ,EAAWrvZ,MAAa,SACM,yBAA9BqvZ,EAAWrvZ,MAAa,QAA+B,CACzD,IAAIoR,EAAU,IAAIsP,GAClBtP,EAAUmiB,EAAas8V,kBAAkBt8V,EAAcniB,GAEvD,IAAK,IADDg/W,EAAc78V,EAAaxH,mBACtBzhC,EAAI,EAAGA,EAAI8lY,EAAY9sZ,OAAS,EAAGgnB,IAAK,CAC7ChnB,QAAkBiwD,EAAapa,SAASi3W,EAAY9lY,GAAI8lY,EAAY9lY,EAAI,IACxE,IAAIi/a,EAZA,GAYYjmc,OACZA,QAAUimc,IACV/gb,EAAQs3B,GAAUswW,EAAY9lY,GAAI8lY,EAAY9lY,EAAI,IAClD+nB,EAAK2G,GAAM9kC,UAAUk8Y,EAAY9lY,GAAI9B,EAAO+gb,KAIxDh2Y,EAAa36C,QAAQqI,SAAS,GAAG9W,GAAKopD,EAAappD,GAAK,IAAOklb,EAAWrvZ,MAAa,QACvFuzB,EAAa36C,QAAQqI,SAAS,GAAGpE,MAAQ,GACzC02C,EAAa36C,QAAQqI,SAAS,GAAGrE,OAAS,GAC1C22C,EAAa36C,QAAQqI,SAAS,GAAG5d,KAAO,yDACxCkwD,EAAa36C,QAAQqI,SAAS,GAAG0yC,oBAAsB,SACvDJ,EAAa36C,QAAQqI,SAAS,GAAG2yC,kBAAoB,SACrDL,EAAa36C,QAAQqI,SAAS,GAAG/M,UAAY6zY,GAAUM,KACvD90V,EAAa36C,QAAQqI,SAAS,GAAG1V,MAAM05B,KAAsC,yBAA9BoqZ,EAAWrvZ,MAAa,QACnE,YAAc,QAClBuzB,EAAa36C,QAAQqI,SAAS,GAAGvO,QAAU2/B,EAAGz+B,EAC9C2/C,EAAa36C,QAAQqI,SAAS,GAAGnO,QAAUu/B,EAAGx+B,OAGf,yBAA7BmgD,EAAUh0B,MAAa,SACC,sBAA7Bg0B,EAAUh0B,MAAa,UACW,YAA9BqvZ,EAAWrvZ,MAAa,QACzBuzB,EAAa36C,QAAQqI,SAAS,GAAG1V,MAAM05B,KAAsC,yBAA9BoqZ,EAAWrvZ,MAAa,QACnE,YAAc,QAGlBuzB,EAAa36C,QAAQqI,SAAS,GAAG0c,SAAU,GAGnD,OAAO41B,GAIXktY,EAAav+b,UAAUshc,qBAAuB,SAAUrgc,EAAOyV,EAASiE,EAAOD,GAC3EhE,EAAQqI,SAAS,GAAGpE,MAAQA,EAC5BjE,EAAQqI,SAAS,GAAGrE,OAASA,EAE7B,IAAI4sb,EAAY5wb,EAAQqI,SAAS,GACjCuob,EAAU3sb,MAAgB,IAARA,EAClB2sb,EAAU5sb,OAAkB,IAATA,EACnB,IAAI0mb,EAAc1qb,EAAQqI,SAAS,GACb,YAAlB9d,EAAMoqB,SACN+1a,EAAYzmb,MAAgB,IAARA,EACpBymb,EAAY1mb,OAAkB,GAATA,IAGrB0mb,EAAYzmb,MAAgB,GAARA,EACpBymb,EAAY1mb,OAAkB,GAATA,IAI7B6jb,EAAav+b,UAAU4pb,qBAAuB,SAAU1kb,EAAMwtC,EAAS+jR,EAAID,GACvE,IAAI+wI,EAAkBric,EAAK+C,GAAGpG,MAAM,KACpC,GAA2B,mBAAvB0lc,EAAgB,GAEhB,IAAK,IADDnic,OAAa,EACRgjB,EAAI,EAAGA,EAAIljB,EAAK8sZ,QAAQ5wZ,OAAQgnB,IAAK,CAC1C,IAAIs0B,EAAYhK,EAAQ2sB,UAAUn6D,EAAK8sZ,QAAQ5pY,IAC3Cs0B,IACAt3C,EAAastC,EAAQ2sB,UAAU3iB,EAAUxI,WAE7C,IAAIhyC,GAAUwP,EAAGxM,EAAKsL,QAAUimT,EAAI9kT,EAAGzM,EAAK0L,QAAU4lT,GAClD7yS,EAAM+4B,EAAU/I,YAChB/T,EAAWkX,GAAMgH,WAAW57C,EAAOyhB,GACnC2C,EAAQwwB,GAAM8G,UAAUj6B,EAAKzhB,GACjC,GAAIkD,EAAW04B,MAAMi3B,YACjB,IAAK,IAAIrjD,EAAI,EAAGA,EAAKtM,EAAW04B,MAAiB,YAAE18B,OAAQsQ,IACvD,GAAKtM,EAAW04B,MAAiB,YAAEpsB,GAAGzJ,KAAOs/b,EAAgBA,EAAgBnmc,OAAS,GAIlF,OAHCgE,EAAW04B,MAAMi3B,YAAYrjD,GAAItQ,OAASw+B,EAC1Cx6B,EAAW04B,MAAMi3B,YAAYrjD,GAAI4U,MAAQA,EAC1C3hB,KAAKi/b,kBAAkBx+b,EAAWsR,QAAQgkB,OAAQx1B,EAAKwR,QAASxU,EAAOgD,IAChE,EAM3B,QAAIA,EAAK4sZ,YACLntZ,KAAKsyG,KAAK/xG,EAAMuxT,EAAID,EAAI9jR,IACjB,IAIf6rZ,EAAav+b,UAAUokc,uBAAyB,SAAUtsa,EAAO4C,GAC7D,IACIuwB,EAAc,EAClB,OAFgBhX,GAAiBnc,EAAO4C,EAAQA,IAG5C,IAAK,QACDuwB,EAAc,EACd,MACJ,IAAK,OACDA,EAAc,IACd,MACJ,IAAK,SACDA,EAAc,GACd,MACJ,IAAK,MACDA,EAAc,IAGtB,OAAOA,GAEXszY,EAAav+b,UAAUu/b,sBAAwB,SAAUt+b,EAAOyV,EAASiE,EAAOD,GAC5EhE,EAAQqI,SAAS,GAAGpE,MAAQA,EAC5BjE,EAAQqI,SAAS,GAAGrE,OAASA,EAC7BhE,EAAQqI,SAAS,GAAGpE,MAAgB,IAARA,EAC5BjE,EAAQqI,SAAS,GAAGrE,OAAkB,IAATA,GAEjC6jb,EAAav+b,UAAUglc,0BAA4B,SAAU/jc,EAAOyV,EAASiE,EAAOD,GAChFhE,EAAQqI,SAAS,GAAGpE,MAAQA,EAC5BjE,EAAQqI,SAAS,GAAGrE,OAASA,GAEjC6jb,EAAav+b,UAAU4lc,uBAAyB,SAAUrzC,EAAU77Y,EAASiE,EAAOD,EAAQxV,GAExFwR,EAAQqI,SAAS,GAAGpE,MAAQA,EAC5BjE,EAAQqI,SAAS,GAAGrE,OAASA,EAC7BhE,EAAQqI,SAAS,GAAGA,SAAS,GAAGpE,MAAQA,EACxCjE,EAAQqI,SAAS,GAAGA,SAAS,GAAGrE,OAASA,EACR,gBAA7B63Y,EAASD,WAAWjnZ,OACpBqL,EAAQqI,SAAS,GAAGA,SAAS,GAAGpE,MAAQ3J,KAAKC,IAAI0J,EAAQ,EAAG,GAC5DjE,EAAQqI,SAAS,GAAGA,SAAS,GAAGrE,OAAS1J,KAAKC,IAAIyJ,EAAS,EAAG,GAC9DhE,EAAQqI,SAAS,GAAGA,SAAS,GAAGpE,MAAQA,EACxCjE,EAAQqI,SAAS,GAAGA,SAAS,GAAGrE,OAASA,GAE7C,IACIhJ,EAEAuub,EAHAD,EAAW,IAAIjuY,GAEfj+B,EAAOnvB,KAAK2gB,QAAQpgB,EAAM86b,GAS1BG,EAA0B,IAL1BF,EADsB,SAAtB1tC,EAASA,SACI5tZ,KAAKu7b,kBAAkBh7b,GAGvBP,KAAKs9b,wBAAwB/8b,IAG1C20G,GAAQl/F,GAASmZ,EAAKnZ,OAAS,EAE/BjJ,EADe,IAAfuub,EACIpmV,EAAO,EAGPA,EAAQsmV,EAAa,EAbb,GAaoBF,EAAa,GAAkB,EAEnE,IAAK,IAAIn/b,EAAI,EAAGA,EAAI4V,EAAQqI,SAAS,GAAGA,SAAS3d,OAAQN,IACjD4V,EAAQqI,SAAS,GAAGA,SAASje,GAAG26B,UAC/B/kB,EAAQqI,SAAS,GAAGA,SAASje,GAAGmH,GAAG/E,QAAQ,UAAY,GACpDwT,EAAQqI,SAAS,GAAGA,SAASje,GAAGmH,GAAG/E,QAAQ,oBAAsB,GACjEwT,EAAQqI,SAAS,GAAGA,SAASje,GAAGmH,GAAG/E,QAAQ,aAAe,GAC1DwT,EAAQqI,SAAS,GAAGA,SAASje,GAAGmH,GAAG/E,QAAQ,iBAAmB,KAClEwT,EAAQqI,SAAS,GAAGA,SAASje,GAAG8gC,OAAOzwB,KAAOO,EAC9CA,GAAKgF,EAAQqI,SAAS,GAAGA,SAASje,GAAGs9C,WAAWzjC,MAtBxC,IA0BpB4jb,EAAav+b,UAAU+yb,iCAAmC,SAAUptb,EAAS81B,GACzE,GAAI91B,aAAmB4vD,GACnB,IAAK,IAAIz0D,EAAI,EAAGA,EAAI6E,EAAQoZ,SAAS3d,OAAQN,IACzC6D,KAAKoub,iCAAiCptb,EAAQoZ,SAASje,GAAI26B,GAGnE91B,EAAQ81B,QAAUA,GAOtB8ia,EAAav+b,UAAUiX,QAAU,aAQjCsnb,EAAav+b,UAAU0kC,cAAgB,WAInC,MAAO,QAEJ65Z,KAkBP5+X,IACAlyD,MAAS,sKAET0yI,QAAW,+CACXihR,WAAc,sVAIdomC,WAAc,mHAEdpF,eAAkB,4OAIlBviY,IAEAsgF,QAAW,yDACXsnT,MAAS,4qBAOTlic,MAAS,iHACTmic,WAAc,oFACdpxS,OAAU,0HACVqxS,aAAgB,iFAChBC,YAAe,qGACfC,KAAQ,yFACRC,OAAU,oCACVC,UAAa,4GACbC,SAAY,2FACZC,SAAY,8IAGZloY,IACAqwI,KAAQ,GAER83P,UAAa,2KAGbC,UAAa,sSAIbF,SAAY,wHAEZv7b,QAAW,iVAIX07b,WAAc,qZAKdC,oBAAuB,6HAGvBC,mBAAsB,mMAGtBroY,IACAmwI,KAAQ,GACRm4P,QAAW,yvBAOXC,QAAW,gLAEXC,KAAQ,gJAERC,qBAAwB,6eAKxBC,OAAU,g5FA2BVC,aAAgB,+XAIhBC,KAAQ,osDAeRC,OAAU,0zBAQV3oY,IACAiwI,KAAQ,GACR24P,SAAY,2fAKZC,sBAAyB,iJAEzBC,sBAAyB,0OiXr1EzBC,GAAmC,WAKnC,SAASA,KA8ZT,OA1ZAA,EAAkBlpc,UAAUwmb,eAAiB,SAAUpoX,EAAM1rB,GACzD,IACIhY,EADAyua,KAGJ,GADA/qY,EAAKqvV,WvX0Cb,SAA0B/wW,EAAWhK,GAWjC,OATIgK,EAAUoG,YAAcC,GAAqBqmZ,SACrC1sZ,EAAUoG,YAAcC,GAAqBqmZ,SAEhD1sZ,EAAUoG,YAAcC,GAAqBsmZ,gBAC1C32Z,EAAQoQ,YAAciD,GAAmBqjZ,SAGzC,EuXlDJE,CAAUlrY,EAAM1rB,GAAU,CAE1B,IAAI62Z,EAAU5kc,KAAKm4C,UAAUshB,GAC7B1jC,EAASR,GAAK+vB,SAASs/Y,GAKvB,IAAK,IAJDC,EAAgBprY,EAAKqrY,YACrBC,EAASh3Z,EAAQmc,gBACjBjrC,GAAS,EACTk/Z,EAAQpwY,EAAQ0c,WACX8uG,EAAI,EAAGA,EAAI4kR,EAAM1hb,OAAQ88J,IAAK,CACnC,IAAIyrS,EAAa7mB,EAAM5kR,GACvB,GAAI9/F,GAAQurY,GAAcvrY,EAAKn2D,KAAO0hc,EAAW1hc,GAAI,CACjD,IAAI2hc,EAAUjlc,KAAKm4C,UAAU6sZ,GACzBpyY,EAAUr9B,GAAK+vB,SAAS2/Y,GAC5B,GAAIjlc,KAAKklc,eAAenva,EAAQ68B,GAAU,CACtC,IAAIuyY,EAAenlc,KAAKo6C,UAAUwqZ,EAASK,GAAS,EAAOF,GAAQ,GACnE,GAAII,EAAa1oc,OAAS,EACtB,IAAK,IAAIN,EAAI,EAAGA,EAAIgpc,EAAa1oc,OAAQN,IAAK,CAC1C,IACI8+B,EAAW,EACXqqY,EAAe,EACf1tY,EAAa,EACb76B,EAAMiD,KAAKolc,yBAAyB3rY,EAAM0rY,EAAahpc,IAC3D,IAAwB,IAApBY,EAAI66B,WAAmB,CACvBqD,EAAWl+B,EAAIsoc,oBACFtoc,EAAIuoc,WACjBhgC,EAAevoa,EAAIuoa,aACnB1tY,EAAa76B,EAAI66B,WACjB,IAAI2ta,EAAWvlc,KAAKqyD,iBAAkBp3B,EAAY4pa,EAAgB,EAAKD,GACnEY,EAAWxlc,KAAKqyD,iBAAkBp3B,EAAY4pa,EAAgB,EAAKD,GAGnE5kc,KAAKoyC,aAAaozZ,KAClBA,EAAWD,GAEf,IAAIhoc,OAAQ,EACRyhB,OAAM,EACVzhB,EAAQk8D,EAAKzqB,YAEThwB,EADc,aAAdy6C,EAAK/yD,KACC+yD,EAAKxiB,YAGLwiB,EAAKvU,mBAAmBttB,GAElC,IAAIjW,EAAQ3hB,KAAKylc,iBAAiBloc,EAAOyhB,GACzC,GAAIwlb,EAAW/nc,OAAQ,CACnB,IAAI05C,OAAa,EACjBA,EAAasjB,EAAKzqB,YAClB,IAAI02Z,EAAMr5b,KAAKE,IAAIvM,KAAK2lc,kBAAkBxvZ,EAAYqvZ,IAClDI,EAAO,EACPC,GAAY,EAChB5mb,GAAS,EACT,IAAK,IAAIoH,EAAI,EAAGA,EAAIm+a,EAAWl/B,GAAcxc,QAAQrsZ,OAAQ4pB,IAAK,CAC9DpH,IACA,IAAI6mb,EAAStB,EAAWl/B,GAAcxc,QAAQziY,GAE9C,GADAu/a,EAAOv5b,KAAKE,IAAIvM,KAAK2lc,kBAAkBxvZ,EAAY2vZ,EAAOpuZ,WACtDguZ,EAAME,EAAM,CACZC,EAAW5mb,EACX,OAGR,GAAI4mb,GAAY,EAAG,CACf,IAAI1jX,OAAQ,GACZA,EAAQniF,KAAK+lc,cAAcR,EAAUC,EAAU7jb,EAAOojb,EAAQnta,EAAY6hC,EAAM1rB,IAC1E5mC,OAAS69b,EAAW1hc,GAC1Bkhc,EAAWl/B,GAAcxc,QAAQrgY,OAAOo9a,EAAU,EAAG1jX,GACrDqiX,EAAWl/B,GAAcxc,QAAQvnY,OACjCijb,EAAWl/B,GAAc0gC,iBAAiBv9a,OAAOo9a,EAAU,EAAGN,GAC9Df,EAAWl/B,GAAc0gC,iBAAiBzkb,OAC1Cijb,EAAWl/B,GAAcA,aAAeA,MAEvC,CACGnjV,OAAQ,GACZA,EAAQniF,KAAK+lc,cAAcR,EAAUC,EAAU7jb,EAAOojb,EAAQnta,EAAY6hC,EAAM1rB,IAC1E5mC,OAAS69b,EAAW1hc,GAC1Bkhc,EAAWl/B,GAAcxc,QAAQtkZ,KAAK29E,GACtCqiX,EAAWl/B,GAAc0gC,iBAAiBxhc,KAAK+gc,GAC/Cf,EAAWl/B,GAAcA,aAAeA,QAI5C,IAAKnrX,MAAMorZ,EAASx4b,KAAOotC,MAAMorZ,EAASv4b,KAAOhN,KAAKoyC,aAAaozZ,GAAW,CAC1E,IAAIS,OAAO,EAIPC,GACAp9C,WAAek9C,oBAAyB1gC,aAAcA,IAF1D2gC,EAAOjmc,KAAK+lc,cAAcR,EAAUC,EAAU7jb,EAAOojb,EAAQnta,EAAY6hC,EAAM1rB,IAI1E5mC,OAAS69b,EAAW1hc,GACzB,IAAI6ic,KAEJA,EAAS3hc,KAAK+gc,MACL/gc,KAAKghc,GACdhB,EAAWl/B,GAAgB4gC,EAC3B1B,EAAWl/B,GAAcxc,QAAQtkZ,KAAKyhc,GACtCzB,EAAWl/B,GAAc0gC,iBAAmBG,EAC5C3B,EAAWl/B,GAAcA,aAAeA,OAS9C,IAAtBk/B,EAAW/nc,QACXuD,KAAKomc,YAAY5B,EAAY/qY,EAAMorY,KAK/CN,EAAkBlpc,UAAU+qc,YAAc,SAAUC,EAAYtuZ,EAAW8sZ,GACvE,IAAK,IAAI1oc,EAAI,EAAGA,EAAIkqc,EAAW5pc,OAAQN,IAAK,CAExC,IAAK,IADDivZ,EAASi7C,EAAWlqc,GACfkqB,EAAI,EAAGA,EAAI+kY,EAAOtC,QAAQrsZ,OAAQ4pB,IACvC,GAAI8rB,GAAMgH,WAAWiyW,EAAOtC,QAAQziY,GAAGqxB,SAAU0zW,EAAOtC,QAAQziY,EAAI,GAAGqxB,UAAYmtZ,EAAe,CAC9Fz5C,EAAOtC,QAAQziY,EAAI,GAAGqxB,SAAW0zW,EAAOtC,QAAQziY,GAAGqxB,SACnD,IAAI4uZ,EAAYl7C,EAAOtC,QAAQziY,EAAI,GAC/BkqE,EAAMvwF,KAAKumc,oBAAoBD,EAAU9oZ,WAAY8oZ,EAAU5uZ,SAAU4uZ,EAAU3kb,MAAOkjb,EAAeyB,EAAU79Z,OACvH2iX,EAAOtC,QAAQziY,EAAI,GAAGnJ,KAAOqzE,EAC7B66T,EAAOtC,QAAQrgY,OAAOpC,EAAG,GACzB+kY,EAAO46C,iBAAiBv9a,OAAOpC,EAAG,GAClCA,IAGE0xB,EAAU/I,YACpB,IAAK,IAAIvrB,EAAI,EAAGA,EAAI2nY,EAAOtC,QAAQrsZ,OAAQgnB,IAAK,EACxC6ib,EAAYl7C,EAAOtC,QAAQrlY,IAEfi0B,SAChBK,EAAU+wW,QAAQtkZ,KAAK8hc,MAKnC/B,EAAkBlpc,UAAU0qc,cAAgB,SAAUv6C,EAAIxsY,EAAK2C,EAAOkT,EAAW5iB,EAAOwnD,EAAM1rB,GAC1F,IAAIwiD,EACA9nD,EACAvrB,GACAyE,MAAO,EAAG+1B,UAAY3qC,EAAG,EAAGC,EAAG,GAAK7F,OAAQ,GAAI+V,KAAM,GACtDmuY,mBAAoB,EAAG7tW,YAAczwC,EAAG,EAAGC,EAAG,GAAKy7B,MAAO,EAAGm/S,UAAU,GAU3E,OARAn/S,EAAQzoC,KAAKshY,eAAe3/W,EAAOkT,EAAW4kC,EAAM1rB,GACpDwiD,EAAMvwF,KAAKumc,oBAAoB/6C,EAAIxsY,EAAK2C,EAAO83C,EAAKqrY,YAAar8Z,GACjEvrB,EAAKA,KAAOqzE,EACZrzE,EAAKsgC,WAAaguW,EAClBtuY,EAAKw6B,SAAW14B,EAChB9B,EAAKyE,MAAQA,EACbzE,EAAKmuY,kBAAoBp5Y,EACzBiL,EAAKurB,MAAQA,EACNvrB,GAGXqnb,EAAkBlpc,UAAUkrc,oBAAsB,SAAUC,EAASC,EAAO9kb,EAAOmjb,EAAar8Z,GAE5F,MADW,KAAOq8Z,EAAc,EAAI,IAAMA,EAAc,EAAI,IAAMnjb,EAAQ,QAAU8mB,EAAQ,IAAMg+Z,EAAM15b,EAAI,IAAM05b,EAAMz5b,GAI5Hu3b,EAAkBlpc,UAAUimY,eAAiB,SAAU3/W,EAAOuoC,EAAiBnS,EAAWhK,GACtF,IACItF,EADAi+Z,EAASr6b,KAAKE,IAAIoV,GAEtB,OAAQuoC,GACJ,IAAK,MACL,IAAK,SACDzhB,EAAQ,EACJi+Z,GAAU,GAAKA,GAAU,KACzBj+Z,EAAQ,GAEZ,MACJ,IAAK,OACL,IAAK,QACDA,EAAQ,EACJ9mB,EAAQ,GAAKA,IAAU,MACvB8mB,EAAQ,GAYpB,MARwB,UAApByhB,GAAmD,WAApBA,IAE3BzhB,EADU,IAAVA,EACQ,EAGA,GAGTA,GAGX87Z,EAAkBlpc,UAAUg3D,iBAAmB,SAAU51D,EAAQg3C,GAI7D,IAAK,IAFDm4T,EADA8jD,EAAM,EAENnoJ,GAAUx6P,EAAG,EAAGC,EAAG,GACd7Q,EAAI,EAAGA,EAAIs3C,EAAIh3C,OAAQN,IAAK,CACjC,IAAIqvC,EAAKiI,EAAIt3C,GACb,GAAKyvW,EAAL,CAKI,IAAIxjU,EAAIpoC,KAAK2lc,kBAAkB/5F,EAAKpgU,GACpC,GAAIkkX,EAAMtnX,EAAI3rC,EAAQ,CAClB,IAAI2gC,EAAI3gC,EAASizZ,EACb7kV,EAAM14B,GAAM8G,UAAU2yT,EAAKpgU,GAC3Bz+B,EAAIqwB,EAAI/wB,KAAKwV,IAAIgpD,EAAMx+D,KAAKkR,GAAK,KACjCvQ,EAAIowB,EAAI/wB,KAAKyV,IAAI+oD,EAAMx+D,KAAKkR,GAAK,KACrCgqP,GAAUx6P,EAAG6+V,EAAI7+V,EAAIA,EAAGC,EAAG4+V,EAAI5+V,EAAIA,GACnC,MAGA0iZ,GAAOtnX,EAGfwjU,EAAMpgU,OAjBFogU,EAAMpgU,EAmBd,OAAO+7N,GAGXg9L,EAAkBlpc,UAAU88C,UAAY,SAAUJ,GAC9C,IAAI9gB,KACJ,GAAI8gB,EAAUmN,qBAA0C,aAAnBnN,EAAUrxC,MAA0C,eAAnBqxC,EAAUrxC,MAC5E,IAAK,IAAI+c,EAAI,EAAGA,EAAIs0B,EAAUmN,mBAAmBzoD,OAAQgnB,IACrDwT,EAAOzyB,KAAKuzC,EAAUmN,mBAAmBzhC,IAGjD,OAAOwT,GAEXsta,EAAkBlpc,UAAU6pc,eAAiB,SAAUtkD,EAAOC,GAC1D,OAAWA,EAAM9zY,EAAK6zY,EAAM7zY,EAAI6zY,EAAM5qY,OAAY4qY,EAAM7zY,EAAK8zY,EAAM9zY,EAAI8zY,EAAM7qY,OACrE6qY,EAAM7zY,EAAK4zY,EAAM5zY,EAAI4zY,EAAM7qY,QAAc6qY,EAAM5zY,EAAK6zY,EAAM7zY,EAAI6zY,EAAM9qY,QAGhFwub,EAAkBlpc,UAAU++C,UAAY,SAAUwqZ,EAASK,EAAS0B,EAAMz8Y,EAAiB08Y,GACnFD,GAAQ1B,EAAQxoc,QAAU,IAC1Bwoc,EAAQx8a,OAAO,EAAG,GAClBw8a,EAAQx8a,OAAO,EAAG,IAGtB,IAAK,IADDwO,KACK96B,EAAI,EAAGA,EAAIyoc,EAAQnoc,OAAS,EAAGN,IAAK,CACzC,IAAIqvC,EAAKxrC,KAAK6mc,OAAOjC,EAAQzoc,GAAIyoc,EAAQzoc,EAAI,GAAI8oc,EAAS2B,EAAQ18Y,GAClE,GAAI1e,EAAG/uC,OAAS,EACZ,IAAK,IAAI4pB,EAAI,EAAGA,EAAImlB,EAAG/uC,OAAQ4pB,IAC3B4Q,EAAOzyB,KAAKgnC,EAAGnlB,IAGnBsgb,GAAQ1B,EAAQxoc,QAAU,GAC1Bwoc,EAAQx8a,OAAO,EAAG,GAG1B,OAAOwO,GAGXsta,EAAkBlpc,UAAUwrc,OAAS,SAAUL,EAASC,EAAOhzZ,EAAKmzZ,EAAQ18Y,GAExE,IAAK,IADD06Y,KACKzoc,EAAI,EAAGA,EAAIs3C,EAAIh3C,OAAS,EAAGN,IAAK,CACrC,IAAIg3B,EAAQnzB,KAAK8mc,WAAWN,EAASC,EAAOhzZ,EAAIt3C,GAAIs3C,EAAIt3C,EAAI,IAC5D,IAAK6D,KAAKoyC,aAAajf,GAAQ,CAC3B,IAAIxR,EAAQ3hB,KAAKylc,iBAAiBe,EAASC,GACvCC,EAAS1mc,KAAKylc,iBAAiBhyZ,EAAIt3C,GAAIs3C,EAAIt3C,EAAI,IAGnD,OAFAwlB,EAAQ3hB,KAAK+mc,uBAAuBplb,GACpC+kb,EAAS1mc,KAAK+mc,uBAAuBL,GAC7Bx8Y,GACJ,IAAK,OACL,IAAK,QACGvoC,EAAQ+kb,GACR9B,EAAQpgc,KAAK2uB,GAEjB,MACJ,IAAK,MACL,IAAK,SACGxR,EAAQ+kb,GACR9B,EAAQpgc,KAAK2uB,GAIrBxR,IAAU+kb,GAAUE,GACpBhC,EAAQpgc,KAAK2uB,IAIzB,OAAOyxa,GAEXL,EAAkBlpc,UAAU0rc,uBAAyB,SAAUplb,GAC3D,IACIqlb,EAAe36b,KAAKE,IAAIoV,GAO5B,OANIqlb,EAAe,GACR,IAAMA,EAGNA,GAIfzC,EAAkBlpc,UAAUyrc,WAAa,SAAUG,EAAQC,EAAMC,EAAQC,GACrE,IAGI5yG,EAAQ1iT,GAFI9xC,KAAKqnc,eAAeJ,EAAOl6b,EAAGk6b,EAAOj6b,EAAGk6b,EAAKn6b,EAAGm6b,EAAKl6b,GACrDhN,KAAKqnc,eAAeF,EAAOp6b,EAAGo6b,EAAOn6b,EAAGo6b,EAAKr6b,EAAGq6b,EAAKp6b,IAErE,OAAIwnV,EAAMrvU,QACCqvU,EAAM7uS,aALH54C,EAAG,EAAGC,EAAG,IAY3Bu3b,EAAkBlpc,UAAUgsc,eAAiB,SAAU7ra,EAAIC,EAAIC,EAAIC,GAC/D,OAASyc,GAAMxhB,OAAO4E,IAAO,EAAG6c,GAAMzhB,OAAO6E,IAAO,EAAG6c,GAAM1hB,OAAO8E,IAAO,EAAG6c,GAAM3hB,OAAO+E,IAAO,IAEtG4oa,EAAkBlpc,UAAU+2C,aAAe,SAAUjf,GACjD,OAAmB,IAAZA,EAAMpmB,GAAuB,IAAZomB,EAAMnmB,GAElCu3b,EAAkBlpc,UAAU+pc,yBAA2B,SAAUrtZ,EAAWuvZ,GAWxE,IAAK,IATDC,EAAU,IACV3va,GAAc,EACd0ta,EAAa,EACbhgC,GAAgB,EAChBrmZ,EAAQ,EACRuob,EAAqB,EACrB5oI,EAAM7mR,EAAU/I,YAChBy4Z,EAAc7oI,EACd3nS,KACK96B,EAAI,EAAGA,EAAI47C,EAAUmN,mBAAmBzoD,OAAQN,IAAK,CAC1D,IAAI6sC,EAAS+O,EAAUmN,mBAAmB/oD,GAC1C86B,EAAOzyB,KAAKwkC,GAEhB,IAAK,IAAIvlB,EAAI,EAAGA,EAAIwT,EAAOx6B,OAAQgnB,IAAK,CACpC,IAAIo7S,EAAM5nS,EAAOxT,GACbikb,EAAU1nc,KAAK2nc,SAAS9oI,EAAKD,EAAK0oI,EAASvvZ,GAC3C2vZ,EAAUH,IACVA,EAAUG,EACVF,EAAqBlC,EAAatlc,KAAK2lc,kBAAkB2B,EAASG,GAClEniC,EAAermZ,EACf2Y,EAAanU,GAEjB6hb,GAAcnzZ,GAAMgH,WAAW0lR,EAAKD,GACpCA,EAAMC,EACN4oI,EAAc5oI,EAOlB,OALA5/S,KAEIomb,oBAAqBmC,EAAoBlC,WAAYA,EACrDhgC,aAAcA,EAAc1tY,WAAYA,IAIhD2sa,EAAkBlpc,UAAUssc,SAAW,SAAUnB,EAASC,EAAOtza,EAAO4kB,GACpE,IACI6vZ,EAAOv7b,KAAKE,IAAIi6b,EAAQz5b,EAAI05b,EAAM15b,GAClC86b,EAAOx7b,KAAKE,IAAIi6b,EAAQx5b,EAAIy5b,EAAMz5b,GAClC86b,GAAQ30a,EAAMnmB,EAAIw5b,EAAQx5b,IAAMy5b,EAAMz5b,EAAIw5b,EAAQx5b,GAClD+6b,GAAQ50a,EAAMpmB,EAAIy5b,EAAQz5b,IAAM05b,EAAM15b,EAAIy5b,EAAQz5b,GACtD,IAAKgtF,SAAS+tW,KAAS/tW,SAASguW,IAAQ5tZ,MAAM2tZ,IAAQ3tZ,MAAM4tZ,IACxD,GAAIvB,EAAQz5b,IAAM05b,EAAM15b,EAAG,CACvB,GAAIy5b,EAAQx5b,IAAMy5b,EAAMz5b,EACpB,OAAO,IAEN,GAAMw5b,EAAQx5b,EAAImmB,EAAMnmB,GAAOmmB,EAAMnmB,EAAIy5b,EAAMz5b,GAASw5b,EAAQx5b,EAAImmB,EAAMnmB,GAAOmmB,EAAMnmB,EAAIy5b,EAAMz5b,EAClG,OAAOX,KAAKE,IAAIi6b,EAAQz5b,EAAIomB,EAAMpmB,QAGrC,GAAIy5b,EAAQx5b,IAAMy5b,EAAMz5b,IACnBw5b,EAAQz5b,EAAIomB,EAAMpmB,GAAOomB,EAAMpmB,EAAI05b,EAAM15b,GAASy5b,EAAQz5b,EAAIomB,EAAMpmB,GAAOomB,EAAMpmB,EAAI05b,EAAM15b,GAC7F,OAAOV,KAAKE,IAAIi6b,EAAQx5b,EAAImmB,EAAMnmB,QAK1C,IAAKw5b,EAAQz5b,GAAKomB,EAAMpmB,GAAKomB,EAAMpmB,GAAK05b,EAAM15b,GAAOy5b,EAAQz5b,GAAKomB,EAAMpmB,GAAKomB,EAAMpmB,GAAK05b,EAAM15b,GAAM66b,EArB5F,KAsBCpB,EAAQx5b,GAAKmmB,EAAMnmB,GAAKmmB,EAAMnmB,GAAKy5b,EAAMz5b,GAAOw5b,EAAQx5b,GAAKmmB,EAAMnmB,GAAKmmB,EAAMnmB,GAAKy5b,EAAMz5b,GAAM66b,EAtBhG,GAuBA,OAAOx7b,KAAKE,IAAIu7b,EAAMC,GAIlC,OAAO,KAGXxD,EAAkBlpc,UAAUoqc,iBAAmB,SAAUe,EAASC,GAC9D,IAAIuB,EAAQxB,EAAQz5b,EAAI05b,EAAM15b,EAC1Bk7b,EAAQzB,EAAQx5b,EAAIy5b,EAAMz5b,EAC9B,OAAOX,KAAK+mB,MAAM60a,EAAOD,IAAU,IAAM37b,KAAKkR,KAElDgnb,EAAkBlpc,UAAUsqc,kBAAoB,SAAUa,EAASC,GAG/D,OADUp6b,KAAKQ,MAAO25b,EAAQz5b,EAAI05b,EAAM15b,IAAMy5b,EAAQz5b,EAAI05b,EAAM15b,IAAQy5b,EAAQx5b,EAAIy5b,EAAMz5b,IAAMw5b,EAAQx5b,EAAIy5b,EAAMz5b,KAQtHu3b,EAAkBlpc,UAAUiX,QAAU,aAQtCiyb,EAAkBlpc,UAAU0kC,cAAgB,WAIxC,MAAO,YAEJwka,KC/ZP2D,GAA0B,WAC1B,SAASA,EAASn6Z,GACd/tC,KAAKqmD,QACLrmD,KAAK+tC,QAAUA,EAwvCnB,OArvCAm6Z,EAAS7sc,UAAU2na,QAAU,WACzB,OACwE,IADhEhja,KAAK+tC,QAAQ4c,aAAaxM,aAC3B6iW,GAAgB+4B,aAAe/4B,GAAgBs3B,eAM1D4vB,EAAS7sc,UAAU2la,UAAY,SAAUjzX,EAAS0yX,EAAgBoZ,EAAaC,EAAYxlZ,EAAOkpB,EAAY9F,GAC1G,IAAIiT,EAAe3qD,KAAK+tC,QAAQ4c,aAE5Bh/C,GAAWoB,EAAG,EAAGC,EAAG,GACpB+oB,EAASoxB,GAAUs5W,EAAe1uZ,SAClCo2b,GAAwBzlC,SAAS,EAAO/2Z,OAAQ,GAChDy8b,GAAsB1lC,SAAS,EAAO/2Z,OAAQ,GAClD,GAAI3L,KAAK+tC,QAAQ4c,aAAaxM,YAAc6iW,GAAgB+4B,aAAc,CACtE,IAAI9W,OAAW,GACfA,EAAWzia,SAAS4C,gBAAgB,6BAA8B,MACzDI,aAAa,KAAM,kBAC5By/Z,EAASz/Z,aAAa,iBAAkB,cACxCixD,GAAmBz0D,KAAK+tC,QAAQ/sC,QAAQsC,IAAI3B,YAAYsha,GACxDjja,KAAKqoc,WAAWt6Z,EAAS0yX,EAAgBwC,EAAUklC,EAAqBC,EAAmB9za,EAAOkpB,IAAe9F,GAGrH,IAAIlrC,EAAOupB,EAAOhpB,EAAIunB,EAAMvnB,EACxBL,EAAMqpB,EAAO/oB,EAAIsnB,EAAMtnB,EACvBP,EAAQspB,EAAOhpB,EAAIgpB,EAAO/f,MAAQse,EAAMvnB,EACxCJ,EAASopB,EAAO/oB,EAAI+oB,EAAOhgB,OAASue,EAAMtnB,EAC1CysZ,EAAkB9uW,EAAa+uW,kBAAkBD,gBAEjD6uC,EAAetoc,KAAKi+B,MAAMxxB,EAAOgtZ,EApBpB,GAqBb8uC,EAAcvoc,KAAKi+B,MAAMzxB,EAAMitZ,EArBlB,GAsBjBA,EAAkB9uW,EAAa6uW,oBAAoBC,gBACnD,IAAI+uC,EAAaxoc,KAAKi+B,MAAMvxB,EAAK+sZ,EAvBhB,GAwBbgvC,EAAgBzoc,KAAKi+B,MAAMtxB,EAAQ8sZ,EAxBtB,GA0BbivC,EAAe3ya,EAAOhpB,EAAIgpB,EAAO/f,MACjC2yb,EAAgB5ya,EAAO/oB,EAAI+oB,EAAOhgB,OA8DtC,OA7DKoyb,EAAoBzlC,QA0BjB1ia,KAAK+tC,QAAQ4c,aAAaxM,YAAc6iW,GAAgB+4B,aACxDpua,EAAOoB,EAAIo7b,EAAoBx8b,OAG/BA,EAAOoB,EAAI2qC,EAAS3qC,EAAIywC,EAAWzwC,EA7BnC/M,KAAK+tC,QAAQ4c,aAAaxM,YAAc6iW,GAAgB4nD,oBACpDv8b,KAAKE,IAAI+nB,EAAMvnB,IAAM,IACjB8sa,EACIxta,KAAKE,IAAI+7b,EAAeI,GAAgBr8b,KAAKE,IAAIg8b,EAAcxya,EAAOhpB,GACtEpB,EAAOoB,GAAKw7b,EAAcxya,EAAOhpB,EAGjCpB,EAAOoB,GAAKu7b,EAAeI,EAI3Br8b,KAAKE,IAAI+7b,EAAeI,GAAgBr8b,KAAKE,IAAIg8b,EAAcxya,EAAOhpB,GACtEpB,EAAOoB,GAAKu7b,EAAeI,EAG3B/8b,EAAOoB,GAAKw7b,EAAcxya,EAAOhpB,GAM7CpB,EAAOoB,EAAI2qC,EAAS3qC,EAAIywC,EAAWzwC,EAWtCq7b,EAAkB1lC,QA0BnB/2Z,EAAOqB,EAAIo7b,EAAkBz8b,OAzBzB3L,KAAK+tC,QAAQ4c,aAAaxM,YAAc6iW,GAAgB6nD,sBACpDx8b,KAAKE,IAAI+nB,EAAMtnB,IAAM,IACjB8sa,EACIzta,KAAKE,IAAIk8b,EAAgBE,GAAiBt8b,KAAKE,IAAIi8b,EAAazya,EAAO/oB,GACvErB,EAAOqB,GAAKw7b,EAAazya,EAAO/oB,EAGhCrB,EAAOqB,GAAKy7b,EAAgBE,EAI5Bt8b,KAAKE,IAAIk8b,EAAgBE,GAAiBt8b,KAAKE,IAAIi8b,EAAazya,EAAO/oB,GACvErB,EAAOqB,GAAKy7b,EAAgBE,EAG5Bh9b,EAAOqB,GAAKw7b,EAAazya,EAAO/oB,GAM5CrB,EAAOqB,EAAI0qC,EAAS1qC,EAAIwwC,EAAWxwC,EAMpCrB,GAKXu8b,EAAS7sc,UAAU4iC,MAAQ,SAAUjhC,EAAOw9Z,EAAe12W,GAEnDA,EADAA,EAAQ,EACAz3C,KAAKs9D,IAAI,EAAGt9D,KAAKkT,MAAMlT,KAAKwkB,IAAIizB,GAASz3C,KAAKwkB,IAAI,KAGlDxkB,KAAKs9D,IAAI,EAAGt9D,KAAK6lB,KAAK7lB,KAAKwkB,IAAIizB,GAASz3C,KAAKwkB,IAAI,KAE7D,IAAIi4a,EAAS,EACT3sc,EAAI,EACR,IAAKA,EAAI,EAAGA,EAAIq+Z,EAAc/9Z,OAAQN,IAClC2sc,GAAUtuC,EAAcr+Z,GAG5B,IACI4sc,EAAM/rc,GAFV8rc,GAAUhlZ,GAGNthB,EAFWn2B,KAAKkT,MAAMlT,KAAKE,IAAIvP,GAAS8rc,GAEtBA,EACtB,GAAItma,IAASxlC,EACT,GAAIA,GAAS,EACT,IAAKb,EAAI,EAAGA,EAAIq+Z,EAAc/9Z,OAAQN,IAAK,CACvC,GAAI4sc,GAAOvuC,EAAcr+Z,GAAK2nD,EAC1B,OAAOthB,GAAQuma,EAAOvuC,EAAcr+Z,IAAM,EAAI2nD,GAAU,EAAI02W,EAAcr+Z,GAAK2nD,GAG/EthB,GAAQg4X,EAAcr+Z,GAAK2nD,EAC3BilZ,GAAOvuC,EAAcr+Z,GAAK2nD,OAMlC,IADAthB,IAAe,EACVrmC,EAAIq+Z,EAAc/9Z,OAAS,EAAGN,GAAK,EAAGA,IAAK,CAC5C,GAAIkQ,KAAKE,IAAIw8b,IAAQvuC,EAAcr+Z,GAAK2nD,EACpC,OAAOthB,GAAQn2B,KAAKE,IAAIw8b,GAAQvuC,EAAcr+Z,IAAM,EAAI2nD,GAAU,EAAI02W,EAAcr+Z,GAAK2nD,GAGzFthB,GAAQg4X,EAAcr+Z,GAAK2nD,EAC3BilZ,GAAOvuC,EAAcr+Z,GAAK2nD,EAK1C,OAAO9mD,GAKXkrc,EAAS7sc,UAAUgtc,WAAa,SAAUt6Z,EAAS0yX,EAAgBpjY,EAAG2ra,EAAgBC,EAAc30a,EAAO40a,GACvG,IACIC,EACAC,EACAC,EAHAC,EAAU,KAIVnmZ,EAAWnjD,KAAK+tC,QAAQoV,SACxBwH,EAAe3qD,KAAK+tC,QAAQ4c,aAC5B4+Y,KACAC,KACAC,KACAC,KACA3za,EAASoxB,GAAUs5W,EAAe1uZ,SAClC+xC,EAAQ/V,EAAQoV,SAASY,YACzBu5X,GAAWn6X,EAASC,iBACpBm6X,GAAWp6X,EAASG,eACpBqmZ,EAAkBh/Y,EAAai/Y,mBAAqB9lZ,EACpDgkY,EAAW,IAAIvyZ,GAAK,EAAG,EAAG4tB,EAASQ,cAAeR,EAASO,gBAC3DmmZ,EAAiB,IAAIt0a,GAAK+nZ,EAAUx5X,EAAQ/tB,EAAO/oB,EAAI28b,EAAkB,EAAI7hB,EAAS9xa,MAAQ8tC,EAAQ/tB,EAAOhgB,OAAS,EAAI4zb,EAAkB,IAC5IG,EAAiB,IAAIv0a,GAAMQ,EAAOhpB,EAAI48b,EAAkB,EAAIpsB,EAAUz5X,EAAQ/tB,EAAO/f,MAAQ,EAAI2zb,EAAkB,GAAK7hB,EAAS/xa,OAAS+tC,GAC9IgkY,EAAW,IAAIvyZ,GAAK+nZ,EAAUx5X,EAAOy5X,EAAUz5X,EAAOgkY,EAAS9xa,MAAQ8tC,EAAOgkY,EAAS/xa,OAAS+tC,GAChG,IACI3nD,EACAgL,EACA4ic,EAHAr/Y,EAAQ1qD,KAAKgqc,UAAUj8Z,EAAQ8/X,cAAepN,EAAgBqpC,EAAgBhiB,GAI9EptX,EAAY3sB,EAAQ2sB,UACxB,IAAKv+D,EAAI,EAAGA,EAAIuuD,EAAMjuD,OAAQN,IAC1BgL,EAASujD,EAAMvuD,GACX6D,KAAKiqc,YAAYl8Z,EAAS5mC,KACpBnH,KAAK+tC,QAAQ2sB,UAAUvzD,EAAO7D,cAAe46C,KAAcl+C,KAAKkqc,YAAYxvY,EAAW+lW,EAAgBt5Z,MACzG4ic,EAAe5ic,EAAO4uB,QACLhgB,OAASg0b,EAAa/8b,EAAIsnB,EAAMtnB,EAAI+oB,EAAO/oB,EACxDy8b,EAAajlc,MACTzH,IAAKoK,EAAQmrC,SAAUjmC,KAAKE,IAAIwpB,EAAO/oB,EAAIsnB,EAAMtnB,EAAI+8b,EAAa/8b,EAAI+8b,EAAah0b,UAGlFg0b,EAAa/8b,EAAI+oB,EAAO/oB,EAAIsnB,EAAMtnB,EAAI+oB,EAAOhgB,QAClD2zb,EAAgBllc,MAAOzH,IAAKoK,EAAQmrC,SAAUjmC,KAAKE,IAAIwpB,EAAO/oB,EAAIsnB,EAAMtnB,EAAI+oB,EAAOhgB,OAASg0b,EAAa/8b,MAE9F,MAAXs8b,GAAmBA,EAAUj9b,KAAKE,IAAIw9b,EAAa/8b,EAAI+oB,EAAO/oB,EAAIsnB,EAAMtnB,MACpEX,KAAKE,IAAIw9b,EAAah9b,EAAIg9b,EAAa/zb,MAAQ,GAAK+f,EAAOhpB,EAAIgpB,EAAO/f,MAAQ,EAAIse,EAAMvnB,KACxF48b,GACAP,EAAUppc,KAAKmqc,iBAAiBJ,EAAch0a,EAAQ,WACtDuza,EAAUj9b,KAAKE,IAAIw9b,EAAa/8b,EAAI+oB,EAAO/oB,IAEtCX,KAAKE,IAAIw9b,EAAah9b,EAAIg9b,EAAa/zb,OAAS+f,EAAOhpB,EAAIgpB,EAAO/f,MAAQse,EAAMvnB,KAAO48b,GAC5FP,EAAUppc,KAAKmqc,iBAAiBJ,EAAch0a,EAAQ,SACtDuza,EAAUj9b,KAAKE,IAAIw9b,EAAa/8b,EAAI+oB,EAAO/oB,IAEtCX,KAAKE,IAAIw9b,EAAah9b,GAAKgpB,EAAOhpB,EAAIunB,EAAMvnB,KAAO48b,GACxDP,EAAUppc,KAAKmqc,iBAAiBJ,EAAch0a,EAAQ,QACtDuza,EAAUj9b,KAAKE,IAAIw9b,EAAa/8b,EAAI+oB,EAAO/oB,IAEtCX,KAAKE,IAAIw9b,EAAah9b,GAAKgpB,EAAOhpB,EAAIgpB,EAAO/f,MAAQse,EAAMvnB,KAAO48b,GACvEP,EAAUppc,KAAKmqc,iBAAiBJ,EAAch0a,EAAQ,aACtDuza,EAAUj9b,KAAKE,IAAIw9b,EAAa/8b,EAAI+oB,EAAO/oB,IAEtCX,KAAKE,IAAIw9b,EAAah9b,EAAIg9b,EAAa/zb,OAAS+f,EAAOhpB,EAAIunB,EAAMvnB,KAAO48b,IAC7EP,EAAUppc,KAAKmqc,iBAAiBJ,EAAch0a,EAAQ,aACtDuza,EAAUj9b,KAAKE,IAAIw9b,EAAa/8b,EAAI+oB,EAAO/oB,OAM/D09C,EAAQ1qD,KAAKgqc,UAAUj8Z,EAAQ8/X,cAAepN,EAAgBopC,EAAgB/hB,GAC9E,IAAK,IAAIrka,EAAI,EAAGA,EAAIinC,EAAMjuD,OAAQgnB,IAC9Btc,EAASujD,EAAMjnC,GACXzjB,KAAKiqc,YAAYl8Z,EAAS5mC,KACpBnH,KAAK+tC,QAAQ2sB,UAAUvzD,EAAO7D,cAAe46C,KAAcl+C,KAAKkqc,YAAYxvY,EAAW+lW,EAAgBt5Z,MACzG4ic,EAAe5ic,EAAO4uB,QACLhpB,EAAIg9b,EAAa/zb,MAAQ+f,EAAOhpB,EAAIunB,EAAMvnB,IACvDw8b,EAAcA,EAAc9sc,SACxBM,IAAKoK,EAAQmrC,SAAUjmC,KAAKE,IAAKwpB,EAAOhpB,EAAIunB,EAAMvnB,EAAKg9b,EAAah9b,EAAIg9b,EAAa/zb,SAGzF+zb,EAAah9b,EAAIgpB,EAAOhpB,EAAIunB,EAAMvnB,EAAIgpB,EAAO/f,QAC7Cwzb,EAAeA,EAAe/sc,SAC1BM,IAAKoK,EAAQmrC,SAAUjmC,KAAKE,IAAIwpB,EAAOhpB,EAAIunB,EAAMvnB,EAAIgpB,EAAO/f,MAAQ+zb,EAAah9b,MAG1E,MAAXo8b,GAAmBA,EAAU98b,KAAKE,IAAIw9b,EAAah9b,EAAIgpB,EAAOhpB,EAAIunB,EAAMvnB,MACpEV,KAAKE,IAAIw9b,EAAa/8b,EAAI+8b,EAAah0b,OAAS,GAAKggB,EAAO/oB,EAAI+oB,EAAOhgB,OAAS,EAAIue,EAAMtnB,KACvF28b,GACHN,EAAUrpc,KAAKmqc,iBAAiBJ,EAAch0a,EAAQ,WACtDoza,EAAU98b,KAAKE,IAAIw9b,EAAah9b,EAAIgpB,EAAOhpB,IAEtCV,KAAKE,IAAIw9b,EAAa/8b,EAAI+oB,EAAO/oB,EAAIsnB,EAAMtnB,IAAM28b,GACtDN,EAAUrpc,KAAKmqc,iBAAiBJ,EAAch0a,EAAQ,OACtDoza,EAAU98b,KAAKE,IAAIw9b,EAAah9b,EAAIgpB,EAAOhpB,IAEtCV,KAAKE,IAAIw9b,EAAa/8b,EAAI+8b,EAAah0b,QAAUggB,EAAO/oB,EAAI+oB,EAAOhgB,OAASue,EAAMtnB,KACvF28b,GACAN,EAAUrpc,KAAKmqc,iBAAiBJ,EAAch0a,EAAQ,UACtDoza,EAAU98b,KAAKE,IAAIw9b,EAAah9b,EAAIgpB,EAAOhpB,IAEtCV,KAAKE,IAAIw9b,EAAa/8b,EAAI+8b,EAAah0b,OAASggB,EAAO/oB,EAAIsnB,EAAMtnB,IAAM28b,GAC5EN,EAAUrpc,KAAKmqc,iBAAiBJ,EAAch0a,EAAQ,aACtDoza,EAAU98b,KAAKE,IAAIw9b,EAAah9b,EAAIgpB,EAAOhpB,IAEtCV,KAAKE,IAAIw9b,EAAa/8b,GAAK+oB,EAAO/oB,EAAI+oB,EAAOhgB,OAASue,EAAMtnB,KAAO28b,IACxEN,EAAUrpc,KAAKmqc,iBAAiBJ,EAAch0a,EAAQ,aACtDoza,EAAU98b,KAAKE,IAAIw9b,EAAah9b,EAAIgpB,EAAOhpB,OAM/D/M,KAAKoqc,iBAAiBr8Z,EAASq7Z,EAASC,EAAShsa,EAAG2ra,EAAgBC,EAAcC,GAC7EF,EAAetmC,SAChB1ia,KAAKqqc,oBAAoBt8Z,EAAS1Q,EAAGojY,EAAgB8oC,EAAeC,EAAgBR,EAAgBC,EAAcC,EAAO50a,EAAOq1a,GAE/HV,EAAavmC,SACd1ia,KAAKsqc,oBAAoBv8Z,EAAS1Q,EAAGojY,EAAgBgpC,EAAcC,EAAiBV,EAAgBC,EAAcC,EAAO50a,EAAOq1a,IAMxIzB,EAAS7sc,UAAUyka,iBAAmB,SAAU3sY,GAC5C,IAAIw3B,EAAe3qD,KAAK+tC,QAAQ4c,aAMhC,OAJIA,EAAaxM,YAAc6iW,GAAgBs3B,cAC3CnlZ,EAAMpmB,EAAI/M,KAAKi+B,MAAM9K,EAAMpmB,EAAG49C,EAAa+uW,kBAAkBD,gBAFhD,GAGbtmY,EAAMnmB,EAAIhN,KAAKi+B,MAAM9K,EAAMnmB,EAAG29C,EAAa6uW,oBAAoBC,gBAHlD,IAKVtmY,GAEX+0a,EAAS7sc,UAAU4uc,YAAc,SAAUl8Z,EAASxtC,GAEhD,OADAA,EAAOP,KAAK+tC,QAAQ2sB,UAAUn6D,EAAK+C,KAC1B42D,GAAWl6D,KAAK+tC,QAASxtC,GAAM,IAE5C2nc,EAAS7sc,UAAUkvc,SAAW,SAAUx8Z,EAASi7Z,EAAgBC,EAAchmC,EAAUyZ,EAAQC,EAAQlc,EAAgByoC,GACrH,IAAII,EACAH,EAGAC,EACAC,EAHA1+Y,EAAe3qD,KAAK+tC,QAAQ4c,aAC5BxH,EAAWnjD,KAAK+tC,QAAQoV,SAGxBptB,EAASoxB,GAAUs5W,EAAe1uZ,SAClC2oD,EAAY3sB,EAAQ2sB,UACpB8vY,KACAC,KACA3mZ,EAAQ/V,EAAQoV,SAASY,YACzBu5X,GAAWn6X,EAASC,iBACpBm6X,GAAWp6X,EAASG,eACpBqmZ,EAAkBh/Y,EAAai/Y,mBAAqB9lZ,EACpDgkY,EAAW,IAAIvyZ,GAAK,EAAG,EAAG4tB,EAASQ,cAAeR,EAASO,gBAC3DgnZ,EAAmB,IAAIn1a,GAAK+nZ,EAAUx5X,GAAQ/tB,EAAO/oB,EAAI,GAAK82C,EAAOgkY,EAAS9xa,MAAQ8tC,GAAQ/tB,EAAOhgB,OAAS,IAAM+tC,GACpH6mZ,EAAmB,IAAIp1a,IAAMQ,EAAOhpB,EAAI,GAAK+2C,EAAOy5X,EAAUz5X,GAAQ/tB,EAAO/f,MAAQ,IAAM8tC,EAAOgkY,EAAS/xa,OAAS+tC,GACxHgkY,EAAW,IAAIvyZ,GAAK+nZ,EAAUx5X,EAAOy5X,EAAUz5X,EAAOgkY,EAAS9xa,MAAQ8tC,EAAOgkY,EAAS/xa,OAAS+tC,GAChG,IAEI3nD,EACAgL,EACA4ic,EAJAa,KACAlgZ,EAAQ1qD,KAAKgqc,UAAUj8Z,EAAQ8/X,cAAepN,EAAgBkqC,EAAkB7iB,EAAU8iB,GAI9F,IAAKzuc,EAAI,EAAGA,EAAIuuD,EAAMjuD,OAAQN,IAC1BgL,EAASujD,EAAMvuD,IACX6D,KAAKkqc,YAAYxvY,EAAW+lW,EAAgBt5Z,IAAanH,KAAK+tC,QAAQ2sB,UAAUvzD,EAAO7D,cAAe46C,KACtG6rZ,EAAe5ic,EAAO4uB,QACP,MAAXuza,GAAmBA,EAAUj9b,KAAKE,IAAIw9b,EAAa/8b,EAAI+oB,EAAO/oB,MAC1Dg8b,EAAex8b,KACXH,KAAKE,IAAIwpB,EAAOhpB,EAAI2va,EAASqtB,EAAah9b,IAAM48b,GAChDP,EAAUppc,KAAKmqc,iBAAiBJ,EAAch0a,EAAQ,QACtDuza,EAAUj9b,KAAKE,IAAIw9b,EAAa/8b,EAAI+oB,EAAO/oB,IAEtCX,KAAKE,IAAIwpB,EAAOhpB,EAAI2va,EAASqtB,EAAah9b,EAAIg9b,EAAa/zb,QAAU2zb,IAC1EP,EAAUppc,KAAKmqc,iBAAiBJ,EAAch0a,EAAQ,aACtDuza,EAAUj9b,KAAKE,IAAIw9b,EAAa/8b,EAAI+oB,EAAO/oB,IAG1Cg8b,EAAev8b,QAChBJ,KAAKE,IAAIwpB,EAAOhpB,EAAI2va,EAAS3mZ,EAAO/f,MAAQ+zb,EAAah9b,EAAIg9b,EAAa/zb,QAAU2zb,GACpFP,EAAUppc,KAAKmqc,iBAAiBJ,EAAch0a,EAAQ,SACtDuza,EAAUj9b,KAAKE,IAAIw9b,EAAa/8b,EAAI+oB,EAAO/oB,IAEtCX,KAAKE,IAAIwpB,EAAOhpB,EAAI2va,EAAS3mZ,EAAO/f,MAAQ+zb,EAAah9b,IAAM48b,IACpEP,EAAUppc,KAAKmqc,iBAAiBJ,EAAch0a,EAAQ,aACtDuza,EAAUj9b,KAAKE,IAAIw9b,EAAa/8b,EAAI+oB,EAAO/oB,OAM/D09C,EAAQ1qD,KAAKgqc,UAAUj8Z,EAAQ8/X,cAAepN,EAAgBiqC,EAAkB5iB,GAChF,IAAK,IAAIpga,EAAM,EAAGA,EAAMgjC,EAAMjuD,OAAQirB,IAAO,CACzC,IAAI8uB,EAAWkU,EAAMhjC,GACrB,GAAI1nB,KAAKkqc,YAAYxvY,EAAW+lW,EAAgBjqX,MAAex2C,KAAK+tC,QAAQ2sB,UAAUlkB,EAASlzC,cAAe46C,IAAY,CACtH,IAAI2sZ,EAAiBr0Z,EAASzgB,QACf,MAAXoza,GAAmBA,EAAU98b,KAAKE,IAAIs+b,EAAe99b,EAAIgpB,EAAOhpB,MAC5Dk8b,EAAav8b,IACTL,KAAKE,IAAIwpB,EAAO/oB,EAAI2va,EAASkuB,EAAe79b,IAAM28b,GAClDN,EAAUrpc,KAAKmqc,iBAAiBU,EAAgB90a,EAAQ,OACxDoza,EAAU98b,KAAKE,IAAIs+b,EAAe99b,EAAIgpB,EAAOhpB,IAExCV,KAAKE,IAAIwpB,EAAO/oB,EAAI2va,EAASkuB,EAAe79b,EAAI69b,EAAe90b,SAAW4zb,IAC/EN,EAAUrpc,KAAKmqc,iBAAiBU,EAAgB90a,EAAQ,aACxDoza,EAAU98b,KAAKE,IAAIs+b,EAAe99b,EAAIgpB,EAAOhpB,IAG5Ck8b,EAAat8b,SACdN,KAAKE,IAAIwpB,EAAO/oB,EAAI+oB,EAAOhgB,OAAS4ma,EAASkuB,EAAe79b,EAAI69b,EAAe90b,SAAW4zb,GAC1FN,EAAUrpc,KAAKmqc,iBAAiBU,EAAgB90a,EAAQ,UACxDoza,EAAU98b,KAAKE,IAAIs+b,EAAe99b,EAAIgpB,EAAOhpB,IAExCV,KAAKE,IAAIwpB,EAAO/oB,EAAI+oB,EAAOhgB,OAAS4ma,EAASkuB,EAAe79b,IAAM28b,IACvEN,EAAUrpc,KAAKmqc,iBAAiBU,EAAgB90a,EAAQ,aACxDoza,EAAU98b,KAAKE,IAAIs+b,EAAe99b,EAAIgpB,EAAOhpB,OAMjE,IAAK5Q,EAAI,EAAGA,EAAIyuc,EAAYnuc,OAAQN,IAEhC,GADAgL,EAASyjc,EAAYzuc,GACjB6D,KAAKkqc,YAAYxvY,EAAW+lW,EAAgBt5Z,GAAS,CACrD,IAAI2jc,EAAiB3jc,EAAO4uB,OACxBzB,EAAQ00a,EAAex8b,MAAQkwa,EAASA,EACxCx8E,EAAa7zV,KAAKE,IAAIwpB,EAAO/f,MAAQse,EAAQw2a,EAAe90b,OAC5D+0b,OAAa,EACb7qG,GAAcypG,IACdoB,EAAa/B,EAAex8b,MAAQs+b,EAAe90b,MAAQ+f,EAAO/f,MAAQ80b,EAAe90b,MAAQ+f,EAAO/f,MACxGw0b,EAAUA,EAAU/tc,SAAYF,OAAQ4K,EAAQ+4V,WAAYA,EAAYv0V,OAAQo/b,IAEpFz2a,EAAQ20a,EAAav8b,KAAOiwa,EAASA,EACrC,IAAI9Z,EAAOx2Z,KAAKE,IAAIwpB,EAAOhgB,OAASue,EAAQw2a,EAAe/0b,QACvD8sZ,GAAQ8mC,IACRoB,EAAa9B,EAAav8b,KAAOo+b,EAAe/0b,OAASggB,EAAOhgB,OAAS+0b,EAAe/0b,OAASggB,EAAOhgB,OACxG00b,EAAWA,EAAWhuc,SAAYF,OAAQ4K,EAAQ+4V,WAAY2iE,EAAMl3Z,OAAQo/b,IAIxF,IACKh9Z,EAAQ67X,QACC5pa,KAAKoqc,iBAAiBr8Z,EAASq7Z,EAASC,EAASpmC,EAAU+lC,EAAgBC,EAAcC,IAElGF,EAAetmC,SAAW8nC,EAAU/tc,OAAS,IAAMusc,EAAex8b,MAAQw8b,EAAev8b,QAC1FzM,KAAKgrc,kBAAkBj9Z,EAASk1X,EAAUunC,EAAWxB,EAAgBE,EAAOzoC,IAE3EwoC,EAAavmC,SAAW+nC,EAAWhuc,OAAS,IAAMwsc,EAAav8b,KAAOu8b,EAAat8b,SACpF3M,KAAKirc,mBAAmBl9Z,EAASk1X,EAAUwnC,EAAYxB,EAAcC,EAAOzoC,IAOpFynC,EAAS7sc,UAAUkoa,QAAU,SAAUylC,EAAgBC,EAAchmC,EAAUyZ,EAAQC,EAAQxjZ,EAAO+va,EAAOgC,GACzG,IAAIroC,EAAO8Z,EACXssB,EAAav8b,KAAM,EACnB,IAAIM,EACJg8b,EAAex8b,KAAOw8b,EAAev8b,OAAQ,EAQ7C,GALIzM,KAAK+tC,QAAQ4c,aAAaxM,YAAc6iW,GAAgB+4B,eAAiB5gZ,EAAMmtB,cAE/Et5C,EAAIk+b,EAAel+b,EAAIk+b,EAAen1b,OAASojB,EAAMk2B,MAAMriD,EAAI2va,GAAUxjZ,EAAMltB,QAAUktB,EAAMpjB,OAASojB,EAAMk2B,MAAMriD,GACpHhN,KAAKuqc,SAASvqc,KAAK+tC,QAASi7Z,EAAgBC,EAAchmC,EAAUyZ,EAAQ1va,EAAGhN,KAAK+tC,QAAQmd,cAAeg+Y,IAE1GD,EAAavmC,QASdG,EAAQ8Z,EAAS3va,EAAKi8b,EAAat9b,YARnC,GAAI3L,KAAK+tC,QAAQ4c,aAAaxM,YAAc6iW,GAAgB6nD,sBAAuB,CAC/E,IAAI9vZ,EAAQmyZ,EAAel+b,EAAIk+b,EAAen1b,OAASojB,EAAMk2B,MAAMriD,EAC/Dm+b,EAAYpyZ,EAAQ4jY,EAExB9Z,EADiB7ia,KAAKi+B,MAAMkta,EAAWnrc,KAAK+tC,QAAQ4c,aAAa6uW,oBAAoBC,gBAX5E,GAYW1gX,EAM5B,OAAO8pX,GAMXqlC,EAAS7sc,UAAUioa,UAAY,SAAU0lC,EAAgBC,EAAchmC,EAAUyZ,EAAQC,EAAQxjZ,EAAO+va,EAAOkC,GAC3G,IACIr+b,EADA61Z,EAAO8Z,EAEXssB,EAAev8b,OAAQ,EACvBw8b,EAAav8b,IAAMu8b,EAAat8b,QAAS,EAQzC,GALI3M,KAAK+tC,QAAQ4c,aAAaxM,YAAc6iW,GAAgB+4B,eAAiB5gZ,EAAMmtB,cAE/Ev5C,EAAIq+b,EAAar+b,EAAIq+b,EAAap1b,OAAS,EAAImjB,EAAMk2B,MAAMtiD,GAAK2va,GAAUvjZ,EAAMttB,QAAUstB,EAAMnjB,OAAS,EAAImjB,EAAMk2B,MAAMtiD,IACzH/M,KAAKuqc,SAASvqc,KAAK+tC,QAASi7Z,EAAgBC,EAAchmC,EAAUl2Z,EAAG4va,EAAQ38a,KAAK+tC,QAAQmd,cAAeg+Y,IAE1GF,EAAetmC,QAShBE,EAAQ8Z,EAAS3va,EAAKi8b,EAAer9b,YARrC,GAAI3L,KAAK+tC,QAAQ4c,aAAaxM,YAAc6iW,GAAgB4nD,oBAAqB,CAC7E,IAAIn8b,EAAQ2+b,EAAar+b,EAAIq+b,EAAap1b,OAAS,EAAImjB,EAAMk2B,MAAMtiD,GAC/D+ua,EAAcrva,EAAQiwa,EAE1B9Z,EADmB5ia,KAAKi+B,MAAM69Y,EAAa97a,KAAK+tC,QAAQ4c,aAAa+uW,kBAAkBD,gBAX9E,GAYahtZ,EAM9B,OAAOm2Z,GAMXslC,EAAS7sc,UAAUgoa,SAAW,SAAU2lC,EAAgBC,EAAchmC,EAAUyZ,EAAQC,EAAQxjZ,EAAO+va,EAAOmC,GAC1G,IAAIzoC,EAAO8Z,EACP3va,EAAI,EACRi8b,EAAex8b,MAAO,EACtBy8b,EAAav8b,IAAMu8b,EAAat8b,QAAS,EAQzC,GALI3M,KAAK+tC,QAAQ4c,aAAaxM,YAAc6iW,GAAgB+4B,eAAiB5gZ,EAAMmtB,cAE/Ev5C,EAAIs+b,EAAet+b,EAAIs+b,EAAer1b,MAAQmjB,EAAMk2B,MAAMtiD,EAAI2va,GAAUvjZ,EAAMttB,QAAUstB,EAAMnjB,MAAQmjB,EAAMk2B,MAAMtiD,GAClH/M,KAAKuqc,SAASvqc,KAAK+tC,QAASi7Z,EAAgBC,EAAchmC,EAAUl2Z,EAAG4va,EAAQ38a,KAAK+tC,QAAQmd,cAAeg+Y,IAE1GF,EAAetmC,QAShBE,EAAQ8Z,EAAS3va,EAAKi8b,EAAer9b,YARrC,GAAI3L,KAAK+tC,QAAQ4c,aAAaxM,YAAc6iW,GAAgB4nD,oBAAqB,CAC7E,IAAIp8b,EAAO6+b,EAAet+b,EAAIs+b,EAAer1b,MAAQmjB,EAAMk2B,MAAMtiD,EAC7Du+b,EAAa9+b,EAAOkwa,EAExB9Z,EADkB5ia,KAAKi+B,MAAMqta,EAAYtrc,KAAK+tC,QAAQ4c,aAAa6uW,oBAAoBC,gBAX9E,GAYYjtZ,EAM7B,OAAOo2Z,GAMXslC,EAAS7sc,UAAUmoa,WAAa,SAAUwlC,EAAgBC,EAAchmC,EAAUyZ,EAAQC,EAAQxjZ,EAAO+va,EAAOqC,GAC5G,IAAI1oC,EAAO8Z,EACXssB,EAAat8b,QAAS,EACtBq8b,EAAex8b,KAAOw8b,EAAev8b,OAAQ,EAC7C,IACIO,EAAI,EAEJhN,KAAK+tC,QAAQ4c,aAAaxM,YAAc6iW,GAAgB+4B,eAAiB5gZ,EAAMmtB,cAE/Et5C,EAAIu+b,EAAYv+b,EAAIu+b,EAAYx1b,QAAU,EAAIojB,EAAMk2B,MAAMriD,GAAK2va,GAAUxjZ,EAAMltB,QAAUktB,EAAMpjB,QAAU,EAAIojB,EAAMk2B,MAAMriD,IACzHhN,KAAKuqc,SAASvqc,KAAK+tC,QAASi7Z,EAAgBC,EAAchmC,EAAUyZ,EAAQ1va,EAAGhN,KAAK+tC,QAAQmd,cAAeg+Y,IAElG/hZ,GAAUhuB,EAAMpnB,SAC7B,GAAKk3b,EAAavmC,QASdG,EAAQ8Z,EAAS3va,EAAKi8b,EAAat9b,YARnC,GAAI3L,KAAK+tC,QAAQ4c,aAAaxM,YAAc6iW,GAAgB6nD,sBAAuB,CAC/E,IAAIl8b,EAAS4+b,EAAYv+b,EAAIu+b,EAAYx1b,QAAU,EAAIojB,EAAMk2B,MAAMriD,GAC/Dgva,EAAerva,EAASgwa,EAE5B9Z,EADoB7ia,KAAKi+B,MAAM+9Y,EAAch8a,KAAK+tC,QAAQ4c,aAAa6uW,oBAAoBC,gBAblF,GAcc9sZ,EAM/B,OAAOk2Z,GAKXqlC,EAAS7sc,UAAU+uc,iBAAmB,SAAUr8Z,EAASq7Z,EAASC,EAASpmC,EAAU+lC,EAAgBC,EAAcC,GAyB/G,OAxBIE,IACAJ,EAAer9b,OAASy9b,EAAQv9b,QAChCm9b,EAAetmC,SAAU,EACpBwmC,IACGE,EAAQ1ic,KACR1G,KAAKwrc,qBAAqBpC,EAAQ7rc,MAAO6rc,EAAQpqb,IAAKikZ,EAAUl1X,EAAQoV,SAAS91C,aAOzFg8b,IACAJ,EAAat9b,OAAS09b,EAAQp9b,QAC9Bg9b,EAAavmC,SAAU,EAClBwmC,IACGG,EAAQ3ic,KACR1G,KAAKwrc,qBAAqBnC,EAAQ9rc,MAAO8rc,EAAQrqb,IAAKikZ,EAAUl1X,EAAQoV,SAAS91C,aAOtF41Z,GAKXilC,EAAS7sc,UAAUmwc,qBAAuB,SAAUjuc,EAAOyhB,EAAK/B,EAAK5P,GACjE9P,GACIwP,GAAIxP,EAAMwP,EAAIM,EAAUykT,IAAMzkT,EAAUy2C,MACxC92C,GAAIzP,EAAMyP,EAAIK,EAAUwkT,IAAMxkT,EAAUy2C,OAE5C9kC,GACIjS,GAAIiS,EAAIjS,EAAIM,EAAUykT,IAAMzkT,EAAUy2C,MACtC92C,GAAIgS,EAAIhS,EAAIK,EAAUwkT,IAAMxkT,EAAUy2C,OAE1C,IAAIk0S,GACA15T,OAAQ,UAAWstB,YAAa,EAAGpO,YAAczwC,EAAGxP,EAAMwP,EAAGC,EAAGzP,EAAMyP,GACtE0qC,UAAY3qC,EAAGiS,EAAIjS,EAAGC,EAAGgS,EAAIhS,GAAKoxB,KAAM,UAAW01B,UAAW,GAAI99C,MAAO,EACzEjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAG4L,MAAO,EAAGiyC,OAAQ,EACzCC,OAAQ,EAAG/8B,SAAS,EAAMrpB,QAAS,EAAGnK,GAAIqzD,MAE1Cx6D,EAAI,EAER,IADA6D,KAAKqmD,KAAK7hD,KAAKwzV,GACV77V,EAAI,EAAGA,EAAI6D,KAAKqmD,KAAK5pD,OAAQN,IAC9B6D,KAAK+tC,QAAQ6nY,gBAAgB7mV,SAAS9xE,EAAKjd,KAAKqmD,KAAKsyG,QAM7DuvS,EAAS7sc,UAAUgvc,oBAAsB,SAAUt8Z,EAAS1Q,EAAGlE,EAAOowa,EAAeC,EAAgBR,EAAgBC,EAAcC,EAAO50a,EAAOq1a,GAC7I,IAAIj9b,EAAM,EACV1M,KAAKyrc,eAAelC,EAAe,YAAY,GAC/Cvpc,KAAKyrc,eAAejC,EAAgB,YAAY,GAChD,IAEIkC,EACAC,EACA5B,EACA6B,EALAC,KACA91a,EAASoxB,GAAUhuB,EAAMpnB,SA0B7B,GArBIw3b,EAAc9sc,OAAS,IACvBovc,EAAcA,EAAcpvc,QAAU8sc,EAAc,GAEpD78b,GADAg/b,EAAgBnC,EAAc,GAAM,IAAQ,QAC1Bv8b,EACdu8b,EAAc9sc,OAAS,GACvBstc,EAAiBR,EAAc,GAAM,IAAQ,OAC7CqC,EAAgBF,EAAY3+b,EAAIg9b,EAAah9b,EAAIg9b,EAAa/zb,MAC1D3J,KAAKE,IAAIq/b,EAAgBrC,EAAc,GAAGj3Z,WAAaq3Z,EACvDj9b,EAAM1M,KAAK8rc,6BAA6BvC,EAAeqC,EAAel/b,EAAKm/b,GAG3ED,EAAgBrC,EAAc,GAAGj3Z,UAIrCs5Z,EAAgBrC,EAAc,GAAGj3Z,UAGzCtyC,KAAKyrc,eAAeI,EAAe,YACnCA,EAAcA,EAAcpvc,SAAYM,IAAKo8B,EAAOmZ,SAAU,GAC9D5lC,EAAMqpB,EAAO/oB,EAAIN,IAAQA,EAAMqpB,EAAO/oB,EAAIN,EACtC88b,EAAe/sc,OAAS,EAAG,CAC3B,IAAI49C,OAAO,EAOX,GANAsxZ,EAAiBnC,EAAe,GAAM,IAAQ,OAC9C98b,EAAMi/b,EAAa3+b,EAAIN,EAAMi/b,EAAa3+b,EAAIN,EAC1C88b,EAAe/sc,OAAS,IAExB49C,GADA0vZ,EAAiBP,EAAe,GAAM,IAAQ,QAC1Bz8b,EAAI4+b,EAAa5+b,EAAI4+b,EAAa31b,OAEtDuzb,EAAc9sc,OAAS,EACvB,GAAI4P,KAAKE,IAAIi9b,EAAe,GAAGl3Z,SAAWi3Z,EAAc,GAAGj3Z,WAAaq3Z,EAAiB,CACrF,IAAIoC,EAAkB1/b,KAAKE,IAAIi9b,EAAe,GAAGl3Z,SAAWi3Z,EAAc,GAAGj3Z,UAAY,EACxFk3Z,EAAe,GAAGl3Z,SAAWi3Z,EAAc,GAAGj3Z,SAC3Cs5Z,GAAiBG,EAAkBH,GAAiBG,EACxDF,EAAcA,EAAcpvc,QAAU+sc,EAAe,QAEvB,IAAzBD,EAAc9sc,SACnBivc,OAAcvwc,EACd0wc,EAAcpjb,OAAO,EAAG,GACxBojb,EAAcA,EAAcpvc,QAAU+sc,EAAe,GACrDoC,EAAgBvxZ,QAIpBuxZ,EAAgBvxZ,EAChBwxZ,EAAcA,EAAcpvc,QAAU+sc,EAAe,GAErDA,EAAe/sc,OAAS,GAAKkvc,EAAa5+b,EAAI4+b,EAAa31b,MAAQ+zb,EAAah9b,IAChFL,EAAM1M,KAAKgsc,8BAA8BxC,EAAgBnvZ,EAAM3tC,EAAKm/b,EAAelC,IAG3F,GAAIkC,EAAcpvc,OAAS,EAAG,CAC1BuD,KAAKisc,iBAAiBl+Z,EAAS1Q,EAAGwua,EAAe3C,EAAOx8b,GACxD,IAAIw/b,EAAkB,EAClBhD,IACAgD,EAAkB53a,EAAMvnB,GAExB2+b,EACA1C,EAAer9b,OAASigc,EAAgBv/b,KAAKE,IAAIwpB,EAAOhpB,EAAIm/b,EAAkBR,EAAY3+b,EAAI2+b,EAAY11b,OACpGk2b,EAEDP,IACL3C,EAAer9b,OAASU,KAAKE,IAAIwpB,EAAOhpB,EAAIgpB,EAAO/f,MAAQk2b,EAAkBP,EAAa5+b,GACpF6+b,EAAgBM,GAE1BlD,EAAetmC,SAAU,IAMjCwlC,EAAS7sc,UAAUivc,oBAAsB,SAAUv8Z,EAAS1Q,EAAGlE,EAAOswa,EAAcC,EAAiBV,EAAgBC,EAAcC,EAAO50a,EAAOq1a,GAC7I,IAAIl9b,EAAQ,EACZzM,KAAKyrc,eAAehC,EAAc,YAAY,GAC9Czpc,KAAKyrc,eAAe/B,EAAiB,YAAY,GACjD,IAEIyC,EACAC,EACArC,EACA6B,EALAC,KACA91a,EAASoxB,GAAUhuB,EAAMpnB,SAKzB03b,EAAahtc,OAAS,IACtBovc,EAAcA,EAAcpvc,QAAUgtc,EAAa,GAEnDh9b,GADA0/b,EAAe1C,EAAa,GAAM,IAAQ,QACvB18b,EAAIo/b,EAAWn2b,MAC9Byzb,EAAahtc,OAAS,GACtBstc,EAAiBN,EAAa,GAAM,IAAQ,OAC5CmC,EAAgBO,EAAWn/b,EAAI+8b,EAAa/8b,EAAI+8b,EAAah0b,OACzD1J,KAAKE,IAAIq/b,EAAgBnC,EAAa,GAAGn3Z,WAAaq3Z,EACtDl9b,EAAQzM,KAAKqsc,4BAA4B5C,EAAcmC,EAAen/b,EAAOo/b,GAG7ED,EAAgBnC,EAAa,GAAGn3Z,UAIpCs5Z,EAAgBnC,EAAa,GAAGn3Z,UAGxCtyC,KAAKyrc,eAAeI,EAAe,YACnCA,EAAcA,EAAcpvc,SAAYM,IAAKo8B,EAAOmZ,SAAU,GAC9D7lC,EAAQspB,EAAOhpB,EAAIgpB,EAAO/f,MAAQvJ,IAAUA,EAAQspB,EAAOhpB,EAAIgpB,EAAO/f,MAAQvJ,EAC9E,IAAI4tC,EACJ,GAAIqvZ,EAAgBjtc,OAAS,EAAG,CAO5B,GANA2vc,EAAkB1C,EAAgB,GAAM,IAAQ,OAChDj9b,EAAQ2/b,EAAcr/b,EAAIq/b,EAAcp2b,MAAQvJ,EAAQ2/b,EAAcr/b,EAAIq/b,EAAcp2b,MAAQvJ,EAC5Fi9b,EAAgBjtc,OAAS,IAEzB49C,GADA0vZ,EAAiBL,EAAgB,GAAM,IAAQ,QAC3B18b,EAAIo/b,EAAcp/b,EAAIo/b,EAAcr2b,QAExD0zb,EAAahtc,OAAS,EACtB,GAAI4P,KAAKE,IAAIm9b,EAAgB,GAAGp3Z,SAAWm3Z,EAAa,GAAGn3Z,WAAaq3Z,EAAiB,CACrF,IAAIoC,EAAkB1/b,KAAKE,IAAIm9b,EAAgB,GAAGp3Z,SAAWm3Z,EAAa,GAAGn3Z,UAAY,EACxFo3Z,EAAgB,GAAGp3Z,SAAWm3Z,EAAa,GAAGn3Z,SAC3Cs5Z,GAAiBG,EAAkBH,GAAiBG,EACxDF,EAAcA,EAAcpvc,QAAUitc,EAAgB,QAEzB,IAAxBD,EAAahtc,SAClB0vc,OAAahxc,EACb0wc,EAAcpjb,OAAO,EAAG,GACxBojb,EAAcA,EAAcpvc,QAAUitc,EAAgB,GACtDkC,EAAgBvxZ,QAIpBuxZ,EAAgBvxZ,EAChBwxZ,EAAcA,EAAcpvc,QAAUitc,EAAgB,GAEtDA,EAAgBjtc,OAAS,GAAKstc,EAAa/8b,EAAIo/b,EAAcp/b,EAAIo/b,EAAcr2b,SAC/EtJ,EAAQzM,KAAKssc,+BAA+B5C,EAAiBrvZ,EAAM5tC,EAAOo/b,EAAelC,IAGjG,GAAIkC,EAAcpvc,OAAS,EAAG,CAC1BuD,KAAKusc,iBAAiBx+Z,EAAS1Q,EAAGwua,EAAe3C,EAAOz8b,GACxD,IAAI+/b,EAAgB,EAChBtD,IACAsD,EAAgBl4a,EAAMtnB,GAEtBm/b,EACAlD,EAAat9b,OAASigc,EAAgBv/b,KAAKE,IAAIwpB,EAAO/oB,EAAIw/b,EAAgBL,EAAWn/b,EAAIm/b,EAAWp2b,QAAUy2b,EAEzGJ,IACLnD,EAAat9b,OAASU,KAAKE,IAAIwpB,EAAO/oB,EAAI+oB,EAAOhgB,OAASy2b,EAAgBJ,EAAcp/b,GAAK4+b,EAAgBY,GAEjHvD,EAAavmC,SAAU,IAM/BwlC,EAAS7sc,UAAU4wc,iBAAmB,SAAUl+Z,EAAS1Q,EAAGwua,EAAe3C,EAAOx8b,GAC9E,IAAIvQ,EACAoB,EACAyhB,EACJ,IAAKkqb,EACD,IAAK/sc,EAAI,EAAGA,EAAI0vc,EAAcpvc,OAAS,EAAGN,IAAK,CAC3C,IAAIswc,EAAOZ,EAAc1vc,GAAGY,eAAe0hD,GACvC0I,GAAW0kZ,EAAc1vc,GAAM,IAAE4V,SAAa85b,EAAc1vc,GAAM,IAAQ,OAC1E8sC,EAAO4ia,EAAc1vc,EAAI,GAAGY,eAAe0hD,GAC3C0I,GAAW0kZ,EAAc1vc,EAAI,GAAM,IAAE4V,SAAa85b,EAAc1vc,EAAI,GAAM,IAAQ,OACtFoB,GAAUwP,EAAG0/b,EAAK1/b,EAAI0/b,EAAKz2b,MAAOhJ,EAAGN,EAAM,IAC3CsS,GAAQjS,EAAGk8B,EAAKl8B,EAAGC,EAAGN,EAAM,IAC5B1M,KAAK0sc,mBAAmBnvc,EAAOyhB,EAAKqe,EAAGo3B,GAAmBz0D,KAAK+tC,QAAQ/sC,QAAQsC,IAAKyqC,EAAQoV,SAAS91C,aAOjH66b,EAAS7sc,UAAUkxc,iBAAmB,SAAUx+Z,EAAS1Q,EAAGsva,EAAsBzD,EAAOz8b,GACrF,IAAIlP,EACAyhB,EACJ,IAAKkqb,EACD,IAAK,IAAI/sc,EAAI,EAAGA,EAAIwwc,EAAqBlwc,OAAS,EAAGN,IAAK,CACtD,IAAIswc,EAAOE,EAAqBxwc,GAAGY,eAAe0hD,GAC9C0I,GAAWwlZ,EAAqBxwc,GAAM,IAAE4V,SAAa46b,EAAqBxwc,GAAM,IAAQ,OACxF8sC,EAAO0ja,EAAqBxwc,EAAI,GAAGY,eAAe0hD,GAClD0I,GAAWwlZ,EAAqBxwc,EAAI,GAAM,IAAE4V,SAC1C46b,EAAqBxwc,EAAI,GAAM,IAAQ,OAC7CoB,GAAUwP,EAAGN,EAAQ,GAAIO,EAAGy/b,EAAKz/b,EAAIy/b,EAAK12b,QAC1CiJ,GAAQjS,EAAGN,EAAQ,GAAIO,EAAGi8B,EAAKj8B,GAC/BhN,KAAK0sc,mBAAmBnvc,EAAOyhB,EAAKqe,EAAGo3B,GAAmBz0D,KAAK+tC,QAAQ/sC,QAAQsC,IAAKyqC,EAAQoV,SAAS91C,aAOjH66b,EAAS7sc,UAAU2vc,kBAAoB,SAAUj9Z,EAASk1X,EAAU2pC,EAAY5D,EAAgBE,EAAO/va,GACnGn5B,KAAKyrc,eAAemB,EAAY,UAChC,IAEIpG,EACAC,EAHA1wa,EAASoxB,GAAUhuB,EAAMpnB,SACzB5K,EAASylc,EAAW,GAGpB7C,EAAgB5ic,EAAa,OAAE4uB,OAC/B82a,KACJA,EAAUroc,KAAKooc,EAAW,IAC1B,IAAIzwc,EAEJ,IAAKA,EAAI,EAAGA,EAAIywc,EAAWnwc,OAAQN,IACjBywc,EAAWzwc,GAAS,OAAE45B,OACrB/f,QAAU+zb,EAAa/zb,OAClC62b,EAAUroc,KAAKooc,EAAWzwc,IAGlC,IAAK+sc,EAID,IAHA1C,GAAYz5b,EAAGgpB,EAAOhpB,EAAI5F,EAAOwE,OAAQqB,EAAG+oB,EAAO/oB,EAAI,IACvDy5b,GAAU15b,EAAGgpB,EAAOhpB,EAAIgpB,EAAO/f,MAAQ7O,EAAOwE,OAAQqB,EAAG+oB,EAAO/oB,EAAI,IACpEhN,KAAK0sc,mBAAmBlG,EAASC,EAAOxjC,EAAUxuW,GAAmBz0D,KAAK+tC,QAAQ/sC,QAAQsC,IAAKyqC,EAAQoV,SAAS91C,WAC3GlR,EAAI,EAAGA,EAAI0wc,EAAUpwc,OAAQN,IAE9Bqqc,GAAYz5b,GADZgpB,EAAU82a,EAAU1wc,GAAS,OAAE45B,QACThpB,EAAGC,EAAG+oB,EAAO/oB,EAAI,IACvCy5b,GAAU15b,EAAGgpB,EAAOhpB,EAAIgpB,EAAO/f,MAAOhJ,EAAG+oB,EAAO/oB,EAAI,IACpDhN,KAAK0sc,mBAAmBlG,EAASC,EAAOxjC,EAAUxuW,GAAmBz0D,KAAK+tC,QAAQ/sC,QAAQsC,IAAKyqC,EAAQoV,SAAS91C,WAGxH27b,EAAer9b,OAASxE,EAAOwE,OAC/Bq9b,EAAetmC,SAAU,GAK7BwlC,EAAS7sc,UAAU4vc,mBAAqB,SAAUl9Z,EAASk1X,EAAU6pC,EAAa7D,EAAcC,EAAO/va,GACnGn5B,KAAKyrc,eAAeqB,EAAa,UACjC,IAGIvvc,EACAyhB,EAJA+W,EAASoxB,GAAUhuB,EAAMpnB,SACzB5K,EAAS2lc,EAAY,GACrB/C,EAAgB5ic,EAAa,OAAE4uB,OAG/B82a,KACJA,EAAUroc,KAAKsoc,EAAY,IAC3B,IAAI3wc,EAEJ,IAAKA,EAAI,EAAGA,EAAI2wc,EAAYrwc,OAAQN,IAClB2wc,EAAY3wc,GAAS,OAAE45B,OACtBhgB,SAAWg0b,EAAah0b,QACnC82b,EAAUroc,KAAKsoc,EAAY3wc,IAGnC,IAAK+sc,EAID,IAHA3rc,GAAUwP,EAAGgpB,EAAOhpB,EAAIgpB,EAAO/f,MAAQ,GAAIhJ,EAAG+oB,EAAO/oB,EAAI7F,EAAOwE,QAChEqT,GAAQjS,EAAGgpB,EAAOhpB,EAAIgpB,EAAO/f,MAAQ,GAAIhJ,EAAG+oB,EAAO/oB,EAAI7F,EAAOwE,OAASoqB,EAAOhgB,QAC9E/V,KAAK0sc,mBAAmBnvc,EAAOyhB,EAAKikZ,EAAUxuW,GAAmBz0D,KAAK+tC,QAAQ/sC,QAAQsC,IAAKyqC,EAAQoV,SAAS91C,WACvGlR,EAAI,EAAGA,EAAI0wc,EAAUpwc,OAAQN,IAE9BoB,GAAUwP,GADVgpB,EAAU82a,EAAU1wc,GAAS,OAAE45B,QACXhpB,EAAIgpB,EAAO/f,MAAQ,GAAIhJ,EAAG+oB,EAAO/oB,GACrDgS,GAAQjS,EAAGgpB,EAAOhpB,EAAIgpB,EAAO/f,MAAQ,GAAIhJ,EAAG+oB,EAAO/oB,EAAI+oB,EAAOhgB,QAC9D/V,KAAK0sc,mBAAmBnvc,EAAOyhB,EAAKikZ,EAAUxuW,GAAmBz0D,KAAK+tC,QAAQ/sC,QAAQsC,IAAKyqC,EAAQoV,SAAS91C,WAGpH47b,EAAat9b,OAASxE,EAAOwE,OAC7Bs9b,EAAavmC,SAAU,GAK3BwlC,EAAS7sc,UAAUqxc,mBAAqB,SAAUnvc,EAAOyhB,EAAKikZ,EAAUhmZ,EAAK5P,GACzE,IAAIysB,EAEAk+T,EACAh3V,EAAU,IAAI64C,GACd7mC,KACJzV,GACIwP,GAAIxP,EAAMwP,EAAIM,EAAUykT,IAAMzkT,EAAUy2C,MACxC92C,GAAIzP,EAAMyP,EAAIK,EAAUwkT,IAAMxkT,EAAUy2C,OAE5C9kC,GACIjS,GAAIiS,EAAIjS,EAAIM,EAAUykT,IAAMzkT,EAAUy2C,MACtC92C,GAAIgS,EAAIhS,EAAIK,EAAUwkT,IAAMxkT,EAAUy2C,OAEtCvmD,EAAMwP,IAAMiS,EAAIjS,GAChB+sB,EAAI,KAAOv8B,EAAMwP,EAAI,GAAK,KAAOxP,EAAMyP,EAAI,GAAK,IAAMzP,EAAMwP,EAAI,IAAMxP,EAAMyP,EACxE,KAAOzP,EAAMwP,EAAI,GAAK,KAAOxP,EAAMyP,EAAI,GAAK,MAAagS,EAAIjS,EAAI,GAAK,KACrEiS,EAAIhS,EAAI,GAAK,KAAOgS,EAAIjS,EAAI,IAAMiS,EAAIhS,EAAI,MAC1CgS,EAAIjS,EAAI,GAAK,KAAOiS,EAAIhS,EAAI,GAAK,IACtCgrV,GACIx6S,YAAczwC,EAAGxP,EAAMwP,EAAI,EAAGC,EAAGzP,EAAMyP,EAAI,GAC3C0qC,UAAY3qC,EAAGxP,EAAMwP,EAAI,EAAGC,EAAGzP,EAAMyP,EAAI,GACzCsxB,OAAQ,UACRstB,YAAa,EAAGxtB,KAAM,UAAW01B,UAAW,GAAI99C,MAAO,EAAGjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAG4L,MAAO,EAAGiyC,OAAQ,EACnGC,OAAQ,EAAG/8B,SAAS,EAAMrpB,QAAS,EAAGnK,GAAIqzD,MAE9C31D,EAAQxE,KAAOs9B,EACf9mB,EAAQxW,KAAOwE,EAAQxE,KACvBwW,EAAQ2O,MAAQ,EAChB3O,EAAQ4gD,OAAS,EACjB5gD,EAAQ6gD,OAAS,EACjB7gD,EAAQjG,EAAI,EACZiG,EAAQhG,EAAI,EACZgG,EAAQ+C,OAAS,EACjB/C,EAAQgD,MAAQ,EAChBhD,EAAQ1P,GAAKqzD,KACb32D,KAAK+tC,QAAQ6nY,gBAAgBpgZ,SAASytY,EAAUjwZ,GAChDhT,KAAKqmD,KAAK7hD,KAAKwzV,GACfh4V,KAAK+tC,QAAQ6nY,gBAAgB7mV,SAASk0U,EAAUjja,KAAKqmD,KAAKsyG,OAC1Dq/L,GACIx6S,YAAczwC,EAAGiS,EAAIjS,EAAI,EAAGC,EAAGgS,EAAIhS,EAAI,GACvC0qC,UAAY3qC,EAAGiS,EAAIjS,EAAI,EAAGC,EAAGgS,EAAIhS,EAAI,GACrCsxB,OAAQ,UACRstB,YAAa,EAAGxtB,KAAM,UAAW01B,UAAW,GAAI99C,MAAO,EAAGjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAG4L,MAAO,EAAGiyC,OAAQ,EACnGC,OAAQ,EAAG/8B,SAAS,EAAMrpB,QAAS,EAAGnK,GAAImxD,GAAmBz0D,KAAK+tC,QAAQ/sC,QAAQsC,IAAIA,GAAK,WAE/FtD,KAAKqmD,KAAK7hD,KAAKwzV,GACfh4V,KAAK+tC,QAAQ6nY,gBAAgB7mV,SAASk0U,EAAUjja,KAAKqmD,KAAKsyG,SAG1D7+H,EAAI,KAAOv8B,EAAMwP,EAAI,GAAK,KAAOxP,EAAMyP,EAAI,GAAK,KAAOzP,EAAMwP,EAAI,IAAMxP,EAAMyP,EACzE,MAAQzP,EAAMwP,EAAI,GAAK,KAAOxP,EAAMyP,EAAI,GAAK,MAAagS,EAAIjS,EAAI,GAAK,KACtEiS,EAAIhS,EAAI,GAAK,KAAOgS,EAAIjS,EAAI,IAAMiS,EAAIhS,EACvC,MAAQgS,EAAIjS,EAAI,GAAK,KAAOiS,EAAIhS,EAAI,GAAK,IAC7ChM,EAAQxE,KAAOs9B,EACf9mB,EAAQxW,KAAOs9B,EACf9mB,EAAQ2O,MAAQ,EAChB3O,EAAQ4gD,OAAS,EACjB5gD,EAAQ6gD,OAAS,EACjB7gD,EAAQjG,EAAI,EACZiG,EAAQhG,EAAI,EACZgG,EAAQ+C,OAAS,EACjB/C,EAAQgD,MAAQ,EAChBhD,EAAQ1P,GAAKqzD,KACb32D,KAAK+tC,QAAQ6nY,gBAAgBpgZ,SAASytY,EAAUjwZ,GAChDglV,GACIlhU,SAAS,EAAMrpB,QAAS,EAAGnK,GAAIqzD,KAC/BnZ,YAAczwC,EAAGxP,EAAMwP,EAAI,EAAGC,EAAGzP,EAAMyP,EAAI,GAC3C0qC,UAAY3qC,EAAGxP,EAAMwP,EAAI,EAAGC,EAAGzP,EAAMyP,EAAI,GACzCsxB,OAAQ,UACRstB,YAAa,EAAGxtB,KAAM,UAAW01B,UAAW,IAAK99C,MAAO,EAAGjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAG4L,MAAO,EAAGiyC,OAAQ,EACpGC,OAAQ,GAEZ7zD,KAAKqmD,KAAK7hD,KAAKwzV,GACfh4V,KAAK+tC,QAAQ6nY,gBAAgB7mV,SAASk0U,EAAUjja,KAAKqmD,KAAKsyG,OAC1Dq/L,GACIhiV,MAAO,EAAGjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAG4L,MAAO,EAAGiyC,OAAQ,EACnDC,OAAQ,EAAG/8B,SAAS,EAAMrpB,QAAS,EAAGnK,GAAIqzD,KAC1CnZ,YAAczwC,EAAGiS,EAAIjS,EAAI,EAAGC,EAAGgS,EAAIhS,EAAI,GACvC0qC,UAAY3qC,EAAGiS,EAAIjS,EAAI,EAAGC,EAAGgS,EAAIhS,EAAI,GACrCsxB,OAAQ,UACRstB,YAAa,EAAGxtB,KAAM,UAAW01B,UAAW,KAEhD9zD,KAAKqmD,KAAK7hD,KAAKwzV,GACfh4V,KAAK+tC,QAAQ6nY,gBAAgB7mV,SAASk0U,EAAUjja,KAAKqmD,KAAKsyG,QAE9Dq/L,GACIx6S,YAAczwC,EAAGxP,EAAMwP,EAAGC,EAAGzP,EAAMyP,GACnC0qC,UAAY3qC,EAAGiS,EAAIjS,EAAGC,EAAGgS,EAAIhS,GAAKsxB,OAAQ,UAAWstB,YAAa,EAAGxtB,KAAM,UAC3E01B,UAAW,IAAK99C,MAAO,EAAGjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAG4L,MAAO,EAAGiyC,OAAQ,EACnEC,OAAQ,EAAG/8B,SAAS,EAAMrpB,QAAS,EAAGnK,GAAIqzD,MAE9C32D,KAAKqmD,KAAK7hD,KAAKwzV,GACfh4V,KAAK+tC,QAAQ6nY,gBAAgB7mV,SAASk0U,EAAUjja,KAAKqmD,KAAKsyG,QAM9DuvS,EAAS7sc,UAAU8uc,iBAAmB,SAAUJ,EAAch0a,EAAQg3a,GAClE,IAAI1E,EACJ,OAAQ0E,GACJ,IAAK,OACD1E,GACI9qc,OAASwP,EAAIg9b,EAAc,EAAG/8b,EAAGX,KAAK8T,IAAI4pb,EAAa/8b,EAAG+oB,EAAO/oB,IACjEgS,KAAOjS,EAAIg9b,EAAc,EAAG/8b,EAAGX,KAAKC,IAAIy9b,EAAa/8b,EAAI+8b,EAAah0b,OAAQggB,EAAO/oB,EAAI+oB,EAAOhgB,SAChGlK,QAASk+b,EAAah9b,EAAIgpB,EAAOhpB,EAAGd,QAAS,EAAGvF,KAAM,aAE1D,MACJ,IAAK,QACD2hc,GACI3hc,KAAM,YACNnJ,OAASwP,EAAIg9b,EAAah9b,EAAIg9b,EAAa/zb,MAAQhJ,EAAGX,KAAK8T,IAAI4pb,EAAa/8b,EAAG+oB,EAAO/oB,IACtFnB,QAASk+b,EAAah9b,EAAIg9b,EAAa/zb,MAAQ+f,EAAOhpB,EAAIgpB,EAAO/f,MACjE/J,QAAS,EACT+S,KACIjS,EAAIg9b,EAAah9b,EAAIg9b,EAAa/zb,MAClChJ,EAAGX,KAAKC,IAAIy9b,EAAa/8b,EAAI+8b,EAAah0b,OAAQggB,EAAO/oB,EAAI+oB,EAAOhgB,UAG5E,MACJ,IAAK,MACDsyb,GACIp8b,QAAS89b,EAAa/8b,EAAI+oB,EAAO/oB,EAAGnB,QAAS,EAAGnF,KAAM,YACtDnJ,OAASwP,EAAIV,KAAK8T,IAAI4pb,EAAah9b,EAAGgpB,EAAOhpB,GAAKC,EAAG+8b,EAAa/8b,GAClEgS,KAAOjS,EAAIV,KAAKC,IAAIy9b,EAAah9b,EAAIg9b,EAAa/zb,MAAO+f,EAAOhpB,EAAIgpB,EAAO/f,OAAShJ,EAAG+8b,EAAa/8b,IAExG,MACJ,IAAK,SACDq7b,GACI3hc,KAAM,YAAauF,QAAS89b,EAAa/8b,EAAI+8b,EAAah0b,OAASggB,EAAO/oB,EAAI+oB,EAAOhgB,OAAQlK,QAAS,EACtGmT,KACIjS,EAAIV,KAAKC,IAAIy9b,EAAah9b,EAAIg9b,EAAa/zb,MAAO+f,EAAOhpB,EAAIgpB,EAAO/f,OACpEhJ,EAAG+8b,EAAa/8b,EAAI+8b,EAAah0b,QAErCxY,OAASwP,EAAIV,KAAK8T,IAAI4pb,EAAah9b,EAAGgpB,EAAOhpB,GAAKC,EAAG+8b,EAAa/8b,EAAI+8b,EAAah0b,SAEvF,MACJ,IAAK,YACDsyb,GACI9qc,OAASwP,EAAIV,KAAK8T,IAAI4pb,EAAah9b,EAAGgpB,EAAOhpB,GAAKC,EAAG+8b,EAAa/8b,EAAI+8b,EAAah0b,QACnFiJ,KACIjS,EAAIV,KAAKC,IAAIy9b,EAAah9b,EAAIg9b,EAAa/zb,MAAO+f,EAAOhpB,EAAIgpB,EAAO/f,OACpEhJ,EAAG+8b,EAAa/8b,EAAI+8b,EAAah0b,QAErC9J,QAAS89b,EAAa/8b,EAAI+8b,EAAah0b,OAASggB,EAAO/oB,EAAGnB,QAAS,EAAGnF,KAAM,aAEhF,MACJ,IAAK,YACD2hc,GACI9qc,OAASwP,EAAIV,KAAK8T,IAAI4pb,EAAah9b,EAAGgpB,EAAOhpB,GAAKC,EAAG+8b,EAAa/8b,GAClEgS,KAAOjS,EAAIV,KAAKC,IAAIy9b,EAAah9b,EAAIg9b,EAAa/zb,MAAO+f,EAAOhpB,EAAIgpB,EAAO/f,OAAShJ,EAAG+8b,EAAa/8b,GACpGf,QAAS89b,EAAa/8b,EAAI+oB,EAAO/oB,EAAI+oB,EAAOhgB,OAAQlK,QAAS,EAAGnF,KAAM,aAE1E,MACJ,IAAK,YACD2hc,GACI9qc,OAASwP,EAAIg9b,EAAah9b,EAAIg9b,EAAa/zb,MAAQhJ,EAAGX,KAAK8T,IAAI4pb,EAAa/8b,EAAG+oB,EAAO/oB,IACtFgS,KACIjS,EAAIg9b,EAAah9b,EAAIg9b,EAAa/zb,MAClChJ,EAAGX,KAAKC,IAAIy9b,EAAa/8b,EAAI+8b,EAAah0b,OAAQggB,EAAO/oB,EAAI+oB,EAAOhgB,SAExElK,QAASk+b,EAAah9b,EAAIg9b,EAAa/zb,MAAQ+f,EAAOhpB,EAAGd,QAAS,EAAGvF,KAAM,aAE/E,MACJ,IAAK,YACD2hc,GACI9qc,OAASwP,EAAIg9b,EAAc,EAAG/8b,EAAIX,KAAK8T,IAAI4pb,EAAa/8b,EAAG+oB,EAAO/oB,IAClEgS,KAAOjS,EAAIg9b,EAAc,EAAG/8b,EAAGX,KAAKC,IAAIy9b,EAAa/8b,EAAI+8b,EAAah0b,OAAQggB,EAAO/oB,EAAI+oB,EAAOhgB,SAChGlK,QAASk+b,EAAah9b,EAAIgpB,EAAOhpB,EAAIgpB,EAAO/f,MAAO/J,QAAS,EAAGvF,KAAM,aAEzE,MACJ,IAAK,UACD2hc,GACI9qc,OAASwP,EAAIg9b,EAAah9b,EAAIg9b,EAAa/zb,MAAQ,EAAIhJ,EAAIX,KAAK8T,IAAI4pb,EAAa/8b,EAAG+oB,EAAO/oB,IAC3FgS,KACIjS,EAAIg9b,EAAah9b,EAAIg9b,EAAa/zb,MAAQ,EAC1ChJ,EAAGX,KAAKC,IAAIy9b,EAAa/8b,EAAI+8b,EAAah0b,OAAQggB,EAAO/oB,EAAI+oB,EAAOhgB,SAExElK,QAASk+b,EAAah9b,EAAIg9b,EAAa/zb,MAAQ,GAAK+f,EAAOhpB,EAAIgpB,EAAO/f,MAAQ,GAAI/J,QAAS,EAAGvF,KAAM,eAExG,MACJ,IAAK,UACD2hc,GACI9qc,OAASwP,EAAIV,KAAK8T,IAAI4pb,EAAah9b,EAAGgpB,EAAOhpB,GAAKC,EAAG+8b,EAAa/8b,EAAI+8b,EAAah0b,OAAS,GAC5FiJ,KACIjS,EAAIV,KAAKC,IAAIy9b,EAAah9b,EAAIg9b,EAAa/zb,MAAO+f,EAAOhpB,EAAIgpB,EAAO/f,OACpEhJ,EAAG+8b,EAAa/8b,EAAI+8b,EAAah0b,OAAS,GAE9C9J,QAAS89b,EAAa/8b,EAAI+8b,EAAah0b,OAAS,GAAKggB,EAAO/oB,EAAI+oB,EAAOhgB,OAAS,GAAIlK,QAAS,EAAGnF,KAAM,eAIlH,OAAO2hc,GAMXH,EAAS7sc,UAAU4ma,UAAY,SAAUl0X,EAASpsB,GAC9C,IACIsgZ,EADejia,KAAK+tC,QAAQ4c,aACHs3W,UACzBjsZ,EAAQ2L,GAASsgZ,GAAa,GAClC,OAAIjsZ,GAAUisZ,EAAY,EACftgZ,EAAQsgZ,EAAYjsZ,EAGpB2L,EAAQ3L,GAMvBkyb,EAAS7sc,UAAU6uc,YAAc,SAAUxvY,EAAW+lW,EAAgBt5Z,GAClE,OACInH,KAAK+tC,QAAQmd,cAAcR,MAAMjuD,QAAUuD,KAAK+tC,QAAQmd,cAAcR,MAAM,GAAGpnD,KAAO6D,EAAO7D,IAUrG4kc,EAAS7sc,UAAU2uc,UAAY,SAAUn8B,EAAetta,EAAMF,EAAOynb,EAAU8iB,GAK3E,IAAK,IAHDoC,EACAj3a,EAFA20B,KAGAyzX,EAAQtQ,EAAcoQ,UAAU2sB,EAAc9iB,EAAWznb,GACpDlE,EAAI,EAAGA,EAAIgib,EAAM1hb,OAAQN,IAAK,CACnC,IAAIijb,EAAOjB,EAAMhib,GACjB,GAAIijb,EAAKl4X,QAAQzqD,OAAS,EACtB,IAAK,IAAIgnB,EAAI,EAAGA,EAAI27Z,EAAKl4X,QAAQzqD,OAAQgnB,IACrCupb,EAAK5tB,EAAKl4X,QAAQzjC,GACZzjB,KAAK+tC,QAAQ2sB,UAAUsyY,EAAG1pc,cAAe46C,KAAc8uZ,EAAGl2a,UAC5Df,EAASoxB,GAAU6lZ,IACQ,IAAvBtiZ,EAAMnsD,QAAQyuc,IAAchtc,KAAKklc,eAAe7kc,EAAO01B,IACvD20B,EAAMlmD,KAAKwoc,GAEXpC,GAAeA,EAAYrsc,QAAQyuc,IAAOhtc,KAAKklc,eAAepd,EAAU/xZ,IACxE60a,EAAYpmc,KAAKwoc,IAMrC,OAAOtiZ,GAEXw9Y,EAAS7sc,UAAU6pc,eAAiB,SAAU7kc,EAAO01B,GACjD,OAAWA,EAAOhpB,EAAK1M,EAAM0M,EAAI1M,EAAM2V,OAAY3V,EAAM0M,EAAKgpB,EAAOhpB,EAAIgpB,EAAO/f,OACxE+f,EAAO/oB,EAAK3M,EAAM2M,EAAI3M,EAAM0V,QAAc1V,EAAM2M,EAAK+oB,EAAO/oB,EAAI+oB,EAAOhgB,QAMnFmyb,EAAS7sc,UAAU2+a,iBAAmB,SAAUjsY,GAC5C,IAAI+hZ,EAAgBr7X,GAAmBz0D,KAAK+tC,QAAQ/sC,QAAQsC,IAAI2rB,eAAe,kBAC3Eo3B,EAAOoO,GAAmBz0D,KAAK+tC,QAAQ/sC,QAAQsC,IAAI2rB,eAAe,aAClE6ga,GACAA,EAAcrvb,WAAW6E,YAAYwqb,GAErCzpY,GACAA,EAAK5lD,WAAW6E,YAAY+gD,IAMpC6hZ,EAAS7sc,UAAUowc,eAAiB,SAAU1uc,EAAKC,EAAOiwc,GACtD,IAAI9wc,EACAsnB,EACA4V,EACJ,GAAI4za,EACA,IAAK9wc,EAAI,EAAGA,EAAIY,EAAIN,OAAQN,IACxB,IAAKsnB,EAAItnB,EAAI,EAAGsnB,EAAI1mB,EAAIN,OAAQgnB,IACxB1mB,EAAIZ,GAAGa,GAASD,EAAI0mB,GAAGzmB,KACvBq8B,EAAOt8B,EAAIZ,GACXY,EAAIZ,GAAKY,EAAI0mB,GACb1mB,EAAI0mB,GAAK4V,QAMrB,IAAKl9B,EAAI,EAAGA,EAAIY,EAAIN,OAAQN,IACxB,IAAKsnB,EAAItnB,EAAI,EAAGsnB,EAAI1mB,EAAIN,OAAQgnB,IACxB1mB,EAAIZ,GAAGa,GAASD,EAAI0mB,GAAGzmB,KACvBq8B,EAAOt8B,EAAIZ,GACXY,EAAIZ,GAAKY,EAAI0mB,GACb1mB,EAAI0mB,GAAK4V,IAS7B6ua,EAAS7sc,UAAUywc,6BAA+B,SAAUvC,EAAe2D,EAAexgc,EAAKm/b,GAC3F,IAAIsB,EACApD,EACA1vZ,EACAl+C,EACJ,IAAKA,EAAI,EAAGA,EAAIotc,EAAc9sc,SAC1B0wc,EAAe5D,EAAcptc,EAAI,GAAM,IAAQ,OAC/C4tc,EAAiBR,EAAcptc,GAAM,IAAQ,OAC7Ck+C,EAAO8yZ,EAAWpgc,EAAIg9b,EAAah9b,EAAIg9b,EAAa/zb,MAChD3J,KAAKE,IAAI8tC,EAAO6yZ,IAAkB,GAJJ/wc,IAK9B0vc,EAAcA,EAAcpvc,QAAU8sc,EAAcptc,GAChD4tc,EAAa/8b,EAAIN,IACjBA,EAAMq9b,EAAa/8b,GAO/B,OAAON,GAKXw7b,EAAS7sc,UAAU2wc,8BAAgC,SAAUxC,EAAgB0D,EAAexgc,EAAKm/b,EAAelC,GAC5G,IACIxic,EACA4ic,EACAoD,EACA9yZ,EAJA+yZ,EAAiB5D,EAAe,GAAGl3Z,SAKvC,GAAIjmC,KAAKE,IAAI2gc,EAAgBE,IAAmBzD,EAC5C,IAAK,IAAIxtc,EAAI,EAAGA,EAAIqtc,EAAe/sc,OAAS,IACxC0K,EAASqic,EAAertc,GAAGY,IAC3Bgtc,EAAiBP,EAAertc,EAAI,GAAM,IAAQ,OAClDgxc,EAAchmc,EAAa,OAC3BkzC,EAAO0vZ,EAAah9b,EAAIogc,EAAWpgc,EAAIogc,EAAWn3b,MAC9C3J,KAAKE,IAAI8tC,EAAO6yZ,IAAkB,GALK/wc,IAMvC0vc,EAAcA,EAAcpvc,QAAU+sc,EAAertc,EAAI,GACrDgxc,EAAWngc,EAAIN,IACfA,EAAMygc,EAAWngc,GAQjC,OAAON,GAEXw7b,EAAS7sc,UAAUgxc,4BAA8B,SAAU5C,EAAcyD,EAAezgc,EAAOo/b,GAI3F,IAAK,IAHDsB,EACApD,EACA1vZ,EACKl+C,EAAI,EAAGA,EAAIstc,EAAahtc,SAC7B0wc,EAAe1D,EAAattc,EAAI,GAAM,IAAQ,OAC9C4tc,EAAiBN,EAAattc,GAAM,IAAQ,OAC5Ck+C,EAAO8yZ,EAAWngc,EAAI+8b,EAAa/8b,EAAI+8b,EAAah0b,OAChD1J,KAAKE,IAAI8tC,EAAO6yZ,IAAkB,GAJD/wc,IAKjC0vc,EAAcA,EAAcpvc,QAAUgtc,EAAattc,GAC/C4tc,EAAah9b,EAAIg9b,EAAa/zb,MAAQvJ,IACtCA,EAAQs9b,EAAah9b,EAAIg9b,EAAa/zb,OAOlD,OAAOvJ,GAKXy7b,EAAS7sc,UAAUixc,+BAAiC,SAAU5C,EAAiBwD,EAAezgc,EAAOo/b,EAAelC,GAChH,IACIxic,EACA4ic,EACAoD,EACA9yZ,EAJA+yZ,EAAiB1D,EAAgB,GAAGp3Z,SAKxC,GAAIjmC,KAAKE,IAAI2gc,EAAgBE,IAAmBzD,EAC5C,IAAK,IAAIxtc,EAAI,EAAGA,EAAIutc,EAAgBjtc,OAAS,IACzC0K,EAASuic,EAAgBvtc,GAAGY,IAC5Bgtc,EAAiBL,EAAgBvtc,EAAI,GAAM,IAAQ,OACnDgxc,EAAchmc,EAAa,OAC3BkzC,EAAO0vZ,EAAa/8b,EAAImgc,EAAWngc,EAAImgc,EAAWp3b,OAC9C1J,KAAKE,IAAI8tC,EAAO6yZ,IAAkB,GALM/wc,IAMxC0vc,EAAcA,EAAcpvc,QAAUitc,EAAgBvtc,EAAI,GACtDgxc,EAAWpgc,EAAIogc,EAAWn3b,MAAQvJ,IAClCA,EAAQ0gc,EAAWpgc,EAAIogc,EAAWn3b,OAQlD,OAAOvJ,GAMXy7b,EAAS7sc,UAAU6na,SAAW,WAC1B,IAAID,EAOJ,OANIjja,KAAK+tC,QAAQ4c,aAAaxM,YAAc6iW,GAAgB+4B,gBACxD9W,EAAWzia,SAAS4C,gBAAgB,6BAA8B,MACzDI,aAAa,KAAM,kBAC5By/Z,EAASz/Z,aAAa,iBAAkB,cACxCixD,GAAmBz0D,KAAK+tC,QAAQ/sC,QAAQsC,IAAI3B,YAAYsha,IAErDA,GAcXilC,EAAS7sc,UAAUiX,QAAU,aAQ7B41b,EAAS7sc,UAAU0kC,cAAgB,WAI/B,MAAO,YAEJmoa,KChwCPr2B,GAA0B,WAK1B,SAASA,IACL7xa,KAAKqtc,WAAY,EACjBrtc,KAAK09Z,cAooBT,OAhoBAmU,EAASx2a,UAAU0ob,YAAc,SAAUh2Y,GACvCA,EAAQmiY,aACJmpB,SAAS,EAAOD,SAAS,EAAOkU,aAAc,KAC9C9oc,KAAMupC,EAAQuxX,gBAAgBhka,KAAKyyC,GAAUw3Y,KAAMnqb,SAAUoqb,KAAMpqb,SACnE0la,iBAAkB/yX,EAAQ+yX,iBAAiBxla,KAAKyyC,GAAUozX,eAAgBpzX,EAAQozX,eAAe7la,KAAKyyC,GACtGw/Z,OAAQ,KAAMC,aAAeC,eAIrC57B,EAASx2a,UAAUika,gBAAkB,SAAUH,EAAOpxX,GAClD,IAAI2/Z,EAAc,KAElB,GAAI3/Z,EAAQmiY,YAAYq9B,OAAQ,CAE5B,IAAsB,IADTx/Z,EAAQmiY,YAAYq9B,OAAOpuC,GAC7B9mY,OACP,OAGJ0V,EAAQmiY,aAAeniY,EAAQmiY,YAAYkpB,SAAWrrZ,EAAQmiY,YAAYo9B,gBAC1EI,EAAc3/Z,EAAQmiY,YAAYo9B,cAClBrka,KACRyka,EAAY7gV,WACA6gV,EAAYzka,KACd4jF,SAAW,KACrB6gV,EAAYzka,KAAOk2X,EACnBA,EAAMtyS,SAAW6gV,IAIrBA,EAAYzka,KAAOk2X,EACnBA,EAAMtyS,SAAW6gV,IAGzB3/Z,EAAQmiY,YAAYo9B,aAAenuC,EACnCn/Z,KAAK2tc,eAAe5/Z,GACpBA,EAAQmiY,YAAYkpB,SAAU,EAC9BrrZ,EAAQmiY,YAAYmpB,SAAU,GAGlCxnB,EAASx2a,UAAUkqb,KAAO,SAAUx3Y,GAChC,IAAIoxX,EAAQn/Z,KAAK4tc,aAAa7/Z,GAC1B8/Z,EAAsB,EACtB1uC,IACuB,aAAnBA,EAAMh0N,UACa,aAAfg0N,EAAMz4Z,MACNmnc,IACA7tc,KAAKqtc,WAAY,GAGjBrtc,KAAK8tc,UAAU3uC,EAAOpxX,GAEtB/tC,KAAKqtc,YACLrtc,KAAK+tc,gBAAgB5uC,EAAOpxX,EAAS8/Z,GACrC7tc,KAAKqtc,WAAY,IAIrBt/Z,EAAQmiY,YAAYqV,KAAKpmB,KAIrC0S,EAASx2a,UAAUsyc,eAAiB,SAAU5/Z,GAC1C,IAGImsY,EACAC,EAJAqzB,KACAC,KACAO,EAAYjga,EAAQmiY,YAAYo9B,aAUpC,IAPAU,EAAYjga,EAAQmiY,YAAYo9B,aAC5Bv/Z,EAAQmiY,YAAYkpB,SAAoD,IAAzCrrZ,EAAQmiY,YAAYs9B,UAAU/wc,OAC7DuD,KAAKiuc,iBAAiBT,EAAWQ,GAGjChuc,KAAKiuc,iBAAiBR,EAAWO,GAE9BA,GAAaA,EAAUnhV,UAC1BqtT,EAAU8zB,EAAUnhV,SACpB7sH,KAAKiuc,iBAAiBT,EAAWtzB,GACjC8zB,EAAYA,EAAUnhV,SAG1B,IADAmhV,EAAYjga,EAAQmiY,YAAYo9B,aACzBU,GAAaA,EAAU/ka,MAC1BkxY,EAAU6zB,EAAU/ka,KACpBjpC,KAAKiuc,iBAAiBR,EAAWtzB,GACjC6zB,EAAYA,EAAU/ka,KAE1B8E,EAAQmiY,YAAYs9B,UAAYA,EAChCz/Z,EAAQmiY,YAAYu9B,UAAYA,GAEpC57B,EAASx2a,UAAU4yc,iBAAmB,SAAU5pW,EAAMtnG,GAC9CA,GAAoB,eAAbA,EAAI2J,MAAsC,aAAb3J,EAAI2J,MACxC29F,EAAK7/F,MACD46Z,WAAYria,EAAIqia,WAAaria,EAAIqia,WAAa,KAC9CC,WAAYtia,EAAIsia,WAAatia,EAAIsia,WAAa,KAC9C34Z,KAAM3J,EAAI2J,KAAO3J,EAAI2J,KAAO,KAC5BykM,SAAUpuM,EAAIouM,SAAWpuM,EAAIouM,SAAW,QAIpD0mO,EAASx2a,UAAU0yc,gBAAkB,SAAU5uC,EAAOpxX,EAAS8/Z,GAC3D,KAA+B,IAAxBA,GACH7tc,KAAK8tc,UAAU3uC,EAAOpxX,GAEH,gBADnBoxX,EAAQn/Z,KAAK4tc,aAAa7/Z,IAChBrnC,KACNmnc,IAEoB,aAAf1uC,EAAMz4Z,MACXmnc,IAGRA,EAAsB,GAE1Bh8B,EAASx2a,UAAUyyc,UAAY,SAAU3uC,EAAOpxX,GAC5C,IAAIhxC,EAIJ,GAHmB,oBAAfoia,EAAMz4Z,MAA6C,sBAAfy4Z,EAAMz4Z,MAA+C,2BAAfy4Z,EAAMz4Z,OAChF3J,EAAOoia,EAAgB,YAER,eAAfA,EAAMz4Z,MAAwC,aAAfy4Z,EAAMz4Z,MACjCqnC,EAAQmiY,YAAYs9B,UAAU/wc,OAAS,EAAG,CAC1C,IAAIyxc,EAAYnga,EAAQmiY,YAAYs9B,UAAU/kb,OAAO,EAAG,GACxDslB,EAAQmiY,YAAYu9B,UAAUhlb,OAAO,EAAG,EAAGylb,EAAU,IAK7D,OAFAnga,EAAQ8a,uBAAsB,GAC9B9a,EAAQ0T,gBAAkBC,GAAcmwX,SAChC1S,EAAMz4Z,MACV,IAAK,kBACL,IAAK,QACL,IAAK,aACD1G,KAAKmuc,sBAAsBpxc,EAAKgxC,GAChC,MACJ,IAAK,cACL,IAAK,SACD/tC,KAAKouc,kBAAkBrxc,EAAKgxC,EAASoxX,GACrC,MACJ,IAAK,kBACDn/Z,KAAKquc,sBAAsBtxc,EAAKgxC,EAASoxX,GACzC,MACJ,IAAK,oBACDn/Z,KAAKsuc,wBAAwBvxc,EAAKgxC,GAClC,MACJ,IAAK,kBACD/tC,KAAKuuc,sBAAsBpvC,EAAOpxX,GAAS,GAC3C,MACJ,IAAK,oBACDoxX,EAAMqvC,QAAS,EACfxuc,KAAKyuc,wBAAwBtvC,EAAOpxX,GACpCoxX,EAAMqvC,QAAS,EACf,MACJ,IAAK,yBACDrvC,EAAMqvC,QAAS,EACfxuc,KAAK0uc,6BAA6BvvC,EAAOpxX,GACzCoxX,EAAMqvC,QAAS,EACf,MACJ,IAAK,wBACDrvC,EAAMqvC,QAAS,EACfxuc,KAAK2uc,4BAA4BxvC,EAAOpxX,GACxCoxX,EAAMqvC,QAAS,EACf,MACJ,IAAK,QACDxuc,KAAK4xa,QAAQzS,EAAOpxX,GACpB,MACJ,IAAK,UACD/tC,KAAKs0F,MAAM6qU,EAAOpxX,GAClB,MACJ,IAAK,iBACD/tC,KAAK4uc,qBAAqB7xc,EAAKgxC,GAGvCA,EAAQ0T,iBAAmBC,GAAcmwX,SACzC9jY,EAAQ8a,uBAAsB,GAC9B9a,EAAQq3Y,qBAAqBjmB,IAEjC0S,EAASx2a,UAAUi5F,MAAQ,SAAUu6W,EAAc9ga,GAC/CA,EAAQ3pC,IAAIyqc,EAAaxvC,aAE7BwS,EAASx2a,UAAUu2a,QAAU,SAAUzS,EAAOpxX,GAC1CoxX,EACMC,WAAa72W,GAAY42W,EAAME,YACrC,IAAI9+Z,EAAO4+Z,EAAME,WACjBtxX,EAAQsvX,eAAeuU,QAAQrxa,IAEnCsxa,EAASx2a,UAAUyzc,eAAiB,SAAUzxc,GAC1C,MAAY,WAARA,GAA4B,YAARA,GAK5Bw0a,EAASx2a,UAAUm1N,YAAc,SAAU1oL,EAAYuvB,GACnD,IAAK,IAAIj5D,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK+5D,GAAWj5D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/D,IAAIf,EAAMwF,EAAGzE,GACR4B,KAAK8uc,eAAezxc,KACjBg6D,EAASh6D,aAAgBiB,OACzB0B,KAAKwwN,YAAY1oL,EAAWzqC,GAAMg6D,EAASh6D,IAG3CyqC,EAAWzqC,GAAOg6D,EAASh6D,MAK3Cw0a,EAASx2a,UAAUkzc,sBAAwB,SAAUpvC,EAAOpxX,EAASgha,GACjE,IAAI3vC,EAAaD,EAAMC,WACnBC,EAAaF,EAAME,WACvBr/Z,KAAKwwN,YAAYziL,EAAUgha,EAAS3vC,EAAaC,GACjD0vC,EAAShha,EAAQg7C,kBAAkBq2U,EAAYC,GAActxX,EAAQg7C,kBAAkBs2U,EAAYD,GACnGrxX,EAAQ0T,eAAiB1T,EAAQ0T,eAAiBC,GAAcmwX,UAEpEA,EAASx2a,UAAUuzc,qBAAuB,SAAU7xc,EAAKgxC,GACrD,IAEIgK,EAFA57C,EAAI,EAGR,GAAIY,EAAI0tD,YAAc1tD,EAAI0tD,WAAWhuD,OAAS,EAC1C,IAAKN,EAAI,EAAGA,EAAIY,EAAI0tD,WAAWhuD,OAAQN,IACnC47C,EAAYh7C,EAAI0tD,WAAWtuD,GAC3B6D,KAAKgvc,eAAej3Z,EAAWhK,IAI3C8jY,EAASx2a,UAAU2zc,eAAiB,SAAUj3Z,EAAWhK,GACrD,IAAI0rB,EAAO1rB,EAAQ2sB,UAAU3iB,EAAUz0C,IACvCm2D,EAAKhwB,SAAWsO,EAAUtO,SAC1BsE,EAAQsvX,eAAewI,eAAepsW,IAE1Co4W,EAASx2a,UAAU8yc,sBAAwB,SAAUpxc,EAAKgxC,GACtD,IACIxtC,EACAw3C,EAFA57C,EAAI,EAGR,GAAIY,EAAI2tD,OAAS3tD,EAAI2tD,MAAMjuD,OAAS,EAChC,IAAKN,EAAI,EAAGA,EAAIY,EAAI2tD,MAAMjuD,OAAQN,IAC9BoE,EAAOxD,EAAI2tD,MAAMvuD,GACjB6D,KAAKivc,gBAAgB1uc,EAAMwtC,GAGnC,GAAIhxC,EAAI0tD,YAAc1tD,EAAI0tD,WAAWhuD,OAAS,EAC1C,IAAKN,EAAI,EAAGA,EAAIY,EAAI0tD,WAAWhuD,OAAQN,IACnC47C,EAAYh7C,EAAI0tD,WAAWtuD,GAC3B6D,KAAKkvc,kBAAkBn3Z,EAAWhK,IAI9C8jY,EAASx2a,UAAU4zc,gBAAkB,SAAUlyc,EAAKgxC,EAASoxX,GACzD,IAAI5+Z,EAAOwtC,EAAQ2sB,UAAU39D,EAAIuG,IAOjC,GANIvG,EAAIowZ,YAAc5sZ,EAAK4sZ,WACvBp/W,EAAQmlY,WAAWn2a,EAAKA,EAAIowZ,YAE3BpwZ,EAAIowZ,WAAa5sZ,EAAK4sZ,WACvBp/W,EAAQ22Y,cAAc3nb,EAAIuG,IAE1B/C,EAAK4sZ,UAAW,CAChB,IAAIr7F,EAAK/0T,EAAIkgC,OAAOzwB,KAAOjM,EAAK08B,OAAOzwB,KACnCqlT,EAAK90T,EAAIkgC,OAAOvwB,IAAMnM,EAAK08B,OAAOvwB,IACtCqhC,EAAQukE,KAAK/xG,EAAMuxT,EAAID,OAEtB,CACGC,EAAK/0T,EAAI8O,QAAUtL,EAAKwR,QAAQlG,QAChCgmT,EAAK90T,EAAIkP,QAAU1L,EAAKwR,QAAQ9F,QACpC8hC,EAAQukE,KAAK/xG,EAAMuxT,EAAID,GAEvB9jR,EAAQ0/W,YACR1/W,EAAQ0/W,WAAWy4B,YAAY3lb,EAAMwtC,IAG7C8jY,EAASx2a,UAAU+yc,kBAAoB,SAAUrxc,EAAKgxC,EAASoxX,GAC3D,IACIpnX,EACAx3C,EAFApE,EAAI,EAGR,GAAIY,GAAOA,EAAI2tD,OAAS3tD,EAAI2tD,MAAMjuD,OAAS,EACvC,IAAKN,EAAI,EAAGA,EAAIY,EAAI2tD,MAAMjuD,OAAQN,IAE9B,IADAoE,EAAOxD,EAAI2tD,MAAMvuD,IACRie,SAGL,IAAK,IADDswC,EAAQ3c,EAAQsvX,eAAewE,kBAAkBtha,MAC5CmnB,EAAM,EAAGA,EAAMgjC,EAAMjuD,OAAQirB,IAAO,CACzC,IAAI4pZ,EAAWnS,EAAMzB,WAAWhzW,EAAMhjC,GAAKpkB,IACtC2tZ,GAAcqgB,KAAc/xX,IAC7Bv/C,KAAK6/b,YAAYvuB,EAAUvjY,EAASoxX,GACpCn/Z,KAAKivc,gBAAgB39B,EAAUvjY,EAASoxX,IAGxCn/Z,KAAKkvc,kBAAkB59B,EAAUvjY,EAASoxX,QAKlDn/Z,KAAK6/b,YAAYt/b,EAAMwtC,GACvB/tC,KAAKivc,gBAAgB1uc,EAAMwtC,GAIvC,GAAIhxC,GAAOA,EAAI0tD,YAAc1tD,EAAI0tD,WAAWhuD,OAAS,EAAG,CACpD,IAAIguD,EAAa1tD,EAAI0tD,WACrB,IAAKtuD,EAAI,EAAGA,EAAIsuD,EAAWhuD,OAAQN,IAC/B47C,EAAY0S,EAAWtuD,GACvB6D,KAAKkvc,kBAAkBn3Z,EAAWhK,KAI9C8jY,EAASx2a,UAAUwkc,YAAc,SAAU9ic,EAAKgxC,EAASoxX,GACrD,IAAI5+Z,EAAOwtC,EAAQ2sB,UAAU39D,EAAIuG,IAC7B6rc,EAAapyc,EAAIgV,QAAQ0nC,WAAWzjC,MAAQzV,EAAKwR,QAAQ0nC,WAAWzjC,MACpEo5b,EAAcryc,EAAIgV,QAAQ0nC,WAAW1jC,OAASxV,EAAKwR,QAAQ0nC,WAAW1jC,OACtEopZ,GAASA,EAAMzB,aACfyB,EAAMzB,WAAW3ga,EAAIuG,IAAMilD,GAAYhoD,IAE3CwtC,EAAQ+V,MAAMvjD,EAAM4uc,EAAYC,GAC5Bric,EAAGhQ,EAAIgV,QAAQlG,QAAUtL,EAAKwR,QAAQlG,QACtCmB,EAAGjQ,EAAIgV,QAAQ9F,QAAU1L,EAAKwR,QAAQ9F,WAG9C4la,EAASx2a,UAAUgzc,sBAAwB,SAAUtxc,EAAKgxC,EAASoxX,GAC/D,IACI5+Z,EACAw3C,EAFA57C,EAAI,EAGJkzc,EAActha,EAAQmd,cAK1B,GAJAmkZ,EAAY/oZ,YAAcvpD,EAAIupD,YAC1B+oZ,GAAeA,EAAYt9b,UAC3Bs9b,EAAYt9b,QAAQu0C,YAAcvpD,EAAIupD,aAEtCvpD,GAAOA,EAAI2tD,OAAS3tD,EAAI2tD,MAAMjuD,OAAS,EACvC,IAAKN,EAAI,EAAGA,EAAIY,EAAI2tD,MAAMjuD,OAAQN,IAC9BoE,EAAOxD,EAAI2tD,MAAMvuD,GACjB6D,KAAKsvc,gBAAgB/uc,EAAMwtC,GAC3B/tC,KAAKivc,gBAAgB1uc,EAAMwtC,GAGnC,GAAIhxC,GAAOA,EAAI0tD,YAAc1tD,EAAI0tD,WAAWhuD,OAAS,EACjD,IAAKN,EAAI,EAAGA,EAAIY,EAAI0tD,WAAWhuD,OAAQN,IACnC47C,EAAYh7C,EAAI0tD,WAAWtuD,GAC3B6D,KAAKkvc,kBAAkBn3Z,EAAWhK,IAI9C8jY,EAASx2a,UAAUi0c,gBAAkB,SAAUvyc,EAAKgxC,GAChD,IAAIxtC,EAAOwtC,EAAQ2sB,UAAU39D,EAAIuG,IACjCyqC,EAAQntB,OAAOrgB,EAAMxD,EAAIupD,YAAc/lD,EAAK+lD,cAEhDurX,EAASx2a,UAAUizc,wBAA0B,SAAUvxc,EAAKgxC,GACxD,IAAIgK,EAAYh7C,EAAI0tD,WAAW,GAC/BzqD,KAAKkvc,kBAAkBn3Z,EAAWhK,IAEtC8jY,EAASx2a,UAAU6zc,kBAAoB,SAAUnyc,EAAKgxC,EAASoxX,GAC3D,IAAIpnX,EAAYhK,EAAQ2sB,UAAU39D,EAAIuG,IAElCvG,EAAIu9D,eAAiBviB,EAAUuiB,eAC/BviB,EAAUuiB,aAAev9D,EAAIu9D,aAC7BvsB,EAAQohY,wBAAwBp3X,MAAiBuiB,aAAcv9D,EAAIu9D,gBAEnEv9D,EAAI4uZ,eAAiB5zW,EAAU4zW,eAC/B5zW,EAAU4zW,aAAe5uZ,EAAI4uZ,aAC7B59W,EAAQohY,wBAAwBp3X,MAAiB4zW,aAAc5uZ,EAAI4uZ,gBAEnE5uZ,EAAIwyC,WAAawI,EAAUxI,WACN,KAAjBxyC,EAAIwyC,SAEJgf,GADOxgB,EAAQ2sB,UAAU3iB,EAAUxI,UACnB69W,SAAUrwZ,EAAIuG,IAGvByqC,EAAQ2sB,UAAU39D,EAAIwyC,UACxB69W,SAAS5oZ,KAAKzH,EAAIuG,IAE3By0C,EAAUxI,SAAWxyC,EAAIwyC,SACzBxB,EAAQohY,wBAAwBp3X,MAAiBxI,SAAUxyC,EAAIwyC,YAE/DxyC,EAAI2uZ,WAAa3zW,EAAU2zW,WACN,KAAjB3uZ,EAAI2uZ,SAEJn9V,GADOxgB,EAAQ2sB,UAAU3iB,EAAU2zW,UACnB2B,QAAStwZ,EAAIuG,IAGtByqC,EAAQ2sB,UAAU39D,EAAI2uZ,UACxB2B,QAAQ7oZ,KAAKzH,EAAIuG,IAE1By0C,EAAU2zW,SAAW3uZ,EAAI2uZ,SACzB39W,EAAQohY,wBAAwBp3X,MAAiB2zW,SAAU3uZ,EAAI2uZ,YAE/DyT,GAASA,EAAMzB,aACfyB,EAAMzB,WAAW3ga,EAAIuG,IAAMilD,GAAYxQ,IAE3C,IAAIs6W,EAAKt1Z,EAAIiyC,YAAYjiC,EAAIgrC,EAAU/I,YAAYjiC,EAC/CulZ,EAAKv1Z,EAAIiyC,YAAYhiC,EAAI+qC,EAAU/I,YAAYhiC,EACxC,IAAPqlZ,GAAmB,IAAPC,GACZvkX,EAAQ6oY,cAAc7+X,EAAWs6W,EAAIC,GAEzC,IAAIxgG,EAAK/0T,EAAIk6C,YAAYlqC,EAAIgrC,EAAUd,YAAYlqC,EAC/C8kT,EAAK90T,EAAIk6C,YAAYjqC,EAAI+qC,EAAUd,YAAYjqC,EACxC,IAAP8kT,GAAmB,IAAPD,GACZ9jR,EAAQ8oY,cAAc9+X,EAAW+5Q,EAAID,GAEzC9jR,EAAQkxX,iBACa,QAAjBlxX,EAAQxP,MACRwP,EAAQsiY,uBAGhBwB,EAASx2a,UAAUozc,wBAA0B,SAAUtvC,EAAOpxX,GAC1D,IAAIhxC,EAAMoia,EAAME,WAChB,GAAIF,GAASA,EAAMkmB,WAAY,CAa3B,GAAmB,YAXflmB,EAAMqvC,OACmB,WAArBrvC,EAAMkmB,WACO,SAGA,SAIJlmB,EAAMkmB,YAGnBt3Y,EAAQxpC,OAAOxH,GACfgxC,EAAQgpY,yBAEP,CAED,GADAhpY,EAAQgpY,qBACJh6a,EAAI49D,SAAU,CACd,IAAIl6D,EAAastC,EAAQ2sB,UAAU39D,EAAI49D,UACnCl6D,EACAstC,EAAQgkY,SAAStxa,EAAY1D,GAG7BgxC,EAAQ3pC,IAAIrH,QAIhBgxC,EAAQ3pC,IAAIrH,GAEZA,EAAIowZ,WAAap/W,EAAQ2sB,UAAU39D,EAAIowZ,YACvCp/W,EAAQmlY,WAAWn2a,EAAKA,EAAIowZ,WAGf,QAAjBp/W,EAAQxP,MACRwP,EAAQsiY,wBAIpBwB,EAASx2a,UAAUqzc,6BAA+B,SAAUvvC,EAAOpxX,GAC/D,IAAI16B,EAAQ8rZ,EAAME,WACdtia,EAAMoia,EAAMC,WACZ7+Z,EAAOwtC,EAAQ2sB,UAAU39D,EAAIuG,IACjC,GAAI67Z,GAASA,EAAMkmB,WAAY,CAQR,YANflmB,EAAMqvC,OAC6B,WAArBrvC,EAAMkmB,WAA2B,SAAW,SAG7ClmB,EAAMkmB,aAGnBt3Y,EAAQ+6Y,aAAavob,GAAO8S,IAC5B06B,EAAQgpY,uBAGRhpY,EAAQgpY,qBACRhpY,EAAQy5Y,UAAUjnb,GAAO8S,KAER,QAAjB06B,EAAQxP,MACRwP,EAAQsiY,wBAIpBwB,EAASx2a,UAAUszc,4BAA8B,SAAUxvC,EAAOpxX,GAC9D,IAAIwC,EAAO4uX,EAAME,WACbtia,EAAMoia,EAAMC,WACZ7+Z,EAAOwtC,EAAQ2sB,UAAU39D,EAAIuG,IACjC,GAAI67Z,GAASA,EAAMkmB,WAAY,CAQR,YANflmB,EAAMqvC,OAC6B,WAArBrvC,EAAMkmB,WAA2B,SAAW,SAG7ClmB,EAAMkmB,aAGnBt3Y,EAAQg7Y,YAAYxob,GAAOgwC,IAC3BxC,EAAQgpY,uBAGRhpY,EAAQgpY,qBACRhpY,EAAQ86Y,SAAStob,GAAOgwC,KAEP,QAAjBxC,EAAQxP,MACRwP,EAAQsiY,wBAKpBwB,EAASx2a,UAAUmqb,KAAO,SAAUz3Y,GAChC,IAAIoxX,EAAQn/Z,KAAKuvc,aAAaxha,GAC1Byha,EAAwB,EACxBrwC,IACuB,aAAnBA,EAAMh0N,UACa,eAAfg0N,EAAMz4Z,MACN8oc,IACAxvc,KAAKqtc,WAAY,GAGjBrtc,KAAKyvc,UAAUtwC,EAAOpxX,GAEtB/tC,KAAKqtc,YACLrtc,KAAK0vc,gBAAgBvwC,EAAOpxX,EAASyha,GACrCxvc,KAAKqtc,WAAY,IAIrBt/Z,EAAQmiY,YAAYsV,KAAKrmB,KAIrC0S,EAASx2a,UAAUq0c,gBAAkB,SAAUvwC,EAAOpxX,EAASyha,GAC3D,KAAiC,IAA1BA,GACHxvc,KAAKyvc,UAAUtwC,EAAOpxX,GAEH,cADnBoxX,EAAQn/Z,KAAKuvc,aAAaxha,IAChBrnC,KACN8oc,IAEoB,eAAfrwC,EAAMz4Z,MACX8oc,IAGRA,EAAwB,GAE5B39B,EAASx2a,UAAUo0c,UAAY,SAAUZ,EAAc9ga,GACnD,IAAIqxX,EAKJ,GAJ0B,oBAAtByvC,EAAanoc,MAAoD,sBAAtBmoc,EAAanoc,OACxD04Z,EAAcyvC,EAAuB,YAEzC9ga,EAAQ0T,gBAAkBC,GAAcmwX,SACd,eAAtBg9B,EAAanoc,MAA+C,aAAtBmoc,EAAanoc,MAC/CqnC,EAAQmiY,YAAYu9B,UAAUhxc,OAAS,EAAG,CAC1C,IAAIyxc,EAAYnga,EAAQmiY,YAAYu9B,UAAUhlb,OAAO,EAAG,GACxDslB,EAAQmiY,YAAYs9B,UAAU/kb,OAAO,EAAG,EAAGylb,EAAU,IAI7D,OADAnga,EAAQ8a,uBAAsB,GACtBgmZ,EAAanoc,MACjB,IAAK,kBACL,IAAK,QACL,IAAK,aACD1G,KAAKmuc,sBAAsB/uC,EAAYrxX,GACvC,MACJ,IAAK,cACL,IAAK,SACD/tC,KAAKouc,kBAAkBhvC,EAAYrxX,EAAS8ga,GAC5C,MACJ,IAAK,kBACD7uc,KAAKquc,sBAAsBjvC,EAAYrxX,EAAS8ga,GAChD,MACJ,IAAK,oBACD7uc,KAAKsuc,wBAAwBlvC,EAAYrxX,GACzC,MACJ,IAAK,kBACD/tC,KAAKuuc,sBAAsBM,EAAc9ga,GAAS,GAClD,MACJ,IAAK,oBACD/tC,KAAKyuc,wBAAwBI,EAAc9ga,GAC3C,MACJ,IAAK,yBACD/tC,KAAK0uc,6BAA6BG,EAAc9ga,GAChD,MACJ,IAAK,wBACD/tC,KAAK2uc,4BAA4BE,EAAc9ga,GAC/C,MACJ,IAAK,QACD/tC,KAAKs0F,MAAMu6W,EAAc9ga,GACzB,MACJ,IAAK,UACD/tC,KAAK4xa,QAAQi9B,EAAc9ga,GAC3B,MACJ,IAAK,iBACD/tC,KAAK4uc,qBAAqBxvC,EAAYrxX,GAG9CA,EAAQ8a,uBAAsB,GAC9B9a,EAAQ0T,iBAAmBC,GAAcmwX,SACzC9jY,EAAQq3Y,qBAAqBypB,IAEjCh9B,EAASx2a,UAAUuyc,aAAe,SAAU7/Z,GACxC,IACImoY,EADA43B,EAAY,KAEZ6B,EAAQ5ha,EAAQmiY,YAepB,OAdIy/B,EAAMvW,UACN0U,EAAY6B,EAAMrC,cAClBp3B,EAAgBy5B,EAAMrC,aAAazgV,WAE/B8iV,EAAMrC,aAAep3B,EAChBy5B,EAAMtW,UACPsW,EAAMtW,SAAU,KAIpBsW,EAAMtW,SAAU,EAChBsW,EAAMvW,SAAU,IAGjB0U,GAEXj8B,EAASx2a,UAAUk0c,aAAe,SAAUxha,GACxC,IACI6ha,EADAH,EAAY,KAEZE,EAAQ5ha,EAAQmiY,YAoBpB,OAnBIy/B,EAAMtW,WAKFuW,EAJCD,EAAMrC,aAAazgV,UAAa8iV,EAAMvW,QAIxBuW,EAAMrC,aAAarka,KAHnB0ma,EAAMrC,gBAMrBqC,EAAMrC,aAAesC,EAChBD,EAAMvW,UACPuW,EAAMvW,SAAU,GAEfwW,EAAa3ma,OACd0ma,EAAMtW,SAAU,EAChBsW,EAAMvW,SAAU,IAGxBqW,EAAYE,EAAMrC,cAEfmC,GAOX59B,EAASx2a,UAAUiX,QAAU,aAQ7Bu/Z,EAASx2a,UAAU0kC,cAAgB,WAI/B,MAAO,YAEJ8xY,KC7oBPg+B,GAAiC,WACjC,SAASA,IACL7vc,KAAKo9Z,eAAgB,EA0FzB,OArFAyyC,EAAgBx0c,UAAUwjK,OAAS,SAAUjwH,EAAWsY,EAAS3mD,EAAMwtC,GACnE,IAAIhuC,EAAQC,KACR8vc,KAEArsb,EAAI,EAKR,GAJAqsb,EAFQ,GAEe1tc,YAAY,WAE/B,OADAqhB,IACO1jB,EAAMgwc,gBAAgB7oZ,EAAS4oZ,EAAyB,IAANrsb,EAASsqB,IACnE,IACCxtC,EAAKs0W,WAAY,CACjB,IAAI9jC,EAAY,GAEhB/wU,KAAKo9Z,cAAgBrvX,EAAe,oBACpCA,EAAQ8a,uBAAsB,GAE9B,IAAImnZ,KAEJhwc,KAAKiwc,cAAc1vc,EAAMwwU,EAAWhjS,GACpCiia,EAFQ,GAGkB5tc,YAAY,WAClC2uU,GAAa,EAAIhxU,EAAMkwc,cAAc1vc,EAAMwwU,EAAWhjS,GAAWzrC,cAAc0tc,EAAqB,IACpGj/H,GAAa,IACd,MAOX8+H,EAAgBx0c,UAAU00c,gBAAkB,SAAUjhW,EAAUohW,EAAarxb,EAAMkvB,GAC/E,IAAKlvB,EACD,IAAK,IAAIwH,EAAI,EAAGA,EAAIyoF,EAAS5nD,QAAQzqD,OAAQ4pB,IAAK,CAC9C,IAAI9lB,EAAOwtC,EAAQ2sB,UAAUo0C,EAAS5nD,QAAQ7gC,GAAG/iB,IACjD/C,EAAKsL,SAAWijG,EAAS5nD,QAAQ7gC,GAAG8pb,YAAc,EAClD5vc,EAAK0L,SAAW6iG,EAAS5nD,QAAQ7gC,GAAG+pb,YAAc,EAGtDvxb,IACAvc,cAAc4tc,EAAY,IAC1Bnia,EAAQ8a,sBAAsB7oD,KAAKo9Z,eACnCrvX,EAAQioH,aAAasrP,GAAa1vU,uBAAmBz2E,GACrD6E,KAAKo9Z,eAAgB,EACrBrvX,EAAQorY,0BAA0BC,aAAc,EAChDrrY,EAAQ0b,OAAOwvX,UAAY,GAC3BlrY,EAAQ8a,sBAAsB7oD,KAAKo9Z,iBAM3CyyC,EAAgBx0c,UAAU40c,cAAgB,SAAU1zc,EAAQS,EAAO+wC,GAC/D,IAAK,IAAI5xC,EAAI,EAAGA,EAAII,EAAO6wZ,SAAS3wZ,OAAQN,IAAK,CAC7C,IAAI47C,EAAYhK,EAAQ2sB,UAAUn+D,EAAO6wZ,SAASjxZ,IAC9CgL,EAAS4mC,EAAQ2sB,UAAU3iB,EAAU2zW,UACzC3zW,EAAUrzC,MAAM+I,QAAUzQ,EAC1B+wC,EAAQqhY,oBAAoB7ya,GAC5B,IAAK,IAAIknB,EAAI,EAAGA,EAAIs0B,EAAUhmC,QAAQqI,SAAS3d,OAAQgnB,IACnDs0B,EAAUhmC,QAAQqI,SAASqJ,GAAG/e,MAAM+I,QAAUzQ,EAC9CmK,EAAOzC,MAAM+I,QAAUzQ,EACnBmK,EAAO4K,mBAAmB6+C,IAC1B7iB,EAAQikZ,mBAAmB7qb,EAAO4K,aAAS5W,EAAW6B,GAG9DgD,KAAKiwc,cAAc9oc,EAAQnK,EAAO+wC,KAQ1C8ha,EAAgBx0c,UAAUiX,QAAU,aAQpCu9b,EAAgBx0c,UAAU0kC,cAAgB,WAItC,MAAO,iBAEJ8va,KC1FPQ,GAAkC,WAKlC,SAASA,IAKLrwc,KAAKo5a,aAAc,EA2lDvB,OAnlDAi3B,EAAiBh1c,UAAUiX,QAAU,aAQrC+9b,EAAiBh1c,UAAU0kC,cAAgB,WAIvC,MAAO,uBAEXswa,EAAiBh1c,UAAU0sb,aAAe,SAAUr9X,EAAOgQ,EAAW41Y,EAAYC,EAAUpuG,GACxF,IAAI14S,GACA/iD,KAAM4pc,EAAW5pc,KACjBg0D,UAAWA,EAAW81Y,QAAS,EAAGC,QAAS,EAC3CC,mBAAqBC,WAAY,KAAMhwX,UAAYiwX,SAAU,EAAGC,cAChEj4a,YAAa03a,EAAW13a,YACxBk4a,kBAAmBR,EAAWQ,kBAAmBC,gBAAiBT,EAAWS,gBAC7EhkZ,kBAAmBujZ,EAAWvjZ,kBAAmBD,oBAAqBwjZ,EAAWxjZ,oBACjFmsX,UAAWq3B,EAAWr3B,UAAWzvX,cAAevF,GAAYqsZ,EAAW9mZ,eAAgBvsB,OAAQqza,EAAWrza,OAC1GlH,OAAQu6a,EAAWv6a,OAAQmxB,WAAa6kJ,KAAMukQ,EAAWvkQ,MAG7D,OADA/rM,KAAKgiQ,SAASv4M,EAAQiB,EAAO6lZ,EAAUpuG,GAChC14S,GAEX4mZ,EAAiBh1c,UAAU2mQ,SAAW,SAAUv4M,EAAQiB,EAAO6lZ,EAAUpuG,GACrE,IAAI5hW,EACApE,EAGAw6b,KAIJ,IAHIltY,EAAOiR,UAAUjR,EAAOsiJ,OACxBtiJ,EAAOinZ,gBAAgBlsc,KAAKilD,EAAOiR,UAAUjR,EAAOsiJ,OAEnD5vM,EAAI,EAAGA,EAAIuuD,EAAMjuD,OAAQN,KAC1BoE,EAAOmqD,EAAMvuD,IACHylb,qBACOn4X,EAAOonZ,WAAWtwc,EAAK+C,IAAMtD,KAAKgxc,gBAAgBvnZ,EAAQlpD,IAC5D0wc,KAAKC,YAAa,EACxBznZ,EAAOiR,UAAUjR,EAAOsiJ,OACpBxrM,EAAK8sZ,SAAY9sZ,EAAK8sZ,QAAQ5wZ,SAC/Bk6b,EAAUnyb,KAAKjE,GACXA,EAAK/D,MAAQgtB,OAAOjpB,EAAK/D,KAAK2lW,MAAe14S,EAAOsiJ,MACpDtiJ,EAAOinZ,gBAAgBlsc,KAAKjE,KAUhD,IAJsC,IAAlCkpD,EAAOinZ,gBAAgBj0c,SACvBgtD,EAAOinZ,gBAAkB/Z,GAGxBx6b,EAAI,EAAGA,EAAIstD,EAAOinZ,gBAAgBj0c,OAAQN,IAC3CoE,EAAOkpD,EAAOinZ,gBAAgBv0c,GAC9B6D,KAAK+lb,YAAYt8X,EAAQlpD,EAAM,GAEnC,GAAIkpD,EAAOinZ,gBAAgBj0c,OAAS,EAAG,CACnCgtD,EAAOglU,SAAWhlU,EAAOinZ,gBAAgB,GACzC,IAAI3jc,EAAI,EACJC,EAAI,EACJsrD,OAAO,EACPG,OAAO,EACPD,OAAO,EACPD,OAAO,EAEPxiC,OAAS,EACb,IAAK55B,EAAI,EAAGA,EAAIstD,EAAOinZ,gBAAgBj0c,OAAQN,IAAK,CAChD45B,EAAS/1B,KAAKmxc,WAAW1nZ,EAAQ18C,EAAGC,EAAGy8C,EAAOinZ,gBAAgBv0c,GAAI,EAAGstD,EAAOinZ,gBAAgBv0c,EAAI,IAChG,IAAIi1c,EAAW3nZ,EAAOonZ,WAAWpnZ,EAAOinZ,gBAAgBv0c,GAAGmH,IAC3DyyB,EAAO/oB,EAAIX,KAAK8T,IAAI4V,EAAO/oB,EAAGokc,EAASpkc,GACvC+oB,EAAOhpB,EAAIV,KAAK8T,IAAI4V,EAAOhpB,EAAGqkc,EAASrkc,IACK,IAAxC08C,EAAO7wB,YAAYr6B,QAAQ,QAC3ByO,EAAI+oB,EAAOtpB,MAAQg9C,EAAOqnZ,kBAG1B/jc,EAAIgpB,EAAOtpB,MAAQg9C,EAAOqnZ,kBAEpB,IAAN30c,GACAm8D,EAAOviC,EAAOhpB,EACdwrD,EAAOxiC,EAAO/oB,EACdwrD,EAAOziC,EAAOtpB,MACdgsD,EAAO1iC,EAAOppB,SAGd2rD,EAAOjsD,KAAK8T,IAAIm4C,EAAMviC,EAAOhpB,GAC7BwrD,EAAOlsD,KAAK8T,IAAIo4C,EAAMxiC,EAAO/oB,GAC7BwrD,EAAOnsD,KAAKC,IAAIksD,EAAMziC,EAAOtpB,OAC7BgsD,EAAOpsD,KAAKC,IAAImsD,EAAM1iC,EAAOppB,SAIrC,IADA3M,KAAKqxc,aAAa5nZ,GAAU18C,EAAGurD,EAAMtrD,EAAGurD,EAAM9rD,MAAO+rD,EAAM7rD,OAAQ8rD,GAAQ83Y,GACtEp0c,EAAI,EAAGA,EAAIstD,EAAOinZ,gBAAgBj0c,OAAQN,IAC3C6D,KAAKsxc,YAAY7nZ,EAAQA,EAAOinZ,gBAAgBv0c,GAAI,GAExD,IAAKA,EAAI,EAAGA,EAAIstD,EAAOinZ,gBAAgBj0c,OAAQN,IAC3C6D,KAAKuxc,iBAAiB9nZ,EAAQA,EAAOinZ,gBAAgBv0c,GAAI,KAIrEk0c,EAAiBh1c,UAAU8rD,UAAY,SAAU5mD,GAC7C,IAAIwM,EAAIxM,EAAKsL,QAAUtL,EAAKk5C,WAAWzjC,MAAQzV,EAAK8uD,MAAMtiD,EACtDC,EAAIzM,EAAK0L,QAAU1L,EAAKk5C,WAAW1jC,OAASxV,EAAK8uD,MAAMriD,EAC3D,OAAO,IAAIuoB,GAAKxoB,EAAGC,EAAGzM,EAAKk5C,WAAWzjC,MAAOzV,EAAKk5C,WAAW1jC,SAEjEs6b,EAAiBh1c,UAAU81c,WAAa,SAAU1nZ,EAAQ18C,EAAGC,EAAGmsB,EAAO4oI,EAAOv/H,EAAMgva,GAChF,IAAIC,EAEAC,EACA30c,EACAopM,EAHAt/K,KAWJ,GAPA4qb,EAAazxc,KAAK2xc,cAAcloZ,EAAQtwB,EAAOpsB,EAAGC,EAAG+0J,GACrDl7I,EAAO4iC,EAAOonZ,WAAW13a,EAAM71B,IAC/BmmD,EAEOmnZ,SAAWvkc,KAAKC,IAAIm9C,EAAOmnZ,SAAU7uS,GAC5C2vS,EAAM3vS,GACNokC,EAAWnmM,KAAKmmM,SAAS18I,EAAQtwB,KACftS,EAAKoqb,KAAKW,WAAWn1c,OAKlC,CACD,IAAIo1c,OAAa,EAEbC,OAAc,EACdh4a,OAAI,EACJi4a,OAAa,EACb1za,OAAQ,EACR1xB,OAAS,EACbA,EAAS8kc,EAAWzkc,EAAIykc,EAAW17b,OAAS0zC,EAAOsnZ,gBAC/Clqb,EAAKoqb,KAAKW,WAAWn1c,SAGrBi1c,GADA30c,EAAMiD,KAAKgyc,0BAA0BvoZ,EAAQtwB,EAAOxsB,EAAQ8kc,EAAW17b,OAAQgsJ,EAAOt4G,EAAOsnZ,kBACnFhvS,MACVp1J,EAAS5P,EAAI4P,QAEZka,EAAKoqb,KAAKW,WAAWn1c,QAAoC,eAA1BoqB,EAAKoqb,KAAKr4a,cAC1CjsB,EAAS8kc,EAAWzkc,EAAIykc,EAAW17b,OAAS0zC,EAAOsnZ,gBAAkB,GAErElqb,EAAKoqb,KAAK72b,SAAS3d,SAKfo1c,EAJ0B,eAA1Bhrb,EAAKoqb,KAAKr4a,aAAoD,aAAnB/R,EAAKoqb,KAAKvqc,MAAqD,IAA9BmgB,EAAKoqb,KAAK72b,SAAS3d,OAGvE,aAAnBoqB,EAAKoqb,KAAKvqc,KACF1G,KAAKiyc,qCAAqCxoZ,EAAQtwB,EAAOqJ,EAAMiva,EAAW1kc,EAAGJ,EAAQ+kc,GAGrF1xc,KAAKkyc,mBAAmBzoZ,EAAQtwB,EAAOs4a,EAAW1kc,EAAGJ,EAAQ+kc,EAAKF,GANlExxc,KAAKmyc,qBAAqB1oZ,EAAQtwB,EAAOqJ,EAAMiva,EAAW1kc,EAAGJ,EAAQ+kc,IASpF7qb,EAAK7Z,GAAK6Z,EAAK7Z,EAAIykc,EAAWzkc,IAChC6Z,EAAK7Z,EAAIykc,EAAWzkc,GAElBD,GAAKA,EAAI8Z,EAAKmqC,MAChBjkD,EAAI8Z,EAAKmqC,KAETnqC,EAAKoqb,KAAKW,WAAWn1c,SAErB4hC,OAAcljC,IAAN4R,EAAkBA,EAAI0kc,EAAW1kc,EACzCglc,EAAa/xc,KAAKoyc,6BAA6B3oZ,EAAQtwB,EAAOs4a,EAAYpza,EAAO1xB,EAAQo1J,GACpFokC,IAEDp5L,IADA+kc,EAAcD,EAAaE,GACVhlc,EAAI+kc,EAAYrlc,OAAS,EAAIglc,EAAWz7b,MAAQ,EACjE67b,EAAaC,GAEjBh4a,EAAIi4a,EAAaA,EAAWM,eAAYl3c,GAE5C0rB,EAAK9Z,EAAIA,EACJ8Z,EAAKqpE,YACNrpE,EAAKyrb,UAAYT,EAAWplc,MAAQolc,EAAW9kc,GAKnD,IAAIwlc,GACA9oZ,OAAQA,EAAQtwB,MAAOA,EAAOq5a,aAHdzlc,EAAGA,EAAGC,EAAGykc,EAAWzkc,EAAGP,MAAOM,EAAI0kc,EAAWz7b,MAAOrJ,OAAQ8kc,EAAWzkc,EAAIykc,EAAW17b,QAG9C87b,WAAYA,EACpEY,IAAKhB,EAAY1vS,MAAOA,GAO5B,OALA/hK,KAAK0yc,iBAAiBH,EAAez4a,OAAY3+B,IAATqnC,EAAoBgva,GACxD3qb,EAAK9J,YAAyC,iBAApB8J,EAAK9J,aAC/B8J,EAAK9J,WAAWhQ,GAAK8Z,EAAK8rb,oBAE9Bx5a,EAAM04a,WAAaA,EACZA,EAhEP,OADA14a,EAAM04a,WAAa7xc,KAAK4yc,eAAenpZ,EAAQtwB,EAAOqJ,EAAMiva,EAAY1vS,EAAOyvS,GACxEr4a,EAAM04a,YAmErBxB,EAAiBh1c,UAAUu3c,eAAiB,SAAUnpZ,EAAQtwB,EAAOqJ,EAAMiva,EAAY1vS,EAAOyvS,GAC1F,IAAIz7a,EACAlP,EAAO4iC,EAAOonZ,WAAW13a,EAAM71B,IACnCujB,EAAK9Z,EAAI0kc,EAAW1kc,EACd8Z,EAAK7Z,GAAK6Z,EAAK7Z,EAAIykc,EAAWzkc,IAChC6Z,EAAK7Z,EAAIykc,EAAWzkc,EACpB6Z,EAAK+pb,SAAWvkc,KAAKC,IAAIy1J,EAAOl7I,EAAK+pb,UAAY,IAErD76a,GAAWhpB,EAAG0kc,EAAW1kc,EAAGC,EAAGykc,EAAWzkc,EAAGP,MAAOglc,EAAW1kc,EAAI0kc,EAAWz7b,MAAOrJ,OAAQ8kc,EAAWzkc,EAAIykc,EAAW17b,QACvH8Q,EAAK+pb,SAAWvkc,KAAKC,IAAIua,EAAK+pb,UAAY,EAAG7uS,GAC7C,IAAIwwS,GACA9oZ,OAAQA,EAAQtwB,MAAOA,EAAOq5a,YAAaz8a,EAAQ87a,WAAY97a,EAC/D08a,IAAKhB,EAAY1vS,MAAOA,GAG5B,OADA/hK,KAAK0yc,iBAAiBH,OAAep3c,OAAoBA,IAATqnC,EAAoBgva,IAC3Dzkc,EAAG8Z,EAAK9Z,EAAGC,EAAG6Z,EAAK7Z,EAAGP,MAAOoa,EAAK9Z,EAAI0kc,EAAWz7b,MAAOrJ,OAAQka,EAAK7Z,EAAIykc,EAAW17b,SAEjGs6b,EAAiBh1c,UAAU21c,gBAAkB,SAAUvnZ,EAAQzrC,GAC3D,IAAI6I,KAYJ,OAXAA,EAAK8rb,mBAAqB,EACN,wBAAhBlpZ,EAAO/iD,KACPmgB,EAAKoqb,MAASr4a,YAAa,WAAYlyB,KAAM,YAAaiF,OAAQ,GAAIknc,eAAe,GAGrFhsb,EAAKoqb,MAASr4a,YAAa,aAAclyB,KAAM,SAAUmsc,eAAe,GAE5Ehsb,EAAKoqb,KAAK72b,YACVyM,EAAKoqb,KAAKW,cACV/qb,EAAKoqb,KAAKlvS,MAAQ,EAClBl7I,EAAKqpE,WAAY,EACVrpE,GAEXwpb,EAAiBh1c,UAAUq3c,iBAAmB,SAAUH,EAAeO,EAAS5iX,EAAWshX,GACvF,IAAI/nZ,EAAS8oZ,EAAc9oZ,OACvBtwB,EAAQo5a,EAAcp5a,MACtBq5a,EAAcD,EAAcC,YAC5BX,EAAaU,EAAcV,WAC3B9vS,EAAQwwS,EAAcxwS,MACtB0wS,EAAMF,EAAcE,IACpB5rb,EAAO4iC,EAAOonZ,WAAW13a,EAAM71B,IAC/ByZ,EAAa0sC,EAAOiR,UAAU7zC,EAAK9J,WAAa8J,EAAK9J,WAAW1c,MAAQwmB,EAAKoqb,KAAK72b,SAAS,IAC3F24b,EAAiBh2b,EAAa0sC,EAAOonZ,WAAW9zb,EAAWzZ,IAAM,KACjE6iM,EAAWnmM,KAAKmmM,SAAS18I,EAAQtwB,GACjCihB,EAAYp6C,KAAKgzc,uBAAuBvpZ,EAAQ+oZ,EAAazwS,EAAOl7I,EAAKosb,aACzEC,EAAgBlzc,KAAKgzc,uBAAuBvpZ,EAAQooZ,EAAY9vS,EAAOl7I,EAAKosb,aAC5EnB,KAEA13Z,EAAU39C,QAAUoqB,EAAKqpE,WACzBrpE,EAAKuzB,UAAYA,EACjBp6C,KAAKmzc,yBAAyB1pZ,EAAQtwB,EAAOq5a,GAC7C3rb,EAAKwrb,UAAYxrb,EAAKm4D,UACN7jF,IAAZ23c,IACAjsb,EAAKwrb,UAAYhmc,KAAK8T,IAAI2yb,EAASjsb,EAAKwrb,YAExCt1b,QAA2C5hB,IAA7B43c,EAAeV,YACzBU,EAAeV,WAAaxrb,EAAKwrb,YACjCxrb,EAAKusb,YAAa,GAEtBvsb,EAAKwrb,UAAYhmc,KAAK8T,IAAI0G,EAAKwrb,UAAWU,EAAeV,YAEzDniX,IACArpE,EAAK9Z,GAAK8Z,EAAKwrb,UACfxrb,EAAK8rb,oBAAsB9rb,EAAKwrb,UAC5BlsQ,IACAnmM,KAAKqzc,kBAAkB5pZ,EAAQypZ,EAAersb,EAAKwrb,WACnDR,EAAW9kc,EAAIV,KAAK8T,IAAI0xb,EAAW9kc,EAAG8Z,EAAK9Z,GAC3C8kc,EAAWplc,MAAQJ,KAAKC,IAAIulc,EAAWplc,MAAOoa,EAAK9Z,EAAI0lc,EAAIz8b,OAC3D67b,EAAWllc,OAASN,KAAKC,IAAIulc,EAAWllc,OAAQka,EAAK7Z,EAAIylc,EAAI18b,QAC7D87b,EAAW9kc,GAAK8Z,EAAKwrb,UACrBR,EAAWplc,OAASoa,EAAKwrb,WAEzBt1b,GAAcg2b,EAAeV,UAAYxrb,EAAKwrb,UAC9Cxrb,EAAKwrb,UAAYU,EAAeV,UAAYxrb,EAAKwrb,UAE5Ct1b,QAAiC5hB,IAAnB0rB,EAAKwrb,YACxBxrb,EAAKwrb,UAAY,MAKrBlsQ,IACA0rQ,EAAW9kc,EAAIV,KAAK8T,IAAI0xb,EAAW9kc,EAAGylc,EAAYzlc,GAClD8kc,EAAWplc,MAAQJ,KAAKC,IAAIulc,EAAWplc,MAAO+lc,EAAYzlc,EAAI0lc,EAAIz8b,OAClE67b,EAAWllc,OAASN,KAAKC,IAAIulc,EAAWllc,OAAQka,EAAK7Z,EAAIylc,EAAI18b,SAE5D8Q,EAAKqpE,YACNrpE,EAAKwrb,UAAY,EACjBxrb,EAAK8rb,mBAAqB,IAG7BnB,IACDgB,GAAgBzlc,EAAG8Z,EAAK9Z,EAAGC,EAAGylc,EAAIzlc,EAAGP,MAAOoa,EAAK9Z,EAAI0lc,EAAIz8b,MAAOrJ,OAAQ8lc,EAAIzlc,EAAIylc,EAAI18b,QACpF+7b,EAAYttc,MAAO8uc,QAASd,IAC5Bxyc,KAAKuzc,iBAAiB9pZ,EAAQtwB,EAAO24a,EAAa/vS,KAG1DsuS,EAAiBh1c,UAAUk4c,iBAAmB,SAAU9pZ,EAAQtwB,EAAO24a,EAAa/vS,EAAO3nH,GACvF,IAAIo5Z,EACAvhc,EAEA9V,EAEAs+D,EACAg5Y,EACA9mc,EALA+mc,GAAa,EAEb7sb,KAWJ,GAPIsS,IAEAihB,GADAvzB,EAAO4iC,EAAOonZ,WAAW13a,EAAM71B,KACd82C,UACjBs5Z,GAAc7sb,EAAKoqb,KAAK72b,SAAS3d,SAAWoqB,EAAKoqb,KAAKW,WAAWn1c,QAErEg+D,EAAaq3Y,EAAY,GAAGwB,QAC5BG,EAAY3B,EAAYA,EAAYr1c,OAAS,GAAG62c,QAC5Cl5Z,GAAaA,EAAU39C,OAAQ,CAkB/B,IAhBAkQ,GADA6mc,EAAO/pZ,EAAOk3B,OAAOvmC,EAAU,IAAIk5Z,SACrB3mc,OACV6mc,EAAKxmc,EAAIytD,EAAWztD,IACpBwmc,EAAK7mc,OAAS8tD,EAAWztD,EACzB8kc,EAAYrpb,OAAO,EAAG,GAAK6qb,QAASE,KAEpC7mc,EAAS8mc,EAAU9mc,OACnBmlc,EAAYttc,MAAO8uc,SAAWvmc,EAAGymc,EAAKzmc,EAAGN,MAAO+mc,EAAK/mc,MAAOO,EAAGytD,EAAW9tD,OAAQA,OAAQA,MAG1F6mc,EAAO/pZ,EAAOk3B,OAAOvmC,EAAUA,EAAU39C,OAAS,IAAI62c,QAClDI,GAAcF,EAAK7mc,OAAS8mc,EAAU9mc,SACtC6mc,EAAKxmc,EAAIymc,EAAU9mc,OACnBmlc,EAAYttc,MAAO8uc,QAASE,MAGpCvhc,EAAQmoC,EAAU,GACbj+C,EAAI21c,EAAYr1c,OAAS,EAAGN,GAAK,EAAGA,IACrCstD,EAAOk3B,OAAOl4D,OAAOxW,EAAO,EAAG6/b,EAAY31c,IAE/C8V,GAAS6/b,EAAYr1c,OACrBgtD,EAAOk3B,OAAOl4D,OAAOxW,EAAOmoC,EAAU39C,aAItC,IADAwV,EAAQjS,KAAK2zc,UAAUlqZ,EAAQqoZ,EAAYA,EAAYr1c,OAAS,GAAG62c,QAASvxS,GACvE5lK,EAAI21c,EAAYr1c,OAAS,EAAGN,GAAK,EAAGA,IACrCstD,EAAOk3B,OAAOl4D,OAAOxW,EAAO,EAAG6/b,EAAY31c,KAIvDk0c,EAAiBh1c,UAAUg4c,kBAAoB,SAAU5pZ,EAAQrP,EAAW4kC,GACxE,IAAI7iF,EAEJ,GAAa,IAAT6iF,EACA,IAAK7iF,EAAI,EAAGA,EAAIi+C,EAAU39C,OAAQN,IAC1BstD,EAAOk3B,OAAOvmC,EAAUj+C,IAAIm3c,UAC5B7pZ,EAAOk3B,OAAOvmC,EAAUj+C,IAAIm3c,QAAQvmc,GAAKiyE,EACzCv1B,EAAOk3B,OAAOvmC,EAAUj+C,IAAIm3c,QAAQ7mc,OAASuyE,IAK7DqxX,EAAiBh1c,UAAU22c,0BAA4B,SAAUvoZ,EAAQtwB,EAAOxsB,EAAQoJ,EAAQ27b,EAAKkC,GACjG,IAEIC,EACA13c,EACA23c,EACAxnc,EALAua,EAAO4iC,EAAOonZ,WAAW13a,EAAM71B,IAC/Bywc,KAOJ,IAFAznc,EAAMK,EAEDxQ,EAAI,EAAGA,EAAI0qB,EAAKoqb,KAAKW,WAAWn1c,OAAQN,KACzC43c,EAAOtqZ,EAAOonZ,WAAWhqb,EAAKoqb,KAAKW,WAAWz1c,OAE1C43c,EAAK9C,KAAK72b,SAAW25b,EAAK9C,KAAKW,cAC/BmC,EAAK/mc,EAAIL,EAETknc,GADAC,EAAcrqZ,EAAOiR,UAAU7zC,EAAKoqb,KAAKW,WAAWz1c,KAC3Bs9C,WAAW1jC,QACQ,IAAxC0zC,EAAO7wB,YAAYr6B,QAAQ,UAC3Bs1c,EAAaC,EAAYr6Z,WAAWzjC,OAExC1J,EAAMK,EAASknc,EAAaD,EAAS,EACrCnqZ,EAAOmnZ,SAAWc,EAAM,EACpBv1c,EAAI,GAAM,GAAKA,IAAM0qB,EAAKoqb,KAAKW,WAAWn1c,OAAS,IACnDkQ,EAASL,EACTolc,MAIZ,OAAS3vS,MAAOt4G,EAAOmnZ,SAAUjkc,OAAQA,EAASknc,EAAaD,IAEnEvD,EAAiBh1c,UAAU+2c,6BAA+B,SAAU3oZ,EAAQtwB,EAAOs5a,EAAKp0a,EAAO1xB,EAAQo1J,GACnG,IACIiyS,EAEAj+a,EACA+9a,EACA33c,EAIAqQ,EACAwyE,EACA5kC,EACA03Z,EAZAiC,KAMAltb,EAAO4iC,EAAOonZ,WAAW13a,EAAM71B,IAE/Bouc,EAAM3vS,EAKV,IAAK5lK,EAAI,EAAGA,EAAI0qB,EAAKoqb,KAAKW,WAAWn1c,OAAQN,KACzC43c,EAAOtqZ,EAAOonZ,WAAWhqb,EAAKoqb,KAAKW,WAAWz1c,OAM1C63c,GADAF,EAAcrqZ,EAAOiR,UAAU7zC,EAAKoqb,KAAKW,WAAWz1c,KAC5Bs9C,WAAWzjC,OACS,IAAxCyzC,EAAO7wB,YAAYr6B,QAAQ,UAC3By1c,EAAYF,EAAYr6Z,WAAW1jC,QAGnCvJ,EADArQ,EAAI,GAAM,EACHkiC,EAAQo0a,EAAIz8b,MAAQ,EAAI,GAAKg+b,EAG7B31a,EAAQo0a,EAAIz8b,MAAQ,EAAI,GAGnC+f,EAAS/1B,KAAKmxc,WAAW1nZ,EAAQj9C,EAAMunc,EAAK/mc,EAAGy8C,EAAOiR,UAAU7zC,EAAKoqb,KAAKW,WAAWz1c,IAAKu1c,EAAM,GAC3F1xc,KAAKmmM,SAAS18I,EAAQtwB,KACb,IAANh9B,EACA21c,EAAc/7a,EAGd/1B,KAAKi0c,WAAWnC,EAAa/7a,IAGjC55B,EAAI,GAAM,GAAK43c,EAAK5G,aAEhBnuX,OADS7jF,IAAT6jF,EACO+0X,EAAK1B,UAGLhmc,KAAK8T,IAAI6+D,EAAM+0X,EAAK1B,YAG/Bl2c,EAAI,GAAM,GAAKA,IAAM0qB,EAAKoqb,KAAKW,WAAWn1c,OAAS,IACnD29C,EAAYp6C,KAAKgzc,uBAAuBvpZ,EAAQ1zB,EAAQ27a,EAAM,GAE9D1xc,KAAKuzc,iBAAiB9pZ,EAAQ,OAAS6pZ,QAASv9a,IAAW27a,EAAM,EAAGt3Z,GACpEs3Z,MAOZ,OAHII,IACAA,EAAYO,UAAYrzX,GAErB8yX,GAEXzB,EAAiBh1c,UAAUs2c,cAAgB,SAAUloZ,EAAQtwB,EAAOpsB,EAAGC,EAAG+0J,GACtE,IAAI/rJ,EACJA,EAAQmjB,EAAMsgB,WAAWzjC,MACzB,IAAID,EAEJ,GADAA,EAASojB,EAAMsgB,WAAW1jC,QACkB,IAAxC0zC,EAAO7wB,YAAYr6B,QAAQ,QAAgB,CAC3C,IAAKwjK,EAAO,CACR,IAAI1oI,OAAO,EACXA,EAAOtsB,EACPA,EAAIC,EACJA,EAAIqsB,EAERtjB,EAASojB,EAAMsgB,WAAWzjC,MAC1BA,EAAQmjB,EAAMsgB,WAAW1jC,OAE7B,OAAShJ,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOA,EAAOD,OAAQA,IAE/Cs6b,EAAiBh1c,UAAU8qM,SAAW,SAAU18I,EAAQtwB,GAEpD,IAAI+6a,EAASzqZ,EAAOonZ,WAAW13a,EAAM71B,IACrC,OAAO4wc,EAAOjD,KAAK72b,UAAY85b,EAAOjD,KAAK72b,SAAS3d,QAExD4zc,EAAiBh1c,UAAU82c,qBAAuB,SAAU1oZ,EAAQtwB,EAAOqJ,EAAMz1B,EAAGC,EAAG+0J,GAEnF,IAAI0vS,EACJA,EAAazxc,KAAK2xc,cAAcloZ,EAAQtwB,EAAOpsB,EAAGC,EAAG+0J,GACrD,IAGI2vS,EAHA7qb,KAEAyoC,GADJzoC,EAAO4iC,EAAOonZ,WAAW13a,EAAM71B,KACf2tc,KAAKvqc,KAErBgrc,EAAM3vS,EACN,IAAIt1J,EAAQ,EACZA,EAAQM,EACR,IAAIJ,EACJA,EAASK,EACT,IAAIgJ,EACAD,EACA1V,EACAyiZ,EACAqxD,EACAC,EAEAr+a,EACAs+a,EACAzD,EAEAyB,EACAiC,EACAn4c,EACAo4c,EAEAxB,EAEJ,GADmBtpZ,EAAOk3B,OAAOt/E,MAAM,EAAGooD,EAAOk3B,OAAOlkF,QACpDuD,KAAKmmM,SAAS18I,EAAQtwB,GAAQ,CAC9B,IAAI+oE,OAAI,EAER,IADAA,GAA4C,IAAxCz4C,EAAO7wB,YAAYr6B,QAAQ,QAC1BpC,EAAI,EAAGA,EAAI0qB,EAAKoqb,KAAK72b,SAAS3d,OAAQN,IAAK,CAqC5C,GApCAkE,EAAQopD,EAAOiR,UAAU7zC,EAAKoqb,KAAK72b,SAASje,IAC5C6Z,EAAQ3V,EAAMo5C,WAAWzjC,MACzBD,EAAS1V,EAAMo5C,WAAW1jC,OAC1Bo+b,EAAajyW,EAAInsF,EAASC,EAC1Bo+b,EAAclyW,EAAIlsF,EAAQD,EACb0zC,EAAOk3B,OAAO+wX,EAAM,GAAKjoZ,EAAOk3B,OAAO+wX,EAAM,GAAG4B,QAAU,KAEvExwD,EAAc9iZ,KAAKmxc,WAAW1nZ,EAAQh9C,EAAOE,EAAQtM,EAAOqxc,EAAM,EAAGjoZ,EAAOiR,UAAU7zC,EAAKoqb,KAAK72b,SAASje,EAAI,KAC7Go4c,EAAY9qZ,EAAOonZ,WAAWxwc,EAAMiD,IACpCujB,EAAK+pb,SAAWvkc,KAAKC,IAAIua,EAAK+pb,UAAY,EAAG2D,EAAU3D,UAAY,GACnEyD,GAActnc,EAAGwnc,EAAUxnc,EAAGC,EAAGunc,EAAUvnc,EAAGP,MAAO8nc,EAAUxnc,EAAIonc,EAAYxnc,OAAQ4nc,EAAUvnc,EAAIonc,GAC3F,IAANj4c,IAEA45B,GACIhpB,EAAGV,KAAK8T,IAAIo0b,EAAUxnc,EAAG+1Y,EAAY/1Y,GAAIC,EAAGX,KAAK8T,IAAIo0b,EAAUvnc,EAAG81Y,EAAY91Y,GAC9EP,MAAOq2Y,EAAYr2Y,MAAOE,OAAQm2Y,EAAYn2Y,QAElDomc,EAAiBwB,GAEhBD,GAIDA,EAAavnc,EAAIsnc,EAAUtnc,EAC3Bunc,EAAatnc,EAAIqnc,EAAUrnc,EACvBqnc,EAAU5nc,MAAQ6nc,EAAa7nc,QAC/B6nc,EAAa7nc,MAAQ4nc,EAAU5nc,OAEnC6nc,EAAa3nc,OAAS0nc,EAAU1nc,QARhC2nc,EAAeD,EAaT,IAANl4c,IACA0qB,EAAK9J,YAAehQ,EAAGwnc,EAAUxnc,EAAGslc,UAAWkC,EAAUlC,UAAWhyc,MAAOA,EAAMiD,KAEjFtD,KAAKmmM,SAAS18I,EAAQppD,GACtB,IAAKwmB,EAAK9J,YAAc8J,EAAK9J,WAAWhQ,GAAKwnc,EAAUx3b,WAAWhQ,EAAG,CAC7Dwnc,EAAUx3b,YAAc8J,EAAK9J,WAAWs1b,UAAYkC,EAAUlC,YAC9Dxrb,EAAK9J,WAAWs1b,UAAYA,EAC5BkC,EAAUlC,UAAYA,EACtBA,EAAYxrb,EAAK9J,WAAWs1b,UAC5B5oZ,EAAOonZ,WAAWhqb,EAAK9J,WAAW1c,OAAOgyc,UAAYA,GAEzD,IAAImC,OAA6Br5c,IAAdk3c,EAA0BA,EAAYkC,EAAUlC,UACnExrb,EAAK9J,YAAehQ,EAAGwnc,EAAUx3b,WAAWhQ,EAAGslc,UAAWmC,EAAcn0c,MAAOA,EAAMiD,SAEhFixc,EAAUx3b,YAAcw3b,EAAUnB,YAAcvsb,EAAK9J,WAAWs1b,UAAYkC,EAAUlC,YAC3Fxrb,EAAK9J,WAAWs1b,UAAY5oZ,EAAOonZ,WAAWhqb,EAAK9J,WAAW1c,OAAOgyc,UAAYkC,EAAUlC,WAGnGzB,EAAWA,EAAWvkc,KAAKC,IAAIioc,EAAU3D,SAAUA,GAAY2D,EAAU3D,SACzE5wc,KAAKi0c,WAAWl+a,EAAQ+sX,GAEpBr2Y,EADM,IAANtQ,IAAY6D,KAAKmmM,SAAS18I,EAAQppD,IAAUk0c,EAAU5B,mBAAqB,EACnE7vD,EAAYr2Y,MAAQ8nc,EAAU5B,mBAAqBlpZ,EAAOqnZ,kBAG1DhuD,EAAYr2Y,MAAQg9C,EAAOqnZ,kBAGtC32Z,WAxELs6Z,KAyEI1B,EAAeV,eAzEnBoC,GA2EA5tb,EAAKmqC,KAAO+hZ,EAAehmc,EAAIunc,EAAa7nc,OAAS,EAAIglc,EAAWz7b,MAAQ,EAE/D,SAATs5C,EACAzoC,EAAKmqC,IAAMqjZ,EAAU5nc,MAAQglc,EAAWz7b,MAE1B,UAATs5C,IACLzoC,EAAKmqC,IAAMjkD,GAGnB,OAAOgpB,GAEXs6a,EAAiBh1c,UAAU42c,qCAAuC,SAAUxoZ,EAAQtwB,EAAOqJ,EAAMz1B,EAAGC,EAAG+0J,GAEnG,IAAI1hK,EACAk0c,EACAzxD,EACAqxD,EAIAp+a,EAEA/f,EACAD,EAKA0N,EACAtnB,EAGAu4c,EACAC,EAEAlD,EAAazxc,KAAK2xc,cAAcloZ,EAAQtwB,EAAOpsB,EAAGC,EAAG+0J,GACrDl7I,EAAO4iC,EAAOonZ,WAAW13a,EAAM71B,IAE/Bouc,GADO7qb,EAAKoqb,KAAKvqc,KACXq7J,GACNt1J,EAAQM,EACRJ,EAASK,EAET4nc,GADmBnrZ,EAAOk3B,OAAOt/E,MAAM,EAAGooD,EAAOk3B,OAAOlkF,QACvC,GACrB,GAAIuD,KAAKmmM,SAAS18I,EAAQtwB,GAAQ,CAC9B,IAAI+oE,GAA4C,IAAxCz4C,EAAO7wB,YAAYr6B,QAAQ,QAC/BkvD,OAAQ,EACR6wK,EAAOt+N,KAAK60c,oBAAoBprZ,EAAQtwB,GACxC27a,EAAuC,IAA9Bjub,EAAKoqb,KAAK72b,SAAS3d,QAAmC,IAAnB6hO,EAAK,GAAG7hO,OACpDs4c,KACAC,KACCF,EAIDE,EAAY12O,EAHZt+N,KAAKi1c,UAAU32O,EAAMy2O,EAAUC,GAKnC,IAAIE,GAAaH,SAAUA,EAAUz2O,KAAMA,EAAM02O,UAAWA,EAAWvD,WAAYA,GAC/E0D,EAAYn1c,KAAKo1c,eAAe3rZ,EAAQyrZ,EAAU/7a,EAAOpsB,EAAGJ,EAAQ+kc,GACxE37a,EAASm/a,EAASn/a,OAClB,IAAImpU,OAAS,EACTnsU,GAAUoib,GAAa,SAAoBh6c,IAAdg6c,EAA2B1rZ,EAAOqnZ,kBAAoB,EAAK,QAC1E31c,IAAdg6c,IACAtub,EAAKmqC,IAAMj+B,EAAS0+a,EAAWz7b,MAAQ,EACvCkpV,EAASi2G,EAAY1rZ,EAAOqnZ,mBAEhCnkc,EAASK,EACT,IAAIqoc,OAAc,EAElB,IADAA,KACKl5c,EAAI,EAAGA,EAAI64c,EAAUv4c,OAAQN,IAU9B,IARIsQ,EADA6xN,EAAKniO,GAAGM,OAAS,GAAM,GAAKN,IAAM64c,EAAUv4c,OAAS,GAAKq4c,EAClD/nc,EAGAmyV,GAAUnyV,EAEZ,IAAN5Q,IACAwQ,EAAS0oc,EAAYl5c,EAAI,GAAGwQ,OAAS88C,EAAOsnZ,iBAE3Cttb,EAAI,EAAGA,EAAIuxb,EAAU74c,GAAGM,OAAQgnB,IAEjCzN,GADA3V,EAAQopD,EAAOiR,UAAUs6Y,EAAU74c,GAAGsnB,KACxBg2B,WAAWzjC,MACzBD,EAAS1V,EAAMo5C,WAAW1jC,OAC1Bo+b,EAAajyW,EAAInsF,EAASC,GAC1Bu+b,EAEY9qZ,EAAOonZ,WAAWxwc,EAAMiD,KAC1B2vc,YAAcvB,EAAM,EAAIv1c,EACxB,IAANsnB,GAAWsxb,EAAS54c,IAAM44c,EAAS54c,GAAGM,SACtC83c,EAAUrkX,WAAY,GAEtB4kX,GAAgB,IAAN34c,IACA,IAANsnB,GAAWixb,EAAaP,EAAa1qZ,EAAOqnZ,mBAAqB6D,IACjElnZ,GAAQ,EACRhhD,EAAQioc,EAAaP,EAAa,GAElC1mZ,GAAe,IAANhqC,IACThX,EAAQkoc,EAAcR,EAAa,IAG3CrxD,EAAc9iZ,KAAKmxc,WAAW1nZ,EAAQh9C,EAAOE,EAAQtM,EAAOqxc,EAAM,EAAGjoZ,EAAOiR,UAAUs6Y,EAAU74c,GAAGsnB,EAAI,KACnGqxb,GAAUrxb,GAAK,GAAW,IAANtnB,GACV,IAANsnB,IACAixb,EAAa5xD,EAAY/1Y,EAAI08C,EAAOqnZ,kBAAoB,EACxD6D,EAAc7xD,EAAY/1Y,EAAIonc,EAAa1qZ,EAAOqnZ,kBAAoB,GAGpE,IAANrtb,EACA4xb,EAAYl5c,IAAO4Q,EAAG+1Y,EAAY/1Y,EAAGC,EAAG81Y,EAAY91Y,EAAGP,MAAOq2Y,EAAYr2Y,MAAOE,OAAQm2Y,EAAYn2Y,QAGrG3M,KAAKi0c,WAAWoB,EAAYl5c,GAAI2mZ,GAE/B/sX,IACDA,GACIhpB,EAAGsoc,EAAYl5c,GAAG4Q,EAAGC,EAAGqoc,EAAYl5c,GAAG6Q,EAAGP,MAAO4oc,EAAYl5c,GAAGsQ,MAChEE,OAAQ0oc,EAAYl5c,GAAGwQ,SAG/B3M,KAAKi0c,WAAWl+a,EAAQs/a,EAAYl5c,IACpCsQ,EAAQq2Y,EAAYr2Y,MAAQg9C,EAAOqnZ,oBAC9Bjqb,EAAK9J,aAAgB5gB,IAAM64c,EAAUv4c,OAAS,GAAK6hO,EAAKniO,GAAGM,OAAS,GAAM,GAAMq4c,IACxE,IAANrxb,QAAmCtoB,IAAxBo5c,EAAUlC,WAA2BuC,EAAiBL,EAAUlC,aAC9EuC,EAAiBvoc,KAAK8T,IAAIy0b,EAAgBL,EAAUlC,WAAa,GACjExrb,EAAK9J,YAAehQ,EAAGwnc,EAAUxnc,EAAG1M,MAAOA,EAAMiD,GAAI+uc,UAAWkC,EAAUlC,YAE9E6C,EAASR,WAAaA,EACtBQ,EAASP,YAAcA,EACvBO,EAASznZ,MAAQA,EACjBynZ,EAASnzS,MAAQ2vS,EACjBwD,EAASG,YAAcA,EACvBr1c,KAAKs1c,kBAAkB7rZ,EAAQttD,EAAGg9B,EAAO+7a,EAAUh2G,GAI/D,OAAOnpU,GAEXs6a,EAAiBh1c,UAAU+5c,eAAiB,SAAU3rZ,EAAQyrZ,EAAU/7a,EAAOpsB,EAAGJ,EAAQ+kc,GAWtF,IAAK,IARDjlc,EAEAmoc,EACAO,EACAryD,EACA/sX,EAPAg/a,EAAWG,EAASH,SACpBlub,EAAO4iC,EAAOonZ,WAAW13a,EAAM71B,IAE/Biyc,KAKArzW,GAA4C,IAAxCz4C,EAAO7wB,YAAYr6B,QAAQ,QAE1BpC,EAAI,EAAGA,EAAI44c,EAASt4c,QAAUs4c,EAAS54c,GAAGM,OAAQN,IAAK,CAC5DsQ,EAAQM,EACJwoc,EAAWp5c,EAAI,KACfwQ,EAAS4oc,EAAWp5c,EAAI,GAAGwQ,OAAS88C,EAAOsnZ,iBAE/C,IAAK,IAAIttb,EAAI,EAAGA,EAAIsxb,EAAS54c,GAAGM,OAAQgnB,IAAK,CACzC,IAAIpjB,EAAQopD,EAAOiR,UAAUq6Y,EAAS54c,GAAGsnB,IAIrC8wb,GAHaryW,EAAI7hG,EAAMo5C,WAAW1jC,OAAS1V,EAAMo5C,WAAWzjC,MAC9CksF,EAAI7hG,EAAMo5C,WAAWzjC,MAAQ3V,EAAMo5C,WAAW1jC,OAEhD0zC,EAAOonZ,WAAWxwc,EAAMiD,KACxCixc,EAAUtB,YAAcvB,EAAM,EAAIv1c,EAClC2mZ,EAAc9iZ,KAAKmxc,WAAW1nZ,EAAQh9C,EAAOE,EAAQtM,EAAOqxc,EAAM,EAAGjoZ,EAAOiR,UAAUq6Y,EAAS54c,GAAGsnB,EAAI,KAC5F,IAANA,EACA8xb,EAAWp5c,IAAO4Q,EAAG+1Y,EAAY/1Y,EAAGC,EAAG81Y,EAAY91Y,EAAGP,MAAOq2Y,EAAYr2Y,MAAOE,OAAQm2Y,EAAYn2Y,QAGpG3M,KAAKi0c,WAAWsB,EAAWp5c,GAAI2mZ,GAEzB,IAAN3mZ,GAAiB,IAANsnB,GACXmxb,EAAiBL,EAAUlC,UAC3Bxrb,EAAK9J,YAAehQ,EAAGwnc,EAAUxnc,EAAG1M,MAAOA,EAAMiD,GAAI+uc,UAAWkC,EAAUlC,YAE/D,IAAN5ub,QAAmCtoB,IAAxBo5c,EAAUlC,WAA2BuC,EAAiBL,EAAUlC,YAChFuC,EAAiBvoc,KAAK8T,IAAIy0b,EAAgBL,EAAUlC,WAAa,GACjExrb,EAAK9J,YAAehQ,EAAGwnc,EAAUxnc,EAAG1M,MAAOA,EAAMiD,GAAI+uc,UAAWkC,EAAUlC,YAE9E5lc,EAAQq2Y,EAAYr2Y,MAAQg9C,EAAOqnZ,kBAGnCqE,EADM,IAANh5c,EACYo5c,EAAWp5c,GAAGsQ,MAGdJ,KAAKC,IAAI6oc,EAAWI,EAAWp5c,GAAGsQ,OAItD,IAAStQ,EAAI,EAAGA,EAAI44c,EAASt4c,QAAUs4c,EAAS54c,GAAGM,OAAQN,IAAK,CAC5D,GAAIg5c,IAAcI,EAAWp5c,GAAGsQ,MAEvB,CAAA,IADDuyE,EAAOm2X,EAAYI,EAAWp5c,GAAGsQ,MACrC,IAASgX,EAAI,EAAGA,EAAIsxb,EAAS54c,GAAGM,OAAQgnB,IAAK,CAC3BgmC,EAAOiR,UAAUq6Y,EAAS54c,GAAGsnB,IACzBgmC,EAAOonZ,WAAWkE,EAAS54c,GAAGsnB,IACpC1W,GAAKiyE,GAKf,IAAN7iF,EACA45B,GAAWhpB,EAAGwoc,EAAW,GAAGxoc,EAAGC,EAAGuoc,EAAW,GAAGvoc,EAAGP,MAAO8oc,EAAW,GAAG9oc,MAAOE,OAAQ4oc,EAAW,GAAG5oc,QAGrG3M,KAAKi0c,WAAWl+a,EAAQw/a,EAAWp5c,IAI3C,OADA+4c,EAASn/a,OAASA,EACXo/a,GAEX9E,EAAiBh1c,UAAUi6c,kBAAoB,SAAU7rZ,EAAQttD,EAAGg9B,EAAO+7a,EAAUh2G,GACjF,IAAI5yV,EACAkpc,EACAx2X,EACAn4D,EAAO4iC,EAAOonZ,WAAW13a,EAAM71B,IAC/Bg7N,EAAO42O,EAAS52O,KAChB02O,EAAYE,EAASF,UACrBN,EAAaQ,EAASR,WACtBC,EAAcO,EAASP,YACvBlnZ,EAAQynZ,EAASznZ,MACjB4nZ,EAAcH,EAASG,YACvB5D,EAAayD,EAASzD,WACtBC,EAAMwD,EAASnzS,MACf+yS,EAAuC,IAA9Bjub,EAAKoqb,KAAK72b,SAAS3d,QAAmC,IAAnB6hO,EAAK,GAAG7hO,OAIxD,GAHIq4c,GAAgB,IAAN34c,IACVmQ,EAAO+oc,EAAY,GAAG5oc,MAAQ4oc,EAAY,GAAGtoc,GAAOsoc,EAAY,GAAG5oc,MAAQ4oc,EAAY,GAAGtoc,EAAK,EAAI,GAEnG5Q,IAAMmiO,EAAK7hO,OAAS,IAChB6hO,EAAKniO,GAAGM,OAAS,GAAM,GAAKq4c,GAAgB,IAAN34c,GAAS,CAC/Cq5c,EAAWR,EAAU74c,GAAGkQ,KAAKkT,MAAMy1b,EAAU74c,GAAGM,OAAS,IACzD,IAAIg5c,OAAc,EAClBA,EAAchsZ,EAAOiR,UAAU86Y,GAC/B,IAAIE,OAAiB,EACjBC,EAAYlsZ,EAAOonZ,WAAW2E,GAAUzoc,EACxC6oc,EAAYnsZ,EAAOonZ,WAAW2E,GAAUxoc,EAC5C0oc,EAAiB11c,KAAK2xc,cAAcloZ,EAAQgsZ,EAAaE,EAAWC,EAAWlE,EAAM,GACrF1yX,OAAO7jF,GACFsyD,GAASqnZ,GACE,IAARxoc,IACAnQ,EAAI,GAER6iF,GAAQq2X,EAAY/oc,GAAKS,EAAIsoc,EAAY/oc,GAAKG,OAAS,GAAK4oc,EAAYl5c,GAAG4Q,EAAIsoc,EAAYl5c,GAAGsQ,OAAS,EAC7F,IAANtQ,IACA0qB,EAAKmqC,KAAOguB,IAGV81X,QAAqB35c,IAAX+jW,IAChBlgR,EAAOkgR,EAASz1S,EAAOqnZ,kBAAoB,GAAK6E,EAAYD,EAAe1/b,MAAQ,SAE1E7a,IAAT6jF,GACAh/E,KAAK61c,uBAAuBpsZ,EAAQurZ,EAAU74c,GAAI6iF,EAAMyyX,GAExDqD,IACAjub,EAAKmqC,KAAO2jZ,EAAcD,GAAc,GAAW,IAANv4c,EAAU6iF,EAAO,GAAKyyX,EAAWz7b,MAAQ,QAEzE7a,IAAb0rB,EAAKmqC,KAAqBvH,EAAOonZ,WAAW2E,KAC5C3ub,EAAKmqC,IAAM2kZ,GAEfloZ,GAAQ,EACRtxD,MAIZk0c,EAAiBh1c,UAAUw6c,uBAAyB,SAAUpsZ,EAAQurZ,EAAWh2X,EAAMyyX,GACnF,IAAK,IAAIhub,EAAI,EAAGA,EAAIuxb,EAAUv4c,OAAQgnB,IAAK,CACvC,IAAI8wb,EAAY9qZ,EAAOonZ,WAAWmE,EAAUvxb,IAChCgmC,EAAOiR,UAAUs6Y,EAAUvxb,IAGvC,GAFA8wb,EAAUxnc,GAAKiyE,EACfu1X,EAAUlC,WAAarzX,EACnBv7D,IAAMuxb,EAAUv4c,OAAS,EAAG,CAE5B,IAAIq5c,GACA/oc,EAAGwnc,EAAUxnc,EAAGC,EAAGunc,EAAUvnc,EAAGP,MAAO8nc,EAAUxnc,EAC7C0kc,EAAWz7b,MAAOrJ,OAAQ4nc,EAAUvnc,EAAIykc,EAAW17b,QAEvDqkC,EAAYp6C,KAAKgzc,uBAAuBvpZ,EAAQqsZ,EAAWvB,EAAUtB,aACzEjzc,KAAKuzc,iBAAiB9pZ,EAAQ,OAAS6pZ,QAASwC,IAAcvB,EAAUtB,YAAa74Z,MAIjGi2Z,EAAiBh1c,UAAU45c,UAAY,SAAU32O,EAAMy2O,EAAUC,GAC7D,IAAK,IAAI74c,EAAI,EAAGA,EAAImiO,EAAK7hO,OAAQN,IAAK,CAClC44c,EAAS54c,MACT64c,EAAU74c,MACV,IAAIgiC,OAAO,EAEX,GADAA,EAAOmgM,EAAKniO,GAAGM,OACX6hO,EAAKniO,GAAGM,OAAS,GAAM,EAAG,CAC1B0hC,EAAO9xB,KAAK6lB,KAAKosM,EAAKniO,GAAGM,OAAS,GAClC,IAAK,IAAI4pB,EAAI,EAAGA,EAAI8X,EAAM9X,IACtB0ub,EAAS54c,GAAGqI,KAAK85N,EAAKniO,GAAGkqB,IAGjC,IAAK,IAAI5C,EAAIsxb,EAAS54c,GAAGM,OAAQgnB,EAAI66M,EAAKniO,GAAGM,OAAQgnB,IACjDuxb,EAAU74c,GAAGqI,KAAK85N,EAAKniO,GAAGsnB,MAItC4sb,EAAiBh1c,UAAU62c,mBAAqB,SAAUzoZ,EAAQtwB,EAAOpsB,EAAGC,EAAG+0J,EAAOg0S,GAYjE/1c,KAAK2xc,cAAcloZ,EAAQtwB,EAAOpsB,EAAGC,EAAG+0J,GAVzD,IAAI1hK,EACAk0c,EACAzxD,EACAqxD,EACAC,EACAjH,EACAp3a,EACAs+a,EACA2B,EACAC,EAQAvE,EANA7qb,EAAO4iC,EAAOonZ,WAAW13a,EAAM71B,IAC/ByZ,EAAa0sC,EAAOiR,UAAU7zC,EAAKoqb,KAAK72b,SAAS,IACjD8nF,GAA4C,IAAxCz4C,EAAO7wB,YAAYr6B,QAAQ,QAC/Bu/B,EAA4B,SAAnBjX,EAAKoqb,KAAKvqc,MAAmB,EAAI,EAC1C+F,EAAQM,EACRJ,EAASK,EAEb0kc,EAAM3vS,EACN,IAAI5lK,EACAi+C,EACA1zC,EAGA2rc,EAFA1xX,KACAu1X,KAEJ,IACK/5c,EAAI,EAAGA,EAAI0qB,EAAKoqb,KAAK72b,SAAS3d,OAAQN,IAAK,CA+D5C,GA9DuB,cAAnB0qB,EAAKoqb,KAAKvqc,OAEVA,EAAQvK,EAAI,GAAM,GAAK0qB,EAAKoqb,KAAK72b,SAAS3d,OAAS,EAAK,OAAS,QACjEqhC,EAAU3hC,EAAI,GAAM,GAAK0qB,EAAKoqb,KAAK72b,SAAS3d,OAAS,GAAM,EAAI,GAEnEgQ,EAAQM,EAAI/M,KAAKm2c,WAAW1sZ,EAAQtwB,EAAOtS,EAAMngB,GACjDrG,EAAQopD,EAAOiR,UAAU7zC,EAAKoqb,KAAK72b,SAASje,IAC5Cg4c,EAAajyW,EAAI7hG,EAAMo5C,WAAW1jC,OAAS1V,EAAMo5C,WAAWzjC,MAC5Do+b,EAAclyW,EAAI7hG,EAAMo5C,WAAWzjC,MAAQ3V,EAAMo5C,WAAW1jC,OAE5D+sY,EAAc9iZ,KAAKmxc,WAAW1nZ,EAAQh9C,EAAQqxB,EAASq2a,EAAYxnc,EAAQtM,EAAO0hK,EAAQ,OAAG5mK,GAAW,GACxGo5c,EAAY9qZ,EAAOonZ,WAAWxwc,EAAMiD,IACpC+wc,GAActnc,EAAGwnc,EAAUxnc,EAAGC,EAAGunc,EAAUvnc,EAAGP,MAAO8nc,EAAUxnc,EAAIonc,EAAYxnc,OAAQ4nc,EAAUvnc,EAAIonc,GAC3F,IAANj4c,GACA6D,KAAKi0c,WAAWnxD,EAAauxD,GAC7Bt+a,EAAS+sX,GAGT9iZ,KAAKi0c,WAAWl+a,EAAQ+sX,IAGxByxD,EAAUpH,YAAmC,cAAnBtmb,EAAKoqb,KAAKvqc,MAAwBvK,EAAI,GAAM,GAAK0qB,EAAKoqb,KAAK72b,SAAS3d,OAAS,IACvG41c,OAA0Bl3c,IAAdk3c,EAA0Bhmc,KAAK8T,IAAIo0b,EAAUlC,UAAWA,GAAakC,EAAUlC,WAG/Fxrb,EAAK+pb,SAAWvkc,KAAKC,IAAIua,EAAK+pb,UAAY,EAAG2D,EAAU3D,UAAY,GAC1C,cAAnB/pb,EAAKoqb,KAAKvqc,MAAwBmgB,EAAKoqb,KAAK72b,SAAS3d,OAAS,GAAKN,EAAI,GAAM,GAyBrE,IAANA,IACAwQ,EAASwgc,EAAWxgc,OAAS88C,EAAOsnZ,gBAAkB,GAE1DmF,EAAU1xc,MAAO8uc,QAASe,IACtBE,EAAUzC,cACVoE,EAAYA,EAAU17b,OAAO+5b,EAAUzC,gBA3BvCnlc,EAFmB,cAAnBka,EAAKoqb,KAAKvqc,MAAwBmgB,EAAKoqb,KAAK72b,SAAS3d,OAAS,EAErD4P,KAAKC,IAAIw2Y,EAAYn2Y,OAAQwgc,EAAWxgc,QAAU88C,EAAOsnZ,gBAAkB,EAI3EjuD,EAAYn2Y,OAAS88C,EAAOsnZ,gBAAkB,EAE3DhvS,EAAQl7I,EAAK+pb,SACbjwX,EAAOn8E,MAAO8uc,QAASe,IAClB4B,EAODj2c,KAAKi0c,WAAWgC,EAAY5B,GAN5B4B,GACIlpc,EAAGwnc,EAAUxnc,EAAGC,EAAGunc,EAAUvnc,EAAGP,MAAO8nc,EAAUxnc,EAAIonc,EACrDxnc,OAAQ4nc,EAAUvnc,EAAIonc,GAM1BG,EAAUzC,cACVnxX,EAASA,EAAOnmE,OAAO+5b,EAAUzC,eAY/B,IAAN31c,IACA0qB,EAAK9J,YAAehQ,EAAGwnc,EAAUxnc,EAAGslc,UAAWkC,EAAUlC,UAAWhyc,MAAOA,EAAMiD,KAEjFtD,KAAKmmM,SAAS18I,EAAQppD,GACtB,IAAKwmB,EAAK9J,YAAc8J,EAAK9J,WAAWhQ,GAAKwnc,EAAUx3b,WAAWhQ,EAAG,CACjE,GAAIwnc,EAAUx3b,YAAc8J,EAAK9J,WAAWs1b,UAAYkC,EAAUlC,UAAW,CACzE,IAAI+D,EAAcvvb,EAAK9J,WAAWs1b,UAClCkC,EAAUlC,UAAY+D,EACtB3sZ,EAAOonZ,WAAWhqb,EAAK9J,WAAW1c,OAAOgyc,UAAY+D,EACrDvvb,EAAK9J,WAAWs1b,UAAY+D,EAEhCvvb,EAAK9J,YACDhQ,EAAGwnc,EAAUx3b,WAAWhQ,EAAGslc,eAAyBl3c,IAAdk3c,EAA0BA,EAAYkC,EAAUlC,UACtFhyc,MAAOA,EAAMiD,SAGZixc,EAAUx3b,YAAcw3b,EAAUnB,YAAcvsb,EAAK9J,WAAWs1b,UAAYkC,EAAUlC,YAC3Fxrb,EAAK9J,WAAWs1b,UAAY5oZ,EAAOonZ,WAAWhqb,EAAK9J,WAAW1c,OAAOgyc,UAAYkC,EAAUlC,WAGnGlF,EAAakH,EAuBjB,OApBK0B,EAaDlvb,EAAKirb,YAAcnxX,GAZI,cAAnB95D,EAAKoqb,KAAKvqc,MAAwBmgB,EAAKoqb,KAAK72b,SAAS3d,OAAS,IAC9Du5c,GACIjpc,EAAGmpc,EAAU,GAAG5C,QAAQvmc,EAAGC,EAAGkpc,EAAU,GAAG5C,QAAQtmc,EACnDP,MAAOypc,EAAUA,EAAUz5c,OAAS,GAAG62c,QAAQ7mc,MAAOE,OAAQupc,EAAUA,EAAUz5c,OAAS,GAAG62c,QAAQ3mc,QAE1GytC,EAAYp6C,KAAKgzc,uBAAuBvpZ,EAAQusZ,EAAWtE,EAAM,GACjE1xc,KAAKuzc,iBAAiB9pZ,EAAQ,KAAMysZ,EAAWxE,EAAM,EAAGt3Z,IAE5DA,EAAYp6C,KAAKgzc,uBAAuBvpZ,EAAQwsZ,GAAclgb,EAAQ27a,EAAM,GAC5E1xc,KAAKuzc,iBAAiB9pZ,EAAQ,KAAMwsZ,EAAat1X,IAAY2yX,QAASv9a,IAAW27a,EAAM,EAAGt3Z,IAKzFD,MAAMk4Z,KACP5oZ,EAAOonZ,WAAW9zb,EAAWzZ,IAAI+uc,UAAYA,GAEjDxrb,EAAKi8X,YAAc/sX,EACnBlP,EAAKmqC,IAAMjkD,EACJgpB,GAEXs6a,EAAiBh1c,UAAUw5c,oBAAsB,SAAUprZ,EAAQtwB,GAC/D,IAAItS,EAEAs3C,EACJA,EAAS,EACT,IACI5sD,EADA+sN,KAEJ/sN,GALAsV,EAAO4iC,EAAOonZ,WAAW13a,EAAM71B,KAKb2tc,KAAK72b,SAAS3d,OAChC,IAAI2d,EAAWpa,KAAKtB,OAAOmoB,EAAKoqb,KAAK72b,UACrC,GAAIyM,EAAKoqb,KAAK3yO,KAAM,CAChB,IAAIr/M,OAAQ,EACZA,EAAQ4H,EAAKoqb,KAAK72b,SAAS3d,OAC3B,IAAI+iE,OAAU,EAGVrB,GAFJqB,EAAUnzD,KAAK6lB,KAAKjT,EAAQ4H,EAAKoqb,KAAK3yO,OACxB,GAAM,EACP9+J,EAGAA,EAAU,OAGY,IAA9B34C,EAAKoqb,KAAK72b,SAAS3d,QAA8C,IAA9BoqB,EAAKoqb,KAAK72b,SAAS3d,OAC3D0hE,EAAS,EAE0B,IAA9Bt3C,EAAKoqb,KAAK72b,SAAS3d,SACxB0hE,EAAS,GAEb,KAAO5sD,EAAa,GAChB+sN,EAAKA,EAAK7hO,QAAU2d,EAASqO,OAAO,EAAG01C,IACvC5sD,GAAc4sD,GACGA,IACbA,EAAS5sD,GAGjB,OAAO+sN,GAEX+xO,EAAiBh1c,UAAUqD,OAAS,SAAU26B,GAC1C,IAAIl9B,EACAk6c,KACJ,IAAKl6c,EAAI,EAAGA,EAAIk9B,EAAK58B,OAAQN,IACzBk6c,EAAMl6c,GAAKk9B,EAAKl9B,GAEpB,OAAOk6c,GAEXhG,EAAiBh1c,UAAU86c,WAAa,SAAU1sZ,EAAQtwB,EAAOtS,EAAMngB,GACnE,IAAIiF,EAAS,EACT0yB,GAAiD,IAAxCorB,EAAO7wB,YAAYr6B,QAAQ,QAAkB46B,EAAMsgB,WAAW1jC,OACvEojB,EAAMsgB,WAAWzjC,MACjBsgc,EAAW5vc,GAAcmgB,EAAKoqb,KAAKvqc,KAOvC,OANAiF,EAASkb,EAAKoqb,KAAKtlc,QAAU,GACN,cAAnBkb,EAAKoqb,KAAKvqc,MACNiF,GAAU89C,EAAOqnZ,oBACjBnlc,EAAS89C,EAAOqnZ,kBAAoB,GAGpCwF,GACJ,IAAK,OACD3qc,EAAS0yB,EAAQ,EAAI1yB,EACrB,MACJ,IAAK,QACDA,GAAkB0yB,EAAQ,EAGlC,OAAO1yB,GAEX0kc,EAAiBh1c,UAAU44c,WAAa,SAAUrzD,EAAOC,GAErDD,EAAM7zY,EAAIV,KAAK8T,IAAIygY,EAAM7zY,EAAG8zY,EAAM9zY,GAClC6zY,EAAMn0Y,MAAQJ,KAAKC,IAAIs0Y,EAAMn0Y,MAAOo0Y,EAAMp0Y,OAC1Cm0Y,EAAMj0Y,OAASN,KAAKC,IAAIs0Y,EAAMj0Y,OAAQk0Y,EAAMl0Y,SAEhD0jc,EAAiBh1c,UAAU83c,yBAA2B,SAAU1pZ,EAAQtwB,EAAOpD,GAC3E,IAAIlP,EACJA,EAAO4iC,EAAOonZ,WAAW13a,EAAM71B,IAC/B,IAAIizc,EACApJ,EAEA9mb,EACAgY,EAGJ,IAFAA,EAAQorB,EAAOqnZ,kBAEVzqb,EAAI,EAAGA,EAAIQ,EAAKuzB,UAAU39C,OAAQ4pB,IACnC8mb,EAAa1jZ,EAAOk3B,OAAO95D,EAAKuzB,UAAU/zB,IAAIitb,QAC9CiD,EAAMxgb,EAAOhpB,GAAKogc,EAAW1gc,MAAQ4xB,SACnBljC,IAAd0rB,EAAKm4D,MAAsBu3X,EAAM1vb,EAAKm4D,QACtCn4D,EAAKm4D,KAAOu3X,EACZ1vb,EAAKsmb,WAAa1jZ,EAAOk3B,OAAO95D,EAAKuzB,UAAU/zB,IAAIitb,UAI/DjD,EAAiBh1c,UAAU23c,uBAAyB,SAAUvpZ,EAAQ1zB,EAAQgsI,EAAOkxS,GAEjF,IAAIO,GACJA,GAASzmc,EAAGgpB,EAAOhpB,EAAGC,EAAG+oB,EAAO/oB,EAAGP,MAAOspB,EAAOtpB,MAAOE,OAAQopB,EAAOppB,SAClEK,GAAKy8C,EAAOsnZ,gBAAkB,EACnCyC,EAAK7mc,QAAU88C,EAAOsnZ,gBAAkB,EACxC,IAAIyF,EACJA,KACA,IAAIlD,EACAlra,EACJA,OAAoBjtC,IAAhB83c,EAA4BA,EAAclxS,EAC9CuxS,EAAU7pZ,EAAOk3B,OAAOv4C,GAAKqhB,EAAOk3B,OAAOv4C,GAAGkra,QAAU,KAExD,EAAG,CACC,GAAIA,IAAaE,EAAKxmc,EAAIsmc,EAAQtmc,GAAKwmc,EAAK7mc,OAAS2mc,EAAQtmc,GACrDwmc,EAAKxmc,EAAIsmc,EAAQ3mc,QAAU2mc,EAAQ3mc,OAAS6mc,EAAK7mc,QACrD6mc,EAAKxmc,GAAKsmc,EAAQtmc,GACdwmc,EAAK7mc,QAAU2mc,EAAQ3mc,QAAU6mc,EAAKxmc,EAAIsmc,EAAQtmc,GAAKwmc,EAAK7mc,OAAS2mc,EAAQ3mc,QAAS,CAE1F6pc,EAAmB/tb,OADP,EACqB,EAAG2f,QAEnC,GAAIkra,GAAWA,EAAQ3mc,OAAS6mc,EAAKxmc,EACtC,MAEJo7B,IACAkra,EAAU7pZ,EAAOk3B,OAAOv4C,GAAKqhB,EAAOk3B,OAAOv4C,GAAGkra,QAAU,WACnDlra,GAAK,GACdA,QAAqBjtC,IAAhB83c,EAA4BA,EAAclxS,GAAS,EACxDuxS,EAAU7pZ,EAAOk3B,OAAOv4C,GAAKqhB,EAAOk3B,OAAOv4C,GAAGkra,QAAU,KACxD,EAAG,CACC,GAAIA,IAAaE,EAAKxmc,EAAIsmc,EAAQtmc,GAAKwmc,EAAK7mc,OAAS2mc,EAAQtmc,GACxDwmc,EAAKxmc,EAAIsmc,EAAQ3mc,QAAU2mc,EAAQ3mc,OAAS6mc,EAAK7mc,QAClD6mc,EAAKxmc,GAAKsmc,EAAQtmc,GAAKwmc,EAAK7mc,QAAU2mc,EAAQ3mc,QAAU6mc,EAAKxmc,EAAIsmc,EAAQtmc,GAAKwmc,EAAK7mc,OAAS2mc,EAAQ3mc,QACpG6pc,EAAmBhyc,KAAK4jC,QAEvB,GAAIkra,GAAWA,EAAQtmc,EAAIwmc,EAAK7mc,OACjC,MAEJy7B,IACAkra,EAAU7pZ,EAAOk3B,OAAOv4C,GAAKqhB,EAAOk3B,OAAOv4C,GAAGkra,QAAU,WACnDlra,GAAKqhB,EAAOk3B,OAAOlkF,QAC5B,OAAO+5c,GAEXnG,EAAiBh1c,UAAUs4c,UAAY,SAAUlqZ,EAAQ1zB,EAAQgsI,GAC7D,IAAIyxS,EACJA,EAAOz9a,EACP,IAAIqS,EACJA,EAAI,EACJ,IAAIkra,EAEJ,IADAA,EAAU7pZ,EAAOk3B,OAAOv4C,GAAKqhB,EAAOk3B,OAAOv4C,GAAGkra,QAAU,KACjDlra,EAAIqhB,EAAOk3B,OAAOlkF,QAAQ,CAC7B,GAAI62c,GAAWE,EAAK7mc,OAAS2mc,EAAQtmc,EACjC,OAAOo7B,EAGPA,IAEJkra,EAAU7pZ,EAAOk3B,OAAOv4C,GAAKqhB,EAAOk3B,OAAOv4C,GAAGkra,QAAU,KAE5D,OAAOlra,GAEXioa,EAAiBh1c,UAAUqiI,cAAgB,SAAUj0E,EAAQlpD,GAEzD,OAAOkpD,EAAOiR,UAAUjR,EAAOiR,UAAUn6D,EAAK8sZ,QAAQ,IAAI99W,WAE9D8ga,EAAiBh1c,UAAU0qb,YAAc,SAAUt8X,EAAQlpD,EAAMgnH,GAC7D,IAAIkvV,EACJA,EAAahtZ,EAAOonZ,WAAWtwc,EAAK+C,IACpC,IAAImgB,EACJ,GAAIljB,EAAK6sZ,UAAY7sZ,EAAK6sZ,SAAS3wZ,QAAU8D,EAAKs0W,WAC9C,IAAKpxV,EAAI,EAAGA,EAAIljB,EAAK6sZ,SAAS3wZ,OAAQgnB,IAAK,CACvC,IAAI9K,OAAO,GACXA,EAAO8wC,EAAOiR,UAAUjR,EAAOiR,UAAUn6D,EAAK6sZ,SAAS3pY,IAAIioY,WACjDk2B,qBAC6C,IAA/C60B,EAAWxF,KAAK72b,SAAS7b,QAAQoa,EAAKrV,KACtCmzc,EAAWxF,KAAK72b,SAAS5V,KAAKmU,EAAKrV,IAEnCqV,EAAKy0Y,UAAYz0Y,EAAKy0Y,SAAS3wZ,QAAUkc,EAAKk8V,aAC9C4hG,EAAWxF,KAAKC,YAAa,GAEjClxc,KAAK+lb,YAAYt8X,EAAQ9wC,EAAM4uG,EAAQ,IAKnDkvV,EAAWxF,KAAKlvS,MAAQx6C,EAEpBkvV,EAAWxF,KAAKC,aAChBuF,EAAWxF,KAAKr4a,YAAc,aAC9B69a,EAAWxF,KAAKvqc,KAAO,UAIvB+iD,EAAOD,eAAiC,wBAAhBC,EAAO/iD,OAC/B+iD,EAAOD,cAAcjpD,EAAMk2c,EAAWxF,MACT,aAAzBwF,EAAWxF,KAAKvqc,MAAuB+vc,EAAWxF,KAAKC,aACvDuF,EAAWxF,KAAKvqc,KAAO,SACvB+vc,EAAWxF,KAAKr4a,YAAc,eAGlC6wB,EAAOs4G,OAAkC,cAAzB00S,EAAWxF,KAAKvqc,MAAwB6gH,GAAS99D,EAAOs4G,QACxE00S,EAAWxF,KAAKC,YAAa,IAGrCb,EAAiBh1c,UAAUg2c,aAAe,SAAU5nZ,EAAQ1zB,EAAQ+xZ,GAChE,IAAIvnb,EACA04a,EAKA9gJ,EAJAniR,EAAQ,EACRD,EAAS,EACTy9E,EAAM,EACNkjX,EAAiB,IAAInhb,GAAK,EAAG,EAAGuyZ,EAAS/6a,EAAG+6a,EAAS96a,GAEzDmrR,EAAe1uO,EAAO1zB,OAAS0zB,EAAO1zB,OAAS2gb,EAC/C,IAAI99a,EAAc6wB,EAAO7wB,YAEzB,GAAI6wB,EAAOwvX,UAAW,CAElBjja,GADAija,EAAYxvX,EAAOiR,UAAUjR,EAAOwvX,YAClBx/X,WAAWzjC,MAC7BD,EAASkja,EAAUx/X,WAAW1jC,OAC9B0zC,EAAO+mZ,QAAUv3B,EAAUpta,QAC3B49C,EAAOgnZ,QAAUx3B,EAAUhta,QAC3B,IAAIojD,EAAQ4pX,EAAU5pX,MAKtB,IAJA5F,EAAO+mZ,SAAkC,gBAAvB/mZ,EAAO7wB,YAAgC5iB,EAAQq5C,EAAMtiD,GAAKiJ,EAAQq5C,EAAMtiD,EAC1F08C,EAAOgnZ,SAAkC,gBAAvBhnZ,EAAO7wB,YAAgC7iB,EAASs5C,EAAMriD,GAAK+I,EAASs5C,EAAMriD,EAC5FzM,EAAO04a,EACPzlV,EAAM,EACCjzF,EAAK8sZ,QAAQ5wZ,QAChB8D,EAAOP,KAAK09H,cAAcj0E,EAAQlpD,GAClCizF,GAAO/pC,EAAOonZ,WAAWtwc,EAAK+C,IAAIqvc,oBAAsB,GAEhB,IAAxClpZ,EAAO7wB,YAAYr6B,QAAQ,SAC3BkrD,EAAO+mZ,SAAW/mZ,EAAOonZ,WAAW53B,EAAU31a,IAAI0J,EAClDy8C,EAAOgnZ,SAAWhnZ,EAAOonZ,WAAW53B,EAAU31a,IAAIyJ,EAAIymF,IAGtD/pC,EAAO+mZ,SAAW/mZ,EAAOonZ,WAAW53B,EAAU31a,IAAIyJ,EAAIymF,EACtD/pC,EAAOgnZ,SAAWhnZ,EAAOonZ,WAAW53B,EAAU31a,IAAI0J,QAItD,GAAoB,gBAAhB4rB,GAAiD,gBAAhBA,EAA+B,CAChE,OAAQ6wB,EAAOqD,qBACX,IAAK,OACDrD,EAAO+mZ,QAAWr4K,EAAaprR,EAAIgpB,EAAOhpB,EAAK08C,EAAOxsB,OAAOzwB,KAC7D,MACJ,IAAK,QACDi9C,EAAO+mZ,QAAUr4K,EAAaprR,EAAIorR,EAAaniR,MAAQyzC,EAAOxsB,OAAOxwB,MAAQspB,EAAOtpB,MACpF,MACJ,IAAK,OACL,IAAK,SACDg9C,EAAO+mZ,QAAUr4K,EAAaprR,EAAIorR,EAAaniR,MAAQ,GAAK+f,EAAOhpB,EAAIgpB,EAAOtpB,OAAS,EAG/F,OAAQg9C,EAAOsD,mBACX,IAAK,OACL,IAAK,MACD,IAAIhU,EACJA,EAAQo/O,EAAanrR,EAAIy8C,EAAOxsB,OAAOvwB,IACvC+8C,EAAOgnZ,QAA0B,gBAAhB73a,EAAgCmgB,EAAQhjB,EAAOppB,OAASosC,EACzE,MACJ,IAAK,SACD,IAAIpsC,OAAS,EACbA,EAASwrR,EAAanrR,EAAImrR,EAAapiR,OAAS0zC,EAAOxsB,OAAOtwB,OAC9D88C,EAAOgnZ,QAA0B,gBAAhB73a,EAAgCjsB,EAASopB,EAAOppB,OAASA,EAC1E,MACJ,IAAK,SACD,IAAIomB,OAAS,EACbA,EAASolQ,EAAanrR,EAAImrR,EAAapiR,OAAS,EAChD0zC,EAAOgnZ,QAAiC,gBAAvBhnZ,EAAO7wB,YACpB7F,GAAUgD,EAAO/oB,EAAI+oB,EAAOppB,QAAU,EAAIomB,GAAUgD,EAAO/oB,EAAI+oB,EAAOppB,QAAU,OAI3F,CACD,OAAQ88C,EAAOqD,qBACX,IAAK,OACL,IAAK,OACD,IAAItgD,OAAO,EACXA,EAAO2rR,EAAaprR,EAAI08C,EAAOxsB,OAAOzwB,KACtCi9C,EAAO+mZ,QAA0B,gBAAhB53a,EAAgCpsB,EAAOupB,EAAOppB,OAASH,EACxE,MACJ,IAAK,QACD,IAAIC,OAAQ,EACZA,EAAQ0rR,EAAaprR,EAAIorR,EAAaniR,MAAQyzC,EAAOxsB,OAAOxwB,MAC5Dg9C,EAAO+mZ,QAA0B,gBAAhB53a,EAAgCnsB,EAAQspB,EAAOppB,OAASF,EACzE,MACJ,IAAK,SACGsmB,OAAS,EACbA,EAASolQ,EAAaniR,MAAQ,EAAImiR,EAAaprR,EAC/C08C,EAAO+mZ,QAAiC,gBAAvB/mZ,EAAO7wB,YACpB7F,GAAUgD,EAAO/oB,EAAI+oB,EAAOppB,QAAU,EAAIomB,GAAUgD,EAAO/oB,EAAI+oB,EAAOppB,QAAU,EAG5F,OAAQ88C,EAAOsD,mBACX,IAAK,MACDtD,EAAOgnZ,QAAUt4K,EAAanrR,EAAIy8C,EAAOxsB,OAAOvwB,IAAMqpB,EAAOhpB,EAC7D,MACJ,IAAK,OACL,IAAK,SACD08C,EAAOgnZ,QAAUt4K,EAAanrR,EAAImrR,EAAapiR,OAAS,GAAKggB,EAAOtpB,MAAQspB,EAAOhpB,GAAK,EACxF,MACJ,IAAK,SACD08C,EAAOgnZ,QAAUt4K,EAAanrR,EAAImrR,EAAapiR,OAAS0zC,EAAOxsB,OAAOtwB,OAASopB,EAAOtpB,SAM1G4jc,EAAiBh1c,UAAUk2c,iBAAmB,SAAU9nZ,EAAQlpD,EAAMwhK,GAClE,IAAI5lK,EACA0qB,EASA1f,EACAsyD,EAMJ,GALA5yC,EAIO4iC,EAAOonZ,WAAWtwc,EAAK+C,IAE1B/C,EAAK6sZ,SAAS3wZ,OACd,IAAKN,EAAI,EAAGA,EAAIoE,EAAK6sZ,SAAS3wZ,OAAQN,KAClCs9D,EAAOhQ,EAAOiR,UAAUn6D,EAAK6sZ,SAASjxZ,KACjC86B,UACL9vB,EAASsiD,EAAOiR,UAAUjB,EAAKiyV,UAC3BjyV,EAAK3iC,UACL2iC,EAAKk9Y,SAAU,EACXltZ,EAAOmtZ,qBACIntZ,EAAOmtZ,qBAAqBn9Y,GAGnC5yC,IAAuD,IAA/CA,EAAKoqb,KAAK72b,SAAS7b,QAAQk7D,EAAKiyV,YACxCjyV,EAAKhwB,YACe,wBAAhBggB,EAAO/iD,MAAgD,eAAd+yD,EAAK/yD,MAC9C1G,KAAKyvZ,eAAehmW,EAAQgQ,EAAMl5D,EAAM4G,EAAQhL,IAIxDgL,IAAWA,EAAO0tW,YAAc70W,KAAKmmM,SAAS18I,EAAQtiD,KACtDnH,KAAKuxc,iBAAiB9nZ,EAAQtiD,EAAQ46J,EAAQ,IAK9D,GAAIl7I,GAAQA,EAAKoqb,KAAKW,WAAWn1c,OAE7B,IAAKN,EAAI,EAAGA,EAAI0qB,EAAKoqb,KAAKW,WAAWn1c,OAAQN,IACzCgL,EAASsiD,EAAOiR,UAAU7zC,EAAKoqb,KAAKW,WAAWz1c,IAC/Cs9D,EAAOhQ,EAAOiR,UAAUvzD,EAAOkmZ,QAAQ,IACvCrtZ,KAAK62c,WAAWptZ,EAAQlpD,EAAM4G,EAAQsyD,IAClCtyD,EAAO0tW,YAAc70W,KAAKmmM,SAAS18I,EAAQtiD,KAC3CnH,KAAKuxc,iBAAiB9nZ,EAAQtiD,EAAQ46J,EAAQ,IAK9DsuS,EAAiBh1c,UAAUo0Z,eAAiB,SAAUhmW,EAAQgQ,EAAMl5D,EAAM4G,EAAQhL,GAC9E,IAAI0qB,EAAO4iC,EAAOonZ,WAAWtwc,EAAK+C,IAE9BujB,EAAKoqb,KAAKW,WAAWn1c,OAErBuD,KAAK82c,uCAAuCrtZ,EAAQlpD,EAAM4G,EAAQsyD,GAIpC,eAA1B5yC,EAAKoqb,KAAKr4a,aAAmD,aAAnB/R,EAAKoqb,KAAKvqc,KACpD1G,KAAK+2c,8BAA8BttZ,EAAQgQ,EAAMl5D,EAAM4G,EAAQhL,GAGjC,eAA1B0qB,EAAKoqb,KAAKr4a,YACV54B,KAAK82c,uCAAuCrtZ,EAAQlpD,EAAM4G,EAAQsyD,GAG9D5yC,EAAKoqb,KAAKtlc,OAAS,EACnB3L,KAAKg3c,WAAWvtZ,EAAQlpD,EAAM4G,EAAQsyD,GAGtCz5D,KAAK62c,WAAWptZ,EAAQlpD,EAAM4G,EAAQsyD,IAM1D42Y,EAAiBh1c,UAAU07c,8BAAgC,SAAUttZ,EAAQ1R,EAAWx3C,EAAM4G,EAAQhL,GAClG,IAEI86c,EAFApwb,EAAO4iC,EAAOonZ,WAAWtwc,EAAK+C,IAGlC,GAAkC,IAA9BujB,EAAKoqb,KAAK72b,SAAS3d,QAAgBN,EAAI,EAAG,CAC1C86c,EAAWpwb,EAAKoqb,KAAK72b,SAAS,GAC1B+/B,MAAMsP,EAAOonZ,WAAWoG,GAAU3E,aAClC7oZ,EAAOonZ,WAAWoG,GAAU3E,UAAY7oZ,EAAOiR,UAAUu8Y,GAAUx9Z,WAAWzjC,OAElF,IAAI8nB,EAAe,IAAN3hC,EAAU,GAAK,GACgB,IAAxCstD,EAAO7wB,YAAYr6B,QAAQ,QAClBkrD,EAAOiR,UAAUu8Y,GAAUhrc,QAAUw9C,EAAOonZ,WAAWoG,GAAU3E,UAAY,EACjF7oZ,EAAOsnZ,gBAAkBjza,EAAS,EAG9B2rB,EAAOiR,UAAUu8Y,GAAUprc,QAChC49C,EAAOonZ,WAAWoG,GAAU3E,UAAY,EAAK7oZ,EAAOqnZ,kBAAoBhza,EAAU,EAE1F99B,KAAKk3c,2BAA2BztZ,EAAQlpD,EAAM4G,EAAQ4wC,QAGlDlxB,EAAKoqb,KAAK72b,SAAS3d,OAAS,EACxBN,EAAI,EACJ6D,KAAKk3c,2BAA2BztZ,EAAQlpD,EAAM4G,EAAQ4wC,GAGtD/3C,KAAK82c,uCAAuCrtZ,EAAQlpD,EAAM4G,EAAQ4wC,GAGnC,IAA9BlxB,EAAKoqb,KAAK72b,SAAS3d,OACpBN,EAAI,EACJ6D,KAAKk3c,2BAA2BztZ,EAAQlpD,EAAM4G,EAAQ4wC,GAGtD/3C,KAAK82c,uCAAuCrtZ,EAAQlpD,EAAM4G,EAAQ4wC,GAItE/3C,KAAKk3c,2BAA2BztZ,EAAQlpD,EAAM4G,EAAQ4wC,IAIlEs4Z,EAAiBh1c,UAAUw7c,WAAa,SAAUptZ,EAAQlpD,EAAM4G,EAAQ4wC,GACpE,IAAI9gB,KACA4hZ,EAAa74a,KAAKmnD,UAAU5mD,GAC5Bwpc,EAAe/pc,KAAKmnD,UAAUhgD,GAClC,IAA2C,IAAvCsiD,EAAO7wB,YAAYr6B,QAAQ,OAAe,CAC1C,IAAI44c,EAAsD,IAAtC1tZ,EAAO7wB,YAAYr6B,QAAQ,OAAes6a,EAAWloY,aACrEkoY,EAAWnoY,UACXgH,EAAWn3C,EAAKsL,QAAU1E,EAAO0E,QAAUk+b,EAAan5Z,YAAcm5Z,EAAal5Z,WACvF5Z,EAAOzyB,KAAK2yc,GAAiBpqc,EAAG8ra,EAAWloY,aAAa5jC,EAAGC,EAAG0qC,EAAS1qC,GAAK0qC,OAE3E,CACGy/Z,EAAuD,IAAvC1tZ,EAAO7wB,YAAYr6B,QAAQ,QAAgBs6a,EAAWjoY,YACtEioY,EAAWhoY,WACX6G,EAAWn3C,EAAK0L,QAAU9E,EAAO8E,QAAU89b,EAAap5Z,aAAeo5Z,EAAar5Z,UACxFzZ,EAAOzyB,KAAK2yc,GAAiBpqc,EAAGg9b,EAAap5Z,aAAa5jC,EAAGC,EAAG6ra,EAAWjoY,YAAY5jC,GAAK0qC,GAEhG13C,KAAKo3c,sBAAsBngb,EAAQ8gB,IAEvCs4Z,EAAiBh1c,UAAU27c,WAAa,SAAUvtZ,EAAQlpD,EAAM4G,EAAQ4wC,GACpE,IAAI9gB,KAEA4hZ,EAAa74a,KAAKmnD,UAAU5mD,GAC5Bwpc,EAAe/pc,KAAKmnD,UAAUhgD,GACvBsiD,EAAOonZ,WAAWtwc,EAAK+C,IAC9B/C,EAAKsL,QAAU1E,EAAO0E,QACtBorB,EAAOzyB,KAAKq0a,EAAWloY,cAAgB5jC,EAAG8ra,EAAWloY,aAAa5jC,EAAGC,EAAI6ra,EAAWloY,aAAa3jC,EAAIy8C,EAAOsnZ,gBAAkB,IAC1Hhkc,EAAIg9b,EAAan5Z,YAAY7jC,EAAI08C,EAAOqnZ,kBAAoB,EAC5D9jc,EAAI6ra,EAAWloY,aAAa3jC,EAAIy8C,EAAOsnZ,gBAAkB,IACxDhkc,EAAIg9b,EAAan5Z,YAAY7jC,EAAI08C,EAAOqnZ,kBAAoB,EAAI9jc,EAAG+8b,EAAan5Z,YAAY5jC,GAAK+8b,EAAan5Z,aAGnH3Z,EAAOzyB,KAAKq0a,EAAWloY,cAAgB5jC,EAAG8ra,EAAWloY,aAAa5jC,EAAGC,EAAI6ra,EAAWloY,aAAa3jC,EAAIy8C,EAAOsnZ,gBAAkB,IAC1Hhkc,EAAIg9b,EAAal5Z,WAAW9jC,EAAI08C,EAAOqnZ,kBAAoB,EAC3D9jc,EAAI6ra,EAAWloY,aAAa3jC,EAAIy8C,EAAOsnZ,gBAAkB,IACxDhkc,EAAIg9b,EAAal5Z,WAAW9jC,EAAI08C,EAAOqnZ,kBAAoB,EAAI9jc,EAAG+8b,EAAal5Z,WAAW7jC,GAAK+8b,EAAal5Z,YAErH7wC,KAAKo3c,sBAAsBngb,EAAQ8gB,IAEvCs4Z,EAAiBh1c,UAAU+7c,sBAAwB,SAAUngb,EAAQ8gB,GAGjE,IAAK,IADDxN,EADAd,KAEKttC,EAAI,EAAGA,EAAI86B,EAAOx6B,OAAS,EAAGN,KACnCouC,EAAU,IAAI6I,GAAkB2E,EAAW,YAAcrxC,KAAM,eAAgB,IACvEmuB,UAAYsd,GAAMtd,UAAUoC,EAAO96B,GAAI86B,EAAO96B,EAAI,IAC1DouC,EAAQ9tC,OAAS01C,GAAM+F,eAAejhB,EAAO96B,GAAI86B,EAAO96B,EAAI,IAC5DstC,EAASjlC,KAAK+lC,GAElBwN,EAAUtO,SAAWA,GAEzB4ma,EAAiBh1c,UAAU67c,2BAA6B,SAAUztZ,EAAQlpD,EAAM4G,EAAQ4wC,GACpF,IAEI5kB,EACAoX,EAFAd,KAGAsga,EAAe/pc,KAAKmnD,UAAUhgD,GAC9B0xa,EAAa74a,KAAKmnD,UAAU5mD,GAChC,OAAQkpD,EAAO7wB,aACX,IAAK,cACDzF,GAAUpmB,EAAG8ra,EAAWloY,aAAa5jC,EAAGC,EAAI6ra,EAAWloY,aAAa3jC,EAAIy8C,EAAOsnZ,gBAAkB,IACjGxma,EAAU,IAAI6I,GAAkB2E,EAAW,YAAcrxC,KAAM,eAAgB,IACvEmuB,UAAYsd,GAAMtd,UAAUgkZ,EAAWloY,aAAcxd,GAC7DoX,EAAQ9tC,OAAS01C,GAAM+F,eAAe2gY,EAAWloY,aAAcxd,GAC/DsW,EAASjlC,KAAK+lC,GACd,MACJ,IAAK,cACDpX,GAAUpmB,EAAG8ra,EAAWloY,aAAa5jC,EAAGC,EAAI6ra,EAAWnoY,UAAU1jC,EAAIy8C,EAAOsnZ,gBAAkB,IAC9Fxma,EAAU,IAAI6I,GAAkB2E,EAAW,YAAcrxC,KAAM,eAAgB,IACvEmuB,UAAYsd,GAAMtd,UAAUgkZ,EAAWnoY,UAAWvd,GAC1DoX,EAAQ9tC,OAAS01C,GAAM+F,eAAe2gY,EAAWnoY,UAAWvd,GAC5DsW,EAASjlC,KAAK+lC,GACd,MACJ,IAAK,cAMD,GALApX,GAAUpmB,EAAI8ra,EAAWjoY,YAAY7jC,EAAI08C,EAAOsnZ,gBAAkB,EAAI/jc,EAAG6ra,EAAWjoY,YAAY5jC,GAChGu9B,EAAU,IAAI6I,GAAkB2E,EAAW,YAAcrxC,KAAM,eAAgB,GAC/E6jC,EAAQ1V,UAAYsd,GAAMtd,UAAUgkZ,EAAWjoY,YAAazd,GAC5DoX,EAAQ9tC,OAAS01C,GAAM+F,eAAe2gY,EAAWjoY,YAAazd,GAC9DsW,EAASjlC,KAAK+lC,GACVw/Z,EAAah3a,OAAO/lB,IAAM6ra,EAAW9lZ,OAAO/lB,EAAG,CAC/C,IAAIkvC,GAAWnvC,EAAI8ra,EAAWjoY,YAAY7jC,EAAI08C,EAAOsnZ,gBAAkB,EAAI/jc,EAAG+8b,EAAal5Z,WAAW7jC,IACtGu9B,EAAU,IAAI6I,GAAkB2E,EAAW,YAAcrxC,KAAM,eAAgB,IACvEmuB,UAAYsd,GAAMtd,UAAU1B,EAAO+oB,GAC3C3R,EAAQ9tC,OAAS01C,GAAM+F,eAAe/kB,EAAO+oB,GAC7CzS,EAASjlC,KAAK+lC,GAElB,MACJ,IAAK,cAMD,GALApX,GAAUpmB,EAAI8ra,EAAWhoY,WAAW9jC,EAAI08C,EAAOsnZ,gBAAkB,EAAI/jc,EAAG6ra,EAAWjoY,YAAY5jC,GAC/Fu9B,EAAU,IAAI6I,GAAkB2E,EAAW,YAAcrxC,KAAM,eAAgB,GAC/E6jC,EAAQ1V,UAAYsd,GAAMtd,UAAUgkZ,EAAWhoY,WAAY1d,GAC3DoX,EAAQ9tC,OAAS01C,GAAM+F,eAAe2gY,EAAWhoY,WAAY1d,GAC7DsW,EAASjlC,KAAK+lC,GACVw/Z,EAAah3a,OAAO/lB,IAAM6ra,EAAW9lZ,OAAO/lB,EAAG,CAC/C,IAAIm1U,GAAYp1U,EAAI8ra,EAAWhoY,WAAW9jC,EAAI08C,EAAOsnZ,gBAAkB,EAAI/jc,EAAG+8b,EAAal5Z,WAAW7jC,IACtGu9B,EAAU,IAAI6I,GAAkB2E,EAAW,YAAcrxC,KAAM,eAAgB,IACvEmuB,UAAYsd,GAAMtd,UAAUstT,EAASA,GAC7C53S,EAAQ9tC,OAAS01C,GAAM+F,eAAeiqS,EAASA,GAC/C14S,EAASjlC,KAAK+lC,IAI1BwN,EAAUtO,SAAWA,GAEzB4ma,EAAiBh1c,UAAUy7c,uCAAyC,SAAUrtZ,EAAQlpD,EAAM4G,EAAQ4wC,GAChG,IACI/O,EACAuB,EACAd,KACAovY,EAAa74a,KAAKmnD,UAAU5mD,GAC5Bwpc,EAAe/pc,KAAKmnD,UAAUhgD,GAClC,OAAQsiD,EAAO7wB,aACX,IAAK,cACDoQ,GAAWj8B,EAAG8ra,EAAWloY,aAAa5jC,EAAGC,EAAI+8b,EAAar5Z,UAAU1jC,EAAIy8C,EAAOsnZ,gBAAkB,IACjGxma,EAAU,IAAI6I,GAAkB2E,EAAW,YAAcrxC,KAAM,eAAgB,IACvEmuB,UAAYsd,GAAMtd,UAAUgkZ,EAAWloY,aAAc3H,GAC7DuB,EAAQ9tC,OAAS01C,GAAM+F,eAAe2gY,EAAWloY,aAAc3H,GAC/DS,EAASjlC,KAAK+lC,GACd,MACJ,IAAK,cACDvB,GAAWj8B,EAAG8ra,EAAWnoY,UAAU3jC,EAAGC,EAAI+8b,EAAap5Z,aAAa3jC,EAAIy8C,EAAOsnZ,gBAAkB,IACjGxma,EAAU,IAAI6I,GAAkB2E,EAAW,YAAcrxC,KAAM,eAAgB,IACvEmuB,UAAYsd,GAAMtd,UAAUgkZ,EAAWnoY,UAAW1H,GAC1DuB,EAAQ9tC,OAAS01C,GAAM+F,eAAe2gY,EAAWnoY,UAAW1H,GAC5DS,EAASjlC,KAAK+lC,GACd,MACJ,IAAK,cAMD,GALAvB,GAAWj8B,EAAIg9b,EAAal5Z,WAAW9jC,EAAI08C,EAAOsnZ,gBAAkB,EAAI/jc,EAAG6ra,EAAWjoY,YAAY5jC,GAClGu9B,EAAU,IAAI6I,GAAkB2E,EAAW,YAAcrxC,KAAM,eAAgB,GAC/E6jC,EAAQ1V,UAAYsd,GAAMtd,UAAUgkZ,EAAWjoY,YAAa5H,GAC5DuB,EAAQ9tC,OAAS01C,GAAM+F,eAAe2gY,EAAWjoY,YAAa5H,GAC9DS,EAASjlC,KAAK+lC,GACVw/Z,EAAah3a,OAAO/lB,IAAM6ra,EAAW9lZ,OAAO/lB,EAAG,CAC/C,IAAIkvC,GAAWnvC,EAAIg9b,EAAal5Z,WAAW9jC,EAAI08C,EAAOsnZ,gBAAkB,EAAI/jc,EAAG+8b,EAAal5Z,WAAW7jC,IACvGu9B,EAAU,IAAI6I,GAAkB2E,EAAW,YAAcrxC,KAAM,eAAgB,IACvEmuB,UAAYsd,GAAMtd,UAAUmU,EAAQkT,GAC5C3R,EAAQ9tC,OAAS01C,GAAM+F,eAAelP,EAAQkT,GAC9CzS,EAASjlC,KAAK+lC,GAElB,MACJ,IAAK,cAMD,GALAvB,GAAWj8B,EAAIg9b,EAAan5Z,YAAY7jC,EAAI08C,EAAOsnZ,gBAAkB,EAAI/jc,EAAG6ra,EAAWjoY,YAAY5jC,GACnGu9B,EAAU,IAAI6I,GAAkB2E,EAAW,YAAcrxC,KAAM,eAAgB,GAC/E6jC,EAAQ1V,UAAYsd,GAAMtd,UAAUgkZ,EAAWhoY,WAAY7H,GAC3DuB,EAAQ9tC,OAAS01C,GAAM+F,eAAe2gY,EAAWhoY,WAAY7H,GAC7DS,EAASjlC,KAAK+lC,GACVw/Z,EAAah3a,OAAO/lB,IAAM6ra,EAAW9lZ,OAAO/lB,EAAG,CAC/C,IAAImmB,GAAUpmB,EAAIg9b,EAAan5Z,YAAY7jC,EAAI08C,EAAOsnZ,gBAAkB,EAAI/jc,EAAG+8b,EAAal5Z,WAAW7jC,IACvGu9B,EAAU,IAAI6I,GAAkB2E,EAAW,YAAcrxC,KAAM,eAAgB,IACvEmuB,UAAYsd,GAAMtd,UAAUmU,EAAQ7V,GAC5CoX,EAAQ9tC,OAAS01C,GAAM+F,eAAelP,EAAQ7V,GAC9CsW,EAASjlC,KAAK+lC,IAK1B,OADAwN,EAAUtO,SAAWA,MAGzB4ma,EAAiBh1c,UAAUi2c,YAAc,SAAU7nZ,EAAQlpD,EAAMizF,EAAKj8C,EAAQ4mR,EAAIprQ,GAC9E,IAAI52D,EACAkE,EACA2V,EACAD,EACAlK,EACAI,EAGJ,GAFA+J,EAAQzV,EAAKk5C,WAAWzjC,MACxBD,EAASxV,EAAKk5C,WAAW1jC,QACpBxV,EAAKqhb,kBAAmB,CACzB/1a,EAAU49C,EAAO+mZ,QACjBvkc,EAAUw9C,EAAOgnZ,QAGU,gBAAvBhnZ,EAAO7wB,aACP/sB,GAAW49C,EAAOonZ,WAAWtwc,EAAK+C,IAAI0J,EAAIgJ,EAAQ,EAClD/J,GAAWw9C,EAAOonZ,WAAWtwc,EAAK+C,IAAIyJ,EAAIymF,EAAMz9E,EAAS,GAE7B,gBAAvB0zC,EAAO7wB,aACZ/sB,GAAW49C,EAAOonZ,WAAWtwc,EAAK+C,IAAI0J,EAAIgJ,EAAQ,EAClD/J,GAAWw9C,EAAOonZ,WAAWtwc,EAAK+C,IAAIyJ,EAAIymF,EAAMz9E,EAAS,GAE7B,gBAAvB0zC,EAAO7wB,aACZ/sB,GAAW49C,EAAOonZ,WAAWtwc,EAAK+C,IAAIyJ,EAAIymF,EAAMx9E,EAAQ,EACxD/J,GAAWw9C,EAAOonZ,WAAWtwc,EAAK+C,IAAI0J,EAAI+I,EAAS,IAGnDlK,GAAW49C,EAAOonZ,WAAWtwc,EAAK+C,IAAIyJ,EAAIymF,EAAMx9E,EAAQ,EACxD/J,GAAWw9C,EAAOonZ,WAAWtwc,EAAK+C,IAAI0J,EAAI+I,EAAS,GAEnD0zC,EAAOonZ,aAGPhlc,GAFAsyT,EAAKA,GAAU,EAGflyT,GAFA8mD,EAAKA,GAAU,EAGV/yD,KAAKo5a,cACN74a,EAAKsL,QAAUA,EACftL,EAAK0L,QAAUA,IAGvB,IAAIi7C,GAAY5jD,GAAI/C,EAAK+C,GAAI6sc,YAAatkc,EAAUtL,EAAKsL,QAASukc,YAAankc,EAAU1L,EAAK0L,SAC9Fw9C,EAAOvC,QAAQ1iD,KAAK0iD,GACpB,IAAIm9C,OAAO,EAEX,GADAA,KACIrkG,KAAKmmM,SAAS18I,EAAQlpD,GACtB,IAAKpE,EAAI,EAAGA,EAAIstD,EAAOonZ,WAAWtwc,EAAK+C,IAAI2tc,KAAK72b,SAAS3d,OAAQN,IAC7DkE,EAAQopD,EAAOiR,UAAUjR,EAAOonZ,WAAWtwc,EAAK+C,IAAI2tc,KAAK72b,SAASje,IAClE6D,KAAKsxc,YAAY7nZ,EAAQppD,EAAOmzF,GAAO/pC,EAAOonZ,WAAWtwc,EAAK+C,IAAIqvc,oBAAsB,GAAIp7Z,EAAQ4mR,EAAIprQ,GACxGsxC,EAAK7/F,KAAKnE,GAGlB,GAAIopD,EAAOonZ,WAAWtwc,EAAK+C,IAAI2tc,KAAKW,WAAWn1c,OAC3C,IAAKN,EAAI,EAAGA,EAAIstD,EAAOonZ,WAAWtwc,EAAK+C,IAAI2tc,KAAKW,WAAWn1c,OAAQN,IAC/DkE,EAAQopD,EAAOiR,UAAUjR,EAAOonZ,WAAWtwc,EAAK+C,IAAI2tc,KAAKW,WAAWz1c,IACpE6D,KAAKsxc,YAAY7nZ,EAAQppD,EAAOmzF,GAAO/pC,EAAOonZ,WAAWtwc,EAAK+C,IAAIqvc,oBAAsB,GAAI,KAAMx0I,EAAIprQ,KAK/Gs9Y,KCtmDPgH,GAAyB,WAKzB,SAASA,IAKLr3c,KAAKo5a,aAAc,EAuHvB,OA/GAi+B,EAAQh8c,UAAUiX,QAAU,aAQ5B+kc,EAAQh8c,UAAU0kC,cAAgB,WAI9B,MAAO,gBAEXs3a,EAAQh8c,UAAU0sb,aAAe,SAAUr9X,EAAOgQ,EAAW41Y,EAAYxoB,EAAU3lF,EAAUp2J,GACzF,IAAI6/K,EAEJ,GADAA,EAAS5rX,KAAKs3c,UAAU5sZ,EAAO4lZ,EAAYnuG,EAAUp2J,EAAMrxI,GAEvD41Y,EAAWr3B,UAAYrtD,OAGvB,IAAK,IAAIxtX,EAAK,EAAG+pX,EAAUz9T,EAAOtsD,EAAK+pX,EAAQ1rX,OAAQ2B,IAAM,CAEzD,MADImC,EAAO4nX,EAAQ/pX,IACTwjb,mBACDrhb,EAAK8sZ,SAAY9sZ,EAAK8sZ,QAAQ5wZ,QAAQ,CACvC6zc,EAAWr3B,UAAY14a,EAAK+C,GAC5B,OAKhB,IAAImrX,EAAW/zT,EAAU41Y,EAAWr3B,WAChCs+B,EAAiBv3c,KAAKw3c,oBAAoB/oF,EAAU6hF,EAAY51Y,GAChE+8Y,KACAC,KACAC,EAAmB1zZ,GAAYqsZ,EAAW5mZ,WAC9CiuZ,EAAmBA,GAAoB1zZ,GAAYjkD,KAAK0pD,WACxD,IAAK,IAAI7mD,EAAK,EAAG+0c,EAAmBL,EAAgB10c,EAAK+0c,EAAiBn7c,OAAQoG,IAAM,CACpF,IAAItC,EAEO,SADCo3c,EADRp3c,EAAOq3c,EAAiB/0c,GACO00c,GACdE,EAAUjzc,KAAKjE,GAAQm3c,EAAWlzc,KAAKjE,GAEhE,IAAIm2c,EAAiB,IAAInhb,GAAK,EAAG,EAAGuyZ,EAAS/6a,EAAG+6a,EAAS96a,GACzD0tD,EAAU41Y,EAAWr3B,WAAWpta,QAAU6qc,EAAe3pc,EAAI2pc,EAAe1gc,MAAQ,EACpF0kD,EAAU41Y,EAAWr3B,WAAWhta,QAAUyqc,EAAe1pc,EAAI0pc,EAAe3gc,OAAS,EACjF0hc,EAAUh7c,QACVuD,KAAK63c,oBAAoBntZ,EAAOgtZ,EAAYh9Y,EAAW41Y,EAAYxoB,EAAU3lF,EAAU,QAEvFu1G,EAAWj7c,QACXuD,KAAK63c,oBAAoBntZ,EAAO+sZ,EAAW/8Y,EAAW41Y,EAAYxoB,EAAU3lF,EAAU,UAG9Fk1G,EAAQh8c,UAAUi8c,UAAY,SAAU5sZ,EAAO4lZ,EAAYnuG,EAAUp2J,EAAMrxI,GACvE,IAAK,IAAIt8D,EAAK,EAAG05c,EAAUptZ,EAAOtsD,EAAK05c,EAAQr7c,OAAQ2B,IAAM,CACzD,IAAImC,EAAOu3c,EAAQ15c,GACnB,IAAKmC,EAAKqhb,kBAAmB,CACzB,GAAIrhb,EAAK/D,OAAS+D,EAAK/D,KAAK2lW,GAAUj1V,aAAe6+L,GAAQxrM,EAAK/D,KAAK2lW,GAAUj1V,aACzEojc,EAAWvkQ,MACf,OAAOxrM,EAAK+C,GAEX,IAAK/C,EAAK/D,MAAQ+D,EAAK+C,KAAOgtc,EAAWvkQ,KAC1C,OAAOxrM,EAAK+C,IAIxB,MAAO,IAEX+zc,EAAQh8c,UAAUw8c,oBAAsB,SAAUntZ,EAAOqtZ,EAAcr9Y,EAAW41Y,EAAYxoB,EAAU3lF,EAAU7yS,GAC9G,IAAI7F,GACJA,GACI/iD,KAAM,mBACNoqc,kBAAmBR,EAAWS,gBAAiBA,gBAAiBT,EAAWQ,kBAC3E/jZ,kBAAmBujZ,EAAWvjZ,kBAAmBD,oBAAqBwjZ,EAAWxjZ,oBACjFmsX,UAAWq3B,EAAWr3B,UAAWzvX,cAAevF,GAAYqsZ,EAAW9mZ,eAAgBvsB,OAAQqza,EAAWrza,OAC1G8uK,KAAMukQ,EAAWr3B,YAEdrgZ,YAAwB,SAAT02B,EAAmB,cAAgB,cACzDtvD,KAAK4hb,kBAAkBm2B,EAAcr9Y,GAAW,IAChC,IAAI21Y,IACVtoB,aAAar9X,EAAOgQ,EAAWjR,EAAQq+X,EAAU3lF,GAC3DniW,KAAK4hb,kBAAkBm2B,EAAcr9Y,GAAW,IAEpD28Y,EAAQh8c,UAAUquD,UAAY,SAAU3sD,EAAK2zc,GASzC,OAPQA,EAAgBnyc,QAAQxB,GACxB,GAAM,EACH,OAGA,SAIfs6c,EAAQh8c,UAAUumb,kBAAoB,SAAUo2B,EAAet9Y,EAAW2E,GACtE,IAAK,IAAIjhE,EAAK,EAAG65c,EAAkBD,EAAe55c,EAAK65c,EAAgBx7c,OAAQ2B,IAAM,CAEtEs8D,EADEu9Y,EAAgB75c,GACDkF,IACvBs+a,kBAAoBviX,IAGjCg4Y,EAAQh8c,UAAUm8c,oBAAsB,SAAUj3c,EAAMkpD,EAAQiR,GAC5D,IACI68Y,KACJ,GAAIh3c,GAAQA,EAAK6sZ,SAAS3wZ,OACtB,IAAK,IAAI2B,EAAK,EAAGyE,EAAKtC,EAAK6sZ,SAAUhvZ,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI85c,EAAUr1c,EAAGzE,GACjBm5c,EAAe/yc,KAAKk2D,EAAUA,EAAUw9Y,GAASxsD,WAGzD,OAAO6rD,GAEJF,KCpIPc,GAA4B,WAK5B,SAASA,KA2NT,OAnNAA,EAAW98c,UAAUiX,QAAU,aAQ/B6lc,EAAW98c,UAAU0kC,cAAgB,WAIjC,MAAO,cAEXo4a,EAAW98c,UAAU0sb,aAAe,SAAUr9X,EAAOgQ,EAAW41Y,EAAYC,GACxE,IAAI9mZ,GACA/iD,KAAM4pc,EAAW5pc,KACjBg0D,UAAWA,EAAW81Y,QAAS,EAAGC,QAAS,EAC3CC,mBAAqBC,WAAY,KAAMhwX,UAAYiwX,SAAU,EAAGC,cAAgBuH,eAChFx/a,YAAa03a,EAAW13a,YACxBk4a,kBAAmBR,EAAWQ,kBAAmBC,gBAAiBT,EAAWS,gBAC7EhkZ,kBAAmBujZ,EAAWvjZ,kBAAmBD,oBAAqBwjZ,EAAWxjZ,oBACjFmsX,UAAWq3B,EAAWr3B,UAAWh8Y,OAAQqza,EAAWrza,OACpDlH,OAAQu6a,EAAWv6a,OAAQmxB,WAAa6kJ,KAAMukQ,EAAWvkQ,MAE7D/rM,KAAKgiQ,SAASv4M,EAAQiB,EAAOgQ,EAAW61Y,IAE5C4H,EAAW98c,UAAU2mQ,SAAW,SAAUv4M,EAAQiB,EAAOgQ,EAAW61Y,GAEhE,IAAK,IADDhwc,EACKpE,EAAI,EAAGA,EAAIuuD,EAAMjuD,OAAQN,KAC9BoE,EAAOmqD,EAAMvuD,IACHylb,oBACNn4X,EAAOonZ,WAAWtwc,EAAK+C,IAAMtD,KAAKgxc,gBAAgBvnZ,EAAQlpD,GACrDA,EAAK8sZ,SAAY9sZ,EAAK8sZ,QAAQ5wZ,QAC/BgtD,EAAOinZ,gBAAgBlsc,KAAKjE,IAIpCkpD,EAAOsiJ,MAAQrxI,EAAUjR,EAAOsiJ,MAChCtiJ,EAAOknZ,WAAaj2Y,EAAUjR,EAAOsiJ,MAEhCtiJ,EAAOinZ,gBAAgBj0c,SAC5BgtD,EAAOknZ,WAAalnZ,EAAOinZ,gBAAgB,GAC3CjnZ,EAAOsiJ,KAAOtiJ,EAAOknZ,WAAWrtc,IAEhCmmD,EAAOknZ,aACP3wc,KAAK+lb,YAAYt8X,EAAQA,EAAOknZ,WAAY,EAAGj2Y,GAC/C16D,KAAKq4c,qBAAqB5uZ,EAAQA,EAAOknZ,WAAY,EAAG,GACxD3wc,KAAKs4c,eAAe7uZ,GACpBzpD,KAAKu4c,wBAAwB9uZ,GAC7BzpD,KAAKqxc,aAAa5nZ,EAAQ8mZ,GAC1Bvwc,KAAKsxc,YAAY7nZ,EAAQA,EAAOknZ,WAAYj2Y,KAGpDy9Y,EAAW98c,UAAU0qb,YAAc,SAAUt8X,EAAQlpD,EAAMgnH,EAAO7sD,GAC9D,IAAI89Y,EAAW/uZ,EAAOonZ,WAAWtwc,EAAK+C,IACtCmmD,EAAO2uZ,YAAY5zc,KAAKg0c,GACxBA,EAASz2S,MAAQx6C,EACjBixV,EAAS7B,SAAU,EACnBltZ,EAAOmnZ,SAAWvkc,KAAKC,IAAIm9C,EAAOmnZ,SAAUrpV,GAC5C,IAAK,IAAI9jG,EAAI,EAAGA,EAAIljB,EAAK6sZ,SAAS3wZ,OAAQgnB,IAAK,CAC3C,IAAI9K,EAAO+hD,EAAUA,EAAUn6D,EAAK6sZ,SAAS3pY,IAAIioY,UAC5C/yY,EAAKipa,mBAAsBjpa,EAAKg+b,UACjC6B,EAASp+b,SAAS5V,KAAKmU,GACvB3Y,KAAK+lb,YAAYt8X,EAAQ9wC,EAAM4uG,EAAQ,EAAG7sD,MAItDy9Y,EAAW98c,UAAUg9c,qBAAuB,SAAU5uZ,EAAQlpD,EAAMwM,EAAGC,GACnE,IAAI1F,EACAkxc,EAAW/uZ,EAAOonZ,WAAWtwc,EAAK+C,IACtC,GAAIk1c,EAASp+b,SAAS3d,OAAQ,CAC1BuQ,GAAK,IACL,IAAK,IAAI7Q,EAAI,EAAGA,EAAIq8c,EAASp+b,SAAS3d,OAAQN,IAE1C4Q,GADAzF,EAAWtH,KAAKq4c,qBAAqB5uZ,EAAQ+uZ,EAASp+b,SAASje,GAAI4Q,EAAGC,IACzDD,EACbC,EAAI1F,EAAS0F,EAEjBwrc,EAASp+b,SAAWo+b,EAASp+b,SAAS+c,KAAK,SAAUh4B,EAAM46P,GACvD,OAAOtwM,EAAOonZ,WAAW1xc,EAAKmE,IAAIyJ,EAAI08C,EAAOonZ,WAAW92M,EAAKz2P,IAAIyJ,IAErE,IAAIoT,EAAMspC,EAAOonZ,WAAW2H,EAASp+b,SAAS,GAAG9W,IAAI6c,IACjD7T,EAAMm9C,EAAOonZ,WAAW2H,EAASp+b,SAASo+b,EAASp+b,SAAS3d,OAAS,GAAG6G,IAAIgJ,IAQhF,GAPAksc,EAASzrc,EAAIoT,GAAO7T,EAAM6T,GAAO,EACjCpT,EAAIT,EAAMm9C,EAAOqnZ,kBACjB0H,EAASC,cAAgBnsc,EAAMm9C,EAAOqnZ,kBACtC0H,EAASzrc,GAAKyrc,EAASxic,MAAQ,EAC/Bwic,EAASxrc,GAAKwrc,EAASzic,OAAS,EAChCyic,EAASr4b,IAAMA,EACfq4b,EAASlsc,IAAMA,EACXksc,EAASzrc,EAAIoT,GAAOq4b,EAAS7B,QAAS,CACtC6B,EAASzrc,EAAIoT,EACbpT,EAAIyrc,EAASzrc,EAAIyrc,EAASxic,MAAQ,GAAK1J,EAAM6T,GAAO,EACpDq4b,EAAS7B,SAAU,EACnB,IAASx6c,EAAI,EAAGA,EAAIq8c,EAASp+b,SAAS3d,OAAQN,IAC1CmL,EAAWtH,KAAKq4c,qBAAqB5uZ,EAAQ+uZ,EAASp+b,SAASje,GAAI4Q,EAAGC,GAE1Ewrc,EAAS7B,SAAU,EACnB5pc,EAAIyrc,EAASzrc,EAAIyrc,EAASxic,MAAQyzC,EAAOqnZ,kBAG7C/jc,EAAIA,GADJT,EAAMm9C,EAAOonZ,WAAW2H,EAASp+b,SAASo+b,EAASp+b,SAAS3d,OAAS,GAAG6G,IAAIm1c,eAC9Dnsc,EAAMS,EACpBC,GAAK,IACLwrc,EAASxrc,EAAIA,OAGbwrc,EAASzrc,EAAIA,EACbyrc,EAASxrc,EAAIA,EACbwrc,EAASr4b,IAAMpT,EACfyrc,EAASlsc,IAAMS,EAAIyrc,EAASxic,MAC5BjJ,GAAKyrc,EAASxic,MAAQyzC,EAAOqnZ,kBAEjC,OAAS/jc,EAAGA,EAAGC,EAAGA,IAEtBmrc,EAAW98c,UAAUi9c,eAAiB,SAAU7uZ,GAC5C,IAAIivZ,KACAv4b,EAAM9T,KAAK8T,IAAI5kB,MAAM8Q,KAAMo9C,EAAO2uZ,YAAYlhb,IAAI,SAAUshb,GAAY,OAAOA,EAASzrc,KAIxFo0F,EAHM90F,KAAKC,IAAI/Q,MAAM8Q,KAAMo9C,EAAO2uZ,YAAYlhb,IAAI,SAAUshb,GAC5D,OAAOA,EAASzrc,EAAIyrc,EAASxic,MAAQyzC,EAAOqnZ,qBAE/B3wb,EACjBspC,EAAOk3B,UA0CP,IAAK,IAzCD1hF,EAAU,SAAU9C,GASpB,IAAIw8c,KACJD,GATAA,EAASjvZ,EAAO2uZ,YAAYzwa,OAAO,SAAU6wa,GACzC,OAAIA,EAASz2S,QAAU5lK,EACZq8c,EAGA,QAICrhb,KAAK,SAAUyhb,EAAWC,GAAa,OAAOD,EAAU7rc,EAAI8rc,EAAU9rc,IACtF4rc,EAASx4b,IAAMu4b,EAAO,GAAG3rc,EACzB4rc,EAASrsc,IAAMosc,EAAOA,EAAOj8c,OAAS,GAAGsQ,EAAI2rc,EAAOA,EAAOj8c,OAAS,GAAGuZ,MAAQyzC,EAAOqnZ,kBACtF6H,EAASG,oBAAsB,EAC/BH,EAAS5ic,OAAS,EAClB,IAAK,IAAIsQ,EAAI,EAAGA,EAAIqyb,EAAOj8c,OAAQ4pB,IAC3Bqyb,EAAOryb,GAAGtQ,OAAS4ic,EAAS5ic,SAC5B4ic,EAAS5ic,OAAS2ic,EAAOryb,GAAGtQ,QAEhC4ic,EAASG,qBAAuBzsc,KAAKC,IAAIosc,EAAOryb,GAAGrQ,MAAO0ic,EAAOryb,GAAGtQ,QAChEsQ,IAAMqyb,EAAOj8c,OAAS,IACtBk8c,EAASG,qBAAuBrvZ,EAAOqnZ,mBAG/C6H,EAAS3nX,cAAgB2nX,EAASrsc,IAAMqsc,EAASx4b,IAC7Cw4b,EAASG,oBAAsBH,EAAS3nX,gBACxC2nX,EAAS3nX,eAAiB2nX,EAAS3nX,cAAgB2nX,EAASG,qBAAuB,GAEvFH,EAAS/rc,OAAS+rc,EAAS3nX,eAAiB,EAAI3kF,KAAKkR,IAAMo7b,EAAS5ic,OACpE4ic,EAASjuZ,SACLvuD,EAAI,GACAstD,EAAOk3B,OAAOxkF,EAAI,GAAGyQ,OAAS68C,EAAOk3B,OAAOxkF,EAAI,GAAG4Z,QAAU4ic,EAAS/rc,SACtE+rc,EAAS/rc,OAAS68C,EAAOk3B,OAAOxkF,EAAI,GAAGyQ,OAAS68C,EAAOk3B,OAAOxkF,EAAI,GAAG4Z,QAG7E,IAAK,IAAI0N,EAAI,EAAGA,EAAIi1b,EAAOj8c,OAAQgnB,IAC/Bi1b,EAAOj1b,GAAGq3Y,MAAQzuZ,KAAKE,IAAImsc,EAAOj1b,GAAG1W,EAAI2rc,EAAOj1b,GAAGzN,MAAQ,EAAImK,GAAOghF,EACtEw3W,EAASjuZ,MAAMlmD,KAAKk0c,EAAOj1b,IAE/BgmC,EAAOk3B,OAAOn8E,KAAKm0c,IAEdx8c,EAAI,EAAGA,GAAKstD,EAAOmnZ,SAAUz0c,IAClC8C,EAAQ9C,IAGhBg8c,EAAW98c,UAAUk9c,wBAA0B,SAAU9uZ,GACrD,IAAIsiJ,EAAOtiJ,EAAOonZ,WAAWpnZ,EAAOknZ,WAAWrtc,IAC/CyoM,EAAKh/L,EAAI,EACTg/L,EAAK/+L,EAAI,EACT,IAAK,IAAI7Q,EAAI,EAAGA,EAAIstD,EAAOk3B,OAAOlkF,OAAQN,IACtC,IAAK,IAAIsnB,EAAI,EAAGA,EAAIgmC,EAAOk3B,OAAOxkF,GAAGuuD,MAAMjuD,OAAQgnB,IAAK,CACpD,IAAI+0b,EAAW/uZ,EAAOk3B,OAAOxkF,GAAGuuD,MAAMjnC,GACtC+0b,EAASzrc,EAAIV,KAAKwV,IAAqB,IAAjB22b,EAAS19C,MAAczuZ,KAAKkR,GAAK,MAAQksC,EAAOk3B,OAAOxkF,GAAGyQ,OAAS68C,EAAOsnZ,gBAAkB50c,GAClHq8c,EAASxrc,EAAIX,KAAKyV,IAAqB,IAAjB02b,EAAS19C,MAAczuZ,KAAKkR,GAAK,MAAQksC,EAAOk3B,OAAOxkF,GAAGyQ,OAAS68C,EAAOsnZ,gBAAkB50c,GAClHstD,EAAO+mZ,QAAUnkc,KAAK8T,IAAIspC,EAAO+mZ,QAASgI,EAASzrc,GACnD08C,EAAOgnZ,QAAUpkc,KAAK8T,IAAIspC,EAAOgnZ,QAAS+H,EAASxrc,KAI/Dmrc,EAAW98c,UAAUg2c,aAAe,SAAU5nZ,EAAQq+X,GAClDr+X,EAAO+mZ,QAAU/mZ,EAAOknZ,WAAW9kc,SAAWi8a,EAAS/6a,EAAI,EAC3D08C,EAAOgnZ,QAAUhnZ,EAAOknZ,WAAW1kc,SAAW67a,EAAS96a,EAAI,GAE/Dmrc,EAAW98c,UAAUi2c,YAAc,SAAU7nZ,EAAQlpD,EAAMm6D,GACvD,IAAI89Y,EAAW/uZ,EAAOonZ,WAAWtwc,EAAK+C,IAClCuI,EAAU2sc,EAASzrc,EAAI08C,EAAO+mZ,QAC9Bvkc,EAAUusc,EAASxrc,EAAIy8C,EAAOgnZ,QAClClwc,EAAKsL,SAAWA,EAChBtL,EAAK0L,SAAWA,EAChB,IAAK,IAAI9P,EAAI,EAAGA,EAAIq8c,EAASp+b,SAAS3d,OAAQN,IAAK,CAC/C,IAAIo4c,EAAYiE,EAASp+b,SAASje,GAClC6D,KAAKsxc,YAAY7nZ,EAAQiR,EAAU65Y,EAAUjxc,IAAKo3D,KAG1Dy9Y,EAAW98c,UAAU21c,gBAAkB,SAAUvnZ,EAAQzrC,GACrD,IAAI6I,KAYJ,OAXAA,EAAKkQ,KAAO/Y,EAAK1a,GACjBujB,EAAK9Z,EAAI,EACT8Z,EAAK7Z,EAAI,EACT6Z,EAAK1G,IAAM,EACX0G,EAAKva,IAAM,EACXua,EAAK7Q,MAAQgI,EAAKy7B,WAAWzjC,MAC7B6Q,EAAK9Q,OAASiI,EAAKy7B,WAAW1jC,OAC9B8Q,EAAKzM,YACLyM,EAAKk7I,MAAQ,EACbl7I,EAAKi0Y,MAAQ,EACbj0Y,EAAK8vb,SAAU,EACR9vb,GAEJsxb,KtXjOPY,GAAgC,WAChC,SAASA,EAAeC,GAIpBh5c,KAAKi5c,UAAY,EAIjBj5c,KAAKk5c,UAAY,EAIjBl5c,KAAK0qD,SACL1qD,KAAKm5c,UAAYH,EACjB,IACIjjb,EAAS0lC,GADDz7D,KAAKm5c,WAEjBn5c,KAAKk5B,SAAWnD,EAAOhD,OACvB/yB,KAAK0qD,SACAsuZ,EAAO9D,SAASp0Y,UACjBk4Y,EAAO9D,SAASp0Y,YAEfk4Y,EAAO9D,SAAS96b,WACjB4+b,EAAO9D,SAAS96b,aAEpBpa,KAAK0qD,MAASsuZ,EAAO9D,SAAgB,QAAE16b,OAAOw+b,EAAO9D,SAAS96b,UAQlE,OAHA2+b,EAAe19c,UAAU+9c,aAAe,WACpCp5c,KAAKm5c,UAAUjE,SAASnib,OAAS/yB,KAAKk5B,UAEnC6/a,KAMPM,GAAiC,WACjC,SAASA,IACLr5c,KAAKs5c,OAAS,KACdt5c,KAAKu5c,cAAgB,GACrBv5c,KAAKw5c,gBAAkB,IACvBx5c,KAAKy5c,eAAiB,IACtBz5c,KAAK05c,qBAAwB1jc,MAAOhW,KAAKu5c,cAAexjc,OAAQ/V,KAAKu5c,eAIrEv5c,KAAKoob,aAAe,EAIpBpob,KAAKqob,aAAerob,KAAKs5c,OAIzBt5c,KAAKmob,aAAenob,KAAKw5c,gBACzBx5c,KAAKoob,aAAepob,KAAKy5c,eAmO7B,OA9NAJ,EAAgBh+c,UAAUiX,QAAU,aAKpC+mc,EAAgBh+c,UAAU0kC,cAAgB,WACtC,MAAO,qBAEXs5a,EAAgBh+c,UAAUs+c,cAAgB,SAAUC,GAChD,IAAIC,EAAQ75c,KAAK85c,aACjBD,EAAM3E,SAAS6E,OAASH,EAAmBI,eAAeJ,EAAmBlvZ,OAC7E,IAAIuvZ,EAAgBJ,EAAM3E,SAASgF,WAC/BC,EAAWn6c,KAAKo6c,kBAAkBH,GAClCh7b,EAAQk7b,EAAS19c,OACrBwiB,EAAQ5S,KAAK8T,IAAIngB,KAAKmob,aAAclpa,EAAQA,EAAQA,GACpDjf,KAAKq6c,eAAeF,EAAUN,EAAM3E,SAAS6E,QAC7C,IAAK,IAAI59c,EAAI,EAAGm+c,EAAUr7b,EAAO9iB,EAAIm+c,EAASn+c,IAC1C6D,KAAKu6c,oBAAoBJ,GACzBn6c,KAAKw6c,aAAaL,GAEtBn6c,KAAKy6c,mBAAmBN,EAAUN,IAEtCR,EAAgBh+c,UAAUg/c,eAAiB,SAAUF,EAAUO,GAK3D,IAAK,IAJDC,EAAWtuc,KAAKC,IAAIouc,EAAWA,EAAS1kc,MAAQ,GAAI0kc,EAAWA,EAAS3kc,OAAS,IACjF6kc,EAAgBD,EAAW,EAA3BC,EAAiCD,EAAW,EAC5CE,EAAe,EAAIxuc,KAAKkR,GAAK48b,EAAS19c,OACtCq+c,EAASD,EACJ1+c,EAAI,EAAGA,EAAIg+c,EAAS19c,OAAQN,IAAK,CACtC,IAAI68c,EAASmB,EAASh+c,GACN6D,KAAK+6c,aAAa/B,GACxB9/a,UACNnsB,EAAG6tc,EAAaD,EAAW/jb,OAAQvqB,KAAKwV,IAAIi5b,GAAS37b,QAAQ,IAC7DnS,EAAG4tc,EAAaD,EAAW/jb,OAAOvqB,KAAKyV,IAAIg5b,GAAQ37b,QAAQ,KAE/D27b,GAAUD,IAMlBxB,EAAgBh+c,UAAU2mQ,SAAW,SAAU43M,GAC3C55c,KAAK85c,aAAeF,EAAmBE,aACvC95c,KAAK25c,cAAcC,IAEvBP,EAAgBh+c,UAAUk/c,oBAAsB,SAAUJ,GAGtD,IAAK,IAFDa,EACAh4D,EACK38X,EAAI,EAAGA,EAAI8zb,EAAS19c,OAAQ4pB,IAAK,CAItC,IAAK,IAHD2yb,EAASmB,EAAS9zb,GAElBqkC,GADJswZ,EAAYh7c,KAAK+6c,aAAa/B,IACRtuZ,MACbtiB,EAAI,EAAGA,EAAIsiB,EAAMjuD,OAAQ2rC,IAAK,CAE/BszB,IADAu/Y,EAAUvwZ,EAAMtiB,IACW9kC,GAAI62c,IAC/Bn6c,KAAKk7c,eAAeF,EAAWh7c,KAAK+6c,aAAaE,IAGzD,IAAK,IAAI9+c,EAAI,EAAG8+B,EAAWyvB,EAAMjuD,OAAQN,EAAI8+B,KACrCA,EAAW,GADoC9+B,IAAK,CAIxD,IAAIg/c,EAAOn7c,KAAK+6c,aAAarwZ,EAAMvuD,IAC/Bi/c,EAAQj/c,EAAI,GAAK8+B,EAAYj7B,KAAK+6c,aAAarwZ,EAAM,IAAM1qD,KAAK+6c,aAAcrwZ,EAAMvuD,EAAI,IACxFwlB,EAAS,IAAM+oC,EAAMjuD,OAAS,EAAK4P,KAAKkR,GAAK,IAC7C89b,EAAiB,EAAIr7c,KAAKoob,aAAe/7a,KAAKyV,IAAIH,GACtD3hB,KAAKs7c,iBAAiBH,EAAMC,EAAMC,GAEtC,IAAK,IAAIhza,EAAI,EAAGA,EAAI8xa,EAAS19c,OAAQ4rC,IAAK,CACtC,IAAI4ya,EACCv/Y,IADDu/Y,EAAUd,EAAS9xa,IACS/kC,GAAIonD,IAAUuwZ,EAAQ33c,KAAO01c,EAAO11c,KAChE0/Y,EAAQhjZ,KAAK+6c,aAAaE,GAC1Bj7c,KAAKu7c,eAAeP,EAAWh4D,OAK/Cq2D,EAAgBh+c,UAAUm/c,aAAe,SAAUL,GAE/C,IAAK,IADDqB,EAAU,KACLn1b,EAAI,EAAGA,EAAI8zb,EAAS19c,OAAQ4pB,IAAK,CACtC,IAAI2yb,EAASmB,EAAS9zb,GAElBo1b,GADJD,EAAUx7c,KAAK+6c,aAAa/B,IACN9/a,SACtBuib,EAAQ1uc,GAAKV,KAAK8T,IAAIq7b,EAAQvC,UAAWj5c,KAAK05c,oBAAoB1jc,OAClEylc,EAAQzuc,GAAKX,KAAK8T,IAAIq7b,EAAQtC,UAAWl5c,KAAK05c,oBAAoB3jc,QAClEylc,EAAQvC,UAAY,EACpBuC,EAAQtC,UAAY,EACpBsC,EAAQtib,SAAWuib,IAG3BpC,EAAgBh+c,UAAUo/c,mBAAqB,SAAUN,EAAUN,GAI/D,IAAK,IADDb,EAFA0C,GAAU1lc,MAAO4gB,OAAOC,UAAW9gB,OAAQ6gB,OAAOC,WAClD2kb,EAAU,KAELn1b,EAAI,EAAGA,EAAI8zb,EAAS19c,OAAQ4pB,IAAK,CACtC2yb,EAASmB,EAAS9zb,GAElB,IAAIs1b,GACA5uc,GAFJyuc,EAAUx7c,KAAK+6c,aAAa/B,IAEb9/a,SAASnsB,EAAIisc,EAAOv/Z,WAAWzjC,MAAQ,EAClDhJ,EAAGwuc,EAAQtib,SAASlsB,EAAIgsc,EAAOv/Z,WAAW1jC,OAAS,GAEvD2lc,EAAM1lc,MAAQ3J,KAAK8T,IAAIu7b,EAAM1lc,MAAO2lc,EAAW5uc,GAC/C2uc,EAAM3lc,OAAS1J,KAAK8T,IAAIu7b,EAAM3lc,OAAQ4lc,EAAW3uc,GAErD,IAASqZ,EAAI,EAAGA,EAAI8zb,EAAS19c,OAAQ4pB,IAAK,CACtC2yb,EAASmB,EAAS9zb,IAEds1b,GADJH,EAAUx7c,KAAK+6c,aAAa/B,IACH9/a,UACdnsB,GAAK2uc,EAAM1lc,OAAS6jc,EAAM3E,SAASh8a,SAAW2gb,EAAM3E,SAASh8a,SAASnsB,EAAI,GACrF4uc,EAAW3uc,GAAK0uc,EAAM3lc,QAAU8jc,EAAM3E,SAASh8a,SAAW2gb,EAAM3E,SAASh8a,SAASlsB,EAAI,GACtFwuc,EAAQtib,SAAWyib,EACnBH,EAAQpC,iBAGhBC,EAAgBh+c,UAAU++c,kBAAoB,SAAUD,GAGpD,IAAK,IAFDyB,KAEKx9c,EAAK,EAAGC,EADNC,OAAOhB,KAAK68c,GACS/7c,EAAKC,EAAO5B,OAAQ2B,IAAM,CACtD,IAAIioB,EAAIhoB,EAAOD,GACf,GAAI+7c,EAAS9zb,GAAI,CACb,IAAI2yb,EAASmB,EAAS9zb,GAClB20b,EAAY,IAAIjC,GAAeC,GACnCA,EAAO9D,SAASxjc,IAAMspc,EACtBY,EAAYp3c,KAAKw0c,IAGzB,OAAO4C,GAKXvC,EAAgBh+c,UAAU0/c,aAAe,SAAU/B,GAC/C,OAAOA,EAAO9D,SAASxjc,KAE3B2nc,EAAgBh+c,UAAUkgd,eAAiB,SAAUM,EAAUC,GAC3D,GAAgB,MAAZA,GAAgC,MAAZD,EAAxB,CAGA,IAAIvpa,EAAWtyC,KAAK+7c,cAAcF,EAAS3ib,SAAU4ib,EAAS5ib,UAC1DvX,EAAQ3hB,KAAKg8c,UAAUH,EAAS3ib,SAAU4ib,EAAS5ib,UACnDmib,EAAsC,GAApBr7c,KAAKoob,aACvB91Y,EAAW+oa,GACXr7c,KAAKi8c,UAAU3pa,EAAU+oa,EAAgB15b,EAAOm6b,KAGxDzC,EAAgBh+c,UAAU2gd,UAAY,SAAUp9I,EAAKC,GACjD,IAAIj9S,EAAU,EACVs6b,EAAKr9I,EAAI9xT,EAAI6xT,EAAI7xT,EACjBovc,EAAKt9I,EAAI7xT,EAAI4xT,EAAI5xT,EA6BrB,OA5BW,IAAPkvc,EAEIt6b,EADAu6b,GAAM,EACK,EAAM9vc,KAAKkR,GAAM,EAGlBlR,KAAKkR,GAAK,EAGZ,IAAP4+b,EAEDv6b,EADAs6b,EAAK,EACK7vc,KAAKkR,GAGL,GAIdqE,EAAUvV,KAAK+vc,KAAKD,EAAKD,GACrBA,EAAK,GAAKC,EAAK,EACfv6b,EAAUvV,KAAKkR,GAAKqE,EAEfs6b,EAAK,GAAKC,EAAK,EACpBv6b,EAAUvV,KAAKkR,GAAKqE,EAEfs6b,EAAK,GAAKC,EAAK,IACpBv6b,EAAU,EAAMvV,KAAKkR,GAAKqE,IAG3BA,GAEXy3b,EAAgBh+c,UAAU0gd,cAAgB,SAAUn9I,EAAKC,GACrD,IAAI/kS,EAAI,EACJqkS,EAAKU,EAAI9xT,EAAI6xT,EAAI7xT,EACjBgmD,EAAK8rQ,EAAI7xT,EAAI4xT,EAAI5xT,EACjB+wC,EAAKogR,EAAKA,EAAOprQ,EAAKA,EAI1B,OAHIhV,EAAI,IACJjkB,EAAIztB,KAAKQ,KAAKkxC,IAEXjkB,GAEXu/a,EAAgBh+c,UAAUigd,iBAAmB,SAAUO,EAAUC,EAAUT,GACvE,IAAI/oa,EAAWtyC,KAAK+7c,cAAcF,EAAS3ib,SAAU4ib,EAAS5ib,UAC1DvX,EAAQ3hB,KAAKg8c,UAAUH,EAAS3ib,SAAU4ib,EAAS5ib,UACnDoZ,EAAW+oa,GACXr7c,KAAKi8c,UAAU3pa,EAAU+oa,EAAgB15b,EAAOm6b,IAMxDzC,EAAgBh+c,UAAU0sb,aAAe,SAAUxO,EAAgB9uX,EAAY4xZ,EAAiB3hZ,EAAWjR,EAAQq+X,IAC3F,IAAIw0B,IACVv0B,aAAaxO,EAAgB9uX,EAAY4xZ,EAAiB3hZ,EAAWjR,EAAQq+X,IAE/FuxB,EAAgBh+c,UAAU6/c,eAAiB,SAAUW,EAAUC,GAC3D,IAAIxpa,EAAWtyC,KAAK+7c,cAAcF,EAAS3ib,SAAU4ib,EAAS5ib,UAC1DvX,EAAQ3hB,KAAKg8c,UAAUH,EAAS3ib,SAAU4ib,EAAS5ib,WACnDoZ,EAAWtyC,KAAKoob,cAAgB91Y,EAAWtyC,KAAKoob,eAChDpob,KAAKi8c,UAAU3pa,EAAUtyC,KAAKoob,aAAczma,EAAOm6b,IAG3DzC,EAAgBh+c,UAAU4gd,UAAY,SAAU3pa,EAAUiqa,EAAS56b,EAAOm6b,GACtE,IAAI78b,EAAQ68b,EAASpxZ,MAAMjuD,OACvBA,EAAS61C,EAAWiqa,EACpBz+a,EAAS99B,KAAKqob,cAAgBppa,EAAQA,GAAS5S,KAAKQ,KAAKoS,GAC7D,GAAe,IAAXxiB,EAAc,CACd,IACI+/c,EADY//c,EAASqhC,EAErBjyB,EAAUQ,KAAKwV,IAAIF,GAAS66b,EAC5Bvwc,EAAUI,KAAKyV,IAAIH,GAAS66b,EAChCV,EAAS7C,WAAaptc,EACtBiwc,EAAS5C,WAAajtc,IAGvBotc,KAGPiD,GAAoC,WACpC,SAASA,IACLt8c,KAAKy8c,gBACLz8c,KAAK08c,wBACL18c,KAAK28c,gBACL38c,KAAK48c,eA4aT,OAvaAN,EAAmBjhd,UAAU0sb,aAAe,SAAUxO,EAAgB9uX,EAAY4xZ,EAAiB3hZ,EAAWjR,EAAQq+X,GAClH9nb,KAAK06D,UAAYA,EACjB16D,KAAK0qD,MAAQ6uX,EACbv5a,KAAKyqD,WAAaA,EAClB,IAAIoyZ,EAAgBtjC,EAChBsjC,EAAcpgd,OAAS,IACvBuD,KAAK88c,oBAAsBv0Z,GAAYs0Z,EAAc,KAEzD,IAAK,IAAIz+c,EAAK,EAAG2+c,EAAmBxjC,EAAgBn7a,EAAK2+c,EAAiBtgd,OAAQ2B,IAAM,CACpF,IACI4+c,OAAkB,GACtBA,EAFIz8c,EAAOw8c,EAAiB3+c,IAGZ82c,YAChB8H,EAAgB9H,SAAS+H,UAAY,OACrCj9c,KAAK28c,aAAan4c,KAAKw4c,GAE3B,IAAK,IAAIn6c,EAAK,EAAGgpb,EAAephY,EAAY5nD,EAAKgpb,EAAapvb,OAAQoG,IAAM,CACxE,IACIq6c,OAAuB,GAC3BA,EAFgBrxB,EAAahpb,IAGRqyc,YACrBgI,EAAqBhI,SAAS+H,UAAY,YAC1Cj9c,KAAK28c,aAAan4c,KAAK04c,GAE3Bl9c,KAAKm9c,cAAcn9c,KAAK28c,aAAcN,GAEtC,IAAK,IADDe,EAAcp9c,KAAKg6c,eAAe6C,GAC7B1gd,EAAI,EAAGA,EAAI0gd,EAAcpgd,OAAQN,IAAK,CAC3C,IAAIoE,EAAOs8c,EAAc1gd,GACrBkhd,GAASv1B,EAAS/6a,EAAIqwc,EAAYpnc,OAAS,EAC3CinB,EAASwsB,EAAOxsB,WACpBA,EAEOzwB,KAAOywB,EAAOzwB,MAAQ,EAC7BywB,EAAOxwB,MAAQwwB,EAAOxwB,OAAS,EAC/BwwB,EAAOvwB,IAAMuwB,EAAOvwB,KAAO,EAC3BuwB,EAAOtwB,OAASswB,EAAOtwB,QAAU,EAC7B88C,EAAOxsB,OAAOzwB,OACdywB,EAAOzwB,KAAOi9C,EAAOxsB,OAAOzwB,MAE5Bi9C,EAAOxsB,OAAOvwB,MACduwB,EAAOvwB,IAAM+8C,EAAOxsB,OAAOvwB,KAE/B,IAAIyxT,EAAM59T,EAAK20c,SAASxjc,IAAIwnB,SAASnsB,GAAKxM,EAAKsL,QAAWtL,EAAKk5C,WAAWzjC,MAAQ,GAC9Eonc,EAAYrwc,EAAIswc,EAAQpgb,EAAOzwB,KAC/BumD,EAAMxyD,EAAK20c,SAASxjc,IAAIwnB,SAASlsB,GAAKzM,EAAK0L,QAAW1L,EAAKk5C,WAAW1jC,OAAS,GAAMqnc,EAAYpwc,EAAIiwB,EAAOvwB,IAChHnM,EAAKsL,SAAWsyT,EAChB59T,EAAK0L,SAAW8mD,SACTxyD,EAAK20c,SAEhB,OAAO,GAKXoH,EAAmBjhd,UAAU2+c,eAAiB,SAAUsD,GACpDA,EAASA,EAAOj8c,QAIhB,IAAK,IADDd,EAFAmyB,EAAO,KACPkuX,EAAQ,KAEHzkZ,EAAI,EAAGA,EAAImhd,EAAO7gd,OAAQN,IAAK,CAEpC,IAAI45B,EAAS0lC,GADbl7D,EAAO+8c,EAAOnhd,IAEdu2B,EAAO,IAAI6C,GAAKh1B,EAAK20c,SAASxjc,IAAMnR,EAAK20c,SAASxjc,IAAIwnB,SAASnsB,EAAIgpB,EAAOhpB,EAAGxM,EAAK20c,SAASxjc,IAAMnR,EAAK20c,SAASxjc,IAAIwnB,SAASlsB,EAAI+oB,EAAO/oB,EAAGzM,EAAKk5C,WAAWzjC,MAAOzV,EAAKk5C,WAAW1jC,QAE7K6qY,EADAA,EACQA,EAAM3jW,UAAUvqB,GAGhBA,EAGhB,OAAOkuX,GAEX07D,EAAmBjhd,UAAU8hd,cAAgB,SAAUI,EAAelB,GAClEr8c,KAAKw9c,oBAAoBD,GACzB,IAAI3rN,EAAa2rN,EAAc9gd,OAC/B,GAAIm1P,EAAa,EAAG,CAIhB,IAAK,IAHD6rN,KACA/yZ,KACAgzZ,KACKr1a,EAAI,EAAGA,EAAIk1a,EAAc9gd,OAAQ4rC,IAAK,CAC3C,IAAI2ka,EAAKuQ,EAAcl1a,QACSltC,IAA5B6xc,EAAGkI,SAASyI,cACZ3Q,EAAGkI,SAASyI,aAAc,GAEA,cAA1B3Q,EAAGkI,SAAS+H,WAA8BjQ,EAAGkI,SAASyI,YAGvB,cAA1B3Q,EAAGkI,SAAS+H,UACjBQ,EAAej5c,KAAKwoc,GAGpB0Q,EAAYl5c,KAAKwoc,GANjBtiZ,EAAMlmD,KAAKwoc,GAWnB,IAFAtiZ,EAAQA,EAAMlwC,OAAOkjc,GACrBhzZ,EAAQ+yZ,EAAejjc,OAAOkwC,GACvBknM,EAAa5xP,KAAK49c,iBAAiB59c,KAAK48c,cAE3C,GADA58c,KAAK69c,mBAAmBnzZ,GACC,MAArB1qD,KAAK85c,aAAT,CAGAuC,EAAgBr6M,SAAShiQ,MACzBA,KAAK85c,aAAe,KACpB95c,KAAKy8c,gBACL,IAAK,IAAIr+c,EAAK,EAAGyE,EAAK7C,KAAK08c,qBAAsBt+c,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnDyE,EAAGzE,GACT82c,SAASyI,aAAc,GAGzC39c,KAAK48c,YAAc,KACnB58c,KAAK85c,aAAe,KAExB,OAAO,GAEXwC,EAAmBjhd,UAAUwid,mBAAqB,SAAUnzZ,GACxD,IAAK,IAAIvuD,EAAI,EAAGA,EAAIuuD,EAAMjuD,OAAQN,IAAK,CACnC,IAAIoE,EAAOmqD,EAAMvuD,GACjB,IAAKu/D,GAAmBn7D,EAAK+C,GAAItD,KAAK48c,aAAc,CAC5Cr8c,GACAP,KAAK89c,YAAYv9c,GAErB,SAIZ+7c,EAAmBjhd,UAAUyid,YAAc,SAAUv9c,GACjD,IAAIw9c,EAAYx9c,EACgB,cAA5BA,EAAK20c,SAAS+H,UACdj9c,KAAKg+c,iBAAiBz9c,GAEJ,MAAbw9c,GACD/9c,KAAKi+c,QAAQ19c,EAAM,YACnBP,KAAKi+c,QAAQ19c,EAAM,YACfP,KAAKk+c,yBAAyBH,IAC9B/9c,KAAK85c,cAAiB5E,aACtBl1c,KAAK85c,aAAa5E,SAASiJ,WAAa,GACxCn+c,KAAK85c,aAAa5E,SAASkJ,UAAY,GACvCp+c,KAAKq+c,qBAAqBN,IAG1B/9c,KAAK85c,aAAev5c,IAKpC+7c,EAAmBjhd,UAAUgjd,qBAAuB,SAAUN,GAC1D,IAAIlE,EAAQ75c,KAAK85c,aACZD,EAAM3E,SAASgF,aAChBL,EAAM3E,SAASgF,eAEnB,IAAI35c,EAAOw9c,EACX,GAAY,MAARx9c,GAAgBP,KAAKi+c,QAAQ19c,EAAM,UAAW,CAC9C,IAAI2R,EAAW3R,EAAK+C,GACpB,GAAKtD,KAAKs+c,mBAAmBzE,EAAM3E,SAASgF,WAAY35c,GAKnD,CACD,IAAI44c,EAAYU,EAAM3E,SAASgF,WAAWhoc,GACtCinc,EAAUjE,SAASqJ,QACnBpF,EAAUjE,SAASqJ,OAAQ,EAC3Bv+c,KAAKw+c,sBAAsBrF,GAC3Bn5c,KAAKy+c,iBAAiBV,QAViC,CAC3D,IAAI/E,EAASh5c,KAAK0+c,aAAan+c,GAC/BP,KAAKw+c,sBAAsBxF,GAC3Bh5c,KAAKy+c,iBAAiBV,MAYlCzB,EAAmBjhd,UAAUojd,iBAAmB,SAAUV,GACtD/9c,KAAK2+c,kBAAkBZ,EAAW,WAClC/9c,KAAK2+c,kBAAkBZ,EAAW,aAEtCzB,EAAmBjhd,UAAUsjd,kBAAoB,SAAUZ,EAAWa,GAClE,IAAInsC,KACuB,YAAvBmsC,EACAnsC,EAAQsrC,EAAU1wD,QAEU,aAAvBuxD,IACLnsC,EAAQsrC,EAAU3wD,UAEtB,IAAK,IAAIjxZ,EAAI,EAAGA,EAAIs2a,EAAMh2a,OAAQN,IAAK,CACnC,IAAIwc,EAAO3Y,KAAK06D,UAAU+3W,EAAMt2a,IAChC,GAAI6D,KAAKi+c,QAAQtlc,EAAM,UAAW,CAC9B,IAAIkmc,EAAW7+c,KAAK06D,UAAU/hD,EAAK42B,UAC/Buva,EAAS9+c,KAAK06D,UAAU/hD,EAAK+yY,UACN,YAAvBkzD,GAAgD,MAAZC,GACpCnjZ,GAAmBmjZ,EAASv7c,GAAItD,KAAK0qD,OACrC1qD,KAAKq+c,qBAAqBr+c,KAAK06D,UAAU/hD,EAAK42B,WAElB,aAAvBqva,GAA+C,MAAVE,GAC1CpjZ,GAAmBojZ,EAAOx7c,GAAItD,KAAK0qD,QACnC1qD,KAAKq+c,qBAAqBr+c,KAAK06D,UAAU/hD,EAAK+yY,cAK9D4wD,EAAmBjhd,UAAUmjd,sBAAwB,SAAUrF,GAC3Dn5c,KAAK++c,oBAAoB5F,GACzBn5c,KAAKg/c,qBAAqB7F,IAE9BmD,EAAmBjhd,UAAUijd,mBAAqB,SAAUvhd,EAAKkid,GAE7D,IAAK,IADD3hd,EAAOgB,OAAOhB,KAAKP,GACdZ,EAAI,EAAGA,EAAImB,EAAKb,OAAQN,IAC7B,GAAImB,EAAKnB,KAAO8id,EAAO37c,GACnB,OAAO,EAGf,OAAO,GAEXg5c,EAAmBjhd,UAAUuid,iBAAmB,SAAU7gd,GAEtD,OADWuB,OAAOhB,KAAKP,GACXN,QAEhB6/c,EAAmBjhd,UAAU2jd,qBAAuB,SAAU7F,GAG1D,IAAK,IAFDU,EAAQ75c,KAAK85c,aACbiE,EAAY5E,EACP9wa,EAAI,EAAGA,EAAI01a,EAAU3wD,SAAS3wZ,OAAQ4rC,IAAK,CAChD,IAAI1vB,EAAO3Y,KAAK06D,UAAUqjZ,EAAU3wD,SAAS/kX,IAC7C,IAAK1vB,EAAKu8b,SAASyI,YAAa,CAC5B,IAAIp9c,EAAOP,KAAK06D,UAAU/hD,EAAK+yY,UAC/B,GAAIhwV,GAAmBn7D,EAAK+C,GAAItD,KAAK0qD,QAAkB,MAARnqD,GAAgBA,EAAKu2B,QAAS,CACzE,IAAIoob,OAAiB,EAChBl/c,KAAKs+c,mBAAmBzE,EAAM3E,SAASgF,WAAY35c,GAKpD2+c,EAAiBrF,EAAM3E,SAASgF,WAAW35c,EAAK+C,KAJhD47c,EAAiBl/c,KAAK0+c,aAAan+c,IACpB20c,SAASqJ,OAAQ,EAK/BpF,EAAUjE,SAAS96b,WACpB++b,EAAUjE,SAAS96b,aAElB8kc,EAAehK,SAASp0Y,UACzBo+Y,EAAehK,SAASp0Y,YAE5B9gE,KAAKm/c,QAAQD,EAAehK,SAASp0Y,QAASq4Y,GAC1Cn5c,KAAKo/c,SAASjG,EAAUjE,SAAS96b,SAAU8kc,EAAe57c,IAAM,GAChE61c,EAAUjE,SAAS96b,SAAS5V,KAAK06c,OAMrD5C,EAAmBjhd,UAAU0jd,oBAAsB,SAAU5F,GAGzD,IAAK,IAFDU,EAAQ75c,KAAK85c,aACbiE,EAAY5E,EACP9wa,EAAI,EAAGA,EAAI01a,EAAU1wD,QAAQ5wZ,OAAQ4rC,IAAK,CAC/C,IAAI1vB,EAAO3Y,KAAK06D,UAAUqjZ,EAAU1wD,QAAQhlX,IAC5C,IAAK1vB,EAAKu8b,SAASyI,YAAa,CAC5B,IAAIp9c,EAAOP,KAAK06D,UAAU/hD,EAAK42B,UAC/B,GAAImsB,GAAmBn7D,EAAK+C,GAAItD,KAAK0qD,QAAkB,MAARnqD,GAAgBA,EAAKu2B,QAAS,CACzE,IAAIkib,OAAS,EACRh5c,KAAKs+c,mBAAmBzE,EAAM3E,SAASgF,WAAY35c,GAKpDy4c,EAASa,EAAM3E,SAASgF,WAAW35c,EAAK+C,KAJxC01c,EAASh5c,KAAK0+c,aAAan+c,IACpB20c,SAASqJ,OAAQ,EAKvBpF,EAAUjE,SAASp0Y,UACpBq4Y,EAAUjE,SAASp0Y,YAElBk4Y,EAAO9D,SAAS96b,WACjB4+b,EAAO9D,SAAS96b,aAEpBpa,KAAKm/c,QAAQnG,EAAO9D,SAAS96b,SAAU++b,GACnCn5c,KAAKo/c,SAASjG,EAAUjE,SAASp0Y,QAASk4Y,EAAO11c,IAAM,GACvD61c,EAAUjE,SAASp0Y,QAAQt8D,KAAKw0c,OAMpDsD,EAAmBjhd,UAAU8jd,QAAU,SAAU96W,EAAM9jG,GACnD,IAAI+pU,EAAStqU,KAAKo/c,SAAS/6W,EAAM9jG,EAAK+C,IAClCgnU,GAAU,GAAKA,EAASjmO,EAAK5nG,OAC7B4nG,EAAKimO,GAAU/pU,EAGf8jG,EAAK7/F,KAAKjE,IAGlB+7c,EAAmBjhd,UAAU+jd,SAAW,SAAU/6W,EAAMg7W,GACpD,IAAI/0I,GAAU,EACd,GAAY,MAARjmO,GAA6B,KAAbg7W,EAChB,IAAK,IAAIljd,EAAI,EAAGmjd,EAAUj7W,EAAK5nG,OAAQN,EAAImjd,EAASnjd,IAAK,CACrD,IAAI68c,EAAS30W,EAAKloG,GAClB,GAAwB,oBAAY68c,IAAWqG,EAAU,CACrD/0I,EAASnuU,EACT,MAEC,GAAc,MAAV68c,GAAkBA,EAAO11c,KAAO+7c,EAAU,CAC/C/0I,EAASnuU,EACT,OAIZ,OAAOmuU,GAEXgyI,EAAmBjhd,UAAUqjd,aAAe,SAAUn+c,GAClD,IAAIs5c,EAAQ75c,KAAK85c,aACZD,EAAM3E,SAASgF,aAChBL,EAAM3E,SAASgF,eAEnB,IAAIlB,EAASz4c,EACb,GAAa,MAATs5c,EAAe,CACfA,EAAM3E,SAASgF,WAAWlB,EAAO11c,IAAM01c,EACvC,IAAIuG,EAAav/c,KAAK88c,oBACJ,MAAdyC,GAAsBh/c,EAAK+C,KAAOi8c,EAAWj8c,KAC7CtD,KAAK88c,oBAAsB9D,GAGnC,OAAOA,GAEXsD,EAAmBjhd,UAAU6id,yBAA2B,SAAUlF,GAC9D,IAAIwG,GAAsB,EAU1B,OATaxG,EAAc,QAAEx+b,OAAOw+b,EAAO5rD,UACjC3wZ,OAAS,IACQ,MAAlBu8c,EAAO3rD,SAAqB2rD,EAAO3rD,QAAQ5wZ,OAAS,IACrD+id,EAAsBx/c,KAAKy/c,qBAAqBzG,EAAO3rD,QAAS,cAE9DmyD,GAA4C,MAAnBxG,EAAO5rD,UAAsB4rD,EAAO5rD,SAAS3wZ,OAAS,IACjF+id,EAAsBx/c,KAAKy/c,qBAAqBzG,EAAO5rD,SAAU,YAGlEoyD,GAEXlD,EAAmBjhd,UAAUokd,qBAAuB,SAAUC,EAAsBC,GAEhF,IAAK,IADDH,GAAsB,EACjBrjd,EAAI,EAAGA,EAAIujd,EAAqBjjd,OAAS,EAAGN,IAAK,CACtD,IAAIwc,EAAO3Y,KAAK06D,UAAUglZ,EAAqBvjd,IAC/C,GAAK6D,KAAKi+c,QAAQtlc,EAAM,aAGnBA,EAAKu8b,SAASyI,cAAyC,aAAxBgC,GAAuE,MAAjC3/c,KAAK06D,UAAU/hD,EAAK42B,WAC9D,WAAxBowa,GAAqE,MAAjC3/c,KAAK06D,UAAU/hD,EAAK+yY,YAAqB,CACjF8zD,GAAsB,EACtB,OAGR,OAAOA,GAEXlD,EAAmBjhd,UAAU2id,iBAAmB,SAAUz9c,GACtD,IAAIq/c,EAAWr/c,EACf,GAAgB,MAAZq/c,IAAqBA,EAAS1K,SAASyI,aAAe39c,KAAKi+c,QAAQ19c,EAAM,UAAW,CACpFP,KAAKi+c,QAAQ19c,EAAM,YACnB,IAAIs+c,EAAW7+c,KAAK06D,UAAUklZ,EAASrwa,UACnCuva,EAAS9+c,KAAK06D,UAAUklZ,EAASl0D,UACrB,MAAZmzD,EACA7+c,KAAK89c,YAAYe,GAEF,MAAVC,EACL9+c,KAAK89c,YAAYgB,GAGjB9+c,KAAK85c,aAAev5c,IAIhC+7c,EAAmBjhd,UAAU4id,QAAU,SAAU4B,EAAWC,GACxD,IACIv/c,EAAOs/c,EAMX,MALwB,WAApBC,GAAiCv/c,EAAKu2B,SACjC92B,KAAKs+c,mBAAmBt+c,KAAK48c,YAAar8c,KAC3CP,KAAK48c,YAAYr8c,EAAK+C,IAAM/C,KAG/BA,EAAKu2B,SAKdwlb,EAAmBjhd,UAAUmid,oBAAsB,SAAU9yZ,GAGzD,IAAK,IAFDq1Z,KACAC,KACK35b,EAAI,EAAGA,EAAIqkC,EAAMjuD,OAAQ4pB,IACQ,cAAhCqkC,EAAMrkC,GAAG6ub,SAAS+H,WACpB8C,EAAOv7c,KAAKkmD,EAAMrkC,IAG1B,GAAI05b,EAAOtjd,OAAS,EAGhB,IAFAujd,EAAax7c,KAAKu7c,EAAO,IACzB//c,KAAKy8c,aAAaj4c,KAAKu7c,EAAO,IACvBC,EAAavjd,OAAS,GAAG,CAC5B,IAAIs8C,EAAQina,EAAaA,EAAavjd,OAAS,GAC3C8U,EAAavR,KAAKigd,uBAAuBlna,GAC7C,GAAIxnC,EAAW9U,OAAS,EAAG,CACvB,IAAI4D,EAAQkR,EAAW,GACnB2uc,EAAc3uc,EAAWA,EAAW9U,OAAS,GAC7Ci/D,GAAmBr7D,EAAMiD,GAAItD,KAAKy8c,eAClCyD,EAAYhL,SAASyI,aAAc,EACnC39c,KAAK08c,qBAAqBl4c,KAAK07c,KAG/BF,EAAax7c,KAAKnE,GAClBL,KAAKy8c,aAAah0b,OAAO,EAAG,EAAGpoB,SAInC2/c,EAAarnT,QAK7B2jT,EAAmBjhd,UAAU4kd,uBAAyB,SAAUvzc,GAC5D,IAAI6E,KACJ,GAAI7E,EAAI0gZ,SAAS3wZ,OAAS,EAAG,CACzB,IAAK,IAAIN,EAAI,EAAGA,EAAIuQ,EAAI0gZ,SAAS3wZ,OAAQN,IAAK,CAC1C,IAAIgkd,EAAMngd,KAAK06D,UAAUhuD,EAAI0gZ,SAASjxZ,IACtC,IAAKu/D,GAAmBykZ,EAAI78c,GAAItD,KAAKy8c,cAAe,CAChD,IAAIqC,EAAS9+c,KAAK06D,UAAUylZ,EAAIz0D,UAMhC,OALc,MAAVozD,GACAvtc,EAAW/M,KAAKs6c,GAEpBvtc,EAAW/M,KAAK27c,GAChBngd,KAAKy8c,aAAah0b,OAAO,EAAG,EAAG03b,GACxB5uc,GAGf,OAAOA,EAEX,OAAOA,GAEJ+qc,KuXhtBP8D,GAAyC,WAKzC,SAASA,KAyBT,OAjBAA,EAAwB/kd,UAAUiX,QAAU,aAQ5C8tc,EAAwB/kd,UAAU0kC,cAAgB,WAI9C,MAAO,2BAEXqgb,EAAwB/kd,UAAU2mQ,SAAW,SAAUt3M,EAAOgQ,EAAWjR,EAAQq+X,IAC7E,IAAIu4B,IAAyBr+M,SAASt3M,EAAOgQ,EAAWjR,EAAQq+X,IAE7Ds4B,KAMPC,GAAwC,WACxC,SAASA,IACLrgd,KAAK06D,aACL16D,KAAKsgd,eAAiB,IAAIC,GAo1B9B,OA/0BAF,EAAuBhld,UAAUmld,aAAe,SAAUjgd,EAAMvD,EAAO+P,EAAGC,EAAGgJ,EAAOD,GAMhF,OAHI/Y,MAAOA,EAAOyjd,UAFD1zc,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOA,EAAOD,OAAQA,GAEbghB,KAAM/5B,EAAO+id,QAAQ,EACvD1yD,QAAS9sZ,EAAK8sZ,QAAQhsZ,QAAS+rZ,SAAU7sZ,EAAK6sZ,SAAS/rZ,UAQ/Dg/c,EAAuBhld,UAAUqld,SAAW,SAAUngd,GAClD,IAAIkya,KACJ,GAAIlya,EAAM,CACN,IAAK,IAAIpE,EAAI,EAAGoE,EAAK8sZ,QAAQ5wZ,OAAS,GAAKN,EAAIoE,EAAK8sZ,QAAQ5wZ,OAAQN,IAChEs2a,EAAMjua,KAAKxE,KAAK06D,UAAUn6D,EAAK8sZ,QAAQlxZ,KAE3C,IAASA,EAAI,EAAGoE,EAAK6sZ,SAAS3wZ,OAAS,GAAKN,EAAIoE,EAAK6sZ,SAAS3wZ,OAAQN,IAClEs2a,EAAMjua,KAAKxE,KAAK06D,UAAUn6D,EAAK6sZ,SAASjxZ,KAGhD,OAAOs2a,GAKX4tC,EAAuBhld,UAAUsld,UAAY,SAAUC,GAInD,IAAK,IAHDC,KACAC,EAAO,KACPC,GAAW,IACN3id,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKsjd,GAAWxid,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAM/D,IAAK,IAJDomE,EAAOo8Y,EADH/9c,EAAGzE,IAEP4id,EAAQhhd,KAAK0gd,SAASl8Y,GACtB4oV,EAAW,EACXC,EAAU,EACLhnY,EAAI,EAAGA,EAAI26b,EAAMvkd,OAAQ4pB,IAAK,CACzBrmB,KAAKihd,mBAAmBD,EAAM36b,IAAI,GACpC0Q,OAASytC,EAAKztC,KAClBq2X,IAGAC,IAGQ,IAAZA,GAAiBD,EAAW,GAC5ByzD,EAAMr8c,KAAKggE,GAEf,IAAIwa,EAAOouU,EAAWC,EAClBruU,EAAO+hY,IACPA,EAAU/hY,EACV8hY,EAAOt8Y,GAMf,OAHqB,IAAjBq8Y,EAAMpkd,QAAwB,MAARqkd,GACtBD,EAAMr8c,KAAKs8c,GAERD,GAMXR,EAAuBhld,UAAU4ld,mBAAqB,SAAUtoc,EAAMpc,GAClE,IAAI2kd,EAAgBlhd,KAAK06D,UAAU/hD,EAAK+yY,UACpCnvZ,IACA2kd,EAAgBlhd,KAAK06D,UAAU/hD,EAAK42B,WAExC,IAAK,IAAIpzC,EAAI,EAAGA,EAAI6D,KAAK4gd,SAASnkd,OAAQN,IACtC,GAAI6D,KAAK4gd,SAASzkd,GAAG46B,OAASmqb,EAAc59c,GACxC,OAAOtD,KAAK4gd,SAASzkd,GAG7B,OAAO,MAMXkkd,EAAuBhld,UAAU8ld,SAAW,SAAUpB,EAAQqB,EAAUzoc,EAAM0oc,EAAaC,EAAmBC,GAC1G,GAAc,MAAVxB,EAAgB,CAChB,IAAIyB,EAAWzB,EAAOhpb,KACtB,GAAuB,MAAlBwqb,GAA4D,MAA5BA,EAAeC,GAAoB,CACvC,MAAzBH,EAAYG,KACZH,EAAYG,GAAYzB,GAEN,MAAlBwB,UACOA,EAAeC,GAI1B,IAAK,IAFD/uC,EAAQzya,KAAK0gd,SAASX,GACtB0B,KACKtld,EAAI,EAAGA,EAAIs2a,EAAMh2a,OAAQN,IAC9Bsld,EAAatld,GAAK6D,KAAKihd,mBAAmBxuC,EAAMt2a,IAAI,KAAU4jd,EAElE,IAAS5jd,EAAI,EAAGA,EAAIs2a,EAAMh2a,OAAQN,IAC9B,IAAKild,GAAYK,EAAatld,GAAI,CAG9B,IAAK,IAFD8sC,EAAOjpC,KAAKihd,mBAAmBxuC,EAAMt2a,IAAKsld,EAAatld,IACvDuld,EAAW,EACNj+b,EAAI,EAAGA,EAAIgvZ,EAAMh2a,OAAQgnB,IAC9B,GAAIA,IAAMtnB,EAAV,CAII,IAAIwld,EAAYF,EAAah+b,GACbzjB,KAAKihd,mBAAmBxuC,EAAMhvZ,IAAKk+b,KACjC14a,IACV04a,EACAD,IAGAA,KAKZA,GAAY,IACZL,EAAcrhd,KAAKmhd,SAASl4a,EAAMm4a,EAAU3uC,EAAMt2a,GAAIkld,EAAaC,EAAmBC,UAMlG,GAA6B,MAAzBF,EAAYG,GAEZ,IAASrld,EAAI,EAAGA,EAAImld,EAAkB7kd,OAAQN,IAAK,CAC/C,IAAI6iH,EAAOsiW,EAAkBnld,GAC7B,GAAsB,MAAlB6iH,EAAKwiW,GAAmB,CACxB,IAAK,IAAIpjd,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0hH,GAAO5gH,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC3D,IAAIf,EAAMwF,EAAGzE,GACbijd,EAAYhkd,GAAO2hH,EAAK3hH,GAI5B,OADAikd,EAAkB74b,OAAOtsB,EAAG,GACrBkld,IAM3B,OAAOA,GAKXhB,EAAuBhld,UAAU2+c,eAAiB,SAAUtvZ,GACxDA,EAAQA,EAAMrpD,QAGd,IAAK,IAFDqxB,EAAO,KACPkuX,EAAQ,KACHzkZ,EAAI,EAAGA,EAAIuuD,EAAMjuD,OAAQN,IAE9B,GADAu2B,EAAOg4B,EAAMvuD,GAAGskd,SACZ7/D,EAAO,CACP,IAAIn0Y,EAAQJ,KAAKC,IAAIs0Y,EAAM7zY,EAAI6zY,EAAM5qY,MAAO0c,EAAK3lB,EAAI2lB,EAAK1c,OACtDrJ,EAASN,KAAKC,IAAIs0Y,EAAM5zY,EAAI4zY,EAAM7qY,OAAQ2c,EAAK1lB,EAAI0lB,EAAK3c,QAC5D6qY,EAAM7zY,EAAIV,KAAK8T,IAAIygY,EAAM7zY,EAAG2lB,EAAK3lB,GACjC6zY,EAAM5zY,EAAIX,KAAK8T,IAAIygY,EAAM5zY,EAAG0lB,EAAK1lB,GACjC4zY,EAAM5qY,MAAQvJ,EAAQm0Y,EAAM7zY,EAC5B6zY,EAAM7qY,OAASpJ,EAASi0Y,EAAM5zY,OAG9B4zY,GAAU7zY,EAAG2lB,EAAK3lB,EAAGC,EAAG0lB,EAAK1lB,EAAGgJ,MAAO0c,EAAK1c,MAAOD,OAAQ2c,EAAK3c,QAGxE,OAAO6qY,GAMXy/D,EAAuBhld,UAAU2mQ,SAAW,SAAUt3M,EAAOgQ,EAAW41Y,EAAYxoB,GAChF9nb,KAAK06D,UAAYA,EACjB,IAAIjR,GACAqnZ,kBAAmBR,EAAWQ,kBAAmBC,gBAAiBT,EAAWS,gBAC7En4a,YAAa03a,EAAW13a,YAAaq2S,QAASqhI,EAAWrza,OAAOzwB,KAAM2iU,QAASmhI,EAAWrza,OAAOvwB,KAE1E,gBAAvB+8C,EAAO7wB,YACP6wB,EAAO0lR,SAAWmhI,EAAWrza,OAAOvwB,IAER,gBAAvB+8C,EAAO7wB,cACZ6wB,EAAOwlR,SAAWqhI,EAAWrza,OAAOzwB,MAExCxM,KAAK4gd,YAEL,IAAK,IADDgB,KACKzld,EAAI,EAAGA,EAAIuuD,EAAMjuD,OAAQN,IAAK,CACnC,IAAIoE,EAAOP,KAAKwgd,aAAa91Z,EAAMvuD,GAAIuuD,EAAMvuD,GAAGmH,GAAI,EAAG,EAAGonD,EAAMvuD,GAAGs9C,WAAWzjC,MAAO00C,EAAMvuD,GAAGs9C,WAAW1jC,QACzG/V,KAAK4gd,SAASp8c,KAAKjE,GACnBqhd,EAAgBrhd,EAAKw2B,MAAQx2B,EAEjC,IACIshd,EADAP,KAEJO,EAAiB7hd,KAAK2gd,UAAUiB,GAChC,IAASzld,EAAI,EAAGA,EAAI0ld,EAAepld,OAAQN,IAAK,CAC5C,IAAI2ld,KACJR,EAAkB98c,KAAKs9c,GACvB9hd,KAAKmhd,SAASU,EAAe1ld,IAAI,EAAM,KAAM2ld,EAAWR,EAAmBM,GAG1E,IADDl0N,GAAUuhF,QAAS,EAAGE,QAAS,GACnC,IAAShzU,EAAI,EAAGA,EAAImld,EAAkB7kd,OAAQN,IAAK,CAC3C2ld,EAAYR,EAAkBnld,GAElC,IAAK,IADDmoK,KACKlmK,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKwkd,GAAY1jd,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAChE,IAAIf,EAAMwF,EAAGzE,GACbkmK,EAAI9/J,KAAKs9c,EAAUzkd,IAEvB,IAAI8uB,EAAQ,IAAI41b,GAAiB/hd,KAAMskK,EAAKu9S,EAAgBp4Z,GAC5DzpD,KAAKgid,WAAW71b,GAChBnsB,KAAKiid,cAAc91b,GACnBnsB,KAAKkid,cAAc/1b,GACnBuhO,EAAQ1tP,KAAKmid,eAAeh2b,EAAOuhO,EAAMuhF,QAASvhF,EAAMyhF,SAIvD,IAFDiuI,EAAcp9c,KAAKg6c,eAAeh6c,KAAK4gd,UACvCvD,GAASv1B,EAAS/6a,EAAIqwc,EAAYpnc,OAAS,EAC/C,IAAS7Z,EAAI,EAAGA,EAAI6D,KAAK4gd,SAASnkd,OAAQN,IAAK,CAC3C,IAAIimd,EAASpid,KAAK4gd,SAASzkd,GAC3B,GAAIimd,EAAQ,CACR,IAAIC,EAAQrid,KAAK06D,UAAU0nZ,EAAOrrb,MAClCsrb,EAAMx2c,QAAU,EAChBw2c,EAAMp2c,QAAU,EAEhB,IAAIkyT,EAAMikJ,EAAO3B,SAAS1zc,GAAKs1c,EAAMx2c,QAAWw2c,EAAM5oa,WAAWzjC,MAAQ,GAAOyzC,EAAOwlR,QACnFl8Q,EAAMqvZ,EAAO3B,SAASzzc,GAAKq1c,EAAMp2c,QAAWo2c,EAAM5oa,WAAW1jC,OAAS,GAAO0zC,EAAO0lR,QACpFpiU,EAAIoxT,EACJnxT,EAAI+lD,EACmB,gBAAvBtJ,EAAO7wB,YACP5rB,EAAIowc,EAAYrnc,OAASg9C,EAEG,gBAAvBtJ,EAAO7wB,cACZ7rB,EAAIqwc,EAAYpnc,MAAQmoT,GAE5BpxT,GAAKswc,EACLgF,EAAMx2c,SAAWkB,EAAIs1c,EAAMx2c,QAC3Bw2c,EAAMp2c,SAAWe,EAAIq1c,EAAMp2c,WAOvCo0c,EAAuBhld,UAAU8md,eAAiB,SAAUh2b,EAAO8iT,EAASE,GACxE,IAAIgzI,EAAiBnid,KAAKsid,qBAAqBrzI,EAASE,EAAS7uU,OAAQ6rB,GAIzE,OAHAg2b,EAAeh2b,MAAQA,EACvBg2b,EAAeI,gBAAkB,KACjCvid,KAAKwid,sBAAsBL,IAEvBlzI,QAASkzI,EAAelzI,QAAU9iT,EAAMs9B,OAAOqnZ,kBAC/C3hI,QAASgzI,EAAehzI,QAAUhjT,EAAMs9B,OAAOsnZ,kBAMvDsP,EAAuBhld,UAAUind,qBAAuB,SAAUrzI,EAASE,EAAS7uU,EAAQ6rB,GACxF,IAAIs2b,KAaJ,MAZiC,gBAA7Bt2b,EAAMs9B,OAAO7wB,aAA8D,gBAA7BzM,EAAMs9B,OAAO7wB,aAC3D6pb,EAAgB3R,kBAAoB3kb,EAAMs9B,OAAOqnZ,kBACjD2R,EAAgB1R,gBAAkB5kb,EAAMs9B,OAAOsnZ,kBAG/C0R,EAAgB3R,kBAAoB3kb,EAAMs9B,OAAOsnZ,gBACjD0R,EAAgB1R,gBAAkB5kb,EAAMs9B,OAAOqnZ,mBAEnD2R,EAAgB7pb,YAAc,QAE9B6pb,EAAgBxzI,QAAUwzI,EAAgBxzI,QAAUA,EACpDwzI,EAAgBtzI,QAAUszI,EAAgBtzI,QAAUA,EAC7CszI,GAKXpC,EAAuBhld,UAAUqnd,oBAAsB,SAAUD,EAAiB5I,EAAO1tb,GACrF,IAAI81B,GAAe,EAC8B,gBAA7Cwga,EAAgBt2b,MAAMs9B,OAAO7wB,aAA8E,gBAA7C6pb,EAAgBt2b,MAAMs9B,OAAO7wB,cAC3FqpB,GAAe,GAEnB,IAAIt2C,GAAU82c,EAAgB1R,gBAC1B4R,EAAsB,EAC1BF,EAAgBG,aAChBH,EAAgBI,cAChB,IAAK,IAAIC,EAAY32b,EAAM42b,QAASD,GAAa,EAAGA,IAAa,CAI7D,IAAK,IAHDE,EAAc,EACdtzN,EAAOvjO,EAAM82b,MAAMH,GACnBI,EAAcjha,EAAewga,EAAgBtzI,QAAUszI,EAAgBxzI,QAClE9yU,EAAI,EAAGA,EAAIuzP,EAAKjzP,OAAQN,IAAK,CAClC,IAAIoE,EAAOmvP,EAAKvzP,GAChB,GAAI6D,KAAKsgd,eAAe6C,SAAS5id,GAAO,CACpC,IAAIw/c,EAASx/c,EACb,GAAIw/c,EAAOv7Y,OAASu7Y,EAAOv7Y,KAAK6oV,SAAW0yD,EAAOv7Y,KAAK4oV,UAAW,CAC9D,IAAIrwZ,EAAMiD,KAAK06D,UAAUqlZ,EAAOv7Y,KAAKztC,MACrCgpb,EAAO/pc,MAAQjZ,EAAI08C,WAAWzjC,MAC9B+pc,EAAOhqc,OAAShZ,EAAI08C,WAAW1jC,OAC/Bitc,EAAc32c,KAAKC,IAAI02c,EAAc/ga,EAAe89Z,EAAO/pc,MAAQ+pc,EAAOhqc,cAI9E,GAAIxV,EAAM,CACN,IAAIoY,EAAOpY,EACP6id,EAAW,EACG,MAAdzqc,EAAK85Z,QACL2wC,EAAWzqc,EAAK85Z,MAAMh2a,QAE1B8D,EAAKyV,MAAyB,IAAhBotc,EAAW,GAG7Bnha,IACK1hD,EAAKwV,SACNxV,EAAKwV,OAAS,IAItBmtc,IAAgBjha,EAAe1hD,EAAKwV,OAASxV,EAAKyV,OAAS,EAC3DhW,KAAKqjd,MAAM9id,EAAMuid,EAAWI,IAAajha,GACzCjiD,KAAKsjd,gBAAgB/id,EAAMuid,EAAWI,IACtCA,IAAiBjha,EAAe1hD,EAAKwV,OAASxV,EAAKyV,OAAS,EAAOysc,EAAgB3R,mBACjE2R,EAAgBF,kBAC9BE,EAAgBF,gBAAkBW,EAClCT,EAAgBc,WAAaT,GAEjCL,EAAgBG,UAAUE,GAAaI,EAE3CT,EAAgBI,WAAWC,GAAan3c,EACxC,IAAI63c,EAAqBR,EAAc,EAAML,EAAsB,EAAMF,EAAgB1R,gBACzF4R,EAAsBK,EACc,UAAhCP,EAAgB7pb,aAA2D,SAAhC6pb,EAAgB7pb,YAC3DjtB,GAAU63c,EAGV73c,GAAU63c,EAEd,IAASrnd,EAAI,EAAGA,EAAIuzP,EAAKjzP,OAAQN,IAAK,CAClC,IAAIqoE,EAAOkrL,EAAKvzP,GAChB6D,KAAKqjd,MAAM7+Y,EAAMs+Y,EAAWn3c,GAAQs2C,MAQhDo+Z,EAAuBhld,UAAUiod,gBAAkB,SAAU/id,EAAM2qE,EAAOluE,GAClEgD,KAAKsgd,eAAe6C,SAAS5id,GAC7BA,EAAK84B,KAAK,GAAKr8B,EAGfuD,EAAK84B,KAAK6xC,EAAQ3qE,EAAKkjd,QAAU,GAAKzmd,GAO9Cqjd,EAAuBhld,UAAUgod,MAAQ,SAAU9id,EAAM2qE,EAAOluE,EAAO0md,GAC/Dnjd,GAAQA,EAAKikE,OACTjkE,EAAKikE,KAAK6oV,SAAW9sZ,EAAKikE,KAAK4oV,SAC3Bs2D,EACAnjd,EAAKyM,EAAE,GAAKhQ,EAGZuD,EAAKwM,EAAE,GAAK/P,EAIZ0md,EACAnjd,EAAKyM,EAAEk+D,EAAQ3qE,EAAKkjd,QAAU,GAAKzmd,EAGnCuD,EAAKwM,EAAEm+D,EAAQ3qE,EAAKkjd,QAAU,GAAKzmd,IAQnDqjd,EAAuBhld,UAAUsod,gBAAkB,SAAUC,EAAOd,EAAWjJ,EAAO1tb,GAClF,IAAI81B,GAAe,EACoB,gBAAnC2ha,EAAMz3b,MAAMs9B,OAAO7wB,aAAoE,gBAAnCgrb,EAAMz3b,MAAMs9B,OAAO7wB,cACvEqpB,GAAe,GAKnB,IAAK,IAHDytM,EAAOvjO,EAAM82b,MAAMH,GACnBe,EAAY,EACZX,GAAejha,EAAe2ha,EAAMz0I,QAAUy0I,EAAM30I,UAAY20I,EAAMrB,gBAAkBqB,EAAMhB,UAAUE,IAAc,EACjH3md,EAAI,EAAGA,EAAIuzP,EAAKjzP,OAAQN,IAAK,CAClC,IAAIoE,EAAOmvP,EAAKvzP,GAChB,GAAI6D,KAAKsgd,eAAe6C,SAAS5id,GAAO,CACpC,IAAIxD,EAAMiD,KAAK06D,UAAUn6D,EAAKikE,KAAKztC,MACnCx2B,EAAKyV,MAAQjZ,EAAI08C,WAAWzjC,MAC5BzV,EAAKwV,OAAShZ,EAAI08C,WAAW1jC,OAC7B8tc,EAAYx3c,KAAKC,IAAIu3c,EAAWtjd,EAAKwV,YAEpC,CACD,IAAI4C,EAAOpY,EACP6id,EAAW,EACG,MAAdzqc,EAAK85Z,QACL2wC,EAAWzqc,EAAK85Z,MAAMh2a,QAEtBwlD,EACA1hD,EAAKwV,OAA0B,IAAhBqtc,EAAW,GAG1B7id,EAAKyV,MAAyB,IAAhBotc,EAAW,GAGjC,IAAIj0b,GAAQ8yB,EAAe1hD,EAAKwV,OAASxV,EAAKyV,OAAS,EACvDktc,GAAe/zb,EACfnvB,KAAKqjd,MAAM9id,EAAMuid,EAAWI,IAAajha,GACzCjiD,KAAKsjd,gBAAgB/id,EAAMuid,EAAWI,GACtCA,GAAgB/zb,EAAOy0b,EAAM9S,oBAMrCuP,EAAuBhld,UAAUyod,cAAgB,SAAUrB,EAAiBsB,EAAQ53b,GAChFnsB,KAAK0id,oBAAoBD,EAAiBsB,EAAQ53b,GAElD,IAAK,IAAIhwB,EAAIsmd,EAAgBc,WAAYpnd,GAAK,EAAGA,IACzCA,EAAIgwB,EAAM42b,SACV/id,KAAK2jd,gBAAgBlB,EAAiBtmd,EAAG4nd,EAAQ53b,GAGzD,IAAShwB,EAAIsmd,EAAgBc,WAAa,EAAGpnd,GAAKgwB,EAAM42b,QAAS5md,IACzDA,EAAI,GACJ6D,KAAK2jd,gBAAgBlB,EAAiBtmd,EAAG4nd,EAAQ53b,IAQ7Dk0b,EAAuBhld,UAAU2od,WAAa,SAAUzjd,EAAM0jd,GAE1D,GAAiB,MAAbA,GAAsC,MAAjB1jd,EAAK2jd,UAA0C,MAAtBD,EAAUC,UACrD3jd,EAAK2jd,SAASznd,OAASwnd,EAAUC,SAASznd,OAAQ,CACrD,GAAI8D,EAAK2jd,WAAaD,EAAUC,SAC5B,OAAO,EAEX,GAAqB,MAAjB3jd,EAAK2jd,UAAqC,MAAjB3jd,EAAK2jd,SAC9B,OAAO,EAEX,IAAK,IAAI/nd,EAAI,EAAGA,EAAIoE,EAAK2jd,SAASznd,OAAQN,IACtC,GAAIoE,EAAK2jd,SAAS/nd,KAAO8nd,EAAUC,SAAS/nd,GACxC,OAAO,EAGf,OAAO,EAEX,OAAO,GAKXkkd,EAAuBhld,UAAU8od,mBAAqB,SAAU3/Y,EAAM4/Y,GAClE,IAAID,KAKJ,OAJAA,EAAmB3/Y,KAAOA,GAAc,KACxC2/Y,EAAmBC,cAAgBA,GAAgC,EACnED,EAAmBxN,SAAU,EAC7BwN,EAAmBE,UAAY,KACxBF,GAKX9D,EAAuBhld,UAAUipd,QAAU,SAAU7B,EAAiBt2b,GAIlE,IAAK,IAHDo4b,KACArtb,GAAQA,QACRw4N,KACKvzP,EAAI,EAAGA,GAAKgwB,EAAM42b,QAAS5md,IAAK,CACrCuzP,EAAKvzP,GAAKgwB,EAAM82b,MAAM9md,GACtB,IAAK,IAAIsnB,EAAI,EAAGA,EAAIisO,EAAKvzP,GAAGM,OAAQgnB,IAAK,CACrC,IAAIljB,EAAOmvP,EAAKvzP,GAAGsnB,GACf+gc,EAAcxkd,KAAKmkd,mBAAmB5jd,EAAMpE,GAChDqod,EAAYH,UAAY5gc,EACxB+gc,EAAY7N,SAAU,EACtB4N,EAAS//c,KAAKggd,GACdr4b,EAAMs4b,uBAAuBvtb,EAAK32B,EAAMikd,GAAa,IAM7D,IAHA,IAAIE,EAA6B,GAAlBH,EAAS9nd,OACpBwiB,EAAQ,EAELslc,EAAS9nd,OAAS,GAAKwiB,GAASylc,GAAU,CAC7C,IAAIC,EAAcJ,EAASrlY,QACvB1a,EAAOmgZ,EAAYngZ,KACnBs+Y,EAAY6B,EAAYP,cACxBC,EAAYM,EAAYN,UACxBO,EAA0B5kd,KAAKsgd,eAAeuE,yBAAyBrgZ,EAAMs+Y,GAC7EgC,EAA8B9kd,KAAKsgd,eAAeuE,yBAAyBrgZ,EAAMs+Y,GAAW,GAC5FiC,EAAqBH,EAAwBnod,OAC7Cuod,EAAqBF,EAA4Brod,OACjDwod,EAAkBjld,KAAKkld,aAAazC,EAAiBmC,EAAyB9B,EAAY,GAC1FqC,EAAsBnld,KAAKkld,aAAazC,EAAiBqC,EAA6BhC,EAAY,GAClGsC,EAAyBL,EAAqBC,EAC9CnkN,EAAkB7gQ,KAAKsgd,eAAe+E,gBAAgB7gZ,EAAMs+Y,GAC5DwC,EAAazkN,EACbukN,EAAyB,IACzBE,GAAcL,EAAkBF,EAAqBI,EAAsBH,GAAsBI,GAErG,IAAInW,GAAkB,EAClBzkc,OAAYrP,EAChB,GAAImqd,EAAazkN,EApBL,EAqBR,GAAkB,IAAdwjN,EACA75c,EAAY86c,EACZrW,GAAkB,MAEjB,CACD,IAAIsW,EAAW71N,EAAKozN,GAAWuB,EAAY,GACvC3iQ,EAAY1hN,KAAKsgd,eAAe+E,gBAAgBE,EAAUzC,IAC9DphQ,EAAYA,EAAY6jQ,EAASvvc,MAAQ,EAAIysc,EAAgB+C,iBAAmBhhZ,EAAKxuD,MAAQ,GAC7Esvc,GACZ96c,EAAY86c,EACZrW,GAAkB,GAEbvtP,EAAY1hN,KAAKsgd,eAAe+E,gBAAgB7gZ,EAAMs+Y,GAjC3D,IAkCAt4c,EAAYk3M,EACZutP,GAAkB,QAIzB,GAAIqW,EAAazkN,EAvCV,EAuCuC,CAE/C,GAAIwjN,IADW30N,EAAKozN,GAAWrmd,OACF,EACzB+N,EAAY86c,EACZrW,GAAkB,MAEjB,CACD,IAAIwW,EAAY/1N,EAAKozN,GAAWuB,EAAY,GACxC1iQ,EAAa3hN,KAAKsgd,eAAe+E,gBAAgBI,EAAW3C,IAChEnhQ,EAAaA,EAAa8jQ,EAAUzvc,MAAQ,EAAIysc,EAAgB+C,iBAAmBhhZ,EAAKxuD,MAAQ,GAC/Esvc,GACb96c,EAAY86c,EACZrW,GAAkB,GAEbttP,EAAa3hN,KAAKsgd,eAAe+E,gBAAgB7gZ,EAAMs+Y,GArD5D,IAsDAt4c,EAAYm3M,EACZstP,GAAkB,IAI1BA,IACAjvc,KAAKsjd,gBAAgB9+Y,EAAMs+Y,EAAWt4c,GAEtCxK,KAAK0ld,eAAenB,EAAUrtb,EAAK0tb,EAAyBz4b,GAC5DnsB,KAAK0ld,eAAenB,EAAUrtb,EAAK4tb,EAA6B34b,IAEhEnsB,KAAKsgd,eAAe6C,SAASwB,EAAYngZ,QACzCmgZ,EAAYhO,SAAU,GAE1B13b,MAMRohc,EAAuBhld,UAAUqqd,eAAiB,SAAUnB,EAAUrtb,EAAK4Q,EAAY3b,GACnF,IAAK,IAAIhwB,EAAI,EAAGA,EAAI2rC,EAAWrrC,OAAQN,IAAK,CACxC,IAAIwpd,EAAgB79a,EAAW3rC,GAC3Bypd,EAAuBz5b,EAAM05b,uBAAuB3ub,EAAKyub,GACjC,MAAxBC,IACqC,IAAjCA,EAAqBjP,UACrBiP,EAAqBjP,SAAU,EAC/B4N,EAAS//c,KAAKohd,MAQ9BvF,EAAuBhld,UAAU6pd,aAAe,SAAUzC,EAAiBqD,EAAgBhD,GACvF,GAA8B,IAA1BgD,EAAerpd,OACf,OAAO,EAGX,IAAK,IADDspd,KACK5pd,EAAI,EAAGA,EAAI2pd,EAAerpd,OAAQN,IACvC4pd,EAAa5pd,GAAK6D,KAAKsgd,eAAe+E,gBAAgBS,EAAe3pd,GAAI2md,GAK7E,GAHAiD,EAAa5ub,KAAK,SAAUmkB,EAAGhe,GAC3B,OAAOge,EAAIhe,IAEXwob,EAAerpd,OAAS,GAAM,EAC9B,OAAOspd,EAAa15c,KAAKkT,MAAMumc,EAAerpd,OAAS,IAGvD,IAAIupd,EAAcF,EAAerpd,OAAS,EAG1C,OAFiBspd,EAAaC,EAAc,GAC1BD,EAAaC,IACM,GAM7C3F,EAAuBhld,UAAUmnd,sBAAwB,SAAUC,GAC/D,IAAIxga,GAAe,EAC8B,gBAA7Cwga,EAAgBt2b,MAAMs9B,OAAO7wB,aAA8E,gBAA7C6pb,EAAgBt2b,MAAMs9B,OAAO7wB,cAC3FqpB,GAAe,GAEnBwga,EAAgBwD,kBAChB,IAAI95b,EAAQs2b,EAAgBt2b,MAC5B81B,EAAewga,EAAgByD,cAAgB,EAAMzD,EAAgB0D,cAAgB,EACrFnmd,KAAK8jd,cAAcrB,GAAmBt2b,MAAOA,GAASA,GACtDnsB,KAAKskd,QAAQ7B,EAAiBt2b,GAC9B,IAAIi6b,EAAkB,IACjB3D,EAAgB4D,gBACjB5D,EAAgB4D,cAAgB,GAEpC,IAAK,IAAIlqd,EAAI,EAAGA,EAAIsmd,EAAgB4D,cAAelqd,IAAK,CAGpD,IAAK8lD,EAAewga,EAAgByD,cAAgBzD,EAAgB0D,eAAiBC,EAAiB,CAClG,IAAK,IAAI3ic,EAAI,EAAGA,EAAI0I,EAAM82b,MAAMxmd,OAAQgnB,IAEpC,IAAK,IADDisO,EAAOvjO,EAAM82b,MAAMx/b,GACd4C,EAAI,EAAGA,EAAIqpO,EAAKjzP,OAAQ4pB,IAAK,CAClC,IAAIm+C,EAAOkrL,EAAKrpO,GAChBrmB,KAAKqjd,MAAM7+Y,EAAM/gD,EAAGzjB,KAAKsgd,eAAe+E,gBAAgB7gZ,EAAM/gD,KAAIw+B,GAG1Emka,EAAkBnka,EAAewga,EAAgByD,cAAgBzD,EAAgB0D,cAErFlka,EAAewga,EAAgByD,cAAgB,EAAIzD,EAAgB0D,cAAgB,EAEvFnmd,KAAKsmd,iBAAiB7D,EAAiBt2b,IAK3Ck0b,EAAuBhld,UAAUird,iBAAmB,SAAU7D,EAAiBt2b,GAE3E,IAAK,IADDy0b,EAAW5gd,KAAKumd,UAAUp6b,EAAMq6b,cAC3Brqd,EAAI,EAAGA,EAAIykd,EAASnkd,OAAQN,IACjC6D,KAAKymd,kBAAkBhE,EAAiB7B,EAASzkd,KAMzDkkd,EAAuBhld,UAAUqrd,4BAA8B,SAAUjE,EAAiBj+Y,EAAMz3D,EAAGC,GACnFy1c,EAAgBt2b,MAA5B,IACIs0b,EAAWj8Y,EAAKi8Y,SAChB1hd,EAAS,KAOb,OANgB,MAAZ0hd,IACA1hd,GAAWgO,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOyqc,EAASzqc,MAAOD,OAAQ0qc,EAAS1qc,QAC3D0qc,EAAS1zc,IAAMA,GAAK0zc,EAASzzc,IAAMA,IACnCw3D,EAAKi8Y,SAAW1hd,IAGjBA,GAKXshd,EAAuBhld,UAAUord,kBAAoB,SAAUhE,EAAiBj+Y,GAC5E,IAAIviB,GAAe,EAC8B,gBAA7Cwga,EAAgBt2b,MAAMs9B,OAAO7wB,aAA8E,gBAA7C6pb,EAAgBt2b,MAAMs9B,OAAO7wB,cAC3FqpB,GAAe,GAEnB,IAAI0ka,EAAWniZ,EAAKA,KAChBhwD,EAAYgwD,EAAKz3D,EAAE,GAAKy3D,EAAKxuD,MAAQ,EACrCvB,EAAY+vD,EAAKx3D,EAAE,GAAKw3D,EAAKzuD,OAAS,EAC1C/V,KAAK0md,4BAA4BjE,EAAiBkE,EAAUnyc,EAAWC,GACnEwtC,GACKwga,EAAgBtzI,UACjBszI,EAAgBtzI,QAAU,GAE9BszI,EAAgBtzI,QAAU9iU,KAAKC,IAAIm2c,EAAgBtzI,QAAS16T,EAAY+vD,EAAKzuD,UAGxE0sc,EAAgBxzI,UACjBwzI,EAAgBxzI,QAAU,GAE9BwzI,EAAgBxzI,QAAU5iU,KAAKC,IAAIm2c,EAAgBxzI,QAASz6T,EAAYgwD,EAAKxuD,SAMrFqqc,EAAuBhld,UAAUkrd,UAAY,SAAUj4c,GACnD,IAAI+1F,KACJ,GAAI/1F,EAAO4oB,IACP,IAAK,IAAI94B,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKgR,EAAO4oB,KAAM94B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACjE,IAAIf,EAAMwF,EAAGzE,GACbimG,EAAK7/F,KAAK8J,EAAO4oB,IAAI75B,IAG7B,OAAOgnG,GAKXg8W,EAAuBhld,UAAU6md,cAAgB,SAAU/1b,GACvDnsB,KAAKsgd,eAAel3Z,QAAQj9B,IAKhCk0b,EAAuBhld,UAAU4md,cAAgB,SAAU91b,GACvDnsB,KAAK4md,YAAYz6b,GACjBnsB,KAAK6md,SAAS16b,IAKlBk0b,EAAuBhld,UAAUurd,YAAc,SAAUz6b,GAIrD,IAHA,IAAI26b,EAAa36b,EAAM26b,WACnBC,EAAgB56b,EAAM66b,oBAAoB76b,EAAMq6b,cAChDS,EAAiBH,EAAWzld,QACzByld,EAAWrqd,OAAS,GAAG,CAM1B,IAAK,IAJDyqd,GADAC,EAAeL,EAAW,IACWM,iBACrCC,EAAkBF,EAAaG,iBAC/BC,GAAkB,EAClBC,EAAe,IACVrrd,EAAI,EAAGA,EAAI+qd,EAAsBzqd,OAAQN,IAAK,CAEnD,GAA6B,WADzBsrd,EAAeP,EAAsB/qd,IACxBk9B,KAAK,GAKjB,CACDkub,GAAkB,EAClB,MALA,IAAItD,EAAYwD,EAAalrd,OAC7Bird,EAAen7c,KAAK8T,IAAIqnc,EAAcvD,EAAU5qb,KAAK,GAAK,GAQlE,GAAIkub,EAAiB,CAMjB,GALAJ,EAAa9tb,KAAK,GAAKmub,EAClBr7b,EAAM42b,UACP52b,EAAM42b,QAAU,KAEpB52b,EAAM42b,QAAU12c,KAAK8T,IAAIgM,EAAM42b,QAASyE,GACjB,MAAnBH,EACA,IAASlrd,EAAI,EAAGA,EAAIkrd,EAAgB5qd,OAAQN,IAAK,EACzCsrd,EAAeJ,EAAgBlrd,IACtBk9B,KAAK,GAAK,SAII,KAFvB4qb,EAAYwD,EAAatgd,QAEfkyB,KAAK,KACfytb,EAAWtid,KAAKy/c,GAGhBA,EAAU5qb,KAAK,IAAM,GAIjCytb,EAAW5nY,YAEV,CAED,IAAIwoY,EAAcZ,EAAW5nY,QAE7B,GADA4nY,EAAWtid,KAAK2id,GACZO,IAAgBP,GAAsC,IAAtBL,EAAWrqd,OAG3C,OAIZ,IAASN,EAAI,EAAGA,EAAI4qd,EAActqd,OAAQN,IACtC4qd,EAAc5qd,GAAGk9B,KAAK,IAAMlN,EAAM42b,QAEtC,IAAS5md,EAAI,EAAGA,EAAI8qd,EAAexqd,OAAQN,IAIvC,IAAK,IAHDgrd,EACAQ,EAAkB,EAEblkc,GADLyjc,GAFAC,EAAeF,EAAe9qd,IAEOmrd,iBAC5B,GAAG7jc,EAAIyjc,EAAsBzqd,OAAQgnB,IAAK,CACnD,IAAIgkc,EACAxD,GADAwD,EAAeP,EAAsBzjc,IACZtc,OAC7Bggd,EAAa9tb,KAAK,GAAKhtB,KAAKC,IAAIq7c,EAAiB1D,EAAU5qb,KAAK,GAAK,GACrEsub,EAAkBR,EAAa9tb,KAAK,GAG5ClN,EAAM42b,QAAU,IAAY52b,EAAM42b,SAKtC1C,EAAuBhld,UAAUwrd,SAAW,SAAU16b,GAClDA,EAAM06b,YAKVxG,EAAuBhld,UAAU2md,WAAa,SAAU71b,GACpD,IAAIy7b,KACJz7b,EAAM26b,cAGN,IAAK,IAFDe,EAAmB17b,EAAM66b,oBAAoB76b,EAAMq6b,cACnDsB,KACK3rd,EAAI,EAAGA,EAAI0rd,EAAiBprd,OAAQN,IACzC0rd,EAAiB1rd,GAAGk9B,KAAK,IAAM,EAC/Byub,EAAYD,EAAiB1rd,GAAGmH,IAAMukd,EAAiB1rd,GAE3D,IAAI4rd,EAAa,KACjB,GAAmB,MAAf57b,EAAM00b,MAAe,CACrB,IAAImH,EAAa77b,EAAM00b,MACvBkH,KACA,IAAS5rd,EAAI,EAAGA,EAAI6rd,EAAWvrd,OAAQN,IACnC4rd,EAAW5rd,GAAKgwB,EAAM87b,cAAc97b,EAAMq6b,aAAcwB,EAAW7rd,IAC9C,MAAjB4rd,EAAW5rd,IACXgwB,EAAM26b,WAAWtid,KAAKujd,EAAW5rd,IAI7CgwB,EAAM+7b,MAAM,yBAA0BH,GAAY,EAAM,MAAQH,UAAWA,EAAWE,YAAaA,IACnG,IAAIK,EAAgBh8b,EAAM9sB,MAAMuod,EAAW,MAAM,GACjDz7b,EAAM+7b,MAAM,uBAAwBJ,GAAa,EAAMK,GAAiBP,UAAWA,EAAWE,YAAaA,KAM/GzH,EAAuBhld,UAAUkJ,OAAS,SAAUxH,EAAKyxD,GACrD,IAAIv8C,EAAQu8C,EAAMjwD,QAAQxB,GAI1B,OAHe,IAAXkV,GACAu8C,EAAM/lC,OAAOxW,EAAO,GAEjBlV,GAMXsjd,EAAuBhld,UAAU+sd,OAAS,SAAUC,EAAgBn9Y,GAChE,IAAI7xC,EAAOgvb,EAAe9rd,OAC1B8rd,EAAe9rd,OAAS8rd,EAAelhd,OACvCkhd,EAAelhd,OAASkyB,EACxBgvb,EAAeC,YAAcD,EAAeC,YAMhDjI,EAAuBhld,UAAUktd,gBAAkB,SAAUhsd,EAAQ4K,EAAQi6c,GACzEA,EAAwB,MAAZA,GAAoBA,EAGhC,IAAK,IAFD3uC,EAAQzya,KAAK0gd,SAASnkd,GACtBwC,KACK5C,EAAI,EAAGA,EAAIs2a,EAAMh2a,OAAQN,IAAK,CACnC,IAAImD,EAAMU,KAAKihd,mBAAmBxuC,EAAMt2a,IAAI,GACxC8hX,EAAMj+W,KAAKihd,mBAAmBxuC,EAAMt2a,IAAI,IACvCmD,IAAQ/C,GAAU0hX,IAAQ92W,IAAai6c,GAAY9hd,IAAQ6H,GAAU82W,IAAQ1hX,IAC9EwC,EAAOyF,KAAKiua,EAAMt2a,IAG1B,OAAO4C,GAEJshd,KAKP0B,GAAkC,WAClC,SAASA,EAAiBt4Z,EAAQm3Z,EAAUC,EAAO2H,GAC/Cxod,KAAKyod,2BAA6B,EAElCzod,KAAK0od,SAAW,EAChB1od,KAAK2od,iBAAmB,IAAItI,GAC5Brgd,KAAK6gd,MAAQA,EACb7gd,KAAKwmd,cAAiBtvb,QACtB,IAAI0xb,KACJ5od,KAAKypD,OAAS++Z,EACdxod,KAAK+id,QAAU,IACf/id,KAAK6od,mBAAqBp/Z,EAC1BzpD,KAAK8od,oBAAoBr/Z,EAAQm3Z,EAAUgI,GAC3C,IAAK,IAAIzsd,EAAI,EAAGA,EAAIykd,EAASnkd,OAAQN,IAAK,CAEtC,IAAK,IADDs2a,EAAQm2C,EAAiBzsd,GAAGmrd,iBACvB7jc,EAAI,EAAGA,EAAIgvZ,EAAMh2a,OAAQgnB,IAAK,CACnC,IAAIgkc,EAAeh1C,EAAMhvZ,GACrBslc,EAAYtB,EAAah1C,MAC7B,GAAiB,MAAbs2C,GAAqBA,EAAUtsd,OAAS,EAAG,CAC3C,IAAIusd,EAAWD,EAAU,GACrBE,EAAax/Z,EAAOw3Z,mBAAmB+H,GAAU,GACjDE,EAAqBlpd,KAAKiod,cAAcjod,KAAKwmd,aAAcyC,GAC3DL,EAAiBzsd,KAAO+sd,IACxBD,EAAax/Z,EAAOw3Z,mBAAmB+H,GAAU,GACjDE,EAAqBlpd,KAAKiod,cAAcjod,KAAKwmd,aAAcyC,IAErC,MAAtBC,GAA8BN,EAAiBzsd,KAAO+sd,IACtDzB,EAAatgd,OAAS+hd,EAC6B,IAA/CA,EAAmB9B,iBAAiB3qd,SACpCysd,EAAmB9B,qBAEnB8B,EAAmB9B,iBAAiB7od,QAAQkpd,GAAgB,GAC5DyB,EAAmB9B,iBAAiB5id,KAAKijd,KAKzDmB,EAAiBzsd,GAAGk9B,KAAK,GAAK,GAsVtC,OAhVA0ob,EAAiB1md,UAAUytd,oBAAsB,SAAUr/Z,EAAQm3Z,EAAUgI,GACzE,IAAK,IAAIzsd,EAAI,EAAGA,EAAIykd,EAASnkd,OAAQN,IAAK,CACtCysd,EAAiBzsd,IACb4Q,KAAOC,KAAOqsB,QAAUmrC,KAAMo8Y,EAASzkd,GACvCmH,GAAIs9c,EAASzkd,GAAG46B,KAAMqwb,oBAAsBE,qBAEhDtnd,KAAKmpd,cAAcnpd,KAAKwmd,aAAc5F,EAASzkd,GAAIysd,EAAiBzsd,IACpE,IAAI6kd,EAAQv3Z,EAAOi3Z,SAASE,EAASzkd,IACrCysd,EAAiBzsd,GAAGmrd,oBACpB,IAAK,IAAI7jc,EAAI,EAAGA,EAAIu9b,EAAMvkd,OAAQgnB,IAAK,CACnC,IAAI+gD,EAAO/a,EAAOw3Z,mBAAmBD,EAAMv9b,IAAI,GAC/C,GAAI+gD,IAASo8Y,EAASzkd,GAAI,CACtB,IAAIitd,EAAkB3/Z,EAAO8+Z,gBAAgB3H,EAASzkd,GAAIqoE,GAAM,GAC5D6kZ,EAAgB5/Z,EAAO8+Z,gBAAgB3H,EAASzkd,GAAIqoE,GAAM,GAC9D,GAAuB,MAAnB4kZ,GAA2BA,EAAgB3sd,OAAS,GAA4B,EAAvB4sd,EAAc5sd,QAAc2sd,EAAgB3sd,OAAQ,CAE7G,IAAK,IADDgrd,GAAiB16c,KAAOC,KAAOqsB,QAAUo5Y,MAAO22C,EAAiBl1b,QAC5Ds+C,EAAI,EAAGA,EAAI42Y,EAAgB3sd,OAAQ+1E,IACxCi1Y,EAAavzb,IAAI1vB,KAAK4kd,EAAgB52Y,GAAGlvE,IAE7Cmkd,EAAalrd,OAASqsd,EAAiBzsd,GAClCysd,EAAiBzsd,GAAGmrd,mBACrBsB,EAAiBzsd,GAAGmrd,qBAEpBsB,EAAiBzsd,GAAGmrd,iBAAiB/od,QAAQkpd,GAAgB,GAC7DmB,EAAiBzsd,GAAGmrd,iBAAiB9id,KAAKijd,KAK1DmB,EAAiBzsd,GAAGk9B,KAAK,GAAK,IAOtC0ob,EAAiB1md,UAAUwrd,SAAW,WAClC,IAAIyC,KACJtpd,KAAKijd,SACL,IAAK,IAAI9md,EAAI,EAAGA,EAAI6D,KAAK+id,QAAU,EAAG5md,IAClCmtd,EAASntd,MACT6D,KAAKijd,MAAM9md,GAAKmtd,EAASntd,GAE7B,IAAI4rd,EAAa,KACjB,GAAkB,MAAd/nd,KAAK6gd,MAAe,CACpB,IAAI0I,EAAgBvpd,KAAK6gd,MACzBkH,KACA,IAAS5rd,EAAI,EAAGA,EAAIotd,EAAc9sd,OAAQN,IAAK,CAC3C,IAAIqoE,EAAO+kZ,EAAcptd,GACrBgrd,EAAennd,KAAKiod,cAAcjod,KAAKwmd,aAAchiZ,GACzDujZ,EAAW5rd,GAAKgrd,GAGxBnnd,KAAKkod,MAAM,mBAAoBH,GAAY,EAAO,MAAQH,UAAW,KAAME,YAAa,KAAMwB,SAAUA,KAK5GvH,EAAiB1md,UAAUmud,iBAAmB,SAAUt+Y,EAAOu+Y,EAAMjtd,GACjDA,EAAKord,UACHprd,EAAKsrd,YADvB,IAEIxnd,EAAS9D,EAAK8D,OACdC,EAAO/D,EAAKuvM,KACZpzL,EAAOnc,EAAKmc,KACZ2wc,EAAW9sd,EAAK8sd,SAapB,GAZK/od,EAAKwid,SAA4B,IAAjBxid,EAAKwid,UACtBxid,EAAKwid,SAAW,GAEfxid,EAAKkjd,SAA4B,IAAjBljd,EAAKkjd,UACtBljd,EAAKkjd,SAAW,GAEP,IAATgG,GAAclpd,EAAKwid,QAAU,GAAKxid,EAAKkjd,QAAU,IACjD6F,EAAS/od,EAAK84B,KAAK,IAAI70B,KAAKjE,GAC5BA,EAAKwid,QAAUxid,EAAK84B,KAAK,GACzB94B,EAAKkjd,QAAUljd,EAAK84B,KAAK,GACzB94B,EAAK84B,KAAK,GAAKiwb,EAAS/od,EAAKwid,SAAStmd,OAAS,GAErC,MAAV6D,GAA0B,MAARqY,EAAc,CAEhC,GADiCrY,EAAOyid,QAAUxid,EAAKwid,QACtB,EAAG,CAChCpqc,EAAKoqc,QAAUzid,EAAOyid,QACtBpqc,EAAK8qc,QAAUljd,EAAKwid,QACpBpqc,EAAK0gB,QACL1gB,EAAK5L,KACL4L,EAAK3L,KACL,IAAK,IAAI7Q,EAAIwc,EAAK8qc,QAAU,EAAGtnd,EAAIwc,EAAKoqc,QAAS5md,IAC7Cmtd,EAASntd,GAAGqI,KAAKmU,GACjB3Y,KAAK2od,iBAAiBrF,gBAAgB3qc,EAAMxc,EAAGmtd,EAASntd,GAAGM,OAAS,MAQpFsld,EAAiB1md,UAAU8td,cAAgB,SAAUO,EAAKrsd,EAAKL,GAC3D,IAAIsG,EAAKjG,EAAI05B,KAIT81F,EAAW68V,EAAIxyb,IAAI5zB,GAEvB,OADAomd,EAAIxyb,IAAI5zB,GAAMtG,EACP6vH,GAMXk1V,EAAiB1md,UAAUopd,uBAAyB,SAAUiF,EAAKrsd,EAAKL,EAAOizF,GAC3E,IAAI3sF,EAAKjG,EAAIiG,GAITupH,EAAW68V,EAAIxyb,IAAI5zB,GAEvB,OADAomd,EAAIxyb,IAAI5zB,GAAMtG,EACP6vH,GAMXk1V,EAAiB1md,UAAU4sd,cAAgB,SAAUyB,EAAKrsd,GACjD2C,KAAKyod,4BAAkE,IAApCzod,KAAKyod,6BACzCzod,KAAKyod,2BAA6B,GAEtC,IAAInld,EAAKjG,EAAI05B,KACb,OAAKzzB,EASEomd,EAAIxyb,IAAI5zB,GARNjG,EAAIssd,eAKED,EAAIxyb,IAAI75B,EAAIssd,iBAJnBtsd,EAAIssd,eAAiB,sBAAwB3pd,KAAKyod,6BAC3Cprd,EAAIssd,iBAYvB5H,EAAiB1md,UAAUwqd,uBAAyB,SAAU6D,EAAKrsd,GAC1D2C,KAAKyod,4BAAkE,IAApCzod,KAAKyod,6BACzCzod,KAAKyod,2BAA6B,GAEtC,IAAInld,EAAKjG,EAAIiG,GACb,OAAKA,EASEomd,EAAIxyb,IAAI5zB,GARNjG,EAAIssd,eAKED,EAAIxyb,IAAI75B,EAAIssd,iBAJnBtsd,EAAIssd,eAAiB,sBAAwB3pd,KAAKyod,6BAC3Cprd,EAAIssd,iBAYvB5H,EAAiB1md,UAAU2rd,oBAAsB,SAAU0C,GAEvD,IAAK,IADD3qd,KACKX,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKosd,EAAIxyb,KAAM94B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC9D,IAAIf,EAAMwF,EAAGzE,GACbW,EAAOyF,KAAKkld,EAAIxyb,IAAI75B,IAExB,OAAO0B,GAMXgjd,EAAiB1md,UAAU6sd,MAAQ,SAAU0B,EAASC,EAAUC,EAAgBlC,EAAWprd,GACtEA,EAAKord,UACHprd,EAAKsrd,YACTtrd,EAAK8sd,SAEpB,GAAgB,MAAZO,EAAkB,CAClB,IAAK,IAAI1td,EAAI,EAAGA,EAAI0td,EAASptd,OAAQN,IAAK,CACtC,IAAIgrd,EAAe0C,EAAS1td,GACR,MAAhBgrd,IACiB,MAAbS,IACAA,EAAY,IAAItpd,QAEpB9B,EAAK8D,OAAS,KACd9D,EAAKuvM,KAAOo7Q,EACZ3qd,EAAKmc,KAAO,KACRmxc,GAEA3C,EAAajD,YACbiD,EAAajD,SAAS,GAAKlkd,KAAK0od,SAChCvB,EAAajD,SAAS,GAAK/nd,EAC3B6D,KAAK+pd,YAAYH,EAAShC,EAAWzrd,EAAG,EAAGK,IAG3CwD,KAAKgqd,iBAAiBJ,EAAShC,EAAW,EAAGprd,IAIzDwD,KAAK0od,aAMb3G,EAAiB1md,UAAU2ud,iBAAmB,SAAUJ,EAASH,EAAMv+Y,EAAO1uE,GACzDA,EAAKord,UACHprd,EAAKsrd,YACTtrd,EAAK8sd,SACP9sd,EAAK8D,OAHlB,IAIIyrM,EAAOvvM,EAAKuvM,KACLvvM,EAAKmc,KAChB,GAAY,MAARozL,EAAc,CACd,IAAI39G,EAAS29G,EAAKzoM,GAClB,GAAoB,MAAhBmmd,EAAKr7X,GAAiB,CACtBq7X,EAAKr7X,GAAU29G,EACf/rM,KAAKiqd,qBAAqBL,EAAS1+Y,EAAO,EAAG1uE,GAG7C,IAAK,IADD0td,EAAgBn+Q,EAAKu7Q,iBAAiBjmd,QACjClF,EAAI,EAAGA,EAAI+td,EAAcztd,OAAQN,IAAK,CAC3C,IAAIsrd,EAAeyC,EAAc/td,GAC7B4zC,EAAa03a,EAAatgd,OAE9B3K,EAAK8D,OAASyrM,EACdvvM,EAAKuvM,KAAOh8J,EACZvzC,EAAKmc,KAAO8uc,EACZznd,KAAKgqd,iBAAiBJ,EAASH,EAAMv+Y,EAAQ,EAAG1uE,SAIpDwD,KAAKiqd,qBAAqBL,EAAS1+Y,EAAO,EAAG1uE,KAOzDuld,EAAiB1md,UAAU4ud,qBAAuB,SAAUL,EAAS1+Y,EAAOu+Y,EAAMU,GAC9E,IAAI7pd,EAAS6pd,EAAc7pd,OACvByrM,EAAOo+Q,EAAcp+Q,KACrBpzL,EAAOwxc,EAAcxxc,KACzB,GAAgB,2BAAZixc,GAAoD,yBAAZA,EAAoC,CAC5E,IAAIrld,EAAqB,yBAAZqld,EACb5pd,KAAKoqd,qBAAqB9pd,EAAQyrM,EAAMpzL,EAAMuyD,EAAOi/Y,EAAe5ld,GAExD,qBAAZqld,GACA5pd,KAAKwpd,iBAAiBt+Y,EAAOu+Y,EAAMU,IAM3CpI,EAAiB1md,UAAU+ud,qBAAuB,SAAU9pd,EAAQC,EAAMoY,EAAMuyD,EAAO1uE,EAAM+H,GACzF,IAAIqjd,EAAYprd,EAAKord,UACjBE,EAActrd,EAAKsrd,YACRtrd,EAAK8sd,SAChBtpd,KAAK2od,iBAAiB3E,WAAWzjd,EAAMD,KACvCN,KAAK2od,iBAAiBP,OAAOzvc,EAAM,GACnC3Y,KAAK2od,iBAAiBpkd,OAAOoU,EAAMrY,EAAOgnd,kBACtC/id,GACAhE,EAAK+md,iBAAiB9id,KAAKmU,GAC3BrY,EAAO8md,iBAAiB5id,KAAKmU,GAC7B3Y,KAAK2od,iBAAiBpkd,OAAOoU,EAAMpY,EAAK6md,oBAGxC9md,EAAO8md,iBAAiB5id,KAAKmU,GAC7B3Y,KAAK2od,iBAAiBpkd,OAAOoU,EAAMpY,EAAK6md,kBACxC7md,EAAK+md,iBAAiB9id,KAAKmU,KAGnCivc,EAAUrnd,EAAK+C,IAAM/C,SACdund,EAAYvnd,EAAK+C,KAK5By+c,EAAiB1md,UAAU0ud,YAAc,SAAUH,EAASH,EAAMY,EAAOn/Y,EAAO1uE,GAC5DA,EAAKord,UACHprd,EAAKsrd,YACRtrd,EAAK8sd,SAFpB,IAGIhpd,EAAS9D,EAAK8D,OACdyrM,EAAOvvM,EAAKuvM,KACLvvM,EAAKmc,KAChB,GAAY,MAARozL,EAAc,CACd,GAAc,MAAVzrM,IACqB,MAAjByrM,EAAKm4Q,UACLn4Q,EAAKm4Q,SAAS,KAAO5jd,EAAO4jd,SAAS,IAAI,CACzC,IAAIoG,EAAiBhqd,EAAO4jd,SAASznd,OAAS,EAC9CsvM,EAAKm4Q,SAAW5jd,EAAO4jd,SAAS7id,QAChC0qM,EAAKm4Q,SAASoG,EAAiB,GAAKD,EAG5C,IAAIj8X,EAAS29G,EAAKzoM,GAClB,GAAoB,MAAhBmmd,EAAKr7X,GAAiB,CACtBq7X,EAAKr7X,GAAU29G,EACf/rM,KAAKiqd,qBAAqBL,EAAS1+Y,EAAO,EAAG1uE,GAE7C,IAAK,IADD0td,EAAgBn+Q,EAAKu7Q,iBAAiBjmd,QACjClF,EAAI,EAAGA,EAAI+td,EAAcztd,OAAQN,IAAK,CAC3C,IAAIsrd,EAAeyC,EAAc/td,GAC7B4zC,EAAa03a,EAAatgd,OAC9B3K,EAAK8D,OAASyrM,EACdvvM,EAAKuvM,KAAOh8J,EACZvzC,EAAKmc,KAAO8uc,EACZznd,KAAK+pd,YAAYH,EAASH,EAAMttd,EAAG+uE,EAAQ,EAAG1uE,SAIlDwD,KAAKiqd,qBAAqBL,EAAS1+Y,EAAO,EAAG1uE,KAQzDuld,EAAiB1md,UAAUgE,MAAQ,SAAUtC,EAAKwtd,EAAYC,GAE1D,GADAA,EAAsB,MAAXA,GAAmBA,EACnB,MAAPztd,GAA4C,mBAArBA,EAAe,YAAkB,CAExD,IAAK,IADDu1a,EAAYv1a,EAAIa,cACXQ,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKP,GAAMqB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC1D,IAAIjC,EAAI0G,EAAGzE,GACD,mBAANjC,IAAyC,MAAdoud,GAAsBA,EAAWhsd,QAAQpC,GAAK,KACpEqud,GAA+B,iBAAZztd,EAAIZ,MAKxBm2a,EAAUn2a,GAAKY,EAAIZ,IAI/B,OAAOm2a,EAEX,OAAO,MAEJyvC,KAKPxB,GAAgC,WAChC,SAASA,KAoTT,OA9SAA,EAAelld,UAAUovd,mBAAqB,SAAUt+b,GAGpD,IAAK,IAFDu+b,EAAWv+b,EAAM82b,MAAMxmd,OACvBkud,EAAiB,EACZxud,EAAI,EAAGA,EAAIuud,EAAUvud,IAC1Bwud,GAAkB3qd,KAAK4qd,sBAAsBzud,EAAGgwB,GAEpD,OAAOw+b,GAMXpK,EAAelld,UAAUgqd,gBAAkB,SAAU9kd,EAAM2qE,GACvD,OAAI3qE,EACIP,KAAKmjd,SAAS5id,GACPA,EAAK84B,KAAK,GAGV94B,EAAK84B,KAAK6xC,EAAQ3qE,EAAKkjd,QAAU,GAGzC,GAKXlD,EAAelld,UAAUuvd,sBAAwB,SAAUzud,EAAGgwB,GAM1D,IAAK,IALDw+b,EAAiB,EACjBj7N,EAAOvjO,EAAM82b,MAAM9md,GACnB0ud,EAAe1+b,EAAM82b,MAAM9md,EAAI,GAC/B2ud,KAEKrnc,EAAI,EAAGA,EAAIisO,EAAKjzP,OAAQgnB,IAAK,CAMlC,IAAK,IALDljB,EAAOmvP,EAAKjsO,GACZsnc,EAAe/qd,KAAKqld,gBAAgB9kd,EAAMpE,GAC1C2pd,EAAiB9ld,KAAK6kd,yBAAyBtkd,EAAMpE,GAAG,GAExD6ud,KACK3kc,EAAI,EAAGA,EAAIy/b,EAAerpd,OAAQ4pB,IAAK,CAC5C,IAAI4kc,EAAgBnF,EAAez/b,GAC/B6kc,EAAwBlrd,KAAKqld,gBAAgB4F,EAAe9ud,EAAI,GACpE6ud,EAAYxmd,KAAK0md,GAErBF,EAAY7zb,KAAK,SAAUpqB,EAAGC,GAAK,OAAOD,EAAIC,IAC9C89c,EAAWC,GAAgBC,EAG1B,IADDG,KACJ,IAAS1nc,EAAI,EAAGA,EAAIqnc,EAAWrud,OAAQgnB,IACnC0nc,EAAUA,EAAQ3wc,OAAOswc,EAAWrnc,IAGxC,IADA,IAAI2nc,EAAa,EACVA,EAAaP,EAAapud,QAC7B2ud,IAAe,EAEnB,IAAIC,EAAW,EAAID,EAAa,EAChCA,GAAc,EAET,IADDna,KACJ,IAASxtb,EAAI,EAAGA,EAAI4nc,IAAY5nc,EAC5Bwtb,EAAKxtb,GAAK,EAEd,IAASA,EAAI,EAAGA,EAAI0nc,EAAQ1ud,OAAQgnB,IAAK,CACrC,IACI6nc,EADQH,EAAQ1nc,GACI2nc,EAExB,MADEna,EAAKqa,GACAA,EAAY,GACXA,EAAY,IACZX,GAAkB1Z,EAAKqa,EAAY,MAGrCra,EADFqa,EAAaA,EAAY,GAAM,GAIvC,OAAOX,GAMXpK,EAAelld,UAAU+tD,QAAU,SAAUj9B,GAEzCnsB,KAAKurd,mBACL,IAAK,IAAIpvd,EAAI,EAAGA,EAAIgwB,EAAM82b,MAAMxmd,OAAQN,IACpC6D,KAAKurd,gBAAgBpvd,GAAKgwB,EAAM82b,MAAM9md,GAAGkF,QAIxC,IAFDmqd,EAA+B,EAC/BC,EAAuBzrd,KAAKyqd,mBAAmBt+b,GACnD,IAAShwB,EAAI,EAAGA,EAAI,IAAMqvd,EAA+B,EAAGrvd,IAAK,CAC7D6D,KAAK0rd,eAAevvd,EAAGgwB,GACvB,IAAIw/b,EAAqB3rd,KAAKyqd,mBAAmBt+b,GACjD,GAAIw/b,EAAqBF,EAAsB,CAC3CA,EAAuBE,EACvBH,EAA+B,EAC/B,IAAK,IAAI/nc,EAAI,EAAGA,EAAIzjB,KAAKurd,gBAAgB9ud,OAAQgnB,IAE7C,IAAK,IADDisO,EAAOvjO,EAAM82b,MAAMx/b,GACd4C,EAAI,EAAGA,EAAIqpO,EAAKjzP,OAAQ4pB,IAAK,CAClC,IAAIm+C,EAAOkrL,EAAKrpO,GAChBrmB,KAAKurd,gBAAgB9nc,GAAG+gD,EAAKnrC,KAAK,IAAMmrC,OAI/C,CAEDgnZ,IAEA,IAAS/nc,EAAI,EAAGA,EAAIzjB,KAAKurd,gBAAgB9ud,OAAQgnB,IAE7C,IADIisO,EAAOvjO,EAAM82b,MAAMx/b,GACd4C,EAAI,EAAGA,EAAIqpO,EAAKjzP,OAAQ4pB,IAAK,CAC9Bm+C,EAAOkrL,EAAKrpO,GAChBrmB,KAAKsjd,gBAAgB9+Y,EAAM/gD,EAAG4C,IAI1C,GAA6B,IAAzBolc,EACA,MAMH,IAFDxI,KACAqG,KACJ,IAASntd,EAAI,EAAGA,EAAIgwB,EAAM42b,QAAU,EAAG5md,IACnCmtd,EAASntd,MACT8md,EAAM9md,GAAKmtd,EAASntd,GAExB,IAASA,EAAI,EAAGA,EAAI6D,KAAKurd,gBAAgB9ud,OAAQN,IAC7C,IAASsnB,EAAI,EAAGA,EAAIzjB,KAAKurd,gBAAgBpvd,GAAGM,OAAQgnB,IAChD6lc,EAASntd,GAAGqI,KAAKxE,KAAKurd,gBAAgBpvd,GAAGsnB,IAGjD0I,EAAM82b,MAAQA,GAMlB1C,EAAelld,UAAU8nd,SAAW,SAAU5id,GAC1C,SAAIA,IAAQA,EAAKikE,OAASjkE,EAAKikE,KAAK6oV,UAAW9sZ,EAAKikE,KAAK4oV,WAQ7DmzD,EAAelld,UAAUqwd,eAAiB,SAAUE,EAAWz/b,GAE3D,IAAI0/b,EAAiBD,EAAY,GAAM,EACvC,GAAIC,EACA,IAAK,IAAIpoc,EAAI0I,EAAM42b,QAAU,EAAGt/b,GAAK,EAAGA,IACpCzjB,KAAK8rd,WAAWroc,EAAGooc,QAIvB,IAASpoc,EAAI,EAAGA,EAAI0I,EAAM42b,QAASt/b,IAC/BzjB,KAAK8rd,WAAWroc,EAAGooc,IAQ/BtL,EAAelld,UAAUwpd,yBAA2B,SAAUrgZ,EAAM0G,EAAOq/H,QACpD,IAAfA,IAAyBA,GAAa,GAC1C,IAAIwhR,EAAiB,0BACjBC,EAAc,mBAKlB,GAJIzhR,IACAwhR,EAAiB,8BACjBC,EAAc,oBAEdxnZ,EAAM,CACN,GAAIxkE,KAAKmjd,SAAS3+Y,GAAO,CACrB,GAA4B,MAAxBA,EAAKunZ,GAAyB,CAC9BvnZ,EAAKunZ,MACLvnZ,EAAKunZ,GAAgB,MACrB,IAAK,IAAI5vd,EAAI,EAAGA,EAAIqoE,EAAKwnZ,GAAavvd,OAAQN,IAAK,CAC/C,IAAIwc,EAAO6rD,EAAKwnZ,GAAa7vd,QACRhB,IAAjBwd,EAAKoqc,UACLpqc,EAAKoqc,SAAW,IAEE,IAAlBpqc,EAAKoqc,UAAmBx4Q,EAAc5xL,EAAK8qc,UAAYv4Y,EAAQ,EAAMvyD,EAAKoqc,UAAY73Y,EAAQ,GAE9F1G,EAAKunZ,GAAgB,GAAGvnd,KAAK+lM,EAAa5xL,EAAKxR,OAASwR,EAAKpc,QAI7DioE,EAAKunZ,GAAgB,GAAGvnd,KAAKmU,IAIzC,OAAO6rD,EAAKunZ,GAAgB,GAG5B,GAA4B,MAAxBvnZ,EAAKunZ,GAAyB,CAC9BvnZ,EAAKunZ,MACL,IAAS5vd,EAAI,EAAGA,EAAIqoE,EAAKnrC,KAAK58B,OAAQN,IAClCqoE,EAAKunZ,GAAgB5vd,MACjBA,KAAOouM,EAAa,EAAK/lI,EAAKnrC,KAAK58B,OAAS,GAC5C+nE,EAAKunZ,GAAgB5vd,GAAGqI,KAAK+lM,EAAa/lI,EAAKr9D,OAASq9D,EAAKjoE,QAG7DioE,EAAKunZ,GAAgB5vd,GAAGqI,KAAKggE,GAIzC,OAAOA,EAAKunZ,GAAgB7gZ,EAAQ1G,EAAKi/Y,QAAU,GAG3D,OAAO,MAMXlD,EAAelld,UAAU4wd,YAAc,SAAUnG,EAAgBhD,GAG7D,IAAK,IAFDiD,KACAmG,EAAa,EACR/vd,EAAI,EAAGA,EAAI2pd,EAAerpd,OAAQN,IAAK,CAC5C,IAAIqoE,EAAOshZ,EAAe3pd,GAC1B4pd,EAAamG,KAAgBlsd,KAAKqld,gBAAgB7gZ,EAAMs+Y,GAI5D,GADAiD,EAAa5ub,KAAK,SAAUmkB,EAAGhe,GAAK,OAAOge,EAAIhe,IAC3C4ub,EAAa,GAAM,EAEnB,OAAOnG,EAAa15c,KAAKkT,MAAM2sc,EAAa,IAE3C,GAAmB,IAAfA,EACL,OAASnG,EAAa,GAAKA,EAAa,IAAM,EAG9C,IAAIC,EAAckG,EAAa,EAC3BC,EAAapG,EAAaC,EAAc,GAAKD,EAAa,GAC1DqG,EAAcrG,EAAamG,EAAa,GACtCnG,EAAaC,GACnB,OAAQD,EAAaC,EAAc,GAAKoG,EAAcrG,EAAaC,GAAemG,IAAeA,EAAaC,IAOtH7L,EAAelld,UAAUiod,gBAAkB,SAAU9+Y,EAAM0G,EAAOluE,GAC1DwnE,IACAA,EAAKnrC,KAAK,GAAKr8B,IAMvBujd,EAAelld,UAAUywd,WAAa,SAAUhJ,EAAW+I,GAIvD,IAAK,IAHDQ,EAAkBrsd,KAAKurd,gBAAgBzI,GAAWrmd,OAClDspd,KACAuG,KACKnwd,EAAI,EAAGA,EAAIkwd,EAAiBlwd,IAAK,CACtC,IAAIqoE,EAAOxkE,KAAKurd,gBAAgBzI,GAAW3md,GACvCowd,GAAgBN,YAAa,GACjCM,EAAY/nZ,KAAOA,EAGnB,IAAIgoZ,OAA0B,EAE1BA,EADAX,EAC0B7rd,KAAK6kd,yBAAyBrgZ,EAAMs+Y,GAGpC9id,KAAK6kd,yBAAyBrgZ,EAAMs+Y,GAAW,GAE7E,IAAI2J,OAAgB,EACJA,EAAhBZ,EAAgC/I,EAAY,EAAoBA,EAAY,EAC7C,MAA3B0J,GAAsE,IAAnCA,EAAwB/vd,QAC3D8vd,EAAYN,YAAcjsd,KAAKisd,YAAYO,EAAyBC,GACpE1G,EAAavhd,KAAK+nd,IAKlBD,EAAkBtsd,KAAKqld,gBAAgB7gZ,EAAMs+Y,KAAc,EAGnEiD,EAAa5ub,KAAKn3B,KAAKqtH,SAEvB,IAASlxH,EAAI,EAAGA,EAAIkwd,EAAiBlwd,IACjC,GAA4B,MAAxBmwd,EAAkBnwd,GAAY,CAC1BqoE,EAAOuhZ,EAAa7mY,QAAQ1a,KAChCxkE,KAAKsjd,gBAAgB9+Y,EAAMs+Y,EAAW3md,KAQlDokd,EAAelld,UAAUgyH,QAAU,SAAU/xE,EAAGhe,GAC5C,GAAS,MAALge,GAAkB,MAALhe,EAAW,CACxB,GAAIA,EAAE2ub,YAAc3wa,EAAE2wa,YAClB,OAAQ,EAEP,GAAI3ub,EAAE2ub,YAAc3wa,EAAE2wa,YACvB,OAAO,EAGf,OAAO,GAEJ1L,KCxjDP10X,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAgB5D6zX,GAAgB,SAAUl0Z,GAC1B,IAAI08D,EAAO18D,EACX,OAAI08D,EAAKzqB,aAAeyqB,EAAKxiB,aAAewiB,EAAKlqB,UAAYkqB,EAAKiyV,UAC3DjyV,EAAKa,cAAgBb,EAAKkyV,cAAgBlyV,EAAKzc,iBAAmByc,EAAKvc,gBACnEgB,IAEPnhD,EAAIo8B,QAAUp8B,EAAIo8B,iBAAiBszX,IAAS1vZ,EAAIo8B,MAAMzyB,MAC/C64C,KAOXmta,GAAyB,SAAUhgY,GAEnC,SAASggY,IACL,OAAkB,OAAXhgY,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBA6rF,GAAU6gY,EAAShgY,GAInBN,IACIllF,EAAS,KACVwld,EAAQrxd,UAAW,UAAM,GAC5B+wF,IACIllF,KACDwld,EAAQrxd,UAAW,cAAU,GAChC+wF,IACIllF,GAAS,IACVwld,EAAQrxd,UAAW,gBAAY,GAClC+wF,IACIllF,EAAS,KACVwld,EAAQrxd,UAAW,eAAW,GACjC+wF,IACIllF,EAAS,KACVwld,EAAQrxd,UAAW,aAAS,GAC/B+wF,IACIzjF,EAAkBsoZ,KACnBy7D,EAAQrxd,UAAW,eAAW,GAC1Bqxd,GACTlsZ,IAKEmsZ,GAA+B,SAAUjgY,GAEzC,SAASigY,IACL,OAAkB,OAAXjgY,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6rF,GAAU8gY,EAAejgY,GAIzBN,IACIllF,KACDyld,EAActxd,UAAW,aAAS,GACrC+wF,IACIllF,KACDyld,EAActxd,UAAW,cAAU,GACtC+wF,IACIrkF,KAAYoqC,KACbw6a,EAActxd,UAAW,cAAU,GAC/Bsxd,GACTnsZ,IAYEosZ,GAA+B,SAAUlgY,GAOzC,SAASkgY,EAAc55c,EAAShS,GAC5B,IAAIjB,EAAQ2sF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAoBnD,OAnBAD,EAAM8sd,eACN9sd,EAAM8mB,KAAO,OAMb9mB,EAAMmP,OAAS,SAAUrO,GACrB,IAAIisd,EACAxpd,EAAKzC,EAAE0zG,OAAOptG,OAAO7D,GAAGpG,MAAM,cAAc,GAC5CqgG,EAASx9F,EAAM8sd,YAAYvpd,GAC/B,GAAIi6F,GAAUx9F,EAAMwyb,eAAgB,CAChCxyb,EAAM0yb,gBAAkB1yb,EAAMwyb,eAAejvb,KAAOi6F,EAAOj6F,GAAKi6F,EAASx9F,EAAMwyb,eAChExyb,EAAM8hF,iBAAiBhhF,EAAE0zG,SACxCu4W,EAAgB/sd,EAAMgtd,iBAAiBhtd,EAAM0yb,gBAAiB5xb,EAAE0zG,OAAQx0G,EAAMiB,UAChEwC,aAAa,YAAazD,EAAMiB,QAAQsC,IAE1D,OAAOwpd,GAEJ/sd,EAs3BX,OAj5BA8rF,GAAU+gY,EAAelgY,GAkCzBkgY,EAAcvxd,UAAU0tF,kBAAoB,SAAUiF,EAASC,GAE3D,IAAK,IADDnjC,GAAU,EACL1sD,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,GAAU5vF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACD4B,KAAKgB,QAAQ0D,MAAMsR,MAAQhW,KAAKgW,MAAM9I,WACtC,MACJ,IAAK,SACDlN,KAAKgB,QAAQ0D,MAAMqR,OAAS/V,KAAK+V,OAAO7I,WACxC,MACJ,IAAK,gBACD,MACJ,IAAK,cACL,IAAK,eACL,IAAK,gBACD49C,GAAU,EACV,MACJ,IAAK,eACD,GAAIkjC,EAAQg/X,aACRhtd,KAAKutX,oBAEJ,CACD,IAAIh3T,EAAa/1D,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,WACvDizD,GACAA,EAAW91D,WAAW6E,YAAYixD,GAG1C,MACJ,IAAK,WACD,IAAK,IAAItyD,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAK0wF,EAAQ58B,UAAWntD,EAAKwG,EAAGhO,OAAQwH,IAAM,CACvE,IAAI9H,EAAIsO,EAAGxG,GACPgO,EAAQ2kB,OAAOz6B,QACqBhB,IAApC6yF,EAAQ58B,SAASn/C,GAAOkjE,UACxBn1E,KAAKitd,iBAAiBpxZ,MAAM5pD,GAAOkjE,QAAU6Y,EAAQ58B,SAASn/C,GAAOkjE,QACrErqB,GAAU,QAE2B3vD,IAArC6yF,EAAQ58B,SAASn/C,GAAOywL,WACnB1iM,KAAKoxD,SAASn/C,GAAO6X,cAKtB9pB,KAAKoxD,SAASn/C,GAAO6X,eAAgB,GAJrC9pB,KAAKitd,iBAAiBpxZ,MAAM5pD,GAAOywL,SAAW10G,EAAQ58B,SAASn/C,GAAOywL,SACtE53I,GAAU,IAOtB,MACJ,IAAK,kBACI9qD,KAAKyvU,gBAINzvU,KAAKitd,iBAAiBr+a,WAAciwH,QAAU3zJ,SAAU,KAAO4oW,UAAY5oW,SAAU,MAHrFlL,KAAKitd,iBAAiBr+a,WAAciwH,QAAU3zJ,SAAU,GAAK4oW,UAAY5oW,SAAU,IAKvF,MACJ,IAAK,aACDlL,KAAKitd,iBAAiB36G,WAAatyW,KAAKsyW,WACxCxnT,GAAU,GAIlBA,GACA9qD,KAAKktd,mBAObN,EAAcvxd,UAAU+yG,eAAiB,WAErC,OAAOpuG,KAAK4uG,cADK,YAMrBg+W,EAAcvxd,UAAUoX,UAAY,WAChC,IAAI1S,EAAQC,KACZA,KAAKgB,QAAQ0D,MAAMmV,SAAW,OAC9B7Z,KAAKgB,QAAQ0D,MAAMqR,OAAS/V,KAAK+V,OAAO7I,WACxClN,KAAKgB,QAAQ0D,MAAMsR,MAAQhW,KAAKgW,MAAM9I,WAClClN,KAAKgtd,cACLhtd,KAAKutX,gBAGT,IAAI4/F,EAAehsd,EAAc,OAASmC,GAAItD,KAAKgB,QAAQsC,GAAK,eAChEtD,KAAKitd,iBAAmB,IAAIp7G,IACxBS,WAAYtyW,KAAKsyW,aAEhBtyW,KAAKyvU,kBACNzvU,KAAKitd,iBAAiBr+a,WAAciwH,QAAU3zJ,SAAU,GAAK4oW,UAAY5oW,SAAU,KAEvFlL,KAAKitd,iBAAiBvqR,SAAW,SAAUziM,GACvC,IAAIgS,EAAQlS,EAAMktd,iBAAiBpxZ,MAAMt9D,QAAQ0B,EAAK+d,MACtDje,EAAMqxD,SAASn/C,GAAOywL,SAAWziM,EAAK40W,WACtC90W,EAAMqxD,SAASn/C,GAAO6X,eAAgB,GAE1C9pB,KAAKgB,QAAQW,YAAYwrd,GACzB92Z,KACAr2D,KAAKogH,eACLpgH,KAAKykB,cAKTmoc,EAAcvxd,UAAUsyG,OAAS,WAC7B3tG,KAAK41a,gBAAkB,IAAI/f,GAAgB71Z,KAAKgB,QAAQsC,GAAI,IAAI0sB,IAAe,GAC/EhwB,KAAKojF,YAAc,IAAIyyU,GAAgB71Z,KAAKgB,QAAQsC,GAAI,IAAI0sB,IAAe,GAC3EhwB,KAAKotd,iBACLptd,KAAKitd,iBAAiB3+a,SAAS,IAAMtuC,KAAKgB,QAAQsC,GAAK,eAM3Dspd,EAAcvxd,UAAU0kC,cAAgB,WACpC,MAAO,iBAOX6sb,EAAcvxd,UAAU+2F,gBAAkB,WACtC,IAAIgB,KAKJ,OAJAA,EAAQ5uF,MACJouF,OAAQ,OACR3yF,UAEGmzF,GAMXw5X,EAAcvxd,UAAUiX,QAAU,WAC9B,GAAItS,KAAKqtd,UAAW,CAChBrtd,KAAKw0G,UAAUliG,UACftS,KAAKogH,eACLpgH,KAAK+N,OAAO,cACZ2+E,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,MAC9B,IAAI46B,EAAUp6B,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,cACxD,GAAIs3B,EAAS,CACT56B,KAAKgB,QAAQsE,YAAYs1B,GACzB,IAAI0yb,EAAgB,iBAChBzxd,OAAOyxd,KACPzxd,OAAOyxd,GAAeh3Z,YAAc,EACK,IAArCz6D,OAAOyxd,GAAeh3Z,aACtBz6D,OAAOyxd,GAAe7sd,WAAW6E,YAAYzJ,OAAOyxd,IACpDzxd,OAAOyxd,GAAiB,OAIpCttd,KAAKgB,QAAQ8C,UAAUS,OAAO,qBAQtCqod,EAAcvxd,UAAUkyd,YAAc,SAAUC,GAC5C,IAAK,IAAIpvd,EAAK,EAAGyE,EAAK2qd,EAAYn8Z,QAASjzD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAIm/F,EAAS16F,EAAGzE,GAChB,GAAIm/F,aAAkBh+C,GAAM,CACxB,IAAIqK,EAAkB3F,GAAYjkD,KAAK4pD,iBACnCA,GACAA,EAAgB2zC,EAAQv9F,WAG3B,GAAIu9F,aAAkBr/C,GAAW,CAClC,IAAI4L,EAAuB7F,GAAYjkD,KAAK8pD,sBACxCA,GACAA,EAAqByzC,EAAQv9F,MAGrCA,KAAKytd,cAAclwX,GACnBv9F,KAAK6sd,YAAYtvX,EAAOj6F,IAAMi6F,IAMtCqvX,EAAcvxd,UAAUqyd,cAAgB,SAAUF,GAC9C,IAAIG,EAAantd,SAASW,cAAc,OACxCwsd,EAAWnqd,aAAa,KAAMgqd,EAAYlqd,IAC1C,IAAIoB,EAAQ,8BACR8od,EAAYz3c,SACZrR,GAAS,UAAY8od,EAAYz3c,OAAS,MAE9C43c,EAAWnqd,aAAa,QAASkB,GACjC1E,KAAKgB,QAAQW,YAAYgsd,GACzB,IAAI3vc,GACAmoE,OAAQqnY,EAAY9sb,MAAOgiK,SAAU8qR,EAAY9qR,SACjD9nK,QAAS,IAAM4yb,EAAYlqd,GAAI6xE,QAASq4Y,EAAYr4Y,SAExDn1E,KAAKitd,iBAAiBpxZ,MAAMr3D,KAAKwZ,GACjChe,KAAK4td,cAAcJ,EAAaG,IAKpCf,EAAcvxd,UAAUwyd,eAAiB,SAAUC,EAAaC,GAC5D,IACK,IAAI5xd,EAAI,EAAGA,EAAI6D,KAAKoxD,SAAS30D,OAAQN,IAAK,CAC3C,IAAI6xd,EAAqBhud,KAAKoxD,SAASj1D,GACvC,IAAoD,IAAhD6xd,EAAmB1qd,GAAG/E,QAAQuvd,GAAqB,CAKnD,IAAK,IAHDx9V,QAASn1H,EAAW6yd,EAAoB,cAAe,GAEvDjxd,EAAM,IAAK3B,SAASC,UAAUC,KAAKC,MAAM01Z,GAAc88D,GAAgBz9V,IAClE5oG,EAAM,EAAGA,EAAMppB,OAAOhB,KAAKywd,GAAetxd,OAAQirB,IACvD3qB,EAAIuB,OAAOhB,KAAKywd,GAAermc,IAAQqmc,EAAczvd,OAAOhB,KAAKywd,GAAermc,IAEpFsmc,EAAmB38Z,QAAQ7sD,KAAKzH,GAChCiD,KAAKytd,cAAc1wd,GACnBiD,KAAK6sd,YAAY9vd,EAAIuG,IAAMvG,EAC3B,IAAI4wd,EAAantd,SAASyuB,eAAe++b,EAAmB1qd,IAC5Dqqd,EAAWhsd,YAAY3B,KAAKiud,mBAAmBlxd,EAAK4wd,IACpD,SAOZf,EAAcvxd,UAAU6yd,kBAAoB,SAAUJ,EAAal/O,GAE/D,IAAK,IADD9jL,EACK3uD,EAAI,EAAGA,EAAI6D,KAAKoxD,SAAS30D,OAAQN,IAAK,CAC3C,IAAI6xd,EAAqBhud,KAAKoxD,SAASj1D,GACvC,IAAoD,IAAhD6xd,EAAmB1qd,GAAG/E,QAAQuvd,GAC9B,IAAK,IAAI1vd,EAAK,EAAGyE,EAAKmrd,EAAmB38Z,QAASjzD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpE,IAAIm/F,EAAS16F,EAAGzE,GAChB,IAAqC,IAAjCm/F,EAAOj6F,GAAG/E,QAAQqwO,GAAkB,CACpC,IAAI38N,EAAQ+7c,EAAmB38Z,QAAQ9yD,QAAQg/F,GAC/CywX,EAAmB38Z,QAAQ5oC,OAAOxW,EAAO,UAClCjS,KAAK6sd,YAAYtvX,EAAOj6F,IAC/B,IAAItC,EAAUR,SAASyuB,eAAesuE,EAAOj6F,GAAK,cAClDtC,EAAQP,WAAW6E,YAAYtE,GAC/B8pD,GAAU,EACV,OAIZ,GAAIA,EACA,QAOZ8ha,EAAcvxd,UAAUoyd,cAAgB,SAAUlwX,GAC9C,IAAIvnF,EACAy6C,EACA16C,EACA26C,EAGA91B,EAFAuzb,EAAa,IAAIt4B,GACjB94b,EAAMwgG,EAEN6wX,EAAkB,IAAI7pE,GAEtB8pE,EAAoBpqa,GAAYjkD,KAAKqud,mBACrCA,IACAzzb,EAAUyzb,EAAkB9wX,IAE3B3iE,IACDA,EAAU2iE,EAAO8qJ,KAAKroP,OAE1B,IAAIsud,GAAet4c,MAAOhW,KAAKuqS,YAAax0R,OAAQ/V,KAAKssY,cACrDiiF,EAAgBtqa,GAAYjkD,KAAKuud,eAgBrC,GAfIA,IACAD,EAAaC,EAAchxX,IAE/B+wX,EAAaA,MAEb1zb,EAAQosB,aAAe,SACvBpsB,EAAQkyB,oBAAsBlyB,EAAQmyB,kBAAoB,SAC1Dqha,EAAgB1pd,MAAMgnD,YAAc0ia,EAAgB1pd,MAAM05B,KAAO,OACjEgwb,EAAgBh0c,UAAYwgB,GAC5BA,EAAQ6kM,QAAQ,IAAIhwM,IACpBmL,EAAQunX,QAAQvnX,EAAQ+9B,aACxB3iD,EAAQs4c,EAAWt4c,MAAQs4c,EAAWt4c,aACnB7a,IAAd4B,EAAIiZ,MAAsB4kB,EAAQ6e,WAAWzjC,WAAQ7a,IAAc6E,KAAKuqS,YAC7Ex0R,EAASu4c,EAAWv4c,OAASu4c,EAAWv4c,cACpB5a,IAAf4B,EAAIgZ,OAAuB6kB,EAAQ6e,WAAW1jC,YAAS5a,IAAc6E,KAAKssY,kBACjEnxY,IAAV6a,QAAkC7a,IAAX4a,EAAsB,CAC7C,IAAIy4c,EAAcx4c,EACdy4c,EAAe14c,OACM5a,IAArB6E,KAAKuqS,YACLikL,EAAcxud,KAAKuqS,YAAcvqS,KAAK0ud,aAAalid,KAAOxM,KAAK0ud,aAAajid,MAG5EuJ,GAASjZ,EAAI2H,MAAMknD,iBAEGzwD,IAAtB6E,KAAKssY,aACLmiF,EAAezud,KAAKssY,aAAetsY,KAAK0ud,aAAahid,IAAM1M,KAAK0ud,aAAa/hd,OAG7EoJ,GAAUhZ,EAAI2H,MAAMknD,YAEpB0ia,EAAWt6Z,aAA+C,KAAhCs6Z,EAAWt6Z,YAAYllC,OACjD2/b,GAAgB,IAEpBh+Z,EAAK+9Z,GAAe5zb,EAAQ5kB,OAASA,GACrC06C,EAAK+9Z,GAAgB7zb,EAAQ7kB,QAAUA,GACnCu4c,EAAWr4c,MACXw6C,EAAK+9Z,EAAcF,EAAWt4c,MAC9B06C,EAAK+9Z,EAAeH,EAAWv4c,QAEnCC,EAAQw4c,EACRz4c,EAAS04c,EACTh+Z,EAAKC,EAAKrkD,KAAK8T,IAAIswC,EAAIC,GACvB09Z,EAAgBp4c,MAAQA,EACxBo4c,EAAgBr4c,OAASA,EACzB6kB,EAAQ5kB,MAAQs4c,EAAWt4c,MAC3B4kB,EAAQ7kB,OAASu4c,EAAWv4c,OAC5B/V,KAAK2ud,YAAYpxX,EAAQ6wX,EAAiB39Z,EAAIC,EAAI16C,EAAOD,OAExD,CACD,IAAIgnC,OAAc,EACdwgD,aAAkBr/C,KAClBnB,EAAcD,GAAeygD,IAEjC3iE,EAAQ5kB,MAAQunF,EAAOvnF,SAAyB+mC,EAAY/mC,MAAQ4kB,EAAQ6e,WAAWzjC,MACvF4kB,EAAQ7kB,OAASwnF,EAAOxnF,UAA0BgnC,EAAYhnC,OAAS6kB,EAAQ6e,WAAW1jC,OAE9FwnF,EAAOxrF,QAAUo8c,EACjBA,EAAW/zc,UAAYg0c,GACvBxzb,EAAQy0B,MAAQ8+Z,EAAW9+Z,OAAUtiD,EAAG,EAAGC,EAAG,GAC9Cmhd,EAAW7qd,GAAKs3B,EAAQt3B,GAAK,UAC7B6qd,EAAWzpd,MAAM05B,KAAO+vb,EAAWzpd,MAAMgnD,YAAc,cACvDyia,EAAWtid,QAAU0xF,EAAO74F,MAAMknD,YAAc,EAChDuia,EAAWlid,QAAUsxF,EAAO74F,MAAMknD,YAAc,EAEhD5rD,KAAK4ud,qBAAqBN,EAAYt4c,EAAOm4c,GAC7CA,EAAW1uP,QAAQ,IAAIhwM,IACvB0+b,EAAWhsE,QAAQgsE,EAAWx1Z,aAC9B21Z,EAAWt4c,MAAQs4c,EAAWt4c,OAAS4kB,EAAQ6e,WAAWzjC,MAC1Ds4c,EAAWv4c,OAASu4c,EAAWv4c,QAAU6kB,EAAQ6e,WAAW1jC,OAC5DwnF,EAAOv9F,KAAK6mB,MAAQync,GAOxB1B,EAAcvxd,UAAUuzd,qBAAuB,SAAUN,EAAYt4c,EAAO1V,GACxE,GAAIgud,GAAcA,EAAWt6Z,aAAes6Z,EAAWt6Z,YAAYllC,KAAM,CACrE,IAAI6G,EAAc,IAAIw2B,GAEtBmia,EAAWt6Z,YAAYn6C,SAAWy0c,EAAWt6Z,YAAYn6C,UAAY,WACrEy0c,EAAWt6Z,YAAY/4C,KAAOqzc,EAAWt6Z,YAAY/4C,MAAQ,mBAC7D0a,EAAYiF,QAAU0zb,EAAWt6Z,YAAYllC,KAC7C6G,EAAY3f,MAAQA,EACpB2f,EAAY5f,OAAS,GACrB4f,EAAYjxB,MAAMgnD,YAAc,cAChC/1B,EAAYjxB,MAAM05B,KAAO,cACzBzI,EAAYjxB,MAAMknD,YAAc,EAChCj2B,EAAYjxB,MAAMonD,aAAewia,EAAWt6Z,YAAY/4C,KACxD0a,EAAYjxB,MAAMk8B,aAAe0tb,EAAWt6Z,YAAYn6C,SACxD8b,EAAYsH,QAAWzwB,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GAC1DrM,EAAO8Z,SAAS5V,KAAKmxB,KAQ7Bi3b,EAAcvxd,UAAUuyd,cAAgB,SAAUJ,EAAaqB,GAC3D,IAAK,IAAIzwd,EAAK,EAAGyE,EAAK2qd,EAAYn8Z,QAASjzD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAIm/F,EAAS16F,EAAGzE,GAChB4B,KAAKiud,mBAAmB1wX,EAAQsxX,KAQxCjC,EAAcvxd,UAAU0xd,iBAAmB,SAAUxvX,EAAQlmB,EAAKw3Y,GAC9D,IAAI7lF,EACAv4U,EACAC,EACAo+Z,EAAqBvxX,EAAOxrF,QAAQqI,SAAS,GAAGu+C,YAAY3iD,MAAQunF,EAAO74F,MAAMknD,YACjFmja,EAAsBxxX,EAAOxrF,QAAQqI,SAAS,GAAGu+C,YAAY5iD,OAASwnF,EAAO74F,MAAMknD,YACnFhxB,EAAU2iE,EAAOxrF,QAAQqI,SAAS,GAAGA,SAAS,GAClD,QAAiCjf,IAA7B6E,KAAKgvd,cAAch5c,YAAqD7a,IAA9B6E,KAAKgvd,cAAcj5c,OAAsB,CACnF+4c,GAAsB9ud,KAAKgvd,cAAch5c,OAAS84c,GAAsBvxX,EAAO74F,MAAMknD,YACrFmja,GAAuB/ud,KAAKgvd,cAAcj5c,QAAUg5c,GAAuBxxX,EAAO74F,MAAMknD,YACxF6E,EAAKq+Z,EAAqBl0b,EAAQ6e,WAAWzjC,MAC7C06C,EAAKq+Z,EAAsBn0b,EAAQ6e,WAAW1jC,OAC9C06C,EAAKC,EAAKrkD,KAAK8T,IAAIswC,EAAIC,GACvB,IAAI65O,EAAc3vQ,EAAQ6e,WAAWzjC,MAAQy6C,EACzC67U,EAAe1xW,EAAQ6e,WAAW1jC,OAAS26C,EAC/C6sC,EAAOxrF,QAAQqI,SAAS,GAAGpE,MAAQ84c,EACnCvxX,EAAOxrF,QAAQqI,SAAS,GAAGrE,OAASg5c,EACpC/ud,KAAKivd,wBAAwBr0b,GAC7B56B,KAAK2ud,YAAYpxX,EAAQA,EAAOxrF,QAAQqI,SAAS,GAAIq2C,EAAIC,EAAI65O,EAAa+hG,GAC1EwiF,EAAqBvkL,EACrBwkL,EAAsBziF,EAE1B,IAAIyxB,GAAiBhxZ,EAAG6tB,EAAQ/uB,QAASmB,EAAG4tB,EAAQ3uB,SACpD2uB,EAAQ/uB,QAAU+uB,EAAQ3uB,QAAUsxF,EAAO74F,MAAMknD,YAAc,EAC/DhxB,EAAQy0B,OAAUtiD,EAAG,EAAGC,EAAG,GAC3BhN,KAAKivd,wBAAwBr0b,GAC7B,IACI15B,EADA+0J,EAAmB90J,EAAc,OAErC80J,EAAiBzyJ,aAAa,YAAa,QAC3CyyJ,EAAiBzyJ,aAAa,QAAS,eACvCyyJ,EAAiBvxJ,MAAM+oE,cAAgB,OACvCjtE,SAASuL,KAAKpK,YAAYs0J,GAC1B,IAAIvxJ,EAAQ,cACZ,GAA0B,WAAtB64F,EAAOpkE,MAAMzyB,KAAmB,CAChCsiY,EAAS1zU,GAAiB,OACtBhyD,GAAIi6F,EAAOj6F,GAAK,WAChB0S,MAAO3J,KAAK6lB,KAAK48b,GAAsB,EACvC/4c,OAAQ1J,KAAK6lB,KAAK68b,GAAuB,IAE7C,IAAIt6D,EAAWn/V,GAAiB,KAAOhyD,GAAIi6F,EAAOj6F,GAAK,OACvD0lY,EAAOrnY,YAAY8yZ,GACnBx+P,EAAiBt0J,YAAYqnY,GAC7BhpY,KAAKojF,YAAYuzU,cAAc/7X,EAAS65X,OAAUt5Z,OAAWA,EAAW6tY,OAE7C,SAAtBzrS,EAAOpkE,MAAMzyB,KAClBxF,EAAMlB,KAAKkvd,cAAc3xX,EAAQyrS,EAAQ/yO,EAAkB84T,EAAqBD,GAAoB,IAGpG9lF,EAAS96S,GAAeI,aAAaiP,EAAOj6F,GAAK,WAA6E,GAAhE+I,KAAK6lB,KAAK48b,GAAsBvxX,EAAO74F,MAAMknD,YAAc,GAA0E,GAAjEv/C,KAAK6lB,KAAK68b,GAAuBxxX,EAAO74F,MAAMknD,YAAc,IAC9LqqG,EAAiBt0J,YAAYqnY,GAC7BtkY,GAAS,wBACTskY,EAAOxlY,aAAa,mBAAoB,OACxCwlY,EAAOv6S,WAAW,MAAM2nP,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,GACpDp2U,KAAK41a,gBAAgBjf,cAAc/7X,EAASouW,OAAQ7tY,IAKxD,OAHE+F,GAA6B,SAAtBq8F,EAAOpkE,MAAMzyB,KAAmBxF,EAAM8nY,GAAQxlY,aAAa,QAASkB,GAC7Ek2B,EAAQ/uB,QAAUkyZ,EAAahxZ,EAC/B6tB,EAAQ3uB,QAAU8xZ,EAAa/wZ,EACxBipJ,GAEX22T,EAAcvxd,UAAU4zd,wBAA0B,SAAUr0b,GACpDA,EAAQxgB,WACRwgB,EAAQxgB,SAAS,GAAG/M,UAAY6zY,GAAUM,MAE9C5mX,EAAQ6kM,QAAQ,IAAIhwM,IACpBmL,EAAQunX,QAAQvnX,EAAQ+9B,aACpB/9B,EAAQxgB,WACRwgB,EAAQxgB,SAAS,GAAG/M,UAAY6zY,GAAUO,SAGlDmrE,EAAcvxd,UAAU8zd,iBAAmB,SAAU5xX,EAAQvnF,EAAOD,GAChE,IAAI/U,EAAUu8F,EAAOxrF,QAAQqI,SAAS,GAAGA,SAAS,GAC9CwxC,EAAc2xC,EAAO74F,MAAMknD,YAC/B5qD,EAAQgV,OAASA,GAAShV,EAAQgV,QAAU41C,EAAc,GAC1D5qD,EAAQ+U,QAAUA,GAAU/U,EAAQ+U,SAAW61C,EAAc,GAC7D2xC,EAAOxrF,QAAQ0tN,QAAQ,IAAIhwM,IAC3B8tE,EAAOxrF,QAAQowY,QAAQ5kT,EAAOxrF,QAAQ4mD,cAO1Ci0Z,EAAcvxd,UAAU4yd,mBAAqB,SAAU1wX,EAAQsxX,EAAW37T,GACtE,IAAIo7T,EAAatud,KAAK6sd,YAAYtvX,EAAOj6F,IAAItD,KAAK6mB,MAC9CsI,EAAOnvB,KAAKovd,cAAc7xX,EAAQ+wX,GAClCt4c,EAAQmZ,EAAKnZ,MAAQ,EACrBD,EAASoZ,EAAKpZ,OAAS,EACvB6E,EAAYzZ,EAAc,OAC1BmC,GAAIi6F,EAAOj6F,GAAK,aAChBC,OAAQ,SAAWyS,EAAQ,aAAeD,EAAS,kCAEvD6E,EAAUpX,aAAa,QAAS8qd,EAAWt6Z,YAAcs6Z,EAAWt6Z,YAAYllC,KAAOyuE,EAAOj6F,IAC9Furd,EAAUltd,YAAYiZ,GACtB,IAAIouX,EACAyrB,EACAvzZ,EAsBJ,GArB0B,WAAtBq8F,EAAOpkE,MAAMzyB,MACbsiY,EAAS1zU,GAAiB,OACtBhyD,GAAIi6F,EAAOj6F,GACX0S,MAAO3J,KAAK6lB,KAAKqrE,EAAOxrF,QAAQ0nC,WAAWzjC,OAAS,EACpDD,OAAQ1J,KAAK6lB,KAAKqrE,EAAOxrF,QAAQ0nC,WAAW1jC,QAAU,IAE1D0+Y,EAAWn/V,GAAiB,KAAOhyD,GAAIi6F,EAAOj6F,GAAK,OACnD0lY,EAAOrnY,YAAY8yZ,GACnB75Y,EAAUjZ,YAAYqnY,GACtBhpY,KAAKmvd,iBAAiB5xX,GACtBv9F,KAAKojF,YAAYuzU,cAAcp5T,EAAOxrF,QAAS0iZ,OAAUt5Z,OAAWA,EAAW6tY,IAEpD,SAAtBzrS,EAAOpkE,MAAMzyB,KAClBxF,EAAMlB,KAAKkvd,cAAc3xX,EAAQyrS,EAAQpuX,EAAW2iF,EAAOxrF,QAAQ0nC,WAAW1jC,OAAQwnF,EAAOxrF,QAAQ0nC,WAAWzjC,OAAO,IAGvHgzX,EAAS96S,GAAeI,aAAaiP,EAAOj6F,GAAI+I,KAAK6lB,KAAoE,GAA9DqrE,EAAOxrF,QAAQ0nC,WAAWzjC,MAAQunF,EAAO74F,MAAMknD,cAAoB,EAAGv/C,KAAK6lB,KAAqE,GAA/DqrE,EAAOxrF,QAAQ0nC,WAAW1jC,OAASwnF,EAAO74F,MAAMknD,cAAoB,GAChNhxC,EAAUjZ,YAAYqnY,GACtBA,EAAOv6S,WAAW,MAAM2nP,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,GACpDp2U,KAAK41a,gBAAgBjf,cAAcp5T,EAAOxrF,QAAS0iZ,GAAYzrB,OAAQ7tY,KAEtE+3J,EAAS,CACV,IAAIs7T,EAAcjxX,EAAOxrF,QAAQ0nC,WAAWzjC,MAAQunF,EAAO74F,MAAMknD,YAC7D6ia,EAAelxX,EAAOxrF,QAAQ0nC,WAAW1jC,OAASwnF,EAAO74F,MAAMknD,YAC/DlnD,EAAQ,eACR2H,KAAKC,IAAItM,KAAK0ud,aAAalid,MAAQwJ,EAAQw4c,GAAe,GACxD,iBAAmBnid,KAAKC,IAAItM,KAAK0ud,aAAahid,KAAOqJ,EAAS04c,GAAgB,GAC9E,+DAMN,OALIzlF,aAAkBqmF,oBAClB3qd,GAAS,4BAEXxD,GAA6B,SAAtBq8F,EAAOpkE,MAAMzyB,KAAmBxF,EAAM8nY,GAAQxlY,aAAa,QAASkB,GAC7EkW,EAAU9W,UAAUM,IAAI,sBACjBwW,EAEX,OAAOouX,GAEX4jF,EAAcvxd,UAAU6zd,cAAgB,SAAU3xX,EAAQyrS,EAAQpuX,EAAW7E,EAAQC,EAAOs5c,GACxF,IAAIpud,EAAMohD,GAAkB,OACxBh/C,GAAMi6F,EAAOj6F,IAAMgsd,EAAY,oBAAsB,eAErD14D,EAAYt0W,GAAkB,OAC9Bh/C,GAAMi6F,EAAOj6F,IAAMgsd,EAAY,qBAAuB,cACtD5qd,MAAS,SAAW2H,KAAK6lB,KAAKlc,EAAQ,GAAK,aAC3B3J,KAAK6lB,KAAKnc,EAAS,GAAK,uBACxC20H,MAAS,iBAETigT,EAAeroY,GAAkB,OACjCh/C,GAAMi6F,EAAOj6F,IAAMgsd,EAAY,yBAA2B,kBAC1D5qd,MAAS,SAAW2H,KAAK6lB,KAAKlc,EAAQ,GAAK,aAC3B3J,KAAK6lB,KAAKnc,EAAS,GAAK,yBAQ5C,OANA6gZ,EAAUj1Z,YAAYgpb,GACtBzpb,EAAIS,YAAYi1Z,GAChB5tB,EAAS96S,GAAeI,aAAcghY,EAAa/xX,EAAOj6F,GAAK,WAAci6F,EAAOj6F,GAAK+I,KAAK6lB,KAAKlc,GAAS,EAAG3J,KAAK6lB,KAAKnc,GAAU,GACnI7U,EAAIS,YAAYqnY,GAChBpuX,EAAUjZ,YAAYT,GACtBlB,KAAK41a,gBAAgBjf,cAAcp5T,EAAOxrF,QAAQqI,SAAS,GAAGA,SAAS,GAAI4uX,EAAQ4tB,GAC5E11Z,GAEX0rd,EAAcvxd,UAAU+zd,cAAgB,SAAU7xX,EAAQ+wX,GACtD,IAAIt4c,EAAQunF,EAAOxrF,QAAQ0nC,WAAWzjC,MAClCD,EAASwnF,EAAOxrF,QAAQ0nC,WAAW1jC,OASvC,OARK/V,KAAKuqS,aAAgBvqS,KAAKssY,cAK3Bt2X,EAAQhW,KAAKuqS,YACbx0R,EAAS1J,KAAKC,IAAItM,KAAKssY,aAAcv2X,KALrCC,GAAShW,KAAK0ud,aAAalid,KAAOxM,KAAK0ud,aAAajid,MAAQ8wF,EAAO74F,MAAMknD,YACzE71C,GAAU/V,KAAK0ud,aAAahid,IAAM1M,KAAK0ud,aAAa/hd,OAAS4wF,EAAO74F,MAAMknD,aAMvE,IAAIn8B,GAAKzZ,EAAOD,IAI3B62c,EAAcvxd,UAAUwmF,iBAAmB,SAAUhhF,GACjD,IAAIoL,EACAJ,EACAu/S,EACJ,IAAiC,IAA7BvqT,EAAE6F,KAAKnI,QAAQ,SAAiB,CAEhC,IAAI2N,GADJk/S,EAAWvqT,GACUu/D,eAAe,GAAGpK,QACnClqD,EAAQs/S,EAAShrP,eAAe,GAAGrK,QACvC9pD,EAAUC,EAAQlM,KAAKgB,QAAQoT,UAC/BvI,EAAUC,EAAQ9L,KAAKgB,QAAQmT,gBAG/BlI,EAAUpL,EAAEm1D,QAAUh2D,KAAKgB,QAAQoT,UACnCvI,EAAUhL,EAAEk1D,QAAU/1D,KAAKgB,QAAQmT,WAEvC,OAASpH,EAAGlB,EAASmB,EAAGf,IAE5B2gd,EAAcvxd,UAAU0uT,UAAY,SAAUlpT,EAAGi1D,IACzC91D,KAAKuvd,mBAAuBvvd,KAAKuyb,gBAC9Bvyb,KAAKuyb,eAAejvb,GAAK,eAAiBtD,KAAKuvd,kBAAkBjsd,KACpEtD,KAAKuvd,kBAAkBzrd,UAAUS,OAAO,kBACxCvE,KAAKuvd,kBAAkB7qd,MAAM6lD,gBAAkB,GAC/CvqD,KAAKuvd,kBAAoB,MAE7B,IAAIjsd,EAAKzC,EAAEsG,OAAO7D,GAAGpG,MAAM,cAAc,GACzC,GAAI8C,KAAK6sd,YAAYvpd,GAAK,CACtB,IAAIsX,EAAYpa,SAASyuB,eAAe3rB,EAAK,cAC7CsX,EAAU9W,UAAUM,IAAI,kBACxBpE,KAAKuvd,kBAAoB30c,EAE7B/Z,EAAE6kB,kBAENknc,EAAcvxd,UAAU4ia,QAAU,SAAU5mV,GACxC,GAAIA,GAAOA,EAAIlwE,OACX,GAA0B,eAAtBkwE,EAAIm4Y,WAAWlsd,GAAqB,CACpC,IAAItC,EAAUR,SAASyuB,eAAe,cAClCjuB,EAAQ8C,UAAUK,SAAS,wBAC3BnD,EAAQqC,UAAY,sCACpB7C,SAASyuB,eAAe,aAAajyB,MAAQ,GAC7CgD,KAAKyvd,cAAc,UAIvBp4Y,EAAI3xD,kBAIhBknc,EAAcvxd,UAAU06I,MAAQ,SAAU1+D,GACtC,IAAIt3E,EAAQC,KACZ,GAAIA,KAAKgtd,aAAc,CACnB,IAAI0C,EAAY1vd,KACFQ,SAASyuB,eAAe,cAC9B5rB,UAAY,iDAChBg0E,GAAoB,UAAZA,EAAIh6E,KAAmC,KAAhBg6E,EAAIpvD,SAM/BjoB,KAAKsrB,OACLprB,aAAaF,KAAKsrB,OAEtBtrB,KAAKsrB,MAAQnrB,WAAW,WAChBk3E,EAAIlwE,kBAAkBwod,mBACtBD,EAAUD,cAAcp4Y,EAAIlwE,OAAOnK,OACnC+C,EAAMurB,MAAQ,OAEnB,MAbC+rD,EAAIlwE,kBAAkBwod,kBACtB3vd,KAAKyvd,cAAcp4Y,EAAIlwE,OAAOnK,SAgB9C4vd,EAAcvxd,UAAUyia,UAAY,SAAUzmV,GAC1C,IAAI/zE,EAAK+zE,EAAIlwE,OAAO7D,GAAGpG,MAAM,cAAc,GAC3C,GAAI8C,KAAKuyb,eAAgB,CACrB,GAAIjvb,IAAOtD,KAAKuyb,eAAejvb,GAAI,CACf9C,SAASyuB,eAAejvB,KAAKuyb,eAAejvb,GAAK,cACvDQ,UAAUS,OAAO,qBAC3B,IAAItE,GAAS+I,SAAUhJ,KAAKuyb,eAAejvb,GAAIgE,SAAUhE,GAEzDtD,KAAK0mB,QADS,yBACQzmB,GAEVO,SAASyuB,eAAejvB,KAAKuyb,eAAejvb,GAAK,cACvDoB,MAAM6lD,gBAAkB,GAClCvqD,KAAKuyb,eAAiB,KAE1B,GAAIvyb,KAAK6sd,YAAYvpd,GAAK,CACN9C,SAASyuB,eAAe3rB,EAAK,cACnCQ,UAAUM,IAAI,qBACxBpE,KAAKuyb,eAAiBvyb,KAAK6sd,YAAYvpd,GACvC+zE,EAAI3xD,mBAKZknc,EAAcvxd,UAAUu0d,cAAgB,WAChC5vd,KAAKqtd,YACLrtd,KACKw0G,UAAY,IAAIlF,GAAUtvG,KAAKgB,SAChC8vG,WAAY,sBACZ5hG,OAAQlP,KAAKkP,OACbmiG,UAAWrxG,KAAKqxG,UAChBsC,SAAU3zG,KAAK2zG,SACfrB,KAAM,SAAUryG,GACZ,IACIK,EAASk1D,GAAav1D,EAAW,OAAG,eACxC,GAAIK,GAAUA,EAAOwD,UAAUK,SAAS,aAAc,CAElD7D,EAAkB,cAAE,GAAG8jb,UAAU9yD,KAAKrxX,KAG9Cq0G,UAAY9nG,KAAMxM,KAAKgvd,cAAcrjd,OAAOoB,EAAGL,IAAK1M,KAAKgvd,cAAcrjd,OAAOqB,OAI1F4/c,EAAcvxd,UAAUg2G,UAAY,SAAUxwG,GAC1C,IAAIG,EAAUhB,KAAKkP,OAAO,GACtBlO,GACAA,EAAQwC,aAAa,YAAaxD,KAAKgB,QAAQsC,KAGvDspd,EAAcvxd,UAAUs4G,SAAW,SAAU9yG,GACpC20D,GAAa30D,EAAEsG,OAAQ,cACxB5C,EAAO1D,EAAEqO,SAKjB09c,EAAcvxd,UAAUszd,YAAc,SAAUpxX,EAAQ6wX,EAAiB39Z,EAAIC,EAAI16C,EAAOD,GACpF,GAAIwnF,aAAkBr/C,GAAW,CAC7B,IAAInsC,EAAUwrF,EAAOxrF,QACrBwrF,EAAOxrF,QAAUq8c,EAAgBh0c,SAAS,GAI1C,IAAK,IAHD+Y,EAAQoqE,EAAOz5C,MAAM2M,EAAIC,EAAI16C,EAAOD,EAAQq4c,EAAgBh0c,SAAS,IACrEq6B,EAAOz+B,EAAQ,EAAIo4c,EAAgBh0c,SAAS,GAAGA,SAAS,GAAGvO,QAAUsnB,EAAMpmB,EAAI,EAC/E63Z,EAAO7uZ,EAAS,EAAIq4c,EAAgBh0c,SAAS,GAAGA,SAAS,GAAGnO,QAAUknB,EAAMnmB,EAAI,EAC3E5O,EAAK,EAAGyE,EAAKurd,EAAgBh0c,SAAS,GAAGA,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC9E,IAAIiC,EAAQwC,EAAGzE,GACfiC,EAAMwL,SAAW4oC,EACjBp0C,EAAM4L,SAAW24Z,EACjBvka,EAAMshZ,YAAa,EAEvBpkT,EAAOxrF,QAAUA,OAEhB,GAAIwrF,EAAOpkE,iBAAiBmzX,IAAatsZ,KAAKytZ,WAAY,CACvD17Y,EAAUwrF,EAAOxrF,QACrBwrF,EAAOxrF,QAAUq8c,EACjBA,EAAgBh0c,SAAS,GAAGpE,MAAQA,EACpCo4c,EAAgBh0c,SAAS,GAAGrE,OAASA,EACrC/V,KAAKytZ,WAAW0jC,YAAan7a,MAAOA,EAAOD,OAAQA,GAAUwnF,EAAQA,EAAQ,MAC7EA,EAAOxrF,QAAUA,OAGjBy+C,GAAa49Z,EAAgBh0c,SAAS,GAAIq2C,EAAIC,EAAI09Z,IAG1DxB,EAAcvxd,UAAU6xd,gBAAkB,WACtCltd,KAAKitd,iBAAiBpxZ,SACtB77D,KAAKotd,iBACLptd,KAAKitd,iBAAiB/oa,YAE1B0oa,EAAcvxd,UAAU+xd,eAAiB,WACrC,IAAK,IAAIjxd,EAAI,EAAGA,EAAI6D,KAAKoxD,SAAS30D,OAAQN,IAAK,CAC3C,IAAI0zd,EAAW7vd,KAAKoxD,SAASj1D,GAC7B6D,KAAKutd,YAAYsC,GACjB7vd,KAAK0td,cAAcmC,KAG3BjD,EAAcvxd,UAAUkyX,cAAgB,WACpC,IAAIuiG,EAAY3ud,EAAc,OAASmC,GAAItD,KAAKgB,QAAQsC,GAAK,YAC7Dwsd,EAAUtsd,aAAa,QAAS,qCAChCssd,EAAUzsd,UAAY,gBACtBrD,KAAKgB,QAAQW,YAAYmud,GACzB,IAAIC,EAAUvvd,SAASW,cAAc,SACrC4ud,EAAQ/oc,YAAc,gBACtB+oc,EAAQzsd,GAAK,YACbysd,EAAQvsd,aAAa,QAAS,0BAC9Busd,EAAQ1sd,UAAY,UACpBysd,EAAUnud,YAAYoud,GACtB,IAAI7rZ,EAAO/iE,EAAc,QAAUmC,GAAI,aAAcD,UAAW,wCAChEysd,EAAUnud,YAAYuiE,IAE1B0oZ,EAAcvxd,UAAUo0d,cAAgB,SAAUzyd,GAC9C,IAEI2wd,EAFAH,KACAxsd,EAAUR,SAASyuB,eAAe,iBAGtC,GAAIjuB,EACA,IAAK,IAAIqlB,EAAIrlB,EAAQoZ,SAAS3d,OAAS,EAAG4pB,GAAK,EAAGA,IAC9CrlB,EAAQsE,YAAYtE,EAAQoZ,SAASiM,IAI7C,IAAK,IAAIlqB,EAAI,EAAGA,EAAI6D,KAAKoxD,SAAS30D,OAAQN,IAEtC,IAAK,IADD6xd,EAAqBhud,KAAKoxD,SAASj1D,GAC9BsnB,EAAI,EAAGA,EAAIuqc,EAAmB38Z,QAAQ50D,OAAQgnB,IAAK,CACxD,IAAIzF,EAAOgwc,EAAmB38Z,QAAQ5tC,GACxB,KAAVzmB,IAAwE,IAAxDghB,EAAK1a,GAAGsS,cAAcrX,QAAQvB,EAAM4Y,gBACpD43c,EAAYhpd,KAAKwZ,GAI7B,IAAIgyc,EAAgB/ra,GAAYjkD,KAAKgwd,eAUrC,GATIA,IACAxC,EAAcwC,EAAcxC,QAG3Bxsd,IAEDA,EADA2sd,EAAa3td,KAAKiwd,oBAAoBtC,IAItCH,EAAY/wd,OAAS,EACrB,IAAK,IAAI2B,EAAK,EAAG8xd,EAAgB1C,EAAapvd,EAAK8xd,EAAczzd,OAAQ2B,IAAM,CAC3E,IAAIm/F,EAAS2yX,EAAc9xd,GAC3B4B,KAAKiud,mBAAmB1wX,EAAQv8F,QAGnC,GAAc,KAAVhE,EAAc,CACnB,IAAImzd,EAAW3vd,SAASW,cAAc,OACtCgvd,EAAS3sd,aAAa,KAAM,YAC5B2sd,EAASnud,UAAY,sBACrBmud,EAAS3sd,aAAa,QAAS,qCAC/BxC,EAAQW,YAAYwud,OAEnB,CACe3vd,SAASyuB,eAAe,cAC9B5rB,UAAY,sCACtBrD,KAAKitd,iBAAiB1+Z,WAAW,KAGzCq+Z,EAAcvxd,UAAU40d,oBAAsB,SAAUtC,IACpDA,EAAantd,SAASW,cAAc,QACzBqC,aAAa,KAAM,iBAC9Bmqd,EAAWnqd,aAAa,QAAS,+BACjCxD,KAAKgB,QAAQW,YAAYgsd,GAMzB,OADA3td,KAAKitd,iBAAiBh4Q,SAHlB9uH,OAAQ,iBAAkBu8G,UAAU,EACpC9nK,QAAS,kBAEoC,GAC1C+yb,GAKXf,EAAcvxd,UAAUopB,WAAa,WACjC,IAAIm3F,EAAapwG,GAAQigF,gBACrBo+N,EAAYr+S,GAAQmgF,cACpB4wB,EAAY/wG,GAAQkgF,eAGxBnmF,GAAanB,IAAIpE,KAAKgB,QAAS46G,EAAY57G,KAAK89Z,UAAW99Z,MAC3DuF,GAAanB,IAAIpE,KAAKgB,QAASu7G,EAAWv8G,KAAK+pT,UAAW/pT,MAC1DuF,GAAanB,IAAIpE,KAAKgB,QAAS6oT,EAAW7pT,KAAKi+Z,QAASj+Z,MACxDuF,GAAanB,IAAIpE,KAAKgB,QAJP,QAI0BhB,KAAK+1I,MAAO/1I,MAErDA,KAAK4vd,iBAKThD,EAAcvxd,UAAU+kH,aAAe,WACnC,IAAIxE,EAAapwG,GAAQigF,gBACrBo+N,EAAYr+S,GAAQmgF,cACpB4wB,EAAY/wG,GAAQkgF,eAGxBnmF,GAAahB,OAAOvE,KAAKgB,QAAS46G,EAAY57G,KAAK89Z,WACnDv4Z,GAAahB,OAAOvE,KAAKgB,QAASu7G,EAAWv8G,KAAK+pT,WAClDxkT,GAAahB,OAAOvE,KAAKgB,QAAS6oT,EAAW7pT,KAAKi+Z,SAClD14Z,GAAahB,OAAOvE,KAAKgB,QAJV,QAI6BhB,KAAK+1I,QAErD3pD,IACIllF,EAAS,MACV0ld,EAAcvxd,UAAW,iBAAa,GACzC+wF,IACIllF,EAAS,SACV0ld,EAAcvxd,UAAW,aAAS,GACrC+wF,IACIllF,EAAS,SACV0ld,EAAcvxd,UAAW,cAAU,GACtC+wF,IACI/jF,KAAeqkd,KAChBE,EAAcvxd,UAAW,gBAAY,GACxC+wF,IACIllF,KACD0ld,EAAcvxd,UAAW,qBAAiB,GAC7C+wF,IACIllF,KACD0ld,EAAcvxd,UAAW,qBAAiB,GAC7C+wF,IACIllF,KACD0ld,EAAcvxd,UAAW,yBAAqB,GACjD+wF,IACIllF,KACD0ld,EAAcvxd,UAAW,mBAAe,GAC3C+wF,IACIllF,KACD0ld,EAAcvxd,UAAW,oBAAgB,GAC5C+wF,IACIrkF,GAAUyE,KAAM,GAAIC,MAAO,GAAIC,IAAK,GAAIC,OAAQ,IAAM6oN,KACvDo3P,EAAcvxd,UAAW,oBAAgB,GAC5C+wF,IACIllF,GAAS,IACV0ld,EAAcvxd,UAAW,iBAAa,GACzC+wF,IACIrkF,KAAY4kd,KACbC,EAAcvxd,UAAW,qBAAiB,GAC7C+wF,IACIllF,GAAS,IACV0ld,EAAcvxd,UAAW,oBAAgB,GAC5C+wF,IACIllF,GAAS,IACV0ld,EAAcvxd,UAAW,uBAAmB,GAC/C+wF,IACIllF,EAAS,aACV0ld,EAAcvxd,UAAW,kBAAc,GAC1C+wF,IACItjF,KACD8jd,EAAcvxd,UAAW,8BAA0B,GACtD+wF,IACIllF,KACD0ld,EAAcvxd,UAAW,uBAAmB,GAC/C+wF,IACIllF,KACD0ld,EAAcvxd,UAAW,4BAAwB,GAC7Cuxd,GACTz/W,ICv/BEthB,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GAoB5Dgzb,GAA0B,SAAU1jY,GAEpC,SAAS0jY,EAASp9c,EAAShS,GACvB,IAAIjB,EAAQ2sF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAiBnD,OAfAD,EAAMw+B,KAAO,SAEbx+B,EAAMuD,GAAK,WACXvD,EAAMswd,WAAa,GACnBtwd,EAAMy9C,WAAa,KACnBz9C,EAAM0xB,aAAe,KACrB1xB,EAAM+zT,UAAY,KAClB/zT,EAAM+jD,MAAQ,KACd/jD,EAAMu9Z,UAAW,EACjBv9Z,EAAMuwd,cAAgB,EACtBvwd,EAAMqjD,iBAAmB,EACzBrjD,EAAMujD,eAAiB,EACvBvjD,EAAMosB,SACNpsB,EAAMzD,OAAQ,EACdyD,EAAMosB,OAAUnW,MAAOjW,EAAMiW,MAAOD,OAAQhW,EAAMgW,QAC3ChW,EA80BX,OAj2BA8rF,GAAUukY,EAAU1jY,GA0BpB0jY,EAAS/0d,UAAU0tF,kBAAoB,SAAUiF,EAASC,GACtD,IACK,IAAI7vF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0wF,GAAU5vF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,WACD4B,KAAKy3S,UAAUzpN,EAAQz+C,UACvB,MACJ,IAAK,QACL,IAAK,SACDvvC,KAAKuwd,eACLvwd,KAAKy3S,UAAUz3S,KAAKuvC,aASpC6gb,EAAS/0d,UAAU+yG,eAAiB,WAEhC,OAAOpuG,KAAK4uG,cADK,YAMrBwhX,EAAS/0d,UAAUoX,UAAY,WAC3BzS,KAAKgB,QAAQ0D,MAAM4oB,WAAa,cAChCttB,KAAKogH,eACLpgH,KAAKykB,cAET2rc,EAAS/0d,UAAUsyG,OAAS,WACxB3tG,KAAK41a,gBAAkB,IAAI/f,GAAgB71Z,KAAKgB,QAAQsC,GAAI,IAAI0sB,IAAe,GAC/EhwB,KAAKuwd,eACLvwd,KAAKy3S,UAAUz3S,KAAKuvC,WAExB6gb,EAAS/0d,UAAUqta,aAAe,SAAUsgB,GAQxC,OANIA,EAAK97a,WAAW3O,QAAQ,MAAQ,GAAKyqb,EAAK97a,WAAW3O,QAAQ,KAAO,EAC7Dyqb,EAAK97a,WAGL87a,EAAK97a,WAAa,MAIjCkjd,EAAS/0d,UAAUk1d,aAAe,SAAUv9c,GACxC,IAAIg2X,EAASxoY,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,WAClD0lY,IACDA,EAASxoY,SAASW,cAAc,OAChCnB,KAAKgB,QAAQW,YAAYqnY,IAQ7B3zU,GAAiB2zU,GALb1lY,GAAMtD,KAAKgB,QAAQsC,GAAK,UAAWonI,MAAS,UAC5ChmI,MAAS,6BAA+B1E,KAAK0oa,aAAa1oa,KAAKmsB,MAAMpW,QAAU,WAC3E/V,KAAK0oa,aAAa1oa,KAAKmsB,MAAMnW,OAC7B,sDAGRhW,KAAKgB,QAAQwC,aAAa,WAAYgmB,OAAO,IAC7CxpB,KAAKgB,QAAQ0D,MAAMmV,SAAW,SAC9B7Z,KAAKgB,QAAQ0D,MAAMqR,OAASyT,OAAOxpB,KAAKmsB,MAAMpW,QAC9C/V,KAAKgB,QAAQ0D,MAAMsR,MAAQwT,OAAOxpB,KAAKmsB,MAAMnW,OAC7ChW,KAAKgpY,OAASA,GAElBonF,EAAS/0d,UAAUo8S,UAAY,SAAUn0S,GACrC,IAAItC,EAAUR,SAASyuB,eAAe3rB,GAEtC,GAAItD,KAAKM,OAAQ,CACb,IAAIkwd,EAAYxwd,KAAKM,OACrBN,KAAKM,OAAS,KACdkwd,EAAUphC,YAAY,KAAMpvb,KAAKsD,IACjCtD,KAAKywd,eAAezwd,MAExBA,KAAKM,OAASN,KAAK0wd,WAAW1vd,EAPf,iBAQXhB,KAAKM,QACLN,KAAKM,OAAO8ub,YAAYpvb,OAGhCowd,EAAS/0d,UAAUq1d,WAAa,SAAU1vd,EAASuF,GAG/C,IAAK,IAFDwnC,EACAopH,EAAIn2J,EAAQuF,GAAU9J,OACjBN,EAAI,EAAGA,EAAIg7J,EAAGh7J,IACnB,GAAIu5D,GAAS10D,EAAQuF,GAAUpK,GAAG6E,QAAS,aAAc,CACrD+sC,EAAU/sC,EAAQuF,GAAUpK,GAC5B,MAGR,OAAO4xC,GAEXqib,EAAS/0d,UAAU+kH,aAAe,WAC9B,IAAI7iH,EAAQiO,GAAQigF,gBAChBb,EAAOp/E,GAAQkgF,eAEfrzD,EAAS7sB,GAAQC,UAAY,eAAiB,aAC9CsmV,EAAgBvmV,GAAQC,UAGxBoT,GAFarT,GAAQqb,KAAKkQ,KAEnBvrB,GAAQmgF,eACnBpmF,GAAahB,OAAOvE,KAAKgB,QAASzD,EAAOyC,KAAK89Z,WAC9Cv4Z,GAAahB,OAAOvE,KAAKgB,QAAS4pF,EAAM5qF,KAAK+pT,WAC7CxkT,GAAahB,OAAOvE,KAAKgB,QAAS6d,EAAM7e,KAAKi+Z,SAC7C14Z,GAAahB,OAAOvE,KAAKgB,QAASq3B,EAAQr4B,KAAK2wd,iBAC/Cprd,GAAahB,OAAO1I,OAAQ,SAAUmE,KAAKuoa,cAC3C,IAAI3tZ,EAAYpa,SAASyuB,eAAejvB,KAAKuvC,SAAW,WACpD30B,GACArV,GAAahB,OAAOqW,EAAW,SAAU5a,KAAKqsa,WAGtD+jD,EAAS/0d,UAAUopB,WAAa,WAC5B,IAAIlnB,EAAQiO,GAAQigF,gBAChB5sE,EAAOrT,GAAQmgF,cACff,EAAOp/E,GAAQkgF,eACfrzD,EAAS7sB,GAAQC,UAAY,eAAiB,aAC9CsmV,EAAgBvmV,GAAQC,UACXD,GAAQqb,KAAKkQ,KAE9BxxB,GAAanB,IAAIpE,KAAKgB,QAASzD,EAAOyC,KAAK89Z,UAAW99Z,MACtDuF,GAAanB,IAAIpE,KAAKgB,QAAS4pF,EAAM5qF,KAAK+pT,UAAW/pT,MACrDuF,GAAanB,IAAIpE,KAAKgB,QAAS6d,EAAM7e,KAAKi+Z,QAASj+Z,MACnDuF,GAAanB,IAAIpE,KAAKgB,QAASq3B,EAAQr4B,KAAK2wd,gBAAiB3wd,MAC7DuF,GAAanB,IAAIvI,OAAQ,SAAUmE,KAAKuoa,aAAcvoa,MACtD,IAAI4a,EAAYpa,SAASyuB,eAAejvB,KAAKuvC,SAAW,WACpD30B,GACArV,GAAanB,IAAIwW,EAAW,SAAU5a,KAAKqsa,SAAUrsa,OAS7Dowd,EAAS/0d,UAAUi0b,eAAiB,SAAU5nU,GAC1CA,EAAKshR,OAAShpY,KAAKgpY,OACnB,IAAI3rW,EAAI78B,SAASyuB,eAAejvB,KAAKgpY,OAAO1lY,GAAK,QAC7C+5B,GACAA,EAAE58B,WAAW6E,YAAY+3B,GAE7B,IAMIpgB,EAAMq4C,GAAiB,OALvBhyD,GAAItD,KAAKgpY,OAAO1lY,GAAK,OACrBwjB,QAAS,MACT8pc,MAAO,+BACPlmV,MAAS,iBAGb1qI,KAAKid,IAAMA,EACXyqG,EAAKzqG,IAAMA,EACXyqG,EAAKshR,OAAOrnY,YAAYsb,GACxB,IACIjc,EADMR,SAASyuB,eAAejvB,KAAKgB,QAAQsC,IAE3Cutd,EAAS7vd,EAAQ0uB,YACjBohc,EAAU9vd,EAAQ2uB,aAClBohc,EAAQ/vd,EAAQ4K,wBAEhBold,EAAWn1d,OAAOm1d,QAAU,GAAuB,EAAlBn1d,OAAOm1d,QAAen1d,OAAOm1d,QAC9DC,EAAWp1d,OAAOo1d,QAAU,GAAuB,EAAlBp1d,OAAOo1d,QAAep1d,OAAOo1d,QACnD,IAAXJ,IACAA,EAASxkd,KAAKkT,MAAQ1jB,OAAO0d,WAAay3c,EAAW3kd,KAAKkT,MAAMwxc,EAAMvkd,QAE1D,IAAZskd,IACAA,EAAUzkd,KAAKkT,MAAQ1jB,OAAOyd,YAAc23c,EAAW5kd,KAAKkT,MAAMwxc,EAAMrkd,OAE5EuQ,EAAIzZ,aAAa,QAASgmB,OAAOqnc,IACjC5zc,EAAIzZ,aAAa,SAAUgmB,OAAOsnc,IAClC9wd,KAAKmsB,MAAMnW,MAAQ66c,EACnB7wd,KAAKmsB,MAAMpW,OAAS+6c,EACpB,IAAIptd,EACJ,IAAKgkH,EAAKgiU,gBAAiB,CACvBhiU,EAAKgiU,gBAAkBlpb,SAASW,cAAc,OAC9BX,SAASyuB,eAAejvB,KAAKgB,QAAQsC,IACrDokH,EAAKiuT,aAAeznV,GAAeI,aAAatuF,KAAKgB,QAAQsC,GAAK,gBAAiBtD,KAAKmsB,MAAMnW,MAAOhW,KAAKmsB,MAAMpW,QAChH2xG,EAAKiuT,aAAanya,aAAa,QAAS,0CACxCkkH,EAAKgiU,gBAAgB/nb,YAAY+lH,EAAKiuT,cACtCjuT,EAAKshR,OAAOrnY,YAAY+lH,EAAKgiU,iBAEjChmb,GACIJ,GAAMtD,KAAKgB,QAAQsC,GAAK,oBACxBoB,MAAS,SAAW1E,KAAKmsB,MAAMnW,MAAQ,cAAgBhW,KAAKmsB,MAAMpW,OAAS,yCAE/Es/C,GAAiBqyD,EAAKgiU,gBAAiBhmb,GACvC1D,KAAKkxd,gBAAgBxpW,EAAKshR,QAC1BhpY,KAAKoqb,kBAAkB1iU,EAAKshR,OAAQthR,GACpC1nH,KAAKmxd,qBAAqBzpW,IAG9B0oW,EAAS/0d,UAAUo1d,eAAiB,SAAU/oW,GAC1C,IAAIzqG,EAAMzc,SAASyuB,eAAejvB,KAAKgpY,OAAO1lY,GAAK,QACnDtD,KAAKgpY,OAAO1jY,YAAY2X,GACxB,IAAI25Y,EAAYp2Z,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,cAC1DtD,KAAKgpY,OAAO1jY,YAAYsxZ,GACxB,IAAI+e,EAAen1a,SAASyuB,eAAejvB,KAAKsD,GAAK,qBACrDtD,KAAKgpY,OAAO1jY,YAAYqwa,GACxBjuT,EAAKgiU,gBAAkB,KACvBhiU,EAAKiuT,aAAe,MAExBy6C,EAAS/0d,UAAU61d,gBAAkB,SAAUloF,GAC3C,IAAI9nY,EAAMV,SAASW,cAAc,OAEjCk0D,GAAiBn0D,GADJoC,GAAMtD,KAAKgB,QAAQsC,GAAK,aAAconI,MAAS,iBAE5D,IAAIksR,EAAY11Z,EAChBA,EAAIwD,MAAM+oE,cAAgB,OAC1BvsE,EAAIwD,MAAMwP,SAAW,WACrBhT,EAAIwD,MAAM8H,KAAO,MACjBtL,EAAIwD,MAAMgI,IAAM,MAChB,IAAI0kd,EAAU5wd,SAASW,cAAc,OAQrC,OAHAk0D,GAAiB+7Z,GAHb9td,GAAMtD,KAAKgB,QAAQsC,GAAK,iBACxBoB,MAAS,wCAGbkyZ,EAAUj1Z,YAAYyvd,GACtBpoF,EAAOrnY,YAAYi1Z,GACZA,GAEXw5D,EAAS/0d,UAAU+ub,kBAAoB,SAAUphD,EAAQthR,GACrD,IAAIkjU,EAAiB5qb,KAAKM,OAAOkgC,UAAUxgC,KAAKgB,QAAQsC,GAAK,mBAAoBtD,KAAKmsB,MAAMnW,MAAOhW,KAAKmsB,MAAMpW,QAC1G2kZ,EAAcplW,GAAiB,KAAOhyD,GAAMtD,KAAKgB,QAAQsC,GAAK,iBAClEsnb,EAAejpb,YAAY+4Z,GAC3BhzS,EAAKgiU,gBAAgB/nb,YAAYipb,GACjCr1X,GAAgBq1X,GAAkBlgT,MAAS,oBAE/C0lV,EAAS/0d,UAAU81d,qBAAuB,SAAUzpW,GAChD,IAAIzqG,EAAMzc,SAASyuB,eAAejvB,KAAKgpY,OAAO1lY,GAAK,gBAC/C2Z,GACAA,EAAIxc,WAAW6E,YAAY2X,GAU/BA,EAAMq4C,GAAiB,OAPnBhyD,GAAItD,KAAKgpY,OAAO1lY,GAAK,eACrBwjB,QAAS,MACT8pc,MAAO,+BACPlsd,MAAS,oEACTsR,MAAOhW,KAAKmsB,MAAMnW,MAClBD,OAAQ/V,KAAKmsB,MAAMpW,SAGvB2xG,EAAKshR,OAAOrnY,YAAYsb,GACxB,IAAIo0c,EAAM/7Z,GAAiB,KAAOhyD,GAAMtD,KAAKsD,GAAK,iBAAkBoB,MAAS,wBAC7EuY,EAAItb,YAAY0vd,GAChB,IAAI3+b,EAAO4iC,GAAiB,QACxBl3B,KAAQ,cAAepoB,MAAS,OAAQD,OAAU,OAAQ20H,MAAS,mBACnEpnI,GAAMtD,KAAKgpY,OAAO1lY,GAAK,qBAE3BovB,EAAKlvB,aAAa,QAAS,2BAC3B6td,EAAI1vd,YAAY+wB,GAChB,IACI2K,EAAIi4B,GAAiB,KAAOhyD,GAAMtD,KAAKgpY,OAAO1lY,GAAK,iBAAkBoB,MAAS,uBAClF2sd,EAAI1vd,YAAY07B,GAChB,IAAIi0b,EAAYh8Z,GAAiB,QAAUhyD,GAAMtD,KAAKgpY,OAAO1lY,GAAK,eAAgB86B,KAAQ,gBAC1Ff,EAAE17B,YAAY2vd,GACdtxd,KAAKuxd,qBAAqB,OAAQl0b,GAClCr9B,KAAKuxd,qBAAqB,QAASl0b,GACnCr9B,KAAKuxd,qBAAqB,MAAOl0b,GACjCr9B,KAAKuxd,qBAAqB,SAAUl0b,GACpCr9B,KAAKuxd,qBAAqB,UAAWl0b,GACrCr9B,KAAKuxd,qBAAqB,WAAYl0b,GACtCr9B,KAAKuxd,qBAAqB,aAAcl0b,GACxCr9B,KAAKuxd,qBAAqB,cAAel0b,IAE7C+yb,EAAS/0d,UAAUk2d,qBAAuB,SAAUx6b,EAAMz2B,GAC5CN,KAAKid,IAAf,IACIkc,EAOAm4b,EAAYh8Z,GALZn8B,EADS,QAATpC,GAA2B,WAATA,GAA8B,UAATA,GAA6B,SAATA,EACnD,OAGA,UAE8BzzB,GAAMtD,KAAKgpY,OAAO1lY,GAAK,UAAYyzB,IAC7Ez2B,EAAOqB,YAAY2vd,GACnB,IAAIE,EAAYl8Z,GAAiBn8B,GAC7B71B,GAAMtD,KAAKgpY,OAAO1lY,GAAKyzB,EAAM2zG,MAAS,kBAAmBtsG,KAAQ,gBAErE99B,EAAOqB,YAAY6vd,IAEvBpB,EAAS/0d,UAAUo2d,wBAA0B,WACzC,IAAI7uD,EAAO5ia,KAAKyxB,aAAa1kB,EAAI/M,KAAK8zT,UAAU/mT,EAC5C81Z,EAAO7ia,KAAKyxB,aAAazkB,EAAIhN,KAAK8zT,UAAU9mT,EAC5CmiB,EAAO,IAAIM,GACfN,EAAKnZ,MAAQ,EACbmZ,EAAKpZ,OAAS,EACd,IAAIhJ,EAAI,EACJC,EAAI,EAGR,OAAQhN,KAAK0xd,iBACT,IAAK,OACDvic,EAAKnZ,OAAS4sZ,EACdzzY,EAAKpZ,QAAU6sZ,EAAO5ia,KAAKswd,cAC3Bvjd,EAAI61Z,EACJ51Z,EAAI41Z,EAAO5ia,KAAKswd,cAChBtjd,GAAK,EACL,MACJ,IAAK,QACDmiB,EAAKnZ,OAAS4sZ,EACdzzY,EAAKpZ,QAAU6sZ,EAAO5ia,KAAKswd,cAC3Btjd,EAAI41Z,EAAO5ia,KAAKswd,cAChBtjd,IAAM,EACN,MACJ,IAAK,MACDmiB,EAAKpZ,QAAU8sZ,EACf1zY,EAAKnZ,OAAS6sZ,EAAO7ia,KAAKswd,cAC1Btjd,EAAI61Z,EACJ91Z,EAAI81Z,EAAO7ia,KAAKswd,cAChBvjd,GAAK,EACL,MACJ,IAAK,SACDoiB,EAAKpZ,QAAU8sZ,EACf1zY,EAAKnZ,OAAS6sZ,EAAO7ia,KAAKswd,cAC1Bvjd,EAAI81Z,EAAO7ia,KAAKswd,cAChBvjd,IAAM,EACN,MACJ,IAAK,UACGV,KAAKE,IAAIs2Z,GAAQx2Z,KAAKE,IAAIq2Z,GAC1BA,EAAOC,EAAO7ia,KAAKswd,cAGnBztD,EAAOD,EAAO5ia,KAAKswd,cAEvBnhc,EAAKnZ,OAAS4sZ,EACdzzY,EAAKpZ,QAAU8sZ,EACf91Z,EAAI61Z,EACJ51Z,EAAI61Z,EACJ,MACJ,IAAK,WACGx2Z,KAAKE,IAAIs2Z,GAAQx2Z,KAAKE,IAAIq2Z,GAC1BA,GAAQC,EAAO7ia,KAAKswd,cAGpBztD,GAASD,EAAO5ia,KAAKswd,cAEzBtjd,EAAI61Z,EACJ1zY,EAAKnZ,OAAS4sZ,EACdzzY,EAAKpZ,QAAU8sZ,EACf,MACJ,IAAK,aACGx2Z,KAAKE,IAAIs2Z,GAAQx2Z,KAAKE,IAAIq2Z,GAC1BA,GAAQC,EAAO7ia,KAAKswd,cAGpBztD,GAAQD,EAAO5ia,KAAKswd,cAExBvjd,EAAI61Z,EACJzzY,EAAKnZ,OAAS4sZ,EACdzzY,EAAKpZ,QAAU8sZ,EACf,MACJ,IAAK,cACGx2Z,KAAKE,IAAIs2Z,GAAQx2Z,KAAKE,IAAIq2Z,GAC1BA,EAAOC,EAAO7ia,KAAKswd,cAGnBztD,EAAOD,EAAO5ia,KAAKswd,cAEvBnhc,EAAKnZ,OAAS4sZ,EACdzzY,EAAKpZ,QAAU8sZ,EAGvB7ia,KAAK2xd,aAAa5kd,EAAGC,EAAGmiB,OA1EpB6rN,OACA94I,IA2ERkuX,EAAS/0d,UAAUs2d,aAAe,SAAU/uD,EAAMC,EAAM1zY,EAAMnZ,EAAOD,GACjE,IAAIhJ,EACAC,EACA+oB,EAEArD,EADM1yB,KAAKgB,QAAQO,qBAAqB,OAAO,GACpC0tB,eAAe,UAC9B,GAAIE,EAEApiB,GADAgpB,EAASrD,EAAK6/B,WACHxlD,EAAI61Z,EACf51Z,EAAI+oB,EAAO/oB,EAAI61Z,EACf7sZ,EAAQ+f,EAAO/f,MAAQmZ,EAAKnZ,MAC5BD,EAASggB,EAAOhgB,OAASoZ,EAAKpZ,WAE7B,CACD,IAAI67c,EAEAA,EADA5xd,KAAKyxB,aAAa1kB,EAAI/M,KAAKw9C,WAAWzwC,EAC7B/M,KAAKyxB,aAAa1kB,EAAI/M,KAAK8zT,UAAU/mT,EAGrC/M,KAAK8zT,UAAU/mT,EAAI/M,KAAKyxB,aAAa1kB,EAElD,IAAI8kd,EAEAA,EADA7xd,KAAKyxB,aAAazkB,EAAIhN,KAAKw9C,WAAWxwC,EAC7BhN,KAAKyxB,aAAazkB,EAAIhN,KAAK8zT,UAAU9mT,EAGrChN,KAAK8zT,UAAU9mT,EAAIhN,KAAKyxB,aAAazkB,EAI9CX,KAAKE,IAAIsld,GAAUxld,KAAKE,IAAIqld,GAC5BA,EAAS5xd,KAAKswd,cAAgBuB,EAK9BA,EAASD,EAAS5xd,KAAKswd,cAI3Bv6b,EAASrD,EAAK6/B,UACdxlD,EAAM/M,KAAKw9C,WAAWzwC,EAAI/M,KAAKyxB,aAAa1kB,EACxCgpB,EAAOhpB,EAAI6kd,EAAS77b,EAAOhpB,EAC/BC,EAAMhN,KAAKw9C,WAAWxwC,EAAIhN,KAAKyxB,aAAazkB,EAAK+oB,EAAO/oB,EAAI6kd,EAAS97b,EAAO/oB,EAC5EgJ,EAAQ+f,EAAO/f,MAAQ47c,EACvB77c,EAASggB,EAAOhgB,OAAS87c,EAE7Bt8Z,GAAgBv1D,KAAKkP,QACjB5L,GAAMtD,KAAKkP,OAAO5L,GAAIyJ,EAAKA,EAAGC,EAAKA,EACnCgJ,MAAS3J,KAAKC,IAAI,EAAG0J,GAAQD,OAAU1J,KAAKC,IAAI,EAAGyJ,MAG3Dq6c,EAAS/0d,UAAUy2d,mBAAqB,SAAU/kd,EAAGC,EAAGgJ,EAAOD,GAG3Ds/C,GAFW70D,SAASyuB,eAAejvB,KAAKgpY,OAAO1lY,GAAK,iBACvCyJ,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAO3J,KAAKC,IAAI,EAAG0J,GAAQD,OAAQ1J,KAAKC,IAAI,EAAGyJ,KAExE/V,KAAK+xd,qBAAqB,MAAOhld,EAAI,EAAGC,EAAI,EAAGX,KAAKC,IAAI,EAAG0J,EAAQ,IAAK,GACxEhW,KAAK+xd,qBAAqB,SAAUhld,EAAI,EAAGC,EAAI+I,EAAQ1J,KAAKC,IAAI,EAAG0J,EAAQ,IAAK,GAChFhW,KAAK+xd,qBAAqB,OAAQhld,EAAI,EAAGC,EAAI,EAAG,EAAGX,KAAKC,IAAI,EAAGyJ,EAAS,KACxE/V,KAAK+xd,qBAAqB,QAAShld,EAAIiJ,EAAOhJ,EAAI,EAAG,EAAGX,KAAKC,IAAI,EAAGyJ,EAAS,KAC7E/V,KAAK+xd,qBAAqB,UAAWhld,EAAGC,EAAG,EAAG,GAC9ChN,KAAK+xd,qBAAqB,WAAYhld,EAAIiJ,EAAOhJ,EAAG,EAAG,GACvDhN,KAAK+xd,qBAAqB,aAAchld,EAAGC,EAAI+I,EAAQ,EAAG,GAC1D/V,KAAK+xd,qBAAqB,cAAehld,EAAIiJ,EAAOhJ,EAAI+I,EAAQ,EAAG,IAEvEq6c,EAAS/0d,UAAU02d,qBAAuB,SAAUh7b,EAAMhqB,EAAGC,EAAGgJ,EAAOD,GACnE,IAAIu+I,EACA09T,EACAC,EAAW,UAAYl7b,EACvBrE,EAAOlyB,SAASyuB,eAAejvB,KAAKgpY,OAAO1lY,GAAK2ud,GACvC,QAATl7b,GAA2B,WAATA,GAA8B,UAATA,GAA6B,SAATA,GAC3Du9H,GAASvnJ,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOA,EAAOD,OAAQA,EAAQqoB,KAAM,WACzD4zb,GAAcjld,EAAGA,EAAI,EAAGC,EAAGA,EAAI,EAAGgJ,MAAiB,IAAVA,EAAc,EAAIA,EAAOD,OAAmB,IAAXA,EAAe,EAAIA,KAG7Fu+I,GAAS16H,GAAI7sB,EAAG8sB,GAAI7sB,EAAGowB,EAAK,EAAGgB,KAAM,WACrC4zb,GAAcp4b,GAAI7sB,EAAG8sB,GAAI7sB,EAAGowB,EAAK,EAAGgB,KAAM,gBAE9Ci3B,GAAiB3iC,EAAM4hI,GAEvBj/F,GADgB70D,SAASyuB,eAAejvB,KAAKgpY,OAAO1lY,GAAKyzB,GAC7Bi7b,IAEhC5B,EAAS/0d,UAAU62d,2BAA6B,WAC5C,IAAIC,EAAWv7b,OAAO52B,KAAKmsB,MAAMnW,OAC7Bo8c,EAAYx7b,OAAO52B,KAAKmsB,MAAMpW,QAC9B6sZ,EAAO5ia,KAAKyxB,aAAa1kB,EAAI/M,KAAK8zT,UAAU/mT,EAC5C81Z,EAAO7ia,KAAKyxB,aAAazkB,EAAIhN,KAAK8zT,UAAU9mT,EAM5C+oB,GAJO1pB,KAAK8T,IAAIngB,KAAKM,OAAO6iD,SAASQ,cAAgBwua,EAAUnyd,KAAKM,OAAO6iD,SAASO,eAAiB0ua,GAC/Fpyd,KAAKgB,QAAQO,qBAAqB,OAAO,GACnC0tB,eAAejvB,KAAKgpY,OAAO1lY,GACrC,gBACaivD,WACfxlD,EAAIgpB,EAAOhpB,EAAI61Z,EACf51Z,EAAI+oB,EAAO/oB,EAAI61Z,EACf7sZ,EAAQ+f,EAAO/f,MACfD,EAASggB,EAAOhgB,OACpB/V,KAAK8xd,mBAAmB/kd,EAAGC,EAAGgJ,EAAOD,GACrC/V,KAAKqyd,iBAAiBryd,KAAKM,OAAO6iD,SAASY,YAAah3C,EAAGC,EAAGgJ,EAAOD,EAAQ,OAEjFq6c,EAAS/0d,UAAUi3d,mBAAqB,SAAUvld,EAAGC,EAAGgJ,EAAOD,GAC3D,IAAIo8c,EAAWv7b,OAAO52B,KAAKmsB,MAAMnW,OAC7Bo8c,EAAYx7b,OAAO52B,KAAKmsB,MAAMpW,QAE9Bw8c,EAAav8c,EAAQm8c,EAAYnyd,KAAK45X,aACtC44F,EAAcz8c,EAASq8c,EAAapyd,KAAKq1Z,cACzCjhF,EAAO/nU,KAAKC,IAAItM,KAAKM,OAAO6iD,SAASQ,cAAgB4ua,EAAWvyd,KAAKM,OAAO6iD,SAASO,eAAiB8ua,GAC1G,GAAIp+I,GAAQ,KAAQA,GAAQ,GAAI,CAE5Bp0U,KAAKqyd,iBAAiBj+I,EAAMrnU,EAAGC,EAAGgJ,EAAOD,GAD3BhJ,EAAG,EAAGC,EAAG,IAEvB,IAAI+oB,EAAS/1B,KAAKyyd,mBAAmBzyd,KAAKM,OAAO6iD,SAASC,iBAAkBpjD,KAAKM,OAAO6iD,SAASG,eAAgBtjD,KAAKM,OAAO6iD,SAASY,aAAa,GACnJ,GAAI/jD,KAAKkP,OAAQ,CACb,IACI65D,EADQ/oE,KAAKgB,QAAQO,qBAAqB,QAAQ,IAClCgxD,UACpBx8B,EAAOhpB,EAAIg8D,EAAQh8D,EACnBgpB,EAAO/oB,EAAI+7D,EAAQ/7D,EAEvBhN,KAAK8xd,mBAAmB/7b,EAAOhpB,EAAGgpB,EAAO/oB,EAAG+oB,EAAO/f,MAAO+f,EAAOhgB,UAGzEq6c,EAAS/0d,UAAUo3d,mBAAqB,SAAUn1C,EAASC,EAASx5X,EAAa2ua,GAC7E,IAAM1yd,KAAe,YAAK0yd,EAAQ,CAC9B,IAAIP,EAAWv7b,OAAO52B,KAAKmsB,MAAMnW,OAC7Bo8c,EAAYx7b,OAAO52B,KAAKmsB,MAAMpW,QAC9B+tC,EAAQz3C,KAAK8T,IAAIngB,KAAK45X,aAAeu4F,EAAUnyd,KAAKq1Z,cAAgB+8D,GACpEr8b,EAAS,IAAIR,GACbxoB,EAAIgpB,EAAOhpB,EAAKuwa,EAAUv5X,EAAeD,EACzC92C,EAAI+oB,EAAO/oB,EAAKuwa,EAAUx5X,EAAeD,EAEzC9tC,EAAQ+f,EAAO/f,MAAShW,KAAKM,OAAO6iD,SAASQ,cAAgBI,EAAeD,EAC5E/tC,EAASggB,EAAOhgB,OAAU/V,KAAKM,OAAO6iD,SAASO,eAAiBK,EAAeD,EACvE9jD,KAAKM,OAAO6iD,SAASQ,cAAgB3jD,KAAKM,OAAO6iD,SAASO,eACtE,GAAIgva,EAAQ,CACR,IAAIhgc,EAAO,IAAI6C,GAKf,OAJA7C,EAAK3lB,EAAIA,EACT2lB,EAAK1lB,EAAIA,EACT0lB,EAAK1c,MAAQA,EACb0c,EAAK3c,OAASA,EACP2c,EAEX1yB,KAAK8xd,oBAAoB/kd,GAAIC,EAAGgJ,EAAOD,GAE3C,OAAO,MAEXq6c,EAAS/0d,UAAUg3d,iBAAmB,SAAUj+I,EAAMrnU,EAAGC,EAAGgJ,EAAOD,EAAQ2uZ,GACvE,IAMIiuD,EACAC,EAPAT,EAAWv7b,OAAO52B,KAAKmsB,MAAMnW,OAC7Bo8c,EAAYx7b,OAAO52B,KAAKmsB,MAAMpW,QAG9Buna,EAAUvwa,GAFD/M,KAAK45X,aAAeu4F,GAEN/9I,EACvBmpG,EAAUvwa,GAFDhN,KAAKq1Z,cAAgB+8D,GAEPh+I,EAGdp0U,KAAKM,OAAO6iD,SAASu4X,gBACrB,IAATtnG,GAAkC,QAApBp0U,KAAKqwd,aACnBsC,GAAQr1C,EAAUt9a,KAAKM,OAAO6iD,SAASC,iBACvCwva,GAAQr1C,EAAUv9a,KAAKM,OAAO6iD,SAASG,gBAEnB,UAApBtjD,KAAKqwd,YAA8C,SAApBrwd,KAAKqwd,WACpCrwd,KAAKM,OAAO6iD,SAASixR,KAAKA,EAAOp0U,KAAKM,OAAO6iD,SAASY,YAAa4ua,EAAMC,EAAMluD,GAG/E1ka,KAAKM,OAAO2zU,IAAI0+I,EAAMC,EAAMluD,IAIpC0rD,EAAS/0d,UAAUsmb,WAAa,SAAUj6T,GACtC,IAAI1xG,EACAD,EACAggB,EAAS/1B,KAAKM,OAAO6iD,SAASu4X,gBAClC1la,EAAQ+f,EAAO/f,MACfD,EAASggB,EAAOhgB,OAChB,IAEI+tC,EAFAqua,EAAWv7b,OAAO52B,KAAKmsB,MAAMnW,OAC7Bo8c,EAAYx7b,OAAO52B,KAAKmsB,MAAMpW,QAE9BilO,EAAI3uO,KAAKC,IAAI0J,EAAOhW,KAAKM,OAAO6iD,SAASQ,eACzCu+C,EAAI71F,KAAKC,IAAIyJ,EAAQ/V,KAAKM,OAAO6iD,SAASO,gBAC9C1jD,KAAK45X,aAAe5+I,EAAI3uO,KAAKC,IAAI0uO,EAAIm3O,EAAWC,EAAalwX,GAC7DliG,KAAKq1Z,cAAgBnzT,EAAI71F,KAAKC,IAAI41F,EAAIkwX,EAAYD,EAAYn3O,GAC9Dl3L,EAAQz3C,KAAK8T,IAAIgyc,EAAWn3O,EAAGo3O,EAAYlwX,GAC3C,IAAI00T,EAAYp2Z,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,cAC1DszZ,EAAUlyZ,MAAMmud,gBAAkB,SAAW/ua,EAAQ,gBAAkB/tB,EAAOhpB,EAAI,OAAUgpB,EAAO/oB,EAAK,MACxG4pZ,EAAUlyZ,MAAM2I,UAAY,SAAWy2C,EAAQ,gBAAkB/tB,EAAOhpB,EAAI,OAAUgpB,EAAO/oB,EAAK,MACxFxM,SAASyuB,eAAejvB,KAAKsD,GAAK,kBACxCE,aAAa,YAAa,cAAiBuyB,EAAOhpB,EAAI+2C,EAAS,KAAQ/tB,EAAO/oB,EAAI82C,EAAS,KAC/F9jD,KAAKojD,iBAAmBrtB,EAAOhpB,EAAI+2C,EACnC9jD,KAAKsjD,eAAiBvtB,EAAO/oB,EAAI82C,EACjC,IAAIklV,EAASxoY,SAASyuB,eAAe,yBACjCyrY,EAAczlW,GAAej1D,KAAKgB,QAAQsC,IAC1CqC,EAAUqjY,EAAOv6S,WAAW,MAC5BqkY,EAAcl8b,OAAO52B,KAAKmsB,MAAMnW,OAAShW,KAAK45X,aAC9Cm5F,EAAen8b,OAAO52B,KAAKmsB,MAAMpW,QAAU/V,KAAKq1Z,cACpDy9D,EAAazmd,KAAK8T,IAAI2yc,EAAYC,GAClCr4D,EAAYl3Z,aAAa,YAAa,wBAEhCsvd,EAAa,KACnBntd,EAAQywU,aAAa08I,EAAY,EAAG,EAAGA,EAAY,EAAG,GACtDntd,EAAQ+pF,UAAY,MACpB1vF,KAAKyyd,mBAAmBzyd,KAAKM,OAAO6iD,SAASC,iBAAkBpjD,KAAKM,OAAO6iD,SAASG,eAAgBtjD,KAAKM,OAAO6iD,SAASY,cAG7Hqsa,EAAS/0d,UAAUgxa,SAAW,SAAUh1V,GACpC,GAAIr3E,KAAK1D,MAAO,CACZ,IAAIy5B,EAAS/1B,KAAKyyd,mBAAmBzyd,KAAKM,OAAO6iD,SAASC,iBAAkBpjD,KAAKM,OAAO6iD,SAASG,eAAgBtjD,KAAKM,OAAO6iD,SAASY,aAAa,GACnJ/jD,KAAK8xd,oBAAoB/7b,EAAOhpB,GAAIgpB,EAAO/oB,EAAG+oB,EAAO/f,MAAO+f,EAAOhgB,UAG3Eq6c,EAAS/0d,UAAUuta,aAAe,SAAUvxV,GACxC,GAAI3hB,GAAS2hB,EAAIlwE,0BACb,OAAQkwE,EAAIlwE,OAAO7D,IACf,KAAKtD,KAAKgpY,OAAO1lY,GAAK,OAClBtD,KAAKgpY,OAAOtkY,MAAMm2D,OAAS,WAC3B,MACJ,KAAK76D,KAAKgpY,OAAO1lY,GAAK,QAClBtD,KAAKgpY,OAAOtkY,MAAMm2D,OAAS,WAC3B,MACJ,KAAK76D,KAAKgpY,OAAO1lY,GAAK,MAClBtD,KAAKgpY,OAAOtkY,MAAMm2D,OAAS,WAC3B,MACJ,KAAK76D,KAAKgpY,OAAO1lY,GAAK,SAClBtD,KAAKgpY,OAAOtkY,MAAMm2D,OAAS,WAC3B,MACJ,KAAK76D,KAAKgpY,OAAO1lY,GAAK,UAClBtD,KAAKgpY,OAAOtkY,MAAMm2D,OAAS,YAC3B,MACJ,KAAK76D,KAAKgpY,OAAO1lY,GAAK,WAClBtD,KAAKgpY,OAAOtkY,MAAMm2D,OAAS,YAC3B,MACJ,KAAK76D,KAAKgpY,OAAO1lY,GAAK,aAClBtD,KAAKgpY,OAAOtkY,MAAMm2D,OAAS,YAC3B,MACJ,KAAK76D,KAAKgpY,OAAO1lY,GAAK,cAClBtD,KAAKgpY,OAAOtkY,MAAMm2D,OAAS,iBAKnC76D,KAAKgpY,OAAOtkY,MAAMm2D,OAAS,WAGnCu1Z,EAAS/0d,UAAU0uT,UAAY,SAAU1yO,GAIrC,GAHAr3E,KAAK1D,OAAQ,EACb0D,KAAK4oa,aAAavxV,GAClBr3E,KAAKyxB,aAAezxB,KAAKymD,cAAc4wB,GACnCr3E,KAAKqwd,WACL,OAAQrwd,KAAKqwd,YACT,IAAK,OACIrwd,KAAKs9Z,UAAat9Z,KAAKw9C,WAAWzwC,IAAM/M,KAAKyxB,aAAa1kB,GAAK/M,KAAKw9C,WAAWxwC,IAAMhN,KAAKyxB,aAAazkB,IACxGhN,KAAKgzd,aACLhzd,KAAKs9Z,UAAW,GAEhBt9Z,KAAKs9Z,UACLt9Z,KAAK2xd,eAET,MACJ,IAAK,QACI3xd,KAAKs9Z,WACNt9Z,KAAKgzd,aACLhzd,KAAKs9Z,UAAW,GAEpBt9Z,KAAKyxd,0BACL,MACJ,IAAK,OACIzxd,KAAKw9C,WAAWzwC,IAAM/M,KAAKyxB,aAAa1kB,GAAK/M,KAAKw9C,WAAWxwC,IAAMhN,KAAKyxB,aAAazkB,GAAMhN,KAAKs9Z,YACjGt9Z,KAAKs9Z,UAAW,EAChBt9Z,KAAKkyd,8BAKrBlyd,KAAK8zT,UAAY9zT,KAAKyxB,cAE1B2+b,EAAS/0d,UAAUs1d,gBAAkB,SAAUt5Y,GAC3Cr3E,KAAKs9Z,UAAW,EAChBt9Z,KAAKqwd,WAAa,GACdrwd,KAAKkP,SACLlP,KAAKkP,OAAOzO,WAAW6E,YAAYtF,KAAKkP,QACxClP,KAAKkP,OAAS,MAElBlP,KAAK1D,OAAQ,EACbkE,SAASyuB,eAAejvB,KAAKgpY,OAAO1lY,GAAK,kBAAkBoB,MAAM+oE,cAAgB,OAErF2iZ,EAAS/0d,UAAUkta,aAAe,SAAUlxV,GACxC,IAAIt3E,EAAQC,KAYZ,OAXIA,KAAK8jT,UACL5jT,aAAaF,KAAK8jT,UAEtB9jT,KAAK8jT,SAAW3jT,WAAW,WACvB,IACI4wd,EADUvwd,SAASyuB,eAAelvB,EAAMiB,QAAQsC,IAChCsI,wBACpB7L,EAAMosB,MAAMnW,MAAQ+6c,EAAM/6c,MAC1BjW,EAAMosB,MAAMpW,OAASg7c,EAAMh7c,OAC3BhW,EAAMwwd,eACNxwd,EAAM03S,UAAU13S,EAAMwvC,WACvB,KACI,GAGX6gb,EAAS/0d,UAAUyia,UAAY,SAAUzmV,GAOrC,GANIA,EAAIlwE,OAAO7D,KAAOtD,KAAKgpY,OAAO1lY,GAAK,iBACnCtD,KAAKqwd,WAAa,QAElBh5Y,EAAIlwE,OAAO7D,KAAOtD,KAAKgpY,OAAO1lY,GAAK,iBACnCtD,KAAKqwd,WAAa,OAElB36Z,GAAS2hB,EAAIlwE,OAAQ,mBAErB,OADAnH,KAAKqwd,WAAa,QACVh5Y,EAAIlwE,OAAO7D,IACf,KAAKtD,KAAKgpY,OAAO1lY,GAAK,OAClBtD,KAAK0xd,gBAAkB,OACvB,MACJ,KAAK1xd,KAAKgpY,OAAO1lY,GAAK,QAClBtD,KAAK0xd,gBAAkB,QACvB,MACJ,KAAK1xd,KAAKgpY,OAAO1lY,GAAK,MAClBtD,KAAK0xd,gBAAkB,MACvB,MACJ,KAAK1xd,KAAKgpY,OAAO1lY,GAAK,SAClBtD,KAAK0xd,gBAAkB,SACvB,MACJ,KAAK1xd,KAAKgpY,OAAO1lY,GAAK,UAClBtD,KAAK0xd,gBAAkB,UACvB,MACJ,KAAK1xd,KAAKgpY,OAAO1lY,GAAK,WAClBtD,KAAK0xd,gBAAkB,WACvB,MACJ,KAAK1xd,KAAKgpY,OAAO1lY,GAAK,aAClBtD,KAAK0xd,gBAAkB,aACvB,MACJ,KAAK1xd,KAAKgpY,OAAO1lY,GAAK,cAClBtD,KAAK0xd,gBAAkB,cAInC1xd,KAAKw9C,WAAax9C,KAAK8zT,UAAY9zT,KAAKymD,cAAc4wB,GACtDr3E,KAAKswd,cAAgBtwd,KAAKM,OAAO6iD,SAASQ,cAAgB3jD,KAAKM,OAAO6iD,SAASO,eAC1DljD,SAASyuB,eAAejvB,KAAKgpY,OAAO1lY,GAAK,kBAC/CoB,MAAM+oE,cAAgB,QAEzC2iZ,EAAS/0d,UAAU4ia,QAAU,SAAU5mV,GACnCr3E,KAAKyxB,aAAezxB,KAAKymD,cAAc4wB,GACxBzgD,OAAO52B,KAAKmsB,MAAMnW,OACjB4gB,OAAO52B,KAAKmsB,MAAMpW,QAClC,GAAI/V,KAAKqwd,WACL,GAAKrwd,KAAKw9C,WAAWzwC,IAAM/M,KAAKyxB,aAAa1kB,GAAK/M,KAAKw9C,WAAWxwC,IAAMhN,KAAKyxB,aAAazkB,GACtF,GAAwB,QAApBhN,KAAKqwd,iBAIL,GAAIrwd,KAAKkP,OAAQ,CACb,IAAI6mB,EAAU/1B,KAAKgB,QAAQO,qBAAqB,QAAQ,IAAKgxD,UAC7DvyD,KAAK0xd,gBAAkB1xd,KAAK0xd,iBAAmB,GAC/C,IAAI3kd,EAAIgpB,EAAOhpB,EACXC,EAAI+oB,EAAO/oB,EACXgJ,EAAQ+f,EAAO/f,MACfD,EAASggB,EAAOhgB,OACkB,YAAzB/V,KAAK0xd,iBAA0D,aAAzB1xd,KAAK0xd,iBAC3B,eAAzB1xd,KAAK0xd,iBAAoC1xd,KAAK0xd,gBAClD1xd,KAAKsyd,mBAAmBvld,EAAGC,EAAGgJ,EAAOD,SAK7C,GAAIshE,EAAIlwE,OAAO7D,KAAOtD,KAAKgpY,OAAO1lY,GAAK,gBAAoC,WAAlB+zE,EAAIlwE,OAAO7D,GAAiB,CAK7E0S,GADA+f,EAHM/1B,KAAKgB,QAAQO,qBAAqB,OAAO,GACvC0tB,eAAejvB,KAAKgpY,OAAO1lY,GACjC,gBACSivD,WACIv8C,MACfD,EAASggB,EAAOhgB,OACpB/V,KAAKs9Z,UAAW,EAChBt9Z,KAAKqwd,WAAa,MAClBrwd,KAAKsyd,mBAAmBtyd,KAAKyxB,aAAa1kB,EAAIiJ,EAAQ,EAAGhW,KAAKyxB,aAAazkB,EAAI+I,EAAS,EAAGC,EAAOD,GAClG/V,KAAKs9Z,UAAW,EAIxBt9Z,KAAKkP,SACLlP,KAAKkP,OAAOzO,WAAW6E,YAAYtF,KAAKkP,QACxClP,KAAKkP,OAAS,MAElBlP,KAAKqwd,WAAa,GAClBrwd,KAAKw9C,WAAa,KAClBx9C,KAAKyxB,aAAe,KACpBzxB,KAAK8zT,UAAY,KACjB9zT,KAAKkP,OAAS,KACdlP,KAAKswd,cAAgB,EACrBtwd,KAAK0xd,gBAAkB,GACvB1xd,KAAKs9Z,UAAW,EAChBt9Z,KAAK1D,OAAQ,EACbkE,SAASyuB,eAAejvB,KAAKgpY,OAAO1lY,GAAK,kBAAkBoB,MAAM+oE,cAAgB,OAErF2iZ,EAAS/0d,UAAU23d,WAAa,WAC5B,IAAI31b,EAAIr9B,KAAKgB,QAAQO,qBAAqB,OAAO,GAE7CwL,GADQ/M,KAAKM,OAAO6iD,SAASY,YACzB/jD,KAAKw9C,WAAWzwC,GACpBC,EAAIhN,KAAKw9C,WAAWxwC,EACpBgJ,EAAQ,EACRD,EAAS,EACb,GAAwB,UAApB/V,KAAKqwd,WAAwB,CAC7B,IAEIt6b,EAFOsH,EACPpO,eAAejvB,KAAKgpY,OAAO1lY,GAAK,gBAClBivD,UAClBxlD,EAAIgpB,EAAOhpB,EACXC,EAAI+oB,EAAO/oB,EACXgJ,EAAQ+f,EAAO/f,MACfD,EAASggB,EAAOhgB,OAEpB,IAAI+5a,EAAgBx6X,GAAiB,QACjChyD,GAAM,SAAUyJ,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOA,EAAOD,OAAQA,EAClDqoB,KAAQ,cAAeE,OAAU,OAAQokM,mBAAoB,MAAOuwP,kBAAmB,eAEvE51b,EAAEpO,eAAejvB,KAAKsD,GAAK,kBACjC3B,YAAYmub,GAC1B9vb,KAAKkP,OAAS4gb,GAElBsgC,EAAS/0d,UAAUorD,cAAgB,SAAU4wB,GACzC,IAAI+zO,EACAv/S,EACAI,EACJ,IAAmC,IAA/BorE,EAAI3wE,KAAKnI,QAAQ,SAAiB,CAElC,IAAIuN,GADJs/S,EAAW/zO,GACUjX,eAAe,GAAGrK,QACnC7pD,EAAQk/S,EAAShrP,eAAe,GAAGpK,QACvCnqD,EAAUC,EAAQ9L,KAAKgB,QAAQmT,WAC/BlI,EAAUC,EAAQlM,KAAKgB,QAAQoT,eAG/BvI,EAAUwrE,EAAIthB,QACd9pD,EAAUorE,EAAIrhB,QAElB,IAAIqyW,EAAeroa,KAAKgB,QAAQ4K,wBAGhC,OAFAC,GAAoBw8Z,EAAa77Z,KACjCP,GAAoBo8Z,EAAa37Z,KACxBK,EAAGlB,EAAU7L,KAAKojD,iBAAkBp2C,EAAGf,EAAUjM,KAAKsjD,iBAQnE8sa,EAAS/0d,UAAUiX,QAAU,WAIzB,GAHAtS,KAAKogH,eACLpgH,KAAK+N,OAAO,cACZ2+E,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,MAC1BQ,SAASyuB,eAAejvB,KAAKgB,QAAQsC,IAAK,CAC1CtD,KAAKgB,QAAQ8C,UAAUS,OAAO,cAC9B,IAAIq2B,EAAUp6B,SAASyuB,eAAejvB,KAAKgB,QAAQsC,GAAK,WACpDs3B,GACA56B,KAAKgB,QAAQsE,YAAYs1B,GAGjC56B,KAAKM,OAAOuqD,MAAMpiC,OAAOzoB,KAAKM,OAAOuqD,MAAMtsD,QAAQyB,KAAKsD,IAAK,GAC7DtD,KAAK0pb,gBAAkB,KACvB1pb,KAAKgpY,OAAS,KACdhpY,KAAKM,OAAS,MAKlB8vd,EAAS/0d,UAAU0kC,cAAgB,WAI/B,MAAO,YAEXqsD,IACIllF,EAAS,SACVkpd,EAAS/0d,UAAW,aAAS,GAChC+wF,IACIllF,EAAS,SACVkpd,EAAS/0d,UAAW,cAAU,GACjC+wF,IACIllF,EAAS,KACVkpd,EAAS/0d,UAAW,gBAAY,GACnC+wF,IACItjF,KACDsnd,EAAS/0d,UAAW,eAAW,GAC3B+0d,GACTjjX,ICp4BF+lX,GAAcllX,OAAQmlX,GAAuBC,GAAcC,GAAiBC,GAA8BC,GAAkBC,GAAeC,GAAqBC,GAAmBC,GAAsBC,GAAwBC,GAAeC,GAAsBC,GAAyBC,mzBlDytB/R,mCAOA,8oGmD7tBIrgP,GAA4B,WAC5B,SAASA,IACL3zO,KAAKi0d,gBACLj0d,KAAKk0d,kBACLl0d,KAAKge,QA6HT,OA3HA1f,OAAOuJ,eAAe8rO,EAAWt4O,UAAW,UAIxCqM,IAAK,WACD,OAAO1H,KAAKi0d,aAAax3d,QAE7BkL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8rO,EAAWt4O,UAAW,QAIxCqM,IAAK,WACD,OAAO1H,KAAKkuG,WAEhBvmG,YAAY,EACZC,cAAc,IAKlB+rO,EAAWt4O,UAAU6yG,QAAU,WAC3BluG,KAAKge,QACL,IAAK,IAAI7hB,EAAI,EAAGA,EAAI6D,KAAKi0d,aAAax3d,OAAQN,IAC1C6D,KAAKge,KAAKxZ,KAAKxE,KAAKi0d,aAAa93d,IAErC,OAAO6D,KAAKge,MAKhB21N,EAAWt4O,UAAU+I,IAAM,SAAU/G,EAAKL,GACtC,GAAIS,EAAkBJ,GAClB,MAAM,IAAI82Q,eAAe,uCAQ7B,OANYn0Q,KAAKi0d,aAAa11d,QAAQlB,GAE1B,IACR2C,KAAKi0d,aAAazvd,KAAKnH,GACvB2C,KAAKk0d,eAAe1vd,KAAKxH,IAEtB,GAQX22O,EAAWt4O,UAAUqM,IAAM,SAAUrK,GACjC,GAAII,EAAkBJ,GAClB,MAAM,IAAI82Q,eAAe,8BAE7B,IAAIliQ,EAAQjS,KAAKi0d,aAAa11d,QAAQlB,GACtC,GAAI4U,EAAQ,GAAKA,EAAQjS,KAAKi0d,aAAax3d,OAAS,EAChD,MAAM,IAAI2qP,WAAW,kDAGrB,OAAOpnP,KAAKk0d,eAAejid,IAMnC0hO,EAAWt4O,UAAUgM,IAAM,SAAUhK,EAAKL,GACtC,GAAIS,EAAkBJ,GAClB,MAAM,IAAI82Q,eAAe,8BAE7B,IAAIliQ,EAAQjS,KAAKi0d,aAAa11d,QAAQlB,GACtC,GAAI4U,EAAQ,GAAKA,EAAQjS,KAAKi0d,aAAax3d,OAAS,EAChD,MAAM,IAAI2qP,WAAW,kDAGrBpnP,KAAKk0d,eAAejid,GAASjV,GAMrC22O,EAAWt4O,UAAUkJ,OAAS,SAAUlH,GACpC,GAAII,EAAkBJ,GAClB,MAAM,IAAI82Q,eAAe,8BAE7B,IAAIliQ,EAAQjS,KAAKi0d,aAAa11d,QAAQlB,GACtC,GAAI4U,EAAQ,GAAKA,EAAQjS,KAAKi0d,aAAax3d,OAAS,EAChD,MAAM,IAAI2qP,WAAW,kDAKrB,OAFApnP,KAAKi0d,aAAaxrc,OAAOxW,EAAO,GAChCjS,KAAKk0d,eAAezrc,OAAOxW,EAAO,IAC3B,GAMf0hO,EAAWt4O,UAAUo5O,YAAc,SAAUp3O,GACzC,GAAII,EAAkBJ,GAClB,MAAM,IAAI82Q,eAAe,8BAE7B,IAAIliQ,EAAQjS,KAAKi0d,aAAa11d,QAAQlB,GACtC,QAAI4U,EAAQ,GAAKA,EAAQjS,KAAKi0d,aAAax3d,OAAS,IAQxDk3O,EAAWt4O,UAAUutD,MAAQ,WACzB5oD,KAAKi0d,gBACLj0d,KAAKk0d,mBAKTvgP,EAAWt4O,UAAUiX,QAAU,WAC3BtS,KAAK4oD,QACL5oD,KAAKi0d,kBAAe94d,EACpB6E,KAAKk0d,oBAAiB/4d,GAEnBw4O,KChIPwgP,GAA+B,WAC/B,SAASA,EAAcztd,GACnB1G,KAAKo0d,eAAiB,EACtBp0d,KAAKq0d,iBAAmB3td,EACxB1G,KAAKs0d,eAAiB,IAAI3gP,GAirB9B,OA5qBAwgP,EAAc94d,UAAUk5d,QAAU,SAAUh4d,EAAQ86D,EAAUm9Z,GAC1D,IAAID,GAAU,EACd,OAAQv0d,KAAKq0d,kBACT,KAAK,EACDE,EAAUv0d,KAAKy0d,cAAcl4d,EAAQ86D,EAAUm9Z,GAC/C,MACJ,KAAK,EACDD,EAAUv0d,KAAK00d,uBAAuBn4d,EAAQ86D,EAAUm9Z,GACxD,MACJ,KAAK,EACDD,EAAUv0d,KAAK20d,uBAAuBp4d,EAAQ86D,EAAUm9Z,GACxD,MACJ,KAAK,EACDD,EAAUv0d,KAAK40d,kBAAkBr4d,EAAQ86D,EAAUm9Z,GACnD,MACJ,KAAK,EACDD,EAAUv0d,KAAK60d,eAAet4d,EAAQ86D,EAAUm9Z,GAChD,MACJ,KAAK,EACDD,EAAUv0d,KAAK80d,iBAAiBv4d,EAAQ86D,EAAUm9Z,GAClD,MACJ,KAAK,EACDD,EAAUv0d,KAAK+0d,kBAAkBx4d,EAAQ86D,EAAUm9Z,GACnD,MACJ,KAAK,EACDD,EAAUv0d,KAAKg1d,mBAAmBz4d,EAAQ86D,EAAUm9Z,GACpD,MACJ,KAAK,EACDD,EAAUv0d,KAAKi1d,iBAAiB14d,EAAQ86D,EAAUm9Z,GAClD,MACJ,KAAK,GACDD,EAAUv0d,KAAKk1d,qBAAqB34d,EAAQ86D,EAAUm9Z,GAK9D,OAAOD,GAGXJ,EAAc94d,UAAU85d,WAAa,SAAU99Z,EAAU96D,EAAQ64d,EAAkBZ,EAAeH,GAC9F,IAAIgB,OAAcl6d,EACdmO,EAAe6qd,EAAcmB,gBAAgBjB,EAAkBh9Z,GAC/Dr3D,KAAKs0d,eAAe7/O,YAAYnrO,KAChC+rd,EAAcr1d,KAAKs0d,eAAe5sd,IAAI4B,IAE1C,IAAIisd,OAAcp6d,EAQlB,OAPIk8D,IAAa+9Z,EACbG,EAAcf,EAETj4d,EAAOk4O,YAAYnrO,KACxBisd,EAAch5d,EAAOmL,IAAI4B,MAGvB+rd,IAAgBE,IAAiB93d,EAAkB43d,KAAiB53d,EAAkB83d,IAAgBF,IAAgBE,IAQhIpB,EAAcmB,gBAAkB,SAAUjB,EAAkBh9Z,GACxD,IAAI3wD,EAAO,EACX,OAAQ2td,GACJ,KAAK,EACD3td,EAAO1G,KAAKw1d,sBAAsBn+Z,GAClC,MACJ,KAAK,EACD3wD,EAAO1G,KAAKy1d,+BAA+Bp+Z,GAC3C,MACJ,KAAK,EACD3wD,EAAO1G,KAAK01d,0BAA0Br+Z,GACtC,MACJ,KAAK,EACD3wD,EAAO1G,KAAK21d,0BAA0Bt+Z,GACtC,MACJ,KAAK,EACD3wD,EAAO1G,KAAK41d,uBAAuBv+Z,GACnC,MACJ,KAAK,EACD3wD,EAAO1G,KAAK61d,iBAAiBx+Z,GAC7B,MACJ,KAAK,EACD3wD,EAAO1G,KAAK81d,kBAAkBz+Z,GAC9B,MACJ,KAAK,EACD3wD,EAAO1G,KAAK+1d,mBAAmB1+Z,GAC/B,MACJ,KAAK,EACD3wD,EAAO1G,KAAKg2d,iBAAiB3+Z,GAC7B,MACJ,KAAK,GACD3wD,EAAO1G,KAAKi2d,qBAAqB5+Z,GAKzC,OAAO3wD,GAEXytd,EAAc0B,iBAAmB,SAAUx+Z,GACvC,MAAiB,0BAAbA,EACO,EAEM,aAAbA,EACO,EAEM,WAAbA,EACO,EAEM,eAAbA,EACO,EAEM,eAAbA,EACO,EAEM,oBAAbA,EACO,EAEM,wBAAbA,EACO,EAEM,cAAbA,EACO,EAEM,mBAAbA,EACO,EAEM,uBAAbA,EACO,GAEJ,GAEX88Z,EAAc2B,kBAAoB,SAAUz+Z,GACxC,MAAiB,WAAbA,EACO,EAEM,oBAAbA,EACO,EAEJ,GAEX88Z,EAAc4B,mBAAqB,SAAU1+Z,GACzC,MAAiB,eAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,cAAbA,EACO,EAEM,iBAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,eAAbA,EACO,EAEM,mBAAbA,EACO,EAEM,mBAAbA,EACO,EAEM,uBAAbA,EACO,EAEJ,GAEX88Z,EAAc6B,iBAAmB,SAAU3+Z,GACvC,MAAiB,qBAAbA,EACO,EAEM,YAAbA,EACO,EAEM,oBAAbA,EACO,EAEM,iBAAbA,EACO,EAEM,iBAAbA,EACO,EAEJ,GAEX88Z,EAAcyB,uBAAyB,SAAUv+Z,GAC7C,MAAiB,oBAAbA,EACO,EAEM,oBAAbA,EACO,EAEM,iBAAbA,EACO,EAEJ,GAEX88Z,EAAcwB,0BAA4B,SAAUt+Z,GAChD,MAAiB,eAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,cAAbA,EACO,EAEM,iBAAbA,EACO,EAEM,eAAbA,EACO,EAEM,YAAbA,EACO,EAEM,sBAAbA,EACO,EAEM,uBAAbA,EACO,EAEM,mBAAbA,EACO,EAEM,cAAbA,EACO,GAEJ,GAEX88Z,EAAcqB,sBAAwB,SAAUn+Z,GAC5C,MAAiB,UAAbA,EACO,EAEM,cAAbA,EACO,EAEM,cAAbA,EACO,EAEM,WAAbA,EACO,EAEM,UAAbA,EACO,EAEM,iBAAbA,EACO,EAEJ,GAEX88Z,EAAcsB,+BAAiC,SAAUp+Z,GACrD,MAAiB,cAAbA,EACO,EAEM,eAAbA,EACO,EAEM,aAAbA,EACO,EAEM,SAAbA,EACO,EAEM,WAAbA,EACO,EAEM,cAAbA,EACO,EAEM,kBAAbA,EACO,EAEM,sBAAbA,EACO,EAEM,mBAAbA,EACO,EAEJ,GAEX88Z,EAAcuB,0BAA4B,SAAUr+Z,GAChD,MAAiB,eAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,oBAAbA,EACO,EAEM,kBAAbA,EACO,EAEM,kBAAbA,EACO,EAEM,iBAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,oBAAbA,EACO,EAEM,iBAAbA,EACO,EAEJ,GAEX88Z,EAAc8B,qBAAuB,SAAU5+Z,GAC3C,MAAiB,mBAAbA,EACO,EAEM,mBAAbA,EACO,EAEM,uBAAbA,EACO,EAEM,6BAAbA,EACO,EAEM,cAAbA,EACO,EAEM,eAAbA,EACO,EAEM,eAAbA,EACO,EAEM,cAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,iBAAbA,EACO,GAEJ,GAKX88Z,EAAc94d,UAAUo5d,cAAgB,SAAUl4d,EAAQ64d,EAAkBZ,GACxE,OAAIx0d,KAAKm1d,WAAW,QAAS54d,EAAQ64d,EAAkBZ,EAAe,MAGlEx0d,KAAKm1d,WAAW,YAAa54d,EAAQ64d,EAAkBZ,EAAe,MAGtEx0d,KAAKm1d,WAAW,YAAa54d,EAAQ64d,EAAkBZ,EAAe,MAGtEx0d,KAAKm1d,WAAW,SAAU54d,EAAQ64d,EAAkBZ,EAAe,MAGnEx0d,KAAKm1d,WAAW,QAAS54d,EAAQ64d,EAAkBZ,EAAe,KAGlEx0d,KAAKm1d,WAAW,eAAgB54d,EAAQ64d,EAAkBZ,EAAe,QAQjFL,EAAc94d,UAAUq5d,uBAAyB,SAAUn4d,EAAQ64d,EAAkBZ,GACjF,OAAIx0d,KAAKm1d,WAAW,YAAa54d,EAAQ64d,EAAkBZ,EAAe,MAGtEx0d,KAAKm1d,WAAW,aAAc54d,EAAQ64d,EAAkBZ,EAAe,MAGvEx0d,KAAKm1d,WAAW,WAAY54d,EAAQ64d,EAAkBZ,EAAe,MAGrEx0d,KAAKm1d,WAAW,OAAQ54d,EAAQ64d,EAAkBZ,EAAe,MAGjEx0d,KAAKm1d,WAAW,SAAU54d,EAAQ64d,EAAkBZ,EAAe,MAGnEx0d,KAAKm1d,WAAW,YAAa54d,EAAQ64d,EAAkBZ,EAAe,MAGtEx0d,KAAKm1d,WAAW,gBAAiB54d,EAAQ64d,EAAkBZ,EAAe,MAG1Ex0d,KAAKm1d,WAAW,oBAAqB54d,EAAQ64d,EAAkBZ,EAAe,KAG9Ex0d,KAAKm1d,WAAW,iBAAkB54d,EAAQ64d,EAAkBZ,EAAe,WAKnFL,EAAc94d,UAAUs5d,uBAAyB,SAAUp4d,EAAQ64d,EAAkBZ,GACjF,OAAIx0d,KAAKm1d,WAAW,aAAc54d,EAAQ64d,EAAkBZ,EAAe,MAGvEx0d,KAAKm1d,WAAW,cAAe54d,EAAQ64d,EAAkBZ,EAAe,MAGxEx0d,KAAKm1d,WAAW,kBAAmB54d,EAAQ64d,EAAkBZ,EAAe,MAG5Ex0d,KAAKm1d,WAAW,gBAAiB54d,EAAQ64d,EAAkBZ,EAAe,MAG1Ex0d,KAAKm1d,WAAW,gBAAiB54d,EAAQ64d,EAAkBZ,EAAe,MAG1Ex0d,KAAKm1d,WAAW,eAAgB54d,EAAQ64d,EAAkBZ,EAAe,MAGzEx0d,KAAKm1d,WAAW,cAAe54d,EAAQ64d,EAAkBZ,EAAe,MAGxEx0d,KAAKm1d,WAAW,kBAAmB54d,EAAQ64d,EAAkBZ,EAAe,KAG5Ex0d,KAAKm1d,WAAW,eAAgB54d,EAAQ64d,EAAkBZ,EAAe,WAQjFL,EAAc94d,UAAUu5d,kBAAoB,SAAUr4d,EAAQ64d,EAAkBZ,GAC5E,OAAIx0d,KAAKm1d,WAAW,aAAc54d,EAAQ64d,EAAkBZ,EAAe,MAGvEx0d,KAAKm1d,WAAW,cAAe54d,EAAQ64d,EAAkBZ,EAAe,MAGxEx0d,KAAKm1d,WAAW,YAAa54d,EAAQ64d,EAAkBZ,EAAe,MAGtEx0d,KAAKm1d,WAAW,eAAgB54d,EAAQ64d,EAAkBZ,EAAe,MAGzEx0d,KAAKm1d,WAAW,aAAc54d,EAAQ64d,EAAkBZ,EAAe,MAGvEx0d,KAAKm1d,WAAW,UAAW54d,EAAQ64d,EAAkBZ,EAAe,MAGpEx0d,KAAKm1d,WAAW,oBAAqB54d,EAAQ64d,EAAkBZ,EAAe,MAG9Ex0d,KAAKm1d,WAAW,qBAAsB54d,EAAQ64d,EAAkBZ,EAAe,MAG/Ex0d,KAAKm1d,WAAW,iBAAkB54d,EAAQ64d,EAAkBZ,EAAe,KAG3Ex0d,KAAKm1d,WAAW,YAAa54d,EAAQ64d,EAAkBZ,EAAe,YAQ9EL,EAAc94d,UAAUw5d,eAAiB,SAAUt4d,EAAQ64d,EAAkBZ,GACzE,OAAIx0d,KAAKm1d,WAAW,kBAAmB54d,EAAQ64d,EAAkBZ,EAAe,MAG5Ex0d,KAAKm1d,WAAW,kBAAmB54d,EAAQ64d,EAAkBZ,EAAe,KAG5Ex0d,KAAKm1d,WAAW,eAAgB54d,EAAQ64d,EAAkBZ,EAAe,KAQjFL,EAAc94d,UAAUy5d,iBAAmB,SAAUv4d,EAAQ64d,EAAkBZ,GAC3E,OAAIx0d,KAAKm1d,WAAW,wBAAyB54d,EAAQ64d,EAAkBZ,EAAe,MAGlFx0d,KAAKm1d,WAAW,WAAY54d,EAAQ64d,EAAkBZ,EAAe,MAGrEx0d,KAAKm1d,WAAW,SAAU54d,EAAQ64d,EAAkBZ,EAAe,MAGnEx0d,KAAKm1d,WAAW,aAAc54d,EAAQ64d,EAAkBZ,EAAe,MAGvEx0d,KAAKm1d,WAAW,aAAc54d,EAAQ64d,EAAkBZ,EAAe,MAGvEx0d,KAAKm1d,WAAW,kBAAmB54d,EAAQ64d,EAAkBZ,EAAe,MAG5Ex0d,KAAKm1d,WAAW,sBAAuB54d,EAAQ64d,EAAkBZ,EAAe,MAGhFx0d,KAAKm1d,WAAW,YAAa54d,EAAQ64d,EAAkBZ,EAAe,MAGtEx0d,KAAKm1d,WAAW,iBAAkB54d,EAAQ64d,EAAkBZ,EAAe,KAG3Ex0d,KAAKm1d,WAAW,qBAAsB54d,EAAQ64d,EAAkBZ,EAAe,YAQvFL,EAAc94d,UAAU05d,kBAAoB,SAAUx4d,EAAQ64d,EAAkBZ,GAC5E,OAAIx0d,KAAKm1d,WAAW,SAAU54d,EAAQ64d,EAAkBZ,EAAe,KAGnEx0d,KAAKm1d,WAAW,kBAAmB54d,EAAQ64d,EAAkBZ,EAAe,IAQpFL,EAAc94d,UAAU25d,mBAAqB,SAAUz4d,EAAQ64d,EAAkBZ,GAC7E,OAAIx0d,KAAKm1d,WAAW,aAAc54d,EAAQ64d,EAAkBZ,EAAe,MAGvEx0d,KAAKm1d,WAAW,cAAe54d,EAAQ64d,EAAkBZ,EAAe,MAGxEx0d,KAAKm1d,WAAW,YAAa54d,EAAQ64d,EAAkBZ,EAAe,MAGtEx0d,KAAKm1d,WAAW,eAAgB54d,EAAQ64d,EAAkBZ,EAAe,MAGzEx0d,KAAKm1d,WAAW,cAAe54d,EAAQ64d,EAAkBZ,EAAe,MAGxEx0d,KAAKm1d,WAAW,aAAc54d,EAAQ64d,EAAkBZ,EAAe,MAGvEx0d,KAAKm1d,WAAW,iBAAkB54d,EAAQ64d,EAAkBZ,EAAe,MAG3Ex0d,KAAKm1d,WAAW,iBAAkB54d,EAAQ64d,EAAkBZ,EAAe,KAG3Ex0d,KAAKm1d,WAAW,qBAAsB54d,EAAQ64d,EAAkBZ,EAAe,WAQvFL,EAAc94d,UAAU45d,iBAAmB,SAAU14d,EAAQ64d,EAAkBZ,GAC3E,OAAIx0d,KAAKm1d,WAAW,mBAAoB54d,EAAQ64d,EAAkBZ,EAAe,MAG7Ex0d,KAAKm1d,WAAW,UAAW54d,EAAQ64d,EAAkBZ,EAAe,MAGpEx0d,KAAKm1d,WAAW,kBAAmB54d,EAAQ64d,EAAkBZ,EAAe,MAG5Ex0d,KAAKm1d,WAAW,eAAgB54d,EAAQ64d,EAAkBZ,EAAe,KAGzEx0d,KAAKm1d,WAAW,eAAgB54d,EAAQ64d,EAAkBZ,EAAe,OAQjFL,EAAc94d,UAAU65d,qBAAuB,SAAU34d,EAAQ64d,EAAkBZ,GAC/E,OAAIx0d,KAAKm1d,WAAW,iBAAkB54d,EAAQ64d,EAAkBZ,EAAe,OAG3Ex0d,KAAKm1d,WAAW,iBAAkB54d,EAAQ64d,EAAkBZ,EAAe,OAG3Ex0d,KAAKm1d,WAAW,qBAAsB54d,EAAQ64d,EAAkBZ,EAAe,OAG/Ex0d,KAAKm1d,WAAW,2BAA4B54d,EAAQ64d,EAAkBZ,EAAe,OAGrFx0d,KAAKm1d,WAAW,YAAa54d,EAAQ64d,EAAkBZ,EAAe,OAGtEx0d,KAAKm1d,WAAW,aAAc54d,EAAQ64d,EAAkBZ,EAAe,OAGvEx0d,KAAKm1d,WAAW,aAAc54d,EAAQ64d,EAAkBZ,EAAe,OAGvEx0d,KAAKm1d,WAAW,YAAa54d,EAAQ64d,EAAkBZ,EAAe,OAGtEx0d,KAAKm1d,WAAW,cAAe54d,EAAQ64d,EAAkBZ,EAAe,MAGxEx0d,KAAKm1d,WAAW,eAAgB54d,EAAQ64d,EAAkBZ,EAAe,aAQjFL,EAAc94d,UAAU66d,WAAa,SAAU15b,EAAQ66B,EAAUr6D,EAAOq3d,GAGpE,IAAK,IAFD/qd,EAAe6qd,EAAcmB,gBAAgBjB,EAAkBh9Z,GAC/D/5D,EAAOk/B,EAAO83b,eAAepmX,UACxB/xG,EAAI,EAAGA,EAAImB,EAAKb,OAAQN,IACzBmB,EAAKnB,KAAOmN,EACZtJ,KAAKs0d,eAAelwd,IAAIkF,EAActM,GAGtCgD,KAAKs0d,eAAelwd,IAAI9G,EAAKnB,GAAIqgC,EAAO83b,eAAe5sd,IAAIpK,EAAKnB,KAGnEqgC,EAAO83b,eAAe7/O,YAAYnrO,IACnCtJ,KAAKs0d,eAAelwd,IAAIkF,EAActM,IAM9Cm3d,EAAc94d,UAAU86d,gBAAkB,SAAU35b,GAGhD,IAAK,IAFDkyE,EAAOlyE,EAAO45b,kBACd94d,EAAO0C,KAAKs0d,eAAeh3d,KACtBnB,EAAI,EAAGA,EAAImB,EAAKb,OAAQN,IACxBuyG,EAAK+lI,YAAYn3O,EAAKnB,KACvBuyG,EAAKtqG,IAAI9G,EAAKnB,GAAI6D,KAAKs0d,eAAe5sd,IAAIpK,EAAKnB,KAGvD,OAAOuyG,GAKXylX,EAAc94d,UAAU+6d,gBAAkB,WAGtC,IAAK,IAFD1nX,EAAO,IAAIilI,GACXr2O,EAAO0C,KAAKs0d,eAAeh3d,KACtBnB,EAAI,EAAGA,EAAImB,EAAKb,OAAQN,IAC7BuyG,EAAKtqG,IAAI9G,EAAKnB,GAAI6D,KAAKs0d,eAAe5sd,IAAIpK,EAAKnB,KAEnD,OAAOuyG,GAYXylX,EAAc94d,UAAUiX,QAAU,WACzB7U,EAAkBuC,KAAKs0d,iBACxBt0d,KAAKs0d,eAAehid,UAExBtS,KAAKs0d,oBAAiBn5d,EACtB6E,KAAKo0d,oBAAiBj5d,EACtB6E,KAAKq0d,sBAAmBl5d,GAErBg5d,KCrrBPkC,GAAgC,WAChC,SAASA,IACLr2d,KAAK67D,SA6ET,OAxEAw6Z,EAAeh7d,UAAUi7d,gBAAkB,SAAU95b,EAAQ91B,GAEzD,IAAK,IADD6vd,OAAgBp7d,EACXgB,EAAI,EAAGA,EAAI6D,KAAK67D,MAAMp/D,OAAQN,IACnC,GAAI6D,KAAK67D,MAAM1/D,GAAGo4d,QAAQ/3b,OAAQrhC,OAAWA,GAAY,CACrDo7d,EAAgBv2d,KAAK67D,MAAM1/D,GAC3B,MAYR,OATIsB,EAAkB84d,KAClBA,EAAgB,IAAIpC,GAAcztd,IACpB4td,eAAiB93b,EAC/B+5b,EAAcnC,eAAiB,EAC/Bp0d,KAAK67D,MAAMr3D,KAAK+xd,IAGhBA,EAAcnC,iBAEXmC,GAKXF,EAAeh7d,UAAUm7d,mBAAqB,SAAUC,EAAcp/Z,EAAUr6D,GAE5E,IAAK,IADDu5d,OAAgBp7d,EACXgB,EAAI,EAAGA,EAAI6D,KAAK67D,MAAMp/D,OAAQN,IACnC,GAAI6D,KAAK67D,MAAM1/D,GAAGo4d,QAAQkC,EAAanC,eAAgBj9Z,EAAUr6D,GAAQ,CACrEu5d,EAAgBv2d,KAAK67D,MAAM1/D,GAC3B,MAcR,OAXIsB,EAAkB84d,KAClBA,EAAgB,IAAIpC,GAAcsC,EAAapC,mBACjC6B,WAAWO,EAAcp/Z,EAAUr6D,EAAOy5d,EAAapC,kBACrEkC,EAAcnC,eAAiB,EAC/Bp0d,KAAK67D,MAAMr3D,KAAK+xd,IAGhBA,EAAcnC,iBAElBp0d,KAAKuE,OAAOkyd,GACZA,OAAet7d,EACRo7d,GAKXF,EAAeh7d,UAAUkJ,OAAS,SAAUkyd,GACxCA,EAAarC,iBACTqC,EAAarC,gBAAkB,IAC/Bp0d,KAAK67D,MAAMpzC,OAAOzoB,KAAK67D,MAAMt9D,QAAQk4d,GAAe,GACpDA,EAAankd,UACbmkd,OAAet7d,IAMvBk7d,EAAeh7d,UAAUutD,MAAQ,WAC7B,GAAInrD,EAAkBuC,KAAK67D,OACvB,IAAK,IAAI1/D,EAAI,EAAGA,EAAI6D,KAAK67D,MAAMp/D,OAAQN,IACnC6D,KAAK67D,MAAM1/D,GAAGmW,UAGtBtS,KAAK67D,UAKTw6Z,EAAeh7d,UAAUiX,QAAU,WAC/BtS,KAAK4oD,QACL5oD,KAAK67D,WAAQ1gE,GAEVk7d,KCpFPxqY,GAAwC,WACxC,IAAIC,EAAgBxtF,OAAOytF,iBACpBC,wBAA2BxtF,OAAS,SAAUs7B,EAAGwD,GAAKxD,EAAEkyD,UAAY1uD,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAI2uD,KAAK3uD,EAAOA,EAAE32B,eAAeslF,KAAInyD,EAAEmyD,GAAK3uD,EAAE2uD,KACzE,OAAO,SAAUnyD,EAAGwD,GAEhB,SAAS4uD,IAAOlsF,KAAKpC,YAAck8B,EADnCgyD,EAAchyD,EAAGwD,GAEjBxD,EAAEz+B,UAAkB,OAANiiC,EAAah/B,OAAO6tF,OAAO7uD,IAAM4uD,EAAG7wF,UAAYiiC,EAAEjiC,UAAW,IAAI6wF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAYllF,EAAQ9J,EAAKivF,GAC7E,IAA2HxyD,EAAvH4lC,EAAI1gE,UAAUvC,OAAQ2gC,EAAIsiC,EAAI,EAAIv4D,EAAkB,OAATmlF,EAAgBA,EAAOhuF,OAAOiuF,yBAAyBplF,EAAQ9J,GAAOivF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBrvD,EAAIovD,QAAQC,SAASJ,EAAYllF,EAAQ9J,EAAKivF,QACpH,IAAK,IAAInwF,EAAIkwF,EAAW5vF,OAAS,EAAGN,GAAK,EAAGA,KAAS29B,EAAIuyD,EAAWlwF,MAAIihC,GAAKsiC,EAAI,EAAI5lC,EAAEsD,GAAKsiC,EAAI,EAAI5lC,EAAE3yB,EAAQ9J,EAAK+/B,GAAKtD,EAAE3yB,EAAQ9J,KAAS+/B,GAChJ,OAAOsiC,EAAI,GAAKtiC,GAAK9+B,OAAOuJ,eAAeV,EAAQ9J,EAAK+/B,GAAIA,GA0B5Ds5b,GAAgC,SAAUhqY,GAK1C,SAASgqY,EAAe1jd,EAAShS,GAC7B,IAAIjB,EAAQ2sF,EAAOprF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAuTnD,OArTAD,EAAM42d,sBAAuB,EAI7B52d,EAAM62d,mBAAoB,EAI1B72d,EAAM82d,iBAAkB,EAIxB92d,EAAM+2d,kBAAmB,EAIzB/2d,EAAM+3F,YAAS38F,EACf4E,EAAMg3d,kBAAmB,EAIzBh3d,EAAMi3d,qBAAkB77d,EAIxB4E,EAAMk3d,aAAe,GAIrBl3d,EAAMm3d,iCAA8B/7d,EAIpC4E,EAAMo3d,mCAAgCh8d,EAItC4E,EAAMq3d,6BAA0Bj8d,EAIhC4E,EAAMs3d,8BAA2Bl8d,EAIjC4E,EAAMu3d,2BAAwBn8d,EAI9B4E,EAAMw3d,wBAAqBp8d,EAI3B4E,EAAMy3d,+BAAgC,EAItCz3d,EAAM03d,YAAc,UAIpB13d,EAAM23d,wBAAyB,EAI/B33d,EAAM43d,kBAAmB,EAIzB53d,EAAMijb,eACF40C,MAAS,QACTv+P,IAAO,MACPw+P,KAAQ,OACRC,GAAM,KACNnmU,OAAU,SACVliI,KAAQ,OACRsoc,kBAAmB,kBACnBvwP,OAAU,SACVwwP,QAAW,UACXC,aAAc,aACdC,UAAa,YACb7/L,KAAQ,OACRnE,OAAU,SACVC,MAAS,QACT+B,QAAW,UACXiiM,mBAAoB,mBACpBC,sBAAuB,sBACvBC,QAAW,UACXC,iBAAkB,iBAClBC,WAAY,WACZC,QAAW,UACXC,gBAAiB,gBACjBC,kCAAmC,kCACnCC,+CAAgD,+CAChDC,qBAAsB,qBACtB34N,IAAO,MACPq0B,OAAU,SACVukM,uBAAwB,uBACxBC,uBAAwB,uBACxBC,8BAA+B,8BAC/BC,eAAgB,eAChBC,0BAA2B,0BAC3BC,QAAW,UACXztR,KAAQ,OACR0tR,OAAU,SACV9mN,IAAO,MACP+mN,aAAgB,eAChBC,aAAgB,eAChB/mN,QAAW,UACXC,WAAc,aACdt8C,OAAU,SACVqjQ,OAAU,SACVC,kBAAqB,oBACrBC,kBAAqB,oBACrBC,sBAAyB,wBACzBC,mBAAsB,qBACtBC,mBAAsB,qBACtBC,uBAA0B,yBAC1BC,kBAAqB,oBACrBC,kBAAqB,oBACrBC,sBAAyB,wBACzBC,WAAc,aACdC,WAAc,aACdC,eAAkB,iBAClBC,SAAY,WACZC,UAAa,YACbC,OAAU,SACVC,MAAS,QACTC,MAAS,QACTC,MAAS,QACTC,MAAS,QACTC,OAAU,SACVC,OAAU,SACVC,QAAW,UACXC,MAAS,QACTC,UAAa,YACbC,UAAa,YACbC,GAAM,KACNC,GAAM,KACNC,GAAM,KACNC,GAAM,KACNC,GAAM,KACNC,cAAe,cACfC,yBAA0B,yBAC1BC,uBAAwB,uBACxBC,YAAa,YACb9gH,OAAU,SACV+gH,OAAU,SACVjmQ,OAAU,UACVkmQ,MAAS,QACTh/D,OAAU,SACVi/D,YAAe,cACf5sN,UAAa,YACbJ,SAAY,WACZitN,oBAAqB,oBACrBC,oBAAqB,oBACrBC,2BAA4B,2BAC5BC,QAAW,UACXC,aAAc,aACdC,cAAe,cACfC,yCAA0C,yCAC1CC,+BAAgC,+BAChCC,OAAU,SACVC,mBAAoB,mBACpBC,YAAa,YACbC,QAAW,UACXC,iBAAkB,iBAClB9wN,OAAU,SACV+wN,iBAAkB,iBAClBC,qBAAsB,qBACtBC,OAAU,SACVC,MAAS,QACTC,QAAW,UACXC,IAAO,MACP7wE,IAAO,MACP95I,OAAU,SACV4qN,QAAW,UACXC,QAAW,UACXjtM,KAAQ,OACRktM,WAAY,WACZC,mBAAoB,mBACpBC,eAAgB,eAChBC,gBAAiB,gBACjBC,eAAgB,eAChBC,oBAAqB,oBACrBC,iBAAkB,iBAClBC,kBAAmB,kBACnBC,QAAW,UACXC,mBAAoB,mBACpBC,iBAAkB,iBAClBC,OAAU,SACVC,QAAW,UACXC,YAAe,cACfC,cAAe,cACfC,QAAW,UACXC,aAAc,aACdC,QAAW,UACXC,aAAc,aACdC,GAAM,KACNC,OAAU,SACVC,eAAgB,eAChBC,MAAS,QACTC,GAAM,KACNn7B,SAAY,WACZo7B,QAAW,UACXC,6BAA8B,6BAC9BC,aAAc,aACdC,yBAA0B,yBAC1BC,MAAS,QACTC,gBAAiB,gBACjBC,8BAA+B,8BAC/BC,8BAA+B,8BAC/BC,WAAY,WACZC,qBAAsB,qBACtB7vX,SAAY,WACZ8vX,iBAAkB,iBAClBC,aAAc,aACdC,qBAAsB,qBACtBC,gBAAiB,gBACjBC,MAAS,QACTC,OAAU,SACVC,QAAW,UACXC,SAAY,WACZC,SAAY,WACZC,UAAa,YACbhpc,OAAU,SACVipc,eAAgB,eAChBC,OAAU,SACVC,QAAW,UACXC,eAAgB,eAChBC,WAAY,WACZC,aAAc,aACd7qQ,KAAQ,OACR8qQ,aAAc,aACdC,kBAAmB,kBACnBC,aAAc,aACdC,QAAW,UACXC,cAAiB,gBACjBC,YAAe,cACfC,UAAa,YACbC,uBAAwB,uBACxB57N,QAAW,UACXI,KAAQ,OACRC,OAAU,SACV+9K,IAAO,MACPD,KAAQ,OACRE,MAAS,QACTt9B,UAAa,YACb86E,iBAAkB,iBAClBC,iBAAkB,iBAClBC,mBAAoB,mBACpBC,UAAa,YACbC,cAAe,cACfC,eAAgB,eAChBC,eAAgB,eAChBC,cAAe,cACfC,eAAgB,eAChBp6C,OAAU,SACVq6C,eAAgB,eAChBC,aAAc,aACdC,gBAAiB,gBACjBC,YAAa,YACbC,cAAe,cACfpgP,KAAQ,OACRqgP,WAAc,aACdC,QAAW,UACXC,QAAW,UACXC,cAAe,cACfC,kBAAmB,kBACnBC,KAAQ,OACRC,aAAc,aACdC,WAAY,WACZC,OAAU,SACVC,GAAM,KACNt/d,UAAa,YACbu/d,KAAQ,OACRC,uBAAwB,uBACxBC,qBAAsB,qBACtBC,gBAAiB,gBACjBC,MAAS,QACTC,aAAc,aACdC,WAAc,aACdC,KAAQ,OACRC,aAAc,aACdC,iBAAkB,iBAClBC,gCAAiC,gCACjCC,WAAc,aACdC,wBAAyB,wBACzBC,UAAa,YACbC,eAAgB,eAChBC,aAAc,aACdC,SAAY,WACZC,aAAc,aACdC,qBAAsB,qBACtBC,oCAAqC,0YAKrCC,OAAU,SACVC,mBAAoB,mBACpBC,eAAgB,eAChBC,IAAO,MACPC,QAAW,UACXC,gBAAiB,gBACjBC,oBAAqB,qBAEzB9je,EAAM+je,OAAS,IAAIC,GAAiBhke,GACpCA,EAAM+3F,OAAS,IAAIksY,GAAWjke,EAAM+je,QAC7B/je,EAijCX,OA72CA8rF,GAAU6qY,EAAgBhqY,GA8T1Bu3Y,EAAmBvN,EACnBp4d,OAAOuJ,eAAe6ud,EAAer7d,UAAW,yBAI5CqM,IAAK,WACD,OAAO1H,KAAK22d,sBAEhBtvd,IAAK,SAAUrK,GACXgD,KAAK22d,qBAAuB35d,EAC5BgD,KAAK8je,OAAOI,oBAEhBv8d,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ud,EAAer7d,UAAW,aAI5CqM,IAAK,WACD,OAAK1H,KAAKmke,kBAAoB1me,EAAkBuC,KAAK8je,QAC1C,EAEJ9je,KAAK8je,OAAO1qP,MAAM38O,QAE7BkL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ud,EAAer7d,UAAW,aAM5CqM,IAAK,WACD,OAAO1H,KAAKsmO,iBAEhB3+N,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ud,EAAer7d,UAAW,UAM5CqM,IAAK,WACD,OAAO1H,KAAKoke,cAEhBz8d,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ud,EAAer7d,UAAW,iBAK5CqM,IAAK,WACD,OAAO1H,KAAKqke,qBAEhB18d,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ud,EAAer7d,UAAW,UAK5CqM,IAAK,WACD,OAAO1H,KAAKske,cAEhB38d,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ud,EAAer7d,UAAW,eAK5CqM,IAAK,WACD,OAAO1H,KAAKuke,mBAEhB58d,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ud,EAAer7d,UAAW,eAI5CqM,IAAK,WACD,OAAO1H,KAAKgB,QAAQsC,IAExBqE,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ud,EAAer7d,UAAW,oBAI5CqM,IAAK,WACD,OAAO1H,KAAKwke,oBAEhBn9d,IAAK,SAAUrK,GACXgD,KAAKwke,mBAAqBxne,GAE9B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ud,EAAer7d,UAAW,qBAM5CqM,IAAK,WACD,OAAO1H,KAAKyke,sBAAwBhne,EAAkBuC,KAAKqke,sBAE/D18d,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ud,EAAer7d,UAAW,iBAM5CqM,IAAK,WACD,IAAKjK,EAAkBuC,KAAKsmO,iBACxB,OAAOtmO,KAAKqxE,UAAUqzZ,oBAI9B/8d,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ud,EAAer7d,UAAW,eAM5CqM,IAAK,WACD,IAAKjK,EAAkBuC,KAAKsmO,iBACxB,OAAOtmO,KAAKqxE,UAAUszZ,kBAI9Bh9d,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ud,EAAer7d,UAAW,kBAI5CqM,IAAK,WACD,OAAO1H,KAAK4ke,YAAcnne,EAAkBuC,KAAKoke,eAAiB3me,EAAkBuC,KAAKsmO,kBAE7F3+N,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ud,EAAer7d,UAAW,0BAM5CqM,IAAK,WACD,OAAO1H,KAAK6ke,qBAAuBpne,EAAkBuC,KAAKu3d,qBAE9D5vd,YAAY,EACZC,cAAc,IAElB8ud,EAAer7d,UAAUoX,UAAY,WACjCzS,KAAKg3d,oBAGTN,EAAer7d,UAAUsyG,OAAS,WAG9B,GAFA3tG,KAAK8je,OAAOgB,uBACZ9ke,KAAK+ke,aACAtne,EAAkBuC,KAAKgB,SAAU,CAClC,IAAI4Z,EAAY5a,KAAKgB,QACrB4Z,EAAUlW,MAAMioD,UAAY,QAC5B/xC,EAAUlW,MAAMmoD,SAAW,UAOnC6pa,EAAer7d,UAAU0kC,cAAgB,WACrC,MAAO,kBAMX22b,EAAer7d,UAAU0tF,kBAAoB,SAAU58D,EAAO8hE,GAC1D,IAAK,IAAI7vF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK6uB,GAAQ/tB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE5D,OADWyE,EAAGzE,IAEV,IAAK,aACG4B,KAAK8je,SACL9je,KAAK8je,OAAOj0Z,WAAa1jD,EAAM0jD,YAEnC,MACJ,IAAK,SACD7vE,KAAKgle,kBACL,MACJ,IAAK,cACIvne,EAAkBuC,KAAKile,oBAAsBjle,KAAKile,kBAAkBC,mBACrElle,KAAKile,kBAAkBE,qBAAoB,MAM/DzO,EAAer7d,UAAU2pe,gBAAkB,WACvC,GAAoB,KAAhBhle,KAAKgO,OAAe,CACpB,IAAIikH,EAAO,IAAI7Y,GAAK,iBAAkBp5G,KAAKgjb,eAC3C/wT,EAAK1Y,UAAUv5G,KAAKgO,QACpBL,GAAW3N,KAAKgO,QACZhO,KAAKile,mBACLjle,KAAKile,kBAAkBG,gBAAgBnzW,GAEvCjyH,KAAKs3d,uBACLt3d,KAAKs3d,sBAAsB+N,oBAAoBpzW,GAE/CjyH,KAAKsle,uBACLtle,KAAKsle,sBAAsBC,oBAAoBtzW,GAE/CjyH,KAAKwle,kBACLxle,KAAKwle,iBAAiBC,eAAexzW,GAErCjyH,KAAK0le,uBACL1le,KAAK0le,sBAAsBC,oBAAoB1zW,GAE/CjyH,KAAKuke,mBACLvke,KAAKuke,kBAAkBqB,gBAAgB3zW,GAEvCjyH,KAAK6le,kBACL7le,KAAK6le,iBAAiBC,eAAe7zW,GAErCjyH,KAAKk3d,6BACLl3d,KAAKk3d,4BAA4B6O,wBAAwB9zW,GAEzDjyH,KAAKm3d,+BACLn3d,KAAKm3d,8BAA8B6O,6BAA6B/zW,GAEhEjyH,KAAKo3d,yBACLp3d,KAAKo3d,wBAAwB6O,sBAAsBh0W,GAEnDjyH,KAAKq3d,0BACLr3d,KAAKq3d,yBAAyB6O,uBAAuBj0W,GAErDjyH,KAAKmme,mBACLnme,KAAKmme,kBAAkBC,gBAAgBn0W,GAEvCjyH,KAAKqme,mBACLrme,KAAKqme,kBAAkBC,gBAAgBr0W,GAEvCjyH,KAAKume,6BACLvme,KAAKume,4BAA4BC,yBAAyBv0W,KAQtEykW,EAAer7d,UAAU+yG,eAAiB,WACtC,MAAO,kBAEXsoX,EAAer7d,UAAUore,kCAAoC,WACrDzme,KAAK8je,kBAAkB4C,IACvB1me,KAAK8je,OAAO6C,sBAMpBjQ,EAAer7d,UAAUure,yBAA2B,WAChD,OAAO5me,KAAKgB,SAKhB01d,EAAer7d,UAAUwre,kBAAoB,WACzC7me,KAAK0mB,QAAQ,kBAKjBgwc,EAAer7d,UAAUyre,mBAAqB,WAC1C9me,KAAK0mB,QAAQ,mBAKjBgwc,EAAer7d,UAAU0re,oBAAsB,YACtC/me,KAAK8je,OAAOkD,oBAAsBx7d,GAAQob,UAAY5mB,KAAKoke,cAC5Dpke,KAAKoke,aAAa6C,cAEtBjne,KAAK0mB,QAAQ,oBAKjBgwc,EAAer7d,UAAU6re,qBAAuB,WAC5Clne,KAAK0mB,QAAQ,qBAKjBgwc,EAAer7d,UAAU8re,eAAiB,WACtC,GAAInne,KAAK8je,QAAU9je,KAAK8je,OAAO1qP,MAAM38O,OAAS,GACtCuD,KAAK8je,OAAOsD,aAAa3qe,OAAS,EAAG,CACrC,IAAI28O,EAAQp5O,KAAK8je,OAAOsD,aACpB75d,GACAqyS,UAAWxmE,EAAM,GAAGnnO,MAAQ,EAC5Bo1d,QAASjuP,EAAMA,EAAM38O,OAAS,GAAGwV,MAAQ,GAE7CjS,KAAK0mB,QAAQ,aAAcnZ,KAQvCmpd,EAAer7d,UAAUise,oBAAsB,SAAUC,GACjDvne,KAAKs3d,wBAA0Bt3d,KAAKwne,gBAAkBxne,KAAK8je,QAC3D9je,KAAKs3d,sBAAsB1mW,KAAK22W,IAOxC7Q,EAAer7d,UAAUose,oBAAsB,WACvCzne,KAAKsle,wBAA0Btle,KAAKwne,gBAAkBxne,KAAK8je,QAC3D9je,KAAKsle,sBAAsB10W,QAOnC8lW,EAAer7d,UAAUqse,eAAiB,SAAUC,GAC5C3ne,KAAKwle,mBAAqBxle,KAAKwne,gBAAkBxne,KAAK8je,QACtD9je,KAAKwle,iBAAiBkC,eAAeC,IAO7CjR,EAAer7d,UAAUuse,sBAAwB,WACzC5ne,KAAKo3d,0BAA4Bp3d,KAAKwne,gBAAkBxne,KAAK8je,QAC7D9je,KAAKo3d,wBAAwBxmW,QAOrC8lW,EAAer7d,UAAUwse,uBAAyB,WAC1C7ne,KAAKq3d,2BAA6Br3d,KAAKwne,gBAAkBxne,KAAK8je,QAC9D9je,KAAKq3d,yBAAyBzmW,QAOtC8lW,EAAer7d,UAAUyse,gBAAkB,WACnC9ne,KAAKmme,oBAAsBnme,KAAKwne,gBAAkBxne,KAAK8je,QACvD9je,KAAKmme,kBAAkBv1W,QAO/B8lW,EAAer7d,UAAU0se,0BAA4B,WAC7C/ne,KAAKume,8BAAgCvme,KAAKwne,gBAAkBxne,KAAK8je,QACjE9je,KAAKume,4BAA4B31W,QAQzC8lW,EAAer7d,UAAU2se,gBAAkB,WACnChoe,KAAKqme,oBAAsBrme,KAAKwne,gBAAkBxne,KAAK8je,QACvD9je,KAAKqme,kBAAkBz1W,QAO/B8lW,EAAer7d,UAAU4se,oBAAsB,WACvCjoe,KAAK0le,wBAA0B1le,KAAKwne,gBAAkBxne,KAAK8je,QAC3D9je,KAAK0le,sBAAsB90W,QAOnC8lW,EAAer7d,UAAU6se,mBAAqB,WACtCloe,KAAKmoe,uBAAyBnoe,KAAKwne,gBAAkBxne,KAAK8je,QAC1D9je,KAAKmoe,qBAAqBv3W,QAOlC8lW,EAAer7d,UAAU+se,iBAAmB,WACpCpoe,KAAKqoe,qBAAuBroe,KAAKwne,gBAAkBxne,KAAK8je,QACxD9je,KAAKqoe,mBAAmBz3W,QAOhC8lW,EAAer7d,UAAUite,eAAiB,WAClCtoe,KAAK6le,mBAAqB7le,KAAKwne,gBAAkBxne,KAAK8je,QACtD9je,KAAK6le,iBAAiByC,kBAO9B5R,EAAer7d,UAAUkte,0BAA4B,WAC7Cvoe,KAAKk3d,8BAAgCl3d,KAAKwne,gBAAkBxne,KAAK8je,QACjE9je,KAAKk3d,4BAA4BtmW,QAOzC8lW,EAAer7d,UAAUmte,4BAA8B,WAC/Cxoe,KAAKm3d,gCAAkCn3d,KAAKwne,gBAAkBxne,KAAK8je,QACnE9je,KAAKm3d,8BAA8BvmW,QAI3C8lW,EAAer7d,UAAU+2F,gBAAkB,WACvC,IAAIgB,KA6HJ,OA5HIpzF,KAAKyoe,aACLr1Y,EAAQ5uF,MACJouF,OAAQ,QAAS3yF,WAGrBD,KAAK0oe,kBAAoB1oe,KAAK2oe,kBAAoB3oe,KAAK4oe,kBAAoB5oe,KAAK6oe,iBAAmB7oe,KAAK8oe,eACxG11Y,EAAQ5uF,MACJouF,OAAQ,aAAc3yF,MAAOD,KAAK8je,UAGtC9je,KAAK2oe,kBACLv1Y,EAAQ5uF,MACJouF,OAAQ,aAAc3yF,UAG1BD,KAAK4oe,kBACLx1Y,EAAQ5uF,MACJouF,OAAQ,aAAc3yF,WAG1BD,KAAK6oe,iBAAmB7oe,KAAKgtd,cAAgBhtd,KAAK8oe,gBAClD11Y,EAAQ5uF,MACJouF,OAAQ,YAAa3yF,MAAOD,QAE5BA,KAAK+oe,mBACL31Y,EAAQ5uF,MACJouF,OAAQ,cAAe3yF,MAAOD,KAAK8je,WAI3C9je,KAAKgtd,eACL55X,EAAQ5uF,MACJouF,OAAQ,SAAU3yF,MAAOD,QAEzBA,KAAKgpe,mBACL51Y,EAAQ5uF,MACJouF,OAAQ,cAAe3yF,MAAOD,KAAK8je,WAI3C9je,KAAK8oe,eACL11Y,EAAQ5uF,MACJouF,OAAQ,SAAU3yF,MAAOD,KAAK8je,UAE9B9je,KAAK6ke,oBACLzxY,EAAQ5uF,MACJouF,OAAQ,eAAgB3yF,MAAOD,KAAMA,KAAK8je,UAG9C9je,KAAKyke,qBACLrxY,EAAQ5uF,MACJouF,OAAQ,gBAAiB3yF,MAAOD,QAGpCA,KAAKipe,uBACL71Y,EAAQ5uF,MACJouF,OAAQ,kBAAmB3yF,MAAOD,KAAK8je,UAG3C9je,KAAKkpe,mBACL91Y,EAAQ5uF,MACJouF,OAAQ,cAAe3yF,MAAOD,KAAK8je,UAGvC9je,KAAKmpe,sBACL/1Y,EAAQ5uF,MACJouF,OAAQ,iBAAkB3yF,MAAOD,KAAK8je,UAG1C9je,KAAKope,6BACLh2Y,EAAQ5uF,MACJouF,OAAQ,wBAAyB3yF,MAAOD,KAAK8je,UAGjD9je,KAAKqpe,uBACLj2Y,EAAQ5uF,MACJouF,OAAQ,kBAAmB3yF,MAAOD,KAAK8je,UAG3C9je,KAAKspe,oBACLl2Y,EAAQ5uF,MACJouF,OAAQ,eAAgB3yF,MAAOD,KAAK8je,UAExC1wY,EAAQ5uF,MACJouF,OAAQ,cAAe3yF,MAAOD,KAAK8je,UAEvC1wY,EAAQ5uF,MACJouF,OAAQ,4BAA6B3yF,MAAOD,KAAK8je,WAGrD9je,KAAKupe,kBACLn2Y,EAAQ5uF,MACJouF,OAAQ,aAAc3yF,MAAOD,KAAK8je,UAGtC9je,KAAKwpe,uBACLp2Y,EAAQ5uF,MACJouF,OAAQ,kBAAmB3yF,MAAOD,KAAK8je,UAG3C9je,KAAKype,kBACLr2Y,EAAQ5uF,MACJouF,OAAQ,aAAc3yF,MAAOD,KAAK8je,UAGtC9je,KAAK0pe,8BACLt2Y,EAAQ5uF,MACJouF,OAAQ,wBAAyB3yF,MAAOD,KAAK8je,UAEjD1wY,EAAQ5uF,MACJouF,OAAQ,oBAAqB3yF,MAAOD,KAAK8je,WAG7C9je,KAAK2pe,+BACLv2Y,EAAQ5uF,MACJouF,OAAQ,0BAA2B3yF,MAAOD,KAAK8je,UAGnD9je,KAAK4pe,0BACLx2Y,EAAQ5uF,MACJouF,OAAQ,qBAAsB3yF,MAAOD,KAAK8je,WAI/C1wY,GAOXsjY,EAAer7d,UAAUqG,KAAO,SAAUmoe,GACjCpse,EAAkBuC,KAAK8je,UACxB9je,KAAKyme,oCACLzme,KAAK8je,OAAOjlM,SACZ7+R,KAAK8je,OAAOgG,iBACZ9pe,KAAK8je,OAAOvge,OAAS,IAAIwme,IACpBtse,EAAkBose,IAAa7pe,KAAK8je,SACrC9je,KAAK8je,OAAOkG,kBAAkBhqe,KAAK83F,OAAOmyY,sBAAsBJ,IAC5D7pe,KAAKoke,cACLpke,KAAKoke,aAAa8F,4BAUlCxT,EAAer7d,UAAU8ue,aAAe,SAAU/2P,GAC9C,QAAI31O,EAAkBuC,KAAK8je,SAAW1wP,EAAa,GAAKA,EAAapzO,KAAK8je,OAAO1qP,MAAM38O,UAGvFuD,KAAK8je,OAAOqG,aAAa/2P,EAAa,IAC/B,IAMXsjP,EAAer7d,UAAU+ue,iBAAmB,WACxCpqe,KAAKyoe,YAAczoe,KAAK0oe,iBAAmB1oe,KAAK2oe,iBAAmB3oe,KAAK4oe,iBAClE5oe,KAAK6oe,gBAAkB7oe,KAAK+oe,kBAAoB/oe,KAAKgtd,aAAehtd,KAAKgpe,kBACrEhpe,KAAK8oe,aAAe9oe,KAAK6ke,mBAAqB7ke,KAAKyke,oBAC/Czke,KAAKipe,sBAAwBjpe,KAAKkpe,kBAAoBlpe,KAAKmpe,qBACvDnpe,KAAKope,4BAA8Bppe,KAAKqpe,sBAAwBrpe,KAAKspe,kBACjEtpe,KAAKupe,iBAAmBvpe,KAAKwpe,sBAAwBxpe,KAAKype,iBACtDzpe,KAAK0pe,4BAA8B1pe,KAAK2pe,8BACpC3pe,KAAK4pe,0BAA2B,EAE9D3F,EAAiBj2X,OAAOq8X,GAAOC,GAAYC,GAAYC,GAAY/vJ,GAAWn+Q,GAAQmua,GAAQC,GAAcC,GAAeh0H,GAAai0H,GAAaC,GAAiBC,GAAaC,GAAgBC,GAAuBC,GAAiBC,GAAaC,GAAYC,GAAiBC,GAA2BC,GAAYC,GAAuBC,GAAyBC,GAAoBC,GAAmBC,KAOvZjV,EAAer7d,UAAU6iV,OAAS,SAAUloU,EAAOD,GAC3C/V,KAAKgB,WACAvD,EAAkBuY,IAAUA,EAAQ,MACrChW,KAAKgB,QAAQ0D,MAAMsR,MAAQA,EAAQ,OAElCvY,EAAkBsY,IAAWA,EAAS,MACvC/V,KAAKgB,QAAQ0D,MAAMqR,OAASA,EAAS,MAErC/V,KAAK8je,QACL9je,KAAK8je,OAAO8H,qBAOxBlV,EAAer7d,UAAUuoI,QAAU,WAC3B5jI,KAAK8je,QACL9je,KAAK8je,OAAO+H,eAQpBnV,EAAer7d,UAAUywe,QAAU,SAAUC,GACrCtue,EAAkBsue,KAClBA,EAAc,QAEd/re,KAAK8je,SACL9je,KAAK8je,OAAOiI,YAAcA,IAOlCrV,EAAer7d,UAAU0F,MAAQ,SAAUE,GACvC,GAAIxD,EAAkBuC,KAAK8je,QACvB,MAAM,IAAIlje,MAAM,sBAEpB,IAAIZ,KAAKgse,YAIL,MAAM,IAAIpre,MAAM,4CAHhBZ,KAAKgse,YAAYjre,MAAMf,KAAK8je,OAAQ7ie,IAS5Cy1d,EAAer7d,UAAUgtD,UAAY,WAEjC,KAAIroD,KAAK0oe,kBAAoB1oe,KAAKise,4BAA4B3B,IAI1D,MAAM,IAAI1pe,MAAM,kDAEpB,OALWZ,KAAKise,iBAAiB5jb,aAYrCqua,EAAer7d,UAAU2zF,KAAO,SAAUqyJ,EAAU6hC,GAEhD,GADA7hC,EAAWA,GAAY,WACnB5jP,EAAkBuC,KAAK8je,QACvB,MAAM,IAAIlje,MAAM,sBAEpB,GAAmB,SAAfsiR,GAAyBljR,KAAKkse,iBAC1Blse,KAAKkse,kBACLlse,KAAKkse,iBAAiBl9Y,KAAKhvF,KAAK8je,OAAQziP,QAG3C,GAAmB,QAAf6hC,GAAwBljR,KAAKmse,iBAClCnse,KAAKmse,iBAAiBn9Y,KAAKhvF,KAAK8je,OAAQziP,OAEvC,CAAA,GAAmB,SAAf6hC,IAAyBljR,KAAK0oe,mBAAoB1oe,KAAKise,iBAQ5D,MAAM,IAAIrre,MAAM,uDAPhB,IAAIwre,EAAapse,KAAKqoD,YAClBgiG,EAAO,IAAIo3F,MAAM2qP,IACjB1le,KAAM,qBAEV06O,GAAKpyJ,KAAKqyJ,EAAW,QAASh3F,KAUtCqsU,EAAer7d,UAAUm4P,WAAa,SAAU0vB,GAC5C,IAAInjR,EAAQC,KACZ,GAAIvC,EAAkBuC,KAAK8je,QACvB,MAAM,IAAIlje,MAAM,qBAEpB,OAAO,IAAIujF,QAAQ,SAAUC,EAASC,GACf,SAAf6+L,GAAyBnjR,EAAMmse,iBAC/B9nZ,EAAQrkF,EAAMmse,iBAAiB14O,WAAWzzP,EAAM+je,SAE5B,QAAf5gN,GAAwBnjR,EAAMose,iBACnC/nZ,EAAQrkF,EAAMose,iBAAiB34O,WAAWzzP,EAAM+je,SAE5B,SAAf5gN,GAAyBnjR,EAAM2oe,kBAAoB3oe,EAAMkse,kBAC9D7nZ,EAAQrkF,EAAMkse,iBAAiBz4O,WAAWzzP,EAAM+je,YAO5DpN,EAAer7d,UAAU0pe,UAAY,WACjC,IAAI9vM,EAAU,IAAIo3M,GAClBp3M,EAAQhjR,MAAQ,EAChBgjR,EAAQq3M,cAAgB,IAAIC,GAAet3M,GAC3C,IAAIu3M,EAAY,IAAIC,GACpBD,EAAUv6d,MAAQ,EAClBu6d,EAAUjF,gBAAkB,IAAImF,GAAiBF,GACjDA,EAAU7E,gBAAkB,IAAIgF,GAAiBH,GACjDv3M,EAAQ23M,aAAapoe,KAAKgoe,GAC1BA,EAAUK,gBAAkB53M,EAC5B,IAAIrsB,KACJA,EAASpkQ,KAAKywR,GAEd,IAAI63M,EAAM9se,KAAK83F,OAAOi1Y,mBAAoB5mZ,UAAY8gC,UAAY+lX,cAAgBC,cAAgBC,mBAAqBC,yBAAuBhye,GAC9I,GAAI6E,KAAK8je,SACL9je,KAAKyme,oCACLzme,KAAK8je,OAAOsJ,eAAe5oe,KAAKsoe,GAChC9se,KAAK8je,OAAOkG,kBAAkBphO,GAC1B5oQ,KAAKoke,cAAc,CACnBpke,KAAKoke,aAAa8F,yBAClB,IAAIxle,EAAQ1E,KAAK8je,OAAOvge,OAAO8pe,WAAW,UAC1Cb,EAAUjF,gBAAgB+F,UAAY5oe,EACtC8ne,EAAUjF,gBAAgBgG,WAAWD,UAAY5oe,IAQ7Dgyd,EAAer7d,UAAUmye,cAAgB,SAAUC,GAC/C,OAAIzte,KAAK8je,OACE9je,KAAK8je,OAAOvge,OAAOiqe,cAAcC,OAQhD/W,EAAer7d,UAAUqye,UAAY,SAAUD,GAC3C,OAAIzte,KAAK8je,OACE9je,KAAK8je,OAAOvge,OAAOmqe,UAAUD,OAS5C/W,EAAer7d,UAAUsye,WAAa,SAAUC,GAC5C,OAAQA,GACJ,IAAK,YACD5te,KAAKioe,sBACL,MACJ,IAAK,QACDjoe,KAAK8ne,kBACL,MACJ,IAAK,WACD9ne,KAAKkoe,qBACL,MACJ,IAAK,kBACDloe,KAAK+ne,4BACL,MACJ,IAAK,YACD/ne,KAAKyne,sBACL,MACJ,IAAK,OACDzne,KAAKsoe,iBACL,MACJ,IAAK,SACDtoe,KAAKooe,mBACL,MACJ,IAAK,QACDpoe,KAAKgoe,kBACL,MACJ,IAAK,YACDhoe,KAAKsne,sBACL,MACJ,IAAK,OACDtne,KAAK0ne,iBACL,MACJ,IAAK,kBACD1ne,KAAKuoe,4BACL,MACJ,IAAK,oBACDvoe,KAAKwoe,8BACL,MACJ,IAAK,eACDxoe,KAAK6ne,2BAOjBnR,EAAer7d,UAAUwye,gBAAkB,WAClCpwe,EAAkBuC,KAAKile,oBAAuBxne,EAAkBuC,KAAK8je,SACtE9je,KAAKile,kBAAkBE,qBAAoB,IAMnDzO,EAAer7d,UAAUiX,QAAU,WAC/Bo6E,EAAOrxF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAK8te,0BACArwe,EAAkBuC,KAAK8je,SACxB9je,KAAK8je,OAAOxxd,UAEhBtS,KAAK8je,YAAS3oe,EACTsC,EAAkBuC,KAAKgB,WACxBhB,KAAKgB,QAAQ8C,UAAUS,OAAO,oBAC9BvE,KAAKgB,QAAQgB,UAAY,IAE7BhC,KAAKgB,aAAU7F,EACf6E,KAAKg3d,mBACLh3d,KAAKg3d,qBAAkB77d,GAE3Bu7d,EAAer7d,UAAUyye,wBAA0B,WAC3C9te,KAAKgse,cACLhse,KAAKgse,YAAY15d,UACjBtS,KAAKgse,iBAAc7we,GAEnB6E,KAAKise,mBACLjse,KAAKise,iBAAiB35d,UACtBtS,KAAKise,sBAAmB9we,GAExB6E,KAAKile,oBACLjle,KAAKile,kBAAkB3yd,UACvBtS,KAAKile,uBAAoB9pe,GAExBsC,EAAkBuC,KAAK0le,yBACxB1le,KAAK0le,sBAAsBpzd,UAC3BtS,KAAK0le,2BAAwBvqe,GAE7B6E,KAAKske,eACLtke,KAAKske,aAAahyd,UAClBtS,KAAKske,kBAAenpe,GAEpB6E,KAAKuke,oBACLvke,KAAKuke,kBAAkBjyd,UACvBtS,KAAKuke,uBAAoBppe,GAEzB6E,KAAKoke,eACLpke,KAAKoke,aAAa9xd,UAClBtS,KAAKoke,kBAAejpe,GAEpB6E,KAAKsmO,kBACLtmO,KAAKsmO,gBAAgBh0N,UACrBtS,KAAKsmO,qBAAkBnrO,GAEvB6E,KAAKqke,sBACLrke,KAAKqke,oBAAoB/xd,UACzBtS,KAAKqke,yBAAsBlpe,GAE1BsC,EAAkBuC,KAAKs3d,yBACxBt3d,KAAKs3d,sBAAsBhld,UAC3BtS,KAAKs3d,2BAAwBn8d,GAE7B6E,KAAKsle,wBACLtle,KAAKsle,sBAAsBhzd,UAC3BtS,KAAKsle,2BAAwBnqe,GAE7B6E,KAAKwle,mBACLxle,KAAKwle,iBAAiBlzd,UACtBtS,KAAKwle,sBAAmBrqe,GAExB6E,KAAK6le,mBACL7le,KAAK6le,iBAAiBvzd,UACtBtS,KAAK6le,sBAAmB1qe,GAExB6E,KAAKu3d,qBACLv3d,KAAKu3d,mBAAmBjld,UACxBtS,KAAKu3d,wBAAqBp8d,GAE1B6E,KAAKk3d,8BACLl3d,KAAKk3d,4BAA4B5kd,UACjCtS,KAAKk3d,iCAA8B/7d,GAEnC6E,KAAKm3d,gCACLn3d,KAAKm3d,8BAA8B7kd,UACnCtS,KAAKm3d,mCAAgCh8d,GAErC6E,KAAKo3d,0BACLp3d,KAAKo3d,wBAAwB9kd,UAC7BtS,KAAKo3d,6BAA0Bj8d,GAE/B6E,KAAKq3d,2BACLr3d,KAAKq3d,yBAAyB/kd,UAC9BtS,KAAKq3d,8BAA2Bl8d,GAEhC6E,KAAKmme,oBACLnme,KAAKmme,kBAAkB7zd,UACvBtS,KAAKmme,uBAAoBhre,GAEzB6E,KAAKqme,oBACLrme,KAAKqme,uBAAoBlre,GAEzB6E,KAAKmoe,uBACLnoe,KAAKmoe,qBAAqB71d,UAC1BtS,KAAKmoe,0BAAuBhte,GAE5B6E,KAAKqme,oBACLrme,KAAKqme,kBAAkB/zd,UACvBtS,KAAKqme,uBAAoBlre,GAEzB6E,KAAKmse,mBACLnse,KAAKmse,iBAAiB75d,UACtBtS,KAAKmse,sBAAmBhxe,GAExB6E,KAAKkse,mBACLlse,KAAKkse,iBAAiB55d,UACtBtS,KAAKkse,sBAAmB/we,GAExB6E,KAAKume,8BACLvme,KAAKume,4BAA4Bj0d,UACjCtS,KAAKume,iCAA8Bpre,IAG3CixF,IACIllF,EAAS,IACVwvd,EAAer7d,UAAW,kBAAc,GAC3C+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,kBAAc,GAC3C+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,mBAAe,GAC5C+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,uBAAmB,GAChD+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,oBAAgB,GAC7C+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,2BAAuB,GACpD+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,wBAAoB,GACjD+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,wBAAoB,GACjD+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,wBAAoB,GACjD+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,yBAAqB,GAClD+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,yBAAqB,GAClD+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,6BAAyB,GACtD+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,4BAAwB,GACrD+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,mCAA+B,GAC5D+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,oBAAgB,GAC7C+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,6BAAyB,GACtD+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,wBAAoB,GACjD+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,mCAA+B,GAC5D+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,qCAAiC,GAC9D+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,6BAAyB,GACtD+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,yBAAqB,GAClD+wF,IACIllF,GAAS,IACVwvd,EAAer7d,UAAW,wB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F,EAAS,OACVoipB,EAAejupB,UAAW,0BAAsB,GACnD+wF,IACIllF,KACDoipB,EAAejupB,UAAW,iBAAa,GAC1C+wF,IACIllF,GAAS,IACVoipB,EAAejupB,UAAW,oBAAgB,GACtCiupB,GACT9olB,IAKE+olB,GAAmC,SAAU78jB,GAE7C,SAAS68jB,IACL,OAAkB,OAAX78jB,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBA6rF,GAAU09jB,EAAmB78jB,GAI7BN,IACIllF,EAAS,QACVqipB,EAAkBlupB,UAAW,YAAQ,GACxC+wF,IACIllF,EAAS,SACVqipB,EAAkBlupB,UAAW,yBAAqB,GACrD+wF,IACIllF,EAAS,WACVqipB,EAAkBlupB,UAAW,YAAQ,GACxC+wF,IACIllF,GAAS,IACVqipB,EAAkBlupB,UAAW,oBAAgB,GAChD+wF,IACIllF,GAAS,IACVqipB,EAAkBlupB,UAAW,wBAAoB,GAC7CkupB,GACT/olB,IAKEgplB,GAAgC,SAAU98jB,GAE1C,SAAS88jB,IACL,OAAkB,OAAX98jB,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBA6rF,GAAU29jB,EAAgB98jB,GAI1BN,IACIllF,OACDsipB,EAAenupB,UAAW,cAAU,GACvC+wF,IACIllF,EAAS,KACVsipB,EAAenupB,UAAW,WAAO,GACpC+wF,IACIllF,EAAS,aACVsipB,EAAenupB,UAAW,gBAAY,GACzC+wF,IACIllF,GAAS,IACVsipB,EAAenupB,UAAW,kBAAc,GAC3C+wF,IACIllF,GAAS,IACVsipB,EAAenupB,UAAW,oBAAgB,GACtCmupB,GACThplB,IAKEiplB,GAAiC,SAAU/8jB,GAE3C,SAAS+8jB,IACL,OAAkB,OAAX/8jB,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAK/D,OAPA6rF,GAAU49jB,EAAiB/8jB,GAI3BN,IACIllF,KACDuipB,EAAgBpupB,UAAW,gBAAY,GACnCoupB,GACTjplB,IAKEkplB,GAAkC,SAAUh9jB,GAE5C,SAASg9jB,IACL,OAAkB,OAAXh9jB,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAK/D,OAPA6rF,GAAU69jB,EAAkBh9jB,GAI5BN,IACIllF,EAAS,SACVwipB,EAAiBrupB,UAAW,gBAAY,GACpCqupB,GACTlplB,IAKEmplB,GAA+B,SAAUj9jB,GAEzC,SAASi9jB,IACL,OAAkB,OAAXj9jB,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBA6rF,GAAU89jB,EAAej9jB,GAIzBN,IACIllF,GAAS,IACVyipB,EAActupB,UAAW,oBAAgB,GAC5C+wF,IACIllF,GAAS,IACVyipB,EAActupB,UAAW,wBAAoB,GAChD+wF,IACIllF,GAAS,IACVyipB,EAActupB,UAAW,yBAAqB,GACjD+wF,IACIllF,GAAS,IACVyipB,EAActupB,UAAW,yBAAqB,GACjD+wF,IACIllF,GAAS,IACVyipB,EAActupB,UAAW,iCAA6B,GACzD+wF,IACIllF,OACDyipB,EAActupB,UAAW,eAAW,GACvC+wF,IACIllF,KACDyipB,EAActupB,UAAW,uBAAmB,GACxCsupB,GACTnplB,IAKEoplB,GAA8B,SAAUl9jB,GAExC,SAASk9jB,IACL,OAAkB,OAAXl9jB,GAAmBA,EAAOnxF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBA6rF,GAAU+9jB,EAAcl9jB,GAIxBN,IACIllF,GAAS,IACV0ipB,EAAavupB,UAAW,mBAAe,GAC1C+wF,IACIllF,GAAS,IACV0ipB,EAAavupB,UAAW,oBAAgB,GAC3C+wF,IACIllF,GAAS,IACV0ipB,EAAavupB,UAAW,qBAAiB,GAC5C+wF,IACIllF,EAAS,WACV0ipB,EAAavupB,UAAW,YAAQ,GACnC+wF,IACIllF,GAAS,IACV0ipB,EAAavupB,UAAW,2BAAuB,GAClD+wF,IACIllF,GAAS,IACV0ipB,EAAavupB,UAAW,yBAAqB,GAChD+wF,IACIllF,GAAS,IACV0ipB,EAAavupB,UAAW,+BAA2B,GAC/CuupB,GACTpplB,IAYEgnlB,GAAsB,SAAU96jB,GAMhC,SAAS86jB,EAAKx0oB,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pB,UAAW,yBAAqB,GACxC+wF,IACIllF,EAAS,SACVsgpB,EAAKnspB,UAAW,cAAU,GAC7B+wF,IACIllF,EAAS,SACVsgpB,EAAKnspB,UAAW,aAAS,GAC5B+wF,IACIllF,EAAS,YACVsgpB,EAAKnspB,UAAW,iBAAa,GAChC+wF,IACIllF,KACDsgpB,EAAKnspB,UAAW,mBAAe,GAClC+wF,IACIllF,KACDsgpB,EAAKnspB,UAAW,sBAAkB,GACrC+wF,IACIllF,KACDsgpB,EAAKnspB,UAAW,iBAAa,GAChC+wF,IACIllF,KACDsgpB,EAAKnspB,UAAW,mBAAe,GAClC+wF,IACIllF,EAAS,aACVsgpB,EAAKnspB,UAAW,iBAAa,GAChC+wF,IACIllF,OACDsgpB,EAAKnspB,UAAW,kBAAc,GACjC+wF,IACIllF,EAAS,OACVsgpB,EAAKnspB,UAAW,iBAAa,GAChC+wF,IACIllF,KACDsgpB,EAAKnspB,UAAW,aAAS,GAC5B+wF,IACIllF,EAAS,QACVsgpB,EAAKnspB,UAAW,oBAAgB,GACnC+wF,IACIllF,KACDsgpB,EAAKnspB,UAAW,eAAW,GAC9B+wF,IACIllF,KACDsgpB,EAAKnspB,UAAW,wBAAoB,GACvC+wF,IACIllF,KACDsgpB,EAAKnspB,UAAW,uBAAmB,GACtC+wF,IACIllF,KACDsgpB,EAAKnspB,UAAW,uBAAmB,GACtC+wF,IACIllF,KACDsgpB,EAAKnspB,UAAW,qBAAiB,GACpC+wF,IACIllF,EAAS,IACVsgpB,EAAKnspB,UAAW,kBAAc,GACjC+wF,IACIllF,EAAS,IACVsgpB,EAAKnspB,UAAW,qBAAiB,GACpC+wF,IACIllF,EAAS,QACVsgpB,EAAKnspB,UAAW,uBAAmB,GACtC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,eAAW,GAC9B+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,iBAAa,GAChC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,YAAQ,GAC3B+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,oBAAgB,GACnC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,qBAAiB,GACpC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,sBAAkB,GACrC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,mBAAe,GAClC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,sBAAkB,GACrC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,qBAAiB,GACpC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,iBAAa,GAChC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,yBAAqB,GACxC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,oBAAgB,GACnC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,mBAAe,GAClC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,sBAAkB,GACrC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,qBAAiB,GACpC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,qBAAiB,GACpC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,oBAAgB,GACnC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,uBAAmB,GACtC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,sBAAkB,GACrC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,uBAAmB,GACtC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,kBAAc,GACjC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,kBAAc,GACjC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,qBAAiB,GACpC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,mBAAe,GAClC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,wBAAoB,GACvC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,8BAA0B,GAC7C+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,0BAAsB,GACzC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,gCAA4B,GAC/C+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,yBAAqB,GACxC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,2BAAuB,GAC1C+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,uBAAmB,GACtC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,yBAAqB,GACxC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,uBAAmB,GACtC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,oBAAgB,GACnC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,eAAW,GAC9B+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,eAAW,GAC9B+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,oBAAgB,GACnC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,+BAA2B,GAC9C+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,gBAAY,GAC/B+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,mBAAe,GAClC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,mBAAe,GAClC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,sBAAkB,GACrC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,yBAAqB,GACxC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,uBAAmB,GACtC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,iBAAa,GAChC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,gBAAY,GAC/B+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,gBAAY,GAC/B+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,iBAAa,GAChC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,mBAAe,GAClC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,gBAAY,GAC/B+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,kBAAc,GACjC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,uBAAmB,GACtC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,uBAAmB,GACtC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,wBAAoB,GACvC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,sBAAkB,GACrC+wF,IACItjF,KACD0+oB,EAAKnspB,UAAW,uBAAmB,GACtC+wF,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IrkF,KAAY0vsB,KACboG,EAAKxitB,UAAW,gBAAY,GAC/B+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,YAAQ,GAC3B+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,mBAAe,GAClC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,cAAU,GAC7B+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,aAAS,GAC5B+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,mBAAe,GAClC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,kBAAc,GACjC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,cAAU,GAC7B+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,qBAAiB,GACpC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,qBAAiB,GACpC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,qBAAiB,GACpC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,qBAAiB,GACpC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,sBAAkB,GACrC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,sBAAkB,GACrC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,sBAAkB,GACrC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,uBAAmB,GACtC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,mBAAe,GAClC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,uBAAmB,GACtC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,0BAAsB,GACzC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,uBAAmB,GACtC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,mBAAe,GAClC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,uBAAmB,GACtC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,yBAAqB,GACxC+wF,IACItjF,KACD+0sB,EAAKxitB,UAAW,2BAAuB,GAC1CwitB,EAAOzxnB,IACHhjF,GACDy0sB,IAEL1wmB,ICrlCEg1mB,GAAwB,WACxB,SAASA,EAAOx3oB,GAIZ3qE,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AalquB,UAAW,yBAAqB,GAChD+wF,IACIllF,EAAS,aACVq+tB,EAAalquB,UAAW,iBAAa,GACxC+wF,IACIllF,KACDq+tB,EAAalquB,UAAW,wBAAoB,GAC/C+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,kBAAc,GACzC+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,qBAAiB,GAC5C+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,mBAAe,GAC1C+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,uBAAmB,GAC9C+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,wBAAoB,GAC/C+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,qBAAiB,GAC5C+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,sBAAkB,GAC7C+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,oBAAgB,GAC3C+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,mBAAe,GAC1C+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,sBAAkB,GAC7C+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,qBAAiB,GAC5C+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,qBAAiB,GAC5C+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,oBAAgB,GAC3C+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,uBAAmB,GAC9C+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,sBAAkB,GAC7C+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,mBAAe,GAC1C+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,gBAAY,GACvC+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,kBAAc,GACzC+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,8BAA0B,GACrD+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,wBAAoB,GAC/C+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,gCAA4B,GACvD+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,0BAAsB,GACjD+wF,IACItjF,KACDy8tB,EAAalquB,UAAW,uBAAmB,GAC9C+wF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F,KAAY00Z,KACbkqU,EAAUtruB,UAAW,kBAAc,GACtC+wF,IACIllF,KACDy/tB,EAAUtruB,UAAW,mBAAe,GACvC+wF,IACIllF,GAAS,IACVy/tB,EAAUtruB,UAAW,uBAAmB,GAC3C+wF,IACIllF,GAAS,IACVy/tB,EAAUtruB,UAAW,4BAAwB,GAChD+wF,IACIllF,GAAS,IACVy/tB,EAAUtruB,UAAW,0BAAsB,GAC9C+wF,IACIllF,EAAS,SACVy/tB,EAAUtruB,UAAW,cAAU,GAClC+wF,IACIllF,EAAS,SACVy/tB,EAAUtruB,UAAW,aAAS,GACjC+wF,IACIllF,GAAS,IACVy/tB,EAAUtruB,UAAW,wBAAoB,GAC5C+wF,IACIllF,GAAS,IACVy/tB,EAAUtruB,UAAW,sBAAkB,GAC1C+wF,IACItjF,KACD69tB,EAAUtruB,UAAW,qBAAiB,GACzC+wF,IACItjF,KACD69tB,EAAUtruB,UAAW,sBAAkB,GAC1C+wF,IACItjF,KACD69tB,EAAUtruB,UAAW,gBAAY,GACpC+wF,IACItjF,KACD69tB,EAAUtruB,UAAW,kBAAc,GACtC+wF,IACItjF,KACD69tB,EAAUtruB,UAAW,8BAA0B,GAClD+wF,IACItjF,KACD69tB,EAAUtruB,UAAW,wBAAoB,GAC5C+wF,IACItjF,KACD69tB,EAAUtruB,UAAW,gCAA4B,GACpD+wF,IACItjF,KACD69tB,EAAUtruB,UAAW,0BAAsB,GAC9C+wF,IACItjF,KACD69tB,EAAUtruB,UAAW,uBAAmB,GAC3C+wF,IACItjF,KACD69tB,EAAUtruB,UAAW,kBAAc,GACtC+wF,IACItjF,KACD69tB,EAAUtruB,UAAW,kBAAc,GACtC+wF,IACItjF,KACD69tB,EAAUtruB,UAAW,YAAQ,GAChC+wF,IACItjF,KACD69tB,EAAUtruB,UAAW,wBAAoB,GAC5C+wF,IACItjF,KACD69tB,EAAUtruB,UAAW,uBAAmB,GAC3C+wF,IACItjF,KACD69tB,EAAUtruB,UAAW,iBAAa,GACrC+wF,IACItjF,KACD69tB,EAAUtruB,UAAW,eAAW,GACnC+wF,IACI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IllF,EAAS,IACVwyyB,EAASr+yB,UAAW,uBAAmB,GAC1C+wF,IACIllF,GAAS,IACVwyyB,EAASr+yB,UAAW,2BAAuB,GAC9C+wF,IACIllF,KACDwyyB,EAASr+yB,UAAW,gBAAY,GACnC+wF,IACIrkF,KAAYgsyB,KACb2F,EAASr+yB,UAAW,qBAAiB,GACxC+wF,IACIllF,KACDwyyB,EAASr+yB,UAAW,8BAA0B,GACjD+wF,IACIrkF,KAAY4pa,KACb+nY,EAASr+yB,UAAW,aAAS,GAChC+wF,IACI/jF,KAAe+xwB,KAChBs/B,EAASr+yB,UAAW,iBAAa,GACpC+wF,IACIllF,KACDwyyB,EAASr+yB,UAAW,gBAAY,GACnC+wF,IACIllF,GAAS,IACVwyyB,EAASr+yB,UAAW,iBAAa,GACpC+wF,IACItjF,KACD4wyB,EAASr+yB,UAAW,eAAW,GAClC+wF,IACItjF,KACD4wyB,EAASr+yB,UAAW,iBAAa,GACpC+wF,IACItjF,KACD4wyB,EAASr+yB,UAAW,iBAAa,GACpC+wF,IACItjF,KACD4wyB,EAASr+yB,UAAW,uBAAmB,GAC1C+wF,IACItjF,KACD4wyB,EAASr+yB,UAAW,mBAAe,GACtC+wF,IACItjF,KACD4wyB,EAASr+yB,UAAW,sBAAkB,GACzC+wF,IACItjF,KACD4wyB,EAASr+yB,UAAW,qBAAiB,GACxC+wF,IACItjF,KACD4wyB,EAASr+yB,UAAW,kBAAc,GACrC+wF,IACItjF,KACD4wyB,EAASr+yB,UAAW,kBAAc,GACrC+wF,IACItjF,KACD4wyB,EAASr+yB,UAAW,kBAAc,GACrC+wF,IACItjF,KACD4wyB,EAASr+yB,UAAW,qBAAiB,GACxC+wF,IACItjF,KACD4wyB,EAASr+yB,UAAW,mBAAe,GACtC+wF,IACItjF,KACD4wyB,EAASr+yB,UAAW,iBAAa,GACpC+wF,IACItjF,KACD4wyB,EAASr+yB,UAAW,iBAAa,GACpCq+yB,EAAWtttB,IACPhjF,GACDswyB,IAELvssB,IChtCE0ysB,GAA0B,WAI1B,SAASA,EAASv/yB,GACd,IAAIP,EAAQC,KACZA,KAAK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"}