@proyecto-viviana/solidaria-components 0.5.0 → 0.7.0-rc.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 (561) hide show
  1. package/LICENSE-APACHE-2.0 +201 -0
  2. package/NOTICE +91 -0
  3. package/README.md +4 -7
  4. package/dist/ActionBar.d.ts +2 -10
  5. package/dist/ActionBar.d.ts.map +1 -1
  6. package/dist/ActionBar.js +95 -59
  7. package/dist/ActionBar.js.map +1 -1
  8. package/dist/ActionBar.jsx +42 -15
  9. package/dist/ActionBar.jsx.map +1 -1
  10. package/dist/ActionGroup.d.ts +1 -12
  11. package/dist/ActionGroup.d.ts.map +1 -1
  12. package/dist/ActionGroup.js +66 -44
  13. package/dist/ActionGroup.js.map +1 -1
  14. package/dist/ActionGroup.jsx +25 -10
  15. package/dist/ActionGroup.jsx.map +1 -1
  16. package/dist/Alert.d.ts +4 -1
  17. package/dist/Alert.d.ts.map +1 -1
  18. package/dist/Alert.js +25 -17
  19. package/dist/Alert.js.map +1 -1
  20. package/dist/Alert.jsx +9 -5
  21. package/dist/Alert.jsx.map +1 -1
  22. package/dist/Autocomplete.d.ts +2 -9
  23. package/dist/Autocomplete.d.ts.map +1 -1
  24. package/dist/Autocomplete.js +18 -5
  25. package/dist/Autocomplete.js.map +1 -1
  26. package/dist/Autocomplete.jsx +20 -7
  27. package/dist/Autocomplete.jsx.map +1 -1
  28. package/dist/Breadcrumbs.d.ts +2 -7
  29. package/dist/Breadcrumbs.d.ts.map +1 -1
  30. package/dist/Breadcrumbs.js +71 -51
  31. package/dist/Breadcrumbs.js.map +1 -1
  32. package/dist/Breadcrumbs.jsx +25 -12
  33. package/dist/Breadcrumbs.jsx.map +1 -1
  34. package/dist/Button.d.ts +1 -7
  35. package/dist/Button.d.ts.map +1 -1
  36. package/dist/Button.js +125 -72
  37. package/dist/Button.js.map +1 -1
  38. package/dist/Button.jsx +105 -43
  39. package/dist/Button.jsx.map +1 -1
  40. package/dist/Calendar.d.ts +1 -7
  41. package/dist/Calendar.d.ts.map +1 -1
  42. package/dist/Calendar.js +297 -221
  43. package/dist/Calendar.js.map +1 -1
  44. package/dist/Calendar.jsx +52 -32
  45. package/dist/Calendar.jsx.map +1 -1
  46. package/dist/CalendarPicker.d.ts +1 -10
  47. package/dist/CalendarPicker.d.ts.map +1 -1
  48. package/dist/CalendarPicker.js +12 -0
  49. package/dist/CalendarPicker.js.map +1 -1
  50. package/dist/CalendarPicker.jsx +12 -0
  51. package/dist/CalendarPicker.jsx.map +1 -1
  52. package/dist/Checkbox.d.ts +2 -7
  53. package/dist/Checkbox.d.ts.map +1 -1
  54. package/dist/Checkbox.js +332 -270
  55. package/dist/Checkbox.js.map +1 -1
  56. package/dist/Checkbox.jsx +70 -77
  57. package/dist/Checkbox.jsx.map +1 -1
  58. package/dist/Collection.d.ts +33 -7
  59. package/dist/Collection.d.ts.map +1 -1
  60. package/dist/Collection.js +128 -74
  61. package/dist/Collection.js.map +1 -1
  62. package/dist/Collection.jsx +46 -7
  63. package/dist/Collection.jsx.map +1 -1
  64. package/dist/Color.d.ts +15 -20
  65. package/dist/Color.d.ts.map +1 -1
  66. package/dist/Color.js +572 -334
  67. package/dist/Color.js.map +1 -1
  68. package/dist/Color.jsx +205 -85
  69. package/dist/Color.jsx.map +1 -1
  70. package/dist/ColorEditor.d.ts +3 -1
  71. package/dist/ColorEditor.d.ts.map +1 -1
  72. package/dist/ColorEditor.js +147 -124
  73. package/dist/ColorEditor.js.map +1 -1
  74. package/dist/ColorEditor.jsx +4 -1
  75. package/dist/ColorEditor.jsx.map +1 -1
  76. package/dist/ComboBox.d.ts +31 -10
  77. package/dist/ComboBox.d.ts.map +1 -1
  78. package/dist/ComboBox.js +539 -274
  79. package/dist/ComboBox.js.map +1 -1
  80. package/dist/ComboBox.jsx +213 -70
  81. package/dist/ComboBox.jsx.map +1 -1
  82. package/dist/ContextualHelpTrigger.d.ts +1 -7
  83. package/dist/ContextualHelpTrigger.d.ts.map +1 -1
  84. package/dist/ContextualHelpTrigger.js +102 -72
  85. package/dist/ContextualHelpTrigger.js.map +1 -1
  86. package/dist/ContextualHelpTrigger.jsx +36 -16
  87. package/dist/ContextualHelpTrigger.jsx.map +1 -1
  88. package/dist/DateField.d.ts +2 -7
  89. package/dist/DateField.d.ts.map +1 -1
  90. package/dist/DateField.js +0 -2
  91. package/dist/DateField.jsx +0 -2
  92. package/dist/DateField2.js +194 -179
  93. package/dist/DateField2.js.map +1 -1
  94. package/dist/DateField2.jsx +58 -55
  95. package/dist/DateField2.jsx.map +1 -1
  96. package/dist/DatePicker.d.ts +7 -7
  97. package/dist/DatePicker.d.ts.map +1 -1
  98. package/dist/DatePicker.js +2 -2
  99. package/dist/DatePicker.jsx +2 -2
  100. package/dist/DatePicker2.js +357 -435
  101. package/dist/DatePicker2.js.map +1 -1
  102. package/dist/DatePicker2.jsx +109 -178
  103. package/dist/DatePicker2.jsx.map +1 -1
  104. package/dist/DateRangePickerContext.d.ts +7 -0
  105. package/dist/DateRangePickerContext.d.ts.map +1 -1
  106. package/dist/Dialog.d.ts +4 -9
  107. package/dist/Dialog.d.ts.map +1 -1
  108. package/dist/Dialog.js +168 -101
  109. package/dist/Dialog.js.map +1 -1
  110. package/dist/Dialog.jsx +75 -27
  111. package/dist/Dialog.jsx.map +1 -1
  112. package/dist/Disclosure.d.ts +1 -9
  113. package/dist/Disclosure.d.ts.map +1 -1
  114. package/dist/Disclosure.js +121 -79
  115. package/dist/Disclosure.js.map +1 -1
  116. package/dist/Disclosure.jsx +32 -19
  117. package/dist/Disclosure.jsx.map +1 -1
  118. package/dist/DragAndDrop.d.ts +9 -6
  119. package/dist/DragAndDrop.d.ts.map +1 -1
  120. package/dist/DragAndDrop.js +37 -22
  121. package/dist/DragAndDrop.js.map +1 -1
  122. package/dist/DragAndDrop.jsx +20 -4
  123. package/dist/DragAndDrop.jsx.map +1 -1
  124. package/dist/DragPreview.d.ts +1 -1
  125. package/dist/DragPreview.d.ts.map +1 -1
  126. package/dist/DropZone.d.ts +1 -7
  127. package/dist/DropZone.d.ts.map +1 -1
  128. package/dist/DropZone.js +74 -40
  129. package/dist/DropZone.js.map +1 -1
  130. package/dist/DropZone.jsx +24 -8
  131. package/dist/DropZone.jsx.map +1 -1
  132. package/dist/ElementTag.d.ts +9 -20
  133. package/dist/ElementTag.d.ts.map +1 -1
  134. package/dist/ElementTag.js +8 -210
  135. package/dist/ElementTag.js.map +1 -1
  136. package/dist/ElementTag.jsx +8 -57
  137. package/dist/ElementTag.jsx.map +1 -1
  138. package/dist/FieldError.d.ts +8 -7
  139. package/dist/FieldError.d.ts.map +1 -1
  140. package/dist/FieldError.js +33 -13
  141. package/dist/FieldError.js.map +1 -1
  142. package/dist/FieldError.jsx +20 -5
  143. package/dist/FieldError.jsx.map +1 -1
  144. package/dist/FileTrigger.d.ts +1 -7
  145. package/dist/FileTrigger.d.ts.map +1 -1
  146. package/dist/FileTrigger.js +30 -12
  147. package/dist/FileTrigger.js.map +1 -1
  148. package/dist/FileTrigger.jsx +15 -2
  149. package/dist/FileTrigger.jsx.map +1 -1
  150. package/dist/Focusable.d.ts +2 -8
  151. package/dist/Focusable.d.ts.map +1 -1
  152. package/dist/Focusable.js +23 -6
  153. package/dist/Focusable.js.map +1 -1
  154. package/dist/Focusable.jsx +22 -5
  155. package/dist/Focusable.jsx.map +1 -1
  156. package/dist/Form.d.ts +9 -8
  157. package/dist/Form.d.ts.map +1 -1
  158. package/dist/Form.js +66 -43
  159. package/dist/Form.js.map +1 -1
  160. package/dist/Form.jsx +36 -16
  161. package/dist/Form.jsx.map +1 -1
  162. package/dist/GridList.d.ts +5 -10
  163. package/dist/GridList.d.ts.map +1 -1
  164. package/dist/GridList.js +372 -243
  165. package/dist/GridList.js.map +1 -1
  166. package/dist/GridList.jsx +177 -99
  167. package/dist/GridList.jsx.map +1 -1
  168. package/dist/HiddenDateInput.d.ts +1 -7
  169. package/dist/HiddenDateInput.d.ts.map +1 -1
  170. package/dist/Icon.d.ts +4 -1
  171. package/dist/Icon.d.ts.map +1 -1
  172. package/dist/Icon.js +41 -37
  173. package/dist/Icon.js.map +1 -1
  174. package/dist/Icon.jsx +7 -3
  175. package/dist/Icon.jsx.map +1 -1
  176. package/dist/Keyboard.d.ts +1 -7
  177. package/dist/Keyboard.d.ts.map +1 -1
  178. package/dist/Keyboard.js +24 -11
  179. package/dist/Keyboard.js.map +1 -1
  180. package/dist/Keyboard.jsx +15 -2
  181. package/dist/Keyboard.jsx.map +1 -1
  182. package/dist/Label.d.ts +20 -0
  183. package/dist/Label.d.ts.map +1 -0
  184. package/dist/Label.js +60 -0
  185. package/dist/Label.js.map +1 -0
  186. package/dist/Label.jsx +47 -0
  187. package/dist/Label.jsx.map +1 -0
  188. package/dist/Landmark.d.ts +4 -1
  189. package/dist/Landmark.d.ts.map +1 -1
  190. package/dist/Landmark.js +10 -4
  191. package/dist/Landmark.js.map +1 -1
  192. package/dist/Landmark.jsx +5 -1
  193. package/dist/Landmark.jsx.map +1 -1
  194. package/dist/Link.d.ts +2 -7
  195. package/dist/Link.d.ts.map +1 -1
  196. package/dist/Link.js +56 -36
  197. package/dist/Link.js.map +1 -1
  198. package/dist/Link.jsx +52 -10
  199. package/dist/Link.jsx.map +1 -1
  200. package/dist/ListBox.d.ts +17 -13
  201. package/dist/ListBox.d.ts.map +1 -1
  202. package/dist/ListBox.js +647 -348
  203. package/dist/ListBox.js.map +1 -1
  204. package/dist/ListBox.jsx +339 -236
  205. package/dist/ListBox.jsx.map +1 -1
  206. package/dist/ListDropTargetDelegate.d.ts +3 -0
  207. package/dist/ListDropTargetDelegate.d.ts.map +1 -1
  208. package/dist/Menu.d.ts +39 -30
  209. package/dist/Menu.d.ts.map +1 -1
  210. package/dist/Menu.js +547 -368
  211. package/dist/Menu.js.map +1 -1
  212. package/dist/Menu.jsx +328 -230
  213. package/dist/Menu.jsx.map +1 -1
  214. package/dist/Meter.d.ts +6 -13
  215. package/dist/Meter.d.ts.map +1 -1
  216. package/dist/Meter.js +55 -18
  217. package/dist/Meter.js.map +1 -1
  218. package/dist/Meter.jsx +33 -8
  219. package/dist/Meter.jsx.map +1 -1
  220. package/dist/Modal.d.ts +1 -7
  221. package/dist/Modal.d.ts.map +1 -1
  222. package/dist/Modal.js +104 -56
  223. package/dist/Modal.js.map +1 -1
  224. package/dist/Modal.jsx +68 -38
  225. package/dist/Modal.jsx.map +1 -1
  226. package/dist/NumberField.d.ts +4 -7
  227. package/dist/NumberField.d.ts.map +1 -1
  228. package/dist/NumberField.js +243 -124
  229. package/dist/NumberField.js.map +1 -1
  230. package/dist/NumberField.jsx +115 -26
  231. package/dist/NumberField.jsx.map +1 -1
  232. package/dist/Popover.d.ts +15 -7
  233. package/dist/Popover.d.ts.map +1 -1
  234. package/dist/Popover.js +370 -181
  235. package/dist/Popover.js.map +1 -1
  236. package/dist/Popover.jsx +215 -82
  237. package/dist/Popover.jsx.map +1 -1
  238. package/dist/Pressable.d.ts +2 -8
  239. package/dist/Pressable.d.ts.map +1 -1
  240. package/dist/Pressable.js +23 -6
  241. package/dist/Pressable.js.map +1 -1
  242. package/dist/Pressable.jsx +22 -5
  243. package/dist/Pressable.jsx.map +1 -1
  244. package/dist/PreviewTrigger.d.ts +24 -0
  245. package/dist/PreviewTrigger.d.ts.map +1 -0
  246. package/dist/PreviewTrigger.js +128 -0
  247. package/dist/PreviewTrigger.js.map +1 -0
  248. package/dist/PreviewTrigger.jsx +117 -0
  249. package/dist/PreviewTrigger.jsx.map +1 -0
  250. package/dist/ProgressBar.d.ts +1 -7
  251. package/dist/ProgressBar.d.ts.map +1 -1
  252. package/dist/ProgressBar.js +34 -14
  253. package/dist/ProgressBar.js.map +1 -1
  254. package/dist/ProgressBar.jsx +17 -3
  255. package/dist/ProgressBar.jsx.map +1 -1
  256. package/dist/RadioGroup.d.ts +2 -7
  257. package/dist/RadioGroup.d.ts.map +1 -1
  258. package/dist/RadioGroup.js +388 -269
  259. package/dist/RadioGroup.js.map +1 -1
  260. package/dist/RadioGroup.jsx +110 -99
  261. package/dist/RadioGroup.jsx.map +1 -1
  262. package/dist/RangeCalendar.d.ts +3 -7
  263. package/dist/RangeCalendar.d.ts.map +1 -1
  264. package/dist/RangeCalendar.js +271 -202
  265. package/dist/RangeCalendar.js.map +1 -1
  266. package/dist/RangeCalendar.jsx +56 -37
  267. package/dist/RangeCalendar.jsx.map +1 -1
  268. package/dist/RouterProvider.d.ts +3 -9
  269. package/dist/RouterProvider.d.ts.map +1 -1
  270. package/dist/RouterProvider.js +15 -14
  271. package/dist/RouterProvider.js.map +1 -1
  272. package/dist/RouterProvider.jsx +14 -13
  273. package/dist/RouterProvider.jsx.map +1 -1
  274. package/dist/SearchField.d.ts +4 -7
  275. package/dist/SearchField.d.ts.map +1 -1
  276. package/dist/SearchField.js +191 -164
  277. package/dist/SearchField.js.map +1 -1
  278. package/dist/SearchField.jsx +69 -62
  279. package/dist/SearchField.jsx.map +1 -1
  280. package/dist/Select.d.ts +5 -10
  281. package/dist/Select.d.ts.map +1 -1
  282. package/dist/Select.js +565 -359
  283. package/dist/Select.js.map +1 -1
  284. package/dist/Select.jsx +281 -161
  285. package/dist/Select.jsx.map +1 -1
  286. package/dist/SelectionIndicator.d.ts +1 -4
  287. package/dist/SelectionIndicator.d.ts.map +1 -1
  288. package/dist/SelectionIndicator.js +29 -13
  289. package/dist/SelectionIndicator.js.map +1 -1
  290. package/dist/SelectionIndicator.jsx +18 -4
  291. package/dist/SelectionIndicator.jsx.map +1 -1
  292. package/dist/Separator.d.ts +1 -7
  293. package/dist/Separator.d.ts.map +1 -1
  294. package/dist/Separator.js +22 -6
  295. package/dist/Separator.js.map +1 -1
  296. package/dist/Separator.jsx +16 -3
  297. package/dist/Separator.jsx.map +1 -1
  298. package/dist/SharedElementTransition.d.ts +1 -10
  299. package/dist/SharedElementTransition.d.ts.map +1 -1
  300. package/dist/SharedElementTransition.js +68 -40
  301. package/dist/SharedElementTransition.js.map +1 -1
  302. package/dist/SharedElementTransition.jsx +49 -25
  303. package/dist/SharedElementTransition.jsx.map +1 -1
  304. package/dist/Slider.d.ts +2 -8
  305. package/dist/Slider.d.ts.map +1 -1
  306. package/dist/Slider.js +155 -97
  307. package/dist/Slider.js.map +1 -1
  308. package/dist/Slider.jsx +25 -12
  309. package/dist/Slider.jsx.map +1 -1
  310. package/dist/StepList.d.ts +1 -7
  311. package/dist/StepList.d.ts.map +1 -1
  312. package/dist/StepList.js +112 -68
  313. package/dist/StepList.js.map +1 -1
  314. package/dist/StepList.jsx +58 -20
  315. package/dist/StepList.jsx.map +1 -1
  316. package/dist/Switch.d.ts +2 -9
  317. package/dist/Switch.d.ts.map +1 -1
  318. package/dist/Switch.js +164 -114
  319. package/dist/Switch.js.map +1 -1
  320. package/dist/Switch.jsx +26 -13
  321. package/dist/Switch.jsx.map +1 -1
  322. package/dist/Table.d.ts +2 -1
  323. package/dist/Table.d.ts.map +1 -1
  324. package/dist/Table.js +689 -592
  325. package/dist/Table.js.map +1 -1
  326. package/dist/Table.jsx +317 -237
  327. package/dist/Table.jsx.map +1 -1
  328. package/dist/Tabs.d.ts +2 -7
  329. package/dist/Tabs.d.ts.map +1 -1
  330. package/dist/Tabs.js +278 -293
  331. package/dist/Tabs.js.map +1 -1
  332. package/dist/Tabs.jsx +68 -66
  333. package/dist/Tabs.jsx.map +1 -1
  334. package/dist/TagGroup.d.ts +4 -11
  335. package/dist/TagGroup.d.ts.map +1 -1
  336. package/dist/TagGroup.js +153 -115
  337. package/dist/TagGroup.js.map +1 -1
  338. package/dist/TagGroup.jsx +37 -24
  339. package/dist/TagGroup.jsx.map +1 -1
  340. package/dist/Text.d.ts +3 -3
  341. package/dist/Text.d.ts.map +1 -1
  342. package/dist/Text.js +24 -7
  343. package/dist/Text.js.map +1 -1
  344. package/dist/Text.jsx +17 -5
  345. package/dist/Text.jsx.map +1 -1
  346. package/dist/TextField.d.ts +3 -16
  347. package/dist/TextField.d.ts.map +1 -1
  348. package/dist/TextField.js +104 -129
  349. package/dist/TextField.js.map +1 -1
  350. package/dist/TextField.jsx +76 -102
  351. package/dist/TextField.jsx.map +1 -1
  352. package/dist/TimeField.d.ts +2 -15
  353. package/dist/TimeField.d.ts.map +1 -1
  354. package/dist/TimeField.js +86 -102
  355. package/dist/TimeField.js.map +1 -1
  356. package/dist/TimeField.jsx +32 -49
  357. package/dist/TimeField.jsx.map +1 -1
  358. package/dist/Toast.d.ts +10 -13
  359. package/dist/Toast.d.ts.map +1 -1
  360. package/dist/Toast.js +209 -108
  361. package/dist/Toast.js.map +1 -1
  362. package/dist/Toast.jsx +127 -22
  363. package/dist/Toast.jsx.map +1 -1
  364. package/dist/ToggleButton.d.ts +1 -7
  365. package/dist/ToggleButton.d.ts.map +1 -1
  366. package/dist/ToggleButton.js +57 -35
  367. package/dist/ToggleButton.js.map +1 -1
  368. package/dist/ToggleButton.jsx +26 -12
  369. package/dist/ToggleButton.jsx.map +1 -1
  370. package/dist/ToggleButtonGroup.d.ts +1 -7
  371. package/dist/ToggleButtonGroup.d.ts.map +1 -1
  372. package/dist/ToggleButtonGroup.js +59 -44
  373. package/dist/ToggleButtonGroup.js.map +1 -1
  374. package/dist/ToggleButtonGroup.jsx +25 -12
  375. package/dist/ToggleButtonGroup.jsx.map +1 -1
  376. package/dist/TokenField.d.ts +52 -0
  377. package/dist/TokenField.d.ts.map +1 -0
  378. package/dist/TokenField.js +301 -0
  379. package/dist/TokenField.js.map +1 -0
  380. package/dist/TokenField.jsx +197 -0
  381. package/dist/TokenField.jsx.map +1 -0
  382. package/dist/Toolbar.d.ts +2 -7
  383. package/dist/Toolbar.d.ts.map +1 -1
  384. package/dist/Toolbar.js +35 -16
  385. package/dist/Toolbar.js.map +1 -1
  386. package/dist/Toolbar.jsx +15 -2
  387. package/dist/Toolbar.jsx.map +1 -1
  388. package/dist/Tooltip.d.ts +2 -7
  389. package/dist/Tooltip.d.ts.map +1 -1
  390. package/dist/Tooltip.js +105 -68
  391. package/dist/Tooltip.js.map +1 -1
  392. package/dist/Tooltip.jsx +60 -36
  393. package/dist/Tooltip.jsx.map +1 -1
  394. package/dist/Tree.d.ts +8 -11
  395. package/dist/Tree.d.ts.map +1 -1
  396. package/dist/Tree.js +486 -339
  397. package/dist/Tree.js.map +1 -1
  398. package/dist/Tree.jsx +155 -107
  399. package/dist/Tree.jsx.map +1 -1
  400. package/dist/Virtualizer.d.ts +39 -9
  401. package/dist/Virtualizer.d.ts.map +1 -1
  402. package/dist/Virtualizer.js +2 -2
  403. package/dist/Virtualizer.jsx +2 -2
  404. package/dist/Virtualizer2.js +491 -136
  405. package/dist/Virtualizer2.js.map +1 -1
  406. package/dist/Virtualizer2.jsx +455 -122
  407. package/dist/Virtualizer2.jsx.map +1 -1
  408. package/dist/VirtualizerLayouts.d.ts +55 -2
  409. package/dist/VirtualizerLayouts.d.ts.map +1 -1
  410. package/dist/VisuallyHidden.d.ts +4 -3
  411. package/dist/VisuallyHidden.d.ts.map +1 -1
  412. package/dist/VisuallyHidden.js +18 -11
  413. package/dist/VisuallyHidden.js.map +1 -1
  414. package/dist/VisuallyHidden.jsx +15 -9
  415. package/dist/VisuallyHidden.jsx.map +1 -1
  416. package/dist/contexts.d.ts +25 -0
  417. package/dist/contexts.d.ts.map +1 -1
  418. package/dist/contexts.js +3 -0
  419. package/dist/contexts.js.map +1 -1
  420. package/dist/contexts.jsx +3 -0
  421. package/dist/contexts.jsx.map +1 -1
  422. package/dist/index.d.ts +11 -9
  423. package/dist/index.d.ts.map +1 -1
  424. package/dist/index.js +14 -11
  425. package/dist/index.jsx +14 -11
  426. package/dist/intl/index.d.ts +16 -0
  427. package/dist/intl/index.d.ts.map +1 -0
  428. package/dist/intl.js +212 -0
  429. package/dist/intl.js.map +1 -0
  430. package/dist/intl.jsx +212 -0
  431. package/dist/intl.jsx.map +1 -0
  432. package/dist/useDragAndDrop.d.ts +4 -2
  433. package/dist/useDragAndDrop.d.ts.map +1 -1
  434. package/dist/useDragAndDrop2.js +39 -21
  435. package/dist/useDragAndDrop2.js.map +1 -1
  436. package/dist/useDragAndDrop2.jsx +39 -21
  437. package/dist/useDragAndDrop2.jsx.map +1 -1
  438. package/dist/utils.d.ts +28 -9
  439. package/dist/utils.d.ts.map +1 -1
  440. package/dist/utils.js +96 -24
  441. package/dist/utils.js.map +1 -1
  442. package/dist/utils.jsx +81 -24
  443. package/dist/utils.jsx.map +1 -1
  444. package/dist/virtualizer/Layout.d.ts +9 -0
  445. package/dist/virtualizer/Layout.d.ts.map +1 -1
  446. package/dist/virtualizer/Layout.js +23 -2
  447. package/dist/virtualizer/Layout.js.map +1 -1
  448. package/dist/virtualizer/Layout.jsx +23 -2
  449. package/dist/virtualizer/Layout.jsx.map +1 -1
  450. package/package.json +29 -10
  451. package/src/ActionBar.tsx +50 -24
  452. package/src/ActionGroup.tsx +31 -19
  453. package/src/Alert.tsx +10 -4
  454. package/src/Autocomplete.tsx +24 -15
  455. package/src/Breadcrumbs.tsx +32 -16
  456. package/src/Button.tsx +182 -67
  457. package/src/Calendar.tsx +65 -47
  458. package/src/CalendarPicker.tsx +16 -1
  459. package/src/Checkbox.tsx +84 -116
  460. package/src/Collection.tsx +84 -3
  461. package/src/Color.tsx +282 -104
  462. package/src/ColorEditor.tsx +5 -1
  463. package/src/ComboBox.tsx +384 -109
  464. package/src/ContextualHelpTrigger.tsx +47 -41
  465. package/src/DateField.tsx +74 -106
  466. package/src/DatePicker.tsx +156 -352
  467. package/src/DateRangePickerContext.tsx +8 -0
  468. package/src/Dialog.tsx +105 -38
  469. package/src/Disclosure.tsx +29 -19
  470. package/src/DragAndDrop.tsx +43 -8
  471. package/src/DragPreview.tsx +20 -1
  472. package/src/DropZone.tsx +32 -18
  473. package/src/ElementTag.tsx +14 -104
  474. package/src/FieldError.tsx +39 -7
  475. package/src/FileTrigger.tsx +18 -3
  476. package/src/Focusable.tsx +27 -6
  477. package/src/Form.tsx +57 -11
  478. package/src/GridList.tsx +233 -141
  479. package/src/HiddenDateInput.tsx +19 -3
  480. package/src/Icon.tsx +8 -2
  481. package/src/Keyboard.tsx +18 -2
  482. package/src/Label.tsx +77 -0
  483. package/src/Landmark.tsx +6 -1
  484. package/src/Link.tsx +65 -19
  485. package/src/ListBox.tsx +645 -468
  486. package/src/ListDropTargetDelegate.ts +4 -0
  487. package/src/Menu.tsx +512 -349
  488. package/src/Meter.tsx +42 -8
  489. package/src/Modal.tsx +85 -42
  490. package/src/NumberField.tsx +161 -48
  491. package/src/Popover.tsx +424 -148
  492. package/src/Pressable.tsx +27 -6
  493. package/src/PreviewTrigger.tsx +171 -0
  494. package/src/ProgressBar.tsx +25 -3
  495. package/src/RadioGroup.tsx +230 -161
  496. package/src/RangeCalendar.tsx +75 -63
  497. package/src/RouterProvider.tsx +24 -14
  498. package/src/SearchField.tsx +118 -121
  499. package/src/Select.tsx +454 -274
  500. package/src/SelectionIndicator.tsx +21 -3
  501. package/src/Separator.tsx +17 -1
  502. package/src/SharedElementTransition.tsx +115 -97
  503. package/src/Slider.tsx +35 -17
  504. package/src/StepList.tsx +71 -32
  505. package/src/Switch.tsx +45 -29
  506. package/src/Table.tsx +446 -380
  507. package/src/Tabs.tsx +132 -155
  508. package/src/TagGroup.tsx +53 -40
  509. package/src/Text.tsx +23 -6
  510. package/src/TextField.tsx +118 -159
  511. package/src/TimeField.tsx +34 -95
  512. package/src/Toast.tsx +141 -67
  513. package/src/ToggleButton.tsx +33 -15
  514. package/src/ToggleButtonGroup.tsx +27 -9
  515. package/src/TokenField.tsx +379 -0
  516. package/src/Toolbar.tsx +19 -9
  517. package/src/Tooltip.tsx +126 -84
  518. package/src/Tree.tsx +233 -173
  519. package/src/Virtualizer.tsx +400 -138
  520. package/src/VirtualizerLayouts.ts +211 -26
  521. package/src/VisuallyHidden.tsx +22 -8
  522. package/src/contexts.ts +13 -0
  523. package/src/index.ts +32 -11
  524. package/src/intl/ar-AE.json +6 -0
  525. package/src/intl/bg-BG.json +6 -0
  526. package/src/intl/cs-CZ.json +6 -0
  527. package/src/intl/da-DK.json +6 -0
  528. package/src/intl/de-DE.json +6 -0
  529. package/src/intl/el-GR.json +6 -0
  530. package/src/intl/en-US.json +6 -0
  531. package/src/intl/es-ES.json +6 -0
  532. package/src/intl/et-EE.json +6 -0
  533. package/src/intl/fi-FI.json +6 -0
  534. package/src/intl/fr-FR.json +6 -0
  535. package/src/intl/he-IL.json +6 -0
  536. package/src/intl/hr-HR.json +6 -0
  537. package/src/intl/hu-HU.json +6 -0
  538. package/src/intl/index.ts +125 -0
  539. package/src/intl/it-IT.json +6 -0
  540. package/src/intl/ja-JP.json +6 -0
  541. package/src/intl/ko-KR.json +6 -0
  542. package/src/intl/lt-LT.json +6 -0
  543. package/src/intl/lv-LV.json +6 -0
  544. package/src/intl/nb-NO.json +6 -0
  545. package/src/intl/nl-NL.json +6 -0
  546. package/src/intl/pl-PL.json +6 -0
  547. package/src/intl/pt-BR.json +6 -0
  548. package/src/intl/pt-PT.json +6 -0
  549. package/src/intl/ro-RO.json +6 -0
  550. package/src/intl/ru-RU.json +6 -0
  551. package/src/intl/sk-SK.json +6 -0
  552. package/src/intl/sl-SI.json +6 -0
  553. package/src/intl/sr-SP.json +6 -0
  554. package/src/intl/sv-SE.json +6 -0
  555. package/src/intl/tr-TR.json +6 -0
  556. package/src/intl/uk-UA.json +6 -0
  557. package/src/intl/zh-CN.json +6 -0
  558. package/src/intl/zh-TW.json +6 -0
  559. package/src/useDragAndDrop.ts +30 -32
  560. package/src/utils.tsx +124 -68
  561. package/src/virtualizer/Layout.ts +29 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.js","names":["JSX","ParentComponent","createContext","useContext","createMemo","createSignal","createEffect","onCleanup","Show","isServer","createTooltipTriggerState","TooltipTriggerState","TooltipTriggerProps","StateProps","createTooltip","createTooltipTrigger","AriaProps","OverlayContainer","RenderChildren","ClassNameOrFunction","StyleOrFunction","SlotProps","useRenderProps","filterDOMProps","TooltipRenderProps","isEntering","isExiting","placement","TooltipResolvedPlacement","TooltipPlacement","TooltipTriggerComponentProps","children","Element","containerPadding","crossOffset","shouldFlip","TooltipProps","id","class","style","isOpen","defaultOpen","offset","arrowSize","arrowBoundaryOffset","isDisabled","lang","dir","TooltipTriggerContextValue","state","tooltipProps","setTooltipId","triggerRef","HTMLElement","TooltipTriggerContext","TooltipContext","TooltipTriggerStateContext","TooltipTrigger","props","tooltipId","delay","closeDelay","onOpenChange","triggerProps","trigger","shouldCloseOnPress","context","processChildren","Array","isArray","rest","_$createComponent","TriggerWrapper","ref","el","Provider","value","HTMLAttributes","child","triggerElement","setTriggerElement","wrapperElement","setWrapperElement","HTMLSpanElement","getWrapperEventProps","Record","wrapperProps","eventPropNames","propName","handler","onPointerEnter","onMouseEnter","onPointerLeave","onMouseLeave","element","describedBy","setAttribute","removeAttribute","wrapper","targets","from","Set","filter","Boolean","listeners","EventListener","eventProps","const","eventName","listener","target","addEventListener","push","removeEventListener","getAttribute","handleRef","span","findElementChild","found","findVisibleChild","rect","getBoundingClientRect","width","height","resolveRef","elementChild","visibleChild","immediateChild","requestAnimationFrame","_el$","_$getNextElement","_tmpl$","_$use","_$spread","_$mergeProps","display","_$insert","_$runHydrationEvents","Tooltip","undefined","localState","exitState","setExitState","open","current","tooltipEl","setTooltipEl","HTMLDivElement","animations","getAnimations","length","canceled","Promise","all","map","a","finished","then","s","catch","shouldRender","when","TooltipContent","contextTooltipProps","onTooltipRef","tooltipRef","ariaTooltipProps","positionStyles","setPositionStyles","top","left","visibility","renderedPlacement","setRenderedPlacement","resolvePlacement","setIsEntering","anim","CSSTransition","cancel","values","renderProps","defaultClassName","updatePosition","triggerEl","triggerRect","tooltipWidth","offsetWidth","tooltipHeight","offsetHeight","viewportWidth","window","innerWidth","viewportHeight","innerHeight","maybeFlipPlacement","bottom","right","clamp","Math","floor","scrollY","scrollX","retryCount","maxRetries","pendingRaf","pendingTimeout","tryUpdatePosition","success","setTimeout","closeOnScroll","event","Event","Node","contains","HTMLInputElement","HTMLTextAreaElement","close","cancelAnimationFrame","clearTimeout","domProps","global","_ariaRef","cleanAriaProps","setRef","getDocumentDirection","documentLang","document","documentElement","navigatorLang","navigator","language","includes","_el$2","_tmpl$2","position","data-placement","data-entering","data-exiting","renderChildren","DOMRect","min","max"],"sources":["../src/Tooltip.tsx"],"sourcesContent":["/**\n * Tooltip component for solidaria-components\n *\n * A tooltip displays a description of an element on hover or focus.\n * Port of react-aria-components/src/Tooltip.tsx\n */\n\nimport {\n type JSX,\n type ParentComponent,\n createContext,\n useContext,\n createMemo,\n createSignal,\n createEffect,\n onCleanup,\n Show,\n} from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport {\n createTooltipTriggerState,\n type TooltipTriggerState,\n type TooltipTriggerProps as StateProps,\n} from \"@proyecto-viviana/solid-stately\";\nimport {\n createTooltip,\n createTooltipTrigger,\n type TooltipTriggerProps as AriaProps,\n OverlayContainer,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n} from \"./utils\";\n\nexport interface TooltipRenderProps {\n /** Whether the tooltip is currently entering (for animations). */\n isEntering: boolean;\n /** Whether the tooltip is currently exiting (for animations). */\n isExiting: boolean;\n /** The placement of the tooltip relative to the trigger. */\n placement: TooltipResolvedPlacement | null;\n}\n\nexport type TooltipPlacement = \"top\" | \"bottom\" | \"left\" | \"right\" | \"start\" | \"end\";\nexport type TooltipResolvedPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface TooltipTriggerComponentProps extends StateProps, AriaProps {\n /** The children of the tooltip trigger (trigger element and tooltip). */\n children: JSX.Element;\n /** The placement of the tooltip relative to the trigger. */\n placement?: TooltipPlacement;\n /** The placement padding between the tooltip and viewport edge. */\n containerPadding?: number;\n /** The additional offset along the cross axis. */\n crossOffset?: number;\n /** Whether the tooltip should flip when there is insufficient room. */\n shouldFlip?: boolean;\n}\n\nexport interface TooltipProps extends SlotProps {\n /** The element id. */\n id?: string;\n /** Custom aria-label for the tooltip. */\n \"aria-label\"?: string;\n /** ID of an element that labels the tooltip. */\n \"aria-labelledby\"?: string;\n /** ID of an element that describes the tooltip. */\n \"aria-describedby\"?: string;\n /** ID of an element that provides details for the tooltip. */\n \"aria-details\"?: string;\n /** The children of the tooltip. A function may be provided to receive render props. */\n children?: RenderChildren<TooltipRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TooltipRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TooltipRenderProps>;\n /** Whether the tooltip is open (controlled). */\n isOpen?: boolean;\n /** Whether the tooltip is open by default (uncontrolled). */\n defaultOpen?: boolean;\n /** The placement of the tooltip relative to the trigger. */\n placement?: TooltipPlacement;\n /** The placement padding between the tooltip and viewport edge. */\n containerPadding?: number;\n /** The additional offset along the cross axis. */\n crossOffset?: number;\n /** Whether the tooltip should flip when there is insufficient room. */\n shouldFlip?: boolean;\n /** The offset between the tooltip and trigger. */\n offset?: number;\n /** The arrow size used to keep the arrow overlapping the trigger. */\n arrowSize?: number;\n /** The padding between the arrow and tooltip edge. */\n arrowBoundaryOffset?: number;\n /** Whether the tooltip should be disabled. */\n isDisabled?: boolean;\n /** The element language. */\n lang?: string;\n /** The text direction. */\n dir?: \"ltr\" | \"rtl\";\n}\n\ninterface TooltipTriggerContextValue {\n state: TooltipTriggerState;\n tooltipProps: { readonly id: string };\n setTooltipId: (id: string | undefined) => void;\n triggerRef: () => HTMLElement | null | undefined;\n placement: () => TooltipPlacement | undefined;\n containerPadding: () => number | undefined;\n crossOffset: () => number | undefined;\n shouldFlip: () => boolean | undefined;\n isDisabled: () => boolean | undefined;\n}\n\nconst TooltipTriggerContext = createContext<TooltipTriggerContextValue | null>(null);\nexport const TooltipContext = TooltipTriggerContext;\nexport const TooltipTriggerStateContext = createContext<TooltipTriggerState | null>(null);\n\n/**\n * TooltipTrigger wraps around a trigger element and a Tooltip.\n * It handles opening and closing the Tooltip when the user hovers\n * over or focuses the trigger.\n *\n * @example\n * ```tsx\n * <TooltipTrigger>\n * <Button>Hover me</Button>\n * <Tooltip>This is a tooltip</Tooltip>\n * </TooltipTrigger>\n * ```\n */\nexport const TooltipTrigger: ParentComponent<TooltipTriggerComponentProps> = (props) => {\n let triggerRef: HTMLElement | null = null;\n const [tooltipId, setTooltipId] = createSignal<string | undefined>();\n\n const state = createTooltipTriggerState({\n get delay() {\n return props.delay;\n },\n get closeDelay() {\n return props.closeDelay;\n },\n get isOpen() {\n return props.isOpen;\n },\n get defaultOpen() {\n return props.defaultOpen;\n },\n get onOpenChange() {\n return props.onOpenChange;\n },\n });\n\n const { triggerProps, tooltipProps } = createTooltipTrigger(\n {\n get isDisabled() {\n return props.isDisabled;\n },\n get trigger() {\n return props.trigger;\n },\n get shouldCloseOnPress() {\n return props.shouldCloseOnPress;\n },\n get tooltipId() {\n return tooltipId();\n },\n },\n state,\n () => triggerRef,\n );\n\n const context: TooltipTriggerContextValue = {\n state,\n tooltipProps,\n setTooltipId,\n triggerRef: () => triggerRef,\n placement: () => props.placement,\n containerPadding: () => props.containerPadding,\n crossOffset: () => props.crossOffset,\n shouldFlip: () => props.shouldFlip,\n isDisabled: () => props.isDisabled,\n };\n\n const processChildren = () => {\n const children = props.children;\n if (Array.isArray(children)) {\n const [trigger, ...rest] = children;\n return (\n <>\n <TriggerWrapper\n triggerProps={triggerProps}\n ref={(el) => {\n triggerRef = el;\n }}\n >\n {trigger}\n </TriggerWrapper>\n {rest}\n </>\n );\n }\n return children;\n };\n\n return (\n <TooltipTriggerStateContext.Provider value={state}>\n <TooltipTriggerContext.Provider value={context}>\n {processChildren()}\n </TooltipTriggerContext.Provider>\n </TooltipTriggerStateContext.Provider>\n );\n};\n\n/**\n * Wrapper component that spreads trigger props onto its child\n */\nconst TriggerWrapper: ParentComponent<{\n triggerProps: JSX.HTMLAttributes<HTMLElement>;\n ref: (el: HTMLElement) => void;\n}> = (props) => {\n const child = () => props.children as JSX.Element;\n const [triggerElement, setTriggerElement] = createSignal<HTMLElement | null>(null);\n const [wrapperElement, setWrapperElement] = createSignal<HTMLSpanElement | null>(null);\n const getWrapperEventProps = () => {\n const triggerProps = props.triggerProps as Record<string, unknown>;\n const wrapperProps: Record<string, unknown> = {};\n const eventPropNames = [\n \"onFocus\",\n \"onBlur\",\n \"onPointerEnter\",\n \"onPointerLeave\",\n \"onPointerOver\",\n \"onPointerOut\",\n \"onMouseEnter\",\n \"onMouseLeave\",\n \"onTouchStart\",\n \"onPointerDown\",\n \"onKeyDown\",\n ];\n\n for (const propName of eventPropNames) {\n const handler = triggerProps[propName];\n if (typeof handler === \"function\") {\n wrapperProps[propName] = handler;\n }\n }\n\n if (!wrapperProps.onPointerEnter && typeof triggerProps.onMouseEnter === \"function\") {\n wrapperProps.onPointerEnter = triggerProps.onMouseEnter;\n }\n if (!wrapperProps.onPointerLeave && typeof triggerProps.onMouseLeave === \"function\") {\n wrapperProps.onPointerLeave = triggerProps.onMouseLeave;\n }\n\n return wrapperProps as JSX.HTMLAttributes<HTMLSpanElement>;\n };\n\n createEffect(() => {\n const element = triggerElement();\n if (!element) {\n return;\n }\n\n const triggerProps = props.triggerProps as Record<string, unknown>;\n const describedBy = triggerProps[\"aria-describedby\"] as string | undefined;\n if (describedBy) {\n element.setAttribute(\"aria-describedby\", describedBy);\n } else {\n element.removeAttribute(\"aria-describedby\");\n }\n\n const wrapper = wrapperElement();\n const targets = Array.from(new Set([element, wrapper].filter(Boolean))) as HTMLElement[];\n const listeners: Array<[HTMLElement, string, EventListener]> = [];\n const eventProps = [\n [\"onFocus\", \"focus\"],\n [\"onBlur\", \"blur\"],\n [\"onPointerEnter\", \"pointerenter\"],\n [\"onPointerLeave\", \"pointerleave\"],\n [\"onPointerOver\", \"pointerover\"],\n [\"onPointerOut\", \"pointerout\"],\n [\"onMouseEnter\", \"mouseenter\"],\n [\"onMouseLeave\", \"mouseleave\"],\n [\"onTouchStart\", \"touchstart\"],\n [\"onPointerDown\", \"pointerdown\"],\n [\"onKeyDown\", \"keydown\"],\n ] as const;\n\n for (const [propName, eventName] of eventProps) {\n let handler = triggerProps[propName];\n if (!handler && propName === \"onPointerEnter\") {\n handler = triggerProps.onMouseEnter;\n } else if (!handler && propName === \"onPointerLeave\") {\n handler = triggerProps.onMouseLeave;\n }\n if (typeof handler === \"function\") {\n const listener = handler as EventListener;\n for (const target of targets) {\n target.addEventListener(eventName, listener);\n listeners.push([target, eventName, listener]);\n }\n }\n }\n\n onCleanup(() => {\n for (const [target, eventName, listener] of listeners) {\n target.removeEventListener(eventName, listener);\n }\n if (describedBy && element.getAttribute(\"aria-describedby\") === describedBy) {\n element.removeAttribute(\"aria-describedby\");\n }\n });\n });\n\n // We wrap in a span with display:contents to not affect layout.\n // However, display:contents makes getBoundingClientRect return zeros,\n // so we pass a ref callback that finds the first actual element child.\n const handleRef = (span: HTMLSpanElement) => {\n setWrapperElement(span);\n\n const findElementChild = (el: Element): HTMLElement | null => {\n for (const child of el.children) {\n if (child instanceof HTMLElement) {\n return child;\n }\n const found = findElementChild(child);\n if (found) return found;\n }\n return null;\n };\n\n // Find the first element child that has dimensions (not display:contents)\n const findVisibleChild = (el: Element): HTMLElement | null => {\n if (el instanceof HTMLElement) {\n const rect = el.getBoundingClientRect();\n if (rect.width > 0 && rect.height > 0) {\n return el;\n }\n for (const child of el.children) {\n const found = findVisibleChild(child);\n if (found) return found;\n }\n }\n return null;\n };\n\n // Use requestAnimationFrame to ensure children are rendered and have dimensions\n // This is necessary because SolidJS may not have computed child layout yet\n const resolveRef = () => {\n const elementChild = findElementChild(span);\n const visibleChild = findVisibleChild(span);\n setTriggerElement(elementChild ?? visibleChild ?? span);\n props.ref(visibleChild ?? elementChild ?? span);\n };\n\n const elementChild = findElementChild(span);\n if (elementChild) {\n setTriggerElement(elementChild);\n }\n\n const immediateChild = findVisibleChild(span);\n if (immediateChild) {\n setTriggerElement(elementChild ?? immediateChild);\n props.ref(immediateChild);\n } else {\n requestAnimationFrame(resolveRef);\n }\n };\n\n return (\n <span {...getWrapperEventProps()} ref={handleRef} style={{ display: \"contents\" }}>\n {child()}\n </span>\n );\n};\n\n/**\n * A tooltip displays a description of an element on hover or focus.\n *\n * @example\n * ```tsx\n * <TooltipTrigger>\n * <Button>Hover me</Button>\n * <Tooltip>This is helpful information</Tooltip>\n * </TooltipTrigger>\n * ```\n */\nexport function Tooltip(props: TooltipProps): JSX.Element {\n const context = useContext(TooltipTriggerContext);\n\n createEffect(() => {\n context?.setTooltipId(props.id);\n onCleanup(() => {\n context?.setTooltipId(undefined);\n });\n });\n\n const localState = createTooltipTriggerState({\n get isOpen() {\n return props.isOpen;\n },\n get defaultOpen() {\n return props.defaultOpen;\n },\n });\n\n const state = () => context?.state ?? localState;\n const placement = () => props.placement ?? context?.placement() ?? \"top\";\n const containerPadding = () => props.containerPadding ?? context?.containerPadding() ?? 12;\n const crossOffset = () => props.crossOffset ?? context?.crossOffset() ?? 0;\n const shouldFlip = () => props.shouldFlip ?? context?.shouldFlip() ?? true;\n const offset = () => props.offset ?? 9;\n const arrowSize = () => props.arrowSize ?? 0;\n const arrowBoundaryOffset = () => props.arrowBoundaryOffset ?? 0;\n const isDisabled = () => props.isDisabled ?? context?.isDisabled() ?? false;\n\n const isOpen = () => !isDisabled() && state().isOpen();\n\n // Exit animation state machine: 'closed' | 'open' | 'exiting'\n // Keeps the tooltip mounted during exit animation so CSS transitions can play.\n const [exitState, setExitState] = createSignal<\"closed\" | \"open\" | \"exiting\">(\n isOpen() ? \"open\" : \"closed\",\n );\n\n createEffect(() => {\n const open = isOpen();\n const current = exitState();\n if (current === \"open\" && !open) {\n setExitState(\"exiting\");\n } else if ((current === \"closed\" || current === \"exiting\") && open) {\n setExitState(\"open\");\n }\n });\n\n // Signal for the tooltip ref so we can observe exit animations\n const [tooltipEl, setTooltipEl] = createSignal<HTMLDivElement | null>(null);\n\n // When exiting, wait for CSS animations to finish, then set state to closed\n createEffect(() => {\n if (exitState() !== \"exiting\") return;\n const el = tooltipEl();\n if (!el || !(\"getAnimations\" in el)) {\n setExitState(\"closed\");\n return;\n }\n const animations = el.getAnimations();\n if (animations.length === 0) {\n setExitState(\"closed\");\n return;\n }\n let canceled = false;\n Promise.all(animations.map((a) => a.finished))\n .then(() => {\n if (!canceled) setExitState((s) => (s === \"exiting\" ? \"closed\" : s));\n })\n .catch(() => {\n if (!canceled) setExitState((s) => (s === \"exiting\" ? \"closed\" : s));\n });\n onCleanup(() => {\n canceled = true;\n });\n });\n\n const shouldRender = () => isOpen() || exitState() === \"exiting\";\n const isExiting = () => exitState() === \"exiting\";\n\n return (\n <Show when={shouldRender()}>\n <TooltipContent\n {...props}\n state={state()}\n contextTooltipProps={context?.tooltipProps ?? {}}\n placement={placement()}\n containerPadding={containerPadding()}\n crossOffset={crossOffset()}\n shouldFlip={shouldFlip()}\n offset={offset()}\n arrowSize={arrowSize()}\n arrowBoundaryOffset={arrowBoundaryOffset()}\n triggerRef={context?.triggerRef ?? (() => null)}\n isExiting={isExiting()}\n onTooltipRef={setTooltipEl}\n />\n </Show>\n );\n}\n\n/**\n * Internal component that renders the tooltip content\n */\nfunction TooltipContent(\n props: TooltipProps & {\n state: TooltipTriggerState;\n contextTooltipProps: { readonly id?: string };\n placement: TooltipPlacement;\n containerPadding: number;\n crossOffset: number;\n shouldFlip: boolean;\n offset: number;\n arrowSize: number;\n arrowBoundaryOffset: number;\n triggerRef: () => HTMLElement | null | undefined;\n isExiting: boolean;\n onTooltipRef: (el: HTMLDivElement | null) => void;\n },\n): JSX.Element {\n if (isServer) {\n return null as unknown as JSX.Element;\n }\n\n let tooltipRef!: HTMLDivElement;\n const { tooltipProps: ariaTooltipProps } = createTooltip({}, props.state);\n\n // Start visible at 0,0 and update position asynchronously\n // This ensures the tooltip is immediately accessible (for screen readers and tests)\n // while the visual position gets calculated\n const [positionStyles, setPositionStyles] = createSignal({\n top: \"0px\",\n left: \"0px\",\n visibility: \"visible\" as \"hidden\" | \"visible\",\n });\n const [renderedPlacement, setRenderedPlacement] = createSignal<TooltipResolvedPlacement>(\n resolvePlacement(props.placement),\n );\n\n // Enter animation state: starts true on mount, clears after first animation frame.\n // Uses getAnimations() to detect CSS animations/transitions - if none exist (JSDOM,\n // no CSS defined, reduced-motion), clears immediately.\n const [isEntering, setIsEntering] = createSignal(true);\n\n createEffect(() => {\n if (!isEntering()) return;\n if (!tooltipRef || !(\"getAnimations\" in tooltipRef)) {\n setIsEntering(false);\n return;\n }\n // Cancel any premature CSS transitions triggered before layout\n for (const anim of tooltipRef.getAnimations()) {\n if (anim instanceof CSSTransition) {\n anim.cancel();\n }\n }\n const animations = tooltipRef.getAnimations();\n if (animations.length === 0) {\n setIsEntering(false);\n return;\n }\n let canceled = false;\n Promise.all(animations.map((a) => a.finished))\n .then(() => {\n if (!canceled) setIsEntering(false);\n })\n .catch(() => {\n if (!canceled) setIsEntering(false);\n });\n onCleanup(() => {\n canceled = true;\n });\n });\n\n const values = createMemo<TooltipRenderProps>(() => ({\n isEntering: isEntering(),\n isExiting: props.isExiting,\n placement: renderedPlacement(),\n }));\n\n const renderProps = useRenderProps(\n {\n class: props.class,\n style: props.style,\n get children() {\n return props.children;\n },\n defaultClassName: \"solidaria-Tooltip\",\n },\n values,\n );\n\n // Position the overlay in document coordinates, matching React Aria's\n // absolute overlay positioning when the portal container is the document.\n // Returns true if position was successfully updated, false if we need to retry\n const updatePosition = (): boolean => {\n const triggerEl = props.triggerRef();\n if (!triggerEl || !tooltipRef) return false;\n\n const triggerRect = triggerEl.getBoundingClientRect();\n\n // Check if the trigger has valid dimensions (not display:contents or not rendered yet)\n if (triggerRect.width === 0 || triggerRect.height === 0) {\n return false; // Need to retry\n }\n\n // Use offsetWidth/offsetHeight which are more reliable than getBoundingClientRect\n // when the element might be positioned off-screen initially\n const tooltipWidth = tooltipRef.offsetWidth;\n const tooltipHeight = tooltipRef.offsetHeight;\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const containerPadding = props.containerPadding;\n const crossOffset = props.crossOffset;\n const placement = maybeFlipPlacement(\n resolvePlacement(props.placement),\n triggerRect,\n tooltipWidth,\n tooltipHeight,\n viewportWidth,\n viewportHeight,\n containerPadding,\n props.offset,\n props.shouldFlip,\n );\n\n let top = 0;\n let left = 0;\n\n switch (placement) {\n case \"top\":\n top = triggerRect.top - tooltipHeight - props.offset;\n left = triggerRect.left + (triggerRect.width - tooltipWidth) / 2 + crossOffset;\n break;\n case \"bottom\":\n top = triggerRect.bottom + props.offset;\n left = triggerRect.left + (triggerRect.width - tooltipWidth) / 2 + crossOffset;\n break;\n case \"left\":\n top = triggerRect.top + (triggerRect.height - tooltipHeight) / 2 + crossOffset;\n left = triggerRect.left - tooltipWidth - props.offset;\n break;\n case \"right\":\n top = triggerRect.top + (triggerRect.height - tooltipHeight) / 2 + crossOffset;\n left = triggerRect.right + props.offset;\n break;\n }\n\n if (placement === \"top\" || placement === \"bottom\") {\n left = clamp(\n left,\n triggerRect.left - tooltipWidth + props.arrowSize + props.arrowBoundaryOffset,\n triggerRect.left + triggerRect.width - props.arrowSize - props.arrowBoundaryOffset,\n );\n left = clamp(left, containerPadding, viewportWidth - tooltipWidth - containerPadding);\n } else {\n top = clamp(\n top,\n triggerRect.top - tooltipHeight + props.arrowSize + props.arrowBoundaryOffset,\n triggerRect.top + triggerRect.height - props.arrowSize - props.arrowBoundaryOffset,\n );\n top = clamp(top, containerPadding, viewportHeight - tooltipHeight - containerPadding);\n }\n setRenderedPlacement(placement);\n setPositionStyles({\n top: `${Math.floor(top + window.scrollY)}px`,\n left: `${Math.floor(left + window.scrollX)}px`,\n visibility: \"visible\",\n });\n\n return true;\n };\n\n // Set up positioning and scroll-close effects. Positioning retries while the\n // trigger ref resolves, and pending rAF/setTimeout IDs are canceled on cleanup.\n createEffect(() => {\n // Track positioning inputs synchronously so updates from controlled route\n // props reschedule measurement even though layout reads happen in rAF.\n props.placement;\n props.containerPadding;\n props.crossOffset;\n props.shouldFlip;\n props.offset;\n props.arrowSize;\n props.arrowBoundaryOffset;\n\n let retryCount = 0;\n const maxRetries = 5;\n let pendingRaf = 0;\n let pendingTimeout = 0;\n\n const tryUpdatePosition = () => {\n pendingRaf = 0;\n pendingTimeout = 0;\n const success = updatePosition();\n if (!success && retryCount < maxRetries) {\n retryCount++;\n pendingTimeout = window.setTimeout(tryUpdatePosition, 16);\n }\n };\n\n pendingRaf = requestAnimationFrame(tryUpdatePosition);\n\n const closeOnScroll = (event: Event) => {\n const trigger = props.triggerRef();\n const target = event.target;\n if (!trigger || (target instanceof Node && !target.contains(trigger))) {\n return;\n }\n if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) {\n return;\n }\n\n props.state.close(true);\n };\n\n window.addEventListener(\"scroll\", closeOnScroll, true);\n window.addEventListener(\"resize\", updatePosition);\n\n onCleanup(() => {\n if (pendingRaf) cancelAnimationFrame(pendingRaf);\n if (pendingTimeout) clearTimeout(pendingTimeout);\n window.removeEventListener(\"scroll\", closeOnScroll, true);\n window.removeEventListener(\"resize\", updatePosition);\n });\n });\n\n const domProps = filterDOMProps(props, { global: true });\n const tooltipId = () => props.contextTooltipProps.id ?? (domProps as { id?: string }).id;\n\n // Extract ref from ariaTooltipProps to avoid type conflicts (SolidJS ref types are element-specific)\n const { ref: _ariaRef, ...cleanAriaProps } = ariaTooltipProps as Record<string, unknown>;\n\n const setRef = (el: HTMLDivElement) => {\n tooltipRef = el;\n if (!props.dir) {\n el.dir = getDocumentDirection();\n }\n if (!props.lang) {\n const documentLang = document.documentElement.lang;\n const navigatorLang = typeof navigator !== \"undefined\" ? navigator.language : \"\";\n el.lang = documentLang.includes(\"-\")\n ? documentLang\n : navigatorLang || documentLang || \"en-US\";\n }\n props.onTooltipRef(el);\n };\n\n onCleanup(() => {\n props.onTooltipRef(null);\n });\n\n return (\n <OverlayContainer>\n <div\n {...domProps}\n {...cleanAriaProps}\n id={tooltipId()}\n role=\"tooltip\"\n ref={setRef}\n class={renderProps.class()}\n style={{\n position: \"absolute\",\n \"z-index\": 100000,\n ...positionStyles(),\n ...renderProps.style(),\n }}\n data-placement={renderedPlacement()}\n data-entering={isEntering() || undefined}\n data-exiting={props.isExiting || undefined}\n >\n {renderProps.renderChildren()}\n </div>\n </OverlayContainer>\n );\n}\n\nfunction resolvePlacement(placement: TooltipPlacement): TooltipResolvedPlacement {\n if (placement === \"start\") {\n return getDocumentDirection() === \"rtl\" ? \"right\" : \"left\";\n }\n if (placement === \"end\") {\n return getDocumentDirection() === \"rtl\" ? \"left\" : \"right\";\n }\n return placement;\n}\n\nfunction getDocumentDirection(): \"ltr\" | \"rtl\" {\n if (typeof document === \"undefined\") {\n return \"ltr\";\n }\n\n return document.documentElement.dir === \"rtl\" ? \"rtl\" : \"ltr\";\n}\n\nfunction maybeFlipPlacement(\n placement: TooltipResolvedPlacement,\n triggerRect: DOMRect,\n tooltipWidth: number,\n tooltipHeight: number,\n viewportWidth: number,\n viewportHeight: number,\n containerPadding: number,\n offset: number,\n shouldFlip: boolean,\n): TooltipResolvedPlacement {\n if (!shouldFlip) {\n return placement;\n }\n\n switch (placement) {\n case \"top\":\n return triggerRect.top - tooltipHeight - offset < containerPadding ? \"bottom\" : placement;\n case \"bottom\":\n return triggerRect.bottom + tooltipHeight + offset > viewportHeight - containerPadding\n ? \"top\"\n : placement;\n case \"left\":\n return triggerRect.left - tooltipWidth - offset < containerPadding ? \"right\" : placement;\n case \"right\":\n return triggerRect.right + tooltipWidth + offset > viewportWidth - containerPadding\n ? \"left\"\n : placement;\n }\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n if (max < min) {\n return min;\n }\n\n return Math.min(Math.max(value, min), max);\n}\n\nexport type { TooltipTriggerState };\n"],"mappings":"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"}
