uikit-react-public 0.39.0 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/components/Accordion/Accordion.Heading.d.ts +2 -1
  2. package/dist/components/Accordion/Accordion.d.ts +8 -2
  3. package/dist/components/Accordion/Accordion.stories.d.ts +2 -2
  4. package/dist/components/Alert/Alert.d.ts +2 -2
  5. package/dist/components/Alert/Alert.stories.d.ts +2 -2
  6. package/dist/components/Alert/AlertMessage.d.ts +1 -1
  7. package/dist/components/Alert/AlertTitle.d.ts +1 -1
  8. package/dist/components/ErrorDialog/ErrorDialog.d.ts +26 -0
  9. package/dist/components/ErrorDialog/ErrorDialog.stories.d.ts +14 -0
  10. package/dist/components/ErrorDialog/__tests__/ErrorDialog.test.d.ts +1 -0
  11. package/dist/components/ErrorDialog/index.d.ts +2 -0
  12. package/dist/components/Field/HelperText.d.ts +1 -1
  13. package/dist/components/index.d.ts +2 -0
  14. package/dist/index.js +6648 -6322
  15. package/lib/components/Accordion/Accordion.Heading.tsx +24 -8
  16. package/lib/components/Accordion/Accordion.Panel.tsx +7 -4
  17. package/lib/components/Accordion/Accordion.stories.tsx +8 -8
  18. package/lib/components/Accordion/Accordion.tsx +17 -23
  19. package/lib/components/Accordion/__tests__/__snapshots__/Accordion.test.tsx.snap +14 -14
  20. package/lib/components/Alert/Alert.tsx +0 -1
  21. package/lib/components/Alert/AlertMessage.tsx +10 -14
  22. package/lib/components/Alert/AlertTitle.tsx +11 -8
  23. package/lib/components/Alert/__tests__/__snapshots__/Alert.test.tsx.snap +29 -14
  24. package/lib/components/AppHeader/AppHeader.tsx +0 -1
  25. package/lib/components/AppHeader/__tests__/__snapshots__/AppHeader.test.tsx.snap +1 -1
  26. package/lib/components/AppMenu/AppMenu.tsx +2 -9
  27. package/lib/components/AppMenu/AppMenuItem.tsx +6 -2
  28. package/lib/components/AppMenu/__tests__/__snapshots__/AppMenu.test.tsx.snap +6 -6
  29. package/lib/components/Breadcrumbs/Breadcrumbs.tsx +0 -4
  30. package/lib/components/Breadcrumbs/__tests__/__snapshots__/Breadcrumbs.test.tsx.snap +10 -10
  31. package/lib/components/Calendar/__tests__/__snapshots__/Calendar.test.tsx.snap +85 -85
  32. package/lib/components/Calendar/subcomponents/Day.tsx +7 -3
  33. package/lib/components/Datepicker/__tests__/__snapshots__/Datepicker.test.tsx.snap +2 -2
  34. package/lib/components/Datepicker/subcomponents/DatepickerInput.tsx +6 -3
  35. package/lib/components/Dialog/BaseDialog.tsx +6 -2
  36. package/lib/components/ErrorDialog/ErrorDialog.stories.tsx +85 -0
  37. package/lib/components/ErrorDialog/ErrorDialog.tsx +433 -0
  38. package/lib/components/ErrorDialog/__tests__/ErrorDialog.test.tsx +145 -0
  39. package/lib/components/ErrorDialog/index.tsx +2 -0
  40. package/lib/components/Field/HelperText.tsx +9 -10
  41. package/lib/components/Footer/__tests__/__snapshots__/Footer.test.tsx.snap +25 -25
  42. package/lib/components/FooterNew/__tests__/__snapshots__/Footer.test.tsx.snap +28 -28
  43. package/lib/components/Header/Header.tsx +6 -3
  44. package/lib/components/Header/__tests__/__snapshots__/Header.test.tsx.snap +4 -4
  45. package/lib/components/HeaderNew/Header.tsx +0 -1
  46. package/lib/components/HeaderNew/__tests__/__snapshots__/Header.test.tsx.snap +2 -2
  47. package/lib/components/Input/Input.tsx +6 -3
  48. package/lib/components/Input/__tests__/__snapshots__/Input.test.tsx.snap +4 -4
  49. package/lib/components/Label/Label.tsx +7 -7
  50. package/lib/components/Label/__tests__/__snapshots__/Label.test.tsx.snap +7 -7
  51. package/lib/components/Link/BaseLink.tsx +8 -16
  52. package/lib/components/Link/__tests__/__snapshots__/link.test.tsx.snap +2 -2
  53. package/lib/components/Menu/Menu.tsx +0 -4
  54. package/lib/components/Menu/MenuItem.tsx +7 -5
  55. package/lib/components/Search/__tests__/__snapshots__/Search.test.tsx.snap +2 -2
  56. package/lib/components/Select/__tests__/__snapshots__/Select.test.tsx.snap +2 -2
  57. package/lib/components/Select/subcomponents/CustomOption.tsx +6 -3
  58. package/lib/components/Select/subcomponents/CustomSelect.tsx +6 -2
  59. package/lib/components/Select/subcomponents/NativeSelect.tsx +6 -3
  60. package/lib/components/Select/subcomponents/VisibleField.tsx +6 -1
  61. package/lib/components/Sidebar/Sidebar.tsx +0 -1
  62. package/lib/components/Sidebar/__tests__/__snapshots__/Sidebar.test.tsx.snap +2 -2
  63. package/lib/components/StandaloneLink/__tests__/__snapshots__/StandaloneLink.test.tsx.snap +2 -2
  64. package/lib/components/Textarea/Textarea.tsx +6 -3
  65. package/lib/components/Textarea/__tests__/__snapshots__/Textarea.test.tsx.snap +4 -4
  66. package/lib/components/Timepicker/Timepicker.tsx +6 -2
  67. package/lib/components/Timepicker/__tests__/__snapshots__/Timepicker.test.tsx.snap +2 -2
  68. package/lib/components/WeekPicker/subcomponents/DatepickerInput.tsx +6 -3
  69. package/lib/components/index.ts +3 -0
  70. package/package.json +1 -1
