uikit-react-public 0.11.16 → 0.11.24

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 (142) hide show
  1. package/dist/components/Calendar/Calendar.d.ts +3 -0
  2. package/dist/components/Calendar/Calendar.stories.d.ts +42 -0
  3. package/dist/components/Calendar/Calendar.types.d.ts +18 -0
  4. package/dist/components/Calendar/index.d.ts +2 -0
  5. package/dist/components/Calendar/subcomponents/AcademicWeek.d.ts +5 -0
  6. package/dist/components/Calendar/subcomponents/AcademicWeeks.d.ts +7 -0
  7. package/dist/components/Calendar/subcomponents/ColumnHeading.d.ts +7 -0
  8. package/dist/components/Calendar/subcomponents/Controls.d.ts +6 -0
  9. package/dist/components/Calendar/subcomponents/Day.d.ts +12 -0
  10. package/dist/components/{Datepicker/subcomponents/Day → Calendar/subcomponents}/Day.stories.d.ts +9 -1
  11. package/dist/components/Calendar/subcomponents/EventDot.d.ts +6 -0
  12. package/dist/components/Calendar/subcomponents/Grid.d.ts +11 -0
  13. package/dist/components/Calendar/subcomponents/index.d.ts +7 -0
  14. package/dist/components/Calendar/utils/getAcademicWeekNumbers/getAcademicWeekNumbers.d.ts +24 -0
  15. package/dist/components/Calendar/utils/index.d.ts +4 -0
  16. package/dist/components/Calendar/utils/normaliseMonth/normaliseMonth.d.ts +9 -0
  17. package/dist/components/Calendar/utils/normaliseMonth/normaliseMonth.test.d.ts +1 -0
  18. package/dist/components/Calendar/utils/parseDateFromString/parseDateFromString.d.ts +9 -0
  19. package/dist/components/Calendar/utils/parseDateFromString/parseDateFromString.test.d.ts +1 -0
  20. package/dist/components/Datepicker/Datepicker.d.ts +3 -12
  21. package/dist/components/Datepicker/Datepicker.stories.d.ts +16 -3
  22. package/dist/components/Datepicker/Datepicker.types.d.ts +23 -0
  23. package/dist/components/Datepicker/index.d.ts +1 -1
  24. package/dist/components/Datepicker/subcomponents/CustomDatepicker.d.ts +17 -0
  25. package/dist/components/Datepicker/subcomponents/DatepickerInput.d.ts +10 -0
  26. package/dist/components/Datepicker/subcomponents/NativeDatepicker.d.ts +6 -0
  27. package/dist/components/Datepicker/subcomponents/Panel.d.ts +6 -0
  28. package/dist/components/Datepicker/subcomponents/VisibleField.d.ts +12 -0
  29. package/dist/components/Datepicker/subcomponents/index.d.ts +5 -7
  30. package/dist/components/Datepicker/utils/dateToLocaleISOString/dateToLocaleISOString.d.ts +17 -0
  31. package/dist/components/Datepicker/utils/dateToLocaleISOString/dateToLocaleISOString.test.d.ts +1 -0
  32. package/dist/components/Datepicker/utils/index.d.ts +2 -2
  33. package/dist/components/Datepicker/utils/parseInputValue/parseInputValue.d.ts +11 -0
  34. package/dist/components/Datepicker/utils/parseInputValue/parseInputValue.test.d.ts +1 -0
  35. package/dist/components/Footer/Footer.d.ts +1 -1
  36. package/dist/components/Header/Header.d.ts +5 -4
  37. package/dist/components/Header/index.d.ts +1 -1
  38. package/dist/components/Menu/Menu.d.ts +2 -1
  39. package/dist/components/Menu/MenuContent.d.ts +1 -0
  40. package/dist/components/Select/Select.stories.d.ts +1 -1
  41. package/dist/components/Select/Select.types.d.ts +10 -50
  42. package/dist/components/Select/index.d.ts +1 -1
  43. package/dist/components/Select/subcomponents/CustomSelect.d.ts +2 -1
  44. package/dist/components/index.d.ts +2 -0
  45. package/dist/index.js +3332 -3063
  46. package/lib/components/Calendar/Calendar.stories.tsx +209 -0
  47. package/lib/components/Calendar/Calendar.tsx +121 -0
  48. package/lib/components/Calendar/Calendar.types.ts +21 -0
  49. package/lib/components/Calendar/__tests__/Calendar.test.tsx +71 -0
  50. package/lib/components/Calendar/__tests__/__snapshots__/Calendar.test.tsx.snap +1218 -0
  51. package/lib/components/Calendar/index.ts +6 -0
  52. package/lib/components/Calendar/subcomponents/AcademicWeek.tsx +36 -0
  53. package/lib/components/Calendar/subcomponents/AcademicWeeks.tsx +46 -0
  54. package/lib/components/Calendar/subcomponents/ColumnHeading.tsx +40 -0
  55. package/lib/components/{Datepicker/subcomponents/MonthSelector/MonthSelector.tsx → Calendar/subcomponents/Controls.tsx} +17 -17
  56. package/lib/components/{Datepicker/subcomponents/Day → Calendar/subcomponents}/Day.stories.tsx +30 -7
  57. package/lib/components/Calendar/subcomponents/Day.tsx +130 -0
  58. package/lib/components/Calendar/subcomponents/EventDot.tsx +40 -0
  59. package/lib/components/Calendar/subcomponents/Grid.tsx +117 -0
  60. package/lib/components/Calendar/subcomponents/index.ts +7 -0
  61. package/lib/components/Calendar/utils/getAcademicWeekNumbers/getAcademicWeekNumbers.test.ts +104 -0
  62. package/lib/components/Calendar/utils/getAcademicWeekNumbers/getAcademicWeekNumbers.ts +85 -0
  63. package/lib/components/{Datepicker → Calendar}/utils/getDatesForCalendarGrid/getDatesForCalendarGrid.test.ts +29 -65
  64. package/lib/components/{Datepicker → Calendar}/utils/getDatesForCalendarGrid/getDatesForCalendarGrid.ts +11 -43
  65. package/lib/components/Calendar/utils/index.ts +4 -0
  66. package/lib/components/Calendar/utils/normaliseMonth/normaliseMonth.test.ts +40 -0
  67. package/lib/components/Calendar/utils/normaliseMonth/normaliseMonth.ts +16 -0
  68. package/lib/components/Calendar/utils/parseDateFromString/parseDateFromString.test.ts +15 -0
  69. package/lib/components/Calendar/utils/parseDateFromString/parseDateFromString.ts +19 -0
  70. package/lib/components/Datepicker/Datepicker.stories.tsx +220 -23
  71. package/lib/components/Datepicker/Datepicker.tsx +34 -137
  72. package/lib/components/Datepicker/Datepicker.types.ts +38 -0
  73. package/lib/components/Datepicker/__tests__/Datepicker.test.tsx +53 -112
  74. package/lib/components/Datepicker/__tests__/__snapshots__/Datepicker.test.tsx.snap +92 -638
  75. package/lib/components/Datepicker/index.ts +1 -1
  76. package/lib/components/Datepicker/subcomponents/CustomDatepicker.tsx +209 -0
  77. package/lib/components/Datepicker/subcomponents/DatepickerInput.tsx +74 -0
  78. package/lib/components/Datepicker/subcomponents/NativeDatepicker.tsx +70 -0
  79. package/lib/components/Datepicker/subcomponents/Panel.tsx +32 -0
  80. package/lib/components/Datepicker/subcomponents/VisibleField.tsx +104 -0
  81. package/lib/components/Datepicker/subcomponents/index.ts +5 -7
  82. package/lib/components/Datepicker/utils/dateToLocaleISOString/dateToLocaleISOString.test.ts +32 -0
  83. package/lib/components/Datepicker/utils/dateToLocaleISOString/dateToLocaleISOString.ts +23 -0
  84. package/lib/components/Datepicker/utils/index.ts +2 -2
  85. package/lib/components/Datepicker/utils/parseInputValue/parseInputValue.test.ts +110 -0
  86. package/lib/components/Datepicker/utils/parseInputValue/parseInputValue.ts +57 -0
  87. package/lib/components/Footer/Footer.tsx +3 -3
  88. package/lib/components/Footer/__tests__/__snapshots__/Footer.test.tsx.snap +6 -6
  89. package/lib/components/Header/Header.tsx +32 -33
  90. package/lib/components/Header/HeaderMenu.tsx +9 -2
  91. package/lib/components/Header/__tests__/__snapshots__/Header.test.tsx.snap +40 -48
  92. package/lib/components/Header/index.ts +5 -1
  93. package/lib/components/Menu/Menu.tsx +3 -0
  94. package/lib/components/Menu/MenuContent.tsx +4 -1
  95. package/lib/components/Select/Select.stories.tsx +38 -39
  96. package/lib/components/Select/Select.tsx +4 -18
  97. package/lib/components/Select/Select.types.ts +30 -69
  98. package/lib/components/Select/__tests__/Select.test.tsx +6 -6
  99. package/lib/components/Select/__tests__/__snapshots__/Select.test.tsx.snap +1 -1
  100. package/lib/components/Select/index.ts +1 -1
  101. package/lib/components/Select/subcomponents/CustomSelect.tsx +22 -12
  102. package/lib/components/Select/subcomponents/NativeSelect.tsx +7 -3
  103. package/lib/components/Select/subcomponents/Panel.tsx +4 -4
  104. package/lib/components/Select/subcomponents/VisibleField.tsx +1 -1
  105. package/lib/components/index.ts +3 -0
  106. package/package.json +4 -4
  107. package/LICENSE +0 -9
  108. package/dist/components/Datepicker/subcomponents/CalendarGrid/CalendarGrid.d.ts +0 -6
  109. package/dist/components/Datepicker/subcomponents/CalendarGrid/index.d.ts +0 -1
  110. package/dist/components/Datepicker/subcomponents/CalendarMenu/CalendarMenu.d.ts +0 -8
  111. package/dist/components/Datepicker/subcomponents/CalendarMenu/index.d.ts +0 -1
  112. package/dist/components/Datepicker/subcomponents/ColumnHeadings/ColumnHeadings.d.ts +0 -2
  113. package/dist/components/Datepicker/subcomponents/ColumnHeadings/index.d.ts +0 -1
  114. package/dist/components/Datepicker/subcomponents/DateField/DateField.d.ts +0 -7
  115. package/dist/components/Datepicker/subcomponents/DateField/index.d.ts +0 -1
  116. package/dist/components/Datepicker/subcomponents/Day/Day.d.ts +0 -10
  117. package/dist/components/Datepicker/subcomponents/Day/index.d.ts +0 -1
  118. package/dist/components/Datepicker/subcomponents/MonthSelector/MonthSelector.d.ts +0 -6
  119. package/dist/components/Datepicker/subcomponents/MonthSelector/index.d.ts +0 -1
  120. package/dist/components/Datepicker/subcomponents/Native/Native.d.ts +0 -9
  121. package/dist/components/Datepicker/subcomponents/Native/index.d.ts +0 -1
  122. package/dist/components/Datepicker/utils/parseDateForDateField/parseDateForDateField.d.ts +0 -20
  123. package/lib/components/Datepicker/subcomponents/CalendarGrid/CalendarGrid.tsx +0 -59
  124. package/lib/components/Datepicker/subcomponents/CalendarGrid/index.ts +0 -1
  125. package/lib/components/Datepicker/subcomponents/CalendarMenu/CalendarMenu.tsx +0 -64
  126. package/lib/components/Datepicker/subcomponents/CalendarMenu/index.ts +0 -1
  127. package/lib/components/Datepicker/subcomponents/ColumnHeadings/ColumnHeadings.tsx +0 -35
  128. package/lib/components/Datepicker/subcomponents/ColumnHeadings/index.ts +0 -1
  129. package/lib/components/Datepicker/subcomponents/DateField/DateField.tsx +0 -155
  130. package/lib/components/Datepicker/subcomponents/DateField/__tests__/DateField.test.tsx +0 -191
  131. package/lib/components/Datepicker/subcomponents/DateField/index.ts +0 -1
  132. package/lib/components/Datepicker/subcomponents/Day/Day.tsx +0 -94
  133. package/lib/components/Datepicker/subcomponents/Day/index.ts +0 -1
  134. package/lib/components/Datepicker/subcomponents/MonthSelector/index.ts +0 -1
  135. package/lib/components/Datepicker/subcomponents/Native/Native.tsx +0 -59
  136. package/lib/components/Datepicker/subcomponents/Native/index.ts +0 -1
  137. package/lib/components/Datepicker/utils/parseDateForDateField/parseDateForDateField.test.ts +0 -41
  138. package/lib/components/Datepicker/utils/parseDateForDateField/parseDateForDateField.ts +0 -48
  139. /package/dist/components/{Datepicker/subcomponents/DateField/__tests__/DateField.test.d.ts → Calendar/__tests__/Calendar.test.d.ts} +0 -0
  140. /package/dist/components/{Datepicker/utils/getDatesForCalendarGrid/getDatesForCalendarGrid.test.d.ts → Calendar/utils/getAcademicWeekNumbers/getAcademicWeekNumbers.test.d.ts} +0 -0
  141. /package/dist/components/{Datepicker → Calendar}/utils/getDatesForCalendarGrid/getDatesForCalendarGrid.d.ts +0 -0
  142. /package/dist/components/{Datepicker/utils/parseDateForDateField/parseDateForDateField.test.d.ts → Calendar/utils/getDatesForCalendarGrid/getDatesForCalendarGrid.test.d.ts} +0 -0
