@scottish-government/designsystem-react 0.12.1 → 1.0.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 (490) hide show
  1. package/.storybook/main.ts +6 -6
  2. package/.storybook/sgdsArgTypes.ts +107 -43
  3. package/CHANGELOG.md +49 -0
  4. package/LICENSE.txt +21 -0
  5. package/README.md +3 -0
  6. package/dist/common/AbstractNotificationBanner/AbstractNotificationBanner.d.ts +3 -2
  7. package/dist/common/AbstractNotificationBanner/AbstractNotificationBanner.jsx +8 -7
  8. package/dist/common/AbstractNotificationBanner/types.d.ts +13 -0
  9. package/dist/common/AbstractNotificationBanner/types.js +2 -0
  10. package/dist/common/ActionLink/ActionLink.d.ts +2 -1
  11. package/dist/common/ActionLink/types.d.ts +7 -0
  12. package/dist/common/ActionLink/types.js +2 -0
  13. package/dist/common/ConditionalWrapper/ConditionalWrapper.d.ts +2 -1
  14. package/dist/common/ConditionalWrapper/ConditionalWrapper.jsx +4 -2
  15. package/dist/common/ConditionalWrapper/types.d.ts +4 -0
  16. package/dist/common/ConditionalWrapper/types.js +2 -0
  17. package/dist/common/FileIcon/FileIcon.d.ts +2 -1
  18. package/dist/common/FileIcon/types.d.ts +6 -0
  19. package/dist/common/FileIcon/types.js +2 -0
  20. package/dist/common/HintText/HintText.d.ts +2 -1
  21. package/dist/common/HintText/HintText.jsx +3 -3
  22. package/dist/common/HintText/types.d.ts +4 -0
  23. package/dist/common/HintText/types.js +2 -0
  24. package/dist/common/Icon/Icon.d.ts +2 -1
  25. package/dist/common/Icon/Icon.jsx +3 -2
  26. package/dist/common/Icon/types.d.ts +8 -0
  27. package/dist/common/Icon/types.js +2 -0
  28. package/dist/common/ScreenReaderText/ScreenReaderText.d.ts +1 -1
  29. package/dist/common/WrapperTag/WrapperTag.d.ts +385 -1
  30. package/dist/common/WrapperTag/WrapperTag.jsx +5 -2
  31. package/dist/common/WrapperTag/types.d.ts +3 -0
  32. package/dist/common/WrapperTag/types.js +2 -0
  33. package/dist/components/Accordion/Accordion.d.ts +3 -2
  34. package/dist/components/Accordion/Accordion.jsx +12 -11
  35. package/dist/components/Accordion/types.d.ts +11 -0
  36. package/dist/components/Accordion/types.js +2 -0
  37. package/dist/components/AspectBox/AspectBox.d.ts +2 -1
  38. package/dist/components/AspectBox/AspectBox.jsx +3 -9
  39. package/dist/components/AspectBox/types.d.ts +3 -0
  40. package/dist/components/AspectBox/types.js +2 -0
  41. package/dist/components/BackToTop/BackToTop.d.ts +2 -1
  42. package/dist/components/BackToTop/BackToTop.jsx +4 -3
  43. package/dist/components/BackToTop/types.d.ts +3 -0
  44. package/dist/components/BackToTop/types.js +2 -0
  45. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +3 -2
  46. package/dist/components/Breadcrumbs/Breadcrumbs.jsx +6 -2
  47. package/dist/components/Breadcrumbs/types.d.ts +5 -0
  48. package/dist/components/Breadcrumbs/types.js +2 -0
  49. package/dist/components/Button/Button.d.ts +2 -1
  50. package/dist/components/Button/Button.jsx +4 -3
  51. package/dist/components/Button/ButtonGroup.d.ts +2 -1
  52. package/dist/components/Button/ButtonGroup.jsx +9 -4
  53. package/dist/components/Button/types.d.ts +20 -0
  54. package/dist/components/Button/types.js +2 -0
  55. package/dist/components/Card/Card.d.ts +34 -0
  56. package/dist/components/Card/Card.jsx +118 -0
  57. package/dist/components/Card/index.d.ts +1 -0
  58. package/dist/components/Card/index.js +8 -0
  59. package/dist/components/Card/types.d.ts +26 -0
  60. package/dist/components/Card/types.js +2 -0
  61. package/dist/components/CategoryItem/CategoryItem.d.ts +2 -1
  62. package/dist/components/CategoryItem/CategoryItem.jsx +8 -5
  63. package/dist/components/CategoryItem/types.d.ts +9 -0
  64. package/dist/components/CategoryItem/types.js +2 -0
  65. package/dist/components/CategoryList/CategoryList.d.ts +2 -1
  66. package/dist/components/CategoryList/CategoryList.jsx +3 -2
  67. package/dist/components/CategoryList/types.d.ts +5 -0
  68. package/dist/components/CategoryList/types.js +2 -0
  69. package/dist/components/Checkbox/Checkbox.d.ts +2 -1
  70. package/dist/components/Checkbox/Checkbox.jsx +4 -3
  71. package/dist/components/Checkbox/CheckboxGroup.d.ts +2 -1
  72. package/dist/components/Checkbox/CheckboxGroup.jsx +5 -4
  73. package/dist/components/Checkbox/types.d.ts +7 -0
  74. package/dist/components/Checkbox/types.js +2 -0
  75. package/dist/components/ConfirmationMessage/ConfirmationMessage.d.ts +2 -1
  76. package/dist/components/ConfirmationMessage/ConfirmationMessage.jsx +3 -2
  77. package/dist/components/ConfirmationMessage/types.d.ts +6 -0
  78. package/dist/components/ConfirmationMessage/types.js +2 -0
  79. package/dist/components/ContentsNav/ContentsNav.d.ts +3 -2
  80. package/dist/components/ContentsNav/ContentsNav.jsx +7 -5
  81. package/dist/components/ContentsNav/types.d.ts +9 -0
  82. package/dist/components/ContentsNav/types.js +2 -0
  83. package/dist/components/CookieBanner/CookieBanner.d.ts +3 -2
  84. package/dist/components/CookieBanner/CookieBanner.jsx +13 -3
  85. package/dist/components/DatePicker/DatePicker.d.ts +2 -1
  86. package/dist/components/DatePicker/DatePicker.jsx +7 -7
  87. package/dist/components/DatePicker/types.d.ts +18 -0
  88. package/dist/components/DatePicker/types.js +2 -0
  89. package/dist/components/Details/Details.d.ts +2 -1
  90. package/dist/components/Details/Details.jsx +6 -2
  91. package/dist/components/Details/types.d.ts +4 -0
  92. package/dist/components/Details/types.js +2 -0
  93. package/dist/components/ErrorMessage/ErrorMessage.d.ts +2 -1
  94. package/dist/components/ErrorMessage/ErrorMessage.jsx +6 -2
  95. package/dist/components/ErrorMessage/types.d.ts +3 -0
  96. package/dist/components/ErrorMessage/types.js +2 -0
  97. package/dist/components/ErrorSummary/ErrorSummary.d.ts +3 -2
  98. package/dist/components/ErrorSummary/ErrorSummary.jsx +6 -2
  99. package/dist/components/ErrorSummary/types.d.ts +8 -0
  100. package/dist/components/ErrorSummary/types.js +2 -0
  101. package/dist/components/FeatureHeader/FeatureHeader.d.ts +7 -5
  102. package/dist/components/FeatureHeader/FeatureHeader.jsx +87 -50
  103. package/dist/components/FeatureHeader/types.d.ts +12 -0
  104. package/dist/components/FeatureHeader/types.js +2 -0
  105. package/dist/components/FileDownload/FileDownload.d.ts +2 -1
  106. package/dist/components/FileDownload/FileDownload.jsx +4 -3
  107. package/dist/components/FileDownload/types.d.ts +10 -0
  108. package/dist/components/FileDownload/types.js +2 -0
  109. package/dist/components/HideThisPage/HideThisPage.d.ts +2 -1
  110. package/dist/components/HideThisPage/HideThisPage.jsx +5 -4
  111. package/dist/components/HideThisPage/types.d.ts +3 -0
  112. package/dist/components/HideThisPage/types.js +2 -0
  113. package/dist/components/InsetText/InsetText.d.ts +1 -1
  114. package/dist/components/InsetText/InsetText.jsx +6 -2
  115. package/dist/components/NotificationBanner/NotificationBanner.d.ts +3 -2
  116. package/dist/components/NotificationBanner/NotificationBanner.jsx +5 -4
  117. package/dist/components/NotificationPanel/NotificationPanel.d.ts +2 -1
  118. package/dist/components/NotificationPanel/NotificationPanel.jsx +3 -2
  119. package/dist/components/NotificationPanel/types.d.ts +6 -0
  120. package/dist/components/NotificationPanel/types.js +2 -0
  121. package/dist/components/NotificationTag/NotificationTag.d.ts +6 -0
  122. package/dist/components/NotificationTag/NotificationTag.jsx +20 -0
  123. package/dist/components/NotificationTag/index.d.ts +1 -0
  124. package/dist/components/NotificationTag/index.js +8 -0
  125. package/dist/components/NotificationTag/types.d.ts +5 -0
  126. package/dist/components/NotificationTag/types.js +2 -0
  127. package/dist/components/PageHeader/PageHeader.d.ts +2 -1
  128. package/dist/components/PageHeader/PageHeader.jsx +6 -2
  129. package/dist/components/PageHeader/types.d.ts +5 -0
  130. package/dist/components/PageHeader/types.js +2 -0
  131. package/dist/components/PageMetadata/PageMetadata.d.ts +3 -2
  132. package/dist/components/PageMetadata/PageMetadata.jsx +8 -4
  133. package/dist/components/PageMetadata/types.d.ts +6 -0
  134. package/dist/components/PageMetadata/types.js +2 -0
  135. package/dist/components/Pagination/Pagination.d.ts +3 -2
  136. package/dist/components/Pagination/Pagination.jsx +7 -5
  137. package/dist/components/Pagination/types.d.ts +18 -0
  138. package/dist/components/Pagination/types.js +2 -0
  139. package/dist/components/PhaseBanner/PhaseBanner.d.ts +2 -1
  140. package/dist/components/PhaseBanner/PhaseBanner.jsx +3 -2
  141. package/dist/components/PhaseBanner/types.d.ts +3 -0
  142. package/dist/components/PhaseBanner/types.js +2 -0
  143. package/dist/components/Question/Question.d.ts +2 -1
  144. package/dist/components/Question/Question.jsx +4 -3
  145. package/dist/components/Question/types.d.ts +9 -0
  146. package/dist/components/Question/types.js +2 -0
  147. package/dist/components/RadioButton/RadioButton.d.ts +2 -1
  148. package/dist/components/RadioButton/RadioButton.jsx +4 -3
  149. package/dist/components/RadioButton/RadioGroup.d.ts +2 -1
  150. package/dist/components/RadioButton/RadioGroup.jsx +3 -2
  151. package/dist/components/RadioButton/types.d.ts +10 -0
  152. package/dist/components/RadioButton/types.js +2 -0
  153. package/dist/components/SearchFacets/SearchFacets.d.ts +4 -3
  154. package/dist/components/SearchFacets/SearchFacets.jsx +3 -2
  155. package/dist/components/SearchFacets/types.d.ts +12 -0
  156. package/dist/components/SearchFacets/types.js +2 -0
  157. package/dist/components/SearchFilters/SearchFilters.d.ts +5 -4
  158. package/dist/components/SearchFilters/types.d.ts +12 -0
  159. package/dist/components/SearchFilters/types.js +2 -0
  160. package/dist/components/SearchResult/SearchResult.d.ts +8 -11
  161. package/dist/components/SearchResult/SearchResult.jsx +6 -7
  162. package/dist/components/SearchResult/types.d.ts +11 -0
  163. package/dist/components/SearchResult/types.js +2 -0
  164. package/dist/components/SearchSort/SearchSort.d.ts +2 -1
  165. package/dist/components/SearchSort/SearchSort.jsx +3 -2
  166. package/dist/components/SearchSort/types.d.ts +7 -0
  167. package/dist/components/SearchSort/types.js +2 -0
  168. package/dist/components/Select/Select.d.ts +2 -1
  169. package/dist/components/Select/Select.jsx +4 -3
  170. package/dist/components/Select/types.d.ts +6 -0
  171. package/dist/components/Select/types.js +2 -0
  172. package/dist/components/SequentialNavigation/SequentialNavigation.d.ts +4 -3
  173. package/dist/components/SequentialNavigation/SequentialNavigation.jsx +10 -6
  174. package/dist/components/SequentialNavigation/types.d.ts +10 -0
  175. package/dist/components/SequentialNavigation/types.js +2 -0
  176. package/dist/components/SideNavigation/SideNavigation.d.ts +4 -3
  177. package/dist/components/SideNavigation/SideNavigation.jsx +10 -7
  178. package/dist/components/SideNavigation/types.d.ts +13 -0
  179. package/dist/components/SideNavigation/types.js +2 -0
  180. package/dist/components/SiteFooter/SiteFooter.d.ts +6 -5
  181. package/dist/components/SiteFooter/SiteFooter.jsx +4 -3
  182. package/dist/components/SiteFooter/types.d.ts +16 -0
  183. package/dist/components/SiteFooter/types.js +2 -0
  184. package/dist/components/SiteHeader/SiteHeader.d.ts +6 -5
  185. package/dist/components/SiteHeader/SiteHeader.jsx +1 -1
  186. package/dist/components/SiteHeader/types.d.ts +20 -0
  187. package/dist/components/SiteHeader/types.js +2 -0
  188. package/dist/components/SiteNavigation/SiteNavigation.d.ts +3 -2
  189. package/dist/components/SiteNavigation/SiteNavigation.jsx +12 -4
  190. package/dist/components/SiteNavigation/types.d.ts +9 -0
  191. package/dist/components/SiteNavigation/types.js +2 -0
  192. package/dist/components/SiteSearch/SiteSearch.d.ts +2 -1
  193. package/dist/components/SiteSearch/SiteSearch.jsx +12 -11
  194. package/dist/components/SiteSearch/types.d.ts +17 -0
  195. package/dist/components/SiteSearch/types.js +2 -0
  196. package/dist/components/SkipLinks/SkipLinks.d.ts +3 -2
  197. package/dist/components/SkipLinks/SkipLinks.jsx +4 -4
  198. package/dist/components/SkipLinks/types.d.ts +8 -0
  199. package/dist/components/SkipLinks/types.js +2 -0
  200. package/dist/components/SummaryCard/SummaryCard.d.ts +4 -2
  201. package/dist/components/SummaryCard/SummaryCard.jsx +5 -4
  202. package/dist/components/SummaryCard/types.d.ts +5 -0
  203. package/dist/components/SummaryCard/types.js +2 -0
  204. package/dist/components/SummaryList/SummaryList.d.ts +6 -4
  205. package/dist/components/SummaryList/SummaryList.jsx +5 -4
  206. package/dist/components/SummaryList/types.d.ts +6 -0
  207. package/dist/components/SummaryList/types.js +2 -0
  208. package/dist/components/Table/Table.d.ts +2 -1
  209. package/dist/components/Table/Table.jsx +5 -4
  210. package/dist/components/Table/types.d.ts +6 -0
  211. package/dist/components/Table/types.js +2 -0
  212. package/dist/components/Tabs/Tabs.d.ts +3 -2
  213. package/dist/components/Tabs/Tabs.jsx +6 -5
  214. package/dist/components/Tabs/types.d.ts +16 -0
  215. package/dist/components/Tabs/types.js +2 -0
  216. package/dist/components/Tag/Tag.d.ts +2 -1
  217. package/dist/components/Tag/Tag.jsx +7 -3
  218. package/dist/components/Tag/types.d.ts +4 -0
  219. package/dist/components/Tag/types.js +2 -0
  220. package/dist/components/TaskList/TaskList.d.ts +4 -3
  221. package/dist/components/TaskList/TaskList.jsx +11 -8
  222. package/dist/components/TaskList/types.d.ts +17 -0
  223. package/dist/components/TaskList/types.js +2 -0
  224. package/dist/components/TextInput/TextInput.d.ts +2 -1
  225. package/dist/components/TextInput/TextInput.jsx +10 -9
  226. package/dist/components/TextInput/types.d.ts +11 -0
  227. package/dist/components/TextInput/types.js +2 -0
  228. package/dist/components/Textarea/Textarea.d.ts +2 -1
  229. package/dist/components/Textarea/Textarea.jsx +6 -5
  230. package/dist/components/WarningText/WarningText.d.ts +1 -1
  231. package/dist/components/WarningText/WarningText.jsx +6 -2
  232. package/dist/hooks/useTracking/useTracking.js +0 -1
  233. package/eslint.config.mjs +32 -0
  234. package/package.json +12 -5
  235. package/src/common/AbstractNotificationBanner/AbstractNotificationBanner.tsx +13 -10
  236. package/src/common/AbstractNotificationBanner/types.ts +15 -0
  237. package/src/common/ActionLink/ActionLink.tsx +3 -1
  238. package/src/common/ActionLink/types.ts +8 -0
  239. package/src/common/ConditionalWrapper/ConditionalWrapper.tsx +10 -2
  240. package/src/common/ConditionalWrapper/types.ts +4 -0
  241. package/src/common/FileIcon/FileIcon.tsx +2 -1
  242. package/src/common/FileIcon/types.ts +7 -0
  243. package/src/common/HintText/HintText.test.tsx +3 -15
  244. package/src/common/HintText/HintText.tsx +4 -4
  245. package/src/common/HintText/types.ts +4 -0
  246. package/src/common/Icon/Icon.tsx +5 -3
  247. package/src/common/Icon/types.ts +9 -0
  248. package/src/common/ScreenReaderText/ScreenReaderText.tsx +1 -1
  249. package/src/common/WrapperTag/WrapperTag.tsx +5 -3
  250. package/src/common/WrapperTag/types.ts +3 -0
  251. package/src/components/Accordion/Accordion.Item.stories.tsx +1 -5
  252. package/src/components/Accordion/Accordion.stories.tsx +5 -5
  253. package/src/components/Accordion/Accordion.test.tsx +11 -0
  254. package/src/components/Accordion/Accordion.tsx +15 -13
  255. package/src/components/Accordion/types.ts +13 -0
  256. package/src/components/AspectBox/AspectBox.stories.tsx +1 -2
  257. package/src/components/AspectBox/AspectBox.tsx +8 -14
  258. package/src/components/AspectBox/types.ts +3 -0
  259. package/src/components/BackToTop/BackToTop.test.tsx +21 -1
  260. package/src/components/BackToTop/BackToTop.tsx +6 -4
  261. package/src/components/BackToTop/types.ts +3 -0
  262. package/src/components/Breadcrumbs/Breadcrumbs.tsx +7 -4
  263. package/src/components/Breadcrumbs/types.ts +6 -0
  264. package/src/components/Button/Button.tsx +6 -4
  265. package/src/components/Button/ButtonGroup.stories.tsx +22 -0
  266. package/src/components/Button/ButtonGroup.test.tsx +21 -0
  267. package/src/components/Button/ButtonGroup.tsx +9 -4
  268. package/src/components/Button/types.ts +22 -0
  269. package/src/components/Card/Card.stories.tsx +446 -0
  270. package/src/components/Card/Card.test.tsx +282 -0
  271. package/src/components/Card/Card.tsx +208 -0
  272. package/src/components/Card/index.ts +1 -0
  273. package/src/components/Card/types.ts +30 -0
  274. package/src/components/CategoryItem/CategoryItem.tsx +10 -6
  275. package/src/components/CategoryItem/types.ts +10 -0
  276. package/src/components/CategoryList/CategoryList.tsx +7 -4
  277. package/src/components/CategoryList/types.ts +5 -0
  278. package/src/components/Checkbox/Checkbox.stories.tsx +3 -3
  279. package/src/components/Checkbox/Checkbox.test.tsx +30 -0
  280. package/src/components/Checkbox/Checkbox.tsx +8 -7
  281. package/src/components/Checkbox/CheckboxGroup.test.tsx +10 -0
  282. package/src/components/Checkbox/CheckboxGroup.tsx +7 -6
  283. package/src/components/Checkbox/types.ts +9 -0
  284. package/src/components/ConfirmationMessage/ConfirmationMessage.tsx +5 -3
  285. package/src/components/ConfirmationMessage/types.ts +7 -0
  286. package/src/components/ContentsNav/ContentsNav.stories.tsx +5 -1
  287. package/src/components/ContentsNav/ContentsNav.tsx +11 -7
  288. package/src/components/ContentsNav/types.ts +11 -0
  289. package/src/components/CookieBanner/CookieBanner.Buttons.stories.tsx +3 -3
  290. package/src/components/CookieBanner/CookieBanner.stories.tsx +6 -6
  291. package/src/components/CookieBanner/CookieBanner.test.tsx +24 -1
  292. package/src/components/CookieBanner/CookieBanner.tsx +16 -5
  293. package/src/components/DatePicker/DatePicker.test.tsx +52 -19
  294. package/src/components/DatePicker/DatePicker.tsx +8 -8
  295. package/src/components/DatePicker/types.ts +19 -0
  296. package/src/components/Details/Details.stories.tsx +1 -1
  297. package/src/components/Details/Details.tsx +6 -3
  298. package/src/components/Details/types.ts +4 -0
  299. package/src/components/ErrorMessage/ErrorMessage.tsx +6 -3
  300. package/src/components/ErrorMessage/types.ts +3 -0
  301. package/src/components/ErrorSummary/ErrorSummary.test.tsx +1 -1
  302. package/src/components/ErrorSummary/ErrorSummary.tsx +6 -4
  303. package/src/components/ErrorSummary/types.ts +11 -0
  304. package/src/components/FeatureHeader/FeatureHeader.stories.tsx +186 -23
  305. package/src/components/FeatureHeader/FeatureHeader.test.tsx +298 -0
  306. package/src/components/FeatureHeader/FeatureHeader.tsx +83 -58
  307. package/src/components/FeatureHeader/types.ts +13 -0
  308. package/src/components/FileDownload/FileDownload.test.tsx +1 -5
  309. package/src/components/FileDownload/FileDownload.tsx +6 -4
  310. package/src/components/FileDownload/types.ts +11 -0
  311. package/src/components/HideThisPage/HideThisPage.test.tsx +12 -1
  312. package/src/components/HideThisPage/HideThisPage.tsx +7 -5
  313. package/src/components/HideThisPage/types.ts +3 -0
  314. package/src/components/InsetText/InsetText.tsx +5 -3
  315. package/src/components/NotificationBanner/NotificationBanner.stories.tsx +2 -2
  316. package/src/components/NotificationBanner/NotificationBanner.test.tsx +10 -0
  317. package/src/components/NotificationBanner/NotificationBanner.tsx +8 -6
  318. package/src/components/NotificationPanel/NotificationPanel.tsx +5 -3
  319. package/src/components/NotificationPanel/types.ts +7 -0
  320. package/src/components/NotificationTag/NotificationTag.stories.tsx +68 -0
  321. package/src/components/NotificationTag/NotificationTag.test.tsx +70 -0
  322. package/src/components/NotificationTag/NotificationTag.tsx +32 -0
  323. package/src/components/NotificationTag/index.ts +1 -0
  324. package/src/components/NotificationTag/types.ts +5 -0
  325. package/src/components/PageHeader/PageHeader.tsx +6 -3
  326. package/src/components/PageHeader/types.ts +5 -0
  327. package/src/components/PageMetadata/PageMetadata.stories.tsx +1 -1
  328. package/src/components/PageMetadata/PageMetadata.tsx +10 -7
  329. package/src/components/PageMetadata/types.ts +7 -0
  330. package/src/components/Pagination/Pagination.test.tsx +20 -0
  331. package/src/components/Pagination/Pagination.tsx +12 -8
  332. package/src/components/Pagination/types.ts +20 -0
  333. package/src/components/PhaseBanner/PhaseBanner.stories.tsx +1 -4
  334. package/src/components/PhaseBanner/PhaseBanner.tsx +5 -3
  335. package/src/components/PhaseBanner/types.ts +3 -0
  336. package/src/components/Question/Question.tsx +6 -4
  337. package/src/components/Question/types.ts +9 -0
  338. package/src/components/RadioButton/RadioButton.test.tsx +30 -0
  339. package/src/components/RadioButton/RadioButton.tsx +8 -7
  340. package/src/components/RadioButton/RadioGroup.tsx +5 -3
  341. package/src/components/RadioButton/types.ts +12 -0
  342. package/src/components/SearchFacets/SearchFacets.Group.stories.tsx +2 -3
  343. package/src/components/SearchFacets/SearchFacets.stories.tsx +2 -2
  344. package/src/components/SearchFacets/SearchFacets.tsx +10 -8
  345. package/src/components/SearchFacets/types.ts +14 -0
  346. package/src/components/SearchFilters/SearchFilters.Panel.stories.tsx +18 -7
  347. package/src/components/SearchFilters/SearchFilters.stories.tsx +1 -1
  348. package/src/components/SearchFilters/SearchFilters.tsx +4 -3
  349. package/src/components/SearchFilters/types.ts +14 -0
  350. package/src/components/SearchResult/SearchResult.stories.tsx +23 -23
  351. package/src/components/SearchResult/SearchResult.test.tsx +5 -4
  352. package/src/components/SearchResult/SearchResult.tsx +15 -15
  353. package/src/components/SearchResult/types.ts +13 -0
  354. package/src/components/SearchSort/SearchSort.stories.tsx +2 -1
  355. package/src/components/SearchSort/SearchSort.tsx +5 -3
  356. package/src/components/SearchSort/types.ts +7 -0
  357. package/src/components/Select/Select.test.tsx +42 -0
  358. package/src/components/Select/Select.tsx +8 -6
  359. package/src/components/Select/types.ts +7 -0
  360. package/src/components/SequentialNavigation/SequentialNavigation.tsx +13 -10
  361. package/src/components/SequentialNavigation/types.ts +12 -0
  362. package/src/components/SideNavigation/SideNavigation.test.tsx +24 -0
  363. package/src/components/SideNavigation/SideNavigation.tsx +14 -10
  364. package/src/components/SideNavigation/types.ts +16 -0
  365. package/src/components/SiteFooter/SiteFooter.tsx +10 -8
  366. package/src/components/SiteFooter/types.ts +20 -0
  367. package/src/components/SiteHeader/SiteHeader.stories.tsx +4 -3
  368. package/src/components/SiteHeader/SiteHeader.test.tsx +29 -16
  369. package/src/components/SiteHeader/SiteHeader.tsx +10 -9
  370. package/src/components/SiteHeader/types.ts +22 -0
  371. package/src/components/SiteNavigation/SiteNavigation.test.tsx +16 -1
  372. package/src/components/SiteNavigation/SiteNavigation.tsx +13 -6
  373. package/src/components/SiteNavigation/types.ts +11 -0
  374. package/src/components/SiteSearch/SiteSearch.stories.tsx +4 -2
  375. package/src/components/SiteSearch/SiteSearch.test.tsx +22 -0
  376. package/src/components/SiteSearch/SiteSearch.tsx +15 -13
  377. package/src/components/SiteSearch/types.ts +19 -0
  378. package/src/components/SkipLinks/SkipLinks.stories.tsx +3 -3
  379. package/src/components/SkipLinks/SkipLinks.tsx +7 -7
  380. package/src/components/SkipLinks/types.ts +9 -0
  381. package/src/components/SummaryCard/SummaryCard.test.tsx +0 -11
  382. package/src/components/SummaryCard/SummaryCard.tsx +9 -6
  383. package/src/components/SummaryCard/types.ts +6 -0
  384. package/src/components/SummaryList/SummaryList.Item.stories.tsx +5 -5
  385. package/src/components/SummaryList/SummaryList.stories.tsx +1 -1
  386. package/src/components/SummaryList/SummaryList.test.tsx +1 -6
  387. package/src/components/SummaryList/SummaryList.tsx +11 -9
  388. package/src/components/SummaryList/types.ts +7 -0
  389. package/src/components/Table/Table.test.tsx +36 -0
  390. package/src/components/Table/Table.tsx +7 -5
  391. package/src/components/Table/types.ts +6 -0
  392. package/src/components/Tabs/Tabs.Item.stories.tsx +7 -7
  393. package/src/components/Tabs/Tabs.stories.tsx +3 -3
  394. package/src/components/Tabs/Tabs.test.tsx +14 -0
  395. package/src/components/Tabs/Tabs.tsx +12 -9
  396. package/src/components/Tabs/types.ts +19 -0
  397. package/src/components/Tag/Tag.tsx +7 -4
  398. package/src/components/Tag/types.ts +5 -0
  399. package/src/components/TaskList/TaskList.Group.stories.tsx +0 -5
  400. package/src/components/TaskList/TaskList.stories.tsx +0 -1
  401. package/src/components/TaskList/TaskList.tsx +17 -13
  402. package/src/components/TaskList/types.ts +20 -0
  403. package/src/components/TextInput/TextInput.test.tsx +53 -1
  404. package/src/components/TextInput/TextInput.tsx +17 -12
  405. package/src/components/TextInput/types.ts +12 -0
  406. package/src/components/Textarea/Textarea.test.tsx +53 -1
  407. package/src/components/Textarea/Textarea.tsx +10 -8
  408. package/src/components/WarningText/WarningText.tsx +5 -3
  409. package/src/hooks/useTracking/useTracking.test.tsx +5 -7
  410. package/src/hooks/useTracking/useTracking.ts +0 -1
  411. package/src/images/icons/arrow_upward.tsx +10 -10
  412. package/src/images/icons/calendar_today.tsx +10 -10
  413. package/src/images/icons/cancel.tsx +8 -8
  414. package/src/images/icons/check_circle.tsx +10 -10
  415. package/src/images/icons/chevron_left.tsx +10 -10
  416. package/src/images/icons/chevron_right.tsx +10 -10
  417. package/src/images/icons/close.tsx +10 -10
  418. package/src/images/icons/description.tsx +10 -10
  419. package/src/images/icons/double_chevron_left.tsx +8 -8
  420. package/src/images/icons/double_chevron_right.tsx +8 -8
  421. package/src/images/icons/error.tsx +10 -10
  422. package/src/images/icons/expand_less.tsx +10 -10
  423. package/src/images/icons/expand_more.tsx +10 -10
  424. package/src/images/icons/list.tsx +13 -13
  425. package/src/images/icons/menu.tsx +10 -10
  426. package/src/images/icons/priority_high.tsx +11 -11
  427. package/src/images/icons/search.tsx +10 -10
  428. package/src/shared-types.ts +40 -0
  429. package/static/images/illustration.svg +502 -0
  430. package/tsconfig.json +0 -3
  431. package/vite.config.ts +6 -1
  432. package/@types/common/AbstractNotificationBanner.d.ts +0 -17
  433. package/@types/common/ActionLink.d.ts +0 -8
  434. package/@types/common/ConditionalWrapper.d.ts +0 -6
  435. package/@types/common/FileIcon.d.ts +0 -7
  436. package/@types/common/HintText.d.ts +0 -6
  437. package/@types/common/Icon.d.ts +0 -9
  438. package/@types/common/ScreenReaderText.d.ts +0 -4
  439. package/@types/common/WrapperTag.d.ts +0 -5
  440. package/@types/components/Accordion.d.ts +0 -15
  441. package/@types/components/AspectBox.d.ts +0 -5
  442. package/@types/components/BackToTop.d.ts +0 -5
  443. package/@types/components/Breadcrumbs.d.ts +0 -11
  444. package/@types/components/Button.d.ts +0 -17
  445. package/@types/components/ButtonGroup.d.ts +0 -5
  446. package/@types/components/CategoryItem.d.ts +0 -10
  447. package/@types/components/CategoryList.d.ts +0 -7
  448. package/@types/components/Checkbox.d.ts +0 -11
  449. package/@types/components/ConfirmationMessage.d.ts +0 -7
  450. package/@types/components/ContentsNav.d.ts +0 -13
  451. package/@types/components/DatePicker.d.ts +0 -20
  452. package/@types/components/Details.d.ts +0 -6
  453. package/@types/components/ErrorMessage.d.ts +0 -5
  454. package/@types/components/ErrorSummary.d.ts +0 -12
  455. package/@types/components/FileDownload.d.ts +0 -11
  456. package/@types/components/HideThisPage.d.ts +0 -5
  457. package/@types/components/InsetText.d.ts +0 -5
  458. package/@types/components/Metadata.d.ts +0 -11
  459. package/@types/components/NotificationPanel.d.ts +0 -7
  460. package/@types/components/PageHeader.d.ts +0 -7
  461. package/@types/components/Pagination.d.ts +0 -22
  462. package/@types/components/PhaseBanner.d.ts +0 -5
  463. package/@types/components/Question.d.ts +0 -11
  464. package/@types/components/RadioButton.d.ts +0 -14
  465. package/@types/components/SearchFacets.d.ts +0 -18
  466. package/@types/components/SearchFilters.d.ts +0 -14
  467. package/@types/components/SearchResult.d.ts +0 -30
  468. package/@types/components/SearchSort.d.ts +0 -9
  469. package/@types/components/Select.d.ts +0 -7
  470. package/@types/components/SequentialNavigation.d.ts +0 -14
  471. package/@types/components/SideNavigation.d.ts +0 -18
  472. package/@types/components/SiteFooter.d.ts +0 -25
  473. package/@types/components/SiteHeader.d.ts +0 -20
  474. package/@types/components/SiteNavigation.d.ts +0 -13
  475. package/@types/components/SiteSearch.d.ts +0 -14
  476. package/@types/components/SkipLinks.d.ts +0 -13
  477. package/@types/components/SummaryCard.d.ts +0 -6
  478. package/@types/components/SummaryList.d.ts +0 -14
  479. package/@types/components/Table.d.ts +0 -8
  480. package/@types/components/Tabs.d.ts +0 -21
  481. package/@types/components/Tag.d.ts +0 -5
  482. package/@types/components/TaskList.d.ts +0 -22
  483. package/@types/components/TextInput.d.ts +0 -12
  484. package/@types/components/Textarea.d.ts +0 -4
  485. package/@types/components/WarningText.d.ts +0 -5
  486. package/@types/global.d.ts +0 -1
  487. package/@types/sgds.d.ts +0 -49
  488. package/dist/index.d.ts +0 -4
  489. package/dist/index.js +0 -40
  490. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,3 +1,6 @@