@@ -0,0 +1,145 @@
1
+ import { afterAll, beforeAll, describe, expect, test, vi } from 'vitest';
2
+ import { fireEvent, render, screen } from '@testing-library/react';
3
+ import { ThemeContextProvider } from '../../../theme/useTheme';
4
+ import ErrorDialog from '../ErrorDialog';
5
+
6
+ const originalShowModal = HTMLDialogElement.prototype.showModal;
7
+ const originalClose = HTMLDialogElement.prototype.close;
8
+
9
+ beforeAll(() => {
10
+ HTMLDialogElement.prototype.showModal = vi.fn(function (
11
+ this: HTMLDialogElement
12
+ ) {
13
+ this.setAttribute('open', '');
14
+ });
15
+ HTMLDialogElement.prototype.close = vi.fn(function (this: HTMLDialogElement) {
16
+ this.removeAttribute('open');
17
+ });
18
+ });
19
+
20
+ afterAll(() => {
21
+ HTMLDialogElement.prototype.showModal = originalShowModal;
22
+ HTMLDialogElement.prototype.close = originalClose;
23
+ });
24
+
25
+ const renderErrorDialog = (
26
+ props: Partial<React.ComponentProps<typeof ErrorDialog>> = {}
27
+ ) =>
28
+ render(
29
+ <ThemeContextProvider>
30
+ <ErrorDialog
31
+ open
32
+ heading='Something went wrong'
33
+ errorCode='1601'
34
+ referenceCode='UCLCID-20e935c3'
35
+ onClose={() => {}}
36
+ {...props}
37
+ >
38
+ We could not complete this request.
39
+ </ErrorDialog>
40
+ </ThemeContextProvider>
41
+ );
42
+
43
+ describe('ErrorDialog', () => {
44
+ test('renders an accessible alert dialog with heading, body, and error code', () => {
45
+ renderErrorDialog();
46
+
47
+ expect(
48
+ screen.getByRole('alertdialog', { name: 'Something went wrong' })
49
+ ).toBeInTheDocument();
50
+ expect(
51
+ screen.getByText('We could not complete this request.')
52
+ ).toBeInTheDocument();
53
+ expect(screen.getByText('Error code: 1601')).toBeInTheDocument();
54
+ expect(
55
+ screen.getByText('Reference code: UCLCID-20e935c3')
56
+ ).toBeInTheDocument();
57
+ });
58
+
59
+ test('renders reference code after error code in the footer metadata', () => {
60
+ renderErrorDialog();
61
+
62
+ const errorCode = screen.getByText('Error code: 1601');
63
+ const referenceCode = screen.getByText('Reference code: UCLCID-20e935c3');
64
+
65
+ expect(errorCode.compareDocumentPosition(referenceCode)).toBe(
66
+ Node.DOCUMENT_POSITION_FOLLOWING
67
+ );
68
+ });
69
+
70
+ test('renders detail accordions and preserves new lines in values', () => {
71
+ renderErrorDialog({
72
+ details: [
73
+ {
74
+ label: 'HTTP Status Code',
75
+ value: 'HTTP status code: 404 (Not Found)',
76
+ },
77
+ {
78
+ label: 'User Details',
79
+ value:
80
+ 'username: j.bloggs\nlogin time: Fri Jan 16 2026 10:01:43 GMT+0000',
81
+ },
82
+ ],
83
+ });
84
+
85
+ expect(
86
+ screen.queryByText('HTTP status code: 404 (Not Found)')
87
+ ).not.toBeInTheDocument();
88
+
89
+ fireEvent.click(screen.getByRole('button', { name: 'HTTP Status Code' }));
90
+ expect(
91
+ screen.getByText('HTTP status code: 404 (Not Found)')
92
+ ).toBeInTheDocument();
93
+
94
+ fireEvent.click(screen.getByRole('button', { name: 'User Details' }));
95
+ expect(
96
+ screen.getAllByText(
97
+ (_, element) =>
98
+ element?.textContent ===
99
+ 'username: j.bloggs\nlogin time: Fri Jan 16 2026 10:01:43 GMT+0000'
100
+ )
101
+ ).not.toHaveLength(0);
102
+ });
103
+
104
+ test('calls onClose from the close icon and default primary action', () => {
105
+ const onClose = vi.fn();
106
+
107
+ renderErrorDialog({ onClose });
108
+
109
+ fireEvent.click(screen.getByRole('button', { name: 'Close error dialog' }));
110
+ fireEvent.click(screen.getByRole('button', { name: 'Close' }));
111
+
112
+ expect(onClose).toHaveBeenCalledTimes(2);
113
+ });
114
+
115
+ test('calls action handlers for primary and secondary actions', () => {
116
+ const onAction = vi.fn();
117
+ const onSecondaryAction = vi.fn();
118
+ const onClose = vi.fn();
119
+
120
+ renderErrorDialog({
121
+ onAction,
122
+ onSecondaryAction,
123
+ onClose,
124
+ primaryButton: 'Try again',
125
+ secondaryButton: 'Cancel',
126
+ });
127
+
128
+ fireEvent.click(screen.getByRole('button', { name: 'Try again' }));
129
+ fireEvent.click(screen.getByRole('button', { name: 'Cancel' }));
130
+
131
+ expect(onAction).toHaveBeenCalledTimes(1);
132
+ expect(onSecondaryAction).toHaveBeenCalledTimes(1);
133
+ expect(onClose).not.toHaveBeenCalled();
134
+ });
135
+
136
+ test('renders footer actions for valid falsey ReactNode labels', () => {
137
+ renderErrorDialog({
138
+ primaryButton: 0,
139
+ secondaryButton: '',
140
+ });
141
+
142
+ expect(screen.getByRole('button', { name: '0' })).toBeInTheDocument();
143
+ expect(screen.getByRole('button', { name: '' })).toBeInTheDocument();
144
+ });
145
+ });
@@ -0,0 +1,2 @@
1
+ export { default } from './ErrorDialog';
2
+ export type { ErrorDialogDetail, ErrorDialogProps } from './ErrorDialog';
@@ -2,10 +2,11 @@ import { HTMLAttributes, use } from 'react';
2
2
  import { css, cx } from '@emotion/css';
