@arbor-education/design-system.components 4.6.0 → 4.7.0-alpha.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 (275) hide show
  1. package/.changeset/twenty-groups-wonder.md +5 -0
  2. package/.changeset/yellow-falcons-search.md +5 -0
  3. package/dist/components/button/Button.story.d.ts +47 -0
  4. package/dist/components/button/Button.story.d.ts.map +1 -0
  5. package/dist/components/button/Button.story.js +123 -0
  6. package/dist/components/button/Button.story.js.map +1 -0
  7. package/dist/components/button/ButtonUsageExample.d.ts +2 -0
  8. package/dist/components/button/ButtonUsageExample.d.ts.map +1 -0
  9. package/dist/components/button/ButtonUsageExample.js +11 -0
  10. package/dist/components/button/ButtonUsageExample.js.map +1 -0
  11. package/dist/components/combobox/useElementWidth.d.ts +2 -0
  12. package/dist/components/combobox/useElementWidth.d.ts.map +1 -0
  13. package/dist/components/combobox/useElementWidth.js +31 -0
  14. package/dist/components/combobox/useElementWidth.js.map +1 -0
  15. package/dist/components/combobox/useVisibleChips.d.ts +21 -0
  16. package/dist/components/combobox/useVisibleChips.d.ts.map +1 -0
  17. package/dist/components/combobox/useVisibleChips.js +59 -0
  18. package/dist/components/combobox/useVisibleChips.js.map +1 -0
  19. package/dist/components/combobox/useVisibleChips.test.d.ts +2 -0
  20. package/dist/components/combobox/useVisibleChips.test.d.ts.map +1 -0
  21. package/dist/components/combobox/useVisibleChips.test.js +81 -0
  22. package/dist/components/combobox/useVisibleChips.test.js.map +1 -0
  23. package/dist/components/heading/HeadingInnerContainer.d.ts +5 -0
  24. package/dist/components/heading/HeadingInnerContainer.d.ts.map +1 -0
  25. package/dist/components/heading/HeadingInnerContainer.js +7 -0
  26. package/dist/components/heading/HeadingInnerContainer.js.map +1 -0
  27. package/dist/components/icoText/IcoText.d.ts +37 -0
  28. package/dist/components/icoText/IcoText.d.ts.map +1 -0
  29. package/dist/components/icoText/IcoText.js +29 -0
  30. package/dist/components/icoText/IcoText.js.map +1 -0
  31. package/dist/components/icoText/IcoText.stories.d.ts +60 -0
  32. package/dist/components/icoText/IcoText.stories.d.ts.map +1 -0
  33. package/dist/components/icoText/IcoText.stories.js +319 -0
  34. package/dist/components/icoText/IcoText.stories.js.map +1 -0
  35. package/dist/components/icoText/IcoText.test.d.ts +2 -0
  36. package/dist/components/icoText/IcoText.test.d.ts.map +1 -0
  37. package/dist/components/icoText/IcoText.test.js +27 -0
  38. package/dist/components/icoText/IcoText.test.js.map +1 -0
  39. package/dist/components/pill/Pill.d.ts.map +1 -1
  40. package/dist/components/pill/Pill.js +1 -1
  41. package/dist/components/pill/Pill.js.map +1 -1
  42. package/dist/components/sidebarNav/SidebarNav.d.ts +46 -0
  43. package/dist/components/sidebarNav/SidebarNav.d.ts.map +1 -0
  44. package/dist/components/sidebarNav/SidebarNav.js +102 -0
  45. package/dist/components/sidebarNav/SidebarNav.js.map +1 -0
  46. package/dist/components/sidebarNav/SidebarNav.stories.d.ts +61 -0
  47. package/dist/components/sidebarNav/SidebarNav.stories.d.ts.map +1 -0
  48. package/dist/components/sidebarNav/SidebarNav.stories.js +253 -0
  49. package/dist/components/sidebarNav/SidebarNav.stories.js.map +1 -0
  50. package/dist/components/sidebarNav/SidebarNav.test.d.ts +2 -0
  51. package/dist/components/sidebarNav/SidebarNav.test.d.ts.map +1 -0
  52. package/dist/components/sidebarNav/SidebarNav.test.js +240 -0
  53. package/dist/components/sidebarNav/SidebarNav.test.js.map +1 -0
  54. package/dist/components/sidebarNav/SidebarNavContext.d.ts +13 -0
  55. package/dist/components/sidebarNav/SidebarNavContext.d.ts.map +1 -0
  56. package/dist/components/sidebarNav/SidebarNavContext.js +15 -0
  57. package/dist/components/sidebarNav/SidebarNavContext.js.map +1 -0
  58. package/dist/components/sidebarNav/SidebarNavGroup.d.ts +10 -0
  59. package/dist/components/sidebarNav/SidebarNavGroup.d.ts.map +1 -0
  60. package/dist/components/sidebarNav/SidebarNavGroup.js +16 -0
  61. package/dist/components/sidebarNav/SidebarNavGroup.js.map +1 -0
  62. package/dist/components/sidebarNav/SidebarNavItem.d.ts +32 -0
  63. package/dist/components/sidebarNav/SidebarNavItem.d.ts.map +1 -0
  64. package/dist/components/sidebarNav/SidebarNavItem.js +44 -0
  65. package/dist/components/sidebarNav/SidebarNavItem.js.map +1 -0
  66. package/dist/components/sidebarNav/SidebarNavItemFavourite.d.ts +8 -0
  67. package/dist/components/sidebarNav/SidebarNavItemFavourite.d.ts.map +1 -0
  68. package/dist/components/sidebarNav/SidebarNavItemFavourite.js +14 -0
  69. package/dist/components/sidebarNav/SidebarNavItemFavourite.js.map +1 -0
  70. package/dist/components/sidebarNav/SidebarNavPanel.d.ts +4 -0
  71. package/dist/components/sidebarNav/SidebarNavPanel.d.ts.map +1 -0
  72. package/dist/components/sidebarNav/SidebarNavPanel.js +9 -0
  73. package/dist/components/sidebarNav/SidebarNavPanel.js.map +1 -0
  74. package/dist/components/sidebarNav/SidebarNavPanelNav.d.ts +10 -0
  75. package/dist/components/sidebarNav/SidebarNavPanelNav.d.ts.map +1 -0
  76. package/dist/components/sidebarNav/SidebarNavPanelNav.js +21 -0
  77. package/dist/components/sidebarNav/SidebarNavPanelNav.js.map +1 -0
  78. package/dist/components/sidebarNav/SidebarNavRail.d.ts +6 -0
  79. package/dist/components/sidebarNav/SidebarNavRail.d.ts.map +1 -0
  80. package/dist/components/sidebarNav/SidebarNavRail.js +7 -0
  81. package/dist/components/sidebarNav/SidebarNavRail.js.map +1 -0
  82. package/dist/components/sidebarNav/SidebarNavRailItem.d.ts +10 -0
  83. package/dist/components/sidebarNav/SidebarNavRailItem.d.ts.map +1 -0
  84. package/dist/components/sidebarNav/SidebarNavRailItem.js +25 -0
  85. package/dist/components/sidebarNav/SidebarNavRailItem.js.map +1 -0
  86. package/dist/components/sidebarNav/SidebarNavRailList.d.ts +4 -0
  87. package/dist/components/sidebarNav/SidebarNavRailList.d.ts.map +1 -0
  88. package/dist/components/sidebarNav/SidebarNavRailList.js +7 -0
  89. package/dist/components/sidebarNav/SidebarNavRailList.js.map +1 -0
  90. package/dist/components/sidebarNav/SidebarNavRailSlot.d.ts +6 -0
  91. package/dist/components/sidebarNav/SidebarNavRailSlot.d.ts.map +1 -0
  92. package/dist/components/sidebarNav/SidebarNavRailSlot.js +7 -0
  93. package/dist/components/sidebarNav/SidebarNavRailSlot.js.map +1 -0
  94. package/dist/components/sidebarNav/SidebarNavSeparator.d.ts +6 -0
  95. package/dist/components/sidebarNav/SidebarNavSeparator.d.ts.map +1 -0
  96. package/dist/components/sidebarNav/SidebarNavSeparator.js +8 -0
  97. package/dist/components/sidebarNav/SidebarNavSeparator.js.map +1 -0
  98. package/dist/components/sidebarNav/SidebarNavTitle.d.ts +4 -0
  99. package/dist/components/sidebarNav/SidebarNavTitle.d.ts.map +1 -0
  100. package/dist/components/sidebarNav/SidebarNavTitle.js +7 -0
  101. package/dist/components/sidebarNav/SidebarNavTitle.js.map +1 -0
  102. package/dist/components/sidebarNav/SidebarNavTooltip.d.ts +7 -0
  103. package/dist/components/sidebarNav/SidebarNavTooltip.d.ts.map +1 -0
  104. package/dist/components/sidebarNav/SidebarNavTooltip.js +9 -0
  105. package/dist/components/sidebarNav/SidebarNavTooltip.js.map +1 -0
  106. package/dist/components/sidebarNav/SidebarNavTrigger.d.ts +8 -0
  107. package/dist/components/sidebarNav/SidebarNavTrigger.d.ts.map +1 -0
  108. package/dist/components/sidebarNav/SidebarNavTrigger.js +15 -0
  109. package/dist/components/sidebarNav/SidebarNavTrigger.js.map +1 -0
  110. package/dist/components/sidebarNav/index.d.ts +4 -0
  111. package/dist/components/sidebarNav/index.d.ts.map +1 -0
  112. package/dist/components/sidebarNav/index.js +3 -0
  113. package/dist/components/sidebarNav/index.js.map +1 -0
  114. package/dist/components/sidebarNav/resolvePanelItemProps.d.ts +4 -0
  115. package/dist/components/sidebarNav/resolvePanelItemProps.d.ts.map +1 -0
  116. package/dist/components/sidebarNav/resolvePanelItemProps.js +43 -0
  117. package/dist/components/sidebarNav/resolvePanelItemProps.js.map +1 -0
  118. package/dist/components/sidebarNav/resolvePanelItemProps.test.d.ts +2 -0
  119. package/dist/components/sidebarNav/resolvePanelItemProps.test.d.ts.map +1 -0
  120. package/dist/components/sidebarNav/resolvePanelItemProps.test.js +52 -0
  121. package/dist/components/sidebarNav/resolvePanelItemProps.test.js.map +1 -0
  122. package/dist/components/sidebarNav/types.d.ts +100 -0
  123. package/dist/components/sidebarNav/types.d.ts.map +1 -0
  124. package/dist/components/sidebarNav/types.js +4 -0
  125. package/dist/components/sidebarNav/types.js.map +1 -0
  126. package/dist/components/sidebarNav/useControllableBoolean.d.ts +9 -0
  127. package/dist/components/sidebarNav/useControllableBoolean.d.ts.map +1 -0
  128. package/dist/components/sidebarNav/useControllableBoolean.js +15 -0
  129. package/dist/components/sidebarNav/useControllableBoolean.js.map +1 -0
  130. package/dist/components/slideover/Slideover.stories.d.ts +10 -0
  131. package/dist/components/slideover/Slideover.stories.d.ts.map +1 -0
  132. package/dist/components/slideover/Slideover.stories.js +12 -0
  133. package/dist/components/slideover/Slideover.stories.js.map +1 -0
  134. package/dist/components/table/BulkActionsDropdown.d.ts +12 -0
  135. package/dist/components/table/BulkActionsDropdown.d.ts.map +1 -0
  136. package/dist/components/table/BulkActionsDropdown.js +11 -0
  137. package/dist/components/table/BulkActionsDropdown.js.map +1 -0
  138. package/dist/components/table/HideColumnsDropdown.d.ts +9 -0
  139. package/dist/components/table/HideColumnsDropdown.d.ts.map +1 -0
  140. package/dist/components/table/HideColumnsDropdown.js +33 -0
  141. package/dist/components/table/HideColumnsDropdown.js.map +1 -0
  142. package/dist/components/table/Table.d.ts +1 -1
  143. package/dist/components/table/Table.stories.d.ts.map +1 -1
  144. package/dist/components/table/Table.stories.js +0 -5
  145. package/dist/components/table/Table.stories.js.map +1 -1
  146. package/dist/components/table/Table.test.js +0 -5
  147. package/dist/components/table/Table.test.js.map +1 -1
  148. package/dist/components/table/cellRenderers/SelectDropdownCellEditor.d.ts +8 -0
  149. package/dist/components/table/cellRenderers/SelectDropdownCellEditor.d.ts.map +1 -0
  150. package/dist/components/table/cellRenderers/SelectDropdownCellEditor.js +19 -0
  151. package/dist/components/table/cellRenderers/SelectDropdownCellEditor.js.map +1 -0
  152. package/dist/components/table/hooks/useHistory.d.ts +20 -0
  153. package/dist/components/table/hooks/useHistory.d.ts.map +1 -0
  154. package/dist/components/table/hooks/useHistory.js +73 -0
  155. package/dist/components/table/hooks/useHistory.js.map +1 -0
  156. package/dist/components/table/hooks/useTableHistory.d.ts +21 -0
  157. package/dist/components/table/hooks/useTableHistory.d.ts.map +1 -0
  158. package/dist/components/table/hooks/useTableHistory.js +88 -0
  159. package/dist/components/table/hooks/useTableHistory.js.map +1 -0
  160. package/dist/components/table/pagination/TableSettingsDropdown.d.ts +2 -0
  161. package/dist/components/table/pagination/TableSettingsDropdown.d.ts.map +1 -0
  162. package/dist/components/table/pagination/TableSettingsDropdown.js +42 -0
  163. package/dist/components/table/pagination/TableSettingsDropdown.js.map +1 -0
  164. package/dist/components/table/tableHeader/TableHeader.d.ts +14 -0
  165. package/dist/components/table/tableHeader/TableHeader.d.ts.map +1 -0
  166. package/dist/components/table/tableHeader/TableHeader.js +55 -0
  167. package/dist/components/table/tableHeader/TableHeader.js.map +1 -0
  168. package/dist/components/table/tableHeader/index.d.ts +2 -0
  169. package/dist/components/table/tableHeader/index.d.ts.map +1 -0
  170. package/dist/components/table/tableHeader/index.js +2 -0
  171. package/dist/components/table/tableHeader/index.js.map +1 -0
  172. package/dist/components/table/tableTheme.d.ts +2 -0
  173. package/dist/components/table/tableTheme.d.ts.map +1 -0
  174. package/dist/components/table/tableTheme.js +18 -0
  175. package/dist/components/table/tableTheme.js.map +1 -0
  176. package/dist/components/table/types.d.ts +169 -0
  177. package/dist/components/table/types.d.ts.map +1 -0
  178. package/dist/components/table/types.js +11 -0
  179. package/dist/components/table/types.js.map +1 -0
  180. package/dist/components/table/utils/setAgGridLicenseKey.d.ts +2 -0
  181. package/dist/components/table/utils/setAgGridLicenseKey.d.ts.map +1 -0
  182. package/dist/components/table/utils/setAgGridLicenseKey.js +11 -0
  183. package/dist/components/table/utils/setAgGridLicenseKey.js.map +1 -0
  184. package/dist/layoutTest.stories.d.ts +6 -0
  185. package/dist/layoutTest.stories.d.ts.map +1 -0
  186. package/dist/layoutTest.stories.js +9 -0
  187. package/dist/layoutTest.stories.js.map +1 -0
  188. package/dist/pages/assessmentBuilderPage/AssessmentBuilderPage.d.ts +39 -0
  189. package/dist/pages/assessmentBuilderPage/AssessmentBuilderPage.d.ts.map +1 -0
  190. package/dist/pages/assessmentBuilderPage/AssessmentBuilderPage.js +112 -0
  191. package/dist/pages/assessmentBuilderPage/AssessmentBuilderPage.js.map +1 -0
  192. package/dist/pages/assessmentBuilderPage/AssessmentBuilderPage.stories.d.ts +184 -0
  193. package/dist/pages/assessmentBuilderPage/AssessmentBuilderPage.stories.d.ts.map +1 -0
  194. package/dist/pages/assessmentBuilderPage/AssessmentBuilderPage.stories.js +317 -0
  195. package/dist/pages/assessmentBuilderPage/AssessmentBuilderPage.stories.js.map +1 -0
  196. package/dist/pages/assessmentBuilderPage/AssessmentBuilderPage.test.d.ts +2 -0
  197. package/dist/pages/assessmentBuilderPage/AssessmentBuilderPage.test.d.ts.map +1 -0
  198. package/dist/pages/assessmentBuilderPage/AssessmentBuilderPage.test.js +160 -0
  199. package/dist/pages/assessmentBuilderPage/AssessmentBuilderPage.test.js.map +1 -0
  200. package/dist/pages/assessmentSettingsPage/AssessmentSettingsPage.d.ts +11 -0
  201. package/dist/pages/assessmentSettingsPage/AssessmentSettingsPage.d.ts.map +1 -0
  202. package/dist/pages/assessmentSettingsPage/AssessmentSettingsPage.js +13 -0
  203. package/dist/pages/assessmentSettingsPage/AssessmentSettingsPage.js.map +1 -0
  204. package/dist/pages/assessmentSettingsPage/AssessmentSettingsPage.stories.d.ts +174 -0
  205. package/dist/pages/assessmentSettingsPage/AssessmentSettingsPage.stories.d.ts.map +1 -0
  206. package/dist/pages/assessmentSettingsPage/AssessmentSettingsPage.stories.js +212 -0
  207. package/dist/pages/assessmentSettingsPage/AssessmentSettingsPage.stories.js.map +1 -0
  208. package/dist/pages/assessmentSettingsPage/AssessmentSettingsPage.test.d.ts +2 -0
  209. package/dist/pages/assessmentSettingsPage/AssessmentSettingsPage.test.d.ts.map +1 -0
  210. package/dist/pages/assessmentSettingsPage/AssessmentSettingsPage.test.js +84 -0
  211. package/dist/pages/assessmentSettingsPage/AssessmentSettingsPage.test.js.map +1 -0
  212. package/dist/pages/assessmentsPage/AssessmentsPage.d.ts +16 -0
  213. package/dist/pages/assessmentsPage/AssessmentsPage.d.ts.map +1 -0
  214. package/dist/pages/assessmentsPage/AssessmentsPage.js +31 -0
  215. package/dist/pages/assessmentsPage/AssessmentsPage.js.map +1 -0
  216. package/dist/pages/assessmentsPage/AssessmentsPage.stories.d.ts +162 -0
  217. package/dist/pages/assessmentsPage/AssessmentsPage.stories.d.ts.map +1 -0
  218. package/dist/pages/assessmentsPage/AssessmentsPage.stories.js +290 -0
  219. package/dist/pages/assessmentsPage/AssessmentsPage.stories.js.map +1 -0
  220. package/dist/pages/assessmentsPage/AssessmentsPage.test.d.ts +2 -0
  221. package/dist/pages/assessmentsPage/AssessmentsPage.test.d.ts.map +1 -0
  222. package/dist/pages/assessmentsPage/AssessmentsPage.test.js +109 -0
  223. package/dist/pages/assessmentsPage/AssessmentsPage.test.js.map +1 -0
  224. package/dist/pages/customReportWriterPage/CustomReportWriterPage.d.ts +40 -0
  225. package/dist/pages/customReportWriterPage/CustomReportWriterPage.d.ts.map +1 -0
  226. package/dist/pages/customReportWriterPage/CustomReportWriterPage.js +156 -0
  227. package/dist/pages/customReportWriterPage/CustomReportWriterPage.js.map +1 -0
  228. package/dist/pages/customReportWriterPage/CustomReportWriterPage.stories.d.ts +239 -0
  229. package/dist/pages/customReportWriterPage/CustomReportWriterPage.stories.d.ts.map +1 -0
  230. package/dist/pages/customReportWriterPage/CustomReportWriterPage.stories.js +318 -0
  231. package/dist/pages/customReportWriterPage/CustomReportWriterPage.stories.js.map +1 -0
  232. package/dist/pages/customReportWriterPage/CustomReportWriterPage.test.d.ts +2 -0
  233. package/dist/pages/customReportWriterPage/CustomReportWriterPage.test.d.ts.map +1 -0
  234. package/dist/pages/customReportWriterPage/CustomReportWriterPage.test.js +183 -0
  235. package/dist/pages/customReportWriterPage/CustomReportWriterPage.test.js.map +1 -0
  236. package/dist/pages/gradeSetsPage/GradeSetsPage.d.ts +26 -0
  237. package/dist/pages/gradeSetsPage/GradeSetsPage.d.ts.map +1 -0
  238. package/dist/pages/gradeSetsPage/GradeSetsPage.js +33 -0
  239. package/dist/pages/gradeSetsPage/GradeSetsPage.js.map +1 -0
  240. package/dist/pages/gradeSetsPage/GradeSetsPage.stories.d.ts +176 -0
  241. package/dist/pages/gradeSetsPage/GradeSetsPage.stories.d.ts.map +1 -0
  242. package/dist/pages/gradeSetsPage/GradeSetsPage.stories.js +237 -0
  243. package/dist/pages/gradeSetsPage/GradeSetsPage.stories.js.map +1 -0
  244. package/dist/pages/gradeSetsPage/GradeSetsPage.test.d.ts +2 -0
  245. package/dist/pages/gradeSetsPage/GradeSetsPage.test.d.ts.map +1 -0
  246. package/dist/pages/gradeSetsPage/GradeSetsPage.test.js +91 -0
  247. package/dist/pages/gradeSetsPage/GradeSetsPage.test.js.map +1 -0
  248. package/dist/pages/studentProfilePage/StudentProfilePage.d.ts +48 -0
  249. package/dist/pages/studentProfilePage/StudentProfilePage.d.ts.map +1 -0
  250. package/dist/pages/studentProfilePage/StudentProfilePage.js +52 -0
  251. package/dist/pages/studentProfilePage/StudentProfilePage.js.map +1 -0
  252. package/dist/pages/studentProfilePage/StudentProfilePage.stories.d.ts +218 -0
  253. package/dist/pages/studentProfilePage/StudentProfilePage.stories.d.ts.map +1 -0
  254. package/dist/pages/studentProfilePage/StudentProfilePage.stories.js +273 -0
  255. package/dist/pages/studentProfilePage/StudentProfilePage.stories.js.map +1 -0
  256. package/dist/pages/studentProfilePage/StudentProfilePage.test.d.ts +2 -0
  257. package/dist/pages/studentProfilePage/StudentProfilePage.test.d.ts.map +1 -0
  258. package/dist/pages/studentProfilePage/StudentProfilePage.test.js +197 -0
  259. package/dist/pages/studentProfilePage/StudentProfilePage.test.js.map +1 -0
  260. package/dist/utils/PopupParentContext.d.ts +3 -0
  261. package/dist/utils/PopupParentContext.d.ts.map +1 -0
  262. package/dist/utils/PopupParentContext.js +6 -0
  263. package/dist/utils/PopupParentContext.js.map +1 -0
  264. package/dist/utils/PopupParentContext.stories.d.ts +17 -0
  265. package/dist/utils/PopupParentContext.stories.d.ts.map +1 -0
  266. package/dist/utils/PopupParentContext.stories.js +266 -0
  267. package/dist/utils/PopupParentContext.stories.js.map +1 -0
  268. package/dist/utils/getDefaultPopupParent.d.ts +2 -0
  269. package/dist/utils/getDefaultPopupParent.d.ts.map +1 -0
  270. package/dist/utils/getDefaultPopupParent.js +19 -0
  271. package/dist/utils/getDefaultPopupParent.js.map +1 -0
  272. package/package.json +4 -4
  273. package/src/components/pill/Pill.tsx +1 -0
  274. package/src/components/table/Table.stories.tsx +0 -5
  275. package/src/components/table/Table.test.tsx +0 -5
