@egose/shadcn-theme-ng-tw 0.0.28 → 0.2.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 (244) hide show
  1. package/README.md +130 -13
  2. package/accordion/README.md +376 -34
  3. package/accordion/fesm2022/accordion.mjs +20 -20
  4. package/alert/README.md +343 -34
  5. package/alert/fesm2022/alert.mjs +18 -18
  6. package/alert-dialog/README.md +471 -5
  7. package/alert-dialog/fesm2022/alert-dialog.mjs +48 -48
  8. package/alert-dialog/types/alert-dialog.d.ts +1 -1
  9. package/aspect-ratio/README.md +272 -5
  10. package/aspect-ratio/fesm2022/aspect-ratio.mjs +9 -9
  11. package/autocomplete/README.md +473 -34
  12. package/autocomplete/fesm2022/autocomplete.mjs +54 -54
  13. package/autocomplete/types/autocomplete.d.ts +1 -1
  14. package/avatar/README.md +357 -5
  15. package/avatar/fesm2022/avatar.mjs +32 -32
  16. package/badge/README.md +289 -34
  17. package/badge/fesm2022/badge.mjs +4 -4
  18. package/basic-alert/README.md +324 -34
  19. package/basic-alert/fesm2022/basic-alert.mjs +4 -4
  20. package/basic-alert/types/basic-alert.d.ts +1 -1
  21. package/breadcrumb/README.md +406 -5
  22. package/breadcrumb/fesm2022/breadcrumb.mjs +34 -34
  23. package/button/README.md +453 -34
  24. package/button/fesm2022/button.mjs +96 -118
  25. package/button/types/button.d.ts +7 -10
  26. package/button-group/README.md +318 -5
  27. package/button-group/fesm2022/button-group.mjs +20 -20
  28. package/calendar/README.md +328 -34
  29. package/calendar/fesm2022/calendar.mjs +154 -154
  30. package/card/README.md +331 -5
  31. package/card/fesm2022/card.mjs +33 -33
  32. package/carousel/README.md +333 -5
  33. package/carousel/fesm2022/carousel.mjs +47 -44
  34. package/carousel/types/carousel.d.ts +1 -1
  35. package/checkbox/README.md +291 -34
  36. package/checkbox/fesm2022/checkbox.mjs +22 -20
  37. package/checkbox/types/checkbox.d.ts +5 -4
  38. package/collapsible/README.md +332 -5
  39. package/collapsible/fesm2022/collapsible.mjs +15 -15
  40. package/combobox/README.md +507 -5
  41. package/combobox/fesm2022/combobox.mjs +95 -92
  42. package/combobox/types/combobox.d.ts +1 -1
  43. package/command/README.md +435 -5
  44. package/command/fesm2022/command.mjs +56 -56
  45. package/confirmation-dialog/README.md +272 -34
  46. package/confirmation-dialog/fesm2022/confirmation-dialog.mjs +13 -12
  47. package/confirmation-dialog/types/confirmation-dialog.d.ts +9 -5
  48. package/context-menu/README.md +366 -5
  49. package/context-menu/fesm2022/context-menu.mjs +9 -9
  50. package/date-picker/README.md +436 -34
  51. package/date-picker/fesm2022/date-picker.mjs +79 -68
  52. package/date-picker/types/date-picker.d.ts +8 -4
  53. package/dialog/README.md +419 -34
  54. package/dialog/fesm2022/dialog.mjs +48 -48
  55. package/drawer/README.md +395 -5
  56. package/drawer/fesm2022/drawer.mjs +45 -45
  57. package/dropdown-menu/README.md +417 -5
  58. package/dropdown-menu/fesm2022/dropdown-menu.mjs +85 -73
  59. package/dropdown-menu/types/dropdown-menu.d.ts +4 -0
  60. package/empty/README.md +329 -5
  61. package/empty/fesm2022/empty.mjs +31 -31
  62. package/field/README.md +385 -5
  63. package/field/fesm2022/field.mjs +59 -59
  64. package/field/types/field.d.ts +1 -1
  65. package/form-checkbox/README.md +283 -34
  66. package/form-checkbox/fesm2022/form-checkbox.mjs +37 -19
  67. package/form-checkbox/types/form-checkbox.d.ts +7 -1
  68. package/form-date-picker/README.md +293 -34
  69. package/form-date-picker/fesm2022/form-date-picker.mjs +59 -24
  70. package/form-date-picker/types/form-date-picker.d.ts +7 -1
  71. package/form-field/README.md +327 -34
  72. package/form-field/fesm2022/form-field.mjs +30 -16
  73. package/form-field/types/form-field.d.ts +28 -20
  74. package/form-field-simple/README.md +311 -34
  75. package/form-field-simple/fesm2022/form-field-simple.mjs +4 -4
  76. package/form-searchable-multiselect/README.md +332 -34
  77. package/form-searchable-multiselect/fesm2022/form-searchable-multiselect.mjs +41 -21
  78. package/form-searchable-multiselect/types/form-searchable-multiselect.d.ts +8 -2
  79. package/form-select/README.md +321 -34
  80. package/form-select/fesm2022/form-select.mjs +62 -29
  81. package/form-select/types/form-select.d.ts +7 -1
  82. package/form-text-input/README.md +342 -34
  83. package/form-text-input/fesm2022/form-text-input.mjs +43 -55
  84. package/form-text-input/types/form-text-input.d.ts +9 -12
  85. package/form-textarea/README.md +318 -34
  86. package/form-textarea/fesm2022/form-textarea.mjs +42 -23
  87. package/form-textarea/types/form-textarea.d.ts +8 -1
  88. package/hover-card/README.md +256 -5
  89. package/hover-card/fesm2022/hover-card.mjs +19 -19
  90. package/icon/README.md +210 -34
  91. package/icon/fesm2022/icon.mjs +8 -8
  92. package/input/README.md +240 -34
  93. package/input/fesm2022/input.mjs +17 -12
  94. package/input/types/input.d.ts +2 -1
  95. package/input-group/README.md +335 -5
  96. package/input-group/fesm2022/input-group.mjs +37 -37
  97. package/input-group/types/input-group.d.ts +3 -3
  98. package/input-otp/README.md +375 -5
  99. package/input-otp/fesm2022/input-otp.mjs +27 -27
  100. package/item/README.md +385 -5
  101. package/item/fesm2022/item.mjs +54 -54
  102. package/kbd/README.md +291 -5
  103. package/kbd/fesm2022/kbd.mjs +13 -13
  104. package/label/README.md +243 -34
  105. package/label/fesm2022/label.mjs +9 -9
  106. package/label/types/label.d.ts +1 -1
  107. package/layout-simple/README.md +174 -44
  108. package/layout-simple/fesm2022/layout-simple.mjs +917 -398
  109. package/layout-simple/types/layout-simple.d.ts +180 -129
  110. package/menu/README.md +418 -0
  111. package/menu/fesm2022/menu.mjs +461 -0
  112. package/menu/package.json +24 -0
  113. package/menu/types/menu.d.ts +137 -0
  114. package/menubar/README.md +343 -5
  115. package/menubar/fesm2022/menubar.mjs +13 -13
  116. package/native-select/README.md +323 -5
  117. package/native-select/fesm2022/native-select.mjs +19 -19
  118. package/navigation-menu/README.md +369 -5
  119. package/navigation-menu/fesm2022/navigation-menu.mjs +37 -37
  120. package/package.json +183 -154
  121. package/pagination/README.md +388 -5
  122. package/pagination/fesm2022/pagination.mjs +63 -63
  123. package/popover/README.md +302 -34
  124. package/popover/fesm2022/popover.mjs +30 -30
  125. package/progress/README.md +311 -5
  126. package/progress/fesm2022/progress.mjs +13 -13
  127. package/radio-group/README.md +335 -34
  128. package/radio-group/fesm2022/radio-group.mjs +26 -19
  129. package/resizable/README.md +269 -5
  130. package/resizable/fesm2022/resizable.mjs +19 -19
  131. package/scroll-area/README.md +233 -5
  132. package/scroll-area/fesm2022/scroll-area.mjs +9 -9
  133. package/searchable-multiselect/README.md +294 -34
  134. package/searchable-multiselect/fesm2022/searchable-multiselect.mjs +63 -16
  135. package/searchable-multiselect/types/searchable-multiselect.d.ts +8 -2
  136. package/select/README.md +408 -34
  137. package/select/fesm2022/select.mjs +80 -72
  138. package/select/types/select.d.ts +3 -1
  139. package/separator/README.md +193 -34
  140. package/separator/fesm2022/separator.mjs +9 -9
  141. package/separator/types/separator.d.ts +1 -1
  142. package/sheet/README.md +282 -34
  143. package/sheet/fesm2022/sheet.mjs +30 -30
  144. package/sidebar/README.md +457 -5
  145. package/sidebar/fesm2022/sidebar.mjs +136 -134
  146. package/sidebar/types/sidebar.d.ts +3 -3
  147. package/skeleton/README.md +217 -5
  148. package/skeleton/fesm2022/skeleton.mjs +9 -9
  149. package/slider/README.md +273 -5
  150. package/slider/fesm2022/slider.mjs +29 -25
  151. package/sonner/README.md +317 -34
  152. package/sonner/fesm2022/sonner.mjs +9 -9
  153. package/spinner/README.md +255 -34
  154. package/spinner/fesm2022/spinner.mjs +8 -8
  155. package/switch/README.md +281 -34
  156. package/switch/fesm2022/switch.mjs +12 -14
  157. package/table/README.md +423 -5
  158. package/table/fesm2022/table.mjs +41 -41
  159. package/tabs/README.md +382 -34
  160. package/tabs/fesm2022/tabs.mjs +48 -38
  161. package/textarea/README.md +282 -5
  162. package/textarea/fesm2022/textarea.mjs +9 -9
  163. package/toggle/README.md +270 -5
  164. package/toggle/fesm2022/toggle.mjs +14 -14
  165. package/toggle-group/README.md +340 -5
  166. package/toggle-group/fesm2022/toggle-group.mjs +13 -13
  167. package/toggle-group/types/toggle-group.d.ts +13 -7
  168. package/tooltip/README.md +240 -34
  169. package/tooltip/fesm2022/tooltip.mjs +14 -14
  170. package/typography/README.md +271 -5
  171. package/typography/fesm2022/typography.mjs +53 -53
  172. package/typography/types/typography.d.ts +12 -12
  173. package/utils/README.md +274 -34
  174. package/utils/fesm2022/utils.mjs +68 -44
  175. package/accordion/fesm2022/accordion.mjs.map +0 -1
  176. package/alert/fesm2022/alert.mjs.map +0 -1
  177. package/alert-dialog/fesm2022/alert-dialog.mjs.map +0 -1
  178. package/aspect-ratio/fesm2022/aspect-ratio.mjs.map +0 -1
  179. package/autocomplete/fesm2022/autocomplete.mjs.map +0 -1
  180. package/avatar/fesm2022/avatar.mjs.map +0 -1
  181. package/badge/fesm2022/badge.mjs.map +0 -1
  182. package/basic-alert/fesm2022/basic-alert.mjs.map +0 -1
  183. package/breadcrumb/fesm2022/breadcrumb.mjs.map +0 -1
  184. package/button/fesm2022/button.mjs.map +0 -1
  185. package/button-group/fesm2022/button-group.mjs.map +0 -1
  186. package/calendar/fesm2022/calendar.mjs.map +0 -1
  187. package/card/fesm2022/card.mjs.map +0 -1
  188. package/carousel/fesm2022/carousel.mjs.map +0 -1
  189. package/checkbox/fesm2022/checkbox.mjs.map +0 -1
  190. package/collapsible/fesm2022/collapsible.mjs.map +0 -1
  191. package/combobox/fesm2022/combobox.mjs.map +0 -1
  192. package/command/fesm2022/command.mjs.map +0 -1
  193. package/confirmation-dialog/fesm2022/confirmation-dialog.mjs.map +0 -1
  194. package/context-menu/fesm2022/context-menu.mjs.map +0 -1
  195. package/date-picker/fesm2022/date-picker.mjs.map +0 -1
  196. package/dialog/fesm2022/dialog.mjs.map +0 -1
  197. package/drawer/fesm2022/drawer.mjs.map +0 -1
  198. package/dropdown-menu/fesm2022/dropdown-menu.mjs.map +0 -1
  199. package/empty/fesm2022/empty.mjs.map +0 -1
  200. package/field/fesm2022/field.mjs.map +0 -1
  201. package/form-checkbox/fesm2022/form-checkbox.mjs.map +0 -1
  202. package/form-date-picker/fesm2022/form-date-picker.mjs.map +0 -1
  203. package/form-field/fesm2022/form-field.mjs.map +0 -1
  204. package/form-field-simple/fesm2022/form-field-simple.mjs.map +0 -1
  205. package/form-searchable-multiselect/fesm2022/form-searchable-multiselect.mjs.map +0 -1
  206. package/form-select/fesm2022/form-select.mjs.map +0 -1
  207. package/form-text-input/fesm2022/form-text-input.mjs.map +0 -1
  208. package/form-textarea/fesm2022/form-textarea.mjs.map +0 -1
  209. package/hover-card/fesm2022/hover-card.mjs.map +0 -1
  210. package/icon/fesm2022/icon.mjs.map +0 -1
  211. package/input/fesm2022/input.mjs.map +0 -1
  212. package/input-group/fesm2022/input-group.mjs.map +0 -1
  213. package/input-otp/fesm2022/input-otp.mjs.map +0 -1
  214. package/item/fesm2022/item.mjs.map +0 -1
  215. package/kbd/fesm2022/kbd.mjs.map +0 -1
  216. package/label/fesm2022/label.mjs.map +0 -1
  217. package/layout-simple/fesm2022/layout-simple.mjs.map +0 -1
  218. package/menubar/fesm2022/menubar.mjs.map +0 -1
  219. package/native-select/fesm2022/native-select.mjs.map +0 -1
  220. package/navigation-menu/fesm2022/navigation-menu.mjs.map +0 -1
  221. package/pagination/fesm2022/pagination.mjs.map +0 -1
  222. package/popover/fesm2022/popover.mjs.map +0 -1
  223. package/progress/fesm2022/progress.mjs.map +0 -1
  224. package/radio-group/fesm2022/radio-group.mjs.map +0 -1
  225. package/resizable/fesm2022/resizable.mjs.map +0 -1
  226. package/scroll-area/fesm2022/scroll-area.mjs.map +0 -1
  227. package/searchable-multiselect/fesm2022/searchable-multiselect.mjs.map +0 -1
  228. package/select/fesm2022/select.mjs.map +0 -1
  229. package/separator/fesm2022/separator.mjs.map +0 -1
  230. package/sheet/fesm2022/sheet.mjs.map +0 -1
  231. package/sidebar/fesm2022/sidebar.mjs.map +0 -1
  232. package/skeleton/fesm2022/skeleton.mjs.map +0 -1
  233. package/slider/fesm2022/slider.mjs.map +0 -1
  234. package/sonner/fesm2022/sonner.mjs.map +0 -1
  235. package/spinner/fesm2022/spinner.mjs.map +0 -1
  236. package/switch/fesm2022/switch.mjs.map +0 -1
  237. package/table/fesm2022/table.mjs.map +0 -1
  238. package/tabs/fesm2022/tabs.mjs.map +0 -1
  239. package/textarea/fesm2022/textarea.mjs.map +0 -1
  240. package/toggle/fesm2022/toggle.mjs.map +0 -1
  241. package/toggle-group/fesm2022/toggle-group.mjs.map +0 -1
  242. package/tooltip/fesm2022/tooltip.mjs.map +0 -1
  243. package/typography/fesm2022/typography.mjs.map +0 -1
  244. package/utils/fesm2022/utils.mjs.map +0 -1
