@neut/ui 0.0.16 → 0.0.17

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 (386) hide show
  1. package/dist/components/bubble/Bubble/Bubble.d.ts +3 -0
  2. package/dist/components/bubble/Bubble/Bubble.js +39 -0
  3. package/dist/components/bubble/Bubble/Bubble.js.map +1 -0
  4. package/dist/components/bubble/Bubble/Bubble.styles.d.ts +7 -0
  5. package/dist/components/bubble/Bubble/Bubble.styles.js +18 -0
  6. package/dist/components/bubble/Bubble/Bubble.styles.js.map +1 -0
  7. package/dist/components/bubble/Bubble/Bubble.types.d.ts +8 -0
  8. package/dist/components/bubble/Bubble/index.d.ts +2 -0
  9. package/dist/components/bubble/BubbleContent/BubbleContent.d.ts +7 -0
  10. package/dist/components/bubble/BubbleContent/BubbleContent.js +17 -0
  11. package/dist/components/bubble/BubbleContent/BubbleContent.js.map +1 -0
  12. package/dist/components/bubble/BubbleContent/BubbleContent.styles.d.ts +1 -0
  13. package/dist/components/bubble/BubbleContent/BubbleContent.styles.js +6 -0
  14. package/dist/components/bubble/BubbleContent/BubbleContent.styles.js.map +1 -0
  15. package/dist/components/bubble/BubbleContent/BubbleContent.types.d.ts +3 -0
  16. package/dist/components/bubble/BubbleContent/index.d.ts +2 -0
  17. package/dist/components/bubble/BubbleGroup/BubbleGroup.d.ts +3 -0
  18. package/dist/components/bubble/BubbleGroup/BubbleGroup.js +24 -0
  19. package/dist/components/bubble/BubbleGroup/BubbleGroup.js.map +1 -0
  20. package/dist/components/bubble/BubbleGroup/BubbleGroup.types.d.ts +2 -0
  21. package/dist/components/bubble/BubbleGroup/index.d.ts +2 -0
  22. package/dist/components/bubble/BubbleReactions/BubbleReactions.d.ts +6 -0
  23. package/dist/components/bubble/BubbleReactions/BubbleReactions.js +42 -0
  24. package/dist/components/bubble/BubbleReactions/BubbleReactions.js.map +1 -0
  25. package/dist/components/bubble/BubbleReactions/BubbleReactions.styles.d.ts +4 -0
  26. package/dist/components/bubble/BubbleReactions/BubbleReactions.styles.js +22 -0
  27. package/dist/components/bubble/BubbleReactions/BubbleReactions.styles.js.map +1 -0
  28. package/dist/components/bubble/BubbleReactions/BubbleReactions.types.d.ts +4 -0
  29. package/dist/components/bubble/BubbleReactions/index.d.ts +2 -0
  30. package/dist/components/bubble/index.d.ts +8 -0
  31. package/dist/components/bubble/index.js +5 -0
  32. package/dist/components/drawer/Drawer/Drawer.context.d.ts +3 -0
  33. package/dist/components/drawer/Drawer/Drawer.context.js +12 -0
  34. package/dist/components/drawer/Drawer/Drawer.context.js.map +1 -0
  35. package/dist/components/drawer/Drawer/Drawer.d.ts +7 -0
  36. package/dist/components/drawer/Drawer/Drawer.js +63 -0
  37. package/dist/components/drawer/Drawer/Drawer.js.map +1 -0
  38. package/dist/components/drawer/Drawer/Drawer.types.d.ts +50 -0
  39. package/dist/components/drawer/Drawer/create-change-event-details.d.ts +3 -0
  40. package/dist/components/drawer/Drawer/create-change-event-details.js +25 -0
  41. package/dist/components/drawer/Drawer/create-change-event-details.js.map +1 -0
  42. package/dist/components/drawer/Drawer/index.d.ts +3 -0
  43. package/dist/components/drawer/DrawerClose/DrawerClose.d.ts +5 -0
  44. package/dist/components/drawer/DrawerClose/DrawerClose.js +26 -0
  45. package/dist/components/drawer/DrawerClose/DrawerClose.js.map +1 -0
  46. package/dist/components/drawer/DrawerClose/index.d.ts +1 -0
  47. package/dist/components/drawer/DrawerContent/DrawerContent.d.ts +6 -0
  48. package/dist/components/drawer/DrawerContent/DrawerContent.js +103 -0
  49. package/dist/components/drawer/DrawerContent/DrawerContent.js.map +1 -0
  50. package/dist/components/drawer/DrawerContent/DrawerContent.styles.d.ts +10 -0
  51. package/dist/components/drawer/DrawerContent/DrawerContent.styles.js +25 -0
  52. package/dist/components/drawer/DrawerContent/DrawerContent.styles.js.map +1 -0
  53. package/dist/components/drawer/DrawerContent/DrawerContent.types.d.ts +2 -0
  54. package/dist/components/drawer/DrawerContent/index.d.ts +2 -0
  55. package/dist/components/drawer/DrawerContent/useDrawerSwipe.d.ts +11 -0
  56. package/dist/components/drawer/DrawerContent/useDrawerSwipe.js +56 -0
  57. package/dist/components/drawer/DrawerContent/useDrawerSwipe.js.map +1 -0
  58. package/dist/components/drawer/DrawerDescription/DrawerDescription.d.ts +2 -0
  59. package/dist/components/drawer/DrawerDescription/DrawerDescription.js +28 -0
  60. package/dist/components/drawer/DrawerDescription/DrawerDescription.js.map +1 -0
  61. package/dist/components/drawer/DrawerDescription/DrawerDescription.types.d.ts +2 -0
  62. package/dist/components/drawer/DrawerDescription/index.d.ts +2 -0
  63. package/dist/components/drawer/DrawerFooter/DrawerFooter.d.ts +2 -0
  64. package/dist/components/drawer/DrawerFooter/DrawerFooter.js +24 -0
  65. package/dist/components/drawer/DrawerFooter/DrawerFooter.js.map +1 -0
  66. package/dist/components/drawer/DrawerFooter/DrawerFooter.types.d.ts +2 -0
  67. package/dist/components/drawer/DrawerFooter/index.d.ts +2 -0
  68. package/dist/components/drawer/DrawerHeader/DrawerHeader.d.ts +2 -0
  69. package/dist/components/drawer/DrawerHeader/DrawerHeader.js +24 -0
  70. package/dist/components/drawer/DrawerHeader/DrawerHeader.js.map +1 -0
  71. package/dist/components/drawer/DrawerHeader/DrawerHeader.types.d.ts +2 -0
  72. package/dist/components/drawer/DrawerHeader/index.d.ts +2 -0
  73. package/dist/components/drawer/DrawerOverlay/DrawerOverlay.d.ts +3 -0
  74. package/dist/components/drawer/DrawerOverlay/DrawerOverlay.js +43 -0
  75. package/dist/components/drawer/DrawerOverlay/DrawerOverlay.js.map +1 -0
  76. package/dist/components/drawer/DrawerOverlay/DrawerOverlay.types.d.ts +2 -0
  77. package/dist/components/drawer/DrawerOverlay/index.d.ts +2 -0
  78. package/dist/components/drawer/DrawerPortal/DrawerPortal.d.ts +2 -0
  79. package/dist/components/drawer/DrawerPortal/DrawerPortal.js +10 -0
  80. package/dist/components/drawer/DrawerPortal/DrawerPortal.js.map +1 -0
  81. package/dist/components/drawer/DrawerPortal/DrawerPortal.types.d.ts +2 -0
  82. package/dist/components/drawer/DrawerPortal/index.d.ts +2 -0
  83. package/dist/components/drawer/DrawerSwipeHandle/DrawerSwipeHandle.d.ts +6 -0
  84. package/dist/components/drawer/DrawerSwipeHandle/DrawerSwipeHandle.js +27 -0
  85. package/dist/components/drawer/DrawerSwipeHandle/DrawerSwipeHandle.js.map +1 -0
  86. package/dist/components/drawer/DrawerSwipeHandle/DrawerSwipeHandle.types.d.ts +2 -0
  87. package/dist/components/drawer/DrawerSwipeHandle/index.d.ts +2 -0
  88. package/dist/components/drawer/DrawerTitle/DrawerTitle.d.ts +2 -0
  89. package/dist/components/drawer/DrawerTitle/DrawerTitle.js +28 -0
  90. package/dist/components/drawer/DrawerTitle/DrawerTitle.js.map +1 -0
  91. package/dist/components/drawer/DrawerTitle/DrawerTitle.types.d.ts +2 -0
  92. package/dist/components/drawer/DrawerTitle/index.d.ts +2 -0
  93. package/dist/components/drawer/DrawerTrigger/DrawerTrigger.d.ts +5 -0
  94. package/dist/components/drawer/DrawerTrigger/DrawerTrigger.js +38 -0
  95. package/dist/components/drawer/DrawerTrigger/DrawerTrigger.js.map +1 -0
  96. package/dist/components/drawer/DrawerTrigger/index.d.ts +1 -0
  97. package/dist/components/drawer/index.d.ts +20 -0
  98. package/dist/components/drawer/index.js +13 -0
  99. package/dist/components/hover-card/HoverCard/HoverCard.d.ts +7 -0
  100. package/dist/components/hover-card/HoverCard/HoverCard.js +47 -0
  101. package/dist/components/hover-card/HoverCard/HoverCard.js.map +1 -0
  102. package/dist/components/hover-card/HoverCard/index.d.ts +1 -0
  103. package/dist/components/hover-card/HoverCardContent/HoverCardContent.d.ts +6 -0
  104. package/dist/components/hover-card/HoverCardContent/HoverCardContent.js +74 -0
  105. package/dist/components/hover-card/HoverCardContent/HoverCardContent.js.map +1 -0
  106. package/dist/components/hover-card/HoverCardContent/index.d.ts +1 -0
  107. package/dist/components/hover-card/HoverCardContent/useHoverCardContent.d.ts +16 -0
  108. package/dist/components/hover-card/HoverCardContent/useHoverCardContent.js +58 -0
  109. package/dist/components/hover-card/HoverCardContent/useHoverCardContent.js.map +1 -0
  110. package/dist/components/hover-card/HoverCardTrigger/HoverCardTrigger.d.ts +4 -0
  111. package/dist/components/hover-card/HoverCardTrigger/HoverCardTrigger.js +40 -0
  112. package/dist/components/hover-card/HoverCardTrigger/HoverCardTrigger.js.map +1 -0
  113. package/dist/components/hover-card/HoverCardTrigger/index.d.ts +1 -0
  114. package/dist/components/hover-card/HoverCardTrigger/useHoverCardTrigger.d.ts +18 -0
  115. package/dist/components/hover-card/HoverCardTrigger/useHoverCardTrigger.js +34 -0
  116. package/dist/components/hover-card/HoverCardTrigger/useHoverCardTrigger.js.map +1 -0
  117. package/dist/components/hover-card/hover-card.context.d.ts +3 -0
  118. package/dist/components/hover-card/hover-card.context.js +12 -0
  119. package/dist/components/hover-card/hover-card.context.js.map +1 -0
  120. package/dist/components/hover-card/hover-card.types.d.ts +50 -0
  121. package/dist/components/hover-card/hover-card.utils.d.ts +6 -0
  122. package/dist/components/hover-card/index.d.ts +4 -0
  123. package/dist/components/hover-card/index.js +4 -0
  124. package/dist/components/marker/Marker/Marker.d.ts +7 -0
  125. package/dist/components/marker/Marker/Marker.js +35 -0
  126. package/dist/components/marker/Marker/Marker.js.map +1 -0
  127. package/dist/components/marker/Marker/Marker.styles.d.ts +3 -0
  128. package/dist/components/marker/Marker/Marker.styles.js +14 -0
  129. package/dist/components/marker/Marker/Marker.styles.js.map +1 -0
  130. package/dist/components/marker/Marker/Marker.types.d.ts +5 -0
  131. package/dist/components/marker/Marker/index.d.ts +3 -0
  132. package/dist/components/marker/MarkerContent/MarkerContent.d.ts +2 -0
  133. package/dist/components/marker/MarkerContent/MarkerContent.js +24 -0
  134. package/dist/components/marker/MarkerContent/MarkerContent.js.map +1 -0
  135. package/dist/components/marker/MarkerContent/MarkerContent.types.d.ts +2 -0
  136. package/dist/components/marker/MarkerContent/index.d.ts +2 -0
  137. package/dist/components/marker/MarkerIcon/MarkerIcon.d.ts +3 -0
  138. package/dist/components/marker/MarkerIcon/MarkerIcon.js +25 -0
  139. package/dist/components/marker/MarkerIcon/MarkerIcon.js.map +1 -0
  140. package/dist/components/marker/MarkerIcon/MarkerIcon.types.d.ts +2 -0
  141. package/dist/components/marker/MarkerIcon/index.d.ts +2 -0
  142. package/dist/components/marker/index.d.ts +6 -0
  143. package/dist/components/marker/index.js +5 -0
  144. package/dist/components/message/Message/Message.d.ts +3 -0
  145. package/dist/components/message/Message/Message.js +31 -0
  146. package/dist/components/message/Message/Message.js.map +1 -0
  147. package/dist/components/message/Message/Message.types.d.ts +5 -0
  148. package/dist/components/message/Message/index.d.ts +2 -0
  149. package/dist/components/message/MessageAvatar/MessageAvatar.d.ts +5 -0
  150. package/dist/components/message/MessageAvatar/MessageAvatar.js +24 -0
  151. package/dist/components/message/MessageAvatar/MessageAvatar.js.map +1 -0
  152. package/dist/components/message/MessageAvatar/MessageAvatar.types.d.ts +2 -0
  153. package/dist/components/message/MessageAvatar/index.d.ts +2 -0
  154. package/dist/components/message/MessageContent/MessageContent.d.ts +3 -0
  155. package/dist/components/message/MessageContent/MessageContent.js +24 -0
  156. package/dist/components/message/MessageContent/MessageContent.js.map +1 -0
  157. package/dist/components/message/MessageContent/MessageContent.types.d.ts +2 -0
  158. package/dist/components/message/MessageContent/index.d.ts +2 -0
  159. package/dist/components/message/MessageFooter/MessageFooter.d.ts +3 -0
  160. package/dist/components/message/MessageFooter/MessageFooter.js +24 -0
  161. package/dist/components/message/MessageFooter/MessageFooter.js.map +1 -0
  162. package/dist/components/message/MessageFooter/MessageFooter.types.d.ts +2 -0
  163. package/dist/components/message/MessageFooter/index.d.ts +2 -0
  164. package/dist/components/message/MessageGroup/MessageGroup.d.ts +3 -0
  165. package/dist/components/message/MessageGroup/MessageGroup.js +24 -0
  166. package/dist/components/message/MessageGroup/MessageGroup.js.map +1 -0
  167. package/dist/components/message/MessageGroup/MessageGroup.types.d.ts +2 -0
  168. package/dist/components/message/MessageGroup/index.d.ts +2 -0
  169. package/dist/components/message/MessageHeader/MessageHeader.d.ts +3 -0
  170. package/dist/components/message/MessageHeader/MessageHeader.js +24 -0
  171. package/dist/components/message/MessageHeader/MessageHeader.js.map +1 -0
  172. package/dist/components/message/MessageHeader/MessageHeader.types.d.ts +2 -0
  173. package/dist/components/message/MessageHeader/index.d.ts +2 -0
  174. package/dist/components/message/index.d.ts +12 -0
  175. package/dist/components/message/index.js +7 -0
  176. package/dist/components/message-scroller/MessageScroller/MessageScroller.d.ts +3 -0
  177. package/dist/components/message-scroller/MessageScroller/MessageScroller.js +35 -0
  178. package/dist/components/message-scroller/MessageScroller/MessageScroller.js.map +1 -0
  179. package/dist/components/message-scroller/MessageScroller/index.d.ts +1 -0
  180. package/dist/components/message-scroller/MessageScrollerButton/MessageScrollerButton.d.ts +6 -0
  181. package/dist/components/message-scroller/MessageScrollerButton/MessageScrollerButton.js +90 -0
  182. package/dist/components/message-scroller/MessageScrollerButton/MessageScrollerButton.js.map +1 -0
  183. package/dist/components/message-scroller/MessageScrollerButton/index.d.ts +1 -0
  184. package/dist/components/message-scroller/MessageScrollerContent/MessageScrollerContent.d.ts +6 -0
  185. package/dist/components/message-scroller/MessageScrollerContent/MessageScrollerContent.js +46 -0
  186. package/dist/components/message-scroller/MessageScrollerContent/MessageScrollerContent.js.map +1 -0
  187. package/dist/components/message-scroller/MessageScrollerContent/index.d.ts +1 -0
  188. package/dist/components/message-scroller/MessageScrollerItem/MessageScrollerItem.d.ts +6 -0
  189. package/dist/components/message-scroller/MessageScrollerItem/MessageScrollerItem.js +42 -0
  190. package/dist/components/message-scroller/MessageScrollerItem/MessageScrollerItem.js.map +1 -0
  191. package/dist/components/message-scroller/MessageScrollerItem/index.d.ts +1 -0
  192. package/dist/components/message-scroller/MessageScrollerProvider/MessageScrollerProvider.d.ts +4 -0
  193. package/dist/components/message-scroller/MessageScrollerProvider/MessageScrollerProvider.js +37 -0
  194. package/dist/components/message-scroller/MessageScrollerProvider/MessageScrollerProvider.js.map +1 -0
  195. package/dist/components/message-scroller/MessageScrollerProvider/index.d.ts +1 -0
  196. package/dist/components/message-scroller/MessageScrollerViewport/MessageScrollerViewport.d.ts +6 -0
  197. package/dist/components/message-scroller/MessageScrollerViewport/MessageScrollerViewport.js +55 -0
  198. package/dist/components/message-scroller/MessageScrollerViewport/MessageScrollerViewport.js.map +1 -0
  199. package/dist/components/message-scroller/MessageScrollerViewport/index.d.ts +1 -0
  200. package/dist/components/message-scroller/index.d.ts +10 -0
  201. package/dist/components/message-scroller/index.js +10 -0
  202. package/dist/components/message-scroller/message-scroller.context.d.ts +3 -0
  203. package/dist/components/message-scroller/message-scroller.context.js +12 -0
  204. package/dist/components/message-scroller/message-scroller.context.js.map +1 -0
  205. package/dist/components/message-scroller/message-scroller.types.d.ts +92 -0
  206. package/dist/components/message-scroller/message-scroller.utils.d.ts +7 -0
  207. package/dist/components/message-scroller/message-scroller.utils.js +9 -0
  208. package/dist/components/message-scroller/message-scroller.utils.js.map +1 -0
  209. package/dist/components/message-scroller/useMessageScroller.d.ts +6 -0
  210. package/dist/components/message-scroller/useMessageScroller.js +14 -0
  211. package/dist/components/message-scroller/useMessageScroller.js.map +1 -0
  212. package/dist/components/message-scroller/useMessageScrollerEngine.d.ts +15 -0
  213. package/dist/components/message-scroller/useMessageScrollerEngine.js +375 -0
  214. package/dist/components/message-scroller/useMessageScrollerEngine.js.map +1 -0
  215. package/dist/components/message-scroller/useMessageScrollerScrollable.d.ts +5 -0
  216. package/dist/components/message-scroller/useMessageScrollerScrollable.js +13 -0
  217. package/dist/components/message-scroller/useMessageScrollerScrollable.js.map +1 -0
  218. package/dist/components/message-scroller/useMessageScrollerVisibility.d.ts +7 -0
  219. package/dist/components/message-scroller/useMessageScrollerVisibility.js +17 -0
  220. package/dist/components/message-scroller/useMessageScrollerVisibility.js.map +1 -0
  221. package/dist/components/popover/PopoverContent/PopoverContent.utils.d.ts +6 -13
  222. package/dist/components/popover/PopoverContent/PopoverContent.utils.js +7 -30
  223. package/dist/components/popover/PopoverContent/PopoverContent.utils.js.map +1 -1
  224. package/dist/components/questionnaire/Questionnaire/Questionnaire.d.ts +3 -0
  225. package/dist/components/questionnaire/Questionnaire/Questionnaire.js +68 -0
  226. package/dist/components/questionnaire/Questionnaire/Questionnaire.js.map +1 -0
  227. package/dist/components/questionnaire/Questionnaire/index.d.ts +1 -0
  228. package/dist/components/questionnaire/QuestionnaireActions/QuestionnaireActions.d.ts +3 -0
  229. package/dist/components/questionnaire/QuestionnaireActions/QuestionnaireActions.js +24 -0
  230. package/dist/components/questionnaire/QuestionnaireActions/QuestionnaireActions.js.map +1 -0
  231. package/dist/components/questionnaire/QuestionnaireActions/index.d.ts +1 -0
  232. package/dist/components/questionnaire/QuestionnaireChoice/QuestionnaireChoice.d.ts +3 -0
  233. package/dist/components/questionnaire/QuestionnaireChoice/QuestionnaireChoice.js +99 -0
  234. package/dist/components/questionnaire/QuestionnaireChoice/QuestionnaireChoice.js.map +1 -0
  235. package/dist/components/questionnaire/QuestionnaireChoice/index.d.ts +1 -0
  236. package/dist/components/questionnaire/QuestionnaireChoice/useQuestionnaireChoice.d.ts +38 -0
  237. package/dist/components/questionnaire/QuestionnaireChoice/useQuestionnaireChoice.js +67 -0
  238. package/dist/components/questionnaire/QuestionnaireChoice/useQuestionnaireChoice.js.map +1 -0
  239. package/dist/components/questionnaire/QuestionnaireChoices/QuestionnaireChoices.d.ts +3 -0
  240. package/dist/components/questionnaire/QuestionnaireChoices/QuestionnaireChoices.js +28 -0
  241. package/dist/components/questionnaire/QuestionnaireChoices/QuestionnaireChoices.js.map +1 -0
  242. package/dist/components/questionnaire/QuestionnaireChoices/index.d.ts +1 -0
  243. package/dist/components/questionnaire/QuestionnaireDescription/QuestionnaireDescription.d.ts +4 -0
  244. package/dist/components/questionnaire/QuestionnaireDescription/QuestionnaireDescription.js +30 -0
  245. package/dist/components/questionnaire/QuestionnaireDescription/QuestionnaireDescription.js.map +1 -0
  246. package/dist/components/questionnaire/QuestionnaireDescription/index.d.ts +1 -0
  247. package/dist/components/questionnaire/QuestionnaireError/QuestionnaireError.d.ts +4 -0
  248. package/dist/components/questionnaire/QuestionnaireError/QuestionnaireError.js +43 -0
  249. package/dist/components/questionnaire/QuestionnaireError/QuestionnaireError.js.map +1 -0
  250. package/dist/components/questionnaire/QuestionnaireError/index.d.ts +1 -0
  251. package/dist/components/questionnaire/QuestionnaireInput/QuestionnaireInput.d.ts +3 -0
  252. package/dist/components/questionnaire/QuestionnaireInput/QuestionnaireInput.js +78 -0
  253. package/dist/components/questionnaire/QuestionnaireInput/QuestionnaireInput.js.map +1 -0
  254. package/dist/components/questionnaire/QuestionnaireInput/index.d.ts +1 -0
  255. package/dist/components/questionnaire/QuestionnaireInput/useQuestionnaireInput.d.ts +37 -0
  256. package/dist/components/questionnaire/QuestionnaireInput/useQuestionnaireInput.js +58 -0
  257. package/dist/components/questionnaire/QuestionnaireInput/useQuestionnaireInput.js.map +1 -0
  258. package/dist/components/questionnaire/QuestionnaireItem/QuestionnaireItem.d.ts +3 -0
  259. package/dist/components/questionnaire/QuestionnaireItem/QuestionnaireItem.js +89 -0
  260. package/dist/components/questionnaire/QuestionnaireItem/QuestionnaireItem.js.map +1 -0
  261. package/dist/components/questionnaire/QuestionnaireItem/index.d.ts +1 -0
  262. package/dist/components/questionnaire/QuestionnaireNavigation/QuestionnaireNavigation.d.ts +5 -0
  263. package/dist/components/questionnaire/QuestionnaireNavigation/QuestionnaireNavigation.js +104 -0
  264. package/dist/components/questionnaire/QuestionnaireNavigation/QuestionnaireNavigation.js.map +1 -0
  265. package/dist/components/questionnaire/QuestionnaireNavigation/index.d.ts +1 -0
  266. package/dist/components/questionnaire/QuestionnaireProgress/QuestionnaireProgress.d.ts +4 -0
  267. package/dist/components/questionnaire/QuestionnaireProgress/QuestionnaireProgress.js +62 -0
  268. package/dist/components/questionnaire/QuestionnaireProgress/QuestionnaireProgress.js.map +1 -0
  269. package/dist/components/questionnaire/QuestionnaireProgress/index.d.ts +1 -0
  270. package/dist/components/questionnaire/QuestionnaireTitle/QuestionnaireTitle.d.ts +4 -0
  271. package/dist/components/questionnaire/QuestionnaireTitle/QuestionnaireTitle.js +27 -0
  272. package/dist/components/questionnaire/QuestionnaireTitle/QuestionnaireTitle.js.map +1 -0
  273. package/dist/components/questionnaire/QuestionnaireTitle/index.d.ts +1 -0
  274. package/dist/components/questionnaire/index.d.ts +12 -0
  275. package/dist/components/questionnaire/index.js +12 -0
  276. package/dist/components/questionnaire/questionnaire.context.d.ts +65 -0
  277. package/dist/components/questionnaire/questionnaire.context.js +18 -0
  278. package/dist/components/questionnaire/questionnaire.context.js.map +1 -0
  279. package/dist/components/questionnaire/questionnaire.types.d.ts +82 -0
  280. package/dist/components/questionnaire/questionnaire.utils.d.ts +24 -0
  281. package/dist/components/questionnaire/questionnaire.utils.js +38 -0
  282. package/dist/components/questionnaire/questionnaire.utils.js.map +1 -0
  283. package/dist/components/questionnaire/useQuestionnaireItem.d.ts +34 -0
  284. package/dist/components/questionnaire/useQuestionnaireItem.js +141 -0
  285. package/dist/components/questionnaire/useQuestionnaireItem.js.map +1 -0
  286. package/dist/components/questionnaire/useQuestionnaireRoot.d.ts +30 -0
  287. package/dist/components/questionnaire/useQuestionnaireRoot.js +144 -0
  288. package/dist/components/questionnaire/useQuestionnaireRoot.js.map +1 -0
  289. package/dist/components/resizable/ResizableHandle/ResizableHandle.d.ts +6 -0
  290. package/dist/components/resizable/ResizableHandle/ResizableHandle.js +92 -0
  291. package/dist/components/resizable/ResizableHandle/ResizableHandle.js.map +1 -0
  292. package/dist/components/resizable/ResizableHandle/ResizableHandle.styles.d.ts +3 -0
  293. package/dist/components/resizable/ResizableHandle/ResizableHandle.styles.js +6 -0
  294. package/dist/components/resizable/ResizableHandle/ResizableHandle.styles.js.map +1 -0
  295. package/dist/components/resizable/ResizableHandle/index.d.ts +1 -0
  296. package/dist/components/resizable/ResizableHandle/useResizableHandle.d.ts +17 -0
  297. package/dist/components/resizable/ResizableHandle/useResizableHandle.js +72 -0
  298. package/dist/components/resizable/ResizableHandle/useResizableHandle.js.map +1 -0
  299. package/dist/components/resizable/ResizablePanel/ResizablePanel.d.ts +6 -0
  300. package/dist/components/resizable/ResizablePanel/ResizablePanel.js +91 -0
  301. package/dist/components/resizable/ResizablePanel/ResizablePanel.js.map +1 -0
  302. package/dist/components/resizable/ResizablePanel/index.d.ts +1 -0
  303. package/dist/components/resizable/ResizablePanelGroup/ResizablePanelGroup.d.ts +6 -0
  304. package/dist/components/resizable/ResizablePanelGroup/ResizablePanelGroup.js +66 -0
  305. package/dist/components/resizable/ResizablePanelGroup/ResizablePanelGroup.js.map +1 -0
  306. package/dist/components/resizable/ResizablePanelGroup/index.d.ts +1 -0
  307. package/dist/components/resizable/index.d.ts +4 -0
  308. package/dist/components/resizable/index.js +4 -0
  309. package/dist/components/resizable/resizable.context.d.ts +38 -0
  310. package/dist/components/resizable/resizable.context.js +12 -0
  311. package/dist/components/resizable/resizable.context.js.map +1 -0
  312. package/dist/components/resizable/resizable.types.d.ts +76 -0
  313. package/dist/components/resizable/resizable.utils.d.ts +16 -0
  314. package/dist/components/resizable/resizable.utils.js +45 -0
  315. package/dist/components/resizable/resizable.utils.js.map +1 -0
  316. package/dist/components/resizable/useResizablePanelGroup.d.ts +22 -0
  317. package/dist/components/resizable/useResizablePanelGroup.js +176 -0
  318. package/dist/components/resizable/useResizablePanelGroup.js.map +1 -0
  319. package/dist/components/scroll-arrows/ScrollArrowButton.d.ts +7 -4
  320. package/dist/components/scroll-arrows/ScrollArrowButton.js +28 -19
  321. package/dist/components/scroll-arrows/ScrollArrowButton.js.map +1 -1
  322. package/dist/components/scroll-arrows/ScrollArrows.d.ts +5 -2
  323. package/dist/components/scroll-arrows/ScrollArrows.js +6 -0
  324. package/dist/components/scroll-arrows/ScrollArrows.js.map +1 -1
  325. package/dist/components/scroll-arrows/ScrollArrows.types.d.ts +7 -0
  326. package/dist/components/sheet/Sheet/Sheet.d.ts +6 -0
  327. package/dist/components/sheet/Sheet/Sheet.js +10 -0
  328. package/dist/components/sheet/Sheet/Sheet.js.map +1 -0
  329. package/dist/components/sheet/Sheet/index.d.ts +1 -0
  330. package/dist/components/sheet/SheetClose/SheetClose.d.ts +6 -0
  331. package/dist/components/sheet/SheetClose/SheetClose.js +39 -0
  332. package/dist/components/sheet/SheetClose/SheetClose.js.map +1 -0
  333. package/dist/components/sheet/SheetClose/index.d.ts +1 -0
  334. package/dist/components/sheet/SheetContent/SheetContent.d.ts +6 -0
  335. package/dist/components/sheet/SheetContent/SheetContent.js +48 -0
  336. package/dist/components/sheet/SheetContent/SheetContent.js.map +1 -0
  337. package/dist/components/sheet/SheetContent/SheetContent.styles.d.ts +10 -0
  338. package/dist/components/sheet/SheetContent/SheetContent.styles.js +17 -0
  339. package/dist/components/sheet/SheetContent/SheetContent.styles.js.map +1 -0
  340. package/dist/components/sheet/SheetContent/index.d.ts +1 -0
  341. package/dist/components/sheet/SheetDescription/SheetDescription.d.ts +2 -0
  342. package/dist/components/sheet/SheetDescription/SheetDescription.js +25 -0
  343. package/dist/components/sheet/SheetDescription/SheetDescription.js.map +1 -0
  344. package/dist/components/sheet/SheetDescription/SheetDescription.styles.d.ts +1 -0
  345. package/dist/components/sheet/SheetDescription/SheetDescription.styles.js +6 -0
  346. package/dist/components/sheet/SheetDescription/SheetDescription.styles.js.map +1 -0
  347. package/dist/components/sheet/SheetDescription/index.d.ts +1 -0
  348. package/dist/components/sheet/SheetFooter/SheetFooter.d.ts +2 -0
  349. package/dist/components/sheet/SheetFooter/SheetFooter.js +24 -0
  350. package/dist/components/sheet/SheetFooter/SheetFooter.js.map +1 -0
  351. package/dist/components/sheet/SheetFooter/index.d.ts +1 -0
  352. package/dist/components/sheet/SheetHeader/SheetHeader.d.ts +2 -0
  353. package/dist/components/sheet/SheetHeader/SheetHeader.js +24 -0
  354. package/dist/components/sheet/SheetHeader/SheetHeader.js.map +1 -0
  355. package/dist/components/sheet/SheetHeader/index.d.ts +1 -0
  356. package/dist/components/sheet/SheetTitle/SheetTitle.d.ts +3 -0
  357. package/dist/components/sheet/SheetTitle/SheetTitle.js +25 -0
  358. package/dist/components/sheet/SheetTitle/SheetTitle.js.map +1 -0
  359. package/dist/components/sheet/SheetTitle/SheetTitle.styles.d.ts +1 -0
  360. package/dist/components/sheet/SheetTitle/SheetTitle.styles.js +6 -0
  361. package/dist/components/sheet/SheetTitle/SheetTitle.styles.js.map +1 -0
  362. package/dist/components/sheet/SheetTitle/index.d.ts +1 -0
  363. package/dist/components/sheet/SheetTrigger/SheetTrigger.d.ts +8 -0
  364. package/dist/components/sheet/SheetTrigger/SheetTrigger.js +32 -0
  365. package/dist/components/sheet/SheetTrigger/SheetTrigger.js.map +1 -0
  366. package/dist/components/sheet/SheetTrigger/index.d.ts +1 -0
  367. package/dist/components/sheet/index.d.ts +9 -0
  368. package/dist/components/sheet/index.js +9 -0
  369. package/dist/components/sheet/sheet.types.d.ts +19 -0
  370. package/dist/components/tooltip/TooltipContent/TooltipContent.js +1 -1
  371. package/dist/components/tooltip/TooltipContent/TooltipContent.utils.d.ts +5 -49
  372. package/dist/components/tooltip/TooltipContent/TooltipContent.utils.js +10 -39
  373. package/dist/components/tooltip/TooltipContent/TooltipContent.utils.js.map +1 -1
  374. package/dist/components/tooltip/TooltipContent/useTooltipContent.js +6 -5
  375. package/dist/components/tooltip/TooltipContent/useTooltipContent.js.map +1 -1
  376. package/dist/hooks/useScrollEdges.d.ts +3 -0
  377. package/dist/hooks/useScrollEdges.js +18 -16
  378. package/dist/hooks/useScrollEdges.js.map +1 -1
  379. package/dist/index.d.ts +9 -0
  380. package/dist/index.js +253 -193
  381. package/dist/lib/positioner/index.d.ts +1 -0
  382. package/dist/lib/positioner/utils/floating.d.ts +25 -0
  383. package/dist/lib/positioner/utils/floating.js +42 -0
  384. package/dist/lib/positioner/utils/floating.js.map +1 -0
  385. package/dist/ui.css +1 -1
  386. package/package.json +1 -1
