@neut/ui 0.0.11 → 0.0.13

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 (395) hide show
  1. package/dist/components/calendar/Calendar/Calendar.d.ts +10 -0
  2. package/dist/components/calendar/Calendar/Calendar.js +306 -0
  3. package/dist/components/calendar/Calendar/Calendar.js.map +1 -0
  4. package/dist/components/calendar/Calendar/Calendar.types.d.ts +62 -0
  5. package/dist/components/calendar/Calendar/Calendar.utils.d.ts +21 -0
  6. package/dist/components/calendar/Calendar/Calendar.utils.js +68 -0
  7. package/dist/components/calendar/Calendar/Calendar.utils.js.map +1 -0
  8. package/dist/components/calendar/Calendar/index.d.ts +2 -0
  9. package/dist/components/calendar/index.d.ts +2 -0
  10. package/dist/components/calendar/index.js +2 -0
  11. package/dist/components/combobox/Combobox/Combobox.context.d.ts +3 -0
  12. package/dist/components/combobox/Combobox/Combobox.context.js +12 -0
  13. package/dist/components/combobox/Combobox/Combobox.context.js.map +1 -0
  14. package/dist/components/combobox/Combobox/Combobox.d.ts +3 -0
  15. package/dist/components/combobox/Combobox/Combobox.js +60 -0
  16. package/dist/components/combobox/Combobox/Combobox.js.map +1 -0
  17. package/dist/components/combobox/Combobox/Combobox.types.d.ts +40 -0
  18. package/dist/components/combobox/Combobox/index.d.ts +2 -0
  19. package/dist/components/combobox/ComboboxChip/ComboboxChip.d.ts +7 -0
  20. package/dist/components/combobox/ComboboxChip/ComboboxChip.js +35 -0
  21. package/dist/components/combobox/ComboboxChip/ComboboxChip.js.map +1 -0
  22. package/dist/components/combobox/ComboboxChip/index.d.ts +1 -0
  23. package/dist/components/combobox/ComboboxChips/ComboboxChips.d.ts +5 -0
  24. package/dist/components/combobox/ComboboxChips/ComboboxChips.js +16 -0
  25. package/dist/components/combobox/ComboboxChips/ComboboxChips.js.map +1 -0
  26. package/dist/components/combobox/ComboboxChips/index.d.ts +1 -0
  27. package/dist/components/combobox/ComboboxChipsInput/ComboboxChipsInput.d.ts +4 -0
  28. package/dist/components/combobox/ComboboxChipsInput/ComboboxChipsInput.js +27 -0
  29. package/dist/components/combobox/ComboboxChipsInput/ComboboxChipsInput.js.map +1 -0
  30. package/dist/components/combobox/ComboboxChipsInput/index.d.ts +1 -0
  31. package/dist/components/combobox/ComboboxClear/ComboboxClear.d.ts +4 -0
  32. package/dist/components/combobox/ComboboxClear/ComboboxClear.js +30 -0
  33. package/dist/components/combobox/ComboboxClear/ComboboxClear.js.map +1 -0
  34. package/dist/components/combobox/ComboboxClear/index.d.ts +1 -0
  35. package/dist/components/combobox/ComboboxCollection/ComboboxCollection.d.ts +5 -0
  36. package/dist/components/combobox/ComboboxCollection/ComboboxCollection.js +20 -0
  37. package/dist/components/combobox/ComboboxCollection/ComboboxCollection.js.map +1 -0
  38. package/dist/components/combobox/ComboboxCollection/index.d.ts +1 -0
  39. package/dist/components/combobox/ComboboxContent/ComboboxContent.d.ts +2 -0
  40. package/dist/components/combobox/ComboboxContent/ComboboxContent.js +49 -0
  41. package/dist/components/combobox/ComboboxContent/ComboboxContent.js.map +1 -0
  42. package/dist/components/combobox/ComboboxContent/ComboboxContent.types.d.ts +12 -0
  43. package/dist/components/combobox/ComboboxContent/ComboboxContent.utils.d.ts +2 -0
  44. package/dist/components/combobox/ComboboxContent/ComboboxContent.utils.js +6 -0
  45. package/dist/components/combobox/ComboboxContent/ComboboxContent.utils.js.map +1 -0
  46. package/dist/components/combobox/ComboboxContent/index.d.ts +1 -0
  47. package/dist/components/combobox/ComboboxContent/useComboboxContent.d.ts +13 -0
  48. package/dist/components/combobox/ComboboxContent/useComboboxContent.js +48 -0
  49. package/dist/components/combobox/ComboboxContent/useComboboxContent.js.map +1 -0
  50. package/dist/components/combobox/ComboboxEmpty/ComboboxEmpty.d.ts +5 -0
  51. package/dist/components/combobox/ComboboxEmpty/ComboboxEmpty.js +14 -0
  52. package/dist/components/combobox/ComboboxEmpty/ComboboxEmpty.js.map +1 -0
  53. package/dist/components/combobox/ComboboxEmpty/index.d.ts +1 -0
  54. package/dist/components/combobox/ComboboxGroup/ComboboxGroup.d.ts +5 -0
  55. package/dist/components/combobox/ComboboxGroup/ComboboxGroup.js +13 -0
  56. package/dist/components/combobox/ComboboxGroup/ComboboxGroup.js.map +1 -0
  57. package/dist/components/combobox/ComboboxGroup/index.d.ts +1 -0
  58. package/dist/components/combobox/ComboboxInput/ComboboxInput.d.ts +9 -0
  59. package/dist/components/combobox/ComboboxInput/ComboboxInput.js +85 -0
  60. package/dist/components/combobox/ComboboxInput/ComboboxInput.js.map +1 -0
  61. package/dist/components/combobox/ComboboxInput/index.d.ts +1 -0
  62. package/dist/components/combobox/ComboboxItem/ComboboxItem.d.ts +7 -0
  63. package/dist/components/combobox/ComboboxItem/ComboboxItem.js +40 -0
  64. package/dist/components/combobox/ComboboxItem/ComboboxItem.js.map +1 -0
  65. package/dist/components/combobox/ComboboxItem/index.d.ts +1 -0
  66. package/dist/components/combobox/ComboboxLabel/ComboboxLabel.d.ts +5 -0
  67. package/dist/components/combobox/ComboboxLabel/ComboboxLabel.js +14 -0
  68. package/dist/components/combobox/ComboboxLabel/ComboboxLabel.js.map +1 -0
  69. package/dist/components/combobox/ComboboxLabel/index.d.ts +1 -0
  70. package/dist/components/combobox/ComboboxList/ComboboxList.d.ts +5 -0
  71. package/dist/components/combobox/ComboboxList/ComboboxList.js +22 -0
  72. package/dist/components/combobox/ComboboxList/ComboboxList.js.map +1 -0
  73. package/dist/components/combobox/ComboboxList/index.d.ts +1 -0
  74. package/dist/components/combobox/ComboboxSeparator/ComboboxSeparator.d.ts +3 -0
  75. package/dist/components/combobox/ComboboxSeparator/ComboboxSeparator.js +14 -0
  76. package/dist/components/combobox/ComboboxSeparator/ComboboxSeparator.js.map +1 -0
  77. package/dist/components/combobox/ComboboxSeparator/index.d.ts +1 -0
  78. package/dist/components/combobox/ComboboxTrigger/ComboboxTrigger.d.ts +6 -0
  79. package/dist/components/combobox/ComboboxTrigger/ComboboxTrigger.js +34 -0
  80. package/dist/components/combobox/ComboboxTrigger/ComboboxTrigger.js.map +1 -0
  81. package/dist/components/combobox/ComboboxTrigger/index.d.ts +1 -0
  82. package/dist/components/combobox/ComboboxValue/ComboboxValue.d.ts +5 -0
  83. package/dist/components/combobox/ComboboxValue/ComboboxValue.js +15 -0
  84. package/dist/components/combobox/ComboboxValue/ComboboxValue.js.map +1 -0
  85. package/dist/components/combobox/ComboboxValue/index.d.ts +1 -0
  86. package/dist/components/combobox/index.d.ts +18 -0
  87. package/dist/components/combobox/index.js +18 -0
  88. package/dist/components/combobox/useComboboxAnchor/index.d.ts +1 -0
  89. package/dist/components/combobox/useComboboxAnchor/useComboboxAnchor.d.ts +1 -0
  90. package/dist/components/combobox/useComboboxAnchor/useComboboxAnchor.js +9 -0
  91. package/dist/components/combobox/useComboboxAnchor/useComboboxAnchor.js.map +1 -0
  92. package/dist/components/date-picker/DatePicker/DatePicker.d.ts +11 -0
  93. package/dist/components/date-picker/DatePicker/DatePicker.js +136 -0
  94. package/dist/components/date-picker/DatePicker/DatePicker.js.map +1 -0
  95. package/dist/components/date-picker/DatePicker/DatePicker.types.d.ts +32 -0
  96. package/dist/components/date-picker/DatePicker/index.d.ts +2 -0
  97. package/dist/components/date-picker/index.d.ts +2 -0
  98. package/dist/components/date-picker/index.js +2 -0
  99. package/dist/components/dialog/Dialog/Dialog.context.d.ts +2 -1
  100. package/dist/components/dialog/Dialog/Dialog.context.js.map +1 -1
  101. package/dist/components/dialog/Dialog/Dialog.js +21 -12
  102. package/dist/components/dialog/Dialog/Dialog.js.map +1 -1
  103. package/dist/components/dialog/Dialog/Dialog.types.d.ts +13 -1
  104. package/dist/components/dialog/Dialog/index.d.ts +1 -0
  105. package/dist/components/dialog/DialogTrigger/DialogTrigger.d.ts +4 -2
  106. package/dist/components/dialog/DialogTrigger/DialogTrigger.js +27 -6
  107. package/dist/components/dialog/DialogTrigger/DialogTrigger.js.map +1 -1
  108. package/dist/components/dialog/DialogTrigger/DialogTrigger.types.d.ts +3 -0
  109. package/dist/components/dialog/DialogTrigger/index.d.ts +3 -0
  110. package/dist/components/dialog/DialogTrigger/useDialogTrigger.d.ts +13 -2
  111. package/dist/components/dialog/DialogTrigger/useDialogTrigger.js +15 -19
  112. package/dist/components/dialog/DialogTrigger/useDialogTrigger.js.map +1 -1
  113. package/dist/components/dialog/index.js +3 -2
  114. package/dist/components/empty/Empty/Empty.d.ts +2 -0
  115. package/dist/components/empty/Empty/Empty.js +18 -0
  116. package/dist/components/empty/Empty/Empty.js.map +1 -0
  117. package/dist/components/empty/Empty/index.d.ts +1 -0
  118. package/dist/components/empty/EmptyContent/EmptyContent.d.ts +2 -0
  119. package/dist/components/empty/EmptyContent/EmptyContent.js +18 -0
  120. package/dist/components/empty/EmptyContent/EmptyContent.js.map +1 -0
  121. package/dist/components/empty/EmptyContent/index.d.ts +1 -0
  122. package/dist/components/empty/EmptyDescription/EmptyDescription.d.ts +2 -0
  123. package/dist/components/empty/EmptyDescription/EmptyDescription.js +18 -0
  124. package/dist/components/empty/EmptyDescription/EmptyDescription.js.map +1 -0
  125. package/dist/components/empty/EmptyDescription/index.d.ts +1 -0
  126. package/dist/components/empty/EmptyHeader/EmptyHeader.d.ts +2 -0
  127. package/dist/components/empty/EmptyHeader/EmptyHeader.js +18 -0
  128. package/dist/components/empty/EmptyHeader/EmptyHeader.js.map +1 -0
  129. package/dist/components/empty/EmptyHeader/index.d.ts +1 -0
  130. package/dist/components/empty/EmptyMedia/EmptyMedia.d.ts +4 -0
  131. package/dist/components/empty/EmptyMedia/EmptyMedia.js +27 -0
  132. package/dist/components/empty/EmptyMedia/EmptyMedia.js.map +1 -0
  133. package/dist/components/empty/EmptyMedia/EmptyMedia.styles.d.ts +3 -0
  134. package/dist/components/empty/EmptyMedia/EmptyMedia.styles.js +13 -0
  135. package/dist/components/empty/EmptyMedia/EmptyMedia.styles.js.map +1 -0
  136. package/dist/components/empty/EmptyMedia/EmptyMedia.types.d.ts +3 -0
  137. package/dist/components/empty/EmptyMedia/index.d.ts +2 -0
  138. package/dist/components/empty/EmptyTitle/EmptyTitle.d.ts +2 -0
  139. package/dist/components/empty/EmptyTitle/EmptyTitle.js +18 -0
  140. package/dist/components/empty/EmptyTitle/EmptyTitle.js.map +1 -0
  141. package/dist/components/empty/EmptyTitle/index.d.ts +1 -0
  142. package/dist/components/empty/index.d.ts +7 -0
  143. package/dist/components/empty/index.js +7 -0
  144. package/dist/components/image/Image.utils.js.map +1 -1
  145. package/dist/components/label/index.d.ts +1 -0
  146. package/dist/components/popover/Popover/Popover.context.d.ts +3 -0
  147. package/dist/components/popover/Popover/Popover.context.js +12 -0
  148. package/dist/components/popover/Popover/Popover.context.js.map +1 -0
  149. package/dist/components/popover/Popover/Popover.d.ts +18 -0
  150. package/dist/components/popover/Popover/Popover.js +37 -0
  151. package/dist/components/popover/Popover/Popover.js.map +1 -0
  152. package/dist/components/popover/Popover/Popover.types.d.ts +24 -0
  153. package/dist/components/popover/Popover/index.d.ts +3 -0
  154. package/dist/components/popover/PopoverContent/PopoverContent.d.ts +6 -0
  155. package/dist/components/popover/PopoverContent/PopoverContent.js +72 -0
  156. package/dist/components/popover/PopoverContent/PopoverContent.js.map +1 -0
  157. package/dist/components/popover/PopoverContent/PopoverContent.types.d.ts +16 -0
  158. package/dist/components/popover/PopoverContent/PopoverContent.utils.d.ts +20 -0
  159. package/dist/components/popover/PopoverContent/PopoverContent.utils.js +36 -0
  160. package/dist/components/popover/PopoverContent/PopoverContent.utils.js.map +1 -0
  161. package/dist/components/popover/PopoverContent/index.d.ts +6 -0
  162. package/dist/components/popover/PopoverContent/usePopoverContent.d.ts +11 -0
  163. package/dist/components/popover/PopoverContent/usePopoverContent.js +42 -0
  164. package/dist/components/popover/PopoverContent/usePopoverContent.js.map +1 -0
  165. package/dist/components/popover/PopoverDescription/PopoverDescription.d.ts +2 -0
  166. package/dist/components/popover/PopoverDescription/PopoverDescription.js +18 -0
  167. package/dist/components/popover/PopoverDescription/PopoverDescription.js.map +1 -0
  168. package/dist/components/popover/PopoverDescription/index.d.ts +1 -0
  169. package/dist/components/popover/PopoverHeader/PopoverHeader.d.ts +2 -0
  170. package/dist/components/popover/PopoverHeader/PopoverHeader.js +18 -0
  171. package/dist/components/popover/PopoverHeader/PopoverHeader.js.map +1 -0
  172. package/dist/components/popover/PopoverHeader/index.d.ts +1 -0
  173. package/dist/components/popover/PopoverTitle/PopoverTitle.d.ts +2 -0
  174. package/dist/components/popover/PopoverTitle/PopoverTitle.js +18 -0
  175. package/dist/components/popover/PopoverTitle/PopoverTitle.js.map +1 -0
  176. package/dist/components/popover/PopoverTitle/index.d.ts +1 -0
  177. package/dist/components/popover/PopoverTrigger/PopoverTrigger.d.ts +4 -0
  178. package/dist/components/popover/PopoverTrigger/PopoverTrigger.js +35 -0
  179. package/dist/components/popover/PopoverTrigger/PopoverTrigger.js.map +1 -0
  180. package/dist/components/popover/PopoverTrigger/PopoverTrigger.types.d.ts +3 -0
  181. package/dist/components/popover/PopoverTrigger/index.d.ts +4 -0
  182. package/dist/components/popover/PopoverTrigger/usePopoverTrigger.d.ts +14 -0
  183. package/dist/components/popover/PopoverTrigger/usePopoverTrigger.js +35 -0
  184. package/dist/components/popover/PopoverTrigger/usePopoverTrigger.js.map +1 -0
  185. package/dist/components/popover/index.d.ts +9 -0
  186. package/dist/components/popover/index.js +7 -0
  187. package/dist/components/radio-group/RadioGroup/RadioGroup.context.d.ts +3 -0
  188. package/dist/components/radio-group/RadioGroup/RadioGroup.context.js +12 -0
  189. package/dist/components/radio-group/RadioGroup/RadioGroup.context.js.map +1 -0
  190. package/dist/components/radio-group/RadioGroup/RadioGroup.d.ts +15 -0
  191. package/dist/components/radio-group/RadioGroup/RadioGroup.js +56 -0
  192. package/dist/components/radio-group/RadioGroup/RadioGroup.js.map +1 -0
  193. package/dist/components/radio-group/RadioGroup/RadioGroup.types.d.ts +22 -0
  194. package/dist/components/radio-group/RadioGroup/index.d.ts +3 -0
  195. package/dist/components/radio-group/RadioGroupItem/RadioGroupItem.d.ts +6 -0
  196. package/dist/components/radio-group/RadioGroupItem/RadioGroupItem.js +80 -0
  197. package/dist/components/radio-group/RadioGroupItem/RadioGroupItem.js.map +1 -0
  198. package/dist/components/radio-group/RadioGroupItem/RadioGroupItem.types.d.ts +9 -0
  199. package/dist/components/radio-group/RadioGroupItem/index.d.ts +2 -0
  200. package/dist/components/radio-group/index.d.ts +4 -0
  201. package/dist/components/radio-group/index.js +3 -0
  202. package/dist/components/select/Select/Select.context.d.ts +3 -0
  203. package/dist/components/select/Select/Select.context.js +12 -0
  204. package/dist/components/select/Select/Select.context.js.map +1 -0
  205. package/dist/components/select/Select/Select.d.ts +22 -0
  206. package/dist/components/select/Select/Select.js +48 -0
  207. package/dist/components/select/Select/Select.js.map +1 -0
  208. package/dist/components/select/Select/Select.types.d.ts +45 -0
  209. package/dist/components/select/Select/index.d.ts +3 -0
  210. package/dist/components/select/SelectContent/SelectContent.d.ts +2 -0
  211. package/dist/components/select/SelectContent/SelectContent.js +80 -0
  212. package/dist/components/select/SelectContent/SelectContent.js.map +1 -0
  213. package/dist/components/select/SelectContent/SelectContent.types.d.ts +22 -0
  214. package/dist/components/select/SelectContent/SelectContent.utils.d.ts +36 -0
  215. package/dist/components/select/SelectContent/SelectContent.utils.js +66 -0
  216. package/dist/components/select/SelectContent/SelectContent.utils.js.map +1 -0
  217. package/dist/components/select/SelectContent/index.d.ts +6 -0
  218. package/dist/components/select/SelectContent/useSelectContent.d.ts +28 -0
  219. package/dist/components/select/SelectContent/useSelectContent.js +50 -0
  220. package/dist/components/select/SelectContent/useSelectContent.js.map +1 -0
  221. package/dist/components/select/SelectGroup/SelectGroup.d.ts +2 -0
  222. package/dist/components/select/SelectGroup/SelectGroup.js +13 -0
  223. package/dist/components/select/SelectGroup/SelectGroup.js.map +1 -0
  224. package/dist/components/select/SelectGroup/index.d.ts +1 -0
  225. package/dist/components/select/SelectItem/SelectItem.d.ts +2 -0
  226. package/dist/components/select/SelectItem/SelectItem.js +52 -0
  227. package/dist/components/select/SelectItem/SelectItem.js.map +1 -0
  228. package/dist/components/select/SelectItem/SelectItem.types.d.ts +10 -0
  229. package/dist/components/select/SelectItem/index.d.ts +4 -0
  230. package/dist/components/select/SelectItem/useSelectItem.d.ts +12 -0
  231. package/dist/components/select/SelectItem/useSelectItem.js +32 -0
  232. package/dist/components/select/SelectItem/useSelectItem.js.map +1 -0
  233. package/dist/components/select/SelectLabel/SelectLabel.d.ts +2 -0
  234. package/dist/components/select/SelectLabel/SelectLabel.js +13 -0
  235. package/dist/components/select/SelectLabel/SelectLabel.js.map +1 -0
  236. package/dist/components/select/SelectLabel/index.d.ts +1 -0
  237. package/dist/components/select/SelectSeparator/SelectSeparator.d.ts +2 -0
  238. package/dist/components/select/SelectSeparator/SelectSeparator.js +13 -0
  239. package/dist/components/select/SelectSeparator/SelectSeparator.js.map +1 -0
  240. package/dist/components/select/SelectSeparator/index.d.ts +1 -0
  241. package/dist/components/select/SelectTrigger/SelectTrigger.d.ts +4 -0
  242. package/dist/components/select/SelectTrigger/SelectTrigger.js +50 -0
  243. package/dist/components/select/SelectTrigger/SelectTrigger.js.map +1 -0
  244. package/dist/components/select/SelectTrigger/SelectTrigger.types.d.ts +3 -0
  245. package/dist/components/select/SelectTrigger/index.d.ts +4 -0
  246. package/dist/components/select/SelectTrigger/useSelectTrigger.d.ts +15 -0
  247. package/dist/components/select/SelectTrigger/useSelectTrigger.js +37 -0
  248. package/dist/components/select/SelectTrigger/useSelectTrigger.js.map +1 -0
  249. package/dist/components/select/SelectValue/SelectValue.d.ts +2 -0
  250. package/dist/components/select/SelectValue/SelectValue.js +20 -0
  251. package/dist/components/select/SelectValue/SelectValue.js.map +1 -0
  252. package/dist/components/select/SelectValue/SelectValue.types.d.ts +4 -0
  253. package/dist/components/select/SelectValue/index.d.ts +2 -0
  254. package/dist/components/select/index.d.ts +13 -0
  255. package/dist/components/select/index.js +9 -0
  256. package/dist/components/toast/Toast/Toast.d.ts +3 -0
  257. package/dist/components/toast/Toast/Toast.js +181 -0
  258. package/dist/components/toast/Toast/Toast.js.map +1 -0
  259. package/dist/components/toast/Toast/Toast.styles.d.ts +6 -0
  260. package/dist/components/toast/Toast/Toast.styles.js +27 -0
  261. package/dist/components/toast/Toast/Toast.styles.js.map +1 -0
  262. package/dist/components/toast/Toast/Toast.types.d.ts +90 -0
  263. package/dist/components/toast/Toast/Toast.types.js +6 -0
  264. package/dist/components/toast/Toast/Toast.types.js.map +1 -0
  265. package/dist/components/toast/Toast/index.d.ts +2 -0
  266. package/dist/components/toast/{components → Toaster}/Toaster.d.ts +1 -1
  267. package/dist/components/toast/Toaster/Toaster.js +102 -0
  268. package/dist/components/toast/Toaster/Toaster.js.map +1 -0
  269. package/dist/components/toast/Toaster/Toaster.styles.d.ts +1 -0
  270. package/dist/components/toast/Toaster/Toaster.styles.js +6 -0
  271. package/dist/components/toast/Toaster/Toaster.styles.js.map +1 -0
  272. package/dist/components/toast/Toaster/Toaster.types.d.ts +44 -0
  273. package/dist/components/toast/Toaster/Toaster.utils.d.ts +7 -0
  274. package/dist/components/toast/Toaster/Toaster.utils.js +33 -0
  275. package/dist/components/toast/Toaster/Toaster.utils.js.map +1 -0
  276. package/dist/components/toast/Toaster/index.d.ts +3 -0
  277. package/dist/components/toast/index.d.ts +5 -10
  278. package/dist/components/toast/index.js +4 -5
  279. package/dist/components/toast/state/index.d.ts +1 -0
  280. package/dist/components/toast/state/toast.d.ts +24 -0
  281. package/dist/components/toast/state/toast.js +116 -0
  282. package/dist/components/toast/state/toast.js.map +1 -0
  283. package/dist/components/toggle/Toggle/Toggle.d.ts +3 -0
  284. package/dist/components/toggle/Toggle/Toggle.js +49 -0
  285. package/dist/components/toggle/Toggle/Toggle.js.map +1 -0
  286. package/dist/components/toggle/Toggle/Toggle.styles.d.ts +4 -0
  287. package/dist/components/toggle/Toggle/Toggle.styles.js +23 -0
  288. package/dist/components/toggle/Toggle/Toggle.styles.js.map +1 -0
  289. package/dist/components/toggle/Toggle/Toggle.types.d.ts +12 -0
  290. package/dist/components/toggle/Toggle/index.d.ts +3 -0
  291. package/dist/components/toggle/index.d.ts +2 -0
  292. package/dist/components/toggle/index.js +3 -0
  293. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.context.d.ts +3 -0
  294. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.context.js +12 -0
  295. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.context.js.map +1 -0
  296. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.d.ts +3 -0
  297. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.js +68 -0
  298. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.js.map +1 -0
  299. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.types.d.ts +28 -0
  300. package/dist/components/toggle-group/ToggleGroup/index.d.ts +3 -0
  301. package/dist/components/toggle-group/ToggleGroupItem/ToggleGroupItem.d.ts +3 -0
  302. package/dist/components/toggle-group/ToggleGroupItem/ToggleGroupItem.js +72 -0
  303. package/dist/components/toggle-group/ToggleGroupItem/ToggleGroupItem.js.map +1 -0
  304. package/dist/components/toggle-group/ToggleGroupItem/ToggleGroupItem.types.d.ts +10 -0
  305. package/dist/components/toggle-group/ToggleGroupItem/index.d.ts +2 -0
  306. package/dist/components/toggle-group/index.d.ts +4 -0
  307. package/dist/components/toggle-group/index.js +3 -0
  308. package/dist/components/tooltip/Tooltip/Tooltip.js +51 -50
  309. package/dist/components/tooltip/Tooltip/Tooltip.js.map +1 -1
  310. package/dist/components/tooltip/TooltipArrow/TooltipArrow.d.ts +3 -28
  311. package/dist/components/tooltip/TooltipArrow/TooltipArrow.js +13 -45
  312. package/dist/components/tooltip/TooltipArrow/TooltipArrow.js.map +1 -1
  313. package/dist/components/tooltip/TooltipContent/TooltipContent.context.d.ts +2 -0
  314. package/dist/components/tooltip/TooltipContent/TooltipContent.context.js.map +1 -1
  315. package/dist/components/tooltip/TooltipContent/TooltipContent.js +26 -27
  316. package/dist/components/tooltip/TooltipContent/TooltipContent.js.map +1 -1
  317. package/dist/components/tooltip/TooltipContent/TooltipContent.types.d.ts +3 -2
  318. package/dist/components/tooltip/TooltipContent/TooltipContent.utils.d.ts +2 -1
  319. package/dist/components/tooltip/TooltipContent/TooltipContent.utils.js +8 -4
  320. package/dist/components/tooltip/TooltipContent/TooltipContent.utils.js.map +1 -1
  321. package/dist/components/tooltip/TooltipContent/useTooltipContent.js +23 -22
  322. package/dist/components/tooltip/TooltipContent/useTooltipContent.js.map +1 -1
  323. package/dist/components/tooltip/TooltipProvider/TooltipProvider.context.d.ts +3 -0
  324. package/dist/components/tooltip/TooltipProvider/TooltipProvider.context.js +10 -0
  325. package/dist/components/tooltip/TooltipProvider/TooltipProvider.context.js.map +1 -0
  326. package/dist/components/tooltip/TooltipProvider/TooltipProvider.d.ts +3 -0
  327. package/dist/components/tooltip/TooltipProvider/TooltipProvider.js +20 -0
  328. package/dist/components/tooltip/TooltipProvider/TooltipProvider.js.map +1 -0
  329. package/dist/components/tooltip/TooltipProvider/TooltipProvider.types.d.ts +11 -0
  330. package/dist/components/tooltip/TooltipProvider/index.d.ts +3 -0
  331. package/dist/components/tooltip/TooltipTrigger/TooltipTrigger.js +11 -15
  332. package/dist/components/tooltip/TooltipTrigger/TooltipTrigger.js.map +1 -1
  333. package/dist/components/tooltip/index.d.ts +2 -0
  334. package/dist/components/tooltip/index.js +7 -6
  335. package/dist/index.d.ts +9 -0
  336. package/dist/index.js +205 -158
  337. package/dist/lib/positioner/middleware/size.js +21 -0
  338. package/dist/lib/positioner/middleware/size.js.map +1 -0
  339. package/dist/ui.css +1 -1
  340. package/dist/utils/index.d.ts +1 -0
  341. package/dist/utils/index.js +3 -2
  342. package/dist/utils/ref.d.ts +11 -0
  343. package/dist/utils/ref.js +10 -0
  344. package/dist/utils/ref.js.map +1 -0
  345. package/package.json +8 -7
  346. package/dist/components/toast/components/Assets.d.ts +0 -9
  347. package/dist/components/toast/components/Assets.js +0 -32
  348. package/dist/components/toast/components/Assets.js.map +0 -1
  349. package/dist/components/toast/components/Toast.d.ts +0 -3
  350. package/dist/components/toast/components/Toast.js +0 -152
  351. package/dist/components/toast/components/Toast.js.map +0 -1
  352. package/dist/components/toast/components/ToastActions.d.ts +0 -12
  353. package/dist/components/toast/components/ToastActions.js +0 -62
  354. package/dist/components/toast/components/ToastActions.js.map +0 -1
  355. package/dist/components/toast/components/ToastContent.d.ts +0 -9
  356. package/dist/components/toast/components/ToastContent.js +0 -36
  357. package/dist/components/toast/components/ToastContent.js.map +0 -1
  358. package/dist/components/toast/components/ToastIcon.d.ts +0 -9
  359. package/dist/components/toast/components/ToastIcon.js +0 -59
  360. package/dist/components/toast/components/ToastIcon.js.map +0 -1
  361. package/dist/components/toast/components/Toaster.js +0 -163
  362. package/dist/components/toast/components/Toaster.js.map +0 -1
  363. package/dist/components/toast/constants.d.ts +0 -16
  364. package/dist/components/toast/constants.js +0 -6
  365. package/dist/components/toast/constants.js.map +0 -1
  366. package/dist/components/toast/hooks/useSwipe.d.ts +0 -23
  367. package/dist/components/toast/hooks/useSwipe.js +0 -59
  368. package/dist/components/toast/hooks/useSwipe.js.map +0 -1
  369. package/dist/components/toast/hooks/useTheme.d.ts +0 -2
  370. package/dist/components/toast/hooks/useTheme.js +0 -22
  371. package/dist/components/toast/hooks/useTheme.js.map +0 -1
  372. package/dist/components/toast/hooks/useToastHeight.d.ts +0 -11
  373. package/dist/components/toast/hooks/useToastHeight.js +0 -35
  374. package/dist/components/toast/hooks/useToastHeight.js.map +0 -1
  375. package/dist/components/toast/hooks/useToastSubscription.d.ts +0 -5
  376. package/dist/components/toast/hooks/useToastSubscription.js +0 -38
  377. package/dist/components/toast/hooks/useToastSubscription.js.map +0 -1
  378. package/dist/components/toast/hooks/useToastTimer.d.ts +0 -11
  379. package/dist/components/toast/hooks/useToastTimer.js +0 -22
  380. package/dist/components/toast/hooks/useToastTimer.js.map +0 -1
  381. package/dist/components/toast/hooks/useToasterKeyboard.d.ts +0 -7
  382. package/dist/components/toast/hooks/useToasterKeyboard.js +0 -14
  383. package/dist/components/toast/hooks/useToasterKeyboard.js.map +0 -1
  384. package/dist/components/toast/hooks.d.ts +0 -13
  385. package/dist/components/toast/hooks.js +0 -37
  386. package/dist/components/toast/hooks.js.map +0 -1
  387. package/dist/components/toast/state.d.ts +0 -52
  388. package/dist/components/toast/state.js +0 -170
  389. package/dist/components/toast/state.js.map +0 -1
  390. package/dist/components/toast/types.d.ts +0 -168
  391. package/dist/components/toast/types.js +0 -6
  392. package/dist/components/toast/types.js.map +0 -1
  393. package/dist/components/toast/utils.d.ts +0 -10
  394. package/dist/components/toast/utils.js +0 -39
  395. package/dist/components/toast/utils.js.map +0 -1
