react-miui 0.32.3 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (621) hide show
  1. package/.claude/settings.json +12 -0
  2. package/.claude/settings.local.json +11 -1
  3. package/.storybook/main.ts +4 -1
  4. package/.storybook/preview.tsx +10 -4
  5. package/CHANGELOG.md +16 -0
  6. package/dist/components/form/Checkbox.styled.d.ts +6 -6
  7. package/dist/components/form/ColorPicker.styled.d.ts +5 -5
  8. package/dist/components/form/Label.d.ts +3 -3
  9. package/dist/components/form/Label.styled.d.ts +5 -5
  10. package/dist/components/form/Select.styled.d.ts +3 -3
  11. package/dist/components/form/Toggle.d.ts +3 -3
  12. package/dist/components/form/Toggle.styled.d.ts +5 -5
  13. package/dist/components/form/choice/Choice.styled.d.ts +3 -3
  14. package/dist/components/form/choice/ChoiceItem.styled.d.ts +2 -2
  15. package/dist/components/form/input/Input.css.d.ts +47 -1
  16. package/dist/components/form/input/Input.css.d.ts.map +1 -1
  17. package/dist/components/form/input/Input.css.js +49 -1
  18. package/dist/components/form/input/Input.css.js.map +1 -1
  19. package/dist/components/form/input/Input.d.ts +5 -1
  20. package/dist/components/form/input/Input.d.ts.map +1 -1
  21. package/dist/components/form/input/Input.js +28 -5
  22. package/dist/components/form/input/Input.js.map +1 -1
  23. package/dist/components/form/input/Input.styled.d.ts +183 -10
  24. package/dist/components/form/input/Input.styled.d.ts.map +1 -1
  25. package/dist/components/form/input/Input.styled.js +5 -1
  26. package/dist/components/form/input/Input.styled.js.map +1 -1
  27. package/dist/components/form/textarea/TextArea.d.ts +6 -1
  28. package/dist/components/form/textarea/TextArea.d.ts.map +1 -1
  29. package/dist/components/form/textarea/TextArea.js +32 -4
  30. package/dist/components/form/textarea/TextArea.js.map +1 -1
  31. package/dist/components/form/textarea/TextArea.styled.d.ts +177 -4
  32. package/dist/components/form/textarea/TextArea.styled.d.ts.map +1 -1
  33. package/dist/components/form/textarea/TextArea.styled.js +10 -2
  34. package/dist/components/form/textarea/TextArea.styled.js.map +1 -1
  35. package/dist/components/layout/card/Card.styled.d.ts +3 -3
  36. package/dist/components/layout/header/Header.styled.d.ts +9 -9
  37. package/dist/components/layout/header/HeaderIconAction.styled.d.ts +8 -8
  38. package/dist/components/layout/header/StickyHeader.d.ts +3 -3
  39. package/dist/components/layout/header/StickyHeader.styled.d.ts +6 -6
  40. package/dist/components/layout/list/Header.d.ts +7 -7
  41. package/dist/components/layout/list/Item.d.ts +8 -8
  42. package/dist/components/layout/list/Item.styled.d.ts +9 -9
  43. package/dist/components/layout/list/Label.d.ts +2 -2
  44. package/dist/components/layout/list/List.d.ts +18 -18
  45. package/dist/components/layout/list/Value.d.ts +2 -2
  46. package/dist/components/layout/section/SearchContainer.d.ts +2 -2
  47. package/dist/components/layout/section/Section.d.ts +5 -5
  48. package/dist/components/layout/section/SectionContainer.d.ts +2 -2
  49. package/dist/components/layout/table/Table.styled.d.ts +3 -3
  50. package/dist/components/native/index.d.ts +2 -2
  51. package/dist/components/ui/action/Action.styled.d.ts +8 -8
  52. package/dist/components/ui/action/EqualActions.styled.d.ts +3 -3
  53. package/dist/components/ui/button/Button.styled.d.ts +3 -3
  54. package/dist/components/ui/directionPad/Button.styled.d.ts +4 -4
  55. package/dist/components/ui/directionPad/Middle.styled.d.ts +2 -2
  56. package/dist/components/ui/directionPad/Pad.styled.d.ts +4 -4
  57. package/dist/components/ui/drawer/Drawer.d.ts +10 -1
  58. package/dist/components/ui/drawer/Drawer.d.ts.map +1 -1
  59. package/dist/components/ui/drawer/Drawer.js +135 -15
  60. package/dist/components/ui/drawer/Drawer.js.map +1 -1
  61. package/dist/components/ui/drawer/Drawer.styled.d.ts +90 -5
  62. package/dist/components/ui/drawer/Drawer.styled.d.ts.map +1 -1
  63. package/dist/components/ui/drawer/Drawer.styled.js +13 -1
  64. package/dist/components/ui/drawer/Drawer.styled.js.map +1 -1
  65. package/dist/components/ui/keyValue/KeyValue.styled.d.ts +13 -13
  66. package/dist/components/ui/line/Line.d.ts +3 -3
  67. package/dist/components/ui/message/Message.styled.d.ts +3 -3
  68. package/dist/components/ui/modal/Modal.d.ts +2 -2
  69. package/dist/components/ui/modal/Modal.d.ts.map +1 -1
  70. package/dist/components/ui/modal/Modal.js.map +1 -1
  71. package/dist/components/ui/modal/Modal.styled.d.ts +10 -10
  72. package/dist/components/ui/modal/ModalButtons.styled.d.ts +5 -5
  73. package/dist/components/ui/pop/Pop.styled.d.ts +12 -12
  74. package/dist/components/ui/progress/Progress.styled.d.ts +8 -8
  75. package/dist/components/ui/stats/Stats.styled.d.ts +11 -11
  76. package/dist/components/ui/tabs/Item.styled.d.ts +2 -2
  77. package/dist/components/ui/tabs/Selector.styled.d.ts +5 -5
  78. package/dist/components/ui/toaster/Toaster.d.ts +8 -15
  79. package/dist/components/ui/toaster/Toaster.d.ts.map +1 -1
  80. package/dist/components/ui/toaster/Toaster.js +31 -55
  81. package/dist/components/ui/toaster/Toaster.js.map +1 -1
  82. package/dist/components/ui/toolButton/ToolButton.styled.d.ts +3 -3
  83. package/dist/components/ui/tooltip/Tooltip.d.ts +30 -0
  84. package/dist/components/ui/tooltip/Tooltip.d.ts.map +1 -0
  85. package/dist/components/ui/tooltip/Tooltip.js +81 -0
  86. package/dist/components/ui/tooltip/Tooltip.js.map +1 -0
  87. package/dist/components/ui/tooltip/Tooltip.styled.d.ts +173 -0
  88. package/dist/components/ui/tooltip/Tooltip.styled.d.ts.map +1 -0
  89. package/dist/components/ui/{toaster/Notification.js → tooltip/Tooltip.styled.js} +30 -18
  90. package/dist/components/ui/tooltip/Tooltip.styled.js.map +1 -0
  91. package/dist/components/utils/Gap.d.ts +3 -3
  92. package/dist/components/utils/Spacer.d.ts +2 -2
  93. package/dist/index.d.ts +1 -0
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +1 -0
  96. package/dist/index.js.map +1 -1
  97. package/dist/theme.d.ts +86 -86
  98. package/docs/assets/highlight.css +7 -0
  99. package/docs/assets/navigation.js +1 -1
  100. package/docs/assets/search.js +1 -1
  101. package/docs/classes/index.Pop.html +18 -18
  102. package/docs/documents/Test.html +2 -2
  103. package/docs/enums/index.ICON.html +2 -2
  104. package/docs/functions/index.Action.html +5 -5
  105. package/docs/functions/index.Button.html +5 -5
  106. package/docs/functions/index.Card.html +4 -4
  107. package/docs/functions/index.Checkbox.html +5 -5
  108. package/docs/functions/index.Choice.html +4 -4
  109. package/docs/functions/index.ColorPicker.html +5 -5
  110. package/docs/functions/index.CoveringLoader.html +5 -5
  111. package/docs/functions/index.DirectionPad.html +4 -4
  112. package/docs/functions/index.Drawer.html +4 -4
  113. package/docs/functions/index.EqualActions.html +4 -4
  114. package/docs/functions/index.FullLoader.html +5 -5
  115. package/docs/functions/index.Gap.html +4 -4
  116. package/docs/functions/index.HandleEsc.html +6 -6
  117. package/docs/functions/index.Header.html +5 -5
  118. package/docs/functions/index.HeaderIconAction.html +5 -5
  119. package/docs/functions/index.Icon-1.html +4 -4
  120. package/docs/functions/index.If.html +6 -6
  121. package/docs/functions/index.Input.html +1 -1
  122. package/docs/functions/index.KeyValue.html +4 -4
  123. package/docs/functions/index.Label.html +4 -4
  124. package/docs/functions/index.Line.html +5 -5
  125. package/docs/functions/index.List.html +4 -4
  126. package/docs/functions/index.Loader.html +5 -5
  127. package/docs/functions/index.Loading.html +6 -6
  128. package/docs/functions/index.Message.html +5 -5
  129. package/docs/functions/index.Modal.html +4 -4
  130. package/docs/functions/index.ModalButtons.html +4 -4
  131. package/docs/functions/index.PopLoader.html +5 -5
  132. package/docs/functions/index.PopOption.html +4 -4
  133. package/docs/functions/index.Progress.html +4 -4
  134. package/docs/functions/index.SearchContainer.html +4 -4
  135. package/docs/functions/index.Section.html +5 -5
  136. package/docs/functions/index.Select.html +4 -4
  137. package/docs/functions/index.Selector.html +4 -4
  138. package/docs/functions/index.Spacer.html +4 -4
  139. package/docs/functions/index.Stats.html +4 -4
  140. package/docs/functions/index.StickyHeader.html +5 -5
  141. package/docs/functions/index.Table.html +4 -4
  142. package/docs/functions/index.TextArea.html +4 -4
  143. package/docs/functions/index.ToasterProvider.html +29 -0
  144. package/docs/functions/index.Toggle.html +5 -5
  145. package/docs/functions/index.ToolButton.html +5 -5
  146. package/docs/functions/index.Tooltip.html +18 -0
  147. package/docs/functions/index.TooltipProvider.html +6 -0
  148. package/docs/functions/index.borderPxToRem.html +1 -1
  149. package/docs/functions/index.createTheme.html +1 -1
  150. package/docs/functions/index.css.html +1 -1
  151. package/docs/functions/index.dimensionsPxToRem.html +1 -1
  152. package/docs/functions/index.fontPxToRem.html +1 -1
  153. package/docs/functions/index.getCssText.html +1 -1
  154. package/docs/functions/index.globalCss.html +2 -2
  155. package/docs/functions/index.injectGlobalStyles.html +1 -1
  156. package/docs/functions/index.keyframes.html +1 -1
  157. package/docs/functions/index.pxToRem.html +1 -1
  158. package/docs/functions/index.styled.html +1 -1
  159. package/docs/functions/index.toast.html +12 -0
  160. package/docs/functions/index.useToaster.html +1 -1
  161. package/docs/index.html +2 -2
  162. package/docs/interfaces/index.IconProps.html +2 -2
  163. package/docs/interfaces/index.InputCustomProps.html +7 -2
  164. package/docs/interfaces/index.LoaderProps.html +6 -6
  165. package/docs/interfaces/index.StickyHeaderProps.html +4 -4
  166. package/docs/interfaces/index.ToasterProviderProps.html +28 -0
  167. package/docs/interfaces/index.TooltipProps.html +36 -0
  168. package/docs/interfaces/index.TooltipProviderProps.html +13 -0
  169. package/docs/modules/index.html +1 -1
  170. package/docs/modules.html +1 -1
  171. package/docs/types/index.ActionProps.html +1 -1
  172. package/docs/types/index.CardProps.html +1 -1
  173. package/docs/types/index.CheckboxProps.html +2 -2
  174. package/docs/types/index.ChoiceProps.html +1 -1
  175. package/docs/types/index.ColorPickerProps.html +1 -1
  176. package/docs/types/index.DirectionPadProps.html +1 -1
  177. package/docs/types/index.DrawerFrom.html +1 -0
  178. package/docs/types/index.DrawerProps.html +28 -1
  179. package/docs/types/index.EqualActionsProps.html +1 -1
  180. package/docs/types/index.HeaderProps.html +1 -1
  181. package/docs/types/index.InputProps.html +1 -1
  182. package/docs/types/index.KeyValueProps.html +1 -1
  183. package/docs/types/index.LabelProps.html +1 -1
  184. package/docs/types/index.OverwriteProps.html +1 -1
  185. package/docs/types/index.ProgressProps.html +2 -2
  186. package/docs/types/index.SelectProps.html +1 -1
  187. package/docs/types/index.SelectorProps.html +1 -1
  188. package/docs/types/index.Stat.html +1 -1
  189. package/docs/types/index.StatsProps.html +1 -1
  190. package/docs/types/index.TextAreaProps.html +1 -1
  191. package/docs/types/index.ThemeCSS.html +1 -1
  192. package/docs/types/index.ToggleProps.html +2 -2
  193. package/docs/variables/index.ActionBadgeSelector.html +1 -1
  194. package/docs/variables/index.ActionCircleSelector.html +1 -1
  195. package/docs/variables/index.CheckboxCheckmarkWrapperSelector.html +1 -1
  196. package/docs/variables/index.CheckboxTextLabelSelector.html +1 -1
  197. package/docs/variables/index.ChoiceItemSelector.html +1 -1
  198. package/docs/variables/index.ColorPickerColorDisplaySelector.html +1 -1
  199. package/docs/variables/index.DirectionPadButtonDotSelector.html +1 -1
  200. package/docs/variables/index.DirectionPadButtonSelector.html +1 -1
  201. package/docs/variables/index.DirectionPadLineSelector.html +1 -1
  202. package/docs/variables/index.DirectionPadMiddleSelector.html +1 -1
  203. package/docs/variables/index.DrawerContentSelector.html +1 -1
  204. package/docs/variables/index.HeaderAfterSelector.html +1 -1
  205. package/docs/variables/index.HeaderBeforeSelector.html +1 -1
  206. package/docs/variables/index.HeaderContentsSelector.html +1 -1
  207. package/docs/variables/index.HeaderIconActionIconSelector.html +1 -1
  208. package/docs/variables/index.InputContainerSelector.html +1 -0
  209. package/docs/variables/index.InputInputSelector.html +1 -1
  210. package/docs/variables/index.InputLabelSelector.html +1 -0
  211. package/docs/variables/index.InputPrefixSelector.html +1 -1
  212. package/docs/variables/index.InputSuffixSelector.html +1 -1
  213. package/docs/variables/index.KeyValueIconSelector.html +1 -1
  214. package/docs/variables/index.KeyValueItemSelector.html +1 -1
  215. package/docs/variables/index.KeyValueKeySelector.html +1 -1
  216. package/docs/variables/index.KeyValuePairSelector.html +1 -1
  217. package/docs/variables/index.KeyValueValueSelector.html +1 -1
  218. package/docs/variables/index.LabelTextSelector.html +1 -1
  219. package/docs/variables/index.ListItemInnerContainerClassNameSelector.html +1 -1
  220. package/docs/variables/index.ModalContainerSelector.html +1 -1
  221. package/docs/variables/index.ModalRemovePaddingSelector.html +1 -1
  222. package/docs/variables/index.ModalTitleSelector.html +1 -1
  223. package/docs/variables/index.PopListSelector.html +1 -1
  224. package/docs/variables/index.PopOptionButtonSelector.html +1 -1
  225. package/docs/variables/index.PopOptionIconSelector.html +1 -1
  226. package/docs/variables/index.PopOverlaySelector.html +1 -1
  227. package/docs/variables/index.ProgressBackgroundSelector.html +1 -1
  228. package/docs/variables/index.ProgressValueSelector.html +1 -1
  229. package/docs/variables/index.SelectorItemSelector.html +1 -1
  230. package/docs/variables/index.StatsItemSelector.html +1 -1
  231. package/docs/variables/index.StatsLabelSelector.html +1 -1
  232. package/docs/variables/index.StatsSeparatorSelector.html +1 -1
  233. package/docs/variables/index.StatsValueSelector.html +1 -1
  234. package/docs/variables/index.TextAreaLabelSelector.html +1 -0
  235. package/docs/variables/index.TextAreaTextAreaSelector.html +1 -0
  236. package/docs/variables/index.TextAreaWrapperSelector.html +1 -0
  237. package/docs/variables/index.ToggleStyledToggleSelector.html +1 -1
  238. package/docs/variables/index.TooltipContentSelector.html +1 -0
  239. package/docs/variables/index.config.html +1 -1
  240. package/docs/variables/index.cssReset.html +2 -2
  241. package/docs/variables/index.darkTheme.html +1 -1
  242. package/docs/variables/index.miuiScrollbars.html +1 -1
  243. package/docs/variables/index.theme.html +1 -1
  244. package/esm/components/form/Checkbox.styled.d.ts +6 -6
  245. package/esm/components/form/ColorPicker.styled.d.ts +5 -5
  246. package/esm/components/form/Label.d.ts +3 -3
  247. package/esm/components/form/Label.styled.d.ts +5 -5
  248. package/esm/components/form/Select.styled.d.ts +3 -3
  249. package/esm/components/form/Toggle.d.ts +3 -3
  250. package/esm/components/form/Toggle.styled.d.ts +5 -5
  251. package/esm/components/form/choice/Choice.styled.d.ts +3 -3
  252. package/esm/components/form/choice/ChoiceItem.styled.d.ts +2 -2
  253. package/esm/components/form/input/Input.css.d.ts +47 -1
  254. package/esm/components/form/input/Input.css.d.ts.map +1 -1
  255. package/esm/components/form/input/Input.css.js +47 -1
  256. package/esm/components/form/input/Input.css.js.map +1 -1
  257. package/esm/components/form/input/Input.d.ts +5 -1
  258. package/esm/components/form/input/Input.d.ts.map +1 -1
  259. package/esm/components/form/input/Input.js +27 -6
  260. package/esm/components/form/input/Input.js.map +1 -1
  261. package/esm/components/form/input/Input.styled.d.ts +183 -10
  262. package/esm/components/form/input/Input.styled.d.ts.map +1 -1
  263. package/esm/components/form/input/Input.styled.js +4 -2
  264. package/esm/components/form/input/Input.styled.js.map +1 -1
  265. package/esm/components/form/textarea/TextArea.d.ts +6 -1
  266. package/esm/components/form/textarea/TextArea.d.ts.map +1 -1
  267. package/esm/components/form/textarea/TextArea.js +31 -6
  268. package/esm/components/form/textarea/TextArea.js.map +1 -1
  269. package/esm/components/form/textarea/TextArea.styled.d.ts +177 -4
  270. package/esm/components/form/textarea/TextArea.styled.d.ts.map +1 -1
  271. package/esm/components/form/textarea/TextArea.styled.js +14 -4
  272. package/esm/components/form/textarea/TextArea.styled.js.map +1 -1
  273. package/esm/components/layout/card/Card.styled.d.ts +3 -3
  274. package/esm/components/layout/header/Header.styled.d.ts +9 -9
  275. package/esm/components/layout/header/HeaderIconAction.styled.d.ts +8 -8
  276. package/esm/components/layout/header/StickyHeader.d.ts +3 -3
  277. package/esm/components/layout/header/StickyHeader.styled.d.ts +6 -6
  278. package/esm/components/layout/list/Header.d.ts +7 -7
  279. package/esm/components/layout/list/Item.d.ts +8 -8
  280. package/esm/components/layout/list/Item.styled.d.ts +9 -9
  281. package/esm/components/layout/list/Label.d.ts +2 -2
  282. package/esm/components/layout/list/List.d.ts +18 -18
  283. package/esm/components/layout/list/Value.d.ts +2 -2
  284. package/esm/components/layout/section/SearchContainer.d.ts +2 -2
  285. package/esm/components/layout/section/Section.d.ts +5 -5
  286. package/esm/components/layout/section/SectionContainer.d.ts +2 -2
  287. package/esm/components/layout/table/Table.styled.d.ts +3 -3
  288. package/esm/components/native/index.d.ts +2 -2
  289. package/esm/components/ui/action/Action.styled.d.ts +8 -8
  290. package/esm/components/ui/action/EqualActions.styled.d.ts +3 -3
  291. package/esm/components/ui/button/Button.styled.d.ts +3 -3
  292. package/esm/components/ui/directionPad/Button.styled.d.ts +4 -4
  293. package/esm/components/ui/directionPad/Middle.styled.d.ts +2 -2
  294. package/esm/components/ui/directionPad/Pad.styled.d.ts +4 -4
  295. package/esm/components/ui/drawer/Drawer.d.ts +10 -1
  296. package/esm/components/ui/drawer/Drawer.d.ts.map +1 -1
  297. package/esm/components/ui/drawer/Drawer.js +139 -15
  298. package/esm/components/ui/drawer/Drawer.js.map +1 -1
  299. package/esm/components/ui/drawer/Drawer.styled.d.ts +90 -5
  300. package/esm/components/ui/drawer/Drawer.styled.d.ts.map +1 -1
  301. package/esm/components/ui/drawer/Drawer.styled.js +12 -1
  302. package/esm/components/ui/drawer/Drawer.styled.js.map +1 -1
  303. package/esm/components/ui/keyValue/KeyValue.styled.d.ts +13 -13
  304. package/esm/components/ui/line/Line.d.ts +3 -3
  305. package/esm/components/ui/message/Message.styled.d.ts +3 -3
  306. package/esm/components/ui/modal/Modal.d.ts +2 -2
  307. package/esm/components/ui/modal/Modal.d.ts.map +1 -1
  308. package/esm/components/ui/modal/Modal.js.map +1 -1
  309. package/esm/components/ui/modal/Modal.styled.d.ts +10 -10
  310. package/esm/components/ui/modal/ModalButtons.styled.d.ts +5 -5
  311. package/esm/components/ui/pop/Pop.styled.d.ts +12 -12
  312. package/esm/components/ui/progress/Progress.styled.d.ts +8 -8
  313. package/esm/components/ui/stats/Stats.styled.d.ts +11 -11
  314. package/esm/components/ui/tabs/Item.styled.d.ts +2 -2
  315. package/esm/components/ui/tabs/Selector.styled.d.ts +5 -5
  316. package/esm/components/ui/toaster/Toaster.d.ts +8 -15
  317. package/esm/components/ui/toaster/Toaster.d.ts.map +1 -1
  318. package/esm/components/ui/toaster/Toaster.js +19 -74
  319. package/esm/components/ui/toaster/Toaster.js.map +1 -1
  320. package/esm/components/ui/toolButton/ToolButton.styled.d.ts +3 -3
  321. package/esm/components/ui/tooltip/Tooltip.d.ts +30 -0
  322. package/esm/components/ui/tooltip/Tooltip.d.ts.map +1 -0
  323. package/esm/components/ui/tooltip/Tooltip.js +43 -0
  324. package/esm/components/ui/tooltip/Tooltip.js.map +1 -0
  325. package/esm/components/ui/tooltip/Tooltip.styled.d.ts +173 -0
  326. package/esm/components/ui/tooltip/Tooltip.styled.d.ts.map +1 -0
  327. package/esm/components/ui/tooltip/Tooltip.styled.js +28 -0
  328. package/esm/components/ui/tooltip/Tooltip.styled.js.map +1 -0
  329. package/esm/components/utils/Gap.d.ts +3 -3
  330. package/esm/components/utils/Spacer.d.ts +2 -2
  331. package/esm/index.d.ts +1 -0
  332. package/esm/index.d.ts.map +1 -1
  333. package/esm/index.js +1 -0
  334. package/esm/index.js.map +1 -1
  335. package/esm/theme.d.ts +86 -86
  336. package/package.json +22 -20
  337. package/patches/{@stitches+react+1.2.8.patch → @stitches__react@1.2.8.patch} +6 -6
  338. package/pnpm-workspace.yaml +3 -0
  339. package/src/bugfixes/ToastsFromModal.stories.tsx +59 -0
  340. package/src/components/form/input/Input.css.ts +52 -0
  341. package/src/components/form/input/Input.stories.tsx +32 -1
  342. package/src/components/form/input/Input.styled.ts +7 -1
  343. package/src/components/form/input/Input.tsx +67 -13
  344. package/src/components/form/textarea/TextArea.stories.tsx +25 -1
  345. package/src/components/form/textarea/TextArea.styled.ts +17 -3
  346. package/src/components/form/textarea/TextArea.tsx +76 -12
  347. package/src/components/ui/drawer/Drawer.stories.tsx +143 -59
  348. package/src/components/ui/drawer/Drawer.styled.ts +13 -0
  349. package/src/components/ui/drawer/Drawer.tsx +214 -20
  350. package/src/components/ui/modal/Modal.tsx +0 -1
  351. package/src/components/ui/modal/ModalButtons.stories.tsx +3 -3
  352. package/src/components/ui/toaster/Toaster.stories.tsx +160 -30
  353. package/src/components/ui/toaster/Toaster.tsx +28 -94
  354. package/src/components/ui/tooltip/Tooltip.stories.tsx +285 -0
  355. package/src/components/ui/tooltip/Tooltip.styled.ts +36 -0
  356. package/src/components/ui/tooltip/Tooltip.tsx +195 -0
  357. package/src/index.ts +1 -0
  358. package/storybook-static/assets/Action.stories-DBtNlWQo.js +1 -0
  359. package/storybook-static/assets/Button.stories-DFO8nsTN.js +1 -0
  360. package/storybook-static/assets/Card.stories-BoCt66U4.js +1 -0
  361. package/storybook-static/assets/Checkbox.stories-C58YeH4u.js +1 -0
  362. package/storybook-static/assets/Choice.stories-Cf7UbPxn.js +1 -0
  363. package/storybook-static/assets/Color-23OOGO2C-CELuW8GR.js +1 -0
  364. package/storybook-static/assets/ColorPicker.stories-Dc7-AuPQ.js +1 -0
  365. package/storybook-static/assets/CoveringLoader.stories-DrUQAhI6.js +1 -0
  366. package/storybook-static/assets/DocsRenderer-LL677BLK-BOcEjZ28.js +755 -0
  367. package/storybook-static/assets/Drawer.stories-D3_-TuT0.js +1 -0
  368. package/storybook-static/assets/EqualActions.stories-CwjZlkUA.js +1 -0
  369. package/storybook-static/assets/FullLoader.stories-DFAaVMfI.js +1 -0
  370. package/storybook-static/assets/Header.stories-BN7BuQx2.js +1 -0
  371. package/storybook-static/assets/Header.stories-CzPBNEkp.js +1 -0
  372. package/storybook-static/assets/HeaderIconAction.stories-Dm3Q-BVW.js +1 -0
  373. package/storybook-static/assets/Icon.stories-D1YeVBlB.js +1 -0
  374. package/storybook-static/assets/Input.stories-Cbj2X3kT.js +197 -0
  375. package/storybook-static/assets/Item.stories-CmjyxdgQ.js +1 -0
  376. package/storybook-static/assets/KeyValue.stories-CogaZP09.js +1 -0
  377. package/storybook-static/assets/Label.stories-B6pCT45X.js +1 -0
  378. package/storybook-static/assets/Label.stories-BR3gNHqM.js +1 -0
  379. package/storybook-static/assets/Line.stories-BJLer7gg.js +1 -0
  380. package/storybook-static/assets/List.stories-MSQY1Rdo.js +1 -0
  381. package/storybook-static/assets/Loader.stories-CbN84qNp.js +1 -0
  382. package/storybook-static/assets/Loading.stories-BOANGXsc.js +1 -0
  383. package/storybook-static/assets/Message.stories-_51K9ZDn.js +1 -0
  384. package/storybook-static/assets/Modal.stories-CixfvMuM.js +1 -0
  385. package/storybook-static/assets/ModalButtons.stories-DHHsnoGB.js +1 -0
  386. package/storybook-static/assets/Pad.stories-hrKerezi.js +1 -0
  387. package/storybook-static/assets/Pop.stories-BTlQGve1.js +1 -0
  388. package/storybook-static/assets/PopLoader.stories-CyskY4fX.js +1 -0
  389. package/storybook-static/assets/Progress.stories-BLMPF6Ju.js +1 -0
  390. package/storybook-static/assets/Section.stories-M-QRH2_i.js +1 -0
  391. package/storybook-static/assets/Select.stories-BJjJqLTa.js +1 -0
  392. package/storybook-static/assets/Selector.stories-BxHyFnYo.js +1 -0
  393. package/storybook-static/assets/Stats.stories-VB0pi5k5.js +1 -0
  394. package/storybook-static/assets/StickyHeader.stories-BnxgnjJW.js +3 -0
  395. package/storybook-static/assets/Table.stories-6F-WrDBs.js +1 -0
  396. package/storybook-static/assets/TextArea.stories-DqzHYgIv.js +1 -0
  397. package/storybook-static/assets/Toaster.stories-C0ktk0DW.js +1 -0
  398. package/storybook-static/assets/Toggle.stories-tBlD8SJi.js +1 -0
  399. package/storybook-static/assets/ToolButton.stories-0rGBGqAt.js +1 -0
  400. package/storybook-static/assets/Value.stories-CFT20m8r.js +1 -0
  401. package/storybook-static/assets/WithTooltip-65CFNBJE-CEiAC9o_.js +9 -0
  402. package/storybook-static/assets/formatter-EIJCOSYU-3FZOx6vn.js +1 -0
  403. package/storybook-static/assets/iframe-DvhcA1iZ.js +1244 -0
  404. package/storybook-static/assets/preload-helper-PPVm8Dsz.js +1 -0
  405. package/storybook-static/assets/react-18-oqx706Mo.js +1 -0
  406. package/storybook-static/assets/syntaxhighlighter-W7WJGI2T-D7f2o1Z3.js +6 -0
  407. package/storybook-static/favicon-wrapper.svg +46 -0
  408. package/storybook-static/favicon.svg +1 -0
  409. package/storybook-static/iframe.html +709 -0
  410. package/storybook-static/index.html +146 -0
  411. package/storybook-static/index.json +1 -0
  412. package/storybook-static/nunito-sans-bold-italic.woff2 +0 -0
  413. package/storybook-static/nunito-sans-bold.woff2 +0 -0
  414. package/storybook-static/nunito-sans-italic.woff2 +0 -0
  415. package/storybook-static/nunito-sans-regular.woff2 +0 -0
  416. package/storybook-static/project.json +1 -0
  417. package/storybook-static/sb-addons/docs-1/manager-bundle.js +3 -0
  418. package/storybook-static/sb-addons/onboarding-2/manager-bundle.js +97 -0
  419. package/storybook-static/sb-addons/storybook-core-server-presets-0/common-manager-bundle.js +630 -0
  420. package/storybook-static/sb-common-assets/favicon-wrapper.svg +46 -0
  421. package/storybook-static/sb-common-assets/favicon.svg +1 -0
  422. package/storybook-static/sb-common-assets/nunito-sans-bold-italic.woff2 +0 -0
  423. package/storybook-static/sb-common-assets/nunito-sans-bold.woff2 +0 -0
  424. package/storybook-static/sb-common-assets/nunito-sans-italic.woff2 +0 -0
  425. package/storybook-static/sb-common-assets/nunito-sans-regular.woff2 +0 -0
  426. package/storybook-static/sb-manager/globals-runtime.js +76749 -0
  427. package/storybook-static/sb-manager/globals.js +24 -0
  428. package/storybook-static/sb-manager/manager-stores.js +23 -0
  429. package/storybook-static/sb-manager/runtime.js +27463 -0
  430. package/storybook-static/vite-inject-mocker-entry.js +2 -0
  431. package/dist/components/ui/toaster/Notification.d.ts +0 -9
  432. package/dist/components/ui/toaster/Notification.d.ts.map +0 -1
  433. package/dist/components/ui/toaster/Notification.js.map +0 -1
  434. package/dist/components/ui/toaster/Toaster.styled.d.ts +0 -89
  435. package/dist/components/ui/toaster/Toaster.styled.d.ts.map +0 -1
  436. package/dist/components/ui/toaster/Toaster.styled.js +0 -39
  437. package/dist/components/ui/toaster/Toaster.styled.js.map +0 -1
  438. package/dist/components/ui/toaster/types.d.ts +0 -7
  439. package/dist/components/ui/toaster/types.d.ts.map +0 -1
  440. package/dist/components/ui/toaster/types.js +0 -3
  441. package/dist/components/ui/toaster/types.js.map +0 -1
  442. package/docs/classes/index.ToasterProvider.html +0 -120
  443. package/esm/components/form/Checkbox.stories.d.ts +0 -9
  444. package/esm/components/form/Checkbox.stories.d.ts.map +0 -1
  445. package/esm/components/form/Checkbox.stories.js +0 -80
  446. package/esm/components/form/Checkbox.stories.js.map +0 -1
  447. package/esm/components/form/ColorPicker.stories.d.ts +0 -10
  448. package/esm/components/form/ColorPicker.stories.d.ts.map +0 -1
  449. package/esm/components/form/ColorPicker.stories.js +0 -75
  450. package/esm/components/form/ColorPicker.stories.js.map +0 -1
  451. package/esm/components/form/Label.stories.d.ts +0 -11
  452. package/esm/components/form/Label.stories.d.ts.map +0 -1
  453. package/esm/components/form/Label.stories.js +0 -43
  454. package/esm/components/form/Label.stories.js.map +0 -1
  455. package/esm/components/form/Select.stories.d.ts +0 -8
  456. package/esm/components/form/Select.stories.d.ts.map +0 -1
  457. package/esm/components/form/Select.stories.js +0 -24
  458. package/esm/components/form/Select.stories.js.map +0 -1
  459. package/esm/components/form/Toggle.stories.d.ts +0 -14
  460. package/esm/components/form/Toggle.stories.d.ts.map +0 -1
  461. package/esm/components/form/Toggle.stories.js +0 -76
  462. package/esm/components/form/Toggle.stories.js.map +0 -1
  463. package/esm/components/form/choice/Choice.stories.d.ts +0 -10
  464. package/esm/components/form/choice/Choice.stories.d.ts.map +0 -1
  465. package/esm/components/form/choice/Choice.stories.js +0 -80
  466. package/esm/components/form/choice/Choice.stories.js.map +0 -1
  467. package/esm/components/form/input/Input.stories.d.ts +0 -10
  468. package/esm/components/form/input/Input.stories.d.ts.map +0 -1
  469. package/esm/components/form/input/Input.stories.js +0 -54
  470. package/esm/components/form/input/Input.stories.js.map +0 -1
  471. package/esm/components/form/textarea/TextArea.stories.d.ts +0 -8
  472. package/esm/components/form/textarea/TextArea.stories.d.ts.map +0 -1
  473. package/esm/components/form/textarea/TextArea.stories.js +0 -19
  474. package/esm/components/form/textarea/TextArea.stories.js.map +0 -1
  475. package/esm/components/icons/Icon.stories.d.ts +0 -10
  476. package/esm/components/icons/Icon.stories.d.ts.map +0 -1
  477. package/esm/components/icons/Icon.stories.js +0 -49
  478. package/esm/components/icons/Icon.stories.js.map +0 -1
  479. package/esm/components/layout/card/Card.stories.d.ts +0 -11
  480. package/esm/components/layout/card/Card.stories.d.ts.map +0 -1
  481. package/esm/components/layout/card/Card.stories.js +0 -39
  482. package/esm/components/layout/card/Card.stories.js.map +0 -1
  483. package/esm/components/layout/header/Header.stories.d.ts +0 -11
  484. package/esm/components/layout/header/Header.stories.d.ts.map +0 -1
  485. package/esm/components/layout/header/Header.stories.js +0 -56
  486. package/esm/components/layout/header/Header.stories.js.map +0 -1
  487. package/esm/components/layout/header/HeaderIconAction.stories.d.ts +0 -10
  488. package/esm/components/layout/header/HeaderIconAction.stories.d.ts.map +0 -1
  489. package/esm/components/layout/header/HeaderIconAction.stories.js +0 -43
  490. package/esm/components/layout/header/HeaderIconAction.stories.js.map +0 -1
  491. package/esm/components/layout/header/StickyHeader.stories.d.ts +0 -9
  492. package/esm/components/layout/header/StickyHeader.stories.d.ts.map +0 -1
  493. package/esm/components/layout/header/StickyHeader.stories.js +0 -60
  494. package/esm/components/layout/header/StickyHeader.stories.js.map +0 -1
  495. package/esm/components/layout/list/Header.stories.d.ts +0 -8
  496. package/esm/components/layout/list/Header.stories.d.ts.map +0 -1
  497. package/esm/components/layout/list/Header.stories.js +0 -27
  498. package/esm/components/layout/list/Header.stories.js.map +0 -1
  499. package/esm/components/layout/list/Item.stories.d.ts +0 -11
  500. package/esm/components/layout/list/Item.stories.d.ts.map +0 -1
  501. package/esm/components/layout/list/Item.stories.js +0 -98
  502. package/esm/components/layout/list/Item.stories.js.map +0 -1
  503. package/esm/components/layout/list/Label.stories.d.ts +0 -8
  504. package/esm/components/layout/list/Label.stories.d.ts.map +0 -1
  505. package/esm/components/layout/list/Label.stories.js +0 -29
  506. package/esm/components/layout/list/Label.stories.js.map +0 -1
  507. package/esm/components/layout/list/List.stories.d.ts +0 -9
  508. package/esm/components/layout/list/List.stories.d.ts.map +0 -1
  509. package/esm/components/layout/list/List.stories.js +0 -46
  510. package/esm/components/layout/list/List.stories.js.map +0 -1
  511. package/esm/components/layout/list/Value.stories.d.ts +0 -8
  512. package/esm/components/layout/list/Value.stories.d.ts.map +0 -1
  513. package/esm/components/layout/list/Value.stories.js +0 -23
  514. package/esm/components/layout/list/Value.stories.js.map +0 -1
  515. package/esm/components/layout/section/Section.stories.d.ts +0 -8
  516. package/esm/components/layout/section/Section.stories.d.ts.map +0 -1
  517. package/esm/components/layout/section/Section.stories.js +0 -31
  518. package/esm/components/layout/section/Section.stories.js.map +0 -1
  519. package/esm/components/layout/table/Table.stories.d.ts +0 -8
  520. package/esm/components/layout/table/Table.stories.d.ts.map +0 -1
  521. package/esm/components/layout/table/Table.stories.js +0 -49
  522. package/esm/components/layout/table/Table.stories.js.map +0 -1
  523. package/esm/components/ui/action/Action.stories.d.ts +0 -11
  524. package/esm/components/ui/action/Action.stories.d.ts.map +0 -1
  525. package/esm/components/ui/action/Action.stories.js +0 -58
  526. package/esm/components/ui/action/Action.stories.js.map +0 -1
  527. package/esm/components/ui/action/EqualActions.stories.d.ts +0 -10
  528. package/esm/components/ui/action/EqualActions.stories.d.ts.map +0 -1
  529. package/esm/components/ui/action/EqualActions.stories.js +0 -38
  530. package/esm/components/ui/action/EqualActions.stories.js.map +0 -1
  531. package/esm/components/ui/button/Button.stories.d.ts +0 -9
  532. package/esm/components/ui/button/Button.stories.d.ts.map +0 -1
  533. package/esm/components/ui/button/Button.stories.js +0 -35
  534. package/esm/components/ui/button/Button.stories.js.map +0 -1
  535. package/esm/components/ui/directionPad/Pad.stories.d.ts +0 -10
  536. package/esm/components/ui/directionPad/Pad.stories.d.ts.map +0 -1
  537. package/esm/components/ui/directionPad/Pad.stories.js +0 -79
  538. package/esm/components/ui/directionPad/Pad.stories.js.map +0 -1
  539. package/esm/components/ui/drawer/Drawer.stories.d.ts +0 -11
  540. package/esm/components/ui/drawer/Drawer.stories.d.ts.map +0 -1
  541. package/esm/components/ui/drawer/Drawer.stories.js +0 -102
  542. package/esm/components/ui/drawer/Drawer.stories.js.map +0 -1
  543. package/esm/components/ui/keyValue/KeyValue.stories.d.ts +0 -11
  544. package/esm/components/ui/keyValue/KeyValue.stories.d.ts.map +0 -1
  545. package/esm/components/ui/keyValue/KeyValue.stories.js +0 -98
  546. package/esm/components/ui/keyValue/KeyValue.stories.js.map +0 -1
  547. package/esm/components/ui/line/Line.stories.d.ts +0 -8
  548. package/esm/components/ui/line/Line.stories.d.ts.map +0 -1
  549. package/esm/components/ui/line/Line.stories.js +0 -27
  550. package/esm/components/ui/line/Line.stories.js.map +0 -1
  551. package/esm/components/ui/loader/CoveringLoader.stories.d.ts +0 -8
  552. package/esm/components/ui/loader/CoveringLoader.stories.d.ts.map +0 -1
  553. package/esm/components/ui/loader/CoveringLoader.stories.js +0 -50
  554. package/esm/components/ui/loader/CoveringLoader.stories.js.map +0 -1
  555. package/esm/components/ui/loader/FullLoader.stories.d.ts +0 -8
  556. package/esm/components/ui/loader/FullLoader.stories.d.ts.map +0 -1
  557. package/esm/components/ui/loader/FullLoader.stories.js +0 -19
  558. package/esm/components/ui/loader/FullLoader.stories.js.map +0 -1
  559. package/esm/components/ui/loader/Loader.stories.d.ts +0 -8
  560. package/esm/components/ui/loader/Loader.stories.d.ts.map +0 -1
  561. package/esm/components/ui/loader/Loader.stories.js +0 -23
  562. package/esm/components/ui/loader/Loader.stories.js.map +0 -1
  563. package/esm/components/ui/loader/Loading.stories.d.ts +0 -8
  564. package/esm/components/ui/loader/Loading.stories.d.ts.map +0 -1
  565. package/esm/components/ui/loader/Loading.stories.js +0 -32
  566. package/esm/components/ui/loader/Loading.stories.js.map +0 -1
  567. package/esm/components/ui/loader/PopLoader.stories.d.ts +0 -8
  568. package/esm/components/ui/loader/PopLoader.stories.d.ts.map +0 -1
  569. package/esm/components/ui/loader/PopLoader.stories.js +0 -24
  570. package/esm/components/ui/loader/PopLoader.stories.js.map +0 -1
  571. package/esm/components/ui/message/Message.stories.d.ts +0 -9
  572. package/esm/components/ui/message/Message.stories.d.ts.map +0 -1
  573. package/esm/components/ui/message/Message.stories.js +0 -43
  574. package/esm/components/ui/message/Message.stories.js.map +0 -1
  575. package/esm/components/ui/modal/Modal.stories.d.ts +0 -10
  576. package/esm/components/ui/modal/Modal.stories.d.ts.map +0 -1
  577. package/esm/components/ui/modal/Modal.stories.js +0 -84
  578. package/esm/components/ui/modal/Modal.stories.js.map +0 -1
  579. package/esm/components/ui/modal/ModalButtons.stories.d.ts +0 -8
  580. package/esm/components/ui/modal/ModalButtons.stories.d.ts.map +0 -1
  581. package/esm/components/ui/modal/ModalButtons.stories.js +0 -19
  582. package/esm/components/ui/modal/ModalButtons.stories.js.map +0 -1
  583. package/esm/components/ui/pop/Pop.stories.d.ts +0 -8
  584. package/esm/components/ui/pop/Pop.stories.d.ts.map +0 -1
  585. package/esm/components/ui/pop/Pop.stories.js +0 -65
  586. package/esm/components/ui/pop/Pop.stories.js.map +0 -1
  587. package/esm/components/ui/progress/Progress.stories.d.ts +0 -9
  588. package/esm/components/ui/progress/Progress.stories.d.ts.map +0 -1
  589. package/esm/components/ui/progress/Progress.stories.js +0 -29
  590. package/esm/components/ui/progress/Progress.stories.js.map +0 -1
  591. package/esm/components/ui/stats/Stats.stories.d.ts +0 -11
  592. package/esm/components/ui/stats/Stats.stories.d.ts.map +0 -1
  593. package/esm/components/ui/stats/Stats.stories.js +0 -104
  594. package/esm/components/ui/stats/Stats.stories.js.map +0 -1
  595. package/esm/components/ui/tabs/Selector.stories.d.ts +0 -12
  596. package/esm/components/ui/tabs/Selector.stories.d.ts.map +0 -1
  597. package/esm/components/ui/tabs/Selector.stories.js +0 -110
  598. package/esm/components/ui/tabs/Selector.stories.js.map +0 -1
  599. package/esm/components/ui/toaster/Notification.d.ts +0 -9
  600. package/esm/components/ui/toaster/Notification.d.ts.map +0 -1
  601. package/esm/components/ui/toaster/Notification.js +0 -17
  602. package/esm/components/ui/toaster/Notification.js.map +0 -1
  603. package/esm/components/ui/toaster/Toaster.stories.d.ts +0 -7
  604. package/esm/components/ui/toaster/Toaster.stories.d.ts.map +0 -1
  605. package/esm/components/ui/toaster/Toaster.stories.js +0 -39
  606. package/esm/components/ui/toaster/Toaster.stories.js.map +0 -1
  607. package/esm/components/ui/toaster/Toaster.styled.d.ts +0 -89
  608. package/esm/components/ui/toaster/Toaster.styled.d.ts.map +0 -1
  609. package/esm/components/ui/toaster/Toaster.styled.js +0 -36
  610. package/esm/components/ui/toaster/Toaster.styled.js.map +0 -1
  611. package/esm/components/ui/toaster/types.d.ts +0 -7
  612. package/esm/components/ui/toaster/types.d.ts.map +0 -1
  613. package/esm/components/ui/toaster/types.js +0 -2
  614. package/esm/components/ui/toaster/types.js.map +0 -1
  615. package/esm/components/ui/toolButton/ToolButton.stories.d.ts +0 -8
  616. package/esm/components/ui/toolButton/ToolButton.stories.d.ts.map +0 -1
  617. package/esm/components/ui/toolButton/ToolButton.stories.js +0 -29
  618. package/esm/components/ui/toolButton/ToolButton.stories.js.map +0 -1
  619. package/src/components/ui/toaster/Notification.tsx +0 -39
  620. package/src/components/ui/toaster/Toaster.styled.ts +0 -42
  621. package/src/components/ui/toaster/types.ts +0 -9