@@ -0,0 +1,45 @@
1
+ //#region src/components/resizable/resizable.utils.ts
2
+ function e(e, t) {
3
+ if (e == null) return t;
4
+ if (typeof e == "number") return Number.isFinite(e) ? e : t;
5
+ let n = e.trim(), r = (n.endsWith("%"), Number.parseFloat(n));
6
+ return Number.isFinite(r) ? r : t;
7
+ }
8
+ function t(e, t, n) {
9
+ return Math.min(n, Math.max(t, e));
10
+ }
11
+ function n(e) {
12
+ return Math.round(e * 100) / 100;
13
+ }
14
+ function r(e, n) {
15
+ if (e.length === 0) return [];
16
+ let r = e.map((e, r) => t(e, n[r].min, n[r].max)), i = r.reduce((e, t) => e + t, 0);
17
+ if (i <= 0) {
18
+ let t = 100 / e.length;
19
+ return e.map(() => t);
20
+ }
21
+ for (let e = 0; e < r.length; e += 1) r[e] = r[e] * 100 / i;
22
+ for (let e = 0; e < 4; e += 1) {
23
+ let e = 0, t = [];
24
+ for (let i = 0; i < r.length; i += 1) {
25
+ let a = n[i];
26
+ r[i] > a.max ? (r[i] = a.max, e += a.max) : r[i] < a.min ? (r[i] = a.min, e += a.min) : t.push(i);
27
+ }
28
+ if (t.length === 0) break;
29
+ let i = 100 - e, a = t.reduce((e, t) => e + r[t], 0);
30
+ if (a <= 0) {
31
+ let e = i / t.length;
32
+ for (let n of t) r[n] = e;
33
+ break;
34
+ }
35
+ for (let e of t) r[e] = r[e] * i / a;
36
+ }
37
+ return r;
38
+ }
39
+ function i(e) {
40
+ return e.startsWith("--") ? e : e.replace(/[A-Z]/g, (e) => `-${e.toLowerCase()}`);
41
+ }
42
+ //#endregion
43
+ export { t as clamp, r as normalizeSizes, e as parseSize, n as roundPercent, i as toKebabCase };
44
+
45
+ //# sourceMappingURL=resizable.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resizable.utils.js","names":["parseSize","value","fallback","trimmed","numeric","clamp","max","min","roundPercent","normalizeSizes","raw","result","bounds","index","sum","acc","equal","iteration","fixedSum","free","bound","target","freeSum","toKebabCase","key","char"],"sources":["../../../src/components/resizable/resizable.utils.ts"],"sourcesContent":["/** 解析尺寸:number/`\"25%\"`/`\"25\"` 都按百分比处理(不支持 px,按需再扩展) */\nexport function parseSize(\n value: number | string | undefined,\n fallback: number,\n): number {\n if (value === undefined || value === null) return fallback;\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? value : fallback;\n }\n const trimmed = value.trim();\n const numeric = trimmed.endsWith(\"%\")\n ? Number.parseFloat(trimmed)\n : Number.parseFloat(trimmed);\n return Number.isFinite(numeric) ? numeric : fallback;\n}\n\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\n/** 百分比保留 2 位小数,避免 onLayoutChange/layout 输出出现长尾浮点 */\nexport function roundPercent(value: number): number {\n return Math.round(value * 100) / 100;\n}\n\n/**\n * 把一组原始权重归一化到总和 100,并在迭代中尊重每个面板的上下界。\n * 之所以不用简单的按比例缩放:min/max 会在缩放后再次越界,需要固定越界项、\n * 把剩余空间按权重分给其余项(最多 4 轮即可收敛)。\n */\nexport function normalizeSizes(\n raw: number[],\n bounds: Array<{ min: number; max: number }>,\n): number[] {\n if (raw.length === 0) return [];\n const result = raw.map((value, index) =>\n clamp(value, bounds[index]!.min, bounds[index]!.max),\n );\n const sum = result.reduce((acc, value) => acc + value, 0);\n if (sum <= 0) {\n const equal = 100 / raw.length;\n return raw.map(() => equal);\n }\n for (let index = 0; index < result.length; index += 1) {\n result[index] = (result[index]! * 100) / sum;\n }\n\n for (let iteration = 0; iteration < 4; iteration += 1) {\n let fixedSum = 0;\n const free: number[] = [];\n for (let index = 0; index < result.length; index += 1) {\n const bound = bounds[index]!;\n if (result[index]! > bound.max) {\n result[index] = bound.max;\n fixedSum += bound.max;\n } else if (result[index]! < bound.min) {\n result[index] = bound.min;\n fixedSum += bound.min;\n } else {\n free.push(index);\n }\n }\n if (free.length === 0) break;\n const target = 100 - fixedSum;\n const freeSum = free.reduce((acc, index) => acc + result[index]!, 0);\n if (freeSum <= 0) {\n const equal = target / free.length;\n for (const index of free) result[index] = equal;\n break;\n }\n for (const index of free) {\n result[index] = (result[index]! * target) / freeSum;\n }\n }\n return result;\n}\n\n/** camelCase -> kebab-case;CSS 自定义属性(--x)原样保留 */\nexport function toKebabCase(key: string): string {\n if (key.startsWith(\"--\")) return key;\n return key.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`);\n}\n"],"mappings":";AACA,SAAgBA,EACd,GACA,GACQ;CACR,IAAIC,KAAiC,MAAM,OAAOC;CAClD,IAAI,OAAOD,KAAU,UACnB,OAAO,OAAO,SAASA,CAAK,IAAIA,IAAQC;CAE1C,IAAMC,IAAUF,EAAM,KAAK,GACrBG,KAAUD,EAAQ,SAAS,GAAG,GAChC,OAAO,WAAWA,CAAO;CAE7B,OAAO,OAAO,SAASC,CAAO,IAAIA,IAAUF;AAC9C;AAEA,SAAgBG,EAAM,GAAe,GAAa,GAAqB;CACrE,OAAO,KAAK,IAAIC,GAAK,KAAK,IAAIC,GAAKN,CAAK,CAAC;AAC3C;AAGA,SAAgBO,EAAa,GAAuB;CAClD,OAAO,KAAK,MAAMP,IAAQ,GAAG,IAAI;AACnC;AAOA,SAAgBQ,EACd,GACA,GACU;CACV,IAAIC,EAAI,WAAW,GAAG,OAAO,CAAC;CAC9B,IAAMC,IAASD,EAAI,KAAK,GAAO,MAC7BL,EAAMJ,GAAOW,EAAOC,EAAM,CAAE,KAAKD,EAAOC,EAAM,CAAE,GAAG,CACrD,GACMC,IAAMH,EAAO,QAAQ,GAAK,MAAUI,IAAMd,GAAO,CAAC;CACxD,IAAIa,KAAO,GAAG;EACZ,IAAME,IAAQ,MAAMN,EAAI;EACxB,OAAOA,EAAI,UAAUM,CAAK;CAC5B;CACA,KAAK,IAAIH,IAAQ,GAAGA,IAAQF,EAAO,QAAQ,KAAS,GAClD,EAAOE,KAAUF,EAAOE,KAAU,MAAOC;CAG3C,KAAK,IAAIG,IAAY,GAAGA,IAAY,GAAG,KAAa,GAAG;EACrD,IAAIC,IAAW,GACTC,IAAiB,CAAC;EACxB,KAAK,IAAIN,IAAQ,GAAGA,IAAQF,EAAO,QAAQ,KAAS,GAAG;GACrD,IAAMS,IAAQR,EAAOC;GACrB,AAAIF,EAAOE,KAAUO,EAAM,OACzB,EAAOP,KAASO,EAAM,KACtB,KAAYA,EAAM,OACTT,EAAOE,KAAUO,EAAM,OAChC,EAAOP,KAASO,EAAM,KACtB,KAAYA,EAAM,OAElBD,EAAK,KAAKN,CAAK;EAEnB;EACA,IAAIM,EAAK,WAAW,GAAG;EACvB,IAAME,IAAS,MAAMH,GACfI,IAAUH,EAAK,QAAQ,GAAK,MAAUJ,IAAMJ,EAAOE,IAAS,CAAC;EACnE,IAAIS,KAAW,GAAG;GAChB,IAAMN,IAAQK,IAASF,EAAK;GAC5B,KAAK,IAAMN,KAASM,GAAM,EAAON,KAASG;GAC1C;EACF;EACA,KAAK,IAAMH,KAASM,GAClB,EAAON,KAAUF,EAAOE,KAAUQ,IAAUC;CAEhD;CACA,OAAOX;AACT;AAGA,SAAgBY,EAAY,GAAqB;CAE/C,OADIC,EAAI,WAAW,IAAI,IAAUA,IAC1BA,EAAI,QAAQ,WAAW,MAAS,IAAIC,EAAK,YAAY,GAAG;AACjE"}
@@ -0,0 +1,22 @@
1
+ import { Accessor } from 'solid-js';
2
+ import { ResizablePanelGroupContextValue } from './resizable.context';
3
+ import { ResizableLayout, ResizableOrientation } from './resizable.types';
4
+ interface Options {
5
+ orientation: Accessor<ResizableOrientation>;
6
+ defaultLayout: Accessor<ResizableLayout | undefined>;
7
+ onLayoutChange: (layout: ResizableLayout) => void;
8
+ autoSaveId: Accessor<string | undefined>;
9
+ storage: Accessor<Storage | undefined>;
10
+ keyboardResizeBy: Accessor<number>;
11
+ }
12
+ /**
13
+ * Resizable 的布局引擎(对齐 react-resizable-panels v4 的核心语义,但按 Solid 重写):
14
+ * - 尺寸用**百分比权重**存在 store 里,渲染时映射为 `flex-grow`,拖拽只更新相邻两个
15
+ * panel 的两个键,子节点不重渲染(细粒度更新);
16
+ * - panel 在挂载时注册(顺序即 DOM 顺序),handle 通过相邻兄弟节点解析前后 panel;
17
+ * - 约束/min/max/collapsible 吸附、归一化到 100、以及命令式 collapse/expand;
18
+ * - 拖拽用 pointer capture,pointermove 由调用方用 rAF 合并,避免高频写 store;
19
+ * - autoSaveId + storage 做布局持久化。
20
+ */
21
+ export declare function useResizablePanelGroup(options: Options): ResizablePanelGroupContextValue;
22
+ export {};
@@ -0,0 +1,176 @@
1
+ import { clamp as e, normalizeSizes as t, roundPercent as n } from "./resizable.utils.js";
2
+ import { createSignal as r } from "solid-js";
3
+ import { createStore as i, produce as a } from "solid-js/store";
4
+ //#region src/components/resizable/useResizablePanelGroup.ts
5
+ var o = .001, s = "neut-resizable:";
6
+ function c(c) {
7
+ let [l, u] = r(), [d, f] = r(!1), [p, m] = i({}), h = /* @__PURE__ */ new Map(), g = [], _ = !1, v = /* @__PURE__ */ new Map(), y = () => g.map((e) => h.get(e)).filter((e) => !!e), b = (e) => e.collapsible() ? e.collapsedSize() : e.minSize(), x = (e, t) => e.collapsible() && t <= e.collapsedSize() + o, S = () => c.storage() ?? (typeof localStorage < "u" ? localStorage : void 0), C = () => {
8
+ let e = c.autoSaveId();
9
+ return e ? `${s}${e}` : void 0;
10
+ }, w = () => {
11
+ let e = {};
12
+ for (let t of y()) e[t.id] = n(p[t.id] ?? 0);
13
+ return e;
14
+ }, T = (e) => {
15
+ let t = C(), n = S();
16
+ if (t && n) try {
17
+ n.setItem(t, JSON.stringify(e));
18
+ } catch {}
19
+ }, E = () => c.onLayoutChange(w()), D = () => {
20
+ let e = w();
21
+ c.onLayoutChange(e), T(e);
22
+ }, O = () => {
23
+ let e = C(), t = S();
24
+ if (e && t) try {
25
+ let n = t.getItem(e);
26
+ if (!n) return;
27
+ let r = JSON.parse(n);
28
+ return typeof r == "object" && r ? r : void 0;
29
+ } catch {
30
+ return;
31
+ }
32
+ }, k = () => y().map((e) => ({
33
+ min: b(e),
34
+ max: e.maxSize()
35
+ })), A = (e, t, r) => {
36
+ if (e.onResize?.(n(r)), !e.collapsible()) return;
37
+ let i = x(e, t), a = x(e, r);
38
+ !i && a ? e.onCollapse?.() : i && !a && e.onExpand?.();
39
+ }, j = (e, t = !0) => {
40
+ let n = y(), r = n.map((e) => p[e.id] ?? 0);
41
+ m(a((t) => {
42
+ n.forEach((n, r) => {
43
+ let i = e[r];
44
+ i !== void 0 && (t[n.id] = i);
45
+ });
46
+ })), t && n.forEach((t, n) => {
47
+ let i = e[n];
48
+ i !== void 0 && A(t, r[n], i);
49
+ });
50
+ }, M = () => {
51
+ let e = y(), t = O() ?? c.defaultLayout(), n = e.map((e) => {
52
+ let n = t?.[e.id];
53
+ return n === void 0 ? e.defaultSize : n;
54
+ }), r = n.filter((e) => e !== void 0), i = n.length - r.length, a = r.reduce((e, t) => e + t, 0), o = Math.max(0, 100 - a), s = i > 0 ? o / i : 0;
55
+ return n.map((e) => e ?? s);
56
+ }, N = () => {
57
+ _ || typeof window < "u" && y().length !== 0 && (_ = !0, j(t(M(), k()), !1), D());
58
+ }, P = () => {
59
+ typeof window < "u" && queueMicrotask(() => {
60
+ _ || N();
61
+ });
62
+ }, F = (e) => {
63
+ if (h.set(e.element, e), g = [...g, e.element], !_) P();
64
+ else if (p[e.id] === void 0) {
65
+ let n = y(), r = n.map((t) => t.id === e.id ? t.defaultSize ?? 100 / n.length : p[t.id] ?? 0);
66
+ j(t(r, k())), D();
67
+ }
68
+ return () => {
69
+ h.delete(e.element), g = g.filter((t) => t !== e.element), m(a((t) => {
70
+ delete t[e.id];
71
+ }));
72
+ };
73
+ }, I = (e) => {
74
+ let t = e.previousElementSibling;
75
+ for (; t && !h.has(t);) t = t.previousElementSibling;
76
+ let n = e.nextElementSibling;
77
+ for (; n && !h.has(n);) n = n.nextElementSibling;
78
+ if (!t || !n) return;
79
+ let r = h.get(t), i = h.get(n), a = p[r.id] ?? 0;
80
+ return {
81
+ prev: r,
82
+ next: i,
83
+ prevSize: a,
84
+ total: a + (p[i.id] ?? 0)
85
+ };
86
+ }, L = (t, n, r, i) => {
87
+ let s = Math.max(b(t), i - n.maxSize()), c = Math.min(t.maxSize(), i - b(n)), l = e(r, s, c);
88
+ if (t.collapsible() && l < t.minSize() - o && l > t.collapsedSize() + o && (l = l - t.collapsedSize() < t.minSize() - l ? t.collapsedSize() : t.minSize()), n.collapsible() && i - l < n.minSize() - o && i - l > n.collapsedSize() + o) {
89
+ let e = i - l;
90
+ l = i - (e - n.collapsedSize() < n.minSize() - e ? n.collapsedSize() : n.minSize());
91
+ }
92
+ l = e(l, s, c);
93
+ let u = p[t.id] ?? 0, d = p[n.id] ?? 0;
94
+ m(a((e) => {
95
+ e[t.id] = l, e[n.id] = i - l;
96
+ })), A(t, u, l), A(n, d, i - l);
97
+ }, R = (e, t) => {
98
+ let n = I(e);
99
+ n && (L(n.prev, n.next, t, n.total), E());
100
+ }, z = (e, t) => {
101
+ let n = I(e);
102
+ n && (L(n.prev, n.next, n.prevSize + t, n.total), D());
103
+ }, B = (e) => {
104
+ let t = y().find((t) => t.id === e);
105
+ if (!t?.collapsible()) return !1;
106
+ let n = p[e] ?? 0;
107
+ return !x(t, n) && (v.set(e, n), H(t, t.collapsedSize()), D(), !0);
108
+ }, V = (e) => {
109
+ let t = y().find((t) => t.id === e);
110
+ if (!t?.collapsible()) return !1;
111
+ let n = p[e] ?? 0;
112
+ if (!x(t, n)) return !1;
113
+ let r = v.get(e) ?? t.minSize();
114
+ return H(t, Math.max(r, t.minSize())), D(), !0;
115
+ }, H = (e, t) => {
116
+ let n = g.indexOf(e.element), r = g[n + 1], i = g[n - 1], a = r ? h.get(r) : void 0, o = i ? h.get(i) : void 0;
117
+ if (a) {
118
+ let n = (p[e.id] ?? 0) + (p[a.id] ?? 0);
119
+ L(e, a, t, n);
120
+ } else if (o) {
121
+ let n = (p[o.id] ?? 0) + (p[e.id] ?? 0);
122
+ L(o, e, n - t, n);
123
+ } else m(e.id, 100);
124
+ };
125
+ return {
126
+ orientation: c.orientation,
127
+ sizes: () => p,
128
+ groupElement: l,
129
+ setGroupElement: u,
130
+ dragging: d,
131
+ keyboardResizeBy: c.keyboardResizeBy,
132
+ registerPanel: F,
133
+ resolveAdjacent: (e) => I(e),
134
+ setAdjacentSize: R,
135
+ nudgeAdjacent: z,
136
+ toggleHandleCollapse: (e) => {
137
+ let t = I(e);
138
+ if (!t) return;
139
+ let { prev: n, next: r } = t;
140
+ if (n.collapsible()) {
141
+ x(n, p[n.id] ?? 0) ? V(n.id) : B(n.id);
142
+ return;
143
+ }
144
+ if (r.collapsible()) {
145
+ x(r, p[r.id] ?? 0) ? V(r.id) : B(r.id);
146
+ return;
147
+ }
148
+ },
149
+ groupSizePx: () => {
150
+ let e = l();
151
+ return e ? c.orientation() === "horizontal" ? e.clientWidth : e.clientHeight : 0;
152
+ },
153
+ isRtl: () => {
154
+ let e = l();
155
+ return e ? window.getComputedStyle(e).direction === "rtl" : !1;
156
+ },
157
+ beginDrag: () => f(!0),
158
+ endDrag: () => f(!1),
159
+ commitLayout: D,
160
+ setPanelSize: (e, t) => {
161
+ let n = y().find((t) => t.id === e);
162
+ n && (H(n, t), D());
163
+ },
164
+ collapsePanel: B,
165
+ expandPanel: V,
166
+ isPanelCollapsed: (e) => {
167
+ let t = y().find((t) => t.id === e);
168
+ return t ? x(t, p[e] ?? 0) : !1;
169
+ },
170
+ getPanelSize: (e) => p[e] ?? 0
171
+ };
172
+ }
173
+ //#endregion
174
+ export { c as useResizablePanelGroup };
175
+
176
+ //# sourceMappingURL=useResizablePanelGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResizablePanelGroup.js","names":["EPSILON","STORAGE_PREFIX","useResizablePanelGroup","groupElement","setGroupElement","createSignal","dragging","setDragging","store","setStore","createStore","metas","order","initialized","collapsedMemory","orderedMetas","element","meta","effMin","isCollapsedSize","size","storageOf","options","storageKey","id","layout","result","roundPercent","persist","key","storage","next","notify","commit","readSaved","raw","parsed","bounds","reportResize","newSize","was","oldSize","now","applySizes","list","before","produce","value","values","index","report","buildInitial","saved","fromLayout","defined","unknown","used","acc","remaining","fill","initialize","normalizeSizes","scheduleInitialize","registerPanel","item","draft","adjacentOf","prevEl","handleEl","nextEl","prev","prevSize","applyPair","lo","total","hi","clamp","targetPrev","rest","prevOld","nextOld","setAdjacentSize","adjacent","targetPrevSize","nudgeAdjacent","deltaPercent","collapsePanel","current","applyPanelTarget","expandPanel","remembered","nextElement","prevElement","nextMeta","prevMeta","targetSize"],"sources":["../../../src/components/resizable/useResizablePanelGroup.ts"],"sourcesContent":["import { createSignal, type Accessor } from \"solid-js\";\nimport { createStore, produce } from \"solid-js/store\";\nimport type { ResizablePanelGroupContextValue } from \"./resizable.context\";\nimport type {\n ResizableLayout,\n ResizableOrientation,\n ResizablePanelMeta,\n} from \"./resizable.types\";\nimport { clamp, normalizeSizes, roundPercent } from \"./resizable.utils\";\n\nconst EPSILON = 0.001;\nconst STORAGE_PREFIX = \"neut-resizable:\";\n\ninterface Options {\n orientation: Accessor<ResizableOrientation>;\n defaultLayout: Accessor<ResizableLayout | undefined>;\n onLayoutChange: (layout: ResizableLayout) => void;\n autoSaveId: Accessor<string | undefined>;\n storage: Accessor<Storage | undefined>;\n keyboardResizeBy: Accessor<number>;\n}\n\n/**\n * Resizable 的布局引擎(对齐 react-resizable-panels v4 的核心语义,但按 Solid 重写):\n * - 尺寸用**百分比权重**存在 store 里,渲染时映射为 `flex-grow`,拖拽只更新相邻两个\n * panel 的两个键,子节点不重渲染(细粒度更新);\n * - panel 在挂载时注册(顺序即 DOM 顺序),handle 通过相邻兄弟节点解析前后 panel;\n * - 约束/min/max/collapsible 吸附、归一化到 100、以及命令式 collapse/expand;\n * - 拖拽用 pointer capture,pointermove 由调用方用 rAF 合并,避免高频写 store;\n * - autoSaveId + storage 做布局持久化。\n */\nexport function useResizablePanelGroup(\n options: Options,\n): ResizablePanelGroupContextValue {\n const [groupElement, setGroupElement] = createSignal<HTMLElement>();\n const [dragging, setDragging] = createSignal(false);\n const [store, setStore] = createStore<Record<string, number>>({});\n\n const metas = new Map<HTMLElement, ResizablePanelMeta>();\n let order: HTMLElement[] = [];\n let initialized = false;\n const collapsedMemory = new Map<string, number>();\n\n const orderedMetas = (): ResizablePanelMeta[] =>\n order\n .map((element) => metas.get(element))\n .filter((meta): meta is ResizablePanelMeta => !!meta);\n\n /** 可折叠时为 collapsedSize,否则为 minSize(即拖拽能到的最小值) */\n const effMin = (meta: ResizablePanelMeta) =>\n meta.collapsible() ? meta.collapsedSize() : meta.minSize();\n\n const isCollapsedSize = (meta: ResizablePanelMeta, size: number) =>\n meta.collapsible() && size <= meta.collapsedSize() + EPSILON;\n\n const storageOf = (): Storage | undefined =>\n options.storage() ??\n (typeof localStorage !== \"undefined\" ? localStorage : undefined);\n\n const storageKey = (): string | undefined => {\n const id = options.autoSaveId();\n return id ? `${STORAGE_PREFIX}${id}` : undefined;\n };\n\n const layout = (): ResizableLayout => {\n const result: ResizableLayout = {};\n for (const meta of orderedMetas()) {\n result[meta.id] = roundPercent(store[meta.id] ?? 0);\n }\n return result;\n };\n\n const persist = (next: ResizableLayout) => {\n const key = storageKey();\n const storage = storageOf();\n if (!key || !storage) return;\n try {\n storage.setItem(key, JSON.stringify(next));\n } catch {\n // 隐私模式等场景下忽略持久化失败\n }\n };\n\n /** 只通知布局变化(拖拽的每一帧),不写 storage */\n const notify = () => options.onLayoutChange(layout());\n\n /** 通知 + 持久化(离散操作与拖拽结束) */\n const commit = () => {\n const next = layout();\n options.onLayoutChange(next);\n persist(next);\n };\n\n const readSaved = (): ResizableLayout | undefined => {\n const key = storageKey();\n const storage = storageOf();\n if (!key || !storage) return undefined;\n try {\n const raw = storage.getItem(key);\n if (!raw) return undefined;\n const parsed = JSON.parse(raw) as unknown;\n return typeof parsed === \"object\" && parsed !== null\n ? (parsed as ResizableLayout)\n : undefined;\n } catch {\n return undefined;\n }\n };\n\n const bounds = () =>\n orderedMetas().map((meta) => ({\n min: effMin(meta),\n max: meta.maxSize(),\n }));\n\n const reportResize = (\n meta: ResizablePanelMeta,\n oldSize: number,\n newSize: number,\n ) => {\n meta.onResize?.(roundPercent(newSize));\n if (!meta.collapsible()) return;\n const was = isCollapsedSize(meta, oldSize);\n const now = isCollapsedSize(meta, newSize);\n if (!was && now) meta.onCollapse?.();\n else if (was && !now) meta.onExpand?.();\n };\n\n const applySizes = (values: number[], report = true) => {\n const list = orderedMetas();\n const before = list.map((meta) => store[meta.id] ?? 0);\n setStore(\n produce((draft) => {\n list.forEach((meta, index) => {\n const value = values[index];\n if (value !== undefined) draft[meta.id] = value;\n });\n }),\n );\n if (report) {\n list.forEach((meta, index) => {\n const value = values[index];\n if (value !== undefined) reportResize(meta, before[index]!, value);\n });\n }\n };\n\n const buildInitial = (): number[] => {\n const list = orderedMetas();\n const saved = readSaved() ?? options.defaultLayout();\n const raw = list.map((meta) => {\n const fromLayout = saved?.[meta.id];\n if (fromLayout !== undefined) return fromLayout;\n return meta.defaultSize;\n });\n const defined = raw.filter((value): value is number => value !== undefined);\n const unknown = raw.length - defined.length;\n const used = defined.reduce((acc, value) => acc + value, 0);\n const remaining = Math.max(0, 100 - used);\n const fill = unknown > 0 ? remaining / unknown : 0;\n return raw.map((value) => value ?? fill);\n };\n\n const initialize = () => {\n if (initialized) return;\n // SSR 不计算布局:首屏由 Panel 的 defaultSize fallback 撑起,客户端再归一化\n if (typeof window === \"undefined\") return;\n const list = orderedMetas();\n if (list.length === 0) return;\n initialized = true;\n applySizes(normalizeSizes(buildInitial(), bounds()), false);\n commit();\n };\n\n const scheduleInitialize = () => {\n if (typeof window === \"undefined\") return;\n queueMicrotask(() => {\n if (!initialized) initialize();\n });\n };\n\n const registerPanel = (meta: ResizablePanelMeta) => {\n metas.set(meta.element, meta);\n order = [...order, meta.element];\n if (!initialized) {\n scheduleInitialize();\n } else if (store[meta.id] === undefined) {\n // 动态新增:给它默认尺寸,并把其它面板等比压回 100\n const list = orderedMetas();\n const raw = list.map((item) =>\n item.id === meta.id\n ? (item.defaultSize ?? 100 / list.length)\n : (store[item.id] ?? 0),\n );\n applySizes(normalizeSizes(raw, bounds()));\n commit();\n }\n return () => {\n metas.delete(meta.element);\n order = order.filter((element) => element !== meta.element);\n setStore(\n produce((draft) => {\n delete draft[meta.id];\n }),\n );\n };\n };\n\n const adjacentOf = (handleEl: HTMLElement) => {\n let prevEl = handleEl.previousElementSibling as HTMLElement | null;\n while (prevEl && !metas.has(prevEl)) {\n prevEl = prevEl.previousElementSibling as HTMLElement | null;\n }\n let nextEl = handleEl.nextElementSibling as HTMLElement | null;\n while (nextEl && !metas.has(nextEl)) {\n nextEl = nextEl.nextElementSibling as HTMLElement | null;\n }\n if (!prevEl || !nextEl) return undefined;\n const prev = metas.get(prevEl)!;\n const next = metas.get(nextEl)!;\n const prevSize = store[prev.id] ?? 0;\n const nextSize = store[next.id] ?? 0;\n return { prev, next, prevSize, total: prevSize + nextSize };\n };\n\n const applyPair = (\n prev: ResizablePanelMeta,\n next: ResizablePanelMeta,\n targetPrev: number,\n total: number,\n ) => {\n const lo = Math.max(effMin(prev), total - next.maxSize());\n const hi = Math.min(prev.maxSize(), total - effMin(next));\n let size = clamp(targetPrev, lo, hi);\n\n // 折叠吸附:落在 (collapsedSize, minSize) 之间时贴向较近的一端\n if (\n prev.collapsible() &&\n size < prev.minSize() - EPSILON &&\n size > prev.collapsedSize() + EPSILON\n ) {\n size =\n size - prev.collapsedSize() < prev.minSize() - size\n ? prev.collapsedSize()\n : prev.minSize();\n }\n if (\n next.collapsible() &&\n total - size < next.minSize() - EPSILON &&\n total - size > next.collapsedSize() + EPSILON\n ) {\n const rest = total - size;\n size =\n total -\n (rest - next.collapsedSize() < next.minSize() - rest\n ? next.collapsedSize()\n : next.minSize());\n }\n size = clamp(size, lo, hi);\n\n const prevOld = store[prev.id] ?? 0;\n const nextOld = store[next.id] ?? 0;\n setStore(\n produce((draft) => {\n draft[prev.id] = size;\n draft[next.id] = total - size;\n }),\n );\n reportResize(prev, prevOld, size);\n reportResize(next, nextOld, total - size);\n };\n\n const setAdjacentSize = (handleEl: HTMLElement, targetPrevSize: number) => {\n const adjacent = adjacentOf(handleEl);\n if (!adjacent) return;\n applyPair(adjacent.prev, adjacent.next, targetPrevSize, adjacent.total);\n // 拖拽帧只通知,持久化留到 pointerup 的 commitLayout\n notify();\n };\n\n const nudgeAdjacent = (handleEl: HTMLElement, deltaPercent: number) => {\n const adjacent = adjacentOf(handleEl);\n if (!adjacent) return;\n applyPair(\n adjacent.prev,\n adjacent.next,\n adjacent.prevSize + deltaPercent,\n adjacent.total,\n );\n commit();\n };\n\n const collapsePanel = (id: string) => {\n const meta = orderedMetas().find((item) => item.id === id);\n if (!meta?.collapsible()) return false;\n const current = store[id] ?? 0;\n if (isCollapsedSize(meta, current)) return false;\n collapsedMemory.set(id, current);\n applyPanelTarget(meta, meta.collapsedSize());\n commit();\n return true;\n };\n\n const expandPanel = (id: string) => {\n const meta = orderedMetas().find((item) => item.id === id);\n if (!meta?.collapsible()) return false;\n const current = store[id] ?? 0;\n if (!isCollapsedSize(meta, current)) return false;\n const remembered = collapsedMemory.get(id) ?? meta.minSize();\n applyPanelTarget(meta, Math.max(remembered, meta.minSize()));\n commit();\n return true;\n };\n\n /** 命令式设置单个 panel,并把它与相邻 panel 之间重新分配 */\n const applyPanelTarget = (meta: ResizablePanelMeta, targetSize: number) => {\n const index = order.indexOf(meta.element);\n const nextElement = order[index + 1];\n const prevElement = order[index - 1];\n const nextMeta = nextElement ? metas.get(nextElement) : undefined;\n const prevMeta = prevElement ? metas.get(prevElement) : undefined;\n if (nextMeta) {\n const total = (store[meta.id] ?? 0) + (store[nextMeta.id] ?? 0);\n applyPair(meta, nextMeta, targetSize, total);\n } else if (prevMeta) {\n const total = (store[prevMeta.id] ?? 0) + (store[meta.id] ?? 0);\n applyPair(prevMeta, meta, total - targetSize, total);\n } else {\n setStore(meta.id, 100);\n }\n };\n\n const setPanelSize = (id: string, size: number) => {\n const meta = orderedMetas().find((item) => item.id === id);\n if (!meta) return;\n applyPanelTarget(meta, size);\n commit();\n };\n\n const toggleHandleCollapse = (handleEl: HTMLElement) => {\n const adjacent = adjacentOf(handleEl);\n if (!adjacent) return;\n const { prev, next } = adjacent;\n if (prev.collapsible()) {\n if (isCollapsedSize(prev, store[prev.id] ?? 0)) {\n expandPanel(prev.id);\n } else {\n collapsePanel(prev.id);\n }\n return;\n }\n if (next.collapsible()) {\n if (isCollapsedSize(next, store[next.id] ?? 0)) {\n expandPanel(next.id);\n } else {\n collapsePanel(next.id);\n }\n return;\n }\n };\n\n const groupSizePx = () => {\n const element = groupElement();\n if (!element) return 0;\n return options.orientation() === \"horizontal\"\n ? element.clientWidth\n : element.clientHeight;\n };\n\n const isRtl = () => {\n const element = groupElement();\n if (!element) return false;\n return window.getComputedStyle(element).direction === \"rtl\";\n };\n\n return {\n orientation: options.orientation,\n sizes: () => store,\n groupElement,\n setGroupElement,\n dragging,\n keyboardResizeBy: options.keyboardResizeBy,\n registerPanel,\n resolveAdjacent: (handleEl) => adjacentOf(handleEl),\n setAdjacentSize,\n nudgeAdjacent,\n toggleHandleCollapse,\n groupSizePx,\n isRtl,\n beginDrag: () => setDragging(true),\n endDrag: () => setDragging(false),\n commitLayout: commit,\n setPanelSize,\n collapsePanel,\n expandPanel,\n isPanelCollapsed: (id) => {\n const meta = orderedMetas().find((item) => item.id === id);\n return meta ? isCollapsedSize(meta, store[id] ?? 0) : false;\n },\n getPanelSize: (id) => store[id] ?? 0,\n };\n}\n"],"mappings":"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"}
@@ -1,9 +1,12 @@
1
1
  import { ScrollArrowButtonProps } from './ScrollArrows.types';
