@spartan-ng/cli 0.0.1-alpha.336 → 0.0.1-alpha.338

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 (164) hide show
  1. package/package.json +4 -4
  2. package/src/generators/base/generator.js +8 -3
  3. package/src/generators/base/generator.js.map +1 -1
  4. package/src/generators/base/lib/build-dependency-array.js +1 -0
  5. package/src/generators/base/lib/build-dependency-array.js.map +1 -1
  6. package/src/generators/base/versions.d.ts +2 -1
  7. package/src/generators/base/versions.js +3 -2
  8. package/src/generators/base/versions.js.map +1 -1
  9. package/src/generators/theme/libs/add-theme-to-application-styles.js.map +1 -1
  10. package/src/generators/ui/generator.js +9 -2
  11. package/src/generators/ui/generator.js.map +1 -1
  12. package/src/generators/ui/libs/ui-accordion-helm/files/lib/hlm-accordion-content.directive.ts.template +3 -8
  13. package/src/generators/ui/libs/ui-accordion-helm/files/lib/hlm-accordion-icon.directive.ts.template +7 -11
  14. package/src/generators/ui/libs/ui-accordion-helm/files/lib/hlm-accordion-item.directive.ts.template +9 -9
  15. package/src/generators/ui/libs/ui-accordion-helm/files/lib/hlm-accordion-trigger.directive.ts.template +3 -8
  16. package/src/generators/ui/libs/ui-accordion-helm/files/lib/hlm-accordion.directive.ts.template +4 -9
  17. package/src/generators/ui/libs/ui-alert-dialog-helm/files/lib/hlm-alert-dialog-cancel-button.directive.ts.template +3 -8
  18. package/src/generators/ui/libs/ui-alert-dialog-helm/files/lib/hlm-alert-dialog-content.component.ts.template +3 -8
  19. package/src/generators/ui/libs/ui-alert-dialog-helm/files/lib/hlm-alert-dialog-description.directive.ts.template +3 -8
  20. package/src/generators/ui/libs/ui-alert-dialog-helm/files/lib/hlm-alert-dialog-footer.component.ts.template +3 -7
  21. package/src/generators/ui/libs/ui-alert-dialog-helm/files/lib/hlm-alert-dialog-header.component.ts.template +3 -7
  22. package/src/generators/ui/libs/ui-alert-dialog-helm/files/lib/hlm-alert-dialog-overlay.directive.ts.template +3 -7
  23. package/src/generators/ui/libs/ui-alert-dialog-helm/files/lib/hlm-alert-dialog-title.directive.ts.template +3 -7
  24. package/src/generators/ui/libs/ui-alert-dialog-helm/files/lib/hlm-alert-dialog.component.ts.template +1 -2
  25. package/src/generators/ui/libs/ui-alert-helm/files/lib/hlm-alert-description.directive.ts.template +3 -11
  26. package/src/generators/ui/libs/ui-alert-helm/files/lib/hlm-alert-title.directive.ts.template +3 -11
  27. package/src/generators/ui/libs/ui-alert-helm/files/lib/hlm-alert.directive.ts.template +3 -11
  28. package/src/generators/ui/libs/ui-aspect-ratio-helm/files/lib/helm-aspect-ratio.directive.ts.template +3 -8
  29. package/src/generators/ui/libs/ui-avatar-helm/files/lib/hlm-avatar.component.spec.ts.template +10 -6
  30. package/src/generators/ui/libs/ui-avatar-helm/files/lib/hlm-avatar.component.ts.template +5 -11
  31. package/src/generators/ui/libs/ui-avatar-helm/files/lib/image/hlm-avatar-image.directive.ts.template +3 -11
  32. package/src/generators/ui/libs/ui-badge-helm/files/lib/hlm-badge.directive.ts.template +5 -14
  33. package/src/generators/ui/libs/ui-button-helm/files/.DS_Store.template +0 -0
  34. package/src/generators/ui/libs/ui-button-helm/files/lib/hlm-button.directive.ts.template +11 -11
  35. package/src/generators/ui/libs/ui-card-helm/files/lib/hlm-card-content.directive.ts.template +3 -11
  36. package/src/generators/ui/libs/ui-card-helm/files/lib/hlm-card-description.directive.ts.template +3 -11
  37. package/src/generators/ui/libs/ui-card-helm/files/lib/hlm-card-footer.directive.ts.template +4 -16
  38. package/src/generators/ui/libs/ui-card-helm/files/lib/hlm-card-header.directive.ts.template +4 -16
  39. package/src/generators/ui/libs/ui-card-helm/files/lib/hlm-card-title.directive.ts.template +3 -11
  40. package/src/generators/ui/libs/ui-card-helm/files/lib/hlm-card.directive.ts.template +3 -11
  41. package/src/generators/ui/libs/ui-carousel-helm/files/index.ts.template +26 -0
  42. package/src/generators/ui/libs/ui-carousel-helm/files/lib/hlm-carousel-content.component.ts.template +25 -0
  43. package/src/generators/ui/libs/ui-carousel-helm/files/lib/hlm-carousel-item.component.ts.template +26 -0
  44. package/src/generators/ui/libs/ui-carousel-helm/files/lib/hlm-carousel-next.component.ts.template +62 -0
  45. package/src/generators/ui/libs/ui-carousel-helm/files/lib/hlm-carousel-previous.component.ts.template +62 -0
  46. package/src/generators/ui/libs/ui-carousel-helm/files/lib/hlm-carousel.component.ts.template +93 -0
  47. package/src/generators/ui/libs/ui-carousel-helm/generator.d.ts +3 -0
  48. package/src/generators/ui/libs/ui-carousel-helm/generator.js +12 -0
  49. package/src/generators/ui/libs/ui-carousel-helm/generator.js.map +1 -0
  50. package/src/generators/ui/libs/ui-checkbox-helm/files/lib/hlm-checkbox-checkicon.component.ts.template +11 -20
  51. package/src/generators/ui/libs/ui-checkbox-helm/files/lib/hlm-checkbox.component.ts.template +50 -46
  52. package/src/generators/ui/libs/ui-command-helm/files/lib/hlm-command-dialog-close-button.directive.ts.template +3 -11
  53. package/src/generators/ui/libs/ui-command-helm/files/lib/hlm-command-dialog.directive.ts.template +8 -14
  54. package/src/generators/ui/libs/ui-command-helm/files/lib/hlm-command-empty.directive.ts.template +3 -11
  55. package/src/generators/ui/libs/ui-command-helm/files/lib/hlm-command-group.directive.ts.template +7 -13
  56. package/src/generators/ui/libs/ui-command-helm/files/lib/hlm-command-input-wrapper.component.ts.template +5 -14
  57. package/src/generators/ui/libs/ui-command-helm/files/lib/hlm-command-input.directive.ts.template +7 -12
  58. package/src/generators/ui/libs/ui-command-helm/files/lib/hlm-command-item-icon.directive.ts.template +3 -10
  59. package/src/generators/ui/libs/ui-command-helm/files/lib/hlm-command-item.directive.ts.template +7 -12
  60. package/src/generators/ui/libs/ui-command-helm/files/lib/hlm-command-list.directive.ts.template +3 -11
  61. package/src/generators/ui/libs/ui-command-helm/files/lib/hlm-command-shortcut.component.ts.template +5 -11
  62. package/src/generators/ui/libs/ui-command-helm/files/lib/hlm-command.directive.ts.template +7 -13
  63. package/src/generators/ui/libs/ui-dialog-helm/files/.DS_Store.template +0 -0
  64. package/src/generators/ui/libs/ui-dialog-helm/files/index.ts.template +1 -0
  65. package/src/generators/ui/libs/ui-dialog-helm/files/lib/hlm-dialog-close.directive.ts.template +7 -13
  66. package/src/generators/ui/libs/ui-dialog-helm/files/lib/hlm-dialog-content.component.ts.template +24 -17
  67. package/src/generators/ui/libs/ui-dialog-helm/files/lib/hlm-dialog-description.directive.ts.template +3 -11
  68. package/src/generators/ui/libs/ui-dialog-helm/files/lib/hlm-dialog-footer.component.ts.template +5 -11
  69. package/src/generators/ui/libs/ui-dialog-helm/files/lib/hlm-dialog-header.component.ts.template +5 -11
  70. package/src/generators/ui/libs/ui-dialog-helm/files/lib/hlm-dialog-overlay.directive.ts.template +9 -13
  71. package/src/generators/ui/libs/ui-dialog-helm/files/lib/hlm-dialog-title.directive.ts.template +3 -11
  72. package/src/generators/ui/libs/ui-dialog-helm/files/lib/hlm-dialog.component.ts.template +1 -2
  73. package/src/generators/ui/libs/ui-dialog-helm/files/lib/hlm-dialog.service.ts.template +35 -0
  74. package/src/generators/ui/libs/ui-hover-card-helm/files/lib/hlm-hover-card-content.component.ts.template +3 -10
  75. package/src/generators/ui/libs/ui-icon-helm/files/lib/hlm-icon.component.spec.ts.template +3 -3
  76. package/src/generators/ui/libs/ui-icon-helm/files/lib/hlm-icon.component.ts.template +4 -4
  77. package/src/generators/ui/libs/ui-input-helm/files/lib/hlm-input-error.directive.ts.template +3 -11
  78. package/src/generators/ui/libs/ui-input-helm/files/lib/hlm-input.directive.ts.template +5 -10
  79. package/src/generators/ui/libs/ui-label-helm/files/lib/hlm-label.directive.ts.template +4 -10
  80. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-bar-item.directive.ts.template +7 -13
  81. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-bar.component.ts.template +5 -11
  82. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-item-check.component.ts.template +12 -14
  83. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-item-checkbox.directive.ts.template +8 -21
  84. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-item-icon.directive.ts.template +3 -10
  85. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-item-radio.component.ts.template +12 -14
  86. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-item-radio.directive.ts.template +8 -21
  87. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-item-sub-indicator.component.ts.template +6 -14
  88. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-item.directive.ts.template +5 -15
  89. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-label.component.ts.template +5 -11
  90. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-separator.component.ts.template +3 -11
  91. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-shortcut.component.ts.template +5 -11
  92. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu.component.ts.template +4 -12
  93. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-sub-menu.component.ts.template +7 -13
  94. package/src/generators/ui/libs/ui-pagination-helm/files/index.ts.template +33 -0
  95. package/src/generators/ui/libs/ui-pagination-helm/files/lib/hlm-pagination-content.directive.ts.template +21 -0
  96. package/src/generators/ui/libs/ui-pagination-helm/files/lib/hlm-pagination-ellipsis.componet.ts.template +23 -0
  97. package/src/generators/ui/libs/ui-pagination-helm/files/lib/hlm-pagination-item.directive.ts.template +22 -0
  98. package/src/generators/ui/libs/ui-pagination-helm/files/lib/hlm-pagination-link.directive.ts.template +56 -0
  99. package/src/generators/ui/libs/ui-pagination-helm/files/lib/hlm-pagination-next.componet.ts.template +31 -0
  100. package/src/generators/ui/libs/ui-pagination-helm/files/lib/hlm-pagination-previous.componet.ts.template +31 -0
  101. package/src/generators/ui/libs/ui-pagination-helm/files/lib/hlm-pagination.directive.ts.template +25 -0
  102. package/src/generators/ui/libs/ui-pagination-helm/generator.d.ts +3 -0
  103. package/src/generators/ui/libs/ui-pagination-helm/generator.js +12 -0
  104. package/src/generators/ui/libs/ui-pagination-helm/generator.js.map +1 -0
  105. package/src/generators/ui/libs/ui-popover-helm/files/lib/hlm-popover-close.directive.ts.template +7 -13
  106. package/src/generators/ui/libs/ui-popover-helm/files/lib/hlm-popover-content.directive.ts.template +7 -13
  107. package/src/generators/ui/libs/ui-progress-helm/files/lib/hlm-progress-indicator.directive.ts.template +5 -11
  108. package/src/generators/ui/libs/ui-progress-helm/files/lib/hlm-progress.directive.ts.template +5 -11
  109. package/src/generators/ui/libs/ui-radio-group-helm/files/lib/hlm-radio-group.directive.ts.template +3 -11
  110. package/src/generators/ui/libs/ui-radio-group-helm/files/lib/hlm-radio-indicator.component.ts.template +3 -11
  111. package/src/generators/ui/libs/ui-radio-group-helm/files/lib/hlm-radio.directive.ts.template +5 -11
  112. package/src/generators/ui/libs/ui-select-helm/files/index.ts.template +38 -0
  113. package/src/generators/ui/libs/ui-select-helm/files/lib/hlm-select-content.directive.ts.template +34 -0
  114. package/src/generators/ui/libs/ui-select-helm/files/lib/hlm-select-group.directive.ts.template +22 -0
  115. package/src/generators/ui/libs/ui-select-helm/files/lib/hlm-select-label.directive.ts.template +38 -0
  116. package/src/generators/ui/libs/ui-select-helm/files/lib/hlm-select-option.component.ts.template +54 -0
  117. package/src/generators/ui/libs/ui-select-helm/files/lib/hlm-select-scroll-down.component.ts.template +17 -0
  118. package/src/generators/ui/libs/ui-select-helm/files/lib/hlm-select-scroll-up.component.ts.template +17 -0
  119. package/src/generators/ui/libs/ui-select-helm/files/lib/hlm-select-trigger.component.ts.template +44 -0
  120. package/src/generators/ui/libs/ui-select-helm/files/lib/hlm-select-value.directive.ts.template +26 -0
  121. package/src/generators/ui/libs/ui-select-helm/files/lib/hlm-select.directive.ts.template +21 -0
  122. package/src/generators/ui/libs/ui-select-helm/generator.d.ts +3 -0
  123. package/src/generators/ui/libs/ui-select-helm/generator.js +12 -0
  124. package/src/generators/ui/libs/ui-select-helm/generator.js.map +1 -0
  125. package/src/generators/ui/libs/ui-separator-helm/files/lib/hlm-separator.directive.ts.template +7 -13
  126. package/src/generators/ui/libs/ui-sheet-helm/files/lib/hlm-sheet-close.directive.ts.template +7 -13
  127. package/src/generators/ui/libs/ui-sheet-helm/files/lib/hlm-sheet-content.component.ts.template +6 -14
  128. package/src/generators/ui/libs/ui-sheet-helm/files/lib/hlm-sheet-description.directive.ts.template +3 -11
  129. package/src/generators/ui/libs/ui-sheet-helm/files/lib/hlm-sheet-footer.component.ts.template +5 -11
  130. package/src/generators/ui/libs/ui-sheet-helm/files/lib/hlm-sheet-header.component.ts.template +3 -11
  131. package/src/generators/ui/libs/ui-sheet-helm/files/lib/hlm-sheet-overlay.directive.ts.template +11 -17
  132. package/src/generators/ui/libs/ui-sheet-helm/files/lib/hlm-sheet-title.directive.ts.template +3 -11
  133. package/src/generators/ui/libs/ui-sheet-helm/files/lib/hlm-sheet.component.ts.template +1 -2
  134. package/src/generators/ui/libs/ui-skeleton-helm/files/lib/hlm-skeleton.component.ts.template +3 -11
  135. package/src/generators/ui/libs/ui-spinner-helm/files/lib/hlm-spinner.component.ts.template +5 -11
  136. package/src/generators/ui/libs/ui-switch-helm/files/lib/hlm-switch-thumb.directive.ts.template +7 -13
  137. package/src/generators/ui/libs/ui-switch-helm/files/lib/hlm-switch.component.ts.template +19 -14
  138. package/src/generators/ui/libs/ui-table-helm/files/lib/hlm-caption.component.ts.template +10 -28
  139. package/src/generators/ui/libs/ui-table-helm/files/lib/hlm-table.component.ts.template +11 -27
  140. package/src/generators/ui/libs/ui-table-helm/files/lib/hlm-td.component.ts.template +8 -12
  141. package/src/generators/ui/libs/ui-table-helm/files/lib/hlm-th.component.ts.template +22 -23
  142. package/src/generators/ui/libs/ui-table-helm/files/lib/hlm-trow.component.ts.template +7 -24
  143. package/src/generators/ui/libs/ui-tabs-helm/files/index.ts.template +8 -1
  144. package/src/generators/ui/libs/ui-tabs-helm/files/lib/hlm-tabs-content.directive.ts.template +9 -21
  145. package/src/generators/ui/libs/ui-tabs-helm/files/lib/hlm-tabs-list.component.ts.template +5 -17
  146. package/src/generators/ui/libs/ui-tabs-helm/files/lib/hlm-tabs-trigger.directive.ts.template +9 -21
  147. package/src/generators/ui/libs/ui-tabs-helm/files/lib/hlm-tabs.component.ts.template +17 -0
  148. package/src/generators/ui/libs/ui-toggle-helm/files/lib/hlm-toggle-group.directive.ts.template +7 -13
  149. package/src/generators/ui/libs/ui-toggle-helm/files/lib/hlm-toggle.directive.ts.template +5 -11
  150. package/src/generators/ui/libs/ui-typography-helm/files/lib/hlm-blockquote.directive.ts.template +3 -11
  151. package/src/generators/ui/libs/ui-typography-helm/files/lib/hlm-code.directive.ts.template +3 -11
  152. package/src/generators/ui/libs/ui-typography-helm/files/lib/hlm-h1.directive.ts.template +3 -11
  153. package/src/generators/ui/libs/ui-typography-helm/files/lib/hlm-h2.directive.ts.template +3 -11
  154. package/src/generators/ui/libs/ui-typography-helm/files/lib/hlm-h3.directive.ts.template +3 -11
  155. package/src/generators/ui/libs/ui-typography-helm/files/lib/hlm-h4.directive.ts.template +3 -11
  156. package/src/generators/ui/libs/ui-typography-helm/files/lib/hlm-large.directive.ts.template +3 -11
  157. package/src/generators/ui/libs/ui-typography-helm/files/lib/hlm-lead.directive.ts.template +3 -11
  158. package/src/generators/ui/libs/ui-typography-helm/files/lib/hlm-muted.directive.ts.template +3 -11
  159. package/src/generators/ui/libs/ui-typography-helm/files/lib/hlm-p.directive.ts.template +3 -11
  160. package/src/generators/ui/libs/ui-typography-helm/files/lib/hlm-small.directive.ts.template +3 -11
  161. package/src/generators/ui/libs/ui-typography-helm/files/lib/hlm-ul.directive.ts.template +3 -11
  162. package/src/generators/ui/supported-ui-libraries.json +115 -81
  163. package/src/utils/get-project-names.js.map +1 -1
  164. package/src/utils/version-utils.js.map +1 -1