@@ -1,147 +1,88 @@
1
- import {
2
- describe,
3
- test,
4
- expect,
5
- vi,
6
- afterEach,
7
- beforeAll,
8
- afterAll,
9
- } from 'vitest';
10
- import {
11
- render,
12
- screen,
13
- fireEvent,
14
- cleanup,
15
- } from '@testing-library/react';
1
+ import { describe, test, expect, vi } from 'vitest';
2
+ import { render, screen, fireEvent } from '@testing-library/react';
16
3
  import { ThemeContextProvider } from '../../../theme';
17
- import Datepicker from '../Datepicker';
4
+ import Datepicker from '..';
5
+
6
+ const defaultTestId = 'ucl-uikit-datepicker';
18
7
 
19
8
  const customRender = (ui: React.ReactElement) => {
20
9
  return render(ui, {
21
10
  wrapper: ({ children }) => (
22
- <ThemeContextProvider>
23
- {children}
24
- </ThemeContextProvider>
11
+ <ThemeContextProvider>{children}</ThemeContextProvider>
25
12
  ),
26
13
  });
27
14
  };
28
15
 
29
16
  describe('Datepicker', () => {
30
- beforeAll(() => {
31
- // Snapshot tests will fail because the Calendar Grid includes styling for "today's date".
32
- // Therefore, we need to use Vitest to mock the current date.
33
- vi.useFakeTimers();
34
- vi.setSystemTime(new Date('2025-03-10')); // Arbitrary fixed date -- Alex's birthday :)
35
- });
36
-
37
- afterAll(() => {
38
- vi.useRealTimers();
39
- });
40
-
41
- afterEach(() => {
42
- cleanup();
43
- vi.resetAllMocks();
44
- });
17
+ // Snapshot tests
45
18
 
46
19
  test('Snapshot: no date provided', () => {
47
- const renderResult = customRender(
48
- <Datepicker
49
- date={null}
50
- onDateChange={vi.fn()}
51
- />
52
- );
53
- expect(
54
- renderResult.container.firstChild
55
- ).toMatchSnapshot();
20
+ const renderResult = customRender(<Datepicker />);
21
+ expect(renderResult.container.firstChild).toMatchSnapshot();
56
22
  });
57
23
 
58
- test('Snapshot: date provided', () => {
24
+ test('Snapshot: with date provided', () => {
59
25
  const renderResult = customRender(
60
- <Datepicker
61
- date={new Date('2025-02-04')}
62
- onDateChange={vi.fn()}
63
- />
26
+ <Datepicker value={new Date('2025-03-10')} />
64
27
  );
65
- expect(
66
- renderResult.container.firstChild
67
- ).toMatchSnapshot();
28
+ expect(renderResult.container.firstChild).toMatchSnapshot();
68
29
  });
69
30
 
70
- test('Snapshot: with :focus & date provided', () => {
71
- const testId = 'abc';
72
- const renderResult = customRender(
73
- <Datepicker
74
- date={new Date('2025-02-04')}
75
- onDateChange={vi.fn()}
76
- testId={testId}
77
- />
78
- );
79
- const dateField = screen.getByTestId(
80
- testId + '-date-field'
81
- );
82
- fireEvent.focus(dateField);
83
- expect(
84
- renderResult.container.firstChild
85
- ).toMatchSnapshot();
31
+ // Unit tests
32
+
33
+ test('Can be found via default test ID', () => {
34
+ customRender(<Datepicker />);
35
+ const datepicker = screen.getByTestId(defaultTestId);
36
+ expect(datepicker).toBeInTheDocument();
86
37
  });
87
38
 
88
- test('Renders without crashing', () => {
89
- const testId = 'abc';
90
- customRender(
91
- <Datepicker
92
- date={null}
93
- onDateChange={vi.fn()}
94
- testId={testId}
95
- />
96
- );
97
- const datepicker = screen.getByTestId(testId);
39
+ test('Can be found via custom test id', () => {
40
+ const customTestId = '123';
41
+ customRender(<Datepicker testId={customTestId} />);
42
+ const datepicker = screen.getByTestId(customTestId);
98
43
  expect(datepicker).toBeInTheDocument();
99
44
  });
100
45
 
101
- test('Calendar Menu appears on :focus', () => {
102
- const testId = 'abc';
46
+ test('Input value reflects the date', () => {
47
+ customRender(<Datepicker value={new Date('2025-03-10')} />);
48
+ const input = screen.getByTestId('ucl-uikit-datepicker__input');
49
+ expect(input).toHaveValue('10/03/2025');
50
+ });
51
+
52
+ test('Calendar appears on input focus', async () => {
53
+ customRender(<Datepicker />);
54
+ const input = screen.getByTestId('ucl-uikit-datepicker__input');
55
+
56
+ // Calendar should not be visible initially
57
+ expect(screen.queryByTestId('ucl-uikit-calendar')).not.toBeInTheDocument();
58
+
59
+ fireEvent.focus(input);
60
+
61
+ // Calendar should now be visible
62
+ expect(screen.getByTestId('ucl-uikit-calendar')).toBeInTheDocument();
63
+ });
64
+
65
+ test('value after minDate is set to null automatically', () => {
66
+ const onValueChange = vi.fn();
103
67
  customRender(
104
68
  <Datepicker
105
- date={null}
106
- onDateChange={vi.fn()}
107
- testId={testId}
69
+ value={new Date('2025-01-10')} // Before minDate
70
+ minDate='2025-02-01'
71
+ onValueChange={onValueChange}
108
72
  />
109
73
  );
110
- let calendarMenu = screen.queryByTestId(
111
- testId + '-calendar-menu'
112
- );
113
- expect(calendarMenu).not.toBeInTheDocument();
114
- const dateField = screen.getByTestId(testId);
115
- fireEvent.focus(dateField);
116
- calendarMenu = screen.getByTestId(
117
- testId + '-calendar-menu'
118
- );
119
- expect(calendarMenu).toBeInTheDocument();
74
+ expect(onValueChange).toHaveBeenCalledWith(null);
120
75
  });
121
76
 
122
- test('Calendar Menu disappears on :blur', () => {
123
- const testId = 'abc';
77
+ test('value after maxDate is set to null automatically', () => {
78
+ const onValueChange = vi.fn();
124
79
  customRender(
125
80
  <Datepicker
126
- date={null}
127
- onDateChange={vi.fn()}
128
- testId={testId}
81
+ value={new Date('2025-03-10')} // After maxDate
82
+ maxDate='2025-01-31'
83
+ onValueChange={onValueChange}
129
84
  />
130
85
  );
131
- const dateField = screen.getByTestId(
132
- testId + '-date-field'
133
- );
134
- fireEvent.focus(dateField);
135
- let calendarMenu = screen.getByTestId(
136
- testId + '-calendar-menu'
137
- ) as HTMLElement | null;
138
- expect(calendarMenu).toBeInTheDocument();
139
- fireEvent.blur(dateField);
140
- calendarMenu = screen.queryByTestId(
141
- testId + '-calendar-menu'
142
- ) as HTMLElement | null;
143
- expect(calendarMenu).not.toBeInTheDocument();
86
+ expect(onValueChange).toHaveBeenCalledWith(null);
144
87
  });
145
-
146
- // Additonal tests can be added here
147
88
  });