@@ -4,59 +4,189 @@ import type { Meta, StoryObj } from "@storybook/react-vite";
4
4
 
5
5
  import { Div } from "../../native";
6
6
  import { Button } from "../button/Button";
7
- import { useToaster } from "./Toaster";
7
+ import { toast, useToaster } from "./Toaster";
8
+
9
+ const docs = [
10
+ "Toast notifications powered by [sonner](https://sonner.emilkowal.ski).",
11
+ "",
12
+ "## Setup",
13
+ "",
14
+ "Wrap your app (typically once, near the root) with `ToasterProvider`.",
15
+ "It mounts sonner's `<Toaster />` and renders children unchanged:",
16
+ "",
17
+ "```tsx",
18
+ "import { ToasterProvider } from \"react-miui\";",
19
+ "",
20
+ "export const App = () => (",
21
+ " <ToasterProvider position={\"bottom-center\"} richColors>",
22
+ " <YourApp />",
23
+ " </ToasterProvider>",
24
+ ");",
25
+ "```",
26
+ "",
27
+ "`ToasterProvider` accepts every prop sonner's `<Toaster />` accepts",
28
+ "(`position`, `theme`, `richColors`, `expand`, `closeButton`, `duration`, …).",
29
+ "",
30
+ "## Triggering toasts",
31
+ "",
32
+ "```tsx",
33
+ "// 1. Legacy hook — back-compat. (text, timeout?) => id",
34
+ "const notify = useToaster();",
35
+ "notify(\"Saved!\", 3000);",
36
+ "",
37
+ "// 2. Sonner's `toast` re-exported — full API surface.",
38
+ "toast.success(\"Saved!\");",
39
+ "toast.error(\"Failed\", { description: \"Try again\" });",
40
+ "toast.promise(saveAsync(), { loading: \"…\", success: \"ok\", error: \"x\" });",
41
+ "```",
42
+ ].join("\n");
8
43
 