1
+ {"version":3,"file":"Tooltip.js","names":["<TriggerWrapper\n triggerProps={triggerProps}\n ref={(el) => {\n triggerRef = el;\n }}\n >\n {trigger}\n </TriggerWrapper>","ref={(el) => {\n triggerRef = el;\n }}","<TooltipTriggerStateContext value={state}>\n <TooltipTriggerContext value={context}>{processChildren()}</TooltipTriggerContext>\n </TooltipTriggerStateContext>","value={state}","<TooltipTriggerContext value={context}>{processChildren()}</TooltipTriggerContext>","value={context}","ref={handleRef}","style={{ display: \"contents\" }}","{child()}","<span {...getWrapperEventProps()} ref={handleRef} style={{ display: \"contents\" }}>\n {child()}\n </span>","<Show when={shouldRender()}>\n <TooltipContent\n {...props}\n state={state()}\n contextTooltipProps={context?.tooltipProps ?? {}}\n placement={placement()}\n containerPadding={containerPadding()}\n crossOffset={crossOffset()}\n shouldFlip={shouldFlip()}\n offset={offset()}\n arrowSize={arrowSize()}\n arrowBoundaryOffset={arrowBoundaryOffset()}\n triggerRef={context?.triggerRef ?? (() => null)}\n isExiting={isExiting()}\n onTooltipRef={setTooltipEl}\n />\n </Show>","<TooltipContent\n {...props}\n state={state()}\n contextTooltipProps={context?.tooltipProps ?? {}}\n placement={placement()}\n containerPadding={containerPadding()}\n crossOffset={crossOffset()}\n shouldFlip={shouldFlip()}\n offset={offset()}\n arrowSize={arrowSize()}\n arrowBoundaryOffset={arrowBoundaryOffset()}\n triggerRef={context?.triggerRef ?? (() => null)}\n isExiting={isExiting()}\n onTooltipRef={setTooltipEl}\n />","onTooltipRef={setTooltipEl}","<OverlayContainer>\n <div\n {...domProps}\n {...cleanAriaProps}\n id={tooltipId()}\n role=\"tooltip\"\n ref={setRef}\n class={renderProps.class()}\n style={{\n position: \"absolute\",\n \"z-index\": 100000,\n ...positionStyles(),\n ...renderProps.style(),\n }}\n data-placement={renderedPlacement()}\n data-entering={dataAttr(isEntering())}\n data-exiting={dataAttr(props.isExiting)}\n >\n {renderProps.renderChildren()}\n </div>\n </OverlayContainer>","ref={setRef}","role=\"tooltip\"","{renderProps.renderChildren()}","<div\n {...domProps}\n {...cleanAriaProps}\n id={tooltipId()}\n role=\"tooltip\"\n ref={setRef}\n class={renderProps.class()}\n style={{\n position: \"absolute\",\n \"z-index\": 100000,\n ...positionStyles(),\n ...renderProps.style(),\n }}\n data-placement={renderedPlacement()}\n data-entering={dataAttr(isEntering())}\n data-exiting={dataAttr(props.isExiting)}\n >\n {renderProps.renderChildren()}\n </div>"],"sources":["../src/Tooltip.tsx"],"sourcesContent":["/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/Tooltip.tsx\n\n/**\n * Tooltip component for solidaria-components\n *\n * A tooltip displays a description of an element on hover or focus.\n * Port of react-aria-components/src/Tooltip.tsx\n */\n\nimport {\n createContext,\n useContext,\n createMemo,\n createSignal,\n createEffect,\n onCleanup,\n Show,\n createTrackedEffect,\n} from \"solid-js\";\nimport type { ParentComponent } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport { isServer } from \"@solidjs/web\";\nimport {\n createTooltipTriggerState,\n type TooltipTriggerState,\n type TooltipTriggerProps as StateProps,\n} from \"@proyecto-viviana/solid-stately\";\nimport {\n createTooltip,\n createTooltipTrigger,\n type TooltipTriggerProps as AriaProps,\n OverlayContainer,\n useLocale,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n dataAttr,\n} from \"./utils\";\n\nexport interface TooltipRenderProps {\n /** Whether the tooltip is currently entering (for animations). */\n isEntering: boolean;\n /** Whether the tooltip is currently exiting (for animations). */\n isExiting: boolean;\n /** The placement of the tooltip relative to the trigger. */\n placement: TooltipResolvedPlacement | null;\n}\n\nexport type TooltipPlacement = \"top\" | \"bottom\" | \"left\" | \"right\" | \"start\" | \"end\";\nexport type TooltipResolvedPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface TooltipTriggerComponentProps extends StateProps, AriaProps {\n /** The children of the tooltip trigger (trigger element and tooltip). */\n children: JSX.Element;\n /** The placement of the tooltip relative to the trigger. */\n placement?: TooltipPlacement;\n /** The placement padding between the tooltip and viewport edge. */\n containerPadding?: number;\n /** The additional offset along the cross axis. */\n crossOffset?: number;\n /** Whether the tooltip should flip when there is insufficient room. */\n shouldFlip?: boolean;\n}\n\nexport interface TooltipProps extends SlotProps {\n /** The element id. */\n id?: string;\n /** Custom aria-label for the tooltip. */\n \"aria-label\"?: string;\n /** ID of an element that labels the tooltip. */\n \"aria-labelledby\"?: string;\n /** ID of an element that describes the tooltip. */\n \"aria-describedby\"?: string;\n /** ID of an element that provides details for the tooltip. */\n \"aria-details\"?: string;\n /** The children of the tooltip. A function may be provided to receive render props. */\n children?: RenderChildren<TooltipRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TooltipRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TooltipRenderProps>;\n /** Whether the tooltip is open (controlled). */\n isOpen?: boolean;\n /** Whether the tooltip is open by default (uncontrolled). */\n defaultOpen?: boolean;\n /** The placement of the tooltip relative to the trigger. */\n placement?: TooltipPlacement;\n /** The placement padding between the tooltip and viewport edge. */\n containerPadding?: number;\n /** The additional offset along the cross axis. */\n crossOffset?: number;\n /** Whether the tooltip should flip when there is insufficient room. */\n shouldFlip?: boolean;\n /** The offset between the tooltip and trigger. */\n offset?: number;\n /** The arrow size used to keep the arrow overlapping the trigger. */\n arrowSize?: number;\n /** The padding between the arrow and tooltip edge. */\n arrowBoundaryOffset?: number;\n /** Whether the tooltip should be disabled. */\n isDisabled?: boolean;\n /** The element language. */\n lang?: string;\n /** The text direction. */\n dir?: \"ltr\" | \"rtl\";\n}\n\ninterface TooltipTriggerContextValue {\n state: TooltipTriggerState;\n tooltipProps: { readonly id: string };\n setTooltipId: (id: string | undefined) => void;\n triggerRef: () => HTMLElement | null | undefined;\n placement: () => TooltipPlacement | undefined;\n containerPadding: () => number | undefined;\n crossOffset: () => number | undefined;\n shouldFlip: () => boolean | undefined;\n isDisabled: () => boolean | undefined;\n}\n\nconst TooltipTriggerContext = createContext<TooltipTriggerContextValue | null>(null);\nexport const TooltipContext = TooltipTriggerContext;\nexport const TooltipTriggerStateContext = createContext<TooltipTriggerState | null>(null);\n\n/**\n * TooltipTrigger wraps around a trigger element and a Tooltip.\n * It handles opening and closing the Tooltip when the user hovers\n * over or focuses the trigger.\n *\n * @example\n * ```tsx\n * <TooltipTrigger>\n * <Button>Hover me</Button>\n * <Tooltip>This is a tooltip</Tooltip>\n * </TooltipTrigger>\n * ```\n */\nexport const TooltipTrigger: ParentComponent<TooltipTriggerComponentProps> = (props) => {\n let triggerRef: HTMLElement | null = null;\n const [tooltipId, setTooltipId] = createSignal<string | undefined>();\n\n const state = createTooltipTriggerState({\n get delay() {\n return props.delay;\n },\n get closeDelay() {\n return props.closeDelay;\n },\n get isOpen() {\n return props.isOpen;\n },\n get defaultOpen() {\n return props.defaultOpen;\n },\n get onOpenChange() {\n return props.onOpenChange;\n },\n });\n\n const { triggerProps, tooltipProps } = createTooltipTrigger(\n {\n get isDisabled() {\n return props.isDisabled;\n },\n get trigger() {\n return props.trigger;\n },\n get shouldCloseOnPress() {\n return props.shouldCloseOnPress;\n },\n get tooltipId() {\n return tooltipId();\n },\n },\n state,\n () => triggerRef,\n );\n\n const context: TooltipTriggerContextValue = {\n state,\n tooltipProps,\n setTooltipId,\n triggerRef: () => triggerRef,\n placement: () => props.placement,\n containerPadding: () => props.containerPadding,\n crossOffset: () => props.crossOffset,\n shouldFlip: () => props.shouldFlip,\n isDisabled: () => props.isDisabled,\n };\n\n const processChildren = () => {\n const children = props.children;\n if (Array.isArray(children)) {\n const [trigger, ...rest] = children;\n return (\n <>\n <TriggerWrapper\n triggerProps={triggerProps}\n ref={(el) => {\n triggerRef = el;\n }}\n >\n {trigger}\n </TriggerWrapper>\n {rest}\n </>\n );\n }\n return children;\n };\n\n return (\n <TooltipTriggerStateContext value={state}>\n <TooltipTriggerContext value={context}>{processChildren()}</TooltipTriggerContext>\n </TooltipTriggerStateContext>\n );\n};\n\n/**\n * Wrapper component that spreads trigger props onto its child\n */\nconst TriggerWrapper: ParentComponent<{\n triggerProps: JSX.HTMLAttributes<HTMLElement>;\n ref: (el: HTMLElement) => void;\n}> = (props) => {\n const child = () => props.children as JSX.Element;\n const [triggerElement, setTriggerElement] = createSignal<HTMLElement | null>(null);\n const [wrapperElement, setWrapperElement] = createSignal<HTMLSpanElement | null>(null);\n const getWrapperEventProps = () => {\n const triggerProps = props.triggerProps as Record<string, unknown>;\n const wrapperProps: Record<string, unknown> = {};\n const eventPropNames = [\n \"onFocus\",\n \"onBlur\",\n \"onPointerEnter\",\n \"onPointerLeave\",\n \"onPointerOver\",\n \"onPointerOut\",\n \"onMouseEnter\",\n \"onMouseLeave\",\n \"onTouchStart\",\n \"onPointerDown\",\n \"onKeyDown\",\n ];\n\n for (const propName of eventPropNames) {\n const handler = triggerProps[propName];\n if (typeof handler === \"function\") {\n wrapperProps[propName] = handler;\n }\n }\n\n if (!wrapperProps.onPointerEnter && typeof triggerProps.onMouseEnter === \"function\") {\n wrapperProps.onPointerEnter = triggerProps.onMouseEnter;\n }\n if (!wrapperProps.onPointerLeave && typeof triggerProps.onMouseLeave === \"function\") {\n wrapperProps.onPointerLeave = triggerProps.onMouseLeave;\n }\n\n return wrapperProps as JSX.HTMLAttributes<HTMLSpanElement>;\n };\n\n // Read refs and trigger state in the compute phase. A tracked callback can\n // miss refs written earlier in the same hydration flush before its first read.\n createEffect(\n () => ({\n element: triggerElement(),\n wrapper: wrapperElement(),\n triggerProps: { ...props.triggerProps } as Record<string, unknown>,\n }),\n ({ element, wrapper, triggerProps }) => {\n if (!element) {\n return;\n }\n\n const describedBy = triggerProps[\"aria-describedby\"] as string | undefined;\n if (describedBy) {\n element.setAttribute(\"aria-describedby\", describedBy);\n } else {\n element.removeAttribute(\"aria-describedby\");\n }\n\n const targets = Array.from(new Set([element, wrapper].filter(Boolean))) as HTMLElement[];\n const listeners: Array<[HTMLElement, string, EventListener]> = [];\n const eventProps = [\n [\"onFocus\", \"focus\"],\n [\"onBlur\", \"blur\"],\n [\"onPointerEnter\", \"pointerenter\"],\n [\"onPointerLeave\", \"pointerleave\"],\n [\"onPointerOver\", \"pointerover\"],\n [\"onPointerOut\", \"pointerout\"],\n [\"onMouseEnter\", \"mouseenter\"],\n [\"onMouseLeave\", \"mouseleave\"],\n [\"onTouchStart\", \"touchstart\"],\n [\"onPointerDown\", \"pointerdown\"],\n [\"onKeyDown\", \"keydown\"],\n ] as const;\n\n for (const [propName, eventName] of eventProps) {\n let handler = triggerProps[propName];\n if (!handler && propName === \"onPointerEnter\") {\n handler = triggerProps.onMouseEnter;\n } else if (!handler && propName === \"onPointerLeave\") {\n handler = triggerProps.onMouseLeave;\n }\n if (typeof handler === \"function\") {\n const listener = handler as EventListener;\n for (const target of targets) {\n target.addEventListener(eventName, listener);\n listeners.push([target, eventName, listener]);\n }\n }\n }\n\n return () => {\n for (const [target, eventName, listener] of listeners) {\n target.removeEventListener(eventName, listener);\n }\n if (describedBy && element.getAttribute(\"aria-describedby\") === describedBy) {\n element.removeAttribute(\"aria-describedby\");\n }\n };\n },\n );\n\n // We wrap in a span with display:contents to not affect layout.\n // However, display:contents makes getBoundingClientRect return zeros,\n // so we pass a ref callback that finds the first actual element child.\n const handleRef = (span: HTMLSpanElement) => {\n setWrapperElement(span);\n\n const findElementChild = (el: Element): HTMLElement | null => {\n for (const child of el.children) {\n if (child instanceof HTMLElement) {\n return child;\n }\n const found = findElementChild(child);\n if (found) return found;\n }\n return null;\n };\n\n // Find the first element child that has dimensions (not display:contents)\n const findVisibleChild = (el: Element): HTMLElement | null => {\n if (el instanceof HTMLElement) {\n const rect = el.getBoundingClientRect();\n if (rect.width > 0 && rect.height > 0) {\n return el;\n }\n for (const child of el.children) {\n const found = findVisibleChild(child);\n if (found) return found;\n }\n }\n return null;\n };\n\n // Use requestAnimationFrame to ensure children are rendered and have dimensions\n // This is necessary because SolidJS may not have computed child layout yet\n const resolveRef = () => {\n const elementChild = findElementChild(span);\n const visibleChild = findVisibleChild(span);\n setTriggerElement(elementChild ?? visibleChild ?? span);\n props.ref(visibleChild ?? elementChild ?? span);\n };\n\n const elementChild = findElementChild(span);\n if (elementChild) {\n setTriggerElement(elementChild);\n }\n\n const immediateChild = findVisibleChild(span);\n if (immediateChild) {\n setTriggerElement(elementChild ?? immediateChild);\n props.ref(immediateChild);\n } else {\n requestAnimationFrame(resolveRef);\n }\n };\n\n return (\n <span {...getWrapperEventProps()} ref={handleRef} style={{ display: \"contents\" }}>\n {child()}\n </span>\n );\n};\n\n/**\n * A tooltip displays a description of an element on hover or focus.\n *\n * @example\n * ```tsx\n * <TooltipTrigger>\n * <Button>Hover me</Button>\n * <Tooltip>This is helpful information</Tooltip>\n * </TooltipTrigger>\n * ```\n */\nexport function Tooltip(props: TooltipProps): JSX.Element {\n const context = useContext(TooltipTriggerContext);\n\n createTrackedEffect(() => {\n const _s2Cleanups: Array<() => void> = [];\n\n context?.setTooltipId(props.id);\n _s2Cleanups.push(() => {\n context?.setTooltipId(undefined);\n });\n\n return () => {\n for (const c of _s2Cleanups) c();\n };\n });\n\n const localState = createTooltipTriggerState({\n get isOpen() {\n return props.isOpen;\n },\n get defaultOpen() {\n return props.defaultOpen;\n },\n });\n\n const state = () => context?.state ?? localState;\n const placement = () => props.placement ?? context?.placement() ?? \"top\";\n const containerPadding = () => props.containerPadding ?? context?.containerPadding() ?? 12;\n const crossOffset = () => props.crossOffset ?? context?.crossOffset() ?? 0;\n const shouldFlip = () => props.shouldFlip ?? context?.shouldFlip() ?? true;\n const offset = () => props.offset ?? 9;\n const arrowSize = () => props.arrowSize ?? 0;\n const arrowBoundaryOffset = () => props.arrowBoundaryOffset ?? 0;\n const isDisabled = () => props.isDisabled ?? context?.isDisabled() ?? false;\n\n const isOpen = () => !isDisabled() && state().isOpen();\n\n // Exit animation state machine: 'closed' | 'open' | 'exiting'\n // Keeps the tooltip mounted during exit animation so CSS transitions can play.\n const [exitState, setExitState] = createSignal<\"closed\" | \"open\" | \"exiting\">(\n isOpen() ? \"open\" : \"closed\",\n );\n\n createTrackedEffect(() => {\n const open = isOpen();\n const current = exitState();\n if (current === \"open\" && !open) {\n setExitState(\"exiting\");\n } else if ((current === \"closed\" || current === \"exiting\") && open) {\n setExitState(\"open\");\n }\n });\n\n // Signal for the tooltip ref so we can observe exit animations\n const [tooltipEl, setTooltipEl] = createSignal<HTMLDivElement | null>(null);\n\n // When exiting, wait for CSS animations to finish, then set state to closed\n createTrackedEffect(() => {\n const _s2Cleanups: Array<() => void> = [];\n\n if (exitState() !== \"exiting\") return;\n const el = tooltipEl();\n if (!el || !(\"getAnimations\" in el)) {\n setExitState(\"closed\");\n return;\n }\n const animations = el.getAnimations();\n if (animations.length === 0) {\n setExitState(\"closed\");\n return;\n }\n let canceled = false;\n Promise.all(animations.map((a) => a.finished))\n .then(() => {\n if (!canceled) setExitState((s) => (s === \"exiting\" ? \"closed\" : s));\n })\n .catch(() => {\n if (!canceled) setExitState((s) => (s === \"exiting\" ? \"closed\" : s));\n });\n _s2Cleanups.push(() => {\n canceled = true;\n });\n\n return () => {\n for (const c of _s2Cleanups) c();\n };\n });\n\n const shouldRender = () => isOpen() || exitState() === \"exiting\";\n const isExiting = () => exitState() === \"exiting\";\n\n return (\n <Show when={shouldRender()}>\n <TooltipContent\n {...props}\n state={state()}\n contextTooltipProps={context?.tooltipProps ?? {}}\n placement={placement()}\n containerPadding={containerPadding()}\n crossOffset={crossOffset()}\n shouldFlip={shouldFlip()}\n offset={offset()}\n arrowSize={arrowSize()}\n arrowBoundaryOffset={arrowBoundaryOffset()}\n triggerRef={context?.triggerRef ?? (() => null)}\n isExiting={isExiting()}\n onTooltipRef={setTooltipEl}\n />\n </Show>\n );\n}\n\n/**\n * Internal component that renders the tooltip content\n */\nfunction TooltipContent(\n props: TooltipProps & {\n state: TooltipTriggerState;\n contextTooltipProps: { readonly id?: string };\n placement: TooltipPlacement;\n containerPadding: number;\n crossOffset: number;\n shouldFlip: boolean;\n offset: number;\n arrowSize: number;\n arrowBoundaryOffset: number;\n triggerRef: () => HTMLElement | null | undefined;\n isExiting: boolean;\n onTooltipRef: (el: HTMLDivElement | null) => void;\n },\n): JSX.Element {\n if (isServer) {\n return null as unknown as JSX.Element;\n }\n\n let tooltipRef!: HTMLDivElement;\n const locale = useLocale();\n const direction = () => locale().direction;\n const { tooltipProps: ariaTooltipProps } = createTooltip({}, props.state);\n\n // Start visible at 0,0 and update position asynchronously\n // This ensures the tooltip is immediately accessible (for screen readers and tests)\n // while the visual position gets calculated\n const [positionStyles, setPositionStyles] = createSignal({\n top: \"0px\",\n left: \"0px\",\n visibility: \"visible\" as \"hidden\" | \"visible\",\n });\n const [renderedPlacement, setRenderedPlacement] = createSignal<TooltipResolvedPlacement>(\n resolvePlacement(props.placement, direction()),\n );\n\n // Enter animation state: starts true on mount, clears after first animation frame.\n // Uses getAnimations() to detect CSS animations/transitions - if none exist (JSDOM,\n // no CSS defined, reduced-motion), clears immediately.\n const [isEntering, setIsEntering] = createSignal(true);\n\n createTrackedEffect(() => {\n const _s2Cleanups: Array<() => void> = [];\n\n if (!isEntering()) return;\n if (!tooltipRef || !(\"getAnimations\" in tooltipRef)) {\n setIsEntering(false);\n return;\n }\n // Cancel any premature CSS transitions triggered before layout\n for (const anim of tooltipRef.getAnimations()) {\n if (anim instanceof CSSTransition) {\n anim.cancel();\n }\n }\n const animations = tooltipRef.getAnimations();\n if (animations.length === 0) {\n setIsEntering(false);\n return;\n }\n let canceled = false;\n Promise.all(animations.map((a) => a.finished))\n .then(() => {\n if (!canceled) setIsEntering(false);\n })\n .catch(() => {\n if (!canceled) setIsEntering(false);\n });\n _s2Cleanups.push(() => {\n canceled = true;\n });\n\n return () => {\n for (const c of _s2Cleanups) c();\n };\n });\n\n const values = createMemo<TooltipRenderProps>(() => ({\n isEntering: isEntering(),\n isExiting: props.isExiting,\n placement: renderedPlacement(),\n }));\n\n const renderProps = useRenderProps(\n {\n class: props.class,\n style: props.style,\n get children() {\n return props.children;\n },\n defaultClassName: \"solidaria-Tooltip\",\n },\n values,\n );\n\n // Position the overlay in document coordinates, matching React Aria's\n // absolute overlay positioning when the portal container is the document.\n // Returns true if position was successfully updated, false if we need to retry\n const updatePosition = (): boolean => {\n const triggerEl = props.triggerRef();\n if (!triggerEl || !tooltipRef) return false;\n\n const triggerRect = triggerEl.getBoundingClientRect();\n\n // Check if the trigger has valid dimensions (not display:contents or not rendered yet)\n if (triggerRect.width === 0 || triggerRect.height === 0) {\n return false; // Need to retry\n }\n\n // Use offsetWidth/offsetHeight which are more reliable than getBoundingClientRect\n // when the element might be positioned off-screen initially\n const tooltipWidth = tooltipRef.offsetWidth;\n const tooltipHeight = tooltipRef.offsetHeight;\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const containerPadding = props.containerPadding;\n const crossOffset = props.crossOffset;\n const placement = maybeFlipPlacement(\n resolvePlacement(props.placement, direction()),\n triggerRect,\n tooltipWidth,\n tooltipHeight,\n viewportWidth,\n viewportHeight,\n containerPadding,\n props.offset,\n props.shouldFlip,\n );\n\n let top = 0;\n let left = 0;\n\n switch (placement) {\n case \"top\":\n top = triggerRect.top - tooltipHeight - props.offset;\n left = triggerRect.left + (triggerRect.width - tooltipWidth) / 2 + crossOffset;\n break;\n case \"bottom\":\n top = triggerRect.bottom + props.offset;\n left = triggerRect.left + (triggerRect.width - tooltipWidth) / 2 + crossOffset;\n break;\n case \"left\":\n top = triggerRect.top + (triggerRect.height - tooltipHeight) / 2 + crossOffset;\n left = triggerRect.left - tooltipWidth - props.offset;\n break;\n case \"right\":\n top = triggerRect.top + (triggerRect.height - tooltipHeight) / 2 + crossOffset;\n left = triggerRect.right + props.offset;\n break;\n }\n\n if (placement === \"top\" || placement === \"bottom\") {\n left = clamp(\n left,\n triggerRect.left - tooltipWidth + props.arrowSize + props.arrowBoundaryOffset,\n triggerRect.left + triggerRect.width - props.arrowSize - props.arrowBoundaryOffset,\n );\n left = clamp(left, containerPadding, viewportWidth - tooltipWidth - containerPadding);\n } else {\n top = clamp(\n top,\n triggerRect.top - tooltipHeight + props.arrowSize + props.arrowBoundaryOffset,\n triggerRect.top + triggerRect.height - props.arrowSize - props.arrowBoundaryOffset,\n );\n top = clamp(top, containerPadding, viewportHeight - tooltipHeight - containerPadding);\n }\n setRenderedPlacement(placement);\n setPositionStyles({\n top: `${Math.floor(top + window.scrollY)}px`,\n left: `${Math.floor(left + window.scrollX)}px`,\n visibility: \"visible\",\n });\n\n return true;\n };\n\n // Set up positioning and scroll-close effects. Positioning retries while the\n // trigger ref resolves, and pending rAF/setTimeout IDs are canceled on cleanup.\n createTrackedEffect(() => {\n const _s2Cleanups: Array<() => void> = [];\n\n // Track positioning inputs synchronously so updates from controlled route\n // props reschedule measurement even though layout reads happen in rAF.\n props.placement;\n props.containerPadding;\n props.crossOffset;\n props.shouldFlip;\n props.offset;\n props.arrowSize;\n props.arrowBoundaryOffset;\n\n let retryCount = 0;\n const maxRetries = 5;\n let pendingRaf = 0;\n let pendingTimeout = 0;\n\n const tryUpdatePosition = () => {\n pendingRaf = 0;\n pendingTimeout = 0;\n const success = updatePosition();\n if (!success && retryCount < maxRetries) {\n retryCount++;\n pendingTimeout = window.setTimeout(tryUpdatePosition, 16);\n }\n };\n\n pendingRaf = requestAnimationFrame(tryUpdatePosition);\n\n const closeOnScroll = (event: Event) => {\n const trigger = props.triggerRef();\n const target = event.target;\n if (!trigger || (target instanceof Node && !target.contains(trigger))) {\n return;\n }\n if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) {\n return;\n }\n\n props.state.close(true);\n };\n\n window.addEventListener(\"scroll\", closeOnScroll, true);\n window.addEventListener(\"resize\", updatePosition);\n\n _s2Cleanups.push(() => {\n if (pendingRaf) cancelAnimationFrame(pendingRaf);\n if (pendingTimeout) clearTimeout(pendingTimeout);\n window.removeEventListener(\"scroll\", closeOnScroll, true);\n window.removeEventListener(\"resize\", updatePosition);\n });\n\n return () => {\n for (const c of _s2Cleanups) c();\n };\n });\n\n const domProps = filterDOMProps(props, { global: true });\n const tooltipId = () => props.contextTooltipProps.id ?? (domProps as { id?: string }).id;\n\n // Extract ref from ariaTooltipProps to avoid type conflicts (SolidJS ref types are element-specific)\n const { ref: _ariaRef, ...cleanAriaProps } = ariaTooltipProps as Record<string, unknown>;\n\n const setRef = (el: HTMLDivElement) => {\n tooltipRef = el;\n if (!props.dir) {\n el.dir = direction();\n }\n if (!props.lang) {\n const documentLang = document.documentElement.lang;\n const navigatorLang = typeof navigator !== \"undefined\" ? navigator.language : \"\";\n el.lang = documentLang.includes(\"-\")\n ? documentLang\n : navigatorLang || documentLang || \"en-US\";\n }\n props.onTooltipRef(el);\n };\n\n onCleanup(() => {\n props.onTooltipRef(null);\n });\n\n return (\n <OverlayContainer>\n <div\n {...domProps}\n {...cleanAriaProps}\n id={tooltipId()}\n role=\"tooltip\"\n ref={setRef}\n class={renderProps.class()}\n style={{\n position: \"absolute\",\n \"z-index\": 100000,\n ...positionStyles(),\n ...renderProps.style(),\n }}\n data-placement={renderedPlacement()}\n data-entering={dataAttr(isEntering())}\n data-exiting={dataAttr(props.isExiting)}\n >\n {renderProps.renderChildren()}\n </div>\n </OverlayContainer>\n );\n}\n\nfunction resolvePlacement(\n placement: TooltipPlacement,\n direction: \"ltr\" | \"rtl\",\n): TooltipResolvedPlacement {\n if (placement === \"start\") {\n return direction === \"rtl\" ? \"right\" : \"left\";\n }\n if (placement === \"end\") {\n return direction === \"rtl\" ? \"left\" : \"right\";\n }\n return placement;\n}\n\nfunction maybeFlipPlacement(\n placement: TooltipResolvedPlacement,\n triggerRect: DOMRect,\n tooltipWidth: number,\n tooltipHeight: number,\n viewportWidth: number,\n viewportHeight: number,\n containerPadding: number,\n offset: number,\n shouldFlip: boolean,\n): TooltipResolvedPlacement {\n if (!shouldFlip) {\n return placement;\n }\n\n switch (placement) {\n case \"top\":\n return triggerRect.top - tooltipHeight - offset < containerPadding ? \"bottom\" : placement;\n case \"bottom\":\n return triggerRect.bottom + tooltipHeight + offset > viewportHeight - containerPadding\n ? \"top\"\n : placement;\n case \"left\":\n return triggerRect.left - tooltipWidth - offset < containerPadding ? \"right\" : placement;\n case \"right\":\n return triggerRect.right + tooltipWidth + offset > viewportWidth - containerPadding\n ? \"left\"\n : placement;\n }\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n if (max < min) {\n return min;\n }\n\n return Math.min(Math.max(value, min), max);\n}\n\nexport type { TooltipTriggerState };\n"],"mappings":"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"}
package/dist/Tooltip.jsx CHANGED
@@ -1,7 +1,19 @@
1
- import { filterDOMProps, useRenderProps } from "./utils.jsx";
2
- import { Show, createContext, createEffect, createMemo, createSignal, onCleanup, useContext } from "solid-js";
3
- import { isServer } from "solid-js/web";
4
- import { OverlayContainer, createTooltip, createTooltipTrigger } from "@proyecto-viviana/solidaria";
1
+ /*
2
+ * Copyright 2022 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/Tooltip.tsx
13
+ import { dataAttr, filterDOMProps, useRenderProps } from "./utils.jsx";
14
+ import { Show, createContext, createEffect, createMemo, createSignal, createTrackedEffect, onCleanup, useContext } from "solid-js";
15
+ import { isServer } from "@solidjs/web";
16
+ import { OverlayContainer, createTooltip, createTooltipTrigger, useLocale } from "@proyecto-viviana/solidaria";
5
17
  import { createTooltipTriggerState } from "@proyecto-viviana/solid-stately";
6
18
  //#region src/Tooltip.tsx
7
19
  /**
@@ -86,11 +98,9 @@ const TooltipTrigger = (props) => {
86
98
  }
87
99
  return children;
88
100
  };
89
- return <TooltipTriggerStateContext.Provider value={state}>
90
- <TooltipTriggerContext.Provider value={context}>
91
- {processChildren()}
92
- </TooltipTriggerContext.Provider>
93
- </TooltipTriggerStateContext.Provider>;
101
+ return <TooltipTriggerStateContext value={state}>
102
+ <TooltipTriggerContext value={context}>{processChildren()}</TooltipTriggerContext>
103
+ </TooltipTriggerStateContext>;
94
104
  };
95
105
  /**
96
106
  * Wrapper component that spreads trigger props onto its child
@@ -122,14 +132,15 @@ const TriggerWrapper = (props) => {
122
132
  if (!wrapperProps.onPointerLeave && typeof triggerProps.onMouseLeave === "function") wrapperProps.onPointerLeave = triggerProps.onMouseLeave;
123
133
  return wrapperProps;
124
134
  };
125
- createEffect(() => {
126
- const element = triggerElement();
135
+ createEffect(() => ({
136
+ element: triggerElement(),
137
+ wrapper: wrapperElement(),
138
+ triggerProps: { ...props.triggerProps }
139
+ }), ({ element, wrapper, triggerProps }) => {
127
140
  if (!element) return;
128
- const triggerProps = props.triggerProps;
129
141
  const describedBy = triggerProps["aria-describedby"];
130
142
  if (describedBy) element.setAttribute("aria-describedby", describedBy);
131
143
  else element.removeAttribute("aria-describedby");
132
- const wrapper = wrapperElement();
133
144
  const targets = Array.from(new Set([element, wrapper].filter(Boolean)));
134
145
  const listeners = [];
135
146
  for (const [propName, eventName] of [
@@ -160,10 +171,10 @@ const TriggerWrapper = (props) => {
160
171
  }
161
172
  }
162
173
  }
163
- onCleanup(() => {
174
+ return () => {
164
175
  for (const [target, eventName, listener] of listeners) target.removeEventListener(eventName, listener);
165
176
  if (describedBy && element.getAttribute("aria-describedby") === describedBy) element.removeAttribute("aria-describedby");
166
- });
177
+ };
167
178
  });
168
179
  const handleRef = (span) => {
169
180
  setWrapperElement(span);
@@ -217,11 +228,15 @@ const TriggerWrapper = (props) => {
217
228
  */
