@neut/ui 0.0.1 → 0.0.3

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 (383) hide show
  1. package/README.md +6 -4
  2. package/dist/components/accordion/Accordion/Accordion.context.d.ts +9 -10
  3. package/dist/components/accordion/Accordion/Accordion.context.js +23 -25
  4. package/dist/components/accordion/Accordion/Accordion.context.js.map +1 -0
  5. package/dist/components/accordion/Accordion/Accordion.d.ts +1 -1
  6. package/dist/components/accordion/Accordion/Accordion.js +25 -21
  7. package/dist/components/accordion/Accordion/Accordion.js.map +1 -0
  8. package/dist/components/accordion/Accordion/Accordion.types.d.ts +8 -7
  9. package/dist/components/accordion/Accordion/index.d.ts +2 -0
  10. package/dist/components/accordion/Accordion/useAccordion.d.ts +3 -0
  11. package/dist/components/accordion/Accordion/useAccordion.js +34 -0
  12. package/dist/components/accordion/Accordion/useAccordion.js.map +1 -0
  13. package/dist/components/accordion/AccordionContent/AccordionContent.js +25 -32
  14. package/dist/components/accordion/AccordionContent/AccordionContent.js.map +1 -0
  15. package/dist/components/accordion/AccordionItem/AccordionItem.context.d.ts +5 -7
  16. package/dist/components/accordion/AccordionItem/AccordionItem.context.js +6 -20
  17. package/dist/components/accordion/AccordionItem/AccordionItem.context.js.map +1 -0
  18. package/dist/components/accordion/AccordionItem/AccordionItem.d.ts +1 -1
  19. package/dist/components/accordion/AccordionItem/AccordionItem.js +20 -19
  20. package/dist/components/accordion/AccordionItem/AccordionItem.js.map +1 -0
  21. package/dist/components/accordion/AccordionItem/AccordionItem.types.d.ts +4 -3
  22. package/dist/components/accordion/AccordionTrigger/AccordionTrigger.js +18 -21
  23. package/dist/components/accordion/AccordionTrigger/AccordionTrigger.js.map +1 -0
  24. package/dist/components/accordion/index.js +5 -0
  25. package/dist/components/aspect-ratio/AspectRatio.js +3 -1
  26. package/dist/components/aspect-ratio/AspectRatio.js.map +1 -0
  27. package/dist/components/aspect-ratio/AspectRatio.styles.js +3 -1
  28. package/dist/components/aspect-ratio/AspectRatio.styles.js.map +1 -0
  29. package/dist/components/aspect-ratio/index.js +2 -0
  30. package/dist/components/avatar/Avatar/Avatar.context.js +2 -0
  31. package/dist/components/avatar/Avatar/Avatar.context.js.map +1 -0
  32. package/dist/components/avatar/Avatar/Avatar.js +3 -1
  33. package/dist/components/avatar/Avatar/Avatar.js.map +1 -0
  34. package/dist/components/avatar/AvatarBadge/AvatarBadge.js +3 -1
  35. package/dist/components/avatar/AvatarBadge/AvatarBadge.js.map +1 -0
  36. package/dist/components/avatar/AvatarFallback/AvatarFallback.js +3 -1
  37. package/dist/components/avatar/AvatarFallback/AvatarFallback.js.map +1 -0
  38. package/dist/components/avatar/AvatarGroup/AvatarGroup.js +3 -1
  39. package/dist/components/avatar/AvatarGroup/AvatarGroup.js.map +1 -0
  40. package/dist/components/avatar/AvatarGroupCount/AvatarGroupCount.js +3 -1
  41. package/dist/components/avatar/AvatarGroupCount/AvatarGroupCount.js.map +1 -0
  42. package/dist/components/avatar/AvatarImage/AvatarImage.js +3 -1
  43. package/dist/components/avatar/AvatarImage/AvatarImage.js.map +1 -0
  44. package/dist/components/avatar/index.js +7 -0
  45. package/dist/components/badge/Badge.js +3 -1
  46. package/dist/components/badge/Badge.js.map +1 -0
  47. package/dist/components/badge/Badge.styles.js +3 -1
  48. package/dist/components/badge/Badge.styles.js.map +1 -0
  49. package/dist/components/badge/index.js +2 -0
  50. package/dist/components/button/Button.js +28 -25
  51. package/dist/components/button/Button.js.map +1 -0
  52. package/dist/components/button/Button.styles.js +3 -1
  53. package/dist/components/button/Button.styles.js.map +1 -0
  54. package/dist/components/button/Button.types.d.ts +1 -0
  55. package/dist/components/button/index.js +2 -0
  56. package/dist/components/button-group/ButtonGroup/ButtonGroup.js +3 -1
  57. package/dist/components/button-group/ButtonGroup/ButtonGroup.js.map +1 -0
  58. package/dist/components/button-group/ButtonGroup/ButtonGroup.styles.js +2 -0
  59. package/dist/components/button-group/ButtonGroup/ButtonGroup.styles.js.map +1 -0
  60. package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.js +3 -1
  61. package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.js.map +1 -0
  62. package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.styles.js +3 -1
  63. package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.styles.js.map +1 -0
  64. package/dist/components/button-group/ButtonGroupText/ButtonGroupText.js +3 -1
  65. package/dist/components/button-group/ButtonGroupText/ButtonGroupText.js.map +1 -0
  66. package/dist/components/button-group/ButtonGroupText/ButtonGroupText.styles.js +3 -1
  67. package/dist/components/button-group/ButtonGroupText/ButtonGroupText.styles.js.map +1 -0
  68. package/dist/components/button-group/index.js +4 -0
  69. package/dist/components/card/Card/Card.js +3 -1
  70. package/dist/components/card/Card/Card.js.map +1 -0
  71. package/dist/components/card/Card/Card.styles.d.ts +1 -1
  72. package/dist/components/card/Card/Card.styles.js +3 -1
  73. package/dist/components/card/Card/Card.styles.js.map +1 -0
  74. package/dist/components/card/CardAction/CardAction.js +3 -1
  75. package/dist/components/card/CardAction/CardAction.js.map +1 -0
  76. package/dist/components/card/CardAction/CardAction.styles.js +2 -0
  77. package/dist/components/card/CardAction/CardAction.styles.js.map +1 -0
  78. package/dist/components/card/CardContent/CardContent.js +3 -1
  79. package/dist/components/card/CardContent/CardContent.js.map +1 -0
  80. package/dist/components/card/CardContent/CardContent.styles.d.ts +1 -1
  81. package/dist/components/card/CardContent/CardContent.styles.js +3 -1
  82. package/dist/components/card/CardContent/CardContent.styles.js.map +1 -0
  83. package/dist/components/card/CardDescription/CardDescription.js +3 -1
  84. package/dist/components/card/CardDescription/CardDescription.js.map +1 -0
  85. package/dist/components/card/CardDescription/CardDescription.styles.js +2 -0
  86. package/dist/components/card/CardDescription/CardDescription.styles.js.map +1 -0
  87. package/dist/components/card/CardFooter/CardFooter.js +3 -1
  88. package/dist/components/card/CardFooter/CardFooter.js.map +1 -0
  89. package/dist/components/card/CardFooter/CardFooter.styles.js +2 -0
  90. package/dist/components/card/CardFooter/CardFooter.styles.js.map +1 -0
  91. package/dist/components/card/CardHeader/CardHeader.js +3 -1
  92. package/dist/components/card/CardHeader/CardHeader.js.map +1 -0
  93. package/dist/components/card/CardHeader/CardHeader.styles.js +2 -0
  94. package/dist/components/card/CardHeader/CardHeader.styles.js.map +1 -0
  95. package/dist/components/card/CardTitle/CardTitle.js +3 -1
  96. package/dist/components/card/CardTitle/CardTitle.js.map +1 -0
  97. package/dist/components/card/CardTitle/CardTitle.styles.js +2 -0
  98. package/dist/components/card/CardTitle/CardTitle.styles.js.map +1 -0
  99. package/dist/components/card/index.js +8 -0
  100. package/dist/components/carousel/Carousel/Carousel.context.js +2 -0
  101. package/dist/components/carousel/Carousel/Carousel.context.js.map +1 -0
  102. package/dist/components/carousel/Carousel/Carousel.js +3 -1
  103. package/dist/components/carousel/Carousel/Carousel.js.map +1 -0
  104. package/dist/components/carousel/Carousel/useAutoPlay.js +2 -0
  105. package/dist/components/carousel/Carousel/useAutoPlay.js.map +1 -0
  106. package/dist/components/carousel/Carousel/useCarousel.js +2 -0
  107. package/dist/components/carousel/Carousel/useCarousel.js.map +1 -0
  108. package/dist/components/carousel/Carousel/useKeyboardNavigation.js +2 -0
  109. package/dist/components/carousel/Carousel/useKeyboardNavigation.js.map +1 -0
  110. package/dist/components/carousel/CarouselContent/CarouselContent.js +3 -1
  111. package/dist/components/carousel/CarouselContent/CarouselContent.js.map +1 -0
  112. package/dist/components/carousel/CarouselContent/useItemSizeMeasure.js +2 -0
  113. package/dist/components/carousel/CarouselContent/useItemSizeMeasure.js.map +1 -0
  114. package/dist/components/carousel/CarouselDots/CarouselDots.js +2 -0
  115. package/dist/components/carousel/CarouselDots/CarouselDots.js.map +1 -0
  116. package/dist/components/carousel/CarouselItem/CarouselItem.js +3 -1
  117. package/dist/components/carousel/CarouselItem/CarouselItem.js.map +1 -0
  118. package/dist/components/carousel/CarouselNext/CarouselNext.js +3 -1
  119. package/dist/components/carousel/CarouselNext/CarouselNext.js.map +1 -0
  120. package/dist/components/carousel/CarouselPrevious/CarouselPrevious.js +3 -1
  121. package/dist/components/carousel/CarouselPrevious/CarouselPrevious.js.map +1 -0
  122. package/dist/components/carousel/index.js +7 -0
  123. package/dist/components/field/Field/Field.js +3 -1
  124. package/dist/components/field/Field/Field.js.map +1 -0
  125. package/dist/components/field/Field/Field.styles.js +2 -0
  126. package/dist/components/field/Field/Field.styles.js.map +1 -0
  127. package/dist/components/field/FieldContent/FieldContent.js +3 -1
  128. package/dist/components/field/FieldContent/FieldContent.js.map +1 -0
  129. package/dist/components/field/FieldDescription/FieldDescription.js +3 -1
  130. package/dist/components/field/FieldDescription/FieldDescription.js.map +1 -0
  131. package/dist/components/field/FieldError/FieldError.js +3 -1
  132. package/dist/components/field/FieldError/FieldError.js.map +1 -0
  133. package/dist/components/field/FieldGroup/FieldGroup.js +3 -1
  134. package/dist/components/field/FieldGroup/FieldGroup.js.map +1 -0
  135. package/dist/components/field/FieldLabel/FieldLabel.js +3 -1
  136. package/dist/components/field/FieldLabel/FieldLabel.js.map +1 -0
  137. package/dist/components/field/FieldLegend/FieldLegend.js +3 -1
  138. package/dist/components/field/FieldLegend/FieldLegend.js.map +1 -0
  139. package/dist/components/field/FieldSeparator/FieldSeparator.js +3 -1
  140. package/dist/components/field/FieldSeparator/FieldSeparator.js.map +1 -0
  141. package/dist/components/field/FieldSet/FieldSet.js +3 -1
  142. package/dist/components/field/FieldSet/FieldSet.js.map +1 -0
  143. package/dist/components/field/FieldTitle/FieldTitle.js +3 -1
  144. package/dist/components/field/FieldTitle/FieldTitle.js.map +1 -0
  145. package/dist/components/field/index.js +11 -0
  146. package/dist/components/image/Image.config.js +2 -0
  147. package/dist/components/image/Image.config.js.map +1 -0
  148. package/dist/components/image/Image.js +2 -0
  149. package/dist/components/image/Image.js.map +1 -0
  150. package/dist/components/image/Image.utils.js +2 -0
  151. package/dist/components/image/Image.utils.js.map +1 -0
  152. package/dist/components/image/ImageElement.js +2 -0
  153. package/dist/components/image/ImageElement.js.map +1 -0
  154. package/dist/components/image/ImagePreload.js +2 -0
  155. package/dist/components/image/ImagePreload.js.map +1 -0
  156. package/dist/components/image/index.js +2 -0
  157. package/dist/components/input/Input.js +3 -1
  158. package/dist/components/input/Input.js.map +1 -0
  159. package/dist/components/input/index.js +2 -0
  160. package/dist/components/input-group/InputGroup/InputGroup.js +3 -1
  161. package/dist/components/input-group/InputGroup/InputGroup.js.map +1 -0
  162. package/dist/components/input-group/InputGroupAddon/InputGroupAddon.js +3 -1
  163. package/dist/components/input-group/InputGroupAddon/InputGroupAddon.js.map +1 -0
  164. package/dist/components/input-group/InputGroupAddon/InputGroupAddon.styles.js +2 -0
  165. package/dist/components/input-group/InputGroupAddon/InputGroupAddon.styles.js.map +1 -0
  166. package/dist/components/input-group/InputGroupButton/InputGroupButton.js +3 -1
  167. package/dist/components/input-group/InputGroupButton/InputGroupButton.js.map +1 -0
  168. package/dist/components/input-group/InputGroupButton/InputGroupButton.styles.js +2 -0
  169. package/dist/components/input-group/InputGroupButton/InputGroupButton.styles.js.map +1 -0
  170. package/dist/components/input-group/InputGroupInput/InputGroupInput.js +3 -1
  171. package/dist/components/input-group/InputGroupInput/InputGroupInput.js.map +1 -0
  172. package/dist/components/input-group/InputGroupText/InputGroupText.js +3 -1
  173. package/dist/components/input-group/InputGroupText/InputGroupText.js.map +1 -0
  174. package/dist/components/input-group/InputGroupTextarea/InputGroupTextarea.js +3 -1
  175. package/dist/components/input-group/InputGroupTextarea/InputGroupTextarea.js.map +1 -0
  176. package/dist/components/input-group/index.js +7 -0
  177. package/dist/components/item/Item/Item.js +3 -1
  178. package/dist/components/item/Item/Item.js.map +1 -0
  179. package/dist/components/item/Item/Item.styles.js +2 -0
  180. package/dist/components/item/Item/Item.styles.js.map +1 -0
  181. package/dist/components/item/ItemActions/ItemActions.js +3 -1
  182. package/dist/components/item/ItemActions/ItemActions.js.map +1 -0
  183. package/dist/components/item/ItemContent/ItemContent.js +3 -1
  184. package/dist/components/item/ItemContent/ItemContent.js.map +1 -0
  185. package/dist/components/item/ItemDescription/ItemDescription.js +3 -1
  186. package/dist/components/item/ItemDescription/ItemDescription.js.map +1 -0
  187. package/dist/components/item/ItemFooter/ItemFooter.js +3 -1
  188. package/dist/components/item/ItemFooter/ItemFooter.js.map +1 -0
  189. package/dist/components/item/ItemGroup/ItemGroup.js +3 -1
  190. package/dist/components/item/ItemGroup/ItemGroup.js.map +1 -0
  191. package/dist/components/item/ItemHeader/ItemHeader.js +3 -1
  192. package/dist/components/item/ItemHeader/ItemHeader.js.map +1 -0
  193. package/dist/components/item/ItemMedia/ItemMedia.js +3 -1
  194. package/dist/components/item/ItemMedia/ItemMedia.js.map +1 -0
  195. package/dist/components/item/ItemMedia/ItemMedia.styles.js +2 -0
  196. package/dist/components/item/ItemMedia/ItemMedia.styles.js.map +1 -0
  197. package/dist/components/item/ItemSeparator/ItemSeparator.js +3 -1
  198. package/dist/components/item/ItemSeparator/ItemSeparator.js.map +1 -0
  199. package/dist/components/item/ItemTitle/ItemTitle.js +3 -1
  200. package/dist/components/item/ItemTitle/ItemTitle.js.map +1 -0
  201. package/dist/components/item/index.js +11 -0
  202. package/dist/components/kbd/Kbd.js +3 -1
  203. package/dist/components/kbd/Kbd.js.map +1 -0
  204. package/dist/components/kbd/index.js +2 -0
  205. package/dist/components/label/Label.js +3 -1
  206. package/dist/components/label/Label.js.map +1 -0
  207. package/dist/components/label/index.js +2 -0
  208. package/dist/components/pagination/Pagination/Pagination.js +3 -1
  209. package/dist/components/pagination/Pagination/Pagination.js.map +1 -0
  210. package/dist/components/pagination/PaginationContent/PaginationContent.js +3 -1
  211. package/dist/components/pagination/PaginationContent/PaginationContent.js.map +1 -0
  212. package/dist/components/pagination/PaginationEllipsis/PaginationEllipsis.js +3 -1
  213. package/dist/components/pagination/PaginationEllipsis/PaginationEllipsis.js.map +1 -0
  214. package/dist/components/pagination/PaginationItem/PaginationItem.js +2 -0
  215. package/dist/components/pagination/PaginationItem/PaginationItem.js.map +1 -0
  216. package/dist/components/pagination/PaginationLink/PaginationLink.js +3 -1
  217. package/dist/components/pagination/PaginationLink/PaginationLink.js.map +1 -0
  218. package/dist/components/pagination/PaginationNext/PaginationNext.js +3 -1
  219. package/dist/components/pagination/PaginationNext/PaginationNext.js.map +1 -0
  220. package/dist/components/pagination/PaginationPrevious/PaginationPrevious.js +3 -1
  221. package/dist/components/pagination/PaginationPrevious/PaginationPrevious.js.map +1 -0
  222. package/dist/components/pagination/index.js +8 -0
  223. package/dist/components/scroll-area/ScrollArea/ScrollArea.context.d.ts +1 -1
  224. package/dist/components/scroll-area/ScrollArea/ScrollArea.context.js +2 -0
  225. package/dist/components/scroll-area/ScrollArea/ScrollArea.context.js.map +1 -0
  226. package/dist/components/scroll-area/ScrollArea/ScrollArea.js +32 -30
  227. package/dist/components/scroll-area/ScrollArea/ScrollArea.js.map +1 -0
  228. package/dist/components/scroll-area/ScrollArea/ScrollArea.utils.js +2 -0
  229. package/dist/components/scroll-area/ScrollArea/ScrollArea.utils.js.map +1 -0
  230. package/dist/components/scroll-area/ScrollBar/ScrollBar.js +3 -1
  231. package/dist/components/scroll-area/ScrollBar/ScrollBar.js.map +1 -0
  232. package/dist/components/scroll-area/index.js +3 -0
  233. package/dist/components/separator/Separator.js +3 -1
  234. package/dist/components/separator/Separator.js.map +1 -0
  235. package/dist/components/separator/Separator.styles.js +3 -1
  236. package/dist/components/separator/Separator.styles.js.map +1 -0
  237. package/dist/components/separator/index.js +2 -0
  238. package/dist/components/sidebar/Sidebar/Sidebar.js +3 -1
  239. package/dist/components/sidebar/Sidebar/Sidebar.js.map +1 -0
  240. package/dist/components/sidebar/SidebarContent/SidebarContent.js +3 -1
  241. package/dist/components/sidebar/SidebarContent/SidebarContent.js.map +1 -0
  242. package/dist/components/sidebar/SidebarFooter/SidebarFooter.js +3 -1
  243. package/dist/components/sidebar/SidebarFooter/SidebarFooter.js.map +1 -0
  244. package/dist/components/sidebar/SidebarGroup/SidebarGroup.js +3 -1
  245. package/dist/components/sidebar/SidebarGroup/SidebarGroup.js.map +1 -0
  246. package/dist/components/sidebar/SidebarGroupAction/SidebarGroupAction.js +3 -1
  247. package/dist/components/sidebar/SidebarGroupAction/SidebarGroupAction.js.map +1 -0
  248. package/dist/components/sidebar/SidebarGroupContent/SidebarGroupContent.js +3 -1
  249. package/dist/components/sidebar/SidebarGroupContent/SidebarGroupContent.js.map +1 -0
  250. package/dist/components/sidebar/SidebarGroupLabel/SidebarGroupLabel.js +3 -1
  251. package/dist/components/sidebar/SidebarGroupLabel/SidebarGroupLabel.js.map +1 -0
  252. package/dist/components/sidebar/SidebarHeader/SidebarHeader.js +3 -1
  253. package/dist/components/sidebar/SidebarHeader/SidebarHeader.js.map +1 -0
  254. package/dist/components/sidebar/SidebarInput/SidebarInput.js +3 -1
  255. package/dist/components/sidebar/SidebarInput/SidebarInput.js.map +1 -0
  256. package/dist/components/sidebar/SidebarInset/SidebarInset.js +3 -1
  257. package/dist/components/sidebar/SidebarInset/SidebarInset.js.map +1 -0
  258. package/dist/components/sidebar/SidebarMenu/SidebarMenu.js +3 -1
  259. package/dist/components/sidebar/SidebarMenu/SidebarMenu.js.map +1 -0
  260. package/dist/components/sidebar/SidebarMenuBadge/SidebarMenuBadge.js +3 -1
  261. package/dist/components/sidebar/SidebarMenuBadge/SidebarMenuBadge.js.map +1 -0
  262. package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.js +3 -1
  263. package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.js.map +1 -0
  264. package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.styles.js +8 -5
  265. package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.styles.js.map +1 -0
  266. package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.types.d.ts +1 -1
  267. package/dist/components/sidebar/SidebarMenuItem/SidebarMenuItem.js +3 -1
  268. package/dist/components/sidebar/SidebarMenuItem/SidebarMenuItem.js.map +1 -0
  269. package/dist/components/sidebar/SidebarMenuSkeleton/SidebarMenuSkeleton.js +3 -1
  270. package/dist/components/sidebar/SidebarMenuSkeleton/SidebarMenuSkeleton.js.map +1 -0
  271. package/dist/components/sidebar/SidebarMenuSub/SidebarMenuSub.js +3 -1
  272. package/dist/components/sidebar/SidebarMenuSub/SidebarMenuSub.js.map +1 -0
  273. package/dist/components/sidebar/SidebarMenuSubButton/SidebarMenuSubButton.js +3 -1
  274. package/dist/components/sidebar/SidebarMenuSubButton/SidebarMenuSubButton.js.map +1 -0
  275. package/dist/components/sidebar/SidebarMenuSubItem/SidebarMenuSubItem.js +3 -1
  276. package/dist/components/sidebar/SidebarMenuSubItem/SidebarMenuSubItem.js.map +1 -0
  277. package/dist/components/sidebar/SidebarProvider/SidebarProvider.consts.js +2 -0
  278. package/dist/components/sidebar/SidebarProvider/SidebarProvider.consts.js.map +1 -0
  279. package/dist/components/sidebar/SidebarProvider/SidebarProvider.context.js +2 -0
  280. package/dist/components/sidebar/SidebarProvider/SidebarProvider.context.js.map +1 -0
  281. package/dist/components/sidebar/SidebarProvider/SidebarProvider.js +3 -1
  282. package/dist/components/sidebar/SidebarProvider/SidebarProvider.js.map +1 -0
  283. package/dist/components/sidebar/SidebarRail/SidebarRail.js +3 -1
  284. package/dist/components/sidebar/SidebarRail/SidebarRail.js.map +1 -0
  285. package/dist/components/sidebar/SidebarSeparator/SidebarSeparator.js +3 -1
  286. package/dist/components/sidebar/SidebarSeparator/SidebarSeparator.js.map +1 -0
  287. package/dist/components/sidebar/SidebarTrigger/SidebarTrigger.js +2 -0
  288. package/dist/components/sidebar/SidebarTrigger/SidebarTrigger.js.map +1 -0
  289. package/dist/components/sidebar/index.js +23 -0
  290. package/dist/components/skeleton/Skeleton.js +3 -1
  291. package/dist/components/skeleton/Skeleton.js.map +1 -0
  292. package/dist/components/skeleton/index.js +2 -0
  293. package/dist/components/spinner/Spinner.js +3 -1
  294. package/dist/components/spinner/Spinner.js.map +1 -0
  295. package/dist/components/spinner/Spinner.styles.js +3 -1
  296. package/dist/components/spinner/Spinner.styles.js.map +1 -0
  297. package/dist/components/spinner/index.js +2 -0
  298. package/dist/components/switch/Switch.js +3 -1
  299. package/dist/components/switch/Switch.js.map +1 -0
  300. package/dist/components/switch/Switch.styles.js +3 -1
  301. package/dist/components/switch/Switch.styles.js.map +1 -0
  302. package/dist/components/switch/index.js +2 -0
  303. package/dist/components/textarea/Textarea.js +3 -1
  304. package/dist/components/textarea/Textarea.js.map +1 -0
  305. package/dist/components/textarea/index.js +2 -0
  306. package/dist/components/toast/components/Assets.js +2 -0
  307. package/dist/components/toast/components/Assets.js.map +1 -0
  308. package/dist/components/toast/components/Toast.js +3 -1
  309. package/dist/components/toast/components/Toast.js.map +1 -0
  310. package/dist/components/toast/components/ToastActions.js +3 -1
  311. package/dist/components/toast/components/ToastActions.js.map +1 -0
  312. package/dist/components/toast/components/ToastContent.js +3 -1
  313. package/dist/components/toast/components/ToastContent.js.map +1 -0
  314. package/dist/components/toast/components/ToastIcon.js +3 -1
  315. package/dist/components/toast/components/ToastIcon.js.map +1 -0
  316. package/dist/components/toast/components/Toaster.js +2 -0
  317. package/dist/components/toast/components/Toaster.js.map +1 -0
  318. package/dist/components/toast/constants.js +2 -0
  319. package/dist/components/toast/constants.js.map +1 -0
  320. package/dist/components/toast/hooks/useSwipe.js +2 -0
  321. package/dist/components/toast/hooks/useSwipe.js.map +1 -0
  322. package/dist/components/toast/hooks/useTheme.js +2 -0
  323. package/dist/components/toast/hooks/useTheme.js.map +1 -0
  324. package/dist/components/toast/hooks/useToastHeight.js +2 -0
  325. package/dist/components/toast/hooks/useToastHeight.js.map +1 -0
  326. package/dist/components/toast/hooks/useToastSubscription.js +2 -0
  327. package/dist/components/toast/hooks/useToastSubscription.js.map +1 -0
  328. package/dist/components/toast/hooks/useToastTimer.js +2 -0
  329. package/dist/components/toast/hooks/useToastTimer.js.map +1 -0
  330. package/dist/components/toast/hooks/useToasterKeyboard.js +2 -0
  331. package/dist/components/toast/hooks/useToasterKeyboard.js.map +1 -0
  332. package/dist/components/toast/hooks.js +2 -0
  333. package/dist/components/toast/hooks.js.map +1 -0
  334. package/dist/components/toast/index.js +5 -0
  335. package/dist/components/toast/state.js +2 -0
  336. package/dist/components/toast/state.js.map +1 -0
  337. package/dist/components/toast/types.js +2 -0
  338. package/dist/components/toast/types.js.map +1 -0
  339. package/dist/components/toast/utils.js +2 -0
  340. package/dist/components/toast/utils.js.map +1 -0
  341. package/dist/components/tooltip/Tooltip/Tooltip.context.d.ts +1 -1
  342. package/dist/components/tooltip/Tooltip/Tooltip.context.js +2 -0
  343. package/dist/components/tooltip/Tooltip/Tooltip.context.js.map +1 -0
  344. package/dist/components/tooltip/Tooltip/Tooltip.js +24 -16
  345. package/dist/components/tooltip/Tooltip/Tooltip.js.map +1 -0
  346. package/dist/components/tooltip/TooltipArrow/TooltipArrow.js +13 -10
  347. package/dist/components/tooltip/TooltipArrow/TooltipArrow.js.map +1 -0
  348. package/dist/components/tooltip/TooltipContent/TooltipContent.context.d.ts +2 -1
  349. package/dist/components/tooltip/TooltipContent/TooltipContent.context.js +2 -0
  350. package/dist/components/tooltip/TooltipContent/TooltipContent.context.js.map +1 -0
  351. package/dist/components/tooltip/TooltipContent/TooltipContent.js +29 -19
  352. package/dist/components/tooltip/TooltipContent/TooltipContent.js.map +1 -0
  353. package/dist/components/tooltip/TooltipContent/TooltipContent.utils.js +2 -0
  354. package/dist/components/tooltip/TooltipContent/TooltipContent.utils.js.map +1 -0
  355. package/dist/components/tooltip/TooltipContent/useTooltipContent.js +28 -31
  356. package/dist/components/tooltip/TooltipContent/useTooltipContent.js.map +1 -0
  357. package/dist/components/tooltip/TooltipTrigger/TooltipTrigger.d.ts +2 -2
  358. package/dist/components/tooltip/TooltipTrigger/TooltipTrigger.js +7 -5
  359. package/dist/components/tooltip/TooltipTrigger/TooltipTrigger.js.map +1 -0
  360. package/dist/components/tooltip/TooltipTrigger/useTooltipTrigger.js +21 -7
  361. package/dist/components/tooltip/TooltipTrigger/useTooltipTrigger.js.map +1 -0
  362. package/dist/components/tooltip/index.js +5 -0
  363. package/dist/hooks/index.d.ts +1 -0
  364. package/dist/hooks/index.js +2 -0
  365. package/dist/hooks/useFontLoader.d.ts +86 -0
  366. package/dist/hooks/useFontLoader.js +89 -0
  367. package/dist/hooks/useFontLoader.js.map +1 -0
  368. package/dist/index.d.ts +2 -0
  369. package/dist/index.js +108 -104
  370. package/dist/ui.css +3 -0
  371. package/dist/{lib/utils → utils}/clsx.js +3 -1
  372. package/dist/utils/clsx.js.map +1 -0
  373. package/dist/utils/index.js +3 -0
  374. package/dist/utils/warn-once.js +6 -0
  375. package/dist/utils/warn-once.js.map +1 -0
  376. package/package.json +54 -9
  377. package/dist/styles/animate.css +0 -250
  378. package/dist/styles/index.css +0 -100
  379. package/dist/styles/toast.css +0 -745
  380. /package/dist/{lib/utils → utils}/clsx.d.ts +0 -0
  381. /package/dist/{lib/utils → utils}/get-style.d.ts +0 -0
  382. /package/dist/{lib/utils → utils}/index.d.ts +0 -0
  383. /package/dist/{lib/utils → utils}/warn-once.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.js","names":["createEffect","createMemo","createSignal","onMount","Show","Component","ToastIcon","ToastContent","ToastActions","useIsDocumentHidden","useToastTimer","useSwipe","useToastHeight","TIME_BEFORE_UNMOUNT","TOAST_LIFETIME","ToastProps","clsx","Button","X","Toast","props","toastRef","HTMLLIElement","mounted","setMounted","removed","setRemoved","isDocumentHidden","isFront","index","isVisible","visibleToasts","dismissible","toast","toastType","type","disabled","closeButton","duration","y","x","position","split","heightIndex","heights","findIndex","h","toastId","id","toastsHeightBefore","reduce","acc","curr","idx","height","offset","gap","deleteToast","swipe","setOffsetBeforeRemove","setHeights","filter","setTimeout","removeToast","initialHeight","expanded","interacting","swipeDirections","delete","onDismiss","_el$","_tmpl$","_$addEventListener","onPointerMove","onPointerUp","onPointerDown","onDragEnd","_ref$","_$use","_$setAttribute","_$insert","_$createComponent","when","_$memo","jsx","children","aria-label","closeButtonAriaLabel","data-disabled","onClick","undefined","icon","size","icons","classes","descriptionClassName","descriptionClass","cancelButtonStyle","actionButtonStyle","_$effect","_p$","_v$","class","default","_v$2","richColors","defaultRichColors","_v$3","unstyled","_v$4","_v$5","Boolean","promise","_v$6","isSwiped","_v$7","_v$8","_v$9","_v$0","_v$1","swiping","_v$10","_v$11","_v$12","invert","_v$13","swipeOut","_v$14","swipeOutDirection","_v$15","expandByDefault","_v$16","testId","_v$17","toasts","length","offsetBeforeRemove","style","e","_$className","t","a","o","i","n","s","r","d","l","u","c","w","m","f","g","p","_$style","_$delegateEvents"],"sources":["../../../../src/components/toast/components/Toast.tsx"],"sourcesContent":["/**\n * components/Toast.tsx\n * Renders a single toast item.\n * Composes sub-components (ToastIcon, ToastContent, ToastActions) and hooks\n * (useToastTimer, useSwipe, useToastHeight). No business logic lives here directly.\n */\nimport {\n createEffect,\n createMemo,\n createSignal,\n onMount,\n Show,\n type Component,\n} from \"solid-js\";\nimport { ToastIcon } from \"./ToastIcon\";\nimport { ToastContent } from \"./ToastContent\";\nimport { ToastActions } from \"./ToastActions\";\nimport { useIsDocumentHidden } from \"../hooks\";\nimport { useToastTimer } from \"../hooks/useToastTimer\";\nimport { useSwipe } from \"../hooks/useSwipe\";\nimport { useToastHeight } from \"../hooks/useToastHeight\";\nimport { TIME_BEFORE_UNMOUNT, TOAST_LIFETIME } from \"../constants\";\nimport type { ToastProps } from \"../types\";\nimport { clsx } from \"~/utils\";\nimport { Button } from \"~/components/button\";\nimport { X } from \"lucide-solid\";\n\nexport const Toast: Component<ToastProps> = (props) => {\n let toastRef: HTMLLIElement | undefined;\n\n const [mounted, setMounted] = createSignal(false);\n const [removed, setRemoved] = createSignal(false);\n\n const isDocumentHidden = useIsDocumentHidden();\n\n // Derived values\n const isFront = () => props.index === 0;\n const isVisible = () => props.index + 1 <= props.visibleToasts;\n const dismissible = () => props.toast.dismissible !== false;\n const toastType = () => props.toast.type ?? \"default\";\n const disabled = () => toastType() === \"loading\";\n\n const closeButton = () => props.toast.closeButton ?? props.closeButton;\n const duration = () =>\n props.toast.duration ?? props.duration ?? TOAST_LIFETIME;\n\n const [y, x] = props.position.split(\"-\");\n\n const heightIndex = createMemo(\n () => props.heights.findIndex((h) => h.toastId === props.toast.id) || 0,\n );\n\n const toastsHeightBefore = createMemo(() =>\n props.heights.reduce((acc, curr, idx) => {\n if (idx >= heightIndex()) return acc;\n return acc + curr.height;\n }, 0),\n );\n\n const offset = createMemo(\n () => heightIndex() * (props.gap ?? 14) + toastsHeightBefore(),\n );\n\n // ─── Mount animation ─────────────────────────────────────────────────────────\n onMount(() => setMounted(true));\n\n // ─── Delete helper ───────────────────────────────────────────────────────────\n const deleteToast = () => {\n setRemoved(true);\n swipe.setOffsetBeforeRemove(offset());\n props.setHeights((h) => h.filter((x) => x.toastId !== props.toast.id));\n setTimeout(() => props.removeToast(props.toast), TIME_BEFORE_UNMOUNT);\n };\n\n // ─── Sub-hooks ───────────────────────────────────────────────────────────────\n const { initialHeight } = useToastHeight({\n toastRef: () => toastRef,\n toast: () => props.toast,\n mounted,\n setHeights: props.setHeights,\n });\n\n useToastTimer({\n toast: props.toast,\n duration: duration(),\n expanded: () => props.expanded,\n interacting: () => props.interacting,\n isDocumentHidden,\n deleteToast,\n });\n\n const swipe = useSwipe({\n toastRef: () => toastRef,\n toast: props.toast,\n dismissible: dismissible(),\n position: props.position,\n swipeDirections: props.swipeDirections,\n offset,\n deleteToast,\n });\n\n // ─── External delete signal ──────────────────────────────────────────────────\n createEffect(() => {\n if (props.toast.delete) {\n deleteToast();\n props.toast.onDismiss?.(props.toast);\n }\n });\n\n return (\n <li\n // tabIndex={0}\n ref={toastRef}\n class={clsx(\n props.class,\n props.toast.class,\n props.classes?.toast,\n props.toast.classes?.toast,\n props.classes?.default,\n props.classes?.[toastType()],\n props.toast.classes?.[toastType()],\n )}\n data-sonner-toast=\"\"\n data-rich-colors={props.toast.richColors ?? props.defaultRichColors}\n data-styled={!(props.toast.jsx || props.toast.unstyled || props.unstyled)}\n data-mounted={mounted()}\n data-promise={Boolean(props.toast.promise)}\n data-swiped={swipe.isSwiped()}\n data-removed={removed()}\n data-visible={isVisible()}\n data-y-position={y}\n data-x-position={x}\n data-index={props.index}\n data-front={isFront()}\n data-swiping={swipe.swiping()}\n data-dismissible={dismissible()}\n data-type={toastType()}\n data-invert={props.toast.invert || props.invert}\n data-swipe-out={swipe.swipeOut()}\n data-swipe-direction={swipe.swipeOutDirection()}\n data-expanded={props.expanded || (props.expandByDefault && mounted())}\n data-testid={props.toast.testId}\n style={{\n \"--index\": props.index,\n \"--toasts-before\": props.index,\n \"--z-index\": props.toasts.length - props.index,\n \"--offset\": `${removed() ? swipe.offsetBeforeRemove() : offset()}px`,\n \"--initial-height\": props.expandByDefault\n ? \"auto\"\n : `${initialHeight()}px`,\n ...props.style,\n ...props.toast.style,\n }}\n onDragEnd={swipe.onDragEnd}\n onPointerDown={swipe.onPointerDown}\n onPointerUp={swipe.onPointerUp}\n onPointerMove={swipe.onPointerMove}\n >\n {/* Close button */}\n <Show\n when={\n closeButton() && !props.toast.jsx && props.toast.type !== \"loading\"\n }\n >\n <Button\n aria-label={props.closeButtonAriaLabel ?? \"Close toast\"}\n data-disabled={disabled()}\n data-close-button\n onClick={\n disabled() || !dismissible()\n ? undefined\n : () => {\n deleteToast();\n props.toast.onDismiss?.(props.toast);\n }\n }\n icon={<X />}\n size=\"xs\"\n />\n </Show>\n\n {/* Icon area */}\n <ToastIcon\n toast={props.toast}\n icons={props.icons}\n classes={props.classes}\n />\n\n {/* Text content */}\n <ToastContent\n toast={props.toast}\n classes={props.classes}\n descriptionClassName={props.descriptionClass}\n />\n\n {/* Action buttons */}\n <ToastActions\n toast={props.toast}\n classes={props.classes}\n cancelButtonStyle={props.cancelButtonStyle}\n actionButtonStyle={props.actionButtonStyle}\n dismissible={dismissible()}\n deleteToast={deleteToast}\n />\n </li>\n );\n};\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { clsx as e } from "../../../lib/utils/clsx.js";