1
+ import { PageHeaderProps } from "./types";
2
+ import clsx from 'clsx';
3
+
1
4
  const PageHeader = ({
2
5
  children,
3
6
  className,
@@ -5,13 +8,13 @@ const PageHeader = ({
5
8
  title,
6
9
  titleId,
7
10
  ...props
8
- }: SGDS.Component.PageHeader) => {
11
+ }: PageHeaderProps) => {
9
12
  return (
10
13
  <header
11
- className={[
14
+ className={clsx([
12
15
  'ds_page-header',
13
16
  className
14
- ].join(' ')}
17
+ ])}
15
18
  {...props}
16
19
  >
17
20
  {label && <span className="ds_page-header__label ds_content-label">{label}</span>}
@@ -0,0 +1,5 @@
1
+ export interface PageHeaderProps extends React.AllHTMLAttributes<HTMLHeadingElement> {
2
+ label?: string;
3
+ title: string;
4
+ titleId?: string;
5
+ }
@@ -10,7 +10,7 @@ const meta = {
10
10
  children: argTypes.children(),
11
11
  isInline: {
12
12
  control: 'boolean',
13
- description: 'Makes the page metadata use the truncated inline display'
13
+ description: 'Makes the page metadata use the truncated \'inline\' display'
14
14
  },
15
15
  },
16
16
  args: {
@@ -1,14 +1,17 @@
1
- const MetadataItem= ({
1
+ import { MetdataItemProps, MetadataProps } from "./types";
2
+ import clsx from 'clsx';
3
+
4
+ const MetadataItem = ({
2
5
  children,
3
6
  className,
4
7
  name,
5
8
  ...props
6
- }: SGDS.Component.Metadata.Item) => {
9
+ }: MetdataItemProps) => {
7
10
  return (
8
- <div className={[
11
+ <div className={clsx([
9
12
  'ds_metadata__item',
10
13
  className
11
- ].join(' ')}
14
+ ])}
12
15
  {...props}
13
16
  >
14
17
  <dt className="ds_metadata__key">{name}</dt>{' '}
@@ -24,14 +27,14 @@ const Metadata = ({
24
27
  className,
25
28
  isInline,
26
29
  ...props
27
- }: SGDS.Component.Metadata) => {
30
+ }: MetadataProps) => {
28
31
  return (
29
32
  <dl
30
- className={[
33
+ className={clsx([
31
34
  'ds_metadata',
32
35
  isInline && 'ds_metadata--inline',
33
36
  className
34
- ].join(' ')}
37
+ ])}
35
38
  {...props}
36
39
  >
37
40
  {children}
@@ -0,0 +1,7 @@
1
+ export interface MetdataItemProps extends React.AllHTMLAttributes<HTMLElement> {
2
+ name: string;
3
+ }
4
+
5
+ export interface MetadataProps extends React.AllHTMLAttributes<HTMLDListElement> {
6
+ isInline?: boolean;
7
+ }
@@ -84,6 +84,26 @@ test('pagination page with click event', () => {
84
84
  expect(ONCLICK_FUNCTION).toHaveBeenCalled();
85
85
  });
86
86
 
87
+ test('pagination page with onClick that is not a function', () => {
88
+ render(
89
+ <Page
90
+ ariaLabel={PAGE_ARIA_LABEL}
91
+ href={PAGE_HREF}
92
+ // @ts-expect-error onClick is not a function
93
+ onClick='foo'
94
+ >{PAGE_LABEL}</Page>
95
+ );
96
+
97
+ const item = screen.getByRole('listitem');
98
+ const link = within(item).getByRole('link');
99
+
100
+ fireEvent.click(link);
101
+
102
+ // todo: assertion
103
+ // success indicated by no errors thrown
104
+ // error would be thrown on an untestable thread
105
+ });
106
+
87
107
  test('Ellipsis item renders correctly', () => {
88
108
  render(
89
109
  <Ellipsis/>
@@ -1,4 +1,7 @@
1
1
  import Icon from "../../common/Icon";
2
+ import { PaginationPageProps, PaginationProps } from "./types";
3
+ import { LinkComponentProps } from "../../shared-types";
4
+ import clsx from 'clsx';
2
5
 
3
6
  export const Page = ({
4
7
  ariaLabel,
@@ -8,21 +11,22 @@ export const Page = ({
8
11
  isCurrent = false,
9
12
  linkComponent,
10
13
  onClick
11
- }: SGDS.Component.Pagination.Page) => {
14
+ }: PaginationPageProps) => {
12
15
  function handleClick(event: React.MouseEvent) {
16
+ /* istanbul ignore else */
13
17
  if (typeof onClick === 'function') {
14
18
  onClick(event);
15
19
  }
16
20
  }
17
21
 
18
22
  function processChildren(children: React.ReactNode) {
19
- const classNames = [
23
+ const classNames = clsx([
20
24
  'ds_pagination__link',
21
25
  className,
22
- isCurrent ? 'ds_current' : undefined
23
- ].join(' ');
26
+ isCurrent && 'ds_current'
27
+ ]);
24
28
 
25
- const linkProps: SGDS.LinkComponentProps = {
29
+ const linkProps: LinkComponentProps = {
26
30
  'aria-label': ariaLabel,
27
31
  href: href,
28
32
  onClick: handleClick
@@ -68,7 +72,7 @@ const Pagination = ({
68
72
  totalPages,
69
73
  linkComponent,
70
74
  ...props
71
- }: SGDS.Component.Pagination) => {
75
+ }: PaginationProps) => {
72
76
  padding = Number(padding);
73
77
  page = Number(page);
74
78
 
@@ -105,10 +109,10 @@ const Pagination = ({
105
109
  }
106
110
 
107
111
  return (
108
- <nav className={[
112
+ <nav className={clsx([
109
113
  'ds_pagination',
110
114
  className
111
- ].join(' ')}
115
+ ])}
112
116
  aria-label={ariaLabel}
113
117
  {...props}
114
118
  >
@@ -0,0 +1,20 @@
1
+ import { LinkComponent } from '../../shared-types';
2
+
3
+ export interface PaginationPageProps extends React.AllHTMLAttributes<HTMLElement> {
4
+ ariaLabel: React.AriaAttributes['aria-label'];
5
+ isCurrent?: boolean;
6
+ href: string;
7
+ linkComponent?: LinkComponent;
8
+ onClick?: React.EventHandler<React.FormEvent>;
9
+ }
10
+
11
+ export interface PaginationProps extends React.AllHTMLAttributes<HTMLElement> {
12
+ ariaLabel: React.AriaAttributes['aria-label'];
13
+ className?: string;
14
+ linkComponent?: LinkComponent;
15
+ onClick?: React.EventHandler<React.FormEvent>;
16
+ padding: number;
17
+ page: number;
18
+ pattern: string;
19
+ totalPages: number;
20
+ }
@@ -31,8 +31,5 @@ export const CustomContent: Story = {
31
31
  args: {
32
32
  phaseName: 'Beta',
33
33
  children: <>This is a new service. Your <a href="#foo">feedback</a> will help us to improve it.</>
34
- },
35
- render: (args: any) => (
36
- <PhaseBanner {...args}></PhaseBanner>
37
- )
34
+ }
38
35
  };
@@ -1,17 +1,19 @@
1
1
  import Tag from "../Tag/Tag";
2
+ import { PhaseBannerProps } from "./types";
3
+ import clsx from 'clsx';
2
4
 
3
5
  const PhaseBanner = ({
4
6
  children,
5
7
  className,
6
8
  phaseName,
7
9
  ...props
8
- }: SGDS.Component.PhaseBanner) => {
10
+ }: PhaseBannerProps) => {
9
11
  return (
10
12
  <div
11
- className={[
13
+ className={clsx([
12
14
  'ds_phase-banner',
13
15
  className
14
- ].join(' ')}
16
+ ])}
15
17
  {...props}
16
18
  >
17
19
  <div className="ds_wrapper">
@@ -0,0 +1,3 @@
1
+ export interface PhaseBannerProps extends React.AllHTMLAttributes<HTMLDivElement> {
2
+ phaseName: string;
3
+ }
@@ -1,6 +1,8 @@
1
1
  import ErrorMessage from '../ErrorMessage';
2
2
  import HintText from '../../common/HintText'
3
3
  import WrapperTag from '../../common/WrapperTag';
4
+ import { QuestionProps } from './types';
5
+ import clsx from 'clsx';
4
6
 
5
7
  const Question = function ({
6
8
  children,
@@ -11,19 +13,19 @@ const Question = function ({
11
13
  legend,
12
14
  tagName = 'div',
13
15
  ...props
14
- }: SGDS.Component.Question) {
16
+ }: QuestionProps) {
15
17
  return (
16
18
  <WrapperTag
17
19
  tagName={tagName}
18
- className={[
20
+ className={clsx([
19
21
  'ds_question',
20
22
  hasError && 'ds_question--error',
21
23
  className
22
- ].join(' ')}
24
+ ])}
23
25
  {...props}
24
26
  >
25
27
  {legend && <legend>{legend}</legend>}
26
- {hintText && <HintText text={hintText} />}
28
+ {hintText && <HintText>{hintText}</HintText>}
27
29
  {hasError && errorMessage && <ErrorMessage>{errorMessage}</ErrorMessage>}
28
30
  {children}
29
31
  </WrapperTag>
@@ -0,0 +1,9 @@
1
+ type QuestionTags = 'div' | 'fieldset';
2
+
3
+ export interface QuestionProps extends React.AllHTMLAttributes<HTMLElement> {
4
+ errorMessage?: string | React.ReactNode;
5
+ hasError?: boolean;
6
+ hintText?: string | React.ReactNode;
7
+ legend?: string;
8
+ tagName: QuestionTags;
9
+ }
@@ -61,6 +61,36 @@ test('radio with change fn', () => {
61
61
  expect(ONCHANGE_FUNCTION).toHaveBeenCalled();
62
62
  });
63
63
 
64
+ test('radio with onBlur that is not a function', () => {
65
+ render(
66
+ // @ts-expect-error onBlur is not a function
67
+ <RadioButton onBlur='foo' name="benefitType" label="Pension Credit" id="pensioncredit" />
68
+ );
69
+
70
+ const radio = screen.getByRole('radio');
71
+
72
+ fireEvent.blur(radio);
73
+
74
+ // todo: assertion
75
+ // success indicated by no errors thrown
76
+ // error would be thrown on an untestable thread
77
+ });
78
+
79
+ test('radio with onChange that is not a function', () => {
80
+ render(
81
+ // @ts-expect-error onChange is not a function
82
+ <RadioButton onChange='foo' name="benefitType" label="Pension Credit" id="pensioncredit" />
83
+ );
84
+
85
+ const radio = screen.getByRole('radio');
86
+
87
+ fireEvent.click(radio);
88
+
89
+ // todo: assertion
90
+ // success indicated by no errors thrown
91
+ // error would be thrown on an untestable thread
92
+ });
93
+
64
94
  test('radio with hint text', () => {
65
95
  render(
66
96
  <RadioButton hintText="hint text" name="benefitType" label="Pension Credit" id="pensioncredit" />
@@ -1,7 +1,8 @@
1
1
  import { useContext } from 'react';
2
-
3
2
  import HintText from '../../common/HintText';
4
3
  import { CheckboxRadioContext } from '../../utils/context';
4
+ import { RadioButtonProps } from './types';
5
+ import clsx from 'clsx';
5
6
 
6
7
  const RadioButton = ({
7
8
  checked,
@@ -12,16 +13,16 @@ const RadioButton = ({
12
13
  name,
13
14
  onBlur,
14
15
  onChange
15
- }: SGDS.Component.RadioButton) => {
16
+ }: RadioButtonProps) => {
16
17
  const hintTextId = `hint-text-${id}`;
17
18
 
18
- function handleBlur(event: React.FocusEvent) {
19
+ function handleBlur(event: React.FocusEvent<HTMLInputElement>) {
19
20
  if (typeof onBlur === 'function') {
20
21
  onBlur(event);
21
22
  }
22
23
  }
23
24
 
24
- function handleChange(event: React.ChangeEvent) {
25
+ function handleChange(event: React.ChangeEvent<HTMLInputElement>) {
25
26
  if (typeof onChange === 'function') {
26
27
  onChange(event);
27
28
  }
@@ -32,10 +33,10 @@ const RadioButton = ({
32
33
 
33
34
  return (
34
35
  <div
35
- className={[
36
+ className={clsx([
36
37
  'ds_radio',
37
38
  isSmall && 'ds_radio--small'
38
- ].join(' ')}>
39
+ ])}>
39
40
  <input
40
41
  aria-describedby={hintText ? hintTextId : undefined}
41
42
  className="ds_radio__input"
@@ -49,7 +50,7 @@ const RadioButton = ({
49
50
  className="ds_radio__label"
50
51
  htmlFor={id}
51
52
  >{label}</label>
52
- {hintText && <HintText id={hintTextId} text={hintText} />}
53
+ {hintText && <HintText id={hintTextId}>{hintText}</HintText>}
53
54
  </div>
54
55
  );
55
56
  };
@@ -1,5 +1,7 @@
1
1
  import React from 'react';
2
2
  import { CheckboxRadioContext } from '../../utils/context';
3
+ import { RadioGroupProps } from './types';
4
+ import clsx from 'clsx';
3
5
 
4
6
  const RadioGroup = ({
5
7
  children,
@@ -8,15 +10,15 @@ const RadioGroup = ({
8
10
  isSmall,
9
11
  name = '',
10
12
  ...props
11
- }: SGDS.Component.RadioButton.Group) => {
13
+ }: RadioGroupProps) => {
12
14
  return (
13
15
  <div
14
- className={[
16
+ className={clsx([
15
17
  'ds_radios',
16
18
  'ds_field-group',
17
19
  isInline && 'ds_field-group--inline',
18
20
  className
19
- ].join(' ')}
21
+ ])}
20
22
  {...props}
21
23
  >
22
24
  <CheckboxRadioContext value={{ isSmall: !!isSmall, name}}>
@@ -0,0 +1,12 @@
1
+ import { CheckboxRadioBase } from "../../shared-types";
2
+
3
+ export interface RadioGroupProps extends React.AllHTMLAttributes<HTMLElement> {
4
+ isInline?: boolean;
5
+ name?: string;
6
+ isSmall?: boolean;
7
+ }
8
+
9
+ export interface RadioButtonProps extends CheckboxRadioBase<HTMLInputElement> {
10
+ id: string;
11
+ name?: string;
12
+ }
@@ -2,7 +2,6 @@ import type { Meta, StoryObj } from '@storybook/react-vite';
2
2
  import argTypes from '../../../.storybook/sgdsArgTypes';
3
3
 
4
4
  import Facets from './SearchFacets';
5
- import { join } from 'path';
6
5
 
7
6
  const meta = {
8
7
  title: 'Components/Search results/Facets/Group',
@@ -37,7 +36,7 @@ export default meta;
37
36
  type Story = StoryObj<typeof meta>;
38
37
 
39
38
  export const Default: Story = {
40
- render: (args: any) => (
39
+ render: ({ ... args }) => (
41
40
  <Facets.Group {...args}>
42
41
  <Facets.Item title="Advice and guidance" />
43
42
  <Facets.Item title="Factsheet"/>
@@ -47,7 +46,7 @@ export const Default: Story = {
47
46
  };
48
47
 
49
48
  export const CustomJoinContent: Story = {
50
- render: (args: any) => (
49
+ render: () => (
51
50
  <Facets.Group joinContent="and" title="Updated between">
52
51
  <Facets.Item accessibleName="Updated after 01/10/2025" title="01/10/2025" />
53
52
  <Facets.Item accessibleName="Updated before 31/10/2025" title="31/10/2025"/>
@@ -10,7 +10,7 @@ const meta = {
10
10
  children: argTypes.children()
11
11
  },
12
12
  args: {
13
- title: 'Application incomplete'
13
+
14
14
  }
15
15
  } satisfies Meta<typeof Facets>;
16
16
 
@@ -18,7 +18,7 @@ export default meta;
18
18
  type Story = StoryObj<typeof meta>;
19
19
 
20
20
  export const Default: Story = {
21
- render: (args: any) => (
21
+ render: ({ ...args }) => (
22
22
  <Facets {...args}>
23
23
  <Facets.Group title="Content type">
24
24
  <Facets.Item title="Advice and guidance" />
@@ -1,6 +1,8 @@
1
1
  import React, { Children } from 'react';
2
2
  import Icon from "../../common/Icon";
3
3
  import { Cancel } from '../../../src/images/icons';
4
+ import { SearchFacetsGroupProps, SearchFacetsItemProps, SearchFacetsProps } from './types';
5
+ import clsx from 'clsx';
4
6
 
5
7
  const FacetsItem = ({
6
8
  accessibleName,
@@ -8,7 +10,7 @@ const FacetsItem = ({
8
10
  onClick,
9
11
  title,
10
12
  ...props
11
- }: SGDS.Component.SearchFacets.Item) => {
13
+ }: SearchFacetsItemProps) => {
12
14
  accessibleName = accessibleName ? accessibleName : title;
13
15
 
14
16
  return (
@@ -31,7 +33,7 @@ const FacetsGroup = ({
31
33
  joinContent = 'or',
32
34
  title,
33
35
  ...props
34
- }: SGDS.Component.SearchFacets.Group) => {
36
+ }: SearchFacetsGroupProps) => {
35
37
  return (
36
38
  <div className="ds_facet-group" {...props}>
37
39
  <dt className="ds_facet__group-title">
@@ -39,7 +41,7 @@ const FacetsGroup = ({
39
41
  </dt>
40
42
  {
41
43
  Children.map(children, (child, index) => {
42
- const thisChild = child as React.ReactElement<SGDS.Component.SearchFacets.Item>
44
+ const thisChild = child as React.ReactElement<SearchFacetsItemProps>
43
45
  return React.cloneElement(thisChild, { joinContent: index > 0 ? joinContent : undefined, key: 'facet' + index });
44
46
  })
45
47
  }
@@ -51,10 +53,10 @@ const Facets = ({
51
53
  children,
52
54
  className,
53
55
  ...props
54
- }: SGDS.Component.SearchFacets) => {
56
+ }: SearchFacetsProps) => {
55
57
  let facetCount = 0;
56
58
 
57
- function processChild(item: any) {
59
+ function processChild(item: React.JSX.Element) {
58
60
  if (item.type.displayName === 'Facets.Item') {
59
61
  facetCount = facetCount + 1;
60
62
 
@@ -66,14 +68,14 @@ const Facets = ({
66
68
  }
67
69
 
68
70
  Children.forEach(children, child => {
69
- processChild(child);
71
+ processChild(child as React.JSX.Element);
70
72
  });
71
73
 
72
74
  return (
73
- <div className={[
75
+ <div className={clsx([
74
76
  "ds_facets",
75
77
  className
76
- ].join(' ')}
78
+ ])}
77
79
  {...props}
78
80
  >
79
81
  <p className="visually-hidden">There {facetCount === 1 ? 'is' : 'are'} {facetCount} search {facetCount === 1 ? 'filter' : 'filters'} applied</p>
@@ -0,0 +1,14 @@
1
+ export interface SearchFacetsGroupProps extends React.AllHTMLAttributes<HTMLElement> {
2
+ joinContent?: string;
3
+ title: string;
4
+ }
5
+
6
+ export interface SearchFacetsItemProps extends React.AllHTMLAttributes<HTMLElement> {
7
+ accessibleName?: string;
8
+ joinContent?: string;
9
+ title: string;
10
+ }
11
+
12
+ export interface SearchFacetsProps extends React.AllHTMLAttributes<HTMLElement> {
13
+ headingId?: string;
14
+ }
@@ -39,12 +39,22 @@ const meta = {
39
39
  name: 'number'
40
40
  }
41
41
  }
42
+ },
43
+ args: {
44
+ heading: 'Filter',
45
+ legend: 'Select which publication types you would like to see'
42
46
  }
43
47
  } satisfies Meta<typeof Filters.Panel>;
44
48
 
45
49
  export default meta;
46
50
  type Story = StoryObj<typeof meta>;
47
51
 
52
+ type ContentTypeType = {
53
+ label: string;
54
+ value: string;
55
+ checked?: boolean;
56
+ };
57
+
48
58
  const CONTENT_TYPES = [
49
59
  {
50
60
  label: 'Advice and guidance',
@@ -134,7 +144,7 @@ CONTENT_TYPES_WITH_SELECTED[4].checked = true;
134
144
  CONTENT_TYPES_WITH_SELECTED[7].checked = true;
135
145
 
136
146
  export const Default: Story = {
137
- render: (args: any) => (
147
+ render: () => (
138
148
  <Filters.Panel
139
149
  heading="Filter by date"
140
150
  legend="Filter by date"
@@ -155,12 +165,12 @@ export const Default: Story = {
155
165
  };
156
166
 
157
167
  export const Scrollable: Story = {
158
- render: (args: any) => (
168
+ render: ({ ...args }) => (
159
169
  <Filters.Panel
170
+ {...args}
160
171
  heading="Content type"
161
172
  isScrollable
162
173
  legend="Select which publication types you would like to see"
163
- {...args}
164
174
  >
165
175
  <Filters.CheckboxGroup>
166
176
  {CONTENT_TYPES.map((type) => (
@@ -177,16 +187,17 @@ export const Scrollable: Story = {
177
187
  };
178
188
 
179
189
  export const WithActiveFilterCount: Story = {
180
- render: (args: any) => (
190
+ args: {},
191
+ render: ({ ...args }) => (
181
192
  <Filters.Panel
182
- activeFilterCount={CONTENT_TYPES_WITH_SELECTED.filter((item: any) => item.checked).length}
193
+ {...args}
194
+ activeFilterCount={CONTENT_TYPES_WITH_SELECTED.filter((item: ContentTypeType) => item.checked).length}
183
195
  heading="Content type"
184
196
  isScrollable
185
197
  legend="Select which publication types you would like to see"
186
- {...args}
187
198
  >
188
199
  <Filters.CheckboxGroup>
189
- {CONTENT_TYPES_WITH_SELECTED.map((type: any) => (
200
+ {CONTENT_TYPES_WITH_SELECTED.map((type: ContentTypeType) => (
190
201
  <Checkbox
191
202
  checked={type.checked || false}
192
203
  key={type.value}
@@ -104,7 +104,7 @@ const CONTENT_TYPES = [
104
104
  ];
105
105
 
106
106
  export const Default: Story = {
107
- render: (args: any) => (
107
+ render: ({ ...args }) => (
108
108
  <Filters {...args}>
109
109
  <Filters.Panel legend="Select which publication types you would like to see" heading="Content type">
110
110
  <Filters.CheckboxGroup>
@@ -3,6 +3,7 @@ import Button from "../Button";
3
3
  import SkipLinks from "../SkipLinks";
4
4
  import ConditionalWrapper from "../../common/ConditionalWrapper";
5
5
  import { CheckboxGroup } from "../Checkbox";
6
+ import { SearchFiltersPanelProps, SearchFiltersCheckboxGroupProps, SearchFiltersProps } from "./types";
6
7
 
7
8
  export const FilterPanel = ({
8
9
  activeFilterCount = 0,
@@ -11,7 +12,7 @@ export const FilterPanel = ({
11
12
  legend,
12
13
  heading = 'Filter',
13
14
  ...props
14
- }: SGDS.Component.SearchFilters.Panel) => {
15
+ }: SearchFiltersPanelProps) => {
15
16
  const headingWithCount = <>
16
17
  {heading}
17
18
  {activeFilterCount > 0 && <div className="ds_search-filters__filter-count">({activeFilterCount} selected)</div>}
@@ -36,7 +37,7 @@ export const FilterPanel = ({
36
37
  const FilterCheckboxGroup = ({
37
38
  children,
38
39
  ...props
39
- }: any) => {
40
+ }: SearchFiltersCheckboxGroupProps) => {
40
41
  return (
41
42
  <CheckboxGroup
42
43
  className="ds_search-filters__checkboxes"
@@ -52,7 +53,7 @@ const Filters = ({
52
53
  children,
53
54
  searchResultsContainerId = 'search-results',
54
55
  ...props
55
- }: SGDS.Component.SearchFilters) => {
56
+ }: SearchFiltersProps) => {
56
57
  return (
57
58
  <div className="ds_search-filters" {...props}>
58
59
  <div className="ds_details ds_no-margin" data-module="ds-details">
@@ -0,0 +1,14 @@
1
+ export interface SearchFiltersPanelProps extends React.AllHTMLAttributes<HTMLElement> {
2
+ activeFilterCount?: number;
3
+ heading: string | React.ReactNode;
4
+ isScrollable?: boolean;
5
+ legend: string;
6
+ }
7
+
8
+ export interface SearchFiltersCheckboxGroupProps {
9
+ children: React.ReactNode,
10
+ }
11
+
12
+ export interface SearchFiltersProps extends React.AllHTMLAttributes<HTMLElement> {
13
+ searchResultsContainerId?: string;
14
+ }