@arbor-education/design-system.components 0.25.8 → 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 (432) hide show
  1. package/.gather/instructions/project-overview.md +1 -1
  2. package/.github/CODEOWNERS +1 -0
  3. package/.snyk +3 -0
  4. package/CHANGELOG.md +20 -0
  5. package/CODEOWNERS +2 -1
  6. package/CONTRIBUTING.md +7 -5
  7. package/component-library.md +97 -3
  8. package/dist/components/datePicker/DatePicker.d.ts.map +1 -1
  9. package/dist/components/datePicker/DatePicker.js +8 -6
  10. package/dist/components/datePicker/DatePicker.js.map +1 -1
  11. package/dist/components/datePicker/DatePickerCalendar.d.ts +10 -0
  12. package/dist/components/datePicker/DatePickerCalendar.d.ts.map +1 -0
  13. package/dist/components/datePicker/DatePickerCalendar.js +9 -0
  14. package/dist/components/datePicker/DatePickerCalendar.js.map +1 -0
  15. package/dist/components/dateTimePicker/DateTimePicker.d.ts.map +1 -1
  16. package/dist/components/dateTimePicker/DateTimePicker.js +11 -8
  17. package/dist/components/dateTimePicker/DateTimePicker.js.map +1 -1
  18. package/dist/components/emptyState/EmptyState.d.ts +22 -0
  19. package/dist/components/emptyState/EmptyState.d.ts.map +1 -0
  20. package/dist/components/emptyState/EmptyState.js +11 -0
  21. package/dist/components/emptyState/EmptyState.js.map +1 -0
  22. package/dist/components/emptyState/EmptyState.stories.d.ts +117 -0
  23. package/dist/components/emptyState/EmptyState.stories.d.ts.map +1 -0
  24. package/dist/components/emptyState/EmptyState.stories.js +332 -0
  25. package/dist/components/emptyState/EmptyState.stories.js.map +1 -0
  26. package/dist/components/emptyState/EmptyState.test.d.ts +2 -0
  27. package/dist/components/emptyState/EmptyState.test.d.ts.map +1 -0
  28. package/dist/components/emptyState/EmptyState.test.js +80 -0
  29. package/dist/components/emptyState/EmptyState.test.js.map +1 -0
  30. package/dist/components/favourite/FavouriteButton.d.ts +18 -0
  31. package/dist/components/favourite/FavouriteButton.d.ts.map +1 -0
  32. package/dist/components/favourite/FavouriteButton.js +16 -0
  33. package/dist/components/favourite/FavouriteButton.js.map +1 -0
  34. package/dist/components/favourite/FavouriteButton.test.d.ts +2 -0
  35. package/dist/components/favourite/FavouriteButton.test.d.ts.map +1 -0
  36. package/dist/components/favourite/FavouriteButton.test.js +37 -0
  37. package/dist/components/favourite/FavouriteButton.test.js.map +1 -0
  38. package/dist/components/filterBar/FilterBar.d.ts +1 -1
  39. package/dist/components/filterBar/FilterBar.stories.d.ts +1 -1
  40. package/dist/components/icon/Icon.d.ts +1 -1
  41. package/dist/components/icon/Icon.d.ts.map +1 -1
  42. package/dist/components/icon/Icon.js +1 -1
  43. package/dist/components/icon/Icon.js.map +1 -1
  44. package/dist/components/pill/Pill.d.ts +3 -2
  45. package/dist/components/pill/Pill.d.ts.map +1 -1
  46. package/dist/components/pill/Pill.js +15 -9
  47. package/dist/components/pill/Pill.js.map +1 -1
  48. package/dist/components/pill/Pill.stories.d.ts +21 -3
  49. package/dist/components/pill/Pill.stories.d.ts.map +1 -1
  50. package/dist/components/pill/Pill.stories.js +275 -40
  51. package/dist/components/pill/Pill.stories.js.map +1 -1
  52. package/dist/components/pill/Pill.test.js +64 -3
  53. package/dist/components/pill/Pill.test.js.map +1 -1
  54. package/dist/components/sideNavigation/SideNavigation.d.ts +34 -0
  55. package/dist/components/sideNavigation/SideNavigation.d.ts.map +1 -0
  56. package/dist/components/sideNavigation/SideNavigation.js +30 -0
  57. package/dist/components/sideNavigation/SideNavigation.js.map +1 -0
  58. package/dist/components/sideNavigation/SideNavigation.stories.d.ts +72 -0
  59. package/dist/components/sideNavigation/SideNavigation.stories.d.ts.map +1 -0
  60. package/dist/components/sideNavigation/SideNavigation.stories.js +298 -0
  61. package/dist/components/sideNavigation/SideNavigation.stories.js.map +1 -0
  62. package/dist/components/sideNavigation/SideNavigation.test.d.ts +2 -0
  63. package/dist/components/sideNavigation/SideNavigation.test.d.ts.map +1 -0
  64. package/dist/components/sideNavigation/SideNavigation.test.js +74 -0
  65. package/dist/components/sideNavigation/SideNavigation.test.js.map +1 -0
  66. package/dist/components/sideNavigation/SideNavigationContext.d.ts +10 -0
  67. package/dist/components/sideNavigation/SideNavigationContext.d.ts.map +1 -0
  68. package/dist/components/sideNavigation/SideNavigationContext.js +15 -0
  69. package/dist/components/sideNavigation/SideNavigationContext.js.map +1 -0
  70. package/dist/components/{sidebarNav/SidebarNavGroup.d.ts → sideNavigation/SideNavigationGroup.d.ts} +3 -3
  71. package/dist/components/sideNavigation/SideNavigationGroup.d.ts.map +1 -0
  72. package/dist/components/sideNavigation/SideNavigationGroup.js +16 -0
  73. package/dist/components/sideNavigation/SideNavigationGroup.js.map +1 -0
  74. package/dist/components/sideNavigation/SideNavigationGroup.test.d.ts +2 -0
  75. package/dist/components/sideNavigation/SideNavigationGroup.test.d.ts.map +1 -0
  76. package/dist/components/sideNavigation/SideNavigationGroup.test.js +58 -0
  77. package/dist/components/sideNavigation/SideNavigationGroup.test.js.map +1 -0
  78. package/dist/components/{sidebarNav/SidebarNavItem.d.ts → sideNavigation/SideNavigationItem.d.ts} +11 -12
  79. package/dist/components/sideNavigation/SideNavigationItem.d.ts.map +1 -0
  80. package/dist/components/sideNavigation/SideNavigationItem.js +28 -0
  81. package/dist/components/sideNavigation/SideNavigationItem.js.map +1 -0
  82. package/dist/components/sideNavigation/SideNavigationItem.test.d.ts +2 -0
  83. package/dist/components/sideNavigation/SideNavigationItem.test.d.ts.map +1 -0
  84. package/dist/components/sideNavigation/SideNavigationItem.test.js +65 -0
  85. package/dist/components/sideNavigation/SideNavigationItem.test.js.map +1 -0
  86. package/dist/components/sideNavigation/SideNavigationItemFavourite.d.ts +8 -0
  87. package/dist/components/sideNavigation/SideNavigationItemFavourite.d.ts.map +1 -0
  88. package/dist/components/{sidebarNav/SidebarNavItemFavourite.js → sideNavigation/SideNavigationItemFavourite.js} +5 -5
  89. package/dist/components/sideNavigation/SideNavigationItemFavourite.js.map +1 -0
  90. package/dist/components/sideNavigation/SideNavigationItemFavourite.test.d.ts +2 -0
  91. package/dist/components/sideNavigation/SideNavigationItemFavourite.test.d.ts.map +1 -0
  92. package/dist/components/sideNavigation/SideNavigationItemFavourite.test.js +31 -0
  93. package/dist/components/sideNavigation/SideNavigationItemFavourite.test.js.map +1 -0
  94. package/dist/components/sideNavigation/SideNavigationTitle.d.ts +4 -0
  95. package/dist/components/sideNavigation/SideNavigationTitle.d.ts.map +1 -0
  96. package/dist/components/sideNavigation/SideNavigationTitle.js +7 -0
  97. package/dist/components/sideNavigation/SideNavigationTitle.js.map +1 -0
  98. package/dist/components/sideNavigation/SideNavigationTitle.test.d.ts +2 -0
  99. package/dist/components/sideNavigation/SideNavigationTitle.test.d.ts.map +1 -0
  100. package/dist/components/sideNavigation/SideNavigationTitle.test.js +22 -0
  101. package/dist/components/sideNavigation/SideNavigationTitle.test.js.map +1 -0
  102. package/dist/components/sideNavigation/SideNavigationTooltip.d.ts +7 -0
  103. package/dist/components/sideNavigation/SideNavigationTooltip.d.ts.map +1 -0
  104. package/dist/components/{sidebarNav/SidebarNavTooltip.js → sideNavigation/SideNavigationTooltip.js} +2 -2
  105. package/dist/components/sideNavigation/SideNavigationTooltip.js.map +1 -0
  106. package/dist/components/sideNavigation/SideNavigationTooltip.test.d.ts +2 -0
  107. package/dist/components/sideNavigation/SideNavigationTooltip.test.d.ts.map +1 -0
  108. package/dist/components/sideNavigation/SideNavigationTooltip.test.js +26 -0
  109. package/dist/components/sideNavigation/SideNavigationTooltip.test.js.map +1 -0
  110. package/dist/components/sideNavigation/resolvePanelItemProps.d.ts +4 -0
  111. package/dist/components/sideNavigation/resolvePanelItemProps.d.ts.map +1 -0
  112. package/dist/components/{sidebarNav → sideNavigation}/resolvePanelItemProps.js +5 -4
  113. package/dist/components/sideNavigation/resolvePanelItemProps.js.map +1 -0
  114. package/dist/components/sideNavigation/resolvePanelItemProps.test.d.ts.map +1 -0
  115. package/dist/components/{sidebarNav → sideNavigation}/resolvePanelItemProps.test.js +18 -4
  116. package/dist/components/sideNavigation/resolvePanelItemProps.test.js.map +1 -0
  117. package/dist/components/sideNavigation/types.d.ts +47 -0
  118. package/dist/components/sideNavigation/types.d.ts.map +1 -0
  119. package/dist/components/sideNavigation/types.js +2 -0
  120. package/dist/components/sideNavigation/types.js.map +1 -0
  121. package/dist/components/sidebar/Sidebar.d.ts +13 -0
  122. package/dist/components/sidebar/Sidebar.d.ts.map +1 -0
  123. package/dist/components/sidebar/Sidebar.js +9 -0
  124. package/dist/components/sidebar/Sidebar.js.map +1 -0
  125. package/dist/components/sidebar/Sidebar.stories.d.ts +48 -0
  126. package/dist/components/sidebar/Sidebar.stories.d.ts.map +1 -0
  127. package/dist/components/sidebar/Sidebar.stories.js +444 -0
  128. package/dist/components/sidebar/Sidebar.stories.js.map +1 -0
  129. package/dist/components/sidebar/Sidebar.test.d.ts +2 -0
  130. package/dist/components/sidebar/Sidebar.test.d.ts.map +1 -0
  131. package/dist/components/sidebar/Sidebar.test.js +81 -0
  132. package/dist/components/sidebar/Sidebar.test.js.map +1 -0
  133. package/dist/components/sidebar/SidebarItem.d.ts +7 -0
  134. package/dist/components/sidebar/SidebarItem.d.ts.map +1 -0
  135. package/dist/components/sidebar/SidebarItem.js +11 -0
  136. package/dist/components/sidebar/SidebarItem.js.map +1 -0
  137. package/dist/components/singleUser/SingleUser.d.ts +1 -1
  138. package/dist/components/tabs/TabsItem.stories.d.ts +2 -2
  139. package/dist/components/toast/Toast.d.ts +11 -2
  140. package/dist/components/toast/Toast.d.ts.map +1 -1
  141. package/dist/components/toast/Toast.js +5 -3
  142. package/dist/components/toast/Toast.js.map +1 -1
  143. package/dist/components/toast/Toast.stories.d.ts +15 -3
  144. package/dist/components/toast/Toast.stories.d.ts.map +1 -1
  145. package/dist/components/toast/Toast.stories.js +43 -41
  146. package/dist/components/toast/Toast.stories.js.map +1 -1
  147. package/dist/components/toast/Toast.test.js +19 -4
  148. package/dist/components/toast/Toast.test.js.map +1 -1
  149. package/dist/components/toast/ToastAction.d.ts +7 -0
  150. package/dist/components/toast/ToastAction.d.ts.map +1 -0
  151. package/dist/components/toast/ToastAction.js +9 -0
  152. package/dist/components/toast/ToastAction.js.map +1 -0
  153. package/dist/components/tooltip/TooltipWrapper.d.ts +1 -0
  154. package/dist/components/tooltip/TooltipWrapper.d.ts.map +1 -1
  155. package/dist/components/tooltip/TooltipWrapper.js +2 -2
  156. package/dist/components/tooltip/TooltipWrapper.js.map +1 -1
  157. package/dist/components/widget/Widget.d.ts +18 -0
  158. package/dist/components/widget/Widget.d.ts.map +1 -0
  159. package/dist/components/widget/Widget.js +51 -0
  160. package/dist/components/widget/Widget.js.map +1 -0
  161. package/dist/components/widget/Widget.stories.d.ts +128 -0
  162. package/dist/components/widget/Widget.stories.d.ts.map +1 -0
  163. package/dist/components/widget/Widget.stories.js +417 -0
  164. package/dist/components/widget/Widget.stories.js.map +1 -0
  165. package/dist/components/widget/Widget.test.d.ts +2 -0
  166. package/dist/components/widget/Widget.test.d.ts.map +1 -0
  167. package/dist/components/widget/Widget.test.js +110 -0
  168. package/dist/components/widget/Widget.test.js.map +1 -0
  169. package/dist/components/widget/WidgetBody.d.ts +6 -0
  170. package/dist/components/widget/WidgetBody.d.ts.map +1 -0
  171. package/dist/components/widget/WidgetBody.js +20 -0
  172. package/dist/components/widget/WidgetBody.js.map +1 -0
  173. package/dist/components/widget/WidgetContext.d.ts +20 -0
  174. package/dist/components/widget/WidgetContext.d.ts.map +1 -0
  175. package/dist/components/widget/WidgetContext.js +10 -0
  176. package/dist/components/widget/WidgetContext.js.map +1 -0
  177. package/dist/components/widget/WidgetHeader.d.ts +8 -0
  178. package/dist/components/widget/WidgetHeader.d.ts.map +1 -0
  179. package/dist/components/widget/WidgetHeader.js +56 -0
  180. package/dist/components/widget/WidgetHeader.js.map +1 -0
  181. package/dist/components/widget/types.d.ts +43 -0
  182. package/dist/components/widget/types.d.ts.map +1 -0
  183. package/dist/components/widget/types.js +2 -0
  184. package/dist/components/widget/types.js.map +1 -0
  185. package/dist/components/widgetCalendar/WidgetCalendar.d.ts +35 -0
  186. package/dist/components/widgetCalendar/WidgetCalendar.d.ts.map +1 -0
  187. package/dist/components/widgetCalendar/WidgetCalendar.js +22 -0
  188. package/dist/components/widgetCalendar/WidgetCalendar.js.map +1 -0
  189. package/dist/components/widgetCalendar/WidgetCalendar.stories.d.ts +60 -0
  190. package/dist/components/widgetCalendar/WidgetCalendar.stories.d.ts.map +1 -0
  191. package/dist/components/widgetCalendar/WidgetCalendar.stories.js +140 -0
  192. package/dist/components/widgetCalendar/WidgetCalendar.stories.js.map +1 -0
  193. package/dist/components/widgetCalendar/WidgetCalendar.test.d.ts +2 -0
  194. package/dist/components/widgetCalendar/WidgetCalendar.test.d.ts.map +1 -0
  195. package/dist/components/widgetCalendar/WidgetCalendar.test.js +88 -0
  196. package/dist/components/widgetCalendar/WidgetCalendar.test.js.map +1 -0
  197. package/dist/components/widgetCalendar/WidgetCalendarItem.d.ts +17 -0
  198. package/dist/components/widgetCalendar/WidgetCalendarItem.d.ts.map +1 -0
  199. package/dist/components/widgetCalendar/WidgetCalendarItem.js +25 -0
  200. package/dist/components/widgetCalendar/WidgetCalendarItem.js.map +1 -0
  201. package/dist/components/widgetFavourites/WidgetFavourites.d.ts +12 -0
  202. package/dist/components/widgetFavourites/WidgetFavourites.d.ts.map +1 -0
  203. package/dist/components/widgetFavourites/WidgetFavourites.js +23 -0
  204. package/dist/components/widgetFavourites/WidgetFavourites.js.map +1 -0
  205. package/dist/components/widgetFavourites/WidgetFavourites.stories.d.ts +84 -0
  206. package/dist/components/widgetFavourites/WidgetFavourites.stories.d.ts.map +1 -0
  207. package/dist/components/widgetFavourites/WidgetFavourites.stories.js +210 -0
  208. package/dist/components/widgetFavourites/WidgetFavourites.stories.js.map +1 -0
  209. package/dist/components/widgetFavourites/WidgetFavourites.test.d.ts +2 -0
  210. package/dist/components/widgetFavourites/WidgetFavourites.test.d.ts.map +1 -0
  211. package/dist/components/widgetFavourites/WidgetFavourites.test.js +67 -0
  212. package/dist/components/widgetFavourites/WidgetFavourites.test.js.map +1 -0
  213. package/dist/components/widgetFavourites/WidgetFavouritesItem.d.ts +3 -0
  214. package/dist/components/widgetFavourites/WidgetFavouritesItem.d.ts.map +1 -0
  215. package/dist/components/widgetFavourites/WidgetFavouritesItem.js +10 -0
  216. package/dist/components/widgetFavourites/WidgetFavouritesItem.js.map +1 -0
  217. package/dist/components/widgetFavourites/types.d.ts +25 -0
  218. package/dist/components/widgetFavourites/types.d.ts.map +1 -0
  219. package/dist/components/widgetFavourites/types.js +2 -0
  220. package/dist/components/widgetFavourites/types.js.map +1 -0
  221. package/dist/components/widgetNotifications/WidgetNotifications.d.ts +33 -0
  222. package/dist/components/widgetNotifications/WidgetNotifications.d.ts.map +1 -0
  223. package/dist/components/widgetNotifications/WidgetNotifications.js +18 -0
  224. package/dist/components/widgetNotifications/WidgetNotifications.js.map +1 -0
  225. package/dist/components/widgetNotifications/WidgetNotifications.stories.d.ts +60 -0
  226. package/dist/components/widgetNotifications/WidgetNotifications.stories.d.ts.map +1 -0
  227. package/dist/components/widgetNotifications/WidgetNotifications.stories.js +269 -0
  228. package/dist/components/widgetNotifications/WidgetNotifications.stories.js.map +1 -0
  229. package/dist/components/widgetNotifications/WidgetNotifications.test.d.ts +2 -0
  230. package/dist/components/widgetNotifications/WidgetNotifications.test.d.ts.map +1 -0
  231. package/dist/components/widgetNotifications/WidgetNotifications.test.js +79 -0
  232. package/dist/components/widgetNotifications/WidgetNotifications.test.js.map +1 -0
  233. package/dist/components/widgetNotifications/WidgetNotificationsItem.d.ts +14 -0
  234. package/dist/components/widgetNotifications/WidgetNotificationsItem.d.ts.map +1 -0
  235. package/dist/components/widgetNotifications/WidgetNotificationsItem.js +14 -0
  236. package/dist/components/widgetNotifications/WidgetNotificationsItem.js.map +1 -0
  237. package/dist/index.css +850 -205
  238. package/dist/index.css.map +1 -1
  239. package/dist/index.d.ts +15 -9
  240. package/dist/index.d.ts.map +1 -1
  241. package/dist/index.js +15 -8
  242. package/dist/index.js.map +1 -1
  243. package/dist/utils/favourites/favouriteConstants.d.ts +12 -0
  244. package/dist/utils/favourites/favouriteConstants.d.ts.map +1 -0
  245. package/dist/utils/favourites/favouriteConstants.js +16 -0
  246. package/dist/utils/favourites/favouriteConstants.js.map +1 -0
  247. package/dist/utils/favourites/favouriteConstants.test.d.ts +2 -0
  248. package/dist/utils/favourites/favouriteConstants.test.d.ts.map +1 -0
  249. package/dist/utils/favourites/favouriteConstants.test.js +12 -0
  250. package/dist/utils/favourites/favouriteConstants.test.js.map +1 -0
  251. package/dist/utils/hooks/useControllableBoolean.d.ts.map +1 -0
  252. package/dist/utils/hooks/useControllableBoolean.js.map +1 -0
  253. package/dist/utils/hooks/useControllableBoolean.test.d.ts +2 -0
  254. package/dist/utils/hooks/useControllableBoolean.test.d.ts.map +1 -0
  255. package/dist/utils/hooks/useControllableBoolean.test.js +34 -0
  256. package/dist/utils/hooks/useControllableBoolean.test.js.map +1 -0
  257. package/package.json +1 -1
  258. package/src/components/datePicker/DatePicker.tsx +30 -35
  259. package/src/components/datePicker/DatePickerCalendar.tsx +46 -0
  260. package/src/components/dateTimePicker/DateTimePicker.tsx +66 -38
  261. package/src/components/dateTimePicker/dateTimePicker.scss +0 -2
  262. package/src/components/emptyState/EmptyState.stories.tsx +487 -0
  263. package/src/components/emptyState/EmptyState.test.tsx +140 -0
  264. package/src/components/emptyState/EmptyState.tsx +84 -0
  265. package/src/components/emptyState/emptyState.scss +63 -0
  266. package/src/components/favourite/FavouriteButton.test.tsx +83 -0
  267. package/src/components/favourite/FavouriteButton.tsx +70 -0
  268. package/src/components/favourite/favouriteButton.scss +37 -0
  269. package/src/components/icon/Icon.tsx +2 -2
  270. package/src/components/link/link.scss +26 -0
  271. package/src/components/pill/Pill.stories.tsx +432 -41
  272. package/src/components/pill/Pill.test.tsx +74 -3
  273. package/src/components/pill/Pill.tsx +26 -11
  274. package/src/components/sideNavigation/SideNavigation.stories.tsx +578 -0
  275. package/src/components/sideNavigation/SideNavigation.test.tsx +109 -0
  276. package/src/components/sideNavigation/SideNavigation.tsx +98 -0
  277. package/src/components/sideNavigation/SideNavigationContext.tsx +25 -0
  278. package/src/components/sideNavigation/SideNavigationGroup.test.tsx +103 -0
  279. package/src/components/{sidebarNav/SidebarNavGroup.tsx → sideNavigation/SideNavigationGroup.tsx} +8 -8
  280. package/src/components/sideNavigation/SideNavigationItem.test.tsx +137 -0
  281. package/src/components/sideNavigation/SideNavigationItem.tsx +125 -0
  282. package/src/components/sideNavigation/SideNavigationItemFavourite.test.tsx +54 -0
  283. package/src/components/{sidebarNav/SidebarNavItemFavourite.tsx → sideNavigation/SideNavigationItemFavourite.tsx} +7 -7
  284. package/src/components/sideNavigation/SideNavigationTitle.test.tsx +23 -0
  285. package/src/components/sideNavigation/SideNavigationTitle.tsx +13 -0
  286. package/src/components/sideNavigation/SideNavigationTooltip.test.tsx +44 -0
  287. package/src/components/{sidebarNav/SidebarNavTooltip.tsx → sideNavigation/SideNavigationTooltip.tsx} +2 -2
  288. package/src/components/{sidebarNav → sideNavigation}/resolvePanelItemProps.test.ts +20 -4
  289. package/src/components/{sidebarNav → sideNavigation}/resolvePanelItemProps.ts +8 -7
  290. package/src/components/{sidebarNav/sidebarNav.scss → sideNavigation/sideNavigation.scss} +37 -136
  291. package/src/components/sideNavigation/types.ts +56 -0
  292. package/src/components/sidebar/Sidebar.stories.tsx +670 -0
  293. package/src/components/sidebar/Sidebar.test.tsx +155 -0
  294. package/src/components/sidebar/Sidebar.tsx +27 -0
  295. package/src/components/sidebar/SidebarItem.tsx +64 -0
  296. package/src/components/sidebar/sidebar.scss +65 -0
  297. package/src/components/toast/Toast.stories.tsx +75 -67
  298. package/src/components/toast/Toast.test.tsx +40 -10
  299. package/src/components/toast/Toast.tsx +19 -5
  300. package/src/components/toast/ToastAction.tsx +17 -0
  301. package/src/components/toast/toast.scss +37 -0
  302. package/src/components/tooltip/TooltipWrapper.tsx +3 -1
  303. package/src/components/widget/Widget.stories.tsx +600 -0
  304. package/src/components/widget/Widget.test.tsx +263 -0
  305. package/src/components/widget/Widget.tsx +102 -0
  306. package/src/components/widget/WidgetBody.tsx +66 -0
  307. package/src/components/widget/WidgetContext.tsx +31 -0
  308. package/src/components/widget/WidgetHeader.tsx +155 -0
  309. package/src/components/widget/types.ts +47 -0
  310. package/src/components/widget/widget.scss +218 -0
  311. package/src/components/widgetCalendar/WidgetCalendar.stories.tsx +241 -0
  312. package/src/components/widgetCalendar/WidgetCalendar.test.tsx +137 -0
  313. package/src/components/widgetCalendar/WidgetCalendar.tsx +105 -0
  314. package/src/components/widgetCalendar/WidgetCalendarItem.tsx +105 -0
  315. package/src/components/widgetCalendar/widgetCalendar.scss +124 -0
  316. package/src/components/widgetFavourites/WidgetFavourites.stories.tsx +341 -0
  317. package/src/components/widgetFavourites/WidgetFavourites.test.tsx +127 -0
  318. package/src/components/widgetFavourites/WidgetFavourites.tsx +83 -0
  319. package/src/components/widgetFavourites/WidgetFavouritesItem.tsx +37 -0
  320. package/src/components/widgetFavourites/types.ts +26 -0
  321. package/src/components/widgetFavourites/widgetFavourites.scss +84 -0
  322. package/src/components/widgetNotifications/WidgetNotifications.stories.tsx +417 -0
  323. package/src/components/widgetNotifications/WidgetNotifications.test.tsx +152 -0
  324. package/src/components/widgetNotifications/WidgetNotifications.tsx +112 -0
  325. package/src/components/widgetNotifications/WidgetNotificationsItem.tsx +88 -0
  326. package/src/components/widgetNotifications/widgetNotifications.scss +186 -0
  327. package/src/docs/Contributing.mdx +1 -1
  328. package/src/index.scss +9 -1
  329. package/src/index.ts +22 -18
  330. package/src/tokens.scss +12 -2
  331. package/src/utils/favourites/favouriteConstants.test.ts +19 -0
  332. package/src/utils/favourites/favouriteConstants.ts +21 -0
  333. package/src/utils/hooks/useControllableBoolean.test.ts +48 -0
  334. package/dist/components/sidebarNav/SidebarNav.d.ts +0 -46
  335. package/dist/components/sidebarNav/SidebarNav.d.ts.map +0 -1
  336. package/dist/components/sidebarNav/SidebarNav.js +0 -102
  337. package/dist/components/sidebarNav/SidebarNav.js.map +0 -1
  338. package/dist/components/sidebarNav/SidebarNav.stories.d.ts +0 -61
  339. package/dist/components/sidebarNav/SidebarNav.stories.d.ts.map +0 -1
  340. package/dist/components/sidebarNav/SidebarNav.stories.js +0 -253
  341. package/dist/components/sidebarNav/SidebarNav.stories.js.map +0 -1
  342. package/dist/components/sidebarNav/SidebarNav.test.d.ts +0 -2
  343. package/dist/components/sidebarNav/SidebarNav.test.d.ts.map +0 -1
  344. package/dist/components/sidebarNav/SidebarNav.test.js +0 -240
  345. package/dist/components/sidebarNav/SidebarNav.test.js.map +0 -1
  346. package/dist/components/sidebarNav/SidebarNavContext.d.ts +0 -13
  347. package/dist/components/sidebarNav/SidebarNavContext.d.ts.map +0 -1
  348. package/dist/components/sidebarNav/SidebarNavContext.js +0 -15
  349. package/dist/components/sidebarNav/SidebarNavContext.js.map +0 -1
  350. package/dist/components/sidebarNav/SidebarNavGroup.d.ts.map +0 -1
  351. package/dist/components/sidebarNav/SidebarNavGroup.js +0 -16
  352. package/dist/components/sidebarNav/SidebarNavGroup.js.map +0 -1
  353. package/dist/components/sidebarNav/SidebarNavItem.d.ts.map +0 -1
  354. package/dist/components/sidebarNav/SidebarNavItem.js +0 -44
  355. package/dist/components/sidebarNav/SidebarNavItem.js.map +0 -1
  356. package/dist/components/sidebarNav/SidebarNavItemFavourite.d.ts +0 -8
  357. package/dist/components/sidebarNav/SidebarNavItemFavourite.d.ts.map +0 -1
  358. package/dist/components/sidebarNav/SidebarNavItemFavourite.js.map +0 -1
  359. package/dist/components/sidebarNav/SidebarNavPanel.d.ts +0 -4
  360. package/dist/components/sidebarNav/SidebarNavPanel.d.ts.map +0 -1
  361. package/dist/components/sidebarNav/SidebarNavPanel.js +0 -9
  362. package/dist/components/sidebarNav/SidebarNavPanel.js.map +0 -1
  363. package/dist/components/sidebarNav/SidebarNavPanelNav.d.ts +0 -10
  364. package/dist/components/sidebarNav/SidebarNavPanelNav.d.ts.map +0 -1
  365. package/dist/components/sidebarNav/SidebarNavPanelNav.js +0 -21
  366. package/dist/components/sidebarNav/SidebarNavPanelNav.js.map +0 -1
  367. package/dist/components/sidebarNav/SidebarNavRail.d.ts +0 -6
  368. package/dist/components/sidebarNav/SidebarNavRail.d.ts.map +0 -1
  369. package/dist/components/sidebarNav/SidebarNavRail.js +0 -7
  370. package/dist/components/sidebarNav/SidebarNavRail.js.map +0 -1
  371. package/dist/components/sidebarNav/SidebarNavRailItem.d.ts +0 -10
  372. package/dist/components/sidebarNav/SidebarNavRailItem.d.ts.map +0 -1
  373. package/dist/components/sidebarNav/SidebarNavRailItem.js +0 -25
  374. package/dist/components/sidebarNav/SidebarNavRailItem.js.map +0 -1
  375. package/dist/components/sidebarNav/SidebarNavRailList.d.ts +0 -4
  376. package/dist/components/sidebarNav/SidebarNavRailList.d.ts.map +0 -1
  377. package/dist/components/sidebarNav/SidebarNavRailList.js +0 -7
  378. package/dist/components/sidebarNav/SidebarNavRailList.js.map +0 -1
  379. package/dist/components/sidebarNav/SidebarNavRailSlot.d.ts +0 -6
  380. package/dist/components/sidebarNav/SidebarNavRailSlot.d.ts.map +0 -1
  381. package/dist/components/sidebarNav/SidebarNavRailSlot.js +0 -7
  382. package/dist/components/sidebarNav/SidebarNavRailSlot.js.map +0 -1
  383. package/dist/components/sidebarNav/SidebarNavSeparator.d.ts +0 -6
  384. package/dist/components/sidebarNav/SidebarNavSeparator.d.ts.map +0 -1
  385. package/dist/components/sidebarNav/SidebarNavSeparator.js +0 -8
  386. package/dist/components/sidebarNav/SidebarNavSeparator.js.map +0 -1
  387. package/dist/components/sidebarNav/SidebarNavTitle.d.ts +0 -4
  388. package/dist/components/sidebarNav/SidebarNavTitle.d.ts.map +0 -1
  389. package/dist/components/sidebarNav/SidebarNavTitle.js +0 -7
  390. package/dist/components/sidebarNav/SidebarNavTitle.js.map +0 -1
  391. package/dist/components/sidebarNav/SidebarNavTooltip.d.ts +0 -7
  392. package/dist/components/sidebarNav/SidebarNavTooltip.d.ts.map +0 -1
  393. package/dist/components/sidebarNav/SidebarNavTooltip.js.map +0 -1
  394. package/dist/components/sidebarNav/SidebarNavTrigger.d.ts +0 -8
  395. package/dist/components/sidebarNav/SidebarNavTrigger.d.ts.map +0 -1
  396. package/dist/components/sidebarNav/SidebarNavTrigger.js +0 -15
  397. package/dist/components/sidebarNav/SidebarNavTrigger.js.map +0 -1
  398. package/dist/components/sidebarNav/index.d.ts +0 -4
  399. package/dist/components/sidebarNav/index.d.ts.map +0 -1
  400. package/dist/components/sidebarNav/index.js +0 -3
  401. package/dist/components/sidebarNav/index.js.map +0 -1
  402. package/dist/components/sidebarNav/resolvePanelItemProps.d.ts +0 -4
  403. package/dist/components/sidebarNav/resolvePanelItemProps.d.ts.map +0 -1
  404. package/dist/components/sidebarNav/resolvePanelItemProps.js.map +0 -1
  405. package/dist/components/sidebarNav/resolvePanelItemProps.test.d.ts.map +0 -1
  406. package/dist/components/sidebarNav/resolvePanelItemProps.test.js.map +0 -1
  407. package/dist/components/sidebarNav/types.d.ts +0 -100
  408. package/dist/components/sidebarNav/types.d.ts.map +0 -1
  409. package/dist/components/sidebarNav/types.js +0 -4
  410. package/dist/components/sidebarNav/types.js.map +0 -1
  411. package/dist/components/sidebarNav/useControllableBoolean.d.ts.map +0 -1
  412. package/dist/components/sidebarNav/useControllableBoolean.js.map +0 -1
  413. package/src/components/sidebarNav/SidebarNav.stories.tsx +0 -484
  414. package/src/components/sidebarNav/SidebarNav.test.tsx +0 -611
  415. package/src/components/sidebarNav/SidebarNav.tsx +0 -230
  416. package/src/components/sidebarNav/SidebarNavContext.tsx +0 -28
  417. package/src/components/sidebarNav/SidebarNavItem.tsx +0 -162
  418. package/src/components/sidebarNav/SidebarNavPanel.tsx +0 -20
  419. package/src/components/sidebarNav/SidebarNavPanelNav.tsx +0 -55
  420. package/src/components/sidebarNav/SidebarNavRail.tsx +0 -20
  421. package/src/components/sidebarNav/SidebarNavRailItem.tsx +0 -83
  422. package/src/components/sidebarNav/SidebarNavRailList.tsx +0 -11
  423. package/src/components/sidebarNav/SidebarNavRailSlot.tsx +0 -15
  424. package/src/components/sidebarNav/SidebarNavSeparator.tsx +0 -19
  425. package/src/components/sidebarNav/SidebarNavTitle.tsx +0 -13
  426. package/src/components/sidebarNav/SidebarNavTrigger.tsx +0 -52
  427. package/src/components/sidebarNav/index.ts +0 -6
  428. package/src/components/sidebarNav/types.ts +0 -126
  429. /package/dist/components/{sidebarNav → sideNavigation}/resolvePanelItemProps.test.d.ts +0 -0
  430. /package/dist/{components/sidebarNav → utils/hooks}/useControllableBoolean.d.ts +0 -0
  431. /package/dist/{components/sidebarNav → utils/hooks}/useControllableBoolean.js +0 -0
  432. /package/src/{components/sidebarNav → utils/hooks}/useControllableBoolean.ts +0 -0