@@ -0,0 +1,68 @@
1
+ import { clsx as e } from "../../../utils/clsx.js";
2
+ import { ToggleGroupContext as t } from "./ToggleGroup.context.js";
3
+ import { createComponent as n, insert as r, mergeProps as i, spread as a, template as o } from "solid-js/web";
4
+ import { createMemo as s, createSignal as c, splitProps as l } from "solid-js";
5
+ //#region src/components/toggle-group/ToggleGroup/ToggleGroup.tsx
6
+ var u = /*#__PURE__*/ o("<div role=group data-slot=toggle-group>");
7
+ function d(o) {
8
+ let [d, f] = l(o, [
9
+ "value",
10
+ "defaultValue",
11
+ "onValueChange",
12
+ "multiple",
13
+ "disabled",
14
+ "orientation",
15
+ "spacing",
16
+ "variant",
17
+ "size",
18
+ "class",
19
+ "children",
20
+ "dir"
21
+ ]), [p, m] = c(d.defaultValue ?? []), h = s(() => d.value === void 0 ? p() : d.value), g = s(() => !!d.multiple), _ = s(() => !!d.disabled), v = s(() => d.orientation ?? "horizontal"), y = s(() => d.spacing ?? 2), b = s(() => d.variant ?? "default"), x = s(() => d.size ?? "default"), S = {
22
+ value: h,
23
+ setValue: (e) => {
24
+ d.value === void 0 && m(e), d.onValueChange?.(e);
25
+ },
26
+ multiple: g,
27
+ disabled: _,
28
+ orientation: v,
29
+ spacing: y,
30
+ variant: b,
31
+ size: x
32
+ };
33
+ return (() => {
34
+ var o = u();
35
+ return a(o, i({
36
+ get "data-variant"() {
37
+ return b();
38
+ },
39
+ get "data-size"() {
40
+ return x();
41
+ },
42
+ get "data-spacing"() {
43
+ return y();
44
+ },
45
+ get "data-orientation"() {
46
+ return v();
47
+ },
48
+ get style() {
49
+ return { "--gap": y() };
50
+ },
51
+ get dir() {
52
+ return d.dir;
53
+ },
54
+ get class() {
55
+ return e("group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] rounded-lg data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch", d.class);
56
+ }
57
+ }, f), !1, !0), r(o, n(t.Provider, {
58
+ value: S,
59
+ get children() {
60
+ return d.children;
61
+ }
62
+ })), o;
63
+ })();
64
+ }
65
+ //#endregion
66
+ export { d as ToggleGroup };
67
+
68
+ //# sourceMappingURL=ToggleGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleGroup.js","names":["createMemo","createSignal","splitProps","JSX","clsx","ToggleGroupContext","ToggleGroupContextValue","ToggleGroupProps","ToggleGroup","props","Element","local","rest","internalValue","setInternalValue","defaultValue","value","undefined","multiple","disabled","orientation","spacing","variant","size","setValue","next","onValueChange","ctx","_el$","_tmpl$","_$spread","_$mergeProps","data-variant","data-size","data-spacing","data-orientation","style","CSSProperties","dir","class","_$insert","_$createComponent","Provider","children"],"sources":["../../../../src/components/toggle-group/ToggleGroup/ToggleGroup.tsx"],"sourcesContent":["import { createMemo, createSignal, splitProps, type JSX } from \"solid-js\";\nimport { clsx } from \"~/utils\";\nimport { ToggleGroupContext } from \"./ToggleGroup.context\";\nimport type {\n ToggleGroupContextValue,\n ToggleGroupProps,\n} from \"./ToggleGroup.types\";\n\nexport function ToggleGroup(props: ToggleGroupProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"value\",\n \"defaultValue\",\n \"onValueChange\",\n \"multiple\",\n \"disabled\",\n \"orientation\",\n \"spacing\",\n \"variant\",\n \"size\",\n \"class\",\n \"children\",\n \"dir\",\n ]);\n\n const [internalValue, setInternalValue] = createSignal<string[]>(\n local.defaultValue ?? [],\n );\n const value = createMemo(() =>\n local.value !== undefined ? local.value : internalValue(),\n );\n const multiple = createMemo(() => !!local.multiple);\n const disabled = createMemo(() => !!local.disabled);\n const orientation = createMemo(() => local.orientation ?? \"horizontal\");\n const spacing = createMemo(() => local.spacing ?? 2);\n const variant = createMemo(() => local.variant ?? \"default\");\n const size = createMemo(() => local.size ?? \"default\");\n\n const setValue = (next: string[]) => {\n if (local.value === undefined) setInternalValue(next);\n local.onValueChange?.(next);\n };\n\n const ctx: ToggleGroupContextValue = {\n value,\n setValue,\n multiple,\n disabled,\n orientation,\n spacing,\n variant,\n size,\n };\n\n return (\n <div\n role=\"group\"\n data-slot=\"toggle-group\"\n data-variant={variant()}\n data-size={size()}\n data-spacing={spacing()}\n data-orientation={orientation()}\n style={{ \"--gap\": spacing() } as JSX.CSSProperties}\n dir={local.dir}\n class={clsx(\n \"group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] rounded-lg data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch\",\n local.class,\n )}\n {...rest}\n >\n <ToggleGroupContext.Provider value={ctx}>\n {local.children}\n </ToggleGroupContext.Provider>\n </div>\n );\n}\n"],"mappings":";;;;;;AAQA,SAAgBQ,EAAYC,GAAsC;CAChE,IAAM,CAACE,GAAOC,KAAQV,EAAWO,GAAO;EACtC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAAK,CACN,GAEK,CAACI,GAAeC,KAAoBb,EACxCU,EAAMI,gBAAgB,CAAA,CACxB,GACMC,IAAQhB,QACZW,EAAMK,UAAUC,KAAAA,IAA0BJ,EAAc,IAA5BF,EAAMK,KACpC,GACME,IAAWlB,QAAiB,CAAC,CAACW,EAAMO,QAAQ,GAC5CC,IAAWnB,QAAiB,CAAC,CAACW,EAAMQ,QAAQ,GAC5CC,IAAcpB,QAAiBW,EAAMS,eAAe,YAAY,GAChEC,IAAUrB,QAAiBW,EAAMU,WAAW,CAAC,GAC7CC,IAAUtB,QAAiBW,EAAMW,WAAW,SAAS,GACrDC,IAAOvB,QAAiBW,EAAMY,QAAQ,SAAS,GAO/CI,IAA+B;EACnCX;EACAQ,WAPgBC,MAAmB;GAEnCd,AADIA,EAAMK,UAAUC,KAAAA,KAAWH,EAAiBW,CAAI,GACpDd,EAAMe,gBAAgBD,CAAI;EAC5B;EAKEP;EACAC;EACAC;EACAC;EACAC;EACAC;CACF;CAEA,cAAA;EAAA,IAAAK,IAAAC,EAAA;EAiBqB,OAjBrBC,EAAAF,GAAAG,EAAA;GAAA,IAAA,iBAAA;IAAA,OAIkBT,EAAQ;GAAC;GAAA,IAAA,cAAA;IAAA,OACZC,EAAK;GAAC;GAAA,IAAA,iBAAA;IAAA,OACHF,EAAQ;GAAC;GAAA,IAAA,qBAAA;IAAA,OACLD,EAAY;GAAC;GAAA,IAC/BgB,QAAK;IAAA,OAAE,EAAE,SAASf,EAAQ,EAAE;GAAsB;GAAA,IAClDiB,MAAG;IAAA,OAAE3B,EAAM2B;GAAG;GAAA,IAAA,QAAA;IAAA,OACPlC,EACL,iOACAO,EAAM4B,KACR;GAAC;EAAA,GACG3B,CAAI,GAAA,IAAA,EAAA,GAAA4B,EAAAZ,GAAAa,EAEPpC,EAAmBqC,UAAQ;GAAC1B,OAAOW;GAAG,IAAAgB,WAAA;IAAA,OACpChC,EAAMgC;GAAQ;EAAA,CAAA,CAAA,GAAAf;CAAA,EAAA,CAAA;AAIvB"}
@@ -0,0 +1,28 @@
1
+ import { Accessor, ParentProps } from 'solid-js';
2
+ import { VariantProps } from 'class-variance-authority';
3
+ import { toggleVariants } from '../../toggle/Toggle/Toggle.styles';
4
+ export interface ToggleGroupProps extends ParentProps, VariantProps<typeof toggleVariants> {
5
+ /** 受控选中值(数组);不传则内部自管理 */
6
+ value?: string[];
7
+ /** 非受控模式下的初始选中值 */
8
+ defaultValue?: string[];
9
+ onValueChange?: (value: string[]) => void;
10
+ /** 是否允许同时选中多个,默认 false */
11
+ multiple?: boolean;
12
+ disabled?: boolean;
13
+ orientation?: "horizontal" | "vertical";
14
+ /** 项目之间的间距,通过 --gap 变量实现,默认 2 */
15
+ spacing?: number;
16
+ class?: string;
17
+ dir?: "ltr" | "rtl" | "auto";
18
+ }
19
+ export interface ToggleGroupContextValue {
20
+ value: Accessor<string[]>;
21
+ setValue: (value: string[]) => void;
22
+ multiple: Accessor<boolean>;
23
+ disabled: Accessor<boolean>;
24
+ orientation: Accessor<"horizontal" | "vertical">;
25
+ spacing: Accessor<number>;
26
+ variant: Accessor<"default" | "outline">;
27
+ size: Accessor<"default" | "sm" | "lg">;
28
+ }
@@ -0,0 +1,3 @@
1
+ export { ToggleGroup } from './ToggleGroup';
2
+ export { ToggleGroupContext, useToggleGroupContext, } from './ToggleGroup.context';
3
+ export type { ToggleGroupProps, ToggleGroupContextValue, } from './ToggleGroup.types';
@@ -0,0 +1,3 @@
1
+ import { JSX } from 'solid-js';
2
+ import { ToggleGroupItemProps } from './ToggleGroupItem.types';
3
+ export declare function ToggleGroupItem(props: ToggleGroupItemProps): JSX.Element;
@@ -0,0 +1,72 @@
1
+ import { clsx as e } from "../../../utils/clsx.js";
2
+ import { toggleVariants as t } from "../../toggle/Toggle/Toggle.styles.js";
3
+ import { useToggleGroupContext as n } from "../ToggleGroup/ToggleGroup.context.js";
4
+ import { delegateEvents as r, insert as i, mergeProps as a, spread as o, template as s } from "solid-js/web";
5
+ import { createMemo as c, splitProps as l } from "solid-js";
6
+ //#region src/components/toggle-group/ToggleGroupItem/ToggleGroupItem.tsx
7
+ var u = /*#__PURE__*/ s("<button data-slot=toggle-group-item>");
8
+ function d(r) {
9
+ let s = n("ToggleGroupItem"), [d, f] = l(r, [
10
+ "value",
11
+ "variant",
12
+ "size",
13
+ "class",
14
+ "disabled",
15
+ "onClick",
16
+ "onKeyDown",
17
+ "type"
18
+ ]), p = c(() => s.variant() || d.variant || "default"), m = c(() => s.size() || d.size || "default"), h = c(() => s.value().includes(d.value)), g = () => s.disabled() || !!d.disabled, _ = () => {
19
+ if (g()) return;
20
+ let e = s.value();
21
+ s.multiple() ? s.setValue(h() ? e.filter((e) => e !== d.value) : [...e, d.value]) : s.setValue([d.value]);
22
+ }, v = (e) => {
23
+ if (d.onKeyDown?.(e), e.defaultPrevented || g() || ![
24
+ "ArrowDown",
25
+ "ArrowRight",
26
+ "ArrowUp",
27
+ "ArrowLeft"
28
+ ].includes(e.key)) return;
29
+ e.preventDefault();
30
+ let t = e.currentTarget.closest("[data-slot=\"toggle-group\"]"), n = Array.from(t?.querySelectorAll("[data-slot=\"toggle-group-item\"]") ?? []);
31
+ n.length !== 0 && n[(n.indexOf(e.currentTarget) + (e.key === "ArrowDown" || e.key === "ArrowRight" ? 1 : -1) + n.length) % n.length].focus();
32
+ };
33
+ return (() => {
34
+ var n = u();
35
+ return n.$$keydown = v, n.$$click = (e) => {
36
+ d.onClick?.(e), e.defaultPrevented || _();
37
+ }, o(n, a({
38
+ get type() {
39
+ return d.type ?? "button";
40
+ },
41
+ get disabled() {
42
+ return g();
43
+ },
44
+ get "data-variant"() {
45
+ return p();
46
+ },
47
+ get "data-size"() {
48
+ return m();
49
+ },
50
+ get "data-spacing"() {
51
+ return s.spacing();
52
+ },
53
+ get "aria-pressed"() {
54
+ return h();
55
+ },
56
+ get "data-state"() {
57
+ return h() ? "on" : "off";
58
+ },
59
+ get class() {
60
+ return e("shrink-0 focus:z-10 focus-visible:z-10", t({
61
+ variant: p(),
62
+ size: m()
63
+ }), d.class);
64
+ }
65
+ }, f), !1, !0), i(n, () => r.children), n;
66
+ })();
67
+ }
68
+ r(["click", "keydown"]);
69
+ //#endregion
70
+ export { d as ToggleGroupItem };
71
+
72
+ //# sourceMappingURL=ToggleGroupItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleGroupItem.js","names":["createMemo","splitProps","JSX","clsx","toggleVariants","useToggleGroupContext","ToggleGroupItemProps","ToggleGroupItem","props","Element","ctx","local","rest","variant","size","pressed","value","includes","disabled","select","current","multiple","setValue","filter","onKeyDown","e","KeyboardEvent","defaultPrevented","directions","key","preventDefault","group","currentTarget","HTMLElement","closest","items","Array","from","querySelectorAll","length","currentIndex","indexOf","forward","delta","nextIndex","focus","_el$","_tmpl$","$$keydown","$$click","onClick","_$spread","_$mergeProps","type","data-variant","data-size","data-spacing","spacing","aria-pressed","data-state","class","_$insert","children","_$delegateEvents"],"sources":["../../../../src/components/toggle-group/ToggleGroupItem/ToggleGroupItem.tsx"],"sourcesContent":["import { createMemo, splitProps, type JSX } from \"solid-js\";\nimport { clsx } from \"~/utils\";\nimport { toggleVariants } from \"~/components/toggle/Toggle/Toggle.styles\";\nimport { useToggleGroupContext } from \"../ToggleGroup/ToggleGroup.context\";\nimport type { ToggleGroupItemProps } from \"./ToggleGroupItem.types\";\n\nexport function ToggleGroupItem(props: ToggleGroupItemProps): JSX.Element {\n const ctx = useToggleGroupContext(\"ToggleGroupItem\");\n\n const [local, rest] = splitProps(props, [\n \"value\",\n \"variant\",\n \"size\",\n \"class\",\n \"disabled\",\n \"onClick\",\n \"onKeyDown\",\n \"type\",\n ]);\n\n const variant = createMemo(() => ctx.variant() || local.variant || \"default\");\n const size = createMemo(() => ctx.size() || local.size || \"default\");\n const pressed = createMemo(() => ctx.value().includes(local.value));\n const disabled = () => ctx.disabled() || !!local.disabled;\n\n const select = () => {\n if (disabled()) return;\n const current = ctx.value();\n if (ctx.multiple()) {\n ctx.setValue(\n pressed()\n ? current.filter((value) => value !== local.value)\n : [...current, local.value],\n );\n } else {\n ctx.setValue([local.value]);\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n (local.onKeyDown as any)?.(e);\n if (e.defaultPrevented || disabled()) return;\n\n const directions = [\"ArrowDown\", \"ArrowRight\", \"ArrowUp\", \"ArrowLeft\"];\n if (!directions.includes(e.key)) return;\n e.preventDefault();\n\n const group = (e.currentTarget as HTMLElement).closest(\n '[data-slot=\"toggle-group\"]',\n );\n const items = Array.from(\n group?.querySelectorAll<HTMLElement>('[data-slot=\"toggle-group-item\"]') ??\n [],\n );\n if (items.length === 0) return;\n\n const currentIndex = items.indexOf(e.currentTarget as HTMLElement);\n const forward = e.key === \"ArrowDown\" || e.key === \"ArrowRight\";\n const delta = forward ? 1 : -1;\n const nextIndex = (currentIndex + delta + items.length) % items.length;\n items[nextIndex].focus();\n };\n\n return (\n <button\n type={(local.type as \"button\") ?? \"button\"}\n disabled={disabled()}\n data-slot=\"toggle-group-item\"\n data-variant={variant()}\n data-size={size()}\n data-spacing={ctx.spacing()}\n aria-pressed={pressed()}\n data-state={pressed() ? \"on\" : \"off\"}\n class={clsx(\n \"shrink-0 focus:z-10 focus-visible:z-10\",\n toggleVariants({ variant: variant(), size: size() }),\n local.class,\n )}\n onClick={(e) => {\n (local.onClick as any)?.(e);\n if (!e.defaultPrevented) select();\n }}\n onKeyDown={onKeyDown}\n {...rest}\n >\n {props.children}\n </button>\n );\n}\n"],"mappings":";;;;;;;AAMA,SAAgBO,EAAgBC,GAA0C;CACxE,IAAME,IAAML,EAAsB,iBAAiB,GAE7C,CAACM,GAAOC,KAAQX,EAAWO,GAAO;EACtC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAAM,CACP,GAEKK,IAAUb,QAAiBU,EAAIG,QAAQ,KAAKF,EAAME,WAAW,SAAS,GACtEC,IAAOd,QAAiBU,EAAII,KAAK,KAAKH,EAAMG,QAAQ,SAAS,GAC7DC,IAAUf,QAAiBU,EAAIM,MAAM,CAAC,CAACC,SAASN,EAAMK,KAAK,CAAC,GAC5DE,UAAiBR,EAAIQ,SAAS,KAAK,CAAC,CAACP,EAAMO,UAE3CC,UAAe;EACnB,IAAID,EAAS,GAAG;EAChB,IAAME,IAAUV,EAAIM,MAAM;EAC1B,AAAIN,EAAIW,SAAS,IACfX,EAAIY,SACFP,EAAQ,IACJK,EAAQG,QAAQP,MAAUA,MAAUL,EAAMK,KAAK,IAC/C,CAAC,GAAGI,GAAST,EAAMK,KAAK,CAC9B,IAEAN,EAAIY,SAAS,CAACX,EAAMK,KAAK,CAAC;CAE9B,GAEMQ,KAAaC,MAAqB;EAKtC,IAJA,EAAOD,YAAoBC,CAAC,GACxBA,EAAEE,oBAAoBT,EAAS,KAG/B,CAACU;GADe;GAAa;GAAc;GAAW;EACrDA,CAAAA,CAAWX,SAASQ,EAAEI,GAAG,GAAG;EACjCJ,EAAEK,eAAe;EAEjB,IAAMC,IAASN,EAAEO,cAA8BE,QAC7C,8BACF,GACMC,IAAQC,MAAMC,KAClBN,GAAOO,iBAA8B,mCAAiC,KACpE,CAAA,CACJ;EACIH,EAAMI,WAAW,KAMrBJ,GAJqBA,EAAMM,QAAQhB,EAAEO,aAGlBQ,KAFHf,EAAEI,QAAQ,eAAeJ,EAAEI,QAAQ,eAC3B,IAAI,MACcM,EAAMI,UAAUJ,EAAMI,OAChD,CAACM,MAAM;CACzB;CAEA,cAAA;EAAA,IAAAC,IAAAC,EAAA;EAsBmB,OAtBnBD,EAAAE,YAmBexB,GAASsB,EAAAG,WAJVxB,MAAM;GAEd,AADA,EAAOyB,UAAkBzB,CAAC,GACrBA,EAAEE,oBAAkBR,EAAO;EAClC,GAACgC,EAAAL,GAAAM,EAAA;GAAA,IAhBDC,OAAI;IAAA,OAAG1C,EAAM0C,QAAqB;GAAQ;GAAA,IAC1CnC,WAAQ;IAAA,OAAEA,EAAS;GAAC;GAAA,IAAA,iBAAA;IAAA,OAENL,EAAQ;GAAC;GAAA,IAAA,cAAA;IAAA,OACZC,EAAK;GAAC;GAAA,IAAA,iBAAA;IAAA,OACHJ,EAAI+C,QAAQ;GAAC;GAAA,IAAA,iBAAA;IAAA,OACb1C,EAAQ;GAAC;GAAA,IAAA,eAAA;IAAA,OACXA,EAAQ,IAAI,OAAO;GAAK;GAAA,IAAA,QAAA;IAAA,OAC7BZ,EACL,0CACAC,EAAe;KAAES,SAASA,EAAQ;KAAGC,MAAMA,EAAK;IAAE,CAAC,GACnDH,EAAMiD,KACR;GAAC;EAAA,GAMGhD,CAAI,GAAA,IAAA,EAAA,GAAAiD,EAAAf,SAEPtC,EAAMsD,QAAQ,GAAAhB;CAAA,EAAA,CAAA;AAGrB;AAACiB,EAAA,CAAA,SAAA,SAAA,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import { ComponentProps } from 'solid-js';
3
+ import { toggleVariants } from '../../toggle/Toggle/Toggle.styles';
4
+ export interface ToggleGroupItemProps extends ComponentProps<"button">, VariantProps<typeof toggleVariants> {
5
+ /** 当前 item 的唯一值 */
6
+ value: string;
7
+ /** 默认从 ToggleGroup context 继承;可单独覆盖 */
8
+ variant?: "default" | "outline";
9
+ size?: "default" | "sm" | "lg";
10
+ }
@@ -0,0 +1,2 @@
1
+ export { ToggleGroupItem } from './ToggleGroupItem';
2
+ export type { ToggleGroupItemProps } from './ToggleGroupItem.types';
@@ -0,0 +1,4 @@
1
+ export { ToggleGroup } from './ToggleGroup';
2
+ export type { ToggleGroupProps, ToggleGroupContextValue } from './ToggleGroup';
3
+ export { ToggleGroupItem } from './ToggleGroupItem';
4
+ export type { ToggleGroupItemProps } from './ToggleGroupItem';
@@ -0,0 +1,3 @@
1
+ import { ToggleGroup as e } from "./ToggleGroup/ToggleGroup.js";
2
+ import { ToggleGroupItem as t } from "./ToggleGroupItem/ToggleGroupItem.js";
3
+ export { e as ToggleGroup, t as ToggleGroupItem };
@@ -1,70 +1,71 @@
1
- import { TooltipContext as e } from "./Tooltip.context.js";
2
- import { useTooltipGroupContext as t } from "../TooltipGroup/TooltipGroup.context.js";
3
- import { createComponent as n } from "solid-js/web";
4
- import { createEffect as r, createMemo as i, createSignal as a, createUniqueId as o, onCleanup as s } from "solid-js";
1
+ import { useTooltipProviderContext as e } from "../TooltipProvider/TooltipProvider.context.js";
2
+ import { TooltipContext as t } from "./Tooltip.context.js";
3
+ import { useTooltipGroupContext as n } from "../TooltipGroup/TooltipGroup.context.js";
4
+ import { createComponent as r } from "solid-js/web";
5
+ import { createEffect as i, createMemo as a, createSignal as o, createUniqueId as s, onCleanup as c } from "solid-js";
5
6
  //#region src/components/tooltip/Tooltip/Tooltip.tsx