@@ -1,4 +1,4 @@
1
- import { Component, Input, computed, signal } from '@angular/core';
1
+ import { Component, computed, input } from '@angular/core';
2
2
  import { hlm } from '@spartan-ng/ui-core';
3
3
  import { ClassValue } from 'clsx';
4
4
 
@@ -13,14 +13,8 @@ import { ClassValue } from 'clsx';
13
13
  },
14
14
  })
15
15
  export class HlmDialogFooterComponent {
16
- private readonly _userCls = signal<ClassValue>('');
17
- @Input()
18
- set class(userCls: ClassValue) {
19
- this._userCls.set(userCls);
20
- }
21
-
22
- protected _computedClass = computed(() => this._generateClass());
23
- private _generateClass() {
24
- return hlm('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', this._userCls());
25
- }
16
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
17
+ protected _computedClass = computed(() =>
18
+ hlm('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', this.userClass()),
19
+ );
26
20
  }
@@ -1,4 +1,4 @@
1
- import { Component, Input, computed, signal } from '@angular/core';
1
+ import { Component, computed, input } from '@angular/core';
2
2
  import { hlm } from '@spartan-ng/ui-core';
3
3
  import { ClassValue } from 'clsx';
4
4
 
@@ -13,14 +13,8 @@ import { ClassValue } from 'clsx';
13
13
  },
