@neut/ui 0.0.17 → 0.0.18

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 (707) hide show
  1. package/dist/components/accordion/Accordion/Accordion.js +3 -0
  2. package/dist/components/accordion/Accordion/Accordion.js.map +1 -1
  3. package/dist/components/accordion/AccordionContent/AccordionContent.js +27 -21
  4. package/dist/components/accordion/AccordionContent/AccordionContent.js.map +1 -1
  5. package/dist/components/accordion/AccordionItem/AccordionItem.js +3 -0
  6. package/dist/components/accordion/AccordionItem/AccordionItem.js.map +1 -1
  7. package/dist/components/accordion/AccordionTrigger/AccordionTrigger.js +19 -18
  8. package/dist/components/accordion/AccordionTrigger/AccordionTrigger.js.map +1 -1
  9. package/dist/components/alert/Alert/Alert.js +8 -3
  10. package/dist/components/alert/Alert/Alert.js.map +1 -1
  11. package/dist/components/alert/AlertAction/AlertAction.js +8 -3
  12. package/dist/components/alert/AlertAction/AlertAction.js.map +1 -1
  13. package/dist/components/alert/AlertDescription/AlertDescription.js +8 -3
  14. package/dist/components/alert/AlertDescription/AlertDescription.js.map +1 -1
  15. package/dist/components/alert/AlertTitle/AlertTitle.js +8 -3
  16. package/dist/components/alert/AlertTitle/AlertTitle.js.map +1 -1
  17. package/dist/components/alert-dialog/AlertDialog/AlertDialog.d.ts +3 -1
  18. package/dist/components/alert-dialog/AlertDialog/AlertDialog.js +6 -1
  19. package/dist/components/alert-dialog/AlertDialog/AlertDialog.js.map +1 -1
  20. package/dist/components/alert-dialog/AlertDialogCancel/AlertDialogCancel.js +9 -7
  21. package/dist/components/alert-dialog/AlertDialogCancel/AlertDialogCancel.js.map +1 -1
  22. package/dist/components/alert-dialog/AlertDialogContent/AlertDialogContent.types.d.ts +9 -3
  23. package/dist/components/alert-dialog/AlertDialogDescription/AlertDialogDescription.js +8 -3
  24. package/dist/components/alert-dialog/AlertDialogDescription/AlertDialogDescription.js.map +1 -1
  25. package/dist/components/alert-dialog/AlertDialogFooter/AlertDialogFooter.js +8 -3
  26. package/dist/components/alert-dialog/AlertDialogFooter/AlertDialogFooter.js.map +1 -1
  27. package/dist/components/alert-dialog/AlertDialogHeader/AlertDialogHeader.js +8 -3
  28. package/dist/components/alert-dialog/AlertDialogHeader/AlertDialogHeader.js.map +1 -1
  29. package/dist/components/alert-dialog/AlertDialogMedia/AlertDialogMedia.js +8 -3
  30. package/dist/components/alert-dialog/AlertDialogMedia/AlertDialogMedia.js.map +1 -1
  31. package/dist/components/alert-dialog/AlertDialogTitle/AlertDialogTitle.js +8 -3
  32. package/dist/components/alert-dialog/AlertDialogTitle/AlertDialogTitle.js.map +1 -1
  33. package/dist/components/aspect-ratio/AspectRatio.js +3 -0
  34. package/dist/components/aspect-ratio/AspectRatio.js.map +1 -1
  35. package/dist/components/attachment/AttachmentTrigger/AttachmentTrigger.js +15 -7
  36. package/dist/components/attachment/AttachmentTrigger/AttachmentTrigger.js.map +1 -1
  37. package/dist/components/avatar/Avatar/Avatar.context.d.ts +7 -0
  38. package/dist/components/avatar/Avatar/Avatar.context.js +1 -1
  39. package/dist/components/avatar/Avatar/Avatar.context.js.map +1 -1
  40. package/dist/components/avatar/Avatar/Avatar.js +7 -2
  41. package/dist/components/avatar/Avatar/Avatar.js.map +1 -1
  42. package/dist/components/avatar/AvatarBadge/AvatarBadge.js +8 -3
  43. package/dist/components/avatar/AvatarBadge/AvatarBadge.js.map +1 -1
  44. package/dist/components/avatar/AvatarFallback/AvatarFallback.js +10 -5
  45. package/dist/components/avatar/AvatarFallback/AvatarFallback.js.map +1 -1
  46. package/dist/components/avatar/AvatarGroup/AvatarGroup.js +8 -3
  47. package/dist/components/avatar/AvatarGroup/AvatarGroup.js.map +1 -1
  48. package/dist/components/avatar/AvatarGroupCount/AvatarGroupCount.js +8 -3
  49. package/dist/components/avatar/AvatarGroupCount/AvatarGroupCount.js.map +1 -1
  50. package/dist/components/avatar/AvatarImage/AvatarImage.js +19 -12
  51. package/dist/components/avatar/AvatarImage/AvatarImage.js.map +1 -1
  52. package/dist/components/badge/Badge.js +9 -4
  53. package/dist/components/badge/Badge.js.map +1 -1
  54. package/dist/components/breadcrumb/BreadcrumbEllipsis/BreadcrumbEllipsis.js +8 -3
  55. package/dist/components/breadcrumb/BreadcrumbEllipsis/BreadcrumbEllipsis.js.map +1 -1
  56. package/dist/components/breadcrumb/BreadcrumbItem/BreadcrumbItem.js +8 -3
  57. package/dist/components/breadcrumb/BreadcrumbItem/BreadcrumbItem.js.map +1 -1
  58. package/dist/components/breadcrumb/BreadcrumbLink/BreadcrumbLink.js +3 -0
  59. package/dist/components/breadcrumb/BreadcrumbLink/BreadcrumbLink.js.map +1 -1
  60. package/dist/components/breadcrumb/BreadcrumbList/BreadcrumbList.js +8 -3
  61. package/dist/components/breadcrumb/BreadcrumbList/BreadcrumbList.js.map +1 -1
  62. package/dist/components/breadcrumb/BreadcrumbPage/BreadcrumbPage.js +8 -3
  63. package/dist/components/breadcrumb/BreadcrumbPage/BreadcrumbPage.js.map +1 -1
  64. package/dist/components/breadcrumb/BreadcrumbSeparator/BreadcrumbSeparator.js +8 -3
  65. package/dist/components/breadcrumb/BreadcrumbSeparator/BreadcrumbSeparator.js.map +1 -1
  66. package/dist/components/bubble/BubbleContent/BubbleContent.js +21 -10
  67. package/dist/components/bubble/BubbleContent/BubbleContent.js.map +1 -1
  68. package/dist/components/button/Button.js +3 -0
  69. package/dist/components/button/Button.js.map +1 -1
  70. package/dist/components/button-group/ButtonGroup/ButtonGroup.js +3 -0
  71. package/dist/components/button-group/ButtonGroup/ButtonGroup.js.map +1 -1
  72. package/dist/components/button-group/ButtonGroupText/ButtonGroupText.js +16 -7
  73. package/dist/components/button-group/ButtonGroupText/ButtonGroupText.js.map +1 -1
  74. package/dist/components/calendar/Calendar/Calendar.d.ts +2 -3
  75. package/dist/components/calendar/Calendar/Calendar.js +89 -264
  76. package/dist/components/calendar/Calendar/Calendar.js.map +1 -1
  77. package/dist/components/calendar/Calendar/Calendar.options.d.ts +43 -0
  78. package/dist/components/calendar/Calendar/Calendar.options.js +38 -0
  79. package/dist/components/calendar/Calendar/Calendar.options.js.map +1 -0
  80. package/dist/components/calendar/Calendar/Calendar.selection.d.ts +16 -0
  81. package/dist/components/calendar/Calendar/Calendar.selection.js +50 -0
  82. package/dist/components/calendar/Calendar/Calendar.selection.js.map +1 -0
  83. package/dist/components/calendar/Calendar/Calendar.styles.d.ts +8 -0
  84. package/dist/components/calendar/Calendar/Calendar.styles.js +32 -0
  85. package/dist/components/calendar/Calendar/Calendar.styles.js.map +1 -0
  86. package/dist/components/calendar/Calendar/Calendar.utils.d.ts +3 -1
  87. package/dist/components/calendar/Calendar/Calendar.utils.js +4 -1
  88. package/dist/components/calendar/Calendar/Calendar.utils.js.map +1 -1
  89. package/dist/components/calendar/Calendar/CalendarDay.d.ts +28 -0
  90. package/dist/components/calendar/Calendar/CalendarDay.js +41 -0
  91. package/dist/components/calendar/Calendar/CalendarDay.js.map +1 -0
  92. package/dist/components/calendar/Calendar/CalendarMonth.d.ts +35 -0
  93. package/dist/components/calendar/Calendar/CalendarMonth.js +127 -0
  94. package/dist/components/calendar/Calendar/CalendarMonth.js.map +1 -0
  95. package/dist/components/calendar/Calendar/CalendarMonthCaption.d.ts +22 -0
  96. package/dist/components/calendar/Calendar/CalendarMonthCaption.js +103 -0
  97. package/dist/components/calendar/Calendar/CalendarMonthCaption.js.map +1 -0
  98. package/dist/components/calendar/index.js +3 -2
  99. package/dist/components/card/Card/Card.js +3 -0
  100. package/dist/components/card/Card/Card.js.map +1 -1
  101. package/dist/components/card/CardAction/CardAction.js +8 -3
  102. package/dist/components/card/CardAction/CardAction.js.map +1 -1
  103. package/dist/components/card/CardContent/CardContent.js +8 -3
  104. package/dist/components/card/CardContent/CardContent.js.map +1 -1
  105. package/dist/components/card/CardDescription/CardDescription.js +8 -3
  106. package/dist/components/card/CardDescription/CardDescription.js.map +1 -1
  107. package/dist/components/card/CardFooter/CardFooter.js +8 -3
  108. package/dist/components/card/CardFooter/CardFooter.js.map +1 -1
  109. package/dist/components/card/CardHeader/CardHeader.js +8 -3
  110. package/dist/components/card/CardHeader/CardHeader.js.map +1 -1
  111. package/dist/components/card/CardTitle/CardTitle.js +8 -3
  112. package/dist/components/card/CardTitle/CardTitle.js.map +1 -1
  113. package/dist/components/carousel/Carousel/Carousel.context.js +1 -1
  114. package/dist/components/carousel/Carousel/Carousel.context.js.map +1 -1
  115. package/dist/components/carousel/Carousel/Carousel.js +19 -12
  116. package/dist/components/carousel/Carousel/Carousel.js.map +1 -1
  117. package/dist/components/carousel/Carousel/useKeyboardNavigation.d.ts +11 -1
  118. package/dist/components/carousel/Carousel/useKeyboardNavigation.js +5 -4
  119. package/dist/components/carousel/Carousel/useKeyboardNavigation.js.map +1 -1
  120. package/dist/components/carousel/CarouselContent/CarouselContent.js +8 -3
  121. package/dist/components/carousel/CarouselContent/CarouselContent.js.map +1 -1
  122. package/dist/components/carousel/CarouselNext/CarouselNext.js +29 -16
  123. package/dist/components/carousel/CarouselNext/CarouselNext.js.map +1 -1
  124. package/dist/components/carousel/CarouselPrevious/CarouselPrevious.js +29 -16
  125. package/dist/components/carousel/CarouselPrevious/CarouselPrevious.js.map +1 -1
  126. package/dist/components/checkbox/Checkbox/Checkbox.js +32 -25
  127. package/dist/components/checkbox/Checkbox/Checkbox.js.map +1 -1
  128. package/dist/components/collapsible/Collapsible/Collapsible.context.js +1 -1
  129. package/dist/components/collapsible/Collapsible/Collapsible.context.js.map +1 -1
  130. package/dist/components/collapsible/CollapsibleTrigger/CollapsibleTrigger.js +13 -12
  131. package/dist/components/collapsible/CollapsibleTrigger/CollapsibleTrigger.js.map +1 -1
  132. package/dist/components/combobox/Combobox/Combobox.js +52 -52
  133. package/dist/components/combobox/Combobox/Combobox.js.map +1 -1
  134. package/dist/components/combobox/Combobox/Combobox.types.d.ts +15 -6
  135. package/dist/components/combobox/ComboboxChipsInput/ComboboxChipsInput.js +7 -3
  136. package/dist/components/combobox/ComboboxChipsInput/ComboboxChipsInput.js.map +1 -1
  137. package/dist/components/combobox/ComboboxClear/ComboboxClear.js +1 -1
  138. package/dist/components/combobox/ComboboxClear/ComboboxClear.js.map +1 -1
  139. package/dist/components/combobox/ComboboxInput/ComboboxInput.js +26 -10
  140. package/dist/components/combobox/ComboboxInput/ComboboxInput.js.map +1 -1
  141. package/dist/components/combobox/ComboboxItem/ComboboxItem.js +6 -5
  142. package/dist/components/combobox/ComboboxItem/ComboboxItem.js.map +1 -1
  143. package/dist/components/combobox/ComboboxList/ComboboxList.js +17 -11
  144. package/dist/components/combobox/ComboboxList/ComboboxList.js.map +1 -1
  145. package/dist/components/combobox/ComboboxTrigger/ComboboxTrigger.js +8 -1
  146. package/dist/components/combobox/ComboboxTrigger/ComboboxTrigger.js.map +1 -1
  147. package/dist/components/context-menu/ContextMenu/ContextMenu.js +10 -8
  148. package/dist/components/context-menu/ContextMenu/ContextMenu.js.map +1 -1
  149. package/dist/components/context-menu/ContextMenuContent/context-menu.highlight.d.ts +33 -0
  150. package/dist/components/context-menu/ContextMenuContent/context-menu.highlight.js +41 -0
  151. package/dist/components/context-menu/ContextMenuContent/context-menu.highlight.js.map +1 -0
  152. package/dist/components/context-menu/ContextMenuContent/context-menu.popup-items.d.ts +25 -0
  153. package/dist/components/context-menu/ContextMenuContent/context-menu.popup-items.js +20 -0
  154. package/dist/components/context-menu/ContextMenuContent/context-menu.popup-items.js.map +1 -0
  155. package/dist/components/context-menu/ContextMenuContent/context-menu.positioner.d.ts +31 -0
  156. package/dist/components/context-menu/ContextMenuContent/context-menu.positioner.js +39 -0
  157. package/dist/components/context-menu/ContextMenuContent/context-menu.positioner.js.map +1 -0
  158. package/dist/components/context-menu/ContextMenuContent/useContextMenuContent.js +70 -136
  159. package/dist/components/context-menu/ContextMenuContent/useContextMenuContent.js.map +1 -1
  160. package/dist/components/context-menu/ContextMenuSub/ContextMenuSub.js +2 -1
  161. package/dist/components/context-menu/ContextMenuSub/ContextMenuSub.js.map +1 -1
  162. package/dist/components/context-menu/ContextMenuTrigger/ContextMenuTrigger.js +20 -10
  163. package/dist/components/context-menu/ContextMenuTrigger/ContextMenuTrigger.js.map +1 -1
  164. package/dist/components/context-menu/ContextMenuTrigger/context-menu.long-press.d.ts +24 -0
  165. package/dist/components/context-menu/ContextMenuTrigger/context-menu.long-press.js +26 -0
  166. package/dist/components/context-menu/ContextMenuTrigger/context-menu.long-press.js.map +1 -0
  167. package/dist/components/context-menu/ContextMenuTrigger/context-menu.trigger.utils.d.ts +35 -0
  168. package/dist/components/context-menu/ContextMenuTrigger/context-menu.trigger.utils.js +17 -0
  169. package/dist/components/context-menu/ContextMenuTrigger/context-menu.trigger.utils.js.map +1 -0
  170. package/dist/components/context-menu/ContextMenuTrigger/useContextMenuTrigger.d.ts +9 -11
  171. package/dist/components/context-menu/ContextMenuTrigger/useContextMenuTrigger.js +36 -33
  172. package/dist/components/context-menu/ContextMenuTrigger/useContextMenuTrigger.js.map +1 -1
  173. package/dist/components/context-menu/context-menu.keyboard.d.ts +29 -0
  174. package/dist/components/context-menu/context-menu.keyboard.js +52 -0
  175. package/dist/components/context-menu/context-menu.keyboard.js.map +1 -0
  176. package/dist/components/context-menu/context-menu.typeahead.d.ts +27 -0
  177. package/dist/components/context-menu/context-menu.typeahead.js +19 -0
  178. package/dist/components/context-menu/context-menu.typeahead.js.map +1 -0
  179. package/dist/components/context-menu/context-menu.utils.d.ts +5 -2
  180. package/dist/components/context-menu/context-menu.utils.js +17 -39
  181. package/dist/components/context-menu/context-menu.utils.js.map +1 -1
  182. package/dist/components/date-picker/DatePicker/DatePicker.js +6 -0
  183. package/dist/components/date-picker/DatePicker/DatePicker.js.map +1 -1
  184. package/dist/components/dialog/Dialog/Dialog.context.js +1 -1
  185. package/dist/components/dialog/Dialog/Dialog.context.js.map +1 -1
  186. package/dist/components/dialog/Dialog/Dialog.js +24 -15
  187. package/dist/components/dialog/Dialog/Dialog.js.map +1 -1
  188. package/dist/components/dialog/Dialog/Dialog.types.d.ts +5 -0
  189. package/dist/components/dialog/DialogClose/DialogClose.js +20 -19
  190. package/dist/components/dialog/DialogClose/DialogClose.js.map +1 -1
  191. package/dist/components/dialog/DialogContent/DialogContent.context.js +1 -1
  192. package/dist/components/dialog/DialogContent/DialogContent.context.js.map +1 -1
  193. package/dist/components/dialog/DialogDescription/DialogDescription.js +8 -3
  194. package/dist/components/dialog/DialogDescription/DialogDescription.js.map +1 -1
  195. package/dist/components/dialog/DialogFooter/DialogFooter.js +8 -3
  196. package/dist/components/dialog/DialogFooter/DialogFooter.js.map +1 -1
  197. package/dist/components/dialog/DialogHeader/DialogHeader.js +8 -3
  198. package/dist/components/dialog/DialogHeader/DialogHeader.js.map +1 -1
  199. package/dist/components/dialog/DialogOverlay/DialogOverlay.js +3 -0
  200. package/dist/components/dialog/DialogOverlay/DialogOverlay.js.map +1 -1
  201. package/dist/components/dialog/DialogSurface/DialogSurface.js +34 -26
  202. package/dist/components/dialog/DialogSurface/DialogSurface.js.map +1 -1
  203. package/dist/components/dialog/DialogTitle/DialogTitle.js +8 -3
  204. package/dist/components/dialog/DialogTitle/DialogTitle.js.map +1 -1
  205. package/dist/components/drawer/Drawer/Drawer.js +1 -1
  206. package/dist/components/drawer/Drawer/Drawer.js.map +1 -1
  207. package/dist/components/drawer/Drawer/create-change-event-details.js +4 -20
  208. package/dist/components/drawer/Drawer/create-change-event-details.js.map +1 -1
  209. package/dist/components/drawer/DrawerContent/drawer-swipe.utils.d.ts +32 -0
  210. package/dist/components/drawer/DrawerContent/drawer-swipe.utils.js +36 -0
  211. package/dist/components/drawer/DrawerContent/drawer-swipe.utils.js.map +1 -0
  212. package/dist/components/drawer/DrawerContent/useDrawerSwipe.d.ts +3 -0
  213. package/dist/components/drawer/DrawerContent/useDrawerSwipe.js +22 -42
  214. package/dist/components/drawer/DrawerContent/useDrawerSwipe.js.map +1 -1
  215. package/dist/components/drawer/DrawerOverlay/DrawerOverlay.js +1 -1
  216. package/dist/components/drawer/DrawerOverlay/DrawerOverlay.js.map +1 -1
  217. package/dist/components/dropdown-menu/DropdownMenuTrigger/DropdownMenuTrigger.js +7 -7
  218. package/dist/components/dropdown-menu/DropdownMenuTrigger/DropdownMenuTrigger.js.map +1 -1
  219. package/dist/components/dropdown-menu/DropdownMenuTrigger/useDropdownMenuTrigger.d.ts +7 -1
  220. package/dist/components/dropdown-menu/DropdownMenuTrigger/useDropdownMenuTrigger.js +10 -10
  221. package/dist/components/dropdown-menu/DropdownMenuTrigger/useDropdownMenuTrigger.js.map +1 -1
  222. package/dist/components/field/Field/Field.js +3 -0
  223. package/dist/components/field/Field/Field.js.map +1 -1
  224. package/dist/components/field/FieldContent/FieldContent.js +8 -3
  225. package/dist/components/field/FieldContent/FieldContent.js.map +1 -1
  226. package/dist/components/field/FieldDescription/FieldDescription.js +8 -3
  227. package/dist/components/field/FieldDescription/FieldDescription.js.map +1 -1
  228. package/dist/components/field/FieldError/FieldError.js +8 -3
  229. package/dist/components/field/FieldError/FieldError.js.map +1 -1
  230. package/dist/components/field/FieldGroup/FieldGroup.js +8 -3
  231. package/dist/components/field/FieldGroup/FieldGroup.js.map +1 -1
  232. package/dist/components/field/FieldLabel/FieldLabel.js +3 -0
  233. package/dist/components/field/FieldLabel/FieldLabel.js.map +1 -1
  234. package/dist/components/field/FieldLegend/FieldLegend.js +3 -0
  235. package/dist/components/field/FieldLegend/FieldLegend.js.map +1 -1
  236. package/dist/components/field/FieldSeparator/FieldSeparator.js +3 -0
  237. package/dist/components/field/FieldSeparator/FieldSeparator.js.map +1 -1
  238. package/dist/components/field/FieldSet/FieldSet.js +8 -3
  239. package/dist/components/field/FieldSet/FieldSet.js.map +1 -1
  240. package/dist/components/field/FieldTitle/FieldTitle.js +8 -3
  241. package/dist/components/field/FieldTitle/FieldTitle.js.map +1 -1
  242. package/dist/components/image/Image.utils.d.ts +14 -16
  243. package/dist/components/image/Image.utils.js +146 -190
  244. package/dist/components/image/Image.utils.js.map +1 -1
  245. package/dist/components/image/ImageElement.js +31 -27
  246. package/dist/components/image/ImageElement.js.map +1 -1
  247. package/dist/components/image/lib/blur.d.ts +31 -0
  248. package/dist/components/image/lib/blur.js +24 -0
  249. package/dist/components/image/lib/blur.js.map +1 -0
  250. package/dist/components/image/lib/dev-checks.d.ts +52 -0
  251. package/dist/components/image/lib/handle-loading.d.ts +13 -0
  252. package/dist/components/image/lib/handle-loading.js +20 -0
  253. package/dist/components/image/lib/handle-loading.js.map +1 -0
  254. package/dist/components/image/lib/loader.d.ts +39 -0
  255. package/dist/components/image/lib/loader.js +57 -0
  256. package/dist/components/image/lib/loader.js.map +1 -0
  257. package/dist/components/image/lib/static-import.d.ts +14 -0
  258. package/dist/components/image/lib/static-import.js +17 -0
  259. package/dist/components/image/lib/static-import.js.map +1 -0
  260. package/dist/components/input-group/InputGroup/InputGroup.js +8 -3
  261. package/dist/components/input-group/InputGroup/InputGroup.js.map +1 -1
  262. package/dist/components/input-group/InputGroupAddon/InputGroupAddon.js +3 -0
  263. package/dist/components/input-group/InputGroupAddon/InputGroupAddon.js.map +1 -1
  264. package/dist/components/input-group/InputGroupButton/InputGroupButton.js +3 -0
  265. package/dist/components/input-group/InputGroupButton/InputGroupButton.js.map +1 -1
  266. package/dist/components/input-group/InputGroupInput/InputGroupInput.js +3 -0
  267. package/dist/components/input-group/InputGroupInput/InputGroupInput.js.map +1 -1
  268. package/dist/components/input-group/InputGroupText/InputGroupText.js +8 -3
  269. package/dist/components/input-group/InputGroupText/InputGroupText.js.map +1 -1
  270. package/dist/components/input-group/InputGroupTextarea/InputGroupTextarea.js +3 -0
  271. package/dist/components/input-group/InputGroupTextarea/InputGroupTextarea.js.map +1 -1
  272. package/dist/components/item/Item/Item.js +9 -0
  273. package/dist/components/item/Item/Item.js.map +1 -1
  274. package/dist/components/item/ItemActions/ItemActions.js +8 -3
  275. package/dist/components/item/ItemActions/ItemActions.js.map +1 -1
  276. package/dist/components/item/ItemContent/ItemContent.js +8 -3
  277. package/dist/components/item/ItemContent/ItemContent.js.map +1 -1
  278. package/dist/components/item/ItemDescription/ItemDescription.js +8 -3
  279. package/dist/components/item/ItemDescription/ItemDescription.js.map +1 -1
  280. package/dist/components/item/ItemFooter/ItemFooter.js +8 -3
  281. package/dist/components/item/ItemFooter/ItemFooter.js.map +1 -1
  282. package/dist/components/item/ItemGroup/ItemGroup.js +8 -3
  283. package/dist/components/item/ItemGroup/ItemGroup.js.map +1 -1
  284. package/dist/components/item/ItemHeader/ItemHeader.js +8 -3
  285. package/dist/components/item/ItemHeader/ItemHeader.js.map +1 -1
  286. package/dist/components/item/ItemMedia/ItemMedia.js +3 -0
  287. package/dist/components/item/ItemMedia/ItemMedia.js.map +1 -1
  288. package/dist/components/item/ItemSeparator/ItemSeparator.js +3 -0
  289. package/dist/components/item/ItemSeparator/ItemSeparator.js.map +1 -1
  290. package/dist/components/item/ItemTitle/ItemTitle.js +8 -3
  291. package/dist/components/item/ItemTitle/ItemTitle.js.map +1 -1
  292. package/dist/components/kbd/Kbd.js +16 -6
  293. package/dist/components/kbd/Kbd.js.map +1 -1
  294. package/dist/components/label/Label.js +3 -0
  295. package/dist/components/label/Label.js.map +1 -1
  296. package/dist/components/marker/Marker/Marker.styles.d.ts +1 -1
  297. package/dist/components/message-scroller/message-scroller.anchoring.d.ts +60 -0
  298. package/dist/components/message-scroller/message-scroller.anchoring.js +139 -0
  299. package/dist/components/message-scroller/message-scroller.anchoring.js.map +1 -0
  300. package/dist/components/message-scroller/message-scroller.anchors.d.ts +12 -0
  301. package/dist/components/message-scroller/message-scroller.anchors.js +23 -0
  302. package/dist/components/message-scroller/message-scroller.anchors.js.map +1 -0
  303. package/dist/components/message-scroller/message-scroller.commands.d.ts +43 -0
  304. package/dist/components/message-scroller/message-scroller.commands.js +51 -0
  305. package/dist/components/message-scroller/message-scroller.commands.js.map +1 -0
  306. package/dist/components/message-scroller/message-scroller.dom-measure.d.ts +29 -0
  307. package/dist/components/message-scroller/message-scroller.dom-measure.js +37 -0
  308. package/dist/components/message-scroller/message-scroller.dom-measure.js.map +1 -0
  309. package/dist/components/message-scroller/message-scroller.measure.d.ts +27 -0
  310. package/dist/components/message-scroller/message-scroller.measure.js +21 -0
  311. package/dist/components/message-scroller/message-scroller.measure.js.map +1 -0
  312. package/dist/components/message-scroller/message-scroller.scroll-state.d.ts +54 -0
  313. package/dist/components/message-scroller/message-scroller.scroll-state.js +74 -0
  314. package/dist/components/message-scroller/message-scroller.scroll-state.js.map +1 -0
  315. package/dist/components/message-scroller/message-scroller.scroll-target.d.ts +27 -0
  316. package/dist/components/message-scroller/message-scroller.scroll-target.js +33 -0
  317. package/dist/components/message-scroller/message-scroller.scroll-target.js.map +1 -0
  318. package/dist/components/message-scroller/message-scroller.utils.d.ts +7 -0
  319. package/dist/components/message-scroller/message-scroller.utils.js +3 -2
  320. package/dist/components/message-scroller/message-scroller.utils.js.map +1 -1
  321. package/dist/components/message-scroller/message-scroller.visibility.d.ts +43 -0
  322. package/dist/components/message-scroller/message-scroller.visibility.js +82 -0
  323. package/dist/components/message-scroller/message-scroller.visibility.js.map +1 -0
  324. package/dist/components/message-scroller/useMessageScrollerEngine.js +87 -337
  325. package/dist/components/message-scroller/useMessageScrollerEngine.js.map +1 -1
  326. package/dist/components/number-input/NumberInput/NumberInput.js +21 -19
  327. package/dist/components/number-input/NumberInput/NumberInput.js.map +1 -1
  328. package/dist/components/number-input/NumberInput/NumberInput.utils.d.ts +6 -2
  329. package/dist/components/number-input/NumberInput/NumberInput.utils.js +1 -3
  330. package/dist/components/number-input/NumberInput/NumberInput.utils.js.map +1 -1
  331. package/dist/components/number-input/NumberInput/create-change-event-details.d.ts +1 -2
  332. package/dist/components/number-input/NumberInput/create-change-event-details.js +4 -20
  333. package/dist/components/number-input/NumberInput/create-change-event-details.js.map +1 -1
  334. package/dist/components/pagination/Pagination/Pagination.js +8 -3
  335. package/dist/components/pagination/Pagination/Pagination.js.map +1 -1
  336. package/dist/components/pagination/PaginationContent/PaginationContent.js +8 -3
  337. package/dist/components/pagination/PaginationContent/PaginationContent.js.map +1 -1
  338. package/dist/components/pagination/PaginationEllipsis/PaginationEllipsis.js +8 -3
  339. package/dist/components/pagination/PaginationEllipsis/PaginationEllipsis.js.map +1 -1
  340. package/dist/components/pagination/PaginationLink/PaginationLink.js +3 -0
  341. package/dist/components/pagination/PaginationLink/PaginationLink.js.map +1 -1
  342. package/dist/components/pagination/PaginationNext/PaginationNext.js +3 -0
  343. package/dist/components/pagination/PaginationNext/PaginationNext.js.map +1 -1
  344. package/dist/components/pagination/PaginationPrevious/PaginationPrevious.js +3 -0
  345. package/dist/components/pagination/PaginationPrevious/PaginationPrevious.js.map +1 -1
  346. package/dist/components/popover/PopoverContent/PopoverContent.js +3 -0
  347. package/dist/components/popover/PopoverContent/PopoverContent.js.map +1 -1
  348. package/dist/components/progress/Progress/Progress.context.js +1 -1
  349. package/dist/components/progress/Progress/Progress.context.js.map +1 -1
  350. package/dist/components/progress/Progress/Progress.js +3 -0
  351. package/dist/components/progress/Progress/Progress.js.map +1 -1
  352. package/dist/components/progress/ProgressIndicator/ProgressIndicator.js +3 -0
  353. package/dist/components/progress/ProgressIndicator/ProgressIndicator.js.map +1 -1
  354. package/dist/components/progress/ProgressLabel/ProgressLabel.js +8 -3
  355. package/dist/components/progress/ProgressLabel/ProgressLabel.js.map +1 -1
  356. package/dist/components/progress/ProgressTrack/ProgressTrack.js +3 -0
  357. package/dist/components/progress/ProgressTrack/ProgressTrack.js.map +1 -1
  358. package/dist/components/progress/ProgressValue/ProgressValue.js +8 -3
  359. package/dist/components/progress/ProgressValue/ProgressValue.js.map +1 -1
  360. package/dist/components/questionnaire/QuestionnaireChoice/questionnaire-choice.utils.d.ts +48 -0
  361. package/dist/components/questionnaire/QuestionnaireChoice/questionnaire-choice.utils.js +23 -0
  362. package/dist/components/questionnaire/QuestionnaireChoice/questionnaire-choice.utils.js.map +1 -0
  363. package/dist/components/questionnaire/QuestionnaireChoice/useQuestionnaireChoice.js +62 -49
  364. package/dist/components/questionnaire/QuestionnaireChoice/useQuestionnaireChoice.js.map +1 -1
  365. package/dist/components/questionnaire/QuestionnaireInput/useQuestionnaireInput.js +4 -1
  366. package/dist/components/questionnaire/QuestionnaireInput/useQuestionnaireInput.js.map +1 -1
  367. package/dist/components/questionnaire/QuestionnaireItem/QuestionnaireItem.js +1 -2
  368. package/dist/components/questionnaire/QuestionnaireItem/QuestionnaireItem.js.map +1 -1
  369. package/dist/components/questionnaire/questionnaire.answers.d.ts +42 -0
  370. package/dist/components/questionnaire/questionnaire.answers.js +62 -0
  371. package/dist/components/questionnaire/questionnaire.answers.js.map +1 -0
  372. package/dist/components/questionnaire/questionnaire.aria.d.ts +34 -0
  373. package/dist/components/questionnaire/questionnaire.aria.js +28 -0
  374. package/dist/components/questionnaire/questionnaire.aria.js.map +1 -0
  375. package/dist/components/questionnaire/questionnaire.dom-watch.d.ts +9 -0
  376. package/dist/components/questionnaire/questionnaire.dom-watch.js +18 -0
  377. package/dist/components/questionnaire/questionnaire.dom-watch.js.map +1 -0
  378. package/dist/components/questionnaire/questionnaire.focus.d.ts +26 -0
  379. package/dist/components/questionnaire/questionnaire.focus.js +19 -0
  380. package/dist/components/questionnaire/questionnaire.focus.js.map +1 -0
  381. package/dist/components/questionnaire/questionnaire.item-view.d.ts +50 -0
  382. package/dist/components/questionnaire/questionnaire.item-view.js +36 -0
  383. package/dist/components/questionnaire/questionnaire.item-view.js.map +1 -0
  384. package/dist/components/questionnaire/questionnaire.keys.d.ts +29 -0
  385. package/dist/components/questionnaire/questionnaire.keys.js +34 -0
  386. package/dist/components/questionnaire/questionnaire.keys.js.map +1 -0
  387. package/dist/components/questionnaire/questionnaire.registry.d.ts +21 -0
  388. package/dist/components/questionnaire/questionnaire.registry.js +15 -0
  389. package/dist/components/questionnaire/questionnaire.registry.js.map +1 -0
  390. package/dist/components/questionnaire/questionnaire.shortcuts.d.ts +24 -0
  391. package/dist/components/questionnaire/questionnaire.shortcuts.js +31 -0
  392. package/dist/components/questionnaire/questionnaire.shortcuts.js.map +1 -0
  393. package/dist/components/questionnaire/questionnaire.utils.d.ts +17 -1
  394. package/dist/components/questionnaire/questionnaire.utils.js +5 -2
  395. package/dist/components/questionnaire/questionnaire.utils.js.map +1 -1
  396. package/dist/components/questionnaire/questionnaire.validation.d.ts +43 -0
  397. package/dist/components/questionnaire/questionnaire.validation.js +17 -0
  398. package/dist/components/questionnaire/questionnaire.validation.js.map +1 -0
  399. package/dist/components/questionnaire/useQuestionnaireItem.d.ts +0 -2
  400. package/dist/components/questionnaire/useQuestionnaireItem.js +83 -121
  401. package/dist/components/questionnaire/useQuestionnaireItem.js.map +1 -1
  402. package/dist/components/questionnaire/useQuestionnaireRoot.js +78 -99
  403. package/dist/components/questionnaire/useQuestionnaireRoot.js.map +1 -1
  404. package/dist/components/radio-group/RadioGroup/RadioGroup.js +3 -0
  405. package/dist/components/radio-group/RadioGroup/RadioGroup.js.map +1 -1
  406. package/dist/components/radio-group/RadioGroupItem/RadioGroupItem.js +3 -0
  407. package/dist/components/radio-group/RadioGroupItem/RadioGroupItem.js.map +1 -1
  408. package/dist/components/resizable/ResizableHandle/resizable.handle-drag.d.ts +37 -0
  409. package/dist/components/resizable/ResizableHandle/resizable.handle-drag.js +37 -0
  410. package/dist/components/resizable/ResizableHandle/resizable.handle-drag.js.map +1 -0
  411. package/dist/components/resizable/ResizableHandle/resizable.handle-keys.d.ts +24 -0
  412. package/dist/components/resizable/ResizableHandle/resizable.handle-keys.js +36 -0
  413. package/dist/components/resizable/ResizableHandle/resizable.handle-keys.js.map +1 -0
  414. package/dist/components/resizable/ResizableHandle/useResizableHandle.d.ts +3 -4
  415. package/dist/components/resizable/ResizableHandle/useResizableHandle.js +30 -63
  416. package/dist/components/resizable/ResizableHandle/useResizableHandle.js.map +1 -1
  417. package/dist/components/resizable/ResizablePanel/ResizablePanel.d.ts +4 -2
  418. package/dist/components/resizable/ResizablePanel/ResizablePanel.js +23 -50
  419. package/dist/components/resizable/ResizablePanel/ResizablePanel.js.map +1 -1
  420. package/dist/components/resizable/ResizablePanel/useResizablePanel.d.ts +30 -0
  421. package/dist/components/resizable/ResizablePanel/useResizablePanel.js +37 -0
  422. package/dist/components/resizable/ResizablePanel/useResizablePanel.js.map +1 -0
  423. package/dist/components/resizable/ResizablePanelGroup/ResizablePanelGroup.d.ts +4 -1
  424. package/dist/components/resizable/ResizablePanelGroup/ResizablePanelGroup.js +10 -17
  425. package/dist/components/resizable/ResizablePanelGroup/ResizablePanelGroup.js.map +1 -1
  426. package/dist/components/resizable/ResizablePanelGroup/useDragCursor.d.ts +11 -0
  427. package/dist/components/resizable/ResizablePanelGroup/useDragCursor.js +17 -0
  428. package/dist/components/resizable/ResizablePanelGroup/useDragCursor.js.map +1 -0
  429. package/dist/components/resizable/resizable.collapse.d.ts +27 -0
  430. package/dist/components/resizable/resizable.collapse.js +24 -0
  431. package/dist/components/resizable/resizable.collapse.js.map +1 -0
  432. package/dist/components/resizable/resizable.commands.d.ts +32 -0
  433. package/dist/components/resizable/resizable.commands.js +40 -0
  434. package/dist/components/resizable/resizable.commands.js.map +1 -0
  435. package/dist/components/resizable/resizable.constraints.d.ts +23 -0
  436. package/dist/components/resizable/resizable.constraints.js +32 -0
  437. package/dist/components/resizable/resizable.constraints.js.map +1 -0
  438. package/dist/components/resizable/resizable.lifecycle.d.ts +35 -0
  439. package/dist/components/resizable/resizable.lifecycle.js +32 -0
  440. package/dist/components/resizable/resizable.lifecycle.js.map +1 -0
  441. package/dist/components/resizable/resizable.registry.d.ts +31 -0
  442. package/dist/components/resizable/resizable.registry.js +38 -0
  443. package/dist/components/resizable/resizable.registry.js.map +1 -0
  444. package/dist/components/resizable/resizable.reporting.d.ts +36 -0
  445. package/dist/components/resizable/resizable.reporting.js +33 -0
  446. package/dist/components/resizable/resizable.reporting.js.map +1 -0
  447. package/dist/components/resizable/resizable.resize.d.ts +47 -0
  448. package/dist/components/resizable/resizable.resize.js +28 -0
  449. package/dist/components/resizable/resizable.resize.js.map +1 -0
  450. package/dist/components/resizable/resizable.sizes.d.ts +31 -0
  451. package/dist/components/resizable/resizable.sizes.js +46 -0
  452. package/dist/components/resizable/resizable.sizes.js.map +1 -0
  453. package/dist/components/resizable/resizable.storage.d.ts +17 -0
  454. package/dist/components/resizable/resizable.storage.js +29 -0
  455. package/dist/components/resizable/resizable.storage.js.map +1 -0
  456. package/dist/components/resizable/resizable.utils.d.ts +10 -3
  457. package/dist/components/resizable/resizable.utils.js +16 -10
  458. package/dist/components/resizable/resizable.utils.js.map +1 -1
  459. package/dist/components/resizable/useResizablePanelGroup.js +62 -164
  460. package/dist/components/resizable/useResizablePanelGroup.js.map +1 -1
  461. package/dist/components/scroll-area/ScrollArea/ScrollArea.context.js +1 -1
  462. package/dist/components/scroll-area/ScrollArea/ScrollArea.context.js.map +1 -1
  463. package/dist/components/scroll-area/ScrollArea/ScrollArea.d.ts +9 -0
  464. package/dist/components/scroll-area/ScrollArea/ScrollArea.js +28 -39
  465. package/dist/components/scroll-area/ScrollArea/ScrollArea.js.map +1 -1
  466. package/dist/components/scroll-area/ScrollArea/ScrollArea.utils.js +3 -3
  467. package/dist/components/scroll-area/ScrollArea/ScrollArea.utils.js.map +1 -1
  468. package/dist/components/scroll-area/ScrollArea/useScrollAreaMetrics.d.ts +22 -0
  469. package/dist/components/scroll-area/ScrollArea/useScrollAreaMetrics.js +34 -0
  470. package/dist/components/scroll-area/ScrollArea/useScrollAreaMetrics.js.map +1 -0
  471. package/dist/components/scroll-area/ScrollBar/ScrollBar.d.ts +8 -0
  472. package/dist/components/scroll-area/ScrollBar/ScrollBar.js +38 -71
  473. package/dist/components/scroll-area/ScrollBar/ScrollBar.js.map +1 -1
  474. package/dist/components/scroll-area/ScrollBar/ScrollBar.utils.d.ts +56 -0
  475. package/dist/components/scroll-area/ScrollBar/ScrollBar.utils.js +61 -0
  476. package/dist/components/scroll-area/ScrollBar/ScrollBar.utils.js.map +1 -0
  477. package/dist/components/scroll-area/ScrollBar/scroll-bar.thumb-drag.d.ts +25 -0
  478. package/dist/components/scroll-area/ScrollBar/scroll-bar.thumb-drag.js +26 -0
  479. package/dist/components/scroll-area/ScrollBar/scroll-bar.thumb-drag.js.map +1 -0
  480. package/dist/components/scroll-area/ScrollBar/useScrollBarInteraction.d.ts +19 -0
  481. package/dist/components/scroll-area/ScrollBar/useScrollBarInteraction.js +37 -0
  482. package/dist/components/scroll-area/ScrollBar/useScrollBarInteraction.js.map +1 -0
  483. package/dist/components/scroll-arrows/ScrollArrowButton.d.ts +5 -7
  484. package/dist/components/scroll-arrows/ScrollArrowButton.js +14 -44
  485. package/dist/components/scroll-arrows/ScrollArrowButton.js.map +1 -1
  486. package/dist/components/scroll-arrows/ScrollArrows.d.ts +4 -3
  487. package/dist/components/scroll-arrows/ScrollArrows.js +16 -22
  488. package/dist/components/scroll-arrows/ScrollArrows.js.map +1 -1
  489. package/dist/components/scroll-arrows/ScrollArrows.types.d.ts +7 -7
  490. package/dist/components/scroll-arrows/useHoverScroll.d.ts +29 -0
  491. package/dist/components/scroll-arrows/useHoverScroll.js +39 -0
  492. package/dist/components/scroll-arrows/useHoverScroll.js.map +1 -0
  493. package/dist/components/select/SelectContent/useSelectContent.js +3 -3
  494. package/dist/components/select/SelectGroup/SelectGroup.d.ts +8 -2
  495. package/dist/components/select/SelectGroup/SelectGroup.js +20 -6
  496. package/dist/components/select/SelectGroup/SelectGroup.js.map +1 -1
  497. package/dist/components/select/SelectGroup/SelectGroup.types.d.ts +9 -0
  498. package/dist/components/select/SelectGroup/index.d.ts +1 -0
  499. package/dist/components/select/SelectTrigger/SelectTrigger.js.map +1 -1
  500. package/dist/components/select/SelectTrigger/useSelectTrigger.js +1 -1
  501. package/dist/components/select/SelectTrigger/useSelectTrigger.js.map +1 -1
  502. package/dist/components/separator/Separator.js +3 -0
  503. package/dist/components/separator/Separator.js.map +1 -1
  504. package/dist/components/sheet/SheetClose/SheetClose.js +18 -17
  505. package/dist/components/sheet/SheetClose/SheetClose.js.map +1 -1
  506. package/dist/components/sidebar/Sidebar/Sidebar.js +14 -6
  507. package/dist/components/sidebar/Sidebar/Sidebar.js.map +1 -1
  508. package/dist/components/sidebar/SidebarContent/SidebarContent.js +8 -3
  509. package/dist/components/sidebar/SidebarContent/SidebarContent.js.map +1 -1
  510. package/dist/components/sidebar/SidebarFooter/SidebarFooter.js +8 -3
  511. package/dist/components/sidebar/SidebarFooter/SidebarFooter.js.map +1 -1
  512. package/dist/components/sidebar/SidebarGroup/SidebarGroup.js +8 -3
  513. package/dist/components/sidebar/SidebarGroup/SidebarGroup.js.map +1 -1
  514. package/dist/components/sidebar/SidebarGroupAction/SidebarGroupAction.js +3 -0
  515. package/dist/components/sidebar/SidebarGroupAction/SidebarGroupAction.js.map +1 -1
  516. package/dist/components/sidebar/SidebarGroupContent/SidebarGroupContent.js +8 -3
  517. package/dist/components/sidebar/SidebarGroupContent/SidebarGroupContent.js.map +1 -1
  518. package/dist/components/sidebar/SidebarGroupLabel/SidebarGroupLabel.js +3 -0
  519. package/dist/components/sidebar/SidebarGroupLabel/SidebarGroupLabel.js.map +1 -1
  520. package/dist/components/sidebar/SidebarHeader/SidebarHeader.js +8 -3
  521. package/dist/components/sidebar/SidebarHeader/SidebarHeader.js.map +1 -1
  522. package/dist/components/sidebar/SidebarInput/SidebarInput.js +3 -0
  523. package/dist/components/sidebar/SidebarInput/SidebarInput.js.map +1 -1
  524. package/dist/components/sidebar/SidebarInset/SidebarInset.js +8 -3
  525. package/dist/components/sidebar/SidebarInset/SidebarInset.js.map +1 -1
  526. package/dist/components/sidebar/SidebarMenu/SidebarMenu.js +8 -3
  527. package/dist/components/sidebar/SidebarMenu/SidebarMenu.js.map +1 -1
  528. package/dist/components/sidebar/SidebarMenuBadge/SidebarMenuBadge.js +8 -3
  529. package/dist/components/sidebar/SidebarMenuBadge/SidebarMenuBadge.js.map +1 -1
  530. package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.js +6 -0
  531. package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.js.map +1 -1
  532. package/dist/components/sidebar/SidebarMenuItem/SidebarMenuItem.js +8 -3
  533. package/dist/components/sidebar/SidebarMenuItem/SidebarMenuItem.js.map +1 -1
  534. package/dist/components/sidebar/SidebarMenuSkeleton/SidebarMenuSkeleton.js +8 -3
  535. package/dist/components/sidebar/SidebarMenuSkeleton/SidebarMenuSkeleton.js.map +1 -1
  536. package/dist/components/sidebar/SidebarMenuSub/SidebarMenuSub.js +8 -3
  537. package/dist/components/sidebar/SidebarMenuSub/SidebarMenuSub.js.map +1 -1
  538. package/dist/components/sidebar/SidebarMenuSubButton/SidebarMenuSubButton.js +3 -0
  539. package/dist/components/sidebar/SidebarMenuSubButton/SidebarMenuSubButton.js.map +1 -1
  540. package/dist/components/sidebar/SidebarMenuSubItem/SidebarMenuSubItem.js +8 -3
  541. package/dist/components/sidebar/SidebarMenuSubItem/SidebarMenuSubItem.js.map +1 -1
  542. package/dist/components/sidebar/SidebarProvider/SidebarProvider.context.js +1 -1
  543. package/dist/components/sidebar/SidebarProvider/SidebarProvider.context.js.map +1 -1
  544. package/dist/components/sidebar/SidebarProvider/SidebarProvider.js +30 -27
  545. package/dist/components/sidebar/SidebarProvider/SidebarProvider.js.map +1 -1
  546. package/dist/components/sidebar/SidebarProvider/useIsMobile.d.ts +10 -0
  547. package/dist/components/sidebar/SidebarProvider/useIsMobile.js +14 -0
  548. package/dist/components/sidebar/SidebarProvider/useIsMobile.js.map +1 -0
  549. package/dist/components/sidebar/SidebarRail/SidebarRail.js +8 -3
  550. package/dist/components/sidebar/SidebarRail/SidebarRail.js.map +1 -1
  551. package/dist/components/sidebar/SidebarSeparator/SidebarSeparator.js +3 -0
  552. package/dist/components/sidebar/SidebarSeparator/SidebarSeparator.js.map +1 -1
  553. package/dist/components/sidebar/SidebarTrigger/SidebarTrigger.js +3 -0
  554. package/dist/components/sidebar/SidebarTrigger/SidebarTrigger.js.map +1 -1
  555. package/dist/components/skeleton/Skeleton.js +8 -3
  556. package/dist/components/skeleton/Skeleton.js.map +1 -1
  557. package/dist/components/slider/Slider/Slider.context.js +1 -1
  558. package/dist/components/slider/Slider/Slider.context.js.map +1 -1
  559. package/dist/components/slider/Slider/Slider.js +3 -0
  560. package/dist/components/slider/Slider/Slider.js.map +1 -1
  561. package/dist/components/slider/SliderControl/SliderControl.js +4 -1
  562. package/dist/components/slider/SliderControl/SliderControl.js.map +1 -1
  563. package/dist/components/slider/SliderIndicator/SliderIndicator.js +3 -0
  564. package/dist/components/slider/SliderIndicator/SliderIndicator.js.map +1 -1
  565. package/dist/components/slider/SliderThumb/SliderThumb.js +18 -3
  566. package/dist/components/slider/SliderThumb/SliderThumb.js.map +1 -1
  567. package/dist/components/slider/SliderThumb/useSliderThumb.d.ts +1 -0
  568. package/dist/components/slider/SliderThumb/useSliderThumb.js +3 -2
  569. package/dist/components/slider/SliderThumb/useSliderThumb.js.map +1 -1
  570. package/dist/components/slider/SliderTrack/SliderTrack.js +3 -0
  571. package/dist/components/slider/SliderTrack/SliderTrack.js.map +1 -1
  572. package/dist/components/spinner/Spinner.js +3 -0
  573. package/dist/components/spinner/Spinner.js.map +1 -1
  574. package/dist/components/switch/Switch.js +7 -0
  575. package/dist/components/switch/Switch.js.map +1 -1
  576. package/dist/components/tabs/Tabs/Tabs.context.js +1 -1
  577. package/dist/components/tabs/Tabs/Tabs.context.js.map +1 -1
  578. package/dist/components/tabs/Tabs/useTabsKeyboard.d.ts +7 -11
  579. package/dist/components/tabs/Tabs/useTabsKeyboard.js +8 -42
  580. package/dist/components/tabs/Tabs/useTabsKeyboard.js.map +1 -1
  581. package/dist/components/tabs/TabsList/TabsList.context.js +1 -1
  582. package/dist/components/tabs/TabsList/TabsList.context.js.map +1 -1
  583. package/dist/components/tabs/TabsList/TabsList.js +10 -10
  584. package/dist/components/tabs/TabsList/TabsList.js.map +1 -1
  585. package/dist/components/tabs/TabsTrigger/TabsTrigger.js +8 -8
  586. package/dist/components/tabs/TabsTrigger/TabsTrigger.js.map +1 -1
  587. package/dist/components/textarea/Textarea.js +8 -3
  588. package/dist/components/textarea/Textarea.js.map +1 -1
  589. package/dist/components/time-picker/TimePicker/create-change-event-details.d.ts +1 -2
  590. package/dist/components/time-picker/TimePicker/create-change-event-details.js +4 -20
  591. package/dist/components/time-picker/TimePicker/create-change-event-details.js.map +1 -1
  592. package/dist/components/time-picker/TimePickerColumn/TimePickerColumn.js +1 -3
  593. package/dist/components/time-picker/TimePickerColumn/TimePickerColumn.js.map +1 -1
  594. package/dist/components/time-picker/TimePickerColumn/time-picker.column-utils.d.ts +34 -0
  595. package/dist/components/time-picker/TimePickerColumn/time-picker.column-utils.js +43 -0
  596. package/dist/components/time-picker/TimePickerColumn/time-picker.column-utils.js.map +1 -0
  597. package/dist/components/time-picker/TimePickerColumn/useTimePickerColumn.js +34 -59
  598. package/dist/components/time-picker/TimePickerColumn/useTimePickerColumn.js.map +1 -1
  599. package/dist/components/toast/Toast/Toast.d.ts +8 -2
  600. package/dist/components/toast/Toast/Toast.js +92 -146
  601. package/dist/components/toast/Toast/Toast.js.map +1 -1
  602. package/dist/components/toast/Toast/Toast.types.d.ts +1 -1
  603. package/dist/components/toast/Toast/Toast.types.js.map +1 -1
  604. package/dist/components/toast/Toast/Toast.utils.d.ts +47 -0
  605. package/dist/components/toast/Toast/Toast.utils.js +47 -0
  606. package/dist/components/toast/Toast/Toast.utils.js.map +1 -0
  607. package/dist/components/toast/Toast/ToastActionButton.d.ts +16 -0
  608. package/dist/components/toast/Toast/ToastActionButton.js +27 -0
  609. package/dist/components/toast/Toast/ToastActionButton.js.map +1 -0
  610. package/dist/components/toast/Toast/ToastActions.d.ts +12 -0
  611. package/dist/components/toast/Toast/ToastActions.js +65 -0
  612. package/dist/components/toast/Toast/ToastActions.js.map +1 -0
  613. package/dist/components/toast/Toast/ToastCloseButton.d.ts +12 -0
  614. package/dist/components/toast/Toast/ToastCloseButton.js +26 -0
  615. package/dist/components/toast/Toast/ToastCloseButton.js.map +1 -0
  616. package/dist/components/toast/Toast/ToastContent.d.ts +8 -0
  617. package/dist/components/toast/Toast/ToastContent.js +30 -0
  618. package/dist/components/toast/Toast/ToastContent.js.map +1 -0
  619. package/dist/components/toast/Toast/ToastIcon.d.ts +14 -0
  620. package/dist/components/toast/Toast/ToastIcon.js +36 -0
  621. package/dist/components/toast/Toast/ToastIcon.js.map +1 -0
  622. package/dist/components/toast/Toast/useToastLifecycle.d.ts +29 -0
  623. package/dist/components/toast/Toast/useToastLifecycle.js +30 -0
  624. package/dist/components/toast/Toast/useToastLifecycle.js.map +1 -0
  625. package/dist/components/toast/Toaster/ToastViewport.d.ts +33 -0
  626. package/dist/components/toast/Toaster/ToastViewport.js +73 -0
  627. package/dist/components/toast/Toaster/ToastViewport.js.map +1 -0
  628. package/dist/components/toast/Toaster/Toaster.d.ts +4 -0
  629. package/dist/components/toast/Toaster/Toaster.js +64 -82
  630. package/dist/components/toast/Toaster/Toaster.js.map +1 -1
  631. package/dist/components/toast/Toaster/Toaster.utils.d.ts +15 -0
  632. package/dist/components/toast/Toaster/Toaster.utils.js +4 -1
  633. package/dist/components/toast/Toaster/Toaster.utils.js.map +1 -1
  634. package/dist/components/toast/Toaster/useToaster.d.ts +28 -0
  635. package/dist/components/toast/Toaster/useToaster.js +26 -0
  636. package/dist/components/toast/Toaster/useToaster.js.map +1 -0
  637. package/dist/components/toast/index.js +4 -3
  638. package/dist/components/toast/state/promise-toast.d.ts +17 -0
  639. package/dist/components/toast/state/promise-toast.js +33 -0
  640. package/dist/components/toast/state/promise-toast.js.map +1 -0
  641. package/dist/components/toast/state/store.d.ts +21 -0
  642. package/dist/components/toast/state/store.js +45 -0
  643. package/dist/components/toast/state/store.js.map +1 -0
  644. package/dist/components/toast/state/toast.d.ts +9 -10
  645. package/dist/components/toast/state/toast.js +30 -89
  646. package/dist/components/toast/state/toast.js.map +1 -1
  647. package/dist/components/toggle/Toggle/Toggle.js +2 -1
  648. package/dist/components/toggle/Toggle/Toggle.js.map +1 -1
  649. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.js +1 -1
  650. package/dist/components/toggle-group/ToggleGroup/ToggleGroup.js.map +1 -1
  651. package/dist/components/toggle-group/ToggleGroup/create-change-event-details.d.ts +6 -2
  652. package/dist/components/toggle-group/ToggleGroup/create-change-event-details.js +4 -20
  653. package/dist/components/toggle-group/ToggleGroup/create-change-event-details.js.map +1 -1
  654. package/dist/components/toggle-group/ToggleGroup/useToggleGroupKeyboard.d.ts +7 -10
  655. package/dist/components/toggle-group/ToggleGroup/useToggleGroupKeyboard.js +10 -40
  656. package/dist/components/toggle-group/ToggleGroup/useToggleGroupKeyboard.js.map +1 -1
  657. package/dist/components/toggle-group/ToggleGroupItem/ToggleGroupItem.js +5 -5
  658. package/dist/components/toggle-group/ToggleGroupItem/ToggleGroupItem.js.map +1 -1
  659. package/dist/components/tooltip/TooltipContent/usePresence.d.ts +27 -0
  660. package/dist/components/tooltip/TooltipContent/usePresence.js +24 -0
  661. package/dist/components/tooltip/TooltipContent/usePresence.js.map +1 -0
  662. package/dist/components/tooltip/TooltipContent/useTooltipContent.js +22 -35
  663. package/dist/components/tooltip/TooltipContent/useTooltipContent.js.map +1 -1
  664. package/dist/hooks/useFontLoader.js +1 -1
  665. package/dist/hooks/useFontLoader.js.map +1 -1
  666. package/dist/hooks/useScrollLock.js +13 -16
  667. package/dist/hooks/useScrollLock.js.map +1 -1
  668. package/dist/index.js +328 -320
  669. package/dist/lib/positioner/index.d.ts +1 -0
  670. package/dist/lib/positioner/utils/dom.d.ts +8 -0
  671. package/dist/lib/positioner/utils/dom.js +1 -1
  672. package/dist/lib/positioner/utils/dom.js.map +1 -1
  673. package/dist/types/props.types.d.ts +1 -1
  674. package/dist/ui.css +1 -1
  675. package/dist/utils/call-event-handler.d.ts +16 -0
  676. package/dist/utils/call-event-handler.js +15 -0
  677. package/dist/utils/call-event-handler.js.map +1 -0
  678. package/dist/utils/clsx.d.ts +1 -1
  679. package/dist/utils/clsx.js +2 -7
  680. package/dist/utils/create-change-event-details.d.ts +25 -0
  681. package/dist/utils/create-change-event-details.js +25 -0
  682. package/dist/utils/create-change-event-details.js.map +1 -0
  683. package/dist/utils/get-style.d.ts +7 -9
  684. package/dist/utils/get-style.js +16 -0
  685. package/dist/utils/get-style.js.map +1 -0
  686. package/dist/utils/index.d.ts +8 -0
  687. package/dist/utils/index.js +7 -1
  688. package/dist/utils/number.d.ts +7 -0
  689. package/dist/utils/number.js +8 -0
  690. package/dist/utils/number.js.map +1 -0
  691. package/dist/utils/roving-navigation.d.ts +64 -0
  692. package/dist/utils/roving-navigation.js +66 -0
  693. package/dist/utils/roving-navigation.js.map +1 -0
  694. package/dist/utils/string.d.ts +17 -0
  695. package/dist/utils/string.js +11 -0
  696. package/dist/utils/string.js.map +1 -0
  697. package/package.json +18 -7
  698. package/dist/components/carousel/Carousel/Carousel.utils.d.ts +0 -0
  699. package/dist/components/field/FieldError/useFieldError.d.ts +0 -0
  700. package/dist/components/hover-card/hover-card.utils.d.ts +0 -6
  701. package/dist/components/tabs/Tabs/call-event-handler.d.ts +0 -5
  702. package/dist/components/tabs/Tabs/call-event-handler.js +0 -9
  703. package/dist/components/tabs/Tabs/call-event-handler.js.map +0 -1
  704. package/dist/components/toggle-group/call-event-handler.d.ts +0 -5
  705. package/dist/components/toggle-group/call-event-handler.js +0 -9
  706. package/dist/components/toggle-group/call-event-handler.js.map +0 -1
  707. package/dist/utils/clsx.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ProgressTrack.js","names":["splitProps","ProgressTrackProps","clsx","classes","useProgressContext","ProgressTrack","props","value","local","others","_el$","_tmpl$","_$spread","_$mergeProps","data-progressing","_$memo","class","_$mergeProps","_$memo","_tmpl$","ProgressTrack","useProgressContext","local","others","splitProps","props","_el$","spread","mergeProps","memo","value","\"class\"","clsx","classes"],"sources":["../../../../src/components/progress/ProgressTrack/ProgressTrack.tsx"],"sourcesContent":["import { splitProps } from \"solid-js\";\nimport type { ProgressTrackProps } from \"./ProgressTrack.types\";\nimport { clsx } from \"~/utils\";\nimport { classes } from \"./ProgressTrack.styles\";\nimport { useProgressContext } from \"../Progress\";\n\nexport const ProgressTrack = (props: ProgressTrackProps) => {\n const { value } = useProgressContext();\n\n const [local, others] = splitProps(props, [\"class\", \"classList\"]);\n\n return (\n <div\n data-slot=\"progress-track\"\n data-progressing={value() > 0 && value() < 100}\n class={clsx(classes, local.class)}\n {...others}\n />\n );\n};\n"],"mappings":";;;;;;2DAMaK,KAAiBC,MAA8B;CAC1D,IAAM,EAAEC,aAAUH,EAAmB,GAE/B,CAACI,GAAOC,KAAUT,EAAWM,GAAO,CAAC,SAAS,WAAW,CAAC;CAEhE,cAAA;EAAA,IAAAI,IAAAC,EAAA;EAKc,OALdC,EAAAF,GAAAG,EAAA;GAAA,IAAA,qBAAA;IAAA,OAGsBE,QAAAR,EAAM,IAAI,CAAC,CAAA,CAAA,KAAIA,EAAM,IAAI;GAAG;GAAA,IAAAwB,QAAA;IAAA,OACvC7B,EAAKC,GAASK,EAAMQ,KAAK;GAAC;EAAA,GAC7BP,CAAM,GAAA,IAAA,EAAA,GAAAC;CAAA,EAAA,CAAA;AAGhB"}
