@arbor-education/design-system.components 0.25.9 → 1.0.1
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/.github/workflows/release.yml +3 -1
- package/.storybook/main.ts +12 -6
- package/CHANGELOG.md +20 -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/table/Table.d.ts.map +1 -1
- package/dist/components/table/Table.js +2 -1
- package/dist/components/table/Table.js.map +1 -1
- package/dist/components/table/Table.stories.d.ts.map +1 -1
- package/dist/components/table/Table.stories.js +24 -70
- package/dist/components/table/Table.stories.js.map +1 -1
- package/dist/components/table/cellEditors/DateCellEditor.stories.d.ts.map +1 -1
- package/dist/components/table/cellEditors/DateCellEditor.stories.js +16 -13
- package/dist/components/table/cellEditors/DateCellEditor.stories.js.map +1 -1
- package/dist/components/table/cellRenderers/BooleanCellRenderer.stories.d.ts.map +1 -1
- package/dist/components/table/cellRenderers/BooleanCellRenderer.stories.js +6 -7
- package/dist/components/table/cellRenderers/BooleanCellRenderer.stories.js.map +1 -1
- package/dist/components/table/cellRenderers/ButtonCellRenderer.stories.d.ts.map +1 -1
- package/dist/components/table/cellRenderers/ButtonCellRenderer.stories.js +7 -8
- package/dist/components/table/cellRenderers/ButtonCellRenderer.stories.js.map +1 -1
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.stories.d.ts.map +1 -1
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.stories.js +7 -8
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.stories.js.map +1 -1
- package/dist/components/table/cellRenderers/InlineTextCellRenderer.stories.d.ts.map +1 -1
- package/dist/components/table/cellRenderers/InlineTextCellRenderer.stories.js +7 -8
- package/dist/components/table/cellRenderers/InlineTextCellRenderer.stories.js.map +1 -1
- package/dist/components/table/cellRenderers/NumberInputCellRenderer.stories.d.ts.map +1 -1
- package/dist/components/table/cellRenderers/NumberInputCellRenderer.stories.js +12 -15
- package/dist/components/table/cellRenderers/NumberInputCellRenderer.stories.js.map +1 -1
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.d.ts.map +1 -1
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.js +19 -29
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.js.map +1 -1
- package/dist/components/table/columnTypes.d.ts +3 -0
- package/dist/components/table/columnTypes.d.ts.map +1 -0
- package/dist/components/table/columnTypes.js +55 -0
- package/dist/components/table/columnTypes.js.map +1 -0
- 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/toggleGroup/ToggleGroup.stories.js +1 -1
- package/dist/components/toggleGroup/ToggleGroup.stories.js.map +1 -1
- 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 +10 -11
- 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/table/Table.stories.tsx +24 -73
- package/src/components/table/Table.tsx +2 -0
- package/src/components/table/cellEditors/DateCellEditor.stories.tsx +16 -14
- package/src/components/table/cellRenderers/BooleanCellRenderer.stories.tsx +6 -7
- package/src/components/table/cellRenderers/ButtonCellRenderer.stories.tsx +7 -8
- package/src/components/table/cellRenderers/CheckboxCellRenderer.stories.tsx +7 -8
- package/src/components/table/cellRenderers/InlineTextCellRenderer.stories.tsx +7 -8
- package/src/components/table/cellRenderers/NumberInputCellRenderer.stories.tsx +12 -15
- package/src/components/table/cellRenderers/SelectDropdownCellRenderer.stories.tsx +19 -29
- package/src/components/table/columnTypes.ts +56 -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/toggleGroup/ToggleGroup.stories.tsx +1 -1
- 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,155 @@
|
|
|
1
|
+
import '@testing-library/jest-dom/vitest';
|
|
2
|
+
import { render, screen } from '@testing-library/react';
|
|
3
|
+
import userEvent from '@testing-library/user-event';
|
|
4
|
+
import { Icon } from 'Components/icon/Icon';
|
|
5
|
+
import { Separator } from 'Components/separator/Separator';
|
|
6
|
+
import { describe, expect, test, vi } from 'vitest';
|
|
7
|
+
import { Sidebar } from './Sidebar.js';
|
|
8
|
+
import { SidebarItem } from './SidebarItem.js';
|
|
9
|
+
|
|
10
|
+
describe('Sidebar', () => {
|
|
11
|
+
test('renders a nav element with default aria-label', () => {
|
|
12
|
+
render(<Sidebar />);
|
|
13
|
+
expect(screen.getByRole('navigation', { name: 'Sidebar' })).toBeInTheDocument();
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
test('renders a nav element with a custom ariaLabel', () => {
|
|
17
|
+
render(<Sidebar ariaLabel="App navigation" />);
|
|
18
|
+
expect(screen.getByRole('navigation', { name: 'App navigation' })).toBeInTheDocument();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
test('applies data-testid to the nav', () => {
|
|
22
|
+
render(<Sidebar />);
|
|
23
|
+
expect(screen.getByTestId('sidebar')).toBeInTheDocument();
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
describe('SidebarItem', () => {
|
|
28
|
+
test('renders an anchor when href is provided', () => {
|
|
29
|
+
render(
|
|
30
|
+
<Sidebar>
|
|
31
|
+
<SidebarItem href="/home" aria-label="Home">
|
|
32
|
+
<Icon name="menu" size={24} />
|
|
33
|
+
</SidebarItem>
|
|
34
|
+
</Sidebar>,
|
|
35
|
+
);
|
|
36
|
+
const link = screen.getByRole('link', { name: 'Home' });
|
|
37
|
+
expect(link).toBeInTheDocument();
|
|
38
|
+
expect(link).toHaveAttribute('href', '/home');
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test('renders a button when no href is provided', () => {
|
|
42
|
+
render(
|
|
43
|
+
<Sidebar>
|
|
44
|
+
<SidebarItem aria-label="Menu" onClick={vi.fn()}>
|
|
45
|
+
<Icon name="menu" size={24} />
|
|
46
|
+
</SidebarItem>
|
|
47
|
+
</Sidebar>,
|
|
48
|
+
);
|
|
49
|
+
const button = screen.getByRole('button', { name: 'Menu' });
|
|
50
|
+
expect(button).toBeInTheDocument();
|
|
51
|
+
expect(button.tagName).toBe('BUTTON');
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test('applies selected class and aria-current when current is true on a link', () => {
|
|
55
|
+
render(
|
|
56
|
+
<Sidebar>
|
|
57
|
+
<SidebarItem href="/home" aria-label="Home" selected>
|
|
58
|
+
<Icon name="menu" size={24} />
|
|
59
|
+
</SidebarItem>
|
|
60
|
+
</Sidebar>,
|
|
61
|
+
);
|
|
62
|
+
const link = screen.getByRole('link', { name: 'Home' });
|
|
63
|
+
expect(link).toHaveClass('ds-sidebar__item--selected');
|
|
64
|
+
expect(link).toHaveAttribute('aria-current', 'true');
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test('applies selected class on a button when selected is true', () => {
|
|
68
|
+
render(
|
|
69
|
+
<Sidebar>
|
|
70
|
+
<SidebarItem aria-label="Menu" selected onClick={vi.fn()}>
|
|
71
|
+
<Icon name="menu" size={24} />
|
|
72
|
+
</SidebarItem>
|
|
73
|
+
</Sidebar>,
|
|
74
|
+
);
|
|
75
|
+
const button = screen.getByRole('button', { name: 'Menu' });
|
|
76
|
+
expect(button).toHaveClass('ds-sidebar__item--selected');
|
|
77
|
+
expect(button).toHaveAttribute('aria-current', 'true');
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
test('does not apply selected class or aria-current when current is false', () => {
|
|
81
|
+
render(
|
|
82
|
+
<Sidebar>
|
|
83
|
+
<SidebarItem href="/home" aria-label="Home">
|
|
84
|
+
<Icon name="menu" size={24} />
|
|
85
|
+
</SidebarItem>
|
|
86
|
+
</Sidebar>,
|
|
87
|
+
);
|
|
88
|
+
const link = screen.getByRole('link', { name: 'Home' });
|
|
89
|
+
expect(link).not.toHaveClass('ds-sidebar__item--selected');
|
|
90
|
+
expect(link).toHaveAttribute('aria-current', 'false');
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
test('calls onClick when the button is clicked', async () => {
|
|
94
|
+
const onClick = vi.fn();
|
|
95
|
+
render(
|
|
96
|
+
<Sidebar>
|
|
97
|
+
<SidebarItem aria-label="Menu" onClick={onClick}>
|
|
98
|
+
<Icon name="menu" size={24} />
|
|
99
|
+
</SidebarItem>
|
|
100
|
+
</Sidebar>,
|
|
101
|
+
);
|
|
102
|
+
await userEvent.click(screen.getByRole('button', { name: 'Menu' }));
|
|
103
|
+
expect(onClick).toHaveBeenCalledOnce();
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
test('passes through extra HTML attributes to the button', () => {
|
|
107
|
+
render(
|
|
108
|
+
<Sidebar>
|
|
109
|
+
<SidebarItem
|
|
110
|
+
aria-label="Toggle nav"
|
|
111
|
+
aria-expanded={false}
|
|
112
|
+
aria-controls="nav-panel"
|
|
113
|
+
onClick={vi.fn()}
|
|
114
|
+
>
|
|
115
|
+
<Icon name="menu" size={24} />
|
|
116
|
+
</SidebarItem>
|
|
117
|
+
</Sidebar>,
|
|
118
|
+
);
|
|
119
|
+
const button = screen.getByRole('button', { name: 'Toggle nav' });
|
|
120
|
+
expect(button).toHaveAttribute('aria-expanded', 'false');
|
|
121
|
+
expect(button).toHaveAttribute('aria-controls', 'nav-panel');
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
test('applies data-testid to the rendered element', () => {
|
|
125
|
+
render(
|
|
126
|
+
<Sidebar>
|
|
127
|
+
<SidebarItem href="/home" aria-label="Home" data-testid="home-item">
|
|
128
|
+
<Icon name="menu" size={24} />
|
|
129
|
+
</SidebarItem>
|
|
130
|
+
</Sidebar>,
|
|
131
|
+
);
|
|
132
|
+
expect(screen.getByTestId('home-item')).toBeInTheDocument();
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
describe('Sidebar + SidebarItem + Separator composition', () => {
|
|
137
|
+
test('renders items and a separator together', () => {
|
|
138
|
+
render(
|
|
139
|
+
<Sidebar ariaLabel="App navigation">
|
|
140
|
+
<SidebarItem href="/home" aria-label="Home">
|
|
141
|
+
<Icon name="menu" size={24} />
|
|
142
|
+
</SidebarItem>
|
|
143
|
+
<Separator orientation="horizontal" decorative />
|
|
144
|
+
<SidebarItem href="/calendar" aria-label="Calendar">
|
|
145
|
+
<Icon name="date" size={24} />
|
|
146
|
+
</SidebarItem>
|
|
147
|
+
</Sidebar>,
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
expect(screen.getByRole('navigation', { name: 'App navigation' })).toBeInTheDocument();
|
|
151
|
+
expect(screen.getByRole('link', { name: 'Home' })).toBeInTheDocument();
|
|
152
|
+
expect(screen.getByRole('link', { name: 'Calendar' })).toBeInTheDocument();
|
|
153
|
+
expect(document.querySelector('.ds-separator')).toBeInTheDocument();
|
|
154
|
+
});
|
|
155
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import classNames from 'classnames';
|
|
2
|
+
import { SidebarItem, type SidebarItemProps } from './SidebarItem.js';
|
|
3
|
+
|
|
4
|
+
export type SidebarProps = {
|
|
5
|
+
ariaLabel?: string;
|
|
6
|
+
} & React.HTMLAttributes<HTMLDivElement>;
|
|
7
|
+
|
|
8
|
+
export const Sidebar = (props: SidebarProps) => {
|
|
9
|
+
const { ariaLabel = 'Sidebar', className, children, ...rest } = props;
|
|
10
|
+
return (
|
|
11
|
+
<nav
|
|
12
|
+
aria-label={ariaLabel}
|
|
13
|
+
className={classNames('ds-sidebar', className)}
|
|
14
|
+
data-testid="sidebar"
|
|
15
|
+
{...rest}
|
|
16
|
+
>
|
|
17
|
+
{children}
|
|
18
|
+
</nav>
|
|
19
|
+
);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
Sidebar.Item = SidebarItem;
|
|
23
|
+
|
|
24
|
+
export namespace Sidebar {
|
|
25
|
+
export type Props = SidebarProps;
|
|
26
|
+
export type ItemProps = SidebarItemProps;
|
|
27
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import classNames from 'classnames';
|
|
2
|
+
import { Tooltip } from 'Components/tooltip/Tooltip.js';
|
|
3
|
+
|
|
4
|
+
export type SidebarItemProps = {
|
|
5
|
+
'href'?: string;
|
|
6
|
+
'selected'?: boolean;
|
|
7
|
+
'data-testid'?: string;
|
|
8
|
+
} & React.HTMLAttributes<HTMLElement>;
|
|
9
|
+
|
|
10
|
+
export const SidebarItem = (props: SidebarItemProps) => {
|
|
11
|
+
const {
|
|
12
|
+
href,
|
|
13
|
+
onClick,
|
|
14
|
+
selected,
|
|
15
|
+
'aria-label': ariaLabel,
|
|
16
|
+
'data-testid': dataTestId,
|
|
17
|
+
className,
|
|
18
|
+
children,
|
|
19
|
+
...rest
|
|
20
|
+
} = props;
|
|
21
|
+
|
|
22
|
+
const itemClassName = classNames(
|
|
23
|
+
'ds-sidebar__item',
|
|
24
|
+
{ 'ds-sidebar__item--selected': Boolean(selected) },
|
|
25
|
+
className,
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<Tooltip>
|
|
30
|
+
<Tooltip.Trigger>
|
|
31
|
+
{href
|
|
32
|
+
? (
|
|
33
|
+
<a
|
|
34
|
+
href={href}
|
|
35
|
+
className={itemClassName}
|
|
36
|
+
aria-current={selected ? 'true' : 'false'}
|
|
37
|
+
aria-label={ariaLabel}
|
|
38
|
+
onClick={onClick}
|
|
39
|
+
data-testid={dataTestId}
|
|
40
|
+
{...rest}
|
|
41
|
+
>
|
|
42
|
+
{children}
|
|
43
|
+
</a>
|
|
44
|
+
)
|
|
45
|
+
: (
|
|
46
|
+
<button
|
|
47
|
+
type="button"
|
|
48
|
+
className={itemClassName}
|
|
49
|
+
aria-current={selected ? 'true' : 'false'}
|
|
50
|
+
aria-label={ariaLabel}
|
|
51
|
+
onClick={onClick}
|
|
52
|
+
data-testid={dataTestId}
|
|
53
|
+
{...rest}
|
|
54
|
+
>
|
|
55
|
+
{children}
|
|
56
|
+
</button>
|
|
57
|
+
)}
|
|
58
|
+
</Tooltip.Trigger>
|
|
59
|
+
<Tooltip.Content side="right">
|
|
60
|
+
{ariaLabel}
|
|
61
|
+
</Tooltip.Content>
|
|
62
|
+
</Tooltip>
|
|
63
|
+
);
|
|
64
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
.ds-sidebar {
|
|
2
|
+
margin: 0;
|
|
3
|
+
width: var(--sidebar-nav-rail-width);
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
align-items: center;
|
|
7
|
+
padding: var(--spacing-small);
|
|
8
|
+
gap: var(--spacing-large);
|
|
9
|
+
box-sizing: border-box;
|
|
10
|
+
border-right: var(--border-weight) solid var(--page-base-color-border);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.ds-sidebar__item {
|
|
14
|
+
position: relative;
|
|
15
|
+
display: inline-flex;
|
|
16
|
+
align-items: center;
|
|
17
|
+
justify-content: center;
|
|
18
|
+
width: var(--sidebar-nav-rail-item-size);
|
|
19
|
+
height: var(--sidebar-nav-rail-item-size);
|
|
20
|
+
background: transparent;
|
|
21
|
+
border: 0;
|
|
22
|
+
padding: 0;
|
|
23
|
+
border-radius: var(--border-radius-round);
|
|
24
|
+
color: var(--sidebar-nav-rail-item-color-icon);
|
|
25
|
+
cursor: pointer;
|
|
26
|
+
text-decoration: none;
|
|
27
|
+
|
|
28
|
+
&:hover,
|
|
29
|
+
&:active,
|
|
30
|
+
&[data-state='delayed-open'],
|
|
31
|
+
&[data-state='instant-open'],
|
|
32
|
+
&[data-state='open'] {
|
|
33
|
+
color: var(--sidebar-nav-rail-item-color-icon-hover);
|
|
34
|
+
background: var(--sidebar-nav-rail-item-color-background-hover);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
&:focus {
|
|
38
|
+
outline: none;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
&:focus-visible {
|
|
42
|
+
outline: none;
|
|
43
|
+
box-shadow: 0 0 0 var(--focus-border) var(--focus-color-focus);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.ds-sidebar__item--selected {
|
|
48
|
+
color: var(--sidebar-nav-rail-item-color-icon-selected);
|
|
49
|
+
background: var(--sidebar-nav-rail-item-color-background-selected);
|
|
50
|
+
|
|
51
|
+
&:hover,
|
|
52
|
+
&:active,
|
|
53
|
+
&[data-state='delayed-open'],
|
|
54
|
+
&[data-state='instant-open'],
|
|
55
|
+
&[data-state='open'] {
|
|
56
|
+
color: var(--sidebar-nav-rail-item-color-icon-selected);
|
|
57
|
+
background: var(--sidebar-nav-rail-item-color-background-selected);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.ds-sidebar__item .ds-badge {
|
|
62
|
+
position: absolute;
|
|
63
|
+
top: var(--spacing-xsmall);
|
|
64
|
+
right: var(--spacing-xsmall);
|
|
65
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
|
-
import { fn } from '
|
|
2
|
+
import { fn } from 'storybook/test';
|
|
3
3
|
import {
|
|
4
4
|
Controls,
|
|
5
5
|
Heading as DocHeading,
|
|
@@ -503,7 +503,7 @@ const sampleColumnDefs: (ColDef | ColGroupDef)[] = [
|
|
|
503
503
|
{
|
|
504
504
|
field: 'marks',
|
|
505
505
|
cellDataType: 'number',
|
|
506
|
-
|
|
506
|
+
type: 'dsNumberColumn',
|
|
507
507
|
cellEditorParams: {
|
|
508
508
|
min: 0,
|
|
509
509
|
max: 100,
|
|
@@ -1042,11 +1042,7 @@ const sampleColumnDefsWithButtonCellRenderer: (ColDef | ColGroupDef)[] = [
|
|
|
1042
1042
|
{
|
|
1043
1043
|
field: 'name',
|
|
1044
1044
|
headerTooltip: 'The name of the user',
|
|
1045
|
-
|
|
1046
|
-
cellRendererParams: {
|
|
1047
|
-
suppressCellFocusAndFocusFirstElement: true,
|
|
1048
|
-
},
|
|
1049
|
-
editable: false,
|
|
1045
|
+
type: 'dsButtonColumn',
|
|
1050
1046
|
},
|
|
1051
1047
|
{
|
|
1052
1048
|
field: 'email',
|
|
@@ -1370,13 +1366,7 @@ export const WithInlineTextCellRenderer: Story = {
|
|
|
1370
1366
|
columnDefs: [
|
|
1371
1367
|
{
|
|
1372
1368
|
field: 'name',
|
|
1373
|
-
|
|
1374
|
-
cellRendererParams: {
|
|
1375
|
-
suppressCellFocusAndFocusFirstElement: true,
|
|
1376
|
-
suppressCount: true,
|
|
1377
|
-
suppressDoubleClickExpand: true,
|
|
1378
|
-
suppressEnterExpand: true,
|
|
1379
|
-
},
|
|
1369
|
+
type: 'dsInlineTextColumn',
|
|
1380
1370
|
},
|
|
1381
1371
|
],
|
|
1382
1372
|
defaultColDef,
|
|
@@ -1572,7 +1562,7 @@ const marksheetTidyTableColumnDefs: (ColDef | ColGroupDef)[] = [
|
|
|
1572
1562
|
{
|
|
1573
1563
|
headerName: 'Assessment Component',
|
|
1574
1564
|
field: 'assessmentComponent',
|
|
1575
|
-
|
|
1565
|
+
type: 'dsComboboxColumn',
|
|
1576
1566
|
cellRendererParams: (params: CustomCellRendererProps) => {
|
|
1577
1567
|
return {
|
|
1578
1568
|
options: assessmentComponentOptions,
|
|
@@ -1580,16 +1570,12 @@ const marksheetTidyTableColumnDefs: (ColDef | ColGroupDef)[] = [
|
|
|
1580
1570
|
hasError: params.node.data.assessmentComponent === 'comp-maths',
|
|
1581
1571
|
};
|
|
1582
1572
|
},
|
|
1583
|
-
editable: false,
|
|
1584
|
-
...Table.ComboboxCellRenderer.colDefDefaults,
|
|
1585
1573
|
},
|
|
1586
1574
|
{
|
|
1587
1575
|
headerName: 'Visibility',
|
|
1588
1576
|
field: 'visibility',
|
|
1589
|
-
|
|
1577
|
+
type: 'dsComboboxColumn',
|
|
1590
1578
|
cellRendererParams: { options: visibilityOptions, placeholder: 'Select' },
|
|
1591
|
-
editable: false,
|
|
1592
|
-
...Table.ComboboxCellRenderer.colDefDefaults,
|
|
1593
1579
|
},
|
|
1594
1580
|
{
|
|
1595
1581
|
headerName: 'Editable',
|
|
@@ -1973,29 +1959,17 @@ const dateEditorColDefs: (ColDef | ColGroupDef)[] = [
|
|
|
1973
1959
|
{
|
|
1974
1960
|
field: 'dateOfBirth',
|
|
1975
1961
|
headerName: 'Date of Birth',
|
|
1976
|
-
|
|
1977
|
-
valueFormatter: params =>
|
|
1978
|
-
params.value instanceof Date
|
|
1979
|
-
? params.value.toLocaleDateString('en-GB')
|
|
1980
|
-
: params.value ?? '',
|
|
1962
|
+
type: 'dsDateColumn',
|
|
1981
1963
|
},
|
|
1982
1964
|
{
|
|
1983
1965
|
field: 'enrollmentDate',
|
|
1984
1966
|
headerName: 'Enrollment Date',
|
|
1985
|
-
|
|
1986
|
-
valueFormatter: params =>
|
|
1987
|
-
params.value instanceof Date
|
|
1988
|
-
? params.value.toLocaleDateString('en-GB')
|
|
1989
|
-
: params.value ?? '',
|
|
1967
|
+
type: 'dsDateColumn',
|
|
1990
1968
|
},
|
|
1991
1969
|
{
|
|
1992
1970
|
field: 'graduationDate',
|
|
1993
1971
|
headerName: 'Graduation Date',
|
|
1994
|
-
|
|
1995
|
-
valueFormatter: params =>
|
|
1996
|
-
params.value instanceof Date
|
|
1997
|
-
? params.value.toLocaleDateString('en-GB')
|
|
1998
|
-
: params.value ?? '',
|
|
1972
|
+
type: 'dsDateColumn',
|
|
1999
1973
|
},
|
|
2000
1974
|
];
|
|
2001
1975
|
|
|
@@ -2039,14 +2013,12 @@ const booleanCellRendererColumnDefs: ColDef<BooleanRowData>[] = [
|
|
|
2039
2013
|
{
|
|
2040
2014
|
field: 'hasPet',
|
|
2041
2015
|
headerName: 'Has Pet',
|
|
2042
|
-
|
|
2043
|
-
editable: false,
|
|
2016
|
+
type: 'dsBooleanColumn',
|
|
2044
2017
|
},
|
|
2045
2018
|
{
|
|
2046
2019
|
field: 'isEnrolled',
|
|
2047
2020
|
headerName: 'Is Enrolled',
|
|
2048
|
-
|
|
2049
|
-
editable: false,
|
|
2021
|
+
type: 'dsBooleanColumn',
|
|
2050
2022
|
},
|
|
2051
2023
|
];
|
|
2052
2024
|
|
|
@@ -2129,20 +2101,12 @@ const checkboxColumnDefs: ColDef[] = [
|
|
|
2129
2101
|
{
|
|
2130
2102
|
field: 'attended',
|
|
2131
2103
|
headerName: 'Attended',
|
|
2132
|
-
|
|
2133
|
-
cellRendererParams: {
|
|
2134
|
-
suppressCellFocusAndFocusFirstElement: true,
|
|
2135
|
-
},
|
|
2136
|
-
editable: false,
|
|
2104
|
+
type: 'dsCheckboxColumn',
|
|
2137
2105
|
},
|
|
2138
2106
|
{
|
|
2139
2107
|
field: 'consented',
|
|
2140
2108
|
headerName: 'Consented',
|
|
2141
|
-
|
|
2142
|
-
cellRendererParams: {
|
|
2143
|
-
suppressCellFocusAndFocusFirstElement: true,
|
|
2144
|
-
},
|
|
2145
|
-
editable: false,
|
|
2109
|
+
type: 'dsCheckboxColumn',
|
|
2146
2110
|
},
|
|
2147
2111
|
];
|
|
2148
2112
|
|
|
@@ -2273,23 +2237,20 @@ const selectDropdownColDefs: (ColDef | ColGroupDef)[] = [
|
|
|
2273
2237
|
{
|
|
2274
2238
|
field: 'status',
|
|
2275
2239
|
headerName: 'Status',
|
|
2276
|
-
|
|
2240
|
+
type: 'dsSelectDropdownColumn',
|
|
2277
2241
|
cellRendererParams: { options: statusOptions, placeholder: 'Select status' },
|
|
2278
|
-
editable: false,
|
|
2279
2242
|
},
|
|
2280
2243
|
{
|
|
2281
2244
|
field: 'priority',
|
|
2282
2245
|
headerName: 'Priority',
|
|
2283
|
-
|
|
2246
|
+
type: 'dsSelectDropdownColumn',
|
|
2284
2247
|
cellRendererParams: { options: priorityOptions, placeholder: 'Select priority' },
|
|
2285
|
-
editable: false,
|
|
2286
2248
|
},
|
|
2287
2249
|
{
|
|
2288
2250
|
field: 'category',
|
|
2289
2251
|
headerName: 'Category',
|
|
2290
|
-
|
|
2252
|
+
type: 'dsSelectDropdownColumn',
|
|
2291
2253
|
cellRendererParams: { options: categoryOptions, placeholder: 'Select category' },
|
|
2292
|
-
editable: false,
|
|
2293
2254
|
},
|
|
2294
2255
|
];
|
|
2295
2256
|
|
|
@@ -2361,34 +2322,26 @@ const comboboxColDefs: (ColDef | ColGroupDef)[] = [
|
|
|
2361
2322
|
{
|
|
2362
2323
|
field: 'subject',
|
|
2363
2324
|
headerName: 'Subject (single, input)',
|
|
2364
|
-
|
|
2325
|
+
type: 'dsComboboxColumn',
|
|
2365
2326
|
cellRendererParams: { options: subjectOptions, placeholder: 'Select subject' },
|
|
2366
|
-
editable: false,
|
|
2367
|
-
...Table.ComboboxCellRenderer.colDefDefaults,
|
|
2368
2327
|
},
|
|
2369
2328
|
{
|
|
2370
2329
|
field: 'level',
|
|
2371
2330
|
headerName: 'Level (single, button)',
|
|
2372
|
-
|
|
2331
|
+
type: 'dsComboboxColumn',
|
|
2373
2332
|
cellRendererParams: { options: levelOptions, placeholder: 'Select level', triggerVariant: 'button' },
|
|
2374
|
-
editable: false,
|
|
2375
|
-
...Table.ComboboxCellRenderer.colDefDefaults,
|
|
2376
2333
|
},
|
|
2377
2334
|
{
|
|
2378
2335
|
field: 'tags',
|
|
2379
2336
|
headerName: 'Tags (multi, button)',
|
|
2380
|
-
|
|
2337
|
+
type: 'dsComboboxColumn',
|
|
2381
2338
|
cellRendererParams: { options: tagOptions, placeholder: 'Select tags', multiple: true, triggerVariant: 'button' },
|
|
2382
|
-
editable: false,
|
|
2383
|
-
...Table.ComboboxCellRenderer.colDefDefaults,
|
|
2384
2339
|
},
|
|
2385
2340
|
{
|
|
2386
2341
|
field: 'skills',
|
|
2387
2342
|
headerName: 'Skills (multi, input)',
|
|
2388
|
-
|
|
2343
|
+
type: 'dsComboboxColumn',
|
|
2389
2344
|
cellRendererParams: { options: skillOptions, placeholder: 'Select skills', multiple: true },
|
|
2390
|
-
editable: false,
|
|
2391
|
-
...Table.ComboboxCellRenderer.colDefDefaults,
|
|
2392
2345
|
},
|
|
2393
2346
|
];
|
|
2394
2347
|
|
|
@@ -2422,17 +2375,15 @@ const numberInputColDefs: (ColDef | ColGroupDef)[] = [
|
|
|
2422
2375
|
field: 'sessions',
|
|
2423
2376
|
headerName: 'Sessions',
|
|
2424
2377
|
flex: 1,
|
|
2425
|
-
|
|
2426
|
-
|
|
2427
|
-
cellRendererParams: { min: 0, suppressCellFocusAndFocusFirstElement: true },
|
|
2378
|
+
type: 'dsNumberInputColumn',
|
|
2379
|
+
cellRendererParams: { min: 0 },
|
|
2428
2380
|
},
|
|
2429
2381
|
{
|
|
2430
2382
|
field: 'score',
|
|
2431
2383
|
headerName: 'Score (/100)',
|
|
2432
2384
|
flex: 1,
|
|
2433
|
-
|
|
2434
|
-
|
|
2435
|
-
cellRendererParams: { min: 0, max: 100, suppressCellFocusAndFocusFirstElement: true },
|
|
2385
|
+
type: 'dsNumberInputColumn',
|
|
2386
|
+
cellRendererParams: { min: 0, max: 100 },
|
|
2436
2387
|
},
|
|
2437
2388
|
];
|
|
2438
2389
|
|
|
@@ -36,6 +36,7 @@ import { CheckboxCellRenderer } from './cellRenderers/CheckboxCellRenderer.js';
|
|
|
36
36
|
import { ComboboxCellRenderer } from './cellRenderers/ComboboxCellRenderer.js';
|
|
37
37
|
import { DefaultCellRenderer } from './cellRenderers/DefaultCellRenderer.js';
|
|
38
38
|
import { NumberInputCellRenderer } from './cellRenderers/NumberInputCellRenderer.js';
|
|
39
|
+
import { columnTypes } from './columnTypes.js';
|
|
39
40
|
|
|
40
41
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
42
|
type TableProps<TData = any> = {
|
|
@@ -214,6 +215,7 @@ export const Table = (props: TableProps) => {
|
|
|
214
215
|
dsNumberInputCellRenderer: NumberInputCellRenderer,
|
|
215
216
|
...components,
|
|
216
217
|
}}
|
|
218
|
+
columnTypes={columnTypes}
|
|
217
219
|
{...rest}
|
|
218
220
|
{...(hasSearch && { quickFilterText: searchValue })}
|
|
219
221
|
/>
|
|
@@ -21,7 +21,9 @@ const DESCRIPTION_INTRO = [
|
|
|
21
21
|
'`DateCellEditor` is an AG Grid cell editor component that renders an Arbor `DatePicker` inside a table cell.',
|
|
22
22
|
'It is invoked when a user begins editing a date column (e.g. by pressing Enter or double-clicking the cell).',
|
|
23
23
|
'',
|
|
24
|
-
'Register it via
|
|
24
|
+
'Register it via `type: \'dsDateColumn\'` on the column definition (pre-registered by Arbor\'s `Table`,',
|
|
25
|
+
'and also applies a `valueFormatter` that renders `Date` values as `en-GB` strings), or via the AG Grid',
|
|
26
|
+
'`cellEditor` column definition property directly.',
|
|
25
27
|
].join('\n');
|
|
26
28
|
|
|
27
29
|
const USAGE_GUIDANCE = [
|
|
@@ -35,12 +37,22 @@ const USAGE_GUIDANCE = [
|
|
|
35
37
|
'### Registration',
|
|
36
38
|
'',
|
|
37
39
|
'```tsx',
|
|
40
|
+
'const colDefs = [',
|
|
41
|
+
' {',
|
|
42
|
+
" field: 'dob',",
|
|
43
|
+
" headerName: 'Date of birth',",
|
|
44
|
+
" type: 'dsDateColumn', // preferred — pre-registered on Arbor's Table",
|
|
45
|
+
' },',
|
|
46
|
+
'];',
|
|
47
|
+
'',
|
|
48
|
+
'// or register the editor directly:',
|
|
38
49
|
"import { DateCellEditor } from '@arbor-education/design-system.components';",
|
|
39
50
|
'',
|
|
40
51
|
'const colDefs = [',
|
|
41
52
|
' {',
|
|
42
53
|
" field: 'dob',",
|
|
43
54
|
" headerName: 'Date of birth',",
|
|
55
|
+
' editable: true,',
|
|
44
56
|
' cellEditor: DateCellEditor,',
|
|
45
57
|
' // or via string key:',
|
|
46
58
|
" cellEditor: 'dsDateCellEditor',",
|
|
@@ -200,12 +212,7 @@ function DateCellEditorExample() {
|
|
|
200
212
|
field: 'dateOfBirth',
|
|
201
213
|
headerName: 'Date of birth',
|
|
202
214
|
flex: 1,
|
|
203
|
-
|
|
204
|
-
cellEditor: 'dsDateCellEditor',
|
|
205
|
-
valueFormatter: (params) =>
|
|
206
|
-
params.value instanceof Date
|
|
207
|
-
? params.value.toLocaleDateString('en-GB')
|
|
208
|
-
: params.value,
|
|
215
|
+
type: 'dsDateColumn',
|
|
209
216
|
},
|
|
210
217
|
]}
|
|
211
218
|
defaultColDef={{ flex: 1, minWidth: 120 }}
|
|
@@ -228,12 +235,7 @@ export default DateCellEditorExample;
|
|
|
228
235
|
field: 'dateOfBirth',
|
|
229
236
|
headerName: 'Date of birth',
|
|
230
237
|
flex: 1,
|
|
231
|
-
|
|
232
|
-
cellEditor: 'dsDateCellEditor',
|
|
233
|
-
valueFormatter: params =>
|
|
234
|
-
params.value instanceof Date
|
|
235
|
-
? params.value.toLocaleDateString('en-GB')
|
|
236
|
-
: params.value,
|
|
238
|
+
type: 'dsDateColumn',
|
|
237
239
|
},
|
|
238
240
|
]}
|
|
239
241
|
defaultColDef={{ flex: 1, minWidth: 120 }}
|
|
@@ -241,5 +243,5 @@ export default DateCellEditorExample;
|
|
|
241
243
|
/>
|
|
242
244
|
),
|
|
243
245
|
},
|
|
244
|
-
'`
|
|
246
|
+
'`type: \'dsDateColumn\'` wired up inside a full `Table`. Double-click (or press F2/Enter) on a Date of birth cell to open the `DatePicker` editor — AG Grid mounts the editor component and passes the current cell value as `value`. The column type\'s `valueFormatter` formats the stored `Date` object as a localised string for display.',
|
|
245
247
|
);
|
|
@@ -21,7 +21,8 @@ const DESCRIPTION_INTRO = [
|
|
|
21
21
|
'A `true` value renders a green check icon; a `false` value renders a red ✕ icon;',
|
|
22
22
|
'any other value (including `null` and `undefined`) renders nothing.',
|
|
23
23
|
'',
|
|
24
|
-
'Register it via the
|
|
24
|
+
'Register it via `type: \'dsBooleanColumn\'` on the column definition (pre-registered by Arbor\'s `Table`),',
|
|
25
|
+
'via the string key `dsBooleanCellRenderer`, or by importing the component directly.',
|
|
25
26
|
].join('\n');
|
|
26
27
|
|
|
27
28
|
const USAGE_GUIDANCE = [
|
|
@@ -55,7 +56,7 @@ const DEVELOPER_NOTES = [
|
|
|
55
56
|
' {',
|
|
56
57
|
" field: 'isActive',",
|
|
57
58
|
" headerName: 'Active',",
|
|
58
|
-
"
|
|
59
|
+
" type: 'dsBooleanColumn', // pre-registered column type — no import needed",
|
|
59
60
|
' },',
|
|
60
61
|
'];',
|
|
61
62
|
'```',
|
|
@@ -241,8 +242,7 @@ function BooleanCellRendererExample() {
|
|
|
241
242
|
field: 'active',
|
|
242
243
|
headerName: 'Active',
|
|
243
244
|
flex: 1,
|
|
244
|
-
|
|
245
|
-
cellRenderer: 'dsBooleanCellRenderer',
|
|
245
|
+
type: 'dsBooleanColumn',
|
|
246
246
|
},
|
|
247
247
|
]}
|
|
248
248
|
defaultColDef={{ flex: 1, minWidth: 120 }}
|
|
@@ -265,8 +265,7 @@ export default BooleanCellRendererExample;
|
|
|
265
265
|
field: 'active',
|
|
266
266
|
headerName: 'Active',
|
|
267
267
|
flex: 1,
|
|
268
|
-
|
|
269
|
-
cellRenderer: 'dsBooleanCellRenderer',
|
|
268
|
+
type: 'dsBooleanColumn',
|
|
270
269
|
},
|
|
271
270
|
]}
|
|
272
271
|
defaultColDef={{ flex: 1, minWidth: 120 }}
|
|
@@ -274,5 +273,5 @@ export default BooleanCellRendererExample;
|
|
|
274
273
|
/>
|
|
275
274
|
),
|
|
276
275
|
},
|
|
277
|
-
'`
|
|
276
|
+
'`type: \'dsBooleanColumn\'` wired up inside a full `Table`. `true` renders a check, `false` renders a ✕, and `null` leaves the cell empty. The column type sets `editable: false` — this renderer is display-only.',
|
|
278
277
|
);
|