@arbor-education/design-system.components 0.25.0 → 0.25.2

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 (235) hide show
  1. package/.gather/instructions/changesets.md +12 -0
  2. package/.gather/instructions/read-contributing.md +14 -0
  3. package/.storybook/DocsTemplate.tsx +3 -1
  4. package/.storybook/preview.ts +6 -2
  5. package/CHANGELOG.md +14 -0
  6. package/CONTRIBUTING.md +20 -0
  7. package/dist/components/avatarGroup/AvatarGroup.stories.d.ts.map +1 -1
  8. package/dist/components/avatarGroup/AvatarGroup.stories.js +4 -2
  9. package/dist/components/avatarGroup/AvatarGroup.stories.js.map +1 -1
  10. package/dist/components/card/Card.d.ts.map +1 -1
  11. package/dist/components/card/Card.js +2 -1
  12. package/dist/components/card/Card.js.map +1 -1
  13. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  14. package/dist/components/combobox/Combobox.js +10 -5
  15. package/dist/components/combobox/Combobox.js.map +1 -1
  16. package/dist/components/combobox/Combobox.stories.d.ts.map +1 -1
  17. package/dist/components/combobox/Combobox.stories.js +2 -1
  18. package/dist/components/combobox/Combobox.stories.js.map +1 -1
  19. package/dist/components/combobox/Combobox.test.js +18 -9
  20. package/dist/components/combobox/Combobox.test.js.map +1 -1
  21. package/dist/components/combobox/ComboboxButtonTrigger.d.ts.map +1 -1
  22. package/dist/components/combobox/ComboboxButtonTrigger.js +3 -1
  23. package/dist/components/combobox/ComboboxButtonTrigger.js.map +1 -1
  24. package/dist/components/combobox/ComboboxListbox.d.ts.map +1 -1
  25. package/dist/components/combobox/ComboboxListbox.js +8 -4
  26. package/dist/components/combobox/ComboboxListbox.js.map +1 -1
  27. package/dist/components/combobox/buildListboxDisplayOptions.d.ts.map +1 -1
  28. package/dist/components/combobox/buildListboxDisplayOptions.js +4 -2
  29. package/dist/components/combobox/buildListboxDisplayOptions.js.map +1 -1
  30. package/dist/components/combobox/highlightLabel.d.ts.map +1 -1
  31. package/dist/components/combobox/highlightLabel.js +2 -1
  32. package/dist/components/combobox/highlightLabel.js.map +1 -1
  33. package/dist/components/combobox/useChipSelection.d.ts.map +1 -1
  34. package/dist/components/combobox/useChipSelection.js +2 -1
  35. package/dist/components/combobox/useChipSelection.js.map +1 -1
  36. package/dist/components/combobox/useComboboxListboxKeyboard.d.ts.map +1 -1
  37. package/dist/components/combobox/useComboboxListboxKeyboard.js +8 -4
  38. package/dist/components/combobox/useComboboxListboxKeyboard.js.map +1 -1
  39. package/dist/components/combobox/useComboboxPopoverBehavior.d.ts.map +1 -1
  40. package/dist/components/combobox/useComboboxPopoverBehavior.js +16 -8
  41. package/dist/components/combobox/useComboboxPopoverBehavior.js.map +1 -1
  42. package/dist/components/combobox/useComboboxState.d.ts.map +1 -1
  43. package/dist/components/combobox/useComboboxState.js +22 -11
  44. package/dist/components/combobox/useComboboxState.js.map +1 -1
  45. package/dist/components/datePicker/DatePickerCalendarHeader.d.ts.map +1 -1
  46. package/dist/components/datePicker/DatePickerCalendarHeader.js +4 -2
  47. package/dist/components/datePicker/DatePickerCalendarHeader.js.map +1 -1
  48. package/dist/components/dateTimePicker/DateTimePicker.d.ts.map +1 -1
  49. package/dist/components/dateTimePicker/DateTimePicker.js +2 -1
  50. package/dist/components/dateTimePicker/DateTimePicker.js.map +1 -1
  51. package/dist/components/dateTimePicker/DateTimePicker.test.js.map +1 -1
  52. package/dist/components/dropdown/Dropdown.stories.d.ts.map +1 -1
  53. package/dist/components/dropdown/Dropdown.stories.js +10 -5
  54. package/dist/components/dropdown/Dropdown.stories.js.map +1 -1
  55. package/dist/components/filterBar/FilterBar.d.ts.map +1 -1
  56. package/dist/components/filterBar/FilterBar.js +4 -2
  57. package/dist/components/filterBar/FilterBar.js.map +1 -1
  58. package/dist/components/filterBar/FilterBar.stories.d.ts.map +1 -1
  59. package/dist/components/filterBar/FilterBar.stories.js +6 -3
  60. package/dist/components/filterBar/FilterBar.stories.js.map +1 -1
  61. package/dist/components/filterBar/FilterBar.test.js +6 -3
  62. package/dist/components/filterBar/FilterBar.test.js.map +1 -1
  63. package/dist/components/formField/fieldset/Fieldset.stories.d.ts.map +1 -1
  64. package/dist/components/formField/fieldset/Fieldset.stories.js.map +1 -1
  65. package/dist/components/formField/inputs/radio/RadioButtonGroup.d.ts +1 -1
  66. package/dist/components/formField/inputs/radio/RadioButtonGroup.d.ts.map +1 -1
  67. package/dist/components/formField/inputs/radio/RadioButtonGroup.js +1 -1
  68. package/dist/components/formField/inputs/radio/RadioButtonGroup.js.map +1 -1
  69. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.d.ts.map +1 -1
  70. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.js +2 -1
  71. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.js.map +1 -1
  72. package/dist/components/formField/inputs/textArea/TextArea.stories.d.ts.map +1 -1
  73. package/dist/components/formField/inputs/textArea/TextArea.stories.js +10 -5
  74. package/dist/components/formField/inputs/textArea/TextArea.stories.js.map +1 -1
  75. package/dist/components/formField/inputs/time/TimeInput.js +3 -4
  76. package/dist/components/formField/inputs/time/TimeInput.js.map +1 -1
  77. package/dist/components/formField/inputs/time/TimeInput.test.js.map +1 -1
  78. package/dist/components/heading/Heading.stories.d.ts.map +1 -1
  79. package/dist/components/heading/Heading.stories.js.map +1 -1
  80. package/dist/components/modal/Modal.stories.d.ts.map +1 -1
  81. package/dist/components/modal/Modal.stories.js.map +1 -1
  82. package/dist/components/progress/Progress.stories.d.ts.map +1 -1
  83. package/dist/components/progress/Progress.stories.js +2 -1
  84. package/dist/components/progress/Progress.stories.js.map +1 -1
  85. package/dist/components/row/Row.d.ts +4 -4
  86. package/dist/components/row/Row.d.ts.map +1 -1
  87. package/dist/components/row/Row.stories.d.ts +3 -0
  88. package/dist/components/row/Row.stories.d.ts.map +1 -1
  89. package/dist/components/row/Row.stories.js +96 -6
  90. package/dist/components/row/Row.stories.js.map +1 -1
  91. package/dist/components/row/Row.test.js +20 -0
  92. package/dist/components/row/Row.test.js.map +1 -1
  93. package/dist/components/sidebarNav/SidebarNavItem.d.ts.map +1 -1
  94. package/dist/components/sidebarNav/SidebarNavItem.js +12 -11
  95. package/dist/components/sidebarNav/SidebarNavItem.js.map +1 -1
  96. package/dist/components/sidebarNav/SidebarNavRailItem.d.ts.map +1 -1
  97. package/dist/components/sidebarNav/SidebarNavRailItem.js +11 -10
  98. package/dist/components/sidebarNav/SidebarNavRailItem.js.map +1 -1
  99. package/dist/components/sidebarNav/useControllableBoolean.d.ts.map +1 -1
  100. package/dist/components/sidebarNav/useControllableBoolean.js +2 -1
  101. package/dist/components/sidebarNav/useControllableBoolean.js.map +1 -1
  102. package/dist/components/table/Table.d.ts.map +1 -1
  103. package/dist/components/table/Table.js +11 -1
  104. package/dist/components/table/Table.js.map +1 -1
  105. package/dist/components/table/Table.stories.d.ts.map +1 -1
  106. package/dist/components/table/Table.stories.js +6 -2
  107. package/dist/components/table/Table.stories.js.map +1 -1
  108. package/dist/components/table/Table.test.js +9 -3
  109. package/dist/components/table/Table.test.js.map +1 -1
  110. package/dist/components/table/cellRenderers/ComboboxCellRenderer.d.ts.map +1 -1
  111. package/dist/components/table/cellRenderers/ComboboxCellRenderer.js +16 -8
  112. package/dist/components/table/cellRenderers/ComboboxCellRenderer.js.map +1 -1
  113. package/dist/components/table/columnFilters/TimeFilter/TimeFilter.d.ts.map +1 -1
  114. package/dist/components/table/columnFilters/TimeFilter/TimeFilter.js +2 -1
  115. package/dist/components/table/columnFilters/TimeFilter/TimeFilter.js.map +1 -1
  116. package/dist/components/table/tableControls/HideColumnsDropdown.d.ts.map +1 -1
  117. package/dist/components/table/tableControls/HideColumnsDropdown.js +2 -1
  118. package/dist/components/table/tableControls/HideColumnsDropdown.js.map +1 -1
  119. package/dist/components/table/tableControls/TableControls.d.ts.map +1 -1
  120. package/dist/components/table/tableControls/TableControls.js +2 -1
  121. package/dist/components/table/tableControls/TableControls.js.map +1 -1
  122. package/dist/components/tag/Tag.test.js.map +1 -1
  123. package/dist/components/tagList/TagList.d.ts.map +1 -1
  124. package/dist/components/tagList/TagList.js +8 -4
  125. package/dist/components/tagList/TagList.js.map +1 -1
  126. package/dist/components/tagList/TagList.test.js +6 -3
  127. package/dist/components/tagList/TagList.test.js.map +1 -1
  128. package/dist/components/toggleGroup/ToggleGroup.d.ts +29 -0
  129. package/dist/components/toggleGroup/ToggleGroup.d.ts.map +1 -0
  130. package/dist/components/toggleGroup/ToggleGroup.js +26 -0
  131. package/dist/components/toggleGroup/ToggleGroup.js.map +1 -0
  132. package/dist/components/toggleGroup/ToggleGroup.stories.d.ts +86 -0
  133. package/dist/components/toggleGroup/ToggleGroup.stories.d.ts.map +1 -0
  134. package/dist/components/toggleGroup/ToggleGroup.stories.js +342 -0
  135. package/dist/components/toggleGroup/ToggleGroup.stories.js.map +1 -0
  136. package/dist/components/toggleGroup/ToggleGroup.test.d.ts +2 -0
  137. package/dist/components/toggleGroup/ToggleGroup.test.d.ts.map +1 -0
  138. package/dist/components/toggleGroup/ToggleGroup.test.js +123 -0
  139. package/dist/components/toggleGroup/ToggleGroup.test.js.map +1 -0
  140. package/dist/components/toggleGroup/ToggleGroupItem.d.ts +10 -0
  141. package/dist/components/toggleGroup/ToggleGroupItem.d.ts.map +1 -0
  142. package/dist/components/toggleGroup/ToggleGroupItem.js +5 -0
  143. package/dist/components/toggleGroup/ToggleGroupItem.js.map +1 -0
  144. package/dist/components/treeRow/TreeRowSection.d.ts.map +1 -1
  145. package/dist/components/treeRow/TreeRowSection.js +2 -1
  146. package/dist/components/treeRow/TreeRowSection.js.map +1 -1
  147. package/dist/components/userDropdown/UserDropdown.stories.d.ts.map +1 -1
  148. package/dist/components/userDropdown/UserDropdown.stories.js +66 -22
  149. package/dist/components/userDropdown/UserDropdown.stories.js.map +1 -1
  150. package/dist/components/userDropdown/internal/UserDropdownCollapsibleSection.d.ts.map +1 -1
  151. package/dist/components/userDropdown/internal/UserDropdownCollapsibleSection.js +3 -1
  152. package/dist/components/userDropdown/internal/UserDropdownCollapsibleSection.js.map +1 -1
  153. package/dist/index.css +33 -0
  154. package/dist/index.css.map +1 -1
  155. package/dist/index.d.ts +1 -0
  156. package/dist/index.d.ts.map +1 -1
  157. package/dist/index.js +1 -0
  158. package/dist/index.js.map +1 -1
  159. package/dist/utils/getTextContrast.d.ts.map +1 -1
  160. package/dist/utils/getTextContrast.js +4 -2
  161. package/dist/utils/getTextContrast.js.map +1 -1
  162. package/dist/utils/hooks/useElementWidth.d.ts.map +1 -1
  163. package/dist/utils/hooks/useElementWidth.js +2 -1
  164. package/dist/utils/hooks/useElementWidth.js.map +1 -1
  165. package/dist/utils/hooks/useMeasuredChildWidths.d.ts.map +1 -1
  166. package/dist/utils/hooks/useMeasuredChildWidths.js +4 -2
  167. package/dist/utils/hooks/useMeasuredChildWidths.js.map +1 -1
  168. package/dist/utils/hooks/useRovingFocus.d.ts.map +1 -1
  169. package/dist/utils/hooks/useRovingFocus.js +8 -4
  170. package/dist/utils/hooks/useRovingFocus.js.map +1 -1
  171. package/dist/utils/spacedWidths.d.ts.map +1 -1
  172. package/dist/utils/spacedWidths.js +6 -3
  173. package/dist/utils/spacedWidths.js.map +1 -1
  174. package/eslint.config.mts +32 -1
  175. package/package.json +1 -1
  176. package/src/components/avatarGroup/AvatarGroup.stories.tsx +6 -2
  177. package/src/components/card/Card.tsx +3 -1
  178. package/src/components/combobox/Combobox.stories.tsx +3 -1
  179. package/src/components/combobox/Combobox.test.tsx +39 -11
  180. package/src/components/combobox/Combobox.tsx +15 -5
  181. package/src/components/combobox/ComboboxButtonTrigger.tsx +3 -1
  182. package/src/components/combobox/ComboboxListbox.tsx +12 -4
  183. package/src/components/combobox/buildListboxDisplayOptions.ts +6 -2
  184. package/src/components/combobox/highlightLabel.tsx +2 -1
  185. package/src/components/combobox/useChipSelection.ts +3 -1
  186. package/src/components/combobox/useComboboxListboxKeyboard.ts +12 -4
  187. package/src/components/combobox/useComboboxPopoverBehavior.ts +24 -8
  188. package/src/components/combobox/useComboboxState.ts +28 -11
  189. package/src/components/datePicker/DatePickerCalendarHeader.tsx +6 -2
  190. package/src/components/dateTimePicker/DateTimePicker.test.tsx +2 -0
  191. package/src/components/dateTimePicker/DateTimePicker.tsx +3 -1
  192. package/src/components/dropdown/Dropdown.stories.tsx +19 -8
  193. package/src/components/filterBar/FilterBar.stories.tsx +9 -3
  194. package/src/components/filterBar/FilterBar.test.tsx +9 -3
  195. package/src/components/filterBar/FilterBar.tsx +6 -2
  196. package/src/components/formField/fieldset/Fieldset.stories.tsx +18 -3
  197. package/src/components/formField/inputs/radio/RadioButtonGroup.tsx +1 -1
  198. package/src/components/formField/inputs/selectDropdown/SelectDropdown.tsx +3 -1
  199. package/src/components/formField/inputs/textArea/TextArea.stories.tsx +10 -5
  200. package/src/components/formField/inputs/time/TimeInput.test.tsx +2 -0
  201. package/src/components/formField/inputs/time/TimeInput.tsx +4 -4
  202. package/src/components/heading/Heading.stories.tsx +12 -3
  203. package/src/components/modal/Modal.stories.tsx +15 -5
  204. package/src/components/progress/Progress.stories.tsx +3 -1
  205. package/src/components/row/Row.stories.tsx +141 -6
  206. package/src/components/row/Row.test.tsx +23 -0
  207. package/src/components/row/Row.tsx +4 -4
  208. package/src/components/sidebarNav/SidebarNavItem.tsx +27 -25
  209. package/src/components/sidebarNav/SidebarNavRailItem.tsx +34 -35
  210. package/src/components/sidebarNav/useControllableBoolean.ts +3 -1
  211. package/src/components/table/Table.stories.tsx +16 -12
  212. package/src/components/table/Table.test.tsx +10 -4
  213. package/src/components/table/Table.tsx +15 -5
  214. package/src/components/table/cellRenderers/ComboboxCellRenderer.tsx +19 -8
  215. package/src/components/table/columnFilters/TimeFilter/TimeFilter.tsx +3 -1
  216. package/src/components/table/tableControls/HideColumnsDropdown.tsx +3 -1
  217. package/src/components/table/tableControls/TableControls.tsx +3 -1
  218. package/src/components/tag/Tag.test.tsx +40 -8
  219. package/src/components/tagList/TagList.test.tsx +9 -3
  220. package/src/components/tagList/TagList.tsx +12 -4
  221. package/src/components/toggleGroup/ToggleGroup.stories.tsx +429 -0
  222. package/src/components/toggleGroup/ToggleGroup.test.tsx +155 -0
  223. package/src/components/toggleGroup/ToggleGroup.tsx +74 -0
  224. package/src/components/toggleGroup/ToggleGroupItem.tsx +24 -0
  225. package/src/components/toggleGroup/toggleGroup.scss +43 -0
  226. package/src/components/treeRow/TreeRowSection.tsx +3 -1
  227. package/src/components/userDropdown/UserDropdown.stories.tsx +66 -22
  228. package/src/components/userDropdown/internal/UserDropdownCollapsibleSection.tsx +3 -1
  229. package/src/index.scss +1 -0
  230. package/src/index.ts +1 -0
  231. package/src/utils/getTextContrast.ts +6 -2
  232. package/src/utils/hooks/useElementWidth.ts +3 -1
  233. package/src/utils/hooks/useMeasuredChildWidths.ts +6 -2
  234. package/src/utils/hooks/useRovingFocus.ts +12 -4
  235. package/src/utils/spacedWidths.ts +9 -3
