@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,375 @@
1
+ import { createEffect as e, createSignal as t, onCleanup as n } from "solid-js";
2
+ //#region src/components/message-scroller/useMessageScrollerEngine.ts
3
+ var r = .5, i = 180, a = /* @__PURE__ */ new Set([
4
+ "ArrowDown",
5
+ "ArrowUp",
6
+ "End",
7
+ "Home",
8
+ "PageDown",
9
+ "PageUp",
10
+ " "
11
+ ]);
12
+ function o(e) {
13
+ let t = Number.parseFloat(e);
14
+ return Number.isFinite(t) ? t : 0;
15
+ }
16
+ function s(e) {
17
+ let t = window.getComputedStyle(e);
18
+ return {
19
+ start: o(t.paddingBlockStart || t.paddingTop),
20
+ end: o(t.paddingBlockEnd || t.paddingBottom)
21
+ };
22
+ }
23
+ function c(e) {
24
+ if (!e) return 0;
25
+ let t = window.getComputedStyle(e);
26
+ return o(t.rowGap === "normal" ? t.gap : t.rowGap);
27
+ }
28
+ function l(o) {
29
+ let [l, ee] = t(), [u, te] = t(), [d, ne] = t(), [f, re] = t(!0), [ie, ae] = t(!1), [oe, se] = t(!1), [p, m] = t(!1), [ce, h] = t(o().defaultScrollPosition !== "start"), [le, g] = t(null), [ue, _] = t([]), v = /* @__PURE__ */ new Map(), y = /* @__PURE__ */ new Set(), b = /* @__PURE__ */ new WeakSet(), x = o().autoScroll ? "following-bottom" : "free-scrolling", S = 0, C = 0, w = null, T = !1, E = null, D = null, O = null, k = 0, A = 0, j = null, M = null, N = null, P = null, F = null, I = 0, L = () => {
30
+ let e = u(), t = d();
31
+ return e ? Array.from(e.children).filter((e) => e instanceof HTMLElement && e !== t) : [];
32
+ }, R = (e) => {
33
+ let t = l();
34
+ return t ? e.getBoundingClientRect().top - t.getBoundingClientRect().top + t.scrollTop : 0;
35
+ }, z = (e) => {
36
+ let t = l();
37
+ return t ? e.getBoundingClientRect().top - t.getBoundingClientRect().top : 0;
38
+ }, B = () => {
39
+ let e = l(), t = u();
40
+ if (!e || !t) return 0;
41
+ let n = s(t), r = e.getBoundingClientRect(), i = n.start + n.end;
42
+ for (let t of L()) {
43
+ let a = t.getBoundingClientRect();
44
+ i = Math.max(i, a.bottom - r.top + e.scrollTop + n.end);
45
+ }
46
+ return i;
47
+ }, de = () => {
48
+ let e = l();
49
+ return e ? Math.max(0, e.scrollHeight - e.clientHeight) : 0;
50
+ }, V = (e) => {
51
+ let t = d();
52
+ if (!t) return;
53
+ let n = Math.max(0, Math.ceil(e));
54
+ k !== n && (k = n, t.hidden = n === 0, t.style.height = `${n}px`, t.style.marginTop = n > 0 ? `${-A}px` : "");
55
+ }, fe = () => {
56
+ let e = l(), t = u();
57
+ if (!e || !t) return {
58
+ start: !1,
59
+ end: !1
60
+ };
61
+ let n = o().scrollEdgeThreshold, r = B();
62
+ return {
63
+ start: e.scrollTop > n,
64
+ end: r - e.scrollTop - e.clientHeight > n
65
+ };
66
+ }, pe = (e) => {
67
+ let t = l();
68
+ if (!t) return;
69
+ let n = t.scrollTop, i = n < S - r;
70
+ S = n, o().autoScroll && !e.end && x !== "settling-jump" && x !== "anchored-to-message" ? x = "following-bottom" : x === "following-bottom" && e.end && i && !p() && (x = "free-scrolling");
71
+ }, H = () => {
72
+ let e = fe();
73
+ pe(e);
74
+ let t = x === "following-bottom" ? {
75
+ ...e,
76
+ end: !1
77
+ } : e;
78
+ ae(t.start), se(t.end);
79
+ }, U = () => {
80
+ M === null && (M = window.requestAnimationFrame(() => {
81
+ M = null, H();
82
+ }));
83
+ }, W = () => {
84
+ N === null && (N = window.requestAnimationFrame(() => {
85
+ N = null, I > 0 && Ee();
86
+ }));
87
+ }, G = (e) => {
88
+ j !== null && (window.clearTimeout(j), j = null), p() !== e && (m(e), H()), e && (j = window.setTimeout(() => {
89
+ j = null, m(!1), H();
90
+ }, i));
91
+ }, K = (e, { behavior: t = "auto", auto: n = !1 } = {}) => {
92
+ let i = l();
93
+ if (!i) return;
94
+ let a = Math.max(0, e);
95
+ if (Math.abs(i.scrollTop - a) <= r) {
96
+ i.scrollTop = a, H();
97
+ return;
98
+ }
99
+ n && G(!0), i.scrollTo({
100
+ top: a,
101
+ behavior: t
102
+ }), U();
103
+ }, q = (e) => l() ? (V(0), E = null, x = "free-scrolling", K(0, { behavior: e?.behavior ?? "auto" }), W(), !0) : !1, J = (e) => l() ? (V(0), E = null, x = o().autoScroll ? "following-bottom" : "free-scrolling", K(de(), {
104
+ behavior: e?.behavior ?? "auto",
105
+ auto: !0
106
+ }), W(), !0) : !1, me = (e, t, n) => {
107
+ let r = l();
108
+ if (!r) return 0;
109
+ let i = u() ? s(u()) : {
110
+ start: 0,
111
+ end: 0
112
+ }, a = R(e), o = e.getBoundingClientRect().height;
113
+ switch (t?.align ?? "start") {
114
+ case "center": {
115
+ let e = Math.max(0, r.clientHeight - i.start - i.end);
116
+ return a - i.start - (e - o) / 2 - n;
117
+ }
118
+ case "end": return a - r.clientHeight + o + i.end + n;
119
+ case "nearest": {
120
+ let e = a + o, t = r.scrollTop + i.start, s = r.scrollTop + r.clientHeight - i.end;
121
+ return a >= t && e <= s ? r.scrollTop : a < t ? a - i.start - n : e - r.clientHeight + i.end + n;
122
+ }
123
+ default: return a - i.start - n;
124
+ }
125
+ }, Y = (e, t, { keepPreviousPeek: n = !1 } = {}) => {
126
+ let r = l(), i = u();
127
+ if (!r || !i?.contains(e)) return !1;
128
+ let a = (t?.scrollMargin ?? o().scrollMargin) + (n ? o().scrollPreviousItemPeek : 0), s = me(e, t, a);
129
+ return V(Math.max(0, s + r.clientHeight - B())), O = {
130
+ element: e,
131
+ viewportTop: z(e)
132
+ }, x = n ? "anchored-to-message" : "settling-jump", E = n ? e : null, K(s, { behavior: t?.behavior ?? "auto" }), W(), !0;
133
+ }, he = () => {
134
+ let e = E;
135
+ return !e?.isConnected || x !== "anchored-to-message" ? !1 : Y(e, { align: "start" }, { keepPreviousPeek: !0 });
136
+ }, ge = () => {
137
+ let e = l();
138
+ if (!e || T || C === 0) return !1;
139
+ let t = o().defaultScrollPosition, n = !1;
140
+ if (t === "last-anchor") {
141
+ let t = [...L()].reverse().find((e) => e.dataset.scrollAnchor === "true") ?? null;
142
+ n = t ? B() - R(t) <= e.clientHeight ? J({ behavior: "auto" }) : Y(t, { align: "start" }, { keepPreviousPeek: !0 }) : J({ behavior: "auto" });
143
+ } else n = t === "end" ? J({ behavior: "auto" }) : q({ behavior: "auto" });
144
+ return n && (T = !0, h(!1)), n;
145
+ }, X = () => {
146
+ let e = D;
147
+ if (!e) return !1;
148
+ let t = v.get(e.id);
149
+ return !t || !Y(t, e.options) ? !1 : (D = null, T = !0, h(!1), !0);
150
+ }, _e = () => {
151
+ P === null && (P = window.requestAnimationFrame(() => {
152
+ P = null, X() && Z();
153
+ }));
154
+ }, ve = (e, t) => {
155
+ let n = v.get(e);
156
+ return n ? Y(n, t) ? (D = null, !0) : (D = {
157
+ id: e,
158
+ options: t
159
+ }, !0) : C === 0 && (D = {
160
+ id: e,
161
+ options: t
162
+ }, h(!1), !0);
163
+ }, Z = () => {
164
+ let e = l();
165
+ if (!e) {
166
+ O = null;
167
+ return;
168
+ }
169
+ let t = e.getBoundingClientRect(), n = L().find((e) => {
170
+ if (!e.dataset.messageId) return !1;
171
+ let n = e.getBoundingClientRect();
172
+ return n.bottom > t.top && n.top < t.bottom;
173
+ }) ?? null;
174
+ O = n ? {
175
+ element: n,
176
+ viewportTop: z(n)
177
+ } : null;
178
+ }, ye = () => {
179
+ let e = O, t = l();
180
+ if (!e || !t || !e.element.isConnected) return !1;
181
+ let n = z(e.element) - e.viewportTop;
182
+ return Math.abs(n) <= r ? !1 : (t.scrollTop += n, e.viewportTop = z(e.element), U(), W(), !0);
183
+ }, be = (e, t) => {
184
+ for (let n = t; n < e.length; n += 1) {
185
+ let t = e[n];
186
+ if (t?.dataset.scrollAnchor === "true") return t;
187
+ }
188
+ return null;
189
+ }, xe = (e) => e.find((e) => e.dataset.scrollAnchor === "true" && !b.has(e)) ?? null, Se = (e, t) => {
190
+ let n = 0;
191
+ for (let r = t; r < e.length; r += 1) if (e[r]?.dataset.scrollAnchor === "true" && (n += 1, n > 1)) return !0;
192
+ return !1;
193
+ }, Q = () => {
194
+ if (!u()) return;
195
+ let e = L(), t = C, n = w;
196
+ if (C = e.length, w = e[0] ?? null, e.length === 0 && h(!1), X()) {
197
+ Z();
198
+ return;
199
+ }
200
+ if (t === 0) {
201
+ for (let t of e) t.dataset.scrollAnchor === "true" && b.add(t);
202
+ if (ge()) {
203
+ Z();
204
+ return;
205
+ }
206
+ if (e.length > 0 && o().autoScroll && J({ behavior: "auto" })) {
207
+ Z();
208
+ return;
209
+ }
210
+ H(), W(), Z();
211
+ return;
212
+ }
213
+ let r = n ? e.indexOf(n) : -1;
214
+ if (f() && r > 0) {
215
+ ye(), Z();
216
+ return;
217
+ }
218
+ if (e.length > t) {
219
+ let n = be(e, t);
220
+ if (n) {
221
+ if (o().autoScroll && x === "following-bottom" && Se(e, t)) {
222
+ J({ behavior: "auto" }), Z();
223
+ return;
224
+ }
225
+ Y(n, { align: "start" }, { keepPreviousPeek: !0 }), b.add(n), Z();
226
+ return;
227
+ }
228
+ }
229
+ if (e.length === t) {
230
+ let t = xe(e);
231
+ if (t) {
232
+ Y(t, { align: "start" }, { keepPreviousPeek: !0 }), b.add(t), Z();
233
+ return;
234
+ }
235
+ }
236
+ x === "following-bottom" && o().autoScroll ? J({ behavior: "auto" }) : (H(), W()), Z();
237
+ }, Ce = () => {
238
+ if (x === "following-bottom" && o().autoScroll) {
239
+ J({ behavior: "auto" });
240
+ return;
241
+ }
242
+ let e = k;
243
+ if (he()) {
244
+ o().autoScroll && e > 0 && k === 0 && J({ behavior: "auto" });
245
+ return;
246
+ }
247
+ U(), W();
248
+ }, we = () => {
249
+ H(), W(), Z();
250
+ }, Te = () => {
251
+ (x === "following-bottom" || x === "anchored-to-message" || x === "settling-jump") && (G(!1), x = "free-scrolling");
252
+ }, Ee = () => {
253
+ let e = l(), t = u();
254
+ if (!e || !t) {
255
+ _([]), g(null);
256
+ return;
257
+ }
258
+ let n = e.getBoundingClientRect(), i = n.top + o().scrollMargin + o().scrollPreviousItemPeek, a = typeof IntersectionObserver > "u", s = [], c = null;
259
+ for (let e of L()) {
260
+ let t = e.dataset.messageId;
261
+ if (!t) continue;
262
+ let o = e.dataset.scrollAnchor === "true", l = o || a ? e.getBoundingClientRect() : null;
263
+ (a && l ? l.bottom > i && l.top < n.bottom : y.has(t)) && s.push(t), o && l && l.top <= i + r && (c = t);
264
+ }
265
+ if (s.length === 0 && c === null) {
266
+ _([]), g(null);
267
+ return;
268
+ }
269
+ _(s), g(c);
270
+ }, De = () => {
271
+ if (typeof IntersectionObserver > "u") {
272
+ W();
273
+ return;
274
+ }
275
+ let e = l();
276
+ !F && e && (F = new IntersectionObserver((e) => {
277
+ for (let t of e) {
278
+ let e = t.target.dataset.messageId;
279
+ e && (t.isIntersecting ? y.add(e) : y.delete(e));
280
+ }
281
+ W();
282
+ }, {
283
+ root: e,
284
+ rootMargin: `${-(o().scrollMargin + o().scrollPreviousItemPeek)}px 0px 0px 0px`,
285
+ threshold: [
286
+ 0,
287
+ .01,
288
+ .5,
289
+ 1
290
+ ]
291
+ }));
292
+ for (let e of v.values()) F?.observe(e);
293
+ W();
294
+ }, Oe = () => {
295
+ N !== null && (window.cancelAnimationFrame(N), N = null), F?.disconnect(), F = null, y.clear(), _([]), g(null);
296
+ }, ke = () => {
297
+ I += 1, I === 1 && De(), W();
298
+ let e = !1;
299
+ return () => {
300
+ e || (e = !0, --I, I === 0 && Oe());
301
+ };
302
+ }, $ = (e, t, n) => {
303
+ if (t) {
304
+ v.set(e, t), F?.observe(t), W(), D?.id === e && _e();
305
+ return;
306
+ }
307
+ n && v.get(e) === n && (v.delete(e), y.delete(e), F?.unobserve(n), W());
308
+ };
309
+ return e(() => {
310
+ let e = u();
311
+ if (!e) return;
312
+ Q();
313
+ let t = typeof MutationObserver < "u" ? new MutationObserver(() => Q()) : null;
314
+ t?.observe(e, { childList: !0 });
315
+ let r = typeof MutationObserver < "u" ? new MutationObserver(() => Q()) : null;
316
+ r?.observe(e, {
317
+ attributes: !0,
318
+ attributeFilter: ["data-scroll-anchor"],
319
+ subtree: !0
320
+ });
321
+ let i = 0, a = typeof ResizeObserver < "u" ? new ResizeObserver(() => {
322
+ window.cancelAnimationFrame(i), i = window.requestAnimationFrame(Ce);
323
+ }) : null;
324
+ a?.observe(e), n(() => {
325
+ t?.disconnect(), r?.disconnect(), a?.disconnect(), window.cancelAnimationFrame(i);
326
+ });
327
+ }), e(() => {
328
+ let e = l();
329
+ if (!e) return;
330
+ I > 0 && !F && De();
331
+ let t = () => we(), r = () => Te(), i = (e) => {
332
+ a.has(e.key) && Te();
333
+ };
334
+ e.addEventListener("scroll", t, { passive: !0 }), e.addEventListener("wheel", r, { passive: !0 }), e.addEventListener("touchmove", r, { passive: !0 }), e.addEventListener("keydown", i);
335
+ let o = 0, s = typeof ResizeObserver < "u" ? new ResizeObserver(() => {
336
+ window.cancelAnimationFrame(o), o = window.requestAnimationFrame(Ce);
337
+ }) : null;
338
+ s?.observe(e), n(() => {
339
+ e.removeEventListener("scroll", t), e.removeEventListener("wheel", r), e.removeEventListener("touchmove", r), e.removeEventListener("keydown", i), s?.disconnect(), window.cancelAnimationFrame(o);
340
+ });
341
+ }), n(() => {
342
+ j !== null && window.clearTimeout(j), M !== null && window.cancelAnimationFrame(M), P !== null && window.cancelAnimationFrame(P), N !== null && window.cancelAnimationFrame(N), F?.disconnect(), F = null;
343
+ }), {
344
+ viewport: l,
345
+ setViewport: ee,
346
+ content: u,
347
+ setContent: te,
348
+ setSpacer: (e) => {
349
+ ne(e), A = c(e?.parentElement ?? null);
350
+ },
351
+ registerItem: (e) => {
352
+ let t = e.id;
353
+ return t && $(t, e.element), () => {
354
+ t && $(t, void 0, e.element);
355
+ };
356
+ },
357
+ preserveScrollOnPrepend: f,
358
+ setPreserveScrollOnPrepend: re,
359
+ scrollableStart: ie,
360
+ scrollableEnd: oe,
361
+ autoscrolling: p,
362
+ pendingScroll: ce,
363
+ scrollToStart: q,
364
+ scrollToEnd: J,
365
+ scrollToMessage: ve,
366
+ currentAnchorId: le,
367
+ visibleMessageIds: ue,
368
+ subscribeVisibility: ke,
369
+ options: o
370
+ };
371
+ }
372
+ //#endregion
373
+ export { l as useMessageScrollerEngine };
374
+
375
+ //# sourceMappingURL=useMessageScrollerEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMessageScrollerEngine.js","names":["AT_EDGE_TOLERANCE","AUTO_SCROLLING_TIMEOUT_MS","NAV_KEYS","parsePx","parsed","value","paddingBox","style","element","rowGap","useMessageScrollerEngine","viewport","setViewport","createSignal","content","setContent","spacer","setSpacer","preserveScrollOnPrepend","setPreserveScrollOnPrepend","scrollableStart","setScrollableStart","scrollableEnd","setScrollableEnd","autoscrolling","setAutoscrolling","pendingScroll","setPendingScroll","options","currentAnchorId","setCurrentAnchorId","visibleMessageIds","setVisibleMessageIds","messageElements","visibleIds","handledScrollAnchors","mode","lastScrollTop","itemCount","firstItem","defaultApplied","streamingTurn","pendingMessage","prependAnchor","spacerHeight","spacerGap","autoscrollingTimer","stateFrame","visibilityFrame","pendingFrame","observer","visibilitySubscribers","items","root","sp","child","itemOffsetTop","vp","itemTopInViewport","contentBottom","pad","vpRect","bottom","item","rect","maxScrollTop","setSpacerHeight","next","height","computeScrollable","threshold","updateModeFromScroll","top","movedUp","state","commitScrollState","exposed","scheduleStateCommit","scheduleVisibilitySync","computeVisibility","applyAutoscrolling","setScrollTop","auto","scrollToStart","command","scrollToEnd","targetTopFor","itemTop","visible","margin","vTop","vBottom","scrollToElement","keepPreviousPeek","target","reanchorToAnchoredMessage","el","applyDefaultScrollPosition","position","applied","lastAnchor","flushPendingScrollToMessage","pending","schedulePendingFlush","capturePrependAnchor","scrollToMessage","messageId","firstVisible","restorePrependAnchor","anchor","delta","firstAnchorFrom","index","from","list","firstUnhandledAnchor","hasMultipleAnchorsFrom","count","handleContentChange","previousCount","previousFirst","previousFirstIndex","firstNewAnchor","unhandled","handleResize","before","syncAfterScroll","releaseFollow","readingLine","hasObserver","anchorId","id","isAnchor","startVisibilityObserver","entry","entries","stopVisibilityObserver","subscribeVisibility","released","registerMessage","previous","createEffect","mutation","anchorMutation","frame","resize","onCleanup","onScroll","onIntent","onKeyDown","event"],"sources":["../../../src/components/message-scroller/useMessageScrollerEngine.ts"],"sourcesContent":["import { createEffect, createSignal, onCleanup } from \"solid-js\";\nimport type {\n MessageScrollerContextValue,\n MessageScrollerItemEntry,\n MessageScrollerProviderProps,\n MessageScrollerScrollOptions,\n} from \"./message-scroller.types\";\n\n/** 滚动位置比较容差(0.5px),对应上游的 `J` */\nconst AT_EDGE_TOLERANCE = 0.5;\n/** 「滚动到最新」后 data-autoscrolling 的持续时间 */\nconst AUTO_SCROLLING_TIMEOUT_MS = 180;\n/** 会让界面「让位」的键盘滚动键 */\nconst NAV_KEYS = new Set([\n \"ArrowDown\",\n \"ArrowUp\",\n \"End\",\n \"Home\",\n \"PageDown\",\n \"PageUp\",\n \" \",\n]);\n\ntype Mode =\n | \"following-bottom\"\n | \"free-scrolling\"\n | \"anchored-to-message\"\n | \"settling-jump\";\n\ninterface ScrollState {\n start: boolean;\n end: boolean;\n}\n\ninterface PaddingBox {\n start: number;\n end: number;\n}\n\nfunction parsePx(value: string): number {\n const parsed = Number.parseFloat(value);\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction paddingBox(element: HTMLElement): PaddingBox {\n const style = window.getComputedStyle(element);\n return {\n start: parsePx(style.paddingBlockStart || style.paddingTop),\n end: parsePx(style.paddingBlockEnd || style.paddingBottom),\n };\n}\n\nfunction rowGap(element: HTMLElement | null): number {\n if (!element) return 0;\n const style = window.getComputedStyle(element);\n return parsePx(style.rowGap === \"normal\" ? style.gap : style.rowGap);\n}\n\n/**\n * MessageScroller 的滚动引擎(headless,行为对齐 `@shadcn/react`):\n * - 滚动状态(能否向上/下)由 content 的**非 spacer** 内容底部计算,spacer 不计入;\n * - `autoScroll` 只在模式为 `following-bottom` 时跟随;滚轮/触摸/键盘滚动与显式跳转\n * 都会立刻让位(`free-scrolling`);\n * - 新回合锚定:新增 scrollAnchor 行时用 `scrollToElement(keepPreviousPeek)` 将其放到\n * 顶部并保留上一项;同时把该行记为 `streamingTurn`,回复生长时原地重锚定;\n * - `scrollToElement` 会按需设置尾部 spacer,让目标行即使靠近会话末尾也能滚到顶部;\n * - `defaultScrollPosition`:首次非空渲染定位一次;`last-anchor` 无锚点或放得下时回退 end;\n * - `preserveScrollOnPrepend`:记录首个可见行及其视口位置,上方插入历史后按差值补偿;\n * - 可见性:IntersectionObserver 按需订阅(rootMargin 用 scrollMargin + peek),无 IO 时退化为\n * 逐帧测量;`currentAnchorId` 是阅读行之上最后一个锚点。\n */\nexport function useMessageScrollerEngine(\n options: () => Required<Omit<MessageScrollerProviderProps, \"children\">>,\n): MessageScrollerContextValue {\n const [viewport, setViewport] = createSignal<HTMLElement>();\n const [content, setContent] = createSignal<HTMLElement>();\n const [spacer, setSpacer] = createSignal<HTMLElement>();\n const [preserveScrollOnPrepend, setPreserveScrollOnPrepend] =\n createSignal(true);\n const [scrollableStart, setScrollableStart] = createSignal(false);\n const [scrollableEnd, setScrollableEnd] = createSignal(false);\n const [autoscrolling, setAutoscrolling] = createSignal(false);\n const [pendingScroll, setPendingScroll] = createSignal(\n options().defaultScrollPosition !== \"start\",\n );\n const [currentAnchorId, setCurrentAnchorId] = createSignal<string | null>(\n null,\n );\n const [visibleMessageIds, setVisibleMessageIds] = createSignal<string[]>([]);\n\n const messageElements = new Map<string, HTMLElement>();\n const visibleIds = new Set<string>();\n const handledScrollAnchors = new WeakSet<HTMLElement>();\n\n let mode: Mode = options().autoScroll ? \"following-bottom\" : \"free-scrolling\";\n let lastScrollTop = 0;\n let itemCount = 0;\n let firstItem: HTMLElement | null = null;\n let defaultApplied = false;\n let streamingTurn: HTMLElement | null = null;\n let pendingMessage: {\n id: string;\n options?: MessageScrollerScrollOptions;\n } | null = null;\n let prependAnchor: { element: HTMLElement; viewportTop: number } | null =\n null;\n let spacerHeight = 0;\n let spacerGap = 0;\n let autoscrollingTimer: number | null = null;\n let stateFrame: number | null = null;\n let visibilityFrame: number | null = null;\n let pendingFrame: number | null = null;\n let observer: IntersectionObserver | null = null;\n let visibilitySubscribers = 0;\n\n /** content 的直接子元素,排除内部 spacer */\n const items = (): HTMLElement[] => {\n const root = content();\n const sp = spacer();\n if (!root) return [];\n return Array.from(root.children).filter(\n (child): child is HTMLElement =>\n child instanceof HTMLElement && child !== sp,\n );\n };\n\n /** 行相对滚动容器内容顶部的偏移(用测量,避免 offsetParent 不确定) */\n const itemOffsetTop = (element: HTMLElement) => {\n const vp = viewport();\n if (!vp) return 0;\n return (\n element.getBoundingClientRect().top -\n vp.getBoundingClientRect().top +\n vp.scrollTop\n );\n };\n\n const itemTopInViewport = (element: HTMLElement) => {\n const vp = viewport();\n if (!vp) return 0;\n return element.getBoundingClientRect().top - vp.getBoundingClientRect().top;\n };\n\n /** 内容底部(不含 spacer),即内容真实滚动高度 */\n const contentBottom = () => {\n const vp = viewport();\n const root = content();\n if (!vp || !root) return 0;\n const pad = paddingBox(root);\n const vpRect = vp.getBoundingClientRect();\n let bottom = pad.start + pad.end;\n for (const item of items()) {\n const rect = item.getBoundingClientRect();\n bottom = Math.max(\n bottom,\n rect.bottom - vpRect.top + vp.scrollTop + pad.end,\n );\n }\n return bottom;\n };\n\n const maxScrollTop = () => {\n const vp = viewport();\n return vp ? Math.max(0, vp.scrollHeight - vp.clientHeight) : 0;\n };\n\n /** 设置尾部 spacer:让目标行有空间滚到指定位置;0 时隐藏 */\n const setSpacerHeight = (height: number) => {\n const sp = spacer();\n if (!sp) return;\n const next = Math.max(0, Math.ceil(height));\n if (spacerHeight === next) return;\n spacerHeight = next;\n sp.hidden = next === 0;\n sp.style.height = `${next}px`;\n sp.style.marginTop = next > 0 ? `${-spacerGap}px` : \"\";\n };\n\n const computeScrollable = (): ScrollState => {\n const vp = viewport();\n const root = content();\n if (!vp || !root) return { start: false, end: false };\n const threshold = options().scrollEdgeThreshold;\n const bottom = contentBottom();\n return {\n start: vp.scrollTop > threshold,\n end: bottom - vp.scrollTop - vp.clientHeight > threshold,\n };\n };\n\n const updateModeFromScroll = (state: ScrollState) => {\n const vp = viewport();\n if (!vp) return;\n const top = vp.scrollTop;\n const movedUp = top < lastScrollTop - AT_EDGE_TOLERANCE;\n lastScrollTop = top;\n if (\n options().autoScroll &&\n !state.end &&\n mode !== \"settling-jump\" &&\n mode !== \"anchored-to-message\"\n ) {\n mode = \"following-bottom\";\n } else if (\n mode === \"following-bottom\" &&\n state.end &&\n movedUp &&\n !autoscrolling()\n ) {\n mode = \"free-scrolling\";\n }\n };\n\n const commitScrollState = () => {\n const state = computeScrollable();\n updateModeFromScroll(state);\n // 跟随输出时对 UI 隐藏「还能向下滚」——按钮不出现,直到读者回到实时边缘\n const exposed =\n mode === \"following-bottom\" ? { ...state, end: false } : state;\n setScrollableStart(exposed.start);\n setScrollableEnd(exposed.end);\n };\n\n const scheduleStateCommit = () => {\n if (stateFrame !== null) return;\n stateFrame = window.requestAnimationFrame(() => {\n stateFrame = null;\n commitScrollState();\n });\n };\n\n const scheduleVisibilitySync = () => {\n if (visibilityFrame !== null) return;\n visibilityFrame = window.requestAnimationFrame(() => {\n visibilityFrame = null;\n if (visibilitySubscribers > 0) computeVisibility();\n });\n };\n\n const applyAutoscrolling = (next: boolean) => {\n if (autoscrollingTimer !== null) {\n window.clearTimeout(autoscrollingTimer);\n autoscrollingTimer = null;\n }\n if (autoscrolling() !== next) {\n setAutoscrolling(next);\n commitScrollState();\n }\n if (next) {\n autoscrollingTimer = window.setTimeout(() => {\n autoscrollingTimer = null;\n setAutoscrolling(false);\n commitScrollState();\n }, AUTO_SCROLLING_TIMEOUT_MS);\n }\n };\n\n const setScrollTop = (\n top: number,\n {\n behavior = \"auto\" as ScrollBehavior,\n auto = false,\n }: { behavior?: ScrollBehavior; auto?: boolean } = {},\n ) => {\n const vp = viewport();\n if (!vp) return;\n const next = Math.max(0, top);\n if (Math.abs(vp.scrollTop - next) <= AT_EDGE_TOLERANCE) {\n vp.scrollTop = next;\n commitScrollState();\n return;\n }\n if (auto) applyAutoscrolling(true);\n vp.scrollTo({ top: next, behavior });\n scheduleStateCommit();\n };\n\n const scrollToStart = (command?: MessageScrollerScrollOptions) => {\n if (!viewport()) return false;\n setSpacerHeight(0);\n streamingTurn = null;\n mode = \"free-scrolling\";\n setScrollTop(0, { behavior: command?.behavior ?? \"auto\" });\n scheduleVisibilitySync();\n return true;\n };\n\n const scrollToEnd = (command?: MessageScrollerScrollOptions) => {\n if (!viewport()) return false;\n setSpacerHeight(0);\n streamingTurn = null;\n mode = options().autoScroll ? \"following-bottom\" : \"free-scrolling\";\n setScrollTop(maxScrollTop(), {\n behavior: command?.behavior ?? \"auto\",\n auto: true,\n });\n scheduleVisibilitySync();\n return true;\n };\n\n const targetTopFor = (\n element: HTMLElement,\n command: MessageScrollerScrollOptions | undefined,\n margin: number,\n ) => {\n const vp = viewport();\n if (!vp) return 0;\n const pad = content() ? paddingBox(content()!) : { start: 0, end: 0 };\n const itemTop = itemOffsetTop(element);\n const height = element.getBoundingClientRect().height;\n switch (command?.align ?? \"start\") {\n case \"center\": {\n const visible = Math.max(0, vp.clientHeight - pad.start - pad.end);\n return itemTop - pad.start - (visible - height) / 2 - margin;\n }\n case \"end\":\n return itemTop - vp.clientHeight + height + pad.end + margin;\n case \"nearest\": {\n const bottom = itemTop + height;\n const vTop = vp.scrollTop + pad.start;\n const vBottom = vp.scrollTop + vp.clientHeight - pad.end;\n if (itemTop >= vTop && bottom <= vBottom) return vp.scrollTop;\n if (itemTop < vTop) return itemTop - pad.start - margin;\n return bottom - vp.clientHeight + pad.end + margin;\n }\n default:\n return itemTop - pad.start - margin;\n }\n };\n\n const scrollToElement = (\n element: HTMLElement,\n command?: MessageScrollerScrollOptions,\n { keepPreviousPeek = false }: { keepPreviousPeek?: boolean } = {},\n ) => {\n const vp = viewport();\n const root = content();\n if (!vp || !root?.contains(element)) return false;\n const margin =\n (command?.scrollMargin ?? options().scrollMargin) +\n (keepPreviousPeek ? options().scrollPreviousItemPeek : 0);\n const target = targetTopFor(element, command, margin);\n setSpacerHeight(Math.max(0, target + vp.clientHeight - contentBottom()));\n prependAnchor = { element, viewportTop: itemTopInViewport(element) };\n mode = keepPreviousPeek ? \"anchored-to-message\" : \"settling-jump\";\n streamingTurn = keepPreviousPeek ? element : null;\n setScrollTop(target, { behavior: command?.behavior ?? \"auto\" });\n scheduleVisibilitySync();\n return true;\n };\n\n const reanchorToAnchoredMessage = () => {\n const el = streamingTurn;\n if (!el?.isConnected || mode !== \"anchored-to-message\") return false;\n return scrollToElement(el, { align: \"start\" }, { keepPreviousPeek: true });\n };\n\n const applyDefaultScrollPosition = () => {\n const vp = viewport();\n if (!vp || defaultApplied || itemCount === 0) return false;\n const position = options().defaultScrollPosition;\n let applied = false;\n if (position === \"last-anchor\") {\n const list = items();\n const lastAnchor =\n [...list].reverse().find((el) => el.dataset.scrollAnchor === \"true\") ??\n null;\n if (!lastAnchor) {\n applied = scrollToEnd({ behavior: \"auto\" });\n } else if (\n contentBottom() - itemOffsetTop(lastAnchor) <=\n vp.clientHeight\n ) {\n // 该回合完全放得下 → 直接到底\n applied = scrollToEnd({ behavior: \"auto\" });\n } else {\n applied = scrollToElement(\n lastAnchor,\n { align: \"start\" },\n { keepPreviousPeek: true },\n );\n }\n } else if (position === \"end\") {\n applied = scrollToEnd({ behavior: \"auto\" });\n } else {\n applied = scrollToStart({ behavior: \"auto\" });\n }\n if (applied) {\n defaultApplied = true;\n setPendingScroll(false);\n }\n return applied;\n };\n\n const flushPendingScrollToMessage = () => {\n const pending = pendingMessage;\n if (!pending) return false;\n const element = messageElements.get(pending.id);\n if (!element || !scrollToElement(element, pending.options)) return false;\n pendingMessage = null;\n defaultApplied = true;\n setPendingScroll(false);\n return true;\n };\n\n const schedulePendingFlush = () => {\n if (pendingFrame !== null) return;\n pendingFrame = window.requestAnimationFrame(() => {\n pendingFrame = null;\n if (flushPendingScrollToMessage()) capturePrependAnchor();\n });\n };\n\n const scrollToMessage = (\n messageId: string,\n command?: MessageScrollerScrollOptions,\n ) => {\n const element = messageElements.get(messageId);\n if (element) {\n if (scrollToElement(element, command)) {\n pendingMessage = null;\n return true;\n }\n pendingMessage = { id: messageId, options: command };\n return true;\n }\n // 会话尚未挂载任何行时可排队(客户端解析永久链接);已挂载但缺失则返回 false\n if (itemCount === 0) {\n pendingMessage = { id: messageId, options: command };\n setPendingScroll(false);\n return true;\n }\n return false;\n };\n\n const capturePrependAnchor = () => {\n const vp = viewport();\n if (!vp) {\n prependAnchor = null;\n return;\n }\n const vpRect = vp.getBoundingClientRect();\n const firstVisible =\n items().find((el) => {\n if (!el.dataset.messageId) return false;\n const rect = el.getBoundingClientRect();\n return rect.bottom > vpRect.top && rect.top < vpRect.bottom;\n }) ?? null;\n prependAnchor = firstVisible\n ? { element: firstVisible, viewportTop: itemTopInViewport(firstVisible) }\n : null;\n };\n\n const restorePrependAnchor = () => {\n const anchor = prependAnchor;\n const vp = viewport();\n if (!anchor || !vp || !anchor.element.isConnected) return false;\n const delta = itemTopInViewport(anchor.element) - anchor.viewportTop;\n if (Math.abs(delta) <= AT_EDGE_TOLERANCE) return false;\n vp.scrollTop += delta;\n anchor.viewportTop = itemTopInViewport(anchor.element);\n scheduleStateCommit();\n scheduleVisibilitySync();\n return true;\n };\n\n const firstAnchorFrom = (list: HTMLElement[], from: number) => {\n for (let index = from; index < list.length; index += 1) {\n const el = list[index];\n if (el?.dataset.scrollAnchor === \"true\") return el;\n }\n return null;\n };\n\n const firstUnhandledAnchor = (list: HTMLElement[]) =>\n list.find(\n (el) =>\n el.dataset.scrollAnchor === \"true\" && !handledScrollAnchors.has(el),\n ) ?? null;\n\n const hasMultipleAnchorsFrom = (list: HTMLElement[], from: number) => {\n let count = 0;\n for (let index = from; index < list.length; index += 1) {\n if (list[index]?.dataset.scrollAnchor === \"true\") {\n count += 1;\n if (count > 1) return true;\n }\n }\n return false;\n };\n\n const handleContentChange = () => {\n const root = content();\n if (!root) return;\n const list = items();\n const previousCount = itemCount;\n const previousFirst = firstItem;\n itemCount = list.length;\n firstItem = list[0] ?? null;\n\n // 空会话不隐藏视口(data-pending-scroll 跳过)\n if (list.length === 0) setPendingScroll(false);\n\n if (flushPendingScrollToMessage()) {\n capturePrependAnchor();\n return;\n }\n\n if (previousCount === 0) {\n // 初次定位时把已存在的锚点标记为已处理,避免后续 resize/属性变化误触发重锚定\n for (const el of list) {\n if (el.dataset.scrollAnchor === \"true\") handledScrollAnchors.add(el);\n }\n if (applyDefaultScrollPosition()) {\n capturePrependAnchor();\n return;\n }\n if (\n list.length > 0 &&\n options().autoScroll &&\n scrollToEnd({ behavior: \"auto\" })\n ) {\n capturePrependAnchor();\n return;\n }\n commitScrollState();\n scheduleVisibilitySync();\n capturePrependAnchor();\n return;\n }\n\n const previousFirstIndex = previousFirst ? list.indexOf(previousFirst) : -1;\n if (preserveScrollOnPrepend() && previousFirstIndex > 0) {\n restorePrependAnchor();\n capturePrependAnchor();\n return;\n }\n\n if (list.length > previousCount) {\n const firstNewAnchor = firstAnchorFrom(list, previousCount);\n if (firstNewAnchor) {\n // 同批新增多个锚点:跟随底部,避免在多个锚点间跳来跳去\n if (\n options().autoScroll &&\n mode === \"following-bottom\" &&\n hasMultipleAnchorsFrom(list, previousCount)\n ) {\n scrollToEnd({ behavior: \"auto\" });\n capturePrependAnchor();\n return;\n }\n scrollToElement(\n firstNewAnchor,\n { align: \"start\" },\n { keepPreviousPeek: true },\n );\n handledScrollAnchors.add(firstNewAnchor);\n capturePrependAnchor();\n return;\n }\n }\n\n // 行数没变但出现了未处理的新锚点(例如给已有行打开 scrollAnchor)\n if (list.length === previousCount) {\n const unhandled = firstUnhandledAnchor(list);\n if (unhandled) {\n scrollToElement(\n unhandled,\n { align: \"start\" },\n { keepPreviousPeek: true },\n );\n handledScrollAnchors.add(unhandled);\n capturePrependAnchor();\n return;\n }\n }\n\n if (mode === \"following-bottom\" && options().autoScroll) {\n scrollToEnd({ behavior: \"auto\" });\n } else {\n commitScrollState();\n scheduleVisibilitySync();\n }\n capturePrependAnchor();\n };\n\n const handleResize = () => {\n if (mode === \"following-bottom\" && options().autoScroll) {\n scrollToEnd({ behavior: \"auto\" });\n return;\n }\n const before = spacerHeight;\n if (reanchorToAnchoredMessage()) {\n if (options().autoScroll && before > 0 && spacerHeight === 0) {\n scrollToEnd({ behavior: \"auto\" });\n }\n return;\n }\n scheduleStateCommit();\n scheduleVisibilitySync();\n };\n\n const syncAfterScroll = () => {\n commitScrollState();\n scheduleVisibilitySync();\n capturePrependAnchor();\n };\n\n /** 滚轮/触摸/键盘滚动:立刻放弃跟随,把位置交还读者 */\n const releaseFollow = () => {\n if (\n mode === \"following-bottom\" ||\n mode === \"anchored-to-message\" ||\n mode === \"settling-jump\"\n ) {\n applyAutoscrolling(false);\n mode = \"free-scrolling\";\n }\n };\n\n const computeVisibility = () => {\n const vp = viewport();\n const root = content();\n if (!vp || !root) {\n setVisibleMessageIds([]);\n setCurrentAnchorId(null);\n return;\n }\n const vpRect = vp.getBoundingClientRect();\n const readingLine =\n vpRect.top + options().scrollMargin + options().scrollPreviousItemPeek;\n const hasObserver = typeof IntersectionObserver === \"undefined\";\n const visible: string[] = [];\n let anchorId: string | null = null;\n for (const item of items()) {\n const id = item.dataset.messageId;\n if (!id) continue;\n const isAnchor = item.dataset.scrollAnchor === \"true\";\n const rect =\n isAnchor || hasObserver ? item.getBoundingClientRect() : null;\n const isVisible =\n hasObserver && rect\n ? rect.bottom > readingLine && rect.top < vpRect.bottom\n : visibleIds.has(id);\n if (isVisible) visible.push(id);\n if (isAnchor && rect && rect.top <= readingLine + AT_EDGE_TOLERANCE) {\n anchorId = id;\n }\n }\n if (visible.length === 0 && anchorId === null) {\n setVisibleMessageIds([]);\n setCurrentAnchorId(null);\n return;\n }\n setVisibleMessageIds(visible);\n setCurrentAnchorId(anchorId);\n };\n\n const startVisibilityObserver = () => {\n if (typeof IntersectionObserver === \"undefined\") {\n scheduleVisibilitySync();\n return;\n }\n const vp = viewport();\n if (!observer && vp) {\n observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n const id = (entry.target as HTMLElement).dataset.messageId;\n if (!id) continue;\n if (entry.isIntersecting) visibleIds.add(id);\n else visibleIds.delete(id);\n }\n scheduleVisibilitySync();\n },\n {\n root: vp,\n rootMargin: `${-(options().scrollMargin + options().scrollPreviousItemPeek)}px 0px 0px 0px`,\n threshold: [0, 0.01, 0.5, 1],\n },\n );\n }\n for (const element of messageElements.values()) observer?.observe(element);\n scheduleVisibilitySync();\n };\n\n const stopVisibilityObserver = () => {\n if (visibilityFrame !== null) {\n window.cancelAnimationFrame(visibilityFrame);\n visibilityFrame = null;\n }\n observer?.disconnect();\n observer = null;\n visibleIds.clear();\n setVisibleMessageIds([]);\n setCurrentAnchorId(null);\n };\n\n const subscribeVisibility = () => {\n visibilitySubscribers += 1;\n if (visibilitySubscribers === 1) startVisibilityObserver();\n scheduleVisibilitySync();\n let released = false;\n return () => {\n if (released) return;\n released = true;\n visibilitySubscribers -= 1;\n if (visibilitySubscribers === 0) stopVisibilityObserver();\n };\n };\n\n const registerMessage = (\n id: string,\n element: HTMLElement | undefined,\n previous?: HTMLElement,\n ) => {\n if (element) {\n messageElements.set(id, element);\n observer?.observe(element);\n scheduleVisibilitySync();\n if (pendingMessage?.id === id) schedulePendingFlush();\n return;\n }\n if (previous && messageElements.get(id) === previous) {\n messageElements.delete(id);\n visibleIds.delete(id);\n observer?.unobserve(previous);\n scheduleVisibilitySync();\n }\n };\n\n const registerItem = (entry: MessageScrollerItemEntry) => {\n const id = entry.id;\n if (id) registerMessage(id, entry.element);\n return () => {\n if (id) registerMessage(id, undefined, entry.element);\n };\n };\n\n const setSpacerElement = (element: HTMLElement | undefined) => {\n setSpacer(element);\n spacerGap = rowGap(element?.parentElement ?? null);\n };\n\n // 内容观察:初次定位 / prepend 保位 / 新回合锚定 / 跟随 / 尺寸\n createEffect(() => {\n const root = content();\n if (!root) return;\n handleContentChange();\n\n const mutation =\n typeof MutationObserver !== \"undefined\"\n ? new MutationObserver(() => handleContentChange())\n : null;\n mutation?.observe(root, { childList: true });\n\n // 已有行切换 scrollAnchor(dataset 变化)也要重新锚定\n const anchorMutation =\n typeof MutationObserver !== \"undefined\"\n ? new MutationObserver(() => handleContentChange())\n : null;\n anchorMutation?.observe(root, {\n attributes: true,\n attributeFilter: [\"data-scroll-anchor\"],\n subtree: true,\n });\n\n let frame = 0;\n const resize =\n typeof ResizeObserver !== \"undefined\"\n ? new ResizeObserver(() => {\n window.cancelAnimationFrame(frame);\n frame = window.requestAnimationFrame(handleResize);\n })\n : null;\n resize?.observe(root);\n\n onCleanup(() => {\n mutation?.disconnect();\n anchorMutation?.disconnect();\n resize?.disconnect();\n window.cancelAnimationFrame(frame);\n });\n });\n\n // 视口:scroll / 用户滚动意图 / 尺寸\n createEffect(() => {\n const vp = viewport();\n if (!vp) return;\n if (visibilitySubscribers > 0 && !observer) startVisibilityObserver();\n\n const onScroll = () => syncAfterScroll();\n const onIntent = () => releaseFollow();\n const onKeyDown = (event: KeyboardEvent) => {\n if (NAV_KEYS.has(event.key)) releaseFollow();\n };\n vp.addEventListener(\"scroll\", onScroll, { passive: true });\n vp.addEventListener(\"wheel\", onIntent, { passive: true });\n vp.addEventListener(\"touchmove\", onIntent, { passive: true });\n vp.addEventListener(\"keydown\", onKeyDown);\n\n let frame = 0;\n const resize =\n typeof ResizeObserver !== \"undefined\"\n ? new ResizeObserver(() => {\n window.cancelAnimationFrame(frame);\n frame = window.requestAnimationFrame(handleResize);\n })\n : null;\n resize?.observe(vp);\n\n onCleanup(() => {\n vp.removeEventListener(\"scroll\", onScroll);\n vp.removeEventListener(\"wheel\", onIntent);\n vp.removeEventListener(\"touchmove\", onIntent);\n vp.removeEventListener(\"keydown\", onKeyDown);\n resize?.disconnect();\n window.cancelAnimationFrame(frame);\n });\n });\n\n onCleanup(() => {\n if (autoscrollingTimer !== null) window.clearTimeout(autoscrollingTimer);\n if (stateFrame !== null) window.cancelAnimationFrame(stateFrame);\n if (pendingFrame !== null) window.cancelAnimationFrame(pendingFrame);\n if (visibilityFrame !== null) window.cancelAnimationFrame(visibilityFrame);\n observer?.disconnect();\n observer = null;\n });\n\n return {\n viewport,\n setViewport,\n content,\n setContent,\n setSpacer: setSpacerElement,\n registerItem,\n preserveScrollOnPrepend,\n setPreserveScrollOnPrepend,\n scrollableStart,\n scrollableEnd,\n autoscrolling,\n pendingScroll,\n scrollToStart,\n scrollToEnd,\n scrollToMessage,\n currentAnchorId,\n visibleMessageIds,\n subscribeVisibility,\n options,\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** 读取视口还能向哪个方向滚动("在起点/终点" 取其反) */
2
+ export declare function useMessageScrollerScrollable(): {
3
+ start: import('solid-js').Accessor<boolean>;
4
+ end: import('solid-js').Accessor<boolean>;
5
+ };
@@ -0,0 +1,13 @@
1
+ import { useMessageScrollerContext as e } from "./message-scroller.context.js";
2
+ //#region src/components/message-scroller/useMessageScrollerScrollable.ts
3
+ function t() {
4
+ let t = e("useMessageScrollerScrollable");
5
+ return {
6
+ start: t.scrollableStart,
7
+ end: t.scrollableEnd
8
+ };
9
+ }
10
+ //#endregion
11
+ export { t as useMessageScrollerScrollable };
12
+
13
+ //# sourceMappingURL=useMessageScrollerScrollable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMessageScrollerScrollable.js","names":["useMessageScrollerScrollable","ctx","useMessageScrollerContext"],"sources":["../../../src/components/message-scroller/useMessageScrollerScrollable.ts"],"sourcesContent":["import { useMessageScrollerContext } from \"./message-scroller.context\";\n\n/** 读取视口还能向哪个方向滚动(\"在起点/终点\" 取其反) */\nexport function useMessageScrollerScrollable() {\n const ctx = useMessageScrollerContext(\"useMessageScrollerScrollable\");\n return { start: ctx.scrollableStart, end: ctx.scrollableEnd };\n}\n"],"mappings":";;AAGA,SAAgBA,IAA+B;CAC7C,IAAMC,IAAMC,EAA0B,8BAA8B;CACpE,OAAO;EAAE,OAAOD,EAAI;EAAiB,KAAKA,EAAI;CAAc;AAC9D"}
@@ -0,0 +1,7 @@
1
+ import { MessageScrollerVisibilityValue } from './message-scroller.types';
2
+ /**
3
+ * 跟踪读者在会话中的位置:`currentAnchorId` 是当前锚定的回合,
4
+ * `visibleMessageIds` 是屏幕上可见的消息(文档顺序)。
5
+ * 仅在有订阅者时才计算(pay-for-what-you-use)。
6
+ */
7
+ export declare function useMessageScrollerVisibility(): MessageScrollerVisibilityValue;
@@ -0,0 +1,17 @@
1
+ import { useMessageScrollerContext as e } from "./message-scroller.context.js";
2
+ import { onCleanup as t, onMount as n } from "solid-js";
3
+ //#region src/components/message-scroller/useMessageScrollerVisibility.ts
4
+ function r() {
5
+ let r = e("useMessageScrollerVisibility");
6
+ return n(() => {
7
+ let e = r.subscribeVisibility();
8
+ t(e);
9
+ }), {
10
+ currentAnchorId: r.currentAnchorId,
11
+ visibleMessageIds: r.visibleMessageIds
12
+ };
13
+ }
14
+ //#endregion
15
+ export { r as useMessageScrollerVisibility };
16
+
17
+ //# sourceMappingURL=useMessageScrollerVisibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMessageScrollerVisibility.js","names":["useMessageScrollerVisibility","ctx","useMessageScrollerContext","onMount","unsubscribe"],"sources":["../../../src/components/message-scroller/useMessageScrollerVisibility.ts"],"sourcesContent":["import { onCleanup, onMount } from \"solid-js\";\nimport { useMessageScrollerContext } from \"./message-scroller.context\";\nimport type { MessageScrollerVisibilityValue } from \"./message-scroller.types\";\n\n/**\n * 跟踪读者在会话中的位置:`currentAnchorId` 是当前锚定的回合,\n * `visibleMessageIds` 是屏幕上可见的消息(文档顺序)。\n * 仅在有订阅者时才计算(pay-for-what-you-use)。\n */\nexport function useMessageScrollerVisibility(): MessageScrollerVisibilityValue {\n const ctx = useMessageScrollerContext(\"useMessageScrollerVisibility\");\n\n onMount(() => {\n const unsubscribe = ctx.subscribeVisibility();\n onCleanup(unsubscribe);\n });\n\n return {\n currentAnchorId: ctx.currentAnchorId,\n visibleMessageIds: ctx.visibleMessageIds,\n };\n}\n"],"mappings":";;;AASA,SAAgBA,IAA+D;CAC7E,IAAMC,IAAMC,EAA0B,8BAA8B;CAOpE,OALAC,QAAc;EACZ,IAAMC,IAAcH,EAAI,oBAAoB;EAC5C,EAAUG,CAAW;CACvB,CAAC,GAEM;EACL,iBAAiBH,EAAI;EACrB,mBAAmBA,EAAI;CACzB;AACF"}
@@ -1,20 +1,13 @@
1
- import { Middleware, Placement } from '../../../lib';
1
+ import { getTransformOrigin, Middleware } from '../../../lib';
2
2
  import { PopoverSide } from './PopoverContent.types';
