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
@@ -0,0 +1,123 @@
1
+ // Generated with Claude Sonnet 4
2
+
3
+ import { useEffect, useCallback, useRef } from 'react';
4
+
5
+ // Selector for focusable elements
6
+ const FOCUSABLE_ELEMENTS = [
7
+ 'a[href]',
8
+ 'button:not([disabled])',
9
+ 'textarea:not([disabled])',
10
+ 'input:not([disabled])',
11
+ 'select:not([disabled])',
12
+ '[tabindex]:not([tabindex="-1"])',
13
+ '[contenteditable="true"]',
14
+ 'audio[controls]',
15
+ 'video[controls]',
16
+ 'details > summary:first-of-type',
17
+ ].join(', ');
18
+
19
+ interface UseFocusTrapOptions {
20
+ isActive: boolean;
21
+ containerRef: React.RefObject<HTMLElement | null>;
22
+ initialFocusRef?: React.RefObject<HTMLElement>;
23
+ finalFocusRef?: React.RefObject<HTMLElement>;
24
+ restoreFocus?: boolean;
25
+ }
26
+
27
+ export const useFocusTrap = ({
28
+ isActive,
29
+ containerRef,
30
+ initialFocusRef,
31
+ finalFocusRef,
32
+ restoreFocus = true,
33
+ }: UseFocusTrapOptions) => {
34
+ const previousActiveElement = useRef<HTMLElement | null>(null);
35
+
36
+ // Get all focusable elements within the container
37
+ const getFocusableElements = useCallback((): HTMLElement[] => {
38
+ if (!containerRef.current) return [];
39
+
40
+ const elements = containerRef.current.querySelectorAll(FOCUSABLE_ELEMENTS);
41
+ return Array.from(elements) as HTMLElement[];
42
+ }, [containerRef]);
43
+
44
+ // Handle tab key navigation
45
+ const handleKeyDown = useCallback(
46
+ (event: KeyboardEvent) => {
47
+ if (!isActive || event.key !== 'Tab') return;
48
+
49
+ const focusableElements = getFocusableElements();
50
+ if (focusableElements.length === 0) {
51
+ event.preventDefault();
52
+ return;
53
+ }
54
+
55
+ const firstElement = focusableElements[0];
56
+ const lastElement = focusableElements[focusableElements.length - 1];
57
+ const currentFocus = document.activeElement as HTMLElement;
58
+
59
+ if (event.shiftKey) {
60
+ // Shift + Tab (moving backwards)
61
+ if (
62
+ currentFocus === firstElement ||
63
+ !containerRef.current?.contains(currentFocus)
64
+ ) {
65
+ event.preventDefault();
66
+ lastElement.focus();
67
+ }
68
+ } else {
69
+ // Tab (moving forwards)
70
+ if (
71
+ currentFocus === lastElement ||
72
+ !containerRef.current?.contains(currentFocus)
73
+ ) {
74
+ event.preventDefault();
75
+ firstElement.focus();
76
+ }
77
+ }
78
+ },
79
+ [isActive, getFocusableElements, containerRef]
80
+ );
81
+
82
+ // Set initial focus when trap becomes active
83
+ useEffect(() => {
84
+ if (!isActive) return;
85
+
86
+ // Store the previously focused element
87
+ previousActiveElement.current = document.activeElement as HTMLElement;
88
+
89
+ // Focus the specified initial element or the first focusable element
90
+ const focusElement = initialFocusRef?.current || getFocusableElements()[0];
91
+ if (focusElement) {
92
+ // Use setTimeout to ensure the element is rendered and focusable
93
+ setTimeout(() => focusElement.focus(), 0);
94
+ }
95
+
96
+ // Add event listener for keyboard navigation
97
+ document.addEventListener('keydown', handleKeyDown);
98
+
99
+ return () => {
100
+ document.removeEventListener('keydown', handleKeyDown);
101
+ };
102
+ }, [isActive, initialFocusRef, getFocusableElements, handleKeyDown]);
103
+
104
+ // Restore focus when trap becomes inactive
105
+ useEffect(() => {
106
+ if (isActive) return; // Only run when becoming inactive
107
+
108
+ if (restoreFocus && previousActiveElement.current) {
109
+ // Use setTimeout to ensure the dialog is fully closed before restoring focus
110
+ const restoreTimeout = setTimeout(() => {
111
+ const elementToFocus =
112
+ finalFocusRef?.current || previousActiveElement.current;
113
+ if (elementToFocus && document.contains(elementToFocus)) {
114
+ elementToFocus.focus();
115
+ }
116
+ // Clear the stored element after restoring focus
117
+ previousActiveElement.current = null;
118
+ }, 100); // Longer delay for native dialog close
119
+
120
+ return () => clearTimeout(restoreTimeout);
121
+ }
122
+ }, [isActive, finalFocusRef, restoreFocus]);
123
+ };
package/lib/index.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { cx, css } from '@emotion/css';
2
2
  export * from './components';