@@ -0,0 +1,160 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { describe, it, expect, vi } from 'vitest';
3
+ import { render, screen } from '@testing-library/react';
4
+ import userEvent from '@testing-library/user-event';
5
+ import '@testing-library/jest-dom/vitest';
6
+ import { AssessmentBuilderPage } from './AssessmentBuilderPage.js';
7
+ describe('AssessmentBuilderPage', () => {
8
+ const mockMarksheetColumns = [
9
+ {
10
+ id: 1,
11
+ name: 'Student Name',
12
+ dataCollection: undefined,
13
+ visibility: 'show',
14
+ },
15
+ {
16
+ id: 2,
17
+ name: 'Autumn',
18
+ children: [
19
+ {
20
+ id: 3,
21
+ name: 'English Language',
22
+ dataCollection: 'teacher',
23
+ visibility: 'auto-visible',
24
+ },
25
+ {
26
+ id: 4,
27
+ name: 'Maths',
28
+ dataCollection: 'admin',
29
+ visibility: 'auto-visible',
30
+ },
31
+ ],
32
+ },
33
+ ];
34
+ it('renders the assessment name as heading', () => {
35
+ render(_jsx(AssessmentBuilderPage, { assessmentName: "KS4 Assessment 2025/26" }));
36
+ expect(screen.getByRole('heading', { name: /ks4 assessment 2025\/26/i, level: 1 })).toBeInTheDocument();
37
+ });
38
+ it('renders breadcrumb navigation', () => {
39
+ render(_jsx(AssessmentBuilderPage, {}));
40
+ const breadcrumbNav = screen.getByRole('navigation', { name: /breadcrumb/i });
41
+ expect(breadcrumbNav).toBeInTheDocument();
42
+ expect(screen.getByRole('button', { name: /assessments/i })).toBeInTheDocument();
43
+ expect(screen.getByText(/create new assessment/i)).toBeInTheDocument();
44
+ });
45
+ it('renders Build Mode and Preview tabs', () => {
46
+ render(_jsx(AssessmentBuilderPage, {}));
47
+ expect(screen.getByRole('tab', { name: /build mode/i })).toBeInTheDocument();
48
+ expect(screen.getByRole('tab', { name: /preview/i })).toBeInTheDocument();
49
+ });
50
+ it('shows Build Mode tab as active by default', () => {
51
+ render(_jsx(AssessmentBuilderPage, {}));
52
+ const buildTab = screen.getByRole('tab', { name: /build mode/i });
53
+ expect(buildTab).toHaveAttribute('aria-selected', 'true');
54
+ });
55
+ it('switches to Preview tab when clicked', async () => {
56
+ const user = userEvent.setup();
57
+ render(_jsx(AssessmentBuilderPage, {}));
58
+ const previewTab = screen.getByRole('tab', { name: /preview/i });
59
+ await user.click(previewTab);
60
+ expect(previewTab).toHaveAttribute('aria-selected', 'true');
61
+ expect(screen.getByText(/preview mode - coming soon/i)).toBeInTheDocument();
62
+ });
63
+ it('renders the marksheet columns section', () => {
64
+ render(_jsx(AssessmentBuilderPage, { marksheetColumns: mockMarksheetColumns }));
65
+ expect(screen.getByRole('heading', { name: /marksheet columns/i, level: 2 })).toBeInTheDocument();
66
+ });
67
+ it('renders the contextual sidebar', () => {
68
+ render(_jsx(AssessmentBuilderPage, {}));
69
+ expect(screen.getByRole('heading', { name: /contextual columns/i, level: 2 })).toBeInTheDocument();
70
+ });
71
+ it('renders search bar in sidebar', () => {
72
+ render(_jsx(AssessmentBuilderPage, {}));
73
+ // SearchBar starts collapsed as a button - look for the button instead
74
+ expect(screen.getByTestId('search-bar-inactive')).toBeInTheDocument();
75
+ });
76
+ it('renders filter button in sidebar', () => {
77
+ render(_jsx(AssessmentBuilderPage, {}));
78
+ expect(screen.getByRole('button', { name: /filter/i })).toBeInTheDocument();
79
+ });
80
+ it('renders all collapsible sections in sidebar', () => {
81
+ render(_jsx(AssessmentBuilderPage, {}));
82
+ expect(screen.getByRole('heading', { name: /demographics/i, level: 3 })).toBeInTheDocument();
83
+ expect(screen.getByRole('heading', { name: /student identifier/i, level: 3 })).toBeInTheDocument();
84
+ expect(screen.getByRole('heading', { name: /assessment periods/i, level: 3 })).toBeInTheDocument();
85
+ expect(screen.getByRole('heading', { name: /subjects/i, level: 3 })).toBeInTheDocument();
86
+ });
87
+ it('renders pill checkboxes in Demographics section', () => {
88
+ render(_jsx(AssessmentBuilderPage, {}));
89
+ // Pill checkboxes render with text labels
90
+ expect(screen.getByText(/student name/i)).toBeInTheDocument();
91
+ expect(screen.getByText(/gender/i)).toBeInTheDocument();
92
+ expect(screen.getByText(/year group/i)).toBeInTheDocument();
93
+ });
94
+ it('renders checkboxes in Student Identifier section', () => {
95
+ render(_jsx(AssessmentBuilderPage, {}));
96
+ expect(screen.getByRole('checkbox', { name: /upn/i })).toBeInTheDocument();
97
+ expect(screen.getByRole('checkbox', { name: /admission number/i })).toBeInTheDocument();
98
+ expect(screen.getByRole('checkbox', { name: /student id/i })).toBeInTheDocument();
99
+ });
100
+ it('renders checkboxes in Assessment Periods section', () => {
101
+ render(_jsx(AssessmentBuilderPage, {}));
102
+ expect(screen.getByRole('checkbox', { name: /autumn/i })).toBeInTheDocument();
103
+ expect(screen.getByRole('checkbox', { name: /spring/i })).toBeInTheDocument();
104
+ expect(screen.getByRole('checkbox', { name: /summer/i })).toBeInTheDocument();
105
+ });
106
+ it('renders Proceed to Marksheets button', () => {
107
+ render(_jsx(AssessmentBuilderPage, {}));
108
+ expect(screen.getByRole('button', { name: /proceed to marksheets/i })).toBeInTheDocument();
109
+ });
110
+ it('calls onNavigateToAssessments when Assessments breadcrumb is clicked', async () => {
111
+ const user = userEvent.setup();
112
+ const mockNavigate = vi.fn();
113
+ render(_jsx(AssessmentBuilderPage, { onNavigateToAssessments: mockNavigate }));
114
+ const assessmentsButton = screen.getByRole('button', { name: /assessments/i });
115
+ await user.click(assessmentsButton);
116
+ expect(mockNavigate).toHaveBeenCalledTimes(1);
117
+ });
118
+ it('calls onProceedToMarksheets when Proceed button is clicked', async () => {
119
+ const user = userEvent.setup();
120
+ const mockProceed = vi.fn();
121
+ render(_jsx(AssessmentBuilderPage, { onProceedToMarksheets: mockProceed }));
122
+ const proceedButton = screen.getByRole('button', { name: /proceed to marksheets/i });
123
+ await user.click(proceedButton);
124
+ expect(mockProceed).toHaveBeenCalledTimes(1);
125
+ });
126
+ it('enables editing of assessment name when edit button is clicked', async () => {
127
+ const user = userEvent.setup();
128
+ render(_jsx(AssessmentBuilderPage, { assessmentName: "Test Assessment" }));
129
+ const editButton = screen.getByRole('button', { name: /edit assessment name/i });
130
+ await user.click(editButton);
131
+ const input = screen.getByDisplayValue('Test Assessment');
132
+ expect(input).toBeInTheDocument();
133
+ expect(input).toHaveFocus();
134
+ });
135
+ it('applies custom className when provided', () => {
136
+ const { container } = render(_jsx(AssessmentBuilderPage, { className: "custom-class" }));
137
+ const pageElement = container.querySelector('.ds-assessment-builder-page');
138
+ expect(pageElement).toHaveClass('ds-assessment-builder-page');
139
+ expect(pageElement).toHaveClass('custom-class');
140
+ });
141
+ it('renders empty state when no marksheet columns provided', () => {
142
+ render(_jsx(AssessmentBuilderPage, { marksheetColumns: [] }));
143
+ // Table should still render, just with no data
144
+ expect(screen.getByRole('heading', { name: /marksheet columns/i })).toBeInTheDocument();
145
+ });
146
+ it.skip('updates search input when user types', async () => {
147
+ // Skipped: SearchBar component test behavior issue
148
+ // SearchBar starts collapsed and expansion timing makes this test flaky
149
+ const user = userEvent.setup();
150
+ render(_jsx(AssessmentBuilderPage, {}));
151
+ // Click to expand SearchBar first
152
+ const searchButton = screen.getByTestId('search-bar-inactive');
153
+ await user.click(searchButton);
154
+ // Now find the input and type
155
+ const searchInput = screen.getByPlaceholderText(/search columns/i);
156
+ await user.type(searchInput, 'English');
157
+ expect(searchInput).toHaveValue('English');
158
+ });
159
+ });
160
+ //# sourceMappingURL=AssessmentBuilderPage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssessmentBuilderPage.test.js","sourceRoot":"","sources":["../../../src/pages/assessmentBuilderPage/AssessmentBuilderPage.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export type AssessmentSettingsPageProps = {
2
+ onGradeSetsClick?: () => void;
3
+ onSubjectsClick?: () => void;
4
+ onAssessmentComponentClick?: () => void;
5
+ onAssessmentPeriodsClick?: () => void;
6
+ onCommentBanksClick?: () => void;
7
+ onAssessmentLookupsClick?: () => void;
8
+ className?: string;
9
+ };
10
+ export declare const AssessmentSettingsPage: ({ onGradeSetsClick, onSubjectsClick, onAssessmentComponentClick, onAssessmentPeriodsClick, onCommentBanksClick, onAssessmentLookupsClick, className, }: AssessmentSettingsPageProps) => import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=AssessmentSettingsPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssessmentSettingsPage.d.ts","sourceRoot":"","sources":["../../../src/pages/assessmentSettingsPage/AssessmentSettingsPage.tsx"],"names":[],"mappings":"AASA,MAAM,MAAM,2BAA2B,GAAG;IACxC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,0BAA0B,CAAC,EAAE,MAAM,IAAI,CAAC;IACxC,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,wJAQpC,2BAA2B,4CA+E7B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * AssessmentSettingsPage - The Assessment Settings homepage.
4
+ * Displays two groups of navigable settings cards: Basic and Advanced.
5
+ */
6
+ import classNames from 'classnames';
7
+ import { Card } from '../../components/card/Card.js';
8
+ import { Heading } from '../../components/heading/Heading.js';
9
+ import { Icon } from '../../components/icon/Icon.js';
10
+ export const AssessmentSettingsPage = ({ onGradeSetsClick, onSubjectsClick, onAssessmentComponentClick, onAssessmentPeriodsClick, onCommentBanksClick, onAssessmentLookupsClick, className, }) => {
11
+ return (_jsxs("div", { className: classNames('ds-assessment-settings-page', className), children: [_jsx("nav", { "aria-label": "Breadcrumb", className: "ds-assessment-settings-page__breadcrumbs", children: _jsxs("ol", { className: "ds-assessment-settings-page__breadcrumb-list", children: [_jsx("li", { className: "ds-assessment-settings-page__breadcrumb-item", children: _jsx("a", { href: "/assessments", className: "ds-assessment-settings-page__breadcrumb-link", children: "Assessments" }) }), _jsxs("li", { className: "ds-assessment-settings-page__breadcrumb-item ds-assessment-settings-page__breadcrumb-item--current", "aria-current": "page", children: ["Settings", _jsx(Icon, { name: "link", size: 16, screenReaderText: "Permalink" })] })] }) }), _jsx("header", { className: "ds-assessment-settings-page__header", children: _jsx(Heading, { level: 1, children: "Assessment settings" }) }), _jsxs("main", { className: "ds-assessment-settings-page__content", children: [_jsxs("section", { "aria-labelledby": "basic-settings-heading", className: "ds-assessment-settings-page__group", children: [_jsx(Heading, { level: 2, id: "basic-settings-heading", children: "Basic" }), _jsxs("div", { className: "ds-assessment-settings-page__group-cards", children: [_jsx(Card, { title: "Grade Sets", paragraph: "Manage Grade Sets: Quickly view, edit, or create lists of grades (e.g., Below/At/Above, GCSE 9 to 1).", onClick: onGradeSetsClick }), _jsx(Card, { title: "Subjects", paragraph: "Manage Assessment Subjects: Quickly manage the assessment subjects you are collecting data for.", onClick: onSubjectsClick }), _jsx(Card, { title: "Assessment Component", paragraph: "Manage Assessment Components: Quickly view, edit, or create components (e.g., Teacher Assessments or Targets).", onClick: onAssessmentComponentClick }), _jsx(Card, { title: "Assessment Periods (Data Drops)", paragraph: "Manage Assessment Periods (e.g. Autumn, Spring, Data Drop 1 or Mocks).", onClick: onAssessmentPeriodsClick })] })] }), _jsxs("section", { "aria-labelledby": "advanced-settings-heading", className: "ds-assessment-settings-page__group", children: [_jsx(Heading, { level: 2, id: "advanced-settings-heading", children: "Advanced" }), _jsxs("div", { className: "ds-assessment-settings-page__group-cards", children: [_jsx(Card, { title: "Comment Banks", paragraph: "Manage Comment Banks", onClick: onCommentBanksClick }), _jsx(Card, { title: "Assessment Lookups", paragraph: "Manage Assessment Lookups", onClick: onAssessmentLookupsClick })] })] })] })] }));
12
+ };
13
+ //# sourceMappingURL=AssessmentSettingsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssessmentSettingsPage.js","sourceRoot":"","sources":["../../../src/pages/assessmentSettingsPage/AssessmentSettingsPage.tsx"],"names":[],"mappings":";AAAA;;;GAGG;AACH,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAY5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,EACrC,gBAAgB,EAChB,eAAe,EACf,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,EACxB,SAAS,GACmB,EAAE,EAAE;IAChC,OAAO,CACL,eAAK,SAAS,EAAE,UAAU,CAAC,6BAA6B,EAAE,SAAS,CAAC,aAClE,4BAAgB,YAAY,EAAC,SAAS,EAAC,0CAA0C,YAC/E,cAAI,SAAS,EAAC,8CAA8C,aAC1D,aAAI,SAAS,EAAC,8CAA8C,YAC1D,YAAG,IAAI,EAAC,cAAc,EAAC,SAAS,EAAC,8CAA8C,4BAE3E,GACD,EACL,cACE,SAAS,EAAC,oGAAoG,kBACjG,MAAM,yBAGnB,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAE,EAAE,EAAE,gBAAgB,EAAC,WAAW,GAAG,IACxD,IACF,GACD,EAEN,iBAAQ,SAAS,EAAC,qCAAqC,YACrD,KAAC,OAAO,IAAC,KAAK,EAAE,CAAC,oCAA+B,GACzC,EAET,gBAAM,SAAS,EAAC,sCAAsC,aACpD,sCACkB,wBAAwB,EACxC,SAAS,EAAC,oCAAoC,aAE9C,KAAC,OAAO,IAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAC,wBAAwB,sBAEpC,EACV,eAAK,SAAS,EAAC,0CAA0C,aACvD,KAAC,IAAI,IACH,KAAK,EAAC,YAAY,EAClB,SAAS,EAAC,uGAAuG,EACjH,OAAO,EAAE,gBAAgB,GACzB,EACF,KAAC,IAAI,IACH,KAAK,EAAC,UAAU,EAChB,SAAS,EAAC,iGAAiG,EAC3G,OAAO,EAAE,eAAe,GACxB,EACF,KAAC,IAAI,IACH,KAAK,EAAC,sBAAsB,EAC5B,SAAS,EAAC,gHAAgH,EAC1H,OAAO,EAAE,0BAA0B,GACnC,EACF,KAAC,IAAI,IACH,KAAK,EAAC,iCAAiC,EACvC,SAAS,EAAC,wEAAwE,EAClF,OAAO,EAAE,wBAAwB,GACjC,IACE,IACE,EAEV,sCACkB,2BAA2B,EAC3C,SAAS,EAAC,oCAAoC,aAE9C,KAAC,OAAO,IAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAC,2BAA2B,yBAEvC,EACV,eAAK,SAAS,EAAC,0CAA0C,aACvD,KAAC,IAAI,IACH,KAAK,EAAC,eAAe,EACrB,SAAS,EAAC,sBAAsB,EAChC,OAAO,EAAE,mBAAmB,GAC5B,EACF,KAAC,IAAI,IACH,KAAK,EAAC,oBAAoB,EAC1B,SAAS,EAAC,2BAA2B,EACrC,OAAO,EAAE,wBAAwB,GACjC,IACE,IACE,IACL,IACH,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,174 @@
1
+ import type { StoryObj } from '@storybook/react-vite';
2
+ /**
3
+ * Well, picture it: St. Olaf, 1983.
4
+ *
5
+ * Every spring, the town council would hold what we called the "Settings Gathering" -
6
+ * a big meeting in the community hall where you could sign up for all the different
7
+ * town programmes. You had your basic programmes on one side of the room: the
8
+ * grade-book committee, the subjects board, the assessment calendar - things
9
+ * everyone needed. And then on the other side, tucked in the back near the
10
+ * refreshment table, were the advanced programmes: the comment-writing circle and
11
+ * the great lookup ledger society. Nobody quite knew what the great lookup ledger
12
+ * society did, but Helga Lindqvist swore by it and won a blue ribbon at the county
13
+ * fair three years running.
14
+ *
15
+ * The AssessmentSettingsPage is exactly that community hall. It is the central hub
16
+ * for configuring everything about how assessments work in a school. Two clearly
17
+ * labelled groups - **Basic** and **Advanced** - each containing clickable Card
18
+ * components that navigate administrators to the relevant sub-page.
19
+ *
20
+ * **Basic settings (4 cards):**
21
+ * - **Grade Sets** - View, edit, or create lists of grades (e.g., Below/At/Above, GCSE 9-1)
22
+ * - **Subjects** - Manage the assessment subjects being collected
23
+ * - **Assessment Component** - View, edit, or create components (e.g., Teacher Assessments, Targets)
24
+ * - **Assessment Periods (Data Drops)** - Manage periods like Autumn, Spring, Data Drop 1, Mocks
25
+ *
26
+ * **Advanced settings (2 cards):**
27
+ * - **Comment Banks** - Manage banks of reusable report comments
28
+ * - **Assessment Lookups** - Manage lookup tables for assessment data
29
+ *
30
+ * **How cards become interactive:**
31
+ * Each Card automatically shows a chevron-right icon (and an arrow-right icon on hover)
32
+ * when an `onClick` prop is provided. Cards without an `onClick` render in a static,
33
+ * non-interactive state - no chevron, no keyboard focus, no pointer cursor. So if a
34
+ * particular sub-page is not yet available (or the user lacks permission), simply omit
35
+ * the corresponding callback and the card will gracefully sit there, still informative
36
+ * but not clickable. Just like Helga's ledger society - present, but mysterious.
37
+ *
38
+ * **Accessibility:**
39
+ * - Breadcrumb uses `<nav aria-label="Breadcrumb">` with `aria-current="page"` on the current item
40
+ * - The two settings sections use `<section aria-labelledby>` pointing to their respective headings,
41
+ * giving screen readers labelled region landmarks ("Basic" and "Advanced")
42
+ * - Each clickable Card has `tabIndex={0}` and responds to keyboard activation
43
+ * - Page structure uses semantic `<header>` and `<main>` landmarks
44
+ * - Heading hierarchy is strict: h1 (Assessment settings) -> h2 (Basic / Advanced)
45
+ */
46
+ declare const meta: {
47
+ title: string;
48
+ component: ({ onGradeSetsClick, onSubjectsClick, onAssessmentComponentClick, onAssessmentPeriodsClick, onCommentBanksClick, onAssessmentLookupsClick, className, }: import("./AssessmentSettingsPage.js").AssessmentSettingsPageProps) => import("react/jsx-runtime").JSX.Element;
49
+ parameters: {
50
+ layout: string;
51
+ docs: {
52
+ description: {
53
+ component: string;
54
+ };
55
+ };
56
+ };
57
+ tags: string[];
58
+ args: {
59
+ onGradeSetsClick: import("@vitest/spy").Mock<(...args: any[]) => any>;
60
+ onSubjectsClick: import("@vitest/spy").Mock<(...args: any[]) => any>;
61
+ onAssessmentComponentClick: import("@vitest/spy").Mock<(...args: any[]) => any>;
62
+ onAssessmentPeriodsClick: import("@vitest/spy").Mock<(...args: any[]) => any>;
63
+ onCommentBanksClick: import("@vitest/spy").Mock<(...args: any[]) => any>;
64
+ onAssessmentLookupsClick: import("@vitest/spy").Mock<(...args: any[]) => any>;
65
+ };
66
+ argTypes: {
67
+ onGradeSetsClick: {
68
+ description: string;
69
+ };
70
+ onSubjectsClick: {
71
+ description: string;
72
+ };
73
+ onAssessmentComponentClick: {
74
+ description: string;
75
+ };
76
+ onAssessmentPeriodsClick: {
77
+ description: string;
78
+ };
79
+ onCommentBanksClick: {
80
+ description: string;
81
+ };
82
+ onAssessmentLookupsClick: {
83
+ description: string;
84
+ };
85
+ className: {
86
+ control: "text";
87
+ description: string;
88
+ };
89
+ };
90
+ };
91
+ export default meta;
92
+ type Story = StoryObj<typeof meta>;
93
+ /**
94
+ * The default state: all six cards are fully interactive, all callbacks wired up.
95
+ *
96
+ * Oh, this is the full community hall experience! Every door is open, every
97
+ * booth is staffed, and Helga is at the refreshment table. All six settings
98
+ * cards - Grade Sets, Subjects, Assessment Component, Assessment Periods,
99
+ * Comment Banks, and Assessment Lookups - are clickable and will fire their
100
+ * respective callbacks when activated.
101
+ *
102
+ * Notice that each card displays a chevron-right icon on the right-hand side,
103
+ * which transitions to an arrow-right on hover - a clear visual cue that the
104
+ * card is a navigation destination. Click any card (or focus it and press Enter
105
+ * or Space) and watch the action appear in the Storybook Actions panel below.
106
+ *
107
+ * The breadcrumb at the top reads "Assessments / Settings", orienting the user
108
+ * within the broader app hierarchy.
109
+ */
110
+ export declare const Default: Story;
111
+ /**
112
+ * All callbacks omitted - every card renders in its static, non-interactive state.
113
+ *
114
+ * You know, this reminds me of the time in St. Olaf when the community hall
115
+ * ran out of sign-up sheets for half the booths. The tables were still there,
116
+ * the banners still hung beautifully, but nobody could actually sign up for
117
+ * anything. We all just stood around reading the descriptions and nodding
118
+ * appreciatively.
119
+ *
120
+ * This story shows what the page looks like when no `onClick` callbacks are
121
+ * provided at all. Each Card is rendered without a chevron, without keyboard
122
+ * focusability, and without a pointer cursor. The titles and descriptions are
123
+ * still visible and informative - they just do not navigate anywhere.
124
+ *
125
+ * This state might occur if a user role does not have permission to access any
126
+ * settings sub-pages, or during a loading state before permissions have resolved.
127
+ */
128
+ export declare const AllCardsStatic: Story;
129
+ /**
130
+ * Only the Basic settings cards are interactive; Advanced cards are static.
131
+ *
132
+ * Back in St. Olaf, the community hall Settings Gathering had a tiered system.
133
+ * Everyone could sign up for the basic programmes, but the advanced ones - oh,
134
+ * those required a special pass from Mayor Gustafsson. If you did not have the
135
+ * pass, you could still read all about the great lookup ledger society, but you
136
+ * could not actually join. Very exclusive. Very mysterious.
137
+ *
138
+ * This story simulates a permission scenario where the current user has access
139
+ * to all four Basic settings (Grade Sets, Subjects, Assessment Component, and
140
+ * Assessment Periods) but not to the Advanced ones (Comment Banks and Assessment
141
+ * Lookups). The Advanced cards render statically - titles and descriptions visible,
142
+ * but no chevron and no navigation.
143
+ */
144
+ export declare const OnlyBasicInteractive: Story;
145
+ /**
146
+ * Only the Advanced settings cards are interactive; Basic cards are static.
147
+ *
148
+ * This is the reverse of the previous story - a somewhat unusual permission
149
+ * configuration where a user can access the advanced sub-pages but not the
150
+ * basic ones. Perhaps they are a specialist brought in solely to manage
151
+ * comment banks and lookup tables. In St. Olaf we once hired a man named
152
+ * Sven Thorvaldsen specifically to maintain the herring festival's judging
153
+ * criteria ledger. He had no other duties. He was very good at it.
154
+ *
155
+ * The four Basic cards (Grade Sets, Subjects, Assessment Component, Assessment
156
+ * Periods) render statically, while Comment Banks and Assessment Lookups are
157
+ * fully clickable and show their chevron icons.
158
+ */
159
+ export declare const OnlyAdvancedInteractive: Story;
160
+ /**
161
+ * A single card is interactive - Grade Sets only.
162
+ *
163
+ * This story demonstrates the finest granularity of permission control: a single
164
+ * card within a group is interactive while all others remain static. This could
165
+ * represent the very first day of a gradual feature rollout, or a user account
166
+ * with a very specific, narrow permission set.
167
+ *
168
+ * Notice that even with just one interactive card, the chevron icon makes it
169
+ * immediately obvious which card can be navigated to. The visual language is
170
+ * clear and consistent: chevron means "you can go here", no chevron means
171
+ * "this is for your information only".
172
+ */
173
+ export declare const SingleCardInteractive: Story;
174
+ //# sourceMappingURL=AssessmentSettingsPage.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssessmentSettingsPage.stories.d.ts","sourceRoot":"","sources":["../../../src/pages/assessmentSettingsPage/AssessmentSettingsPage.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAI5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDqC,CAAC;AAEhD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAMnC;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,cAAc,EAAE,KAU5B,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAMlC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,uBAAuB,EAAE,KAQrC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,qBAAqB,EAAE,KASnC,CAAC"}
@@ -0,0 +1,212 @@
1
+ import { fn } from 'storybook/test';
2
+ import { AssessmentSettingsPage } from './AssessmentSettingsPage.js';
3
+ /**
4
+ * Well, picture it: St. Olaf, 1983.
5
+ *
6
+ * Every spring, the town council would hold what we called the "Settings Gathering" -
7
+ * a big meeting in the community hall where you could sign up for all the different
8
+ * town programmes. You had your basic programmes on one side of the room: the
9
+ * grade-book committee, the subjects board, the assessment calendar - things
10
+ * everyone needed. And then on the other side, tucked in the back near the
11
+ * refreshment table, were the advanced programmes: the comment-writing circle and
12
+ * the great lookup ledger society. Nobody quite knew what the great lookup ledger
13
+ * society did, but Helga Lindqvist swore by it and won a blue ribbon at the county
14
+ * fair three years running.
15
+ *
16
+ * The AssessmentSettingsPage is exactly that community hall. It is the central hub
17
+ * for configuring everything about how assessments work in a school. Two clearly
18
+ * labelled groups - **Basic** and **Advanced** - each containing clickable Card
19
+ * components that navigate administrators to the relevant sub-page.
20
+ *
21
+ * **Basic settings (4 cards):**
22
+ * - **Grade Sets** - View, edit, or create lists of grades (e.g., Below/At/Above, GCSE 9-1)
23
+ * - **Subjects** - Manage the assessment subjects being collected
24
+ * - **Assessment Component** - View, edit, or create components (e.g., Teacher Assessments, Targets)
25
+ * - **Assessment Periods (Data Drops)** - Manage periods like Autumn, Spring, Data Drop 1, Mocks
26
+ *
27
+ * **Advanced settings (2 cards):**
28
+ * - **Comment Banks** - Manage banks of reusable report comments
29
+ * - **Assessment Lookups** - Manage lookup tables for assessment data
30
+ *
31
+ * **How cards become interactive:**
32
+ * Each Card automatically shows a chevron-right icon (and an arrow-right icon on hover)
33
+ * when an `onClick` prop is provided. Cards without an `onClick` render in a static,
34
+ * non-interactive state - no chevron, no keyboard focus, no pointer cursor. So if a
35
+ * particular sub-page is not yet available (or the user lacks permission), simply omit
36
+ * the corresponding callback and the card will gracefully sit there, still informative
37
+ * but not clickable. Just like Helga's ledger society - present, but mysterious.
38
+ *
39
+ * **Accessibility:**
40
+ * - Breadcrumb uses `<nav aria-label="Breadcrumb">` with `aria-current="page"` on the current item
41
+ * - The two settings sections use `<section aria-labelledby>` pointing to their respective headings,
42
+ * giving screen readers labelled region landmarks ("Basic" and "Advanced")
43
+ * - Each clickable Card has `tabIndex={0}` and responds to keyboard activation
44
+ * - Page structure uses semantic `<header>` and `<main>` landmarks
45
+ * - Heading hierarchy is strict: h1 (Assessment settings) -> h2 (Basic / Advanced)
46
+ */
47
+ const meta = {
48
+ title: 'Pages/AssessmentSettingsPage',
49
+ component: AssessmentSettingsPage,
50
+ parameters: {
51
+ layout: 'fullscreen',
52
+ docs: {
53
+ description: {
54
+ component: 'The Assessment Settings homepage. Displays two groups of navigable settings cards - Basic (4 cards) and Advanced (2 cards) - each of which navigates an administrator to the relevant configuration sub-page. Back in St. Olaf they called this sort of thing the "Settings Gathering", held annually in the community hall. Same idea, but with considerably fewer refreshments and much better keyboard navigation.',
55
+ },
56
+ },
57
+ },
58
+ tags: ['autodocs'],
59
+ args: {
60
+ onGradeSetsClick: fn(),
61
+ onSubjectsClick: fn(),
62
+ onAssessmentComponentClick: fn(),
63
+ onAssessmentPeriodsClick: fn(),
64
+ onCommentBanksClick: fn(),
65
+ onAssessmentLookupsClick: fn(),
66
+ },
67
+ argTypes: {
68
+ onGradeSetsClick: {
69
+ description: 'Called when the Grade Sets card is clicked. When provided, the card becomes interactive and shows a chevron-right navigation icon.',
70
+ },
71
+ onSubjectsClick: {
72
+ description: 'Called when the Subjects card is clicked. When provided, the card becomes interactive and shows a chevron-right navigation icon.',
73
+ },
74
+ onAssessmentComponentClick: {
75
+ description: 'Called when the Assessment Component card is clicked. When provided, the card becomes interactive and shows a chevron-right navigation icon.',
76
+ },
77
+ onAssessmentPeriodsClick: {
78
+ description: 'Called when the Assessment Periods (Data Drops) card is clicked. When provided, the card becomes interactive and shows a chevron-right navigation icon.',
79
+ },
80
+ onCommentBanksClick: {
81
+ description: 'Called when the Comment Banks card is clicked. When provided, the card becomes interactive and shows a chevron-right navigation icon.',
82
+ },
83
+ onAssessmentLookupsClick: {
84
+ description: 'Called when the Assessment Lookups card is clicked. When provided, the card becomes interactive and shows a chevron-right navigation icon.',
85
+ },
86
+ className: {
87
+ control: 'text',
88
+ description: 'Optional additional CSS class name(s) to apply to the page root element.',
89
+ },
90
+ },
91
+ };
92
+ export default meta;
93
+ // ---------------------------------------------------------------------------
94
+ // Stories
95
+ // ---------------------------------------------------------------------------
96
+ /**
97
+ * The default state: all six cards are fully interactive, all callbacks wired up.
98
+ *
99
+ * Oh, this is the full community hall experience! Every door is open, every
100
+ * booth is staffed, and Helga is at the refreshment table. All six settings
101
+ * cards - Grade Sets, Subjects, Assessment Component, Assessment Periods,
102
+ * Comment Banks, and Assessment Lookups - are clickable and will fire their
103
+ * respective callbacks when activated.
104
+ *
105
+ * Notice that each card displays a chevron-right icon on the right-hand side,
106
+ * which transitions to an arrow-right on hover - a clear visual cue that the
107
+ * card is a navigation destination. Click any card (or focus it and press Enter
108
+ * or Space) and watch the action appear in the Storybook Actions panel below.
109
+ *
110
+ * The breadcrumb at the top reads "Assessments / Settings", orienting the user
111
+ * within the broader app hierarchy.
112
+ */
113
+ export const Default = {
114
+ name: 'Default (All Interactive)',
115
+ };
116
+ /**
117
+ * All callbacks omitted - every card renders in its static, non-interactive state.
118
+ *
119
+ * You know, this reminds me of the time in St. Olaf when the community hall
120
+ * ran out of sign-up sheets for half the booths. The tables were still there,
121
+ * the banners still hung beautifully, but nobody could actually sign up for
122
+ * anything. We all just stood around reading the descriptions and nodding
123
+ * appreciatively.
124
+ *
125
+ * This story shows what the page looks like when no `onClick` callbacks are
126
+ * provided at all. Each Card is rendered without a chevron, without keyboard
127
+ * focusability, and without a pointer cursor. The titles and descriptions are
128
+ * still visible and informative - they just do not navigate anywhere.
129
+ *
130
+ * This state might occur if a user role does not have permission to access any
131
+ * settings sub-pages, or during a loading state before permissions have resolved.
132
+ */
133
+ export const AllCardsStatic = {
134
+ name: 'All Cards Static (No Callbacks)',
135
+ args: {
136
+ onGradeSetsClick: undefined,
137
+ onSubjectsClick: undefined,
138
+ onAssessmentComponentClick: undefined,
139
+ onAssessmentPeriodsClick: undefined,
140
+ onCommentBanksClick: undefined,
141
+ onAssessmentLookupsClick: undefined,
142
+ },
143
+ };
144
+ /**
145
+ * Only the Basic settings cards are interactive; Advanced cards are static.
146
+ *
147
+ * Back in St. Olaf, the community hall Settings Gathering had a tiered system.
148
+ * Everyone could sign up for the basic programmes, but the advanced ones - oh,
149
+ * those required a special pass from Mayor Gustafsson. If you did not have the
150
+ * pass, you could still read all about the great lookup ledger society, but you
151
+ * could not actually join. Very exclusive. Very mysterious.
152
+ *
153
+ * This story simulates a permission scenario where the current user has access
154
+ * to all four Basic settings (Grade Sets, Subjects, Assessment Component, and
155
+ * Assessment Periods) but not to the Advanced ones (Comment Banks and Assessment
156
+ * Lookups). The Advanced cards render statically - titles and descriptions visible,
157
+ * but no chevron and no navigation.
158
+ */
159
+ export const OnlyBasicInteractive = {
160
+ name: 'Only Basic Settings Interactive',
161
+ args: {
162
+ onCommentBanksClick: undefined,
163
+ onAssessmentLookupsClick: undefined,
164
+ },
165
+ };
166
+ /**
167
+ * Only the Advanced settings cards are interactive; Basic cards are static.
168
+ *
169
+ * This is the reverse of the previous story - a somewhat unusual permission
170
+ * configuration where a user can access the advanced sub-pages but not the
171
+ * basic ones. Perhaps they are a specialist brought in solely to manage
172
+ * comment banks and lookup tables. In St. Olaf we once hired a man named
173
+ * Sven Thorvaldsen specifically to maintain the herring festival's judging
174
+ * criteria ledger. He had no other duties. He was very good at it.
175
+ *
176
+ * The four Basic cards (Grade Sets, Subjects, Assessment Component, Assessment
177
+ * Periods) render statically, while Comment Banks and Assessment Lookups are
178
+ * fully clickable and show their chevron icons.
179
+ */
180
+ export const OnlyAdvancedInteractive = {
181
+ name: 'Only Advanced Settings Interactive',
182
+ args: {
183
+ onGradeSetsClick: undefined,
184
+ onSubjectsClick: undefined,
185
+ onAssessmentComponentClick: undefined,
186
+ onAssessmentPeriodsClick: undefined,
187
+ },
188
+ };
189
+ /**
190
+ * A single card is interactive - Grade Sets only.
191
+ *
192
+ * This story demonstrates the finest granularity of permission control: a single
193
+ * card within a group is interactive while all others remain static. This could
194
+ * represent the very first day of a gradual feature rollout, or a user account
195
+ * with a very specific, narrow permission set.
196
+ *
197
+ * Notice that even with just one interactive card, the chevron icon makes it
198
+ * immediately obvious which card can be navigated to. The visual language is
199
+ * clear and consistent: chevron means "you can go here", no chevron means
200
+ * "this is for your information only".
201
+ */
202
+ export const SingleCardInteractive = {
203
+ name: 'Single Card Interactive (Grade Sets Only)',
204
+ args: {
205
+ onSubjectsClick: undefined,
206
+ onAssessmentComponentClick: undefined,
207
+ onAssessmentPeriodsClick: undefined,
208
+ onCommentBanksClick: undefined,
209
+ onAssessmentLookupsClick: undefined,
210
+ },
211
+ };
212
+ //# sourceMappingURL=AssessmentSettingsPage.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssessmentSettingsPage.stories.js","sourceRoot":"","sources":["../../../src/pages/assessmentSettingsPage/AssessmentSettingsPage.stories.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,IAAI,GAAG;IACX,KAAK,EAAE,8BAA8B;IACrC,SAAS,EAAE,sBAAsB;IACjC,UAAU,EAAE;QACV,MAAM,EAAE,YAAY;QACpB,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,SAAS,EACP,uZAAuZ;aAC1Z;SACF;KACF;IACD,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,IAAI,EAAE;QACJ,gBAAgB,EAAE,EAAE,EAAE;QACtB,eAAe,EAAE,EAAE,EAAE;QACrB,0BAA0B,EAAE,EAAE,EAAE;QAChC,wBAAwB,EAAE,EAAE,EAAE;QAC9B,mBAAmB,EAAE,EAAE,EAAE;QACzB,wBAAwB,EAAE,EAAE,EAAE;KAC/B;IACD,QAAQ,EAAE;QACR,gBAAgB,EAAE;YAChB,WAAW,EACT,oIAAoI;SACvI;QACD,eAAe,EAAE;YACf,WAAW,EACT,kIAAkI;SACrI;QACD,0BAA0B,EAAE;YAC1B,WAAW,EACT,8IAA8I;SACjJ;QACD,wBAAwB,EAAE;YACxB,WAAW,EACT,yJAAyJ;SAC5J;QACD,mBAAmB,EAAE;YACnB,WAAW,EACT,uIAAuI;SAC1I;QACD,wBAAwB,EAAE;YACxB,WAAW,EACT,4IAA4I;SAC/I;QACD,SAAS,EAAE;YACT,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,0EAA0E;SACxF;KACF;CAC4C,CAAC;AAEhD,eAAe,IAAI,CAAC;AAGpB,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,OAAO,GAAU;IAC5B,IAAI,EAAE,2BAA2B;CAClC,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAU;IACnC,IAAI,EAAE,iCAAiC;IACvC,IAAI,EAAE;QACJ,gBAAgB,EAAE,SAAS;QAC3B,eAAe,EAAE,SAAS;QAC1B,0BAA0B,EAAE,SAAS;QACrC,wBAAwB,EAAE,SAAS;QACnC,mBAAmB,EAAE,SAAS;QAC9B,wBAAwB,EAAE,SAAS;KACpC;CACF,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAU;IACzC,IAAI,EAAE,iCAAiC;IACvC,IAAI,EAAE;QACJ,mBAAmB,EAAE,SAAS;QAC9B,wBAAwB,EAAE,SAAS;KACpC;CACF,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAU;IAC5C,IAAI,EAAE,oCAAoC;IAC1C,IAAI,EAAE;QACJ,gBAAgB,EAAE,SAAS;QAC3B,eAAe,EAAE,SAAS;QAC1B,0BAA0B,EAAE,SAAS;QACrC,wBAAwB,EAAE,SAAS;KACpC;CACF,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAU;IAC1C,IAAI,EAAE,2CAA2C;IACjD,IAAI,EAAE;QACJ,eAAe,EAAE,SAAS;QAC1B,0BAA0B,EAAE,SAAS;QACrC,wBAAwB,EAAE,SAAS;QACnC,mBAAmB,EAAE,SAAS;QAC9B,wBAAwB,EAAE,SAAS;KACpC;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import '@testing-library/jest-dom/vitest';
2
+ //# sourceMappingURL=AssessmentSettingsPage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssessmentSettingsPage.test.d.ts","sourceRoot":"","sources":["../../../src/pages/assessmentSettingsPage/AssessmentSettingsPage.test.tsx"],"names":[],"mappings":"AAGA,OAAO,kCAAkC,CAAC"}