uikit-react-public 0.11.20 → 0.14.21

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 (295) hide show
  1. package/dist/components/Badge/Badge.d.ts +6 -0
  2. package/dist/components/Badge/Badge.stories.d.ts +15 -0
  3. package/dist/components/Badge/index.d.ts +2 -0
  4. package/dist/components/Button/Button.d.ts +2 -1
  5. package/dist/components/Calendar/Calendar.d.ts +3 -0
  6. package/dist/components/Calendar/Calendar.stories.d.ts +42 -0
  7. package/dist/components/Calendar/Calendar.types.d.ts +18 -0
  8. package/dist/components/Calendar/index.d.ts +2 -0
  9. package/dist/components/Calendar/subcomponents/AcademicWeeks.d.ts +7 -0
  10. package/dist/components/Calendar/subcomponents/ColumnHeading.d.ts +7 -0
  11. package/dist/components/Calendar/subcomponents/Controls.d.ts +6 -0
  12. package/dist/components/{Datepicker/subcomponents/Day → Calendar/subcomponents}/Day.d.ts +3 -3
  13. package/dist/components/{Datepicker → Calendar}/subcomponents/EventDot.d.ts +2 -2
  14. package/dist/components/Calendar/subcomponents/Grid.d.ts +11 -0
  15. package/dist/components/Calendar/subcomponents/index.d.ts +7 -0
  16. package/dist/components/{Datepicker → Calendar}/utils/getAcademicWeekNumbers/getAcademicWeekNumbers.d.ts +1 -1
  17. package/dist/components/Calendar/utils/index.d.ts +4 -0
  18. package/dist/components/Calendar/utils/normaliseMonth/normaliseMonth.d.ts +9 -0
  19. package/dist/components/Calendar/utils/parseDateFromString/parseDateFromString.d.ts +9 -0
  20. package/dist/components/Calendar/utils/parseDateFromString/parseDateFromString.test.d.ts +1 -0
  21. package/dist/components/CookieNotice/CookieNotice.d.ts +16 -0
  22. package/dist/components/CookieNotice/index.d.ts +2 -0
  23. package/dist/components/Datepicker/Datepicker.d.ts +3 -16
  24. package/dist/components/Datepicker/Datepicker.stories.d.ts +9 -3
  25. package/dist/components/Datepicker/Datepicker.types.d.ts +23 -7
  26. package/dist/components/Datepicker/index.d.ts +1 -2
  27. package/dist/components/Datepicker/subcomponents/CustomDatepicker.d.ts +17 -0
  28. package/dist/components/Datepicker/subcomponents/DatepickerInput.d.ts +10 -0
  29. package/dist/components/Datepicker/subcomponents/NativeDatepicker.d.ts +6 -0
  30. package/dist/components/Datepicker/subcomponents/Panel.d.ts +6 -0
  31. package/dist/components/Datepicker/subcomponents/VisibleField.d.ts +12 -0
  32. package/dist/components/Datepicker/subcomponents/index.d.ts +5 -7
  33. package/dist/components/Datepicker/utils/dateToLocaleISOString/dateToLocaleISOString.d.ts +17 -0
  34. package/dist/components/Datepicker/utils/dateToLocaleISOString/dateToLocaleISOString.test.d.ts +1 -0
  35. package/dist/components/Datepicker/utils/index.d.ts +2 -3
  36. package/dist/components/Datepicker/utils/parseInputValue/parseInputValue.d.ts +11 -0
  37. package/dist/components/Datepicker/utils/parseInputValue/parseInputValue.test.d.ts +1 -0
  38. package/dist/components/Dialog/BaseDialog.d.ts +7 -2
  39. package/dist/components/FileInput/FileInput.d.ts +8 -0
  40. package/dist/components/FileInput/FileInput.stories.d.ts +16 -0
  41. package/dist/components/FileInput/__tests__/FileInput.test.d.ts +1 -0
  42. package/dist/components/FileInput/index.d.ts +2 -0
  43. package/dist/components/Footer/Footer.d.ts +1 -1
  44. package/dist/components/Header/Header.d.ts +4 -1
  45. package/dist/components/Heading/Heading.d.ts +1 -1
  46. package/dist/components/Link/BaseLink.d.ts +10 -0
  47. package/dist/components/Link/Link.d.ts +5 -10
  48. package/dist/components/Link/Link.stories.d.ts +1 -1
  49. package/dist/components/Link/index.d.ts +1 -1
  50. package/dist/components/Menu/Menu.d.ts +2 -1
  51. package/dist/components/Menu/MenuContent.d.ts +2 -1
  52. package/dist/components/Menu/MenuItem.d.ts +2 -0
  53. package/dist/components/Menu/MenuSection.d.ts +1 -1
  54. package/dist/components/Search/Search.d.ts +16 -0
  55. package/dist/components/Search/Search.stories.d.ts +34 -0
  56. package/dist/components/Search/__tests__/Search.test.d.ts +1 -0
  57. package/dist/components/Search/index.d.ts +2 -0
  58. package/dist/components/Select/Select.d.ts +1 -1
  59. package/dist/components/Select/Select.stories.d.ts +3 -7
  60. package/dist/components/Select/Select.types.d.ts +19 -14
  61. package/dist/components/Select/subcomponents/CustomOption.d.ts +1 -1
  62. package/dist/components/Select/subcomponents/CustomSelect.d.ts +1 -2
  63. package/dist/components/Select/subcomponents/Panel.d.ts +1 -1
  64. package/dist/components/Select/subcomponents/VisibleField.d.ts +4 -4
  65. package/dist/components/StandaloneLink/StandaloneLink.d.ts +12 -0
  66. package/dist/components/StandaloneLink/StandaloneLink.stories.d.ts +13 -0
  67. package/dist/components/StandaloneLink/__tests__/StandaloneLink.test.d.ts +1 -0
  68. package/dist/components/StandaloneLink/index.d.ts +2 -0
  69. package/dist/components/Table/Table.d.ts +10 -8
  70. package/dist/components/Table/Table.stories.d.ts +21 -0
  71. package/dist/components/Table/Table.types.d.ts +11 -0
  72. package/dist/components/Table/__tests__/Table.test.d.ts +1 -0
  73. package/dist/components/Table/index.d.ts +2 -1
  74. package/dist/components/Table/subcomponents/Body.d.ts +4 -0
  75. package/dist/components/Table/subcomponents/Cell/Cell.d.ts +12 -0
  76. package/dist/components/Table/subcomponents/Cell/Cell.stories.d.ts +313 -0
  77. package/dist/components/Table/subcomponents/Cell/CellContent.d.ts +10 -0
  78. package/dist/components/Table/subcomponents/Cell/__tests__/Cell.test.d.ts +1 -0
  79. package/dist/components/Table/subcomponents/Head.d.ts +4 -0
  80. package/dist/components/Table/subcomponents/HeadCell/HeadCell.d.ts +13 -0
  81. package/dist/components/Table/subcomponents/HeadCell/HeadCell.stories.d.ts +312 -0
  82. package/dist/components/Table/subcomponents/HeadCell/HeadCellContent.d.ts +10 -0
  83. package/dist/components/Table/subcomponents/HeadCell/__tests__/HeadCell.test.d.ts +1 -0
  84. package/dist/components/Table/subcomponents/Row.d.ts +5 -0
  85. package/dist/components/Table/subcomponents/SortIcon.d.ts +7 -0
  86. package/dist/components/Table/subcomponents/index.d.ts +10 -0
  87. package/dist/components/Tabs/Tab.d.ts +1 -1
  88. package/dist/components/Tabs/TabContext.d.ts +1 -0
  89. package/dist/components/Tabs/Tabs.d.ts +3 -1
  90. package/dist/components/Tabs/Tabs.stories.d.ts +3 -0
  91. package/dist/components/Timepicker/Timepicker.d.ts +10 -0
  92. package/dist/components/Timepicker/Timepicker.stories.d.ts +7 -0
  93. package/dist/components/Timepicker/__tests__/Timepicker.test.d.ts +1 -0
  94. package/dist/components/Timepicker/index.d.ts +2 -0
  95. package/dist/components/Timepicker/utils/convertDateToTimeString.d.ts +2 -0
  96. package/dist/components/Timepicker/utils/convertDateToTimeString.test.d.ts +1 -0
  97. package/dist/components/Timepicker/utils/index.d.ts +1 -0
  98. package/dist/components/WeekPicker/WeekPicker.d.ts +3 -0
  99. package/dist/components/WeekPicker/index.d.ts +1 -0
  100. package/dist/components/WeekPicker/subcomponents/CustomDatepicker.d.ts +17 -0
  101. package/dist/components/WeekPicker/subcomponents/DatepickerInput.d.ts +13 -0
  102. package/dist/components/WeekPicker/subcomponents/VisibleField.d.ts +15 -0
  103. package/dist/components/WeekPicker/subcomponents/index.d.ts +3 -0
  104. package/dist/components/index.d.ts +13 -0
  105. package/dist/hooks/index.d.ts +2 -0
  106. package/dist/hooks/useFocusTrap.d.ts +9 -0
  107. package/dist/index.d.ts +1 -0
  108. package/dist/index.js +6006 -4599
  109. package/dist/theme/defaultTheme.d.ts +7 -0
  110. package/dist/theme/useTheme.d.ts +14 -0
  111. package/dist/utils/__tests__/capitalise.test.d.ts +1 -0
  112. package/dist/utils/capitalise.d.ts +2 -0
  113. package/lib/components/Alert/Alert.tsx +7 -1
  114. package/lib/components/Alert/__tests__/__snapshots__/Alert.test.tsx.snap +4 -0
  115. package/lib/components/Badge/Badge.stories.tsx +19 -0
  116. package/lib/components/Badge/Badge.tsx +48 -0
  117. package/lib/components/Badge/index.ts +2 -0
  118. package/lib/components/Breadcrumbs/__tests__/__snapshots__/Breadcrumbs.test.tsx.snap +4 -4
  119. package/lib/components/Button/Button.tsx +5 -2
  120. package/lib/components/Calendar/Calendar.stories.tsx +209 -0
  121. package/lib/components/Calendar/Calendar.tsx +121 -0
  122. package/lib/components/Calendar/Calendar.types.ts +21 -0
  123. package/lib/components/Calendar/__tests__/Calendar.test.tsx +71 -0
  124. package/lib/components/Calendar/__tests__/__snapshots__/Calendar.test.tsx.snap +1218 -0
  125. package/lib/components/Calendar/index.ts +6 -0
  126. package/lib/components/{Datepicker → Calendar}/subcomponents/AcademicWeek.tsx +1 -1
  127. package/lib/components/{Datepicker → Calendar}/subcomponents/AcademicWeeks.tsx +9 -7
  128. package/lib/components/Calendar/subcomponents/ColumnHeading.tsx +40 -0
  129. package/lib/components/{Datepicker/subcomponents/MonthSelector/MonthSelector.tsx → Calendar/subcomponents/Controls.tsx} +17 -17
  130. package/lib/components/{Datepicker/subcomponents/Day → Calendar/subcomponents}/Day.stories.tsx +8 -8
  131. package/lib/components/{Datepicker/subcomponents/Day → Calendar/subcomponents}/Day.tsx +28 -16
  132. package/lib/components/{Datepicker → Calendar}/subcomponents/EventDot.tsx +3 -3
  133. package/lib/components/Calendar/subcomponents/Grid.tsx +116 -0
  134. package/lib/components/Calendar/subcomponents/index.ts +7 -0
  135. package/lib/components/{Datepicker → Calendar}/utils/getAcademicWeekNumbers/getAcademicWeekNumbers.test.ts +1 -1
  136. package/lib/components/{Datepicker → Calendar}/utils/getAcademicWeekNumbers/getAcademicWeekNumbers.ts +1 -1
  137. package/lib/components/{Datepicker → Calendar}/utils/getDatesForCalendarGrid/getDatesForCalendarGrid.test.ts +29 -65
  138. package/lib/components/{Datepicker → Calendar}/utils/getDatesForCalendarGrid/getDatesForCalendarGrid.ts +11 -43
  139. package/lib/components/Calendar/utils/index.ts +4 -0
  140. package/lib/components/Calendar/utils/normaliseMonth/normaliseMonth.test.ts +40 -0
  141. package/lib/components/Calendar/utils/normaliseMonth/normaliseMonth.ts +16 -0
  142. package/lib/components/Calendar/utils/parseDateFromString/parseDateFromString.test.ts +15 -0
  143. package/lib/components/Calendar/utils/parseDateFromString/parseDateFromString.ts +19 -0
  144. package/lib/components/CookieNotice/CookieNotice.tsx +114 -0
  145. package/lib/components/CookieNotice/index.ts +2 -0
  146. package/lib/components/Datepicker/Datepicker.stories.tsx +128 -64
  147. package/lib/components/Datepicker/Datepicker.tsx +34 -114
  148. package/lib/components/Datepicker/Datepicker.types.ts +38 -9
  149. package/lib/components/Datepicker/__tests__/Datepicker.test.tsx +53 -112
  150. package/lib/components/Datepicker/__tests__/__snapshots__/Datepicker.test.tsx.snap +92 -747
  151. package/lib/components/Datepicker/index.ts +1 -2
  152. package/lib/components/Datepicker/subcomponents/CustomDatepicker.tsx +209 -0
  153. package/lib/components/Datepicker/subcomponents/DatepickerInput.tsx +74 -0
  154. package/lib/components/Datepicker/subcomponents/NativeDatepicker.tsx +70 -0
  155. package/lib/components/Datepicker/subcomponents/Panel.tsx +32 -0
  156. package/lib/components/Datepicker/subcomponents/VisibleField.tsx +104 -0
  157. package/lib/components/Datepicker/subcomponents/index.ts +5 -7
  158. package/lib/components/Datepicker/utils/dateToLocaleISOString/dateToLocaleISOString.test.ts +32 -0
  159. package/lib/components/Datepicker/utils/dateToLocaleISOString/dateToLocaleISOString.ts +23 -0
  160. package/lib/components/Datepicker/utils/index.ts +2 -3
  161. package/lib/components/Datepicker/utils/parseInputValue/parseInputValue.test.ts +110 -0
  162. package/lib/components/Datepicker/utils/parseInputValue/parseInputValue.ts +57 -0
  163. package/lib/components/Dialog/BaseDialog.tsx +44 -4
  164. package/lib/components/Field/__tests__/Field.test.tsx +148 -148
  165. package/lib/components/FileInput/FileInput.stories.tsx +70 -0
  166. package/lib/components/FileInput/FileInput.tsx +68 -0
  167. package/lib/components/FileInput/__tests__/FileInput.test.tsx +99 -0
  168. package/lib/components/FileInput/__tests__/__snapshots__/FileInput.test.tsx.snap +91 -0
  169. package/lib/components/FileInput/index.ts +2 -0
  170. package/lib/components/Footer/Footer.tsx +3 -3
  171. package/lib/components/Footer/__tests__/__snapshots__/Footer.test.tsx.snap +31 -31
  172. package/lib/components/Header/Header.tsx +19 -2
  173. package/lib/components/Header/__tests__/__snapshots__/Header.test.tsx.snap +4 -4
  174. package/lib/components/Heading/Documentation.mdx +1 -1
  175. package/lib/components/Heading/Heading.tsx +1 -1
  176. package/lib/components/Heading/__tests__/Heading.test.tsx +7 -19
  177. package/lib/components/Heading/__tests__/__snapshots__/Heading.test.tsx.snap +7 -7
  178. package/lib/components/Label/Label.tsx +0 -2
  179. package/lib/components/Label/__tests__/__snapshots__/Label.test.tsx.snap +7 -7
  180. package/lib/components/Link/BaseLink.tsx +84 -0
  181. package/lib/components/Link/Link.tsx +72 -32
  182. package/lib/components/Link/__tests__/__snapshots__/link.test.tsx.snap +3 -3
  183. package/lib/components/Link/__tests__/link.test.tsx +6 -13
  184. package/lib/components/Link/index.ts +1 -1
  185. package/lib/components/Menu/Menu.context.tsx +3 -1
  186. package/lib/components/Menu/Menu.tsx +5 -2
  187. package/lib/components/Menu/MenuContent.tsx +9 -6
  188. package/lib/components/Menu/MenuItem.tsx +20 -3
  189. package/lib/components/Menu/MenuSection.tsx +4 -3
  190. package/lib/components/Pagination/PaginationControls.tsx +1 -3
  191. package/lib/components/Search/Search.stories.tsx +41 -0
  192. package/lib/components/Search/Search.tsx +167 -0
  193. package/lib/components/Search/__tests__/Search.test.tsx +94 -0
  194. package/lib/components/Search/__tests__/__snapshots__/Search.test.tsx.snap +179 -0
  195. package/lib/components/Search/index.ts +2 -0
  196. package/lib/components/Select/Select.stories.tsx +8 -35
  197. package/lib/components/Select/Select.tsx +2 -2
  198. package/lib/components/Select/Select.types.ts +20 -15
  199. package/lib/components/Select/__tests__/__snapshots__/Select.test.tsx.snap +3 -3
  200. package/lib/components/Select/subcomponents/CustomOption.tsx +22 -9
  201. package/lib/components/Select/subcomponents/CustomSelect.tsx +31 -20
  202. package/lib/components/Select/subcomponents/Panel.tsx +4 -5
  203. package/lib/components/Select/subcomponents/VisibleField.tsx +26 -22
  204. package/lib/components/StandaloneLink/StandaloneLink.stories.tsx +32 -0
  205. package/lib/components/StandaloneLink/StandaloneLink.tsx +183 -0
  206. package/lib/components/StandaloneLink/__tests__/StandaloneLink.test.tsx +57 -0
  207. package/lib/components/StandaloneLink/__tests__/__snapshots__/StandaloneLink.test.tsx.snap +19 -0
  208. package/lib/components/StandaloneLink/index.ts +2 -0
  209. package/lib/components/Table/Table.stories.tsx +337 -0
  210. package/lib/components/Table/Table.tsx +42 -67
  211. package/lib/components/Table/Table.types.ts +14 -0
  212. package/lib/components/Table/__tests__/Table.test.tsx +121 -0
  213. package/lib/components/Table/__tests__/__snapshots__/Table.test.tsx.snap +210 -0
  214. package/lib/components/Table/index.ts +8 -1
  215. package/lib/components/Table/subcomponents/Body.tsx +18 -0
  216. package/lib/components/Table/subcomponents/Cell/Cell.stories.tsx +151 -0
  217. package/lib/components/Table/subcomponents/Cell/Cell.tsx +72 -0
  218. package/lib/components/Table/subcomponents/Cell/CellContent.tsx +91 -0
  219. package/lib/components/Table/subcomponents/Cell/__tests__/Cell.test.tsx +115 -0
  220. package/lib/components/Table/subcomponents/Cell/__tests__/__snapshots__/Cell.test.tsx.snap +107 -0
  221. package/lib/components/Table/subcomponents/Head.tsx +34 -0
  222. package/lib/components/Table/subcomponents/HeadCell/HeadCell.stories.tsx +85 -0
  223. package/lib/components/Table/subcomponents/HeadCell/HeadCell.tsx +99 -0
  224. package/lib/components/Table/subcomponents/HeadCell/HeadCellContent.tsx +61 -0
  225. package/lib/components/Table/subcomponents/HeadCell/__tests__/HeadCell.test.tsx +137 -0
  226. package/lib/components/Table/subcomponents/HeadCell/__tests__/__snapshots__/HeadCell.test.tsx.snap +110 -0
  227. package/lib/components/Table/subcomponents/Row.tsx +49 -0
  228. package/lib/components/Table/subcomponents/SortIcon.tsx +63 -0
  229. package/lib/components/Table/subcomponents/index.ts +14 -0
  230. package/lib/components/Tabs/Tab.tsx +3 -3
  231. package/lib/components/Tabs/TabContext.tsx +1 -0
  232. package/lib/components/Tabs/Tabs.stories.tsx +9 -3
  233. package/lib/components/Tabs/Tabs.tsx +10 -32
  234. package/lib/components/Tabs/__tests__/Tabs.test.tsx +10 -4
  235. package/lib/components/Tabs/__tests__/__snapshots__/Tabs.test.tsx.snap +32 -32
  236. package/lib/components/Timepicker/Timepicker.stories.tsx +43 -0
  237. package/lib/components/Timepicker/Timepicker.tsx +96 -0
  238. package/lib/components/Timepicker/__tests__/Timepicker.test.tsx +55 -0
  239. package/lib/components/Timepicker/__tests__/__snapshots__/Timepicker.test.tsx.snap +19 -0
  240. package/lib/components/Timepicker/index.tsx +2 -0
  241. package/lib/components/Timepicker/utils/convertDateToTimeString.test.ts +54 -0
  242. package/lib/components/Timepicker/utils/convertDateToTimeString.ts +10 -0
  243. package/lib/components/Timepicker/utils/index.ts +1 -0
  244. package/lib/components/WeekPicker/WeekPicker.tsx +26 -0
  245. package/lib/components/WeekPicker/index.ts +1 -0
  246. package/lib/components/WeekPicker/subcomponents/CustomDatepicker.tsx +298 -0
  247. package/lib/components/WeekPicker/subcomponents/DatepickerInput.tsx +111 -0
  248. package/lib/components/WeekPicker/subcomponents/VisibleField.tsx +126 -0
  249. package/lib/components/WeekPicker/subcomponents/index.ts +3 -0
  250. package/lib/components/index.ts +20 -0
  251. package/lib/hooks/index.ts +2 -0
  252. package/lib/hooks/useFocusTrap.ts +123 -0
  253. package/lib/index.ts +1 -0
  254. package/lib/theme/defaultTheme.ts +7 -0
  255. package/lib/utils/__tests__/capitalise.test.ts +40 -0
  256. package/lib/utils/capitalise.ts +4 -0
  257. package/package.json +2 -2
  258. package/dist/components/Datepicker/subcomponents/AcademicWeeks.d.ts +0 -7
  259. package/dist/components/Datepicker/subcomponents/CalendarGrid/CalendarGrid.d.ts +0 -8
  260. package/dist/components/Datepicker/subcomponents/CalendarGrid/index.d.ts +0 -1
  261. package/dist/components/Datepicker/subcomponents/CalendarMenu/CalendarMenu.d.ts +0 -12
  262. package/dist/components/Datepicker/subcomponents/CalendarMenu/index.d.ts +0 -1
  263. package/dist/components/Datepicker/subcomponents/ColumnHeadings/ColumnHeadings.d.ts +0 -2
  264. package/dist/components/Datepicker/subcomponents/ColumnHeadings/index.d.ts +0 -1
  265. package/dist/components/Datepicker/subcomponents/DateField/DateField.d.ts +0 -7
  266. package/dist/components/Datepicker/subcomponents/DateField/index.d.ts +0 -1
  267. package/dist/components/Datepicker/subcomponents/Day/index.d.ts +0 -1
  268. package/dist/components/Datepicker/subcomponents/MonthSelector/MonthSelector.d.ts +0 -6
  269. package/dist/components/Datepicker/subcomponents/MonthSelector/index.d.ts +0 -1
  270. package/dist/components/Datepicker/subcomponents/Native/Native.d.ts +0 -9
  271. package/dist/components/Datepicker/subcomponents/Native/index.d.ts +0 -1
  272. package/dist/components/Datepicker/utils/parseDateForDateField/parseDateForDateField.d.ts +0 -20
  273. package/lib/components/Datepicker/subcomponents/CalendarGrid/CalendarGrid.tsx +0 -54
  274. package/lib/components/Datepicker/subcomponents/CalendarGrid/index.ts +0 -1
  275. package/lib/components/Datepicker/subcomponents/CalendarMenu/CalendarMenu.tsx +0 -90
  276. package/lib/components/Datepicker/subcomponents/CalendarMenu/index.ts +0 -1
  277. package/lib/components/Datepicker/subcomponents/ColumnHeadings/ColumnHeadings.tsx +0 -35
  278. package/lib/components/Datepicker/subcomponents/ColumnHeadings/index.ts +0 -1
  279. package/lib/components/Datepicker/subcomponents/DateField/DateField.tsx +0 -155
  280. package/lib/components/Datepicker/subcomponents/DateField/__tests__/DateField.test.tsx +0 -191
  281. package/lib/components/Datepicker/subcomponents/DateField/index.ts +0 -1
  282. package/lib/components/Datepicker/subcomponents/Day/index.ts +0 -1
  283. package/lib/components/Datepicker/subcomponents/MonthSelector/index.ts +0 -1
  284. package/lib/components/Datepicker/subcomponents/Native/Native.tsx +0 -59
  285. package/lib/components/Datepicker/subcomponents/Native/index.ts +0 -1
  286. package/lib/components/Datepicker/utils/parseDateForDateField/parseDateForDateField.test.ts +0 -41
  287. package/lib/components/Datepicker/utils/parseDateForDateField/parseDateForDateField.ts +0 -48
  288. package/lib/components/Field/__tests__/__snapshots__/Field.test.tsx.snap +0 -300
  289. /package/dist/components/{Datepicker/subcomponents/DateField/__tests__/DateField.test.d.ts → Calendar/__tests__/Calendar.test.d.ts} +0 -0
  290. /package/dist/components/{Datepicker → Calendar}/subcomponents/AcademicWeek.d.ts +0 -0
  291. /package/dist/components/{Datepicker/subcomponents/Day → Calendar/subcomponents}/Day.stories.d.ts +0 -0
  292. /package/dist/components/{Datepicker → Calendar}/utils/getAcademicWeekNumbers/getAcademicWeekNumbers.test.d.ts +0 -0
  293. /package/dist/components/{Datepicker → Calendar}/utils/getDatesForCalendarGrid/getDatesForCalendarGrid.d.ts +0 -0
  294. /package/dist/components/{Datepicker → Calendar}/utils/getDatesForCalendarGrid/getDatesForCalendarGrid.test.d.ts +0 -0
  295. /package/dist/components/{Datepicker/utils/parseDateForDateField/parseDateForDateField.test.d.ts → Calendar/utils/normaliseMonth/normaliseMonth.test.d.ts} +0 -0
