@neut/ui 0.0.8 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (581) hide show
  1. package/README.md +83 -56
  2. package/README.zh-CN.md +137 -0
  3. package/dist/components/accordion/Accordion/Accordion.context.js.map +1 -1
  4. package/dist/components/accordion/Accordion/Accordion.js +21 -20
  5. package/dist/components/accordion/Accordion/Accordion.js.map +1 -1
  6. package/dist/components/accordion/Accordion/Accordion.styles.d.ts +2 -0
  7. package/dist/components/accordion/Accordion/Accordion.styles.js +7 -0
  8. package/dist/components/accordion/Accordion/Accordion.styles.js.map +1 -0
  9. package/dist/components/accordion/Accordion/useAccordion.js +1 -3
  10. package/dist/components/accordion/Accordion/useAccordion.js.map +1 -1
  11. package/dist/components/accordion/AccordionContent/AccordionContent.js +25 -21
  12. package/dist/components/accordion/AccordionContent/AccordionContent.js.map +1 -1
  13. package/dist/components/accordion/AccordionContent/AccordionContent.styles.d.ts +5 -0
  14. package/dist/components/accordion/AccordionContent/AccordionContent.styles.js +9 -0
  15. package/dist/components/accordion/AccordionContent/AccordionContent.styles.js.map +1 -0
  16. package/dist/components/accordion/AccordionContent/index.d.ts +1 -0
  17. package/dist/components/accordion/AccordionItem/AccordionItem.context.js.map +1 -1
  18. package/dist/components/accordion/AccordionItem/AccordionItem.js +19 -18
  19. package/dist/components/accordion/AccordionItem/AccordionItem.js.map +1 -1
  20. package/dist/components/accordion/AccordionItem/AccordionItem.styles.d.ts +2 -0
  21. package/dist/components/accordion/AccordionItem/AccordionItem.styles.js +6 -0
  22. package/dist/components/accordion/AccordionItem/AccordionItem.styles.js.map +1 -0
  23. package/dist/components/accordion/AccordionItem/index.d.ts +1 -0
  24. package/dist/components/accordion/AccordionTrigger/AccordionTrigger.js +26 -18
  25. package/dist/components/accordion/AccordionTrigger/AccordionTrigger.js.map +1 -1
  26. package/dist/components/accordion/AccordionTrigger/AccordionTrigger.styles.d.ts +6 -0
  27. package/dist/components/accordion/AccordionTrigger/AccordionTrigger.styles.js +10 -0
  28. package/dist/components/accordion/AccordionTrigger/AccordionTrigger.styles.js.map +1 -0
  29. package/dist/components/accordion/AccordionTrigger/index.d.ts +1 -0
  30. package/dist/components/accordion/index.d.ts +4 -4
  31. package/dist/components/accordion/index.js +6 -5
  32. package/dist/components/alert/Alert/Alert.js +1 -1
  33. package/dist/components/alert/Alert/Alert.js.map +1 -1
  34. package/dist/components/alert/Alert/Alert.styles.js +3 -3
  35. package/dist/components/alert/Alert/Alert.styles.js.map +1 -1
  36. package/dist/components/alert/AlertAction/AlertAction.js +2 -2
  37. package/dist/components/alert/AlertAction/AlertAction.js.map +1 -1
  38. package/dist/components/alert/AlertAction/AlertAction.styles.d.ts +2 -1
  39. package/dist/components/alert/AlertAction/AlertAction.styles.js +1 -1
  40. package/dist/components/alert/AlertAction/AlertAction.styles.js.map +1 -1
  41. package/dist/components/alert/AlertDescription/AlertDescription.js +2 -2
  42. package/dist/components/alert/AlertDescription/AlertDescription.js.map +1 -1
  43. package/dist/components/alert/AlertDescription/AlertDescription.styles.d.ts +2 -1
  44. package/dist/components/alert/AlertDescription/AlertDescription.styles.js +2 -2
  45. package/dist/components/alert/AlertDescription/AlertDescription.styles.js.map +1 -1
  46. package/dist/components/alert/AlertTitle/AlertTitle.js +2 -2
  47. package/dist/components/alert/AlertTitle/AlertTitle.js.map +1 -1
  48. package/dist/components/alert/AlertTitle/AlertTitle.styles.d.ts +2 -1
  49. package/dist/components/alert/AlertTitle/AlertTitle.styles.js +2 -2
  50. package/dist/components/alert/AlertTitle/AlertTitle.styles.js.map +1 -1
  51. package/dist/components/alert-dialog/AlertDialog/AlertDialog.context.js.map +1 -1
  52. package/dist/components/alert-dialog/AlertDialog/AlertDialog.js +1 -1
  53. package/dist/components/alert-dialog/AlertDialog/AlertDialog.js.map +1 -1
  54. package/dist/components/alert-dialog/AlertDialogAction/AlertDialogAction.js.map +1 -1
  55. package/dist/components/alert-dialog/AlertDialogCancel/AlertDialogCancel.js +3 -3
  56. package/dist/components/alert-dialog/AlertDialogCancel/AlertDialogCancel.js.map +1 -1
  57. package/dist/components/alert-dialog/AlertDialogContent/AlertDialogContent.context.js.map +1 -1
  58. package/dist/components/alert-dialog/AlertDialogContent/AlertDialogContent.js +11 -11
  59. package/dist/components/alert-dialog/AlertDialogContent/AlertDialogContent.js.map +1 -1
  60. package/dist/components/alert-dialog/AlertDialogContent/AlertDialogContent.styles.d.ts +2 -1
  61. package/dist/components/alert-dialog/AlertDialogContent/AlertDialogContent.styles.js +2 -2
  62. package/dist/components/alert-dialog/AlertDialogContent/AlertDialogContent.styles.js.map +1 -1
  63. package/dist/components/alert-dialog/AlertDialogDescription/AlertDialogDescription.js +2 -2
  64. package/dist/components/alert-dialog/AlertDialogDescription/AlertDialogDescription.js.map +1 -1
  65. package/dist/components/alert-dialog/AlertDialogDescription/AlertDialogDescription.styles.d.ts +2 -1
  66. package/dist/components/alert-dialog/AlertDialogDescription/AlertDialogDescription.styles.js +2 -2
  67. package/dist/components/alert-dialog/AlertDialogDescription/AlertDialogDescription.styles.js.map +1 -1
  68. package/dist/components/alert-dialog/AlertDialogFooter/AlertDialogFooter.js +2 -2
  69. package/dist/components/alert-dialog/AlertDialogFooter/AlertDialogFooter.js.map +1 -1
  70. package/dist/components/alert-dialog/AlertDialogFooter/AlertDialogFooter.styles.d.ts +2 -1
  71. package/dist/components/alert-dialog/AlertDialogFooter/AlertDialogFooter.styles.js +2 -2
  72. package/dist/components/alert-dialog/AlertDialogFooter/AlertDialogFooter.styles.js.map +1 -1
  73. package/dist/components/alert-dialog/AlertDialogHeader/AlertDialogHeader.js +2 -2
  74. package/dist/components/alert-dialog/AlertDialogHeader/AlertDialogHeader.js.map +1 -1
  75. package/dist/components/alert-dialog/AlertDialogHeader/AlertDialogHeader.styles.d.ts +2 -1
  76. package/dist/components/alert-dialog/AlertDialogHeader/AlertDialogHeader.styles.js +2 -2
  77. package/dist/components/alert-dialog/AlertDialogHeader/AlertDialogHeader.styles.js.map +1 -1
  78. package/dist/components/alert-dialog/AlertDialogMedia/AlertDialogMedia.js +2 -2
  79. package/dist/components/alert-dialog/AlertDialogMedia/AlertDialogMedia.js.map +1 -1
  80. package/dist/components/alert-dialog/AlertDialogMedia/AlertDialogMedia.styles.d.ts +2 -1
  81. package/dist/components/alert-dialog/AlertDialogMedia/AlertDialogMedia.styles.js +2 -2
  82. package/dist/components/alert-dialog/AlertDialogMedia/AlertDialogMedia.styles.js.map +1 -1
  83. package/dist/components/alert-dialog/AlertDialogOverlay/AlertDialogOverlay.js +2 -2
  84. package/dist/components/alert-dialog/AlertDialogOverlay/AlertDialogOverlay.js.map +1 -1
  85. package/dist/components/alert-dialog/AlertDialogOverlay/AlertDialogOverlay.styles.d.ts +2 -1
  86. package/dist/components/alert-dialog/AlertDialogOverlay/AlertDialogOverlay.styles.js +2 -2
  87. package/dist/components/alert-dialog/AlertDialogOverlay/AlertDialogOverlay.styles.js.map +1 -1
  88. package/dist/components/alert-dialog/AlertDialogPortal/AlertDialogPortal.js +1 -1
  89. package/dist/components/alert-dialog/AlertDialogPortal/AlertDialogPortal.js.map +1 -1
  90. package/dist/components/alert-dialog/AlertDialogTitle/AlertDialogTitle.js +2 -2
  91. package/dist/components/alert-dialog/AlertDialogTitle/AlertDialogTitle.js.map +1 -1
  92. package/dist/components/alert-dialog/AlertDialogTitle/AlertDialogTitle.styles.d.ts +2 -1
  93. package/dist/components/alert-dialog/AlertDialogTitle/AlertDialogTitle.styles.js +2 -2
  94. package/dist/components/alert-dialog/AlertDialogTitle/AlertDialogTitle.styles.js.map +1 -1
  95. package/dist/components/alert-dialog/AlertDialogTrigger/AlertDialogTrigger.js.map +1 -1
  96. package/dist/components/alert-dialog/AlertDialogTrigger/useAlertDialogTrigger.js.map +1 -1
  97. package/dist/components/aspect-ratio/AspectRatio.js +1 -1
  98. package/dist/components/aspect-ratio/AspectRatio.js.map +1 -1
  99. package/dist/components/aspect-ratio/AspectRatio.styles.js.map +1 -1
  100. package/dist/components/avatar/Avatar/Avatar.context.js.map +1 -1
  101. package/dist/components/avatar/Avatar/Avatar.js +9 -9
  102. package/dist/components/avatar/Avatar/Avatar.js.map +1 -1
  103. package/dist/components/avatar/AvatarBadge/AvatarBadge.js +1 -1
  104. package/dist/components/avatar/AvatarBadge/AvatarBadge.js.map +1 -1
  105. package/dist/components/avatar/AvatarFallback/AvatarFallback.js +1 -1
  106. package/dist/components/avatar/AvatarFallback/AvatarFallback.js.map +1 -1
  107. package/dist/components/avatar/AvatarGroup/AvatarGroup.js +1 -1
  108. package/dist/components/avatar/AvatarGroup/AvatarGroup.js.map +1 -1
  109. package/dist/components/avatar/AvatarGroupCount/AvatarGroupCount.js +1 -1
  110. package/dist/components/avatar/AvatarGroupCount/AvatarGroupCount.js.map +1 -1
  111. package/dist/components/avatar/AvatarImage/AvatarImage.js +1 -1
  112. package/dist/components/avatar/AvatarImage/AvatarImage.js.map +1 -1
  113. package/dist/components/badge/Badge.js +1 -1
  114. package/dist/components/badge/Badge.js.map +1 -1
  115. package/dist/components/badge/Badge.styles.js +9 -10
  116. package/dist/components/badge/Badge.styles.js.map +1 -1
  117. package/dist/components/breadcrumb/Breadcrumb/Breadcrumb.js +1 -1
  118. package/dist/components/breadcrumb/Breadcrumb/Breadcrumb.js.map +1 -1
  119. package/dist/components/breadcrumb/BreadcrumbEllipsis/BreadcrumbEllipsis.js +1 -1
  120. package/dist/components/breadcrumb/BreadcrumbEllipsis/BreadcrumbEllipsis.js.map +1 -1
  121. package/dist/components/breadcrumb/BreadcrumbItem/BreadcrumbItem.js +1 -1
  122. package/dist/components/breadcrumb/BreadcrumbItem/BreadcrumbItem.js.map +1 -1
  123. package/dist/components/breadcrumb/BreadcrumbLink/BreadcrumbLink.js +6 -6
  124. package/dist/components/breadcrumb/BreadcrumbLink/BreadcrumbLink.js.map +1 -1
  125. package/dist/components/breadcrumb/BreadcrumbList/BreadcrumbList.js +1 -1
  126. package/dist/components/breadcrumb/BreadcrumbList/BreadcrumbList.js.map +1 -1
  127. package/dist/components/breadcrumb/BreadcrumbPage/BreadcrumbPage.js +1 -1
  128. package/dist/components/breadcrumb/BreadcrumbPage/BreadcrumbPage.js.map +1 -1
  129. package/dist/components/breadcrumb/BreadcrumbSeparator/BreadcrumbSeparator.js +1 -1
  130. package/dist/components/breadcrumb/BreadcrumbSeparator/BreadcrumbSeparator.js.map +1 -1
  131. package/dist/components/button/Button.js +34 -31
  132. package/dist/components/button/Button.js.map +1 -1
  133. package/dist/components/button/Button.styles.d.ts +1 -1
  134. package/dist/components/button/Button.styles.js +10 -10
  135. package/dist/components/button/Button.styles.js.map +1 -1
  136. package/dist/components/button/Button.types.d.ts +4 -30
  137. package/dist/components/button-group/ButtonGroup/ButtonGroup.js +1 -1
  138. package/dist/components/button-group/ButtonGroup/ButtonGroup.js.map +1 -1
  139. package/dist/components/button-group/ButtonGroup/ButtonGroup.styles.js.map +1 -1
  140. package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.js +1 -1
  141. package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.js.map +1 -1
  142. package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.styles.d.ts +2 -1
  143. package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.styles.js +2 -3
  144. package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.styles.js.map +1 -1
  145. package/dist/components/button-group/ButtonGroupText/ButtonGroupText.js +2 -2
  146. package/dist/components/button-group/ButtonGroupText/ButtonGroupText.js.map +1 -1
  147. package/dist/components/button-group/ButtonGroupText/ButtonGroupText.styles.d.ts +2 -1
  148. package/dist/components/button-group/ButtonGroupText/ButtonGroupText.styles.js +2 -3
  149. package/dist/components/button-group/ButtonGroupText/ButtonGroupText.styles.js.map +1 -1
  150. package/dist/components/card/Card/Card.js +6 -6
  151. package/dist/components/card/Card/Card.js.map +1 -1
  152. package/dist/components/card/Card/Card.styles.d.ts +2 -1
  153. package/dist/components/card/Card/Card.styles.js +2 -2
  154. package/dist/components/card/Card/Card.styles.js.map +1 -1
  155. package/dist/components/card/CardAction/CardAction.js +2 -2
  156. package/dist/components/card/CardAction/CardAction.js.map +1 -1
  157. package/dist/components/card/CardAction/CardAction.styles.d.ts +2 -1
  158. package/dist/components/card/CardAction/CardAction.styles.js +1 -1
  159. package/dist/components/card/CardAction/CardAction.styles.js.map +1 -1
  160. package/dist/components/card/CardContent/CardContent.js +2 -2
  161. package/dist/components/card/CardContent/CardContent.js.map +1 -1
  162. package/dist/components/card/CardContent/CardContent.styles.d.ts +2 -1
  163. package/dist/components/card/CardContent/CardContent.styles.js +2 -2
  164. package/dist/components/card/CardContent/CardContent.styles.js.map +1 -1
  165. package/dist/components/card/CardDescription/CardDescription.js +2 -2
  166. package/dist/components/card/CardDescription/CardDescription.js.map +1 -1
  167. package/dist/components/card/CardDescription/CardDescription.styles.d.ts +2 -1
  168. package/dist/components/card/CardDescription/CardDescription.styles.js +2 -2
  169. package/dist/components/card/CardDescription/CardDescription.styles.js.map +1 -1
  170. package/dist/components/card/CardFooter/CardFooter.js +2 -2
  171. package/dist/components/card/CardFooter/CardFooter.js.map +1 -1
  172. package/dist/components/card/CardFooter/CardFooter.styles.d.ts +2 -1
  173. package/dist/components/card/CardFooter/CardFooter.styles.js +2 -2
  174. package/dist/components/card/CardFooter/CardFooter.styles.js.map +1 -1
  175. package/dist/components/card/CardHeader/CardHeader.js +2 -2
  176. package/dist/components/card/CardHeader/CardHeader.js.map +1 -1
  177. package/dist/components/card/CardHeader/CardHeader.styles.d.ts +2 -1
  178. package/dist/components/card/CardHeader/CardHeader.styles.js +2 -2
  179. package/dist/components/card/CardHeader/CardHeader.styles.js.map +1 -1
  180. package/dist/components/card/CardTitle/CardTitle.js +2 -2
  181. package/dist/components/card/CardTitle/CardTitle.js.map +1 -1
  182. package/dist/components/card/CardTitle/CardTitle.styles.d.ts +2 -1
  183. package/dist/components/card/CardTitle/CardTitle.styles.js +1 -1
  184. package/dist/components/card/CardTitle/CardTitle.styles.js.map +1 -1
  185. package/dist/components/carousel/Carousel/Carousel.context.js.map +1 -1
  186. package/dist/components/carousel/Carousel/Carousel.js +14 -13
  187. package/dist/components/carousel/Carousel/Carousel.js.map +1 -1
  188. package/dist/components/carousel/Carousel/Carousel.styles.d.ts +2 -0
  189. package/dist/components/carousel/Carousel/Carousel.styles.js +6 -0
  190. package/dist/components/carousel/Carousel/Carousel.styles.js.map +1 -0
  191. package/dist/components/carousel/Carousel/useAutoPlay.js.map +1 -1
  192. package/dist/components/carousel/Carousel/useCarousel.js.map +1 -1
  193. package/dist/components/carousel/Carousel/useKeyboardNavigation.js.map +1 -1
  194. package/dist/components/carousel/CarouselContent/CarouselContent.js +1 -1
  195. package/dist/components/carousel/CarouselContent/CarouselContent.js.map +1 -1
  196. package/dist/components/carousel/CarouselContent/useItemSizeMeasure.js.map +1 -1
  197. package/dist/components/carousel/CarouselDots/CarouselDots.js +1 -1
  198. package/dist/components/carousel/CarouselDots/CarouselDots.js.map +1 -1
  199. package/dist/components/carousel/CarouselItem/CarouselItem.js +4 -3
  200. package/dist/components/carousel/CarouselItem/CarouselItem.js.map +1 -1
  201. package/dist/components/carousel/CarouselNext/CarouselNext.js +4 -4
  202. package/dist/components/carousel/CarouselNext/CarouselNext.js.map +1 -1
  203. package/dist/components/carousel/CarouselPrevious/CarouselPrevious.js +4 -4
  204. package/dist/components/carousel/CarouselPrevious/CarouselPrevious.js.map +1 -1
  205. package/dist/components/checkbox/Checkbox/Checkbox.js +18 -18
  206. package/dist/components/checkbox/Checkbox/Checkbox.js.map +1 -1
  207. package/dist/components/checkbox/Checkbox/Checkbox.styles.js.map +1 -1
  208. package/dist/components/checkbox/CheckboxIndicator/CheckboxIndicator.js +1 -1
  209. package/dist/components/checkbox/CheckboxIndicator/CheckboxIndicator.js.map +1 -1
  210. package/dist/components/collapsible/Collapsible/Collapsible.context.js.map +1 -1
  211. package/dist/components/collapsible/Collapsible/Collapsible.js +1 -1
  212. package/dist/components/collapsible/Collapsible/Collapsible.js.map +1 -1
  213. package/dist/components/collapsible/CollapsibleContent/CollapsibleContent.js +1 -1
  214. package/dist/components/collapsible/CollapsibleContent/CollapsibleContent.js.map +1 -1
  215. package/dist/components/collapsible/CollapsibleTrigger/CollapsibleTrigger.js +1 -1
  216. package/dist/components/collapsible/CollapsibleTrigger/CollapsibleTrigger.js.map +1 -1
  217. package/dist/components/collapsible/CollapsibleTrigger/CollapsibleTrigger.types.d.ts +1 -1
  218. package/dist/components/dialog/Dialog/Dialog.context.js.map +1 -1
  219. package/dist/components/dialog/Dialog/Dialog.js +1 -1
  220. package/dist/components/dialog/Dialog/Dialog.js.map +1 -1
  221. package/dist/components/dialog/DialogClose/DialogClose.js +4 -6
  222. package/dist/components/dialog/DialogClose/DialogClose.js.map +1 -1
  223. package/dist/components/dialog/DialogClose/DialogClose.types.d.ts +2 -2
  224. package/dist/components/dialog/DialogContent/DialogContent.context.js.map +1 -1
  225. package/dist/components/dialog/DialogContent/DialogContent.js +10 -10
  226. package/dist/components/dialog/DialogContent/DialogContent.js.map +1 -1
  227. package/dist/components/dialog/DialogDescription/DialogDescription.js +1 -1
  228. package/dist/components/dialog/DialogDescription/DialogDescription.js.map +1 -1
  229. package/dist/components/dialog/DialogFooter/DialogFooter.js +1 -1
  230. package/dist/components/dialog/DialogFooter/DialogFooter.js.map +1 -1
  231. package/dist/components/dialog/DialogHeader/DialogHeader.js +1 -1
  232. package/dist/components/dialog/DialogHeader/DialogHeader.js.map +1 -1
  233. package/dist/components/dialog/DialogOverlay/DialogOverlay.js +1 -1
  234. package/dist/components/dialog/DialogOverlay/DialogOverlay.js.map +1 -1
  235. package/dist/components/dialog/DialogPortal/DialogPortal.js +1 -1
  236. package/dist/components/dialog/DialogPortal/DialogPortal.js.map +1 -1
  237. package/dist/components/dialog/DialogTitle/DialogTitle.js +1 -1
  238. package/dist/components/dialog/DialogTitle/DialogTitle.js.map +1 -1
  239. package/dist/components/dialog/DialogTrigger/DialogTrigger.js.map +1 -1
  240. package/dist/components/dialog/DialogTrigger/useDialogTrigger.js.map +1 -1
  241. package/dist/components/field/Field/Field.js +5 -5
  242. package/dist/components/field/Field/Field.js.map +1 -1
  243. package/dist/components/field/Field/Field.styles.js +1 -1
  244. package/dist/components/field/Field/Field.styles.js.map +1 -1
  245. package/dist/components/field/FieldContent/FieldContent.js +1 -1
  246. package/dist/components/field/FieldContent/FieldContent.js.map +1 -1
  247. package/dist/components/field/FieldDescription/FieldDescription.js +2 -2
  248. package/dist/components/field/FieldDescription/FieldDescription.js.map +1 -1
  249. package/dist/components/field/FieldError/FieldError.js +2 -2
  250. package/dist/components/field/FieldError/FieldError.js.map +1 -1
  251. package/dist/components/field/FieldGroup/FieldGroup.js +1 -1
  252. package/dist/components/field/FieldGroup/FieldGroup.js.map +1 -1
  253. package/dist/components/field/FieldLabel/FieldLabel.js +1 -1
  254. package/dist/components/field/FieldLabel/FieldLabel.js.map +1 -1
  255. package/dist/components/field/FieldLegend/FieldLegend.js +5 -5
  256. package/dist/components/field/FieldLegend/FieldLegend.js.map +1 -1
  257. package/dist/components/field/FieldSeparator/FieldSeparator.js +14 -14
  258. package/dist/components/field/FieldSeparator/FieldSeparator.js.map +1 -1
  259. package/dist/components/field/FieldSet/FieldSet.js +1 -1
  260. package/dist/components/field/FieldSet/FieldSet.js.map +1 -1
  261. package/dist/components/field/FieldTitle/FieldTitle.js +1 -1
  262. package/dist/components/field/FieldTitle/FieldTitle.js.map +1 -1
  263. package/dist/components/image/Image.config.js +1 -1
  264. package/dist/components/image/Image.config.js.map +1 -1
  265. package/dist/components/image/Image.js +13 -13
  266. package/dist/components/image/Image.js.map +1 -1
  267. package/dist/components/image/Image.utils.js +67 -67
  268. package/dist/components/image/Image.utils.js.map +1 -1
  269. package/dist/components/image/ImageElement.js +19 -19
  270. package/dist/components/image/ImageElement.js.map +1 -1
  271. package/dist/components/image/ImagePreload.js +1 -1
  272. package/dist/components/image/ImagePreload.js.map +1 -1
  273. package/dist/components/input/Input.js +13 -13
  274. package/dist/components/input/Input.js.map +1 -1
  275. package/dist/components/input-group/InputGroup/InputGroup.js +2 -2
  276. package/dist/components/input-group/InputGroup/InputGroup.js.map +1 -1
  277. package/dist/components/input-group/InputGroupAddon/InputGroupAddon.js +5 -5
  278. package/dist/components/input-group/InputGroupAddon/InputGroupAddon.js.map +1 -1
  279. package/dist/components/input-group/InputGroupAddon/InputGroupAddon.styles.js +1 -1
  280. package/dist/components/input-group/InputGroupAddon/InputGroupAddon.styles.js.map +1 -1
  281. package/dist/components/input-group/InputGroupButton/InputGroupButton.js +9 -9
  282. package/dist/components/input-group/InputGroupButton/InputGroupButton.js.map +1 -1
  283. package/dist/components/input-group/InputGroupButton/InputGroupButton.styles.js.map +1 -1
  284. package/dist/components/input-group/InputGroupButton/InputGroupButton.types.d.ts +2 -3
  285. package/dist/components/input-group/InputGroupInput/InputGroupInput.js.map +1 -1
  286. package/dist/components/input-group/InputGroupText/InputGroupText.js +2 -2
  287. package/dist/components/input-group/InputGroupText/InputGroupText.js.map +1 -1
  288. package/dist/components/input-group/InputGroupTextarea/InputGroupTextarea.js.map +1 -1
  289. package/dist/components/item/Item/Item.js +9 -9
  290. package/dist/components/item/Item/Item.js.map +1 -1
  291. package/dist/components/item/Item/Item.styles.js +3 -3
  292. package/dist/components/item/Item/Item.styles.js.map +1 -1
  293. package/dist/components/item/ItemActions/ItemActions.js +1 -1
  294. package/dist/components/item/ItemActions/ItemActions.js.map +1 -1
  295. package/dist/components/item/ItemContent/ItemContent.js +1 -1
  296. package/dist/components/item/ItemContent/ItemContent.js.map +1 -1
  297. package/dist/components/item/ItemDescription/ItemDescription.js +2 -2
  298. package/dist/components/item/ItemDescription/ItemDescription.js.map +1 -1
  299. package/dist/components/item/ItemFooter/ItemFooter.js +1 -1
  300. package/dist/components/item/ItemFooter/ItemFooter.js.map +1 -1
  301. package/dist/components/item/ItemGroup/ItemGroup.js +1 -1
  302. package/dist/components/item/ItemGroup/ItemGroup.js.map +1 -1
  303. package/dist/components/item/ItemHeader/ItemHeader.js +1 -1
  304. package/dist/components/item/ItemHeader/ItemHeader.js.map +1 -1
  305. package/dist/components/item/ItemMedia/ItemMedia.js +5 -5
  306. package/dist/components/item/ItemMedia/ItemMedia.js.map +1 -1
  307. package/dist/components/item/ItemMedia/ItemMedia.styles.js.map +1 -1
  308. package/dist/components/item/ItemSeparator/ItemSeparator.js.map +1 -1
  309. package/dist/components/item/ItemTitle/ItemTitle.js +1 -1
  310. package/dist/components/item/ItemTitle/ItemTitle.js.map +1 -1
  311. package/dist/components/kbd/Kbd.js +2 -2
  312. package/dist/components/kbd/Kbd.js.map +1 -1
  313. package/dist/components/label/Label.js +1 -1
  314. package/dist/components/label/Label.js.map +1 -1
  315. package/dist/components/pagination/Pagination/Pagination.js +1 -1
  316. package/dist/components/pagination/Pagination/Pagination.js.map +1 -1
  317. package/dist/components/pagination/PaginationContent/PaginationContent.js +1 -1
  318. package/dist/components/pagination/PaginationContent/PaginationContent.js.map +1 -1
  319. package/dist/components/pagination/PaginationEllipsis/PaginationEllipsis.js +1 -1
  320. package/dist/components/pagination/PaginationEllipsis/PaginationEllipsis.js.map +1 -1
  321. package/dist/components/pagination/PaginationItem/PaginationItem.js +1 -1
  322. package/dist/components/pagination/PaginationItem/PaginationItem.js.map +1 -1
  323. package/dist/components/pagination/PaginationLink/PaginationLink.js +13 -10
  324. package/dist/components/pagination/PaginationLink/PaginationLink.js.map +1 -1
  325. package/dist/components/pagination/PaginationNext/PaginationNext.js +5 -5
  326. package/dist/components/pagination/PaginationNext/PaginationNext.js.map +1 -1
  327. package/dist/components/pagination/PaginationPrevious/PaginationPrevious.js +5 -5
  328. package/dist/components/pagination/PaginationPrevious/PaginationPrevious.js.map +1 -1
  329. package/dist/components/progress/Progress/Progress.context.js.map +1 -1
  330. package/dist/components/progress/Progress/Progress.js +1 -1
  331. package/dist/components/progress/Progress/Progress.js.map +1 -1
  332. package/dist/components/progress/ProgressIndicator/ProgressIndicator.js +1 -1
  333. package/dist/components/progress/ProgressIndicator/ProgressIndicator.js.map +1 -1
  334. package/dist/components/progress/ProgressIndicator/ProgressIndicator.styles.d.ts +1 -1
  335. package/dist/components/progress/ProgressIndicator/ProgressIndicator.styles.js +1 -1
  336. package/dist/components/progress/ProgressIndicator/ProgressIndicator.styles.js.map +1 -1
  337. package/dist/components/progress/ProgressLabel/ProgressLabel.js +1 -1
  338. package/dist/components/progress/ProgressLabel/ProgressLabel.js.map +1 -1
  339. package/dist/components/progress/ProgressTrack/ProgressTrack.js +1 -1
  340. package/dist/components/progress/ProgressTrack/ProgressTrack.js.map +1 -1
  341. package/dist/components/progress/ProgressTrack/ProgressTrack.styles.d.ts +1 -1
  342. package/dist/components/progress/ProgressTrack/ProgressTrack.styles.js +1 -1
  343. package/dist/components/progress/ProgressTrack/ProgressTrack.styles.js.map +1 -1
  344. package/dist/components/progress/ProgressValue/ProgressValue.js +1 -1
  345. package/dist/components/progress/ProgressValue/ProgressValue.js.map +1 -1
  346. package/dist/components/progress/ProgressValue/ProgressValue.styles.d.ts +1 -1
  347. package/dist/components/progress/ProgressValue/ProgressValue.styles.js +1 -1
  348. package/dist/components/progress/ProgressValue/ProgressValue.styles.js.map +1 -1
  349. package/dist/components/scroll-area/ScrollArea/ScrollArea.context.js.map +1 -1
  350. package/dist/components/scroll-area/ScrollArea/ScrollArea.js +2 -2
  351. package/dist/components/scroll-area/ScrollArea/ScrollArea.js.map +1 -1
  352. package/dist/components/scroll-area/ScrollArea/ScrollArea.utils.js.map +1 -1
  353. package/dist/components/scroll-area/ScrollBar/ScrollBar.js +26 -26
  354. package/dist/components/scroll-area/ScrollBar/ScrollBar.js.map +1 -1
  355. package/dist/components/separator/Separator.js +7 -7
  356. package/dist/components/separator/Separator.js.map +1 -1
  357. package/dist/components/separator/Separator.styles.js +1 -1
  358. package/dist/components/separator/Separator.styles.js.map +1 -1
  359. package/dist/components/sidebar/Sidebar/Sidebar.js +10 -10
  360. package/dist/components/sidebar/Sidebar/Sidebar.js.map +1 -1
  361. package/dist/components/sidebar/Sidebar/index.d.ts +1 -0
  362. package/dist/components/sidebar/SidebarContent/SidebarContent.js +1 -1
  363. package/dist/components/sidebar/SidebarContent/SidebarContent.js.map +1 -1
  364. package/dist/components/sidebar/SidebarContent/index.d.ts +1 -0
  365. package/dist/components/sidebar/SidebarFooter/SidebarFooter.js +1 -1
  366. package/dist/components/sidebar/SidebarFooter/SidebarFooter.js.map +1 -1
  367. package/dist/components/sidebar/SidebarFooter/index.d.ts +1 -0
  368. package/dist/components/sidebar/SidebarGroup/SidebarGroup.js +1 -1
  369. package/dist/components/sidebar/SidebarGroup/SidebarGroup.js.map +1 -1
  370. package/dist/components/sidebar/SidebarGroup/index.d.ts +1 -0
  371. package/dist/components/sidebar/SidebarGroupAction/SidebarGroupAction.js +5 -5
  372. package/dist/components/sidebar/SidebarGroupAction/SidebarGroupAction.js.map +1 -1
  373. package/dist/components/sidebar/SidebarGroupAction/index.d.ts +1 -0
  374. package/dist/components/sidebar/SidebarGroupContent/SidebarGroupContent.js +1 -1
  375. package/dist/components/sidebar/SidebarGroupContent/SidebarGroupContent.js.map +1 -1
  376. package/dist/components/sidebar/SidebarGroupContent/index.d.ts +1 -0
  377. package/dist/components/sidebar/SidebarGroupLabel/SidebarGroupLabel.js +5 -5
  378. package/dist/components/sidebar/SidebarGroupLabel/SidebarGroupLabel.js.map +1 -1
  379. package/dist/components/sidebar/SidebarGroupLabel/index.d.ts +1 -0
  380. package/dist/components/sidebar/SidebarHeader/SidebarHeader.js +1 -1
  381. package/dist/components/sidebar/SidebarHeader/SidebarHeader.js.map +1 -1
  382. package/dist/components/sidebar/SidebarHeader/index.d.ts +1 -0
  383. package/dist/components/sidebar/SidebarInput/SidebarInput.js +1 -1
  384. package/dist/components/sidebar/SidebarInput/SidebarInput.js.map +1 -1
  385. package/dist/components/sidebar/SidebarInput/index.d.ts +1 -0
  386. package/dist/components/sidebar/SidebarInset/SidebarInset.js +2 -2
  387. package/dist/components/sidebar/SidebarInset/SidebarInset.js.map +1 -1
  388. package/dist/components/sidebar/SidebarInset/index.d.ts +1 -0
  389. package/dist/components/sidebar/SidebarMenu/SidebarMenu.js +1 -1
  390. package/dist/components/sidebar/SidebarMenu/SidebarMenu.js.map +1 -1
  391. package/dist/components/sidebar/SidebarMenu/index.d.ts +1 -0
  392. package/dist/components/sidebar/SidebarMenuBadge/SidebarMenuBadge.js +2 -2
  393. package/dist/components/sidebar/SidebarMenuBadge/SidebarMenuBadge.js.map +1 -1
  394. package/dist/components/sidebar/SidebarMenuBadge/index.d.ts +1 -0
  395. package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.js +47 -31
  396. package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.js.map +1 -1
  397. package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.styles.js +5 -6
  398. package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.styles.js.map +1 -1
  399. package/dist/components/sidebar/SidebarMenuButton/index.d.ts +1 -0
  400. package/dist/components/sidebar/SidebarMenuItem/SidebarMenuItem.js +1 -1
  401. package/dist/components/sidebar/SidebarMenuItem/SidebarMenuItem.js.map +1 -1
  402. package/dist/components/sidebar/SidebarMenuItem/index.d.ts +1 -0
  403. package/dist/components/sidebar/SidebarMenuSkeleton/SidebarMenuSkeleton.js +7 -7
  404. package/dist/components/sidebar/SidebarMenuSkeleton/SidebarMenuSkeleton.js.map +1 -1
  405. package/dist/components/sidebar/SidebarMenuSkeleton/index.d.ts +1 -0
  406. package/dist/components/sidebar/SidebarMenuSub/SidebarMenuSub.js +2 -2
  407. package/dist/components/sidebar/SidebarMenuSub/SidebarMenuSub.js.map +1 -1
  408. package/dist/components/sidebar/SidebarMenuSub/index.d.ts +1 -0
  409. package/dist/components/sidebar/SidebarMenuSubButton/SidebarMenuSubButton.js +9 -9
  410. package/dist/components/sidebar/SidebarMenuSubButton/SidebarMenuSubButton.js.map +1 -1
  411. package/dist/components/sidebar/SidebarMenuSubButton/index.d.ts +1 -0
  412. package/dist/components/sidebar/SidebarMenuSubItem/SidebarMenuSubItem.js +1 -1
  413. package/dist/components/sidebar/SidebarMenuSubItem/SidebarMenuSubItem.js.map +1 -1
  414. package/dist/components/sidebar/SidebarMenuSubItem/index.d.ts +1 -0
  415. package/dist/components/sidebar/SidebarProvider/SidebarProvider.consts.js +1 -1
  416. package/dist/components/sidebar/SidebarProvider/SidebarProvider.consts.js.map +1 -1
  417. package/dist/components/sidebar/SidebarProvider/SidebarProvider.context.js.map +1 -1
  418. package/dist/components/sidebar/SidebarProvider/SidebarProvider.js +17 -17
  419. package/dist/components/sidebar/SidebarProvider/SidebarProvider.js.map +1 -1
  420. package/dist/components/sidebar/SidebarRail/SidebarRail.js +2 -2
  421. package/dist/components/sidebar/SidebarRail/SidebarRail.js.map +1 -1
  422. package/dist/components/sidebar/SidebarRail/index.d.ts +1 -0
  423. package/dist/components/sidebar/SidebarSeparator/SidebarSeparator.js.map +1 -1
  424. package/dist/components/sidebar/SidebarSeparator/index.d.ts +1 -0
  425. package/dist/components/sidebar/SidebarTrigger/SidebarTrigger.js.map +1 -1
  426. package/dist/components/sidebar/SidebarTrigger/index.d.ts +1 -0
  427. package/dist/components/sidebar/index.d.ts +21 -21
  428. package/dist/components/skeleton/Skeleton.js +2 -2
  429. package/dist/components/skeleton/Skeleton.js.map +1 -1
  430. package/dist/components/slider/Slider/Slider.context.js.map +1 -1
  431. package/dist/components/slider/Slider/Slider.js +10 -10
  432. package/dist/components/slider/Slider/Slider.js.map +1 -1
  433. package/dist/components/slider/Slider/useSlider.js.map +1 -1
  434. package/dist/components/slider/SliderControl/SliderControl.js +1 -1
  435. package/dist/components/slider/SliderControl/SliderControl.js.map +1 -1
  436. package/dist/components/slider/SliderControl/useSliderControl.js.map +1 -1
  437. package/dist/components/slider/SliderIndicator/SliderIndicator.js +1 -1
  438. package/dist/components/slider/SliderIndicator/SliderIndicator.js.map +1 -1
  439. package/dist/components/slider/SliderIndicator/SliderIndicator.styles.js +1 -1
  440. package/dist/components/slider/SliderIndicator/SliderIndicator.styles.js.map +1 -1
  441. package/dist/components/slider/SliderIndicator/useSliderIndicator.js.map +1 -1
  442. package/dist/components/slider/SliderThumb/SliderThumb.js +1 -1
  443. package/dist/components/slider/SliderThumb/SliderThumb.js.map +1 -1
  444. package/dist/components/slider/SliderThumb/SliderThumb.styles.js +1 -1
  445. package/dist/components/slider/SliderThumb/SliderThumb.styles.js.map +1 -1
  446. package/dist/components/slider/SliderThumb/useSliderThumb.js.map +1 -1
  447. package/dist/components/slider/SliderTrack/SliderTrack.js +1 -1
  448. package/dist/components/slider/SliderTrack/SliderTrack.js.map +1 -1
  449. package/dist/components/slider/SliderTrack/SliderTrack.styles.d.ts +1 -1
  450. package/dist/components/slider/SliderTrack/SliderTrack.styles.js +1 -1
  451. package/dist/components/slider/SliderTrack/SliderTrack.styles.js.map +1 -1
  452. package/dist/components/spinner/Spinner.js.map +1 -1
  453. package/dist/components/spinner/Spinner.styles.js.map +1 -1
  454. package/dist/components/switch/Switch.js +19 -19
  455. package/dist/components/switch/Switch.js.map +1 -1
  456. package/dist/components/switch/Switch.styles.js +2 -2
  457. package/dist/components/switch/Switch.styles.js.map +1 -1
  458. package/dist/components/textarea/Textarea.js +2 -2
  459. package/dist/components/textarea/Textarea.js.map +1 -1
  460. package/dist/components/toast/components/Assets.js +1 -1
  461. package/dist/components/toast/components/Assets.js.map +1 -1
  462. package/dist/components/toast/components/Toast.js +2 -5
  463. package/dist/components/toast/components/Toast.js.map +1 -1
  464. package/dist/components/toast/components/ToastActions.js +1 -1
  465. package/dist/components/toast/components/ToastActions.js.map +1 -1
  466. package/dist/components/toast/components/ToastContent.js +1 -1
  467. package/dist/components/toast/components/ToastContent.js.map +1 -1
  468. package/dist/components/toast/components/ToastIcon.js +1 -1
  469. package/dist/components/toast/components/ToastIcon.js.map +1 -1
  470. package/dist/components/toast/components/Toaster.js +1 -1
  471. package/dist/components/toast/components/Toaster.js.map +1 -1
  472. package/dist/components/toast/hooks/useSwipe.js.map +1 -1
  473. package/dist/components/toast/hooks/useTheme.js.map +1 -1
  474. package/dist/components/toast/hooks/useToastHeight.js.map +1 -1
  475. package/dist/components/toast/hooks/useToastSubscription.js +3 -2
  476. package/dist/components/toast/hooks/useToastSubscription.js.map +1 -1
  477. package/dist/components/toast/hooks/useToastTimer.js.map +1 -1
  478. package/dist/components/toast/hooks/useToasterKeyboard.js.map +1 -1
  479. package/dist/components/toast/hooks.js +3 -2
  480. package/dist/components/toast/hooks.js.map +1 -1
  481. package/dist/components/toast/state.js +5 -5
  482. package/dist/components/toast/state.js.map +1 -1
  483. package/dist/components/toast/utils.js.map +1 -1
  484. package/dist/components/tooltip/Tooltip/Tooltip.context.d.ts +2 -11
  485. package/dist/components/tooltip/Tooltip/Tooltip.context.js +4 -4
  486. package/dist/components/tooltip/Tooltip/Tooltip.context.js.map +1 -1
  487. package/dist/components/tooltip/Tooltip/Tooltip.d.ts +21 -5
  488. package/dist/components/tooltip/Tooltip/Tooltip.js +60 -23
  489. package/dist/components/tooltip/Tooltip/Tooltip.js.map +1 -1
  490. package/dist/components/tooltip/Tooltip/Tooltip.types.d.ts +58 -0
  491. package/dist/components/tooltip/Tooltip/index.d.ts +2 -0
  492. package/dist/components/tooltip/TooltipArrow/TooltipArrow.d.ts +34 -1
  493. package/dist/components/tooltip/TooltipArrow/TooltipArrow.js +48 -12
  494. package/dist/components/tooltip/TooltipArrow/TooltipArrow.js.map +1 -1
  495. package/dist/components/tooltip/TooltipArrow/index.d.ts +1 -0
  496. package/dist/components/tooltip/TooltipContent/TooltipContent.context.d.ts +19 -5
  497. package/dist/components/tooltip/TooltipContent/TooltipContent.context.js +4 -4
  498. package/dist/components/tooltip/TooltipContent/TooltipContent.context.js.map +1 -1
  499. package/dist/components/tooltip/TooltipContent/TooltipContent.d.ts +10 -1
  500. package/dist/components/tooltip/TooltipContent/TooltipContent.js +60 -46
  501. package/dist/components/tooltip/TooltipContent/TooltipContent.js.map +1 -1
  502. package/dist/components/tooltip/TooltipContent/TooltipContent.types.d.ts +13 -3
  503. package/dist/components/tooltip/TooltipContent/TooltipContent.utils.d.ts +57 -6
  504. package/dist/components/tooltip/TooltipContent/TooltipContent.utils.js +34 -58
  505. package/dist/components/tooltip/TooltipContent/TooltipContent.utils.js.map +1 -1
  506. package/dist/components/tooltip/TooltipContent/index.d.ts +7 -0
  507. package/dist/components/tooltip/TooltipContent/useTooltipContent.d.ts +45 -8
  508. package/dist/components/tooltip/TooltipContent/useTooltipContent.js +70 -41
  509. package/dist/components/tooltip/TooltipContent/useTooltipContent.js.map +1 -1
  510. package/dist/components/tooltip/TooltipGroup/TooltipGroup.context.d.ts +29 -0
  511. package/dist/components/tooltip/TooltipGroup/TooltipGroup.context.js +10 -0
  512. package/dist/components/tooltip/TooltipGroup/TooltipGroup.context.js.map +1 -0
  513. package/dist/components/tooltip/TooltipGroup/TooltipGroup.d.ts +2 -0
  514. package/dist/components/tooltip/TooltipGroup/TooltipGroup.js +25 -0
  515. package/dist/components/tooltip/TooltipGroup/TooltipGroup.js.map +1 -0
  516. package/dist/components/tooltip/TooltipGroup/TooltipGroup.types.d.ts +10 -0
  517. package/dist/components/tooltip/TooltipGroup/index.d.ts +4 -0
  518. package/dist/components/tooltip/TooltipTrigger/TooltipTrigger.d.ts +4 -2
  519. package/dist/components/tooltip/TooltipTrigger/TooltipTrigger.js +26 -6
  520. package/dist/components/tooltip/TooltipTrigger/TooltipTrigger.js.map +1 -1
  521. package/dist/components/tooltip/TooltipTrigger/TooltipTrigger.types.d.ts +3 -0
  522. package/dist/components/tooltip/TooltipTrigger/index.d.ts +3 -0
  523. package/dist/components/tooltip/TooltipTrigger/useTooltipTrigger.d.ts +29 -2
  524. package/dist/components/tooltip/TooltipTrigger/useTooltipTrigger.js +27 -27
  525. package/dist/components/tooltip/TooltipTrigger/useTooltipTrigger.js.map +1 -1
  526. package/dist/components/tooltip/index.d.ts +6 -0
  527. package/dist/components/tooltip/index.js +2 -1
  528. package/dist/hooks/useFontLoader.js +1 -1
  529. package/dist/hooks/useFontLoader.js.map +1 -1
  530. package/dist/index.js +155 -152
  531. package/dist/lib/index.d.ts +1 -0
  532. package/dist/lib/positioner/auto-update.d.ts +19 -0
  533. package/dist/lib/positioner/auto-update.js +20 -0
  534. package/dist/lib/positioner/auto-update.js.map +1 -0
  535. package/dist/lib/positioner/core/compute-position.d.ts +9 -0
  536. package/dist/lib/positioner/core/compute-position.js +47 -0
  537. package/dist/lib/positioner/core/compute-position.js.map +1 -0
  538. package/dist/lib/positioner/core/placement.d.ts +14 -0
  539. package/dist/lib/positioner/core/placement.js +45 -0
  540. package/dist/lib/positioner/core/placement.js.map +1 -0
  541. package/dist/lib/positioner/create-positioner.d.ts +63 -0
  542. package/dist/lib/positioner/create-positioner.js +51 -0
  543. package/dist/lib/positioner/create-positioner.js.map +1 -0
  544. package/dist/lib/positioner/index.d.ts +11 -0
  545. package/dist/lib/positioner/middleware/arrow.d.ts +23 -0
  546. package/dist/lib/positioner/middleware/arrow.js +23 -0
  547. package/dist/lib/positioner/middleware/arrow.js.map +1 -0
  548. package/dist/lib/positioner/middleware/containing-block-offset.d.ts +27 -0
  549. package/dist/lib/positioner/middleware/containing-block-offset.js +46 -0
  550. package/dist/lib/positioner/middleware/containing-block-offset.js.map +1 -0
  551. package/dist/lib/positioner/middleware/flip.d.ts +9 -0
  552. package/dist/lib/positioner/middleware/flip.js +54 -0
  553. package/dist/lib/positioner/middleware/flip.js.map +1 -0
  554. package/dist/lib/positioner/middleware/hide.d.ts +22 -0
  555. package/dist/lib/positioner/middleware/hide.js +19 -0
  556. package/dist/lib/positioner/middleware/hide.js.map +1 -0
  557. package/dist/lib/positioner/middleware/index.d.ts +13 -0
  558. package/dist/lib/positioner/middleware/offset.d.ts +10 -0
  559. package/dist/lib/positioner/middleware/offset.js +21 -0
  560. package/dist/lib/positioner/middleware/offset.js.map +1 -0
  561. package/dist/lib/positioner/middleware/shift.d.ts +13 -0
  562. package/dist/lib/positioner/middleware/shift.js +30 -0
  563. package/dist/lib/positioner/middleware/shift.js.map +1 -0
  564. package/dist/lib/positioner/middleware/size.d.ts +13 -0
  565. package/dist/lib/positioner/types.d.ts +74 -0
  566. package/dist/lib/positioner/utils/dom.d.ts +16 -0
  567. package/dist/lib/positioner/utils/dom.js +43 -0
  568. package/dist/lib/positioner/utils/dom.js.map +1 -0
  569. package/dist/lib/positioner/virtual-element.d.ts +21 -0
  570. package/dist/types/props.types.d.ts +10 -9
  571. package/dist/ui.css +2 -2
  572. package/dist/utils/clsx.js.map +1 -1
  573. package/dist/utils/index.d.ts +1 -0
  574. package/dist/utils/index.js +3 -2
  575. package/dist/utils/logger.d.ts +73 -0
  576. package/dist/utils/logger.js +37 -0
  577. package/dist/utils/logger.js.map +1 -0
  578. package/dist/utils/warn-once.js.map +1 -1
  579. package/package.json +13 -12
  580. package/dist/components/alert-dialog/AlertDialog/AlertDialog.styles.d.ts +0 -0
  581. package/dist/components/carousel/CarouselContent/CarouselContent.styles.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"TooltipContent.utils.js","names":[],"sources":["../../../../src/components/tooltip/TooltipContent/TooltipContent.utils.ts"],"sourcesContent":["export function computePosition(\n trigger: HTMLElement,\n content: HTMLElement,\n side: \"top\" | \"bottom\" | \"left\" | \"right\",\n align: \"start\" | \"center\" | \"end\",\n alignOffset: number,\n sideOffset: number,\n) {\n const rect = trigger.getBoundingClientRect();\n const contentWidth = content.offsetWidth;\n const contentHeight = content.offsetHeight;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const MARGIN = 4;\n\n let top = 0;\n let left = 0;\n let resolvedSide = side;\n let resolvedAlign = align;\n\n // --- Flip:优先检测对侧是否有足够空间,再决定最终 side ---\n switch (side) {\n case \"top\":\n if (\n rect.top < contentHeight + sideOffset &&\n rect.bottom + sideOffset + contentHeight <= vh\n ) {\n resolvedSide = \"bottom\";\n }\n break;\n case \"bottom\":\n if (\n rect.bottom + sideOffset + contentHeight > vh &&\n rect.top - sideOffset - contentHeight >= 0\n ) {\n resolvedSide = \"top\";\n }\n break;\n case \"left\":\n if (\n rect.left < contentWidth + sideOffset &&\n rect.right + sideOffset + contentWidth <= vw\n ) {\n resolvedSide = \"right\";\n }\n break;\n case \"right\":\n if (\n rect.right + sideOffset + contentWidth > vw &&\n rect.left - sideOffset - contentWidth >= 0\n ) {\n resolvedSide = \"left\";\n }\n break;\n }\n\n // --- 主轴位置(基于 resolvedSide)---\n switch (resolvedSide) {\n case \"top\":\n top = rect.top - contentHeight - sideOffset;\n break;\n case \"bottom\":\n top = rect.bottom + sideOffset;\n break;\n case \"left\":\n left = rect.left - contentWidth - sideOffset;\n break;\n case \"right\":\n left = rect.right + sideOffset;\n break;\n }\n\n // --- 交叉轴位置(align)---\n if (resolvedSide === \"top\" || resolvedSide === \"bottom\") {\n switch (align) {\n case \"start\":\n left = rect.left + alignOffset;\n break;\n case \"center\":\n left = rect.left + rect.width / 2 - contentWidth / 2 + alignOffset;\n break;\n case \"end\":\n left = rect.right - contentWidth - alignOffset;\n break;\n }\n } else {\n switch (align) {\n case \"start\":\n top = rect.top + alignOffset;\n break;\n case \"center\":\n top = rect.top + rect.height / 2 - contentHeight / 2 + alignOffset;\n break;\n case \"end\":\n top = rect.bottom - contentHeight - alignOffset;\n break;\n }\n }\n\n // --- Shift:贴边平移,并更新 resolvedAlign ---\n if (resolvedSide === \"top\" || resolvedSide === \"bottom\") {\n if (left < MARGIN) {\n left = MARGIN;\n resolvedAlign = \"start\";\n } else if (left + contentWidth > vw - MARGIN) {\n left = vw - contentWidth - MARGIN;\n resolvedAlign = \"end\";\n }\n } else {\n if (top < MARGIN) {\n top = MARGIN;\n resolvedAlign = \"start\";\n } else if (top + contentHeight > vh - MARGIN) {\n top = vh - contentHeight - MARGIN;\n resolvedAlign = \"end\";\n }\n }\n\n return { top, left, side: resolvedSide, align: resolvedAlign };\n}\n"],"mappings":";AAAA,SAAgB,EACd,GACA,GACA,GACA,GACA,GACA,GACA;CACA,IAAM,IAAO,EAAQ,uBAAuB,EACtC,IAAe,EAAQ,aACvB,IAAgB,EAAQ,cACxB,IAAK,OAAO,YACZ,IAAK,OAAO,aAGd,IAAM,GACN,IAAO,GACP,IAAe,GACf,IAAgB;AAGpB,SAAQ,GAAR;EACE,KAAK;AACH,GACE,EAAK,MAAM,IAAgB,KAC3B,EAAK,SAAS,IAAa,KAAiB,MAE5C,IAAe;AAEjB;EACF,KAAK;AACH,GACE,EAAK,SAAS,IAAa,IAAgB,KAC3C,EAAK,MAAM,IAAa,KAAiB,MAEzC,IAAe;AAEjB;EACF,KAAK;AACH,GACE,EAAK,OAAO,IAAe,KAC3B,EAAK,QAAQ,IAAa,KAAgB,MAE1C,IAAe;AAEjB;EACF,KAAK;AACH,GACE,EAAK,QAAQ,IAAa,IAAe,KACzC,EAAK,OAAO,IAAa,KAAgB,MAEzC,IAAe;AAEjB;;AAIJ,SAAQ,GAAR;EACE,KAAK;AACH,OAAM,EAAK,MAAM,IAAgB;AACjC;EACF,KAAK;AACH,OAAM,EAAK,SAAS;AACpB;EACF,KAAK;AACH,OAAO,EAAK,OAAO,IAAe;AAClC;EACF,KAAK;AACH,OAAO,EAAK,QAAQ;AACpB;;AAIJ,KAAI,MAAiB,SAAS,MAAiB,SAC7C,SAAQ,GAAR;EACE,KAAK;AACH,OAAO,EAAK,OAAO;AACnB;EACF,KAAK;AACH,OAAO,EAAK,OAAO,EAAK,QAAQ,IAAI,IAAe,IAAI;AACvD;EACF,KAAK;AACH,OAAO,EAAK,QAAQ,IAAe;AACnC;;KAGJ,SAAQ,GAAR;EACE,KAAK;AACH,OAAM,EAAK,MAAM;AACjB;EACF,KAAK;AACH,OAAM,EAAK,MAAM,EAAK,SAAS,IAAI,IAAgB,IAAI;AACvD;EACF,KAAK;AACH,OAAM,EAAK,SAAS,IAAgB;AACpC;;AAuBN,QAlBI,MAAiB,SAAS,MAAiB,WACzC,IAAO,KACT,IAAO,GACP,IAAgB,WACP,IAAO,IAAe,IAAK,MACpC,IAAO,IAAK,IAAe,GAC3B,IAAgB,SAGd,IAAM,KACR,IAAM,GACN,IAAgB,WACP,IAAM,IAAgB,IAAK,MACpC,IAAM,IAAK,IAAgB,GAC3B,IAAgB,QAIb;EAAE;EAAK;EAAM,MAAM;EAAc,OAAO;EAAe"}
