@veracity/vui 2.14.0-beta.0 → 2.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) hide show
  1. package/dist/cjs/calendar/calendar.d.ts +5 -0
  2. package/dist/cjs/calendar/calendar.d.ts.map +1 -0
  3. package/dist/cjs/calendar/calendar.js +130 -0
  4. package/dist/cjs/calendar/calendar.styles.d.ts +14 -0
  5. package/dist/cjs/calendar/calendar.styles.d.ts.map +1 -0
  6. package/dist/cjs/calendar/calendar.styles.js +71 -0
  7. package/dist/cjs/calendar/calendar.types.d.ts +81 -0
  8. package/dist/cjs/calendar/calendar.types.d.ts.map +1 -0
  9. package/dist/cjs/calendar/calendar.types.js +2 -0
  10. package/dist/cjs/calendar/components/calendarHeader.d.ts +16 -0
  11. package/dist/cjs/calendar/components/calendarHeader.d.ts.map +1 -0
  12. package/dist/cjs/calendar/components/calendarHeader.js +22 -0
  13. package/dist/cjs/calendar/components/dayPicker.d.ts +9 -0
  14. package/dist/cjs/calendar/components/dayPicker.d.ts.map +1 -0
  15. package/dist/cjs/calendar/components/dayPicker.js +29 -0
  16. package/dist/cjs/calendar/components/index.d.ts +6 -0
  17. package/dist/cjs/calendar/components/index.d.ts.map +1 -0
  18. package/dist/cjs/calendar/components/index.js +21 -0
  19. package/dist/cjs/calendar/components/monthPicker.d.ts +9 -0
  20. package/dist/cjs/calendar/components/monthPicker.d.ts.map +1 -0
  21. package/dist/cjs/calendar/components/monthPicker.js +12 -0
  22. package/dist/cjs/calendar/components/timeUnitHeader.d.ts +13 -0
  23. package/dist/cjs/calendar/components/timeUnitHeader.d.ts.map +1 -0
  24. package/dist/cjs/calendar/components/timeUnitHeader.js +26 -0
  25. package/dist/cjs/calendar/components/yearPicker.d.ts +9 -0
  26. package/dist/cjs/calendar/components/yearPicker.d.ts.map +1 -0
  27. package/dist/cjs/calendar/components/yearPicker.js +10 -0
  28. package/dist/cjs/calendar/consts.d.ts +7 -0
  29. package/dist/cjs/calendar/consts.d.ts.map +1 -0
  30. package/dist/cjs/calendar/consts.js +22 -0
  31. package/dist/cjs/calendar/hooks/index.d.ts +5 -0
  32. package/dist/cjs/calendar/hooks/index.d.ts.map +1 -0
  33. package/dist/cjs/calendar/hooks/index.js +20 -0
  34. package/dist/cjs/calendar/hooks/useBoundaries.d.ts +12 -0
  35. package/dist/cjs/calendar/hooks/useBoundaries.d.ts.map +1 -0
  36. package/dist/cjs/calendar/hooks/useBoundaries.js +16 -0
  37. package/dist/cjs/calendar/hooks/useCalendar.d.ts +8 -0
  38. package/dist/cjs/calendar/hooks/useCalendar.d.ts.map +1 -0
  39. package/dist/cjs/calendar/hooks/useCalendar.js +143 -0
  40. package/dist/cjs/calendar/hooks/useDefaultViewMonth.d.ts +8 -0
  41. package/dist/cjs/calendar/hooks/useDefaultViewMonth.d.ts.map +1 -0
  42. package/dist/cjs/calendar/hooks/useDefaultViewMonth.js +21 -0
  43. package/dist/cjs/calendar/hooks/useSelectedDate.d.ts +15 -0
  44. package/dist/cjs/calendar/hooks/useSelectedDate.d.ts.map +1 -0
  45. package/dist/cjs/calendar/hooks/useSelectedDate.js +20 -0
  46. package/dist/cjs/calendar/index.d.ts +5 -0
  47. package/dist/cjs/calendar/index.d.ts.map +1 -0
  48. package/dist/cjs/calendar/index.js +25 -0
  49. package/dist/cjs/calendar/theme.d.ts +8 -0
  50. package/dist/cjs/calendar/theme.d.ts.map +1 -0
  51. package/dist/cjs/calendar/theme.js +12 -0
  52. package/dist/cjs/calendar/utils.d.ts +26 -0
  53. package/dist/cjs/calendar/utils.d.ts.map +1 -0
  54. package/dist/cjs/calendar/utils.js +95 -0
  55. package/dist/cjs/core/theme.d.ts.map +1 -1
  56. package/dist/cjs/core/theme.js +2 -4
  57. package/dist/cjs/datePicker/components/pickerPanel.d.ts +6 -0
  58. package/dist/cjs/datePicker/components/pickerPanel.d.ts.map +1 -0
  59. package/dist/cjs/datePicker/components/pickerPanel.js +25 -0
  60. package/dist/cjs/datePicker/dateInput.d.ts +11 -0
  61. package/dist/cjs/datePicker/dateInput.d.ts.map +1 -0
  62. package/dist/cjs/datePicker/dateInput.js +92 -0
  63. package/dist/cjs/datePicker/datePicker.d.ts +5 -0
  64. package/dist/cjs/datePicker/datePicker.d.ts.map +1 -0
  65. package/dist/cjs/datePicker/datePicker.js +138 -0
  66. package/dist/cjs/datePicker/datePicker.types.d.ts +22 -0
  67. package/dist/cjs/datePicker/datePicker.types.d.ts.map +1 -0
  68. package/dist/cjs/datePicker/datePicker.types.js +2 -0
  69. package/dist/cjs/datePicker/index.d.ts +4 -0
  70. package/dist/cjs/datePicker/index.d.ts.map +1 -0
  71. package/dist/cjs/datePicker/index.js +24 -0
  72. package/dist/cjs/datePicker/theme.d.ts +8 -0
  73. package/dist/cjs/datePicker/theme.d.ts.map +1 -0
  74. package/dist/cjs/datePicker/theme.js +12 -0
  75. package/dist/cjs/footer/footer.js +1 -1
  76. package/dist/cjs/header/loggedInHeader.d.ts.map +1 -1
  77. package/dist/cjs/icons/baseIcons/conc/conAnalytics.d.ts +4 -0
  78. package/dist/cjs/icons/baseIcons/conc/conAnalytics.d.ts.map +1 -0
  79. package/dist/cjs/icons/baseIcons/conc/conAnalytics.js +8 -0
  80. package/dist/cjs/icons/baseIcons/conc/conCircularEconomy.d.ts +4 -0
  81. package/dist/cjs/icons/baseIcons/conc/conCircularEconomy.d.ts.map +1 -0
  82. package/dist/cjs/icons/baseIcons/conc/conCircularEconomy.js +8 -0
  83. package/dist/cjs/icons/baseIcons/conc/conCleanAir.d.ts +4 -0
  84. package/dist/cjs/icons/baseIcons/conc/conCleanAir.d.ts.map +1 -0
  85. package/dist/cjs/icons/baseIcons/conc/conCleanAir.js +7 -0
  86. package/dist/cjs/icons/baseIcons/conc/conCleanWater.d.ts +4 -0
  87. package/dist/cjs/icons/baseIcons/conc/conCleanWater.d.ts.map +1 -0
  88. package/dist/cjs/icons/baseIcons/conc/conCleanWater.js +7 -0
  89. package/dist/cjs/icons/baseIcons/conc/conDataFabric.d.ts +4 -0
  90. package/dist/cjs/icons/baseIcons/conc/conDataFabric.d.ts.map +1 -0
  91. package/dist/cjs/icons/baseIcons/conc/conDataFabric.js +7 -0
  92. package/dist/cjs/icons/baseIcons/conc/conDeepSearch.d.ts +4 -0
  93. package/dist/cjs/icons/baseIcons/conc/conDeepSearch.d.ts.map +1 -0
  94. package/dist/cjs/icons/baseIcons/conc/conDeepSearch.js +8 -0
  95. package/dist/cjs/icons/baseIcons/conc/conElectricCar.d.ts +4 -0
  96. package/dist/cjs/icons/baseIcons/conc/conElectricCar.d.ts.map +1 -0
  97. package/dist/cjs/icons/baseIcons/conc/conElectricCar.js +8 -0
  98. package/dist/cjs/icons/baseIcons/conc/conEnergyEfficiency.d.ts +4 -0
  99. package/dist/cjs/icons/baseIcons/conc/conEnergyEfficiency.d.ts.map +1 -0
  100. package/dist/cjs/icons/baseIcons/conc/conEnergyEfficiency.js +7 -0
  101. package/dist/cjs/icons/baseIcons/conc/conIdentitySafe.d.ts +4 -0
  102. package/dist/cjs/icons/baseIcons/conc/conIdentitySafe.d.ts.map +1 -0
  103. package/dist/cjs/icons/baseIcons/conc/conIdentitySafe.js +7 -0
  104. package/dist/cjs/icons/baseIcons/conc/conMarketplace.d.ts +4 -0
  105. package/dist/cjs/icons/baseIcons/conc/conMarketplace.d.ts.map +1 -0
  106. package/dist/cjs/icons/baseIcons/conc/conMarketplace.js +7 -0
  107. package/dist/cjs/icons/baseIcons/conc/conNetwork.d.ts +4 -0
  108. package/dist/cjs/icons/baseIcons/conc/conNetwork.d.ts.map +1 -0
  109. package/dist/cjs/icons/baseIcons/conc/conNetwork.js +7 -0
  110. package/dist/cjs/icons/baseIcons/conc/conNotifications.d.ts +4 -0
  111. package/dist/cjs/icons/baseIcons/conc/conNotifications.d.ts.map +1 -0
  112. package/dist/cjs/icons/baseIcons/conc/conNotifications.js +7 -0
  113. package/dist/cjs/icons/baseIcons/conc/conNotifications2.d.ts +4 -0
  114. package/dist/cjs/icons/baseIcons/conc/conNotifications2.d.ts.map +1 -0
  115. package/dist/cjs/icons/baseIcons/conc/conNotifications2.js +7 -0
  116. package/dist/cjs/icons/baseIcons/conc/conRecycling.d.ts +4 -0
  117. package/dist/cjs/icons/baseIcons/conc/conRecycling.d.ts.map +1 -0
  118. package/dist/cjs/icons/baseIcons/conc/conRecycling.js +8 -0
  119. package/dist/cjs/icons/baseIcons/conc/conRenewableCertificateWater.d.ts +4 -0
  120. package/dist/cjs/icons/baseIcons/conc/conRenewableCertificateWater.d.ts.map +1 -0
  121. package/dist/cjs/icons/baseIcons/conc/conRenewableCertificateWater.js +8 -0
  122. package/dist/cjs/icons/baseIcons/conc/conRenewableCertificateWind.d.ts +4 -0
  123. package/dist/cjs/icons/baseIcons/conc/conRenewableCertificateWind.d.ts.map +1 -0
  124. package/dist/cjs/icons/baseIcons/conc/conRenewableCertificateWind.js +8 -0
  125. package/dist/cjs/icons/baseIcons/conc/conServices.d.ts +4 -0
  126. package/dist/cjs/icons/baseIcons/conc/conServices.d.ts.map +1 -0
  127. package/dist/cjs/icons/baseIcons/conc/conServices.js +7 -0
  128. package/dist/cjs/icons/baseIcons/conc/conSmartPowerGrid.d.ts +4 -0
  129. package/dist/cjs/icons/baseIcons/conc/conSmartPowerGrid.d.ts.map +1 -0
  130. package/dist/cjs/icons/baseIcons/conc/conSmartPowerGrid.js +8 -0
  131. package/dist/cjs/icons/baseIcons/conc/conSustainableForestry.d.ts +4 -0
  132. package/dist/cjs/icons/baseIcons/conc/conSustainableForestry.d.ts.map +1 -0
  133. package/dist/cjs/icons/baseIcons/conc/conSustainableForestry.js +7 -0
  134. package/dist/cjs/icons/baseIcons/conc/conVeracityAdapter.d.ts +4 -0
  135. package/dist/cjs/icons/baseIcons/conc/conVeracityAdapter.d.ts.map +1 -0
  136. package/dist/cjs/icons/baseIcons/conc/conVeracityAdapter.js +7 -0
  137. package/dist/cjs/icons/baseIcons/conc/conWindmill.d.ts +4 -0
  138. package/dist/cjs/icons/baseIcons/conc/conWindmill.d.ts.map +1 -0
  139. package/dist/cjs/icons/baseIcons/conc/conWindmill.js +8 -0
  140. package/dist/cjs/icons/baseIcons/icons.d.ts +24 -3
  141. package/dist/cjs/icons/baseIcons/icons.d.ts.map +1 -1
  142. package/dist/cjs/icons/baseIcons/icons.js +57 -14
  143. package/dist/cjs/icons/baseIcons/types.d.ts +1 -1
  144. package/dist/cjs/icons/baseIcons/types.d.ts.map +1 -1
  145. package/dist/cjs/index.d.ts +2 -0
  146. package/dist/cjs/index.d.ts.map +1 -1
  147. package/dist/cjs/index.js +2 -0
  148. package/dist/cjs/input/consts.js +1 -1
  149. package/dist/cjs/input/helpText.d.ts.map +1 -1
  150. package/dist/cjs/input/helpText.js +1 -1
  151. package/dist/cjs/input/input.d.ts.map +1 -1
  152. package/dist/cjs/input/input.js +5 -1
  153. package/dist/cjs/input/inputInput.d.ts.map +1 -1
  154. package/dist/cjs/input/inputInput.js +1 -0
  155. package/dist/cjs/tabs/tabs.d.ts.map +1 -1
  156. package/dist/cjs/tabs/tabs.js +8 -5
  157. package/dist/cjs/tabs/tabsNavBar.d.ts.map +1 -1
  158. package/dist/cjs/tabs/tabsNavBar.js +1 -1
  159. package/dist/cjs/tabs/theme.d.ts.map +1 -1
  160. package/dist/cjs/tabs/theme.js +0 -1
  161. package/dist/cjs/theme/components.d.ts +12 -0
  162. package/dist/cjs/theme/components.d.ts.map +1 -1
  163. package/dist/cjs/theme/components.js +78 -74
  164. package/dist/cjs/theme/defaultTheme.d.ts +12 -0
  165. package/dist/cjs/theme/defaultTheme.d.ts.map +1 -1
  166. package/dist/cjs/utils/dates.d.ts +20 -0
  167. package/dist/cjs/utils/dates.d.ts.map +1 -1
  168. package/dist/cjs/utils/dates.js +60 -1
  169. package/dist/cjs/utils/formatDate.d.ts +15 -0
  170. package/dist/cjs/utils/formatDate.d.ts.map +1 -0
  171. package/dist/cjs/utils/formatDate.js +51 -0
  172. package/dist/cjs/utils/index.d.ts +1 -0
  173. package/dist/cjs/utils/index.d.ts.map +1 -1
  174. package/dist/cjs/utils/index.js +1 -0
  175. package/dist/esm/calendar/calendar.d.ts +5 -0
  176. package/dist/esm/calendar/calendar.d.ts.map +1 -0
  177. package/dist/esm/calendar/calendar.js +89 -0
  178. package/dist/esm/calendar/calendar.styles.d.ts +14 -0
  179. package/dist/esm/calendar/calendar.styles.d.ts.map +1 -0
  180. package/dist/esm/calendar/calendar.styles.js +65 -0
  181. package/dist/esm/calendar/calendar.types.d.ts +81 -0
  182. package/dist/esm/calendar/calendar.types.d.ts.map +1 -0
  183. package/dist/esm/calendar/calendar.types.js +1 -0
  184. package/dist/esm/calendar/components/calendarHeader.d.ts +16 -0
  185. package/dist/esm/calendar/components/calendarHeader.d.ts.map +1 -0
  186. package/dist/esm/calendar/components/calendarHeader.js +15 -0
  187. package/dist/esm/calendar/components/dayPicker.d.ts +9 -0
  188. package/dist/esm/calendar/components/dayPicker.d.ts.map +1 -0
  189. package/dist/esm/calendar/components/dayPicker.js +22 -0
  190. package/dist/esm/calendar/components/index.d.ts +6 -0
  191. package/dist/esm/calendar/components/index.d.ts.map +1 -0
  192. package/dist/esm/calendar/components/index.js +5 -0
  193. package/dist/esm/calendar/components/monthPicker.d.ts +9 -0
  194. package/dist/esm/calendar/components/monthPicker.d.ts.map +1 -0
  195. package/dist/esm/calendar/components/monthPicker.js +5 -0
  196. package/dist/esm/calendar/components/timeUnitHeader.d.ts +13 -0
  197. package/dist/esm/calendar/components/timeUnitHeader.d.ts.map +1 -0
  198. package/dist/esm/calendar/components/timeUnitHeader.js +19 -0
  199. package/dist/esm/calendar/components/yearPicker.d.ts +9 -0
  200. package/dist/esm/calendar/components/yearPicker.d.ts.map +1 -0
  201. package/dist/esm/calendar/components/yearPicker.js +3 -0
  202. package/dist/esm/calendar/consts.d.ts +7 -0
  203. package/dist/esm/calendar/consts.d.ts.map +1 -0
  204. package/dist/esm/calendar/consts.js +19 -0
  205. package/dist/esm/calendar/hooks/index.d.ts +5 -0
  206. package/dist/esm/calendar/hooks/index.d.ts.map +1 -0
  207. package/dist/esm/calendar/hooks/index.js +4 -0
  208. package/dist/esm/calendar/hooks/useBoundaries.d.ts +12 -0
  209. package/dist/esm/calendar/hooks/useBoundaries.d.ts.map +1 -0
  210. package/dist/esm/calendar/hooks/useBoundaries.js +12 -0
  211. package/dist/esm/calendar/hooks/useCalendar.d.ts +8 -0
  212. package/dist/esm/calendar/hooks/useCalendar.d.ts.map +1 -0
  213. package/dist/esm/calendar/hooks/useCalendar.js +139 -0
  214. package/dist/esm/calendar/hooks/useDefaultViewMonth.d.ts +8 -0
  215. package/dist/esm/calendar/hooks/useDefaultViewMonth.d.ts.map +1 -0
  216. package/dist/esm/calendar/hooks/useDefaultViewMonth.js +17 -0
  217. package/dist/esm/calendar/hooks/useSelectedDate.d.ts +15 -0
  218. package/dist/esm/calendar/hooks/useSelectedDate.d.ts.map +1 -0
  219. package/dist/esm/calendar/hooks/useSelectedDate.js +16 -0
  220. package/dist/esm/calendar/index.d.ts +5 -0
  221. package/dist/esm/calendar/index.d.ts.map +1 -0
  222. package/dist/esm/calendar/index.js +4 -0
  223. package/dist/esm/calendar/theme.d.ts +8 -0
  224. package/dist/esm/calendar/theme.d.ts.map +1 -0
  225. package/dist/esm/calendar/theme.js +10 -0
  226. package/dist/esm/calendar/utils.d.ts +26 -0
  227. package/dist/esm/calendar/utils.d.ts.map +1 -0
  228. package/dist/esm/calendar/utils.js +81 -0
  229. package/dist/esm/core/theme.d.ts.map +1 -1
  230. package/dist/esm/core/theme.js +2 -4
  231. package/dist/esm/datePicker/components/pickerPanel.d.ts +6 -0
  232. package/dist/esm/datePicker/components/pickerPanel.d.ts.map +1 -0
  233. package/dist/esm/datePicker/components/pickerPanel.js +19 -0
  234. package/dist/esm/datePicker/dateInput.d.ts +11 -0
  235. package/dist/esm/datePicker/dateInput.d.ts.map +1 -0
  236. package/dist/esm/datePicker/dateInput.js +53 -0
  237. package/dist/esm/datePicker/datePicker.d.ts +5 -0
  238. package/dist/esm/datePicker/datePicker.d.ts.map +1 -0
  239. package/dist/esm/datePicker/datePicker.js +98 -0
  240. package/dist/esm/datePicker/datePicker.types.d.ts +22 -0
  241. package/dist/esm/datePicker/datePicker.types.d.ts.map +1 -0
  242. package/dist/esm/datePicker/datePicker.types.js +1 -0
  243. package/dist/esm/datePicker/index.d.ts +4 -0
  244. package/dist/esm/datePicker/index.d.ts.map +1 -0
  245. package/dist/esm/datePicker/index.js +3 -0
  246. package/dist/esm/datePicker/theme.d.ts +8 -0
  247. package/dist/esm/datePicker/theme.d.ts.map +1 -0
  248. package/dist/esm/datePicker/theme.js +10 -0
  249. package/dist/esm/footer/footer.js +1 -1
  250. package/dist/esm/header/loggedInHeader.d.ts.map +1 -1
  251. package/dist/esm/icons/baseIcons/conc/conAnalytics.d.ts +4 -0
  252. package/dist/esm/icons/baseIcons/conc/conAnalytics.d.ts.map +1 -0
  253. package/dist/esm/icons/baseIcons/conc/conAnalytics.js +6 -0
  254. package/dist/esm/icons/baseIcons/conc/conCircularEconomy.d.ts +4 -0
  255. package/dist/esm/icons/baseIcons/conc/conCircularEconomy.d.ts.map +1 -0
  256. package/dist/esm/icons/baseIcons/conc/conCircularEconomy.js +6 -0
  257. package/dist/esm/icons/baseIcons/conc/conCleanAir.d.ts +4 -0
  258. package/dist/esm/icons/baseIcons/conc/conCleanAir.d.ts.map +1 -0
  259. package/dist/esm/icons/baseIcons/conc/conCleanAir.js +5 -0
  260. package/dist/esm/icons/baseIcons/conc/conCleanWater.d.ts +4 -0
  261. package/dist/esm/icons/baseIcons/conc/conCleanWater.d.ts.map +1 -0
  262. package/dist/esm/icons/baseIcons/conc/conCleanWater.js +5 -0
  263. package/dist/esm/icons/baseIcons/conc/conDataFabric.d.ts +4 -0
  264. package/dist/esm/icons/baseIcons/conc/conDataFabric.d.ts.map +1 -0
  265. package/dist/esm/icons/baseIcons/conc/conDataFabric.js +5 -0
  266. package/dist/esm/icons/baseIcons/conc/conDeepSearch.d.ts +4 -0
  267. package/dist/esm/icons/baseIcons/conc/conDeepSearch.d.ts.map +1 -0
  268. package/dist/esm/icons/baseIcons/conc/conDeepSearch.js +6 -0
  269. package/dist/esm/icons/baseIcons/conc/conElectricCar.d.ts +4 -0
  270. package/dist/esm/icons/baseIcons/conc/conElectricCar.d.ts.map +1 -0
  271. package/dist/esm/icons/baseIcons/conc/conElectricCar.js +6 -0
  272. package/dist/esm/icons/baseIcons/conc/conEnergyEfficiency.d.ts +4 -0
  273. package/dist/esm/icons/baseIcons/conc/conEnergyEfficiency.d.ts.map +1 -0
  274. package/dist/esm/icons/baseIcons/conc/conEnergyEfficiency.js +5 -0
  275. package/dist/esm/icons/baseIcons/conc/conIdentitySafe.d.ts +4 -0
  276. package/dist/esm/icons/baseIcons/conc/conIdentitySafe.d.ts.map +1 -0
  277. package/dist/esm/icons/baseIcons/conc/conIdentitySafe.js +5 -0
  278. package/dist/esm/icons/baseIcons/conc/conMarketplace.d.ts +4 -0
  279. package/dist/esm/icons/baseIcons/conc/conMarketplace.d.ts.map +1 -0
  280. package/dist/esm/icons/baseIcons/conc/conMarketplace.js +5 -0
  281. package/dist/esm/icons/baseIcons/conc/conNetwork.d.ts +4 -0
  282. package/dist/esm/icons/baseIcons/conc/conNetwork.d.ts.map +1 -0
  283. package/dist/esm/icons/baseIcons/conc/conNetwork.js +5 -0
  284. package/dist/esm/icons/baseIcons/conc/conNotifications.d.ts +4 -0
  285. package/dist/esm/icons/baseIcons/conc/conNotifications.d.ts.map +1 -0
  286. package/dist/esm/icons/baseIcons/conc/conNotifications.js +5 -0
  287. package/dist/esm/icons/baseIcons/conc/conNotifications2.d.ts +4 -0
  288. package/dist/esm/icons/baseIcons/conc/conNotifications2.d.ts.map +1 -0
  289. package/dist/esm/icons/baseIcons/conc/conNotifications2.js +5 -0
  290. package/dist/esm/icons/baseIcons/conc/conRecycling.d.ts +4 -0
  291. package/dist/esm/icons/baseIcons/conc/conRecycling.d.ts.map +1 -0
  292. package/dist/esm/icons/baseIcons/conc/conRecycling.js +6 -0
  293. package/dist/esm/icons/baseIcons/conc/conRenewableCertificateWater.d.ts +4 -0
  294. package/dist/esm/icons/baseIcons/conc/conRenewableCertificateWater.d.ts.map +1 -0
  295. package/dist/esm/icons/baseIcons/conc/conRenewableCertificateWater.js +6 -0
  296. package/dist/esm/icons/baseIcons/conc/conRenewableCertificateWind.d.ts +4 -0
  297. package/dist/esm/icons/baseIcons/conc/conRenewableCertificateWind.d.ts.map +1 -0
  298. package/dist/esm/icons/baseIcons/conc/conRenewableCertificateWind.js +6 -0
  299. package/dist/esm/icons/baseIcons/conc/conServices.d.ts +4 -0
  300. package/dist/esm/icons/baseIcons/conc/conServices.d.ts.map +1 -0
  301. package/dist/esm/icons/baseIcons/conc/conServices.js +5 -0
  302. package/dist/esm/icons/baseIcons/conc/conSmartPowerGrid.d.ts +4 -0
  303. package/dist/esm/icons/baseIcons/conc/conSmartPowerGrid.d.ts.map +1 -0
  304. package/dist/esm/icons/baseIcons/conc/conSmartPowerGrid.js +6 -0
  305. package/dist/esm/icons/baseIcons/conc/conSustainableForestry.d.ts +4 -0
  306. package/dist/esm/icons/baseIcons/conc/conSustainableForestry.d.ts.map +1 -0
  307. package/dist/esm/icons/baseIcons/conc/conSustainableForestry.js +5 -0
  308. package/dist/esm/icons/baseIcons/conc/conVeracityAdapter.d.ts +4 -0
  309. package/dist/esm/icons/baseIcons/conc/conVeracityAdapter.d.ts.map +1 -0
  310. package/dist/esm/icons/baseIcons/conc/conVeracityAdapter.js +5 -0
  311. package/dist/esm/icons/baseIcons/conc/conWindmill.d.ts +4 -0
  312. package/dist/esm/icons/baseIcons/conc/conWindmill.d.ts.map +1 -0
  313. package/dist/esm/icons/baseIcons/conc/conWindmill.js +6 -0
  314. package/dist/esm/icons/baseIcons/icons.d.ts +24 -3
  315. package/dist/esm/icons/baseIcons/icons.d.ts.map +1 -1
  316. package/dist/esm/icons/baseIcons/icons.js +24 -3
  317. package/dist/esm/icons/baseIcons/types.d.ts +1 -1
  318. package/dist/esm/icons/baseIcons/types.d.ts.map +1 -1
  319. package/dist/esm/index.d.ts +2 -0
  320. package/dist/esm/index.d.ts.map +1 -1
  321. package/dist/esm/index.js +2 -0
  322. package/dist/esm/input/consts.js +1 -1
  323. package/dist/esm/input/helpText.d.ts.map +1 -1
  324. package/dist/esm/input/helpText.js +1 -1
  325. package/dist/esm/input/input.d.ts.map +1 -1
  326. package/dist/esm/input/input.js +5 -1
  327. package/dist/esm/input/inputInput.d.ts.map +1 -1
  328. package/dist/esm/input/inputInput.js +1 -0
  329. package/dist/esm/tabs/tabs.d.ts.map +1 -1
  330. package/dist/esm/tabs/tabs.js +7 -4
  331. package/dist/esm/tabs/tabsNavBar.d.ts.map +1 -1
  332. package/dist/esm/tabs/tabsNavBar.js +1 -1
  333. package/dist/esm/tabs/theme.d.ts.map +1 -1
  334. package/dist/esm/tabs/theme.js +0 -1
  335. package/dist/esm/theme/components.d.ts +12 -0
  336. package/dist/esm/theme/components.d.ts.map +1 -1
  337. package/dist/esm/theme/components.js +4 -0
  338. package/dist/esm/theme/defaultTheme.d.ts +12 -0
  339. package/dist/esm/theme/defaultTheme.d.ts.map +1 -1
  340. package/dist/esm/utils/dates.d.ts +20 -0
  341. package/dist/esm/utils/dates.d.ts.map +1 -1
  342. package/dist/esm/utils/dates.js +51 -0
  343. package/dist/esm/utils/formatDate.d.ts +15 -0
  344. package/dist/esm/utils/formatDate.d.ts.map +1 -0
  345. package/dist/esm/utils/formatDate.js +36 -0
  346. package/dist/esm/utils/index.d.ts +1 -0
  347. package/dist/esm/utils/index.d.ts.map +1 -1
  348. package/dist/esm/utils/index.js +1 -0
  349. package/package.json +1 -1
  350. package/src/calendar/calendar.styles.ts +75 -0
  351. package/src/calendar/calendar.tsx +145 -0
  352. package/src/calendar/calendar.types.ts +91 -0
  353. package/src/calendar/components/calendarHeader.tsx +56 -0
  354. package/src/calendar/components/dayPicker.tsx +55 -0
  355. package/src/calendar/components/index.ts +5 -0
  356. package/src/calendar/components/monthPicker.tsx +26 -0
  357. package/src/calendar/components/timeUnitHeader.tsx +47 -0
  358. package/src/calendar/components/yearPicker.tsx +24 -0
  359. package/src/calendar/consts.ts +24 -0
  360. package/src/calendar/hooks/index.ts +4 -0
  361. package/src/calendar/hooks/useBoundaries.ts +16 -0
  362. package/src/calendar/hooks/useCalendar.ts +181 -0
  363. package/src/calendar/hooks/useDefaultViewMonth.ts +18 -0
  364. package/src/calendar/hooks/useSelectedDate.ts +20 -0
  365. package/src/calendar/index.ts +4 -0
  366. package/src/calendar/theme.ts +14 -0
  367. package/src/calendar/utils.ts +100 -0
  368. package/src/core/theme.ts +2 -4
  369. package/src/datePicker/components/pickerPanel.tsx +22 -0
  370. package/src/datePicker/dateInput.tsx +77 -0
  371. package/src/datePicker/datePicker.tsx +172 -0
  372. package/src/datePicker/datePicker.types.ts +25 -0
  373. package/src/datePicker/index.ts +3 -0
  374. package/src/datePicker/theme.ts +14 -0
  375. package/src/footer/footer.tsx +1 -1
  376. package/src/header/loggedInHeader.tsx +0 -1
  377. package/src/icons/baseIcons/conc/conAnalytics.ts +9 -0
  378. package/src/icons/baseIcons/conc/conCircularEconomy.ts +9 -0
  379. package/src/icons/baseIcons/conc/conCleanAir.ts +8 -0
  380. package/src/icons/baseIcons/conc/conCleanWater.ts +8 -0
  381. package/src/icons/baseIcons/conc/conDataFabric.ts +8 -0
  382. package/src/icons/baseIcons/conc/conDeepSearch.ts +9 -0
  383. package/src/icons/baseIcons/conc/conElectricCar.ts +9 -0
  384. package/src/icons/baseIcons/conc/conEnergyEfficiency.ts +8 -0
  385. package/src/icons/baseIcons/conc/conIdentitySafe.ts +8 -0
  386. package/src/icons/baseIcons/conc/conMarketplace.ts +8 -0
  387. package/src/icons/baseIcons/conc/conNetwork.ts +8 -0
  388. package/src/icons/baseIcons/conc/conNotifications.ts +8 -0
  389. package/src/icons/baseIcons/conc/conNotifications2.ts +8 -0
  390. package/src/icons/baseIcons/conc/conRecycling.ts +9 -0
  391. package/src/icons/baseIcons/conc/conRenewableCertificateWater.ts +9 -0
  392. package/src/icons/baseIcons/conc/conRenewableCertificateWind.ts +9 -0
  393. package/src/icons/baseIcons/conc/conServices.ts +8 -0
  394. package/src/icons/baseIcons/conc/conSmartPowerGrid.ts +9 -0
  395. package/src/icons/baseIcons/conc/conSustainableForestry.ts +8 -0
  396. package/src/icons/baseIcons/conc/conVeracityAdapter.ts +8 -0
  397. package/src/icons/baseIcons/conc/conWindmill.ts +9 -0
  398. package/src/icons/baseIcons/icons.ts +24 -3
  399. package/src/icons/baseIcons/types.ts +24 -3
  400. package/src/index.ts +2 -0
  401. package/src/input/consts.ts +1 -1
  402. package/src/input/helpText.tsx +1 -0
  403. package/src/input/input.tsx +5 -1
  404. package/src/input/inputInput.tsx +1 -0
  405. package/src/tabs/tabs.tsx +7 -4
  406. package/src/tabs/tabsNavBar.tsx +3 -1
  407. package/src/tabs/theme.ts +0 -1
  408. package/src/theme/components.ts +4 -0
  409. package/src/utils/dates.ts +60 -0
  410. package/src/utils/formatDate.ts +63 -0
  411. package/src/utils/index.ts +1 -0
