@loomui-ng/ui 0.0.0-stage → 0.1.1

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 (270) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +46 -2
  3. package/accordion/README.md +38 -0
  4. package/alert/README.md +32 -0
  5. package/alert-dialog/README.md +37 -0
  6. package/aspect-ratio/README.md +24 -0
  7. package/attachment/README.md +40 -0
  8. package/avatar/README.md +34 -0
  9. package/badge/README.md +29 -0
  10. package/breadcrumb/README.md +33 -0
  11. package/bubble/README.md +32 -0
  12. package/button/README.md +31 -0
  13. package/button-group/README.md +30 -0
  14. package/calendar/README.md +35 -0
  15. package/card/README.md +41 -0
  16. package/carousel/README.md +41 -0
  17. package/chart/README.md +25 -0
  18. package/checkbox/README.md +31 -0
  19. package/collapsible/README.md +31 -0
  20. package/combobox/README.md +47 -0
  21. package/command/README.md +44 -0
  22. package/context-menu/README.md +36 -0
  23. package/data-table/README.md +39 -0
  24. package/date-picker/README.md +23 -0
  25. package/dialog/README.md +52 -0
  26. package/direction/README.md +19 -0
  27. package/drawer/README.md +37 -0
  28. package/dropdown-menu/README.md +46 -0
  29. package/empty/README.md +38 -0
  30. package/fesm2022/loomui-ng-ui-accordion.mjs +555 -0
  31. package/fesm2022/loomui-ng-ui-accordion.mjs.map +1 -0
  32. package/fesm2022/loomui-ng-ui-alert-dialog.mjs +652 -0
  33. package/fesm2022/loomui-ng-ui-alert-dialog.mjs.map +1 -0
  34. package/fesm2022/loomui-ng-ui-alert.mjs +286 -0
  35. package/fesm2022/loomui-ng-ui-alert.mjs.map +1 -0
  36. package/fesm2022/loomui-ng-ui-aspect-ratio.mjs +97 -0
  37. package/fesm2022/loomui-ng-ui-aspect-ratio.mjs.map +1 -0
  38. package/fesm2022/loomui-ng-ui-attachment.mjs +713 -0
  39. package/fesm2022/loomui-ng-ui-attachment.mjs.map +1 -0
  40. package/fesm2022/loomui-ng-ui-avatar.mjs +561 -0
  41. package/fesm2022/loomui-ng-ui-avatar.mjs.map +1 -0
  42. package/fesm2022/loomui-ng-ui-badge.mjs +102 -0
  43. package/fesm2022/loomui-ng-ui-badge.mjs.map +1 -0
  44. package/fesm2022/loomui-ng-ui-breadcrumb.mjs +520 -0
  45. package/fesm2022/loomui-ng-ui-breadcrumb.mjs.map +1 -0
  46. package/fesm2022/loomui-ng-ui-bubble.mjs +386 -0
  47. package/fesm2022/loomui-ng-ui-bubble.mjs.map +1 -0
  48. package/fesm2022/loomui-ng-ui-button-group.mjs +193 -0
  49. package/fesm2022/loomui-ng-ui-button-group.mjs.map +1 -0
  50. package/fesm2022/loomui-ng-ui-button.mjs +162 -0
  51. package/fesm2022/loomui-ng-ui-button.mjs.map +1 -0
  52. package/fesm2022/loomui-ng-ui-calendar.mjs +681 -0
  53. package/fesm2022/loomui-ng-ui-calendar.mjs.map +1 -0
  54. package/fesm2022/loomui-ng-ui-card.mjs +461 -0
  55. package/fesm2022/loomui-ng-ui-card.mjs.map +1 -0
  56. package/fesm2022/loomui-ng-ui-carousel.mjs +532 -0
  57. package/fesm2022/loomui-ng-ui-carousel.mjs.map +1 -0
  58. package/fesm2022/loomui-ng-ui-chart.mjs +373 -0
  59. package/fesm2022/loomui-ng-ui-chart.mjs.map +1 -0
  60. package/fesm2022/loomui-ng-ui-checkbox.mjs +265 -0
  61. package/fesm2022/loomui-ng-ui-checkbox.mjs.map +1 -0
  62. package/fesm2022/loomui-ng-ui-collapsible.mjs +274 -0
  63. package/fesm2022/loomui-ng-ui-collapsible.mjs.map +1 -0
  64. package/fesm2022/loomui-ng-ui-combobox.mjs +971 -0
  65. package/fesm2022/loomui-ng-ui-combobox.mjs.map +1 -0
  66. package/fesm2022/loomui-ng-ui-command.mjs +982 -0
  67. package/fesm2022/loomui-ng-ui-command.mjs.map +1 -0
  68. package/fesm2022/loomui-ng-ui-context-menu.mjs +1359 -0
  69. package/fesm2022/loomui-ng-ui-context-menu.mjs.map +1 -0
  70. package/fesm2022/loomui-ng-ui-data-table.mjs +535 -0
  71. package/fesm2022/loomui-ng-ui-data-table.mjs.map +1 -0
  72. package/fesm2022/loomui-ng-ui-date-picker.mjs +312 -0
  73. package/fesm2022/loomui-ng-ui-date-picker.mjs.map +1 -0
  74. package/fesm2022/loomui-ng-ui-dialog.mjs +508 -0
  75. package/fesm2022/loomui-ng-ui-dialog.mjs.map +1 -0
  76. package/fesm2022/loomui-ng-ui-direction.mjs +112 -0
  77. package/fesm2022/loomui-ng-ui-direction.mjs.map +1 -0
  78. package/fesm2022/loomui-ng-ui-drawer.mjs +590 -0
  79. package/fesm2022/loomui-ng-ui-drawer.mjs.map +1 -0
  80. package/fesm2022/loomui-ng-ui-dropdown-menu.mjs +1322 -0
  81. package/fesm2022/loomui-ng-ui-dropdown-menu.mjs.map +1 -0
  82. package/fesm2022/loomui-ng-ui-empty.mjs +408 -0
  83. package/fesm2022/loomui-ng-ui-empty.mjs.map +1 -0
  84. package/fesm2022/loomui-ng-ui-field.mjs +630 -0
  85. package/fesm2022/loomui-ng-ui-field.mjs.map +1 -0
  86. package/fesm2022/loomui-ng-ui-hover-card.mjs +230 -0
  87. package/fesm2022/loomui-ng-ui-hover-card.mjs.map +1 -0
  88. package/fesm2022/loomui-ng-ui-icon.mjs +498 -0
  89. package/fesm2022/loomui-ng-ui-icon.mjs.map +1 -0
  90. package/fesm2022/loomui-ng-ui-input-group.mjs +463 -0
  91. package/fesm2022/loomui-ng-ui-input-group.mjs.map +1 -0
  92. package/fesm2022/loomui-ng-ui-input-otp.mjs +586 -0
  93. package/fesm2022/loomui-ng-ui-input-otp.mjs.map +1 -0
  94. package/fesm2022/loomui-ng-ui-input.mjs +289 -0
  95. package/fesm2022/loomui-ng-ui-input.mjs.map +1 -0
  96. package/fesm2022/loomui-ng-ui-item.mjs +598 -0
  97. package/fesm2022/loomui-ng-ui-item.mjs.map +1 -0
  98. package/fesm2022/loomui-ng-ui-kbd.mjs +129 -0
  99. package/fesm2022/loomui-ng-ui-kbd.mjs.map +1 -0
  100. package/fesm2022/loomui-ng-ui-label.mjs +68 -0
  101. package/fesm2022/loomui-ng-ui-label.mjs.map +1 -0
  102. package/fesm2022/loomui-ng-ui-marker.mjs +234 -0
  103. package/fesm2022/loomui-ng-ui-marker.mjs.map +1 -0
  104. package/fesm2022/loomui-ng-ui-menubar.mjs +1523 -0
  105. package/fesm2022/loomui-ng-ui-menubar.mjs.map +1 -0
  106. package/fesm2022/loomui-ng-ui-message-scroller.mjs +519 -0
  107. package/fesm2022/loomui-ng-ui-message-scroller.mjs.map +1 -0
  108. package/fesm2022/loomui-ng-ui-message.mjs +408 -0
  109. package/fesm2022/loomui-ng-ui-message.mjs.map +1 -0
  110. package/fesm2022/loomui-ng-ui-native-select.mjs +389 -0
  111. package/fesm2022/loomui-ng-ui-native-select.mjs.map +1 -0
  112. package/fesm2022/loomui-ng-ui-navigation-menu.mjs +609 -0
  113. package/fesm2022/loomui-ng-ui-navigation-menu.mjs.map +1 -0
  114. package/fesm2022/loomui-ng-ui-pagination.mjs +611 -0
  115. package/fesm2022/loomui-ng-ui-pagination.mjs.map +1 -0
  116. package/fesm2022/loomui-ng-ui-popover.mjs +358 -0
  117. package/fesm2022/loomui-ng-ui-popover.mjs.map +1 -0
  118. package/fesm2022/loomui-ng-ui-progress.mjs +159 -0
  119. package/fesm2022/loomui-ng-ui-progress.mjs.map +1 -0
  120. package/fesm2022/loomui-ng-ui-questionnaire.mjs +1012 -0
  121. package/fesm2022/loomui-ng-ui-questionnaire.mjs.map +1 -0
  122. package/fesm2022/loomui-ng-ui-radio-group.mjs +399 -0
  123. package/fesm2022/loomui-ng-ui-radio-group.mjs.map +1 -0
  124. package/fesm2022/loomui-ng-ui-resizable.mjs +518 -0
  125. package/fesm2022/loomui-ng-ui-resizable.mjs.map +1 -0
  126. package/fesm2022/loomui-ng-ui-scroll-area.mjs +135 -0
  127. package/fesm2022/loomui-ng-ui-scroll-area.mjs.map +1 -0
  128. package/fesm2022/loomui-ng-ui-select.mjs +863 -0
  129. package/fesm2022/loomui-ng-ui-select.mjs.map +1 -0
  130. package/fesm2022/loomui-ng-ui-separator.mjs +114 -0
  131. package/fesm2022/loomui-ng-ui-separator.mjs.map +1 -0
  132. package/fesm2022/loomui-ng-ui-sheet.mjs +530 -0
  133. package/fesm2022/loomui-ng-ui-sheet.mjs.map +1 -0
  134. package/fesm2022/loomui-ng-ui-sidebar.mjs +1918 -0
  135. package/fesm2022/loomui-ng-ui-sidebar.mjs.map +1 -0
  136. package/fesm2022/loomui-ng-ui-skeleton.mjs +69 -0
  137. package/fesm2022/loomui-ng-ui-skeleton.mjs.map +1 -0
  138. package/fesm2022/loomui-ng-ui-slider.mjs +390 -0
  139. package/fesm2022/loomui-ng-ui-slider.mjs.map +1 -0
  140. package/fesm2022/loomui-ng-ui-spinner.mjs +85 -0
  141. package/fesm2022/loomui-ng-ui-spinner.mjs.map +1 -0
  142. package/fesm2022/loomui-ng-ui-switch.mjs +212 -0
  143. package/fesm2022/loomui-ng-ui-switch.mjs.map +1 -0
  144. package/fesm2022/loomui-ng-ui-table.mjs +559 -0
  145. package/fesm2022/loomui-ng-ui-table.mjs.map +1 -0
  146. package/fesm2022/loomui-ng-ui-tabs.mjs +544 -0
  147. package/fesm2022/loomui-ng-ui-tabs.mjs.map +1 -0
  148. package/fesm2022/loomui-ng-ui-textarea.mjs +206 -0
  149. package/fesm2022/loomui-ng-ui-textarea.mjs.map +1 -0
  150. package/fesm2022/loomui-ng-ui-toast.mjs +432 -0
  151. package/fesm2022/loomui-ng-ui-toast.mjs.map +1 -0
  152. package/fesm2022/loomui-ng-ui-toggle-group.mjs +477 -0
  153. package/fesm2022/loomui-ng-ui-toggle-group.mjs.map +1 -0
  154. package/fesm2022/loomui-ng-ui-toggle.mjs +219 -0
  155. package/fesm2022/loomui-ng-ui-toggle.mjs.map +1 -0
  156. package/fesm2022/loomui-ng-ui-tooltip.mjs +240 -0
  157. package/fesm2022/loomui-ng-ui-tooltip.mjs.map +1 -0
  158. package/fesm2022/loomui-ng-ui-typography.mjs +129 -0
  159. package/fesm2022/loomui-ng-ui-typography.mjs.map +1 -0
  160. package/fesm2022/loomui-ng-ui-utils.mjs +1533 -0
  161. package/fesm2022/loomui-ng-ui-utils.mjs.map +1 -0
  162. package/fesm2022/loomui-ng-ui.mjs +4 -0
  163. package/fesm2022/loomui-ng-ui.mjs.map +1 -0
  164. package/field/README.md +43 -0
  165. package/hover-card/README.md +31 -0
  166. package/icon/README.md +42 -0
  167. package/input/README.md +26 -0
  168. package/input-group/README.md +40 -0
  169. package/input-otp/README.md +35 -0
  170. package/item/README.md +33 -0
  171. package/kbd/README.md +21 -0
  172. package/label/README.md +24 -0
  173. package/marker/README.md +24 -0
  174. package/menubar/README.md +40 -0
  175. package/message/README.md +32 -0
  176. package/message-scroller/README.md +40 -0
  177. package/native-select/README.md +26 -0
  178. package/navigation-menu/README.md +39 -0
  179. package/package.json +325 -3
  180. package/pagination/README.md +37 -0
  181. package/popover/README.md +37 -0
  182. package/progress/README.md +25 -0
  183. package/questionnaire/README.md +52 -0
  184. package/radio-group/README.md +33 -0
  185. package/resizable/README.md +37 -0
  186. package/scroll-area/README.md +25 -0
  187. package/select/README.md +45 -0
  188. package/separator/README.md +28 -0
  189. package/sheet/README.md +38 -0
  190. package/sidebar/README.md +60 -0
  191. package/skeleton/README.md +21 -0
  192. package/slider/README.md +29 -0
  193. package/spinner/README.md +15 -0
  194. package/styles/loomui.css +330 -0
  195. package/switch/README.md +29 -0
  196. package/table/README.md +31 -0
  197. package/tabs/README.md +42 -0
  198. package/textarea/README.md +28 -0
  199. package/toast/README.md +27 -0
  200. package/toggle/README.md +27 -0
  201. package/toggle-group/README.md +37 -0
  202. package/tooltip/README.md +31 -0
  203. package/types/loomui-ng-ui-accordion.d.ts +141 -0
  204. package/types/loomui-ng-ui-alert-dialog.d.ts +175 -0
  205. package/types/loomui-ng-ui-alert.d.ts +77 -0
  206. package/types/loomui-ng-ui-aspect-ratio.d.ts +31 -0
  207. package/types/loomui-ng-ui-attachment.d.ts +192 -0
  208. package/types/loomui-ng-ui-avatar.d.ts +147 -0
  209. package/types/loomui-ng-ui-badge.d.ts +32 -0
  210. package/types/loomui-ng-ui-breadcrumb.d.ts +118 -0
  211. package/types/loomui-ng-ui-bubble.d.ts +100 -0
  212. package/types/loomui-ng-ui-button-group.d.ts +51 -0
  213. package/types/loomui-ng-ui-button.d.ts +57 -0
  214. package/types/loomui-ng-ui-calendar.d.ts +171 -0
  215. package/types/loomui-ng-ui-card.d.ts +123 -0
  216. package/types/loomui-ng-ui-carousel.d.ts +140 -0
  217. package/types/loomui-ng-ui-chart.d.ts +95 -0
  218. package/types/loomui-ng-ui-checkbox.d.ts +62 -0
  219. package/types/loomui-ng-ui-collapsible.d.ts +74 -0
  220. package/types/loomui-ng-ui-combobox.d.ts +229 -0
  221. package/types/loomui-ng-ui-command.d.ts +231 -0
  222. package/types/loomui-ng-ui-context-menu.d.ts +288 -0
  223. package/types/loomui-ng-ui-data-table.d.ts +111 -0
  224. package/types/loomui-ng-ui-date-picker.d.ts +63 -0
  225. package/types/loomui-ng-ui-dialog.d.ts +127 -0
  226. package/types/loomui-ng-ui-direction.d.ts +42 -0
  227. package/types/loomui-ng-ui-drawer.d.ts +149 -0
  228. package/types/loomui-ng-ui-dropdown-menu.d.ts +258 -0
  229. package/types/loomui-ng-ui-empty.d.ts +109 -0
  230. package/types/loomui-ng-ui-field.d.ts +169 -0
  231. package/types/loomui-ng-ui-hover-card.d.ts +62 -0
  232. package/types/loomui-ng-ui-icon.d.ts +156 -0
  233. package/types/loomui-ng-ui-input-group.d.ts +130 -0
  234. package/types/loomui-ng-ui-input-otp.d.ts +149 -0
  235. package/types/loomui-ng-ui-input.d.ts +89 -0
  236. package/types/loomui-ng-ui-item.d.ts +157 -0
  237. package/types/loomui-ng-ui-kbd.d.ts +36 -0
  238. package/types/loomui-ng-ui-label.d.ts +19 -0
  239. package/types/loomui-ng-ui-marker.d.ts +61 -0
  240. package/types/loomui-ng-ui-menubar.d.ts +321 -0
  241. package/types/loomui-ng-ui-message-scroller.d.ts +138 -0
  242. package/types/loomui-ng-ui-message.d.ts +109 -0
  243. package/types/loomui-ng-ui-native-select.d.ts +84 -0
  244. package/types/loomui-ng-ui-navigation-menu.d.ts +160 -0
  245. package/types/loomui-ng-ui-pagination.d.ts +130 -0
  246. package/types/loomui-ng-ui-popover.d.ts +90 -0
  247. package/types/loomui-ng-ui-progress.d.ts +39 -0
  248. package/types/loomui-ng-ui-questionnaire.d.ts +274 -0
  249. package/types/loomui-ng-ui-radio-group.d.ts +109 -0
  250. package/types/loomui-ng-ui-resizable.d.ts +121 -0
  251. package/types/loomui-ng-ui-scroll-area.d.ts +44 -0
  252. package/types/loomui-ng-ui-select.d.ts +204 -0
  253. package/types/loomui-ng-ui-separator.d.ts +35 -0
  254. package/types/loomui-ng-ui-sheet.d.ts +124 -0
  255. package/types/loomui-ng-ui-sidebar.d.ts +485 -0
  256. package/types/loomui-ng-ui-skeleton.d.ts +20 -0
  257. package/types/loomui-ng-ui-slider.d.ts +103 -0
  258. package/types/loomui-ng-ui-spinner.d.ts +19 -0
  259. package/types/loomui-ng-ui-switch.d.ts +56 -0
  260. package/types/loomui-ng-ui-table.d.ts +148 -0
  261. package/types/loomui-ng-ui-tabs.d.ts +148 -0
  262. package/types/loomui-ng-ui-textarea.d.ts +52 -0
  263. package/types/loomui-ng-ui-toast.d.ts +97 -0
  264. package/types/loomui-ng-ui-toggle-group.d.ts +138 -0
  265. package/types/loomui-ng-ui-toggle.d.ts +63 -0
  266. package/types/loomui-ng-ui-tooltip.d.ts +63 -0
  267. package/types/loomui-ng-ui-typography.d.ts +42 -0
  268. package/types/loomui-ng-ui-utils.d.ts +392 -0
  269. package/types/loomui-ng-ui.d.ts +5 -0
  270. package/typography/README.md +29 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loomui-ng-ui-questionnaire.mjs","names":[],"sources":["../../../libs/ui/questionnaire/questionnaire.ts","../../../libs/ui/questionnaire/questionnaire.manual.ts"],"sourcesContent":["// GENERATED by tools/gen-ui.mjs from docs/evidence/slots/questionnaire.json.\n// Change tools/ui-specs.mjs and regenerate; hand-written parts live in ./questionnaire.manual.ts.\nimport { Directive, computed, input } from '@angular/core';\nimport { cn } from '@loomui-ng/ui/utils';\n\nexport const questionnaireClass =\n 'flex w-full min-w-0 flex-col gap-4 mx-auto max-w-md mt-auto';\n\nexport const questionnaireProgressClass =\n 'min-h-[1lh] w-fit min-w-[14ch] text-xs font-medium text-muted-foreground tabular-nums';\n\nexport const questionnaireItemClass =\n 'flex min-w-0 flex-col gap-4 border-0 p-0 outline-none data-active:animate-in data-active:fade-in-0 data-active:slide-in-from-bottom-2 data-active:duration-300 motion-reduce:animate-none';\n\nexport const questionnaireTitleClass =\n 'cn-font-heading text-base leading-snug font-medium text-pretty [&:not(:has(~[data-slot=questionnaire-description]))]:mb-4 group-data-[size=sm]/card:text-sm';\n\nexport const questionnaireDescriptionClass =\n 'text-sm text-pretty text-muted-foreground';\n\nexport const questionnaireChoicesClass =\n 'group/questionnaire-choices grid min-w-0 gap-2';\n\nexport const questionnaireChoiceClass =\n 'group/questionnaire-choice relative flex min-h-11 cursor-pointer items-start gap-2.5 rounded-lg border border-input bg-transparent px-3 py-2.5 text-start text-sm transition-colors outline-none select-none hover:bg-muted/50 has-[>input:focus-visible]:border-ring has-[>input:focus-visible]:ring-3 has-[>input:focus-visible]:ring-ring/50 data-invalid:border-destructive dark:bg-input/20 data-checked:border-primary/40 data-checked:bg-muted dark:data-checked:bg-muted data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50';\n\nexport const questionnaireChoiceInputClass =\n 'absolute inset-0 z-10 size-full cursor-pointer opacity-0';\n\nexport const questionnaireChoiceIndicatorClass =\n 'pointer-events-none relative flex size-4 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-[4px] border border-input group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[type=radio]/questionnaire-choice:rounded-full group-data-checked/questionnaire-choice:border-primary group-data-checked/questionnaire-choice:bg-primary group-data-checked/questionnaire-choice:text-primary-foreground dark:bg-input/30 dark:group-data-checked/questionnaire-choice:bg-primary';\n\nexport const questionnaireChoiceIndicatorDotClass =\n 'hidden size-2 rounded-full bg-primary-foreground group-data-[type=checkbox]/questionnaire-choice:hidden group-data-checked/questionnaire-choice:block';\n\nexport const questionnaireChoiceLabelClass =\n 'flex min-w-0 flex-1 flex-col gap-0.5 leading-snug';\n\nexport const questionnaireChoiceShortcutClass =\n 'pointer-events-none ms-auto hidden size-5 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-md border border-input bg-background font-mono text-[0.625rem] leading-none font-medium text-muted-foreground group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[shortcut]/questionnaire-choice:inline-flex';\n\nexport const questionnaireInputWrapperClass =\n 'group/questionnaire-input relative w-full min-w-0';\n\nexport const questionnaireInputClass =\n 'h-8 min-h-11 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-[color,box-shadow,background-color] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 sm:min-h-0 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground';\n\nexport const questionnaireErrorClass =\n 'mt-2 text-sm text-destructive';\n\nexport const questionnaireActionsClass =\n 'grid min-h-11 w-full grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-2 sm:min-h-8';\n\nexport const UI_QUESTIONNAIRE_GENERATED = [] as const;\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n Directive,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { cn } from '@loomui-ng/ui/utils';\nimport {\n questionnaireActionsClass,\n questionnaireChoiceClass,\n questionnaireChoiceIndicatorClass,\n questionnaireChoiceIndicatorDotClass,\n questionnaireChoiceInputClass,\n questionnaireChoiceLabelClass,\n questionnaireChoiceShortcutClass,\n questionnaireChoicesClass,\n questionnaireClass,\n questionnaireDescriptionClass,\n questionnaireErrorClass,\n questionnaireInputClass,\n questionnaireInputWrapperClass,\n questionnaireItemClass,\n questionnaireProgressClass,\n questionnaireTitleClass,\n} from './questionnaire';\nimport { UiIconSvg } from '@loomui-ng/ui/icon';\nimport { UiElementHost } from '@loomui-ng/ui/utils';\n\nlet uid = 0;\n\n/**\n * Step-by-step form. Observed root: <form novalidate data-current data-total data-first data-last data-shortcuts>;\n * one <fieldset> per question (hidden + inert unless active) with data-status/required/multiple.\n *\n * <form uiQuestionnaire #q=\"uiQuestionnaire\" (submitted)=\"save($event)\">\n * <div uiQuestionnaireProgress></div>\n * <fieldset uiQuestionnaireItem name=\"plan\" required>\n * <legend uiQuestionnaireTitle>Pick a plan</legend>\n * <div uiQuestionnaireChoices>\n * <label uiQuestionnaireChoice value=\"free\">Free</label>\n * </div>\n * </fieldset>\n * <div uiQuestionnaireActions>…buttons call q.previous() / q.next() / q.submit()…</div>\n * </form>\n *\n * Keys (observed in the docs; wiring is own reconstruction): letter/number shortcuts pick a choice, Enter = next,\n * Ctrl/Cmd+Enter = submit. UNKNOWN: ArrowUp/Down inside choices relies on native radio-group behavior only.\n */\n@Component({\n selector: 'form[uiQuestionnaire], ui-questionnaire', hostDirectives: [UiElementHost],\n exportAs: 'uiQuestionnaire',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n novalidate: '',\n 'data-slot': 'questionnaire',\n '[attr.data-current]': 'current()',\n '[attr.data-total]': 'total()',\n '[attr.data-first]': 'isFirst()',\n '[attr.data-last]': 'isLast()',\n '[attr.data-shortcuts]': 'shortcuts()',\n '[attr.class]': 'classes()',\n '(keydown)': 'onKey($event)',\n '(submit)': '$event.preventDefault(); submit()',\n },\n template: `<ng-content />`,\n})\nexport class UiQuestionnaire {\n readonly items = contentChildren(forwardRef(() => UiQuestionnaireItem), { descendants: true });\n readonly current = model(0);\n readonly shortcuts = input(true, { transform: booleanAttribute });\n readonly userClass = input<string>('', { alias: 'class' });\n /** Emits { [itemName]: string | string[] } after every required question validated. */\n readonly submitted = output<Record<string, string | string[]>>();\n\n readonly total = computed(() => this.items().length);\n readonly isFirst = computed(() => this.current() <= 0);\n readonly isLast = computed(() => this.current() >= this.total() - 1);\n protected readonly classes = computed(() => cn(questionnaireClass, this.userClass()));\n\n readonly activeItem = computed(() => this.items()[this.current()]);\n\n previous(): void {\n if (this.current() > 0) this.current.update((c) => c - 1);\n }\n\n /** Validates the active question first (when required); `skip` bypasses it for optional questions. */\n next(): void {\n const item = this.activeItem();\n if (!item || !item.validate()) return;\n if (!this.isLast()) this.current.update((c) => c + 1);\n }\n\n skip(): void {\n if (!this.isLast()) this.current.update((c) => c + 1);\n }\n\n submit(): void {\n const items = this.items();\n for (let i = 0; i < items.length; i++) {\n if (!items[i].validate()) {\n this.current.set(i);\n return;\n }\n }\n const result: Record<string, string | string[]> = {};\n for (const it of items) result[it.name() || it.id] = it.multiple() ? it.values() : (it.values()[0] ?? it.text());\n this.submitted.emit(result);\n }\n\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n protected onKey(e: KeyboardEvent): void {\n const t = e.target as HTMLElement;\n if (this.shortcuts() && !e.ctrlKey && !e.metaKey && !e.altKey && /^[a-z0-9]$/i.test(e.key) && !(t instanceof HTMLInputElement && t.type === 'text') && t.tagName !== 'TEXTAREA') {\n const choice = this.el.querySelector<HTMLInputElement>(`[data-slot=questionnaire-item]:not([hidden]) [data-shortcut=\"${e.key.toUpperCase()}\"] input`);\n if (choice) {\n e.preventDefault();\n choice.click();\n return;\n }\n }\n if (e.key !== 'Enter' || e.isComposing) return;\n if (t.tagName === 'BUTTON' || t.tagName === 'TEXTAREA') return;\n e.preventDefault();\n if (e.ctrlKey || e.metaKey) this.submit();\n else if (this.isLast()) this.submit();\n else this.next();\n }\n}\n\n@Directive({\n selector: 'div[uiQuestionnaireProgress], ui-questionnaire-progress', hostDirectives: [UiElementHost],\n host: {\n role: 'progressbar',\n 'aria-valuemin': '1',\n '[attr.aria-valuemax]': 'root.total()',\n '[attr.aria-valuenow]': 'root.current() + 1',\n '[attr.aria-valuetext]': '\"Question \" + (root.current() + 1) + \" of \" + root.total()',\n 'data-slot': 'questionnaire-progress',\n '[attr.class]': 'classes()',\n '[textContent]': '\"Question \" + (root.current() + 1) + \" of \" + root.total()',\n },\n})\nexport class UiQuestionnaireProgress {\n protected readonly root = inject(UiQuestionnaire);\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn(questionnaireProgressClass, this.userClass()));\n}\n\n@Component({\n selector: 'fieldset[uiQuestionnaireItem], ui-questionnaire-item', hostDirectives: [UiElementHost],\n exportAs: 'uiQuestionnaireItem',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'data-slot': 'questionnaire-item',\n '[attr.data-active]': 'active() ? \"\" : null',\n '[attr.data-status]': 'status()',\n '[attr.data-required]': 'required()',\n '[attr.data-multiple]': 'multiple()',\n '[attr.hidden]': 'active() ? null : \"\"',\n '[attr.inert]': 'active() ? null : \"\"',\n '[attr.class]': 'classes()',\n },\n template: `<ng-content />\n @if (error()) {\n <p data-slot=\"questionnaire-error\" role=\"alert\" [class]=\"errorClass\">{{ error() }}</p>\n }`,\n})\nexport class UiQuestionnaireItem {\n private readonly root = inject(UiQuestionnaire);\n readonly id = `uiq-${++uid}`;\n readonly name = input<string>('');\n readonly required = input(false, { transform: booleanAttribute });\n readonly multiple = input(false, { transform: booleanAttribute });\n readonly userClass = input<string>('', { alias: 'class' });\n\n readonly values = signal<string[]>([]);\n readonly text = signal('');\n readonly error = signal('');\n protected readonly errorClass = questionnaireErrorClass;\n\n readonly index = computed(() => this.root.items().indexOf(this));\n readonly active = computed(() => this.index() === this.root.current());\n readonly answered = computed(() => this.values().length > 0 || this.text().trim().length > 0);\n readonly status = computed(() => (this.error() ? 'invalid' : this.answered() ? 'answered' : 'pending'));\n protected readonly classes = computed(() => cn(questionnaireItemClass, this.userClass()));\n\n toggle(value: string): void {\n this.error.set('');\n if (this.multiple()) this.values.update((v) => (v.includes(value) ? v.filter((x) => x !== value) : [...v, value]));\n else this.values.set([value]);\n }\n\n validate(): boolean {\n if (this.required() && !this.answered()) {\n this.error.set('This question is required.');\n return false;\n }\n this.error.set('');\n return true;\n }\n}\n\n@Directive({\n selector: 'legend[uiQuestionnaireTitle], ui-questionnaire-title', hostDirectives: [UiElementHost],\n host: { 'data-slot': 'questionnaire-title', '[attr.class]': 'classes()' },\n})\nexport class UiQuestionnaireTitle {\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn(questionnaireTitleClass, this.userClass()));\n}\n\n@Directive({\n selector: 'p[uiQuestionnaireDescription], ui-questionnaire-description', hostDirectives: [UiElementHost],\n host: { 'data-slot': 'questionnaire-description', '[attr.class]': 'classes()' },\n})\nexport class UiQuestionnaireDescription {\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn(questionnaireDescriptionClass, this.userClass()));\n}\n\n@Directive({\n selector: 'div[uiQuestionnaireChoices], ui-questionnaire-choices', hostDirectives: [UiElementHost],\n host: { 'data-slot': 'questionnaire-choices', '[attr.class]': 'classes()' },\n})\nexport class UiQuestionnaireChoices {\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn(questionnaireChoicesClass, this.userClass()));\n}\n\n/** One option; projected content becomes the label. `shortcut` defaults to the 1-based position within its question. */\n@Component({\n selector: 'label[uiQuestionnaireChoice], ui-questionnaire-choice', hostDirectives: [UiElementHost],\n imports: [UiIconSvg],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'data-slot': 'questionnaire-choice',\n '[attr.data-shortcut]': 'shortcutKey()',\n '[attr.data-type]': 'item.multiple() ? \"checkbox\" : \"radio\"',\n '[attr.data-checked]': 'checked() ? \"\" : null',\n '[attr.class]': 'classes()',\n },\n template: `\n <input\n [class]=\"inputClass\"\n data-slot=\"questionnaire-choice-input\"\n [type]=\"item.multiple() ? 'checkbox' : 'radio'\"\n [name]=\"item.name() || item.id\"\n [value]=\"value()\"\n [checked]=\"checked()\"\n (change)=\"item.toggle(value())\"\n />\n <span [class]=\"indicatorClass\" data-slot=\"questionnaire-choice-indicator\" aria-hidden=\"true\">\n @if (item.multiple()) {\n @if (checked()) {\n <svg uiIcon=\"check\" class=\"size-3\" strokeWidth=\"3\"></svg>\n }\n } @else {\n <span [class]=\"dotClass\"></span>\n }\n </span>\n <span [class]=\"labelClass\" data-slot=\"questionnaire-choice-label\"><ng-content /></span>\n @if (root.shortcuts()) {\n <kbd [class]=\"shortcutClass\" data-slot=\"questionnaire-choice-shortcut\" aria-hidden=\"true\">{{ shortcutKey() }}</kbd>\n }\n `,\n styles: [\n `\n :host:has(input:checked) [data-slot='questionnaire-choice-indicator'] {\n background: var(--primary);\n border-color: var(--primary);\n color: var(--primary-foreground);\n }\n `,\n ],\n})\nexport class UiQuestionnaireChoice {\n protected readonly item = inject(UiQuestionnaireItem);\n protected readonly root = inject(UiQuestionnaire);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n readonly value = input.required<string>();\n readonly shortcut = input<string>('');\n readonly userClass = input<string>('', { alias: 'class' });\n\n protected readonly checked = computed(() => this.item.values().includes(this.value()));\n protected readonly shortcutKey = computed(() => {\n if (this.shortcut()) return this.shortcut().toUpperCase();\n const siblings = Array.from(this.el.parentElement?.querySelectorAll('[data-slot=questionnaire-choice]') ?? []);\n return String(siblings.indexOf(this.el) + 1);\n });\n protected readonly classes = computed(() => cn(questionnaireChoiceClass, this.userClass()));\n protected readonly inputClass = questionnaireChoiceInputClass;\n protected readonly indicatorClass = questionnaireChoiceIndicatorClass;\n protected readonly dotClass = questionnaireChoiceIndicatorDotClass;\n protected readonly labelClass = questionnaireChoiceLabelClass;\n protected readonly shortcutClass = cn(questionnaireChoiceShortcutClass, 'sm:inline-flex');\n}\n\n/** Free-text answer. */\n@Component({\n selector: 'div[uiQuestionnaireInput], ui-questionnaire-input', hostDirectives: [UiElementHost],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { 'data-slot': 'questionnaire-input-wrapper', '[attr.class]': 'classes()' },\n template: `<input\n data-slot=\"questionnaire-input\"\n type=\"text\"\n [class]=\"inputClass\"\n [placeholder]=\"placeholder()\"\n [value]=\"item.text()\"\n [attr.aria-invalid]=\"item.error() ? 'true' : null\"\n (input)=\"item.text.set($any($event.target).value)\"\n />`,\n})\nexport class UiQuestionnaireInput {\n protected readonly item = inject(UiQuestionnaireItem);\n readonly placeholder = input('');\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn(questionnaireInputWrapperClass, this.userClass()));\n protected readonly inputClass = questionnaireInputClass;\n}\n\n@Directive({\n selector: 'div[uiQuestionnaireActions], ui-questionnaire-actions', hostDirectives: [UiElementHost],\n host: { 'data-slot': 'questionnaire-actions', '[attr.class]': 'classes()' },\n})\nexport class UiQuestionnaireActions {\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn(questionnaireActionsClass, this.userClass()));\n}\n\nexport const UI_QUESTIONNAIRE = [\n UiQuestionnaire,\n UiQuestionnaireProgress,\n UiQuestionnaireItem,\n UiQuestionnaireTitle,\n UiQuestionnaireDescription,\n UiQuestionnaireChoices,\n UiQuestionnaireChoice,\n UiQuestionnaireInput,\n UiQuestionnaireActions,\n] as const;\n"],"mappings":"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"}
