@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
package/src/tokens.scss
CHANGED
|
@@ -27,6 +27,9 @@
|
|
|
27
27
|
--size-control-large: 4rem;
|
|
28
28
|
--size-control-xlarge: 5rem;
|
|
29
29
|
--shadow-small: 0 4px 12px 0 rgba(32, 32, 32, 0.08);
|
|
30
|
+
--shadow-medium: 0 8px 24px 0 rgba(32, 32, 32, 0.12);
|
|
31
|
+
--z-index-popup: 1;
|
|
32
|
+
--z-index-toast: 10;
|
|
30
33
|
--page-sign-in-color-background: #fffcf8;
|
|
31
34
|
--color-grey-100: #efefef;
|
|
32
35
|
--color-grey-200: #dfdfdf;
|
|
@@ -832,6 +835,12 @@
|
|
|
832
835
|
--widget-calendar-weight-border: var(--border-weight);
|
|
833
836
|
--widget-calendar-spacing-vertical: var(--spacing-medium);
|
|
834
837
|
--widget-calendar-spacing-horizontal: var(--spacing-small);
|
|
838
|
+
--widget-calendar-list-gap: var(--spacing-xsmall);
|
|
839
|
+
--widget-calendar-type-bar-width: 3px;
|
|
840
|
+
--widget-calendar-type-bar-radius: var(--border-radius-xsmall);
|
|
841
|
+
--widget-calendar-type-primary-color: var(--color-brand-500);
|
|
842
|
+
--widget-calendar-type-secondary-color: var(--color-grey-300);
|
|
843
|
+
--widget-calendar-color-title: var(--color-grey-900);
|
|
835
844
|
--widget-list-row-hover-hover-bg: var(--color-grey-050);
|
|
836
845
|
--widget-list-row-hover-color-icon-arrow: var(--color-grey-900);
|
|
837
846
|
--widget-list-row-active-active-bg: var(--color-grey-200);
|
|
@@ -880,6 +889,7 @@
|
|
|
880
889
|
--widget-attachments-default-color-background: var(--color-grey-050);
|
|
881
890
|
--widget-attachments-spacing-vertical: var(--spacing-large);
|
|
882
891
|
--widget-attachments-spacing-horizontal: var(--spacing-small);
|
|
892
|
+
--widget-notifications-timestamp-font-size: 0.625rem; // 10px
|
|
883
893
|
--widget-notifications-read-focus-icon-hover-color-background: var(--color-grey-050);
|
|
884
894
|
--widget-notifications-read-focus-icon-active-color-background: var(--color-grey-100);
|
|
885
895
|
--widget-notifications-read-focus-icon-default-color-background: var(--color-mono-white);
|
|
@@ -909,11 +919,11 @@
|
|
|
909
919
|
--widget-notifications-unread-default-color-background: var(--color-brand-050);
|
|
910
920
|
--widget-notifications-unread-color-text: var(--color-brand-900);
|
|
911
921
|
--widget-notifications-unread-color-title: var(--color-brand-900);
|
|
912
|
-
--widget-notifications-
|
|
922
|
+
--widget-notifications-secondary-spacing-vertical-gap: var(--spacing-xsmall);
|
|
913
923
|
--widget-notifications-color-text: var(--color-grey-600);
|
|
914
924
|
--widget-notifications-color-title: var(--color-grey-900);
|
|
915
925
|
--widget-notifications-spacing-vertical: var(--spacing-small);
|
|
916
|
-
--widget-notifications-spacing-
|
|
926
|
+
--widget-notifications-spacing-horizontal: var(--spacing-small);
|
|
917
927
|
--widget-notifications-spacing-vertical-gap: var(--spacing-small);
|
|
918
928
|
--filters-hover-color-background: var(--color-grey-100);
|
|
919
929
|
--filters-radius: var(--border-radius-small);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { describe, expect, test } from 'vitest';
|
|
2
|
+
import {
|
|
3
|
+
FAVOURITE_TOOLTIP,
|
|
4
|
+
getFavouriteRemovedToastMessage,
|
|
5
|
+
getFavouriteTooltip,
|
|
6
|
+
} from './favouriteConstants.js';
|
|
7
|
+
|
|
8
|
+
describe('favouriteConstants', () => {
|
|
9
|
+
test('getFavouriteTooltip returns add or remove copy', () => {
|
|
10
|
+
expect(getFavouriteTooltip(false)).toBe(FAVOURITE_TOOLTIP.add);
|
|
11
|
+
expect(getFavouriteTooltip(true)).toBe(FAVOURITE_TOOLTIP.remove);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
test('getFavouriteRemovedToastMessage includes item label', () => {
|
|
15
|
+
expect(getFavouriteRemovedToastMessage('Daily Attendance')).toBe(
|
|
16
|
+
'Daily Attendance removed from favourites',
|
|
17
|
+
);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { IconName } from 'Components/icon/allowedIcons';
|
|
2
|
+
|
|
3
|
+
export const FAVOURITE_ICON = {
|
|
4
|
+
outline: 'favourite-outline',
|
|
5
|
+
filled: 'favourite-filled',
|
|
6
|
+
} as const satisfies Record<'outline' | 'filled', IconName>;
|
|
7
|
+
|
|
8
|
+
export const FAVOURITE_FILLED_ICON_COLOR = 'var(--color-brand-600)';
|
|
9
|
+
|
|
10
|
+
export const FAVOURITE_TOOLTIP = {
|
|
11
|
+
add: 'Add to favourites',
|
|
12
|
+
remove: 'Remove from favourites',
|
|
13
|
+
} as const;
|
|
14
|
+
|
|
15
|
+
export function getFavouriteTooltip(isFavourited: boolean): string {
|
|
16
|
+
return isFavourited ? FAVOURITE_TOOLTIP.remove : FAVOURITE_TOOLTIP.add;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function getFavouriteRemovedToastMessage(label: string): string {
|
|
20
|
+
return `${label} removed from favourites`;
|
|
21
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { act, renderHook } from '@testing-library/react';
|
|
2
|
+
import { describe, expect, test, vi } from 'vitest';
|
|
3
|
+
import { useControllableBoolean } from './useControllableBoolean.js';
|
|
4
|
+
|
|
5
|
+
describe('useControllableBoolean', () => {
|
|
6
|
+
test('uses defaultValue when uncontrolled', () => {
|
|
7
|
+
const { result } = renderHook(() => useControllableBoolean({ defaultValue: true }));
|
|
8
|
+
expect(result.current.value).toBe(true);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
test('updates internal state when uncontrolled and set is called', () => {
|
|
12
|
+
const { result } = renderHook(() => useControllableBoolean({ defaultValue: false }));
|
|
13
|
+
|
|
14
|
+
act(() => result.current.set(true));
|
|
15
|
+
|
|
16
|
+
expect(result.current.value).toBe(true);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test('calls onChange with the new value when set is called while uncontrolled', () => {
|
|
20
|
+
const onChange = vi.fn();
|
|
21
|
+
const { result } = renderHook(() => useControllableBoolean({ defaultValue: false, onChange }));
|
|
22
|
+
|
|
23
|
+
act(() => result.current.set(true));
|
|
24
|
+
|
|
25
|
+
expect(onChange).toHaveBeenCalledWith(true);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test('uses the provided value when controlled, ignoring defaultValue', () => {
|
|
29
|
+
const { result } = renderHook(() => useControllableBoolean({ value: true, defaultValue: false }));
|
|
30
|
+
expect(result.current.value).toBe(true);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test('does not update its own value when controlled and set is called, but still calls onChange', () => {
|
|
34
|
+
const onChange = vi.fn();
|
|
35
|
+
const { result, rerender } = renderHook(
|
|
36
|
+
({ value }) => useControllableBoolean({ value, defaultValue: false, onChange }),
|
|
37
|
+
{ initialProps: { value: false } },
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
act(() => result.current.set(true));
|
|
41
|
+
|
|
42
|
+
expect(onChange).toHaveBeenCalledWith(true);
|
|
43
|
+
expect(result.current.value).toBe(false);
|
|
44
|
+
|
|
45
|
+
rerender({ value: true });
|
|
46
|
+
expect(result.current.value).toBe(true);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { SidebarNavGroup } from './SidebarNavGroup.js';
|
|
2
|
-
import type { SidebarNavGroupProps } from './SidebarNavGroup.js';
|
|
3
|
-
import { SidebarNavItem } from './SidebarNavItem.js';
|
|
4
|
-
import type { SidebarNavItemProps } from './SidebarNavItem.js';
|
|
5
|
-
import { SidebarNavPanelNav } from './SidebarNavPanelNav.js';
|
|
6
|
-
import type { SidebarNavPanelNavProps } from './SidebarNavPanelNav.js';
|
|
7
|
-
import { SidebarNavPanel } from './SidebarNavPanel.js';
|
|
8
|
-
import type { SidebarNavPanelProps } from './SidebarNavPanel.js';
|
|
9
|
-
import { SidebarNavRail } from './SidebarNavRail.js';
|
|
10
|
-
import type { SidebarNavRailProps } from './SidebarNavRail.js';
|
|
11
|
-
import { SidebarNavRailItem } from './SidebarNavRailItem.js';
|
|
12
|
-
import type { SidebarNavRailItemProps } from './SidebarNavRailItem.js';
|
|
13
|
-
import { SidebarNavRailList } from './SidebarNavRailList.js';
|
|
14
|
-
import { SidebarNavRailSlot } from './SidebarNavRailSlot.js';
|
|
15
|
-
import { SidebarNavSeparator } from './SidebarNavSeparator.js';
|
|
16
|
-
import { SidebarNavTitle } from './SidebarNavTitle.js';
|
|
17
|
-
import { SidebarNavTrigger } from './SidebarNavTrigger.js';
|
|
18
|
-
import type { SidebarNavTriggerProps } from './SidebarNavTrigger.js';
|
|
19
|
-
import type { SidebarNavProps } from './types.js';
|
|
20
|
-
declare const SidebarNavImpl: (props: SidebarNavProps) => import("react/jsx-runtime").JSX.Element;
|
|
21
|
-
type SidebarNavComponent = typeof SidebarNavImpl & {
|
|
22
|
-
Rail: typeof SidebarNavRail;
|
|
23
|
-
Separator: typeof SidebarNavSeparator;
|
|
24
|
-
RailList: typeof SidebarNavRailList;
|
|
25
|
-
RailItem: typeof SidebarNavRailItem;
|
|
26
|
-
RailSlot: typeof SidebarNavRailSlot;
|
|
27
|
-
Trigger: typeof SidebarNavTrigger;
|
|
28
|
-
Panel: typeof SidebarNavPanel;
|
|
29
|
-
Title: typeof SidebarNavTitle;
|
|
30
|
-
PanelNav: typeof SidebarNavPanelNav;
|
|
31
|
-
Group: typeof SidebarNavGroup;
|
|
32
|
-
Item: typeof SidebarNavItem;
|
|
33
|
-
};
|
|
34
|
-
export declare const SidebarNav: SidebarNavComponent;
|
|
35
|
-
export declare namespace SidebarNav {
|
|
36
|
-
type Props = SidebarNavProps;
|
|
37
|
-
type RailProps = SidebarNavRailProps;
|
|
38
|
-
type RailItemProps = SidebarNavRailItemProps;
|
|
39
|
-
type TriggerProps = SidebarNavTriggerProps;
|
|
40
|
-
type PanelProps = SidebarNavPanelProps;
|
|
41
|
-
type PanelNavProps = SidebarNavPanelNavProps;
|
|
42
|
-
type GroupProps = SidebarNavGroupProps;
|
|
43
|
-
type ItemProps = SidebarNavItemProps;
|
|
44
|
-
}
|
|
45
|
-
export {};
|
|
46
|
-
//# sourceMappingURL=SidebarNav.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarNav.d.ts","sourceRoot":"","sources":["../../../src/components/sidebarNav/SidebarNav.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,YAAY,CAAC;AAoFpB,QAAA,MAAM,cAAc,GAAI,OAAO,eAAe,4CA+E7C,CAAC;AAEF,KAAK,mBAAmB,GAAG,OAAO,cAAc,GAAG;IACjD,IAAI,EAAE,OAAO,cAAc,CAAC;IAC5B,SAAS,EAAE,OAAO,mBAAmB,CAAC;IACtC,QAAQ,EAAE,OAAO,kBAAkB,CAAC;IACpC,QAAQ,EAAE,OAAO,kBAAkB,CAAC;IACpC,QAAQ,EAAE,OAAO,kBAAkB,CAAC;IACpC,OAAO,EAAE,OAAO,iBAAiB,CAAC;IAClC,KAAK,EAAE,OAAO,eAAe,CAAC;IAC9B,KAAK,EAAE,OAAO,eAAe,CAAC;IAC9B,QAAQ,EAAE,OAAO,kBAAkB,CAAC;IACpC,KAAK,EAAE,OAAO,eAAe,CAAC;IAC9B,IAAI,EAAE,OAAO,cAAc,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAqB,mBAAmB,CAAC;AAchE,yBAAiB,UAAU,CAAC;IAC1B,KAAY,KAAK,GAAG,eAAe,CAAC;IACpC,KAAY,SAAS,GAAG,mBAAmB,CAAC;IAC5C,KAAY,aAAa,GAAG,uBAAuB,CAAC;IACpD,KAAY,YAAY,GAAG,sBAAsB,CAAC;IAClD,KAAY,UAAU,GAAG,oBAAoB,CAAC;IAC9C,KAAY,aAAa,GAAG,uBAAuB,CAAC;IACpD,KAAY,UAAU,GAAG,oBAAoB,CAAC;IAC9C,KAAY,SAAS,GAAG,mBAAmB,CAAC;CAC7C"}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { Icon } from '../icon/Icon.js';
|
|
3
|
-
import classNames from 'classnames';
|
|
4
|
-
import { Tooltip as TooltipPrimitive } from 'radix-ui';
|
|
5
|
-
import React, { useId, useMemo } from 'react';
|
|
6
|
-
import { SidebarNavProvider } from './SidebarNavContext.js';
|
|
7
|
-
import { SidebarNavGroup } from './SidebarNavGroup.js';
|
|
8
|
-
import { SidebarNavItem } from './SidebarNavItem.js';
|
|
9
|
-
import { SidebarNavPanelNav } from './SidebarNavPanelNav.js';
|
|
10
|
-
import { SidebarNavPanel } from './SidebarNavPanel.js';
|
|
11
|
-
import { SidebarNavRail } from './SidebarNavRail.js';
|
|
12
|
-
import { SidebarNavRailItem } from './SidebarNavRailItem.js';
|
|
13
|
-
import { SidebarNavRailList } from './SidebarNavRailList.js';
|
|
14
|
-
import { SidebarNavRailSlot } from './SidebarNavRailSlot.js';
|
|
15
|
-
import { SidebarNavSeparator } from './SidebarNavSeparator.js';
|
|
16
|
-
import { SidebarNavTitle } from './SidebarNavTitle.js';
|
|
17
|
-
import { SidebarNavTrigger } from './SidebarNavTrigger.js';
|
|
18
|
-
import { isSidebarNavRailSeparator } from './types.js';
|
|
19
|
-
import { useControllableBoolean } from './useControllableBoolean.js';
|
|
20
|
-
function renderRailListItem(item) {
|
|
21
|
-
if (item.renderItem) {
|
|
22
|
-
return (_jsx(React.Fragment, { children: item.renderItem(item) }, item.id));
|
|
23
|
-
}
|
|
24
|
-
return (_jsxs(SidebarNavRailItem, { "data-testid": `sidebar-nav-rail-item-${item.id}`, href: item.href, onClick: item.onClick, current: item.current, "aria-label": item.label, children: [_jsx(Icon, { name: item.iconName, size: 24, color: item.iconColor }), item.badgeContent] }, item.id));
|
|
25
|
-
}
|
|
26
|
-
function SidebarNavRailFromData(props) {
|
|
27
|
-
const { items } = props;
|
|
28
|
-
const nodes = [];
|
|
29
|
-
let currentGroup = [];
|
|
30
|
-
let groupKey = 'rail-list-leading';
|
|
31
|
-
const flushGroup = () => {
|
|
32
|
-
if (currentGroup.length === 0) {
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
nodes.push(_jsx(SidebarNavRailList, { children: currentGroup.map(renderRailListItem) }, groupKey));
|
|
36
|
-
currentGroup = [];
|
|
37
|
-
};
|
|
38
|
-
for (const entry of items) {
|
|
39
|
-
if (isSidebarNavRailSeparator(entry)) {
|
|
40
|
-
flushGroup();
|
|
41
|
-
nodes.push(_jsx(SidebarNavSeparator, { id: entry.id }, entry.id));
|
|
42
|
-
groupKey = `rail-list-after-${entry.id}`;
|
|
43
|
-
continue;
|
|
44
|
-
}
|
|
45
|
-
if (entry.opensPanel) {
|
|
46
|
-
flushGroup();
|
|
47
|
-
nodes.push(_jsx(SidebarNavTrigger, { "data-testid": `sidebar-nav-panel-trigger-${entry.id}`, tooltip: entry.label, onClick: (e) => {
|
|
48
|
-
entry.onClick?.(e);
|
|
49
|
-
}, children: _jsx(Icon, { name: entry.iconName, size: 24, color: entry.iconColor }) }, entry.id));
|
|
50
|
-
continue;
|
|
51
|
-
}
|
|
52
|
-
currentGroup.push(entry);
|
|
53
|
-
}
|
|
54
|
-
flushGroup();
|
|
55
|
-
return (_jsx(SidebarNavRail, { children: nodes }));
|
|
56
|
-
}
|
|
57
|
-
const SidebarNavImpl = (props) => {
|
|
58
|
-
const { expanded, defaultExpanded = true, onExpandedChange, renderLink, railItems, panelTitle, panelNavItems, className, children, ...rest } = props;
|
|
59
|
-
const panelId = useId();
|
|
60
|
-
const { value: isExpanded, set: setExpanded } = useControllableBoolean({
|
|
61
|
-
value: expanded,
|
|
62
|
-
defaultValue: defaultExpanded,
|
|
63
|
-
onChange: onExpandedChange,
|
|
64
|
-
});
|
|
65
|
-
const useDataRail = railItems !== undefined;
|
|
66
|
-
const useDataPanel = panelTitle !== undefined || panelNavItems !== undefined;
|
|
67
|
-
const childArray = React.Children.toArray(children);
|
|
68
|
-
const railChild = childArray.find(c => c.type === SidebarNavRail);
|
|
69
|
-
const panelChild = childArray.find(c => c.type === SidebarNavPanel);
|
|
70
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
71
|
-
if (useDataPanel && !useDataRail && railChild == null && childArray.length > 0) {
|
|
72
|
-
console.warn('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).');
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
const content = useDataRail || useDataPanel
|
|
76
|
-
? (_jsxs(_Fragment, { children: [useDataRail
|
|
77
|
-
? _jsx(SidebarNavRailFromData, { items: railItems })
|
|
78
|
-
: railChild, useDataPanel
|
|
79
|
-
? (_jsxs(SidebarNavPanel, { children: [panelTitle !== undefined && (_jsx(SidebarNavTitle, { children: panelTitle })), _jsx(SidebarNavPanelNav, { items: panelNavItems ?? [] })] }))
|
|
80
|
-
: panelChild] }))
|
|
81
|
-
: children;
|
|
82
|
-
const contextValue = useMemo(() => ({
|
|
83
|
-
expanded: isExpanded,
|
|
84
|
-
setExpanded,
|
|
85
|
-
panelId,
|
|
86
|
-
renderLink,
|
|
87
|
-
}), [isExpanded, setExpanded, panelId, renderLink]);
|
|
88
|
-
return (_jsx(TooltipPrimitive.Provider, { delayDuration: 400, children: _jsx(SidebarNavProvider, { value: contextValue, children: _jsx("div", { className: classNames('ds-sidebar-nav', className), "data-testid": "sidebar-nav", ...rest, children: content }) }) }));
|
|
89
|
-
};
|
|
90
|
-
export const SidebarNav = SidebarNavImpl;
|
|
91
|
-
SidebarNav.Rail = SidebarNavRail;
|
|
92
|
-
SidebarNav.Separator = SidebarNavSeparator;
|
|
93
|
-
SidebarNav.RailList = SidebarNavRailList;
|
|
94
|
-
SidebarNav.RailItem = SidebarNavRailItem;
|
|
95
|
-
SidebarNav.RailSlot = SidebarNavRailSlot;
|
|
96
|
-
SidebarNav.Trigger = SidebarNavTrigger;
|
|
97
|
-
SidebarNav.Panel = SidebarNavPanel;
|
|
98
|
-
SidebarNav.Title = SidebarNavTitle;
|
|
99
|
-
SidebarNav.PanelNav = SidebarNavPanelNav;
|
|
100
|
-
SidebarNav.Group = SidebarNavGroup;
|
|
101
|
-
SidebarNav.Item = SidebarNavItem;
|
|
102
|
-
//# sourceMappingURL=SidebarNav.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarNav.js","sourceRoot":"","sources":["../../../src/components/sidebarNav/SidebarNav.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import type { StoryObj } from '@storybook/react-vite';
|
|
2
|
-
import { SidebarNav } from './SidebarNav.js';
|
|
3
|
-
declare function SidebarNavDocsPage(): import("react/jsx-runtime").JSX.Element;
|
|
4
|
-
declare const meta: {
|
|
5
|
-
title: string;
|
|
6
|
-
component: ((props: import("./types.js").SidebarNavProps) => import("react/jsx-runtime").JSX.Element) & {
|
|
7
|
-
Rail: typeof import("./SidebarNavRail.js").SidebarNavRail;
|
|
8
|
-
Separator: typeof import("./SidebarNavSeparator.js").SidebarNavSeparator;
|
|
9
|
-
RailList: typeof import("./SidebarNavRailList.js").SidebarNavRailList;
|
|
10
|
-
RailItem: typeof import("./SidebarNavRailItem.js").SidebarNavRailItem;
|
|
11
|
-
RailSlot: typeof import("./SidebarNavRailSlot.js").SidebarNavRailSlot;
|
|
12
|
-
Trigger: typeof import("./SidebarNavTrigger.js").SidebarNavTrigger;
|
|
13
|
-
Panel: typeof import("./SidebarNavPanel.js").SidebarNavPanel;
|
|
14
|
-
Title: typeof import("./SidebarNavTitle.js").SidebarNavTitle;
|
|
15
|
-
PanelNav: typeof import("./SidebarNavPanelNav.js").SidebarNavPanelNav;
|
|
16
|
-
Group: typeof import("./SidebarNavGroup.js").SidebarNavGroup;
|
|
17
|
-
Item: typeof import("./SidebarNavItem.js").SidebarNavItem;
|
|
18
|
-
};
|
|
19
|
-
parameters: {
|
|
20
|
-
layout: string;
|
|
21
|
-
docs: {
|
|
22
|
-
page: typeof SidebarNavDocsPage;
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
tags: string[];
|
|
26
|
-
args: {
|
|
27
|
-
onExpandedChange: import("vitest").Mock<(...args: any[]) => any>;
|
|
28
|
-
};
|
|
29
|
-
argTypes: {
|
|
30
|
-
defaultExpanded: {
|
|
31
|
-
control: "boolean";
|
|
32
|
-
description: string;
|
|
33
|
-
table: {
|
|
34
|
-
defaultValue: {
|
|
35
|
-
summary: string;
|
|
36
|
-
};
|
|
37
|
-
};
|
|
38
|
-
};
|
|
39
|
-
children: {
|
|
40
|
-
control: false;
|
|
41
|
-
};
|
|
42
|
-
railItems: {
|
|
43
|
-
control: false;
|
|
44
|
-
};
|
|
45
|
-
panelNavItems: {
|
|
46
|
-
control: false;
|
|
47
|
-
};
|
|
48
|
-
renderLink: {
|
|
49
|
-
control: false;
|
|
50
|
-
};
|
|
51
|
-
};
|
|
52
|
-
};
|
|
53
|
-
export default meta;
|
|
54
|
-
type Story = StoryObj<typeof SidebarNav>;
|
|
55
|
-
export declare const Default: Story;
|
|
56
|
-
export declare const CollapsedPanel: Story;
|
|
57
|
-
export declare const ConfigDriven: Story;
|
|
58
|
-
export declare const WithFavourites: Story;
|
|
59
|
-
export declare const ConfigDrivenWithFavourites: Story;
|
|
60
|
-
export declare const WithRenderLink: Story;
|
|
61
|
-
//# sourceMappingURL=SidebarNav.stories.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarNav.stories.d.ts","sourceRoot":"","sources":["../../../src/components/sidebarNav/SidebarNav.stories.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAK5D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA2F7C,iBAAS,kBAAkB,4CAmB1B;AAED,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwByB,CAAC;AAEpC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAC;AA4RzC,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,KAMxC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC"}
|
|
@@ -1,253 +0,0 @@
|
|
|
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 { Badge } from '../badge/Badge.js';
|
|
4
|
-
import { Icon } from '../icon/Icon.js';
|
|
5
|
-
import { useMemo, useState } from 'react';
|
|
6
|
-
import { fn } from 'storybook/test';
|
|
7
|
-
import { SidebarNav } from './SidebarNav.js';
|
|
8
|
-
const DESCRIPTION_INTRO = [
|
|
9
|
-
'SidebarNav is a two-part navigation pattern: a fixed icon rail for global shortcuts and an expandable',
|
|
10
|
-
'panel for hierarchical section links. Place a `<Separator />` after the burger to divide the panel toggle',
|
|
11
|
-
'from the rest of the rail icons.',
|
|
12
|
-
].join('\n');
|
|
13
|
-
const USAGE_GUIDANCE = [
|
|
14
|
-
'### When to use',
|
|
15
|
-
'',
|
|
16
|
-
'- **Application shell navigation** — persistent rail icons (home, favourites, calendar) plus contextual section nav',
|
|
17
|
-
'- **MIS module navigation** — attendance, students, or reporting areas with grouped links',
|
|
18
|
-
'- **Favourites on leaf links** — `canFavourite` on panel items for user-pinned pages',
|
|
19
|
-
'',
|
|
20
|
-
'---',
|
|
21
|
-
'',
|
|
22
|
-
'### When NOT to use',
|
|
23
|
-
'',
|
|
24
|
-
'| Situation | Use instead |',
|
|
25
|
-
'|---|---|',
|
|
26
|
-
'| Horizontal top-level product nav | [`Menubar`](?path=/docs/components-menubar--docs) or app header patterns |',
|
|
27
|
-
'| Single flat list of links | [`Tabs`](?path=/docs/components-tabs--docs) or plain links |',
|
|
28
|
-
'| Account / settings menu | [`Dropdown`](?path=/docs/components-dropdown--docs) |',
|
|
29
|
-
].join('\n');
|
|
30
|
-
const DEVELOPER_NOTES = [
|
|
31
|
-
'### Rail layout',
|
|
32
|
-
'',
|
|
33
|
-
'The rail is a single vertical column. Compose **`Trigger` → `SidebarNav.Separator` → `RailList`** (icon rows).',
|
|
34
|
-
'Insert additional `<SidebarNav.Separator />` siblings between `RailList` blocks when Figma shows a break',
|
|
35
|
-
'(e.g. main shortcuts, emergency alert, help). `RailItem` and `RailSlot` each render their own',
|
|
36
|
-
'`<li>` row wrapper — do not add `ds-sidebar-nav__*` layout classes in consumer code. Use `RailSlot` for other',
|
|
37
|
-
'custom rail rows inside `RailList`.',
|
|
38
|
-
'',
|
|
39
|
-
'The rail `<nav>` defaults to `aria-label="Sidebar rail"`; the panel links nav defaults to `"Sidebar links"`.',
|
|
40
|
-
'Override via `ariaLabel` on `SidebarNav.Rail` or `SidebarNav.PanelNav` when needed.',
|
|
41
|
-
'',
|
|
42
|
-
'### Config-driven API',
|
|
43
|
-
'',
|
|
44
|
-
'Pass `railItems` as an ordered array of item configs and `{ type: \'separator\', id }` entries. Use',
|
|
45
|
-
'`opensPanel: true` on the burger item to render the panel trigger. Use `renderItem` for custom rail rows.',
|
|
46
|
-
'',
|
|
47
|
-
'### Favourites',
|
|
48
|
-
'',
|
|
49
|
-
'Panel leaf items support `canFavourite`, `isPressed`, `onFavouriteClick`, and required `favouriteTooltip` when',
|
|
50
|
-
'`canFavourite` is true (sets `aria-label` and shows a tooltip on hover/focus). The favourite `<button>` is a',
|
|
51
|
-
'sibling of the link (not inside the `<a>`), with `aria-pressed` reflecting state. Persistence is the',
|
|
52
|
-
'consumer\'s responsibility.',
|
|
53
|
-
'',
|
|
54
|
-
'The panel toggle (`SidebarNav.Trigger`) always shows tooltip **Show/hide sub navigation** (override via `tooltip` prop).',
|
|
55
|
-
'',
|
|
56
|
-
'### `renderLink`',
|
|
57
|
-
'',
|
|
58
|
-
'Provide `renderLink` at the root to integrate with your router. Panel items also support `linkElement="button"`',
|
|
59
|
-
'with `linkElementProps` for SPA actions without a URL. Data-driven items accept `href` and/or `onClick`.',
|
|
60
|
-
'Top-level `onClick` takes precedence over `linkElementProps.onClick` when both are set.',
|
|
61
|
-
'When `renderLink` is set, both `linkProps` and `linkElementProps` are forwarded in the args — spread them onto your router link (same order as the default `<a>`: `linkProps` then `linkElementProps`).',
|
|
62
|
-
'Also spread `ariaLabel`, `ariaCurrent`, and `onClick` from the args as appropriate.',
|
|
63
|
-
'',
|
|
64
|
-
'Pass `railItems={[]}` to render an intentionally empty data-driven rail. Omit `railItems` to compose the rail with JSX children.',
|
|
65
|
-
'',
|
|
66
|
-
'For data-driven rail items, pass `iconColor` as a design-token CSS value (e.g. `var(--icons-icon-default)` or `var(--color-semantic-warning-600)`), not hardcoded hex.',
|
|
67
|
-
'',
|
|
68
|
-
'The root provider passes shared state (panel open/closed, `renderLink`) to rail and panel subcomponents.',
|
|
69
|
-
'',
|
|
70
|
-
'---',
|
|
71
|
-
'',
|
|
72
|
-
'### Test IDs',
|
|
73
|
-
'',
|
|
74
|
-
'| Element | `data-testid` |',
|
|
75
|
-
'|---|---|',
|
|
76
|
-
'| Root | `sidebar-nav` |',
|
|
77
|
-
'| Rail | `sidebar-nav-rail` |',
|
|
78
|
-
'| Panel / trigger | `sidebar-nav-panel`, `sidebar-nav-panel-trigger`, `sidebar-nav-panel-trigger-{id}` |',
|
|
79
|
-
'| Rail item | `sidebar-nav-rail-item-{id}` |',
|
|
80
|
-
'| Rail separator | `sidebar-nav-rail-separator-{id}` |',
|
|
81
|
-
'| Panel item / favourite | `sidebar-nav-panel-item-{itemId}`, `sidebar-nav-panel-item-favourite-{itemId}` — `itemId` is required on composable `SidebarNav.Item` |',
|
|
82
|
-
].join('\n');
|
|
83
|
-
const RELATED_COMPONENTS = [
|
|
84
|
-
'## Related components',
|
|
85
|
-
'',
|
|
86
|
-
'[Dropdown](?path=/docs/components-dropdown--docs) · [Tooltip](?path=/docs/components-tooltip--docs) ·',
|
|
87
|
-
'[Badge](?path=/docs/components-badge--docs) · [Separator](?path=/docs/components-separator--docs) ·',
|
|
88
|
-
'[IconText](?path=/docs/components-icontext--docs)',
|
|
89
|
-
].join('\n');
|
|
90
|
-
const PROPS_INTRO = 'The preview below is wired to the **Controls** panel where applicable.';
|
|
91
|
-
function SidebarNavDocsPage() {
|
|
92
|
-
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 })] }));
|
|
93
|
-
}
|
|
94
|
-
const meta = {
|
|
95
|
-
title: 'Components/SidebarNav',
|
|
96
|
-
component: SidebarNav,
|
|
97
|
-
parameters: {
|
|
98
|
-
layout: 'padded',
|
|
99
|
-
docs: {
|
|
100
|
-
page: SidebarNavDocsPage,
|
|
101
|
-
},
|
|
102
|
-
},
|
|
103
|
-
tags: ['autodocs'],
|
|
104
|
-
args: {
|
|
105
|
-
onExpandedChange: fn(),
|
|
106
|
-
},
|
|
107
|
-
argTypes: {
|
|
108
|
-
defaultExpanded: {
|
|
109
|
-
control: 'boolean',
|
|
110
|
-
description: 'Initial panel open state when uncontrolled.',
|
|
111
|
-
table: { defaultValue: { summary: 'true' } },
|
|
112
|
-
},
|
|
113
|
-
children: { control: false },
|
|
114
|
-
railItems: { control: false },
|
|
115
|
-
panelNavItems: { control: false },
|
|
116
|
-
renderLink: { control: false },
|
|
117
|
-
},
|
|
118
|
-
};
|
|
119
|
-
export default meta;
|
|
120
|
-
const withDescription = (story, description) => ({
|
|
121
|
-
...story,
|
|
122
|
-
parameters: {
|
|
123
|
-
...story.parameters,
|
|
124
|
-
docs: {
|
|
125
|
-
...story.parameters?.docs,
|
|
126
|
-
description: { story: description },
|
|
127
|
-
},
|
|
128
|
-
},
|
|
129
|
-
});
|
|
130
|
-
const storyWrapperStyle = { height: 640 };
|
|
131
|
-
const basePanelNavItems = [
|
|
132
|
-
{
|
|
133
|
-
type: 'group',
|
|
134
|
-
id: 'registers',
|
|
135
|
-
label: 'Registers',
|
|
136
|
-
defaultExpanded: true,
|
|
137
|
-
children: [
|
|
138
|
-
{ type: 'item', id: 'covid', label: 'Covid-19 Dashboard', href: '/covid' },
|
|
139
|
-
{
|
|
140
|
-
type: 'item',
|
|
141
|
-
id: 'daily',
|
|
142
|
-
label: 'Daily Attendance',
|
|
143
|
-
href: '/daily',
|
|
144
|
-
current: true,
|
|
145
|
-
canFavourite: true,
|
|
146
|
-
isPressed: false,
|
|
147
|
-
favouriteTooltip: 'Add to favourites',
|
|
148
|
-
},
|
|
149
|
-
{ type: 'item', id: 'quick', label: 'Quick Follow-Up', href: '/quick' },
|
|
150
|
-
],
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
type: 'group',
|
|
154
|
-
id: 'absentees',
|
|
155
|
-
label: 'Absentees',
|
|
156
|
-
children: [
|
|
157
|
-
{ type: 'item', id: 'late', label: 'Latecomers', href: '/latecomers' },
|
|
158
|
-
{ type: 'item', id: 'stats', label: 'Statistics', href: '/statistics' },
|
|
159
|
-
],
|
|
160
|
-
},
|
|
161
|
-
];
|
|
162
|
-
const figmaRailItems = [
|
|
163
|
-
{
|
|
164
|
-
id: 'burger',
|
|
165
|
-
label: 'Show/hide sub navigation',
|
|
166
|
-
iconName: 'menu',
|
|
167
|
-
opensPanel: true,
|
|
168
|
-
},
|
|
169
|
-
{ type: 'separator', id: 'after-burger' },
|
|
170
|
-
{ id: 'favourites', label: 'Favourites', iconName: 'favourite-outline', href: '/favourites' },
|
|
171
|
-
{
|
|
172
|
-
id: 'notifications',
|
|
173
|
-
label: 'Notifications',
|
|
174
|
-
iconName: 'message-square-more',
|
|
175
|
-
href: '/notifications',
|
|
176
|
-
badgeContent: _jsx(Badge, { size: "sm", colour: "salmon", children: "6" }),
|
|
177
|
-
},
|
|
178
|
-
{ id: 'calendar', label: 'My Calendar', iconName: 'date', href: '/calendar' },
|
|
179
|
-
{ type: 'separator', id: 'before-emergency' },
|
|
180
|
-
{
|
|
181
|
-
id: 'emergency',
|
|
182
|
-
label: 'Emergency Alerts',
|
|
183
|
-
iconName: 'triangle-alert',
|
|
184
|
-
href: '/emergency',
|
|
185
|
-
},
|
|
186
|
-
{ type: 'separator', id: 'before-help' },
|
|
187
|
-
{
|
|
188
|
-
id: 'help',
|
|
189
|
-
label: 'Help & Learn with Arbor',
|
|
190
|
-
iconName: 'circle-help',
|
|
191
|
-
href: '/help',
|
|
192
|
-
},
|
|
193
|
-
];
|
|
194
|
-
const SidebarNavShell = ({ children }) => (_jsx("div", { style: storyWrapperStyle, children: children }));
|
|
195
|
-
/** Figma rail: burger → separator → shortcuts → separator → emergency → separator → help. */
|
|
196
|
-
const FigmaRailComposition = () => (_jsxs(_Fragment, { children: [_jsx(SidebarNav.Trigger, { children: _jsx(Icon, { name: "menu", size: 24 }) }), _jsx(SidebarNav.Separator, { id: "after-burger" }), _jsxs(SidebarNav.RailList, { children: [_jsx(SidebarNav.RailItem, { href: "/favourites", "aria-label": "Favourites", children: _jsx(Icon, { name: "favourite-outline", size: 24 }) }), _jsxs(SidebarNav.RailItem, { href: "/notifications", "aria-label": "Notifications", children: [_jsx(Icon, { name: "message-square-more", size: 24 }), _jsx(Badge, { size: "sm", colour: "salmon", children: "6" })] }), _jsx(SidebarNav.RailItem, { href: "/calendar", "aria-label": "My Calendar", children: _jsx(Icon, { name: "date", size: 24 }) })] }), _jsx(SidebarNav.Separator, { id: "before-emergency" }), _jsx(SidebarNav.RailList, { children: _jsx(SidebarNav.RailItem, { href: "/emergency", "aria-label": "Emergency Alerts", children: _jsx(Icon, { name: "triangle-alert", size: 24 }) }) }), _jsx(SidebarNav.Separator, { id: "before-help" }), _jsx(SidebarNav.RailList, { children: _jsx(SidebarNav.RailItem, { href: "/help", "aria-label": "Help & Learn with Arbor", children: _jsx(Icon, { name: "circle-help", size: 24 }) }) })] }));
|
|
197
|
-
const DefaultTemplate = () => (_jsx(SidebarNavShell, { children: _jsxs(SidebarNav, { children: [_jsx(SidebarNav.Rail, { children: _jsx(FigmaRailComposition, {}) }), _jsxs(SidebarNav.Panel, { children: [_jsx(SidebarNav.Title, { children: "Attendance" }), _jsx(SidebarNav.PanelNav, { items: basePanelNavItems })] })] }) }));
|
|
198
|
-
const CollapsedPanelTemplate = () => (_jsx(SidebarNavShell, { children: _jsxs(SidebarNav, { defaultExpanded: false, children: [_jsxs(SidebarNav.Rail, { children: [_jsx(SidebarNav.Trigger, { children: _jsx(Icon, { name: "menu", size: 24 }) }), _jsx(SidebarNav.Separator, { id: "after-burger" }), _jsx(SidebarNav.RailList, { children: _jsx(SidebarNav.RailItem, { href: "/favourites", "aria-label": "Favourites", children: _jsx(Icon, { name: "favourite-outline", size: 24 }) }) })] }), _jsxs(SidebarNav.Panel, { children: [_jsx(SidebarNav.Title, { children: "Attendance" }), _jsx(SidebarNav.PanelNav, { items: [] })] })] }) }));
|
|
199
|
-
const ConfigDrivenTemplate = () => (_jsx(SidebarNavShell, { children: _jsx(SidebarNav, { railItems: figmaRailItems, panelTitle: "Attendance", panelNavItems: basePanelNavItems }) }));
|
|
200
|
-
const WithFavouritesTemplate = () => {
|
|
201
|
-
const [favourites, setFavourites] = useState({ daily: true });
|
|
202
|
-
const toggle = (id) => {
|
|
203
|
-
setFavourites(prev => ({ ...prev, [id]: !prev[id] }));
|
|
204
|
-
};
|
|
205
|
-
return (_jsx(SidebarNavShell, { children: _jsxs(SidebarNav, { children: [_jsxs(SidebarNav.Rail, { children: [_jsx(SidebarNav.Trigger, { children: _jsx(Icon, { name: "menu", size: 24 }) }), _jsx(SidebarNav.Separator, { id: "after-burger" })] }), _jsxs(SidebarNav.Panel, { children: [_jsx(SidebarNav.Title, { children: "Attendance" }), _jsxs(SidebarNav.PanelNav, { children: [_jsx(SidebarNav.Item, { href: "/daily", itemId: "daily", current: true, canFavourite: true, isPressed: Boolean(favourites.daily), favouriteTooltip: favourites.daily ? 'Remove from favourites' : 'Add to favourites', onFavouriteClick: () => toggle('daily'), children: "Daily Attendance" }), _jsx(SidebarNav.Item, { href: "/quick", itemId: "quick", children: "Quick Follow-Up" })] })] })] }) }));
|
|
206
|
-
};
|
|
207
|
-
const ConfigDrivenWithFavouritesTemplate = () => {
|
|
208
|
-
const [favourites, setFavourites] = useState({ daily: true });
|
|
209
|
-
const panelNavItems = useMemo(() => basePanelNavItems.map(node => (node.type === 'group'
|
|
210
|
-
? {
|
|
211
|
-
...node,
|
|
212
|
-
children: node.children.map((child) => {
|
|
213
|
-
if (child.id !== 'daily') {
|
|
214
|
-
return child;
|
|
215
|
-
}
|
|
216
|
-
return {
|
|
217
|
-
...child,
|
|
218
|
-
canFavourite: true,
|
|
219
|
-
isPressed: Boolean(favourites.daily),
|
|
220
|
-
favouriteTooltip: favourites.daily ? 'Remove from favourites' : 'Add to favourites',
|
|
221
|
-
onFavouriteClick: () => setFavourites(prev => ({ ...prev, daily: !prev.daily })),
|
|
222
|
-
};
|
|
223
|
-
}),
|
|
224
|
-
}
|
|
225
|
-
: node)), [favourites.daily]);
|
|
226
|
-
return (_jsx(SidebarNavShell, { children: _jsx(SidebarNav, { railItems: figmaRailItems, panelTitle: "Attendance", panelNavItems: panelNavItems }) }));
|
|
227
|
-
};
|
|
228
|
-
const WithRenderLinkTemplate = () => (_jsx(SidebarNavShell, { children: _jsxs(SidebarNav, { renderLink: ({ href, className, children, ariaCurrent, ariaLabel, onClick, linkProps, linkElementProps, }) => (_jsx("a", { href: href, className: className, "aria-current": ariaCurrent, "aria-label": ariaLabel, "data-router-link": "true", onClick: onClick ?? (e => e.preventDefault()), ...linkProps, ...linkElementProps, children: children })), children: [_jsxs(SidebarNav.Rail, { children: [_jsx(SidebarNav.Trigger, { children: _jsx(Icon, { name: "menu", size: 24 }) }), _jsx(SidebarNav.Separator, { id: "after-burger" })] }), _jsx(SidebarNav.Panel, { children: _jsx(SidebarNav.PanelNav, { items: [{ type: 'item', id: 'home', label: 'Home', href: '/' }] }) })] }) }));
|
|
229
|
-
export const Default = withDescription({
|
|
230
|
-
render: DefaultTemplate,
|
|
231
|
-
parameters: { controls: { disable: true } },
|
|
232
|
-
}, 'Composed rail: `Trigger`, separators between `RailList` sections (favourites/notifications/calendar, emergency, help). Panel uses `Trigger` ↔ `Panel` via context (`aria-controls` / `aria-expanded`).');
|
|
233
|
-
export const CollapsedPanel = withDescription({
|
|
234
|
-
render: CollapsedPanelTemplate,
|
|
235
|
-
parameters: { controls: { disable: true } },
|
|
236
|
-
}, 'Panel hidden by default (`defaultExpanded={false}`). Use the burger trigger to open the panel.');
|
|
237
|
-
export const ConfigDriven = withDescription({
|
|
238
|
-
render: ConfigDrivenTemplate,
|
|
239
|
-
parameters: { controls: { disable: true } },
|
|
240
|
-
}, 'Same Figma rail order via `railItems` (burger, `{ type: \'separator\' }` entries, then icons). Compare with **Default** for the composed `RailList` + `Separator` pattern.');
|
|
241
|
-
export const WithFavourites = withDescription({
|
|
242
|
-
render: WithFavouritesTemplate,
|
|
243
|
-
parameters: { controls: { disable: true } },
|
|
244
|
-
}, 'Composable panel items with `canFavourite`, `isPressed`, and `onFavouriteClick`. State is mocked in the story — wire to your store or API in MIS.');
|
|
245
|
-
export const ConfigDrivenWithFavourites = withDescription({
|
|
246
|
-
render: ConfigDrivenWithFavouritesTemplate,
|
|
247
|
-
parameters: { controls: { disable: true } },
|
|
248
|
-
}, 'Config-driven rail (`figmaRailItems`) and `panelNavItems` with favourite props merged from local state.');
|
|
249
|
-
export const WithRenderLink = withDescription({
|
|
250
|
-
render: WithRenderLinkTemplate,
|
|
251
|
-
parameters: { controls: { disable: true } },
|
|
252
|
-
}, 'Root `renderLink` replaces default `<a>` elements for router integration.');
|
|
253
|
-
//# sourceMappingURL=SidebarNav.stories.js.map
|