@@ -0,0 +1,181 @@
1
+ import { useMemo } from 'react'
2
+
3
+ import { generateDateByUTCValue, getDateUTCValue, sameDate, sameYear, sameYearSameMonth } from '../../utils'
4
+ import { MonthProps, TimeItem, TimeResult } from '../calendar.types'
5
+ import { viewYears } from '../consts'
6
+ import { getNextDate, isDay, isExact, isFrom, isMonth, isRange, isTo, isYear } from '../utils'
7
+ import { useBoundaries } from './useBoundaries'
8
+ import { useSelectedDate } from './useSelectedDate'
9
+
10
+ /**
11
+ * Main hook for doing calendar calculations
12
+ * Calculates for all time unit modes: day, month and year
13
+ * Depends on useBoundaries and useSelectedDate to do initial setup
14
+ */
15
+ export const useCalendar = ({
16
+ boundaries,
17
+ selectedDates,
18
+ mode = 'exact',
19
+ timeUnitMode,
20
+ viewDate,
21
+ fixedNumberOfWeeks
22
+ }: MonthProps) => {
23
+ const boundariesProcessed = useBoundaries({ boundaries })
24
+ const selectedProcessed = useSelectedDate({ selectedDates, mode })
25
+
26
+ return useMemo(() => {
27
+ const { maxDateTime, minDateTime } = boundariesProcessed
28
+ const { currentDateTime, maxSelectedDateTime, minSelectedDateTime } = selectedProcessed
29
+ const { utcYear: viewDateYear, utcMonth: viewDateMonth } = getDateUTCValue(viewDate)
30
+
31
+ let calendarFirstDay: Date
32
+ let calendarLastDay: Date
33
+ let nextFirstDay: Date
34
+ let prevLastDay: Date
35
+ let firstDay: Date
36
+ let lastDay: Date
37
+
38
+ if (isDay(timeUnitMode)) {
39
+ firstDay = generateDateByUTCValue(viewDateYear, viewDateMonth, 1)
40
+ lastDay = generateDateByUTCValue(viewDateYear, viewDateMonth + 1, 0) // lastDay
41
+
42
+ nextFirstDay = generateDateByUTCValue(viewDateYear, viewDateMonth + 1, 1)
43
+ prevLastDay = generateDateByUTCValue(viewDateYear, viewDateMonth, 0)
44
+
45
+ const weekdayFirst = firstDay.getUTCDay()
46
+ const weekdayLast = lastDay.getUTCDay()
47
+
48
+ // Monday preceding the month (or first day of the month if it's on a Monday)
49
+ calendarFirstDay =
50
+ weekdayFirst === 0
51
+ ? new Date(Date.UTC(viewDateYear, viewDateMonth, 2 - 7))
52
+ : new Date(Date.UTC(viewDateYear, viewDateMonth, 2 - weekdayFirst))
53
+
54
+ // Sunday after the month (or last day of the month if it's on a Sunday)
55
+ calendarLastDay =
56
+ weekdayLast === 0
57
+ ? new Date(Date.UTC(viewDateYear, viewDateMonth + 1, 0))
58
+ : new Date(Date.UTC(viewDateYear, viewDateMonth + 1, 8 - weekdayLast))
59
+
60
+ // If calendar must contain constant number of weeks (6 weeks)
61
+ // Missing weeks will be added to the end of the month
62
+ const numberOfWeeks = Math.round((+calendarLastDay - +calendarFirstDay) / (7 * 24 * 60 * 60 * 1000))
63
+ if (fixedNumberOfWeeks) {
64
+ for (let week = numberOfWeeks; week < 6; week++) {
65
+ calendarLastDay = generateDateByUTCValue(
66
+ calendarLastDay.getUTCFullYear(),
67
+ calendarLastDay.getUTCMonth(),
68
+ calendarLastDay.getUTCDate() + 7
69
+ )
70
+ }
71
+ }
72
+ } else if (isMonth(timeUnitMode)) {
73
+ calendarFirstDay = firstDay = generateDateByUTCValue(viewDateYear, 0, 1)
74
+ calendarLastDay = lastDay = generateDateByUTCValue(viewDateYear, 11, 31)
75
+ nextFirstDay = generateDateByUTCValue(viewDateYear + 1, 0, 1)
76
+ prevLastDay = generateDateByUTCValue(viewDateYear - 1, 11, 31)
77
+ } else {
78
+ const calendarStartYear = new Date().getUTCFullYear() - viewYears / 2
79
+ const diffYears = calendarStartYear - viewDateYear
80
+
81
+ const startYear = calendarStartYear - Math.ceil(diffYears / viewYears) * viewYears
82
+ const endYear = startYear + viewYears - 1
83
+
84
+ if (startYear === 1753) calendarFirstDay = firstDay = generateDateByUTCValue(startYear, 0, 2)
85
+ else calendarFirstDay = firstDay = generateDateByUTCValue(startYear, 0, 1)
86
+
87
+ calendarLastDay = lastDay = generateDateByUTCValue(endYear, 11, 31)
88
+ nextFirstDay = generateDateByUTCValue(endYear + 1, 0, 1)
89
+ prevLastDay = generateDateByUTCValue(startYear - 1, 11, 31)
90
+ }
91
+
92
+ const items: TimeItem[] = []
93
+
94
+ // Loops between first and last date
95
+ let dateItem = calendarFirstDay
96
+ do {
97
+ const isHidden = dateItem < firstDay || dateItem >= lastDay
98
+ const isToday = sameDate(dateItem, new Date())
99
+ const { utcYear: minDateYear, utcMonth: minDateMonth } = getDateUTCValue(minDateTime)
100
+
101
+ let minUnitModeDate = minDateTime
102
+ if (isMonth(timeUnitMode))
103
+ // Need to compare with the first day of the month to decide if the month is disabled in the month overview
104
+ minUnitModeDate = generateDateByUTCValue(minDateYear, minDateMonth, 1)
105
+ else if (isYear(timeUnitMode))
106
+ // Need to compare with the first day of the year to decide if the year is disabled in the year overview
107
+ minUnitModeDate = generateDateByUTCValue(minDateYear, 0, 1)
108
+
109
+ const isDisabled = dateItem < minUnitModeDate || dateItem > maxDateTime ? true : false
110
+
111
+ // The calendar only select a single date
112
+ const isExactSelected = isExact(mode) && minSelectedDateTime && +dateItem === +minSelectedDateTime
113
+
114
+ // The calendar selects a range
115
+ const inRangeLow = minSelectedDateTime && dateItem >= minSelectedDateTime
116
+ const inRangeHigh = maxSelectedDateTime && dateItem <= maxSelectedDateTime
117
+
118
+ const inRange =
119
+ !isExact(mode) &&
120
+ ((!isDisabled && inRangeLow && (!maxSelectedDateTime || inRangeHigh)) ||
121
+ (inRangeHigh && (!minSelectedDateTime || inRangeLow)))
122
+
123
+ const isRangeSelected = isRange(mode) && inRange
124
+ const isFromSelected = isFrom(mode) && inRangeLow
125
+ const isToSelected = isTo(mode) && inRangeHigh
126
+
127
+ const isSelected = !!(isExactSelected || isFromSelected || isToSelected || isRangeSelected)
128
+
129
+ let maxSelectedCheck = maxSelectedDateTime
130
+ let minSelectedCheck = minSelectedDateTime
131
+
132
+ if (isYear(timeUnitMode)) {
133
+ if (maxSelectedCheck) maxSelectedCheck = generateDateByUTCValue(maxSelectedCheck.getUTCFullYear(), 0, 1)
134
+ if (minSelectedCheck) minSelectedCheck = generateDateByUTCValue(minSelectedCheck.getUTCFullYear(), 0, 1)
135
+ }
136
+ if (isMonth(timeUnitMode)) {
137
+ if (maxSelectedCheck)
138
+ maxSelectedCheck = generateDateByUTCValue(
139
+ maxSelectedCheck.getUTCFullYear(),
140
+ maxSelectedCheck.getUTCMonth(),
141
+ 1
142
+ )
143
+ if (minSelectedCheck)
144
+ minSelectedCheck = generateDateByUTCValue(
145
+ minSelectedCheck.getUTCFullYear(),
146
+ minSelectedCheck.getUTCMonth(),
147
+ 1
148
+ )
149
+ }
150
+
151
+ const boundary = !isTo(mode) && sameDate(dateItem, minSelectedCheck)
152
+
153
+ let current: boolean
154
+ if (isDay(timeUnitMode)) current = sameDate(dateItem, currentDateTime)
155
+ else if (isMonth(timeUnitMode)) current = sameYearSameMonth(dateItem, currentDateTime)
156
+ else current = sameYear(dateItem, currentDateTime)
157
+
158
+ items.push({
159
+ date: dateItem,
160
+ isHidden,
161
+ isToday,
162
+ isDisabled: boundary ? false : isDisabled,
163
+ isSelected,
164
+ boundary,
165
+ current
166
+ })
167
+
168
+ dateItem = getNextDate(dateItem, timeUnitMode)
169
+ } while (dateItem <= calendarLastDay)
170
+
171
+ // Disables next/prev buttons
172
+ const prevDisabled = minDateTime > prevLastDay
173
+ const nextDisabled = maxDateTime < nextFirstDay
174
+
175
+ return {
176
+ items,
177
+ prevDisabled,
178
+ nextDisabled
179
+ } as TimeResult
180
+ }, [boundaries, selectedDates, mode, timeUnitMode, viewDate])
181
+ }
@@ -0,0 +1,18 @@
1
+ import { DefaultViewMonthProps } from '../calendar.types'
2
+
3
+ /**
4
+ * Calculates the default view date, either using selected date, current date or boundaries
5
+ * Used when initializing, after that viewDate will be set
6
+ * Memoized so will only recalculate when boundaries or selectedDate changes
7
+ */
8
+ export const useDefaultViewMonth = ({ boundaries, selectedDate, isStartDate }: DefaultViewMonthProps) => {
9
+ if (selectedDate) return selectedDate
10
+
11
+ const currentDate = new Date()
12
+ if (!boundaries) return currentDate
13
+
14
+ if (boundaries.endDate && currentDate > boundaries.endDate && !isStartDate) return boundaries.endDate
15
+ if (boundaries.startDate && currentDate > boundaries.startDate && isStartDate) return boundaries.startDate
16
+
17
+ return currentDate
18
+ }
@@ -0,0 +1,20 @@
1
+ import { CalendarMode, DateRange } from '../calendar.types'
2
+ import { isExact, isFrom } from '../utils'
3
+
4
+ /**
5
+ * Calculate the selected dates
6
+ * If we are in single calendar mode, will use the startDate as selected date
7
+ * Memoized so will only recalculate when selectedDates or mode changes
8
+ */
9
+ export const useSelectedDate = ({ selectedDates, mode }: { mode: CalendarMode; selectedDates?: DateRange }) => {
10
+ const currentDateTime = isFrom(mode) || isExact(mode) ? selectedDates?.startDate : selectedDates?.endDate
11
+
12
+ const minSelectedDateTime = selectedDates?.startDate || undefined
13
+ const maxSelectedDateTime = selectedDates?.endDate || undefined
14
+
15
+ return {
16
+ currentDateTime,
17
+ maxSelectedDateTime,
18
+ minSelectedDateTime
19
+ }
20
+ }
@@ -0,0 +1,4 @@
1
+ export * from './calendar'
2
+ export { default } from './calendar'
3
+ export * from './calendar.types'
4
+ export * from './consts'
@@ -0,0 +1,14 @@
1
+ const baseStyle = {}
2
+
3
+ const defaultProps = {}
4
+
5
+ const sizes = {}
6
+
7
+ const variants = {}
8
+
9
+ export default {
10
+ baseStyle,
11
+ defaultProps,
12
+ sizes,
13
+ variants
14
+ }
@@ -0,0 +1,100 @@
1
+ import { generateDateByUTCValue, getDateUTCValue, sameYear, sameYearSameMonth } from '../utils'
2
+ import { CalendarMode, DateRange, FlowDirection, TimeItem, TimeUnitMode } from './calendar.types'
3
+ import { minDateTimestamp, viewYears } from './consts'
4
+
5
+ export const isExact = (mode?: CalendarMode) => mode === 'exact'
6
+ export const isFrom = (mode?: CalendarMode) => mode === 'from'
7
+ export const isTo = (mode?: CalendarMode) => mode === 'to'
8
+ export const isRange = (mode?: CalendarMode) => mode === 'range'
9
+
10
+ export const isDay = (timeUnitMode?: TimeUnitMode) => timeUnitMode === 'day'
11
+ export const isMonth = (timeUnitMode?: TimeUnitMode) => timeUnitMode === 'month'
12
+ export const isYear = (timeUnitMode?: TimeUnitMode) => timeUnitMode === 'year'
13
+
14
+ /**
15
+ * Helper to get the next date item when iterating between two dates
16
+ * @param date current date in the iteration
17
+ * @param timeUnitMode time unit mode for day, month, year
18
+ */
19
+ export const getNextDate = (date: Date, timeUnitMode?: TimeUnitMode) => {
20
+ const { utcYear, utcMonth, utcDate } = getDateUTCValue(date)
21
+ if (isDay(timeUnitMode)) return generateDateByUTCValue(utcYear, utcMonth, utcDate + 1)
22
+ if (isMonth(timeUnitMode)) return generateDateByUTCValue(utcYear, utcMonth + 1, utcDate)
23
+
24
+ return generateDateByUTCValue(utcYear + 1, utcMonth, utcDate)
25
+ }
26
+
27
+ export const processSelectMonth = (clickedDate: Date, mode: CalendarMode, boundaries?: DateRange) => {
28
+ const date = clickedDate
29
+ const minDateTime = new Date(minDateTimestamp)
30
+ const { utcYear, utcMonth } = getDateUTCValue(clickedDate)
31
+ if (isTo(mode)) {
32
+ const selectDayInMonth = generateDateByUTCValue(utcYear, utcMonth + 1, 0).getUTCDate()
33
+
34
+ if (boundaries?.endDate && sameYearSameMonth(clickedDate, boundaries?.endDate)) return boundaries?.endDate
35
+
36
+ return generateDateByUTCValue(utcYear, utcMonth, selectDayInMonth)
37
+ }
38
+
39
+ if (isFrom(mode) && boundaries?.startDate && sameYearSameMonth(clickedDate, boundaries?.startDate))
40
+ return boundaries?.startDate
41
+
42
+ if (isExact(mode) && sameYear(clickedDate, minDateTime)) return minDateTime
43
+
44
+ return boundaries?.startDate && date < boundaries?.startDate ? boundaries.startDate : date
45
+ }
46
+
47
+ /**
48
+ * Helper that calcs what new date we should set as viewDate when a year is clicked
49
+ *
50
+ * @param clickedDate date of year clicked
51
+ * @param newDate pre-processed potential new view date
52
+ * @param mode calendar mode
53
+ * @param boundaries boundaries of date range
54
+ */
55
+ export const processSelectYear = (clickedData: Date, mode: CalendarMode, boundaries?: DateRange) => {
56
+ const { utcYear, utcMonth } = getDateUTCValue(clickedData)
57
+ const minDateTime = new Date(minDateTimestamp)
58
+ const date = clickedData
59
+
60
+ if (isTo(mode)) {
61
+ const selectDayInMonth = generateDateByUTCValue(utcYear, utcMonth + 1, 0).getUTCDate()
62
+ const selectMonthInYear = 11
63
+
64
+ if (boundaries?.endDate && sameYear(clickedData, boundaries?.endDate)) return boundaries.endDate
65
+
66
+ return generateDateByUTCValue(clickedData.getUTCFullYear(), selectMonthInYear, selectDayInMonth)
67
+ }
68
+
69
+ if (isFrom(mode) && boundaries?.startDate && sameYear(clickedData, boundaries?.startDate)) return boundaries.startDate
70
+
71
+ if (isExact(mode) && sameYear(clickedData, minDateTime)) return minDateTime
72
+
73
+ return boundaries?.startDate && date < boundaries?.startDate ? boundaries.startDate : date
74
+ }
75
+
76
+ export const processViewDate = (
77
+ viewDate: Date,
78
+ direction: FlowDirection,
79
+ timeUnitMode: TimeUnitMode,
80
+ calendarItems?: TimeItem[]
81
+ ) => {
82
+ const { utcYear, utcMonth } = getDateUTCValue(viewDate)
83
+ if (isDay(timeUnitMode)) {
84
+ const newMonth = generateDateByUTCValue(utcYear, utcMonth + (direction === 'next' ? 1 : -1))
85
+ return newMonth
86
+ }
87
+ if (isMonth(timeUnitMode)) {
88
+ const newMonth = generateDateByUTCValue(utcYear + (direction === 'next' ? 1 : -1), 0)
89
+ return newMonth
90
+ }
91
+
92
+ if (calendarItems) {
93
+ const date = calendarItems[direction === 'next' ? calendarItems.length - 1 : 0].date
94
+ const year = date.getUTCFullYear()
95
+ const newViewDate = generateDateByUTCValue(year + (direction === 'next' ? 1 : -viewYears), 0)
96
+ return newViewDate
97
+ }
98
+
99
+ return null
100
+ }
package/src/core/theme.ts CHANGED
@@ -72,13 +72,11 @@ export function useStyleConfig(component: keyof VuiTheme['components'], props: a
72
72
 
73
73
  let styles: Dict = {}
74
74
 
75
- if (parts.length > 0) {
75
+ if (parts.length > 0)
76
76
  parts.forEach((part: string) => {
77
77
  styles[part] = merge(baseStyles[part] ?? {}, sizeStyles[part] ?? {}, variantStyles[part] ?? {})
78
78
  })
79
- } else {
80
- styles = merge(baseStyles, sizeStyles, variantStyles)
81
- }
79
+ else styles = merge(baseStyles, sizeStyles, variantStyles)
82
80
 
83
81
  return styles
84
82
  }, [colorScheme, size, variant])
