@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.
Files changed (353) hide show
  1. package/{esm2022 → esm2020}/energycap-components.mjs +4 -4
  2. package/esm2020/lib/components.module.mjs +423 -0
  3. package/esm2020/lib/controls/banner/banner.component.mjs +109 -0
  4. package/esm2020/lib/controls/button/button.component.mjs +106 -0
  5. package/esm2020/lib/controls/button/copy-button-base.directive.mjs +67 -0
  6. package/{esm2022 → esm2020}/lib/controls/button/copy-button.directive.mjs +28 -28
  7. package/esm2020/lib/controls/button/copy-table-button.directive.mjs +43 -0
  8. package/esm2020/lib/controls/calendar/calendar-item.component.mjs +91 -0
  9. package/esm2020/lib/controls/calendar/calendar.component.mjs +248 -0
  10. package/esm2020/lib/controls/calendar/calendar.types.mjs +2 -0
  11. package/esm2020/lib/controls/checkbox/checkbox.component.mjs +140 -0
  12. package/{esm2022 → esm2020}/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +38 -38
  13. package/esm2020/lib/controls/combobox/combobox.component.mjs +879 -0
  14. package/esm2020/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +57 -0
  15. package/esm2020/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +62 -0
  16. package/esm2020/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +100 -0
  17. package/esm2020/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +101 -0
  18. package/esm2020/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +76 -0
  19. package/esm2020/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +79 -0
  20. package/esm2020/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +210 -0
  21. package/esm2020/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +81 -0
  22. package/esm2020/lib/controls/date-input/date-input.component.mjs +462 -0
  23. package/esm2020/lib/controls/date-input/date-input.types.mjs +44 -0
  24. package/esm2020/lib/controls/dropdown/dropdown.component.mjs +243 -0
  25. package/esm2020/lib/controls/file-upload/file-upload.component.mjs +261 -0
  26. package/esm2020/lib/controls/form-control/form-control.component.mjs +98 -0
  27. package/esm2020/lib/controls/form-control-base.mjs +151 -0
  28. package/esm2020/lib/controls/form-control-label/form-control-label.component.mjs +136 -0
  29. package/esm2020/lib/controls/form-group/form-group.component.mjs +261 -0
  30. package/{esm2022 → esm2020}/lib/controls/help-popover/help-popover.component.mjs +31 -31
  31. package/esm2020/lib/controls/item-picker/item-picker.component.mjs +329 -0
  32. package/{esm2022 → esm2020}/lib/controls/link-button/link-button.component.mjs +11 -11
  33. package/esm2020/lib/controls/menu/menu.component.mjs +485 -0
  34. package/{esm2022 → esm2020}/lib/controls/navigation/link-item.mjs +1 -1
  35. package/esm2020/lib/controls/navigation/nav-group.mjs +39 -0
  36. package/esm2020/lib/controls/navigation/nav-item-active.directive.mjs +92 -0
  37. package/{esm2022 → esm2020}/lib/controls/navigation/nav-item.mjs +1 -1
  38. package/esm2020/lib/controls/numericbox/numericbox.component.mjs +372 -0
  39. package/esm2020/lib/controls/popover/popover.component.mjs +117 -0
  40. package/{esm2022 → esm2020}/lib/controls/radio-button/radio-button-option.mjs +2 -2
  41. package/esm2020/lib/controls/radio-button/radio-button.component.mjs +82 -0
  42. package/esm2020/lib/controls/select/select.component.mjs +88 -0
  43. package/esm2020/lib/controls/tabs/tabs.component.mjs +47 -0
  44. package/esm2020/lib/controls/textbox/textbox.component.mjs +155 -0
  45. package/esm2020/lib/core/cache.service.mjs +105 -0
  46. package/esm2020/lib/core/custom-validators.mjs +29 -0
  47. package/esm2020/lib/core/date-time-helper.mjs +228 -0
  48. package/esm2020/lib/core/error.service.mjs +61 -0
  49. package/esm2020/lib/core/router-helper.service.mjs +111 -0
  50. package/esm2020/lib/core/scroll.service.mjs +89 -0
  51. package/{esm2022 → esm2020}/lib/core/telemetry-tracker.service.mjs +16 -16
  52. package/{esm2022 → esm2020}/lib/core/telemetry.service.mjs +38 -38
  53. package/esm2020/lib/core/validation-message.service.mjs +185 -0
  54. package/{esm2022 → esm2020}/lib/core/validation-patterns.mjs +30 -30
  55. package/esm2020/lib/core/window.service.mjs +186 -0
  56. package/esm2020/lib/display/app-bar/app-bar.component.mjs +46 -0
  57. package/esm2020/lib/display/avatar/avatar.component.mjs +67 -0
  58. package/esm2020/lib/display/avatar/avatar.service.mjs +64 -0
  59. package/esm2020/lib/display/confirm/confirm.component.mjs +168 -0
  60. package/{esm2022 → esm2020}/lib/display/dialog/dialog-content.mjs +1 -1
  61. package/esm2020/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -0
  62. package/{esm2022 → esm2020}/lib/display/dialog/dialog-types.mjs +76 -76
  63. package/esm2020/lib/display/dialog/dialog.component.mjs +281 -0
  64. package/{esm2022 → esm2020}/lib/display/dialog/dialog.service.mjs +71 -71
  65. package/{esm2022 → esm2020}/lib/display/help/help-types.mjs +1 -1
  66. package/esm2020/lib/display/hierarchy/hierarchy-base.mjs +111 -0
  67. package/{esm2022 → esm2020}/lib/display/hierarchy/hierarchy-mocks.spec.mjs +53 -53
  68. package/esm2020/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +61 -0
  69. package/esm2020/lib/display/item-display/item-display.component.mjs +81 -0
  70. package/esm2020/lib/display/json-display/json-display.component.mjs +47 -0
  71. package/esm2020/lib/display/resizable/resizable-base.mjs +120 -0
  72. package/{esm2022 → esm2020}/lib/display/resizable/resizable.component.mjs +52 -52
  73. package/{esm2022 → esm2020}/lib/display/spinner/spinner.component.mjs +12 -12
  74. package/esm2020/lib/display/splash/splash.component.mjs +42 -0
  75. package/{esm2022 → esm2020}/lib/display/splash/splash.service.mjs +35 -35
  76. package/{esm2022 → esm2020}/lib/display/table/resizable-column.component.mjs +20 -20
  77. package/esm2020/lib/display/table/resizable-table.directive.mjs +227 -0
  78. package/esm2020/lib/display/table/searchable-table.component.mjs +342 -0
  79. package/{esm2022 → esm2020}/lib/display/table/table-detail-row.component.mjs +19 -19
  80. package/esm2020/lib/display/table/table-locked-column.component.mjs +58 -0
  81. package/{esm2022 → esm2020}/lib/display/table/table-master-header-row.component.mjs +14 -14
  82. package/esm2020/lib/display/table/table-master-row.component.mjs +163 -0
  83. package/esm2020/lib/display/table/table-pagination.component.mjs +155 -0
  84. package/esm2020/lib/display/table/table-selectable-row.component.mjs +235 -0
  85. package/esm2020/lib/display/table/table.component.mjs +249 -0
  86. package/esm2020/lib/display/tags/tag.mjs +18 -0
  87. package/esm2020/lib/display/tags/tags.component.mjs +77 -0
  88. package/esm2020/lib/display/toast/toast/toast.component.mjs +77 -0
  89. package/{esm2022 → esm2020}/lib/display/toast/toast-types.mjs +7 -7
  90. package/{esm2022 → esm2020}/lib/display/toast/toast.service.mjs +35 -35
  91. package/esm2020/lib/display/toast/toaster/toaster.component.mjs +114 -0
  92. package/{esm2022 → esm2020}/lib/display/tooltip/tooltip.component.mjs +28 -28
  93. package/{esm2022 → esm2020}/lib/display/tooltip/tooltip.service.mjs +78 -78
  94. package/esm2020/lib/display/tooltip-directive/tooltip.directive.mjs +173 -0
  95. package/{esm2022 → esm2020}/lib/display/tour/tour-types.mjs +33 -33
  96. package/esm2020/lib/display/tour/tour.component.mjs +398 -0
  97. package/esm2020/lib/display/tour/tour.service.mjs +75 -0
  98. package/esm2020/lib/display/tree/tree.component.mjs +135 -0
  99. package/esm2020/lib/display/view-overlay/view-overlay.component.mjs +58 -0
  100. package/esm2020/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -0
  101. package/esm2020/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -0
  102. package/esm2020/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +100 -0
  103. package/esm2020/lib/shared/directives/popup/popup-container.directive.mjs +163 -0
  104. package/esm2020/lib/shared/display/pipes/date-display.pipe.mjs +50 -0
  105. package/esm2020/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -0
  106. package/esm2020/lib/shared/display/pipes/relative-date.pipe.mjs +62 -0
  107. package/esm2020/lib/shared/display/pipes/row-count.pipe.mjs +48 -0
  108. package/esm2020/lib/shared/display/pipes/time-display.pipe.mjs +41 -0
  109. package/esm2020/lib/shared/display.mjs +6 -0
  110. package/esm2020/lib/shared/form-group.helper.mjs +67 -0
  111. package/esm2020/lib/shared/json-helper.mjs +19 -0
  112. package/esm2020/lib/shared/lodash-helper.mjs +51 -0
  113. package/esm2020/lib/shared/page/page-base/page-base.component.mjs +387 -0
  114. package/{esm2022 → esm2020}/lib/shared/page/page-statuses.mjs +22 -22
  115. package/{esm2022 → esm2020}/lib/shared/page/page-title/page-title.component.mjs +23 -23
  116. package/esm2020/lib/shared/page/page-view/page-view.component.mjs +147 -0
  117. package/{esm2022 → esm2020}/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +16 -16
  118. package/{esm2022 → esm2020}/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +16 -16
  119. package/{esm2022 → esm2020}/lib/shared/testing/page-base-component-test-helper.spec.mjs +37 -37
  120. package/esm2020/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +98 -0
  121. package/{esm2022 → esm2020}/lib/shared/testing/public-mocks.spec.mjs +148 -148
  122. package/{esm2022 → esm2020}/lib/shared/testing/spy-factory.spec.mjs +39 -39
  123. package/{esm2022 → esm2020}/lib/shared/testing/translation-mocks.spec.mjs +56 -56
  124. package/{esm2022 → esm2020}/lib/shared/user-preference.service.mjs +17 -17
  125. package/esm2020/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -0
  126. package/{esm2022 → esm2020}/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -68
  127. package/{esm2022 → esm2020}/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -18
  128. package/esm2020/public-api.mjs +117 -0
  129. package/fesm2015/energycap-components.mjs +13370 -0
  130. package/fesm2015/energycap-components.mjs.map +1 -0
  131. package/{fesm2022 → fesm2020}/energycap-components.mjs +12971 -11819
  132. package/fesm2020/energycap-components.mjs.map +1 -0
  133. package/index.d.ts +5 -5
  134. package/lib/components.module.d.ts +92 -91
  135. package/lib/controls/banner/banner.component.d.ts +50 -50
  136. package/lib/controls/button/button.component.d.ts +78 -78
  137. package/lib/controls/button/copy-button-base.directive.d.ts +20 -20
  138. package/lib/controls/button/copy-button.directive.d.ts +14 -14
  139. package/lib/controls/button/copy-table-button.directive.d.ts +19 -19
  140. package/lib/controls/calendar/calendar-item.component.d.ts +22 -17
  141. package/lib/controls/calendar/calendar.component.d.ts +52 -54
  142. package/lib/controls/calendar/calendar.types.d.ts +11 -7
  143. package/lib/controls/checkbox/checkbox.component.d.ts +65 -65
  144. package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +25 -25
  145. package/lib/controls/combobox/combobox.component.d.ts +418 -418
  146. package/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.d.ts +42 -0
  147. package/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.d.ts +21 -0
  148. package/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.d.ts +21 -0
  149. package/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.d.ts +21 -0
  150. package/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.d.ts +18 -0
  151. package/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.d.ts +18 -0
  152. package/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.d.ts +21 -0
  153. package/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.d.ts +20 -0
  154. package/lib/controls/date-input/date-input.component.d.ts +115 -80
  155. package/lib/controls/date-input/date-input.types.d.ts +62 -0
  156. package/lib/controls/dropdown/dropdown.component.d.ts +161 -161
  157. package/lib/controls/file-upload/file-upload.component.d.ts +124 -124
  158. package/lib/controls/form-control/form-control.component.d.ts +28 -30
  159. package/lib/controls/form-control-base.d.ts +110 -110
  160. package/lib/controls/form-control-label/form-control-label.component.d.ts +73 -73
  161. package/lib/controls/form-group/form-group.component.d.ts +105 -105
  162. package/lib/controls/help-popover/help-popover.component.d.ts +11 -11
  163. package/lib/controls/item-picker/item-picker.component.d.ts +164 -164
  164. package/lib/controls/link-button/link-button.component.d.ts +5 -5
  165. package/lib/controls/menu/menu.component.d.ts +255 -255
  166. package/lib/controls/navigation/link-item.d.ts +32 -32
  167. package/lib/controls/navigation/nav-group.d.ts +18 -18
  168. package/lib/controls/navigation/nav-item-active.directive.d.ts +42 -42
  169. package/lib/controls/navigation/nav-item.d.ts +31 -31
  170. package/lib/controls/numericbox/numericbox.component.d.ts +148 -148
  171. package/lib/controls/popover/popover.component.d.ts +51 -51
  172. package/lib/controls/radio-button/radio-button-option.d.ts +19 -19
  173. package/lib/controls/radio-button/radio-button.component.d.ts +53 -53
  174. package/lib/controls/select/select.component.d.ts +44 -44
  175. package/lib/controls/tabs/tabs.component.d.ts +30 -30
  176. package/lib/controls/textbox/textbox.component.d.ts +107 -107
  177. package/lib/core/cache.service.d.ts +33 -33
  178. package/lib/core/custom-validators.d.ts +20 -20
  179. package/lib/core/date-time-helper.d.ts +101 -101
  180. package/lib/core/error.service.d.ts +20 -20
  181. package/lib/core/router-helper.service.d.ts +48 -48
  182. package/lib/core/scroll.service.d.ts +36 -36
  183. package/lib/core/telemetry-tracker.service.d.ts +13 -13
  184. package/lib/core/telemetry.service.d.ts +31 -31
  185. package/lib/core/validation-message.service.d.ts +26 -26
  186. package/lib/core/validation-patterns.d.ts +22 -22
  187. package/lib/core/window.service.d.ts +116 -116
  188. package/lib/display/app-bar/app-bar.component.d.ts +20 -20
  189. package/lib/display/avatar/avatar.component.d.ts +35 -35
  190. package/lib/display/avatar/avatar.service.d.ts +24 -24
  191. package/lib/display/confirm/confirm.component.d.ts +123 -123
  192. package/lib/display/dialog/dialog-content.d.ts +19 -19
  193. package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +32 -32
  194. package/lib/display/dialog/dialog-types.d.ts +130 -130
  195. package/lib/display/dialog/dialog.component.d.ts +120 -120
  196. package/lib/display/dialog/dialog.service.d.ts +48 -48
  197. package/lib/display/help/help-types.d.ts +33 -33
  198. package/lib/display/hierarchy/hierarchy-base.d.ts +97 -97
  199. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -53
  200. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +34 -34
  201. package/lib/display/item-display/item-display.component.d.ts +43 -43
  202. package/lib/display/json-display/json-display.component.d.ts +16 -16
  203. package/lib/display/resizable/resizable-base.d.ts +67 -67
  204. package/lib/display/resizable/resizable.component.d.ts +31 -31
  205. package/lib/display/spinner/spinner.component.d.ts +5 -5
  206. package/lib/display/splash/splash.component.d.ts +16 -16
  207. package/lib/display/splash/splash.service.d.ts +22 -22
  208. package/lib/display/table/resizable-column.component.d.ts +10 -10
  209. package/lib/display/table/resizable-table.directive.d.ts +93 -93
  210. package/lib/display/table/searchable-table.component.d.ts +206 -206
  211. package/lib/display/table/table-detail-row.component.d.ts +8 -8
  212. package/lib/display/table/table-locked-column.component.d.ts +20 -20
  213. package/lib/display/table/table-master-header-row.component.d.ts +9 -9
  214. package/lib/display/table/table-master-row.component.d.ts +113 -113
  215. package/lib/display/table/table-pagination.component.d.ts +91 -91
  216. package/lib/display/table/table-selectable-row.component.d.ts +102 -102
  217. package/lib/display/table/table.component.d.ts +121 -121
  218. package/lib/display/tags/tag.d.ts +18 -18
  219. package/lib/display/tags/tags.component.d.ts +48 -48
  220. package/lib/display/toast/toast/toast.component.d.ts +23 -23
  221. package/lib/display/toast/toast-types.d.ts +24 -24
  222. package/lib/display/toast/toast.service.d.ts +20 -20
  223. package/lib/display/toast/toaster/toaster.component.d.ts +35 -35
  224. package/lib/display/tooltip/tooltip.component.d.ts +70 -70
  225. package/lib/display/tooltip/tooltip.service.d.ts +16 -16
  226. package/lib/display/tooltip-directive/tooltip.directive.d.ts +44 -44
  227. package/lib/display/tour/tour-types.d.ts +70 -70
  228. package/lib/display/tour/tour.component.d.ts +147 -147
  229. package/lib/display/tour/tour.service.d.ts +38 -38
  230. package/lib/display/tree/tree.component.d.ts +75 -75
  231. package/lib/display/view-overlay/view-overlay.component.d.ts +38 -38
  232. package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +14 -14
  233. package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +60 -60
  234. package/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.d.ts +23 -0
  235. package/lib/shared/directives/popup/popup-container.directive.d.ts +101 -101
  236. package/lib/shared/display/pipes/date-display.pipe.d.ts +21 -21
  237. package/lib/shared/display/pipes/highlight-text.pipe.d.ts +9 -9
  238. package/lib/shared/display/pipes/relative-date.pipe.d.ts +36 -36
  239. package/lib/shared/display/pipes/row-count.pipe.d.ts +23 -23
  240. package/lib/shared/display/pipes/time-display.pipe.d.ts +18 -18
  241. package/lib/shared/display.d.ts +42 -42
  242. package/lib/shared/form-group.helper.d.ts +31 -31
  243. package/lib/shared/json-helper.d.ts +7 -7
  244. package/lib/shared/lodash-helper.d.ts +18 -18
  245. package/lib/shared/page/page-base/page-base.component.d.ts +259 -259
  246. package/lib/shared/page/page-statuses.d.ts +13 -13
  247. package/lib/shared/page/page-title/page-title.component.d.ts +9 -9
  248. package/lib/shared/page/page-view/page-view.component.d.ts +102 -102
  249. package/lib/shared/testing/copy-button-base-test-injector-factory.spec.d.ts +4 -4
  250. package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -4
  251. package/lib/shared/testing/page-base-component-test-helper.spec.d.ts +30 -30
  252. package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +28 -28
  253. package/lib/shared/testing/public-mocks.spec.d.ts +90 -90
  254. package/lib/shared/testing/spy-factory.spec.d.ts +27 -27
  255. package/lib/shared/testing/translation-mocks.spec.d.ts +30 -30
  256. package/lib/shared/user-preference.service.d.ts +13 -13
  257. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +134 -134
  258. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +27 -27
  259. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +10 -10
  260. package/package.json +18 -12
  261. package/public-api.d.ts +113 -111
  262. package/schematics/rxjs-7-upgrade/index.d.ts +3 -3
  263. package/schematics/rxjs-7-upgrade/index.js +67 -67
  264. package/schematics/rxjs-7-upgrade/index.js.map +1 -1
  265. package/schematics/rxjs-7-upgrade/schema.d.ts +4 -4
  266. package/schematics/rxjs-7-upgrade/schema.js +2 -2
  267. package/schematics/utilities/typescript.d.ts +7 -7
  268. package/schematics/utilities/typescript.js +41 -41
  269. package/schematics/utilities/workspace.d.ts +8 -8
  270. package/schematics/utilities/workspace.js +71 -71
  271. package/schematics/utilities/workspace.js.map +1 -1
  272. package/src/assets/locales/en_US.json +9 -1
  273. package/esm2022/lib/components.module.mjs +0 -418
  274. package/esm2022/lib/controls/banner/banner.component.mjs +0 -109
  275. package/esm2022/lib/controls/button/button.component.mjs +0 -106
  276. package/esm2022/lib/controls/button/copy-button-base.directive.mjs +0 -67
  277. package/esm2022/lib/controls/button/copy-table-button.directive.mjs +0 -43
  278. package/esm2022/lib/controls/calendar/calendar-item.component.mjs +0 -59
  279. package/esm2022/lib/controls/calendar/calendar.component.mjs +0 -200
  280. package/esm2022/lib/controls/calendar/calendar.types.mjs +0 -4
  281. package/esm2022/lib/controls/checkbox/checkbox.component.mjs +0 -140
  282. package/esm2022/lib/controls/combobox/combobox.component.mjs +0 -879
  283. package/esm2022/lib/controls/date-input/date-input.component.mjs +0 -256
  284. package/esm2022/lib/controls/dropdown/dropdown.component.mjs +0 -243
  285. package/esm2022/lib/controls/file-upload/file-upload.component.mjs +0 -261
  286. package/esm2022/lib/controls/form-control/form-control.component.mjs +0 -104
  287. package/esm2022/lib/controls/form-control-base.mjs +0 -151
  288. package/esm2022/lib/controls/form-control-label/form-control-label.component.mjs +0 -136
  289. package/esm2022/lib/controls/form-group/form-group.component.mjs +0 -261
  290. package/esm2022/lib/controls/item-picker/item-picker.component.mjs +0 -329
  291. package/esm2022/lib/controls/menu/menu.component.mjs +0 -485
  292. package/esm2022/lib/controls/navigation/nav-group.mjs +0 -39
  293. package/esm2022/lib/controls/navigation/nav-item-active.directive.mjs +0 -92
  294. package/esm2022/lib/controls/numericbox/numericbox.component.mjs +0 -372
  295. package/esm2022/lib/controls/popover/popover.component.mjs +0 -117
  296. package/esm2022/lib/controls/radio-button/radio-button.component.mjs +0 -82
  297. package/esm2022/lib/controls/select/select.component.mjs +0 -88
  298. package/esm2022/lib/controls/tabs/tabs.component.mjs +0 -47
  299. package/esm2022/lib/controls/textbox/textbox.component.mjs +0 -155
  300. package/esm2022/lib/core/cache.service.mjs +0 -105
  301. package/esm2022/lib/core/custom-validators.mjs +0 -29
  302. package/esm2022/lib/core/date-time-helper.mjs +0 -220
  303. package/esm2022/lib/core/error.service.mjs +0 -61
  304. package/esm2022/lib/core/router-helper.service.mjs +0 -111
  305. package/esm2022/lib/core/scroll.service.mjs +0 -89
  306. package/esm2022/lib/core/validation-message.service.mjs +0 -185
  307. package/esm2022/lib/core/window.service.mjs +0 -186
  308. package/esm2022/lib/display/app-bar/app-bar.component.mjs +0 -46
  309. package/esm2022/lib/display/avatar/avatar.component.mjs +0 -67
  310. package/esm2022/lib/display/avatar/avatar.service.mjs +0 -64
  311. package/esm2022/lib/display/confirm/confirm.component.mjs +0 -168
  312. package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +0 -63
  313. package/esm2022/lib/display/dialog/dialog.component.mjs +0 -281
  314. package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +0 -111
  315. package/esm2022/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +0 -61
  316. package/esm2022/lib/display/item-display/item-display.component.mjs +0 -81
  317. package/esm2022/lib/display/json-display/json-display.component.mjs +0 -47
  318. package/esm2022/lib/display/resizable/resizable-base.mjs +0 -120
  319. package/esm2022/lib/display/splash/splash.component.mjs +0 -42
  320. package/esm2022/lib/display/table/resizable-table.directive.mjs +0 -227
  321. package/esm2022/lib/display/table/searchable-table.component.mjs +0 -342
  322. package/esm2022/lib/display/table/table-locked-column.component.mjs +0 -58
  323. package/esm2022/lib/display/table/table-master-row.component.mjs +0 -163
  324. package/esm2022/lib/display/table/table-pagination.component.mjs +0 -155
  325. package/esm2022/lib/display/table/table-selectable-row.component.mjs +0 -235
  326. package/esm2022/lib/display/table/table.component.mjs +0 -249
  327. package/esm2022/lib/display/tags/tag.mjs +0 -18
  328. package/esm2022/lib/display/tags/tags.component.mjs +0 -77
  329. package/esm2022/lib/display/toast/toast/toast.component.mjs +0 -77
  330. package/esm2022/lib/display/toast/toaster/toaster.component.mjs +0 -114
  331. package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +0 -173
  332. package/esm2022/lib/display/tour/tour.component.mjs +0 -398
  333. package/esm2022/lib/display/tour/tour.service.mjs +0 -75
  334. package/esm2022/lib/display/tree/tree.component.mjs +0 -135
  335. package/esm2022/lib/display/view-overlay/view-overlay.component.mjs +0 -58
  336. package/esm2022/lib/shared/directives/click-area-for/click-area-for.directive.mjs +0 -32
  337. package/esm2022/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +0 -111
  338. package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +0 -166
  339. package/esm2022/lib/shared/display/pipes/date-display.pipe.mjs +0 -50
  340. package/esm2022/lib/shared/display/pipes/highlight-text.pipe.mjs +0 -30
  341. package/esm2022/lib/shared/display/pipes/relative-date.pipe.mjs +0 -62
  342. package/esm2022/lib/shared/display/pipes/row-count.pipe.mjs +0 -48
  343. package/esm2022/lib/shared/display/pipes/time-display.pipe.mjs +0 -41
  344. package/esm2022/lib/shared/display.mjs +0 -6
  345. package/esm2022/lib/shared/form-group.helper.mjs +0 -67
  346. package/esm2022/lib/shared/json-helper.mjs +0 -19
  347. package/esm2022/lib/shared/lodash-helper.mjs +0 -52
  348. package/esm2022/lib/shared/page/page-base/page-base.component.mjs +0 -387
  349. package/esm2022/lib/shared/page/page-view/page-view.component.mjs +0 -147
  350. package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +0 -98
  351. package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +0 -246
  352. package/esm2022/public-api.mjs +0 -115
  353. package/fesm2022/energycap-components.mjs.map +0 -1