@@ -1,130 +1,50 @@
1
- import { useState, useRef, memo, InputHTMLAttributes } from 'react';
2
- import { css, cx } from '@emotion/css';
3
- import { Native, DateField, CalendarMenu } from './subcomponents';
4
- import { useTheme } from '../../theme';
5
- import { CalendarEvent } from './Datepicker.types';
6
- import type { AcademicWeek } from './Datepicker.types';
7
-
8
- export const NAME = 'ucl-datepicker';
9
-
10
- export interface DatepickerProps extends InputHTMLAttributes<HTMLInputElement> {
11
- date: Date | null | undefined;
12
- minDate?: Date | null | undefined;
13
- maxDate?: Date | null | undefined;
14
- onDateChange: (date: Date | null | undefined) => void;
15
- native?: boolean;
16
- events?: CalendarEvent[];
17
- showAcademicWeeks?: boolean;
18
- academicWeeks?: AcademicWeek[]; // Array of academic week strings in YYYY-MM-DD format
19
- testId?: string;
20
- }
1
+ import { NativeDatepicker, CustomDatepicker } from './subcomponents';
2
+ import { dateToLocaleISOString } from './utils';
3
+ import type { DatepickerProps } from './Datepicker.types';
21
4
 
22
5
  const Datepicker = ({
23
- date,
6
+ value,
7
+ onValueChange,
24
8
  minDate,
25
9
  maxDate,
26
- onDateChange,
27
- native = false,
28
- events = [],
29
- showAcademicWeeks = false,
30
- academicWeeks = [],
31
- testId = NAME,
10
+ disabled,
32
11
  className,
12
+ native,
13
+ nativeRef,
14
+ nativeHTMLAttributes,
33
15
  ...props
34
16
  }: DatepickerProps) => {
35
- const [theme] = useTheme();
36
- const [isOpen, setIsOpen] = useState(false);
37
- const datepickerRef = useRef<HTMLDivElement>(null);
17
+ if (native) {
18
+ const nativeValue = dateToLocaleISOString(value);
38
19
 
39
- if (native)
40
20
  return (
41
- <Native
42
- date={date}
21
+ <NativeDatepicker
22
+ value={nativeValue || ''}
23
+ onChange={(event) => {
24
+ const dateString = event.target.value;
25
+ onValueChange?.(dateString ? new Date(dateString) : null, event);
26
+ }}
27
+ min={minDate || undefined}
28
+ max={maxDate || undefined}
29
+ disabled={disabled}
30
+ className={className}
31
+ ref={nativeRef}
32
+ {...nativeHTMLAttributes}
33
+ />
34
+ );
35
+ } else {
36
+ return (
37
+ <CustomDatepicker
38
+ value={value}
39
+ onValueChange={onValueChange}
43
40
  minDate={minDate}
44
41
  maxDate={maxDate}
45
- onDateChange={onDateChange}
46
- testId={testId}
42
+ className={className}
43
+ disabled={disabled}
47
44
  {...props}
48
45
  />
49
46
  );
50
-
51
- const blur = () => (document.activeElement as HTMLElement)?.blur();
52
-
53
- const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {
54
- // Keyboard mappings for interacting with the date `<CalendarMenu>`
55
- // Escape & Enter both close the `<CalendarMenu>`
56
- if (event.key === 'Escape' || event.key === 'Enter') blur();
57
- // Move the currently selected date in the `<CalendarGrid />`
58
- else if (event.key === 'ArrowLeft' && date)
59
- onDateChange(
60
- new Date(date.getFullYear(), date.getMonth(), date.getDate() - 1)
61
- );
62
- else if (event.key === 'ArrowRight' && date)
63
- onDateChange(
64
- new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1)
65
- );
66
- else if (event.key === 'ArrowUp' && date)
67
- onDateChange(
68
- new Date(date.getFullYear(), date.getMonth(), date.getDate() - 7)
69
- );
70
- else if (event.key === 'ArrowDown' && date)
71
- onDateChange(
72
- new Date(date.getFullYear(), date.getMonth(), date.getDate() + 7)
73
- );
74
- };
75
-
76
- const handleOnFocus = () => setIsOpen(true);
77
-
78
- const handleDatePick = () => blur();
79
-
80
- const handleBlurCapture = (event: React.FocusEvent) => {
81
- // Only close if focus moves outside `<Datepicker>` and its subcomponents
82
- if (!datepickerRef.current?.contains(event.relatedTarget as Node))
83
- setIsOpen(false);
84
- };
85
-
86
- const baseStyle = css`
87
- position: relative;
88
- width: max-content;
89
- user-select: none;
90
-
91
- &:focus-visible,
92
- &:focus-within {
93
- box-shadow: ${theme.boxShadow.focus};
94
- outline: none;
95
- }
96
- `;
97
-
98
- const style = cx(baseStyle, className);
99
-
100
- return (
101
- <div
102
- className={style}
103
- ref={datepickerRef}
104
- onFocus={handleOnFocus}
105
- onBlurCapture={handleBlurCapture}
106
- onKeyDown={handleKeyDown}
107
- tabIndex={0}
108
- data-testid={testId}
109
- >
110
- <DateField
111
- date={date}
112
- onChange={onDateChange}
113
- testId={testId}
114
- />
115
- {isOpen && (
116
- <CalendarMenu
117
- date={date}
118
- setDate={onDateChange}
119
- onDatePick={handleDatePick}
120
- events={events}
121
- showAcademicWeeks={showAcademicWeeks}
122
- academicWeeks={academicWeeks}
123
- testId={testId}
124
- />
125
- )}
126
- </div>
127
- );
47
+ }
128
48
  };