1
+ {"version":3,"file":"ProgressTrack.js","names":["splitProps","ProgressTrackProps","clsx","classes","useProgressContext","ProgressTrack","props","value","local","others","_el$","_tmpl$","_$spread","_$mergeProps","data-progressing","_$memo","class","classList","_$mergeProps","_$memo","_tmpl$","ProgressTrack","useProgressContext","local","others","splitProps","props","_el$","spread","mergeProps","memo","value","\"class\"","clsx","classes"],"sources":["../../../../src/components/progress/ProgressTrack/ProgressTrack.tsx"],"sourcesContent":["import { splitProps } from \"solid-js\";\nimport type { ProgressTrackProps } from \"./ProgressTrack.types\";\nimport { clsx } from \"~/utils\";\nimport { classes } from \"./ProgressTrack.styles\";\nimport { useProgressContext } from \"../Progress\";\n\nexport const ProgressTrack = (props: ProgressTrackProps) => {\n const { value } = useProgressContext();\n\n const [local, others] = splitProps(props, [\"class\", \"classList\"]);\n\n return (\n <div\n data-slot=\"progress-track\"\n data-progressing={value() > 0 && value() < 100}\n class={clsx(classes, local.class)}\n classList={local.classList}\n {...others}\n />\n );\n};\n"],"mappings":";;;;;;2DAMaK,KAAiBC,MAA8B;CAC1D,IAAM,EAAEC,aAAUH,EAAmB,GAE/B,CAACI,GAAOC,KAAUT,EAAWM,GAAO,CAAC,SAAS,WAAW,CAAC;CAEhE,cAAA;EAAA,IAAAI,IAAAC,EAAA;EAMc,OANdC,EAAAF,GAAAG,EAAA;GAAA,IAAA,qBAAA;IAAA,OAGsBE,QAAAR,EAAM,IAAI,CAAC,CAAA,CAAA,KAAIA,EAAM,IAAI;GAAG;GAAA,IAAAyB,QAAA;IAAA,OACvC9B,EAAKC,GAASK,EAAMQ,KAAK;GAAC;GAAA,IACjCC,YAAS;IAAA,OAAET,EAAMS;GAAS;EAAA,GACtBR,CAAM,GAAA,IAAA,EAAA,GAAAC;CAAA,EAAA,CAAA;AAGhB"}
@@ -8,9 +8,14 @@ var c = /*#__PURE__*/ o("<span data-slot=progress-value>%"), l = (o) => {
8
8
  let { value: l } = t(), [u, d] = s(o, ["class", "classList"]);
9
9
  return (() => {
10
10
  var t = c(), o = t.firstChild;
11
- return a(t, i({ get class() {
12
- return e(n, u.class);
13
- } }, d), !1, !0), r(t, l, o), t;
11
+ return a(t, i({
12
+ get class() {
13
+ return e(n, u.class);
14
+ },
15
+ get classList() {
16
+ return u.classList;
17
+ }
18
+ }, d), !1, !0), r(t, l, o), t;
14
19
  })();
15
20
  };