14
14
  })
15
15
  export class HlmDialogHeaderComponent {
16
- private readonly _userCls = signal<ClassValue>('');
17
- @Input()
18
- set class(userCls: ClassValue) {
19
- this._userCls.set(userCls);
20
- }
21
-
22
- protected _computedClass = computed(() => this._generateClass());
23
- private _generateClass() {
24
- return hlm('flex flex-col space-y-1.5 text-center sm:text-left', this._userCls());
25
- }
16
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
17
+ protected _computedClass = computed(() =>
18
+ hlm('flex flex-col space-y-1.5 text-center sm:text-left', this.userClass()),
19
+ );
26
20
  }
@@ -1,7 +1,10 @@
1
- import { computed, Directive, effect, Input, signal } from '@angular/core';
1
+ import { computed, Directive, effect, input } from '@angular/core';
2
2
  import { hlm, injectCustomClassSettable } from '@spartan-ng/ui-core';
3
3
  import { ClassValue } from 'clsx';
4
4
 
5
+ export const hlmDialogOverlayClass =
6
+ 'bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0';
7
+
5
8
  @Directive({
6
9
  selector: '[hlmDialogOverlay],brn-dialog-overlay[hlm]',
7
10
  standalone: true,
@@ -9,19 +12,12 @@ import { ClassValue } from 'clsx';
9
12
  export class HlmDialogOverlayDirective {
10
13
  private readonly _classSettable = injectCustomClassSettable({ optional: true, host: true });
11
14
 
12
- private readonly _userCls = signal<ClassValue>('');
13
- protected readonly _computedClass = computed(() =>
14
- hlm(
15
- 'bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',
16
- this._userCls(),
17
- ),
18
- );
19
- @Input()
20
- set class(userCls: ClassValue) {
21
- this._userCls.set(userCls);
22
- }
15
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
16
+ protected readonly _computedClass = computed(() => hlm(hlmDialogOverlayClass, this.userClass()));
23
17
 
24
18
  constructor() {
25
- effect(() => this._classSettable?.setClassToCustomElement(this._computedClass()));
19
+ effect(() => {
20
+ this._classSettable?.setClassToCustomElement(this._computedClass());
21
+ });
26
22
  }
27
23
  }
@@ -1,4 +1,4 @@
1
- import { computed, Directive, Input, signal } from '@angular/core';
1
+ import { computed, Directive, input } from '@angular/core';
2
2
  import { hlm } from '@spartan-ng/ui-core';
3
3
  import { BrnDialogTitleDirective } from '@spartan-ng/ui-dialog-brain';
4
4
  import { ClassValue } from 'clsx';
@@ -12,14 +12,6 @@ import { ClassValue } from 'clsx';
12
12
  hostDirectives: [BrnDialogTitleDirective],
13
13
  })
