@soroush.tech/design-system 2.1.0-alpha.0 → 2.1.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/dist/Accordion/Accordion.d.cts +2 -2
  2. package/dist/Accordion/Accordion.d.mts +2 -2
  3. package/dist/Accordion/AccordionGroup.d.cts +1 -1
  4. package/dist/Accordion/AccordionGroup.d.mts +1 -1
  5. package/dist/Alert/Alert.d.cts +1 -1
  6. package/dist/Alert/Alert.d.mts +1 -1
  7. package/dist/AppBar.d.cts +1 -1
  8. package/dist/AppBar.d.mts +1 -1
  9. package/dist/Autocomplete.d.cts +1 -1
  10. package/dist/Autocomplete.d.mts +1 -1
  11. package/dist/Avatar.d.cts +1 -1
  12. package/dist/Avatar.d.mts +1 -1
  13. package/dist/Backdrop.d.cts +1 -1
  14. package/dist/Backdrop.d.mts +1 -1
  15. package/dist/Badge.d.cts +1 -1
  16. package/dist/Badge.d.mts +1 -1
  17. package/dist/Breadcrumbs.d.cts +3 -3
  18. package/dist/Breadcrumbs.d.mts +3 -3
  19. package/dist/Button.d.cts +1 -1
  20. package/dist/Button.d.mts +1 -1
  21. package/dist/ButtonGroup.d.cts +1 -1
  22. package/dist/ButtonGroup.d.mts +1 -1
  23. package/dist/Card.d.cts +4 -4
  24. package/dist/Card.d.mts +4 -4
  25. package/dist/Checkbox.d.cts +1 -1
  26. package/dist/Checkbox.d.mts +1 -1
  27. package/dist/Chip.d.cts +1 -1
  28. package/dist/Chip.d.mts +1 -1
  29. package/dist/CircularProgress.d.cts +2 -2
  30. package/dist/CircularProgress.d.mts +2 -2
  31. package/dist/Collapse.d.cts +1 -1
  32. package/dist/Collapse.d.mts +1 -1
  33. package/dist/Drawer.d.cts +3 -3
  34. package/dist/Drawer.d.mts +3 -3
  35. package/dist/Fab.d.cts +1 -1
  36. package/dist/Fab.d.mts +1 -1
  37. package/dist/FabMenu/FabMenu.d.cts +1 -1
  38. package/dist/FabMenu/FabMenu.d.mts +1 -1
  39. package/dist/FabMenu/FabMenuItem.d.cts +1 -1
  40. package/dist/FabMenu/FabMenuItem.d.mts +1 -1
  41. package/dist/Fade.d.cts +1 -1
  42. package/dist/Fade.d.mts +1 -1
  43. package/dist/Flex.d.cts +1 -1
  44. package/dist/Flex.d.mts +1 -1
  45. package/dist/Form.d.cts +1 -1
  46. package/dist/Form.d.mts +1 -1
  47. package/dist/FormControl.d.cts +1 -1
  48. package/dist/FormControl.d.mts +1 -1
  49. package/dist/FormHelperText.d.cts +1 -1
  50. package/dist/FormHelperText.d.mts +1 -1
  51. package/dist/FormLabel.d.cts +1 -1
  52. package/dist/FormLabel.d.mts +1 -1
  53. package/dist/Grid.d.cts +1 -1
  54. package/dist/Grid.d.mts +1 -1
  55. package/dist/Grow.d.cts +1 -1
  56. package/dist/Grow.d.mts +1 -1
  57. package/dist/Icon.d.cts +1 -1
  58. package/dist/Icon.d.mts +1 -1
  59. package/dist/Image.d.cts +1 -1
  60. package/dist/Image.d.mts +1 -1
  61. package/dist/LinearProgress.d.cts +2 -2
  62. package/dist/LinearProgress.d.mts +2 -2
  63. package/dist/Link.d.cts +1 -1
  64. package/dist/Link.d.mts +1 -1
  65. package/dist/Menu/ContextMenu.cjs +23 -14
  66. package/dist/Menu/ContextMenu.d.cts +18 -8
  67. package/dist/Menu/ContextMenu.d.mts +18 -8
  68. package/dist/Menu/ContextMenu.mjs +24 -15
  69. package/dist/Menu/Menu.cjs +1 -1
  70. package/dist/Menu/Menu.d.cts +1 -1
  71. package/dist/Menu/Menu.d.mts +1 -1
  72. package/dist/Menu/Menu.mjs +1 -1
  73. package/dist/Menu/MenuItems.cjs +1 -1
  74. package/dist/Menu/MenuItems.d.cts +1 -1
  75. package/dist/Menu/MenuItems.d.mts +1 -1
  76. package/dist/Menu/MenuItems.mjs +1 -1
  77. package/dist/Menu/MenuList.cjs +1 -1
  78. package/dist/Menu/MenuList.d.cts +3 -36
  79. package/dist/Menu/MenuList.d.mts +3 -36
  80. package/dist/Menu/MenuList.mjs +1 -1
  81. package/dist/{Menu-CX9V2DAu.mjs → Menu-Cv887y7O.mjs} +8 -5
  82. package/dist/{Menu-BfJF32J2.cjs → Menu-DOOK_gM9.cjs} +8 -5
  83. package/dist/Menu.cjs +2 -2
  84. package/dist/Menu.d.cts +5 -5
  85. package/dist/Menu.d.mts +5 -5
  86. package/dist/Menu.mjs +2 -2
  87. package/dist/{MenuItem-CvCMGXuL.cjs → MenuItem-BWm8DC-S.cjs} +28 -25
  88. package/dist/{MenuItem-DdPzSWZY.mjs → MenuItem-hJeCsQZX.mjs} +28 -25
  89. package/dist/MenuItem.cjs +1 -1
  90. package/dist/MenuItem.d.cts +1 -1
  91. package/dist/MenuItem.d.mts +1 -1
  92. package/dist/MenuItem.mjs +1 -1
  93. package/dist/{MenuList-DsJmxNPu.cjs → MenuList-CSaaR3jt.cjs} +2 -1
  94. package/dist/{MenuList-CGZgfBno.mjs → MenuList-D7Pvpn_K.mjs} +2 -1
  95. package/dist/{MenuListContext-DJ_qJ1Uo.d.cts → MenuListContext-BN1VV12-.d.mts} +2 -2
  96. package/dist/{MenuListContext-DiZAVDCb.d.mts → MenuListContext-BkQzp2DA.d.cts} +2 -2
  97. package/dist/Modal.d.cts +1 -1
  98. package/dist/Modal.d.mts +1 -1
  99. package/dist/NativeSelect.d.cts +2 -2
  100. package/dist/NativeSelect.d.mts +2 -2
  101. package/dist/NavTree/NavLink.d.cts +1 -1
  102. package/dist/NavTree/NavLink.d.mts +1 -1
  103. package/dist/NavTree/NavTree.d.cts +1 -1
  104. package/dist/NavTree/NavTree.d.mts +1 -1
  105. package/dist/NumberInput.d.cts +1 -1
  106. package/dist/NumberInput.d.mts +1 -1
  107. package/dist/Pagination/PaginationItem.d.cts +1 -1
  108. package/dist/Pagination/PaginationItem.d.mts +1 -1
  109. package/dist/Pagination.d.cts +2 -2
  110. package/dist/Pagination.d.mts +2 -2
  111. package/dist/Paper.d.cts +2 -2
  112. package/dist/Paper.d.mts +2 -2
  113. package/dist/Popover.d.cts +3 -3
  114. package/dist/Popover.d.mts +3 -3
  115. package/dist/Pressable.d.cts +1 -1
  116. package/dist/Pressable.d.mts +1 -1
  117. package/dist/Quote.d.cts +2 -2
  118. package/dist/Quote.d.mts +2 -2
  119. package/dist/Radio.d.cts +1 -1
  120. package/dist/Radio.d.mts +1 -1
  121. package/dist/RangeInput.d.cts +1 -1
  122. package/dist/RangeInput.d.mts +1 -1
  123. package/dist/Rating.d.cts +1 -1
  124. package/dist/Rating.d.mts +1 -1
  125. package/dist/ScrollArea.d.cts +1 -1
  126. package/dist/ScrollArea.d.mts +1 -1
  127. package/dist/Select.d.cts +2 -2
  128. package/dist/Select.d.mts +2 -2
  129. package/dist/Sidebar/Sidebar.d.cts +1 -1
  130. package/dist/Sidebar/Sidebar.d.mts +1 -1
  131. package/dist/Sidebar/SidebarItem.d.cts +3 -3
  132. package/dist/Sidebar/SidebarItem.d.mts +3 -3
  133. package/dist/Skeleton.d.cts +1 -1
  134. package/dist/Skeleton.d.mts +1 -1
  135. package/dist/Slide.d.cts +1 -1
  136. package/dist/Slide.d.mts +1 -1
  137. package/dist/Snackbar.d.cts +2 -2
  138. package/dist/Snackbar.d.mts +2 -2
  139. package/dist/Switch.d.cts +1 -1
  140. package/dist/Switch.d.mts +1 -1
  141. package/dist/Table/Table.d.cts +2 -2
  142. package/dist/Table/Table.d.mts +2 -2
  143. package/dist/Table/TableBody.d.cts +1 -1
  144. package/dist/Table/TableBody.d.mts +1 -1
  145. package/dist/Table/TableCell.d.cts +1 -1
  146. package/dist/Table/TableCell.d.mts +1 -1
  147. package/dist/Table/TableContainer.d.cts +1 -1
  148. package/dist/Table/TableContainer.d.mts +1 -1
  149. package/dist/Table/TableControl.d.cts +1 -1
  150. package/dist/Table/TableControl.d.mts +1 -1
  151. package/dist/Table/TableFooter.d.cts +1 -1
  152. package/dist/Table/TableFooter.d.mts +1 -1
  153. package/dist/Table/TableHead.d.cts +1 -1
  154. package/dist/Table/TableHead.d.mts +1 -1
  155. package/dist/Table/TablePagination.d.cts +2 -2
  156. package/dist/Table/TablePagination.d.mts +2 -2
  157. package/dist/Table/TablePaginationActions.d.cts +1 -1
  158. package/dist/Table/TablePaginationActions.d.mts +1 -1
  159. package/dist/Table/TableRow.d.cts +1 -1
  160. package/dist/Table/TableRow.d.mts +1 -1
  161. package/dist/Table/TableSortLabel.d.cts +1 -1
  162. package/dist/Table/TableSortLabel.d.mts +1 -1
  163. package/dist/Table/hooks.d.cts +1 -1
  164. package/dist/Table/hooks.d.mts +1 -1
  165. package/dist/Table.d.cts +5 -5
  166. package/dist/Table.d.mts +5 -5
  167. package/dist/{TableContext-4sJdk84N.d.cts → TableContext-BNwokJ3f.d.cts} +1 -1
  168. package/dist/{TableContext-BCW5av9c.d.mts → TableContext-jOlk5jxs.d.mts} +1 -1
  169. package/dist/Tabs/Tab.cjs +18 -14
  170. package/dist/Tabs/Tab.d.cts +2 -2
  171. package/dist/Tabs/Tab.d.mts +2 -2
  172. package/dist/Tabs/Tab.mjs +18 -14
  173. package/dist/Tabs/TabContext.d.cts +1 -1
  174. package/dist/Tabs/TabContext.d.mts +1 -1
  175. package/dist/Tabs/TabList.cjs +1 -1
  176. package/dist/Tabs/TabList.d.cts +1 -1
  177. package/dist/Tabs/TabList.d.mts +1 -1
  178. package/dist/Tabs/TabList.mjs +1 -1
  179. package/dist/Tabs/TabPanel.d.cts +2 -2
  180. package/dist/Tabs/TabPanel.d.mts +2 -2
  181. package/dist/Tabs/TabScrollButton.d.cts +1 -1
  182. package/dist/Tabs/TabScrollButton.d.mts +1 -1
  183. package/dist/Tabs/Tabs.cjs +1 -1
  184. package/dist/Tabs/Tabs.d.cts +2 -2
  185. package/dist/Tabs/Tabs.d.mts +2 -2
  186. package/dist/Tabs/Tabs.mjs +1 -1
  187. package/dist/{Tabs-CPH0H6yp.cjs → Tabs-BTa2myRe.cjs} +28 -21
  188. package/dist/{Tabs-CG-hRs9L.mjs → Tabs-CE8iDr0D.mjs} +28 -21
  189. package/dist/Tabs.cjs +1 -1
  190. package/dist/Tabs.d.cts +3 -3
  191. package/dist/Tabs.d.mts +3 -3
  192. package/dist/Tabs.mjs +1 -1
  193. package/dist/{TabsContext-CsiW5MOp.d.mts → TabsContext-D5E7s9i5.d.mts} +1 -1
  194. package/dist/{TabsContext-DrmDtBqA.d.cts → TabsContext-i57cha5W.d.cts} +1 -1
  195. package/dist/TextInput.d.cts +1 -1
  196. package/dist/TextInput.d.mts +1 -1
  197. package/dist/ToggleButton/ToggleButton.d.cts +1 -1
  198. package/dist/ToggleButton/ToggleButton.d.mts +1 -1
  199. package/dist/ToggleButton/ToggleButtonGroup.d.cts +1 -1
  200. package/dist/ToggleButton/ToggleButtonGroup.d.mts +1 -1
  201. package/dist/Tooltip-Cx4ez9vY.mjs +405 -0
  202. package/dist/Tooltip-rkGm1HnP.cjs +417 -0
  203. package/dist/Tooltip.cjs +3 -311
  204. package/dist/Tooltip.d.cts +36 -5
  205. package/dist/Tooltip.d.mts +36 -5
  206. package/dist/Tooltip.mjs +1 -310
  207. package/dist/TransferList.d.cts +1 -1
  208. package/dist/TransferList.d.mts +1 -1
  209. package/dist/Typography.d.cts +2 -2
  210. package/dist/Typography.d.mts +2 -2
  211. package/dist/View.d.cts +1 -1
  212. package/dist/View.d.mts +1 -1
  213. package/dist/Zoom.d.cts +1 -1
  214. package/dist/Zoom.d.mts +1 -1
  215. package/dist/catalog.cjs +4 -0
  216. package/dist/catalog.d.cts +1 -1
  217. package/dist/catalog.d.mts +1 -1
  218. package/dist/catalog.mjs +4 -0
  219. package/dist/engine.d.cts +1 -1
  220. package/dist/engine.d.mts +1 -1
  221. package/dist/{index-D24iFgwR.d.cts → index-3-LXZL7g.d.mts} +3 -3
  222. package/dist/{index-BWiDilH8.d.mts → index-B-1sp9oV.d.mts} +7 -0
  223. package/dist/{index-C3TrdOpQ.d.cts → index-BDVi1DNs.d.mts} +3 -3
  224. package/dist/{index-5TAVgzbU.d.mts → index-BJIqJbF4.d.mts} +2 -2
  225. package/dist/{index-Bx-4KmJU.d.mts → index-BMeqk34D.d.mts} +1 -1
  226. package/dist/{index-DQYhGgbl.d.cts → index-BYg-l1_n.d.cts} +2 -2
  227. package/dist/{index-Biqn5xUs.d.mts → index-BbWQZ2Wj.d.mts} +4 -4
  228. package/dist/{index-DKNvADeE.d.mts → index-BhWBXIkH.d.cts} +3 -3
  229. package/dist/{index-DWon54cO.d.cts → index-BwFPSXSw.d.mts} +1 -1
  230. package/dist/{index-Bo8Og0oC.d.cts → index-Bwry7fNj.d.mts} +3 -3
  231. package/dist/{index-CeFExef3.d.cts → index-C3D70-3U.d.mts} +2 -2
  232. package/dist/{index-HLDMvfb2.d.cts → index-C6uLwNRF.d.cts} +4 -4
  233. package/dist/{index-BgmEVOSj.d.mts → index-C9jnQ-mQ.d.mts} +1 -1
  234. package/dist/{index-D--R4_5H.d.mts → index-CGlDeiGk.d.cts} +2 -2
  235. package/dist/{index-DvVQLBZc.d.cts → index-CK-uaK5U.d.cts} +7 -0
  236. package/dist/{index-DjmWIzXF.d.mts → index-CLTH0nFB.d.cts} +3 -3
  237. package/dist/{index-Dt-ZNTnC.d.cts → index-COGZ6LV4.d.mts} +1 -1
  238. package/dist/{index-DhzjNAzv.d.mts → index-CPmemva9.d.mts} +10 -5
  239. package/dist/{index-CW0DW6Aq.d.mts → index-CRbfhyQ6.d.mts} +2 -2
  240. package/dist/{index-m1RGSQlP.d.mts → index-CZofj6vc.d.cts} +3 -3
  241. package/dist/{index-Buu5MtRG.d.mts → index-C_K0hsEr.d.mts} +1 -1
  242. package/dist/index-C_n4ZPpQ.d.mts +1 -0
  243. package/dist/{index-fRyMPKtY.d.cts → index-Cc7Yhn7-.d.cts} +1 -1
  244. package/dist/{index-DgLjcrkG.d.cts → index-Cf2D7Y1b.d.cts} +1 -1
  245. package/dist/{index-YKXzINGk.d.mts → index-ClTo3BEJ.d.mts} +2 -2
  246. package/dist/{index-DR76LcSz.d.mts → index-CoHM1HQY.d.cts} +1 -1
  247. package/dist/{index-DtVrZFJI.d.mts → index-Cp96BUYc.d.cts} +2 -2
  248. package/dist/{index-CAICXdTA.d.cts → index-CvV0TCBK.d.cts} +1 -1
  249. package/dist/{index-DhTzn0mf.d.cts → index-CwWM6Xfz.d.cts} +1 -1
  250. package/dist/{index-BlHFb150.d.cts → index-CykbbqeN.d.cts} +2 -2
  251. package/dist/{index-Ba39mhDf.d.cts → index-DA3M2w5w.d.cts} +10 -5
  252. package/dist/index-DOimZ1Wo.d.mts +44 -0
  253. package/dist/{index-HAVWK7RM.d.cts → index-DOnYRzqY.d.cts} +2 -2
  254. package/dist/{index-BYAtunSZ.d.cts → index-DPCh-ols.d.mts} +2 -2
  255. package/dist/{index-CBOtkDdX.d.cts → index-DXUVsHux.d.mts} +1 -1
  256. package/dist/{index-DrfJt7W6.d.cts → index-Dh_9qMhj.d.mts} +2 -2
  257. package/dist/index-DiQHPHUv.d.cts +44 -0
  258. package/dist/{index-CyOSmefH.d.cts → index-F81TdZtB.d.mts} +2 -2
  259. package/dist/{index-DM7HHa4V.d.mts → index-YxsjfTkO.d.cts} +2 -2
  260. package/dist/{index-Bp9ECTzr.d.mts → index-d5jm3kxO.d.cts} +2 -2
  261. package/dist/index-fwRQcB91.d.cts +1 -0
  262. package/dist/{index-D_azfqsX.d.mts → index-qgFJF8n2.d.cts} +1 -1
  263. package/dist/{index-DtK3SaKA.d.mts → index-vls8Jhdl.d.cts} +1 -1
  264. package/dist/{index-Dudkopvi.d.mts → index-xhbtDtsc.d.mts} +1 -1
  265. package/dist/index.d.cts +1 -1
  266. package/dist/index.d.mts +1 -1
  267. package/dist/style.d.cts +2 -2
  268. package/dist/style.d.mts +2 -2
  269. package/dist/theme.d.cts +2 -2
  270. package/dist/theme.d.mts +2 -2
  271. package/dist/{useTablePagination-BOzuKUnF.d.mts → useTablePagination-DOLl6Ba7.d.cts} +1 -1
  272. package/dist/{useTablePagination-CraL2Mux.d.cts → useTablePagination-bZTeweJ_.d.mts} +1 -1
  273. package/dist/{useTransition-B-hzi7Sm.d.mts → useTransition-Dk84FQFT.d.mts} +1 -1
  274. package/dist/{useTransition-CF_Zy_tM.d.cts → useTransition-DnOAXNav.d.cts} +1 -1
  275. package/package.json +1 -1
  276. package/dist/index-6zQ2VUlM.d.cts +0 -1
  277. package/dist/index-B1qv6yGM.d.mts +0 -1