129
49
 
130
- export default memo(Datepicker);
50
+ export default Datepicker;
@@ -1,9 +1,38 @@
1
- // Used to display EventDots inside `<Day>` component
2
- export type CalendarEvent = {
3
- date: string; // Date string in YYYY-MM-DD format
4
- };
5
-
6
- export type AcademicWeek = {
7
- start: string; // Date string in YYYY-MM-DD format
8
- number: number;
9
- };
1
+ import type { InputHTMLAttributes, HTMLAttributes, RefObject } from 'react';
2
+ import type { CalendarEvent, AcademicWeek } from '../Calendar';
3
+
4
+ export type DatepickerValue = Date | null;
5
+
6
+ interface BaseDatepickerProps {
7
+ value?: DatepickerValue;
8
+ onValueChange?: (
9
+ value: DatepickerValue,
10
+ event?: React.SyntheticEvent
11
+ ) => void;
12
+ minDate?: string | null; // ISO date string: YYYY-MM-DD
13
+ maxDate?: string | null; // ISO date string: YYYY-MM-DD
14
+ events?: CalendarEvent[];
15
+ showAcademicWeeks?: boolean;
16
+ academicWeeks?: AcademicWeek[];
17
+ testId?: string;
18
+ disabled?: boolean;
19
+ ref?: RefObject<HTMLDivElement>;
20
+ inputRef?: RefObject<HTMLInputElement>;
21
+ }
22
+
23
+ // Valid HTML attributes for <input type="date">
24
+ type NativeDatepickerAttributeProps = Omit<
25
+ InputHTMLAttributes<HTMLInputElement>,
26
+ // Remove shared 'top-level' & handled props
27
+ 'value' | 'onChange' | 'min' | 'max' | 'className' | 'disabled'
28
+ >;
29
+
30
+ // `className?: string` is received automatically from `HTMLAttributes<HTMLDivElement>`
31
+ export interface DatepickerProps
32
+ extends BaseDatepickerProps,
33
+ HTMLAttributes<HTMLDivElement> {
34
+ native?: boolean;
35
+ // Attached as a nested object
36
+ nativeHTMLAttributes?: NativeDatepickerAttributeProps;
37
+ nativeRef?: RefObject<HTMLInputElement>;
38
+ }
@@ -1,147 +1,88 @@
1
- import {
2
- describe,
3
- test,
4
- expect,
5
- vi,
6
- afterEach,
7
- beforeAll,
8
- afterAll,
9
- } from 'vitest';
10
- import {
11
- render,
12
- screen,
13
- fireEvent,
14
- cleanup,
15
- } from '@testing-library/react';
1
+ import { describe, test, expect, vi } from 'vitest';
2
+ import { render, screen, fireEvent } from '@testing-library/react';
16
3
  import { ThemeContextProvider } from '../../../theme';