9
44
  const meta: Meta = {
10
45
  title: "Components/UI/Toaster",
11
46
  tags: ["autodocs", "ui"],
47
+ parameters: { docs: { description: { component: docs } } },
12
48
  argTypes: {
13
- text: {
14
- control: {
15
- type: "text",
16
- },
17
- },
18
- time: {
19
- control: {
20
- type: "number",
21
- step: 100,
22
- },
23
- },
49
+ text: { control: { type: "text" } },
50
+ time: { control: { type: "number", step: 100 } },
24
51
  },
25
52
  };
26
53
 
27
54
  type Story = StoryObj;
28
55
 
29
56
  const Primary: Story = {
30
- args: {
31
- text: "",
32
- time: 5000,
33
- },
57
+ name: "useToaster hook (legacy API)",
58
+ args: { text: "Lorem ipsum dolor sit amet", time: 5000 },
34
59
  render: (args) => {
35
- const toast = useToaster();
60
+ const notify = useToaster();
36
61
  const { text, time } = args as { text: string; time: number };
62
+ const handleClick = () => { notify(text || "Lorem ipsum dolor sit amet", time); };
63
+
64
+ return (
65
+ <Div css={{ minHeight: 200 }}>
66
+ <Button onClick={handleClick}>Show toast</Button>
67
+ </Div>
68
+ );
69
+ },
70
+ };
71
+
72
+ const Variants: Story = {
73
+ name: "Variants (success / error / info / warning)",
74
+ render: () => (
75
+ <Div css={{ display: "flex", gap: 8, flexWrap: "wrap", minHeight: 200 }}>
76
+ <Button onClick={() => { toast("Default toast"); }}>Default</Button>
77
+ <Button onClick={() => { toast.success("Profile saved"); }}>Success</Button>
78
+ <Button onClick={() => { toast.error("Couldn't save profile"); }}>Error</Button>
79
+ <Button onClick={() => { toast.info("New version available"); }}>Info</Button>
80
+ <Button onClick={() => { toast.warning("Storage almost full"); }}>Warning</Button>
81
+ <Button onClick={() => { toast.message("Plain message"); }}>Message</Button>
82
+ </Div>
83
+ ),
84
+ };
37
85
 
