@arbor-education/design-system.components 0.25.9 → 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 (415) hide show
  1. package/.gather/instructions/project-overview.md +1 -1
  2. package/CHANGELOG.md +14 -0
  3. package/CONTRIBUTING.md +7 -5
  4. package/component-library.md +97 -3
  5. package/dist/components/emptyState/EmptyState.d.ts +22 -0
  6. package/dist/components/emptyState/EmptyState.d.ts.map +1 -0
  7. package/dist/components/emptyState/EmptyState.js +11 -0
  8. package/dist/components/emptyState/EmptyState.js.map +1 -0
  9. package/dist/components/emptyState/EmptyState.stories.d.ts +117 -0
  10. package/dist/components/emptyState/EmptyState.stories.d.ts.map +1 -0
  11. package/dist/components/emptyState/EmptyState.stories.js +332 -0
  12. package/dist/components/emptyState/EmptyState.stories.js.map +1 -0
  13. package/dist/components/emptyState/EmptyState.test.d.ts +2 -0
  14. package/dist/components/emptyState/EmptyState.test.d.ts.map +1 -0
  15. package/dist/components/emptyState/EmptyState.test.js +80 -0
  16. package/dist/components/emptyState/EmptyState.test.js.map +1 -0
  17. package/dist/components/favourite/FavouriteButton.d.ts +18 -0
  18. package/dist/components/favourite/FavouriteButton.d.ts.map +1 -0
  19. package/dist/components/favourite/FavouriteButton.js +16 -0
  20. package/dist/components/favourite/FavouriteButton.js.map +1 -0
  21. package/dist/components/favourite/FavouriteButton.test.d.ts +2 -0
  22. package/dist/components/favourite/FavouriteButton.test.d.ts.map +1 -0
  23. package/dist/components/favourite/FavouriteButton.test.js +37 -0
  24. package/dist/components/favourite/FavouriteButton.test.js.map +1 -0
  25. package/dist/components/filterBar/FilterBar.d.ts +1 -1
  26. package/dist/components/filterBar/FilterBar.stories.d.ts +1 -1
  27. package/dist/components/icon/Icon.d.ts +1 -1
  28. package/dist/components/icon/Icon.d.ts.map +1 -1
  29. package/dist/components/icon/Icon.js +1 -1
  30. package/dist/components/icon/Icon.js.map +1 -1
  31. package/dist/components/pill/Pill.d.ts +3 -2
  32. package/dist/components/pill/Pill.d.ts.map +1 -1
  33. package/dist/components/pill/Pill.js +15 -9
  34. package/dist/components/pill/Pill.js.map +1 -1
  35. package/dist/components/pill/Pill.stories.d.ts +21 -3
  36. package/dist/components/pill/Pill.stories.d.ts.map +1 -1
  37. package/dist/components/pill/Pill.stories.js +275 -40
  38. package/dist/components/pill/Pill.stories.js.map +1 -1
  39. package/dist/components/pill/Pill.test.js +64 -3
  40. package/dist/components/pill/Pill.test.js.map +1 -1
  41. package/dist/components/sideNavigation/SideNavigation.d.ts +34 -0
  42. package/dist/components/sideNavigation/SideNavigation.d.ts.map +1 -0
  43. package/dist/components/sideNavigation/SideNavigation.js +30 -0
  44. package/dist/components/sideNavigation/SideNavigation.js.map +1 -0
  45. package/dist/components/sideNavigation/SideNavigation.stories.d.ts +72 -0
  46. package/dist/components/sideNavigation/SideNavigation.stories.d.ts.map +1 -0
  47. package/dist/components/sideNavigation/SideNavigation.stories.js +298 -0
  48. package/dist/components/sideNavigation/SideNavigation.stories.js.map +1 -0
  49. package/dist/components/sideNavigation/SideNavigation.test.d.ts +2 -0
  50. package/dist/components/sideNavigation/SideNavigation.test.d.ts.map +1 -0
  51. package/dist/components/sideNavigation/SideNavigation.test.js +74 -0
  52. package/dist/components/sideNavigation/SideNavigation.test.js.map +1 -0
  53. package/dist/components/sideNavigation/SideNavigationContext.d.ts +10 -0
  54. package/dist/components/sideNavigation/SideNavigationContext.d.ts.map +1 -0
  55. package/dist/components/sideNavigation/SideNavigationContext.js +15 -0
  56. package/dist/components/sideNavigation/SideNavigationContext.js.map +1 -0
  57. package/dist/components/{sidebarNav/SidebarNavGroup.d.ts → sideNavigation/SideNavigationGroup.d.ts} +3 -3
  58. package/dist/components/sideNavigation/SideNavigationGroup.d.ts.map +1 -0
  59. package/dist/components/sideNavigation/SideNavigationGroup.js +16 -0
  60. package/dist/components/sideNavigation/SideNavigationGroup.js.map +1 -0
  61. package/dist/components/sideNavigation/SideNavigationGroup.test.d.ts +2 -0
  62. package/dist/components/sideNavigation/SideNavigationGroup.test.d.ts.map +1 -0
  63. package/dist/components/sideNavigation/SideNavigationGroup.test.js +58 -0
  64. package/dist/components/sideNavigation/SideNavigationGroup.test.js.map +1 -0
  65. package/dist/components/{sidebarNav/SidebarNavItem.d.ts → sideNavigation/SideNavigationItem.d.ts} +11 -12
  66. package/dist/components/sideNavigation/SideNavigationItem.d.ts.map +1 -0
  67. package/dist/components/sideNavigation/SideNavigationItem.js +28 -0
  68. package/dist/components/sideNavigation/SideNavigationItem.js.map +1 -0
  69. package/dist/components/sideNavigation/SideNavigationItem.test.d.ts +2 -0
  70. package/dist/components/sideNavigation/SideNavigationItem.test.d.ts.map +1 -0
  71. package/dist/components/sideNavigation/SideNavigationItem.test.js +65 -0
  72. package/dist/components/sideNavigation/SideNavigationItem.test.js.map +1 -0
  73. package/dist/components/sideNavigation/SideNavigationItemFavourite.d.ts +8 -0
  74. package/dist/components/sideNavigation/SideNavigationItemFavourite.d.ts.map +1 -0
  75. package/dist/components/{sidebarNav/SidebarNavItemFavourite.js → sideNavigation/SideNavigationItemFavourite.js} +5 -5
  76. package/dist/components/sideNavigation/SideNavigationItemFavourite.js.map +1 -0
  77. package/dist/components/sideNavigation/SideNavigationItemFavourite.test.d.ts +2 -0
  78. package/dist/components/sideNavigation/SideNavigationItemFavourite.test.d.ts.map +1 -0
  79. package/dist/components/sideNavigation/SideNavigationItemFavourite.test.js +31 -0
  80. package/dist/components/sideNavigation/SideNavigationItemFavourite.test.js.map +1 -0
  81. package/dist/components/sideNavigation/SideNavigationTitle.d.ts +4 -0
  82. package/dist/components/sideNavigation/SideNavigationTitle.d.ts.map +1 -0
  83. package/dist/components/sideNavigation/SideNavigationTitle.js +7 -0
  84. package/dist/components/sideNavigation/SideNavigationTitle.js.map +1 -0
  85. package/dist/components/sideNavigation/SideNavigationTitle.test.d.ts +2 -0
  86. package/dist/components/sideNavigation/SideNavigationTitle.test.d.ts.map +1 -0
  87. package/dist/components/sideNavigation/SideNavigationTitle.test.js +22 -0
  88. package/dist/components/sideNavigation/SideNavigationTitle.test.js.map +1 -0
  89. package/dist/components/sideNavigation/SideNavigationTooltip.d.ts +7 -0
  90. package/dist/components/sideNavigation/SideNavigationTooltip.d.ts.map +1 -0
  91. package/dist/components/{sidebarNav/SidebarNavTooltip.js → sideNavigation/SideNavigationTooltip.js} +2 -2
  92. package/dist/components/sideNavigation/SideNavigationTooltip.js.map +1 -0
  93. package/dist/components/sideNavigation/SideNavigationTooltip.test.d.ts +2 -0
  94. package/dist/components/sideNavigation/SideNavigationTooltip.test.d.ts.map +1 -0
  95. package/dist/components/sideNavigation/SideNavigationTooltip.test.js +26 -0
  96. package/dist/components/sideNavigation/SideNavigationTooltip.test.js.map +1 -0
  97. package/dist/components/sideNavigation/resolvePanelItemProps.d.ts +4 -0
  98. package/dist/components/sideNavigation/resolvePanelItemProps.d.ts.map +1 -0
  99. package/dist/components/{sidebarNav → sideNavigation}/resolvePanelItemProps.js +5 -4
  100. package/dist/components/sideNavigation/resolvePanelItemProps.js.map +1 -0
  101. package/dist/components/sideNavigation/resolvePanelItemProps.test.d.ts.map +1 -0
  102. package/dist/components/{sidebarNav → sideNavigation}/resolvePanelItemProps.test.js +18 -4
  103. package/dist/components/sideNavigation/resolvePanelItemProps.test.js.map +1 -0
  104. package/dist/components/sideNavigation/types.d.ts +47 -0
  105. package/dist/components/sideNavigation/types.d.ts.map +1 -0
  106. package/dist/components/sideNavigation/types.js +2 -0
  107. package/dist/components/sideNavigation/types.js.map +1 -0
  108. package/dist/components/sidebar/Sidebar.d.ts +13 -0
  109. package/dist/components/sidebar/Sidebar.d.ts.map +1 -0
  110. package/dist/components/sidebar/Sidebar.js +9 -0
  111. package/dist/components/sidebar/Sidebar.js.map +1 -0
  112. package/dist/components/sidebar/Sidebar.stories.d.ts +48 -0
  113. package/dist/components/sidebar/Sidebar.stories.d.ts.map +1 -0
  114. package/dist/components/sidebar/Sidebar.stories.js +444 -0
  115. package/dist/components/sidebar/Sidebar.stories.js.map +1 -0
  116. package/dist/components/sidebar/Sidebar.test.d.ts +2 -0
  117. package/dist/components/sidebar/Sidebar.test.d.ts.map +1 -0
  118. package/dist/components/sidebar/Sidebar.test.js +81 -0
  119. package/dist/components/sidebar/Sidebar.test.js.map +1 -0
  120. package/dist/components/sidebar/SidebarItem.d.ts +7 -0
  121. package/dist/components/sidebar/SidebarItem.d.ts.map +1 -0
  122. package/dist/components/sidebar/SidebarItem.js +11 -0
  123. package/dist/components/sidebar/SidebarItem.js.map +1 -0
  124. package/dist/components/singleUser/SingleUser.d.ts +1 -1
  125. package/dist/components/tabs/TabsItem.stories.d.ts +2 -2
  126. package/dist/components/toast/Toast.d.ts +11 -2
  127. package/dist/components/toast/Toast.d.ts.map +1 -1
  128. package/dist/components/toast/Toast.js +5 -3
  129. package/dist/components/toast/Toast.js.map +1 -1
  130. package/dist/components/toast/Toast.stories.d.ts +15 -3
  131. package/dist/components/toast/Toast.stories.d.ts.map +1 -1
  132. package/dist/components/toast/Toast.stories.js +43 -41
  133. package/dist/components/toast/Toast.stories.js.map +1 -1
  134. package/dist/components/toast/Toast.test.js +19 -4
  135. package/dist/components/toast/Toast.test.js.map +1 -1
  136. package/dist/components/toast/ToastAction.d.ts +7 -0
  137. package/dist/components/toast/ToastAction.d.ts.map +1 -0
  138. package/dist/components/toast/ToastAction.js +9 -0
  139. package/dist/components/toast/ToastAction.js.map +1 -0
  140. package/dist/components/tooltip/TooltipWrapper.d.ts +1 -0
  141. package/dist/components/tooltip/TooltipWrapper.d.ts.map +1 -1
  142. package/dist/components/tooltip/TooltipWrapper.js +2 -2
  143. package/dist/components/tooltip/TooltipWrapper.js.map +1 -1
  144. package/dist/components/widget/Widget.d.ts +18 -0
  145. package/dist/components/widget/Widget.d.ts.map +1 -0
  146. package/dist/components/widget/Widget.js +51 -0
  147. package/dist/components/widget/Widget.js.map +1 -0
  148. package/dist/components/widget/Widget.stories.d.ts +128 -0
  149. package/dist/components/widget/Widget.stories.d.ts.map +1 -0
  150. package/dist/components/widget/Widget.stories.js +417 -0
  151. package/dist/components/widget/Widget.stories.js.map +1 -0
  152. package/dist/components/widget/Widget.test.d.ts +2 -0
  153. package/dist/components/widget/Widget.test.d.ts.map +1 -0
  154. package/dist/components/widget/Widget.test.js +110 -0
  155. package/dist/components/widget/Widget.test.js.map +1 -0
  156. package/dist/components/widget/WidgetBody.d.ts +6 -0
  157. package/dist/components/widget/WidgetBody.d.ts.map +1 -0
  158. package/dist/components/widget/WidgetBody.js +20 -0
  159. package/dist/components/widget/WidgetBody.js.map +1 -0
  160. package/dist/components/widget/WidgetContext.d.ts +20 -0
  161. package/dist/components/widget/WidgetContext.d.ts.map +1 -0
  162. package/dist/components/widget/WidgetContext.js +10 -0
  163. package/dist/components/widget/WidgetContext.js.map +1 -0
  164. package/dist/components/widget/WidgetHeader.d.ts +8 -0
  165. package/dist/components/widget/WidgetHeader.d.ts.map +1 -0
  166. package/dist/components/widget/WidgetHeader.js +56 -0
  167. package/dist/components/widget/WidgetHeader.js.map +1 -0
  168. package/dist/components/widget/types.d.ts +43 -0
  169. package/dist/components/widget/types.d.ts.map +1 -0
  170. package/dist/components/widget/types.js +2 -0
  171. package/dist/components/widget/types.js.map +1 -0
  172. package/dist/components/widgetCalendar/WidgetCalendar.d.ts +35 -0
  173. package/dist/components/widgetCalendar/WidgetCalendar.d.ts.map +1 -0
  174. package/dist/components/widgetCalendar/WidgetCalendar.js +22 -0
  175. package/dist/components/widgetCalendar/WidgetCalendar.js.map +1 -0
  176. package/dist/components/widgetCalendar/WidgetCalendar.stories.d.ts +60 -0
  177. package/dist/components/widgetCalendar/WidgetCalendar.stories.d.ts.map +1 -0
  178. package/dist/components/widgetCalendar/WidgetCalendar.stories.js +140 -0
  179. package/dist/components/widgetCalendar/WidgetCalendar.stories.js.map +1 -0
  180. package/dist/components/widgetCalendar/WidgetCalendar.test.d.ts +2 -0
  181. package/dist/components/widgetCalendar/WidgetCalendar.test.d.ts.map +1 -0
  182. package/dist/components/widgetCalendar/WidgetCalendar.test.js +88 -0
  183. package/dist/components/widgetCalendar/WidgetCalendar.test.js.map +1 -0
  184. package/dist/components/widgetCalendar/WidgetCalendarItem.d.ts +17 -0
  185. package/dist/components/widgetCalendar/WidgetCalendarItem.d.ts.map +1 -0
  186. package/dist/components/widgetCalendar/WidgetCalendarItem.js +25 -0
  187. package/dist/components/widgetCalendar/WidgetCalendarItem.js.map +1 -0
  188. package/dist/components/widgetFavourites/WidgetFavourites.d.ts +12 -0
  189. package/dist/components/widgetFavourites/WidgetFavourites.d.ts.map +1 -0
  190. package/dist/components/widgetFavourites/WidgetFavourites.js +23 -0
  191. package/dist/components/widgetFavourites/WidgetFavourites.js.map +1 -0
  192. package/dist/components/widgetFavourites/WidgetFavourites.stories.d.ts +84 -0
  193. package/dist/components/widgetFavourites/WidgetFavourites.stories.d.ts.map +1 -0
  194. package/dist/components/widgetFavourites/WidgetFavourites.stories.js +210 -0
  195. package/dist/components/widgetFavourites/WidgetFavourites.stories.js.map +1 -0
  196. package/dist/components/widgetFavourites/WidgetFavourites.test.d.ts +2 -0
  197. package/dist/components/widgetFavourites/WidgetFavourites.test.d.ts.map +1 -0
  198. package/dist/components/widgetFavourites/WidgetFavourites.test.js +67 -0
  199. package/dist/components/widgetFavourites/WidgetFavourites.test.js.map +1 -0
  200. package/dist/components/widgetFavourites/WidgetFavouritesItem.d.ts +3 -0
  201. package/dist/components/widgetFavourites/WidgetFavouritesItem.d.ts.map +1 -0
  202. package/dist/components/widgetFavourites/WidgetFavouritesItem.js +10 -0
  203. package/dist/components/widgetFavourites/WidgetFavouritesItem.js.map +1 -0
  204. package/dist/components/widgetFavourites/types.d.ts +25 -0
  205. package/dist/components/widgetFavourites/types.d.ts.map +1 -0
  206. package/dist/components/widgetFavourites/types.js +2 -0
  207. package/dist/components/widgetFavourites/types.js.map +1 -0
  208. package/dist/components/widgetNotifications/WidgetNotifications.d.ts +33 -0
  209. package/dist/components/widgetNotifications/WidgetNotifications.d.ts.map +1 -0
  210. package/dist/components/widgetNotifications/WidgetNotifications.js +18 -0
  211. package/dist/components/widgetNotifications/WidgetNotifications.js.map +1 -0
  212. package/dist/components/widgetNotifications/WidgetNotifications.stories.d.ts +60 -0
  213. package/dist/components/widgetNotifications/WidgetNotifications.stories.d.ts.map +1 -0
  214. package/dist/components/widgetNotifications/WidgetNotifications.stories.js +269 -0
  215. package/dist/components/widgetNotifications/WidgetNotifications.stories.js.map +1 -0
  216. package/dist/components/widgetNotifications/WidgetNotifications.test.d.ts +2 -0
  217. package/dist/components/widgetNotifications/WidgetNotifications.test.d.ts.map +1 -0
  218. package/dist/components/widgetNotifications/WidgetNotifications.test.js +79 -0
  219. package/dist/components/widgetNotifications/WidgetNotifications.test.js.map +1 -0
  220. package/dist/components/widgetNotifications/WidgetNotificationsItem.d.ts +14 -0
  221. package/dist/components/widgetNotifications/WidgetNotificationsItem.d.ts.map +1 -0
  222. package/dist/components/widgetNotifications/WidgetNotificationsItem.js +14 -0
  223. package/dist/components/widgetNotifications/WidgetNotificationsItem.js.map +1 -0
  224. package/dist/index.css +756 -78
  225. package/dist/index.css.map +1 -1
  226. package/dist/index.d.ts +15 -9
  227. package/dist/index.d.ts.map +1 -1
  228. package/dist/index.js +15 -8
  229. package/dist/index.js.map +1 -1
  230. package/dist/utils/favourites/favouriteConstants.d.ts +12 -0
  231. package/dist/utils/favourites/favouriteConstants.d.ts.map +1 -0
  232. package/dist/utils/favourites/favouriteConstants.js +16 -0
  233. package/dist/utils/favourites/favouriteConstants.js.map +1 -0
  234. package/dist/utils/favourites/favouriteConstants.test.d.ts +2 -0
  235. package/dist/utils/favourites/favouriteConstants.test.d.ts.map +1 -0
  236. package/dist/utils/favourites/favouriteConstants.test.js +12 -0
  237. package/dist/utils/favourites/favouriteConstants.test.js.map +1 -0
  238. package/dist/utils/hooks/useControllableBoolean.d.ts.map +1 -0
  239. package/dist/utils/hooks/useControllableBoolean.js.map +1 -0
  240. package/dist/utils/hooks/useControllableBoolean.test.d.ts +2 -0
  241. package/dist/utils/hooks/useControllableBoolean.test.d.ts.map +1 -0
  242. package/dist/utils/hooks/useControllableBoolean.test.js +34 -0
  243. package/dist/utils/hooks/useControllableBoolean.test.js.map +1 -0
  244. package/package.json +1 -1
  245. package/src/components/emptyState/EmptyState.stories.tsx +487 -0
  246. package/src/components/emptyState/EmptyState.test.tsx +140 -0
  247. package/src/components/emptyState/EmptyState.tsx +84 -0
  248. package/src/components/emptyState/emptyState.scss +63 -0
  249. package/src/components/favourite/FavouriteButton.test.tsx +83 -0
  250. package/src/components/favourite/FavouriteButton.tsx +70 -0
  251. package/src/components/favourite/favouriteButton.scss +37 -0
  252. package/src/components/icon/Icon.tsx +2 -2
  253. package/src/components/link/link.scss +26 -0
  254. package/src/components/pill/Pill.stories.tsx +432 -41
  255. package/src/components/pill/Pill.test.tsx +74 -3
  256. package/src/components/pill/Pill.tsx +26 -11
  257. package/src/components/sideNavigation/SideNavigation.stories.tsx +578 -0
  258. package/src/components/sideNavigation/SideNavigation.test.tsx +109 -0
  259. package/src/components/sideNavigation/SideNavigation.tsx +98 -0
  260. package/src/components/sideNavigation/SideNavigationContext.tsx +25 -0
  261. package/src/components/sideNavigation/SideNavigationGroup.test.tsx +103 -0
  262. package/src/components/{sidebarNav/SidebarNavGroup.tsx → sideNavigation/SideNavigationGroup.tsx} +8 -8
  263. package/src/components/sideNavigation/SideNavigationItem.test.tsx +137 -0
  264. package/src/components/sideNavigation/SideNavigationItem.tsx +125 -0
  265. package/src/components/sideNavigation/SideNavigationItemFavourite.test.tsx +54 -0
  266. package/src/components/{sidebarNav/SidebarNavItemFavourite.tsx → sideNavigation/SideNavigationItemFavourite.tsx} +7 -7
  267. package/src/components/sideNavigation/SideNavigationTitle.test.tsx +23 -0
  268. package/src/components/sideNavigation/SideNavigationTitle.tsx +13 -0
  269. package/src/components/sideNavigation/SideNavigationTooltip.test.tsx +44 -0
  270. package/src/components/{sidebarNav/SidebarNavTooltip.tsx → sideNavigation/SideNavigationTooltip.tsx} +2 -2
  271. package/src/components/{sidebarNav → sideNavigation}/resolvePanelItemProps.test.ts +20 -4
  272. package/src/components/{sidebarNav → sideNavigation}/resolvePanelItemProps.ts +8 -7
  273. package/src/components/{sidebarNav/sidebarNav.scss → sideNavigation/sideNavigation.scss} +37 -136
  274. package/src/components/sideNavigation/types.ts +56 -0
  275. package/src/components/sidebar/Sidebar.stories.tsx +670 -0
  276. package/src/components/sidebar/Sidebar.test.tsx +155 -0
  277. package/src/components/sidebar/Sidebar.tsx +27 -0
  278. package/src/components/sidebar/SidebarItem.tsx +64 -0
  279. package/src/components/sidebar/sidebar.scss +65 -0
  280. package/src/components/toast/Toast.stories.tsx +75 -67
  281. package/src/components/toast/Toast.test.tsx +40 -10
  282. package/src/components/toast/Toast.tsx +19 -5
  283. package/src/components/toast/ToastAction.tsx +17 -0
  284. package/src/components/toast/toast.scss +37 -0
  285. package/src/components/tooltip/TooltipWrapper.tsx +3 -1
  286. package/src/components/widget/Widget.stories.tsx +600 -0
  287. package/src/components/widget/Widget.test.tsx +263 -0
  288. package/src/components/widget/Widget.tsx +102 -0
  289. package/src/components/widget/WidgetBody.tsx +66 -0
  290. package/src/components/widget/WidgetContext.tsx +31 -0
  291. package/src/components/widget/WidgetHeader.tsx +155 -0
  292. package/src/components/widget/types.ts +47 -0
  293. package/src/components/widget/widget.scss +218 -0
  294. package/src/components/widgetCalendar/WidgetCalendar.stories.tsx +241 -0
  295. package/src/components/widgetCalendar/WidgetCalendar.test.tsx +137 -0
  296. package/src/components/widgetCalendar/WidgetCalendar.tsx +105 -0
  297. package/src/components/widgetCalendar/WidgetCalendarItem.tsx +105 -0
  298. package/src/components/widgetCalendar/widgetCalendar.scss +124 -0
  299. package/src/components/widgetFavourites/WidgetFavourites.stories.tsx +341 -0
  300. package/src/components/widgetFavourites/WidgetFavourites.test.tsx +127 -0
  301. package/src/components/widgetFavourites/WidgetFavourites.tsx +83 -0
  302. package/src/components/widgetFavourites/WidgetFavouritesItem.tsx +37 -0
  303. package/src/components/widgetFavourites/types.ts +26 -0
  304. package/src/components/widgetFavourites/widgetFavourites.scss +84 -0
  305. package/src/components/widgetNotifications/WidgetNotifications.stories.tsx +417 -0
  306. package/src/components/widgetNotifications/WidgetNotifications.test.tsx +152 -0
  307. package/src/components/widgetNotifications/WidgetNotifications.tsx +112 -0
  308. package/src/components/widgetNotifications/WidgetNotificationsItem.tsx +88 -0
  309. package/src/components/widgetNotifications/widgetNotifications.scss +186 -0
  310. package/src/docs/Contributing.mdx +1 -1
  311. package/src/index.scss +9 -1
  312. package/src/index.ts +22 -18
  313. package/src/tokens.scss +12 -2
  314. package/src/utils/favourites/favouriteConstants.test.ts +19 -0
  315. package/src/utils/favourites/favouriteConstants.ts +21 -0
  316. package/src/utils/hooks/useControllableBoolean.test.ts +48 -0
  317. package/dist/components/sidebarNav/SidebarNav.d.ts +0 -46
  318. package/dist/components/sidebarNav/SidebarNav.d.ts.map +0 -1
  319. package/dist/components/sidebarNav/SidebarNav.js +0 -102
  320. package/dist/components/sidebarNav/SidebarNav.js.map +0 -1
  321. package/dist/components/sidebarNav/SidebarNav.stories.d.ts +0 -61
  322. package/dist/components/sidebarNav/SidebarNav.stories.d.ts.map +0 -1
  323. package/dist/components/sidebarNav/SidebarNav.stories.js +0 -253
  324. package/dist/components/sidebarNav/SidebarNav.stories.js.map +0 -1
  325. package/dist/components/sidebarNav/SidebarNav.test.d.ts +0 -2
  326. package/dist/components/sidebarNav/SidebarNav.test.d.ts.map +0 -1
  327. package/dist/components/sidebarNav/SidebarNav.test.js +0 -240
  328. package/dist/components/sidebarNav/SidebarNav.test.js.map +0 -1
  329. package/dist/components/sidebarNav/SidebarNavContext.d.ts +0 -13
  330. package/dist/components/sidebarNav/SidebarNavContext.d.ts.map +0 -1
  331. package/dist/components/sidebarNav/SidebarNavContext.js +0 -15
  332. package/dist/components/sidebarNav/SidebarNavContext.js.map +0 -1
  333. package/dist/components/sidebarNav/SidebarNavGroup.d.ts.map +0 -1
  334. package/dist/components/sidebarNav/SidebarNavGroup.js +0 -16
  335. package/dist/components/sidebarNav/SidebarNavGroup.js.map +0 -1
  336. package/dist/components/sidebarNav/SidebarNavItem.d.ts.map +0 -1
  337. package/dist/components/sidebarNav/SidebarNavItem.js +0 -44
  338. package/dist/components/sidebarNav/SidebarNavItem.js.map +0 -1
  339. package/dist/components/sidebarNav/SidebarNavItemFavourite.d.ts +0 -8
  340. package/dist/components/sidebarNav/SidebarNavItemFavourite.d.ts.map +0 -1
  341. package/dist/components/sidebarNav/SidebarNavItemFavourite.js.map +0 -1
  342. package/dist/components/sidebarNav/SidebarNavPanel.d.ts +0 -4
  343. package/dist/components/sidebarNav/SidebarNavPanel.d.ts.map +0 -1
  344. package/dist/components/sidebarNav/SidebarNavPanel.js +0 -9
  345. package/dist/components/sidebarNav/SidebarNavPanel.js.map +0 -1
  346. package/dist/components/sidebarNav/SidebarNavPanelNav.d.ts +0 -10
  347. package/dist/components/sidebarNav/SidebarNavPanelNav.d.ts.map +0 -1
  348. package/dist/components/sidebarNav/SidebarNavPanelNav.js +0 -21
  349. package/dist/components/sidebarNav/SidebarNavPanelNav.js.map +0 -1
  350. package/dist/components/sidebarNav/SidebarNavRail.d.ts +0 -6
  351. package/dist/components/sidebarNav/SidebarNavRail.d.ts.map +0 -1
  352. package/dist/components/sidebarNav/SidebarNavRail.js +0 -7
  353. package/dist/components/sidebarNav/SidebarNavRail.js.map +0 -1
  354. package/dist/components/sidebarNav/SidebarNavRailItem.d.ts +0 -10
  355. package/dist/components/sidebarNav/SidebarNavRailItem.d.ts.map +0 -1
  356. package/dist/components/sidebarNav/SidebarNavRailItem.js +0 -25
  357. package/dist/components/sidebarNav/SidebarNavRailItem.js.map +0 -1
  358. package/dist/components/sidebarNav/SidebarNavRailList.d.ts +0 -4
  359. package/dist/components/sidebarNav/SidebarNavRailList.d.ts.map +0 -1
  360. package/dist/components/sidebarNav/SidebarNavRailList.js +0 -7
  361. package/dist/components/sidebarNav/SidebarNavRailList.js.map +0 -1
  362. package/dist/components/sidebarNav/SidebarNavRailSlot.d.ts +0 -6
  363. package/dist/components/sidebarNav/SidebarNavRailSlot.d.ts.map +0 -1
  364. package/dist/components/sidebarNav/SidebarNavRailSlot.js +0 -7
  365. package/dist/components/sidebarNav/SidebarNavRailSlot.js.map +0 -1
  366. package/dist/components/sidebarNav/SidebarNavSeparator.d.ts +0 -6
  367. package/dist/components/sidebarNav/SidebarNavSeparator.d.ts.map +0 -1
  368. package/dist/components/sidebarNav/SidebarNavSeparator.js +0 -8
  369. package/dist/components/sidebarNav/SidebarNavSeparator.js.map +0 -1
  370. package/dist/components/sidebarNav/SidebarNavTitle.d.ts +0 -4
  371. package/dist/components/sidebarNav/SidebarNavTitle.d.ts.map +0 -1
  372. package/dist/components/sidebarNav/SidebarNavTitle.js +0 -7
  373. package/dist/components/sidebarNav/SidebarNavTitle.js.map +0 -1
  374. package/dist/components/sidebarNav/SidebarNavTooltip.d.ts +0 -7
  375. package/dist/components/sidebarNav/SidebarNavTooltip.d.ts.map +0 -1
  376. package/dist/components/sidebarNav/SidebarNavTooltip.js.map +0 -1
  377. package/dist/components/sidebarNav/SidebarNavTrigger.d.ts +0 -8
  378. package/dist/components/sidebarNav/SidebarNavTrigger.d.ts.map +0 -1
  379. package/dist/components/sidebarNav/SidebarNavTrigger.js +0 -15
  380. package/dist/components/sidebarNav/SidebarNavTrigger.js.map +0 -1
  381. package/dist/components/sidebarNav/index.d.ts +0 -4
  382. package/dist/components/sidebarNav/index.d.ts.map +0 -1
  383. package/dist/components/sidebarNav/index.js +0 -3
  384. package/dist/components/sidebarNav/index.js.map +0 -1
  385. package/dist/components/sidebarNav/resolvePanelItemProps.d.ts +0 -4
  386. package/dist/components/sidebarNav/resolvePanelItemProps.d.ts.map +0 -1
  387. package/dist/components/sidebarNav/resolvePanelItemProps.js.map +0 -1
  388. package/dist/components/sidebarNav/resolvePanelItemProps.test.d.ts.map +0 -1
  389. package/dist/components/sidebarNav/resolvePanelItemProps.test.js.map +0 -1
  390. package/dist/components/sidebarNav/types.d.ts +0 -100
  391. package/dist/components/sidebarNav/types.d.ts.map +0 -1
  392. package/dist/components/sidebarNav/types.js +0 -4
  393. package/dist/components/sidebarNav/types.js.map +0 -1
  394. package/dist/components/sidebarNav/useControllableBoolean.d.ts.map +0 -1
  395. package/dist/components/sidebarNav/useControllableBoolean.js.map +0 -1
  396. package/src/components/sidebarNav/SidebarNav.stories.tsx +0 -484
  397. package/src/components/sidebarNav/SidebarNav.test.tsx +0 -611
  398. package/src/components/sidebarNav/SidebarNav.tsx +0 -230
  399. package/src/components/sidebarNav/SidebarNavContext.tsx +0 -28
  400. package/src/components/sidebarNav/SidebarNavItem.tsx +0 -162
  401. package/src/components/sidebarNav/SidebarNavPanel.tsx +0 -20
  402. package/src/components/sidebarNav/SidebarNavPanelNav.tsx +0 -55
  403. package/src/components/sidebarNav/SidebarNavRail.tsx +0 -20
  404. package/src/components/sidebarNav/SidebarNavRailItem.tsx +0 -83
  405. package/src/components/sidebarNav/SidebarNavRailList.tsx +0 -11
  406. package/src/components/sidebarNav/SidebarNavRailSlot.tsx +0 -15
  407. package/src/components/sidebarNav/SidebarNavSeparator.tsx +0 -19
  408. package/src/components/sidebarNav/SidebarNavTitle.tsx +0 -13
  409. package/src/components/sidebarNav/SidebarNavTrigger.tsx +0 -52
  410. package/src/components/sidebarNav/index.ts +0 -6
  411. package/src/components/sidebarNav/types.ts +0 -126
  412. /package/dist/components/{sidebarNav → sideNavigation}/resolvePanelItemProps.test.d.ts +0 -0
  413. /package/dist/{components/sidebarNav → utils/hooks}/useControllableBoolean.d.ts +0 -0
  414. /package/dist/{components/sidebarNav → utils/hooks}/useControllableBoolean.js +0 -0
  415. /package/src/{components/sidebarNav → utils/hooks}/useControllableBoolean.ts +0 -0