1
+ import { clsx as e } from "../../../utils/clsx.js";
2
2
  import { isAction as t } from "../types.js";
3
3
  import { className as n, createComponent as r, delegateEvents as i, effect as a, insert as o, memo as s, style as c, template as l } from "solid-js/web";
4
4
  import { Show as u } from "solid-js";
@@ -58,3 +58,5 @@ var d = /* @__PURE__ */ l("<button type=button data-button data-cancel>"), f = /
58
58
  i(["click"]);
59
59
  //#endregion
60
60
  export { p as ToastActions };
61
+
62
+ //# sourceMappingURL=ToastActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToastActions.js","names":["JSX","Show","Component","isAction","ToastT","ToastClassnames","Action","clsx","ToastActionsProps","toast","classes","cancelButtonStyle","actionButtonStyle","dismissible","deleteToast","ToastActions","props","_$createComponent","when","cancel","children","_el$","_tmpl$","$$click","e","onClick","_$insert","label","_$effect","_p$","_v$","_v$2","cancelButton","_$style","t","_$className","undefined","_$memo","Element","action","_el$2","_tmpl$2","defaultPrevented","_v$3","_v$4","actionButton","_$delegateEvents"],"sources":["../../../../src/components/toast/components/ToastActions.tsx"],"sourcesContent":["import { type JSX, Show, type Component } from \"solid-js\";\nimport { isAction } from \"../types\";\nimport type { ToastT, ToastClassnames, Action } from \"../types\";\nimport { clsx } from \"~/utils\";\n\ninterface ToastActionsProps {\n toast: ToastT;\n classes?: ToastClassnames;\n cancelButtonStyle?: any;\n actionButtonStyle?: any;\n dismissible: boolean;\n deleteToast: () => void;\n}\n\nexport const ToastActions: Component<ToastActionsProps> = (props) => {\n return (\n <>\n {/* Cancel button */}\n <Show when={isAction(props.toast.cancel)}>\n <button\n type=\"button\"\n data-button\n data-cancel\n style={props.toast.cancelButtonStyle ?? props.cancelButtonStyle}\n class={clsx(\n props.classes?.cancelButton,\n props.toast.classes?.cancelButton,\n )}\n onClick={(e) => {\n if (!isAction(props.toast.cancel)) return;\n if (!props.dismissible) return;\n props.toast.cancel.onClick?.(e);\n props.deleteToast();\n }}\n >\n {(props.toast.cancel as Action).label}\n </button>\n </Show>\n\n {/* Cancel as custom element */}\n <Show when={props.toast.cancel && !isAction(props.toast.cancel)}>\n {props.toast.cancel as JSX.Element}\n </Show>\n\n {/* Action button */}\n <Show when={isAction(props.toast.action)}>\n <button\n type=\"button\"\n data-button\n data-action\n style={props.toast.actionButtonStyle ?? props.actionButtonStyle}\n class={clsx(\n props.classes?.actionButton,\n props.toast.classes?.actionButton,\n )}\n onClick={(e) => {\n if (!isAction(props.toast.action as any)) return;\n (props.toast.action as any).onClick?.(e);\n if (e.defaultPrevented) return;\n props.deleteToast();\n }}\n >\n {(props.toast.action as any).label}\n </button>\n </Show>\n\n {/* Action as custom element */}\n <Show when={props.toast.action && !isAction(props.toast.action as any)}>\n {props.toast.action as any}\n </Show>\n </>\n );\n};\n"],"mappings":";;;;;kJAcae,KAA8CC,MACzD;CAAAC,EAGKhB,GAAI;EAAA,IAACiB,OAAI;AAAA,UAAEf,EAASa,EAAMP,MAAMU,OAAO;;EAAA,IAAAC,WAAA;GAAA,IAAAC,IAAAC,GAAA;AASnC,UATmCD,EAAAE,WAU1BC,MAAM;AACTrB,MAASa,EAAMP,MAAMU,OAAO,IAC5BH,EAAMH,gBACXG,EAAMP,MAAMU,OAAOM,UAAUD,EAAE,EAC/BR,EAAMF,aAAa;MACpBY,EAAAL,SAECL,EAAMP,MAAMU,OAAkBQ,MAAK,EAAAC,GAAAC,MAAA;IAAA,IAAAC,IAZ9Bd,EAAMP,MAAME,qBAAqBK,EAAML,mBAAiBoB,IACxDxB,EACLS,EAAMN,SAASsB,cACfhB,EAAMP,MAAMC,SAASsB,aACtB;AAAA,WAAAH,EAAAL,IAAAS,EAAAZ,GAAAS,GAAAD,EAAAL,EAAA,EAAAO,MAAAF,EAAAK,KAAAC,EAAAd,GAAAQ,EAAAK,IAAAH,EAAA,EAAAF;MAAA;IAAAL,GAAAY,KAAAA;IAAAF,GAAAE,KAAAA;IAAA,CAAA,EAAAf;;EAAA,CAAA;CAAAJ,EAaJhB,GAAI;EAAA,IAACiB,OAAI;AAAA,UAAEmB,QAAA,CAAA,CAAArB,EAAMP,MAAMU,OAAM,EAAA,IAAI,CAAChB,EAASa,EAAMP,MAAMU,OAAO;;EAAA,IAAAC,WAAA;AAAA,UAC5DJ,EAAMP,MAAMU;;EAAqB,CAAA;CAAAF,EAInChB,GAAI;EAAA,IAACiB,OAAI;AAAA,UAAEf,EAASa,EAAMP,MAAM8B,OAAO;;EAAA,IAAAnB,WAAA;GAAA,IAAAoB,IAAAC,GAAA;AASnC,UATmCD,EAAAjB,WAU1BC,MAAM;AACTrB,MAASa,EAAMP,MAAM8B,OAAc,KACvCvB,EAAMP,MAAM8B,OAAed,UAAUD,EAAE,EACpCA,GAAEkB,oBACN1B,EAAMF,aAAa;MACpBY,EAAAc,SAECxB,EAAMP,MAAM8B,OAAeZ,MAAK,EAAAC,GAAAC,MAAA;IAAA,IAAAc,IAZ3B3B,EAAMP,MAAMG,qBAAqBI,EAAMJ,mBAAiBgC,IACxDrC,EACLS,EAAMN,SAASmC,cACf7B,EAAMP,MAAMC,SAASmC,aACtB;AAAA,WAAAhB,EAAAL,IAAAS,EAAAO,GAAAG,GAAAd,EAAAL,EAAA,EAAAoB,MAAAf,EAAAK,KAAAC,EAAAK,GAAAX,EAAAK,IAAAU,EAAA,EAAAf;MAAA;IAAAL,GAAAY,KAAAA;IAAAF,GAAAE,KAAAA;IAAA,CAAA,EAAAI;;EAAA,CAAA;CAAAvB,EAaJhB,GAAI;EAAA,IAACiB,OAAI;AAAA,UAAEmB,QAAA,CAAA,CAAArB,EAAMP,MAAM8B,OAAM,EAAA,IAAI,CAACpC,EAASa,EAAMP,MAAM8B,OAAc;;EAAA,IAAAnB,WAAA;AAAA,UACnEJ,EAAMP,MAAM8B;;EAAa,CAAA;CAAA;AAIhCO,EAAA,CAAA,QAAA,CAAA"}
@@ -1,4 +1,4 @@
1
- import { clsx as e } from "../../../lib/utils/clsx.js";
1
+ import { clsx as e } from "../../../utils/clsx.js";
2
2
  import { className as t, createComponent as n, effect as r, insert as i, template as a } from "solid-js/web";
