@neut/ui 0.0.12 → 0.0.14

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 (368) 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/popover/Popover/Popover.context.d.ts +3 -0
  146. package/dist/components/popover/Popover/Popover.context.js +12 -0
  147. package/dist/components/popover/Popover/Popover.context.js.map +1 -0
  148. package/dist/components/popover/Popover/Popover.d.ts +18 -0
  149. package/dist/components/popover/Popover/Popover.js +37 -0
  150. package/dist/components/popover/Popover/Popover.js.map +1 -0
  151. package/dist/components/popover/Popover/Popover.types.d.ts +24 -0
  152. package/dist/components/popover/Popover/index.d.ts +3 -0
  153. package/dist/components/popover/PopoverContent/PopoverContent.d.ts +6 -0
  154. package/dist/components/popover/PopoverContent/PopoverContent.js +72 -0
  155. package/dist/components/popover/PopoverContent/PopoverContent.js.map +1 -0
  156. package/dist/components/popover/PopoverContent/PopoverContent.types.d.ts +16 -0
  157. package/dist/components/popover/PopoverContent/PopoverContent.utils.d.ts +20 -0
  158. package/dist/components/popover/PopoverContent/PopoverContent.utils.js +36 -0
  159. package/dist/components/popover/PopoverContent/PopoverContent.utils.js.map +1 -0
  160. package/dist/components/popover/PopoverContent/index.d.ts +6 -0
  161. package/dist/components/popover/PopoverContent/usePopoverContent.d.ts +11 -0
  162. package/dist/components/popover/PopoverContent/usePopoverContent.js +42 -0
  163. package/dist/components/popover/PopoverContent/usePopoverContent.js.map +1 -0
  164. package/dist/components/popover/PopoverDescription/PopoverDescription.d.ts +2 -0
  165. package/dist/components/popover/PopoverDescription/PopoverDescription.js +18 -0
  166. package/dist/components/popover/PopoverDescription/PopoverDescription.js.map +1 -0
  167. package/dist/components/popover/PopoverDescription/index.d.ts +1 -0
  168. package/dist/components/popover/PopoverHeader/PopoverHeader.d.ts +2 -0
  169. package/dist/components/popover/PopoverHeader/PopoverHeader.js +18 -0
  170. package/dist/components/popover/PopoverHeader/PopoverHeader.js.map +1 -0
  171. package/dist/components/popover/PopoverHeader/index.d.ts +1 -0
  172. package/dist/components/popover/PopoverTitle/PopoverTitle.d.ts +2 -0
  173. package/dist/components/popover/PopoverTitle/PopoverTitle.js +18 -0
  174. package/dist/components/popover/PopoverTitle/PopoverTitle.js.map +1 -0
  175. package/dist/components/popover/PopoverTitle/index.d.ts +1 -0
  176. package/dist/components/popover/PopoverTrigger/PopoverTrigger.d.ts +4 -0
  177. package/dist/components/popover/PopoverTrigger/PopoverTrigger.js +35 -0
  178. package/dist/components/popover/PopoverTrigger/PopoverTrigger.js.map +1 -0
  179. package/dist/components/popover/PopoverTrigger/PopoverTrigger.types.d.ts +3 -0
  180. package/dist/components/popover/PopoverTrigger/index.d.ts +4 -0
  181. package/dist/components/popover/PopoverTrigger/usePopoverTrigger.d.ts +14 -0
  182. package/dist/components/popover/PopoverTrigger/usePopoverTrigger.js +35 -0
  183. package/dist/components/popover/PopoverTrigger/usePopoverTrigger.js.map +1 -0
  184. package/dist/components/popover/index.d.ts +9 -0
  185. package/dist/components/popover/index.js +7 -0
  186. package/dist/components/radio-group/RadioGroup/RadioGroup.context.d.ts +3 -0
  187. package/dist/components/radio-group/RadioGroup/RadioGroup.context.js +12 -0
  188. package/dist/components/radio-group/RadioGroup/RadioGroup.context.js.map +1 -0
  189. package/dist/components/radio-group/RadioGroup/RadioGroup.d.ts +15 -0
  190. package/dist/components/radio-group/RadioGroup/RadioGroup.js +56 -0
  191. package/dist/components/radio-group/RadioGroup/RadioGroup.js.map +1 -0
  192. package/dist/components/radio-group/RadioGroup/RadioGroup.types.d.ts +22 -0
  193. package/dist/components/radio-group/RadioGroup/index.d.ts +3 -0
  194. package/dist/components/radio-group/RadioGroupItem/RadioGroupItem.d.ts +6 -0
  195. package/dist/components/radio-group/RadioGroupItem/RadioGroupItem.js +80 -0
  196. package/dist/components/radio-group/RadioGroupItem/RadioGroupItem.js.map +1 -0
  197. package/dist/components/radio-group/RadioGroupItem/RadioGroupItem.types.d.ts +9 -0
  198. package/dist/components/radio-group/RadioGroupItem/index.d.ts +2 -0
  199. package/dist/components/radio-group/index.d.ts +4 -0
  200. package/dist/components/radio-group/index.js +3 -0
  201. package/dist/components/select/Select/Select.context.d.ts +3 -3
  202. package/dist/components/select/Select/Select.context.js.map +1 -1
  203. package/dist/components/select/Select/Select.d.ts +5 -2
  204. package/dist/components/select/Select/Select.js +1 -1
  205. package/dist/components/select/Select/Select.js.map +1 -1
  206. package/dist/components/select/Select/Select.types.d.ts +19 -15
  207. package/dist/components/select/Select/index.d.ts +1 -1
  208. package/dist/components/select/SelectContent/SelectContent.js +2 -2
  209. package/dist/components/select/SelectContent/SelectContent.js.map +1 -1
  210. package/dist/components/select/SelectContent/SelectContent.utils.d.ts +2 -1
  211. package/dist/components/select/SelectContent/SelectContent.utils.js +2 -2
  212. package/dist/components/select/SelectContent/SelectContent.utils.js.map +1 -1
  213. package/dist/components/select/SelectContent/useSelectContent.js +6 -2
  214. package/dist/components/select/SelectContent/useSelectContent.js.map +1 -1
  215. package/dist/components/select/SelectItem/SelectItem.js +1 -1
  216. package/dist/components/select/SelectItem/SelectItem.js.map +1 -1
  217. package/dist/components/select/SelectItem/SelectItem.types.d.ts +3 -2
  218. package/dist/components/select/SelectItem/useSelectItem.d.ts +2 -1
  219. package/dist/components/select/SelectItem/useSelectItem.js +1 -1
  220. package/dist/components/select/SelectItem/useSelectItem.js.map +1 -1
  221. package/dist/components/select/SelectValue/SelectValue.js +1 -1
  222. package/dist/components/select/SelectValue/SelectValue.js.map +1 -1
  223. package/dist/components/toast/Toast/Toast.d.ts +3 -0
  224. package/dist/components/toast/Toast/Toast.js +181 -0
  225. package/dist/components/toast/Toast/Toast.js.map +1 -0
  226. package/dist/components/toast/Toast/Toast.styles.d.ts +6 -0
  227. package/dist/components/toast/Toast/Toast.styles.js +27 -0
  228. package/dist/components/toast/Toast/Toast.styles.js.map +1 -0
  229. package/dist/components/toast/Toast/Toast.types.d.ts +90 -0
  230. package/dist/components/toast/Toast/Toast.types.js +6 -0
  231. package/dist/components/toast/Toast/Toast.types.js.map +1 -0
  232. package/dist/components/toast/Toast/index.d.ts +2 -0
  233. package/dist/components/toast/{components → Toaster}/Toaster.d.ts +1 -1
  234. package/dist/components/toast/Toaster/Toaster.js +102 -0
  235. package/dist/components/toast/Toaster/Toaster.js.map +1 -0
  236. package/dist/components/toast/Toaster/Toaster.styles.d.ts +1 -0
  237. package/dist/components/toast/Toaster/Toaster.styles.js +6 -0
  238. package/dist/components/toast/Toaster/Toaster.styles.js.map +1 -0
  239. package/dist/components/toast/Toaster/Toaster.types.d.ts +44 -0
  240. package/dist/components/toast/Toaster/Toaster.utils.d.ts +7 -0
  241. package/dist/components/toast/Toaster/Toaster.utils.js +33 -0
  242. package/dist/components/toast/Toaster/Toaster.utils.js.map +1 -0
  243. package/dist/components/toast/Toaster/index.d.ts +3 -0
  244. package/dist/components/toast/index.d.ts +5 -10
  245. package/dist/components/toast/index.js +4 -5
  246. package/dist/components/toast/state/index.d.ts +1 -0
  247. package/dist/components/toast/state/toast.d.ts +24 -0
  248. package/dist/components/toast/state/toast.js +116 -0
  249. package/dist/components/toast/state/toast.js.map +1 -0
  250. package/dist/components/toggle/Toggle/Toggle.d.ts +3 -0
  251. package/dist/components/toggle/Toggle/Toggle.js +49 -0
  252. package/dist/components/toggle/Toggle/Toggle.js.map +1 -0
  253. package/dist/components/toggle/Toggle/Toggle.styles.d.ts +4 -0
  254. package/dist/components/toggle/Toggle/Toggle.styles.js +23 -0
  255. package/dist/components/toggle/Toggle/Toggle.styles.js.map +1 -0
  256. package/dist/components/toggle/Toggle/Toggle.types.d.ts +12 -0
  257. package/dist/components/toggle/Toggle/index.d.ts +3 -0
  258. package/dist/components/toggle/index.d.ts +2 -0
  259. package/dist/components/toggle/index.js +3 -0
  260. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.context.d.ts +36 -0
  261. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.context.js +40 -0
  262. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.context.js.map +1 -0
  263. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.d.ts +18 -0
  264. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.js +94 -0
  265. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.js.map +1 -0
  266. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.styles.d.ts +8 -0
  267. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.styles.js +7 -0
  268. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.styles.js.map +1 -0
  269. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.types.d.ts +104 -0
  270. package/dist/components/toggle-group/ToggleGroup/create-change-event-details.d.ts +8 -0
  271. package/dist/components/toggle-group/ToggleGroup/create-change-event-details.js +25 -0
  272. package/dist/components/toggle-group/ToggleGroup/create-change-event-details.js.map +1 -0
  273. package/dist/components/toggle-group/ToggleGroup/index.d.ts +3 -0
  274. package/dist/components/toggle-group/ToggleGroup/useToggleGroupKeyboard.d.ts +17 -0
  275. package/dist/components/toggle-group/ToggleGroup/useToggleGroupKeyboard.js +47 -0
  276. package/dist/components/toggle-group/ToggleGroup/useToggleGroupKeyboard.js.map +1 -0
  277. package/dist/components/toggle-group/ToggleGroupItem/ToggleGroupItem.d.ts +11 -0
  278. package/dist/components/toggle-group/ToggleGroupItem/ToggleGroupItem.js +88 -0
  279. package/dist/components/toggle-group/ToggleGroupItem/ToggleGroupItem.js.map +1 -0
  280. package/dist/components/toggle-group/ToggleGroupItem/ToggleGroupItem.styles.d.ts +12 -0
  281. package/dist/components/toggle-group/ToggleGroupItem/ToggleGroupItem.styles.js +7 -0
  282. package/dist/components/toggle-group/ToggleGroupItem/ToggleGroupItem.styles.js.map +1 -0
  283. package/dist/components/toggle-group/ToggleGroupItem/ToggleGroupItem.types.d.ts +20 -0
  284. package/dist/components/toggle-group/ToggleGroupItem/index.d.ts +2 -0
  285. package/dist/components/toggle-group/call-event-handler.d.ts +5 -0
  286. package/dist/components/toggle-group/call-event-handler.js +9 -0
  287. package/dist/components/toggle-group/call-event-handler.js.map +1 -0
  288. package/dist/components/toggle-group/index.d.ts +4 -0
  289. package/dist/components/toggle-group/index.js +3 -0
  290. package/dist/components/tooltip/Tooltip/Tooltip.js +51 -50
  291. package/dist/components/tooltip/Tooltip/Tooltip.js.map +1 -1
  292. package/dist/components/tooltip/TooltipArrow/TooltipArrow.d.ts +3 -28
  293. package/dist/components/tooltip/TooltipArrow/TooltipArrow.js +13 -45
  294. package/dist/components/tooltip/TooltipArrow/TooltipArrow.js.map +1 -1
  295. package/dist/components/tooltip/TooltipContent/TooltipContent.context.d.ts +2 -0
  296. package/dist/components/tooltip/TooltipContent/TooltipContent.context.js.map +1 -1
  297. package/dist/components/tooltip/TooltipContent/TooltipContent.js +2 -1
  298. package/dist/components/tooltip/TooltipContent/TooltipContent.js.map +1 -1
  299. package/dist/components/tooltip/TooltipContent/TooltipContent.types.d.ts +3 -2
  300. package/dist/components/tooltip/TooltipContent/TooltipContent.utils.d.ts +2 -1
  301. package/dist/components/tooltip/TooltipContent/TooltipContent.utils.js +8 -4
  302. package/dist/components/tooltip/TooltipContent/TooltipContent.utils.js.map +1 -1
  303. package/dist/components/tooltip/TooltipContent/useTooltipContent.js +20 -19
  304. package/dist/components/tooltip/TooltipContent/useTooltipContent.js.map +1 -1
  305. package/dist/components/tooltip/TooltipProvider/TooltipProvider.context.d.ts +3 -0
  306. package/dist/components/tooltip/TooltipProvider/TooltipProvider.context.js +10 -0
  307. package/dist/components/tooltip/TooltipProvider/TooltipProvider.context.js.map +1 -0
  308. package/dist/components/tooltip/TooltipProvider/TooltipProvider.d.ts +3 -0
  309. package/dist/components/tooltip/TooltipProvider/TooltipProvider.js +20 -0
  310. package/dist/components/tooltip/TooltipProvider/TooltipProvider.js.map +1 -0
  311. package/dist/components/tooltip/TooltipProvider/TooltipProvider.types.d.ts +11 -0
  312. package/dist/components/tooltip/TooltipProvider/index.d.ts +3 -0
  313. package/dist/components/tooltip/index.d.ts +2 -0
  314. package/dist/components/tooltip/index.js +7 -6
  315. package/dist/index.d.ts +8 -0
  316. package/dist/index.js +153 -115
  317. package/dist/ui.css +1 -1
  318. package/package.json +7 -6
  319. package/dist/components/toast/components/Assets.d.ts +0 -9
  320. package/dist/components/toast/components/Assets.js +0 -32
  321. package/dist/components/toast/components/Assets.js.map +0 -1
  322. package/dist/components/toast/components/Toast.d.ts +0 -3
  323. package/dist/components/toast/components/Toast.js +0 -152
  324. package/dist/components/toast/components/Toast.js.map +0 -1
  325. package/dist/components/toast/components/ToastActions.d.ts +0 -12
  326. package/dist/components/toast/components/ToastActions.js +0 -62
  327. package/dist/components/toast/components/ToastActions.js.map +0 -1
  328. package/dist/components/toast/components/ToastContent.d.ts +0 -9
  329. package/dist/components/toast/components/ToastContent.js +0 -36
  330. package/dist/components/toast/components/ToastContent.js.map +0 -1
  331. package/dist/components/toast/components/ToastIcon.d.ts +0 -9
  332. package/dist/components/toast/components/ToastIcon.js +0 -59
  333. package/dist/components/toast/components/ToastIcon.js.map +0 -1
  334. package/dist/components/toast/components/Toaster.js +0 -163
  335. package/dist/components/toast/components/Toaster.js.map +0 -1
  336. package/dist/components/toast/constants.d.ts +0 -16
  337. package/dist/components/toast/constants.js +0 -6
  338. package/dist/components/toast/constants.js.map +0 -1
  339. package/dist/components/toast/hooks/useSwipe.d.ts +0 -23
  340. package/dist/components/toast/hooks/useSwipe.js +0 -59
  341. package/dist/components/toast/hooks/useSwipe.js.map +0 -1
  342. package/dist/components/toast/hooks/useTheme.d.ts +0 -2
  343. package/dist/components/toast/hooks/useTheme.js +0 -22
  344. package/dist/components/toast/hooks/useTheme.js.map +0 -1
  345. package/dist/components/toast/hooks/useToastHeight.d.ts +0 -11
  346. package/dist/components/toast/hooks/useToastHeight.js +0 -35
  347. package/dist/components/toast/hooks/useToastHeight.js.map +0 -1
  348. package/dist/components/toast/hooks/useToastSubscription.d.ts +0 -5
  349. package/dist/components/toast/hooks/useToastSubscription.js +0 -38
  350. package/dist/components/toast/hooks/useToastSubscription.js.map +0 -1
  351. package/dist/components/toast/hooks/useToastTimer.d.ts +0 -11
  352. package/dist/components/toast/hooks/useToastTimer.js +0 -22
  353. package/dist/components/toast/hooks/useToastTimer.js.map +0 -1
  354. package/dist/components/toast/hooks/useToasterKeyboard.d.ts +0 -7
  355. package/dist/components/toast/hooks/useToasterKeyboard.js +0 -14
  356. package/dist/components/toast/hooks/useToasterKeyboard.js.map +0 -1
  357. package/dist/components/toast/hooks.d.ts +0 -13
  358. package/dist/components/toast/hooks.js +0 -37
  359. package/dist/components/toast/hooks.js.map +0 -1
  360. package/dist/components/toast/state.d.ts +0 -52
  361. package/dist/components/toast/state.js +0 -170
  362. package/dist/components/toast/state.js.map +0 -1
  363. package/dist/components/toast/types.d.ts +0 -168
  364. package/dist/components/toast/types.js +0 -6
  365. package/dist/components/toast/types.js.map +0 -1
  366. package/dist/components/toast/utils.d.ts +0 -10
  367. package/dist/components/toast/utils.js +0 -39
  368. package/dist/components/toast/utils.js.map +0 -1