3
3
  export * from './theme';
4
+ export * from './hooks';
@@ -47,6 +47,7 @@ const pink20 = '#DEB8C3'; // UCL vibrant pink
47
47
  const black100 = '#000000';
48
48
  const black90 = '#1A1A1A';
49
49
  const black80 = '#333333';
50
+ const black70 = '#4D4D4D';
50
51
  const black60 = '#666666';
51
52
  const black40 = '#999999';
52
53
  const black20 = '#CCCCCC';
@@ -102,6 +103,7 @@ const baseColour = {
102
103
  black100,
103
104
  black90,
104
105
  black80,
106
+ black70,
105
107
  black60,
106
108
  black40,
107
109
  black20,
@@ -189,7 +191,9 @@ const systemColours = {
189
191
 
190
192
  const linkColours = {
191
193
  default: baseColour.blue70,
194
+ secondaryDefault: baseColour.black90,
192
195
  hover: baseColour.blue100,
196
+ secondaryHover: baseColour.black70,
193
197
  visited: baseColour.purple40,
194
198
  disabled: baseColour.black20,
195
199
  };
@@ -203,6 +207,7 @@ const neutralColours = {
203
207
  black: blackAndWhite.black,
204
208
  grey90: baseColour.black90,
205
209
  grey80: baseColour.black80,
210
+ grey70: baseColour.black70,
206
211
  grey60: baseColour.black60,
207
212
  grey40: baseColour.black40,
208
213
  grey20: baseColour.black20,
@@ -253,6 +258,7 @@ const baseSizes = {
253
258
  };
254
259
 
255
260
  const margin = {
261
+ m0: 0,
256
262
  m2: baseSizes.s2,
257
263
  m4: baseSizes.s4,
258
264
  m6: baseSizes.s6,
@@ -271,6 +277,7 @@ const margin = {
271
277
  };
272
278
 
273
279
  const padding = {
280
+ p0: 0,
274
281
  p2: baseSizes.s2,
275
282
  p4: baseSizes.s4,
276
283
  p6: baseSizes.s6,
@@ -0,0 +1,40 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import capitalise from '../capitalise';
3
+
4
+ describe('capitalise', () => {
5
+ it('should capitalize the first letter of a lowercase word', () => {
6
+ expect(capitalise('hello')).toBe('Hello');
7
+ });
8
+
9
+ it('should capitalize the first letter of a sentence', () => {
10
+ expect(capitalise('hello world')).toBe('Hello world');
11
+ });
12
+
13
+ it('should handle already capitalized text', () => {
14
+ expect(capitalise('Hello')).toBe('Hello');
15
+ });
16
+
17
+ it('should handle single character strings', () => {
18
+ expect(capitalise('a')).toBe('A');
19
+ });
20
+
21
+ it('should handle strings that start with uppercase', () => {
22
+ expect(capitalise('HELLO')).toBe('HELLO');
23
+ });
24
+
25
+ it('should handle empty strings', () => {
26
+ expect(capitalise('')).toBe('');
27
+ });
28
+
29
+ it('should handle strings with numbers at the start', () => {
30
+ expect(capitalise('123abc')).toBe('123abc');
31
+ });
32
+
33
+ it('should handle strings with special characters at the start', () => {
34
+ expect(capitalise('!hello')).toBe('!hello');
35
+ });
36
+
37
+ it('should preserve the rest of the string as-is', () => {
38
+ expect(capitalise('hELLO')).toBe('HELLO');
39
+ });
40
+ });
@@ -0,0 +1,4 @@
1
+ const capitalise = (text: string) =>
2
+ text.charAt(0).toUpperCase() + text.slice(1);
3
+
4
+ export default capitalise;
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "uikit-react-public",
3
3
  "private": false,
4
- "license": "MIT",
5
- "version": "0.11.20",
4
+ "license": "UNLICENSED",
5
+ "version": "0.14.21",
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
8
8
  "types": "dist/index.d.ts",
@@ -1,7 +0,0 @@
1
- import { AcademicWeek as AcademicWeekType } from '../Datepicker.types';
2
- interface AcademicWeeksProps {
3
- date: Date;
4
- academicWeeks: AcademicWeekType[];
5
- }
6
- declare const AcademicWeeks: ({ date, academicWeeks }: AcademicWeeksProps) => import("react/jsx-runtime").JSX.Element;
7
- export default AcademicWeeks;
@@ -1,8 +0,0 @@
1
- import { CalendarEvent } from '../../Datepicker.types';
2
- interface CalendarGridProps {
3
- date: Date | null | undefined;
4
- onDatePick: (date: Date) => void;
5
- events: CalendarEvent[];
6
- }
7
- declare const CalendarGrid: ({ date, onDatePick, events }: CalendarGridProps) => import("react/jsx-runtime").JSX.Element;
8
- export default CalendarGrid;
@@ -1 +0,0 @@
1
- export { default } from './CalendarGrid';
@@ -1,12 +0,0 @@
1
- import { CalendarEvent, AcademicWeek } from '../../Datepicker.types';
2
- interface CalendarMenuProps {
3
- date: Date | null | undefined;
4
- setDate: (date: Date) => void;
5
- onDatePick: () => void;
6
- events: CalendarEvent[];
7
- showAcademicWeeks?: boolean;
8
- academicWeeks: AcademicWeek[];
9
- testId?: string;
10
- }
11
- declare const CalendarMenu: ({ date, setDate, onDatePick, events, showAcademicWeeks, academicWeeks, testId, }: CalendarMenuProps) => import("react/jsx-runtime").JSX.Element;
12
- export default CalendarMenu;
@@ -1 +0,0 @@
1
- export { default } from './CalendarMenu';
@@ -1,2 +0,0 @@
1
- declare const ColumnHeadings: () => import("react/jsx-runtime").JSX.Element;
2
- export default ColumnHeadings;
@@ -1 +0,0 @@
1
- export { default } from './ColumnHeadings';
@@ -1,7 +0,0 @@
1
- interface DateFieldProps {
2
- date: Date | null | undefined;
3
- onChange: (date: Date | null | undefined) => void;
4
- testId?: string;
5
- }
6
- declare const DateField: ({ date, onChange, testId, }: DateFieldProps) => import("react/jsx-runtime").JSX.Element;
7
- export default DateField;
@@ -1 +0,0 @@
1
- export { default } from './DateField';
@@ -1 +0,0 @@
1
- export { default } from './Day';
@@ -1,6 +0,0 @@
1
- interface MonthSelectorProps {
2
- date: Date | null | undefined;
3
- changeMonth: (change: number) => void;
4
- }
5
- declare const MonthSelector: ({ date, changeMonth, }: MonthSelectorProps) => import("react/jsx-runtime").JSX.Element;
6
- export default MonthSelector;
@@ -1 +0,0 @@
1
- export { default } from './MonthSelector';
@@ -1,9 +0,0 @@
1
- interface NativeProps {
2
- date?: Date | null | undefined;
3
- minDate?: Date | null | undefined;
4
- maxDate?: Date | null | undefined;
5
- onDateChange?: (date: Date | null | undefined) => void;
6
- testId?: string;
7
- }
8
- declare const Native: ({ date, minDate, maxDate, onDateChange, testId, ...props }: NativeProps) => import("react/jsx-runtime").JSX.Element;
9
- export default Native;
@@ -1 +0,0 @@
1
- export { default } from './Native';
@@ -1,20 +0,0 @@
1
- /**
2
- * Parses a date string and returns a `Date` object.
3
- *
4
- * Can handle date strings entered by the user as "day/month/year", "day month year", or "day-month-year".
5
- * If the date is not in the expected format or contains invalid numbers, it returns `null`.
6
- *
7
- * Used solely by `<DateField>` component.
8
- *
9
- * - A one-digit or two-digit year is assumed to be in the 21st century (e.g., '21' becomes '2021').
10
- *
11
- * @param {string} dateString - The date string to be parsed.
12
- *
13
- * @future Any additional validation logic for dates entered by the user should be added here.
14
- * For example, supporting formats like "day / month / year" (separated with a space and a slash)
15
- * or "daymonthyear" (without spaces or separators).
16
- *
17
- * @returns {void}
18
- */
19
- declare const parseDate: (dateString: string) => Date | null;
20
- export default parseDate;
@@ -1,54 +0,0 @@
1
- import { css } from '@emotion/css';
2
- import { ColumnHeadings, Day } from '../';
3
- import useTheme from '../../../../theme/useTheme';
4
- import { getDatesForCalendarGrid } from '../../utils';
5
- import { CalendarEvent } from '../../Datepicker.types';
6
-
7
- interface CalendarGridProps {
8
- date: Date | null | undefined;
9
- onDatePick: (date: Date) => void;
10
- events: CalendarEvent[];
11
- }
12
-
13
- const CalendarGrid = ({ date, onDatePick, events }: CalendarGridProps) => {
14
- const [theme] = useTheme();
15
-
16
- const dates = date
17
- ? getDatesForCalendarGrid(date)
18
- : getDatesForCalendarGrid(new Date());
19
-
20
- const gridStyle = css`
21
- display: grid;
22
- grid-template-columns: repeat(7, 1fr);
23
- gap: 0;
24
- text-align: center;
25
- font-family: ${theme.font.family.primary};
26
- font-weight: 400;
27
- user-select: none;
28
- `;
29
-
30
- return (
31
- <div className={gridStyle}>
32
- <ColumnHeadings />
33
- {dates.map((mappedDate) => (
34
- <Day
35
- key={mappedDate.toISOString()}
36
- date={mappedDate}
37
- isSelected={date?.toDateString() === mappedDate.toDateString()}
38
- isToday={mappedDate.toDateString() === new Date().toDateString()}
39
- isInCurrentMonth={
40
- date
41
- ? mappedDate.getMonth() === date?.getMonth()
42
- : mappedDate.getMonth() === new Date().getMonth()
43
- }
44
- onPick={onDatePick}
45
- events={events.filter(
46
- (event) => event.date === mappedDate.toISOString().split('T')[0]
47
- )}
48
- />
49
- ))}
50
- </div>
51
- );
52
- };
53
-
54
- export default CalendarGrid;
@@ -1 +0,0 @@
1
- export { default } from './CalendarGrid';
@@ -1,90 +0,0 @@
1
- import { css } from '@emotion/css';
2
- import MonthSelector from '../MonthSelector';
3
- import CalendarGrid from '../CalendarGrid';
4
- import AcademicWeeks from '../AcademicWeeks';
5
- import useTheme from '../../../../theme/useTheme';
6
- import { CalendarEvent, AcademicWeek } from '../../Datepicker.types';
7
-
8
- interface CalendarMenuProps {
9
- date: Date | null | undefined;
10
- setDate: (date: Date) => void;
11
- onDatePick: () => void;
12
- events: CalendarEvent[];
13
- showAcademicWeeks?: boolean;
14
- academicWeeks: AcademicWeek[];
15
- testId?: string;
16
- }
17
-
18
- const CalendarMenu = ({
19
- date,
20
- setDate,
21
- onDatePick,
22
- events,
23
- showAcademicWeeks,
24
- academicWeeks,
25
- testId = 'ucl',
26
- }: CalendarMenuProps) => {
27
- const [theme] = useTheme();
28
-
29
- const onMonthChange = (change: number) => {
30
- const newDate = date ? new Date(date) : new Date();
31
- newDate.setMonth(newDate.getMonth() + change);
32
- setDate(newDate);
33
- };
34
-
35
- const width = showAcademicWeeks ? '370' : '312';
36
-
37
- const style = css`
38
- display: flex;
39
- flex-direction: column;
40
- align-items: center;
41
- gap: 16px;
42
- width: ${width}px;
43
- z-index: 10;
44
- position: absolute;
45
- top: 60px;
46
- box-sizing: border-box;
47
- border: 1px solid ${theme.color.neutral.grey20};
48
- padding: 16px;
49
- background-color: ${theme.color.neutral.white};
50
- `;
51
-
52
- const innerContainerStyle = css`
53
- display: flex;
54
- flex-direction: row;
55
- gap: 8px;
56
- width: 100%;
57
- `;
58
-
59
- const handlePick = (pickedDate: Date) => {
60
- setDate(pickedDate);
61
- onDatePick();
62
- };
63
-
64
- return (
65
- <div
66
- className={style}
67
- data-testid={testId + '-calendar-menu'}
68
- >
69
- <MonthSelector
70
- date={date}
71
- changeMonth={onMonthChange}
72
- />
73
- <div className={innerContainerStyle}>
74
- {showAcademicWeeks && (
75
- <AcademicWeeks
76
- date={date || new Date()} // TODO: more comprehsensive handling of null/undefined dates
77
- academicWeeks={academicWeeks}
78
- />
79
- )}
80
- <CalendarGrid
81
- date={date}
82
- onDatePick={handlePick}
83
- events={events}
84
- />
85
- </div>
86
- </div>
87
- );
88
- };
89
-
90
- export default CalendarMenu;
@@ -1 +0,0 @@
1
- export { default } from './CalendarMenu';
@@ -1,35 +0,0 @@
1
- import { css } from '@emotion/css';
2
- import { useTheme } from '../../../../theme';
3
-
4
- const ColumnHeadings = () => {
5
- const [theme] = useTheme();
6
-
7
- const days = ['M', 'T', 'W', 'T', 'F', 'S', 'S'];
8
-
9
- const headingStyle = (isWeekend: boolean) => css`
10
- display: flex;
11
- align-items: center;
12
- justify-content: center;
13
- width: 40px;
14
- height: 32px;
15
- color: ${isWeekend
16
- ? theme.color.system.orange100
17
- : theme.color.neutral.grey60};
18
- font-weight: 700;
19
- `;
20
-
21
- return (
22
- <>
23
- {days.map((day, index) => (
24
- <div
25
- key={index}
26
- className={headingStyle(index >= 5)}
27
- >
28
- {day}
29
- </div>
30
- ))}
31
- </>
32
- );
33
- };
34
-
35
- export default ColumnHeadings;
@@ -1 +0,0 @@
1
- export { default } from './ColumnHeadings';