@bspk/ui 1.3.7 → 1.3.9

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 (398) hide show
  1. package/dist/components/Accordion/Accordion.d.ts +19 -3
  2. package/dist/components/Accordion/Accordion.js +20 -3
  3. package/dist/components/Accordion/Accordion.js.map +1 -1
  4. package/dist/components/Avatar/Avatar.d.ts +13 -14
  5. package/dist/components/Avatar/Avatar.js +13 -14
  6. package/dist/components/Avatar/Avatar.js.map +1 -1
  7. package/dist/components/AvatarGroup/AvatarGroup.d.ts +29 -12
  8. package/dist/components/AvatarGroup/AvatarGroup.js +29 -12
  9. package/dist/components/AvatarGroup/AvatarGroup.js.map +1 -1
  10. package/dist/components/Badge/Badge.d.ts +1 -3
  11. package/dist/components/Badge/Badge.js +1 -3
  12. package/dist/components/Badge/Badge.js.map +1 -1
  13. package/dist/components/BadgeDot/BadgeDot.d.ts +4 -4
  14. package/dist/components/BadgeDot/BadgeDot.js +5 -4
  15. package/dist/components/BadgeDot/BadgeDot.js.map +1 -1
  16. package/dist/components/BannerAlert/BannerAlert.d.ts +11 -12
  17. package/dist/components/BannerAlert/BannerAlert.js +11 -12
  18. package/dist/components/BannerAlert/BannerAlert.js.map +1 -1
  19. package/dist/components/BottomNavigation/BottomNavigation.d.ts +6 -3
  20. package/dist/components/BottomNavigation/BottomNavigation.js +6 -3
  21. package/dist/components/BottomNavigation/BottomNavigation.js.map +1 -1
  22. package/dist/components/BottomNavigation/BottomNavigationExample.js +31 -36
  23. package/dist/components/BottomNavigation/BottomNavigationExample.js.map +1 -1
  24. package/dist/components/BottomNavigation/bottom-navigation.css +8 -1
  25. package/dist/components/BottomNavigation/bottom-navigation.css.js +8 -1
  26. package/dist/components/Breadcrumb/Breadcrumb.d.ts +17 -18
  27. package/dist/components/Breadcrumb/Breadcrumb.js +17 -18
  28. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
  29. package/dist/components/Button/Button.d.ts +1 -11
  30. package/dist/components/Button/Button.js +1 -11
  31. package/dist/components/Button/Button.js.map +1 -1
  32. package/dist/components/Button/ButtonExample.js +1 -3
  33. package/dist/components/Button/ButtonExample.js.map +1 -1
  34. package/dist/components/ButtonDock/ButtonDock.d.ts +10 -14
  35. package/dist/components/ButtonDock/ButtonDock.js +10 -14
  36. package/dist/components/ButtonDock/ButtonDock.js.map +1 -1
  37. package/dist/components/Card/Card.d.ts +8 -10
  38. package/dist/components/Card/Card.js +6 -10
  39. package/dist/components/Card/Card.js.map +1 -1
  40. package/dist/components/Carousel/Carousel.d.ts +9 -13
  41. package/dist/components/Carousel/Carousel.js +9 -13
  42. package/dist/components/Carousel/Carousel.js.map +1 -1
  43. package/dist/components/Carousel/CarouselExample.js +14 -14
  44. package/dist/components/Carousel/CarouselExample.js.map +1 -1
  45. package/dist/components/Checkbox/Checkbox.d.ts +7 -4
  46. package/dist/components/Checkbox/Checkbox.js +7 -4
  47. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  48. package/dist/components/Checkbox/CheckboxExample.js +4 -1
  49. package/dist/components/Checkbox/CheckboxExample.js.map +1 -1
  50. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
  51. package/dist/components/CheckboxGroup/CheckboxGroup.js +3 -3
  52. package/dist/components/CheckboxOption/CheckboxOption.d.ts +4 -4
  53. package/dist/components/CheckboxOption/CheckboxOption.js +4 -4
  54. package/dist/components/Chip/Chip.d.ts +3 -7
  55. package/dist/components/Chip/Chip.js +3 -7
  56. package/dist/components/Chip/Chip.js.map +1 -1
  57. package/dist/components/Chip/ChipExample.js +50 -3
  58. package/dist/components/Chip/ChipExample.js.map +1 -1
  59. package/dist/components/ChipGroup/ChipGroup.d.ts +21 -10
  60. package/dist/components/ChipGroup/ChipGroup.js +21 -10
  61. package/dist/components/ChipGroup/ChipGroup.js.map +1 -1
  62. package/dist/components/ChipGroup/ChipGroupExample.js +1 -0
  63. package/dist/components/ChipGroup/ChipGroupExample.js.map +1 -1
  64. package/dist/components/DatePicker/DatePicker.d.ts +13 -12
  65. package/dist/components/DatePicker/DatePicker.js +13 -12
  66. package/dist/components/DatePicker/DatePicker.js.map +1 -1
  67. package/dist/components/Dialog/Dialog.d.ts +11 -6
  68. package/dist/components/Dialog/Dialog.js +11 -6
  69. package/dist/components/Dialog/Dialog.js.map +1 -1
  70. package/dist/components/Divider/Divider.d.ts +5 -9
  71. package/dist/components/Divider/Divider.js +5 -9
  72. package/dist/components/Divider/Divider.js.map +1 -1
  73. package/dist/components/Divider/DividerExample.js +16 -1
  74. package/dist/components/Divider/DividerExample.js.map +1 -1
  75. package/dist/components/Drawer/Drawer.d.ts +3 -3
  76. package/dist/components/Drawer/Drawer.js +3 -3
  77. package/dist/components/EmptyState/EmptyState.d.ts +3 -7
  78. package/dist/components/EmptyState/EmptyState.js +3 -7
  79. package/dist/components/EmptyState/EmptyState.js.map +1 -1
  80. package/dist/components/Fab/Fab.d.ts +4 -5
  81. package/dist/components/Fab/Fab.js +4 -6
  82. package/dist/components/Fab/Fab.js.map +1 -1
  83. package/dist/components/Fab/FabExample.d.ts +2 -1
  84. package/dist/components/Fab/FabExample.js +20 -2
  85. package/dist/components/Fab/FabExample.js.map +1 -1
  86. package/dist/components/Field/Field.d.ts +4 -5
  87. package/dist/components/Field/Field.js +4 -5
  88. package/dist/components/Field/Field.js.map +1 -1
  89. package/dist/components/FileUpload/FileUpload.d.ts +3 -3
  90. package/dist/components/FileUpload/FileUpload.js +3 -3
  91. package/dist/components/FileUploadItem/FileUploadItem.d.ts +6 -10
  92. package/dist/components/FileUploadItem/FileUploadItem.js +6 -10
  93. package/dist/components/FileUploadItem/FileUploadItem.js.map +1 -1
  94. package/dist/components/FormField/FormField.d.ts +5 -16
  95. package/dist/components/FormField/FormField.js +5 -16
  96. package/dist/components/FormField/FormField.js.map +1 -1
  97. package/dist/components/Img/Img.d.ts +1 -3
  98. package/dist/components/Img/Img.js +1 -3
  99. package/dist/components/Img/Img.js.map +1 -1
  100. package/dist/components/InlineAlert/InlineAlert.d.ts +1 -3
  101. package/dist/components/InlineAlert/InlineAlert.js +1 -3
  102. package/dist/components/InlineAlert/InlineAlert.js.map +1 -1
  103. package/dist/components/Input/Input.d.ts +13 -13
  104. package/dist/components/Input/Input.js +13 -13
  105. package/dist/components/Input/InputElement.d.ts +11 -5
  106. package/dist/components/Input/InputElement.js +11 -5
  107. package/dist/components/Input/InputElement.js.map +1 -1
  108. package/dist/components/Input/InputExample.js +1 -0
  109. package/dist/components/Input/InputExample.js.map +1 -1
  110. package/dist/components/InputNumber/InputNumber.d.ts +20 -20
  111. package/dist/components/InputNumber/InputNumber.js +20 -20
  112. package/dist/components/InputNumber/InputNumberExample.js +3 -0
  113. package/dist/components/InputNumber/InputNumberExample.js.map +1 -1
  114. package/dist/components/InputPhone/InputPhone.d.ts +21 -16
  115. package/dist/components/InputPhone/InputPhone.js +21 -16
  116. package/dist/components/InputPhone/InputPhone.js.map +1 -1
  117. package/dist/components/InputPhone/InputPhoneExample.js +3 -0
  118. package/dist/components/InputPhone/InputPhoneExample.js.map +1 -1
  119. package/dist/components/Layout/Layout.d.ts +1 -3
  120. package/dist/components/Layout/Layout.js +1 -3
  121. package/dist/components/Layout/Layout.js.map +1 -1
  122. package/dist/components/Link/Link.d.ts +1 -3
  123. package/dist/components/Link/Link.js +1 -3
  124. package/dist/components/Link/Link.js.map +1 -1
  125. package/dist/components/ListItem/ListItem.d.ts +22 -21
  126. package/dist/components/ListItem/ListItem.js +19 -16
  127. package/dist/components/ListItem/ListItem.js.map +1 -1
  128. package/dist/components/Menu/Menu.d.ts +5 -9
  129. package/dist/components/Menu/Menu.js +5 -9
  130. package/dist/components/Menu/Menu.js.map +1 -1
  131. package/dist/components/Modal/Modal.d.ts +4 -4
  132. package/dist/components/Modal/Modal.js +4 -4
  133. package/dist/components/Modal/Modal.js.map +1 -1
  134. package/dist/components/Modal/modal.css +12 -1
  135. package/dist/components/Modal/modal.css.js +12 -1
  136. package/dist/components/OTPInput/OTPInput.d.ts +1 -3
  137. package/dist/components/OTPInput/OTPInput.js +1 -3
  138. package/dist/components/OTPInput/OTPInput.js.map +1 -1
  139. package/dist/components/PageControl/PageControl.d.ts +1 -3
  140. package/dist/components/PageControl/PageControl.js +1 -3
  141. package/dist/components/PageControl/PageControl.js.map +1 -1
  142. package/dist/components/Pagination/Pagination.d.ts +6 -7
  143. package/dist/components/Pagination/Pagination.js +28 -15
  144. package/dist/components/Pagination/Pagination.js.map +1 -1
  145. package/dist/components/Pagination/pagination.css +5 -14
  146. package/dist/components/Pagination/pagination.css.js +5 -14
  147. package/dist/components/Password/Password.d.ts +19 -20
  148. package/dist/components/Password/Password.js +19 -20
  149. package/dist/components/Password/Password.js.map +1 -1
  150. package/dist/components/Password/PasswordExample.d.ts +3 -0
  151. package/dist/components/Password/PasswordExample.js +6 -0
  152. package/dist/components/Password/PasswordExample.js.map +1 -0
  153. package/dist/components/Popover/Popover.d.ts +11 -20
  154. package/dist/components/Popover/Popover.js +11 -20
  155. package/dist/components/Popover/Popover.js.map +1 -1
  156. package/dist/components/Popover/PopoverExample.js +1 -1
  157. package/dist/components/Popover/PopoverExample.js.map +1 -1
  158. package/dist/components/ProgressBar/ProgressBar.d.ts +1 -3
  159. package/dist/components/ProgressBar/ProgressBar.js +1 -3
  160. package/dist/components/ProgressBar/ProgressBar.js.map +1 -1
  161. package/dist/components/ProgressCircle/ProgressCircle.d.ts +1 -3
  162. package/dist/components/ProgressCircle/ProgressCircle.js +1 -3
  163. package/dist/components/ProgressCircle/ProgressCircle.js.map +1 -1
  164. package/dist/components/ProgressionStepper/ProgressionStepper.d.ts +1 -3
  165. package/dist/components/ProgressionStepper/ProgressionStepper.js +1 -3
  166. package/dist/components/ProgressionStepper/ProgressionStepper.js.map +1 -1
  167. package/dist/components/Radio/RadioExample.js +4 -1
  168. package/dist/components/Radio/RadioExample.js.map +1 -1
  169. package/dist/components/RadioGroup/RadioGroup.d.ts +2 -2
  170. package/dist/components/RadioGroup/RadioGroup.js +2 -2
  171. package/dist/components/Rating/Rating.d.ts +2 -4
  172. package/dist/components/Rating/Rating.js +8 -6
  173. package/dist/components/Rating/Rating.js.map +1 -1
  174. package/dist/components/Rating/RatingExample.js +17 -1
  175. package/dist/components/Rating/RatingExample.js.map +1 -1
  176. package/dist/components/SearchBar/SearchBar.d.ts +2 -2
  177. package/dist/components/SearchBar/SearchBar.js +2 -2
  178. package/dist/components/SearchBar/SearchBarExample.js +3 -0
  179. package/dist/components/SearchBar/SearchBarExample.js.map +1 -1
  180. package/dist/components/SegmentedControl/SegmentedControl.d.ts +3 -3
  181. package/dist/components/SegmentedControl/SegmentedControl.js +3 -3
  182. package/dist/components/SegmentedControl/SegmentedControlExample.js +10 -12
  183. package/dist/components/SegmentedControl/SegmentedControlExample.js.map +1 -1
  184. package/dist/components/Select/Select.d.ts +24 -25
  185. package/dist/components/Select/Select.js +24 -25
  186. package/dist/components/Select/Select.js.map +1 -1
  187. package/dist/components/Select/SelectExample.js +1 -0
  188. package/dist/components/Select/SelectExample.js.map +1 -1
  189. package/dist/components/Skeleton/Skeleton.d.ts +10 -14
  190. package/dist/components/Skeleton/Skeleton.js +10 -14
  191. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  192. package/dist/components/Skeleton/SkeletonExample.js +4 -3
  193. package/dist/components/Skeleton/SkeletonExample.js.map +1 -1
  194. package/dist/components/SkeletonText/SkeletonText.d.ts +5 -9
  195. package/dist/components/SkeletonText/SkeletonText.js +5 -9
  196. package/dist/components/SkeletonText/SkeletonText.js.map +1 -1
  197. package/dist/components/Slider/Slider.d.ts +2 -2
  198. package/dist/components/Slider/Slider.js +2 -2
  199. package/dist/components/Slider/SliderExample.js +40 -18
  200. package/dist/components/Slider/SliderExample.js.map +1 -1
  201. package/dist/components/Snackbar/Manager.d.ts +29 -0
  202. package/dist/components/Snackbar/Manager.js +35 -0
  203. package/dist/components/Snackbar/Manager.js.map +1 -0
  204. package/dist/components/Snackbar/Snackbar.d.ts +23 -5
  205. package/dist/components/Snackbar/Snackbar.js +23 -4
  206. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  207. package/dist/components/Snackbar/SnackbarExample.js +8 -1
  208. package/dist/components/Snackbar/SnackbarExample.js.map +1 -1
  209. package/dist/components/Snackbar/index.d.ts +1 -0
  210. package/dist/components/Snackbar/index.js +1 -0
  211. package/dist/components/Snackbar/index.js.map +1 -1
  212. package/dist/components/StylesProviderDemo/StylesProviderDemo.d.ts +1 -3
  213. package/dist/components/StylesProviderDemo/StylesProviderDemo.js +1 -3
  214. package/dist/components/StylesProviderDemo/StylesProviderDemo.js.map +1 -1
  215. package/dist/components/Switch/Switch.d.ts +2 -2
  216. package/dist/components/Switch/Switch.js +2 -2
  217. package/dist/components/Switch/SwitchExample.js +4 -1
  218. package/dist/components/Switch/SwitchExample.js.map +1 -1
  219. package/dist/components/TabGroup/TabGroup.d.ts +2 -2
  220. package/dist/components/TabGroup/TabGroup.js +2 -2
  221. package/dist/components/TabGroup/TabGroupExample.js +5 -11
  222. package/dist/components/TabGroup/TabGroupExample.js.map +1 -1
  223. package/dist/components/TabGroup/tab-group.css +1 -0
  224. package/dist/components/TabGroup/tab-group.css.js +1 -0
  225. package/dist/components/TabList/TabList.d.ts +2 -2
  226. package/dist/components/TabList/TabList.js +2 -2
  227. package/dist/components/TabList/tab-list.css +0 -1
  228. package/dist/components/TabList/tab-list.css.js +0 -1
  229. package/dist/components/Table/Table.d.ts +53 -16
  230. package/dist/components/Table/Table.js +53 -16
  231. package/dist/components/Table/Table.js.map +1 -1
  232. package/dist/components/Table/table.css +0 -1
  233. package/dist/components/Table/table.css.js +0 -1
  234. package/dist/components/Tag/Tag.d.ts +1 -3
  235. package/dist/components/Tag/Tag.js +1 -3
  236. package/dist/components/Tag/Tag.js.map +1 -1
  237. package/dist/components/Textarea/Textarea.d.ts +13 -13
  238. package/dist/components/Textarea/Textarea.js +13 -13
  239. package/dist/components/Textarea/TextareaExample.js +3 -0
  240. package/dist/components/Textarea/TextareaExample.js.map +1 -1
  241. package/dist/components/TimePicker/TimePicker.d.ts +14 -14
  242. package/dist/components/TimePicker/TimePicker.js +14 -14
  243. package/dist/components/TimePicker/TimePickerExample.js +3 -0
  244. package/dist/components/TimePicker/TimePickerExample.js.map +1 -1
  245. package/dist/components/ToggleOption/ToggleOption.js +1 -1
  246. package/dist/components/ToggleOption/ToggleOption.js.map +1 -1
  247. package/dist/components/ToggleOption/toggle-option.css +2 -49
  248. package/dist/components/ToggleOption/toggle-option.css.js +2 -49
  249. package/dist/components/Tooltip/Tooltip.d.ts +3 -7
  250. package/dist/components/Tooltip/Tooltip.js +3 -7
  251. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  252. package/dist/components/Tooltip/TooltipExample.js +23 -3
  253. package/dist/components/Tooltip/TooltipExample.js.map +1 -1
  254. package/dist/components/Txt/Txt.d.ts +1 -3
  255. package/dist/components/Txt/Txt.js +1 -3
  256. package/dist/components/Txt/Txt.js.map +1 -1
  257. package/dist/components/UIProvider/AriaLiveMessageHandler.js +3 -2
  258. package/dist/components/UIProvider/AriaLiveMessageHandler.js.map +1 -1
  259. package/dist/hooks/useAddEventListener.d.ts +1 -2
  260. package/dist/hooks/useAddEventListener.js.map +1 -1
  261. package/dist/hooks/useRadioState.d.ts +1 -1
  262. package/dist/hooks/useTimeout.d.ts +1 -2
  263. package/dist/hooks/useTimeout.js +20 -4
  264. package/dist/hooks/useTimeout.js.map +1 -1
  265. package/dist/types/common.d.ts +3 -0
  266. package/dist/types/common.js.map +1 -1
  267. package/dist/types/meta.d.ts +1 -0
  268. package/dist/types/meta.js.map +1 -1
  269. package/dist/utils/createCustomEvent.d.ts +17 -0
  270. package/dist/utils/createCustomEvent.js +21 -0
  271. package/dist/utils/createCustomEvent.js.map +1 -0
  272. package/dist/utils/createExampleChildElement.js +3 -3
  273. package/dist/utils/createExampleChildElement.js.map +1 -1
  274. package/dist/utils/demo.d.ts +18 -26
  275. package/dist/utils/demo.js.map +1 -1
  276. package/meta.ts +6 -1
  277. package/package.json +1 -1
  278. package/src/components/Accordion/Accordion.tsx +20 -3
  279. package/src/components/Avatar/Avatar.tsx +13 -14
  280. package/src/components/AvatarGroup/AvatarGroup.tsx +30 -13
  281. package/src/components/Badge/Badge.tsx +1 -3
  282. package/src/components/BadgeDot/BadgeDot.tsx +6 -4
  283. package/src/components/BannerAlert/BannerAlert.tsx +11 -12
  284. package/src/components/BottomNavigation/BottomNavigation.tsx +6 -3
  285. package/src/components/BottomNavigation/BottomNavigationExample.tsx +31 -36
  286. package/src/components/BottomNavigation/bottom-navigation.scss +10 -1
  287. package/src/components/Breadcrumb/Breadcrumb.tsx +17 -18
  288. package/src/components/Button/Button.tsx +1 -11
  289. package/src/components/Button/ButtonExample.tsx +1 -2
  290. package/src/components/ButtonDock/ButtonDock.tsx +10 -14
  291. package/src/components/Card/Card.tsx +9 -11
  292. package/src/components/Carousel/Carousel.tsx +9 -13
  293. package/src/components/Carousel/CarouselExample.tsx +25 -25
  294. package/src/components/Checkbox/Checkbox.tsx +7 -4
  295. package/src/components/Checkbox/CheckboxExample.tsx +4 -3
  296. package/src/components/CheckboxGroup/CheckboxGroup.tsx +3 -3
  297. package/src/components/CheckboxOption/CheckboxOption.tsx +4 -4
  298. package/src/components/Chip/Chip.tsx +3 -7
  299. package/src/components/Chip/ChipExample.tsx +52 -3
  300. package/src/components/ChipGroup/ChipGroup.tsx +21 -10
  301. package/src/components/ChipGroup/ChipGroupExample.tsx +1 -1
  302. package/src/components/DatePicker/DatePicker.tsx +13 -12
  303. package/src/components/Dialog/Dialog.tsx +11 -6
  304. package/src/components/Divider/Divider.tsx +5 -9
  305. package/src/components/Divider/DividerExample.tsx +18 -1
  306. package/src/components/Drawer/Drawer.tsx +3 -3
  307. package/src/components/EmptyState/EmptyState.tsx +3 -7
  308. package/src/components/Fab/Fab.tsx +8 -5
  309. package/src/components/Fab/FabExample.tsx +22 -3
  310. package/src/components/Field/Field.tsx +4 -5
  311. package/src/components/FileUpload/FileUpload.tsx +3 -3
  312. package/src/components/FileUploadItem/FileUploadItem.tsx +6 -10
  313. package/src/components/FormField/FormField.tsx +5 -16
  314. package/src/components/Img/Img.tsx +1 -3
  315. package/src/components/InlineAlert/InlineAlert.tsx +1 -3
  316. package/src/components/Input/Input.tsx +13 -13
  317. package/src/components/Input/InputElement.tsx +11 -5
  318. package/src/components/Input/InputExample.tsx +1 -0
  319. package/src/components/InputNumber/InputNumber.tsx +20 -20
  320. package/src/components/InputNumber/InputNumberExample.tsx +3 -0
  321. package/src/components/InputPhone/InputPhone.tsx +21 -16
  322. package/src/components/InputPhone/InputPhoneExample.tsx +3 -0
  323. package/src/components/Layout/Layout.tsx +1 -3
  324. package/src/components/Link/Link.tsx +1 -3
  325. package/src/components/ListItem/ListItem.tsx +22 -20
  326. package/src/components/Menu/Menu.tsx +5 -9
  327. package/src/components/Modal/Modal.tsx +10 -5
  328. package/src/components/Modal/modal.scss +13 -1
  329. package/src/components/OTPInput/OTPInput.tsx +1 -3
  330. package/src/components/PageControl/PageControl.tsx +1 -3
  331. package/src/components/Pagination/Pagination.tsx +50 -24
  332. package/src/components/Pagination/pagination.scss +7 -17
  333. package/src/components/Password/Password.tsx +19 -20
  334. package/src/components/Password/PasswordExample.tsx +8 -0
  335. package/src/components/Popover/Popover.tsx +11 -20
  336. package/src/components/Popover/PopoverExample.tsx +1 -1
  337. package/src/components/ProgressBar/ProgressBar.tsx +1 -3
  338. package/src/components/ProgressCircle/ProgressCircle.tsx +1 -3
  339. package/src/components/ProgressionStepper/ProgressionStepper.tsx +1 -3
  340. package/src/components/Radio/RadioExample.tsx +4 -3
  341. package/src/components/RadioGroup/RadioGroup.tsx +2 -2
  342. package/src/components/Rating/Rating.tsx +34 -14
  343. package/src/components/Rating/RatingExample.tsx +18 -1
  344. package/src/components/SearchBar/SearchBar.tsx +2 -2
  345. package/src/components/SearchBar/SearchBarExample.tsx +3 -0
  346. package/src/components/SegmentedControl/SegmentedControl.tsx +3 -3
  347. package/src/components/SegmentedControl/SegmentedControlExample.tsx +10 -12
  348. package/src/components/Select/Select.tsx +24 -25
  349. package/src/components/Select/SelectExample.tsx +1 -0
  350. package/src/components/Skeleton/Skeleton.tsx +10 -14
  351. package/src/components/Skeleton/SkeletonExample.tsx +5 -3
  352. package/src/components/SkeletonText/SkeletonText.tsx +5 -9
  353. package/src/components/Slider/Slider.tsx +2 -2
  354. package/src/components/Slider/SliderExample.tsx +42 -17
  355. package/src/components/Snackbar/Manager.tsx +64 -0
  356. package/src/components/Snackbar/Snackbar.tsx +23 -6
  357. package/src/components/Snackbar/SnackbarExample.tsx +28 -6
  358. package/src/components/Snackbar/index.tsx +1 -0
  359. package/src/components/StylesProviderDemo/StylesProviderDemo.tsx +1 -3
  360. package/src/components/Switch/Switch.tsx +2 -2
  361. package/src/components/Switch/SwitchExample.tsx +4 -1
  362. package/src/components/TabGroup/TabGroup.tsx +2 -2
  363. package/src/components/TabGroup/TabGroupExample.tsx +5 -11
  364. package/src/components/TabGroup/tab-group.scss +1 -0
  365. package/src/components/TabList/TabList.tsx +2 -2
  366. package/src/components/TabList/tab-list.scss +0 -1
  367. package/src/components/Table/Table.tsx +53 -16
  368. package/src/components/Table/table.scss +0 -1
  369. package/src/components/Tag/Tag.tsx +1 -3
  370. package/src/components/Textarea/Textarea.tsx +13 -13
  371. package/src/components/Textarea/TextareaExample.tsx +3 -0
  372. package/src/components/TimePicker/TimePicker.tsx +14 -14
  373. package/src/components/TimePicker/TimePickerExample.tsx +3 -1
  374. package/src/components/ToggleOption/ToggleOption.tsx +1 -0
  375. package/src/components/ToggleOption/toggle-option.scss +2 -61
  376. package/src/components/Tooltip/Tooltip.tsx +3 -7
  377. package/src/components/Tooltip/TooltipExample.tsx +23 -11
  378. package/src/components/Txt/Txt.tsx +1 -3
  379. package/src/components/UIProvider/AriaLiveMessageHandler.tsx +4 -2
  380. package/src/hooks/useAddEventListener.ts +1 -3
  381. package/src/hooks/useTimeout.ts +1 -5
  382. package/src/types/common.ts +4 -0
  383. package/src/types/meta.ts +1 -0
  384. package/src/utils/createCustomEvent.ts +35 -0
  385. package/src/utils/createExampleChildElement.tsx +3 -8
  386. package/src/utils/demo.ts +24 -27
  387. package/dist/components/ListItem/ListItemButton.d.ts +0 -2
  388. package/dist/components/ListItem/ListItemButton.js +0 -7
  389. package/dist/components/ListItem/ListItemButton.js.map +0 -1
  390. package/dist/components/Pagination/PageInput.d.ts +0 -4
  391. package/dist/components/Pagination/PageInput.js +0 -36
  392. package/dist/components/Pagination/PageInput.js.map +0 -1
  393. package/dist/hooks/usePaginationState.d.ts +0 -4
  394. package/dist/hooks/usePaginationState.js +0 -22
  395. package/dist/hooks/usePaginationState.js.map +0 -1
  396. package/src/components/ListItem/ListItemButton.tsx +0 -6
  397. package/src/components/Pagination/PageInput.tsx +0 -65
  398. package/src/hooks/usePaginationState.tsx +0 -24