@@ -0,0 +1,43 @@
1
+ .ds-toggle-group {
2
+ display: inline-flex;
3
+ border-radius: var(--border-radius-round);
4
+ border: var(--toggle-weight-border) solid var(--color-grey-100);
5
+ padding: var(--border-radius-small);
6
+ gap: 8px;
7
+ align-items: center;
8
+
9
+ .ds-toggle-group__item {
10
+ &--red {
11
+ background-color: var(--color-semantic-destructive-100);
12
+ color: var(--color-semantic-destructive-700);
13
+
14
+ &:focus,
15
+ &:hover {
16
+ background-color: var(--color-semantic-destructive-100);
17
+ color: var(--color-semantic-destructive-700);
18
+ }
19
+ }
20
+
21
+ &--yellow {
22
+ background-color: var(--color-semantic-caution-100);
23
+ color: var(--color-semantic-caution-700);
24
+
25
+ &:focus,
26
+ &:hover {
27
+ background-color: var(--color-semantic-caution-100);
28
+ color: var(--color-semantic-caution-700);
29
+ }
30
+ }
31
+
32
+ &--green {
33
+ background-color: var(--color-semantic-success-100);
34
+ color: var(--color-semantic-success-700);
35
+
36
+ &:focus,
37
+ &:hover {
38
+ background-color: var(--color-semantic-success-100);
39
+ color: var(--color-semantic-success-700);
40
+ }
41
+ }
42
+ }
43
+ }
@@ -7,7 +7,9 @@ import { Icon } from 'Components/icon/Icon';
7
7
  export const DepthContext = createContext(0);