14
14
  export class HlmDialogTitleDirective {
15
- private readonly _userCls = signal<ClassValue>('');
16
- @Input()
17
- set class(userCls: ClassValue) {
18
- this._userCls.set(userCls);
19
- }
20
-
21
- protected _computedClass = computed(() => this._generateClass());
22
- private _generateClass() {
23
- return hlm('text-lg font-semibold leading-none tracking-tight', this._userCls());
24
- }
15
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
16
+ protected _computedClass = computed(() => hlm('text-lg font-semibold leading-none tracking-tight', this.userClass()));
25
17
  }
@@ -1,5 +1,5 @@
1
1
  import { ChangeDetectionStrategy, Component, forwardRef, ViewEncapsulation } from '@angular/core';
2
- import { BrnDialogComponent, BrnDialogOverlayComponent, provideBrnDialog } from '@spartan-ng/ui-dialog-brain';
2
+ import { BrnDialogComponent, BrnDialogOverlayComponent } from '@spartan-ng/ui-dialog-brain';
3
3
  import { HlmDialogOverlayDirective } from './hlm-dialog-overlay.directive';
4
4
 
5
5
  @Component({
@@ -7,7 +7,6 @@ import { HlmDialogOverlayDirective } from './hlm-dialog-overlay.directive';
7
7
  standalone: true,
8
8
  imports: [BrnDialogComponent, BrnDialogOverlayComponent, HlmDialogOverlayDirective],
9
9
  providers: [
10
- provideBrnDialog(),
11
10
  {
12
11
  provide: BrnDialogComponent,
13
12
  useExisting: forwardRef(() => HlmDialogComponent),
@@ -0,0 +1,35 @@
1
+ import { ComponentType } from '@angular/cdk/portal';
2
+ import { inject, Injectable, TemplateRef } from '@angular/core';
3
+ import {
4
+ BrnDialogOptions,
5
+ BrnDialogService,
6
+ cssClassesToArray,
7
+ DEFAULT_BRN_DIALOG_OPTIONS,
8
+ } from '@spartan-ng/ui-dialog-brain';
9
+ import { HlmDialogContentComponent } from './hlm-dialog-content.component';
10
+ import { hlmDialogOverlayClass } from './hlm-dialog-overlay.directive';
11
+
12
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ export type HlmDialogOptions<DialogContext = any> = BrnDialogOptions & {
14
+ contentClass?: string;
15
+ context?: DialogContext;
16
+ };
17
+
18
+ @Injectable({
19
+ providedIn: 'root',
20
+ })
21
+ export class HlmDialogService {
22
+ private readonly _brnDialogService = inject(BrnDialogService);
23
+
24
+ public open(component: ComponentType<unknown> | TemplateRef<unknown>, options?: Partial<HlmDialogOptions>) {
25
+ options = {
26
+ ...DEFAULT_BRN_DIALOG_OPTIONS,
27
+ closeDelay: 100,
28
+ ...(options ?? {}),
29
+ backdropClass: cssClassesToArray(`${hlmDialogOverlayClass} ${options?.backdropClass ?? ''}`),
30
+ context: { ...options?.context, $component: component, $dynamicComponentClass: options?.contentClass },
31
+ };
32
+
33
+ return this._brnDialogService.open(HlmDialogContentComponent, undefined, options.context, options);
34
+ }
35
+ }
@@ -1,4 +1,4 @@
1
- import { Component, computed, effect, ElementRef, inject, Input, Renderer2, signal } from '@angular/core';
1
+ import { Component, computed, effect, ElementRef, inject, input, Renderer2, signal } from '@angular/core';
2
2
  import { hlm, injectExposedSideProvider, injectExposesStateProvider } from '@spartan-ng/ui-core';
3
3
  import { ClassValue } from 'clsx';
4
4
 
@@ -16,8 +16,6 @@ export class HlmHoverCardContentComponent {
16
16
  private readonly _renderer = inject(Renderer2);
17
17
  private readonly _element = inject(ElementRef);
18
18
 
19
- private _inputs: ClassValue = '';
20
-
21
19
  public readonly state = injectExposesStateProvider({ host: true }).state ?? signal('closed').asReadonly();
22
20
  public readonly side = injectExposedSideProvider({ host: true }).side ?? signal('bottom').asReadonly();
23
21
 
@@ -28,17 +26,12 @@ export class HlmHoverCardContentComponent {
28
26
  });
29
27
  }
30
28
 
31
- private readonly _userCls = signal<ClassValue>('');
29
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
32
30
  protected readonly _computedClass = computed(() =>
33
31
  hlm(
34
32
  'z-50 w-64 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md outline-none',
35
33
  'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
36
- this._inputs,
34
+ this.userClass(),
37
35
  ),
38
36
  );
39
-
40
- @Input()
41
- set class(userCls: ClassValue) {
42
- this._userCls.set(userCls);
43
- }
44
37
  }
@@ -1,7 +1,7 @@
1
1
  import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
2
  import { By } from '@angular/platform-browser';
3
3
  import { NgIconComponent, provideIcons } from '@ng-icons/core';
4
- import { radixCheck } from '@ng-icons/radix-icons';
4
+ import { lucideCheck } from '@ng-icons/lucide';
5
5
  import { RenderResult, render } from '@testing-library/angular';
6
6
  import { HlmIconComponent } from './hlm-icon.component';
7
7
 
@@ -10,9 +10,9 @@ import { HlmIconComponent } from './hlm-icon.component';
10
10
  standalone: true,
11
11
  changeDetection: ChangeDetectionStrategy.OnPush,
12
12
  imports: [HlmIconComponent],
13
- providers: [provideIcons({ radixCheck })],
13
+ providers: [provideIcons({ lucideCheck })],
14
14
  template: `
15
- <hlm-icon class="test" ngIconClass="test2" name="radixCheck" [size]="size" color="red" strokeWidth="2" />
15
+ <hlm-icon class="test" ngIconClass="test2" name="lucideCheck" [size]="size" color="red" strokeWidth="2" />
16
16
  `,
17
17
  })