3
- /**
4
- * 把 shadcn/Base UI 风格的 side + align 拆分参数转换成核心库统一用的
5
- * `Placement` 字符串。Base UI 额外支持 inline-start / inline-end 逻辑方向,
6
- * 这里简单按 LTR 映射(inline-start -> left, inline-end -> right)。
7
- */
8
- export declare function toPopoverPlacement(side: PopoverSide, align: "start" | "end" | "center"): Placement;
9
- /** 根据最终生效的 placement 计算缩放动画的 transform-origin。 */
10
- export declare function getPopoverTransformOrigin(placement: Placement): string;
3
+ /** side + align 转成核心库的 Placement(逻辑方向按 LTR 映射) */
4
+ export declare function toPopoverPlacement(side: PopoverSide, align: "start" | "end" | "center"): import('../../../lib').Placement;
5
+ /** 根据最终 placement 计算缩放动画的 transform-origin */
6
+ export declare const getPopoverTransformOrigin: typeof getTransformOrigin;
11
7
  export interface BuildPopoverMiddlewareOptions {
12
8
  sideOffset: number;
13
9
  alignOffset: number;
14
10
  collisionPadding: number;
15
11
  }
16
- /**
17
- * Popover 定位管线:offset → flip → shift → hide → containingBlockOffset。
18
- * 和 Tooltip 相比只少了 arrow middleware,其余策略一致。
19
- */
12
+ /** Popover 定位管线:offset → flip → shift → hide → containingBlockOffset */
20
13
  export declare function createPopoverMiddleware(options: BuildPopoverMiddlewareOptions): Middleware[];