8
8
 
9
9
  export function getDepthPadding(depth: number): string {
10
- if (depth === 0) return 'var(--section-list-row-spacing-horizontal)';
10
+ if (depth === 0) {
11
+ return 'var(--section-list-row-spacing-horizontal)';
12
+ }
11
13
  return `calc(var(--spacing-xxlarge, 32px) * ${depth})`;
12
14
  }
13
15
 
@@ -45,17 +45,23 @@ export const Default: Story = {
45
45
  {
46
46
  logo: <AppLogo src={logoArborWorkflows} alt="Arbor Workflows" />,
47
47
  name: 'Arbor Workflows',
48
- onClick: () => { console.log('Open Arbor Workflows'); },
48
+ onClick: () => {
49
+ console.log('Open Arbor Workflows');
50
+ },
49
51
  },
50
52
  {
51
53
  logo: <AppLogo src={logoGovernorHub} alt="GovernorHub" />,
52
54
  name: 'GovernorHub',
53
- onClick: () => { console.log('Open GovernorHub'); },
55
+ onClick: () => {
56
+ console.log('Open GovernorHub');
57
+ },
54
58
  },
55
59
  {
56
60
  logo: <AppLogo src={logoTheKey} alt="The Key" />,
57
61
  name: 'The Key',
58
- onClick: () => { console.log('Open The Key'); },
62
+ onClick: () => {
63
+ console.log('Open The Key');
64
+ },
59
65
  },
60
66
  ],