16
21
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"ProgressValue.js","names":["splitProps","ProgressValueProps","clsx","classes","useProgressContext","ProgressValue","props","value","local","others","_el$","_tmpl$","_el$2","firstChild","_$spread","_$mergeProps","class","_$insert","_$mergeProps","_tmpl$","ProgressValue","useProgressContext","local","others","splitProps","props","_el$","_el$2","spread","mergeProps","\"class\"","clsx","classes","insert","value"],"sources":["../../../../src/components/progress/ProgressValue/ProgressValue.tsx"],"sourcesContent":["import { splitProps } from \"solid-js\";\nimport type { ProgressValueProps } from \"./ProgressValue.types\";\nimport { clsx } from \"~/utils\";\nimport { classes } from \"./ProgressValue.styles\";\nimport { useProgressContext } from \"../Progress\";\n\nexport const ProgressValue = (props: ProgressValueProps) => {\n const { value } = useProgressContext();\n\n const [local, others] = splitProps(props, [\"class\", \"classList\"]);\n\n return (\n <span\n data-slot=\"progress-value\"\n class={clsx(classes, local.class)}\n {...others}\n >\n {value()}%\n </span>\n );\n};\n"],"mappings":";;;;;;6DAMaK,KAAiBC,MAA8B;CAC1D,IAAM,EAAEC,aAAUH,EAAmB,GAE/B,CAACI,GAAOC,KAAUT,EAAWM,GAAO,CAAC,SAAS,WAAW,CAAC;CAEhE,cAAA;EAAA,IAAAI,IAAAC,EAAA,GAAAC,IAAAF,EAAAG;EAMU,OANVC,EAAAJ,GAAAK,EAAA,EAAA,IAAAe,QAAA;GAAA,OAGW5B,EAAKC,GAASK,EAAMQ,KAAK;EAAC,EAAA,GAC7BP,CAAM,GAAA,IAAA,EAAA,GAAAQ,EAAAP,GAETH,GAAKK,CAAA,GAAAF;CAAA,EAAA,CAAA;AAGZ"}
1
+ {"version":3,"file":"ProgressValue.js","names":["splitProps","ProgressValueProps","clsx","classes","useProgressContext","ProgressValue","props","value","local","others","_el$","_tmpl$","_el$2","firstChild","_$spread","_$mergeProps","class","classList","_$insert","_$mergeProps","_tmpl$","ProgressValue","useProgressContext","local","others","splitProps","props","_el$","_el$2","spread","mergeProps","\"class\"","clsx","classes","insert","value"],"sources":["../../../../src/components/progress/ProgressValue/ProgressValue.tsx"],"sourcesContent":["import { splitProps } from \"solid-js\";\nimport type { ProgressValueProps } from \"./ProgressValue.types\";\nimport { clsx } from \"~/utils\";\nimport { classes } from \"./ProgressValue.styles\";\nimport { useProgressContext } from \"../Progress\";\n\nexport const ProgressValue = (props: ProgressValueProps) => {\n const { value } = useProgressContext();\n\n const [local, others] = splitProps(props, [\"class\", \"classList\"]);\n\n return (\n <span\n data-slot=\"progress-value\"\n class={clsx(classes, local.class)}\n classList={local.classList}\n {...others}\n >\n {value()}%\n </span>\n );\n};\n"],"mappings":";;;;;;6DAMaK,KAAiBC,MAA8B;CAC1D,IAAM,EAAEC,aAAUH,EAAmB,GAE/B,CAACI,GAAOC,KAAUT,EAAWM,GAAO,CAAC,SAAS,WAAW,CAAC;CAEhE,cAAA;EAAA,IAAAI,IAAAC,EAAA,GAAAC,IAAAF,EAAAG;EAOU,OAPVC,EAAAJ,GAAAK,EAAA;GAAA,IAAAgB,QAAA;IAAA,OAGW7B,EAAKC,GAASK,EAAMQ,KAAK;GAAC;GAAA,IACjCC,YAAS;IAAA,OAAET,EAAMS;GAAS;EAAA,GACtBR,CAAM,GAAA,IAAA,EAAA,GAAAS,EAAAR,GAETH,GAAKK,CAAA,GAAAF;CAAA,EAAA,CAAA;AAGZ"}
@@ -0,0 +1,48 @@
1
+ import { QuestionnaireItemStatus } from '../questionnaire.types';
2
+ /**
3
+ * 固定选项(radio / checkbox)的纯判定。
4
+ *
5
+ * 单一职责:把"受控值 / 跳过状态 / 选中集合 / 校验上下文"换算成
6
+ * 最终要渲染与写回的布尔值,不读信号、不碰 DOM。
7
+ * 受控与非受控、跳过与未跳过、交互前后的一致性都由这些函数显式表达。
8
+ */
9
+ /**
10
+ * 最终是否勾选:
11
+ * - 受控(`checked` 有值)时以它为唯一来源,但"已跳过"的题目一律不勾选;
12
+ * - 非受控时看 Item 的选中集合里有没有自己。
13
+ */
14
+ export declare function resolveChoiceChecked(options: {
15
+ controlled: boolean | undefined;
16
+ status: QuestionnaireItemStatus;
17
+ selectedAnswerIds: readonly string[];
18
+ id: string;
19
+ }): boolean;
20
+ /** 选项是否需要原生 `required`:整题必填、单选、且本题没有文本框作答 */
21
+ export declare function isChoiceRequired(options: {
22
+ required: boolean;
23
+ multiple: boolean;
24
+ hasInputAnswer: boolean;
25
+ }): boolean;
26
+ /** 已跳过的题目不提交表单字段值(避免把跳过题目的答案一起提交) */
27
+ export declare function resolveChoiceName(status: QuestionnaireItemStatus, name: string): string | undefined;
28
+ /**
29
+ * 交互后要不要写回选中集合,以及写成什么值:
30
+ * - 用户回调已经 `preventDefault()` → 什么都不做;
31
+ * - 非受控 → 直接采用原生控件的勾选结果;
32
+ * - 受控且题目"已跳过"、原生结果恰好与受控值相同时 → 补一次写回,
33
+ * 否则 DOM 上的临时勾选会残留(受控方不会再送新值过来);
34
+ * - 其余受控情况 → 交给受控方,自己不写。
35
+ */
36
+ export declare function decideChoiceSelectionChange(options: {
37
+ canceled: boolean;
38
+ controlled: boolean | undefined;
39
+ status: QuestionnaireItemStatus;
40
+ checked: boolean;
41
+ }): boolean | null;
42
+ /** 选项的快捷键:优先声明式 value 映射,其次按答案 id 分配,都没有则为 null */
43
+ export declare function resolveChoiceShortcut(options: {
44
+ byChoiceValue: Map<string, string> | null;
45
+ byAnswerId: Map<string, string>;
46
+ value: string;
47
+ id: string;
48
+ }): string | null;
@@ -0,0 +1,23 @@
1
+ //#region src/components/questionnaire/QuestionnaireChoice/questionnaire-choice.utils.ts
2
+ function e(e) {
3
+ let { controlled: t, status: n, selectedAnswerIds: r, id: i } = e;
4
+ return t === void 0 ? r.includes(i) : n !== "skipped" && t;
5
+ }
6
+ function t(e) {
7
+ return e.required && !e.multiple && !e.hasInputAnswer;
8
+ }
9
+ function n(e, t) {
10
+ return e === "skipped" ? void 0 : t;
11
+ }
12
+ function r(e) {
13
+ let { canceled: t, controlled: n, status: r, checked: i } = e;
14
+ return t ? null : n === void 0 ? i : r === "skipped" && n === i ? n : null;
15
+ }
16
+ function i(e) {
17
+ let { byChoiceValue: t, byAnswerId: n, value: r, id: i } = e;
18
+ return t?.get(r) ?? n.get(i) ?? null;
19
+ }
20
+ //#endregion
21
+ export { r as decideChoiceSelectionChange, t as isChoiceRequired, e as resolveChoiceChecked, n as resolveChoiceName, i as resolveChoiceShortcut };
22
+
23
+ //# sourceMappingURL=questionnaire-choice.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questionnaire-choice.utils.js","names":["resolveChoiceChecked","options","controlled","selectedAnswerIds","id","status","isChoiceRequired","resolveChoiceName","name","decideChoiceSelectionChange","canceled","checked","resolveChoiceShortcut","byChoiceValue","value","byAnswerId"],"sources":["../../../../src/components/questionnaire/QuestionnaireChoice/questionnaire-choice.utils.ts"],"sourcesContent":["import type { QuestionnaireItemStatus } from \"../questionnaire.types\";\n\n/**\n * 固定选项(radio / checkbox)的纯判定。\n *\n * 单一职责:把\"受控值 / 跳过状态 / 选中集合 / 校验上下文\"换算成\n * 最终要渲染与写回的布尔值,不读信号、不碰 DOM。\n * 受控与非受控、跳过与未跳过、交互前后的一致性都由这些函数显式表达。\n */\n\n/**\n * 最终是否勾选:\n * - 受控(`checked` 有值)时以它为唯一来源,但\"已跳过\"的题目一律不勾选;\n * - 非受控时看 Item 的选中集合里有没有自己。\n */\nexport function resolveChoiceChecked(options: {\n controlled: boolean | undefined;\n status: QuestionnaireItemStatus;\n selectedAnswerIds: readonly string[];\n id: string;\n}): boolean {\n const { controlled, status, selectedAnswerIds, id } = options;\n if (controlled !== undefined) {\n return status === \"skipped\" ? false : controlled;\n }\n return selectedAnswerIds.includes(id);\n}\n\n/** 选项是否需要原生 `required`:整题必填、单选、且本题没有文本框作答 */\nexport function isChoiceRequired(options: {\n required: boolean;\n multiple: boolean;\n hasInputAnswer: boolean;\n}): boolean {\n return options.required && !options.multiple && !options.hasInputAnswer;\n}\n\n/** 已跳过的题目不提交表单字段值(避免把跳过题目的答案一起提交) */\nexport function resolveChoiceName(\n status: QuestionnaireItemStatus,\n name: string,\n): string | undefined {\n return status === \"skipped\" ? undefined : name;\n}\n\n/**\n * 交互后要不要写回选中集合,以及写成什么值:\n * - 用户回调已经 `preventDefault()` → 什么都不做;\n * - 非受控 → 直接采用原生控件的勾选结果;\n * - 受控且题目\"已跳过\"、原生结果恰好与受控值相同时 → 补一次写回,\n * 否则 DOM 上的临时勾选会残留(受控方不会再送新值过来);\n * - 其余受控情况 → 交给受控方,自己不写。\n */\nexport function decideChoiceSelectionChange(options: {\n canceled: boolean;\n controlled: boolean | undefined;\n status: QuestionnaireItemStatus;\n checked: boolean;\n}): boolean | null {\n const { canceled, controlled, status, checked } = options;\n if (canceled) return null;\n if (controlled === undefined) return checked;\n if (status === \"skipped\" && controlled === checked) return controlled;\n return null;\n}\n\n/** 选项的快捷键:优先声明式 value 映射,其次按答案 id 分配,都没有则为 null */\nexport function resolveChoiceShortcut(options: {\n byChoiceValue: Map<string, string> | null;\n byAnswerId: Map<string, string>;\n value: string;\n id: string;\n}): string | null {\n const { byChoiceValue, byAnswerId, value, id } = options;\n return byChoiceValue?.get(value) ?? byAnswerId.get(id) ?? null;\n}\n"],"mappings":";AAeA,SAAgBA,EAAqB,GAKzB;CACV,IAAM,EAAE,eAAY,WAAQ,sBAAmB,UAAOC;CAItD,OAHIC,MAAe,KAAA,IAGZC,EAAkB,SAASC,CAAE,IAF3BC,MAAW,aAAoBH;AAG1C;AAGA,SAAgBI,EAAiB,GAIrB;CACV,OAAOL,EAAQ,YAAY,CAACA,EAAQ,YAAY,CAACA,EAAQ;AAC3D;AAGA,SAAgBM,EACd,GACA,GACoB;CACpB,OAAOF,MAAW,YAAY,KAAA,IAAYG;AAC5C;AAUA,SAAgBC,EAA4B,GAKzB;CACjB,IAAM,EAAE,aAAU,eAAY,WAAQ,eAAYR;CAIlD,OAHIS,IAAiB,OACjBR,MAAe,KAAA,IAAkBS,IACjCN,MAAW,aAAaH,MAAeS,IAAgBT,IACpD;AACT;AAGA,SAAgBU,EAAsB,GAKpB;CAChB,IAAM,EAAE,kBAAe,eAAY,UAAO,UAAOX;CACjD,OAAOY,GAAe,IAAIC,CAAK,KAAKC,EAAW,IAAIX,CAAE,KAAK;AAC5D"}
@@ -1,67 +1,80 @@
1
1
  import { useQuestionnaireItemContext as e } from "../questionnaire.context.js";