2
2
  /**
3
- * 单个滚动提示箭头:覆盖在列表上/下沿,悬停或按住时用 requestAnimationFrame
4
- * 持续滚动目标容器,到边界后 scrollTop 不再变化即自动停止。
3
+ * 单个滚动提示箭头,覆盖在列表上/下沿。
5
4
  *
6
- * 箭头是装饰元素(`aria-hidden`、不可聚焦),无障碍仍由列表自身的
7
- * listbox/aria-activedescendant 承担。
5
+ * 默认是**装饰性**的(`interactive=false`):`pointer-events-none`,不参与指针命中,
6
+ * 因此不会挡住列表项、也不会出现"箭头显隐 → pointerenter → 自动滚动"的互相触发。
7
+ *
8
+ * `interactive` 为 true 时,悬停(短暂停留后)或按住会用 requestAnimationFrame 持续
9
+ * 滚动目标容器,并在以下任一情况停止:指针离开/抬起/取消、方向已到边界、
10
+ * 或箭头本身变为不可见(退出时不再继续滚动)。
8
11
  */
9
12
  export declare function ScrollArrowButton(props: ScrollArrowButtonProps): import('solid-js').JSX.Element;
@@ -3,28 +3,36 @@ import { className as t, createComponent as n, effect as r, insert as i, memo as
3
3
  import { Show as l, onCleanup as u } from "solid-js";
4
4
  import { ChevronDown as d, ChevronUp as f } from "lucide-solid";
5
5
  //#region src/components/scroll-arrows/ScrollArrowButton.tsx
6
- var p = /*#__PURE__*/ s("<div aria-hidden=true data-slot=scroll-arrow>");
7
- function m(s) {
8
- let m, h = () => {
9
- m !== void 0 && (cancelAnimationFrame(m), m = void 0);
10
- }, g = () => {
6
+ var p = /*#__PURE__*/ s("<div aria-hidden=true data-slot=scroll-arrow>"), m = 150;
7
+ function h(s) {
8
+ let h, g, _ = () => {
9
+ g !== void 0 && (window.clearTimeout(g), g = void 0), h !== void 0 && (cancelAnimationFrame(h), h = void 0);
10
+ }, v = () => {
11
+ if (!s.visible) {
12
+ _();
13
+ return;
14
+ }
11
15
  let e = s.target();
12
16
  if (!e) {
13
- h();
17
+ _();
14
18
  return;
15
19
  }
16
20
  let t = Math.max(4, e.clientHeight / 24), n = e.scrollTop;
17
21
  if (e.scrollTop = n + (s.direction === "down" ? t : -t), e.scrollTop === n) {
18
- h();
22
+ _();
19
23
  return;
20
24
  }
21
- m = requestAnimationFrame(g);
22
- }, _ = () => {
23
- h(), m = requestAnimationFrame(g);
24
- }, v = (e) => {
25
- e.addEventListener("pointerenter", _), e.addEventListener("pointerdown", _), e.addEventListener("pointerleave", h), e.addEventListener("pointerup", h), e.addEventListener("pointercancel", h), u(() => {
26
- h(), e.removeEventListener("pointerenter", _), e.removeEventListener("pointerdown", _), e.removeEventListener("pointerleave", h), e.removeEventListener("pointerup", h), e.removeEventListener("pointercancel", h);
27
- });
25
+ h = requestAnimationFrame(v);
26
+ }, y = () => {
27
+ _(), h = requestAnimationFrame(v);
28
+ }, b = () => {
29
+ _(), g = window.setTimeout(() => {
30
+ g = void 0, y();
31
+ }, m);
32
+ }, x = (e) => {
33
+ s.interactive && (e.addEventListener("pointerenter", b), e.addEventListener("pointerdown", y), e.addEventListener("pointerleave", _), e.addEventListener("pointerup", _), e.addEventListener("pointercancel", _), u(() => {
34
+ _(), e.removeEventListener("pointerenter", b), e.removeEventListener("pointerdown", y), e.removeEventListener("pointerleave", _), e.removeEventListener("pointerup", _), e.removeEventListener("pointercancel", _);
35
+ }));
28
36
  };
29
37
  return n(l, {
30
38
  get when() {
@@ -32,20 +40,21 @@ function m(s) {
32
40
  },
33
41
  get children() {
34
42
  var l = p();
35
- return c(v, l), i(l, (() => {
43
+ return c(x, l), i(l, (() => {
36
44
  var e = a(() => s.direction === "down");
37
45
  return () => e() ? n(d, {}) : n(f, {});
38
46
  })()), r((n) => {
39
- var r = s.direction, i = e("absolute inset-x-0 z-10 flex h-6 cursor-default items-center justify-center bg-popover text-muted-foreground select-none [&_svg]:size-4", s.direction === "down" ? "bottom-0" : "top-0", s.class);
40
- return r !== n.e && o(l, "data-direction", n.e = r), i !== n.t && t(l, n.t = i), n;
47
+ var r = s.direction, i = s.interactive ? "" : void 0, a = e("absolute inset-x-0 z-10 flex h-6 select-none items-center justify-center bg-popover text-muted-foreground [&_svg]:size-4", s.interactive ? "cursor-default" : "pointer-events-none", s.direction === "down" ? "bottom-0" : "top-0", s.class);
48
+ return r !== n.e && o(l, "data-direction", n.e = r), i !== n.t && o(l, "data-interactive", n.t = i), a !== n.a && t(l, n.a = a), n;
41
49
  }, {
42
50
  e: void 0,
43
- t: void 0
51
+ t: void 0,
52
+ a: void 0
44
53
  }), l;
45
54
  }
46
55
  });
47
56
  }
48
57
  //#endregion
49
- export { m as ScrollArrowButton };
58
+ export { h as ScrollArrowButton };
50
59
 
51
60
  //# sourceMappingURL=ScrollArrowButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollArrowButton.js","names":["Show","onCleanup","ChevronDown","ChevronUp","clsx","ScrollArrowButtonProps","ScrollArrowButton","props","frame","stop","undefined","cancelAnimationFrame","loop","el","target","step","Math","max","clientHeight","before","scrollTop","direction","requestAnimationFrame","start","attach","HTMLDivElement","addEventListener","removeEventListener","_$createComponent","when","visible","children","_el$","_tmpl$","_$use","_$insert","_c$","_$memo","_$effect","_p$","_v$","_v$2","class","e","_$setAttribute","t","_$className","_$createComponent","_$memo","_$setAttribute","_$className","_tmpl$","ScrollArrowButton","frame","stop","loop","el","props","step","before","start","attach","onCleanup","createComponent","Show","_el$","use","insert","_c$","memo","ChevronDown","ChevronUp","effect","_v$","_v$2","clsx","_p$","setAttribute","className"],"sources":["../../../src/components/scroll-arrows/ScrollArrowButton.tsx"],"sourcesContent":["import { Show, onCleanup } from \"solid-js\";\nimport { ChevronDown, ChevronUp } from \"lucide-solid\";\nimport { clsx } from \"~/utils\";\nimport type { ScrollArrowButtonProps } from \"./ScrollArrows.types\";\n\n/**\n * 单个滚动提示箭头:覆盖在列表上/下沿,悬停或按住时用 requestAnimationFrame\n * 持续滚动目标容器,到边界后 scrollTop 不再变化即自动停止。\n *\n * 箭头是装饰元素(`aria-hidden`、不可聚焦),无障碍仍由列表自身的\n * listbox/aria-activedescendant 承担。\n */\nexport function ScrollArrowButton(props: ScrollArrowButtonProps) {\n let frame: number | undefined;\n\n const stop = () => {\n if (frame !== undefined) {\n cancelAnimationFrame(frame);\n frame = undefined;\n }\n };\n\n const loop = () => {\n const el = props.target();\n if (!el) {\n stop();\n return;\n }\n // 每帧约滚动 1/24 高度,连续但不至于过快\n const step = Math.max(4, el.clientHeight / 24);\n const before = el.scrollTop;\n el.scrollTop = before + (props.direction === \"down\" ? step : -step);\n if (el.scrollTop === before) {\n stop();\n return;\n }\n frame = requestAnimationFrame(loop);\n };\n\n const start = () => {\n stop();\n frame = requestAnimationFrame(loop);\n };\n\n const attach = (el: HTMLDivElement) => {\n el.addEventListener(\"pointerenter\", start);\n el.addEventListener(\"pointerdown\", start);\n el.addEventListener(\"pointerleave\", stop);\n el.addEventListener(\"pointerup\", stop);\n el.addEventListener(\"pointercancel\", stop);\n onCleanup(() => {\n stop();\n el.removeEventListener(\"pointerenter\", start);\n el.removeEventListener(\"pointerdown\", start);\n el.removeEventListener(\"pointerleave\", stop);\n el.removeEventListener(\"pointerup\", stop);\n el.removeEventListener(\"pointercancel\", stop);\n });\n };\n\n return (\n <Show when={props.visible}>\n <div\n ref={attach}\n aria-hidden=\"true\"\n data-slot=\"scroll-arrow\"\n data-direction={props.direction}\n class={clsx(\n \"absolute inset-x-0 z-10 flex h-6 cursor-default items-center justify-center bg-popover text-muted-foreground select-none [&_svg]:size-4\",\n props.direction === \"down\" ? \"bottom-0\" : \"top-0\",\n props.class,\n )}\n >\n {props.direction === \"down\" ? <ChevronDown /> : <ChevronUp />}\n </div>\n </Show>\n );\n}\n"],"mappings":";;;;;;AAYA,SAAgBM,EAAkBC,GAA+B;CAC/D,IAAIC,GAEEC,UAAa;EACjB,AAAID,MAAUE,KAAAA,MACZC,qBAAqBH,CAAK,GAC1BA,IAAQE,KAAAA;CAEZ,GAEME,UAAa;EACjB,IAAMC,IAAKN,EAAMO,OAAO;EACxB,IAAI,CAACD,GAAI;GACPJ,EAAK;GACL;EACF;EAEA,IAAMM,IAAOC,KAAKC,IAAI,GAAGJ,EAAGK,eAAe,EAAE,GACvCC,IAASN,EAAGO;EAElB,IADAP,EAAGO,YAAYD,KAAUZ,EAAMc,cAAc,SAASN,IAAO,CAACA,IAC1DF,EAAGO,cAAcD,GAAQ;GAC3BV,EAAK;GACL;EACF;EACAD,IAAQc,sBAAsBV,CAAI;CACpC,GAEMW,UAAc;EAElBf,AADAC,EAAK,GACLD,IAAQc,sBAAsBV,CAAI;CACpC,GAEMY,KAAUX,MAAuB;EAMrCZ,AALAY,EAAGa,iBAAiB,gBAAgBH,CAAK,GACzCV,EAAGa,iBAAiB,eAAeH,CAAK,GACxCV,EAAGa,iBAAiB,gBAAgBjB,CAAI,GACxCI,EAAGa,iBAAiB,aAAajB,CAAI,GACrCI,EAAGa,iBAAiB,iBAAiBjB,CAAI,GACzCR,QAAgB;GAMdY,AALAJ,EAAK,GACLI,EAAGc,oBAAoB,gBAAgBJ,CAAK,GAC5CV,EAAGc,oBAAoB,eAAeJ,CAAK,GAC3CV,EAAGc,oBAAoB,gBAAgBlB,CAAI,GAC3CI,EAAGc,oBAAoB,aAAalB,CAAI,GACxCI,EAAGc,oBAAoB,iBAAiBlB,CAAI;EAC9C,CAAC;CACH;CAEA,OAAAmB,EACG5B,GAAI;EAAA,IAAC6B,OAAI;GAAA,OAAEtB,EAAMuB;EAAO;EAAA,IAAAC,WAAA;GAAA,IAAAC,IAAAC,EAAA;GAUpB,OAVoBC,EAEhBV,GAAMQ,CAAA,GAAAG,EAAAH,UAAA;IAAA,IAAAI,IAAAC,QAUV9B,EAAMc,cAAc,MAAM;IAAA,aAA1Be,EAAA,IAAAR,EAA8B1B,GAAW,CAAA,CAAA,IAAA0B,EAAOzB,GAAS,CAAA,CAAA;GAAG,EAAA,CAAA,CAAA,GAAAmC,GAAAC,MAAA;IAAA,IAAAC,IAP7CjC,EAAMc,WAASoB,IACxBrC,EACL,2IACAG,EAAMc,cAAc,SAAS,aAAa,SAC1Cd,EAAMmC,KACR;IAAC,OAAAF,MAAAD,EAAAI,KAAAC,EAAAZ,GAAA,kBAAAO,EAAAI,IAAAH,CAAA,GAAAC,MAAAF,EAAAM,KAAAC,EAAAd,GAAAO,EAAAM,IAAAJ,CAAA,GAAAF;GAAA,GAAA;IAAAI,GAAAjC,KAAAA;IAAAmC,GAAAnC,KAAAA;GAAA,CAAA,GAAAsB;EAAA;CAAA,CAAA;AAMT"}
1
+ {"version":3,"file":"ScrollArrowButton.js","names":["Show","onCleanup","ChevronDown","ChevronUp","clsx","ScrollArrowButtonProps","HOVER_SCROLL_DELAY","ScrollArrowButton","props","frame","enterTimer","stop","undefined","window","clearTimeout","cancelAnimationFrame","loop","visible","el","target","step","Math","max","clientHeight","before","scrollTop","direction","requestAnimationFrame","start","startDelayed","setTimeout","attach","HTMLDivElement","interactive","addEventListener","removeEventListener","_$createComponent","when","children","_el$","_tmpl$","_$use","_$insert","_c$","_$memo","_$effect","_p$","_v$","_v$2","_v$3","class","e","_$setAttribute","t","a","_$className","_$createComponent","_$memo","_$setAttribute","_$className","_tmpl$","HOVER_SCROLL_DELAY","ScrollArrowButton","frame","enterTimer","stop","loop","props","el","step","before","start","startDelayed","attach","onCleanup","createComponent","Show","_el$","use","insert","_c$","memo","ChevronDown","ChevronUp","effect","_v$","_v$2","_v$3","clsx","_p$","setAttribute","className"],"sources":["../../../src/components/scroll-arrows/ScrollArrowButton.tsx"],"sourcesContent":["import { Show, onCleanup } from \"solid-js\";\nimport { ChevronDown, ChevronUp } from \"lucide-solid\";\nimport { clsx } from \"~/utils\";\nimport type { ScrollArrowButtonProps } from \"./ScrollArrows.types\";\n\n/** 悬停/按住开始滚动前的停留时间,避免只是掠过或点击边缘时误触发 */\nconst HOVER_SCROLL_DELAY = 150;\n\n/**\n * 单个滚动提示箭头,覆盖在列表上/下沿。\n *\n * 默认是**装饰性**的(`interactive=false`):`pointer-events-none`,不参与指针命中,\n * 因此不会挡住列表项、也不会出现\"箭头显隐 → pointerenter → 自动滚动\"的互相触发。\n *\n * `interactive` 为 true 时,悬停(短暂停留后)或按住会用 requestAnimationFrame 持续\n * 滚动目标容器,并在以下任一情况停止:指针离开/抬起/取消、方向已到边界、\n * 或箭头本身变为不可见(退出时不再继续滚动)。\n */\nexport function ScrollArrowButton(props: ScrollArrowButtonProps) {\n let frame: number | undefined;\n let enterTimer: number | undefined;\n\n const stop = () => {\n if (enterTimer !== undefined) {\n window.clearTimeout(enterTimer);\n enterTimer = undefined;\n }\n if (frame !== undefined) {\n cancelAnimationFrame(frame);\n frame = undefined;\n }\n };\n\n const loop = () => {\n // 箭头被隐藏(到达边界/列表变短)时立即停止,避免\"不可见却持续滚动\"\n if (!props.visible) {\n stop();\n return;\n }\n const el = props.target();\n if (!el) {\n stop();\n return;\n }\n const step = Math.max(4, el.clientHeight / 24);\n const before = el.scrollTop;\n el.scrollTop = before + (props.direction === \"down\" ? step : -step);\n if (el.scrollTop === before) {\n stop();\n return;\n }\n frame = requestAnimationFrame(loop);\n };\n\n const start = () => {\n stop();\n frame = requestAnimationFrame(loop);\n };\n\n const startDelayed = () => {\n stop();\n enterTimer = window.setTimeout(() => {\n enterTimer = undefined;\n start();\n }, HOVER_SCROLL_DELAY);\n };\n\n const attach = (el: HTMLDivElement) => {\n if (!props.interactive) return;\n el.addEventListener(\"pointerenter\", startDelayed);\n el.addEventListener(\"pointerdown\", start);\n el.addEventListener(\"pointerleave\", stop);\n el.addEventListener(\"pointerup\", stop);\n el.addEventListener(\"pointercancel\", stop);\n onCleanup(() => {\n stop();\n el.removeEventListener(\"pointerenter\", startDelayed);\n el.removeEventListener(\"pointerdown\", start);\n el.removeEventListener(\"pointerleave\", stop);\n el.removeEventListener(\"pointerup\", stop);\n el.removeEventListener(\"pointercancel\", stop);\n });\n };\n\n return (\n <Show when={props.visible}>\n <div\n ref={attach}\n aria-hidden=\"true\"\n data-slot=\"scroll-arrow\"\n data-direction={props.direction}\n data-interactive={props.interactive ? \"\" : undefined}\n class={clsx(\n \"absolute inset-x-0 z-10 flex h-6 select-none items-center justify-center bg-popover text-muted-foreground [&_svg]:size-4\",\n props.interactive ? \"cursor-default\" : \"pointer-events-none\",\n props.direction === \"down\" ? \"bottom-0\" : \"top-0\",\n props.class,\n )}\n >\n {props.direction === \"down\" ? <ChevronDown /> : <ChevronUp />}\n </div>\n </Show>\n );\n}\n"],"mappings":";;;;;0EAMMM,IAAqB;AAY3B,SAAgBC,EAAkBC,GAA+B;CAC/D,IAAIC,GACAC,GAEEC,UAAa;EAKjB,AAJID,MAAeE,KAAAA,MACjBC,OAAOC,aAAaJ,CAAU,GAC9BA,IAAaE,KAAAA,IAEXH,MAAUG,KAAAA,MACZG,qBAAqBN,CAAK,GAC1BA,IAAQG,KAAAA;CAEZ,GAEMI,UAAa;EAEjB,IAAI,CAACR,EAAMS,SAAS;GAClBN,EAAK;GACL;EACF;EACA,IAAMO,IAAKV,EAAMW,OAAO;EACxB,IAAI,CAACD,GAAI;GACPP,EAAK;GACL;EACF;EACA,IAAMS,IAAOC,KAAKC,IAAI,GAAGJ,EAAGK,eAAe,EAAE,GACvCC,IAASN,EAAGO;EAElB,IADAP,EAAGO,YAAYD,KAAUhB,EAAMkB,cAAc,SAASN,IAAO,CAACA,IAC1DF,EAAGO,cAAcD,GAAQ;GAC3Bb,EAAK;GACL;EACF;EACAF,IAAQkB,sBAAsBX,CAAI;CACpC,GAEMY,UAAc;EAElBnB,AADAE,EAAK,GACLF,IAAQkB,sBAAsBX,CAAI;CACpC,GAEMa,UAAqB;EAEzBnB,AADAC,EAAK,GACLD,IAAaG,OAAOiB,iBAAiB;GAEnCF,AADAlB,IAAaE,KAAAA,GACbgB,EAAM;EACR,GAAGtB,CAAkB;CACvB,GAEMyB,KAAUb,MAAuB;EACrC,AAAKV,EAAMyB,gBACXf,EAAGgB,iBAAiB,gBAAgBL,CAAY,GAChDX,EAAGgB,iBAAiB,eAAeN,CAAK,GACxCV,EAAGgB,iBAAiB,gBAAgBvB,CAAI,GACxCO,EAAGgB,iBAAiB,aAAavB,CAAI,GACrCO,EAAGgB,iBAAiB,iBAAiBvB,CAAI,GACzCV,QAAgB;GAMdiB,AALAP,EAAK,GACLO,EAAGiB,oBAAoB,gBAAgBN,CAAY,GACnDX,EAAGiB,oBAAoB,eAAeP,CAAK,GAC3CV,EAAGiB,oBAAoB,gBAAgBxB,CAAI,GAC3CO,EAAGiB,oBAAoB,aAAaxB,CAAI,GACxCO,EAAGiB,oBAAoB,iBAAiBxB,CAAI;EAC9C,CAAC;CACH;CAEA,OAAAyB,EACGpC,GAAI;EAAA,IAACqC,OAAI;GAAA,OAAE7B,EAAMS;EAAO;EAAA,IAAAqB,WAAA;GAAA,IAAAC,IAAAC,EAAA;GAYpB,OAZoBC,EAEhBV,GAAMQ,CAAA,GAAAG,EAAAH,UAAA;IAAA,IAAAI,IAAAC,QAYVpC,EAAMkB,cAAc,MAAM;IAAA,aAA1BiB,EAAA,IAAAP,EAA8BlC,GAAW,CAAA,CAAA,IAAAkC,EAAOjC,GAAS,CAAA,CAAA;GAAG,EAAA,CAAA,CAAA,GAAA0C,GAAAC,MAAA;IAAA,IAAAC,IAT7CvC,EAAMkB,WAASsB,IACbxC,EAAMyB,cAAc,KAAKrB,KAAAA,GAASqC,IAC7C7C,EACL,4HACAI,EAAMyB,cAAc,mBAAmB,uBACvCzB,EAAMkB,cAAc,SAAS,aAAa,SAC1ClB,EAAM0C,KACR;IAAC,OAAAH,MAAAD,EAAAK,KAAAC,EAAAb,GAAA,kBAAAO,EAAAK,IAAAJ,CAAA,GAAAC,MAAAF,EAAAO,KAAAD,EAAAb,GAAA,oBAAAO,EAAAO,IAAAL,CAAA,GAAAC,MAAAH,EAAAQ,KAAAC,EAAAhB,GAAAO,EAAAQ,IAAAL,CAAA,GAAAH;GAAA,GAAA;IAAAK,GAAAvC,KAAAA;IAAAyC,GAAAzC,KAAAA;IAAA0C,GAAA1C,KAAAA;GAAA,CAAA,GAAA2B;EAAA;CAAA,CAAA;AAMT"}
@@ -2,7 +2,10 @@ import { JSX } from 'solid-js';
2
2
  import { ScrollArrowsProps } from './ScrollArrows.types';
3
3
  /**
4
4
  * 列表/菜单弹层通用的滚动提示:隐藏原生滚动条后,在上/下沿叠加箭头,
5
- * 提示该方向还有内容;悬停或按住箭头会持续滚动,到边界后箭头自动隐藏。
6
- * 放在滚动容器(定位祖先)内部即可,需要容器自身是定位元素。
5
+ * 提示该方向还有内容。放在滚动容器(定位祖先)内部即可,需要容器自身是定位元素。
6
+ *
7
+ * 默认箭头**不可交互**(`pointer-events-none`):避免覆盖列表边缘时抢走指针、
8
+ * 以及"箭头显隐 ↔ 悬停自动滚动"互相触发导致列表持续滚动/闪动。
9
+ * 需要悬停滚动时显式传 `interactive`。
7
10
  */
8
11
  export declare function ScrollArrows(props: ScrollArrowsProps): JSX.Element;
@@ -10,6 +10,9 @@ function i(i) {
10
10
  get visible() {
11
11
  return a();
12
12
  },
13
+ get interactive() {
14
+ return !!i.interactive;
15
+ },
13
16
  get target() {
14
17
  return i.target;
15
18
  },
@@ -21,6 +24,9 @@ function i(i) {
21
24
  get visible() {
22
25
  return o();
23
26
  },
27
+ get interactive() {
28
+ return !!i.interactive;
29
+ },
24
30
  get target() {
25
31
  return i.target;
26
32
  },
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollArrows.js","names":["JSX","clsx","useScrollEdges","ScrollArrowButton","ScrollArrowsProps","ScrollArrows","props","Element","canScrollUp","canScrollDown","target","_$createComponent","direction","visible","class","upClass","downClass","_$createComponent","ScrollArrows","useScrollEdges","props","createComponent","ScrollArrowButton","canScrollUp","\"class\"","clsx","canScrollDown"],"sources":["../../../src/components/scroll-arrows/ScrollArrows.tsx"],"sourcesContent":["import type { JSX } from \"solid-js\";\nimport { clsx } from \"~/utils\";\nimport { useScrollEdges } from \"~/hooks\";\nimport { ScrollArrowButton } from \"./ScrollArrowButton\";\nimport type { ScrollArrowsProps } from \"./ScrollArrows.types\";\n\n/**\n * 列表/菜单弹层通用的滚动提示:隐藏原生滚动条后,在上/下沿叠加箭头,\n * 提示该方向还有内容;悬停或按住箭头会持续滚动,到边界后箭头自动隐藏。\n * 放在滚动容器(定位祖先)内部即可,需要容器自身是定位元素。\n */\nexport function ScrollArrows(props: ScrollArrowsProps): JSX.Element {\n const { canScrollUp, canScrollDown } = useScrollEdges(() => props.target());\n\n return (\n <>\n <ScrollArrowButton\n direction=\"up\"\n visible={canScrollUp()}\n target={props.target}\n class={clsx(props.class, props.upClass)}\n />\n <ScrollArrowButton\n direction=\"down\"\n visible={canScrollDown()}\n target={props.target}\n class={clsx(props.class, props.downClass)}\n />\n </>\n );\n}\n"],"mappings":";;;;;AAWA,SAAgBK,EAAaC,GAAuC;CAClE,IAAM,EAAEE,gBAAaC,qBAAkBP,QAAqBI,EAAMI,OAAO,CAAC;CAE1E,OAAA,CAAAC,EAEKR,GAAiB;EAChBS,WAAS;EAAA,IACTC,UAAO;GAAA,OAAEL,EAAY;EAAC;EAAA,IACtBE,SAAM;GAAA,OAAEJ,EAAMI;EAAM;EAAA,IAAAc,QAAA;GAAA,OACbvB,EAAKK,EAAMQ,OAAOR,EAAMS,OAAO;EAAC;CAAA,CAAA,GAAAJ,EAExCR,GAAiB;EAChBS,WAAS;EAAA,IACTC,UAAO;GAAA,OAAEJ,EAAc;EAAC;EAAA,IACxBC,SAAM;GAAA,OAAEJ,EAAMI;EAAM;EAAA,IAAAc,QAAA;GAAA,OACbvB,EAAKK,EAAMQ,OAAOR,EAAMU,SAAS;EAAC;CAAA,CAAA,CAAA;AAIjD"}
1
+ {"version":3,"file":"ScrollArrows.js","names":["JSX","clsx","useScrollEdges","ScrollArrowButton","ScrollArrowsProps","ScrollArrows","props","Element","canScrollUp","canScrollDown","target","_$createComponent","direction","visible","interactive","class","upClass","downClass","_$createComponent","ScrollArrows","useScrollEdges","props","createComponent","ScrollArrowButton","canScrollUp","\"class\"","clsx","canScrollDown"],"sources":["../../../src/components/scroll-arrows/ScrollArrows.tsx"],"sourcesContent":["import type { JSX } from \"solid-js\";\nimport { clsx } from \"~/utils\";\nimport { useScrollEdges } from \"~/hooks\";\nimport { ScrollArrowButton } from \"./ScrollArrowButton\";\nimport type { ScrollArrowsProps } from \"./ScrollArrows.types\";\n\n/**\n * 列表/菜单弹层通用的滚动提示:隐藏原生滚动条后,在上/下沿叠加箭头,\n * 提示该方向还有内容。放在滚动容器(定位祖先)内部即可,需要容器自身是定位元素。\n *\n * 默认箭头**不可交互**(`pointer-events-none`):避免覆盖列表边缘时抢走指针、\n * 以及\"箭头显隐 ↔ 悬停自动滚动\"互相触发导致列表持续滚动/闪动。\n * 需要悬停滚动时显式传 `interactive`。\n */\nexport function ScrollArrows(props: ScrollArrowsProps): JSX.Element {\n const { canScrollUp, canScrollDown } = useScrollEdges(() => props.target());\n\n return (\n <>\n <ScrollArrowButton\n direction=\"up\"\n visible={canScrollUp()}\n interactive={!!props.interactive}\n target={props.target}\n class={clsx(props.class, props.upClass)}\n />\n <ScrollArrowButton\n direction=\"down\"\n visible={canScrollDown()}\n interactive={!!props.interactive}\n target={props.target}\n class={clsx(props.class, props.downClass)}\n />\n </>\n );\n}\n"],"mappings":";;;;;AAcA,SAAgBK,EAAaC,GAAuC;CAClE,IAAM,EAAEE,gBAAaC,qBAAkBP,QAAqBI,EAAMI,OAAO,CAAC;CAE1E,OAAA,CAAAC,EAEKR,GAAiB;EAChBS,WAAS;EAAA,IACTC,UAAO;GAAA,OAAEL,EAAY;EAAC;EAAA,IACtBM,cAAW;GAAA,OAAE,CAAC,CAACR,EAAMQ;EAAW;EAAA,IAChCJ,SAAM;GAAA,OAAEJ,EAAMI;EAAM;EAAA,IAAAe,QAAA;GAAA,OACbxB,EAAKK,EAAMS,OAAOT,EAAMU,OAAO;EAAC;CAAA,CAAA,GAAAL,EAExCR,GAAiB;EAChBS,WAAS;EAAA,IACTC,UAAO;GAAA,OAAEJ,EAAc;EAAC;EAAA,IACxBK,cAAW;GAAA,OAAE,CAAC,CAACR,EAAMQ;EAAW;EAAA,IAChCJ,SAAM;GAAA,OAAEJ,EAAMI;EAAM;EAAA,IAAAe,QAAA;GAAA,OACbxB,EAAKK,EAAMS,OAAOT,EAAMW,SAAS;EAAC;CAAA,CAAA,CAAA;AAIjD"}
@@ -2,6 +2,12 @@ import { Accessor } from 'solid-js';
2
2
  export interface ScrollArrowsProps {
3
3
  /** 滚动容器 accessor;组件内部据此计算上下边缘状态 */
4
4
  target: Accessor<HTMLElement | undefined>;
5
+ /**
6
+ * 箭头是否可交互(悬停/按住持续滚动)。默认 false:
7
+ * 箭头只是**装饰性提示**(pointer-events-none),不拦截指针、不会与滚动互相触发。
8
+ * 开启后箭头会覆盖列表边缘并参与指针命中,请确保列表项不依赖该区域点击。
9
+ */
10
+ interactive?: boolean;
5
11
  /** 两个箭头共用的额外 class */
6
12
  class?: string;
7
13
  /** 顶部箭头额外 class(圆角等) */
@@ -12,6 +18,7 @@ export interface ScrollArrowsProps {
12
18
  export interface ScrollArrowButtonProps {
13
19
  direction: "up" | "down";
14
20
  visible: boolean;
21
+ interactive: boolean;
15
22
  target: Accessor<HTMLElement | undefined>;
16
23
  class?: string;
17
24
  }
@@ -0,0 +1,6 @@
1
+ import { SheetProps } from '../sheet.types';
2
+ /**
3
+ * Sheet 根:复用 Dialog 的滚动锁定、受控/非受控、动画挂载逻辑,
4
+ * 只把 `data-slot` 换成 sheet。
5
+ */
6
+ export declare function Sheet(props: SheetProps): import('solid-js').JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { Dialog as e } from "../../dialog/Dialog/Dialog.js";
2
+ import { createComponent as t, mergeProps as n } from "solid-js/web";
3
+ //#region src/components/sheet/Sheet/Sheet.tsx
4
+ function r(r) {
5
+ return t(e, n(r, { "data-slot": "sheet" }));
6
+ }
7
+ //#endregion
8
+ export { r as Sheet };
9
+
10
+ //# sourceMappingURL=Sheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sheet.js","names":["Dialog","SheetProps","Sheet","props","_$createComponent","_$mergeProps","_$createComponent","_$mergeProps","Sheet","createComponent","Dialog","mergeProps","props"],"sources":["../../../../src/components/sheet/Sheet/Sheet.tsx"],"sourcesContent":["import { Dialog } from \"~/components/dialog\";\nimport type { SheetProps } from \"../sheet.types\";\n\n/**\n * Sheet 根:复用 Dialog 的滚动锁定、受控/非受控、动画挂载逻辑,\n * 只把 `data-slot` 换成 sheet。\n */\nexport function Sheet(props: SheetProps) {\n return <Dialog {...props} data-slot=\"sheet\" />;\n}\n"],"mappings":";;;AAOA,SAAgBE,EAAMC,GAAmB;CACvC,OAAAC,EAAQJ,GAAMK,EAAKF,GAAK,EAAA,aAAA,QAAA,CAAA,CAAA;AAC1B"}
@@ -0,0 +1 @@
1
+ export { Sheet } from './Sheet';
@@ -0,0 +1,6 @@
1
+ import { SheetCloseProps } from '../sheet.types';
2
+ /**
3
+ * 关闭 Sheet。复用 Dialog 的 context,默认渲染一个 X 图标按钮;
4
+ * 传 children 时渲染为普通按钮(如 footer 里的 "Cancel")。
5
+ */
6
+ export declare const SheetClose: (props: SheetCloseProps) => import('solid-js').JSX.Element;
@@ -0,0 +1,39 @@
1
+ import { useDialogContext as e } from "../../dialog/Dialog/Dialog.context.js";
2
+ import { Button as t } from "../../button/Button.js";
3
+ import { createComponent as n, memo as r, mergeProps as i } from "solid-js/web";
4
+ import { Show as a, mergeProps as o } from "solid-js";
5
+ import { X as s } from "lucide-solid";
6
+ //#region src/components/sheet/SheetClose/SheetClose.tsx
7
+ var c = (c) => {
8
+ let { setOpen: l } = e(), u = o({
9
+ variant: "ghost",
10
+ size: "sm"
11
+ }, c), d = () => {
12
+ l(!1), u.onClick?.();
13
+ };
14
+ return n(a, {
15
+ get when() {
16
+ return r(() => !u.icon)() && !u.children;
17
+ },
18
+ get fallback() {
19
+ return n(t, i(u, {
20
+ "data-slot": "sheet-close",
21
+ onClick: d
22
+ }));
23
+ },
24
+ get children() {
25
+ return n(t, i(u, {
26
+ "data-slot": "sheet-close",
27
+ get icon() {
28
+ return n(s, {});
29
+ },
30
+ "aria-label": "Close",
31
+ onClick: d
32
+ }));
33
+ }
34
+ });
35
+ };
36
+ //#endregion
37
+ export { c as SheetClose };
38
+
39
+ //# sourceMappingURL=SheetClose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SheetClose.js","names":["Show","mergeProps","X","Button","useDialogContext","SheetCloseProps","SheetClose","props","setOpen","merged","variant","size","const","handleClick","onClick","_$createComponent","when","_$memo","icon","children","fallback","_$mergeProps","mergeProps","_$createComponent","_$memo","_$mergeProps","mergeProps$1","SheetClose","useDialogContext","merged","props","handleClick","setOpen","createComponent","Show","memo","Button","mergeProps","X"],"sources":["../../../../src/components/sheet/SheetClose/SheetClose.tsx"],"sourcesContent":["import { Show, mergeProps } from \"solid-js\";\nimport { X } from \"lucide-solid\";\nimport { Button } from \"~/components/button\";\nimport { useDialogContext } from \"~/components/dialog\";\nimport type { SheetCloseProps } from \"../sheet.types\";\n\n/**\n * 关闭 Sheet。复用 Dialog 的 context,默认渲染一个 X 图标按钮;\n * 传 children 时渲染为普通按钮(如 footer 里的 \"Cancel\")。\n */\nexport const SheetClose = (props: SheetCloseProps) => {\n const { setOpen } = useDialogContext();\n\n const merged = mergeProps({ variant: \"ghost\", size: \"sm\" } as const, props);\n\n const handleClick = () => {\n setOpen(false);\n merged.onClick?.();\n };\n\n return (\n <Show\n when={!merged.icon && !merged.children}\n fallback={\n <Button {...merged} data-slot=\"sheet-close\" onClick={handleClick} />\n }\n >\n <Button\n {...merged}\n data-slot=\"sheet-close\"\n icon={<X />}\n aria-label=\"Close\"\n onClick={handleClick}\n />\n </Show>\n );\n};\n"],"mappings":";;;;;;AAUA,IAAaM,KAAcC,MAA2B;CACpD,IAAM,EAAEC,eAAYJ,EAAiB,GAE/BK,IAASR,EAAW;EAAES,SAAS;EAASC,MAAM;CAAK,GAAYJ,CAAK,GAEpEM,UAAoB;EAExBJ,AADAD,EAAQ,EAAK,GACbC,EAAOK,UAAU;CACnB;CAEA,OAAAC,EACGf,GAAI;EAAA,IACHgB,OAAI;GAAA,OAAEC,QAAA,CAACR,EAAOS,IAAI,CAAA,CAAA,KAAI,CAACT,EAAOU;EAAQ;EAAA,IACtCC,WAAQ;GAAA,OAAAL,EACLZ,GAAMkB,EAAKZ,GAAM;IAAA,aAAA;IAA0BK,SAASD;GAAW,CAAA,CAAA;EAAA;EAAA,IAAAM,WAAA;GAAA,OAAAJ,EAGjEZ,GAAMkB,EACDZ,GAAM;IAAA,aAAA;IAAA,IAEVS,OAAI;KAAA,OAAAH,EAAGb,GAAC,CAAA,CAAA;IAAA;IAAA,cAAA;IAERY,SAASD;GAAW,CAAA,CAAA;EAAA;CAAA,CAAA;AAI5B"}
@@ -0,0 +1 @@
1
+ export { SheetClose } from './SheetClose';
@@ -0,0 +1,6 @@
1
+ import { SheetContentProps } from '../sheet.types';
2
+ /**
3
+ * Sheet 面板:复用 DialogSurface(Portal/Overlay/滚动锁定/挂载动画/ARIA),
4
+ * 通过 `data-side` + 方向类实现贴边与滑入滑出。
5
+ */
6
+ export declare const SheetContent: (props: SheetContentProps) => import('solid-js').JSX.Element;