1
+ {"version":3,"file":"TooltipContent.utils.js","names":[],"sources":["../../../../src/components/tooltip/TooltipContent/TooltipContent.utils.ts"],"sourcesContent":["import {\n offset,\n flip,\n shift,\n arrow,\n hide,\n containingBlockOffset,\n getSide,\n getAlignment,\n type Middleware,\n type Placement,\n type Side,\n type Alignment,\n} from \"~/lib\";\n\n/**\n * 把 shadcn/Radix 风格的 side + align 拆分参数,转换成核心库统一用的\n * `Placement` 字符串(比如 side='top' + align='start' → 'top-start')。\n * align 是 'center'(默认对齐、不偏移)时不带后缀,直接是 side 本身。\n */\nexport function toPlacement(\n side: Side,\n align: Alignment | \"center\",\n): Placement {\n return align === \"center\" ? side : (`${side}-${align}` as Placement);\n}\n\n/**\n * 根据最终生效的 placement,算出缩放动画应该以哪个点为锚点(CSS transform-origin)。\n * 锚点应该落在\"贴近 trigger 的那条边\"上——比如 placement 是 'top'(content 在\n * trigger 上方),锚点就该是 content 自己的底边,缩放动画看起来才会像是\n * \"从 trigger 那里长出来\",而不是原地放大缩小(默认的 transform-origin 是\n * 几何中心 50% 50%,视觉上和\"从哪个方向冒出来\"没有任何关联)。\n * 交叉轴(对齐方向)同理:align 是 start 就贴左/上边,end 就贴右/下边。\n */\nexport function getTransformOrigin(placement: Placement): string {\n const side = getSide(placement);\n const align = getAlignment(placement);\n const crossAxisOrigin =\n align === \"start\" ? \"0%\" : align === \"end\" ? \"100%\" : \"50%\";\n\n switch (side) {\n case \"top\":\n return `${crossAxisOrigin} 100%`;\n case \"bottom\":\n return `${crossAxisOrigin} 0%`;\n case \"left\":\n return `100% ${crossAxisOrigin}`;\n case \"right\":\n return `0% ${crossAxisOrigin}`;\n }\n}\n\nexport interface BuildTooltipMiddlewareOptions {\n sideOffset: number;\n /** 沿交叉轴(对齐方向)的偏移,对应 offset middleware 的 crossAxis */\n alignOffset: number;\n collisionPadding: number;\n arrowElement: () => Element | undefined;\n}\n\n/**\n * Tooltip 定位管线的固定配方:\n *\n * 1. offset — 沿主轴保持 sideOffset 间距,沿交叉轴偏移 alignOffset\n * 2. flip — 主轴方向放不下就翻到对面(比如上方没空间就翻到下方)\n * 3. shift — 翻转后仍溢出,就在不换边的前提下贴边平移\n * 4. arrow — 算出箭头相对 content 的偏移,让它始终指向 trigger 中心\n * 5. hide — trigger 被自己的滚动容器完全裁掉时标记隐藏\n * 6. containingBlockOffset — 修正祖先元素 transform 等属性导致的 position:fixed\n * 包含块偏移(demo 里通常不出现,放进有大量 transform 的真实项目后才会暴露,\n * 详见该 middleware 自身的注释)。放在最后一位,因为它修正的是\"最终要写进\n * DOM 的坐标\",前面几步都在统一的视口坐标系里计算,不受这个偏移影响。\n *\n * 特意没有用 size 中间件去动态限制 max-height、允许内容超长时滚动——\n * tooltip 不应该出现滚动条(这不是本库的一般性限制,是 tooltip 这个组件\n * 类型本身该有的样子,shadcn/Radix 的 Tooltip 也是这么做的)。宽度上限\n * 靠 TooltipContent.tsx 里静态的 `max-w-xs` class 兜底,让文字自然换行;\n * 高度完全不做限制,交给内容自身的实际高度决定。\n *\n * 这个决定还有一个技术上的原因:早先的实现里试过用 size 中间件动态算\n * max-height 配合 overflow:auto 实现\"超长内容可滚动\",结果发现内层元素\n * 一旦同时具备 overflow:auto 和入场动画(zoom-in-95 会给它加一个 transform),\n * 动画播放期间 transform 会让这个元素变成箭头新的包含块(CSS 规范:非 none\n * 的 transform 会创建包含块),箭头戳出内层边缘的那部分又会被算进内层的\n * 可滚动溢出区域——于是出现了\"打开瞬间闪一下滚动条,箭头跟着被遮住,\n * 动画播完滚动条消失、箭头才重新出现\"这种诡异现象。去掉滚动能力后,\n * 这个耦合从根上就不存在了。\n *\n * 顺序不能随便换:arrow 必须在 shift/flip 之后(要用最终坐标才能算对偏移),\n * containingBlockOffset 必须在所有其他 middleware 之后。\n *\n * 单独抽成函数是为了让 useTooltipContent 保持简洁,也方便针对这套管线单独测试。\n */\nexport function createTooltipMiddleware(\n options: BuildTooltipMiddlewareOptions,\n): Middleware[] {\n return [\n offset({ mainAxis: options.sideOffset, crossAxis: options.alignOffset }),\n flip(),\n shift({ padding: options.collisionPadding }),\n arrow({ element: options.arrowElement, padding: 6 }),\n hide(),\n containingBlockOffset(),\n ];\n}\n"],"mappings":";;;;;;;;AAoBA,SAAgB,EACd,GACA,GACW;CACX,OAAO,MAAU,WAAW,IAAQ,GAAG,EAAK,GAAG;AACjD;AAUA,SAAgB,EAAmB,GAA8B;CAC/D,IAAM,IAAO,EAAQ,CAAS,GACxB,IAAQ,EAAa,CAAS,GAC9B,IACJ,MAAU,UAAU,OAAO,MAAU,QAAQ,SAAS;CAExD,QAAQ,GAAR;EACE,KAAK,OACH,OAAO,GAAG,EAAgB;EAC5B,KAAK,UACH,OAAO,GAAG,EAAgB;EAC5B,KAAK,QACH,OAAO,QAAQ;EACjB,KAAK,SACH,OAAO,MAAM;CACjB;AACF;AA2CA,SAAgB,EACd,GACc;CACd,OAAO;EACL,EAAO;GAAE,UAAU,EAAQ;GAAY,WAAW,EAAQ;EAAY,CAAC;EACvE,EAAK;EACL,EAAM,EAAE,SAAS,EAAQ,iBAAiB,CAAC;EAC3C,EAAM;GAAE,SAAS,EAAQ;GAAc,SAAS;EAAE,CAAC;EACnD,EAAK;EACL,EAAsB;CACxB;AACF"}
@@ -1 +1,8 @@
1
1
  export { TooltipContent } from './TooltipContent';
