@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
@@ -0,0 +1,417 @@
1
+ const require_src = require("./src-yC1f5WR2.cjs");
2
+ const require_theme = require("./theme-XJvMdOnY.cjs");
3
+ const require_themeDefault = require("./themeDefault-DbPHBbNO.cjs");
4
+ const require_getSurfaceRadius = require("./getSurfaceRadius-DwOn3ALC.cjs");
5
+ const require_useControlled = require("./useControlled-CzCxM4J3.cjs");
6
+ const require_Portal = require("./Portal.cjs");
7
+ const require_useAnchoredPlacement = require("./useAnchoredPlacement-BSfjNMut.cjs");
8
+ const require_useMergedRefs = require("./useMergedRefs-BtctsnmX.cjs");
9
+ const require_getTooltipOrigins = require("./getTooltipOrigins-8b5zQafY.cjs");
10
+ let react = require("react");
11
+ let react_jsx_runtime = require("react/jsx-runtime");
12
+ let _soroush_tech_styled_system_should_forward_prop = require("@soroush.tech/styled-system/should-forward-prop");
13
+ // src/Tooltip/TooltipGroupContext.ts
14
+ const TooltipGroupContext = (0, react.createContext)(null);
15
+ /** The state of a group whose window is `skipDelayDuration` milliseconds long. */
16
+ const createTooltipGroupState = (skipDelayDuration) => {
17
+ let active = null;
18
+ let closedAt = Number.NEGATIVE_INFINITY;
19
+ return {
20
+ shouldSkipDelay: () => active !== null || Date.now() - closedAt < skipDelayDuration,
21
+ open: (close) => {
22
+ active = close;
23
+ },
24
+ closeActive: (event) => active?.(event),
25
+ release: (close) => {
26
+ if (active !== close) return;
27
+ active = null;
28
+ closedAt = Date.now();
29
+ }
30
+ };
31
+ };
32
+ const themeGroups = /* @__PURE__ */ new WeakMap();
33
+ const getThemeTooltipGroup = (theme, skipDelayDuration) => {
34
+ const byDuration = themeGroups.get(theme) ?? /* @__PURE__ */ new Map();
35
+ themeGroups.set(theme, byDuration);
36
+ const group = byDuration.get(skipDelayDuration) ?? createTooltipGroupState(skipDelayDuration);
37
+ byDuration.set(skipDelayDuration, group);
38
+ return group;
39
+ };
40
+ // src/Tooltip/hooks/useTooltip.ts
41
+ const isKeyboardFocus = (event) => {
42
+ try {
43
+ return event.target.matches(":focus-visible");
44
+ } catch {
45
+ return true;
46
+ }
47
+ };
48
+ /**
49
+ * The state of a tooltip: whether it is open (its own, or its owner's), the timers that open and
50
+ * close it, and the handlers its child and the tooltip itself take. Opening and closing are
51
+ * delayed; moving from the child onto the tooltip does not close it, so its text can be read and
52
+ * selected (WCAG 1.4.13); Escape closes it at once.
53
+ */
54
+ function useTooltip({ isOpen: isOpenProp, defaultOpen, isAtPoint = false, onOpen, onClose, enterDelay, leaveDelay, enterTouchDelay, leaveTouchDelay, shouldOpenOnHover, shouldOpenOnFocus, shouldOpenOnTouch, skipDelayDuration = 0 }) {
55
+ const [isOpen, setIsOpen] = require_useControlled.useControlled({
56
+ controlled: isOpenProp,
57
+ default: defaultOpen
58
+ });
59
+ const timer = (0, react.useRef)(void 0);
60
+ const theme = require_theme.useTheme();
61
+ const group = (0, react.useContext)(TooltipGroupContext) ?? (skipDelayDuration > 0 ? getThemeTooltipGroup(theme, skipDelayDuration) : null);
62
+ const latest = (0, react.useRef)({
63
+ isOpen,
64
+ isOpenProp,
65
+ isAtPoint,
66
+ onOpen,
67
+ onClose,
68
+ group
69
+ });
70
+ (0, react.useEffect)(() => {
71
+ latest.current = {
72
+ isOpen,
73
+ isOpenProp,
74
+ isAtPoint,
75
+ onOpen,
76
+ onClose,
77
+ group
78
+ };
79
+ });
80
+ const clear = (0, react.useCallback)(() => window.clearTimeout(timer.current), []);
81
+ const closeNow = (0, react.useCallback)((event) => {
82
+ clear();
83
+ const current = latest.current;
84
+ setIsOpen(false);
85
+ current.onClose?.(event);
86
+ }, [clear, setIsOpen]);
87
+ const isInGroup = group !== null && isOpenProp === void 0;
88
+ (0, react.useEffect)(() => {
89
+ if (!isInGroup || !isOpen) return void 0;
90
+ group.open(closeNow);
91
+ return () => group.release(closeNow);
92
+ }, [
93
+ group,
94
+ isInGroup,
95
+ isOpen,
96
+ closeNow
97
+ ]);
98
+ const getEnterDelay = () => isInGroup && group.shouldSkipDelay() ? 0 : enterDelay;
99
+ const ask = (0, react.useCallback)((next, event, delay) => {
100
+ clear();
101
+ timer.current = window.setTimeout(() => {
102
+ const current = latest.current;
103
+ if (current.isOpen === next) return;
104
+ if (next && current.isAtPoint) return;
105
+ if (current.isOpenProp === void 0) {
106
+ if (next) current.group?.closeActive(event);
107
+ else current.group?.release(closeNow);
108
+ setIsOpen(next);
109
+ }
110
+ (next ? current.onOpen : current.onClose)?.(event);
111
+ }, delay);
112
+ }, [
113
+ clear,
114
+ setIsOpen,
115
+ closeNow
116
+ ]);
117
+ (0, react.useEffect)(() => clear, [clear]);
118
+ (0, react.useEffect)(() => {
119
+ if (!isOpen) return void 0;
120
+ const handleKeyDown = (event) => {
121
+ if (event.key === "Escape") ask(false, event, 0);
122
+ };
123
+ document.addEventListener("keydown", handleKeyDown);
124
+ return () => document.removeEventListener("keydown", handleKeyDown);
125
+ }, [isOpen, ask]);
126
+ return {
127
+ isOpen,
128
+ childHandlers: {
129
+ onMouseEnter: (event) => {
130
+ if (shouldOpenOnHover) ask(true, event, getEnterDelay());
131
+ },
132
+ onMouseLeave: (event) => {
133
+ if (shouldOpenOnHover) ask(false, event, leaveDelay);
134
+ },
135
+ onFocus: (event) => {
136
+ if (shouldOpenOnFocus && isKeyboardFocus(event)) ask(true, event, getEnterDelay());
137
+ },
138
+ onBlur: (event) => {
139
+ if (shouldOpenOnFocus) ask(false, event, leaveDelay);
140
+ },
141
+ onTouchStart: (event) => {
142
+ if (shouldOpenOnTouch) ask(true, event, enterTouchDelay);
143
+ },
144
+ onTouchEnd: (event) => {
145
+ if (shouldOpenOnTouch) ask(false, event, leaveTouchDelay);
146
+ },
147
+ onTouchCancel: (event) => {
148
+ if (shouldOpenOnTouch) ask(false, event, leaveTouchDelay);
149
+ },
150
+ onPointerDown: (event) => {
151
+ if (event.pointerType !== "touch") ask(false, event, 0);
152
+ }
153
+ },
154
+ surfaceHandlers: {
155
+ onMouseEnter: () => {
156
+ if (shouldOpenOnHover) clear();
157
+ },
158
+ onMouseLeave: (event) => {
159
+ if (shouldOpenOnHover) ask(false, event, leaveDelay);
160
+ }
161
+ }
162
+ };
163
+ }
164
+ // src/Tooltip/Tooltip.tsx
165
+ const MARGIN = 8;
166
+ const GAP = 8;
167
+ const ARROW = 8;
168
+ const TooltipSurface = require_src.styled("div", {
169
+ name: "Tooltip",
170
+ label: "Tooltip",
171
+ shouldForwardProp: (0, _soroush_tech_styled_system_should_forward_prop.createShouldForwardProp)([
172
+ "layer",
173
+ "isInteractive",
174
+ "borderRadius",
175
+ "bg",
176
+ "textColor"
177
+ ])
178
+ })(({ theme, layer, isInteractive, borderRadius, bg, textColor }) => ({
179
+ position: "fixed",
180
+ ...!isInteractive && { pointerEvents: "none" },
181
+ top: 0,
182
+ left: 0,
183
+ visibility: "hidden",
184
+ zIndex: theme.zOrder[layer],
185
+ boxSizing: "border-box",
186
+ maxWidth: "20rem",
187
+ padding: `${theme.space[.5]} ${theme.space[1]}`,
188
+ borderRadius: require_getSurfaceRadius.getSurfaceRadius(theme, borderRadius),
189
+ boxShadow: theme.shadows[4],
190
+ backgroundColor: (0, require_src.src_exports.get)(theme, `background.${bg ?? "modal"}`),
191
+ color: (0, require_src.src_exports.get)(theme, `text.${textColor ?? require_themeDefault.themeDefault(theme, "textColor", "initial")}`),
192
+ fontFamily: (0, require_src.src_exports.get)(theme, "fonts.body"),
193
+ fontSize: theme.fontSizes[0],
194
+ lineHeight: (0, require_src.src_exports.get)(theme, "lineHeights.base"),
195
+ overflowWrap: "break-word"
196
+ }));
197
+ const TooltipDescription = require_src.styled("span", { label: "TooltipDescription" })({
198
+ position: "absolute",
199
+ width: 1,
200
+ height: 1,
201
+ margin: -1,
202
+ padding: 0,
203
+ border: 0,
204
+ overflow: "hidden",
205
+ clip: "rect(0 0 0 0)",
206
+ whiteSpace: "nowrap"
207
+ });
208
+ const TooltipTarget = require_src.styled("span", { label: "TooltipTarget" })({ display: "inline-grid" });
209
+ const TooltipArrow = require_src.styled("span", {
210
+ name: "Tooltip",
211
+ slot: "arrow",
212
+ label: "TooltipArrow"
213
+ })({
214
+ position: "absolute",
215
+ width: ARROW,
216
+ height: ARROW,
217
+ backgroundColor: "inherit",
218
+ transform: "rotate(45deg)",
219
+ pointerEvents: "none"
220
+ });
221
+ const getArrow = ({ anchorRect, surfaceSize, top, left }) => {
222
+ const { width, height } = surfaceSize;
223
+ if (top + height <= anchorRect.top + 1 || top >= anchorRect.bottom - 1) {
224
+ const side = top + height <= anchorRect.top + 1 ? "top" : "bottom";
225
+ const middle = anchorRect.left + anchorRect.width / 2 - left;
226
+ return {
227
+ side,
228
+ offset: Math.min(Math.max(middle, ARROW), width - ARROW)
229
+ };
230
+ }
231
+ const side = left + width <= anchorRect.left + 1 ? "left" : "right";
232
+ const middle = anchorRect.top + anchorRect.height / 2 - top;
233
+ return {
234
+ side,
235
+ offset: Math.min(Math.max(middle, ARROW), height - ARROW)
236
+ };
237
+ };
238
+ const isSameArrow = (a, b) => a !== null && a.side === b.side && a.offset === b.offset;
239
+ const getArrowStyle = ({ side, offset }) => {
240
+ const half = ARROW / 2;
241
+ if (side === "top") return {
242
+ bottom: -4,
243
+ left: offset - half
244
+ };
245
+ if (side === "bottom") return {
246
+ top: -4,
247
+ left: offset - half
248
+ };
249
+ if (side === "left") return {
250
+ right: -4,
251
+ top: offset - half
252
+ };
253
+ return {
254
+ left: -4,
255
+ top: offset - half
256
+ };
257
+ };
258
+ const mergeForwarded = (own, forwarded) => Object.fromEntries(Object.entries(forwarded).filter(([, value]) => value !== void 0).map(([name, value]) => {
259
+ const current = own[name];
260
+ if (typeof value === "function" && typeof current === "function") return [name, (...args) => {
261
+ current(...args);
262
+ value(...args);
263
+ }];
264
+ if (name === "aria-describedby" && typeof current === "string" && current) return [name, `${current} ${String(value)}`];
265
+ return [name, value];
266
+ }));
267
+ const getChildName = (title, own) => {
268
+ const isHidden = own["aria-hidden"] === true || own["aria-hidden"] === "true";
269
+ const isNamed = Boolean(own["aria-label"] || own["aria-labelledby"]);
270
+ return typeof title === "string" && !isHidden && !isNamed ? { "aria-label": title } : {};
271
+ };
272
+ /**
273
+ * @description A short description of one child, shown on hover, keyboard focus and a long touch -
274
+ * a `role="tooltip"` in a `Portal`, placed beside its child and flipped for want of room. The
275
+ * child is named by it (`aria-label`) or described by it (`aria-describedby`, with
276
+ * `shouldDescribeChild`). It opens and closes after their delays, stays open while the pointer is
277
+ * on the tooltip itself, closes on Escape, and never takes or traps the focus.
278
+ */
279
+ 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 }) {
280
+ const dp = require_theme.useDefaultProps("Tooltip");
281
+ const placement = placementProp ?? dp.placement ?? "top";
282
+ const hasArrow = hasArrowProp ?? dp.hasArrow ?? false;
283
+ const shouldDescribeChild = shouldDescribeChildProp ?? dp.shouldDescribeChild ?? false;
284
+ const isDescriptionPersistent = isDescriptionPersistentProp ?? dp.isDescriptionPersistent ?? false;
285
+ const isInteractive = isInteractiveProp ?? dp.isInteractive ?? true;
286
+ const shouldWrapDisabledChild = shouldWrapDisabledChildProp ?? dp.shouldWrapDisabledChild ?? true;
287
+ const layer = layerProp ?? dp.layer ?? "tooltip";
288
+ const borderRadius = borderRadiusProp ?? dp.borderRadius;
289
+ const bg = bgProp ?? dp.bg;
290
+ const textColor = textColorProp ?? dp.textColor;
291
+ const id = (0, react.useId)();
292
+ const isAtPoint = anchorPosition !== void 0;
293
+ const { isOpen, childHandlers, surfaceHandlers } = useTooltip({
294
+ isOpen: isOpenProp,
295
+ defaultOpen,
296
+ isAtPoint,
297
+ onOpen,
298
+ onClose,
299
+ enterDelay: enterDelayProp ?? dp.enterDelay ?? 100,
300
+ leaveDelay: leaveDelayProp ?? dp.leaveDelay ?? 0,
301
+ enterTouchDelay: enterTouchDelayProp ?? dp.enterTouchDelay ?? 700,
302
+ leaveTouchDelay: leaveTouchDelayProp ?? dp.leaveTouchDelay ?? 1500,
303
+ shouldOpenOnHover: shouldOpenOnHoverProp ?? dp.shouldOpenOnHover ?? true,
304
+ shouldOpenOnFocus: shouldOpenOnFocusProp ?? dp.shouldOpenOnFocus ?? true,
305
+ shouldOpenOnTouch: shouldOpenOnTouchProp ?? dp.shouldOpenOnTouch ?? true,
306
+ skipDelayDuration: dp.skipDelayDuration
307
+ });
308
+ const hasTitle = title !== void 0 && title !== null && title !== "";
309
+ const isShown = isOpen && hasTitle;
310
+ const anchorRef = (0, react.useRef)(null);
311
+ const noAnchorRef = (0, react.useRef)(null);
312
+ const surfaceRef = (0, react.useRef)(null);
313
+ const childProps = children?.props ?? {};
314
+ const forwardedProps = mergeForwarded(childProps, forwarded);
315
+ const own = {
316
+ ...childProps,
317
+ ...forwardedProps
318
+ };
319
+ const isChildDisabled = shouldWrapDisabledChild && own.disabled === true;
320
+ const childRef = require_useMergedRefs.useMergedRefs(childProps.ref, forwardedRef);
321
+ const ref = require_useMergedRefs.useMergedRefs(isChildDisabled ? void 0 : anchorRef, childRef);
322
+ const [arrow, setArrow] = (0, react.useState)(null);
323
+ const getOrigins = (0, react.useCallback)((context) => require_getTooltipOrigins.getTooltipOrigins(require_getTooltipOrigins.resolveTooltipPlacement(placement, context), context.isRtl), [placement]);
324
+ const onPlaced = (0, react.useCallback)((placed) => {
325
+ if (!hasArrow) return;
326
+ const next = getArrow(placed);
327
+ setArrow((current) => isSameArrow(current, next) ? current : next);
328
+ }, [hasArrow]);
329
+ require_useAnchoredPlacement.useAnchoredPlacement({
330
+ isOpen: isShown,
331
+ anchorRef: anchorPosition ? noAnchorRef : anchorRef,
332
+ anchorPosition,
333
+ surfaceRef,
334
+ getOrigins,
335
+ margin: MARGIN,
336
+ gap: GAP,
337
+ onPlaced
338
+ });
339
+ const handlers = Object.fromEntries(Object.entries(childHandlers).map(([name, handler]) => [name, (event) => {
340
+ own[name]?.(event);
341
+ handler(event);
342
+ }]));
343
+ const ownDescription = own["aria-describedby"];
344
+ const names = getChildName(title, own);
345
+ const descriptionId = `${id}-description`;
346
+ const hasPersistentDescription = children !== void 0 && shouldDescribeChild && isDescriptionPersistent && hasTitle;
347
+ const describedBy = (shown) => hasPersistentDescription ? [ownDescription, descriptionId].filter(Boolean).join(" ") : [ownDescription, shown ? id : void 0].filter(Boolean).join(" ") || void 0;
348
+ const ariaProps = shouldDescribeChild ? { "aria-describedby": describedBy(isShown) } : names;
349
+ const child = children ? (0, react.cloneElement)(children, {
350
+ ...forwardedProps,
351
+ ...isChildDisabled || isAtPoint ? {} : handlers,
352
+ ...ariaProps,
353
+ ref
354
+ }) : null;
355
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
356
+ isChildDisabled && !isAtPoint ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TooltipTarget, {
357
+ ref: anchorRef,
358
+ ...handlers,
359
+ children: child
360
+ }) : child,
361
+ hasPersistentDescription && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TooltipDescription, {
362
+ id: descriptionId,
363
+ children: title
364
+ }),
365
+ isShown && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Portal.Portal, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(TooltipSurface, {
366
+ ...slotProps?.root,
367
+ as: slots?.root,
368
+ ref: surfaceRef,
369
+ id,
370
+ role: "tooltip",
371
+ layer,
372
+ isInteractive,
373
+ borderRadius,
374
+ bg,
375
+ textColor,
376
+ className: [slotProps?.root?.className, className].filter(Boolean).join(" ") || void 0,
377
+ "data-testid": dataTestid ?? slotProps?.root?.["data-testid"],
378
+ ...isAtPoint || !isInteractive ? {} : surfaceHandlers,
379
+ children: [title, hasArrow && arrow ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TooltipArrow, {
380
+ ...slotProps?.arrow,
381
+ as: slots?.arrow,
382
+ style: {
383
+ ...slotProps?.arrow?.style,
384
+ ...getArrowStyle(arrow)
385
+ },
386
+ "aria-hidden": "true"
387
+ }) : null]
388
+ }) })
389
+ ] });
390
+ }
391
+ // src/Tooltip/TooltipGroup.tsx
392
+ /**
393
+ * Lets the tooltips inside it open at once, with no enter delay, when the pointer or the focus
394
+ * moves to the next one just after another closed - a toolbar or a rail read from one icon to the
395
+ * next. It renders nothing of its own. Tooltips outside a group are unchanged, a touch keeps its
396
+ * own delay, and a tooltip whose `isOpen` the app controls is left alone: the group neither opens
397
+ * nor closes it, and it does not start the window.
398
+ */
399
+ function TooltipGroup({ children, skipDelayDuration = 300 }) {
400
+ const state = (0, react.useMemo)(() => createTooltipGroupState(skipDelayDuration), [skipDelayDuration]);
401
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TooltipGroupContext.Provider, {
402
+ value: state,
403
+ children
404
+ });
405
+ }
406
+ Object.defineProperty(exports, "Tooltip", {
407
+ enumerable: true,
408
+ get: function() {
409
+ return Tooltip;
410
+ }
411
+ });
412
+ Object.defineProperty(exports, "TooltipGroup", {
413
+ enumerable: true,
414
+ get: function() {
415
+ return TooltipGroup;
416
+ }
417
+ });