3
3
  import { Show as o } from "solid-js";
4
4
  //#region src/components/toast/components/ToastContent.tsx
@@ -32,3 +32,5 @@ var s = /* @__PURE__ */ a("<div data-description>"), c = /* @__PURE__ */ a("<div
32
32
  };
33
33
  //#endregion
34
34
  export { l as ToastContent };
35
+
36
+ //# sourceMappingURL=ToastContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToastContent.js","names":["Show","Component","ToastT","ToastClassnames","clsx","ToastContentProps","toast","classes","descriptionClassName","ToastContent","props","title","jsx","t","description","d","_el$","_tmpl$2","_el$2","firstChild","_$insert","_$createComponent","when","children","_el$3","_tmpl$","_$effect","_$className","descriptionClass","_p$","_v$","content","_v$2","e","undefined"],"sources":["../../../../src/components/toast/components/ToastContent.tsx"],"sourcesContent":["import { Show, type Component } from \"solid-js\";\nimport type { ToastT, ToastClassnames } from \"../types\";\nimport { clsx } from \"~/utils\";\n\ninterface ToastContentProps {\n toast: ToastT;\n classes?: ToastClassnames;\n descriptionClassName?: string;\n}\n\nexport const ToastContent: Component<ToastContentProps> = (props) => {\n const title = () => {\n if (props.toast.jsx) return props.toast.jsx;\n const t = props.toast.title;\n return typeof t === \"function\" ? t() : t;\n };\n\n const description = () => {\n const d = props.toast.description;\n return typeof d === \"function\" ? d() : d;\n };\n\n return (\n <div\n data-content=\"\"\n class={clsx(props.classes?.content, props.toast.classes?.content)}\n >\n <div\n data-title=\"\"\n class={clsx(props.classes?.title, props.toast.classes?.title)}\n >\n {title()}\n </div>\n\n <Show when={props.toast.description}>\n <div\n data-description=\"\"\n class={clsx(\n props.descriptionClassName,\n props.toast.descriptionClass,\n props.classes?.description,\n props.toast.classes?.description,\n )}\n >\n {description()}\n </div>\n </Show>\n </div>\n );\n};\n"],"mappings":";;;;kHAUaS,KAA8CC,MAAU;CACnE,IAAMC,UAAc;AAClB,MAAID,EAAMJ,MAAMM,IAAK,QAAOF,EAAMJ,MAAMM;EACxC,IAAMC,IAAIH,EAAMJ,MAAMK;AACtB,SAAO,OAAOE,KAAM,aAAaA,GAAG,GAAGA;IAGnCC,UAAoB;EACxB,IAAMC,IAAIL,EAAMJ,MAAMQ;AACtB,SAAO,OAAOC,KAAM,aAAaA,GAAG,GAAGA;;AAGzC,eAAA;EAAA,IAAAC,IAAAC,GAAA,EAAAC,IAAAF,EAAAG;AAOmE,SAPnEC,EAAAF,GASOP,EAAK,EAAAS,EAAAJ,GAAAK,EAGPrB,GAAI;GAAA,IAACsB,OAAI;AAAA,WAAEZ,EAAMJ,MAAMQ;;GAAW,IAAAS,WAAA;IAAA,IAAAC,IAAAC,GAAA;AAQ9B,WAR8BL,EAAAI,GAU9BV,EAAW,EAAAY,QAAAC,EAAAH,GAPLpB,EACLM,EAAMF,sBACNE,EAAMJ,MAAMsB,kBACZlB,EAAMH,SAASO,aACfJ,EAAMJ,MAAMC,SAASO,YACtB,CAAA,CAAA,EAAAU;;GAAA,CAAA,EAAA,KAAA,EAAAE,GAAAG,MAAA;GAAA,IAAAC,IAjBE1B,EAAKM,EAAMH,SAASwB,SAASrB,EAAMJ,MAAMC,SAASwB,QAAQ,EAAAC,IAIxD5B,EAAKM,EAAMH,SAASI,OAAOD,EAAMJ,MAAMC,SAASI,MAAM;AAAA,UAAAmB,MAAAD,EAAAI,KAAAN,EAAAX,GAAAa,EAAAI,IAAAH,EAAA,EAAAE,MAAAH,EAAAhB,KAAAc,EAAAT,GAAAW,EAAAhB,IAAAmB,EAAA,EAAAH;KAAA;GAAAI,GAAAC,KAAAA;GAAArB,GAAAqB,KAAAA;GAAA,CAAA,EAAAlB;KAAA"}
@@ -1,4 +1,4 @@
1
- import { clsx as e } from "../../../lib/utils/clsx.js";
1
+ import { clsx as e } from "../../../utils/clsx.js";
2
2
  import { Loader as t, getAsset as n } from "./Assets.js";