2
+ export { TooltipContentContext, useTooltipContentContext, } from './TooltipContent.context';
3
+ export type { TooltipContentContextValue } from './TooltipContent.context';
4
+ export type { TooltipContentProps } from './TooltipContent.types';
5
+ export { createTooltipMiddleware, getTransformOrigin, toPlacement, } from './TooltipContent.utils';
6
+ export type { BuildTooltipMiddlewareOptions } from './TooltipContent.utils';
7
+ export { useTooltipContent } from './useTooltipContent';
8
+ export type { UseTooltipContentResult } from './useTooltipContent';
@@ -1,10 +1,47 @@
1
+ import { Positioner } from '../../../lib';
2
+ import { useTooltipContext } from '../Tooltip/Tooltip.context';
1
3
  import { TooltipContentProps } from './TooltipContent.types';
2
- export declare const useTooltipContent: (ref: () => HTMLDivElement | undefined, local: () => Required<Pick<TooltipContentProps, "side" | "align" | "alignOffset" | "sideOffset">>) => {
3
- shouldRender: import('solid-js').Accessor<boolean>;
4
- position: {
5
- top: number;
6
- left: number;
7
- side: "left" | "right" | "bottom" | "top";
8
- align: "center" | "start" | "end";
4
+ export interface UseTooltipContentResult {
5
+ ctx: ReturnType<typeof useTooltipContext>;
6
+ pos: Positioner;
7
+ /** 综合了 open 状态 + hide 中间件的 referenceHidden 判断,代表"逻辑上应不应该打开" */
8
+ isVisible: () => boolean;
9
+ /**
10
+ * 代表"DOM 里要不要还留着这个节点"。isVisible 变 false 之后,mounted 不会立刻
11
+ * 跟着变 false,而是等退场动画播完(或者兜底超时)才变——展示层应该用它来控制
12
+ * <Show>,而不是直接用 isVisible,否则退场动画根本来不及播放就被卸载了。
13
+ */
14
+ mounted: () => boolean;
15
+ /**
16
+ * 真正用来驱动 data-state(进而驱动 CSS 进出场动画 class)的状态,
17
+ * 展示层应该用它,而不是直接用 isVisible。
18
+ *
19
+ * 和 isVisible 的区别只在"打开"这一侧:isVisible 变 true 的瞬间,
20
+ * animationState 不会立刻跟着变 "open",而是等一帧(requestAnimationFrame)
21
+ * 之后才变——这一帧的间隙用来让箭头(TooltipArrow)完成挂载、把自己注册给
22
+ * arrow middleware、拿到正确的位置偏移。如果不等这一帧,动画会在箭头位置
23
+ * 还没算对的时候就开始播放,播到一半箭头才"跳"到正确位置,看起来就像是
24
+ * 箭头比内容慢一拍——这正是因为内容的淡入/缩放靠的是 CSS 动画(父元素的
25
+ * opacity/transform 会连带影响所有子元素,包括箭头,两者本该同步),而箭头
26
+ * 的具体位置靠的是 JS 算出来的 left/top,这是两套完全独立的机制,只有当
27
+ * "开始播放动画"这个时间点晚于"箭头位置算完",才能保证两者观感一致。
28
+ * 关闭这一侧不需要这个延迟,isVisible 变 false 时 animationState 立刻跟着变。
29
+ */
30
+ animationState: () => "open" | "closed";
31
+ arrowElement: () => Element | undefined;
32
+ setArrowElement: (el: Element) => void;
33
+ /** 内层内容元素(真正播放进出场动画的那一层),TooltipContent 需要把它 ref 进来 */
34
+ contentElement: () => HTMLElement | undefined;
35
+ setContentElement: (el: HTMLElement) => void;
36
+ /**
37
+ * 加在"滑动层"(定位层和内容层之间的中间那层)上的 style。
38
+ * 命中 TooltipGroup 抢占时会有一个非零初始偏移,下一帧起会用 CSS transition
39
+ * 平滑归零,从而制造出"从旧 tooltip 位置滑到新位置"的效果;平时是空对象,
40
+ * 不产生任何影响。
41
+ */
42
+ slideStyle: () => {
43
+ transform?: string;
44
+ transition?: string;
9
45
  };
10
- };
46
+ }
47
+ export declare function useTooltipContent(props: () => TooltipContentProps): UseTooltipContentResult;
@@ -1,48 +1,77 @@
1
1
  import { useTooltipContext as e } from "../Tooltip/Tooltip.context.js";
2
- import { computePosition as t } from "./TooltipContent.utils.js";
3
- import { createEffect as n, createSignal as r, onCleanup as i, onMount as a, untrack as o } from "solid-js";
4
- import { createStore as s } from "solid-js/store";
2
+ import { createPositioner as t } from "../../../lib/positioner/create-positioner.js";
3
+ import { createTooltipMiddleware as n, toPlacement as r } from "./TooltipContent.utils.js";
4
+ import { createEffect as i, createMemo as a, createSignal as o, onCleanup as s } from "solid-js";
5
5
  //#region src/components/tooltip/TooltipContent/useTooltipContent.ts
6
- var c = (c, l) => {
7
- let u = e(), [d, f] = s({
8
- top: 0,
9
- left: 0,
10
- side: o(() => l().side),
11
- align: o(() => l().align)
12
- }), [p, m] = r(o(u.open)), h = (e) => {
13
- if (!u.triggerRef || !e) return;
14
- let { top: n, left: r, side: i, align: a } = t(u.triggerRef, e, l().side, l().align, l().alignOffset, l().sideOffset);
15
- f({
16
- top: n,
17
- left: r,
18
- side: i,
19
- align: a
20
- });
21
- }, g = () => h(c());
22
- return a(() => {
23
- window.addEventListener("scroll", g, { passive: !0 }), window.addEventListener("resize", g, { passive: !0 });
24
- }), i(() => {
25
- window.removeEventListener("scroll", g), window.removeEventListener("resize", g);
26
- }), n(() => {
27
- if (u.open()) {
28
- m(!0), requestAnimationFrame(() => {
29
- requestAnimationFrame(() => h(c()));
30
- });
31
- return;
6
+ var c = 300;
7
+ function l(l) {
8
+ let u = e("TooltipContent"), [d, f] = o(), [p, m] = o(), h = t(u.reference, u.floating, {
9
+ placement: () => r(l().side ?? "top", l().align ?? "center"),
10
+ strategy: "fixed",
11
+ middleware: () => n({
12
+ sideOffset: l().sideOffset ?? 8,
13
+ alignOffset: l().alignOffset ?? 0,
14
+ collisionPadding: l().collisionPadding ?? 8,
15
+ arrowElement: d
16
+ })
17
+ }), g = a(() => u.open() && !h.middlewareData().hide?.referenceHidden), [_, v] = o("closed");
18
+ i(() => {
19
+ if (g()) {
20
+ let e = requestAnimationFrame(() => v("open"));
21
+ s(() => cancelAnimationFrame(e));
22
+ } else v("closed");
23
+ });
24
+ let [y, b] = o();
25
+ i(() => {
26
+ if (!S()) return;
27
+ let e = u.pendingSlideFrom();
28
+ if (!e || !h.isPositioned()) return;
29
+ let t = e.x - h.x(), n = e.y - h.y();
30
+ b({
31
+ x: t,
32
+ y: n
33
+ }), u.clearPendingSlideFrom(), requestAnimationFrame(() => b({
34
+ x: 0,
35
+ y: 0
36
+ }));
37
+ });
38
+ let x = a(() => {
39
+ let e = y();
40
+ if (!e) return {};
41
+ let t = e.x === 0 && e.y === 0;
42
+ return {
43
+ transform: `translate(${e.x}px, ${e.y}px)`,
44
+ transition: t ? "transform 150ms ease" : void 0
45
+ };
46
+ }), [S, C] = o(g());
47
+ return i((e) => {
48
+ let t = g(), n = p();
49
+ if (t) C(!0);
50
+ else if (e && n) if (u.consumeSuppressExitAnimation()) C(!1);
51
+ else {
52
+ let e = (e) => {
53
+ e.target === n && C(!1);
54
+ };
55
+ n.addEventListener("animationend", e), s(() => n.removeEventListener("animationend", e));
56
+ let t = window.setTimeout(() => C(!1), c);
57
+ s(() => window.clearTimeout(t));
32
58
  }
33
- let e = c();
34
- if (!e) {
35
- m(!1);
36
- return;
37
- }
38
- let t = () => m(!1);
39
- e.addEventListener("animationend", t, { once: !0 }), e.addEventListener("transitionend", t, { once: !0 });
40
- }), {
41
- shouldRender: p,
42
- position: d
59
+ else t || C(!1);
60
+ return t;
61
+ }, g()), {
62
+ ctx: u,
63
+ pos: h,
64
+ isVisible: g,
65
+ mounted: S,
66
+ animationState: _,
67
+ arrowElement: d,
68
+ setArrowElement: f,
69
+ contentElement: p,
70
+ setContentElement: m,
71
+ slideStyle: x
43
72
  };
44
- };
73
+ }
45
74
  //#endregion
46
- export { c as useTooltipContent };
75
+ export { l as useTooltipContent };
47
76
 
48
77
  //# sourceMappingURL=useTooltipContent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTooltipContent.js","names":[],"sources":["../../../../src/components/tooltip/TooltipContent/useTooltipContent.ts"],"sourcesContent":["import {\n createEffect,\n createSignal,\n onCleanup,\n onMount,\n untrack,\n} from \"solid-js\";\nimport { computePosition } from \"./TooltipContent.utils\";\nimport { createStore } from \"solid-js/store\";\nimport { useTooltipContext } from \"../Tooltip/Tooltip.context\";\nimport type { TooltipContentProps } from \"./TooltipContent.types\";\n\nexport const useTooltipContent = (\n ref: () => HTMLDivElement | undefined,\n local: () => Required<\n Pick<TooltipContentProps, \"side\" | \"align\" | \"alignOffset\" | \"sideOffset\">\n >,\n) => {\n const ctx = useTooltipContext();\n\n const [position, setPosition] = createStore({\n top: 0,\n left: 0,\n side: untrack(() => local().side),\n align: untrack(() => local().align),\n });\n const [shouldRender, setShouldRender] = createSignal(untrack(ctx.open));\n\n const updatePosition = (content: HTMLElement | undefined) => {\n if (!ctx.triggerRef || !content) return;\n\n const { top, left, side, align } = computePosition(\n ctx.triggerRef,\n content,\n local().side,\n local().align,\n local().alignOffset,\n local().sideOffset,\n );\n setPosition({ top, left, side, align });\n };\n\n const updatePositionWithContentRef = () => updatePosition(ref());\n\n onMount(() => {\n window.addEventListener(\"scroll\", updatePositionWithContentRef, {\n passive: true,\n });\n window.addEventListener(\"resize\", updatePositionWithContentRef, {\n passive: true,\n });\n });\n\n onCleanup(() => {\n window.removeEventListener(\"scroll\", updatePositionWithContentRef);\n window.removeEventListener(\"resize\", updatePositionWithContentRef);\n });\n\n createEffect(() => {\n const isOpen = ctx.open();\n\n if (isOpen) {\n setShouldRender(true);\n // 等待 DOM 完成布局后再计算,双 rAF 确保内容节点已完成首次渲染\n requestAnimationFrame(() => {\n requestAnimationFrame(() => updatePosition(ref()));\n });\n return;\n }\n\n const el = ref();\n if (!el) {\n setShouldRender(false);\n return;\n }\n\n const onFinish = () => setShouldRender(false);\n el.addEventListener(\"animationend\", onFinish, { once: true });\n el.addEventListener(\"transitionend\", onFinish, { once: true });\n });\n\n return { shouldRender, position };\n};\n"],"mappings":";;;;;AAYA,IAAa,KACX,GACA,MAGG;CACH,IAAM,IAAM,GAAmB,EAEzB,CAAC,GAAU,KAAe,EAAY;EAC1C,KAAK;EACL,MAAM;EACN,MAAM,QAAc,GAAO,CAAC,KAAK;EACjC,OAAO,QAAc,GAAO,CAAC,MAAM;EACpC,CAAC,EACI,CAAC,GAAc,KAAmB,EAAa,EAAQ,EAAI,KAAK,CAAC,EAEjE,KAAkB,MAAqC;AAC3D,MAAI,CAAC,EAAI,cAAc,CAAC,EAAS;EAEjC,IAAM,EAAE,QAAK,SAAM,SAAM,aAAU,EACjC,EAAI,YACJ,GACA,GAAO,CAAC,MACR,GAAO,CAAC,OACR,GAAO,CAAC,aACR,GAAO,CAAC,WACT;AACD,IAAY;GAAE;GAAK;GAAM;GAAM;GAAO,CAAC;IAGnC,UAAqC,EAAe,GAAK,CAAC;AAuChE,QArCA,QAAc;AAIZ,EAHA,OAAO,iBAAiB,UAAU,GAA8B,EAC9D,SAAS,IACV,CAAC,EACF,OAAO,iBAAiB,UAAU,GAA8B,EAC9D,SAAS,IACV,CAAC;GACF,EAEF,QAAgB;AAEd,EADA,OAAO,oBAAoB,UAAU,EAA6B,EAClE,OAAO,oBAAoB,UAAU,EAA6B;GAClE,EAEF,QAAmB;AAGjB,MAFe,EAAI,MAAM,EAEb;AAGV,GAFA,EAAgB,GAAK,EAErB,4BAA4B;AAC1B,gCAA4B,EAAe,GAAK,CAAC,CAAC;KAClD;AACF;;EAGF,IAAM,IAAK,GAAK;AAChB,MAAI,CAAC,GAAI;AACP,KAAgB,GAAM;AACtB;;EAGF,IAAM,UAAiB,EAAgB,GAAM;AAE7C,EADA,EAAG,iBAAiB,gBAAgB,GAAU,EAAE,MAAM,IAAM,CAAC,EAC7D,EAAG,iBAAiB,iBAAiB,GAAU,EAAE,MAAM,IAAM,CAAC;GAC9D,EAEK;EAAE;EAAc;EAAU"}
1
+ {"version":3,"file":"useTooltipContent.js","names":[],"sources":["../../../../src/components/tooltip/TooltipContent/useTooltipContent.ts"],"sourcesContent":["import { createSignal, createMemo, createEffect, onCleanup } from \"solid-js\";\nimport { createPositioner, type Positioner } from \"~/lib\";\nimport { useTooltipContext } from \"../Tooltip/Tooltip.context\";\nimport { createTooltipMiddleware, toPlacement } from \"./TooltipContent.utils\";\nimport type { TooltipContentProps } from \"./TooltipContent.types\";\n\n/** 没有触发任何 CSS animation 时的兜底卸载延迟(ms)——比如没装 tailwindcss-animate、\n * 或者自定义样式只用了 transition 而不是 @keyframes,animationend 永远不会触发,\n * 避免元素卡在 DOM 里退不出去。 */\nconst EXIT_FALLBACK_MS = 300;\n\nexport interface UseTooltipContentResult {\n ctx: ReturnType<typeof useTooltipContext>;\n pos: Positioner;\n /** 综合了 open 状态 + hide 中间件的 referenceHidden 判断,代表\"逻辑上应不应该打开\" */\n isVisible: () => boolean;\n /**\n * 代表\"DOM 里要不要还留着这个节点\"。isVisible 变 false 之后,mounted 不会立刻\n * 跟着变 false,而是等退场动画播完(或者兜底超时)才变——展示层应该用它来控制\n * <Show>,而不是直接用 isVisible,否则退场动画根本来不及播放就被卸载了。\n */\n mounted: () => boolean;\n /**\n * 真正用来驱动 data-state(进而驱动 CSS 进出场动画 class)的状态,\n * 展示层应该用它,而不是直接用 isVisible。\n *\n * 和 isVisible 的区别只在\"打开\"这一侧:isVisible 变 true 的瞬间,\n * animationState 不会立刻跟着变 \"open\",而是等一帧(requestAnimationFrame)\n * 之后才变——这一帧的间隙用来让箭头(TooltipArrow)完成挂载、把自己注册给\n * arrow middleware、拿到正确的位置偏移。如果不等这一帧,动画会在箭头位置\n * 还没算对的时候就开始播放,播到一半箭头才\"跳\"到正确位置,看起来就像是\n * 箭头比内容慢一拍——这正是因为内容的淡入/缩放靠的是 CSS 动画(父元素的\n * opacity/transform 会连带影响所有子元素,包括箭头,两者本该同步),而箭头\n * 的具体位置靠的是 JS 算出来的 left/top,这是两套完全独立的机制,只有当\n * \"开始播放动画\"这个时间点晚于\"箭头位置算完\",才能保证两者观感一致。\n * 关闭这一侧不需要这个延迟,isVisible 变 false 时 animationState 立刻跟着变。\n */\n animationState: () => \"open\" | \"closed\";\n arrowElement: () => Element | undefined;\n setArrowElement: (el: Element) => void;\n /** 内层内容元素(真正播放进出场动画的那一层),TooltipContent 需要把它 ref 进来 */\n contentElement: () => HTMLElement | undefined;\n setContentElement: (el: HTMLElement) => void;\n /**\n * 加在\"滑动层\"(定位层和内容层之间的中间那层)上的 style。\n * 命中 TooltipGroup 抢占时会有一个非零初始偏移,下一帧起会用 CSS transition\n * 平滑归零,从而制造出\"从旧 tooltip 位置滑到新位置\"的效果;平时是空对象,\n * 不产生任何影响。\n */\n slideStyle: () => { transform?: string; transition?: string };\n}\n\nexport function useTooltipContent(\n props: () => TooltipContentProps,\n): UseTooltipContentResult {\n const ctx = useTooltipContext(\"TooltipContent\");\n const [arrowElement, setArrowElement] = createSignal<Element>();\n const [contentElement, setContentElement] = createSignal<HTMLElement>();\n\n const pos = createPositioner(ctx.reference, ctx.floating, {\n placement: () =>\n toPlacement(props().side ?? \"top\", props().align ?? \"center\"),\n strategy: \"fixed\",\n middleware: () =>\n createTooltipMiddleware({\n sideOffset: props().sideOffset ?? 8,\n alignOffset: props().alignOffset ?? 0,\n collisionPadding: props().collisionPadding ?? 8,\n arrowElement,\n }),\n });\n\n // reference 完全滚出视口(比如所在容器被单独滚动)时,hide middleware 会标记\n // referenceHidden,这里据此隐藏浮层,避免它悬空显示在一个已经看不到的触发器旁边。\n const isVisible = createMemo(\n () => ctx.open() && !pos.middlewareData().hide?.referenceHidden,\n );\n\n // --- 箭头和内容同步入场:延迟一帧再触发动画 class ---\n // 见 UseTooltipContentResult.animationState 的注释:只有\"开始播放动画\"这个\n // 时间点晚于\"箭头位置算完\",才能保证箭头不会在动画播到一半时才跳到正确位置。\n const [animationState, setAnimationState] = createSignal<\"open\" | \"closed\">(\n \"closed\",\n );\n\n createEffect(() => {\n if (isVisible()) {\n const raf = requestAnimationFrame(() => setAnimationState(\"open\"));\n onCleanup(() => cancelAnimationFrame(raf));\n } else {\n // 关闭不需要等——退场动画本来就是从\"当前已经落定的位置\"往外淡出/缩小,\n // 不存在箭头位置还没算好这个问题,没理由延迟。\n setAnimationState(\"closed\");\n }\n });\n\n // --- TooltipGroup 抢占时的\"滑入\"过渡(FLIP 技术) ---\n const [slideOffset, setSlideOffset] = createSignal<{\n x: number;\n y: number;\n }>();\n\n createEffect(() => {\n if (!mounted()) return;\n const from = ctx.pendingSlideFrom();\n if (!from) return;\n // 必须等真正定位完成(知道自己算出来的最终坐标)才能算出\"要从哪滑过来\"的差值。\n if (!pos.isPositioned()) return;\n\n const dx = from.x - pos.x();\n const dy = from.y - pos.y();\n // 第一步:把偏移设成非零值——这一步和 floatingStyles() 的最终坐标叠加后,\n // 视觉上让新 tooltip 一出现就恰好在旧 tooltip 原来的位置,没有任何跳动。\n setSlideOffset({ x: dx, y: dy });\n // 消费一次立刻清空,避免后续 autoUpdate(滚动/resize 触发的重新定位)\n // 又把这次的偏移重新套用一遍。\n ctx.clearPendingSlideFrom();\n\n // 第二步:下一帧再把偏移量归零。因为这次更新带上了 transition(见下面\n // slideStyle 的实现),浏览器会把\"从非零偏移回到 0\"这个变化平滑动画出来,\n // 效果就是从旧位置滑到新位置。用 requestAnimationFrame 而不是同步归零,\n // 是为了确保浏览器先真正画出第一帧(非零偏移、无 transition),\n // 下一帧的变化才有\"起点\"可以过渡,不会被浏览器合并成一次跳变。\n requestAnimationFrame(() => setSlideOffset({ x: 0, y: 0 }));\n });\n\n const slideStyle = createMemo(() => {\n const offset = slideOffset();\n if (!offset) return {};\n const atRest = offset.x === 0 && offset.y === 0;\n return {\n transform: `translate(${offset.x}px, ${offset.y}px)`,\n // 只有\"归零\"这一步才带 transition:非零的那一帧要求瞬间落位、不能有动画,\n // 否则会先看到它从视口原点飞过来,而不是从旧 tooltip 的位置飞过来。\n transition: atRest ? \"transform 150ms ease\" : undefined,\n };\n });\n\n // --- 退场动画支持(Presence)---\n // isVisible 从 true 变 false 的瞬间,不立刻让 <Show> 卸载节点:先把 data-state\n // 切到 closed(触发退场动画的 CSS class),等这个节点自己的 animationend 触发\n // (或者兜底超时)之后,才真正把 mounted 设为 false,交给 <Show> 卸载。\n const [mounted, setMounted] = createSignal(isVisible());\n\n createEffect((wasVisible: boolean) => {\n const visible = isVisible();\n const el = contentElement();\n\n if (visible) {\n setMounted(true);\n } else if (wasVisible && el) {\n if (ctx.consumeSuppressExitAnimation()) {\n // 被 TooltipGroup 抢占强制关闭:跳过退场动画,立即卸载,避免和正在\n // 滑入的新 tooltip 同时出现在屏幕上(这是\"同时存在两个 tooltip\"这个\n // bug 的根因——之前不管什么原因关闭,都统一走了退场动画那条路)。\n setMounted(false);\n } else {\n const handleAnimationEnd = (e: AnimationEvent) => {\n // 忽略从子元素冒泡上来的 animationend,只认内容元素自己播放的那个动画\n if (e.target !== el) return;\n setMounted(false);\n };\n el.addEventListener(\"animationend\", handleAnimationEnd);\n onCleanup(() =>\n el.removeEventListener(\"animationend\", handleAnimationEnd),\n );\n\n const fallback = window.setTimeout(\n () => setMounted(false),\n EXIT_FALLBACK_MS,\n );\n onCleanup(() => window.clearTimeout(fallback));\n }\n } else if (!visible) {\n setMounted(false);\n }\n\n return visible;\n }, isVisible());\n\n return {\n ctx,\n pos,\n isVisible,\n mounted,\n animationState,\n arrowElement,\n setArrowElement,\n contentElement,\n setContentElement,\n slideStyle,\n };\n}\n"],"mappings":";;;;;AASA,IAAM,IAAmB;AA2CzB,SAAgB,EACd,GACyB;CACzB,IAAM,IAAM,EAAkB,gBAAgB,GACxC,CAAC,GAAc,KAAmB,EAAsB,GACxD,CAAC,GAAgB,KAAqB,EAA0B,GAEhE,IAAM,EAAiB,EAAI,WAAW,EAAI,UAAU;EACxD,iBACE,EAAY,EAAM,CAAC,CAAC,QAAQ,OAAO,EAAM,CAAC,CAAC,SAAS,QAAQ;EAC9D,UAAU;EACV,kBACE,EAAwB;GACtB,YAAY,EAAM,CAAC,CAAC,cAAc;GAClC,aAAa,EAAM,CAAC,CAAC,eAAe;GACpC,kBAAkB,EAAM,CAAC,CAAC,oBAAoB;GAC9C;EACF,CAAC;CACL,CAAC,GAIK,IAAY,QACV,EAAI,KAAK,KAAK,CAAC,EAAI,eAAe,CAAC,CAAC,MAAM,eAClD,GAKM,CAAC,GAAgB,KAAqB,EAC1C,QACF;CAEA,QAAmB;EACjB,IAAI,EAAU,GAAG;GACf,IAAM,IAAM,4BAA4B,EAAkB,MAAM,CAAC;GACjE,QAAgB,qBAAqB,CAAG,CAAC;EAC3C,OAGE,EAAkB,QAAQ;CAE9B,CAAC;CAGD,IAAM,CAAC,GAAa,KAAkB,EAGnC;CAEH,QAAmB;EACjB,IAAI,CAAC,EAAQ,GAAG;EAChB,IAAM,IAAO,EAAI,iBAAiB;EAGlC,IAFI,CAAC,KAED,CAAC,EAAI,aAAa,GAAG;EAEzB,IAAM,IAAK,EAAK,IAAI,EAAI,EAAE,GACpB,IAAK,EAAK,IAAI,EAAI,EAAE;EAa1B,AAVA,EAAe;GAAE,GAAG;GAAI,GAAG;EAAG,CAAC,GAG/B,EAAI,sBAAsB,GAO1B,4BAA4B,EAAe;GAAE,GAAG;GAAG,GAAG;EAAE,CAAC,CAAC;CAC5D,CAAC;CAED,IAAM,IAAa,QAAiB;EAClC,IAAM,IAAS,EAAY;EAC3B,IAAI,CAAC,GAAQ,OAAO,CAAC;EACrB,IAAM,IAAS,EAAO,MAAM,KAAK,EAAO,MAAM;EAC9C,OAAO;GACL,WAAW,aAAa,EAAO,EAAE,MAAM,EAAO,EAAE;GAGhD,YAAY,IAAS,yBAAyB,KAAA;EAChD;CACF,CAAC,GAMK,CAAC,GAAS,KAAc,EAAa,EAAU,CAAC;CAsCtD,OApCA,GAAc,MAAwB;EACpC,IAAM,IAAU,EAAU,GACpB,IAAK,EAAe;EAE1B,IAAI,GACF,EAAW,EAAI;OACV,IAAI,KAAc,GACvB,IAAI,EAAI,6BAA6B,GAInC,EAAW,EAAK;OACX;GACL,IAAM,KAAsB,MAAsB;IAE5C,EAAE,WAAW,KACjB,EAAW,EAAK;GAClB;GAEA,AADA,EAAG,iBAAiB,gBAAgB,CAAkB,GACtD,QACE,EAAG,oBAAoB,gBAAgB,CAAkB,CAC3D;GAEA,IAAM,IAAW,OAAO,iBAChB,EAAW,EAAK,GACtB,CACF;GACA,QAAgB,OAAO,aAAa,CAAQ,CAAC;EAC/C;OACK,AAAK,KACV,EAAW,EAAK;EAGlB,OAAO;CACT,GAAG,EAAU,CAAC,GAEP;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}
@@ -0,0 +1,29 @@
1
+ import { Rect } from '../../../lib';
2
+ export interface ActiveTooltipEntry {
3
+ /** 读取这个 tooltip 浮层此刻的实时矩形,供下一个抢占它的 tooltip 当"滑入起点"用 */
4
+ rect: () => Rect | undefined;
5
+ /** 立即关闭(跳过 closeDelay 和退场动画)——组内切换到别的 trigger 时调用 */
6
+ forceClose: () => void;
7
+ }
8
+ export interface TooltipGroupContextValue {
9
+ /** 打开时注册自己为"组内当前活跃的 tooltip",返回取消注册函数(关闭/卸载时调用) */
10
+ registerActive: (entry: ActiveTooltipEntry) => () => void;
11
+ /**
12
+ * 组内某个 tooltip 即将打开时调用:
13
+ * 如果组里当前已经有一个活跃的 tooltip,立即强制关闭它、拿到它此刻的矩形
14
+ * 并返回(用作平移过渡的起点);如果组内当前没有任何活跃 tooltip,返回
15
+ * undefined,调用方应该走正常的 openDelay 流程。
16
+ *
17
+ * 用"是否存在活跃 tooltip"而不是"上一个关闭后多久之内"这种时间窗口来判断,
18
+ * 是为了精确匹配"旧的还在退场倒计时里、这时候 hover 了别的 trigger"这个场景——
19
+ * 这种情况下旧的严格来说还没真正关闭(open() 依然是 true),基于时间窗口的
20
+ * 判断会因为"还没关闭、没触发通知"而错过这次协调,直接查"当前活跃"更可靠。
21
+ */
22
+ claim: () => Rect | undefined;
23
+ }
24
+ export declare const TooltipGroupContext: import('solid-js').Context<TooltipGroupContextValue | undefined>;
25
+ /**
26
+ * 注意:和其他 useXxxContext 不同,这里缺失 context 时不抛错——
27
+ * <TooltipGroup> 是可选的,单独使用 <Tooltip> 不需要包一层。
28
+ */
29
+ export declare function useTooltipGroupContext(): TooltipGroupContextValue | undefined;
@@ -0,0 +1,10 @@
1
+ import { createContext as e, useContext as t } from "solid-js";
2
+ //#region src/components/tooltip/TooltipGroup/TooltipGroup.context.ts
3
+ var n = e();
4
+ function r() {
5
+ return t(n);
6
+ }
7
+ //#endregion
8
+ export { n as TooltipGroupContext, r as useTooltipGroupContext };
9
+
10
+ //# sourceMappingURL=TooltipGroup.context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TooltipGroup.context.js","names":[],"sources":["../../../../src/components/tooltip/TooltipGroup/TooltipGroup.context.ts"],"sourcesContent":["import { createContext, useContext } from \"solid-js\";\nimport type { Rect } from \"~/lib\";\n\nexport interface ActiveTooltipEntry {\n /** 读取这个 tooltip 浮层此刻的实时矩形,供下一个抢占它的 tooltip 当\"滑入起点\"用 */\n rect: () => Rect | undefined;\n /** 立即关闭(跳过 closeDelay 和退场动画)——组内切换到别的 trigger 时调用 */\n forceClose: () => void;\n}\n\nexport interface TooltipGroupContextValue {\n /** 打开时注册自己为\"组内当前活跃的 tooltip\",返回取消注册函数(关闭/卸载时调用) */\n registerActive: (entry: ActiveTooltipEntry) => () => void;\n /**\n * 组内某个 tooltip 即将打开时调用:\n * 如果组里当前已经有一个活跃的 tooltip,立即强制关闭它、拿到它此刻的矩形\n * 并返回(用作平移过渡的起点);如果组内当前没有任何活跃 tooltip,返回\n * undefined,调用方应该走正常的 openDelay 流程。\n *\n * 用\"是否存在活跃 tooltip\"而不是\"上一个关闭后多久之内\"这种时间窗口来判断,\n * 是为了精确匹配\"旧的还在退场倒计时里、这时候 hover 了别的 trigger\"这个场景——\n * 这种情况下旧的严格来说还没真正关闭(open() 依然是 true),基于时间窗口的\n * 判断会因为\"还没关闭、没触发通知\"而错过这次协调,直接查\"当前活跃\"更可靠。\n */\n claim: () => Rect | undefined;\n}\n\nexport const TooltipGroupContext = createContext<TooltipGroupContextValue>();\n\n/**\n * 注意:和其他 useXxxContext 不同,这里缺失 context 时不抛错——\n * <TooltipGroup> 是可选的,单独使用 <Tooltip> 不需要包一层。\n */\nexport function useTooltipGroupContext(): TooltipGroupContextValue | undefined {\n return useContext(TooltipGroupContext);\n}\n"],"mappings":";;AA2BA,IAAa,IAAsB,EAAwC;AAM3E,SAAgB,IAA+D;CAC7E,OAAO,EAAW,CAAmB;AACvC"}
@@ -0,0 +1,2 @@
1
+ import { TooltipGroupProps } from './TooltipGroup.types';
2
+ export declare function TooltipGroup(props: TooltipGroupProps): import("solid-js").JSX.Element;
@@ -0,0 +1,25 @@
1
+ import { TooltipGroupContext as e } from "./TooltipGroup.context.js";
2
+ import { createComponent as t } from "solid-js/web";
3
+ //#region src/components/tooltip/TooltipGroup/TooltipGroup.tsx
4
+ function n(n) {
5
+ let r;
6
+ return t(e.Provider, {
7
+ value: {
8
+ registerActive: (e) => (r = e, () => {
9
+ r === e && (r = void 0);
10
+ }),
11
+ claim: () => {
12
+ if (!r) return;
13
+ let e = r.rect();
14
+ if (r.forceClose(), r = void 0, !(!e || e.width === 0 && e.height === 0)) return e;
15
+ }
16
+ },
17
+ get children() {
18
+ return n.children;
19
+ }
20
+ });
21
+ }
22
+ //#endregion
23
+ export { n as TooltipGroup };
24
+
25
+ //# sourceMappingURL=TooltipGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TooltipGroup.js","names":["TooltipGroupContext","ActiveTooltipEntry","TooltipGroupContextValue","TooltipGroupProps","TooltipGroup","props","activeEntry","registerActive","entry","undefined","claim","rect","forceClose","width","height","ctx","_$createComponent","Provider","value","children"],"sources":["../../../../src/components/tooltip/TooltipGroup/TooltipGroup.tsx"],"sourcesContent":["import { TooltipGroupContext } from \"./TooltipGroup.context\";\nimport type {\n ActiveTooltipEntry,\n TooltipGroupContextValue,\n} from \"./TooltipGroup.context\";\nimport type { TooltipGroupProps } from \"./TooltipGroup.types\";\n\nexport function TooltipGroup(props: TooltipGroupProps) {\n // 用一个模块外可变量而不是 Solid signal 存\"当前活跃条目\"是有意的:\n // 这纯粹是组件间协调用的内部状态,不需要驱动任何渲染,用 signal 反而会\n // 引入不必要的响应式开销和多余的重渲染触发。\n let activeEntry: ActiveTooltipEntry | undefined;\n\n const registerActive: TooltipGroupContextValue[\"registerActive\"] = (\n entry,\n ) => {\n activeEntry = entry;\n return () => {\n // 只清自己注册的那条,避免\"A 还没来得及 unregister,B 已经抢注册\"时,\n // A 的 cleanup 误把 B 刚设置的 activeEntry 清掉。\n if (activeEntry === entry) activeEntry = undefined;\n };\n };\n\n const claim: TooltipGroupContextValue[\"claim\"] = () => {\n if (!activeEntry) return undefined;\n const rect = activeEntry.rect();\n activeEntry.forceClose();\n activeEntry = undefined;\n\n // 防御性检查:一个真实可见的 tooltip 不可能宽高都是 0——如果读到的是\n // 这种全 0 矩形,大概率是读到了一个已经从 DOM 里摘除的 detached 元素\n // (getBoundingClientRect 规范规定这种情况下就是全 0)。这种情况下\n // 宁可放弃这次平移过渡(新 tooltip 走正常的 openDelay 流程),也不要\n // 把 (0,0) 当成合法的滑入起点,出现\"从左上角滑入\"这种明显错误的观感。\n if (!rect || (rect.width === 0 && rect.height === 0)) return undefined;\n return rect;\n };\n\n const ctx: TooltipGroupContextValue = { registerActive, claim };\n\n return (\n <TooltipGroupContext.Provider value={ctx}>\n {props.children}\n </TooltipGroupContext.Provider>\n );\n}\n"],"mappings":";;;AAOA,SAAgBI,EAAaC,GAA0B;CAIrD,IAAIC;CA8BJ,OAAAU,EACGhB,EAAoBiB,UAAQ;EAACC,OAAOH;GAHCR,iBAzBtCC,OAEAF,IAAcE,SACD;IAGX,AAAIF,MAAgBE,MAAOF,IAAcG,KAAAA;GAC3C;GAkBsDC,aAfD;IACrD,IAAI,CAACJ,GAAa;IAClB,IAAMK,IAAOL,EAAYK,KAAK;IAC9BL,MAAYM,WAAW,GACvBN,IAAcG,KAAAA,GAOV,GAACE,KAASA,EAAKE,UAAU,KAAKF,EAAKG,WAAW,IAClD,OAAOH;GACT;EAKuCI;EAAG,IAAAI,WAAA;GAAA,OACrCd,EAAMc;EAAQ;CAAA,CAAA;AAGrB"}
@@ -0,0 +1,10 @@
1
+ import { ParentProps } from 'solid-js';
2
+ /**
3
+ * <TooltipGroup> 是可选的:把多个 <Tooltip> 包在一起,组内相邻 trigger 之间
4
+ * 切换 hover 时,会跳过 openDelay 并触发"从旧位置滑到新位置"的过渡效果,
5
+ * 而不是旧的先走完退场动画、新的再等 openDelay 出现。
6
+ *
7
+ * 不需要这个效果的话,<Tooltip> 完全可以脱离 <TooltipGroup> 单独使用,
8
+ * 行为不受影响(内部用 useTooltipGroupContext 判断是否存在,缺失时静默降级)。
9
+ */
10
+ export type TooltipGroupProps = ParentProps;
@@ -0,0 +1,4 @@
1
+ export { TooltipGroup } from './TooltipGroup';
2
+ export { TooltipGroupContext, useTooltipGroupContext, } from './TooltipGroup.context';
3
+ export type { TooltipGroupContextValue, ActiveTooltipEntry, } from './TooltipGroup.context';
4
+ export type { TooltipGroupProps } from './TooltipGroup.types';
@@ -1,2 +1,4 @@
1
- import { JSXElement, ParentProps } from 'solid-js';
2
- export declare const TooltipTrigger: (props: ParentProps) => JSXElement;
1
+ import { ValidComponent } from 'solid-js';
2
+ import { TooltipTriggerProps } from './TooltipTrigger.types';
3
+ import { Button } from '../../button';
4
+ export declare const TooltipTrigger: <T extends ValidComponent = typeof Button<"button">>(props: TooltipTriggerProps<T>) => import("solid-js").JSX.Element;
@@ -1,11 +1,31 @@
1
- import { useTooltipTrigger as e } from "./useTooltipTrigger.js";
2
- import { children as t, untrack as n } from "solid-js";
1
+ import { Button as e } from "../../button/Button.js";
2
+ import { useTooltipTrigger as t } from "./useTooltipTrigger.js";
3
+ import { Dynamic as n, createComponent as r, memo as i, mergeProps as a } from "solid-js/web";
3
4
  //#region src/components/tooltip/TooltipTrigger/TooltipTrigger.tsx
4
- var r = (r) => {
5
- let i = t(() => n(() => r.children));
6
- return e(i), i;
5
+ function o(...e) {
6
+ return (t) => {
7
+ for (let n of e) typeof n == "function" && n(t);
8
+ };
9
+ }
10
+ var s = (s) => {
11
+ let { ctx: c, attachListeners: l } = t();
12
+ return r(n, a(s, {
13
+ get component() {
14
+ return s.component ?? e;
15
+ },
16
+ ref(e) {
17
+ var t = o(c.setReference, s.ref, l);
18
+ typeof t == "function" && t(e);
19
+ },
20
+ get "aria-describedby"() {
21
+ return i(() => !!c.open())() ? c.contentId : void 0;
22
+ },
23
+ get "data-state"() {
24
+ return c.open() ? "open" : "closed";
25
+ }
26
+ }));
7
27
  };
8
28
  //#endregion
9
- export { r as TooltipTrigger };
29
+ export { s as TooltipTrigger };
10
30
 
11
31
  //# sourceMappingURL=TooltipTrigger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TooltipTrigger.js","names":["children","untrack","JSXElement","ParentProps","useTooltipTrigger","TooltipTrigger","props","resolved"],"sources":["../../../../src/components/tooltip/TooltipTrigger/TooltipTrigger.tsx"],"sourcesContent":["import { children, untrack, type JSXElement, type ParentProps } from \"solid-js\";\nimport { useTooltipTrigger } from \"./useTooltipTrigger\";\n\nexport const TooltipTrigger = (props: ParentProps) => {\n const resolved = children(() => untrack(() => props.children));\n useTooltipTrigger(resolved);\n\n return resolved as unknown as JSXElement;\n};\n"],"mappings":";;;AAGA,IAAaK,KAAkBC,MAAuB;CACpD,IAAMC,IAAWP,QAAeC,QAAcK,EAAMN,SAAS,CAAC;AAG9D,QAFAI,EAAkBG,EAAS,EAEpBA"}
1
+ {"version":3,"file":"TooltipTrigger.js","names":["ValidComponent","Dynamic","useTooltipTrigger","TooltipTriggerProps","Button","mergeRefs","refs","Array","Element","el","ref","TooltipTrigger","props","T","ctx","attachListeners","_$createComponent","_$mergeProps","component","r$","_ref$","setReference","aria-describedby","_$memo","open","contentId","undefined","data-state"],"sources":["../../../../src/components/tooltip/TooltipTrigger/TooltipTrigger.tsx"],"sourcesContent":["import type { ValidComponent } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\n\nimport { useTooltipTrigger } from \"./useTooltipTrigger\";\nimport type { TooltipTriggerProps } from \"./TooltipTrigger.types\";\n\nimport { Button } from \"~/components/button\";\n\n/**\n * 合并多个 ref,依次调用,谁都不会覆盖谁。\n *\n * 类型上写成 `Element | ((el: Element) => void)`,是为了匹配 Solid 的 ref\n * 类型约定(调用方在 JSX 里可以写 `ref={myVar}` 也可以写 `ref={(el) => ...}`)。\n * 但组件内部实际拿到的 props.ref,无论调用方是哪种写法,Solid 编译器都会\n * 统一规整成回调函数再转发进来(这是官方文档明确说明的行为:\n * https://docs.solidjs.com/concepts/refs#forwarding-refs),所以这里直接\n * 当函数调用即可,不需要再判断类型。\n */\nfunction mergeRefs(\n ...refs: Array<Element | ((el: Element) => void) | undefined>\n) {\n return (el: Element) => {\n for (const ref of refs) {\n if (typeof ref === \"function\") ref(el);\n }\n };\n}\n\nexport const TooltipTrigger = <\n T extends ValidComponent = typeof Button<\"button\">,\n>(\n props: TooltipTriggerProps<T>,\n) => {\n const { ctx, attachListeners } = useTooltipTrigger();\n\n return (\n <Dynamic\n {...props}\n component={(props.component as ValidComponent) ?? Button<\"button\">}\n ref={mergeRefs(ctx.setReference, props.ref, attachListeners)}\n aria-describedby={ctx.open() ? ctx.contentId : undefined}\n data-state={ctx.open() ? \"open\" : \"closed\"}\n // data-disabled={props.disabled ? \"\" : undefined}\n />\n );\n};\n"],"mappings":";;;;AAkBA,SAASK,EACP,GAAGC,GACH;CACA,QAAQG,MAAgB;EACtB,KAAK,IAAMC,KAAOJ,GAChB,AAAI,OAAOI,KAAQ,cAAYA,EAAID,CAAE;CAEzC;AACF;AAEA,IAAaE,KAGXC,MACG;CACH,IAAM,EAAEE,QAAKC,uBAAoBb,EAAkB;CAEnD,OAAAc,EACGf,GAAOgB,EACFL,GAAK;EAAA,IACTM,YAAS;GAAA,OAAGN,EAAMM,aAAgCd;EAAgB;EAAAM,IAAAS,GAAA;GAAA,IAAAC,IAC7Df,EAAUS,EAAIO,cAAcT,EAAMF,KAAKK,CAAe;GAAC,OAAAK,KAAA,cAAAA,EAAAD,CAAA;EAAA;EAAA,IAAA,qBAAA;GAAA,OAC1CI,QAAA,CAAA,CAAAT,EAAIU,KAAK,CAAC,CAAA,CAAA,IAAGV,EAAIW,YAAYC,KAAAA;EAAS;EAAA,IAAA,eAAA;GAAA,OAC5CZ,EAAIU,KAAK,IAAI,SAAS;EAAQ;CAAA,CAAA,CAAA;AAIhD"}
@@ -0,0 +1,3 @@
1
+ import { ValidComponent } from 'solid-js';
2
+ import { PolymorphicProps } from '../../../types';
3
+ export type TooltipTriggerProps<T extends ValidComponent> = PolymorphicProps<T>;
@@ -1 +1,4 @@
1
1
  export { TooltipTrigger } from './TooltipTrigger';
2
+ export type { TooltipTriggerProps } from './TooltipTrigger.types';
3
+ export { useTooltipTrigger } from './useTooltipTrigger';
4
+ export type { UseTooltipTriggerResult } from './useTooltipTrigger';
@@ -1,2 +1,29 @@
1
- import { ChildrenReturn } from 'solid-js';
2
- export declare const useTooltipTrigger: (resolved: ChildrenReturn) => void;
1
+ import { useTooltipContext } from '../Tooltip/Tooltip.context';
2
+ export interface UseTooltipTriggerResult {
3
+ ctx: ReturnType<typeof useTooltipContext>;
4
+ /**
5
+ * 把打开/关闭相关的原生事件监听器绑定到真正的 DOM 元素上(通过 ref 调用)。
6
+ * 用 addEventListener 而不是 JSX 的 onXxx prop,是为了不占用这些 prop 名——
7
+ * 调用方可以在 <TooltipTrigger onClick={...} onMouseEnter={...}> 上自由传
8
+ * 自己的原生事件处理,两者是完全独立的两套机制(一个走 Solid 的事件系统,
9
+ * 一个是原生 addEventListener),互不覆盖、都会正常触发。
10
+ */
11
+ attachListeners: (el: Element) => void;
12
+ }
13
+ /**
14
+ * 封装 TooltipTrigger 需要绑定的所有事件逻辑:
15
+ * - pointerenter/pointerleave(悬停进入/离开)走 openDelay/closeDelay
16
+ * - focus/blur(键盘导航)跳过延迟,立即开关——这是无障碍要求,键盘用户不该被迫等待
17
+ * - Escape 立即关闭,并阻止冒泡(避免被外层其他也监听 Escape 的逻辑重复处理)
18
+ * - mousedown 立即关闭——贴近 shadcn/Radix 的行为:用户开始点击这个元素,
19
+ * 就意味着要跟它交互了,tooltip 这时候还杵在那儿会挡视线,应该立刻让路,
20
+ * 不用等 pointerleave 或者走 closeDelay。
21
+ *
22
+ * mousedown 和 focus 之间有一个容易踩的坑:原生事件顺序是
23
+ * mousedown → focus → mouseup → click——点击一个可聚焦元素(比如 <button>),
24
+ * 浏览器会在 mousedown 之后自动给它 focus。如果不做处理,mousedown 刚关掉
25
+ * tooltip,紧跟着浏览器自动触发的 focus 又会把它立刻重新打开,两条逻辑打架。
26
+ * 用 isPointerDown 标记"这次 focus 是不是紧跟在点击后面被动触发的",是的话
27
+ * 就跳过重新打开,只有真正的键盘 Tab 导航触发的 focus 才会打开 tooltip。
28
+ */
29
+ export declare function useTooltipTrigger(): UseTooltipTriggerResult;
@@ -1,34 +1,34 @@
1
1
  import { useTooltipContext as e } from "../Tooltip/Tooltip.context.js";
2
- import { onCleanup as t, onMount as n } from "solid-js";
2
+ import { onCleanup as t } from "solid-js";
3
3
  //#region src/components/tooltip/TooltipTrigger/useTooltipTrigger.ts
4
- var r = (r) => {
5
- let { setOpen: i, openDelay: a, closeDelay: o, setTriggerRef: s } = e(), c, l, u = () => {
6
- clearTimeout(l), c = setTimeout(() => i(!0), a);
7
- }, d = () => {
8
- clearTimeout(c), l = setTimeout(() => i(!1), o);
9
- }, f = (e) => {
10
- console.log("鼠标移入", e.type), u();
11
- }, p = (e) => {
12
- console.log("鼠标移出", e.type), d();
13
- }, m = (e) => {
14
- console.log("鼠标按下", e.type), d();
15
- };
16
- n(() => {
17
- let e = r.toArray();
18
- e.length !== 1 && console.warn("[Tooltip] TooltipTrigger should have exactly one child");
19
- let n = e[0];
20
- if (n) {
21
- if (!(n instanceof HTMLElement)) {
22
- console.error("[Tooltip] TooltipTrigger child should be an HTMLElement");
23
- return;
24
- }
25
- s(n), n.addEventListener("pointerenter", f), n.addEventListener("pointerleave", p), n.addEventListener("mousedown", m), n.addEventListener("blur", p), t(() => {
26
- clearTimeout(c), clearTimeout(l), n && (n.removeEventListener("pointerenter", f), n.removeEventListener("pointerleave", p), n.removeEventListener("mousedown", m), n.removeEventListener("blur", p));
4
+ function n() {
5
+ let n = e("TooltipTrigger");
6
+ return {
7
+ ctx: n,
8
+ attachListeners: (e) => {
9
+ let r = !1, i = () => {
10
+ n.disabled() || n.requestOpen();
11
+ }, a = () => {
12
+ n.requestClose();
13
+ }, o = () => {
14
+ r || n.disabled() || n.openImmediate();
15
+ }, s = () => {
16
+ n.closeImmediate();
17
+ }, c = (e) => {
18
+ let t = e;
19
+ t.key === "Escape" && n.open() && (t.stopPropagation(), n.closeImmediate());
20
+ }, l = () => {
21
+ r = !0, !n.disabled() && n.open() && n.closeImmediate();
22
+ }, u = () => {
23
+ r = !1;
24
+ };
25
+ e.addEventListener("pointerenter", i), e.addEventListener("pointerleave", a), e.addEventListener("focus", o), e.addEventListener("blur", s), e.addEventListener("keydown", c), e.addEventListener("mousedown", l), document.addEventListener("mouseup", u), t(() => {
26
+ e.removeEventListener("pointerenter", i), e.removeEventListener("pointerleave", a), e.removeEventListener("focus", o), e.removeEventListener("blur", s), e.removeEventListener("keydown", c), e.removeEventListener("mousedown", l), document.removeEventListener("mouseup", u);
27
27
  });
28
28
  }
29
- });
30
- };
29
+ };
30
+ }
31
31
  //#endregion
32
- export { r as useTooltipTrigger };
32
+ export { n as useTooltipTrigger };
33
33
 
34
34
  //# sourceMappingURL=useTooltipTrigger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTooltipTrigger.js","names":[],"sources":["../../../../src/components/tooltip/TooltipTrigger/useTooltipTrigger.ts"],"sourcesContent":["import { onCleanup, onMount, type ChildrenReturn } from \"solid-js\";\nimport type { TimeoutID } from \"~/types\";\nimport { useTooltipContext } from \"../Tooltip/Tooltip.context\";\n\nexport const useTooltipTrigger = (resolved: ChildrenReturn) => {\n const { setOpen, openDelay, closeDelay, setTriggerRef } = useTooltipContext();\n\n let openTimer: TimeoutID;\n let closeTimer: TimeoutID;\n\n const open = () => {\n clearTimeout(closeTimer);\n openTimer = setTimeout(() => setOpen(true), openDelay);\n };\n\n const close = () => {\n clearTimeout(openTimer);\n closeTimer = setTimeout(() => setOpen(false), closeDelay);\n };\n\n const handleMouseEnter = (ev: PointerEvent) => {\n console.log(\"鼠标移入\", ev.type);\n open();\n };\n const handleMouseLeave = (ev: PointerEvent | FocusEvent) => {\n console.log(\"鼠标移出\", ev.type);\n close();\n };\n const handleMouseDown = (ev: Event) => {\n console.log(\"鼠标按下\", ev.type);\n close();\n };\n\n onMount(() => {\n const trigger = resolved.toArray();\n if (trigger.length !== 1) {\n console.warn(\"[Tooltip] TooltipTrigger should have exactly one child\");\n }\n\n const el = trigger[0] as HTMLElement | undefined;\n\n if (!el) return;\n\n if (!(el instanceof HTMLElement)) {\n console.error(\"[Tooltip] TooltipTrigger child should be an HTMLElement\");\n return;\n }\n\n setTriggerRef(el);\n el.addEventListener(\"pointerenter\", handleMouseEnter);\n el.addEventListener(\"pointerleave\", handleMouseLeave);\n el.addEventListener(\"mousedown\", handleMouseDown);\n el.addEventListener(\"blur\", handleMouseLeave);\n\n onCleanup(() => {\n clearTimeout(openTimer);\n clearTimeout(closeTimer);\n\n if (!el) return;\n el.removeEventListener(\"pointerenter\", handleMouseEnter);\n el.removeEventListener(\"pointerleave\", handleMouseLeave);\n el.removeEventListener(\"mousedown\", handleMouseDown);\n el.removeEventListener(\"blur\", handleMouseLeave);\n });\n });\n\n // createEffect(() => {\n // el = resolved() as HTMLElement | undefined;\n // if (!el) return;\n\n // const handleMouseEnter = () => {\n // open();\n // };\n // const handleMouseLeave = () => {\n // close();\n // };\n // const handleMouseDown = () => close();\n\n // untrack(() => setTriggerRef(el!));\n // el.addEventListener(\"mouseenter\", handleMouseEnter);\n // el.addEventListener(\"mouseleave\", handleMouseLeave);\n // el.addEventListener(\"mousedown\", handleMouseDown);\n // el.addEventListener(\"blur\", handleMouseLeave);\n\n // onCleanup(() => {\n // el!.removeEventListener(\"mouseenter\", handleMouseEnter);\n // el!.removeEventListener(\"mouseleave\", handleMouseLeave);\n // el!.removeEventListener(\"mousedown\", handleMouseDown);\n // el!.removeEventListener(\"blur\", handleMouseLeave);\n // });\n // });\n\n // onCleanup(() => {\n // clearTimeout(openTimer);\n // clearTimeout(closeTimer);\n // });\n};\n"],"mappings":";;;AAIA,IAAa,KAAqB,MAA6B;CAC7D,IAAM,EAAE,YAAS,cAAW,eAAY,qBAAkB,GAAmB,EAEzE,GACA,GAEE,UAAa;AAEjB,EADA,aAAa,EAAW,EACxB,IAAY,iBAAiB,EAAQ,GAAK,EAAE,EAAU;IAGlD,UAAc;AAElB,EADA,aAAa,EAAU,EACvB,IAAa,iBAAiB,EAAQ,GAAM,EAAE,EAAW;IAGrD,KAAoB,MAAqB;AAE7C,EADA,QAAQ,IAAI,QAAQ,EAAG,KAAK,EAC5B,GAAM;IAEF,KAAoB,MAAkC;AAE1D,EADA,QAAQ,IAAI,QAAQ,EAAG,KAAK,EAC5B,GAAO;IAEH,KAAmB,MAAc;AAErC,EADA,QAAQ,IAAI,QAAQ,EAAG,KAAK,EAC5B,GAAO;;AAGT,SAAc;EACZ,IAAM,IAAU,EAAS,SAAS;AAClC,EAAI,EAAQ,WAAW,KACrB,QAAQ,KAAK,yDAAyD;EAGxE,IAAM,IAAK,EAAQ;AAEd,SAEL;OAAI,EAAE,aAAc,cAAc;AAChC,YAAQ,MAAM,0DAA0D;AACxE;;AASF,GANA,EAAc,EAAG,EACjB,EAAG,iBAAiB,gBAAgB,EAAiB,EACrD,EAAG,iBAAiB,gBAAgB,EAAiB,EACrD,EAAG,iBAAiB,aAAa,EAAgB,EACjD,EAAG,iBAAiB,QAAQ,EAAiB,EAE7C,QAAgB;AACd,iBAAa,EAAU,EACvB,aAAa,EAAW,EAEnB,MACL,EAAG,oBAAoB,gBAAgB,EAAiB,EACxD,EAAG,oBAAoB,gBAAgB,EAAiB,EACxD,EAAG,oBAAoB,aAAa,EAAgB,EACpD,EAAG,oBAAoB,QAAQ,EAAiB;KAChD;;GACF"}
1
+ {"version":3,"file":"useTooltipTrigger.js","names":[],"sources":["../../../../src/components/tooltip/TooltipTrigger/useTooltipTrigger.ts"],"sourcesContent":["import { onCleanup } from \"solid-js\";\nimport { useTooltipContext } from \"../Tooltip/Tooltip.context\";\n\nexport interface UseTooltipTriggerResult {\n ctx: ReturnType<typeof useTooltipContext>;\n /**\n * 把打开/关闭相关的原生事件监听器绑定到真正的 DOM 元素上(通过 ref 调用)。\n * 用 addEventListener 而不是 JSX 的 onXxx prop,是为了不占用这些 prop 名——\n * 调用方可以在 <TooltipTrigger onClick={...} onMouseEnter={...}> 上自由传\n * 自己的原生事件处理,两者是完全独立的两套机制(一个走 Solid 的事件系统,\n * 一个是原生 addEventListener),互不覆盖、都会正常触发。\n */\n attachListeners: (el: Element) => void;\n}\n\n/**\n * 封装 TooltipTrigger 需要绑定的所有事件逻辑:\n * - pointerenter/pointerleave(悬停进入/离开)走 openDelay/closeDelay\n * - focus/blur(键盘导航)跳过延迟,立即开关——这是无障碍要求,键盘用户不该被迫等待\n * - Escape 立即关闭,并阻止冒泡(避免被外层其他也监听 Escape 的逻辑重复处理)\n * - mousedown 立即关闭——贴近 shadcn/Radix 的行为:用户开始点击这个元素,\n * 就意味着要跟它交互了,tooltip 这时候还杵在那儿会挡视线,应该立刻让路,\n * 不用等 pointerleave 或者走 closeDelay。\n *\n * mousedown 和 focus 之间有一个容易踩的坑:原生事件顺序是\n * mousedown → focus → mouseup → click——点击一个可聚焦元素(比如 <button>),\n * 浏览器会在 mousedown 之后自动给它 focus。如果不做处理,mousedown 刚关掉\n * tooltip,紧跟着浏览器自动触发的 focus 又会把它立刻重新打开,两条逻辑打架。\n * 用 isPointerDown 标记\"这次 focus 是不是紧跟在点击后面被动触发的\",是的话\n * 就跳过重新打开,只有真正的键盘 Tab 导航触发的 focus 才会打开 tooltip。\n */\nexport function useTooltipTrigger(): UseTooltipTriggerResult {\n const ctx = useTooltipContext(\"TooltipTrigger\");\n\n const attachListeners = (el: Element) => {\n let isPointerDown = false;\n\n const onPointerEnter = () => {\n if (!ctx.disabled()) ctx.requestOpen();\n };\n const onPointerLeave = () => {\n ctx.requestClose();\n };\n const onFocus = () => {\n // 紧跟在 mousedown 后面的这次 focus 是浏览器自动带出来的副作用,\n // 不代表用户在用键盘导航,不应该重新打开刚被 mousedown 关掉的 tooltip。\n if (isPointerDown) return;\n if (!ctx.disabled()) ctx.openImmediate();\n };\n const onBlur = () => {\n ctx.closeImmediate();\n };\n const onKeyDown = (e: Event) => {\n const keyboardEvent = e as KeyboardEvent;\n if (keyboardEvent.key === \"Escape\" && ctx.open()) {\n keyboardEvent.stopPropagation();\n ctx.closeImmediate();\n }\n };\n const onMouseDown = () => {\n isPointerDown = true;\n if (ctx.disabled()) return;\n if (ctx.open()) ctx.closeImmediate();\n };\n // 标记要在 mouseup 时清掉,而且特意监听 document 而不是元素自己的\n // mouseup——如果鼠标按下后拖动到元素外面再松开,元素自己收不到 mouseup,\n // 标记会一直卡在 true,导致后续真正的键盘 focus 也被误伤跳过。\n const onDocumentMouseUp = () => {\n isPointerDown = false;\n };\n\n el.addEventListener(\"pointerenter\", onPointerEnter);\n el.addEventListener(\"pointerleave\", onPointerLeave);\n el.addEventListener(\"focus\", onFocus);\n el.addEventListener(\"blur\", onBlur);\n el.addEventListener(\"keydown\", onKeyDown);\n el.addEventListener(\"mousedown\", onMouseDown);\n document.addEventListener(\"mouseup\", onDocumentMouseUp);\n\n onCleanup(() => {\n el.removeEventListener(\"pointerenter\", onPointerEnter);\n el.removeEventListener(\"pointerleave\", onPointerLeave);\n el.removeEventListener(\"focus\", onFocus);\n el.removeEventListener(\"blur\", onBlur);\n el.removeEventListener(\"keydown\", onKeyDown);\n el.removeEventListener(\"mousedown\", onMouseDown);\n document.removeEventListener(\"mouseup\", onDocumentMouseUp);\n });\n };\n\n return { ctx, attachListeners };\n}\n"],"mappings":";;;AA+BA,SAAgB,IAA6C;CAC3D,IAAM,IAAM,EAAkB,gBAAgB;CA0D9C,OAAO;EAAE;EAAK,kBAxDW,MAAgB;GACvC,IAAI,IAAgB,IAEd,UAAuB;IAC3B,AAAK,EAAI,SAAS,KAAG,EAAI,YAAY;GACvC,GACM,UAAuB;IAC3B,EAAI,aAAa;GACnB,GACM,UAAgB;IAGhB,KACC,EAAI,SAAS,KAAG,EAAI,cAAc;GACzC,GACM,UAAe;IACnB,EAAI,eAAe;GACrB,GACM,KAAa,MAAa;IAC9B,IAAM,IAAgB;IACtB,AAAI,EAAc,QAAQ,YAAY,EAAI,KAAK,MAC7C,EAAc,gBAAgB,GAC9B,EAAI,eAAe;GAEvB,GACM,UAAoB;IACxB,IAAgB,IACZ,GAAI,SAAS,KACb,EAAI,KAAK,KAAG,EAAI,eAAe;GACrC,GAIM,UAA0B;IAC9B,IAAgB;GAClB;GAUA,AARA,EAAG,iBAAiB,gBAAgB,CAAc,GAClD,EAAG,iBAAiB,gBAAgB,CAAc,GAClD,EAAG,iBAAiB,SAAS,CAAO,GACpC,EAAG,iBAAiB,QAAQ,CAAM,GAClC,EAAG,iBAAiB,WAAW,CAAS,GACxC,EAAG,iBAAiB,aAAa,CAAW,GAC5C,SAAS,iBAAiB,WAAW,CAAiB,GAEtD,QAAgB;IAOd,AANA,EAAG,oBAAoB,gBAAgB,CAAc,GACrD,EAAG,oBAAoB,gBAAgB,CAAc,GACrD,EAAG,oBAAoB,SAAS,CAAO,GACvC,EAAG,oBAAoB,QAAQ,CAAM,GACrC,EAAG,oBAAoB,WAAW,CAAS,GAC3C,EAAG,oBAAoB,aAAa,CAAW,GAC/C,SAAS,oBAAoB,WAAW,CAAiB;GAC3D,CAAC;EACH;CAE8B;AAChC"}