@bspk/ui 1.3.8 → 1.3.10

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 (466) 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/Breadcrumb/BreadcrumbDropdown.d.ts +6 -0
  30. package/dist/components/Breadcrumb/BreadcrumbDropdown.js +6 -0
  31. package/dist/components/Breadcrumb/BreadcrumbDropdown.js.map +1 -1
  32. package/dist/components/Button/Button.d.ts +1 -11
  33. package/dist/components/Button/Button.js +1 -11
  34. package/dist/components/Button/Button.js.map +1 -1
  35. package/dist/components/Button/ButtonExample.js +1 -3
  36. package/dist/components/Button/ButtonExample.js.map +1 -1
  37. package/dist/components/ButtonDock/ButtonDock.d.ts +10 -14
  38. package/dist/components/ButtonDock/ButtonDock.js +10 -14
  39. package/dist/components/ButtonDock/ButtonDock.js.map +1 -1
  40. package/dist/components/Card/Card.d.ts +8 -10
  41. package/dist/components/Card/Card.js +6 -10
  42. package/dist/components/Card/Card.js.map +1 -1
  43. package/dist/components/Carousel/Carousel.d.ts +9 -13
  44. package/dist/components/Carousel/Carousel.js +9 -13
  45. package/dist/components/Carousel/Carousel.js.map +1 -1
  46. package/dist/components/Carousel/CarouselExample.js +14 -14
  47. package/dist/components/Carousel/CarouselExample.js.map +1 -1
  48. package/dist/components/Checkbox/Checkbox.d.ts +7 -4
  49. package/dist/components/Checkbox/Checkbox.js +7 -4
  50. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  51. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
  52. package/dist/components/CheckboxGroup/CheckboxGroup.js +3 -3
  53. package/dist/components/CheckboxGroup/CheckboxGroupExample.js +1 -0
  54. package/dist/components/CheckboxGroup/CheckboxGroupExample.js.map +1 -1
  55. package/dist/components/CheckboxOption/CheckboxOption.d.ts +4 -4
  56. package/dist/components/CheckboxOption/CheckboxOption.js +4 -4
  57. package/dist/components/Chip/Chip.d.ts +3 -7
  58. package/dist/components/Chip/Chip.js +3 -7
  59. package/dist/components/Chip/Chip.js.map +1 -1
  60. package/dist/components/Chip/ChipExample.js +50 -3
  61. package/dist/components/Chip/ChipExample.js.map +1 -1
  62. package/dist/components/ChipGroup/ChipGroup.d.ts +21 -10
  63. package/dist/components/ChipGroup/ChipGroup.js +21 -10
  64. package/dist/components/ChipGroup/ChipGroup.js.map +1 -1
  65. package/dist/components/ChipGroup/ChipGroupExample.js +1 -0
  66. package/dist/components/ChipGroup/ChipGroupExample.js.map +1 -1
  67. package/dist/components/DatePicker/DatePicker.d.ts +13 -12
  68. package/dist/components/DatePicker/DatePicker.js +13 -12
  69. package/dist/components/DatePicker/DatePicker.js.map +1 -1
  70. package/dist/components/Dialog/Dialog.d.ts +11 -6
  71. package/dist/components/Dialog/Dialog.js +11 -6
  72. package/dist/components/Dialog/Dialog.js.map +1 -1
  73. package/dist/components/Divider/Divider.d.ts +5 -9
  74. package/dist/components/Divider/Divider.js +5 -9
  75. package/dist/components/Divider/Divider.js.map +1 -1
  76. package/dist/components/Divider/DividerExample.js +16 -1
  77. package/dist/components/Divider/DividerExample.js.map +1 -1
  78. package/dist/components/Drawer/Drawer.d.ts +3 -3
  79. package/dist/components/Drawer/Drawer.js +3 -3
  80. package/dist/components/Drawer/Drawer.js.map +1 -1
  81. package/dist/components/EmptyState/EmptyState.d.ts +3 -7
  82. package/dist/components/EmptyState/EmptyState.js +3 -7
  83. package/dist/components/EmptyState/EmptyState.js.map +1 -1
  84. package/dist/components/Fab/Fab.d.ts +4 -5
  85. package/dist/components/Fab/Fab.js +4 -6
  86. package/dist/components/Fab/Fab.js.map +1 -1
  87. package/dist/components/Fab/FabExample.d.ts +2 -1
  88. package/dist/components/Fab/FabExample.js +20 -2
  89. package/dist/components/Fab/FabExample.js.map +1 -1
  90. package/dist/components/Field/Field.d.ts +4 -5
  91. package/dist/components/Field/Field.js +4 -5
  92. package/dist/components/Field/Field.js.map +1 -1
  93. package/dist/components/Field/FieldDescription.d.ts +7 -5
  94. package/dist/components/Field/FieldDescription.js +7 -3
  95. package/dist/components/Field/FieldDescription.js.map +1 -1
  96. package/dist/components/Field/FieldError.d.ts +6 -0
  97. package/dist/components/Field/FieldError.js +6 -0
  98. package/dist/components/Field/FieldError.js.map +1 -1
  99. package/dist/components/Field/FieldLabel.d.ts +6 -0
  100. package/dist/components/Field/FieldLabel.js +6 -0
  101. package/dist/components/Field/FieldLabel.js.map +1 -1
  102. package/dist/components/Field/utils.d.ts +5 -0
  103. package/dist/components/Field/utils.js +5 -0
  104. package/dist/components/Field/utils.js.map +1 -1
  105. package/dist/components/FileUpload/FileUpload.d.ts +3 -3
  106. package/dist/components/FileUpload/FileUpload.js +3 -3
  107. package/dist/components/FileUploadItem/FileUploadItem.d.ts +6 -10
  108. package/dist/components/FileUploadItem/FileUploadItem.js +6 -10
  109. package/dist/components/FileUploadItem/FileUploadItem.js.map +1 -1
  110. package/dist/components/FormField/FormField.d.ts +5 -16
  111. package/dist/components/FormField/FormField.js +5 -16
  112. package/dist/components/FormField/FormField.js.map +1 -1
  113. package/dist/components/Img/Img.d.ts +1 -3
  114. package/dist/components/Img/Img.js +1 -3
  115. package/dist/components/Img/Img.js.map +1 -1
  116. package/dist/components/InlineAlert/InlineAlert.d.ts +1 -3
  117. package/dist/components/InlineAlert/InlineAlert.js +1 -3
  118. package/dist/components/InlineAlert/InlineAlert.js.map +1 -1
  119. package/dist/components/InlineAlert/SvgWarningTwoTone.d.ts +6 -0
  120. package/dist/components/InlineAlert/SvgWarningTwoTone.js +6 -0
  121. package/dist/components/InlineAlert/SvgWarningTwoTone.js.map +1 -1
  122. package/dist/components/Input/Input.d.ts +13 -13
  123. package/dist/components/Input/Input.js +13 -13
  124. package/dist/components/Input/InputElement.d.ts +11 -5
  125. package/dist/components/Input/InputElement.js +11 -5
  126. package/dist/components/Input/InputElement.js.map +1 -1
  127. package/dist/components/InputNumber/IncrementButton.d.ts +13 -3
  128. package/dist/components/InputNumber/IncrementButton.js +11 -4
  129. package/dist/components/InputNumber/IncrementButton.js.map +1 -1
  130. package/dist/components/InputNumber/InputNumber.d.ts +20 -20
  131. package/dist/components/InputNumber/InputNumber.js +46 -30
  132. package/dist/components/InputNumber/InputNumber.js.map +1 -1
  133. package/dist/components/InputNumber/InputNumberExample.js +1 -0
  134. package/dist/components/InputNumber/InputNumberExample.js.map +1 -1
  135. package/dist/components/InputNumber/input-number.css +6 -0
  136. package/dist/components/InputNumber/input-number.css.js +6 -0
  137. package/dist/components/InputPhone/InputPhone.d.ts +21 -16
  138. package/dist/components/InputPhone/InputPhone.js +21 -16
  139. package/dist/components/InputPhone/InputPhone.js.map +1 -1
  140. package/dist/components/Layout/Layout.d.ts +1 -3
  141. package/dist/components/Layout/Layout.js +1 -3
  142. package/dist/components/Layout/Layout.js.map +1 -1
  143. package/dist/components/Link/Link.d.ts +1 -3
  144. package/dist/components/Link/Link.js +1 -3
  145. package/dist/components/Link/Link.js.map +1 -1
  146. package/dist/components/ListItem/ListItem.d.ts +22 -21
  147. package/dist/components/ListItem/ListItem.js +19 -16
  148. package/dist/components/ListItem/ListItem.js.map +1 -1
  149. package/dist/components/Menu/Menu.d.ts +5 -9
  150. package/dist/components/Menu/Menu.js +5 -9
  151. package/dist/components/Menu/Menu.js.map +1 -1
  152. package/dist/components/Modal/Modal.d.ts +4 -4
  153. package/dist/components/Modal/Modal.js +4 -4
  154. package/dist/components/Modal/Modal.js.map +1 -1
  155. package/dist/components/Modal/modal.css +12 -1
  156. package/dist/components/Modal/modal.css.js +12 -1
  157. package/dist/components/OTPInput/OTPInput.d.ts +5 -3
  158. package/dist/components/OTPInput/OTPInput.js +5 -3
  159. package/dist/components/OTPInput/OTPInput.js.map +1 -1
  160. package/dist/components/PageControl/PageControl.d.ts +1 -3
  161. package/dist/components/PageControl/PageControl.js +1 -3
  162. package/dist/components/PageControl/PageControl.js.map +1 -1
  163. package/dist/components/Pagination/PageList.d.ts +6 -0
  164. package/dist/components/Pagination/PageList.js +6 -0
  165. package/dist/components/Pagination/PageList.js.map +1 -1
  166. package/dist/components/Pagination/Pagination.d.ts +6 -7
  167. package/dist/components/Pagination/Pagination.js +28 -15
  168. package/dist/components/Pagination/Pagination.js.map +1 -1
  169. package/dist/components/Pagination/pagination.css +5 -14
  170. package/dist/components/Pagination/pagination.css.js +5 -14
  171. package/dist/components/Password/Password.d.ts +19 -20
  172. package/dist/components/Password/Password.js +19 -20
  173. package/dist/components/Password/Password.js.map +1 -1
  174. package/dist/components/Popover/Popover.d.ts +11 -20
  175. package/dist/components/Popover/Popover.js +11 -20
  176. package/dist/components/Popover/Popover.js.map +1 -1
  177. package/dist/components/Popover/PopoverExample.js +1 -1
  178. package/dist/components/Popover/PopoverExample.js.map +1 -1
  179. package/dist/components/ProgressBar/ProgressBar.d.ts +1 -3
  180. package/dist/components/ProgressBar/ProgressBar.js +1 -3
  181. package/dist/components/ProgressBar/ProgressBar.js.map +1 -1
  182. package/dist/components/ProgressCircle/ProgressCircle.d.ts +1 -3
  183. package/dist/components/ProgressCircle/ProgressCircle.js +1 -3
  184. package/dist/components/ProgressCircle/ProgressCircle.js.map +1 -1
  185. package/dist/components/ProgressionStepper/ProgressionStepper.d.ts +1 -3
  186. package/dist/components/ProgressionStepper/ProgressionStepper.js +1 -3
  187. package/dist/components/ProgressionStepper/ProgressionStepper.js.map +1 -1
  188. package/dist/components/RadioGroup/RadioGroup.d.ts +2 -2
  189. package/dist/components/RadioGroup/RadioGroup.js +2 -2
  190. package/dist/components/Rating/Rating.d.ts +2 -4
  191. package/dist/components/Rating/Rating.js +8 -6
  192. package/dist/components/Rating/Rating.js.map +1 -1
  193. package/dist/components/Rating/RatingExample.js +17 -1
  194. package/dist/components/Rating/RatingExample.js.map +1 -1
  195. package/dist/components/Scrim/Scrim.d.ts +0 -1
  196. package/dist/components/Scrim/Scrim.js +0 -1
  197. package/dist/components/Scrim/Scrim.js.map +1 -1
  198. package/dist/components/SearchBar/SearchBar.d.ts +2 -2
  199. package/dist/components/SearchBar/SearchBar.js +2 -2
  200. package/dist/components/SegmentedControl/SegmentedControl.d.ts +3 -3
  201. package/dist/components/SegmentedControl/SegmentedControl.js +3 -3
  202. package/dist/components/SegmentedControl/SegmentedControlExample.js +10 -12
  203. package/dist/components/SegmentedControl/SegmentedControlExample.js.map +1 -1
  204. package/dist/components/Select/Select.d.ts +33 -34
  205. package/dist/components/Select/Select.js +33 -34
  206. package/dist/components/Select/Select.js.map +1 -1
  207. package/dist/components/Skeleton/Circular.d.ts +6 -0
  208. package/dist/components/Skeleton/Circular.js +6 -0
  209. package/dist/components/Skeleton/Circular.js.map +1 -1
  210. package/dist/components/Skeleton/Photo.d.ts +6 -0
  211. package/dist/components/Skeleton/Photo.js +6 -0
  212. package/dist/components/Skeleton/Photo.js.map +1 -1
  213. package/dist/components/Skeleton/Profile.d.ts +6 -0
  214. package/dist/components/Skeleton/Profile.js +6 -0
  215. package/dist/components/Skeleton/Profile.js.map +1 -1
  216. package/dist/components/Skeleton/Rectangular.d.ts +6 -0
  217. package/dist/components/Skeleton/Rectangular.js +6 -0
  218. package/dist/components/Skeleton/Rectangular.js.map +1 -1
  219. package/dist/components/Skeleton/Skeleton.d.ts +10 -14
  220. package/dist/components/Skeleton/Skeleton.js +10 -14
  221. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  222. package/dist/components/Skeleton/SkeletonExample.js +4 -3
  223. package/dist/components/Skeleton/SkeletonExample.js.map +1 -1
  224. package/dist/components/Skeleton/Thumbnail.d.ts +6 -0
  225. package/dist/components/Skeleton/Thumbnail.js +6 -0
  226. package/dist/components/Skeleton/Thumbnail.js.map +1 -1
  227. package/dist/components/SkeletonText/SkeletonText.d.ts +5 -9
  228. package/dist/components/SkeletonText/SkeletonText.js +5 -9
  229. package/dist/components/SkeletonText/SkeletonText.js.map +1 -1
  230. package/dist/components/Slider/Slider.d.ts +2 -2
  231. package/dist/components/Slider/Slider.js +2 -2
  232. package/dist/components/Slider/SliderExample.js +40 -18
  233. package/dist/components/Slider/SliderExample.js.map +1 -1
  234. package/dist/components/Slider/SliderIntervalDots.d.ts +6 -0
  235. package/dist/components/Slider/SliderIntervalDots.js +6 -0
  236. package/dist/components/Slider/SliderIntervalDots.js.map +1 -1
  237. package/dist/components/Snackbar/Manager.d.ts +28 -0
  238. package/dist/components/Snackbar/Manager.js +34 -0
  239. package/dist/components/Snackbar/Manager.js.map +1 -0
  240. package/dist/components/Snackbar/Snackbar.d.ts +23 -6
  241. package/dist/components/Snackbar/Snackbar.js +23 -5
  242. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  243. package/dist/components/Snackbar/SnackbarExample.js +8 -1
  244. package/dist/components/Snackbar/SnackbarExample.js.map +1 -1
  245. package/dist/components/Snackbar/index.d.ts +1 -0
  246. package/dist/components/Snackbar/index.js +1 -0
  247. package/dist/components/Snackbar/index.js.map +1 -1
  248. package/dist/components/StylesProviderDemo/StylesProviderDemo.d.ts +1 -3
  249. package/dist/components/StylesProviderDemo/StylesProviderDemo.js +1 -3
  250. package/dist/components/StylesProviderDemo/StylesProviderDemo.js.map +1 -1
  251. package/dist/components/Switch/Switch.d.ts +2 -2
  252. package/dist/components/Switch/Switch.js +2 -2
  253. package/dist/components/TabGroup/TabGroup.d.ts +2 -2
  254. package/dist/components/TabGroup/TabGroup.js +2 -2
  255. package/dist/components/TabGroup/TabGroupExample.js +5 -11
  256. package/dist/components/TabGroup/TabGroupExample.js.map +1 -1
  257. package/dist/components/TabGroup/tab-group.css +1 -0
  258. package/dist/components/TabGroup/tab-group.css.js +1 -0
  259. package/dist/components/TabList/TabList.d.ts +2 -2
  260. package/dist/components/TabList/TabList.js +3 -4
  261. package/dist/components/TabList/TabList.js.map +1 -1
  262. package/dist/components/TabList/tab-list.css +0 -1
  263. package/dist/components/TabList/tab-list.css.js +0 -1
  264. package/dist/components/Table/Footer.d.ts +6 -0
  265. package/dist/components/Table/Footer.js +6 -0
  266. package/dist/components/Table/Footer.js.map +1 -1
  267. package/dist/components/Table/Table.d.ts +53 -16
  268. package/dist/components/Table/Table.js +53 -16
  269. package/dist/components/Table/Table.js.map +1 -1
  270. package/dist/components/Table/table.css +0 -1
  271. package/dist/components/Table/table.css.js +0 -1
  272. package/dist/components/Tag/Tag.d.ts +1 -3
  273. package/dist/components/Tag/Tag.js +1 -3
  274. package/dist/components/Tag/Tag.js.map +1 -1
  275. package/dist/components/Textarea/Textarea.d.ts +13 -13
  276. package/dist/components/Textarea/Textarea.js +13 -13
  277. package/dist/components/TimePicker/Listbox.d.ts +6 -0
  278. package/dist/components/TimePicker/Listbox.js +6 -0
  279. package/dist/components/TimePicker/Listbox.js.map +1 -1
  280. package/dist/components/TimePicker/Segment.d.ts +6 -0
  281. package/dist/components/TimePicker/Segment.js +6 -0
  282. package/dist/components/TimePicker/Segment.js.map +1 -1
  283. package/dist/components/TimePicker/TimePicker.d.ts +14 -14
  284. package/dist/components/TimePicker/TimePicker.js +14 -14
  285. package/dist/components/ToggleOption/ToggleOption.js +1 -1
  286. package/dist/components/ToggleOption/ToggleOption.js.map +1 -1
  287. package/dist/components/ToggleOption/toggle-option.css +2 -49
  288. package/dist/components/ToggleOption/toggle-option.css.js +2 -49
  289. package/dist/components/Tooltip/Tooltip.d.ts +3 -7
  290. package/dist/components/Tooltip/Tooltip.js +3 -7
  291. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  292. package/dist/components/Tooltip/TooltipExample.js +23 -3
  293. package/dist/components/Tooltip/TooltipExample.js.map +1 -1
  294. package/dist/components/Truncated/Truncated.d.ts +0 -1
  295. package/dist/components/Truncated/Truncated.js +1 -2
  296. package/dist/components/Truncated/Truncated.js.map +1 -1
  297. package/dist/components/Txt/Txt.d.ts +1 -3
  298. package/dist/components/Txt/Txt.js +1 -3
  299. package/dist/components/Txt/Txt.js.map +1 -1
  300. package/dist/components/UIProvider/AriaLiveMessageHandler.js +3 -2
  301. package/dist/components/UIProvider/AriaLiveMessageHandler.js.map +1 -1
  302. package/dist/components/UIProvider/UIProvider.d.ts +0 -1
  303. package/dist/components/UIProvider/UIProvider.js +0 -1
  304. package/dist/components/UIProvider/UIProvider.js.map +1 -1
  305. package/dist/hooks/useAddEventListener.d.ts +1 -2
  306. package/dist/hooks/useAddEventListener.js.map +1 -1
  307. package/dist/hooks/useLongPress.d.ts +30 -15
  308. package/dist/hooks/useLongPress.js +26 -42
  309. package/dist/hooks/useLongPress.js.map +1 -1
  310. package/dist/hooks/useRadioState.d.ts +1 -1
  311. package/dist/hooks/useTimeout.d.ts +1 -2
  312. package/dist/hooks/useTimeout.js +20 -4
  313. package/dist/hooks/useTimeout.js.map +1 -1
  314. package/dist/styles/base.css +9 -0
  315. package/dist/styles/base.css.js +9 -0
  316. package/dist/types/common.d.ts +3 -0
  317. package/dist/types/common.js.map +1 -1
  318. package/dist/types/meta.d.ts +1 -0
  319. package/dist/types/meta.js.map +1 -1
  320. package/dist/utils/createCustomEvent.d.ts +17 -0
  321. package/dist/utils/createCustomEvent.js +21 -0
  322. package/dist/utils/createCustomEvent.js.map +1 -0
  323. package/dist/utils/createExampleChildElement.js +3 -3
  324. package/dist/utils/createExampleChildElement.js.map +1 -1
  325. package/dist/utils/demo.d.ts +18 -26
  326. package/dist/utils/demo.js.map +1 -1
  327. package/meta.ts +6 -1
  328. package/package.json +1 -1
  329. package/src/components/Accordion/Accordion.tsx +20 -3
  330. package/src/components/Avatar/Avatar.tsx +13 -14
  331. package/src/components/AvatarGroup/AvatarGroup.tsx +30 -13
  332. package/src/components/Badge/Badge.tsx +1 -3
  333. package/src/components/BadgeDot/BadgeDot.tsx +6 -4
  334. package/src/components/BannerAlert/BannerAlert.tsx +11 -12
  335. package/src/components/BottomNavigation/BottomNavigation.tsx +6 -3
  336. package/src/components/BottomNavigation/BottomNavigationExample.tsx +31 -36
  337. package/src/components/BottomNavigation/bottom-navigation.scss +10 -1
  338. package/src/components/Breadcrumb/Breadcrumb.tsx +17 -18
  339. package/src/components/Breadcrumb/BreadcrumbDropdown.tsx +6 -0
  340. package/src/components/Button/Button.tsx +1 -11
  341. package/src/components/Button/ButtonExample.tsx +1 -2
  342. package/src/components/ButtonDock/ButtonDock.tsx +10 -14
  343. package/src/components/Card/Card.tsx +9 -11
  344. package/src/components/Carousel/Carousel.tsx +9 -13
  345. package/src/components/Carousel/CarouselExample.tsx +25 -25
  346. package/src/components/Checkbox/Checkbox.tsx +7 -4
  347. package/src/components/CheckboxGroup/CheckboxGroup.tsx +3 -3
  348. package/src/components/CheckboxGroup/CheckboxGroupExample.tsx +1 -0
  349. package/src/components/CheckboxOption/CheckboxOption.tsx +4 -4
  350. package/src/components/Chip/Chip.tsx +3 -7
  351. package/src/components/Chip/ChipExample.tsx +52 -3
  352. package/src/components/ChipGroup/ChipGroup.tsx +21 -10
  353. package/src/components/ChipGroup/ChipGroupExample.tsx +1 -1
  354. package/src/components/DatePicker/DatePicker.tsx +13 -12
  355. package/src/components/Dialog/Dialog.tsx +11 -6
  356. package/src/components/Divider/Divider.tsx +5 -9
  357. package/src/components/Divider/DividerExample.tsx +18 -1
  358. package/src/components/Drawer/Drawer.tsx +3 -4
  359. package/src/components/EmptyState/EmptyState.tsx +3 -7
  360. package/src/components/Fab/Fab.tsx +8 -5
  361. package/src/components/Fab/FabExample.tsx +22 -3
  362. package/src/components/Field/Field.tsx +4 -5
  363. package/src/components/Field/FieldDescription.tsx +7 -5
  364. package/src/components/Field/FieldError.tsx +6 -0
  365. package/src/components/Field/FieldLabel.tsx +6 -0
  366. package/src/components/Field/utils.ts +5 -0
  367. package/src/components/FileUpload/FileUpload.tsx +3 -3
  368. package/src/components/FileUploadItem/FileUploadItem.tsx +6 -10
  369. package/src/components/FormField/FormField.tsx +5 -16
  370. package/src/components/Img/Img.tsx +1 -3
  371. package/src/components/InlineAlert/InlineAlert.tsx +1 -3
  372. package/src/components/InlineAlert/SvgWarningTwoTone.tsx +6 -0
  373. package/src/components/Input/Input.tsx +13 -13
  374. package/src/components/Input/InputElement.tsx +11 -5
  375. package/src/components/InputNumber/IncrementButton.tsx +21 -11
  376. package/src/components/InputNumber/InputNumber.tsx +53 -51
  377. package/src/components/InputNumber/InputNumberExample.tsx +1 -0
  378. package/src/components/InputNumber/input-number.scss +10 -0
  379. package/src/components/InputPhone/InputPhone.tsx +21 -16
  380. package/src/components/Layout/Layout.tsx +1 -3
  381. package/src/components/Link/Link.tsx +1 -3
  382. package/src/components/ListItem/ListItem.tsx +22 -20
  383. package/src/components/Menu/Menu.tsx +5 -9
  384. package/src/components/Modal/Modal.tsx +10 -5
  385. package/src/components/Modal/modal.scss +13 -1
  386. package/src/components/OTPInput/OTPInput.tsx +5 -3
  387. package/src/components/PageControl/PageControl.tsx +1 -3
  388. package/src/components/Pagination/PageList.tsx +6 -0
  389. package/src/components/Pagination/Pagination.tsx +50 -24
  390. package/src/components/Pagination/pagination.scss +7 -17
  391. package/src/components/Password/Password.tsx +19 -20
  392. package/src/components/Popover/Popover.tsx +11 -20
  393. package/src/components/Popover/PopoverExample.tsx +1 -1
  394. package/src/components/ProgressBar/ProgressBar.tsx +1 -3
  395. package/src/components/ProgressCircle/ProgressCircle.tsx +1 -3
  396. package/src/components/ProgressionStepper/ProgressionStepper.tsx +1 -3
  397. package/src/components/RadioGroup/RadioGroup.tsx +2 -2
  398. package/src/components/Rating/Rating.tsx +34 -14
  399. package/src/components/Rating/RatingExample.tsx +18 -1
  400. package/src/components/Scrim/Scrim.tsx +0 -1
  401. package/src/components/SearchBar/SearchBar.tsx +2 -2
  402. package/src/components/SegmentedControl/SegmentedControl.tsx +3 -3
  403. package/src/components/SegmentedControl/SegmentedControlExample.tsx +10 -12
  404. package/src/components/Select/Select.tsx +33 -34
  405. package/src/components/Skeleton/Circular.tsx +6 -0
  406. package/src/components/Skeleton/Photo.tsx +6 -0
  407. package/src/components/Skeleton/Profile.tsx +6 -0
  408. package/src/components/Skeleton/Rectangular.tsx +6 -0
  409. package/src/components/Skeleton/Skeleton.tsx +10 -14
  410. package/src/components/Skeleton/SkeletonExample.tsx +5 -3
  411. package/src/components/Skeleton/Thumbnail.tsx +6 -0
  412. package/src/components/SkeletonText/SkeletonText.tsx +5 -9
  413. package/src/components/Slider/Slider.tsx +2 -2
  414. package/src/components/Slider/SliderExample.tsx +42 -17
  415. package/src/components/Slider/SliderIntervalDots.tsx +6 -0
  416. package/src/components/Snackbar/Manager.tsx +63 -0
  417. package/src/components/Snackbar/Snackbar.tsx +23 -7
  418. package/src/components/Snackbar/SnackbarExample.tsx +28 -6
  419. package/src/components/Snackbar/index.tsx +1 -0
  420. package/src/components/StylesProviderDemo/StylesProviderDemo.tsx +1 -3
  421. package/src/components/Switch/Switch.tsx +2 -2
  422. package/src/components/TabGroup/TabGroup.tsx +2 -2
  423. package/src/components/TabGroup/TabGroupExample.tsx +5 -11
  424. package/src/components/TabGroup/tab-group.scss +1 -0
  425. package/src/components/TabList/TabList.tsx +3 -4
  426. package/src/components/TabList/tab-list.scss +0 -1
  427. package/src/components/Table/Footer.tsx +6 -0
  428. package/src/components/Table/Table.tsx +53 -16
  429. package/src/components/Table/table.scss +0 -1
  430. package/src/components/Tag/Tag.tsx +1 -3
  431. package/src/components/Textarea/Textarea.tsx +13 -13
  432. package/src/components/TimePicker/Listbox.tsx +6 -0
  433. package/src/components/TimePicker/Segment.tsx +6 -0
  434. package/src/components/TimePicker/TimePicker.tsx +14 -14
  435. package/src/components/ToggleOption/ToggleOption.tsx +1 -0
  436. package/src/components/ToggleOption/toggle-option.scss +2 -61
  437. package/src/components/Tooltip/Tooltip.tsx +3 -7
  438. package/src/components/Tooltip/TooltipExample.tsx +23 -11
  439. package/src/components/Truncated/Truncated.tsx +1 -2
  440. package/src/components/Txt/Txt.tsx +1 -3
  441. package/src/components/UIProvider/AriaLiveMessageHandler.tsx +4 -2
  442. package/src/components/UIProvider/UIProvider.tsx +0 -1
  443. package/src/hooks/useAddEventListener.ts +1 -3
  444. package/src/hooks/useLongPress.ts +58 -48
  445. package/src/hooks/useTimeout.ts +1 -5
  446. package/src/styles/base.scss +9 -0
  447. package/src/types/common.ts +4 -0
  448. package/src/types/meta.ts +1 -0
  449. package/src/utils/createCustomEvent.ts +35 -0
  450. package/src/utils/createExampleChildElement.tsx +3 -8
  451. package/src/utils/demo.ts +24 -27
  452. package/dist/components/ListItem/ListItemButton.d.ts +0 -2
  453. package/dist/components/ListItem/ListItemButton.js +0 -7
  454. package/dist/components/ListItem/ListItemButton.js.map +0 -1
  455. package/dist/components/Pagination/PageInput.d.ts +0 -4
  456. package/dist/components/Pagination/PageInput.js +0 -36
  457. package/dist/components/Pagination/PageInput.js.map +0 -1
  458. package/dist/components/Truncated/truncated.css +0 -8
  459. package/dist/components/Truncated/truncated.css.js +0 -13
  460. package/dist/hooks/usePaginationState.d.ts +0 -4
  461. package/dist/hooks/usePaginationState.js +0 -22
  462. package/dist/hooks/usePaginationState.js.map +0 -1
  463. package/src/components/ListItem/ListItemButton.tsx +0 -6
  464. package/src/components/Pagination/PageInput.tsx +0 -65
  465. package/src/components/Truncated/truncated.scss +0 -8
  466. package/src/hooks/usePaginationState.tsx +0 -24