3
3
  import { className as r, createComponent as i, effect as a, insert as o, memo as s, setAttribute as c, template as l } from "solid-js/web";
4
4
  import { Show as u } from "solid-js";
@@ -55,3 +55,5 @@ var d = /* @__PURE__ */ l("<div>"), f = /* @__PURE__ */ l("<div data-icon>"), p
55
55
  };
56
56
  //#endregion
57
57
  export { p as ToastIcon };
58
+
59
+ //# sourceMappingURL=ToastIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToastIcon.js","names":["Show","Component","Loader","getAsset","ToastT","ToastIcons","ToastClassnames","clsx","ToastIconProps","toast","icons","classes","ToastIcon","props","toastType","type","icon","isLoading","showIconArea","promise","_$createComponent","when","_$memo","children","_el$","_tmpl$2","_$insert","loading","fallback","class","loader","visible","_el$2","_tmpl$","_$effect","_p$","_v$","_v$2","e","_$className","t","_$setAttribute","undefined"],"sources":["../../../../src/components/toast/components/ToastIcon.tsx"],"sourcesContent":["import { Show, type Component } from \"solid-js\";\nimport { Loader, getAsset } from \"./Assets\";\nimport type { ToastT, ToastIcons, ToastClassnames } from \"../types\";\nimport { clsx } from \"~/utils\";\n\ninterface ToastIconProps {\n toast: ToastT;\n icons?: ToastIcons;\n classes?: ToastClassnames;\n}\n\nexport const ToastIcon: Component<ToastIconProps> = (props) => {\n const toastType = () => props.toast.type || \"default\";\n\n const icon = () =>\n props.toast.icon ??\n props.icons?.[toastType()! as keyof ToastIcons] ??\n getAsset(toastType()!);\n\n const isLoading = () => toastType() === \"loading\" && !props.toast.icon;\n\n const showIconArea = () =>\n (toastType() || props.toast.icon || props.toast.promise) &&\n props.toast.icon !== null &&\n (props.icons?.[toastType()! as keyof ToastIcons] !== null ||\n props.toast.icon);\n\n return (\n <Show when={showIconArea() && icon()}>\n <div\n data-icon=\"\"\n class={clsx(props.classes?.icon, props.toast.classes?.icon)}\n >\n {/* Loading state: show spinner or custom loading icon */}\n <Show when={props.toast.promise || isLoading()}>\n <Show\n when={props.icons?.loading}\n fallback={\n <Loader\n class={clsx(\n props.classes?.loader,\n props.toast.classes?.loader,\n \"sonner-loader\",\n )}\n visible={toastType() === \"loading\"}\n />\n }\n >\n <div\n class={clsx(\n props.classes?.loader,\n props.toast.classes?.loader,\n \"sonner-loader\",\n )}\n data-visible={toastType() === \"loading\"}\n >\n {props.icons!.loading}\n </div>\n </Show>\n </Show>\n\n {/* Non-loading icon */}\n <Show when={toastType() !== \"loading\"}>{icon()}</Show>\n </div>\n </Show>\n );\n};\n"],"mappings":";;;;;8EAWaY,KAAwCC,MAAU;CAC7D,IAAMC,UAAkBD,EAAMJ,MAAMM,QAAQ,WAEtCC,UACJH,EAAMJ,MAAMO,QACZH,EAAMH,QAAQI,GAAW,KACzBX,EAASW,GAAW,CAAE,EAElBG,UAAkBH,GAAW,KAAK,aAAa,CAACD,EAAMJ,MAAMO,MAE5DE,WACHJ,GAAW,IAAID,EAAMJ,MAAMO,QAAQH,EAAMJ,MAAMU,YAChDN,EAAMJ,MAAMO,SAAS,SACpBH,EAAMH,QAAQI,GAAW,MAA2B,QACnDD,EAAMJ,MAAMO;AAEhB,QAAAI,EACGpB,GAAI;EAAA,IAACqB,OAAI;AAAA,UAAEC,QAAA,CAAA,CAAAJ,GAAc,CAAA,EAAA,IAAIF,GAAM;;EAAA,IAAAO,WAAA;GAAA,IAAAC,IAAAC,GAAA;AAG2B,UAH3BC,EAAAF,GAAAJ,EAM/BpB,GAAI;IAAA,IAACqB,OAAI;AAAA,YAAER,EAAMJ,MAAMU,WAAWF,GAAW;;IAAA,IAAAM,WAAA;AAAA,YAAAH,EAC3CpB,GAAI;MAAA,IACHqB,OAAI;AAAA,cAAER,EAAMH,OAAOiB;;MAAO,IAC1BC,WAAQ;AAAA,cAAAR,EACLlB,GAAM;QAAA,IAAA,QAAA;AAAA,gBACEK,EACLM,EAAMF,SAASmB,QACfjB,EAAMJ,MAAME,SAASmB,QACrB,gBACD;;QAAA,IACDC,UAAO;AAAA,gBAAEjB,GAAW,KAAK;;QAAS,CAAA;;MAAA,IAAAS,WAAA;OAAA,IAAAS,IAAAC,GAAA;AAUG,cAVHP,EAAAM,SAYnCnB,EAAMH,MAAOiB,QAAO,EAAAO,GAAAC,MAAA;QAAA,IAAAC,IAPd7B,EACLM,EAAMF,SAASmB,QACfjB,EAAMJ,MAAME,SAASmB,QACrB,gBACD,EAAAO,IACavB,GAAW,KAAK;AAAS,eAAAsB,MAAAD,EAAAG,KAAAC,EAAAP,GAAAG,EAAAG,IAAAF,EAAA,EAAAC,MAAAF,EAAAK,KAAAC,EAAAT,GAAA,gBAAAG,EAAAK,IAAAH,EAAA,EAAAF;UAAA;QAAAG,GAAAI,KAAAA;QAAAF,GAAAE,KAAAA;QAAA,CAAA,EAAAV;;MAAA,CAAA;;IAAA,CAAA,EAAA,KAAA,EAAAN,EAAAF,GAAAJ,EAQ5CpB,GAAI;IAAA,IAACqB,OAAI;AAAA,YAAEP,GAAW,KAAK;;IAAS,IAAAS,WAAA;AAAA,YAAGP,GAAM;;IAAA,CAAA,EAAA,KAAA,EAAAkB,QAAAK,EAAAf,GA/BvCjB,EAAKM,EAAMF,SAASK,MAAMH,EAAMJ,MAAME,SAASK,KAAK,CAAA,CAAA,EAAAQ;;EAAA,CAAA"}
@@ -159,3 +159,5 @@ l([
159
159
  ]);
160
160
  //#endregion
161
161
  export { C as Toaster };
162
+
163
+ //# sourceMappingURL=Toaster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toaster.js","names":["createMemo","createSignal","For","mergeProps","Show","Component","Toast","useTheme","useToasterKeyboard","useToastSubscription","assignOffset","getDocumentDirection","GAP","TOAST_WIDTH","VISIBLE_TOASTS_AMOUNT","HeightT","Position","ToasterProps","Portal","Toaster","props","console","warn","merged","position","hotkey","gap","visibleToasts","dir","containerAriaLabel","const","hotkeyLabel","join","replace","heights","setHeights","expanded","setExpanded","interacting","setInteracting","listRef","HTMLOListElement","lastFocusedElement","HTMLElement","isFocusWithin","actualTheme","theme","toasts","removeToast","filteredToasts","id","filter","t","toasterId","possiblePositions","Array","from","Set","concat","map","length","onFocus","e","FocusEvent","target","dataset","dismissible","relatedTarget","onBlur","currentTarget","contains","Node","focus","preventScroll","offsetVars","offset","mobileOffset","_$createComponent","children","_el$","_tmpl$","_$insert","each","pos","posY","posX","split","toastsForPos","when","_el$2","_tmpl$2","$$pointerup","$$pointerdown","addEventListener","$$mousemove","_$use","el","_$setAttribute","toast","index","heightsForPos","h","icons","defaultRichColors","richColors","duration","toastOptions","class","descriptionClass","invert","closeButton","style","unstyled","classes","cancelButtonStyle","actionButtonStyle","closeButtonAriaLabel","expandByDefault","expand","swipeDirections","_$effect","_p$","_v$","_v$2","_v$3","_v$4","height","_$className","a","o","_$style","undefined","customAriaLabel","_$delegateEvents"],"sources":["../../../../src/components/toast/components/Toaster.tsx"],"sourcesContent":["/**\n * components/Toaster.tsx\n * Root component that renders the toast container(s) into a portal.\n * Single responsibility: layout, positioning, and orchestrating sub-components/hooks.\n * All state logic is delegated to dedicated hooks.\n */\nimport {\n createMemo,\n createSignal,\n For,\n mergeProps,\n Show,\n type Component,\n} from \"solid-js\";\nimport { Toast } from \"./Toast\";\nimport { useTheme } from \"../hooks/useTheme\";\nimport { useToasterKeyboard } from \"../hooks/useToasterKeyboard\";\nimport { useToastSubscription } from \"../hooks/useToastSubscription\";\nimport { assignOffset, getDocumentDirection } from \"../utils\";\nimport { GAP, TOAST_WIDTH, VISIBLE_TOASTS_AMOUNT } from \"../constants\";\nimport type { HeightT, Position, ToasterProps } from \"../types\";\nimport { Portal } from \"solid-js/web\";\n\nexport const Toaster: Component<ToasterProps> = (props) => {\n console.warn(\n \"The current `Toast` component still has many bugs, which originate from the upstream component library at https://github.com/emilkowalski/sonner. If you encounter a bug, you can file an issue in the upstream repository or in this repository. The design concept of the upstream project is very impressive, but due to poor code quality, this component will not stay in sync with the upstream code unless the upstream adds significantly more impressive features. Bugs and some edge cases will be fixed independently.\",\n );\n\n const merged = mergeProps(\n {\n position: \"bottom-right\",\n hotkey: [\"altKey\", \"KeyT\"] as string[],\n gap: GAP,\n visibleToasts: VISIBLE_TOASTS_AMOUNT,\n dir: getDocumentDirection(),\n containerAriaLabel: \"Notifications\",\n } as const,\n props,\n );\n\n const hotkeyLabel = () =>\n merged.hotkey.join(\"+\").replace(/Key/g, \"\").replace(/Digit/g, \"\");\n\n // ─── Local state ──────────────────────────────────────────────────────────────\n const [heights, setHeights] = createSignal<HeightT[]>([]);\n const [expanded, setExpanded] = createSignal(false);\n const [interacting, setInteracting] = createSignal(false);\n\n let listRef: HTMLOListElement | undefined;\n let lastFocusedElement: HTMLElement | null = null;\n let isFocusWithin = false;\n\n // ─── Composed hooks ───────────────────────────────────────────────────────────\n const actualTheme = useTheme(() => props.theme ?? \"light\");\n const { toasts, removeToast } = useToastSubscription();\n\n useToasterKeyboard({\n hotkey: merged.hotkey,\n listRef: () => listRef,\n setExpanded,\n });\n\n // ─── Derived data ─────────────────────────────────────────────────────────────\n /** Toasts that belong to this specific Toaster instance (by id) */\n const filteredToasts = createMemo(() => {\n const id = props.id;\n return id\n ? toasts().filter((t) => t.toasterId === id)\n : toasts().filter((t) => !t.toasterId);\n });\n\n /** All unique positions used by active toasts (plus the default position) */\n const possiblePositions = createMemo(() =>\n Array.from(\n new Set(\n [merged.position].concat(\n filteredToasts()\n .filter((t) => t.position)\n .map((t) => t.position as Position),\n ),\n ),\n ),\n );\n\n // Collapse when only one toast remains\n createMemo(() => {\n if (toasts().length <= 1) setExpanded(false);\n });\n\n // ─── Focus management ─────────────────────────────────────────────────────────\n const onFocus = (e: FocusEvent) => {\n const target = e.target as HTMLElement;\n if (target.dataset.dismissible === \"false\") return;\n if (!isFocusWithin) {\n isFocusWithin = true;\n lastFocusedElement = e.relatedTarget as HTMLElement;\n }\n };\n\n const onBlur = (e: FocusEvent) => {\n const currentTarget = e.currentTarget as HTMLElement;\n if (isFocusWithin && !currentTarget.contains(e.relatedTarget as Node)) {\n isFocusWithin = false;\n if (lastFocusedElement) {\n lastFocusedElement.focus({ preventScroll: true });\n lastFocusedElement = null;\n }\n }\n };\n\n // ─── CSS offset vars ──────────────────────────────────────────────────────────\n const offsetVars = createMemo(() =>\n assignOffset(props.offset, props.mobileOffset),\n );\n\n return (\n <Portal>\n <section\n aria-label={\n props.customAriaLabel ??\n `${merged.containerAriaLabel} ${hotkeyLabel()}`\n }\n tabIndex={-1}\n aria-live=\"polite\"\n aria-relevant=\"additions text\"\n aria-atomic=\"false\"\n >\n <For each={possiblePositions()}>\n {(pos) => {\n const [posY, posX] = pos.split(\"-\");\n const toastsForPos = () =>\n filteredToasts().filter(\n (t) =>\n (!t.position && pos === merged.position) ||\n t.position === pos,\n );\n\n return (\n <Show when={toastsForPos().length > 0}>\n <ol\n ref={(el) => (listRef = el)}\n dir={\n merged.dir === \"auto\" ? getDocumentDirection() : merged.dir\n }\n tabIndex={-1}\n class={props.class}\n data-sonner-toaster\n data-sonner-theme={actualTheme()}\n data-y-position={posY}\n data-x-position={posX}\n style={{\n \"--front-toast-height\": `${heights()[0]?.height ?? 0}px`,\n \"--width\": `${TOAST_WIDTH}px`,\n \"--gap\": `${merged.gap}px`,\n ...(props.style as any),\n ...offsetVars(),\n }}\n onBlur={onBlur}\n onFocus={onFocus}\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n if (!interacting()) setExpanded(false);\n }}\n onDragEnd={() => setExpanded(false)}\n onPointerDown={(e) => {\n const target = e.target as HTMLElement;\n if (target.dataset.dismissible === \"false\") return;\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n <For each={toastsForPos()}>\n {(toast, index) => {\n const heightsForPos = createMemo(() =>\n heights().filter((h) => h.position === toast.position),\n );\n\n return (\n <Toast\n icons={props.icons}\n index={index()}\n toast={toast}\n defaultRichColors={props.richColors}\n duration={\n props.toastOptions?.duration ?? props.duration\n }\n class={props.toastOptions?.class}\n descriptionClass={\n props.toastOptions?.descriptionClass\n }\n invert={props.invert ?? false}\n visibleToasts={merged.visibleToasts}\n closeButton={\n props.toastOptions?.closeButton ??\n props.closeButton ??\n false\n }\n interacting={interacting()}\n position={pos}\n style={props.toastOptions?.style}\n unstyled={props.toastOptions?.unstyled}\n classes={props.toastOptions?.classes}\n cancelButtonStyle={\n props.toastOptions?.cancelButtonStyle\n }\n actionButtonStyle={\n props.toastOptions?.actionButtonStyle\n }\n closeButtonAriaLabel={\n props.toastOptions?.closeButtonAriaLabel\n }\n removeToast={removeToast}\n toasts={toastsForPos()}\n heights={heightsForPos()}\n setHeights={setHeights}\n expandByDefault={props.expand ?? false}\n gap={merged.gap}\n expanded={expanded()}\n swipeDirections={props.swipeDirections}\n />\n );\n }}\n </For>\n </ol>\n </Show>\n );\n }}\n </For>\n </section>\n </Portal>\n );\n};\n"],"mappings":"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"}
@@ -2,3 +2,5 @@
2
2
  var e = "24px", t = "16px", n = 4e3;