@@ -0,0 +1,57 @@
1
+ import moment from "moment";
2
+ import { DateInput } from "../date-input.types";
3
+ /**
4
+ * Contains the logic for selecting, formatting, and parsing date dates for a specific selection mode.
5
+ */
6
+ export class DateInputSelectionStrategyBase {
7
+ /** Parses the string into a date using the provided parse formats. */
8
+ parseString(value, parseFormats, opts) {
9
+ if (!value) {
10
+ return null;
11
+ }
12
+ const date = moment(value, parseFormats);
13
+ if (date.isValid()) {
14
+ // If we're in a temporary state (when the user is typing in a textbox), we need to set the year to the current year if it's before the min year
15
+ // This prevents the calendars from showing unhelpful dates that are in the distant past before the user finishes typing in the date.
16
+ // We don't do this modification when the real selection happens on textbox blur.
17
+ if (opts?.shiftToCurrentYearIfBelow && date.isBefore(opts.shiftToCurrentYearIfBelow)) {
18
+ date.set('year', moment().year());
19
+ }
20
+ return date.toDate();
21
+ }
22
+ return null;
23
+ }
24
+ /** Returns a new selection for the provided date. */
25
+ getSelectionForQuickSelectDate(date, existingSelection) {
26
+ return this.getSelectionFromDate(date, existingSelection);
27
+ }
28
+ /** Returns the view for the primary calendar for the selection and selection mode */
29
+ getPrimaryCalendarView(selection, minDate, maxDate, currentView) {
30
+ let date;
31
+ // If we have a range, use the end date, defaulting to the start date or today
32
+ if (DateInput.isSelectionRange(selection)) {
33
+ date = selection.end || selection.start || new Date();
34
+ // If we have a single date, use it, defaulting to today
35
+ }
36
+ else {
37
+ date = selection || new Date();
38
+ }
39
+ // Ensure the date is within the min and max dates
40
+ date = date < minDate ? minDate : date;
41
+ date = date > maxDate ? maxDate : date;
42
+ // If the current calendar view mode is valid for the selection mode, use it, otherwise use the selection view mode
43
+ // This prevents the calendar from changing view modes as the user types/blurs the textboxes as long as the view mode is valid
44
+ const viewMode = this.validViewModes.includes(currentView.mode) ? currentView.mode : this.selectionViewMode;
45
+ return { mode: viewMode, date };
46
+ }
47
+ ;
48
+ /**
49
+ * Returns the view for the secondary calendar for the selection and selection mode.
50
+ * This is is only used by the range selection strategy. All others just return the current date.
51
+ */
52
+ getSecondaryCalendarView(selection, minDate, maxDate, currentView) {
53
+ return { mode: this.selectionViewMode, date: new Date() };
54
+ }
55
+ ;
56
+ }
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC1zZWxlY3Rpb24tc3RyYXRlZ3ktYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9kYXRlLWlucHV0L2RhdGUtaW5wdXQtc2VsZWN0aW9uLXN0cmF0ZWdpZXMvZGF0ZS1pbnB1dC1zZWxlY3Rpb24tc3RyYXRlZ3ktYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWhEOztHQUVHO0FBQ0gsTUFBTSxPQUFnQiw4QkFBOEI7SUFTbEQsc0VBQXNFO0lBQ3RFLFdBQVcsQ0FBQyxLQUFnQyxFQUFFLFlBQXNCLEVBQUUsSUFBK0I7UUFDbkcsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRXpDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2xCLGdKQUFnSjtZQUNoSixxSUFBcUk7WUFDckksaUZBQWlGO1lBQ2pGLElBQUksSUFBSSxFQUFFLHlCQUF5QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQUU7Z0JBQ3BGLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7YUFDbkM7WUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUN0QjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQWFELHFEQUFxRDtJQUNyRCw4QkFBOEIsQ0FBQyxJQUFVLEVBQUUsaUJBQThDO1FBQ3ZGLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFNRCxxRkFBcUY7SUFDckYsc0JBQXNCLENBQUMsU0FBcUMsRUFBRSxPQUFhLEVBQUUsT0FBYSxFQUFFLFdBQTBCO1FBQ3BILElBQUksSUFBVSxDQUFDO1FBRWYsOEVBQThFO1FBQzlFLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3pDLElBQUksR0FBRyxTQUFTLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN4RCx3REFBd0Q7U0FDdkQ7YUFBTTtZQUNMLElBQUksR0FBRyxTQUFTLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztTQUNoQztRQUVELGtEQUFrRDtRQUNsRCxJQUFJLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdkMsSUFBSSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRXZDLG1IQUFtSDtRQUNuSCw4SEFBOEg7UUFDOUgsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFFNUcsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUFBLENBQUM7SUFFRjs7O09BR0c7SUFDSCx3QkFBd0IsQ0FBQyxTQUFxQyxFQUFFLE9BQWEsRUFBRSxPQUFhLEVBQUUsV0FBMEI7UUFDdEgsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQTtJQUMzRCxDQUFDO0lBQUEsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSBcIi4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyLnR5cGVzXCI7XHJcbmltcG9ydCB7IERhdGVJbnB1dCB9IGZyb20gXCIuLi9kYXRlLWlucHV0LnR5cGVzXCI7XHJcblxyXG4vKipcclxuICogQ29udGFpbnMgdGhlIGxvZ2ljIGZvciBzZWxlY3RpbmcsIGZvcm1hdHRpbmcsIGFuZCBwYXJzaW5nIGRhdGUgZGF0ZXMgZm9yIGEgc3BlY2lmaWMgc2VsZWN0aW9uIG1vZGUuXHJcbiAqL1xyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGF0ZUlucHV0U2VsZWN0aW9uU3RyYXRlZ3lCYXNlIHtcclxuICAvKiogVGhlIGNhbGVuZGFyIHZpZXcgbW9kZSB3aGVyZSBzZWxlY3Rpb25zIG9jY3VyIGZvciB0aGlzIG1vZGUuIFRoaXMgaXMgdXNlZCB0byB6b29tIHRoZSBjYWxlbmRhciBpbnRvIHRoZSBzZWxlY3Rpb24gKi9cclxuICBhYnN0cmFjdCByZWFkb25seSBzZWxlY3Rpb25WaWV3TW9kZTogQ2FsZW5kYXIuVmlld01vZGU7XHJcbiAgLyoqIFRoZSBsaXN0IG9mIHZpZXcgbW9kZXMgdGhhdCBhcmUgYWNjZXNzaWJsZSBieSB0aGlzIHNlbGVjdGlvbiBtb2RlLiBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBjYWxlbmRhciB2aWV3IG5lZWRzIHRvIGJlIGNoYW5nZWQgb3Igbm90IG9uIHNlbGVjdGlvbiBjaGFuZ2UuICovXHJcbiAgYWJzdHJhY3QgcmVhZG9ubHkgdmFsaWRWaWV3TW9kZXM6IENhbGVuZGFyLlZpZXdNb2RlW107XHJcbiAgLyoqIFdoZXRoZXIgdGhlIHNlY29uZGFyeSB0ZXh0Ym94IHNob3VsZCBiZSBzaG93biBmb3IgdGhpcyBzZWxlY3Rpb24gbW9kZSAqL1xyXG4gIGFic3RyYWN0IHJlYWRvbmx5IHNob3dTZWNvbmRhcnlUZXh0Ym94OiBib29sZWFuO1xyXG4gIC8qKiBXaGV0aGVyIHRoZSBzZWNvbmRhcnkgY2FsZW5kYXIgc2hvdWxkIGJlIHNob3duIGZvciB0aGlzIHNlbGVjdGlvbiBtb2RlICovXHJcbiAgYWJzdHJhY3QgcmVhZG9ubHkgc2hvd1NlY29uZGFyeUNhbGVuZGFyOiBib29sZWFuO1xyXG4gIC8qKiBQYXJzZXMgdGhlIHN0cmluZyBpbnRvIGEgZGF0ZSB1c2luZyB0aGUgcHJvdmlkZWQgcGFyc2UgZm9ybWF0cy4gKi9cclxuICBwYXJzZVN0cmluZyh2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyc2VGb3JtYXRzOiBzdHJpbmdbXSwgb3B0cz86IERhdGVJbnB1dC5QYXJzaW5nT3B0aW9ucyk6IERhdGUgfCBudWxsIHtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRlID0gbW9tZW50KHZhbHVlLCBwYXJzZUZvcm1hdHMpO1xyXG5cclxuICAgIGlmIChkYXRlLmlzVmFsaWQoKSkge1xyXG4gICAgICAvLyBJZiB3ZSdyZSBpbiBhIHRlbXBvcmFyeSBzdGF0ZSAod2hlbiB0aGUgdXNlciBpcyB0eXBpbmcgaW4gYSB0ZXh0Ym94KSwgd2UgbmVlZCB0byBzZXQgdGhlIHllYXIgdG8gdGhlIGN1cnJlbnQgeWVhciBpZiBpdCdzIGJlZm9yZSB0aGUgbWluIHllYXJcclxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgY2FsZW5kYXJzIGZyb20gc2hvd2luZyB1bmhlbHBmdWwgZGF0ZXMgdGhhdCBhcmUgaW4gdGhlIGRpc3RhbnQgcGFzdCBiZWZvcmUgdGhlIHVzZXIgZmluaXNoZXMgdHlwaW5nIGluIHRoZSBkYXRlLlxyXG4gICAgICAvLyBXZSBkb24ndCBkbyB0aGlzIG1vZGlmaWNhdGlvbiB3aGVuIHRoZSByZWFsIHNlbGVjdGlvbiBoYXBwZW5zIG9uIHRleHRib3ggYmx1ci5cclxuICAgICAgaWYgKG9wdHM/LnNoaWZ0VG9DdXJyZW50WWVhcklmQmVsb3cgJiYgZGF0ZS5pc0JlZm9yZShvcHRzLnNoaWZ0VG9DdXJyZW50WWVhcklmQmVsb3cpKSB7XHJcbiAgICAgICAgZGF0ZS5zZXQoJ3llYXInLCBtb21lbnQoKS55ZWFyKCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZGF0ZS50b0RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbiAgLyoqIEZvcm1hdHMgYSBkYXRlIGlucHV0IHNlbGVjdGlvbiBpbnRvIHZhbHVlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGRhdGUgaW5wdXQncyB0ZXh0Ym94ZXMuICovXHJcbiAgYWJzdHJhY3QgZm9ybWF0U2VsZWN0aW9uKHNlbGVjdGlvbj86IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKTogRGF0ZUlucHV0LlRleHRib3hHcm91cFsndmFsdWUnXTtcclxuICAvKiogXHJcbiAgICogUGFyc2VzIHRoZSBkYXRlIGlucHV0J3MgdmFsdWVzIGludG8gYSBkYXRlIHNlbGVjdGlvbiB0byBkaXNwbGF5IGluIHRoZSBjYWxlbmRhcnMuXHJcbiAgICogYHBhcnNlRnJvbUVuZGAgY29udHJvbHMgd2hldGhlciB0aGUgZml4ZWQgcmFuZ2UgbW9kZXMgKGxhc3Q3ZGF5cywgbGFzdDI4ZGF5cykgd2lsbCBrZXkgb2ZmIHRoZSBlbmQgZGF0ZSBpbnN0ZWFkIG9mIHRoZSBzdGFydCBkYXRlLlxyXG4gICAqIFRoaXMgaXMgdXNlZCB3aGVuIHRoZSB1c2VyIGlzIHR5cGluZyBpbiB0aGUgZW5kIGRhdGUgdGV4dGJveC5cclxuICAgKi9cclxuICBhYnN0cmFjdCBwYXJzZVRleHRib3hWYWx1ZXModmFsdWU6IERhdGVJbnB1dC5UZXh0Ym94R3JvdXBbJ3ZhbHVlJ10sIHBhcnNlRm9ybWF0czogc3RyaW5nW10sIG9wdHM/OiBEYXRlSW5wdXQuUGFyc2luZ09wdGlvbnMpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbDtcclxuICAvKiogUmV0dXJucyBhIHNlbGVjdGlvbiBnaXZlbiBhIGRhdGUgYW5kIGFuIGV4aXN0aW5nIHNlbGVjdGlvbiAoaW4gdGhlIGNhc2Ugb2YgZGF0ZSByYW5nZXMpLiBDYWxsZWQgd2hlbiBhIGRhdGUgaXMgY2xpY2tlZCBpbiB0aGUgY2FsZW5kYXJzLiAqL1xyXG4gIGFic3RyYWN0IGdldFNlbGVjdGlvbkZyb21EYXRlKGRhdGU6IERhdGUsIGV4aXN0aW5nU2VsZWN0aW9uPzogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbDtcclxuICAvKiogUmV0dXJucyBhIG5ldyBzZWxlY3Rpb24gdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGdpdmVuIHByZXZpb3VzIHNlbGVjdGlvbiBmcm9tIGEgZGlmZmVyZW50IHNlbGVjdGlvbiBtb2RlICovXHJcbiAgYWJzdHJhY3QgZ2V0TmV3U2VsZWN0aW9uRnJvbUV4aXN0aW5nKHByZXZpb3VzU2VsZWN0aW9uPzogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbDtcclxuICAvKiogUmV0dXJucyBhIG5ldyBzZWxlY3Rpb24gZm9yIHRoZSBwcm92aWRlZCBkYXRlLiAqL1xyXG4gIGdldFNlbGVjdGlvbkZvclF1aWNrU2VsZWN0RGF0ZShkYXRlOiBEYXRlLCBleGlzdGluZ1NlbGVjdGlvbj86IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0aW9uRnJvbURhdGUoZGF0ZSwgZXhpc3RpbmdTZWxlY3Rpb24pO1xyXG4gIH1cclxuICAvKiogUmV0dXJucyB0aGUgbmV4dCBzZWxlY3Rpb24uIENhbGxlZCBieSB0aGUgZGF0ZSBpbnB1dCBzdGVwcGVycyB0byBtb3ZlIHRoZSByYW5nZS4gKi9cclxuICBhYnN0cmFjdCBnZXROZXh0U2VsZWN0aW9uKHNlbGVjdGlvbjogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbDtcclxuICAvKiogUmV0dXJucyB0aGUgcHJldmlvdXMgc2VsZWN0aW9uLiBDYWxsZWQgYnkgdGhlIGRhdGUgaW5wdXQgc3RlcHBlcnMgdG8gbW92ZSB0aGUgcmFuZ2UuICovXHJcbiAgYWJzdHJhY3QgZ2V0UHJldmlvdXNTZWxlY3Rpb24oc2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsO1xyXG4gIFxyXG4gIC8qKiBSZXR1cm5zIHRoZSB2aWV3IGZvciB0aGUgcHJpbWFyeSBjYWxlbmRhciBmb3IgdGhlIHNlbGVjdGlvbiBhbmQgc2VsZWN0aW9uIG1vZGUgKi9cclxuICBnZXRQcmltYXJ5Q2FsZW5kYXJWaWV3KHNlbGVjdGlvbjogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwsIG1pbkRhdGU6IERhdGUsIG1heERhdGU6IERhdGUsIGN1cnJlbnRWaWV3OiBDYWxlbmRhci5WaWV3KTogQ2FsZW5kYXIuVmlldyB7XHJcbiAgICBsZXQgZGF0ZTogRGF0ZTtcclxuXHJcbiAgICAvLyBJZiB3ZSBoYXZlIGEgcmFuZ2UsIHVzZSB0aGUgZW5kIGRhdGUsIGRlZmF1bHRpbmcgdG8gdGhlIHN0YXJ0IGRhdGUgb3IgdG9kYXlcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb24pKSB7XHJcbiAgICAgIGRhdGUgPSBzZWxlY3Rpb24uZW5kIHx8IHNlbGVjdGlvbi5zdGFydCB8fCBuZXcgRGF0ZSgpO1xyXG4gICAgLy8gSWYgd2UgaGF2ZSBhIHNpbmdsZSBkYXRlLCB1c2UgaXQsIGRlZmF1bHRpbmcgdG8gdG9kYXlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRhdGUgPSBzZWxlY3Rpb24gfHwgbmV3IERhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFbnN1cmUgdGhlIGRhdGUgaXMgd2l0aGluIHRoZSBtaW4gYW5kIG1heCBkYXRlc1xyXG4gICAgZGF0ZSA9IGRhdGUgPCBtaW5EYXRlID8gbWluRGF0ZSA6IGRhdGU7XHJcbiAgICBkYXRlID0gZGF0ZSA+IG1heERhdGUgPyBtYXhEYXRlIDogZGF0ZTtcclxuXHJcbiAgICAvLyBJZiB0aGUgY3VycmVudCBjYWxlbmRhciB2aWV3IG1vZGUgaXMgdmFsaWQgZm9yIHRoZSBzZWxlY3Rpb24gbW9kZSwgdXNlIGl0LCBvdGhlcndpc2UgdXNlIHRoZSBzZWxlY3Rpb24gdmlldyBtb2RlXHJcbiAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSBjYWxlbmRhciBmcm9tIGNoYW5naW5nIHZpZXcgbW9kZXMgYXMgdGhlIHVzZXIgdHlwZXMvYmx1cnMgdGhlIHRleHRib3hlcyBhcyBsb25nIGFzIHRoZSB2aWV3IG1vZGUgaXMgdmFsaWRcclxuICAgIGNvbnN0IHZpZXdNb2RlID0gdGhpcy52YWxpZFZpZXdNb2Rlcy5pbmNsdWRlcyhjdXJyZW50Vmlldy5tb2RlKSA/IGN1cnJlbnRWaWV3Lm1vZGUgOiB0aGlzLnNlbGVjdGlvblZpZXdNb2RlO1xyXG5cclxuICAgIHJldHVybiB7IG1vZGU6IHZpZXdNb2RlLCBkYXRlIH07XHJcbiAgfTtcclxuICBcclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB2aWV3IGZvciB0aGUgc2Vjb25kYXJ5IGNhbGVuZGFyIGZvciB0aGUgc2VsZWN0aW9uIGFuZCBzZWxlY3Rpb24gbW9kZS5cclxuICAgKiBUaGlzIGlzIGlzIG9ubHkgdXNlZCBieSB0aGUgcmFuZ2Ugc2VsZWN0aW9uIHN0cmF0ZWd5LiBBbGwgb3RoZXJzIGp1c3QgcmV0dXJuIHRoZSBjdXJyZW50IGRhdGUuXHJcbiAgICovXHJcbiAgZ2V0U2Vjb25kYXJ5Q2FsZW5kYXJWaWV3KHNlbGVjdGlvbjogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwsIG1pbkRhdGU6IERhdGUsIG1heERhdGU6IERhdGUsIGN1cnJlbnRWaWV3OiBDYWxlbmRhci5WaWV3KTogQ2FsZW5kYXIuVmlldyB7XHJcbiAgICByZXR1cm4geyBtb2RlOiB0aGlzLnNlbGVjdGlvblZpZXdNb2RlLCBkYXRlOiBuZXcgRGF0ZSgpIH1cclxuICB9O1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,62 @@
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 'day' selection mode.
6
+ */
7
+ export class DaySelectionStrategy extends DateInputSelectionStrategyBase {
8
+ constructor(dateDisplayPipe) {
9
+ super();
10
+ this.dateDisplayPipe = dateDisplayPipe;
11
+ this.selectionViewMode = 'day';
12
+ this.validViewModes = ['day', 'month', 'year'];
13
+ this.showSecondaryTextbox = false;
14
+ this.showSecondaryCalendar = false;
15
+ }
16
+ formatSelection(selection) {
17
+ // If the selection is a single date, format it into the first textbox.
18
+ if (DateInput.isSelectionSingleDate(selection)) {
19
+ return { textbox: this.dateDisplayPipe.transform(selection, true), textbox2: null };
20
+ // Otherwise, clear both textboxes. This shouldn't happen based on current date input flows,
21
+ // and even if it did there's not really a good way to handle it.
22
+ }
23
+ else {
24
+ return { textbox: null, textbox2: null };
25
+ }
26
+ }
27
+ parseTextboxValues(value, parseFormats, opts) {
28
+ return this.parseString(value.textbox, parseFormats, opts);
29
+ }
30
+ getSelectionFromDate(date) {
31
+ // Nice and simple
32
+ return date;
33
+ }
34
+ getNewSelectionFromExisting(previousSelection) {
35
+ // If the previous selection was a range, return the end date and default to the start date if there isn't one.
36
+ if (DateInput.isSelectionRange(previousSelection)) {
37
+ return previousSelection.end || previousSelection.start;
38
+ // If the previous selection was a single date, return it.
39
+ }
40
+ else if (DateInput.isSelectionSingleDate(previousSelection)) {
41
+ return previousSelection;
42
+ }
43
+ return null;
44
+ }
45
+ getNextSelection(selection) {
46
+ // Add a single day to the selection
47
+ if (DateInput.isSelectionSingleDate(selection)) {
48
+ return moment(selection).add(1, 'day').toDate();
49
+ }
50
+ // This shouldn't happen based on current date input flows, but if it does just return the selection as-is.
51
+ return selection;
52
+ }
53
+ getPreviousSelection(selection) {
54
+ // Subtract a single day from the selection
55
+ if (DateInput.isSelectionSingleDate(selection)) {
56
+ return moment(selection).subtract(1, 'day').toDate();
57
+ }
58
+ // This shouldn't happen based on current date input flows, but if it does just return the selection as-is.
59
+ return selection;
60
+ }
61
+ }
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5LXNlbGVjdGlvbi1zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9kYXRlLWlucHV0L2RhdGUtaW5wdXQtc2VsZWN0aW9uLXN0cmF0ZWdpZXMvZGF5LXNlbGVjdGlvbi1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFHNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXRGOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLDhCQUE4QjtJQU10RSxZQUNVLGVBQWdDO1FBRXhDLEtBQUssRUFBRSxDQUFDO1FBRkEsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBTjFCLHNCQUFpQixHQUFzQixLQUFLLENBQUM7UUFDN0MsbUJBQWMsR0FBd0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QiwwQkFBcUIsR0FBRyxLQUFLLENBQUM7SUFNOUMsQ0FBQztJQUVELGVBQWUsQ0FBQyxTQUFzQztRQUNwRCx1RUFBdUU7UUFDdkUsSUFBSSxTQUFTLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3RGLDRGQUE0RjtZQUM1RixpRUFBaUU7U0FDaEU7YUFBTTtZQUNMLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUMxQztJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFzQyxFQUFFLFlBQXNCLEVBQUUsSUFBK0I7UUFDaEgsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFVO1FBQzdCLGtCQUFrQjtRQUNsQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxpQkFBOEM7UUFDeEUsK0dBQStHO1FBQy9HLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDakQsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksaUJBQWlCLENBQUMsS0FBSyxDQUFDO1lBQzFELDBEQUEwRDtTQUN6RDthQUFNLElBQUksU0FBUyxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDN0QsT0FBTyxpQkFBaUIsQ0FBQztTQUMxQjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQXFDO1FBQ3BELG9DQUFvQztRQUNwQyxJQUFJLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM5QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2pEO1FBRUQsMkdBQTJHO1FBQzNHLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxTQUFxQztRQUN4RCwyQ0FBMkM7UUFDM0MsSUFBSSxTQUFTLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDOUMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUN0RDtRQUVELDJHQUEyRztRQUMzRyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHsgRGF0ZURpc3BsYXlQaXBlIH0gZnJvbSBcIi4uLy4uLy4uL3NoYXJlZC9kaXNwbGF5L3BpcGVzL2RhdGUtZGlzcGxheS5waXBlXCI7XHJcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSBcIi4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyLnR5cGVzXCI7XHJcbmltcG9ydCB7IERhdGVJbnB1dCB9IGZyb20gXCIuLi9kYXRlLWlucHV0LnR5cGVzXCI7XHJcbmltcG9ydCB7IERhdGVJbnB1dFNlbGVjdGlvblN0cmF0ZWd5QmFzZSB9IGZyb20gXCIuL2RhdGUtaW5wdXQtc2VsZWN0aW9uLXN0cmF0ZWd5LWJhc2VcIjtcclxuXHJcbi8qKlxyXG4gKiBTZWxlY3Rpb24gc3RyYXRlZ3kgZm9yIHRoZSAnZGF5JyBzZWxlY3Rpb24gbW9kZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBEYXlTZWxlY3Rpb25TdHJhdGVneSBleHRlbmRzIERhdGVJbnB1dFNlbGVjdGlvblN0cmF0ZWd5QmFzZSB7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvblZpZXdNb2RlOiBDYWxlbmRhci5WaWV3TW9kZSA9ICdkYXknO1xyXG4gIHB1YmxpYyByZWFkb25seSB2YWxpZFZpZXdNb2RlczogQ2FsZW5kYXIuVmlld01vZGVbXSA9IFsnZGF5JywgJ21vbnRoJywgJ3llYXInXTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1NlY29uZGFyeVRleHRib3ggPSBmYWxzZTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1NlY29uZGFyeUNhbGVuZGFyID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkYXRlRGlzcGxheVBpcGU6IERhdGVEaXNwbGF5UGlwZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdFNlbGVjdGlvbihzZWxlY3Rpb24/OiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5UZXh0Ym94R3JvdXBbJ3ZhbHVlJ10ge1xyXG4gICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBpcyBhIHNpbmdsZSBkYXRlLCBmb3JtYXQgaXQgaW50byB0aGUgZmlyc3QgdGV4dGJveC5cclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25TaW5nbGVEYXRlKHNlbGVjdGlvbikpIHtcclxuICAgICAgcmV0dXJuIHsgdGV4dGJveDogdGhpcy5kYXRlRGlzcGxheVBpcGUudHJhbnNmb3JtKHNlbGVjdGlvbiwgdHJ1ZSksIHRleHRib3gyOiBudWxsIH07XHJcbiAgICAvLyBPdGhlcndpc2UsIGNsZWFyIGJvdGggdGV4dGJveGVzLiBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYmFzZWQgb24gY3VycmVudCBkYXRlIGlucHV0IGZsb3dzLFxyXG4gICAgLy8gYW5kIGV2ZW4gaWYgaXQgZGlkIHRoZXJlJ3Mgbm90IHJlYWxseSBhIGdvb2Qgd2F5IHRvIGhhbmRsZSBpdC5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IHRleHRib3g6IG51bGwsIHRleHRib3gyOiBudWxsIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwYXJzZVRleHRib3hWYWx1ZXModmFsdWU6IERhdGVJbnB1dC5UZXh0Ym94R3JvdXBbJ3ZhbHVlJ10sIHBhcnNlRm9ybWF0czogc3RyaW5nW10sIG9wdHM/OiBEYXRlSW5wdXQuUGFyc2luZ09wdGlvbnMpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJzZVN0cmluZyh2YWx1ZS50ZXh0Ym94LCBwYXJzZUZvcm1hdHMsIG9wdHMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0aW9uRnJvbURhdGUoZGF0ZTogRGF0ZSk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIC8vIE5pY2UgYW5kIHNpbXBsZVxyXG4gICAgcmV0dXJuIGRhdGU7XHJcbiAgfVxyXG5cclxuICBnZXROZXdTZWxlY3Rpb25Gcm9tRXhpc3RpbmcocHJldmlvdXNTZWxlY3Rpb24/OiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIC8vIElmIHRoZSBwcmV2aW91cyBzZWxlY3Rpb24gd2FzIGEgcmFuZ2UsIHJldHVybiB0aGUgZW5kIGRhdGUgYW5kIGRlZmF1bHQgdG8gdGhlIHN0YXJ0IGRhdGUgaWYgdGhlcmUgaXNuJ3Qgb25lLlxyXG4gICAgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblJhbmdlKHByZXZpb3VzU2VsZWN0aW9uKSkge1xyXG4gICAgICByZXR1cm4gcHJldmlvdXNTZWxlY3Rpb24uZW5kIHx8IHByZXZpb3VzU2VsZWN0aW9uLnN0YXJ0O1xyXG4gICAgLy8gSWYgdGhlIHByZXZpb3VzIHNlbGVjdGlvbiB3YXMgYSBzaW5nbGUgZGF0ZSwgcmV0dXJuIGl0LlxyXG4gICAgfSBlbHNlIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25TaW5nbGVEYXRlKHByZXZpb3VzU2VsZWN0aW9uKSkge1xyXG4gICAgICByZXR1cm4gcHJldmlvdXNTZWxlY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0U2VsZWN0aW9uKHNlbGVjdGlvbjogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICAvLyBBZGQgYSBzaW5nbGUgZGF5IHRvIHRoZSBzZWxlY3Rpb25cclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25TaW5nbGVEYXRlKHNlbGVjdGlvbikpIHtcclxuICAgICAgcmV0dXJuIG1vbWVudChzZWxlY3Rpb24pLmFkZCgxLCAnZGF5JykudG9EYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGJhc2VkIG9uIGN1cnJlbnQgZGF0ZSBpbnB1dCBmbG93cywgYnV0IGlmIGl0IGRvZXMganVzdCByZXR1cm4gdGhlIHNlbGVjdGlvbiBhcy1pcy5cclxuICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBnZXRQcmV2aW91c1NlbGVjdGlvbihzZWxlY3Rpb246IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgLy8gU3VidHJhY3QgYSBzaW5nbGUgZGF5IGZyb20gdGhlIHNlbGVjdGlvblxyXG4gICAgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblNpbmdsZURhdGUoc2VsZWN0aW9uKSkge1xyXG4gICAgICByZXR1cm4gbW9tZW50KHNlbGVjdGlvbikuc3VidHJhY3QoMSwgJ2RheScpLnRvRGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBiYXNlZCBvbiBjdXJyZW50IGRhdGUgaW5wdXQgZmxvd3MsIGJ1dCBpZiBpdCBkb2VzIGp1c3QgcmV0dXJuIHRoZSBzZWxlY3Rpb24gYXMtaXMuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,100 @@
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 'last 28 days' selection mode.
6
+ */
7
+ export class Last28DaysSelectionStrategy extends DateInputSelectionStrategyBase {
8
+ constructor(rangeStrategy) {
9
+ super();
10
+ this.rangeStrategy = rangeStrategy;
11
+ this.selectionViewMode = 'day';
12
+ this.validViewModes = ['day', 'month', 'year'];
13
+ this.showSecondaryTextbox = true;
14
+ this.showSecondaryCalendar = false;
15
+ }
16
+ formatSelection(value) {
17
+ // Delegate to the range strategy for formatting since the logic is the same
18
+ return this.rangeStrategy.formatSelection(value);
19
+ }
20
+ parseTextboxValues(value, parseFormats, opts) {
21
+ let start = this.parseString(value.textbox, parseFormats, opts);
22
+ let end = this.parseString(value.textbox2, parseFormats, opts);
23
+ if (start && end) {
24
+ // Even if both dates are provided, it's possible that they don't match a 28-day range
25
+ // Update the start and end dates to match a 28-day range, keying off the end date if parseFromEnd is true
26
+ // parseFromEnd is true when a date is being entered from the end date textbox
27
+ if (opts?.parseFromEnd) {
28
+ start = moment(end).subtract(27, 'days').toDate();
29
+ }
30
+ else {
31
+ end = moment(start).add(27, 'days').toDate();
32
+ }
33
+ }
34
+ // If the start date is not provided, we'll use the end date to calculate the start date
35
+ if (!start && end && !opts?.preventAutoComplete) {
36
+ start = moment(end).subtract(27, 'days').toDate();
37
+ }
38
+ // If the end date is not provided, we'll use the start date to calculate the end date
39
+ if (!end && start && !opts?.preventAutoComplete) {
40
+ end = moment(start).add(27, 'days').toDate();
41
+ }
42
+ if (!start && !end) {
43
+ return null;
44
+ }
45
+ else {
46
+ return { start, end };
47
+ }
48
+ }
49
+ getSelectionFromDate(date) {
50
+ return {
51
+ start: moment(date).subtract(27, 'days').toDate(),
52
+ end: date
53
+ };
54
+ }
55
+ getNewSelectionFromExisting(previousSelection) {
56
+ if (DateInput.isSelectionRange(previousSelection)) {
57
+ // If the range only has a start date, make the 28-day range start on that date
58
+ if (!previousSelection.end && previousSelection.start) {
59
+ return {
60
+ start: previousSelection.start,
61
+ end: moment(previousSelection.start).add(27, 'days').toDate()
62
+ };
63
+ // If the range only has an end date, make the 28-day range end on that date
64
+ }
65
+ else if (previousSelection.end) {
66
+ return this.getSelectionFromDate(previousSelection.end);
67
+ }
68
+ // If the previous selection was a single date, make the range the 28 days ending on that date
69
+ }
70
+ else if (DateInput.isSelectionSingleDate(previousSelection)) {
71
+ return this.getSelectionFromDate(previousSelection);
72
+ }
73
+ return null;
74
+ }
75
+ getNextSelection(selection) {
76
+ // Move the selection to the next 28 days
77
+ if (DateInput.isSelectionRange(selection) && selection.end) {
78
+ return {
79
+ start: moment(selection.end).add(1, 'day').toDate(),
80
+ end: moment(selection.end).add(28, 'days').toDate()
81
+ };
82
+ }
83
+ // This shouldn't happen since the next stepper is disabled if the selection only has one date.
84
+ // Just return the selection as-is in this case.
85
+ return selection;
86
+ }
87
+ getPreviousSelection(selection) {
88
+ // Move the selection to the previous 28 days
89
+ if (DateInput.isSelectionRange(selection) && selection.start) {
90
+ return {
91
+ start: moment(selection.start).subtract(28, 'days').toDate(),
92
+ end: moment(selection.start).subtract(1, 'day').toDate()
93
+ };
94
+ }
95
+ // This shouldn't happen since the previous stepper is disabled if the selection only has one date.
96
+ // Just return the selection as-is in this case.
97
+ return selection;
98
+ }
99
+ }
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFzdC0yOC1kYXlzLXNlbGVjdGlvbi1zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9kYXRlLWlucHV0L2RhdGUtaW5wdXQtc2VsZWN0aW9uLXN0cmF0ZWdpZXMvbGFzdC0yOC1kYXlzLXNlbGVjdGlvbi1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR3RGOztHQUVHO0FBQ0gsTUFBTSxPQUFPLDJCQUE0QixTQUFRLDhCQUE4QjtJQU03RSxZQUNVLGFBQXFDO1FBRTdDLEtBQUssRUFBRSxDQUFDO1FBRkEsa0JBQWEsR0FBYixhQUFhLENBQXdCO1FBTi9CLHNCQUFpQixHQUFzQixLQUFLLENBQUM7UUFDN0MsbUJBQWMsR0FBd0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELHlCQUFvQixHQUFHLElBQUksQ0FBQztRQUM1QiwwQkFBcUIsR0FBRyxLQUFLLENBQUM7SUFNOUMsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFrQztRQUNoRCw0RUFBNEU7UUFDNUUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBc0MsRUFBRSxZQUFzQixFQUFFLElBQStCO1FBQ2hILElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEUsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FB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UyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFO2FBQ3BELENBQUM7U0FDSDtRQUVELCtGQUErRjtRQUMvRixnREFBZ0Q7UUFDaEQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELG9CQUFvQixDQUFDLFNBQXFDO1FBQ3hELDZDQUE2QztRQUM3QyxJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO1lBQzVELE9BQU87Z0JBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUU7Z0JBQzVELEdBQUcsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFO2FBQ3pELENBQUM7U0FDSDtRQUVELG1HQUFtRztRQUNuRyxnREFBZ0Q7UUFDaEQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSBcIi4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyLnR5cGVzXCI7XHJcbmltcG9ydCB7IERhdGVJbnB1dCB9IGZyb20gXCIuLi9kYXRlLWlucHV0LnR5cGVzXCI7XHJcbmltcG9ydCB7IERhdGVJbnB1dFNlbGVjdGlvblN0cmF0ZWd5QmFzZSB9IGZyb20gXCIuL2RhdGUtaW5wdXQtc2VsZWN0aW9uLXN0cmF0ZWd5LWJhc2VcIjtcclxuaW1wb3J0IHsgUmFuZ2VTZWxlY3Rpb25TdHJhdGVneSB9IGZyb20gXCIuL3JhbmdlLXNlbGVjdGlvbi1zdHJhdGVneVwiO1xyXG5cclxuLyoqXHJcbiAqIFNlbGVjdGlvbiBzdHJhdGVneSBmb3IgdGhlICdsYXN0IDI4IGRheXMnIHNlbGVjdGlvbiBtb2RlLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIExhc3QyOERheXNTZWxlY3Rpb25TdHJhdGVneSBleHRlbmRzIERhdGVJbnB1dFNlbGVjdGlvblN0cmF0ZWd5QmFzZSB7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvblZpZXdNb2RlOiBDYWxlbmRhci5WaWV3TW9kZSA9ICdkYXknO1xyXG4gIHB1YmxpYyByZWFkb25seSB2YWxpZFZpZXdNb2RlczogQ2FsZW5kYXIuVmlld01vZGVbXSA9IFsnZGF5JywgJ21vbnRoJywgJ3llYXInXTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1NlY29uZGFyeVRleHRib3ggPSB0cnVlO1xyXG4gIHB1YmxpYyByZWFkb25seSBzaG93U2Vjb25kYXJ5Q2FsZW5kYXIgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJhbmdlU3RyYXRlZ3k6IFJhbmdlU2VsZWN0aW9uU3RyYXRlZ3lcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRTZWxlY3Rpb24odmFsdWU/OiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5UZXh0Ym94R3JvdXBbJ3ZhbHVlJ10ge1xyXG4gICAgLy8gRGVsZWdhdGUgdG8gdGhlIHJhbmdlIHN0cmF0ZWd5IGZvciBmb3JtYXR0aW5nIHNpbmNlIHRoZSBsb2dpYyBpcyB0aGUgc2FtZVxyXG4gICAgcmV0dXJuIHRoaXMucmFuZ2VTdHJhdGVneS5mb3JtYXRTZWxlY3Rpb24odmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcGFyc2VUZXh0Ym94VmFsdWVzKHZhbHVlOiBEYXRlSW5wdXQuVGV4dGJveEdyb3VwWyd2YWx1ZSddLCBwYXJzZUZvcm1hdHM6IHN0cmluZ1tdLCBvcHRzPzogRGF0ZUlucHV0LlBhcnNpbmdPcHRpb25zKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgbGV0IHN0YXJ0ID0gdGhpcy5wYXJzZVN0cmluZyh2YWx1ZS50ZXh0Ym94LCBwYXJzZUZvcm1hdHMsIG9wdHMpO1xyXG4gICAgbGV0IGVuZCA9IHRoaXMucGFyc2VTdHJpbmcodmFsdWUudGV4dGJveDIsIHBhcnNlRm9ybWF0cywgb3B0cyk7XHJcblxyXG4gICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xyXG4gICAgICAvLyBFdmVuIGlmIGJvdGggZGF0ZXMgYXJlIHByb3ZpZGVkLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhleSBkb24ndCBtYXRjaCBhIDI4LWRheSByYW5nZVxyXG4gICAgICAvLyBVcGRhdGUgdGhlIHN0YXJ0IGFuZCBlbmQgZGF0ZXMgdG8gbWF0Y2ggYSAyOC1kYXkgcmFuZ2UsIGtleWluZyBvZmYgdGhlIGVuZCBkYXRlIGlmIHBhcnNlRnJvbUVuZCBpcyB0cnVlXHJcbiAgICAgIC8vIHBhcnNlRnJvbUVuZCBpcyB0cnVlIHdoZW4gYSBkYXRlIGlzIGJlaW5nIGVudGVyZWQgZnJvbSB0aGUgZW5kIGRhdGUgdGV4dGJveFxyXG4gICAgICBpZiAob3B0cz8ucGFyc2VGcm9tRW5kKSB7XHJcbiAgICAgICAgc3RhcnQgPSBtb21lbnQoZW5kKS5zdWJ0cmFjdCgyNywgJ2RheXMnKS50b0RhdGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBlbmQgPSBtb21lbnQoc3RhcnQpLmFkZCgyNywgJ2RheXMnKS50b0RhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHRoZSBzdGFydCBkYXRlIGlzIG5vdCBwcm92aWRlZCwgd2UnbGwgdXNlIHRoZSBlbmQgZGF0ZSB0byBjYWxjdWxhdGUgdGhlIHN0YXJ0IGRhdGVcclxuICAgIGlmICghc3RhcnQgJiYgZW5kICYmICFvcHRzPy5wcmV2ZW50QXV0b0NvbXBsZXRlKSB7XHJcbiAgICAgIHN0YXJ0ID0gbW9tZW50KGVuZCkuc3VidHJhY3QoMjcsICdkYXlzJykudG9EYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgdGhlIGVuZCBkYXRlIGlzIG5vdCBwcm92aWRlZCwgd2UnbGwgdXNlIHRoZSBzdGFydCBkYXRlIHRvIGNhbGN1bGF0ZSB0aGUgZW5kIGRhdGVcclxuICAgIGlmICghZW5kICYmIHN0YXJ0ICYmICFvcHRzPy5wcmV2ZW50QXV0b0NvbXBsZXRlKSB7XHJcbiAgICAgIGVuZCA9IG1vbWVudChzdGFydCkuYWRkKDI3LCAnZGF5cycpLnRvRGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghc3RhcnQgJiYgIWVuZCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGlvbkZyb21EYXRlKGRhdGU6IERhdGUpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICByZXR1cm4geyBcclxuICAgICAgc3RhcnQ6IG1vbWVudChkYXRlKS5zdWJ0cmFjdCgyNywgJ2RheXMnKS50b0RhdGUoKSxcclxuICAgICAgZW5kOiBkYXRlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV3U2VsZWN0aW9uRnJvbUV4aXN0aW5nKHByZXZpb3VzU2VsZWN0aW9uPzogRGF0ZUlucHV0LlNlbGVjdGlvbik6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShwcmV2aW91c1NlbGVjdGlvbikpIHtcclxuICAgICAgLy8gSWYgdGhlIHJhbmdlIG9ubHkgaGFzIGEgc3RhcnQgZGF0ZSwgbWFrZSB0aGUgMjgtZGF5IHJhbmdlIHN0YXJ0IG9uIHRoYXQgZGF0ZVxyXG4gICAgICBpZiAoIXByZXZpb3VzU2VsZWN0aW9uLmVuZCAmJiBwcmV2aW91c1NlbGVjdGlvbi5zdGFydCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBzdGFydDogcHJldmlvdXNTZWxlY3Rpb24uc3RhcnQsXHJcbiAgICAgICAgICBlbmQ6IG1vbWVudChwcmV2aW91c1NlbGVjdGlvbi5zdGFydCkuYWRkKDI3LCAnZGF5cycpLnRvRGF0ZSgpXHJcbiAgICAgICAgfTtcclxuICAgICAgLy8gSWYgdGhlIHJhbmdlIG9ubHkgaGFzIGFuIGVuZCBkYXRlLCBtYWtlIHRoZSAyOC1kYXkgcmFuZ2UgZW5kIG9uIHRoYXQgZGF0ZVxyXG4gICAgICB9IGVsc2UgaWYgKHByZXZpb3VzU2VsZWN0aW9uLmVuZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGlvbkZyb21EYXRlKHByZXZpb3VzU2VsZWN0aW9uLmVuZCk7XHJcbiAgICAgIH1cclxuICAgIC8vIElmIHRoZSBwcmV2aW91cyBzZWxlY3Rpb24gd2FzIGEgc2luZ2xlIGRhdGUsIG1ha2UgdGhlIHJhbmdlIHRoZSAyOCBkYXlzIGVuZGluZyBvbiB0aGF0IGRhdGVcclxuICAgIH0gZWxzZSBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uU2luZ2xlRGF0ZShwcmV2aW91c1NlbGVjdGlvbikpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0aW9uRnJvbURhdGUocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV4dFNlbGVjdGlvbihzZWxlY3Rpb246IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgLy8gTW92ZSB0aGUgc2VsZWN0aW9uIHRvIHRoZSBuZXh0IDI4IGRheXNcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb24pICYmIHNlbGVjdGlvbi5lbmQpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBzdGFydDogbW9tZW50KHNlbGVjdGlvbi5lbmQpLmFkZCgxLCAnZGF5JykudG9EYXRlKCksXHJcbiAgICAgICAgZW5kOiBtb21lbnQoc2VsZWN0aW9uLmVuZCkuYWRkKDI4LCAnZGF5cycpLnRvRGF0ZSgpXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIHNpbmNlIHRoZSBuZXh0IHN0ZXBwZXIgaXMgZGlzYWJsZWQgaWYgdGhlIHNlbGVjdGlvbiBvbmx5IGhhcyBvbmUgZGF0ZS5cclxuICAgIC8vIEp1c3QgcmV0dXJuIHRoZSBzZWxlY3Rpb24gYXMtaXMgaW4gdGhpcyBjYXNlLlxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGdldFByZXZpb3VzU2VsZWN0aW9uKHNlbGVjdGlvbjogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICAvLyBNb3ZlIHRoZSBzZWxlY3Rpb24gdG8gdGhlIHByZXZpb3VzIDI4IGRheXNcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb24pICYmIHNlbGVjdGlvbi5zdGFydCkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHN0YXJ0OiBtb21lbnQoc2VsZWN0aW9uLnN0YXJ0KS5zdWJ0cmFjdCgyOCwgJ2RheXMnKS50b0RhdGUoKSxcclxuICAgICAgICBlbmQ6IG1vbWVudChzZWxlY3Rpb24uc3RhcnQpLnN1YnRyYWN0KDEsICdkYXknKS50b0RhdGUoKVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBzaW5jZSB0aGUgcHJldmlvdXMgc3RlcHBlciBpcyBkaXNhYmxlZCBpZiB0aGUgc2VsZWN0aW9uIG9ubHkgaGFzIG9uZSBkYXRlLlxyXG4gICAgLy8gSnVzdCByZXR1cm4gdGhlIHNlbGVjdGlvbiBhcy1pcyBpbiB0aGlzIGNhc2UuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,101 @@
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 'last 7 days' selection mode.
6
+ */
7
+ export class Last7DaysSelectionStrategy extends DateInputSelectionStrategyBase {
8
+ constructor(rangeStrategy) {
9
+ super();
10
+ this.rangeStrategy = rangeStrategy;
11
+ this.selectionViewMode = 'day';
12
+ this.validViewModes = ['day', 'month', 'year'];
13
+ this.showSecondaryTextbox = true;
14
+ this.showSecondaryCalendar = false;
15
+ }
16
+ formatSelection(value) {
17
+ // Delegate to the range strategy for formatting since the logic is the same
18
+ return this.rangeStrategy.formatSelection(value);
19
+ }
20
+ parseTextboxValues(value, parseFormats, opts) {
21
+ let start = this.parseString(value.textbox, parseFormats, opts);
22
+ let end = this.parseString(value.textbox2, parseFormats, opts);
23
+ if (start && end) {
24
+ // Even if both dates are provided, it's possible that they don't match a 7-day range
25
+ // Update the start and end dates to match a 7-day range, keying off the end date if parseFromEnd is true
26
+ // parseFromEnd is true when a date is being entered from the end date textbox
27
+ if (opts?.parseFromEnd) {
28
+ start = moment(end).subtract(6, 'days').toDate();
29
+ }
30
+ else {
31
+ end = moment(start).add(6, 'days').toDate();
32
+ }
33
+ }
34
+ // If the start date is not provided, we'll use the end date to calculate the start date
35
+ if (!start && end && !opts?.preventAutoComplete) {
36
+ start = moment(end).subtract(6, 'days').toDate();
37
+ }
38
+ // If the end date is not provided, we'll use the start date to calculate the end date
39
+ if (!end && start && !opts?.preventAutoComplete) {
40
+ end = moment(start).add(6, 'days').toDate();
41
+ }
42
+ if (!start && !end) {
43
+ return null;
44
+ }
45
+ else {
46
+ return { start, end };
47
+ }
48
+ }
49
+ getSelectionFromDate(date) {
50
+ // Base the selection on the given date, moving back 6 days
51
+ return {
52
+ start: moment(date).subtract(6, 'days').toDate(),
53
+ end: date
54
+ };
55
+ }
56
+ getNewSelectionFromExisting(previousSelection) {
57
+ if (DateInput.isSelectionRange(previousSelection)) {
58
+ // If we don't have an end date, create the new selection based on the start date forwards
59
+ if (!previousSelection.end && previousSelection.start) {
60
+ return {
61
+ start: previousSelection.start,
62
+ end: moment(previousSelection.start).add(6, 'days').toDate()
63
+ };
64
+ // Otherwise, create the new selection based on the end date backwards
65
+ }
66
+ else if (previousSelection.end) {
67
+ return this.getSelectionFromDate(previousSelection.end);
68
+ }
69
+ // If we only have a single date, create the new selection based on that date backwards
70
+ }
71
+ else if (DateInput.isSelectionSingleDate(previousSelection)) {
72
+ return this.getSelectionFromDate(previousSelection);
73
+ }
74
+ return null;
75
+ }
76
+ getNextSelection(selection) {
77
+ // Shift the range forward by 7 days
78
+ if (DateInput.isSelectionRange(selection) && selection.end) {
79
+ return {
80
+ start: moment(selection.end).add(1, 'day').toDate(),
81
+ end: moment(selection.end).add(7, 'days').toDate()
82
+ };
83
+ }
84
+ // This shouldn't happen since the next stepper is disabled if the selection only has one date.
85
+ // Just return the selection as-is in this case.
86
+ return selection;
87
+ }
88
+ getPreviousSelection(selection) {
89
+ // Shift the range back 7 days
90
+ if (DateInput.isSelectionRange(selection) && selection.start) {
91
+ return {
92
+ start: moment(selection.start).subtract(7, 'days').toDate(),
93
+ end: moment(selection.start).subtract(1, 'day').toDate()
94
+ };
95
+ }
96
+ // This shouldn't happen since the previous stepper is disabled if the selection only has one date.
97
+ // Just return the selection as-is in this case.
98
+ return selection;
99
+ }
100
+ }
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFzdC03LWRheXMtc2VsZWN0aW9uLXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2RhdGUtaW5wdXQvZGF0ZS1pbnB1dC1zZWxlY3Rpb24tc3RyYXRlZ2llcy9sYXN0LTctZGF5cy1zZWxlY3Rpb24tc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUd0Rjs7R0FFRztBQUNILE1BQU0sT0FBTywwQkFBMkIsU0FBUSw4QkFBOEI7SUFNNUUsWUFDVSxhQUFxQztRQUU3QyxLQUFLLEVBQUUsQ0FBQztRQUZBLGtCQUFhLEdBQWIsYUFBYSxDQUF3QjtRQU4vQixzQkFBaUIsR0FBc0IsS0FBSyxDQUFDO1FBQzdDLG1CQUFjLEdBQXdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRCx5QkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDNUIsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBTTlDLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBa0M7UUFDaEQsNEVBQTRFO1FBQzVFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQXNDLEVBQUUsWUFBc0IsRUFBRSxJQUErQjtRQUNoSCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMs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QU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUU7YUFDbkQsQ0FBQztTQUNIO1FBRUQsK0ZBQStGO1FBQy9GLGdEQUFnRDtRQUNoRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsU0FBcUM7UUFDeEQsOEJBQThCO1FBQzlCLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDNUQsT0FBTztnQkFDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRTtnQkFDM0QsR0FBRyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUU7YUFDekQsQ0FBQztTQUNIO1FBRUQsbUdBQW1HO1FBQ25HLGdEQUFnRDtRQUNoRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHsgQ2FsZW5kYXIgfSBmcm9tIFwiLi4vLi4vY2FsZW5kYXIvY2FsZW5kYXIudHlwZXNcIjtcclxuaW1wb3J0IHsgRGF0ZUlucHV0IH0gZnJvbSBcIi4uL2RhdGUtaW5wdXQudHlwZXNcIjtcclxuaW1wb3J0IHsgRGF0ZUlucHV0U2VsZWN0aW9uU3RyYXRlZ3lCYXNlIH0gZnJvbSBcIi4vZGF0ZS1pbnB1dC1zZWxlY3Rpb24tc3RyYXRlZ3ktYmFzZVwiO1xyXG5pbXBvcnQgeyBSYW5nZVNlbGVjdGlvblN0cmF0ZWd5IH0gZnJvbSBcIi4vcmFuZ2Utc2VsZWN0aW9uLXN0cmF0ZWd5XCI7XHJcblxyXG4vKipcclxuICogU2VsZWN0aW9uIHN0cmF0ZWd5IGZvciB0aGUgJ2xhc3QgNyBkYXlzJyBzZWxlY3Rpb24gbW9kZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBMYXN0N0RheXNTZWxlY3Rpb25TdHJhdGVneSBleHRlbmRzIERhdGVJbnB1dFNlbGVjdGlvblN0cmF0ZWd5QmFzZSB7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvblZpZXdNb2RlOiBDYWxlbmRhci5WaWV3TW9kZSA9ICdkYXknO1xyXG4gIHB1YmxpYyByZWFkb25seSB2YWxpZFZpZXdNb2RlczogQ2FsZW5kYXIuVmlld01vZGVbXSA9IFsnZGF5JywgJ21vbnRoJywgJ3llYXInXTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1NlY29uZGFyeVRleHRib3ggPSB0cnVlO1xyXG4gIHB1YmxpYyByZWFkb25seSBzaG93U2Vjb25kYXJ5Q2FsZW5kYXIgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJhbmdlU3RyYXRlZ3k6IFJhbmdlU2VsZWN0aW9uU3RyYXRlZ3lcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRTZWxlY3Rpb24odmFsdWU/OiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5UZXh0Ym94R3JvdXBbJ3ZhbHVlJ10ge1xyXG4gICAgLy8gRGVsZWdhdGUgdG8gdGhlIHJhbmdlIHN0cmF0ZWd5IGZvciBmb3JtYXR0aW5nIHNpbmNlIHRoZSBsb2dpYyBpcyB0aGUgc2FtZVxyXG4gICAgcmV0dXJuIHRoaXMucmFuZ2VTdHJhdGVneS5mb3JtYXRTZWxlY3Rpb24odmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcGFyc2VUZXh0Ym94VmFsdWVzKHZhbHVlOiBEYXRlSW5wdXQuVGV4dGJveEdyb3VwWyd2YWx1ZSddLCBwYXJzZUZvcm1hdHM6IHN0cmluZ1tdLCBvcHRzPzogRGF0ZUlucHV0LlBhcnNpbmdPcHRpb25zKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgbGV0IHN0YXJ0ID0gdGhpcy5wYXJzZVN0cmluZyh2YWx1ZS50ZXh0Ym94LCBwYXJzZUZvcm1hdHMsIG9wdHMpO1xyXG4gICAgbGV0IGVuZCA9IHRoaXMucGFyc2VTdHJpbmcodmFsdWUudGV4dGJveDIsIHBhcnNlRm9ybWF0cywgb3B0cyk7XHJcblxyXG4gICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xyXG4gICAgICAvLyBFdmVuIGlmIGJvdGggZGF0ZXMgYXJlIHByb3ZpZGVkLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhleSBkb24ndCBtYXRjaCBhIDctZGF5IHJhbmdlXHJcbiAgICAgIC8vIFVwZGF0ZSB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyB0byBtYXRjaCBhIDctZGF5IHJhbmdlLCBrZXlpbmcgb2ZmIHRoZSBlbmQgZGF0ZSBpZiBwYXJzZUZyb21FbmQgaXMgdHJ1ZVxyXG4gICAgICAvLyBwYXJzZUZyb21FbmQgaXMgdHJ1ZSB3aGVuIGEgZGF0ZSBpcyBiZWluZyBlbnRlcmVkIGZyb20gdGhlIGVuZCBkYXRlIHRleHRib3hcclxuICAgICAgaWYgKG9wdHM/LnBhcnNlRnJvbUVuZCkge1xyXG4gICAgICAgIHN0YXJ0ID0gbW9tZW50KGVuZCkuc3VidHJhY3QoNiwgJ2RheXMnKS50b0RhdGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBlbmQgPSBtb21lbnQoc3RhcnQpLmFkZCg2LCAnZGF5cycpLnRvRGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgdGhlIHN0YXJ0IGRhdGUgaXMgbm90IHByb3ZpZGVkLCB3ZSdsbCB1c2UgdGhlIGVuZCBkYXRlIHRvIGNhbGN1bGF0ZSB0aGUgc3RhcnQgZGF0ZVxyXG4gICAgaWYgKCFzdGFydCAmJiBlbmQgJiYgIW9wdHM/LnByZXZlbnRBdXRvQ29tcGxldGUpIHtcclxuICAgICAgc3RhcnQgPSBtb21lbnQoZW5kKS5zdWJ0cmFjdCg2LCAnZGF5cycpLnRvRGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHRoZSBlbmQgZGF0ZSBpcyBub3QgcHJvdmlkZWQsIHdlJ2xsIHVzZSB0aGUgc3RhcnQgZGF0ZSB0byBjYWxjdWxhdGUgdGhlIGVuZCBkYXRlXHJcbiAgICBpZiAoIWVuZCAmJiBzdGFydCAmJiAhb3B0cz8ucHJldmVudEF1dG9Db21wbGV0ZSkge1xyXG4gICAgICBlbmQgPSBtb21lbnQoc3RhcnQpLmFkZCg2LCAnZGF5cycpLnRvRGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghc3RhcnQgJiYgIWVuZCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGlvbkZyb21EYXRlKGRhdGU6IERhdGUpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICAvLyBCYXNlIHRoZSBzZWxlY3Rpb24gb24gdGhlIGdpdmVuIGRhdGUsIG1vdmluZyBiYWNrIDYgZGF5c1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc3RhcnQ6IG1vbWVudChkYXRlKS5zdWJ0cmFjdCg2LCAnZGF5cycpLnRvRGF0ZSgpLFxyXG4gICAgICBlbmQ6IGRhdGVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXROZXdTZWxlY3Rpb25Gcm9tRXhpc3RpbmcocHJldmlvdXNTZWxlY3Rpb24/OiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShwcmV2aW91c1NlbGVjdGlvbikpIHtcclxuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbiBlbmQgZGF0ZSwgY3JlYXRlIHRoZSBuZXcgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBzdGFydCBkYXRlIGZvcndhcmRzXHJcbiAgICAgIGlmICghcHJldmlvdXNTZWxlY3Rpb24uZW5kICYmIHByZXZpb3VzU2VsZWN0aW9uLnN0YXJ0KSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHN0YXJ0OiBwcmV2aW91c1NlbGVjdGlvbi5zdGFydCxcclxuICAgICAgICAgIGVuZDogbW9tZW50KHByZXZpb3VzU2VsZWN0aW9uLnN0YXJ0KS5hZGQoNiwgJ2RheXMnKS50b0RhdGUoKVxyXG4gICAgICAgIH07XHJcbiAgICAgIC8vIE90aGVyd2lzZSwgY3JlYXRlIHRoZSBuZXcgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBlbmQgZGF0ZSBiYWNrd2FyZHNcclxuICAgICAgfSBlbHNlIGlmIChwcmV2aW91c1NlbGVjdGlvbi5lbmQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb25Gcm9tRGF0ZShwcmV2aW91c1NlbGVjdGlvbi5lbmQpO1xyXG4gICAgICB9XHJcbiAgICAvLyBJZiB3ZSBvbmx5IGhhdmUgYSBzaW5nbGUgZGF0ZSwgY3JlYXRlIHRoZSBuZXcgc2VsZWN0aW9uIGJhc2VkIG9uIHRoYXQgZGF0ZSBiYWNrd2FyZHNcclxuICAgIH0gZWxzZSBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uU2luZ2xlRGF0ZShwcmV2aW91c1NlbGVjdGlvbikpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0aW9uRnJvbURhdGUocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV4dFNlbGVjdGlvbihzZWxlY3Rpb246IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgLy8gU2hpZnQgdGhlIHJhbmdlIGZvcndhcmQgYnkgNyBkYXlzXHJcbiAgICBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uKSAmJiBzZWxlY3Rpb24uZW5kKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgc3RhcnQ6IG1vbWVudChzZWxlY3Rpb24uZW5kKS5hZGQoMSwgJ2RheScpLnRvRGF0ZSgpLFxyXG4gICAgICAgIGVuZDogbW9tZW50KHNlbGVjdGlvbi5lbmQpLmFkZCg3LCAnZGF5cycpLnRvRGF0ZSgpXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIHNpbmNlIHRoZSBuZXh0IHN0ZXBwZXIgaXMgZGlzYWJsZWQgaWYgdGhlIHNlbGVjdGlvbiBvbmx5IGhhcyBvbmUgZGF0ZS5cclxuICAgIC8vIEp1c3QgcmV0dXJuIHRoZSBzZWxlY3Rpb24gYXMtaXMgaW4gdGhpcyBjYXNlLlxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGdldFByZXZpb3VzU2VsZWN0aW9uKHNlbGVjdGlvbjogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICAvLyBTaGlmdCB0aGUgcmFuZ2UgYmFjayA3IGRheXNcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb24pICYmIHNlbGVjdGlvbi5zdGFydCkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHN0YXJ0OiBtb21lbnQoc2VsZWN0aW9uLnN0YXJ0KS5zdWJ0cmFjdCg3LCAnZGF5cycpLnRvRGF0ZSgpLFxyXG4gICAgICAgIGVuZDogbW9tZW50KHNlbGVjdGlvbi5zdGFydCkuc3VidHJhY3QoMSwgJ2RheScpLnRvRGF0ZSgpXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIHNpbmNlIHRoZSBwcmV2aW91cyBzdGVwcGVyIGlzIGRpc2FibGVkIGlmIHRoZSBzZWxlY3Rpb24gb25seSBoYXMgb25lIGRhdGUuXHJcbiAgICAvLyBKdXN0IHJldHVybiB0aGUgc2VsZWN0aW9uIGFzLWlzIGluIHRoaXMgY2FzZS5cclxuICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,76 @@
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 'month' selection mode.
6
+ */
7
+ export class MonthSelectionStrategy extends DateInputSelectionStrategyBase {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.selectionViewMode = 'month';
11
+ this.validViewModes = ['month', 'year'];
12
+ this.showSecondaryTextbox = false;
13
+ this.showSecondaryCalendar = false;
14
+ }
15
+ formatSelection(selection) {
16
+ if (!selection) {
17
+ return { textbox: null, textbox2: null };
18
+ }
19
+ // We only need one date in the range to format since it only spans one month
20
+ // A single date selection shouldn't happen in this mode but it's simple enough to handle
21
+ const date = DateInput.isSelectionRange(selection) ? selection.start : selection;
22
+ return {
23
+ textbox: moment(date).format('MMM, YYYY'),
24
+ textbox2: null
25
+ };
26
+ }
27
+ parseTextboxValues(value, parseFormats, opts) {
28
+ // Only one textbox is used in this mode
29
+ const date = this.parseString(value.textbox, parseFormats, opts);
30
+ if (!date) {
31
+ return null;
32
+ }
33
+ return this.getSelectionFromDate(date);
34
+ }
35
+ getSelectionFromDate(date) {
36
+ return {
37
+ start: moment(date).startOf('month').toDate(),
38
+ end: moment(date).endOf('month').toDate()
39
+ };
40
+ }
41
+ getNewSelectionFromExisting(previousSelection) {
42
+ if (DateInput.isSelectionRange(previousSelection)) {
43
+ // We'll use the existing selection's end date and fall back to the start date if it's not available
44
+ const date = previousSelection.end || previousSelection.start;
45
+ if (date) {
46
+ return this.getSelectionFromDate(date);
47
+ }
48
+ }
49
+ else if (DateInput.isSelectionSingleDate(previousSelection)) {
50
+ // If the previous selection was a single date, make the range that month
51
+ return this.getSelectionFromDate(previousSelection);
52
+ }
53
+ return null;
54
+ }
55
+ getNextSelection(selection) {
56
+ // Move the selection to the next month
57
+ if (DateInput.isSelectionRange(selection) && selection.start) {
58
+ const date = moment(selection.start).add(1, 'month');
59
+ return this.getSelectionFromDate(date.toDate());
60
+ }
61
+ // This shouldn't happen since the next stepper is disabled if the selection only has one date.
62
+ // If it does, just return the selection as-is.
63
+ return selection;
64
+ }
65
+ getPreviousSelection(selection) {
66
+ // Move the selection to the previous month
67
+ if (DateInput.isSelectionRange(selection) && selection.start) {
68
+ const date = moment(selection.start).subtract(1, 'month');
69
+ return this.getSelectionFromDate(date.toDate());
70
+ }
71
+ // This shouldn't happen since the previous stepper is disabled if the selection only has one date.
72
+ // If it does, just return the selection as-is.
73
+ return selection;
74
+ }
75
+ }
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGgtc2VsZWN0aW9uLXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2RhdGUtaW5wdXQvZGF0ZS1pbnB1dC1zZWxlY3Rpb24tc3RyYXRlZ2llcy9tb250aC1zZWxlY3Rpb24tc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV0Rjs7R0FFRztBQUNILE1BQU0sT0FBTyxzQkFBdUIsU0FBUSw4QkFBOEI7SUFBMUU7O1FBQ2tCLHNCQUFpQixHQUFzQixPQUFPLENBQUM7UUFDL0MsbUJBQWMsR0FBd0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEQseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQzdCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztJQXdFaEQsQ0FBQztJQXRFQyxlQUFlLENBQUMsU0FBc0M7UUFDcEQsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUMxQztRQUVELDZFQUE2RTtRQUM3RSx5RkFBeUY7UUFDekYsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDakYsT0FBTztZQUNMLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUN6QyxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBc0MsRUFBRSxZQUFzQixFQUFFLElBQStCO1FBQ2hILHdDQUF3QztRQUN4QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVU7UUFDN0IsT0FBTztZQUNMLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUM3QyxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUU7U0FDMUMsQ0FBQztJQUNKLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxpQkFBdUM7UUFDakUsSUFBSSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUNqRCxvR0FBb0c7WUFDcEcsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQztZQUM5RCxJQUFJLElBQUksRUFBRTtnQkFDUixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN4QztTQUNGO2FBQU0sSUFBSSxTQUFTLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUM3RCx5RUFBeUU7WUFDekUsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUNyRDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQXFDO1FBQ3BELHVDQUF1QztRQUN2QyxJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO1lBQzVELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNyRCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUNqRDtRQUVELCtGQUErRjtRQUMvRiwrQ0FBK0M7UUFDL0MsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELG9CQUFvQixDQUFDLFNBQXFDO1FBQ3hELDJDQUEyQztRQUMzQyxJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO1lBQzVELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMxRCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUNqRDtRQUVELG1HQUFtRztRQUNuRywrQ0FBK0M7UUFDL0MsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSBcIi4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyLnR5cGVzXCI7XHJcbmltcG9ydCB7IERhdGVJbnB1dCB9IGZyb20gXCIuLi9kYXRlLWlucHV0LnR5cGVzXCI7XHJcbmltcG9ydCB7IERhdGVJbnB1dFNlbGVjdGlvblN0cmF0ZWd5QmFzZSB9IGZyb20gXCIuL2RhdGUtaW5wdXQtc2VsZWN0aW9uLXN0cmF0ZWd5LWJhc2VcIjtcclxuXHJcbi8qKlxyXG4gKiBTZWxlY3Rpb24gc3RyYXRlZ3kgZm9yIHRoZSAnbW9udGgnIHNlbGVjdGlvbiBtb2RlLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIE1vbnRoU2VsZWN0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBEYXRlSW5wdXRTZWxlY3Rpb25TdHJhdGVneUJhc2Uge1xyXG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb25WaWV3TW9kZTogQ2FsZW5kYXIuVmlld01vZGUgPSAnbW9udGgnO1xyXG4gIHB1YmxpYyByZWFkb25seSB2YWxpZFZpZXdNb2RlczogQ2FsZW5kYXIuVmlld01vZGVbXSA9IFsnbW9udGgnLCAneWVhciddO1xyXG4gIHB1YmxpYyByZWFkb25seSBzaG93U2Vjb25kYXJ5VGV4dGJveCA9IGZhbHNlO1xyXG4gIHB1YmxpYyByZWFkb25seSBzaG93U2Vjb25kYXJ5Q2FsZW5kYXIgPSBmYWxzZTtcclxuXHJcbiAgZm9ybWF0U2VsZWN0aW9uKHNlbGVjdGlvbj86IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKTogRGF0ZUlucHV0LlRleHRib3hHcm91cFsndmFsdWUnXSB7XHJcbiAgICBpZiAoIXNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm4geyB0ZXh0Ym94OiBudWxsLCB0ZXh0Ym94MjogbnVsbCB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFdlIG9ubHkgbmVlZCBvbmUgZGF0ZSBpbiB0aGUgcmFuZ2UgdG8gZm9ybWF0IHNpbmNlIGl0IG9ubHkgc3BhbnMgb25lIG1vbnRoXHJcbiAgICAvLyBBIHNpbmdsZSBkYXRlIHNlbGVjdGlvbiBzaG91bGRuJ3QgaGFwcGVuIGluIHRoaXMgbW9kZSBidXQgaXQncyBzaW1wbGUgZW5vdWdoIHRvIGhhbmRsZVxyXG4gICAgY29uc3QgZGF0ZSA9IERhdGVJbnB1dC5pc1NlbGVjdGlvblJhbmdlKHNlbGVjdGlvbikgPyBzZWxlY3Rpb24uc3RhcnQgOiBzZWxlY3Rpb247XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0ZXh0Ym94OiBtb21lbnQoZGF0ZSkuZm9ybWF0KCdNTU0sIFlZWVknKSxcclxuICAgICAgdGV4dGJveDI6IG51bGxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwYXJzZVRleHRib3hWYWx1ZXModmFsdWU6IERhdGVJbnB1dC5UZXh0Ym94R3JvdXBbJ3ZhbHVlJ10sIHBhcnNlRm9ybWF0czogc3RyaW5nW10sIG9wdHM/OiBEYXRlSW5wdXQuUGFyc2luZ09wdGlvbnMpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICAvLyBPbmx5IG9uZSB0ZXh0Ym94IGlzIHVzZWQgaW4gdGhpcyBtb2RlXHJcbiAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZVN0cmluZyh2YWx1ZS50ZXh0Ym94LCBwYXJzZUZvcm1hdHMsIG9wdHMpO1xyXG5cclxuICAgIGlmICghZGF0ZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb25Gcm9tRGF0ZShkYXRlKTtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGlvbkZyb21EYXRlKGRhdGU6IERhdGUpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzdGFydDogbW9tZW50KGRhdGUpLnN0YXJ0T2YoJ21vbnRoJykudG9EYXRlKCksXHJcbiAgICAgIGVuZDogbW9tZW50KGRhdGUpLmVuZE9mKCdtb250aCcpLnRvRGF0ZSgpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV3U2VsZWN0aW9uRnJvbUV4aXN0aW5nKHByZXZpb3VzU2VsZWN0aW9uPzogRGF0ZUlucHV0LlNlbGVjdGlvbik6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShwcmV2aW91c1NlbGVjdGlvbikpIHtcclxuICAgICAgLy8gV2UnbGwgdXNlIHRoZSBleGlzdGluZyBzZWxlY3Rpb24ncyBlbmQgZGF0ZSBhbmQgZmFsbCBiYWNrIHRvIHRoZSBzdGFydCBkYXRlIGlmIGl0J3Mgbm90IGF2YWlsYWJsZVxyXG4gICAgICBjb25zdCBkYXRlID0gcHJldmlvdXNTZWxlY3Rpb24uZW5kIHx8IHByZXZpb3VzU2VsZWN0aW9uLnN0YXJ0O1xyXG4gICAgICBpZiAoZGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGlvbkZyb21EYXRlKGRhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblNpbmdsZURhdGUocHJldmlvdXNTZWxlY3Rpb24pKSB7XHJcbiAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBzZWxlY3Rpb24gd2FzIGEgc2luZ2xlIGRhdGUsIG1ha2UgdGhlIHJhbmdlIHRoYXQgbW9udGhcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0aW9uRnJvbURhdGUocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV4dFNlbGVjdGlvbihzZWxlY3Rpb246IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgLy8gTW92ZSB0aGUgc2VsZWN0aW9uIHRvIHRoZSBuZXh0IG1vbnRoXHJcbiAgICBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uKSAmJiBzZWxlY3Rpb24uc3RhcnQpIHsgXHJcbiAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQoc2VsZWN0aW9uLnN0YXJ0KS5hZGQoMSwgJ21vbnRoJyk7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGlvbkZyb21EYXRlKGRhdGUudG9EYXRlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBzaW5jZSB0aGUgbmV4dCBzdGVwcGVyIGlzIGRpc2FibGVkIGlmIHRoZSBzZWxlY3Rpb24gb25seSBoYXMgb25lIGRhdGUuXHJcbiAgICAvLyBJZiBpdCBkb2VzLCBqdXN0IHJldHVybiB0aGUgc2VsZWN0aW9uIGFzLWlzLlxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGdldFByZXZpb3VzU2VsZWN0aW9uKHNlbGVjdGlvbjogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICAvLyBNb3ZlIHRoZSBzZWxlY3Rpb24gdG8gdGhlIHByZXZpb3VzIG1vbnRoXHJcbiAgICBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uKSAmJiBzZWxlY3Rpb24uc3RhcnQpIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IG1vbWVudChzZWxlY3Rpb24uc3RhcnQpLnN1YnRyYWN0KDEsICdtb250aCcpO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb25Gcm9tRGF0ZShkYXRlLnRvRGF0ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gc2luY2UgdGhlIHByZXZpb3VzIHN0ZXBwZXIgaXMgZGlzYWJsZWQgaWYgdGhlIHNlbGVjdGlvbiBvbmx5IGhhcyBvbmUgZGF0ZS5cclxuICAgIC8vIElmIGl0IGRvZXMsIGp1c3QgcmV0dXJuIHRoZSBzZWxlY3Rpb24gYXMtaXMuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,79 @@
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 'month' selection mode.
6
+ */
7
+ export class QuarterSelectionStrategy extends DateInputSelectionStrategyBase {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.selectionViewMode = 'quarter';
11
+ this.validViewModes = ['quarter', 'year'];
12
+ this.showSecondaryTextbox = false;
13
+ this.showSecondaryCalendar = false;
14
+ }
15
+ formatSelection(selection) {
16
+ // Format the the quarter range as "MMM–MMM, YYYY"
17
+ // We only have one textbox in this mode
18
+ if (DateInput.isSelectionRange(selection)) {
19
+ const start = moment(selection.start).format('MMM');
20
+ const end = moment(selection.end).format('MMM');
21
+ const year = moment(selection.end).format('YYYY');
22
+ return {
23
+ textbox: `${start}–${end}, ${year}`,
24
+ textbox2: null
25
+ };
26
+ }
27
+ // This shouldn't happen since the selection should always be a range in quarter mode
28
+ return { textbox: null, textbox2: null };
29
+ }
30
+ parseTextboxValues(value, parseFormats, opts) {
31
+ // Only one textbox is used in this mode
32
+ const date = this.parseString(value.textbox, parseFormats, opts);
33
+ if (!date) {
34
+ return null;
35
+ }
36
+ return this.getSelectionFromDate(date);
37
+ }
38
+ getSelectionFromDate(date) {
39
+ return {
40
+ start: moment(date).startOf('quarter').toDate(),
41
+ end: moment(date).endOf('quarter').toDate()
42
+ };
43
+ }
44
+ getNewSelectionFromExisting(previousSelection) {
45
+ if (DateInput.isSelectionRange(previousSelection)) {
46
+ // Base the quarter range off of the existing selection's end date, falling back to the start date
47
+ const date = previousSelection.end || previousSelection.start;
48
+ if (date) {
49
+ return this.getSelectionFromDate(date);
50
+ }
51
+ }
52
+ else if (DateInput.isSelectionSingleDate(previousSelection)) {
53
+ // If the previous selection was a single date, make the range that quarter
54
+ return this.getSelectionFromDate(previousSelection);
55
+ }
56
+ return null;
57
+ }
58
+ getNextSelection(selection) {
59
+ // Move the selection to the next quarter
60
+ if (DateInput.isSelectionRange(selection) && selection.start) {
61
+ const date = moment(selection.start).add(1, 'quarter');
62
+ return this.getSelectionFromDate(date.toDate());
63
+ }
64
+ // This shouldn't happen since the next stepper is disabled if the selection only has one date.
65
+ // If it does, just return the selection as-is.
66
+ return selection;
67
+ }
68
+ getPreviousSelection(selection) {
69
+ // Move the selection to the previous quarter
70
+ if (DateInput.isSelectionRange(selection) && selection.start) {
71
+ const date = moment(selection.start).subtract(1, 'quarter');
72
+ return this.getSelectionFromDate(date.toDate());
73
+ }
74
+ // This shouldn't happen since the previous stepper is disabled if the selection only has one date.
75
+ // If it does, just return the selection as-is.
76
+ return selection;
77
+ }
78
+ }
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhcnRlci1zZWxlY3Rpb24tc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LXNlbGVjdGlvbi1zdHJhdGVnaWVzL3F1YXJ0ZXItc2VsZWN0aW9uLXN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdEY7O0dBRUc7QUFDSCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsOEJBQThCO0lBQTVFOztRQUNrQixzQkFBaUIsR0FBc0IsU0FBUyxDQUFDO1FBQ2pELG1CQUFjLEdBQXdCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFELHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QiwwQkFBcUIsR0FBRyxLQUFLLENBQUM7SUEyRWhELENBQUM7SUF6RUMsZUFBZSxDQUFDLFNBQXNDO1FBQ3BELGtEQUFrRDtRQUNsRCx3Q0FBd0M7UUFDeEMsSUFBSSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDekMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEQsT0FBTztnQkFDTCxPQUFPLEVBQUUsR0FBRyxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtnQkFDbkMsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDO1NBQ0g7UUFFRCxxRkFBcUY7UUFDckYsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFzQyxFQUFFLFlBQXNCLEVBQUUsSUFBK0I7UUFDaEgsd0NBQXdDO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBVTtRQUM3QixPQUFPO1lBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQy9DLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtTQUM1QyxDQUFDO0lBQ0osQ0FBQztJQUVELDJCQUEyQixDQUFDLGlCQUF1QztRQUNqRSxJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQ2pELGtHQUFrRztZQUNsRyxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksaUJBQWlCLENBQUMsS0FBSyxDQUFDO1lBQzlELElBQUksSUFBSSxFQUFFO2dCQUNSLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3hDO1NBQ0Y7YUFBTSxJQUFJLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQzdELDJFQUEyRTtZQUMzRSxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBcUM7UUFDcEQseUNBQXlDO1FBQ3pDLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDNUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ2pEO1FBRUQsK0ZBQStGO1FBQy9GLCtDQUErQztRQUMvQyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsU0FBcUM7UUFDeEQsNkNBQTZDO1FBQzdDLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDNUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzVELE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ2pEO1FBRUQsbUdBQW1HO1FBQ25HLCtDQUErQztRQUMvQyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHsgQ2FsZW5kYXIgfSBmcm9tIFwiLi4vLi4vY2FsZW5kYXIvY2FsZW5kYXIudHlwZXNcIjtcclxuaW1wb3J0IHsgRGF0ZUlucHV0IH0gZnJvbSBcIi4uL2RhdGUtaW5wdXQudHlwZXNcIjtcclxuaW1wb3J0IHsgRGF0ZUlucHV0U2VsZWN0aW9uU3RyYXRlZ3lCYXNlIH0gZnJvbSBcIi4vZGF0ZS1pbnB1dC1zZWxlY3Rpb24tc3RyYXRlZ3ktYmFzZVwiO1xyXG5cclxuLyoqXHJcbiAqIFNlbGVjdGlvbiBzdHJhdGVneSBmb3IgdGhlICdtb250aCcgc2VsZWN0aW9uIG1vZGUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUXVhcnRlclNlbGVjdGlvblN0cmF0ZWd5IGV4dGVuZHMgRGF0ZUlucHV0U2VsZWN0aW9uU3RyYXRlZ3lCYXNlIHtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0aW9uVmlld01vZGU6IENhbGVuZGFyLlZpZXdNb2RlID0gJ3F1YXJ0ZXInO1xyXG4gIHB1YmxpYyByZWFkb25seSB2YWxpZFZpZXdNb2RlczogQ2FsZW5kYXIuVmlld01vZGVbXSA9IFsncXVhcnRlcicsICd5ZWFyJ107XHJcbiAgcHVibGljIHJlYWRvbmx5IHNob3dTZWNvbmRhcnlUZXh0Ym94ID0gZmFsc2U7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNob3dTZWNvbmRhcnlDYWxlbmRhciA9IGZhbHNlO1xyXG5cclxuICBmb3JtYXRTZWxlY3Rpb24oc2VsZWN0aW9uPzogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuVGV4dGJveEdyb3VwWyd2YWx1ZSddIHtcclxuICAgIC8vIEZvcm1hdCB0aGUgdGhlIHF1YXJ0ZXIgcmFuZ2UgYXMgXCJNTU3igJNNTU0sIFlZWVlcIlxyXG4gICAgLy8gV2Ugb25seSBoYXZlIG9uZSB0ZXh0Ym94IGluIHRoaXMgbW9kZVxyXG4gICAgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblJhbmdlKHNlbGVjdGlvbikpIHtcclxuICAgICAgY29uc3Qgc3RhcnQgPSBtb21lbnQoc2VsZWN0aW9uLnN0YXJ0KS5mb3JtYXQoJ01NTScpO1xyXG4gICAgICBjb25zdCBlbmQgPSBtb21lbnQoc2VsZWN0aW9uLmVuZCkuZm9ybWF0KCdNTU0nKTtcclxuICAgICAgY29uc3QgeWVhciA9IG1vbWVudChzZWxlY3Rpb24uZW5kKS5mb3JtYXQoJ1lZWVknKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0ZXh0Ym94OiBgJHtzdGFydH3igJMke2VuZH0sICR7eWVhcn1gLFxyXG4gICAgICAgIHRleHRib3gyOiBudWxsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBzaW5jZSB0aGUgc2VsZWN0aW9uIHNob3VsZCBhbHdheXMgYmUgYSByYW5nZSBpbiBxdWFydGVyIG1vZGVcclxuICAgIHJldHVybiB7IHRleHRib3g6IG51bGwsIHRleHRib3gyOiBudWxsIH07XHJcbiAgfVxyXG5cclxuICBwYXJzZVRleHRib3hWYWx1ZXModmFsdWU6IERhdGVJbnB1dC5UZXh0Ym94R3JvdXBbJ3ZhbHVlJ10sIHBhcnNlRm9ybWF0czogc3RyaW5nW10sIG9wdHM/OiBEYXRlSW5wdXQuUGFyc2luZ09wdGlvbnMpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICAvLyBPbmx5IG9uZSB0ZXh0Ym94IGlzIHVzZWQgaW4gdGhpcyBtb2RlXHJcbiAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZVN0cmluZyh2YWx1ZS50ZXh0Ym94LCBwYXJzZUZvcm1hdHMsIG9wdHMpO1xyXG4gICAgXHJcbiAgICBpZiAoIWRhdGUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0aW9uRnJvbURhdGUoZGF0ZSk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3Rpb25Gcm9tRGF0ZShkYXRlOiBEYXRlKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc3RhcnQ6IG1vbWVudChkYXRlKS5zdGFydE9mKCdxdWFydGVyJykudG9EYXRlKCksXHJcbiAgICAgIGVuZDogbW9tZW50KGRhdGUpLmVuZE9mKCdxdWFydGVyJykudG9EYXRlKClcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXROZXdTZWxlY3Rpb25Gcm9tRXhpc3RpbmcocHJldmlvdXNTZWxlY3Rpb24/OiBEYXRlSW5wdXQuU2VsZWN0aW9uKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblJhbmdlKHByZXZpb3VzU2VsZWN0aW9uKSkge1xyXG4gICAgICAvLyBCYXNlIHRoZSBxdWFydGVyIHJhbmdlIG9mZiBvZiB0aGUgZXhpc3Rpbmcgc2VsZWN0aW9uJ3MgZW5kIGRhdGUsIGZhbGxpbmcgYmFjayB0byB0aGUgc3RhcnQgZGF0ZVxyXG4gICAgICBjb25zdCBkYXRlID0gcHJldmlvdXNTZWxlY3Rpb24uZW5kIHx8IHByZXZpb3VzU2VsZWN0aW9uLnN0YXJ0O1xyXG4gICAgICBpZiAoZGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGlvbkZyb21EYXRlKGRhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblNpbmdsZURhdGUocHJldmlvdXNTZWxlY3Rpb24pKSB7XHJcbiAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBzZWxlY3Rpb24gd2FzIGEgc2luZ2xlIGRhdGUsIG1ha2UgdGhlIHJhbmdlIHRoYXQgcXVhcnRlclxyXG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb25Gcm9tRGF0ZShwcmV2aW91c1NlbGVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXROZXh0U2VsZWN0aW9uKHNlbGVjdGlvbjogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICAvLyBNb3ZlIHRoZSBzZWxlY3Rpb24gdG8gdGhlIG5leHQgcXVhcnRlclxyXG4gICAgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblJhbmdlKHNlbGVjdGlvbikgJiYgc2VsZWN0aW9uLnN0YXJ0KSB7XHJcbiAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQoc2VsZWN0aW9uLnN0YXJ0KS5hZGQoMSwgJ3F1YXJ0ZXInKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0aW9uRnJvbURhdGUoZGF0ZS50b0RhdGUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIHNpbmNlIHRoZSBuZXh0IHN0ZXBwZXIgaXMgZGlzYWJsZWQgaWYgdGhlIHNlbGVjdGlvbiBvbmx5IGhhcyBvbmUgZGF0ZS5cclxuICAgIC8vIElmIGl0IGRvZXMsIGp1c3QgcmV0dXJuIHRoZSBzZWxlY3Rpb24gYXMtaXMuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNTZWxlY3Rpb24oc2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIC8vIE1vdmUgdGhlIHNlbGVjdGlvbiB0byB0aGUgcHJldmlvdXMgcXVhcnRlclxyXG4gICAgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblJhbmdlKHNlbGVjdGlvbikgJiYgc2VsZWN0aW9uLnN0YXJ0KSB7XHJcbiAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQoc2VsZWN0aW9uLnN0YXJ0KS5zdWJ0cmFjdCgxLCAncXVhcnRlcicpO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb25Gcm9tRGF0ZShkYXRlLnRvRGF0ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gc2luY2UgdGhlIHByZXZpb3VzIHN0ZXBwZXIgaXMgZGlzYWJsZWQgaWYgdGhlIHNlbGVjdGlvbiBvbmx5IGhhcyBvbmUgZGF0ZS5cclxuICAgIC8vIElmIGl0IGRvZXMsIGp1c3QgcmV0dXJuIHRoZSBzZWxlY3Rpb24gYXMtaXMuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uO1xyXG4gIH1cclxufVxyXG4iXX0=