@@ -0,0 +1,399 @@
1
+ import { Directionality } from "@angular/cdk/bidi";
2
+ import * as i0 from "@angular/core";
3
+ import { ChangeDetectionStrategy, Component, Directive, ElementRef, booleanAttribute, computed, contentChildren, forwardRef, inject, input, model, signal } from "@angular/core";
4
+ import { NG_VALUE_ACCESSOR } from "@angular/forms";
5
+ import * as i1 from "@loomui-ng/ui/utils";
6
+ import { UiElementHost, cn } from "@loomui-ng/ui/utils";
7
+ const radioGroupClass = "grid gap-2 w-full";
8
+ const radioGroupItemClass = "group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-input outline-none group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground group-has-[:focus-visible]/field-label:data-checked:border-primary dark:data-checked:bg-primary";
9
+ const radioGroupIndicatorClass = "flex size-4 items-center justify-center";
10
+ const UI_RADIO_GROUP_GENERATED = [];
11
+ var UiRadioGroup = class UiRadioGroup {
12
+ value = model("", ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
13
+ required = input(false, {
14
+ ...ngDevMode ? { debugName: "required" } : /* istanbul ignore next */ {},
15
+ transform: booleanAttribute
16
+ });
17
+ disabled = input(false, {
18
+ ...ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {},
19
+ transform: booleanAttribute
20
+ });
21
+ orientation = input(void 0, ...ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []);
22
+ userClass = input("", {
23
+ ...ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {},
24
+ alias: "class"
25
+ });
26
+ dir = inject(Directionality);
27
+ cvaDisabled = signal(false, ...ngDevMode ? [{ debugName: "cvaDisabled" }] : /* istanbul ignore next */ []);
28
+ isDisabled = computed(() => this.disabled() || this.cvaDisabled(), ...ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []);
29
+ items = contentChildren(forwardRef(() => UiRadioGroupItem), {
30
+ ...ngDevMode ? { debugName: "items" } : /* istanbul ignore next */ {},
31
+ descendants: true
32
+ });
33
+ classes = computed(() => cn(radioGroupClass, this.userClass()), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
34
+ onChange = () => {};
35
+ onTouched = () => {};
36
+ tabStop = computed(() => {
37
+ const enabled = this.items().filter((i) => !i.isDisabled());
38
+ return (enabled.find((i) => i.value() === this.value()) ?? enabled[0])?.value() ?? null;
39
+ }, ...ngDevMode ? [{ debugName: "tabStop" }] : /* istanbul ignore next */ []);
40
+ select(v) {
41
+ this.value.set(v);
42
+ this.onChange(v);
43
+ }
44
+ onKeydown(e) {
45
+ const enabled = this.items().filter((i) => !i.isDisabled());
46
+ const i = enabled.findIndex((it) => it.el === document.activeElement);
47
+ if (i < 0) return;
48
+ const rtl = this.dir.value === "rtl";
49
+ let t = -1;
50
+ if (e.key === "ArrowDown" || e.key === (rtl ? "ArrowLeft" : "ArrowRight")) t = (i + 1) % enabled.length;
51
+ else if (e.key === "ArrowUp" || e.key === (rtl ? "ArrowRight" : "ArrowLeft")) t = (i - 1 + enabled.length) % enabled.length;
52
+ else if (e.key === "Home") t = 0;
53
+ else if (e.key === "End") t = enabled.length - 1;
54
+ if (t >= 0) {
55
+ e.preventDefault();
56
+ enabled[t].el.focus();
57
+ this.select(enabled[t].value());
58
+ }
59
+ }
60
+ writeValue(v) {
61
+ this.value.set(v ?? "");
62
+ }
63
+ registerOnChange(fn) {
64
+ this.onChange = fn;
65
+ }
66
+ registerOnTouched(fn) {
67
+ this.onTouched = fn;
68
+ }
69
+ setDisabledState(d) {
70
+ this.cvaDisabled.set(d);
71
+ }
72
+ static ɵfac = i0.ɵɵngDeclareFactory({
73
+ minVersion: "12.0.0",
74
+ version: "22.2.2",
75
+ ngImport: i0,
76
+ type: UiRadioGroup,
77
+ deps: [],
78
+ target: i0.ɵɵFactoryTarget.Directive
79
+ });
80
+ static ɵdir = i0.ɵɵngDeclareDirective({
81
+ minVersion: "17.2.0",
82
+ version: "22.2.2",
83
+ type: UiRadioGroup,
84
+ isStandalone: true,
85
+ selector: "[uiRadioGroup], ui-radio-group",
86
+ inputs: {
87
+ value: {
88
+ classPropertyName: "value",
89
+ publicName: "value",
90
+ isSignal: true,
91
+ isRequired: false,
92
+ transformFunction: null
93
+ },
94
+ required: {
95
+ classPropertyName: "required",
96
+ publicName: "required",
97
+ isSignal: true,
98
+ isRequired: false,
99
+ transformFunction: null
100
+ },
101
+ disabled: {
102
+ classPropertyName: "disabled",
103
+ publicName: "disabled",
104
+ isSignal: true,
105
+ isRequired: false,
106
+ transformFunction: null
107
+ },
108
+ orientation: {
109
+ classPropertyName: "orientation",
110
+ publicName: "orientation",
111
+ isSignal: true,
112
+ isRequired: false,
113
+ transformFunction: null
114
+ },
115
+ userClass: {
116
+ classPropertyName: "userClass",
117
+ publicName: "class",
118
+ isSignal: true,
119
+ isRequired: false,
120
+ transformFunction: null
121
+ }
122
+ },
123
+ outputs: { value: "valueChange" },
124
+ host: {
125
+ attributes: {
126
+ "role": "radiogroup",
127
+ "data-slot": "radio-group"
128
+ },
129
+ listeners: { "keydown": "onKeydown($event)" },
130
+ properties: {
131
+ "attr.aria-required": "required()",
132
+ "attr.aria-orientation": "orientation()",
133
+ "attr.dir": "dir.value",
134
+ "attr.class": "classes()"
135
+ }
136
+ },
137
+ providers: [{
138
+ provide: NG_VALUE_ACCESSOR,
139
+ useExisting: forwardRef(() => UiRadioGroup),
140
+ multi: true
141
+ }],
142
+ queries: [{
143
+ propertyName: "items",
144
+ predicate: i0.forwardRef(() => UiRadioGroupItem),
145
+ descendants: true,
146
+ isSignal: true
147
+ }],
148
+ exportAs: ["uiRadioGroup"],
149
+ hostDirectives: [{ directive: i1.UiElementHost }],
150
+ ngImport: i0
151
+ });
152
+ };
153
+ i0.ɵɵngDeclareClassMetadata({
154
+ minVersion: "12.0.0",
155
+ version: "22.2.2",
156
+ ngImport: i0,
157
+ type: UiRadioGroup,
158
+ decorators: [{
159
+ type: Directive,
160
+ args: [{
161
+ selector: "[uiRadioGroup], ui-radio-group",
162
+ hostDirectives: [UiElementHost],
163
+ exportAs: "uiRadioGroup",
164
+ providers: [{
165
+ provide: NG_VALUE_ACCESSOR,
166
+ useExisting: forwardRef(() => UiRadioGroup),
167
+ multi: true
168
+ }],
169
+ host: {
170
+ role: "radiogroup",
171
+ "data-slot": "radio-group",
172
+ "[attr.aria-required]": "required()",
173
+ "[attr.aria-orientation]": "orientation()",
174
+ "[attr.dir]": "dir.value",
175
+ "[attr.class]": "classes()",
176
+ "(keydown)": "onKeydown($event)"
177
+ }
178
+ }]
179
+ }],
180
+ propDecorators: {
181
+ value: [{
182
+ type: i0.Input,
183
+ args: [{
184
+ isSignal: true,
185
+ alias: "value",
186
+ required: false
187
+ }]
188
+ }, {
189
+ type: i0.Output,
190
+ args: ["valueChange"]
191
+ }],
192
+ required: [{
193
+ type: i0.Input,
194
+ args: [{
195
+ isSignal: true,
196
+ alias: "required",
197
+ required: false
198
+ }]
199
+ }],
200
+ disabled: [{
201
+ type: i0.Input,
202
+ args: [{
203
+ isSignal: true,
204
+ alias: "disabled",
205
+ required: false
206
+ }]
207
+ }],
208
+ orientation: [{
209
+ type: i0.Input,
210
+ args: [{
211
+ isSignal: true,
212
+ alias: "orientation",
213
+ required: false
214
+ }]
215
+ }],
216
+ userClass: [{
217
+ type: i0.Input,
218
+ args: [{
219
+ isSignal: true,
220
+ alias: "class",
221
+ required: false
222
+ }]
223
+ }],
224
+ items: [{
225
+ type: i0.ContentChildren,
226
+ args: [forwardRef(() => UiRadioGroupItem), {
227
+ descendants: true,
228
+ isSignal: true
229
+ }]
230
+ }]
231
+ }
232
+ });
233
+ var UiRadioGroupItem = class UiRadioGroupItem {
234
+ group = inject(UiRadioGroup);
235
+ el = inject(ElementRef).nativeElement;
236
+ value = input("", ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
237
+ disabledInput = input(false, {
238
+ ...ngDevMode ? { debugName: "disabledInput" } : /* istanbul ignore next */ {},
239
+ alias: "disabled",
240
+ transform: booleanAttribute
241
+ });
242
+ invalid = input(false, {
243
+ ...ngDevMode ? { debugName: "invalid" } : /* istanbul ignore next */ {},
244
+ transform: booleanAttribute
245
+ });
246
+ userClass = input("", {
247
+ ...ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {},
248
+ alias: "class"
249
+ });
250
+ checked = computed(() => this.group.value() === this.value(), ...ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []);
251
+ isDisabled = () => this.disabledInput() || this.group.isDisabled();
252
+ classes = computed(() => cn(radioGroupItemClass, this.userClass()), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
253
+ onFocus() {}
254
+ static ɵfac = i0.ɵɵngDeclareFactory({
255
+ minVersion: "12.0.0",
256
+ version: "22.2.2",
257
+ ngImport: i0,
258
+ type: UiRadioGroupItem,
259
+ deps: [],
260
+ target: i0.ɵɵFactoryTarget.Component
261
+ });
262
+ static ɵcmp = i0.ɵɵngDeclareComponent({
263
+ minVersion: "17.0.0",
264
+ version: "22.2.2",
265
+ type: UiRadioGroupItem,
266
+ isStandalone: true,
267
+ selector: "button[uiRadioGroupItem], ui-radio-group-item",
268
+ inputs: {
269
+ value: {
270
+ classPropertyName: "value",
271
+ publicName: "value",
272
+ isSignal: true,
273
+ isRequired: false,
274
+ transformFunction: null
275
+ },
276
+ disabledInput: {
277
+ classPropertyName: "disabledInput",
278
+ publicName: "disabled",
279
+ isSignal: true,
280
+ isRequired: false,
281
+ transformFunction: null
282
+ },
283
+ invalid: {
284
+ classPropertyName: "invalid",
285
+ publicName: "invalid",
286
+ isSignal: true,
287
+ isRequired: false,
288
+ transformFunction: null
289
+ },
290
+ userClass: {
291
+ classPropertyName: "userClass",
292
+ publicName: "class",
293
+ isSignal: true,
294
+ isRequired: false,
295
+ transformFunction: null
296
+ }
297
+ },
298
+ host: {
299
+ attributes: {
300
+ "type": "button",
301
+ "role": "radio",
302
+ "data-slot": "radio-group-item"
303
+ },
304
+ listeners: {
305
+ "click": "group.select(value())",
306
+ "focus": "onFocus()",
307
+ "blur": "group.onTouched()"
308
+ },
309
+ properties: {
310
+ "attr.aria-checked": "checked()",
311
+ "attr.data-state": "checked() ? \"checked\" : \"unchecked\"",
312
+ "attr.data-disabled": "isDisabled() ? \"\" : null",
313
+ "attr.aria-invalid": "invalid() ? \"true\" : null",
314
+ "attr.disabled": "(isDisabled()) ? \"\" : null",
315
+ "attr.tabindex": "group.tabStop() === value() ? 0 : -1",
316
+ "attr.class": "classes()"
317
+ }
318
+ },
319
+ hostDirectives: [{ directive: i1.UiElementHost }],
320
+ ngImport: i0,
321
+ template: "\n @if (checked()) {\n <span data-slot=\"radio-group-indicator\" data-state=\"checked\" class=\"flex size-4 items-center justify-center\">\n <span class=\"size-2 rounded-full bg-primary-foreground\"></span>\n </span>\n }\n ",
322
+ isInline: true,
323
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
324
+ });
325
+ };
326
+ i0.ɵɵngDeclareClassMetadata({
327
+ minVersion: "12.0.0",
328
+ version: "22.2.2",
329
+ ngImport: i0,
330
+ type: UiRadioGroupItem,
331
+ decorators: [{
332
+ type: Component,
333
+ args: [{
334
+ selector: "button[uiRadioGroupItem], ui-radio-group-item",
335
+ hostDirectives: [UiElementHost],
336
+ changeDetection: ChangeDetectionStrategy.OnPush,
337
+ host: {
338
+ type: "button",
339
+ role: "radio",
340
+ "data-slot": "radio-group-item",
341
+ "[attr.aria-checked]": "checked()",
342
+ "[attr.data-state]": "checked() ? \"checked\" : \"unchecked\"",
343
+ "[attr.data-disabled]": "isDisabled() ? \"\" : null",
344
+ "[attr.aria-invalid]": "invalid() ? \"true\" : null",
345
+ "[attr.disabled]": "(isDisabled()) ? \"\" : null",
346
+ "[attr.tabindex]": "group.tabStop() === value() ? 0 : -1",
347
+ "[attr.class]": "classes()",
348
+ "(click)": "group.select(value())",
349
+ "(focus)": "onFocus()",
350
+ "(blur)": "group.onTouched()"
351
+ },
352
+ template: `
353
+ @if (checked()) {
354
+ <span data-slot="radio-group-indicator" data-state="checked" class="${radioGroupIndicatorClass}">
355
+ <span class="size-2 rounded-full bg-primary-foreground"></span>
356
+ </span>
357
+ }
358
+ `
359
+ }]
360
+ }],
361
+ propDecorators: {
362
+ value: [{
363
+ type: i0.Input,
364
+ args: [{
365
+ isSignal: true,
366
+ alias: "value",
367
+ required: false
368
+ }]
369
+ }],
370
+ disabledInput: [{
371
+ type: i0.Input,
372
+ args: [{
373
+ isSignal: true,
374
+ alias: "disabled",
375
+ required: false
376
+ }]
377
+ }],
378
+ invalid: [{
379
+ type: i0.Input,
380
+ args: [{
381
+ isSignal: true,
382
+ alias: "invalid",
383
+ required: false
384
+ }]
385
+ }],
386
+ userClass: [{
387
+ type: i0.Input,
388
+ args: [{
389
+ isSignal: true,
390
+ alias: "class",
391
+ required: false
392
+ }]
393
+ }]
394
+ }
395
+ });
396
+ const UI_RADIO_GROUP = [UiRadioGroup, UiRadioGroupItem];
397
+ export { UI_RADIO_GROUP, UI_RADIO_GROUP_GENERATED, UiRadioGroup, UiRadioGroupItem, radioGroupClass, radioGroupIndicatorClass, radioGroupItemClass };
398
+
399
+ //# sourceMappingURL=loomui-ng-ui-radio-group.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loomui-ng-ui-radio-group.mjs","names":[],"sources":["../../../libs/ui/radio-group/radio-group.ts","../../../libs/ui/radio-group/radio-group.manual.ts"],"sourcesContent":["// GENERATED by tools/gen-ui.mjs from docs/evidence/slots/radio-group.json.\n// Change tools/ui-specs.mjs and regenerate; hand-written parts live in ./radio-group.manual.ts.\nimport { Directive, computed, input } from '@angular/core';\nimport { cn } from '@loomui-ng/ui/utils';\n\nexport const radioGroupClass =\n 'grid gap-2 w-full';\n\nexport const radioGroupItemClass =\n 'group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-input outline-none group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground group-has-[:focus-visible]/field-label:data-checked:border-primary dark:data-checked:bg-primary';\n\nexport const radioGroupIndicatorClass =\n 'flex size-4 items-center justify-center';\n\nexport const UI_RADIO_GROUP_GENERATED = [] as const;\n","import { Directionality } from '@angular/cdk/bidi';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n Directive,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { cn } from '@loomui-ng/ui/utils';\nimport { radioGroupClass, radioGroupIndicatorClass, radioGroupItemClass } from './radio-group';\nimport { UiElementHost } from '@loomui-ng/ui/utils';\n\n/**\n * <div uiRadioGroup [(value)]=\"plan\">\n * <button uiRadioGroupItem value=\"a\" id=\"a\"></button><label uiLabel for=\"a\">A</label>\n * </div>\n * Arrow keys move focus AND select (Radix). Roving tabindex: the selected item (else the first) is the tab stop.\n */\n@Directive({\n selector: '[uiRadioGroup], ui-radio-group', hostDirectives: [UiElementHost],\n exportAs: 'uiRadioGroup',\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => UiRadioGroup), multi: true }],\n host: {\n role: 'radiogroup',\n 'data-slot': 'radio-group',\n '[attr.aria-required]': 'required()',\n '[attr.aria-orientation]': 'orientation()',\n '[attr.dir]': 'dir.value',\n '[attr.class]': 'classes()',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class UiRadioGroup implements ControlValueAccessor {\n readonly value = model<string>('');\n readonly required = input(false, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly orientation = input<'vertical' | 'horizontal' | undefined>(undefined);\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly dir = inject(Directionality);\n private readonly cvaDisabled = signal(false);\n readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n readonly items = contentChildren(forwardRef(() => UiRadioGroupItem), { descendants: true });\n protected readonly classes = computed(() => cn(radioGroupClass, this.userClass()));\n private onChange: (v: string) => void = () => {};\n onTouched: () => void = () => {};\n\n readonly tabStop = computed(() => {\n const enabled = this.items().filter((i) => !i.isDisabled());\n return (enabled.find((i) => i.value() === this.value()) ?? enabled[0])?.value() ?? null;\n });\n\n select(v: string): void {\n this.value.set(v);\n this.onChange(v);\n }\n\n protected onKeydown(e: KeyboardEvent): void {\n const enabled = this.items().filter((i) => !i.isDisabled());\n const i = enabled.findIndex((it) => it.el === document.activeElement);\n if (i < 0) return;\n const rtl = this.dir.value === 'rtl';\n let t = -1;\n if (e.key === 'ArrowDown' || e.key === (rtl ? 'ArrowLeft' : 'ArrowRight')) t = (i + 1) % enabled.length;\n else if (e.key === 'ArrowUp' || e.key === (rtl ? 'ArrowRight' : 'ArrowLeft')) t = (i - 1 + enabled.length) % enabled.length;\n else if (e.key === 'Home') t = 0;\n else if (e.key === 'End') t = enabled.length - 1;\n if (t >= 0) {\n e.preventDefault();\n enabled[t].el.focus();\n this.select(enabled[t].value());\n }\n }\n\n writeValue(v: string | null): void {\n this.value.set(v ?? '');\n }\n registerOnChange(fn: (v: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(d: boolean): void {\n this.cvaDisabled.set(d);\n }\n}\n\n@Component({\n selector: 'button[uiRadioGroupItem], ui-radio-group-item', hostDirectives: [UiElementHost],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n type: 'button',\n role: 'radio',\n 'data-slot': 'radio-group-item',\n '[attr.aria-checked]': 'checked()',\n '[attr.data-state]': 'checked() ? \"checked\" : \"unchecked\"',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : null',\n '[attr.aria-invalid]': 'invalid() ? \"true\" : null',\n '[attr.disabled]': '(isDisabled()) ? \"\" : null',\n '[attr.tabindex]': 'group.tabStop() === value() ? 0 : -1',\n '[attr.class]': 'classes()',\n '(click)': 'group.select(value())',\n '(focus)': 'onFocus()',\n '(blur)': 'group.onTouched()',\n },\n // The indicator's inner dot is not captured (only the outer span was); sized/colored like shadcn's source.\n template: `\n @if (checked()) {\n <span data-slot=\"radio-group-indicator\" data-state=\"checked\" class=\"${radioGroupIndicatorClass}\">\n <span class=\"size-2 rounded-full bg-primary-foreground\"></span>\n </span>\n }\n `,\n})\nexport class UiRadioGroupItem {\n protected readonly group = inject(UiRadioGroup);\n readonly el = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n readonly value = input<string>('');\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly checked = computed(() => this.group.value() === this.value());\n isDisabled = () => this.disabledInput() || this.group.isDisabled();\n protected readonly classes = computed(() => cn(radioGroupItemClass, this.userClass()));\n protected onFocus(): void {\n // Radix: focusing via keyboard does not select by itself (arrows do); nothing to do here.\n }\n}\n\nexport const UI_RADIO_GROUP = [UiRadioGroup, UiRadioGroupItem] as const;\n"],"mappings":"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"}