3
3
  //#endregion
4
4
  export { t as MOBILE_VIEWPORT_OFFSET, n as TOAST_LIFETIME, e as VIEWPORT_OFFSET };
5
+
6
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","names":[],"sources":["../../../src/components/toast/constants.ts"],"sourcesContent":["/** How many toasts are visible at once (stacked) */\nexport const VISIBLE_TOASTS_AMOUNT = 3;\n\n/** Default desktop viewport offset */\nexport const VIEWPORT_OFFSET = \"24px\";\n\n/** Default mobile viewport offset */\nexport const MOBILE_VIEWPORT_OFFSET = \"16px\";\n\n/** Auto-dismiss duration in milliseconds */\nexport const TOAST_LIFETIME = 4000;\n\n/** Default toast width in pixels */\nexport const TOAST_WIDTH = 356;\n\n/** Vertical gap between stacked toasts in pixels */\nexport const GAP = 14;\n\n/** Minimum swipe distance (px) or velocity to dismiss */\nexport const SWIPE_THRESHOLD = 45;\n\n/** Delay (ms) before removing a dismissed toast from the DOM */\nexport const TIME_BEFORE_UNMOUNT = 200;\n"],"mappings":";AAIA,IAAa,IAAkB,QAGlB,IAAyB,QAGzB,IAAiB"}
@@ -55,3 +55,5 @@ function n(n) {
55
55
  }
56
56
  //#endregion
57
57
  export { n as useSwipe };
58
+
59
+ //# sourceMappingURL=useSwipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSwipe.js","names":[],"sources":["../../../../src/components/toast/hooks/useSwipe.ts"],"sourcesContent":["import { createSignal } from \"solid-js\";\nimport { SWIPE_THRESHOLD } from \"../constants\";\nimport { getDefaultSwipeDirections } from \"../utils\";\nimport type { SwipeDirection, ToastT } from \"../types\";\n\ninterface UseSwipeOptions {\n toastRef: () => HTMLLIElement | undefined;\n toast: ToastT;\n dismissible: boolean;\n position: string;\n swipeDirections?: SwipeDirection[];\n offset: () => number;\n deleteToast: () => void;\n}\n\nexport function useSwipe(opts: UseSwipeOptions) {\n const [swiping, setSwiping] = createSignal(false);\n const [swipeOut, setSwipeOut] = createSignal(false);\n const [swipeOutDirection, setSwipeOutDirection] = createSignal<\n \"left\" | \"right\" | \"up\" | \"down\" | null\n >(null);\n const [isSwiped, setIsSwiped] = createSignal(false);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = createSignal(0);\n\n let swipeDirection: \"x\" | \"y\" | null = null;\n let pointerStart: { x: number; y: number } | null = null;\n let dragStartTime: Date | null = null;\n\n const disabled = () => opts.toast.type === \"loading\";\n\n const onPointerDown = (e: PointerEvent) => {\n if (e.button === 2) return;\n if (disabled() || !opts.dismissible) return;\n dragStartTime = new Date();\n setOffsetBeforeRemove(opts.offset());\n (e.target as HTMLElement).setPointerCapture(e.pointerId);\n if ((e.target as HTMLElement).tagName === \"BUTTON\") return;\n setSwiping(true);\n pointerStart = { x: e.clientX, y: e.clientY };\n };\n\n const onPointerUp = () => {\n if (swipeOut() || !opts.dismissible) return;\n pointerStart = null;\n\n const el = opts.toastRef();\n const amtX = Number(\n el?.style.getPropertyValue(\"--swipe-amount-x\").replace(\"px\", \"\") || 0,\n );\n const amtY = Number(\n el?.style.getPropertyValue(\"--swipe-amount-y\").replace(\"px\", \"\") || 0,\n );\n const timeTaken = Date.now() - (dragStartTime?.getTime() ?? 0);\n const swipeAmt = swipeDirection === \"x\" ? amtX : amtY;\n const velocity = Math.abs(swipeAmt) / timeTaken;\n\n if (Math.abs(swipeAmt) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(opts.offset());\n opts.toast.onDismiss?.(opts.toast);\n if (swipeDirection === \"x\") {\n setSwipeOutDirection(amtX > 0 ? \"right\" : \"left\");\n } else {\n setSwipeOutDirection(amtY > 0 ? \"down\" : \"up\");\n }\n opts.deleteToast();\n setSwipeOut(true);\n return;\n }\n\n el?.style.setProperty(\"--swipe-amount-x\", \"0px\");\n el?.style.setProperty(\"--swipe-amount-y\", \"0px\");\n setIsSwiped(false);\n setSwiping(false);\n swipeDirection = null;\n };\n\n const onPointerMove = (e: PointerEvent) => {\n if (!pointerStart || !opts.dismissible) return;\n if ((window.getSelection()?.toString().length ?? 0) > 0) return;\n\n const yDelta = e.clientY - pointerStart.y;\n const xDelta = e.clientX - pointerStart.x;\n const dirs =\n opts.swipeDirections ?? getDefaultSwipeDirections(opts.position);\n\n if (!swipeDirection && (Math.abs(xDelta) > 1 || Math.abs(yDelta) > 1)) {\n swipeDirection = Math.abs(xDelta) > Math.abs(yDelta) ? \"x\" : \"y\";\n }\n\n const getDampen = (delta: number) => 1 / (1.5 + Math.abs(delta) / 20);\n\n const swipeAmt = { x: 0, y: 0 };\n\n if (\n swipeDirection === \"y\" &&\n (dirs.includes(\"top\") || dirs.includes(\"bottom\"))\n ) {\n if (\n (dirs.includes(\"top\") && yDelta < 0) ||\n (dirs.includes(\"bottom\") && yDelta > 0)\n ) {\n swipeAmt.y = yDelta;\n } else {\n const d = yDelta * getDampen(yDelta);\n swipeAmt.y = Math.abs(d) < Math.abs(yDelta) ? d : yDelta;\n }\n } else if (\n swipeDirection === \"x\" &&\n (dirs.includes(\"left\") || dirs.includes(\"right\"))\n ) {\n if (\n (dirs.includes(\"left\") && xDelta < 0) ||\n (dirs.includes(\"right\") && xDelta > 0)\n ) {\n swipeAmt.x = xDelta;\n } else {\n const d = xDelta * getDampen(xDelta);\n swipeAmt.x = Math.abs(d) < Math.abs(xDelta) ? d : xDelta;\n }\n }\n\n if (Math.abs(swipeAmt.x) > 0 || Math.abs(swipeAmt.y) > 0) setIsSwiped(true);\n\n const el = opts.toastRef();\n el?.style.setProperty(\"--swipe-amount-x\", `${swipeAmt.x}px`);\n el?.style.setProperty(\"--swipe-amount-y\", `${swipeAmt.y}px`);\n };\n\n const onDragEnd = () => {\n setSwiping(false);\n swipeDirection = null;\n pointerStart = null;\n };\n\n return {\n swiping,\n swipeOut,\n swipeOutDirection,\n isSwiped,\n offsetBeforeRemove,\n setOffsetBeforeRemove,\n onPointerDown,\n onPointerUp,\n onPointerMove,\n onDragEnd,\n };\n}\n"],"mappings":"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"}
@@ -18,3 +18,5 @@ function r(r) {
18
18
  }
19
19
  //#endregion
20
20
  export { r as useTheme };
21
+
22
+ //# sourceMappingURL=useTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTheme.js","names":[],"sources":["../../../../src/components/toast/hooks/useTheme.ts"],"sourcesContent":["import { createEffect, createSignal, onCleanup } from \"solid-js\";\nimport type { Theme } from \"../types\";\n\nexport function useTheme(theme: () => Theme | \"system\") {\n const getSystemTheme = (): Theme =>\n typeof window !== \"undefined\" &&\n window.matchMedia?.(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n\n const [actualTheme, setActualTheme] = createSignal<Theme>(\n theme() !== \"system\" ? (theme() as Theme) : getSystemTheme(),\n );\n\n createEffect(() => {\n if (theme() !== \"system\") {\n setActualTheme(theme() as Theme);\n return;\n }\n\n setActualTheme(getSystemTheme());\n\n if (typeof window === \"undefined\") return;\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const handler = (e: MediaQueryListEvent) =>\n setActualTheme(e.matches ? \"dark\" : \"light\");\n\n try {\n mq.addEventListener(\"change\", handler);\n onCleanup(() => mq.removeEventListener(\"change\", handler));\n } catch {\n // Safari < 14 fallback\n mq.addListener(handler);\n onCleanup(() => mq.removeListener(handler as any));\n }\n });\n\n return actualTheme;\n}\n"],"mappings":";;AAGA,SAAgB,EAAS,GAA+B;CACtD,IAAM,UACJ,OAAO,SAAW,OAClB,OAAO,aAAa,+BAA+B,CAAC,UAChD,SACA,SAEA,CAAC,GAAa,KAAkB,EACpC,GAAO,KAAK,WAAgC,GAAgB,GAApC,GAAO,CAChC;AAyBD,QAvBA,QAAmB;AACjB,MAAI,GAAO,KAAK,UAAU;AACxB,KAAe,GAAO,CAAU;AAChC;;AAKF,MAFA,EAAe,GAAgB,CAAC,EAE5B,OAAO,SAAW,IAAa;EACnC,IAAM,IAAK,OAAO,WAAW,+BAA+B,EACtD,KAAW,MACf,EAAe,EAAE,UAAU,SAAS,QAAQ;AAE9C,MAAI;AAEF,GADA,EAAG,iBAAiB,UAAU,EAAQ,EACtC,QAAgB,EAAG,oBAAoB,UAAU,EAAQ,CAAC;UACpD;AAGN,GADA,EAAG,YAAY,EAAQ,EACvB,QAAgB,EAAG,eAAe,EAAe,CAAC;;GAEpD,EAEK"}
@@ -31,3 +31,5 @@ function r(r) {
31
31
  }
32
32
  //#endregion
33
33
  export { r as useToastHeight };
34
+
35
+ //# sourceMappingURL=useToastHeight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToastHeight.js","names":[],"sources":["../../../../src/components/toast/hooks/useToastHeight.ts"],"sourcesContent":["import { createEffect, createSignal, onCleanup } from \"solid-js\";\nimport type { HeightT, Position, ToastT } from \"../types\";\n\ninterface UseToastHeightOptions {\n toastRef: () => HTMLLIElement | undefined;\n toast: () => ToastT;\n mounted: () => boolean;\n setHeights: (updater: (prev: HeightT[]) => HeightT[]) => void;\n}\n\nexport function useToastHeight(opts: UseToastHeightOptions) {\n const [initialHeight, setInitialHeight] = createSignal(0);\n\n const toast = opts.toast();\n\n // Register height on first mount\n createEffect(() => {\n const el = opts.toastRef();\n if (!el) return;\n const h = el.getBoundingClientRect().height;\n setInitialHeight(h);\n opts.setHeights((prev) => [\n {\n toastId: toast.id,\n height: h,\n position: toast.position as Position,\n },\n ...prev,\n ]);\n onCleanup(() =>\n opts.setHeights((prev) => prev.filter((x) => x.toastId !== toast.id)),\n );\n });\n\n // Keep height in sync when content changes\n createEffect(() => {\n if (!opts.mounted()) return;\n const el = opts.toastRef();\n if (!el) return;\n\n // Read deps so effect re-runs on content change\n void toast.title;\n void toast.description;\n void toast.jsx;\n void toast.action;\n void toast.cancel;\n\n const orig = el.style.height;\n el.style.height = \"auto\";\n const newH = el.getBoundingClientRect().height;\n el.style.height = orig;\n setInitialHeight(newH);\n\n opts.setHeights((prev) => {\n const exists = prev.find((x) => x.toastId === toast.id);\n if (!exists) {\n return [\n {\n toastId: toast.id,\n height: newH,\n position: toast.position as Position,\n },\n ...prev,\n ];\n }\n return prev.map((x) =>\n x.toastId === toast.id ? { ...x, height: newH } : x,\n );\n });\n });\n\n return { initialHeight };\n}\n"],"mappings":";;AAUA,SAAgB,EAAe,GAA6B;CAC1D,IAAM,CAAC,GAAe,KAAoB,EAAa,EAAE,EAEnD,IAAQ,EAAK,OAAO;AA0D1B,QAvDA,QAAmB;EACjB,IAAM,IAAK,EAAK,UAAU;AAC1B,MAAI,CAAC,EAAI;EACT,IAAM,IAAI,EAAG,uBAAuB,CAAC;AAUrC,EATA,EAAiB,EAAE,EACnB,EAAK,YAAY,MAAS,CACxB;GACE,SAAS,EAAM;GACf,QAAQ;GACR,UAAU,EAAM;GACjB,EACD,GAAG,EACJ,CAAC,EACF,QACE,EAAK,YAAY,MAAS,EAAK,QAAQ,MAAM,EAAE,YAAY,EAAM,GAAG,CAAC,CACtE;GACD,EAGF,QAAmB;AACjB,MAAI,CAAC,EAAK,SAAS,CAAE;EACrB,IAAM,IAAK,EAAK,UAAU;AAC1B,MAAI,CAAC,EAAI;AAOJ,EAJA,EAAM,OACN,EAAM,aACN,EAAM,KACN,EAAM,QACN,EAAM;EAEX,IAAM,IAAO,EAAG,MAAM;AACtB,IAAG,MAAM,SAAS;EAClB,IAAM,IAAO,EAAG,uBAAuB,CAAC;AAIxC,EAHA,EAAG,MAAM,SAAS,GAClB,EAAiB,EAAK,EAEtB,EAAK,YAAY,MACA,EAAK,MAAM,MAAM,EAAE,YAAY,EAAM,GAAG,GAWhD,EAAK,KAAK,MACf,EAAE,YAAY,EAAM,KAAK;GAAE,GAAG;GAAG,QAAQ;GAAM,GAAG,EACnD,GAXQ,CACL;GACE,SAAS,EAAM;GACf,QAAQ;GACR,UAAU,EAAM;GACjB,EACD,GAAG,EACJ,CAKH;GACF,EAEK,EAAE,kBAAe"}
@@ -33,3 +33,5 @@ function i() {
33
33
  }
