@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/utils/README.md CHANGED
@@ -1,64 +1,304 @@
1
- # Utils
1
+ # Utils (`@egose/shadcn-theme-ng/utils`)
2
2
 
3
- This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 20.2.0.
3
+ Shared styling and setup helpers used by every component in this library — equivalent to the `cn()`/`lib/utils` module in [shadcn/ui](https://ui.shadcn.com/docs/installation). This subpath exports **`hlm()`** (the `clsx` + `tailwind-merge` class merger), **`classes()`** (the reactive host-class manager behind every `hlm*` directive), and **`provideSpartanHlm()`** (the app-level overlay provider). It has no components and no `*Imports`/`*Module` — import the functions directly. Notably, `classes()` is SSR-safe (no `MutationObserver` on the server), transition-flash-safe (suppresses CSS transitions on first apply), and teardown-safe (disconnects observers / cancels animation frames via `DestroyRef`).
4
4
 
5
- ## Code scaffolding
5
+ > **Ships as:** `@egose/shadcn-theme-ng/utils` and `@egose/shadcn-theme-ng-tw/utils` (the `tw:`-prefixed Tailwind variant). See the [package README](../../README.md) for install steps, peer dependencies, Tailwind setup, and testing/release guidance. Do not publish this project directory independently.
6
6
 
7
- Angular CLI includes powerful code scaffolding tools. To generate a new component, run:
7
+ ## Installation
8
8
 
9
9
  ```bash
10
- ng generate component component-name
10
+ # Plain Tailwind (no prefix)
11
+ npm install @egose/shadcn-theme-ng
12
+
13
+ # Or the tw:-prefixed variant
14
+ npm install @egose/shadcn-theme-ng-tw
11
15
  ```
12
16
 
13
- For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run:
17
+ `clsx` and `tailwind-merge` arrive transitively. See the [package README](../../README.md) for the full peer-dependency table.
14
18
 
15
- ```bash
16
- ng generate --help
19
+ Register the environment provider once at bootstrap (required for overlay-based components):
20
+
21
+ ```ts
22
+ // app.config.ts
23
+ import { ApplicationConfig } from '@angular/core';
24
+ import { provideSpartanHlm } from '@egose/shadcn-theme-ng/utils';
25
+
26
+ export const appConfig: ApplicationConfig = {
27
+ providers: [provideSpartanHlm()],
28
+ };
17
29
  ```
18
30
 
19
- ## Building
31
+ ## Imports
20
32
 
21
- To build the library, run:
33
+ All public symbols are re-exported from `projects/utils/src/public-api.ts` (`./lib/utils` + `./lib/provide-spartan-hlm`):
22
34
 
23
- ```bash
24
- ng build utils
35
+ ```ts
36
+ import { classes, hlm, provideSpartanHlm } from '@egose/shadcn-theme-ng/utils';
37
+ // tw variant: swap to '@egose/shadcn-theme-ng-tw/utils'
25
38
  ```
26
39
 
27
- This command will compile your project, and the build artifacts will be placed in the `dist/` directory.
40
+ | Symbol | Kind | Signature (real) | Description |
41
+ | ------------------- | -------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------ |
42
+ | `hlm` | Function | `hlm(...inputs: ClassValue[]): string` | Merges class lists (`twMerge(clsx(inputs))`). |
43
+ | `classes` | Function | `classes(computed: () => ClassValue[] \| string, options?: ClassesOptions): void` | Reactively applies computed classes to the host element. |
44
+ | `provideSpartanHlm` | Function | `provideSpartanHlm(): EnvironmentProviders` | Provides `OVERLAY_DEFAULT_CONFIG` (`{ usePopover: false }`). |
28
45
 
29
- ### Publishing the Library
46
+ `ClassesOptions` (interface, not exported from the barrel — structural shape):
30
47
 
31
- Once the project is built, you can publish your library by following these steps:
48
+ ```ts
49
+ interface ClassesOptions {
50
+ elementRef?: ElementRef<HTMLElement>;
51
+ injector?: Injector;
52
+ }
53
+ ```
32
54
 
33
- 1. Navigate to the `dist` directory:
55
+ There is no `UtilsImports` / `UtilsModule` — nothing to add to `imports: [...]`.
34
56
 
35
- ```bash
36
- cd dist/utils
37
- ```
57
+ ## Anatomy / Structure
38
58
 
39
- 2. Run the `npm publish` command to publish your library to the npm registry:
40
- ```bash
41
- npm publish
42
- ```
59
+ ```ts
60
+ // 1. One-off merge (templates, custom components)
61
+ import { hlm } from '@egose/shadcn-theme-ng/utils';
62
+ const cls = hlm('px-4 py-2', condition && 'bg-primary', userClass);
43
63
 
44
- ## Running unit tests
64
+ // 2. Reactive host styling (directives/components)
65
+ import { Directive } from '@angular/core';
66
+ import { classes } from '@egose/shadcn-theme-ng/utils';
45
67
 
46
- To execute unit tests with the [Karma](https://karma-runner.github.io) test runner, use the following command:
68
+ @Directive({ selector: '[myStyled]' })
69
+ export class MyStyled {
70
+ constructor() {
71
+ classes(() => 'rounded-md border bg-background');
72
+ }
73
+ }
47
74
 
48
- ```bash
49
- ng test
75
+ // 3. App bootstrap (once)
76
+ import { provideSpartanHlm } from '@egose/shadcn-theme-ng/utils';
77
+ export const appConfig: ApplicationConfig = { providers: [provideSpartanHlm()] };
50
78
  ```
51
79
 
52
- ## Running end-to-end tests
80
+ ## API reference
53
81
 
54
- For end-to-end (e2e) testing, run:
82
+ ### `hlm(...inputs: ClassValue[]): string`
55
83
 
56
- ```bash
57
- ng e2e
84
+ Merges any `clsx`-compatible inputs (`string | string[] | Record<string, boolean> | false | null | undefined`, nested) and resolves Tailwind conflicts with `twMerge`. Later arguments win on conflict.
85
+
86
+ | Call | Result |
87
+ | ------------------------------------------------------- | ---------------------------- |
88
+ | `hlm('px-2 px-4')` | `'px-4'` (conflict resolved) |
89
+ | `hlm('text-sm', isActive && 'text-primary', userClass)` | conditional merge |
90
+ | `hlm(['rounded', { 'bg-muted': selected }])` | array/object forms |
91
+
92
+ Backed by `clsx` + `tailwind-merge`; string inputs are cached (up to 1000 entries) internally.
93
+
94
+ ### `classes(computed, options?): void`
95
+
96
+ Runs in an injection context (`runInInjectionContext`) and wires the host element to a reactive class computation. Must be called in a constructor (or any injection context) of a directive/component.
97
+
98
+ - `computed: () => ClassValue[] | string` — re-evaluated in an `effect()`; any signals read inside are tracked, so class updates are automatic.
99
+ - `options.elementRef?: ElementRef<HTMLElement>` — defaults to the injected host `ElementRef`. Pass explicitly for out-of-band elements (tests, portals, iframes).
100
+ - `options.injector?: Injector` — defaults to the current injector. Pass explicitly when calling outside the construction context (e.g. per-document setup in tests).
101
+
102
+ Behavioral guarantees (verified by `utils.spec.ts`):
103
+
104
+ - Base-class preservation: pre-existing `class` attribute values and externally added classes are kept and re-merged (not wiped) via a per-document `MutationObserver`.
105
+ - Scoped observation: one shared observer per `Document` (isolated per iframe document); unrelated elements never trigger callbacks.
106
+ - Transition suppression: CSS `transition` is forced to `none !important` on first apply, then restored on the next animation frame — prevents initial style flashes.
107
+ - Teardown: `DestroyRef.onDestroy` removes the source, cancels pending RAFs, restores transitions, disconnects the observer when the last managed element is destroyed, and cleans per-document state.
108
+ - SSR-safe: no `MutationObserver` is created when `PLATFORM_ID` is `'server'`.
109
+
110
+ ### `provideSpartanHlm(): EnvironmentProviders`
111
+
112
+ ```ts
113
+ export function provideSpartanHlm(): EnvironmentProviders {
114
+ return makeEnvironmentProviders([{ provide: OVERLAY_DEFAULT_CONFIG, useValue: { usePopover: false } }]);
115
+ }
116
+ ```
117
+
118
+ Call once in `appConfig.providers`. Forces CDK overlays (tooltip, popover, dropdown, dialog, …) to use the classic overlay strategy instead of the native `popover` API.
119
+
120
+ ## Examples
121
+
122
+ ### 1. `hlm()` — conditional class merging
123
+
124
+ ```ts
125
+ // demo-merge.component.ts
126
+ import { Component, input } from '@angular/core';
127
+ import { hlm } from '@egose/shadcn-theme-ng/utils';
128
+
129
+ @Component({
130
+ selector: 'demo-merge',
131
+ standalone: true,
132
+ template: `<div [class]="cls()">Hello</div>`,
133
+ })
134
+ export class DemoMerge {
135
+ readonly active = input(false);
136
+ readonly userClass = input<string>('', { alias: 'class' });
137
+
138
+ protected cls() {
139
+ return hlm(
140
+ 'rounded-md border px-4 py-2 text-sm',
141
+ this.active() && 'border-primary bg-primary/10',
142
+ this.userClass(),
143
+ );
144
+ }
145
+ }
146
+ ```
147
+
148
+ ```html
149
+ <demo-merge [active]="true" class="shadow-lg" />
150
+ <!-- later utilities win: hlm('px-2 px-4') === 'px-4' -->
151
+ ```
152
+
153
+ ### 2. `hlm()` — object / array forms
154
+
155
+ ```ts
156
+ import { hlm } from '@egose/shadcn-theme-ng/utils';
157
+
158
+ const cls = hlm(
159
+ ['inline-flex items-center gap-2', 'rounded-md'],
160
+ { 'bg-primary text-primary-foreground': true, 'opacity-50': false },
161
+ null,
162
+ undefined,
163
+ );
164
+ ```
165
+
166
+ ### 3. `classes()` — custom styled directive (signal-reactive)
167
+
168
+ ```ts
169
+ // status-dot.directive.ts
170
+ import { Directive, input } from '@angular/core';
171
+ import { classes } from '@egose/shadcn-theme-ng/utils';
172
+
173
+ @Directive({ selector: '[statusDot]' })
174
+ export class StatusDot {
175
+ readonly tone = input<'ok' | 'warn' | 'bad'>('ok');
176
+
177
+ constructor() {
178
+ classes(() => [
179
+ 'inline-block size-2 rounded-full',
180
+ this.tone() === 'ok' && 'bg-emerald-500',
181
+ this.tone() === 'warn' && 'bg-amber-500',
182
+ this.tone() === 'bad' && 'bg-destructive',
183
+ ]);
184
+ }
185
+ }
186
+ ```
187
+
188
+ ```ts
189
+ // usage
190
+ import { Component } from '@angular/core';
191
+
192
+ @Component({
193
+ selector: 'demo-dot',
194
+ standalone: true,
195
+ imports: [StatusDot],
196
+ template: `
197
+ <span statusDot tone="ok"></span>
198
+ <span statusDot tone="bad" class="ml-2"></span>
199
+ `,
200
+ })
201
+ export class DemoDot {}
202
+ ```
203
+
204
+ The trailing `class="ml-2"` is preserved — `classes()` merges base classes instead of overwriting them.
205
+
206
+ ### 4. `classes()` — variant-driven component (cva + signals)
207
+
208
+ ```ts
209
+ // pill.component.ts
210
+ import { Component, input } from '@angular/core';
211
+ import { cva, type VariantProps } from 'class-variance-authority';
212
+ import { classes } from '@egose/shadcn-theme-ng/utils';
213
+
214
+ export const pillVariants = cva('inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium', {
215
+ variants: { tone: { default: 'bg-muted', brand: 'bg-primary text-primary-foreground' } },
216
+ defaultVariants: { tone: 'default' },
217
+ });
218
+ export type PillTones = VariantProps<typeof pillVariants>;
219
+
220
+ @Component({
221
+ selector: 'demo-pill',
222
+ standalone: true,
223
+ template: `<ng-content />`,
224
+ })
225
+ export class DemoPill {
226
+ readonly tone = input<PillTones['tone']>('default');
227
+
228
+ constructor() {
229
+ classes(() => pillVariants({ tone: this.tone() }));
230
+ }
231
+ }
58
232
  ```
59
233
 
60
- Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs.
234
+ ### 5. `provideSpartanHlm()` — app bootstrap + overlay consumers
235
+
236
+ ```ts
237
+ // app.config.ts
238
+ import { ApplicationConfig } from '@angular/core';
239
+ import { provideAnimations } from '@angular/platform-browser/animations';
240
+ import { provideSpartanHlm } from '@egose/shadcn-theme-ng/utils';
241
+
242
+ export const appConfig: ApplicationConfig = {
243
+ providers: [provideAnimations(), provideSpartanHlm()],
244
+ };
245
+ ```
246
+
247
+ Any overlay component (tooltip, popover, dropdown-menu, dialog, hover-card, …) then uses the supported overlay strategy without per-component configuration:
248
+
249
+ ```ts
250
+ // demo-overlay.component.ts
251
+ import { Component } from '@angular/core';
252
+ import { HlmTooltipImports } from '@egose/shadcn-theme-ng/tooltip';
253
+ import { HlmButtonImports } from '@egose/shadcn-theme-ng/button';
254
+
255
+ @Component({
256
+ selector: 'demo-overlay',
257
+ standalone: true,
258
+ imports: [...HlmTooltipImports, ...HlmButtonImports],
259
+ template: `<button hlmBtn [hlmTooltip]="'Overlay-styled hint'">Hover</button>`,
260
+ })
261
+ export class DemoOverlay {}
262
+ ```
263
+
264
+ ### 6. Advanced: explicit `elementRef` / multi-document usage
265
+
266
+ ```ts
267
+ // managed-element.service.ts (e.g. portals, iframes, tests)
268
+ import { DOCUMENT, Injectable, inject, Injector, ElementRef } from '@angular/core';
269
+ import { classes } from '@egose/shadcn-theme-ng/utils';
270
+
271
+ @Injectable({ providedIn: 'root' })
272
+ export class ManagedElementService {
273
+ private readonly injector = inject(Injector);
274
+ private readonly document = inject(DOCUMENT);
275
+
276
+ styleDetached(element: HTMLElement, extra: string) {
277
+ // Drives classes on an element outside the current host,
278
+ // tracked against this injector's DestroyRef lifecycle.
279
+ classes(() => ['rounded-md border', extra], {
280
+ elementRef: new ElementRef(element),
281
+ injector: this.injector,
282
+ });
283
+ }
284
+ }
285
+ ```
286
+
287
+ Per-document observer isolation means elements in different `Document`s (iframes) each get their own observer lifecycle — destroying the injector disconnects only its own document's observer.
288
+
289
+ ## Accessibility notes
290
+
291
+ - `hlm()`/`classes()` are styling-only — they confer no semantics. Pair visual treatments with real roles, labels, and focus management from the component subpaths.
292
+ - When toggling state classes (e.g. `bg-destructive` for errors), always also surface a text cue (`hlm-error`, `aria-invalid`, `aria-describedby`) — color alone is not perceivable.
293
+ - Transition suppression in `classes()` avoids first-paint flashes but does not disable motion for users with `prefers-reduced-motion` — respect that media query in your own animation utilities.
294
+
295
+ ## Theming / CSS variables
296
+
297
+ No theme of its own — `hlm()`/`classes()` are token-agnostic mergers. They resolve whatever utilities you pass (including shadcn theme tokens like `bg-background`, `text-muted-foreground`, `border-input`), so output follows your configured theme automatically.
61
298
 
62
- ## Additional Resources
299
+ ## Related subpaths
63
300
 
64
- For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
301
+ - Every component subpath (`button`, `dialog`, `table`, …) — all consume `hlm()`/`classes()` internally; import this subpath when building custom shadcn-styled directives.
302
+ - `@egose/shadcn-theme-ng/tooltip` — example consumer of `hlm()` for arrow/content classes (`tooltipPositionVariants`).
303
+ - `@egose/shadcn-theme-ng/toggle` / `@egose/shadcn-theme-ng/toggle-group` — example consumers of the cva + `classes()` pattern.
304
+ - `@egose/shadcn-theme-ng/typography` — example consumer re-exporting class constants composed with `hlm()`.
@@ -1,4 +1,4 @@
1
- import { isPlatformBrowser } from '@angular/common';
1
+ import { DOCUMENT, isPlatformBrowser } from '@angular/common';
2
2
  import { runInInjectionContext, inject, Injector, ElementRef, PLATFORM_ID, DestroyRef, HostAttributeToken, effect, makeEnvironmentProviders } from '@angular/core';
3
3
  import { clsx } from 'clsx';
4
4
  import { twMerge } from 'tailwind-merge';
@@ -7,19 +7,19 @@ import { OVERLAY_DEFAULT_CONFIG } from '@angular/cdk/overlay';
7
7
  function hlm(...inputs) {
8
8
  return twMerge(clsx(inputs));
9
9
  }
10
- const elementClassManagers = new WeakMap();
11
- let globalObserver = null;
12
- const observedElements = new Set();
10
+ const documentClassStates = new WeakMap();
13
11
  let sourceCounter = 0;
14
12
  function classes(computed, options = {}) {
15
13
  runInInjectionContext(options.injector ?? inject(Injector), () => {
16
14
  const elementRef = options.elementRef ?? inject(ElementRef);
17
15
  const platformId = inject(PLATFORM_ID);
16
+ const document = inject(DOCUMENT);
18
17
  const destroyRef = inject(DestroyRef);
19
18
  const baseClasses = inject(new HostAttributeToken('class'), { optional: true });
20
19
  const element = elementRef.nativeElement;
21
20
  const sourceId = sourceCounter++;
22
- let manager = elementClassManagers.get(element);
21
+ const state = getDocumentState(document);
22
+ let manager = state.managers.get(element);
23
23
  if (!manager) {
24
24
  const initialBaseClasses = new Set();
25
25
  if (baseClasses) {
@@ -36,11 +36,12 @@ function classes(computed, options = {}) {
36
36
  transitionsSuppressed: false,
37
37
  previousTransition: '',
38
38
  previousTransitionPriority: '',
39
+ state,
40
+ view: document.defaultView,
39
41
  };
40
- elementClassManagers.set(element, manager);
41
- setupGlobalObserver(platformId);
42
- observedElements.add(element);
43
- if (isPlatformBrowser(platformId)) {
42
+ state.managers.set(element, manager);
43
+ observeManagedElement(state, element, platformId, document);
44
+ if (isPlatformBrowser(platformId) && manager.view) {
44
45
  manager.previousTransition = element.style.getPropertyValue('transition');
45
46
  manager.previousTransitionPriority = element.style.getPropertyPriority('transition');
46
47
  element.style.setProperty('transition', 'none', 'important');
@@ -57,7 +58,7 @@ function classes(computed, options = {}) {
57
58
  updateElement(manager);
58
59
  if (manager.transitionsSuppressed) {
59
60
  manager.transitionsSuppressed = false;
60
- manager.restoreRafId = requestAnimationFrame(() => {
61
+ manager.restoreRafId = manager.view.requestAnimationFrame(() => {
61
62
  manager.restoreRafId = null;
62
63
  restoreTransitionSuppression(manager);
63
64
  });
@@ -65,7 +66,7 @@ function classes(computed, options = {}) {
65
66
  }
66
67
  destroyRef.onDestroy(() => {
67
68
  if (manager.restoreRafId !== null) {
68
- cancelAnimationFrame(manager.restoreRafId);
69
+ manager.view?.cancelAnimationFrame(manager.restoreRafId);
69
70
  manager.restoreRafId = null;
70
71
  }
71
72
  if (manager.transitionsSuppressed) {
@@ -74,7 +75,7 @@ function classes(computed, options = {}) {
74
75
  }
75
76
  manager.sources.delete(sourceId);
76
77
  if (manager.sources.size === 0) {
77
- cleanupManager(element);
78
+ cleanupManager(manager);
78
79
  }
79
80
  else {
80
81
  updateElement(manager);
@@ -92,38 +93,48 @@ function restoreTransitionSuppression(manager) {
92
93
  manager.element.style.removeProperty('transition');
93
94
  }
94
95
  }
95
- function setupGlobalObserver(platformId) {
96
- if (isPlatformBrowser(platformId) && !globalObserver) {
97
- globalObserver = new MutationObserver((mutations) => {
98
- for (const mutation of mutations) {
99
- if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
100
- const element = mutation.target;
101
- const manager = elementClassManagers.get(element);
102
- if (manager && observedElements.has(element)) {
103
- if (manager.isUpdating)
104
- continue;
105
- const currentClasses = toClassList(element.className);
106
- const allSourceClasses = new Set();
107
- for (const source of manager.sources.values()) {
108
- for (const className of source.classes) {
109
- allSourceClasses.add(className);
96
+ function getDocumentState(document) {
97
+ let state = documentClassStates.get(document);
98
+ if (!state) {
99
+ state = { document, managers: new Map(), observer: null };
100
+ documentClassStates.set(document, state);
101
+ }
102
+ return state;
103
+ }
104
+ function observeManagedElement(state, element, platformId, document) {
105
+ const MutationObserver = document.defaultView?.MutationObserver;
106
+ if (isPlatformBrowser(platformId) && MutationObserver) {
107
+ if (!state.observer) {
108
+ state.observer = new MutationObserver((mutations) => {
109
+ for (const mutation of mutations) {
110
+ if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
111
+ const element = mutation.target;
112
+ const manager = state.managers.get(element);
113
+ if (manager) {
114
+ if (manager.isUpdating)
115
+ continue;
116
+ const currentClasses = toClassList(element.className);
117
+ const allSourceClasses = new Set();
118
+ for (const source of manager.sources.values()) {
119
+ for (const className of source.classes) {
120
+ allSourceClasses.add(className);
121
+ }
110
122
  }
111
- }
112
- manager.baseClasses.clear();
113
- for (const className of currentClasses) {
114
- if (!allSourceClasses.has(className)) {
115
- manager.baseClasses.add(className);
123
+ manager.baseClasses.clear();
124
+ for (const className of currentClasses) {
125
+ if (!allSourceClasses.has(className)) {
126
+ manager.baseClasses.add(className);
127
+ }
116
128
  }
129
+ updateElement(manager);
117
130
  }
118
- updateElement(manager);
119
131
  }
120
132
  }
121
- }
122
- });
123
- globalObserver.observe(document, {
133
+ });
134
+ }
135
+ state.observer.observe(element, {
124
136
  attributes: true,
125
137
  attributeFilter: ['class'],
126
- subtree: true,
127
138
  });
128
139
  }
129
140
  }
@@ -157,12 +168,25 @@ function updateElement(manager) {
157
168
  }
158
169
  manager.isUpdating = false;
159
170
  }
160
- function cleanupManager(element) {
161
- observedElements.delete(element);
162
- elementClassManagers.delete(element);
163
- if (observedElements.size === 0 && globalObserver) {
164
- globalObserver.disconnect();
165
- globalObserver = null;
171
+ function cleanupManager(manager) {
172
+ const { element, state } = manager;
173
+ state.managers.delete(element);
174
+ if (state.observer) {
175
+ state.observer.disconnect();
176
+ if (state.managers.size === 0) {
177
+ state.observer = null;
178
+ }
179
+ else {
180
+ for (const managedElement of state.managers.keys()) {
181
+ state.observer.observe(managedElement, {
182
+ attributes: true,
183
+ attributeFilter: ['class'],
184
+ });
185
+ }
186
+ }
187
+ }
188
+ if (state.managers.size === 0) {
189
+ documentClassStates.delete(state.document);
166
190
  }
167
191
  }
168
192
  const classListCache = new Map();
@@ -197,4 +221,4 @@ function provideSpartanHlm() {
197
221
  */
198
222
 
199
223
  export { classes, hlm, provideSpartanHlm };
200
- //# sourceMappingURL=utils.mjs.map
224
+
@@ -1 +0,0 @@
1
- {"version":3,"file":"accordion.mjs","sources":["../../../projects/accordion/src/lib/accordion.ts","../../../projects/accordion/src/lib/accordion-content.ts","../../../projects/accordion/src/lib/accordion-icon.ts","../../../projects/accordion/src/lib/accordion-item.ts","../../../projects/accordion/src/lib/accordion-trigger.ts","../../../projects/accordion/src/public-api.ts","../../../projects/accordion/src/accordion.ts"],"sourcesContent":["import { Directive, computed, inject, input } from '@angular/core';\nimport { BrnAccordion } from '@spartan-ng/brain/accordion';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[hlmAccordion], hlm-accordion',\n host: {\n '[class]': '_computedClass()',\n },\n hostDirectives: [{ directive: BrnAccordion, inputs: ['type', 'orientation'] }],\n})\nexport class HlmAccordion {\n private readonly _brn = inject(BrnAccordion);\n\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm('tw:flex', this._brn.orientation() === 'horizontal' ? 'tw:flex-row' : 'tw:flex-col', this.userClass()),\n );\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, input } from '@angular/core';\nimport { BrnAccordionContent } from '@spartan-ng/brain/accordion';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\n\n@Component({\n selector: 'hlm-accordion-content',\n template: `\n <div [attr.inert]=\"_inert()\" style=\"tw:overflow:hidden\">\n <div class=\"tw:flex tw:flex-col tw:gap-4 tw:text-balance tw:pb-4 tw:pt-0\">\n <ng-content />\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': '_computedClass()',\n },\n})\nexport class HlmAccordionContent extends BrnAccordionContent {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() => {\n const gridRows = this.state() === 'open' ? 'tw:grid-rows-[1fr]' : 'tw:hidden';\n return hlm('tw:grid tw:text-sm tw:transition-all', gridRows, this.userClass());\n });\n}\n","import { Directive, computed, input } from '@angular/core';\nimport { provideIcons } from '@ng-icons/core';\nimport { lucideChevronDown } from '@ng-icons/lucide';\nimport { provideHlmIconConfig } from '@egose/shadcn-theme-ng/icon';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: 'ng-icon[egAccordionIcon], ng-icon[hlmAccIcon]',\n providers: [provideIcons({ lucideChevronDown }), provideHlmIconConfig({ size: 'sm' })],\n host: {\n '[class]': '_computedClass()',\n },\n})\nexport class HlmAccordionIcon {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:text-muted-foreground tw:pointer-events-none tw:size-4 tw:shrink-0 tw:translate-y-0.5 tw:transition-transform tw:duration-200',\n this.userClass(),\n ),\n );\n}\n","import { Directive, computed, input } from '@angular/core';\nimport { BrnAccordionItem } from '@spartan-ng/brain/accordion';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[hlmAccordionItem],brn-accordion-item[hlm],hlm-accordion-item',\n host: {\n '[class]': '_computedClass()',\n },\n hostDirectives: [\n {\n directive: BrnAccordionItem,\n inputs: ['isOpened'],\n },\n ],\n})\nexport class HlmAccordionItem {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm('tw:border-border tw:flex tw:flex-1 tw:flex-col tw:border-b', this.userClass()),\n );\n}\n","import { Directive, computed, input } from '@angular/core';\nimport { BrnAccordionTrigger } from '@spartan-ng/brain/accordion';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[hlmAccordionTrigger]',\n host: {\n '[style.--tw-ring-offset-shadow]': '\"0 0 #000\"',\n '[class]': '_computedClass()',\n },\n hostDirectives: [BrnAccordionTrigger],\n})\nexport class HlmAccordionTrigger {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:focus-visible:border-ring tw:focus-visible:ring-ring/50 tw:flex tw:flex-1 tw:items-start tw:justify-between tw:gap-4 tw:rounded-md tw:py-4 tw:text-left tw:text-sm tw:font-medium tw:outline-none tw:transition-all tw:hover:underline tw:focus-visible:ring-[3px] tw:disabled:pointer-events-none tw:disabled:opacity-50 tw:[&[data-state=open]>[egAccIcon]]:rotate-180',\n this.userClass(),\n ),\n );\n}\n","/*\n * Public API Surface of accordion\n */\n\nimport { NgModule } from '@angular/core';\n\nimport { HlmAccordion } from './lib/accordion';\nimport { HlmAccordionContent } from './lib/accordion-content';\nimport { HlmAccordionIcon } from './lib/accordion-icon';\nimport { HlmAccordionItem } from './lib/accordion-item';\nimport { HlmAccordionTrigger } from './lib/accordion-trigger';\n\nexport * from './lib/accordion';\nexport * from './lib/accordion-content';\nexport * from './lib/accordion-icon';\nexport * from './lib/accordion-item';\nexport * from './lib/accordion-trigger';\n\nexport const HlmAccordionImports = [\n HlmAccordion,\n HlmAccordionItem,\n HlmAccordionTrigger,\n HlmAccordionIcon,\n HlmAccordionContent,\n] as const;\n\n@NgModule({\n imports: [...HlmAccordionImports],\n exports: [...HlmAccordionImports],\n})\nexport class HlmAccordionModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"alert.mjs","sources":["../../../projects/alert/src/lib/alert.ts","../../../projects/alert/src/lib/alert-description.ts","../../../projects/alert/src/lib/alert-icon.ts","../../../projects/alert/src/lib/alert-title.ts","../../../projects/alert/src/public-api.ts","../../../projects/alert/src/alert.ts"],"sourcesContent":["import { Directive, computed, input } from '@angular/core';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport type { ClassValue } from 'clsx';\n\nconst alertVariants = cva(\n 'tw:relative tw:w-full tw:items-start tw:gap-y-0.5 tw:rounded-lg tw:border tw:px-4 tw:py-3 tw:text-sm tw:has-[>[hlmAlertIcon]]:grid tw:has-[>[hlmAlertIcon]]:grid-cols-[calc(theme(spacing.1)*4)_1fr] tw:has-[>[hlmAlertIcon]]:gap-x-3 tw:[&>[hlmAlertIcon]]:size-4 tw:[&>[hlmAlertIcon]]:translate-y-0.5 tw:[&>[hlmAlertIcon]]:text-current',\n {\n variants: {\n variant: {\n primary: 'tw:bg-primary tw:text-primary-foreground tw:[&>[hlmAlertDescription]]:text-primary-foreground/90',\n secondary:\n 'tw:bg-secondary tw:text-secondary-foreground tw:[&>[hlmAlertDescription]]:text-secondary-foreground/90',\n success: 'tw:bg-success tw:text-success-foreground tw:[&>[hlmAlertDescription]]:text-success-foreground/90',\n warning: 'tw:bg-warning tw:text-warning-foreground tw:[&>[hlmAlertDescription]]:text-warning-foreground/90',\n danger: 'tw:bg-danger tw:text-danger-foreground tw:[&>[hlmAlertDescription]]:text-danger-foreground/90',\n info: 'tw:bg-info tw:text-info-foreground tw:[&>[hlmAlertDescription]]:text-info-foreground/90',\n light: 'tw:bg-light tw:text-light-foreground tw:[&>[hlmAlertDescription]]:text-light-foreground/90',\n dark: 'tw:bg-dark tw:text-dark-foreground tw:[&>[hlmAlertDescription]]:text-dark-foreground/90',\n accent: 'tw:bg-accent tw:text-accent-foreground tw:[&>[hlmAlertDescription]]:text-accent-foreground/90',\n destructive:\n 'tw:bg-destructive tw:text-destructive-foreground tw:[&>[hlmAlertDescription]]:text-destructive-foreground/90',\n muted: 'tw:bg-muted tw:text-muted-foreground tw:[&>[hlmAlertDescription]]:text-muted-foreground/90',\n link: 'tw:text-primary tw:underline-offset-4 tw:[&>[hlmAlertDescription]]:text-primary/90',\n ghost: 'tw:[&>[hlmAlertDescription]]:text-muted-foreground',\n },\n appearance: {\n solid: '',\n light: 'tw:font-semibold',\n },\n },\n compoundVariants: [\n {\n variant: 'primary',\n appearance: 'light',\n class: 'tw:bg-primary/20 tw:text-primary tw:[&>[hlmAlertDescription]]:text-primary',\n },\n {\n variant: 'secondary',\n appearance: 'light',\n class: 'tw:bg-secondary/20 tw:text-secondary tw:[&>[hlmAlertDescription]]:text-secondary',\n },\n {\n variant: 'success',\n appearance: 'light',\n class: 'tw:bg-success/20 tw:text-success tw:[&>[hlmAlertDescription]]:text-success',\n },\n {\n variant: 'warning',\n appearance: 'light',\n class: 'tw:bg-warning/20 tw:text-warning tw:[&>[hlmAlertDescription]]:text-warning',\n },\n {\n variant: 'danger',\n appearance: 'light',\n class: 'tw:bg-danger/20 tw:text-danger tw:[&>[hlmAlertDescription]]:text-danger',\n },\n {\n variant: 'info',\n appearance: 'light',\n class: 'tw:bg-info/20 tw:text-info tw:[&>[hlmAlertDescription]]:text-info',\n },\n {\n variant: 'light',\n appearance: 'light',\n class: 'tw:bg-light/20 tw:text-light tw:[&>[hlmAlertDescription]]:text-light',\n },\n {\n variant: 'dark',\n appearance: 'light',\n class: 'tw:bg-dark/20 tw:text-dark tw:[&>[hlmAlertDescription]]:text-dark',\n },\n {\n variant: 'accent',\n appearance: 'light',\n class: 'tw:bg-accent/20 tw:text-accent tw:[&>[hlmAlertDescription]]:text-accent',\n },\n {\n variant: 'destructive',\n appearance: 'light',\n class: 'tw:bg-destructive/20 tw:text-destructive tw:[&>[hlmAlertDescription]]:text-destructive',\n },\n {\n variant: 'muted',\n appearance: 'light',\n class: 'tw:bg-muted/20 tw:text-muted tw:[&>[hlmAlertDescription]]:text-muted',\n },\n {\n variant: 'link',\n appearance: 'light',\n class: 'tw:bg-primary/10 tw:text-primary tw:[&>[hlmAlertDescription]]:text-primary',\n },\n {\n variant: 'ghost',\n appearance: 'light',\n class: 'tw:bg-muted/10 tw:text-muted-foreground tw:[&>[hlmAlertDescription]]:text-muted-foreground',\n },\n ],\n defaultVariants: {\n variant: 'primary',\n appearance: 'solid',\n },\n },\n);\nexport type AlertVariants = VariantProps<typeof alertVariants>;\nexport type VariantType = NonNullable<AlertVariants['variant']>;\nexport type AppearanceType = NonNullable<AlertVariants['appearance']>;\n@Directive({\n selector: '[hlmAlert]',\n host: {\n role: 'alert',\n '[class]': '_computedClass()',\n },\n})\nexport class HlmAlert {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n public readonly variant = input<AlertVariants['variant']>('primary');\n public readonly appearance = input<AlertVariants['appearance']>('solid');\n protected readonly _computedClass = computed(() =>\n hlm(\n alertVariants({\n variant: this.variant(),\n appearance: this.appearance(),\n }),\n this.userClass(),\n ),\n );\n}\n","import { Directive, computed, input } from '@angular/core';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[hlmAlertDesc],[hlmAlertDescription]',\n host: {\n '[class]': '_computedClass()',\n },\n})\nexport class HlmAlertDescription {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:text-current tw:col-start-2 tw:grid tw:justify-items-start tw:gap-1 tw:text-sm tw:[&_p]:leading-relaxed',\n this.userClass(),\n ),\n );\n}\n","import { Directive } from '@angular/core';\nimport { provideHlmIconConfig } from '@egose/shadcn-theme-ng/icon';\n\n@Directive({\n selector: '[hlmAlertIcon]',\n providers: [provideHlmIconConfig({ size: 'sm' })],\n})\nexport class HlmAlertIcon {}\n","import { Directive, computed, input } from '@angular/core';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[hlmAlertTitle]',\n host: {\n '[class]': '_computedClass()',\n },\n})\nexport class HlmAlertTitle {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm('tw:col-start-2 tw:line-clamp-1 tw:min-h-4 tw:text-md tw:font-semibold tw:tracking-tight', this.userClass()),\n );\n}\n","/*\n * Public API Surface of alert\n */\n\nimport { NgModule } from '@angular/core';\n\nimport { HlmAlert } from './lib/alert';\nimport { HlmAlertDescription } from './lib/alert-description';\nimport { HlmAlertIcon } from './lib/alert-icon';\nimport { HlmAlertTitle } from './lib/alert-title';\n\nexport * from './lib/alert';\nexport * from './lib/alert-description';\nexport * from './lib/alert-icon';\nexport * from './lib/alert-title';\n\nexport const HlmAlertImports = [HlmAlert, HlmAlertTitle, HlmAlertDescription, HlmAlertIcon] as const;\n\n@NgModule({\n imports: [...HlmAlertImports],\n exports: [...HlmAlertImports],\n})\nexport class HlmAlertModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"alert-dialog.mjs","sources":["../../../projects/alert-dialog/src/lib/hlm-alert-dialog-overlay.ts","../../../projects/alert-dialog/src/lib/hlm-alert-dialog.ts","../../../projects/alert-dialog/src/lib/hlm-alert-dialog-action.ts","../../../projects/alert-dialog/src/lib/hlm-alert-dialog-cancel.ts","../../../projects/alert-dialog/src/lib/hlm-alert-dialog-content.ts","../../../projects/alert-dialog/src/lib/hlm-alert-dialog-description.ts","../../../projects/alert-dialog/src/lib/hlm-alert-dialog-footer.ts","../../../projects/alert-dialog/src/lib/hlm-alert-dialog-header.ts","../../../projects/alert-dialog/src/lib/hlm-alert-dialog-media.ts","../../../projects/alert-dialog/src/lib/hlm-alert-dialog-portal.ts","../../../projects/alert-dialog/src/lib/hlm-alert-dialog-title.ts","../../../projects/alert-dialog/src/lib/hlm-alert-dialog-trigger.ts","../../../projects/alert-dialog/src/public-api.ts","../../../projects/alert-dialog/src/alert-dialog.ts"],"sourcesContent":["import { Directive, computed, effect, input, untracked } from '@angular/core';\nimport { BrnAlertDialogOverlay } from '@spartan-ng/brain/alert-dialog';\nimport { injectCustomClassSettable } from '@spartan-ng/brain/core';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[hlmAlertDialogOverlay],hlm-alert-dialog-overlay',\n hostDirectives: [BrnAlertDialogOverlay],\n})\nexport class HlmAlertDialogOverlay {\n private readonly _classSettable = injectCustomClassSettable({ optional: true, host: true });\n\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm(\n 'data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 isolate bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs',\n this.userClass(),\n ),\n );\n\n constructor() {\n effect(() => {\n const classValue = this._computedClass();\n untracked(() => this._classSettable?.setClassToCustomElement(classValue));\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, forwardRef } from '@angular/core';\nimport { BRN_ALERT_DIALOG_DEFAULT_OPTIONS, BrnAlertDialog } from '@spartan-ng/brain/alert-dialog';\nimport { BrnDialog, provideBrnDialogDefaultOptions } from '@spartan-ng/brain/dialog';\nimport { HlmAlertDialogOverlay } from './hlm-alert-dialog-overlay';\n\n@Component({\n selector: 'hlm-alert-dialog',\n exportAs: 'hlmAlertDialog',\n imports: [HlmAlertDialogOverlay],\n providers: [\n {\n provide: BrnDialog,\n useExisting: forwardRef(() => HlmAlertDialog),\n },\n provideBrnDialogDefaultOptions({\n ...BRN_ALERT_DIALOG_DEFAULT_OPTIONS,\n }),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <hlm-alert-dialog-overlay />\n <ng-content />\n `,\n})\nexport class HlmAlertDialog extends BrnAlertDialog {}\n","import { Directive, input } from '@angular/core';\nimport { HlmBtn } from '@egose/shadcn-theme-ng/button';\n\n@Directive({\n selector: 'button[hlmAlertDialogAction]',\n hostDirectives: [{ directive: HlmBtn, inputs: ['variant', 'size'] }],\n host: { 'data-slot': 'alert-dialog-action', '[type]': 'type()' },\n})\nexport class HlmAlertDialogAction {\n public readonly type = input<'button' | 'submit' | 'reset'>('button');\n}\n","import { Directive, input } from '@angular/core';\nimport { BrnDialogClose } from '@spartan-ng/brain/dialog';\nimport { HlmBtn, provideBrnButtonConfig } from '@egose/shadcn-theme-ng/button';\n\n@Directive({\n selector: 'button[hlmAlertDialogCancel]',\n providers: [provideBrnButtonConfig({ variant: 'outline' })],\n hostDirectives: [BrnDialogClose, { directive: HlmBtn, inputs: ['variant', 'size'] }],\n host: { 'data-slot': 'alert-dialog-cancel', '[type]': 'type()' },\n})\nexport class HlmAlertDialogCancel {\n public readonly type = input<'button' | 'submit' | 'reset'>('button');\n}\n","import { Directive, input, signal } from '@angular/core';\nimport { injectExposesStateProvider } from '@spartan-ng/brain/core';\nimport { classes } from '@egose/shadcn-theme-ng/utils';\n\n@Directive({\n selector: '[hlmAlertDialogContent],hlm-alert-dialog-content',\n host: {\n 'data-slot': 'alert-dialog-content',\n '[attr.data-state]': 'state()',\n '[attr.data-size]': 'size()',\n },\n})\nexport class HlmAlertDialogContent {\n private readonly _stateProvider = injectExposesStateProvider({ optional: true, host: true });\n public readonly state = this._stateProvider?.state ?? signal('closed');\n\n public readonly size = input<'sm' | 'default'>('default');\n\n constructor() {\n classes(\n () =>\n 'data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 bg-popover text-popover-foreground ring-foreground/10 gap-6 rounded-xl p-6 ring-1 duration-100 data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-lg group/alert-dialog-content grid w-full outline-none',\n );\n }\n}\n","import { Directive } from '@angular/core';\nimport { BrnAlertDialogDescription } from '@spartan-ng/brain/alert-dialog';\nimport { classes } from '@egose/shadcn-theme-ng/utils';\n\n@Directive({\n selector: '[hlmAlertDialogDescription]',\n hostDirectives: [BrnAlertDialogDescription],\n host: { 'data-slot': 'alert-dialog-description' },\n})\nexport class HlmAlertDialogDescription {\n constructor() {\n classes(\n () =>\n 'text-muted-foreground *:[a]:hover:text-foreground text-sm text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3',\n );\n }\n}\n","import { Directive } from '@angular/core';\nimport { classes } from '@egose/shadcn-theme-ng/utils';\n\n@Directive({\n selector: '[hlmAlertDialogFooter],hlm-alert-dialog-footer',\n host: { 'data-slot': 'alert-dialog-footer' },\n})\nexport class HlmAlertDialogFooter {\n constructor() {\n classes(\n () =>\n 'flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end',\n );\n }\n}\n","import { Directive } from '@angular/core';\nimport { classes } from '@egose/shadcn-theme-ng/utils';\n\n@Directive({\n selector: '[hlmAlertDialogHeader],hlm-alert-dialog-header',\n host: { 'data-slot': 'alert-dialog-header' },\n})\nexport class HlmAlertDialogHeader {\n constructor() {\n classes(\n () =>\n 'grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-start sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]',\n );\n }\n}\n","import { Directive } from '@angular/core';\nimport { classes } from '@egose/shadcn-theme-ng/utils';\n\n@Directive({\n selector: '[hlmAlertDialogMedia],hlm-alert-dialog-media',\n host: { 'data-slot': 'alert-dialog-media' },\n})\nexport class HlmAlertDialogMedia {\n constructor() {\n classes(\n () =>\n \"bg-muted mb-2 inline-flex size-16 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[ng-icon:not([class*='text-'])]:text-[length:--spacing(8)]\",\n );\n }\n}\n","import { Directive } from '@angular/core';\nimport { BrnAlertDialogContent } from '@spartan-ng/brain/alert-dialog';\n\n@Directive({\n selector: '[hlmAlertDialogPortal]',\n hostDirectives: [{ directive: BrnAlertDialogContent, inputs: ['context', 'class'] }],\n})\nexport class HlmAlertDialogPortal {}\n","import { Directive } from '@angular/core';\nimport { BrnAlertDialogTitle } from '@spartan-ng/brain/alert-dialog';\nimport { classes } from '@egose/shadcn-theme-ng/utils';\n\n@Directive({\n selector: '[hlmAlertDialogTitle]',\n hostDirectives: [BrnAlertDialogTitle],\n host: { 'data-slot': 'alert-dialog-title' },\n})\nexport class HlmAlertDialogTitle {\n constructor() {\n classes(\n () =>\n 'text-lg font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2',\n );\n }\n}\n","import { Directive } from '@angular/core';\nimport { BrnAlertDialogTrigger } from '@spartan-ng/brain/alert-dialog';\n\n@Directive({\n selector: 'button[hlmAlertDialogTrigger],button[hlmAlertDialogTriggerFor]',\n hostDirectives: [\n { directive: BrnAlertDialogTrigger, inputs: ['id', 'brnAlertDialogTriggerFor: hlmAlertDialogTriggerFor', 'type'] },\n ],\n host: { 'data-slot': 'alert-dialog-trigger' },\n})\nexport class HlmAlertDialogTrigger {}\n","/*\n * Public API Surface of alert-dialog\n */\n\nimport { NgModule } from '@angular/core';\n\nimport { HlmAlertDialog } from './lib/hlm-alert-dialog';\nimport { HlmAlertDialogAction } from './lib/hlm-alert-dialog-action';\nimport { HlmAlertDialogCancel } from './lib/hlm-alert-dialog-cancel';\nimport { HlmAlertDialogContent } from './lib/hlm-alert-dialog-content';\nimport { HlmAlertDialogDescription } from './lib/hlm-alert-dialog-description';\nimport { HlmAlertDialogFooter } from './lib/hlm-alert-dialog-footer';\nimport { HlmAlertDialogHeader } from './lib/hlm-alert-dialog-header';\nimport { HlmAlertDialogMedia } from './lib/hlm-alert-dialog-media';\nimport { HlmAlertDialogOverlay } from './lib/hlm-alert-dialog-overlay';\nimport { HlmAlertDialogPortal } from './lib/hlm-alert-dialog-portal';\nimport { HlmAlertDialogTitle } from './lib/hlm-alert-dialog-title';\nimport { HlmAlertDialogTrigger } from './lib/hlm-alert-dialog-trigger';\n\nexport * from './lib/hlm-alert-dialog';\nexport * from './lib/hlm-alert-dialog-action';\nexport * from './lib/hlm-alert-dialog-cancel';\nexport * from './lib/hlm-alert-dialog-content';\nexport * from './lib/hlm-alert-dialog-description';\nexport * from './lib/hlm-alert-dialog-footer';\nexport * from './lib/hlm-alert-dialog-header';\nexport * from './lib/hlm-alert-dialog-media';\nexport * from './lib/hlm-alert-dialog-overlay';\nexport * from './lib/hlm-alert-dialog-portal';\nexport * from './lib/hlm-alert-dialog-title';\nexport * from './lib/hlm-alert-dialog-trigger';\n\nexport const HlmAlertDialogImports = [\n HlmAlertDialog,\n HlmAlertDialogAction,\n HlmAlertDialogCancel,\n HlmAlertDialogContent,\n HlmAlertDialogDescription,\n HlmAlertDialogFooter,\n HlmAlertDialogHeader,\n HlmAlertDialogMedia,\n HlmAlertDialogOverlay,\n HlmAlertDialogPortal,\n HlmAlertDialogTitle,\n HlmAlertDialogTrigger,\n] as const;\n\n@NgModule({\n imports: [...HlmAlertDialogImports],\n exports: [...HlmAlertDialogImports],\n})\nexport class HlmAlertDialogModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}