18
18
  class HlmMockComponent {
@@ -81,11 +81,11 @@ export class HlmIconComponent implements OnDestroy {
81
81
 
82
82
  protected readonly _computedClass = computed(() => {
83
83
  const size: IconSize = this._size();
84
+ const hostClasses = this._hostClasses();
85
+ const userCls = this.userCls();
84
86
  const variant = isDefinedSize(size) ? size : 'none';
85
- const hostClasses =
86
- variant === 'none' ? this._hostClasses().replace(TAILWIND_H_W_PATTERN, '') : this._hostClasses();
87
-
88
- return hlm(iconVariants({ variant }), this.userCls(), hostClasses);
87
+ const classes = variant === 'none' && size === 'none' ? hostClasses : hostClasses.replace(TAILWIND_H_W_PATTERN, '');
88
+ return hlm(iconVariants({ variant }), userCls, classes);
89
89
  });
90
90
 
91
91
  constructor() {
@@ -1,4 +1,4 @@
1
- import { computed, Directive, Input, signal } from '@angular/core';
1
+ import { computed, Directive, input } from '@angular/core';
2
2
  import { hlm } from '@spartan-ng/ui-core';
3
3
  import { cva, VariantProps } from 'class-variance-authority';
4
4
  import { ClassValue } from 'clsx';
@@ -17,14 +17,6 @@ export type InputErrorVariants = VariantProps<typeof inputErrorVariants>;
17
17
  },
18
18
  })