86
+ const WithDescription: Story = {
87
+ name: "With description",
88
+ render: () => {
38
89
  const handleClick = () => {
39
- toast(text || "Lorem ipsum dolor sit amet", time);
90
+ toast.success("File uploaded", { description: "report.pdf · 2.3 MB" });
40
91
  };
92
+ return (
93
+ <Div css={{ minHeight: 200 }}>
94
+ <Button onClick={handleClick}>Toast with description</Button>
95
+ </Div>
96
+ );
97
+ },
98
+ };
41
99
 
100
+ const WithAction: Story = {
101
+ name: "With action button",
102
+ render: () => {
103
+ const handleClick = () => {
104
+ toast("Event has been created", {
105
+ // eslint-disable-next-line no-console
106
+ action: { label: "Undo", onClick: () => { console.log("Undo"); } },
107
+ });
108
+ };
42
109
  return (
43
- <Div css={{ height: 400 }}>
44
- {/* <Input placeholder={"Fill in text to display"} onChange={e => { setText(e.target.value); }} /> */}
45
- {/* <Input */}
46
- {/* placeholder={"Time to display in ms"} */}
47
- {/* step={100} */}
48
- {/* type={"number"} */}
49
- {/* onChange={e => { setTime(e.target.value); }} */}
50
- {/* value={time} */}
51
- {/*/ > */}
52
- <Button onClick={handleClick}>Show toast</Button>
110
+ <Div css={{ minHeight: 200 }}>
111
+ <Button onClick={handleClick}>Toast with action</Button>
112
+ </Div>
113
+ );
114
+ },
115
+ };
116
+
117
+ const fakeSave = () => new globalThis.Promise<{ name: string }>((resolve, reject) => {
118
+ setTimeout(() => {
119
+ if (Math.random() > 0.3) {
120
+ resolve({ name: "settings.json" });
121
+ }
122
+ else {
123
+ reject(new Error("Network error"));
124
+ }
125
+ }, 1500);
126
+ });
127
+
128
+ const PromiseBased: Story = {
129
+ name: "Promise-based",
130
+ render: () => {
131
+ const handleClick = () => {
132
+ toast.promise(fakeSave(), {
133
+ loading: "Saving…",
134
+ success: (data) => `${data.name} saved`,
135
+ error: (err: Error) => err.message,
136
+ });
137
+ };
138
+ return (
139
+ <Div css={{ minHeight: 200 }}>
140
+ <Button onClick={handleClick}>Run promise toast</Button>
141
+ </Div>
142
+ );
143
+ },
144
+ };
145
+
146
+ const Loading: Story = {
147
+ name: "Manual loading + dismiss",
148
+ render: () => {
149
+ const handleClick = () => {
150
+ const id = toast.loading("Working on it…");
151
+ setTimeout(() => { toast.success("All done!", { id }); }, 2000);
152
+ };
153
+ return (
154
+ <Div css={{ minHeight: 200 }}>
155
+ <Button onClick={handleClick}>Show loading</Button>
53
156
  </Div>
54
157
  );
55
158
  },
56
159
  };
