@energycap/components 0.42.4-esbuild.20250131-1219 → 0.42.4-esbuild.20250131-1256

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 (324) hide show
  1. package/esm2022/energycap-components.mjs +5 -0
  2. package/esm2022/lib/components.module.mjs +423 -0
  3. package/esm2022/lib/controls/banner/banner.component.mjs +109 -0
  4. package/esm2022/lib/controls/button/button.component.mjs +106 -0
  5. package/esm2022/lib/controls/button/copy-button-base.directive.mjs +67 -0
  6. package/esm2022/lib/controls/button/copy-button.directive.mjs +28 -0
  7. package/esm2022/lib/controls/button/copy-table-button.directive.mjs +43 -0
  8. package/esm2022/lib/controls/calendar/calendar-item.component.mjs +91 -0
  9. package/esm2022/lib/controls/calendar/calendar.component.mjs +248 -0
  10. package/esm2022/lib/controls/calendar/calendar.types.mjs +2 -0
  11. package/esm2022/lib/controls/checkbox/checkbox.component.mjs +140 -0
  12. package/esm2022/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +38 -0
  13. package/esm2022/lib/controls/combobox/combobox.component.mjs +879 -0
  14. package/esm2022/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +57 -0
  15. package/esm2022/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +62 -0
  16. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +100 -0
  17. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +101 -0
  18. package/esm2022/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +76 -0
  19. package/esm2022/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +79 -0
  20. package/esm2022/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +210 -0
  21. package/esm2022/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +81 -0
  22. package/esm2022/lib/controls/date-input/date-input.component.mjs +464 -0
  23. package/esm2022/lib/controls/date-input/date-input.types.mjs +44 -0
  24. package/esm2022/lib/controls/dropdown/dropdown.component.mjs +243 -0
  25. package/esm2022/lib/controls/file-upload/file-upload.component.mjs +261 -0
  26. package/esm2022/lib/controls/form-control/form-control.component.mjs +98 -0
  27. package/esm2022/lib/controls/form-control-base.mjs +151 -0
  28. package/esm2022/lib/controls/form-control-label/form-control-label.component.mjs +136 -0
  29. package/esm2022/lib/controls/form-group/form-group.component.mjs +261 -0
  30. package/esm2022/lib/controls/help-popover/help-popover.component.mjs +31 -0
  31. package/esm2022/lib/controls/item-picker/item-picker.component.mjs +329 -0
  32. package/esm2022/lib/controls/link-button/link-button.component.mjs +11 -0
  33. package/esm2022/lib/controls/menu/menu.component.mjs +485 -0
  34. package/esm2022/lib/controls/navigation/link-item.mjs +2 -0
  35. package/esm2022/lib/controls/navigation/nav-group.mjs +39 -0
  36. package/esm2022/lib/controls/navigation/nav-item-active.directive.mjs +92 -0
  37. package/esm2022/lib/controls/navigation/nav-item.mjs +2 -0
  38. package/esm2022/lib/controls/numericbox/numericbox.component.mjs +372 -0
  39. package/esm2022/lib/controls/popover/popover.component.mjs +117 -0
  40. package/esm2022/lib/controls/radio-button/radio-button-option.mjs +3 -0
  41. package/esm2022/lib/controls/radio-button/radio-button.component.mjs +82 -0
  42. package/esm2022/lib/controls/select/select.component.mjs +88 -0
  43. package/esm2022/lib/controls/tabs/tabs.component.mjs +47 -0
  44. package/esm2022/lib/controls/textbox/textbox.component.mjs +155 -0
  45. package/esm2022/lib/core/cache.service.mjs +105 -0
  46. package/esm2022/lib/core/custom-validators.mjs +29 -0
  47. package/esm2022/lib/core/date-time-helper.mjs +228 -0
  48. package/esm2022/lib/core/error.service.mjs +61 -0
  49. package/esm2022/lib/core/router-helper.service.mjs +111 -0
  50. package/esm2022/lib/core/scroll.service.mjs +89 -0
  51. package/esm2022/lib/core/telemetry-tracker.service.mjs +16 -0
  52. package/esm2022/lib/core/telemetry.service.mjs +38 -0
  53. package/esm2022/lib/core/validation-message.service.mjs +185 -0
  54. package/esm2022/lib/core/validation-patterns.mjs +31 -0
  55. package/esm2022/lib/core/window.service.mjs +186 -0
  56. package/esm2022/lib/display/app-bar/app-bar.component.mjs +46 -0
  57. package/esm2022/lib/display/avatar/avatar.component.mjs +67 -0
  58. package/esm2022/lib/display/avatar/avatar.service.mjs +64 -0
  59. package/esm2022/lib/display/confirm/confirm.component.mjs +168 -0
  60. package/esm2022/lib/display/dialog/dialog-content.mjs +2 -0
  61. package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -0
  62. package/esm2022/lib/display/dialog/dialog-types.mjs +77 -0
  63. package/esm2022/lib/display/dialog/dialog.component.mjs +281 -0
  64. package/esm2022/lib/display/dialog/dialog.service.mjs +71 -0
  65. package/esm2022/lib/display/help/help-types.mjs +2 -0
  66. package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +111 -0
  67. package/esm2022/lib/display/hierarchy/hierarchy-mocks.spec.mjs +54 -0
  68. package/esm2022/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +61 -0
  69. package/esm2022/lib/display/item-display/item-display.component.mjs +81 -0
  70. package/esm2022/lib/display/json-display/json-display.component.mjs +47 -0
  71. package/esm2022/lib/display/resizable/resizable-base.mjs +120 -0
  72. package/esm2022/lib/display/resizable/resizable.component.mjs +57 -0
  73. package/esm2022/lib/display/spinner/spinner.component.mjs +12 -0
  74. package/esm2022/lib/display/splash/splash.component.mjs +42 -0
  75. package/esm2022/lib/display/splash/splash.service.mjs +35 -0
  76. package/esm2022/lib/display/table/resizable-column.component.mjs +20 -0
  77. package/esm2022/lib/display/table/resizable-table.directive.mjs +227 -0
  78. package/esm2022/lib/display/table/searchable-table.component.mjs +342 -0
  79. package/esm2022/lib/display/table/table-detail-row.component.mjs +28 -0
  80. package/esm2022/lib/display/table/table-locked-column.component.mjs +58 -0
  81. package/esm2022/lib/display/table/table-master-header-row.component.mjs +14 -0
  82. package/esm2022/lib/display/table/table-master-row.component.mjs +163 -0
  83. package/esm2022/lib/display/table/table-pagination.component.mjs +155 -0
  84. package/esm2022/lib/display/table/table-selectable-row.component.mjs +235 -0
  85. package/esm2022/lib/display/table/table.component.mjs +249 -0
  86. package/esm2022/lib/display/tags/tag.mjs +18 -0
  87. package/esm2022/lib/display/tags/tags.component.mjs +77 -0
  88. package/esm2022/lib/display/toast/toast/toast.component.mjs +77 -0
  89. package/esm2022/lib/display/toast/toast-types.mjs +8 -0
  90. package/esm2022/lib/display/toast/toast.service.mjs +35 -0
  91. package/esm2022/lib/display/toast/toaster/toaster.component.mjs +114 -0
  92. package/esm2022/lib/display/tooltip/tooltip.component.mjs +28 -0
  93. package/esm2022/lib/display/tooltip/tooltip.service.mjs +78 -0
  94. package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +173 -0
  95. package/esm2022/lib/display/tour/tour-types.mjs +34 -0
  96. package/esm2022/lib/display/tour/tour.component.mjs +398 -0
  97. package/esm2022/lib/display/tour/tour.service.mjs +75 -0
  98. package/esm2022/lib/display/tree/tree.component.mjs +135 -0
  99. package/esm2022/lib/display/view-overlay/view-overlay.component.mjs +58 -0
  100. package/esm2022/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -0
  101. package/esm2022/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -0
  102. package/esm2022/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +100 -0
  103. package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +166 -0
  104. package/esm2022/lib/shared/display/pipes/date-display.pipe.mjs +50 -0
  105. package/esm2022/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -0
  106. package/esm2022/lib/shared/display/pipes/relative-date.pipe.mjs +62 -0
  107. package/esm2022/lib/shared/display/pipes/row-count.pipe.mjs +48 -0
  108. package/esm2022/lib/shared/display/pipes/time-display.pipe.mjs +41 -0
  109. package/esm2022/lib/shared/display.mjs +6 -0
  110. package/esm2022/lib/shared/form-group.helper.mjs +67 -0
  111. package/esm2022/lib/shared/json-helper.mjs +19 -0
  112. package/esm2022/lib/shared/lodash-helper.mjs +52 -0
  113. package/esm2022/lib/shared/page/page-base/page-base.component.mjs +387 -0
  114. package/esm2022/lib/shared/page/page-statuses.mjs +23 -0
  115. package/esm2022/lib/shared/page/page-title/page-title.component.mjs +23 -0
  116. package/esm2022/lib/shared/page/page-view/page-view.component.mjs +147 -0
  117. package/esm2022/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +17 -0
  118. package/esm2022/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +17 -0
  119. package/esm2022/lib/shared/testing/page-base-component-test-helper.spec.mjs +38 -0
  120. package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +98 -0
  121. package/esm2022/lib/shared/testing/public-mocks.spec.mjs +148 -0
  122. package/esm2022/lib/shared/testing/spy-factory.spec.mjs +40 -0
  123. package/esm2022/lib/shared/testing/translation-mocks.spec.mjs +57 -0
  124. package/esm2022/lib/shared/user-preference.service.mjs +17 -0
  125. package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -0
  126. package/esm2022/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -0
  127. package/esm2022/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -0
  128. package/esm2022/public-api.mjs +117 -0
  129. package/fesm2022/energycap-components.mjs +13219 -0
  130. package/fesm2022/energycap-components.mjs.map +1 -0
  131. package/index.d.ts +5 -0
  132. package/lib/components.module.d.ts +92 -0
  133. package/lib/controls/banner/banner.component.d.ts +50 -0
  134. package/lib/controls/button/button.component.d.ts +78 -0
  135. package/lib/controls/button/copy-button-base.directive.d.ts +20 -0
  136. package/lib/controls/button/copy-button.directive.d.ts +14 -0
  137. package/lib/controls/button/copy-table-button.directive.d.ts +19 -0
  138. package/lib/controls/calendar/calendar-item.component.d.ts +22 -0
  139. package/lib/controls/calendar/calendar.component.d.ts +52 -0
  140. package/lib/controls/calendar/calendar.types.d.ts +11 -0
  141. package/lib/controls/checkbox/checkbox.component.d.ts +65 -0
  142. package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +25 -0
  143. package/lib/controls/combobox/combobox.component.d.ts +418 -0
  144. package/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.d.ts +42 -0
  145. package/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.d.ts +21 -0
  146. package/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.d.ts +21 -0
  147. package/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.d.ts +21 -0
  148. package/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.d.ts +18 -0
  149. package/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.d.ts +18 -0
  150. package/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.d.ts +21 -0
  151. package/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.d.ts +20 -0
  152. package/lib/controls/date-input/date-input.component.d.ts +115 -0
  153. package/lib/controls/date-input/date-input.types.d.ts +62 -0
  154. package/lib/controls/dropdown/dropdown.component.d.ts +161 -0
  155. package/lib/controls/file-upload/file-upload.component.d.ts +124 -0
  156. package/lib/controls/form-control/form-control.component.d.ts +28 -0
  157. package/lib/controls/form-control-base.d.ts +110 -0
  158. package/lib/controls/form-control-label/form-control-label.component.d.ts +73 -0
  159. package/lib/controls/form-group/form-group.component.d.ts +105 -0
  160. package/lib/controls/help-popover/help-popover.component.d.ts +11 -0
  161. package/lib/controls/item-picker/item-picker.component.d.ts +164 -0
  162. package/lib/controls/link-button/link-button.component.d.ts +5 -0
  163. package/lib/controls/menu/menu.component.d.ts +255 -0
  164. package/lib/controls/navigation/link-item.d.ts +32 -0
  165. package/lib/controls/navigation/nav-group.d.ts +18 -0
  166. package/lib/controls/navigation/nav-item-active.directive.d.ts +42 -0
  167. package/lib/controls/navigation/nav-item.d.ts +31 -0
  168. package/lib/controls/numericbox/numericbox.component.d.ts +148 -0
  169. package/lib/controls/popover/popover.component.d.ts +51 -0
  170. package/lib/controls/radio-button/radio-button-option.d.ts +19 -0
  171. package/lib/controls/radio-button/radio-button.component.d.ts +53 -0
  172. package/lib/controls/select/select.component.d.ts +44 -0
  173. package/lib/controls/tabs/tabs.component.d.ts +30 -0
  174. package/lib/controls/textbox/textbox.component.d.ts +107 -0
  175. package/lib/core/cache.service.d.ts +33 -0
  176. package/lib/core/custom-validators.d.ts +20 -0
  177. package/lib/core/date-time-helper.d.ts +101 -0
  178. package/lib/core/error.service.d.ts +20 -0
  179. package/lib/core/router-helper.service.d.ts +48 -0
  180. package/lib/core/scroll.service.d.ts +36 -0
  181. package/lib/core/telemetry-tracker.service.d.ts +13 -0
  182. package/lib/core/telemetry.service.d.ts +31 -0
  183. package/lib/core/validation-message.service.d.ts +26 -0
  184. package/lib/core/validation-patterns.d.ts +22 -0
  185. package/lib/core/window.service.d.ts +116 -0
  186. package/lib/display/app-bar/app-bar.component.d.ts +20 -0
  187. package/lib/display/avatar/avatar.component.d.ts +35 -0
  188. package/lib/display/avatar/avatar.service.d.ts +24 -0
  189. package/lib/display/confirm/confirm.component.d.ts +123 -0
  190. package/lib/display/dialog/dialog-content.d.ts +19 -0
  191. package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +32 -0
  192. package/lib/display/dialog/dialog-types.d.ts +130 -0
  193. package/lib/display/dialog/dialog.component.d.ts +120 -0
  194. package/lib/display/dialog/dialog.service.d.ts +48 -0
  195. package/lib/display/help/help-types.d.ts +33 -0
  196. package/lib/display/hierarchy/hierarchy-base.d.ts +97 -0
  197. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -0
  198. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +34 -0
  199. package/lib/display/item-display/item-display.component.d.ts +43 -0
  200. package/lib/display/json-display/json-display.component.d.ts +16 -0
  201. package/lib/display/resizable/resizable-base.d.ts +67 -0
  202. package/lib/display/resizable/resizable.component.d.ts +31 -0
  203. package/lib/display/spinner/spinner.component.d.ts +5 -0
  204. package/lib/display/splash/splash.component.d.ts +16 -0
  205. package/lib/display/splash/splash.service.d.ts +22 -0
  206. package/lib/display/table/resizable-column.component.d.ts +10 -0
  207. package/lib/display/table/resizable-table.directive.d.ts +93 -0
  208. package/lib/display/table/searchable-table.component.d.ts +206 -0
  209. package/lib/display/table/table-detail-row.component.d.ts +8 -0
  210. package/lib/display/table/table-locked-column.component.d.ts +20 -0
  211. package/lib/display/table/table-master-header-row.component.d.ts +9 -0
  212. package/lib/display/table/table-master-row.component.d.ts +113 -0
  213. package/lib/display/table/table-pagination.component.d.ts +91 -0
  214. package/lib/display/table/table-selectable-row.component.d.ts +102 -0
  215. package/lib/display/table/table.component.d.ts +121 -0
  216. package/lib/display/tags/tag.d.ts +18 -0
  217. package/lib/display/tags/tags.component.d.ts +48 -0
  218. package/lib/display/toast/toast/toast.component.d.ts +23 -0
  219. package/lib/display/toast/toast-types.d.ts +24 -0
  220. package/lib/display/toast/toast.service.d.ts +20 -0
  221. package/lib/display/toast/toaster/toaster.component.d.ts +35 -0
  222. package/lib/display/tooltip/tooltip.component.d.ts +70 -0
  223. package/lib/display/tooltip/tooltip.service.d.ts +16 -0
  224. package/lib/display/tooltip-directive/tooltip.directive.d.ts +44 -0
  225. package/lib/display/tour/tour-types.d.ts +70 -0
  226. package/lib/display/tour/tour.component.d.ts +147 -0
  227. package/lib/display/tour/tour.service.d.ts +38 -0
  228. package/lib/display/tree/tree.component.d.ts +75 -0
  229. package/lib/display/view-overlay/view-overlay.component.d.ts +38 -0
  230. package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +14 -0
  231. package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +60 -0
  232. package/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.d.ts +23 -0
  233. package/lib/shared/directives/popup/popup-container.directive.d.ts +101 -0
  234. package/lib/shared/display/pipes/date-display.pipe.d.ts +21 -0
  235. package/lib/shared/display/pipes/highlight-text.pipe.d.ts +9 -0
  236. package/lib/shared/display/pipes/relative-date.pipe.d.ts +36 -0
  237. package/lib/shared/display/pipes/row-count.pipe.d.ts +23 -0
  238. package/lib/shared/display/pipes/time-display.pipe.d.ts +18 -0
  239. package/lib/shared/display.d.ts +42 -0
  240. package/lib/shared/form-group.helper.d.ts +31 -0
  241. package/lib/shared/json-helper.d.ts +7 -0
  242. package/lib/shared/lodash-helper.d.ts +18 -0
  243. package/lib/shared/page/page-base/page-base.component.d.ts +259 -0
  244. package/lib/shared/page/page-statuses.d.ts +13 -0
  245. package/lib/shared/page/page-title/page-title.component.d.ts +9 -0
  246. package/lib/shared/page/page-view/page-view.component.d.ts +102 -0
  247. package/lib/shared/testing/copy-button-base-test-injector-factory.spec.d.ts +4 -0
  248. package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -0
  249. package/lib/shared/testing/page-base-component-test-helper.spec.d.ts +30 -0
  250. package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +28 -0
  251. package/lib/shared/testing/public-mocks.spec.d.ts +90 -0
  252. package/lib/shared/testing/spy-factory.spec.d.ts +27 -0
  253. package/lib/shared/testing/translation-mocks.spec.d.ts +30 -0
  254. package/lib/shared/user-preference.service.d.ts +13 -0
  255. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +134 -0
  256. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +27 -0
  257. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +10 -0
  258. package/package.json +1 -5
  259. package/public-api.d.ts +113 -0
  260. package/schematics/collection.json +10 -0
  261. package/schematics/rxjs-7-upgrade/index.d.ts +3 -0
  262. package/schematics/rxjs-7-upgrade/index.js +68 -0
  263. package/schematics/rxjs-7-upgrade/index.js.map +1 -0
  264. package/schematics/rxjs-7-upgrade/schema.d.ts +4 -0
  265. package/schematics/rxjs-7-upgrade/schema.js +3 -0
  266. package/schematics/rxjs-7-upgrade/schema.js.map +1 -0
  267. package/schematics/rxjs-7-upgrade/schema.json +14 -0
  268. package/schematics/utilities/typescript.d.ts +7 -0
  269. package/schematics/utilities/typescript.js +42 -0
  270. package/schematics/utilities/typescript.js.map +1 -0
  271. package/schematics/utilities/workspace.d.ts +8 -0
  272. package/schematics/utilities/workspace.js +72 -0
  273. package/schematics/utilities/workspace.js.map +1 -0
  274. package/src/assets/images/email-icon.png +0 -0
  275. package/src/assets/images/email-logo.png +0 -0
  276. package/src/assets/images/favicon-ech.svg +7 -0
  277. package/src/assets/images/favicon-esa.svg +6 -0
  278. package/src/assets/images/favicon-eum.svg +6 -0
  279. package/src/assets/images/favicon.svg +5 -0
  280. package/src/assets/images/icon-carbonhub.svg +10 -0
  281. package/src/assets/images/icon-eum.svg +5 -0
  282. package/src/assets/images/icon-ucp.svg +5 -0
  283. package/src/assets/images/icon-wattics.svg +5 -0
  284. package/src/assets/images/icon.svg +4 -0
  285. package/src/assets/images/logo.svg +3 -0
  286. package/src/assets/images/splash.gif +0 -0
  287. package/src/assets/locales/en_US.json +59 -0
  288. package/src/assets/scripts/unsupported-browser.js +17 -0
  289. package/src/styles/_base.scss +38 -0
  290. package/src/styles/_colors.scss +96 -0
  291. package/src/styles/_core.scss +4 -0
  292. package/src/styles/_functions.scss +114 -0
  293. package/src/styles/_global-variables.scss +232 -0
  294. package/src/styles/_icons.scss +24 -0
  295. package/src/styles/bootstrap/_grid.scss +34 -0
  296. package/src/styles/bootstrap/_reboot.scss +323 -0
  297. package/src/styles/components/_card.scss +21 -0
  298. package/src/styles/components/_link-icons.scss +38 -0
  299. package/src/styles/components/_splash.scss +57 -0
  300. package/src/styles/components/_unsupported-browsers.scss +24 -0
  301. package/src/styles/email/_email-base.scss +228 -0
  302. package/src/styles/email/email.scss +43 -0
  303. package/src/styles/index.scss +27 -0
  304. package/src/styles/mixins/_animations.scss +18 -0
  305. package/src/styles/mixins/_button-base.scss +185 -0
  306. package/src/styles/mixins/_card-base.scss +40 -0
  307. package/src/styles/mixins/_common.scss +52 -0
  308. package/src/styles/mixins/_dialog-base.scss +96 -0
  309. package/src/styles/mixins/_form-control-base.scss +641 -0
  310. package/src/styles/mixins/_login.scss +74 -0
  311. package/src/styles/mixins/_menu-base.scss +153 -0
  312. package/src/styles/mixins/_overlay-base.scss +33 -0
  313. package/src/styles/mixins/_resizable-base.scss +57 -0
  314. package/src/styles/mixins/_spinner-base.scss +34 -0
  315. package/src/styles/mixins/_table-base.scss +298 -0
  316. package/src/styles/mixins/_tabs-base.scss +110 -0
  317. package/src/styles/mixins/_tags-base.scss +116 -0
  318. package/src/styles/mixins/_text.scss +89 -0
  319. package/src/styles/mixins.scss +15 -0
  320. package/src/styles/utilities/_borders.scss +30 -0
  321. package/src/styles/utilities/_common.scss +49 -0
  322. package/src/styles/utilities/_layout.scss +116 -0
  323. package/src/styles/utilities/_spacing.scss +65 -0
  324. package/src/styles/utilities/_text.scss +139 -0
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC1zZWxlY3Rpb24tc3RyYXRlZ3ktYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9kYXRlLWlucHV0L2RhdGUtaW5wdXQtc2VsZWN0aW9uLXN0cmF0ZWdpZXMvZGF0ZS1pbnB1dC1zZWxlY3Rpb24tc3RyYXRlZ3ktYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWhEOztHQUVHO0FBQ0gsTUFBTSxPQUFnQiw4QkFBOEI7SUFTbEQsc0VBQXNFO0lBQ3RFLFdBQVcsQ0FBQyxLQUFnQyxFQUFFLFlBQXNCLEVBQUUsSUFBK0I7UUFDbkcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztRQUV6QyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ25CLGdKQUFnSjtZQUNoSixxSUFBcUk7WUFDckksaUZBQWlGO1lBQ2pGLElBQUksSUFBSSxFQUFFLHlCQUF5QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztnQkFDckYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwQyxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQWFELHFEQUFxRDtJQUNyRCw4QkFBOEIsQ0FBQyxJQUFVLEVBQUUsaUJBQThDO1FBQ3ZGLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFNRCxxRkFBcUY7SUFDckYsc0JBQXNCLENBQUMsU0FBcUMsRUFBRSxPQUFhLEVBQUUsT0FBYSxFQUFFLFdBQTBCO1FBQ3BILElBQUksSUFBVSxDQUFDO1FBRWYsOEVBQThFO1FBQzlFLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDMUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hELHdEQUF3RDtRQUN4RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksR0FBRyxTQUFTLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBRUQsa0RBQWtEO1FBQ2xELElBQUksR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2QyxJQUFJLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFdkMsbUhBQW1IO1FBQ25ILDhIQUE4SDtRQUM5SCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUU1RyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBQUEsQ0FBQztJQUVGOzs7T0FHRztJQUNILHdCQUF3QixDQUFDLFNBQXFDLEVBQUUsT0FBYSxFQUFFLE9BQWEsRUFBRSxXQUEwQjtRQUN0SCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFBO0lBQzNELENBQUM7SUFBQSxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHsgQ2FsZW5kYXIgfSBmcm9tIFwiLi4vLi4vY2FsZW5kYXIvY2FsZW5kYXIudHlwZXNcIjtcclxuaW1wb3J0IHsgRGF0ZUlucHV0IH0gZnJvbSBcIi4uL2RhdGUtaW5wdXQudHlwZXNcIjtcclxuXHJcbi8qKlxyXG4gKiBDb250YWlucyB0aGUgbG9naWMgZm9yIHNlbGVjdGluZywgZm9ybWF0dGluZywgYW5kIHBhcnNpbmcgZGF0ZSBkYXRlcyBmb3IgYSBzcGVjaWZpYyBzZWxlY3Rpb24gbW9kZS5cclxuICovXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRlSW5wdXRTZWxlY3Rpb25TdHJhdGVneUJhc2Uge1xyXG4gIC8qKiBUaGUgY2FsZW5kYXIgdmlldyBtb2RlIHdoZXJlIHNlbGVjdGlvbnMgb2NjdXIgZm9yIHRoaXMgbW9kZS4gVGhpcyBpcyB1c2VkIHRvIHpvb20gdGhlIGNhbGVuZGFyIGludG8gdGhlIHNlbGVjdGlvbiAqL1xyXG4gIGFic3RyYWN0IHJlYWRvbmx5IHNlbGVjdGlvblZpZXdNb2RlOiBDYWxlbmRhci5WaWV3TW9kZTtcclxuICAvKiogVGhlIGxpc3Qgb2YgdmlldyBtb2RlcyB0aGF0IGFyZSBhY2Nlc3NpYmxlIGJ5IHRoaXMgc2VsZWN0aW9uIG1vZGUuIFVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNhbGVuZGFyIHZpZXcgbmVlZHMgdG8gYmUgY2hhbmdlZCBvciBub3Qgb24gc2VsZWN0aW9uIGNoYW5nZS4gKi9cclxuICBhYnN0cmFjdCByZWFkb25seSB2YWxpZFZpZXdNb2RlczogQ2FsZW5kYXIuVmlld01vZGVbXTtcclxuICAvKiogV2hldGhlciB0aGUgc2Vjb25kYXJ5IHRleHRib3ggc2hvdWxkIGJlIHNob3duIGZvciB0aGlzIHNlbGVjdGlvbiBtb2RlICovXHJcbiAgYWJzdHJhY3QgcmVhZG9ubHkgc2hvd1NlY29uZGFyeVRleHRib3g6IGJvb2xlYW47XHJcbiAgLyoqIFdoZXRoZXIgdGhlIHNlY29uZGFyeSBjYWxlbmRhciBzaG91bGQgYmUgc2hvd24gZm9yIHRoaXMgc2VsZWN0aW9uIG1vZGUgKi9cclxuICBhYnN0cmFjdCByZWFkb25seSBzaG93U2Vjb25kYXJ5Q2FsZW5kYXI6IGJvb2xlYW47XHJcbiAgLyoqIFBhcnNlcyB0aGUgc3RyaW5nIGludG8gYSBkYXRlIHVzaW5nIHRoZSBwcm92aWRlZCBwYXJzZSBmb3JtYXRzLiAqL1xyXG4gIHBhcnNlU3RyaW5nKHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJzZUZvcm1hdHM6IHN0cmluZ1tdLCBvcHRzPzogRGF0ZUlucHV0LlBhcnNpbmdPcHRpb25zKTogRGF0ZSB8IG51bGwge1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IGRhdGUgPSBtb21lbnQodmFsdWUsIHBhcnNlRm9ybWF0cyk7XHJcblxyXG4gICAgaWYgKGRhdGUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIC8vIElmIHdlJ3JlIGluIGEgdGVtcG9yYXJ5IHN0YXRlICh3aGVuIHRoZSB1c2VyIGlzIHR5cGluZyBpbiBhIHRleHRib3gpLCB3ZSBuZWVkIHRvIHNldCB0aGUgeWVhciB0byB0aGUgY3VycmVudCB5ZWFyIGlmIGl0J3MgYmVmb3JlIHRoZSBtaW4geWVhclxyXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSBjYWxlbmRhcnMgZnJvbSBzaG93aW5nIHVuaGVscGZ1bCBkYXRlcyB0aGF0IGFyZSBpbiB0aGUgZGlzdGFudCBwYXN0IGJlZm9yZSB0aGUgdXNlciBmaW5pc2hlcyB0eXBpbmcgaW4gdGhlIGRhdGUuXHJcbiAgICAgIC8vIFdlIGRvbid0IGRvIHRoaXMgbW9kaWZpY2F0aW9uIHdoZW4gdGhlIHJlYWwgc2VsZWN0aW9uIGhhcHBlbnMgb24gdGV4dGJveCBibHVyLlxyXG4gICAgICBpZiAob3B0cz8uc2hpZnRUb0N1cnJlbnRZZWFySWZCZWxvdyAmJiBkYXRlLmlzQmVmb3JlKG9wdHMuc2hpZnRUb0N1cnJlbnRZZWFySWZCZWxvdykpIHtcclxuICAgICAgICBkYXRlLnNldCgneWVhcicsIG1vbWVudCgpLnllYXIoKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBkYXRlLnRvRGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICAvKiogRm9ybWF0cyBhIGRhdGUgaW5wdXQgc2VsZWN0aW9uIGludG8gdmFsdWVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZGF0ZSBpbnB1dCdzIHRleHRib3hlcy4gKi9cclxuICBhYnN0cmFjdCBmb3JtYXRTZWxlY3Rpb24oc2VsZWN0aW9uPzogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuVGV4dGJveEdyb3VwWyd2YWx1ZSddO1xyXG4gIC8qKiBcclxuICAgKiBQYXJzZXMgdGhlIGRhdGUgaW5wdXQncyB2YWx1ZXMgaW50byBhIGRhdGUgc2VsZWN0aW9uIHRvIGRpc3BsYXkgaW4gdGhlIGNhbGVuZGFycy5cclxuICAgKiBgcGFyc2VGcm9tRW5kYCBjb250cm9scyB3aGV0aGVyIHRoZSBmaXhlZCByYW5nZSBtb2RlcyAobGFzdDdkYXlzLCBsYXN0MjhkYXlzKSB3aWxsIGtleSBvZmYgdGhlIGVuZCBkYXRlIGluc3RlYWQgb2YgdGhlIHN0YXJ0IGRhdGUuXHJcbiAgICogVGhpcyBpcyB1c2VkIHdoZW4gdGhlIHVzZXIgaXMgdHlwaW5nIGluIHRoZSBlbmQgZGF0ZSB0ZXh0Ym94LlxyXG4gICAqL1xyXG4gIGFic3RyYWN0IHBhcnNlVGV4dGJveFZhbHVlcyh2YWx1ZTogRGF0ZUlucHV0LlRleHRib3hHcm91cFsndmFsdWUnXSwgcGFyc2VGb3JtYXRzOiBzdHJpbmdbXSwgb3B0cz86IERhdGVJbnB1dC5QYXJzaW5nT3B0aW9ucyk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsO1xyXG4gIC8qKiBSZXR1cm5zIGEgc2VsZWN0aW9uIGdpdmVuIGEgZGF0ZSBhbmQgYW4gZXhpc3Rpbmcgc2VsZWN0aW9uIChpbiB0aGUgY2FzZSBvZiBkYXRlIHJhbmdlcykuIENhbGxlZCB3aGVuIGEgZGF0ZSBpcyBjbGlja2VkIGluIHRoZSBjYWxlbmRhcnMuICovXHJcbiAgYWJzdHJhY3QgZ2V0U2VsZWN0aW9uRnJvbURhdGUoZGF0ZTogRGF0ZSwgZXhpc3RpbmdTZWxlY3Rpb24/OiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsO1xyXG4gIC8qKiBSZXR1cm5zIGEgbmV3IHNlbGVjdGlvbiB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgZ2l2ZW4gcHJldmlvdXMgc2VsZWN0aW9uIGZyb20gYSBkaWZmZXJlbnQgc2VsZWN0aW9uIG1vZGUgKi9cclxuICBhYnN0cmFjdCBnZXROZXdTZWxlY3Rpb25Gcm9tRXhpc3RpbmcocHJldmlvdXNTZWxlY3Rpb24/OiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsO1xyXG4gIC8qKiBSZXR1cm5zIGEgbmV3IHNlbGVjdGlvbiBmb3IgdGhlIHByb3ZpZGVkIGRhdGUuICovXHJcbiAgZ2V0U2VsZWN0aW9uRm9yUXVpY2tTZWxlY3REYXRlKGRhdGU6IERhdGUsIGV4aXN0aW5nU2VsZWN0aW9uPzogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb25Gcm9tRGF0ZShkYXRlLCBleGlzdGluZ1NlbGVjdGlvbik7XHJcbiAgfVxyXG4gIC8qKiBSZXR1cm5zIHRoZSBuZXh0IHNlbGVjdGlvbi4gQ2FsbGVkIGJ5IHRoZSBkYXRlIGlucHV0IHN0ZXBwZXJzIHRvIG1vdmUgdGhlIHJhbmdlLiAqL1xyXG4gIGFic3RyYWN0IGdldE5leHRTZWxlY3Rpb24oc2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsO1xyXG4gIC8qKiBSZXR1cm5zIHRoZSBwcmV2aW91cyBzZWxlY3Rpb24uIENhbGxlZCBieSB0aGUgZGF0ZSBpbnB1dCBzdGVwcGVycyB0byBtb3ZlIHRoZSByYW5nZS4gKi9cclxuICBhYnN0cmFjdCBnZXRQcmV2aW91c1NlbGVjdGlvbihzZWxlY3Rpb246IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGw7XHJcbiAgXHJcbiAgLyoqIFJldHVybnMgdGhlIHZpZXcgZm9yIHRoZSBwcmltYXJ5IGNhbGVuZGFyIGZvciB0aGUgc2VsZWN0aW9uIGFuZCBzZWxlY3Rpb24gbW9kZSAqL1xyXG4gIGdldFByaW1hcnlDYWxlbmRhclZpZXcoc2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCwgbWluRGF0ZTogRGF0ZSwgbWF4RGF0ZTogRGF0ZSwgY3VycmVudFZpZXc6IENhbGVuZGFyLlZpZXcpOiBDYWxlbmRhci5WaWV3IHtcclxuICAgIGxldCBkYXRlOiBEYXRlO1xyXG5cclxuICAgIC8vIElmIHdlIGhhdmUgYSByYW5nZSwgdXNlIHRoZSBlbmQgZGF0ZSwgZGVmYXVsdGluZyB0byB0aGUgc3RhcnQgZGF0ZSBvciB0b2RheVxyXG4gICAgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblJhbmdlKHNlbGVjdGlvbikpIHtcclxuICAgICAgZGF0ZSA9IHNlbGVjdGlvbi5lbmQgfHwgc2VsZWN0aW9uLnN0YXJ0IHx8IG5ldyBEYXRlKCk7XHJcbiAgICAvLyBJZiB3ZSBoYXZlIGEgc2luZ2xlIGRhdGUsIHVzZSBpdCwgZGVmYXVsdGluZyB0byB0b2RheVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0ZSA9IHNlbGVjdGlvbiB8fCBuZXcgRGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEVuc3VyZSB0aGUgZGF0ZSBpcyB3aXRoaW4gdGhlIG1pbiBhbmQgbWF4IGRhdGVzXHJcbiAgICBkYXRlID0gZGF0ZSA8IG1pbkRhdGUgPyBtaW5EYXRlIDogZGF0ZTtcclxuICAgIGRhdGUgPSBkYXRlID4gbWF4RGF0ZSA/IG1heERhdGUgOiBkYXRlO1xyXG5cclxuICAgIC8vIElmIHRoZSBjdXJyZW50IGNhbGVuZGFyIHZpZXcgbW9kZSBpcyB2YWxpZCBmb3IgdGhlIHNlbGVjdGlvbiBtb2RlLCB1c2UgaXQsIG90aGVyd2lzZSB1c2UgdGhlIHNlbGVjdGlvbiB2aWV3IG1vZGVcclxuICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIGNhbGVuZGFyIGZyb20gY2hhbmdpbmcgdmlldyBtb2RlcyBhcyB0aGUgdXNlciB0eXBlcy9ibHVycyB0aGUgdGV4dGJveGVzIGFzIGxvbmcgYXMgdGhlIHZpZXcgbW9kZSBpcyB2YWxpZFxyXG4gICAgY29uc3Qgdmlld01vZGUgPSB0aGlzLnZhbGlkVmlld01vZGVzLmluY2x1ZGVzKGN1cnJlbnRWaWV3Lm1vZGUpID8gY3VycmVudFZpZXcubW9kZSA6IHRoaXMuc2VsZWN0aW9uVmlld01vZGU7XHJcblxyXG4gICAgcmV0dXJuIHsgbW9kZTogdmlld01vZGUsIGRhdGUgfTtcclxuICB9O1xyXG4gIFxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHZpZXcgZm9yIHRoZSBzZWNvbmRhcnkgY2FsZW5kYXIgZm9yIHRoZSBzZWxlY3Rpb24gYW5kIHNlbGVjdGlvbiBtb2RlLlxyXG4gICAqIFRoaXMgaXMgaXMgb25seSB1c2VkIGJ5IHRoZSByYW5nZSBzZWxlY3Rpb24gc3RyYXRlZ3kuIEFsbCBvdGhlcnMganVzdCByZXR1cm4gdGhlIGN1cnJlbnQgZGF0ZS5cclxuICAgKi9cclxuICBnZXRTZWNvbmRhcnlDYWxlbmRhclZpZXcoc2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCwgbWluRGF0ZTogRGF0ZSwgbWF4RGF0ZTogRGF0ZSwgY3VycmVudFZpZXc6IENhbGVuZGFyLlZpZXcpOiBDYWxlbmRhci5WaWV3IHtcclxuICAgIHJldHVybiB7IG1vZGU6IHRoaXMuc2VsZWN0aW9uVmlld01vZGUsIGRhdGU6IG5ldyBEYXRlKCkgfVxyXG4gIH07XHJcbn1cclxuIl19
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5LXNlbGVjdGlvbi1zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9kYXRlLWlucHV0L2RhdGUtaW5wdXQtc2VsZWN0aW9uLXN0cmF0ZWdpZXMvZGF5LXNlbGVjdGlvbi1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFHNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXRGOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLDhCQUE4QjtJQU10RSxZQUNVLGVBQWdDO1FBRXhDLEtBQUssRUFBRSxDQUFDO1FBRkEsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBTjFCLHNCQUFpQixHQUFzQixLQUFLLENBQUM7UUFDN0MsbUJBQWMsR0FBd0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QiwwQkFBcUIsR0FBRyxLQUFLLENBQUM7SUFNOUMsQ0FBQztJQUVELGVBQWUsQ0FBQyxTQUFzQztRQUNwRCx1RUFBdUU7UUFDdkUsSUFBSSxTQUFTLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDdEYsNEZBQTRGO1lBQzVGLGlFQUFpRTtRQUNqRSxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQXNDLEVBQUUsWUFBc0IsRUFBRSxJQUErQjtRQUNoSCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVU7UUFDN0Isa0JBQWtCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDJCQUEyQixDQUFDLGlCQUE4QztRQUN4RSwrR0FBK0c7UUFDL0csSUFBSSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQ2xELE9BQU8saUJBQWlCLENBQUMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQztZQUMxRCwwREFBMEQ7UUFDMUQsQ0FBQzthQUFNLElBQUksU0FBUyxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUM5RCxPQUFPLGlCQUFpQixDQUFDO1FBQzNCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxTQUFxQztRQUNwRCxvQ0FBb0M7UUFDcEMsSUFBSSxTQUFTLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xELENBQUM7UUFFRCwyR0FBMkc7UUFDM0csT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELG9CQUFvQixDQUFDLFNBQXFDO1FBQ3hELDJDQUEyQztRQUMzQyxJQUFJLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQy9DLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkQsQ0FBQztRQUVELDJHQUEyRztRQUMzRyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHsgRGF0ZURpc3BsYXlQaXBlIH0gZnJvbSBcIi4uLy4uLy4uL3NoYXJlZC9kaXNwbGF5L3BpcGVzL2RhdGUtZGlzcGxheS5waXBlXCI7XHJcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSBcIi4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyLnR5cGVzXCI7XHJcbmltcG9ydCB7IERhdGVJbnB1dCB9IGZyb20gXCIuLi9kYXRlLWlucHV0LnR5cGVzXCI7XHJcbmltcG9ydCB7IERhdGVJbnB1dFNlbGVjdGlvblN0cmF0ZWd5QmFzZSB9IGZyb20gXCIuL2RhdGUtaW5wdXQtc2VsZWN0aW9uLXN0cmF0ZWd5LWJhc2VcIjtcclxuXHJcbi8qKlxyXG4gKiBTZWxlY3Rpb24gc3RyYXRlZ3kgZm9yIHRoZSAnZGF5JyBzZWxlY3Rpb24gbW9kZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBEYXlTZWxlY3Rpb25TdHJhdGVneSBleHRlbmRzIERhdGVJbnB1dFNlbGVjdGlvblN0cmF0ZWd5QmFzZSB7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvblZpZXdNb2RlOiBDYWxlbmRhci5WaWV3TW9kZSA9ICdkYXknO1xyXG4gIHB1YmxpYyByZWFkb25seSB2YWxpZFZpZXdNb2RlczogQ2FsZW5kYXIuVmlld01vZGVbXSA9IFsnZGF5JywgJ21vbnRoJywgJ3llYXInXTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1NlY29uZGFyeVRleHRib3ggPSBmYWxzZTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1NlY29uZGFyeUNhbGVuZGFyID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkYXRlRGlzcGxheVBpcGU6IERhdGVEaXNwbGF5UGlwZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdFNlbGVjdGlvbihzZWxlY3Rpb24/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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RUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUNuRCxHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRTthQUNwRCxDQUFDO1FBQ0osQ0FBQztRQUVELCtGQUErRjtRQUMvRixnREFBZ0Q7UUFDaEQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELG9CQUFvQixDQUFDLFNBQXFDO1FBQ3hELDZDQUE2QztRQUM3QyxJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0QsT0FBTztnQkFDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRTtnQkFDNUQsR0FBRyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUU7YUFDekQsQ0FBQztRQUNKLENBQUM7UUFFRCxtR0FBbUc7UUFDbkcsZ0RBQWdEO1FBQ2hELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQgeyBDYWxlbmRhciB9IGZyb20gXCIuLi8uLi9jYWxlbmRhci9jYWxlbmRhci50eXBlc1wiO1xyXG5pbXBvcnQgeyBEYXRlSW5wdXQgfSBmcm9tIFwiLi4vZGF0ZS1pbnB1dC50eXBlc1wiO1xyXG5pbXBvcnQgeyBEYXRlSW5wdXRTZWxlY3Rpb25TdHJhdGVneUJhc2UgfSBmcm9tIFwiLi9kYXRlLWlucHV0LXNlbGVjdGlvbi1zdHJhdGVneS1iYXNlXCI7XHJcbmltcG9ydCB7IFJhbmdlU2VsZWN0aW9uU3RyYXRlZ3kgfSBmcm9tIFwiLi9yYW5nZS1zZWxlY3Rpb24tc3RyYXRlZ3lcIjtcclxuXHJcbi8qKlxyXG4gKiBTZWxlY3Rpb24gc3RyYXRlZ3kgZm9yIHRoZSAnbGFzdCAyOCBkYXlzJyBzZWxlY3Rpb24gbW9kZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBMYXN0MjhEYXlzU2VsZWN0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBEYXRlSW5wdXRTZWxlY3Rpb25TdHJhdGVneUJhc2Uge1xyXG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb25WaWV3TW9kZTogQ2FsZW5kYXIuVmlld01vZGUgPSAnZGF5JztcclxuICBwdWJsaWMgcmVhZG9ubHkgdmFsaWRWaWV3TW9kZXM6IENhbGVuZGFyLlZpZXdNb2RlW10gPSBbJ2RheScsICdtb250aCcsICd5ZWFyJ107XHJcbiAgcHVibGljIHJlYWRvbmx5IHNob3dTZWNvbmRhcnlUZXh0Ym94ID0gdHJ1ZTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1NlY29uZGFyeUNhbGVuZGFyID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByYW5nZVN0cmF0ZWd5OiBSYW5nZVNlbGVjdGlvblN0cmF0ZWd5XHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0U2VsZWN0aW9uKHZhbHVlPzogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuVGV4dGJveEdyb3VwWyd2YWx1ZSddIHtcclxuICAgIC8vIERlbGVnYXRlIHRvIHRoZSByYW5nZSBzdHJhdGVneSBmb3IgZm9ybWF0dGluZyBzaW5jZSB0aGUgbG9naWMgaXMgdGhlIHNhbWVcclxuICAgIHJldHVybiB0aGlzLnJhbmdlU3RyYXRlZ3kuZm9ybWF0U2VsZWN0aW9uKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHBhcnNlVGV4dGJveFZhbHVlcyh2YWx1ZTogRGF0ZUlucHV0LlRleHRib3hHcm91cFsndmFsdWUnXSwgcGFyc2VGb3JtYXRzOiBzdHJpbmdbXSwgb3B0cz86IERhdGVJbnB1dC5QYXJzaW5nT3B0aW9ucyk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIGxldCBzdGFydCA9IHRoaXMucGFyc2VTdHJpbmcodmFsdWUudGV4dGJveCwgcGFyc2VGb3JtYXRzLCBvcHRzKTtcclxuICAgIGxldCBlbmQgPSB0aGlzLnBhcnNlU3RyaW5nKHZhbHVlLnRleHRib3gyLCBwYXJzZUZvcm1hdHMsIG9wdHMpO1xyXG5cclxuICAgIGlmIChzdGFydCAmJiBlbmQpIHtcclxuICAgICAgLy8gRXZlbiBpZiBib3RoIGRhdGVzIGFyZSBwcm92aWRlZCwgaXQncyBwb3NzaWJsZSB0aGF0IHRoZXkgZG9uJ3QgbWF0Y2ggYSAyOC1kYXkgcmFuZ2VcclxuICAgICAgLy8gVXBkYXRlIHRoZSBzdGFydCBhbmQgZW5kIGRhdGVzIHRvIG1hdGNoIGEgMjgtZGF5IHJhbmdlLCBrZXlpbmcgb2ZmIHRoZSBlbmQgZGF0ZSBpZiBwYXJzZUZyb21FbmQgaXMgdHJ1ZVxyXG4gICAgICAvLyBwYXJzZUZyb21FbmQgaXMgdHJ1ZSB3aGVuIGEgZGF0ZSBpcyBiZWluZyBlbnRlcmVkIGZyb20gdGhlIGVuZCBkYXRlIHRleHRib3hcclxuICAgICAgaWYgKG9wdHM/LnBhcnNlRnJvbUVuZCkge1xyXG4gICAgICAgIHN0YXJ0ID0gbW9tZW50KGVuZCkuc3VidHJhY3QoMjcsICdkYXlzJykudG9EYXRlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZW5kID0gbW9tZW50KHN0YXJ0KS5hZGQoMjcsICdkYXlzJykudG9EYXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB0aGUgc3RhcnQgZGF0ZSBpcyBub3QgcHJvdmlkZWQsIHdlJ2xsIHVzZSB0aGUgZW5kIGRhdGUgdG8gY2FsY3VsYXRlIHRoZSBzdGFydCBkYXRlXHJcbiAgICBpZiAoIXN0YXJ0ICYmIGVuZCAmJiAhb3B0cz8ucHJldmVudEF1dG9Db21wbGV0ZSkge1xyXG4gICAgICBzdGFydCA9IG1vbWVudChlbmQpLnN1YnRyYWN0KDI3LCAnZGF5cycpLnRvRGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHRoZSBlbmQgZGF0ZSBpcyBub3QgcHJvdmlkZWQsIHdlJ2xsIHVzZSB0aGUgc3RhcnQgZGF0ZSB0byBjYWxjdWxhdGUgdGhlIGVuZCBkYXRlXHJcbiAgICBpZiAoIWVuZCAmJiBzdGFydCAmJiAhb3B0cz8ucHJldmVudEF1dG9Db21wbGV0ZSkge1xyXG4gICAgICBlbmQgPSBtb21lbnQoc3RhcnQpLmFkZCgyNywgJ2RheXMnKS50b0RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXN0YXJ0ICYmICFlbmQpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4geyBzdGFydCwgZW5kIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3Rpb25Gcm9tRGF0ZShkYXRlOiBEYXRlKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHsgXHJcbiAgICAgIHN0YXJ0OiBtb21lbnQoZGF0ZSkuc3VidHJhY3QoMjcsICdkYXlzJykudG9EYXRlKCksXHJcbiAgICAgIGVuZDogZGF0ZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldE5ld1NlbGVjdGlvbkZyb21FeGlzdGluZyhwcmV2aW91c1NlbGVjdGlvbj86IERhdGVJbnB1dC5TZWxlY3Rpb24pOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2UocHJldmlvdXNTZWxlY3Rpb24pKSB7XHJcbiAgICAgIC8vIElmIHRoZSByYW5nZSBvbmx5IGhhcyBhIHN0YXJ0IGRhdGUsIG1ha2UgdGhlIDI4LWRheSByYW5nZSBzdGFydCBvbiB0aGF0IGRhdGVcclxuICAgICAgaWYgKCFwcmV2aW91c1NlbGVjdGlvbi5lbmQgJiYgcHJldmlvdXNTZWxlY3Rpb24uc3RhcnQpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgc3RhcnQ6IHByZXZpb3VzU2VsZWN0aW9uLnN0YXJ0LFxyXG4gICAgICAgICAgZW5kOiBtb21lbnQocHJldmlvdXNTZWxlY3Rpb24uc3RhcnQpLmFkZCgyNywgJ2RheXMnKS50b0RhdGUoKVxyXG4gICAgICAgIH07XHJcbiAgICAgIC8vIElmIHRoZSByYW5nZSBvbmx5IGhhcyBhbiBlbmQgZGF0ZSwgbWFrZSB0aGUgMjgtZGF5IHJhbmdlIGVuZCBvbiB0aGF0IGRhdGVcclxuICAgICAgfSBlbHNlIGlmIChwcmV2aW91c1NlbGVjdGlvbi5lbmQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb25Gcm9tRGF0ZShwcmV2aW91c1NlbGVjdGlvbi5lbmQpO1xyXG4gICAgICB9XHJcbiAgICAvLyBJZiB0aGUgcHJldmlvdXMgc2VsZWN0aW9uIHdhcyBhIHNpbmdsZSBkYXRlLCBtYWtlIHRoZSByYW5nZSB0aGUgMjggZGF5cyBlbmRpbmcgb24gdGhhdCBkYXRlXHJcbiAgICB9IGVsc2UgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblNpbmdsZURhdGUocHJldmlvdXNTZWxlY3Rpb24pKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGlvbkZyb21EYXRlKHByZXZpb3VzU2VsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldE5leHRTZWxlY3Rpb24oc2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIC8vIE1vdmUgdGhlIHNlbGVjdGlvbiB0byB0aGUgbmV4dCAyOCBkYXlzXHJcbiAgICBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uKSAmJiBzZWxlY3Rpb24uZW5kKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgc3RhcnQ6IG1vbWVudChzZWxlY3Rpb24uZW5kKS5hZGQoMSwgJ2RheScpLnRvRGF0ZSgpLFxyXG4gICAgICAgIGVuZDogbW9tZW50KHNlbGVjdGlvbi5lbmQpLmFkZCgyOCwgJ2RheXMnKS50b0RhdGUoKVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBzaW5jZSB0aGUgbmV4dCBzdGVwcGVyIGlzIGRpc2FibGVkIGlmIHRoZSBzZWxlY3Rpb24gb25seSBoYXMgb25lIGRhdGUuXHJcbiAgICAvLyBKdXN0IHJldHVybiB0aGUgc2VsZWN0aW9uIGFzLWlzIGluIHRoaXMgY2FzZS5cclxuICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBnZXRQcmV2aW91c1NlbGVjdGlvbihzZWxlY3Rpb246IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgLy8gTW92ZSB0aGUgc2VsZWN0aW9uIHRvIHRoZSBwcmV2aW91cyAyOCBkYXlzXHJcbiAgICBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uKSAmJiBzZWxlY3Rpb24uc3RhcnQpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBzdGFydDogbW9tZW50KHNlbGVjdGlvbi5zdGFydCkuc3VidHJhY3QoMjgsICdkYXlzJykudG9EYXRlKCksXHJcbiAgICAgICAgZW5kOiBtb21lbnQoc2VsZWN0aW9uLnN0YXJ0KS5zdWJ0cmFjdCgxLCAnZGF5JykudG9EYXRlKClcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gc2luY2UgdGhlIHByZXZpb3VzIHN0ZXBwZXIgaXMgZGlzYWJsZWQgaWYgdGhlIHNlbGVjdGlvbiBvbmx5IGhhcyBvbmUgZGF0ZS5cclxuICAgIC8vIEp1c3QgcmV0dXJuIHRoZSBzZWxlY3Rpb24gYXMtaXMgaW4gdGhpcyBjYXNlLlxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICB9XHJcbn1cclxuIl19
@@ -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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Z0JBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ25ELEdBQUcsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFO2FBQ25ELENBQUM7UUFDSixDQUFDO1FBRUQsK0ZBQStGO1FBQy9GLGdEQUFnRDtRQUNoRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsU0FBcUM7UUFDeEQsOEJBQThCO1FBQzlCLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3RCxPQUFPO2dCQUNMLEtBQUssRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUMzRCxHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRTthQUN6RCxDQUFDO1FBQ0osQ0FBQztRQUVELG1HQUFtRztRQUNuRyxnREFBZ0Q7UUFDaEQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSBcIi4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyLnR5cGVzXCI7XHJcbmltcG9ydCB7IERhdGVJbnB1dCB9IGZyb20gXCIuLi9kYXRlLWlucHV0LnR5cGVzXCI7XHJcbmltcG9ydCB7IERhdGVJbnB1dFNlbGVjdGlvblN0cmF0ZWd5QmFzZSB9IGZyb20gXCIuL2RhdGUtaW5wdXQtc2VsZWN0aW9uLXN0cmF0ZWd5LWJhc2VcIjtcclxuaW1wb3J0IHsgUmFuZ2VTZWxlY3Rpb25TdHJhdGVneSB9IGZyb20gXCIuL3JhbmdlLXNlbGVjdGlvbi1zdHJhdGVneVwiO1xyXG5cclxuLyoqXHJcbiAqIFNlbGVjdGlvbiBzdHJhdGVneSBmb3IgdGhlICdsYXN0IDcgZGF5cycgc2VsZWN0aW9uIG1vZGUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTGFzdDdEYXlzU2VsZWN0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBEYXRlSW5wdXRTZWxlY3Rpb25TdHJhdGVneUJhc2Uge1xyXG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb25WaWV3TW9kZTogQ2FsZW5kYXIuVmlld01vZGUgPSAnZGF5JztcclxuICBwdWJsaWMgcmVhZG9ubHkgdmFsaWRWaWV3TW9kZXM6IENhbGVuZGFyLlZpZXdNb2RlW10gPSBbJ2RheScsICdtb250aCcsICd5ZWFyJ107XHJcbiAgcHVibGljIHJlYWRvbmx5IHNob3dTZWNvbmRhcnlUZXh0Ym94ID0gdHJ1ZTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1NlY29uZGFyeUNhbGVuZGFyID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByYW5nZVN0cmF0ZWd5OiBSYW5nZVNlbGVjdGlvblN0cmF0ZWd5XHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0U2VsZWN0aW9uKHZhbHVlPzogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuVGV4dGJveEdyb3VwWyd2YWx1ZSddIHtcclxuICAgIC8vIERlbGVnYXRlIHRvIHRoZSByYW5nZSBzdHJhdGVneSBmb3IgZm9ybWF0dGluZyBzaW5jZSB0aGUgbG9naWMgaXMgdGhlIHNhbWVcclxuICAgIHJldHVybiB0aGlzLnJhbmdlU3RyYXRlZ3kuZm9ybWF0U2VsZWN0aW9uKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHBhcnNlVGV4dGJveFZhbHVlcyh2YWx1ZTogRGF0ZUlucHV0LlRleHRib3hHcm91cFsndmFsdWUnXSwgcGFyc2VGb3JtYXRzOiBzdHJpbmdbXSwgb3B0cz86IERhdGVJbnB1dC5QYXJzaW5nT3B0aW9ucyk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIGxldCBzdGFydCA9IHRoaXMucGFyc2VTdHJpbmcodmFsdWUudGV4dGJveCwgcGFyc2VGb3JtYXRzLCBvcHRzKTtcclxuICAgIGxldCBlbmQgPSB0aGlzLnBhcnNlU3RyaW5nKHZhbHVlLnRleHRib3gyLCBwYXJzZUZvcm1hdHMsIG9wdHMpO1xyXG5cclxuICAgIGlmIChzdGFydCAmJiBlbmQpIHtcclxuICAgICAgLy8gRXZlbiBpZiBib3RoIGRhdGVzIGFyZSBwcm92aWRlZCwgaXQncyBwb3NzaWJsZSB0aGF0IHRoZXkgZG9uJ3QgbWF0Y2ggYSA3LWRheSByYW5nZVxyXG4gICAgICAvLyBVcGRhdGUgdGhlIHN0YXJ0IGFuZCBlbmQgZGF0ZXMgdG8gbWF0Y2ggYSA3LWRheSByYW5nZSwga2V5aW5nIG9mZiB0aGUgZW5kIGRhdGUgaWYgcGFyc2VGcm9tRW5kIGlzIHRydWVcclxuICAgICAgLy8gcGFyc2VGcm9tRW5kIGlzIHRydWUgd2hlbiBhIGRhdGUgaXMgYmVpbmcgZW50ZXJlZCBmcm9tIHRoZSBlbmQgZGF0ZSB0ZXh0Ym94XHJcbiAgICAgIGlmIChvcHRzPy5wYXJzZUZyb21FbmQpIHtcclxuICAgICAgICBzdGFydCA9IG1vbWVudChlbmQpLnN1YnRyYWN0KDYsICdkYXlzJykudG9EYXRlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZW5kID0gbW9tZW50KHN0YXJ0KS5hZGQoNiwgJ2RheXMnKS50b0RhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHRoZSBzdGFydCBkYXRlIGlzIG5vdCBwcm92aWRlZCwgd2UnbGwgdXNlIHRoZSBlbmQgZGF0ZSB0byBjYWxjdWxhdGUgdGhlIHN0YXJ0IGRhdGVcclxuICAgIGlmICghc3RhcnQgJiYgZW5kICYmICFvcHRzPy5wcmV2ZW50QXV0b0NvbXBsZXRlKSB7XHJcbiAgICAgIHN0YXJ0ID0gbW9tZW50KGVuZCkuc3VidHJhY3QoNiwgJ2RheXMnKS50b0RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB0aGUgZW5kIGRhdGUgaXMgbm90IHByb3ZpZGVkLCB3ZSdsbCB1c2UgdGhlIHN0YXJ0IGRhdGUgdG8gY2FsY3VsYXRlIHRoZSBlbmQgZGF0ZVxyXG4gICAgaWYgKCFlbmQgJiYgc3RhcnQgJiYgIW9wdHM/LnByZXZlbnRBdXRvQ29tcGxldGUpIHtcclxuICAgICAgZW5kID0gbW9tZW50KHN0YXJ0KS5hZGQoNiwgJ2RheXMnKS50b0RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXN0YXJ0ICYmICFlbmQpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4geyBzdGFydCwgZW5kIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3Rpb25Gcm9tRGF0ZShkYXRlOiBEYXRlKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgLy8gQmFzZSB0aGUgc2VsZWN0aW9uIG9uIHRoZSBnaXZlbiBkYXRlLCBtb3ZpbmcgYmFjayA2IGRheXNcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHN0YXJ0OiBtb21lbnQoZGF0ZSkuc3VidHJhY3QoNiwgJ2RheXMnKS50b0RhdGUoKSxcclxuICAgICAgZW5kOiBkYXRlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV3U2VsZWN0aW9uRnJvbUV4aXN0aW5nKHByZXZpb3VzU2VsZWN0aW9uPzogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2UocHJldmlvdXNTZWxlY3Rpb24pKSB7XHJcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW4gZW5kIGRhdGUsIGNyZWF0ZSB0aGUgbmV3IHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgc3RhcnQgZGF0ZSBmb3J3YXJkc1xyXG4gICAgICBpZiAoIXByZXZpb3VzU2VsZWN0aW9uLmVuZCAmJiBwcmV2aW91c1NlbGVjdGlvbi5zdGFydCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBzdGFydDogcHJldmlvdXNTZWxlY3Rpb24uc3RhcnQsXHJcbiAgICAgICAgICBlbmQ6IG1vbWVudChwcmV2aW91c1NlbGVjdGlvbi5zdGFydCkuYWRkKDYsICdkYXlzJykudG9EYXRlKClcclxuICAgICAgICB9O1xyXG4gICAgICAvLyBPdGhlcndpc2UsIGNyZWF0ZSB0aGUgbmV3IHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgZW5kIGRhdGUgYmFja3dhcmRzXHJcbiAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNTZWxlY3Rpb24uZW5kKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0aW9uRnJvbURhdGUocHJldmlvdXNTZWxlY3Rpb24uZW5kKTtcclxuICAgICAgfVxyXG4gICAgLy8gSWYgd2Ugb25seSBoYXZlIGEgc2luZ2xlIGRhdGUsIGNyZWF0ZSB0aGUgbmV3IHNlbGVjdGlvbiBiYXNlZCBvbiB0aGF0IGRhdGUgYmFja3dhcmRzXHJcbiAgICB9IGVsc2UgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblNpbmdsZURhdGUocHJldmlvdXNTZWxlY3Rpb24pKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGlvbkZyb21EYXRlKHByZXZpb3VzU2VsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldE5leHRTZWxlY3Rpb24oc2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIC8vIFNoaWZ0IHRoZSByYW5nZSBmb3J3YXJkIGJ5IDcgZGF5c1xyXG4gICAgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblJhbmdlKHNlbGVjdGlvbikgJiYgc2VsZWN0aW9uLmVuZCkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHN0YXJ0OiBtb21lbnQoc2VsZWN0aW9uLmVuZCkuYWRkKDEsICdkYXknKS50b0RhdGUoKSxcclxuICAgICAgICBlbmQ6IG1vbWVudChzZWxlY3Rpb24uZW5kKS5hZGQoNywgJ2RheXMnKS50b0RhdGUoKVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBzaW5jZSB0aGUgbmV4dCBzdGVwcGVyIGlzIGRpc2FibGVkIGlmIHRoZSBzZWxlY3Rpb24gb25seSBoYXMgb25lIGRhdGUuXHJcbiAgICAvLyBKdXN0IHJldHVybiB0aGUgc2VsZWN0aW9uIGFzLWlzIGluIHRoaXMgY2FzZS5cclxuICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBnZXRQcmV2aW91c1NlbGVjdGlvbihzZWxlY3Rpb246IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgLy8gU2hpZnQgdGhlIHJhbmdlIGJhY2sgNyBkYXlzXHJcbiAgICBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uKSAmJiBzZWxlY3Rpb24uc3RhcnQpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBzdGFydDogbW9tZW50KHNlbGVjdGlvbi5zdGFydCkuc3VidHJhY3QoNywgJ2RheXMnKS50b0RhdGUoKSxcclxuICAgICAgICBlbmQ6IG1vbWVudChzZWxlY3Rpb24uc3RhcnQpLnN1YnRyYWN0KDEsICdkYXknKS50b0RhdGUoKVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBzaW5jZSB0aGUgcHJldmlvdXMgc3RlcHBlciBpcyBkaXNhYmxlZCBpZiB0aGUgc2VsZWN0aW9uIG9ubHkgaGFzIG9uZSBkYXRlLlxyXG4gICAgLy8gSnVzdCByZXR1cm4gdGhlIHNlbGVjdGlvbiBhcy1pcyBpbiB0aGlzIGNhc2UuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGgtc2VsZWN0aW9uLXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2RhdGUtaW5wdXQvZGF0ZS1pbnB1dC1zZWxlY3Rpb24tc3RyYXRlZ2llcy9tb250aC1zZWxlY3Rpb24tc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV0Rjs7R0FFRztBQUNILE1BQU0sT0FBTyxzQkFBdUIsU0FBUSw4QkFBOEI7SUFBMUU7O1FBQ2tCLHNCQUFpQixHQUFzQixPQUFPLENBQUM7UUFDL0MsbUJBQWMsR0FBd0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEQseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQzdCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztJQXdFaEQsQ0FBQztJQXRFQyxlQUFlLENBQUMsU0FBc0M7UUFDcEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzNDLENBQUM7UUFFRCw2RUFBNkU7UUFDN0UseUZBQXlGO1FBQ3pGLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2pGLE9BQU87WUFDTCxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDekMsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQXNDLEVBQUUsWUFBc0IsRUFBRSxJQUErQjtRQUNoSCx3Q0FBd0M7UUFDeEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVqRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBVTtRQUM3QixPQUFPO1lBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQzdDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRTtTQUMxQyxDQUFDO0lBQ0osQ0FBQztJQUVELDJCQUEyQixDQUFDLGlCQUF1QztRQUNqRSxJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7WUFDbEQsb0dBQW9HO1lBQ3BHLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7WUFDOUQsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksU0FBUyxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUM5RCx5RUFBeUU7WUFDekUsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBcUM7UUFDcEQsdUNBQXVDO1FBQ3ZDLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDckQsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELCtGQUErRjtRQUMvRiwrQ0FBK0M7UUFDL0MsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELG9CQUFvQixDQUFDLFNBQXFDO1FBQ3hELDJDQUEyQztRQUMzQyxJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzFELE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCxtR0FBbUc7UUFDbkcsK0NBQStDO1FBQy9DLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQgeyBDYWxlbmRhciB9IGZyb20gXCIuLi8uLi9jYWxlbmRhci9jYWxlbmRhci50eXBlc1wiO1xyXG5pbXBvcnQgeyBEYXRlSW5wdXQgfSBmcm9tIFwiLi4vZGF0ZS1pbnB1dC50eXBlc1wiO1xyXG5pbXBvcnQgeyBEYXRlSW5wdXRTZWxlY3Rpb25TdHJhdGVneUJhc2UgfSBmcm9tIFwiLi9kYXRlLWlucHV0LXNlbGVjdGlvbi1zdHJhdGVneS1iYXNlXCI7XHJcblxyXG4vKipcclxuICogU2VsZWN0aW9uIHN0cmF0ZWd5IGZvciB0aGUgJ21vbnRoJyBzZWxlY3Rpb24gbW9kZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBNb250aFNlbGVjdGlvblN0cmF0ZWd5IGV4dGVuZHMgRGF0ZUlucHV0U2VsZWN0aW9uU3RyYXRlZ3lCYXNlIHtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0aW9uVmlld01vZGU6IENhbGVuZGFyLlZpZXdNb2RlID0gJ21vbnRoJztcclxuICBwdWJsaWMgcmVhZG9ubHkgdmFsaWRWaWV3TW9kZXM6IENhbGVuZGFyLlZpZXdNb2RlW10gPSBbJ21vbnRoJywgJ3llYXInXTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1NlY29uZGFyeVRleHRib3ggPSBmYWxzZTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1NlY29uZGFyeUNhbGVuZGFyID0gZmFsc2U7XHJcblxyXG4gIGZvcm1hdFNlbGVjdGlvbihzZWxlY3Rpb24/OiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5UZXh0Ym94R3JvdXBbJ3ZhbHVlJ10ge1xyXG4gICAgaWYgKCFzZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIHsgdGV4dGJveDogbnVsbCwgdGV4dGJveDI6IG51bGwgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBXZSBvbmx5IG5lZWQgb25lIGRhdGUgaW4gdGhlIHJhbmdlIHRvIGZvcm1hdCBzaW5jZSBpdCBvbmx5IHNwYW5zIG9uZSBtb250aFxyXG4gICAgLy8gQSBzaW5nbGUgZGF0ZSBzZWxlY3Rpb24gc2hvdWxkbid0IGhhcHBlbiBpbiB0aGlzIG1vZGUgYnV0IGl0J3Mgc2ltcGxlIGVub3VnaCB0byBoYW5kbGVcclxuICAgIGNvbnN0IGRhdGUgPSBEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb24pID8gc2VsZWN0aW9uLnN0YXJ0IDogc2VsZWN0aW9uO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdGV4dGJveDogbW9tZW50KGRhdGUpLmZvcm1hdCgnTU1NLCBZWVlZJyksXHJcbiAgICAgIHRleHRib3gyOiBudWxsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcGFyc2VUZXh0Ym94VmFsdWVzKHZhbHVlOiBEYXRlSW5wdXQuVGV4dGJveEdyb3VwWyd2YWx1ZSddLCBwYXJzZUZvcm1hdHM6IHN0cmluZ1tdLCBvcHRzPzogRGF0ZUlucHV0LlBhcnNpbmdPcHRpb25zKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgLy8gT25seSBvbmUgdGV4dGJveCBpcyB1c2VkIGluIHRoaXMgbW9kZVxyXG4gICAgY29uc3QgZGF0ZSA9IHRoaXMucGFyc2VTdHJpbmcodmFsdWUudGV4dGJveCwgcGFyc2VGb3JtYXRzLCBvcHRzKTtcclxuXHJcbiAgICBpZiAoIWRhdGUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0aW9uRnJvbURhdGUoZGF0ZSk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3Rpb25Gcm9tRGF0ZShkYXRlOiBEYXRlKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc3RhcnQ6IG1vbWVudChkYXRlKS5zdGFydE9mKCdtb250aCcpLnRvRGF0ZSgpLFxyXG4gICAgICBlbmQ6IG1vbWVudChkYXRlKS5lbmRPZignbW9udGgnKS50b0RhdGUoKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldE5ld1NlbGVjdGlvbkZyb21FeGlzdGluZyhwcmV2aW91c1NlbGVjdGlvbj86IERhdGVJbnB1dC5TZWxlY3Rpb24pOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2UocHJldmlvdXNTZWxlY3Rpb24pKSB7XHJcbiAgICAgIC8vIFdlJ2xsIHVzZSB0aGUgZXhpc3Rpbmcgc2VsZWN0aW9uJ3MgZW5kIGRhdGUgYW5kIGZhbGwgYmFjayB0byB0aGUgc3RhcnQgZGF0ZSBpZiBpdCdzIG5vdCBhdmFpbGFibGVcclxuICAgICAgY29uc3QgZGF0ZSA9IHByZXZpb3VzU2VsZWN0aW9uLmVuZCB8fCBwcmV2aW91c1NlbGVjdGlvbi5zdGFydDtcclxuICAgICAgaWYgKGRhdGUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb25Gcm9tRGF0ZShkYXRlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25TaW5nbGVEYXRlKHByZXZpb3VzU2VsZWN0aW9uKSkge1xyXG4gICAgICAvLyBJZiB0aGUgcHJldmlvdXMgc2VsZWN0aW9uIHdhcyBhIHNpbmdsZSBkYXRlLCBtYWtlIHRoZSByYW5nZSB0aGF0IG1vbnRoXHJcbiAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGlvbkZyb21EYXRlKHByZXZpb3VzU2VsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldE5leHRTZWxlY3Rpb24oc2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIC8vIE1vdmUgdGhlIHNlbGVjdGlvbiB0byB0aGUgbmV4dCBtb250aFxyXG4gICAgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblJhbmdlKHNlbGVjdGlvbikgJiYgc2VsZWN0aW9uLnN0YXJ0KSB7IFxyXG4gICAgICBjb25zdCBkYXRlID0gbW9tZW50KHNlbGVjdGlvbi5zdGFydCkuYWRkKDEsICdtb250aCcpO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb25Gcm9tRGF0ZShkYXRlLnRvRGF0ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gc2luY2UgdGhlIG5leHQgc3RlcHBlciBpcyBkaXNhYmxlZCBpZiB0aGUgc2VsZWN0aW9uIG9ubHkgaGFzIG9uZSBkYXRlLlxyXG4gICAgLy8gSWYgaXQgZG9lcywganVzdCByZXR1cm4gdGhlIHNlbGVjdGlvbiBhcy1pcy5cclxuICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBnZXRQcmV2aW91c1NlbGVjdGlvbihzZWxlY3Rpb246IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgLy8gTW92ZSB0aGUgc2VsZWN0aW9uIHRvIHRoZSBwcmV2aW91cyBtb250aFxyXG4gICAgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblJhbmdlKHNlbGVjdGlvbikgJiYgc2VsZWN0aW9uLnN0YXJ0KSB7XHJcbiAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQoc2VsZWN0aW9uLnN0YXJ0KS5zdWJ0cmFjdCgxLCAnbW9udGgnKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0aW9uRnJvbURhdGUoZGF0ZS50b0RhdGUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIHNpbmNlIHRoZSBwcmV2aW91cyBzdGVwcGVyIGlzIGRpc2FibGVkIGlmIHRoZSBzZWxlY3Rpb24gb25seSBoYXMgb25lIGRhdGUuXHJcbiAgICAvLyBJZiBpdCBkb2VzLCBqdXN0IHJldHVybiB0aGUgc2VsZWN0aW9uIGFzLWlzLlxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICB9XHJcbn1cclxuIl19
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhcnRlci1zZWxlY3Rpb24tc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LXNlbGVjdGlvbi1zdHJhdGVnaWVzL3F1YXJ0ZXItc2VsZWN0aW9uLXN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdEY7O0dBRUc7QUFDSCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsOEJBQThCO0lBQTVFOztRQUNrQixzQkFBaUIsR0FBc0IsU0FBUyxDQUFDO1FBQ2pELG1CQUFjLEdBQXdCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFELHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QiwwQkFBcUIsR0FBRyxLQUFLLENBQUM7SUEyRWhELENBQUM7SUF6RUMsZUFBZSxDQUFDLFNBQXNDO1FBQ3BELGtEQUFrRDtRQUNsRCx3Q0FBd0M7UUFDeEMsSUFBSSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsRCxPQUFPO2dCQUNMLE9BQU8sRUFBRSxHQUFHLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO2dCQUNuQyxRQUFRLEVBQUUsSUFBSTthQUNmLENBQUM7UUFDSixDQUFDO1FBRUQscUZBQXFGO1FBQ3JGLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBc0MsRUFBRSxZQUFzQixFQUFFLElBQStCO1FBQ2hILHdDQUF3QztRQUN4QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFVO1FBQzdCLE9BQU87WUFDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDL0MsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFO1NBQzVDLENBQUM7SUFDSixDQUFDO0lBRUQsMkJBQTJCLENBQUMsaUJBQXVDO1FBQ2pFLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUNsRCxrR0FBa0c7WUFDbEcsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQztZQUM5RCxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pDLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxTQUFTLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQzlELDJFQUEyRTtZQUMzRSxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxTQUFxQztRQUNwRCx5Q0FBeUM7UUFDekMsSUFBSSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN2RCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsK0ZBQStGO1FBQy9GLCtDQUErQztRQUMvQyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsU0FBcUM7UUFDeEQsNkNBQTZDO1FBQzdDLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDNUQsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELG1HQUFtRztRQUNuRywrQ0FBK0M7UUFDL0MsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSBcIi4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyLnR5cGVzXCI7XHJcbmltcG9ydCB7IERhdGVJbnB1dCB9IGZyb20gXCIuLi9kYXRlLWlucHV0LnR5cGVzXCI7XHJcbmltcG9ydCB7IERhdGVJbnB1dFNlbGVjdGlvblN0cmF0ZWd5QmFzZSB9IGZyb20gXCIuL2RhdGUtaW5wdXQtc2VsZWN0aW9uLXN0cmF0ZWd5LWJhc2VcIjtcclxuXHJcbi8qKlxyXG4gKiBTZWxlY3Rpb24gc3RyYXRlZ3kgZm9yIHRoZSAnbW9udGgnIHNlbGVjdGlvbiBtb2RlLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFF1YXJ0ZXJTZWxlY3Rpb25TdHJhdGVneSBleHRlbmRzIERhdGVJbnB1dFNlbGVjdGlvblN0cmF0ZWd5QmFzZSB7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvblZpZXdNb2RlOiBDYWxlbmRhci5WaWV3TW9kZSA9ICdxdWFydGVyJztcclxuICBwdWJsaWMgcmVhZG9ubHkgdmFsaWRWaWV3TW9kZXM6IENhbGVuZGFyLlZpZXdNb2RlW10gPSBbJ3F1YXJ0ZXInLCAneWVhciddO1xyXG4gIHB1YmxpYyByZWFkb25seSBzaG93U2Vjb25kYXJ5VGV4dGJveCA9IGZhbHNlO1xyXG4gIHB1YmxpYyByZWFkb25seSBzaG93U2Vjb25kYXJ5Q2FsZW5kYXIgPSBmYWxzZTtcclxuXHJcbiAgZm9ybWF0U2VsZWN0aW9uKHNlbGVjdGlvbj86IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKTogRGF0ZUlucHV0LlRleHRib3hHcm91cFsndmFsdWUnXSB7XHJcbiAgICAvLyBGb3JtYXQgdGhlIHRoZSBxdWFydGVyIHJhbmdlIGFzIFwiTU1N4oCTTU1NLCBZWVlZXCJcclxuICAgIC8vIFdlIG9ubHkgaGF2ZSBvbmUgdGV4dGJveCBpbiB0aGlzIG1vZGVcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb24pKSB7XHJcbiAgICAgIGNvbnN0IHN0YXJ0ID0gbW9tZW50KHNlbGVjdGlvbi5zdGFydCkuZm9ybWF0KCdNTU0nKTtcclxuICAgICAgY29uc3QgZW5kID0gbW9tZW50KHNlbGVjdGlvbi5lbmQpLmZvcm1hdCgnTU1NJyk7XHJcbiAgICAgIGNvbnN0IHllYXIgPSBtb21lbnQoc2VsZWN0aW9uLmVuZCkuZm9ybWF0KCdZWVlZJyk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdGV4dGJveDogYCR7c3RhcnR94oCTJHtlbmR9LCAke3llYXJ9YCxcclxuICAgICAgICB0ZXh0Ym94MjogbnVsbFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gc2luY2UgdGhlIHNlbGVjdGlvbiBzaG91bGQgYWx3YXlzIGJlIGEgcmFuZ2UgaW4gcXVhcnRlciBtb2RlXHJcbiAgICByZXR1cm4geyB0ZXh0Ym94OiBudWxsLCB0ZXh0Ym94MjogbnVsbCB9O1xyXG4gIH1cclxuXHJcbiAgcGFyc2VUZXh0Ym94VmFsdWVzKHZhbHVlOiBEYXRlSW5wdXQuVGV4dGJveEdyb3VwWyd2YWx1ZSddLCBwYXJzZUZvcm1hdHM6IHN0cmluZ1tdLCBvcHRzPzogRGF0ZUlucHV0LlBhcnNpbmdPcHRpb25zKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgLy8gT25seSBvbmUgdGV4dGJveCBpcyB1c2VkIGluIHRoaXMgbW9kZVxyXG4gICAgY29uc3QgZGF0ZSA9IHRoaXMucGFyc2VTdHJpbmcodmFsdWUudGV4dGJveCwgcGFyc2VGb3JtYXRzLCBvcHRzKTtcclxuICAgIFxyXG4gICAgaWYgKCFkYXRlKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGlvbkZyb21EYXRlKGRhdGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0aW9uRnJvbURhdGUoZGF0ZTogRGF0ZSk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHN0YXJ0OiBtb21lbnQoZGF0ZSkuc3RhcnRPZigncXVhcnRlcicpLnRvRGF0ZSgpLFxyXG4gICAgICBlbmQ6IG1vbWVudChkYXRlKS5lbmRPZigncXVhcnRlcicpLnRvRGF0ZSgpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV3U2VsZWN0aW9uRnJvbUV4aXN0aW5nKHByZXZpb3VzU2VsZWN0aW9uPzogRGF0ZUlucHV0LlNlbGVjdGlvbik6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShwcmV2aW91c1NlbGVjdGlvbikpIHtcclxuICAgICAgLy8gQmFzZSB0aGUgcXVhcnRlciByYW5nZSBvZmYgb2YgdGhlIGV4aXN0aW5nIHNlbGVjdGlvbidzIGVuZCBkYXRlLCBmYWxsaW5nIGJhY2sgdG8gdGhlIHN0YXJ0IGRhdGVcclxuICAgICAgY29uc3QgZGF0ZSA9IHByZXZpb3VzU2VsZWN0aW9uLmVuZCB8fCBwcmV2aW91c1NlbGVjdGlvbi5zdGFydDtcclxuICAgICAgaWYgKGRhdGUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb25Gcm9tRGF0ZShkYXRlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25TaW5nbGVEYXRlKHByZXZpb3VzU2VsZWN0aW9uKSkge1xyXG4gICAgICAvLyBJZiB0aGUgcHJldmlvdXMgc2VsZWN0aW9uIHdhcyBhIHNpbmdsZSBkYXRlLCBtYWtlIHRoZSByYW5nZSB0aGF0IHF1YXJ0ZXJcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0aW9uRnJvbURhdGUocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV4dFNlbGVjdGlvbihzZWxlY3Rpb246IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgLy8gTW92ZSB0aGUgc2VsZWN0aW9uIHRvIHRoZSBuZXh0IHF1YXJ0ZXJcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb24pICYmIHNlbGVjdGlvbi5zdGFydCkge1xyXG4gICAgICBjb25zdCBkYXRlID0gbW9tZW50KHNlbGVjdGlvbi5zdGFydCkuYWRkKDEsICdxdWFydGVyJyk7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGlvbkZyb21EYXRlKGRhdGUudG9EYXRlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBzaW5jZSB0aGUgbmV4dCBzdGVwcGVyIGlzIGRpc2FibGVkIGlmIHRoZSBzZWxlY3Rpb24gb25seSBoYXMgb25lIGRhdGUuXHJcbiAgICAvLyBJZiBpdCBkb2VzLCBqdXN0IHJldHVybiB0aGUgc2VsZWN0aW9uIGFzLWlzLlxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGdldFByZXZpb3VzU2VsZWN0aW9uKHNlbGVjdGlvbjogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICAvLyBNb3ZlIHRoZSBzZWxlY3Rpb24gdG8gdGhlIHByZXZpb3VzIHF1YXJ0ZXJcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb24pICYmIHNlbGVjdGlvbi5zdGFydCkge1xyXG4gICAgICBjb25zdCBkYXRlID0gbW9tZW50KHNlbGVjdGlvbi5zdGFydCkuc3VidHJhY3QoMSwgJ3F1YXJ0ZXInKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0aW9uRnJvbURhdGUoZGF0ZS50b0RhdGUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIHNpbmNlIHRoZSBwcmV2aW91cyBzdGVwcGVyIGlzIGRpc2FibGVkIGlmIHRoZSBzZWxlY3Rpb24gb25seSBoYXMgb25lIGRhdGUuXHJcbiAgICAvLyBJZiBpdCBkb2VzLCBqdXN0IHJldHVybiB0aGUgc2VsZWN0aW9uIGFzLWlzLlxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICB9XHJcbn1cclxuIl19