61
67
  },
@@ -68,30 +74,42 @@ export const Default: Story = {
68
74
  logo: <AppLogo src={logoArborWorkflows} alt="Arbor Finance" />,
69
75
  name: 'Arbor Finance',
70
76
  description: 'Cloud-based accounting',
71
- onClick: () => { console.log('Open Arbor Finance'); },
77
+ onClick: () => {
78
+ console.log('Open Arbor Finance');
79
+ },
72
80
  },
73
81
  {
74
82
  logo: <AppLogo src={logoRobin} alt="Robin" />,
75
83
  name: 'Robin',
76
84
  description: 'AI website compliance checks',
77
- onClick: () => { console.log('Open Robin'); },
85
+ onClick: () => {
86
+ console.log('Open Robin');
87
+ },
78
88
  },
79
89
  {
80
90
  logo: <AppLogo src={logoSamPeople} alt="SAMPeople" />,
81
91
  name: 'SAMPeople',
82
92
  description: 'HR and recruitment',
83
- onClick: () => { console.log('Open SAMPeople'); },
93
+ onClick: () => {
94
+ console.log('Open SAMPeople');
95
+ },
84
96
  },
85
97
  {
86
98
  logo: <AppLogo src={logoTimetabler} alt="Timetabler" />,
87
99
  name: 'Timetabler',
88
100
  description: 'Schedule timetables and more',
89
- onClick: () => { console.log('Open Timetabler'); },
101
+ onClick: () => {
102
+ console.log('Open Timetabler');
103
+ },
90
104
  },