@@ -1,4 +1,4 @@
1
- import "./index-CAICXdTA.cjs";
1
+ import "./index-CvV0TCBK.cjs";
2
2
  /** A tab's value: what it is chosen as. A `Tab` without one takes its position. */
3
3
  type TabValue = string | number;
4
4
  export { TabValue as t };
@@ -1,4 +1,4 @@
1
- import { nt as Theme } from "./index-DvVQLBZc.cjs";
1
+ import { nt as Theme } from "./index-CK-uaK5U.cjs";
2
2
  import { ChangeEventHandler, ElementType, InputHTMLAttributes, TextareaHTMLAttributes } from "react";
3
3
  import { LayoutProps, SpaceProps } from "@soroush.tech/styled-system";
4
4
  type TextInputColor = keyof Theme['palette'];
@@ -1,4 +1,4 @@
1
- import { nt as Theme } from "./index-BWiDilH8.mjs";
1
+ import { nt as Theme } from "./index-B-1sp9oV.mjs";
2
2
  import { LayoutProps, SpaceProps } from "@soroush.tech/styled-system";
3
3
  import { ChangeEventHandler, ElementType, InputHTMLAttributes, TextareaHTMLAttributes } from "react";
4
4
  type TextInputColor = keyof Theme['palette'];
@@ -1,4 +1,4 @@
1
- import { i as ButtonProps } from "../index-DgLjcrkG.cjs";
1
+ import { i as ButtonProps } from "../index-Cf2D7Y1b.cjs";
2
2
  import { r as ToggleButtonValue } from "../ToggleButtonGroupContext-CA-4EgZL.cjs";
