@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.
- package/.gather/instructions/project-overview.md +1 -1
- package/CHANGELOG.md +14 -0
- package/CONTRIBUTING.md +7 -5
- package/component-library.md +97 -3
- package/dist/components/emptyState/EmptyState.d.ts +22 -0
- package/dist/components/emptyState/EmptyState.d.ts.map +1 -0
- package/dist/components/emptyState/EmptyState.js +11 -0
- package/dist/components/emptyState/EmptyState.js.map +1 -0
- package/dist/components/emptyState/EmptyState.stories.d.ts +117 -0
- package/dist/components/emptyState/EmptyState.stories.d.ts.map +1 -0
- package/dist/components/emptyState/EmptyState.stories.js +332 -0
- package/dist/components/emptyState/EmptyState.stories.js.map +1 -0
- package/dist/components/emptyState/EmptyState.test.d.ts +2 -0
- package/dist/components/emptyState/EmptyState.test.d.ts.map +1 -0
- package/dist/components/emptyState/EmptyState.test.js +80 -0
- package/dist/components/emptyState/EmptyState.test.js.map +1 -0
- package/dist/components/favourite/FavouriteButton.d.ts +18 -0
- package/dist/components/favourite/FavouriteButton.d.ts.map +1 -0
- package/dist/components/favourite/FavouriteButton.js +16 -0
- package/dist/components/favourite/FavouriteButton.js.map +1 -0
- package/dist/components/favourite/FavouriteButton.test.d.ts +2 -0
- package/dist/components/favourite/FavouriteButton.test.d.ts.map +1 -0
- package/dist/components/favourite/FavouriteButton.test.js +37 -0
- package/dist/components/favourite/FavouriteButton.test.js.map +1 -0
- package/dist/components/filterBar/FilterBar.d.ts +1 -1
- package/dist/components/filterBar/FilterBar.stories.d.ts +1 -1
- package/dist/components/icon/Icon.d.ts +1 -1
- package/dist/components/icon/Icon.d.ts.map +1 -1
- package/dist/components/icon/Icon.js +1 -1
- package/dist/components/icon/Icon.js.map +1 -1
- package/dist/components/pill/Pill.d.ts +3 -2
- package/dist/components/pill/Pill.d.ts.map +1 -1
- package/dist/components/pill/Pill.js +15 -9
- package/dist/components/pill/Pill.js.map +1 -1
- package/dist/components/pill/Pill.stories.d.ts +21 -3
- package/dist/components/pill/Pill.stories.d.ts.map +1 -1
- package/dist/components/pill/Pill.stories.js +275 -40
- package/dist/components/pill/Pill.stories.js.map +1 -1
- package/dist/components/pill/Pill.test.js +64 -3
- package/dist/components/pill/Pill.test.js.map +1 -1
- package/dist/components/sideNavigation/SideNavigation.d.ts +34 -0
- package/dist/components/sideNavigation/SideNavigation.d.ts.map +1 -0
- package/dist/components/sideNavigation/SideNavigation.js +30 -0
- package/dist/components/sideNavigation/SideNavigation.js.map +1 -0
- package/dist/components/sideNavigation/SideNavigation.stories.d.ts +72 -0
- package/dist/components/sideNavigation/SideNavigation.stories.d.ts.map +1 -0
- package/dist/components/sideNavigation/SideNavigation.stories.js +298 -0
- package/dist/components/sideNavigation/SideNavigation.stories.js.map +1 -0
- package/dist/components/sideNavigation/SideNavigation.test.d.ts +2 -0
- package/dist/components/sideNavigation/SideNavigation.test.d.ts.map +1 -0
- package/dist/components/sideNavigation/SideNavigation.test.js +74 -0
- package/dist/components/sideNavigation/SideNavigation.test.js.map +1 -0
- package/dist/components/sideNavigation/SideNavigationContext.d.ts +10 -0
- package/dist/components/sideNavigation/SideNavigationContext.d.ts.map +1 -0
- package/dist/components/sideNavigation/SideNavigationContext.js +15 -0
- package/dist/components/sideNavigation/SideNavigationContext.js.map +1 -0
- package/dist/components/{sidebarNav/SidebarNavGroup.d.ts → sideNavigation/SideNavigationGroup.d.ts} +3 -3
- package/dist/components/sideNavigation/SideNavigationGroup.d.ts.map +1 -0
- package/dist/components/sideNavigation/SideNavigationGroup.js +16 -0
- package/dist/components/sideNavigation/SideNavigationGroup.js.map +1 -0
- package/dist/components/sideNavigation/SideNavigationGroup.test.d.ts +2 -0
- package/dist/components/sideNavigation/SideNavigationGroup.test.d.ts.map +1 -0
- package/dist/components/sideNavigation/SideNavigationGroup.test.js +58 -0
- package/dist/components/sideNavigation/SideNavigationGroup.test.js.map +1 -0
- package/dist/components/{sidebarNav/SidebarNavItem.d.ts → sideNavigation/SideNavigationItem.d.ts} +11 -12
- package/dist/components/sideNavigation/SideNavigationItem.d.ts.map +1 -0
- package/dist/components/sideNavigation/SideNavigationItem.js +28 -0
- package/dist/components/sideNavigation/SideNavigationItem.js.map +1 -0
- package/dist/components/sideNavigation/SideNavigationItem.test.d.ts +2 -0
- package/dist/components/sideNavigation/SideNavigationItem.test.d.ts.map +1 -0
- package/dist/components/sideNavigation/SideNavigationItem.test.js +65 -0
- package/dist/components/sideNavigation/SideNavigationItem.test.js.map +1 -0
- package/dist/components/sideNavigation/SideNavigationItemFavourite.d.ts +8 -0
- package/dist/components/sideNavigation/SideNavigationItemFavourite.d.ts.map +1 -0
- package/dist/components/{sidebarNav/SidebarNavItemFavourite.js → sideNavigation/SideNavigationItemFavourite.js} +5 -5
- package/dist/components/sideNavigation/SideNavigationItemFavourite.js.map +1 -0
- package/dist/components/sideNavigation/SideNavigationItemFavourite.test.d.ts +2 -0
- package/dist/components/sideNavigation/SideNavigationItemFavourite.test.d.ts.map +1 -0
- package/dist/components/sideNavigation/SideNavigationItemFavourite.test.js +31 -0
- package/dist/components/sideNavigation/SideNavigationItemFavourite.test.js.map +1 -0
- package/dist/components/sideNavigation/SideNavigationTitle.d.ts +4 -0
- package/dist/components/sideNavigation/SideNavigationTitle.d.ts.map +1 -0
- package/dist/components/sideNavigation/SideNavigationTitle.js +7 -0
- package/dist/components/sideNavigation/SideNavigationTitle.js.map +1 -0
- package/dist/components/sideNavigation/SideNavigationTitle.test.d.ts +2 -0
- package/dist/components/sideNavigation/SideNavigationTitle.test.d.ts.map +1 -0
- package/dist/components/sideNavigation/SideNavigationTitle.test.js +22 -0
- package/dist/components/sideNavigation/SideNavigationTitle.test.js.map +1 -0
- package/dist/components/sideNavigation/SideNavigationTooltip.d.ts +7 -0
- package/dist/components/sideNavigation/SideNavigationTooltip.d.ts.map +1 -0
- package/dist/components/{sidebarNav/SidebarNavTooltip.js → sideNavigation/SideNavigationTooltip.js} +2 -2
- package/dist/components/sideNavigation/SideNavigationTooltip.js.map +1 -0
- package/dist/components/sideNavigation/SideNavigationTooltip.test.d.ts +2 -0
- package/dist/components/sideNavigation/SideNavigationTooltip.test.d.ts.map +1 -0
- package/dist/components/sideNavigation/SideNavigationTooltip.test.js +26 -0
- package/dist/components/sideNavigation/SideNavigationTooltip.test.js.map +1 -0
- package/dist/components/sideNavigation/resolvePanelItemProps.d.ts +4 -0
- package/dist/components/sideNavigation/resolvePanelItemProps.d.ts.map +1 -0
- package/dist/components/{sidebarNav → sideNavigation}/resolvePanelItemProps.js +5 -4
- package/dist/components/sideNavigation/resolvePanelItemProps.js.map +1 -0
- package/dist/components/sideNavigation/resolvePanelItemProps.test.d.ts.map +1 -0
- package/dist/components/{sidebarNav → sideNavigation}/resolvePanelItemProps.test.js +18 -4
- package/dist/components/sideNavigation/resolvePanelItemProps.test.js.map +1 -0
- package/dist/components/sideNavigation/types.d.ts +47 -0
- package/dist/components/sideNavigation/types.d.ts.map +1 -0
- package/dist/components/sideNavigation/types.js +2 -0
- package/dist/components/sideNavigation/types.js.map +1 -0
- package/dist/components/sidebar/Sidebar.d.ts +13 -0
- package/dist/components/sidebar/Sidebar.d.ts.map +1 -0
- package/dist/components/sidebar/Sidebar.js +9 -0
- package/dist/components/sidebar/Sidebar.js.map +1 -0
- package/dist/components/sidebar/Sidebar.stories.d.ts +48 -0
- package/dist/components/sidebar/Sidebar.stories.d.ts.map +1 -0
- package/dist/components/sidebar/Sidebar.stories.js +444 -0
- package/dist/components/sidebar/Sidebar.stories.js.map +1 -0
- package/dist/components/sidebar/Sidebar.test.d.ts +2 -0
- package/dist/components/sidebar/Sidebar.test.d.ts.map +1 -0
- package/dist/components/sidebar/Sidebar.test.js +81 -0
- package/dist/components/sidebar/Sidebar.test.js.map +1 -0
- package/dist/components/sidebar/SidebarItem.d.ts +7 -0
- package/dist/components/sidebar/SidebarItem.d.ts.map +1 -0
- package/dist/components/sidebar/SidebarItem.js +11 -0
- package/dist/components/sidebar/SidebarItem.js.map +1 -0
- package/dist/components/singleUser/SingleUser.d.ts +1 -1
- package/dist/components/tabs/TabsItem.stories.d.ts +2 -2
- package/dist/components/toast/Toast.d.ts +11 -2
- package/dist/components/toast/Toast.d.ts.map +1 -1
- package/dist/components/toast/Toast.js +5 -3
- package/dist/components/toast/Toast.js.map +1 -1
- package/dist/components/toast/Toast.stories.d.ts +15 -3
- package/dist/components/toast/Toast.stories.d.ts.map +1 -1
- package/dist/components/toast/Toast.stories.js +43 -41
- package/dist/components/toast/Toast.stories.js.map +1 -1
- package/dist/components/toast/Toast.test.js +19 -4
- package/dist/components/toast/Toast.test.js.map +1 -1
- package/dist/components/toast/ToastAction.d.ts +7 -0
- package/dist/components/toast/ToastAction.d.ts.map +1 -0
- package/dist/components/toast/ToastAction.js +9 -0
- package/dist/components/toast/ToastAction.js.map +1 -0
- package/dist/components/tooltip/TooltipWrapper.d.ts +1 -0
- package/dist/components/tooltip/TooltipWrapper.d.ts.map +1 -1
- package/dist/components/tooltip/TooltipWrapper.js +2 -2
- package/dist/components/tooltip/TooltipWrapper.js.map +1 -1
- package/dist/components/widget/Widget.d.ts +18 -0
- package/dist/components/widget/Widget.d.ts.map +1 -0
- package/dist/components/widget/Widget.js +51 -0
- package/dist/components/widget/Widget.js.map +1 -0
- package/dist/components/widget/Widget.stories.d.ts +128 -0
- package/dist/components/widget/Widget.stories.d.ts.map +1 -0
- package/dist/components/widget/Widget.stories.js +417 -0
- package/dist/components/widget/Widget.stories.js.map +1 -0
- package/dist/components/widget/Widget.test.d.ts +2 -0
- package/dist/components/widget/Widget.test.d.ts.map +1 -0
- package/dist/components/widget/Widget.test.js +110 -0
- package/dist/components/widget/Widget.test.js.map +1 -0
- package/dist/components/widget/WidgetBody.d.ts +6 -0
- package/dist/components/widget/WidgetBody.d.ts.map +1 -0
- package/dist/components/widget/WidgetBody.js +20 -0
- package/dist/components/widget/WidgetBody.js.map +1 -0
- package/dist/components/widget/WidgetContext.d.ts +20 -0
- package/dist/components/widget/WidgetContext.d.ts.map +1 -0
- package/dist/components/widget/WidgetContext.js +10 -0
- package/dist/components/widget/WidgetContext.js.map +1 -0
- package/dist/components/widget/WidgetHeader.d.ts +8 -0
- package/dist/components/widget/WidgetHeader.d.ts.map +1 -0
- package/dist/components/widget/WidgetHeader.js +56 -0
- package/dist/components/widget/WidgetHeader.js.map +1 -0
- package/dist/components/widget/types.d.ts +43 -0
- package/dist/components/widget/types.d.ts.map +1 -0
- package/dist/components/widget/types.js +2 -0
- package/dist/components/widget/types.js.map +1 -0
- package/dist/components/widgetCalendar/WidgetCalendar.d.ts +35 -0
- package/dist/components/widgetCalendar/WidgetCalendar.d.ts.map +1 -0
- package/dist/components/widgetCalendar/WidgetCalendar.js +22 -0
- package/dist/components/widgetCalendar/WidgetCalendar.js.map +1 -0
- package/dist/components/widgetCalendar/WidgetCalendar.stories.d.ts +60 -0
- package/dist/components/widgetCalendar/WidgetCalendar.stories.d.ts.map +1 -0
- package/dist/components/widgetCalendar/WidgetCalendar.stories.js +140 -0
- package/dist/components/widgetCalendar/WidgetCalendar.stories.js.map +1 -0
- package/dist/components/widgetCalendar/WidgetCalendar.test.d.ts +2 -0
- package/dist/components/widgetCalendar/WidgetCalendar.test.d.ts.map +1 -0
- package/dist/components/widgetCalendar/WidgetCalendar.test.js +88 -0
- package/dist/components/widgetCalendar/WidgetCalendar.test.js.map +1 -0
- package/dist/components/widgetCalendar/WidgetCalendarItem.d.ts +17 -0
- package/dist/components/widgetCalendar/WidgetCalendarItem.d.ts.map +1 -0
- package/dist/components/widgetCalendar/WidgetCalendarItem.js +25 -0
- package/dist/components/widgetCalendar/WidgetCalendarItem.js.map +1 -0
- package/dist/components/widgetFavourites/WidgetFavourites.d.ts +12 -0
- package/dist/components/widgetFavourites/WidgetFavourites.d.ts.map +1 -0
- package/dist/components/widgetFavourites/WidgetFavourites.js +23 -0
- package/dist/components/widgetFavourites/WidgetFavourites.js.map +1 -0
- package/dist/components/widgetFavourites/WidgetFavourites.stories.d.ts +84 -0
- package/dist/components/widgetFavourites/WidgetFavourites.stories.d.ts.map +1 -0
- package/dist/components/widgetFavourites/WidgetFavourites.stories.js +210 -0
- package/dist/components/widgetFavourites/WidgetFavourites.stories.js.map +1 -0
- package/dist/components/widgetFavourites/WidgetFavourites.test.d.ts +2 -0
- package/dist/components/widgetFavourites/WidgetFavourites.test.d.ts.map +1 -0
- package/dist/components/widgetFavourites/WidgetFavourites.test.js +67 -0
- package/dist/components/widgetFavourites/WidgetFavourites.test.js.map +1 -0
- package/dist/components/widgetFavourites/WidgetFavouritesItem.d.ts +3 -0
- package/dist/components/widgetFavourites/WidgetFavouritesItem.d.ts.map +1 -0
- package/dist/components/widgetFavourites/WidgetFavouritesItem.js +10 -0
- package/dist/components/widgetFavourites/WidgetFavouritesItem.js.map +1 -0
- package/dist/components/widgetFavourites/types.d.ts +25 -0
- package/dist/components/widgetFavourites/types.d.ts.map +1 -0
- package/dist/components/widgetFavourites/types.js +2 -0
- package/dist/components/widgetFavourites/types.js.map +1 -0
- package/dist/components/widgetNotifications/WidgetNotifications.d.ts +33 -0
- package/dist/components/widgetNotifications/WidgetNotifications.d.ts.map +1 -0
- package/dist/components/widgetNotifications/WidgetNotifications.js +18 -0
- package/dist/components/widgetNotifications/WidgetNotifications.js.map +1 -0
- package/dist/components/widgetNotifications/WidgetNotifications.stories.d.ts +60 -0
- package/dist/components/widgetNotifications/WidgetNotifications.stories.d.ts.map +1 -0
- package/dist/components/widgetNotifications/WidgetNotifications.stories.js +269 -0
- package/dist/components/widgetNotifications/WidgetNotifications.stories.js.map +1 -0
- package/dist/components/widgetNotifications/WidgetNotifications.test.d.ts +2 -0
- package/dist/components/widgetNotifications/WidgetNotifications.test.d.ts.map +1 -0
- package/dist/components/widgetNotifications/WidgetNotifications.test.js +79 -0
- package/dist/components/widgetNotifications/WidgetNotifications.test.js.map +1 -0
- package/dist/components/widgetNotifications/WidgetNotificationsItem.d.ts +14 -0
- package/dist/components/widgetNotifications/WidgetNotificationsItem.d.ts.map +1 -0
- package/dist/components/widgetNotifications/WidgetNotificationsItem.js +14 -0
- package/dist/components/widgetNotifications/WidgetNotificationsItem.js.map +1 -0
- package/dist/index.css +756 -78
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +15 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -8
- package/dist/index.js.map +1 -1
- package/dist/utils/favourites/favouriteConstants.d.ts +12 -0
- package/dist/utils/favourites/favouriteConstants.d.ts.map +1 -0
- package/dist/utils/favourites/favouriteConstants.js +16 -0
- package/dist/utils/favourites/favouriteConstants.js.map +1 -0
- package/dist/utils/favourites/favouriteConstants.test.d.ts +2 -0
- package/dist/utils/favourites/favouriteConstants.test.d.ts.map +1 -0
- package/dist/utils/favourites/favouriteConstants.test.js +12 -0
- package/dist/utils/favourites/favouriteConstants.test.js.map +1 -0
- package/dist/utils/hooks/useControllableBoolean.d.ts.map +1 -0
- package/dist/utils/hooks/useControllableBoolean.js.map +1 -0
- package/dist/utils/hooks/useControllableBoolean.test.d.ts +2 -0
- package/dist/utils/hooks/useControllableBoolean.test.d.ts.map +1 -0
- package/dist/utils/hooks/useControllableBoolean.test.js +34 -0
- package/dist/utils/hooks/useControllableBoolean.test.js.map +1 -0
- package/package.json +1 -1
- package/src/components/emptyState/EmptyState.stories.tsx +487 -0
- package/src/components/emptyState/EmptyState.test.tsx +140 -0
- package/src/components/emptyState/EmptyState.tsx +84 -0
- package/src/components/emptyState/emptyState.scss +63 -0
- package/src/components/favourite/FavouriteButton.test.tsx +83 -0
- package/src/components/favourite/FavouriteButton.tsx +70 -0
- package/src/components/favourite/favouriteButton.scss +37 -0
- package/src/components/icon/Icon.tsx +2 -2
- package/src/components/link/link.scss +26 -0
- package/src/components/pill/Pill.stories.tsx +432 -41
- package/src/components/pill/Pill.test.tsx +74 -3
- package/src/components/pill/Pill.tsx +26 -11
- package/src/components/sideNavigation/SideNavigation.stories.tsx +578 -0
- package/src/components/sideNavigation/SideNavigation.test.tsx +109 -0
- package/src/components/sideNavigation/SideNavigation.tsx +98 -0
- package/src/components/sideNavigation/SideNavigationContext.tsx +25 -0
- package/src/components/sideNavigation/SideNavigationGroup.test.tsx +103 -0
- package/src/components/{sidebarNav/SidebarNavGroup.tsx → sideNavigation/SideNavigationGroup.tsx} +8 -8
- package/src/components/sideNavigation/SideNavigationItem.test.tsx +137 -0
- package/src/components/sideNavigation/SideNavigationItem.tsx +125 -0
- package/src/components/sideNavigation/SideNavigationItemFavourite.test.tsx +54 -0
- package/src/components/{sidebarNav/SidebarNavItemFavourite.tsx → sideNavigation/SideNavigationItemFavourite.tsx} +7 -7
- package/src/components/sideNavigation/SideNavigationTitle.test.tsx +23 -0
- package/src/components/sideNavigation/SideNavigationTitle.tsx +13 -0
- package/src/components/sideNavigation/SideNavigationTooltip.test.tsx +44 -0
- package/src/components/{sidebarNav/SidebarNavTooltip.tsx → sideNavigation/SideNavigationTooltip.tsx} +2 -2
- package/src/components/{sidebarNav → sideNavigation}/resolvePanelItemProps.test.ts +20 -4
- package/src/components/{sidebarNav → sideNavigation}/resolvePanelItemProps.ts +8 -7
- package/src/components/{sidebarNav/sidebarNav.scss → sideNavigation/sideNavigation.scss} +37 -136
- package/src/components/sideNavigation/types.ts +56 -0
- package/src/components/sidebar/Sidebar.stories.tsx +670 -0
- package/src/components/sidebar/Sidebar.test.tsx +155 -0
- package/src/components/sidebar/Sidebar.tsx +27 -0
- package/src/components/sidebar/SidebarItem.tsx +64 -0
- package/src/components/sidebar/sidebar.scss +65 -0
- package/src/components/toast/Toast.stories.tsx +75 -67
- package/src/components/toast/Toast.test.tsx +40 -10
- package/src/components/toast/Toast.tsx +19 -5
- package/src/components/toast/ToastAction.tsx +17 -0
- package/src/components/toast/toast.scss +37 -0
- package/src/components/tooltip/TooltipWrapper.tsx +3 -1
- package/src/components/widget/Widget.stories.tsx +600 -0
- package/src/components/widget/Widget.test.tsx +263 -0
- package/src/components/widget/Widget.tsx +102 -0
- package/src/components/widget/WidgetBody.tsx +66 -0
- package/src/components/widget/WidgetContext.tsx +31 -0
- package/src/components/widget/WidgetHeader.tsx +155 -0
- package/src/components/widget/types.ts +47 -0
- package/src/components/widget/widget.scss +218 -0
- package/src/components/widgetCalendar/WidgetCalendar.stories.tsx +241 -0
- package/src/components/widgetCalendar/WidgetCalendar.test.tsx +137 -0
- package/src/components/widgetCalendar/WidgetCalendar.tsx +105 -0
- package/src/components/widgetCalendar/WidgetCalendarItem.tsx +105 -0
- package/src/components/widgetCalendar/widgetCalendar.scss +124 -0
- package/src/components/widgetFavourites/WidgetFavourites.stories.tsx +341 -0
- package/src/components/widgetFavourites/WidgetFavourites.test.tsx +127 -0
- package/src/components/widgetFavourites/WidgetFavourites.tsx +83 -0
- package/src/components/widgetFavourites/WidgetFavouritesItem.tsx +37 -0
- package/src/components/widgetFavourites/types.ts +26 -0
- package/src/components/widgetFavourites/widgetFavourites.scss +84 -0
- package/src/components/widgetNotifications/WidgetNotifications.stories.tsx +417 -0
- package/src/components/widgetNotifications/WidgetNotifications.test.tsx +152 -0
- package/src/components/widgetNotifications/WidgetNotifications.tsx +112 -0
- package/src/components/widgetNotifications/WidgetNotificationsItem.tsx +88 -0
- package/src/components/widgetNotifications/widgetNotifications.scss +186 -0
- package/src/docs/Contributing.mdx +1 -1
- package/src/index.scss +9 -1
- package/src/index.ts +22 -18
- package/src/tokens.scss +12 -2
- package/src/utils/favourites/favouriteConstants.test.ts +19 -0
- package/src/utils/favourites/favouriteConstants.ts +21 -0
- package/src/utils/hooks/useControllableBoolean.test.ts +48 -0
- package/dist/components/sidebarNav/SidebarNav.d.ts +0 -46
- package/dist/components/sidebarNav/SidebarNav.d.ts.map +0 -1
- package/dist/components/sidebarNav/SidebarNav.js +0 -102
- package/dist/components/sidebarNav/SidebarNav.js.map +0 -1
- package/dist/components/sidebarNav/SidebarNav.stories.d.ts +0 -61
- package/dist/components/sidebarNav/SidebarNav.stories.d.ts.map +0 -1
- package/dist/components/sidebarNav/SidebarNav.stories.js +0 -253
- package/dist/components/sidebarNav/SidebarNav.stories.js.map +0 -1
- package/dist/components/sidebarNav/SidebarNav.test.d.ts +0 -2
- package/dist/components/sidebarNav/SidebarNav.test.d.ts.map +0 -1
- package/dist/components/sidebarNav/SidebarNav.test.js +0 -240
- package/dist/components/sidebarNav/SidebarNav.test.js.map +0 -1
- package/dist/components/sidebarNav/SidebarNavContext.d.ts +0 -13
- package/dist/components/sidebarNav/SidebarNavContext.d.ts.map +0 -1
- package/dist/components/sidebarNav/SidebarNavContext.js +0 -15
- package/dist/components/sidebarNav/SidebarNavContext.js.map +0 -1
- package/dist/components/sidebarNav/SidebarNavGroup.d.ts.map +0 -1
- package/dist/components/sidebarNav/SidebarNavGroup.js +0 -16
- package/dist/components/sidebarNav/SidebarNavGroup.js.map +0 -1
- package/dist/components/sidebarNav/SidebarNavItem.d.ts.map +0 -1
- package/dist/components/sidebarNav/SidebarNavItem.js +0 -44
- package/dist/components/sidebarNav/SidebarNavItem.js.map +0 -1
- package/dist/components/sidebarNav/SidebarNavItemFavourite.d.ts +0 -8
- package/dist/components/sidebarNav/SidebarNavItemFavourite.d.ts.map +0 -1
- package/dist/components/sidebarNav/SidebarNavItemFavourite.js.map +0 -1
- package/dist/components/sidebarNav/SidebarNavPanel.d.ts +0 -4
- package/dist/components/sidebarNav/SidebarNavPanel.d.ts.map +0 -1
- package/dist/components/sidebarNav/SidebarNavPanel.js +0 -9
- package/dist/components/sidebarNav/SidebarNavPanel.js.map +0 -1
- package/dist/components/sidebarNav/SidebarNavPanelNav.d.ts +0 -10
- package/dist/components/sidebarNav/SidebarNavPanelNav.d.ts.map +0 -1
- package/dist/components/sidebarNav/SidebarNavPanelNav.js +0 -21
- package/dist/components/sidebarNav/SidebarNavPanelNav.js.map +0 -1
- package/dist/components/sidebarNav/SidebarNavRail.d.ts +0 -6
- package/dist/components/sidebarNav/SidebarNavRail.d.ts.map +0 -1
- package/dist/components/sidebarNav/SidebarNavRail.js +0 -7
- package/dist/components/sidebarNav/SidebarNavRail.js.map +0 -1
- package/dist/components/sidebarNav/SidebarNavRailItem.d.ts +0 -10
- package/dist/components/sidebarNav/SidebarNavRailItem.d.ts.map +0 -1
- package/dist/components/sidebarNav/SidebarNavRailItem.js +0 -25
- package/dist/components/sidebarNav/SidebarNavRailItem.js.map +0 -1
- package/dist/components/sidebarNav/SidebarNavRailList.d.ts +0 -4
- package/dist/components/sidebarNav/SidebarNavRailList.d.ts.map +0 -1
- package/dist/components/sidebarNav/SidebarNavRailList.js +0 -7
- package/dist/components/sidebarNav/SidebarNavRailList.js.map +0 -1
- package/dist/components/sidebarNav/SidebarNavRailSlot.d.ts +0 -6
- package/dist/components/sidebarNav/SidebarNavRailSlot.d.ts.map +0 -1
- package/dist/components/sidebarNav/SidebarNavRailSlot.js +0 -7
- package/dist/components/sidebarNav/SidebarNavRailSlot.js.map +0 -1
- package/dist/components/sidebarNav/SidebarNavSeparator.d.ts +0 -6
- package/dist/components/sidebarNav/SidebarNavSeparator.d.ts.map +0 -1
- package/dist/components/sidebarNav/SidebarNavSeparator.js +0 -8
- package/dist/components/sidebarNav/SidebarNavSeparator.js.map +0 -1
- package/dist/components/sidebarNav/SidebarNavTitle.d.ts +0 -4
- package/dist/components/sidebarNav/SidebarNavTitle.d.ts.map +0 -1
- package/dist/components/sidebarNav/SidebarNavTitle.js +0 -7
- package/dist/components/sidebarNav/SidebarNavTitle.js.map +0 -1
- package/dist/components/sidebarNav/SidebarNavTooltip.d.ts +0 -7
- package/dist/components/sidebarNav/SidebarNavTooltip.d.ts.map +0 -1
- package/dist/components/sidebarNav/SidebarNavTooltip.js.map +0 -1
- package/dist/components/sidebarNav/SidebarNavTrigger.d.ts +0 -8
- package/dist/components/sidebarNav/SidebarNavTrigger.d.ts.map +0 -1
- package/dist/components/sidebarNav/SidebarNavTrigger.js +0 -15
- package/dist/components/sidebarNav/SidebarNavTrigger.js.map +0 -1
- package/dist/components/sidebarNav/index.d.ts +0 -4
- package/dist/components/sidebarNav/index.d.ts.map +0 -1
- package/dist/components/sidebarNav/index.js +0 -3
- package/dist/components/sidebarNav/index.js.map +0 -1
- package/dist/components/sidebarNav/resolvePanelItemProps.d.ts +0 -4
- package/dist/components/sidebarNav/resolvePanelItemProps.d.ts.map +0 -1
- package/dist/components/sidebarNav/resolvePanelItemProps.js.map +0 -1
- package/dist/components/sidebarNav/resolvePanelItemProps.test.d.ts.map +0 -1
- package/dist/components/sidebarNav/resolvePanelItemProps.test.js.map +0 -1
- package/dist/components/sidebarNav/types.d.ts +0 -100
- package/dist/components/sidebarNav/types.d.ts.map +0 -1
- package/dist/components/sidebarNav/types.js +0 -4
- package/dist/components/sidebarNav/types.js.map +0 -1
- package/dist/components/sidebarNav/useControllableBoolean.d.ts.map +0 -1
- package/dist/components/sidebarNav/useControllableBoolean.js.map +0 -1
- package/src/components/sidebarNav/SidebarNav.stories.tsx +0 -484
- package/src/components/sidebarNav/SidebarNav.test.tsx +0 -611
- package/src/components/sidebarNav/SidebarNav.tsx +0 -230
- package/src/components/sidebarNav/SidebarNavContext.tsx +0 -28
- package/src/components/sidebarNav/SidebarNavItem.tsx +0 -162
- package/src/components/sidebarNav/SidebarNavPanel.tsx +0 -20
- package/src/components/sidebarNav/SidebarNavPanelNav.tsx +0 -55
- package/src/components/sidebarNav/SidebarNavRail.tsx +0 -20
- package/src/components/sidebarNav/SidebarNavRailItem.tsx +0 -83
- package/src/components/sidebarNav/SidebarNavRailList.tsx +0 -11
- package/src/components/sidebarNav/SidebarNavRailSlot.tsx +0 -15
- package/src/components/sidebarNav/SidebarNavSeparator.tsx +0 -19
- package/src/components/sidebarNav/SidebarNavTitle.tsx +0 -13
- package/src/components/sidebarNav/SidebarNavTrigger.tsx +0 -52
- package/src/components/sidebarNav/index.ts +0 -6
- package/src/components/sidebarNav/types.ts +0 -126
- /package/dist/components/{sidebarNav → sideNavigation}/resolvePanelItemProps.test.d.ts +0 -0
- /package/dist/{components/sidebarNav → utils/hooks}/useControllableBoolean.d.ts +0 -0
- /package/dist/{components/sidebarNav → utils/hooks}/useControllableBoolean.js +0 -0
- /package/src/{components/sidebarNav → utils/hooks}/useControllableBoolean.ts +0 -0
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Controls, Heading as DocHeading, Primary as DocPrimary, Markdown, Stories, Subtitle, Title, } from '@storybook/addon-docs/blocks';
|
|
3
|
+
import { Button } from '../button/Button.js';
|
|
4
|
+
import { Icon } from '../icon/Icon.js';
|
|
5
|
+
import { useState } from 'react';
|
|
6
|
+
import { Sidebar } from '../sidebar/Sidebar.js';
|
|
7
|
+
import { SidebarItem } from '../sidebar/SidebarItem.js';
|
|
8
|
+
import { SideNavigation } from './SideNavigation.js';
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Docs page content
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
const DESCRIPTION_INTRO = [
|
|
13
|
+
'SideNavigation is a labelled navigation panel — the companion to the separate icon-only `Sidebar` rail.',
|
|
14
|
+
'Where `Sidebar` is a slim column of icon-only top-level destinations, `SideNavigation` is the fuller panel',
|
|
15
|
+
'that shows readable labels, nested groups, and per-item "favourite" stars.',
|
|
16
|
+
'',
|
|
17
|
+
'SideNavigation supports two mutually exclusive APIs:',
|
|
18
|
+
'',
|
|
19
|
+
'1. **Data-driven** — pass an `items` array of `SideNavigation.Node` objects and let the component render the tree.',
|
|
20
|
+
'2. **Composable** — build the tree yourself from `SideNavigation.Title`, `SideNavigation.Group`, and',
|
|
21
|
+
' `SideNavigation.Item` as JSX children.',
|
|
22
|
+
'',
|
|
23
|
+
'> **`items` and `children` are mutually exclusive.** If both are passed, `items` silently wins and `children`',
|
|
24
|
+
'> is dropped entirely — no warning, no error.',
|
|
25
|
+
'',
|
|
26
|
+
'> **Built on [Radix UI Tooltip](https://www.radix-ui.com/primitives/docs/components/tooltip).**',
|
|
27
|
+
'> The whole tree is wrapped in a `Tooltip.Provider` internally so the favourite-star buttons can show their',
|
|
28
|
+
'> tooltips without any extra setup.',
|
|
29
|
+
].join('\n');
|
|
30
|
+
const USAGE_GUIDANCE = [
|
|
31
|
+
'### When to use',
|
|
32
|
+
'',
|
|
33
|
+
'- **Persistent navigation with readable labels** — school registers, reports, settings sub-pages',
|
|
34
|
+
'- **Grouped destinations** — related links nested under a collapsible, labelled group',
|
|
35
|
+
'- **Favouritable destinations** — let users pin frequently-used pages for quick access',
|
|
36
|
+
'- **Alongside the icon-only `Sidebar` rail** — as the detail panel that opens once a rail item is selected',
|
|
37
|
+
'',
|
|
38
|
+
'---',
|
|
39
|
+
'',
|
|
40
|
+
'### When NOT to use',
|
|
41
|
+
'',
|
|
42
|
+
'| Situation | Use instead |',
|
|
43
|
+
'|---|---|',
|
|
44
|
+
'| Switching between views of the *same* page content | [`Tabs`](?path=/docs/components-tabs--docs) |',
|
|
45
|
+
'| Compact, on-demand action menu | [`Dropdown`](?path=/docs/components-dropdown--docs) |',
|
|
46
|
+
'| Top-level icon-only rail with a handful of destinations | [`Sidebar`](?path=/docs/components-sidebar--docs) |',
|
|
47
|
+
'| A single flat list with no grouping or favouriting | A plain `<nav>` with a `<ul>` may be simpler |',
|
|
48
|
+
].join('\n');
|
|
49
|
+
const PROPS_INTRO = 'The preview below is wired to the **Controls** panel — tweak any prop to see the story update in real time.';
|
|
50
|
+
const DEVELOPER_NOTES = [
|
|
51
|
+
'### Critical usage patterns',
|
|
52
|
+
'',
|
|
53
|
+
'**`items` and `children` are mutually exclusive.** Passing both means `children` is silently discarded in',
|
|
54
|
+
'favour of `items` — there is no runtime warning. Pick one API per instance.',
|
|
55
|
+
'',
|
|
56
|
+
'**`itemId` is required and load-bearing.** It drives `data-testid="side-navigation-item-{itemId}"` on the',
|
|
57
|
+
'list item, and `data-testid="side-navigation-item-favourite-{itemId}"` on the favourite button when',
|
|
58
|
+
'`canFavourite` is set.',
|
|
59
|
+
'',
|
|
60
|
+
'**`canFavourite: true` requires `favouriteTooltip`** via a TypeScript discriminated union — the compiler',
|
|
61
|
+
'enforces this before you ever open a browser.',
|
|
62
|
+
'',
|
|
63
|
+
'**Favourite clicks never bubble to the parent link/button.** `SideNavigationItemFavourite` calls',
|
|
64
|
+
'`stopPropagation` and `preventDefault` internally, so favouriting an item never triggers navigation.',
|
|
65
|
+
'',
|
|
66
|
+
'**`aria-current="page"` applies on both link and button item variants** when `current` is true — it is not',
|
|
67
|
+
'a link-only affordance.',
|
|
68
|
+
'',
|
|
69
|
+
'**`renderLink` is root-level only.** It is configured once on `<SideNavigation>` and threaded to every',
|
|
70
|
+
'descendant item via context. There is no per-item override.',
|
|
71
|
+
'',
|
|
72
|
+
'**Groups can be controlled or uncontrolled.** Pass `expanded` + `onExpandedChange` for controlled state,',
|
|
73
|
+
'or `defaultExpanded` (default `false`) for uncontrolled.',
|
|
74
|
+
'',
|
|
75
|
+
'**Known limitation — nested indentation does not deepen per level.** The CSS rule for items inside a group',
|
|
76
|
+
'reasserts the *same* `padding-left` value as a top-level item, rather than adding to it — an item nested two',
|
|
77
|
+
'groups deep sits at the same indent as an item nested one group deep. See the NestedIndentationLimitation',
|
|
78
|
+
'story for a faithful demonstration; do not attempt to "fix" this locally with inline padding.',
|
|
79
|
+
'',
|
|
80
|
+
'**The current-item highlight uses base brand tokens, not semantic ones.** `--color-brand-050`/',
|
|
81
|
+
'`--color-brand-800` is a proper AA-safe pairing, but this design system does not yet have a semantic',
|
|
82
|
+
'"selected" token family to reach for instead.',
|
|
83
|
+
'',
|
|
84
|
+
'---',
|
|
85
|
+
'',
|
|
86
|
+
'### Accessibility',
|
|
87
|
+
'',
|
|
88
|
+
'- The root renders a `<nav aria-label>` (default `"Side navigation"`) — override with a meaningful value',
|
|
89
|
+
' when a page has more than one nav landmark',
|
|
90
|
+
'- Groups render `aria-expanded` + `aria-controls` on the toggle button, with a genuinely `aria-hidden`',
|
|
91
|
+
' child list when collapsed',
|
|
92
|
+
'- The favourite button exposes `aria-pressed` and uses `favouriteTooltip` as its `aria-label` — the tooltip',
|
|
93
|
+
' text doubles as the sole accessible name for the icon-only button',
|
|
94
|
+
'- `aria-current="page"` marks the active destination on both link and button item variants',
|
|
95
|
+
'',
|
|
96
|
+
'---',
|
|
97
|
+
'',
|
|
98
|
+
'### TypeScript types',
|
|
99
|
+
'',
|
|
100
|
+
'```ts',
|
|
101
|
+
"import { SideNavigation } from '@arbor-education/design-system.components';",
|
|
102
|
+
'',
|
|
103
|
+
'function MyPanel(props: SideNavigation.Props) { ... }',
|
|
104
|
+
'```',
|
|
105
|
+
'',
|
|
106
|
+
'| Type | Description |',
|
|
107
|
+
'|---|---|',
|
|
108
|
+
'| `SideNavigation.Props` | Root component props |',
|
|
109
|
+
'| `SideNavigation.GroupProps` | `SideNavigation.Group` props |',
|
|
110
|
+
'| `SideNavigation.ItemProps` | `SideNavigation.Item` props |',
|
|
111
|
+
'| `SideNavigation.TitleProps` | `SideNavigation.Title` props |',
|
|
112
|
+
'| `SideNavigation.Node` | Data-driven `items` array element (item or group) |',
|
|
113
|
+
'| `SideNavigation.ItemNode` | Data-driven leaf item node |',
|
|
114
|
+
'| `SideNavigation.GroupNode` | Data-driven group node |',
|
|
115
|
+
'| `SideNavigation.RenderLinkArgs` | Shape passed to a `renderLink` function |',
|
|
116
|
+
].join('\n');
|
|
117
|
+
const RELATED_COMPONENTS = [
|
|
118
|
+
'## Related components',
|
|
119
|
+
'',
|
|
120
|
+
'[Sidebar](?path=/docs/components-sidebar--docs) — the companion icon-only navigation rail SideNavigation',
|
|
121
|
+
'typically sits alongside · [Tooltip](?path=/docs/components-tooltip--docs) — powers the favourite button\'s',
|
|
122
|
+
'tooltip internally',
|
|
123
|
+
].join('\n');
|
|
124
|
+
function SideNavigationDocsPage() {
|
|
125
|
+
return (_jsxs(_Fragment, { children: [_jsx(Title, {}), _jsx(Subtitle, {}), _jsx(Markdown, { children: DESCRIPTION_INTRO }), _jsx(DocHeading, { children: "Interactive example" }), _jsx(Markdown, { children: PROPS_INTRO }), _jsx(DocPrimary, {}), _jsx(Controls, {}), _jsx(DocHeading, { children: "Usage guidance" }), _jsx(Markdown, { children: USAGE_GUIDANCE }), _jsx(DocHeading, { children: "Developer notes" }), _jsx(Markdown, { children: DEVELOPER_NOTES }), _jsx(DocHeading, { children: "Examples" }), _jsx(Stories, { title: "" }), _jsx(Markdown, { children: RELATED_COMPONENTS })] }));
|
|
126
|
+
}
|
|
127
|
+
const meta = {
|
|
128
|
+
title: 'Components/SideNavigation',
|
|
129
|
+
component: SideNavigation,
|
|
130
|
+
parameters: {
|
|
131
|
+
layout: 'padded',
|
|
132
|
+
docs: { page: SideNavigationDocsPage },
|
|
133
|
+
},
|
|
134
|
+
tags: ['autodocs'],
|
|
135
|
+
argTypes: {
|
|
136
|
+
ariaLabel: {
|
|
137
|
+
control: 'text',
|
|
138
|
+
description: 'Accessible label for the `<nav>` landmark.',
|
|
139
|
+
table: { type: { summary: 'string' }, defaultValue: { summary: '"Side navigation"' } },
|
|
140
|
+
},
|
|
141
|
+
items: {
|
|
142
|
+
control: false,
|
|
143
|
+
description: [
|
|
144
|
+
'Data-driven tree of `SideNavigationNode` objects (item and group nodes).',
|
|
145
|
+
'Mutually exclusive with `children` — if both are supplied, `items` wins and `children` is silently dropped.',
|
|
146
|
+
].join(' '),
|
|
147
|
+
table: { type: { summary: 'SideNavigationNode[]' } },
|
|
148
|
+
},
|
|
149
|
+
renderLink: {
|
|
150
|
+
control: false,
|
|
151
|
+
description: [
|
|
152
|
+
'Render-prop for swapping the internal `<a>` for a router-aware Link component.',
|
|
153
|
+
'Configured once at the root and shared by every descendant item via context — there is no per-item override.',
|
|
154
|
+
].join(' '),
|
|
155
|
+
table: { type: { summary: '(args: SideNavigationRenderLinkArgs) => React.ReactElement' } },
|
|
156
|
+
},
|
|
157
|
+
children: {
|
|
158
|
+
control: false,
|
|
159
|
+
description: [
|
|
160
|
+
'Composable JSX tree built from `SideNavigation.Title`, `SideNavigation.Group`, and `SideNavigation.Item`.',
|
|
161
|
+
'Mutually exclusive with `items`.',
|
|
162
|
+
].join(' '),
|
|
163
|
+
table: { type: { summary: 'ReactNode' } },
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
export default meta;
|
|
168
|
+
const withDescription = (story, description) => ({
|
|
169
|
+
...story,
|
|
170
|
+
parameters: {
|
|
171
|
+
...story.parameters,
|
|
172
|
+
docs: { ...story.parameters?.docs, description: { story: description } },
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
// ---------------------------------------------------------------------------
|
|
176
|
+
// Shared data
|
|
177
|
+
// ---------------------------------------------------------------------------
|
|
178
|
+
const dataDrivenItems = [
|
|
179
|
+
{ type: 'item', id: 'daily-attendance', label: 'Daily Attendance', href: '#daily-attendance', current: true },
|
|
180
|
+
{ type: 'item', id: 'covid-dashboard', label: 'Covid-19 Dashboard', href: '#covid-dashboard' },
|
|
181
|
+
{ type: 'item', id: 'latecomers', label: 'Latecomers', href: '#latecomers' },
|
|
182
|
+
{ type: 'item', id: 'quick-follow-up', label: 'Quick Follow-Up', href: '#quick-follow-up' },
|
|
183
|
+
];
|
|
184
|
+
// ---------------------------------------------------------------------------
|
|
185
|
+
// Templates
|
|
186
|
+
// ---------------------------------------------------------------------------
|
|
187
|
+
const DefaultTemplate = () => (_jsxs(SideNavigation, { children: [_jsx(SideNavigation.Title, { children: "Attendance" }), _jsx(SideNavigation.Item, { itemId: "daily-attendance", href: "#daily-attendance", current: true, children: "Daily Attendance" }), _jsx(SideNavigation.Item, { itemId: "covid-dashboard", href: "#covid-dashboard", children: "Covid-19 Dashboard" }), _jsx(SideNavigation.Item, { itemId: "latecomers", href: "#latecomers", children: "Latecomers" }), _jsx(SideNavigation.Item, { itemId: "quick-follow-up", href: "#quick-follow-up", children: "Quick Follow-Up" })] }));
|
|
188
|
+
const DataDrivenTemplate = () => (_jsx(SideNavigation, { ariaLabel: "Attendance", items: dataDrivenItems }));
|
|
189
|
+
const WithGroupsTemplate = () => (_jsxs(SideNavigation, { children: [_jsx(SideNavigation.Title, { children: "Registers & Attendance" }), _jsxs(SideNavigation.Group, { label: "Registers", defaultExpanded: true, children: [_jsx(SideNavigation.Item, { itemId: "daily-attendance", href: "#daily-attendance", current: true, children: "Daily Attendance" }), _jsx(SideNavigation.Item, { itemId: "covid-dashboard", href: "#covid-dashboard", children: "Covid-19 Dashboard" })] }), _jsxs(SideNavigation.Group, { label: "Absentees", children: [_jsx(SideNavigation.Item, { itemId: "latecomers", href: "#latecomers", children: "Latecomers" }), _jsx(SideNavigation.Item, { itemId: "statistics", href: "#statistics", children: "Statistics" })] })] }));
|
|
190
|
+
const ControlledGroupExpansionTemplate = () => {
|
|
191
|
+
const [expanded, setExpanded] = useState(false);
|
|
192
|
+
return (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 'var(--spacing-medium)' }, children: [_jsx(Button, { variant: "secondary", size: "S", onClick: () => setExpanded(prev => !prev), children: expanded ? 'Collapse "Absentees" externally' : 'Expand "Absentees" externally' }), _jsxs(SideNavigation, { children: [_jsx(SideNavigation.Title, { children: "Registers & Attendance" }), _jsxs(SideNavigation.Group, { label: "Absentees", expanded: expanded, onExpandedChange: setExpanded, children: [_jsx(SideNavigation.Item, { itemId: "latecomers", href: "#latecomers", children: "Latecomers" }), _jsx(SideNavigation.Item, { itemId: "statistics", href: "#statistics", children: "Statistics" })] })] })] }));
|
|
193
|
+
};
|
|
194
|
+
const interactiveNavItems = [
|
|
195
|
+
{ id: 'daily-attendance', label: 'Daily Attendance' },
|
|
196
|
+
{ id: 'covid-dashboard', label: 'Covid-19 Dashboard' },
|
|
197
|
+
{ id: 'latecomers', label: 'Latecomers' },
|
|
198
|
+
{ id: 'statistics', label: 'Statistics' },
|
|
199
|
+
];
|
|
200
|
+
const InteractiveCurrentItemTemplate = () => {
|
|
201
|
+
const [activeItemId, setActiveItemId] = useState('daily-attendance');
|
|
202
|
+
return (_jsxs(SideNavigation, { children: [_jsx(SideNavigation.Title, { children: "Registers" }), interactiveNavItems.map(item => (_jsx(SideNavigation.Item, { itemId: item.id, linkElement: "button", current: activeItemId === item.id, linkElementProps: { onClick: () => setActiveItemId(item.id) }, children: item.label }, item.id)))] }));
|
|
203
|
+
};
|
|
204
|
+
const FavouritableItemsTemplate = () => {
|
|
205
|
+
const [favourites, setFavourites] = useState({
|
|
206
|
+
'daily-attendance': true,
|
|
207
|
+
'covid-dashboard': false,
|
|
208
|
+
'latecomers': false,
|
|
209
|
+
});
|
|
210
|
+
const toggleFavourite = (id) => {
|
|
211
|
+
setFavourites(prev => ({ ...prev, [id]: !prev[id] }));
|
|
212
|
+
};
|
|
213
|
+
return (_jsxs(SideNavigation, { children: [_jsx(SideNavigation.Title, { children: "Registers" }), _jsx(SideNavigation.Item, { itemId: "daily-attendance", href: "#daily-attendance", canFavourite: true, isPressed: favourites['daily-attendance'], favouriteTooltip: favourites['daily-attendance'] ? 'Remove from favourites' : 'Add to favourites', onFavouriteClick: () => toggleFavourite('daily-attendance'), children: "Daily Attendance" }), _jsx(SideNavigation.Item, { itemId: "covid-dashboard", href: "#covid-dashboard", canFavourite: true, isPressed: favourites['covid-dashboard'], favouriteTooltip: favourites['covid-dashboard'] ? 'Remove from favourites' : 'Add to favourites', onFavouriteClick: () => toggleFavourite('covid-dashboard'), children: "Covid-19 Dashboard" }), _jsx(SideNavigation.Item, { itemId: "latecomers", href: "#latecomers", canFavourite: true, isPressed: favourites.latecomers, favouriteTooltip: favourites.latecomers ? 'Remove from favourites' : 'Add to favourites', onFavouriteClick: () => toggleFavourite('latecomers'), children: "Latecomers" })] }));
|
|
214
|
+
};
|
|
215
|
+
const MixedLinkAndButtonItemsTemplate = () => (_jsxs(SideNavigation, { children: [_jsx(SideNavigation.Title, { children: "My Account" }), _jsx(SideNavigation.Item, { itemId: "settings", href: "#settings", current: true, children: "Settings" }), _jsx(SideNavigation.Item, { itemId: "quick-follow-up", href: "#quick-follow-up", children: "Quick Follow-Up" }), _jsx(SideNavigation.Item, { itemId: "log-out", linkElement: "button", linkElementProps: { onClick: () => { } }, children: "Log out" })] }));
|
|
216
|
+
function MockRouterLink(args) {
|
|
217
|
+
const { href, className, children, ariaCurrent, onClick, linkProps, linkElementProps } = args;
|
|
218
|
+
return (_jsx("a", { href: href, className: className, "aria-current": ariaCurrent, onClick: onClick, "data-mock-router-link": "true", ...linkProps, ...linkElementProps, children: children }));
|
|
219
|
+
}
|
|
220
|
+
const RenderLinkIntegrationTemplate = () => (_jsxs(SideNavigation, { renderLink: args => _jsx(MockRouterLink, { ...args }), children: [_jsx(SideNavigation.Title, { children: "Registers" }), _jsx(SideNavigation.Item, { itemId: "daily-attendance", href: "#daily-attendance", current: true, children: "Daily Attendance" }), _jsx(SideNavigation.Item, { itemId: "covid-dashboard", href: "#covid-dashboard", children: "Covid-19 Dashboard" })] }));
|
|
221
|
+
const NestedIndentationLimitationTemplate = () => (_jsxs(SideNavigation, { children: [_jsx(SideNavigation.Title, { children: "Registers" }), _jsxs(SideNavigation.Group, { label: "Registers", defaultExpanded: true, children: [_jsx(SideNavigation.Item, { itemId: "daily-attendance", href: "#daily-attendance", children: "Daily Attendance (nested one level)" }), _jsxs(SideNavigation.Group, { label: "Absentees", defaultExpanded: true, children: [_jsx(SideNavigation.Item, { itemId: "latecomers", href: "#latecomers", children: "Latecomers (nested two levels)" }), _jsx(SideNavigation.Item, { itemId: "statistics", href: "#statistics", children: "Statistics (nested two levels)" })] })] })] }));
|
|
222
|
+
const WithSidebarRailTemplate = () => (_jsxs("div", { style: { display: 'flex', gap: 'var(--spacing-large)' }, children: [_jsxs(Sidebar, { ariaLabel: "Primary navigation", children: [_jsx(SidebarItem, { href: "#attendance", "aria-label": "Attendance", selected: true, children: _jsx(Icon, { name: "date", size: 24 }) }), _jsx(SidebarItem, { href: "#settings", "aria-label": "Settings", children: _jsx(Icon, { name: "settings", size: 24 }) })] }), _jsxs(SideNavigation, { children: [_jsx(SideNavigation.Title, { children: "Attendance" }), _jsx(SideNavigation.Item, { itemId: "daily-attendance", href: "#daily-attendance", current: true, children: "Daily Attendance" }), _jsx(SideNavigation.Item, { itemId: "covid-dashboard", href: "#covid-dashboard", children: "Covid-19 Dashboard" }), _jsx(SideNavigation.Item, { itemId: "latecomers", href: "#latecomers", children: "Latecomers" })] })] }));
|
|
223
|
+
// ---------------------------------------------------------------------------
|
|
224
|
+
// Stories
|
|
225
|
+
// ---------------------------------------------------------------------------
|
|
226
|
+
export const Default = withDescription({ render: DefaultTemplate }, 'The composable JSX API: build the tree by hand from `SideNavigation.Title` and `SideNavigation.Item`. Reach for this when hand-authoring a navigation panel directly in a page component.');
|
|
227
|
+
export const DataDriven = withDescription({
|
|
228
|
+
render: DataDrivenTemplate,
|
|
229
|
+
parameters: {
|
|
230
|
+
controls: { disable: true },
|
|
231
|
+
docs: {
|
|
232
|
+
source: {
|
|
233
|
+
language: 'tsx',
|
|
234
|
+
code: `
|
|
235
|
+
import { SideNavigation } from '@arbor-education/design-system.components';
|
|
236
|
+
|
|
237
|
+
const items: SideNavigation.Node[] = [
|
|
238
|
+
{ type: 'item', id: 'daily-attendance', label: 'Daily Attendance', href: '#daily-attendance', current: true },
|
|
239
|
+
{ type: 'item', id: 'covid-dashboard', label: 'Covid-19 Dashboard', href: '#covid-dashboard' },
|
|
240
|
+
{ type: 'item', id: 'latecomers', label: 'Latecomers', href: '#latecomers' },
|
|
241
|
+
{ type: 'item', id: 'quick-follow-up', label: 'Quick Follow-Up', href: '#quick-follow-up' },
|
|
242
|
+
];
|
|
243
|
+
|
|
244
|
+
function DataDrivenExample() {
|
|
245
|
+
return <SideNavigation ariaLabel="Attendance" items={items} />;
|
|
246
|
+
}
|
|
247
|
+
export default DataDrivenExample;
|
|
248
|
+
`.trim(),
|
|
249
|
+
},
|
|
250
|
+
},
|
|
251
|
+
},
|
|
252
|
+
}, 'The same visual result as Default, built from a data-driven `items` array of `SideNavigation.Node` objects instead of hand-written JSX. Ideal when your navigation tree comes from config, a CMS, or is generated at runtime.');
|
|
253
|
+
export const WithGroups = withDescription({ render: WithGroupsTemplate, parameters: { controls: { disable: true } } }, 'Group related destinations under a collapsible, labelled group with `SideNavigation.Group`. "Registers" is expanded by default (`defaultExpanded`); "Absentees" starts collapsed — click its label to expand it.');
|
|
254
|
+
export const ControlledGroupExpansion = withDescription({ render: ControlledGroupExpansionTemplate, parameters: { controls: { disable: true } } }, 'A group can be fully controlled by passing both `expanded` and `onExpandedChange` instead of `defaultExpanded`. The external button proves this genuinely mirrors outside state — clicking the group\'s own label still works too, via `onExpandedChange`.');
|
|
255
|
+
export const InteractiveCurrentItem = withDescription({ render: InteractiveCurrentItemTemplate, parameters: { controls: { disable: true } } }, 'Click any item to see `current` (and the `aria-current="page"` it drives) move with it — simulating real navigation selection without needing a router in Storybook. `linkElement="button"` is used here specifically so clicking stays on this page.');
|
|
256
|
+
export const FavouritableItems = withDescription({ render: FavouritableItemsTemplate, parameters: { controls: { disable: true } } }, 'Setting `canFavourite` requires `favouriteTooltip` at compile time via a TypeScript discriminated union. Clicking the star calls `onFavouriteClick` without ever triggering the item\'s own link/button navigation — the click is stopped and prevented internally.');
|
|
257
|
+
export const MixedLinkAndButtonItems = withDescription({ render: MixedLinkAndButtonItemsTemplate, parameters: { controls: { disable: true } } }, 'A realistic navigation panel combining `href`-based items that genuinely navigate with a `linkElement="button"` item for an action like "Log out" that should never be a link. Both variants share the same visual styling and support `current`/`aria-current`.');
|
|
258
|
+
export const RenderLinkIntegration = withDescription({
|
|
259
|
+
render: RenderLinkIntegrationTemplate,
|
|
260
|
+
parameters: {
|
|
261
|
+
controls: { disable: true },
|
|
262
|
+
docs: {
|
|
263
|
+
source: {
|
|
264
|
+
language: 'tsx',
|
|
265
|
+
code: `
|
|
266
|
+
import { SideNavigation } from '@arbor-education/design-system.components';
|
|
267
|
+
|
|
268
|
+
// Stand-in for a router's Link component (e.g. React Router's <Link>).
|
|
269
|
+
function MockRouterLink({ href, className, children, ariaCurrent, onClick, linkProps, linkElementProps }: SideNavigation.RenderLinkArgs) {
|
|
270
|
+
return (
|
|
271
|
+
<a href={href} className={className} aria-current={ariaCurrent} onClick={onClick} {...linkProps} {...linkElementProps}>
|
|
272
|
+
{children}
|
|
273
|
+
</a>
|
|
274
|
+
);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
function RenderLinkIntegrationExample() {
|
|
278
|
+
return (
|
|
279
|
+
<SideNavigation renderLink={args => <MockRouterLink {...args} />}>
|
|
280
|
+
<SideNavigation.Title>Registers</SideNavigation.Title>
|
|
281
|
+
<SideNavigation.Item itemId="daily-attendance" href="#daily-attendance" current>
|
|
282
|
+
Daily Attendance
|
|
283
|
+
</SideNavigation.Item>
|
|
284
|
+
<SideNavigation.Item itemId="covid-dashboard" href="#covid-dashboard">
|
|
285
|
+
Covid-19 Dashboard
|
|
286
|
+
</SideNavigation.Item>
|
|
287
|
+
</SideNavigation>
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
export default RenderLinkIntegrationExample;
|
|
291
|
+
`.trim(),
|
|
292
|
+
},
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
}, '`renderLink` is set once, at the root, and every descendant item uses it via context — there is no per-item override. In a real app, pass your router\'s `<Link>` component here instead of the `MockRouterLink` stand-in shown in this story.');
|
|
296
|
+
export const NestedIndentationLimitation = withDescription({ render: NestedIndentationLimitationTemplate, parameters: { controls: { disable: true } } }, '**Known limitation, documented honestly rather than hidden:** the styling for an item link inside a group reasserts the exact same `padding-left` as a top-level item link — it does not accumulate per nesting level. "Latecomers", nested two groups deep, sits at the same indent as "Daily Attendance", nested one group deep. This is a genuine limitation of the current CSS, not a mistake in this story — do not fix it locally with inline padding, as that would only mask the underlying rule.');
|
|
297
|
+
export const WithSidebarRail = withDescription({ render: WithSidebarRailTemplate, parameters: { controls: { disable: true } } }, 'The realistic paired layout: the icon-only `Sidebar` rail alongside a fuller, labelled `SideNavigation` panel. `SideNavigation` is styled as a panel by default — width (`--sidebar-nav-panel-width`), gap, and overflow are all built in, so no wrapper styling is needed here.');
|
|
298
|
+
//# sourceMappingURL=SideNavigation.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SideNavigation.stories.js","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigation.stories.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SideNavigation.test.d.ts","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigation.test.tsx"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
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('SideNavigation', () => {
|
|
9
|
+
test('renders a nav with the default ariaLabel', () => {
|
|
10
|
+
render(_jsx(SideNavigation, { items: [] }));
|
|
11
|
+
expect(screen.getByRole('navigation', { name: 'Side navigation' })).toBeInTheDocument();
|
|
12
|
+
});
|
|
13
|
+
test('renders a nav with a custom ariaLabel', () => {
|
|
14
|
+
render(_jsx(SideNavigation, { ariaLabel: "Attendance navigation", items: [] }));
|
|
15
|
+
expect(screen.getByRole('navigation', { name: 'Attendance navigation' })).toBeInTheDocument();
|
|
16
|
+
});
|
|
17
|
+
test('renders composable children when items is omitted', () => {
|
|
18
|
+
render(_jsx(SideNavigation, { children: _jsx(SideNavigationItem, { itemId: "daily", href: "/daily", children: "Daily Attendance" }) }));
|
|
19
|
+
expect(screen.getByRole('link', { name: 'Daily Attendance' })).toBeInTheDocument();
|
|
20
|
+
});
|
|
21
|
+
test('renders leaf items from the data-driven items prop', () => {
|
|
22
|
+
render(_jsx(SideNavigation, { items: [
|
|
23
|
+
{ type: 'item', id: 'daily', label: 'Daily Attendance', href: '/daily' },
|
|
24
|
+
] }));
|
|
25
|
+
expect(screen.getByRole('link', { name: 'Daily Attendance' })).toHaveAttribute('href', '/daily');
|
|
26
|
+
});
|
|
27
|
+
test('renders groups from the data-driven items prop and expands them on click', async () => {
|
|
28
|
+
render(_jsx(SideNavigation, { items: [
|
|
29
|
+
{
|
|
30
|
+
type: 'group',
|
|
31
|
+
id: 'registers',
|
|
32
|
+
label: 'Registers',
|
|
33
|
+
children: [
|
|
34
|
+
{ type: 'item', id: 'daily', label: 'Daily Attendance', href: '/daily' },
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
] }));
|
|
38
|
+
const trigger = screen.getByRole('button', { name: 'Registers' });
|
|
39
|
+
expect(trigger).toHaveAttribute('aria-expanded', 'false');
|
|
40
|
+
await userEvent.click(trigger);
|
|
41
|
+
expect(trigger).toHaveAttribute('aria-expanded', 'true');
|
|
42
|
+
expect(screen.getByRole('link', { name: 'Daily Attendance' })).toBeInTheDocument();
|
|
43
|
+
});
|
|
44
|
+
test('renders nested groups from the data-driven items prop', () => {
|
|
45
|
+
render(_jsx(SideNavigation, { items: [
|
|
46
|
+
{
|
|
47
|
+
type: 'group',
|
|
48
|
+
id: 'a',
|
|
49
|
+
label: 'A',
|
|
50
|
+
defaultExpanded: true,
|
|
51
|
+
children: [
|
|
52
|
+
{
|
|
53
|
+
type: 'group',
|
|
54
|
+
id: 'b',
|
|
55
|
+
label: 'B',
|
|
56
|
+
defaultExpanded: true,
|
|
57
|
+
children: [
|
|
58
|
+
{ type: 'item', id: 'c', label: 'C', href: '/c' },
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
] }));
|
|
64
|
+
expect(screen.getByRole('button', { name: 'A' })).toBeInTheDocument();
|
|
65
|
+
expect(screen.getByRole('button', { name: 'B' })).toBeInTheDocument();
|
|
66
|
+
expect(screen.getByRole('link', { name: 'C' })).toBeInTheDocument();
|
|
67
|
+
});
|
|
68
|
+
test('applies renderLink to items produced from the items prop', () => {
|
|
69
|
+
const renderLink = vi.fn(({ href, className, children }) => (_jsx("a", { href: href, className: className, "data-custom-link": "true", children: children })));
|
|
70
|
+
render(_jsx(SideNavigation, { renderLink: renderLink, items: [{ type: 'item', id: 'daily', label: 'Daily Attendance', href: '/daily' }] }));
|
|
71
|
+
expect(screen.getByText('Daily Attendance').closest('a')).toHaveAttribute('data-custom-link', 'true');
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=SideNavigation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SideNavigation.test.js","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigation.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SideNavigationRenderLinkArgs } from './types.js';
|
|
2
|
+
export type SideNavigationContextValue = {
|
|
3
|
+
renderLink?: (args: SideNavigationRenderLinkArgs) => React.ReactElement;
|
|
4
|
+
};
|
|
5
|
+
export declare function SideNavigationProvider(props: {
|
|
6
|
+
value: SideNavigationContextValue;
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export declare function useSideNavigationContext(): SideNavigationContextValue;
|
|
10
|
+
//# sourceMappingURL=SideNavigationContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SideNavigationContext.d.ts","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationContext.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,4BAA4B,KAAK,KAAK,CAAC,YAAY,CAAC;CACzE,CAAC;AAIF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,0BAA0B,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAO7G;AAED,wBAAgB,wBAAwB,+BAMvC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext } from 'react';
|
|
3
|
+
const SideNavigationContext = createContext(null);
|
|
4
|
+
export function SideNavigationProvider(props) {
|
|
5
|
+
const { value, children } = props;
|
|
6
|
+
return (_jsx(SideNavigationContext.Provider, { value: value, children: children }));
|
|
7
|
+
}
|
|
8
|
+
export function useSideNavigationContext() {
|
|
9
|
+
const ctx = useContext(SideNavigationContext);
|
|
10
|
+
if (!ctx) {
|
|
11
|
+
throw new Error('SideNavigation components must be used within <SideNavigation>.');
|
|
12
|
+
}
|
|
13
|
+
return ctx;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=SideNavigationContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SideNavigationContext.js","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAOlD,MAAM,qBAAqB,GAAG,aAAa,CAAoC,IAAI,CAAC,CAAC;AAErF,MAAM,UAAU,sBAAsB,CAAC,KAAuE;IAC5G,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAClC,OAAO,CACL,KAAC,qBAAqB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACzC,QAAQ,GACsB,CAClC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,MAAM,GAAG,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/components/{sidebarNav/SidebarNavGroup.d.ts → sideNavigation/SideNavigationGroup.d.ts}
RENAMED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { HTMLAttributes } from 'react';
|
|
2
|
-
export type
|
|
2
|
+
export type SideNavigationGroupProps = {
|
|
3
3
|
label: string;
|
|
4
4
|
expanded?: boolean;
|
|
5
5
|
defaultExpanded?: boolean;
|
|
6
6
|
onExpandedChange?: (expanded: boolean) => void;
|
|
7
7
|
children: React.ReactNode;
|
|
8
8
|
} & Omit<HTMLAttributes<HTMLLIElement>, 'children'>;
|
|
9
|
-
export declare const
|
|
10
|
-
//# sourceMappingURL=
|
|
9
|
+
export declare const SideNavigationGroup: (props: SideNavigationGroupProps) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=SideNavigationGroup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SideNavigationGroup.d.ts","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationGroup.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAI5C,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC,CAAC;AAEpD,eAAO,MAAM,mBAAmB,GAAI,OAAO,wBAAwB,4CA4ClE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Icon } from '../icon/Icon.js';
|
|
3
|
+
import classNames from 'classnames';
|
|
4
|
+
import { useId } from 'react';
|
|
5
|
+
import { useControllableBoolean } from '../../utils/hooks/useControllableBoolean.js';
|
|
6
|
+
export const SideNavigationGroup = (props) => {
|
|
7
|
+
const { label, expanded, defaultExpanded = false, onExpandedChange, className, children, ...rest } = props;
|
|
8
|
+
const ulId = useId();
|
|
9
|
+
const { value: isExpanded, set: setExpanded } = useControllableBoolean({
|
|
10
|
+
value: expanded,
|
|
11
|
+
defaultValue: defaultExpanded,
|
|
12
|
+
onChange: onExpandedChange,
|
|
13
|
+
});
|
|
14
|
+
return (_jsxs("li", { className: classNames('ds-side-navigation__list-item', 'ds-side-navigation__group', className), ...rest, children: [_jsxs("button", { type: "button", className: "ds-side-navigation__group-link", "aria-expanded": isExpanded, "aria-controls": ulId, onClick: () => setExpanded(!isExpanded), children: [_jsx(Icon, { name: "chevron-right", size: 16, className: "ds-side-navigation__group-chevron" }), _jsx("span", { className: "ds-side-navigation__group-label", children: label })] }), _jsx("ul", { id: ulId, "aria-hidden": !isExpanded, className: "ds-side-navigation__group-children", children: children })] }));
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=SideNavigationGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SideNavigationGroup.js","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationGroup.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAU5E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAA+B,EAAE,EAAE;IACrE,MAAM,EACJ,KAAK,EACL,QAAQ,EACR,eAAe,GAAG,KAAK,EACvB,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;IAEV,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC;IACrB,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,sBAAsB,CAAC;QACrE,KAAK,EAAE,QAAQ;QACf,YAAY,EAAE,eAAe;QAC7B,QAAQ,EAAE,gBAAgB;KAC3B,CAAC,CAAC;IAEH,OAAO,CACL,cAAI,SAAS,EAAE,UAAU,CAAC,+BAA+B,EAAE,2BAA2B,EAAE,SAAS,CAAC,KAAM,IAAI,aAC1G,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,gCAAgC,mBAC3B,UAAU,mBACV,IAAI,EACnB,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,aAEvC,KAAC,IAAI,IACH,IAAI,EAAC,eAAe,EACpB,IAAI,EAAE,EAAE,EACR,SAAS,EAAC,mCAAmC,GAC7C,EACF,eAAM,SAAS,EAAC,iCAAiC,YAAE,KAAK,GAAQ,IACzD,EAET,aACE,EAAE,EAAE,IAAI,iBACK,CAAC,UAAU,EACxB,SAAS,EAAC,oCAAoC,YAE7C,QAAQ,GACN,IACF,CACN,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SideNavigationGroup.test.d.ts","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationGroup.test.tsx"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
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 { SideNavigationGroup } from './SideNavigationGroup.js';
|
|
7
|
+
describe('SideNavigationGroup', () => {
|
|
8
|
+
test('renders the label on a button with aria-expanded reflecting the collapsed state', () => {
|
|
9
|
+
render(_jsx(SideNavigationGroup, { label: "Registers", children: _jsx("li", { children: "Daily attendance" }) }));
|
|
10
|
+
const trigger = screen.getByRole('button', { name: 'Registers' });
|
|
11
|
+
expect(trigger).toHaveAttribute('aria-expanded', 'false');
|
|
12
|
+
});
|
|
13
|
+
test('defaults to expanded when defaultExpanded is true', () => {
|
|
14
|
+
render(_jsx(SideNavigationGroup, { label: "Registers", defaultExpanded: true, children: _jsx("li", { children: "Daily attendance" }) }));
|
|
15
|
+
expect(screen.getByRole('button', { name: 'Registers' })).toHaveAttribute('aria-expanded', 'true');
|
|
16
|
+
});
|
|
17
|
+
test('toggles aria-expanded and the children list aria-hidden when clicked (uncontrolled)', async () => {
|
|
18
|
+
render(_jsx(SideNavigationGroup, { label: "Registers", children: _jsx("li", { children: "Daily attendance" }) }));
|
|
19
|
+
const trigger = screen.getByRole('button', { name: 'Registers' });
|
|
20
|
+
const childrenList = document.getElementById(trigger.getAttribute('aria-controls'));
|
|
21
|
+
expect(childrenList).toHaveAttribute('aria-hidden', 'true');
|
|
22
|
+
await userEvent.click(trigger);
|
|
23
|
+
expect(trigger).toHaveAttribute('aria-expanded', 'true');
|
|
24
|
+
expect(childrenList).toHaveAttribute('aria-hidden', 'false');
|
|
25
|
+
await userEvent.click(trigger);
|
|
26
|
+
expect(trigger).toHaveAttribute('aria-expanded', 'false');
|
|
27
|
+
expect(childrenList).toHaveAttribute('aria-hidden', 'true');
|
|
28
|
+
});
|
|
29
|
+
test('calls onExpandedChange when toggled', async () => {
|
|
30
|
+
const onExpandedChange = vi.fn();
|
|
31
|
+
render(_jsx(SideNavigationGroup, { label: "Registers", onExpandedChange: onExpandedChange, children: _jsx("li", { children: "Daily attendance" }) }));
|
|
32
|
+
await userEvent.click(screen.getByRole('button', { name: 'Registers' }));
|
|
33
|
+
expect(onExpandedChange).toHaveBeenCalledWith(true);
|
|
34
|
+
});
|
|
35
|
+
test('is fully controlled via the expanded prop', async () => {
|
|
36
|
+
const onExpandedChange = vi.fn();
|
|
37
|
+
const { rerender } = render(_jsx(SideNavigationGroup, { label: "Registers", expanded: false, onExpandedChange: onExpandedChange, children: _jsx("li", { children: "Daily attendance" }) }));
|
|
38
|
+
const trigger = screen.getByRole('button', { name: 'Registers' });
|
|
39
|
+
await userEvent.click(trigger);
|
|
40
|
+
expect(onExpandedChange).toHaveBeenCalledWith(true);
|
|
41
|
+
expect(trigger).toHaveAttribute('aria-expanded', 'false');
|
|
42
|
+
rerender(_jsx(SideNavigationGroup, { label: "Registers", expanded: true, onExpandedChange: onExpandedChange, children: _jsx("li", { children: "Daily attendance" }) }));
|
|
43
|
+
expect(trigger).toHaveAttribute('aria-expanded', 'true');
|
|
44
|
+
});
|
|
45
|
+
test('supports nested groups collapsing independently', async () => {
|
|
46
|
+
render(_jsx(SideNavigationGroup, { label: "A", children: _jsx(SideNavigationGroup, { label: "B", children: _jsx("li", { children: "C" }) }) }));
|
|
47
|
+
const triggerA = screen.getByRole('button', { name: 'A' });
|
|
48
|
+
const triggerB = screen.getByRole('button', { name: 'B', hidden: true });
|
|
49
|
+
const groupBChildren = document.getElementById(triggerB.getAttribute('aria-controls'));
|
|
50
|
+
expect(groupBChildren).toHaveAttribute('aria-hidden', 'true');
|
|
51
|
+
await userEvent.click(triggerA);
|
|
52
|
+
expect(groupBChildren).toHaveAttribute('aria-hidden', 'true');
|
|
53
|
+
await userEvent.click(screen.getByRole('button', { name: 'B' }));
|
|
54
|
+
expect(groupBChildren).toHaveAttribute('aria-hidden', 'false');
|
|
55
|
+
expect(screen.getByText('C')).toBeInTheDocument();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=SideNavigationGroup.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SideNavigationGroup.test.js","sourceRoot":"","sources":["../../../src/components/sideNavigation/SideNavigationGroup.test.tsx"],"names":[],"mappings":"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"}
|