91
105
  ],
92
106
  },
93
- userInfoAction: { type: 'link', onClick: () => { console.log('View profile'); } },
94
- onSignOut: () => { console.log('Sign out'); },
107
+ userInfoAction: { type: 'link', onClick: () => {
108
+ console.log('View profile');
109
+ } },
110
+ onSignOut: () => {
111
+ console.log('Sign out');
112
+ },
95
113
  signOutLabel: 'Sign out of Arbor',
96
114
  },
97
115
  };
@@ -107,12 +125,18 @@ export const WithApps: Story = {
107
125
  {
108
126
  label: 'Quick Actions',
109
127
  apps: [
110
- { name: 'Settings', onClick: () => { console.log('Settings'); } },
111
- { name: 'Help', onClick: () => { console.log('Help'); } },
128
+ { name: 'Settings', onClick: () => {
129
+ console.log('Settings');
130
+ } },
131
+ { name: 'Help', onClick: () => {
132
+ console.log('Help');
133
+ } },
112
134
  ],
113
135
  },
114
136
  ],
115
- onSignOut: () => { console.log('Sign out'); },
137
+ onSignOut: () => {
138
+ console.log('Sign out');
139
+ },
116
140
  },
117
141
  };
118
142
 
@@ -123,7 +147,9 @@ export const Minimal: Story = {
123
147
  avatarInitials: 'CM',
124
148
  avatarAlt: 'Christine Montgomery',
125
149
  },