6
- var c = 300, l = 150;
7
- function u(u) {
8
- let d = t(), [f, p] = a(u.defaultOpen ?? !1), m = i(() => u.open === void 0 ? f() : u.open), h = i(() => !!u.disabled), [g, _] = a(), [v, y] = a(), [b, x] = a(), [S, C] = a(!1), w = (e) => {
9
- u.open === void 0 && p(e), u.onOpenChange?.(e);
10
- }, T, E, D = () => {
11
- T !== void 0 && (window.clearTimeout(T), T = void 0), E !== void 0 && (window.clearTimeout(E), E = void 0);
12
- }, O = () => {
13
- if (D(), h() || m()) return;
14
- let e = d?.claim();
7
+ var l = 0, u = 150;
8
+ function d(d) {
9
+ let f = n(), p = e(), [m, h] = o(d.defaultOpen ?? !1), g = a(() => d.open === void 0 ? m() : d.open), _ = a(() => !!d.disabled), [v, y] = o(), [b, x] = o(), [S, C] = o(), [w, T] = o(!1), E = (e) => {
10
+ d.open === void 0 && h(e), d.onOpenChange?.(e);
11
+ }, D, O, k = () => {
12
+ D !== void 0 && (window.clearTimeout(D), D = void 0), O !== void 0 && (window.clearTimeout(O), O = void 0);
13
+ }, A = () => {
14
+ if (k(), _() || g()) return;
15
+ let e = f?.claim();
15
16
  if (e) {
16
- x(e), w(!0);
17
+ C(e), E(!0);
17
18
  return;
18
19
  }
19
- T = window.setTimeout(() => w(!0), u.openDelay ?? c);
20
- }, k = () => {
21
- D(), E = window.setTimeout(() => w(!1), u.closeDelay ?? l);
22
- }, A = () => {
23
- h() || (D(), w(!0));
20
+ D = window.setTimeout(() => E(!0), d.openDelay ?? p?.delay() ?? l);
24
21
  }, j = () => {
25
- D(), w(!1);
22
+ k(), O = window.setTimeout(() => E(!1), d.closeDelay ?? p?.closeDelay() ?? u);
26
23
  }, M = () => {
27
- C(!0), D(), w(!1);
24
+ _() || (k(), E(!0));
28
25
  }, N = () => {
29
- E !== void 0 && (window.clearTimeout(E), E = void 0);
26
+ k(), E(!1);
27
+ }, P = () => {
28
+ T(!0), k(), E(!1);
29
+ }, F = () => {
30
+ O !== void 0 && (window.clearTimeout(O), O = void 0);
30
31
  };
31
- s(D), r(() => {
32
- if (!d || !m()) return;
33
- let e = d.registerActive({
34
- rect: () => v()?.getBoundingClientRect(),
35
- forceClose: M
32
+ c(k), i(() => {
33
+ if (!f || !g()) return;
34
+ let e = f.registerActive({
35
+ rect: () => b()?.getBoundingClientRect(),
36
+ forceClose: P
36
37
  });
37
- s(e);
38
+ c(e);
38
39
  });
39
- let P = {
40
- open: m,
41
- disabled: h,
42
- contentId: `tooltip-${o()}`,
43
- reference: g,
44
- setReference: _,
45
- floating: v,
46
- setFloating: y,
47
- requestOpen: O,
48
- requestClose: k,
49
- openImmediate: A,
50
- closeImmediate: j,
51
- keepOpen: N,
52
- pendingSlideFrom: b,
53
- clearPendingSlideFrom: () => x(void 0),
54
- suppressExitAnimation: S,
40
+ let I = {
41
+ open: g,
42
+ disabled: _,
43
+ contentId: `tooltip-${s()}`,
44
+ reference: v,
45
+ setReference: y,
46
+ floating: b,
47
+ setFloating: x,
48
+ requestOpen: A,
49
+ requestClose: j,
50
+ openImmediate: M,
51
+ closeImmediate: N,
52
+ keepOpen: F,
53
+ pendingSlideFrom: S,
54
+ clearPendingSlideFrom: () => C(void 0),
55
+ suppressExitAnimation: w,
55
56
  consumeSuppressExitAnimation: () => {
56
- let e = S();
57
- return e && C(!1), e;
57
+ let e = w();
58
+ return e && T(!1), e;
58
59
  }
59
60
  };
60
- return n(e.Provider, {
61
- value: P,
61
+ return r(t.Provider, {
62
+ value: I,
62
63
  get children() {
63
- return u.children;
64
+ return d.children;
64
65
  }
65
66
  });
66
67
  }
67
68
  //#endregion
68
- export { u as Tooltip };
69
+ export { d as Tooltip };
69
70
 
70
71
  //# sourceMappingURL=Tooltip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.js","names":["createSignal","createMemo","createUniqueId","createEffect","onCleanup","JSX","TooltipContext","useTooltipGroupContext","TooltipContextValue","TooltipProps","Rect","DEFAULT_OPEN_DELAY","DEFAULT_CLOSE_DELAY","Tooltip","props","Element","group","internalOpen","setInternalOpen","defaultOpen","open","undefined","disabled","reference","setReference","floating","setFloating","HTMLElement","pendingSlideFrom","setPendingSlideFrom","suppressExitAnimation","setSuppressExitAnimation","commit","next","onOpenChange","openTimer","closeTimer","clearTimers","window","clearTimeout","requestOpen","claimedRect","claim","setTimeout","openDelay","requestClose","closeDelay","openImmediate","closeImmediate","forceCloseForGroup","keepOpen","unregister","registerActive","rect","getBoundingClientRect","forceClose","contentId","ctx","clearPendingSlideFrom","consumeSuppressExitAnimation","value","_$createComponent","Provider","children"],"sources":["../../../../src/components/tooltip/Tooltip/Tooltip.tsx"],"sourcesContent":["import {\n createSignal,\n createMemo,\n createUniqueId,\n createEffect,\n onCleanup,\n type JSX,\n} from \"solid-js\";\nimport { TooltipContext } from \"./Tooltip.context\";\nimport { useTooltipGroupContext } from \"../TooltipGroup/TooltipGroup.context\";\nimport type { TooltipContextValue, TooltipProps } from \"./Tooltip.types\";\nimport type { Rect } from \"~/lib\";\n\nconst DEFAULT_OPEN_DELAY = 300;\nconst DEFAULT_CLOSE_DELAY = 150;\n\n/**\n * Tooltip 根组件:不渲染任何 DOM,只负责状态管理 + 提供 context。\n * 真正的展示交给 <TooltipTrigger>/<TooltipContent>/<TooltipArrow>。\n *\n * 如果外面包了 <TooltipGroup>,组内相邻 trigger 之间切换 hover 会跳过\n * openDelay,并触发\"从旧位置滑到新位置\"的过渡(细节见 TooltipGroup.context.ts)。\n *\n * @example\n * ```tsx\n * <Tooltip openDelay={300}>\n * <TooltipTrigger>悬停我</TooltipTrigger>\n * <TooltipContent>\n * 提示内容\n * <TooltipArrow />\n * </TooltipContent>\n * </Tooltip>\n * ```\n */\nexport function Tooltip(props: TooltipProps): JSX.Element {\n const group = useTooltipGroupContext(); // undefined 是正常情况,代表没用 TooltipGroup\n\n const [internalOpen, setInternalOpen] = createSignal(\n props.defaultOpen ?? false,\n );\n const open = createMemo(() =>\n props.open !== undefined ? props.open : internalOpen(),\n );\n const disabled = createMemo(() => !!props.disabled);\n\n const [reference, setReference] = createSignal<Element>();\n const [floating, setFloating] = createSignal<HTMLElement>();\n const [pendingSlideFrom, setPendingSlideFrom] = createSignal<Rect>();\n const [suppressExitAnimation, setSuppressExitAnimation] = createSignal(false);\n\n const commit = (next: boolean) => {\n if (props.open === undefined) setInternalOpen(next);\n props.onOpenChange?.(next);\n };\n\n // 用 window.setTimeout/clearTimeout(而不是裸的全局 setTimeout)显式拿到\n // DOM lib 的重载(返回 number),避免和 @types/node 的 NodeJS.Timeout 重载冲突。\n let openTimer: number | undefined;\n let closeTimer: number | undefined;\n\n const clearTimers = () => {\n if (openTimer !== undefined) {\n window.clearTimeout(openTimer);\n openTimer = undefined;\n }\n if (closeTimer !== undefined) {\n window.clearTimeout(closeTimer);\n closeTimer = undefined;\n }\n };\n\n const requestOpen = () => {\n clearTimers();\n if (disabled() || open()) return;\n\n // 组内抢占:如果当前组里已经有一个活跃的 tooltip(哪怕它还在自己的\n // closeDelay 倒计时里,还没真正关闭),claim() 会立即强制关闭它、\n // 把它此刻的矩形要回来——这里直接跳过 openDelay,走\"滑入\"路径。\n const claimedRect = group?.claim();\n if (claimedRect) {\n setPendingSlideFrom(claimedRect);\n commit(true);\n return;\n }\n\n openTimer = window.setTimeout(\n () => commit(true),\n props.openDelay ?? DEFAULT_OPEN_DELAY,\n );\n };\n\n const requestClose = () => {\n clearTimers();\n closeTimer = window.setTimeout(\n () => commit(false),\n props.closeDelay ?? DEFAULT_CLOSE_DELAY,\n );\n };\n\n const openImmediate = () => {\n if (disabled()) return;\n clearTimers();\n commit(true);\n };\n\n const closeImmediate = () => {\n clearTimers();\n commit(false);\n };\n\n /**\n * 专门给 <TooltipGroup> 抢占用的关闭方式:和 closeImmediate 的区别是,\n * 这里会额外标记 suppressExitAnimation,告诉 TooltipContent 的 Presence\n * 逻辑跳过退场动画、立即卸载——因为这次关闭是\"被新 tooltip 取代\",而不是\n * 用户主动关闭,旧的应该立刻让位,不该和正在滑入的新 tooltip 同时可见。\n * Escape/blur 等正常关闭场景依然走 closeImmediate,退场动画不受影响。\n */\n const forceCloseForGroup = () => {\n setSuppressExitAnimation(true);\n clearTimers();\n commit(false);\n };\n\n const keepOpen = () => {\n if (closeTimer !== undefined) {\n window.clearTimeout(closeTimer);\n closeTimer = undefined;\n }\n };\n\n onCleanup(clearTimers);\n\n // 打开期间把自己登记成\"组内当前活跃的 tooltip\",供其他 trigger 打开时\n // claim 走(触发平移过渡)。关闭或卸载时自动取消登记。\n createEffect(() => {\n if (!group || !open()) return;\n const unregister = group.registerActive({\n rect: () => floating()?.getBoundingClientRect(),\n forceClose: forceCloseForGroup,\n });\n onCleanup(unregister);\n });\n\n const contentId = `tooltip-${createUniqueId()}`;\n\n const ctx: TooltipContextValue = {\n open,\n disabled,\n contentId,\n reference,\n setReference,\n floating,\n setFloating,\n requestOpen,\n requestClose,\n openImmediate,\n closeImmediate,\n keepOpen,\n pendingSlideFrom,\n clearPendingSlideFrom: () => setPendingSlideFrom(undefined),\n suppressExitAnimation,\n consumeSuppressExitAnimation: () => {\n const value = suppressExitAnimation();\n if (value) setSuppressExitAnimation(false);\n return value;\n },\n };\n\n return (\n <TooltipContext.Provider value={ctx}>\n {props.children}\n </TooltipContext.Provider>\n );\n}\n"],"mappings":";;;;;AAaA,IAAMW,IAAqB,KACrBC,IAAsB;AAoB5B,SAAgBC,EAAQC,GAAkC;CACxD,IAAME,IAAQT,EAAuB,GAE/B,CAACU,GAAcC,KAAmBlB,EACtCc,EAAMK,eAAe,EACvB,GACMC,IAAOnB,QACXa,EAAMM,SAASC,KAAAA,IAAyBJ,EAAa,IAA1BH,EAAMM,IACnC,GACME,IAAWrB,QAAiB,CAAC,CAACa,EAAMQ,QAAQ,GAE5C,CAACC,GAAWC,KAAgBxB,EAAsB,GAClD,CAACyB,GAAUC,KAAe1B,EAA0B,GACpD,CAAC4B,GAAkBC,KAAuB7B,EAAmB,GAC7D,CAAC8B,GAAuBC,KAA4B/B,EAAa,EAAK,GAEtEgC,KAAUC,MAAkB;EAEhCnB,AADIA,EAAMM,SAASC,KAAAA,KAAWH,EAAgBe,CAAI,GAClDnB,EAAMoB,eAAeD,CAAI;CAC3B,GAIIE,GACAC,GAEEC,UAAoB;EAKxB,AAJIF,MAAcd,KAAAA,MAChBiB,OAAOC,aAAaJ,CAAS,GAC7BA,IAAYd,KAAAA,IAEVe,MAAef,KAAAA,MACjBiB,OAAOC,aAAaH,CAAU,GAC9BA,IAAaf,KAAAA;CAEjB,GAEMmB,UAAoB;EAExB,IADAH,EAAY,GACRf,EAAS,KAAKF,EAAK,GAAG;EAK1B,IAAMqB,IAAczB,GAAO0B,MAAM;EACjC,IAAID,GAAa;GAEfT,AADAH,EAAoBY,CAAW,GAC/BT,EAAO,EAAI;GACX;EACF;EAEAG,IAAYG,OAAOK,iBACXX,EAAO,EAAI,GACjBlB,EAAM8B,aAAajC,CACrB;CACF,GAEMkC,UAAqB;EAEzBT,AADAC,EAAY,GACZD,IAAaE,OAAOK,iBACZX,EAAO,EAAK,GAClBlB,EAAMgC,cAAclC,CACtB;CACF,GAEMmC,UAAsB;EACtBzB,EAAS,MACbe,EAAY,GACZL,EAAO,EAAI;CACb,GAEMgB,UAAuB;EAE3BhB,AADAK,EAAY,GACZL,EAAO,EAAK;CACd,GASMiB,UAA2B;EAG/BjB,AAFAD,EAAyB,EAAI,GAC7BM,EAAY,GACZL,EAAO,EAAK;CACd,GAEMkB,UAAiB;EACrB,AAAId,MAAef,KAAAA,MACjBiB,OAAOC,aAAaH,CAAU,GAC9BA,IAAaf,KAAAA;CAEjB;CAMAlB,AAJAC,EAAUiC,CAAW,GAIrBlC,QAAmB;EACjB,IAAI,CAACa,KAAS,CAACI,EAAK,GAAG;EACvB,IAAM+B,IAAanC,EAAMoC,eAAe;GACtCC,YAAY5B,EAAS,CAAC,EAAE6B,sBAAsB;GAC9CC,YAAYN;EACd,CAAC;EACD7C,EAAU+C,CAAU;CACtB,CAAC;CAID,IAAMM,IAA2B;EAC/BrC;EACAE;EACAkC,WAAAA,WAL2BtD,EAAe;EAM1CqB;EACAC;EACAC;EACAC;EACAc;EACAK;EACAE;EACAC;EACAE;EACAtB;EACA8B,6BAA6B7B,EAAoBR,KAAAA,CAAS;EAC1DS;EACA6B,oCAAoC;GAClC,IAAMC,IAAQ9B,EAAsB;GAEpC,OADI8B,KAAO7B,EAAyB,EAAK,GAClC6B;EACT;CACF;CAEA,OAAAC,EACGvD,EAAewD,UAAQ;EAACF,OAAOH;EAAG,IAAAM,WAAA;GAAA,OAChCjD,EAAMiD;EAAQ;CAAA,CAAA;AAGrB"}
1
+ {"version":3,"file":"Tooltip.js","names":["createSignal","createMemo","createUniqueId","createEffect","onCleanup","JSX","TooltipContext","useTooltipProviderContext","useTooltipGroupContext","TooltipContextValue","TooltipProps","Rect","DEFAULT_OPEN_DELAY","DEFAULT_CLOSE_DELAY","Tooltip","props","Element","group","provider","internalOpen","setInternalOpen","defaultOpen","open","undefined","disabled","reference","setReference","floating","setFloating","HTMLElement","pendingSlideFrom","setPendingSlideFrom","suppressExitAnimation","setSuppressExitAnimation","commit","next","onOpenChange","openTimer","closeTimer","clearTimers","window","clearTimeout","requestOpen","claimedRect","claim","setTimeout","openDelay","delay","requestClose","closeDelay","openImmediate","closeImmediate","forceCloseForGroup","keepOpen","unregister","registerActive","rect","getBoundingClientRect","forceClose","contentId","ctx","clearPendingSlideFrom","consumeSuppressExitAnimation","value","_$createComponent","Provider","children"],"sources":["../../../../src/components/tooltip/Tooltip/Tooltip.tsx"],"sourcesContent":["import {\n createSignal,\n createMemo,\n createUniqueId,\n createEffect,\n onCleanup,\n type JSX,\n} from \"solid-js\";\nimport { TooltipContext } from \"./Tooltip.context\";\nimport { useTooltipProviderContext } from \"../TooltipProvider/TooltipProvider.context\";\nimport { useTooltipGroupContext } from \"../TooltipGroup/TooltipGroup.context\";\nimport type { TooltipContextValue, TooltipProps } from \"./Tooltip.types\";\nimport type { Rect } from \"~/lib\";\n\nconst DEFAULT_OPEN_DELAY = 0;\nconst DEFAULT_CLOSE_DELAY = 150;\n\n/**\n * Tooltip 根组件:不渲染任何 DOM,只负责状态管理 + 提供 context。\n * 真正的展示交给 <TooltipTrigger>/<TooltipContent>/<TooltipArrow>。\n *\n * 如果外面包了 <TooltipGroup>,组内相邻 trigger 之间切换 hover 会跳过\n * openDelay,并触发\"从旧位置滑到新位置\"的过渡(细节见 TooltipGroup.context.ts)。\n *\n * @example\n * ```tsx\n * <Tooltip openDelay={300}>\n * <TooltipTrigger>悬停我</TooltipTrigger>\n * <TooltipContent>\n * 提示内容\n * <TooltipArrow />\n * </TooltipContent>\n * </Tooltip>\n * ```\n */\nexport function Tooltip(props: TooltipProps): JSX.Element {\n const group = useTooltipGroupContext(); // undefined 是正常情况,代表没用 TooltipGroup\n const provider = useTooltipProviderContext();\n\n const [internalOpen, setInternalOpen] = createSignal(\n props.defaultOpen ?? false,\n );\n const open = createMemo(() =>\n props.open !== undefined ? props.open : internalOpen(),\n );\n const disabled = createMemo(() => !!props.disabled);\n\n const [reference, setReference] = createSignal<Element>();\n const [floating, setFloating] = createSignal<HTMLElement>();\n const [pendingSlideFrom, setPendingSlideFrom] = createSignal<Rect>();\n const [suppressExitAnimation, setSuppressExitAnimation] = createSignal(false);\n\n const commit = (next: boolean) => {\n if (props.open === undefined) setInternalOpen(next);\n props.onOpenChange?.(next);\n };\n\n // 用 window.setTimeout/clearTimeout(而不是裸的全局 setTimeout)显式拿到\n // DOM lib 的重载(返回 number),避免和 @types/node 的 NodeJS.Timeout 重载冲突。\n let openTimer: number | undefined;\n let closeTimer: number | undefined;\n\n const clearTimers = () => {\n if (openTimer !== undefined) {\n window.clearTimeout(openTimer);\n openTimer = undefined;\n }\n if (closeTimer !== undefined) {\n window.clearTimeout(closeTimer);\n closeTimer = undefined;\n }\n };\n\n const requestOpen = () => {\n clearTimers();\n if (disabled() || open()) return;\n\n // 组内抢占:如果当前组里已经有一个活跃的 tooltip(哪怕它还在自己的\n // closeDelay 倒计时里,还没真正关闭),claim() 会立即强制关闭它、\n // 把它此刻的矩形要回来——这里直接跳过 openDelay,走\"滑入\"路径。\n const claimedRect = group?.claim();\n if (claimedRect) {\n setPendingSlideFrom(claimedRect);\n commit(true);\n return;\n }\n\n openTimer = window.setTimeout(\n () => commit(true),\n props.openDelay ?? provider?.delay() ?? DEFAULT_OPEN_DELAY,\n );\n };\n\n const requestClose = () => {\n clearTimers();\n closeTimer = window.setTimeout(\n () => commit(false),\n props.closeDelay ?? provider?.closeDelay() ?? DEFAULT_CLOSE_DELAY,\n );\n };\n\n const openImmediate = () => {\n if (disabled()) return;\n clearTimers();\n commit(true);\n };\n\n const closeImmediate = () => {\n clearTimers();\n commit(false);\n };\n\n /**\n * 专门给 <TooltipGroup> 抢占用的关闭方式:和 closeImmediate 的区别是,\n * 这里会额外标记 suppressExitAnimation,告诉 TooltipContent 的 Presence\n * 逻辑跳过退场动画、立即卸载——因为这次关闭是\"被新 tooltip 取代\",而不是\n * 用户主动关闭,旧的应该立刻让位,不该和正在滑入的新 tooltip 同时可见。\n * Escape/blur 等正常关闭场景依然走 closeImmediate,退场动画不受影响。\n */\n const forceCloseForGroup = () => {\n setSuppressExitAnimation(true);\n clearTimers();\n commit(false);\n };\n\n const keepOpen = () => {\n if (closeTimer !== undefined) {\n window.clearTimeout(closeTimer);\n closeTimer = undefined;\n }\n };\n\n onCleanup(clearTimers);\n\n // 打开期间把自己登记成\"组内当前活跃的 tooltip\",供其他 trigger 打开时\n // claim 走(触发平移过渡)。关闭或卸载时自动取消登记。\n createEffect(() => {\n if (!group || !open()) return;\n const unregister = group.registerActive({\n rect: () => floating()?.getBoundingClientRect(),\n forceClose: forceCloseForGroup,\n });\n onCleanup(unregister);\n });\n\n const contentId = `tooltip-${createUniqueId()}`;\n\n const ctx: TooltipContextValue = {\n open,\n disabled,\n contentId,\n reference,\n setReference,\n floating,\n setFloating,\n requestOpen,\n requestClose,\n openImmediate,\n closeImmediate,\n keepOpen,\n pendingSlideFrom,\n clearPendingSlideFrom: () => setPendingSlideFrom(undefined),\n suppressExitAnimation,\n consumeSuppressExitAnimation: () => {\n const value = suppressExitAnimation();\n if (value) setSuppressExitAnimation(false);\n return value;\n },\n };\n\n return (\n <TooltipContext.Provider value={ctx}>\n {props.children}\n </TooltipContext.Provider>\n );\n}\n"],"mappings":";;;;;;AAcA,IAAMY,IAAqB,GACrBC,IAAsB;AAoB5B,SAAgBC,EAAQC,GAAkC;CACxD,IAAME,IAAQT,EAAuB,GAC/BU,IAAWX,EAA0B,GAErC,CAACY,GAAcC,KAAmBpB,EACtCe,EAAMM,eAAe,EACvB,GACMC,IAAOrB,QACXc,EAAMO,SAASC,KAAAA,IAAyBJ,EAAa,IAA1BJ,EAAMO,IACnC,GACME,IAAWvB,QAAiB,CAAC,CAACc,EAAMS,QAAQ,GAE5C,CAACC,GAAWC,KAAgB1B,EAAsB,GAClD,CAAC2B,GAAUC,KAAe5B,EAA0B,GACpD,CAAC8B,GAAkBC,KAAuB/B,EAAmB,GAC7D,CAACgC,GAAuBC,KAA4BjC,EAAa,EAAK,GAEtEkC,KAAUC,MAAkB;EAEhCpB,AADIA,EAAMO,SAASC,KAAAA,KAAWH,EAAgBe,CAAI,GAClDpB,EAAMqB,eAAeD,CAAI;CAC3B,GAIIE,GACAC,GAEEC,UAAoB;EAKxB,AAJIF,MAAcd,KAAAA,MAChBiB,OAAOC,aAAaJ,CAAS,GAC7BA,IAAYd,KAAAA,IAEVe,MAAef,KAAAA,MACjBiB,OAAOC,aAAaH,CAAU,GAC9BA,IAAaf,KAAAA;CAEjB,GAEMmB,UAAoB;EAExB,IADAH,EAAY,GACRf,EAAS,KAAKF,EAAK,GAAG;EAK1B,IAAMqB,IAAc1B,GAAO2B,MAAM;EACjC,IAAID,GAAa;GAEfT,AADAH,EAAoBY,CAAW,GAC/BT,EAAO,EAAI;GACX;EACF;EAEAG,IAAYG,OAAOK,iBACXX,EAAO,EAAI,GACjBnB,EAAM+B,aAAa5B,GAAU6B,MAAM,KAAKnC,CAC1C;CACF,GAEMoC,UAAqB;EAEzBV,AADAC,EAAY,GACZD,IAAaE,OAAOK,iBACZX,EAAO,EAAK,GAClBnB,EAAMkC,cAAc/B,GAAU+B,WAAW,KAAKpC,CAChD;CACF,GAEMqC,UAAsB;EACtB1B,EAAS,MACbe,EAAY,GACZL,EAAO,EAAI;CACb,GAEMiB,UAAuB;EAE3BjB,AADAK,EAAY,GACZL,EAAO,EAAK;CACd,GASMkB,UAA2B;EAG/BlB,AAFAD,EAAyB,EAAI,GAC7BM,EAAY,GACZL,EAAO,EAAK;CACd,GAEMmB,UAAiB;EACrB,AAAIf,MAAef,KAAAA,MACjBiB,OAAOC,aAAaH,CAAU,GAC9BA,IAAaf,KAAAA;CAEjB;CAMApB,AAJAC,EAAUmC,CAAW,GAIrBpC,QAAmB;EACjB,IAAI,CAACc,KAAS,CAACK,EAAK,GAAG;EACvB,IAAMgC,IAAarC,EAAMsC,eAAe;GACtCC,YAAY7B,EAAS,CAAC,EAAE8B,sBAAsB;GAC9CC,YAAYN;EACd,CAAC;EACDhD,EAAUkD,CAAU;CACtB,CAAC;CAID,IAAMM,IAA2B;EAC/BtC;EACAE;EACAmC,WAAAA,WAL2BzD,EAAe;EAM1CuB;EACAC;EACAC;EACAC;EACAc;EACAM;EACAE;EACAC;EACAE;EACAvB;EACA+B,6BAA6B9B,EAAoBR,KAAAA,CAAS;EAC1DS;EACA8B,oCAAoC;GAClC,IAAMC,IAAQ/B,EAAsB;GAEpC,OADI+B,KAAO9B,EAAyB,EAAK,GAClC8B;EACT;CACF;CAEA,OAAAC,EACG1D,EAAe2D,UAAQ;EAACF,OAAOH;EAAG,IAAAM,WAAA;GAAA,OAChCnD,EAAMmD;EAAQ;CAAA,CAAA;AAGrB"}
@@ -1,34 +1,9 @@
1
1
  export interface TooltipArrowProps {
2
- /** 箭头沿 tooltip 边缘方向的长度(像素),默认 8 */
3
- width?: number;
4
- /** 箭头突出的深度(像素),默认 4 */
5
- height?: number;
6
- /**
7
- * 箭头颜色(Tailwind text-* class,因为 SVG 用 fill="currentColor")。
8
- * 不传的话默认跟 TooltipContent 的默认背景色一致;如果你自定义了
9
- * TooltipContent 的背景色,记得这里也传一个匹配的颜色,两者不会自动同步。
10
- */
11
2
  class?: string;
12
3
  }
13
4
  /**
14
- * 箭头组件,必须渲染在 <TooltipContent> 内部(依赖它的 context)。
15
- * 通过 context 拿到 arrow middleware 算出的偏移量,以及最终生效的 placement,
16
- * 从而知道该贴哪条边、三角形尖端朝哪个方向。
17
- *
18
- * 四个方向用四套独立坐标画三角形,而不是画一个形状再用 CSS rotate 复用——
19
- * 这是有意的:arrow middleware 用 el.offsetWidth/offsetHeight 判断"沿边长度",
20
- * 而 CSS transform 不会改变这两个值,如果靠 rotate(90deg) 让同一个 8x4 的形状
21
- * "看起来"变成 4x8,offsetWidth/offsetHeight 读到的还是旋转前的 8x4,
22
- * 会导致 left/right 方向的偏移计算对不上。直接让未旋转的 SVG 本身尺寸
23
- * 就随方向切换(沿边方向用 width,突出方向用 height),从根上避免这个偏差。
24
- *
25
- * 进出场动画是箭头自己独立播放的一份(data-state + animate-in/out),
26
- * 和 TooltipContent 内层元素用的是同一个 animationState 信号驱动,
27
- * 保证两者严格同步开始/结束——而不是让箭头被动继承内层元素的动画。
28
- * 后者看似更省事,但内层元素的 zoom-in-95 动画会给它加一个非 none 的
29
- * transform,CSS 规范规定这会让内层变成子元素新的"包含块",这和箭头
30
- * 故意跳过内层、以外层为基准定位的设计(避免触发滚动条那次的修复)相冲突,
31
- * 动画播放期间"父子两层谁负责定位"这个假设会变得不可靠,箭头容易之前观察到
32
- * "入场看起来比内容慢一拍"这类问题。独立播放同一份动画彻底避开这个耦合。
5
+ * 箭头组件,必须渲染在 <TooltipContent> 内部。
6
+ * 采用 shadcn Base UI 的定位方式:通过 data-side / data-align 和 CSS 变量
7
+ * 完成贴边与对齐,不手动计算 top/left。
33
8
  */
34
9
  export declare function TooltipArrow(props: TooltipArrowProps): import("solid-js").JSX.Element;
@@ -1,58 +1,26 @@
1
1
  import { clsx as e } from "../../../utils/clsx.js";
2
- import { useTooltipContentContext as t } from "../TooltipContent/TooltipContent.context.js";
3
- import { effect as n, setAttribute as r, style as i, template as a, use as o } from "solid-js/web";
2
+ import { getAlignment as t, getSide as n } from "../../../lib/positioner/core/placement.js";
3
+ import { useTooltipContentContext as r } from "../TooltipContent/TooltipContent.context.js";
4
+ import { className as i, effect as a, setAttribute as o, setStyleProperty as s, template as c, use as l } from "solid-js/web";
5
+ import { createMemo as u } from "solid-js";
4
6
  //#region src/components/tooltip/TooltipArrow/TooltipArrow.tsx
5
- var s = /*#__PURE__*/ a("<svg aria-hidden=true><polygon fill=currentColor>");
6
- function c(a) {
7
- let c = t("TooltipArrow"), l = () => a.width ?? 8, u = () => a.height ?? 4, d = () => c.placement().split("-")[0], f = () => d() === "top" || d() === "bottom", p = () => c.middlewareData().arrow, m = () => {
8
- let e = l(), t = u();
9
- switch (d()) {
10
- case "top": return `0,0 ${e},0 ${e / 2},${t}`;
11
- case "bottom": return `0,${t} ${e},${t} ${e / 2},0`;
12
- case "left": return `0,0 0,${e} ${t},${e / 2}`;
13
- default: return `${t},0 ${t},${e} 0,${e / 2}`;
14
- }
15
- }, h = () => {
16
- let e = u(), t = f() ? p()?.x ?? 0 : p()?.y ?? 0;
17
- switch (d()) {
18
- case "top": return {
19
- bottom: `-${e}px`,
20
- left: `${t}px`
21
- };
22
- case "bottom": return {
23
- top: `-${e}px`,
24
- left: `${t}px`
25
- };
26
- case "left": return {
27
- right: `-${e}px`,
28
- top: `${t}px`
29
- };
30
- default: return {
31
- left: `-${e}px`,
32
- top: `${t}px`
33
- };
34
- }
35
- };
7
+ var d = /*#__PURE__*/ c("<div aria-hidden=true>");
8
+ function f(c) {
9
+ let f = r("TooltipArrow"), p = u(() => n(f.placement())), m = u(() => t(f.placement()) ?? "center"), h = () => f.reference?.()?.getBoundingClientRect().width ?? 0;
36
10
  return (() => {
37
- var t = s(), d = t.firstChild, p = c.setArrowElement;
38
- return typeof p == "function" ? o(p, t) : c.setArrowElement = t, n((n) => {
39
- var o = f() ? l() : u(), s = f() ? u() : l(), p = f() ? `0 0 ${l()} ${u()}` : `0 0 ${u()} ${l()}`, g = c.animationState(), _ = {
40
- position: "absolute",
41
- ...h()
42
- }, v = e("data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95", "text-foreground", a.class), y = m();
43
- return o !== n.e && r(t, "width", n.e = o), s !== n.t && r(t, "height", n.t = s), p !== n.a && r(t, "viewBox", n.a = p), g !== n.o && r(t, "data-state", n.o = g), n.i = i(t, _, n.i), v !== n.n && r(t, "class", n.n = v), y !== n.s && r(d, "points", n.s = y), n;
11
+ var t = d(), n = f.setArrowElement;
12
+ return typeof n == "function" ? l(n, t) : f.setArrowElement = t, a((n) => {
13
+ var r = p(), a = m(), l = `${h() / 2}px`, u = e("absolute size-2.5 z-50 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs bg-foreground fill-foreground", "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", c.class);
14
+ return r !== n.e && o(t, "data-side", n.e = r), a !== n.t && o(t, "data-align", n.t = a), l !== n.a && s(t, "--arrow-offset", n.a = l), u !== n.o && i(t, n.o = u), n;
44
15
  }, {
45
16
  e: void 0,
46
17
  t: void 0,
47
18
  a: void 0,
48
- o: void 0,
49
- i: void 0,
50
- n: void 0,
51
- s: void 0
19
+ o: void 0
52
20
  }), t;
53
21
  })();
54
22
  }
55
23
  //#endregion
56
- export { c as TooltipArrow };
24
+ export { f as TooltipArrow };
57
25
 
58
26
  //# sourceMappingURL=TooltipArrow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TooltipArrow.js","names":["clsx","useTooltipContentContext","TooltipArrowProps","width","height","class","TooltipArrow","props","ctx","alongLen","protrusion","side","placement","split","isVertical","arrowData","middlewareData","arrow","x","y","points","a","p","positionStyle","crossOffset","bottom","left","top","right","_el$","_tmpl$","_el$2","firstChild","_ref$","setArrowElement","_$use","_$effect","_p$","_v$","_v$2","_v$3","_v$4","animationState","_v$5","position","_v$6","_v$7","e","_$setAttribute","t","o","i","_$style","n","s","undefined"],"sources":["../../../../src/components/tooltip/TooltipArrow/TooltipArrow.tsx"],"sourcesContent":["import { clsx } from \"~/utils\";\nimport { useTooltipContentContext } from \"../TooltipContent/TooltipContent.context\";\n\nexport interface TooltipArrowProps {\n /** 箭头沿 tooltip 边缘方向的长度(像素),默认 8 */\n width?: number;\n /** 箭头突出的深度(像素),默认 4 */\n height?: number;\n /**\n * 箭头颜色(Tailwind text-* class,因为 SVG 用 fill=\"currentColor\")。\n * 不传的话默认跟 TooltipContent 的默认背景色一致;如果你自定义了\n * TooltipContent 的背景色,记得这里也传一个匹配的颜色,两者不会自动同步。\n */\n class?: string;\n}\n\n/**\n * 箭头组件,必须渲染在 <TooltipContent> 内部(依赖它的 context)。\n * 通过 context 拿到 arrow middleware 算出的偏移量,以及最终生效的 placement,\n * 从而知道该贴哪条边、三角形尖端朝哪个方向。\n *\n * 四个方向用四套独立坐标画三角形,而不是画一个形状再用 CSS rotate 复用——\n * 这是有意的:arrow middleware 用 el.offsetWidth/offsetHeight 判断\"沿边长度\",\n * 而 CSS transform 不会改变这两个值,如果靠 rotate(90deg) 让同一个 8x4 的形状\n * \"看起来\"变成 4x8,offsetWidth/offsetHeight 读到的还是旋转前的 8x4,\n * 会导致 left/right 方向的偏移计算对不上。直接让未旋转的 SVG 本身尺寸\n * 就随方向切换(沿边方向用 width,突出方向用 height),从根上避免这个偏差。\n *\n * 进出场动画是箭头自己独立播放的一份(data-state + animate-in/out),\n * 和 TooltipContent 内层元素用的是同一个 animationState 信号驱动,\n * 保证两者严格同步开始/结束——而不是让箭头被动继承内层元素的动画。\n * 后者看似更省事,但内层元素的 zoom-in-95 动画会给它加一个非 none 的\n * transform,CSS 规范规定这会让内层变成子元素新的\"包含块\",这和箭头\n * 故意跳过内层、以外层为基准定位的设计(避免触发滚动条那次的修复)相冲突,\n * 动画播放期间\"父子两层谁负责定位\"这个假设会变得不可靠,箭头容易之前观察到\n * \"入场看起来比内容慢一拍\"这类问题。独立播放同一份动画彻底避开这个耦合。\n */\nexport function TooltipArrow(props: TooltipArrowProps) {\n const ctx = useTooltipContentContext(\"TooltipArrow\");\n\n const alongLen = () => props.width ?? 8;\n const protrusion = () => props.height ?? 4;\n\n const side = () =>\n ctx.placement().split(\"-\")[0] as \"top\" | \"bottom\" | \"left\" | \"right\";\n const isVertical = () => side() === \"top\" || side() === \"bottom\";\n\n const arrowData = () =>\n ctx.middlewareData().arrow as { x?: number; y?: number } | undefined;\n\n const points = () => {\n const a = alongLen();\n const p = protrusion();\n switch (side()) {\n case \"top\":\n return `0,0 ${a},0 ${a / 2},${p}`; // 尖端朝下,指向下方的 trigger\n case \"bottom\":\n return `0,${p} ${a},${p} ${a / 2},0`; // 尖端朝上\n case \"left\":\n return `0,0 0,${a} ${p},${a / 2}`; // 尖端朝右\n default:\n return `${p},0 ${p},${a} 0,${a / 2}`; // 尖端朝左\n }\n };\n\n const positionStyle = () => {\n const p = protrusion();\n const crossOffset = isVertical()\n ? (arrowData()?.x ?? 0)\n : (arrowData()?.y ?? 0);\n switch (side()) {\n case \"top\":\n return { bottom: `-${p}px`, left: `${crossOffset}px` };\n case \"bottom\":\n return { top: `-${p}px`, left: `${crossOffset}px` };\n case \"left\":\n return { right: `-${p}px`, top: `${crossOffset}px` };\n default:\n return { left: `-${p}px`, top: `${crossOffset}px` };\n }\n };\n\n return (\n <svg\n ref={ctx.setArrowElement}\n width={isVertical() ? alongLen() : protrusion()}\n height={isVertical() ? protrusion() : alongLen()}\n viewBox={\n isVertical()\n ? `0 0 ${alongLen()} ${protrusion()}`\n : `0 0 ${protrusion()} ${alongLen()}`\n }\n data-state={ctx.animationState()}\n style={{ position: \"absolute\", ...positionStyle() }}\n class={clsx(\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"text-foreground\",\n props.class,\n )}\n aria-hidden=\"true\"\n >\n <polygon points={points()} fill=\"currentColor\" />\n </svg>\n );\n}\n"],"mappings":";;;;;AAqCA,SAAgBM,EAAaC,GAA0B;CACrD,IAAMC,IAAMP,EAAyB,cAAc,GAE7CQ,UAAiBF,EAAMJ,SAAS,GAChCO,UAAmBH,EAAMH,UAAU,GAEnCO,UACJH,EAAII,UAAU,CAAC,CAACC,MAAM,GAAG,CAAC,CAAC,IACvBC,UAAmBH,EAAK,MAAM,SAASA,EAAK,MAAM,UAElDI,UACJP,EAAIQ,eAAe,CAAC,CAACC,OAEjBG,UAAe;EACnB,IAAMC,IAAIZ,EAAS,GACba,IAAIZ,EAAW;EACrB,QAAQC,EAAK,GAAb;GACE,KAAK,OACH,OAAO,OAAOU,EAAC,KAAMA,IAAI,EAAC,GAAIC;GAChC,KAAK,UACH,OAAO,KAAKA,EAAC,GAAID,EAAC,GAAIC,EAAC,GAAID,IAAI,EAAC;GAClC,KAAK,QACH,OAAO,SAASA,EAAC,GAAIC,EAAC,GAAID,IAAI;GAChC,SACE,OAAO,GAAGC,EAAC,KAAMA,EAAC,GAAID,EAAC,KAAMA,IAAI;EACrC;CACF,GAEME,UAAsB;EAC1B,IAAMD,IAAIZ,EAAW,GACfc,IAAcV,EAAW,IAC1BC,EAAU,CAAC,EAAEG,KAAK,IAClBH,EAAU,CAAC,EAAEI,KAAK;EACvB,QAAQR,EAAK,GAAb;GACE,KAAK,OACH,OAAO;IAAEc,QAAQ,IAAIH,EAAC;IAAMI,MAAM,GAAGF,EAAW;GAAK;GACvD,KAAK,UACH,OAAO;IAAEG,KAAK,IAAIL,EAAC;IAAMI,MAAM,GAAGF,EAAW;GAAK;GACpD,KAAK,QACH,OAAO;IAAEI,OAAO,IAAIN,EAAC;IAAMK,KAAK,GAAGH,EAAW;GAAK;GACrD,SACE,OAAO;IAAEE,MAAM,IAAIJ,EAAC;IAAMK,KAAK,GAAGH,EAAW;GAAK;EACtD;CACF;CAEA,cAAA;EAAA,IAAAK,IAAAC,EAAA,GAAAC,IAAAF,EAAAG,YAAAC,IAESzB,EAAI0B;EAiBgB,OAjBD,OAAAD,KAAA,aAAAE,EAAAF,GAAAJ,CAAA,IAAnBrB,EAAI0B,kBAAeL,GAAAO,GAAAC,MAAA;GAAA,IAAAC,IACjBxB,EAAW,IAAIL,EAAS,IAAIC,EAAW,GAAC6B,IACvCzB,EAAW,IAAIJ,EAAW,IAAID,EAAS,GAAC+B,IAE9C1B,EAAW,IACP,OAAOL,EAAS,EAAC,GAAIC,EAAW,MAChC,OAAOA,EAAW,EAAC,GAAID,EAAS,KAAGgC,IAE7BjC,EAAIkC,eAAe,GAACC,IACzB;IAAEC,UAAU;IAAY,GAAGrB,EAAc;GAAE,GAACsB,IAC5C7C,EACL,wLACA,mBACAO,EAAMF,KACR,GAACyC,IAGgB1B,EAAO;GAAC,OAAAkB,MAAAD,EAAAU,KAAAC,EAAAnB,GAAA,SAAAQ,EAAAU,IAAAT,CAAA,GAAAC,MAAAF,EAAAY,KAAAD,EAAAnB,GAAA,UAAAQ,EAAAY,IAAAV,CAAA,GAAAC,MAAAH,EAAAhB,KAAA2B,EAAAnB,GAAA,WAAAQ,EAAAhB,IAAAmB,CAAA,GAAAC,MAAAJ,EAAAa,KAAAF,EAAAnB,GAAA,cAAAQ,EAAAa,IAAAT,CAAA,GAAAJ,EAAAc,IAAAC,EAAAvB,GAAAc,GAAAN,EAAAc,CAAA,GAAAN,MAAAR,EAAAgB,KAAAL,EAAAnB,GAAA,SAAAQ,EAAAgB,IAAAR,CAAA,GAAAC,MAAAT,EAAAiB,KAAAN,EAAAjB,GAAA,UAAAM,EAAAiB,IAAAR,CAAA,GAAAT;EAAA,GAAA;GAAAU,GAAAQ,KAAAA;GAAAN,GAAAM,KAAAA;GAAAlC,GAAAkC,KAAAA;GAAAL,GAAAK,KAAAA;GAAAJ,GAAAI,KAAAA;GAAAF,GAAAE,KAAAA;GAAAD,GAAAC,KAAAA;EAAA,CAAA,GAAA1B;CAAA,EAAA,CAAA;AAG/B"}
1
+ {"version":3,"file":"TooltipArrow.js","names":["createMemo","getAlignment","getSide","clsx","useTooltipContentContext","TooltipArrowProps","class","TooltipArrow","props","ctx","side","placement","align","triggerWidth","reference","getBoundingClientRect","width","_el$","_tmpl$","_ref$","setArrowElement","_$use","_$effect","_p$","_v$","_v$2","_v$3","_v$4","e","_$setAttribute","t","a","_$setStyleProperty","o","_$className","undefined"],"sources":["../../../../src/components/tooltip/TooltipArrow/TooltipArrow.tsx"],"sourcesContent":["import { createMemo } from \"solid-js\";\nimport { getAlignment, getSide } from \"~/lib\";\nimport { clsx } from \"~/utils\";\nimport { useTooltipContentContext } from \"../TooltipContent/TooltipContent.context\";\n\nexport interface TooltipArrowProps {\n class?: string;\n}\n\n/**\n * 箭头组件,必须渲染在 <TooltipContent> 内部。\n * 采用 shadcn Base UI 的定位方式:通过 data-side / data-align 和 CSS 变量\n * 完成贴边与对齐,不手动计算 top/left。\n */\nexport function TooltipArrow(props: TooltipArrowProps) {\n const ctx = useTooltipContentContext(\"TooltipArrow\");\n\n const side = createMemo(() => getSide(ctx.placement()));\n const align = createMemo(() => getAlignment(ctx.placement()) ?? \"center\");\n\n const triggerWidth = () =>\n ctx.reference?.()?.getBoundingClientRect().width ?? 0;\n\n return (\n <div\n ref={ctx.setArrowElement}\n data-side={side()}\n data-align={align()}\n style={{ \"--arrow-offset\": `${triggerWidth() / 2}px` }}\n class={clsx(\n \"absolute size-2.5 z-50 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs bg-foreground fill-foreground\",\n \"data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2\",\n \"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 props.class,\n )}\n aria-hidden=\"true\"\n />\n );\n}\n"],"mappings":";;;;;;;AAcA,SAAgBO,EAAaC,GAA0B;CACrD,IAAMC,IAAML,EAAyB,cAAc,GAE7CM,IAAOV,QAAiBE,EAAQO,EAAIE,UAAU,CAAC,CAAC,GAChDC,IAAQZ,QAAiBC,EAAaQ,EAAIE,UAAU,CAAC,KAAK,QAAQ,GAElEE,UACJJ,EAAIK,YAAY,CAAC,EAAEC,sBAAsB,CAAC,CAACC,SAAS;CAEtD,cAAA;EAAA,IAAAC,IAAAC,EAAA,GAAAC,IAESV,EAAIW;EAaR,OAbuB,OAAAD,KAAA,aAAAE,EAAAF,GAAAF,CAAA,IAAnBR,EAAIW,kBAAeH,GAAAK,GAAAC,MAAA;GAAA,IAAAC,IACbd,EAAK,GAACe,IACLb,EAAM,GAACc,IACQ,GAAGb,EAAa,IAAI,EAAC,KAAIc,IAC7CxB,EACL,0GACA,0GACA,iHACA,kGACA,oGACA,uVACA,sWACAK,EAAMF,KACR;GAAC,OAAAkB,MAAAD,EAAAK,KAAAC,EAAAZ,GAAA,aAAAM,EAAAK,IAAAJ,CAAA,GAAAC,MAAAF,EAAAO,KAAAD,EAAAZ,GAAA,cAAAM,EAAAO,IAAAL,CAAA,GAAAC,MAAAH,EAAAQ,KAAAC,EAAAf,GAAA,kBAAAM,EAAAQ,IAAAL,CAAA,GAAAC,MAAAJ,EAAAU,KAAAC,EAAAjB,GAAAM,EAAAU,IAAAN,CAAA,GAAAJ;EAAA,GAAA;GAAAK,GAAAO,KAAAA;GAAAL,GAAAK,KAAAA;GAAAJ,GAAAI,KAAAA;GAAAF,GAAAE,KAAAA;EAAA,CAAA,GAAAlB;CAAA,EAAA,CAAA;AAIP"}
@@ -3,6 +3,8 @@ import { MiddlewareData, Placement } from '../../../lib';
3
3
  export interface TooltipContentContextValue {
4
4
  /** createPositioner 产出的 middlewareData,TooltipArrow 从里面取 arrow 中间件算好的偏移量 */
5
5
  middlewareData: Accessor<MiddlewareData>;
6
+ /** 触发器元素访问器,TooltipArrow 用它计算 --arrow-offset */
7
+ reference: Accessor<Element | undefined>;
6
8
  /** 经过 flip 调整后的最终 placement,决定箭头贴哪条边、朝哪个方向 */
7
9
  placement: Accessor<Placement>;
8
10
  /** TooltipArrow 挂载时用来把自己的 DOM 节点注册给 arrow middleware(Element 而不是 HTMLElement,兼容 SVG 箭头) */
@@ -1 +1 @@
1
- {"version":3,"file":"TooltipContent.context.js","names":[],"sources":["../../../../src/components/tooltip/TooltipContent/TooltipContent.context.ts"],"sourcesContent":["import { createContext, useContext, type Accessor } from \"solid-js\";\nimport type { MiddlewareData, Placement } from \"~/lib\";\n\nexport interface TooltipContentContextValue {\n /** createPositioner 产出的 middlewareData,TooltipArrow 从里面取 arrow 中间件算好的偏移量 */\n middlewareData: Accessor<MiddlewareData>;\n /** 经过 flip 调整后的最终 placement,决定箭头贴哪条边、朝哪个方向 */\n placement: Accessor<Placement>;\n /** TooltipArrow 挂载时用来把自己的 DOM 节点注册给 arrow middleware(Element 而不是 HTMLElement,兼容 SVG 箭头) */\n setArrowElement: (el: Element) => void;\n /**\n * 驱动进出场动画的状态,和 TooltipContent 内层元素的 data-state 用的是\n * 同一个信号——TooltipArrow 应该用它独立播放自己的一份动画,而不是依赖\n * \"作为内层元素的子节点、被动继承内层的 transform/opacity 动画\"这种隐式\n * 机制(内层的 zoom-in-95 动画会给它加一个非 none 的 transform,CSS 规范\n * 规定这会让内层变成子元素新的\"包含块\",和箭头故意跳过内层、以外层为\n * 基准的设计相冲突,动画播放期间会让\"父子两层谁负责什么\"变得不可靠)。\n */\n animationState: Accessor<\"open\" | \"closed\">;\n}\n\nexport const TooltipContentContext =\n createContext<TooltipContentContextValue>();\n\nexport function useTooltipContentContext(\n component: string,\n): TooltipContentContextValue {\n const ctx = useContext(TooltipContentContext);\n if (!ctx) {\n throw new Error(`<${component}> 必须渲染在 <TooltipContent> 内部`);\n }\n return ctx;\n}\n"],"mappings":";;AAqBA,IAAa,IACX,EAA0C;AAE5C,SAAgB,EACd,GAC4B;CAC5B,IAAM,IAAM,EAAW,CAAqB;CAC5C,IAAI,CAAC,GACH,MAAU,MAAM,IAAI,EAAU,4BAA4B;CAE5D,OAAO;AACT"}
1
+ {"version":3,"file":"TooltipContent.context.js","names":[],"sources":["../../../../src/components/tooltip/TooltipContent/TooltipContent.context.ts"],"sourcesContent":["import { createContext, useContext, type Accessor } from \"solid-js\";\nimport type { MiddlewareData, Placement } from \"~/lib\";\n\nexport interface TooltipContentContextValue {\n /** createPositioner 产出的 middlewareData,TooltipArrow 从里面取 arrow 中间件算好的偏移量 */\n middlewareData: Accessor<MiddlewareData>;\n /** 触发器元素访问器,TooltipArrow 用它计算 --arrow-offset */\n reference: Accessor<Element | undefined>;\n /** 经过 flip 调整后的最终 placement,决定箭头贴哪条边、朝哪个方向 */\n placement: Accessor<Placement>;\n /** TooltipArrow 挂载时用来把自己的 DOM 节点注册给 arrow middleware(Element 而不是 HTMLElement,兼容 SVG 箭头) */\n setArrowElement: (el: Element) => void;\n /**\n * 驱动进出场动画的状态,和 TooltipContent 内层元素的 data-state 用的是\n * 同一个信号——TooltipArrow 应该用它独立播放自己的一份动画,而不是依赖\n * \"作为内层元素的子节点、被动继承内层的 transform/opacity 动画\"这种隐式\n * 机制(内层的 zoom-in-95 动画会给它加一个非 none 的 transform,CSS 规范\n * 规定这会让内层变成子元素新的\"包含块\",和箭头故意跳过内层、以外层为\n * 基准的设计相冲突,动画播放期间会让\"父子两层谁负责什么\"变得不可靠)。\n */\n animationState: Accessor<\"open\" | \"closed\">;\n}\n\nexport const TooltipContentContext =\n createContext<TooltipContentContextValue>();\n\nexport function useTooltipContentContext(\n component: string,\n): TooltipContentContextValue {\n const ctx = useContext(TooltipContentContext);\n if (!ctx) {\n throw new Error(`<${component}> 必须渲染在 <TooltipContent> 内部`);\n }\n return ctx;\n}\n"],"mappings":";;AAuBA,IAAa,IACX,EAA0C;AAE5C,SAAgB,EACd,GAC4B;CAC5B,IAAM,IAAM,EAAW,CAAqB;CAC5C,IAAI,CAAC,GACH,MAAU,MAAM,IAAI,EAAU,4BAA4B;CAE5D,OAAO;AACT"}