package/avatar/README.md CHANGED
@@ -1,11 +1,363 @@
1
- # Avatar
1
+ # Avatar (`@egose/shadcn-theme-ng/avatar`)
2
2
 
3
- This project was generated using [Angular CLI](https://github.com/angular/angular-cli).
3
+ A user identity image in the shadcn/ui Avatar style: a rounded photo that degrades gracefully to
4
+ initials (or any fallback) while the image loads or when it fails, with optional status badges and
5
+ overlapping group stacks.
4
6
 
5
- ## Building
7
+ The implementation styles the headless `BrnAvatar*` primitives from
8
+ `@spartan-ng/brain/avatar`. `HlmAvatar` is a component extending `BrnAvatar` that projects
9
+ `[hlmAvatarImage]` when the image `canShow()` and `[hlmAvatarFallback]` otherwise;
10
+ `HlmAvatarImage` / `HlmAvatarFallback` add brain image/fallback behavior plus shadcn sizing.
11
+ `HlmAvatarBadge`, `HlmAvatarGroup`, and `HlmAvatarGroupCount` are pure layout directives with no
12
+ brain dependency.
6
13
 
7
- To build the library, run:
14
+ > **Ships as:** `@egose/shadcn-theme-ng/avatar` and `@egose/shadcn-theme-ng-tw/avatar`
15
+ > (the `tw:`-prefixed Tailwind variant). Both expose the identical TypeScript surface; only the
16
+ > emitted Tailwind class strings differ. See the [package README](../../README.md) for install
17
+ > steps, peer dependencies, and Tailwind setup. Do not publish this project directory independently.
18
+
19
+ ## Installation
8
20
 
9
21
  ```bash
10
- ng build avatar
22
+ # Plain Tailwind (no prefix)
23
+ npm install @egose/shadcn-theme-ng
24
+
25
+ # tw:-prefixed Tailwind variant
26
+ npm install @egose/shadcn-theme-ng-tw
27
+ ```
28
+
29
+ Peer dependencies (Angular, `@spartan-ng/brain`, `@ng-icons/*`, `rxjs`, …) are documented in the
30
+ [package README](../../README.md#peer-dependencies). Runtime styling helper:
31
+ `@egose/shadcn-theme-ng/utils` (`classes()`).
32
+
33
+ ## Imports
34
+
35
+ All symbols are exported from the subpath root (`projects/avatar/src/public-api.ts`):
36
+
37
+ ```ts
38
+ import {
39
+ HlmAvatar,
40
+ HlmAvatarImage,
41
+ HlmAvatarFallback,
42
+ HlmAvatarBadge,
43
+ HlmAvatarGroup,
44
+ HlmAvatarGroupCount,
45
+ HlmAvatarImports,
46
+ HlmAvatarModule,
47
+ } from '@egose/shadcn-theme-ng/avatar';
48
+ // tw variant: replace with '@egose/shadcn-theme-ng-tw/avatar'
49
+ ```
50
+
51
+ Standalone component — spread the `*Imports` array:
52
+
53
+ ```ts
54
+ import { Component } from '@angular/core';
55
+ import { HlmAvatarImports } from '@egose/shadcn-theme-ng/avatar';
56
+
57
+ @Component({
58
+ selector: 'app-demo',
59
+ standalone: true,
60
+ imports: [...HlmAvatarImports],
61
+ template: `...`,
62
+ })
63
+ export class DemoComponent {}
64
+ ```
65
+
66
+ NgModule-based consumer — import the module:
67
+
68
+ ```ts
69
+ import { NgModule } from '@angular/core';
70
+ import { HlmAvatarModule } from '@egose/shadcn-theme-ng/avatar';
71
+
72
+ @NgModule({ imports: [HlmAvatarModule] })
73
+ export class DemoModule {}
74
+ ```
75
+
76
+ ## Anatomy / Structure
77
+
78
+ ```html
79
+ <hlm-avatar size="default">
80
+ <img hlmAvatarImage src="user.jpg" alt="Ada Lovelace" />
81
+ <span hlmAvatarFallback>AL</span>
82
+ <span hlm-avatar-badge></span>
83
+ </hlm-avatar>
84
+
85
+ <div hlmAvatarGroup>
86
+ <hlm-avatar>…</hlm-avatar>
87
+ <hlm-avatar>…</hlm-avatar>
88
+ <span hlmAvatarGroupCount>+3</span>
89
+ </div>
11
90
  ```
91
+
92
+ Real selectors (from source):
93
+
94
+ | Class | Selector(s) | Kind |
95
+ | --------------------- | ----------------------------------------------------- | --------- |
96
+ | `HlmAvatar` | `hlm-avatar` | Component |
97
+ | `HlmAvatarImage` | `img[hlmAvatarImage]` (`exportAs: hlmAvatarImage`) | Directive |
98
+ | `HlmAvatarFallback` | `[hlmAvatarFallback]` (`exportAs: hlmAvatarFallback`) | Directive |
99
+ | `HlmAvatarBadge` | `[hlmAvatarBadge], hlm-avatar-badge` | Directive |
100
+ | `HlmAvatarGroup` | `[hlmAvatarGroup], hlm-avatar-group` | Directive |
101
+ | `HlmAvatarGroupCount` | `[hlmAvatarGroupCount], hlm-avatar-group-count` | Directive |
102
+
103
+ Projection rules inside `HlmAvatar` (from its template): the image slot only renders while
104
+ `_image()?.canShow()` is true and selects `[hlmAvatarImage],[brnAvatarImage]`; otherwise the
105
+ fallback slot (`[hlmAvatarFallback],[brnAvatarFallback]`) renders. Untagged `<ng-content />`
106
+ (such as the badge) always renders.
107
+
108
+ ## API reference
109
+
110
+ ### `HlmAvatar` — `hlm-avatar`
111
+
112
+ Component extending `BrnAvatar` (full brain surface inherited).
113
+
114
+ | Input | Type | Default | Description |
115
+ | ------ | --------------------------- | ----------- | -------------------------------------------------------------------------------------------------------------- |
116
+ | `size` | `'default' \| 'sm' \| 'lg'` | `'default'` | `default` → `size-8`, `sm` → `size-6`, `lg` → `size-10`; reflected as `data-size`, which badge styles key off. |
117
+
118
+ ### `HlmAvatarImage` — `img[hlmAvatarImage]`
119
+
120
+ Directive on a native `<img>` wrapping `BrnAvatarImage` (load/error tracking inherited).
121
+
122
+ | Member | Kind | Description |
123
+ | --------- | ---------------------------------------------------- | --------------------------------------------- |
124
+ | `canShow` | `Signal<boolean>` (re-exposed from `BrnAvatarImage`) | Whether the image has loaded and may display. |
125
+
126
+ No own inputs — `src`/`alt` are the native img attributes.
127
+
128
+ ### `HlmAvatarFallback` — `[hlmAvatarFallback]`
129
+
130
+ Thin wrapper around `BrnAvatarFallback`. No own inputs; renders initials/text centered in the
131
+ muted circle.
132
+
133
+ ### `HlmAvatarBadge` — `[hlmAvatarBadge], hlm-avatar-badge`
134
+
135
+ Status dot pinned to the avatar's bottom-right (`absolute right-0 bottom-0`, ring-separated).
136
+ Sizing follows the parent avatar's `data-size` (`size-2` on `sm`, `size-2.5` on `default`,
137
+ `size-3` on `lg`). No inputs — put an `ng-icon` or plain dot inside.
138
+
139
+ ### `HlmAvatarGroup` — `[hlmAvatarGroup], hlm-avatar-group`
140
+
141
+ Overlapping stack (`flex -space-x-2`, each child avatar ringed). No inputs.
142
+
143
+ ### `HlmAvatarGroupCount` — `[hlmAvatarGroupCount], hlm-avatar-group-count`
144
+
145
+ The "+N" overflow pill. Sizing follows the parent group's `data-size` when present. No inputs.
146
+
147
+ ## Examples
148
+
149
+ ### 1. Basic avatar with image + initials fallback
150
+
151
+ ```ts
152
+ import { Component } from '@angular/core';
153
+ import { HlmAvatarImports } from '@egose/shadcn-theme-ng/avatar';
154
+
155
+ @Component({
156
+ selector: 'app-avatar-basic',
157
+ standalone: true,
158
+ imports: [...HlmAvatarImports],
159
+ template: `
160
+ <hlm-avatar>
161
+ <img hlmAvatarImage src="https://github.com/shadcn.png" alt="shadcn" />
162
+ <span hlmAvatarFallback>CN</span>
163
+ </hlm-avatar>
164
+ `,
165
+ })
166
+ export class AvatarBasicComponent {}
167
+ ```
168
+
169
+ ```html
170
+ <app-avatar-basic />
171
+ ```
172
+
173
+ ### 2. All sizes
174
+
175
+ ```ts
176
+ import { Component } from '@angular/core';
177
+ import { HlmAvatarImports } from '@egose/shadcn-theme-ng/avatar';
178
+
179
+ @Component({
180
+ selector: 'app-avatar-sizes',
181
+ standalone: true,
182
+ imports: [...HlmAvatarImports],
183
+ template: `
184
+ <div class="tw:flex tw:items-center tw:gap-4">
185
+ <hlm-avatar size="sm">
186
+ <img hlmAvatarImage src="https://github.com/shadcn.png" alt="Small" />
187
+ <span hlmAvatarFallback>SM</span>
188
+ </hlm-avatar>
189
+ <hlm-avatar size="default">
190
+ <img hlmAvatarImage src="https://github.com/shadcn.png" alt="Default" />
191
+ <span hlmAvatarFallback>MD</span>
192
+ </hlm-avatar>
193
+ <hlm-avatar size="lg">
194
+ <img hlmAvatarImage src="https://github.com/shadcn.png" alt="Large" />
195
+ <span hlmAvatarFallback>LG</span>
196
+ </hlm-avatar>
197
+ </div>
198
+ `,
199
+ })
200
+ export class AvatarSizesComponent {}
201
+ ```
202
+
203
+ ### 3. Fallback-only (no image) and broken-image degradation
204
+
205
+ When no `<img>` succeeds, the fallback shows automatically — useful for new users without photos:
206
+
207
+ ```ts
208
+ import { Component } from '@angular/core';
209
+ import { HlmAvatarImports } from '@egose/shadcn-theme-ng/avatar';
210
+
211
+ @Component({
212
+ selector: 'app-avatar-fallback',
213
+ standalone: true,
214
+ imports: [...HlmAvatarImports],
215
+ template: `
216
+ <div class="tw:flex tw:items-center tw:gap-4">
217
+ <!-- initials only -->
218
+ <hlm-avatar>
219
+ <span hlmAvatarFallback>JD</span>
220
+ </hlm-avatar>
221
+ <!-- broken src degrades to fallback via canShow() -->
222
+ <hlm-avatar>
223
+ <img hlmAvatarImage src="/does-not-exist.png" alt="Missing photo" />
224
+ <span hlmAvatarFallback>ER</span>
225
+ </hlm-avatar>
226
+ </div>
227
+ `,
228
+ })
229
+ export class AvatarFallbackComponent {}
230
+ ```
231
+
232
+ ### 4. Status badge (online/offline dot)
233
+
234
+ ```ts
235
+ import { Component } from '@angular/core';
236
+ import { HlmAvatarImports } from '@egose/shadcn-theme-ng/avatar';
237
+
238
+ @Component({
239
+ selector: 'app-avatar-badge',
240
+ standalone: true,
241
+ imports: [...HlmAvatarImports],
242
+ template: `
243
+ <div class="tw:flex tw:items-center tw:gap-4">
244
+ <hlm-avatar>
245
+ <img hlmAvatarImage src="https://github.com/shadcn.png" alt="Online user" />
246
+ <span hlmAvatarFallback>ON</span>
247
+ <span hlm-avatar-badge class="tw:bg-success"></span>
248
+ </hlm-avatar>
249
+ <hlm-avatar size="lg">
250
+ <span hlmAvatarFallback>OF</span>
251
+ <span hlmAvatarBadge class="tw:bg-muted-foreground"></span>
252
+ </hlm-avatar>
253
+ </div>
254
+ `,
255
+ })
256
+ export class AvatarBadgeComponent {}
257
+ ```
258
+
259
+ ### 5. Avatar group with overflow count
260
+
261
+ ```ts
262
+ import { Component, signal } from '@angular/core';
263
+ import { HlmAvatarImports } from '@egose/shadcn-theme-ng/avatar';
264
+
265
+ @Component({
266
+ selector: 'app-avatar-group',
267
+ standalone: true,
268
+ imports: [...HlmAvatarImports],
269
+ template: `
270
+ <div hlmAvatarGroup>
271
+ @for (m of visible(); track m.initials) {
272
+ <hlm-avatar>
273
+ @if (m.src) {
274
+ <img hlmAvatarImage [src]="m.src" [alt]="m.name" />
275
+ }
276
+ <span hlmAvatarFallback>{{ m.initials }}</span>
277
+ </hlm-avatar>
278
+ }
279
+ @if (overflow() > 0) {
280
+ <span hlmAvatarGroupCount>+{{ overflow() }}</span>
281
+ }
282
+ </div>
283
+ `,
284
+ })
285
+ export class AvatarGroupComponent {
286
+ private readonly members = signal([
287
+ { name: 'Ada Lovelace', initials: 'AL', src: '' },
288
+ { name: 'Grace Hopper', initials: 'GH', src: '' },
289
+ { name: 'Katherine Johnson', initials: 'KJ', src: '' },
290
+ { name: 'Radia Perlman', initials: 'RP', src: '' },
291
+ { name: 'Lynn Conway', initials: 'LC', src: '' },
292
+ ]);
293
+ readonly visible = () => this.members().slice(0, 3);
294
+ readonly overflow = () => this.members().length - 3;
295
+ }
296
+ ```
297
+
298
+ ### 6. Data-driven directory with badge icons
299
+
300
+ Badges can host an `ng-icon` (sized automatically per avatar size):
301
+
302
+ ```ts
303
+ import { Component, signal } from '@angular/core';
304
+ import { NgIcon, provideIcons } from '@ng-icons/core';
305
+ import { lucideCheck } from '@ng-icons/lucide';
306
+ import { HlmAvatarImports } from '@egose/shadcn-theme-ng/avatar';
307
+
308
+ @Component({
309
+ selector: 'app-avatar-directory',
310
+ standalone: true,
311
+ imports: [...HlmAvatarImports, NgIcon],
312
+ providers: [provideIcons({ lucideCheck })],
313
+ template: `
314
+ <ul class="tw:flex tw:flex-col tw:gap-3">
315
+ @for (u of users(); track u.email) {
316
+ <li class="tw:flex tw:items-center tw:gap-3">
317
+ <hlm-avatar size="sm">
318
+ @if (u.src) {
319
+ <img hlmAvatarImage [src]="u.src" [alt]="u.name" />
320
+ }
321
+ <span hlmAvatarFallback>{{ u.initials }}</span>
322
+ @if (u.verified) {
323
+ <span hlm-avatar-badge><ng-icon name="lucideCheck" /></span>
324
+ }
325
+ </hlm-avatar>
326
+ <div>
327
+ <p class="tw:text-sm tw:font-medium">{{ u.name }}</p>
328
+ <p class="tw:text-xs tw:text-muted-foreground">{{ u.email }}</p>
329
+ </div>
330
+ </li>
331
+ }
332
+ </ul>
333
+ `,
334
+ })
335
+ export class AvatarDirectoryComponent {
336
+ readonly users = signal([
337
+ { name: 'Ada Lovelace', email: 'ada@example.com', initials: 'AL', src: '', verified: true },
338
+ { name: 'Alan Turing', email: 'alan@example.com', initials: 'AT', src: '', verified: false },
339
+ ]);
340
+ }
341
+ ```
342
+
343
+ ## Accessibility notes
344
+
345
+ - The `<img>` **must** carry a meaningful `alt` (person's name). When only initials show, keep the
346
+ fallback text itself meaningful (`AL`, not `?`) — it is what screen readers announce.
347
+ - Badges are decorative status dots: hide icon-only badges from assistive technology or mirror the
348
+ status in adjacent text ("Online"), since color alone is not perceivable by everyone.
349
+ - Group overflow (`+3`) is plain text — ensure the full member list is reachable nearby (tooltip,
350
+ popover, or link) so keyboard/screen-reader users are not locked out of hidden members.
351
+
352
+ ## Theming / CSS variables
353
+
354
+ Class-based styling (muted fallback, primary badge, background ring tokens); no
355
+ component-specific CSS variables. Avatar and group `data-size` attributes drive the badge/count
356
+ sizing, so custom sizes compose by targeting those attributes in your own CSS.
357
+
358
+ ## Related subpaths
359
+
360
+ - `@egose/shadcn-theme-ng/badge` — textual status chips to pair with avatars
361
+ - `@egose/shadcn-theme-ng/tooltip` — full member names / status on hover
362
+ - `@egose/shadcn-theme-ng/hover-card` — profile previews anchored to avatars
363
+ - `@egose/shadcn-theme-ng/skeleton` — avatar-shaped loading placeholders
@@ -9,10 +9,10 @@ class HlmAvatar extends BrnAvatar {
9
9
  ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
10
10
  constructor() {
11
11
  super();
12
- classes(() => 'size-8 rounded-full after:rounded-full data-[size=lg]:size-10 data-[size=sm]:size-6 group/avatar after:border-border relative flex shrink-0 select-none after:absolute after:inset-0 after:border after:mix-blend-darken dark:after:mix-blend-lighten');
12
+ classes(() => 'tw:size-8 tw:rounded-full tw:after:rounded-full tw:data-[size=lg]:size-10 tw:data-[size=sm]:size-6 tw:group/avatar tw:after:border-border tw:relative tw:flex tw:shrink-0 tw:select-none tw:after:absolute tw:after:inset-0 tw:after:border tw:after:mix-blend-darken tw:dark:after:mix-blend-lighten');
13
13
  }
14
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: HlmAvatar, deps: [], target: i0.ɵɵFactoryTarget.Component });
15
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: HlmAvatar, isStandalone: true, selector: "hlm-avatar", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "avatar" }, properties: { "attr.data-size": "size()" } }, usesInheritance: true, ngImport: i0, template: `
14
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmAvatar, deps: [], target: i0.ɵɵFactoryTarget.Component });
15
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.3", type: HlmAvatar, isStandalone: true, selector: "hlm-avatar", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "avatar" }, properties: { "attr.data-size": "size()" } }, usesInheritance: true, ngImport: i0, template: `
16
16
  @if (_image()?.canShow()) {
17
17
  <ng-content select="[hlmAvatarImage],[brnAvatarImage]" />
18
18
  } @else {
@@ -21,7 +21,7 @@ class HlmAvatar extends BrnAvatar {
21
21
  <ng-content />
22
22
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
23
23
  }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: HlmAvatar, decorators: [{
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmAvatar, decorators: [{
25
25
  type: Component,
26
26
  args: [{
27
27
  selector: 'hlm-avatar',
@@ -44,16 +44,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
44
44
  class HlmAvatarBadge {
45
45
  constructor() {
46
46
  classes(() => [
47
- 'bg-primary text-primary-foreground ring-background absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-blend-color ring-2 select-none',
48
- 'group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>ng-icon]:hidden',
49
- 'group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>ng-icon]:text-[length:--spacing(2)]',
50
- 'group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>ng-icon]:text-[length:--spacing(2)]',
47
+ 'tw:bg-primary tw:text-primary-foreground tw:ring-background tw:absolute tw:right-0 tw:bottom-0 tw:z-10 tw:inline-flex tw:items-center tw:justify-center tw:rounded-full tw:bg-blend-color tw:ring-2 tw:select-none',
48
+ 'tw:group-data-[size=sm]/avatar:size-2 tw:group-data-[size=sm]/avatar:[&>ng-icon]:hidden',
49
+ 'tw:group-data-[size=default]/avatar:size-2.5 tw:group-data-[size=default]/avatar:[&>ng-icon]:text-[length:--spacing(2)]',
50
+ 'tw:group-data-[size=lg]/avatar:size-3 tw:group-data-[size=lg]/avatar:[&>ng-icon]:text-[length:--spacing(2)]',
51
51
  ]);
52
52
  }
53
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: HlmAvatarBadge, deps: [], target: i0.ɵɵFactoryTarget.Directive });
54
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: HlmAvatarBadge, isStandalone: true, selector: "[hlmAvatarBadge],hlm-avatar-badge", host: { attributes: { "data-slot": "avatar-badge" } }, ngImport: i0 });
53
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmAvatarBadge, deps: [], target: i0.ɵɵFactoryTarget.Directive });
54
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.3", type: HlmAvatarBadge, isStandalone: true, selector: "[hlmAvatarBadge],hlm-avatar-badge", host: { attributes: { "data-slot": "avatar-badge" } }, ngImport: i0 });
55
55
  }
56
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: HlmAvatarBadge, decorators: [{
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmAvatarBadge, decorators: [{
57
57
  type: Directive,
58
58
  args: [{
59
59
  selector: '[hlmAvatarBadge],hlm-avatar-badge',
@@ -65,12 +65,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
65
65
 
66
66
  class HlmAvatarFallback {
67
67
  constructor() {
68
- classes(() => 'bg-muted text-muted-foreground rounded-full flex size-full items-center justify-center text-sm group-data-[size=sm]/avatar:text-xs');
68
+ classes(() => 'tw:bg-muted tw:text-muted-foreground tw:rounded-full tw:flex tw:size-full tw:items-center tw:justify-center tw:text-sm tw:group-data-[size=sm]/avatar:text-xs');
69
69
  }
70
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: HlmAvatarFallback, deps: [], target: i0.ɵɵFactoryTarget.Directive });
71
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: HlmAvatarFallback, isStandalone: true, selector: "[hlmAvatarFallback]", host: { attributes: { "data-slot": "avatar-fallback" } }, exportAs: ["hlmAvatarFallback"], hostDirectives: [{ directive: i1.BrnAvatarFallback }], ngImport: i0 });
70
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmAvatarFallback, deps: [], target: i0.ɵɵFactoryTarget.Directive });
71
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.3", type: HlmAvatarFallback, isStandalone: true, selector: "[hlmAvatarFallback]", host: { attributes: { "data-slot": "avatar-fallback" } }, exportAs: ["hlmAvatarFallback"], hostDirectives: [{ directive: i1.BrnAvatarFallback }], ngImport: i0 });
72
72
  }
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: HlmAvatarFallback, decorators: [{
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmAvatarFallback, decorators: [{
74
74
  type: Directive,
75
75
  args: [{
76
76
  selector: '[hlmAvatarFallback]',
@@ -84,12 +84,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
84
84
 
85
85
  class HlmAvatarGroup {
86
86
  constructor() {
87
- classes(() => '*:data-[slot=avatar]:ring-background group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2');
87
+ classes(() => 'tw:*:data-[slot=avatar]:ring-background tw:group/avatar-group tw:flex tw:-space-x-2 tw:*:data-[slot=avatar]:ring-2');
88
88
  }
89
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: HlmAvatarGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
90
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: HlmAvatarGroup, isStandalone: true, selector: "[hlmAvatarGroup],hlm-avatar-group", host: { attributes: { "data-slot": "avatar-group" } }, ngImport: i0 });
89
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmAvatarGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
90
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.3", type: HlmAvatarGroup, isStandalone: true, selector: "[hlmAvatarGroup],hlm-avatar-group", host: { attributes: { "data-slot": "avatar-group" } }, ngImport: i0 });
91
91
  }
92
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: HlmAvatarGroup, decorators: [{
92
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmAvatarGroup, decorators: [{
93
93
  type: Directive,
94
94
  args: [{
95
95
  selector: '[hlmAvatarGroup],hlm-avatar-group',
@@ -101,12 +101,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
101
101
 
102
102
  class HlmAvatarGroupCount {
103
103
  constructor() {
104
- classes(() => 'bg-muted text-muted-foreground ring-background relative flex size-8 shrink-0 items-center justify-center rounded-full text-sm ring-2 group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>ng-icon]:text-base group-has-data-[size=lg]/avatar-group:[&>ng-icon]:text-xl group-has-data-[size=sm]/avatar-group:[&>ng-icon]:text-xs');
104
+ classes(() => 'tw:bg-muted tw:text-muted-foreground tw:ring-background tw:relative tw:flex tw:size-8 tw:shrink-0 tw:items-center tw:justify-center tw:rounded-full tw:text-sm tw:ring-2 tw:group-has-data-[size=lg]/avatar-group:size-10 tw:group-has-data-[size=sm]/avatar-group:size-6 tw:[&>ng-icon]:text-base tw:group-has-data-[size=lg]/avatar-group:[&>ng-icon]:text-xl tw:group-has-data-[size=sm]/avatar-group:[&>ng-icon]:text-xs');
105
105
  }
106
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: HlmAvatarGroupCount, deps: [], target: i0.ɵɵFactoryTarget.Directive });
107
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: HlmAvatarGroupCount, isStandalone: true, selector: "[hlmAvatarGroupCount],hlm-avatar-group-count", host: { attributes: { "data-slot": "avatar-group-count" } }, ngImport: i0 });
106
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmAvatarGroupCount, deps: [], target: i0.ɵɵFactoryTarget.Directive });
107
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.3", type: HlmAvatarGroupCount, isStandalone: true, selector: "[hlmAvatarGroupCount],hlm-avatar-group-count", host: { attributes: { "data-slot": "avatar-group-count" } }, ngImport: i0 });
108
108
  }
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: HlmAvatarGroupCount, decorators: [{
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmAvatarGroupCount, decorators: [{
110
110
  type: Directive,
111
111
  args: [{
112
112
  selector: '[hlmAvatarGroupCount],hlm-avatar-group-count',
@@ -119,12 +119,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
119
119
  class HlmAvatarImage {
120
120
  canShow = inject(BrnAvatarImage).canShow;
121
121
  constructor() {
122
- classes(() => 'rounded-full aspect-square size-full object-cover');
122
+ classes(() => 'tw:rounded-full tw:aspect-square tw:size-full tw:object-cover');
123
123
  }
124
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: HlmAvatarImage, deps: [], target: i0.ɵɵFactoryTarget.Directive });
125
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: HlmAvatarImage, isStandalone: true, selector: "img[hlmAvatarImage]", host: { attributes: { "data-slot": "avatar-image" } }, exportAs: ["hlmAvatarImage"], hostDirectives: [{ directive: i1.BrnAvatarImage }], ngImport: i0 });
124
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmAvatarImage, deps: [], target: i0.ɵɵFactoryTarget.Directive });
125
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.3", type: HlmAvatarImage, isStandalone: true, selector: "img[hlmAvatarImage]", host: { attributes: { "data-slot": "avatar-image" } }, exportAs: ["hlmAvatarImage"], hostDirectives: [{ directive: i1.BrnAvatarImage }], ngImport: i0 });
126
126
  }
127
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: HlmAvatarImage, decorators: [{
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmAvatarImage, decorators: [{
128
128
  type: Directive,
129
129
  args: [{
130
130
  selector: 'img[hlmAvatarImage]',
@@ -148,8 +148,8 @@ const HlmAvatarImports = [
148
148
  HlmAvatarImage,
149
149
  ];
150
150
  class HlmAvatarModule {
151
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: HlmAvatarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
152
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.7", ngImport: i0, type: HlmAvatarModule, imports: [HlmAvatar,
151
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmAvatarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
152
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.1.3", ngImport: i0, type: HlmAvatarModule, imports: [HlmAvatar,
153
153
  HlmAvatarBadge,
154
154
  HlmAvatarFallback,
155
155
  HlmAvatarGroup,
@@ -160,9 +160,9 @@ class HlmAvatarModule {
160
160
  HlmAvatarGroup,
161
161
  HlmAvatarGroupCount,
162
162
  HlmAvatarImage] });
163
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: HlmAvatarModule });
163
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmAvatarModule });
164
164
  }
165
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: HlmAvatarModule, decorators: [{
165
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmAvatarModule, decorators: [{
166
166
  type: NgModule,
167
167
  args: [{
168
168
  imports: [...HlmAvatarImports],
@@ -175,4 +175,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
175
175
  */
176
176
 
177
177
  export { HlmAvatar, HlmAvatarBadge, HlmAvatarFallback, HlmAvatarGroup, HlmAvatarGroupCount, HlmAvatarImage, HlmAvatarImports, HlmAvatarModule };
178
- //# sourceMappingURL=avatar.mjs.map
178
+