uikit-react-public 0.14.21 → 0.21.8

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 (392) hide show
  1. package/README.md +2 -2
  2. package/dist/components/Accordion/Accordion.Heading.d.ts +5 -4
  3. package/dist/components/Accordion/Accordion.Panel.d.ts +2 -2
  4. package/dist/components/Accordion/Accordion.d.ts +1 -1
  5. package/dist/components/Accordion/Accordion.stories.d.ts +57 -0
  6. package/dist/components/Accordion/index.d.ts +2 -0
  7. package/dist/components/AppHeader/AppHeader.d.ts +1 -1
  8. package/dist/components/AppHeader/AppHeaderBottom.d.ts +1 -1
  9. package/dist/components/AppHeader/AppHeaderNav.d.ts +1 -1
  10. package/dist/components/AppHeader/AppHeaderTop.d.ts +1 -1
  11. package/dist/components/Avatar/Avatar.stories.d.ts +107 -1
  12. package/dist/components/Breadcrumbs/Breadcrumb.d.ts +3 -4
  13. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +1 -1
  14. package/dist/components/Breadcrumbs/Breadcrumbs.stories.d.ts +1 -1
  15. package/dist/components/Button/Button.d.ts +8 -3
  16. package/dist/components/Button/Button.stories.d.ts +17 -7
  17. package/dist/components/Button/style/buttonAccentStyle.d.ts +4 -0
  18. package/dist/components/Button/style/buttonPrimaryDestructiveStyle.d.ts +4 -0
  19. package/dist/components/Button/style/buttonPrimaryStyle.d.ts +4 -0
  20. package/dist/components/Button/style/buttonPrimarySubtleStyle.d.ts +4 -0
  21. package/dist/components/Button/style/buttonPrimaryWarningStyle.d.ts +4 -0
  22. package/dist/components/Button/style/buttonSecondaryDestructiveStyle.d.ts +4 -0
  23. package/dist/components/Button/style/buttonSecondaryStyle.d.ts +4 -0
  24. package/dist/components/Button/style/buttonSecondarySubtleStyle.d.ts +4 -0
  25. package/dist/components/Button/style/buttonTertiaryDestructiveStyle.d.ts +4 -0
  26. package/dist/components/Button/style/buttonTertiaryNoPaddingStyle.d.ts +4 -0
  27. package/dist/components/Button/style/buttonTertiaryStyle.d.ts +4 -0
  28. package/dist/components/Calendar/index.d.ts +1 -1
  29. package/dist/components/Checkbox/Checkbox.d.ts +1 -0
  30. package/dist/components/Datepicker/Datepicker.d.ts +1 -1
  31. package/dist/components/Datepicker/Datepicker.stories.d.ts +4 -3
  32. package/dist/components/Datepicker/Datepicker.types.d.ts +4 -5
  33. package/dist/components/Datepicker/subcomponents/CustomDatepicker.d.ts +4 -1
  34. package/dist/components/Datepicker/subcomponents/DatepickerInput.d.ts +15 -2
  35. package/dist/components/Datepicker/subcomponents/Panel.d.ts +1 -1
  36. package/dist/components/Datepicker/subcomponents/VisibleField.d.ts +6 -1
  37. package/dist/components/Datepicker/subcomponents/index.d.ts +0 -1
  38. package/dist/components/Datepicker/utils/index.d.ts +0 -1
  39. package/dist/components/Dialog/BaseDialog.d.ts +2 -1
  40. package/dist/components/Dialog/Dialog.d.ts +2 -0
  41. package/dist/components/FooterNew/BackToTop.d.ts +8 -0
  42. package/dist/components/FooterNew/Footer.d.ts +23 -0
  43. package/dist/components/FooterNew/FooterColumn.d.ts +8 -0
  44. package/dist/components/FooterNew/FooterLinks.d.ts +7 -0
  45. package/dist/components/FooterNew/FooterNavLink.d.ts +8 -0
  46. package/dist/components/FooterNew/LegalAndCopyright.d.ts +14 -0
  47. package/dist/components/FooterNew/LogoAddressAndSocial.d.ts +10 -0
  48. package/dist/components/FooterNew/SocialLink.d.ts +8 -0
  49. package/dist/components/FooterNew/index.d.ts +2 -0
  50. package/dist/components/Header/Header.d.ts +4 -1
  51. package/dist/components/Header/Header.stories.d.ts +40 -0
  52. package/dist/components/HeaderNew/Header.d.ts +18 -0
  53. package/dist/components/HeaderNew/HeaderBorder.d.ts +7 -0
  54. package/dist/components/HeaderNew/HeaderLogo.d.ts +9 -0
  55. package/dist/components/HeaderNew/HeaderMenuContainer.d.ts +7 -0
  56. package/dist/components/HeaderNew/HeaderTitle.d.ts +9 -0
  57. package/dist/components/HeaderNew/__tests__/Header.test.d.ts +1 -0
  58. package/dist/components/HeaderNew/constants.d.ts +3 -0
  59. package/dist/components/HeaderNew/index.d.ts +3 -0
  60. package/dist/components/HeadingNew/Heading.d.ts +13 -0
  61. package/dist/components/HeadingNew/index.d.ts +2 -0
  62. package/dist/components/Icon/svgImports.d.ts +7 -881
  63. package/dist/components/Link/BaseLink.d.ts +14 -5
  64. package/dist/components/Link/Link.d.ts +8 -3
  65. package/dist/components/Link/Link.stories.d.ts +3 -1
  66. package/dist/components/Main/Main.d.ts +21 -0
  67. package/dist/components/Main/Main.stories.d.ts +15 -0
  68. package/dist/components/Main/__tests__/Main.test.d.ts +1 -0
  69. package/dist/components/Main/index.d.ts +2 -0
  70. package/dist/components/MenuNew/Menu.context.d.ts +14 -0
  71. package/dist/components/MenuNew/Menu.d.ts +20 -0
  72. package/dist/components/MenuNew/MenuContent.d.ts +9 -0
  73. package/dist/components/MenuNew/MenuItem.d.ts +10 -0
  74. package/dist/components/MenuNew/MenuSection.d.ts +7 -0
  75. package/dist/components/MenuNew/index.d.ts +6 -0
  76. package/dist/components/MenuNew/trigger/ButtonMenuTrigger.d.ts +8 -0
  77. package/dist/components/MenuNew/trigger/IconMenuTrigger.d.ts +8 -0
  78. package/dist/components/NativeDatepicker/NativeDatepicker.d.ts +3 -0
  79. package/dist/components/NativeDatepicker/NativeDatepicker.stories.d.ts +36 -0
  80. package/dist/components/NativeDatepicker/NativeDatepicker.types.d.ts +10 -0
  81. package/dist/components/NativeDatepicker/index.d.ts +2 -0
  82. package/dist/components/{Datepicker → NativeDatepicker}/utils/dateToLocaleISOString/dateToLocaleISOString.d.ts +1 -1
  83. package/dist/components/NativeDatepicker/utils/dateToLocaleISOString/dateToLocaleISOString.test.d.ts +1 -0
  84. package/dist/components/NativeDatepicker/utils/index.d.ts +1 -0
  85. package/dist/components/Overlay/Overlay.stories.d.ts +12 -12
  86. package/dist/components/ParagraphNew/Paragraph.d.ts +13 -0
  87. package/dist/components/ParagraphNew/index.d.ts +4 -0
  88. package/dist/components/Select/Select.d.ts +2 -1
  89. package/dist/components/Select/Select.stories.d.ts +167 -3
  90. package/dist/components/Select/Select.types.d.ts +75 -19
  91. package/dist/components/Select/subcomponents/CustomOption.d.ts +1 -1
  92. package/dist/components/Select/subcomponents/CustomSelect.d.ts +3 -2
  93. package/dist/components/Select/subcomponents/FilterInput.d.ts +16 -0
  94. package/dist/components/Select/subcomponents/NativeSelect.d.ts +5 -1
  95. package/dist/components/Select/subcomponents/VisibleField.d.ts +6 -1
  96. package/dist/components/Select/subcomponents/index.d.ts +1 -0
  97. package/dist/components/Spinner/Spinner.d.ts +2 -0
  98. package/dist/components/StandaloneLink/StandaloneLink.d.ts +8 -5
  99. package/dist/components/StandaloneLink/StandaloneLink.stories.d.ts +3 -1
  100. package/dist/components/Table/Table.d.ts +3 -3
  101. package/dist/components/Table/Table.stories.d.ts +3 -3
  102. package/dist/components/Table/Table.types.d.ts +1 -0
  103. package/dist/components/Table/subcomponents/Cell/Cell.d.ts +5 -1
  104. package/dist/components/Table/subcomponents/Cell/Cell.stories.d.ts +15 -13
  105. package/dist/components/Table/subcomponents/Cell/CellContent.d.ts +5 -1
  106. package/dist/components/Table/subcomponents/HeadCell/HeadCell.d.ts +2 -1
  107. package/dist/components/Table/subcomponents/HeadCell/HeadCell.stories.d.ts +14 -13
  108. package/dist/components/Table/subcomponents/HeadCell/HeadCellContent.d.ts +2 -1
  109. package/dist/components/Table/subcomponents/__tests__/Row.test.d.ts +1 -0
  110. package/dist/components/UclLogoNew/UclLogo.d.ts +8 -0
  111. package/dist/components/UclLogoNew/index.d.ts +2 -0
  112. package/dist/components/WeekPicker/WeekPicker.d.ts +2 -2
  113. package/dist/components/WeekPicker/WeekPicker.stories.d.ts +41 -0
  114. package/dist/components/WeekPicker/WeekPicker.types.d.ts +16 -0
  115. package/dist/components/WeekPicker/index.d.ts +1 -0
  116. package/dist/components/WeekPicker/subcomponents/CustomDatepicker.d.ts +1 -1
  117. package/dist/components/index.d.ts +20 -0
  118. package/dist/hooks/useFocusTrap.d.ts +2 -1
  119. package/dist/index.d.ts +1 -0
  120. package/dist/index.js +22204 -16719
  121. package/dist/theme/__tests__/fonts.test.d.ts +1 -0
  122. package/dist/theme/common/themeCommon.d.ts +904 -0
  123. package/dist/theme/fonts.d.ts +18 -0
  124. package/dist/theme/index.d.ts +6 -3
  125. package/dist/theme/light/lightColour.d.ts +126 -0
  126. package/dist/theme/light/lightTheme.d.ts +3 -0
  127. package/dist/theme/original/color.d.ts +166 -0
  128. package/dist/theme/original/defaultTheme.d.ts +1340 -0
  129. package/dist/theme/original/originalColourNewStructure.d.ts +126 -0
  130. package/dist/theme/useTheme.d.ts +2174 -0
  131. package/dist/utils/__tests__/announce.test.d.ts +1 -0
  132. package/dist/utils/addAlphaToHex.d.ts +5 -0
  133. package/dist/utils/announce.d.ts +6 -0
  134. package/dist/utils/index.d.ts +1 -0
  135. package/dist/utils/scrollToTop.d.ts +2 -0
  136. package/lib/components/Accordion/Accordion.Heading.tsx +65 -34
  137. package/lib/components/Accordion/Accordion.Panel.tsx +11 -7
  138. package/lib/components/Accordion/Accordion.stories.tsx +139 -0
  139. package/lib/components/Accordion/Accordion.tsx +39 -31
  140. package/lib/components/Accordion/__tests__/__snapshots__/Accordion.test.tsx.snap +15 -13
  141. package/lib/components/Accordion/index.ts +2 -0
  142. package/lib/components/Alert/Alert.stories.tsx +1 -1
  143. package/lib/components/Alert/Alert.tsx +12 -12
  144. package/lib/components/Alert/__tests__/__snapshots__/Alert.test.tsx.snap +13 -39
  145. package/lib/components/AppHeader/AppHeader.tsx +6 -11
  146. package/lib/components/AppHeader/AppHeaderBottom.tsx +2 -3
  147. package/lib/components/AppHeader/AppHeaderNav.tsx +2 -3
  148. package/lib/components/AppHeader/AppHeaderTop.tsx +1 -1
  149. package/lib/components/AppHeader/__tests__/__snapshots__/AppHeader.test.tsx.snap +2 -2
  150. package/lib/components/AppMenu/__tests__/__snapshots__/AppMenu.test.tsx.snap +6 -19
  151. package/lib/components/Avatar/Avatar.mdx +117 -0
  152. package/lib/components/Avatar/Avatar.stories.tsx +110 -2
  153. package/lib/components/Badge/Badge.stories.tsx +1 -1
  154. package/lib/components/Blanket/Blanket.stories.tsx +1 -1
  155. package/lib/components/Breadcrumbs/Breadcrumb.tsx +26 -12
  156. package/lib/components/Breadcrumbs/Breadcrumbs.tsx +1 -1
  157. package/lib/components/Breadcrumbs/__tests__/Breadcrumbs.test.tsx +9 -27
  158. package/lib/components/Breadcrumbs/__tests__/__snapshots__/Breadcrumbs.test.tsx.snap +24 -20
  159. package/lib/components/Button/Button.mdx +32 -279
  160. package/lib/components/Button/Button.stories.tsx +44 -51
  161. package/lib/components/Button/Button.tsx +166 -25
  162. package/lib/components/Button/__tests__/Button.test.tsx +49 -15
  163. package/lib/components/Button/__tests__/__snapshots__/Button.test.tsx.snap +80 -73
  164. package/lib/components/Button/style/buttonAccentStyle.ts +53 -0
  165. package/lib/components/Button/style/buttonPrimaryDestructiveStyle.ts +55 -0
  166. package/lib/components/Button/style/buttonPrimaryStyle.ts +53 -0
  167. package/lib/components/Button/style/buttonPrimarySubtleStyle.ts +64 -0
  168. package/lib/components/Button/style/buttonPrimaryWarningStyle.ts +56 -0
  169. package/lib/components/Button/style/buttonSecondaryDestructiveStyle.ts +63 -0
  170. package/lib/components/Button/style/buttonSecondaryStyle.ts +62 -0
  171. package/lib/components/Button/style/buttonSecondarySubtleStyle.ts +72 -0
  172. package/lib/components/Button/style/buttonTertiaryDestructiveStyle.ts +65 -0
  173. package/lib/components/Button/style/buttonTertiaryNoPaddingStyle.ts +52 -0
  174. package/lib/components/Button/style/buttonTertiaryStyle.ts +62 -0
  175. package/lib/components/Calendar/Calendar.stories.tsx +1 -1
  176. package/lib/components/Calendar/Calendar.tsx +2 -2
  177. package/lib/components/Calendar/__tests__/Calendar.test.tsx +23 -15
  178. package/lib/components/Calendar/__tests__/__snapshots__/Calendar.test.tsx.snap +99 -95
  179. package/lib/components/Calendar/index.ts +1 -5
  180. package/lib/components/Calendar/subcomponents/AcademicWeek.tsx +2 -1
  181. package/lib/components/Calendar/subcomponents/AcademicWeeks.tsx +1 -1
  182. package/lib/components/Calendar/subcomponents/ColumnHeading.tsx +2 -2
  183. package/lib/components/Calendar/subcomponents/Controls.tsx +1 -1
  184. package/lib/components/Calendar/subcomponents/Day.stories.tsx +1 -1
  185. package/lib/components/Calendar/subcomponents/Day.tsx +7 -9
  186. package/lib/components/Calendar/subcomponents/EventDot.tsx +3 -6
  187. package/lib/components/Calendar/subcomponents/index.ts +1 -1
  188. package/lib/components/Calendar/utils/getDatesForCalendarGrid/getDatesForCalendarGrid.ts +43 -11
  189. package/lib/components/Calendar/utils/normaliseMonth/normaliseMonth.test.ts +5 -5
  190. package/lib/components/Checkbox/Checkbox.stories.tsx +1 -1
  191. package/lib/components/Checkbox/Checkbox.tsx +12 -10
  192. package/lib/components/Checkbox/__tests__/Checkbox.test.tsx +29 -0
  193. package/lib/components/Checkbox/__tests__/__snapshots__/Checkbox.test.tsx.snap +4 -4
  194. package/lib/components/Datepicker/Datepicker.lld.md +108 -0
  195. package/lib/components/Datepicker/Datepicker.stories.tsx +44 -5
  196. package/lib/components/Datepicker/Datepicker.tsx +14 -36
  197. package/lib/components/Datepicker/Datepicker.types.ts +5 -14
  198. package/lib/components/Datepicker/__tests__/Datepicker.test.tsx +267 -8
  199. package/lib/components/Datepicker/__tests__/__snapshots__/Datepicker.test.tsx.snap +20 -42
  200. package/lib/components/Datepicker/subcomponents/CustomDatepicker.tsx +48 -5
  201. package/lib/components/Datepicker/subcomponents/DatepickerInput.tsx +30 -17
  202. package/lib/components/Datepicker/subcomponents/Panel.tsx +6 -2
  203. package/lib/components/Datepicker/subcomponents/VisibleField.tsx +46 -8
  204. package/lib/components/Datepicker/subcomponents/index.ts +0 -1
  205. package/lib/components/Datepicker/utils/index.ts +0 -1
  206. package/lib/components/Dialog/BaseDialog.tsx +13 -2
  207. package/lib/components/Dialog/Dialog.stories.tsx +1 -1
  208. package/lib/components/Dialog/Dialog.tsx +8 -1
  209. package/lib/components/Dialog/DialogBody.tsx +5 -1
  210. package/lib/components/Dialog/DialogHeader.tsx +2 -1
  211. package/lib/components/Divider/Divider.stories.tsx +1 -1
  212. package/lib/components/Divider/__tests__/__snapshots__/Breadcrumbs.test.tsx.snap +12 -12
  213. package/lib/components/FeedbackDialog/FeedbackDialog.stories.tsx +1 -1
  214. package/lib/components/FeedbackDialog/FeedbackDialog.tsx +4 -6
  215. package/lib/components/Field/CharacterCount.tsx +2 -2
  216. package/lib/components/Field/ErrorText.tsx +2 -1
  217. package/lib/components/Field/Field.stories.tsx +1 -1
  218. package/lib/components/Field/Field.tsx +1 -1
  219. package/lib/components/Field/HelperText.tsx +3 -1
  220. package/lib/components/Field/__tests__/Field.test.tsx +13 -0
  221. package/lib/components/FileInput/FileInput.stories.tsx +1 -1
  222. package/lib/components/FileInput/__tests__/__snapshots__/FileInput.test.tsx.snap +4 -20
  223. package/lib/components/Footer/Footer.stories.tsx +1 -1
  224. package/lib/components/Footer/__tests__/__snapshots__/Footer.test.tsx.snap +73 -82
  225. package/lib/components/FooterNew/BackToTop.tsx +83 -0
  226. package/lib/components/FooterNew/Footer.tsx +110 -0
  227. package/lib/components/FooterNew/FooterColumn.tsx +79 -0
  228. package/lib/components/FooterNew/FooterLinks.tsx +44 -0
  229. package/lib/components/FooterNew/FooterNavLink.tsx +63 -0
  230. package/lib/components/FooterNew/LegalAndCopyright.tsx +150 -0
  231. package/lib/components/FooterNew/LogoAddressAndSocial.tsx +154 -0
  232. package/lib/components/FooterNew/SocialLink.tsx +108 -0
  233. package/lib/components/FooterNew/__tests__/Footer.test.tsx +51 -0
  234. package/lib/components/FooterNew/__tests__/__snapshots__/Footer.test.tsx.snap +1107 -0
  235. package/lib/components/FooterNew/index.ts +2 -0
  236. package/lib/components/Header/Header.mdx +52 -0
  237. package/lib/components/Header/Header.stories.tsx +98 -0
  238. package/lib/components/Header/Header.tsx +51 -6
  239. package/lib/components/Header/__tests__/Header.test.tsx +17 -1
  240. package/lib/components/HeaderDraft/__tests__/__snapshots__/Header.test.tsx.snap +3 -2
  241. package/lib/components/HeaderNew/Header.tsx +93 -0
  242. package/lib/components/HeaderNew/HeaderBorder.tsx +55 -0
  243. package/lib/components/HeaderNew/HeaderLogo.tsx +70 -0
  244. package/lib/components/HeaderNew/HeaderMenuContainer.tsx +35 -0
  245. package/lib/components/HeaderNew/HeaderTitle.tsx +53 -0
  246. package/lib/components/HeaderNew/__tests__/Header.test.tsx +42 -0
  247. package/lib/components/HeaderNew/__tests__/__snapshots__/Header.test.tsx.snap +79 -0
  248. package/lib/components/HeaderNew/constants.ts +3 -0
  249. package/lib/components/HeaderNew/index.ts +7 -0
  250. package/lib/components/Heading/Heading.stories.tsx +1 -1
  251. package/lib/components/HeadingNew/Heading.tsx +208 -0
  252. package/lib/components/HeadingNew/index.ts +2 -0
  253. package/lib/components/Icon/Icon.stories.tsx +1 -1
  254. package/lib/components/Icon/__tests__/__snapshots__/Icon.test.tsx.snap +16 -12
  255. package/lib/components/Icon/svgImports.ts +318 -296
  256. package/lib/components/IconButton/IconButton.stories.tsx +1 -1
  257. package/lib/components/IconButton/IconButton.tsx +3 -4
  258. package/lib/components/IconButton/__tests__/__snapshots__/IconButton.test.tsx.snap +12 -9
  259. package/lib/components/Input/Input.stories.tsx +1 -1
  260. package/lib/components/Label/Label.stories.tsx +1 -1
  261. package/lib/components/Link/BaseLink.tsx +114 -71
  262. package/lib/components/Link/Link.stories.tsx +1 -1
  263. package/lib/components/Link/Link.tsx +120 -109
  264. package/lib/components/Link/__tests__/__snapshots__/link.test.tsx.snap +2 -2
  265. package/lib/components/Main/Main.stories.tsx +36 -0
  266. package/lib/components/Main/Main.tsx +46 -0
  267. package/lib/components/Main/__tests__/Main.test.tsx +80 -0
  268. package/lib/components/Main/__tests__/__snapshots__/Main.test.tsx.snap +33 -0
  269. package/lib/components/Main/index.ts +2 -0
  270. package/lib/components/MenuNew/Menu.context.tsx +149 -0
  271. package/lib/components/MenuNew/Menu.tsx +75 -0
  272. package/lib/components/MenuNew/MenuContent.tsx +140 -0
  273. package/lib/components/MenuNew/MenuItem.tsx +101 -0
  274. package/lib/components/MenuNew/MenuSection.tsx +47 -0
  275. package/lib/components/MenuNew/index.ts +8 -0
  276. package/lib/components/MenuNew/trigger/ButtonMenuTrigger.tsx +42 -0
  277. package/lib/components/MenuNew/trigger/IconMenuTrigger.tsx +40 -0
  278. package/lib/components/NativeDatepicker/NativeDatepicker.stories.tsx +100 -0
  279. package/lib/components/{Datepicker/subcomponents → NativeDatepicker}/NativeDatepicker.tsx +14 -15
  280. package/lib/components/NativeDatepicker/NativeDatepicker.types.ts +19 -0
  281. package/lib/components/NativeDatepicker/index.ts +2 -0
  282. package/lib/components/{Datepicker → NativeDatepicker}/utils/dateToLocaleISOString/dateToLocaleISOString.ts +1 -1
  283. package/lib/components/NativeDatepicker/utils/index.ts +1 -0
  284. package/lib/components/Pagination/Pagination.stories.tsx +1 -1
  285. package/lib/components/Pagination/PaginationControls.tsx +59 -17
  286. package/lib/components/Pagination/PaginationInfo.tsx +7 -4
  287. package/lib/components/Paragraph/Paragraph.stories.tsx +1 -1
  288. package/lib/components/ParagraphNew/Paragraph.tsx +200 -0
  289. package/lib/components/ParagraphNew/index.ts +6 -0
  290. package/lib/components/Radio/Radio.stories.tsx +1 -1
  291. package/lib/components/Radio/Radio.tsx +8 -8
  292. package/lib/components/Radio/__tests__/__snapshots__/Radio.test.tsx.snap +4 -4
  293. package/lib/components/Search/Search.stories.tsx +1 -1
  294. package/lib/components/Search/Search.tsx +4 -1
  295. package/lib/components/Search/__tests__/Search.test.tsx +19 -1
  296. package/lib/components/Search/__tests__/__snapshots__/Search.test.tsx.snap +12 -32
  297. package/lib/components/Select/Select.mdx +192 -0
  298. package/lib/components/Select/Select.stories.tsx +229 -48
  299. package/lib/components/Select/Select.tsx +50 -15
  300. package/lib/components/Select/Select.types.ts +99 -44
  301. package/lib/components/Select/__tests__/Select.test.tsx +698 -8
  302. package/lib/components/Select/__tests__/__snapshots__/Select.test.tsx.snap +5 -4
  303. package/lib/components/Select/subcomponents/CustomOption.tsx +12 -4
  304. package/lib/components/Select/subcomponents/CustomSelect.tsx +411 -41
  305. package/lib/components/Select/subcomponents/FilterInput.tsx +90 -0
  306. package/lib/components/Select/subcomponents/NativeSelect.tsx +21 -17
  307. package/lib/components/Select/subcomponents/Panel.tsx +2 -2
  308. package/lib/components/Select/subcomponents/VisibleField.tsx +59 -6
  309. package/lib/components/Select/subcomponents/index.tsx +1 -0
  310. package/lib/components/Snackbar/Snackbar.stories.tsx +1 -1
  311. package/lib/components/Snackbar/__tests__/__snapshots__/Snackbar.test.tsx.snap +9 -15
  312. package/lib/components/Spinner/Spinner.stories.tsx +1 -1
  313. package/lib/components/Spinner/Spinner.tsx +24 -5
  314. package/lib/components/Spinner/__tests__/Spinner.test.tsx +35 -5
  315. package/lib/components/Spinner/__tests__/__snapshots__/Spinner.test.tsx.snap +40 -16
  316. package/lib/components/StandaloneLink/StandaloneLink.stories.tsx +1 -1
  317. package/lib/components/StandaloneLink/StandaloneLink.tsx +180 -163
  318. package/lib/components/StandaloneLink/__tests__/__snapshots__/StandaloneLink.test.tsx.snap +2 -2
  319. package/lib/components/Table/Table.stories.tsx +1 -1
  320. package/lib/components/Table/Table.tsx +2 -0
  321. package/lib/components/Table/Table.types.ts +1 -0
  322. package/lib/components/Table/__tests__/Table.test.tsx +19 -0
  323. package/lib/components/Table/__tests__/__snapshots__/Table.test.tsx.snap +7 -3
  324. package/lib/components/Table/subcomponents/Cell/Cell.stories.tsx +1 -1
  325. package/lib/components/Table/subcomponents/Cell/Cell.tsx +23 -2
  326. package/lib/components/Table/subcomponents/Cell/CellContent.tsx +12 -1
  327. package/lib/components/Table/subcomponents/Cell/__tests__/Cell.test.tsx +106 -0
  328. package/lib/components/Table/subcomponents/Cell/__tests__/__snapshots__/Cell.test.tsx.snap +4 -3
  329. package/lib/components/Table/subcomponents/HeadCell/HeadCell.stories.tsx +1 -1
  330. package/lib/components/Table/subcomponents/HeadCell/HeadCell.tsx +28 -6
  331. package/lib/components/Table/subcomponents/HeadCell/HeadCellContent.tsx +3 -0
  332. package/lib/components/Table/subcomponents/HeadCell/__tests__/HeadCell.test.tsx +221 -2
  333. package/lib/components/Table/subcomponents/HeadCell/__tests__/__snapshots__/HeadCell.test.tsx.snap +6 -4
  334. package/lib/components/Table/subcomponents/Row.tsx +2 -2
  335. package/lib/components/Table/subcomponents/SortIcon.tsx +1 -0
  336. package/lib/components/Table/subcomponents/__tests__/Row.test.tsx +59 -0
  337. package/lib/components/Tabs/Tab.tsx +3 -3
  338. package/lib/components/Tabs/Tabs.stories.tsx +1 -1
  339. package/lib/components/Tabs/Tabs.tsx +5 -3
  340. package/lib/components/Tabs/__tests__/__snapshots__/Tabs.test.tsx.snap +4 -4
  341. package/lib/components/Textarea/Textarea.stories.tsx +1 -1
  342. package/lib/components/Timepicker/Timepicker.stories.tsx +1 -1
  343. package/lib/components/Timepicker/Timepicker.tsx +4 -0
  344. package/lib/components/Timepicker/__tests__/__snapshots__/Timepicker.test.tsx.snap +2 -2
  345. package/lib/components/Toggle/Toggle.stories.tsx +1 -1
  346. package/lib/components/Toggle/Toggle.tsx +5 -5
  347. package/lib/components/Toggle/ToggleHandle.tsx +2 -3
  348. package/lib/components/Tooltip/Tooltip.stories.tsx +1 -1
  349. package/lib/components/Tooltip/Tooltip.tsx +2 -2
  350. package/lib/components/Tooltip/__tests__/__snapshots__/tooltip.test.tsx.snap +2 -2
  351. package/lib/components/UclLogoNew/UclLogo.tsx +42 -0
  352. package/lib/components/UclLogoNew/index.ts +2 -0
  353. package/lib/components/WeekPicker/WeekPicker.stories.tsx +145 -0
  354. package/lib/components/WeekPicker/WeekPicker.tsx +2 -2
  355. package/lib/components/WeekPicker/WeekPicker.types.ts +21 -0
  356. package/lib/components/WeekPicker/index.ts +1 -0
  357. package/lib/components/WeekPicker/subcomponents/CustomDatepicker.tsx +1 -1
  358. package/lib/components/common/Common.mdx +1 -2
  359. package/lib/components/index.ts +30 -3
  360. package/lib/hooks/useFocusTrap.ts +40 -4
  361. package/lib/index.ts +1 -0
  362. package/lib/theme/Colours.mdx +1 -1
  363. package/lib/theme/Theme.mdx +1 -1
  364. package/lib/theme/Typography.mdx +1 -1
  365. package/lib/theme/__tests__/fonts.test.ts +37 -0
  366. package/lib/theme/common/themeCommon.ts +515 -0
  367. package/lib/theme/fonts.ts +110 -0
  368. package/lib/theme/index.ts +6 -6
  369. package/lib/theme/light/lightColour.ts +232 -0
  370. package/lib/theme/light/lightTheme.ts +37 -0
  371. package/lib/theme/{defaultTheme.ts → original/color.ts} +17 -199
  372. package/lib/theme/original/defaultTheme.ts +207 -0
  373. package/lib/theme/original/originalColourNewStructure.ts +185 -0
  374. package/lib/theme/useTheme.tsx +72 -15
  375. package/lib/types/assets.d.ts +10 -0
  376. package/lib/utils/__tests__/announce.test.ts +121 -0
  377. package/lib/utils/addAlphaToHex.ts +29 -0
  378. package/lib/utils/announce.ts +134 -0
  379. package/lib/utils/index.ts +1 -0
  380. package/lib/utils/scrollToTop.ts +5 -0
  381. package/package.json +11 -9
  382. package/dist/components/Button/buttonPrimaryStyle.d.ts +0 -4
  383. package/dist/components/Button/buttonSecondaryStyle.d.ts +0 -4
  384. package/dist/components/Button/buttonTertiaryStyle.d.ts +0 -4
  385. package/dist/components/Datepicker/subcomponents/NativeDatepicker.d.ts +0 -6
  386. package/dist/theme/defaultTheme.d.ts +0 -274
  387. package/lib/components/Accordion/Accordion.stories.tsx.NOT_READY +0 -93
  388. package/lib/components/Button/buttonPrimaryStyle.ts +0 -62
  389. package/lib/components/Button/buttonSecondaryStyle.ts +0 -65
  390. package/lib/components/Button/buttonTertiaryStyle.ts +0 -54
  391. /package/dist/components/{Datepicker/utils/dateToLocaleISOString/dateToLocaleISOString.test.d.ts → FooterNew/__tests__/Footer.test.d.ts} +0 -0
  392. /package/lib/components/{Datepicker → NativeDatepicker}/utils/dateToLocaleISOString/dateToLocaleISOString.test.ts +0 -0
