@arbor-education/design-system.components 0.6.0 → 0.7.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 (285) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/components/avatar/Avatar.d.ts +1 -1
  3. package/dist/components/avatar/Avatar.d.ts.map +1 -1
  4. package/dist/components/avatar/Avatar.js +1 -1
  5. package/dist/components/avatar/Avatar.js.map +1 -1
  6. package/dist/components/avatar/Avatar.stories.d.ts.map +1 -1
  7. package/dist/components/avatar/Avatar.stories.js +7 -0
  8. package/dist/components/avatar/Avatar.stories.js.map +1 -1
  9. package/dist/components/badge/Badge.d.ts +12 -0
  10. package/dist/components/badge/Badge.d.ts.map +1 -0
  11. package/dist/components/badge/Badge.js +6 -0
  12. package/dist/components/badge/Badge.js.map +1 -0
  13. package/dist/components/badge/Badge.stories.d.ts +10 -0
  14. package/dist/components/badge/Badge.stories.d.ts.map +1 -0
  15. package/dist/components/badge/Badge.stories.js +51 -0
  16. package/dist/components/badge/Badge.stories.js.map +1 -0
  17. package/dist/components/badge/Badge.test.d.ts +2 -0
  18. package/dist/components/badge/Badge.test.d.ts.map +1 -0
  19. package/dist/components/badge/Badge.test.js +23 -0
  20. package/dist/components/badge/Badge.test.js.map +1 -0
  21. package/dist/components/card/Card.js +1 -1
  22. package/dist/components/card/Card.js.map +1 -1
  23. package/dist/components/combobox/Combobox.d.ts +16 -0
  24. package/dist/components/combobox/Combobox.d.ts.map +1 -0
  25. package/dist/components/combobox/Combobox.js +195 -0
  26. package/dist/components/combobox/Combobox.js.map +1 -0
  27. package/dist/components/combobox/Combobox.stories.d.ts +24 -0
  28. package/dist/components/combobox/Combobox.stories.d.ts.map +1 -0
  29. package/dist/components/combobox/Combobox.stories.js +246 -0
  30. package/dist/components/combobox/Combobox.stories.js.map +1 -0
  31. package/dist/components/combobox/Combobox.test.d.ts +2 -0
  32. package/dist/components/combobox/Combobox.test.d.ts.map +1 -0
  33. package/dist/components/combobox/Combobox.test.js +798 -0
  34. package/dist/components/combobox/Combobox.test.js.map +1 -0
  35. package/dist/components/combobox/ComboboxButtonTrigger.d.ts +28 -0
  36. package/dist/components/combobox/ComboboxButtonTrigger.d.ts.map +1 -0
  37. package/dist/components/combobox/ComboboxButtonTrigger.js +64 -0
  38. package/dist/components/combobox/ComboboxButtonTrigger.js.map +1 -0
  39. package/dist/components/combobox/ComboboxListbox.d.ts +44 -0
  40. package/dist/components/combobox/ComboboxListbox.d.ts.map +1 -0
  41. package/dist/components/combobox/ComboboxListbox.js +37 -0
  42. package/dist/components/combobox/ComboboxListbox.js.map +1 -0
  43. package/dist/components/combobox/ComboboxOptionRow.d.ts +23 -0
  44. package/dist/components/combobox/ComboboxOptionRow.d.ts.map +1 -0
  45. package/dist/components/combobox/ComboboxOptionRow.js +27 -0
  46. package/dist/components/combobox/ComboboxOptionRow.js.map +1 -0
  47. package/dist/components/combobox/ComboboxTrigger.d.ts +35 -0
  48. package/dist/components/combobox/ComboboxTrigger.d.ts.map +1 -0
  49. package/dist/components/combobox/ComboboxTrigger.js +15 -0
  50. package/dist/components/combobox/ComboboxTrigger.js.map +1 -0
  51. package/dist/components/combobox/buildListboxDisplayOptions.d.ts +3 -0
  52. package/dist/components/combobox/buildListboxDisplayOptions.d.ts.map +1 -0
  53. package/dist/components/combobox/buildListboxDisplayOptions.js +13 -0
  54. package/dist/components/combobox/buildListboxDisplayOptions.js.map +1 -0
  55. package/dist/components/combobox/buildListboxDisplayOptions.test.d.ts +2 -0
  56. package/dist/components/combobox/buildListboxDisplayOptions.test.d.ts.map +1 -0
  57. package/dist/components/combobox/buildListboxDisplayOptions.test.js +22 -0
  58. package/dist/components/combobox/buildListboxDisplayOptions.test.js.map +1 -0
  59. package/dist/components/combobox/comboboxKeyboardTypes.d.ts +41 -0
  60. package/dist/components/combobox/comboboxKeyboardTypes.d.ts.map +1 -0
  61. package/dist/components/combobox/comboboxKeyboardTypes.js +2 -0
  62. package/dist/components/combobox/comboboxKeyboardTypes.js.map +1 -0
  63. package/dist/components/combobox/highlightLabel.d.ts +10 -0
  64. package/dist/components/combobox/highlightLabel.d.ts.map +1 -0
  65. package/dist/components/combobox/highlightLabel.js +18 -0
  66. package/dist/components/combobox/highlightLabel.js.map +1 -0
  67. package/dist/components/combobox/normaliseComboboxQuery.d.ts +2 -0
  68. package/dist/components/combobox/normaliseComboboxQuery.d.ts.map +1 -0
  69. package/dist/components/combobox/normaliseComboboxQuery.js +2 -0
  70. package/dist/components/combobox/normaliseComboboxQuery.js.map +1 -0
  71. package/dist/components/combobox/types.d.ts +46 -0
  72. package/dist/components/combobox/types.d.ts.map +1 -0
  73. package/dist/components/combobox/types.js +2 -0
  74. package/dist/components/combobox/types.js.map +1 -0
  75. package/dist/components/combobox/useChipSelection.d.ts +11 -0
  76. package/dist/components/combobox/useChipSelection.d.ts.map +1 -0
  77. package/dist/components/combobox/useChipSelection.js +35 -0
  78. package/dist/components/combobox/useChipSelection.js.map +1 -0
  79. package/dist/components/combobox/useComboboxChipKeyboard.d.ts +3 -0
  80. package/dist/components/combobox/useComboboxChipKeyboard.d.ts.map +1 -0
  81. package/dist/components/combobox/useComboboxChipKeyboard.js +103 -0
  82. package/dist/components/combobox/useComboboxChipKeyboard.js.map +1 -0
  83. package/dist/components/combobox/useComboboxChipKeyboard.test.d.ts +2 -0
  84. package/dist/components/combobox/useComboboxChipKeyboard.test.d.ts.map +1 -0
  85. package/dist/components/combobox/useComboboxChipKeyboard.test.js +116 -0
  86. package/dist/components/combobox/useComboboxChipKeyboard.test.js.map +1 -0
  87. package/dist/components/combobox/useComboboxKeyboard.d.ts +4 -0
  88. package/dist/components/combobox/useComboboxKeyboard.d.ts.map +1 -0
  89. package/dist/components/combobox/useComboboxKeyboard.js +68 -0
  90. package/dist/components/combobox/useComboboxKeyboard.js.map +1 -0
  91. package/dist/components/combobox/useComboboxListboxDom.d.ts +11 -0
  92. package/dist/components/combobox/useComboboxListboxDom.d.ts.map +1 -0
  93. package/dist/components/combobox/useComboboxListboxDom.js +15 -0
  94. package/dist/components/combobox/useComboboxListboxDom.js.map +1 -0
  95. package/dist/components/combobox/useComboboxListboxKeyboard.d.ts +3 -0
  96. package/dist/components/combobox/useComboboxListboxKeyboard.d.ts.map +1 -0
  97. package/dist/components/combobox/useComboboxListboxKeyboard.js +143 -0
  98. package/dist/components/combobox/useComboboxListboxKeyboard.js.map +1 -0
  99. package/dist/components/combobox/useComboboxListboxKeyboard.test.d.ts +2 -0
  100. package/dist/components/combobox/useComboboxListboxKeyboard.test.d.ts.map +1 -0
  101. package/dist/components/combobox/useComboboxListboxKeyboard.test.js +152 -0
  102. package/dist/components/combobox/useComboboxListboxKeyboard.test.js.map +1 -0
  103. package/dist/components/combobox/useComboboxPopoverBehavior.d.ts +38 -0
  104. package/dist/components/combobox/useComboboxPopoverBehavior.d.ts.map +1 -0
  105. package/dist/components/combobox/useComboboxPopoverBehavior.js +104 -0
  106. package/dist/components/combobox/useComboboxPopoverBehavior.js.map +1 -0
  107. package/dist/components/combobox/useComboboxState.d.ts +27 -0
  108. package/dist/components/combobox/useComboboxState.d.ts.map +1 -0
  109. package/dist/components/combobox/useComboboxState.js +122 -0
  110. package/dist/components/combobox/useComboboxState.js.map +1 -0
  111. package/dist/components/combobox/useElementWidth.d.ts +2 -0
  112. package/dist/components/combobox/useElementWidth.d.ts.map +1 -0
  113. package/dist/components/combobox/useElementWidth.js +31 -0
  114. package/dist/components/combobox/useElementWidth.js.map +1 -0
  115. package/dist/components/combobox/useVisibleChips.d.ts +21 -0
  116. package/dist/components/combobox/useVisibleChips.d.ts.map +1 -0
  117. package/dist/components/combobox/useVisibleChips.js +59 -0
  118. package/dist/components/combobox/useVisibleChips.js.map +1 -0
  119. package/dist/components/combobox/useVisibleChips.test.d.ts +2 -0
  120. package/dist/components/combobox/useVisibleChips.test.d.ts.map +1 -0
  121. package/dist/components/combobox/useVisibleChips.test.js +81 -0
  122. package/dist/components/combobox/useVisibleChips.test.js.map +1 -0
  123. package/dist/components/dot/Dot.d.ts +8 -0
  124. package/dist/components/dot/Dot.d.ts.map +1 -0
  125. package/dist/components/dot/Dot.js +6 -0
  126. package/dist/components/dot/Dot.js.map +1 -0
  127. package/dist/components/dot/Dot.stories.d.ts +15 -0
  128. package/dist/components/dot/Dot.stories.d.ts.map +1 -0
  129. package/dist/components/dot/Dot.stories.js +25 -0
  130. package/dist/components/dot/Dot.stories.js.map +1 -0
  131. package/dist/components/dot/Dot.test.d.ts +2 -0
  132. package/dist/components/dot/Dot.test.d.ts.map +1 -0
  133. package/dist/components/dot/Dot.test.js +19 -0
  134. package/dist/components/dot/Dot.test.js.map +1 -0
  135. package/dist/components/formField/FormField.d.ts +8 -4
  136. package/dist/components/formField/FormField.d.ts.map +1 -1
  137. package/dist/components/formField/FormField.js +7 -6
  138. package/dist/components/formField/FormField.js.map +1 -1
  139. package/dist/components/formField/FormField.stories.d.ts +1 -0
  140. package/dist/components/formField/FormField.stories.d.ts.map +1 -1
  141. package/dist/components/formField/FormField.stories.js +13 -1
  142. package/dist/components/formField/FormField.stories.js.map +1 -1
  143. package/dist/components/formField/FormField.test.js +10 -0
  144. package/dist/components/formField/FormField.test.js.map +1 -1
  145. package/dist/components/icon/allowedIcons.d.ts +1 -0
  146. package/dist/components/icon/allowedIcons.d.ts.map +1 -1
  147. package/dist/components/icon/allowedIcons.js +2 -1
  148. package/dist/components/icon/allowedIcons.js.map +1 -1
  149. package/dist/components/progress/Progress.stories.d.ts +49 -49
  150. package/dist/components/singleUser/SingleUser.d.ts +15 -0
  151. package/dist/components/singleUser/SingleUser.d.ts.map +1 -0
  152. package/dist/components/singleUser/SingleUser.js +9 -0
  153. package/dist/components/singleUser/SingleUser.js.map +1 -0
  154. package/dist/components/singleUser/SingleUser.stories.d.ts +11 -0
  155. package/dist/components/singleUser/SingleUser.stories.d.ts.map +1 -0
  156. package/dist/components/singleUser/SingleUser.stories.js +52 -0
  157. package/dist/components/singleUser/SingleUser.stories.js.map +1 -0
  158. package/dist/components/singleUser/SingleUser.test.d.ts +2 -0
  159. package/dist/components/singleUser/SingleUser.test.d.ts.map +1 -0
  160. package/dist/components/singleUser/SingleUser.test.js +30 -0
  161. package/dist/components/singleUser/SingleUser.test.js.map +1 -0
  162. package/dist/components/tabs/TabsItem.stories.d.ts +2 -2
  163. package/dist/components/tag/Tag.d.ts +9 -6
  164. package/dist/components/tag/Tag.d.ts.map +1 -1
  165. package/dist/components/tag/Tag.js +8 -2
  166. package/dist/components/tag/Tag.js.map +1 -1
  167. package/dist/components/tag/Tag.stories.d.ts +11 -6
  168. package/dist/components/tag/Tag.stories.d.ts.map +1 -1
  169. package/dist/components/tag/Tag.stories.js +68 -4
  170. package/dist/components/tag/Tag.stories.js.map +1 -1
  171. package/dist/components/tag/Tag.test.js +86 -50
  172. package/dist/components/tag/Tag.test.js.map +1 -1
  173. package/dist/components/toggle/Toggle.d.ts +3 -0
  174. package/dist/components/toggle/Toggle.d.ts.map +1 -0
  175. package/dist/components/toggle/Toggle.js +8 -0
  176. package/dist/components/toggle/Toggle.js.map +1 -0
  177. package/dist/components/toggle/Toggle.stories.d.ts +97 -0
  178. package/dist/components/toggle/Toggle.stories.d.ts.map +1 -0
  179. package/dist/components/toggle/Toggle.stories.js +186 -0
  180. package/dist/components/toggle/Toggle.stories.js.map +1 -0
  181. package/dist/components/toggle/Toggle.test.d.ts +2 -0
  182. package/dist/components/toggle/Toggle.test.d.ts.map +1 -0
  183. package/dist/components/toggle/Toggle.test.js +58 -0
  184. package/dist/components/toggle/Toggle.test.js.map +1 -0
  185. package/dist/index.css +656 -25
  186. package/dist/index.css.map +1 -1
  187. package/dist/index.d.ts +34 -25
  188. package/dist/index.d.ts.map +1 -1
  189. package/dist/index.js +30 -25
  190. package/dist/index.js.map +1 -1
  191. package/dist/mocks/comboboxStoryOptions.d.ts +5 -0
  192. package/dist/mocks/comboboxStoryOptions.d.ts.map +1 -0
  193. package/dist/mocks/comboboxStoryOptions.js +22 -0
  194. package/dist/mocks/comboboxStoryOptions.js.map +1 -0
  195. package/dist/utils/isSelectAllChord.d.ts +5 -0
  196. package/dist/utils/isSelectAllChord.d.ts.map +1 -0
  197. package/dist/utils/isSelectAllChord.js +7 -0
  198. package/dist/utils/isSelectAllChord.js.map +1 -0
  199. package/dist/utils/isSelectAllChord.test.d.ts +2 -0
  200. package/dist/utils/isSelectAllChord.test.d.ts.map +1 -0
  201. package/dist/utils/isSelectAllChord.test.js +19 -0
  202. package/dist/utils/isSelectAllChord.test.js.map +1 -0
  203. package/dist/utils/nextCircularIndex.d.ts +3 -0
  204. package/dist/utils/nextCircularIndex.d.ts.map +1 -0
  205. package/dist/utils/nextCircularIndex.js +10 -0
  206. package/dist/utils/nextCircularIndex.js.map +1 -0
  207. package/dist/utils/nextCircularIndex.test.d.ts +2 -0
  208. package/dist/utils/nextCircularIndex.test.d.ts.map +1 -0
  209. package/dist/utils/nextCircularIndex.test.js +23 -0
  210. package/dist/utils/nextCircularIndex.test.js.map +1 -0
  211. package/dist/utils/scrollElementIntoViewById.d.ts +2 -0
  212. package/dist/utils/scrollElementIntoViewById.d.ts.map +1 -0
  213. package/dist/utils/scrollElementIntoViewById.js +16 -0
  214. package/dist/utils/scrollElementIntoViewById.js.map +1 -0
  215. package/dist/utils/scrollElementIntoViewById.test.d.ts +2 -0
  216. package/dist/utils/scrollElementIntoViewById.test.d.ts.map +1 -0
  217. package/dist/utils/scrollElementIntoViewById.test.js +31 -0
  218. package/dist/utils/scrollElementIntoViewById.test.js.map +1 -0
  219. package/package.json +1 -1
  220. package/src/components/avatar/Avatar.stories.tsx +8 -0
  221. package/src/components/avatar/Avatar.tsx +3 -3
  222. package/src/components/badge/Badge.stories.tsx +74 -0
  223. package/src/components/badge/Badge.test.tsx +28 -0
  224. package/src/components/badge/Badge.tsx +35 -0
  225. package/src/components/badge/badge.scss +86 -0
  226. package/src/components/card/Card.tsx +1 -1
  227. package/src/components/combobox/Combobox.stories.tsx +340 -0
  228. package/src/components/combobox/Combobox.test.tsx +1160 -0
  229. package/src/components/combobox/Combobox.tsx +434 -0
  230. package/src/components/combobox/ComboboxButtonTrigger.tsx +195 -0
  231. package/src/components/combobox/ComboboxListbox.tsx +224 -0
  232. package/src/components/combobox/ComboboxOptionRow.tsx +128 -0
  233. package/src/components/combobox/ComboboxTrigger.tsx +134 -0
  234. package/src/components/combobox/buildListboxDisplayOptions.test.ts +24 -0
  235. package/src/components/combobox/buildListboxDisplayOptions.ts +12 -0
  236. package/src/components/combobox/combobox.scss +390 -0
  237. package/src/components/combobox/comboboxKeyboardTypes.ts +45 -0
  238. package/src/components/combobox/highlightLabel.tsx +42 -0
  239. package/src/components/combobox/normaliseComboboxQuery.ts +1 -0
  240. package/src/components/combobox/types.ts +53 -0
  241. package/src/components/combobox/useChipSelection.ts +53 -0
  242. package/src/components/combobox/useComboboxChipKeyboard.test.tsx +141 -0
  243. package/src/components/combobox/useComboboxChipKeyboard.ts +121 -0
  244. package/src/components/combobox/useComboboxKeyboard.ts +108 -0
  245. package/src/components/combobox/useComboboxListboxDom.ts +36 -0
  246. package/src/components/combobox/useComboboxListboxKeyboard.test.tsx +186 -0
  247. package/src/components/combobox/useComboboxListboxKeyboard.ts +172 -0
  248. package/src/components/combobox/useComboboxPopoverBehavior.ts +179 -0
  249. package/src/components/combobox/useComboboxState.ts +232 -0
  250. package/src/components/combobox/useElementWidth.ts +40 -0
  251. package/src/components/combobox/useVisibleChips.test.tsx +91 -0
  252. package/src/components/combobox/useVisibleChips.ts +100 -0
  253. package/src/components/dot/Dot.stories.tsx +41 -0
  254. package/src/components/dot/Dot.test.tsx +21 -0
  255. package/src/components/dot/Dot.tsx +18 -0
  256. package/src/components/dot/dot.scss +35 -0
  257. package/src/components/formField/FormField.stories.tsx +30 -1
  258. package/src/components/formField/FormField.test.tsx +20 -0
  259. package/src/components/formField/FormField.tsx +11 -5
  260. package/src/components/formField/inputs/number/numberInput.scss +12 -4
  261. package/src/components/icon/allowedIcons.tsx +2 -0
  262. package/src/components/pill/pill.scss +4 -6
  263. package/src/components/singleUser/SingleUser.stories.tsx +63 -0
  264. package/src/components/singleUser/SingleUser.test.tsx +61 -0
  265. package/src/components/singleUser/SingleUser.tsx +45 -0
  266. package/src/components/singleUser/singleUser.scss +14 -0
  267. package/src/components/tag/Tag.stories.tsx +88 -6
  268. package/src/components/tag/Tag.test.tsx +110 -44
  269. package/src/components/tag/Tag.tsx +38 -14
  270. package/src/components/tag/tag.scss +45 -30
  271. package/src/components/toggle/Toggle.stories.tsx +239 -0
  272. package/src/components/toggle/Toggle.test.tsx +66 -0
  273. package/src/components/toggle/Toggle.tsx +12 -0
  274. package/src/components/toggle/toggle.scss +126 -0
  275. package/src/index.scss +5 -0
  276. package/src/index.ts +47 -31
  277. package/src/mocks/comboboxStoryOptions.ts +25 -0
  278. package/src/tokens.scss +33 -4
  279. package/src/utils/isSelectAllChord.test.ts +24 -0
  280. package/src/utils/isSelectAllChord.ts +8 -0
  281. package/src/utils/nextCircularIndex.test.ts +26 -0
  282. package/src/utils/nextCircularIndex.ts +15 -0
  283. package/src/utils/scrollElementIntoViewById.test.ts +38 -0
  284. package/src/utils/scrollElementIntoViewById.ts +20 -0
  285. package/tokens/json/Arbor.json +3828 -3704
