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,63 @@
1
+ import { useTheme } from '../../../theme';
2
+ import type { SortOrder } from '../Table.types';
3
+
4
+ interface SortingIconProps extends React.SVGAttributes<SVGElement> {
5
+ sortOrder: SortOrder;
6
+ size?: number;
7
+ }
8
+
9
+ const SortingIcon = ({ sortOrder, size = 16 }: SortingIconProps) => {
10
+ const [theme] = useTheme();
11
+
12
+ const leftArrowColour =
13
+ sortOrder === 'asc'
14
+ ? theme.color.neutral.black
15
+ : theme.color.neutral.grey20;
16
+ const rightArrowColour =
17
+ sortOrder === 'desc'
18
+ ? theme.color.neutral.black
19
+ : theme.color.neutral.grey20;
20
+
21
+ return (
22
+ <svg
23
+ width={size}
24
+ height={size}
25
+ viewBox='0 0 48 48'
26
+ fill='none'
27
+ xmlns='http://www.w3.org/2000/svg'
28
+ >
29
+ <g>
30
+ <path
31
+ d='M8 28L15 35L22 28'
32
+ stroke={leftArrowColour}
33
+ strokeWidth='4'
34
+ strokeLinecap='round'
35
+ strokeLinejoin='round'
36
+ />
37
+ <path
38
+ d='M15 35V10'
39
+ stroke={leftArrowColour}
40
+ strokeWidth='4'
41
+ strokeLinecap='round'
42
+ strokeLinejoin='round'
43
+ />
44
+ <path
45
+ d='M43 19L36 12L29 19'
46
+ stroke={rightArrowColour}
47
+ strokeWidth='4'
48
+ strokeLinecap='round'
49
+ strokeLinejoin='round'
50
+ />
51
+ <path
52
+ d='M36 12V37'
53
+ stroke={rightArrowColour}
54
+ strokeWidth='4'
55
+ strokeLinecap='round'
56
+ strokeLinejoin='round'
57
+ />
58
+ </g>
59
+ </svg>
60
+ );
61
+ };
62
+
63
+ export default SortingIcon;
@@ -0,0 +1,14 @@
1
+ export { default as Head } from './Head';
2
+ export type { TableHeadProps } from './Head';
3
+
4
+ export { default as HeadCell } from './HeadCell/HeadCell';
5
+ export type { TableHeadCellProps } from './HeadCell/HeadCell';
6
+
7
+ export { default as Body } from './Body';
8
+ export type { TableBodyProps } from './Body';
9
+
10
+ export { default as Row } from './Row';
11
+ export type { TableRowProps } from './Row';
12
+
13
+ export { default as Cell } from './Cell/Cell';
14
+ export type { TableCellProps } from './Cell/Cell';
@@ -3,7 +3,7 @@ import { css, cx } from '@emotion/css';
3
3
  import { useTheme } from '../../theme';
4
4
  import { useTabContext } from './TabContext';
5
5
 
6
- export const NAME = 'ucl-uikit-tab';
6
+ export const NAME = 'ucl-uikit-tabs__tab';
7
7
 