@@ -1,36 +1,13 @@
1
- import { getAlignment as e, getSide as t } from "../../../lib/positioner/core/placement.js";
2
- import { offset as n } from "../../../lib/positioner/middleware/offset.js";
3
- import { shift as r } from "../../../lib/positioner/middleware/shift.js";
4
- import { flip as i } from "../../../lib/positioner/middleware/flip.js";
5
- import { hide as a } from "../../../lib/positioner/middleware/hide.js";
6
- import { containingBlockOffset as o } from "../../../lib/positioner/middleware/containing-block-offset.js";
1
+ import { createFloatingMiddleware as e, getTransformOrigin as t, toPlacement as n } from "../../../lib/positioner/utils/floating.js";
7
2
  //#region src/components/popover/PopoverContent/PopoverContent.utils.ts
8
- function s(e, t) {
9
- let n = e === "inline-start" ? "left" : e === "inline-end" ? "right" : e;
10
- return t === "center" ? n : `${n}-${t}`;
3
+ function r(e, t) {
4
+ return n(e, t);
11
5
  }
12
- function c(n) {
13
- let r = t(n), i = e(n), a = i === "start" ? "0%" : i === "end" ? "100%" : "50%";
14
- switch (r) {
15
- case "top": return `${a} 100%`;
16
- case "bottom": return `${a} 0%`;
17
- case "left": return `100% ${a}`;
18
- case "right": return `0% ${a}`;
19
- }
20
- }
21
- function l(e) {
22
- return [
23
- n({
24
- mainAxis: e.sideOffset,
25
- crossAxis: e.alignOffset
26
- }),
27
- i(),
28
- r({ padding: e.collisionPadding }),
29
- a(),
30
- o()
31
- ];
6
+ var i = t;
7
+ function a(t) {
8
+ return e(t);
32
9
  }
33
10
  //#endregion
34
- export { l as createPopoverMiddleware, c as getPopoverTransformOrigin, s as toPopoverPlacement };
11
+ export { a as createPopoverMiddleware, i as getPopoverTransformOrigin, r as toPopoverPlacement };
35
12
 
36
13
  //# sourceMappingURL=PopoverContent.utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PopoverContent.utils.js","names":["toPopoverPlacement","physical","side","align","getPopoverTransformOrigin","getSide","placement","getAlignment","crossAxisOrigin","createPopoverMiddleware","offset","options","flip","shift","hide","containingBlockOffset"],"sources":["../../../../src/components/popover/PopoverContent/PopoverContent.utils.ts"],"sourcesContent":["import {\n containingBlockOffset,\n flip,\n getAlignment,\n getSide,\n hide,\n offset,\n shift,\n type Middleware,\n type Placement,\n} from \"~/lib\";\nimport type { PopoverSide } from \"./PopoverContent.types\";\n\n/**\n * 把 shadcn/Base UI 风格的 side + align 拆分参数转换成核心库统一用的\n * `Placement` 字符串。Base UI 额外支持 inline-start / inline-end 逻辑方向,\n * 这里简单按 LTR 映射(inline-start -> left, inline-end -> right)。\n */\nexport function toPopoverPlacement(\n side: PopoverSide,\n align: \"start\" | \"end\" | \"center\",\n): Placement {\n const physical =\n side === \"inline-start\" ? \"left\" : side === \"inline-end\" ? \"right\" : side;\n return align === \"center\" ? physical : (`${physical}-${align}` as Placement);\n}\n\n/** 根据最终生效的 placement 计算缩放动画的 transform-origin。 */\nexport function getPopoverTransformOrigin(placement: Placement): string {\n const side = getSide(placement);\n const align = getAlignment(placement);\n const crossAxisOrigin =\n align === \"start\" ? \"0%\" : align === \"end\" ? \"100%\" : \"50%\";\n\n switch (side) {\n case \"top\":\n return `${crossAxisOrigin} 100%`;\n case \"bottom\":\n return `${crossAxisOrigin} 0%`;\n case \"left\":\n return `100% ${crossAxisOrigin}`;\n case \"right\":\n return `0% ${crossAxisOrigin}`;\n }\n}\n\nexport interface BuildPopoverMiddlewareOptions {\n sideOffset: number;\n alignOffset: number;\n collisionPadding: number;\n}\n\n/**\n * Popover 定位管线:offset → flip → shift → hide → containingBlockOffset。\n * 和 Tooltip 相比只少了 arrow middleware,其余策略一致。\n */\nexport function createPopoverMiddleware(\n options: BuildPopoverMiddlewareOptions,\n): Middleware[] {\n return [\n offset({ mainAxis: options.sideOffset, crossAxis: options.alignOffset }),\n flip(),\n shift({ padding: options.collisionPadding }),\n hide(),\n containingBlockOffset(),\n ];\n}\n"],"mappings":";;;;;;;AAkBA,SAAgBA,EACd,GACA,GACW;CACX,IAAMC,IACJC,MAAS,iBAAiB,SAASA,MAAS,eAAe,UAAUA;CACvE,OAAOC,MAAU,WAAWF,IAAY,GAAGA,EAAS,GAAGE;AACzD;AAGA,SAAgBC,EAA0B,GAA8B;CACtE,IAAMF,IAAOG,EAAQC,CAAS,GACxBH,IAAQI,EAAaD,CAAS,GAC9BE,IACJL,MAAU,UAAU,OAAOA,MAAU,QAAQ,SAAS;CAExD,QAAQD,GAAR;EACE,KAAK,OACH,OAAO,GAAGM,EAAgB;EAC5B,KAAK,UACH,OAAO,GAAGA,EAAgB;EAC5B,KAAK,QACH,OAAO,QAAQA;EACjB,KAAK,SACH,OAAO,MAAMA;CACjB;AACF;AAYA,SAAgBC,EACd,GACc;CACd,OAAO;EACLC,EAAO;GAAE,UAAUC,EAAQ;GAAY,WAAWA,EAAQ;EAAY,CAAC;EACvEC,EAAK;EACLC,EAAM,EAAE,SAASF,EAAQ,iBAAiB,CAAC;EAC3CG,EAAK;EACLC,EAAsB;CACxB;AACF"}
1
+ {"version":3,"file":"PopoverContent.utils.js","names":["toPopoverPlacement","toPlacement","side","align","getPopoverTransformOrigin","getTransformOrigin","createPopoverMiddleware","createFloatingMiddleware","options"],"sources":["../../../../src/components/popover/PopoverContent/PopoverContent.utils.ts"],"sourcesContent":["import {\n createFloatingMiddleware,\n getTransformOrigin,\n toPlacement,\n type Middleware,\n} from \"~/lib\";\nimport type { PopoverSide } from \"./PopoverContent.types\";\n\n// 定位相关的纯函数已抽到 ~/lib/positioner/utils/floating,这里保留原导出名。\n\n/** side + align 转成核心库的 Placement(逻辑方向按 LTR 映射) */\nexport function toPopoverPlacement(\n side: PopoverSide,\n align: \"start\" | \"end\" | \"center\",\n) {\n return toPlacement(side, align);\n}\n\n/** 根据最终 placement 计算缩放动画的 transform-origin */\nexport const getPopoverTransformOrigin = getTransformOrigin;\n\nexport interface BuildPopoverMiddlewareOptions {\n sideOffset: number;\n alignOffset: number;\n collisionPadding: number;\n}\n\n/** Popover 定位管线:offset → flip → shift → hide → containingBlockOffset */\nexport function createPopoverMiddleware(\n options: BuildPopoverMiddlewareOptions,\n): Middleware[] {\n return createFloatingMiddleware(options);\n}\n"],"mappings":";;AAWA,SAAgBA,EACd,GACA,GACA;CACA,OAAOC,EAAYC,GAAMC,CAAK;AAChC;AAGA,IAAaC,IAA4BC;AASzC,SAAgBC,EACd,GACc;CACd,OAAOC,EAAyBC,CAAO;AACzC"}
@@ -0,0 +1,3 @@
1
+ import { QuestionnaireProps } from '../questionnaire.types';
2
+ /** Questionnaire 根:渲染 form,持有进度、激活项、校验与导航状态 */
3
+ export declare function Questionnaire(props: QuestionnaireProps): import('solid-js').JSX.Element;