@@ -1,230 +0,0 @@
1
- import { Icon } from 'Components/icon/Icon';
2
- import classNames from 'classnames';
3
- import { Tooltip as TooltipPrimitive } from 'radix-ui';
4
- import React, { useId, useMemo } from 'react';
5
- import { SidebarNavProvider } from './SidebarNavContext.js';
6
- import { SidebarNavGroup } from './SidebarNavGroup.js';
7
- import type { SidebarNavGroupProps } from './SidebarNavGroup.js';
8
- import { SidebarNavItem } from './SidebarNavItem.js';
9
- import type { SidebarNavItemProps } from './SidebarNavItem.js';
10
- import { SidebarNavPanelNav } from './SidebarNavPanelNav.js';
11
- import type { SidebarNavPanelNavProps } from './SidebarNavPanelNav.js';
12
- import { SidebarNavPanel } from './SidebarNavPanel.js';
13
- import type { SidebarNavPanelProps } from './SidebarNavPanel.js';
14
- import { SidebarNavRail } from './SidebarNavRail.js';
15
- import type { SidebarNavRailProps } from './SidebarNavRail.js';
16
- import { SidebarNavRailItem } from './SidebarNavRailItem.js';
17
- import type { SidebarNavRailItemProps } from './SidebarNavRailItem.js';
18
- import { SidebarNavRailList } from './SidebarNavRailList.js';
19
- import { SidebarNavRailSlot } from './SidebarNavRailSlot.js';
20
- import { SidebarNavSeparator } from './SidebarNavSeparator.js';
21
- import { SidebarNavTitle } from './SidebarNavTitle.js';
22
- import { SidebarNavTrigger } from './SidebarNavTrigger.js';
23
- import type { SidebarNavTriggerProps } from './SidebarNavTrigger.js';
24
- import type {
25
- SidebarNavProps,
26
- SidebarNavRailEntry,
27
- SidebarNavRailItemConfig,
28
- } from './types.js';
29
- import { isSidebarNavRailSeparator } from './types.js';
30
- import { useControllableBoolean } from './useControllableBoolean.js';
31
-
32
- function renderRailListItem(item: SidebarNavRailItemConfig) {
33
- if (item.renderItem) {
34
- return (
35
- <React.Fragment key={item.id}>
36
- {item.renderItem(item)}
37
- </React.Fragment>
38
- );
39
- }
40
-
41
- return (
42
- <SidebarNavRailItem
43
- key={item.id}
44
- data-testid={`sidebar-nav-rail-item-${item.id}`}
45
- href={item.href}
46
- onClick={item.onClick}
47
- current={item.current}
48
- aria-label={item.label}
49
- >
50
- <Icon name={item.iconName} size={24} color={item.iconColor} />
51
- {item.badgeContent}
52
- </SidebarNavRailItem>
53
- );
54
- }
55
-
56
- function SidebarNavRailFromData(props: { items: SidebarNavRailEntry[] }) {
57
- const { items } = props;
58
- const nodes: React.ReactNode[] = [];
59
- let currentGroup: SidebarNavRailItemConfig[] = [];
60
- let groupKey = 'rail-list-leading';
61
-
62
- const flushGroup = () => {
63
- if (currentGroup.length === 0) {
64
- return;
65
- }
66
-
67
- nodes.push(
68
- <SidebarNavRailList key={groupKey}>
69
- {currentGroup.map(renderRailListItem)}
70
- </SidebarNavRailList>,
71
- );
72
- currentGroup = [];
73
- };
74
-
75
- for (const entry of items) {
76
- if (isSidebarNavRailSeparator(entry)) {
77
- flushGroup();
78
- nodes.push(<SidebarNavSeparator key={entry.id} id={entry.id} />);
79
- groupKey = `rail-list-after-${entry.id}`;
80
- continue;
81
- }
82
-
83
- if (entry.opensPanel) {
84
- flushGroup();
85
- nodes.push(
86
- <SidebarNavTrigger
87
- key={entry.id}
88
- data-testid={`sidebar-nav-panel-trigger-${entry.id}`}
89
- tooltip={entry.label}
90
- onClick={(e) => {
91
- entry.onClick?.(e);
92
- }}
93
- >
94
- <Icon name={entry.iconName} size={24} color={entry.iconColor} />
95
- </SidebarNavTrigger>,
96
- );
97
- continue;
98
- }
99
-
100
- currentGroup.push(entry);
101
- }
102
-
103
- flushGroup();
104
-
105
- return (
106
- <SidebarNavRail>
107
- {nodes}
108
- </SidebarNavRail>
109
- );
110
- }
111
-
112
- const SidebarNavImpl = (props: SidebarNavProps) => {
113
- const {
114
- expanded,
115
- defaultExpanded = true,
116
- onExpandedChange,
117
- renderLink,
118
- railItems,
119
- panelTitle,
120
- panelNavItems,
121
- className,
122
- children,
123
- ...rest
124
- } = props;
125
-
126
- const panelId = useId();
127
- const { value: isExpanded, set: setExpanded } = useControllableBoolean({
128
- value: expanded,
129
- defaultValue: defaultExpanded,
130
- onChange: onExpandedChange,
131
- });
132
-
133
- const useDataRail = railItems !== undefined;
134
- const useDataPanel = panelTitle !== undefined || panelNavItems !== undefined;
135
- const childArray = React.Children.toArray(children) as React.ReactElement[];
136
- const railChild = childArray.find(c => c.type === SidebarNavRail);
137
- const panelChild = childArray.find(c => c.type === SidebarNavPanel);
138
-
139
- if (process.env.NODE_ENV !== 'production') {
140
- if (useDataPanel && !useDataRail && railChild == null && childArray.length > 0) {
141
- console.warn(
142
- 'SidebarNav: composable SidebarNav.Rail was not found. In hybrid mode, SidebarNav.Rail must be a direct child of SidebarNav (not wrapped in Fragment or other wrappers).',
143
- );
144
- }
145
- }
146
-
147
- const content
148
- = useDataRail || useDataPanel
149
- ? (
150
- <>
151
- {useDataRail
152
- ? <SidebarNavRailFromData items={railItems} />
153
- : railChild}
154
- {useDataPanel
155
- ? (
156
- <SidebarNavPanel>
157
- {panelTitle !== undefined && (
158
- <SidebarNavTitle>{panelTitle}</SidebarNavTitle>
159
- )}
160
- <SidebarNavPanelNav items={panelNavItems ?? []} />
161
- </SidebarNavPanel>
162
- )
163
- : panelChild}
164
- </>
165
- )
166
- : children;
167
-
168
- const contextValue = useMemo(
169
- () => ({
170
- expanded: isExpanded,
171
- setExpanded,
172
- panelId,
173
- renderLink,
174
- }),
175
- [isExpanded, setExpanded, panelId, renderLink],
176
- );
177
-
178
- return (
179
- <TooltipPrimitive.Provider delayDuration={400}>
180
- <SidebarNavProvider value={contextValue}>
181
- <div
182
- className={classNames('ds-sidebar-nav', className)}
183
- data-testid="sidebar-nav"
184
- {...rest}
185
- >
186
- {content}
187
- </div>
188
- </SidebarNavProvider>
189
- </TooltipPrimitive.Provider>
190
- );
191
- };
192
-
193
- type SidebarNavComponent = typeof SidebarNavImpl & {
194
- Rail: typeof SidebarNavRail;
195
- Separator: typeof SidebarNavSeparator;
196
- RailList: typeof SidebarNavRailList;
197
- RailItem: typeof SidebarNavRailItem;
198
- RailSlot: typeof SidebarNavRailSlot;
199
- Trigger: typeof SidebarNavTrigger;
200
- Panel: typeof SidebarNavPanel;
201
- Title: typeof SidebarNavTitle;
202
- PanelNav: typeof SidebarNavPanelNav;
203
- Group: typeof SidebarNavGroup;
204
- Item: typeof SidebarNavItem;
205
- };
206
-
207
- export const SidebarNav = SidebarNavImpl as SidebarNavComponent;
208
-
209
- SidebarNav.Rail = SidebarNavRail;
210
- SidebarNav.Separator = SidebarNavSeparator;
211
- SidebarNav.RailList = SidebarNavRailList;
212
- SidebarNav.RailItem = SidebarNavRailItem;
213
- SidebarNav.RailSlot = SidebarNavRailSlot;
214
- SidebarNav.Trigger = SidebarNavTrigger;
215
- SidebarNav.Panel = SidebarNavPanel;
216
- SidebarNav.Title = SidebarNavTitle;
217
- SidebarNav.PanelNav = SidebarNavPanelNav;
218
- SidebarNav.Group = SidebarNavGroup;
219
- SidebarNav.Item = SidebarNavItem;
220
-
221
- export namespace SidebarNav {
222
- export type Props = SidebarNavProps;
223
- export type RailProps = SidebarNavRailProps;
224
- export type RailItemProps = SidebarNavRailItemProps;
225
- export type TriggerProps = SidebarNavTriggerProps;
226
- export type PanelProps = SidebarNavPanelProps;
227
- export type PanelNavProps = SidebarNavPanelNavProps;
228
- export type GroupProps = SidebarNavGroupProps;
229
- export type ItemProps = SidebarNavItemProps;
230
- }
@@ -1,28 +0,0 @@
1
- import { createContext, useContext } from 'react';
2
- import type { SidebarNavRenderLinkArgs } from './types.js';
3
-
4
- export type SidebarNavContextValue = {
5
- expanded: boolean;
6
- setExpanded: (expanded: boolean) => void;
7
- panelId: string;
8
- renderLink?: (args: SidebarNavRenderLinkArgs) => React.ReactElement;
9
- };
10
-
11
- const SidebarNavContext = createContext<SidebarNavContextValue | null>(null);
12
-
13
- export function SidebarNavProvider(props: { value: SidebarNavContextValue; children: React.ReactNode }) {
14
- const { value, children } = props;
15
- return (
16
- <SidebarNavContext.Provider value={value}>
17
- {children}
18
- </SidebarNavContext.Provider>
19
- );
20
- }
21
-
22
- export function useSidebarNavContext() {
23
- const ctx = useContext(SidebarNavContext);
24
- if (!ctx) {
25
- throw new Error('SidebarNav components must be used within <SidebarNav>.');
26
- }
27
- return ctx;
28
- }
@@ -1,162 +0,0 @@
1
- import classNames from 'classnames';
2
- import type {
3
- AnchorHTMLAttributes,
4
- ButtonHTMLAttributes,
5
- HTMLAttributes,
6
- MouseEventHandler,
7
- } from 'react';
8
- import { useSidebarNavContext } from './SidebarNavContext.js';
9
- import { SidebarNavItemFavourite } from './SidebarNavItemFavourite.js';
10
- import type { SidebarNavLinkProps } from './types.js';
11
-
12
- type SidebarNavItemFavouriteVariant
13
- = | { canFavourite?: false; favouriteTooltip?: never }
14
- | { canFavourite: true; favouriteTooltip: string };
15
-
16
- type SidebarNavItemLinkVariant = {
17
- linkElement?: 'link';
18
- href: string;
19
- linkElementProps?: Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href' | 'className' | 'children'>;
20
- linkProps?: SidebarNavLinkProps;
21
- };
22
-
23
- type SidebarNavItemButtonVariant = {
24
- linkElement: 'button';
25
- href?: never;
26
- linkElementProps?: ButtonHTMLAttributes<HTMLButtonElement>;
27
- linkProps?: never;
28
- };
29
-
30
- export type SidebarNavItemProps = {
31
- current?: boolean;
32
- itemId: string;
33
- isPressed?: boolean;
34
- onFavouriteClick?: MouseEventHandler<HTMLButtonElement>;
35
- onClick?: MouseEventHandler<HTMLElement>;
36
- children: React.ReactNode;
37
- } & Omit<HTMLAttributes<HTMLLIElement>, 'children' | 'onClick'>
38
- & SidebarNavItemFavouriteVariant
39
- & (SidebarNavItemLinkVariant | SidebarNavItemButtonVariant);
40
-
41
- function omitOnClick<T extends { onClick?: MouseEventHandler<HTMLElement> }>(
42
- props: T | undefined,
43
- ): Omit<T, 'onClick'> | undefined {
44
- if (props == null) {
45
- return undefined;
46
- }
47
-
48
- const rest = { ...props };
49
- delete rest.onClick;
50
- return rest;
51
- }
52
-
53
- export const SidebarNavItem = (props: SidebarNavItemProps) => {
54
- const {
55
- current,
56
- itemId,
57
- canFavourite,
58
- favouriteTooltip,
59
- isPressed = false,
60
- onFavouriteClick,
61
- children,
62
- className,
63
- linkElement = 'link',
64
- href,
65
- linkElementProps,
66
- linkProps,
67
- onClick,
68
- ...rest
69
- } = props;
70
-
71
- const { renderLink } = useSidebarNavContext();
72
-
73
- const linkClassName = classNames(
74
- 'ds-sidebar-nav__item-link',
75
- { 'ds-sidebar-nav__item-link--current': Boolean(current) },
76
- );
77
-
78
- const linkChildren = <span className="ds-sidebar-nav__item-label">{children}</span>;
79
-
80
- const linkElementOnClick = linkElementProps?.onClick;
81
-
82
- const handleClick: MouseEventHandler<HTMLElement> = (event) => {
83
- if (onClick) {
84
- onClick(event);
85
- return;
86
- }
87
-
88
- linkElementOnClick?.(
89
- event as React.MouseEvent<HTMLButtonElement> & React.MouseEvent<HTMLAnchorElement>,
90
- );
91
- };
92
-
93
- const buttonLinkElementProps = omitOnClick(
94
- linkElementProps as ButtonHTMLAttributes<HTMLButtonElement> | undefined,
95
- );
96
- const anchorLinkElementProps = omitOnClick(
97
- linkElementProps as AnchorHTMLAttributes<HTMLAnchorElement> | undefined,
98
- );
99
-
100
- const renderAnchorElement = () => renderLink
101
- ? renderLink({
102
- href: href!,
103
- className: linkClassName,
104
- ariaCurrent: current ? 'page' : undefined,
105
- linkProps,
106
- linkElementProps: anchorLinkElementProps as Omit<
107
- AnchorHTMLAttributes<HTMLAnchorElement>,
108
- 'href' | 'className' | 'children'
109
- > | undefined,
110
- onClick: handleClick,
111
- children: linkChildren,
112
- })
113
- : (
114
- <a
115
- href={href}
116
- className={linkClassName}
117
- aria-current={current ? 'page' : undefined}
118
- {...linkProps}
119
- {...anchorLinkElementProps}
120
- onClick={handleClick as MouseEventHandler<HTMLAnchorElement>}
121
- >
122
- {linkChildren}
123
- </a>
124
- );
125
-
126
- const linkElementNode = linkElement === 'button'
127
- ? (
128
- <button
129
- type="button"
130
- className={linkClassName}
131
- aria-current={current ? 'page' : undefined}
132
- {...buttonLinkElementProps}
133
- onClick={handleClick as MouseEventHandler<HTMLButtonElement>}
134
- >
135
- {linkChildren}
136
- </button>
137
- )
138
- : renderAnchorElement();
139
-
140
- return (
141
- <li
142
- className={classNames(
143
- 'ds-sidebar-nav__list-item',
144
- 'ds-sidebar-nav__item',
145
- { 'ds-sidebar-nav__item--has-favourite': canFavourite },
146
- className,
147
- )}
148
- data-testid={`sidebar-nav-panel-item-${itemId}`}
149
- {...rest}
150
- >
151
- {linkElementNode}
152
- {canFavourite === true && (
153
- <SidebarNavItemFavourite
154
- isPressed={isPressed}
155
- itemId={itemId}
156
- favouriteTooltip={favouriteTooltip}
157
- onClick={onFavouriteClick}
158
- />
159
- )}
160
- </li>
161
- );
162
- };
@@ -1,20 +0,0 @@
1
- import classNames from 'classnames';
2
- import type { HTMLAttributes } from 'react';
3
- import { useSidebarNavContext } from './SidebarNavContext.js';
4
-
5
- export type SidebarNavPanelProps = HTMLAttributes<HTMLDivElement>;
6
-
7
- export const SidebarNavPanel = (props: SidebarNavPanelProps) => {
8
- const { className, ...rest } = props;
9
- const { expanded, panelId } = useSidebarNavContext();
10
-
11
- return (
12
- <div
13
- id={panelId}
14
- aria-hidden={!expanded}
15
- className={classNames('ds-sidebar-nav__panel', className)}
16
- data-testid="sidebar-nav-panel"
17
- {...rest}
18
- />
19
- );
20
- };
@@ -1,55 +0,0 @@
1
- import classNames from 'classnames';
2
- import type { HTMLAttributes } from 'react';
3
- import { SidebarNavGroup } from './SidebarNavGroup.js';
4
- import { SidebarNavItem } from './SidebarNavItem.js';
5
- import { resolvePanelItemProps } from './resolvePanelItemProps.js';
6
- import type { SidebarNavItemNode, SidebarNavNode } from './types.js';
7
-
8
- export type SidebarNavPanelNavProps = {
9
- ariaLabel?: string;
10
- items?: SidebarNavNode[];
11
- } & Omit<HTMLAttributes<HTMLElement>, 'children'> & {
12
- children?: React.ReactNode;
13
- };
14
-
15
- function renderItemNode(node: SidebarNavItemNode) {
16
- return <SidebarNavItem key={node.id} {...resolvePanelItemProps(node)} />;
17
- }
18
-
19
- function renderNodes(nodes: SidebarNavNode[]) {
20
- return nodes.map((node) => {
21
- if (node.type === 'group') {
22
- return (
23
- <SidebarNavGroup
24
- key={node.id}
25
- label={node.label}
26
- defaultExpanded={node.defaultExpanded}
27
- expanded={node.expanded}
28
- onExpandedChange={node.onExpandedChange}
29
- >
30
- {renderNodes(node.children ?? [])}
31
- </SidebarNavGroup>
32
- );
33
- }
34
-
35
- return renderItemNode(node);
36
- });
37
- }
38
-
39
- export const SidebarNavPanelNav = (props: SidebarNavPanelNavProps) => {
40
- const {
41
- ariaLabel = 'Sidebar links',
42
- items,
43
- className,
44
- children,
45
- ...rest
46
- } = props;
47
-
48
- return (
49
- <nav aria-label={ariaLabel} className={classNames('ds-sidebar-nav__nav', className)} {...rest}>
50
- <ul className="ds-sidebar-nav__list">
51
- {items ? renderNodes(items) : children}
52
- </ul>
53
- </nav>
54
- );
55
- };
@@ -1,20 +0,0 @@
1
- import classNames from 'classnames';
2
- import type { HTMLAttributes } from 'react';
3
-
4
- export type SidebarNavRailProps = {
5
- ariaLabel?: string;
6
- } & HTMLAttributes<HTMLElement>;
7
-
8
- export const SidebarNavRail = (props: SidebarNavRailProps) => {
9
- const { className, children, ariaLabel = 'Sidebar rail', ...rest } = props;
10
- return (
11
- <nav
12
- aria-label={ariaLabel}
13
- className={classNames('ds-sidebar-nav__rail', className)}
14
- data-testid="sidebar-nav-rail"
15
- {...rest}
16
- >
17
- {children}
18
- </nav>
19
- );
20
- };
@@ -1,83 +0,0 @@
1
- import classNames from 'classnames';
2
- import type { MouseEventHandler } from 'react';
3
- import { useSidebarNavContext } from './SidebarNavContext.js';
4
- import { SidebarNavTooltip } from './SidebarNavTooltip.js';
5
-
6
- export type SidebarNavRailItemProps = {
7
- 'href'?: string;
8
- 'onClick'?: MouseEventHandler;
9
- 'current'?: boolean;
10
- 'aria-label': string;
11
- 'data-testid'?: string;
12
- } & Omit<React.HTMLAttributes<HTMLLIElement>, 'onClick'>;
13
-
14
- export const SidebarNavRailItem = (props: SidebarNavRailItemProps) => {
15
- const {
16
- href,
17
- onClick,
18
- current,
19
- 'aria-label': ariaLabel,
20
- 'data-testid': dataTestId,
21
- className,
22
- children,
23
- ...rest
24
- } = props;
25
-
26
- const { renderLink } = useSidebarNavContext();
27
-
28
- const itemClassName = classNames(
29
- 'ds-sidebar-nav__rail-item',
30
- { 'ds-sidebar-nav__rail-item--selected': Boolean(current) },
31
- );
32
-
33
- const content = (
34
- <span className="ds-sidebar-nav__rail-badge-anchor">{children}</span>
35
- );
36
-
37
- const renderLinkNode = () => renderLink
38
- ? renderLink({
39
- href: href!,
40
- className: itemClassName,
41
- ariaCurrent: current ? 'page' : undefined,
42
- ariaLabel,
43
- onClick,
44
- children: content,
45
- })
46
- : (
47
- <a
48
- href={href}
49
- className={itemClassName}
50
- aria-current={current ? 'page' : undefined}
51
- aria-label={ariaLabel}
52
- onClick={onClick}
53
- >
54
- {content}
55
- </a>
56
- );
57
-
58
- const trigger = href
59
- ? renderLinkNode()
60
- : (
61
- <button
62
- type="button"
63
- className={itemClassName}
64
- aria-current={current ? 'page' : undefined}
65
- aria-label={ariaLabel}
66
- onClick={onClick}
67
- >
68
- {content}
69
- </button>
70
- );
71
-
72
- return (
73
- <li
74
- className={classNames('ds-sidebar-nav__rail-list-item', className)}
75
- data-testid={dataTestId}
76
- {...rest}
77
- >
78
- <SidebarNavTooltip label={ariaLabel}>
79
- {trigger}
80
- </SidebarNavTooltip>
81
- </li>
82
- );
83
- };
@@ -1,11 +0,0 @@
1
- import classNames from 'classnames';
2
- import type { HTMLAttributes } from 'react';
3
-
4
- export type SidebarNavRailListProps = HTMLAttributes<HTMLUListElement>;
5
-
6
- export const SidebarNavRailList = (props: SidebarNavRailListProps) => {
7
- const { className, ...rest } = props;
8
- return (
9
- <ul className={classNames('ds-sidebar-nav__rail-list', className)} {...rest} />
10
- );
11
- };
@@ -1,15 +0,0 @@
1
- import classNames from 'classnames';
2
- import type { HTMLAttributes } from 'react';
3
-
4
- export type SidebarNavRailSlotProps = {
5
- children: React.ReactNode;
6
- } & Omit<HTMLAttributes<HTMLLIElement>, 'children'>;
7
-
8
- export const SidebarNavRailSlot = (props: SidebarNavRailSlotProps) => {
9
- const { children, className, ...rest } = props;
10
- return (
11
- <li className={classNames('ds-sidebar-nav__rail-list-item', className)} {...rest}>
12
- {children}
13
- </li>
14
- );
15
- };
@@ -1,19 +0,0 @@
1
- import { Separator } from 'Components/separator/Separator';
2
- import classNames from 'classnames';
3
-
4
- export type SidebarNavSeparatorProps = {
5
- id?: string;
6
- className?: string;
7
- };
8
-
9
- export const SidebarNavSeparator = (props: SidebarNavSeparatorProps) => {
10
- const { id, className } = props;
11
- return (
12
- <Separator
13
- orientation="horizontal"
14
- decorative
15
- className={classNames('ds-sidebar-nav__separator', className)}
16
- data-testid={id ? `sidebar-nav-rail-separator-${id}` : 'sidebar-nav-rail-separator'}
17
- />
18
- );
19
- };
@@ -1,13 +0,0 @@
1
- import classNames from 'classnames';
2
- import type { HTMLAttributes } from 'react';
3
-
4
- export type SidebarNavTitleProps = HTMLAttributes<HTMLHeadingElement>;
5
-
6
- export const SidebarNavTitle = (props: SidebarNavTitleProps) => {
7
- const { className, children, ...rest } = props;
8
- return (
9
- <h2 className={classNames('ds-sidebar-nav__title', className)} {...rest}>
10
- {children}
11
- </h2>
12
- );
13
- };