19
19
  export class HlmInputErrorDirective {
20
- private readonly _userCls = signal<ClassValue>('');
21
- @Input()
22
- set class(userCls: ClassValue) {
23
- this._userCls.set(userCls);
24
- }
25
-
26
- protected _computedClass = computed(() => this._generateClass());
27
- private _generateClass() {
28
- return hlm(inputErrorVariants(), this._userCls());
29
- }
20
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
21
+ protected _computedClass = computed(() => hlm(inputErrorVariants(), this.userClass()));
30
22
  }
@@ -1,4 +1,4 @@
1
- import { computed, Directive, Input, signal } from '@angular/core';
1
+ import { computed, Directive, Input, input, signal } from '@angular/core';
2
2
  import { hlm } from '@spartan-ng/ui-core';
3
3
  import { cva, VariantProps } from 'class-variance-authority';
4
4
  import { ClassValue } from 'clsx';
@@ -45,13 +45,8 @@ export class HlmInputDirective {
45
45
  this._error.set(value);
46
46
  }
47
47
 
48
- private readonly _userCls = signal<ClassValue>('');
49
- @Input()
50
- set class(userCls: ClassValue) {
51
- this._userCls.set(userCls);
52
- }
53
- protected _computedClass = computed(() => this._generateClass());
54
- private _generateClass() {
55
- return hlm(inputVariants({ size: this._size(), error: this._error() }), this._userCls());
56
- }
48
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
49
+ protected _computedClass = computed(() =>
50
+ hlm(inputVariants({ size: this._size(), error: this._error() }), this.userClass()),
51
+ );
57
52
  }
@@ -1,11 +1,11 @@
1
- import { computed, Directive, inject, Input, signal } from '@angular/core';
1
+ import { computed, Directive, inject, Input, input, signal } from '@angular/core';
2
2
  import { hlm } from '@spartan-ng/ui-core';
3
3
  import { BrnLabelDirective } from '@spartan-ng/ui-label-brain';
4
4
  import { cva, VariantProps } from 'class-variance-authority';
5
5
  import { ClassValue } from 'clsx';
6
6
 