@@ -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> = () => {
@@ -23,7 +23,6 @@ export type ScrimProps = CommonProps<'owner'> & {
23
23
  * attention to a modal or sheet.
24
24
  *
25
25
  * @name Scrim
26
- *
27
26
  * @phase Utility
28
27
  */
29
28
  export function Scrim({ visible = true, owner, ...props }: ScrimProps) {
@@ -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
@@ -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,
@@ -68,39 +68,24 @@ export type SelectProps = CommonProps<'size'> &
68
68
  * @example
69
69
  * import { Select } from '@bspk/ui/Select';
70
70
  *
71
- * const OPTIONS = [
72
- * { id: '1', label: 'Option 1' },
73
- * { id: '2', label: 'Option 2' },
74
- * { id: '3', label: 'Option 3' },
75
- * { id: '4', label: 'Option 4' },
76
- * { id: '5', label: 'Option 5' },
77
- * { id: '6', label: 'Option 6' },
78
- * ];
71
+ * () => {
72
+ * const OPTIONS = [
73
+ * { id: '1', label: 'Option 1' },
74
+ * { id: '2', label: 'Option 2' },
75
+ * { id: '3', label: 'Option 3' },
76
+ * { id: '4', label: 'Option 4' },
77
+ * { id: '5', label: 'Option 5' },
78
+ * { id: '6', label: 'Option 6' },
79
+ * ];
79
80
  *
80
- * function ExampleStandalone() {
81
- * const [selected, setSelected] = React.useState<string[]>([]);
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
103
- * itemCount={5}
87
+ * aria-label="Select an option"
88
+ * scrollLimit={5}
104
89
  * name="example-select"
105
90
  * onChange={setSelected}
106
91
  * options={OPTIONS}
@@ -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
+ * scrollLimit={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
@@ -1,5 +1,11 @@
1
1
  import { Skeleton, SkeletonProps } from './Skeleton';
2
2
 
3
+ /**
4
+ * SkeletonCircular component displays a circular skeleton loader.
5
+ *
6
+ * @name SkeletonCircular
7
+ * @parent Skeleton
8
+ */
3
9
  export function SkeletonCircular(props: Pick<SkeletonProps, 'height' | 'width'>) {
4
10
  return <Skeleton {...props} variant="circular" />;
5
11
  }
@@ -1,5 +1,11 @@
1
1
  import { Skeleton, SkeletonProps } from './Skeleton';
2
2
 
3
+ /**
4
+ * SkeletonPhoto component displays a photo skeleton loader.
5
+ *
6
+ * @name SkeletonPhoto
7
+ * @parent Skeleton
8
+ */
3
9
  export function SkeletonPhoto(props: Pick<SkeletonProps, 'height' | 'width'>) {
4
10
  return <Skeleton {...props} variant="photo" />;
5
11
  }
@@ -1,5 +1,11 @@
1
1
  import { Skeleton, SkeletonProps } from './Skeleton';
2
2
 
3
+ /**
4
+ * SkeletonProfile component displays a profile skeleton loader.
5
+ *
6
+ * @name SkeletonProfile
7
+ * @parent Skeleton
8
+ */
3
9
  export function SkeletonProfile(props: Pick<SkeletonProps, 'height' | 'width'>) {
4
10
  return <Skeleton {...props} variant="profile" />;
5
11
  }
@@ -1,5 +1,11 @@
1
1
  import { Skeleton, SkeletonProps } from './Skeleton';
2
2
 
3
+ /**
4
+ * SkeletonRectangular component displays a rectangular skeleton loader.
5
+ *
6
+ * @name SkeletonRectangular
7
+ * @parent Skeleton
8
+ */
3
9
  export function SkeletonRectangular(props: Pick<SkeletonProps, 'height' | 'width'>) {
4
10
  return <Skeleton {...props} variant="rectangular" />;
5
11
  }
@@ -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
  }
@@ -1,5 +1,11 @@
1
1
  import { Skeleton, SkeletonProps } from './Skeleton';
2
2
 
3
+ /**
4
+ * SkeletonThumbnail component displays a thumbnail skeleton loader.
5
+ *
6
+ * @name SkeletonThumbnail
7
+ * @parent Skeleton
8
+ */
3
9
  export function SkeletonThumbnail(props: Pick<SkeletonProps, 'height' | 'width'>) {
4
10
  return <Skeleton {...props} variant="thumbnail" />;
5
11
  }
@@ -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
  };
@@ -4,6 +4,12 @@ export type IntervalDotProps = Pick<SliderProps<SliderValue>, 'max' | 'min' | 'v
4
4
  step: number;
5
5
  };
6
6
 
7
+ /**
8
+ * SliderIntervalDots component displays interval dots along a slider track.
9
+ *
10
+ * @name SliderIntervalDots
11
+ * @parent Slider
12
+ */
7
13
  export function SliderIntervalDots({ step, max, min, value }: IntervalDotProps) {
8
14
  if (step <= 0) return null;
9
15
 
@@ -0,0 +1,63 @@
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
+ * @phase UXReview
37
+ */
38
+ export function SnackbarManager({ defaultTimeout = 5000 }: SnackbarManagerProps) {
39
+ const [snackbarProps, setSnackbarProps] = useState<SendSnackbarProps | undefined>();
40
+ const { useEventListener } = SnackbarEvent;
41
+
42
+ useEventListener((detail) => {
43
+ if (detail === CLEAR_EVENT || !detail) return setSnackbarProps(undefined);
44
+
45
+ setSnackbarProps(typeof detail === 'string' ? { text: detail, timeout: defaultTimeout } : detail);
46
+ });
47
+
48
+ return snackbarProps ? (
49
+ <Snackbar
50
+ {...snackbarProps}
51
+ icon={snackbarProps.icon ? <SvgIcon name={snackbarProps.icon as IconName} /> : undefined}
52
+ onClose={() => {
53
+ setSnackbarProps(undefined);
54
+ snackbarProps?.onClose?.();
55
+ }}
56
+ open={true}
57
+ />
58
+ ) : null;
59
+ }
60
+
61
+ export const sendSnackbar = (props: SendSnackbarProps | string) => SnackbarEvent.send(props);
62
+
63
+ 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,27 +65,45 @@ 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
- *
91
107
  * @phase UXReview
92
108
  */
93
109
  export function Snackbar({
@@ -1,3 +1,5 @@
1
+ import { IconName } from '@bspk/icons';
2
+ import { clearSnackbar, sendSnackbar } from './Manager';
1
3
  import { Snackbar, SnackbarProps } from './Snackbar';
2
4
  import { Button } from '-/components/Button';
3
5
  import { ComponentExample } from '-/utils/demo';
@@ -7,12 +9,32 @@ export const SnackbarExample: ComponentExample<SnackbarProps> = {
7
9
  defaultState: {},
8
10
  disableProps: [],
9
11
  presets: [],
10
- render: ({ props, setState }) => (
11
- <>
12
- <Snackbar {...props} onClose={() => setState({ open: false })} />
13
- <Button label="open snackbar" onClick={() => setState({ open: true })} size="medium" title="Snackbar" />
14
- </>
15
- ),
12
+ render: ({ props, setState }) => {
13
+ return (
14
+ <>
15
+ <Snackbar {...props} onClose={() => setState({ open: false })} />
16
+ <Button
17
+ label="Launch Inline Snackbar"
18
+ onClick={() => setState({ open: true })}
19
+ size="medium"
20
+ title="Snackbar"
21
+ />
22
+ <br />
23
+ <Button
24
+ label="Launch Managed Snackbar"
25
+ onClick={() =>
26
+ sendSnackbar({
27
+ ...props,
28
+ text: `Managed: ${props.text}`,
29
+ icon: 'icon:icon-name' in props ? (props['icon:icon-name'] as IconName) : undefined,
30
+ })
31
+ }
32
+ />
33
+ <br />
34
+ <Button label="Clear Managed Snackbar" onClick={() => clearSnackbar()} />
35
+ </>
36
+ );
37
+ },
16
38
  sections: [],
17
39
  variants: false,
18
40
  };
@@ -1 +1,2 @@
1
1
  export * from './Snackbar';
2
+ export * from './Manager';
@@ -21,9 +21,7 @@ export type StylesProviderDemoProps = {
21
21
  * @example
22
22
  * import { StylesProviderDemo } from '@bspk/ui/StylesProviderDemo';
23
23
  *
24
- * function Example() {
25
- * return <StylesProviderDemo brand="anywhere" />;
26
- * }
24
+ * <StylesProviderDemo brand="anywhere" />;
27
25
  *
28
26
  * @name StylesProviderDemo
29
27
  * @phase Utility