34
34
  //#endregion
35
35
  export { i as useToastSubscription };
36
+
37
+ //# sourceMappingURL=useToastSubscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToastSubscription.js","names":[],"sources":["../../../../src/components/toast/hooks/useToastSubscription.ts"],"sourcesContent":["/**\n * hooks/useToastSubscription.ts\n * Subscribes to the global ToastState observable and maintains a local reactive\n * list of toasts for the Toaster component.\n * Single responsibility: state synchronization between the observer and Solid signals.\n */\nimport { createSignal, onCleanup, onMount } from \"solid-js\";\nimport { ToastState } from \"../state\";\nimport type { ToastT, ToastToDismiss } from \"../types\";\n\nexport function useToastSubscription() {\n const [toasts, setToasts] = createSignal<ToastT[]>([]);\n\n onMount(() => {\n const unsubscribe = ToastState.subscribe((incoming) => {\n if ((incoming as ToastToDismiss).dismiss) {\n // Mark as deleted — the Toast component will animate out\n setToasts((prev) =>\n prev.map((t) => (t.id === incoming.id ? { ...t, delete: true } : t)),\n );\n return;\n }\n\n setToasts((prev) => {\n const idx = prev.findIndex((t) => t.id === incoming.id);\n if (idx !== -1) {\n return [\n ...prev.slice(0, idx),\n { ...prev[idx], ...(incoming as ToastT) },\n ...prev.slice(idx + 1),\n ];\n }\n return [incoming as ToastT, ...prev];\n });\n });\n\n onCleanup(unsubscribe);\n });\n\n const removeToast = (toast: ToastT) => {\n if (!toast.delete) ToastState.dismiss(toast.id);\n setToasts((prev) => prev.filter((t) => t.id !== toast.id));\n };\n\n return { toasts, removeToast };\n}\n"],"mappings":";;;AAUA,SAAgB,IAAuB;CACrC,IAAM,CAAC,GAAQ,KAAa,EAAuB,EAAE,CAAC;AAiCtD,QA/BA,QAAc;AAuBZ,IAtBoB,EAAW,WAAW,MAAa;AACrD,OAAK,EAA4B,SAAS;AAExC,OAAW,MACT,EAAK,KAAK,MAAO,EAAE,OAAO,EAAS,KAAK;KAAE,GAAG;KAAG,QAAQ;KAAM,GAAG,EAAG,CACrE;AACD;;AAGF,MAAW,MAAS;IAClB,IAAM,IAAM,EAAK,WAAW,MAAM,EAAE,OAAO,EAAS,GAAG;AAQvD,WAPI,MAAQ,KAOL,CAAC,GAAoB,GAAG,EAAK,GAN3B;KACL,GAAG,EAAK,MAAM,GAAG,EAAI;KACrB;MAAE,GAAG,EAAK;MAAM,GAAI;MAAqB;KACzC,GAAG,EAAK,MAAM,IAAM,EAAE;KACvB;KAGH;IACF,CAEoB;GACtB,EAOK;EAAE;EAAQ,cALI,MAAkB;AAErC,GADK,EAAM,UAAQ,EAAW,QAAQ,EAAM,GAAG,EAC/C,GAAW,MAAS,EAAK,QAAQ,MAAM,EAAE,OAAO,EAAM,GAAG,CAAC;;EAG9B"}
@@ -18,3 +18,5 @@ function n(n) {
18
18
  }
19
19
  //#endregion
20
20
  export { n as useToastTimer };
21
+
22
+ //# sourceMappingURL=useToastTimer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToastTimer.js","names":[],"sources":["../../../../src/components/toast/hooks/useToastTimer.ts"],"sourcesContent":["/**\n * hooks/useToastTimer.ts\n * Manages the auto-dismiss countdown for a single toast.\n * Single responsibility: start, pause, and resume a timer; call deleteToast when done.\n */\nimport { createEffect, onCleanup } from \"solid-js\";\nimport type { ToastT } from \"../types\";\n\ninterface UseToastTimerOptions {\n toast: ToastT;\n duration: number;\n expanded: () => boolean;\n interacting: () => boolean;\n isDocumentHidden: () => boolean;\n deleteToast: () => void;\n}\n\nexport function useToastTimer(opts: UseToastTimerOptions) {\n let remainingTime = opts.toast.duration ?? opts.duration;\n let closeTimerStart = 0;\n let lastPauseTime = 0;\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const shouldSkip = () =>\n (opts.toast.promise && opts.toast.type === \"loading\") ||\n opts.toast.duration === Infinity ||\n opts.toast.type === \"loading\";\n\n const pauseTimer = () => {\n if (lastPauseTime < closeTimerStart) {\n const elapsed = Date.now() - closeTimerStart;\n remainingTime = Math.max(0, remainingTime - elapsed);\n }\n lastPauseTime = Date.now();\n };\n\n const startTimer = () => {\n if (remainingTime === Infinity) return;\n clearTimeout(timeoutId);\n closeTimerStart = Date.now();\n timeoutId = setTimeout(() => {\n opts.toast.onAutoClose?.(opts.toast);\n opts.deleteToast();\n }, remainingTime);\n };\n\n createEffect(() => {\n if (shouldSkip()) return;\n if (opts.expanded() || opts.interacting() || opts.isDocumentHidden()) {\n pauseTimer();\n } else {\n startTimer();\n }\n onCleanup(() => clearTimeout(timeoutId));\n });\n}\n"],"mappings":";;AAiBA,SAAgB,EAAc,GAA4B;CACxD,IAAI,IAAgB,EAAK,MAAM,YAAY,EAAK,UAC5C,IAAkB,GAClB,IAAgB,GAChB,GAEE,UACH,EAAK,MAAM,WAAW,EAAK,MAAM,SAAS,aAC3C,EAAK,MAAM,aAAa,YACxB,EAAK,MAAM,SAAS,WAEhB,UAAmB;AACvB,MAAI,IAAgB,GAAiB;GACnC,IAAM,IAAU,KAAK,KAAK,GAAG;AAC7B,OAAgB,KAAK,IAAI,GAAG,IAAgB,EAAQ;;AAEtD,MAAgB,KAAK,KAAK;IAGtB,UAAmB;AACnB,QAAkB,aACtB,aAAa,EAAU,EACvB,IAAkB,KAAK,KAAK,EAC5B,IAAY,iBAAiB;AAE3B,GADA,EAAK,MAAM,cAAc,EAAK,MAAM,EACpC,EAAK,aAAa;KACjB,EAAc;;AAGnB,SAAmB;AACb,KAAY,KACZ,EAAK,UAAU,IAAI,EAAK,aAAa,IAAI,EAAK,kBAAkB,GAClE,GAAY,GAEZ,GAAY,EAEd,QAAgB,aAAa,EAAU,CAAC;GACxC"}
@@ -10,3 +10,5 @@ function n(n) {
10
10
  }
11
11
  //#endregion
12
12
  export { n as useToasterKeyboard };
13
+
14
+ //# sourceMappingURL=useToasterKeyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToasterKeyboard.js","names":[],"sources":["../../../../src/components/toast/hooks/useToasterKeyboard.ts"],"sourcesContent":["/**\n * hooks/useToasterKeyboard.ts\n * Handles keyboard interactions for the Toaster:\n * - Custom hotkey → expand the toast list and focus it\n * - Escape → collapse the toast list\n * Single responsibility: keyboard event binding only.\n */\nimport { onCleanup, onMount } from \"solid-js\";\n\ninterface UseToasterKeyboardOptions {\n hotkey: string[];\n listRef: () => HTMLOListElement | undefined;\n setExpanded: (v: boolean) => void;\n}\n\nexport function useToasterKeyboard(opts: UseToasterKeyboardOptions) {\n onMount(() => {\n const handler = (e: KeyboardEvent) => {\n const hotkeyPressed =\n opts.hotkey.length > 0 &&\n opts.hotkey.every((k) => (e as any)[k] || e.code === k);\n\n if (hotkeyPressed) {\n opts.setExpanded(true);\n opts.listRef()?.focus();\n }\n\n if (\n e.code === \"Escape\" &&\n (document.activeElement === opts.listRef() ||\n opts.listRef()?.contains(document.activeElement))\n ) {\n opts.setExpanded(false);\n }\n };\n\n document.addEventListener(\"keydown\", handler);\n onCleanup(() => document.removeEventListener(\"keydown\", handler));\n });\n}\n"],"mappings":";;AAeA,SAAgB,EAAmB,GAAiC;AAClE,SAAc;EACZ,IAAM,KAAW,MAAqB;AAUpC,GARE,EAAK,OAAO,SAAS,KACrB,EAAK,OAAO,OAAO,MAAO,EAAU,MAAM,EAAE,SAAS,EAAE,KAGvD,EAAK,YAAY,GAAK,EACtB,EAAK,SAAS,EAAE,OAAO,GAIvB,EAAE,SAAS,aACV,SAAS,kBAAkB,EAAK,SAAS,IACxC,EAAK,SAAS,EAAE,SAAS,SAAS,cAAc,KAElD,EAAK,YAAY,GAAM;;AAK3B,EADA,SAAS,iBAAiB,WAAW,EAAQ,EAC7C,QAAgB,SAAS,oBAAoB,WAAW,EAAQ,CAAC;GACjE"}
@@ -32,3 +32,5 @@ function a() {
32
32
  }
33
33
  //#endregion
34
34
  export { i as useIsDocumentHidden, a as useSonner };
35
+
36
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","names":[],"sources":["../../../src/components/toast/hooks.ts"],"sourcesContent":["import { createSignal, onCleanup, onMount } from \"solid-js\";\nimport { ToastState } from \"./state\";\nimport type { ToastT, ToastToDismiss } from \"./types\";\n\n// ─── Document visibility ───────────────────────────────────────────────────────\n/**\n * Returns a reactive boolean that tracks whether the browser tab is hidden.\n * Used to pause auto-dismiss timers while the user has switched tabs.\n */\nexport function useIsDocumentHidden() {\n const [isHidden, setIsHidden] = createSignal(document.hidden);\n\n onMount(() => {\n const handler = () => setIsHidden(document.hidden);\n document.addEventListener(\"visibilitychange\", handler);\n onCleanup(() => document.removeEventListener(\"visibilitychange\", handler));\n });\n\n return isHidden;\n}\n\n// ─── Active toasts (for external consumers) ────────────────────────────────────\n/**\n * Subscribes to the global ToastState and returns the list of currently visible\n * toasts as a SolidJS signal. Useful for building custom toast UIs.\n */\nexport function useSonner() {\n const [activeToasts, setActiveToasts] = createSignal<ToastT[]>([]);\n\n onMount(() => {\n const unsubscribe = ToastState.subscribe((toast) => {\n if ((toast as ToastToDismiss).dismiss) {\n setActiveToasts((prev) => prev.filter((t) => t.id !== toast.id));\n return;\n }\n\n setActiveToasts((prev) => {\n const idx = prev.findIndex((t) => t.id === toast.id);\n if (idx !== -1) {\n return [\n ...prev.slice(0, idx),\n { ...prev[idx], ...(toast as ToastT) },\n ...prev.slice(idx + 1),\n ];\n }\n return [toast as ToastT, ...prev];\n });\n });\n\n onCleanup(unsubscribe);\n });\n\n return { toasts: activeToasts };\n}\n"],"mappings":";;;AASA,SAAgB,IAAsB;CACpC,IAAM,CAAC,GAAU,KAAe,EAAa,SAAS,OAAO;AAQ7D,QANA,QAAc;EACZ,IAAM,UAAgB,EAAY,SAAS,OAAO;AAElD,EADA,SAAS,iBAAiB,oBAAoB,EAAQ,EACtD,QAAgB,SAAS,oBAAoB,oBAAoB,EAAQ,CAAC;GAC1E,EAEK;;AAQT,SAAgB,IAAY;CAC1B,IAAM,CAAC,GAAc,KAAmB,EAAuB,EAAE,CAAC;AAyBlE,QAvBA,QAAc;AAoBZ,IAnBoB,EAAW,WAAW,MAAU;AAClD,OAAK,EAAyB,SAAS;AACrC,OAAiB,MAAS,EAAK,QAAQ,MAAM,EAAE,OAAO,EAAM,GAAG,CAAC;AAChE;;AAGF,MAAiB,MAAS;IACxB,IAAM,IAAM,EAAK,WAAW,MAAM,EAAE,OAAO,EAAM,GAAG;AAQpD,WAPI,MAAQ,KAOL,CAAC,GAAiB,GAAG,EAAK,GANxB;KACL,GAAG,EAAK,MAAM,GAAG,EAAI;KACrB;MAAE,GAAG,EAAK;MAAM,GAAI;MAAkB;KACtC,GAAG,EAAK,MAAM,IAAM,EAAE;KACvB;KAGH;IACF,CAEoB;GACtB,EAEK,EAAE,QAAQ,GAAc"}
@@ -0,0 +1,5 @@
1
+ import { toast as e } from "./state.js";
2
+ import { useSonner as t } from "./hooks.js";
3
+ import { Toast as n } from "./components/Toast.js";
4
+ import { Toaster as r } from "./components/Toaster.js";
5
+ export { n as Toast, r as Toaster, e as toast, t as useSonner };
@@ -166,3 +166,5 @@ var t = (e) => !("id" in e && "message" in e), n = new class {
166
166
  });
167
167
  //#endregion
168
168
  export { n as ToastState, a as toast };
