@atomng/ui 1.0.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 (299) hide show
  1. package/README.md +401 -0
  2. package/atomng-ui.d.ts.map +1 -0
  3. package/atoms/atomng-ui-atoms.d.ts.map +1 -0
  4. package/atoms/avatar/avatar.component.d.ts +24 -0
  5. package/atoms/avatar/avatar.component.d.ts.map +1 -0
  6. package/atoms/avatar/index.d.ts +3 -0
  7. package/atoms/avatar/index.d.ts.map +1 -0
  8. package/atoms/badge/badge.component.d.ts +23 -0
  9. package/atoms/badge/badge.component.d.ts.map +1 -0
  10. package/atoms/badge/index.d.ts +3 -0
  11. package/atoms/badge/index.d.ts.map +1 -0
  12. package/atoms/button/button.component.d.ts +47 -0
  13. package/atoms/button/button.component.d.ts.map +1 -0
  14. package/atoms/button/index.d.ts +3 -0
  15. package/atoms/button/index.d.ts.map +1 -0
  16. package/atoms/checkbox/checkbox.component.d.ts +28 -0
  17. package/atoms/checkbox/checkbox.component.d.ts.map +1 -0
  18. package/atoms/checkbox/index.d.ts +2 -0
  19. package/atoms/checkbox/index.d.ts.map +1 -0
  20. package/atoms/chip/chip.component.d.ts +17 -0
  21. package/atoms/chip/chip.component.d.ts.map +1 -0
  22. package/atoms/chip/index.d.ts +2 -0
  23. package/atoms/chip/index.d.ts.map +1 -0
  24. package/atoms/index.d.ts +14 -0
  25. package/atoms/index.d.ts.map +1 -0
  26. package/atoms/kbd/index.d.ts +2 -0
  27. package/atoms/kbd/index.d.ts.map +1 -0
  28. package/atoms/kbd/kbd.component.d.ts +14 -0
  29. package/atoms/kbd/kbd.component.d.ts.map +1 -0
  30. package/atoms/link/index.d.ts +2 -0
  31. package/atoms/link/index.d.ts.map +1 -0
  32. package/atoms/link/link.component.d.ts +15 -0
  33. package/atoms/link/link.component.d.ts.map +1 -0
  34. package/atoms/progress/index.d.ts +3 -0
  35. package/atoms/progress/index.d.ts.map +1 -0
  36. package/atoms/progress/progress.component.d.ts +20 -0
  37. package/atoms/progress/progress.component.d.ts.map +1 -0
  38. package/atoms/separator/index.d.ts +2 -0
  39. package/atoms/separator/index.d.ts.map +1 -0
  40. package/atoms/separator/separator.component.d.ts +13 -0
  41. package/atoms/separator/separator.component.d.ts.map +1 -0
  42. package/atoms/skeleton/index.d.ts +2 -0
  43. package/atoms/skeleton/index.d.ts.map +1 -0
  44. package/atoms/skeleton/skeleton.component.d.ts +13 -0
  45. package/atoms/skeleton/skeleton.component.d.ts.map +1 -0
  46. package/atoms/slider/index.d.ts +2 -0
  47. package/atoms/slider/index.d.ts.map +1 -0
  48. package/atoms/slider/slider.component.d.ts +27 -0
  49. package/atoms/slider/slider.component.d.ts.map +1 -0
  50. package/atoms/switch/index.d.ts +2 -0
  51. package/atoms/switch/index.d.ts.map +1 -0
  52. package/atoms/switch/switch.component.d.ts +25 -0
  53. package/atoms/switch/switch.component.d.ts.map +1 -0
  54. package/atoms/tooltip/index.d.ts +2 -0
  55. package/atoms/tooltip/index.d.ts.map +1 -0
  56. package/atoms/tooltip/tooltip.component.d.ts +15 -0
  57. package/atoms/tooltip/tooltip.component.d.ts.map +1 -0
  58. package/fesm2022/atomng-ui-atoms.mjs +778 -0
  59. package/fesm2022/atomng-ui-atoms.mjs.map +1 -0
  60. package/fesm2022/atomng-ui-molecules.mjs +1590 -0
  61. package/fesm2022/atomng-ui-molecules.mjs.map +1 -0
  62. package/fesm2022/atomng-ui-organisms.mjs +1346 -0
  63. package/fesm2022/atomng-ui-organisms.mjs.map +1 -0
  64. package/fesm2022/atomng-ui-tokens.mjs +499 -0
  65. package/fesm2022/atomng-ui-tokens.mjs.map +1 -0
  66. package/fesm2022/atomng-ui.mjs +4184 -0
  67. package/fesm2022/atomng-ui.mjs.map +1 -0
  68. package/index.d.ts +5 -0
  69. package/index.d.ts.map +1 -0
  70. package/lib/atoms/avatar/avatar.component.d.ts +24 -0
  71. package/lib/atoms/avatar/avatar.component.d.ts.map +1 -0
  72. package/lib/atoms/avatar/index.d.ts +3 -0
  73. package/lib/atoms/avatar/index.d.ts.map +1 -0
  74. package/lib/atoms/badge/badge.component.d.ts +23 -0
  75. package/lib/atoms/badge/badge.component.d.ts.map +1 -0
  76. package/lib/atoms/badge/index.d.ts +3 -0
  77. package/lib/atoms/badge/index.d.ts.map +1 -0
  78. package/lib/atoms/button/button.component.d.ts +47 -0
  79. package/lib/atoms/button/button.component.d.ts.map +1 -0
  80. package/lib/atoms/button/index.d.ts +3 -0
  81. package/lib/atoms/button/index.d.ts.map +1 -0
  82. package/lib/atoms/checkbox/checkbox.component.d.ts +28 -0
  83. package/lib/atoms/checkbox/checkbox.component.d.ts.map +1 -0
  84. package/lib/atoms/checkbox/index.d.ts +2 -0
  85. package/lib/atoms/checkbox/index.d.ts.map +1 -0
  86. package/lib/atoms/chip/chip.component.d.ts +17 -0
  87. package/lib/atoms/chip/chip.component.d.ts.map +1 -0
  88. package/lib/atoms/chip/index.d.ts +2 -0
  89. package/lib/atoms/chip/index.d.ts.map +1 -0
  90. package/lib/atoms/index.d.ts +14 -0
  91. package/lib/atoms/index.d.ts.map +1 -0
  92. package/lib/atoms/kbd/index.d.ts +2 -0
  93. package/lib/atoms/kbd/index.d.ts.map +1 -0
  94. package/lib/atoms/kbd/kbd.component.d.ts +14 -0
  95. package/lib/atoms/kbd/kbd.component.d.ts.map +1 -0
  96. package/lib/atoms/link/index.d.ts +2 -0
  97. package/lib/atoms/link/index.d.ts.map +1 -0
  98. package/lib/atoms/link/link.component.d.ts +15 -0
  99. package/lib/atoms/link/link.component.d.ts.map +1 -0
  100. package/lib/atoms/progress/index.d.ts +3 -0
  101. package/lib/atoms/progress/index.d.ts.map +1 -0
  102. package/lib/atoms/progress/progress.component.d.ts +20 -0
  103. package/lib/atoms/progress/progress.component.d.ts.map +1 -0
  104. package/lib/atoms/separator/index.d.ts +2 -0
  105. package/lib/atoms/separator/index.d.ts.map +1 -0
  106. package/lib/atoms/separator/separator.component.d.ts +13 -0
  107. package/lib/atoms/separator/separator.component.d.ts.map +1 -0
  108. package/lib/atoms/skeleton/index.d.ts +2 -0
  109. package/lib/atoms/skeleton/index.d.ts.map +1 -0
  110. package/lib/atoms/skeleton/skeleton.component.d.ts +13 -0
  111. package/lib/atoms/skeleton/skeleton.component.d.ts.map +1 -0
  112. package/lib/atoms/slider/index.d.ts +2 -0
  113. package/lib/atoms/slider/index.d.ts.map +1 -0
  114. package/lib/atoms/slider/slider.component.d.ts +27 -0
  115. package/lib/atoms/slider/slider.component.d.ts.map +1 -0
  116. package/lib/atoms/switch/index.d.ts +2 -0
  117. package/lib/atoms/switch/index.d.ts.map +1 -0
  118. package/lib/atoms/switch/switch.component.d.ts +25 -0
  119. package/lib/atoms/switch/switch.component.d.ts.map +1 -0
  120. package/lib/atoms/tooltip/index.d.ts +2 -0
  121. package/lib/atoms/tooltip/index.d.ts.map +1 -0
  122. package/lib/atoms/tooltip/tooltip.component.d.ts +15 -0
  123. package/lib/atoms/tooltip/tooltip.component.d.ts.map +1 -0
  124. package/lib/molecules/alert/alert.component.d.ts +22 -0
  125. package/lib/molecules/alert/alert.component.d.ts.map +1 -0
  126. package/lib/molecules/alert/index.d.ts +2 -0
  127. package/lib/molecules/alert/index.d.ts.map +1 -0
  128. package/lib/molecules/avatar-group/avatar-group.component.d.ts +22 -0
  129. package/lib/molecules/avatar-group/avatar-group.component.d.ts.map +1 -0
  130. package/lib/molecules/avatar-group/index.d.ts +2 -0
  131. package/lib/molecules/avatar-group/index.d.ts.map +1 -0
  132. package/lib/molecules/breadcrumb/breadcrumb.component.d.ts +17 -0
  133. package/lib/molecules/breadcrumb/breadcrumb.component.d.ts.map +1 -0
  134. package/lib/molecules/breadcrumb/index.d.ts +2 -0
  135. package/lib/molecules/breadcrumb/index.d.ts.map +1 -0
  136. package/lib/molecules/button-group/button-group.component.d.ts +11 -0
  137. package/lib/molecules/button-group/button-group.component.d.ts.map +1 -0
  138. package/lib/molecules/button-group/index.d.ts +2 -0
  139. package/lib/molecules/button-group/index.d.ts.map +1 -0
  140. package/lib/molecules/form-field/form-field.component.d.ts +18 -0
  141. package/lib/molecules/form-field/form-field.component.d.ts.map +1 -0
  142. package/lib/molecules/form-field/index.d.ts +2 -0
  143. package/lib/molecules/form-field/index.d.ts.map +1 -0
  144. package/lib/molecules/index.d.ts +13 -0
  145. package/lib/molecules/index.d.ts.map +1 -0
  146. package/lib/molecules/input/index.d.ts +2 -0
  147. package/lib/molecules/input/index.d.ts.map +1 -0
  148. package/lib/molecules/input/input.component.d.ts +50 -0
  149. package/lib/molecules/input/input.component.d.ts.map +1 -0
  150. package/lib/molecules/pagination/index.d.ts +2 -0
  151. package/lib/molecules/pagination/index.d.ts.map +1 -0
  152. package/lib/molecules/pagination/pagination.component.d.ts +18 -0
  153. package/lib/molecules/pagination/pagination.component.d.ts.map +1 -0
  154. package/lib/molecules/select/index.d.ts +3 -0
  155. package/lib/molecules/select/index.d.ts.map +1 -0
  156. package/lib/molecules/select/select.component.d.ts +56 -0
  157. package/lib/molecules/select/select.component.d.ts.map +1 -0
  158. package/lib/molecules/select-search/index.d.ts +2 -0
  159. package/lib/molecules/select-search/index.d.ts.map +1 -0
  160. package/lib/molecules/select-search/select-search.component.d.ts +63 -0
  161. package/lib/molecules/select-search/select-search.component.d.ts.map +1 -0
  162. package/lib/molecules/tabs/index.d.ts +2 -0
  163. package/lib/molecules/tabs/index.d.ts.map +1 -0
  164. package/lib/molecules/tabs/tabs.component.d.ts +23 -0
  165. package/lib/molecules/tabs/tabs.component.d.ts.map +1 -0
  166. package/lib/molecules/textarea/index.d.ts +2 -0
  167. package/lib/molecules/textarea/index.d.ts.map +1 -0
  168. package/lib/molecules/textarea/textarea.component.d.ts +27 -0
  169. package/lib/molecules/textarea/textarea.component.d.ts.map +1 -0
  170. package/lib/molecules/toast/index.d.ts +2 -0
  171. package/lib/molecules/toast/index.d.ts.map +1 -0
  172. package/lib/molecules/toast/toast.component.d.ts +19 -0
  173. package/lib/molecules/toast/toast.component.d.ts.map +1 -0
  174. package/lib/organisms/accordion/accordion.component.d.ts +25 -0
  175. package/lib/organisms/accordion/accordion.component.d.ts.map +1 -0
  176. package/lib/organisms/card/card.component.d.ts +14 -0
  177. package/lib/organisms/card/card.component.d.ts.map +1 -0
  178. package/lib/organisms/dropdown-menu/dropdown-menu.component.d.ts +29 -0
  179. package/lib/organisms/dropdown-menu/dropdown-menu.component.d.ts.map +1 -0
  180. package/lib/organisms/index.d.ts +8 -0
  181. package/lib/organisms/index.d.ts.map +1 -0
  182. package/lib/organisms/modal/modal.component.d.ts +19 -0
  183. package/lib/organisms/modal/modal.component.d.ts.map +1 -0
  184. package/lib/organisms/navigation-menu/navigation-menu.component.d.ts +24 -0
  185. package/lib/organisms/navigation-menu/navigation-menu.component.d.ts.map +1 -0
  186. package/lib/organisms/sidebar/sidebar.component.d.ts +68 -0
  187. package/lib/organisms/sidebar/sidebar.component.d.ts.map +1 -0
  188. package/lib/organisms/table/index.d.ts +3 -0
  189. package/lib/organisms/table/index.d.ts.map +1 -0
  190. package/lib/organisms/table/table-cell.directive.d.ts +17 -0
  191. package/lib/organisms/table/table-cell.directive.d.ts.map +1 -0
  192. package/lib/organisms/table/table.component.d.ts +50 -0
  193. package/lib/organisms/table/table.component.d.ts.map +1 -0
  194. package/lib/tokens/index.d.ts +2 -0
  195. package/lib/tokens/index.d.ts.map +1 -0
  196. package/lib/tokens/theme/color-presets.d.ts +24 -0
  197. package/lib/tokens/theme/color-presets.d.ts.map +1 -0
  198. package/lib/tokens/theme/index.d.ts +6 -0
  199. package/lib/tokens/theme/index.d.ts.map +1 -0
  200. package/lib/tokens/theme/theme-picker.component.d.ts +11 -0
  201. package/lib/tokens/theme/theme-picker.component.d.ts.map +1 -0
  202. package/lib/tokens/theme/theme-toggle.component.d.ts +15 -0
  203. package/lib/tokens/theme/theme-toggle.component.d.ts.map +1 -0
  204. package/lib/tokens/theme/theme.provider.d.ts +4 -0
  205. package/lib/tokens/theme/theme.provider.d.ts.map +1 -0
  206. package/lib/tokens/theme/theme.service.d.ts +48 -0
  207. package/lib/tokens/theme/theme.service.d.ts.map +1 -0
  208. package/molecules/alert/alert.component.d.ts +22 -0
  209. package/molecules/alert/alert.component.d.ts.map +1 -0
  210. package/molecules/alert/index.d.ts +2 -0
  211. package/molecules/alert/index.d.ts.map +1 -0
  212. package/molecules/atomng-ui-molecules.d.ts.map +1 -0
  213. package/molecules/avatar-group/avatar-group.component.d.ts +22 -0
  214. package/molecules/avatar-group/avatar-group.component.d.ts.map +1 -0
  215. package/molecules/avatar-group/index.d.ts +2 -0
  216. package/molecules/avatar-group/index.d.ts.map +1 -0
  217. package/molecules/breadcrumb/breadcrumb.component.d.ts +17 -0
  218. package/molecules/breadcrumb/breadcrumb.component.d.ts.map +1 -0
  219. package/molecules/breadcrumb/index.d.ts +2 -0
  220. package/molecules/breadcrumb/index.d.ts.map +1 -0
  221. package/molecules/button-group/button-group.component.d.ts +11 -0
  222. package/molecules/button-group/button-group.component.d.ts.map +1 -0
  223. package/molecules/button-group/index.d.ts +2 -0
  224. package/molecules/button-group/index.d.ts.map +1 -0
  225. package/molecules/form-field/form-field.component.d.ts +18 -0
  226. package/molecules/form-field/form-field.component.d.ts.map +1 -0
  227. package/molecules/form-field/index.d.ts +2 -0
  228. package/molecules/form-field/index.d.ts.map +1 -0
  229. package/molecules/index.d.ts +13 -0
  230. package/molecules/index.d.ts.map +1 -0
  231. package/molecules/input/index.d.ts +2 -0
  232. package/molecules/input/index.d.ts.map +1 -0
  233. package/molecules/input/input.component.d.ts +50 -0
  234. package/molecules/input/input.component.d.ts.map +1 -0
  235. package/molecules/pagination/index.d.ts +2 -0
  236. package/molecules/pagination/index.d.ts.map +1 -0
  237. package/molecules/pagination/pagination.component.d.ts +18 -0
  238. package/molecules/pagination/pagination.component.d.ts.map +1 -0
  239. package/molecules/select/index.d.ts +3 -0
  240. package/molecules/select/index.d.ts.map +1 -0
  241. package/molecules/select/select.component.d.ts +56 -0
  242. package/molecules/select/select.component.d.ts.map +1 -0
  243. package/molecules/select-search/index.d.ts +2 -0
  244. package/molecules/select-search/index.d.ts.map +1 -0
  245. package/molecules/select-search/select-search.component.d.ts +63 -0
  246. package/molecules/select-search/select-search.component.d.ts.map +1 -0
  247. package/molecules/tabs/index.d.ts +2 -0
  248. package/molecules/tabs/index.d.ts.map +1 -0
  249. package/molecules/tabs/tabs.component.d.ts +23 -0
  250. package/molecules/tabs/tabs.component.d.ts.map +1 -0
  251. package/molecules/textarea/index.d.ts +2 -0
  252. package/molecules/textarea/index.d.ts.map +1 -0
  253. package/molecules/textarea/textarea.component.d.ts +27 -0
  254. package/molecules/textarea/textarea.component.d.ts.map +1 -0
  255. package/molecules/toast/index.d.ts +2 -0
  256. package/molecules/toast/index.d.ts.map +1 -0
  257. package/molecules/toast/toast.component.d.ts +19 -0
  258. package/molecules/toast/toast.component.d.ts.map +1 -0
  259. package/organisms/accordion/accordion.component.d.ts +25 -0
  260. package/organisms/accordion/accordion.component.d.ts.map +1 -0
  261. package/organisms/atomng-ui-organisms.d.ts.map +1 -0
  262. package/organisms/card/card.component.d.ts +14 -0
  263. package/organisms/card/card.component.d.ts.map +1 -0
  264. package/organisms/dropdown-menu/dropdown-menu.component.d.ts +29 -0
  265. package/organisms/dropdown-menu/dropdown-menu.component.d.ts.map +1 -0
  266. package/organisms/index.d.ts +8 -0
  267. package/organisms/index.d.ts.map +1 -0
  268. package/organisms/modal/modal.component.d.ts +19 -0
  269. package/organisms/modal/modal.component.d.ts.map +1 -0
  270. package/organisms/navigation-menu/navigation-menu.component.d.ts +24 -0
  271. package/organisms/navigation-menu/navigation-menu.component.d.ts.map +1 -0
  272. package/organisms/sidebar/sidebar.component.d.ts +68 -0
  273. package/organisms/sidebar/sidebar.component.d.ts.map +1 -0
  274. package/organisms/table/index.d.ts +3 -0
  275. package/organisms/table/index.d.ts.map +1 -0
  276. package/organisms/table/table-cell.directive.d.ts +17 -0
  277. package/organisms/table/table-cell.directive.d.ts.map +1 -0
  278. package/organisms/table/table.component.d.ts +50 -0
  279. package/organisms/table/table.component.d.ts.map +1 -0
  280. package/package.json +81 -0
  281. package/tokens/_colors.scss +150 -0
  282. package/tokens/_spacing.scss +98 -0
  283. package/tokens/_typography.scss +59 -0
  284. package/tokens/atomng-ui-tokens.d.ts.map +1 -0
  285. package/tokens/index.d.ts +2 -0
  286. package/tokens/index.d.ts.map +1 -0
  287. package/tokens/index.scss +8 -0
  288. package/tokens/theme/color-presets.d.ts +24 -0
  289. package/tokens/theme/color-presets.d.ts.map +1 -0
  290. package/tokens/theme/index.d.ts +6 -0
  291. package/tokens/theme/index.d.ts.map +1 -0
  292. package/tokens/theme/theme-picker.component.d.ts +11 -0
  293. package/tokens/theme/theme-picker.component.d.ts.map +1 -0
  294. package/tokens/theme/theme-toggle.component.d.ts +15 -0
  295. package/tokens/theme/theme-toggle.component.d.ts.map +1 -0
  296. package/tokens/theme/theme.provider.d.ts +4 -0
  297. package/tokens/theme/theme.provider.d.ts.map +1 -0
  298. package/tokens/theme/theme.service.d.ts +48 -0
  299. package/tokens/theme/theme.service.d.ts.map +1 -0