3
3
  import { FieldContext } from './Field';
4
4
  import { useTheme } from '../../theme';
5
+ import Text from '../Text';
5
6
 
6
7
  const NAME = 'ucl-uikit-field__helper-text';
7
8
 
8
- export interface HelperTextProps extends HTMLAttributes<HTMLDivElement> {
9
+ export interface HelperTextProps extends HTMLAttributes<HTMLSpanElement> {
9
10
  testId?: string;
10
11
  }
11
12
 
@@ -20,24 +21,22 @@ const HelperText = ({
20
21
  const { disabled } = use(FieldContext);
21
22
 
22
23
  const baseStyle = css`
23
- color: ${disabled
24
- ? theme.colour.text.disabled
25
- : theme.colour.text.secondary};
26
- font-family: ${theme.font.family.primary};
27
- font-size: ${theme.font.size.f16};
28
- line-height: ${theme.font.lineHeight.h120};
24
+ color: ${
25
+ disabled ? theme.colour.text.disabled : theme.colour.text.secondary
26
+ };
29
27
  `;
30
28
 
31
29
  const style = cx(NAME, baseStyle, className);
32
30
 
33
31
  return (
34
- <div
32
+ <Text
33
+ level='sm'
34
+ testId={testId}
35
35
  className={style}
36
- data-testid={testId}
37
36
  {...props}
38
37
  >
39
38
  {children}
40
- </div>
39
+ </Text>
41
40
  );
42
41
  };
43
42
 
@@ -34,7 +34,7 @@ exports[`Footer > snapshot: footer links provided 1`] = `
34
34
  >
35
35
  <a
36
36
  aria-label="Facebook"
37
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
37
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
38
38
  data-testid="ucl-uikit-footer__social-link"
39
39
  href="https://www.facebook.com/uclofficial/"
40
40
  target="_blank"
@@ -60,7 +60,7 @@ exports[`Footer > snapshot: footer links provided 1`] = `
60
60
  </a>
61
61
  <a
62
62
  aria-label="Flickr"
63
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
63
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
64
64
  data-testid="ucl-uikit-footer__social-link"
65
65
  href="https://www.flickr.com/groups/ucl/"
66
66
  target="_blank"
@@ -86,7 +86,7 @@ exports[`Footer > snapshot: footer links provided 1`] = `
86
86
  </a>
87
87
  <a
88
88
  aria-label="TikTok"
89
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
89
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
90
90
  data-testid="ucl-uikit-footer__social-link"
91
91
  href="https://www.tiktok.com/@uclofficial"
92
92
  target="_blank"
@@ -112,7 +112,7 @@ exports[`Footer > snapshot: footer links provided 1`] = `
112
112
  </a>
113
113
  <a
114
114
  aria-label="YouTube"
115
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
115
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
116
116
  data-testid="ucl-uikit-footer__social-link"
117
117
  href="https://www.youtube.com/ucltv"
118
118
  target="_blank"
@@ -138,7 +138,7 @@ exports[`Footer > snapshot: footer links provided 1`] = `
138
138
  </a>
139
139
  <a
140
140
  aria-label="SoundCloud"
141
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
141
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
142
142
  data-testid="ucl-uikit-footer__social-link"
143
143
  href="https://soundcloud.com/uclsound"
144
144
  target="_blank"
@@ -166,7 +166,7 @@ exports[`Footer > snapshot: footer links provided 1`] = `
166
166
  </a>
167
167
  <a
168
168
  aria-label="X social media platform"
169
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
169
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
170
170
  data-testid="ucl-uikit-footer__social-link"
171
171
  href="https://x.com/ucl"
172
172
  target="_blank"
@@ -192,7 +192,7 @@ exports[`Footer > snapshot: footer links provided 1`] = `
192
192
  </a>
193
193
  <a
194
194
  aria-label="Instagram"
195
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
195
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
196
196
  data-testid="ucl-uikit-footer__social-link"
197
197
  href="https://www.instagram.com/ucl/"
198
198
  target="_blank"
@@ -325,14 +325,14 @@ exports[`Footer > snapshot: nav links 1`] = `
325
325
  Category 1
326
326
  </h3>
327
327
  <a
328
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__nav-link css-1bu3np"
328
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__nav-link css-1w73vrx"
329
329
  data-testid="ucl-uikit-footer__nav-link"
330
330
  href="#"
331
331
  >
332
332
  Item 1
333
333
  </a>
334
334
  <a
335
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__nav-link css-1bu3np"
335
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__nav-link css-1w73vrx"
336
336
  data-testid="ucl-uikit-footer__nav-link"
337
337
  href="#"
338
338
  >
@@ -349,14 +349,14 @@ exports[`Footer > snapshot: nav links 1`] = `
349
349
  Category 2
350
350
  </h3>
351
351
  <a
352
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__nav-link css-1bu3np"
352
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__nav-link css-1w73vrx"
353
353
  data-testid="ucl-uikit-footer__nav-link"
354
354
  href="#"
355
355
  >
356
356
  Item 1
357
357
  </a>
358
358
  <a
359
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__nav-link css-1bu3np"
359
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__nav-link css-1w73vrx"
360
360
  data-testid="ucl-uikit-footer__nav-link"
361
361
  href="#"
362
362
  >
@@ -387,7 +387,7 @@ exports[`Footer > snapshot: nav links 1`] = `
387
387
  >
388
388
  <a
389
389
  aria-label="Facebook"
390
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
390
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
391
391
  data-testid="ucl-uikit-footer__social-link"
392
392
  href="https://www.facebook.com/uclofficial/"
393
393
  target="_blank"
@@ -413,7 +413,7 @@ exports[`Footer > snapshot: nav links 1`] = `
413
413
  </a>
414
414
  <a
415
415
  aria-label="Flickr"
416
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
416
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
417
417
  data-testid="ucl-uikit-footer__social-link"
418
418
  href="https://www.flickr.com/groups/ucl/"
419
419
  target="_blank"
@@ -439,7 +439,7 @@ exports[`Footer > snapshot: nav links 1`] = `
439
439
  </a>
440
440
  <a
441
441
  aria-label="TikTok"
442
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
442
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
443
443
  data-testid="ucl-uikit-footer__social-link"
444
444
  href="https://www.tiktok.com/@uclofficial"
445
445
  target="_blank"
@@ -465,7 +465,7 @@ exports[`Footer > snapshot: nav links 1`] = `
465
465
  </a>
466
466
  <a
467
467
  aria-label="YouTube"
468
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
468
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
469
469
  data-testid="ucl-uikit-footer__social-link"
470
470
  href="https://www.youtube.com/ucltv"
471
471
  target="_blank"
@@ -491,7 +491,7 @@ exports[`Footer > snapshot: nav links 1`] = `
491
491
  </a>
492
492
  <a
493
493
  aria-label="SoundCloud"
494
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
494
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
495
495
  data-testid="ucl-uikit-footer__social-link"
496
496
  href="https://soundcloud.com/uclsound"
497
497
  target="_blank"
@@ -519,7 +519,7 @@ exports[`Footer > snapshot: nav links 1`] = `
519
519
  </a>
520
520
  <a
521
521
  aria-label="X social media platform"
522
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
522
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
523
523
  data-testid="ucl-uikit-footer__social-link"
524
524
  href="https://x.com/ucl"
525
525
  target="_blank"
@@ -545,7 +545,7 @@ exports[`Footer > snapshot: nav links 1`] = `
545
545
  </a>
546
546
  <a
547
547
  aria-label="Instagram"
548
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
548
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
549
549
  data-testid="ucl-uikit-footer__social-link"
550
550
  href="https://www.instagram.com/ucl/"
551
551
  target="_blank"
@@ -691,7 +691,7 @@ exports[`Footer > snapshot: no nav links 1`] = `
691
691
  >
692
692
  <a
693
693
  aria-label="Facebook"
694
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
694
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
695
695
  data-testid="ucl-uikit-footer__social-link"
696
696
  href="https://www.facebook.com/uclofficial/"
697
697
  target="_blank"
@@ -717,7 +717,7 @@ exports[`Footer > snapshot: no nav links 1`] = `
717
717
  </a>
718
718
  <a
719
719
  aria-label="Flickr"
720
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
720
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
721
721
  data-testid="ucl-uikit-footer__social-link"
722
722
  href="https://www.flickr.com/groups/ucl/"
723
723
  target="_blank"
@@ -743,7 +743,7 @@ exports[`Footer > snapshot: no nav links 1`] = `
743
743
  </a>
744
744
  <a
745
745
  aria-label="TikTok"
746
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
746
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
747
747
  data-testid="ucl-uikit-footer__social-link"
748
748
  href="https://www.tiktok.com/@uclofficial"
749
749
  target="_blank"
@@ -769,7 +769,7 @@ exports[`Footer > snapshot: no nav links 1`] = `
769
769
  </a>
770
770
  <a
771
771
  aria-label="YouTube"
772
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
772
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
773
773
  data-testid="ucl-uikit-footer__social-link"
774
774
  href="https://www.youtube.com/ucltv"
775
775
  target="_blank"
@@ -795,7 +795,7 @@ exports[`Footer > snapshot: no nav links 1`] = `
795
795
  </a>
796
796
  <a
797
797
  aria-label="SoundCloud"
798
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
798
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
799
799
  data-testid="ucl-uikit-footer__social-link"
800
800
  href="https://soundcloud.com/uclsound"
801
801
  target="_blank"
@@ -823,7 +823,7 @@ exports[`Footer > snapshot: no nav links 1`] = `
823
823
  </a>
824
824
  <a
825
825
  aria-label="X social media platform"
826
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
826
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
827
827
  data-testid="ucl-uikit-footer__social-link"
828
828
  href="https://x.com/ucl"
829
829
  target="_blank"
@@ -849,7 +849,7 @@ exports[`Footer > snapshot: no nav links 1`] = `
849
849
  </a>
850
850
  <a
851
851
  aria-label="Instagram"
852
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-tc3pyp"
852
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-cwywro"
853
853
  data-testid="ucl-uikit-footer__social-link"
854
854
  href="https://www.instagram.com/ucl/"
855
855
  target="_blank"
@@ -51,7 +51,7 @@ exports[`Footer > snapshot: footer links provided 1`] = `
51
51
  >
52
52
  <a
53
53
  aria-label="Instagram"
54
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
54
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
55
55
  data-testid="ucl-uikit-footer__social-link"
56
56
  href="https://www.instagram.com/ucl/"
57
57
  target="_blank"
@@ -80,7 +80,7 @@ exports[`Footer > snapshot: footer links provided 1`] = `
80
80
  </a>
81
81
  <a
82
82
  aria-label="LinkedIn"
83
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
83
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
84
84
  data-testid="ucl-uikit-footer__social-link"
85
85
  href="https://www.linkedin.com/school/university-college-london/"
86
86
  target="_blank"
@@ -108,7 +108,7 @@ exports[`Footer > snapshot: footer links provided 1`] = `
108
108
  </a>
109
109
  <a
110
110
  aria-label="YouTube"
111
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
111
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
112
112
  data-testid="ucl-uikit-footer__social-link"
113
113
  href="https://www.youtube.com/ucltv"
114
114
  target="_blank"
@@ -134,7 +134,7 @@ exports[`Footer > snapshot: footer links provided 1`] = `
134
134
  </a>
135
135
  <a
136
136
  aria-label="TikTok"
137
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
137
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
138
138
  data-testid="ucl-uikit-footer__social-link"
139
139
  href="https://www.tiktok.com/@uclofficial"
140
140
  target="_blank"
@@ -160,7 +160,7 @@ exports[`Footer > snapshot: footer links provided 1`] = `
160
160
  </a>
161
161
  <a
162
162
  aria-label="Facebook"
163
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
163
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
164
164
  data-testid="ucl-uikit-footer__social-link"
165
165
  href="https://www.facebook.com/uclofficial/"
166
166
  target="_blank"
@@ -186,7 +186,7 @@ exports[`Footer > snapshot: footer links provided 1`] = `
186
186
  </a>
187
187
  <a
188
188
  aria-label="Bluesky"
189
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
189
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
190
190
  data-testid="ucl-uikit-footer__social-link"
191
191
  href="https://bsky.app/profile/ucl.ac.uk"
192
192
  target="_blank"
@@ -212,7 +212,7 @@ exports[`Footer > snapshot: footer links provided 1`] = `
212
212
  </a>
213
213
  <a
214
214
  aria-label="Threads"
215
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
215
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
216
216
  data-testid="ucl-uikit-footer__social-link"
217
217
  href="https://www.threads.com/@ucl"
218
218
  target="_blank"
@@ -239,7 +239,7 @@ exports[`Footer > snapshot: footer links provided 1`] = `
239
239
  </a>
240
240
  <a
241
241
  aria-label="SoundCloud"
242
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
242
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
243
243
  data-testid="ucl-uikit-footer__social-link"
244
244
  href="https://soundcloud.com/uclsound"
245
245
  target="_blank"
@@ -385,14 +385,14 @@ exports[`Footer > snapshot: nav links 1`] = `
385
385
  Category 1
386
386
  </h3>
387
387
  <a
388
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__nav-link css-138c06l"
388
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__nav-link css-7pftwz"
389
389
  data-testid="ucl-uikit-footer__nav-link"
390
390
  href="#"
391
391
  >
392
392
  Item 1
393
393
  </a>
394
394
  <a
395
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__nav-link css-138c06l"
395
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__nav-link css-7pftwz"
396
396
  data-testid="ucl-uikit-footer__nav-link"
397
397
  href="#"
398
398
  >
@@ -409,14 +409,14 @@ exports[`Footer > snapshot: nav links 1`] = `
409
409
  Category 2
410
410
  </h3>
411
411
  <a
412
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__nav-link css-138c06l"
412
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__nav-link css-7pftwz"
413
413
  data-testid="ucl-uikit-footer__nav-link"
414
414
  href="#"
415
415
  >
416
416
  Item 1
417
417
  </a>
418
418
  <a
419
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__nav-link css-138c06l"
419
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__nav-link css-7pftwz"
420
420
  data-testid="ucl-uikit-footer__nav-link"
421
421
  href="#"
422
422
  >
@@ -467,7 +467,7 @@ exports[`Footer > snapshot: nav links 1`] = `
467
467
  >
468
468
  <a
469
469
  aria-label="Instagram"
470
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
470
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
471
471
  data-testid="ucl-uikit-footer__social-link"
472
472
  href="https://www.instagram.com/ucl/"
473
473
  target="_blank"
@@ -496,7 +496,7 @@ exports[`Footer > snapshot: nav links 1`] = `
496
496
  </a>
497
497
  <a
498
498
  aria-label="LinkedIn"
499
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
499
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
500
500
  data-testid="ucl-uikit-footer__social-link"
501
501
  href="https://www.linkedin.com/school/university-college-london/"
502
502
  target="_blank"
@@ -524,7 +524,7 @@ exports[`Footer > snapshot: nav links 1`] = `
524
524
  </a>
525
525
  <a
526
526
  aria-label="YouTube"
527
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
527
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
528
528
  data-testid="ucl-uikit-footer__social-link"
529
529
  href="https://www.youtube.com/ucltv"
530
530
  target="_blank"
@@ -550,7 +550,7 @@ exports[`Footer > snapshot: nav links 1`] = `
550
550
  </a>
551
551
  <a
552
552
  aria-label="TikTok"
553
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
553
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
554
554
  data-testid="ucl-uikit-footer__social-link"
555
555
  href="https://www.tiktok.com/@uclofficial"
556
556
  target="_blank"
@@ -576,7 +576,7 @@ exports[`Footer > snapshot: nav links 1`] = `
576
576
  </a>
577
577
  <a
578
578
  aria-label="Facebook"
579
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
579
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
580
580
  data-testid="ucl-uikit-footer__social-link"
581
581
  href="https://www.facebook.com/uclofficial/"
582
582
  target="_blank"
@@ -602,7 +602,7 @@ exports[`Footer > snapshot: nav links 1`] = `
602
602
  </a>
603
603
  <a
604
604
  aria-label="Bluesky"
605
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
605
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
606
606
  data-testid="ucl-uikit-footer__social-link"
607
607
  href="https://bsky.app/profile/ucl.ac.uk"
608
608
  target="_blank"
@@ -628,7 +628,7 @@ exports[`Footer > snapshot: nav links 1`] = `
628
628
  </a>
629
629
  <a
630
630
  aria-label="Threads"
631
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
631
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
632
632
  data-testid="ucl-uikit-footer__social-link"
633
633
  href="https://www.threads.com/@ucl"
634
634
  target="_blank"
@@ -655,7 +655,7 @@ exports[`Footer > snapshot: nav links 1`] = `
655
655
  </a>
656
656
  <a
657
657
  aria-label="SoundCloud"
658
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
658
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
659
659
  data-testid="ucl-uikit-footer__social-link"
660
660
  href="https://soundcloud.com/uclsound"
661
661
  target="_blank"
@@ -830,7 +830,7 @@ exports[`Footer > snapshot: no nav links 1`] = `
830
830
  >
831
831
  <a
832
832
  aria-label="Instagram"
833
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
833
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
834
834
  data-testid="ucl-uikit-footer__social-link"
835
835
  href="https://www.instagram.com/ucl/"
836
836
  target="_blank"
@@ -859,7 +859,7 @@ exports[`Footer > snapshot: no nav links 1`] = `
859
859
  </a>
860
860
  <a
861
861
  aria-label="LinkedIn"
862
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
862
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
863
863
  data-testid="ucl-uikit-footer__social-link"
864
864
  href="https://www.linkedin.com/school/university-college-london/"
865
865
  target="_blank"
@@ -887,7 +887,7 @@ exports[`Footer > snapshot: no nav links 1`] = `
887
887
  </a>
888
888
  <a
889
889
  aria-label="YouTube"
890
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
890
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
891
891
  data-testid="ucl-uikit-footer__social-link"
892
892
  href="https://www.youtube.com/ucltv"
893
893
  target="_blank"
@@ -913,7 +913,7 @@ exports[`Footer > snapshot: no nav links 1`] = `
913
913
  </a>
914
914
  <a
915
915
  aria-label="TikTok"
916
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
916
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
917
917
  data-testid="ucl-uikit-footer__social-link"
918
918
  href="https://www.tiktok.com/@uclofficial"
919
919
  target="_blank"
@@ -939,7 +939,7 @@ exports[`Footer > snapshot: no nav links 1`] = `
939
939
  </a>
940
940
  <a
941
941
  aria-label="Facebook"
942
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
942
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
943
943
  data-testid="ucl-uikit-footer__social-link"
944
944
  href="https://www.facebook.com/uclofficial/"
945
945
  target="_blank"
@@ -965,7 +965,7 @@ exports[`Footer > snapshot: no nav links 1`] = `
965
965
  </a>
966
966
  <a
967
967
  aria-label="Bluesky"
968
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
968
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
969
969
  data-testid="ucl-uikit-footer__social-link"
970
970
  href="https://bsky.app/profile/ucl.ac.uk"
971
971
  target="_blank"
@@ -991,7 +991,7 @@ exports[`Footer > snapshot: no nav links 1`] = `
991
991
  </a>
992
992
  <a
993
993
  aria-label="Threads"
994
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
994
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
995
995
  data-testid="ucl-uikit-footer__social-link"
996
996
  href="https://www.threads.com/@ucl"
997
997
  target="_blank"
@@ -1018,7 +1018,7 @@ exports[`Footer > snapshot: no nav links 1`] = `
1018
1018
  </a>
1019
1019
  <a
1020
1020
  aria-label="SoundCloud"
1021
- class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1x2yumo"
1021
+ class="ucl-uikit-base-link ucl-uikit-link ucl-uikit-footer__social-link css-1j633gx"
1022
1022
  data-testid="ucl-uikit-footer__social-link"
1023
1023
  href="https://soundcloud.com/uclsound"
1024
1024
  target="_blank"