@@ -1,7 +1,8 @@
1
1
  import { ComponentExample, createUid } from '-/utils/demo';
2
2
 
3
3
  export const RadioExample: ComponentExample = {
4
- render: ({ props, Component }) => (
5
- <Component {...props} aria-label={props['aria-label'] || 'radio aria-label'} name={createUid('radio')} />
6
- ),
4
+ defaultState: {
5
+ 'aria-label': 'radio aria-label',
6
+ },
7
+ render: ({ props, Component }) => <Component {...props} name={createUid('radio')} />,
7
8
  };
@@ -40,7 +40,7 @@ export type RadioGroupProps = Omit<FieldControlProps, 'readOnly'> & {
40
40
  * import { useState } from 'react';
41
41
  * import { RadioGroup } from '@bspk/ui/RadioGroup';
42
42
  *
43
- * function Example() {
43
+ * () => {
44
44
  * const [selectedOption, setSelectedOption] = useState<string>('1');
45
45
  *
46
46
  * return (
@@ -59,7 +59,7 @@ export type RadioGroupProps = Omit<FieldControlProps, 'readOnly'> & {
59
59
  * value={selectedOption}
60
60
  * />
61
61
  * );
62
- * }
62
+ * };
63
63
  *
64
64
  * @name RadioGroup
65
65
  * @phase UXReview
@@ -1,6 +1,5 @@
1
1
  import './rating.scss';
2
2
  import { SvgStarFill } from '@bspk/icons/StarFill';
3
- import { ElementType } from 'react';
4
3
 
5
4
  export type RatingSize = 'large' | 'medium' | 'small';
6
5
  export type RatingProps = {
@@ -12,7 +11,7 @@ export type RatingProps = {
12
11
  */
13
12
  value?: number;
14
13
  /**
15
- * If included the component is in interactive mode and this callback is fired when a star is selected.
14
+ * If included the component is interactive and this callback is fired when the user selects a new rating value.
16
15
  *
17
16
  * @param value - The new value of the rating.
18
17
  */
@@ -39,37 +38,58 @@ const iconWidths: Record<RatingSize, number> = {
39
38
  * @example
40
39
  * import { Rating } from '@bspk/ui/Rating';
41
40
  *
42
- * function Example() {
43
- * return <Rating value={4.5} />;
44
- * }
41
+ * <Rating value={4.5} size="large" />;
45
42
  *
46
43
  * @name Rating
47
44
  * @phase UXReview
48
45
  */
49
46
  export function Rating({ size = 'medium', value, onChange }: RatingProps) {
50
- const As: ElementType = onChange ? 'button' : 'div';
47
+ if (!onChange)
48
+ return (
49
+ <div
50
+ aria-label={value ? `${value} out of ${MAX_STARS} stars` : 'Rating'}
51
+ data-bspk="rating"
52
+ data-size={size}
53
+ role="img"
54
+ >
55
+ {Array.from({ length: MAX_STARS }, (_, index) => {
56
+ const fill = getFill(index + 1, value);
57
+ return (
58
+ <div data-fill={fill} data-star key={index} role="presentation" tabIndex={-1}>
59
+ <SvgStarFill width={iconWidths[size]} />
60
+ {fill === 'half' && (
61
+ <div data-fill-half>
62
+ <div data-star>
63
+ <SvgStarFill width={iconWidths[size]} />
64
+ </div>
65
+ </div>
66
+ )}
67
+ </div>
68
+ );
69
+ })}
70
+ </div>
71
+ );
51
72
 
52
73
  return (
53
74
  <div
54
- aria-label={onChange ? 'Select a star rating' : value ? `${value} out of ${MAX_STARS} stars` : 'Rating'}
75
+ aria-label={value ? `${value} out of ${MAX_STARS} stars` : 'Select a star rating'}
55
76
  data-bspk="rating"
56
77
  data-size={size}
57
- role={onChange ? 'radiogroup' : 'img'}
78
+ role="radiogroup"
58
79
  >
59
80
  {Array.from({ length: MAX_STARS }, (_, index) => {
60
81
  const fill = getFill(index + 1, value);
61
82
  const selected = value !== undefined && Math.floor(value) === index;
62
83
  return (
63
- <As
84
+ <button
64
85
  aria-checked={selected}
65
- aria-hidden={!onChange}
66
- aria-label={onChange ? `Rate ${index + 1}` : undefined}
86
+ aria-label={`Rate ${index + 1}`}
67
87
  data-fill={fill}
68
88
  data-star
69
89
  key={index}
70
90
  onClick={() => onChange?.(index + 1)}
71
- role={onChange ? 'radio' : 'presentation'}
72
- tabIndex={onChange ? (selected ? 0 : -1) : -1}
91
+ role="radio"
92
+ tabIndex={selected ? 0 : -1}
73
93
  type="button"
74
94
  >
75
95
  <SvgStarFill width={iconWidths[size]} />
@@ -80,7 +100,7 @@ export function Rating({ size = 'medium', value, onChange }: RatingProps) {
80
100
  </div>
81
101
  </div>
82
102
  )}
83
- </As>
103
+ </button>
84
104
  );
85
105
  })}
86
106
  </div>
@@ -3,11 +3,28 @@ import { ComponentExampleFn, Preset } from '-/utils/demo';
3
3
 
4
4
  export const presets: Preset<RatingProps>[] = [
5
5
  {
6
- label: 'Non interactive',
6
+ label: 'Read Only, No Value',
7
7
  propState: {
8
8
  onChange: undefined,
9
+ value: undefined,
9
10
  },
10
11
  },
12
+ {
13
+ label: 'Read Only',
14
+ propState: {
15
+ onChange: undefined,
16
+ value: 4.5,
17
+ },
18
+ designPattern: 'A read only representation of ratings, a scale of 1 to 5.',
19
+ },
20
+ {
21
+ label: 'Interactive',
22
+ propState: {
23
+ onChange: () => {},
24
+ },
25
+ designPattern:
26
+ 'Interactive control that allow customers to indicate their feelings about an experience or product on a scale of 1 to 5.',
27
+ },
11
28
  ];
12
29
 
13
30
  export const RatingExample: ComponentExampleFn<RatingProps> = () => {
@@ -72,7 +72,7 @@ export type SearchBarProps<O extends SearchBarOption = SearchBarOption> = Omit<
72
72
  * import { useState } from 'react';
73
73
  * import { SearchBar } from '@bspk/ui/SearchBar';
74
74
  *
75
- * function Example() {
75
+ * () => {
76
76
  * const [searchText, setSearchText] = useState('');
77
77
  *
78
78
  * return (
@@ -96,7 +96,7 @@ export type SearchBarProps<O extends SearchBarOption = SearchBarOption> = Omit<
96
96
  * onChange={setSearchText}
97
97
  * />
98
98
  * );
99
- * }
99
+ * };
100
100
  *
101
101
  * @name SearchBar
102
102
  * @phase UXReview
@@ -3,6 +3,9 @@ import { ComponentExample } from '-/utils/demo';
3
3
  import { randomString } from '-/utils/random';
4
4
 
5
5
  export const SearchBarExample: ComponentExample<SearchBarProps> = {
6
+ defaultState: {
7
+ 'aria-label': 'search bar aria-label',
8
+ },
6
9
  render: ({ props, Component }) => {
7
10
  return <Component {...props} id={`search-bar-${randomString(8)}`} />;
8
11
  },
@@ -12,8 +12,8 @@ export type SegmentedControlProps = TabListProps<SegmentedControlOption>;
12
12
  * import { useState } from 'react';
13
13
  * import { SegmentedControl } from '@bspk/ui/SegmentedControl';
14
14
  *
15
- * function Example() {
16
- * const [selectedOption, setSelectedOption] = useState<string>();
15
+ * () => {
16
+ * const [selectedOption, setSelectedOption] = useState<string>('');
17
17
  *
18
18
  * return (
19
19
  * <SegmentedControl
@@ -26,7 +26,7 @@ export type SegmentedControlProps = TabListProps<SegmentedControlOption>;
26
26
  * value={selectedOption}
27
27
  * />
28
28
  * );
29
- * }
29
+ * };
30
30
  *
31
31
  * @name SegmentedControl
32
32
  * @phase UXReview
@@ -1,9 +1,3 @@
1
- import { SvgCircle } from '@bspk/icons/Circle';
2
- import { SvgDiamond } from '@bspk/icons/Diamond';
3
- import { SvgDiamondFill } from '@bspk/icons/DiamondFill';
4
- import { SvgSquare } from '@bspk/icons/Square';
5
- import { SvgSquareFill } from '@bspk/icons/SquareFill';
6
-
7
1
  import { SegmentedControlOption, SegmentedControlProps } from '.';
8
2
  import { ComponentExample, Preset } from '-/utils/demo';
9
3
 
@@ -11,20 +5,20 @@ const PRESET_OPTIONS: SegmentedControlOption[] = [
11
5
  {
12
6
  value: '1',
13
7
  label: 'Option 1',
14
- icon: <SvgDiamond />,
15
- iconSelected: <SvgDiamondFill />,
8
+ icon: 'Diamond',
9
+ iconSelected: 'DiamondFill',
16
10
  },
17
11
  {
18
12
  value: '2',
19
13
  label: 'Disabled 2',
20
14
  disabled: true,
21
- icon: <SvgCircle />,
15
+ icon: 'Circle',
22
16
  },
23
17
  {
24
18
  value: '3',
25
19
  label: 'Option 3',
26
- icon: <SvgSquare />,
27
- iconSelected: <SvgSquareFill />,
20
+ icon: 'Square',
21
+ iconSelected: 'SquareFill',
28
22
  },
29
23
  ];
30
24
 
@@ -64,7 +58,11 @@ export const presets: Preset<SegmentedControlProps>[] = [
64
58
  export const SegmentedControlExample: ComponentExample<SegmentedControlProps> = {
65
59
  containerStyle: { width: '100%', overflow: 'auto', alignItems: 'start' },
66
60
  defaultState: {
67
- options: PRESET_OPTIONS,
61
+ options: PRESET_OPTIONS.map((option) => ({
62
+ ...option,
63
+ icon: undefined,
64
+ iconSelected: undefined,
65
+ })),
68
66
  },
69
67
  presets,
70
68
  variants: false,
@@ -77,29 +77,14 @@ export type SelectProps = CommonProps<'size'> &
77
77
  * { id: '6', label: 'Option 6' },
78
78
  * ];
79
79
  *
80
- * function ExampleStandalone() {
81
- * const [selected, setSelected] = React.useState<string[]>([]);
80
+ * () => {
81
+ * const [selected, setSelected] = useState<string[]>([]);
82
82
  *
83
83
  * return (
84
- * <Select
85
- * aria-label="Select an option"
86
- * itemCount={5}
87
- * name="example-select"
88
- * onChange={setSelected}
89
- * options={OPTIONS}
90
- * placeholder="Select an option"
91
- * size="medium"
92
- * value={selected}
93
- * />
94
- * );
95
- * }
96
- *
97
- * function ExampleWithField() {
98
- * const [selected, setSelected] = React.useState<string[]>([]);
99
- * return (
100
- * <Field>
101
- * <FieldLabel>Select an option</FieldLabel>
84
+ * <>
85
+ * // standalone select example
102
86
  * <Select
87
+ * aria-label="Select an option"
103
88
  * itemCount={5}
104
89
  * name="example-select"
105
90
  * onChange={setSelected}
@@ -108,12 +93,26 @@ export type SelectProps = CommonProps<'size'> &
108
93
  * size="medium"
109
94
  * value={selected}
110
95
  * />
111
- * <FieldDescription>
112
- * The select allows you to choose one option from a list of options.
113
- * </FieldDescription>
114
- * </Field>
96
+ * <br />
97
+ * // select used within a field
98
+ * <Field>
99
+ * <FieldLabel>Select an option</FieldLabel>
100
+ * <Select
101
+ * itemCount={5}
102
+ * name="example-select"
103
+ * onChange={setSelected}
104
+ * options={OPTIONS}
105
+ * placeholder="Select an option"
106
+ * size="medium"
107
+ * value={selected}
108
+ * />
109
+ * <FieldDescription>
110
+ * The select allows you to choose one option from a list of options.
111
+ * </FieldDescription>
112
+ * </Field>
113
+ * </>
115
114
  * );
116
- * }
115
+ * };
117
116
  *
118
117
  * @name Select
119
118
  * @phase UXReview
@@ -156,6 +156,7 @@ export const SelectExample: ComponentExample<SelectProps> = {
156
156
  options: DEFAULT_OPTIONS,
157
157
  scrollLimit: 5,
158
158
  value: '',
159
+ 'aria-label': 'select aria-label',
159
160
  },
160
161
  render: ({ props, Component, preset }) => <Component key={preset?.label} {...props} />,
161
162
  presets,
@@ -49,20 +49,16 @@ export type SkeletonProps = {
49
49
  * @example
50
50
  * import { Skeleton } from '@bspk/ui/skeleton';
51
51
  *
52
- * function Example(item: { title: string; src: string } | null) {
53
- * return (
54
- * <Skeleton variant="photo" width={210} height={118}>
55
- * <img
56
- * style={{
57
- * width: 210,
58
- * height: 118,
59
- * }}
60
- * alt={item.title}
61
- * src={item.src}
62
- * />
63
- * </Skeleton>
64
- * );
65
- * }
52
+ * <Skeleton variant="photo" width={210} height={118}>
53
+ * <img
54
+ * style={{
55
+ * width: 210,
56
+ * height: 118,
57
+ * }}
58
+ * alt={'A cool photo'}
59
+ * src={'https://example.com/cool-photo.jpg'}
60
+ * />
61
+ * </Skeleton>;
66
62
  *
67
63
  * @exampleDescription This example shows a skeleton loading state for an image but can be used for any element.
68
64
  *
@@ -1,8 +1,7 @@
1
- import { useState } from 'react';
1
+ import { useEffect, useState } from 'react';
2
2
  import { SkeletonProps, SkeletonVariant } from '.';
3
3
  import { Avatar } from '-/components/Avatar';
4
4
  import { ExamplePlaceholder } from '-/components/ExamplePlaceholder';
5
- import { useTimeout } from '-/hooks/useTimeout';
6
5
  import { ComponentExample, ComponentExampleRenderProps, Preset } from '-/utils/demo';
7
6
 
8
7
  export const presets: Preset<SkeletonProps>[] = [
@@ -29,7 +28,10 @@ function SkeletonTransition({
29
28
  props,
30
29
  }: Pick<ComponentExampleRenderProps<SkeletonProps>, 'Component' | 'props'>) {
31
30
  const [loaded, setLoaded] = useState(false);
32
- useTimeout(() => setLoaded(true), 3000);
31
+
32
+ useEffect(() => {
33
+ setTimeout(() => setLoaded(true), 3000);
34
+ }, []);
33
35
 
34
36
  return <Component {...props}>{loaded && PROP_VARIANT_CHILDREN[props!.variant as SkeletonVariant]}</Component>;
35
37
  }
@@ -33,15 +33,11 @@ export type SkeletonTextProps = {
33
33
  * @example
34
34
  * import { SkeletonText } from '@bspk/ui/SkeletonText';
35
35
  *
36
- * function Example(item: { content: string } | null) {
37
- * return (
38
- * <SkeletonText textLines={1} textVariant="body-base">
39
- * <Txt as="p" variant="body-base">
40
- * {item?.content}
41
- * </Txt>
42
- * </SkeletonText>
43
- * );
44
- * }
36
+ * <SkeletonText textLines={1} textVariant="body-base">
37
+ * <Txt as="p" variant="body-base">
38
+ * {'This is the loaded text content that was previously loading.'}
39
+ * </Txt>
40
+ * </SkeletonText>;
45
41
  *
46
42
  * @exampleDescription This example shows a skeleton loading state for some text but can be used for any element.
47
43
  *
@@ -74,11 +74,11 @@ export type SliderProps<Value> = Pick<CommonPropsLibrary, 'disabled' | 'readOnly
74
74
  * import { Slider } from '@bspk/ui/Slider';
75
75
  * import { useState } from 'react';
76
76
  *
77
- * function Example() {
77
+ * () => {
78
78
  * const [value, setValue] = useState(50);
79
79
  *
80
80
  * return <Slider value={value} min={0} max={100} label="Slider Example" onChange={setValue} />;
81
- * }
81
+ * };
82
82
  *
83
83
  * @name Slider
84
84
  * @phase UXReview
@@ -22,19 +22,21 @@ export const SliderExample: ComponentExample<SliderProps<number | [number, numbe
22
22
  },
23
23
  presets: [
24
24
  {
25
- label: 'Basic Slider',
25
+ label: 'Formatted Number',
26
26
  propState: {
27
- label: 'Basic option',
28
- min: 20,
29
- max: 80,
30
- step: 1,
31
- value: 30,
27
+ label: 'Price option',
28
+ min: 0,
29
+ max: 100,
30
+ step: 5,
31
+ value: 50,
32
32
  formatNumber: (num) => `$${num}`,
33
- name: 'basic-slider',
33
+ name: 'formatted-number-slider',
34
34
  },
35
35
  },
36
36
  {
37
37
  label: 'Range Slider',
38
+ designPattern:
39
+ 'A control element that allows customers to select a value or adjust a setting by moving the handle along a horizontal track.',
38
40
  propState: {
39
41
  label: 'Range option',
40
42
  min: 0,
@@ -48,19 +50,42 @@ export const SliderExample: ComponentExample<SliderProps<number | [number, numbe
48
50
  },
49
51
  },
50
52
  {
51
- label: 'Undefined Value',
53
+ label: 'Continuous Slider',
54
+ designPattern: 'Continuous sliders allow users to select a value along a subjective range.',
52
55
  propState: {
53
- label: 'undefined',
54
- min: 50,
55
- max: 150,
56
+ label: 'What is the purpose of life?',
57
+ min: 0,
58
+ max: 100,
59
+ value: 42,
56
60
  step: 1,
57
- value: null as unknown as [number, number],
58
- formatNumber: (num, context) => {
59
- if (context === 'max') return `${num}% Passing`;
60
- return `${num}%`;
61
- },
62
- name: 'undefined-slider',
61
+ formatNumber: (num) => num.toFixed(0),
62
+ name: 'continuous-slider',
63
+ marks: false,
64
+ },
65
+ },
66
+ {
67
+ label: 'Discrete Slider',
68
+ designPattern:
69
+ 'Discrete sliders can be adjusted to a specific value by referencing its value indicator. You can generate a mark for each step with marks={true}.',
70
+ propState: {
71
+ label: 'Discrete option',
72
+ min: 0,
73
+ max: 100,
74
+ step: 10,
75
+ value: 40,
76
+ formatNumber: (num) => num.toString(),
77
+ name: 'discrete-slider',
78
+ marks: true,
63
79
  },
64
80
  },
65
81
  ],
82
+ defaultState: {
83
+ label: 'Basic option',
84
+ min: 20,
85
+ max: 80,
86
+ step: 1,
87
+ value: 30,
88
+ formatNumber: (num) => `$${num}`,
89
+ name: 'basic-slider',
90
+ },
66
91
  };
@@ -0,0 +1,64 @@
1
+ import { IconName } from '@bspk/icons';
2
+ import { SvgIcon } from '@bspk/icons/SvgIcon';
3
+ import { useState } from 'react';
4
+ import { SnackbarProps, Snackbar } from './Snackbar';
5
+ import { BspkIcon } from '-/types/common';
6
+ import { createCustomEvent } from '-/utils/createCustomEvent';
7
+
8
+ const CLEAR_EVENT = 'bspk-snackbar-clear' as const;
9
+
10
+ // make onClose optional
11
+ export type SendSnackbarProps = Omit<SnackbarProps, 'icon' | 'innerRef' | 'onClose'> & {
12
+ onClose?: SnackbarProps['onClose'];
13
+ icon?: BspkIcon;
14
+ };
15
+
16
+ export type SnackbarManagerProps = {
17
+ /**
18
+ * Default timeout for snackbars sent via the manager (in milliseconds).
19
+ *
20
+ * @default 5000
21
+ */
22
+ defaultTimeout?: number;
23
+ };
24
+
25
+ const SnackbarEvent = createCustomEvent<SendSnackbarProps | string | typeof CLEAR_EVENT>('bspk-snackbar-event');
26
+
27
+ /**
28
+ * SnackbarManager is a single use component that listens for snackbar events and displays them to the user.
29
+ *
30
+ * We use a custom event to communicate between components and this manager.
31
+ *
32
+ * We don't store the snackbar props in React.Context to avoid unnecessary re-renders of all components that consume the
33
+ * context. :)
34
+ *
35
+ * @name SnackbarManager
36
+ *
37
+ * @phase UXReview
38
+ */
39
+ export function SnackbarManager({ defaultTimeout = 5000 }: SnackbarManagerProps) {
40
+ const [snackbarProps, setSnackbarProps] = useState<SendSnackbarProps | undefined>();
41
+ const { useEventListener } = SnackbarEvent;
42
+
43
+ useEventListener((detail) => {
44
+ if (detail === CLEAR_EVENT || !detail) return setSnackbarProps(undefined);
45
+
46
+ setSnackbarProps(typeof detail === 'string' ? { text: detail, timeout: defaultTimeout } : detail);
47
+ });
48
+
49
+ return snackbarProps ? (
50
+ <Snackbar
51
+ {...snackbarProps}
52
+ icon={snackbarProps.icon ? <SvgIcon name={snackbarProps.icon as IconName} /> : undefined}
53
+ onClose={() => {
54
+ setSnackbarProps(undefined);
55
+ snackbarProps?.onClose?.();
56
+ }}
57
+ open={true}
58
+ />
59
+ ) : null;
60
+ }
61
+
62
+ export const sendSnackbar = (props: SendSnackbarProps | string) => SnackbarEvent.send(props);
63
+
64
+ export const clearSnackbar = () => SnackbarEvent.send(CLEAR_EVENT);
@@ -41,8 +41,6 @@ export type SnackbarProps = CommonProps<'id'> & {
41
41
  * @required
42
42
  */
43
43
  onClose: () => void;
44
- /** Content to be rendered inside the snack bar provider, the snackbar trigger element. */
45
- // children: ReactNode;
46
44
  /**
47
45
  * Time in milliseconds after which the snackbar will auto dismiss.
48
46
  *
@@ -67,24 +65,43 @@ export type SnackbarProps = CommonProps<'id'> & {
67
65
  };
68
66
 
69
67
  /**
70
- * Snackbars are intended to provide feedback about an action. Because of focus trap these will interrupt the customer
71
- * experience.
68
+ * Snackbars provide brief feedback about user actions. Because they use a focus trap, they interrupt the user's
69
+ * workflow and should be used sparingly.
70
+ *
71
+ * #### Inline
72
+ *
73
+ * Render the Snackbar inside the component that triggers it and control visibility with local state/props. This is
74
+ * simple and useful for small or isolated components, but can lead to duplicate snackbars or inadvertent render loops
75
+ * if state is not managed carefully.
76
+ *
77
+ * #### Managed
78
+ *
79
+ * Use the SnackbarManager together with `sendSnackbar` and `clearSnackbar` to control snackbars globally. This lets any
80
+ * part of the app trigger snackbars without prop drilling and helps avoid duplicates. and prevents duplicate snackbars
81
+ * from being shown.
72
82
  *
73
83
  * @example
74
84
  * import { Snackbar } from '@bspk/ui/Snackbar';
75
85
  * import { Button } from '@bspk/ui/Button';
76
86
  * import { useState } from 'react';
87
+ * import { sendSnackbar } from '@bspk/ui/Snackbar/Manager';
77
88
  *
78
- * function ExampleComponent(props) {
89
+ * () => {
79
90
  * const [snackbarOpen, setSnackbarOpen] = useState(false);
80
91
  *
81
92
  * return (
82
93
  * <>
94
+ * // -- inline snackbar
83
95
  * <Button label="Show snackbar" onClick={() => setSnackbarOpen(true)} size="medium" title="Snackbar" />
84
96
  * <Snackbar text="I am an example." open={snackbarOpen} onClose={() => setSnackbarOpen(false)} />
97
+ * // -- managed snackbar
98
+ * <Button
99
+ * label="Show managed snackbar"
100
+ * onClick={() => sendSnackbar({ text: 'I am a managed snackbar!' })}
101
+ * />
85
102
  * </>
86
103
  * );
87
- * }
104
+ * };
88
105
  *
89
106
  * @name Snackbar
90
107
  *