@arbor-education/design-system.components 0.23.2 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/components/sidebarNav/SidebarNav.d.ts +46 -0
  3. package/dist/components/sidebarNav/SidebarNav.d.ts.map +1 -0
  4. package/dist/components/sidebarNav/SidebarNav.js +102 -0
  5. package/dist/components/sidebarNav/SidebarNav.js.map +1 -0
  6. package/dist/components/sidebarNav/SidebarNav.stories.d.ts +61 -0
  7. package/dist/components/sidebarNav/SidebarNav.stories.d.ts.map +1 -0
  8. package/dist/components/sidebarNav/SidebarNav.stories.js +253 -0
  9. package/dist/components/sidebarNav/SidebarNav.stories.js.map +1 -0
  10. package/dist/components/sidebarNav/SidebarNav.test.d.ts +2 -0
  11. package/dist/components/sidebarNav/SidebarNav.test.d.ts.map +1 -0
  12. package/dist/components/sidebarNav/SidebarNav.test.js +240 -0
  13. package/dist/components/sidebarNav/SidebarNav.test.js.map +1 -0
  14. package/dist/components/sidebarNav/SidebarNavContext.d.ts +13 -0
  15. package/dist/components/sidebarNav/SidebarNavContext.d.ts.map +1 -0
  16. package/dist/components/sidebarNav/SidebarNavContext.js +15 -0
  17. package/dist/components/sidebarNav/SidebarNavContext.js.map +1 -0
  18. package/dist/components/sidebarNav/SidebarNavGroup.d.ts +10 -0
  19. package/dist/components/sidebarNav/SidebarNavGroup.d.ts.map +1 -0
  20. package/dist/components/sidebarNav/SidebarNavGroup.js +16 -0
  21. package/dist/components/sidebarNav/SidebarNavGroup.js.map +1 -0
  22. package/dist/components/sidebarNav/SidebarNavItem.d.ts +32 -0
  23. package/dist/components/sidebarNav/SidebarNavItem.d.ts.map +1 -0
  24. package/dist/components/sidebarNav/SidebarNavItem.js +43 -0
  25. package/dist/components/sidebarNav/SidebarNavItem.js.map +1 -0
  26. package/dist/components/sidebarNav/SidebarNavItemFavourite.d.ts +8 -0
  27. package/dist/components/sidebarNav/SidebarNavItemFavourite.d.ts.map +1 -0
  28. package/dist/components/sidebarNav/SidebarNavItemFavourite.js +14 -0
  29. package/dist/components/sidebarNav/SidebarNavItemFavourite.js.map +1 -0
  30. package/dist/components/sidebarNav/SidebarNavPanel.d.ts +4 -0
  31. package/dist/components/sidebarNav/SidebarNavPanel.d.ts.map +1 -0
  32. package/dist/components/sidebarNav/SidebarNavPanel.js +9 -0
  33. package/dist/components/sidebarNav/SidebarNavPanel.js.map +1 -0
  34. package/dist/components/sidebarNav/SidebarNavPanelNav.d.ts +10 -0
  35. package/dist/components/sidebarNav/SidebarNavPanelNav.d.ts.map +1 -0
  36. package/dist/components/sidebarNav/SidebarNavPanelNav.js +21 -0
  37. package/dist/components/sidebarNav/SidebarNavPanelNav.js.map +1 -0
  38. package/dist/components/sidebarNav/SidebarNavRail.d.ts +6 -0
  39. package/dist/components/sidebarNav/SidebarNavRail.d.ts.map +1 -0
  40. package/dist/components/sidebarNav/SidebarNavRail.js +7 -0
  41. package/dist/components/sidebarNav/SidebarNavRail.js.map +1 -0
  42. package/dist/components/sidebarNav/SidebarNavRailItem.d.ts +10 -0
  43. package/dist/components/sidebarNav/SidebarNavRailItem.d.ts.map +1 -0
  44. package/dist/components/sidebarNav/SidebarNavRailItem.js +24 -0
  45. package/dist/components/sidebarNav/SidebarNavRailItem.js.map +1 -0
  46. package/dist/components/sidebarNav/SidebarNavRailList.d.ts +4 -0
  47. package/dist/components/sidebarNav/SidebarNavRailList.d.ts.map +1 -0
  48. package/dist/components/sidebarNav/SidebarNavRailList.js +7 -0
  49. package/dist/components/sidebarNav/SidebarNavRailList.js.map +1 -0
  50. package/dist/components/sidebarNav/SidebarNavRailSlot.d.ts +6 -0
  51. package/dist/components/sidebarNav/SidebarNavRailSlot.d.ts.map +1 -0
  52. package/dist/components/sidebarNav/SidebarNavRailSlot.js +7 -0
  53. package/dist/components/sidebarNav/SidebarNavRailSlot.js.map +1 -0
  54. package/dist/components/sidebarNav/SidebarNavSeparator.d.ts +6 -0
  55. package/dist/components/sidebarNav/SidebarNavSeparator.d.ts.map +1 -0
  56. package/dist/components/sidebarNav/SidebarNavSeparator.js +8 -0
  57. package/dist/components/sidebarNav/SidebarNavSeparator.js.map +1 -0
  58. package/dist/components/sidebarNav/SidebarNavTitle.d.ts +4 -0
  59. package/dist/components/sidebarNav/SidebarNavTitle.d.ts.map +1 -0
  60. package/dist/components/sidebarNav/SidebarNavTitle.js +7 -0
  61. package/dist/components/sidebarNav/SidebarNavTitle.js.map +1 -0
  62. package/dist/components/sidebarNav/SidebarNavTooltip.d.ts +7 -0
  63. package/dist/components/sidebarNav/SidebarNavTooltip.d.ts.map +1 -0
  64. package/dist/components/sidebarNav/SidebarNavTooltip.js +9 -0
  65. package/dist/components/sidebarNav/SidebarNavTooltip.js.map +1 -0
  66. package/dist/components/sidebarNav/SidebarNavTrigger.d.ts +8 -0
  67. package/dist/components/sidebarNav/SidebarNavTrigger.d.ts.map +1 -0
  68. package/dist/components/sidebarNav/SidebarNavTrigger.js +15 -0
  69. package/dist/components/sidebarNav/SidebarNavTrigger.js.map +1 -0
  70. package/dist/components/sidebarNav/index.d.ts +4 -0
  71. package/dist/components/sidebarNav/index.d.ts.map +1 -0
  72. package/dist/components/sidebarNav/index.js +3 -0
  73. package/dist/components/sidebarNav/index.js.map +1 -0
  74. package/dist/components/sidebarNav/resolvePanelItemProps.d.ts +4 -0
  75. package/dist/components/sidebarNav/resolvePanelItemProps.d.ts.map +1 -0
  76. package/dist/components/sidebarNav/resolvePanelItemProps.js +43 -0
  77. package/dist/components/sidebarNav/resolvePanelItemProps.js.map +1 -0
  78. package/dist/components/sidebarNav/resolvePanelItemProps.test.d.ts +2 -0
  79. package/dist/components/sidebarNav/resolvePanelItemProps.test.d.ts.map +1 -0
  80. package/dist/components/sidebarNav/resolvePanelItemProps.test.js +52 -0
  81. package/dist/components/sidebarNav/resolvePanelItemProps.test.js.map +1 -0
  82. package/dist/components/sidebarNav/types.d.ts +100 -0
  83. package/dist/components/sidebarNav/types.d.ts.map +1 -0
  84. package/dist/components/sidebarNav/types.js +4 -0
  85. package/dist/components/sidebarNav/types.js.map +1 -0
  86. package/dist/components/sidebarNav/useControllableBoolean.d.ts +9 -0
  87. package/dist/components/sidebarNav/useControllableBoolean.d.ts.map +1 -0
  88. package/dist/components/sidebarNav/useControllableBoolean.js +14 -0
  89. package/dist/components/sidebarNav/useControllableBoolean.js.map +1 -0
  90. package/dist/index.css +275 -0
  91. package/dist/index.css.map +1 -1
  92. package/dist/index.d.ts +3 -0
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +2 -0
  95. package/dist/index.js.map +1 -1
  96. package/package.json +1 -1
  97. package/src/components/sidebarNav/SidebarNav.stories.tsx +484 -0
  98. package/src/components/sidebarNav/SidebarNav.test.tsx +611 -0
  99. package/src/components/sidebarNav/SidebarNav.tsx +230 -0
  100. package/src/components/sidebarNav/SidebarNavContext.tsx +28 -0
  101. package/src/components/sidebarNav/SidebarNavGroup.tsx +59 -0
  102. package/src/components/sidebarNav/SidebarNavItem.tsx +160 -0
  103. package/src/components/sidebarNav/SidebarNavItemFavourite.tsx +49 -0
  104. package/src/components/sidebarNav/SidebarNavPanel.tsx +20 -0
  105. package/src/components/sidebarNav/SidebarNavPanelNav.tsx +55 -0
  106. package/src/components/sidebarNav/SidebarNavRail.tsx +20 -0
  107. package/src/components/sidebarNav/SidebarNavRailItem.tsx +84 -0
  108. package/src/components/sidebarNav/SidebarNavRailList.tsx +11 -0
  109. package/src/components/sidebarNav/SidebarNavRailSlot.tsx +15 -0
  110. package/src/components/sidebarNav/SidebarNavSeparator.tsx +19 -0
  111. package/src/components/sidebarNav/SidebarNavTitle.tsx +13 -0
  112. package/src/components/sidebarNav/SidebarNavTooltip.tsx +24 -0
  113. package/src/components/sidebarNav/SidebarNavTrigger.tsx +52 -0
  114. package/src/components/sidebarNav/index.ts +6 -0
  115. package/src/components/sidebarNav/resolvePanelItemProps.test.ts +57 -0
  116. package/src/components/sidebarNav/resolvePanelItemProps.ts +50 -0
  117. package/src/components/sidebarNav/sidebarNav.scss +283 -0
  118. package/src/components/sidebarNav/types.ts +126 -0
  119. package/src/components/sidebarNav/useControllableBoolean.ts +20 -0
  120. package/src/index.scss +1 -0
  121. package/src/index.ts +12 -0
  122. package/src/tokens.scss +14 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.24.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#199](https://github.com/arbor-education/design-system.components/pull/199) [`26542e8`](https://github.com/arbor-education/design-system.components/commit/26542e8c6382368b23b2b18b8e37bef58afbc8a9) Thanks [@danielpeplow](https://github.com/danielpeplow)! - Add SidebarNav compound component with icon rail slots, collapsible panel navigation, favourites, and help menu.
8
+
3
9
  ## 0.23.2
4
10
 
5
11
  ### Patch Changes
@@ -0,0 +1,46 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,102 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SidebarNav.js","sourceRoot":"","sources":["../../../src/components/sidebarNav/SidebarNav.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,253 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SidebarNav.stories.js","sourceRoot":"","sources":["../../../src/components/sidebarNav/SidebarNav.stories.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import '@testing-library/jest-dom/vitest';
2
+ //# sourceMappingURL=SidebarNav.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SidebarNav.test.d.ts","sourceRoot":"","sources":["../../../src/components/sidebarNav/SidebarNav.test.tsx"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC"}