cmat 0.0.17 → 0.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/carousel/carousel.component.d.ts +136 -0
- package/components/carousel/carousel.interface.d.ts +38 -0
- package/components/carousel/index.d.ts +5 -0
- package/components/carousel/public-api.d.ts +2 -0
- package/components/custom-formly/public-api.d.ts +1 -0
- package/components/custom-formly/types/knob/knob.component.d.ts +36 -0
- package/components/custom-formly/types/table/table.component.d.ts +3 -8
- package/components/custom-formly/wrappers/form-field/form-field.component.d.ts +4 -4
- package/components/image-viewer/image-viewer.component.d.ts +76 -0
- package/components/image-viewer/index.d.ts +5 -0
- package/components/image-viewer/public-api.d.ts +1 -0
- package/components/knob-input/index.d.ts +5 -0
- package/components/knob-input/knob-input.component.d.ts +95 -0
- package/components/knob-input/public-api.d.ts +1 -0
- package/components/material-datetimepicker/datetimepicker-input.d.ts +2 -2
- package/components/opt-input/index.d.ts +5 -0
- package/components/opt-input/models/config.d.ts +14 -0
- package/components/opt-input/otp-input.component.d.ts +70 -0
- package/components/opt-input/public-api.d.ts +1 -0
- package/components/opt-input/utils/keyboard-util.d.ts +9 -0
- package/components/opt-input/utils/object-util.d.ts +3 -0
- package/components/org-chart/designer/chart-designer.component.d.ts +17 -0
- package/components/org-chart/index.d.ts +5 -0
- package/components/org-chart/node/chart-node.component.d.ts +17 -0
- package/components/org-chart/node/node.type.d.ts +22 -0
- package/components/org-chart/org-chart.component.d.ts +12 -0
- package/components/org-chart/public-api.d.ts +2 -0
- package/components/popover/popover.interfaces.d.ts +1 -1
- package/components/select-table/index.d.ts +5 -0
- package/components/select-table/public-api.d.ts +2 -0
- package/components/select-table/select-table.component.d.ts +96 -0
- package/components/select-table/select-table.type.d.ts +20 -0
- package/components/select-tree/select-tree.component.d.ts +11 -12
- package/components/speed-dial/index.d.ts +5 -0
- package/components/speed-dial/public-api.d.ts +2 -0
- package/components/speed-dial/speed-dial.component.d.ts +63 -0
- package/components/transfer-picker/interface.d.ts +0 -1
- package/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.d.ts +8 -6
- package/components/treetable/index.d.ts +5 -0
- package/components/treetable/public-api.d.ts +2 -0
- package/components/treetable/treetable.component.d.ts +32 -0
- package/components/treetable/treetable.interface.d.ts +9 -0
- package/directives/animate-on-scroll/animate-on-scroll.directive.d.ts +4 -4
- package/directives/arrow-cursor/arrow-cursor.directive.d.ts +31 -0
- package/directives/arrow-cursor/index.d.ts +5 -0
- package/directives/arrow-cursor/public-api.d.ts +1 -0
- package/directives/data-exporter/constants.d.ts +26 -0
- package/directives/data-exporter/data-exporter.directive.d.ts +18 -0
- package/directives/data-exporter/index.d.ts +5 -0
- package/directives/data-exporter/mime.d.ts +5 -0
- package/directives/data-exporter/options.d.ts +21 -0
- package/directives/data-exporter/public-api.d.ts +2 -0
- package/directives/data-exporter/services/exporters/csv-exporter.service.d.ts +12 -0
- package/directives/data-exporter/services/exporters/exporter.d.ts +4 -0
- package/directives/data-exporter/services/exporters/file-exporter.d.ts +8 -0
- package/directives/data-exporter/services/exporters/json-exporter.service.d.ts +11 -0
- package/directives/data-exporter/services/exporters/txt-exporter.service.d.ts +12 -0
- package/directives/data-exporter/services/exporters/worksheet-exporter.d.ts +10 -0
- package/directives/data-exporter/services/exporters/xls-exporter.service.d.ts +14 -0
- package/directives/data-exporter/services/exporters/xlsx-exporter.service.d.ts +9 -0
- package/directives/data-exporter/services/file-util.d.ts +8 -0
- package/directives/data-exporter/services/service-locator.service.d.ts +11 -0
- package/directives/debounce/abstract-debounce.directive.d.ts +1 -1
- package/fesm2022/cmat-animations.mjs.map +1 -1
- package/fesm2022/cmat-components-adapter.mjs +9 -9
- package/fesm2022/cmat-components-adapter.mjs.map +1 -1
- package/fesm2022/cmat-components-breadcrumb.mjs +10 -10
- package/fesm2022/cmat-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/cmat-components-card.mjs +4 -4
- package/fesm2022/cmat-components-card.mjs.map +1 -1
- package/fesm2022/cmat-components-carousel.mjs +711 -0
- package/fesm2022/cmat-components-carousel.mjs.map +1 -0
- package/fesm2022/cmat-components-cascade.mjs +12 -12
- package/fesm2022/cmat-components-cascade.mjs.map +1 -1
- package/fesm2022/cmat-components-chip-input.mjs +5 -5
- package/fesm2022/cmat-components-chip-input.mjs.map +1 -1
- package/fesm2022/cmat-components-custom-formly.mjs +168 -155
- package/fesm2022/cmat-components-custom-formly.mjs.map +1 -1
- package/fesm2022/cmat-components-date-range.mjs +5 -5
- package/fesm2022/cmat-components-date-range.mjs.map +1 -1
- package/fesm2022/cmat-components-drawer.mjs +6 -6
- package/fesm2022/cmat-components-drawer.mjs.map +1 -1
- package/fesm2022/cmat-components-fullscreen.mjs +4 -4
- package/fesm2022/cmat-components-fullscreen.mjs.map +1 -1
- package/fesm2022/cmat-components-highlight.mjs +7 -7
- package/fesm2022/cmat-components-highlight.mjs.map +1 -1
- package/fesm2022/cmat-components-image-viewer.mjs +227 -0
- package/fesm2022/cmat-components-image-viewer.mjs.map +1 -0
- package/fesm2022/cmat-components-json-editor.mjs +4 -4
- package/fesm2022/cmat-components-json-editor.mjs.map +1 -1
- package/fesm2022/cmat-components-knob-input.mjs +404 -0
- package/fesm2022/cmat-components-knob-input.mjs.map +1 -0
- package/fesm2022/cmat-components-masonry.mjs +4 -4
- package/fesm2022/cmat-components-masonry.mjs.map +1 -1
- package/fesm2022/cmat-components-material-color-picker.mjs +4 -4
- package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-material-datetimepicker.mjs +53 -53
- package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
- package/fesm2022/cmat-components-navigation.mjs +51 -51
- package/fesm2022/cmat-components-navigation.mjs.map +1 -1
- package/fesm2022/cmat-components-opt-input.mjs +457 -0
- package/fesm2022/cmat-components-opt-input.mjs.map +1 -0
- package/fesm2022/cmat-components-org-chart.mjs +141 -0
- package/fesm2022/cmat-components-org-chart.mjs.map +1 -0
- package/fesm2022/cmat-components-pagination.mjs +13 -13
- package/fesm2022/cmat-components-pagination.mjs.map +1 -1
- package/fesm2022/cmat-components-password-strength.mjs +12 -12
- package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
- package/fesm2022/cmat-components-popover.mjs +10 -10
- package/fesm2022/cmat-components-popover.mjs.map +1 -1
- package/fesm2022/cmat-components-progress-bar.mjs +4 -4
- package/fesm2022/cmat-components-progress-bar.mjs.map +1 -1
- package/fesm2022/cmat-components-rating.mjs +4 -4
- package/fesm2022/cmat-components-rating.mjs.map +1 -1
- package/fesm2022/cmat-components-select-search.mjs +11 -11
- package/fesm2022/cmat-components-select-search.mjs.map +1 -1
- package/fesm2022/cmat-components-select-table.mjs +658 -0
- package/fesm2022/cmat-components-select-table.mjs.map +1 -0
- package/fesm2022/cmat-components-select-tree.mjs +75 -57
- package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
- package/fesm2022/cmat-components-speed-dial.mjs +312 -0
- package/fesm2022/cmat-components-speed-dial.mjs.map +1 -0
- package/fesm2022/cmat-components-timeline.mjs +14 -14
- package/fesm2022/cmat-components-timeline.mjs.map +1 -1
- package/fesm2022/cmat-components-toast.mjs +11 -11
- package/fesm2022/cmat-components-toast.mjs.map +1 -1
- package/fesm2022/cmat-components-transfer-picker.mjs +60 -41
- package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-treetable.mjs +122 -0
- package/fesm2022/cmat-components-treetable.mjs.map +1 -0
- package/fesm2022/cmat-components-upload.mjs +11 -11
- package/fesm2022/cmat-components-upload.mjs.map +1 -1
- package/fesm2022/cmat-directives-animate-on-scroll.mjs +21 -21
- package/fesm2022/cmat-directives-animate-on-scroll.mjs.map +1 -1
- package/fesm2022/cmat-directives-arrow-cursor.mjs +184 -0
- package/fesm2022/cmat-directives-arrow-cursor.mjs.map +1 -0
- package/fesm2022/cmat-directives-autofocus.mjs +3 -3
- package/fesm2022/cmat-directives-autofocus.mjs.map +1 -1
- package/fesm2022/cmat-directives-data-exporter.mjs +324 -0
- package/fesm2022/cmat-directives-data-exporter.mjs.map +1 -0
- package/fesm2022/cmat-directives-debounce.mjs +9 -9
- package/fesm2022/cmat-directives-debounce.mjs.map +1 -1
- package/fesm2022/cmat-directives-digit-only.mjs +8 -6
- package/fesm2022/cmat-directives-digit-only.mjs.map +1 -1
- package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
- package/fesm2022/cmat-directives-equal-validator.mjs.map +1 -1
- package/fesm2022/cmat-lib-mock-api.mjs +6 -6
- package/fesm2022/cmat-lib-mock-api.mjs.map +1 -1
- package/fesm2022/cmat-pipes-bytes.mjs +3 -3
- package/fesm2022/cmat-pipes-bytes.mjs.map +1 -1
- package/fesm2022/cmat-pipes-date-format.mjs +3 -3
- package/fesm2022/cmat-pipes-date-format.mjs.map +1 -1
- package/fesm2022/cmat-pipes-find-by-key.mjs +3 -3
- package/fesm2022/cmat-pipes-find-by-key.mjs.map +1 -1
- package/fesm2022/cmat-pipes-group-by.mjs +3 -3
- package/fesm2022/cmat-pipes-group-by.mjs.map +1 -1
- package/fesm2022/cmat-pipes-keys.mjs +3 -3
- package/fesm2022/cmat-pipes-keys.mjs.map +1 -1
- package/fesm2022/cmat-pipes-secure.mjs +3 -3
- package/fesm2022/cmat-pipes-secure.mjs.map +1 -1
- package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
- package/fesm2022/cmat-pipes-uppercase.mjs.map +1 -1
- package/fesm2022/cmat-services-alert.mjs +3 -3
- package/fesm2022/cmat-services-alert.mjs.map +1 -1
- package/fesm2022/cmat-services-config.mjs +6 -6
- package/fesm2022/cmat-services-config.mjs.map +1 -1
- package/fesm2022/cmat-services-confirmation.mjs +7 -7
- package/fesm2022/cmat-services-confirmation.mjs.map +1 -1
- package/fesm2022/cmat-services-data.mjs +3 -3
- package/fesm2022/cmat-services-data.mjs.map +1 -1
- package/fesm2022/cmat-services-export-as.mjs +211 -0
- package/fesm2022/cmat-services-export-as.mjs.map +1 -0
- package/fesm2022/cmat-services-loading.mjs +6 -6
- package/fesm2022/cmat-services-loading.mjs.map +1 -1
- package/fesm2022/cmat-services-local-storage.mjs +3 -3
- package/fesm2022/cmat-services-local-storage.mjs.map +1 -1
- package/fesm2022/cmat-services-media-watcher.mjs +3 -3
- package/fesm2022/cmat-services-media-watcher.mjs.map +1 -1
- package/fesm2022/cmat-services-platform.mjs +3 -3
- package/fesm2022/cmat-services-platform.mjs.map +1 -1
- package/fesm2022/cmat-services-splash-screen.mjs +3 -3
- package/fesm2022/cmat-services-splash-screen.mjs.map +1 -1
- package/fesm2022/cmat-services-title.mjs +3 -3
- package/fesm2022/cmat-services-title.mjs.map +1 -1
- package/fesm2022/cmat-services-translation.mjs +3 -3
- package/fesm2022/cmat-services-translation.mjs.map +1 -1
- package/fesm2022/cmat-services-utils.mjs +3 -3
- package/fesm2022/cmat-services-utils.mjs.map +1 -1
- package/fesm2022/cmat-validators.mjs.map +1 -1
- package/fesm2022/cmat-version.mjs.map +1 -1
- package/icons/arrow-cursor.svg +1 -1
- package/package.json +82 -148
- package/services/export-as/export-as-config.model.d.ts +8 -0
- package/services/export-as/export-as.service.d.ts +43 -0
- package/services/export-as/index.d.ts +5 -0
- package/services/export-as/public-api.d.ts +2 -0
- package/styles/overrides/angular-material.scss +95 -13
- package/esm2022/animations/cmat-animations.mjs +0 -5
- package/esm2022/animations/defaults.mjs +0 -12
- package/esm2022/animations/dropdown.mjs +0 -26
- package/esm2022/animations/expand-collapse.mjs +0 -17
- package/esm2022/animations/fade.mjs +0 -170
- package/esm2022/animations/public-api.mjs +0 -19
- package/esm2022/animations/shake.mjs +0 -59
- package/esm2022/animations/slide.mjs +0 -124
- package/esm2022/animations/transform.mjs +0 -16
- package/esm2022/animations/zoom.mjs +0 -38
- package/esm2022/cmat.mjs +0 -5
- package/esm2022/components/adapter/cmat-components-adapter.mjs +0 -5
- package/esm2022/components/adapter/datetime-adapter.mjs +0 -127
- package/esm2022/components/adapter/datetime-formats.mjs +0 -3
- package/esm2022/components/adapter/dayjs-date-adapter.mjs +0 -198
- package/esm2022/components/adapter/dayjs-date-formats.mjs +0 -12
- package/esm2022/components/adapter/dayjs-datetime-adapter.mjs +0 -100
- package/esm2022/components/adapter/dayjs-datetime-formats.mjs +0 -21
- package/esm2022/components/adapter/native-datetime-adapter.mjs +0 -130
- package/esm2022/components/adapter/native-datetime-formats.mjs +0 -15
- package/esm2022/components/adapter/public-api.mjs +0 -9
- package/esm2022/components/breadcrumb/breadcrumb-item.directive.mjs +0 -19
- package/esm2022/components/breadcrumb/breadcrumb.component.mjs +0 -94
- package/esm2022/components/breadcrumb/breadcrumb.service.mjs +0 -333
- package/esm2022/components/breadcrumb/cmat-components-breadcrumb.mjs +0 -5
- package/esm2022/components/breadcrumb/public-api.mjs +0 -6
- package/esm2022/components/breadcrumb/types/breadcrumb.config.mjs +0 -2
- package/esm2022/components/breadcrumb/types/breadcrumb.mjs +0 -2
- package/esm2022/components/card/card.component.mjs +0 -49
- package/esm2022/components/card/card.types.mjs +0 -2
- package/esm2022/components/card/cmat-components-card.mjs +0 -5
- package/esm2022/components/card/public-api.mjs +0 -3
- package/esm2022/components/cascade/cascade-bottom-sheet/cascade-bottom-sheet.component.mjs +0 -49
- package/esm2022/components/cascade/cascade-list/cascade-list.component.mjs +0 -384
- package/esm2022/components/cascade/cascade-menu/cascade-menu.component.mjs +0 -22
- package/esm2022/components/cascade/cmat-components-cascade.mjs +0 -5
- package/esm2022/components/cascade/options.interface.mjs +0 -2
- package/esm2022/components/cascade/public-api.mjs +0 -4
- package/esm2022/components/chip-input/chip-input.component.mjs +0 -251
- package/esm2022/components/chip-input/cmat-components-chip-input.mjs +0 -5
- package/esm2022/components/chip-input/public-api.mjs +0 -2
- package/esm2022/components/custom-formly/cmat-components-custom-formly.mjs +0 -5
- package/esm2022/components/custom-formly/extension/addons.extension.mjs +0 -13
- package/esm2022/components/custom-formly/public-api.mjs +0 -29
- package/esm2022/components/custom-formly/types/button/button.component.mjs +0 -81
- package/esm2022/components/custom-formly/types/cascade/cascade.component.mjs +0 -71
- package/esm2022/components/custom-formly/types/checklist/checklist.component.mjs +0 -161
- package/esm2022/components/custom-formly/types/chips/chips.component.mjs +0 -55
- package/esm2022/components/custom-formly/types/color-picker/color-picker.component.mjs +0 -15
- package/esm2022/components/custom-formly/types/date-range/date-range.component.mjs +0 -25
- package/esm2022/components/custom-formly/types/datepicker/datepicker.component.mjs +0 -51
- package/esm2022/components/custom-formly/types/multicheckbox/multicheckbox.component.mjs +0 -88
- package/esm2022/components/custom-formly/types/number/number.component.mjs +0 -27
- package/esm2022/components/custom-formly/types/quill/quill.component.mjs +0 -171
- package/esm2022/components/custom-formly/types/radio/radio.component.mjs +0 -87
- package/esm2022/components/custom-formly/types/rating/rating.component.mjs +0 -27
- package/esm2022/components/custom-formly/types/repeat/repeat.component.mjs +0 -25
- package/esm2022/components/custom-formly/types/select/select.component.mjs +0 -167
- package/esm2022/components/custom-formly/types/select-tree/select-tree.component.mjs +0 -66
- package/esm2022/components/custom-formly/types/stepper/horizontal/stepper.component.mjs +0 -28
- package/esm2022/components/custom-formly/types/stepper/stepper.type.mjs +0 -2
- package/esm2022/components/custom-formly/types/stepper/vertical/stepper.component.mjs +0 -28
- package/esm2022/components/custom-formly/types/table/table.component.mjs +0 -127
- package/esm2022/components/custom-formly/types/tabs/tab.component.mjs +0 -16
- package/esm2022/components/custom-formly/types/tags/tags.component.mjs +0 -146
- package/esm2022/components/custom-formly/types/textarea/textarea.component.mjs +0 -25
- package/esm2022/components/custom-formly/types/upload/upload.component.mjs +0 -58
- package/esm2022/components/custom-formly/wrappers/addons/addons.component.mjs +0 -92
- package/esm2022/components/custom-formly/wrappers/card/card.component.mjs +0 -14
- package/esm2022/components/custom-formly/wrappers/expansion/expansion.component.mjs +0 -14
- package/esm2022/components/custom-formly/wrappers/form-field/form-field.component.mjs +0 -47
- package/esm2022/components/custom-formly/wrappers/panel/panel.component.mjs +0 -12
- package/esm2022/components/date-range/cmat-components-date-range.mjs +0 -5
- package/esm2022/components/date-range/date-range.component.mjs +0 -558
- package/esm2022/components/date-range/public-api.mjs +0 -2
- package/esm2022/components/drawer/cmat-components-drawer.mjs +0 -5
- package/esm2022/components/drawer/drawer.component.mjs +0 -301
- package/esm2022/components/drawer/drawer.service.mjs +0 -41
- package/esm2022/components/drawer/drawer.types.mjs +0 -2
- package/esm2022/components/drawer/public-api.mjs +0 -4
- package/esm2022/components/fullscreen/cmat-components-fullscreen.mjs +0 -5
- package/esm2022/components/fullscreen/fullscreen.component.mjs +0 -44
- package/esm2022/components/fullscreen/public-api.mjs +0 -2
- package/esm2022/components/highlight/cmat-components-highlight.mjs +0 -5
- package/esm2022/components/highlight/highlight.component.mjs +0 -80
- package/esm2022/components/highlight/highlight.service.mjs +0 -47
- package/esm2022/components/highlight/public-api.mjs +0 -3
- package/esm2022/components/json-editor/cmat-components-json-editor.mjs +0 -5
- package/esm2022/components/json-editor/json-editor.component.mjs +0 -176
- package/esm2022/components/json-editor/public-api.mjs +0 -2
- package/esm2022/components/masonry/cmat-components-masonry.mjs +0 -5
- package/esm2022/components/masonry/masonry.component.mjs +0 -54
- package/esm2022/components/masonry/public-api.mjs +0 -2
- package/esm2022/components/material-color-picker/base-color.mjs +0 -13
- package/esm2022/components/material-color-picker/cmat-components-material-color-picker.mjs +0 -5
- package/esm2022/components/material-color-picker/material-color-picker.component.mjs +0 -147
- package/esm2022/components/material-color-picker/public-api.mjs +0 -3
- package/esm2022/components/material-color-picker/selected-color.mjs +0 -3
- package/esm2022/components/material-datetimepicker/calendar-body.mjs +0 -76
- package/esm2022/components/material-datetimepicker/calendar.mjs +0 -670
- package/esm2022/components/material-datetimepicker/clock.mjs +0 -290
- package/esm2022/components/material-datetimepicker/cmat-components-material-datetimepicker.mjs +0 -5
- package/esm2022/components/material-datetimepicker/datetimepicker-animations.mjs +0 -34
- package/esm2022/components/material-datetimepicker/datetimepicker-errors.mjs +0 -6
- package/esm2022/components/material-datetimepicker/datetimepicker-filtertype.mjs +0 -8
- package/esm2022/components/material-datetimepicker/datetimepicker-input.mjs +0 -341
- package/esm2022/components/material-datetimepicker/datetimepicker-intl.mjs +0 -63
- package/esm2022/components/material-datetimepicker/datetimepicker-toggle.mjs +0 -87
- package/esm2022/components/material-datetimepicker/datetimepicker-types.mjs +0 -2
- package/esm2022/components/material-datetimepicker/datetimepicker.mjs +0 -531
- package/esm2022/components/material-datetimepicker/month-view.mjs +0 -141
- package/esm2022/components/material-datetimepicker/multi-year-view.mjs +0 -197
- package/esm2022/components/material-datetimepicker/public-api.mjs +0 -11
- package/esm2022/components/material-datetimepicker/time.mjs +0 -455
- package/esm2022/components/material-datetimepicker/year-view.mjs +0 -124
- package/esm2022/components/navigation/cmat-components-navigation.mjs +0 -5
- package/esm2022/components/navigation/horizontal/components/basic/basic.component.mjs +0 -70
- package/esm2022/components/navigation/horizontal/components/branch/branch.component.mjs +0 -82
- package/esm2022/components/navigation/horizontal/components/divider/divider.component.mjs +0 -47
- package/esm2022/components/navigation/horizontal/components/spacer/spacer.component.mjs +0 -47
- package/esm2022/components/navigation/horizontal/horizontal.component.mjs +0 -87
- package/esm2022/components/navigation/navigation.service.mjs +0 -140
- package/esm2022/components/navigation/navigation.types.mjs +0 -3
- package/esm2022/components/navigation/public-api.mjs +0 -5
- package/esm2022/components/navigation/vertical/components/aside/aside.component.mjs +0 -162
- package/esm2022/components/navigation/vertical/components/basic/basic.component.mjs +0 -60
- package/esm2022/components/navigation/vertical/components/collapsable/collapsable.component.mjs +0 -277
- package/esm2022/components/navigation/vertical/components/divider/divider.component.mjs +0 -56
- package/esm2022/components/navigation/vertical/components/group/group.component.mjs +0 -78
- package/esm2022/components/navigation/vertical/components/spacer/spacer.component.mjs +0 -56
- package/esm2022/components/navigation/vertical/vertical.component.mjs +0 -584
- package/esm2022/components/pagination/cmat-components-pagination.mjs +0 -5
- package/esm2022/components/pagination/pagination.component.mjs +0 -67
- package/esm2022/components/pagination/pagination.directive.mjs +0 -197
- package/esm2022/components/pagination/pagination.instance.mjs +0 -2
- package/esm2022/components/pagination/pagination.pipe.mjs +0 -100
- package/esm2022/components/pagination/pagination.service.mjs +0 -90
- package/esm2022/components/pagination/public-api.mjs +0 -6
- package/esm2022/components/password-strength/animations/index.mjs +0 -48
- package/esm2022/components/password-strength/cmat-components-password-strength.mjs +0 -5
- package/esm2022/components/password-strength/enum.mjs +0 -17
- package/esm2022/components/password-strength/mat-pass-toggle-visibility/mat-pass-toggle-visibility.component.mjs +0 -27
- package/esm2022/components/password-strength/mat-password-strength/mat-password-strength.component.mjs +0 -206
- package/esm2022/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.mjs +0 -150
- package/esm2022/components/password-strength/mat-password-strength-validator.mjs +0 -36
- package/esm2022/components/password-strength/public-api.mjs +0 -4
- package/esm2022/components/password-strength/regexp.class.mjs +0 -8
- package/esm2022/components/popover/cmat-components-popover.mjs +0 -5
- package/esm2022/components/popover/popover-trigger.mjs +0 -442
- package/esm2022/components/popover/popover.component.mjs +0 -348
- package/esm2022/components/popover/popover.errors.mjs +0 -27
- package/esm2022/components/popover/popover.interfaces.mjs +0 -2
- package/esm2022/components/popover/popover.target.mjs +0 -18
- package/esm2022/components/popover/popover.type.mjs +0 -2
- package/esm2022/components/popover/public-api.mjs +0 -5
- package/esm2022/components/progress-bar/cmat-components-progress-bar.mjs +0 -5
- package/esm2022/components/progress-bar/progress-bar.component.mjs +0 -58
- package/esm2022/components/progress-bar/public-api.mjs +0 -2
- package/esm2022/components/rating/cmat-components-rating.mjs +0 -5
- package/esm2022/components/rating/public-api.mjs +0 -2
- package/esm2022/components/rating/rating.component.mjs +0 -202
- package/esm2022/components/select-search/cmat-components-select-search.mjs +0 -5
- package/esm2022/components/select-search/default-options.mjs +0 -16
- package/esm2022/components/select-search/public-api.mjs +0 -3
- package/esm2022/components/select-search/select-no-entries-found.directive.mjs +0 -14
- package/esm2022/components/select-search/select-search-clear.directive.mjs +0 -14
- package/esm2022/components/select-search/select-search.component.mjs +0 -485
- package/esm2022/components/select-tree/cmat-components-select-tree.mjs +0 -5
- package/esm2022/components/select-tree/public-api.mjs +0 -4
- package/esm2022/components/select-tree/select-tree.component.mjs +0 -565
- package/esm2022/components/select-tree/select-tree.flatnode.mjs +0 -3
- package/esm2022/components/select-tree/select-tree.node.mjs +0 -3
- package/esm2022/components/timeline/cmat-components-timeline.mjs +0 -5
- package/esm2022/components/timeline/public-api.mjs +0 -3
- package/esm2022/components/timeline/timeline-item/timeline-item.component.mjs +0 -70
- package/esm2022/components/timeline/timeline.component.mjs +0 -107
- package/esm2022/components/toast/cmat-components-toast.mjs +0 -5
- package/esm2022/components/toast/models/global-config.model.mjs +0 -2
- package/esm2022/components/toast/models/toast.model.mjs +0 -2
- package/esm2022/components/toast/models/type.model.mjs +0 -2
- package/esm2022/components/toast/public-api.mjs +0 -7
- package/esm2022/components/toast/toast-modal.component.mjs +0 -53
- package/esm2022/components/toast/toast.component.mjs +0 -30
- package/esm2022/components/toast/toast.service.mjs +0 -122
- package/esm2022/components/transfer-picker/cmat-components-transfer-picker.mjs +0 -5
- package/esm2022/components/transfer-picker/filter/filter.component.mjs +0 -91
- package/esm2022/components/transfer-picker/interface.mjs +0 -17
- package/esm2022/components/transfer-picker/public-api.mjs +0 -8
- package/esm2022/components/transfer-picker/search/search.component.mjs +0 -38
- package/esm2022/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.mjs +0 -201
- package/esm2022/components/transfer-picker/transfer-picker-target/transfer-picker-target.component.mjs +0 -32
- package/esm2022/components/transfer-picker/transfer-picker.component.mjs +0 -84
- package/esm2022/components/transfer-picker/transfer-picker.service.mjs +0 -137
- package/esm2022/components/upload/cmat-components-upload.mjs +0 -5
- package/esm2022/components/upload/files.type.mjs +0 -2
- package/esm2022/components/upload/files.util.service.mjs +0 -89
- package/esm2022/components/upload/public-api.mjs +0 -5
- package/esm2022/components/upload/upload-queue/upload-queue.component.mjs +0 -155
- package/esm2022/components/upload/upload.component.mjs +0 -118
- package/esm2022/directives/animate-on-scroll/animate-on-scroll.directive.mjs +0 -126
- package/esm2022/directives/animate-on-scroll/cmat-directives-animate-on-scroll.mjs +0 -5
- package/esm2022/directives/animate-on-scroll/public-api.mjs +0 -2
- package/esm2022/directives/animate-on-scroll/scroll.service.mjs +0 -38
- package/esm2022/directives/autofocus/autofocus.directive.mjs +0 -20
- package/esm2022/directives/autofocus/cmat-directives-autofocus.mjs +0 -5
- package/esm2022/directives/autofocus/public-api.mjs +0 -2
- package/esm2022/directives/debounce/abstract-debounce.directive.mjs +0 -34
- package/esm2022/directives/debounce/cmat-directives-debounce.mjs +0 -5
- package/esm2022/directives/debounce/debounce-click.directive.mjs +0 -25
- package/esm2022/directives/debounce/debounce-keyup.directive.mjs +0 -25
- package/esm2022/directives/debounce/public-api.mjs +0 -3
- package/esm2022/directives/digit-only/cmat-directives-digit-only.mjs +0 -5
- package/esm2022/directives/digit-only/digit-only.directive.mjs +0 -298
- package/esm2022/directives/digit-only/mask.directive.mjs +0 -84
- package/esm2022/directives/digit-only/public-api.mjs +0 -3
- package/esm2022/directives/equal-validator/cmat-directives-equal-validator.mjs +0 -5
- package/esm2022/directives/equal-validator/equal-validator.directive.mjs +0 -54
- package/esm2022/directives/equal-validator/public-api.mjs +0 -2
- package/esm2022/lib/mock-api/cmat-lib-mock-api.mjs +0 -5
- package/esm2022/lib/mock-api/mock-api.constants.mjs +0 -3
- package/esm2022/lib/mock-api/mock-api.interceptor.mjs +0 -73
- package/esm2022/lib/mock-api/mock-api.request-handler.mjs +0 -48
- package/esm2022/lib/mock-api/mock-api.service.mjs +0 -93
- package/esm2022/lib/mock-api/mock-api.types.mjs +0 -2
- package/esm2022/lib/mock-api/mock-api.utils.mjs +0 -16
- package/esm2022/lib/mock-api/public-api.mjs +0 -6
- package/esm2022/pipes/bytes/bytes.pipe.mjs +0 -25
- package/esm2022/pipes/bytes/cmat-pipes-bytes.mjs +0 -5
- package/esm2022/pipes/bytes/public-api.mjs +0 -2
- package/esm2022/pipes/date-format/cmat-pipes-date-format.mjs +0 -5
- package/esm2022/pipes/date-format/date-format.pipe.mjs +0 -20
- package/esm2022/pipes/date-format/public-api.mjs +0 -2
- package/esm2022/pipes/find-by-key/cmat-pipes-find-by-key.mjs +0 -5
- package/esm2022/pipes/find-by-key/find-by-key.pipe.mjs +0 -23
- package/esm2022/pipes/find-by-key/public-api.mjs +0 -2
- package/esm2022/pipes/group-by/cmat-pipes-group-by.mjs +0 -5
- package/esm2022/pipes/group-by/group-by.pipe.mjs +0 -29
- package/esm2022/pipes/group-by/public-api.mjs +0 -2
- package/esm2022/pipes/keys/cmat-pipes-keys.mjs +0 -5
- package/esm2022/pipes/keys/keys.pipe.mjs +0 -26
- package/esm2022/pipes/keys/public-api.mjs +0 -2
- package/esm2022/pipes/secure/cmat-pipes-secure.mjs +0 -5
- package/esm2022/pipes/secure/public-api.mjs +0 -2
- package/esm2022/pipes/secure/secure-pipe.mjs +0 -46
- package/esm2022/pipes/uppercase/cmat-pipes-uppercase.mjs +0 -5
- package/esm2022/pipes/uppercase/public-api.mjs +0 -2
- package/esm2022/pipes/uppercase/uppercase.pipe.mjs +0 -17
- package/esm2022/public-api.mjs +0 -2
- package/esm2022/services/alert/alert.dialog.mjs +0 -12
- package/esm2022/services/alert/alert.message.mjs +0 -9
- package/esm2022/services/alert/alert.service.mjs +0 -166
- package/esm2022/services/alert/cmat-services-alert.mjs +0 -5
- package/esm2022/services/alert/enum.mjs +0 -15
- package/esm2022/services/alert/public-api.mjs +0 -5
- package/esm2022/services/config/cmat-services-config.mjs +0 -5
- package/esm2022/services/config/config.constants.mjs +0 -3
- package/esm2022/services/config/config.service.mjs +0 -35
- package/esm2022/services/config/public-api.mjs +0 -4
- package/esm2022/services/config/urlStateConfig.service.mjs +0 -30
- package/esm2022/services/confirmation/cmat-services-confirmation.mjs +0 -5
- package/esm2022/services/confirmation/confirmation.service.mjs +0 -51
- package/esm2022/services/confirmation/confirmation.types.mjs +0 -2
- package/esm2022/services/confirmation/dialog/dialog.component.mjs +0 -25
- package/esm2022/services/confirmation/public-api.mjs +0 -3
- package/esm2022/services/data/cmat-services-data.mjs +0 -5
- package/esm2022/services/data/data.service.mjs +0 -169
- package/esm2022/services/data/public-api.mjs +0 -2
- package/esm2022/services/loading/cmat-services-loading.mjs +0 -5
- package/esm2022/services/loading/loading.interceptor.mjs +0 -29
- package/esm2022/services/loading/loading.service.mjs +0 -72
- package/esm2022/services/loading/public-api.mjs +0 -3
- package/esm2022/services/local-storage/cmat-services-local-storage.mjs +0 -5
- package/esm2022/services/local-storage/local-storage.service.mjs +0 -22
- package/esm2022/services/local-storage/public-api.mjs +0 -2
- package/esm2022/services/media-watcher/cmat-services-media-watcher.mjs +0 -5
- package/esm2022/services/media-watcher/media-watcher.service.mjs +0 -55
- package/esm2022/services/media-watcher/public-api.mjs +0 -2
- package/esm2022/services/platform/cmat-services-platform.mjs +0 -5
- package/esm2022/services/platform/platform.service.mjs +0 -46
- package/esm2022/services/platform/public-api.mjs +0 -2
- package/esm2022/services/splash-screen/cmat-services-splash-screen.mjs +0 -5
- package/esm2022/services/splash-screen/public-api.mjs +0 -2
- package/esm2022/services/splash-screen/splash-screen.service.mjs +0 -42
- package/esm2022/services/title/cmat-services-title.mjs +0 -5
- package/esm2022/services/title/public-api.mjs +0 -2
- package/esm2022/services/title/title.service.mjs +0 -46
- package/esm2022/services/translation/cmat-services-translation.mjs +0 -5
- package/esm2022/services/translation/public-api.mjs +0 -2
- package/esm2022/services/translation/translation.service.mjs +0 -62
- package/esm2022/services/utils/cmat-services-utils.mjs +0 -5
- package/esm2022/services/utils/public-api.mjs +0 -2
- package/esm2022/services/utils/utils.service.mjs +0 -467
- package/esm2022/validators/cmat-validators.mjs +0 -5
- package/esm2022/validators/public-api.mjs +0 -2
- package/esm2022/validators/validators.mjs +0 -33
- package/esm2022/version/cmat-version.mjs +0 -5
- package/esm2022/version/public-api.mjs +0 -2
- package/esm2022/version/version.mjs +0 -11
|
@@ -1,455 +0,0 @@
|
|
|
1
|
-
import { coerceBooleanProperty, coerceNumberProperty, } from '@angular/cdk/coercion';
|
|
2
|
-
import { ChangeDetectionStrategy, Component, Directive, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
3
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
4
|
-
import { CmatDatetimepickerClockComponent } from './clock';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "cmat/components/adapter";
|
|
7
|
-
import * as i2 from "./datetimepicker-intl";
|
|
8
|
-
import * as i3 from "@angular/material/button";
|
|
9
|
-
function pad(num, size) {
|
|
10
|
-
num = String(num);
|
|
11
|
-
while (num.length < size) {
|
|
12
|
-
num = '0' + num;
|
|
13
|
-
}
|
|
14
|
-
return num;
|
|
15
|
-
}
|
|
16
|
-
export class CmatDatetimepickerTimeInputDirective {
|
|
17
|
-
constructor(_element, _cdr) {
|
|
18
|
-
this._element = _element;
|
|
19
|
-
this._cdr = _cdr;
|
|
20
|
-
this.timeInterval = 1;
|
|
21
|
-
this.timeMin = 0;
|
|
22
|
-
this.timeMax = Infinity;
|
|
23
|
-
this.timeValueChanged = new EventEmitter();
|
|
24
|
-
this._keyDownListener = this.keyDownHandler.bind(this);
|
|
25
|
-
this._keyPressListener = this.keyPressHandler.bind(this);
|
|
26
|
-
this._inputEventListener = this.inputChangedHandler.bind(this);
|
|
27
|
-
this.inputElement.addEventListener('keydown', this._keyDownListener, {
|
|
28
|
-
passive: true,
|
|
29
|
-
});
|
|
30
|
-
// Do not passive since we want to be able to preventDefault()
|
|
31
|
-
this.inputElement.addEventListener('keypress', this._keyPressListener);
|
|
32
|
-
this.inputElement.addEventListener('input', this._inputEventListener, {
|
|
33
|
-
passive: true,
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
get hasFocus() {
|
|
37
|
-
return this._element.nativeElement && this._element?.nativeElement === document?.activeElement;
|
|
38
|
-
}
|
|
39
|
-
get inputElement() {
|
|
40
|
-
return this._element.nativeElement;
|
|
41
|
-
}
|
|
42
|
-
// We look here at the placeholder value, because we write '' into the value on focus
|
|
43
|
-
// placeholder should always be up to date with "currentValue"
|
|
44
|
-
get valid() {
|
|
45
|
-
// At the start _value is undefined therefore this would result in not valid and
|
|
46
|
-
// make a ugly warning border afterwards we can safely check
|
|
47
|
-
if (this._value) {
|
|
48
|
-
const currentValue = String(this.inputElement.value);
|
|
49
|
-
// It can be that currentValue is empty due to we removing the value on focus,
|
|
50
|
-
// if that is the case we should check previous value which should be in the placeholder
|
|
51
|
-
if (currentValue.length) {
|
|
52
|
-
return pad(this._value, 2) === this.inputElement.value;
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
return pad(this._value, 2) === this.inputElement.placeholder;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return true;
|
|
59
|
-
}
|
|
60
|
-
get invalid() {
|
|
61
|
-
return !this.valid;
|
|
62
|
-
}
|
|
63
|
-
set timeValue(value) {
|
|
64
|
-
this._value = coerceNumberProperty(value);
|
|
65
|
-
if (!this.hasFocus) {
|
|
66
|
-
this.writeValue(this._value);
|
|
67
|
-
}
|
|
68
|
-
this.writePlaceholder(this._value);
|
|
69
|
-
}
|
|
70
|
-
blur() {
|
|
71
|
-
this.writeValue(this._value);
|
|
72
|
-
this.writePlaceholder(this._value);
|
|
73
|
-
this.timeValueChanged.emit(this._value);
|
|
74
|
-
}
|
|
75
|
-
focus() {
|
|
76
|
-
this.writeValue('');
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Write value to inputElement
|
|
80
|
-
*
|
|
81
|
-
* @param value NumberInput
|
|
82
|
-
*/
|
|
83
|
-
writeValue(value) {
|
|
84
|
-
if (value !== '') {
|
|
85
|
-
this.inputElement.value = pad(value, 2);
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
this.inputElement.value = '';
|
|
89
|
-
}
|
|
90
|
-
this._cdr.markForCheck();
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Writes value to placeholder
|
|
94
|
-
*
|
|
95
|
-
* @param value NumberInput
|
|
96
|
-
*/
|
|
97
|
-
writePlaceholder(value) {
|
|
98
|
-
this.inputElement.placeholder = pad(value, 2);
|
|
99
|
-
this._cdr.markForCheck();
|
|
100
|
-
}
|
|
101
|
-
keyDownHandler(event) {
|
|
102
|
-
if (String(this.inputElement.value).length > 0) {
|
|
103
|
-
let value = null;
|
|
104
|
-
if (event.code === 'ArrowUp') {
|
|
105
|
-
value = coerceNumberProperty(this._value);
|
|
106
|
-
value += this.timeInterval;
|
|
107
|
-
event.stopPropagation();
|
|
108
|
-
}
|
|
109
|
-
else if (event.code === 'ArrowDown') {
|
|
110
|
-
value = coerceNumberProperty(this._value);
|
|
111
|
-
value -= this.timeInterval;
|
|
112
|
-
event.stopPropagation();
|
|
113
|
-
}
|
|
114
|
-
// if value has changed
|
|
115
|
-
if (typeof value === 'number') {
|
|
116
|
-
this.writeValue(value);
|
|
117
|
-
this.writePlaceholder(value);
|
|
118
|
-
this.clampInputValue();
|
|
119
|
-
this.timeValueChanged.emit(this._value);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Prevent non number inputs in the inputElement with the exception of Enter/BackSpace
|
|
125
|
-
*
|
|
126
|
-
* @param event KeyboardEvent
|
|
127
|
-
*/
|
|
128
|
-
keyPressHandler(event) {
|
|
129
|
-
const key = event?.key ?? null;
|
|
130
|
-
if (isNaN(Number(key)) && key !== 'Enter') {
|
|
131
|
-
event.preventDefault();
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
inputChangedHandler() {
|
|
135
|
-
this.clampInputValue();
|
|
136
|
-
this.timeValueChanged.emit(this._value);
|
|
137
|
-
}
|
|
138
|
-
clampInputValue() {
|
|
139
|
-
if (this.inputElement?.value === '') {
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
const value = coerceNumberProperty(this.inputElement?.value ?? null);
|
|
143
|
-
if (value) {
|
|
144
|
-
const clampedValue = Math.min(Math.max(value, this.timeMin), this.timeMax);
|
|
145
|
-
if (clampedValue !== value) {
|
|
146
|
-
this.writeValue(clampedValue);
|
|
147
|
-
this.writePlaceholder(clampedValue);
|
|
148
|
-
}
|
|
149
|
-
this._value = clampedValue;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Remove event listeners on destruction
|
|
154
|
-
*/
|
|
155
|
-
ngOnDestroy() {
|
|
156
|
-
this.inputElement.removeEventListener('keydown', this._keyDownListener);
|
|
157
|
-
this.inputElement.removeEventListener('keypress', this._keyPressListener);
|
|
158
|
-
this.inputElement.removeEventListener('input', this._inputEventListener);
|
|
159
|
-
}
|
|
160
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatDatetimepickerTimeInputDirective, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
161
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.10", type: CmatDatetimepickerTimeInputDirective, isStandalone: true, selector: "input.cmat-datetimepicker-time-input", inputs: { timeInterval: "timeInterval", timeMin: "timeMin", timeMax: "timeMax", timeValue: "timeValue" }, outputs: { timeValueChanged: "timeValueChanged" }, host: { listeners: { "blur": "blur($event)", "focus": "focus($event)" } }, exportAs: ["cmatDatetimepickerTimeInput"], ngImport: i0 }); }
|
|
162
|
-
}
|
|
163
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatDatetimepickerTimeInputDirective, decorators: [{
|
|
164
|
-
type: Directive,
|
|
165
|
-
args: [{
|
|
166
|
-
selector: 'input.cmat-datetimepicker-time-input',
|
|
167
|
-
exportAs: 'cmatDatetimepickerTimeInput',
|
|
168
|
-
standalone: true
|
|
169
|
-
}]
|
|
170
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { timeInterval: [{
|
|
171
|
-
type: Input
|
|
172
|
-
}], timeMin: [{
|
|
173
|
-
type: Input
|
|
174
|
-
}], timeMax: [{
|
|
175
|
-
type: Input
|
|
176
|
-
}], timeValueChanged: [{
|
|
177
|
-
type: Output
|
|
178
|
-
}], timeValue: [{
|
|
179
|
-
type: Input
|
|
180
|
-
}], blur: [{
|
|
181
|
-
type: HostListener,
|
|
182
|
-
args: ['blur', ['$event']]
|
|
183
|
-
}], focus: [{
|
|
184
|
-
type: HostListener,
|
|
185
|
-
args: ['focus', ['$event']]
|
|
186
|
-
}] } });
|
|
187
|
-
export class CmatDatetimepickerTimeComponent {
|
|
188
|
-
constructor(_adapter, _changeDetectorRef, datetimepickerIntl) {
|
|
189
|
-
this._adapter = _adapter;
|
|
190
|
-
this._changeDetectorRef = _changeDetectorRef;
|
|
191
|
-
this.datetimepickerIntl = datetimepickerIntl;
|
|
192
|
-
/** Emits when the currently selected date changes. */
|
|
193
|
-
this.selectedChange = new EventEmitter();
|
|
194
|
-
/** Emits when any date changes. */
|
|
195
|
-
this.activeDateChange = new EventEmitter();
|
|
196
|
-
/** Emits when any date is selected. */
|
|
197
|
-
this.userSelection = new EventEmitter();
|
|
198
|
-
/** Emits when AM/PM button are clicked. */
|
|
199
|
-
this.ampmChange = new EventEmitter();
|
|
200
|
-
/** Emits when AM/PM button are clicked. */
|
|
201
|
-
this.clockViewChange = new EventEmitter();
|
|
202
|
-
/** Step over minutes. */
|
|
203
|
-
this.interval = 1;
|
|
204
|
-
/** Whether the time is now in AM or PM. */
|
|
205
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
206
|
-
this.AMPM = 'AM';
|
|
207
|
-
this.class = 'cmat-datetimepicker-time';
|
|
208
|
-
this._twelvehour = false;
|
|
209
|
-
/** Whether the clock is in hour view. */
|
|
210
|
-
this._clockView = 'hour';
|
|
211
|
-
this.datetimepickerIntlChangesSubscription = this.datetimepickerIntl.changes.subscribe(() => {
|
|
212
|
-
this._changeDetectorRef.detectChanges();
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
get isHourView() {
|
|
216
|
-
return this._clockView === 'hour';
|
|
217
|
-
}
|
|
218
|
-
get isMinuteView() {
|
|
219
|
-
return this._clockView === 'hour';
|
|
220
|
-
}
|
|
221
|
-
get hour() {
|
|
222
|
-
if (!this.activeDate) {
|
|
223
|
-
if (this.twelvehour) {
|
|
224
|
-
return '12';
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
return '00';
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
const hour = Number(this._adapter.getHour(this.activeDate));
|
|
231
|
-
if (!this.twelvehour) {
|
|
232
|
-
return this.prefixWithZero(hour);
|
|
233
|
-
}
|
|
234
|
-
if (hour === 0) {
|
|
235
|
-
return '12';
|
|
236
|
-
}
|
|
237
|
-
else {
|
|
238
|
-
return this.prefixWithZero(hour > 12 ? hour - 12 : hour);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
get minute() {
|
|
242
|
-
if (this.activeDate) {
|
|
243
|
-
return this.prefixWithZero(this._adapter.getMinute(this.activeDate));
|
|
244
|
-
}
|
|
245
|
-
return '00';
|
|
246
|
-
}
|
|
247
|
-
/** Whether the clock uses 12 hour format. */
|
|
248
|
-
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
249
|
-
get twelvehour() {
|
|
250
|
-
return this._twelvehour;
|
|
251
|
-
}
|
|
252
|
-
set twelvehour(value) {
|
|
253
|
-
this._twelvehour = coerceBooleanProperty(value);
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* The date to display in this clock view.
|
|
257
|
-
*/
|
|
258
|
-
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
259
|
-
get activeDate() {
|
|
260
|
-
return this._activeDate;
|
|
261
|
-
}
|
|
262
|
-
set activeDate(value) {
|
|
263
|
-
this._activeDate = this._adapter.clampDate(value, this.minDate, this.maxDate);
|
|
264
|
-
}
|
|
265
|
-
/** The currently selected date. */
|
|
266
|
-
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
267
|
-
get selected() {
|
|
268
|
-
return this._selected;
|
|
269
|
-
}
|
|
270
|
-
set selected(value) {
|
|
271
|
-
this._selected = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));
|
|
272
|
-
if (this._selected) {
|
|
273
|
-
this.activeDate = this._selected;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
/** The minimum selectable date. */
|
|
277
|
-
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
278
|
-
get minDate() {
|
|
279
|
-
return this._minDate;
|
|
280
|
-
}
|
|
281
|
-
set minDate(value) {
|
|
282
|
-
this._minDate = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));
|
|
283
|
-
}
|
|
284
|
-
/** The maximum selectable date. */
|
|
285
|
-
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
286
|
-
get maxDate() {
|
|
287
|
-
return this._maxDate;
|
|
288
|
-
}
|
|
289
|
-
set maxDate(value) {
|
|
290
|
-
this._maxDate = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));
|
|
291
|
-
}
|
|
292
|
-
/** Whether the clock should be started in hour or minute view. */
|
|
293
|
-
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
294
|
-
get clockView() {
|
|
295
|
-
return this._clockView;
|
|
296
|
-
}
|
|
297
|
-
set clockView(value) {
|
|
298
|
-
this._clockView = value;
|
|
299
|
-
}
|
|
300
|
-
prefixWithZero(value) {
|
|
301
|
-
if (value < 10) {
|
|
302
|
-
return '0' + String(value);
|
|
303
|
-
}
|
|
304
|
-
return String(value);
|
|
305
|
-
}
|
|
306
|
-
ngOnChanges(changes) {
|
|
307
|
-
// when clockView changes by input we should focus the correct input
|
|
308
|
-
if (changes['clockView']) {
|
|
309
|
-
if (changes['clockView'].currentValue !== changes['clockView'].previousValue) {
|
|
310
|
-
this.focusInputElement();
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
ngAfterViewInit() {
|
|
315
|
-
this.focusInputElement();
|
|
316
|
-
}
|
|
317
|
-
focusInputElement() {
|
|
318
|
-
if (this.clockView === 'hour') {
|
|
319
|
-
if (this.hourInputElement) {
|
|
320
|
-
(this.hourInputElement.nativeElement).focus();
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
else {
|
|
324
|
-
if (this.minuteInputElement) {
|
|
325
|
-
(this.minuteInputElement.nativeElement).focus();
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
handleHourInputChange(value) {
|
|
330
|
-
const hour = coerceNumberProperty(value);
|
|
331
|
-
if (hour || hour === 0) {
|
|
332
|
-
const newValue = this._adapter.createDatetime(this._adapter.getYear(this.activeDate), this._adapter.getMonth(this.activeDate), this._adapter.getDate(this.activeDate), this.updateHourForAmPm(hour), this._adapter.getMinute(this.activeDate));
|
|
333
|
-
this._activeDate = this._adapter.clampDate(newValue, this.minDate, this.maxDate);
|
|
334
|
-
this.activeDateChange.emit(this.activeDate);
|
|
335
|
-
// If previously we did set [cmatValue]="13" and the input changed to 6, and the clamping will make it "13" again
|
|
336
|
-
// then the hourInputDirective will not have been updated since "13" === "13" same reference so no change detected
|
|
337
|
-
// by directly setting it within this handler, we handle this usecase
|
|
338
|
-
if (this.hourInputDirective) {
|
|
339
|
-
this.hourInputDirective.timeValue = this.hour;
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
updateHourForAmPm(value) {
|
|
344
|
-
if (!this.twelvehour) {
|
|
345
|
-
return value;
|
|
346
|
-
}
|
|
347
|
-
// value should be between 1-12
|
|
348
|
-
if (this.AMPM === 'AM') {
|
|
349
|
-
if (value === 0 || value === 12) {
|
|
350
|
-
return 0;
|
|
351
|
-
}
|
|
352
|
-
return value;
|
|
353
|
-
}
|
|
354
|
-
// PM
|
|
355
|
-
else {
|
|
356
|
-
if (value === 0 || value === 12) {
|
|
357
|
-
return 12;
|
|
358
|
-
}
|
|
359
|
-
// other cases, we should add 12 to the value aka 3:00 PM = 3 + 12 = 15:00
|
|
360
|
-
return value + 12;
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
handleMinuteInputChange(value) {
|
|
364
|
-
const minute = coerceNumberProperty(value);
|
|
365
|
-
if (minute || minute === 0) {
|
|
366
|
-
const newValue = this._adapter.createDatetime(this._adapter.getYear(this.activeDate), this._adapter.getMonth(this.activeDate), this._adapter.getDate(this.activeDate), this._adapter.getHour(this._activeDate), minute);
|
|
367
|
-
this._activeDate = this._adapter.clampDate(newValue, this.minDate, this.maxDate);
|
|
368
|
-
this.activeDateChange.emit(this.activeDate);
|
|
369
|
-
// If previously we did set [cmatValue]="40" and the input changed to 30, and the clamping will make it "40" again
|
|
370
|
-
// then the minuteInputDirective will not have been updated since "40" === "40" same reference so no change detected
|
|
371
|
-
// by directly setting it within this handler, we handle this usecase
|
|
372
|
-
if (this.minuteInputDirective) {
|
|
373
|
-
this.minuteInputDirective.timeValue = this.minute;
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
handleFocus(clockView) {
|
|
378
|
-
this.clockView = clockView;
|
|
379
|
-
this.clockViewChange.emit(clockView);
|
|
380
|
-
}
|
|
381
|
-
timeSelected(date) {
|
|
382
|
-
if (this.clockView === 'hour') {
|
|
383
|
-
this.clockView = 'minute';
|
|
384
|
-
}
|
|
385
|
-
this._activeDate = this.selected = date;
|
|
386
|
-
}
|
|
387
|
-
onActiveDateChange(date) {
|
|
388
|
-
this._activeDate = date;
|
|
389
|
-
this.activeDateChange.emit(date);
|
|
390
|
-
}
|
|
391
|
-
handleOk() {
|
|
392
|
-
if (this._selected) {
|
|
393
|
-
this.selectedChange.emit(this._selected);
|
|
394
|
-
}
|
|
395
|
-
this.userSelection.emit();
|
|
396
|
-
}
|
|
397
|
-
handleCancel() {
|
|
398
|
-
this.userSelection.emit();
|
|
399
|
-
}
|
|
400
|
-
ngOnDestroy() {
|
|
401
|
-
if (this.datetimepickerIntlChangesSubscription) {
|
|
402
|
-
this.datetimepickerIntlChangesSubscription.unsubscribe();
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatDatetimepickerTimeComponent, deps: [{ token: i1.DatetimeAdapter }, { token: i0.ChangeDetectorRef }, { token: i2.CmatDatetimepickerIntl }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
406
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: CmatDatetimepickerTimeComponent, isStandalone: true, selector: "cmat-datetimepicker-time", inputs: { dateFilter: "dateFilter", interval: "interval", AMPM: "AMPM", twelvehour: "twelvehour", activeDate: "activeDate", selected: "selected", minDate: "minDate", maxDate: "maxDate", clockView: "clockView" }, outputs: { selectedChange: "selectedChange", activeDateChange: "activeDateChange", userSelection: "userSelection", ampmChange: "ampmChange", clockViewChange: "clockViewChange" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "hourInputElement", first: true, predicate: ["hourInput"], descendants: true, read: (ElementRef) }, { propertyName: "hourInputDirective", first: true, predicate: ["hourInput"], descendants: true, read: CmatDatetimepickerTimeInputDirective }, { propertyName: "minuteInputElement", first: true, predicate: ["minuteInput"], descendants: true, read: (ElementRef) }, { propertyName: "minuteInputDirective", first: true, predicate: ["minuteInput"], descendants: true, read: CmatDatetimepickerTimeInputDirective }], exportAs: ["cmatDatetimepickerTime"], usesOnChanges: true, ngImport: i0, template: "<div class=\"cmat-datetimepicker-time-input-wrapper\">\r\n <div class=\"cmat-datetimepicker-time-input-inner\">\r\n <input #hourInput=\"cmatDatetimepickerTimeInput\" class=\"cmat-datetimepicker-time-input\"\r\n type=\"text\" inputmode=\"numeric\"\r\n maxlength=\"2\" [class.cmat-datetimepicker-time-input-active]=\"clockView === 'hour'\" [class.cmat-datetimepicker-time-input-warning]=\"!hourInput.valid\" [timeMin]=\"twelvehour ? 1 : 0\" [timeMax]=\"twelvehour ? 12 : 23\"\r\n [timeValue]=\"hour\" (timeValueChanged)=\"handleHourInputChange($event)\" (focus)=\"handleFocus('hour')\" />\r\n\r\n <div class=\"cmat-datetimepicker-time-seperator\">:</div>\r\n\r\n <input #minuteInput=\"cmatDatetimepickerTimeInput\" class=\"cmat-datetimepicker-time-input\"\r\n type=\"text\" inputmode=\"numeric\"\r\n maxlength=\"2\" [class.cmat-datetimepicker-time-input-active]=\"clockView === 'minute'\" [class.cmat-datetimepicker-time-input-warning]=\"!minuteInput.valid\" [timeMin]=\"0\" [timeMax]=\"59\" [timeValue]=\"minute\"\r\n [timeInterval]=\"interval\" (timeValueChanged)=\"handleMinuteInputChange($event)\" (focus)=\"handleFocus('minute')\" />\r\n\r\n @if (twelvehour) {\r\n <div class=\"cmat-datetimepicker-time-ampm\">\r\n <button mat-button type=\"button\" class=\"cmat-datetimepicker-time-am\"\r\n aria-label=\"AM\" [class.cmat-datetimepicker-time-ampm-active]=\"AMPM === 'AM'\"\r\n (keydown)=\"$event.stopPropagation()\" (click)=\"ampmChange.emit('AM')\">AM</button>\r\n <button mat-button type=\"button\" class=\"cmat-datetimepicker-time-pm\"\r\n aria-label=\"PM\" [class.cmat-datetimepicker-time-ampm-active]=\"AMPM === 'PM'\"\r\n (keydown)=\"$event.stopPropagation()\" (click)=\"ampmChange.emit('PM')\">PM</button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <cmat-datetimepicker-clock [dateFilter]=\"dateFilter\" [interval]=\"interval\"\r\n [maxDate]=\"maxDate\" [minDate]=\"minDate\" [selected]=\"selected\" [startView]=\"clockView\" [twelvehour]=\"twelvehour\"\r\n (selectedChange)=\"timeSelected($event)\" (activeDateChange)=\"onActiveDateChange($event)\">\r\n </cmat-datetimepicker-clock>\r\n\r\n <div class=\"cmat-datetimepicker-time-button-wrapper space-x-4\">\r\n <button class=\"cmat=datetimepicker-time-cancel-button\" mat-stroked-button type=\"button\" (click)=\"handleCancel()\">\r\n {{ datetimepickerIntl.cancelLabel }}\r\n </button>\r\n <button class=\"cmat-datetimepicker-time-ok-button\" mat-flat-button type=\"button\" color=\"primary\" [disabled]=\"minuteInputDirective?.invalid || hourInputDirective?.invalid\"\r\n (click)=\"handleOk()\">\r\n {{ datetimepickerIntl.okLabel }}\r\n </button>\r\n </div>", styles: [".cmat-datetimepicker-time{display:block;outline:none;-webkit-user-select:none;user-select:none}.cmat-datetimepicker-time-input-wrapper{padding:8px 0;text-align:center}.cmat-datetimepicker-time-input-inner{display:inline-flex;height:56px;align-items:center}.cmat-datetimepicker-time-input{width:72px;font-size:36px;text-align:center;border-radius:8px;border:2px solid transparent;appearance:none;outline:none;height:100%}.cmat-datetimepicker-time-seperator{display:inline-flex;justify-content:center;width:24px;font-size:36px;height:100%}.cmat-datetimepicker-time-ampm{display:inline-flex;flex-direction:column;margin-left:12px;height:100%}[dir=rtl] .cmat-datetimepicker-time-ampm{margin-left:auto;margin-right:12px}.cmat-datetimepicker-time-am.mat-mdc-button,.cmat-datetimepicker-time-pm.mat-mdc-button{flex:1;width:40px;min-width:auto;padding:0;line-height:normal;border-width:1px;border-style:solid;min-height:0}.cmat-datetimepicker-time-am.mat-mdc-button{border-radius:8px 8px 0 0!important}.cmat-datetimepicker-time-pm.mat-mdc-button{border-radius:0 0 8px 8px!important;border-top:none}.cmat-datetimepicker-time-button-wrapper{display:flex;justify-content:flex-end;padding-top:8px}\n"], dependencies: [{ kind: "directive", type: CmatDatetimepickerTimeInputDirective, selector: "input.cmat-datetimepicker-time-input", inputs: ["timeInterval", "timeMin", "timeMax", "timeValue"], outputs: ["timeValueChanged"], exportAs: ["cmatDatetimepickerTimeInput"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: CmatDatetimepickerClockComponent, selector: "cmat-datetimepicker-clock", inputs: ["dateFilter", "interval", "twelvehour", "activeDate", "selected", "minDate", "maxDate", "startView"], outputs: ["userSelection", "selectedChange", "activeDateChange"], exportAs: ["cmatDatetimepickerClock"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
407
|
-
}
|
|
408
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatDatetimepickerTimeComponent, decorators: [{
|
|
409
|
-
type: Component,
|
|
410
|
-
args: [{ selector: 'cmat-datetimepicker-time', exportAs: 'cmatDatetimepickerTime', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CmatDatetimepickerTimeInputDirective, MatButtonModule, CmatDatetimepickerClockComponent], template: "<div class=\"cmat-datetimepicker-time-input-wrapper\">\r\n <div class=\"cmat-datetimepicker-time-input-inner\">\r\n <input #hourInput=\"cmatDatetimepickerTimeInput\" class=\"cmat-datetimepicker-time-input\"\r\n type=\"text\" inputmode=\"numeric\"\r\n maxlength=\"2\" [class.cmat-datetimepicker-time-input-active]=\"clockView === 'hour'\" [class.cmat-datetimepicker-time-input-warning]=\"!hourInput.valid\" [timeMin]=\"twelvehour ? 1 : 0\" [timeMax]=\"twelvehour ? 12 : 23\"\r\n [timeValue]=\"hour\" (timeValueChanged)=\"handleHourInputChange($event)\" (focus)=\"handleFocus('hour')\" />\r\n\r\n <div class=\"cmat-datetimepicker-time-seperator\">:</div>\r\n\r\n <input #minuteInput=\"cmatDatetimepickerTimeInput\" class=\"cmat-datetimepicker-time-input\"\r\n type=\"text\" inputmode=\"numeric\"\r\n maxlength=\"2\" [class.cmat-datetimepicker-time-input-active]=\"clockView === 'minute'\" [class.cmat-datetimepicker-time-input-warning]=\"!minuteInput.valid\" [timeMin]=\"0\" [timeMax]=\"59\" [timeValue]=\"minute\"\r\n [timeInterval]=\"interval\" (timeValueChanged)=\"handleMinuteInputChange($event)\" (focus)=\"handleFocus('minute')\" />\r\n\r\n @if (twelvehour) {\r\n <div class=\"cmat-datetimepicker-time-ampm\">\r\n <button mat-button type=\"button\" class=\"cmat-datetimepicker-time-am\"\r\n aria-label=\"AM\" [class.cmat-datetimepicker-time-ampm-active]=\"AMPM === 'AM'\"\r\n (keydown)=\"$event.stopPropagation()\" (click)=\"ampmChange.emit('AM')\">AM</button>\r\n <button mat-button type=\"button\" class=\"cmat-datetimepicker-time-pm\"\r\n aria-label=\"PM\" [class.cmat-datetimepicker-time-ampm-active]=\"AMPM === 'PM'\"\r\n (keydown)=\"$event.stopPropagation()\" (click)=\"ampmChange.emit('PM')\">PM</button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <cmat-datetimepicker-clock [dateFilter]=\"dateFilter\" [interval]=\"interval\"\r\n [maxDate]=\"maxDate\" [minDate]=\"minDate\" [selected]=\"selected\" [startView]=\"clockView\" [twelvehour]=\"twelvehour\"\r\n (selectedChange)=\"timeSelected($event)\" (activeDateChange)=\"onActiveDateChange($event)\">\r\n </cmat-datetimepicker-clock>\r\n\r\n <div class=\"cmat-datetimepicker-time-button-wrapper space-x-4\">\r\n <button class=\"cmat=datetimepicker-time-cancel-button\" mat-stroked-button type=\"button\" (click)=\"handleCancel()\">\r\n {{ datetimepickerIntl.cancelLabel }}\r\n </button>\r\n <button class=\"cmat-datetimepicker-time-ok-button\" mat-flat-button type=\"button\" color=\"primary\" [disabled]=\"minuteInputDirective?.invalid || hourInputDirective?.invalid\"\r\n (click)=\"handleOk()\">\r\n {{ datetimepickerIntl.okLabel }}\r\n </button>\r\n </div>", styles: [".cmat-datetimepicker-time{display:block;outline:none;-webkit-user-select:none;user-select:none}.cmat-datetimepicker-time-input-wrapper{padding:8px 0;text-align:center}.cmat-datetimepicker-time-input-inner{display:inline-flex;height:56px;align-items:center}.cmat-datetimepicker-time-input{width:72px;font-size:36px;text-align:center;border-radius:8px;border:2px solid transparent;appearance:none;outline:none;height:100%}.cmat-datetimepicker-time-seperator{display:inline-flex;justify-content:center;width:24px;font-size:36px;height:100%}.cmat-datetimepicker-time-ampm{display:inline-flex;flex-direction:column;margin-left:12px;height:100%}[dir=rtl] .cmat-datetimepicker-time-ampm{margin-left:auto;margin-right:12px}.cmat-datetimepicker-time-am.mat-mdc-button,.cmat-datetimepicker-time-pm.mat-mdc-button{flex:1;width:40px;min-width:auto;padding:0;line-height:normal;border-width:1px;border-style:solid;min-height:0}.cmat-datetimepicker-time-am.mat-mdc-button{border-radius:8px 8px 0 0!important}.cmat-datetimepicker-time-pm.mat-mdc-button{border-radius:0 0 8px 8px!important;border-top:none}.cmat-datetimepicker-time-button-wrapper{display:flex;justify-content:flex-end;padding-top:8px}\n"] }]
|
|
411
|
-
}], ctorParameters: () => [{ type: i1.DatetimeAdapter }, { type: i0.ChangeDetectorRef }, { type: i2.CmatDatetimepickerIntl }], propDecorators: { selectedChange: [{
|
|
412
|
-
type: Output
|
|
413
|
-
}], activeDateChange: [{
|
|
414
|
-
type: Output
|
|
415
|
-
}], userSelection: [{
|
|
416
|
-
type: Output
|
|
417
|
-
}], ampmChange: [{
|
|
418
|
-
type: Output
|
|
419
|
-
}], clockViewChange: [{
|
|
420
|
-
type: Output
|
|
421
|
-
}], dateFilter: [{
|
|
422
|
-
type: Input
|
|
423
|
-
}], interval: [{
|
|
424
|
-
type: Input
|
|
425
|
-
}], AMPM: [{
|
|
426
|
-
type: Input
|
|
427
|
-
}], class: [{
|
|
428
|
-
type: HostBinding,
|
|
429
|
-
args: ['class']
|
|
430
|
-
}], hourInputElement: [{
|
|
431
|
-
type: ViewChild,
|
|
432
|
-
args: ['hourInput', { read: (ElementRef) }]
|
|
433
|
-
}], hourInputDirective: [{
|
|
434
|
-
type: ViewChild,
|
|
435
|
-
args: ['hourInput', { read: CmatDatetimepickerTimeInputDirective }]
|
|
436
|
-
}], minuteInputElement: [{
|
|
437
|
-
type: ViewChild,
|
|
438
|
-
args: ['minuteInput', { read: (ElementRef) }]
|
|
439
|
-
}], minuteInputDirective: [{
|
|
440
|
-
type: ViewChild,
|
|
441
|
-
args: ['minuteInput', { read: CmatDatetimepickerTimeInputDirective }]
|
|
442
|
-
}], twelvehour: [{
|
|
443
|
-
type: Input
|
|
444
|
-
}], activeDate: [{
|
|
445
|
-
type: Input
|
|
446
|
-
}], selected: [{
|
|
447
|
-
type: Input
|
|
448
|
-
}], minDate: [{
|
|
449
|
-
type: Input
|
|
450
|
-
}], maxDate: [{
|
|
451
|
-
type: Input
|
|
452
|
-
}], clockView: [{
|
|
453
|
-
type: Input
|
|
454
|
-
}] } });
|
|
455
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvY29tcG9uZW50cy9tYXRlcmlhbC1kYXRldGltZXBpY2tlci90aW1lLnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC9jb21wb25lbnRzL21hdGVyaWFsLWRhdGV0aW1lcGlja2VyL3RpbWUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gscUJBQXFCLEVBQ3JCLG9CQUFvQixHQUV2QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFFSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUczRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7O0FBTzNELFNBQVMsR0FBRyxDQUFDLEdBQWdCLEVBQUUsSUFBWTtJQUN2QyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQUMsQ0FBQztJQUM5QyxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFPRCxNQUFNLE9BQU8sb0NBQW9DO0lBYTdDLFlBQW9CLFFBQW9CLEVBQVUsSUFBdUI7UUFBckQsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQUFVLFNBQUksR0FBSixJQUFJLENBQW1CO1FBWmhFLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBQ3pCLFlBQU8sR0FBVyxDQUFDLENBQUM7UUFDcEIsWUFBTyxHQUFXLFFB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YixLQUFLO2dCQVlGLFFBQVE7c0JBRFgsS0FBSztnQkFlRixPQUFPO3NCQURWLEtBQUs7Z0JBYUYsT0FBTztzQkFEVixLQUFLO2dCQVlGLFNBQVM7c0JBRFosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBjb2VyY2VCb29sZWFuUHJvcGVydHksXHJcbiAgICBjb2VyY2VOdW1iZXJQcm9wZXJ0eSxcclxuICAgIE51bWJlcklucHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7XHJcbiAgICBBZnRlclZpZXdJbml0LFxyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIERpcmVjdGl2ZSxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBIb3N0QmluZGluZyxcclxuICAgIEhvc3RMaXN0ZW5lcixcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFZpZXdDaGlsZCxcclxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb25MaWtlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IERhdGV0aW1lQWRhcHRlciB9IGZyb20gJ2NtYXQvY29tcG9uZW50cy9hZGFwdGVyJztcclxuaW1wb3J0IHsgQ21hdERhdGV0aW1lcGlja2VyQ2xvY2tDb21wb25lbnQgfSBmcm9tICcuL2Nsb2NrJztcclxuaW1wb3J0IHsgQ21hdERhdGV0aW1lcGlja2VyRmlsdGVyVHlwZSB9IGZyb20gJy4vZGF0ZXRpbWVwaWNrZXItZmlsdGVydHlwZSc7XHJcbmltcG9ydCB7IENtYXREYXRldGltZXBpY2tlckludGwgfSBmcm9tICcuL2RhdGV0aW1lcGlja2VyLWludGwnO1xyXG5pbXBvcnQgeyBDbWF0QU1QTSwgQ21hdENsb2NrVmlldyB9IGZyb20gJy4vZGF0ZXRpbWVwaWNrZXItdHlwZXMnO1xyXG5cclxuXHJcblxyXG5mdW5jdGlvbiBwYWQobnVtOiBOdW1iZXJJbnB1dCwgc2l6ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIG51bSA9IFN0cmluZyhudW0pO1xyXG4gICAgd2hpbGUgKG51bS5sZW5ndGggPCBzaXplKSB7IG51bSA9ICcwJyArIG51bTsgfVxyXG4gICAgcmV0dXJuIG51bTtcclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ2lucHV0LmNtYXQtZGF0ZXRpbWVwaWNrZXItdGltZS1pbnB1dCcsXHJcbiAgICBleHBvcnRBczogJ2NtYXREYXRldGltZXBpY2tlclRpbWVJbnB1dCcsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbWF0RGF0ZXRpbWVwaWNrZXJUaW1lSW5wdXREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gICAgQElucHV0KCkgdGltZUludGVydmFsOiBudW1iZXIgPSAxO1xyXG4gICAgQElucHV0KCkgdGltZU1pbjogbnVtYmVyID0gMDtcclxuICAgIEBJbnB1dCgpIHRpbWVNYXg6IG51bWJlciA9IEluZmluaXR5O1xyXG5cclxuICAgIEBPdXRwdXQoKSB0aW1lVmFsdWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxOdW1iZXJJbnB1dD4oKTtcclxuXHJcbiAgICBwcml2YXRlIF92YWx1ZTogTnVtYmVySW5wdXQ7XHJcblxyXG4gICAgcHJpdmF0ZSBfa2V5RG93bkxpc3RlbmVyID0gdGhpcy5rZXlEb3duSGFuZGxlci5iaW5kKHRoaXMpO1xyXG4gICAgcHJpdmF0ZSBfa2V5UHJlc3NMaXN0ZW5lciA9IHRoaXMua2V5UHJlc3NIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICBwcml2YXRlIF9pbnB1dEV2ZW50TGlzdGVuZXIgPSB0aGlzLmlucHV0Q2hhbmdlZEhhbmRsZXIuYmluZCh0aGlzKTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmLCBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX2tleURvd25MaXN0ZW5lciwge1xyXG4gICAgICAgICAgICBwYXNzaXZlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBEbyBub3QgcGFzc2l2ZSBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gcHJldmVudERlZmF1bHQoKVxyXG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdGhpcy5fa2V5UHJlc3NMaXN0ZW5lcik7XHJcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLl9pbnB1dEV2ZW50TGlzdGVuZXIsIHtcclxuICAgICAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaGFzRm9jdXMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCAmJiB0aGlzLl9lbGVtZW50Py5uYXRpdmVFbGVtZW50ID09PSBkb2N1bWVudD8uYWN0aXZlRWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaW5wdXRFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBXZSBsb29rIGhlcmUgYXQgdGhlIHBsYWNlaG9sZGVyIHZhbHVlLCBiZWNhdXNlIHdlIHdyaXRlICcnIGludG8gdGhlIHZhbHVlIG9uIGZvY3VzXHJcbiAgICAvLyBwbGFjZWhvbGRlciBzaG91bGQgYWx3YXlzIGJlIHVwIHRvIGRhdGUgd2l0aCBcImN1cnJlbnRWYWx1ZVwiXHJcbiAgICBnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgLy8gQXQgdGhlIHN0YXJ0IF92YWx1ZSBpcyB1bmRlZmluZWQgdGhlcmVmb3JlIHRoaXMgd291bGQgcmVzdWx0IGluIG5vdCB2YWxpZCBhbmRcclxuICAgICAgICAvLyBtYWtlIGEgdWdseSB3YXJuaW5nIGJvcmRlciBhZnRlcndhcmRzIHdlIGNhbiBzYWZlbHkgY2hlY2tcclxuICAgICAgICBpZiAodGhpcy5fdmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gU3RyaW5nKHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEl0IGNhbiBiZSB0aGF0IGN1cnJlbnRWYWx1ZSBpcyBlbXB0eSBkdWUgdG8gd2UgcmVtb3ZpbmcgdGhlIHZhbHVlIG9uIGZvY3VzLFxyXG4gICAgICAgICAgICAvLyBpZiB0aGF0IGlzIHRoZSBjYXNlIHdlIHNob3VsZCBjaGVjayBwcmV2aW91cyB2YWx1ZSB3aGljaCBzaG91bGQgYmUgaW4gdGhlIHBsYWNlaG9sZGVyXHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFkKHRoaXMuX3ZhbHVlLDIpID09PSB0aGlzLmlucHV0RWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYWQodGhpcy5fdmFsdWUsMikgPT09IHRoaXMuaW5wdXRFbGVtZW50LnBsYWNlaG9sZGVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy52YWxpZDtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IHRpbWVWYWx1ZSh2YWx1ZTogTnVtYmVySW5wdXQpIHtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzRm9jdXMpIHtcclxuICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuX3ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy53cml0ZVBsYWNlaG9sZGVyKHRoaXMuX3ZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdibHVyJywgWyckZXZlbnQnXSlcclxuICAgIGJsdXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuX3ZhbHVlKTtcclxuICAgICAgICB0aGlzLndyaXRlUGxhY2Vob2xkZXIodGhpcy5fdmFsdWUpO1xyXG4gICAgICAgIHRoaXMudGltZVZhbHVlQ2hhbmdlZC5lbWl0KHRoaXMuX3ZhbHVlKTtcclxuICAgIH1cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJywgWyckZXZlbnQnXSlcclxuICAgIGZvY3VzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZSgnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXcml0ZSB2YWx1ZSB0byBpbnB1dEVsZW1lbnRcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgTnVtYmVySW5wdXRcclxuICAgICAqL1xyXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogTnVtYmVySW5wdXQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodmFsdWUgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlID0gcGFkKHZhbHVlLCAyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXcml0ZXMgdmFsdWUgdG8gcGxhY2Vob2xkZXJcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgTnVtYmVySW5wdXRcclxuICAgICAqL1xyXG4gICAgd3JpdGVQbGFjZWhvbGRlcih2YWx1ZTogTnVtYmVySW5wdXQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5wbGFjZWhvbGRlciA9IHBhZCh2YWx1ZSwgMik7XHJcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIGtleURvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKFN0cmluZyh0aGlzLmlucHV0RWxlbWVudC52YWx1ZSkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgdmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0Fycm93VXAnKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHRoaXMuX3ZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHZhbHVlICs9IHRoaXMudGltZUludGVydmFsO1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY29kZSA9PT0gJ0Fycm93RG93bicpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodGhpcy5fdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgLT0gdGhpcy50aW1lSW50ZXJ2YWw7XHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaWYgdmFsdWUgaGFzIGNoYW5nZWRcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndyaXRlUGxhY2Vob2xkZXIodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGFtcElucHV0VmFsdWUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGltZVZhbHVlQ2hhbmdlZC5lbWl0KHRoaXMuX3ZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByZXZlbnQgbm9uIG51bWJlciBpbnB1dHMgaW4gdGhlIGlucHV0RWxlbWVudCB3aXRoIHRoZSBleGNlcHRpb24gb2YgRW50ZXIvQmFja1NwYWNlXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGV2ZW50IEtleWJvYXJkRXZlbnRcclxuICAgICAqL1xyXG4gICAga2V5UHJlc3NIYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQ/LmtleSA/PyBudWxsO1xyXG4gICAgICAgIGlmIChpc05hTihOdW1iZXIoa2V5KSkgJiYga2V5ICE9PSAnRW50ZXInKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlucHV0Q2hhbmdlZEhhbmRsZXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jbGFtcElucHV0VmFsdWUoKTtcclxuICAgICAgICB0aGlzLnRpbWVWYWx1ZUNoYW5nZWQuZW1pdCh0aGlzLl92YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xhbXBJbnB1dFZhbHVlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmlucHV0RWxlbWVudD8udmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodGhpcy5pbnB1dEVsZW1lbnQ/LnZhbHVlID8/IG51bGwpO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjbGFtcGVkVmFsdWUgPSBNYXRoLm1pbihNYXRoLm1heCh2YWx1ZSwgdGhpcy50aW1lTWluKSwgdGhpcy50aW1lTWF4KTtcclxuICAgICAgICAgICAgaWYgKGNsYW1wZWRWYWx1ZSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZShjbGFtcGVkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53cml0ZVBsYWNlaG9sZGVyKGNsYW1wZWRWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBjbGFtcGVkVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGV2ZW50IGxpc3RlbmVycyBvbiBkZXN0cnVjdGlvblxyXG4gICAgICovXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fa2V5RG93bkxpc3RlbmVyKTtcclxuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsIHRoaXMuX2tleVByZXNzTGlzdGVuZXIpO1xyXG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdGhpcy5faW5wdXRFdmVudExpc3RlbmVyKTtcclxuICAgIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NtYXQtZGF0ZXRpbWVwaWNrZXItdGltZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGltZS5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWyd0aW1lLnNjc3MnXSxcclxuICAgIGV4cG9ydEFzOiAnY21hdERhdGV0aW1lcGlja2VyVGltZScsXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW0NtYXREYXRldGltZXBpY2tlclRpbWVJbnB1dERpcmVjdGl2ZSwgTWF0QnV0dG9uTW9kdWxlLCBDbWF0RGF0ZXRpbWVwaWNrZXJDbG9ja0NvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENtYXREYXRldGltZXBpY2tlclRpbWVDb21wb25lbnQ8RD4gaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgICAvKiogRW1pdHMgd2hlbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUgY2hhbmdlcy4gKi9cclxuICAgIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcclxuXHJcbiAgICAvKiogRW1pdHMgd2hlbiBhbnkgZGF0ZSBjaGFuZ2VzLiAqL1xyXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGFjdGl2ZURhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XHJcblxyXG4gICAgLyoqIEVtaXRzIHdoZW4gYW55IGRhdGUgaXMgc2VsZWN0ZWQuICovXHJcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdXNlclNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKiogRW1pdHMgd2hlbiBBTS9QTSBidXR0b24gYXJlIGNsaWNrZWQuICovXHJcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgYW1wbUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q21hdEFNUE0+KCk7XHJcblxyXG4gICAgLyoqIEVtaXRzIHdoZW4gQU0vUE0gYnV0dG9uIGFyZSBjbGlja2VkLiAqL1xyXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGNsb2NrVmlld0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q21hdENsb2NrVmlldz4oKTtcclxuXHJcbiAgICAvKiogQSBmdW5jdGlvbiB1c2VkIHRvIGZpbHRlciB3aGljaCBkYXRlcyBhcmUgc2VsZWN0YWJsZS4gKi9cclxuICAgIEBJbnB1dCgpIGRhdGVGaWx0ZXIhOiAoZGF0ZTogRCwgdHlwZTogQ21hdERhdGV0aW1lcGlja2VyRmlsdGVyVHlwZSkgPT4gYm9vbGVhbjtcclxuXHJcbiAgICAvKiogU3RlcCBvdmVyIG1pbnV0ZXMuICovXHJcbiAgICBASW5wdXQoKSBpbnRlcnZhbDogbnVtYmVyID0gMTtcclxuICAgIC8qKiBXaGV0aGVyIHRoZSB0aW1lIGlzIG5vdyBpbiBBTSBvciBQTS4gKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cclxuICAgIEBJbnB1dCgpIEFNUE06IENtYXRBTVBNID0gJ0FNJztcclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgY2xhc3MgPSAnY21hdC1kYXRldGltZXBpY2tlci10aW1lJztcclxuXHJcbiAgICBAVmlld0NoaWxkKCdob3VySW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4gfSlcclxuICAgIHByb3RlY3RlZCBob3VySW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+IHwgdm9pZDtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdob3VySW5wdXQnLCB7IHJlYWQ6IENtYXREYXRldGltZXBpY2tlclRpbWVJbnB1dERpcmVjdGl2ZSB9KVxyXG4gICAgcHJvdGVjdGVkIGhvdXJJbnB1dERpcmVjdGl2ZTogQ21hdERhdGV0aW1lcGlja2VyVGltZUlucHV0RGlyZWN0aXZlIHwgdm9pZDtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdtaW51dGVJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PiB9KVxyXG4gICAgcHJvdGVjdGVkIG1pbnV0ZUlucHV0RWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PiB8IHZvaWQ7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnbWludXRlSW5wdXQnLCB7IHJlYWQ6IENtYXREYXRldGltZXBpY2tlclRpbWVJbnB1dERpcmVjdGl2ZSB9KVxyXG4gICAgcHJvdGVjdGVkIG1pbnV0ZUlucHV0RGlyZWN0aXZlOiBDbWF0RGF0ZXRpbWVwaWNrZXJUaW1lSW5wdXREaXJlY3RpdmUgfCB2b2lkO1xyXG5cclxuICAgIGRhdGV0aW1lcGlja2VySW50bENoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbkxpa2U7XHJcblxyXG4gICAgcHJpdmF0ZSBfdHdlbHZlaG91ciA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfYWN0aXZlRGF0ZSE6IEQ7XHJcbiAgICBwcml2YXRlIF9zZWxlY3RlZCE6IEQgfCBudWxsO1xyXG4gICAgcHJpdmF0ZSBfbWluRGF0ZSE6IEQgfCBudWxsO1xyXG4gICAgcHJpdmF0ZSBfbWF4RGF0ZSE6IEQgfCBudWxsO1xyXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNsb2NrIGlzIGluIGhvdXIgdmlldy4gKi9cclxuICAgIHByaXZhdGUgX2Nsb2NrVmlldzogQ21hdENsb2NrVmlldyA9ICdob3VyJztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9hZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXHJcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByb3RlY3RlZCBkYXRldGltZXBpY2tlckludGw6IENtYXREYXRldGltZXBpY2tlckludGxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuZGF0ZXRpbWVwaWNrZXJJbnRsQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuZGF0ZXRpbWVwaWNrZXJJbnRsLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0hvdXJWaWV3KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9ja1ZpZXcgPT09ICdob3VyJztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNNaW51dGVWaWV3KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9ja1ZpZXcgPT09ICdob3VyJztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaG91cigpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVEYXRlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnR3ZWx2ZWhvdXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnMTInO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcwMCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGhvdXIgPSBOdW1iZXIodGhpcy5fYWRhcHRlci5nZXRIb3VyKHRoaXMuYWN0aXZlRGF0ZSkpO1xyXG4gICAgICAgIGlmICghdGhpcy50d2VsdmVob3VyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByZWZpeFdpdGhaZXJvKGhvdXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGhvdXIgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuICcxMic7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJlZml4V2l0aFplcm8oaG91ciA+IDEyID8gaG91ciAtIDEyIDogaG91cik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBtaW51dGUoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5hY3RpdmVEYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByZWZpeFdpdGhaZXJvKHRoaXMuX2FkYXB0ZXIuZ2V0TWludXRlKHRoaXMuYWN0aXZlRGF0ZSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcwMCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNsb2NrIHVzZXMgMTIgaG91ciBmb3JtYXQuICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCB0d2VsdmVob3VyKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90d2VsdmVob3VyO1xyXG4gICAgfVxyXG4gICAgc2V0IHR3ZWx2ZWhvdXIodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl90d2VsdmVob3VyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkYXRlIHRvIGRpc3BsYXkgaW4gdGhpcyBjbG9jayB2aWV3LlxyXG4gICAgICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBhY3RpdmVEYXRlKCk6IEQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVEYXRlO1xyXG4gICAgfVxyXG4gICAgc2V0IGFjdGl2ZURhdGUodmFsdWU6IEQpIHtcclxuICAgICAgICB0aGlzLl9hY3RpdmVEYXRlID0gdGhpcy5fYWRhcHRlci5jbGFtcERhdGUodmFsdWUsIHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZS4gKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHNlbGVjdGVkKCk6IEQgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XHJcbiAgICB9XHJcbiAgICBzZXQgc2VsZWN0ZWQodmFsdWU6IEQgfCBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLl9hZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9hZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuX3NlbGVjdGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqIFRoZSBtaW5pbXVtIHNlbGVjdGFibGUgZGF0ZS4gKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IG1pbkRhdGUoKTogRCB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBtaW5EYXRlKHZhbHVlOiBEIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX21pbkRhdGUgPSB0aGlzLl9hZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9hZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiBUaGUgbWF4aW11bSBzZWxlY3RhYmxlIGRhdGUuICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBtYXhEYXRlKCk6IEQgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcclxuICAgIH1cclxuICAgIHNldCBtYXhEYXRlKHZhbHVlOiBEIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX21heERhdGUgPSB0aGlzLl9hZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9hZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiBXaGV0aGVyIHRoZSBjbG9jayBzaG91bGQgYmUgc3RhcnRlZCBpbiBob3VyIG9yIG1pbnV0ZSB2aWV3LiAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgY2xvY2tWaWV3KCk6IENtYXRDbG9ja1ZpZXcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9ja1ZpZXc7XHJcbiAgICB9XHJcbiAgICBzZXQgY2xvY2tWaWV3KHZhbHVlOiBDbWF0Q2xvY2tWaWV3KSB7XHJcbiAgICAgICAgdGhpcy5fY2xvY2tWaWV3ID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJlZml4V2l0aFplcm8odmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHZhbHVlIDwgMTApIHtcclxuICAgICAgICAgICAgcmV0dXJuICcwJyArIFN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgLy8gd2hlbiBjbG9ja1ZpZXcgY2hhbmdlcyBieSBpbnB1dCB3ZSBzaG91bGQgZm9jdXMgdGhlIGNvcnJlY3QgaW5wdXRcclxuICAgICAgICBpZiAoY2hhbmdlc1snY2xvY2tWaWV3J10pIHtcclxuICAgICAgICAgICAgaWYgKGNoYW5nZXNbJ2Nsb2NrVmlldyddLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snY2xvY2tWaWV3J10ucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c0lucHV0RWxlbWVudCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvY3VzSW5wdXRFbGVtZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9jdXNJbnB1dEVsZW1lbnQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2xvY2tWaWV3ID09PSAnaG91cicpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaG91cklucHV0RWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgKHRoaXMuaG91cklucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50KS5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubWludXRlSW5wdXRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAodGhpcy5taW51dGVJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudCkuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVIb3VySW5wdXRDaGFuZ2UodmFsdWU6IE51bWJlcklucHV0KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaG91ciA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcclxuICAgICAgICBpZiAoaG91ciB8fCBob3VyID09PSAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5fYWRhcHRlci5jcmVhdGVEYXRldGltZShcclxuICAgICAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0WWVhcih0aGlzLmFjdGl2ZURhdGUpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXREYXRlKHRoaXMuYWN0aXZlRGF0ZSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUhvdXJGb3JBbVBtKGhvdXIpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRNaW51dGUodGhpcy5hY3RpdmVEYXRlKVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX2FkYXB0ZXIuY2xhbXBEYXRlKG5ld1ZhbHVlLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuYWN0aXZlRGF0ZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBJZiBwcmV2aW91c2x5IHdlIGRpZCBzZXQgW2NtYXRWYWx1ZV09XCIxM1wiIGFuZCB0aGUgaW5wdXQgY2hhbmdlZCB0byA2LCBhbmQgdGhlIGNsYW1waW5nIHdpbGwgbWFrZSBpdCBcIjEzXCIgYWdhaW5cclxuICAgICAgICAgICAgLy8gdGhlbiB0aGUgaG91cklucHV0RGlyZWN0aXZlIHdpbGwgbm90IGhhdmUgYmVlbiB1cGRhdGVkIHNpbmNlIFwiMTNcIiA9PT0gXCIxM1wiIHNhbWUgcmVmZXJlbmNlIHNvIG5vIGNoYW5nZSBkZXRlY3RlZFxyXG4gICAgICAgICAgICAvLyBieSBkaXJlY3RseSBzZXR0aW5nIGl0IHdpdGhpbiB0aGlzIGhhbmRsZXIsIHdlIGhhbmRsZSB0aGlzIHVzZWNhc2VcclxuICAgICAgICAgICAgaWYgKHRoaXMuaG91cklucHV0RGlyZWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhvdXJJbnB1dERpcmVjdGl2ZS50aW1lVmFsdWUgPSB0aGlzLmhvdXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlSG91ckZvckFtUG0odmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnR3ZWx2ZWhvdXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdmFsdWUgc2hvdWxkIGJlIGJldHdlZW4gMS0xMlxyXG4gICAgICAgIGlmICh0aGlzLkFNUE0gPT09ICdBTScpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSAwIHx8IHZhbHVlID09PSAxMikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQTVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IDAgfHwgdmFsdWUgPT09IDEyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIG90aGVyIGNhc2VzLCB3ZSBzaG91bGQgYWRkIDEyIHRvIHRoZSB2YWx1ZSBha2EgMzowMCBQTSA9IDMgKyAxMiA9IDE1OjAwXHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSArIDEyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVNaW51dGVJbnB1dENoYW5nZSh2YWx1ZTogTnVtYmVySW5wdXQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBtaW51dGUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKG1pbnV0ZSB8fCBtaW51dGUgPT09IDApIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl9hZGFwdGVyLmNyZWF0ZURhdGV0aW1lKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRZZWFyKHRoaXMuYWN0aXZlRGF0ZSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmdldERhdGUodGhpcy5hY3RpdmVEYXRlKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0SG91cih0aGlzLl9hY3RpdmVEYXRlKSxcclxuICAgICAgICAgICAgICAgIG1pbnV0ZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVEYXRlID0gdGhpcy5fYWRhcHRlci5jbGFtcERhdGUobmV3VmFsdWUsIHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlKTtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEYXRlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIHByZXZpb3VzbHkgd2UgZGlkIHNldCBbY21hdFZhbHVlXT1cIjQwXCIgYW5kIHRoZSBpbnB1dCBjaGFuZ2VkIHRvIDMwLCBhbmQgdGhlIGNsYW1waW5nIHdpbGwgbWFrZSBpdCBcIjQwXCIgYWdhaW5cclxuICAgICAgICAgICAgLy8gdGhlbiB0aGUgbWludXRlSW5wdXREaXJlY3RpdmUgd2lsbCBub3QgaGF2ZSBiZWVuIHVwZGF0ZWQgc2luY2UgXCI0MFwiID09PSBcIjQwXCIgc2FtZSByZWZlcmVuY2Ugc28gbm8gY2hhbmdlIGRldGVjdGVkXHJcbiAgICAgICAgICAgIC8vIGJ5IGRpcmVjdGx5IHNldHRpbmcgaXQgd2l0aGluIHRoaXMgaGFuZGxlciwgd2UgaGFuZGxlIHRoaXMgdXNlY2FzZVxyXG4gICAgICAgICAgICBpZiAodGhpcy5taW51dGVJbnB1dERpcmVjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5taW51dGVJbnB1dERpcmVjdGl2ZS50aW1lVmFsdWUgPSB0aGlzLm1pbnV0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVGb2N1cyhjbG9ja1ZpZXc6IENtYXRDbG9ja1ZpZXcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNsb2NrVmlldyA9IGNsb2NrVmlldztcclxuICAgICAgICB0aGlzLmNsb2NrVmlld0NoYW5nZS5lbWl0KGNsb2NrVmlldyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGltZVNlbGVjdGVkKGRhdGU6IEQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5jbG9ja1ZpZXcgPT09ICdob3VyJykge1xyXG4gICAgICAgICAgICB0aGlzLmNsb2NrVmlldyA9ICdtaW51dGUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9hY3RpdmVEYXRlID0gdGhpcy5zZWxlY3RlZCA9IGRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgb25BY3RpdmVEYXRlQ2hhbmdlKGRhdGU6IEQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9hY3RpdmVEYXRlID0gZGF0ZTtcclxuICAgICAgICB0aGlzLmFjdGl2ZURhdGVDaGFuZ2UuZW1pdChkYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVPaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51c2VyU2VsZWN0aW9uLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVDYW5jZWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VsZWN0aW9uLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRldGltZXBpY2tlckludGxDaGFuZ2VzU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0ZXRpbWVwaWNrZXJJbnRsQ2hhbmdlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci10aW1lLWlucHV0LXdyYXBwZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci10aW1lLWlucHV0LWlubmVyXCI+XHJcbiAgICA8aW5wdXQgI2hvdXJJbnB1dD1cImNtYXREYXRldGltZXBpY2tlclRpbWVJbnB1dFwiIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci10aW1lLWlucHV0XCJcclxuICAgICAgdHlwZT1cInRleHRcIiBpbnB1dG1vZGU9XCJudW1lcmljXCJcclxuICAgICAgbWF4bGVuZ3RoPVwiMlwiIFtjbGFzcy5jbWF0LWRhdGV0aW1lcGlja2VyLXRpbWUtaW5wdXQtYWN0aXZlXT1cImNsb2NrVmlldyA9PT0gJ2hvdXInXCIgW2NsYXNzLmNtYXQtZGF0ZXRpbWVwaWNrZXItdGltZS1pbnB1dC13YXJuaW5nXT1cIiFob3VySW5wdXQudmFsaWRcIiBbdGltZU1pbl09XCJ0d2VsdmVob3VyID8gMSA6IDBcIiBbdGltZU1heF09XCJ0d2VsdmVob3VyID8gMTIgOiAyM1wiXHJcbiAgICAgIFt0aW1lVmFsdWVdPVwiaG91clwiICh0aW1lVmFsdWVDaGFuZ2VkKT1cImhhbmRsZUhvdXJJbnB1dENoYW5nZSgkZXZlbnQpXCIgKGZvY3VzKT1cImhhbmRsZUZvY3VzKCdob3VyJylcIiAvPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImNtYXQtZGF0ZXRpbWVwaWNrZXItdGltZS1zZXBlcmF0b3JcIj46PC9kaXY+XHJcblxyXG4gICAgICA8aW5wdXQgI21pbnV0ZUlucHV0PVwiY21hdERhdGV0aW1lcGlja2VyVGltZUlucHV0XCIgY2xhc3M9XCJjbWF0LWRhdGV0aW1lcGlja2VyLXRpbWUtaW5wdXRcIlxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCIgaW5wdXRtb2RlPVwibnVtZXJpY1wiXHJcbiAgICAgICAgbWF4bGVuZ3RoPVwiMlwiIFtjbGFzcy5jbWF0LWRhdGV0aW1lcGlja2VyLXRpbWUtaW5wdXQtYWN0aXZlXT1cImNsb2NrVmlldyA9PT0gJ21pbnV0ZSdcIiBbY2xhc3MuY21hdC1kYXRldGltZXBpY2tlci10aW1lLWlucHV0LXdhcm5pbmddPVwiIW1pbnV0ZUlucHV0LnZhbGlkXCIgW3RpbWVNaW5dPVwiMFwiIFt0aW1lTWF4XT1cIjU5XCIgW3RpbWVWYWx1ZV09XCJtaW51dGVcIlxyXG4gICAgICAgIFt0aW1lSW50ZXJ2YWxdPVwiaW50ZXJ2YWxcIiAodGltZVZhbHVlQ2hhbmdlZCk9XCJoYW5kbGVNaW51dGVJbnB1dENoYW5nZSgkZXZlbnQpXCIgKGZvY3VzKT1cImhhbmRsZUZvY3VzKCdtaW51dGUnKVwiIC8+XHJcblxyXG4gICAgICAgIEBpZiAodHdlbHZlaG91cikge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNtYXQtZGF0ZXRpbWVwaWNrZXItdGltZS1hbXBtXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbWF0LWRhdGV0aW1lcGlja2VyLXRpbWUtYW1cIlxyXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBTVwiIFtjbGFzcy5jbWF0LWRhdGV0aW1lcGlja2VyLXRpbWUtYW1wbS1hY3RpdmVdPVwiQU1QTSA9PT0gJ0FNJ1wiXHJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIChjbGljayk9XCJhbXBtQ2hhbmdlLmVtaXQoJ0FNJylcIj5BTTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci10aW1lLXBtXCJcclxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUE1cIiBbY2xhc3MuY21hdC1kYXRldGltZXBpY2tlci10aW1lLWFtcG0tYWN0aXZlXT1cIkFNUE0gPT09ICdQTSdcIlxyXG4gICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoY2xpY2spPVwiYW1wbUNoYW5nZS5lbWl0KCdQTScpXCI+UE08L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8Y21hdC1kYXRldGltZXBpY2tlci1jbG9jayBbZGF0ZUZpbHRlcl09XCJkYXRlRmlsdGVyXCIgW2ludGVydmFsXT1cImludGVydmFsXCJcclxuICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiIFttaW5EYXRlXT1cIm1pbkRhdGVcIiBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIiBbc3RhcnRWaWV3XT1cImNsb2NrVmlld1wiIFt0d2VsdmVob3VyXT1cInR3ZWx2ZWhvdXJcIlxyXG4gICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwidGltZVNlbGVjdGVkKCRldmVudClcIiAoYWN0aXZlRGF0ZUNoYW5nZSk9XCJvbkFjdGl2ZURhdGVDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgPC9jbWF0LWRhdGV0aW1lcGlja2VyLWNsb2NrPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjbWF0LWRhdGV0aW1lcGlja2VyLXRpbWUtYnV0dG9uLXdyYXBwZXIgc3BhY2UteC00XCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJjbWF0PWRhdGV0aW1lcGlja2VyLXRpbWUtY2FuY2VsLWJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImhhbmRsZUNhbmNlbCgpXCI+XHJcbiAgICAgICAge3sgZGF0ZXRpbWVwaWNrZXJJbnRsLmNhbmNlbExhYmVsIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci10aW1lLW9rLWJ1dHRvblwiIG1hdC1mbGF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY29sb3I9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cIm1pbnV0ZUlucHV0RGlyZWN0aXZlPy5pbnZhbGlkIHx8IGhvdXJJbnB1dERpcmVjdGl2ZT8uaW52YWxpZFwiXHJcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZU9rKClcIj5cclxuICAgICAgICB7eyBkYXRldGltZXBpY2tlckludGwub2tMYWJlbCB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PiJdfQ==
|