169
+
170
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","names":[],"sources":["../../../src/components/toast/state.ts"],"sourcesContent":["/**\n * state.ts\n * Pure observable store — no framework dependency.\n * Responsible for: creating, updating, dismissing toasts, and notifying subscribers.\n */\nimport { createUniqueId, type JSXElement } from \"solid-js\";\nimport type {\n ExternalToast,\n PromiseData,\n PromiseIExtendedResult,\n PromiseT,\n ToastT,\n ToastToDismiss,\n ToastTypes,\n} from \"./types\";\n\nconst isValidElement = (src: object): boolean => {\n return !(\"id\" in src && \"message\" in src);\n};\n\n// ─── Observer (pub/sub) ────────────────────────────────────────────────────────\nclass Observer {\n subscribers: Array<(toast: ToastT | ToastToDismiss) => void> = [];\n toasts: Array<ToastT | ToastToDismiss> = [];\n dismissedToasts: Set<string> = new Set();\n\n subscribe = (subscriber: (toast: ToastT | ToastToDismiss) => void) => {\n this.subscribers.push(subscriber);\n return () => {\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n\n publish = (data: ToastT) => {\n for (const subscriber of this.subscribers) {\n subscriber(data);\n }\n };\n\n addToast = (data: ToastT) => {\n this.publish(data);\n this.toasts = [...this.toasts, data];\n };\n\n create = (\n data: ExternalToast & {\n message?: JSXElement;\n type?: ToastTypes;\n promise?: PromiseT;\n jsx?: (() => JSXElement) | JSXElement;\n },\n ) => {\n const { message, ...rest } = data;\n const id =\n typeof data?.id === \"number\" || (data.id as string)?.length > 0\n ? data.id!\n : createUniqueId();\n\n const alreadyExists = this.toasts.find((t) => t.id === id);\n const dismissible =\n data.dismissible === undefined ? true : data.dismissible;\n\n if (this.dismissedToasts.has(id)) this.dismissedToasts.delete(id);\n\n if (alreadyExists) {\n this.toasts = this.toasts.map((t) => {\n if (t.id === id) {\n this.publish({ ...t, ...data, id, title: message } as ToastT);\n return { ...t, ...data, id, dismissible, title: message } as ToastT;\n }\n return t;\n });\n } else {\n this.addToast({ title: message, ...rest, dismissible, id } as ToastT);\n }\n\n return id;\n };\n\n dismiss = (id?: string) => {\n if (id !== undefined) {\n this.dismissedToasts.add(id);\n requestAnimationFrame(() => {\n for (const subscriber of this.subscribers) {\n subscriber({ id, dismiss: true });\n }\n });\n } else {\n requestAnimationFrame(() => {\n for (const toast of this.toasts) {\n for (const subscriber of this.subscribers) {\n subscriber({ id: toast.id, dismiss: true });\n }\n }\n });\n }\n\n return id;\n };\n\n message = (message: JSXElement, data?: ExternalToast) =>\n this.create({ ...data, message });\n\n error = (message: JSXElement, data?: ExternalToast) =>\n this.create({ ...data, message, type: \"error\" });\n\n success = (message: JSXElement, data?: ExternalToast) =>\n this.create({ ...data, type: \"success\", message });\n\n info = (message: JSXElement, data?: ExternalToast) =>\n this.create({ ...data, type: \"info\", message });\n\n warning = (message: JSXElement, data?: ExternalToast) =>\n this.create({ ...data, type: \"warning\", message });\n\n loading = (message: JSXElement, data?: ExternalToast) =>\n this.create({ ...data, type: \"loading\", message });\n\n promise = <ToastData>(\n promise: PromiseT<ToastData>,\n data?: PromiseData<ToastData>,\n ) => {\n if (!data) return;\n\n let id: string | undefined;\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n promise,\n type: \"loading\",\n message: data.loading,\n description:\n typeof data.description !== \"function\" ? data.description : undefined,\n });\n }\n\n const p = Promise.resolve(\n promise instanceof Function ? promise() : promise,\n );\n\n let shouldDismiss = id !== undefined;\n let result: [\"resolve\", ToastData] | [\"reject\", unknown];\n\n const originalPromise = p\n .then(async (response) => {\n result = [\"resolve\", response];\n const isElement = isValidElement(response as any);\n if (isElement) {\n shouldDismiss = false;\n this.create({ id, type: \"default\", message: response as any });\n } else if (isHttpResponse(response) && !(response as Response).ok) {\n shouldDismiss = false;\n const errMsg = `HTTP error! status: ${(response as Response).status}`;\n const promiseData =\n typeof data.error === \"function\"\n ? await data.error(errMsg)\n : data.error;\n const description =\n typeof data.description === \"function\"\n ? await data.description(errMsg)\n : data.description;\n const isExtended =\n typeof promiseData === \"object\" &&\n !isValidElement(promiseData as any);\n const toastSettings: PromiseIExtendedResult = isExtended\n ? (promiseData as PromiseIExtendedResult)\n : { message: promiseData as any };\n this.create({ id, type: \"error\", description, ...toastSettings });\n } else if (response instanceof Error) {\n shouldDismiss = false;\n const promiseData =\n typeof data.error === \"function\"\n ? await data.error(response)\n : data.error;\n const description =\n typeof data.description === \"function\"\n ? await data.description(response)\n : data.description;\n const isExtended =\n typeof promiseData === \"object\" &&\n !isValidElement(promiseData as any);\n const toastSettings: PromiseIExtendedResult = isExtended\n ? (promiseData as PromiseIExtendedResult)\n : { message: promiseData as any };\n this.create({ id, type: \"error\", description, ...toastSettings });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n const promiseData =\n typeof data.success === \"function\"\n ? await data.success(response)\n : data.success;\n const description =\n typeof data.description === \"function\"\n ? await data.description(response)\n : data.description;\n const isExtended =\n typeof promiseData === \"object\" &&\n !isValidElement(promiseData as any);\n const toastSettings: PromiseIExtendedResult = isExtended\n ? (promiseData as PromiseIExtendedResult)\n : { message: promiseData as any };\n this.create({ id, type: \"success\", description, ...toastSettings });\n }\n })\n .catch(async (error) => {\n result = [\"reject\", error];\n if (data.error !== undefined) {\n shouldDismiss = false;\n const promiseData =\n typeof data.error === \"function\"\n ? await data.error(error)\n : data.error;\n const description =\n typeof data.description === \"function\"\n ? await data.description(error)\n : data.description;\n const isExtended =\n typeof promiseData === \"object\" &&\n !isValidElement(promiseData as any);\n const toastSettings: PromiseIExtendedResult = isExtended\n ? (promiseData as PromiseIExtendedResult)\n : { message: promiseData as any };\n this.create({ id, type: \"error\", description, ...toastSettings });\n }\n })\n .finally(() => {\n if (shouldDismiss) {\n this.dismiss(id);\n id = undefined;\n }\n data.finally?.();\n });\n\n const unwrap = () =>\n new Promise<ToastData>((resolve, reject) =>\n originalPromise\n .then(() =>\n result[0] === \"reject\"\n ? reject(result[1])\n : resolve(result[1] as ToastData),\n )\n .catch(reject),\n );\n\n if (typeof id !== \"string\" && typeof id !== \"number\") return { unwrap };\n return Object.assign(id, { unwrap });\n };\n\n custom = (jsx: (id: number | string) => any, data?: ExternalToast) => {\n const id = data?.id || createUniqueId();\n this.create({ jsx: jsx(id), ...data, id });\n return id;\n };\n\n getActiveToasts = () =>\n this.toasts.filter((t) => !this.dismissedToasts.has(t.id));\n}\n\n// ─── Singleton & public API ────────────────────────────────────────────────────\nexport const ToastState = new Observer();\n\nconst toastFunction = (message: JSXElement, data?: ExternalToast) => {\n const id = createUniqueId();\n ToastState.addToast({ title: message, ...data, id } as ToastT);\n return id;\n};\n\nconst isHttpResponse = (data: any): data is Response =>\n data &&\n typeof data === \"object\" &&\n \"ok\" in data &&\n typeof data.ok === \"boolean\" &&\n \"status\" in data &&\n typeof data.status === \"number\";\n\nexport const getHistory = () => ToastState.toasts;\nexport const getToasts = () => ToastState.getActiveToasts();\n\nexport const toast = Object.assign(\n toastFunction,\n {\n success: ToastState.success,\n info: ToastState.info,\n warning: ToastState.warning,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n loading: ToastState.loading,\n },\n { getHistory, getToasts },\n);\n"],"mappings":"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"}
@@ -2,3 +2,5 @@
2
2
  var e = (e) => e?.label !== void 0;
3
3
  //#endregion
4
4
  export { e as isAction };
5
+
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/components/toast/types.ts"],"sourcesContent":["import type { JSX, JSXElement, Setter } from \"solid-js\";\n\nexport type ToastTypes =\n // | \"normal\"\n // | \"action\"\n \"success\" | \"info\" | \"warning\" | \"error\" | \"loading\" | \"default\";\n\nexport type PromiseT<Data = any> = Promise<Data> | (() => Promise<Data>);\n\nexport interface PromiseIExtendedResult extends ExternalToast {\n message: JSXElement;\n}\n\nexport type PromiseTExtendedResult<Data = any> =\n | PromiseIExtendedResult\n | ((data: Data) => PromiseIExtendedResult | Promise<PromiseIExtendedResult>);\n\nexport type PromiseTResult<Data = any> =\n | string\n | JSXElement\n | ((data: Data) => JSXElement | string | Promise<JSXElement | string>);\n\nexport type PromiseExternalToast = Omit<ExternalToast, \"description\">;\n\nexport type PromiseData<ToastData = any> = PromiseExternalToast & {\n loading?: string | JSXElement;\n success?: PromiseTResult<ToastData> | PromiseTExtendedResult<ToastData>;\n error?: PromiseTResult | PromiseTExtendedResult;\n description?: PromiseTResult;\n finally?: () => void | Promise<void>;\n};\n\nexport interface ToastClassnames {\n toast?: string;\n title?: string;\n description?: string;\n loader?: string;\n cancelButton?: string;\n actionButton?: string;\n success?: string;\n error?: string;\n info?: string;\n warning?: string;\n loading?: string;\n default?: string;\n content?: string;\n icon?: string;\n}\n\nexport interface ToastIcons {\n success?: JSXElement;\n info?: JSXElement;\n warning?: JSXElement;\n error?: JSXElement;\n loading?: JSXElement;\n close?: JSXElement;\n}\n\nexport interface Action {\n label: JSXElement;\n onClick: JSX.EventHandler<HTMLButtonElement, MouseEvent>;\n actionButtonStyle?: JSX.CSSProperties;\n}\n\nexport interface ToastT {\n id: string;\n toasterId?: string;\n title?: (() => JSXElement) | JSXElement;\n type?: ToastTypes;\n icon?: JSXElement;\n jsx?: JSXElement;\n richColors?: boolean;\n invert?: boolean;\n closeButton?: boolean;\n dismissible?: boolean;\n description?: (() => JSXElement) | JSXElement;\n duration?: number;\n delete?: boolean;\n action?: Action | JSXElement;\n cancel?: Action | JSXElement;\n onDismiss?: (toast: ToastT) => void;\n onAutoClose?: (toast: ToastT) => void;\n promise?: PromiseT;\n cancelButtonStyle?: JSX.CSSProperties;\n actionButtonStyle?: JSX.CSSProperties;\n style?: JSX.CSSProperties;\n unstyled?: boolean;\n class?: string;\n classes?: ToastClassnames;\n descriptionClass?: string;\n position?: Position;\n testId?: string;\n}\n\nexport const isAction = (action: Action | JSXElement): action is Action => {\n return (action as Action)?.label !== undefined;\n};\n\nexport type Position =\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"top-center\"\n | \"bottom-center\";\nexport interface HeightT {\n height: number;\n toastId: number | string;\n position: Position;\n}\n\ninterface ToastOptions {\n class?: string;\n closeButton?: boolean;\n descriptionClass?: string;\n style?: JSX.CSSProperties;\n cancelButtonStyle?: JSX.CSSProperties;\n actionButtonStyle?: JSX.CSSProperties;\n duration?: number;\n unstyled?: boolean;\n classes?: ToastClassnames;\n closeButtonAriaLabel?: string;\n toasterId?: string;\n}\n\ntype Offset =\n | {\n top?: string | number;\n right?: string | number;\n bottom?: string | number;\n left?: string | number;\n }\n | string\n | number;\n\nexport interface ToasterProps {\n id?: string;\n invert?: boolean;\n theme?: \"light\" | \"dark\" | \"system\";\n position?: Position;\n hotkey?: string[];\n richColors?: boolean;\n expand?: boolean;\n duration?: number;\n gap?: number;\n visibleToasts?: number;\n closeButton?: boolean;\n toastOptions?: ToastOptions;\n class?: string;\n style?: JSX.CSSProperties;\n offset?: Offset;\n mobileOffset?: Offset;\n dir?: \"rtl\" | \"ltr\" | \"auto\";\n swipeDirections?: SwipeDirection[];\n icons?: ToastIcons;\n customAriaLabel?: string;\n containerAriaLabel?: string;\n}\n\nexport type SwipeDirection = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface ToastProps {\n toast: ToastT;\n toasts: ToastT[];\n index: number;\n swipeDirections?: SwipeDirection[];\n expanded: boolean;\n invert: boolean;\n heights: HeightT[];\n setHeights: Setter<HeightT[]>;\n removeToast: (toast: ToastT) => void;\n gap?: number;\n position: Position;\n visibleToasts: number;\n expandByDefault: boolean;\n closeButton: boolean;\n interacting: boolean;\n style?: JSX.CSSProperties;\n cancelButtonStyle?: JSX.CSSProperties;\n actionButtonStyle?: JSX.CSSProperties;\n duration?: number;\n class?: string;\n unstyled?: boolean;\n descriptionClass?: string;\n loadingIcon?: JSXElement;\n classes?: ToastClassnames;\n icons?: ToastIcons;\n closeButtonAriaLabel?: string;\n defaultRichColors?: boolean;\n}\n\nexport enum SwipeStateTypes {\n SwipedOut = \"SwipedOut\",\n SwipedBack = \"SwipedBack\",\n NotSwiped = \"NotSwiped\",\n}\n\nexport type Theme = \"light\" | \"dark\";\n\nexport interface ToastToDismiss {\n id: string;\n dismiss: boolean;\n}\n\nexport type ExternalToast = Omit<\n ToastT,\n \"id\" | \"type\" | \"title\" | \"jsx\" | \"delete\" | \"promise\"\n> & {\n id?: string;\n toasterId?: string;\n};\n"],"mappings":";AA8FA,IAAa,KAAY,MACf,GAAmB,UAAU,KAAA"}
@@ -35,3 +35,5 @@ function i(n, r) {
35
35
  }
36
36
  //#endregion
37
37
  export { i as assignOffset, n as getDefaultSwipeDirections, r as getDocumentDirection };
