@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
package/README.md ADDED
@@ -0,0 +1,401 @@
1
+ # @atomng/ui
2
+
3
+ > Angular 19 component library — Atomic Design system built with **Standalone Components**, **Angular Signals** and **SCSS design tokens**.
4
+
5
+ [![Angular](https://img.shields.io/badge/Angular-19-dd0031?logo=angular)](https://angular.dev)
6
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.6-3178c6?logo=typescript)](https://www.typescriptlang.org)
7
+ [![npm](https://img.shields.io/badge/npm-%40atomng%2Fui-cb3837?logo=npm)](https://www.npmjs.com/package/@atomng/ui)
8
+ [![License](https://img.shields.io/badge/license-MIT-green)](./LICENSE)
9
+
10
+ ---
11
+
12
+ ## What is @atomng/ui?
13
+
14
+ `@atomng/ui` is a fully Angular-native UI component library following the **Atomic Design** methodology (Atoms → Molecules → Organisms). Built entirely with:
15
+
16
+ - **Standalone Components** — no `NgModule`, tree-shakable by default
17
+ - **Angular Signals** — reactive state with `signal()`, `model()`, `computed()`
18
+ - **SCSS design tokens** — all values exposed as CSS custom properties
19
+ - **ChangeDetectionStrategy.OnPush** — every component is performance-optimised
20
+ - **Dark mode** — toggle via `data-theme="dark"` on any parent element
21
+ - **Theming** — runtime primary color switching with 18 built-in palettes
22
+
23
+ ---
24
+
25
+ ## Installation
26
+
27
+ ```bash
28
+ npm install @atomng/ui
29
+ ```
30
+
31
+ Install required peer dependencies if not already present:
32
+
33
+ ```bash
34
+ npm install @angular/core @angular/common @angular/animations rxjs lucide-angular
35
+ ```
36
+
37
+ ---
38
+
39
+ ## Setup
40
+
41
+ ### 1 — Import design tokens in your global `styles.scss`
42
+
43
+ ```scss
44
+ /* All tokens at once */
45
+ @use 'node_modules/@atomng/ui/tokens/index' as *;
46
+
47
+ /* Or individually */
48
+ @use 'node_modules/@atomng/ui/tokens/colors' as *;
49
+ @use 'node_modules/@atomng/ui/tokens/typography' as *;
50
+ @use 'node_modules/@atomng/ui/tokens/spacing' as *;
51
+ ```
52
+
53
+ You can also configure `stylePreprocessorOptions` in `angular.json` to avoid the long path:
54
+
55
+ ```json
56
+ {
57
+ "stylePreprocessorOptions": {
58
+ "includePaths": ["node_modules/@atomng/ui/tokens"]
59
+ }
60
+ }
61
+ ```
62
+
63
+ Then simply:
64
+
65
+ ```scss
66
+ @use 'colors' as *;
67
+ @use 'typography' as *;
68
+ @use 'spacing' as *;
69
+ ```
70
+
71
+ ### 2 — Setup icons (required by Sidebar)
72
+
73
+ `@atomng/ui` uses **[lucide-angular](https://lucide.dev)** for all icons. To use icons in your own components, import `LucideAngularModule.pick()` with only the icons you need:
74
+
75
+ ```ts
76
+ import { LucideAngularModule, House, Settings } from 'lucide-angular';
77
+
78
+ @Component({
79
+ standalone: true,
80
+ // LucideAngularModule.pick() returns ModuleWithProviders — supported at runtime
81
+ // in Angular 14+ standalone components; cast `as any` bypasses the TS type check.
82
+ imports: [LucideAngularModule.pick({ House, Settings }) as any],
83
+ template: `<lucide-icon name="house" [size]="20" />`,
84
+ })
85
+ export class MyComponent {}
86
+ ```
87
+
88
+ > **Rule:** always use `<lucide-icon>` — never inline SVG.
89
+
90
+ ### 3 — Add animations (required by Sidebar)
91
+
92
+ ```ts
93
+ // app.config.ts
94
+ import { provideAnimations } from '@angular/platform-browser/animations';
95
+
96
+ export const appConfig: ApplicationConfig = {
97
+ providers: [
98
+ provideAnimations(),
99
+ ],
100
+ };
101
+ ```
102
+
103
+ ### 4 — Optional: configure the theme at bootstrap
104
+
105
+ ```ts
106
+ // app.config.ts
107
+ import { provideSharedUiTheme } from '@atomng/ui/tokens';
108
+
109
+ export const appConfig: ApplicationConfig = {
110
+ providers: [
111
+ provideAnimations(),
112
+ provideSharedUiTheme({ primaryColor: 'indigo', mode: 'light' }),
113
+ ],
114
+ };
115
+ ```
116
+
117
+ ---
118
+
119
+ ## Usage
120
+
121
+ All components are **standalone** — import only what you need:
122
+
123
+ ```ts
124
+ import { ButtonComponent } from '@atomng/ui/atoms';
125
+ import { InputComponent } from '@atomng/ui/molecules';
126
+ import { SidebarComponent } from '@atomng/ui/organisms';
127
+ import { ThemeToggleComponent } from '@atomng/ui/tokens';
128
+
129
+ // Or import everything from the root barrel:
130
+ import { ButtonComponent, InputComponent } from '@atomng/ui';
131
+ ```
132
+
133
+ ```html
134
+ <ui-button variant="solid" color="primary" [loading]="isLoading">
135
+ Enregistrer
136
+ </ui-button>
137
+
138
+ <ui-input placeholder="Rechercher…" />
139
+
140
+ <ui-badge color="success" variant="soft">Actif</ui-badge>
141
+
142
+ <!-- Light / System / Dark mode toggle -->
143
+ <ui-theme-toggle />
144
+
145
+ <!-- Primary color picker (18 palettes) -->
146
+ <ui-theme-picker (change)="onColorChange()" />
147
+ ```
148
+
149
+ ---
150
+
151
+ ## Entry points
152
+
153
+ | Import path | Contents |
154
+ |---|---|
155
+ | `@atomng/ui` | Tout (atoms + molecules + organisms) |
156
+ | `@atomng/ui/atoms` | Button, Badge, Avatar, Checkbox, Chip, Progress, Skeleton, Slider, Switch, Tooltip, Link, Separator, Kbd |
157
+ | `@atomng/ui/molecules` | Input, Select, SelectSearch, Textarea, Alert, FormField, Tabs, Breadcrumb, Pagination, AvatarGroup, ButtonGroup, Toast |
158
+ | `@atomng/ui/organisms` | Sidebar, Card, Table, Modal, Accordion, DropdownMenu, NavigationMenu |
159
+ | `@atomng/ui/tokens` | ThemeService, ThemeToggleComponent, ThemePickerComponent, provideSharedUiTheme, color presets |
160
+
161
+ ---
162
+
163
+ ## Components
164
+
165
+ ### Atoms
166
+
167
+ | Composant | Sélecteur | Inputs principaux |
168
+ |---|---|---|
169
+ | `ButtonComponent` | `ui-button` | `variant` (solid\|outline\|soft\|subtle\|ghost\|link), `color`, `size`, `loading`, `disabled`, `square` |
170
+ | `BadgeComponent` | `ui-badge` | `label`, `color`, `variant`, `size` |
171
+ | `AvatarComponent` | `ui-avatar` | `src`, `alt`, `initials`, `size` (xs→3xl) |
172
+ | `CheckboxComponent` | `ui-checkbox` | `label`, `size`, `color`, `checked` (model), `indeterminate` |
173
+ | `ChipComponent` | `ui-chip` | `label`, `color`, `size`, `closable` |
174
+ | `ProgressComponent` | `ui-progress` | `value`, `max`, `color`, `size` |
175
+ | `SkeletonComponent` | `ui-skeleton` | `width`, `height`, `rounded` |
176
+ | `SliderComponent` | `ui-slider` | `min`, `max`, `step`, `value` (model) |
177
+ | `SwitchComponent` | `ui-switch` | `label`, `size`, `color`, `checked` (model) |
178
+ | `TooltipComponent` | `ui-tooltip` | `content`, `placement` |
179
+ | `LinkComponent` | `ui-link` | `href`, `to` (routerLink), `external` |
180
+ | `SeparatorComponent` | `ui-separator` | `orientation`, `label` |
181
+ | `KbdComponent` | `ui-kbd` | `value` |
182
+
183
+ ### Molecules
184
+
185
+ | Composant | Sélecteur | Inputs principaux |
186
+ |---|---|---|
187
+ | `InputComponent` | `ui-input` | `type`, `placeholder`, `size`, `variant`, `color`, `disabled` — CVA ✓ |
188
+ | `SelectComponent` | `ui-select` | `options`, `placeholder`, `size`, `disabled` — CVA ✓ |
189
+ | `SelectSearchComponent` | `ui-select-search` | `options`, `placeholder`, `searchable` — CVA ✓ |
190
+ | `TextareaComponent` | `ui-textarea` | `placeholder`, `rows`, `size`, `variant` — CVA ✓ |
191
+ | `AlertComponent` | `ui-alert` | `color`, `title`, `description`, `closable` — Output: `close` |
192
+ | `FormFieldComponent` | `ui-form-field` | `label`, `name`, `errorMessage`, `required`, `size` |
193
+ | `TabsComponent` | `ui-tabs` | `tabs`, `activeIndex` (model) |
194
+ | `BreadcrumbComponent` | `ui-breadcrumb` | `items` |
195
+ | `PaginationComponent` | `ui-pagination` | `total`, `pageSize`, `page` (model) |
196
+ | `AvatarGroupComponent` | `ui-avatar-group` | `items`, `max`, `size` |
197
+ | `ButtonGroupComponent` | `ui-button-group` | `orientation` |
198
+ | `ToastComponent` | `ui-toast` | `message`, `color`, `duration` |
199
+
200
+ ### Organisms
201
+
202
+ | Composant | Sélecteur | Inputs principaux |
203
+ |---|---|---|
204
+ | `SidebarComponent` | `ui-sidebar` | `navGroups`, `footerGroups`, `user`, `collapsible`, `collapsed` (model), `showSearch` |
205
+ | `CardComponent` | `ui-card` | `title`, `description`, `padding` |
206
+ | `TableComponent` | `ui-table` | `columns`, `data`, `loading` + `UiTableCellDirective` |
207
+ | `ModalComponent` | `ui-modal` | `open` (model), `title`, `size` |
208
+ | `AccordionComponent` | `ui-accordion` | `items`, `multiple` |
209
+ | `DropdownMenuComponent` | `ui-dropdown-menu` | `items`, `trigger` |
210
+ | `NavigationMenuComponent` | `ui-navigation-menu` | `items`, `orientation` |
211
+
212
+ ---
213
+
214
+ ## Custom cell templates (`UiTableCellDirective`)
215
+
216
+ Use `ng-template[uiCell]` inside `<ui-table>` to render custom content per column:
217
+
218
+ ```ts
219
+ import { TableComponent, UiTableCellDirective } from '@atomng/ui/organisms';
220
+ import { BadgeComponent } from '@atomng/ui/atoms';
221
+
222
+ @Component({
223
+ standalone: true,
224
+ imports: [TableComponent, UiTableCellDirective, BadgeComponent],
225
+ })
226
+ ```
227
+
228
+ ```html
229
+ <ui-table [columns]="cols" [data]="rows">
230
+ <ng-template uiCell="status" let-row>
231
+ <ui-badge [color]="row['statusColor']" variant="soft">
232
+ {{ row['status'] }}
233
+ </ui-badge>
234
+ </ng-template>
235
+ </ui-table>
236
+ ```
237
+
238
+ ---
239
+
240
+ ## Theming
241
+
242
+ ### Primary color
243
+
244
+ `@atomng/ui` ships **18 color presets** (Tailwind CSS v3 palettes, scale 50→950):
245
+
246
+ | Preset | Swatch 500 | Preset | Swatch 500 |
247
+ |---|---|---|---|
248
+ | `green` | ![#22c55e](https://via.placeholder.com/12/22c55e/22c55e) `#22c55e` | `lime` | ![#84cc16](https://via.placeholder.com/12/84cc16/84cc16) `#84cc16` |
249
+ | `emerald` | ![#10b981](https://via.placeholder.com/12/10b981/10b981) `#10b981` | `amber` | ![#f59e0b](https://via.placeholder.com/12/f59e0b/f59e0b) `#f59e0b` |
250
+ | `teal` | ![#14b8a6](https://via.placeholder.com/12/14b8a6/14b8a6) `#14b8a6` | `orange` | ![#f97316](https://via.placeholder.com/12/f97316/f97316) `#f97316` |
251
+ | `cyan` | ![#06b6d4](https://via.placeholder.com/12/06b6d4/06b6d4) `#06b6d4` | `red` | ![#ef4444](https://via.placeholder.com/12/ef4444/ef4444) `#ef4444` |
252
+ | `sky` | ![#0ea5e9](https://via.placeholder.com/12/0ea5e9/0ea5e9) `#0ea5e9` | `rose` | ![#f43f5e](https://via.placeholder.com/12/f43f5e/f43f5e) `#f43f5e` |
253
+ | `blue` | ![#3b82f6](https://via.placeholder.com/12/3b82f6/3b82f6) `#3b82f6` | `pink` | ![#ec4899](https://via.placeholder.com/12/ec4899/ec4899) `#ec4899` |
254
+ | `indigo` | ![#6366f1](https://via.placeholder.com/12/6366f1/6366f1) `#6366f1` | `fuchsia` | ![#d946ef](https://via.placeholder.com/12/d946ef/d946ef) `#d946ef` |
255
+ | `violet` | ![#8b5cf6](https://via.placeholder.com/12/8b5cf6/8b5cf6) `#8b5cf6` | `purple` | ![#a855f7](https://via.placeholder.com/12/a855f7/a855f7) `#a855f7` |
256
+ | `slate` | ![#64748b](https://via.placeholder.com/12/64748b/64748b) `#64748b` | `zinc` | ![#71717a](https://via.placeholder.com/12/71717a/71717a) `#71717a` |
257
+
258
+ Each preset overrides the CSS custom properties `--color-primary-50` → `--color-primary-950` on `:root`.
259
+
260
+ Set the color at bootstrap via `provideSharedUiTheme()`, or at runtime:
261
+
262
+ ```ts
263
+ import { ThemeService } from '@atomng/ui/tokens';
264
+
265
+ export class MyComponent {
266
+ private theme = inject(ThemeService);
267
+
268
+ changeColor(): void {
269
+ // Use a preset name
270
+ this.theme.setPrimary('violet');
271
+
272
+ // Or pass a full custom palette (11 shades, 50→950)
273
+ this.theme.setPrimary({
274
+ 50: '#fdf4ff', 100: '#fae8ff', 200: '#f5d0fe', 300: '#f0abfc',
275
+ 400: '#e879f9', 500: '#d946ef', 600: '#c026d3', 700: '#a21caf',
276
+ 800: '#86198f', 900: '#701a75', 950: '#4a044e',
277
+ });
278
+ }
279
+ }
280
+ ```
281
+
282
+ #### ThemeService API
283
+
284
+ ```ts
285
+ theme = inject(ThemeService);
286
+
287
+ // Signals (read-only)
288
+ theme.activePreset() // PrimaryColorPreset | null
289
+ theme.activeMode() // 'light' | 'dark' | 'system'
290
+ theme.isDark() // boolean — resolved, accounts for 'system'
291
+ theme.presets // ColorPresetMeta[] — all 18 presets for a picker UI
292
+ ```
293
+
294
+ ### Dark / Light / System mode
295
+
296
+ ```ts
297
+ this.theme.setMode('dark'); // force dark
298
+ this.theme.setMode('light'); // force light
299
+ this.theme.setMode('system'); // follow OS preference
300
+ this.theme.toggleMode(); // light ↔ dark
301
+ ```
302
+
303
+ The mode and selected color are **automatically persisted** to `localStorage` and restored on the next page load.
304
+
305
+ Add the built-in components anywhere in your app:
306
+
307
+ ```html
308
+ <!-- Toggle light / dark -->
309
+ <ui-theme-toggle />
310
+
311
+ <!-- Visual color picker (all 18 presets) -->
312
+ <ui-theme-picker />
313
+ ```
314
+
315
+ ### Dark mode in your own SCSS
316
+
317
+ Dark mode is activated by `data-theme="dark"` on the `<html>` element (set automatically by `ThemeService`). All CSS custom properties cascade down:
318
+
319
+ ```scss
320
+ .my-card {
321
+ background: var(--color-bg); // white in light, #030712 in dark
322
+ color: var(--color-text); // #111827 in light, #f9fafb in dark
323
+ border: 1px solid var(--color-border);
324
+ }
325
+ ```
326
+
327
+ ---
328
+
329
+ ## Design tokens reference
330
+
331
+ ```scss
332
+ // ── Backgrounds
333
+ var(--color-bg) // Page background
334
+ var(--color-bg-subtle) // Subtle surface (cards, inputs)
335
+ var(--color-bg-muted) // Muted surface
336
+
337
+ // ── Text
338
+ var(--color-text) // Primary text
339
+ var(--color-text-muted) // Secondary text
340
+ var(--color-text-subtle) // Tertiary / placeholder
341
+
342
+ // ── Borders
343
+ var(--color-border)
344
+ var(--color-border-muted)
345
+
346
+ // ── Brand
347
+ var(--color-primary-500) // Active primary color (runtime)
348
+ var(--color-primary-100) // … through 950
349
+
350
+ // ── Typography
351
+ var(--font-sans) // Primary font (system-ui)
352
+ var(--font-mono) // Monospace
353
+ var(--text-xs) // 11px
354
+ var(--text-sm) // 13px
355
+ var(--text-base) // 15px
356
+ var(--text-lg) // 18px
357
+ var(--text-xl) // 20px
358
+ var(--text-2xl) // 24px
359
+ var(--font-medium) // 500
360
+ var(--font-semibold) // 600
361
+ var(--font-bold) // 700
362
+
363
+ // ── Spacing (base 4px)
364
+ var(--spacing-1) // 4px
365
+ var(--spacing-2) // 8px
366
+ var(--spacing-4) // 16px
367
+ var(--spacing-6) // 24px
368
+ var(--spacing-8) // 32px
369
+ var(--spacing-12) // 48px
370
+
371
+ // ── Radius
372
+ var(--radius-sm) // 4px
373
+ var(--radius-md) // 6px
374
+ var(--radius-lg) // 10px
375
+ var(--radius-xl) // 14px
376
+
377
+ // ── Transitions
378
+ var(--transition-colors)
379
+ var(--transition-fast)
380
+ var(--transition-slow)
381
+ ```
382
+
383
+ ---
384
+
385
+ ## Requirements
386
+
387
+ | Dependency | Version | Notes |
388
+ |---|---|---|
389
+ | `@angular/core` | `>= 19.0.0` | |
390
+ | `@angular/common` | `>= 19.0.0` | |
391
+ | `@angular/animations` | `>= 19.0.0` | Required by Sidebar |
392
+ | `@angular/forms` | `>= 19.0.0` | Required by CVA components (Input, Select…) |
393
+ | `@angular/router` | `>= 19.0.0` | Required by Sidebar, Link, Breadcrumb |
394
+ | `rxjs` | `>= 7.4.0` | |
395
+ | `lucide-angular` | `>= 1.0.0` | Required by Sidebar (icons) |
396
+
397
+ ---
398
+
399
+ ## License
400
+
401
+ MIT © [LIBASSE MBAYE](mailto:libasselayembayedev@gmail.com)
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomng-ui.d.ts","sourceRoot":"","sources":["../../../libs/shared-ui/src/atomng-ui.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,cAAc,SAAS,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomng-ui-atoms.d.ts","sourceRoot":"","sources":["../../../../libs/shared-ui/src/lib/atoms/atomng-ui-atoms.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,cAAc,SAAS,CAAC"}
@@ -0,0 +1,24 @@
1
+ import * as i0 from "@angular/core";
2
+ export type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';
3
+ /**
4
+ * Avatar Atom
5
+ * Source: Nuxt UI v3 — ❖ Avatar
6
+ * Shows: image → initials → icon fallback
7
+ * Sizes: xs(20) sm(24) md(32) lg(40) xl(48) 2xl(64) 3xl(80)
8
+ */
9
+ export declare class AvatarComponent {
10
+ readonly src: import("@angular/core").InputSignal<string>;
11
+ readonly alt: import("@angular/core").InputSignal<string>;
12
+ readonly size: import("@angular/core").InputSignal<AvatarSize>;
13
+ readonly initials: import("@angular/core").InputSignal<string>;
14
+ readonly chip: import("@angular/core").InputSignal<boolean>;
15
+ readonly chipColor: import("@angular/core").InputSignal<string>;
16
+ readonly chipAlt: import("@angular/core").InputSignal<string>;
17
+ readonly rounded: import("@angular/core").InputSignal<boolean>;
18
+ protected readonly imgError: import("@angular/core").WritableSignal<boolean>;
19
+ protected readonly classes: import("@angular/core").Signal<string>;
20
+ protected onImgError(): void;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<AvatarComponent, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<AvatarComponent, "ui-avatar", never, { "src": { "alias": "src"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "initials": { "alias": "initials"; "required": false; "isSignal": true; }; "chip": { "alias": "chip"; "required": false; "isSignal": true; }; "chipColor": { "alias": "chipColor"; "required": false; "isSignal": true; }; "chipAlt": { "alias": "chipAlt"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
23
+ }
24
+ //# sourceMappingURL=avatar.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar.component.d.ts","sourceRoot":"","sources":["../../../../../libs/shared-ui/src/lib/atoms/avatar/avatar.component.ts"],"names":[],"mappings":";AAGA,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;AAE1E;;;;;GAKG;AACH,qBAiCa,eAAe;IAC1B,QAAQ,CAAC,GAAG,8CAAoC;IAChD,QAAQ,CAAC,GAAG,8CAAoC;IAChD,QAAQ,CAAC,IAAI,kDAAgC;IAC7C,QAAQ,CAAC,QAAQ,8CAA+B;IAChD,QAAQ,CAAC,IAAI,+CAA8B;IAC3C,QAAQ,CAAC,SAAS,8CAA4B;IAC9C,QAAQ,CAAC,OAAO,8CAAgC;IAChD,QAAQ,CAAC,OAAO,+CAA0B;IAE1C,SAAS,CAAC,QAAQ,CAAC,QAAQ,kDAAiB;IAE5C,SAAS,CAAC,QAAQ,CAAC,OAAO,yCAIvB;IAEH,SAAS,CAAC,UAAU;yCAlBT,eAAe;2CAAf,eAAe;CAmB3B"}
@@ -0,0 +1,3 @@
1
+ export { AvatarComponent } from './avatar.component';
2
+ export type { AvatarSize } from './avatar.component';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../libs/shared-ui/src/lib/atoms/avatar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import * as i0 from "@angular/core";
2
+ export type BadgeVariant = 'solid' | 'outline' | 'soft' | 'subtle';
3
+ export type BadgeSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
+ export type BadgeColor = 'neutral' | 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'error';
5
+ /**
6
+ * Badge Atom
7
+ * Source: Nuxt UI v3 — ❖ Badge
8
+ * Colors: Neutral | Primary | Secondary | Success | Info | Warning | Error
9
+ * Variants: Outline | Soft | Solid | Subtle
10
+ * Sizes: xs | sm | md | lg | xl
11
+ * RoundedFull: True | False
12
+ */
13
+ export declare class BadgeComponent {
14
+ readonly variant: import("@angular/core").InputSignal<BadgeVariant>;
15
+ readonly color: import("@angular/core").InputSignal<BadgeColor>;
16
+ readonly size: import("@angular/core").InputSignal<BadgeSize>;
17
+ readonly rounded: import("@angular/core").InputSignal<boolean>;
18
+ readonly dot: import("@angular/core").InputSignal<boolean>;
19
+ protected readonly classes: import("@angular/core").Signal<string>;
20
+ static ɵfac: i0.ɵɵFactoryDeclaration<BadgeComponent, never>;
21
+ static ɵcmp: i0.ɵɵComponentDeclaration<BadgeComponent, "ui-badge", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; "dot": { "alias": "dot"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
22
+ }
23
+ //# sourceMappingURL=badge.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.component.d.ts","sourceRoot":"","sources":["../../../../../libs/shared-ui/src/lib/atoms/badge/badge.component.ts"],"names":[],"mappings":";AAGA,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AACnE,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACzD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAExG;;;;;;;GAOG;AACH,qBAea,cAAc;IACzB,QAAQ,CAAC,OAAO,oDAAiC;IACjD,QAAQ,CAAC,KAAK,kDAAoC;IAClD,QAAQ,CAAC,IAAI,iDAA+B;IAC5C,QAAQ,CAAC,OAAO,+CAA2B;IAC3C,QAAQ,CAAC,GAAG,+CAA+B;IAE3C,SAAS,CAAC,QAAQ,CAAC,OAAO,yCAIvB;yCAXQ,cAAc;2CAAd,cAAc;CAY1B"}
@@ -0,0 +1,3 @@
1
+ export { BadgeComponent } from './badge.component';
2
+ export type { BadgeVariant, BadgeSize, BadgeColor } from './badge.component';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../libs/shared-ui/src/lib/atoms/badge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,47 @@
1
+ import * as i0 from "@angular/core";
2
+ export type ButtonVariant = 'solid' | 'outline' | 'soft' | 'subtle' | 'ghost' | 'link';
3
+ export type ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
+ export type ButtonColor = 'primary' | 'secondary' | 'neutral' | 'success' | 'warning' | 'error' | 'info';
5
+ /**
6
+ * Button Atom
7
+ * Source: Nuxt UI v3 Design Kit — ❖ Button
8
+ *
9
+ * Variants: solid | outline | soft | subtle | ghost | link
10
+ * Sizes: xs (h:24px) | sm (h:28px) | md (h:32px) | lg (h:36px) | xl (h:40px)
11
+ * States: default | hover | focus | disabled | loading
12
+ *
13
+ * @example
14
+ * <ui-button variant="solid" color="primary" size="md">Click me</ui-button>
15
+ * <ui-button variant="outline" [loading]="true">Loading</ui-button>
16
+ * <ui-button [square]="true" leadingIcon="plus" />
17
+ */
18
+ export declare class ButtonComponent {
19
+ /** Visual variant — from Figma: Solid | Outline | Soft | Subtle | Ghost | Link */
20
+ readonly variant: import("@angular/core").InputSignal<ButtonVariant>;
21
+ /** Color theme */
22
+ readonly color: import("@angular/core").InputSignal<ButtonColor>;
23
+ /** Size — from Figma: xs(h:24) sm(h:28) md(h:32) lg(h:36) xl(h:40) */
24
+ readonly size: import("@angular/core").InputSignal<ButtonSize>;
25
+ /** Disabled state */
26
+ readonly disabled: import("@angular/core").InputSignal<boolean>;
27
+ /** Loading state — shows spinner */
28
+ readonly loading: import("@angular/core").InputSignal<boolean>;
29
+ /** Position of the spinner */
30
+ readonly loadingPosition: import("@angular/core").InputSignal<"leading" | "trailing">;
31
+ /** Square/icon-only mode */
32
+ readonly square: import("@angular/core").InputSignal<boolean>;
33
+ /** Full width */
34
+ readonly block: import("@angular/core").InputSignal<boolean>;
35
+ /** Leading icon name (for aria/slot reference) */
36
+ readonly leadingIcon: import("@angular/core").InputSignal<string>;
37
+ /** Trailing icon name */
38
+ readonly trailingIcon: import("@angular/core").InputSignal<string>;
39
+ /** HTML button type */
40
+ readonly type: import("@angular/core").InputSignal<"button" | "submit" | "reset">;
41
+ /** Accessible label for icon-only buttons */
42
+ readonly ariaLabel: import("@angular/core").InputSignal<string>;
43
+ protected readonly hostClasses: import("@angular/core").Signal<string>;
44
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
45
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "ui-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "loadingPosition": { "alias": "loadingPosition"; "required": false; "isSignal": true; }; "square": { "alias": "square"; "required": false; "isSignal": true; }; "block": { "alias": "block"; "required": false; "isSignal": true; }; "leadingIcon": { "alias": "leadingIcon"; "required": false; "isSignal": true; }; "trailingIcon": { "alias": "trailingIcon"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["[slot=leading-icon]", "*", "[slot=trailing-icon]", "[slot=icon]"], true, never>;
46
+ }
47
+ //# sourceMappingURL=button.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.component.d.ts","sourceRoot":"","sources":["../../../../../libs/shared-ui/src/lib/atoms/button/button.component.ts"],"names":[],"mappings":";AASA,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AACvF,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1D,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzG;;;;;;;;;;;;GAYG;AACH,qBA2Da,eAAe;IAC1B,kFAAkF;IAClF,QAAQ,CAAC,OAAO,qDAAiC;IACjD,kBAAkB;IAClB,QAAQ,CAAC,KAAK,mDAAiC;IAC/C,sEAAsE;IACtE,QAAQ,CAAC,IAAI,kDAA2B;IACxC,qBAAqB;IACrB,QAAQ,CAAC,QAAQ,+CAAyB;IAC1C,oCAAoC;IACpC,QAAQ,CAAC,OAAO,+CAAyB;IACzC,8BAA8B;IAC9B,QAAQ,CAAC,eAAe,8DAA4C;IACpE,4BAA4B;IAC5B,QAAQ,CAAC,MAAM,+CAAyB;IACxC,iBAAiB;IACjB,QAAQ,CAAC,KAAK,+CAAyB;IACvC,kDAAkD;IAClD,QAAQ,CAAC,WAAW,8CAA8B;IAClD,yBAAyB;IACzB,QAAQ,CAAC,YAAY,8CAA8B;IACnD,uBAAuB;IACvB,QAAQ,CAAC,IAAI,qEAAkD;IAC/D,6CAA6C;IAC7C,QAAQ,CAAC,SAAS,8CAA8B;IAEhD,SAAS,CAAC,QAAQ,CAAC,WAAW,yCAY3B;yCAtCQ,eAAe;2CAAf,eAAe;CAuC3B"}
@@ -0,0 +1,3 @@
1
+ export { ButtonComponent } from './button.component';
2
+ export type { ButtonVariant, ButtonSize, ButtonColor } from './button.component';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../libs/shared-ui/src/lib/atoms/button/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { ControlValueAccessor } from '@angular/forms';
2
+ import * as i0 from "@angular/core";
3
+ export type CheckboxSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
+ export type CheckboxColor = 'primary' | 'neutral' | 'success' | 'warning' | 'error' | 'info';
5
+ /**
6
+ * Checkbox Atom — Source: Nuxt UI v3 ❖ Checkbox
7
+ * CVA-compatible, accessible (ARIA), indeterminate state
8
+ */
9
+ export declare class CheckboxComponent implements ControlValueAccessor {
10
+ readonly size: import("@angular/core").InputSignal<CheckboxSize>;
11
+ readonly color: import("@angular/core").InputSignal<CheckboxColor>;
12
+ readonly label: import("@angular/core").InputSignal<string>;
13
+ readonly disabled: import("@angular/core").InputSignal<boolean>;
14
+ readonly indeterminate: import("@angular/core").InputSignal<boolean>;
15
+ readonly required: import("@angular/core").InputSignal<boolean>;
16
+ readonly ariaLabel: import("@angular/core").InputSignal<string>;
17
+ readonly checked: import("@angular/core").ModelSignal<boolean>;
18
+ private _onChange;
19
+ private _onTouched;
20
+ writeValue(v: boolean): void;
21
+ registerOnChange(fn: (v: boolean) => void): void;
22
+ registerOnTouched(fn: () => void): void;
23
+ setDisabledState(_: boolean): void;
24
+ protected onChange(e: Event): void;
25
+ static ɵfac: i0.ɵɵFactoryDeclaration<CheckboxComponent, never>;
26
+ static ɵcmp: i0.ɵɵComponentDeclaration<CheckboxComponent, "ui-checkbox", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; }, never, never, true, never>;
27
+ }
28
+ //# sourceMappingURL=checkbox.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.component.d.ts","sourceRoot":"","sources":["../../../../../libs/shared-ui/src/lib/atoms/checkbox/checkbox.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAkC,MAAM,gBAAgB,CAAC;;AAGtF,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC5D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7F;;;GAGG;AACH,qBAoCa,iBAAkB,YAAW,oBAAoB;IAC5D,QAAQ,CAAC,IAAI,oDAAsC;IACnD,QAAQ,CAAC,KAAK,qDAA2C;IACzD,QAAQ,CAAC,KAAK,8CAAsC;IACpD,QAAQ,CAAC,QAAQ,+CAA8B;IAC/C,QAAQ,CAAC,aAAa,+CAAyB;IAC/C,QAAQ,CAAC,QAAQ,+CAA8B;IAC/C,QAAQ,CAAC,SAAS,8CAAkC;IACpD,QAAQ,CAAC,OAAO,+CAA+B;IAE/C,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,UAAU,CAAwB;IAE1C,UAAU,CAAC,CAAC,EAAE,OAAO;IACrB,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI;IACzC,iBAAiB,CAAC,EAAE,EAAE,MAAM,IAAI;IAChC,gBAAgB,CAAC,CAAC,EAAE,OAAO;IAE3B,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK;yCAlBhB,iBAAiB;2CAAjB,iBAAiB;CAwB7B"}
@@ -0,0 +1,2 @@
1
+ export { CheckboxComponent } from './checkbox.component';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../libs/shared-ui/src/lib/atoms/checkbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import * as i0 from "@angular/core";
2
+ export type ChipColor = 'primary' | 'secondary' | 'neutral' | 'success' | 'warning' | 'error' | 'info';
3
+ export type ChipSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
+ export type ChipPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';
5
+ /**
6
+ * Chip Atom — Source: Nuxt UI v3 ❖ Chip
7
+ * Small indicator overlaid on another element (e.g., notification dot)
8
+ */
9
+ export declare class ChipComponent {
10
+ readonly color: import("@angular/core").InputSignal<ChipColor>;
11
+ readonly size: import("@angular/core").InputSignal<ChipSize>;
12
+ readonly position: import("@angular/core").InputSignal<ChipPosition>;
13
+ readonly text: import("@angular/core").InputSignal<string>;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChipComponent, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChipComponent, "ui-chip", never, { "color": { "alias": "color"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
16
+ }
17
+ //# sourceMappingURL=chip.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chip.component.d.ts","sourceRoot":"","sources":["../../../../../libs/shared-ui/src/lib/atoms/chip/chip.component.ts"],"names":[],"mappings":";AAEA,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AACvG,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACxD,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,UAAU,GAAG,cAAc,GAAG,aAAa,CAAC;AAErF;;;GAGG;AACH,qBAca,aAAa;IACxB,QAAQ,CAAC,KAAK,iDAAkC;IAChD,QAAQ,CAAC,IAAI,gDAA6B;IAC1C,QAAQ,CAAC,QAAQ,oDAAoC;IACrD,QAAQ,CAAC,IAAI,8CAAkC;yCAJpC,aAAa;2CAAb,aAAa;CAKzB"}
@@ -0,0 +1,2 @@
1
+ export { ChipComponent } from './chip.component';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../libs/shared-ui/src/lib/atoms/chip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,14 @@
1
+ export * from './avatar';
2
+ export * from './badge';
3
+ export * from './button';
4
+ export * from './checkbox';
5
+ export * from './chip';
6
+ export * from './kbd';
7
+ export * from './link';
8
+ export * from './progress';
9
+ export * from './separator';
10
+ export * from './skeleton';
11
+ export * from './slider';
12
+ export * from './switch';
13
+ export * from './tooltip';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../libs/shared-ui/src/lib/atoms/index.ts"],"names":[],"mappings":"AAKA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { KbdComponent } from './kbd.component';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../libs/shared-ui/src/lib/atoms/kbd/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}