@@ -1 +1 @@
1
- {"version":3,"file":"Tag.test.js","sourceRoot":"","sources":["../../../src/components/tag/Tag.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Tag.test.js","sourceRoot":"","sources":["../../../src/components/tag/Tag.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Switch } from 'radix-ui';
2
+ export declare const Toggle: (props: Switch.SwitchProps) => import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=Toggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toggle.d.ts","sourceRoot":"","sources":["../../../src/components/toggle/Toggle.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,eAAO,MAAM,MAAM,GAAI,OAAO,MAAM,CAAC,WAAW,4CAQ/C,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import classNames from 'classnames';
3
+ import { Switch } from 'radix-ui';
4
+ export const Toggle = (props) => {
5
+ const { className, ...rest } = props;
6
+ return (_jsx(Switch.Root, { className: classNames('ds-toggle', className), ...rest, children: _jsx(Switch.Thumb, { className: "ds-toggle__thumb" }) }));
7
+ };
8
+ //# sourceMappingURL=Toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toggle.js","sourceRoot":"","sources":["../../../src/components/toggle/Toggle.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAyB,EAAE,EAAE;IAClD,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAErC,OAAO,CACL,KAAC,MAAM,CAAC,IAAI,IAAC,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,SAAS,CAAC,KAAM,IAAI,YAClE,KAAC,MAAM,CAAC,KAAK,IAAC,SAAS,EAAC,kBAAkB,GAAG,GACjC,CACf,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,97 @@
1
+ import type { StoryObj } from '@storybook/react-vite';
2
+ /**
3
+ * The Toggle component is a binary on/off switch, built on top of Radix UI's
4
+ * Switch primitive. Think of it like the light switch in the St. Olaf town
5
+ * hall — everyone in town knows exactly whether the lights are on or off,
6
+ * and there is never any confusion about which state you are in.
7
+ *
8
+ * Toggling is the right choice when you need an immediate, binary setting
9
+ * change — "dark mode on", "notifications off", "feature enabled". Unlike a
10
+ * checkbox, a toggle implies the change takes effect right away, without
11
+ * needing a form submission.
12
+ *
13
+ * **Accessibility**
14
+ * - Rendered as a `<button role="switch">` — screen readers announce the
15
+ * current state ("checked" / "not checked") automatically.
16
+ * - Fully keyboard accessible: `Space` or `Enter` toggles the state.
17
+ * - Associate a visible label with the toggle using a `<label htmlFor={id}>`
18
+ * so users of all abilities know what they are toggling.
19
+ * - The `disabled` prop renders the element as non-interactive and applies
20
+ * correct ARIA semantics.
21
+ *
22
+ * **CSS classes**
23
+ * - Root element: `ds-toggle`
24
+ * - Thumb (the sliding dot): `ds-toggle__thumb`
25
+ * - Checked state is driven by Radix's `data-state="checked"` attribute,
26
+ * which the SCSS uses to apply brand colours and shift the thumb position.
27
+ */
28
+ declare const meta: {
29
+ title: string;
30
+ component: (props: import("@radix-ui/react-switch").SwitchProps) => import("react/jsx-runtime").JSX.Element;
31
+ parameters: {
32
+ layout: string;
33
+ };
34
+ tags: string[];
35
+ args: {
36
+ onCheckedChange: import("@vitest/spy").Mock<(...args: any[]) => any>;
37
+ };
38
+ argTypes: {
39
+ checked: {
40
+ control: "boolean";
41
+ description: string;
42
+ };
43
+ defaultChecked: {
44
+ control: "boolean";
45
+ description: string;
46
+ };
47
+ disabled: {
48
+ control: "boolean";
49
+ description: string;
50
+ };
51
+ required: {
52
+ control: "boolean";
53
+ description: string;
54
+ };
55
+ name: {
56
+ control: "text";
57
+ description: string;
58
+ };
59
+ value: {
60
+ control: "text";
61
+ description: string;
62
+ };
63
+ onCheckedChange: {
64
+ action: string;
65
+ description: string;
66
+ };
67
+ };
68
+ };
69
+ export default meta;
70
+ type Story = StoryObj<typeof meta>;
71
+ /** The toggle in its default, unchecked (off) state. */
72
+ export declare const Default: Story;
73
+ /**
74
+ * The toggle in its checked (on) state.
75
+ *
76
+ * Uses `defaultChecked` so the component manages its own state — perfect for
77
+ * uncontrolled usage where you just need a sensible starting position.
78
+ */
79
+ export declare const Checked: Story;
80
+ /**
81
+ * A disabled toggle that is currently off.
82
+ *
83
+ * Use this when a setting exists but cannot be changed in the current context
84
+ * — for example, a feature that requires a higher subscription tier.
85
+ */
86
+ export declare const Disabled: Story;
87
+ /**
88
+ * A disabled toggle that is currently on.
89
+ *
90
+ * This communicates "this setting is enabled, but you cannot change it right
91
+ * now." Always pair a disabled toggle with a tooltip or helper text that
92
+ * explains why it cannot be interacted with.
93
+ */
94
+ export declare const DisabledChecked: Story;
95
+ export declare const Controlled: Story;
96
+ export declare const WithLabel: Story;
97
+ //# sourceMappingURL=Toggle.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toggle.stories.d.ts","sourceRoot":"","sources":["../../../src/components/toggle/Toggle.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAI5D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDqB,CAAC;AAEhC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAMnC,wDAAwD;AACxD,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC;;;;;GAKG;AACH,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAMF;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,EAAE,KAItB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAAE,KAK7B,CAAC;AAoDF,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AA6CF,eAAO,MAAM,SAAS,EAAE,KAEvB,CAAC"}
@@ -0,0 +1,186 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { fn } from 'storybook/test';
4
+ import { Toggle } from './Toggle';
5
+ /**
6
+ * The Toggle component is a binary on/off switch, built on top of Radix UI's
7
+ * Switch primitive. Think of it like the light switch in the St. Olaf town
8
+ * hall — everyone in town knows exactly whether the lights are on or off,
9
+ * and there is never any confusion about which state you are in.
10
+ *
11
+ * Toggling is the right choice when you need an immediate, binary setting
12
+ * change — "dark mode on", "notifications off", "feature enabled". Unlike a
13
+ * checkbox, a toggle implies the change takes effect right away, without
14
+ * needing a form submission.
15
+ *
16
+ * **Accessibility**
17
+ * - Rendered as a `<button role="switch">` — screen readers announce the
18
+ * current state ("checked" / "not checked") automatically.
19
+ * - Fully keyboard accessible: `Space` or `Enter` toggles the state.
20
+ * - Associate a visible label with the toggle using a `<label htmlFor={id}>`
21
+ * so users of all abilities know what they are toggling.
22
+ * - The `disabled` prop renders the element as non-interactive and applies
23
+ * correct ARIA semantics.
24
+ *
25
+ * **CSS classes**
26
+ * - Root element: `ds-toggle`
27
+ * - Thumb (the sliding dot): `ds-toggle__thumb`
28
+ * - Checked state is driven by Radix's `data-state="checked"` attribute,
29
+ * which the SCSS uses to apply brand colours and shift the thumb position.
30
+ */
31
+ const meta = {
32
+ title: 'Components/Toggle',
33
+ component: Toggle,
34
+ parameters: {
35
+ layout: 'centered',
36
+ },
37
+ tags: ['autodocs'],
38
+ args: {
39
+ onCheckedChange: fn(),
40
+ },
41
+ argTypes: {
42
+ checked: {
43
+ control: 'boolean',
44
+ description: 'Controls the checked state when used as a controlled component. '
45
+ + 'Pair with `onCheckedChange` to keep your state in sync.',
46
+ },
47
+ defaultChecked: {
48
+ control: 'boolean',
49
+ description: 'Sets the initial checked state for an uncontrolled toggle. '
50
+ + 'The component manages its own state after mount.',
51
+ },
52
+ disabled: {
53
+ control: 'boolean',
54
+ description: 'Disables the toggle. The toggle becomes non-interactive and is '
55
+ + 'visually dimmed. Useful for read-only settings or permission-gated features.',
56
+ },
57
+ required: {
58
+ control: 'boolean',
59
+ description: 'Marks the toggle as required when used inside a `<form>`. '
60
+ + 'Prevents form submission if the toggle is unchecked.',
61
+ },
62
+ name: {
63
+ control: 'text',
64
+ description: 'The name of the toggle as submitted with form data. '
65
+ + 'Works the same as the `name` attribute on a native `<input>`.',
66
+ },
67
+ value: {
68
+ control: 'text',
69
+ description: 'The value submitted with form data when the toggle is checked. '
70
+ + 'Defaults to `"on"` (matching native checkbox behaviour).',
71
+ },
72
+ onCheckedChange: {
73
+ action: 'checkedChange',
74
+ description: 'Callback fired whenever the checked state changes. '
75
+ + 'Receives the new boolean value: `(checked: boolean) => void`.',
76
+ },
77
+ },
78
+ };
79
+ export default meta;
80
+ // ---------------------------------------------------------------------------
81
+ // Basic states
82
+ // ---------------------------------------------------------------------------
83
+ /** The toggle in its default, unchecked (off) state. */
84
+ export const Default = {};
85
+ /**
86
+ * The toggle in its checked (on) state.
87
+ *
88
+ * Uses `defaultChecked` so the component manages its own state — perfect for
89
+ * uncontrolled usage where you just need a sensible starting position.
90
+ */
91
+ export const Checked = {
92
+ args: {
93
+ defaultChecked: true,
94
+ },
95
+ };
96
+ // ---------------------------------------------------------------------------
97
+ // Disabled states
98
+ // ---------------------------------------------------------------------------
99
+ /**
100
+ * A disabled toggle that is currently off.
101
+ *
102
+ * Use this when a setting exists but cannot be changed in the current context
103
+ * — for example, a feature that requires a higher subscription tier.
104
+ */
105
+ export const Disabled = {
106
+ args: {
107
+ disabled: true,
108
+ },
109
+ };
110
+ /**
111
+ * A disabled toggle that is currently on.
112
+ *
113
+ * This communicates "this setting is enabled, but you cannot change it right
114
+ * now." Always pair a disabled toggle with a tooltip or helper text that
115
+ * explains why it cannot be interacted with.
116
+ */
117
+ export const DisabledChecked = {
118
+ args: {
119
+ defaultChecked: true,
120
+ disabled: true,
121
+ },
122
+ };
123
+ // ---------------------------------------------------------------------------
124
+ // Controlled usage
125
+ // ---------------------------------------------------------------------------
126
+ /**
127
+ * A fully controlled toggle backed by React state.
128
+ *
129
+ * Back in St. Olaf, my neighbour Hildegard Bjornsson kept a hand-written
130
+ * ledger of every switch in her house — she never trusted a switch to remember
131
+ * its own state! A controlled toggle is just like that ledger: your component
132
+ * owns the truth, and the toggle simply displays what you tell it to.
133
+ *
134
+ * Use the controlled pattern when:
135
+ * - You need to read the toggle state elsewhere in the UI.
136
+ * - You want to conditionally show/hide other elements based on the state.
137
+ * - You are submitting state as part of a larger form payload.
138
+ */
139
+ const ControlledTemplate = (args) => {
140
+ const [enabled, setEnabled] = useState(false);
141
+ return (_jsxs("div", { style: {
142
+ display: 'flex',
143
+ flexDirection: 'column',
144
+ alignItems: 'center',
145
+ gap: '12px',
146
+ }, children: [_jsx(Toggle, { ...args, checked: enabled, onCheckedChange: (checked) => {
147
+ setEnabled(checked);
148
+ args.onCheckedChange?.(checked);
149
+ } }), _jsx("p", { style: {
150
+ margin: 0,
151
+ fontSize: '14px',
152
+ color: enabled ? 'var(--color-brand-700)' : 'var(--color-grey-500)',
153
+ }, children: enabled ? 'Feature enabled' : 'Feature disabled' })] }));
154
+ };
155
+ export const Controlled = {
156
+ render: ControlledTemplate,
157
+ };
158
+ // ---------------------------------------------------------------------------
159
+ // With label (accessible usage)
160
+ // ---------------------------------------------------------------------------
161
+ /**
162
+ * A toggle paired with a visible `<label>` element for full accessibility.
163
+ *
164
+ * This is the pattern you should reach for in almost every real-world use
165
+ * case. By wiring the label's `htmlFor` to the toggle's `id`, you get:
166
+ *
167
+ * - Screen readers announce both the label text and the toggle state.
168
+ * - Clicking the label text also toggles the switch (larger click target).
169
+ * - Visual users see a clear description of what the toggle controls.
170
+ *
171
+ * You know, this is a lot like what we learned in St. Olaf Home Economics
172
+ * class — always label your preserves. An unlabelled jar of lingonberry jam
173
+ * looks just like an unlabelled jar of beet relish, and nobody wants that
174
+ * confusion at the dinner table. Or on a settings page!
175
+ */
176
+ const WithLabelTemplate = (args) => {
177
+ const [enabled, setEnabled] = useState(false);
178
+ return (_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '8px' }, children: [_jsx(Toggle, { ...args, id: "email-notifications-toggle", checked: enabled, onCheckedChange: (checked) => {
179
+ setEnabled(checked);
180
+ args.onCheckedChange?.(checked);
181
+ } }), _jsx("label", { htmlFor: "email-notifications-toggle", style: { fontSize: '14px', cursor: 'pointer', userSelect: 'none' }, children: "Email notifications" })] }));
182
+ };
183
+ export const WithLabel = {
184
+ render: WithLabelTemplate,
185
+ };
186
+ //# sourceMappingURL=Toggle.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toggle.stories.js","sourceRoot":"","sources":["../../../src/components/toggle/Toggle.stories.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import '@testing-library/jest-dom/vitest';
2
+ //# sourceMappingURL=Toggle.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toggle.test.d.ts","sourceRoot":"","sources":["../../../src/components/toggle/Toggle.test.tsx"],"names":[],"mappings":"AAEA,OAAO,kCAAkC,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { describe, expect, test, vi } from 'vitest';
3
+ import { render, screen, fireEvent } from '@testing-library/react';
4
+ import '@testing-library/jest-dom/vitest';
5
+ import { Toggle } from './Toggle';
6
+ describe('Toggle component', () => {
7
+ test('renders a switch element', () => {
8
+ render(_jsx(Toggle, {}));
9
+ expect(screen.getByRole('switch')).toBeInTheDocument();
10
+ });
11
+ test('is unchecked by default', () => {
12
+ render(_jsx(Toggle, {}));
13
+ expect(screen.getByRole('switch')).not.toBeChecked();
14
+ });
15
+ test('is checked when defaultChecked is true', () => {
16
+ render(_jsx(Toggle, { defaultChecked: true }));
17
+ expect(screen.getByRole('switch')).toBeChecked();
18
+ });
19
+ test('is checked when controlled checked prop is true', () => {
20
+ render(_jsx(Toggle, { checked: true, onCheckedChange: vi.fn() }));
21
+ expect(screen.getByRole('switch')).toBeChecked();
22
+ });
23
+ test('calls onCheckedChange with true when toggled on', () => {
24
+ const handleChange = vi.fn();
25
+ render(_jsx(Toggle, { onCheckedChange: handleChange }));
26
+ fireEvent.click(screen.getByRole('switch'));
27
+ expect(handleChange).toHaveBeenCalledTimes(1);
28
+ expect(handleChange).toHaveBeenCalledWith(true);
29
+ });
30
+ test('calls onCheckedChange with false when toggled off', () => {
31
+ const handleChange = vi.fn();
32
+ render(_jsx(Toggle, { defaultChecked: true, onCheckedChange: handleChange }));
33
+ fireEvent.click(screen.getByRole('switch'));
34
+ expect(handleChange).toHaveBeenCalledTimes(1);
35
+ expect(handleChange).toHaveBeenCalledWith(false);
36
+ });
37
+ test('is disabled when disabled prop is set', () => {
38
+ render(_jsx(Toggle, { disabled: true }));
39
+ expect(screen.getByRole('switch')).toBeDisabled();
40
+ });
41
+ test('does not call onCheckedChange when disabled', () => {
42
+ const handleChange = vi.fn();
43
+ render(_jsx(Toggle, { disabled: true, onCheckedChange: handleChange }));
44
+ fireEvent.click(screen.getByRole('switch'));
45
+ expect(handleChange).not.toHaveBeenCalled();
46
+ });
47
+ test('applies the ds-toggle base class', () => {
48
+ render(_jsx(Toggle, {}));
49
+ expect(screen.getByRole('switch')).toHaveClass('ds-toggle');
50
+ });
51
+ test('applies additional className alongside base class', () => {
52
+ render(_jsx(Toggle, { className: "custom-class" }));
53
+ const toggle = screen.getByRole('switch');
54
+ expect(toggle).toHaveClass('ds-toggle');
55
+ expect(toggle).toHaveClass('custom-class');
56
+ });
57
+ });
58
+ //# sourceMappingURL=Toggle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toggle.test.js","sourceRoot":"","sources":["../../../src/components/toggle/Toggle.test.tsx"],"names":[],"mappings":"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"}