17
- import Datepicker from '../Datepicker';
4
+ import Datepicker from '..';
5
+
6
+ const defaultTestId = 'ucl-uikit-datepicker';
18
7
 
19
8
  const customRender = (ui: React.ReactElement) => {
20
9
  return render(ui, {
21
10
  wrapper: ({ children }) => (
22
- <ThemeContextProvider>
23
- {children}
24
- </ThemeContextProvider>
11
+ <ThemeContextProvider>{children}</ThemeContextProvider>
25
12
  ),
26
13
  });
27
14
  };
28
15
 
29
16
  describe('Datepicker', () => {
30
- beforeAll(() => {
31
- // Snapshot tests will fail because the Calendar Grid includes styling for "today's date".
32
- // Therefore, we need to use Vitest to mock the current date.
33
- vi.useFakeTimers();
34
- vi.setSystemTime(new Date('2025-03-10')); // Arbitrary fixed date -- Alex's birthday :)
35
- });
36
-
37
- afterAll(() => {
38
- vi.useRealTimers();
39
- });
40
-
41
- afterEach(() => {
42
- cleanup();
43
- vi.resetAllMocks();
44
- });
17
+ // Snapshot tests
45
18
 
46
19
  test('Snapshot: no date provided', () => {
47
- const renderResult = customRender(
48
- <Datepicker
49
- date={null}
50
- onDateChange={vi.fn()}
51
- />
52
- );
53
- expect(
54
- renderResult.container.firstChild
55
- ).toMatchSnapshot();
20
+ const renderResult = customRender(<Datepicker />);
21
+ expect(renderResult.container.firstChild).toMatchSnapshot();
56
22
  });
57
23
 
58
- test('Snapshot: date provided', () => {
24
+ test('Snapshot: with date provided', () => {
59
25
  const renderResult = customRender(
60
- <Datepicker
61
- date={new Date('2025-02-04')}
62
- onDateChange={vi.fn()}
63
- />
26
+ <Datepicker value={new Date('2025-03-10')} />
64
27
  );
65
- expect(
66
- renderResult.container.firstChild
67
- ).toMatchSnapshot();
28
+ expect(renderResult.container.firstChild).toMatchSnapshot();
68
29
  });
69
30
 
70
- test('Snapshot: with :focus & date provided', () => {
71
- const testId = 'abc';
72
- const renderResult = customRender(
73
- <Datepicker
74
- date={new Date('2025-02-04')}
75
- onDateChange={vi.fn()}
76
- testId={testId}
77
- />
78
- );
79
- const dateField = screen.getByTestId(
80
- testId + '-date-field'
81
- );
82
- fireEvent.focus(dateField);
83
- expect(
84
- renderResult.container.firstChild
85
- ).toMatchSnapshot();
31
+ // Unit tests
32
+
33
+ test('Can be found via default test ID', () => {
34
+ customRender(<Datepicker />);
35
+ const datepicker = screen.getByTestId(defaultTestId);
36
+ expect(datepicker).toBeInTheDocument();
86
37
  });
87
38
 
88
- test('Renders without crashing', () => {
89
- const testId = 'abc';
90
- customRender(
91
- <Datepicker
92
- date={null}
93
- onDateChange={vi.fn()}
94
- testId={testId}
95
- />
96
- );
97
- const datepicker = screen.getByTestId(testId);
39
+ test('Can be found via custom test id', () => {
40
+ const customTestId = '123';
41
+ customRender(<Datepicker testId={customTestId} />);
42
+ const datepicker = screen.getByTestId(customTestId);
98
43
  expect(datepicker).toBeInTheDocument();
99
44
  });
100
45
 
101
- test('Calendar Menu appears on :focus', () => {
102
- const testId = 'abc';
46
+ test('Input value reflects the date', () => {
47
+ customRender(<Datepicker value={new Date('2025-03-10')} />);
48
+ const input = screen.getByTestId('ucl-uikit-datepicker__input');
49
+ expect(input).toHaveValue('10/03/2025');
50
+ });
51
+
52
+ test('Calendar appears on input focus', async () => {
53
+ customRender(<Datepicker />);
54
+ const input = screen.getByTestId('ucl-uikit-datepicker__input');
55
+
56
+ // Calendar should not be visible initially
57
+ expect(screen.queryByTestId('ucl-uikit-calendar')).not.toBeInTheDocument();
58
+
59
+ fireEvent.focus(input);
60
+
61
+ // Calendar should now be visible
62
+ expect(screen.getByTestId('ucl-uikit-calendar')).toBeInTheDocument();
63
+ });
64
+
65
+ test('value after minDate is set to null automatically', () => {
66
+ const onValueChange = vi.fn();
103
67
  customRender(
104
68
  <Datepicker
105
- date={null}
106
- onDateChange={vi.fn()}
107
- testId={testId}
69
+ value={new Date('2025-01-10')} // Before minDate
70
+ minDate='2025-02-01'
71
+ onValueChange={onValueChange}
108
72
  />
109
73
  );
110
- let calendarMenu = screen.queryByTestId(
111
- testId + '-calendar-menu'
112
- );
113
- expect(calendarMenu).not.toBeInTheDocument();
114
- const dateField = screen.getByTestId(testId);
115
- fireEvent.focus(dateField);
116
- calendarMenu = screen.getByTestId(
117
- testId + '-calendar-menu'
118
- );
119
- expect(calendarMenu).toBeInTheDocument();
74
+ expect(onValueChange).toHaveBeenCalledWith(null);
120
75
  });
121
76
 
122
- test('Calendar Menu disappears on :blur', () => {
123
- const testId = 'abc';
77
+ test('value after maxDate is set to null automatically', () => {
78
+ const onValueChange = vi.fn();
124
79
  customRender(
125
80
  <Datepicker
126
- date={null}
127
- onDateChange={vi.fn()}
128
- testId={testId}
81
+ value={new Date('2025-03-10')} // After maxDate
82
+ maxDate='2025-01-31'
83
+ onValueChange={onValueChange}
129
84
  />
130
85
  );
131
- const dateField = screen.getByTestId(
132
- testId + '-date-field'
133
- );
134
- fireEvent.focus(dateField);
135
- let calendarMenu = screen.getByTestId(
136
- testId + '-calendar-menu'
137
- ) as HTMLElement | null;
138
- expect(calendarMenu).toBeInTheDocument();
139
- fireEvent.blur(dateField);
140
- calendarMenu = screen.queryByTestId(
141
- testId + '-calendar-menu'
142
- ) as HTMLElement | null;
143
- expect(calendarMenu).not.toBeInTheDocument();
86
+ expect(onValueChange).toHaveBeenCalledWith(null);
144
87
  });
145
-
146
- // Additonal tests can be added here
147
88
  });