@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,210 @@
1
+ import moment from "moment";
2
+ import { DateInput } from "../date-input.types";
3
+ import { DateInputSelectionStrategyBase } from "./date-input-selection-strategy-base";
4
+ /**
5
+ * Selection strategy for the 'range' selection mode.
6
+ */
7
+ export class RangeSelectionStrategy extends DateInputSelectionStrategyBase {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.selectionViewMode = 'day';
11
+ this.validViewModes = ['day', 'month', 'year'];
12
+ this.showSecondaryTextbox = true;
13
+ this.showSecondaryCalendar = true;
14
+ }
15
+ formatSelection(selection) {
16
+ if (!selection) {
17
+ return { textbox: null, textbox2: null };
18
+ }
19
+ // We use the 'll' moment medium format here to make sure the formatted date is formatted according to the user's locale
20
+ if (DateInput.isSelectionSingleDate(selection)) {
21
+ return { textbox: moment(selection).format('ll'), textbox2: null };
22
+ }
23
+ else {
24
+ const start = selection.start ? moment(selection.start).format('ll') : null;
25
+ const end = selection.end ? moment(selection.end).format('ll') : null;
26
+ return { textbox: start, textbox2: end };
27
+ }
28
+ }
29
+ parseTextboxValues(value, parseFormats, opts) {
30
+ let start = this.parseString(value.textbox, parseFormats, opts);
31
+ let end = this.parseString(value.textbox2, parseFormats, opts);
32
+ // If the start date is after the end date, we need to clear out the invalid date. This is different from the last 7/28 days strategies
33
+ // because we don't have a fixed range to automatically adjust the dates to. If the user is changing the begin date or end date and ends
34
+ // up crossing the other date, we should clear out the date that's not being changed so that the user can enter a valid range using the
35
+ // begin/end date they just entered.
36
+ if (start && end && moment(start).isAfter(end)) {
37
+ if (opts?.parseFromEnd) {
38
+ start = null;
39
+ }
40
+ else {
41
+ end = null;
42
+ }
43
+ }
44
+ if (!start && !end) {
45
+ return null;
46
+ }
47
+ else {
48
+ return { start, end };
49
+ }
50
+ }
51
+ getSelectionFromDate(date, existingSelection) {
52
+ if (DateInput.isSelectionRange(existingSelection)) {
53
+ const { start, end } = existingSelection;
54
+ if (start && !end) {
55
+ // If the selected date is before the existing start date, set it as the new start date and use the existing start date as the end date
56
+ return moment(date).isBefore(start) ? { start: date, end: start } : { start, end: date };
57
+ }
58
+ if (end && !start) {
59
+ // If the selected date is after the existing end date, set it as the new end date and use the existing end date as the start date
60
+ return moment(date).isBefore(end) ? { start: date, end } : { start: end, end: date };
61
+ }
62
+ }
63
+ else if (DateInput.isSelectionSingleDate(existingSelection)) {
64
+ // If the selected date is before the existing date, set it as the new start date and use the existing date as the end date
65
+ return moment(date).isBefore(existingSelection) ? { start: date, end: existingSelection } : { start: existingSelection, end: date };
66
+ }
67
+ // If no selection exists or we already have a complete selection, start a new one with the selected date as the start date.
68
+ return { start: date, end: null };
69
+ }
70
+ getNewSelectionFromExisting(previousSelection) {
71
+ if (DateInput.isSelectionRange(previousSelection)) {
72
+ // If we have a range, just return it as is. We don't have a fixed range to adjust the dates to.
73
+ // Even if it's incomplete, the user will still be able to select the remaining date.
74
+ return previousSelection;
75
+ }
76
+ else if (DateInput.isSelectionSingleDate(previousSelection)) {
77
+ // If we have a single date selection, use it as the start date for the new one.
78
+ return { start: previousSelection, end: null };
79
+ }
80
+ return null;
81
+ }
82
+ getSelectionForQuickSelectDate(date, existingSelection) {
83
+ // If we have a valid range, we'll shift the range to the date provided, using it as the end date
84
+ // The new selection will have the same length as the previous.
85
+ if (DateInput.isSelectionRange(existingSelection) && existingSelection.start && existingSelection.end) {
86
+ const length = moment(existingSelection.end).diff(existingSelection.start, 'days');
87
+ return {
88
+ start: moment(date).subtract(length, 'days').toDate(),
89
+ end: date
90
+ };
91
+ }
92
+ // If we only have a single date, we'll use the date provided as the end date.
93
+ // The user will be able to select the start date.
94
+ return { start: null, end: date };
95
+ }
96
+ getNextSelection(selection) {
97
+ // We can only determine the next selection if we have a valid range
98
+ if (DateInput.isSelectionRange(selection) && selection.start && selection.end) {
99
+ // Shift the range forward by the number of days between the start and end dates
100
+ const length = moment(selection.end).diff(selection.start, 'days');
101
+ return {
102
+ start: moment(selection.end).add(1, 'days').toDate(),
103
+ end: moment(selection.end).add(1 + length, 'days').toDate()
104
+ };
105
+ }
106
+ // This shouldn't happen since the next stepper is disabled if the selection only has one date.
107
+ // If it does, just return the selection as-is.
108
+ return selection;
109
+ }
110
+ getPreviousSelection(selection) {
111
+ // We can only determine the previous selection if we have a valid range
112
+ if (DateInput.isSelectionRange(selection) && selection.start && selection.end) {
113
+ // Shift the range back by the number of days between the start and end dates
114
+ const length = moment(selection.end).diff(selection.start, 'days');
115
+ return {
116
+ start: moment(selection.start).subtract(1 + length, 'days').toDate(),
117
+ end: moment(selection.start).subtract(1, 'days').toDate()
118
+ };
119
+ }
120
+ // This shouldn't happen since the previous stepper is disabled if the selection only has one date.
121
+ // If it does, just return the selection as-is.
122
+ return selection;
123
+ }
124
+ getPrimaryCalendarView(selection, minDate, maxDate, currentView) {
125
+ let viewDate;
126
+ if (DateInput.isSelectionRange(selection)) {
127
+ let start = selection.start ? moment(selection.start) : null;
128
+ let end = selection.end ? moment(selection.end) : null;
129
+ // Since we're in range mode, the primary calendar is mostly concerned with the start date
130
+ if (start) {
131
+ // If we have a start date in the selection and it's before the min date, shift the view to the min date.
132
+ if (start.isBefore(minDate, 'month')) {
133
+ viewDate = minDate;
134
+ // If the start is after the max date, shift the view to the max date.
135
+ }
136
+ else if (start.isSameOrAfter(maxDate, 'month')) {
137
+ // the secondary calendar will show the max date month.
138
+ // The primary calendar will show the month before the max date.
139
+ viewDate = moment(maxDate).subtract(1, 'month').toDate();
140
+ }
141
+ else {
142
+ viewDate = start.toDate();
143
+ }
144
+ }
145
+ else if (end && end.isSameOrBefore(minDate, 'month')) {
146
+ // If we don't have a start date, and the end date is the same month or before the min date, shift the view to the min date.
147
+ viewDate = minDate;
148
+ }
149
+ else if (end && end.isSameOrBefore(new Date(), 'month')) {
150
+ // If we don't have a start date, and the end date is the same month or before the current month, shift the view to the month before the end
151
+ viewDate = moment(end).subtract(1, 'month').toDate();
152
+ }
153
+ else {
154
+ // Otherwise, show the current month.
155
+ viewDate = new Date();
156
+ }
157
+ }
158
+ else {
159
+ viewDate = selection || new Date();
160
+ }
161
+ // If the current calendar view mode is valid for the selection mode, use it, otherwise use the selection view mode
162
+ // This prevents the calendar from changing view modes as the user types/blurs the textboxes as long as the view mode is valid
163
+ const viewMode = this.validViewModes.includes(currentView.mode) ? currentView.mode : this.selectionViewMode;
164
+ return { mode: viewMode, date: viewDate };
165
+ }
166
+ getSecondaryCalendarView(selection, minDate, maxDate, currentView) {
167
+ let viewDate;
168
+ if (DateInput.isSelectionRange(selection)) {
169
+ let start = selection.start ? moment(selection.start) : null;
170
+ let end = selection.end ? moment(selection.end) : null;
171
+ // The secondary calendar is primarily concerned with the end date in the selection.
172
+ if (end) {
173
+ if (end.isAfter(maxDate, 'month')) {
174
+ // If the end date is after the max date, shift the view to the max date.
175
+ viewDate = maxDate;
176
+ }
177
+ else if (end.isSameOrBefore(minDate, 'month')) {
178
+ // If the end date is the same month or before the min date, shift the view to show
179
+ // the month after the min date. The primary calendar will show the min date month.
180
+ viewDate = moment(minDate).add(1, 'month').toDate();
181
+ }
182
+ else {
183
+ // Otherwise, show the end date month.
184
+ viewDate = end.toDate();
185
+ }
186
+ }
187
+ else if (start && start.isSameOrAfter(maxDate, 'month')) {
188
+ // If we don't have an end date, and the start date is after the max date, show the max date month
189
+ viewDate = maxDate;
190
+ }
191
+ else if (start && start.isSameOrAfter(new Date(), 'month')) {
192
+ // If we don't have an end date, and the start date is on or after the current month,
193
+ // show the month after the start date.
194
+ viewDate = moment(start).add(1, 'month').toDate();
195
+ }
196
+ else {
197
+ // Otherwise, show the current month.
198
+ viewDate = new Date();
199
+ }
200
+ }
201
+ else {
202
+ viewDate = selection || new Date();
203
+ }
204
+ // If the current calendar view mode is valid for the selection mode, use it, otherwise use the selection view mode
205
+ // This prevents the calendar from changing view modes as the user types/blurs the textboxes as long as the view mode is valid
206
+ const viewMode = this.validViewModes.includes(currentView.mode) ? currentView.mode : this.selectionViewMode;
207
+ return { mode: viewMode, date: viewDate };
208
+ }
209
+ }
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Utc2VsZWN0aW9uLXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2RhdGUtaW5wdXQvZGF0ZS1pbnB1dC1zZWxlY3Rpb24tc3RyYXRlZ2llcy9yYW5nZS1zZWxlY3Rpb24tc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV0Rjs7R0FFRztBQUNILE1BQU0sT0FBTyxzQkFBdUIsU0FBUSw4QkFBOEI7SUFBMUU7O1FBQ2tCLHNCQUFpQixHQUFzQixLQUFLLENBQUM7UUFDN0MsbUJBQWMsR0FBd0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELHlCQUFvQixHQUFHLElBQUksQ0FBQztRQUM1QiwwQkFBcUIsR0FBRyxJQUFJLENBQUM7SUEyTS9DLENBQUM7SUF6TUMsZUFBZSxDQUFDLFNBQXNDO1FBQ3BELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMzQyxDQUFDO1FBRUQsd0hBQXdIO1FBQ3hILElBQUksU0FBUyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNyRSxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxL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LE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BELENBQUM7aUJBQU0sQ0FBQztnQkFDTixxQ0FBcUM7Z0JBQ3JDLFFBQVEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hCLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLFFBQVEsR0FBRyxTQUFTLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBRUQsbUhBQW1IO1FBQ25ILDhIQUE4SDtRQUM5SCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUU1RyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDNUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSBcIi4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyLnR5cGVzXCI7XHJcbmltcG9ydCB7IERhdGVJbnB1dCB9IGZyb20gXCIuLi9kYXRlLWlucHV0LnR5cGVzXCI7XHJcbmltcG9ydCB7IERhdGVJbnB1dFNlbGVjdGlvblN0cmF0ZWd5QmFzZSB9IGZyb20gXCIuL2RhdGUtaW5wdXQtc2VsZWN0aW9uLXN0cmF0ZWd5LWJhc2VcIjtcclxuXHJcbi8qKlxyXG4gKiBTZWxlY3Rpb24gc3RyYXRlZ3kgZm9yIHRoZSAncmFuZ2UnIHNlbGVjdGlvbiBtb2RlLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFJhbmdlU2VsZWN0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBEYXRlSW5wdXRTZWxlY3Rpb25TdHJhdGVneUJhc2Uge1xyXG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb25WaWV3TW9kZTogQ2FsZW5kYXIuVmlld01vZGUgPSAnZGF5JztcclxuICBwdWJsaWMgcmVhZG9ubHkgdmFsaWRWaWV3TW9kZXM6IENhbGVuZGFyLlZpZXdNb2RlW10gPSBbJ2RheScsICdtb250aCcsICd5ZWFyJ107XHJcbiAgcHVibGljIHJlYWRvbmx5IHNob3dTZWNvbmRhcnlUZXh0Ym94ID0gdHJ1ZTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1NlY29uZGFyeUNhbGVuZGFyID0gdHJ1ZTtcclxuXHJcbiAgZm9ybWF0U2VsZWN0aW9uKHNlbGVjdGlvbj86IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKTogRGF0ZUlucHV0LlRleHRib3hHcm91cFsndmFsdWUnXSB7XHJcbiAgICBpZiAoIXNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm4geyB0ZXh0Ym94OiBudWxsLCB0ZXh0Ym94MjogbnVsbCB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFdlIHVzZSB0aGUgJ2xsJyBtb21lbnQgbWVkaXVtIGZvcm1hdCBoZXJlIHRvIG1ha2Ugc3VyZSB0aGUgZm9ybWF0dGVkIGRhdGUgaXMgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgdXNlcidzIGxvY2FsZVxyXG4gICAgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblNpbmdsZURhdGUoc2VsZWN0aW9uKSkge1xyXG4gICAgICByZXR1cm4geyB0ZXh0Ym94OiBtb21lbnQoc2VsZWN0aW9uKS5mb3JtYXQoJ2xsJyksIHRleHRib3gyOiBudWxsIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBzdGFydCA9IHNlbGVjdGlvbi5zdGFydCA/IG1vbWVudChzZWxlY3Rpb24uc3RhcnQpLmZvcm1hdCgnbGwnKSA6IG51bGw7XHJcbiAgICAgIGNvbnN0IGVuZCA9IHNlbGVjdGlvbi5lbmQgPyBtb21lbnQoc2VsZWN0aW9uLmVuZCkuZm9ybWF0KCdsbCcpIDogbnVsbDtcclxuXHJcbiAgICAgIHJldHVybiB7IHRleHRib3g6IHN0YXJ0LCB0ZXh0Ym94MjogZW5kIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwYXJzZVRleHRib3hWYWx1ZXModmFsdWU6IERhdGVJbnB1dC5UZXh0Ym94R3JvdXBbJ3ZhbHVlJ10sIHBhcnNlRm9ybWF0czogc3RyaW5nW10sIG9wdHM/OiBEYXRlSW5wdXQuUGFyc2luZ09wdGlvbnMpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICBsZXQgc3RhcnQgPSB0aGlzLnBhcnNlU3RyaW5nKHZhbHVlLnRleHRib3gsIHBhcnNlRm9ybWF0cywgb3B0cyk7XHJcbiAgICBsZXQgZW5kID0gdGhpcy5wYXJzZVN0cmluZyh2YWx1ZS50ZXh0Ym94MiwgcGFyc2VGb3JtYXRzLCBvcHRzKTtcclxuXHJcbiAgICAvLyBJZiB0aGUgc3RhcnQgZGF0ZSBpcyBhZnRlciB0aGUgZW5kIGRhdGUsIHdlIG5lZWQgdG8gY2xlYXIgb3V0IHRoZSBpbnZhbGlkIGRhdGUuIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGxhc3QgNy8yOCBkYXlzIHN0cmF0ZWdpZXNcclxuICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIGZpeGVkIHJhbmdlIHRvIGF1dG9tYXRpY2FsbHkgYWRqdXN0IHRoZSBkYXRlcyB0by4gSWYgdGhlIHVzZXIgaXMgY2hhbmdpbmcgdGhlIGJlZ2luIGRhdGUgb3IgZW5kIGRhdGUgYW5kIGVuZHNcclxuICAgIC8vIHVwIGNyb3NzaW5nIHRoZSBvdGhlciBkYXRlLCB3ZSBzaG91bGQgY2xlYXIgb3V0IHRoZSBkYXRlIHRoYXQncyBub3QgYmVpbmcgY2hhbmdlZCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBlbnRlciBhIHZhbGlkIHJhbmdlIHVzaW5nIHRoZVxyXG4gICAgLy8gYmVnaW4vZW5kIGRhdGUgdGhleSBqdXN0IGVudGVyZWQuXHJcbiAgICBpZiAoc3RhcnQgJiYgZW5kICYmIG1vbWVudChzdGFydCkuaXNBZnRlcihlbmQpKSB7XHJcbiAgICAgIGlmIChvcHRzPy5wYXJzZUZyb21FbmQpIHtcclxuICAgICAgICBzdGFydCA9IG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZW5kID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghc3RhcnQgJiYgIWVuZCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGlvbkZyb21EYXRlKGRhdGU6IERhdGUsIGV4aXN0aW5nU2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShleGlzdGluZ1NlbGVjdGlvbikpIHtcclxuICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSBleGlzdGluZ1NlbGVjdGlvbjtcclxuICAgICAgaWYgKHN0YXJ0ICYmICFlbmQpIHtcclxuICAgICAgICAvLyBJZiB0aGUgc2VsZWN0ZWQgZGF0ZSBpcyBiZWZvcmUgdGhlIGV4aXN0aW5nIHN0YXJ0IGRhdGUsIHNldCBpdCBhcyB0aGUgbmV3IHN0YXJ0IGRhdGUgYW5kIHVzZSB0aGUgZXhpc3Rpbmcgc3RhcnQgZGF0ZSBhcyB0aGUgZW5kIGRhdGVcclxuICAgICAgICByZXR1cm4gbW9tZW50KGRhdGUpLmlzQmVmb3JlKHN0YXJ0KSA/IHsgc3RhcnQ6IGRhdGUsIGVuZDogc3RhcnQgfSA6IHsgc3RhcnQsIGVuZDogZGF0ZSB9O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbmQgJiYgIXN0YXJ0KSB7XHJcbiAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGVkIGRhdGUgaXMgYWZ0ZXIgdGhlIGV4aXN0aW5nIGVuZCBkYXRlLCBzZXQgaXQgYXMgdGhlIG5ldyBlbmQgZGF0ZSBhbmQgdXNlIHRoZSBleGlzdGluZyBlbmQgZGF0ZSBhcyB0aGUgc3RhcnQgZGF0ZVxyXG4gICAgICAgIHJldHVybiBtb21lbnQoZGF0ZSkuaXNCZWZvcmUoZW5kKSA/IHsgc3RhcnQ6IGRhdGUsIGVuZCB9IDogeyBzdGFydDogZW5kLCBlbmQ6IGRhdGUgfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25TaW5nbGVEYXRlKGV4aXN0aW5nU2VsZWN0aW9uKSkge1xyXG4gICAgICAvLyBJZiB0aGUgc2VsZWN0ZWQgZGF0ZSBpcyBiZWZvcmUgdGhlIGV4aXN0aW5nIGRhdGUsIHNldCBpdCBhcyB0aGUgbmV3IHN0YXJ0IGRhdGUgYW5kIHVzZSB0aGUgZXhpc3RpbmcgZGF0ZSBhcyB0aGUgZW5kIGRhdGVcclxuICAgICAgcmV0dXJuIG1vbWVudChkYXRlKS5pc0JlZm9yZShleGlzdGluZ1NlbGVjdGlvbikgPyB7IHN0YXJ0OiBkYXRlLCBlbmQ6IGV4aXN0aW5nU2VsZWN0aW9uIH0gOiB7IHN0YXJ0OiBleGlzdGluZ1NlbGVjdGlvbiwgZW5kOiBkYXRlIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgbm8gc2VsZWN0aW9uIGV4aXN0cyBvciB3ZSBhbHJlYWR5IGhhdmUgYSBjb21wbGV0ZSBzZWxlY3Rpb24sIHN0YXJ0IGEgbmV3IG9uZSB3aXRoIHRoZSBzZWxlY3RlZCBkYXRlIGFzIHRoZSBzdGFydCBkYXRlLlxyXG4gICAgcmV0dXJuIHsgc3RhcnQ6IGRhdGUsIGVuZDogbnVsbCB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV3U2VsZWN0aW9uRnJvbUV4aXN0aW5nKHByZXZpb3VzU2VsZWN0aW9uPzogRGF0ZUlucHV0LlNlbGVjdGlvbik6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShwcmV2aW91c1NlbGVjdGlvbikpIHtcclxuICAgICAgLy8gSWYgd2UgaGF2ZSBhIHJhbmdlLCBqdXN0IHJldHVybiBpdCBhcyBpcy4gV2UgZG9uJ3QgaGF2ZSBhIGZpeGVkIHJhbmdlIHRvIGFkanVzdCB0aGUgZGF0ZXMgdG8uXHJcbiAgICAgIC8vIEV2ZW4gaWYgaXQncyBpbmNvbXBsZXRlLCB0aGUgdXNlciB3aWxsIHN0aWxsIGJlIGFibGUgdG8gc2VsZWN0IHRoZSByZW1haW5pbmcgZGF0ZS5cclxuICAgICAgcmV0dXJuIHByZXZpb3VzU2VsZWN0aW9uO1xyXG4gICAgfSBlbHNlIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25TaW5nbGVEYXRlKHByZXZpb3VzU2VsZWN0aW9uKSkge1xyXG4gICAgICAvLyBJZiB3ZSBoYXZlIGEgc2luZ2xlIGRhdGUgc2VsZWN0aW9uLCB1c2UgaXQgYXMgdGhlIHN0YXJ0IGRhdGUgZm9yIHRoZSBuZXcgb25lLlxyXG4gICAgICByZXR1cm4geyBzdGFydDogcHJldmlvdXNTZWxlY3Rpb24sIGVuZDogbnVsbCB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0aW9uRm9yUXVpY2tTZWxlY3REYXRlKGRhdGU6IERhdGUsIGV4aXN0aW5nU2VsZWN0aW9uPzogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICAvLyBJZiB3ZSBoYXZlIGEgdmFsaWQgcmFuZ2UsIHdlJ2xsIHNoaWZ0IHRoZSByYW5nZSB0byB0aGUgZGF0ZSBwcm92aWRlZCwgdXNpbmcgaXQgYXMgdGhlIGVuZCBkYXRlXHJcbiAgICAvLyBUaGUgbmV3IHNlbGVjdGlvbiB3aWxsIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBwcmV2aW91cy5cclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShleGlzdGluZ1NlbGVjdGlvbikgJiYgZXhpc3RpbmdTZWxlY3Rpb24uc3RhcnQgJiYgZXhpc3RpbmdTZWxlY3Rpb24uZW5kKSB7XHJcbiAgICAgIGNvbnN0IGxlbmd0aCA9IG1vbWVudChleGlzdGluZ1NlbGVjdGlvbi5lbmQpLmRpZmYoZXhpc3RpbmdTZWxlY3Rpb24uc3RhcnQsICdkYXlzJyk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgc3RhcnQ6IG1vbWVudChkYXRlKS5zdWJ0cmFjdChsZW5ndGgsICdkYXlzJykudG9EYXRlKCksXHJcbiAgICAgICAgZW5kOiBkYXRlXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgd2Ugb25seSBoYXZlIGEgc2luZ2xlIGRhdGUsIHdlJ2xsIHVzZSB0aGUgZGF0ZSBwcm92aWRlZCBhcyB0aGUgZW5kIGRhdGUuXHJcbiAgICAvLyBUaGUgdXNlciB3aWxsIGJlIGFibGUgdG8gc2VsZWN0IHRoZSBzdGFydCBkYXRlLlxyXG4gICAgcmV0dXJuIHsgc3RhcnQ6IG51bGwsIGVuZDogZGF0ZSB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV4dFNlbGVjdGlvbihzZWxlY3Rpb246IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgLy8gV2UgY2FuIG9ubHkgZGV0ZXJtaW5lIHRoZSBuZXh0IHNlbGVjdGlvbiBpZiB3ZSBoYXZlIGEgdmFsaWQgcmFuZ2VcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb24pICYmIHNlbGVjdGlvbi5zdGFydCAmJiBzZWxlY3Rpb24uZW5kKSB7XHJcbiAgICAgIC8vIFNoaWZ0IHRoZSByYW5nZSBmb3J3YXJkIGJ5IHRoZSBudW1iZXIgb2YgZGF5cyBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGRhdGVzXHJcbiAgICAgIGNvbnN0IGxlbmd0aCA9IG1vbWVudChzZWxlY3Rpb24uZW5kKS5kaWZmKHNlbGVjdGlvbi5zdGFydCwgJ2RheXMnKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBzdGFydDogbW9tZW50KHNlbGVjdGlvbi5lbmQpLmFkZCgxLCAnZGF5cycpLnRvRGF0ZSgpLFxyXG4gICAgICAgIGVuZDogbW9tZW50KHNlbGVjdGlvbi5lbmQpLmFkZCgxICsgbGVuZ3RoLCAnZGF5cycpLnRvRGF0ZSgpXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIHNpbmNlIHRoZSBuZXh0IHN0ZXBwZXIgaXMgZGlzYWJsZWQgaWYgdGhlIHNlbGVjdGlvbiBvbmx5IGhhcyBvbmUgZGF0ZS5cclxuICAgIC8vIElmIGl0IGRvZXMsIGp1c3QgcmV0dXJuIHRoZSBzZWxlY3Rpb24gYXMtaXMuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNTZWxlY3Rpb24oc2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIC8vIFdlIGNhbiBvbmx5IGRldGVybWluZSB0aGUgcHJldmlvdXMgc2VsZWN0aW9uIGlmIHdlIGhhdmUgYSB2YWxpZCByYW5nZVxyXG4gICAgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblJhbmdlKHNlbGVjdGlvbikgJiYgc2VsZWN0aW9uLnN0YXJ0ICYmIHNlbGVjdGlvbi5lbmQpIHtcclxuICAgICAgLy8gU2hpZnQgdGhlIHJhbmdlIGJhY2sgYnkgdGhlIG51bWJlciBvZiBkYXlzIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgZGF0ZXNcclxuICAgICAgY29uc3QgbGVuZ3RoID0gbW9tZW50KHNlbGVjdGlvbi5lbmQpLmRpZmYoc2VsZWN0aW9uLnN0YXJ0LCAnZGF5cycpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHN0YXJ0OiBtb21lbnQoc2VsZWN0aW9uLnN0YXJ0KS5zdWJ0cmFjdCgxICsgbGVuZ3RoLCAnZGF5cycpLnRvRGF0ZSgpLFxyXG4gICAgICAgIGVuZDogbW9tZW50KHNlbGVjdGlvbi5zdGFydCkuc3VidHJhY3QoMSwgJ2RheXMnKS50b0RhdGUoKVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBzaW5jZSB0aGUgcHJldmlvdXMgc3RlcHBlciBpcyBkaXNhYmxlZCBpZiB0aGUgc2VsZWN0aW9uIG9ubHkgaGFzIG9uZSBkYXRlLlxyXG4gICAgLy8gSWYgaXQgZG9lcywganVzdCByZXR1cm4gdGhlIHNlbGVjdGlvbiBhcy1pcy5cclxuICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBnZXRQcmltYXJ5Q2FsZW5kYXJWaWV3KHNlbGVjdGlvbjogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwsIG1pbkRhdGU6IERhdGUsIG1heERhdGU6IERhdGUsIGN1cnJlbnRWaWV3OiBDYWxlbmRhci5WaWV3KTogQ2FsZW5kYXIuVmlldyB7XHJcbiAgICBsZXQgdmlld0RhdGU6IERhdGU7XHJcbiAgICBpZiAoRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uKSkge1xyXG4gICAgICBsZXQgc3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQgPyBtb21lbnQoc2VsZWN0aW9uLnN0YXJ0KSA6IG51bGw7XHJcbiAgICAgIGxldCBlbmQgPSBzZWxlY3Rpb24uZW5kID8gbW9tZW50KHNlbGVjdGlvbi5lbmQpIDogbnVsbDtcclxuXHJcbiAgICAgIC8vIFNpbmNlIHdlJ3JlIGluIHJhbmdlIG1vZGUsIHRoZSBwcmltYXJ5IGNhbGVuZGFyIGlzIG1vc3RseSBjb25jZXJuZWQgd2l0aCB0aGUgc3RhcnQgZGF0ZVxyXG4gICAgICBpZiAoc3RhcnQpIHtcclxuICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgc3RhcnQgZGF0ZSBpbiB0aGUgc2VsZWN0aW9uIGFuZCBpdCdzIGJlZm9yZSB0aGUgbWluIGRhdGUsIHNoaWZ0IHRoZSB2aWV3IHRvIHRoZSBtaW4gZGF0ZS5cclxuICAgICAgICBpZiAoc3RhcnQuaXNCZWZvcmUobWluRGF0ZSwgJ21vbnRoJykpIHtcclxuICAgICAgICAgIHZpZXdEYXRlID0gbWluRGF0ZTtcclxuICAgICAgICAgIC8vIElmIHRoZSBzdGFydCBpcyBhZnRlciB0aGUgbWF4IGRhdGUsIHNoaWZ0IHRoZSB2aWV3IHRvIHRoZSBtYXggZGF0ZS5cclxuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0LmlzU2FtZU9yQWZ0ZXIobWF4RGF0ZSwgJ21vbnRoJykpIHtcclxuICAgICAgICAgIC8vIHRoZSBzZWNvbmRhcnkgY2FsZW5kYXIgd2lsbCBzaG93IHRoZSBtYXggZGF0ZSBtb250aC5cclxuICAgICAgICAgIC8vIFRoZSBwcmltYXJ5IGNhbGVuZGFyIHdpbGwgc2hvdyB0aGUgbW9udGggYmVmb3JlIHRoZSBtYXggZGF0ZS5cclxuICAgICAgICAgIHZpZXdEYXRlID0gbW9tZW50KG1heERhdGUpLnN1YnRyYWN0KDEsICdtb250aCcpLnRvRGF0ZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2aWV3RGF0ZSA9IHN0YXJ0LnRvRGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChlbmQgJiYgZW5kLmlzU2FtZU9yQmVmb3JlKG1pbkRhdGUsICdtb250aCcpKSB7XHJcbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHN0YXJ0IGRhdGUsIGFuZCB0aGUgZW5kIGRhdGUgaXMgdGhlIHNhbWUgbW9udGggb3IgYmVmb3JlIHRoZSBtaW4gZGF0ZSwgc2hpZnQgdGhlIHZpZXcgdG8gdGhlIG1pbiBkYXRlLlxyXG4gICAgICAgIHZpZXdEYXRlID0gbWluRGF0ZTtcclxuICAgICAgfSBlbHNlIGlmIChlbmQgJiYgZW5kLmlzU2FtZU9yQmVmb3JlKG5ldyBEYXRlKCksICdtb250aCcpKSB7XHJcbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHN0YXJ0IGRhdGUsIGFuZCB0aGUgZW5kIGRhdGUgaXMgdGhlIHNhbWUgbW9udGggb3IgYmVmb3JlIHRoZSBjdXJyZW50IG1vbnRoLCBzaGlmdCB0aGUgdmlldyB0byB0aGUgbW9udGggYmVmb3JlIHRoZSBlbmRcclxuICAgICAgICB2aWV3RGF0ZSA9IG1vbWVudChlbmQpLnN1YnRyYWN0KDEsICdtb250aCcpLnRvRGF0ZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIE90aGVyd2lzZSwgc2hvdyB0aGUgY3VycmVudCBtb250aC5cclxuICAgICAgICB2aWV3RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZpZXdEYXRlID0gc2VsZWN0aW9uIHx8IG5ldyBEYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgY2FsZW5kYXIgdmlldyBtb2RlIGlzIHZhbGlkIGZvciB0aGUgc2VsZWN0aW9uIG1vZGUsIHVzZSBpdCwgb3RoZXJ3aXNlIHVzZSB0aGUgc2VsZWN0aW9uIHZpZXcgbW9kZVxyXG4gICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgY2FsZW5kYXIgZnJvbSBjaGFuZ2luZyB2aWV3IG1vZGVzIGFzIHRoZSB1c2VyIHR5cGVzL2JsdXJzIHRoZSB0ZXh0Ym94ZXMgYXMgbG9uZyBhcyB0aGUgdmlldyBtb2RlIGlzIHZhbGlkXHJcbiAgICBjb25zdCB2aWV3TW9kZSA9IHRoaXMudmFsaWRWaWV3TW9kZXMuaW5jbHVkZXMoY3VycmVudFZpZXcubW9kZSkgPyBjdXJyZW50Vmlldy5tb2RlIDogdGhpcy5zZWxlY3Rpb25WaWV3TW9kZTtcclxuXHJcbiAgICByZXR1cm4geyBtb2RlOiB2aWV3TW9kZSwgZGF0ZTogdmlld0RhdGUgfTtcclxuICB9XHJcblxyXG4gIGdldFNlY29uZGFyeUNhbGVuZGFyVmlldyhzZWxlY3Rpb246IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsLCBtaW5EYXRlOiBEYXRlLCBtYXhEYXRlOiBEYXRlLCBjdXJyZW50VmlldzogQ2FsZW5kYXIuVmlldyk6IENhbGVuZGFyLlZpZXcge1xyXG4gICAgbGV0IHZpZXdEYXRlOiBEYXRlO1xyXG5cclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb24pKSB7XHJcbiAgICAgIGxldCBzdGFydCA9IHNlbGVjdGlvbi5zdGFydCA/IG1vbWVudChzZWxlY3Rpb24uc3RhcnQpIDogbnVsbDtcclxuICAgICAgbGV0IGVuZCA9IHNlbGVjdGlvbi5lbmQgPyBtb21lbnQoc2VsZWN0aW9uLmVuZCkgOiBudWxsO1xyXG5cclxuICAgICAgLy8gVGhlIHNlY29uZGFyeSBjYWxlbmRhciBpcyBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggdGhlIGVuZCBkYXRlIGluIHRoZSBzZWxlY3Rpb24uXHJcbiAgICAgIGlmIChlbmQpIHtcclxuICAgICAgICBpZiAoZW5kLmlzQWZ0ZXIobWF4RGF0ZSwgJ21vbnRoJykpIHtcclxuICAgICAgICAgIC8vIElmIHRoZSBlbmQgZGF0ZSBpcyBhZnRlciB0aGUgbWF4IGRhdGUsIHNoaWZ0IHRoZSB2aWV3IHRvIHRoZSBtYXggZGF0ZS5cclxuICAgICAgICAgIHZpZXdEYXRlID0gbWF4RGF0ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVuZC5pc1NhbWVPckJlZm9yZShtaW5EYXRlLCAnbW9udGgnKSkge1xyXG4gICAgICAgICAgLy8gSWYgdGhlIGVuZCBkYXRlIGlzIHRoZSBzYW1lIG1vbnRoIG9yIGJlZm9yZSB0aGUgbWluIGRhdGUsIHNoaWZ0IHRoZSB2aWV3IHRvIHNob3dcclxuICAgICAgICAgIC8vIHRoZSBtb250aCBhZnRlciB0aGUgbWluIGRhdGUuIFRoZSBwcmltYXJ5IGNhbGVuZGFyIHdpbGwgc2hvdyB0aGUgbWluIGRhdGUgbW9udGguXHJcbiAgICAgICAgICB2aWV3RGF0ZSA9IG1vbWVudChtaW5EYXRlKS5hZGQoMSwgJ21vbnRoJykudG9EYXRlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIE90aGVyd2lzZSwgc2hvdyB0aGUgZW5kIGRhdGUgbW9udGguXHJcbiAgICAgICAgICB2aWV3RGF0ZSA9IGVuZC50b0RhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoc3RhcnQgJiYgc3RhcnQuaXNTYW1lT3JBZnRlcihtYXhEYXRlLCAnbW9udGgnKSkge1xyXG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW4gZW5kIGRhdGUsIGFuZCB0aGUgc3RhcnQgZGF0ZSBpcyBhZnRlciB0aGUgbWF4IGRhdGUsIHNob3cgdGhlIG1heCBkYXRlIG1vbnRoXHJcbiAgICAgICAgdmlld0RhdGUgPSBtYXhEYXRlO1xyXG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0ICYmIHN0YXJ0LmlzU2FtZU9yQWZ0ZXIobmV3IERhdGUoKSwgJ21vbnRoJykpIHtcclxuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFuIGVuZCBkYXRlLCBhbmQgdGhlIHN0YXJ0IGRhdGUgaXMgb24gb3IgYWZ0ZXIgdGhlIGN1cnJlbnQgbW9udGgsXHJcbiAgICAgICAgLy8gc2hvdyB0aGUgbW9udGggYWZ0ZXIgdGhlIHN0YXJ0IGRhdGUuXHJcbiAgICAgICAgdmlld0RhdGUgPSBtb21lbnQoc3RhcnQpLmFkZCgxLCAnbW9udGgnKS50b0RhdGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBPdGhlcndpc2UsIHNob3cgdGhlIGN1cnJlbnQgbW9udGguXHJcbiAgICAgICAgdmlld0RhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2aWV3RGF0ZSA9IHNlbGVjdGlvbiB8fCBuZXcgRGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHRoZSBjdXJyZW50IGNhbGVuZGFyIHZpZXcgbW9kZSBpcyB2YWxpZCBmb3IgdGhlIHNlbGVjdGlvbiBtb2RlLCB1c2UgaXQsIG90aGVyd2lzZSB1c2UgdGhlIHNlbGVjdGlvbiB2aWV3IG1vZGVcclxuICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIGNhbGVuZGFyIGZyb20gY2hhbmdpbmcgdmlldyBtb2RlcyBhcyB0aGUgdXNlciB0eXBlcy9ibHVycyB0aGUgdGV4dGJveGVzIGFzIGxvbmcgYXMgdGhlIHZpZXcgbW9kZSBpcyB2YWxpZFxyXG4gICAgY29uc3Qgdmlld01vZGUgPSB0aGlzLnZhbGlkVmlld01vZGVzLmluY2x1ZGVzKGN1cnJlbnRWaWV3Lm1vZGUpID8gY3VycmVudFZpZXcubW9kZSA6IHRoaXMuc2VsZWN0aW9uVmlld01vZGU7XHJcblxyXG4gICAgcmV0dXJuIHsgbW9kZTogdmlld01vZGUsIGRhdGU6IHZpZXdEYXRlIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,81 @@
1
+ import moment from "moment";
2
+ import { DateInput } from "../date-input.types";
3
+ import { DateInputSelectionStrategyBase } from "./date-input-selection-strategy-base";
4
+ /**
5
+ * Selection strategy for the 'year' selection mode.
6
+ */
7
+ export class YearSelectionStrategy extends DateInputSelectionStrategyBase {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.selectionViewMode = 'year';
11
+ this.validViewModes = ['year'];
12
+ this.showSecondaryTextbox = false;
13
+ this.showSecondaryCalendar = false;
14
+ }
15
+ formatSelection(selection) {
16
+ if (!selection) {
17
+ return { textbox: null, textbox2: null };
18
+ }
19
+ // Only one date is needed for formatting since the ranges span a single year.
20
+ // There shouldn't be any case where there's only a single date but it's covered anyway.
21
+ const date = DateInput.isSelectionRange(selection) ? selection.start : selection;
22
+ return { textbox: moment(date).format('YYYY'), textbox2: null };
23
+ }
24
+ parseString(value, parseFormats, opts) {
25
+ // Including 'YY' and 'YYYY' as valid formats for year input. These aren't included in the default parse
26
+ // formats because they cause issues with the default date parsing.
27
+ return super.parseString(value, ['YY', 'YYYY', ...parseFormats], opts);
28
+ }
29
+ parseTextboxValues(value, parseFormats, opts) {
30
+ // Only a single textbox is used in year mode
31
+ const date = this.parseString(value.textbox, parseFormats, opts);
32
+ if (!date) {
33
+ return null;
34
+ }
35
+ return this.getSelectionFromDate(date);
36
+ }
37
+ getSelectionFromDate(date) {
38
+ return {
39
+ start: moment(date).startOf('year').toDate(),
40
+ end: moment(date).endOf('year').toDate()
41
+ };
42
+ }
43
+ getNewSelectionFromExisting(previousSelection) {
44
+ if (DateInput.isSelectionRange(previousSelection)) {
45
+ // Base the year range off of the existing selection's end date, falling back to the start date
46
+ const date = previousSelection.end || previousSelection.start;
47
+ if (date) {
48
+ return this.getSelectionFromDate(date);
49
+ }
50
+ }
51
+ else if (DateInput.isSelectionSingleDate(previousSelection)) {
52
+ // If the previous selection was a single date, make the range that year
53
+ return this.getSelectionFromDate(previousSelection);
54
+ }
55
+ return null;
56
+ }
57
+ getSelectionForQuickSelectDate(date) {
58
+ return this.getSelectionFromDate(date);
59
+ }
60
+ getNextSelection(selection) {
61
+ // Move the selection to the next year
62
+ if (DateInput.isSelectionRange(selection) && selection.start) {
63
+ const date = moment(selection.start).add(1, 'year');
64
+ return this.getSelectionFromDate(date.toDate());
65
+ }
66
+ // This shouldn't happen since the next stepper is disabled if the selection only has one date.
67
+ // If it does, just return the selection as-is.
68
+ return selection;
69
+ }
70
+ getPreviousSelection(selection) {
71
+ // Move the selection to the previous year
72
+ if (DateInput.isSelectionRange(selection) && selection.start) {
73
+ const date = moment(selection.start).subtract(1, 'year');
74
+ return this.getSelectionFromDate(date.toDate());
75
+ }
76
+ // This shouldn't happen since the previous stepper is disabled if the selection only has one date.
77
+ // If it does, just return the selection as-is.
78
+ return selection;
79
+ }
80
+ }
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWVhci1zZWxlY3Rpb24tc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LXNlbGVjdGlvbi1zdHJhdGVnaWVzL3llYXItc2VsZWN0aW9uLXN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdEY7O0dBRUc7QUFDSCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsOEJBQThCO0lBQXpFOztRQUNrQixzQkFBaUIsR0FBc0IsTUFBTSxDQUFDO1FBQzlDLG1CQUFjLEdBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQzdCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztJQStFaEQsQ0FBQztJQTdFQyxlQUFlLENBQUMsU0FBc0M7UUFDcEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzNDLENBQUM7UUFFRCw4RUFBOEU7UUFDOUUsd0ZBQXdGO1FBQ3hGLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2pGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbEUs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QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHsgQ2FsZW5kYXIgfSBmcm9tIFwiLi4vLi4vY2FsZW5kYXIvY2FsZW5kYXIudHlwZXNcIjtcclxuaW1wb3J0IHsgRGF0ZUlucHV0IH0gZnJvbSBcIi4uL2RhdGUtaW5wdXQudHlwZXNcIjtcclxuaW1wb3J0IHsgRGF0ZUlucHV0U2VsZWN0aW9uU3RyYXRlZ3lCYXNlIH0gZnJvbSBcIi4vZGF0ZS1pbnB1dC1zZWxlY3Rpb24tc3RyYXRlZ3ktYmFzZVwiO1xyXG5cclxuLyoqXHJcbiAqIFNlbGVjdGlvbiBzdHJhdGVneSBmb3IgdGhlICd5ZWFyJyBzZWxlY3Rpb24gbW9kZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBZZWFyU2VsZWN0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBEYXRlSW5wdXRTZWxlY3Rpb25TdHJhdGVneUJhc2Uge1xyXG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb25WaWV3TW9kZTogQ2FsZW5kYXIuVmlld01vZGUgPSAneWVhcic7XHJcbiAgcHVibGljIHJlYWRvbmx5IHZhbGlkVmlld01vZGVzOiBDYWxlbmRhci5WaWV3TW9kZVtdID0gWyd5ZWFyJ107XHJcbiAgcHVibGljIHJlYWRvbmx5IHNob3dTZWNvbmRhcnlUZXh0Ym94ID0gZmFsc2U7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNob3dTZWNvbmRhcnlDYWxlbmRhciA9IGZhbHNlO1xyXG5cclxuICBmb3JtYXRTZWxlY3Rpb24oc2VsZWN0aW9uPzogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwpOiBEYXRlSW5wdXQuVGV4dGJveEdyb3VwWyd2YWx1ZSddIHtcclxuICAgIGlmICghc2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiB7IHRleHRib3g6IG51bGwsIHRleHRib3gyOiBudWxsIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gT25seSBvbmUgZGF0ZSBpcyBuZWVkZWQgZm9yIGZvcm1hdHRpbmcgc2luY2UgdGhlIHJhbmdlcyBzcGFuIGEgc2luZ2xlIHllYXIuXHJcbiAgICAvLyBUaGVyZSBzaG91bGRuJ3QgYmUgYW55IGNhc2Ugd2hlcmUgdGhlcmUncyBvbmx5IGEgc2luZ2xlIGRhdGUgYnV0IGl0J3MgY292ZXJlZCBhbnl3YXkuXHJcbiAgICBjb25zdCBkYXRlID0gRGF0ZUlucHV0LmlzU2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uKSA/IHNlbGVjdGlvbi5zdGFydCA6IHNlbGVjdGlvbjtcclxuICAgIHJldHVybiB7IHRleHRib3g6IG1vbWVudChkYXRlKS5mb3JtYXQoJ1lZWVknKSwgdGV4dGJveDI6IG51bGwgfTtcclxuICB9XHJcblxyXG4gIHBhcnNlU3RyaW5nKHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJzZUZvcm1hdHM6IHN0cmluZ1tdLCBvcHRzPzogRGF0ZUlucHV0LlBhcnNpbmdPcHRpb25zKTogRGF0ZSB8IG51bGwge1xyXG4gICAgLy8gSW5jbHVkaW5nICdZWScgYW5kICdZWVlZJyBhcyB2YWxpZCBmb3JtYXRzIGZvciB5ZWFyIGlucHV0LiBUaGVzZSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlIGRlZmF1bHQgcGFyc2VcclxuICAgIC8vIGZvcm1hdHMgYmVjYXVzZSB0aGV5IGNhdXNlIGlzc3VlcyB3aXRoIHRoZSBkZWZhdWx0IGRhdGUgcGFyc2luZy5cclxuICAgIHJldHVybiBzdXBlci5wYXJzZVN0cmluZyh2YWx1ZSwgWydZWScsICdZWVlZJywgLi4ucGFyc2VGb3JtYXRzXSwgb3B0cyk7XHJcbiAgfVxyXG5cclxuICBwYXJzZVRleHRib3hWYWx1ZXModmFsdWU6IERhdGVJbnB1dC5UZXh0Ym94R3JvdXBbJ3ZhbHVlJ10sIHBhcnNlRm9ybWF0czogc3RyaW5nW10sIG9wdHM/OiBEYXRlSW5wdXQuUGFyc2luZ09wdGlvbnMpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICAvLyBPbmx5IGEgc2luZ2xlIHRleHRib3ggaXMgdXNlZCBpbiB5ZWFyIG1vZGVcclxuICAgIGNvbnN0IGRhdGUgPSB0aGlzLnBhcnNlU3RyaW5nKHZhbHVlLnRleHRib3gsIHBhcnNlRm9ybWF0cywgb3B0cyk7XHJcblxyXG4gICAgaWYgKCFkYXRlKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGlvbkZyb21EYXRlKGRhdGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0aW9uRnJvbURhdGUoZGF0ZTogRGF0ZSk6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHN0YXJ0OiBtb21lbnQoZGF0ZSkuc3RhcnRPZigneWVhcicpLnRvRGF0ZSgpLFxyXG4gICAgICBlbmQ6IG1vbWVudChkYXRlKS5lbmRPZigneWVhcicpLnRvRGF0ZSgpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV3U2VsZWN0aW9uRnJvbUV4aXN0aW5nKHByZXZpb3VzU2VsZWN0aW9uPzogRGF0ZUlucHV0LlNlbGVjdGlvbik6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShwcmV2aW91c1NlbGVjdGlvbikpIHtcclxuICAgICAgLy8gQmFzZSB0aGUgeWVhciByYW5nZSBvZmYgb2YgdGhlIGV4aXN0aW5nIHNlbGVjdGlvbidzIGVuZCBkYXRlLCBmYWxsaW5nIGJhY2sgdG8gdGhlIHN0YXJ0IGRhdGVcclxuICAgICAgY29uc3QgZGF0ZSA9IHByZXZpb3VzU2VsZWN0aW9uLmVuZCB8fCBwcmV2aW91c1NlbGVjdGlvbi5zdGFydDtcclxuICAgICAgaWYgKGRhdGUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb25Gcm9tRGF0ZShkYXRlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25TaW5nbGVEYXRlKHByZXZpb3VzU2VsZWN0aW9uKSkge1xyXG4gICAgICAvLyBJZiB0aGUgcHJldmlvdXMgc2VsZWN0aW9uIHdhcyBhIHNpbmdsZSBkYXRlLCBtYWtlIHRoZSByYW5nZSB0aGF0IHllYXJcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0aW9uRnJvbURhdGUocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0aW9uRm9yUXVpY2tTZWxlY3REYXRlKGRhdGU6IERhdGUpOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb25Gcm9tRGF0ZShkYXRlKTtcclxuICB9XHJcblxyXG4gIGdldE5leHRTZWxlY3Rpb24oc2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uKTogRGF0ZUlucHV0LlNlbGVjdGlvbiB8IG51bGwge1xyXG4gICAgLy8gTW92ZSB0aGUgc2VsZWN0aW9uIHRvIHRoZSBuZXh0IHllYXJcclxuICAgIGlmIChEYXRlSW5wdXQuaXNTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb24pICYmIHNlbGVjdGlvbi5zdGFydCkge1xyXG4gICAgICBjb25zdCBkYXRlID0gbW9tZW50KHNlbGVjdGlvbi5zdGFydCkuYWRkKDEsICd5ZWFyJyk7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGlvbkZyb21EYXRlKGRhdGUudG9EYXRlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBzaW5jZSB0aGUgbmV4dCBzdGVwcGVyIGlzIGRpc2FibGVkIGlmIHRoZSBzZWxlY3Rpb24gb25seSBoYXMgb25lIGRhdGUuXHJcbiAgICAvLyBJZiBpdCBkb2VzLCBqdXN0IHJldHVybiB0aGUgc2VsZWN0aW9uIGFzLWlzLlxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGdldFByZXZpb3VzU2VsZWN0aW9uKHNlbGVjdGlvbjogRGF0ZUlucHV0LlNlbGVjdGlvbik6IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsIHtcclxuICAgIC8vIE1vdmUgdGhlIHNlbGVjdGlvbiB0byB0aGUgcHJldmlvdXMgeWVhclxyXG4gICAgaWYgKERhdGVJbnB1dC5pc1NlbGVjdGlvblJhbmdlKHNlbGVjdGlvbikgJiYgc2VsZWN0aW9uLnN0YXJ0KSB7XHJcbiAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQoc2VsZWN0aW9uLnN0YXJ0KS5zdWJ0cmFjdCgxLCAneWVhcicpO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb25Gcm9tRGF0ZShkYXRlLnRvRGF0ZSgpKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIHNpbmNlIHRoZSBwcmV2aW91cyBzdGVwcGVyIGlzIGRpc2FibGVkIGlmIHRoZSBzZWxlY3Rpb24gb25seSBoYXMgb25lIGRhdGUuXHJcbiAgICAvLyBJZiBpdCBkb2VzLCBqdXN0IHJldHVybiB0aGUgc2VsZWN0aW9uIGFzLWlzLlxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICB9XHJcbn1cclxuIl19