57
160
 
58
- export {
59
- Primary,
161
+ const CustomDuration: Story = {
162
+ name: "Custom duration",
163
+ render: () => (
164
+ <Div css={{ display: "flex", gap: 8, minHeight: 200 }}>
165
+ <Button onClick={() => { toast("Gone in 1s", { duration: 1000 }); }}>1 second</Button>
166
+ <Button onClick={() => { toast("Sticks 10s", { duration: 10000 }); }}>10 seconds</Button>
167
+ <Button onClick={() => { toast("Sticky", { duration: Infinity }); }}>Sticky</Button>
168
+ </Div>
169
+ ),
60
170
  };
61
171
 
172
+ const DismissAll: Story = {
173
+ name: "Stack & dismiss all",
174
+ render: () => {
175
+ const handleShowThree = () => {
176
+ toast("First");
177
+ toast("Second");
178
+ toast("Third");
179
+ };
180
+ const handleDismiss = () => { toast.dismiss(); };
181
+ return (
182
+ <Div css={{ display: "flex", gap: 8, minHeight: 200 }}>
183
+ <Button onClick={handleShowThree}>Show three</Button>
184
+ <Button onClick={handleDismiss}>Dismiss all</Button>
185
+ </Div>
186
+ );
187
+ },
188
+ };
189
+
190
+ export { Primary, Variants, WithDescription, WithAction, PromiseBased, Loading, CustomDuration, DismissAll };
191
+
62
192
  export default meta;
@@ -1,105 +1,39 @@
1
- import React, { createContext, useContext } from "react";
1
+ import React, { useCallback, useEffect, useState } from "react";
2
+ import { createPortal } from "react-dom";
2
3
 
3
- import type { Toast } from "./types";
4
+ import { toast, Toaster as SonnerToaster } from "sonner";
4
5
 
5
- // eslint-disable-next-line @typescript-eslint/no-shadow
6
- import { Notification } from "./Notification";
6
+ type SonnerToasterProps = React.ComponentProps<typeof SonnerToaster>;
7
7
 
8
- type ToasterFn = (text: string, timeout?: number) => void;
9
-
10
- const ToasterContext = createContext<ToasterFn>(() => {
11
- throw new Error("Toaster Provider missing in the tree");
12
- });
13
- ToasterContext.displayName = "ToasterContext";
14
-
15
- const prefix = `${Date.now()}_`;
16
- let counter = 0;
17
-
18
- interface Props {
19
- children: React.ReactNode;
8
+ interface ToasterProviderProps extends SonnerToasterProps {
9
+ children?: React.ReactNode;
20
10
  }
21
- interface State {
22
- list: Toast[];
23
- }
24
-
25
- const DEFAULT_TIMEOUT = 5000;
26
-
27
- class ToasterProvider extends React.Component<Props, State> {
28
- public constructor(props: Props, context: unknown) {
29
- super(props, context);
30
11
 
31
- this.state = {
32
- list: [],
33
- };
34
- }
12
+ const ToasterProvider: React.FC<ToasterProviderProps> = ({ children, position = "bottom-center", ...rest }) => {
13
+ const [body, setBody] = useState<HTMLElement | null>(null);
35
14
 
36
- private readonly _add = (text: string, timeout = DEFAULT_TIMEOUT) => {
37
- this._removeAllToasts();
15
+ useEffect(() => {
16
+ // eslint-disable-next-line react-hooks/set-state-in-effect
17
+ setBody(document.body);
18
+ }, []);
38
19
 
39
- const id = prefix + String(counter++);
40
- const hide = false;
20
+ const toaster = <SonnerToaster position={position} {...rest} />;
41
21
 
42
- this.setState(prev => ({
43
- ...prev,
44
- list: [...prev.list, {
45
- id,
46
- text,
47
- hide,
48
- }],
49
- }));
22
+ return (
23
+ <>
24
+ {children}
25
+ {body ? createPortal(toaster, body) : null}
26
+ </>
27
+ );
28
+ };
50
29
 
51
- setTimeout(() => {
52
- this.setState(prev => ({
53
- ...prev,
54
- list: prev.list.map(p => {
55
- if (p.id !== id) {
56
- return p;
57
- }
58
- return {
59
- ...p,
60
- hide: true,
61
- };
62
- }),
63
- }));
64
- }, timeout);
65
- };
66
-
67
- private readonly _handleRemove = (id: Toast["id"]) => {
68
- this.setState(prev => ({
69
- ...prev,
70
- list: prev.list.filter(p => p.id !== id),
71
- }));
72
- };
73
-
74
- private readonly _removeAllToasts = () => {
75
- this.setState(prev => ({
76
- ...prev,
77
- list: prev.list.map(p => {
78
- if (p.hide) {
79
- return p;
80
- }
81
- return {
82
- ...p,
83
- hide: true,
84
- };
85
- }),
86
- }));
87
- };
88
-
89
- public override render() {
90
- const notifications = this.state.list.map((t) => {
91
- return <Notification onRemove={this._handleRemove} key={t.id} toast={t} />;
92
- });
93
-
94
- return (
95
- <ToasterContext.Provider value={this._add}>
96
- {notifications}
97
- {this.props.children}
98
- </ToasterContext.Provider>
99
- );
100
- }
101
- }
30
+ type ToasterFn = (text: string, timeout?: number) => string | number;
102
31
 
103
- const useToaster = () => useContext(ToasterContext);
32
+ const useToaster = (): ToasterFn => {
33
+ return useCallback((text, timeout) => {
34
+ return toast(text, timeout != null ? { duration: timeout } : undefined);
35
+ }, []);
36
+ };
104
37
 
105
- export { ToasterProvider, useToaster };
38
+ export { ToasterProvider, useToaster, toast };
39
+ export type { ToasterProviderProps };
@@ -0,0 +1,285 @@
1
+ /* eslint-disable max-lines */
2
+ import React, { useCallback, useState } from "react";
3
+
4
+ import type { Meta, StoryObj } from "@storybook/react-vite";
5
+
6
+ import { Gap } from "../../utils/Gap";
7
+ import { Button } from "../button/Button";
8
+ import { Drawer } from "../drawer/Drawer";
9
+ import { Modal } from "../modal/Modal";
10
+ import { ModalButtons } from "../modal/ModalButtons";
11
+ import { Tooltip, TooltipProvider } from "./Tooltip";
12
+
13
+ const meta: Meta<typeof Tooltip> = {
14
+ title: "Components/UI/Tooltip",
15
+ component: Tooltip,
16
+ tags: ["autodocs", "ui"],
17
+ argTypes: {
18
+ side: {
19
+ control: "inline-radio",
20
+ options: ["top", "right", "bottom", "left"],
21
+ },
22
+ align: {
23
+ control: "inline-radio",
24
+ options: ["start", "center", "end"],
25
+ },
26
+ sideOffset: { control: { type: "number", min: 0, max: 40 } },
27
+ alignOffset: { control: { type: "number", min: -40, max: 40 } },
28
+ delayDuration: { control: { type: "number", min: 0, max: 2000, step: 100 } },
29
+ avoidCollisions: { type: "boolean" },
30
+ arrow: { type: "boolean" },
31
+ content: { control: "text" },
32
+ children: { table: { disable: true } },
33
+ open: { table: { disable: true } },
34
+ defaultOpen: { table: { disable: true } },
35
+ onOpenChange: { table: { disable: true } },
36
+ },
37
+ };
38
+
39
+ type Story = StoryObj<typeof Tooltip>;
40
+
41
+ /**
42
+ * Playground. Tweak `side`, `align`, `sideOffset`, `delayDuration`, `arrow`,
43
+ * and `avoidCollisions` from the controls panel.
44
+ */
45
+ const Primary: Story = {
46
+ args: {
47
+ content: "Save your changes",
48
+ side: "top",
49
+ align: "center",
50
+ sideOffset: 6,
51
+ alignOffset: 0,
52
+ delayDuration: 500,
53
+ avoidCollisions: true,
54
+ arrow: true,
55
+ },
56
+ render: (args) => (
57
+ <div style={{ padding: 80, display: "flex", justifyContent: "center" }}>
58
+ <Tooltip {...args}>
59
+ <Button>Hover me</Button>
60
+ </Tooltip>
61
+ </div>
62
+ ),
63
+ };
64
+
65
+ /**
66
+ * All four sides shown at once.
67
+ */
68
+ const AllSides: Story = {
69
+ render: () => (
70
+ <div
71
+ style={{
72
+ padding: 120,
73
+ display: "grid",
74
+ gridTemplateColumns: "repeat(2, max-content)",
75
+ gap: 40,
76
+ justifyContent: "center",
77
+ }}
78
+ >
79
+ <Tooltip content={"Top"} side={"top"} arrow={true}>
80
+ <Button>Top</Button>
81
+ </Tooltip>
82
+ <Tooltip content={"Right"} side={"right"} arrow={true}>
83
+ <Button>Right</Button>
84
+ </Tooltip>
85
+ <Tooltip content={"Bottom"} side={"bottom"} arrow={true}>
86
+ <Button>Bottom</Button>
87
+ </Tooltip>
88
+ <Tooltip content={"Left"} side={"left"} arrow={true}>
89
+ <Button>Left</Button>
90
+ </Tooltip>
91
+ </div>
92
+ ),
93
+ };
94
+
95
+ /**
96
+ * `TooltipProvider` enables group-delay behavior: once any tooltip is open, the next ones
97
+ * appear without waiting for `delayDuration` (until `skipDelayDuration` elapses with all
98
+ * tooltips closed). Hover one button slowly, then sweep across the rest — they pop instantly.
99
+ */
100
+ const GroupDelay: Story = {
101
+ render: () => (
102
+ <TooltipProvider delayDuration={500} skipDelayDuration={400}>
103
+ <div style={{ padding: 80, display: "flex", gap: 12, justifyContent: "center" }}>
104
+ <Tooltip content={"First"}>
105
+ <Button>One</Button>
106
+ </Tooltip>
107
+ <Tooltip content={"Second"}>
108
+ <Button>Two</Button>
109
+ </Tooltip>
110
+ <Tooltip content={"Third"}>
111
+ <Button>Three</Button>
112
+ </Tooltip>
113
+ <Tooltip content={"Fourth"}>
114
+ <Button>Four</Button>
115
+ </Tooltip>
116
+ </div>
117
+ </TooltipProvider>
118
+ ),
119
+ };
120
+
121
+ /**
122
+ * Triggers placed near viewport edges. With `avoidCollisions` (default) the tooltip
123
+ * flips to fit; toggle the arg in the playground story to see the difference.
124
+ */
125
+ const NearViewportEdge: Story = {
126
+ render: () => (
127
+ <div style={{ height: "90vh", position: "relative" }}>
128
+ <div style={{ position: "absolute", top: 4, left: 4 }}>
129
+ <Tooltip content={"I would overflow up-left, so I flip"} side={"top"} arrow={true}>
130
+ <Button>Top-left corner</Button>
131
+ </Tooltip>
132
+ </div>
133
+ <div style={{ position: "absolute", top: 4, right: 4 }}>
134
+ <Tooltip content={"I would overflow up-right, so I flip"} side={"top"} arrow={true}>
135
+ <Button>Top-right corner</Button>
136
+ </Tooltip>
137
+ </div>
138
+ <div style={{ position: "absolute", bottom: 4, left: 4 }}>
139
+ <Tooltip content={"I would overflow down-left"} side={"bottom"} arrow={true}>
140
+ <Button>Bottom-left corner</Button>
141
+ </Tooltip>
142
+ </div>
143
+ <div style={{ position: "absolute", bottom: 4, right: 4 }}>
144
+ <Tooltip content={"I would overflow down-right"} side={"bottom"} arrow={true}>
145
+ <Button>Bottom-right corner</Button>
146
+ </Tooltip>
147
+ </div>
148
+ </div>
149
+ ),
150
+ };
151
+
152
+ /**
153
+ * Long content wraps to the configured `maxWidth`.
154
+ */
155
+ const LongContent: Story = {
156
+ render: () => (
157
+ <div style={{ padding: 80, display: "flex", justifyContent: "center" }}>
158
+ <Tooltip
159
+ content={"This tooltip has a longer description that wraps onto multiple lines once it "
160
+ + "exceeds the maximum content width set in the styles."}
161
+ side={"bottom"}
162
+ >
163
+ <Button>Long description</Button>
164
+ </Tooltip>
165
+ </div>
166
+ ),
167
+ };
168
+
169
+ /**
170
+ * Edge case: tooltip rendered from inside a `Modal`. Because the content is portalled to
171
+ * `document.body`, it escapes the modal's stacking context and renders above it.
172
+ */
173
+ const InModal: Story = {
174
+ render: () => {
175
+ const [open, setOpen] = useState(false);
176
+
177
+ const handleOpen = useCallback(() => { setOpen(true); }, []);
178
+ const handleClose = useCallback(() => { setOpen(false); }, []);
179
+
180
+ return (
181
+ <div>
182
+ <Button onClick={handleOpen}>Open modal</Button>
183
+ <Modal isOpen={open} onClose={handleClose} title={"Tooltip in a modal"}>
184
+ <Gap>
185
+ <div>Hover the buttons below — the tooltip should appear above the modal.</div>
186
+ <div style={{ display: "flex", gap: 12 }}>
187
+ <Tooltip content={"Above modal, side=top"} side={"top"} arrow={true}>
188
+ <Button>Top</Button>
189
+ </Tooltip>
190
+ <Tooltip content={"Above modal, side=right"} side={"right"} arrow={true}>
191
+ <Button>Right</Button>
192
+ </Tooltip>
193
+ <Tooltip content={"Above modal, side=bottom"} side={"bottom"} arrow={true}>
194
+ <Button>Bottom</Button>
195
+ </Tooltip>
196
+ </div>
197
+ </Gap>
198
+ <ModalButtons>
199
+ <ModalButtons.Button variant={"main"} onClick={handleClose}>Close</ModalButtons.Button>
200
+ </ModalButtons>
201
+ </Modal>
202
+ </div>
203
+ );
204
+ },
205
+ };
206
+
207
+ /**
208
+ * Edge case: tooltip rendered from inside a `Drawer`. Same portal behavior — content
209
+ * floats above the drawer regardless of the drawer's stacking context.
210
+ */
211
+ const InDrawer: Story = {
212
+ render: () => {
213
+ const [open, setOpen] = useState(false);
214
+
215
+ const handleOpen = useCallback(() => { setOpen(true); }, []);
216
+ const handleClose = useCallback(() => { setOpen(false); }, []);
217
+
218
+ return (
219
+ <div>
220
+ <Button onClick={handleOpen}>Open drawer</Button>
221
+ <Drawer isOpen={open} onClose={handleClose}>
222
+ <div style={{ padding: 24, display: "flex", flexDirection: "column", gap: 16 }}>
223
+ <div>Tooltips work from inside a drawer.</div>
224
+ <Tooltip content={"Hello from inside the drawer"} side={"bottom"} arrow={true}>
225
+ <Button>Hover me</Button>
226
+ </Tooltip>
227
+ <Button onClick={handleClose}>Close drawer</Button>
228
+ </div>
229
+ </Drawer>
230
+ </div>
231
+ );
232
+ },
233
+ };
234
+
235
+ /**
236
+ * Controlled tooltip — open state is driven by parent. Useful for tutorials,
237
+ * onboarding tours, or pinning a tooltip open while a user interacts elsewhere.
238
+ */
239
+ const Controlled: Story = {
240
+ render: () => {
241
+ const [open, setOpen] = useState(false);
242
+
243
+ const handleToggle = useCallback(() => { setOpen(p => !p); }, []);
244
+
245
+ return (
246
+ <div style={{ padding: 80, display: "flex", gap: 16, justifyContent: "center" }}>
247
+ <Button onClick={handleToggle}>{open ? "Hide" : "Show"} tooltip</Button>
248
+ <Tooltip content={"I'm controlled"} open={open} side={"right"}>
249
+ <Button>Target</Button>
250
+ </Tooltip>
251
+ </div>
252
+ );
253
+ },
254
+ };
255
+
256
+ /**
257
+ * Tooltip wrapping a non-button trigger. Any element that can receive a ref works
258
+ * — here, an inline word with a dotted underline.
259
+ */
260
+ const InlineTrigger: Story = {
261
+ render: () => (
262
+ <div style={{ padding: 80, fontSize: 18, lineHeight: 1.6, maxWidth: 500, margin: "0 auto" }}>
263
+ This sentence contains a{" "}
264
+ <Tooltip content={"A short, contextual explanation."}>
265
+ <span style={{ borderBottom: "1px dotted currentColor", cursor: "help" }}>
266
+ glossed term
267
+ </span>
268
+ </Tooltip>
269
+ {" "}that reveals more on hover or focus.
270
+ </div>
271
+ ),
272
+ };
273
+
274
+ export default meta;
275
+ export {
276
+ Primary,
277
+ AllSides,
278
+ GroupDelay,
279
+ NearViewportEdge,
280
+ LongContent,
281
+ InModal,
282
+ InDrawer,
283
+ Controlled,
284
+ InlineTrigger,
285
+ };
@@ -0,0 +1,36 @@
1
+ import * as RadixTooltip from "@radix-ui/react-tooltip";
2
+
3
+ import { dimensionsPxToRem, fontPxToRem, keyframes, pxToRem, styled } from "../../../theme";
4
+
5
+ const fadeIn = keyframes({
6
+ from: { opacity: 0, transform: "scale(0.96)" },
7
+ to: { opacity: 1, transform: "scale(1)" },
8
+ });
9
+
10
+ const StyledContent = styled(RadixTooltip.Content, {
11
+ "zIndex": 10,
12
+ "background": "$text2",
13
+ "color": "$background",
14
+ "padding": `${dimensionsPxToRem(18)} ${dimensionsPxToRem(36)}`,
15
+ "borderRadius": dimensionsPxToRem(12),
16
+ "fontSize": fontPxToRem(24),
17
+ "lineHeight": 1.3,
18
+ "maxWidth": pxToRem(280),
19
+ "boxShadow": `0 ${pxToRem(2)} ${pxToRem(8)} rgba(0, 0, 0, 0.18)`,
20
+ "userSelect": "none",
21
+ "transformOrigin": "var(--radix-tooltip-content-transform-origin)",
22
+ "animation": `${fadeIn.toString()} 120ms ease-out`,
23
+
24
+ "&[data-state=\"closed\"]": {
25
+ animationDirection: "reverse",
26
+ },
27
+ });
28
+
29
+ const StyledArrow = styled(RadixTooltip.Arrow, {
30
+ fill: "$text2",
31
+ });
32
+
33
+ export {
34
+ StyledContent,
35
+ StyledArrow,
36
+ };