@@ -0,0 +1,23 @@
1
+ import { cva as e } from "class-variance-authority";
2
+ //#region src/components/toggle/Toggle/Toggle.styles.ts
3
+ var t = e("group/toggle inline-flex items-center justify-center gap-1 rounded-lg text-sm font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
4
+ variants: {
5
+ variant: {
6
+ default: "bg-transparent",
7
+ outline: "border border-input bg-transparent hover:bg-muted"
8
+ },
9
+ size: {
10
+ default: "h-8 min-w-8 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
11
+ sm: "h-7 min-w-7 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
12
+ lg: "h-9 min-w-9 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2"
13
+ }
14
+ },
15
+ defaultVariants: {
16
+ variant: "default",
17
+ size: "default"
18
+ }
19
+ });
20
+ //#endregion
21
+ export { t as toggleVariants };
22
+
23
+ //# sourceMappingURL=Toggle.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toggle.styles.js","names":[],"sources":["../../../../src/components/toggle/Toggle/Toggle.styles.ts"],"sourcesContent":["import { cva } from \"class-variance-authority\";\n\nexport const toggleVariants = cva(\n \"group/toggle inline-flex items-center justify-center gap-1 rounded-lg text-sm font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline: \"border border-input bg-transparent hover:bg-muted\",\n },\n size: {\n default:\n \"h-8 min-w-8 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n sm: \"h-7 min-w-7 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: \"h-9 min-w-9 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n"],"mappings":";;AAEA,IAAa,IAAiB,EAC5B,uhBACA;CACE,UAAU;EACR,SAAS;GACP,SAAS;GACT,SAAS;EACX;EACA,MAAM;GACJ,SACE;GACF,IAAI;GACJ,IAAI;EACN;CACF;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;CACR;AACF,CACF"}
@@ -0,0 +1,12 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import { ComponentProps } from 'solid-js';
3
+ import { toggleVariants } from './Toggle.styles';
4
+ export interface ToggleProps extends ComponentProps<"button">, VariantProps<typeof toggleVariants> {
5
+ /** 受控按下状态;不传则内部自管理 */
6
+ pressed?: boolean;
7
+ /** 非受控模式下的初始按下状态 */
8
+ defaultPressed?: boolean;
9
+ onPressedChange?: (pressed: boolean) => void;
10
+ /** 在 ToggleGroup 中使用的唯一值 */
11
+ value?: string;
12
+ }
@@ -0,0 +1,3 @@
1
+ export { Toggle } from './Toggle';
2
+ export type { ToggleProps } from './Toggle.types';
3
+ export { toggleVariants } from './Toggle.styles';
@@ -0,0 +1,2 @@
1
+ export { Toggle, toggleVariants } from './Toggle';
2
+ export type { ToggleProps } from './Toggle';
@@ -0,0 +1,3 @@
1
+ import { toggleVariants as e } from "./Toggle/Toggle.styles.js";
2
+ import { Toggle as t } from "./Toggle/Toggle.js";
3
+ export { t as Toggle, e as toggleVariants };
@@ -0,0 +1,36 @@
1
+ import { ToggleGroupChangeEventDetails, ToggleGroupContextValue, ToggleGroupOrientation, ToggleGroupSize, ToggleGroupValue, ToggleGroupVariant } from './ToggleGroup.types';
2
+ declare const ToggleGroupContext: import('solid-js').Context<ToggleGroupContextValue<ToggleGroupValue> | undefined>;
3
+ /** createToggleGroupState 的输入:与 ToggleGroupProps 的运行时字段一致 */
4
+ export interface ToggleGroupStateProps<TValue extends ToggleGroupValue = ToggleGroupValue> {
5
+ value?: readonly TValue[];
6
+ defaultValue?: readonly TValue[];
7
+ onValueChange?: (value: TValue[], eventDetails: ToggleGroupChangeEventDetails) => void;
8
+ multiple: boolean;
9
+ disabled: boolean;
10
+ orientation: ToggleGroupOrientation;
11
+ loopFocus: boolean;
12
+ dir?: "ltr" | "rtl" | "auto";
13
+ spacing: number;
14
+ variant?: ToggleGroupVariant;
15
+ size?: ToggleGroupSize;
16
+ }
17
+ /**
18
+ * ToggleGroup 的唯一状态源:选中值(受控/非受控)、焦点高亮、item 注册表。
19
+ *
20
+ * 返回的 context 值里所有字段都是 accessor,因此传入的 `props` 可以是
21
+ * splitProps/mergeProps 得到的响应式代理,读取始终是最新值。
22
+ * 组件根只负责输出 DOM 与 data-* 样式钩子,状态与交互算法收敛在这里。
23
+ *
24
+ * 值类型由泛型参数决定;内部只用 `===` / `includes` 做同一性比较,
25
+ * 因此 string 与 number 都能正常工作。
26
+ */
27
+ export declare function createToggleGroupState<TValue extends ToggleGroupValue = ToggleGroupValue>(props: ToggleGroupStateProps<TValue>): ToggleGroupContextValue<TValue>;
28
+ /**
29
+ * 读取 ToggleGroup 的 context。
30
+ *
31
+ * 泛型参数是**调用方标注**:组件本身无法从子节点推导所属 group 的值类型,
32
+ * 自定义 item 时请显式传入与 ToggleGroup 一致的类型,例如
33
+ * `useToggleGroupContext<"bold" | "italic">("MyToggle")`。
34
+ */
35
+ export declare function useToggleGroupContext<TValue extends ToggleGroupValue = ToggleGroupValue>(component: string): ToggleGroupContextValue<TValue>;
36
+ export { ToggleGroupContext };
@@ -0,0 +1,40 @@
1
+ import { createChangeEventDetails as e } from "./create-change-event-details.js";
2
+ import { createContext as t, createSignal as n, useContext as r } from "solid-js";
3
+ //#region src/components/toggle-group/ToggleGroup/ToggleGroup.context.ts
4
+ var i = t();
5
+ function a(t) {
6
+ let [r, i] = n([...t.defaultValue ?? []]), [a, o] = n(), [s, c] = n([]), l = () => t.value !== void 0, u = () => l() ? t.value : r();
7
+ return {
8
+ value: u,
9
+ multiple: () => t.multiple,
10
+ disabled: () => t.disabled,
11
+ orientation: () => t.orientation,
12
+ loopFocus: () => t.loopFocus,
13
+ dir: () => t.dir,
14
+ spacing: () => t.spacing,
15
+ variant: () => t.variant,
16
+ size: () => t.size,
17
+ highlightedValue: a,
18
+ isPressed: (e) => u().includes(e),
19
+ toggleItem: (n, r, a) => {
20
+ let o = u(), s = o.includes(n), c;
21
+ c = t.multiple ? s ? o.filter((e) => e !== n) : [...o, n] : s ? [] : [n];
22
+ let d = e(r, a);
23
+ t.onValueChange?.(c, d), !d.isCanceled && (l() || i(c));
24
+ },
25
+ setHighlightedValue: o,
26
+ registerItem: (e) => (c((t) => [...t, e]), () => c((t) => t.filter((t) => t !== e))),
27
+ getItems: () => s(),
28
+ isFirstEnabled: (e) => s().find((e) => !e.disabled())?.value === e,
29
+ isUsable: (e) => s().some((t) => t.value === e && !t.disabled())
30
+ };
31
+ }
32
+ function o(e) {
33
+ let t = r(i);
34
+ if (!t) throw Error(`<${e}> 必须渲染在 <ToggleGroup> 内部`);
35
+ return t;
36
+ }
37
+ //#endregion
38
+ export { i as ToggleGroupContext, a as createToggleGroupState, o as useToggleGroupContext };
39
+
40
+ //# sourceMappingURL=ToggleGroup.context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleGroup.context.js","names":[],"sources":["../../../../src/components/toggle-group/ToggleGroup/ToggleGroup.context.ts"],"sourcesContent":["import { createContext, createSignal, useContext } from \"solid-js\";\nimport { createChangeEventDetails } from \"./create-change-event-details\";\nimport type {\n ToggleGroupChangeEventDetails,\n ToggleGroupContextValue,\n ToggleGroupItemEntry,\n ToggleGroupOrientation,\n ToggleGroupSize,\n ToggleGroupValue,\n ToggleGroupVariant,\n} from \"./ToggleGroup.types\";\n\nconst ToggleGroupContext = createContext<ToggleGroupContextValue>();\n\n/** createToggleGroupState 的输入:与 ToggleGroupProps 的运行时字段一致 */\nexport interface ToggleGroupStateProps<\n TValue extends ToggleGroupValue = ToggleGroupValue,\n> {\n value?: readonly TValue[];\n defaultValue?: readonly TValue[];\n onValueChange?: (\n value: TValue[],\n eventDetails: ToggleGroupChangeEventDetails,\n ) => void;\n multiple: boolean;\n disabled: boolean;\n orientation: ToggleGroupOrientation;\n loopFocus: boolean;\n dir?: \"ltr\" | \"rtl\" | \"auto\";\n spacing: number;\n variant?: ToggleGroupVariant;\n size?: ToggleGroupSize;\n}\n\n/**\n * ToggleGroup 的唯一状态源:选中值(受控/非受控)、焦点高亮、item 注册表。\n *\n * 返回的 context 值里所有字段都是 accessor,因此传入的 `props` 可以是\n * splitProps/mergeProps 得到的响应式代理,读取始终是最新值。\n * 组件根只负责输出 DOM 与 data-* 样式钩子,状态与交互算法收敛在这里。\n *\n * 值类型由泛型参数决定;内部只用 `===` / `includes` 做同一性比较,\n * 因此 string 与 number 都能正常工作。\n */\nexport function createToggleGroupState<\n TValue extends ToggleGroupValue = ToggleGroupValue,\n>(props: ToggleGroupStateProps<TValue>): ToggleGroupContextValue<TValue> {\n const [internalValue, setInternalValue] = createSignal<TValue[]>([\n ...(props.defaultValue ?? []),\n ]);\n const [highlightedValue, setHighlightedValue] = createSignal<\n TValue | undefined\n >();\n const [itemOrder, setItemOrder] = createSignal<\n ToggleGroupItemEntry<TValue>[]\n >([]);\n\n const isControlled = () => props.value !== undefined;\n // 受控优先:props.value 存在时读外部值,否则读内部状态\n const value = (): readonly TValue[] =>\n isControlled() ? (props.value as readonly TValue[]) : internalValue();\n\n const isPressed = (v: TValue) => value().includes(v);\n\n const toggleItem = (\n itemValue: TValue,\n event: Event,\n trigger?: Element,\n ): void => {\n const current = value();\n const pressed = current.includes(itemValue);\n\n // 对齐 base-ui:单选时再次点击已按下项会取消选中(next = [])\n let next: TValue[];\n if (props.multiple) {\n next = pressed\n ? current.filter((v) => v !== itemValue)\n : [...current, itemValue];\n } else {\n next = pressed ? [] : [itemValue];\n }\n\n // 先通知外部:onValueChange 中 cancel() 可阻止组件提交本次变更\n const details = createChangeEventDetails(event, trigger);\n props.onValueChange?.(next, details);\n if (details.isCanceled) return;\n\n // 受控模式只通知外部,不改内部状态\n if (!isControlled()) setInternalValue(next);\n };\n\n const registerItem = (entry: ToggleGroupItemEntry<TValue>) => {\n setItemOrder((prev) => [...prev, entry]);\n return () => setItemOrder((prev) => prev.filter((item) => item !== entry));\n };\n\n const isFirstEnabled = (v: TValue) =>\n itemOrder().find((item) => !item.disabled())?.value === v;\n\n const isUsable = (v: TValue) =>\n itemOrder().some((item) => item.value === v && !item.disabled());\n\n return {\n value,\n multiple: () => props.multiple,\n disabled: () => props.disabled,\n orientation: () => props.orientation,\n loopFocus: () => props.loopFocus,\n dir: () => props.dir,\n spacing: () => props.spacing,\n variant: () => props.variant,\n size: () => props.size,\n highlightedValue,\n isPressed,\n toggleItem,\n setHighlightedValue,\n registerItem,\n getItems: () => itemOrder(),\n isFirstEnabled,\n isUsable,\n };\n}\n\n/**\n * 读取 ToggleGroup 的 context。\n *\n * 泛型参数是**调用方标注**:组件本身无法从子节点推导所属 group 的值类型,\n * 自定义 item 时请显式传入与 ToggleGroup 一致的类型,例如\n * `useToggleGroupContext<\"bold\" | \"italic\">(\"MyToggle\")`。\n */\nexport function useToggleGroupContext<\n TValue extends ToggleGroupValue = ToggleGroupValue,\n>(component: string): ToggleGroupContextValue<TValue> {\n const ctx = useContext(ToggleGroupContext);\n if (!ctx) {\n throw new Error(`<${component}> 必须渲染在 <ToggleGroup> 内部`);\n }\n return ctx as ToggleGroupContextValue<TValue>;\n}\n\nexport { ToggleGroupContext };\n"],"mappings":";;;AAYA,IAAM,IAAqB,EAAuC;AAgClE,SAAgB,EAEd,GAAuE;CACvE,IAAM,CAAC,GAAe,KAAoB,EAAuB,CAC/D,GAAI,EAAM,gBAAgB,CAAC,CAC7B,CAAC,GACK,CAAC,GAAkB,KAAuB,EAE9C,GACI,CAAC,GAAW,KAAgB,EAEhC,CAAC,CAAC,GAEE,UAAqB,EAAM,UAAU,KAAA,GAErC,UACJ,EAAa,IAAK,EAAM,QAA8B,EAAc;CA0CtE,OAAO;EACL;EACA,gBAAgB,EAAM;EACtB,gBAAgB,EAAM;EACtB,mBAAmB,EAAM;EACzB,iBAAiB,EAAM;EACvB,WAAW,EAAM;EACjB,eAAe,EAAM;EACrB,eAAe,EAAM;EACrB,YAAY,EAAM;EAClB;EACA,YAnDiB,MAAc,EAAM,CAAC,CAAC,SAAS,CAAC;EAoDjD,aAjDA,GACA,GACA,MACS;GACT,IAAM,IAAU,EAAM,GAChB,IAAU,EAAQ,SAAS,CAAS,GAGtC;GACJ,AAKE,IALE,EAAM,WACD,IACH,EAAQ,QAAQ,MAAM,MAAM,CAAS,IACrC,CAAC,GAAG,GAAS,CAAS,IAEnB,IAAU,CAAC,IAAI,CAAC,CAAS;GAIlC,IAAM,IAAU,EAAyB,GAAO,CAAO;GACvD,EAAM,gBAAgB,GAAM,CAAO,GAC/B,GAAQ,eAGP,EAAa,KAAG,EAAiB,CAAI;EAC5C;EA0BE;EACA,eAzBoB,OACpB,GAAc,MAAS,CAAC,GAAG,GAAM,CAAK,CAAC,SAC1B,GAAc,MAAS,EAAK,QAAQ,MAAS,MAAS,CAAK,CAAC;EAwBzE,gBAAgB,EAAU;EAC1B,iBAtBsB,MACtB,EAAU,CAAC,CAAC,MAAM,MAAS,CAAC,EAAK,SAAS,CAAC,CAAC,EAAE,UAAU;EAsBxD,WApBgB,MAChB,EAAU,CAAC,CAAC,MAAM,MAAS,EAAK,UAAU,KAAK,CAAC,EAAK,SAAS,CAAC;CAoBjE;AACF;AASA,SAAgB,EAEd,GAAoD;CACpD,IAAM,IAAM,EAAW,CAAkB;CACzC,IAAI,CAAC,GACH,MAAU,MAAM,IAAI,EAAU,yBAAyB;CAEzD,OAAO;AACT"}
@@ -0,0 +1,18 @@
1
+ import { JSX } from 'solid-js';
2
+ import { ToggleGroupProps, ToggleGroupValue } from './ToggleGroup.types';
3
+ /**
4
+ * ToggleGroup 根组件:渲染 `<div role="group">`,输出样式与语义钩子
5
+ * (`data-orientation` / `data-vertical` / `data-horizontal` / `data-multiple`
6
+ * / `data-disabled` / `data-spacing` / `data-variant` / `data-size`),
7
+ * 并挂载 roving focus 键盘导航。
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * <ToggleGroup variant="outline" defaultValue={["bold"]}>
12
+ * <ToggleGroupItem value="bold" aria-label="Toggle bold">
13
+ * <Bold />
14
+ * </ToggleGroupItem>
15
+ * </ToggleGroup>
16
+ * ```
17
+ */
18
+ export declare function ToggleGroup<TValue extends ToggleGroupValue = ToggleGroupValue>(props: ToggleGroupProps<TValue>): JSX.Element;
@@ -0,0 +1,94 @@
1
+ import { clsx as e } from "../../../utils/clsx.js";
2
+ import { callEventHandler as t } from "../call-event-handler.js";
3
+ import { ToggleGroupContext as n, createToggleGroupState as r } from "./ToggleGroup.context.js";
4
+ import { toggleGroupVariants as i } from "./ToggleGroup.styles.js";
5
+ import { useToggleGroupKeyboard as a } from "./useToggleGroupKeyboard.js";
6
+ import { createComponent as o, delegateEvents as s, insert as c, mergeProps as l, spread as u, template as d } from "solid-js/web";
7
+ import { mergeProps as f, splitProps as p } from "solid-js";
8
+ //#region src/components/toggle-group/ToggleGroup/ToggleGroup.tsx
9
+ var m = /*#__PURE__*/ d("<div role=group data-slot=toggle-group>");
10
+ function h(s) {
11
+ let d = f({
12
+ multiple: !1,
13
+ disabled: !1,
14
+ orientation: "horizontal",
15
+ loopFocus: !0,
16
+ spacing: 2
17
+ }, s), [h, g] = p(d, [
18
+ "value",
19
+ "defaultValue",
20
+ "onValueChange",
21
+ "multiple",
22
+ "disabled",
23
+ "orientation",
24
+ "loopFocus",
25
+ "spacing",
26
+ "variant",
27
+ "size",
28
+ "class",
29
+ "classList",
30
+ "style",
31
+ "dir",
32
+ "onKeyDown",
33
+ "children"
34
+ ]), _ = r(h), { handleKeyDown: v } = a(_), y = () => h.orientation === "vertical";
35
+ return (() => {
36
+ var r = m();
37
+ return r.$$keydown = (e) => {
38
+ t(h.onKeyDown, e), e.defaultPrevented || v(e);
39
+ }, u(r, l({
40
+ get "data-variant"() {
41
+ return h.variant;
42
+ },
43
+ get "data-size"() {
44
+ return h.size;
45
+ },
46
+ get "data-spacing"() {
47
+ return h.spacing;
48
+ },
49
+ get "data-orientation"() {
50
+ return h.orientation;
51
+ },
52
+ get "data-vertical"() {
53
+ return y() ? "" : null;
54
+ },
55
+ get "data-horizontal"() {
56
+ return y() ? null : "";
57
+ },
58
+ get "data-multiple"() {
59
+ return h.multiple ? "" : null;
60
+ },
61
+ get "data-disabled"() {
62
+ return h.disabled ? "" : null;
63
+ },
64
+ get "aria-disabled"() {
65
+ return h.disabled ? "true" : void 0;
66
+ },
67
+ get dir() {
68
+ return h.dir;
69
+ },
70
+ get style() {
71
+ return {
72
+ "--gap": h.spacing,
73
+ ...h.style
74
+ };
75
+ },
76
+ get class() {
77
+ return e(i(), h.class);
78
+ },
79
+ get classList() {
80
+ return h.classList;
81
+ }
82
+ }, g), !1, !0), c(r, o(n.Provider, {
83
+ value: _,
84
+ get children() {
85
+ return h.children;
86
+ }
87
+ })), r;
88
+ })();
89
+ }
90
+ s(["keydown"]);
91
+ //#endregion
92
+ export { h as ToggleGroup };
93
+
94
+ //# sourceMappingURL=ToggleGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleGroup.js","names":["mergeProps","splitProps","JSX","clsx","callEventHandler","createToggleGroupState","ToggleGroupContext","toggleGroupVariants","ToggleGroupProps","ToggleGroupValue","useToggleGroupKeyboard","ToggleGroup","props","TValue","Element","merged","multiple","disabled","orientation","const","loopFocus","spacing","local","rest","ctx","handleKeyDown","isVertical","_el$","_tmpl$","$$keydown","e","onKeyDown","defaultPrevented","_$spread","_$mergeProps","data-variant","variant","data-size","size","data-spacing","data-orientation","data-vertical","data-horizontal","data-multiple","data-disabled","aria-disabled","undefined","dir","style","CSSProperties","class","classList","_$insert","_$createComponent","Provider","value","children","_$delegateEvents"],"sources":["../../../../src/components/toggle-group/ToggleGroup/ToggleGroup.tsx"],"sourcesContent":["import { mergeProps, splitProps, type JSX } from \"solid-js\";\nimport { clsx } from \"~/utils\";\nimport { callEventHandler } from \"../call-event-handler\";\nimport {\n createToggleGroupState,\n ToggleGroupContext,\n} from \"./ToggleGroup.context\";\nimport { toggleGroupVariants } from \"./ToggleGroup.styles\";\nimport type { ToggleGroupProps, ToggleGroupValue } from \"./ToggleGroup.types\";\nimport { useToggleGroupKeyboard } from \"./useToggleGroupKeyboard\";\n\n/**\n * ToggleGroup 根组件:渲染 `<div role=\"group\">`,输出样式与语义钩子\n * (`data-orientation` / `data-vertical` / `data-horizontal` / `data-multiple`\n * / `data-disabled` / `data-spacing` / `data-variant` / `data-size`),\n * 并挂载 roving focus 键盘导航。\n *\n * @example\n * ```tsx\n * <ToggleGroup variant=\"outline\" defaultValue={[\"bold\"]}>\n * <ToggleGroupItem value=\"bold\" aria-label=\"Toggle bold\">\n * <Bold />\n * </ToggleGroupItem>\n * </ToggleGroup>\n * ```\n */\nexport function ToggleGroup<TValue extends ToggleGroupValue = ToggleGroupValue>(\n props: ToggleGroupProps<TValue>,\n): JSX.Element {\n const merged = mergeProps(\n {\n multiple: false,\n disabled: false,\n orientation: \"horizontal\" as const,\n loopFocus: true,\n spacing: 2,\n },\n props,\n );\n\n const [local, rest] = splitProps(merged, [\n \"value\",\n \"defaultValue\",\n \"onValueChange\",\n \"multiple\",\n \"disabled\",\n \"orientation\",\n \"loopFocus\",\n \"spacing\",\n \"variant\",\n \"size\",\n \"class\",\n \"classList\",\n \"style\",\n \"dir\",\n \"onKeyDown\",\n \"children\",\n ]);\n\n const ctx = createToggleGroupState<TValue>(local);\n const { handleKeyDown } = useToggleGroupKeyboard(ctx);\n const isVertical = () => local.orientation === \"vertical\";\n\n return (\n <div\n role=\"group\"\n data-slot=\"toggle-group\"\n data-variant={local.variant}\n data-size={local.size}\n data-spacing={local.spacing}\n data-orientation={local.orientation}\n // 现有样式依赖 data-vertical / data-horizontal(与 tabs 根保持一致)\n data-vertical={isVertical() ? \"\" : null}\n data-horizontal={isVertical() ? null : \"\"}\n data-multiple={local.multiple ? \"\" : null}\n data-disabled={local.disabled ? \"\" : null}\n aria-disabled={local.disabled ? \"true\" : undefined}\n dir={local.dir}\n // --gap 作为 spacing 的样式入口,用户 style 可覆盖\n style={{ \"--gap\": local.spacing, ...local.style } as JSX.CSSProperties}\n class={clsx(toggleGroupVariants(), local.class)}\n classList={local.classList}\n onKeyDown={(e) => {\n callEventHandler(local.onKeyDown, e);\n if (!e.defaultPrevented) handleKeyDown(e);\n }}\n {...rest}\n >\n <ToggleGroupContext.Provider value={ctx}>\n {local.children}\n </ToggleGroupContext.Provider>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AA0BA,SAAgBW,EACdC,GACa;CACb,IAAMG,IAASf,EACb;EACEgB,UAAU;EACVC,UAAU;EACVC,aAAa;EACbE,WAAW;EACXC,SAAS;CACX,GACAT,CACF,GAEM,CAACU,GAAOC,KAAQtB,EAAWc,GAAQ;EACvC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAAU,CACX,GAEKS,IAAMnB,EAA+BiB,CAAK,GAC1C,EAAEG,qBAAkBf,EAAuBc,CAAG,GAC9CE,UAAmBJ,EAAMJ,gBAAgB;CAE/C,cAAA;EAAA,IAAAS,IAAAC,EAAA;EA0BqB,OA1BrBD,EAAAE,aAmBgBC,MAAM;GAEhB,AADA1B,EAAiBkB,EAAMS,WAAWD,CAAC,GAC9BA,EAAEE,oBAAkBP,EAAcK,CAAC;EAC1C,GAACG,EAAAN,GAAAO,EAAA;GAAA,IAAA,iBAAA;IAAA,OAlBaZ,EAAMc;GAAO;GAAA,IAAA,cAAA;IAAA,OAChBd,EAAMgB;GAAI;GAAA,IAAA,iBAAA;IAAA,OACPhB,EAAMD;GAAO;GAAA,IAAA,qBAAA;IAAA,OACTC,EAAMJ;GAAW;GAAA,IAAA,kBAAA;IAAA,OAEpBQ,EAAW,IAAI,KAAK;GAAI;GAAA,IAAA,oBAAA;IAAA,OACtBA,EAAW,IAAI,OAAO;GAAE;GAAA,IAAA,kBAAA;IAAA,OAC1BJ,EAAMN,WAAW,KAAK;GAAI;GAAA,IAAA,kBAAA;IAAA,OAC1BM,EAAML,WAAW,KAAK;GAAI;GAAA,IAAA,kBAAA;IAAA,OAC1BK,EAAML,WAAW,SAAS6B,KAAAA;GAAS;GAAA,IAClDC,MAAG;IAAA,OAAEzB,EAAMyB;GAAG;GAAA,IAEdC,QAAK;IAAA,OAAE;KAAE,SAAS1B,EAAMD;KAAS,GAAGC,EAAM0B;IAAM;GAAsB;GAAA,IAAA,QAAA;IAAA,OAC/D7C,EAAKI,EAAoB,GAAGe,EAAM4B,KAAK;GAAC;GAAA,IAC/CC,YAAS;IAAA,OAAE7B,EAAM6B;GAAS;EAAA,GAKtB5B,CAAI,GAAA,IAAA,EAAA,GAAA6B,EAAAzB,GAAA0B,EAEP/C,EAAmBgD,UAAQ;GAACC,OAAO/B;GAAG,IAAAgC,WAAA;IAAA,OACpClC,EAAMkC;GAAQ;EAAA,CAAA,CAAA,GAAA7B;CAAA,EAAA,CAAA;AAIvB;AAAC8B,EAAA,CAAA,SAAA,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * ToggleGroup 根容器样式。
3
+ *
4
+ * 根元素同时输出 `data-vertical` / `data-horizontal`(见 ToggleGroup.tsx),
5
+ * 使 `data-vertical:*`、`group-data-vertical/toggle-group:*` 这类选择器生效 ——
6
+ * item 的“拼接态”样式依赖后两者。
7
+ */
8
+ export declare const toggleGroupVariants: (props?: import('class-variance-authority/types').ClassProp | undefined) => string;
@@ -0,0 +1,7 @@
1
+ import { cva as e } from "class-variance-authority";
2
+ //#region src/components/toggle-group/ToggleGroup/ToggleGroup.styles.ts
3
+ var t = 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-vertical:flex-col data-vertical:items-stretch");
4
+ //#endregion
5
+ export { t as toggleGroupVariants };
6
+
7
+ //# sourceMappingURL=ToggleGroup.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleGroup.styles.js","names":[],"sources":["../../../../src/components/toggle-group/ToggleGroup/ToggleGroup.styles.ts"],"sourcesContent":["import { cva } from \"class-variance-authority\";\n\n/**\n * ToggleGroup 根容器样式。\n *\n * 根元素同时输出 `data-vertical` / `data-horizontal`(见 ToggleGroup.tsx),\n * 使 `data-vertical:*`、`group-data-vertical/toggle-group:*` 这类选择器生效 ——\n * item 的“拼接态”样式依赖后两者。\n */\nexport const toggleGroupVariants = cva(\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-vertical:flex-col data-vertical:items-stretch\",\n);\n"],"mappings":";;AASA,IAAa,IAAsB,EACjC,mMACF"}
@@ -0,0 +1,104 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import { Accessor } from 'solid-js';
3
+ import { toggleVariants } from '../../toggle/Toggle/Toggle.styles';
4
+ import { BaseProps, PolymorphicProps } from '../../../types';
5
+ /**
6
+ * ToggleGroup / ToggleGroupItem 的值类型(与 `TabsValue` 保持一致,支持 string 与 number)。
7
+ * 组件通过泛型参数收窄到具体字面量联合类型,例如 `"bold" | "italic"` 或 `1 | 2`。
8
+ */
9
+ export type ToggleGroupValue = string | number;
10
+ /** item 的 variant / size 取值直接取自 toggleVariants,避免多处维护 */
11
+ export type ToggleGroupVariant = NonNullable<VariantProps<typeof toggleVariants>["variant"]>;
12
+ export type ToggleGroupSize = NonNullable<VariantProps<typeof toggleVariants>["size"]>;
13
+ export type ToggleGroupOrientation = "horizontal" | "vertical";
14
+ /** 对齐 base-ui:ToggleGroup 的 change reason 目前只有 "none" */
15
+ export type ToggleGroupChangeEventReason = "none";
16
+ /**
17
+ * onValueChange 的第二个参数,语义对齐 base-ui 的 `ToggleGroup.ChangeEventDetails`。
18
+ *
19
+ * - `cancel()`:阻止组件提交本次变更(受控模式下状态由外部决定,组件本就不提交)
20
+ * - `allowPropagation()`:API 对齐保留;本实现不主动阻止事件传播,因此是空操作
21
+ */
22
+ export interface ToggleGroupChangeEventDetails {
23
+ reason: ToggleGroupChangeEventReason;
24
+ event: Event;
25
+ cancel: () => void;
26
+ allowPropagation: () => void;
27
+ readonly isCanceled: boolean;
28
+ readonly isPropagationAllowed: boolean;
29
+ trigger: Element | undefined;
30
+ }
31
+ interface BaseToggleGroupProps<TValue extends ToggleGroupValue> extends BaseProps {
32
+ /** 受控选中值(数组);不传则内部自管理 */
33
+ value?: readonly TValue[];
34
+ /** 非受控模式下的初始选中值 */
35
+ defaultValue?: readonly TValue[];
36
+ /** 选中值变化回调(受控与非受控都会触发) */
37
+ onValueChange?: (value: TValue[], eventDetails: ToggleGroupChangeEventDetails) => void;
38
+ /** 是否允许同时选中多个,默认 false;单选时再次点击会取消选中(对齐 base-ui) */
39
+ multiple?: boolean;
40
+ /** 整组禁用,item 会继承该状态 */
41
+ disabled?: boolean;
42
+ /** 布局方向,默认 "horizontal";同时决定方向键映射与排列方向 */
43
+ orientation?: ToggleGroupOrientation;
44
+ /** 方向键到达边界时是否循环回另一端,默认 true */
45
+ loopFocus?: boolean;
46
+ /**
47
+ * item 之间的间距,通过根元素上的 `--gap` 变量实现,默认 2(对齐 shadcn)。
48
+ * 传 0 时相邻 item 拼接为一个整体(仅首尾保留圆角与边框)。
49
+ */
50
+ spacing?: number;
51
+ /** 组级 variant,item 未单独指定时继承 */
52
+ variant?: ToggleGroupVariant;
53
+ /** 组级 size,item 未单独指定时继承 */
54
+ size?: ToggleGroupSize;
55
+ }
56
+ /**
57
+ * 值类型由泛型参数决定:
58
+ * - 不传时是宽类型 `ToggleGroupValue`(string | number)
59
+ * - `defaultValue` / `value` / `onValueChange` 中任意一处给出具体类型即可推导,
60
+ * 例如 `defaultValue={[1]}` 会推导出 `number[]`
61
+ * - 也可显式指定:`<ToggleGroup<"bold" | "italic"> />`
62
+ */
63
+ export type ToggleGroupProps<TValue extends ToggleGroupValue = ToggleGroupValue> = PolymorphicProps<"div", BaseToggleGroupProps<TValue>, false>;
64
+ /** 已注册的 item,供 roving focus 与键盘导航使用 */
65
+ export interface ToggleGroupItemEntry<TValue extends ToggleGroupValue = ToggleGroupValue> {
66
+ value: TValue;
67
+ element: HTMLElement;
68
+ /** accessor,支持运行时 disabled 翻转 */
69
+ disabled: () => boolean;
70
+ }
71
+ export interface ToggleGroupContextValue<TValue extends ToggleGroupValue = ToggleGroupValue> {
72
+ /** 当前选中值(受控优先,否则内部状态) */
73
+ value: Accessor<readonly TValue[]>;
74
+ multiple: Accessor<boolean>;
75
+ disabled: Accessor<boolean>;
76
+ orientation: Accessor<ToggleGroupOrientation>;
77
+ loopFocus: Accessor<boolean>;
78
+ dir: Accessor<"ltr" | "rtl" | "auto" | undefined>;
79
+ spacing: Accessor<number>;
80
+ /** 组级 variant / size;未显式指定时为 undefined,便于 item 单独覆盖 */
81
+ variant: Accessor<ToggleGroupVariant | undefined>;
82
+ size: Accessor<ToggleGroupSize | undefined>;
83
+ /** 当前焦点高亮的 item(roving focus 的 tabindex 起点) */
84
+ highlightedValue: Accessor<TValue | undefined>;
85
+ /**
86
+ * 以下带值参数的方法用 method 简写声明:方法参数是双变的,
87
+ * 因此 `ToggleGroupContextValue<number>` 仍可赋给 `ToggleGroupContextValue<string | number>`
88
+ * (Provider 的 value 类型是宽类型,不能用函数属性写法,否则逆变会报错)。
89
+ */
90
+ /** 该 value 当前是否处于按下状态 */
91
+ isPressed(value: TValue): boolean;
92
+ /** 切换某个 item 的按下状态,并派发 onValueChange(value, details) */
93
+ toggleItem(value: TValue, event: Event, trigger?: Element): void;
94
+ setHighlightedValue(value: TValue): void;
95
+ /** 按挂载顺序注册 item,返回注销函数 */
96
+ registerItem(entry: ToggleGroupItemEntry<TValue>): () => void;
97
+ /** 已注册的 item 列表(挂载顺序) */
98
+ getItems(): ToggleGroupItemEntry<TValue>[];
99
+ /** 高亮缺失时,该 value 是否为第一个可用 item(tabindex 起点) */
100
+ isFirstEnabled(value: TValue): boolean;
101
+ /** 该 value 对应的 item 当前是否可用(已注册且未 disabled) */
102
+ isUsable(value: TValue): boolean;
103
+ }
104
+ export {};
@@ -0,0 +1,8 @@
1
+ import { ToggleGroupChangeEventDetails } from './ToggleGroup.types';
2
+ /**
3
+ * 构造 onValueChange 的事件详情(对齐 base-ui 的 `ChangeEventDetails`)。
4
+ *
5
+ * `isCanceled` / `isPropagationAllowed` 用 getter 暴露:回调内部可以即时读到
6
+ * `cancel()` / `allowPropagation()` 之后的最新值,而不是创建时的快照。
7
+ */
8
+ export declare function createChangeEventDetails(event: Event, trigger?: Element): ToggleGroupChangeEventDetails;
@@ -0,0 +1,25 @@
1
+ //#region src/components/toggle-group/ToggleGroup/create-change-event-details.ts
2
+ function e(e, t) {
3
+ let n = !1, r = !1;
4
+ return {
5
+ reason: "none",
6
+ event: e,
7
+ trigger: t,
8
+ cancel: () => {
9
+ n = !0;
10
+ },
11
+ allowPropagation: () => {
12
+ r = !0;
13
+ },
14
+ get isCanceled() {
15
+ return n;
16
+ },
17
+ get isPropagationAllowed() {
18
+ return r;
19
+ }
20
+ };
21
+ }
22
+ //#endregion
23
+ export { e as createChangeEventDetails };
24
+
25
+ //# sourceMappingURL=create-change-event-details.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-change-event-details.js","names":[],"sources":["../../../../src/components/toggle-group/ToggleGroup/create-change-event-details.ts"],"sourcesContent":["import type { ToggleGroupChangeEventDetails } from \"./ToggleGroup.types\";\n\n/**\n * 构造 onValueChange 的事件详情(对齐 base-ui 的 `ChangeEventDetails`)。\n *\n * `isCanceled` / `isPropagationAllowed` 用 getter 暴露:回调内部可以即时读到\n * `cancel()` / `allowPropagation()` 之后的最新值,而不是创建时的快照。\n */\nexport function createChangeEventDetails(\n event: Event,\n trigger?: Element,\n): ToggleGroupChangeEventDetails {\n let canceled = false;\n let propagationAllowed = false;\n\n return {\n reason: \"none\",\n event,\n trigger,\n cancel: () => {\n canceled = true;\n },\n allowPropagation: () => {\n propagationAllowed = true;\n },\n get isCanceled() {\n return canceled;\n },\n get isPropagationAllowed() {\n return propagationAllowed;\n },\n };\n}\n"],"mappings":";AAQA,SAAgB,EACd,GACA,GAC+B;CAC/B,IAAI,IAAW,IACX,IAAqB;CAEzB,OAAO;EACL,QAAQ;EACR;EACA;EACA,cAAc;GACZ,IAAW;EACb;EACA,wBAAwB;GACtB,IAAqB;EACvB;EACA,IAAI,aAAa;GACf,OAAO;EACT;EACA,IAAI,uBAAuB;GACzB,OAAO;EACT;CACF;AACF"}
@@ -0,0 +1,3 @@
1
+ export { ToggleGroup } from './ToggleGroup';
2
+ export { ToggleGroupContext, useToggleGroupContext, } from './ToggleGroup.context';
3
+ export type { ToggleGroupProps, ToggleGroupValue, ToggleGroupContextValue, ToggleGroupItemEntry, ToggleGroupOrientation, ToggleGroupVariant, ToggleGroupSize, ToggleGroupChangeEventDetails, ToggleGroupChangeEventReason, } from './ToggleGroup.types';
@@ -0,0 +1,17 @@
1
+ import { ToggleGroupContextValue, ToggleGroupValue } from './ToggleGroup.types';
2
+ /**
3
+ * ToggleGroup 的 roving focus 键盘导航(纯逻辑,可独立单测)。
4
+ *
5
+ * 方向映射:
6
+ * - horizontal + ltr: ArrowRight → next, ArrowLeft → prev
7
+ * - horizontal + rtl: 左右反转
8
+ * - vertical: ArrowDown → next, ArrowUp → prev
9
+ * - Home → 第一个,End → 最后一个
10
+ * - loopFocus=true 环绕,false 边界停止;跳过 disabled 的 item
11
+ *
12
+ * 只有焦点已经在某个 item 上时才接管按键,避免影响外部其它元素;
13
+ * 移动焦点后由 item 的 onFocus 更新高亮。
14
+ */
15
+ export declare function useToggleGroupKeyboard<TValue extends ToggleGroupValue = ToggleGroupValue>(ctx: ToggleGroupContextValue<TValue>): {
16
+ handleKeyDown: (e: KeyboardEvent) => void;
17
+ };
@@ -0,0 +1,47 @@
1
+ //#region src/components/toggle-group/ToggleGroup/useToggleGroupKeyboard.ts
2
+ var e = /* @__PURE__ */ new Set([
3
+ "ArrowLeft",
4
+ "ArrowRight",
5
+ "ArrowUp",
6
+ "ArrowDown",
7
+ "Home",
8
+ "End"
9
+ ]);
10
+ function t(t) {
11
+ return { handleKeyDown: (n) => {
12
+ if (t.disabled() || !e.has(n.key)) return;
13
+ let r = document.activeElement, i = t.getItems().filter((e) => !e.disabled());
14
+ if (i.length === 0) return;
15
+ let a = i.findIndex((e) => e.element === r);
16
+ if (a === -1) return;
17
+ let o = t.orientation() === "vertical", s = t.dir(), c = s === "rtl" || s !== "ltr" && typeof document < "u" && getComputedStyle(n.currentTarget).direction === "rtl", l;
18
+ switch (n.key) {
19
+ case "Home":
20
+ l = 0;
21
+ break;
22
+ case "End":
23
+ l = i.length - 1;
24
+ break;
25
+ case "ArrowLeft":
26
+ if (o) return;
27
+ l = a + (c ? 1 : -1);
28
+ break;
29
+ case "ArrowRight":
30
+ if (o) return;
31
+ l = a + (c ? -1 : 1);
32
+ break;
33
+ case "ArrowUp":
34
+ if (!o) return;
35
+ l = a - 1;
36
+ break;
37
+ case "ArrowDown":
38
+ if (!o) return;
39
+ l = a + 1;
40
+ }
41
+ l !== void 0 && (n.preventDefault(), l = t.loopFocus() ? (l + i.length) % i.length : Math.min(i.length - 1, Math.max(0, l)), i[l].element.focus(), t.setHighlightedValue(i[l].value));
42
+ } };
43
+ }
44
+ //#endregion
45
+ export { t as useToggleGroupKeyboard };
46
+
47
+ //# sourceMappingURL=useToggleGroupKeyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToggleGroupKeyboard.js","names":[],"sources":["../../../../src/components/toggle-group/ToggleGroup/useToggleGroupKeyboard.ts"],"sourcesContent":["import type {\n ToggleGroupContextValue,\n ToggleGroupValue,\n} from \"./ToggleGroup.types\";\n\n/** 键盘导航按键:方向键 + Home/End(对齐 base-ui CompositeRoot 的 enableHomeAndEndKeys) */\nconst NAV_KEYS = new Set([\n \"ArrowLeft\",\n \"ArrowRight\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"Home\",\n \"End\",\n]);\n\n/**\n * ToggleGroup 的 roving focus 键盘导航(纯逻辑,可独立单测)。\n *\n * 方向映射:\n * - horizontal + ltr: ArrowRight → next, ArrowLeft → prev\n * - horizontal + rtl: 左右反转\n * - vertical: ArrowDown → next, ArrowUp → prev\n * - Home → 第一个,End → 最后一个\n * - loopFocus=true 环绕,false 边界停止;跳过 disabled 的 item\n *\n * 只有焦点已经在某个 item 上时才接管按键,避免影响外部其它元素;\n * 移动焦点后由 item 的 onFocus 更新高亮。\n */\nexport function useToggleGroupKeyboard<\n TValue extends ToggleGroupValue = ToggleGroupValue,\n>(ctx: ToggleGroupContextValue<TValue>) {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (ctx.disabled()) return;\n if (!NAV_KEYS.has(e.key)) return;\n\n const activeEl = document.activeElement as HTMLElement | null;\n const items = ctx.getItems().filter((item) => !item.disabled());\n if (items.length === 0) return;\n\n const currentIndex = items.findIndex((item) => item.element === activeEl);\n if (currentIndex === -1) return;\n\n const isVertical = ctx.orientation() === \"vertical\";\n // dir 未指定/auto 时,按根元素的实际书写方向判断(兼容祖先节点上的 dir)\n const dir = ctx.dir();\n const isRTL =\n dir === \"rtl\" ||\n (dir !== \"ltr\" &&\n typeof document !== \"undefined\" &&\n getComputedStyle(e.currentTarget as Element).direction === \"rtl\");\n\n let nextIndex: number | undefined;\n switch (e.key) {\n case \"Home\":\n nextIndex = 0;\n break;\n case \"End\":\n nextIndex = items.length - 1;\n break;\n case \"ArrowLeft\":\n if (isVertical) return;\n nextIndex = currentIndex + (isRTL ? 1 : -1);\n break;\n case \"ArrowRight\":\n if (isVertical) return;\n nextIndex = currentIndex + (isRTL ? -1 : 1);\n break;\n case \"ArrowUp\":\n if (!isVertical) return;\n nextIndex = currentIndex - 1;\n break;\n case \"ArrowDown\":\n if (!isVertical) return;\n nextIndex = currentIndex + 1;\n break;\n }\n\n if (nextIndex === undefined) return;\n\n // 方向键与当前布局匹配,接管默认滚动行为\n e.preventDefault();\n\n if (ctx.loopFocus()) {\n nextIndex = (nextIndex + items.length) % items.length;\n } else {\n nextIndex = Math.min(items.length - 1, Math.max(0, nextIndex));\n }\n\n items[nextIndex].element.focus();\n ctx.setHighlightedValue(items[nextIndex].value);\n };\n\n return { handleKeyDown };\n}\n"],"mappings":";AAMA,IAAM,oBAAW,IAAI,IAAI;CACvB;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAeD,SAAgB,EAEd,GAAsC;CA8DtC,OAAO,EAAE,gBA7Dc,MAAqB;EAE1C,IADI,EAAI,SAAS,KACb,CAAC,EAAS,IAAI,EAAE,GAAG,GAAG;EAE1B,IAAM,IAAW,SAAS,eACpB,IAAQ,EAAI,SAAS,CAAC,CAAC,QAAQ,MAAS,CAAC,EAAK,SAAS,CAAC;EAC9D,IAAI,EAAM,WAAW,GAAG;EAExB,IAAM,IAAe,EAAM,WAAW,MAAS,EAAK,YAAY,CAAQ;EACxE,IAAI,MAAiB,IAAI;EAEzB,IAAM,IAAa,EAAI,YAAY,MAAM,YAEnC,IAAM,EAAI,IAAI,GACd,IACJ,MAAQ,SACP,MAAQ,SACP,OAAO,WAAa,OACpB,iBAAiB,EAAE,aAAwB,CAAC,CAAC,cAAc,OAE3D;EACJ,QAAQ,EAAE,KAAV;GACE,KAAK;IACH,IAAY;IACZ;GACF,KAAK;IACH,IAAY,EAAM,SAAS;IAC3B;GACF,KAAK;IACH,IAAI,GAAY;IAChB,IAAY,KAAgB,IAAQ,IAAI;IACxC;GACF,KAAK;IACH,IAAI,GAAY;IAChB,IAAY,KAAgB,IAAQ,KAAK;IACzC;GACF,KAAK;IACH,IAAI,CAAC,GAAY;IACjB,IAAY,IAAe;IAC3B;GACF,KAAK;IACH,IAAI,CAAC,GAAY;IACjB,IAAY,IAAe;EAE/B;EAEI,MAAc,KAAA,MAGlB,EAAE,eAAe,GAEjB,AAGE,IAHE,EAAI,UAAU,KACH,IAAY,EAAM,UAAU,EAAM,SAEnC,KAAK,IAAI,EAAM,SAAS,GAAG,KAAK,IAAI,GAAG,CAAS,CAAC,GAG/D,EAAM,EAAU,CAAC,QAAQ,MAAM,GAC/B,EAAI,oBAAoB,EAAM,EAAU,CAAC,KAAK;CAChD,EAEuB;AACzB"}
@@ -0,0 +1,11 @@
1
+ import { JSX } from 'solid-js';
2
+ import { ToggleGroupValue } from '../ToggleGroup/ToggleGroup.types';
3
+ import { ToggleGroupItemProps } from './ToggleGroupItem.types';
4
+ /**
5
+ * ToggleGroupItem:ToggleGroup 内的两态按钮。
6
+ *
7
+ * - 选中值由 ToggleGroup 统一持有,点击通过 `ctx.toggleItem` 触发变更
8
+ * - disabled 继承整组状态,可在 item 上单独禁用
9
+ * - roving tabindex:整组只有一个 tab 停靠点,方向键在同组内移动焦点
10
+ */
11
+ export declare function ToggleGroupItem<TValue extends ToggleGroupValue = ToggleGroupValue>(props: ToggleGroupItemProps<TValue>): JSX.Element;
@@ -0,0 +1,88 @@
1
+ import { clsx as e } from "../../../utils/clsx.js";
2
+ import { toggleVariants as t } from "../../toggle/Toggle/Toggle.styles.js";
3
+ import { callEventHandler as n } from "../call-event-handler.js";
4
+ import { useToggleGroupContext as r } from "../ToggleGroup/ToggleGroup.context.js";
5
+ import { toggleGroupItemVariants as i } from "./ToggleGroupItem.styles.js";
6
+ import { delegateEvents as a, insert as o, mergeProps as s, spread as c, template as l, use as u } from "solid-js/web";
7
+ import { mergeProps as d, onCleanup as f, onMount as p, splitProps as m } from "solid-js";
8
+ //#region src/components/toggle-group/ToggleGroupItem/ToggleGroupItem.tsx
9
+ var h = /*#__PURE__*/ l("<button data-slot=toggle-group-item>");
10
+ function g(a) {
11
+ let l = r("ToggleGroupItem"), g = d({ type: "button" }, a), [_, v] = m(g, [
12
+ "value",
13
+ "variant",
14
+ "size",
15
+ "class",
16
+ "classList",
17
+ "disabled",
18
+ "type",
19
+ "onClick",
20
+ "onFocus",
21
+ "children"
22
+ ]), y, b = () => l.variant() ?? _.variant ?? "default", x = () => l.size() ?? _.size ?? "default", S = () => l.isPressed(_.value), C = () => l.disabled() || !!_.disabled, w = () => {
23
+ if (C()) return -1;
24
+ let e = l.highlightedValue();
25
+ return e === _.value && l.isUsable(_.value) || (e === void 0 || !l.isUsable(e)) && l.isFirstEnabled(_.value) ? 0 : -1;
26
+ };
27
+ return p(() => {
28
+ f(l.registerItem({
29
+ value: _.value,
30
+ disabled: C,
31
+ element: y
32
+ }));
33
+ }), (() => {
34
+ var r = h();
35
+ return r.addEventListener("focus", (e) => {
36
+ C() || l.setHighlightedValue(_.value), n(_.onFocus, e);
37
+ }), r.$$click = (e) => {
38
+ n(_.onClick, e), !e.defaultPrevented && !C() && l.toggleItem(_.value, e, e.currentTarget);
39
+ }, u((e) => {
40
+ y = e;
41
+ }, r), c(r, s({
42
+ get type() {
43
+ return _.type;
44
+ },
45
+ get disabled() {
46
+ return C();
47
+ },
48
+ get tabindex() {
49
+ return w();
50
+ },
51
+ get "data-variant"() {
52
+ return b();
53
+ },
54
+ get "data-size"() {
55
+ return x();
56
+ },
57
+ get "data-spacing"() {
58
+ return l.spacing();
59
+ },
60
+ get "data-pressed"() {
61
+ return S() ? "" : null;
62
+ },
63
+ get "data-disabled"() {
64
+ return C() ? "" : null;
65
+ },
66
+ get "data-state"() {
67
+ return S() ? "on" : "off";
68
+ },
69
+ get "aria-pressed"() {
70
+ return S();
71
+ },
72
+ get class() {
73
+ return e(t({
74
+ variant: b(),
75
+ size: x()
76
+ }), i(), _.class);
77
+ },
78
+ get classList() {
79
+ return _.classList;
80
+ }
81
+ }, v), !1, !0), o(r, () => _.children), r;
82
+ })();
83
+ }
84
+ a(["click"]);
85
+ //#endregion
86
+ export { g as ToggleGroupItem };
87
+
88
+ //# sourceMappingURL=ToggleGroupItem.js.map