38
+
39
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../../src/components/toast/utils.ts"],"sourcesContent":["import type { SwipeDirection, ToasterProps } from \"./types\";\nimport { MOBILE_VIEWPORT_OFFSET, VIEWPORT_OFFSET } from \"./constants\";\n\n/** Derives default swipe directions from a position string like \"bottom-right\" */\nexport function getDefaultSwipeDirections(position: string): SwipeDirection[] {\n const [y, x] = position.split(\"-\");\n const directions: SwipeDirection[] = [];\n if (y) directions.push(y as SwipeDirection);\n if (x) directions.push(x as SwipeDirection);\n return directions;\n}\n\n/** Reads the document text direction (for RTL support) */\nexport function getDocumentDirection(): ToasterProps[\"dir\"] {\n if (typeof window === \"undefined\") return \"ltr\";\n if (typeof document === \"undefined\") return \"ltr\";\n const dir = document.documentElement.getAttribute(\"dir\");\n if (dir === \"auto\" || !dir) {\n return window.getComputedStyle(document.documentElement)\n .direction as ToasterProps[\"dir\"];\n }\n return dir as ToasterProps[\"dir\"];\n}\n\n/**\n * Converts offset prop (string | number | object) into CSS custom property map.\n * Produces both desktop (`--offset-*`) and mobile (`--mobile-offset-*`) vars.\n */\nexport function assignOffset(\n defaultOffset: ToasterProps[\"offset\"],\n mobileOffset: ToasterProps[\"mobileOffset\"],\n): Record<string, string> {\n const styles: Record<string, string> = {};\n\n [defaultOffset, mobileOffset].forEach((offset, i) => {\n const isMobile = i === 1;\n const prefix = isMobile ? \"--mobile-offset\" : \"--offset\";\n const fallback = isMobile ? MOBILE_VIEWPORT_OFFSET : VIEWPORT_OFFSET;\n\n const assignAll = (value: string | number) => {\n [\"top\", \"right\", \"bottom\", \"left\"].forEach((side) => {\n styles[`${prefix}-${side}`] =\n typeof value === \"number\" ? `${value}px` : value;\n });\n };\n\n if (typeof offset === \"number\" || typeof offset === \"string\") {\n assignAll(offset);\n } else if (typeof offset === \"object\" && offset !== null) {\n [\"top\", \"right\", \"bottom\", \"left\"].forEach((side) => {\n const val = (offset as Record<string, string | number | undefined>)[\n side\n ];\n styles[`${prefix}-${side}`] =\n val === undefined\n ? fallback\n : typeof val === \"number\"\n ? `${val}px`\n : val;\n });\n } else {\n assignAll(fallback);\n }\n });\n\n return styles;\n}\n"],"mappings":";;AAIA,SAAgB,EAA0B,GAAoC;CAC5E,IAAM,CAAC,GAAG,KAAK,EAAS,MAAM,IAAI,EAC5B,IAA+B,EAAE;AAGvC,QAFI,KAAG,EAAW,KAAK,EAAoB,EACvC,KAAG,EAAW,KAAK,EAAoB,EACpC;;AAIT,SAAgB,IAA4C;AAE1D,KADI,OAAO,SAAW,OAClB,OAAO,WAAa,IAAa,QAAO;CAC5C,IAAM,IAAM,SAAS,gBAAgB,aAAa,MAAM;AAKxD,QAJI,MAAQ,UAAU,CAAC,IACd,OAAO,iBAAiB,SAAS,gBAAgB,CACrD,YAEE;;AAOT,SAAgB,EACd,GACA,GACwB;CACxB,IAAM,IAAiC,EAAE;AAiCzC,QA/BA,CAAC,GAAe,EAAa,CAAC,SAAS,GAAQ,MAAM;EACnD,IAAM,IAAW,MAAM,GACjB,IAAS,IAAW,oBAAoB,YACxC,IAAW,IAAW,IAAyB,GAE/C,KAAa,MAA2B;AAC5C;IAAC;IAAO;IAAS;IAAU;IAAO,CAAC,SAAS,MAAS;AACnD,MAAO,GAAG,EAAO,GAAG,OAClB,OAAO,KAAU,WAAW,GAAG,EAAM,MAAM;KAC7C;;AAGJ,EAAI,OAAO,KAAW,YAAY,OAAO,KAAW,WAClD,EAAU,EAAO,GACR,OAAO,KAAW,YAAY,IACvC;GAAC;GAAO;GAAS;GAAU;GAAO,CAAC,SAAS,MAAS;GACnD,IAAM,IAAO,EACX;AAEF,KAAO,GAAG,EAAO,GAAG,OAClB,MAAQ,KAAA,IACJ,IACA,OAAO,KAAQ,WACb,GAAG,EAAI,MACP;IACR,GAEF,EAAU,EAAS;GAErB,EAEK"}
@@ -1,7 +1,7 @@
1
1
  type TooltipContextValue = {
2
2
  open: () => boolean;
3
3
  setOpen: (v: boolean) => void;
4
- triggerRef: () => HTMLElement | undefined;
4
+ triggerRef: HTMLElement | undefined;
5
5
  setTriggerRef: (el: HTMLElement) => void;
6
6
  contentId: string;
7
7
  openDelay: number;
@@ -8,3 +8,5 @@ function r() {
8
8
  }
9
9
  //#endregion
10
10
  export { n as TooltipContext, r as useTooltipContext };
11
+
12
+ //# sourceMappingURL=Tooltip.context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip.context.js","names":[],"sources":["../../../../src/components/tooltip/Tooltip/Tooltip.context.ts"],"sourcesContent":["import { createContext, useContext } from \"solid-js\";\n\ntype TooltipContextValue = {\n open: () => boolean;\n setOpen: (v: boolean) => void;\n triggerRef: HTMLElement | undefined;\n setTriggerRef: (el: HTMLElement) => void;\n contentId: string;\n openDelay: number;\n closeDelay: number;\n};\n\nexport const TooltipContext = createContext<TooltipContextValue>();\n\nexport function useTooltipContext() {\n const ctx = useContext(TooltipContext);\n if (!ctx)\n throw new Error(\"Tooltip components must be used within Tooltip.Root\");\n return ctx;\n}\n"],"mappings":";;AAYA,IAAa,IAAiB,GAAoC;AAElE,SAAgB,IAAoB;CAClC,IAAM,IAAM,EAAW,EAAe;AACtC,KAAI,CAAC,EACH,OAAU,MAAM,sDAAsD;AACxE,QAAO"}
@@ -1,25 +1,33 @@
1
1
  import { TooltipContext as e } from "./Tooltip.context.js";
2
2
  import { createComponent as t } from "solid-js/web";
3
- import { createSignal as n } from "solid-js";
3
+ import { createSignal as n, createUniqueId as r, onCleanup as i } from "solid-js";
4
4
  //#region src/components/tooltip/Tooltip/Tooltip.tsx
5
- var r = (r) => {
6
- let [i, a] = n(!1), [o, s] = n(), c = `tooltip-${Math.random().toString(36).slice(2)}`;
7
- return t(e.Provider, {
8
- get value() {
9
- return {
10
- open: i,
11
- setOpen: a,
12
- triggerRef: o,
13
- setTriggerRef: s,
14
- contentId: c,
15
- openDelay: r.openDelay ?? 100,
16
- closeDelay: r.closeDelay ?? 100
17
- };
5
+ var a = (a) => {
6
+ let o, [s, c] = n(!1), l = (e) => {
7
+ o = e;
8
+ };
9
+ window.__tooltipOpen = s, window.__tooltipSetOpen = c;
10
+ let u = {
11
+ open: s,
12
+ setOpen: c,
13
+ get triggerRef() {
14
+ return o;
18
15
  },
16
+ setTriggerRef: l,
17
+ contentId: r(),
18
+ openDelay: a.openDelay ?? 100,
19
+ closeDelay: a.closeDelay ?? 100
20
+ };
21
+ return i(() => {
22
+ console.trace("Tooltip unmount/cleanup");
23
+ }), t(e.Provider, {
24
+ value: u,
19
25
  get children() {
20
- return r.children;
26
+ return a.children;
21
27
  }
22
28
  });
23
29
  };
24
30
  //#endregion
25
- export { r as Tooltip };
31
+ export { a as Tooltip };
32
+
33
+ //# sourceMappingURL=Tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip.js","names":["createSignal","createUniqueId","onCleanup","ParentProps","TooltipContext","Tooltip","props","openDelay","closeDelay","triggerRef","HTMLElement","open","setOpen","setTriggerRef","el","window","__tooltipOpen","__tooltipSetOpen","contentId","contextValue","console","trace","_$createComponent","Provider","value","children"],"sources":["../../../../src/components/tooltip/Tooltip/Tooltip.tsx"],"sourcesContent":["import {\n createSignal,\n createUniqueId,\n onCleanup,\n type ParentProps,\n} from \"solid-js\";\nimport { TooltipContext } from \"./Tooltip.context\";\n\nexport const Tooltip = (\n props: ParentProps & { openDelay?: number; closeDelay?: number },\n) => {\n let triggerRef: HTMLElement | undefined;\n\n const [open, setOpen] = createSignal(false);\n\n const setTriggerRef = (el: HTMLElement) => {\n triggerRef = el;\n };\n\n // 临时:把 open signal 直接暴露到 window 上调试\n (window as any).__tooltipOpen = open;\n (window as any).__tooltipSetOpen = setOpen;\n\n const contentId = createUniqueId();\n\n const contextValue = {\n open,\n setOpen,\n get triggerRef() {\n return triggerRef;\n },\n setTriggerRef,\n contentId,\n openDelay: props.openDelay ?? 100,\n closeDelay: props.closeDelay ?? 100,\n };\n\n onCleanup(() => {\n console.trace(\"Tooltip unmount/cleanup\");\n });\n\n return (\n <TooltipContext.Provider value={contextValue}>\n {props.children}\n </TooltipContext.Provider>\n );\n};\n"],"mappings":";;;;AAQA,IAAaK,KACXC,MACG;CACH,IAAIG,GAEE,CAACE,GAAMC,KAAWZ,EAAa,GAAM,EAErCa,KAAiBC,MAAoB;AACzCL,MAAaK;;AAKdC,CADAA,OAAeC,gBAAgBL,GAC/BI,OAAeE,mBAAmBL;CAInC,IAAMO,IAAe;EACnBR;EACAC;EACA,IAAIH,aAAa;AACf,UAAOA;;EAETI;EACAK,WATgBjB,GAAgB;EAUhCM,WAAWD,EAAMC,aAAa;EAC9BC,YAAYF,EAAME,cAAc;EACjC;AAMD,QAJAN,QAAgB;AACdkB,UAAQC,MAAM,0BAA0B;GACxC,EAEFC,EACGlB,EAAemB,UAAQ;EAACC,OAAOL;EAAY,IAAAM,WAAA;AAAA,UACzCnB,EAAMmB;;EAAQ,CAAA"}
@@ -1,14 +1,15 @@
1
- import { clsx as e } from "../../../lib/utils/clsx.js";
2
- import { useTooltipContentContext as t } from "../TooltipContent/TooltipContent.context.js";
3
- import { className as n, effect as r, setAttribute as i, template as a } from "solid-js/web";
1
+ import { clsx as e } from "../../../utils/clsx.js";
2
+ import { useTooltipContext as t } from "../Tooltip/Tooltip.context.js";
3
+ import { useTooltipContentContext as n } from "../TooltipContent/TooltipContent.context.js";
4
+ import { className as r, effect as i, setAttribute as a, setStyleProperty as o, template as s } from "solid-js/web";
4
5
  //#region src/components/tooltip/TooltipArrow/TooltipArrow.tsx
5
- var o = /* @__PURE__ */ a("<div>"), s = () => {
6
- let { side: a } = t();
6
+ var c = /* @__PURE__ */ s("<div>"), l = () => {
7
+ let { triggerRef: s } = t(), { side: l, align: u } = n(), d = () => s?.offsetWidth ?? 0;
7
8
  return (() => {
8
- var t = o();
9
- return r((r) => {
10
- var o = a(), s = e("absolute size-2.5 z-50 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs bg-neutral-950 dark:bg-neutral-50 fill-neutral-950 dark:fill-neutral-50 data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-[0.175rem] data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-[0.175rem] data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5 data-[side=top]:left-1/2 data-[side=top]:-translate-x-1/2 data-[side=bottom]:left-1/2 data-[side=bottom]:-translate-x-1/2");
11
- return o !== r.e && i(t, "data-side", r.e = o), s !== r.t && n(t, r.t = s), r;
9
+ var t = c();
10
+ return a(t, "data-side", l), a(t, "data-align", u), i((n) => {
11
+ var i = e("absolute size-2.5 z-50 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs bg-neutral-950 dark:bg-neutral-50 fill-neutral-950 dark:fill-neutral-50", "data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2", "data-[side=left]:top-1/2! data-[side=left]:right-[-0.175rem] data-[side=left]:-translate-y-1/2", "data-[side=right]:top-1/2! data-[side=right]:left-[-0.175rem] data-[side=right]:-translate-y-1/2", "data-[side=top]:-bottom-2.5 data-[side=top]:data-[align=center]:left-1/2 data-[side=top]:data-[align=center]:-translate-x-1/2 data-[side=top]:data-[align=start]:left-(--arrow-offset) data-[side=top]:data-[align=start]:-translate-x-1/2 data-[side=top]:data-[align=end]:right-(--arrow-offset) data-[side=top]:data-[align=end]:translate-x-1/2", "data-[side=bottom]:top-1 data-[side=bottom]:data-[align=center]:left-1/2 data-[side=bottom]:data-[align=center]:-translate-x-1/2 data-[side=bottom]:data-[align=start]:left-(--arrow-offset) data-[side=bottom]:data-[align=start]:-translate-x-1/2 data-[side=bottom]:data-[align=end]:right-(--arrow-offset) data-[side=bottom]:data-[align=end]:translate-x-1/2"), a = `${d() / 2}px`;
12
+ return i !== n.e && r(t, n.e = i), a !== n.t && o(t, "--arrow-offset", n.t = a), n;
12
13
  }, {
13
14
  e: void 0,
14
15
  t: void 0
@@ -16,4 +17,6 @@ var o = /* @__PURE__ */ a("<div>"), s = () => {
16
17
  })();
17
18
  };
18
19
  //#endregion
19
- export { s as TooltipArrow };
20
+ export { l as TooltipArrow };
21
+
22
+ //# sourceMappingURL=TooltipArrow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TooltipArrow.js","names":["clsx","useTooltipContentContext","useTooltipContext","TooltipArrow","triggerRef","side","align","triggerWidth","offsetWidth","_el$","_tmpl$","_$setAttribute","_$effect","_p$","_v$","_v$2","e","_$className","t","_$setStyleProperty","undefined"],"sources":["../../../../src/components/tooltip/TooltipArrow/TooltipArrow.tsx"],"sourcesContent":["import { clsx } from \"~/utils\";\nimport { useTooltipContentContext } from \"../TooltipContent/TooltipContent.context\";\nimport { useTooltipContext } from \"../Tooltip/Tooltip.context\";\n\nexport const TooltipArrow = () => {\n const { triggerRef } = useTooltipContext();\n const { side, align } = useTooltipContentContext();\n\n const triggerWidth = () => triggerRef?.offsetWidth ?? 0;\n\n return (\n <div\n // ref={setup}\n data-side={side}\n data-align={align}\n class={clsx(\n \"absolute size-2.5 z-50 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs bg-neutral-950 dark:bg-neutral-50 fill-neutral-950 dark:fill-neutral-50\",\n \"data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2\",\n \"data-[side=left]:top-1/2! data-[side=left]:right-[-0.175rem] data-[side=left]:-translate-y-1/2\",\n \"data-[side=right]:top-1/2! data-[side=right]:left-[-0.175rem] data-[side=right]:-translate-y-1/2\",\n \"data-[side=top]:-bottom-2.5 data-[side=top]:data-[align=center]:left-1/2 data-[side=top]:data-[align=center]:-translate-x-1/2 data-[side=top]:data-[align=start]:left-(--arrow-offset) data-[side=top]:data-[align=start]:-translate-x-1/2 data-[side=top]:data-[align=end]:right-(--arrow-offset) data-[side=top]:data-[align=end]:translate-x-1/2\",\n \"data-[side=bottom]:top-1 data-[side=bottom]:data-[align=center]:left-1/2 data-[side=bottom]:data-[align=center]:-translate-x-1/2 data-[side=bottom]:data-[align=start]:left-(--arrow-offset) data-[side=bottom]:data-[align=start]:-translate-x-1/2 data-[side=bottom]:data-[align=end]:right-(--arrow-offset) data-[side=bottom]:data-[align=end]:translate-x-1/2\",\n )}\n style={{\n \"--arrow-offset\": `${triggerWidth() / 2}px`,\n }}\n />\n );\n};\n"],"mappings":";;;;;oCAIaG,UAAqB;CAChC,IAAM,EAAEC,kBAAeF,GAAmB,EACpC,EAAEG,SAAMC,aAAUL,GAA0B,EAE5CM,UAAqBH,GAAYI,eAAe;AAEtD,eAAA;EAAA,IAAAC,IAAAC,GAAA;AAciD,SAdjDC,EAAAF,GAAA,aAGeJ,EAAI,EAAAM,EAAAF,GAAA,cACHH,EAAK,EAAAM,GAAAC,MAAA;GAAA,IAAAC,IACVd,EACL,oJACA,wNACA,kGACA,oGACA,uVACA,qWACD,EAAAe,IAEmB,GAAGR,GAAc,GAAG,EAAC;AAAI,UAAAO,MAAAD,EAAAG,KAAAC,EAAAR,GAAAI,EAAAG,IAAAF,EAAA,EAAAC,MAAAF,EAAAK,KAAAC,EAAAV,GAAA,kBAAAI,EAAAK,IAAAH,EAAA,EAAAF;KAAA;GAAAG,GAAAI,KAAAA;GAAAF,GAAAE,KAAAA;GAAA,CAAA,EAAAX;KAAA"}
@@ -1,5 +1,6 @@
1
1
  interface TooltipContentContextValue {
2
- side: () => "top" | "bottom" | "left" | "right";
2
+ side: "top" | "bottom" | "left" | "right";
3
+ align: "start" | "center" | "end";
3
4
  }
4
5
  export declare const TooltipContentContext: import('solid-js').Context<TooltipContentContextValue | undefined>;
5
6
  export declare function useTooltipContentContext(): TooltipContentContextValue;
@@ -8,3 +8,5 @@ function r() {
8
8
  }
9
9
  //#endregion
10
10
  export { n as TooltipContentContext, r as useTooltipContentContext };
11
+
12
+ //# sourceMappingURL=TooltipContent.context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TooltipContent.context.js","names":[],"sources":["../../../../src/components/tooltip/TooltipContent/TooltipContent.context.ts"],"sourcesContent":["import { createContext, useContext } from \"solid-js\";\n\ninterface TooltipContentContextValue {\n side: \"top\" | \"bottom\" | \"left\" | \"right\";\n align: \"start\" | \"center\" | \"end\";\n}\n\nexport const TooltipContentContext =\n createContext<TooltipContentContextValue>();\n\nexport function useTooltipContentContext() {\n const ctx = useContext(TooltipContentContext);\n if (!ctx)\n throw new Error(\n \"useTooltipContentContext must be used within TooltipContent\",\n );\n return ctx;\n}\n"],"mappings":";;AAOA,IAAa,IACX,GAA2C;AAE7C,SAAgB,IAA2B;CACzC,IAAM,IAAM,EAAW,EAAsB;AAC7C,KAAI,CAAC,EACH,OAAU,MACR,8DACD;AACH,QAAO"}