@@ -0,0 +1,22 @@
1
+ import { css, styled } from '../../core'
2
+ import Panel from '../../panel'
3
+ import { DatePickerPopupPosition } from '../datePicker.types'
4
+
5
+ export const PickerPanel = styled(Panel)<{ popupPosition: DatePickerPopupPosition; showPopupBelow: boolean }>`
6
+ display: flex;
7
+ flex-direction: column;
8
+ padding: 0px;
9
+ position: absolute;
10
+ z-index: 999;
11
+ ${p => (p.popupPosition === 'right' ? 'right: 0;' : 'left: 0;')}
12
+ ${p =>
13
+ p.showPopupBelow
14
+ ? css`
15
+ margin-top: 50px;
16
+ top: 0;
17
+ `
18
+ : css`
19
+ bottom: 0;
20
+ margin-bottom: 50px;
21
+ `}
22
+ `
@@ -0,0 +1,77 @@
1
+ import React, { useEffect, useState } from 'react'
2
+
3
+ import { Input, InputProps } from '../input'
4
+ import { T } from '../t'
5
+ import { formatDate, parseIsoDate, validateDateFormat } from '../utils'
6
+
7
+ type Props = InputProps & {
8
+ initialDate?: Date
9
+ onChange: (date?: Date) => void
10
+ onValidate: (date?: Date) => string
11
+ setValidateStatus: (inValid: boolean) => void
12
+ }
13
+
14
+ export const DateInput = ({ initialDate, onChange, onValidate, setValidateStatus, ...rest }: Props) => {
15
+ const formattedInitialDate = initialDate ? formatDate(initialDate, 'YYYY-MM-DD', { timeZone: 'UTC' }) : ''
16
+ const [dateInput, setDateInput] = useState<string>(formattedInitialDate)
17
+ const [dateInputValidated, setDateInputValidated] = useState<boolean>(true)
18
+ const [errorMessage, setErrorMessage] = useState<string>('')
19
+
20
+ const isValidDate = (dateString: string) => {
21
+ if (!validateDateFormat(dateString)) return false
22
+ if (!parseIsoDate(dateString)) return false
23
+ return true
24
+ }
25
+
26
+ const handleOnBlur = () => {
27
+ setDateInputValidated(!dateInput)
28
+ const parsedDate = parseIsoDate(dateInput)
29
+ if (parsedDate) {
30
+ setDateInput(formatDate(parsedDate, 'YYYY-MM-DD', { timeZone: 'UTC' }))
31
+ const validateMessage = onValidate(parsedDate)
32
+ !validateMessage && onChange(parsedDate)
33
+ setDateInputValidated(!validateMessage)
34
+ setErrorMessage(validateMessage)
35
+ }
36
+ }
37
+
38
+ useEffect(() => {
39
+ setDateInput(formattedInitialDate)
40
+ const validation = onValidate(initialDate)
41
+ setDateInputValidated(!validation)
42
+ setValidateStatus(!validation)
43
+ setErrorMessage(validation)
44
+ }, [initialDate])
45
+
46
+ useEffect(() => {
47
+ if (dateInput) {
48
+ const isValidDateString = isValidDate(dateInput)
49
+ setValidateStatus(isValidDateString)
50
+ if (!validateDateFormat(dateInput)) setErrorMessage('Supported format is YYYY-MM-DD')
51
+ else if (!parseIsoDate(dateInput)) setErrorMessage('Invalid date')
52
+ else {
53
+ const parsedDate = parseIsoDate(dateInput)
54
+ const validateMessage = onValidate(parsedDate)
55
+ !validateMessage && onChange(parsedDate)
56
+ setDateInputValidated(!validateMessage)
57
+ setErrorMessage(validateMessage)
58
+ }
59
+ }
60
+ }, [dateInput])
61
+
62
+ return (
63
+ <Input
64
+ borderColor={dateInputValidated ? 'sandstone.main' : 'energyRed.main'}
65
+ className="dateInput"
66
+ data-testid="test-date-input"
67
+ errorText={!dateInputValidated && <T size="md">{errorMessage}</T>}
68
+ onBlur={handleOnBlur}
69
+ onChange={e => setDateInput(e.target.value)}
70
+ placeholder="YYYY-MM-DD"
71
+ size="md"
72
+ state={!dateInputValidated && !errorMessage ? 'error' : 'default'}
73
+ value={dateInput}
74
+ {...rest}
75
+ />
76
+ )
77
+ }
@@ -0,0 +1,172 @@
1
+ import React, { useEffect, useRef, useState } from 'react'
2
+
3
+ import Box from '../box'
4
+ import Button, { LineButton } from '../button'
5
+ import Calendar, { DateRange, maxDateTimestamp, minDateTimestamp } from '../calendar'
6
+ import { omitThemingProps, styled, useStyleConfig, vui } from '../core'
7
+ import { cs, useClickOutside } from '../utils'
8
+ import { PickerPanel } from './components/pickerPanel'
9
+ import { DateInput } from './dateInput'
10
+ import { DatePickerProps } from './datePicker.types'
11
+
12
+ const DatePickerPanel = styled(PickerPanel)`
13
+ width: 320px;
14
+ `
15
+
16
+ /** [Beta] Select or input a date. */
17
+ export const DatePicker = vui<'span', DatePickerProps>((props, ref) => {
18
+ const {
19
+ autoOpened,
20
+ boundaries,
21
+ popupPosition = 'left',
22
+ selectedDate: selectedDateProps,
23
+ showClearButton,
24
+ slotBottom,
25
+ slotTop,
26
+ onSelected,
27
+ children,
28
+ className,
29
+ ...rest
30
+ } = omitThemingProps(props)
31
+ const styles = useStyleConfig('DatePicker', props)
32
+
33
+ const [selectedDate, setSelectedDate] = useState<any>(selectedDateProps)
34
+ const [isOpen, setIsOpen] = useState(!selectedDate && autoOpened)
35
+ const [isInvalidInputDate, setIsInvalidInputDate] = useState(true)
36
+ const [isInvalidSelectedDate, setIsInvalidSelectedDate] = useState(!selectedDate)
37
+ const initialDateRef = useRef<Date | undefined>(selectedDateProps)
38
+ const buttonRef = useRef<HTMLDivElement>(null)
39
+ const popupRef = useRef<HTMLDivElement>(null)
40
+ const isClearButtonVisible = showClearButton && initialDateRef.current
41
+
42
+ useClickOutside([buttonRef, popupRef], () => setIsOpen(false))
43
+
44
+ const isStartDateInRange = (date: Date) =>
45
+ !!boundaries?.startDate && !!date ? date.getTime() - boundaries.startDate.getTime() >= 0 : true
46
+
47
+ const isEndDateInRange = (date: Date) =>
48
+ !!boundaries?.endDate && !!date ? date.getTime() - boundaries.endDate.getTime() <= 0 : true
49
+
50
+ const isValidDateRange = (date: Date) => {
51
+ const minDateTime = new Date(minDateTimestamp)
52
+ const maxDateTime = new Date(maxDateTimestamp)
53
+ return date >= minDateTime || date <= maxDateTime
54
+ }
55
+
56
+ useEffect(() => {
57
+ if (!isOpen) {
58
+ setSelectedDate(selectedDateProps)
59
+ initialDateRef.current = selectedDateProps
60
+ }
61
+ }, [isOpen, selectedDateProps])
62
+
63
+ useEffect(() => {
64
+ setIsInvalidSelectedDate(
65
+ (selectedDate && !isStartDateInRange(selectedDate)) ||
66
+ (selectedDate && !isEndDateInRange(selectedDate)) ||
67
+ (selectedDate && !isValidDateRange(selectedDate)) ||
68
+ !selectedDate
69
+ )
70
+ }, [selectedDate])
71
+
72
+ const onApplyDates = (date?: Date) => {
73
+ onSelected?.(date)
74
+ initialDateRef.current = date
75
+ setIsOpen(false)
76
+ }
77
+
78
+ const onClear = () => {
79
+ onClose()
80
+ onSelected?.(undefined)
81
+ }
82
+
83
+ const onClose = () => {
84
+ setSelectedDate(undefined)
85
+ setIsOpen(false)
86
+ }
87
+
88
+ const onToggle = () => {
89
+ if (isOpen) onClose()
90
+ setIsOpen(!isOpen)
91
+ }
92
+
93
+ const selectDate = (range: DateRange) => setSelectedDate(range?.startDate)
94
+
95
+ const onDateInputValidate = (date?: Date) => {
96
+ const minDateTime = new Date(minDateTimestamp)
97
+ const maxDateTime = new Date(maxDateTimestamp)
98
+
99
+ if (date) {
100
+ const conditions: [boolean, string][] = [
101
+ [isNaN(date.getTime()), 'Supported format is YYYY-MM-DD'],
102
+ [date < minDateTime, 'Invalid date, the minimum date time is 1753-01-02'],
103
+ [date > maxDateTime, 'Invalid date, the maximum date time is 9000-12-31'],
104
+ [!!boundaries?.startDate && !isStartDateInRange(date), 'Invalid date'],
105
+ [!!boundaries?.endDate && !isEndDateInRange(date), 'Invalid date']
106
+ ]
107
+ const [validateErrorPair] = conditions.filter(([result]) => result)
108
+
109
+ if (validateErrorPair) {
110
+ const [_, message] = validateErrorPair
111
+ setIsInvalidInputDate(true)
112
+ return message
113
+ }
114
+ }
115
+ return ''
116
+ }
117
+
118
+ return (
119
+ <Box className={cs('vui-datePicker', className)} position="relative" ref={ref} {...styles} {...rest}>
120
+ <Box onClick={onToggle}>{children}</Box>
121
+ {isOpen && (
122
+ <DatePickerPanel popupPosition={popupPosition} ref={popupRef} showPopupBelow>
123
+ {!!slotTop && <Box px={2}>{slotTop}</Box>}
124
+ <Box display="block" mb={0} mt={2} mx={2}>
125
+ <DateInput
126
+ autoFocus
127
+ initialDate={selectedDate}
128
+ onChange={newDate => setSelectedDate(newDate)}
129
+ onValidate={onDateInputValidate}
130
+ setValidateStatus={inValid => setIsInvalidInputDate(!inValid)}
131
+ />
132
+ </Box>
133
+ <Box mx={2} my={1}>
134
+ <Calendar
135
+ boundaries={boundaries ?? { startDate: undefined, endDate: undefined }}
136
+ fixedNumberOfWeeks
137
+ fontWeight={500}
138
+ minH={310}
139
+ mode="exact"
140
+ onSelectDates={range => selectDate(range)}
141
+ selectedDates={{ startDate: selectedDate, endDate: undefined }}
142
+ w="100%"
143
+ />
144
+ </Box>
145
+ <Box overflow="unset" pt={0.5}>
146
+ <Box alignItems="center" flex={1} ml="auto" pb={2} px={2}>
147
+ {isClearButtonVisible && (
148
+ <LineButton flex={1} onClick={onClear} size="md">
149
+ Clear
150
+ </LineButton>
151
+ )}
152
+ <Button
153
+ disabled={isInvalidSelectedDate || isInvalidInputDate}
154
+ flex={1}
155
+ ml={isClearButtonVisible ? 1 : 0}
156
+ onClick={() => onApplyDates(selectedDate)}
157
+ size="md"
158
+ >
159
+ Apply
160
+ </Button>
161
+ </Box>
162
+ </Box>
163
+ {!!slotBottom && <Box px={2}>{slotBottom}</Box>}
164
+ </DatePickerPanel>
165
+ )}
166
+ </Box>
167
+ )
168
+ })
169
+
170
+ DatePicker.displayName = 'DatePicker'
171
+
172
+ export default DatePicker
@@ -0,0 +1,25 @@
1
+ import { ReactNode } from 'react'
2
+
3
+ import { BoxProps } from '../box'
4
+ import { DateRange } from '../calendar'
5
+ import { ThemingProps } from '../theme'
6
+
7
+ export type DatePickerPopupPosition = 'left' | 'right'
8
+
9
+ export type DatePickerProps = Omit<BoxProps, 'size' | 'variant'> &
10
+ ThemingProps<'DatePicker'> & {
11
+ /** Auto opened without value, used with dynamic adding of the filter (user clicks on "+ Add filter" button) */
12
+ autoOpened?: boolean
13
+ /** Available date range for the Calendar */
14
+ boundaries?: DateRange
15
+ /** Should the popup be anchored to the left or right of the button */
16
+ popupPosition?: DatePickerPopupPosition
17
+ selectedDate?: Date
18
+ showClearButton?: boolean
19
+ /** Custom content displayed at the bottom of the panel */
20
+ slotBottom?: ReactNode
21
+ /** Custom content displayed at the top of the panel */
22
+ slotTop?: ReactNode
23
+ /** Date selected */
24
+ onSelected?: (date?: Date) => void
25
+ }
@@ -0,0 +1,3 @@
1
+ export * from './datePicker'
2
+ export { default } from './datePicker'
3
+ export * from './datePicker.types'
@@ -0,0 +1,14 @@
1
+ const baseStyle = {}
2
+
3
+ const defaultProps = {}
4
+
5
+ const sizes = {}
6
+
7
+ const variants = {}
8
+
9
+ export default {
10
+ baseStyle,
11
+ defaultProps,
12
+ sizes,
13
+ variants
14
+ }