218
229
  function Tooltip(props) {
219
230
  const context = useContext(TooltipTriggerContext);
220
- createEffect(() => {
231
+ createTrackedEffect(() => {
232
+ const _s2Cleanups = [];
221
233
  context?.setTooltipId(props.id);
222
- onCleanup(() => {
234
+ _s2Cleanups.push(() => {
223
235
  context?.setTooltipId(void 0);
224
236
  });
237
+ return () => {
238
+ for (const c of _s2Cleanups) c();
239
+ };
225
240
  });
226
241
  const localState = createTooltipTriggerState({
227
242
  get isOpen() {
@@ -242,14 +257,15 @@ function Tooltip(props) {
242
257
  const isDisabled = () => props.isDisabled ?? context?.isDisabled() ?? false;
243
258
  const isOpen = () => !isDisabled() && state().isOpen();
244
259
  const [exitState, setExitState] = createSignal(isOpen() ? "open" : "closed");
245
- createEffect(() => {
260
+ createTrackedEffect(() => {
246
261
  const open = isOpen();
247
262
  const current = exitState();
248
263
  if (current === "open" && !open) setExitState("exiting");
249
264
  else if ((current === "closed" || current === "exiting") && open) setExitState("open");
250
265
  });
251
266
  const [tooltipEl, setTooltipEl] = createSignal(null);
252
- createEffect(() => {
267
+ createTrackedEffect(() => {
268
+ const _s2Cleanups = [];
253
269
  if (exitState() !== "exiting") return;
254
270
  const el = tooltipEl();
255
271
  if (!el || !("getAnimations" in el)) {
@@ -267,9 +283,12 @@ function Tooltip(props) {
267
283
  }).catch(() => {
268
284
  if (!canceled) setExitState((s) => s === "exiting" ? "closed" : s);
269
285
  });
270
- onCleanup(() => {
286
+ _s2Cleanups.push(() => {
271
287
  canceled = true;
272
288
  });
289
+ return () => {
290
+ for (const c of _s2Cleanups) c();
291
+ };
273
292
  });
274
293
  const shouldRender = () => isOpen() || exitState() === "exiting";
275
294
  const isExiting = () => exitState() === "exiting";
@@ -283,15 +302,18 @@ function Tooltip(props) {
283
302
  function TooltipContent(props) {
284
303
  if (isServer) return null;
285
304
  let tooltipRef;
305
+ const locale = useLocale();
306
+ const direction = () => locale().direction;
286
307
  const { tooltipProps: ariaTooltipProps } = createTooltip({}, props.state);
287
308
  const [positionStyles, setPositionStyles] = createSignal({
288
309
  top: "0px",
289
310
  left: "0px",
290
311
  visibility: "visible"
291
312
  });
292
- const [renderedPlacement, setRenderedPlacement] = createSignal(resolvePlacement(props.placement));
313
+ const [renderedPlacement, setRenderedPlacement] = createSignal(resolvePlacement(props.placement, direction()));
293
314
  const [isEntering, setIsEntering] = createSignal(true);
294
- createEffect(() => {
315
+ createTrackedEffect(() => {
316
+ const _s2Cleanups = [];
295
317
  if (!isEntering()) return;
296
318
  if (!tooltipRef || !("getAnimations" in tooltipRef)) {
297
319
  setIsEntering(false);
@@ -309,9 +331,12 @@ function TooltipContent(props) {
309
331
  }).catch(() => {
310
332
  if (!canceled) setIsEntering(false);
311
333
  });
312
- onCleanup(() => {
334
+ _s2Cleanups.push(() => {
313
335
  canceled = true;
314
336
  });
337
+ return () => {
338
+ for (const c of _s2Cleanups) c();
339
+ };
315
340
  });
316
341
  const values = createMemo(() => ({
317
342
  isEntering: isEntering(),
@@ -337,7 +362,7 @@ function TooltipContent(props) {
337
362
  const viewportHeight = window.innerHeight;
338
363
  const containerPadding = props.containerPadding;
339
364
  const crossOffset = props.crossOffset;
340
- const placement = maybeFlipPlacement(resolvePlacement(props.placement), triggerRect, tooltipWidth, tooltipHeight, viewportWidth, viewportHeight, containerPadding, props.offset, props.shouldFlip);
365
+ const placement = maybeFlipPlacement(resolvePlacement(props.placement, direction()), triggerRect, tooltipWidth, tooltipHeight, viewportWidth, viewportHeight, containerPadding, props.offset, props.shouldFlip);
341
366
  let top = 0;
342
367
  let left = 0;
343
368
  switch (placement) {
@@ -356,7 +381,6 @@ function TooltipContent(props) {
356
381
  case "right":
357
382
  top = triggerRect.top + (triggerRect.height - tooltipHeight) / 2 + crossOffset;
358
383
  left = triggerRect.right + props.offset;
359
- break;
360
384
  }
361
385
  if (placement === "top" || placement === "bottom") {
362
386
  left = clamp(left, triggerRect.left - tooltipWidth + props.arrowSize + props.arrowBoundaryOffset, triggerRect.left + triggerRect.width - props.arrowSize - props.arrowBoundaryOffset);
@@ -373,7 +397,8 @@ function TooltipContent(props) {
373
397
  });
374
398
  return true;
375
399
  };
376
- createEffect(() => {
400
+ createTrackedEffect(() => {
401
+ const _s2Cleanups = [];
377
402
  props.placement;
378
403
  props.containerPadding;
379
404
  props.crossOffset;
@@ -403,19 +428,22 @@ function TooltipContent(props) {
403
428
  };
404
429
  window.addEventListener("scroll", closeOnScroll, true);
405
430
  window.addEventListener("resize", updatePosition);
406
- onCleanup(() => {
431
+ _s2Cleanups.push(() => {
407
432
  if (pendingRaf) cancelAnimationFrame(pendingRaf);
408
433
  if (pendingTimeout) clearTimeout(pendingTimeout);
409
434
  window.removeEventListener("scroll", closeOnScroll, true);
410
435
  window.removeEventListener("resize", updatePosition);
411
436
  });
437
+ return () => {
438
+ for (const c of _s2Cleanups) c();
439
+ };
412
440
  });
413
441
  const domProps = filterDOMProps(props, { global: true });
414
442
  const tooltipId = () => props.contextTooltipProps.id ?? domProps.id;
415
443
  const { ref: _ariaRef, ...cleanAriaProps } = ariaTooltipProps;
416
444
  const setRef = (el) => {
417
445
  tooltipRef = el;
418
- if (!props.dir) el.dir = getDocumentDirection();
446
+ if (!props.dir) el.dir = direction();
419
447
  if (!props.lang) {
420
448
  const documentLang = document.documentElement.lang;
421
449
  const navigatorLang = typeof navigator !== "undefined" ? navigator.language : "";
@@ -432,20 +460,16 @@ function TooltipContent(props) {
432
460
  "z-index": 1e5,
433
461
  ...positionStyles(),
434
462
  ...renderProps.style()
435
- }} data-placement={renderedPlacement()} data-entering={isEntering() || void 0} data-exiting={props.isExiting || void 0}>
463
+ }} data-placement={renderedPlacement()} data-entering={dataAttr(isEntering())} data-exiting={dataAttr(props.isExiting)}>
436
464
  {renderProps.renderChildren()}
437
465
  </div>
438
466
  </OverlayContainer>;
439
467
  }
440
- function resolvePlacement(placement) {
441
- if (placement === "start") return getDocumentDirection() === "rtl" ? "right" : "left";
442
- if (placement === "end") return getDocumentDirection() === "rtl" ? "left" : "right";
468
+ function resolvePlacement(placement, direction) {
469
+ if (placement === "start") return direction === "rtl" ? "right" : "left";
470
+ if (placement === "end") return direction === "rtl" ? "left" : "right";
443
471
  return placement;
444
472
  }
445
- function getDocumentDirection() {
446
- if (typeof document === "undefined") return "ltr";
447
- return document.documentElement.dir === "rtl" ? "rtl" : "ltr";
448
- }
449
473
  function maybeFlipPlacement(placement, triggerRect, tooltipWidth, tooltipHeight, viewportWidth, viewportHeight, containerPadding, offset, shouldFlip) {
450
474
  if (!shouldFlip) return placement;
451
475
  switch (placement) {