@@ -0,0 +1,83 @@
1
+ import { HTMLAttributes } from 'react';
2
+ import { css, cx } from '@emotion/css';
3
+ import { useTheme } from '../..';
4
+ import Icon from '../Icon';
5
+ import scrollToTop from '../../utils/scrollToTop';
6
+
7
+ export const NAME = 'ucl-uikit-footer__back-to-top';
8
+
9
+ export interface BackToTopProps extends HTMLAttributes<HTMLDivElement> {
10
+ compact?: boolean;
11
+ testId?: string;
12
+ }
13
+
14
+ const BackToTop = ({
15
+ compact,
16
+ testId = NAME,
17
+ className,
18
+ ...props
19
+ }: BackToTopProps) => {
20
+ const [theme] = useTheme();
21
+
22
+ const handleBackToTopButtonClick = () => {
23
+ scrollToTop();
24
+ };
25
+
26
+ const baseStyle = css`
27
+ margin-top: ${theme.margin.m56};
28
+ text-align: right;
29
+
30
+ @media screen and (min-width: ${theme.breakpoints.tablet}px) {
31
+ margin-top: ${theme.margin.m80};
32
+ }
33
+ `;
34
+
35
+ const compactStyle = css`
36
+ margin-top: ${theme.margin.m16};
37
+
38
+ @media screen and (min-width: ${theme.breakpoints.tablet}px) {
39
+ margin-top: ${theme.margin.m16};
40
+ }
41
+ `;
42
+
43
+ const style = cx(NAME, baseStyle, compact && compactStyle, className);
44
+
45
+ const buttonStyle = css`
46
+ display: inline;
47
+ background-color: transparent;
48
+ border: none;
49
+ color: ${theme.colour.link.inverse};
50
+ font-family: ${theme.typography.body.md.fontFamily};
51
+ font-size: 14px;
52
+ line-height: ${theme.typography.body.md.lineHeight}%;
53
+ cursor: pointer;
54
+ display: inline-flex;
55
+ align-items: center;
56
+ gap: 6px;
57
+
58
+ &:hover {
59
+ opacity: 0.9;
60
+ }
61
+
62
+ @media screen and (min-width: ${theme.breakpoints.desktop}px) {
63
+ font-size: 16px;
64
+ }
65
+ `;
66
+
67
+ return (
68
+ <div
69
+ className={style}
70
+ data-testid={testId}
71
+ {...props}
72
+ >
73
+ <button
74
+ className={buttonStyle}
75
+ onClick={handleBackToTopButtonClick}
76
+ >
77
+ Back to top <Icon.ArrowUp />
78
+ </button>
79
+ </div>
80
+ );
81
+ };
82
+
83
+ export default BackToTop;
@@ -0,0 +1,110 @@
1
+ import { memo, HTMLAttributes } from 'react';
2
+ import { css, cx } from '@emotion/css';
3
+ import { useTheme } from '../..';
4
+ import FooterColumn from './FooterColumn';
5
+ import FooterNavLink from './FooterNavLink';
6
+ import LogoAddressAndSocial from './LogoAddressAndSocial';
7
+ import LegalAndCopyright from './LegalAndCopyright';
8
+ import BackToTop from './BackToTop';
9
+ import FooterLinks from './FooterLinks';
10
+
11
+ export const NAME = 'ucl-uikit-footer';
12
+
13
+ export interface FooterProps extends HTMLAttributes<HTMLElement> {
14
+ testId?: string;
15
+ addressFormat?: 'compact' | 'full';
16
+ showSocialLinks?: boolean;
17
+ disclaimer?: string;
18
+ freedomOfInformation?: string;
19
+ accessibility?: string;
20
+ cookies?: string;
21
+ privacy?: string;
22
+ slaveryStatement?: string;
23
+ login?: string;
24
+ }
25
+
26
+ const Footer = ({
27
+ testId = NAME,
28
+ className,
29
+ addressFormat = 'full',
30
+ showSocialLinks = true,
31
+ disclaimer = 'https://www.ucl.ac.uk/legal-services/disclaimer',
32
+ freedomOfInformation = 'https://www.ucl.ac.uk/foi',
33
+ accessibility = 'https://www.ucl.ac.uk/accessibility',
34
+ cookies = 'https://www.ucl.ac.uk/legal-services/privacy/cookie-policy',
35
+ privacy = 'https://www.ucl.ac.uk/legal-services/privacy',
36
+ slaveryStatement = 'https://www.ucl.ac.uk/commercial-procurement/modern-day-slavery-statement',
37
+ login,
38
+ children,
39
+ ...props
40
+ }: FooterProps) => {
41
+ const hasChildLinks = !!children;
42
+ const isCompact = !hasChildLinks;
43
+
44
+ const [theme] = useTheme();
45
+
46
+ const baseStyle = css`
47
+ background-color: ${theme.colour.surface.inverseBrandPrimary};
48
+ color: ${theme.colour.text.brandInverse};
49
+ padding: ${theme.padding.p40} ${theme.padding.p16};
50
+ box-sizing: border-box;
51
+
52
+ @media screen and (min-width: ${theme.breakpoints.tablet}px) {
53
+ padding: ${theme.padding.p64} ${theme.padding.p32};
54
+ }
55
+
56
+ @media screen and (min-width: ${theme.breakpoints.desktop}px) {
57
+ padding: ${theme.padding.p64} ${theme.padding.p64} ${theme.padding.p48};
58
+ }
59
+ `;
60
+
61
+ const style = cx(NAME, baseStyle, className);
62
+
63
+ const linksAndDetailsStyle = css`
64
+ @media screen and (min-width: ${theme.breakpoints.desktopLarge}px) {
65
+ display: flex;
66
+ }
67
+ `;
68
+
69
+ return (
70
+ <footer
71
+ className={style}
72
+ data-testid={testId}
73
+ {...props}
74
+ >
75
+ <div className={linksAndDetailsStyle}>
76
+ {hasChildLinks && <FooterLinks>{children}</FooterLinks>}
77
+ <LogoAddressAndSocial
78
+ compact={isCompact}
79
+ addressFormat={addressFormat}
80
+ showSocialLinks={showSocialLinks}
81
+ />
82
+ </div>
83
+ <BackToTop compact={isCompact} />
84
+ <LegalAndCopyright
85
+ disclaimer={disclaimer}
86
+ freedomOfInformation={freedomOfInformation}
87
+ accessibility={accessibility}
88
+ cookies={cookies}
89
+ privacy={privacy}
90
+ slaveryStatement={slaveryStatement}
91
+ login={login}
92
+ />
93
+ </footer>
94
+ );
95
+ };
96
+
97
+ const MemoFooter = memo(Footer);
98
+
99
+ export interface IFooterSubComponents {
100
+ Column: typeof FooterColumn;
101
+ NavLink: typeof FooterNavLink;
102
+ }
103
+
104
+ const FooterWithSubComponents = MemoFooter as typeof MemoFooter &
105
+ IFooterSubComponents;
106
+
107
+ FooterWithSubComponents.Column = FooterColumn;
108
+ FooterWithSubComponents.NavLink = FooterNavLink;
109
+
110
+ export default FooterWithSubComponents;
@@ -0,0 +1,79 @@
1
+ import { memo, HTMLAttributes } from 'react';
2
+ import { css, cx } from '@emotion/css';
3
+ import { useTheme } from '../..';
4
+
5
+ export const NAME = 'ucl-uikit-footer__column';
6
+
7
+ export interface FooterColumnProps extends HTMLAttributes<HTMLDivElement> {
8
+ heading: string;
9
+ testId?: string;
10
+ }
11
+
12
+ const FooterColumn = ({
13
+ heading,
14
+ testId = NAME,
15
+ className,
16
+ children,
17
+ ...props
18
+ }: FooterColumnProps) => {
19
+ const [theme] = useTheme();
20
+
21
+ const baseStyle = css`
22
+ flex: 1;
23
+ display: flex;
24
+ flex-direction: column;
25
+ justify-content: flex-start;
26
+ align-items: start;
27
+ gap: 16px;
28
+ font-family: ${theme.typography.body.md.fontFamily};
29
+ font-weight: ${theme.typography.body.md.fontWeight};
30
+ font-size: ${theme.typography.body.md.fontSize}px;
31
+
32
+ :not(:first-child) {
33
+ margin-top: ${theme.margin.m24};
34
+ }
35
+
36
+ :not(:last-child) {
37
+ margin-bottom: ${theme.margin.m24};
38
+ }
39
+
40
+ @media screen and (min-width: ${theme.breakpoints.tablet}px) {
41
+ margin-top: 0;
42
+ margin-bottom: 0;
43
+ flex: 0 0 200px;
44
+ /* background-color: rgba(255, 255, 255, 0.1); */
45
+
46
+ :not(:first-child) {
47
+ margin-top: 0;
48
+ }
49
+
50
+ :not(:last-child) {
51
+ margin-bottom: 0;
52
+ }
53
+ }
54
+ `;
55
+
56
+ const style = cx(NAME, baseStyle, className);
57
+
58
+ const headingStyle = css`
59
+ margin: 0;
60
+ color: #fafafa;
61
+ font-family: ${theme.typography.body.mdSemibold.fontFamily};
62
+ font-weight: ${theme.typography.body.mdSemibold.fontWeight};
63
+ font-size: ${theme.typography.body.mdSemibold.fontSize}px;
64
+ `;
65
+
66
+ return (
67
+ <div
68
+ className={style}
69
+ data-testid={testId}
70
+ {...props}
71
+ >
72
+ <h3 className={headingStyle}>{heading}</h3>
73
+
74
+ {children}
75
+ </div>
76
+ );
77
+ };
78
+
79
+ export default memo(FooterColumn);
@@ -0,0 +1,44 @@
1
+ import { HTMLAttributes } from 'react';
2
+ import { css, cx } from '@emotion/css';
3
+ import { useTheme } from '../..';
4
+
5
+ export const NAME = 'ucl-uikit-footer__links';
6
+
7
+ export interface FooterLinksProps extends HTMLAttributes<HTMLElement> {
8
+ testId?: string;
9
+ }
10
+
11
+ const FooterLinks = ({
12
+ testId = NAME,
13
+ className,
14
+ children,
15
+ ...props
16
+ }: FooterLinksProps) => {
17
+ const [theme] = useTheme();
18
+
19
+ const baseStyle = css`
20
+ @media screen and (min-width: ${theme.breakpoints.tablet}px) {
21
+ display: flex;
22
+ justify-content: start;
23
+ gap: 40px;
24
+ }
25
+
26
+ @media screen and (min-width: ${theme.breakpoints.desktop}px) {
27
+ gap: 72px;
28
+ }
29
+ `;
30
+
31
+ const style = cx(NAME, baseStyle, className);
32
+
33
+ return (
34
+ <nav
35
+ className={style}
36
+ data-testid={testId}
37
+ {...props}
38
+ >
39
+ {children}
40
+ </nav>
41
+ );
42
+ };
43
+
44
+ export default FooterLinks;
@@ -0,0 +1,63 @@
1
+ import { memo } from 'react';
2
+ import { css, cx } from '@emotion/css';
3
+ import { Link, LinkProps, useTheme } from '../..';
4
+
5
+ export const NAME = 'ucl-uikit-footer__nav-link';
6
+
7
+ export interface FooterNavLinkProps extends LinkProps {
8
+ href: string;
9
+ testId?: string;
10
+ }
11
+
12
+ const FooterNavLink = ({
13
+ href,
14
+ testId = NAME,
15
+ className,
16
+ children,
17
+ ...props
18
+ }: FooterNavLinkProps) => {
19
+ const [theme] = useTheme();
20
+
21
+ const baseStyle = css`
22
+ text-decoration: none;
23
+ color: #fafafa; // todo: fix ${theme.colour.text.brandInverse};
24
+ font-family: ${theme.typography.body.md.fontFamily};
25
+ font-size: 14px;
26
+ line-height: ${theme.typography.body.md
27
+ .lineHeight}%; // todo: change foundations lib to use non-percent number
28
+ transition: color 0.2s ease-out;
29
+
30
+ &:focus-visible {
31
+ outline: none;
32
+ box-shadow: ${theme.boxShadow.focus};
33
+ }
34
+
35
+ &:visited {
36
+ color: ${theme.color.text.inverted};
37
+ }
38
+
39
+ &:hover {
40
+ text-decoration: underline;
41
+ color: ${theme.color.text.inverted};
42
+ }
43
+
44
+ @media screen and (min-width: ${theme.breakpoints.desktop}px) {
45
+ font-size: 16px;
46
+ }
47
+ `;
48
+
49
+ const style = cx(NAME, baseStyle, className);
50
+
51
+ return (
52
+ <Link
53
+ href={href}
54
+ className={style}
55
+ data-testid={testId}
56
+ {...props}
57
+ >
58
+ {children}
59
+ </Link>
60
+ );
61
+ };
62
+
63
+ export default memo(FooterNavLink);
@@ -0,0 +1,150 @@
1
+ import { HTMLAttributes } from 'react';
2
+ import { css, cx } from '@emotion/css';
3
+ import { useTheme } from '../..';
4
+
5
+ export const NAME = 'ucl-uikit-footer__legal-and-copyright';
6
+
7
+ export interface LegalAndCopyrightProps extends HTMLAttributes<HTMLDivElement> {
8
+ disclaimer: string;
9
+ freedomOfInformation: string;
10
+ accessibility: string;
11
+ cookies: string;
12
+ privacy: string;
13
+ slaveryStatement: string;
14
+ login?: string;
15
+ testId?: string;
16
+ }
17
+
18
+ const LegalAndCopyright = ({
19
+ disclaimer,
20
+ freedomOfInformation,
21
+ accessibility,
22
+ cookies,
23
+ privacy,
24
+ slaveryStatement,
25
+ login,
26
+ testId = NAME,
27
+ className,
28
+ ...props
29
+ }: LegalAndCopyrightProps) => {
30
+ const copyrightYear = new Date().getFullYear();
31
+
32
+ const [theme] = useTheme();
33
+
34
+ const baseStyle = css`
35
+ margin-top: ${theme.margin.m16};
36
+ border-top: 6px solid ${theme.colour.border.brandInverseSecondary};
37
+ padding-top: ${theme.padding.p24};
38
+
39
+ @media screen and (min-width: ${theme.breakpoints.desktop}px) {
40
+ padding-top: 36px;
41
+ }
42
+
43
+ @media screen and (min-width: ${theme.breakpoints.desktopLarge}px) {
44
+ display: flex;
45
+ }
46
+ `;
47
+
48
+ const style = cx(NAME, baseStyle, className);
49
+
50
+ const linksStyle = css`
51
+ color: ${theme.colour.text.brandInverseSecondary};
52
+ font-family: ${theme.typography.body.md.fontFamily};
53
+ font-size: 14px;
54
+ line-height: 1.4;
55
+ display: flex;
56
+ flex-wrap: wrap;
57
+ gap: 16px;
58
+
59
+ @media screen and (min-width: ${theme.breakpoints.desktop}px) {
60
+ gap: 32px;
61
+ }
62
+ `;
63
+
64
+ const linkStyle = css`
65
+ text-decoration: none;
66
+ color: inherit;
67
+ transition: color 0.2s ease-out;
68
+
69
+ &:focus-visible {
70
+ outline: none;
71
+ box-shadow: ${theme.boxShadow.focus};
72
+ }
73
+
74
+ &:hover {
75
+ text-decoration: underline;
76
+ }
77
+ `;
78
+
79
+ const copyrightStyle = css`
80
+ margin-top: ${theme.margin.m24};
81
+ color: ${theme.colour.text.inverse};
82
+ opacity: 0.6; // todo
83
+ font-family: ${theme.typography.body.md.fontFamily};
84
+ line-height: ${theme.typography.body.md.lineHeight}%;
85
+ font-size: 14px;
86
+
87
+ @media screen and (min-width: ${theme.breakpoints.desktopLarge}px) {
88
+ margin-top: 0;
89
+ margin-left: auto;
90
+ }
91
+ `;
92
+
93
+ return (
94
+ <div
95
+ className={style}
96
+ data-testid={testId}
97
+ {...props}
98
+ >
99
+ <div className={linksStyle}>
100
+ <a
101
+ className={linkStyle}
102
+ href={disclaimer}
103
+ >
104
+ Disclaimer
105
+ </a>
106
+ <a
107
+ className={linkStyle}
108
+ href={freedomOfInformation}
109
+ >
110
+ Freedom of Information
111
+ </a>
112
+ <a
113
+ className={linkStyle}
114
+ href={accessibility}
115
+ >
116
+ Accessibility
117
+ </a>
118
+ <a
119
+ className={linkStyle}
120
+ href={cookies}
121
+ >
122
+ Cookies
123
+ </a>
124
+ <a
125
+ className={linkStyle}
126
+ href={privacy}
127
+ >
128
+ Privacy
129
+ </a>
130
+ <a
131
+ className={linkStyle}
132
+ href={slaveryStatement}
133
+ >
134
+ Slavery statement
135
+ </a>
136
+ {login && (
137
+ <a
138
+ className={linkStyle}
139
+ href={login}
140
+ >
141
+ Login
142
+ </a>
143
+ )}
144
+ </div>
145
+ <div className={copyrightStyle}>© {copyrightYear} UCL</div>
146
+ </div>
147
+ );
148
+ };
149
+
150
+ export default LegalAndCopyright;
@@ -0,0 +1,154 @@
1
+ import { HTMLAttributes } from 'react';
2
+ import { css, cx } from '@emotion/css';
3
+ import { UclLogoNew, useTheme } from '../..';
4
+ import SocialLink from './SocialLink';
5
+
6
+ export const NAME = 'ucl-uikit-footer__logo-address-social';
7
+
8
+ export interface LogoAddressAndSocialProps extends HTMLAttributes<HTMLDivElement> {
9
+ compact?: boolean;
10
+ addressFormat: 'compact' | 'full';
11
+ showSocialLinks?: boolean;
12
+ testId?: string;
13
+ }
14
+
15
+ const LogoAddressAndSocial = ({
16
+ compact = false,
17
+ addressFormat,
18
+ showSocialLinks = true,
19
+ testId = NAME,
20
+ className,
21
+ ...props
22
+ }: LogoAddressAndSocialProps) => {
23
+ const [theme] = useTheme();
24
+
25
+ const baseStyle = css`
26
+ margin-top: ${theme.margin.m48};
27
+ font-size: ${theme.font.size.f14};
28
+ font-weight: 300;
29
+
30
+ @media screen and (min-width: ${theme.breakpoints.tablet}px) {
31
+ margin-top: ${theme.margin.m72};
32
+ }
33
+
34
+ @media screen and (min-width: ${theme.breakpoints.desktopLarge}px) {
35
+ margin-top: 0;
36
+ margin-left: auto;
37
+ width: 256px;
38
+ }
39
+ `;
40
+
41
+ const compactStyle = css`
42
+ margin-top: 0;
43
+
44
+ @media screen and (min-width: ${theme.breakpoints.tablet}px) {
45
+ margin-top: 0;
46
+ }
47
+
48
+ @media screen and (min-width: ${theme.breakpoints.desktopLarge}px) {
49
+ margin-left: 0;
50
+ }
51
+ `;
52
+
53
+ const style = cx(NAME, baseStyle, compact && compactStyle, className);
54
+
55
+ const logoStyle = css`
56
+ display: block;
57
+ `;
58
+
59
+ const contactDetailsStyle = css`
60
+ margin-top: ${theme.margin.m16};
61
+ `;
62
+
63
+ const addressStyle = css`
64
+ color: ${theme.colour.text.inverse};
65
+ opacity: 0.6; // todo: use alpha white colour from theme
66
+ font-family: ${theme.typography.body.md.fontFamily};
67
+ line-height: ${theme.typography.body.md
68
+ .lineHeight}%; // todo: change foundations lib to use non-percent number
69
+ `;
70
+
71
+ const telephoneStyle = css`
72
+ margin-top: ${theme.margin.m4};
73
+ `;
74
+
75
+ const telephoneLinkStyle = css`
76
+ color: ${theme.colour.text.inverse};
77
+ opacity: 0.6; // todo: use alpha white colour from theme
78
+ font-family: ${theme.typography.body.md.fontFamily};
79
+ line-height: ${theme.typography.body.md
80
+ .lineHeight}%; // todo: change foundations lib to use non-percent number
81
+ text-decoration: none;
82
+ transition: color 0.2s ease-out;
83
+
84
+ @media screen and (min-width: ${theme.breakpoints.tablet}px) {
85
+ margin-top: 0;
86
+ }
87
+
88
+ &:focus-visible {
89
+ outline: none;
90
+ box-shadow: ${theme.boxShadow.focus};
91
+ }
92
+
93
+ &:hover {
94
+ text-decoration: underline;
95
+ }
96
+ `;
97
+
98
+ const socialLinksStyle = css`
99
+ margin-top: ${theme.margin.m24};
100
+ display: flex;
101
+ flex-wrap: wrap;
102
+ gap: 12px;
103
+ `;
104
+
105
+ return (
106
+ <div
107
+ className={style}
108
+ data-testid={testId}
109
+ {...props}
110
+ >
111
+ <UclLogoNew
112
+ className={logoStyle}
113
+ variant='secondary-inverse'
114
+ height={34}
115
+ />
116
+
117
+ <div className={contactDetailsStyle}>
118
+ {addressFormat === 'full' && (
119
+ <div className={addressStyle}>
120
+ University College London
121
+ <br />
122
+ Gower Street, London, WC1E 6BT
123
+ </div>
124
+ )}
125
+ {addressFormat === 'compact' && (
126
+ <div className={addressStyle}>Gower Street, London, WC1E 6BT</div>
127
+ )}
128
+ <div className={telephoneStyle}>
129
+ <a
130
+ className={telephoneLinkStyle}
131
+ href='tel:+4402076792000'
132
+ >
133
+ Tel: +44 (0) 20 7679 2000
134
+ </a>
135
+ </div>
136
+ </div>
137
+
138
+ {showSocialLinks && (
139
+ <div className={socialLinksStyle}>
140
+ <SocialLink socialNetwork='instagram' />
141
+ <SocialLink socialNetwork='linkedin' />
142
+ <SocialLink socialNetwork='youtube' />
143
+ <SocialLink socialNetwork='tiktok' />
144
+ <SocialLink socialNetwork='facebook' />
145
+ <SocialLink socialNetwork='bluesky' />
146
+ <SocialLink socialNetwork='threads' />
147
+ <SocialLink socialNetwork='soundcloud' />
148
+ </div>
149
+ )}
150
+ </div>
151
+ );
152
+ };
153
+
154
+ export default LogoAddressAndSocial;