126
- onSignOut: () => { console.log('Sign out'); },
150
+ onSignOut: () => {
151
+ console.log('Sign out');
152
+ },
127
153
  },
128
154
  };
129
155
 
@@ -144,7 +170,9 @@ export const WithMenu: Story = {
144
170
  {
145
171
  logo: <AppLogo src={logoArborWorkflows} alt="Arbor Workflows" />,
146
172
  name: 'Arbor Workflows',
147
- onClick: () => { console.log('Open Arbor Workflows'); },
173
+ onClick: () => {
174
+ console.log('Open Arbor Workflows');
175
+ },
148
176
  },
149
177
  ],
150
178
  },
@@ -152,12 +180,20 @@ export const WithMenu: Story = {
152
180
  userInfoAction: {
153
181
  type: 'menu',
154
182
  items: [
155
- { label: 'Help centre', onClick: () => { console.log('Help centre'); } },
156
- { label: 'About', onClick: () => { console.log('About'); } },
157
- { label: 'Leave feedback', onClick: () => { console.log('Leave feedback'); } },
183
+ { label: 'Help centre', onClick: () => {
184
+ console.log('Help centre');
185
+ } },
186
+ { label: 'About', onClick: () => {
187
+ console.log('About');
188
+ } },
189
+ { label: 'Leave feedback', onClick: () => {
190
+ console.log('Leave feedback');
191
+ } },
158
192
  ],
159
193
  },
160
- onSignOut: () => { console.log('Sign out'); },
194
+ onSignOut: () => {
195
+ console.log('Sign out');
196
+ },
161
197
  signOutLabel: 'Sign out of Arbor',
162
198
  },
163
199
  };