@@ -1,32 +1,31 @@
1
- import type { AnchorHTMLAttributes, ButtonHTMLAttributes, HTMLAttributes, MouseEventHandler } from 'react';
2
- import type { SidebarNavLinkProps } from './types.js';
3
- type SidebarNavItemFavouriteVariant = {
1
+ import type { AnchorHTMLAttributes, ButtonHTMLAttributes, HTMLAttributes } from 'react';
2
+ import type { SideNavigationLinkProps } from './types.js';
3
+ type SideNavigationItemFavouriteVariant = {
4
4
  canFavourite?: false;
5
5
  favouriteTooltip?: never;
6
6
  } | {
7
7
  canFavourite: true;
8
8
  favouriteTooltip: string;
9
9
  };
10
- type SidebarNavItemLinkVariant = {
10
+ type SideNavigationItemLinkVariant = {
11
11
  linkElement?: 'link';
12
12
  href: string;
13
13
  linkElementProps?: Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href' | 'className' | 'children'>;
14
- linkProps?: SidebarNavLinkProps;
14
+ linkProps?: SideNavigationLinkProps;
15
15
  };
16
- type SidebarNavItemButtonVariant = {
16
+ type SideNavigationItemButtonVariant = {
17
17
  linkElement: 'button';
18
18
  href?: never;
19
19
  linkElementProps?: ButtonHTMLAttributes<HTMLButtonElement>;
20
20
  linkProps?: never;
21
21
  };
22
- export type SidebarNavItemProps = {
22
+ export type SideNavigationItemProps = {
23
23
  current?: boolean;
24
24
  itemId: string;
25
25
  isPressed?: boolean;
26
- onFavouriteClick?: MouseEventHandler<HTMLButtonElement>;
27
- onClick?: MouseEventHandler<HTMLElement>;
26
+ onFavouriteClick?: React.MouseEventHandler<HTMLButtonElement>;
28
27
  children: React.ReactNode;
29
- } & Omit<HTMLAttributes<HTMLLIElement>, 'children' | 'onClick'> & SidebarNavItemFavouriteVariant & (SidebarNavItemLinkVariant | SidebarNavItemButtonVariant);
30
- export declare const SidebarNavItem: (props: SidebarNavItemProps) => import("react/jsx-runtime").JSX.Element;
28
+ } & Omit<HTMLAttributes<HTMLLIElement>, 'children' | 'onClick'> & SideNavigationItemFavouriteVariant & (SideNavigationItemLinkVariant | SideNavigationItemButtonVariant);
29
+ export declare const SideNavigationItem: (props: SideNavigationItemProps) => import("react/jsx-runtime").JSX.Element;
31
30
  export {};
32
- //# sourceMappingURL=SidebarNavItem.d.ts.map
31
+ //# sourceMappingURL=SideNavigationItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavigationItem.d.ts","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationItem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D,KAAK,kCAAkC,GACjC;IAAE,YAAY,CAAC,EAAE,KAAK,CAAC;IAAC,gBAAgB,CAAC,EAAE,KAAK,CAAA;CAAE,GAClD;IAAE,YAAY,EAAE,IAAI,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,KAAK,6BAA6B,GAAG;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC,CAAC;IACpG,SAAS,CAAC,EAAE,uBAAuB,CAAC;CACrC,CAAC;AAEF,KAAK,+BAA+B,GAAG;IACrC,WAAW,EAAE,QAAQ,CAAC;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,gBAAgB,CAAC,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IAC3D,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAC9D,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC,GAC7D,kCAAkC,GAClC,CAAC,6BAA6B,GAAG,+BAA+B,CAAC,CAAC;AAEpE,eAAO,MAAM,kBAAkB,GAAI,OAAO,uBAAuB,4CAsFhE,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import classNames from 'classnames';
3
+ import { useSideNavigationContext } from './SideNavigationContext.js';
4
+ import { SideNavigationItemFavourite } from './SideNavigationItemFavourite.js';
5
+ export const SideNavigationItem = (props) => {
6
+ const { current, itemId, canFavourite, favouriteTooltip, isPressed = false, onFavouriteClick, children, className, linkElement = 'link', href, linkElementProps, linkProps, ...rest } = props;
7
+ const { renderLink } = useSideNavigationContext();
8
+ const linkClassName = classNames('ds-side-navigation__item-link', { 'ds-side-navigation__item-link--current': Boolean(current) });
9
+ const linkChildren = _jsx("span", { className: "ds-side-navigation__item-label", children: children });
10
+ const anchorLinkElementProps = linkElementProps;
11
+ const buttonLinkElementProps = linkElementProps;
12
+ const renderAnchorElement = () => renderLink
13
+ ? renderLink({
14
+ href: href,
15
+ className: linkClassName,
16
+ ariaCurrent: current ? 'page' : undefined,
17
+ linkProps,
18
+ linkElementProps: anchorLinkElementProps,
19
+ onClick: anchorLinkElementProps?.onClick,
20
+ children: linkChildren,
21
+ })
22
+ : (_jsx("a", { href: href, className: linkClassName, "aria-current": current ? 'page' : undefined, ...linkProps, ...anchorLinkElementProps, children: linkChildren }));
23
+ const linkElementNode = linkElement === 'button'
24
+ ? (_jsx("button", { type: "button", className: linkClassName, "aria-current": current ? 'page' : undefined, ...buttonLinkElementProps, children: linkChildren }))
25
+ : renderAnchorElement();
26
+ return (_jsxs("li", { className: classNames('ds-side-navigation__list-item', 'ds-side-navigation__item', { 'ds-side-navigation__item--has-favourite': canFavourite }, className), "data-testid": `side-navigation-item-${itemId}`, ...rest, children: [linkElementNode, canFavourite === true && (_jsx(SideNavigationItemFavourite, { isPressed: isPressed, itemId: itemId, favouriteTooltip: favouriteTooltip, onClick: onFavouriteClick }))] }));
27
+ };
28
+ //# sourceMappingURL=SideNavigationItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavigationItem.js","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationItem.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAMpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AA+B/E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAA8B,EAAE,EAAE;IACnE,MAAM,EACJ,OAAO,EACP,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,SAAS,GAAG,KAAK,EACjB,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,WAAW,GAAG,MAAM,EACpB,IAAI,EACJ,gBAAgB,EAChB,SAAS,EACT,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;IAEV,MAAM,EAAE,UAAU,EAAE,GAAG,wBAAwB,EAAE,CAAC;IAElD,MAAM,aAAa,GAAG,UAAU,CAC9B,+BAA+B,EAC/B,EAAE,wCAAwC,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAC/D,CAAC;IAEF,MAAM,YAAY,GAAG,eAAM,SAAS,EAAC,gCAAgC,YAAE,QAAQ,GAAQ,CAAC;IAExF,MAAM,sBAAsB,GAAG,gBAAuE,CAAC;IACvG,MAAM,sBAAsB,GAAG,gBAAuE,CAAC;IAEvG,MAAM,mBAAmB,GAAG,GAAG,EAAE,CAAC,UAAU;QAC1C,CAAC,CAAC,UAAU,CAAC;YACT,IAAI,EAAE,IAAK;YACX,SAAS,EAAE,aAAa;YACxB,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YACzC,SAAS;YACT,gBAAgB,EAAE,sBAAsB;YACxC,OAAO,EAAE,sBAAsB,EAAE,OAA8C;YAC/E,QAAQ,EAAE,YAAY;SACvB,CAAC;QACJ,CAAC,CAAC,CACE,YACE,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,aAAa,kBACV,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,KACtC,SAAS,KACT,sBAAsB,YAEzB,YAAY,GACX,CACL,CAAC;IAEN,MAAM,eAAe,GAAG,WAAW,KAAK,QAAQ;QAC9C,CAAC,CAAC,CACE,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,aAAa,kBACV,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,KACtC,sBAAsB,YAEzB,YAAY,GACN,CACV;QACH,CAAC,CAAC,mBAAmB,EAAE,CAAC;IAE1B,OAAO,CACL,cACE,SAAS,EAAE,UAAU,CACnB,+BAA+B,EAC/B,0BAA0B,EAC1B,EAAE,yCAAyC,EAAE,YAAY,EAAE,EAC3D,SAAS,CACV,iBACY,wBAAwB,MAAM,EAAE,KACzC,IAAI,aAEP,eAAe,EACf,YAAY,KAAK,IAAI,IAAI,CACxB,KAAC,2BAA2B,IAC1B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,EAAE,gBAAgB,GACzB,CACH,IACE,CACN,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import '@testing-library/jest-dom/vitest';
2
+ //# sourceMappingURL=SideNavigationItem.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavigationItem.test.d.ts","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationItem.test.tsx"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import '@testing-library/jest-dom/vitest';
3
+ import { render, screen } from '@testing-library/react';
4
+ import userEvent from '@testing-library/user-event';
5
+ import { describe, expect, test, vi } from 'vitest';
6
+ import { SideNavigation } from './SideNavigation.js';
7
+ import { SideNavigationItem } from './SideNavigationItem.js';
8
+ describe('SideNavigationItem', () => {
9
+ test('renders as a link when href is provided', () => {
10
+ render(_jsx(SideNavigation, { children: _jsx(SideNavigationItem, { itemId: "daily", href: "/daily", children: "Daily Attendance" }) }));
11
+ const link = screen.getByRole('link', { name: 'Daily Attendance' });
12
+ expect(link).toHaveAttribute('href', '/daily');
13
+ });
14
+ test('renders as a button when linkElement is "button"', async () => {
15
+ const onClick = vi.fn();
16
+ render(_jsx(SideNavigation, { children: _jsx(SideNavigationItem, { itemId: "action", linkElement: "button", linkElementProps: { onClick }, children: "Run action" }) }));
17
+ const button = screen.getByRole('button', { name: 'Run action' });
18
+ await userEvent.click(button);
19
+ expect(onClick).toHaveBeenCalledOnce();
20
+ });
21
+ test('applies the current class and aria-current="page" when current is true', () => {
22
+ render(_jsx(SideNavigation, { children: _jsx(SideNavigationItem, { itemId: "daily", href: "/daily", current: true, children: "Daily Attendance" }) }));
23
+ const link = screen.getByRole('link', { name: 'Daily Attendance' });
24
+ expect(link).toHaveClass('ds-side-navigation__item-link--current');
25
+ expect(link).toHaveAttribute('aria-current', 'page');
26
+ });
27
+ test('does not set aria-current when current is false', () => {
28
+ render(_jsx(SideNavigation, { children: _jsx(SideNavigationItem, { itemId: "daily", href: "/daily", children: "Daily Attendance" }) }));
29
+ expect(screen.getByRole('link', { name: 'Daily Attendance' })).not.toHaveAttribute('aria-current');
30
+ });
31
+ test('assigns a testid scoped to itemId', () => {
32
+ render(_jsx(SideNavigation, { children: _jsx(SideNavigationItem, { itemId: "daily", href: "/daily", children: "Daily Attendance" }) }));
33
+ expect(screen.getByTestId('side-navigation-item-daily')).toBeInTheDocument();
34
+ });
35
+ test('passes linkProps and linkElementProps through to the anchor', () => {
36
+ render(_jsx(SideNavigation, { children: _jsx(SideNavigationItem, { itemId: "daily", href: "/daily", linkProps: { 'data-track': 'daily' }, linkElementProps: { 'aria-describedby': 'daily-desc' }, children: "Daily Attendance" }) }));
37
+ const link = screen.getByRole('link', { name: 'Daily Attendance' });
38
+ expect(link).toHaveAttribute('data-track', 'daily');
39
+ expect(link).toHaveAttribute('aria-describedby', 'daily-desc');
40
+ });
41
+ test('renders a favourite button separate from the item link when canFavourite is true', async () => {
42
+ const onFavouriteClick = vi.fn();
43
+ render(_jsx(SideNavigation, { children: _jsx(SideNavigationItem, { itemId: "daily", href: "/daily", canFavourite: true, isPressed: true, favouriteTooltip: "Remove from favourites", onFavouriteClick: onFavouriteClick, children: "Daily Attendance" }) }));
44
+ const listItem = screen.getByTestId('side-navigation-item-daily');
45
+ const link = screen.getByRole('link', { name: 'Daily Attendance' });
46
+ const favourite = screen.getByTestId('side-navigation-item-favourite-daily');
47
+ expect(listItem).toContainElement(link);
48
+ expect(listItem).toContainElement(favourite);
49
+ expect(link).not.toContainElement(favourite);
50
+ expect(favourite).toHaveAttribute('aria-pressed', 'true');
51
+ await userEvent.click(favourite);
52
+ expect(onFavouriteClick).toHaveBeenCalledOnce();
53
+ });
54
+ test('does not render a favourite button when canFavourite is not set', () => {
55
+ render(_jsx(SideNavigation, { children: _jsx(SideNavigationItem, { itemId: "daily", href: "/daily", children: "Daily Attendance" }) }));
56
+ expect(screen.queryByTestId('side-navigation-item-favourite-daily')).not.toBeInTheDocument();
57
+ });
58
+ test('uses renderLink from the parent SideNavigation to render the anchor', () => {
59
+ const renderLink = vi.fn(({ href, className, children, onClick }) => (_jsx("a", { href: href, className: className, "data-custom-link": "true", onClick: onClick, children: children })));
60
+ render(_jsx(SideNavigation, { renderLink: renderLink, children: _jsx(SideNavigationItem, { itemId: "daily", href: "/daily", children: "Daily Attendance" }) }));
61
+ expect(screen.getByText('Daily Attendance').closest('a')).toHaveAttribute('data-custom-link', 'true');
62
+ expect(renderLink).toHaveBeenCalledWith(expect.objectContaining({ href: '/daily' }));
63
+ });
64
+ });
65
+ //# sourceMappingURL=SideNavigationItem.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavigationItem.test.js","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationItem.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ButtonHTMLAttributes } from 'react';
2
+ export type SideNavigationItemFavouriteProps = {
3
+ isPressed: boolean;
4
+ itemId: string;
5
+ favouriteTooltip: string;
6
+ } & ButtonHTMLAttributes<HTMLButtonElement>;
7
+ export declare const SideNavigationItemFavourite: (props: SideNavigationItemFavouriteProps) => import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=SideNavigationItemFavourite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavigationItemFavourite.d.ts","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationItemFavourite.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAGlD,MAAM,MAAM,gCAAgC,GAAG;IAC7C,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AAE5C,eAAO,MAAM,2BAA2B,GAAI,OAAO,gCAAgC,4CAqClF,CAAC"}
@@ -1,14 +1,14 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Icon } from '../icon/Icon.js';
3
3
  import classNames from 'classnames';
4
- import { SidebarNavTooltip } from './SidebarNavTooltip.js';
5
- export const SidebarNavItemFavourite = (props) => {
4
+ import { SideNavigationTooltip } from './SideNavigationTooltip.js';
5
+ export const SideNavigationItemFavourite = (props) => {
6
6
  const { isPressed, itemId, favouriteTooltip, className, onClick, ...rest } = props;
7
- const button = (_jsx("button", { type: "button", className: classNames('ds-sidebar-nav__item-favourite', className), "aria-pressed": isPressed, "aria-label": favouriteTooltip, "data-testid": `sidebar-nav-panel-item-favourite-${itemId}`, onClick: (e) => {
7
+ const button = (_jsx("button", { type: "button", className: classNames('ds-side-navigation__item-favourite', className), "aria-pressed": isPressed, "aria-label": favouriteTooltip, "data-testid": `side-navigation-item-favourite-${itemId}`, onClick: (e) => {
8
8
  e.preventDefault();
9
9
  e.stopPropagation();
10
10
  onClick?.(e);
11
11
  }, ...rest, children: _jsx(Icon, { name: isPressed ? 'favourite-filled' : 'favourite-outline', size: 16, color: isPressed ? 'var(--color-brand-600)' : 'currentColor' }) }));
12
- return (_jsx(SidebarNavTooltip, { label: favouriteTooltip, side: "left", children: button }));
12
+ return (_jsx(SideNavigationTooltip, { label: favouriteTooltip, side: "left", children: button }));
13
13
  };
14
- //# sourceMappingURL=SidebarNavItemFavourite.js.map
14
+ //# sourceMappingURL=SideNavigationItemFavourite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavigationItemFavourite.js","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationItemFavourite.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAQnE,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,KAAuC,EAAE,EAAE;IACrF,MAAM,EACJ,SAAS,EACT,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,OAAO,EACP,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;IAEV,MAAM,MAAM,GAAG,CACb,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,UAAU,CAAC,oCAAoC,EAAE,SAAS,CAAC,kBACxD,SAAS,gBACX,gBAAgB,iBACf,kCAAkC,MAAM,EAAE,EACvD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACf,CAAC,KACG,IAAI,YAER,KAAC,IAAI,IACH,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,mBAAmB,EAC1D,IAAI,EAAE,EAAE,EACR,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,cAAc,GAC5D,GACK,CACV,CAAC;IAEF,OAAO,CACL,KAAC,qBAAqB,IAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAC,MAAM,YACxD,MAAM,GACe,CACzB,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import '@testing-library/jest-dom/vitest';
2
+ //# sourceMappingURL=SideNavigationItemFavourite.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavigationItemFavourite.test.d.ts","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationItemFavourite.test.tsx"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import '@testing-library/jest-dom/vitest';
3
+ import { render, screen } from '@testing-library/react';
4
+ import userEvent from '@testing-library/user-event';
5
+ import { Tooltip as TooltipPrimitive } from 'radix-ui';
6
+ import { describe, expect, test, vi } from 'vitest';
7
+ import { SideNavigationItemFavourite } from './SideNavigationItemFavourite.js';
8
+ const renderWithProvider = (ui) => render(_jsx(TooltipPrimitive.Provider, { children: ui }));
9
+ describe('SideNavigationItemFavourite', () => {
10
+ test('uses favouriteTooltip as the accessible name', () => {
11
+ renderWithProvider(_jsx(SideNavigationItemFavourite, { itemId: "daily", isPressed: false, favouriteTooltip: "Add to favourites" }));
12
+ expect(screen.getByRole('button', { name: 'Add to favourites' })).toBeInTheDocument();
13
+ });
14
+ test('sets aria-pressed to reflect isPressed', () => {
15
+ renderWithProvider(_jsx(SideNavigationItemFavourite, { itemId: "daily", isPressed: true, favouriteTooltip: "Remove from favourites" }));
16
+ expect(screen.getByRole('button', { name: 'Remove from favourites' })).toHaveAttribute('aria-pressed', 'true');
17
+ });
18
+ test('assigns a testid scoped to itemId', () => {
19
+ renderWithProvider(_jsx(SideNavigationItemFavourite, { itemId: "daily", isPressed: false, favouriteTooltip: "Add to favourites" }));
20
+ expect(screen.getByTestId('side-navigation-item-favourite-daily')).toBeInTheDocument();
21
+ });
22
+ test('calls onClick and prevents the click from bubbling to a parent link', async () => {
23
+ const onClick = vi.fn();
24
+ const parentOnClick = vi.fn();
25
+ renderWithProvider(_jsx("div", { onClick: parentOnClick, children: _jsx(SideNavigationItemFavourite, { itemId: "daily", isPressed: false, favouriteTooltip: "Add to favourites", onClick: onClick }) }));
26
+ await userEvent.click(screen.getByRole('button', { name: 'Add to favourites' }));
27
+ expect(onClick).toHaveBeenCalledOnce();
28
+ expect(parentOnClick).not.toHaveBeenCalled();
29
+ });
30
+ });
31
+ //# sourceMappingURL=SideNavigationItemFavourite.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavigationItemFavourite.test.js","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationItemFavourite.test.tsx"],"names":[],"mappings":";AAAA,OAAO,kCAAkC,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,SAAS,MAAM,6BAA6B,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/E,MAAM,kBAAkB,GAAG,CAAC,EAAsB,EAAE,EAAE,CAAC,MAAM,CAC3D,KAAC,gBAAgB,CAAC,QAAQ,cAAE,EAAE,GAA6B,CAC5D,CAAC;AAEF,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACxD,kBAAkB,CAChB,KAAC,2BAA2B,IAAC,MAAM,EAAC,OAAO,EAAC,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAC,mBAAmB,GAAG,CACtG,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAClD,kBAAkB,CAChB,KAAC,2BAA2B,IAAC,MAAM,EAAC,OAAO,EAAC,SAAS,QAAC,gBAAgB,EAAC,wBAAwB,GAAG,CACnG,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACjH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC7C,kBAAkB,CAChB,KAAC,2BAA2B,IAAC,MAAM,EAAC,OAAO,EAAC,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAC,mBAAmB,GAAG,CACtG,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACxB,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAE9B,kBAAkB,CAChB,cAAK,OAAO,EAAE,aAAa,YACzB,KAAC,2BAA2B,IAC1B,MAAM,EAAC,OAAO,EACd,SAAS,EAAE,KAAK,EAChB,gBAAgB,EAAC,mBAAmB,EACpC,OAAO,EAAE,OAAO,GAChB,GACE,CACP,CAAC;QAEF,MAAM,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;QAEjF,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,EAAE,CAAC;QACvC,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { HTMLAttributes } from 'react';
2
+ export type SideNavigationTitleProps = HTMLAttributes<HTMLHeadingElement>;
3
+ export declare const SideNavigationTitle: (props: SideNavigationTitleProps) => import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=SideNavigationTitle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavigationTitle.d.ts","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationTitle.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC,kBAAkB,CAAC,CAAC;AAE1E,eAAO,MAAM,mBAAmB,GAAI,OAAO,wBAAwB,4CAOlE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import classNames from 'classnames';
3
+ export const SideNavigationTitle = (props) => {
4
+ const { className, children, ...rest } = props;
5
+ return (_jsx("h2", { className: classNames('ds-side-navigation__title', className), ...rest, children: children }));
6
+ };
7
+ //# sourceMappingURL=SideNavigationTitle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavigationTitle.js","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationTitle.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAKpC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAA+B,EAAE,EAAE;IACrE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAC/C,OAAO,CACL,aAAI,SAAS,EAAE,UAAU,CAAC,2BAA2B,EAAE,SAAS,CAAC,KAAM,IAAI,YACxE,QAAQ,GACN,CACN,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import '@testing-library/jest-dom/vitest';
2
+ //# sourceMappingURL=SideNavigationTitle.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavigationTitle.test.d.ts","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationTitle.test.tsx"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import '@testing-library/jest-dom/vitest';
3
+ import { render, screen } from '@testing-library/react';
4
+ import { describe, expect, test } from 'vitest';
5
+ import { SideNavigationTitle } from './SideNavigationTitle.js';
6
+ describe('SideNavigationTitle', () => {
7
+ test('renders children inside a heading', () => {
8
+ render(_jsx(SideNavigationTitle, { children: "Attendance" }));
9
+ expect(screen.getByRole('heading', { name: 'Attendance', level: 2 })).toBeInTheDocument();
10
+ });
11
+ test('applies the base class alongside a custom className', () => {
12
+ render(_jsx(SideNavigationTitle, { className: "custom", children: "Attendance" }));
13
+ const heading = screen.getByRole('heading', { name: 'Attendance' });
14
+ expect(heading).toHaveClass('ds-side-navigation__title');
15
+ expect(heading).toHaveClass('custom');
16
+ });
17
+ test('passes through extra HTML attributes', () => {
18
+ render(_jsx(SideNavigationTitle, { "data-testid": "panel-title", children: "Attendance" }));
19
+ expect(screen.getByTestId('panel-title')).toBeInTheDocument();
20
+ });
21
+ });
22
+ //# sourceMappingURL=SideNavigationTitle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavigationTitle.test.js","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationTitle.test.tsx"],"names":[],"mappings":";AAAA,OAAO,kCAAkC,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,KAAC,mBAAmB,6BAAiC,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,KAAC,mBAAmB,IAAC,SAAS,EAAC,QAAQ,2BAAiC,CAAC,CAAC;QACjF,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,KAAC,mBAAmB,mBAAa,aAAa,2BAAiC,CAAC,CAAC;QACxF,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export type SideNavigationTooltipProps = {
2
+ label: string;
3
+ children: React.ReactElement;
4
+ side?: 'left' | 'right';
5
+ };
6
+ export declare const SideNavigationTooltip: (props: SideNavigationTooltipProps) => import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=SideNavigationTooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavigationTooltip.d.ts","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationTooltip.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,OAAO,0BAA0B,4CAatE,CAAC"}
@@ -2,8 +2,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { TooltipContent } from '../tooltip/TooltipContent.js';
3
3
  import { TooltipTrigger } from '../tooltip/TooltipTrigger.js';
4
4
  import { Tooltip as TooltipPrimitive } from 'radix-ui';
5
- export const SidebarNavTooltip = (props) => {
5
+ export const SideNavigationTooltip = (props) => {
6
6
  const { label, children, side = 'right' } = props;
7
7
  return (_jsxs(TooltipPrimitive.Root, { disableHoverableContent: true, delayDuration: 400, children: [_jsx(TooltipTrigger, { onPointerDown: event => event.preventDefault(), children: children }), _jsx(TooltipContent, { side: side, sideOffset: 8, arrowPadding: 0, children: label })] }));
8
8
  };
9
- //# sourceMappingURL=SidebarNavTooltip.js.map
9
+ //# sourceMappingURL=SideNavigationTooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavigationTooltip.js","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationTooltip.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAQvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAiC,EAAE,EAAE;IACzE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC;IAElD,OAAO,CACL,MAAC,gBAAgB,CAAC,IAAI,IAAC,uBAAuB,QAAC,aAAa,EAAE,GAAG,aAC/D,KAAC,cAAc,IAAC,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,YAC3D,QAAQ,GACM,EACjB,KAAC,cAAc,IAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,YACvD,KAAK,GACS,IACK,CACzB,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import '@testing-library/jest-dom/vitest';
2
+ //# sourceMappingURL=SideNavigationTooltip.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavigationTooltip.test.d.ts","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationTooltip.test.tsx"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import '@testing-library/jest-dom/vitest';
3
+ import { render, screen } from '@testing-library/react';
4
+ import userEvent from '@testing-library/user-event';
5
+ import { Tooltip as TooltipPrimitive } from 'radix-ui';
6
+ import { describe, expect, test } from 'vitest';
7
+ import { SideNavigationTooltip } from './SideNavigationTooltip.js';
8
+ const renderWithProvider = (ui) => render(_jsx(TooltipPrimitive.Provider, { children: ui }));
9
+ describe('SideNavigationTooltip', () => {
10
+ test('renders the trigger children', () => {
11
+ renderWithProvider(_jsx(SideNavigationTooltip, { label: "Add to favourites", children: _jsx("button", { type: "button", children: "Star" }) }));
12
+ expect(screen.getByRole('button', { name: 'Star' })).toBeInTheDocument();
13
+ });
14
+ test('shows the label as tooltip content on hover', async () => {
15
+ renderWithProvider(_jsx(SideNavigationTooltip, { label: "Add to favourites", children: _jsx("button", { type: "button", children: "Star" }) }));
16
+ await userEvent.hover(screen.getByRole('button', { name: 'Star' }));
17
+ expect(await screen.findByRole('tooltip')).toHaveTextContent('Add to favourites');
18
+ });
19
+ test('defaults to the right side and can be overridden', async () => {
20
+ renderWithProvider(_jsx(SideNavigationTooltip, { label: "Remove from favourites", side: "left", children: _jsx("button", { type: "button", children: "Star" }) }));
21
+ await userEvent.hover(screen.getByRole('button', { name: 'Star' }));
22
+ await screen.findByRole('tooltip');
23
+ expect(document.querySelector('.ds-tooltip__content')).toHaveAttribute('data-side', 'left');
24
+ });
25
+ });
26
+ //# sourceMappingURL=SideNavigationTooltip.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavigationTooltip.test.js","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationTooltip.test.tsx"],"names":[],"mappings":";AAAA,OAAO,kCAAkC,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,SAAS,MAAM,6BAA6B,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,MAAM,kBAAkB,GAAG,CAAC,EAAsB,EAAE,EAAE,CAAC,MAAM,CAC3D,KAAC,gBAAgB,CAAC,QAAQ,cAAE,EAAE,GAA6B,CAC5D,CAAC;AAEF,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACxC,kBAAkB,CAChB,KAAC,qBAAqB,IAAC,KAAK,EAAC,mBAAmB,YAC9C,iBAAQ,IAAI,EAAC,QAAQ,qBAAc,GACb,CACzB,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC7D,kBAAkB,CAChB,KAAC,qBAAqB,IAAC,KAAK,EAAC,mBAAmB,YAC9C,iBAAQ,IAAI,EAAC,QAAQ,qBAAc,GACb,CACzB,CAAC;QAEF,MAAM,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAClE,kBAAkB,CAChB,KAAC,qBAAqB,IAAC,KAAK,EAAC,wBAAwB,EAAC,IAAI,EAAC,MAAM,YAC/D,iBAAQ,IAAI,EAAC,QAAQ,qBAAc,GACb,CACzB,CAAC;QAEF,MAAM,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACpE,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { SideNavigationItemProps } from './SideNavigationItem.js';
2
+ import type { SideNavigationItemNode } from './types.js';
3
+ export declare function resolvePanelItemProps(node: SideNavigationItemNode): SideNavigationItemProps;
4
+ //# sourceMappingURL=resolvePanelItemProps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolvePanelItemProps.d.ts","sourceRoot":"","sources":["../../../src/components/sideNavigation/resolvePanelItemProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,GAAG,uBAAuB,CA+C3F"}
@@ -7,6 +7,7 @@ export function resolvePanelItemProps(node) {
7
7
  children: node.label,
8
8
  };
9
9
  const hasHref = 'href' in node && node.href != null;
10
+ const onClick = node.onClick;
10
11
  if (node.canFavourite) {
11
12
  if (hasHref) {
12
13
  return {
@@ -14,7 +15,7 @@ export function resolvePanelItemProps(node) {
14
15
  canFavourite: true,
15
16
  favouriteTooltip: node.favouriteTooltip,
16
17
  href: node.href,
17
- onClick: node.onClick,
18
+ linkElementProps: onClick ? { onClick } : undefined,
18
19
  linkProps: node.linkProps,
19
20
  };
20
21
  }
@@ -23,21 +24,21 @@ export function resolvePanelItemProps(node) {
23
24
  canFavourite: true,
24
25
  favouriteTooltip: node.favouriteTooltip,
25
26
  linkElement: 'button',
26
- onClick: node.onClick,
27
+ linkElementProps: { onClick },
27
28
  };
28
29
  }
29
30
  if (hasHref) {
30
31
  return {
31
32
  ...base,
32
33
  href: node.href,
33
- onClick: node.onClick,
34
+ linkElementProps: onClick ? { onClick } : undefined,
34
35
  linkProps: node.linkProps,
35
36
  };
36
37
  }
37
38
  return {
38
39
  ...base,
39
40
  linkElement: 'button',
40
- onClick: node.onClick,
41
+ linkElementProps: { onClick },
41
42
  };
42
43
  }
43
44
  //# sourceMappingURL=resolvePanelItemProps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolvePanelItemProps.js","sourceRoot":"","sources":["../../../src/components/sideNavigation/resolvePanelItemProps.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,qBAAqB,CAAC,IAA4B;IAChE,MAAM,IAAI,GAAG;QACX,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,QAAQ,EAAE,IAAI,CAAC,KAAK;KACrB,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAE7B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO;gBACL,GAAG,IAAI;gBACP,YAAY,EAAE,IAAI;gBAClB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS;gBACnD,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC;QACJ,CAAC;QAED,OAAO;YACL,GAAG,IAAI;YACP,YAAY,EAAE,IAAI;YAClB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,WAAW,EAAE,QAAQ;YACrB,gBAAgB,EAAE,EAAE,OAAO,EAAE;SAC9B,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS;YACnD,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,IAAI;QACP,WAAW,EAAE,QAAQ;QACrB,gBAAgB,EAAE,EAAE,OAAO,EAAE;KAC9B,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolvePanelItemProps.test.d.ts","sourceRoot":"","sources":["../../../src/components/sideNavigation/resolvePanelItemProps.test.ts"],"names":[],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  import { describe, expect, test } from 'vitest';
2
2
  import { resolvePanelItemProps } from './resolvePanelItemProps.js';
3
3
  describe('resolvePanelItemProps', () => {
4
- test('maps href item to link variant with top-level onClick', () => {
4
+ test('maps href item to link variant with onClick in linkElementProps', () => {
5
5
  const onClick = () => { };
6
6
  const props = resolvePanelItemProps({
7
7
  type: 'item',
@@ -14,10 +14,24 @@ describe('resolvePanelItemProps', () => {
14
14
  itemId: 'daily',
15
15
  children: 'Daily Attendance',
16
16
  href: '/daily',
17
- onClick,
17
+ linkElementProps: { onClick },
18
+ });
19
+ });
20
+ test('maps href item with no onClick to link variant with no linkElementProps', () => {
21
+ const props = resolvePanelItemProps({
22
+ type: 'item',
23
+ id: 'daily',
24
+ label: 'Daily Attendance',
25
+ href: '/daily',
26
+ });
27
+ expect(props).toEqual({
28
+ itemId: 'daily',
29
+ children: 'Daily Attendance',
30
+ href: '/daily',
31
+ linkElementProps: undefined,
18
32
  });
19
33
  });
20
- test('maps onClick-only item to button variant with top-level onClick', () => {
34
+ test('maps onClick-only item to button variant with onClick in linkElementProps', () => {
21
35
  const onClick = () => { };
22
36
  const props = resolvePanelItemProps({
23
37
  type: 'item',
@@ -29,7 +43,7 @@ describe('resolvePanelItemProps', () => {
29
43
  itemId: 'action',
30
44
  children: 'Run action',
31
45
  linkElement: 'button',
32
- onClick,
46
+ linkElementProps: { onClick },
33
47
  });
34
48
  });
35
49
  test('maps favourite href item with canFavourite and favouriteTooltip', () => {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolvePanelItemProps.test.js","sourceRoot":"","sources":["../../../src/components/sideNavigation/resolvePanelItemProps.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAI,CAAC,iEAAiE,EAAE,GAAG,EAAE;QAC3E,MAAM,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,qBAAqB,CAAC;YAClC,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,OAAO;YACX,KAAK,EAAE,kBAAkB;YACzB,IAAI,EAAE,QAAQ;YACd,OAAO;SACR,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YACpB,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,QAAQ;YACd,gBAAgB,EAAE,EAAE,OAAO,EAAE;SAC9B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACnF,MAAM,KAAK,GAAG,qBAAqB,CAAC;YAClC,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,OAAO;YACX,KAAK,EAAE,kBAAkB;YACzB,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YACpB,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,QAAQ;YACd,gBAAgB,EAAE,SAAS;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACrF,MAAM,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,qBAAqB,CAAC;YAClC,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,YAAY;YACnB,OAAO;SACR,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YACpB,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,YAAY;YACtB,WAAW,EAAE,QAAQ;YACrB,gBAAgB,EAAE,EAAE,OAAO,EAAE;SAC9B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iEAAiE,EAAE,GAAG,EAAE;QAC3E,MAAM,KAAK,GAAG,qBAAqB,CAAC;YAClC,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,OAAO;YACX,KAAK,EAAE,kBAAkB;YACzB,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,IAAI;YAClB,gBAAgB,EAAE,mBAAmB;SACtC,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC;YAC1B,MAAM,EAAE,OAAO;YACf,YAAY,EAAE,IAAI;YAClB,gBAAgB,EAAE,mBAAmB;YACrC,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,47 @@
1
+ import type { AnchorHTMLAttributes } from 'react';
2
+ export type SideNavigationLinkProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href' | 'children' | 'className'> & Record<`data-${string}`, string | number | boolean | undefined>;
3
+ export type SideNavigationRenderLinkArgs = {
4
+ href: string;
5
+ className: string;
6
+ children: React.ReactNode;
7
+ ariaCurrent?: 'page';
8
+ onClick?: React.MouseEventHandler;
9
+ linkProps?: SideNavigationLinkProps;
10
+ linkElementProps?: Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href' | 'className' | 'children'>;
11
+ };
12
+ type SideNavigationItemNodeFavouriteFields = {
13
+ canFavourite?: false;
14
+ favouriteTooltip?: never;
15
+ } | {
16
+ canFavourite: true;
17
+ favouriteTooltip: string;
18
+ };
19
+ type SideNavigationItemNodeLinkFields = {
20
+ href: string;
21
+ onClick?: React.MouseEventHandler;
22
+ };
23
+ type SideNavigationItemNodeButtonFields = {
24
+ href?: never;
25
+ onClick: React.MouseEventHandler;
26
+ };
27
+ export type SideNavigationItemNode = {
28
+ type: 'item';
29
+ id: string;
30
+ label: string;
31
+ current?: boolean;
32
+ linkProps?: SideNavigationLinkProps;
33
+ isPressed?: boolean;
34
+ onFavouriteClick?: React.MouseEventHandler<HTMLButtonElement>;
35
+ } & SideNavigationItemNodeFavouriteFields & (SideNavigationItemNodeLinkFields | SideNavigationItemNodeButtonFields);
36
+ export type SideNavigationGroupNode = {
37
+ type: 'group';
38
+ id: string;
39
+ label: string;
40
+ children: SideNavigationNode[];
41
+ defaultExpanded?: boolean;
42
+ expanded?: boolean;
43
+ onExpandedChange?: (expanded: boolean) => void;
44
+ };
45
+ export type SideNavigationNode = SideNavigationItemNode | SideNavigationGroupNode;
46
+ export {};
47
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/sideNavigation/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAElD,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,MAAM,GAAG,UAAU,GAAG,WAAW,CAClC,GAAG,MAAM,CAAC,QAAQ,MAAM,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;AAEpE,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC;IAClC,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,gBAAgB,CAAC,EAAE,IAAI,CACrB,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,MAAM,GAAG,WAAW,GAAG,UAAU,CAClC,CAAC;CACH,CAAC;AAEF,KAAK,qCAAqC,GACpC;IAAE,YAAY,CAAC,EAAE,KAAK,CAAC;IAAC,gBAAgB,CAAC,EAAE,KAAK,CAAA;CAAE,GAClD;IAAE,YAAY,EAAE,IAAI,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,KAAK,gCAAgC,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC;CACnC,CAAC;AAEF,KAAK,kCAAkC,GAAG;IACxC,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;CAC/D,GAAG,qCAAqC,GACvC,CAAC,gCAAgC,GAAG,kCAAkC,CAAC,CAAC;AAE1E,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,GAAG,uBAAuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/sideNavigation/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { type SidebarItemProps } from './SidebarItem.js';
2
+ export type SidebarProps = {
3
+ ariaLabel?: string;
4
+ } & React.HTMLAttributes<HTMLDivElement>;
5
+ export declare const Sidebar: {
6
+ (props: SidebarProps): import("react/jsx-runtime").JSX.Element;
7
+ Item: (props: SidebarItemProps) => import("react/jsx-runtime").JSX.Element;
8
+ };
9
+ export declare namespace Sidebar {
10
+ type Props = SidebarProps;
11
+ type ItemProps = SidebarItemProps;
12
+ }
13
+ //# sourceMappingURL=Sidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/Sidebar.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEtE,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;AAEzC,eAAO,MAAM,OAAO;YAAW,YAAY;;CAY1C,CAAC;AAIF,yBAAiB,OAAO,CAAC;IACvB,KAAY,KAAK,GAAG,YAAY,CAAC;IACjC,KAAY,SAAS,GAAG,gBAAgB,CAAC;CAC1C"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import classNames from 'classnames';
3
+ import { SidebarItem } from './SidebarItem.js';
4
+ export const Sidebar = (props) => {
5
+ const { ariaLabel = 'Sidebar', className, children, ...rest } = props;
6
+ return (_jsx("nav", { "aria-label": ariaLabel, className: classNames('ds-sidebar', className), "data-testid": "sidebar", ...rest, children: children }));
7
+ };
8
+ Sidebar.Item = SidebarItem;
9
+ //# sourceMappingURL=Sidebar.js.map