8
8
  export interface TabProps extends ButtonHTMLAttributes<HTMLButtonElement> {
9
9
  testId?: string;
@@ -23,7 +23,7 @@ const Tab = ({
23
23
  ...props
24
24
  }: TabProps) => {
25
25
  const [theme] = useTheme();
26
- const { activeTab, setActiveTab, fullWidth } = useTabContext();
26
+ const { activeTab, setActiveTab, fullWidth, color } = useTabContext();
27
27
  const isActive = activeTab === value;
28
28
 
29
29
  const baseStyle = css`
@@ -53,7 +53,7 @@ const Tab = ({
53
53
  `;
54
54
 
55
55
  const activeStyle = css`
56
- border-bottom: 4px solid ${theme.color.interaction.blue70};
56
+ border-bottom: 4px solid ${color || theme.color.interaction.blue70};
57
57
  color: ${theme.color.text.primary};
58
58
  margin-bottom: -1px;
59
59
  font-weight: 700;
@@ -5,6 +5,7 @@ interface TabContextType {
5
5
  setActiveTab: (value: string) => void;
6
6
  onChange?: (value: string) => void;
7
7
  fullWidth?: boolean;
8
+ color?: string;
8
9
  }
9
10
 
10
11
  const TabContext = createContext<TabContextType | undefined>(undefined);
@@ -7,6 +7,9 @@ const meta = {
7
7
  parameters: {
8
8
  layout: 'padded',
9
9
  },
10
+ args: {
11
+ activeTab: '',
12
+ },
10
13
  } satisfies Meta<typeof Tabs>;
11
14
 
12
15
  export default meta;
@@ -15,7 +18,7 @@ type Story = StoryObj<typeof meta>;
15
18
  export const FullWidth: Story = {
16
19
  name: 'Full width',
17
20
  render: () => (
18
- <Tabs>
21
+ <Tabs activeTab='1'>
19
22
  <Tabs.Tab
20
23
  label='Tab Item 1'
21
24
  value='1'
@@ -39,7 +42,10 @@ export const FullWidth: Story = {
39
42
  export const AutoWidth: Story = {
40
43
  name: 'Auto width',
41
44
  render: () => (
42
- <Tabs fullWidth={false}>
45
+ <Tabs
46
+ activeTab='1'
47
+ fullWidth={false}
48
+ >
43
49
  <Tabs.Tab
44
50
  label='Tab Item 1'
45
51
  value='1'
@@ -63,7 +69,7 @@ export const AutoWidth: Story = {
63
69
  export const Counter: Story = {
64
70
  name: 'Counter',
65
71
  render: () => (
66
- <Tabs>
72
+ <Tabs activeTab='1'>
67
73
  <Tabs.Tab
68
74
  counter={12}
69
75
  label='Tab Item 1'
@@ -1,24 +1,19 @@
1
- import {
2
- memo,
3
- HTMLAttributes,
4
- useState,
5
- Children,
6
- isValidElement,
7
- useEffect,
8
- } from 'react';
1
+ import { memo, HTMLAttributes } from 'react';
9
2
  import { css, cx } from '@emotion/css';
10
3
  import { useTheme } from '../../theme';
11
4
  import TabContext from './TabContext';
12
- import Tab, { TabProps } from './Tab';
5
+ import Tab from './Tab';
13
6
  import marginsStyle, { MarginProps } from '../common/marginsStyle';
14
7
 
15
8
  export const NAME = 'ucl-uikit-tabs';
16
9
 
17
10
  export interface TabsBaseProps
18
11
  extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
19
- testId?: string;
12
+ activeTab: string;
20
13
  onChange?: (value: string) => void;
21
14
  fullWidth?: boolean;
15
+ testId?: string;
16
+ color?: string;
22
17
  ref?: React.RefObject<HTMLDivElement>;
23
18
  }
24
19
 
@@ -29,37 +24,19 @@ type TabsComponent = React.FC<TabsProps> & {
29
24
  };
30
25
 
31
26
  const TabsBase = ({
27
+ activeTab,
28
+ onChange,
29
+ fullWidth = true,
30
+ color,
32
31
  testId = NAME,
33
32
  className,
34
33
  children,
35
- onChange,
36
- fullWidth = true,
37
34
  ref,
38
35
  ...props
39
36
  }: TabsProps) => {
40
37
  const [theme] = useTheme();
41
- const [activeTab, setActiveTab] = useState<string>('');
42
-
43
- useEffect(() => {
44
- if (!activeTab) {
45
- const firstValidTab = Children.toArray(children).find((child) => {
46
- return (
47
- isValidElement<TabProps>(child) &&
48
- child.type === Tab &&
49
- typeof child.props.value === 'string'
50
- );
51
- });
52
-
53
- if (firstValidTab && isValidElement<TabProps>(firstValidTab)) {
54
- const firstValue = firstValidTab.props.value;
55
- setActiveTab(firstValue);
56
- onChange?.(firstValue);
57
- }
58
- }
59
- }, [activeTab, children, onChange]);
60
38
 
61
39
  const handleTabChange = (value: string) => {
62
- setActiveTab(value);
63
40
  if (onChange) onChange(value);
64
41
  };
65
42
 
@@ -77,6 +54,7 @@ const TabsBase = ({
77
54
  setActiveTab: handleTabChange,
78
55
  onChange,
79
56
  fullWidth,
57
+ color,
80
58
  }}
81
59
  >
82
60
  <div
@@ -9,7 +9,7 @@ describe('Tabs', () => {
9
9
  test('snapshot: Minimal props', () => {
10
10
  const renderResult = render(
11
11
  <ThemeContextProvider>
12
- <Tabs>
12
+ <Tabs activeTab='1'>
13
13
  <Tabs.Tab
14
14
  label='Tab Item 1'
15
15
  value='1'
@@ -35,7 +35,10 @@ describe('Tabs', () => {
35
35
  test('snapshot: Custom test id', () => {
36
36
  const renderResult = render(
37
37
  <ThemeContextProvider>
38
- <Tabs data-testid='custom-test-id'>
38
+ <Tabs
39
+ activeTab='1'
40
+ data-testid='custom-test-id'
41
+ >
39
42
  <Tabs.Tab
40
43
  label='Tab Item 1'
41
44
  value='1'
@@ -61,7 +64,10 @@ describe('Tabs', () => {
61
64
  test('snapshot: Auto width', () => {
62
65
  const renderResult = render(
63
66
  <ThemeContextProvider>
64
- <Tabs fullWidth={false}>
67
+ <Tabs
68
+ activeTab='1'
69
+ fullWidth={false}
70
+ >
65
71
  <Tabs.Tab
66
72
  label='Tab Item 1'
67
73
  value='1'
@@ -87,7 +93,7 @@ describe('Tabs', () => {
87
93
  test('snapshot: Counter', () => {
88
94
  const renderResult = render(
89
95
  <ThemeContextProvider>
90
- <Tabs>
96
+ <Tabs activeTab='1'>
91
97
  <Tabs.Tab
92
98
  counter={12}
93
99
  label='Tab Item 1'
@@ -8,8 +8,8 @@ exports[`Tabs > snapshot: Auto width 1`] = `
8
8
  >
9
9
  <button
10
10
  aria-selected="true"
11
- class="ucl-uikit-tab css-u8nay3"
12
- data-testid="ucl-uikit-tab"
11
+ class="ucl-uikit-tabs__tab css-u8nay3"
12
+ data-testid="ucl-uikit-tabs__tab"
13
13
  role="tab"
14
14
  >
15
15
  Tab Item 1
@@ -17,8 +17,8 @@ exports[`Tabs > snapshot: Auto width 1`] = `
17
17
  </button>
18
18
  <button
19
19
  aria-selected="false"
20
- class="ucl-uikit-tab css-eoe29w"
21
- data-testid="ucl-uikit-tab"
20
+ class="ucl-uikit-tabs__tab css-eoe29w"
21
+ data-testid="ucl-uikit-tabs__tab"
22
22
  role="tab"
23
23
  >
24
24
  Tab Item 2
@@ -26,8 +26,8 @@ exports[`Tabs > snapshot: Auto width 1`] = `
26
26
  </button>
27
27
  <button
28
28
  aria-selected="false"
29
- class="ucl-uikit-tab css-eoe29w"
30
- data-testid="ucl-uikit-tab"
29
+ class="ucl-uikit-tabs__tab css-eoe29w"
30
+ data-testid="ucl-uikit-tabs__tab"
31
31
  role="tab"
32
32
  >
33
33
  Tab Item 3
@@ -35,8 +35,8 @@ exports[`Tabs > snapshot: Auto width 1`] = `
35
35
  </button>
36
36
  <button
37
37
  aria-selected="false"
38
- class="ucl-uikit-tab css-eoe29w"
39
- data-testid="ucl-uikit-tab"
38
+ class="ucl-uikit-tabs__tab css-eoe29w"
39
+ data-testid="ucl-uikit-tabs__tab"
40
40
  role="tab"
41
41
  >
42
42
  A longer tab item showing auto width
@@ -53,8 +53,8 @@ exports[`Tabs > snapshot: Counter 1`] = `
53
53
  >
54
54
  <button
55
55
  aria-selected="true"
56
- class="ucl-uikit-tab css-1gzur5d"
57
- data-testid="ucl-uikit-tab"
56
+ class="ucl-uikit-tabs__tab css-1gzur5d"
57
+ data-testid="ucl-uikit-tabs__tab"
58
58
  role="tab"
59
59
  >
60
60
  Tab Item 1
@@ -63,8 +63,8 @@ exports[`Tabs > snapshot: Counter 1`] = `
63
63
  </button>
64
64
  <button
65
65
  aria-selected="false"
66
- class="ucl-uikit-tab css-b3abfp"
67
- data-testid="ucl-uikit-tab"
66
+ class="ucl-uikit-tabs__tab css-b3abfp"
67
+ data-testid="ucl-uikit-tabs__tab"
68
68
  role="tab"
69
69
  >
70
70
  Tab Item 2
@@ -73,8 +73,8 @@ exports[`Tabs > snapshot: Counter 1`] = `
73
73
  </button>
74
74
  <button
75
75
  aria-selected="false"
76
- class="ucl-uikit-tab css-b3abfp"
77
- data-testid="ucl-uikit-tab"
76
+ class="ucl-uikit-tabs__tab css-b3abfp"
77
+ data-testid="ucl-uikit-tabs__tab"
78
78
  role="tab"
79
79
  >
80
80
  Tab Item 3
@@ -83,8 +83,8 @@ exports[`Tabs > snapshot: Counter 1`] = `
83
83
  </button>
84
84
  <button
85
85
  aria-selected="false"
86
- class="ucl-uikit-tab css-b3abfp"
87
- data-testid="ucl-uikit-tab"
86
+ class="ucl-uikit-tabs__tab css-b3abfp"
87
+ data-testid="ucl-uikit-tabs__tab"
88
88
  role="tab"
89
89
  >
90
90
  Tab Item 4
@@ -102,8 +102,8 @@ exports[`Tabs > snapshot: Custom test id 1`] = `
102
102
  >
103
103
  <button
104
104
  aria-selected="true"
105
- class="ucl-uikit-tab css-1gzur5d"
106
- data-testid="ucl-uikit-tab"
105
+ class="ucl-uikit-tabs__tab css-1gzur5d"
106
+ data-testid="ucl-uikit-tabs__tab"
107
107
  role="tab"
108
108
  >
109
109
  Tab Item 1
@@ -111,8 +111,8 @@ exports[`Tabs > snapshot: Custom test id 1`] = `
111
111
  </button>
112
112
  <button
113
113
  aria-selected="false"
114
- class="ucl-uikit-tab css-b3abfp"
115
- data-testid="ucl-uikit-tab"
114
+ class="ucl-uikit-tabs__tab css-b3abfp"
115
+ data-testid="ucl-uikit-tabs__tab"
116
116
  role="tab"
117
117
  >
118
118
  Tab Item 2
@@ -120,8 +120,8 @@ exports[`Tabs > snapshot: Custom test id 1`] = `
120
120
  </button>
121
121
  <button
122
122
  aria-selected="false"
123
- class="ucl-uikit-tab css-b3abfp"
124
- data-testid="ucl-uikit-tab"
123
+ class="ucl-uikit-tabs__tab css-b3abfp"
124
+ data-testid="ucl-uikit-tabs__tab"
125
125
  role="tab"
126
126
  >
127
127
  Tab Item 3
@@ -129,8 +129,8 @@ exports[`Tabs > snapshot: Custom test id 1`] = `
129
129
  </button>
130
130
  <button
131
131
  aria-selected="false"
132
- class="ucl-uikit-tab css-b3abfp"
133
- data-testid="ucl-uikit-tab"
132
+ class="ucl-uikit-tabs__tab css-b3abfp"
133
+ data-testid="ucl-uikit-tabs__tab"
134
134
  role="tab"
135
135
  >
136
136
  Tab Item 4
@@ -147,8 +147,8 @@ exports[`Tabs > snapshot: Minimal props 1`] = `
147
147
  >
148
148
  <button
149
149
  aria-selected="true"
150
- class="ucl-uikit-tab css-1gzur5d"
151
- data-testid="ucl-uikit-tab"
150
+ class="ucl-uikit-tabs__tab css-1gzur5d"
151
+ data-testid="ucl-uikit-tabs__tab"
152
152
  role="tab"
153
153
  >
154
154
  Tab Item 1
@@ -156,8 +156,8 @@ exports[`Tabs > snapshot: Minimal props 1`] = `
156
156
  </button>
157
157
  <button
158
158
  aria-selected="false"
159
- class="ucl-uikit-tab css-b3abfp"
160
- data-testid="ucl-uikit-tab"
159
+ class="ucl-uikit-tabs__tab css-b3abfp"
160
+ data-testid="ucl-uikit-tabs__tab"
161
161
  role="tab"
162
162
  >
163
163
  Tab Item 2
@@ -165,8 +165,8 @@ exports[`Tabs > snapshot: Minimal props 1`] = `
165
165
  </button>
166
166
  <button
167
167
  aria-selected="false"
168
- class="ucl-uikit-tab css-b3abfp"
169
- data-testid="ucl-uikit-tab"
168
+ class="ucl-uikit-tabs__tab css-b3abfp"
169
+ data-testid="ucl-uikit-tabs__tab"
170
170
  role="tab"
171
171
  >
172
172
  Tab Item 3
@@ -174,8 +174,8 @@ exports[`Tabs > snapshot: Minimal props 1`] = `
174
174
  </button>
175
175
  <button
176
176
  aria-selected="false"
177
- class="ucl-uikit-tab css-b3abfp"
178
- data-testid="ucl-uikit-tab"
177
+ class="ucl-uikit-tabs__tab css-b3abfp"
178
+ data-testid="ucl-uikit-tabs__tab"
179
179
  role="tab"
180
180
  >
181
181
  Tab Item 4
@@ -0,0 +1,43 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { useState } from 'react';
3
+ import Timepicker from './Timepicker';
4
+
5
+ const meta: Meta<typeof Timepicker> = {
6
+ title: 'Components/Work in progress/TimePicker',
7
+ component: Timepicker,
8
+ decorators: [(Story) => <Story />],
9
+ };
10
+
11
+ export default meta;
12
+
13
+ type Story = StoryObj<typeof Timepicker>;
14
+
15
+ export const WithInitialTime: Story = {
16
+ args: {
17
+ value: new Date('1970-01-01T12:30:00'),
18
+ },
19
+ };
20
+
21
+ export const Controlled: Story = {
22
+ render: () => {
23
+ const [time, setTime] = useState<Date | null>(
24
+ new Date('1970-01-01T12:30:00')
25
+ );
26
+
27
+ const handleChange = (
28
+ value: Date | null,
29
+ event: React.ChangeEvent<HTMLInputElement>
30
+ ) => {
31
+ setTime(value);
32
+ console.log('Selected time as Date object:', value, event);
33
+ };
34
+
35
+ return (
36
+ <Timepicker
37
+ value={time}
38
+ onValueChange={handleChange}
39
+ testId='controlled-timepicker'
40
+ />
41
+ );
42
+ },
43
+ };
@@ -0,0 +1,96 @@
1
+ import type { InputHTMLAttributes } from 'react';
2
+ import { css, cx } from '@emotion/css';
3
+ import { useTheme } from '../../theme';
4
+ import { convertDatetoTimeString } from './utils';
5
+
6
+ export const NAME = 'ucl-uikit-timepicker';
7
+
8
+ export type TimepickerValue = Date | null;
9
+
10
+ export interface TimepickerProps
11
+ extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value'> {
12
+ testId?: string;
13
+ value?: TimepickerValue;
14
+ onValueChange?: (
15
+ value: TimepickerValue,
16
+ event: React.ChangeEvent<HTMLInputElement>
17
+ ) => void;
18
+ }
19
+
20
+ const Timepicker = ({
21
+ testId = NAME,
22
+ value,
23
+ className,
24
+ onValueChange,
25
+ ...props
26
+ }: TimepickerProps) => {
27
+ const [theme] = useTheme();
28
+
29
+ const baseStyle = css`
30
+ color: ${theme.color.text.primary};
31
+ border-radius: ${theme.radius.r4};
32
+ font-size: ${theme.font.size.f24};
33
+ border-color: ${theme.color.text.primary};
34
+ font-family: ${theme.font.family.primary};
35
+ padding: ${theme.padding.p4};
36
+ `;
37
+
38
+ const style = cx(NAME, baseStyle, className);
39
+
40
+ const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
41
+ const inputValue = e.target.value;
42
+
43
+ // Ensure the value is not nullish and contains a colon
44
+ if (!inputValue || !inputValue.includes(':')) {
45
+ console.error('Invalid time format:', inputValue);
46
+ return;
47
+ }
48
+
49
+ const parts = inputValue.split(':');
50
+
51
+ // Ensure the value splits into exactly two parts (hours and minutes)
52
+ if (parts.length !== 2) {
53
+ console.error('Invalid time format:', inputValue);
54
+ return;
55
+ }
56
+
57
+ const [hoursStr, minutesStr] = parts;
58
+
59
+ // Convert hours and minutes to numbers
60
+ const hours = Number(hoursStr);
61
+ const minutes = Number(minutesStr);
62
+
63
+ // Validate that hours and minutes are within valid ranges
64
+ if (
65
+ Number.isNaN(hours) ||
66
+ Number.isNaN(minutes) ||
67
+ hours < 0 ||
68
+ hours > 23 ||
69
+ minutes < 0 ||
70
+ minutes > 59
71
+ ) {
72
+ console.error('Invalid time values:', { hours, minutes });
73
+ return;
74
+ }
75
+ // Utilises previous date (state) if available and value is not null
76
+ const date = value ? new Date(value) : new Date();
77
+ date.setHours(hours, minutes, 0, 0);
78
+
79
+ if (onValueChange) {
80
+ onValueChange(date, e);
81
+ }
82
+ };
83
+
84
+ return (
85
+ <input
86
+ value={convertDatetoTimeString(value ?? null)}
87
+ onChange={handleChange}
88
+ className={style}
89
+ data-testid={testId}
90
+ type='time'
91
+ {...props}
92
+ />
93
+ );
94
+ };
95
+
96
+ export default Timepicker;
@@ -0,0 +1,55 @@
1
+ import { describe, expect, test } from 'vitest';
2
+ import { render, screen } from '@testing-library/react';
3
+ import Timepicker from '../Timepicker';
4
+ import { ThemeContextProvider } from '../../../theme/useTheme';
5
+
6
+ describe('Timepicker', () => {
7
+ // Snapshot tests
8
+
9
+ test('snapshot', () => {
10
+ const renderResult = render(
11
+ <ThemeContextProvider>
12
+ <Timepicker />
13
+ </ThemeContextProvider>
14
+ );
15
+ expect(renderResult.container.firstChild).toMatchSnapshot();
16
+ });
17
+
18
+ test('snapshot: testID prop', () => {
19
+ const renderResult = render(
20
+ <ThemeContextProvider>
21
+ <Timepicker testId='testId' />
22
+ </ThemeContextProvider>
23
+ );
24
+ expect(renderResult.container.firstChild).toMatchSnapshot();
25
+ });
26
+
27
+ test('test ID: default', () => {
28
+ render(
29
+ <ThemeContextProvider>
30
+ <Timepicker />
31
+ </ThemeContextProvider>
32
+ );
33
+ const timePicker = screen.getByTestId('ucl-uikit-timepicker');
34
+ expect(timePicker).toBeDefined();
35
+ });
36
+
37
+ test('test ID: custom', () => {
38
+ render(
39
+ <ThemeContextProvider>
40
+ <Timepicker testId='custom-test-id' />
41
+ </ThemeContextProvider>
42
+ );
43
+ const timePicker = screen.getByTestId('custom-test-id');
44
+ expect(timePicker).toBeDefined();
45
+ });
46
+ // Test rendering with props
47
+ test('renders with initial time', () => {
48
+ const { getByDisplayValue } = render(
49
+ <ThemeContextProvider>
50
+ <Timepicker value={new Date('1970-01-01T12:30:00')} />
51
+ </ThemeContextProvider>
52
+ );
53
+ expect(getByDisplayValue('12:30')).toBeInTheDocument();
54
+ });
55
+ });
@@ -0,0 +1,19 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`Timepicker > snapshot 1`] = `
4
+ <input
5
+ class="ucl-uikit-timepicker css-ihuem"
6
+ data-testid="ucl-uikit-timepicker"
7
+ type="time"
8
+ value=""
9
+ />
10
+ `;
11
+
12
+ exports[`Timepicker > snapshot: testID prop 1`] = `
13
+ <input
14
+ class="ucl-uikit-timepicker css-ihuem"
15
+ data-testid="testId"
16
+ type="time"
17
+ value=""
18
+ />
19
+ `;
@@ -0,0 +1,2 @@
1
+ export { default } from './Timepicker';
2
+ export type { TimepickerProps } from './Timepicker';