@loomui-ng/ui 0.0.0-stage → 0.1.0

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-attachment.mjs","names":[],"sources":["../../../libs/ui/attachment/attachment.ts","../../../libs/ui/attachment/attachment.manual.ts"],"sourcesContent":["// GENERATED by tools/gen-ui.mjs from docs/evidence/slots/attachment.json.\n// Change tools/ui-specs.mjs and regenerate; hand-written parts live in ./attachment.manual.ts.\nimport { Directive, computed, input } from '@angular/core';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '@loomui-ng/ui/utils';\nimport { UiElementHost } from '@loomui-ng/ui/utils';\n\n@Directive({\n selector: '[uiAttachmentGroup], ui-attachment-group', hostDirectives: [UiElementHost],\n host: {\n 'data-slot': 'attachment-group',\n '[attr.class]': 'classes()',\n },\n})\nexport class UiAttachmentGroup {\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn('flex min-w-0 scroll-fade-x snap-x snap-mandatory scroll-px-1 scrollbar-none gap-3 overflow-x-auto overscroll-x-contain py-1 *:data-[slot=attachment]:flex-none *:data-[slot=attachment]:snap-start w-full', this.userClass()));\n}\n\nexport const attachmentVariants = cva('group/attachment relative flex max-w-full shrink-0 flex-wrap border bg-card text-card-foreground transition-colors focus-within:ring-1 focus-within:ring-ring/30 has-[>a,>button]:hover:bg-muted/50 data-[state=error]:border-destructive/30 data-[state=idle]:border-dashed', {\n variants: {\n size: {\n default: 'rounded-2xl gap-2 text-sm has-data-[slot=attachment-content]:px-2.5 has-data-[slot=attachment-content]:py-2 has-data-[slot=attachment-media]:p-2',\n sm: 'rounded-2xl gap-2.5 text-xs has-data-[slot=attachment-content]:px-2 has-data-[slot=attachment-content]:py-1.5 has-data-[slot=attachment-media]:p-1.5 min-w-40 items-center w-full',\n xs: 'gap-1.5 rounded-xl text-xs has-data-[slot=attachment-content]:px-1.5 has-data-[slot=attachment-content]:py-1 has-data-[slot=attachment-media]:p-1 min-w-40 items-center w-full',\n },\n orientation: {\n vertical: 'min-w-0 rounded-2xl gap-2 text-sm has-data-[slot=attachment-content]:px-2.5 has-data-[slot=attachment-content]:py-2 has-data-[slot=attachment-media]:p-2 w-24 flex-col has-data-[slot=attachment-content]:w-30',\n horizontal: 'min-w-40 items-center w-full',\n },\n },\n defaultVariants: { size: 'default', orientation: 'vertical' },\n});\n\n@Directive({\n selector: '[uiAttachment], ui-attachment', hostDirectives: [UiElementHost],\n host: {\n 'data-slot': 'attachment',\n '[attr.data-size]': 'size()',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-state]': 'state()',\n '[attr.class]': 'classes()',\n },\n})\nexport class UiAttachment {\n readonly state = input<'idle' | 'uploading' | 'processing' | 'done'>('done');\n readonly size = input<'default' | 'sm' | 'xs'>('default');\n readonly orientation = input<'vertical' | 'horizontal'>('vertical');\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn(attachmentVariants({ size: this.size(), orientation: this.orientation() }), this.userClass()));\n}\n\nexport const attachmentMediaVariants = cva('relative flex aspect-square w-10 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-muted text-foreground group-data-[orientation=vertical]/attachment:w-full group-data-[size=sm]/attachment:w-8 group-data-[size=xs]/attachment:w-7 group-data-[size=xs]/attachment:rounded-md group-data-[state=error]/attachment:bg-destructive/10 group-data-[state=error]/attachment:text-destructive group-data-[orientation=vertical]/attachment:*:data-[slot=spinner]:size-6! [&_svg]:pointer-events-none [&_svg:not([class*=\\'size-\\'])]:size-4 group-data-[orientation=vertical]/attachment:[&_svg:not([class*=\\'size-\\'])]:size-6 group-data-[size=xs]/attachment:[&_svg:not([class*=\\'size-\\'])]:size-3.5', {\n variants: {\n variant: {\n image: 'opacity-60 group-data-[state=done]/attachment:opacity-100 group-data-[state=idle]/attachment:opacity-100 *:[img]:aspect-square *:[img]:w-full *:[img]:object-cover',\n icon: '',\n },\n },\n defaultVariants: { variant: 'icon' },\n});\n\n@Directive({\n selector: '[uiAttachmentMedia], ui-attachment-media', hostDirectives: [UiElementHost],\n host: {\n 'data-slot': 'attachment-media',\n '[attr.data-variant]': 'variant()',\n '[attr.class]': 'classes()',\n },\n})\nexport class UiAttachmentMedia {\n readonly variant = input<'image' | 'icon'>('icon');\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn(attachmentMediaVariants({ variant: this.variant() }), this.userClass()));\n}\n\n@Directive({\n selector: '[uiAttachmentContent], ui-attachment-content', hostDirectives: [UiElementHost],\n host: {\n 'data-slot': 'attachment-content',\n '[attr.class]': 'classes()',\n },\n})\nexport class UiAttachmentContent {\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn('max-w-full min-w-0 flex-1 leading-tight group-data-[orientation=vertical]/attachment:px-1', this.userClass()));\n}\n\n@Directive({\n selector: 'span[uiAttachmentTitle], ui-attachment-title', hostDirectives: [UiElementHost],\n host: {\n 'data-slot': 'attachment-title',\n '[attr.class]': 'classes()',\n },\n})\nexport class UiAttachmentTitle {\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn('block max-w-full min-w-0 truncate font-medium group-data-[state=processing]/attachment:shimmer group-data-[state=uploading]/attachment:shimmer', this.userClass()));\n}\n\n@Directive({\n selector: 'span[uiAttachmentDescription], ui-attachment-description', hostDirectives: [UiElementHost],\n host: {\n 'data-slot': 'attachment-description',\n '[attr.class]': 'classes()',\n },\n})\nexport class UiAttachmentDescription {\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn('mt-0.5 block min-w-0 truncate text-xs text-muted-foreground group-data-[state=error]/attachment:text-destructive/80 max-w-full', this.userClass()));\n}\n\n@Directive({\n selector: '[uiAttachmentActions], ui-attachment-actions', hostDirectives: [UiElementHost],\n host: {\n 'data-slot': 'attachment-actions',\n '[attr.class]': 'classes()',\n },\n})\nexport class UiAttachmentActions {\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn('relative z-20 flex shrink-0 items-center group-data-[orientation=vertical]/attachment:absolute group-data-[orientation=vertical]/attachment:top-3 group-data-[orientation=vertical]/attachment:end-3 group-data-[orientation=vertical]/attachment:gap-1', this.userClass()));\n}\n\nexport const attachmentTriggerClass =\n 'absolute inset-0 z-10 outline-none';\n\nexport const UI_ATTACHMENT_GENERATED = [UiAttachmentGroup, UiAttachment, UiAttachmentMedia, UiAttachmentContent, UiAttachmentTitle, UiAttachmentDescription, UiAttachmentActions] as const;\n","import { computed, Directive, input, booleanAttribute } from '@angular/core';\nimport { buttonVariants } from '@loomui-ng/ui/button';\nimport { cn } from '@loomui-ng/ui/utils';\nimport { attachmentTriggerClass, UI_ATTACHMENT_GENERATED } from './attachment';\nimport { UiElementHost } from '@loomui-ng/ui/utils';\n\n/**\n * Overlay link/button that makes the whole attachment clickable (observed on <a target=_blank> and <button aria-haspopup=dialog>):\n * <a uiAttachmentTrigger href=\"…\" aria-label=\"Open workspace.png\"></a>\n */\n@Directive({\n selector: 'a[uiAttachmentTrigger], button[uiAttachmentTrigger], ui-attachment-trigger', hostDirectives: [UiElementHost],\n host: { 'data-slot': 'attachment-trigger', '[attr.class]': 'classes()' },\n})\nexport class UiAttachmentTrigger {\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn(attachmentTriggerClass, this.userClass()));\n}\n\n/** Per-attachment action (observed: ghost icon-xs Button, aria-label \"Remove <file>\" / \"Cancel upload\"). */\n@Directive({\n selector: 'button[uiAttachmentAction], ui-attachment-action', hostDirectives: [UiElementHost],\n host: { '[attr.disabled]': 'disabled() ? \"\" : null',\n type: 'button',\n 'data-slot': 'attachment-action',\n 'data-variant': 'ghost',\n 'data-size': 'icon-xs',\n '[attr.class]': 'classes()',\n },\n})\nexport class UiAttachmentAction {\n /** Reflected as the `disabled` attribute so it also works on the custom element. */\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn(buttonVariants({ variant: 'ghost', size: 'icon-xs' }), 'relative z-20', this.userClass()));\n}\n\nexport const UI_ATTACHMENT = [...UI_ATTACHMENT_GENERATED, UiAttachmentTrigger, UiAttachmentAction] as const;\n"],"mappings":"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"}
@@ -0,0 +1,561 @@
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, Directive, ElementRef, computed, inject, input, signal } from "@angular/core";
3
+ import * as i1 from "@loomui-ng/ui/utils";
4
+ import { UiElementHost, cn } from "@loomui-ng/ui/utils";
5
+ import "class-variance-authority";
6
+ var UiAvatarBadge = class UiAvatarBadge {
7
+ userClass = input("", {
8
+ ...ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {},
9
+ alias: "class"
10
+ });
11
+ classes = computed(() => cn("absolute end-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full text-primary-foreground bg-blend-color ring-2 ring-background select-none group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2 group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2", this.userClass()), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
12
+ static ɵfac = i0.ɵɵngDeclareFactory({
13
+ minVersion: "12.0.0",
14
+ version: "22.2.2",
15
+ ngImport: i0,
16
+ type: UiAvatarBadge,
17
+ deps: [],
18
+ target: i0.ɵɵFactoryTarget.Directive
19
+ });
20
+ static ɵdir = i0.ɵɵngDeclareDirective({
21
+ minVersion: "17.1.0",
22
+ version: "22.2.2",
23
+ type: UiAvatarBadge,
24
+ isStandalone: true,
25
+ selector: "[uiAvatarBadge], ui-avatar-badge",
26
+ inputs: { userClass: {
27
+ classPropertyName: "userClass",
28
+ publicName: "class",
29
+ isSignal: true,
30
+ isRequired: false,
31
+ transformFunction: null
32
+ } },
33
+ host: {
34
+ attributes: { "data-slot": "avatar-badge" },
35
+ properties: { "attr.class": "classes()" }
36
+ },
37
+ hostDirectives: [{ directive: i1.UiElementHost }],
38
+ ngImport: i0
39
+ });
40
+ };
41
+ i0.ɵɵngDeclareClassMetadata({
42
+ minVersion: "12.0.0",
43
+ version: "22.2.2",
44
+ ngImport: i0,
45
+ type: UiAvatarBadge,
46
+ decorators: [{
47
+ type: Directive,
48
+ args: [{
49
+ selector: "[uiAvatarBadge], ui-avatar-badge",
50
+ hostDirectives: [UiElementHost],
51
+ host: {
52
+ "data-slot": "avatar-badge",
53
+ "[attr.class]": "classes()"
54
+ }
55
+ }]
56
+ }],
57
+ propDecorators: { userClass: [{
58
+ type: i0.Input,
59
+ args: [{
60
+ isSignal: true,
61
+ alias: "class",
62
+ required: false
63
+ }]
64
+ }] }
65
+ });
66
+ var UiAvatarGroup = class UiAvatarGroup {
67
+ userClass = input("", {
68
+ ...ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {},
69
+ alias: "class"
70
+ });
71
+ classes = computed(() => cn("group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background grayscale", this.userClass()), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
72
+ static ɵfac = i0.ɵɵngDeclareFactory({
73
+ minVersion: "12.0.0",
74
+ version: "22.2.2",
75
+ ngImport: i0,
76
+ type: UiAvatarGroup,
77
+ deps: [],
78
+ target: i0.ɵɵFactoryTarget.Directive
79
+ });
80
+ static ɵdir = i0.ɵɵngDeclareDirective({
81
+ minVersion: "17.1.0",
82
+ version: "22.2.2",
83
+ type: UiAvatarGroup,
84
+ isStandalone: true,
85
+ selector: "[uiAvatarGroup], ui-avatar-group",
86
+ inputs: { userClass: {
87
+ classPropertyName: "userClass",
88
+ publicName: "class",
89
+ isSignal: true,
90
+ isRequired: false,
91
+ transformFunction: null
92
+ } },
93
+ host: {
94
+ attributes: { "data-slot": "avatar-group" },
95
+ properties: { "attr.class": "classes()" }
96
+ },
97
+ hostDirectives: [{ directive: i1.UiElementHost }],
98
+ ngImport: i0
99
+ });
100
+ };
101
+ i0.ɵɵngDeclareClassMetadata({
102
+ minVersion: "12.0.0",
103
+ version: "22.2.2",
104
+ ngImport: i0,
105
+ type: UiAvatarGroup,
106
+ decorators: [{
107
+ type: Directive,
108
+ args: [{
109
+ selector: "[uiAvatarGroup], ui-avatar-group",
110
+ hostDirectives: [UiElementHost],
111
+ host: {
112
+ "data-slot": "avatar-group",
113
+ "[attr.class]": "classes()"
114
+ }
115
+ }]
116
+ }],
117
+ propDecorators: { userClass: [{
118
+ type: i0.Input,
119
+ args: [{
120
+ isSignal: true,
121
+ alias: "class",
122
+ required: false
123
+ }]
124
+ }] }
125
+ });
126
+ var UiAvatarGroupCount = class UiAvatarGroupCount {
127
+ userClass = input("", {
128
+ ...ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {},
129
+ alias: "class"
130
+ });
131
+ classes = computed(() => cn("relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 [&>ui-icon]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3", this.userClass()), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
132
+ static ɵfac = i0.ɵɵngDeclareFactory({
133
+ minVersion: "12.0.0",
134
+ version: "22.2.2",
135
+ ngImport: i0,
136
+ type: UiAvatarGroupCount,
137
+ deps: [],
138
+ target: i0.ɵɵFactoryTarget.Directive
139
+ });
140
+ static ɵdir = i0.ɵɵngDeclareDirective({
141
+ minVersion: "17.1.0",
142
+ version: "22.2.2",
143
+ type: UiAvatarGroupCount,
144
+ isStandalone: true,
145
+ selector: "[uiAvatarGroupCount], ui-avatar-group-count",
146
+ inputs: { userClass: {
147
+ classPropertyName: "userClass",
148
+ publicName: "class",
149
+ isSignal: true,
150
+ isRequired: false,
151
+ transformFunction: null
152
+ } },
153
+ host: {
154
+ attributes: { "data-slot": "avatar-group-count" },
155
+ properties: { "attr.class": "classes()" }
156
+ },
157
+ hostDirectives: [{ directive: i1.UiElementHost }],
158
+ ngImport: i0
159
+ });
160
+ };
161
+ i0.ɵɵngDeclareClassMetadata({
162
+ minVersion: "12.0.0",
163
+ version: "22.2.2",
164
+ ngImport: i0,
165
+ type: UiAvatarGroupCount,
166
+ decorators: [{
167
+ type: Directive,
168
+ args: [{
169
+ selector: "[uiAvatarGroupCount], ui-avatar-group-count",
170
+ hostDirectives: [UiElementHost],
171
+ host: {
172
+ "data-slot": "avatar-group-count",
173
+ "[attr.class]": "classes()"
174
+ }
175
+ }]
176
+ }],
177
+ propDecorators: { userClass: [{
178
+ type: i0.Input,
179
+ args: [{
180
+ isSignal: true,
181
+ alias: "class",
182
+ required: false
183
+ }]
184
+ }] }
185
+ });
186
+ const UI_AVATAR_GENERATED = [
187
+ UiAvatarBadge,
188
+ UiAvatarGroup,
189
+ UiAvatarGroupCount
190
+ ];
191
+ const AVATAR_CLASS = "group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten";
192
+ var UiAvatar = class UiAvatar {
193
+ size = input("default", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
194
+ userClass = input("", {
195
+ ...ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {},
196
+ alias: "class"
197
+ });
198
+ status = signal("loading", ...ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []);
199
+ classes = computed(() => cn(AVATAR_CLASS, this.userClass()), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
200
+ static ɵfac = i0.ɵɵngDeclareFactory({
201
+ minVersion: "12.0.0",
202
+ version: "22.2.2",
203
+ ngImport: i0,
204
+ type: UiAvatar,
205
+ deps: [],
206
+ target: i0.ɵɵFactoryTarget.Directive
207
+ });
208
+ static ɵdir = i0.ɵɵngDeclareDirective({
209
+ minVersion: "17.1.0",
210
+ version: "22.2.2",
211
+ type: UiAvatar,
212
+ isStandalone: true,
213
+ selector: "[uiAvatar], ui-avatar",
214
+ inputs: {
215
+ size: {
216
+ classPropertyName: "size",
217
+ publicName: "size",
218
+ isSignal: true,
219
+ isRequired: false,
220
+ transformFunction: null
221
+ },
222
+ userClass: {
223
+ classPropertyName: "userClass",
224
+ publicName: "class",
225
+ isSignal: true,
226
+ isRequired: false,
227
+ transformFunction: null
228
+ }
229
+ },
230
+ host: {
231
+ attributes: { "data-slot": "avatar" },
232
+ properties: {
233
+ "attr.data-size": "size()",
234
+ "attr.class": "classes()"
235
+ }
236
+ },
237
+ exportAs: ["uiAvatar"],
238
+ hostDirectives: [{ directive: i1.UiElementHost }],
239
+ ngImport: i0
240
+ });
241
+ };
242
+ i0.ɵɵngDeclareClassMetadata({
243
+ minVersion: "12.0.0",
244
+ version: "22.2.2",
245
+ ngImport: i0,
246
+ type: UiAvatar,
247
+ decorators: [{
248
+ type: Directive,
249
+ args: [{
250
+ selector: "[uiAvatar], ui-avatar",
251
+ hostDirectives: [UiElementHost],
252
+ exportAs: "uiAvatar",
253
+ host: {
254
+ "data-slot": "avatar",
255
+ "[attr.data-size]": "size()",
256
+ "[attr.class]": "classes()"
257
+ }
258
+ }]
259
+ }],
260
+ propDecorators: {
261
+ size: [{
262
+ type: i0.Input,
263
+ args: [{
264
+ isSignal: true,
265
+ alias: "size",
266
+ required: false
267
+ }]
268
+ }],
269
+ userClass: [{
270
+ type: i0.Input,
271
+ args: [{
272
+ isSignal: true,
273
+ alias: "class",
274
+ required: false
275
+ }]
276
+ }]
277
+ }
278
+ });
279
+ var UiAvatarImage = class UiAvatarImage {
280
+ avatar = inject(UiAvatar);
281
+ el = inject(ElementRef).nativeElement;
282
+ userClass = input("", {
283
+ ...ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {},
284
+ alias: "class"
285
+ });
286
+ classes = computed(() => cn("aspect-square size-full rounded-full object-cover", this.userClass()), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
287
+ constructor() {
288
+ queueMicrotask(() => {
289
+ if (this.el.complete && this.el.naturalWidth > 0) this.avatar.status.set("loaded");
290
+ else if (this.el.complete && this.el.src) this.avatar.status.set("error");
291
+ });
292
+ }
293
+ static ɵfac = i0.ɵɵngDeclareFactory({
294
+ minVersion: "12.0.0",
295
+ version: "22.2.2",
296
+ ngImport: i0,
297
+ type: UiAvatarImage,
298
+ deps: [],
299
+ target: i0.ɵɵFactoryTarget.Directive
300
+ });
301
+ static ɵdir = i0.ɵɵngDeclareDirective({
302
+ minVersion: "17.1.0",
303
+ version: "22.2.2",
304
+ type: UiAvatarImage,
305
+ isStandalone: true,
306
+ selector: "img[uiAvatarImage]",
307
+ inputs: { userClass: {
308
+ classPropertyName: "userClass",
309
+ publicName: "class",
310
+ isSignal: true,
311
+ isRequired: false,
312
+ transformFunction: null
313
+ } },
314
+ host: {
315
+ attributes: { "data-slot": "avatar-image" },
316
+ listeners: {
317
+ "load": "avatar.status.set(\"loaded\")",
318
+ "error": "avatar.status.set(\"error\")"
319
+ },
320
+ properties: {
321
+ "hidden": "avatar.status() !== \"loaded\"",
322
+ "attr.class": "classes()"
323
+ }
324
+ },
325
+ ngImport: i0
326
+ });
327
+ };
328
+ i0.ɵɵngDeclareClassMetadata({
329
+ minVersion: "12.0.0",
330
+ version: "22.2.2",
331
+ ngImport: i0,
332
+ type: UiAvatarImage,
333
+ decorators: [{
334
+ type: Directive,
335
+ args: [{
336
+ selector: "img[uiAvatarImage]",
337
+ host: {
338
+ "data-slot": "avatar-image",
339
+ "[hidden]": "avatar.status() !== \"loaded\"",
340
+ "[attr.class]": "classes()",
341
+ "(load)": "avatar.status.set(\"loaded\")",
342
+ "(error)": "avatar.status.set(\"error\")"
343
+ }
344
+ }]
345
+ }],
346
+ ctorParameters: () => [],
347
+ propDecorators: { userClass: [{
348
+ type: i0.Input,
349
+ args: [{
350
+ isSignal: true,
351
+ alias: "class",
352
+ required: false
353
+ }]
354
+ }] }
355
+ });
356
+ var UiAvatarFallback = class UiAvatarFallback {
357
+ avatar = inject(UiAvatar);
358
+ userClass = input("", {
359
+ ...ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {},
360
+ alias: "class"
361
+ });
362
+ classes = computed(() => cn("flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs", this.userClass()), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
363
+ static ɵfac = i0.ɵɵngDeclareFactory({
364
+ minVersion: "12.0.0",
365
+ version: "22.2.2",
366
+ ngImport: i0,
367
+ type: UiAvatarFallback,
368
+ deps: [],
369
+ target: i0.ɵɵFactoryTarget.Directive
370
+ });
371
+ static ɵdir = i0.ɵɵngDeclareDirective({
372
+ minVersion: "17.1.0",
373
+ version: "22.2.2",
374
+ type: UiAvatarFallback,
375
+ isStandalone: true,
376
+ selector: "[uiAvatarFallback], ui-avatar-fallback",
377
+ inputs: { userClass: {
378
+ classPropertyName: "userClass",
379
+ publicName: "class",
380
+ isSignal: true,
381
+ isRequired: false,
382
+ transformFunction: null
383
+ } },
384
+ host: {
385
+ attributes: { "data-slot": "avatar-fallback" },
386
+ properties: {
387
+ "hidden": "avatar.status() === \"loaded\"",
388
+ "attr.class": "classes()"
389
+ }
390
+ },
391
+ hostDirectives: [{ directive: i1.UiElementHost }],
392
+ ngImport: i0
393
+ });
394
+ };
395
+ i0.ɵɵngDeclareClassMetadata({
396
+ minVersion: "12.0.0",
397
+ version: "22.2.2",
398
+ ngImport: i0,
399
+ type: UiAvatarFallback,
400
+ decorators: [{
401
+ type: Directive,
402
+ args: [{
403
+ selector: "[uiAvatarFallback], ui-avatar-fallback",
404
+ hostDirectives: [UiElementHost],
405
+ host: {
406
+ "data-slot": "avatar-fallback",
407
+ "[hidden]": "avatar.status() === \"loaded\"",
408
+ "[attr.class]": "classes()"
409
+ }
410
+ }]
411
+ }],
412
+ propDecorators: { userClass: [{
413
+ type: i0.Input,
414
+ args: [{
415
+ isSignal: true,
416
+ alias: "class",
417
+ required: false
418
+ }]
419
+ }] }
420
+ });
421
+ var UiAvatarImageElement = class UiAvatarImageElement {
422
+ src = input("", ...ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []);
423
+ alt = input("", ...ngDevMode ? [{ debugName: "alt" }] : /* istanbul ignore next */ []);
424
+ srcset = input("", ...ngDevMode ? [{ debugName: "srcset" }] : /* istanbul ignore next */ []);
425
+ sizes = input("", ...ngDevMode ? [{ debugName: "sizes" }] : /* istanbul ignore next */ []);
426
+ userClass = input("", {
427
+ ...ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {},
428
+ alias: "class"
429
+ });
430
+ static ɵfac = i0.ɵɵngDeclareFactory({
431
+ minVersion: "12.0.0",
432
+ version: "22.2.2",
433
+ ngImport: i0,
434
+ type: UiAvatarImageElement,
435
+ deps: [],
436
+ target: i0.ɵɵFactoryTarget.Component
437
+ });
438
+ static ɵcmp = i0.ɵɵngDeclareComponent({
439
+ minVersion: "17.1.0",
440
+ version: "22.2.2",
441
+ type: UiAvatarImageElement,
442
+ isStandalone: true,
443
+ selector: "ui-avatar-image",
444
+ inputs: {
445
+ src: {
446
+ classPropertyName: "src",
447
+ publicName: "src",
448
+ isSignal: true,
449
+ isRequired: false,
450
+ transformFunction: null
451
+ },
452
+ alt: {
453
+ classPropertyName: "alt",
454
+ publicName: "alt",
455
+ isSignal: true,
456
+ isRequired: false,
457
+ transformFunction: null
458
+ },
459
+ srcset: {
460
+ classPropertyName: "srcset",
461
+ publicName: "srcset",
462
+ isSignal: true,
463
+ isRequired: false,
464
+ transformFunction: null
465
+ },
466
+ sizes: {
467
+ classPropertyName: "sizes",
468
+ publicName: "sizes",
469
+ isSignal: true,
470
+ isRequired: false,
471
+ transformFunction: null
472
+ },
473
+ userClass: {
474
+ classPropertyName: "userClass",
475
+ publicName: "class",
476
+ isSignal: true,
477
+ isRequired: false,
478
+ transformFunction: null
479
+ }
480
+ },
481
+ host: { classAttribute: "contents" },
482
+ ngImport: i0,
483
+ template: `<img uiAvatarImage [class]="userClass()" [attr.src]="src() || null" [attr.alt]="alt()" [attr.srcset]="srcset() || null" [attr.sizes]="sizes() || null" />`,
484
+ isInline: true,
485
+ dependencies: [{
486
+ kind: "directive",
487
+ type: UiAvatarImage,
488
+ selector: "img[uiAvatarImage]",
489
+ inputs: ["class"]
490
+ }],
491
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
492
+ });
493
+ };
494
+ i0.ɵɵngDeclareClassMetadata({
495
+ minVersion: "12.0.0",
496
+ version: "22.2.2",
497
+ ngImport: i0,
498
+ type: UiAvatarImageElement,
499
+ decorators: [{
500
+ type: Component,
501
+ args: [{
502
+ selector: "ui-avatar-image",
503
+ imports: [UiAvatarImage],
504
+ changeDetection: ChangeDetectionStrategy.OnPush,
505
+ host: { class: "contents" },
506
+ template: `<img uiAvatarImage [class]="userClass()" [attr.src]="src() || null" [attr.alt]="alt()" [attr.srcset]="srcset() || null" [attr.sizes]="sizes() || null" />`
507
+ }]
508
+ }],
509
+ propDecorators: {
510
+ src: [{
511
+ type: i0.Input,
512
+ args: [{
513
+ isSignal: true,
514
+ alias: "src",
515
+ required: false
516
+ }]
517
+ }],
518
+ alt: [{
519
+ type: i0.Input,
520
+ args: [{
521
+ isSignal: true,
522
+ alias: "alt",
523
+ required: false
524
+ }]
525
+ }],
526
+ srcset: [{
527
+ type: i0.Input,
528
+ args: [{
529
+ isSignal: true,
530
+ alias: "srcset",
531
+ required: false
532
+ }]
533
+ }],
534
+ sizes: [{
535
+ type: i0.Input,
536
+ args: [{
537
+ isSignal: true,
538
+ alias: "sizes",
539
+ required: false
540
+ }]
541
+ }],
542
+ userClass: [{
543
+ type: i0.Input,
544
+ args: [{
545
+ isSignal: true,
546
+ alias: "class",
547
+ required: false
548
+ }]
549
+ }]
550
+ }
551
+ });
552
+ const UI_AVATAR = [
553
+ UiAvatar,
554
+ UiAvatarImage,
555
+ UiAvatarImageElement,
556
+ UiAvatarFallback,
557
+ ...UI_AVATAR_GENERATED
558
+ ];
559
+ export { UI_AVATAR, UI_AVATAR_GENERATED, UiAvatar, UiAvatarBadge, UiAvatarFallback, UiAvatarGroup, UiAvatarGroupCount, UiAvatarImage, UiAvatarImageElement };
560
+
561
+ //# sourceMappingURL=loomui-ng-ui-avatar.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loomui-ng-ui-avatar.mjs","names":[],"sources":["../../../libs/ui/avatar/avatar.ts","../../../libs/ui/avatar/avatar.manual.ts"],"sourcesContent":["// GENERATED by tools/gen-ui.mjs from docs/evidence/slots/avatar.json.\n// Change tools/ui-specs.mjs and regenerate; hand-written parts live in ./avatar.manual.ts.\nimport { Directive, computed, input } from '@angular/core';\nimport { cn } from '@loomui-ng/ui/utils';\nimport { UiElementHost } from '@loomui-ng/ui/utils';\n\n@Directive({\n selector: '[uiAvatarBadge], ui-avatar-badge', hostDirectives: [UiElementHost],\n host: {\n 'data-slot': 'avatar-badge',\n '[attr.class]': 'classes()',\n },\n})\nexport class UiAvatarBadge {\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn('absolute end-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full text-primary-foreground bg-blend-color ring-2 ring-background select-none group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2 group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2', this.userClass()));\n}\n\n@Directive({\n selector: '[uiAvatarGroup], ui-avatar-group', hostDirectives: [UiElementHost],\n host: {\n 'data-slot': 'avatar-group',\n '[attr.class]': 'classes()',\n },\n})\nexport class UiAvatarGroup {\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn('group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background grayscale', this.userClass()));\n}\n\n@Directive({\n selector: '[uiAvatarGroupCount], ui-avatar-group-count', hostDirectives: [UiElementHost],\n host: {\n 'data-slot': 'avatar-group-count',\n '[attr.class]': 'classes()',\n },\n})\nexport class UiAvatarGroupCount {\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn('relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 [&>ui-icon]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3', this.userClass()));\n}\n\nexport const UI_AVATAR_GENERATED = [UiAvatarBadge, UiAvatarGroup, UiAvatarGroupCount] as const;\n","import { computed, Directive, ElementRef, inject, input, signal, ChangeDetectionStrategy, Component } from '@angular/core';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '@loomui-ng/ui/utils';\nimport { UI_AVATAR_GENERATED } from './avatar';\nimport { UiElementHost } from '@loomui-ng/ui/utils';\n\nconst AVATAR_CLASS =\n 'group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten';\n\n/**\n * <span uiAvatar size=\"lg\"><img uiAvatarImage src=\"…\" alt=\"@shadcn\" /><span uiAvatarFallback>CN</span></span>\n * Image load/error state is tracked here so the fallback shows only while the image is not loaded (Radix Avatar behavior).\n */\n@Directive({\n selector: '[uiAvatar], ui-avatar', hostDirectives: [UiElementHost],\n exportAs: 'uiAvatar',\n host: { 'data-slot': 'avatar', '[attr.data-size]': 'size()', '[attr.class]': 'classes()' },\n})\nexport class UiAvatar {\n readonly size = input<'default' | 'sm' | 'lg'>('default');\n readonly userClass = input<string>('', { alias: 'class' });\n readonly status = signal<'loading' | 'loaded' | 'error'>('loading');\n protected readonly classes = computed(() => cn(AVATAR_CLASS, this.userClass()));\n}\n\n@Directive({\n selector: 'img[uiAvatarImage]',\n host: {\n 'data-slot': 'avatar-image',\n '[hidden]': 'avatar.status() !== \"loaded\"',\n '[attr.class]': 'classes()',\n '(load)': 'avatar.status.set(\"loaded\")',\n '(error)': 'avatar.status.set(\"error\")',\n },\n})\nexport class UiAvatarImage {\n protected readonly avatar = inject(UiAvatar);\n private readonly el = inject<ElementRef<HTMLImageElement>>(ElementRef).nativeElement;\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() => cn('aspect-square size-full rounded-full object-cover', this.userClass()));\n\n constructor() {\n // The image may already be complete (cached) before the listener is attached.\n queueMicrotask(() => {\n if (this.el.complete && this.el.naturalWidth > 0) this.avatar.status.set('loaded');\n else if (this.el.complete && this.el.src) this.avatar.status.set('error');\n });\n }\n}\n\n// avatar-fallback was not rendered on the captured page (images loaded), so these classes are UNKNOWN on the live site;\n// they follow shadcn's published source (see docs/behavior-specs/avatar.md).\n@Directive({\n selector: '[uiAvatarFallback], ui-avatar-fallback', hostDirectives: [UiElementHost],\n host: {\n 'data-slot': 'avatar-fallback',\n '[hidden]': 'avatar.status() === \"loaded\"',\n '[attr.class]': 'classes()',\n },\n})\nexport class UiAvatarFallback {\n protected readonly avatar = inject(UiAvatar);\n readonly userClass = input<string>('', { alias: 'class' });\n protected readonly classes = computed(() =>\n cn(\n 'flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs',\n this.userClass(),\n ),\n );\n}\n\n/** <ui-avatar-image src=\"/me.png\" alt=\"Me\" /> — custom-element form of `<img uiAvatarImage>` (the real <img> lives inside). */\n@Component({\n selector: 'ui-avatar-image',\n imports: [UiAvatarImage],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'contents' },\n template: `<img uiAvatarImage [class]=\"userClass()\" [attr.src]=\"src() || null\" [attr.alt]=\"alt()\" [attr.srcset]=\"srcset() || null\" [attr.sizes]=\"sizes() || null\" />`,\n})\nexport class UiAvatarImageElement {\n readonly src = input<string>('');\n readonly alt = input<string>('');\n readonly srcset = input<string>('');\n readonly sizes = input<string>('');\n readonly userClass = input<string>('', { alias: 'class' });\n}\n\nexport const UI_AVATAR = [UiAvatar, UiAvatarImage, UiAvatarImageElement, UiAvatarFallback, ...UI_AVATAR_GENERATED] as const;\nvoid cva;\n"],"mappings":";;;;;AAaA,IAAa,gBAAb,MAAa,cAAa;CACf,YAAY,MAAc,IAAE;EAAA,GAAA,YAAA,EAAA,WAAA,YAAA,+BAAA,CAAA;EAAI,OAAO;CAAO,CAAA;CACpC,UAAU,eAAe,GAAG,qZAAqZ,KAAK,UAAS,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAF3c,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAa,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAb,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAa,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,WAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,MAAA;GAAA,YAAA,EAAA,aAAA,eAAA;GAAA,YAAA,EAAA,cAAA,YAAA;EAAA;EAAA,gBAAA,CAAA,EAAA,WAAA,GAAA,cAAA,CAAA;EAAA,UAAA;CAAA,CAAA;;AAAb,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAa,YAAA,CAAA;EAPzB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GAAoC,gBAAgB,CAAC,aAAa;GAC5E,MAAM;IACJ,aAAa;IACb,gBAAgB;GACjB;EACF,CAAA;;;;;;;;;;;AAaD,IAAa,gBAAb,MAAa,cAAa;CACf,YAAY,MAAc,IAAE;EAAA,GAAA,YAAA,EAAA,WAAA,YAAA,+BAAA,CAAA;EAAI,OAAO;CAAO,CAAA;CACpC,UAAU,eAAe,GAAG,iHAAiH,KAAK,UAAS,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAFvK,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAa,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAb,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAa,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,WAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,MAAA;GAAA,YAAA,EAAA,aAAA,eAAA;GAAA,YAAA,EAAA,cAAA,YAAA;EAAA;EAAA,gBAAA,CAAA,EAAA,WAAA,GAAA,cAAA,CAAA;EAAA,UAAA;CAAA,CAAA;;AAAb,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAa,YAAA,CAAA;EAPzB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GAAoC,gBAAgB,CAAC,aAAa;GAC5E,MAAM;IACJ,aAAa;IACb,gBAAgB;GACjB;EACF,CAAA;;;;;;;;;;;AAaD,IAAa,qBAAb,MAAa,mBAAkB;CACpB,YAAY,MAAc,IAAE;EAAA,GAAA,YAAA,EAAA,WAAA,YAAA,+BAAA,CAAA;EAAI,OAAO;CAAO,CAAA;CACpC,UAAU,eAAe,GAAG,+WAA+W,KAAK,UAAS,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAFra,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAkB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAlB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAkB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,WAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,MAAA;GAAA,YAAA,EAAA,aAAA,qBAAA;GAAA,YAAA,EAAA,cAAA,YAAA;EAAA;EAAA,gBAAA,CAAA,EAAA,WAAA,GAAA,cAAA,CAAA;EAAA,UAAA;CAAA,CAAA;;AAAlB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAkB,YAAA,CAAA;EAP9B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GAA+C,gBAAgB,CAAC,aAAa;GACvF,MAAM;IACJ,aAAa;IACb,gBAAgB;GACjB;EACF,CAAA;;;;;;;;;;;AAMD,MAAa,sBAAsB;CAAC;CAAe;CAAe;AAAkB;ACpCpF,MAAM,eACJ;AAWF,IAAa,WAAb,MAAa,SAAQ;CACV,OAAO,MAA+B,WAAU,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAChD,YAAY,MAAc,IAAE;EAAA,GAAA,YAAA,EAAA,WAAA,YAAA,+BAAA,CAAA;EAAI,OAAO;CAAO,CAAA;CAC9C,SAAS,OAAuC,WAAU,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAChD,UAAU,eAAe,GAAG,cAAc,KAAK,UAAS,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAJpE,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAQ,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAR,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAQ,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,MAAA;GAAA,YAAA,EAAA,aAAA,SAAA;GAAA,YAAA;IAAA,kBAAA;IAAA,cAAA;GAAA;EAAA;EAAA,UAAA,CAAA,UAAA;EAAA,gBAAA,CAAA,EAAA,WAAA,GAAA,cAAA,CAAA;EAAA,UAAA;CAAA,CAAA;;AAAR,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAQ,YAAA,CAAA;EALpB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GAAyB,gBAAgB,CAAC,aAAa;GACjE,UAAU;GACV,MAAM;IAAE,aAAa;IAAU,oBAAoB;IAAU,gBAAgB;GAAW;EACzF,CAAA;;;;;;;;;;;;;;;;;;;;;AAkBD,IAAa,gBAAb,MAAa,cAAa;CACL,SAAS,OAAO,QAAQ;CAC1B,KAAK,OAAqC,UAAU,CAAC,CAAC;CAC9D,YAAY,MAAc,IAAE;EAAA,GAAA,YAAA,EAAA,WAAA,YAAA,+BAAA,CAAA;EAAI,OAAO;CAAO,CAAA;CACpC,UAAU,eAAe,GAAG,qDAAqD,KAAK,UAAS,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAEtH,cAAA;EAEE,qBAAoB;GAClB,IAAI,KAAK,GAAG,YAAY,KAAK,GAAG,eAAe,GAAG,KAAK,OAAO,OAAO,IAAI,QAAQ;QAC5E,IAAI,KAAK,GAAG,YAAY,KAAK,GAAG,KAAK,KAAK,OAAO,OAAO,IAAI,OAAO;EAC1E,CAAC;CACH;CAZW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAa,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAb,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAa,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,WAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,MAAA;GAAA,YAAA,EAAA,aAAA,eAAA;GAAA,WAAA;IAAA,QAAA;IAAA,SAAA;GAAA;GAAA,YAAA;IAAA,UAAA;IAAA,cAAA;GAAA;EAAA;EAAA,UAAA;CAAA,CAAA;;AAAb,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAa,YAAA,CAAA;EAVzB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,MAAM;IACJ,aAAa;IACb,YAAY;IACZ,gBAAgB;IAChB,UAAU;IACV,WAAW;GACZ;EACF,CAAA;;;;;;;;;;;;AA0BD,IAAa,mBAAb,MAAa,iBAAgB;CACR,SAAS,OAAO,QAAQ;CAClC,YAAY,MAAc,IAAE;EAAA,GAAA,YAAA,EAAA,WAAA,YAAA,+BAAA,CAAA;EAAI,OAAO;CAAO,CAAA;CACpC,UAAU,eAC3B,GACE,sIACA,KAAK,UAAS,CAAE,GAEnB,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CARU,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAgB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAhB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAgB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,WAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,MAAA;GAAA,YAAA,EAAA,aAAA,kBAAA;GAAA,YAAA;IAAA,UAAA;IAAA,cAAA;GAAA;EAAA;EAAA,gBAAA,CAAA,EAAA,WAAA,GAAA,cAAA,CAAA;EAAA,UAAA;CAAA,CAAA;;AAAhB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAgB,YAAA,CAAA;EAR5B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GAA0C,gBAAgB,CAAC,aAAa;GAClF,MAAM;IACJ,aAAa;IACb,YAAY;IACZ,gBAAgB;GACjB;EACF,CAAA;;;;;;;;;;;AAoBD,IAAa,uBAAb,MAAa,qBAAoB;CACtB,MAAM,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,MAAA,CAAA,+BAAA,CAAA,CAAA;CACvB,MAAM,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,MAAA,CAAA,+BAAA,CAAA,CAAA;CACvB,SAAS,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAC1B,QAAQ,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACzB,YAAY,MAAc,IAAE;EAAA,GAAA,YAAA,EAAA,WAAA,YAAA,+BAAA,CAAA;EAAI,OAAO;CAAO,CAAA;CAL5C,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAoB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAApB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAoB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,KAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,KAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,QAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,MAAA,EAAA,gBAAA,WAAA;EAAA,UAAA;EAAA,UAFrB;EAA2J,UAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MA1C1J;GAAa,UAAA;GAAA,QAAA,CAAA,OAAA;EAAA,CAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AA4Cb,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAoB,YAAA,CAAA;EAPhC,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS,CAAC,aAAa;GACvB,iBAAiB,wBAAwB;GACzC,MAAM,EAAE,OAAO,WAAU;GACzB,UAAU;EACX,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASD,MAAa,YAAY;CAAC;CAAU;CAAe;CAAsB;CAAkB,GAAG;AAAmB"}