7
7
  export const labelVariants = cva(
8
- 'text-sm font-medium leading-none [&:has([hlmInput]:disabled)]:cursor-not-allowed [&:has([hlmInput]:disabled)]:opacity-70',
8
+ 'text-sm font-medium leading-none [&>[hlmInput]]:my-1 [&:has([hlmInput]:disabled)]:cursor-not-allowed [&:has([hlmInput]:disabled)]:opacity-70',
9
9
  {
10
10
  variants: {
11
11
  variant: {
@@ -45,6 +45,7 @@ export type LabelVariants = VariantProps<typeof labelVariants>;
45
45
  export class HlmLabelDirective {
46
46
  private readonly _brn = inject(BrnLabelDirective, { host: true });
47
47
 
48
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
48
49
  protected readonly _computedClass = computed(() =>
49
50
  hlm(
50
51
  labelVariants({
@@ -52,7 +53,7 @@ export class HlmLabelDirective {
52
53
  error: this._error(),
53
54
  disabled: this._brn?.dataDisabled() ?? 'auto',
54
55
  }),
55
- this._userCls(),
56
+ this.userClass(),
56
57
  ),
57
58
  );
58
59
 
@@ -67,11 +68,4 @@ export class HlmLabelDirective {
67
68
  set error(value: LabelVariants['error']) {
68
69
  this._error.set(value);
69
70
  }
70
-
71
- private readonly _userCls = signal<ClassValue>('');
72
-
73
- @Input()
74
- set class(userCls: ClassValue) {
75
- this._userCls.set(userCls);
76
- }
77
71
  }
@@ -1,4 +1,4 @@
1
- import { computed, Directive, Input, signal } from '@angular/core';
1
+ import { computed, Directive, input } from '@angular/core';
2
2
  import { hlm } from '@spartan-ng/ui-core';
3
3
  import { BrnMenuItemDirective } from '@spartan-ng/ui-menu-brain';
4
4
  import { ClassValue } from 'clsx';
@@ -12,17 +12,11 @@ import { ClassValue } from 'clsx';
12
12
  hostDirectives: [BrnMenuItemDirective],
13
13
  })
14
14
  export class HlmMenuBarItemDirective {
15
- private readonly _userCls = signal<ClassValue>('');
16
- @Input()
17
- set class(userCls: ClassValue) {
18
- this._userCls.set(userCls);
19
- }
20
-
21
- protected _computedClass = computed(() => this._generateClass());
22
- private _generateClass() {
23
- return hlm(
15
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
16
+ protected _computedClass = computed(() =>
17
+ hlm(
24
18
  'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground aria-expanded:bg-accent aria-expanded:text-accent-foreground',
25
- this._userCls(),
26
- );
27
- }
19
+ this.userClass(),
20
+ ),
21
+ );
28
22
  }
@@ -1,4 +1,4 @@
1
- import { Component, computed, Input, signal } from '@angular/core';
1
+ import { Component, computed, input } from '@angular/core';
2
2
  import { hlm } from '@spartan-ng/ui-core';
3
3
  import { BrnMenuBarDirective } from '@spartan-ng/ui-menu-brain';
4
4
  import { ClassValue } from 'clsx';
@@ -13,14 +13,8 @@ import { ClassValue } from 'clsx';
13
13
  template: '<ng-content/>',
14
14
  })
15
15
  export class HlmMenuBarComponent {
16
- private readonly _userCls = signal<ClassValue>('');
17
- @Input()
18
- set class(userCls: ClassValue) {
19
- this._userCls.set(userCls);
20
- }
21
-
22
- protected _computedClass = computed(() => this._generateClass());
23
- private _generateClass() {
24
- return hlm('border-border flex h-10 items-center space-x-1 rounded-md border bg-background p-1', this._userCls());
25
- }
16
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
17
+ protected _computedClass = computed(() =>
18
+ hlm('border-border flex h-10 items-center space-x-1 rounded-md border bg-background p-1', this.userClass()),
19
+ );
26
20
  }
@@ -1,5 +1,5 @@
1
- import { Component, computed, Input, signal } from '@angular/core';
2
- import { radixCheck } from '@ng-icons/radix-icons';
1
+ import { Component, computed, input } from '@angular/core';
2
+ import { lucideCheck } from '@ng-icons/lucide';
3
3
  import { hlm } from '@spartan-ng/ui-core';
4
4
  import { HlmIconComponent, provideIcons } from '@spartan-ng/ui-icon-helm';
5
5
  import { ClassValue } from 'clsx';
@@ -7,24 +7,22 @@ import { ClassValue } from 'clsx';
7
7
  @Component({
8
8
  selector: 'hlm-menu-item-check',
9
9
  standalone: true,
10
- providers: [provideIcons({ radixCheck })],
10
+ providers: [provideIcons({ lucideCheck })],
11
11
  imports: [HlmIconComponent],
12
12
  template: `
13
- <hlm-icon size="none" class="h-full w-full" name="radixCheck" />
13
+ <!-- Using 1rem for size to mimick h-4 w-4 -->
14
+ <hlm-icon size="1rem" name="lucideCheck" />
14
15
  `,
15
16
  host: {
16
17
  '[class]': '_computedClass()',
17
18
  },
18
19
  })
19
20
  export class HlmMenuItemCheckComponent {
20
- private readonly _userCls = signal<ClassValue>('');
21
- @Input()
22
- set class(userCls: ClassValue) {
23
- this._userCls.set(userCls);
24
- }
25
-
26
- protected _computedClass = computed(() => this._generateClass());
27
- private _generateClass() {
28
- return hlm('group-[.checked]:opacity-100 opacity-0 inline-block mr-2 h-5 w-5', this._userCls());
29
- }
21
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
22
+ protected _computedClass = computed(() =>
23
+ hlm(
24
+ 'group-[.checked]:opacity-100 opacity-0 absolute left-2 flex h-3.5 w-3.5 items-center justify-center',
25
+ this.userClass(),
26
+ ),
27
+ );
30
28
  }
@@ -1,4 +1,4 @@
1
- import { booleanAttribute, computed, Directive, Input, signal } from '@angular/core';
1
+ import { computed, Directive, input } from '@angular/core';
2
2
  import { hlm } from '@spartan-ng/ui-core';
3
3
  import { BrnMenuItemCheckboxDirective } from '@spartan-ng/ui-menu-brain';
4
4
  import { ClassValue } from 'clsx';
@@ -18,24 +18,11 @@ import { ClassValue } from 'clsx';
18
18
  ],
19
19
  })
20
20
  export class HlmMenuItemCheckboxDirective {
21
- private readonly _inset = signal<ClassValue>(false);
22
-
23
- private readonly _userCls = signal<ClassValue>('');
24
- @Input()
25
- set class(userCls: ClassValue) {
26
- this._userCls.set(userCls);
27
- }
28
- @Input({ transform: booleanAttribute })
29
- set inset(value: boolean) {
30
- this._inset.set(value);
31
- }
32
-
33
- protected _computedClass = computed(() => this._generateClass());
34
- private _generateClass() {
35
- return hlm(
36
- 'group w-full relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground disabled:pointer-events-none disabled:opacity-50',
37
- this._inset() && 'pl-10',
38
- this._userCls(),
39
- );
40
- }
21
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
22
+ protected _computedClass = computed(() =>
23
+ hlm(
24
+ 'group w-full relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground disabled:pointer-events-none disabled:opacity-50',
25
+ this.userClass(),
26
+ ),
27
+ );
41
28
  }
@@ -1,4 +1,4 @@
1
- import { computed, Directive, inject, Input, signal } from '@angular/core';
1
+ import { computed, Directive, inject, input } from '@angular/core';
2
2
  import { hlm } from '@spartan-ng/ui-core';
3
3
  import { HlmIconComponent } from '@spartan-ng/ui-icon-helm';
4
4
  import { ClassValue } from 'clsx';
@@ -17,14 +17,7 @@ export class HlmMenuItemIconDirective {
17
17
  if (!this._menuIcon) return;
18
18
  this._menuIcon.size = 'none';
19
19
  }