3
3
  interface ToggleButtonProps extends Omit<ButtonProps, 'variant' | 'href' | 'target' | 'rel' | 'value' | 'onChange'> {
4
4
  /** The value associated with the button inside a `ToggleButtonGroup`. */
@@ -1,4 +1,4 @@
1
- import { i as ButtonProps } from "../index-Bx-4KmJU.mjs";
1
+ import { i as ButtonProps } from "../index-BMeqk34D.mjs";
2
2
  import { r as ToggleButtonValue } from "../ToggleButtonGroupContext-CA-4EgZL.mjs";
3
3
  interface ToggleButtonProps extends Omit<ButtonProps, 'variant' | 'href' | 'target' | 'rel' | 'value' | 'onChange'> {
4
4
  /** The value associated with the button inside a `ToggleButtonGroup`. */
@@ -1,4 +1,4 @@
1
- import { a as ButtonGroupProps } from "../index-D24iFgwR.cjs";
1
+ import { a as ButtonGroupProps } from "../index-CZofj6vc.cjs";
2
2
  import { r as ToggleButtonValue } from "../ToggleButtonGroupContext-CA-4EgZL.cjs";
3
3
  interface ToggleButtonGroupProps extends Omit<ButtonGroupProps, 'variant' | 'onChange'> {
4
4
  /** Selected value(s) - single when `isExclusive`, array otherwise. Controlled. */
@@ -1,4 +1,4 @@
1
- import { a as ButtonGroupProps } from "../index-m1RGSQlP.mjs";
1
+ import { a as ButtonGroupProps } from "../index-3-LXZL7g.mjs";
2
2
  import { r as ToggleButtonValue } from "../ToggleButtonGroupContext-CA-4EgZL.mjs";
3
3
  interface ToggleButtonGroupProps extends Omit<ButtonGroupProps, 'variant' | 'onChange'> {
4
4
  /** Selected value(s) - single when `isExclusive`, array otherwise. Controlled. */
@@ -0,0 +1,405 @@
1
+ import { a as src_exports, o as styled, t as createShouldForwardProp } from "./src-B-rNjHIL.mjs";
2
+ import { n as useDefaultProps, r as useTheme } from "./theme-DyyZQFzQ.mjs";
3
+ import { t as themeDefault } from "./themeDefault-BeZJzqJj.mjs";
4
+ import { t as getSurfaceRadius } from "./getSurfaceRadius-B1QE_VLa.mjs";
5
+ import { t as useControlled } from "./useControlled-B4uQ9Bj6.mjs";
6
+ import { Portal } from "./Portal.mjs";
7
+ import { t as useAnchoredPlacement } from "./useAnchoredPlacement-txSaWzfk.mjs";
8
+ import { t as useMergedRefs } from "./useMergedRefs-CdfwtmUd.mjs";
9
+ import { n as resolveTooltipPlacement, t as getTooltipOrigins } from "./getTooltipOrigins-D0bLLXwY.mjs";
10
+ import { cloneElement, createContext, useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from "react";
11
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
12
+ // src/Tooltip/TooltipGroupContext.ts
13
+ const TooltipGroupContext = createContext(null);
14
+ /** The state of a group whose window is `skipDelayDuration` milliseconds long. */
15
+ const createTooltipGroupState = (skipDelayDuration) => {
16
+ let active = null;
17
+ let closedAt = Number.NEGATIVE_INFINITY;
18
+ return {
19
+ shouldSkipDelay: () => active !== null || Date.now() - closedAt < skipDelayDuration,
20
+ open: (close) => {
21
+ active = close;
22
+ },
23
+ closeActive: (event) => active?.(event),
24
+ release: (close) => {
25
+ if (active !== close) return;
26
+ active = null;
27
+ closedAt = Date.now();
28
+ }
29
+ };
30
+ };
31
+ const themeGroups = /* @__PURE__ */ new WeakMap();
32
+ const getThemeTooltipGroup = (theme, skipDelayDuration) => {
33
+ const byDuration = themeGroups.get(theme) ?? /* @__PURE__ */ new Map();
34
+ themeGroups.set(theme, byDuration);
35
+ const group = byDuration.get(skipDelayDuration) ?? createTooltipGroupState(skipDelayDuration);
36
+ byDuration.set(skipDelayDuration, group);
37
+ return group;
38
+ };
39
+ // src/Tooltip/hooks/useTooltip.ts
40
+ const isKeyboardFocus = (event) => {
41
+ try {
42
+ return event.target.matches(":focus-visible");
43
+ } catch {
44
+ return true;
45
+ }
46
+ };
47
+ /**
48
+ * The state of a tooltip: whether it is open (its own, or its owner's), the timers that open and
49
+ * close it, and the handlers its child and the tooltip itself take. Opening and closing are
50
+ * delayed; moving from the child onto the tooltip does not close it, so its text can be read and
51
+ * selected (WCAG 1.4.13); Escape closes it at once.
52
+ */
53
+ function useTooltip({ isOpen: isOpenProp, defaultOpen, isAtPoint = false, onOpen, onClose, enterDelay, leaveDelay, enterTouchDelay, leaveTouchDelay, shouldOpenOnHover, shouldOpenOnFocus, shouldOpenOnTouch, skipDelayDuration = 0 }) {
54
+ const [isOpen, setIsOpen] = useControlled({
55
+ controlled: isOpenProp,
56
+ default: defaultOpen
57
+ });
58
+ const timer = useRef(void 0);
59
+ const theme = useTheme();
60
+ const group = useContext(TooltipGroupContext) ?? (skipDelayDuration > 0 ? getThemeTooltipGroup(theme, skipDelayDuration) : null);
61
+ const latest = useRef({
62
+ isOpen,
63
+ isOpenProp,
64
+ isAtPoint,
65
+ onOpen,
66
+ onClose,
67
+ group
68
+ });
69
+ useEffect(() => {
70
+ latest.current = {
71
+ isOpen,
72
+ isOpenProp,
73
+ isAtPoint,
74
+ onOpen,
75
+ onClose,
76
+ group
77
+ };
78
+ });
79
+ const clear = useCallback(() => window.clearTimeout(timer.current), []);
80
+ const closeNow = useCallback((event) => {
81
+ clear();
82
+ const current = latest.current;
83
+ setIsOpen(false);
84
+ current.onClose?.(event);
85
+ }, [clear, setIsOpen]);
86
+ const isInGroup = group !== null && isOpenProp === void 0;
87
+ useEffect(() => {
88
+ if (!isInGroup || !isOpen) return void 0;
89
+ group.open(closeNow);
90
+ return () => group.release(closeNow);
91
+ }, [
92
+ group,
93
+ isInGroup,
94
+ isOpen,
95
+ closeNow
96
+ ]);
97
+ const getEnterDelay = () => isInGroup && group.shouldSkipDelay() ? 0 : enterDelay;
98
+ const ask = useCallback((next, event, delay) => {
99
+ clear();
100
+ timer.current = window.setTimeout(() => {
101
+ const current = latest.current;
102
+ if (current.isOpen === next) return;
103
+ if (next && current.isAtPoint) return;
104
+ if (current.isOpenProp === void 0) {
105
+ if (next) current.group?.closeActive(event);
106
+ else current.group?.release(closeNow);
107
+ setIsOpen(next);
108
+ }
109
+ (next ? current.onOpen : current.onClose)?.(event);
110
+ }, delay);
111
+ }, [
112
+ clear,
113
+ setIsOpen,
114
+ closeNow
115
+ ]);
116
+ useEffect(() => clear, [clear]);
117
+ useEffect(() => {
118
+ if (!isOpen) return void 0;
119
+ const handleKeyDown = (event) => {
120
+ if (event.key === "Escape") ask(false, event, 0);
121
+ };
122
+ document.addEventListener("keydown", handleKeyDown);
123
+ return () => document.removeEventListener("keydown", handleKeyDown);
124
+ }, [isOpen, ask]);
125
+ return {
126
+ isOpen,
127
+ childHandlers: {
128
+ onMouseEnter: (event) => {
129
+ if (shouldOpenOnHover) ask(true, event, getEnterDelay());
130
+ },
131
+ onMouseLeave: (event) => {
132
+ if (shouldOpenOnHover) ask(false, event, leaveDelay);
133
+ },
134
+ onFocus: (event) => {
135
+ if (shouldOpenOnFocus && isKeyboardFocus(event)) ask(true, event, getEnterDelay());
136
+ },
137
+ onBlur: (event) => {
138
+ if (shouldOpenOnFocus) ask(false, event, leaveDelay);
139
+ },
140
+ onTouchStart: (event) => {
141
+ if (shouldOpenOnTouch) ask(true, event, enterTouchDelay);
142
+ },
143
+ onTouchEnd: (event) => {
144
+ if (shouldOpenOnTouch) ask(false, event, leaveTouchDelay);
145
+ },
146
+ onTouchCancel: (event) => {
147
+ if (shouldOpenOnTouch) ask(false, event, leaveTouchDelay);
148
+ },
149
+ onPointerDown: (event) => {
150
+ if (event.pointerType !== "touch") ask(false, event, 0);
151
+ }
152
+ },
153
+ surfaceHandlers: {
154
+ onMouseEnter: () => {
155
+ if (shouldOpenOnHover) clear();
156
+ },
157
+ onMouseLeave: (event) => {
158
+ if (shouldOpenOnHover) ask(false, event, leaveDelay);
159
+ }
160
+ }
161
+ };
162
+ }
163
+ // src/Tooltip/Tooltip.tsx
164
+ const MARGIN = 8;
165
+ const GAP = 8;
166
+ const ARROW = 8;
167
+ const TooltipSurface = styled("div", {
168
+ name: "Tooltip",
169
+ label: "Tooltip",
170
+ shouldForwardProp: createShouldForwardProp([
171
+ "layer",
172
+ "isInteractive",
173
+ "borderRadius",
174
+ "bg",
175
+ "textColor"
176
+ ])
177
+ })(({ theme, layer, isInteractive, borderRadius, bg, textColor }) => ({
178
+ position: "fixed",
179
+ ...!isInteractive && { pointerEvents: "none" },
180
+ top: 0,
181
+ left: 0,
182
+ visibility: "hidden",
183
+ zIndex: theme.zOrder[layer],
184
+ boxSizing: "border-box",
185
+ maxWidth: "20rem",
186
+ padding: `${theme.space[.5]} ${theme.space[1]}`,
187
+ borderRadius: getSurfaceRadius(theme, borderRadius),
188
+ boxShadow: theme.shadows[4],
189
+ backgroundColor: (0, src_exports.get)(theme, `background.${bg ?? "modal"}`),
190
+ color: (0, src_exports.get)(theme, `text.${textColor ?? themeDefault(theme, "textColor", "initial")}`),
191
+ fontFamily: (0, src_exports.get)(theme, "fonts.body"),
192
+ fontSize: theme.fontSizes[0],
193
+ lineHeight: (0, src_exports.get)(theme, "lineHeights.base"),
194
+ overflowWrap: "break-word"
195
+ }));
196
+ const TooltipDescription = styled("span", { label: "TooltipDescription" })({
197
+ position: "absolute",
198
+ width: 1,
199
+ height: 1,
200
+ margin: -1,
201
+ padding: 0,
202
+ border: 0,
203
+ overflow: "hidden",
204
+ clip: "rect(0 0 0 0)",
205
+ whiteSpace: "nowrap"
206
+ });
207
+ const TooltipTarget = styled("span", { label: "TooltipTarget" })({ display: "inline-grid" });
208
+ const TooltipArrow = styled("span", {
209
+ name: "Tooltip",
210
+ slot: "arrow",
211
+ label: "TooltipArrow"
212
+ })({
213
+ position: "absolute",
214
+ width: ARROW,
215
+ height: ARROW,
216
+ backgroundColor: "inherit",
217
+ transform: "rotate(45deg)",
218
+ pointerEvents: "none"
219
+ });
220
+ const getArrow = ({ anchorRect, surfaceSize, top, left }) => {
221
+ const { width, height } = surfaceSize;
222
+ if (top + height <= anchorRect.top + 1 || top >= anchorRect.bottom - 1) {
223
+ const side = top + height <= anchorRect.top + 1 ? "top" : "bottom";
224
+ const middle = anchorRect.left + anchorRect.width / 2 - left;
225
+ return {
226
+ side,
227
+ offset: Math.min(Math.max(middle, ARROW), width - ARROW)
228
+ };
229
+ }
230
+ const side = left + width <= anchorRect.left + 1 ? "left" : "right";
231
+ const middle = anchorRect.top + anchorRect.height / 2 - top;
232
+ return {
233
+ side,
234
+ offset: Math.min(Math.max(middle, ARROW), height - ARROW)
235
+ };
236
+ };
237
+ const isSameArrow = (a, b) => a !== null && a.side === b.side && a.offset === b.offset;
238
+ const getArrowStyle = ({ side, offset }) => {
239
+ const half = ARROW / 2;
240
+ if (side === "top") return {
241
+ bottom: -4,
242
+ left: offset - half
243
+ };
244
+ if (side === "bottom") return {
245
+ top: -4,
246
+ left: offset - half
247
+ };
248
+ if (side === "left") return {
249
+ right: -4,
250
+ top: offset - half
251
+ };
252
+ return {
253
+ left: -4,
254
+ top: offset - half
255
+ };
256
+ };
257
+ const mergeForwarded = (own, forwarded) => Object.fromEntries(Object.entries(forwarded).filter(([, value]) => value !== void 0).map(([name, value]) => {
258
+ const current = own[name];
259
+ if (typeof value === "function" && typeof current === "function") return [name, (...args) => {
260
+ current(...args);
261
+ value(...args);
262
+ }];
263
+ if (name === "aria-describedby" && typeof current === "string" && current) return [name, `${current} ${String(value)}`];
264
+ return [name, value];
265
+ }));
266
+ const getChildName = (title, own) => {
267
+ const isHidden = own["aria-hidden"] === true || own["aria-hidden"] === "true";
268
+ const isNamed = Boolean(own["aria-label"] || own["aria-labelledby"]);
269
+ return typeof title === "string" && !isHidden && !isNamed ? { "aria-label": title } : {};
270
+ };
271
+ /**
272
+ * @description A short description of one child, shown on hover, keyboard focus and a long touch -
273
+ * a `role="tooltip"` in a `Portal`, placed beside its child and flipped for want of room. The
274
+ * child is named by it (`aria-label`) or described by it (`aria-describedby`, with
275
+ * `shouldDescribeChild`). It opens and closes after their delays, stays open while the pointer is
276
+ * on the tooltip itself, closes on Escape, and never takes or traps the focus.
277
+ */
278
+ function Tooltip({ children, anchorPosition, title, placement: placementProp, hasArrow: hasArrowProp, enterDelay: enterDelayProp, leaveDelay: leaveDelayProp, enterTouchDelay: enterTouchDelayProp, leaveTouchDelay: leaveTouchDelayProp, shouldDescribeChild: shouldDescribeChildProp, isDescriptionPersistent: isDescriptionPersistentProp, isOpen: isOpenProp, defaultOpen = false, onOpen, onClose, isInteractive: isInteractiveProp, shouldWrapDisabledChild: shouldWrapDisabledChildProp, shouldOpenOnHover: shouldOpenOnHoverProp, shouldOpenOnFocus: shouldOpenOnFocusProp, shouldOpenOnTouch: shouldOpenOnTouchProp, slots, slotProps, layer: layerProp, borderRadius: borderRadiusProp, bg: bgProp, textColor: textColorProp, className, "data-testid": dataTestid, ref: forwardedRef, ...forwarded }) {
279
+ const dp = useDefaultProps("Tooltip");
280
+ const placement = placementProp ?? dp.placement ?? "top";
281
+ const hasArrow = hasArrowProp ?? dp.hasArrow ?? false;
282
+ const shouldDescribeChild = shouldDescribeChildProp ?? dp.shouldDescribeChild ?? false;
283
+ const isDescriptionPersistent = isDescriptionPersistentProp ?? dp.isDescriptionPersistent ?? false;
284
+ const isInteractive = isInteractiveProp ?? dp.isInteractive ?? true;
285
+ const shouldWrapDisabledChild = shouldWrapDisabledChildProp ?? dp.shouldWrapDisabledChild ?? true;
286
+ const layer = layerProp ?? dp.layer ?? "tooltip";
287
+ const borderRadius = borderRadiusProp ?? dp.borderRadius;
288
+ const bg = bgProp ?? dp.bg;
289
+ const textColor = textColorProp ?? dp.textColor;
290
+ const id = useId();
291
+ const isAtPoint = anchorPosition !== void 0;
292
+ const { isOpen, childHandlers, surfaceHandlers } = useTooltip({
293
+ isOpen: isOpenProp,
294
+ defaultOpen,
295
+ isAtPoint,
296
+ onOpen,
297
+ onClose,
298
+ enterDelay: enterDelayProp ?? dp.enterDelay ?? 100,
299
+ leaveDelay: leaveDelayProp ?? dp.leaveDelay ?? 0,
300
+ enterTouchDelay: enterTouchDelayProp ?? dp.enterTouchDelay ?? 700,
301
+ leaveTouchDelay: leaveTouchDelayProp ?? dp.leaveTouchDelay ?? 1500,
302
+ shouldOpenOnHover: shouldOpenOnHoverProp ?? dp.shouldOpenOnHover ?? true,
303
+ shouldOpenOnFocus: shouldOpenOnFocusProp ?? dp.shouldOpenOnFocus ?? true,
304
+ shouldOpenOnTouch: shouldOpenOnTouchProp ?? dp.shouldOpenOnTouch ?? true,
305
+ skipDelayDuration: dp.skipDelayDuration
306
+ });
307
+ const hasTitle = title !== void 0 && title !== null && title !== "";
308
+ const isShown = isOpen && hasTitle;
309
+ const anchorRef = useRef(null);
310
+ const noAnchorRef = useRef(null);
311
+ const surfaceRef = useRef(null);
312
+ const childProps = children?.props ?? {};
313
+ const forwardedProps = mergeForwarded(childProps, forwarded);
314
+ const own = {
315
+ ...childProps,
316
+ ...forwardedProps
317
+ };
318
+ const isChildDisabled = shouldWrapDisabledChild && own.disabled === true;
319
+ const childRef = useMergedRefs(childProps.ref, forwardedRef);
320
+ const ref = useMergedRefs(isChildDisabled ? void 0 : anchorRef, childRef);
321
+ const [arrow, setArrow] = useState(null);
322
+ const getOrigins = useCallback((context) => getTooltipOrigins(resolveTooltipPlacement(placement, context), context.isRtl), [placement]);
323
+ const onPlaced = useCallback((placed) => {
324
+ if (!hasArrow) return;
325
+ const next = getArrow(placed);
326
+ setArrow((current) => isSameArrow(current, next) ? current : next);
327
+ }, [hasArrow]);
328
+ useAnchoredPlacement({
329
+ isOpen: isShown,
330
+ anchorRef: anchorPosition ? noAnchorRef : anchorRef,
331
+ anchorPosition,
332
+ surfaceRef,
333
+ getOrigins,
334
+ margin: MARGIN,
335
+ gap: GAP,
336
+ onPlaced
337
+ });
338
+ const handlers = Object.fromEntries(Object.entries(childHandlers).map(([name, handler]) => [name, (event) => {
339
+ own[name]?.(event);
340
+ handler(event);
341
+ }]));
342
+ const ownDescription = own["aria-describedby"];
343
+ const names = getChildName(title, own);
344
+ const descriptionId = `${id}-description`;
345
+ const hasPersistentDescription = children !== void 0 && shouldDescribeChild && isDescriptionPersistent && hasTitle;
346
+ const describedBy = (shown) => hasPersistentDescription ? [ownDescription, descriptionId].filter(Boolean).join(" ") : [ownDescription, shown ? id : void 0].filter(Boolean).join(" ") || void 0;
347
+ const ariaProps = shouldDescribeChild ? { "aria-describedby": describedBy(isShown) } : names;
348
+ const child = children ? cloneElement(children, {
349
+ ...forwardedProps,
350
+ ...isChildDisabled || isAtPoint ? {} : handlers,
351
+ ...ariaProps,
352
+ ref
353
+ }) : null;
354
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [
355
+ isChildDisabled && !isAtPoint ? /* @__PURE__ */ jsx(TooltipTarget, {
356
+ ref: anchorRef,
357
+ ...handlers,
358
+ children: child
359
+ }) : child,
360
+ hasPersistentDescription && /* @__PURE__ */ jsx(TooltipDescription, {
361
+ id: descriptionId,
362
+ children: title
363
+ }),
364
+ isShown && /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsxs(TooltipSurface, {
365
+ ...slotProps?.root,
366
+ as: slots?.root,
367
+ ref: surfaceRef,
368
+ id,
369
+ role: "tooltip",
370
+ layer,
371
+ isInteractive,
372
+ borderRadius,
373
+ bg,
374
+ textColor,
375
+ className: [slotProps?.root?.className, className].filter(Boolean).join(" ") || void 0,
376
+ "data-testid": dataTestid ?? slotProps?.root?.["data-testid"],
377
+ ...isAtPoint || !isInteractive ? {} : surfaceHandlers,
378
+ children: [title, hasArrow && arrow ? /* @__PURE__ */ jsx(TooltipArrow, {
379
+ ...slotProps?.arrow,
380
+ as: slots?.arrow,
381
+ style: {
382
+ ...slotProps?.arrow?.style,
383
+ ...getArrowStyle(arrow)
384
+ },
385
+ "aria-hidden": "true"
386
+ }) : null]
387
+ }) })
388
+ ] });
389
+ }
390
+ // src/Tooltip/TooltipGroup.tsx
391
+ /**
392
+ * Lets the tooltips inside it open at once, with no enter delay, when the pointer or the focus
393
+ * moves to the next one just after another closed - a toolbar or a rail read from one icon to the
394
+ * next. It renders nothing of its own. Tooltips outside a group are unchanged, a touch keeps its
395
+ * own delay, and a tooltip whose `isOpen` the app controls is left alone: the group neither opens
396
+ * nor closes it, and it does not start the window.
397
+ */
398
+ function TooltipGroup({ children, skipDelayDuration = 300 }) {
399
+ const state = useMemo(() => createTooltipGroupState(skipDelayDuration), [skipDelayDuration]);
400
+ return /* @__PURE__ */ jsx(TooltipGroupContext.Provider, {
401
+ value: state,
402
+ children
403
+ });
404
+ }
405
+ export { Tooltip as n, TooltipGroup as t };