@openmrs/ngx-formentry 3.0.1-pre.8
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/abstract-controls-extension/afe-control-type.d.ts +6 -0
- package/abstract-controls-extension/afe-form-array.d.ts +43 -0
- package/abstract-controls-extension/afe-form-control.d.ts +46 -0
- package/abstract-controls-extension/afe-form-group.d.ts +38 -0
- package/abstract-controls-extension/control-extensions.d.ts +4 -0
- package/abstract-controls-extension/index.d.ts +4 -0
- package/abstract-controls-extension/value-change.listener.d.ts +4 -0
- package/bundles/openmrs-ngx-formentry.umd.js +15020 -0
- package/bundles/openmrs-ngx-formentry.umd.js.map +1 -0
- package/bundles/openmrs-ngx-formentry.umd.min.js +2 -0
- package/bundles/openmrs-ngx-formentry.umd.min.js.map +1 -0
- package/change-tracking/control-relation.d.ts +12 -0
- package/change-tracking/control-relations.d.ts +12 -0
- package/components/afe-ng-select.component.d.ts +26 -0
- package/components/appointments-overview/appointments-overview.component.d.ts +15 -0
- package/components/check-box/checkbox.component.d.ts +16 -0
- package/components/check-box/checkbox.module.d.ts +2 -0
- package/components/custom-component-wrapper/custom-component-wrapper..module.d.ts +2 -0
- package/components/custom-component-wrapper/custom-component-wrapper.component.d.ts +11 -0
- package/components/custom-control-wrapper/custom-control-wrapper..module.d.ts +2 -0
- package/components/custom-control-wrapper/custom-control-wrapper.component.d.ts +25 -0
- package/components/date-time-picker/date-picker/date-picker.component.d.ts +42 -0
- package/components/date-time-picker/date-time-picker.component.d.ts +26 -0
- package/components/date-time-picker/date-time-picker.module.d.ts +5 -0
- package/components/date-time-picker/picker-modal/modal.component.d.ts +10 -0
- package/components/date-time-picker/pipes/moment.pipe.d.ts +8 -0
- package/components/date-time-picker/time-picker/time-picker.component.d.ts +29 -0
- package/components/file-upload/file-upload.component.d.ts +26 -0
- package/components/file-upload/file-upload.module.d.ts +2 -0
- package/components/file-upload/secure.pipe.d.ts +23 -0
- package/components/input/input.directive.d.ts +28 -0
- package/components/input/input.module.d.ts +2 -0
- package/components/input/label.component.d.ts +87 -0
- package/components/input/text-area.directive.d.ts +21 -0
- package/components/ngx-datetime-picker/ngx-datetime-picker.component.d.ts +17 -0
- package/components/ngx-datetime-picker/ngx-datetime-picker.module.d.ts +5 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.d.ts +189 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.d.ts +15 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.d.ts +73 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.d.ts +5 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.d.ts +7 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar-body.component.d.ts +77 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.d.ts +139 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.d.ts +109 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.d.ts +120 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar.component.d.ts +141 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.d.ts +90 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.d.ts +122 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.d.ts +152 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.d.ts +51 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.d.ts +21 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.d.ts +8 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.d.ts +157 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time.class.d.ts +86 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time.module.d.ts +5 -0
- package/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.d.ts +7 -0
- package/components/ngx-pick-datetime/lib/date-time/timer-box.component.d.ts +35 -0
- package/components/ngx-pick-datetime/lib/date-time/timer.component.d.ts +129 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog-config.class.d.ts +93 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog-container.component.d.ts +56 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.d.ts +49 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog.module.d.ts +5 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog.service.d.ts +70 -0
- package/components/ngx-pick-datetime/lib/utils/index.d.ts +4 -0
- package/components/ngx-pick-datetime/lib/utils/object.utils.d.ts +11 -0
- package/components/ngx-remote-select/ngx-remote-select.component.d.ts +37 -0
- package/components/ngx-remote-select/ngx-remote-select.module.d.ts +2 -0
- package/components/ngx-tabset/components/tab-set.d.ts +16 -0
- package/components/ngx-tabset/components/tab.d.ts +10 -0
- package/components/ngx-tabset/directives/hover-class.directive.d.ts +8 -0
- package/components/ngx-tabset/modules/ngx-tabset.module.d.ts +11 -0
- package/components/number-input/number-input.component.d.ts +148 -0
- package/components/number-input/number-input.module.d.ts +2 -0
- package/components/select/optgroup.directive.d.ts +3 -0
- package/components/select/option.directive.d.ts +3 -0
- package/components/select/select.component.d.ts +112 -0
- package/components/select/select.module.d.ts +2 -0
- package/esm2015/abstract-controls-extension/afe-control-type.js +8 -0
- package/esm2015/abstract-controls-extension/afe-form-array.js +85 -0
- package/esm2015/abstract-controls-extension/afe-form-control.js +88 -0
- package/esm2015/abstract-controls-extension/afe-form-group.js +61 -0
- package/esm2015/abstract-controls-extension/control-extensions.js +5 -0
- package/esm2015/abstract-controls-extension/index.js +5 -0
- package/esm2015/abstract-controls-extension/value-change.listener.js +2 -0
- package/esm2015/change-tracking/control-relation.js +44 -0
- package/esm2015/change-tracking/control-relations.js +32 -0
- package/esm2015/components/afe-ng-select.component.js +87 -0
- package/esm2015/components/appointments-overview/appointments-overview.component.js +119 -0
- package/esm2015/components/check-box/checkbox.component.js +77 -0
- package/esm2015/components/check-box/checkbox.module.js +14 -0
- package/esm2015/components/custom-component-wrapper/custom-component-wrapper..module.js +16 -0
- package/esm2015/components/custom-component-wrapper/custom-component-wrapper.component.js +18 -0
- package/esm2015/components/custom-control-wrapper/custom-control-wrapper..module.js +17 -0
- package/esm2015/components/custom-control-wrapper/custom-control-wrapper.component.js +63 -0
- package/esm2015/components/date-time-picker/date-picker/date-picker.component.js +182 -0
- package/esm2015/components/date-time-picker/date-time-picker.component.js +104 -0
- package/esm2015/components/date-time-picker/date-time-picker.module.js +34 -0
- package/esm2015/components/date-time-picker/picker-modal/modal.component.js +30 -0
- package/esm2015/components/date-time-picker/pipes/moment.pipe.js +13 -0
- package/esm2015/components/date-time-picker/time-picker/time-picker.component.js +114 -0
- package/esm2015/components/file-upload/file-upload.component.js +110 -0
- package/esm2015/components/file-upload/file-upload.module.js +24 -0
- package/esm2015/components/file-upload/secure.pipe.js +102 -0
- package/esm2015/components/input/input.directive.js +55 -0
- package/esm2015/components/input/input.module.js +18 -0
- package/esm2015/components/input/label.component.js +177 -0
- package/esm2015/components/input/text-area.directive.js +40 -0
- package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.component.js +60 -0
- package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.module.js +26 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.js +114 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.js +7 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.js +344 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.js +16 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.js +30 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-body.component.js +149 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.js +429 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.js +367 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.js +359 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar.component.js +334 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.js +251 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.js +380 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.js +590 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.js +60 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.js +71 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.js +21 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.js +512 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.class.js +153 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.module.js +58 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.js +24 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/timer-box.component.js +85 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/timer.component.js +292 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-config.class.js +56 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-container.component.js +208 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.js +119 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.module.js +22 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.service.js +222 -0
- package/esm2015/components/ngx-pick-datetime/lib/utils/index.js +5 -0
- package/esm2015/components/ngx-pick-datetime/lib/utils/object.utils.js +26 -0
- package/esm2015/components/ngx-remote-select/ngx-remote-select.component.js +121 -0
- package/esm2015/components/ngx-remote-select/ngx-remote-select.module.js +16 -0
- package/esm2015/components/ngx-tabset/components/tab-set.js +67 -0
- package/esm2015/components/ngx-tabset/components/tab.js +35 -0
- package/esm2015/components/ngx-tabset/directives/hover-class.directive.js +26 -0
- package/esm2015/components/ngx-tabset/modules/ngx-tabset.module.js +33 -0
- package/esm2015/components/number-input/number-input.component.js +203 -0
- package/esm2015/components/number-input/number-input.module.js +15 -0
- package/esm2015/components/select/optgroup.directive.js +17 -0
- package/esm2015/components/select/option.directive.js +17 -0
- package/esm2015/components/select/select.component.js +293 -0
- package/esm2015/components/select/select.module.js +18 -0
- package/esm2015/form-entry/control-alerts/alert-helpers.js +40 -0
- package/esm2015/form-entry/control-alerts/can-generate-alert.js +2 -0
- package/esm2015/form-entry/control-calculators/can-calculate.js +2 -0
- package/esm2015/form-entry/control-hiders-disablers/can-disable.js +2 -0
- package/esm2015/form-entry/control-hiders-disablers/can-hide.js +2 -0
- package/esm2015/form-entry/control-hiders-disablers/disabler-helper.js +33 -0
- package/esm2015/form-entry/control-hiders-disablers/hider-helpers.js +40 -0
- package/esm2015/form-entry/data-sources/data-sources.js +30 -0
- package/esm2015/form-entry/data-sources/dummy-data-source.js +104 -0
- package/esm2015/form-entry/directives/collapse-animations.js +11 -0
- package/esm2015/form-entry/directives/collapse.directive.js +157 -0
- package/esm2015/form-entry/directives/historical-value-directive.js +66 -0
- package/esm2015/form-entry/error-renderer/error-renderer.component.js +55 -0
- package/esm2015/form-entry/expression-runner/expression-runner.js +168 -0
- package/esm2015/form-entry/form-entry.module.js +107 -0
- package/esm2015/form-entry/form-factory/control-relations.factory.js +236 -0
- package/esm2015/form-entry/form-factory/form-control.service.js +118 -0
- package/esm2015/form-entry/form-factory/form-node.js +81 -0
- package/esm2015/form-entry/form-factory/form.factory.js +132 -0
- package/esm2015/form-entry/form-factory/form.js +193 -0
- package/esm2015/form-entry/form-factory/hiders-disablers.factory.js +66 -0
- package/esm2015/form-entry/form-factory/question.factory.js +864 -0
- package/esm2015/form-entry/form-factory/show-messages.factory.js +30 -0
- package/esm2015/form-entry/form-factory/validation.factory.js +145 -0
- package/esm2015/form-entry/form-renderer/form-renderer.component.css.js +179 -0
- package/esm2015/form-entry/form-renderer/form-renderer.component.js +231 -0
- package/esm2015/form-entry/helpers/historical-expression-helper-service.js +38 -0
- package/esm2015/form-entry/helpers/historical-field-helper-service.js +36 -0
- package/esm2015/form-entry/helpers/js-expression-helper.js +238 -0
- package/esm2015/form-entry/pipes/time-ago.pipe.js +107 -0
- package/esm2015/form-entry/question-models/checkbox.model.js +11 -0
- package/esm2015/form-entry/question-models/conditional-validation.model.js +9 -0
- package/esm2015/form-entry/question-models/custom-control-question.model.js +10 -0
- package/esm2015/form-entry/question-models/date-question.js +12 -0
- package/esm2015/form-entry/question-models/date-validation.model.js +10 -0
- package/esm2015/form-entry/question-models/file-upload-question.js +13 -0
- package/esm2015/form-entry/question-models/group-question.js +12 -0
- package/esm2015/form-entry/question-models/interfaces/base-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/checkbox-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/data-source.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/date-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/file-upload-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/group-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/multi-select-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/nested-questions.js +7 -0
- package/esm2015/form-entry/question-models/interfaces/repeating-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/select-option.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/select-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/test-order-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/text-area-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/text-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/ui-select-question-options.js +2 -0
- package/esm2015/form-entry/question-models/js-expression-validation.model.js +8 -0
- package/esm2015/form-entry/question-models/max-validation.model.js +9 -0
- package/esm2015/form-entry/question-models/min-validation.model.js +9 -0
- package/esm2015/form-entry/question-models/models.js +12 -0
- package/esm2015/form-entry/question-models/multi-select-question.js +11 -0
- package/esm2015/form-entry/question-models/pair.model.js +7 -0
- package/esm2015/form-entry/question-models/question-base.js +25 -0
- package/esm2015/form-entry/question-models/rendering-type.js +9 -0
- package/esm2015/form-entry/question-models/repeating-question.js +11 -0
- package/esm2015/form-entry/question-models/select-option.js +7 -0
- package/esm2015/form-entry/question-models/select-question.js +12 -0
- package/esm2015/form-entry/question-models/test-order-question.js +15 -0
- package/esm2015/form-entry/question-models/text-area-input-question.js +13 -0
- package/esm2015/form-entry/question-models/text-input-question.js +10 -0
- package/esm2015/form-entry/question-models/ui-select-question.js +11 -0
- package/esm2015/form-entry/question-models/validation.model.js +7 -0
- package/esm2015/form-entry/services/debug-mode.service.js +22 -0
- package/esm2015/form-entry/services/form-errors.service.js +18 -0
- package/esm2015/form-entry/services/form-schema-compiler.service.js +246 -0
- package/esm2015/form-entry/services/historical-encounter-data.service.js +170 -0
- package/esm2015/form-entry/utils/messages.js +12 -0
- package/esm2015/form-entry/validators/conditional-answered.validator.js +46 -0
- package/esm2015/form-entry/validators/conditional-required.validator.js +40 -0
- package/esm2015/form-entry/validators/date.validator.js +18 -0
- package/esm2015/form-entry/validators/future-date-restriction.validator.js +21 -0
- package/esm2015/form-entry/validators/js-expression.validator.js +26 -0
- package/esm2015/form-entry/validators/max-date.validator.js +23 -0
- package/esm2015/form-entry/validators/max.validator.js +17 -0
- package/esm2015/form-entry/validators/min-date.validator.js +23 -0
- package/esm2015/form-entry/validators/min.validator.js +17 -0
- package/esm2015/form-entry/validators/required.validator.js +11 -0
- package/esm2015/form-entry/validators/validations.js +5 -0
- package/esm2015/form-entry/value-adapters/encounter.adapter.js +172 -0
- package/esm2015/form-entry/value-adapters/obs-adapter-helper.js +496 -0
- package/esm2015/form-entry/value-adapters/obs.adapter.js +545 -0
- package/esm2015/form-entry/value-adapters/order.adapter.js +186 -0
- package/esm2015/form-entry/value-adapters/person-attribute.adapter.js +87 -0
- package/esm2015/form-entry/value-adapters/value.adapter.js +2 -0
- package/esm2015/lib/index.js +49 -0
- package/esm2015/openmrs-ngx-formentry.js +76 -0
- package/esm2015/public_api.js +2 -0
- package/esm2015/shared.module.js +15 -0
- package/fesm2015/openmrs-ngx-formentry.js +13458 -0
- package/fesm2015/openmrs-ngx-formentry.js.map +1 -0
- package/form-entry/control-alerts/alert-helpers.d.ts +9 -0
- package/form-entry/control-alerts/can-generate-alert.d.ts +18 -0
- package/form-entry/control-calculators/can-calculate.d.ts +5 -0
- package/form-entry/control-hiders-disablers/can-disable.d.ts +19 -0
- package/form-entry/control-hiders-disablers/can-hide.d.ts +20 -0
- package/form-entry/control-hiders-disablers/disabler-helper.d.ts +7 -0
- package/form-entry/control-hiders-disablers/hider-helpers.d.ts +9 -0
- package/form-entry/data-sources/data-sources.d.ts +7 -0
- package/form-entry/data-sources/dummy-data-source.d.ts +18 -0
- package/form-entry/directives/collapse-animations.d.ts +4 -0
- package/form-entry/directives/collapse.directive.d.ts +42 -0
- package/form-entry/directives/historical-value-directive.d.ts +13 -0
- package/form-entry/error-renderer/error-renderer.component.d.ts +17 -0
- package/form-entry/expression-runner/expression-runner.d.ts +15 -0
- package/form-entry/form-entry.module.d.ts +2 -0
- package/form-entry/form-factory/control-relations.factory.d.ts +15 -0
- package/form-entry/form-factory/form-control.service.d.ts +22 -0
- package/form-entry/form-factory/form-node.d.ts +51 -0
- package/form-entry/form-factory/form.d.ts +28 -0
- package/form-entry/form-factory/form.factory.d.ts +23 -0
- package/form-entry/form-factory/hiders-disablers.factory.d.ts +17 -0
- package/form-entry/form-factory/question.factory.d.ts +56 -0
- package/form-entry/form-factory/show-messages.factory.d.ts +12 -0
- package/form-entry/form-factory/validation.factory.d.ts +22 -0
- package/form-entry/form-renderer/form-renderer.component.css.d.ts +1 -0
- package/form-entry/form-renderer/form-renderer.component.d.ts +52 -0
- package/form-entry/helpers/historical-expression-helper-service.d.ts +5 -0
- package/form-entry/helpers/historical-field-helper-service.d.ts +4 -0
- package/form-entry/helpers/js-expression-helper.d.ts +22 -0
- package/form-entry/pipes/time-ago.pipe.d.ts +11 -0
- package/form-entry/question-models/checkbox.model.d.ts +9 -0
- package/form-entry/question-models/conditional-validation.model.d.ts +6 -0
- package/form-entry/question-models/custom-control-question.model.d.ts +6 -0
- package/form-entry/question-models/date-question.d.ts +7 -0
- package/form-entry/question-models/date-validation.model.d.ts +5 -0
- package/form-entry/question-models/file-upload-question.d.ts +8 -0
- package/form-entry/question-models/group-question.d.ts +8 -0
- package/form-entry/question-models/interfaces/base-options.d.ts +28 -0
- package/form-entry/question-models/interfaces/checkbox-options.d.ts +7 -0
- package/form-entry/question-models/interfaces/data-source.d.ts +10 -0
- package/form-entry/question-models/interfaces/date-question-options.d.ts +3 -0
- package/form-entry/question-models/interfaces/file-upload-question-options.d.ts +5 -0
- package/form-entry/question-models/interfaces/group-question-options.d.ts +5 -0
- package/form-entry/question-models/interfaces/multi-select-options.d.ts +4 -0
- package/form-entry/question-models/interfaces/nested-questions.d.ts +6 -0
- package/form-entry/question-models/interfaces/repeating-question-options.d.ts +5 -0
- package/form-entry/question-models/interfaces/select-option.d.ts +4 -0
- package/form-entry/question-models/interfaces/select-question-options.d.ts +9 -0
- package/form-entry/question-models/interfaces/test-order-question-options.d.ts +14 -0
- package/form-entry/question-models/interfaces/text-area-question-options.d.ts +5 -0
- package/form-entry/question-models/interfaces/text-question-options.d.ts +4 -0
- package/form-entry/question-models/interfaces/ui-select-question-options.d.ts +9 -0
- package/form-entry/question-models/js-expression-validation.model.d.ts +5 -0
- package/form-entry/question-models/max-validation.model.d.ts +5 -0
- package/form-entry/question-models/min-validation.model.d.ts +5 -0
- package/form-entry/question-models/models.d.ts +15 -0
- package/form-entry/question-models/multi-select-question.d.ts +9 -0
- package/form-entry/question-models/pair.model.d.ts +5 -0
- package/form-entry/question-models/question-base.d.ts +40 -0
- package/form-entry/question-models/rendering-type.d.ts +7 -0
- package/form-entry/question-models/repeating-question.d.ts +7 -0
- package/form-entry/question-models/select-option.d.ts +6 -0
- package/form-entry/question-models/select-question.d.ts +10 -0
- package/form-entry/question-models/test-order-question.d.ts +13 -0
- package/form-entry/question-models/text-area-input-question.d.ts +7 -0
- package/form-entry/question-models/text-input-question.d.ts +6 -0
- package/form-entry/question-models/ui-select-question.d.ts +11 -0
- package/form-entry/question-models/validation.model.d.ts +5 -0
- package/form-entry/services/debug-mode.service.d.ts +5 -0
- package/form-entry/services/form-errors.service.d.ts +10 -0
- package/form-entry/services/form-schema-compiler.service.d.ts +20 -0
- package/form-entry/services/historical-encounter-data.service.d.ts +12 -0
- package/form-entry/utils/messages.d.ts +11 -0
- package/form-entry/validators/conditional-answered.validator.d.ts +8 -0
- package/form-entry/validators/conditional-required.validator.d.ts +8 -0
- package/form-entry/validators/date.validator.d.ts +7 -0
- package/form-entry/validators/future-date-restriction.validator.d.ts +7 -0
- package/form-entry/validators/js-expression.validator.d.ts +8 -0
- package/form-entry/validators/max-date.validator.d.ts +6 -0
- package/form-entry/validators/max.validator.d.ts +6 -0
- package/form-entry/validators/min-date.validator.d.ts +6 -0
- package/form-entry/validators/min.validator.d.ts +6 -0
- package/form-entry/validators/required.validator.d.ts +6 -0
- package/form-entry/validators/validations.d.ts +4 -0
- package/form-entry/value-adapters/encounter.adapter.d.ts +23 -0
- package/form-entry/value-adapters/obs-adapter-helper.d.ts +27 -0
- package/form-entry/value-adapters/obs.adapter.d.ts +35 -0
- package/form-entry/value-adapters/order.adapter.d.ts +17 -0
- package/form-entry/value-adapters/person-attribute.adapter.d.ts +12 -0
- package/form-entry/value-adapters/value.adapter.d.ts +5 -0
- package/lib/index.d.ts +49 -0
- package/openmrs-ngx-formentry.d.ts +85 -0
- package/openmrs-ngx-formentry.metadata.json +1 -0
- package/package.json +35 -0
- package/public_api.d.ts +1 -0
- package/shared.module.d.ts +2 -0
- package/styles/ngx-formentry.css +374 -0
- package/styles/picker.min.css +770 -0
package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.js
ADDED
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
/* eslint-disable @angular-eslint/no-host-metadata-property */
|
|
2
|
+
/**
|
|
3
|
+
* calendar-multi-year-view.component
|
|
4
|
+
*/
|
|
5
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Optional, Output, ViewChild } from '@angular/core';
|
|
6
|
+
import { DateTimeAdapter } from './adapter/date-time-adapter.class';
|
|
7
|
+
import { CalendarCell, OwlCalendarBodyComponent } from './calendar-body.component';
|
|
8
|
+
import { DOWN_ARROW, END, ENTER, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';
|
|
9
|
+
import { OwlDateTimeIntl } from './date-time-picker-intl.service';
|
|
10
|
+
export const YEARS_PER_ROW = 3;
|
|
11
|
+
export const YEAR_ROWS = 7;
|
|
12
|
+
export class OwlMultiYearViewComponent {
|
|
13
|
+
constructor(cdRef, pickerIntl, dateTimeAdapter) {
|
|
14
|
+
this.cdRef = cdRef;
|
|
15
|
+
this.pickerIntl = pickerIntl;
|
|
16
|
+
this.dateTimeAdapter = dateTimeAdapter;
|
|
17
|
+
/**
|
|
18
|
+
* The select mode of the picker;
|
|
19
|
+
* */
|
|
20
|
+
this._selectMode = 'single';
|
|
21
|
+
this._selecteds = [];
|
|
22
|
+
this.initiated = false;
|
|
23
|
+
/**
|
|
24
|
+
* Callback to invoke when a new month is selected
|
|
25
|
+
* */
|
|
26
|
+
this.change = new EventEmitter();
|
|
27
|
+
/**
|
|
28
|
+
* Emits the selected year. This doesn't imply a change on the selected date
|
|
29
|
+
* */
|
|
30
|
+
this.yearSelected = new EventEmitter();
|
|
31
|
+
/** Emits when any date is activated. */
|
|
32
|
+
this.pickerMomentChange = new EventEmitter();
|
|
33
|
+
/** Emits when use keyboard enter to select a calendar cell */
|
|
34
|
+
this.keyboardEnter = new EventEmitter();
|
|
35
|
+
}
|
|
36
|
+
get selectMode() {
|
|
37
|
+
return this._selectMode;
|
|
38
|
+
}
|
|
39
|
+
set selectMode(val) {
|
|
40
|
+
this._selectMode = val;
|
|
41
|
+
if (this.initiated) {
|
|
42
|
+
this.setSelectedYears();
|
|
43
|
+
this.cdRef.markForCheck();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
get selected() {
|
|
47
|
+
return this._selected;
|
|
48
|
+
}
|
|
49
|
+
set selected(value) {
|
|
50
|
+
const oldSelected = this._selected;
|
|
51
|
+
value = this.dateTimeAdapter.deserialize(value);
|
|
52
|
+
this._selected = this.getValidDate(value);
|
|
53
|
+
if (!this.dateTimeAdapter.isSameDay(oldSelected, this._selected)) {
|
|
54
|
+
this.setSelectedYears();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
get selecteds() {
|
|
58
|
+
return this._selecteds;
|
|
59
|
+
}
|
|
60
|
+
set selecteds(values) {
|
|
61
|
+
this._selecteds = values.map((v) => {
|
|
62
|
+
v = this.dateTimeAdapter.deserialize(v);
|
|
63
|
+
return this.getValidDate(v);
|
|
64
|
+
});
|
|
65
|
+
this.setSelectedYears();
|
|
66
|
+
}
|
|
67
|
+
get pickerMoment() {
|
|
68
|
+
return this._pickerMoment;
|
|
69
|
+
}
|
|
70
|
+
set pickerMoment(value) {
|
|
71
|
+
const oldMoment = this._pickerMoment;
|
|
72
|
+
value = this.dateTimeAdapter.deserialize(value);
|
|
73
|
+
this._pickerMoment = this.getValidDate(value) || this.dateTimeAdapter.now();
|
|
74
|
+
if (oldMoment &&
|
|
75
|
+
this._pickerMoment &&
|
|
76
|
+
!this.isSameYearList(oldMoment, this._pickerMoment)) {
|
|
77
|
+
this.generateYearList();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
get dateFilter() {
|
|
81
|
+
return this._dateFilter;
|
|
82
|
+
}
|
|
83
|
+
set dateFilter(filter) {
|
|
84
|
+
this._dateFilter = filter;
|
|
85
|
+
if (this.initiated) {
|
|
86
|
+
this.generateYearList();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
get minDate() {
|
|
90
|
+
return this._minDate;
|
|
91
|
+
}
|
|
92
|
+
set minDate(value) {
|
|
93
|
+
value = this.dateTimeAdapter.deserialize(value);
|
|
94
|
+
this._minDate = this.getValidDate(value);
|
|
95
|
+
if (this.initiated) {
|
|
96
|
+
this.generateYearList();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
get maxDate() {
|
|
100
|
+
return this._maxDate;
|
|
101
|
+
}
|
|
102
|
+
set maxDate(value) {
|
|
103
|
+
value = this.dateTimeAdapter.deserialize(value);
|
|
104
|
+
this._maxDate = this.getValidDate(value);
|
|
105
|
+
if (this.initiated) {
|
|
106
|
+
this.generateYearList();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
get todayYear() {
|
|
110
|
+
return this._todayYear;
|
|
111
|
+
}
|
|
112
|
+
get years() {
|
|
113
|
+
return this._years;
|
|
114
|
+
}
|
|
115
|
+
get selectedYears() {
|
|
116
|
+
return this._selectedYears;
|
|
117
|
+
}
|
|
118
|
+
get isInSingleMode() {
|
|
119
|
+
return this.selectMode === 'single';
|
|
120
|
+
}
|
|
121
|
+
get isInRangeMode() {
|
|
122
|
+
return (this.selectMode === 'range' ||
|
|
123
|
+
this.selectMode === 'rangeFrom' ||
|
|
124
|
+
this.selectMode === 'rangeTo');
|
|
125
|
+
}
|
|
126
|
+
get activeCell() {
|
|
127
|
+
if (this._pickerMoment) {
|
|
128
|
+
return (this.dateTimeAdapter.getYear(this._pickerMoment) %
|
|
129
|
+
(YEARS_PER_ROW * YEAR_ROWS));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
get tableHeader() {
|
|
133
|
+
if (this._years && this._years.length > 0) {
|
|
134
|
+
return `${this._years[0][0].displayValue} ~ ${this._years[YEAR_ROWS - 1][YEARS_PER_ROW - 1].displayValue}`;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
get prevButtonLabel() {
|
|
138
|
+
return this.pickerIntl.prevMultiYearLabel;
|
|
139
|
+
}
|
|
140
|
+
get nextButtonLabel() {
|
|
141
|
+
return this.pickerIntl.nextMultiYearLabel;
|
|
142
|
+
}
|
|
143
|
+
get owlDTCalendarView() {
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
get owlDTCalendarMultiYearView() {
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
ngOnInit() { }
|
|
150
|
+
ngAfterContentInit() {
|
|
151
|
+
this._todayYear = this.dateTimeAdapter.getYear(this.dateTimeAdapter.now());
|
|
152
|
+
this.generateYearList();
|
|
153
|
+
this.initiated = true;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Handle a calendarCell selected
|
|
157
|
+
*/
|
|
158
|
+
selectCalendarCell(cell) {
|
|
159
|
+
this.selectYear(cell.value);
|
|
160
|
+
}
|
|
161
|
+
selectYear(year) {
|
|
162
|
+
this.yearSelected.emit(this.dateTimeAdapter.createDate(year, 0, 1));
|
|
163
|
+
const firstDateOfMonth = this.dateTimeAdapter.createDate(year, this.dateTimeAdapter.getMonth(this.pickerMoment), 1);
|
|
164
|
+
const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(firstDateOfMonth);
|
|
165
|
+
const selected = this.dateTimeAdapter.createDate(year, this.dateTimeAdapter.getMonth(this.pickerMoment), Math.min(daysInMonth, this.dateTimeAdapter.getDate(this.pickerMoment)), this.dateTimeAdapter.getHours(this.pickerMoment), this.dateTimeAdapter.getMinutes(this.pickerMoment), this.dateTimeAdapter.getSeconds(this.pickerMoment));
|
|
166
|
+
this.change.emit(selected);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Generate the previous year list
|
|
170
|
+
* */
|
|
171
|
+
prevYearList(event) {
|
|
172
|
+
this._pickerMoment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, -1 * YEAR_ROWS * YEARS_PER_ROW);
|
|
173
|
+
this.generateYearList();
|
|
174
|
+
event.preventDefault();
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Generate the next year list
|
|
178
|
+
* */
|
|
179
|
+
nextYearList(event) {
|
|
180
|
+
this._pickerMoment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, YEAR_ROWS * YEARS_PER_ROW);
|
|
181
|
+
this.generateYearList();
|
|
182
|
+
event.preventDefault();
|
|
183
|
+
}
|
|
184
|
+
generateYearList() {
|
|
185
|
+
this._years = [];
|
|
186
|
+
const pickerMomentYear = this.dateTimeAdapter.getYear(this._pickerMoment);
|
|
187
|
+
const offset = pickerMomentYear % (YEARS_PER_ROW * YEAR_ROWS);
|
|
188
|
+
for (let i = 0; i < YEAR_ROWS; i++) {
|
|
189
|
+
const row = [];
|
|
190
|
+
for (let j = 0; j < YEARS_PER_ROW; j++) {
|
|
191
|
+
const year = pickerMomentYear - offset + (j + i * YEARS_PER_ROW);
|
|
192
|
+
const yearCell = this.createYearCell(year);
|
|
193
|
+
row.push(yearCell);
|
|
194
|
+
}
|
|
195
|
+
this._years.push(row);
|
|
196
|
+
}
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
/** Whether the previous period button is enabled. */
|
|
200
|
+
previousEnabled() {
|
|
201
|
+
if (!this.minDate) {
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
return (!this.minDate || !this.isSameYearList(this._pickerMoment, this.minDate));
|
|
205
|
+
}
|
|
206
|
+
/** Whether the next period button is enabled. */
|
|
207
|
+
nextEnabled() {
|
|
208
|
+
return (!this.maxDate || !this.isSameYearList(this._pickerMoment, this.maxDate));
|
|
209
|
+
}
|
|
210
|
+
handleCalendarKeydown(event) {
|
|
211
|
+
let moment;
|
|
212
|
+
switch (event.keyCode) {
|
|
213
|
+
// minus 1 year
|
|
214
|
+
case LEFT_ARROW:
|
|
215
|
+
moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, -1);
|
|
216
|
+
this.pickerMomentChange.emit(moment);
|
|
217
|
+
break;
|
|
218
|
+
// add 1 year
|
|
219
|
+
case RIGHT_ARROW:
|
|
220
|
+
moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, 1);
|
|
221
|
+
this.pickerMomentChange.emit(moment);
|
|
222
|
+
break;
|
|
223
|
+
// minus 3 years
|
|
224
|
+
case UP_ARROW:
|
|
225
|
+
moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, -1 * YEARS_PER_ROW);
|
|
226
|
+
this.pickerMomentChange.emit(moment);
|
|
227
|
+
break;
|
|
228
|
+
// add 3 years
|
|
229
|
+
case DOWN_ARROW:
|
|
230
|
+
moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, YEARS_PER_ROW);
|
|
231
|
+
this.pickerMomentChange.emit(moment);
|
|
232
|
+
break;
|
|
233
|
+
// go to the first year of the year page
|
|
234
|
+
case HOME:
|
|
235
|
+
moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, -this.dateTimeAdapter.getYear(this._pickerMoment) %
|
|
236
|
+
(YEARS_PER_ROW * YEAR_ROWS));
|
|
237
|
+
this.pickerMomentChange.emit(moment);
|
|
238
|
+
break;
|
|
239
|
+
// go to the last year of the year page
|
|
240
|
+
case END:
|
|
241
|
+
moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, YEARS_PER_ROW * YEAR_ROWS -
|
|
242
|
+
(this.dateTimeAdapter.getYear(this._pickerMoment) %
|
|
243
|
+
(YEARS_PER_ROW * YEAR_ROWS)) -
|
|
244
|
+
1);
|
|
245
|
+
this.pickerMomentChange.emit(moment);
|
|
246
|
+
break;
|
|
247
|
+
// minus 1 year page (or 10 year pages)
|
|
248
|
+
case PAGE_UP:
|
|
249
|
+
moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, event.altKey
|
|
250
|
+
? -10 * (YEARS_PER_ROW * YEAR_ROWS)
|
|
251
|
+
: -1 * (YEARS_PER_ROW * YEAR_ROWS));
|
|
252
|
+
this.pickerMomentChange.emit(moment);
|
|
253
|
+
break;
|
|
254
|
+
// add 1 year page (or 10 year pages)
|
|
255
|
+
case PAGE_DOWN:
|
|
256
|
+
moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, event.altKey
|
|
257
|
+
? 10 * (YEARS_PER_ROW * YEAR_ROWS)
|
|
258
|
+
: YEARS_PER_ROW * YEAR_ROWS);
|
|
259
|
+
this.pickerMomentChange.emit(moment);
|
|
260
|
+
break;
|
|
261
|
+
case ENTER:
|
|
262
|
+
this.selectYear(this.dateTimeAdapter.getYear(this._pickerMoment));
|
|
263
|
+
this.keyboardEnter.emit();
|
|
264
|
+
break;
|
|
265
|
+
default:
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
this.focusActiveCell();
|
|
269
|
+
event.preventDefault();
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Creates an CalendarCell for the given year.
|
|
273
|
+
*/
|
|
274
|
+
createYearCell(year) {
|
|
275
|
+
const startDateOfYear = this.dateTimeAdapter.createDate(year, 0, 1);
|
|
276
|
+
const ariaLabel = this.dateTimeAdapter.getYearName(startDateOfYear);
|
|
277
|
+
const cellClass = 'owl-dt-year-' + year;
|
|
278
|
+
return new CalendarCell(year, year.toString(), ariaLabel, this.isYearEnabled(year), false, cellClass);
|
|
279
|
+
}
|
|
280
|
+
setSelectedYears() {
|
|
281
|
+
this._selectedYears = [];
|
|
282
|
+
if (this.isInSingleMode && this.selected) {
|
|
283
|
+
this._selectedYears[0] = this.dateTimeAdapter.getYear(this.selected);
|
|
284
|
+
}
|
|
285
|
+
if (this.isInRangeMode && this.selecteds) {
|
|
286
|
+
this._selectedYears = this.selecteds.map((selected) => {
|
|
287
|
+
if (this.dateTimeAdapter.isValid(selected)) {
|
|
288
|
+
return this.dateTimeAdapter.getYear(selected);
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
return null;
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/** Whether the given year is enabled. */
|
|
297
|
+
isYearEnabled(year) {
|
|
298
|
+
// disable if the year is greater than maxDate lower than minDate
|
|
299
|
+
if (year === undefined ||
|
|
300
|
+
year === null ||
|
|
301
|
+
(this.maxDate && year > this.dateTimeAdapter.getYear(this.maxDate)) ||
|
|
302
|
+
(this.minDate && year < this.dateTimeAdapter.getYear(this.minDate))) {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
// enable if it reaches here and there's no filter defined
|
|
306
|
+
if (!this.dateFilter) {
|
|
307
|
+
return true;
|
|
308
|
+
}
|
|
309
|
+
const firstOfYear = this.dateTimeAdapter.createDate(year, 0, 1);
|
|
310
|
+
// If any date in the year is enabled count the year as enabled.
|
|
311
|
+
for (let date = firstOfYear; this.dateTimeAdapter.getYear(date) === year; date = this.dateTimeAdapter.addCalendarDays(date, 1)) {
|
|
312
|
+
if (this.dateFilter(date)) {
|
|
313
|
+
return true;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
isSameYearList(date1, date2) {
|
|
319
|
+
return (Math.floor(this.dateTimeAdapter.getYear(date1) / (YEARS_PER_ROW * YEAR_ROWS)) ===
|
|
320
|
+
Math.floor(this.dateTimeAdapter.getYear(date2) / (YEARS_PER_ROW * YEAR_ROWS)));
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Get a valid date object
|
|
324
|
+
*/
|
|
325
|
+
getValidDate(obj) {
|
|
326
|
+
return this.dateTimeAdapter.isDateInstance(obj) &&
|
|
327
|
+
this.dateTimeAdapter.isValid(obj)
|
|
328
|
+
? obj
|
|
329
|
+
: null;
|
|
330
|
+
}
|
|
331
|
+
focusActiveCell() {
|
|
332
|
+
this.calendarBodyElm.focusActiveCell();
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
OwlMultiYearViewComponent.decorators = [
|
|
336
|
+
{ type: Component, args: [{
|
|
337
|
+
selector: 'owl-date-time-multi-year-view',
|
|
338
|
+
template: "<button class=\"owl-dt-control-button owl-dt-control-arrow-button\"\n [disabled]=\"!previousEnabled()\" [attr.aria-label]=\"prevButtonLabel\"\n type=\"button\" tabindex=\"0\" (click)=\"prevYearList($event)\">\n <span class=\"owl-dt-control-button-content\" tabindex=\"-1\">\n <!-- <editor-fold desc=\"SVG Arrow Left\"> -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n version=\"1.1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 250.738 250.738\"\n style=\"enable-background:new 0 0 250.738 250.738;\" xml:space=\"preserve\"\n width=\"100%\" height=\"100%\">\n <path style=\"fill-rule: evenodd; clip-rule: evenodd;\" d=\"M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546 c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681 l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z\"/>\n </svg>\n <!-- </editor-fold> -->\n </span>\n</button>\n<table class=\"owl-dt-calendar-table owl-dt-calendar-multi-year-table\">\n <thead class=\"owl-dt-calendar-header\">\n <tr>\n <th colspan=\"3\">{{tableHeader}}</th>\n </tr>\n </thead>\n <tbody owl-date-time-calendar-body role=\"grid\"\n [rows]=\"years\" [numCols]=\"3\" [cellRatio]=\"3 / 7\"\n [activeCell]=\"activeCell\"\n [todayValue]=\"todayYear\"\n [selectedValues]=\"selectedYears\"\n [selectMode]=\"selectMode\"\n (keydown)=\"handleCalendarKeydown($event)\"\n (select)=\"selectCalendarCell($event)\"></tbody>\n</table>\n<button class=\"owl-dt-control-button owl-dt-control-arrow-button\"\n [disabled]=\"!nextEnabled()\" [attr.aria-label]=\"nextButtonLabel\"\n type=\"button\" tabindex=\"0\" (click)=\"nextYearList($event)\">\n <span class=\"owl-dt-control-button-content\" tabindex=\"-1\">\n <!-- <editor-fold desc=\"SVG Arrow Right\"> -->\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n viewBox=\"0 0 250.738 250.738\" style=\"enable-background:new 0 0 250.738 250.738;\" xml:space=\"preserve\">\n <path style=\"fill-rule:evenodd;clip-rule:evenodd;\" d=\"M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\n c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\n c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\n C197.237,120.447,195.534,115.448,191.75,111.689z\"/>\n </svg>\n <!-- </editor-fold> -->\n </span>\n</button>\n",
|
|
339
|
+
host: {
|
|
340
|
+
'[class.owl-dt-calendar-view]': 'owlDTCalendarView',
|
|
341
|
+
'[class.owl-dt-calendar-multi-year-view]': 'owlDTCalendarMultiYearView'
|
|
342
|
+
},
|
|
343
|
+
preserveWhitespaces: false,
|
|
344
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
345
|
+
styles: [""]
|
|
346
|
+
},] }
|
|
347
|
+
];
|
|
348
|
+
OwlMultiYearViewComponent.ctorParameters = () => [
|
|
349
|
+
{ type: ChangeDetectorRef },
|
|
350
|
+
{ type: OwlDateTimeIntl },
|
|
351
|
+
{ type: DateTimeAdapter, decorators: [{ type: Optional }] }
|
|
352
|
+
];
|
|
353
|
+
OwlMultiYearViewComponent.propDecorators = {
|
|
354
|
+
selectMode: [{ type: Input }],
|
|
355
|
+
selected: [{ type: Input }],
|
|
356
|
+
selecteds: [{ type: Input }],
|
|
357
|
+
pickerMoment: [{ type: Input }],
|
|
358
|
+
dateFilter: [{ type: Input }],
|
|
359
|
+
minDate: [{ type: Input }],
|
|
360
|
+
maxDate: [{ type: Input }],
|
|
361
|
+
change: [{ type: Output }],
|
|
362
|
+
yearSelected: [{ type: Output }],
|
|
363
|
+
pickerMomentChange: [{ type: Output }],
|
|
364
|
+
keyboardEnter: [{ type: Output }],
|
|
365
|
+
calendarBodyElm: [{ type: ViewChild, args: [OwlCalendarBodyComponent, { static: true },] }]
|
|
366
|
+
};
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbXVsdGkteWVhci12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1mb3JtZW50cnkvc3JjL2NvbXBvbmVudHMvbmd4LXBpY2stZGF0ZXRpbWUvbGliL2RhdGUtdGltZS9jYWxlbmRhci1tdWx0aS15ZWFyLXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhEQUE4RDtBQUM5RDs7R0FFRztBQUVILE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsWUFBWSxFQUNaLHdCQUF3QixFQUN6QixNQUFNLDJCQUEyQixDQUFDO0FBRW5DLE9BQU8sRUFDTCxVQUFVLEVBQ1YsR0FBRyxFQUNILEtBQUssRUFDTCxJQUFJLEVBQ0osVUFBVSxFQUNWLFNBQVMsRUFDVCxPQUFPLEVBQ1AsV0FBVyxFQUNYLFFBQVEsRUFDVCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFhM0IsTUFBTSxPQUFPLHlCQUF5QjtJQXVNcEMsWUFDVSxLQUF3QixFQUN4QixVQUEyQixFQUNmLGVBQW1DO1FBRi9DLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQWlCO1FBQ2Ysb0JBQWUsR0FBZixlQUFlLENBQW9CO1FBek16RDs7YUFFSztRQUNHLGdCQUFXLEdB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RTtZQUNELElBQUksQ0FBQyxLQUFLLENBQ1IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQ2xFLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNLLFlBQVksQ0FBQyxHQUFRO1FBQzNCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO1lBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNqQyxDQUFDLENBQUMsR0FBRztZQUNMLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pDLENBQUM7OztZQWhmRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLCtCQUErQjtnQkFDekMsa3dGQUF3RDtnQkFFeEQsSUFBSSxFQUFFO29CQUNKLDhCQUE4QixFQUFFLG1CQUFtQjtvQkFDbkQseUNBQXlDLEVBQUUsNEJBQTRCO2lCQUN4RTtnQkFDRCxtQkFBbUIsRUFBRSxLQUFLO2dCQUMxQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7OztZQXpDQyxpQkFBaUI7WUEwQlYsZUFBZTtZQWpCZixlQUFlLHVCQTJPbkIsUUFBUTs7O3lCQXJNVixLQUFLO3VCQWVMLEtBQUs7d0JBZ0JMLEtBQUs7MkJBY0wsS0FBSzt5QkF1QkwsS0FBSztzQkFjTCxLQUFLO3NCQWVMLEtBQUs7cUJBc0VMLE1BQU07MkJBS04sTUFBTTtpQ0FHTixNQUFNOzRCQUtOLE1BQU07OEJBR04sU0FBUyxTQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9uby1ob3N0LW1ldGFkYXRhLXByb3BlcnR5ICovXG4vKipcbiAqIGNhbGVuZGFyLW11bHRpLXllYXItdmlldy5jb21wb25lbnRcbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRlVGltZUFkYXB0ZXIgfSBmcm9tICcuL2FkYXB0ZXIvZGF0ZS10aW1lLWFkYXB0ZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgQ2FsZW5kYXJDZWxsLFxuICBPd2xDYWxlbmRhckJvZHlDb21wb25lbnRcbn0gZnJvbSAnLi9jYWxlbmRhci1ib2R5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RNb2RlIH0gZnJvbSAnLi9kYXRlLXRpbWUuY2xhc3MnO1xuaW1wb3J0IHtcbiAgRE9XTl9BUlJPVyxcbiAgRU5ELFxuICBFTlRFUixcbiAgSE9NRSxcbiAgTEVGVF9BUlJPVyxcbiAgUEFHRV9ET1dOLFxuICBQQUdFX1VQLFxuICBSSUdIVF9BUlJPVyxcbiAgVVBfQVJST1dcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IE93bERhdGVUaW1lSW50bCB9IGZyb20gJy4vZGF0ZS10aW1lLXBpY2tlci1pbnRsLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgWUVBUlNfUEVSX1JPVyA9IDM7XG5leHBvcnQgY29uc3QgWUVBUl9ST1dTID0gNztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb3dsLWRhdGUtdGltZS1tdWx0aS15ZWFyLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItbXVsdGkteWVhci12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXItbXVsdGkteWVhci12aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm93bC1kdC1jYWxlbmRhci12aWV3XSc6ICdvd2xEVENhbGVuZGFyVmlldycsXG4gICAgJ1tjbGFzcy5vd2wtZHQtY2FsZW5kYXItbXVsdGkteWVhci12aWV3XSc6ICdvd2xEVENhbGVuZGFyTXVsdGlZZWFyVmlldydcbiAgfSxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE93bE11bHRpWWVhclZpZXdDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQge1xuICAvKipcbiAgICogVGhlIHNlbGVjdCBtb2RlIG9mIHRoZSBwaWNrZXI7XG4gICAqICovXG4gIHByaXZhdGUgX3NlbGVjdE1vZGU6IFNlbGVjdE1vZGUgPSAnc2luZ2xlJztcbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdE1vZGUoKTogU2VsZWN0TW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdE1vZGU7XG4gIH1cblxuICBzZXQgc2VsZWN0TW9kZSh2YWw6IFNlbGVjdE1vZGUpIHtcbiAgICB0aGlzLl9zZWxlY3RNb2RlID0gdmFsO1xuICAgIGlmICh0aGlzLmluaXRpYXRlZCkge1xuICAgICAgdGhpcy5zZXRTZWxlY3RlZFllYXJzKCk7XG4gICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUuICovXG4gIHByaXZhdGUgX3NlbGVjdGVkOiBUIHwgbnVsbDtcbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdGVkKCk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gIH1cblxuICBzZXQgc2VsZWN0ZWQodmFsdWU6IFQgfCBudWxsKSB7XG4gICAgY29uc3Qgb2xkU2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZDtcbiAgICB2YWx1ZSA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKTtcblxuICAgIGlmICghdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNTYW1lRGF5KG9sZFNlbGVjdGVkLCB0aGlzLl9zZWxlY3RlZCkpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRZZWFycygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdGVkczogVFtdID0gW107XG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3RlZHMoKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRzO1xuICB9XG5cbiAgc2V0IHNlbGVjdGVkcyh2YWx1ZXM6IFRbXSkge1xuICAgIHRoaXMuX3NlbGVjdGVkcyA9IHZhbHVlcy5tYXAoKHYpID0+IHtcbiAgICAgIHYgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2KTtcbiAgICAgIHJldHVybiB0aGlzLmdldFZhbGlkRGF0ZSh2KTtcbiAgICB9KTtcbiAgICB0aGlzLnNldFNlbGVjdGVkWWVhcnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3BpY2tlck1vbWVudDogVCB8IG51bGw7XG4gIEBJbnB1dCgpXG4gIGdldCBwaWNrZXJNb21lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BpY2tlck1vbWVudDtcbiAgfVxuXG4gIHNldCBwaWNrZXJNb21lbnQodmFsdWU6IFQpIHtcbiAgICBjb25zdCBvbGRNb21lbnQgPSB0aGlzLl9waWNrZXJNb21lbnQ7XG4gICAgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgdGhpcy5fcGlja2VyTW9tZW50ID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpIHx8IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLm5vdygpO1xuXG4gICAgaWYgKFxuICAgICAgb2xkTW9tZW50ICYmXG4gICAgICB0aGlzLl9waWNrZXJNb21lbnQgJiZcbiAgICAgICF0aGlzLmlzU2FtZVllYXJMaXN0KG9sZE1vbWVudCwgdGhpcy5fcGlja2VyTW9tZW50KVxuICAgICkge1xuICAgICAgdGhpcy5nZW5lcmF0ZVllYXJMaXN0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdXNlZCB0byBmaWx0ZXIgd2hpY2ggZGF0ZXMgYXJlIHNlbGVjdGFibGVcbiAgICogKi9cbiAgcHJpdmF0ZSBfZGF0ZUZpbHRlcjogKGRhdGU6IFQpID0+IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIGdldCBkYXRlRmlsdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRlRmlsdGVyO1xuICB9XG5cbiAgc2V0IGRhdGVGaWx0ZXIoZmlsdGVyOiAoZGF0ZTogVCkgPT4gYm9vbGVhbikge1xuICAgIHRoaXMuX2RhdGVGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgaWYgKHRoaXMuaW5pdGlhdGVkKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlWWVhckxpc3QoKTtcbiAgICB9XG4gIH1cblxuICAvKiogVGhlIG1pbmltdW0gc2VsZWN0YWJsZSBkYXRlLiAqL1xuICBwcml2YXRlIF9taW5EYXRlOiBUIHwgbnVsbDtcbiAgQElucHV0KClcbiAgZ2V0IG1pbkRhdGUoKTogVCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xuICB9XG5cbiAgc2V0IG1pbkRhdGUodmFsdWU6IFQgfCBudWxsKSB7XG4gICAgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgdGhpcy5fbWluRGF0ZSA9IHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKTtcbiAgICBpZiAodGhpcy5pbml0aWF0ZWQpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVZZWFyTGlzdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgbWF4aW11bSBzZWxlY3RhYmxlIGRhdGUuICovXG4gIHByaXZhdGUgX21heERhdGU6IFQgfCBudWxsO1xuICBASW5wdXQoKVxuICBnZXQgbWF4RGF0ZSgpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21heERhdGU7XG4gIH1cblxuICBzZXQgbWF4RGF0ZSh2YWx1ZTogVCB8IG51bGwpIHtcbiAgICB2YWx1ZSA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICB0aGlzLl9tYXhEYXRlID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpO1xuICAgIGlmICh0aGlzLmluaXRpYXRlZCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZVllYXJMaXN0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdG9kYXlZZWFyOiBudW1iZXI7XG4gIGdldCB0b2RheVllYXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdG9kYXlZZWFyO1xuICB9XG5cbiAgcHJpdmF0ZSBfeWVhcnM6IENhbGVuZGFyQ2VsbFtdW107XG4gIGdldCB5ZWFycygpIHtcbiAgICByZXR1cm4gdGhpcy5feWVhcnM7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RlZFllYXJzOiBudW1iZXJbXTtcbiAgZ2V0IHNlbGVjdGVkWWVhcnMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFllYXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWF0ZWQgPSBmYWxzZTtcblxuICBnZXQgaXNJblNpbmdsZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3NpbmdsZSc7XG4gIH1cblxuICBnZXQgaXNJblJhbmdlTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2UnIHx8XG4gICAgICB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nIHx8XG4gICAgICB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZVRvJ1xuICAgICk7XG4gIH1cblxuICBnZXQgYWN0aXZlQ2VsbCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLl9waWNrZXJNb21lbnQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5fcGlja2VyTW9tZW50KSAlXG4gICAgICAgIChZRUFSU19QRVJfUk9XICogWUVBUl9ST1dTKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdGFibGVIZWFkZXIoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5feWVhcnMgJiYgdGhpcy5feWVhcnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMuX3llYXJzWzBdWzBdLmRpc3BsYXlWYWx1ZX0gfiAke1xuICAgICAgICB0aGlzLl95ZWFyc1tZRUFSX1JPV1MgLSAxXVtZRUFSU19QRVJfUk9XIC0gMV0uZGlzcGxheVZhbHVlXG4gICAgICB9YDtcbiAgICB9XG4gIH1cblxuICBnZXQgcHJldkJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGlja2VySW50bC5wcmV2TXVsdGlZZWFyTGFiZWw7XG4gIH1cblxuICBnZXQgbmV4dEJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGlja2VySW50bC5uZXh0TXVsdGlZZWFyTGFiZWw7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYSBuZXcgbW9udGggaXMgc2VsZWN0ZWRcbiAgICogKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICAvKipcbiAgICogRW1pdHMgdGhlIHNlbGVjdGVkIHllYXIuIFRoaXMgZG9lc24ndCBpbXBseSBhIGNoYW5nZSBvbiB0aGUgc2VsZWN0ZWQgZGF0ZVxuICAgKiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgeWVhclNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gIC8qKiBFbWl0cyB3aGVuIGFueSBkYXRlIGlzIGFjdGl2YXRlZC4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHBpY2tlck1vbWVudENoYW5nZTogRXZlbnRFbWl0dGVyPFQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICBUXG4gID4oKTtcblxuICAvKiogRW1pdHMgd2hlbiB1c2Uga2V5Ym9hcmQgZW50ZXIgdG8gc2VsZWN0IGEgY2FsZW5kYXIgY2VsbCAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkga2V5Ym9hcmRFbnRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKiogVGhlIGJvZHkgb2YgY2FsZW5kYXIgdGFibGUgKi9cbiAgQFZpZXdDaGlsZChPd2xDYWxlbmRhckJvZHlDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGNhbGVuZGFyQm9keUVsbTogT3dsQ2FsZW5kYXJCb2R5Q29tcG9uZW50O1xuXG4gIGdldCBvd2xEVENhbGVuZGFyVmlldygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldCBvd2xEVENhbGVuZGFyTXVsdGlZZWFyVmlldygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcGlja2VySW50bDogT3dsRGF0ZVRpbWVJbnRsLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGF0ZVRpbWVBZGFwdGVyOiBEYXRlVGltZUFkYXB0ZXI8VD5cbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHt9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl90b2RheVllYXIgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLm5vdygpKTtcbiAgICB0aGlzLmdlbmVyYXRlWWVhckxpc3QoKTtcbiAgICB0aGlzLmluaXRpYXRlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGEgY2FsZW5kYXJDZWxsIHNlbGVjdGVkXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0Q2FsZW5kYXJDZWxsKGNlbGw6IENhbGVuZGFyQ2VsbCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0WWVhcihjZWxsLnZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0WWVhcih5ZWFyOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnllYXJTZWxlY3RlZC5lbWl0KHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgMCwgMSkpO1xuICAgIGNvbnN0IGZpcnN0RGF0ZU9mTW9udGggPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgeWVhcixcbiAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKHRoaXMucGlja2VyTW9tZW50KSxcbiAgICAgIDFcbiAgICApO1xuICAgIGNvbnN0IGRheXNJbk1vbnRoID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgoXG4gICAgICBmaXJzdERhdGVPZk1vbnRoXG4gICAgKTtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB5ZWFyLFxuICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5waWNrZXJNb21lbnQpLFxuICAgICAgTWF0aC5taW4oZGF5c0luTW9udGgsIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUodGhpcy5waWNrZXJNb21lbnQpKSxcbiAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldEhvdXJzKHRoaXMucGlja2VyTW9tZW50KSxcbiAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1pbnV0ZXModGhpcy5waWNrZXJNb21lbnQpLFxuICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0U2Vjb25kcyh0aGlzLnBpY2tlck1vbWVudClcbiAgICApO1xuXG4gICAgdGhpcy5jaGFuZ2UuZW1pdChzZWxlY3RlZCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdGhlIHByZXZpb3VzIHllYXIgbGlzdFxuICAgKiAqL1xuICBwdWJsaWMgcHJldlllYXJMaXN0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9waWNrZXJNb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKFxuICAgICAgdGhpcy5waWNrZXJNb21lbnQsXG4gICAgICAtMSAqIFlFQVJfUk9XUyAqIFlFQVJTX1BFUl9ST1dcbiAgICApO1xuICAgIHRoaXMuZ2VuZXJhdGVZZWFyTGlzdCgpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdGhlIG5leHQgeWVhciBsaXN0XG4gICAqICovXG4gIHB1YmxpYyBuZXh0WWVhckxpc3QoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX3BpY2tlck1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyWWVhcnMoXG4gICAgICB0aGlzLnBpY2tlck1vbWVudCxcbiAgICAgIFlFQVJfUk9XUyAqIFlFQVJTX1BFUl9ST1dcbiAgICApO1xuICAgIHRoaXMuZ2VuZXJhdGVZZWFyTGlzdCgpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGVZZWFyTGlzdCgpOiB2b2lkIHtcbiAgICB0aGlzLl95ZWFycyA9IFtdO1xuXG4gICAgY29uc3QgcGlja2VyTW9tZW50WWVhciA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5fcGlja2VyTW9tZW50KTtcbiAgICBjb25zdCBvZmZzZXQgPSBwaWNrZXJNb21lbnRZZWFyICUgKFlFQVJTX1BFUl9ST1cgKiBZRUFSX1JPV1MpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBZRUFSX1JPV1M7IGkrKykge1xuICAgICAgY29uc3Qgcm93ID0gW107XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgWUVBUlNfUEVSX1JPVzsgaisrKSB7XG4gICAgICAgIGNvbnN0IHllYXIgPSBwaWNrZXJNb21lbnRZZWFyIC0gb2Zmc2V0ICsgKGogKyBpICogWUVBUlNfUEVSX1JPVyk7XG4gICAgICAgIGNvbnN0IHllYXJDZWxsID0gdGhpcy5jcmVhdGVZZWFyQ2VsbCh5ZWFyKTtcbiAgICAgICAgcm93LnB1c2goeWVhckNlbGwpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl95ZWFycy5wdXNoKHJvdyk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHByZXZpb3VzIHBlcmlvZCBidXR0b24gaXMgZW5hYmxlZC4gKi9cbiAgcHVibGljIHByZXZpb3VzRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubWluRGF0ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5taW5EYXRlIHx8ICF0aGlzLmlzU2FtZVllYXJMaXN0KHRoaXMuX3BpY2tlck1vbWVudCwgdGhpcy5taW5EYXRlKVxuICAgICk7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgbmV4dCBwZXJpb2QgYnV0dG9uIGlzIGVuYWJsZWQuICovXG4gIHB1YmxpYyBuZXh0RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMubWF4RGF0ZSB8fCAhdGhpcy5pc1NhbWVZZWFyTGlzdCh0aGlzLl9waWNrZXJNb21lbnQsIHRoaXMubWF4RGF0ZSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUNhbGVuZGFyS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGxldCBtb21lbnQ7XG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAvLyBtaW51cyAxIHllYXJcbiAgICAgIGNhc2UgTEVGVF9BUlJPVzpcbiAgICAgICAgbW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyh0aGlzLl9waWNrZXJNb21lbnQsIC0xKTtcbiAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdChtb21lbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgLy8gYWRkIDEgeWVhclxuICAgICAgY2FzZSBSSUdIVF9BUlJPVzpcbiAgICAgICAgbW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyh0aGlzLl9waWNrZXJNb21lbnQsIDEpO1xuICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyBtaW51cyAzIHllYXJzXG4gICAgICBjYXNlIFVQX0FSUk9XOlxuICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKFxuICAgICAgICAgIHRoaXMuX3BpY2tlck1vbWVudCxcbiAgICAgICAgICAtMSAqIFlFQVJTX1BFUl9ST1dcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdChtb21lbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgLy8gYWRkIDMgeWVhcnNcbiAgICAgIGNhc2UgRE9XTl9BUlJPVzpcbiAgICAgICAgbW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyhcbiAgICAgICAgICB0aGlzLl9waWNrZXJNb21lbnQsXG4gICAgICAgICAgWUVBUlNfUEVSX1JPV1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyBnbyB0byB0aGUgZmlyc3QgeWVhciBvZiB0aGUgeWVhciBwYWdlXG4gICAgICBjYXNlIEhPTUU6XG4gICAgICAgIG1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyWWVhcnMoXG4gICAgICAgICAgdGhpcy5fcGlja2VyTW9tZW50LFxuICAgICAgICAgIC10aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMuX3BpY2tlck1vbWVudCkgJVxuICAgICAgICAgICAgKFlFQVJTX1BFUl9ST1cgKiBZRUFSX1JPV1MpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIGdvIHRvIHRoZSBsYXN0IHllYXIgb2YgdGhlIHllYXIgcGFnZVxuICAgICAgY2FzZSBFTkQ6XG4gICAgICAgIG1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyWWVhcnMoXG4gICAgICAgICAgdGhpcy5fcGlja2VyTW9tZW50LFxuICAgICAgICAgIFlFQVJTX1BFUl9ST1cgKiBZRUFSX1JPV1MgLVxuICAgICAgICAgICAgKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5fcGlja2VyTW9tZW50KSAlXG4gICAgICAgICAgICAgIChZRUFSU19QRVJfUk9XICogWUVBUl9ST1dTKSkgLVxuICAgICAgICAgICAgMVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyBtaW51cyAxIHllYXIgcGFnZSAob3IgMTAgeWVhciBwYWdlcylcbiAgICAgIGNhc2UgUEFHRV9VUDpcbiAgICAgICAgbW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyhcbiAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudCxcbiAgICAgICAgICBldmVudC5hbHRLZXlcbiAgICAgICAgICAgID8gLTEwICogKFlFQVJTX1BFUl9ST1cgKiBZRUFSX1JPV1MpXG4gICAgICAgICAgICA6IC0xICogKFlFQVJTX1BFUl9ST1cgKiBZRUFSX1JPV1MpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIGFkZCAxIHllYXIgcGFnZSAob3IgMTAgeWVhciBwYWdlcylcbiAgICAgIGNhc2UgUEFHRV9ET1dOOlxuICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKFxuICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50LFxuICAgICAgICAgIGV2ZW50LmFsdEtleVxuICAgICAgICAgICAgPyAxMCAqIChZRUFSU19QRVJfUk9XICogWUVBUl9ST1dTKVxuICAgICAgICAgICAgOiBZRUFSU19QRVJfUk9XICogWUVBUl9ST1dTXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRU5URVI6XG4gICAgICAgIHRoaXMuc2VsZWN0WWVhcih0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMuX3BpY2tlck1vbWVudCkpO1xuICAgICAgICB0aGlzLmtleWJvYXJkRW50ZXIuZW1pdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZm9jdXNBY3RpdmVDZWxsKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIENhbGVuZGFyQ2VsbCBmb3IgdGhlIGdpdmVuIHllYXIuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZVllYXJDZWxsKHllYXI6IG51bWJlcik6IENhbGVuZGFyQ2VsbCB7XG4gICAgY29uc3Qgc3RhcnREYXRlT2ZZZWFyID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCAwLCAxKTtcbiAgICBjb25zdCBhcmlhTGFiZWwgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyTmFtZShzdGFydERhdGVPZlllYXIpO1xuICAgIGNvbnN0IGNlbGxDbGFzcyA9ICdvd2wtZHQteWVhci0nICsgeWVhcjtcbiAgICByZXR1cm4gbmV3IENhbGVuZGFyQ2VsbChcbiAgICAgIHllYXIsXG4gICAgICB5ZWFyLnRvU3RyaW5nKCksXG4gICAgICBhcmlhTGFiZWwsXG4gICAgICB0aGlzLmlzWWVhckVuYWJsZWQoeWVhciksXG4gICAgICBmYWxzZSxcbiAgICAgIGNlbGxDbGFzc1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldFNlbGVjdGVkWWVhcnMoKTogdm9pZCB7XG4gICAgdGhpcy5fc2VsZWN0ZWRZZWFycyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuaXNJblNpbmdsZU1vZGUgJiYgdGhpcy5zZWxlY3RlZCkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRZZWFyc1swXSA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNJblJhbmdlTW9kZSAmJiB0aGlzLnNlbGVjdGVkcykge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRZZWFycyA9IHRoaXMuc2VsZWN0ZWRzLm1hcCgoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoc2VsZWN0ZWQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoc2VsZWN0ZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZ2l2ZW4geWVhciBpcyBlbmFibGVkLiAqL1xuICBwcml2YXRlIGlzWWVhckVuYWJsZWQoeWVhcjogbnVtYmVyKSB7XG4gICAgLy8gZGlzYWJsZSBpZiB0aGUgeWVhciBpcyBncmVhdGVyIHRoYW4gbWF4RGF0ZSBsb3dlciB0aGFuIG1pbkRhdGVcbiAgICBpZiAoXG4gICAgICB5ZWFyID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHllYXIgPT09IG51bGwgfHxcbiAgICAgICh0aGlzLm1heERhdGUgJiYgeWVhciA+IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5tYXhEYXRlKSkgfHxcbiAgICAgICh0aGlzLm1pbkRhdGUgJiYgeWVhciA8IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5taW5EYXRlKSlcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBlbmFibGUgaWYgaXQgcmVhY2hlcyBoZXJlIGFuZCB0aGVyZSdzIG5vIGZpbHRlciBkZWZpbmVkXG4gICAgaWYgKCF0aGlzLmRhdGVGaWx0ZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0T2ZZZWFyID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCAwLCAxKTtcblxuICAgIC8vIElmIGFueSBkYXRlIGluIHRoZSB5ZWFyIGlzIGVuYWJsZWQgY291bnQgdGhlIHllYXIgYXMgZW5hYmxlZC5cbiAgICBmb3IgKFxuICAgICAgbGV0IGRhdGUgPSBmaXJzdE9mWWVhcjtcbiAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoZGF0ZSkgPT09IHllYXI7XG4gICAgICBkYXRlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKGRhdGUsIDEpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5kYXRlRmlsdGVyKGRhdGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTYW1lWWVhckxpc3QoZGF0ZTE6IFQsIGRhdGUyOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIE1hdGguZmxvb3IoXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoZGF0ZTEpIC8gKFlFQVJTX1BFUl9ST1cgKiBZRUFSX1JPV1MpXG4gICAgICApID09PVxuICAgICAgTWF0aC5mbG9vcihcbiAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcihkYXRlMikgLyAoWUVBUlNfUEVSX1JPVyAqIFlFQVJfUk9XUylcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHZhbGlkIGRhdGUgb2JqZWN0XG4gICAqL1xuICBwcml2YXRlIGdldFZhbGlkRGF0ZShvYmo6IGFueSk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNEYXRlSW5zdGFuY2Uob2JqKSAmJlxuICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChvYmopXG4gICAgICA/IG9ialxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0FjdGl2ZUNlbGwoKSB7XG4gICAgdGhpcy5jYWxlbmRhckJvZHlFbG0uZm9jdXNBY3RpdmVDZWxsKCk7XG4gIH1cbn1cbiJdfQ==
|