@@ -180,12 +216,16 @@ export const DarkVariant: Story = {
180
216
  {
181
217
  logo: <AppLogo src={logoArborWorkflows} alt="Arbor Workflows" />,
182
218
  name: 'Arbor Workflows',
183
- onClick: () => { console.log('Open Arbor Workflows'); },
219
+ onClick: () => {
220
+ console.log('Open Arbor Workflows');
221
+ },
184
222
  },
185
223
  ],
186
224
  },
187
225
  ],
188
- onSignOut: () => { console.log('Sign out'); },
226
+ onSignOut: () => {
227
+ console.log('Sign out');
228
+ },
189
229
  signOutLabel: 'Sign out of Arbor',
190
230
  },
191
231
  parameters: {
@@ -216,12 +256,16 @@ export const LightVariant: Story = {
216
256
  {
217
257
  logo: <AppLogo src={logoArborWorkflows} alt="Arbor Workflows" />,
218
258
  name: 'Arbor Workflows',
219
- onClick: () => { console.log('Open Arbor Workflows'); },
259
+ onClick: () => {
260
+ console.log('Open Arbor Workflows');
261
+ },
220
262
  },
221
263
  ],
222
264
  },
223
265
  ],
224
- onSignOut: () => { console.log('Sign out'); },
266
+ onSignOut: () => {
267
+ console.log('Sign out');
268
+ },
225
269
  signOutLabel: 'Sign out of Arbor',
226
270
  },
