@openmrs/ngx-formentry 3.0.0
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 +16104 -0
- package/bundles/openmrs-ngx-formentry.umd.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 +28 -0
- package/components/appointments-overview/appointments-overview.component.d.ts +17 -0
- package/components/check-box/checkbox.component.d.ts +19 -0
- package/components/check-box/checkbox.module.d.ts +9 -0
- package/components/custom-component-wrapper/custom-component-wrapper..module.d.ts +9 -0
- package/components/custom-component-wrapper/custom-component-wrapper.component.d.ts +12 -0
- package/components/custom-control-wrapper/custom-control-wrapper..module.d.ts +10 -0
- package/components/custom-control-wrapper/custom-control-wrapper.component.d.ts +28 -0
- package/components/date-time-picker/date-picker/date-picker.component.d.ts +45 -0
- package/components/date-time-picker/date-time-picker.component.d.ts +28 -0
- package/components/date-time-picker/date-time-picker.module.d.ts +13 -0
- package/components/date-time-picker/index.d.ts +8 -0
- package/components/date-time-picker/picker-modal/modal.component.d.ts +12 -0
- package/components/date-time-picker/pipes/moment.pipe.d.ts +11 -0
- package/components/date-time-picker/time-picker/time-picker.component.d.ts +32 -0
- package/components/file-upload/file-upload.component.d.ts +29 -0
- package/components/file-upload/file-upload.module.d.ts +12 -0
- package/components/file-upload/secure.pipe.d.ts +26 -0
- package/components/input/input.directive.d.ts +31 -0
- package/components/input/input.module.d.ts +11 -0
- package/components/input/label.component.d.ts +90 -0
- package/components/input/text-area.directive.d.ts +24 -0
- package/components/ngx-datetime-picker/ngx-datetime-picker.component.d.ts +21 -0
- package/components/ngx-datetime-picker/ngx-datetime-picker.module.d.ts +11 -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 +12 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar-body.component.d.ts +76 -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 +108 -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 +137 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.d.ts +92 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.d.ts +121 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.d.ts +149 -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 +20 -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 +156 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time.class.d.ts +89 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time.module.d.ts +23 -0
- package/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.d.ts +10 -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 +128 -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 +58 -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 +11 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog.service.d.ts +73 -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 +40 -0
- package/components/ngx-remote-select/ngx-remote-select.module.d.ts +10 -0
- package/components/ngx-tabset/components/ngx-tab-set.component.d.ts +19 -0
- package/components/ngx-tabset/components/tab.component.d.ts +13 -0
- package/components/ngx-tabset/directives/hover-class.directive.d.ts +11 -0
- package/components/ngx-tabset/modules/ngx-tabset.module.d.ts +19 -0
- package/components/number-input/number-input.component.d.ts +151 -0
- package/components/number-input/number-input.module.d.ts +9 -0
- package/components/radio-button/radio.component.d.ts +22 -0
- package/components/radio-button/radio.module.d.ts +9 -0
- package/components/select/optgroup.directive.d.ts +6 -0
- package/components/select/option.directive.d.ts +6 -0
- package/components/select/select.component.d.ts +115 -0
- package/components/select/select.module.d.ts +11 -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 +101 -0
- package/esm2015/components/appointments-overview/appointments-overview.component.js +121 -0
- package/esm2015/components/check-box/checkbox.component.js +90 -0
- package/esm2015/components/check-box/checkbox.module.js +19 -0
- package/esm2015/components/custom-component-wrapper/custom-component-wrapper..module.js +21 -0
- package/esm2015/components/custom-component-wrapper/custom-component-wrapper.component.js +23 -0
- package/esm2015/components/custom-control-wrapper/custom-control-wrapper..module.js +22 -0
- package/esm2015/components/custom-control-wrapper/custom-control-wrapper.component.js +73 -0
- package/esm2015/components/date-time-picker/date-picker/date-picker.component.js +192 -0
- package/esm2015/components/date-time-picker/date-time-picker.component.js +119 -0
- package/esm2015/components/date-time-picker/date-time-picker.module.js +47 -0
- package/esm2015/components/date-time-picker/index.js +9 -0
- package/esm2015/components/date-time-picker/picker-modal/modal.component.js +31 -0
- package/esm2015/components/date-time-picker/pipes/moment.pipe.js +17 -0
- package/esm2015/components/date-time-picker/time-picker/time-picker.component.js +125 -0
- package/esm2015/components/file-upload/file-upload.component.js +122 -0
- package/esm2015/components/file-upload/file-upload.module.js +39 -0
- package/esm2015/components/file-upload/secure.pipe.js +101 -0
- package/esm2015/components/input/input.directive.js +78 -0
- package/esm2015/components/input/input.module.js +23 -0
- package/esm2015/components/input/label.component.js +263 -0
- package/esm2015/components/input/text-area.directive.js +54 -0
- package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.component.js +80 -0
- package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.module.js +38 -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 +347 -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 +39 -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 +445 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.js +378 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.js +373 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar.component.js +348 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.js +265 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.js +399 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.js +614 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.js +62 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.js +70 -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 +528 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.class.js +166 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.module.js +83 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.js +28 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/timer-box.component.js +96 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/timer.component.js +298 -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 +247 -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 +27 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.service.js +233 -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 +135 -0
- package/esm2015/components/ngx-remote-select/ngx-remote-select.module.js +21 -0
- package/esm2015/components/ngx-tabset/components/ngx-tab-set.component.js +76 -0
- package/esm2015/components/ngx-tabset/components/tab.component.js +37 -0
- package/esm2015/components/ngx-tabset/directives/hover-class.directive.js +30 -0
- package/esm2015/components/ngx-tabset/modules/ngx-tabset.module.js +38 -0
- package/esm2015/components/number-input/number-input.component.js +233 -0
- package/esm2015/components/number-input/number-input.module.js +20 -0
- package/esm2015/components/radio-button/radio.component.js +87 -0
- package/esm2015/components/radio-button/radio.module.js +19 -0
- package/esm2015/components/select/optgroup.directive.js +19 -0
- package/esm2015/components/select/option.directive.js +19 -0
- package/esm2015/components/select/select.component.js +187 -0
- package/esm2015/components/select/select.module.js +23 -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 +32 -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 +172 -0
- package/esm2015/form-entry/directives/historical-value.directive.js +67 -0
- package/esm2015/form-entry/error-renderer/error-renderer.component.js +56 -0
- package/esm2015/form-entry/expression-runner/expression-runner.js +170 -0
- package/esm2015/form-entry/form-entry.module.js +187 -0
- package/esm2015/form-entry/form-factory/control-relations.factory.js +238 -0
- package/esm2015/form-entry/form-factory/form-control.service.js +119 -0
- package/esm2015/form-entry/form-factory/form-node.js +96 -0
- package/esm2015/form-entry/form-factory/form.factory.js +141 -0
- package/esm2015/form-entry/form-factory/form.js +189 -0
- package/esm2015/form-entry/form-factory/hiders-disablers.factory.js +67 -0
- package/esm2015/form-entry/form-factory/question.factory.js +942 -0
- package/esm2015/form-entry/form-factory/show-messages.factory.js +31 -0
- package/esm2015/form-entry/form-factory/validation.factory.js +147 -0
- package/esm2015/form-entry/form-renderer/form-renderer.component.js +268 -0
- package/esm2015/form-entry/helpers/historical-expression-helper-service.js +42 -0
- package/esm2015/form-entry/helpers/historical-field-helper-service.js +39 -0
- package/esm2015/form-entry/helpers/js-expression-helper.js +275 -0
- package/esm2015/form-entry/helpers/risk-dataset-table.js +247 -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/radio-button-options.js +2 -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 +13 -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 +26 -0
- package/esm2015/form-entry/question-models/radio-button.model.js +12 -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 +24 -0
- package/esm2015/form-entry/services/form-errors.service.js +21 -0
- package/esm2015/form-entry/services/form-schema-compiler.service.js +248 -0
- package/esm2015/form-entry/services/historical-encounter-data.service.js +172 -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 +171 -0
- package/esm2015/form-entry/value-adapters/obs-adapter-helper.js +512 -0
- package/esm2015/form-entry/value-adapters/obs.adapter.js +542 -0
- package/esm2015/form-entry/value-adapters/order.adapter.js +186 -0
- package/esm2015/form-entry/value-adapters/person-attribute.adapter.js +88 -0
- package/esm2015/form-entry/value-adapters/value.adapter.js +2 -0
- package/esm2015/lib/index.js +58 -0
- package/esm2015/openmrs-ngx-formentry.js +5 -0
- package/esm2015/public_api.js +2 -0
- package/esm2015/shared.module.js +21 -0
- package/fesm2015/openmrs-ngx-formentry.js +14323 -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 +10 -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 +45 -0
- package/form-entry/directives/historical-value.directive.d.ts +16 -0
- package/form-entry/error-renderer/error-renderer.component.d.ts +18 -0
- package/form-entry/expression-runner/expression-runner.d.ts +18 -0
- package/form-entry/form-entry.module.d.ts +30 -0
- package/form-entry/form-factory/control-relations.factory.d.ts +18 -0
- package/form-entry/form-factory/form-control.service.d.ts +25 -0
- package/form-entry/form-factory/form-node.d.ts +52 -0
- package/form-entry/form-factory/form.d.ts +28 -0
- package/form-entry/form-factory/form.factory.d.ts +27 -0
- package/form-entry/form-factory/hiders-disablers.factory.d.ts +20 -0
- package/form-entry/form-factory/question.factory.d.ts +62 -0
- package/form-entry/form-factory/show-messages.factory.d.ts +15 -0
- package/form-entry/form-factory/validation.factory.d.ts +25 -0
- package/form-entry/form-renderer/form-renderer.component.d.ts +63 -0
- package/form-entry/helpers/historical-expression-helper-service.d.ts +8 -0
- package/form-entry/helpers/historical-field-helper-service.d.ts +7 -0
- package/form-entry/helpers/js-expression-helper.d.ts +37 -0
- package/form-entry/helpers/risk-dataset-table.d.ts +1 -0
- package/form-entry/pipes/time-ago.pipe.d.ts +14 -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 +30 -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/radio-button-options.d.ts +8 -0
- package/form-entry/question-models/interfaces/repeating-question-options.d.ts +7 -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 +16 -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 +45 -0
- package/form-entry/question-models/radio-button.model.d.ts +7 -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 +8 -0
- package/form-entry/services/form-errors.service.d.ts +13 -0
- package/form-entry/services/form-schema-compiler.service.d.ts +23 -0
- package/form-entry/services/historical-encounter-data.service.d.ts +15 -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 +26 -0
- package/form-entry/value-adapters/obs-adapter-helper.d.ts +34 -0
- package/form-entry/value-adapters/obs.adapter.d.ts +38 -0
- package/form-entry/value-adapters/order.adapter.d.ts +20 -0
- package/form-entry/value-adapters/person-attribute.adapter.d.ts +15 -0
- package/form-entry/value-adapters/value.adapter.d.ts +5 -0
- package/lib/index.d.ts +58 -0
- package/openmrs-ngx-formentry.d.ts +5 -0
- package/package.json +34 -0
- package/public_api.d.ts +1 -0
- package/shared.module.d.ts +9 -0
- package/styles/ngx-formentry.css +374 -0
- package/styles/picker.min.css +770 -0
package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.js
ADDED
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* native-date-time-adapter.class
|
|
3
|
+
*/
|
|
4
|
+
import { Inject, Injectable, Optional } from '@angular/core';
|
|
5
|
+
import { Platform } from '@angular/cdk/platform';
|
|
6
|
+
import { DateTimeAdapter, OWL_DATE_TIME_LOCALE } from './date-time-adapter.class';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/cdk/platform";
|
|
9
|
+
/** The default month names to use if Intl API is not available. */
|
|
10
|
+
const DEFAULT_MONTH_NAMES = {
|
|
11
|
+
long: [
|
|
12
|
+
'January',
|
|
13
|
+
'February',
|
|
14
|
+
'March',
|
|
15
|
+
'April',
|
|
16
|
+
'May',
|
|
17
|
+
'June',
|
|
18
|
+
'July',
|
|
19
|
+
'August',
|
|
20
|
+
'September',
|
|
21
|
+
'October',
|
|
22
|
+
'November',
|
|
23
|
+
'December'
|
|
24
|
+
],
|
|
25
|
+
short: [
|
|
26
|
+
'Jan',
|
|
27
|
+
'Feb',
|
|
28
|
+
'Mar',
|
|
29
|
+
'Apr',
|
|
30
|
+
'May',
|
|
31
|
+
'Jun',
|
|
32
|
+
'Jul',
|
|
33
|
+
'Aug',
|
|
34
|
+
'Sep',
|
|
35
|
+
'Oct',
|
|
36
|
+
'Nov',
|
|
37
|
+
'Dec'
|
|
38
|
+
],
|
|
39
|
+
narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']
|
|
40
|
+
};
|
|
41
|
+
/** The default day of the week names to use if Intl API is not available. */
|
|
42
|
+
const DEFAULT_DAY_OF_WEEK_NAMES = {
|
|
43
|
+
long: [
|
|
44
|
+
'Sunday',
|
|
45
|
+
'Monday',
|
|
46
|
+
'Tuesday',
|
|
47
|
+
'Wednesday',
|
|
48
|
+
'Thursday',
|
|
49
|
+
'Friday',
|
|
50
|
+
'Saturday'
|
|
51
|
+
],
|
|
52
|
+
short: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
|
|
53
|
+
narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S']
|
|
54
|
+
};
|
|
55
|
+
/** The default date names to use if Intl API is not available. */
|
|
56
|
+
const DEFAULT_DATE_NAMES = range(31, (i) => String(i + 1));
|
|
57
|
+
/** Whether the browser supports the Intl API. */
|
|
58
|
+
const SUPPORTS_INTL_API = typeof Intl !== 'undefined';
|
|
59
|
+
/**
|
|
60
|
+
* Matches strings that have the form of a valid RFC 3339 string
|
|
61
|
+
* (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date
|
|
62
|
+
* because the regex will match strings an with out of bounds month, date, etc.
|
|
63
|
+
*/
|
|
64
|
+
const ISO_8601_REGEX = /^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|(?:(?:\+|-)\d{2}:\d{2}))?)?$/;
|
|
65
|
+
/** Creates an array and fills it with values. */
|
|
66
|
+
function range(length, valueFunction) {
|
|
67
|
+
const valuesArray = Array(length);
|
|
68
|
+
for (let i = 0; i < length; i++) {
|
|
69
|
+
valuesArray[i] = valueFunction(i);
|
|
70
|
+
}
|
|
71
|
+
return valuesArray;
|
|
72
|
+
}
|
|
73
|
+
export class NativeDateTimeAdapter extends DateTimeAdapter {
|
|
74
|
+
constructor(owlDateTimeLocale, platform) {
|
|
75
|
+
super();
|
|
76
|
+
this.owlDateTimeLocale = owlDateTimeLocale;
|
|
77
|
+
super.setLocale(owlDateTimeLocale);
|
|
78
|
+
// IE does its own time zone correction, so we disable this on IE.
|
|
79
|
+
this.useUtcForDisplay = !platform.TRIDENT;
|
|
80
|
+
this._clampDate = platform.TRIDENT || platform.EDGE;
|
|
81
|
+
}
|
|
82
|
+
getYear(date) {
|
|
83
|
+
return date.getFullYear();
|
|
84
|
+
}
|
|
85
|
+
getMonth(date) {
|
|
86
|
+
return date.getMonth();
|
|
87
|
+
}
|
|
88
|
+
getDay(date) {
|
|
89
|
+
return date.getDay();
|
|
90
|
+
}
|
|
91
|
+
getDate(date) {
|
|
92
|
+
return date.getDate();
|
|
93
|
+
}
|
|
94
|
+
getHours(date) {
|
|
95
|
+
return date.getHours();
|
|
96
|
+
}
|
|
97
|
+
getMinutes(date) {
|
|
98
|
+
return date.getMinutes();
|
|
99
|
+
}
|
|
100
|
+
getSeconds(date) {
|
|
101
|
+
return date.getSeconds();
|
|
102
|
+
}
|
|
103
|
+
getTime(date) {
|
|
104
|
+
return date.getTime();
|
|
105
|
+
}
|
|
106
|
+
getNumDaysInMonth(date) {
|
|
107
|
+
const lastDateOfMonth = this.createDateWithOverflow(this.getYear(date), this.getMonth(date) + 1, 0);
|
|
108
|
+
return this.getDate(lastDateOfMonth);
|
|
109
|
+
}
|
|
110
|
+
differenceInCalendarDays(dateLeft, dateRight) {
|
|
111
|
+
if (this.isValid(dateLeft) && this.isValid(dateRight)) {
|
|
112
|
+
const dateLeftStartOfDay = this.createDate(this.getYear(dateLeft), this.getMonth(dateLeft), this.getDate(dateLeft));
|
|
113
|
+
const dateRightStartOfDay = this.createDate(this.getYear(dateRight), this.getMonth(dateRight), this.getDate(dateRight));
|
|
114
|
+
const timeStampLeft = this.getTime(dateLeftStartOfDay) -
|
|
115
|
+
dateLeftStartOfDay.getTimezoneOffset() * this.milliseondsInMinute;
|
|
116
|
+
const timeStampRight = this.getTime(dateRightStartOfDay) -
|
|
117
|
+
dateRightStartOfDay.getTimezoneOffset() * this.milliseondsInMinute;
|
|
118
|
+
return Math.round((timeStampLeft - timeStampRight) / this.millisecondsInDay);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
getYearName(date) {
|
|
125
|
+
if (SUPPORTS_INTL_API) {
|
|
126
|
+
const dtf = new Intl.DateTimeFormat(this.locale, {
|
|
127
|
+
year: 'numeric',
|
|
128
|
+
timeZone: 'utc'
|
|
129
|
+
});
|
|
130
|
+
return this.stripDirectionalityCharacters(this._format(dtf, date));
|
|
131
|
+
}
|
|
132
|
+
return String(this.getYear(date));
|
|
133
|
+
}
|
|
134
|
+
getMonthNames(style) {
|
|
135
|
+
if (SUPPORTS_INTL_API) {
|
|
136
|
+
const dtf = new Intl.DateTimeFormat(this.locale, {
|
|
137
|
+
month: style,
|
|
138
|
+
timeZone: 'utc'
|
|
139
|
+
});
|
|
140
|
+
return range(12, (i) => this.stripDirectionalityCharacters(this._format(dtf, new Date(2017, i, 1))));
|
|
141
|
+
}
|
|
142
|
+
return DEFAULT_MONTH_NAMES[style];
|
|
143
|
+
}
|
|
144
|
+
getDayOfWeekNames(style) {
|
|
145
|
+
if (SUPPORTS_INTL_API) {
|
|
146
|
+
const dtf = new Intl.DateTimeFormat(this.locale, {
|
|
147
|
+
weekday: style,
|
|
148
|
+
timeZone: 'utc'
|
|
149
|
+
});
|
|
150
|
+
return range(7, (i) => this.stripDirectionalityCharacters(this._format(dtf, new Date(2017, 0, i + 1))));
|
|
151
|
+
}
|
|
152
|
+
return DEFAULT_DAY_OF_WEEK_NAMES[style];
|
|
153
|
+
}
|
|
154
|
+
getDateNames() {
|
|
155
|
+
if (SUPPORTS_INTL_API) {
|
|
156
|
+
const dtf = new Intl.DateTimeFormat(this.locale, {
|
|
157
|
+
day: 'numeric',
|
|
158
|
+
timeZone: 'utc'
|
|
159
|
+
});
|
|
160
|
+
return range(31, (i) => this.stripDirectionalityCharacters(this._format(dtf, new Date(2017, 0, i + 1))));
|
|
161
|
+
}
|
|
162
|
+
return DEFAULT_DATE_NAMES;
|
|
163
|
+
}
|
|
164
|
+
toIso8601(date) {
|
|
165
|
+
return date.toISOString();
|
|
166
|
+
}
|
|
167
|
+
isEqual(dateLeft, dateRight) {
|
|
168
|
+
if (this.isValid(dateLeft) && this.isValid(dateRight)) {
|
|
169
|
+
return dateLeft.getTime() === dateRight.getTime();
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
isSameDay(dateLeft, dateRight) {
|
|
176
|
+
if (this.isValid(dateLeft) && this.isValid(dateRight)) {
|
|
177
|
+
const dateLeftStartOfDay = this.clone(dateLeft);
|
|
178
|
+
const dateRightStartOfDay = this.clone(dateRight);
|
|
179
|
+
dateLeftStartOfDay.setHours(0, 0, 0, 0);
|
|
180
|
+
dateRightStartOfDay.setHours(0, 0, 0, 0);
|
|
181
|
+
return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
isValid(date) {
|
|
188
|
+
return date && !isNaN(date.getTime());
|
|
189
|
+
}
|
|
190
|
+
invalid() {
|
|
191
|
+
return new Date(NaN);
|
|
192
|
+
}
|
|
193
|
+
isDateInstance(obj) {
|
|
194
|
+
return obj instanceof Date;
|
|
195
|
+
}
|
|
196
|
+
addCalendarYears(date, amount) {
|
|
197
|
+
return this.addCalendarMonths(date, amount * 12);
|
|
198
|
+
}
|
|
199
|
+
addCalendarMonths(date, amount) {
|
|
200
|
+
const result = this.clone(date);
|
|
201
|
+
amount = Number(amount);
|
|
202
|
+
const desiredMonth = result.getMonth() + amount;
|
|
203
|
+
const dateWithDesiredMonth = new Date(0);
|
|
204
|
+
dateWithDesiredMonth.setFullYear(result.getFullYear(), desiredMonth, 1);
|
|
205
|
+
dateWithDesiredMonth.setHours(0, 0, 0, 0);
|
|
206
|
+
const daysInMonth = this.getNumDaysInMonth(dateWithDesiredMonth);
|
|
207
|
+
// Set the last day of the new month
|
|
208
|
+
// if the original date was the last day of the longer month
|
|
209
|
+
result.setMonth(desiredMonth, Math.min(daysInMonth, result.getDate()));
|
|
210
|
+
return result;
|
|
211
|
+
}
|
|
212
|
+
addCalendarDays(date, amount) {
|
|
213
|
+
const result = this.clone(date);
|
|
214
|
+
amount = Number(amount);
|
|
215
|
+
result.setDate(result.getDate() + amount);
|
|
216
|
+
return result;
|
|
217
|
+
}
|
|
218
|
+
setHours(date, amount) {
|
|
219
|
+
const result = this.clone(date);
|
|
220
|
+
result.setHours(amount);
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
223
|
+
setMinutes(date, amount) {
|
|
224
|
+
const result = this.clone(date);
|
|
225
|
+
result.setMinutes(amount);
|
|
226
|
+
return result;
|
|
227
|
+
}
|
|
228
|
+
setSeconds(date, amount) {
|
|
229
|
+
const result = this.clone(date);
|
|
230
|
+
result.setSeconds(amount);
|
|
231
|
+
return result;
|
|
232
|
+
}
|
|
233
|
+
createDate(year, month, date, hours = 0, minutes = 0, seconds = 0) {
|
|
234
|
+
if (month < 0 || month > 11) {
|
|
235
|
+
throw Error(`Invalid month index "${month}". Month index has to be between 0 and 11.`);
|
|
236
|
+
}
|
|
237
|
+
if (date < 1) {
|
|
238
|
+
throw Error(`Invalid date "${date}". Date has to be greater than 0.`);
|
|
239
|
+
}
|
|
240
|
+
if (hours < 0 || hours > 23) {
|
|
241
|
+
throw Error(`Invalid hours "${hours}". Hours has to be between 0 and 23.`);
|
|
242
|
+
}
|
|
243
|
+
if (minutes < 0 || minutes > 59) {
|
|
244
|
+
throw Error(`Invalid minutes "${minutes}". Minutes has to between 0 and 59.`);
|
|
245
|
+
}
|
|
246
|
+
if (seconds < 0 || seconds > 59) {
|
|
247
|
+
throw Error(`Invalid seconds "${seconds}". Seconds has to be between 0 and 59.`);
|
|
248
|
+
}
|
|
249
|
+
const result = this.createDateWithOverflow(year, month, date, hours, minutes, seconds);
|
|
250
|
+
// Check that the date wasn't above the upper bound for the month, causing the month to overflow
|
|
251
|
+
// For example, createDate(2017, 1, 31) would try to create a date 2017/02/31 which is invalid
|
|
252
|
+
if (result.getMonth() !== month) {
|
|
253
|
+
throw Error(`Invalid date "${date}" for month with index "${month}".`);
|
|
254
|
+
}
|
|
255
|
+
return result;
|
|
256
|
+
}
|
|
257
|
+
clone(date) {
|
|
258
|
+
return this.createDate(this.getYear(date), this.getMonth(date), this.getDate(date), this.getHours(date), this.getMinutes(date), this.getSeconds(date));
|
|
259
|
+
}
|
|
260
|
+
now() {
|
|
261
|
+
return new Date();
|
|
262
|
+
}
|
|
263
|
+
format(date, displayFormat) {
|
|
264
|
+
if (!this.isValid(date)) {
|
|
265
|
+
throw Error('JSNativeDate: Cannot format invalid date.');
|
|
266
|
+
}
|
|
267
|
+
if (SUPPORTS_INTL_API) {
|
|
268
|
+
if (this._clampDate &&
|
|
269
|
+
(date.getFullYear() < 1 || date.getFullYear() > 9999)) {
|
|
270
|
+
date = this.clone(date);
|
|
271
|
+
date.setFullYear(Math.max(1, Math.min(9999, date.getFullYear())));
|
|
272
|
+
}
|
|
273
|
+
displayFormat = Object.assign(Object.assign({}, displayFormat), { timeZone: 'utc' });
|
|
274
|
+
const dtf = new Intl.DateTimeFormat(this.locale, displayFormat);
|
|
275
|
+
return this.stripDirectionalityCharacters(this._format(dtf, date));
|
|
276
|
+
}
|
|
277
|
+
return this.stripDirectionalityCharacters(date.toDateString());
|
|
278
|
+
}
|
|
279
|
+
parse(value, parseFormat) {
|
|
280
|
+
// There is no way using the native JS Date to set the parse format or locale
|
|
281
|
+
if (typeof value === 'number') {
|
|
282
|
+
return new Date(value);
|
|
283
|
+
}
|
|
284
|
+
return value ? new Date(Date.parse(value)) : null;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings
|
|
288
|
+
* (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an
|
|
289
|
+
* invalid date for all other values.
|
|
290
|
+
*/
|
|
291
|
+
deserialize(value) {
|
|
292
|
+
if (typeof value === 'string') {
|
|
293
|
+
if (!value) {
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
// The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the
|
|
297
|
+
// string is the right format first.
|
|
298
|
+
if (ISO_8601_REGEX.test(value)) {
|
|
299
|
+
const date = new Date(value);
|
|
300
|
+
if (this.isValid(date)) {
|
|
301
|
+
return date;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return super.deserialize(value);
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Creates a date but allows the month and date to overflow.
|
|
309
|
+
*/
|
|
310
|
+
createDateWithOverflow(year, month, date, hours = 0, minutes = 0, seconds = 0) {
|
|
311
|
+
const result = new Date(year, month, date, hours, minutes, seconds);
|
|
312
|
+
if (year >= 0 && year < 100) {
|
|
313
|
+
result.setFullYear(this.getYear(result) - 1900);
|
|
314
|
+
}
|
|
315
|
+
return result;
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while
|
|
319
|
+
* other browsers do not. We remove them to make output consistent and because they interfere with
|
|
320
|
+
* date parsing.
|
|
321
|
+
*/
|
|
322
|
+
stripDirectionalityCharacters(str) {
|
|
323
|
+
return str.replace(/[\u200e\u200f]/g, '');
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* When converting Date object to string, javascript built-in functions may return wrong
|
|
327
|
+
* results because it applies its internal DST rules. The DST rules around the world change
|
|
328
|
+
* very frequently, and the current valid rule is not always valid in previous years though.
|
|
329
|
+
* We work around this problem building a new Date object which has its internal UTC
|
|
330
|
+
* representation with the local date and time.
|
|
331
|
+
*/
|
|
332
|
+
_format(dtf, date) {
|
|
333
|
+
const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));
|
|
334
|
+
return dtf.format(d);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
NativeDateTimeAdapter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NativeDateTimeAdapter, deps: [{ token: OWL_DATE_TIME_LOCALE, optional: true }, { token: i1.Platform }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
338
|
+
NativeDateTimeAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NativeDateTimeAdapter });
|
|
339
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NativeDateTimeAdapter, decorators: [{
|
|
340
|
+
type: Injectable
|
|
341
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
342
|
+
type: Optional
|
|
343
|
+
}, {
|
|
344
|
+
type: Inject,
|
|
345
|
+
args: [OWL_DATE_TIME_LOCALE]
|
|
346
|
+
}] }, { type: i1.Platform }]; } });
|
|
347
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWRhdGUtdGltZS1hZGFwdGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm1lbnRyeS9zcmMvY29tcG9uZW50cy9uZ3gtcGljay1kYXRldGltZS9saWIvZGF0ZS10aW1lL2FkYXB0ZXIvbmF0aXZlLWRhdGUtdGltZS1hZGFwdGVyLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLG9CQUFvQixFQUNyQixNQUFNLDJCQUEyQixDQUFDOzs7QUFFbkMsbUVBQW1FO0FBQ25FLE1BQU0sbUJBQW1CLEdBQUc7SUFDMUIsSUFBSSxFQUFFO1FBQ0osU0FBUztRQUNULFVBQVU7UUFDVixPQUFPO1FBQ1AsT0FBTztRQUNQLEtBQUs7UUFDTCxNQUFNO1FBQ04sTUFBTTtRQUNOLFFBQVE7UUFDUixXQUFXO1FBQ1gsU0FBUztRQUNULFVBQVU7UUFDVixVQUFVO0tBQ1g7SUFDRCxLQUFLLEVBQUU7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7S0FDTjtJQUNELE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0NBQ3JFLENBQUM7QUFFRiw2RUFBNkU7QUFD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QUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsQ0FBQzs7bUhBbFpVLHFCQUFxQixrQkFjdEIsb0JBQW9CO3VIQWRuQixxQkFBcUI7NEZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVTs7MEJBY04sUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG5hdGl2ZS1kYXRlLXRpbWUtYWRhcHRlci5jbGFzc1xuICovXG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIERhdGVUaW1lQWRhcHRlcixcbiAgT1dMX0RBVEVfVElNRV9MT0NBTEVcbn0gZnJvbSAnLi9kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5cbi8qKiBUaGUgZGVmYXVsdCBtb250aCBuYW1lcyB0byB1c2UgaWYgSW50bCBBUEkgaXMgbm90IGF2YWlsYWJsZS4gKi9cbmNvbnN0IERFRkFVTFRfTU9OVEhfTkFNRVMgPSB7XG4gIGxvbmc6IFtcbiAgICAnSmFudWFyeScsXG4gICAgJ0ZlYnJ1YXJ5JyxcbiAgICAnTWFyY2gnLFxuICAgICdBcHJpbCcsXG4gICAgJ01heScsXG4gICAgJ0p1bmUnLFxuICAgICdKdWx5JyxcbiAgICAnQXVndXN0JyxcbiAgICAnU2VwdGVtYmVyJyxcbiAgICAnT2N0b2JlcicsXG4gICAgJ05vdmVtYmVyJyxcbiAgICAnRGVjZW1iZXInXG4gIF0sXG4gIHNob3J0OiBbXG4gICAgJ0phbicsXG4gICAgJ0ZlYicsXG4gICAgJ01hcicsXG4gICAgJ0FwcicsXG4gICAgJ01heScsXG4gICAgJ0p1bicsXG4gICAgJ0p1bCcsXG4gICAgJ0F1ZycsXG4gICAgJ1NlcCcsXG4gICAgJ09jdCcsXG4gICAgJ05vdicsXG4gICAgJ0RlYydcbiAgXSxcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ11cbn07XG5cbi8qKiBUaGUgZGVmYXVsdCBkYXkgb2YgdGhlIHdlZWsgbmFtZXMgdG8gdXNlIGlmIEludGwgQVBJIGlzIG5vdCBhdmFpbGFibGUuICovXG5jb25zdCBERUZBVUxUX0RBWV9PRl9XRUVLX05BTUVTID0ge1xuICBsb25nOiBbXG4gICAgJ1N1bmRheScsXG4gICAgJ01vbmRheScsXG4gICAgJ1R1ZXNkYXknLFxuICAgICdXZWRuZXNkYXknLFxuICAgICdUaHVyc2RheScsXG4gICAgJ0ZyaWRheScsXG4gICAgJ1NhdHVyZGF5J1xuICBdLFxuICBzaG9ydDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSxcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXVxufTtcblxuLyoqIFRoZSBkZWZhdWx0IGRhdGUgbmFtZXMgdG8gdXNlIGlmIEludGwgQVBJIGlzIG5vdCBhdmFpbGFibGUuICovXG5jb25zdCBERUZBVUxUX0RBVEVfTkFNRVMgPSByYW5nZSgzMSwgKGkpID0+IFN0cmluZyhpICsgMSkpO1xuXG4vKiogV2hldGhlciB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGUgSW50bCBBUEkuICovXG5jb25zdCBTVVBQT1JUU19JTlRMX0FQSSA9IHR5cGVvZiBJbnRsICE9PSAndW5kZWZpbmVkJztcblxuLyoqXG4gKiBNYXRjaGVzIHN0cmluZ3MgdGhhdCBoYXZlIHRoZSBmb3JtIG9mIGEgdmFsaWQgUkZDIDMzMzkgc3RyaW5nXG4gKiAoaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkpLiBOb3RlIHRoYXQgdGhlIHN0cmluZyBtYXkgbm90IGFjdHVhbGx5IGJlIGEgdmFsaWQgZGF0ZVxuICogYmVjYXVzZSB0aGUgcmVnZXggd2lsbCBtYXRjaCBzdHJpbmdzIGFuIHdpdGggb3V0IG9mIGJvdW5kcyBtb250aCwgZGF0ZSwgZXRjLlxuICovXG5jb25zdCBJU09fODYwMV9SRUdFWCA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0oPzpUXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGQrKT8oPzpafCg/Oig/OlxcK3wtKVxcZHsyfTpcXGR7Mn0pKT8pPyQvO1xuXG4vKiogQ3JlYXRlcyBhbiBhcnJheSBhbmQgZmlsbHMgaXQgd2l0aCB2YWx1ZXMuICovXG5mdW5jdGlvbiByYW5nZTxUPihsZW5ndGg6IG51bWJlciwgdmFsdWVGdW5jdGlvbjogKGluZGV4OiBudW1iZXIpID0+IFQpOiBUW10ge1xuICBjb25zdCB2YWx1ZXNBcnJheSA9IEFycmF5KGxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YWx1ZXNBcnJheVtpXSA9IHZhbHVlRnVuY3Rpb24oaSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlc0FycmF5O1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyIGV4dGVuZHMgRGF0ZVRpbWVBZGFwdGVyPERhdGU+IHtcbiAgLyoqIFdoZXRoZXIgdG8gY2xhbXAgdGhlIGRhdGUgYmV0d2VlbiAxIGFuZCA5OTk5IHRvIGF2b2lkIElFIGFuZCBFZGdlIGVycm9ycy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfY2xhbXBEYXRlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVzZSBgdGltZVpvbmU6ICd1dGMnYCB3aXRoIGBJbnRsLkRhdGVUaW1lRm9ybWF0YCB3aGVuIGZvcm1hdHRpbmcgZGF0ZXMuXG4gICAqIFdpdGhvdXQgdGhpcyBgSW50bC5EYXRlVGltZUZvcm1hdGAgc29tZXRpbWVzIGNob29zZXMgdGhlIHdyb25nIHRpbWVab25lLCB3aGljaCBjYW4gdGhyb3cgb2ZmXG4gICAqIHRoZSByZXN1bHQuIChlLmcuIGluIHRoZSBlbi1VUyBsb2NhbGUgYG5ldyBEYXRlKDE4MDAsIDcsIDE0KS50b0xvY2FsZURhdGVTdHJpbmcoKWBcbiAgICogd2lsbCBwcm9kdWNlIGAnOC8xMy8xODAwJ2AuXG4gICAqL1xuICB1c2VVdGNGb3JEaXNwbGF5OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChPV0xfREFURV9USU1FX0xPQ0FMRSlcbiAgICBwcml2YXRlIG93bERhdGVUaW1lTG9jYWxlOiBzdHJpbmcsXG4gICAgcGxhdGZvcm06IFBsYXRmb3JtXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgc3VwZXIuc2V0TG9jYWxlKG93bERhdGVUaW1lTG9jYWxlKTtcblxuICAgIC8vIElFIGRvZXMgaXRzIG93biB0aW1lIHpvbmUgY29ycmVjdGlvbiwgc28gd2UgZGlzYWJsZSB0aGlzIG9uIElFLlxuICAgIHRoaXMudXNlVXRjRm9yRGlzcGxheSA9ICFwbGF0Zm9ybS5UUklERU5UO1xuICAgIHRoaXMuX2NsYW1wRGF0ZSA9IHBsYXRmb3JtLlRSSURFTlQgfHwgcGxhdGZvcm0uRURHRTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRZZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TW9udGgoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXkoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGRhdGUuZ2V0RGF5KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0ZShkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZGF0ZS5nZXREYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SG91cnMoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNaW51dGVzKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBkYXRlLmdldE1pbnV0ZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWNvbmRzKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBkYXRlLmdldFNlY29uZHMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUaW1lKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBkYXRlLmdldFRpbWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROdW1EYXlzSW5Nb250aChkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICBjb25zdCBsYXN0RGF0ZU9mTW9udGggPSB0aGlzLmNyZWF0ZURhdGVXaXRoT3ZlcmZsb3coXG4gICAgICB0aGlzLmdldFllYXIoZGF0ZSksXG4gICAgICB0aGlzLmdldE1vbnRoKGRhdGUpICsgMSxcbiAgICAgIDBcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZShsYXN0RGF0ZU9mTW9udGgpO1xuICB9XG5cbiAgcHVibGljIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhkYXRlTGVmdDogRGF0ZSwgZGF0ZVJpZ2h0OiBEYXRlKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKGRhdGVMZWZ0KSAmJiB0aGlzLmlzVmFsaWQoZGF0ZVJpZ2h0KSkge1xuICAgICAgY29uc3QgZGF0ZUxlZnRTdGFydE9mRGF5ID0gdGhpcy5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLmdldFllYXIoZGF0ZUxlZnQpLFxuICAgICAgICB0aGlzLmdldE1vbnRoKGRhdGVMZWZ0KSxcbiAgICAgICAgdGhpcy5nZXREYXRlKGRhdGVMZWZ0KVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRhdGVSaWdodFN0YXJ0T2ZEYXkgPSB0aGlzLmNyZWF0ZURhdGUoXG4gICAgICAgIHRoaXMuZ2V0WWVhcihkYXRlUmlnaHQpLFxuICAgICAgICB0aGlzLmdldE1vbnRoKGRhdGVSaWdodCksXG4gICAgICAgIHRoaXMuZ2V0RGF0ZShkYXRlUmlnaHQpXG4gICAgICApO1xuXG4gICAgICBjb25zdCB0aW1lU3RhbXBMZWZ0ID1cbiAgICAgICAgdGhpcy5nZXRUaW1lKGRhdGVMZWZ0U3RhcnRPZkRheSkgLVxuICAgICAgICBkYXRlTGVmdFN0YXJ0T2ZEYXkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIHRoaXMubWlsbGlzZW9uZHNJbk1pbnV0ZTtcbiAgICAgIGNvbnN0IHRpbWVTdGFtcFJpZ2h0ID1cbiAgICAgICAgdGhpcy5nZXRUaW1lKGRhdGVSaWdodFN0YXJ0T2ZEYXkpIC1cbiAgICAgICAgZGF0ZVJpZ2h0U3RhcnRPZkRheS5nZXRUaW1lem9uZU9mZnNldCgpICogdGhpcy5taWxsaXNlb25kc0luTWludXRlO1xuICAgICAgcmV0dXJuIE1hdGgucm91bmQoXG4gICAgICAgICh0aW1lU3RhbXBMZWZ0IC0gdGltZVN0YW1wUmlnaHQpIC8gdGhpcy5taWxsaXNlY29uZHNJbkRheVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFllYXJOYW1lKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIGlmIChTVVBQT1JUU19JTlRMX0FQSSkge1xuICAgICAgY29uc3QgZHRmID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICB0aW1lWm9uZTogJ3V0YydcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModGhpcy5fZm9ybWF0KGR0ZiwgZGF0ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZ2V0WWVhcihkYXRlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TW9udGhOYW1lcyhzdHlsZTogJ2xvbmcnIHwgJ3Nob3J0JyB8ICduYXJyb3cnKTogc3RyaW5nW10ge1xuICAgIGlmIChTVVBQT1JUU19JTlRMX0FQSSkge1xuICAgICAgY29uc3QgZHRmID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgbW9udGg6IHN0eWxlLFxuICAgICAgICB0aW1lWm9uZTogJ3V0YydcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJhbmdlKDEyLCAoaSkgPT5cbiAgICAgICAgdGhpcy5zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyhcbiAgICAgICAgICB0aGlzLl9mb3JtYXQoZHRmLCBuZXcgRGF0ZSgyMDE3LCBpLCAxKSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIERFRkFVTFRfTU9OVEhfTkFNRVNbc3R5bGVdO1xuICB9XG5cbiAgcHVibGljIGdldERheU9mV2Vla05hbWVzKHN0eWxlOiAnbG9uZycgfCAnc2hvcnQnIHwgJ25hcnJvdycpOiBzdHJpbmdbXSB7XG4gICAgaWYgKFNVUFBPUlRTX0lOVExfQVBJKSB7XG4gICAgICBjb25zdCBkdGYgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwge1xuICAgICAgICB3ZWVrZGF5OiBzdHlsZSxcbiAgICAgICAgdGltZVpvbmU6ICd1dGMnXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByYW5nZSg3LCAoaSkgPT5cbiAgICAgICAgdGhpcy5zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyhcbiAgICAgICAgICB0aGlzLl9mb3JtYXQoZHRmLCBuZXcgRGF0ZSgyMDE3LCAwLCBpICsgMSkpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIERFRkFVTFRfREFZX09GX1dFRUtfTkFNRVNbc3R5bGVdO1xuICB9XG5cbiAgcHVibGljIGdldERhdGVOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKFNVUFBPUlRTX0lOVExfQVBJKSB7XG4gICAgICBjb25zdCBkdGYgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwge1xuICAgICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgICAgdGltZVpvbmU6ICd1dGMnXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByYW5nZSgzMSwgKGkpID0+XG4gICAgICAgIHRoaXMuc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnMoXG4gICAgICAgICAgdGhpcy5fZm9ybWF0KGR0ZiwgbmV3IERhdGUoMjAxNywgMCwgaSArIDEpKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gREVGQVVMVF9EQVRFX05BTUVTO1xuICB9XG5cbiAgcHVibGljIHRvSXNvODYwMShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpO1xuICB9XG5cbiAgcHVibGljIGlzRXF1YWwoZGF0ZUxlZnQ6IERhdGUsIGRhdGVSaWdodDogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzVmFsaWQoZGF0ZUxlZnQpICYmIHRoaXMuaXNWYWxpZChkYXRlUmlnaHQpKSB7XG4gICAgICByZXR1cm4gZGF0ZUxlZnQuZ2V0VGltZSgpID09PSBkYXRlUmlnaHQuZ2V0VGltZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzU2FtZURheShkYXRlTGVmdDogRGF0ZSwgZGF0ZVJpZ2h0OiBEYXRlKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZChkYXRlTGVmdCkgJiYgdGhpcy5pc1ZhbGlkKGRhdGVSaWdodCkpIHtcbiAgICAgIGNvbnN0IGRhdGVMZWZ0U3RhcnRPZkRheSA9IHRoaXMuY2xvbmUoZGF0ZUxlZnQpO1xuICAgICAgY29uc3QgZGF0ZVJpZ2h0U3RhcnRPZkRheSA9IHRoaXMuY2xvbmUoZGF0ZVJpZ2h0KTtcbiAgICAgIGRhdGVMZWZ0U3RhcnRPZkRheS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgIGRhdGVSaWdodFN0YXJ0T2ZEYXkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gZGF0ZUxlZnRTdGFydE9mRGF5LmdldFRpbWUoKSA9PT0gZGF0ZVJpZ2h0U3RhcnRPZkRheS5nZXRUaW1lKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNWYWxpZChkYXRlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRhdGUgJiYgIWlzTmFOKGRhdGUuZ2V0VGltZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBpbnZhbGlkKCk6IERhdGUge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG5cbiAgcHVibGljIGlzRGF0ZUluc3RhbmNlKG9iajogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIERhdGU7XG4gIH1cblxuICBwdWJsaWMgYWRkQ2FsZW5kYXJZZWFycyhkYXRlOiBEYXRlLCBhbW91bnQ6IG51bWJlcik6IERhdGUge1xuICAgIHJldHVybiB0aGlzLmFkZENhbGVuZGFyTW9udGhzKGRhdGUsIGFtb3VudCAqIDEyKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRDYWxlbmRhck1vbnRocyhkYXRlOiBEYXRlLCBhbW91bnQ6IG51bWJlcik6IERhdGUge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY2xvbmUoZGF0ZSk7XG4gICAgYW1vdW50ID0gTnVtYmVyKGFtb3VudCk7XG5cbiAgICBjb25zdCBkZXNpcmVkTW9udGggPSByZXN1bHQuZ2V0TW9udGgoKSArIGFtb3VudDtcbiAgICBjb25zdCBkYXRlV2l0aERlc2lyZWRNb250aCA9IG5ldyBEYXRlKDApO1xuICAgIGRhdGVXaXRoRGVzaXJlZE1vbnRoLnNldEZ1bGxZZWFyKHJlc3VsdC5nZXRGdWxsWWVhcigpLCBkZXNpcmVkTW9udGgsIDEpO1xuICAgIGRhdGVXaXRoRGVzaXJlZE1vbnRoLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuXG4gICAgY29uc3QgZGF5c0luTW9udGggPSB0aGlzLmdldE51bURheXNJbk1vbnRoKGRhdGVXaXRoRGVzaXJlZE1vbnRoKTtcbiAgICAvLyBTZXQgdGhlIGxhc3QgZGF5IG9mIHRoZSBuZXcgbW9udGhcbiAgICAvLyBpZiB0aGUgb3JpZ2luYWwgZGF0ZSB3YXMgdGhlIGxhc3QgZGF5IG9mIHRoZSBsb25nZXIgbW9udGhcbiAgICByZXN1bHQuc2V0TW9udGgoZGVzaXJlZE1vbnRoLCBNYXRoLm1pbihkYXlzSW5Nb250aCwgcmVzdWx0LmdldERhdGUoKSkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgYWRkQ2FsZW5kYXJEYXlzKGRhdGU6IERhdGUsIGFtb3VudDogbnVtYmVyKTogRGF0ZSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jbG9uZShkYXRlKTtcbiAgICBhbW91bnQgPSBOdW1iZXIoYW1vdW50KTtcbiAgICByZXN1bHQuc2V0RGF0ZShyZXN1bHQuZ2V0RGF0ZSgpICsgYW1vdW50KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIHNldEhvdXJzKGRhdGU6IERhdGUsIGFtb3VudDogbnVtYmVyKTogRGF0ZSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jbG9uZShkYXRlKTtcbiAgICByZXN1bHQuc2V0SG91cnMoYW1vdW50KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIHNldE1pbnV0ZXMoZGF0ZTogRGF0ZSwgYW1vdW50OiBudW1iZXIpOiBEYXRlIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNsb25lKGRhdGUpO1xuICAgIHJlc3VsdC5zZXRNaW51dGVzKGFtb3VudCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWNvbmRzKGRhdGU6IERhdGUsIGFtb3VudDogbnVtYmVyKTogRGF0ZSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jbG9uZShkYXRlKTtcbiAgICByZXN1bHQuc2V0U2Vjb25kcyhhbW91bnQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRGF0ZShcbiAgICB5ZWFyOiBudW1iZXIsXG4gICAgbW9udGg6IG51bWJlcixcbiAgICBkYXRlOiBudW1iZXIsXG4gICAgaG91cnM6IG51bWJlciA9IDAsXG4gICAgbWludXRlczogbnVtYmVyID0gMCxcbiAgICBzZWNvbmRzOiBudW1iZXIgPSAwXG4gICk6IERhdGUge1xuICAgIGlmIChtb250aCA8IDAgfHwgbW9udGggPiAxMSkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIG1vbnRoIGluZGV4IFwiJHttb250aH1cIi4gTW9udGggaW5kZXggaGFzIHRvIGJlIGJldHdlZW4gMCBhbmQgMTEuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0ZSA8IDEpIHtcbiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGRhdGUgXCIke2RhdGV9XCIuIERhdGUgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLmApO1xuICAgIH1cblxuICAgIGlmIChob3VycyA8IDAgfHwgaG91cnMgPiAyMykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGhvdXJzIFwiJHtob3Vyc31cIi4gSG91cnMgaGFzIHRvIGJlIGJldHdlZW4gMCBhbmQgMjMuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+IDU5KSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgbWludXRlcyBcIiR7bWludXRlc31cIi4gTWludXRlcyBoYXMgdG8gYmV0d2VlbiAwIGFuZCA1OS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzZWNvbmRzIDwgMCB8fCBzZWNvbmRzID4gNTkpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBzZWNvbmRzIFwiJHtzZWNvbmRzfVwiLiBTZWNvbmRzIGhhcyB0byBiZSBiZXR3ZWVuIDAgYW5kIDU5LmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jcmVhdGVEYXRlV2l0aE92ZXJmbG93KFxuICAgICAgeWVhcixcbiAgICAgIG1vbnRoLFxuICAgICAgZGF0ZSxcbiAgICAgIGhvdXJzLFxuICAgICAgbWludXRlcyxcbiAgICAgIHNlY29uZHNcbiAgICApO1xuXG4gICAgLy8gQ2hlY2sgdGhhdCB0aGUgZGF0ZSB3YXNuJ3QgYWJvdmUgdGhlIHVwcGVyIGJvdW5kIGZvciB0aGUgbW9udGgsIGNhdXNpbmcgdGhlIG1vbnRoIHRvIG92ZXJmbG93XG4gICAgLy8gRm9yIGV4YW1wbGUsIGNyZWF0ZURhdGUoMjAxNywgMSwgMzEpIHdvdWxkIHRyeSB0byBjcmVhdGUgYSBkYXRlIDIwMTcvMDIvMzEgd2hpY2ggaXMgaW52YWxpZFxuICAgIGlmIChyZXN1bHQuZ2V0TW9udGgoKSAhPT0gbW9udGgpIHtcbiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGRhdGUgXCIke2RhdGV9XCIgZm9yIG1vbnRoIHdpdGggaW5kZXggXCIke21vbnRofVwiLmApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgY2xvbmUoZGF0ZTogRGF0ZSk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLmdldFllYXIoZGF0ZSksXG4gICAgICB0aGlzLmdldE1vbnRoKGRhdGUpLFxuICAgICAgdGhpcy5nZXREYXRlKGRhdGUpLFxuICAgICAgdGhpcy5nZXRIb3VycyhkYXRlKSxcbiAgICAgIHRoaXMuZ2V0TWludXRlcyhkYXRlKSxcbiAgICAgIHRoaXMuZ2V0U2Vjb25kcyhkYXRlKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbm93KCk6IERhdGUge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICB9XG5cbiAgcHVibGljIGZvcm1hdChkYXRlOiBEYXRlLCBkaXNwbGF5Rm9ybWF0OiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKGRhdGUpKSB7XG4gICAgICB0aHJvdyBFcnJvcignSlNOYXRpdmVEYXRlOiBDYW5ub3QgZm9ybWF0IGludmFsaWQgZGF0ZS4nKTtcbiAgICB9XG5cbiAgICBpZiAoU1VQUE9SVFNfSU5UTF9BUEkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5fY2xhbXBEYXRlICYmXG4gICAgICAgIChkYXRlLmdldEZ1bGxZZWFyKCkgPCAxIHx8IGRhdGUuZ2V0RnVsbFllYXIoKSA+IDk5OTkpXG4gICAgICApIHtcbiAgICAgICAgZGF0ZSA9IHRoaXMuY2xvbmUoZGF0ZSk7XG4gICAgICAgIGRhdGUuc2V0RnVsbFllYXIoTWF0aC5tYXgoMSwgTWF0aC5taW4oOTk5OSwgZGF0ZS5nZXRGdWxsWWVhcigpKSkpO1xuICAgICAgfVxuXG4gICAgICBkaXNwbGF5Rm9ybWF0ID0geyAuLi5kaXNwbGF5Rm9ybWF0LCB0aW1lWm9uZTogJ3V0YycgfTtcbiAgICAgIGNvbnN0IGR0ZiA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLCBkaXNwbGF5Rm9ybWF0KTtcbiAgICAgIHJldHVybiB0aGlzLnN0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHRoaXMuX2Zvcm1hdChkdGYsIGRhdGUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyhkYXRlLnRvRGF0ZVN0cmluZygpKTtcbiAgfVxuXG4gIHB1YmxpYyBwYXJzZSh2YWx1ZTogYW55LCBwYXJzZUZvcm1hdDogYW55KTogRGF0ZSB8IG51bGwge1xuICAgIC8vIFRoZXJlIGlzIG5vIHdheSB1c2luZyB0aGUgbmF0aXZlIEpTIERhdGUgdG8gc2V0IHRoZSBwYXJzZSBmb3JtYXQgb3IgbG9jYWxlXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKERhdGUucGFyc2UodmFsdWUpKSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ2l2ZW4gdmFsdWUgaWYgZ2l2ZW4gYSB2YWxpZCBEYXRlIG9yIG51bGwuIERlc2VyaWFsaXplcyB2YWxpZCBJU08gODYwMSBzdHJpbmdzXG4gICAqIChodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzMzOS50eHQpIGludG8gdmFsaWQgRGF0ZXMgYW5kIGVtcHR5IHN0cmluZyBpbnRvIG51bGwuIFJldHVybnMgYW5cbiAgICogaW52YWxpZCBkYXRlIGZvciBhbGwgb3RoZXIgdmFsdWVzLlxuICAgKi9cbiAgcHVibGljIGRlc2VyaWFsaXplKHZhbHVlOiBhbnkpOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICAvLyBUaGUgYERhdGVgIGNvbnN0cnVjdG9yIGFjY2VwdHMgZm9ybWF0cyBvdGhlciB0aGFuIElTTyA4NjAxLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIHN0cmluZyBpcyB0aGUgcmlnaHQgZm9ybWF0IGZpcnN0LlxuICAgICAgaWYgKElTT184NjAxX1JFR0VYLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWQoZGF0ZSkpIHtcbiAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBkYXRlIGJ1dCBhbGxvd3MgdGhlIG1vbnRoIGFuZCBkYXRlIHRvIG92ZXJmbG93LlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVEYXRlV2l0aE92ZXJmbG93KFxuICAgIHllYXI6IG51bWJlcixcbiAgICBtb250aDogbnVtYmVyLFxuICAgIGRhdGU6IG51bWJlcixcbiAgICBob3VyczogbnVtYmVyID0gMCxcbiAgICBtaW51dGVzOiBudW1iZXIgPSAwLFxuICAgIHNlY29uZHM6IG51bWJlciA9IDBcbiAgKTogRGF0ZSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcblxuICAgIGlmICh5ZWFyID49IDAgJiYgeWVhciA8IDEwMCkge1xuICAgICAgcmVzdWx0LnNldEZ1bGxZZWFyKHRoaXMuZ2V0WWVhcihyZXN1bHQpIC0gMTkwMCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU3RyaXAgb3V0IHVuaWNvZGUgTFRSIGFuZCBSVEwgY2hhcmFjdGVycy4gRWRnZSBhbmQgSUUgaW5zZXJ0IHRoZXNlIGludG8gZm9ybWF0dGVkIGRhdGVzIHdoaWxlXG4gICAqIG90aGVyIGJyb3dzZXJzIGRvIG5vdC4gV2UgcmVtb3ZlIHRoZW0gdG8gbWFrZSBvdXRwdXQgY29uc2lzdGVudCBhbmQgYmVjYXVzZSB0aGV5IGludGVyZmVyZSB3aXRoXG4gICAqIGRhdGUgcGFyc2luZy5cbiAgICovXG4gIHByaXZhdGUgc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnMoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcXHUyMDBlXFx1MjAwZl0vZywgJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gY29udmVydGluZyBEYXRlIG9iamVjdCB0byBzdHJpbmcsIGphdmFzY3JpcHQgYnVpbHQtaW4gZnVuY3Rpb25zIG1heSByZXR1cm4gd3JvbmdcbiAgICogcmVzdWx0cyBiZWNhdXNlIGl0IGFwcGxpZXMgaXRzIGludGVybmFsIERTVCBydWxlcy4gVGhlIERTVCBydWxlcyBhcm91bmQgdGhlIHdvcmxkIGNoYW5nZVxuICAgKiB2ZXJ5IGZyZXF1ZW50bHksIGFuZCB0aGUgY3VycmVudCB2YWxpZCBydWxlIGlzIG5vdCBhbHdheXMgdmFsaWQgaW4gcHJldmlvdXMgeWVhcnMgdGhvdWdoLlxuICAgKiBXZSB3b3JrIGFyb3VuZCB0aGlzIHByb2JsZW0gYnVpbGRpbmcgYSBuZXcgRGF0ZSBvYmplY3Qgd2hpY2ggaGFzIGl0cyBpbnRlcm5hbCBVVENcbiAgICogcmVwcmVzZW50YXRpb24gd2l0aCB0aGUgbG9jYWwgZGF0ZSBhbmQgdGltZS5cbiAgICovXG4gIHByaXZhdGUgX2Zvcm1hdChkdGY6IEludGwuRGF0ZVRpbWVGb3JtYXQsIGRhdGU6IERhdGUpIHtcbiAgICBjb25zdCBkID0gbmV3IERhdGUoXG4gICAgICBEYXRlLlVUQyhcbiAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgIGRhdGUuZ2V0RGF0ZSgpLFxuICAgICAgICBkYXRlLmdldEhvdXJzKCksXG4gICAgICAgIGRhdGUuZ2V0TWludXRlcygpLFxuICAgICAgICBkYXRlLmdldFNlY29uZHMoKSxcbiAgICAgICAgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKVxuICAgICAgKVxuICAgICk7XG4gICAgcmV0dXJuIGR0Zi5mb3JtYXQoZCk7XG4gIH1cbn1cbiJdfQ==
|
package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const OWL_NATIVE_DATE_TIME_FORMATS = {
|
|
2
|
+
parseInput: null,
|
|
3
|
+
fullPickerInput: {
|
|
4
|
+
year: 'numeric',
|
|
5
|
+
month: 'numeric',
|
|
6
|
+
day: 'numeric',
|
|
7
|
+
hour: 'numeric',
|
|
8
|
+
minute: 'numeric'
|
|
9
|
+
},
|
|
10
|
+
datePickerInput: { year: 'numeric', month: 'numeric', day: 'numeric' },
|
|
11
|
+
timePickerInput: { hour: 'numeric', minute: 'numeric' },
|
|
12
|
+
monthYearLabel: { year: 'numeric', month: 'short' },
|
|
13
|
+
dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },
|
|
14
|
+
monthYearA11yLabel: { year: 'numeric', month: 'long' }
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWRhdGUtdGltZS1mb3JtYXQuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9jb21wb25lbnRzL25neC1waWNrLWRhdGV0aW1lL2xpYi9kYXRlLXRpbWUvYWRhcHRlci9uYXRpdmUtZGF0ZS10aW1lLWZvcm1hdC5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBdUI7SUFDOUQsVUFBVSxFQUFFLElBQUk7SUFDaEIsZUFBZSxFQUFFO1FBQ2YsSUFBSSxFQUFFLFNBQVM7UUFDZixLQUFLLEVBQUUsU0FBUztRQUNoQixHQUFHLEVBQUUsU0FBUztRQUNkLElBQUksRUFBRSxTQUFTO1FBQ2YsTUFBTSxFQUFFLFNBQVM7S0FDbEI7SUFDRCxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRTtJQUN0RSxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7SUFDdkQsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0lBQ25ELGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFO0lBQ2pFLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0NBQ3ZELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG5hdGl2ZS1kYXRlLXRpbWUtZm9ybWF0LmNsYXNzXG4gKi9cbmltcG9ydCB7IE93bERhdGVUaW1lRm9ybWF0cyB9IGZyb20gJy4vZGF0ZS10aW1lLWZvcm1hdC5jbGFzcyc7XG5cbmV4cG9ydCBjb25zdCBPV0xfTkFUSVZFX0RBVEVfVElNRV9GT1JNQVRTOiBPd2xEYXRlVGltZUZvcm1hdHMgPSB7XG4gIHBhcnNlSW5wdXQ6IG51bGwsXG4gIGZ1bGxQaWNrZXJJbnB1dDoge1xuICAgIHllYXI6ICdudW1lcmljJyxcbiAgICBtb250aDogJ251bWVyaWMnLFxuICAgIGRheTogJ251bWVyaWMnLFxuICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICBtaW51dGU6ICdudW1lcmljJ1xuICB9LFxuICBkYXRlUGlja2VySW5wdXQ6IHsgeWVhcjogJ251bWVyaWMnLCBtb250aDogJ251bWVyaWMnLCBkYXk6ICdudW1lcmljJyB9LFxuICB0aW1lUGlja2VySW5wdXQ6IHsgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICdudW1lcmljJyB9LFxuICBtb250aFllYXJMYWJlbDogeyB5ZWFyOiAnbnVtZXJpYycsIG1vbnRoOiAnc2hvcnQnIH0sXG4gIGRhdGVBMTF5TGFiZWw6IHsgeWVhcjogJ251bWVyaWMnLCBtb250aDogJ2xvbmcnLCBkYXk6ICdudW1lcmljJyB9LFxuICBtb250aFllYXJBMTF5TGFiZWw6IHsgeWVhcjogJ251bWVyaWMnLCBtb250aDogJ2xvbmcnIH1cbn07XG4iXX0=
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* native-date-time.module
|
|
3
|
+
*/
|
|
4
|
+
import { NgModule } from '@angular/core';
|
|
5
|
+
import { PlatformModule } from '@angular/cdk/platform';
|
|
6
|
+
import { DateTimeAdapter } from './date-time-adapter.class';
|
|
7
|
+
import { NativeDateTimeAdapter } from './native-date-time-adapter.class';
|
|
8
|
+
import { OWL_DATE_TIME_FORMATS } from './date-time-format.class';
|
|
9
|
+
import { OWL_NATIVE_DATE_TIME_FORMATS } from './native-date-time-format.class';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
export class NativeDateTimeModule {
|
|
12
|
+
}
|
|
13
|
+
NativeDateTimeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NativeDateTimeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
14
|
+
NativeDateTimeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NativeDateTimeModule, imports: [PlatformModule] });
|
|
15
|
+
NativeDateTimeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NativeDateTimeModule, providers: [{ provide: DateTimeAdapter, useClass: NativeDateTimeAdapter }], imports: [[PlatformModule]] });
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NativeDateTimeModule, decorators: [{
|
|
17
|
+
type: NgModule,
|
|
18
|
+
args: [{
|
|
19
|
+
imports: [PlatformModule],
|
|
20
|
+
providers: [{ provide: DateTimeAdapter, useClass: NativeDateTimeAdapter }]
|
|
21
|
+
}]
|
|
22
|
+
}] });
|
|
23
|
+
export class OwlNativeDateTimeModule {
|
|
24
|
+
}
|
|
25
|
+
OwlNativeDateTimeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: OwlNativeDateTimeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
26
|
+
OwlNativeDateTimeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: OwlNativeDateTimeModule, imports: [NativeDateTimeModule] });
|
|
27
|
+
OwlNativeDateTimeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: OwlNativeDateTimeModule, providers: [
|
|
28
|
+
{ provide: OWL_DATE_TIME_FORMATS, useValue: OWL_NATIVE_DATE_TIME_FORMATS }
|
|
29
|
+
], imports: [[NativeDateTimeModule]] });
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: OwlNativeDateTimeModule, decorators: [{
|
|
31
|
+
type: NgModule,
|
|
32
|
+
args: [{
|
|
33
|
+
imports: [NativeDateTimeModule],
|
|
34
|
+
providers: [
|
|
35
|
+
{ provide: OWL_DATE_TIME_FORMATS, useValue: OWL_NATIVE_DATE_TIME_FORMATS }
|
|
36
|
+
]
|
|
37
|
+
}]
|
|
38
|
+
}] });
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWRhdGUtdGltZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9jb21wb25lbnRzL25neC1waWNrLWRhdGV0aW1lL2xpYi9kYXRlLXRpbWUvYWRhcHRlci9uYXRpdmUtZGF0ZS10aW1lLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFNL0UsTUFBTSxPQUFPLG9CQUFvQjs7a0hBQXBCLG9CQUFvQjttSEFBcEIsb0JBQW9CLFlBSHJCLGNBQWM7bUhBR2Isb0JBQW9CLGFBRnBCLENBQUMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLFlBRGpFLENBQUMsY0FBYyxDQUFDOzRGQUdkLG9CQUFvQjtrQkFKaEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUM7b0JBQ3pCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztpQkFDM0U7O0FBU0QsTUFBTSxPQUFPLHVCQUF1Qjs7cUhBQXZCLHVCQUF1QjtzSEFBdkIsdUJBQXVCLFlBUnZCLG9CQUFvQjtzSEFRcEIsdUJBQXVCLGFBSnZCO1FBQ1QsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLDRCQUE0QixFQUFFO0tBQzNFLFlBSFEsQ0FBQyxvQkFBb0IsQ0FBQzs0RkFLcEIsdUJBQXVCO2tCQU5uQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixDQUFDO29CQUMvQixTQUFTLEVBQUU7d0JBQ1QsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLDRCQUE0QixFQUFFO3FCQUMzRTtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbmF0aXZlLWRhdGUtdGltZS5tb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGxhdGZvcm1Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgRGF0ZVRpbWVBZGFwdGVyIH0gZnJvbSAnLi9kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQgeyBOYXRpdmVEYXRlVGltZUFkYXB0ZXIgfSBmcm9tICcuL25hdGl2ZS1kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQgeyBPV0xfREFURV9USU1FX0ZPUk1BVFMgfSBmcm9tICcuL2RhdGUtdGltZS1mb3JtYXQuY2xhc3MnO1xuaW1wb3J0IHsgT1dMX05BVElWRV9EQVRFX1RJTUVfRk9STUFUUyB9IGZyb20gJy4vbmF0aXZlLWRhdGUtdGltZS1mb3JtYXQuY2xhc3MnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbUGxhdGZvcm1Nb2R1bGVdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IERhdGVUaW1lQWRhcHRlciwgdXNlQ2xhc3M6IE5hdGl2ZURhdGVUaW1lQWRhcHRlciB9XVxufSlcbmV4cG9ydCBjbGFzcyBOYXRpdmVEYXRlVGltZU1vZHVsZSB7fVxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbTmF0aXZlRGF0ZVRpbWVNb2R1bGVdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IE9XTF9EQVRFX1RJTUVfRk9STUFUUywgdXNlVmFsdWU6IE9XTF9OQVRJVkVfREFURV9USU1FX0ZPUk1BVFMgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE93bE5hdGl2ZURhdGVUaW1lTW9kdWxlIHt9XG4iXX0=
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostBinding, Input, NgZone, Output } from '@angular/core';
|
|
2
|
+
import { take } from 'rxjs/operators';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
export class CalendarCell {
|
|
6
|
+
constructor(value, displayValue, ariaLabel, enabled, out = false, cellClass = '') {
|
|
7
|
+
this.value = value;
|
|
8
|
+
this.displayValue = displayValue;
|
|
9
|
+
this.ariaLabel = ariaLabel;
|
|
10
|
+
this.enabled = enabled;
|
|
11
|
+
this.out = out;
|
|
12
|
+
this.cellClass = cellClass;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class OwlCalendarBodyComponent {
|
|
16
|
+
constructor(elmRef, ngZone) {
|
|
17
|
+
this.elmRef = elmRef;
|
|
18
|
+
this.ngZone = ngZone;
|
|
19
|
+
this.owlDTCalendarBodyClass = true;
|
|
20
|
+
/**
|
|
21
|
+
* The cell number of the active cell in the table.
|
|
22
|
+
*/
|
|
23
|
+
this.activeCell = 0;
|
|
24
|
+
/**
|
|
25
|
+
* The number of columns in the table.
|
|
26
|
+
* */
|
|
27
|
+
this.numCols = 7;
|
|
28
|
+
/**
|
|
29
|
+
* The ratio (width / height) to use for the cells in the table.
|
|
30
|
+
*/
|
|
31
|
+
this.cellRatio = 1;
|
|
32
|
+
/**
|
|
33
|
+
* Emit when a calendar cell is selected
|
|
34
|
+
* */
|
|
35
|
+
this.cellSelected = new EventEmitter();
|
|
36
|
+
}
|
|
37
|
+
get isInSingleMode() {
|
|
38
|
+
return this.selectMode === 'single';
|
|
39
|
+
}
|
|
40
|
+
get isInRangeMode() {
|
|
41
|
+
return (this.selectMode === 'range' ||
|
|
42
|
+
this.selectMode === 'rangeFrom' ||
|
|
43
|
+
this.selectMode === 'rangeTo');
|
|
44
|
+
}
|
|
45
|
+
selectCell(cell) {
|
|
46
|
+
this.cellSelected.emit(cell);
|
|
47
|
+
}
|
|
48
|
+
isActiveCell(rowIndex, colIndex) {
|
|
49
|
+
const cellNumber = rowIndex * this.numCols + colIndex;
|
|
50
|
+
return cellNumber === this.activeCell;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Check if the cell is selected
|
|
54
|
+
*/
|
|
55
|
+
isSelected(value) {
|
|
56
|
+
if (!this.selectedValues || this.selectedValues.length === 0) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
if (this.isInSingleMode) {
|
|
60
|
+
return value === this.selectedValues[0];
|
|
61
|
+
}
|
|
62
|
+
if (this.isInRangeMode) {
|
|
63
|
+
const fromValue = this.selectedValues[0];
|
|
64
|
+
const toValue = this.selectedValues[1];
|
|
65
|
+
return value === fromValue || value === toValue;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if the cell in the range
|
|
70
|
+
* */
|
|
71
|
+
isInRange(value) {
|
|
72
|
+
if (this.isInRangeMode) {
|
|
73
|
+
const fromValue = this.selectedValues[0];
|
|
74
|
+
const toValue = this.selectedValues[1];
|
|
75
|
+
if (fromValue !== null && toValue !== null) {
|
|
76
|
+
return value >= fromValue && value <= toValue;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
return value === fromValue || value === toValue;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if the cell is the range from
|
|
85
|
+
* */
|
|
86
|
+
isRangeFrom(value) {
|
|
87
|
+
if (this.isInRangeMode) {
|
|
88
|
+
const fromValue = this.selectedValues[0];
|
|
89
|
+
return fromValue !== null && value === fromValue;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Check if the cell is the range to
|
|
94
|
+
* */
|
|
95
|
+
isRangeTo(value) {
|
|
96
|
+
if (this.isInRangeMode) {
|
|
97
|
+
const toValue = this.selectedValues[1];
|
|
98
|
+
return toValue !== null && value === toValue;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Focus to a active cell
|
|
103
|
+
* */
|
|
104
|
+
focusActiveCell() {
|
|
105
|
+
this.ngZone.runOutsideAngular(() => {
|
|
106
|
+
this.ngZone.onStable
|
|
107
|
+
.asObservable()
|
|
108
|
+
.pipe(take(1))
|
|
109
|
+
.subscribe(() => {
|
|
110
|
+
this.elmRef.nativeElement
|
|
111
|
+
.querySelector('.owl-dt-calendar-cell-active')
|
|
112
|
+
.focus();
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
OwlCalendarBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: OwlCalendarBodyComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
118
|
+
OwlCalendarBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: OwlCalendarBodyComponent, selector: "[ofe-owl-date-time-calendar-body]", inputs: { activeCell: "activeCell", rows: "rows", numCols: "numCols", cellRatio: "cellRatio", todayValue: "todayValue", selectedValues: "selectedValues", selectMode: "selectMode" }, outputs: { cellSelected: "cellSelected" }, host: { properties: { "class.owl-dt-calendar-body": "this.owlDTCalendarBodyClass" } }, exportAs: ["owlDateTimeCalendarBody"], ngImport: i0, template: "<tr *ngFor=\"let row of rows; let rowIndex = index\" role=\"row\">\n <td\n *ngFor=\"let item of row; let colIndex = index\"\n class=\"owl-dt-calendar-cell {{ item.cellClass }}\"\n [tabindex]=\"isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n [class.owl-dt-calendar-cell-active]=\"isActiveCell(rowIndex, colIndex)\"\n [class.owl-dt-calendar-cell-disabled]=\"!item.enabled\"\n [class.owl-dt-calendar-cell-in-range]=\"isInRange(item.value)\"\n [class.owl-dt-calendar-cell-range-from]=\"isRangeFrom(item.value)\"\n [class.owl-dt-calendar-cell-range-to]=\"isRangeTo(item.value)\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-disabled]=\"!item.enabled || null\"\n [style.width.%]=\"100 / numCols\"\n [style.paddingTop.%]=\"(50 * cellRatio) / numCols\"\n [style.paddingBottom.%]=\"(50 * cellRatio) / numCols\"\n (click)=\"selectCell(item)\"\n >\n <span\n class=\"owl-dt-calendar-cell-content\"\n [ngClass]=\"{\n 'owl-dt-calendar-cell-out': item.out,\n 'owl-dt-calendar-cell-today': item.value === todayValue,\n 'owl-dt-calendar-cell-selected': isSelected(item.value)\n }\"\n >\n {{ item.displayValue }}\n </span>\n </td>\n</tr>\n", styles: [""], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
119
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: OwlCalendarBodyComponent, decorators: [{
|
|
120
|
+
type: Component,
|
|
121
|
+
args: [{
|
|
122
|
+
/* eslint-disable-next-line @angular-eslint/component-selector */
|
|
123
|
+
selector: '[ofe-owl-date-time-calendar-body]',
|
|
124
|
+
exportAs: 'owlDateTimeCalendarBody',
|
|
125
|
+
templateUrl: './calendar-body.component.html',
|
|
126
|
+
styleUrls: ['./calendar-body.component.scss'],
|
|
127
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
128
|
+
}]
|
|
129
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { owlDTCalendarBodyClass: [{
|
|
130
|
+
type: HostBinding,
|
|
131
|
+
args: ['class.owl-dt-calendar-body']
|
|
132
|
+
}], activeCell: [{
|
|
133
|
+
type: Input
|
|
134
|
+
}], rows: [{
|
|
135
|
+
type: Input
|
|
136
|
+
}], numCols: [{
|
|
137
|
+
type: Input
|
|
138
|
+
}], cellRatio: [{
|
|
139
|
+
type: Input
|
|
140
|
+
}], todayValue: [{
|
|
141
|
+
type: Input
|
|
142
|
+
}], selectedValues: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], selectMode: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], cellSelected: [{
|
|
147
|
+
type: Output
|
|
148
|
+
}] } });
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9jb21wb25lbnRzL25neC1waWNrLWRhdGV0aW1lL2xpYi9kYXRlLXRpbWUvY2FsZW5kYXItYm9keS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9jb21wb25lbnRzL25neC1waWNrLWRhdGV0aW1lL2xpYi9kYXRlLXRpbWUvY2FsZW5kYXItYm9keS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUd0QyxNQUFNLE9BQU8sWUFBWTtJQUN2QixZQUNTLEtBQWEsRUFDYixZQUFvQixFQUNwQixTQUFpQixFQUNqQixPQUFnQixFQUNoQixNQUFNLEtBQUssRUFDWCxZQUFvQixFQUFFO1FBTHRCLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUNYLGNBQVMsR0FBVCxTQUFTLENBQWE7SUFDNUIsQ0FBQztDQUNMO0FBVUQsTUFBTSxPQUFPLHdCQUF3QjtJQStEbkMsWUFBb0IsTUFBa0IsRUFBVSxNQUFjO1FBQTFDLFdBQU0sR0FBTixNQUFNLENBQVk7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBOURuQiwyQkFBc0IsR0FBRyxJQUFJ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SUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO2lCQUNqQixZQUFZLEVBQUU7aUJBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDYixTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYTtxQkFDdEIsYUFBYSxDQUFDLDhCQUE4QixDQUFDO3FCQUM3QyxLQUFLLEVBQUUsQ0FBQztZQUNiLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztzSEFoSlUsd0JBQXdCOzBHQUF4Qix3QkFBd0Isd2FDaENyQyx1c0NBNkJBOzRGREdhLHdCQUF3QjtrQkFScEMsU0FBUzttQkFBQztvQkFDVCxpRUFBaUU7b0JBQ2pFLFFBQVEsRUFBRSxtQ0FBbUM7b0JBQzdDLFFBQVEsRUFBRSx5QkFBeUI7b0JBQ25DLFdBQVcsRUFBRSxnQ0FBZ0M7b0JBQzdDLFNBQVMsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO29CQUM3QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7c0hBRTRDLHNCQUFzQjtzQkFBaEUsV0FBVzt1QkFBQyw0QkFBNEI7Z0JBTXpDLFVBQVU7c0JBRFQsS0FBSztnQkFPTixJQUFJO3NCQURILEtBQUs7Z0JBT04sT0FBTztzQkFETixLQUFLO2dCQU9OLFNBQVM7c0JBRFIsS0FBSztnQkFPTixVQUFVO3NCQURULEtBQUs7Z0JBT04sY0FBYztzQkFEYixLQUFLO2dCQU9OLFVBQVU7c0JBRFQsS0FBSztnQkFPVSxZQUFZO3NCQUQzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNlbGVjdE1vZGUgfSBmcm9tICcuL2RhdGUtdGltZS5jbGFzcyc7XG5cbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNlbGwge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdmFsdWU6IG51bWJlcixcbiAgICBwdWJsaWMgZGlzcGxheVZhbHVlOiBzdHJpbmcsXG4gICAgcHVibGljIGFyaWFMYWJlbDogc3RyaW5nLFxuICAgIHB1YmxpYyBlbmFibGVkOiBib29sZWFuLFxuICAgIHB1YmxpYyBvdXQgPSBmYWxzZSxcbiAgICBwdWJsaWMgY2VsbENsYXNzOiBzdHJpbmcgPSAnJ1xuICApIHt9XG59XG5cbkBDb21wb25lbnQoe1xuICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvciAqL1xuICBzZWxlY3RvcjogJ1tvZmUtb3dsLWRhdGUtdGltZS1jYWxlbmRhci1ib2R5XScsXG4gIGV4cG9ydEFzOiAnb3dsRGF0ZVRpbWVDYWxlbmRhckJvZHknLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItYm9keS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLWJvZHkuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgT3dsQ2FsZW5kYXJCb2R5Q29tcG9uZW50IHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5vd2wtZHQtY2FsZW5kYXItYm9keScpIG93bERUQ2FsZW5kYXJCb2R5Q2xhc3MgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUaGUgY2VsbCBudW1iZXIgb2YgdGhlIGFjdGl2ZSBjZWxsIGluIHRoZSB0YWJsZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGFjdGl2ZUNlbGwgPSAwO1xuXG4gIC8qKlxuICAgKiBUaGUgY2VsbHMgdG8gZGlzcGxheSBpbiB0aGUgdGFibGUuXG4gICAqICovXG4gIEBJbnB1dCgpXG4gIHJvd3M6IENhbGVuZGFyQ2VsbFtdW107XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgdGFibGUuXG4gICAqICovXG4gIEBJbnB1dCgpXG4gIG51bUNvbHMgPSA3O1xuXG4gIC8qKlxuICAgKiBUaGUgcmF0aW8gKHdpZHRoIC8gaGVpZ2h0KSB0byB1c2UgZm9yIHRoZSBjZWxscyBpbiB0aGUgdGFibGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBjZWxsUmF0aW8gPSAxO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgaW4gdGhlIHRhYmxlIHRoYXQgY29ycmVzcG9uZHMgdG8gdG9kYXkuXG4gICAqICovXG4gIEBJbnB1dCgpXG4gIHRvZGF5VmFsdWU6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHZhbHVlIGluIHRoZSB0YWJsZSB0aGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZC5cbiAgICogKi9cbiAgQElucHV0KClcbiAgc2VsZWN0ZWRWYWx1ZXM6IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBDdXJyZW50IHBpY2tlciBzZWxlY3QgbW9kZVxuICAgKi9cbiAgQElucHV0KClcbiAgc2VsZWN0TW9kZTogU2VsZWN0TW9kZTtcblxuICAvKipcbiAgICogRW1pdCB3aGVuIGEgY2FsZW5kYXIgY2VsbCBpcyBzZWxlY3RlZFxuICAgKiAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGNlbGxTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FsZW5kYXJDZWxsPigpO1xuXG4gIGdldCBpc0luU2luZ2xlTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RNb2RlID09PSAnc2luZ2xlJztcbiAgfVxuXG4gIGdldCBpc0luUmFuZ2VNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZScgfHxcbiAgICAgIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlRnJvbScgfHxcbiAgICAgIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlVG8nXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxtUmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIG5nWm9uZTogTmdab25lKSB7fVxuXG4gIHB1YmxpYyBzZWxlY3RDZWxsKGNlbGw6IENhbGVuZGFyQ2VsbCk6IHZvaWQge1xuICAgIHRoaXMuY2VsbFNlbGVjdGVkLmVtaXQoY2VsbCk7XG4gIH1cblxuICBwdWJsaWMgaXNBY3RpdmVDZWxsKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBjZWxsTnVtYmVyID0gcm93SW5kZXggKiB0aGlzLm51bUNvbHMgKyBjb2xJbmRleDtcbiAgICByZXR1cm4gY2VsbE51bWJlciA9PT0gdGhpcy5hY3RpdmVDZWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBjZWxsIGlzIHNlbGVjdGVkXG4gICAqL1xuICBwdWJsaWMgaXNTZWxlY3RlZCh2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkVmFsdWVzIHx8IHRoaXMuc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNJblNpbmdsZU1vZGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdGhpcy5zZWxlY3RlZFZhbHVlc1swXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0luUmFuZ2VNb2RlKSB7XG4gICAgICBjb25zdCBmcm9tVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzWzBdO1xuICAgICAgY29uc3QgdG9WYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXNbMV07XG5cbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gZnJvbVZhbHVlIHx8IHZhbHVlID09PSB0b1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgY2VsbCBpbiB0aGUgcmFuZ2VcbiAgICogKi9cbiAgcHVibGljIGlzSW5SYW5nZSh2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNJblJhbmdlTW9kZSkge1xuICAgICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHRvVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzWzFdO1xuXG4gICAgICBpZiAoZnJvbVZhbHVlICE9PSBudWxsICYmIHRvVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID49IGZyb21WYWx1ZSAmJiB2YWx1ZSA8PSB0b1ZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBmcm9tVmFsdWUgfHwgdmFsdWUgPT09IHRvVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBjZWxsIGlzIHRoZSByYW5nZSBmcm9tXG4gICAqICovXG4gIHB1YmxpYyBpc1JhbmdlRnJvbSh2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNJblJhbmdlTW9kZSkge1xuICAgICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlc1swXTtcbiAgICAgIHJldHVybiBmcm9tVmFsdWUgIT09IG51bGwgJiYgdmFsdWUgPT09IGZyb21WYWx1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGNlbGwgaXMgdGhlIHJhbmdlIHRvXG4gICAqICovXG4gIHB1YmxpYyBpc1JhbmdlVG8odmFsdWU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzSW5SYW5nZU1vZGUpIHtcbiAgICAgIGNvbnN0IHRvVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzWzFdO1xuICAgICAgcmV0dXJuIHRvVmFsdWUgIT09IG51bGwgJiYgdmFsdWUgPT09IHRvVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzIHRvIGEgYWN0aXZlIGNlbGxcbiAgICogKi9cbiAgcHVibGljIGZvY3VzQWN0aXZlQ2VsbCgpOiB2b2lkIHtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbG1SZWYubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5vd2wtZHQtY2FsZW5kYXItY2VsbC1hY3RpdmUnKVxuICAgICAgICAgICAgLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCI8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dzOyBsZXQgcm93SW5kZXggPSBpbmRleFwiIHJvbGU9XCJyb3dcIj5cbiAgPHRkXG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygcm93OyBsZXQgY29sSW5kZXggPSBpbmRleFwiXG4gICAgY2xhc3M9XCJvd2wtZHQtY2FsZW5kYXItY2VsbCB7eyBpdGVtLmNlbGxDbGFzcyB9fVwiXG4gICAgW3RhYmluZGV4XT1cImlzQWN0aXZlQ2VsbChyb3dJbmRleCwgY29sSW5kZXgpID8gMCA6IC0xXCJcbiAgICBbY2xhc3Mub3dsLWR0LWNhbGVuZGFyLWNlbGwtYWN0aXZlXT1cImlzQWN0aXZlQ2VsbChyb3dJbmRleCwgY29sSW5kZXgpXCJcbiAgICBbY2xhc3Mub3dsLWR0LWNhbGVuZGFyLWNlbGwtZGlzYWJsZWRdPVwiIWl0ZW0uZW5hYmxlZFwiXG4gICAgW2NsYXNzLm93bC1kdC1jYWxlbmRhci1jZWxsLWluLXJhbmdlXT1cImlzSW5SYW5nZShpdGVtLnZhbHVlKVwiXG4gICAgW2NsYXNzLm93bC1kdC1jYWxlbmRhci1jZWxsLXJhbmdlLWZyb21dPVwiaXNSYW5nZUZyb20oaXRlbS52YWx1ZSlcIlxuICAgIFtjbGFzcy5vd2wtZHQtY2FsZW5kYXItY2VsbC1yYW5nZS10b109XCJpc1JhbmdlVG8oaXRlbS52YWx1ZSlcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXRlbS5hcmlhTGFiZWxcIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiIWl0ZW0uZW5hYmxlZCB8fCBudWxsXCJcbiAgICBbc3R5bGUud2lkdGguJV09XCIxMDAgLyBudW1Db2xzXCJcbiAgICBbc3R5bGUucGFkZGluZ1RvcC4lXT1cIig1MCAqIGNlbGxSYXRpbykgLyBudW1Db2xzXCJcbiAgICBbc3R5bGUucGFkZGluZ0JvdHRvbS4lXT1cIig1MCAqIGNlbGxSYXRpbykgLyBudW1Db2xzXCJcbiAgICAoY2xpY2spPVwic2VsZWN0Q2VsbChpdGVtKVwiXG4gID5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJvd2wtZHQtY2FsZW5kYXItY2VsbC1jb250ZW50XCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ293bC1kdC1jYWxlbmRhci1jZWxsLW91dCc6IGl0ZW0ub3V0LFxuICAgICAgICAnb3dsLWR0LWNhbGVuZGFyLWNlbGwtdG9kYXknOiBpdGVtLnZhbHVlID09PSB0b2RheVZhbHVlLFxuICAgICAgICAnb3dsLWR0LWNhbGVuZGFyLWNlbGwtc2VsZWN0ZWQnOiBpc1NlbGVjdGVkKGl0ZW0udmFsdWUpXG4gICAgICB9XCJcbiAgICA+XG4gICAgICB7eyBpdGVtLmRpc3BsYXlWYWx1ZSB9fVxuICAgIDwvc3Bhbj5cbiAgPC90ZD5cbjwvdHI+XG4iXX0=
|