@energycap/components 0.41.1-ECAP-27592-angular-17.20241223-1652 → 0.41.1-ECAP-26841-date-input-features.20250106-0847
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/{esm2022 → esm2020}/energycap-components.mjs +4 -4
- package/esm2020/lib/components.module.mjs +423 -0
- package/esm2020/lib/controls/banner/banner.component.mjs +109 -0
- package/esm2020/lib/controls/button/button.component.mjs +106 -0
- package/esm2020/lib/controls/button/copy-button-base.directive.mjs +67 -0
- package/{esm2022 → esm2020}/lib/controls/button/copy-button.directive.mjs +28 -28
- package/esm2020/lib/controls/button/copy-table-button.directive.mjs +43 -0
- package/esm2020/lib/controls/calendar/calendar-item.component.mjs +91 -0
- package/esm2020/lib/controls/calendar/calendar.component.mjs +248 -0
- package/esm2020/lib/controls/calendar/calendar.types.mjs +2 -0
- package/esm2020/lib/controls/checkbox/checkbox.component.mjs +140 -0
- package/{esm2022 → esm2020}/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +38 -38
- package/esm2020/lib/controls/combobox/combobox.component.mjs +879 -0
- package/esm2020/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +57 -0
- package/esm2020/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +62 -0
- package/esm2020/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +100 -0
- package/esm2020/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +101 -0
- package/esm2020/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +76 -0
- package/esm2020/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +79 -0
- package/esm2020/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +210 -0
- package/esm2020/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +81 -0
- package/esm2020/lib/controls/date-input/date-input.component.mjs +462 -0
- package/esm2020/lib/controls/date-input/date-input.types.mjs +44 -0
- package/esm2020/lib/controls/dropdown/dropdown.component.mjs +243 -0
- package/esm2020/lib/controls/file-upload/file-upload.component.mjs +261 -0
- package/esm2020/lib/controls/form-control/form-control.component.mjs +98 -0
- package/esm2020/lib/controls/form-control-base.mjs +151 -0
- package/esm2020/lib/controls/form-control-label/form-control-label.component.mjs +136 -0
- package/esm2020/lib/controls/form-group/form-group.component.mjs +261 -0
- package/{esm2022 → esm2020}/lib/controls/help-popover/help-popover.component.mjs +31 -31
- package/esm2020/lib/controls/item-picker/item-picker.component.mjs +329 -0
- package/{esm2022 → esm2020}/lib/controls/link-button/link-button.component.mjs +11 -11
- package/esm2020/lib/controls/menu/menu.component.mjs +485 -0
- package/{esm2022 → esm2020}/lib/controls/navigation/link-item.mjs +1 -1
- package/esm2020/lib/controls/navigation/nav-group.mjs +39 -0
- package/esm2020/lib/controls/navigation/nav-item-active.directive.mjs +92 -0
- package/{esm2022 → esm2020}/lib/controls/navigation/nav-item.mjs +1 -1
- package/esm2020/lib/controls/numericbox/numericbox.component.mjs +372 -0
- package/esm2020/lib/controls/popover/popover.component.mjs +117 -0
- package/{esm2022 → esm2020}/lib/controls/radio-button/radio-button-option.mjs +2 -2
- package/esm2020/lib/controls/radio-button/radio-button.component.mjs +82 -0
- package/esm2020/lib/controls/select/select.component.mjs +88 -0
- package/esm2020/lib/controls/tabs/tabs.component.mjs +47 -0
- package/esm2020/lib/controls/textbox/textbox.component.mjs +155 -0
- package/esm2020/lib/core/cache.service.mjs +105 -0
- package/esm2020/lib/core/custom-validators.mjs +29 -0
- package/esm2020/lib/core/date-time-helper.mjs +228 -0
- package/esm2020/lib/core/error.service.mjs +61 -0
- package/esm2020/lib/core/router-helper.service.mjs +111 -0
- package/esm2020/lib/core/scroll.service.mjs +89 -0
- package/{esm2022 → esm2020}/lib/core/telemetry-tracker.service.mjs +16 -16
- package/{esm2022 → esm2020}/lib/core/telemetry.service.mjs +38 -38
- package/esm2020/lib/core/validation-message.service.mjs +185 -0
- package/{esm2022 → esm2020}/lib/core/validation-patterns.mjs +30 -30
- package/esm2020/lib/core/window.service.mjs +186 -0
- package/esm2020/lib/display/app-bar/app-bar.component.mjs +46 -0
- package/esm2020/lib/display/avatar/avatar.component.mjs +67 -0
- package/esm2020/lib/display/avatar/avatar.service.mjs +64 -0
- package/esm2020/lib/display/confirm/confirm.component.mjs +168 -0
- package/{esm2022 → esm2020}/lib/display/dialog/dialog-content.mjs +1 -1
- package/esm2020/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -0
- package/{esm2022 → esm2020}/lib/display/dialog/dialog-types.mjs +76 -76
- package/esm2020/lib/display/dialog/dialog.component.mjs +281 -0
- package/{esm2022 → esm2020}/lib/display/dialog/dialog.service.mjs +71 -71
- package/{esm2022 → esm2020}/lib/display/help/help-types.mjs +1 -1
- package/esm2020/lib/display/hierarchy/hierarchy-base.mjs +111 -0
- package/{esm2022 → esm2020}/lib/display/hierarchy/hierarchy-mocks.spec.mjs +53 -53
- package/esm2020/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +61 -0
- package/esm2020/lib/display/item-display/item-display.component.mjs +81 -0
- package/esm2020/lib/display/json-display/json-display.component.mjs +47 -0
- package/esm2020/lib/display/resizable/resizable-base.mjs +120 -0
- package/{esm2022 → esm2020}/lib/display/resizable/resizable.component.mjs +52 -52
- package/{esm2022 → esm2020}/lib/display/spinner/spinner.component.mjs +12 -12
- package/esm2020/lib/display/splash/splash.component.mjs +42 -0
- package/{esm2022 → esm2020}/lib/display/splash/splash.service.mjs +35 -35
- package/{esm2022 → esm2020}/lib/display/table/resizable-column.component.mjs +20 -20
- package/esm2020/lib/display/table/resizable-table.directive.mjs +227 -0
- package/esm2020/lib/display/table/searchable-table.component.mjs +342 -0
- package/{esm2022 → esm2020}/lib/display/table/table-detail-row.component.mjs +19 -19
- package/esm2020/lib/display/table/table-locked-column.component.mjs +58 -0
- package/{esm2022 → esm2020}/lib/display/table/table-master-header-row.component.mjs +14 -14
- package/esm2020/lib/display/table/table-master-row.component.mjs +163 -0
- package/esm2020/lib/display/table/table-pagination.component.mjs +155 -0
- package/esm2020/lib/display/table/table-selectable-row.component.mjs +235 -0
- package/esm2020/lib/display/table/table.component.mjs +249 -0
- package/esm2020/lib/display/tags/tag.mjs +18 -0
- package/esm2020/lib/display/tags/tags.component.mjs +77 -0
- package/esm2020/lib/display/toast/toast/toast.component.mjs +77 -0
- package/{esm2022 → esm2020}/lib/display/toast/toast-types.mjs +7 -7
- package/{esm2022 → esm2020}/lib/display/toast/toast.service.mjs +35 -35
- package/esm2020/lib/display/toast/toaster/toaster.component.mjs +114 -0
- package/{esm2022 → esm2020}/lib/display/tooltip/tooltip.component.mjs +28 -28
- package/{esm2022 → esm2020}/lib/display/tooltip/tooltip.service.mjs +78 -78
- package/esm2020/lib/display/tooltip-directive/tooltip.directive.mjs +173 -0
- package/{esm2022 → esm2020}/lib/display/tour/tour-types.mjs +33 -33
- package/esm2020/lib/display/tour/tour.component.mjs +398 -0
- package/esm2020/lib/display/tour/tour.service.mjs +75 -0
- package/esm2020/lib/display/tree/tree.component.mjs +135 -0
- package/esm2020/lib/display/view-overlay/view-overlay.component.mjs +58 -0
- package/esm2020/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -0
- package/esm2020/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -0
- package/esm2020/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +100 -0
- package/esm2020/lib/shared/directives/popup/popup-container.directive.mjs +163 -0
- package/esm2020/lib/shared/display/pipes/date-display.pipe.mjs +50 -0
- package/esm2020/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -0
- package/esm2020/lib/shared/display/pipes/relative-date.pipe.mjs +62 -0
- package/esm2020/lib/shared/display/pipes/row-count.pipe.mjs +48 -0
- package/esm2020/lib/shared/display/pipes/time-display.pipe.mjs +41 -0
- package/esm2020/lib/shared/display.mjs +6 -0
- package/esm2020/lib/shared/form-group.helper.mjs +67 -0
- package/esm2020/lib/shared/json-helper.mjs +19 -0
- package/esm2020/lib/shared/lodash-helper.mjs +51 -0
- package/esm2020/lib/shared/page/page-base/page-base.component.mjs +387 -0
- package/{esm2022 → esm2020}/lib/shared/page/page-statuses.mjs +22 -22
- package/{esm2022 → esm2020}/lib/shared/page/page-title/page-title.component.mjs +23 -23
- package/esm2020/lib/shared/page/page-view/page-view.component.mjs +147 -0
- package/{esm2022 → esm2020}/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +16 -16
- package/{esm2022 → esm2020}/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +16 -16
- package/{esm2022 → esm2020}/lib/shared/testing/page-base-component-test-helper.spec.mjs +37 -37
- package/esm2020/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +98 -0
- package/{esm2022 → esm2020}/lib/shared/testing/public-mocks.spec.mjs +148 -148
- package/{esm2022 → esm2020}/lib/shared/testing/spy-factory.spec.mjs +39 -39
- package/{esm2022 → esm2020}/lib/shared/testing/translation-mocks.spec.mjs +56 -56
- package/{esm2022 → esm2020}/lib/shared/user-preference.service.mjs +17 -17
- package/esm2020/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -0
- package/{esm2022 → esm2020}/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -68
- package/{esm2022 → esm2020}/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -18
- package/esm2020/public-api.mjs +117 -0
- package/fesm2015/energycap-components.mjs +13370 -0
- package/fesm2015/energycap-components.mjs.map +1 -0
- package/{fesm2022 → fesm2020}/energycap-components.mjs +12971 -11819
- package/fesm2020/energycap-components.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/components.module.d.ts +92 -91
- package/lib/controls/banner/banner.component.d.ts +50 -50
- package/lib/controls/button/button.component.d.ts +78 -78
- package/lib/controls/button/copy-button-base.directive.d.ts +20 -20
- package/lib/controls/button/copy-button.directive.d.ts +14 -14
- package/lib/controls/button/copy-table-button.directive.d.ts +19 -19
- package/lib/controls/calendar/calendar-item.component.d.ts +22 -17
- package/lib/controls/calendar/calendar.component.d.ts +52 -54
- package/lib/controls/calendar/calendar.types.d.ts +11 -7
- package/lib/controls/checkbox/checkbox.component.d.ts +65 -65
- package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +25 -25
- package/lib/controls/combobox/combobox.component.d.ts +418 -418
- package/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.d.ts +42 -0
- package/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.d.ts +21 -0
- package/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.d.ts +21 -0
- package/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.d.ts +21 -0
- package/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.d.ts +18 -0
- package/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.d.ts +18 -0
- package/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.d.ts +21 -0
- package/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.d.ts +20 -0
- package/lib/controls/date-input/date-input.component.d.ts +115 -80
- package/lib/controls/date-input/date-input.types.d.ts +62 -0
- package/lib/controls/dropdown/dropdown.component.d.ts +161 -161
- package/lib/controls/file-upload/file-upload.component.d.ts +124 -124
- package/lib/controls/form-control/form-control.component.d.ts +28 -30
- package/lib/controls/form-control-base.d.ts +110 -110
- package/lib/controls/form-control-label/form-control-label.component.d.ts +73 -73
- package/lib/controls/form-group/form-group.component.d.ts +105 -105
- package/lib/controls/help-popover/help-popover.component.d.ts +11 -11
- package/lib/controls/item-picker/item-picker.component.d.ts +164 -164
- package/lib/controls/link-button/link-button.component.d.ts +5 -5
- package/lib/controls/menu/menu.component.d.ts +255 -255
- package/lib/controls/navigation/link-item.d.ts +32 -32
- package/lib/controls/navigation/nav-group.d.ts +18 -18
- package/lib/controls/navigation/nav-item-active.directive.d.ts +42 -42
- package/lib/controls/navigation/nav-item.d.ts +31 -31
- package/lib/controls/numericbox/numericbox.component.d.ts +148 -148
- package/lib/controls/popover/popover.component.d.ts +51 -51
- package/lib/controls/radio-button/radio-button-option.d.ts +19 -19
- package/lib/controls/radio-button/radio-button.component.d.ts +53 -53
- package/lib/controls/select/select.component.d.ts +44 -44
- package/lib/controls/tabs/tabs.component.d.ts +30 -30
- package/lib/controls/textbox/textbox.component.d.ts +107 -107
- package/lib/core/cache.service.d.ts +33 -33
- package/lib/core/custom-validators.d.ts +20 -20
- package/lib/core/date-time-helper.d.ts +101 -101
- package/lib/core/error.service.d.ts +20 -20
- package/lib/core/router-helper.service.d.ts +48 -48
- package/lib/core/scroll.service.d.ts +36 -36
- package/lib/core/telemetry-tracker.service.d.ts +13 -13
- package/lib/core/telemetry.service.d.ts +31 -31
- package/lib/core/validation-message.service.d.ts +26 -26
- package/lib/core/validation-patterns.d.ts +22 -22
- package/lib/core/window.service.d.ts +116 -116
- package/lib/display/app-bar/app-bar.component.d.ts +20 -20
- package/lib/display/avatar/avatar.component.d.ts +35 -35
- package/lib/display/avatar/avatar.service.d.ts +24 -24
- package/lib/display/confirm/confirm.component.d.ts +123 -123
- package/lib/display/dialog/dialog-content.d.ts +19 -19
- package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +32 -32
- package/lib/display/dialog/dialog-types.d.ts +130 -130
- package/lib/display/dialog/dialog.component.d.ts +120 -120
- package/lib/display/dialog/dialog.service.d.ts +48 -48
- package/lib/display/help/help-types.d.ts +33 -33
- package/lib/display/hierarchy/hierarchy-base.d.ts +97 -97
- package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -53
- package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +34 -34
- package/lib/display/item-display/item-display.component.d.ts +43 -43
- package/lib/display/json-display/json-display.component.d.ts +16 -16
- package/lib/display/resizable/resizable-base.d.ts +67 -67
- package/lib/display/resizable/resizable.component.d.ts +31 -31
- package/lib/display/spinner/spinner.component.d.ts +5 -5
- package/lib/display/splash/splash.component.d.ts +16 -16
- package/lib/display/splash/splash.service.d.ts +22 -22
- package/lib/display/table/resizable-column.component.d.ts +10 -10
- package/lib/display/table/resizable-table.directive.d.ts +93 -93
- package/lib/display/table/searchable-table.component.d.ts +206 -206
- package/lib/display/table/table-detail-row.component.d.ts +8 -8
- package/lib/display/table/table-locked-column.component.d.ts +20 -20
- package/lib/display/table/table-master-header-row.component.d.ts +9 -9
- package/lib/display/table/table-master-row.component.d.ts +113 -113
- package/lib/display/table/table-pagination.component.d.ts +91 -91
- package/lib/display/table/table-selectable-row.component.d.ts +102 -102
- package/lib/display/table/table.component.d.ts +121 -121
- package/lib/display/tags/tag.d.ts +18 -18
- package/lib/display/tags/tags.component.d.ts +48 -48
- package/lib/display/toast/toast/toast.component.d.ts +23 -23
- package/lib/display/toast/toast-types.d.ts +24 -24
- package/lib/display/toast/toast.service.d.ts +20 -20
- package/lib/display/toast/toaster/toaster.component.d.ts +35 -35
- package/lib/display/tooltip/tooltip.component.d.ts +70 -70
- package/lib/display/tooltip/tooltip.service.d.ts +16 -16
- package/lib/display/tooltip-directive/tooltip.directive.d.ts +44 -44
- package/lib/display/tour/tour-types.d.ts +70 -70
- package/lib/display/tour/tour.component.d.ts +147 -147
- package/lib/display/tour/tour.service.d.ts +38 -38
- package/lib/display/tree/tree.component.d.ts +75 -75
- package/lib/display/view-overlay/view-overlay.component.d.ts +38 -38
- package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +14 -14
- package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +60 -60
- package/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.d.ts +23 -0
- package/lib/shared/directives/popup/popup-container.directive.d.ts +101 -101
- package/lib/shared/display/pipes/date-display.pipe.d.ts +21 -21
- package/lib/shared/display/pipes/highlight-text.pipe.d.ts +9 -9
- package/lib/shared/display/pipes/relative-date.pipe.d.ts +36 -36
- package/lib/shared/display/pipes/row-count.pipe.d.ts +23 -23
- package/lib/shared/display/pipes/time-display.pipe.d.ts +18 -18
- package/lib/shared/display.d.ts +42 -42
- package/lib/shared/form-group.helper.d.ts +31 -31
- package/lib/shared/json-helper.d.ts +7 -7
- package/lib/shared/lodash-helper.d.ts +18 -18
- package/lib/shared/page/page-base/page-base.component.d.ts +259 -259
- package/lib/shared/page/page-statuses.d.ts +13 -13
- package/lib/shared/page/page-title/page-title.component.d.ts +9 -9
- package/lib/shared/page/page-view/page-view.component.d.ts +102 -102
- package/lib/shared/testing/copy-button-base-test-injector-factory.spec.d.ts +4 -4
- package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -4
- package/lib/shared/testing/page-base-component-test-helper.spec.d.ts +30 -30
- package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +28 -28
- package/lib/shared/testing/public-mocks.spec.d.ts +90 -90
- package/lib/shared/testing/spy-factory.spec.d.ts +27 -27
- package/lib/shared/testing/translation-mocks.spec.d.ts +30 -30
- package/lib/shared/user-preference.service.d.ts +13 -13
- package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +134 -134
- package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +27 -27
- package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +10 -10
- package/package.json +18 -12
- package/public-api.d.ts +113 -111
- package/schematics/rxjs-7-upgrade/index.d.ts +3 -3
- package/schematics/rxjs-7-upgrade/index.js +67 -67
- package/schematics/rxjs-7-upgrade/index.js.map +1 -1
- package/schematics/rxjs-7-upgrade/schema.d.ts +4 -4
- package/schematics/rxjs-7-upgrade/schema.js +2 -2
- package/schematics/utilities/typescript.d.ts +7 -7
- package/schematics/utilities/typescript.js +41 -41
- package/schematics/utilities/workspace.d.ts +8 -8
- package/schematics/utilities/workspace.js +71 -71
- package/schematics/utilities/workspace.js.map +1 -1
- package/src/assets/locales/en_US.json +9 -1
- package/esm2022/lib/components.module.mjs +0 -418
- package/esm2022/lib/controls/banner/banner.component.mjs +0 -109
- package/esm2022/lib/controls/button/button.component.mjs +0 -106
- package/esm2022/lib/controls/button/copy-button-base.directive.mjs +0 -67
- package/esm2022/lib/controls/button/copy-table-button.directive.mjs +0 -43
- package/esm2022/lib/controls/calendar/calendar-item.component.mjs +0 -59
- package/esm2022/lib/controls/calendar/calendar.component.mjs +0 -200
- package/esm2022/lib/controls/calendar/calendar.types.mjs +0 -4
- package/esm2022/lib/controls/checkbox/checkbox.component.mjs +0 -140
- package/esm2022/lib/controls/combobox/combobox.component.mjs +0 -879
- package/esm2022/lib/controls/date-input/date-input.component.mjs +0 -256
- package/esm2022/lib/controls/dropdown/dropdown.component.mjs +0 -243
- package/esm2022/lib/controls/file-upload/file-upload.component.mjs +0 -261
- package/esm2022/lib/controls/form-control/form-control.component.mjs +0 -104
- package/esm2022/lib/controls/form-control-base.mjs +0 -151
- package/esm2022/lib/controls/form-control-label/form-control-label.component.mjs +0 -136
- package/esm2022/lib/controls/form-group/form-group.component.mjs +0 -261
- package/esm2022/lib/controls/item-picker/item-picker.component.mjs +0 -329
- package/esm2022/lib/controls/menu/menu.component.mjs +0 -485
- package/esm2022/lib/controls/navigation/nav-group.mjs +0 -39
- package/esm2022/lib/controls/navigation/nav-item-active.directive.mjs +0 -92
- package/esm2022/lib/controls/numericbox/numericbox.component.mjs +0 -372
- package/esm2022/lib/controls/popover/popover.component.mjs +0 -117
- package/esm2022/lib/controls/radio-button/radio-button.component.mjs +0 -82
- package/esm2022/lib/controls/select/select.component.mjs +0 -88
- package/esm2022/lib/controls/tabs/tabs.component.mjs +0 -47
- package/esm2022/lib/controls/textbox/textbox.component.mjs +0 -155
- package/esm2022/lib/core/cache.service.mjs +0 -105
- package/esm2022/lib/core/custom-validators.mjs +0 -29
- package/esm2022/lib/core/date-time-helper.mjs +0 -220
- package/esm2022/lib/core/error.service.mjs +0 -61
- package/esm2022/lib/core/router-helper.service.mjs +0 -111
- package/esm2022/lib/core/scroll.service.mjs +0 -89
- package/esm2022/lib/core/validation-message.service.mjs +0 -185
- package/esm2022/lib/core/window.service.mjs +0 -186
- package/esm2022/lib/display/app-bar/app-bar.component.mjs +0 -46
- package/esm2022/lib/display/avatar/avatar.component.mjs +0 -67
- package/esm2022/lib/display/avatar/avatar.service.mjs +0 -64
- package/esm2022/lib/display/confirm/confirm.component.mjs +0 -168
- package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +0 -63
- package/esm2022/lib/display/dialog/dialog.component.mjs +0 -281
- package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +0 -111
- package/esm2022/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +0 -61
- package/esm2022/lib/display/item-display/item-display.component.mjs +0 -81
- package/esm2022/lib/display/json-display/json-display.component.mjs +0 -47
- package/esm2022/lib/display/resizable/resizable-base.mjs +0 -120
- package/esm2022/lib/display/splash/splash.component.mjs +0 -42
- package/esm2022/lib/display/table/resizable-table.directive.mjs +0 -227
- package/esm2022/lib/display/table/searchable-table.component.mjs +0 -342
- package/esm2022/lib/display/table/table-locked-column.component.mjs +0 -58
- package/esm2022/lib/display/table/table-master-row.component.mjs +0 -163
- package/esm2022/lib/display/table/table-pagination.component.mjs +0 -155
- package/esm2022/lib/display/table/table-selectable-row.component.mjs +0 -235
- package/esm2022/lib/display/table/table.component.mjs +0 -249
- package/esm2022/lib/display/tags/tag.mjs +0 -18
- package/esm2022/lib/display/tags/tags.component.mjs +0 -77
- package/esm2022/lib/display/toast/toast/toast.component.mjs +0 -77
- package/esm2022/lib/display/toast/toaster/toaster.component.mjs +0 -114
- package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +0 -173
- package/esm2022/lib/display/tour/tour.component.mjs +0 -398
- package/esm2022/lib/display/tour/tour.service.mjs +0 -75
- package/esm2022/lib/display/tree/tree.component.mjs +0 -135
- package/esm2022/lib/display/view-overlay/view-overlay.component.mjs +0 -58
- package/esm2022/lib/shared/directives/click-area-for/click-area-for.directive.mjs +0 -32
- package/esm2022/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +0 -111
- package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +0 -166
- package/esm2022/lib/shared/display/pipes/date-display.pipe.mjs +0 -50
- package/esm2022/lib/shared/display/pipes/highlight-text.pipe.mjs +0 -30
- package/esm2022/lib/shared/display/pipes/relative-date.pipe.mjs +0 -62
- package/esm2022/lib/shared/display/pipes/row-count.pipe.mjs +0 -48
- package/esm2022/lib/shared/display/pipes/time-display.pipe.mjs +0 -41
- package/esm2022/lib/shared/display.mjs +0 -6
- package/esm2022/lib/shared/form-group.helper.mjs +0 -67
- package/esm2022/lib/shared/json-helper.mjs +0 -19
- package/esm2022/lib/shared/lodash-helper.mjs +0 -52
- package/esm2022/lib/shared/page/page-base/page-base.component.mjs +0 -387
- package/esm2022/lib/shared/page/page-view/page-view.component.mjs +0 -147
- package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +0 -98
- package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +0 -246
- package/esm2022/public-api.mjs +0 -115
- package/fesm2022/energycap-components.mjs.map +0 -1
package/esm2020/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs
ADDED
@@ -0,0 +1,210 @@
|
|
1
|
+
import moment from "moment";
|
2
|
+
import { DateInput } from "../date-input.types";
|
3
|
+
import { DateInputSelectionStrategyBase } from "./date-input-selection-strategy-base";
|
4
|
+
/**
|
5
|
+
* Selection strategy for the 'range' selection mode.
|
6
|
+
*/
|
7
|
+
export class RangeSelectionStrategy extends DateInputSelectionStrategyBase {
|
8
|
+
constructor() {
|
9
|
+
super(...arguments);
|
10
|
+
this.selectionViewMode = 'day';
|
11
|
+
this.validViewModes = ['day', 'month', 'year'];
|
12
|
+
this.showSecondaryTextbox = true;
|
13
|
+
this.showSecondaryCalendar = true;
|
14
|
+
}
|
15
|
+
formatSelection(selection) {
|
16
|
+
if (!selection) {
|
17
|
+
return { textbox: null, textbox2: null };
|
18
|
+
}
|
19
|
+
// We use the 'll' moment medium format here to make sure the formatted date is formatted according to the user's locale
|
20
|
+
if (DateInput.isSelectionSingleDate(selection)) {
|
21
|
+
return { textbox: moment(selection).format('ll'), textbox2: null };
|
22
|
+
}
|
23
|
+
else {
|
24
|
+
const start = selection.start ? moment(selection.start).format('ll') : null;
|
25
|
+
const end = selection.end ? moment(selection.end).format('ll') : null;
|
26
|
+
return { textbox: start, textbox2: end };
|
27
|
+
}
|
28
|
+
}
|
29
|
+
parseTextboxValues(value, parseFormats, opts) {
|
30
|
+
let start = this.parseString(value.textbox, parseFormats, opts);
|
31
|
+
let end = this.parseString(value.textbox2, parseFormats, opts);
|
32
|
+
// If the start date is after the end date, we need to clear out the invalid date. This is different from the last 7/28 days strategies
|
33
|
+
// because we don't have a fixed range to automatically adjust the dates to. If the user is changing the begin date or end date and ends
|
34
|
+
// up crossing the other date, we should clear out the date that's not being changed so that the user can enter a valid range using the
|
35
|
+
// begin/end date they just entered.
|
36
|
+
if (start && end && moment(start).isAfter(end)) {
|
37
|
+
if (opts?.parseFromEnd) {
|
38
|
+
start = null;
|
39
|
+
}
|
40
|
+
else {
|
41
|
+
end = null;
|
42
|
+
}
|
43
|
+
}
|
44
|
+
if (!start && !end) {
|
45
|
+
return null;
|
46
|
+
}
|
47
|
+
else {
|
48
|
+
return { start, end };
|
49
|
+
}
|
50
|
+
}
|
51
|
+
getSelectionFromDate(date, existingSelection) {
|
52
|
+
if (DateInput.isSelectionRange(existingSelection)) {
|
53
|
+
const { start, end } = existingSelection;
|
54
|
+
if (start && !end) {
|
55
|
+
// If the selected date is before the existing start date, set it as the new start date and use the existing start date as the end date
|
56
|
+
return moment(date).isBefore(start) ? { start: date, end: start } : { start, end: date };
|
57
|
+
}
|
58
|
+
if (end && !start) {
|
59
|
+
// If the selected date is after the existing end date, set it as the new end date and use the existing end date as the start date
|
60
|
+
return moment(date).isBefore(end) ? { start: date, end } : { start: end, end: date };
|
61
|
+
}
|
62
|
+
}
|
63
|
+
else if (DateInput.isSelectionSingleDate(existingSelection)) {
|
64
|
+
// If the selected date is before the existing date, set it as the new start date and use the existing date as the end date
|
65
|
+
return moment(date).isBefore(existingSelection) ? { start: date, end: existingSelection } : { start: existingSelection, end: date };
|
66
|
+
}
|
67
|
+
// If no selection exists or we already have a complete selection, start a new one with the selected date as the start date.
|
68
|
+
return { start: date, end: null };
|
69
|
+
}
|
70
|
+
getNewSelectionFromExisting(previousSelection) {
|
71
|
+
if (DateInput.isSelectionRange(previousSelection)) {
|
72
|
+
// If we have a range, just return it as is. We don't have a fixed range to adjust the dates to.
|
73
|
+
// Even if it's incomplete, the user will still be able to select the remaining date.
|
74
|
+
return previousSelection;
|
75
|
+
}
|
76
|
+
else if (DateInput.isSelectionSingleDate(previousSelection)) {
|
77
|
+
// If we have a single date selection, use it as the start date for the new one.
|
78
|
+
return { start: previousSelection, end: null };
|
79
|
+
}
|
80
|
+
return null;
|
81
|
+
}
|
82
|
+
getSelectionForQuickSelectDate(date, existingSelection) {
|
83
|
+
// If we have a valid range, we'll shift the range to the date provided, using it as the end date
|
84
|
+
// The new selection will have the same length as the previous.
|
85
|
+
if (DateInput.isSelectionRange(existingSelection) && existingSelection.start && existingSelection.end) {
|
86
|
+
const length = moment(existingSelection.end).diff(existingSelection.start, 'days');
|
87
|
+
return {
|
88
|
+
start: moment(date).subtract(length, 'days').toDate(),
|
89
|
+
end: date
|
90
|
+
};
|
91
|
+
}
|
92
|
+
// If we only have a single date, we'll use the date provided as the end date.
|
93
|
+
// The user will be able to select the start date.
|
94
|
+
return { start: null, end: date };
|
95
|
+
}
|
96
|
+
getNextSelection(selection) {
|
97
|
+
// We can only determine the next selection if we have a valid range
|
98
|
+
if (DateInput.isSelectionRange(selection) && selection.start && selection.end) {
|
99
|
+
// Shift the range forward by the number of days between the start and end dates
|
100
|
+
const length = moment(selection.end).diff(selection.start, 'days');
|
101
|
+
return {
|
102
|
+
start: moment(selection.end).add(1, 'days').toDate(),
|
103
|
+
end: moment(selection.end).add(1 + length, 'days').toDate()
|
104
|
+
};
|
105
|
+
}
|
106
|
+
// This shouldn't happen since the next stepper is disabled if the selection only has one date.
|
107
|
+
// If it does, just return the selection as-is.
|
108
|
+
return selection;
|
109
|
+
}
|
110
|
+
getPreviousSelection(selection) {
|
111
|
+
// We can only determine the previous selection if we have a valid range
|
112
|
+
if (DateInput.isSelectionRange(selection) && selection.start && selection.end) {
|
113
|
+
// Shift the range back by the number of days between the start and end dates
|
114
|
+
const length = moment(selection.end).diff(selection.start, 'days');
|
115
|
+
return {
|
116
|
+
start: moment(selection.start).subtract(1 + length, 'days').toDate(),
|
117
|
+
end: moment(selection.start).subtract(1, 'days').toDate()
|
118
|
+
};
|
119
|
+
}
|
120
|
+
// This shouldn't happen since the previous stepper is disabled if the selection only has one date.
|
121
|
+
// If it does, just return the selection as-is.
|
122
|
+
return selection;
|
123
|
+
}
|
124
|
+
getPrimaryCalendarView(selection, minDate, maxDate, currentView) {
|
125
|
+
let viewDate;
|
126
|
+
if (DateInput.isSelectionRange(selection)) {
|
127
|
+
let start = selection.start ? moment(selection.start) : null;
|
128
|
+
let end = selection.end ? moment(selection.end) : null;
|
129
|
+
// Since we're in range mode, the primary calendar is mostly concerned with the start date
|
130
|
+
if (start) {
|
131
|
+
// If we have a start date in the selection and it's before the min date, shift the view to the min date.
|
132
|
+
if (start.isBefore(minDate, 'month')) {
|
133
|
+
viewDate = minDate;
|
134
|
+
// If the start is after the max date, shift the view to the max date.
|
135
|
+
}
|
136
|
+
else if (start.isSameOrAfter(maxDate, 'month')) {
|
137
|
+
// the secondary calendar will show the max date month.
|
138
|
+
// The primary calendar will show the month before the max date.
|
139
|
+
viewDate = moment(maxDate).subtract(1, 'month').toDate();
|
140
|
+
}
|
141
|
+
else {
|
142
|
+
viewDate = start.toDate();
|
143
|
+
}
|
144
|
+
}
|
145
|
+
else if (end && end.isSameOrBefore(minDate, 'month')) {
|
146
|
+
// If we don't have a start date, and the end date is the same month or before the min date, shift the view to the min date.
|
147
|
+
viewDate = minDate;
|
148
|
+
}
|
149
|
+
else if (end && end.isSameOrBefore(new Date(), 'month')) {
|
150
|
+
// If we don't have a start date, and the end date is the same month or before the current month, shift the view to the month before the end
|
151
|
+
viewDate = moment(end).subtract(1, 'month').toDate();
|
152
|
+
}
|
153
|
+
else {
|
154
|
+
// Otherwise, show the current month.
|
155
|
+
viewDate = new Date();
|
156
|
+
}
|
157
|
+
}
|
158
|
+
else {
|
159
|
+
viewDate = selection || new Date();
|
160
|
+
}
|
161
|
+
// If the current calendar view mode is valid for the selection mode, use it, otherwise use the selection view mode
|
162
|
+
// This prevents the calendar from changing view modes as the user types/blurs the textboxes as long as the view mode is valid
|
163
|
+
const viewMode = this.validViewModes.includes(currentView.mode) ? currentView.mode : this.selectionViewMode;
|
164
|
+
return { mode: viewMode, date: viewDate };
|
165
|
+
}
|
166
|
+
getSecondaryCalendarView(selection, minDate, maxDate, currentView) {
|
167
|
+
let viewDate;
|
168
|
+
if (DateInput.isSelectionRange(selection)) {
|
169
|
+
let start = selection.start ? moment(selection.start) : null;
|
170
|
+
let end = selection.end ? moment(selection.end) : null;
|
171
|
+
// The secondary calendar is primarily concerned with the end date in the selection.
|
172
|
+
if (end) {
|
173
|
+
if (end.isAfter(maxDate, 'month')) {
|
174
|
+
// If the end date is after the max date, shift the view to the max date.
|
175
|
+
viewDate = maxDate;
|
176
|
+
}
|
177
|
+
else if (end.isSameOrBefore(minDate, 'month')) {
|
178
|
+
// If the end date is the same month or before the min date, shift the view to show
|
179
|
+
// the month after the min date. The primary calendar will show the min date month.
|
180
|
+
viewDate = moment(minDate).add(1, 'month').toDate();
|
181
|
+
}
|
182
|
+
else {
|
183
|
+
// Otherwise, show the end date month.
|
184
|
+
viewDate = end.toDate();
|
185
|
+
}
|
186
|
+
}
|
187
|
+
else if (start && start.isSameOrAfter(maxDate, 'month')) {
|
188
|
+
// If we don't have an end date, and the start date is after the max date, show the max date month
|
189
|
+
viewDate = maxDate;
|
190
|
+
}
|
191
|
+
else if (start && start.isSameOrAfter(new Date(), 'month')) {
|
192
|
+
// If we don't have an end date, and the start date is on or after the current month,
|
193
|
+
// show the month after the start date.
|
194
|
+
viewDate = moment(start).add(1, 'month').toDate();
|
195
|
+
}
|
196
|
+
else {
|
197
|
+
// Otherwise, show the current month.
|
198
|
+
viewDate = new Date();
|
199
|
+
}
|
200
|
+
}
|
201
|
+
else {
|
202
|
+
viewDate = selection || new Date();
|
203
|
+
}
|
204
|
+
// If the current calendar view mode is valid for the selection mode, use it, otherwise use the selection view mode
|
205
|
+
// This prevents the calendar from changing view modes as the user types/blurs the textboxes as long as the view mode is valid
|
206
|
+
const viewMode = this.validViewModes.includes(currentView.mode) ? currentView.mode : this.selectionViewMode;
|
207
|
+
return { mode: viewMode, date: viewDate };
|
208
|
+
}
|
209
|
+
}
|
210
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Utc2VsZWN0aW9uLXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2RhdGUtaW5wdXQvZGF0ZS1pbnB1dC1zZWxlY3Rpb24tc3RyYXRlZ2llcy9yYW5nZS1zZWxlY3Rpb24tc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV0Rjs7R0FFRztBQUNILE1BQU0sT0FBTyxzQkFBdUIsU0FBUSw4QkFBOEI7SUFBMUU7O1FBQ2tCLHNCQUFpQixHQUFzQixLQUFLLENBQUM7UUFDN0MsbUJBQWMsR0FBd0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELHlCQUFvQixHQUFHLElBQUksQ0FBQztRQUM1QiwwQkFBcUIsR0FBRyxJQUFJLENBQUM7SUEyTS9DLENBQUM7SUF6TUMsZUFBZSxDQUFDLFNBQXNDO1FBQ3BELElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDMUM7UUFFRCx3SEFBd0g7UUFDeEgsSUFBSSxTQUFTLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNwRTthQUFNO1lBQ0wsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUM1RSxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBRXRFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUMxQztJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFzQyxFQUFFLFlBQXNCLEVBQUUsSUFBK0I7UUFDaEgsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRS9ELHVJQUF1STtRQUN2SSx3SUFBd0k7UUFDeEksdUlBQXVJO1FBQ3ZJLG9DQUFvQztRQUNwQyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM5QyxJQUFJLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQ3RCLEtBQUssR0FBRyxJQUFJLENBQUM7YUFDZDtpQkFBTTtnQkFDTCxHQUFHLEdBQUcsSUFBSSxDQUFDO2FBQ1o7U0FDRjtRQUVELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDbEIsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNO1lBQ0wsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFVLEVBQUUsaUJBQTZDO1FBQzVFLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDakQsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztZQUN6QyxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDakIsdUlBQXVJO2dCQUN2SSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUMxRjtZQUNELElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNqQixrSUFBa0k7Z0JBQ2xJLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ3RGO1NBQ0Y7YUFBTSxJQUFJLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQzdELDJIQUEySDtZQUMzSCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDckk7UUFFRCw0SEFBNEg7UUFDNUgsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxpQkFBdUM7UUFDakUsSUFBSSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUNqRCxnR0FBZ0c7WUFDaEcscUZBQXFGO1lBQ3JGLE9BQU8saUJBQWlCLENBQUM7U0FDMUI7YUFBTSxJQUFJLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQzdELGdGQUFnRjtZQUNoRixPQUFPLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNoRDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDhCQUE4QixDQUFDLElBQVUsRUFBRSxpQkFBOEM7UUFDdkYsaUdBQWlHO1FBQ2pHLCtEQUErRDtRQUMvRCxJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLEtBQUssSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDckcsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbkYsT0FBTztnQkFDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUNyRCxHQUFHLEVBQUUsSUFBSTthQUNWLENBQUM7U0FDSDtRQUVELDhFQUE4RTtRQUM5RSxrREFBa0Q7UUFDbEQsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxTQUFxQztRQUNwRCxvRUFBb0U7UUFDcEUsSUFBSSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzdFLGdGQUFnRjtZQUNoRixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ25FLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3BELEdBQUcsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRTthQUM1RCxDQUFDO1NBQ0g7UUFFRCwrRkFBK0Y7UUFDL0YsK0NBQStDO1FBQy9DLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxTQUFxQztRQUN4RCx3RUFBd0U7UUFDeEUsSUFBSSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzdFLDZFQUE2RTtZQUM3RSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ25FLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUNwRSxHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRTthQUMxRCxDQUFDO1NBQ0g7UUFFRCxtR0FBbUc7UUFDbkcsK0NBQStDO1FBQy9DLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxTQUFxQyxFQUFFLE9BQWEsRUFBRSxPQUFhLEVBQUUsV0FBMEI7UUFDcEgsSUFBSSxRQUFjLENBQUM7UUFDbkIsSUFBSSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDekMsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzdELElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUV2RCwwRkFBMEY7WUFDMUYsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QseUdBQXlHO2dCQUN6RyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUNwQyxRQUFRLEdBQUcsT0FBTyxDQUFDO29CQUNuQixzRUFBc0U7aUJBQ3ZFO3FCQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7b0JBQ2hELHVEQUF1RDtvQkFDdkQsZ0VBQWdFO29CQUNoRSxRQUFRLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQzFEO3FCQUFNO29CQUNMLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQzNCO2FBQ0Y7aUJBQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ3RELDRIQUE0SDtnQkFDNUgsUUFBUSxHQUFHLE9BQU8sQ0FBQzthQUNwQjtpQkFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ3pELDRJQUE0STtnQkFDNUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3REO2lCQUFNO2dCQUNMLHFDQUFxQztnQkFDckMsUUFBUSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7YUFDdkI7U0FDRjthQUFNO1lBQ0wsUUFBUSxHQUFHLFNBQVMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1NBQ3BDO1FBRUQsbUhBQW1IO1FBQ25ILDhIQUE4SDtRQUM5SCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUU1RyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELHdCQUF3QixDQUFDLFNBQXFDLEVBQUUsT0FBYSxFQUFFLE9BQWEsRUFBRSxXQUEwQjtRQUN0SCxJQUFJLFFBQWMsQ0FBQztRQUVuQixJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN6QyxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDN0QsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBRXZELG9GQUFvRjtZQUNwRixJQUFJLEdBQUcsRUFBRTtnQkFDUCxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUNqQyx5RUFBeUU7b0JBQ3pFLFFBQVEsR0FBRyxPQUFPLENBQUM7aUJBQ3BCO3FCQUFNLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7b0JBQy9DLG1GQUFtRjtvQkFDbkYsbUZBQW1GO29CQUNuRixRQUFRLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQ3JEO3FCQUFNO29CQUNMLHNDQUFzQztvQkFDdEMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDekI7YUFDRjtpQkFBTSxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRTtnQkFDekQsa0dBQWtHO2dCQUNsRyxRQUFRLEdBQUcsT0FBTyxDQUFDO2FBQ3BCO2lCQUFNLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRTtnQkFDNUQscUZBQXFGO2dCQUNyRix1Q0FBdUM7Z0JBQ3ZDLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNuRDtpQkFBTTtnQkFDTCxxQ0FBcUM7Z0JBQ3JDLFFBQVEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO2FBQ3ZCO1NBQ0Y7YUFBTTtZQUNMLFFBQVEsR0FBRyxTQUFTLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztTQUNwQztRQUVELG1IQUFtSDtRQUNuSCw4SEFBOEg7UUFDOUgsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFFNUcsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQzVDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQgeyBDYWxlbmRhciB9IGZyb20gXCIuLi8uLi9jYWxlbmRhci9jYWxlbmRhci50eXBlc1wiO1xyXG5pbXBvcnQgeyBEYXRlSW5wdXQgfSBmcm9tIFwiLi4vZGF0ZS1pbnB1dC50eXBlc1wiO1xyXG5pbXBvcnQgeyBEYXRlSW5wdXRTZWxlY3Rpb25TdHJhdGVneUJhc2UgfSBmcm9tIFwiLi9kYXRlLWlucHV0LXNlbGVjdGlvbi1zdHJhdGVneS1iYXNlXCI7XHJcblxyXG4vKipcclxuICogU2VsZWN0aW9uIHN0cmF0ZWd5IGZvciB0aGUgJ3JhbmdlJyBzZWxlY3Rpb24gbW9kZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBSYW5nZVNlbGVjdGlvblN0cmF0ZWd5IGV4dGVuZHMgRGF0ZUlucHV0U2VsZWN0aW9uU3RyYXRlZ3lCYXNlIHtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0aW9uVmlld01vZGU6IENhbGVuZGFyLlZpZXdNb2RlID0gJ2RheSc7XHJcbiAgcHVibGljIHJlYWRvbmx5IHZhbGlkVmlld01vZGVzOiBDYWxlbmRhci5WaWV3TW9kZVtdID0gWydkYXknLCAnbW9udGgnLCAneWVhciddO1xyXG4gIHB1YmxpYyByZWFkb25seSBzaG93U2Vjb25kYXJ5VGV4dGJveCA9IHRydWU7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNob3dTZWNvbmRhcnlDYWxlbmRhciA9IHRydWU7XHJcblxyXG4gIGZvcm1hdFNlbGVjdGlvbihzZWxlY3Rpb24/OiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5UZXh0Ym94R3JvdXBbJ3ZhbHVlJ10ge1xyXG4gICAgaWYgKCFzZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIHsgdGV4dGJveDogbnVsbCwgdGV4dGJveDI6IG51bGwgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBXZSB1c2UgdGhlICdsbCcgbW9tZW50IG1lZGl1bSBmb3JtYXQgaGVyZSB0byBtYWtlIHN1cmUgdGhlIGZvcm1hdHRlZCBkYXRlIGlzIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHVzZXIncyBsb2NhbGVcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25TaW5nbGVEYXRlKHNlbGVjdGlvbikpIHtcclxuICAgICAgcmV0dXJuIHsgdGV4dGJveDogbW9tZW50KHNlbGVjdGlvbikuZm9ybWF0KCdsbCcpLCB0ZXh0Ym94MjogbnVsbCB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3Qgc3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQgPyBtb21lbnQoc2VsZWN0aW9uLnN0YXJ0KS5mb3JtYXQoJ2xsJykgOiBudWxsO1xyXG4gICAgICBjb25zdCBlbmQgPSBzZWxlY3Rpb24uZW5kID8gbW9tZW50KHNlbGVjdGlvbi5lbmQpLmZvcm1hdCgnbGwnKSA6IG51bGw7XHJcblxyXG4gICAgICByZXR1cm4geyB0ZXh0Ym94OiBzdGFydCwgdGV4dGJveDI6IGVuZCB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcGFyc2VUZXh0Ym94VmFsdWVzKHZhbHVlOiBEYXRlSW5wdXQuVGV4dGJveEdyb3VwWyd2YWx1ZSddLCBwYXJzZUZvcm1hdHM6IHN0cmluZ1tdLCBvcHRzPzogRGF0ZUlucHV0LlBhcnNpbmdPcHRpb25zKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgbGV0IHN0YXJ0ID0gdGhpcy5wYXJzZVN0cmluZyh2YWx1ZS50ZXh0Ym94LCBwYXJzZUZvcm1hdHMsIG9wdHMpO1xyXG4gICAgbGV0IGVuZCA9IHRoaXMucGFyc2VTdHJpbmcodmFsdWUudGV4dGJveDIsIHBhcnNlRm9ybWF0cywgb3B0cyk7XHJcblxyXG4gICAgLy8gSWYgdGhlIHN0YXJ0IGRhdGUgaXMgYWZ0ZXIgdGhlIGVuZCBkYXRlLCB3ZSBuZWVkIHRvIGNsZWFyIG91dCB0aGUgaW52YWxpZCBkYXRlLiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsYXN0IDcvMjggZGF5cyBzdHJhdGVnaWVzXHJcbiAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBmaXhlZCByYW5nZSB0byBhdXRvbWF0aWNhbGx5IGFkanVzdCB0aGUgZGF0ZXMgdG8uIElmIHRoZSB1c2VyIGlzIGNoYW5naW5nIHRoZSBiZWdpbiBkYXRlIG9yIGVuZCBkYXRlIGFuZCBlbmRzXHJcbiAgICAvLyB1cCBjcm9zc2luZyB0aGUgb3RoZXIgZGF0ZSwgd2Ugc2hvdWxkIGNsZWFyIG91dCB0aGUgZGF0ZSB0aGF0J3Mgbm90IGJlaW5nIGNoYW5nZWQgc28gdGhhdCB0aGUgdXNlciBjYW4gZW50ZXIgYSB2YWxpZCByYW5nZSB1c2luZyB0aGVcclxuICAgIC8vIGJlZ2luL2VuZCBkYXRlIHRoZXkganVzdCBlbnRlcmVkLlxyXG4gICAgaWYgKHN0YXJ0ICYmIGVuZCAmJiBtb21lbnQoc3RhcnQpLmlzQWZ0ZXIoZW5kKSkge1xyXG4gICAgICBpZiAob3B0cz8ucGFyc2VGcm9tRW5kKSB7XHJcbiAgICAgICAgc3RhcnQgPSBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVuZCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXN0YXJ0ICYmICFlbmQpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4geyBzdGFydCwgZW5kIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3Rpb25Gcm9tRGF0ZShkYXRlOiBEYXRlLCBleGlzdGluZ1NlbGVjdGlvbjogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2UoZXhpc3RpbmdTZWxlY3Rpb24pKSB7XHJcbiAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gZXhpc3RpbmdTZWxlY3Rpb247XHJcbiAgICAgIGlmIChzdGFydCAmJiAhZW5kKSB7XHJcbiAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGVkIGRhdGUgaXMgYmVmb3JlIHRoZSBleGlzdGluZyBzdGFydCBkYXRlLCBzZXQgaXQgYXMgdGhlIG5ldyBzdGFydCBkYXRlIGFuZCB1c2UgdGhlIGV4aXN0aW5nIHN0YXJ0IGRhdGUgYXMgdGhlIGVuZCBkYXRlXHJcbiAgICAgICAgcmV0dXJuIG1vbWVudChkYXRlKS5pc0JlZm9yZShzdGFydCkgPyB7IHN0YXJ0OiBkYXRlLCBlbmQ6IHN0YXJ0IH0gOiB7IHN0YXJ0LCBlbmQ6IGRhdGUgfTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZW5kICYmICFzdGFydCkge1xyXG4gICAgICAgIC8vIElmIHRoZSBzZWxlY3RlZCBkYXRlIGlzIGFmdGVyIHRoZSBleGlzdGluZyBlbmQgZGF0ZSwgc2V0IGl0IGFzIHRoZSBuZXcgZW5kIGRhdGUgYW5kIHVzZSB0aGUgZXhpc3RpbmcgZW5kIGRhdGUgYXMgdGhlIHN0YXJ0IGRhdGVcclxuICAgICAgICByZXR1cm4gbW9tZW50KGRhdGUpLmlzQmVmb3JlKGVuZCkgPyB7IHN0YXJ0OiBkYXRlLCBlbmQgfSA6IHsgc3RhcnQ6IGVuZCwgZW5kOiBkYXRlIH07XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uU2luZ2xlRGF0ZShleGlzdGluZ1NlbGVjdGlvbikpIHtcclxuICAgICAgLy8gSWYgdGhlIHNlbGVjdGVkIGRhdGUgaXMgYmVmb3JlIHRoZSBleGlzdGluZyBkYXRlLCBzZXQgaXQgYXMgdGhlIG5ldyBzdGFydCBkYXRlIGFuZCB1c2UgdGhlIGV4aXN0aW5nIGRhdGUgYXMgdGhlIGVuZCBkYXRlXHJcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSkuaXNCZWZvcmUoZXhpc3RpbmdTZWxlY3Rpb24pID8geyBzdGFydDogZGF0ZSwgZW5kOiBleGlzdGluZ1NlbGVjdGlvbiB9IDogeyBzdGFydDogZXhpc3RpbmdTZWxlY3Rpb24sIGVuZDogZGF0ZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIG5vIHNlbGVjdGlvbiBleGlzdHMgb3Igd2UgYWxyZWFkeSBoYXZlIGEgY29tcGxldGUgc2VsZWN0aW9uLCBzdGFydCBhIG5ldyBvbmUgd2l0aCB0aGUgc2VsZWN0ZWQgZGF0ZSBhcyB0aGUgc3RhcnQgZGF0ZS5cclxuICAgIHJldHVybiB7IHN0YXJ0OiBkYXRlLCBlbmQ6IG51bGwgfTtcclxuICB9XHJcblxyXG4gIGdldE5ld1NlbGVjdGlvbkZyb21FeGlzdGluZyhwcmV2aW91c1NlbGVjdGlvbj86IERhdGVJbnB1dC5TZWxlY3Rpb24pOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2UocHJldmlvdXNTZWxlY3Rpb24pKSB7XHJcbiAgICAgIC8vIElmIHdlIGhhdmUgYSByYW5nZSwganVzdCByZXR1cm4gaXQgYXMgaXMuIFdlIGRvbid0IGhhdmUgYSBmaXhlZCByYW5nZSB0byBhZGp1c3QgdGhlIGRhdGVzIHRvLlxyXG4gICAgICAvLyBFdmVuIGlmIGl0J3MgaW5jb21wbGV0ZSwgdGhlIHVzZXIgd2lsbCBzdGlsbCBiZSBhYmxlIHRvIHNlbGVjdCB0aGUgcmVtYWluaW5nIGRhdGUuXHJcbiAgICAgIHJldHVybiBwcmV2aW91c1NlbGVjdGlvbjtcclxuICAgIH0gZWxzZSBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uU2luZ2xlRGF0ZShwcmV2aW91c1NlbGVjdGlvbikpIHtcclxuICAgICAgLy8gSWYgd2UgaGF2ZSBhIHNpbmdsZSBkYXRlIHNlbGVjdGlvbiwgdXNlIGl0IGFzIHRoZSBzdGFydCBkYXRlIGZvciB0aGUgbmV3IG9uZS5cclxuICAgICAgcmV0dXJuIHsgc3RhcnQ6IHByZXZpb3VzU2VsZWN0aW9uLCBlbmQ6IG51bGwgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGlvbkZvclF1aWNrU2VsZWN0RGF0ZShkYXRlOiBEYXRlLCBleGlzdGluZ1NlbGVjdGlvbj86IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgLy8gSWYgd2UgaGF2ZSBhIHZhbGlkIHJhbmdlLCB3ZSdsbCBzaGlmdCB0aGUgcmFuZ2UgdG8gdGhlIGRhdGUgcHJvdmlkZWQsIHVzaW5nIGl0IGFzIHRoZSBlbmQgZGF0ZVxyXG4gICAgLy8gVGhlIG5ldyBzZWxlY3Rpb24gd2lsbCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgcHJldmlvdXMuXHJcbiAgICBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2UoZXhpc3RpbmdTZWxlY3Rpb24pICYmIGV4aXN0aW5nU2VsZWN0aW9uLnN0YXJ0ICYmIGV4aXN0aW5nU2VsZWN0aW9uLmVuZCkge1xyXG4gICAgICBjb25zdCBsZW5ndGggPSBtb21lbnQoZXhpc3RpbmdTZWxlY3Rpb24uZW5kKS5kaWZmKGV4aXN0aW5nU2VsZWN0aW9uLnN0YXJ0LCAnZGF5cycpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHN0YXJ0OiBtb21lbnQoZGF0ZSkuc3VidHJhY3QobGVuZ3RoLCAnZGF5cycpLnRvRGF0ZSgpLFxyXG4gICAgICAgIGVuZDogZGF0ZVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHdlIG9ubHkgaGF2ZSBhIHNpbmdsZSBkYXRlLCB3ZSdsbCB1c2UgdGhlIGRhdGUgcHJvdmlkZWQgYXMgdGhlIGVuZCBkYXRlLlxyXG4gICAgLy8gVGhlIHVzZXIgd2lsbCBiZSBhYmxlIHRvIHNlbGVjdCB0aGUgc3RhcnQgZGF0ZS5cclxuICAgIHJldHVybiB7IHN0YXJ0OiBudWxsLCBlbmQ6IGRhdGUgfTtcclxuICB9XHJcblxyXG4gIGdldE5leHRTZWxlY3Rpb24oc2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIC8vIFdlIGNhbiBvbmx5IGRldGVybWluZSB0aGUgbmV4dCBzZWxlY3Rpb24gaWYgd2UgaGF2ZSBhIHZhbGlkIHJhbmdlXHJcbiAgICBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uKSAmJiBzZWxlY3Rpb24uc3RhcnQgJiYgc2VsZWN0aW9uLmVuZCkge1xyXG4gICAgICAvLyBTaGlmdCB0aGUgcmFuZ2UgZm9yd2FyZCBieSB0aGUgbnVtYmVyIG9mIGRheXMgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlc1xyXG4gICAgICBjb25zdCBsZW5ndGggPSBtb21lbnQoc2VsZWN0aW9uLmVuZCkuZGlmZihzZWxlY3Rpb24uc3RhcnQsICdkYXlzJyk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgc3RhcnQ6IG1vbWVudChzZWxlY3Rpb24uZW5kKS5hZGQoMSwgJ2RheXMnKS50b0RhdGUoKSxcclxuICAgICAgICBlbmQ6IG1vbWVudChzZWxlY3Rpb24uZW5kKS5hZGQoMSArIGxlbmd0aCwgJ2RheXMnKS50b0RhdGUoKVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBzaW5jZSB0aGUgbmV4dCBzdGVwcGVyIGlzIGRpc2FibGVkIGlmIHRoZSBzZWxlY3Rpb24gb25seSBoYXMgb25lIGRhdGUuXHJcbiAgICAvLyBJZiBpdCBkb2VzLCBqdXN0IHJldHVybiB0aGUgc2VsZWN0aW9uIGFzLWlzLlxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGdldFByZXZpb3VzU2VsZWN0aW9uKHNlbGVjdGlvbjogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICAvLyBXZSBjYW4gb25seSBkZXRlcm1pbmUgdGhlIHByZXZpb3VzIHNlbGVjdGlvbiBpZiB3ZSBoYXZlIGEgdmFsaWQgcmFuZ2VcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb24pICYmIHNlbGVjdGlvbi5zdGFydCAmJiBzZWxlY3Rpb24uZW5kKSB7XHJcbiAgICAgIC8vIFNoaWZ0IHRoZSByYW5nZSBiYWNrIGJ5IHRoZSBudW1iZXIgb2YgZGF5cyBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGRhdGVzXHJcbiAgICAgIGNvbnN0IGxlbmd0aCA9IG1vbWVudChzZWxlY3Rpb24uZW5kKS5kaWZmKHNlbGVjdGlvbi5zdGFydCwgJ2RheXMnKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBzdGFydDogbW9tZW50KHNlbGVjdGlvbi5zdGFydCkuc3VidHJhY3QoMSArIGxlbmd0aCwgJ2RheXMnKS50b0RhdGUoKSxcclxuICAgICAgICBlbmQ6IG1vbWVudChzZWxlY3Rpb24uc3RhcnQpLnN1YnRyYWN0KDEsICdkYXlzJykudG9EYXRlKClcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gc2luY2UgdGhlIHByZXZpb3VzIHN0ZXBwZXIgaXMgZGlzYWJsZWQgaWYgdGhlIHNlbGVjdGlvbiBvbmx5IGhhcyBvbmUgZGF0ZS5cclxuICAgIC8vIElmIGl0IGRvZXMsIGp1c3QgcmV0dXJuIHRoZSBzZWxlY3Rpb24gYXMtaXMuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJpbWFyeUNhbGVuZGFyVmlldyhzZWxlY3Rpb246IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsLCBtaW5EYXRlOiBEYXRlLCBtYXhEYXRlOiBEYXRlLCBjdXJyZW50VmlldzogQ2FsZW5kYXIuVmlldyk6IENhbGVuZGFyLlZpZXcge1xyXG4gICAgbGV0IHZpZXdEYXRlOiBEYXRlO1xyXG4gICAgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblJhbmdlKHNlbGVjdGlvbikpIHtcclxuICAgICAgbGV0IHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0ID8gbW9tZW50KHNlbGVjdGlvbi5zdGFydCkgOiBudWxsO1xyXG4gICAgICBsZXQgZW5kID0gc2VsZWN0aW9uLmVuZCA/IG1vbWVudChzZWxlY3Rpb24uZW5kKSA6IG51bGw7XHJcblxyXG4gICAgICAvLyBTaW5jZSB3ZSdyZSBpbiByYW5nZSBtb2RlLCB0aGUgcHJpbWFyeSBjYWxlbmRhciBpcyBtb3N0bHkgY29uY2VybmVkIHdpdGggdGhlIHN0YXJ0IGRhdGVcclxuICAgICAgaWYgKHN0YXJ0KSB7XHJcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHN0YXJ0IGRhdGUgaW4gdGhlIHNlbGVjdGlvbiBhbmQgaXQncyBiZWZvcmUgdGhlIG1pbiBkYXRlLCBzaGlmdCB0aGUgdmlldyB0byB0aGUgbWluIGRhdGUuXHJcbiAgICAgICAgaWYgKHN0YXJ0LmlzQmVmb3JlKG1pbkRhdGUsICdtb250aCcpKSB7XHJcbiAgICAgICAgICB2aWV3RGF0ZSA9IG1pbkRhdGU7XHJcbiAgICAgICAgICAvLyBJZiB0aGUgc3RhcnQgaXMgYWZ0ZXIgdGhlIG1heCBkYXRlLCBzaGlmdCB0aGUgdmlldyB0byB0aGUgbWF4IGRhdGUuXHJcbiAgICAgICAgfSBlbHNlIGlmIChzdGFydC5pc1NhbWVPckFmdGVyKG1heERhdGUsICdtb250aCcpKSB7XHJcbiAgICAgICAgICAvLyB0aGUgc2Vjb25kYXJ5IGNhbGVuZGFyIHdpbGwgc2hvdyB0aGUgbWF4IGRhdGUgbW9udGguXHJcbiAgICAgICAgICAvLyBUaGUgcHJpbWFyeSBjYWxlbmRhciB3aWxsIHNob3cgdGhlIG1vbnRoIGJlZm9yZSB0aGUgbWF4IGRhdGUuXHJcbiAgICAgICAgICB2aWV3RGF0ZSA9IG1vbWVudChtYXhEYXRlKS5zdWJ0cmFjdCgxLCAnbW9udGgnKS50b0RhdGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmlld0RhdGUgPSBzdGFydC50b0RhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoZW5kICYmIGVuZC5pc1NhbWVPckJlZm9yZShtaW5EYXRlLCAnbW9udGgnKSkge1xyXG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBzdGFydCBkYXRlLCBhbmQgdGhlIGVuZCBkYXRlIGlzIHRoZSBzYW1lIG1vbnRoIG9yIGJlZm9yZSB0aGUgbWluIGRhdGUsIHNoaWZ0IHRoZSB2aWV3IHRvIHRoZSBtaW4gZGF0ZS5cclxuICAgICAgICB2aWV3RGF0ZSA9IG1pbkRhdGU7XHJcbiAgICAgIH0gZWxzZSBpZiAoZW5kICYmIGVuZC5pc1NhbWVPckJlZm9yZShuZXcgRGF0ZSgpLCAnbW9udGgnKSkge1xyXG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBzdGFydCBkYXRlLCBhbmQgdGhlIGVuZCBkYXRlIGlzIHRoZSBzYW1lIG1vbnRoIG9yIGJlZm9yZSB0aGUgY3VycmVudCBtb250aCwgc2hpZnQgdGhlIHZpZXcgdG8gdGhlIG1vbnRoIGJlZm9yZSB0aGUgZW5kXHJcbiAgICAgICAgdmlld0RhdGUgPSBtb21lbnQoZW5kKS5zdWJ0cmFjdCgxLCAnbW9udGgnKS50b0RhdGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBPdGhlcndpc2UsIHNob3cgdGhlIGN1cnJlbnQgbW9udGguXHJcbiAgICAgICAgdmlld0RhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2aWV3RGF0ZSA9IHNlbGVjdGlvbiB8fCBuZXcgRGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHRoZSBjdXJyZW50IGNhbGVuZGFyIHZpZXcgbW9kZSBpcyB2YWxpZCBmb3IgdGhlIHNlbGVjdGlvbiBtb2RlLCB1c2UgaXQsIG90aGVyd2lzZSB1c2UgdGhlIHNlbGVjdGlvbiB2aWV3IG1vZGVcclxuICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIGNhbGVuZGFyIGZyb20gY2hhbmdpbmcgdmlldyBtb2RlcyBhcyB0aGUgdXNlciB0eXBlcy9ibHVycyB0aGUgdGV4dGJveGVzIGFzIGxvbmcgYXMgdGhlIHZpZXcgbW9kZSBpcyB2YWxpZFxyXG4gICAgY29uc3Qgdmlld01vZGUgPSB0aGlzLnZhbGlkVmlld01vZGVzLmluY2x1ZGVzKGN1cnJlbnRWaWV3Lm1vZGUpID8gY3VycmVudFZpZXcubW9kZSA6IHRoaXMuc2VsZWN0aW9uVmlld01vZGU7XHJcblxyXG4gICAgcmV0dXJuIHsgbW9kZTogdmlld01vZGUsIGRhdGU6IHZpZXdEYXRlIH07XHJcbiAgfVxyXG5cclxuICBnZXRTZWNvbmRhcnlDYWxlbmRhclZpZXcoc2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCwgbWluRGF0ZTogRGF0ZSwgbWF4RGF0ZTogRGF0ZSwgY3VycmVudFZpZXc6IENhbGVuZGFyLlZpZXcpOiBDYWxlbmRhci5WaWV3IHtcclxuICAgIGxldCB2aWV3RGF0ZTogRGF0ZTtcclxuXHJcbiAgICBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uKSkge1xyXG4gICAgICBsZXQgc3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQgPyBtb21lbnQoc2VsZWN0aW9uLnN0YXJ0KSA6IG51bGw7XHJcbiAgICAgIGxldCBlbmQgPSBzZWxlY3Rpb24uZW5kID8gbW9tZW50KHNlbGVjdGlvbi5lbmQpIDogbnVsbDtcclxuXHJcbiAgICAgIC8vIFRoZSBzZWNvbmRhcnkgY2FsZW5kYXIgaXMgcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIHRoZSBlbmQgZGF0ZSBpbiB0aGUgc2VsZWN0aW9uLlxyXG4gICAgICBpZiAoZW5kKSB7XHJcbiAgICAgICAgaWYgKGVuZC5pc0FmdGVyKG1heERhdGUsICdtb250aCcpKSB7XHJcbiAgICAgICAgICAvLyBJZiB0aGUgZW5kIGRhdGUgaXMgYWZ0ZXIgdGhlIG1heCBkYXRlLCBzaGlmdCB0aGUgdmlldyB0byB0aGUgbWF4IGRhdGUuXHJcbiAgICAgICAgICB2aWV3RGF0ZSA9IG1heERhdGU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlbmQuaXNTYW1lT3JCZWZvcmUobWluRGF0ZSwgJ21vbnRoJykpIHtcclxuICAgICAgICAgIC8vIElmIHRoZSBlbmQgZGF0ZSBpcyB0aGUgc2FtZSBtb250aCBvciBiZWZvcmUgdGhlIG1pbiBkYXRlLCBzaGlmdCB0aGUgdmlldyB0byBzaG93XHJcbiAgICAgICAgICAvLyB0aGUgbW9udGggYWZ0ZXIgdGhlIG1pbiBkYXRlLiBUaGUgcHJpbWFyeSBjYWxlbmRhciB3aWxsIHNob3cgdGhlIG1pbiBkYXRlIG1vbnRoLlxyXG4gICAgICAgICAgdmlld0RhdGUgPSBtb21lbnQobWluRGF0ZSkuYWRkKDEsICdtb250aCcpLnRvRGF0ZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBPdGhlcndpc2UsIHNob3cgdGhlIGVuZCBkYXRlIG1vbnRoLlxyXG4gICAgICAgICAgdmlld0RhdGUgPSBlbmQudG9EYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0ICYmIHN0YXJ0LmlzU2FtZU9yQWZ0ZXIobWF4RGF0ZSwgJ21vbnRoJykpIHtcclxuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFuIGVuZCBkYXRlLCBhbmQgdGhlIHN0YXJ0IGRhdGUgaXMgYWZ0ZXIgdGhlIG1heCBkYXRlLCBzaG93IHRoZSBtYXggZGF0ZSBtb250aFxyXG4gICAgICAgIHZpZXdEYXRlID0gbWF4RGF0ZTtcclxuICAgICAgfSBlbHNlIGlmIChzdGFydCAmJiBzdGFydC5pc1NhbWVPckFmdGVyKG5ldyBEYXRlKCksICdtb250aCcpKSB7XHJcbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbiBlbmQgZGF0ZSwgYW5kIHRoZSBzdGFydCBkYXRlIGlzIG9uIG9yIGFmdGVyIHRoZSBjdXJyZW50IG1vbnRoLFxyXG4gICAgICAgIC8vIHNob3cgdGhlIG1vbnRoIGFmdGVyIHRoZSBzdGFydCBkYXRlLlxyXG4gICAgICAgIHZpZXdEYXRlID0gbW9tZW50KHN0YXJ0KS5hZGQoMSwgJ21vbnRoJykudG9EYXRlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBzaG93IHRoZSBjdXJyZW50IG1vbnRoLlxyXG4gICAgICAgIHZpZXdEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmlld0RhdGUgPSBzZWxlY3Rpb24gfHwgbmV3IERhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB0aGUgY3VycmVudCBjYWxlbmRhciB2aWV3IG1vZGUgaXMgdmFsaWQgZm9yIHRoZSBzZWxlY3Rpb24gbW9kZSwgdXNlIGl0LCBvdGhlcndpc2UgdXNlIHRoZSBzZWxlY3Rpb24gdmlldyBtb2RlXHJcbiAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSBjYWxlbmRhciBmcm9tIGNoYW5naW5nIHZpZXcgbW9kZXMgYXMgdGhlIHVzZXIgdHlwZXMvYmx1cnMgdGhlIHRleHRib3hlcyBhcyBsb25nIGFzIHRoZSB2aWV3IG1vZGUgaXMgdmFsaWRcclxuICAgIGNvbnN0IHZpZXdNb2RlID0gdGhpcy52YWxpZFZpZXdNb2Rlcy5pbmNsdWRlcyhjdXJyZW50Vmlldy5tb2RlKSA/IGN1cnJlbnRWaWV3Lm1vZGUgOiB0aGlzLnNlbGVjdGlvblZpZXdNb2RlO1xyXG5cclxuICAgIHJldHVybiB7IG1vZGU6IHZpZXdNb2RlLCBkYXRlOiB2aWV3RGF0ZSB9O1xyXG4gIH1cclxufVxyXG4iXX0=
|
package/esm2020/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
import moment from "moment";
|
2
|
+
import { DateInput } from "../date-input.types";
|
3
|
+
import { DateInputSelectionStrategyBase } from "./date-input-selection-strategy-base";
|
4
|
+
/**
|
5
|
+
* Selection strategy for the 'year' selection mode.
|
6
|
+
*/
|
7
|
+
export class YearSelectionStrategy extends DateInputSelectionStrategyBase {
|
8
|
+
constructor() {
|
9
|
+
super(...arguments);
|
10
|
+
this.selectionViewMode = 'year';
|
11
|
+
this.validViewModes = ['year'];
|
12
|
+
this.showSecondaryTextbox = false;
|
13
|
+
this.showSecondaryCalendar = false;
|
14
|
+
}
|
15
|
+
formatSelection(selection) {
|
16
|
+
if (!selection) {
|
17
|
+
return { textbox: null, textbox2: null };
|
18
|
+
}
|
19
|
+
// Only one date is needed for formatting since the ranges span a single year.
|
20
|
+
// There shouldn't be any case where there's only a single date but it's covered anyway.
|
21
|
+
const date = DateInput.isSelectionRange(selection) ? selection.start : selection;
|
22
|
+
return { textbox: moment(date).format('YYYY'), textbox2: null };
|
23
|
+
}
|
24
|
+
parseString(value, parseFormats, opts) {
|
25
|
+
// Including 'YY' and 'YYYY' as valid formats for year input. These aren't included in the default parse
|
26
|
+
// formats because they cause issues with the default date parsing.
|
27
|
+
return super.parseString(value, ['YY', 'YYYY', ...parseFormats], opts);
|
28
|
+
}
|
29
|
+
parseTextboxValues(value, parseFormats, opts) {
|
30
|
+
// Only a single textbox is used in year mode
|
31
|
+
const date = this.parseString(value.textbox, parseFormats, opts);
|
32
|
+
if (!date) {
|
33
|
+
return null;
|
34
|
+
}
|
35
|
+
return this.getSelectionFromDate(date);
|
36
|
+
}
|
37
|
+
getSelectionFromDate(date) {
|
38
|
+
return {
|
39
|
+
start: moment(date).startOf('year').toDate(),
|
40
|
+
end: moment(date).endOf('year').toDate()
|
41
|
+
};
|
42
|
+
}
|
43
|
+
getNewSelectionFromExisting(previousSelection) {
|
44
|
+
if (DateInput.isSelectionRange(previousSelection)) {
|
45
|
+
// Base the year range off of the existing selection's end date, falling back to the start date
|
46
|
+
const date = previousSelection.end || previousSelection.start;
|
47
|
+
if (date) {
|
48
|
+
return this.getSelectionFromDate(date);
|
49
|
+
}
|
50
|
+
}
|
51
|
+
else if (DateInput.isSelectionSingleDate(previousSelection)) {
|
52
|
+
// If the previous selection was a single date, make the range that year
|
53
|
+
return this.getSelectionFromDate(previousSelection);
|
54
|
+
}
|
55
|
+
return null;
|
56
|
+
}
|
57
|
+
getSelectionForQuickSelectDate(date) {
|
58
|
+
return this.getSelectionFromDate(date);
|
59
|
+
}
|
60
|
+
getNextSelection(selection) {
|
61
|
+
// Move the selection to the next year
|
62
|
+
if (DateInput.isSelectionRange(selection) && selection.start) {
|
63
|
+
const date = moment(selection.start).add(1, 'year');
|
64
|
+
return this.getSelectionFromDate(date.toDate());
|
65
|
+
}
|
66
|
+
// This shouldn't happen since the next stepper is disabled if the selection only has one date.
|
67
|
+
// If it does, just return the selection as-is.
|
68
|
+
return selection;
|
69
|
+
}
|
70
|
+
getPreviousSelection(selection) {
|
71
|
+
// Move the selection to the previous year
|
72
|
+
if (DateInput.isSelectionRange(selection) && selection.start) {
|
73
|
+
const date = moment(selection.start).subtract(1, 'year');
|
74
|
+
return this.getSelectionFromDate(date.toDate());
|
75
|
+
}
|
76
|
+
// This shouldn't happen since the previous stepper is disabled if the selection only has one date.
|
77
|
+
// If it does, just return the selection as-is.
|
78
|
+
return selection;
|
79
|
+
}
|
80
|
+
}
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWVhci1zZWxlY3Rpb24tc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LXNlbGVjdGlvbi1zdHJhdGVnaWVzL3llYXItc2VsZWN0aW9uLXN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdEY7O0dBRUc7QUFDSCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsOEJBQThCO0lBQXpFOztRQUNrQixzQkFBaUIsR0FBc0IsTUFBTSxDQUFDO1FBQzlDLG1CQUFjLEdBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQzdCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztJQStFaEQsQ0FBQztJQTdFQyxlQUFlLENBQUMsU0FBc0M7UUFDcEQsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUMxQztRQUVELDhFQUE4RTtRQUM5RSx3RkFBd0Y7UUFDeEYsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDakYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBRUQs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cnQgeyBDYWxlbmRhciB9IGZyb20gXCIuLi8uLi9jYWxlbmRhci9jYWxlbmRhci50eXBlc1wiO1xyXG5pbXBvcnQgeyBEYXRlSW5wdXQgfSBmcm9tIFwiLi4vZGF0ZS1pbnB1dC50eXBlc1wiO1xyXG5pbXBvcnQgeyBEYXRlSW5wdXRTZWxlY3Rpb25TdHJhdGVneUJhc2UgfSBmcm9tIFwiLi9kYXRlLWlucHV0LXNlbGVjdGlvbi1zdHJhdGVneS1iYXNlXCI7XHJcblxyXG4vKipcclxuICogU2VsZWN0aW9uIHN0cmF0ZWd5IGZvciB0aGUgJ3llYXInIHNlbGVjdGlvbiBtb2RlLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFllYXJTZWxlY3Rpb25TdHJhdGVneSBleHRlbmRzIERhdGVJbnB1dFNlbGVjdGlvblN0cmF0ZWd5QmFzZSB7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvblZpZXdNb2RlOiBDYWxlbmRhci5WaWV3TW9kZSA9ICd5ZWFyJztcclxuICBwdWJsaWMgcmVhZG9ubHkgdmFsaWRWaWV3TW9kZXM6IENhbGVuZGFyLlZpZXdNb2RlW10gPSBbJ3llYXInXTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1NlY29uZGFyeVRleHRib3ggPSBmYWxzZTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1NlY29uZGFyeUNhbGVuZGFyID0gZmFsc2U7XHJcblxyXG4gIGZvcm1hdFNlbGVjdGlvbihzZWxlY3Rpb24/OiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5UZXh0Ym94R3JvdXBbJ3ZhbHVlJ10ge1xyXG4gICAgaWYgKCFzZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIHsgdGV4dGJveDogbnVsbCwgdGV4dGJveDI6IG51bGwgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBPbmx5IG9uZSBkYXRlIGlzIG5lZWRlZCBmb3IgZm9ybWF0dGluZyBzaW5jZSB0aGUgcmFuZ2VzIHNwYW4gYSBzaW5nbGUgeWVhci5cclxuICAgIC8vIFRoZXJlIHNob3VsZG4ndCBiZSBhbnkgY2FzZSB3aGVyZSB0aGVyZSdzIG9ubHkgYSBzaW5nbGUgZGF0ZSBidXQgaXQncyBjb3ZlcmVkIGFueXdheS5cclxuICAgIGNvbnN0IGRhdGUgPSBEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb24pID8gc2VsZWN0aW9uLnN0YXJ0IDogc2VsZWN0aW9uO1xyXG4gICAgcmV0dXJuIHsgdGV4dGJveDogbW9tZW50KGRhdGUpLmZvcm1hdCgnWVlZWScpLCB0ZXh0Ym94MjogbnVsbCB9O1xyXG4gIH1cclxuXHJcbiAgcGFyc2VTdHJpbmcodmFsdWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIHBhcnNlRm9ybWF0czogc3RyaW5nW10sIG9wdHM/OiBEYXRlSW5wdXQuUGFyc2luZ09wdGlvbnMpOiBEYXRlIHwgbnVsbCB7XHJcbiAgICAvLyBJbmNsdWRpbmcgJ1lZJyBhbmQgJ1lZWVknIGFzIHZhbGlkIGZvcm1hdHMgZm9yIHllYXIgaW5wdXQuIFRoZXNlIGFyZW4ndCBpbmNsdWRlZCBpbiB0aGUgZGVmYXVsdCBwYXJzZVxyXG4gICAgLy8gZm9ybWF0cyBiZWNhdXNlIHRoZXkgY2F1c2UgaXNzdWVzIHdpdGggdGhlIGRlZmF1bHQgZGF0ZSBwYXJzaW5nLlxyXG4gICAgcmV0dXJuIHN1cGVyLnBhcnNlU3RyaW5nKHZhbHVlLCBbJ1lZJywgJ1lZWVknLCAuLi5wYXJzZUZvcm1hdHNdLCBvcHRzKTtcclxuICB9XHJcblxyXG4gIHBhcnNlVGV4dGJveFZhbHVlcyh2YWx1ZTogRGF0ZUlucHV0LlRleHRib3hHcm91cFsndmFsdWUnXSwgcGFyc2VGb3JtYXRzOiBzdHJpbmdbXSwgb3B0cz86IERhdGVJbnB1dC5QYXJzaW5nT3B0aW9ucyk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIC8vIE9ubHkgYSBzaW5nbGUgdGV4dGJveCBpcyB1c2VkIGluIHllYXIgbW9kZVxyXG4gICAgY29uc3QgZGF0ZSA9IHRoaXMucGFyc2VTdHJpbmcodmFsdWUudGV4dGJveCwgcGFyc2VGb3JtYXRzLCBvcHRzKTtcclxuXHJcbiAgICBpZiAoIWRhdGUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0aW9uRnJvbURhdGUoZGF0ZSk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3Rpb25Gcm9tRGF0ZShkYXRlOiBEYXRlKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc3RhcnQ6IG1vbWVudChkYXRlKS5zdGFydE9mKCd5ZWFyJykudG9EYXRlKCksXHJcbiAgICAgIGVuZDogbW9tZW50KGRhdGUpLmVuZE9mKCd5ZWFyJykudG9EYXRlKClcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXROZXdTZWxlY3Rpb25Gcm9tRXhpc3RpbmcocHJldmlvdXNTZWxlY3Rpb24/OiBEYXRlSW5wdXQuU2VsZWN0aW9uKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblJhbmdlKHByZXZpb3VzU2VsZWN0aW9uKSkge1xyXG4gICAgICAvLyBCYXNlIHRoZSB5ZWFyIHJhbmdlIG9mZiBvZiB0aGUgZXhpc3Rpbmcgc2VsZWN0aW9uJ3MgZW5kIGRhdGUsIGZhbGxpbmcgYmFjayB0byB0aGUgc3RhcnQgZGF0ZVxyXG4gICAgICBjb25zdCBkYXRlID0gcHJldmlvdXNTZWxlY3Rpb24uZW5kIHx8IHByZXZpb3VzU2VsZWN0aW9uLnN0YXJ0O1xyXG4gICAgICBpZiAoZGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGlvbkZyb21EYXRlKGRhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblNpbmdsZURhdGUocHJldmlvdXNTZWxlY3Rpb24pKSB7XHJcbiAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBzZWxlY3Rpb24gd2FzIGEgc2luZ2xlIGRhdGUsIG1ha2UgdGhlIHJhbmdlIHRoYXQgeWVhclxyXG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb25Gcm9tRGF0ZShwcmV2aW91c1NlbGVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3Rpb25Gb3JRdWlja1NlbGVjdERhdGUoZGF0ZTogRGF0ZSk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGlvbkZyb21EYXRlKGRhdGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV4dFNlbGVjdGlvbihzZWxlY3Rpb246IERhdGVJbnB1dC5TZWxlY3Rpb24pOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICAvLyBNb3ZlIHRoZSBzZWxlY3Rpb24gdG8gdGhlIG5leHQgeWVhclxyXG4gICAgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblJhbmdlKHNlbGVjdGlvbikgJiYgc2VsZWN0aW9uLnN0YXJ0KSB7XHJcbiAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQoc2VsZWN0aW9uLnN0YXJ0KS5hZGQoMSwgJ3llYXInKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0aW9uRnJvbURhdGUoZGF0ZS50b0RhdGUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIHNpbmNlIHRoZSBuZXh0IHN0ZXBwZXIgaXMgZGlzYWJsZWQgaWYgdGhlIHNlbGVjdGlvbiBvbmx5IGhhcyBvbmUgZGF0ZS5cclxuICAgIC8vIElmIGl0IGRvZXMsIGp1c3QgcmV0dXJuIHRoZSBzZWxlY3Rpb24gYXMtaXMuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNTZWxlY3Rpb24oc2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgLy8gTW92ZSB0aGUgc2VsZWN0aW9uIHRvIHRoZSBwcmV2aW91cyB5ZWFyXHJcbiAgICBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uKSAmJiBzZWxlY3Rpb24uc3RhcnQpIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IG1vbWVudChzZWxlY3Rpb24uc3RhcnQpLnN1YnRyYWN0KDEsICd5ZWFyJyk7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGlvbkZyb21EYXRlKGRhdGUudG9EYXRlKCkpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gc2luY2UgdGhlIHByZXZpb3VzIHN0ZXBwZXIgaXMgZGlzYWJsZWQgaWYgdGhlIHNlbGVjdGlvbiBvbmx5IGhhcyBvbmUgZGF0ZS5cclxuICAgIC8vIElmIGl0IGRvZXMsIGp1c3QgcmV0dXJuIHRoZSBzZWxlY3Rpb24gYXMtaXMuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uO1xyXG4gIH1cclxufVxyXG4iXX0=
|