2
2
  import { keyShortcutText as t } from "../questionnaire.utils.js";
3
- import { createEffect as n, createSignal as r, createUniqueId as i, onCleanup as a } from "solid-js";
3
+ import { decideChoiceSelectionChange as n, isChoiceRequired as r, resolveChoiceChecked as i, resolveChoiceName as a, resolveChoiceShortcut as o } from "./questionnaire-choice.utils.js";
4
+ import { createEffect as s, createSignal as c, createUniqueId as l, onCleanup as u } from "solid-js";
4
5
  //#region src/components/questionnaire/QuestionnaireChoice/useQuestionnaireChoice.ts
5
- function o(o) {
6
- let s = e("QuestionnaireChoice"), c = i(), [l, u] = r(), d = () => s.disabled() || !!o.disabled?.(), f = () => s.multiple() ? "checkbox" : "radio", p = () => s.shortcutByChoiceValue()?.get(o.value) ?? s.shortcutByAnswerId().get(c) ?? null;
7
- a(s.registerAnswerSelection(c, !!o.defaultChecked?.())), n(() => s.setAnswerDefault(c, !!o.defaultChecked?.())), n(() => {
8
- let e = l();
6
+ function d(d) {
7
+ let f = e("QuestionnaireChoice"), p = l(), [m, h] = c(), g = () => f.disabled() || !!d.disabled?.(), _ = () => f.multiple() ? "checkbox" : "radio", v = () => o({
8
+ byChoiceValue: f.shortcutByChoiceValue(),
9
+ byAnswerId: f.shortcutByAnswerId(),
10
+ value: d.value,
11
+ id: p
12
+ }), y = () => r({
13
+ required: f.required(),
14
+ multiple: f.multiple(),
15
+ hasInputAnswer: f.hasInputAnswer()
16
+ }), b = () => a(f.status(), f.name);
17
+ u(f.registerAnswerSelection(p, !!d.defaultChecked?.())), s(() => f.setAnswerDefault(p, !!d.defaultChecked?.())), s(() => {
18
+ let e = m();
9
19
  if (!e) return;
10
- let t = s.registerAnswerControl({
11
- id: c,
20
+ let t = f.registerAnswerControl({
21
+ id: p,
12
22
  element: e,
13
23
  type: "choice",
14
- value: o.value,
15
- disabled: d(),
16
- ownDisabled: !!o.disabled?.()
24
+ value: d.value,
25
+ disabled: g(),
26
+ ownDisabled: !!d.disabled?.()
17
27
  });
18
- a(t);
28
+ u(t);
19
29
  });
20
- let m = () => {
21
- let e = o.checked?.();
22
- return e === void 0 ? s.selectedAnswerIds().includes(c) : s.status() !== "skipped" && e;
23
- };
24
- n(() => {
25
- let e = l(), t = o.checked?.();
26
- s.resetVersion(), e && t !== void 0 && s.syncControlledAnswerSelection(c, t), e && (e.checked = m());
30
+ let x = () => i({
31
+ controlled: d.checked?.(),
32
+ status: f.status(),
33
+ selectedAnswerIds: f.selectedAnswerIds(),
34
+ id: p
35
+ });
36
+ s(() => {
37
+ let e = m(), t = d.checked?.();
38
+ f.resetVersion(), e && t !== void 0 && f.syncControlledAnswerSelection(p, t), e && (e.checked = x());
27
39
  });
28
- let h = (e) => {
40
+ let S = (e) => {
29
41
  let t = e.target;
30
- if (o.onChange?.(e), e.defaultPrevented) return;
31
- let n = o.checked?.();
32
- if (n === void 0) {
33
- s.setAnswerSelectionFromInteraction(c, t.checked);
34
- return;
35
- }
36
- s.status() === "skipped" && n === t.checked && s.setAnswerSelectionFromInteraction(c, n);
37
- };
42
+ d.onChange?.(e);
43
+ let r = n({
44
+ canceled: e.defaultPrevented,
45
+ controlled: d.checked?.(),
46
+ status: f.status(),
47
+ checked: t.checked
48
+ });
49
+ r !== null && f.setAnswerSelectionFromInteraction(p, r);
50
+ }, C = () => t(v(), !g() && x());
38
51
  return {
39
- id: c,
40
- setInput: u,
41
- type: f,
42
- isDisabled: d,
43
- shortcut: p,
44
- checkedResolved: m,
45
- handleChange: h,
46
- invalid: s.invalid,
47
- required: () => s.required() && !s.multiple() && !s.hasInputAnswer(),
48
- name: () => s.status() === "skipped" ? void 0 : s.name,
49
- ariaKeyShortcuts: () => t(p(), !d() && m()),
52
+ id: p,
53
+ setInput: h,
54
+ type: _,
55
+ isDisabled: g,
56
+ shortcut: v,
57
+ checkedResolved: x,
58
+ handleChange: S,
59
+ invalid: f.invalid,
60
+ required: y,
61
+ name: b,
62
+ ariaKeyShortcuts: C,
50
63
  inputProps: () => ({
51
- "aria-keyshortcuts": t(p(), !d() && m()),
52
- "aria-invalid": s.invalid() || void 0,
53
- checked: m(),
54
- disabled: d(),
55
- id: c,
56
- name: s.status() === "skipped" ? void 0 : s.name,
57
- onChange: h,
58
- required: s.required() && !s.multiple() && !s.hasInputAnswer(),
59
- type: f(),
60
- value: o.value
64
+ "aria-keyshortcuts": C(),
65
+ "aria-invalid": f.invalid() || void 0,
66
+ checked: x(),
67
+ disabled: g(),
68
+ id: p,
69
+ name: b(),
70
+ onChange: S,
71
+ required: y(),
72
+ type: _(),
73
+ value: d.value
61
74
  })
62
75
  };
63
76
  }
64
77
  //#endregion
65
- export { o as useQuestionnaireChoice };
78
+ export { d as useQuestionnaireChoice };
66
79
 
67
80
  //# sourceMappingURL=useQuestionnaireChoice.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useQuestionnaireChoice.js","names":["useQuestionnaireChoice","item","useQuestionnaireItemContext","id","createUniqueId","input","setInput","createSignal","isDisabled","options","type","shortcut","onCleanup","createEffect","element","unregister","checkedResolved","controlled","handleChange","target","event","keyShortcutText"],"sources":["../../../../src/components/questionnaire/QuestionnaireChoice/useQuestionnaireChoice.ts"],"sourcesContent":["import {\n createEffect,\n createSignal,\n createUniqueId,\n onCleanup,\n type Accessor,\n} from \"solid-js\";\nimport { useQuestionnaireItemContext } from \"../questionnaire.context\";\nimport { keyShortcutText } from \"../questionnaire.utils\";\n\ninterface Options {\n value: string;\n checked?: Accessor<boolean | undefined>;\n defaultChecked?: Accessor<boolean>;\n disabled?: Accessor<boolean>;\n onChange?: (event: Event) => void;\n}\n\n/**\n * 固定选项的状态:选中由 Item 的选中集合驱动(受控时用 checked),\n * 同时把 input 注册成 Item 的 answer control,以便校验与快捷键。\n */\nexport function useQuestionnaireChoice(options: Options) {\n const item = useQuestionnaireItemContext(\"QuestionnaireChoice\");\n const id = createUniqueId();\n const [input, setInput] = createSignal<HTMLInputElement>();\n\n const isDisabled = () => item.disabled() || !!options.disabled?.();\n const type = () => (item.multiple() ? \"checkbox\" : \"radio\");\n const shortcut = () =>\n item.shortcutByChoiceValue()?.get(options.value) ??\n item.shortcutByAnswerId().get(id) ??\n null;\n\n onCleanup(item.registerAnswerSelection(id, !!options.defaultChecked?.()));\n createEffect(() => item.setAnswerDefault(id, !!options.defaultChecked?.()));\n\n createEffect(() => {\n const element = input();\n if (!element) return;\n const unregister = item.registerAnswerControl({\n id,\n element,\n type: \"choice\",\n value: options.value,\n disabled: isDisabled(),\n ownDisabled: !!options.disabled?.(),\n });\n onCleanup(unregister);\n });\n\n const checkedResolved = () => {\n const controlled = options.checked?.();\n if (controlled !== undefined) {\n return item.status() === \"skipped\" ? false : controlled;\n }\n return item.selectedAnswerIds().includes(id);\n };\n\n // 受控同步 + reset 后强制同步 DOM checked\n createEffect(() => {\n const element = input();\n const controlled = options.checked?.();\n item.resetVersion();\n if (element && controlled !== undefined) {\n item.syncControlledAnswerSelection(id, controlled);\n }\n if (element) element.checked = checkedResolved();\n });\n\n const handleChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n options.onChange?.(event);\n if (event.defaultPrevented) return;\n const controlled = options.checked?.();\n if (controlled === undefined) {\n item.setAnswerSelectionFromInteraction(id, target.checked);\n return;\n }\n if (item.status() === \"skipped\" && controlled === target.checked) {\n item.setAnswerSelectionFromInteraction(id, controlled);\n }\n };\n\n return {\n id,\n setInput,\n type,\n isDisabled,\n shortcut,\n checkedResolved,\n handleChange,\n invalid: item.invalid,\n required: () =>\n item.required() && !item.multiple() && !item.hasInputAnswer(),\n name: () => (item.status() === \"skipped\" ? undefined : item.name),\n ariaKeyShortcuts: () =>\n keyShortcutText(shortcut(), !isDisabled() && checkedResolved()),\n inputProps: () => ({\n \"aria-keyshortcuts\": keyShortcutText(\n shortcut(),\n !isDisabled() && checkedResolved(),\n ),\n \"aria-invalid\": item.invalid() || undefined,\n checked: checkedResolved(),\n disabled: isDisabled(),\n id,\n name: item.status() === \"skipped\" ? undefined : item.name,\n onChange: handleChange,\n required: item.required() && !item.multiple() && !item.hasInputAnswer(),\n type: type(),\n value: options.value,\n }),\n };\n}\n"],"mappings":";;;;AAsBA,SAAgBA,EAAuB,GAAkB;CACvD,IAAMC,IAAOC,EAA4B,qBAAqB,GACxDC,IAAKC,EAAe,GACpB,CAACC,GAAOC,KAAYC,EAA+B,GAEnDC,UAAmBP,EAAK,SAAS,KAAK,CAAC,CAACQ,EAAQ,WAAW,GAC3DC,UAAcT,EAAK,SAAS,IAAI,aAAa,SAC7CU,UACJV,EAAK,sBAAsB,CAAC,EAAE,IAAIQ,EAAQ,KAAK,KAC/CR,EAAK,mBAAmB,CAAC,CAAC,IAAIE,CAAE,KAChC;CAKF,AAHAS,EAAUX,EAAK,wBAAwBE,GAAI,CAAC,CAACM,EAAQ,iBAAiB,CAAC,CAAC,GACxEI,QAAmBZ,EAAK,iBAAiBE,GAAI,CAAC,CAACM,EAAQ,iBAAiB,CAAC,CAAC,GAE1EI,QAAmB;EACjB,IAAMC,IAAUT,EAAM;EACtB,IAAI,CAACS,GAAS;EACd,IAAMC,IAAad,EAAK,sBAAsB;GAC5C;GACA;GACA,MAAM;GACN,OAAOQ,EAAQ;GACf,UAAUD,EAAW;GACrB,aAAa,CAAC,CAACC,EAAQ,WAAW;EACpC,CAAC;EACD,EAAUM,CAAU;CACtB,CAAC;CAED,IAAMC,UAAwB;EAC5B,IAAMC,IAAaR,EAAQ,UAAU;EAIrC,OAHIQ,MAAe,KAAA,IAGZhB,EAAK,kBAAkB,CAAC,CAAC,SAASE,CAAE,IAFlCF,EAAK,OAAO,MAAM,aAAoBgB;CAGjD;CAGA,QAAmB;EACjB,IAAMH,IAAUT,EAAM,GAChBY,IAAaR,EAAQ,UAAU;EAKrC,AAJAR,EAAK,aAAa,GACda,KAAWG,MAAe,KAAA,KAC5BhB,EAAK,8BAA8BE,GAAIc,CAAU,GAE/CH,MAAS,EAAQ,UAAUE,EAAgB;CACjD,CAAC;CAED,IAAME,KAAgB,MAAiB;EACrC,IAAMC,IAASC,EAAM;EAErB,IADAX,EAAQ,WAAWW,CAAK,GACpBA,EAAM,kBAAkB;EAC5B,IAAMH,IAAaR,EAAQ,UAAU;EACrC,IAAIQ,MAAe,KAAA,GAAW;GAC5B,EAAK,kCAAkCd,GAAIgB,EAAO,OAAO;GACzD;EACF;EACA,AAAIlB,EAAK,OAAO,MAAM,aAAagB,MAAeE,EAAO,WACvDlB,EAAK,kCAAkCE,GAAIc,CAAU;CAEzD;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAShB,EAAK;EACd,gBACEA,EAAK,SAAS,KAAK,CAACA,EAAK,SAAS,KAAK,CAACA,EAAK,eAAe;EAC9D,YAAaA,EAAK,OAAO,MAAM,YAAY,KAAA,IAAYA,EAAK;EAC5D,wBACEoB,EAAgBV,EAAS,GAAG,CAACH,EAAW,KAAKQ,EAAgB,CAAC;EAChE,mBAAmB;GACjB,qBAAqBK,EACnBV,EAAS,GACT,CAACH,EAAW,KAAKQ,EAAgB,CACnC;GACA,gBAAgBf,EAAK,QAAQ,KAAK,KAAA;GAClC,SAASe,EAAgB;GACzB,UAAUR,EAAW;GACrB;GACA,MAAMP,EAAK,OAAO,MAAM,YAAY,KAAA,IAAYA,EAAK;GACrD,UAAUiB;GACV,UAAUjB,EAAK,SAAS,KAAK,CAACA,EAAK,SAAS,KAAK,CAACA,EAAK,eAAe;GACtE,MAAMS,EAAK;GACX,OAAOD,EAAQ;EACjB;CACF;AACF"}
1
+ {"version":3,"file":"useQuestionnaireChoice.js","names":["useQuestionnaireChoice","item","useQuestionnaireItemContext","id","createUniqueId","input","setInput","createSignal","isDisabled","options","type","shortcut","resolveChoiceShortcut","required","isChoiceRequired","name","resolveChoiceName","onCleanup","createEffect","element","unregister","checkedResolved","resolveChoiceChecked","controlled","handleChange","target","event","next","decideChoiceSelectionChange","ariaKeyShortcuts","keyShortcutText"],"sources":["../../../../src/components/questionnaire/QuestionnaireChoice/useQuestionnaireChoice.ts"],"sourcesContent":["import {\n createEffect,\n createSignal,\n createUniqueId,\n onCleanup,\n type Accessor,\n} from \"solid-js\";\nimport { useQuestionnaireItemContext } from \"../questionnaire.context\";\nimport { keyShortcutText } from \"../questionnaire.utils\";\nimport {\n decideChoiceSelectionChange,\n isChoiceRequired,\n resolveChoiceChecked,\n resolveChoiceName,\n resolveChoiceShortcut,\n} from \"./questionnaire-choice.utils\";\n\ninterface Options {\n value: string;\n checked?: Accessor<boolean | undefined>;\n defaultChecked?: Accessor<boolean>;\n disabled?: Accessor<boolean>;\n onChange?: (event: Event) => void;\n}\n\n/**\n * 固定选项的状态:选中由 Item 的选中集合驱动(受控时用 checked),\n * 同时把 input 注册成 Item 的 answer control,以便校验与快捷键。\n */\nexport function useQuestionnaireChoice(options: Options) {\n const item = useQuestionnaireItemContext(\"QuestionnaireChoice\");\n const id = createUniqueId();\n const [input, setInput] = createSignal<HTMLInputElement>();\n\n const isDisabled = () => item.disabled() || !!options.disabled?.();\n const type = () => (item.multiple() ? \"checkbox\" : \"radio\");\n const shortcut = () =>\n resolveChoiceShortcut({\n byChoiceValue: item.shortcutByChoiceValue(),\n byAnswerId: item.shortcutByAnswerId(),\n value: options.value,\n id,\n });\n\n const required = () =>\n isChoiceRequired({\n required: item.required(),\n multiple: item.multiple(),\n hasInputAnswer: item.hasInputAnswer(),\n });\n\n const name = () => resolveChoiceName(item.status(), item.name);\n\n onCleanup(item.registerAnswerSelection(id, !!options.defaultChecked?.()));\n createEffect(() => item.setAnswerDefault(id, !!options.defaultChecked?.()));\n\n createEffect(() => {\n const element = input();\n if (!element) return;\n const unregister = item.registerAnswerControl({\n id,\n element,\n type: \"choice\",\n value: options.value,\n disabled: isDisabled(),\n ownDisabled: !!options.disabled?.(),\n });\n onCleanup(unregister);\n });\n\n const checkedResolved = () =>\n resolveChoiceChecked({\n controlled: options.checked?.(),\n status: item.status(),\n selectedAnswerIds: item.selectedAnswerIds(),\n id,\n });\n\n // 受控同步 + reset 后强制同步 DOM checked\n createEffect(() => {\n const element = input();\n const controlled = options.checked?.();\n item.resetVersion();\n if (element && controlled !== undefined) {\n item.syncControlledAnswerSelection(id, controlled);\n }\n if (element) element.checked = checkedResolved();\n });\n\n const handleChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n options.onChange?.(event);\n const next = decideChoiceSelectionChange({\n canceled: event.defaultPrevented,\n controlled: options.checked?.(),\n status: item.status(),\n checked: target.checked,\n });\n if (next !== null) item.setAnswerSelectionFromInteraction(id, next);\n };\n\n /** aria-keyshortcuts:只有\"可用且当前勾选\"时才附上 Enter 提示 */\n const ariaKeyShortcuts = () =>\n keyShortcutText(shortcut(), !isDisabled() && checkedResolved());\n\n return {\n id,\n setInput,\n type,\n isDisabled,\n shortcut,\n checkedResolved,\n handleChange,\n invalid: item.invalid,\n required,\n name,\n ariaKeyShortcuts,\n inputProps: () => ({\n \"aria-keyshortcuts\": ariaKeyShortcuts(),\n \"aria-invalid\": item.invalid() || undefined,\n checked: checkedResolved(),\n disabled: isDisabled(),\n id,\n name: name(),\n onChange: handleChange,\n required: required(),\n type: type(),\n value: options.value,\n }),\n };\n}\n"],"mappings":";;;;;AA6BA,SAAgBA,EAAuB,GAAkB;CACvD,IAAMC,IAAOC,EAA4B,qBAAqB,GACxDC,IAAKC,EAAe,GACpB,CAACC,GAAOC,KAAYC,EAA+B,GAEnDC,UAAmBP,EAAK,SAAS,KAAK,CAAC,CAACQ,EAAQ,WAAW,GAC3DC,UAAcT,EAAK,SAAS,IAAI,aAAa,SAC7CU,UACJC,EAAsB;EACpB,eAAeX,EAAK,sBAAsB;EAC1C,YAAYA,EAAK,mBAAmB;EACpC,OAAOQ,EAAQ;EACf;CACF,CAAC,GAEGI,UACJC,EAAiB;EACf,UAAUb,EAAK,SAAS;EACxB,UAAUA,EAAK,SAAS;EACxB,gBAAgBA,EAAK,eAAe;CACtC,CAAC,GAEGc,UAAaC,EAAkBf,EAAK,OAAO,GAAGA,EAAK,IAAI;CAK7D,AAHAgB,EAAUhB,EAAK,wBAAwBE,GAAI,CAAC,CAACM,EAAQ,iBAAiB,CAAC,CAAC,GACxES,QAAmBjB,EAAK,iBAAiBE,GAAI,CAAC,CAACM,EAAQ,iBAAiB,CAAC,CAAC,GAE1ES,QAAmB;EACjB,IAAMC,IAAUd,EAAM;EACtB,IAAI,CAACc,GAAS;EACd,IAAMC,IAAanB,EAAK,sBAAsB;GAC5C;GACA;GACA,MAAM;GACN,OAAOQ,EAAQ;GACf,UAAUD,EAAW;GACrB,aAAa,CAAC,CAACC,EAAQ,WAAW;EACpC,CAAC;EACD,EAAUW,CAAU;CACtB,CAAC;CAED,IAAMC,UACJC,EAAqB;EACnB,YAAYb,EAAQ,UAAU;EAC9B,QAAQR,EAAK,OAAO;EACpB,mBAAmBA,EAAK,kBAAkB;EAC1C;CACF,CAAC;CAGH,QAAmB;EACjB,IAAMkB,IAAUd,EAAM,GAChBkB,IAAad,EAAQ,UAAU;EAKrC,AAJAR,EAAK,aAAa,GACdkB,KAAWI,MAAe,KAAA,KAC5BtB,EAAK,8BAA8BE,GAAIoB,CAAU,GAE/CJ,MAAS,EAAQ,UAAUE,EAAgB;CACjD,CAAC;CAED,IAAMG,KAAgB,MAAiB;EACrC,IAAMC,IAASC,EAAM;EACrB,EAAQ,WAAWA,CAAK;EACxB,IAAMC,IAAOC,EAA4B;GACvC,UAAUF,EAAM;GAChB,YAAYjB,EAAQ,UAAU;GAC9B,QAAQR,EAAK,OAAO;GACpB,SAASwB,EAAO;EAClB,CAAC;EACD,AAAIE,MAAS,QAAM1B,EAAK,kCAAkCE,GAAIwB,CAAI;CACpE,GAGME,UACJC,EAAgBnB,EAAS,GAAG,CAACH,EAAW,KAAKa,EAAgB,CAAC;CAEhE,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAASpB,EAAK;EACd;EACA;EACA;EACA,mBAAmB;GACjB,qBAAqB4B,EAAiB;GACtC,gBAAgB5B,EAAK,QAAQ,KAAK,KAAA;GAClC,SAASoB,EAAgB;GACzB,UAAUb,EAAW;GACrB;GACA,MAAMO,EAAK;GACX,UAAUS;GACV,UAAUX,EAAS;GACnB,MAAMH,EAAK;GACX,OAAOD,EAAQ;EACjB;CACF;AACF"}
@@ -19,7 +19,10 @@ function s(s) {
19
19
  e !== h() && (g(e), _() || m(f));
20
20
  }), r(() => {
21
21
  let e = u(), n = s.value();
22
- e && (_() ? c.syncControlledAnswerSelection(l, t(n)) : n !== void 0 && (e.defaultValue = String(n)));
22
+ if (e && _()) {
23
+ c.syncControlledAnswerSelection(l, t(n));
24
+ return;
25
+ }
23
26
  });
24
27
  let x = (e) => {
25
28
  let n = e.target;
@@ -1 +1 @@
1
- {"version":3,"file":"useQuestionnaireInput.js","names":["useQuestionnaireInput","item","useQuestionnaireItemContext","id","createUniqueId","input","setInput","createSignal","initialFilled","hasText","options","internalFilled","setInternalFilled","resetSeen","setResetSeen","controlled","isDisabled","selected","filled","onCleanup","createEffect","element","unregister","version","value","handleChange","target","event","nextFilled","keyShortcutText"],"sources":["../../../../src/components/questionnaire/QuestionnaireInput/useQuestionnaireInput.ts"],"sourcesContent":["import {\n createEffect,\n createSignal,\n createUniqueId,\n onCleanup,\n type Accessor,\n} from \"solid-js\";\nimport { useQuestionnaireItemContext } from \"../questionnaire.context\";\nimport { hasText, keyShortcutText } from \"../questionnaire.utils\";\n\ninterface Options {\n type: Accessor<string>;\n defaultValue: Accessor<string | undefined>;\n value: Accessor<string | undefined>;\n disabled: Accessor<boolean | undefined>;\n onChange?: (event: Event) => void;\n}\n\n/**\n * 自由作答输入:作为 Item 的一个 answer control 参与校验与 FormData。\n * 选中时才有 name(参与提交),否则用 form=\"\" 排除在表单之外。\n */\nexport function useQuestionnaireInput(options: Options) {\n const item = useQuestionnaireItemContext(\"QuestionnaireInput\");\n const id = createUniqueId();\n const [input, setInput] = createSignal<HTMLInputElement>();\n const initialFilled = hasText(options.defaultValue());\n const [internalFilled, setInternalFilled] = createSignal(initialFilled);\n const [resetSeen, setResetSeen] = createSignal(0);\n\n const controlled = () => options.value() !== undefined;\n const isDisabled = () => item.disabled() || !!options.disabled?.();\n const selected = () => item.selectedAnswerIds().includes(id);\n const filled = () =>\n controlled() ? hasText(options.value()) : internalFilled();\n\n onCleanup(item.registerAnswerSelection(id, initialFilled));\n createEffect(() => item.setAnswerDefault(id, initialFilled));\n\n createEffect(() => {\n const element = input();\n if (!element) return;\n const unregister = item.registerAnswerControl({\n id,\n element,\n type: \"input\",\n disabled: isDisabled(),\n });\n onCleanup(unregister);\n });\n\n createEffect(() => {\n const version = item.resetVersion();\n if (version === resetSeen()) return;\n setResetSeen(version);\n if (!controlled()) setInternalFilled(initialFilled);\n });\n\n createEffect(() => {\n const element = input();\n const value = options.value();\n if (!element) return;\n if (controlled()) {\n item.syncControlledAnswerSelection(id, hasText(value));\n } else if (value !== undefined) {\n element.defaultValue = String(value);\n }\n });\n\n const handleChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n options.onChange?.(event);\n if (event.defaultPrevented) return;\n const nextFilled = hasText(target.value);\n if (!controlled()) setInternalFilled(nextFilled);\n item.setAnswerSelectionFromInteraction(id, nextFilled);\n };\n\n return {\n id,\n setInput,\n selected,\n filled,\n isDisabled,\n invalid: item.invalid,\n controlled,\n name: () => (selected() ? item.name : undefined),\n formValue: () => (selected() ? undefined : \"\"),\n ariaKeyShortcuts: () =>\n keyShortcutText(null, !isDisabled() && filled() && selected()),\n inputProps: () => ({\n \"aria-invalid\": item.invalid() || undefined,\n \"aria-keyshortcuts\": keyShortcutText(\n null,\n !isDisabled() && filled() && selected(),\n ),\n defaultValue: controlled() ? undefined : options.defaultValue(),\n disabled: isDisabled(),\n form: selected() ? undefined : \"\",\n id,\n name: selected() ? item.name : undefined,\n onChange: handleChange,\n type: options.type(),\n value: controlled() ? options.value() : undefined,\n }),\n };\n}\n"],"mappings":";;;;AAsBA,SAAgBA,EAAsB,GAAkB;CACtD,IAAMC,IAAOC,EAA4B,oBAAoB,GACvDC,IAAKC,EAAe,GACpB,CAACC,GAAOC,KAAYC,EAA+B,GACnDC,IAAgBC,EAAQC,EAAQ,aAAa,CAAC,GAC9C,CAACC,GAAgBC,KAAqBL,EAAaC,CAAa,GAChE,CAACK,GAAWC,KAAgBP,EAAa,CAAC,GAE1CQ,UAAmBL,EAAQ,MAAM,MAAM,KAAA,GACvCM,UAAmBf,EAAK,SAAS,KAAK,CAAC,CAACS,EAAQ,WAAW,GAC3DO,UAAiBhB,EAAK,kBAAkB,CAAC,CAAC,SAASE,CAAE,GACrDe,UACJH,EAAW,IAAIN,EAAQC,EAAQ,MAAM,CAAC,IAAIC,EAAe;CAwB3D,AAtBAQ,EAAUlB,EAAK,wBAAwBE,GAAIK,CAAa,CAAC,GACzDY,QAAmBnB,EAAK,iBAAiBE,GAAIK,CAAa,CAAC,GAE3DY,QAAmB;EACjB,IAAMC,IAAUhB,EAAM;EACtB,IAAI,CAACgB,GAAS;EACd,IAAMC,IAAarB,EAAK,sBAAsB;GAC5C;GACA;GACA,MAAM;GACN,UAAUe,EAAW;EACvB,CAAC;EACD,EAAUM,CAAU;CACtB,CAAC,GAEDF,QAAmB;EACjB,IAAMG,IAAUtB,EAAK,aAAa;EAClC,AAAIsB,MAAYV,EAAU,MAC1BC,EAAaS,CAAO,GACfR,EAAW,KAAGH,EAAkBJ,CAAa;CACpD,CAAC,GAEDY,QAAmB;EACjB,IAAMC,IAAUhB,EAAM,GAChBmB,IAAQd,EAAQ,MAAM;EAC5B,AAAKW,MACDN,EAAW,IACbd,EAAK,8BAA8BE,GAAIM,EAAQe,CAAK,CAAC,IAC5CA,MAAU,KAAA,MACnB,EAAQ,eAAe,OAAOA,CAAK;CAEvC,CAAC;CAED,IAAMC,KAAgB,MAAiB;EACrC,IAAMC,IAASC,EAAM;EAErB,IADAjB,EAAQ,WAAWiB,CAAK,GACpBA,EAAM,kBAAkB;EAC5B,IAAMC,IAAanB,EAAQiB,EAAO,KAAK;EAEvC,AADKX,EAAW,KAAGH,EAAkBgB,CAAU,GAC/C3B,EAAK,kCAAkCE,GAAIyB,CAAU;CACvD;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA,SAAS3B,EAAK;EACd;EACA,YAAagB,EAAS,IAAIhB,EAAK,OAAO,KAAA;EACtC,iBAAkBgB,EAAS,IAAI,KAAA,IAAY;EAC3C,wBACEY,EAAgB,MAAM,CAACb,EAAW,KAAKE,EAAO,KAAKD,EAAS,CAAC;EAC/D,mBAAmB;GACjB,gBAAgBhB,EAAK,QAAQ,KAAK,KAAA;GAClC,qBAAqB4B,EACnB,MACA,CAACb,EAAW,KAAKE,EAAO,KAAKD,EAAS,CACxC;GACA,cAAcF,EAAW,IAAI,KAAA,IAAYL,EAAQ,aAAa;GAC9D,UAAUM,EAAW;GACrB,MAAMC,EAAS,IAAI,KAAA,IAAY;GAC/B;GACA,MAAMA,EAAS,IAAIhB,EAAK,OAAO,KAAA;GAC/B,UAAUwB;GACV,MAAMf,EAAQ,KAAK;GACnB,OAAOK,EAAW,IAAIL,EAAQ,MAAM,IAAI,KAAA;EAC1C;CACF;AACF"}
1
+ {"version":3,"file":"useQuestionnaireInput.js","names":["useQuestionnaireInput","item","useQuestionnaireItemContext","id","createUniqueId","input","setInput","createSignal","initialFilled","hasText","options","internalFilled","setInternalFilled","resetSeen","setResetSeen","controlled","isDisabled","selected","filled","onCleanup","createEffect","element","unregister","version","value","handleChange","target","event","nextFilled","keyShortcutText"],"sources":["../../../../src/components/questionnaire/QuestionnaireInput/useQuestionnaireInput.ts"],"sourcesContent":["import {\n createEffect,\n createSignal,\n createUniqueId,\n onCleanup,\n type Accessor,\n} from \"solid-js\";\nimport { useQuestionnaireItemContext } from \"../questionnaire.context\";\nimport { hasText, keyShortcutText } from \"../questionnaire.utils\";\n\ninterface Options {\n type: Accessor<string>;\n defaultValue: Accessor<string | undefined>;\n value: Accessor<string | undefined>;\n disabled: Accessor<boolean | undefined>;\n onChange?: (event: Event) => void;\n}\n\n/**\n * 自由作答输入:作为 Item 的一个 answer control 参与校验与 FormData。\n * 选中时才有 name(参与提交),否则用 form=\"\" 排除在表单之外。\n */\nexport function useQuestionnaireInput(options: Options) {\n const item = useQuestionnaireItemContext(\"QuestionnaireInput\");\n const id = createUniqueId();\n const [input, setInput] = createSignal<HTMLInputElement>();\n const initialFilled = hasText(options.defaultValue());\n const [internalFilled, setInternalFilled] = createSignal(initialFilled);\n const [resetSeen, setResetSeen] = createSignal(0);\n\n const controlled = () => options.value() !== undefined;\n const isDisabled = () => item.disabled() || !!options.disabled?.();\n const selected = () => item.selectedAnswerIds().includes(id);\n const filled = () =>\n controlled() ? hasText(options.value()) : internalFilled();\n\n onCleanup(item.registerAnswerSelection(id, initialFilled));\n createEffect(() => item.setAnswerDefault(id, initialFilled));\n\n createEffect(() => {\n const element = input();\n if (!element) return;\n const unregister = item.registerAnswerControl({\n id,\n element,\n type: \"input\",\n disabled: isDisabled(),\n });\n onCleanup(unregister);\n });\n\n createEffect(() => {\n const version = item.resetVersion();\n if (version === resetSeen()) return;\n setResetSeen(version);\n if (!controlled()) setInternalFilled(initialFilled);\n });\n\n createEffect(() => {\n const element = input();\n const value = options.value();\n if (!element) return;\n if (controlled()) {\n item.syncControlledAnswerSelection(id, hasText(value));\n return;\n }\n // 非受控:value 恒为 undefined(受控/非受控由同一个 accessor 判定),\n // 因此这里没有\"按 value 写 defaultValue\"的分支——之前那句\n // `else if (value !== undefined)` 永远不成立,已删除。\n });\n\n const handleChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n options.onChange?.(event);\n if (event.defaultPrevented) return;\n const nextFilled = hasText(target.value);\n if (!controlled()) setInternalFilled(nextFilled);\n item.setAnswerSelectionFromInteraction(id, nextFilled);\n };\n\n return {\n id,\n setInput,\n selected,\n filled,\n isDisabled,\n invalid: item.invalid,\n controlled,\n name: () => (selected() ? item.name : undefined),\n formValue: () => (selected() ? undefined : \"\"),\n ariaKeyShortcuts: () =>\n keyShortcutText(null, !isDisabled() && filled() && selected()),\n inputProps: () => ({\n \"aria-invalid\": item.invalid() || undefined,\n \"aria-keyshortcuts\": keyShortcutText(\n null,\n !isDisabled() && filled() && selected(),\n ),\n defaultValue: controlled() ? undefined : options.defaultValue(),\n disabled: isDisabled(),\n form: selected() ? undefined : \"\",\n id,\n name: selected() ? item.name : undefined,\n onChange: handleChange,\n type: options.type(),\n value: controlled() ? options.value() : undefined,\n }),\n };\n}\n"],"mappings":";;;;AAsBA,SAAgBA,EAAsB,GAAkB;CACtD,IAAMC,IAAOC,EAA4B,oBAAoB,GACvDC,IAAKC,EAAe,GACpB,CAACC,GAAOC,KAAYC,EAA+B,GACnDC,IAAgBC,EAAQC,EAAQ,aAAa,CAAC,GAC9C,CAACC,GAAgBC,KAAqBL,EAAaC,CAAa,GAChE,CAACK,GAAWC,KAAgBP,EAAa,CAAC,GAE1CQ,UAAmBL,EAAQ,MAAM,MAAM,KAAA,GACvCM,UAAmBf,EAAK,SAAS,KAAK,CAAC,CAACS,EAAQ,WAAW,GAC3DO,UAAiBhB,EAAK,kBAAkB,CAAC,CAAC,SAASE,CAAE,GACrDe,UACJH,EAAW,IAAIN,EAAQC,EAAQ,MAAM,CAAC,IAAIC,EAAe;CAwB3D,AAtBAQ,EAAUlB,EAAK,wBAAwBE,GAAIK,CAAa,CAAC,GACzDY,QAAmBnB,EAAK,iBAAiBE,GAAIK,CAAa,CAAC,GAE3DY,QAAmB;EACjB,IAAMC,IAAUhB,EAAM;EACtB,IAAI,CAACgB,GAAS;EACd,IAAMC,IAAarB,EAAK,sBAAsB;GAC5C;GACA;GACA,MAAM;GACN,UAAUe,EAAW;EACvB,CAAC;EACD,EAAUM,CAAU;CACtB,CAAC,GAEDF,QAAmB;EACjB,IAAMG,IAAUtB,EAAK,aAAa;EAClC,AAAIsB,MAAYV,EAAU,MAC1BC,EAAaS,CAAO,GACfR,EAAW,KAAGH,EAAkBJ,CAAa;CACpD,CAAC,GAEDY,QAAmB;EACjB,IAAMC,IAAUhB,EAAM,GAChBmB,IAAQd,EAAQ,MAAM;EAC5B,IAAKW,KACDN,EAAW,GAAG;GAChB,EAAK,8BAA8BZ,GAAIM,EAAQe,CAAK,CAAC;GACrD;EACF;CAIF,CAAC;CAED,IAAMC,KAAgB,MAAiB;EACrC,IAAMC,IAASC,EAAM;EAErB,IADAjB,EAAQ,WAAWiB,CAAK,GACpBA,EAAM,kBAAkB;EAC5B,IAAMC,IAAanB,EAAQiB,EAAO,KAAK;EAEvC,AADKX,EAAW,KAAGH,EAAkBgB,CAAU,GAC/C3B,EAAK,kCAAkCE,GAAIyB,CAAU;CACvD;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA,SAAS3B,EAAK;EACd;EACA,YAAagB,EAAS,IAAIhB,EAAK,OAAO,KAAA;EACtC,iBAAkBgB,EAAS,IAAI,KAAA,IAAY;EAC3C,wBACEY,EAAgB,MAAM,CAACb,EAAW,KAAKE,EAAO,KAAKD,EAAS,CAAC;EAC/D,mBAAmB;GACjB,gBAAgBhB,EAAK,QAAQ,KAAK,KAAA;GAClC,qBAAqB4B,EACnB,MACA,CAACb,EAAW,KAAKE,EAAO,KAAKD,EAAS,CACxC;GACA,cAAcF,EAAW,IAAI,KAAA,IAAYL,EAAQ,aAAa;GAC9D,UAAUM,EAAW;GACrB,MAAMC,EAAS,IAAI,KAAA,IAAY;GAC/B;GACA,MAAMA,EAAS,IAAIhB,EAAK,OAAO,KAAA;GAC/B,UAAUwB;GACV,MAAMf,EAAQ,KAAK;GACnB,OAAOK,EAAW,IAAIL,EAAQ,MAAM,IAAI,KAAA;EAC1C;CACF;AACF"}
@@ -26,8 +26,7 @@ function m(s) {
26
26
  required: () => h.required,
27
27
  multiple: () => h.multiple,
28
28
  disabled: () => h.disabled,
29
- invalid: () => h.invalid,
30
- onStatusChange: (e) => h.onStatusChange?.(e)
29
+ invalid: () => h.invalid
31
30
  }), v;
32
31
  return l(() => {
33
32
  let e = _.context.status();
@@ -1 +1 @@
1
- {"version":3,"file":"QuestionnaireItem.js","names":["createEffect","mergeProps","onCleanup","splitProps","clsx","QuestionnaireItemContext","useQuestionnaireItem","QuestionnaireItemStatus","QuestionnaireItemProps","QuestionnaireItem","props","merged","required","multiple","disabled","invalid","local","rest","engine","name","onStatusChange","status","lastStatus","context","undefined","_$createComponent","Provider","value","children","_el$","_tmpl$","_$use","el","registerElement","_$spread","_$mergeProps","hidden","active","inert","aria-describedby","describedBy","aria-invalid","aria-keyshortcuts","keyshortcuts","data-active","data-status","data-invalid","data-disabled","class","classList","_$insert","mergeProps","_$createComponent","_$mergeProps","mergeProps$1","_tmpl$","QuestionnaireItem","merged","props","local","rest","splitProps","engine","useQuestionnaireItem","status","lastStatus","createEffect","createComponent","QuestionnaireItemContext","_el$","use","el","spread","mergeProps","\"tabIndex\"","\"class\"","clsx","insert"],"sources":["../../../../src/components/questionnaire/QuestionnaireItem/QuestionnaireItem.tsx"],"sourcesContent":["import { createEffect, mergeProps, onCleanup, splitProps } from \"solid-js\";\nimport { clsx } from \"~/utils\";\nimport { QuestionnaireItemContext } from \"../questionnaire.context\";\nimport { useQuestionnaireItem } from \"../useQuestionnaireItem\";\nimport type { QuestionnaireItemStatus } from \"../questionnaire.types\";\nimport type { QuestionnaireItemProps } from \"../questionnaire.types\";\n\n/** 单个题目:fieldset,非激活时 hidden + inert,并向 Root 注册命令式句柄 */\nexport function QuestionnaireItem(props: QuestionnaireItemProps) {\n const merged = mergeProps(\n { required: false, multiple: false, disabled: false, invalid: false },\n props,\n );\n const [local, rest] = splitProps(merged, [\n \"name\",\n \"required\",\n \"multiple\",\n \"disabled\",\n \"invalid\",\n \"onStatusChange\",\n \"class\",\n \"classList\",\n \"children\",\n ]);\n\n const engine = useQuestionnaireItem({\n name: local.name,\n required: () => local.required,\n multiple: () => local.multiple,\n disabled: () => local.disabled,\n invalid: () => local.invalid,\n onStatusChange: (status) => local.onStatusChange?.(status),\n });\n\n let lastStatus: QuestionnaireItemStatus | undefined;\n createEffect(() => {\n const status = engine.context.status();\n if (lastStatus !== undefined && lastStatus !== status) {\n local.onStatusChange?.(status);\n }\n lastStatus = status;\n });\n\n return (\n <QuestionnaireItemContext.Provider value={engine.context}>\n <fieldset\n {...rest}\n ref={(el) => {\n onCleanup(engine.registerElement(el));\n }}\n disabled={engine.context.disabled()}\n hidden={!engine.context.active()}\n inert={!engine.context.active()}\n tabIndex={-1}\n aria-describedby={engine.describedBy()}\n aria-invalid={engine.context.invalid() || undefined}\n aria-keyshortcuts={engine.keyshortcuts()}\n data-slot=\"questionnaire-item\"\n data-active={engine.context.active() ? \"\" : undefined}\n data-status={engine.context.status()}\n data-invalid={engine.context.invalid() ? \"\" : undefined}\n data-disabled={engine.context.disabled() ? \"\" : undefined}\n class={clsx(\n \"flex min-w-0 flex-col gap-4 border-0 p-0 outline-none\",\n local.class,\n )}\n classList={local.classList}\n >\n {local.children}\n </fieldset>\n </QuestionnaireItemContext.Provider>\n );\n}\n"],"mappings":";;;;;;;AAQA,SAAgBS,EAAkBC,GAA+B;CAC/D,IAAMC,IAASV,EACb;EAAEW,UAAU;EAAOC,UAAU;EAAOC,UAAU;EAAOC,SAAS;CAAM,GACpEL,CACF,GACM,CAACM,GAAOC,KAAQd,EAAWQ,GAAQ;EACvC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAAU,CACX,GAEKO,IAASZ,EAAqB;EAClCa,MAAMH,EAAMG;EACZP,gBAAgBI,EAAMJ;EACtBC,gBAAgBG,EAAMH;EACtBC,gBAAgBE,EAAMF;EACtBC,eAAeC,EAAMD;EACrBK,iBAAiBC,MAAWL,EAAMI,iBAAiBC,CAAM;CAC3D,CAAC,GAEGC;CASJ,OARAtB,QAAmB;EACjB,IAAMqB,IAASH,EAAOK,QAAQF,OAAO;EAIrCC,AAHIA,MAAeE,KAAAA,KAAaF,MAAeD,KAC7CL,EAAMI,iBAAiBC,CAAM,GAE/BC,IAAaD;CACf,CAAC,GAEDI,EACGpB,EAAyBqB,UAAQ;EAAA,IAACC,QAAK;GAAA,OAAET,EAAOK;EAAO;EAAA,IAAAK,WAAA;GAAA,IAAAC,IAAAC,EAAA;GAwBrC,OAxBqCC,GAG9CC,MAAO;IACX9B,EAAUgB,EAAOe,gBAAgBD,CAAE,CAAC;GACtC,GAACH,CAAA,GAAAK,EAAAL,GAAAM,EAHGlB,GAAI;IAAA,IAIRH,WAAQ;KAAA,OAAEI,EAAOK,QAAQT,SAAS;IAAC;IAAA,IACnCsB,SAAM;KAAA,OAAE,CAAClB,EAAOK,QAAQc,OAAO;IAAC;IAAA,IAChCC,QAAK;KAAA,OAAE,CAACpB,EAAOK,QAAQc,OAAO;IAAC;IAAAqC,UAAA;IAAA,IAAA,qBAAA;KAAA,OAEbxD,EAAOsB,YAAY;IAAC;IAAA,IAAA,iBAAA;KAAA,OACxBtB,EAAOK,QAAQR,QAAQ,KAAKS,KAAAA;IAAS;IAAA,IAAA,sBAAA;KAAA,OAChCN,EAAOyB,aAAa;IAAC;IAAA,aAC9B;IAAoB,IAAA,gBAAA;KAAA,OACjBzB,EAAOK,QAAQc,OAAO,IAAI,KAAKb,KAAAA;IAAS;IAAA,IAAA,gBAAA;KAAA,OACxCN,EAAOK,QAAQF,OAAO;IAAC;IAAA,IAAA,iBAAA;KAAA,OACtBH,EAAOK,QAAQR,QAAQ,IAAI,KAAKS,KAAAA;IAAS;IAAA,IAAA,kBAAA;KAAA,OACxCN,EAAOK,QAAQT,SAAS,IAAI,KAAKU,KAAAA;IAAS;IAAA,IAAAmD,QAAA;KAAA,OAClDvE,EACL,yDACAY,EAAMgC,KACR;IAAC;IAAA,IACDC,YAAS;KAAA,OAAEjC,EAAMiC;IAAS;GAAA,CAAA,GAAA,IAAA,EAAA,GAAAC,EAAArB,SAEzBb,EAAMY,QAAQ,GAAAC;EAAA;CAAA,CAAA;AAIvB"}
1
+ {"version":3,"file":"QuestionnaireItem.js","names":["createEffect","mergeProps","onCleanup","splitProps","clsx","QuestionnaireItemContext","useQuestionnaireItem","QuestionnaireItemStatus","QuestionnaireItemProps","QuestionnaireItem","props","merged","required","multiple","disabled","invalid","local","rest","engine","name","lastStatus","status","context","undefined","onStatusChange","_$createComponent","Provider","value","children","_el$","_tmpl$","_$use","el","registerElement","_$spread","_$mergeProps","hidden","active","inert","aria-describedby","describedBy","aria-invalid","aria-keyshortcuts","keyshortcuts","data-active","data-status","data-invalid","data-disabled","class","classList","_$insert","mergeProps","_$createComponent","_$mergeProps","mergeProps$1","_tmpl$","QuestionnaireItem","merged","props","local","rest","splitProps","engine","useQuestionnaireItem","lastStatus","createEffect","status","createComponent","QuestionnaireItemContext","_el$","use","el","spread","mergeProps","\"tabIndex\"","\"class\"","clsx","insert"],"sources":["../../../../src/components/questionnaire/QuestionnaireItem/QuestionnaireItem.tsx"],"sourcesContent":["import { createEffect, mergeProps, onCleanup, splitProps } from \"solid-js\";\nimport { clsx } from \"~/utils\";\nimport { QuestionnaireItemContext } from \"../questionnaire.context\";\nimport { useQuestionnaireItem } from \"../useQuestionnaireItem\";\nimport type { QuestionnaireItemStatus } from \"../questionnaire.types\";\nimport type { QuestionnaireItemProps } from \"../questionnaire.types\";\n\n/** 单个题目:fieldset,非激活时 hidden + inert,并向 Root 注册命令式句柄 */\nexport function QuestionnaireItem(props: QuestionnaireItemProps) {\n const merged = mergeProps(\n { required: false, multiple: false, disabled: false, invalid: false },\n props,\n );\n const [local, rest] = splitProps(merged, [\n \"name\",\n \"required\",\n \"multiple\",\n \"disabled\",\n \"invalid\",\n \"onStatusChange\",\n \"class\",\n \"classList\",\n \"children\",\n ]);\n\n const engine = useQuestionnaireItem({\n name: local.name,\n required: () => local.required,\n multiple: () => local.multiple,\n disabled: () => local.disabled,\n invalid: () => local.invalid,\n });\n\n let lastStatus: QuestionnaireItemStatus | undefined;\n createEffect(() => {\n const status = engine.context.status();\n if (lastStatus !== undefined && lastStatus !== status) {\n local.onStatusChange?.(status);\n }\n lastStatus = status;\n });\n\n return (\n <QuestionnaireItemContext.Provider value={engine.context}>\n <fieldset\n {...rest}\n ref={(el) => {\n onCleanup(engine.registerElement(el));\n }}\n disabled={engine.context.disabled()}\n hidden={!engine.context.active()}\n inert={!engine.context.active()}\n tabIndex={-1}\n aria-describedby={engine.describedBy()}\n aria-invalid={engine.context.invalid() || undefined}\n aria-keyshortcuts={engine.keyshortcuts()}\n data-slot=\"questionnaire-item\"\n data-active={engine.context.active() ? \"\" : undefined}\n data-status={engine.context.status()}\n data-invalid={engine.context.invalid() ? \"\" : undefined}\n data-disabled={engine.context.disabled() ? \"\" : undefined}\n class={clsx(\n \"flex min-w-0 flex-col gap-4 border-0 p-0 outline-none\",\n local.class,\n )}\n classList={local.classList}\n >\n {local.children}\n </fieldset>\n </QuestionnaireItemContext.Provider>\n );\n}\n"],"mappings":";;;;;;;AAQA,SAAgBS,EAAkBC,GAA+B;CAC/D,IAAMC,IAASV,EACb;EAAEW,UAAU;EAAOC,UAAU;EAAOC,UAAU;EAAOC,SAAS;CAAM,GACpEL,CACF,GACM,CAACM,GAAOC,KAAQd,EAAWQ,GAAQ;EACvC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAAU,CACX,GAEKO,IAASZ,EAAqB;EAClCa,MAAMH,EAAMG;EACZP,gBAAgBI,EAAMJ;EACtBC,gBAAgBG,EAAMH;EACtBC,gBAAgBE,EAAMF;EACtBC,eAAeC,EAAMD;CACvB,CAAC,GAEGK;CASJ,OARApB,QAAmB;EACjB,IAAMqB,IAASH,EAAOI,QAAQD,OAAO;EAIrCD,AAHIA,MAAeG,KAAAA,KAAaH,MAAeC,KAC7CL,EAAMQ,iBAAiBH,CAAM,GAE/BD,IAAaC;CACf,CAAC,GAEDI,EACGpB,EAAyBqB,UAAQ;EAAA,IAACC,QAAK;GAAA,OAAET,EAAOI;EAAO;EAAA,IAAAM,WAAA;GAAA,IAAAC,IAAAC,EAAA;GAwBrC,OAxBqCC,GAG9CC,MAAO;IACX9B,EAAUgB,EAAOe,gBAAgBD,CAAE,CAAC;GACtC,GAACH,CAAA,GAAAK,EAAAL,GAAAM,EAHGlB,GAAI;IAAA,IAIRH,WAAQ;KAAA,OAAEI,EAAOI,QAAQR,SAAS;IAAC;IAAA,IACnCsB,SAAM;KAAA,OAAE,CAAClB,EAAOI,QAAQe,OAAO;IAAC;IAAA,IAChCC,QAAK;KAAA,OAAE,CAACpB,EAAOI,QAAQe,OAAO;IAAC;IAAAqC,UAAA;IAAA,IAAA,qBAAA;KAAA,OAEbxD,EAAOsB,YAAY;IAAC;IAAA,IAAA,iBAAA;KAAA,OACxBtB,EAAOI,QAAQP,QAAQ,KAAKQ,KAAAA;IAAS;IAAA,IAAA,sBAAA;KAAA,OAChCL,EAAOyB,aAAa;IAAC;IAAA,aAC9B;IAAoB,IAAA,gBAAA;KAAA,OACjBzB,EAAOI,QAAQe,OAAO,IAAI,KAAKd,KAAAA;IAAS;IAAA,IAAA,gBAAA;KAAA,OACxCL,EAAOI,QAAQD,OAAO;IAAC;IAAA,IAAA,iBAAA;KAAA,OACtBH,EAAOI,QAAQP,QAAQ,IAAI,KAAKQ,KAAAA;IAAS;IAAA,IAAA,kBAAA;KAAA,OACxCL,EAAOI,QAAQR,SAAS,IAAI,KAAKS,KAAAA;IAAS;IAAA,IAAAoD,QAAA;KAAA,OAClDvE,EACL,yDACAY,EAAMgC,KACR;IAAC;IAAA,IACDC,YAAS;KAAA,OAAEjC,EAAMiC;IAAS;GAAA,CAAA,GAAA,IAAA,EAAA,GAAAC,EAAArB,SAEzBb,EAAMY,QAAQ,GAAAC;EAAA;CAAA,CAAA;AAIvB"}
@@ -0,0 +1,42 @@
1
+ import { Accessor } from 'solid-js';
2
+ import { QuestionnaireAnswerEntry } from './questionnaire.context';
3
+ import { QuestionnaireItemStatus } from './questionnaire.types';
4
+ export interface AnswerBookkeepingOptions {
5
+ /** 多选:选中集合可以有多项 */
6
+ multiple: Accessor<boolean>;
7
+ /** 必填:必填题不允许跳过 */
8
+ required: Accessor<boolean>;
9
+ }
10
+ export interface AnswerBookkeeping {
11
+ answers: Accessor<QuestionnaireAnswerEntry[]>;
12
+ selections: Accessor<string[]>;
13
+ defaults: Accessor<string[]>;
14
+ touched: Accessor<boolean>;
15
+ /** 每次 reset 自增,供子组件强制同步 DOM */
16
+ resetVersion: Accessor<number>;
17
+ status: Accessor<QuestionnaireItemStatus>;
18
+ /** 已跳过:状态为 skipped 且不是必填 */
19
+ skippable: Accessor<boolean>;
20
+ answeredOk: Accessor<boolean>;
21
+ hasInputAnswer: Accessor<boolean>;
22
+ registerAnswerControl: (entry: QuestionnaireAnswerEntry) => () => void;
23
+ registerAnswerSelection: (id: string, initialSelected: boolean) => () => void;
24
+ setAnswerDefault: (id: string, selected: boolean) => void;
25
+ setAnswerSelectionFromInteraction: (id: string, selected: boolean) => void;
26
+ syncControlledAnswerSelection: (id: string, selected: boolean) => void;
27
+ getAnswerByElement: (target: Element) => QuestionnaireAnswerEntry | null;
28
+ /** 标记已交互(首次校验失败后才显示错误) */
29
+ markTouched: () => void;
30
+ /** 跳过本题目;必填时返回 false 且不改变状态 */
31
+ skip: () => boolean;
32
+ /** 回到默认选择并把 touched/skipped 复位 */
33
+ reset: () => void;
34
+ }
35
+ /**
36
+ * 单个题目的答案账目:注册了哪些答案控件、选中的是哪些、默认值是什么、
37
+ * 是否被跳过/触碰,以及由这些推导出的作答状态。
38
+ *
39
+ * 单一职责:只维护这份账目与它的读写方法,不碰 DOM 焦点、不拼 ARIA 文本、
40
+ * 不决定校验结果——那些是 item 层的事。
41
+ */
42
+ export declare function createAnswerBookkeeping(options: AnswerBookkeepingOptions): AnswerBookkeeping;
@@ -0,0 +1,62 @@
1
+ import { isAnswerDisabled as e } from "./questionnaire.utils.js";
2
+ import { createMemo as t, createSignal as n } from "solid-js";
3
+ //#region src/components/questionnaire/questionnaire.answers.ts
4
+ function r(r) {
5
+ let [i, a] = n([]), [o, s] = n([]), [c, l] = n([]), [u, d] = n(!1), [f, p] = n(!1), [m, h] = n(0), g = (e, t) => {
6
+ s((n) => t ? r.multiple() ? n.includes(e) ? n : [...n, e] : [e] : n.filter((t) => t !== e));
7
+ }, _ = t(() => i().some((e) => e.type === "input" && ![
8
+ "button",
9
+ "checkbox",
10
+ "radio",
11
+ "reset",
12
+ "submit"
13
+ ].includes(e.element.type))), v = t(() => {
14
+ if (u()) return "skipped";
15
+ let t = o();
16
+ return i().some((n) => t.includes(n.id) && !e(n)) ? "answered" : "unanswered";
17
+ });
18
+ return {
19
+ answers: i,
20
+ selections: o,
21
+ defaults: c,
22
+ touched: f,
23
+ resetVersion: m,
24
+ status: v,
25
+ hasInputAnswer: _,
26
+ skippable: t(() => v() === "skipped" && !r.required()),
27
+ answeredOk: t(() => v() === "answered"),
28
+ registerAnswerControl(e) {
29
+ return a((t) => [...t.filter((t) => t.id !== e.id && t.element !== e.element), e]), () => a((t) => t.filter((t) => t !== e));
30
+ },
31
+ registerAnswerSelection(e, t) {
32
+ return t && s((t) => r.multiple() ? t.includes(e) ? t : [...t, e] : t.length ? t : [e]), () => {
33
+ s((t) => t.filter((t) => t !== e)), l((t) => t.filter((t) => t !== e));
34
+ };
35
+ },
36
+ setAnswerDefault(e, t) {
37
+ l((n) => t ? n.includes(e) ? n : [...n, e] : n.filter((t) => t !== e));
38
+ },
39
+ setAnswerSelectionFromInteraction(e, t) {
40
+ d(!1), g(e, t);
41
+ },
42
+ syncControlledAnswerSelection(e, t) {
43
+ g(e, t);
44
+ },
45
+ getAnswerByElement(e) {
46
+ return i().find((t) => t.element === e) ?? null;
47
+ },
48
+ markTouched() {
49
+ p(!0);
50
+ },
51
+ skip() {
52
+ return !r.required() && (s([]), d(!0), !0);
53
+ },
54
+ reset() {
55
+ p(!1), d(!1), s(r.multiple() ? [...c()] : c().slice(0, 1)), h((e) => e + 1);
56
+ }
57
+ };
58
+ }
59
+ //#endregion
60
+ export { r as createAnswerBookkeeping };
61
+
62
+ //# sourceMappingURL=questionnaire.answers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questionnaire.answers.js","names":["createAnswerBookkeeping","answers","setAnswers","createSignal","selections","setSelections","defaults","setDefaults","skipped","setSkipped","touched","setTouched","resetVersion","setResetVersion","applySelection","selected","options","prev","id","value","hasInputAnswer","createMemo","entry","status","isAnswerDisabled","item","initialSelected","target"],"sources":["../../../src/components/questionnaire/questionnaire.answers.ts"],"sourcesContent":["import { createMemo, createSignal, type Accessor } from \"solid-js\";\nimport type { QuestionnaireAnswerEntry } from \"./questionnaire.context\";\nimport type { QuestionnaireItemStatus } from \"./questionnaire.types\";\nimport { isAnswerDisabled } from \"./questionnaire.utils\";\n\nexport interface AnswerBookkeepingOptions {\n /** 多选:选中集合可以有多项 */\n multiple: Accessor<boolean>;\n /** 必填:必填题不允许跳过 */\n required: Accessor<boolean>;\n}\n\nexport interface AnswerBookkeeping {\n answers: Accessor<QuestionnaireAnswerEntry[]>;\n selections: Accessor<string[]>;\n defaults: Accessor<string[]>;\n touched: Accessor<boolean>;\n /** 每次 reset 自增,供子组件强制同步 DOM */\n resetVersion: Accessor<number>;\n status: Accessor<QuestionnaireItemStatus>;\n /** 已跳过:状态为 skipped 且不是必填 */\n skippable: Accessor<boolean>;\n answeredOk: Accessor<boolean>;\n hasInputAnswer: Accessor<boolean>;\n\n registerAnswerControl: (entry: QuestionnaireAnswerEntry) => () => void;\n registerAnswerSelection: (id: string, initialSelected: boolean) => () => void;\n setAnswerDefault: (id: string, selected: boolean) => void;\n setAnswerSelectionFromInteraction: (id: string, selected: boolean) => void;\n syncControlledAnswerSelection: (id: string, selected: boolean) => void;\n getAnswerByElement: (target: Element) => QuestionnaireAnswerEntry | null;\n\n /** 标记已交互(首次校验失败后才显示错误) */\n markTouched: () => void;\n /** 跳过本题目;必填时返回 false 且不改变状态 */\n skip: () => boolean;\n /** 回到默认选择并把 touched/skipped 复位 */\n reset: () => void;\n}\n\n/**\n * 单个题目的答案账目:注册了哪些答案控件、选中的是哪些、默认值是什么、\n * 是否被跳过/触碰,以及由这些推导出的作答状态。\n *\n * 单一职责:只维护这份账目与它的读写方法,不碰 DOM 焦点、不拼 ARIA 文本、\n * 不决定校验结果——那些是 item 层的事。\n */\nexport function createAnswerBookkeeping(\n options: AnswerBookkeepingOptions,\n): AnswerBookkeeping {\n const [answers, setAnswers] = createSignal<QuestionnaireAnswerEntry[]>([]);\n const [selections, setSelections] = createSignal<string[]>([]);\n const [defaults, setDefaults] = createSignal<string[]>([]);\n const [skipped, setSkipped] = createSignal(false);\n const [touched, setTouched] = createSignal(false);\n const [resetVersion, setResetVersion] = createSignal(0);\n\n const applySelection = (id: string, selected: boolean) => {\n setSelections((prev) => {\n if (!selected) return prev.filter((value) => value !== id);\n if (!options.multiple()) return [id];\n return prev.includes(id) ? prev : [...prev, id];\n });\n };\n\n const hasInputAnswer = createMemo(() =>\n answers().some(\n (entry) =>\n entry.type === \"input\" &&\n ![\"button\", \"checkbox\", \"radio\", \"reset\", \"submit\"].includes(\n entry.element.type,\n ),\n ),\n );\n\n const status = createMemo<QuestionnaireItemStatus>(() => {\n if (skipped()) return \"skipped\";\n const selected = selections();\n const answered = answers().some(\n (entry) => selected.includes(entry.id) && !isAnswerDisabled(entry),\n );\n return answered ? \"answered\" : \"unanswered\";\n });\n\n return {\n answers,\n selections,\n defaults,\n touched,\n resetVersion,\n status,\n hasInputAnswer,\n skippable: createMemo(() => status() === \"skipped\" && !options.required()),\n answeredOk: createMemo(() => status() === \"answered\"),\n\n registerAnswerControl(entry) {\n setAnswers((prev) => [\n ...prev.filter(\n (item) => item.id !== entry.id && item.element !== entry.element,\n ),\n entry,\n ]);\n return () => setAnswers((prev) => prev.filter((item) => item !== entry));\n },\n\n registerAnswerSelection(id, initialSelected) {\n if (initialSelected) {\n setSelections((prev) => {\n if (!options.multiple()) return prev.length ? prev : [id];\n return prev.includes(id) ? prev : [...prev, id];\n });\n }\n return () => {\n setSelections((prev) => prev.filter((value) => value !== id));\n setDefaults((prev) => prev.filter((value) => value !== id));\n };\n },\n\n setAnswerDefault(id, selected) {\n setDefaults((prev) => {\n if (!selected) return prev.filter((value) => value !== id);\n return prev.includes(id) ? prev : [...prev, id];\n });\n },\n\n setAnswerSelectionFromInteraction(id, selected) {\n // 用户重新作答即视为取消\"跳过\"\n setSkipped(false);\n applySelection(id, selected);\n },\n\n syncControlledAnswerSelection(id, selected) {\n applySelection(id, selected);\n },\n\n getAnswerByElement(target) {\n return answers().find((entry) => entry.element === target) ?? null;\n },\n\n markTouched() {\n setTouched(true);\n },\n\n skip() {\n if (options.required()) return false;\n setSelections([]);\n setSkipped(true);\n return true;\n },\n\n reset() {\n setTouched(false);\n setSkipped(false);\n setSelections(\n options.multiple() ? [...defaults()] : defaults().slice(0, 1),\n );\n setResetVersion((value) => value + 1);\n },\n };\n}\n"],"mappings":";;;AA+CA,SAAgBA,EACd,GACmB;CACnB,IAAM,CAACC,GAASC,KAAcC,EAAyC,CAAC,CAAC,GACnE,CAACC,GAAYC,KAAiBF,EAAuB,CAAC,CAAC,GACvD,CAACG,GAAUC,KAAeJ,EAAuB,CAAC,CAAC,GACnD,CAACK,GAASC,KAAcN,EAAa,EAAK,GAC1C,CAACO,GAASC,KAAcR,EAAa,EAAK,GAC1C,CAACS,GAAcC,KAAmBV,EAAa,CAAC,GAEhDW,KAAkB,GAAY,MAAsB;EACxD,GAAe,MACRC,IACAC,EAAQ,SAAS,IACfC,EAAK,SAASC,CAAE,IAAID,IAAO,CAAC,GAAGA,GAAMC,CAAE,IADd,CAACA,CAAE,IADbD,EAAK,QAAQ,MAAUE,MAAUD,CAAE,CAG1D;CACH,GAEME,IAAiBC,QACrBpB,EAAQ,CAAC,CAAC,MACP,MACCqB,EAAM,SAAS,WACf,CAAC;EAAC;EAAU;EAAY;EAAS;EAAS;CAAQ,CAAC,CAAC,SAClDA,EAAM,QAAQ,IAChB,CACJ,CACF,GAEMC,IAASF,QAA0C;EACvD,IAAIb,EAAQ,GAAG,OAAO;EACtB,IAAMO,IAAWX,EAAW;EAI5B,OAHiBH,EAAQ,CAAC,CAAC,MACxB,MAAUc,EAAS,SAASO,EAAM,EAAE,KAAK,CAACE,EAAiBF,CAAK,CAE5D,IAAW,aAAa;CACjC,CAAC;CAED,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAWD,QAAiBE,EAAO,MAAM,aAAa,CAACP,EAAQ,SAAS,CAAC;EACzE,YAAYK,QAAiBE,EAAO,MAAM,UAAU;EAEpD,sBAAsB,GAAO;GAO3B,OANArB,GAAY,MAAS,CACnB,GAAGe,EAAK,QACL,MAASQ,EAAK,OAAOH,EAAM,MAAMG,EAAK,YAAYH,EAAM,OAC3D,GACAA,CACF,CAAC,SACYpB,GAAY,MAASe,EAAK,QAAQ,MAASQ,MAASH,CAAK,CAAC;EACzE;EAEA,wBAAwB,GAAI,GAAiB;GAO3C,OANII,KACFrB,GAAe,MACRW,EAAQ,SAAS,IACfC,EAAK,SAASC,CAAE,IAAID,IAAO,CAAC,GAAGA,GAAMC,CAAE,IADdD,EAAK,SAASA,IAAO,CAACC,CAAE,CAEzD,SAEU;IAEX,AADAb,GAAe,MAASY,EAAK,QAAQ,MAAUE,MAAUD,CAAE,CAAC,GAC5DX,GAAa,MAASU,EAAK,QAAQ,MAAUE,MAAUD,CAAE,CAAC;GAC5D;EACF;EAEA,iBAAiB,GAAI,GAAU;GAC7B,GAAa,MACNH,IACEE,EAAK,SAASC,CAAE,IAAID,IAAO,CAAC,GAAGA,GAAMC,CAAE,IADxBD,EAAK,QAAQ,MAAUE,MAAUD,CAAE,CAE1D;EACH;EAEA,kCAAkC,GAAI,GAAU;GAG9C,AADAT,EAAW,EAAK,GAChBK,EAAeI,GAAIH,CAAQ;EAC7B;EAEA,8BAA8B,GAAI,GAAU;GAC1C,EAAeG,GAAIH,CAAQ;EAC7B;EAEA,mBAAmB,GAAQ;GACzB,OAAOd,EAAQ,CAAC,CAAC,MAAM,MAAUqB,EAAM,YAAYK,CAAM,KAAK;EAChE;EAEA,cAAc;GACZ,EAAW,EAAI;EACjB;EAEA,OAAO;GAIL,OAHA,CAAIX,EAAQ,SAAS,MACrBX,EAAc,CAAC,CAAC,GAChBI,EAAW,EAAI,GACR;EACT;EAEA,QAAQ;GAMN,AALAE,EAAW,EAAK,GAChBF,EAAW,EAAK,GAChBJ,EACEW,EAAQ,SAAS,IAAI,CAAC,GAAGV,EAAS,CAAC,IAAIA,EAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAC9D,GACAO,GAAiB,MAAUM,IAAQ,CAAC;EACtC;CACF;AACF"}
@@ -0,0 +1,34 @@
1
+ import { Accessor } from 'solid-js';
2
+ import { QuestionnaireItemStatus } from './questionnaire.types';
3
+ /**
4
+ * 题目 ARIA 文本的组装与 id 登记。
5
+ *
6
+ * 单一职责:只负责"对外描述文字"——`aria-describedby` 的 id 合并、
7
+ * `aria-keyshortcuts` 的按键列表。不持有作答状态,也不决定对错:
8
+ * 是否无效、是否首尾题都由调用方以布尔量传入。
9
+ */
10
+ export interface IdRegistry {
11
+ ids: Accessor<string[]>;
12
+ /** 登记一个 id(重复登记不会加两次),返回注销函数 */
13
+ register: (id: string) => () => void;
14
+ }
15
+ /** 生成 id 集合并提供登记/注销:描述与错误的多个来源各自登记,读取时合并 */
16
+ export declare function createIdRegistry(): IdRegistry;
17
+ /**
18
+ * `aria-describedby`:描述 id 常驻,只有**当前无效**时才附上错误 id,
19
+ * 去重后以空格连接;没有任何 id 时返回 undefined(不输出空属性)。
20
+ */
21
+ export declare function buildDescribedBy(descriptionIds: readonly string[], errorIds: readonly string[], invalid: boolean): string | undefined;
22
+ /**
23
+ * `aria-keyshortcuts`:只在题目处于激活态时给出(键盘操作只作用于当前题)。
24
+ * - 始终可提交(Mod+Enter);
25
+ * - 有答案控件时上下箭头可在答案间移动;
26
+ * - 非首题才提示上一题;非末题且已作答才提示下一题(未作答时右箭头不前进)。
27
+ */
28
+ export declare function buildItemKeyshortcuts(input: {
29
+ active: boolean;
30
+ hasAnswers: boolean;
31
+ first: boolean;
32
+ last: boolean;
33
+ status: QuestionnaireItemStatus;
34
+ }): string | undefined;
@@ -0,0 +1,28 @@
1
+ import { createSignal as e } from "solid-js";
2
+ //#region src/components/questionnaire/questionnaire.aria.ts
3
+ function t() {
4
+ let [t, n] = e([]);
5
+ return {
6
+ ids: t,
7
+ register(e) {
8
+ return n((t) => t.includes(e) ? t : [...t, e]), () => n((t) => t.filter((t) => t !== e));
9
+ }
10
+ };
11
+ }
12
+ function n(e, t, n) {
13
+ let r = [...e, ...n ? t : []];
14
+ return [...new Set(r)].join(" ") || void 0;
15
+ }
16
+ function r(e) {
17
+ let { active: t, hasAnswers: n, first: r, last: i, status: a } = e;
18
+ if (t) return [
19
+ "Meta+Enter Control+Enter",
20
+ n ? "ArrowUp ArrowDown" : null,
21
+ r ? null : "ArrowLeft",
22
+ !i && a !== "unanswered" ? "ArrowRight" : null
23
+ ].filter(Boolean).join(" ");
24
+ }
25
+ //#endregion
26
+ export { n as buildDescribedBy, r as buildItemKeyshortcuts, t as createIdRegistry };
27
+
28
+ //# sourceMappingURL=questionnaire.aria.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questionnaire.aria.js","names":["createIdRegistry","ids","setIds","createSignal","prev","id","value","buildDescribedBy","descriptionIds","invalid","errorIds","buildItemKeyshortcuts","input","active","hasAnswers","first","last","status"],"sources":["../../../src/components/questionnaire/questionnaire.aria.ts"],"sourcesContent":["import { createSignal, type Accessor } from \"solid-js\";\nimport type { QuestionnaireItemStatus } from \"./questionnaire.types\";\n\n/**\n * 题目 ARIA 文本的组装与 id 登记。\n *\n * 单一职责:只负责\"对外描述文字\"——`aria-describedby` 的 id 合并、\n * `aria-keyshortcuts` 的按键列表。不持有作答状态,也不决定对错:\n * 是否无效、是否首尾题都由调用方以布尔量传入。\n */\n\nexport interface IdRegistry {\n ids: Accessor<string[]>;\n /** 登记一个 id(重复登记不会加两次),返回注销函数 */\n register: (id: string) => () => void;\n}\n\n/** 生成 id 集合并提供登记/注销:描述与错误的多个来源各自登记,读取时合并 */\nexport function createIdRegistry(): IdRegistry {\n const [ids, setIds] = createSignal<string[]>([]);\n\n return {\n ids,\n register(id) {\n setIds((prev) => (prev.includes(id) ? prev : [...prev, id]));\n return () => setIds((prev) => prev.filter((value) => value !== id));\n },\n };\n}\n\n/**\n * `aria-describedby`:描述 id 常驻,只有**当前无效**时才附上错误 id,\n * 去重后以空格连接;没有任何 id 时返回 undefined(不输出空属性)。\n */\nexport function buildDescribedBy(\n descriptionIds: readonly string[],\n errorIds: readonly string[],\n invalid: boolean,\n): string | undefined {\n const ids = [...descriptionIds, ...(invalid ? errorIds : [])];\n return [...new Set(ids)].join(\" \") || undefined;\n}\n\n/**\n * `aria-keyshortcuts`:只在题目处于激活态时给出(键盘操作只作用于当前题)。\n * - 始终可提交(Mod+Enter);\n * - 有答案控件时上下箭头可在答案间移动;\n * - 非首题才提示上一题;非末题且已作答才提示下一题(未作答时右箭头不前进)。\n */\nexport function buildItemKeyshortcuts(input: {\n active: boolean;\n hasAnswers: boolean;\n first: boolean;\n last: boolean;\n status: QuestionnaireItemStatus;\n}): string | undefined {\n const { active, hasAnswers, first, last, status } = input;\n if (!active) return undefined;\n\n // 第一项是常量,拼接结果不可能为空串,因此不需要 `|| undefined` 兜底\n return [\n \"Meta+Enter Control+Enter\",\n hasAnswers ? \"ArrowUp ArrowDown\" : null,\n !first ? \"ArrowLeft\" : null,\n !last && status !== \"unanswered\" ? \"ArrowRight\" : null,\n ]\n .filter(Boolean)\n .join(\" \");\n}\n"],"mappings":";;AAkBA,SAAgBA,IAA+B;CAC7C,IAAM,CAACC,GAAKC,KAAUC,EAAuB,CAAC,CAAC;CAE/C,OAAO;EACL;EACA,SAAS,GAAI;GAEX,OADAD,GAAQ,MAAUE,EAAK,SAASC,CAAE,IAAID,IAAO,CAAC,GAAGA,GAAMC,CAAE,CAAE,SAC9CH,GAAQ,MAASE,EAAK,QAAQ,MAAUE,MAAUD,CAAE,CAAC;EACpE;CACF;AACF;AAMA,SAAgBE,EACd,GACA,GACA,GACoB;CACpB,IAAMN,IAAM,CAAC,GAAGO,GAAgB,GAAIC,IAAUC,IAAW,CAAC,CAAE;CAC5D,OAAO,CAAC,GAAG,IAAI,IAAIT,CAAG,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,KAAA;AACxC;AAQA,SAAgBU,EAAsB,GAMf;CACrB,IAAM,EAAE,WAAQ,eAAY,UAAO,SAAM,cAAWC;CACpD,IAAKC,GAGL,OAAO;EACL;EACAC,IAAa,sBAAsB;EAClCC,IAAsB,OAAd;EACT,CAACC,KAAQC,MAAW,eAAe,eAAe;CACpD,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;AACb"}
@@ -0,0 +1,9 @@
1
+ import { Accessor } from 'solid-js';
2
+ /**
3
+ * 监视表单子树里的 DOM 增删,返回一个"每次变化都会自增"的版本号。
4
+ *
5
+ * 单一职责:把结构变化变成一条可被 memo 依赖的响应式边——注册表本身是普通数组,
6
+ * 子节点被移动位置时注册顺序不变,只有 DOM 顺序变了,排序 memo 需要这条边才会重算。
7
+ * 环境不支持 `MutationObserver`(SSR)时不做任何事,版本号恒为 0。
8
+ */
9
+ export declare function createDomVersionWatcher(root: Accessor<Element | undefined>): Accessor<number>;
@@ -0,0 +1,18 @@
1
+ import { createEffect as e, createSignal as t, onCleanup as n } from "solid-js";
2
+ //#region src/components/questionnaire/questionnaire.dom-watch.ts
3
+ function r(r) {
4
+ let [i, a] = t(0);
5
+ return e(() => {
6
+ let e = r();
7
+ if (!e || typeof MutationObserver > "u") return;
8
+ let t = new MutationObserver(() => a((e) => e + 1));
9
+ t.observe(e, {
10
+ childList: !0,
11
+ subtree: !0
12
+ }), a((e) => e + 1), n(() => t.disconnect());
13
+ }), i;
14
+ }
15
+ //#endregion
16
+ export { r as createDomVersionWatcher };
17
+
18
+ //# sourceMappingURL=questionnaire.dom-watch.js.map