@@ -0,0 +1,778 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, signal, computed, ChangeDetectionStrategy, Component, model, forwardRef } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
5
+ import * as i1 from '@angular/router';
6
+ import { RouterModule } from '@angular/router';
7
+
8
+ /**
9
+ * Avatar Atom
10
+ * Source: Nuxt UI v3 — ❖ Avatar
11
+ * Shows: image → initials → icon fallback
12
+ * Sizes: xs(20) sm(24) md(32) lg(40) xl(48) 2xl(64) 3xl(80)
13
+ */
14
+ class AvatarComponent {
15
+ constructor() {
16
+ this.src = input(null);
17
+ this.alt = input(null);
18
+ this.size = input('md');
19
+ this.initials = input(null);
20
+ this.chip = input(false);
21
+ this.chipColor = input('success');
22
+ this.chipAlt = input(null);
23
+ this.rounded = input(true);
24
+ this.imgError = signal(false);
25
+ this.classes = computed(() => {
26
+ const cls = ['ui-avatar', `ui-avatar--${this.size()}`];
27
+ if (!this.rounded())
28
+ cls.push('ui-avatar--square');
29
+ return cls.join(' ');
30
+ });
31
+ }
32
+ onImgError() { this.imgError.set(true); }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: AvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: AvatarComponent, isStandalone: true, selector: "ui-avatar", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, initials: { classPropertyName: "initials", publicName: "initials", isSignal: true, isRequired: false, transformFunction: null }, chip: { classPropertyName: "chip", publicName: "chip", isSignal: true, isRequired: false, transformFunction: null }, chipColor: { classPropertyName: "chipColor", publicName: "chipColor", isSignal: true, isRequired: false, transformFunction: null }, chipAlt: { classPropertyName: "chipAlt", publicName: "chipAlt", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
35
+ <span [class]="classes()" [attr.aria-label]="alt() ?? null">
36
+ @if (src() && !imgError()) {
37
+ <img
38
+ [src]="src()"
39
+ [alt]="alt() ?? ''"
40
+ (error)="onImgError()"
41
+ class="ui-avatar__img"
42
+ />
43
+ } @else if (initials()) {
44
+ <span class="ui-avatar__initials" aria-hidden="true">{{ initials() }}</span>
45
+ } @else {
46
+ <span class="ui-avatar__icon" aria-hidden="true">
47
+ <ng-content />
48
+ </span>
49
+ }
50
+
51
+ @if (chip()) {
52
+ <span
53
+ class="ui-avatar__chip"
54
+ [class]="'ui-avatar__chip--' + chipColor()"
55
+ [attr.aria-label]="chipAlt()"
56
+ ></span>
57
+ }
58
+ </span>
59
+ `, isInline: true, styles: [".ui-avatar{position:relative;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-full);background:var(--color-neutral-100);color:var(--color-neutral-500);overflow:hidden;flex-shrink:0;font-family:var(--font-sans);font-weight:var(--font-medium)}.ui-avatar--square{border-radius:var(--radius-md)}.ui-avatar--xs{width:20px;height:20px;font-size:10px}.ui-avatar--sm{width:24px;height:24px;font-size:11px}.ui-avatar--md{width:32px;height:32px;font-size:13px}.ui-avatar--lg{width:40px;height:40px;font-size:15px}.ui-avatar--xl{width:48px;height:48px;font-size:18px}.ui-avatar--2xl{width:64px;height:64px;font-size:22px}.ui-avatar--3xl{width:80px;height:80px;font-size:28px}.ui-avatar__img{width:100%;height:100%;object-fit:cover;border-radius:inherit}.ui-avatar__initials{line-height:1;letter-spacing:var(--tracking-wide);text-transform:uppercase;-webkit-user-select:none;user-select:none}.ui-avatar__icon{display:flex;align-items:center;justify-content:center;width:60%;height:60%}.ui-avatar__chip{position:absolute;bottom:0;right:0;width:30%;height:30%;min-width:8px;min-height:8px;border-radius:50%;border:2px solid var(--color-bg)}.ui-avatar__chip--online{background:var(--color-success-500)}.ui-avatar__chip--idle{background:var(--color-warning-500)}.ui-avatar__chip--busy{background:var(--color-error-500)}.ui-avatar__chip--offline{background:var(--color-neutral-400)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
60
+ }
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: AvatarComponent, decorators: [{
62
+ type: Component,
63
+ args: [{ selector: 'ui-avatar', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
64
+ <span [class]="classes()" [attr.aria-label]="alt() ?? null">
65
+ @if (src() && !imgError()) {
66
+ <img
67
+ [src]="src()"
68
+ [alt]="alt() ?? ''"
69
+ (error)="onImgError()"
70
+ class="ui-avatar__img"
71
+ />
72
+ } @else if (initials()) {
73
+ <span class="ui-avatar__initials" aria-hidden="true">{{ initials() }}</span>
74
+ } @else {
75
+ <span class="ui-avatar__icon" aria-hidden="true">
76
+ <ng-content />
77
+ </span>
78
+ }
79
+
80
+ @if (chip()) {
81
+ <span
82
+ class="ui-avatar__chip"
83
+ [class]="'ui-avatar__chip--' + chipColor()"
84
+ [attr.aria-label]="chipAlt()"
85
+ ></span>
86
+ }
87
+ </span>
88
+ `, styles: [".ui-avatar{position:relative;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-full);background:var(--color-neutral-100);color:var(--color-neutral-500);overflow:hidden;flex-shrink:0;font-family:var(--font-sans);font-weight:var(--font-medium)}.ui-avatar--square{border-radius:var(--radius-md)}.ui-avatar--xs{width:20px;height:20px;font-size:10px}.ui-avatar--sm{width:24px;height:24px;font-size:11px}.ui-avatar--md{width:32px;height:32px;font-size:13px}.ui-avatar--lg{width:40px;height:40px;font-size:15px}.ui-avatar--xl{width:48px;height:48px;font-size:18px}.ui-avatar--2xl{width:64px;height:64px;font-size:22px}.ui-avatar--3xl{width:80px;height:80px;font-size:28px}.ui-avatar__img{width:100%;height:100%;object-fit:cover;border-radius:inherit}.ui-avatar__initials{line-height:1;letter-spacing:var(--tracking-wide);text-transform:uppercase;-webkit-user-select:none;user-select:none}.ui-avatar__icon{display:flex;align-items:center;justify-content:center;width:60%;height:60%}.ui-avatar__chip{position:absolute;bottom:0;right:0;width:30%;height:30%;min-width:8px;min-height:8px;border-radius:50%;border:2px solid var(--color-bg)}.ui-avatar__chip--online{background:var(--color-success-500)}.ui-avatar__chip--idle{background:var(--color-warning-500)}.ui-avatar__chip--busy{background:var(--color-error-500)}.ui-avatar__chip--offline{background:var(--color-neutral-400)}\n"] }]
89
+ }] });
90
+
91
+ /**
92
+ * Badge Atom
93
+ * Source: Nuxt UI v3 — ❖ Badge
94
+ * Colors: Neutral | Primary | Secondary | Success | Info | Warning | Error
95
+ * Variants: Outline | Soft | Solid | Subtle
96
+ * Sizes: xs | sm | md | lg | xl
97
+ * RoundedFull: True | False
98
+ */
99
+ class BadgeComponent {
100
+ constructor() {
101
+ this.variant = input('soft');
102
+ this.color = input('neutral');
103
+ this.size = input('md');
104
+ this.rounded = input(false);
105
+ this.dot = input(false);
106
+ this.classes = computed(() => {
107
+ const cls = ['ui-badge', `ui-badge--${this.variant()}`, `ui-badge--${this.color()}`, `ui-badge--${this.size()}`];
108
+ if (this.rounded())
109
+ cls.push('ui-badge--rounded');
110
+ return cls.join(' ');
111
+ });
112
+ }
113
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: BadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
114
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: BadgeComponent, isStandalone: true, selector: "ui-badge", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, dot: { classPropertyName: "dot", publicName: "dot", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
115
+ <span [class]="classes()">
116
+ @if (dot()) {
117
+ <span class="ui-badge__dot" aria-hidden="true"></span>
118
+ }
119
+ <ng-content />
120
+ </span>
121
+ `, isInline: true, styles: [".ui-badge{display:inline-flex;align-items:center;gap:.25rem;font-family:var(--font-sans);font-weight:var(--font-medium);white-space:nowrap;border:1px solid transparent;border-radius:var(--radius-md)}.ui-badge--rounded{border-radius:var(--radius-full)}.ui-badge__dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex-shrink:0}.ui-badge--xs{padding:0 6px;font-size:var(--text-xs);height:18px}.ui-badge--sm{padding:0 8px;font-size:var(--text-xs);height:20px}.ui-badge--md{padding:0 10px;font-size:var(--text-sm);height:22px}.ui-badge--lg{padding:0 10px;font-size:var(--text-sm);height:24px}.ui-badge--xl{padding:0 12px;font-size:var(--text-md);height:28px}.ui-badge--primary.ui-badge--solid{background:var(--color-primary-500);color:#fff}.ui-badge--primary.ui-badge--outline{color:var(--color-primary-500);border-color:var(--color-primary-500);background:transparent}.ui-badge--primary.ui-badge--soft{background:color-mix(in srgb,var(--color-primary-500) 15%,transparent);color:var(--color-primary-700)}.ui-badge--primary.ui-badge--subtle{background:color-mix(in srgb,var(--color-primary-500) 10%,transparent);color:var(--color-primary-600)}.ui-badge--neutral.ui-badge--solid{background:var(--color-neutral-800);color:#fff}.ui-badge--neutral.ui-badge--outline{color:var(--color-neutral-600);border-color:var(--color-neutral-300);background:transparent}.ui-badge--neutral.ui-badge--soft{background:var(--color-neutral-100);color:var(--color-neutral-700)}.ui-badge--neutral.ui-badge--subtle{background:var(--color-neutral-50);color:var(--color-neutral-600)}.ui-badge--success.ui-badge--solid{background:var(--color-success-500);color:#fff}.ui-badge--success.ui-badge--outline{color:var(--color-success-600);border-color:var(--color-success-500);background:transparent}.ui-badge--success.ui-badge--soft{background:color-mix(in srgb,var(--color-success-500) 15%,transparent);color:var(--color-success-700)}.ui-badge--success.ui-badge--subtle{background:color-mix(in srgb,var(--color-success-500) 10%,transparent);color:var(--color-success-600)}.ui-badge--warning.ui-badge--solid{background:var(--color-warning-500);color:#fff}.ui-badge--warning.ui-badge--outline{color:var(--color-warning-600);border-color:var(--color-warning-500);background:transparent}.ui-badge--warning.ui-badge--soft{background:color-mix(in srgb,var(--color-warning-500) 15%,transparent);color:var(--color-warning-700)}.ui-badge--warning.ui-badge--subtle{background:color-mix(in srgb,var(--color-warning-500) 10%,transparent);color:var(--color-warning-600)}.ui-badge--error.ui-badge--solid{background:var(--color-error-500);color:#fff}.ui-badge--error.ui-badge--outline{color:var(--color-error-600);border-color:var(--color-error-500);background:transparent}.ui-badge--error.ui-badge--soft{background:color-mix(in srgb,var(--color-error-500) 15%,transparent);color:var(--color-error-700)}.ui-badge--error.ui-badge--subtle{background:color-mix(in srgb,var(--color-error-500) 10%,transparent);color:var(--color-error-600)}.ui-badge--info.ui-badge--solid{background:var(--color-info-500);color:#fff}.ui-badge--info.ui-badge--outline{color:var(--color-info-600);border-color:var(--color-info-500);background:transparent}.ui-badge--info.ui-badge--soft{background:color-mix(in srgb,var(--color-info-500) 15%,transparent);color:var(--color-info-700)}.ui-badge--info.ui-badge--subtle{background:color-mix(in srgb,var(--color-info-500) 10%,transparent);color:var(--color-info-600)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
122
+ }
123
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: BadgeComponent, decorators: [{
124
+ type: Component,
125
+ args: [{ selector: 'ui-badge', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
126
+ <span [class]="classes()">
127
+ @if (dot()) {
128
+ <span class="ui-badge__dot" aria-hidden="true"></span>
129
+ }
130
+ <ng-content />
131
+ </span>
132
+ `, styles: [".ui-badge{display:inline-flex;align-items:center;gap:.25rem;font-family:var(--font-sans);font-weight:var(--font-medium);white-space:nowrap;border:1px solid transparent;border-radius:var(--radius-md)}.ui-badge--rounded{border-radius:var(--radius-full)}.ui-badge__dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex-shrink:0}.ui-badge--xs{padding:0 6px;font-size:var(--text-xs);height:18px}.ui-badge--sm{padding:0 8px;font-size:var(--text-xs);height:20px}.ui-badge--md{padding:0 10px;font-size:var(--text-sm);height:22px}.ui-badge--lg{padding:0 10px;font-size:var(--text-sm);height:24px}.ui-badge--xl{padding:0 12px;font-size:var(--text-md);height:28px}.ui-badge--primary.ui-badge--solid{background:var(--color-primary-500);color:#fff}.ui-badge--primary.ui-badge--outline{color:var(--color-primary-500);border-color:var(--color-primary-500);background:transparent}.ui-badge--primary.ui-badge--soft{background:color-mix(in srgb,var(--color-primary-500) 15%,transparent);color:var(--color-primary-700)}.ui-badge--primary.ui-badge--subtle{background:color-mix(in srgb,var(--color-primary-500) 10%,transparent);color:var(--color-primary-600)}.ui-badge--neutral.ui-badge--solid{background:var(--color-neutral-800);color:#fff}.ui-badge--neutral.ui-badge--outline{color:var(--color-neutral-600);border-color:var(--color-neutral-300);background:transparent}.ui-badge--neutral.ui-badge--soft{background:var(--color-neutral-100);color:var(--color-neutral-700)}.ui-badge--neutral.ui-badge--subtle{background:var(--color-neutral-50);color:var(--color-neutral-600)}.ui-badge--success.ui-badge--solid{background:var(--color-success-500);color:#fff}.ui-badge--success.ui-badge--outline{color:var(--color-success-600);border-color:var(--color-success-500);background:transparent}.ui-badge--success.ui-badge--soft{background:color-mix(in srgb,var(--color-success-500) 15%,transparent);color:var(--color-success-700)}.ui-badge--success.ui-badge--subtle{background:color-mix(in srgb,var(--color-success-500) 10%,transparent);color:var(--color-success-600)}.ui-badge--warning.ui-badge--solid{background:var(--color-warning-500);color:#fff}.ui-badge--warning.ui-badge--outline{color:var(--color-warning-600);border-color:var(--color-warning-500);background:transparent}.ui-badge--warning.ui-badge--soft{background:color-mix(in srgb,var(--color-warning-500) 15%,transparent);color:var(--color-warning-700)}.ui-badge--warning.ui-badge--subtle{background:color-mix(in srgb,var(--color-warning-500) 10%,transparent);color:var(--color-warning-600)}.ui-badge--error.ui-badge--solid{background:var(--color-error-500);color:#fff}.ui-badge--error.ui-badge--outline{color:var(--color-error-600);border-color:var(--color-error-500);background:transparent}.ui-badge--error.ui-badge--soft{background:color-mix(in srgb,var(--color-error-500) 15%,transparent);color:var(--color-error-700)}.ui-badge--error.ui-badge--subtle{background:color-mix(in srgb,var(--color-error-500) 10%,transparent);color:var(--color-error-600)}.ui-badge--info.ui-badge--solid{background:var(--color-info-500);color:#fff}.ui-badge--info.ui-badge--outline{color:var(--color-info-600);border-color:var(--color-info-500);background:transparent}.ui-badge--info.ui-badge--soft{background:color-mix(in srgb,var(--color-info-500) 15%,transparent);color:var(--color-info-700)}.ui-badge--info.ui-badge--subtle{background:color-mix(in srgb,var(--color-info-500) 10%,transparent);color:var(--color-info-600)}\n"] }]
133
+ }] });
134
+
135
+ /**
136
+ * Button Atom
137
+ * Source: Nuxt UI v3 Design Kit — ❖ Button
138
+ *
139
+ * Variants: solid | outline | soft | subtle | ghost | link
140
+ * Sizes: xs (h:24px) | sm (h:28px) | md (h:32px) | lg (h:36px) | xl (h:40px)
141
+ * States: default | hover | focus | disabled | loading
142
+ *
143
+ * @example
144
+ * <ui-button variant="solid" color="primary" size="md">Click me</ui-button>
145
+ * <ui-button variant="outline" [loading]="true">Loading</ui-button>
146
+ * <ui-button [square]="true" leadingIcon="plus" />
147
+ */
148
+ class ButtonComponent {
149
+ constructor() {
150
+ /** Visual variant — from Figma: Solid | Outline | Soft | Subtle | Ghost | Link */
151
+ this.variant = input('solid');
152
+ /** Color theme */
153
+ this.color = input('primary');
154
+ /** Size — from Figma: xs(h:24) sm(h:28) md(h:32) lg(h:36) xl(h:40) */
155
+ this.size = input('md');
156
+ /** Disabled state */
157
+ this.disabled = input(false);
158
+ /** Loading state — shows spinner */
159
+ this.loading = input(false);
160
+ /** Position of the spinner */
161
+ this.loadingPosition = input('leading');
162
+ /** Square/icon-only mode */
163
+ this.square = input(false);
164
+ /** Full width */
165
+ this.block = input(false);
166
+ /** Leading icon name (for aria/slot reference) */
167
+ this.leadingIcon = input(null);
168
+ /** Trailing icon name */
169
+ this.trailingIcon = input(null);
170
+ /** HTML button type */
171
+ this.type = input('button');
172
+ /** Accessible label for icon-only buttons */
173
+ this.ariaLabel = input(null);
174
+ this.hostClasses = computed(() => {
175
+ const classes = [
176
+ 'ui-btn',
177
+ `ui-btn--${this.variant()}`,
178
+ `ui-btn--${this.color()}`,
179
+ `ui-btn--${this.size()}`,
180
+ ];
181
+ if (this.square())
182
+ classes.push('ui-btn--square');
183
+ if (this.block())
184
+ classes.push('ui-btn--block');
185
+ if (this.loading())
186
+ classes.push('ui-btn--loading');
187
+ if (this.disabled())
188
+ classes.push('ui-btn--disabled');
189
+ return classes.join(' ');
190
+ });
191
+ }
192
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
193
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: ButtonComponent, isStandalone: true, selector: "ui-button", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, loadingPosition: { classPropertyName: "loadingPosition", publicName: "loadingPosition", isSignal: true, isRequired: false, transformFunction: null }, square: { classPropertyName: "square", publicName: "square", isSignal: true, isRequired: false, transformFunction: null }, block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: false, transformFunction: null }, leadingIcon: { classPropertyName: "leadingIcon", publicName: "leadingIcon", isSignal: true, isRequired: false, transformFunction: null }, trailingIcon: { classPropertyName: "trailingIcon", publicName: "trailingIcon", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
194
+ <button
195
+ [type]="type()"
196
+ [disabled]="disabled() || loading()"
197
+ [class]="hostClasses()"
198
+ [attr.aria-disabled]="disabled() || loading()"
199
+ [attr.aria-label]="ariaLabel() ?? null"
200
+ [attr.aria-busy]="loading()"
201
+ >
202
+ <!-- Leading icon -->
203
+ @if (loading() && loadingPosition() === 'leading') {
204
+ <span class="ui-btn__spinner" aria-hidden="true">
205
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
206
+ <circle cx="12" cy="12" r="10" stroke-opacity="0.25"/>
207
+ <path d="M12 2a10 10 0 0 1 10 10" stroke-linecap="round"/>
208
+ </svg>
209
+ </span>
210
+ } @else if (leadingIcon() && !square()) {
211
+ <span class="ui-btn__icon ui-btn__icon--leading" aria-hidden="true">
212
+ <ng-content select="[slot=leading-icon]" />
213
+ </span>
214
+ }
215
+
216
+ <!-- Label -->
217
+ @if (!square()) {
218
+ <span class="ui-btn__label">
219
+ <ng-content />
220
+ </span>
221
+ }
222
+
223
+ <!-- Trailing icon or square icon -->
224
+ @if (loading() && loadingPosition() === 'trailing') {
225
+ <span class="ui-btn__spinner" aria-hidden="true">
226
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
227
+ <circle cx="12" cy="12" r="10" stroke-opacity="0.25"/>
228
+ <path d="M12 2a10 10 0 0 1 10 10" stroke-linecap="round"/>
229
+ </svg>
230
+ </span>
231
+ } @else if (trailingIcon() && !square()) {
232
+ <span class="ui-btn__icon ui-btn__icon--trailing" aria-hidden="true">
233
+ <ng-content select="[slot=trailing-icon]" />
234
+ </span>
235
+ }
236
+
237
+ <!-- Square/icon-only mode -->
238
+ @if (square()) {
239
+ <span class="ui-btn__icon" aria-hidden="true">
240
+ <ng-content select="[slot=icon]" />
241
+ </span>
242
+ }
243
+ </button>
244
+ `, isInline: true, styles: [".ui-btn{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;white-space:nowrap;cursor:pointer;border:1px solid transparent;border-radius:var(--radius-md);font-family:var(--font-sans);font-weight:var(--font-medium);text-decoration:none;outline:none;transition:var(--transition-colors);-webkit-user-select:none;user-select:none;position:relative;overflow:hidden}.ui-btn:focus-visible{box-shadow:0 0 0 2px var(--color-bg),0 0 0 4px var(--color-ring)}.ui-btn--xs{height:var(--size-xs);padding:4px 8px;font-size:var(--text-xs)}.ui-btn--xs .ui-btn__icon{width:var(--icon-xs);height:var(--icon-xs)}.ui-btn--xs.ui-btn--square{width:var(--size-xs);padding:0}.ui-btn--sm{height:var(--size-sm);padding:6px 10px;font-size:var(--text-xs)}.ui-btn--sm .ui-btn__icon{width:var(--icon-sm);height:var(--icon-sm)}.ui-btn--sm.ui-btn--square{width:var(--size-sm);padding:0}.ui-btn--md{height:var(--size-md);padding:6px 10px;font-size:var(--text-sm)}.ui-btn--md .ui-btn__icon{width:var(--icon-md);height:var(--icon-md)}.ui-btn--md.ui-btn--square{width:var(--size-md);padding:0}.ui-btn--lg{height:var(--size-lg);padding:8px 12px;font-size:var(--text-sm)}.ui-btn--lg .ui-btn__icon{width:var(--icon-md);height:var(--icon-md)}.ui-btn--lg.ui-btn--square{width:var(--size-lg);padding:0}.ui-btn--xl{height:var(--size-xl);padding:8px 12px;font-size:var(--text-md)}.ui-btn--xl .ui-btn__icon{width:var(--icon-lg);height:var(--icon-lg)}.ui-btn--xl.ui-btn--square{width:var(--size-xl);padding:0}.ui-btn--block{width:100%}.ui-btn__icon{display:flex;align-items:center;justify-content:center;flex-shrink:0}.ui-btn__spinner{display:flex;align-items:center;width:1em;height:1em;flex-shrink:0}.ui-btn__spinner svg{width:100%;height:100%;animation:ui-spin .75s linear infinite}.ui-btn[disabled],.ui-btn--disabled{cursor:not-allowed;opacity:.5}.ui-btn--loading{cursor:wait}.ui-btn--primary.ui-btn--solid{background:var(--color-primary-500);color:var(--color-neutral-0)}.ui-btn--primary.ui-btn--solid:hover:not([disabled]){background:var(--color-primary-600)}.ui-btn--primary.ui-btn--solid:active:not([disabled]){background:var(--color-primary-700)}.ui-btn--primary.ui-btn--outline{background:transparent;color:var(--color-primary-500);border-color:var(--color-primary-500)}.ui-btn--primary.ui-btn--outline:hover:not([disabled]){background:color-mix(in srgb,var(--color-primary-500) 10%,transparent)}.ui-btn--primary.ui-btn--soft{background:color-mix(in srgb,var(--color-primary-500) 15%,transparent);color:var(--color-primary-700)}.ui-btn--primary.ui-btn--soft:hover:not([disabled]){background:color-mix(in srgb,var(--color-primary-500) 20%,transparent)}.ui-btn--primary.ui-btn--subtle{background:transparent;color:var(--color-primary-500)}.ui-btn--primary.ui-btn--subtle:hover:not([disabled]){background:color-mix(in srgb,var(--color-primary-500) 10%,transparent)}.ui-btn--primary.ui-btn--ghost{background:transparent;color:var(--color-primary-500)}.ui-btn--primary.ui-btn--ghost:hover:not([disabled]){background:color-mix(in srgb,var(--color-primary-500) 8%,transparent)}.ui-btn--primary.ui-btn--link{background:transparent;color:var(--color-primary-500);text-decoration:underline;padding-left:0;padding-right:0;height:auto}.ui-btn--primary.ui-btn--link:hover:not([disabled]){color:var(--color-primary-600)}.ui-btn--neutral.ui-btn--solid{background:var(--color-neutral-900);color:var(--color-neutral-0)}.ui-btn--neutral.ui-btn--solid:hover:not([disabled]){background:var(--color-neutral-800)}.ui-btn--neutral.ui-btn--outline{background:transparent;color:var(--color-neutral-700);border-color:var(--color-neutral-300)}.ui-btn--neutral.ui-btn--outline:hover:not([disabled]){background:var(--color-neutral-50)}.ui-btn--neutral.ui-btn--soft{background:var(--color-neutral-100);color:var(--color-neutral-700)}.ui-btn--neutral.ui-btn--soft:hover:not([disabled]){background:var(--color-neutral-200)}.ui-btn--neutral.ui-btn--subtle{background:transparent;color:var(--color-neutral-600)}.ui-btn--neutral.ui-btn--subtle:hover:not([disabled]){background:var(--color-neutral-100)}.ui-btn--neutral.ui-btn--ghost{background:transparent;color:var(--color-neutral-600)}.ui-btn--neutral.ui-btn--ghost:hover:not([disabled]){background:var(--color-neutral-100)}.ui-btn--neutral.ui-btn--link{background:transparent;color:var(--color-neutral-600);text-decoration:underline;padding-left:0;padding-right:0;height:auto}.ui-btn--success.ui-btn--solid{background:var(--color-success-500);color:var(--color-neutral-0)}.ui-btn--success.ui-btn--solid:hover:not([disabled]){background:var(--color-success-600)}.ui-btn--success.ui-btn--outline{background:transparent;color:var(--color-success-600);border-color:var(--color-success-500)}.ui-btn--success.ui-btn--soft{background:color-mix(in srgb,var(--color-success-500) 15%,transparent);color:var(--color-success-700)}.ui-btn--success.ui-btn--subtle,.ui-btn--success.ui-btn--ghost{background:transparent;color:var(--color-success-600)}.ui-btn--warning.ui-btn--solid{background:var(--color-warning-500);color:var(--color-neutral-0)}.ui-btn--warning.ui-btn--solid:hover:not([disabled]){background:var(--color-warning-600)}.ui-btn--warning.ui-btn--outline{background:transparent;color:var(--color-warning-600);border-color:var(--color-warning-500)}.ui-btn--warning.ui-btn--soft{background:color-mix(in srgb,var(--color-warning-500) 15%,transparent);color:var(--color-warning-700)}.ui-btn--warning.ui-btn--subtle,.ui-btn--warning.ui-btn--ghost{background:transparent;color:var(--color-warning-600)}.ui-btn--error.ui-btn--solid{background:var(--color-error-500);color:var(--color-neutral-0)}.ui-btn--error.ui-btn--solid:hover:not([disabled]){background:var(--color-error-600)}.ui-btn--error.ui-btn--outline{background:transparent;color:var(--color-error-600);border-color:var(--color-error-500)}.ui-btn--error.ui-btn--soft{background:color-mix(in srgb,var(--color-error-500) 15%,transparent);color:var(--color-error-700)}.ui-btn--error.ui-btn--subtle,.ui-btn--error.ui-btn--ghost{background:transparent;color:var(--color-error-600)}.ui-btn--info.ui-btn--solid{background:var(--color-info-500);color:var(--color-neutral-0)}.ui-btn--info.ui-btn--solid:hover:not([disabled]){background:var(--color-info-600)}.ui-btn--info.ui-btn--outline{background:transparent;color:var(--color-info-600);border-color:var(--color-info-500)}.ui-btn--info.ui-btn--soft{background:color-mix(in srgb,var(--color-info-500) 15%,transparent);color:var(--color-info-700)}.ui-btn--info.ui-btn--subtle,.ui-btn--info.ui-btn--ghost{background:transparent;color:var(--color-info-600)}@keyframes ui-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
245
+ }
246
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: ButtonComponent, decorators: [{
247
+ type: Component,
248
+ args: [{ selector: 'ui-button', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
249
+ <button
250
+ [type]="type()"
251
+ [disabled]="disabled() || loading()"
252
+ [class]="hostClasses()"
253
+ [attr.aria-disabled]="disabled() || loading()"
254
+ [attr.aria-label]="ariaLabel() ?? null"
255
+ [attr.aria-busy]="loading()"
256
+ >
257
+ <!-- Leading icon -->
258
+ @if (loading() && loadingPosition() === 'leading') {
259
+ <span class="ui-btn__spinner" aria-hidden="true">
260
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
261
+ <circle cx="12" cy="12" r="10" stroke-opacity="0.25"/>
262
+ <path d="M12 2a10 10 0 0 1 10 10" stroke-linecap="round"/>
263
+ </svg>
264
+ </span>
265
+ } @else if (leadingIcon() && !square()) {
266
+ <span class="ui-btn__icon ui-btn__icon--leading" aria-hidden="true">
267
+ <ng-content select="[slot=leading-icon]" />
268
+ </span>
269
+ }
270
+
271
+ <!-- Label -->
272
+ @if (!square()) {
273
+ <span class="ui-btn__label">
274
+ <ng-content />
275
+ </span>
276
+ }
277
+
278
+ <!-- Trailing icon or square icon -->
279
+ @if (loading() && loadingPosition() === 'trailing') {
280
+ <span class="ui-btn__spinner" aria-hidden="true">
281
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
282
+ <circle cx="12" cy="12" r="10" stroke-opacity="0.25"/>
283
+ <path d="M12 2a10 10 0 0 1 10 10" stroke-linecap="round"/>
284
+ </svg>
285
+ </span>
286
+ } @else if (trailingIcon() && !square()) {
287
+ <span class="ui-btn__icon ui-btn__icon--trailing" aria-hidden="true">
288
+ <ng-content select="[slot=trailing-icon]" />
289
+ </span>
290
+ }
291
+
292
+ <!-- Square/icon-only mode -->
293
+ @if (square()) {
294
+ <span class="ui-btn__icon" aria-hidden="true">
295
+ <ng-content select="[slot=icon]" />
296
+ </span>
297
+ }
298
+ </button>
299
+ `, styles: [".ui-btn{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;white-space:nowrap;cursor:pointer;border:1px solid transparent;border-radius:var(--radius-md);font-family:var(--font-sans);font-weight:var(--font-medium);text-decoration:none;outline:none;transition:var(--transition-colors);-webkit-user-select:none;user-select:none;position:relative;overflow:hidden}.ui-btn:focus-visible{box-shadow:0 0 0 2px var(--color-bg),0 0 0 4px var(--color-ring)}.ui-btn--xs{height:var(--size-xs);padding:4px 8px;font-size:var(--text-xs)}.ui-btn--xs .ui-btn__icon{width:var(--icon-xs);height:var(--icon-xs)}.ui-btn--xs.ui-btn--square{width:var(--size-xs);padding:0}.ui-btn--sm{height:var(--size-sm);padding:6px 10px;font-size:var(--text-xs)}.ui-btn--sm .ui-btn__icon{width:var(--icon-sm);height:var(--icon-sm)}.ui-btn--sm.ui-btn--square{width:var(--size-sm);padding:0}.ui-btn--md{height:var(--size-md);padding:6px 10px;font-size:var(--text-sm)}.ui-btn--md .ui-btn__icon{width:var(--icon-md);height:var(--icon-md)}.ui-btn--md.ui-btn--square{width:var(--size-md);padding:0}.ui-btn--lg{height:var(--size-lg);padding:8px 12px;font-size:var(--text-sm)}.ui-btn--lg .ui-btn__icon{width:var(--icon-md);height:var(--icon-md)}.ui-btn--lg.ui-btn--square{width:var(--size-lg);padding:0}.ui-btn--xl{height:var(--size-xl);padding:8px 12px;font-size:var(--text-md)}.ui-btn--xl .ui-btn__icon{width:var(--icon-lg);height:var(--icon-lg)}.ui-btn--xl.ui-btn--square{width:var(--size-xl);padding:0}.ui-btn--block{width:100%}.ui-btn__icon{display:flex;align-items:center;justify-content:center;flex-shrink:0}.ui-btn__spinner{display:flex;align-items:center;width:1em;height:1em;flex-shrink:0}.ui-btn__spinner svg{width:100%;height:100%;animation:ui-spin .75s linear infinite}.ui-btn[disabled],.ui-btn--disabled{cursor:not-allowed;opacity:.5}.ui-btn--loading{cursor:wait}.ui-btn--primary.ui-btn--solid{background:var(--color-primary-500);color:var(--color-neutral-0)}.ui-btn--primary.ui-btn--solid:hover:not([disabled]){background:var(--color-primary-600)}.ui-btn--primary.ui-btn--solid:active:not([disabled]){background:var(--color-primary-700)}.ui-btn--primary.ui-btn--outline{background:transparent;color:var(--color-primary-500);border-color:var(--color-primary-500)}.ui-btn--primary.ui-btn--outline:hover:not([disabled]){background:color-mix(in srgb,var(--color-primary-500) 10%,transparent)}.ui-btn--primary.ui-btn--soft{background:color-mix(in srgb,var(--color-primary-500) 15%,transparent);color:var(--color-primary-700)}.ui-btn--primary.ui-btn--soft:hover:not([disabled]){background:color-mix(in srgb,var(--color-primary-500) 20%,transparent)}.ui-btn--primary.ui-btn--subtle{background:transparent;color:var(--color-primary-500)}.ui-btn--primary.ui-btn--subtle:hover:not([disabled]){background:color-mix(in srgb,var(--color-primary-500) 10%,transparent)}.ui-btn--primary.ui-btn--ghost{background:transparent;color:var(--color-primary-500)}.ui-btn--primary.ui-btn--ghost:hover:not([disabled]){background:color-mix(in srgb,var(--color-primary-500) 8%,transparent)}.ui-btn--primary.ui-btn--link{background:transparent;color:var(--color-primary-500);text-decoration:underline;padding-left:0;padding-right:0;height:auto}.ui-btn--primary.ui-btn--link:hover:not([disabled]){color:var(--color-primary-600)}.ui-btn--neutral.ui-btn--solid{background:var(--color-neutral-900);color:var(--color-neutral-0)}.ui-btn--neutral.ui-btn--solid:hover:not([disabled]){background:var(--color-neutral-800)}.ui-btn--neutral.ui-btn--outline{background:transparent;color:var(--color-neutral-700);border-color:var(--color-neutral-300)}.ui-btn--neutral.ui-btn--outline:hover:not([disabled]){background:var(--color-neutral-50)}.ui-btn--neutral.ui-btn--soft{background:var(--color-neutral-100);color:var(--color-neutral-700)}.ui-btn--neutral.ui-btn--soft:hover:not([disabled]){background:var(--color-neutral-200)}.ui-btn--neutral.ui-btn--subtle{background:transparent;color:var(--color-neutral-600)}.ui-btn--neutral.ui-btn--subtle:hover:not([disabled]){background:var(--color-neutral-100)}.ui-btn--neutral.ui-btn--ghost{background:transparent;color:var(--color-neutral-600)}.ui-btn--neutral.ui-btn--ghost:hover:not([disabled]){background:var(--color-neutral-100)}.ui-btn--neutral.ui-btn--link{background:transparent;color:var(--color-neutral-600);text-decoration:underline;padding-left:0;padding-right:0;height:auto}.ui-btn--success.ui-btn--solid{background:var(--color-success-500);color:var(--color-neutral-0)}.ui-btn--success.ui-btn--solid:hover:not([disabled]){background:var(--color-success-600)}.ui-btn--success.ui-btn--outline{background:transparent;color:var(--color-success-600);border-color:var(--color-success-500)}.ui-btn--success.ui-btn--soft{background:color-mix(in srgb,var(--color-success-500) 15%,transparent);color:var(--color-success-700)}.ui-btn--success.ui-btn--subtle,.ui-btn--success.ui-btn--ghost{background:transparent;color:var(--color-success-600)}.ui-btn--warning.ui-btn--solid{background:var(--color-warning-500);color:var(--color-neutral-0)}.ui-btn--warning.ui-btn--solid:hover:not([disabled]){background:var(--color-warning-600)}.ui-btn--warning.ui-btn--outline{background:transparent;color:var(--color-warning-600);border-color:var(--color-warning-500)}.ui-btn--warning.ui-btn--soft{background:color-mix(in srgb,var(--color-warning-500) 15%,transparent);color:var(--color-warning-700)}.ui-btn--warning.ui-btn--subtle,.ui-btn--warning.ui-btn--ghost{background:transparent;color:var(--color-warning-600)}.ui-btn--error.ui-btn--solid{background:var(--color-error-500);color:var(--color-neutral-0)}.ui-btn--error.ui-btn--solid:hover:not([disabled]){background:var(--color-error-600)}.ui-btn--error.ui-btn--outline{background:transparent;color:var(--color-error-600);border-color:var(--color-error-500)}.ui-btn--error.ui-btn--soft{background:color-mix(in srgb,var(--color-error-500) 15%,transparent);color:var(--color-error-700)}.ui-btn--error.ui-btn--subtle,.ui-btn--error.ui-btn--ghost{background:transparent;color:var(--color-error-600)}.ui-btn--info.ui-btn--solid{background:var(--color-info-500);color:var(--color-neutral-0)}.ui-btn--info.ui-btn--solid:hover:not([disabled]){background:var(--color-info-600)}.ui-btn--info.ui-btn--outline{background:transparent;color:var(--color-info-600);border-color:var(--color-info-500)}.ui-btn--info.ui-btn--soft{background:color-mix(in srgb,var(--color-info-500) 15%,transparent);color:var(--color-info-700)}.ui-btn--info.ui-btn--subtle,.ui-btn--info.ui-btn--ghost{background:transparent;color:var(--color-info-600)}@keyframes ui-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
300
+ }] });
301
+
302
+ /**
303
+ * Checkbox Atom — Source: Nuxt UI v3 ❖ Checkbox
304
+ * CVA-compatible, accessible (ARIA), indeterminate state
305
+ */
306
+ class CheckboxComponent {
307
+ constructor() {
308
+ this.size = input('md');
309
+ this.color = input('primary');
310
+ this.label = input(null);
311
+ this.disabled = input(false);
312
+ this.indeterminate = input(false);
313
+ this.required = input(false);
314
+ this.ariaLabel = input(null);
315
+ this.checked = model(false);
316
+ this._onChange = () => { };
317
+ this._onTouched = () => { };
318
+ }
319
+ writeValue(v) { this.checked.set(v); }
320
+ registerOnChange(fn) { this._onChange = fn; }
321
+ registerOnTouched(fn) { this._onTouched = fn; }
322
+ setDisabledState(_) { }
323
+ onChange(e) {
324
+ const checked = e.target.checked;
325
+ this.checked.set(checked);
326
+ this._onChange(checked);
327
+ this._onTouched();
328
+ }
329
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
330
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: CheckboxComponent, isStandalone: true, selector: "ui-checkbox", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CheckboxComponent), multi: true }], ngImport: i0, template: `
331
+ <label class="ui-checkbox" [class.ui-checkbox--disabled]="disabled()">
332
+ <span class="ui-checkbox__control ui-checkbox__control--{{ size() }} ui-checkbox__control--{{ color() }}"
333
+ [class.ui-checkbox__control--checked]="checked()"
334
+ [class.ui-checkbox__control--indeterminate]="indeterminate()">
335
+ <input
336
+ type="checkbox"
337
+ class="ui-checkbox__input"
338
+ [checked]="checked()"
339
+ [disabled]="disabled()"
340
+ [indeterminate]="indeterminate()"
341
+ [attr.aria-label]="ariaLabel() ?? null"
342
+ (change)="onChange($event)"
343
+ />
344
+ @if (indeterminate()) {
345
+ <span class="ui-checkbox__icon ui-checkbox__icon--indeterminate" aria-hidden="true">—</span>
346
+ } @else if (checked()) {
347
+ <span class="ui-checkbox__icon" aria-hidden="true">✓</span>
348
+ }
349
+ </span>
350
+ @if (label()) {
351
+ <span class="ui-checkbox__label ui-checkbox__label--{{ size() }}">
352
+ {{ label() }}
353
+ @if (required()) { <span class="ui-checkbox__required" aria-hidden="true">*</span> }
354
+ </span>
355
+ }
356
+ </label>
357
+ `, isInline: true, styles: [".ui-checkbox{display:inline-flex;align-items:flex-start;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none}.ui-checkbox--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ui-checkbox__input{position:absolute;opacity:0;width:0;height:0}.ui-checkbox__control{position:relative;display:flex;align-items:center;justify-content:center;flex-shrink:0;border:1.5px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);transition:var(--transition-colors)}.ui-checkbox__control--xs{width:14px;height:14px}.ui-checkbox__control--sm{width:16px;height:16px}.ui-checkbox__control--md{width:18px;height:18px}.ui-checkbox__control--lg{width:20px;height:20px}.ui-checkbox__control--xl{width:22px;height:22px}.ui-checkbox__control--checked.ui-checkbox__control--primary,.ui-checkbox__control--indeterminate.ui-checkbox__control--primary{background:var(--color-primary-500);border-color:var(--color-primary-500);color:#fff}.ui-checkbox__control--checked.ui-checkbox__control--neutral,.ui-checkbox__control--indeterminate.ui-checkbox__control--neutral{background:var(--color-neutral-800);border-color:var(--color-neutral-800);color:#fff}.ui-checkbox__control--checked.ui-checkbox__control--success,.ui-checkbox__control--indeterminate.ui-checkbox__control--success{background:var(--color-success-500);border-color:var(--color-success-500);color:#fff}.ui-checkbox__control--checked.ui-checkbox__control--error,.ui-checkbox__control--indeterminate.ui-checkbox__control--error{background:var(--color-error-500);border-color:var(--color-error-500);color:#fff}.ui-checkbox__control:focus-within{box-shadow:0 0 0 2px var(--color-bg),0 0 0 4px var(--color-ring)}.ui-checkbox__icon{font-size:11px;font-weight:700;line-height:1}.ui-checkbox__label{font-family:var(--font-sans);color:var(--color-text)}.ui-checkbox__label--xs,.ui-checkbox__label--sm{font-size:var(--text-xs)}.ui-checkbox__label--md{font-size:var(--text-sm)}.ui-checkbox__label--lg{font-size:var(--text-md)}.ui-checkbox__label--xl{font-size:var(--text-lg)}.ui-checkbox__required{color:var(--color-error-500);margin-left:2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
358
+ }
359
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: CheckboxComponent, decorators: [{
360
+ type: Component,
361
+ args: [{ selector: 'ui-checkbox', standalone: true, imports: [CommonModule, FormsModule], changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CheckboxComponent), multi: true }], template: `
362
+ <label class="ui-checkbox" [class.ui-checkbox--disabled]="disabled()">
363
+ <span class="ui-checkbox__control ui-checkbox__control--{{ size() }} ui-checkbox__control--{{ color() }}"
364
+ [class.ui-checkbox__control--checked]="checked()"
365
+ [class.ui-checkbox__control--indeterminate]="indeterminate()">
366
+ <input
367
+ type="checkbox"
368
+ class="ui-checkbox__input"
369
+ [checked]="checked()"
370
+ [disabled]="disabled()"
371
+ [indeterminate]="indeterminate()"
372
+ [attr.aria-label]="ariaLabel() ?? null"
373
+ (change)="onChange($event)"
374
+ />
375
+ @if (indeterminate()) {
376
+ <span class="ui-checkbox__icon ui-checkbox__icon--indeterminate" aria-hidden="true">—</span>
377
+ } @else if (checked()) {
378
+ <span class="ui-checkbox__icon" aria-hidden="true">✓</span>
379
+ }
380
+ </span>
381
+ @if (label()) {
382
+ <span class="ui-checkbox__label ui-checkbox__label--{{ size() }}">
383
+ {{ label() }}
384
+ @if (required()) { <span class="ui-checkbox__required" aria-hidden="true">*</span> }
385
+ </span>
386
+ }
387
+ </label>
388
+ `, styles: [".ui-checkbox{display:inline-flex;align-items:flex-start;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none}.ui-checkbox--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ui-checkbox__input{position:absolute;opacity:0;width:0;height:0}.ui-checkbox__control{position:relative;display:flex;align-items:center;justify-content:center;flex-shrink:0;border:1.5px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);transition:var(--transition-colors)}.ui-checkbox__control--xs{width:14px;height:14px}.ui-checkbox__control--sm{width:16px;height:16px}.ui-checkbox__control--md{width:18px;height:18px}.ui-checkbox__control--lg{width:20px;height:20px}.ui-checkbox__control--xl{width:22px;height:22px}.ui-checkbox__control--checked.ui-checkbox__control--primary,.ui-checkbox__control--indeterminate.ui-checkbox__control--primary{background:var(--color-primary-500);border-color:var(--color-primary-500);color:#fff}.ui-checkbox__control--checked.ui-checkbox__control--neutral,.ui-checkbox__control--indeterminate.ui-checkbox__control--neutral{background:var(--color-neutral-800);border-color:var(--color-neutral-800);color:#fff}.ui-checkbox__control--checked.ui-checkbox__control--success,.ui-checkbox__control--indeterminate.ui-checkbox__control--success{background:var(--color-success-500);border-color:var(--color-success-500);color:#fff}.ui-checkbox__control--checked.ui-checkbox__control--error,.ui-checkbox__control--indeterminate.ui-checkbox__control--error{background:var(--color-error-500);border-color:var(--color-error-500);color:#fff}.ui-checkbox__control:focus-within{box-shadow:0 0 0 2px var(--color-bg),0 0 0 4px var(--color-ring)}.ui-checkbox__icon{font-size:11px;font-weight:700;line-height:1}.ui-checkbox__label{font-family:var(--font-sans);color:var(--color-text)}.ui-checkbox__label--xs,.ui-checkbox__label--sm{font-size:var(--text-xs)}.ui-checkbox__label--md{font-size:var(--text-sm)}.ui-checkbox__label--lg{font-size:var(--text-md)}.ui-checkbox__label--xl{font-size:var(--text-lg)}.ui-checkbox__required{color:var(--color-error-500);margin-left:2px}\n"] }]
389
+ }] });
390
+
391
+ /**
392
+ * Chip Atom — Source: Nuxt UI v3 ❖ Chip
393
+ * Small indicator overlaid on another element (e.g., notification dot)
394
+ */
395
+ class ChipComponent {
396
+ constructor() {
397
+ this.color = input('primary');
398
+ this.size = input('md');
399
+ this.position = input('top-right');
400
+ this.text = input(null);
401
+ }
402
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: ChipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
403
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: ChipComponent, isStandalone: true, selector: "ui-chip", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
404
+ <span class="ui-chip-wrap">
405
+ <ng-content />
406
+ <span [class]="'ui-chip ui-chip--' + color() + ' ui-chip--' + size() + ' ui-chip--' + position()">
407
+ @if (text()) { {{ text() }} }
408
+ </span>
409
+ </span>
410
+ `, isInline: true, styles: [".ui-chip-wrap{position:relative;display:inline-flex}.ui-chip{position:absolute;border:2px solid var(--color-bg);border-radius:var(--radius-full);font-family:var(--font-sans);font-weight:var(--font-medium);font-size:10px;display:flex;align-items:center;justify-content:center;z-index:var(--z-raised)}.ui-chip--xs{min-width:8px;height:8px;padding:0}.ui-chip--sm{min-width:10px;height:10px;padding:0}.ui-chip--md{min-width:16px;height:16px;padding:0 4px}.ui-chip--lg{min-width:18px;height:18px;padding:0 5px}.ui-chip--xl{min-width:20px;height:20px;padding:0 6px}.ui-chip--top-right{top:0;right:0;transform:translate(30%,-30%)}.ui-chip--top-left{top:0;left:0;transform:translate(-30%,-30%)}.ui-chip--bottom-right{bottom:0;right:0;transform:translate(30%,30%)}.ui-chip--bottom-left{bottom:0;left:0;transform:translate(-30%,30%)}.ui-chip--primary{background:var(--color-primary-500);color:#fff}.ui-chip--secondary{background:var(--color-secondary-500);color:#fff}.ui-chip--neutral{background:var(--color-neutral-500);color:#fff}.ui-chip--success{background:var(--color-success-500);color:#fff}.ui-chip--warning{background:var(--color-warning-500);color:#fff}.ui-chip--error{background:var(--color-error-500);color:#fff}.ui-chip--info{background:var(--color-info-500);color:#fff}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
411
+ }
412
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: ChipComponent, decorators: [{
413
+ type: Component,
414
+ args: [{ selector: 'ui-chip', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
415
+ <span class="ui-chip-wrap">
416
+ <ng-content />
417
+ <span [class]="'ui-chip ui-chip--' + color() + ' ui-chip--' + size() + ' ui-chip--' + position()">
418
+ @if (text()) { {{ text() }} }
419
+ </span>
420
+ </span>
421
+ `, styles: [".ui-chip-wrap{position:relative;display:inline-flex}.ui-chip{position:absolute;border:2px solid var(--color-bg);border-radius:var(--radius-full);font-family:var(--font-sans);font-weight:var(--font-medium);font-size:10px;display:flex;align-items:center;justify-content:center;z-index:var(--z-raised)}.ui-chip--xs{min-width:8px;height:8px;padding:0}.ui-chip--sm{min-width:10px;height:10px;padding:0}.ui-chip--md{min-width:16px;height:16px;padding:0 4px}.ui-chip--lg{min-width:18px;height:18px;padding:0 5px}.ui-chip--xl{min-width:20px;height:20px;padding:0 6px}.ui-chip--top-right{top:0;right:0;transform:translate(30%,-30%)}.ui-chip--top-left{top:0;left:0;transform:translate(-30%,-30%)}.ui-chip--bottom-right{bottom:0;right:0;transform:translate(30%,30%)}.ui-chip--bottom-left{bottom:0;left:0;transform:translate(-30%,30%)}.ui-chip--primary{background:var(--color-primary-500);color:#fff}.ui-chip--secondary{background:var(--color-secondary-500);color:#fff}.ui-chip--neutral{background:var(--color-neutral-500);color:#fff}.ui-chip--success{background:var(--color-success-500);color:#fff}.ui-chip--warning{background:var(--color-warning-500);color:#fff}.ui-chip--error{background:var(--color-error-500);color:#fff}.ui-chip--info{background:var(--color-info-500);color:#fff}\n"] }]
422
+ }] });
423
+
424
+ /**
425
+ * Kbd Atom — Source: Nuxt UI v3 ❖ Kbd
426
+ * Keyboard key indicator
427
+ */
428
+ class KbdComponent {
429
+ constructor() {
430
+ this.size = input('md');
431
+ this.variant = input('outline');
432
+ }
433
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbdComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
434
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.20", type: KbdComponent, isStandalone: true, selector: "ui-kbd", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `<kbd [class]="'ui-kbd ui-kbd--' + size() + ' ui-kbd--' + variant()"><ng-content /></kbd>`, isInline: true, styles: [".ui-kbd{display:inline-flex;align-items:center;justify-content:center;font-family:var(--font-mono);font-weight:var(--font-medium);border-radius:var(--radius-md);white-space:nowrap}.ui-kbd--xs{padding:1px 4px;font-size:10px}.ui-kbd--sm{padding:2px 6px;font-size:11px}.ui-kbd--md{padding:2px 8px;font-size:12px}.ui-kbd--lg{padding:3px 10px;font-size:13px}.ui-kbd--xl{padding:4px 12px;font-size:14px}.ui-kbd--solid{background:var(--color-neutral-800);color:#fff}.ui-kbd--outline{background:var(--color-bg);color:var(--color-text);border:1px solid var(--color-border);box-shadow:0 1px 0 var(--color-border)}.ui-kbd--subtle{background:var(--color-neutral-100);color:var(--color-neutral-700)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
435
+ }
436
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbdComponent, decorators: [{
437
+ type: Component,
438
+ args: [{ selector: 'ui-kbd', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<kbd [class]="'ui-kbd ui-kbd--' + size() + ' ui-kbd--' + variant()"><ng-content /></kbd>`, styles: [".ui-kbd{display:inline-flex;align-items:center;justify-content:center;font-family:var(--font-mono);font-weight:var(--font-medium);border-radius:var(--radius-md);white-space:nowrap}.ui-kbd--xs{padding:1px 4px;font-size:10px}.ui-kbd--sm{padding:2px 6px;font-size:11px}.ui-kbd--md{padding:2px 8px;font-size:12px}.ui-kbd--lg{padding:3px 10px;font-size:13px}.ui-kbd--xl{padding:4px 12px;font-size:14px}.ui-kbd--solid{background:var(--color-neutral-800);color:#fff}.ui-kbd--outline{background:var(--color-bg);color:var(--color-text);border:1px solid var(--color-border);box-shadow:0 1px 0 var(--color-border)}.ui-kbd--subtle{background:var(--color-neutral-100);color:var(--color-neutral-700)}\n"] }]
439
+ }] });
440
+
441
+ /**
442
+ * Link Atom — Source: Nuxt UI v3 ❖ Link
443
+ * Router-aware link with external support
444
+ */
445
+ class LinkComponent {
446
+ constructor() {
447
+ this.href = input(null);
448
+ this.to = input(null);
449
+ this.external = input(false);
450
+ this.inactive = input(false);
451
+ this.classes = input('ui-link');
452
+ }
453
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: LinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
454
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: LinkComponent, isStandalone: true, selector: "ui-link", inputs: { href: { classPropertyName: "href", publicName: "href", isSignal: true, isRequired: false, transformFunction: null }, to: { classPropertyName: "to", publicName: "to", isSignal: true, isRequired: false, transformFunction: null }, external: { classPropertyName: "external", publicName: "external", isSignal: true, isRequired: false, transformFunction: null }, inactive: { classPropertyName: "inactive", publicName: "inactive", isSignal: true, isRequired: false, transformFunction: null }, classes: { classPropertyName: "classes", publicName: "classes", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
455
+ @if (external()) {
456
+ <a [href]="href()" [class]="classes()" target="_blank" rel="noopener noreferrer">
457
+ <ng-content />
458
+ </a>
459
+ } @else if (href()) {
460
+ <a [href]="href()" [class]="classes()"><ng-content /></a>
461
+ } @else {
462
+ <a [routerLink]="to()" [class]="classes()"><ng-content /></a>
463
+ }
464
+ `, isInline: true, styles: [".ui-link{color:var(--color-primary-500);text-decoration:none;font-family:var(--font-sans);transition:color var(--transition-fast);cursor:pointer}.ui-link:hover{color:var(--color-primary-600);text-decoration:underline}.ui-link:visited{color:var(--color-primary-700)}.ui-link:focus-visible{outline:2px solid var(--color-ring);outline-offset:2px;border-radius:var(--radius-sm)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
465
+ }
466
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: LinkComponent, decorators: [{
467
+ type: Component,
468
+ args: [{ selector: 'ui-link', standalone: true, imports: [CommonModule, RouterModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
469
+ @if (external()) {
470
+ <a [href]="href()" [class]="classes()" target="_blank" rel="noopener noreferrer">
471
+ <ng-content />
472
+ </a>
473
+ } @else if (href()) {
474
+ <a [href]="href()" [class]="classes()"><ng-content /></a>
475
+ } @else {
476
+ <a [routerLink]="to()" [class]="classes()"><ng-content /></a>
477
+ }
478
+ `, styles: [".ui-link{color:var(--color-primary-500);text-decoration:none;font-family:var(--font-sans);transition:color var(--transition-fast);cursor:pointer}.ui-link:hover{color:var(--color-primary-600);text-decoration:underline}.ui-link:visited{color:var(--color-primary-700)}.ui-link:focus-visible{outline:2px solid var(--color-ring);outline-offset:2px;border-radius:var(--radius-sm)}\n"] }]
479
+ }] });
480
+
481
+ /**
482
+ * Progress Atom — Source: Nuxt UI v3 ❖ Progress
483
+ * Linear progress bar with indeterminate support
484
+ */
485
+ class ProgressComponent {
486
+ constructor() {
487
+ this.value = input(0);
488
+ this.max = input(100);
489
+ this.size = input('md');
490
+ this.color = input('primary');
491
+ this.indeterminate = input(false);
492
+ this.label = input(null);
493
+ this.showValue = input(false);
494
+ this.percentage = computed(() => Math.min(100, Math.max(0, Math.round((this.value() / this.max()) * 100))));
495
+ }
496
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: ProgressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
497
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: ProgressComponent, isStandalone: true, selector: "ui-progress", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, showValue: { classPropertyName: "showValue", publicName: "showValue", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
498
+ <div class="ui-progress" [class]="'ui-progress--' + size()">
499
+ @if (label()) {
500
+ <div class="ui-progress__label">{{ label() }}</div>
501
+ }
502
+ <div
503
+ class="ui-progress__track"
504
+ role="progressbar"
505
+ [attr.aria-valuenow]="indeterminate() ? null : value()"
506
+ [attr.aria-valuemin]="0"
507
+ [attr.aria-valuemax]="max()"
508
+ [attr.aria-label]="label() ?? 'Progress'"
509
+ >
510
+ <div
511
+ class="ui-progress__bar"
512
+ [class]="'ui-progress__bar--' + color() + (indeterminate() ? ' ui-progress__bar--indeterminate' : '')"
513
+ [style.width]="indeterminate() ? null : percentage() + '%'"
514
+ ></div>
515
+ </div>
516
+ @if (showValue() && !indeterminate()) {
517
+ <span class="ui-progress__value">{{ percentage() }}%</span>
518
+ }
519
+ </div>
520
+ `, isInline: true, styles: [".ui-progress{display:flex;flex-direction:column;gap:var(--spacing-1)}.ui-progress--xs .ui-progress__track{height:4px;border-radius:var(--radius-full)}.ui-progress--sm .ui-progress__track{height:6px;border-radius:var(--radius-full)}.ui-progress--md .ui-progress__track{height:8px;border-radius:var(--radius-full)}.ui-progress--lg .ui-progress__track{height:10px;border-radius:var(--radius-full)}.ui-progress--xl .ui-progress__track{height:12px;border-radius:var(--radius-full)}.ui-progress__track{width:100%;background:var(--color-neutral-100);overflow:hidden}.ui-progress__bar{height:100%;border-radius:inherit;transition:width var(--transition-slow)}.ui-progress__bar--primary{background:var(--color-primary-500)}.ui-progress__bar--neutral{background:var(--color-neutral-600)}.ui-progress__bar--success{background:var(--color-success-500)}.ui-progress__bar--warning{background:var(--color-warning-500)}.ui-progress__bar--error{background:var(--color-error-500)}.ui-progress__bar--info{background:var(--color-info-500)}.ui-progress__bar--indeterminate{width:40%!important;animation:ui-progress-slide 1.5s ease-in-out infinite}.ui-progress__label{font-family:var(--font-sans);font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--color-text)}.ui-progress__value{font-family:var(--font-sans);font-size:var(--text-xs);color:var(--color-text-muted);text-align:right}@keyframes ui-progress-slide{0%{transform:translate(-150%)}to{transform:translate(350%)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
521
+ }
522
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: ProgressComponent, decorators: [{
523
+ type: Component,
524
+ args: [{ selector: 'ui-progress', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
525
+ <div class="ui-progress" [class]="'ui-progress--' + size()">
526
+ @if (label()) {
527
+ <div class="ui-progress__label">{{ label() }}</div>
528
+ }
529
+ <div
530
+ class="ui-progress__track"
531
+ role="progressbar"
532
+ [attr.aria-valuenow]="indeterminate() ? null : value()"
533
+ [attr.aria-valuemin]="0"
534
+ [attr.aria-valuemax]="max()"
535
+ [attr.aria-label]="label() ?? 'Progress'"
536
+ >
537
+ <div
538
+ class="ui-progress__bar"
539
+ [class]="'ui-progress__bar--' + color() + (indeterminate() ? ' ui-progress__bar--indeterminate' : '')"
540
+ [style.width]="indeterminate() ? null : percentage() + '%'"
541
+ ></div>
542
+ </div>
543
+ @if (showValue() && !indeterminate()) {
544
+ <span class="ui-progress__value">{{ percentage() }}%</span>
545
+ }
546
+ </div>
547
+ `, styles: [".ui-progress{display:flex;flex-direction:column;gap:var(--spacing-1)}.ui-progress--xs .ui-progress__track{height:4px;border-radius:var(--radius-full)}.ui-progress--sm .ui-progress__track{height:6px;border-radius:var(--radius-full)}.ui-progress--md .ui-progress__track{height:8px;border-radius:var(--radius-full)}.ui-progress--lg .ui-progress__track{height:10px;border-radius:var(--radius-full)}.ui-progress--xl .ui-progress__track{height:12px;border-radius:var(--radius-full)}.ui-progress__track{width:100%;background:var(--color-neutral-100);overflow:hidden}.ui-progress__bar{height:100%;border-radius:inherit;transition:width var(--transition-slow)}.ui-progress__bar--primary{background:var(--color-primary-500)}.ui-progress__bar--neutral{background:var(--color-neutral-600)}.ui-progress__bar--success{background:var(--color-success-500)}.ui-progress__bar--warning{background:var(--color-warning-500)}.ui-progress__bar--error{background:var(--color-error-500)}.ui-progress__bar--info{background:var(--color-info-500)}.ui-progress__bar--indeterminate{width:40%!important;animation:ui-progress-slide 1.5s ease-in-out infinite}.ui-progress__label{font-family:var(--font-sans);font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--color-text)}.ui-progress__value{font-family:var(--font-sans);font-size:var(--text-xs);color:var(--color-text-muted);text-align:right}@keyframes ui-progress-slide{0%{transform:translate(-150%)}to{transform:translate(350%)}}\n"] }]
548
+ }] });
549
+
550
+ /**
551
+ * Separator Atom — Source: Nuxt UI v3 ❖ Separator
552
+ * Horizontal or vertical divider, optionally with label
553
+ */
554
+ class SeparatorComponent {
555
+ constructor() {
556
+ this.orientation = input('horizontal');
557
+ this.label = input(null);
558
+ this.type = input('solid');
559
+ }
560
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: SeparatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
561
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: SeparatorComponent, isStandalone: true, selector: "ui-separator", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
562
+ <div [class]="'ui-separator ui-separator--' + orientation() + (label() ? ' ui-separator--labeled' : '')"
563
+ role="separator"
564
+ [attr.aria-orientation]="orientation()">
565
+ @if (label()) {
566
+ <span class="ui-separator__label">{{ label() }}</span>
567
+ }
568
+ </div>
569
+ `, isInline: true, styles: [".ui-separator{--sep-color: var(--color-border);flex-shrink:0}.ui-separator--horizontal{width:100%;height:1px;background:var(--sep-color);margin:var(--spacing-4) 0}.ui-separator--vertical{width:1px;height:100%;min-height:1em;background:var(--sep-color);margin:0 var(--spacing-4)}.ui-separator--labeled{display:flex;align-items:center;gap:var(--spacing-3);background:none;height:auto}.ui-separator--labeled:before,.ui-separator--labeled:after{content:\"\";flex:1;height:1px;background:var(--sep-color)}.ui-separator__label{font-family:var(--font-sans);font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--color-text-muted);white-space:nowrap;padding:0 var(--spacing-2)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
570
+ }
571
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: SeparatorComponent, decorators: [{
572
+ type: Component,
573
+ args: [{ selector: 'ui-separator', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
574
+ <div [class]="'ui-separator ui-separator--' + orientation() + (label() ? ' ui-separator--labeled' : '')"
575
+ role="separator"
576
+ [attr.aria-orientation]="orientation()">
577
+ @if (label()) {
578
+ <span class="ui-separator__label">{{ label() }}</span>
579
+ }
580
+ </div>
581
+ `, styles: [".ui-separator{--sep-color: var(--color-border);flex-shrink:0}.ui-separator--horizontal{width:100%;height:1px;background:var(--sep-color);margin:var(--spacing-4) 0}.ui-separator--vertical{width:1px;height:100%;min-height:1em;background:var(--sep-color);margin:0 var(--spacing-4)}.ui-separator--labeled{display:flex;align-items:center;gap:var(--spacing-3);background:none;height:auto}.ui-separator--labeled:before,.ui-separator--labeled:after{content:\"\";flex:1;height:1px;background:var(--sep-color)}.ui-separator__label{font-family:var(--font-sans);font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--color-text-muted);white-space:nowrap;padding:0 var(--spacing-2)}\n"] }]
582
+ }] });
583
+
584
+ /**
585
+ * Skeleton Atom — Source: Nuxt UI v3 ❖ Skeleton
586
+ * Loading placeholder with shimmer animation
587
+ */
588
+ class SkeletonComponent {
589
+ constructor() {
590
+ this.width = input('100%');
591
+ this.height = input('1rem');
592
+ this.rounded = input(false);
593
+ }
594
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: SkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
595
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.20", type: SkeletonComponent, isStandalone: true, selector: "ui-skeleton", inputs: { width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `<div [class]="'ui-skeleton' + (rounded() ? ' ui-skeleton--rounded' : '')"
596
+ [style.width]="width()" [style.height]="height()" role="status" aria-label="Loading..."></div>`, isInline: true, styles: [".ui-skeleton{background:linear-gradient(90deg,var(--color-neutral-100) 25%,var(--color-neutral-200) 50%,var(--color-neutral-100) 75%);background-size:200% 100%;animation:ui-shimmer 1.5s ease-in-out infinite;border-radius:var(--radius-md);display:block}.ui-skeleton--rounded{border-radius:var(--radius-full)}@keyframes ui-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
597
+ }
598
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: SkeletonComponent, decorators: [{
599
+ type: Component,
600
+ args: [{ selector: 'ui-skeleton', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<div [class]="'ui-skeleton' + (rounded() ? ' ui-skeleton--rounded' : '')"
601
+ [style.width]="width()" [style.height]="height()" role="status" aria-label="Loading..."></div>`, styles: [".ui-skeleton{background:linear-gradient(90deg,var(--color-neutral-100) 25%,var(--color-neutral-200) 50%,var(--color-neutral-100) 75%);background-size:200% 100%;animation:ui-shimmer 1.5s ease-in-out infinite;border-radius:var(--radius-md);display:block}.ui-skeleton--rounded{border-radius:var(--radius-full)}@keyframes ui-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"] }]
602
+ }] });
603
+
604
+ /**
605
+ * Slider Atom — Source: Nuxt UI v3 ❖ Slider
606
+ * Range input with custom styling
607
+ */
608
+ class SliderComponent {
609
+ constructor() {
610
+ this.min = input(0);
611
+ this.max = input(100);
612
+ this.step = input(1);
613
+ this.size = input('md');
614
+ this.color = input('primary');
615
+ this.disabled = input(false);
616
+ this.value = model(0);
617
+ this._onChange = () => { };
618
+ this._onTouched = () => { };
619
+ }
620
+ onInput(e) {
621
+ const val = Number(e.target.value);
622
+ this.value.set(val);
623
+ this._onChange(val);
624
+ this._onTouched();
625
+ }
626
+ writeValue(v) { this.value.set(v); }
627
+ registerOnChange(fn) { this._onChange = fn; }
628
+ registerOnTouched(fn) { this._onTouched = fn; }
629
+ setDisabledState(_) { }
630
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: SliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
631
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.20", type: SliderComponent, isStandalone: true, selector: "ui-slider", inputs: { min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SliderComponent), multi: true }], ngImport: i0, template: `
632
+ <div class="ui-slider ui-slider--{{ size() }}">
633
+ <input
634
+ type="range"
635
+ class="ui-slider__input ui-slider__input--{{ color() }}"
636
+ [min]="min()"
637
+ [max]="max()"
638
+ [step]="step()"
639
+ [value]="value()"
640
+ [disabled]="disabled()"
641
+ (input)="onInput($event)"
642
+ />
643
+ </div>
644
+ `, isInline: true, styles: [".ui-slider{display:flex;align-items:center;width:100%}.ui-slider--xs{height:var(--size-xs)}.ui-slider--sm{height:var(--size-sm)}.ui-slider--md{height:var(--size-md)}.ui-slider--lg{height:var(--size-lg)}.ui-slider--xl{height:var(--size-xl)}.ui-slider__input{-webkit-appearance:none;appearance:none;width:100%;height:4px;border-radius:var(--radius-full);background:var(--color-neutral-200);cursor:pointer;outline:none}.ui-slider__input::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;border:2px solid white;box-shadow:var(--shadow-sm);transition:transform var(--transition-fast)}.ui-slider__input:focus-visible{box-shadow:0 0 0 2px var(--color-bg),0 0 0 4px var(--color-ring)}.ui-slider__input--primary::-webkit-slider-thumb{background:var(--color-primary-500)}.ui-slider__input--neutral::-webkit-slider-thumb{background:var(--color-neutral-600)}.ui-slider__input--success::-webkit-slider-thumb{background:var(--color-success-500)}.ui-slider__input--warning::-webkit-slider-thumb{background:var(--color-warning-500)}.ui-slider__input--error::-webkit-slider-thumb{background:var(--color-error-500)}.ui-slider__input:disabled{opacity:.5;cursor:not-allowed}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
645
+ }
646
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: SliderComponent, decorators: [{
647
+ type: Component,
648
+ args: [{ selector: 'ui-slider', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SliderComponent), multi: true }], template: `
649
+ <div class="ui-slider ui-slider--{{ size() }}">
650
+ <input
651
+ type="range"
652
+ class="ui-slider__input ui-slider__input--{{ color() }}"
653
+ [min]="min()"
654
+ [max]="max()"
655
+ [step]="step()"
656
+ [value]="value()"
657
+ [disabled]="disabled()"
658
+ (input)="onInput($event)"
659
+ />
660
+ </div>
661
+ `, styles: [".ui-slider{display:flex;align-items:center;width:100%}.ui-slider--xs{height:var(--size-xs)}.ui-slider--sm{height:var(--size-sm)}.ui-slider--md{height:var(--size-md)}.ui-slider--lg{height:var(--size-lg)}.ui-slider--xl{height:var(--size-xl)}.ui-slider__input{-webkit-appearance:none;appearance:none;width:100%;height:4px;border-radius:var(--radius-full);background:var(--color-neutral-200);cursor:pointer;outline:none}.ui-slider__input::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;border:2px solid white;box-shadow:var(--shadow-sm);transition:transform var(--transition-fast)}.ui-slider__input:focus-visible{box-shadow:0 0 0 2px var(--color-bg),0 0 0 4px var(--color-ring)}.ui-slider__input--primary::-webkit-slider-thumb{background:var(--color-primary-500)}.ui-slider__input--neutral::-webkit-slider-thumb{background:var(--color-neutral-600)}.ui-slider__input--success::-webkit-slider-thumb{background:var(--color-success-500)}.ui-slider__input--warning::-webkit-slider-thumb{background:var(--color-warning-500)}.ui-slider__input--error::-webkit-slider-thumb{background:var(--color-error-500)}.ui-slider__input:disabled{opacity:.5;cursor:not-allowed}\n"] }]
662
+ }] });
663
+
664
+ /**
665
+ * Switch Atom — Source: Nuxt UI v3 ❖ Switch
666
+ * Toggle control with label support and CVA
667
+ */
668
+ class SwitchComponent {
669
+ constructor() {
670
+ this.size = input('md');
671
+ this.color = input('primary');
672
+ this.label = input(null);
673
+ this.disabled = input(false);
674
+ this.checked = model(false);
675
+ this._onChange = () => { };
676
+ this._onTouched = () => { };
677
+ }
678
+ toggle() {
679
+ if (this.disabled())
680
+ return;
681
+ this.checked.update(v => !v);
682
+ this._onChange(this.checked());
683
+ this._onTouched();
684
+ }
685
+ writeValue(v) { this.checked.set(v); }
686
+ registerOnChange(fn) { this._onChange = fn; }
687
+ registerOnTouched(fn) { this._onTouched = fn; }
688
+ setDisabledState(_) { }
689
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: SwitchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
690
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: SwitchComponent, isStandalone: true, selector: "ui-switch", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SwitchComponent), multi: true }], ngImport: i0, template: `
691
+ <label class="ui-switch" [class.ui-switch--disabled]="disabled()">
692
+ <button
693
+ type="button"
694
+ role="switch"
695
+ [class]="'ui-switch__track ui-switch__track--' + size() + ' ui-switch__track--' + color() + (checked() ? ' ui-switch__track--on' : '')"
696
+ [attr.aria-checked]="checked()"
697
+ [disabled]="disabled()"
698
+ (click)="toggle()"
699
+ >
700
+ <span class="ui-switch__thumb" [class.ui-switch__thumb--on]="checked()"></span>
701
+ </button>
702
+ @if (label()) {
703
+ <span class="ui-switch__label">{{ label() }}</span>
704
+ }
705
+ </label>
706
+ `, isInline: true, styles: [".ui-switch{display:inline-flex;align-items:center;gap:.5rem;cursor:pointer}.ui-switch--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ui-switch__track{position:relative;display:inline-flex;align-items:center;border:none;border-radius:var(--radius-full);background:var(--color-neutral-300);cursor:pointer;transition:background var(--transition-base);padding:2px}.ui-switch__track--xs{width:28px;height:16px}.ui-switch__track--sm{width:32px;height:18px}.ui-switch__track--md{width:40px;height:22px}.ui-switch__track--lg{width:48px;height:26px}.ui-switch__track--xl{width:56px;height:30px}.ui-switch__track--on.ui-switch__track--primary{background:var(--color-primary-500)}.ui-switch__track--on.ui-switch__track--neutral{background:var(--color-neutral-800)}.ui-switch__track--on.ui-switch__track--success{background:var(--color-success-500)}.ui-switch__track--on.ui-switch__track--warning{background:var(--color-warning-500)}.ui-switch__track--on.ui-switch__track--error{background:var(--color-error-500)}.ui-switch__track:focus-visible{box-shadow:0 0 0 2px var(--color-bg),0 0 0 4px var(--color-ring)}.ui-switch__thumb{width:calc(50% - 2px);height:calc(100% - 4px);border-radius:50%;background:#fff;box-shadow:var(--shadow-xs);transition:transform var(--transition-base);transform:translate(0)}.ui-switch__thumb--on{transform:translate(100%)}.ui-switch__label{font-family:var(--font-sans);font-size:var(--text-sm);color:var(--color-text)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
707
+ }
708
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: SwitchComponent, decorators: [{
709
+ type: Component,
710
+ args: [{ selector: 'ui-switch', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SwitchComponent), multi: true }], template: `
711
+ <label class="ui-switch" [class.ui-switch--disabled]="disabled()">
712
+ <button
713
+ type="button"
714
+ role="switch"
715
+ [class]="'ui-switch__track ui-switch__track--' + size() + ' ui-switch__track--' + color() + (checked() ? ' ui-switch__track--on' : '')"
716
+ [attr.aria-checked]="checked()"
717
+ [disabled]="disabled()"
718
+ (click)="toggle()"
719
+ >
720
+ <span class="ui-switch__thumb" [class.ui-switch__thumb--on]="checked()"></span>
721
+ </button>
722
+ @if (label()) {
723
+ <span class="ui-switch__label">{{ label() }}</span>
724
+ }
725
+ </label>
726
+ `, styles: [".ui-switch{display:inline-flex;align-items:center;gap:.5rem;cursor:pointer}.ui-switch--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ui-switch__track{position:relative;display:inline-flex;align-items:center;border:none;border-radius:var(--radius-full);background:var(--color-neutral-300);cursor:pointer;transition:background var(--transition-base);padding:2px}.ui-switch__track--xs{width:28px;height:16px}.ui-switch__track--sm{width:32px;height:18px}.ui-switch__track--md{width:40px;height:22px}.ui-switch__track--lg{width:48px;height:26px}.ui-switch__track--xl{width:56px;height:30px}.ui-switch__track--on.ui-switch__track--primary{background:var(--color-primary-500)}.ui-switch__track--on.ui-switch__track--neutral{background:var(--color-neutral-800)}.ui-switch__track--on.ui-switch__track--success{background:var(--color-success-500)}.ui-switch__track--on.ui-switch__track--warning{background:var(--color-warning-500)}.ui-switch__track--on.ui-switch__track--error{background:var(--color-error-500)}.ui-switch__track:focus-visible{box-shadow:0 0 0 2px var(--color-bg),0 0 0 4px var(--color-ring)}.ui-switch__thumb{width:calc(50% - 2px);height:calc(100% - 4px);border-radius:50%;background:#fff;box-shadow:var(--shadow-xs);transition:transform var(--transition-base);transform:translate(0)}.ui-switch__thumb--on{transform:translate(100%)}.ui-switch__label{font-family:var(--font-sans);font-size:var(--text-sm);color:var(--color-text)}\n"] }]
727
+ }] });
728
+
729
+ /**
730
+ * Tooltip Atom — Source: Nuxt UI v3 ❖ Tooltip
731
+ * CSS-only hover tooltip with positioning
732
+ */
733
+ class TooltipComponent {
734
+ constructor() {
735
+ this.text = input.required();
736
+ this.position = input('top');
737
+ this.shortcut = input(null);
738
+ this.delay = input(500);
739
+ }
740
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: TooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
741
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: TooltipComponent, isStandalone: true, selector: "ui-tooltip", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, shortcut: { classPropertyName: "shortcut", publicName: "shortcut", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
742
+ <span class="ui-tooltip-wrap">
743
+ <ng-content />
744
+ <span class="ui-tooltip ui-tooltip--{{ position() }}" role="tooltip">
745
+ {{ text() }}
746
+ @if (shortcut()) {
747
+ <kbd class="ui-tooltip__kbd">{{ shortcut() }}</kbd>
748
+ }
749
+ </span>
750
+ </span>
751
+ `, isInline: true, styles: [".ui-tooltip-wrap{position:relative;display:inline-flex;align-items:center}.ui-tooltip-wrap:hover .ui-tooltip,.ui-tooltip-wrap:focus-within .ui-tooltip{opacity:1;pointer-events:auto}.ui-tooltip{position:absolute;z-index:var(--z-tooltip);padding:5px 10px;background:var(--color-neutral-900);color:var(--color-neutral-0);font-family:var(--font-sans);font-size:var(--text-xs);font-weight:var(--font-medium);border-radius:var(--radius-md);white-space:nowrap;pointer-events:none;opacity:0;transition:opacity var(--transition-fast);box-shadow:var(--shadow-md)}.ui-tooltip--top{bottom:calc(100% + 6px);left:50%;transform:translate(-50%)}.ui-tooltip--bottom{top:calc(100% + 6px);left:50%;transform:translate(-50%)}.ui-tooltip--left{right:calc(100% + 6px);top:50%;transform:translateY(-50%)}.ui-tooltip--right{left:calc(100% + 6px);top:50%;transform:translateY(-50%)}.ui-tooltip__kbd{display:inline-flex;align-items:center;justify-content:center;padding:1px 4px;margin-left:4px;background:var(--color-neutral-700);border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:.7em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
752
+ }
753
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: TooltipComponent, decorators: [{
754
+ type: Component,
755
+ args: [{ selector: 'ui-tooltip', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
756
+ <span class="ui-tooltip-wrap">
757
+ <ng-content />
758
+ <span class="ui-tooltip ui-tooltip--{{ position() }}" role="tooltip">
759
+ {{ text() }}
760
+ @if (shortcut()) {
761
+ <kbd class="ui-tooltip__kbd">{{ shortcut() }}</kbd>
762
+ }
763
+ </span>
764
+ </span>
765
+ `, styles: [".ui-tooltip-wrap{position:relative;display:inline-flex;align-items:center}.ui-tooltip-wrap:hover .ui-tooltip,.ui-tooltip-wrap:focus-within .ui-tooltip{opacity:1;pointer-events:auto}.ui-tooltip{position:absolute;z-index:var(--z-tooltip);padding:5px 10px;background:var(--color-neutral-900);color:var(--color-neutral-0);font-family:var(--font-sans);font-size:var(--text-xs);font-weight:var(--font-medium);border-radius:var(--radius-md);white-space:nowrap;pointer-events:none;opacity:0;transition:opacity var(--transition-fast);box-shadow:var(--shadow-md)}.ui-tooltip--top{bottom:calc(100% + 6px);left:50%;transform:translate(-50%)}.ui-tooltip--bottom{top:calc(100% + 6px);left:50%;transform:translate(-50%)}.ui-tooltip--left{right:calc(100% + 6px);top:50%;transform:translateY(-50%)}.ui-tooltip--right{left:calc(100% + 6px);top:50%;transform:translateY(-50%)}.ui-tooltip__kbd{display:inline-flex;align-items:center;justify-content:center;padding:1px 4px;margin-left:4px;background:var(--color-neutral-700);border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:.7em}\n"] }]
766
+ }] });
767
+
768
+ // ============================================================
769
+ // ATOMS — Nuxt UI v3 Design Kit → Angular 19 + NX
770
+ // Basic building blocks (no component dependencies)
771
+ // ============================================================
772
+
773
+ /**
774
+ * Generated bundle index. Do not edit.
775
+ */
776
+
777
+ export { AvatarComponent, BadgeComponent, ButtonComponent, CheckboxComponent, ChipComponent, KbdComponent, LinkComponent, ProgressComponent, SeparatorComponent, SkeletonComponent, SliderComponent, SwitchComponent, TooltipComponent };
778
+ //# sourceMappingURL=atomng-ui-atoms.mjs.map