20
- private readonly _userCls = signal<ClassValue>('');
21
- @Input()
22
- set class(userCls: ClassValue) {
23
- this._userCls.set(userCls);
24
- }
25
20
 
26
- protected _computedClass = computed(() => this._generateClass());
27
- private _generateClass() {
28
- return hlm('mr-2 h-4 w-4', this._userCls());
29
- }
21
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
22
+ protected _computedClass = computed(() => hlm('mr-2 h-4 w-4', this.userClass()));
30
23
  }
@@ -1,5 +1,5 @@
1
- import { Component, computed, Input, signal } from '@angular/core';
2
- import { radixDotFilled } from '@ng-icons/radix-icons';
1
+ import { Component, computed, input } from '@angular/core';
2
+ import { lucideCircle } from '@ng-icons/lucide';
3
3
  import { hlm } from '@spartan-ng/ui-core';
4
4
  import { HlmIconComponent, provideIcons } from '@spartan-ng/ui-icon-helm';
5
5
  import { ClassValue } from 'clsx';
@@ -7,24 +7,22 @@ import { ClassValue } from 'clsx';
7
7
  @Component({
8
8
  selector: 'hlm-menu-item-radio',
9
9
  standalone: true,
10
- providers: [provideIcons({ radixDotFilled })],
10
+ providers: [provideIcons({ lucideCircle })],
11
11
  imports: [HlmIconComponent],
12
12
  template: `
13
- <hlm-icon size="none" class="h-full w-full" name="radixDotFilled" />
13
+ <!-- Using 0.5rem for size to mimick h-2 w-2 -->
14
+ <hlm-icon size="0.5rem" class="*:*:fill-current" name="lucideCircle" />
14
15
  `,
15
16
  host: {
16
17
  '[class]': '_computedClass()',
17
18
  },
18
19
  })
19
20
  export class HlmMenuItemRadioComponent {
20
- private readonly _userCls = signal<ClassValue>('');
21
- @Input()
22
- set class(userCls: ClassValue) {
23
- this._userCls.set(userCls);
24
- }
25
-
26
- protected _computedClass = computed(() => this._generateClass());
27
- private _generateClass() {
28
- return hlm('group-[.checked]:opacity-100 opacity-0 inline-block mr-2 h-5 w-5', this._userCls());
29
- }
21
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
22
+ protected _computedClass = computed(() =>
23
+ hlm(
24
+ 'group-[.checked]:opacity-100 opacity-0 absolute left-2 flex h-3.5 w-3.5 items-center justify-center',
25
+ this.userClass(),
26
+ ),
27
+ );
30
28
  }
@@ -1,4 +1,4 @@
1
- import { booleanAttribute, computed, Directive, Input, signal } from '@angular/core';
1
+ import { computed, Directive, input } from '@angular/core';
2
2
  import { hlm } from '@spartan-ng/ui-core';
3
3
  import { BrnMenuItemRadioDirective } from '@spartan-ng/ui-menu-brain';
4
4
  import { ClassValue } from 'clsx';
@@ -18,24 +18,11 @@ import { ClassValue } from 'clsx';
18
18
  ],
19
19
  })
20
20
  export class HlmMenuItemRadioDirective {
21
- private readonly _inset = signal<ClassValue>(false);
22
-
23
- private readonly _userCls = signal<ClassValue>('');
24
- @Input()
25
- set class(userCls: ClassValue) {
26
- this._userCls.set(userCls);
27
- }
28
- @Input({ transform: booleanAttribute })
29
- set inset(value: boolean) {
30
- this._inset.set(value);
31
- }
32
-
33
- protected _computedClass = computed(() => this._generateClass());
34
- private _generateClass() {
35
- return hlm(
36
- 'group w-full relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground disabled:pointer-events-none disabled:opacity-50',
37
- this._inset() && 'pl-10',
38
- this._userCls(),
39
- );
40
- }
21
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
22
+ protected _computedClass = computed(() =>
23
+ hlm(
24
+ 'group w-full relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground disabled:pointer-events-none disabled:opacity-50',
25
+ this.userClass(),
26
+ ),
27
+ );
41
28
  }
@@ -1,5 +1,5 @@
1
- import { Component, Input, computed, signal } from '@angular/core';
2
- import { radixChevronRight } from '@ng-icons/radix-icons';
1
+ import { Component, computed, input } from '@angular/core';
2
+ import { lucideChevronRight } from '@ng-icons/lucide';
3
3
  import { hlm } from '@spartan-ng/ui-core';
4
4
  import { HlmIconComponent, provideIcons } from '@spartan-ng/ui-icon-helm';
5
5
  import { ClassValue } from 'clsx';
@@ -7,24 +7,16 @@ import { ClassValue } from 'clsx';
7
7
  @Component({
8
8
  selector: 'hlm-menu-item-sub-indicator',
9
9
  standalone: true,
10
- providers: [provideIcons({ radixChevronRight })],
10
+ providers: [provideIcons({ lucideChevronRight })],
11
11
  imports: [HlmIconComponent],
12
12
  template: `
13
- <hlm-icon size="none" class="h-full w-full" name="radixChevronRight" />
13
+ <hlm-icon size="none" class="h-full w-full" name="lucideChevronRight" />
14
14
  `,
15
15
  host: {
16
16
  '[class]': '_computedClass()',
17
17
  },
18
18
  })
19
19
  export class HlmMenuItemSubIndicatorComponent {
20
- private readonly _userCls = signal<ClassValue>('');
21
- @Input()
22
- set class(userCls: ClassValue) {
23
- this._userCls.set(userCls);
24
- }
25
-
26
- protected _computedClass = computed(() => this._generateClass());
27
- private _generateClass() {
28
- return hlm('inline-block ml-auto h-4 w-4', this._userCls());
29
- }
20
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
21
+ protected _computedClass = computed(() => hlm('inline-block ml-auto h-4 w-4', this.userClass()));
30
22
  }