227
271
  parameters: {
@@ -18,7 +18,9 @@ export const UserDropdownCollapsibleSection = (props: UserDropdownCollapsibleSec
18
18
  <div className="ds-user-dropdown__collapsible-section">
19
19
  <div
20
20
  className="ds-user-dropdown__collapsible-section-header"
21
- onClick={() => { setIsOpen(!isOpen); }}
21
+ onClick={() => {
22
+ setIsOpen(!isOpen);
23
+ }}
22
24
  role="button"
23
25
  tabIndex={0}
24
26
  aria-expanded={isOpen}
package/src/index.scss CHANGED
@@ -53,6 +53,7 @@
53
53
  @use "components/row/row.scss";
54
54
  @use "components/combobox/combobox.scss";
55
55
  @use "components/toggle/toggle.scss";
56
+ @use "components/toggleGroup/toggleGroup.scss";
56
57
  @use "components/dataViewCard/dataViewCard.scss";
57
58
  @use "components/treeRow/treeRow.scss";
58
59
  @use "components/sidebarNav/sidebarNav.scss";
package/src/index.ts CHANGED
@@ -74,6 +74,7 @@ export { TagList } from 'Components/tagList/TagList';
74
74
  export type { TagListItem, TagListOverflowRenderArgs, TagListOverflowTarget, TagListProps } from 'Components/tagList/TagList';
75
75
  export { Toast } from 'Components/toast/Toast';
76
76
  export { Toggle } from 'Components/toggle/Toggle';
77
+ export { ToggleGroup } from 'Components/toggleGroup/ToggleGroup';
77
78
  export { Tooltip } from 'Components/tooltip/Tooltip';
78
79
  export { TooltipWrapper } from 'Components/tooltip/TooltipWrapper';
79
80
  export { GovhubLogo, KeyLogo, RobinLogo, SampeopleLogo, TimetablerLogo } from 'Components/userDropdown/assets/logos';
@@ -4,8 +4,12 @@ export const getTextContrast = (color: string): TextContrast => {
4
4
  const CONTRAST_THRESHOLD = 128;
5
5
 
6
6
  let hex = color.trim().replace('#', '');
7
- if (hex.length === 3) hex = hex.split('').map(c => c + c).join('');
8
- if (hex.length !== 6 || /[^0-9a-f]/i.test(hex)) return 'dark';
7
+ if (hex.length === 3) {
8
+ hex = hex.split('').map(c => c + c).join('');
9
+ }
10
+ if (hex.length !== 6 || /[^0-9a-f]/i.test(hex)) {
11
+ return 'dark';
12
+ }
9
13
  const r = parseInt(hex.slice(0, 2), 16);
10
14
  const g = parseInt(hex.slice(2, 4), 16);
11
15
  const b = parseInt(hex.slice(4, 6), 16);
@@ -25,7 +25,9 @@ export const useElementWidth = (
25
25
  }, [update, watchKey]);
26
26
 
27
27
  useLayoutEffect(() => {
28
- if (!element) return;
28
+ if (!element) {
29
+ return;
30
+ }
29
31
 
30
32
  const observer = new ResizeObserver(update);
31
33
  observer.observe(element);
@@ -7,7 +7,9 @@ type MeasuredChildWidths = {
7
7
  };
8
8
 
9
9
  const getTrackGap = (trackElement: HTMLElement | null): number => {
10
- if (!trackElement) return 0;
10
+ if (!trackElement) {
11
+ return 0;
12
+ }
11
13
 
12
14
  const styles = getComputedStyle(trackElement);
13
15
  const parsedGap = Number.parseFloat(styles.columnGap || styles.gap || '0');
@@ -15,7 +17,9 @@ const getTrackGap = (trackElement: HTMLElement | null): number => {
15
17
  };
16
18
 
17
19
  const getChildWidths = (trackElement: HTMLElement | null): number[] => {
18
- if (!trackElement) return [];
20
+ if (!trackElement) {
21
+ return [];
22
+ }
19
23
 
20
24
  return Array.from(trackElement.children).map((child) => {
21
25
  const width = (child as HTMLElement).getBoundingClientRect().width;
@@ -49,7 +49,9 @@ export const useRovingFocus = <Target extends string>({
49
49
 
50
50
  const queueFocusRecovery = useCallback((target: Target) => {
51
51
  const targetIndex = targets.indexOf(target);
52
- if (targetIndex < 0) return;
52
+ if (targetIndex < 0) {
53
+ return;
54
+ }
53
55
 
54
56
  pendingFocusRecoveryRef.current = { targetIndex };
55
57
  }, [targets]);
@@ -69,7 +71,9 @@ export const useRovingFocus = <Target extends string>({
69
71
 
70
72
  useLayoutEffect(() => {
71
73
  const pendingFocusRecovery = pendingFocusRecoveryRef.current;
72
- if (!pendingFocusRecovery) return;
74
+ if (!pendingFocusRecovery) {
75
+ return;
76
+ }
73
77
 
74
78
  pendingFocusRecoveryRef.current = null;
75
79
 
@@ -87,7 +91,9 @@ export const useRovingFocus = <Target extends string>({
87
91
  }, [moveFocus, returnFocusRef, setActiveTarget, targets]);
88
92
 
89
93
  useLayoutEffect(() => () => {
90
- if (!pendingFocusRecoveryRef.current) return;
94
+ if (!pendingFocusRecoveryRef.current) {
95
+ return;
96
+ }
91
97
 
92
98
  pendingFocusRecoveryRef.current = null;
93
99
  returnFocusRefRef.current?.current?.focus();
@@ -95,7 +101,9 @@ export const useRovingFocus = <Target extends string>({
95
101
 
96
102
  const handleTargetKeyDown = useCallback((event: React.KeyboardEvent<HTMLElement>, target: Target) => {
97
103
  const targetIndex = targets.indexOf(target);
98
- if (targetIndex < 0) return;
104
+ if (targetIndex < 0) {
105
+ return;
106
+ }
99
107
 
100
108
  switch (event.key) {
101
109
  case 'ArrowLeft':
@@ -4,7 +4,9 @@ export const sumSpacedWidths = (
4
4
  visibleCount: number = widths.length,
5
5
  ): number => {
6
6
  const boundedCount = Math.max(0, Math.min(visibleCount, widths.length));
7
- if (boundedCount === 0) return 0;
7
+ if (boundedCount === 0) {
8
+ return 0;
9
+ }
8
10
 
9
11
  let usedWidth = 0;
10
12
  for (let index = 0; index < boundedCount; index += 1) {
@@ -22,13 +24,17 @@ export const fitSpacedWidths = (
22
24
  widths: number[],
23
25
  gap: number,
24
26
  ): number => {
25
- if (availableWidth <= 0 || widths.length === 0) return 0;
27
+ if (availableWidth <= 0 || widths.length === 0) {
28
+ return 0;
29
+ }
26
30
 
27
31
  let usedWidth = 0;
28
32
  let visibleCount = 0;
29
33
  for (let index = 0; index < widths.length; index += 1) {
30
34
  const requiredWidth = (widths[index] ?? 0) + (index > 0 ? gap : 0);
31
- if (usedWidth + requiredWidth > availableWidth) break;
35
+ if (usedWidth + requiredWidth > availableWidth) {
36
+ break;
37
+ }
32
38
  usedWidth += requiredWidth;
33
39
  visibleCount += 1;
34
40
  }