@spartan-ng/cli 0.0.1-alpha.533 → 0.0.1-alpha.535

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 (109) hide show
  1. package/package.json +1 -1
  2. package/src/generators/base/generator.js +1 -1
  3. package/src/generators/base/generator.js.map +1 -1
  4. package/src/generators/base/lib/build-dependency-array.d.ts +3 -3
  5. package/src/generators/base/lib/build-dependency-array.js +4 -3
  6. package/src/generators/base/lib/build-dependency-array.js.map +1 -1
  7. package/src/generators/base/versions.d.ts +4 -5
  8. package/src/generators/base/versions.js +5 -6
  9. package/src/generators/base/versions.js.map +1 -1
  10. package/src/generators/theme/__snapshots__/generator.spec.ts.snap +142 -376
  11. package/src/generators/theme/generator.js +1 -1
  12. package/src/generators/theme/generator.js.map +1 -1
  13. package/src/generators/theme/libs/add-theme-to-application-styles.d.ts +1 -1
  14. package/src/generators/theme/libs/add-theme-to-application-styles.js +19 -14
  15. package/src/generators/theme/libs/add-theme-to-application-styles.js.map +1 -1
  16. package/src/generators/theme/libs/colors.d.ts +5 -10
  17. package/src/generators/theme/libs/colors.js +322 -195
  18. package/src/generators/theme/libs/colors.js.map +1 -1
  19. package/src/generators/ui/libs/ui-accordion-helm/files/lib/hlm-accordion-content.ts.template +11 -11
  20. package/src/generators/ui/libs/ui-accordion-helm/files/lib/hlm-accordion-item.ts.template +1 -0
  21. package/src/generators/ui/libs/ui-accordion-helm/files/lib/hlm-accordion-trigger.ts.template +1 -1
  22. package/src/generators/ui/libs/ui-autocomplete-helm/files/lib/hlm-autocomplete-item.ts.template +1 -1
  23. package/src/generators/ui/libs/ui-autocomplete-helm/files/lib/hlm-autocomplete-list.ts.template +1 -1
  24. package/src/generators/ui/libs/ui-autocomplete-helm/files/lib/hlm-autocomplete-search-input.ts.template +1 -1
  25. package/src/generators/ui/libs/ui-autocomplete-helm/files/lib/hlm-autocomplete-search.ts.template +1 -1
  26. package/src/generators/ui/libs/ui-autocomplete-helm/files/lib/hlm-autocomplete.ts.template +14 -27
  27. package/src/generators/ui/libs/ui-badge-helm/files/lib/hlm-badge.ts.template +1 -1
  28. package/src/generators/ui/libs/ui-breadcrumb-helm/files/lib/hlm-breadcrumb-list.ts.template +1 -1
  29. package/src/generators/ui/libs/ui-button-group-helm/files/lib/hlm-button-group-separator.ts.template +1 -1
  30. package/src/generators/ui/libs/ui-button-group-helm/files/lib/hlm-button-group-text.ts.template +1 -1
  31. package/src/generators/ui/libs/ui-button-helm/files/lib/hlm-button.ts.template +2 -2
  32. package/src/generators/ui/libs/ui-calendar-helm/files/lib/hlm-calendar-multi.ts.template +4 -35
  33. package/src/generators/ui/libs/ui-calendar-helm/files/lib/hlm-calendar-range.ts.template +4 -35
  34. package/src/generators/ui/libs/ui-calendar-helm/files/lib/hlm-calendar.ts.template +4 -38
  35. package/src/generators/ui/libs/ui-card-helm/files/lib/hlm-card-footer.ts.template +1 -1
  36. package/src/generators/ui/libs/ui-card-helm/files/lib/hlm-card-header.ts.template +1 -1
  37. package/src/generators/ui/libs/ui-card-helm/files/lib/hlm-card-title.ts.template +1 -1
  38. package/src/generators/ui/libs/ui-carousel-helm/files/lib/hlm-carousel-next.ts.template +1 -1
  39. package/src/generators/ui/libs/ui-carousel-helm/files/lib/hlm-carousel-previous.ts.template +1 -1
  40. package/src/generators/ui/libs/ui-checkbox-helm/files/lib/hlm-checkbox.ts.template +27 -26
  41. package/src/generators/ui/libs/ui-command-helm/files/lib/hlm-command-dialog-close-button.ts.template +1 -1
  42. package/src/generators/ui/libs/ui-command-helm/files/lib/hlm-command-item.ts.template +1 -1
  43. package/src/generators/ui/libs/ui-command-helm/files/lib/hlm-command-list.ts.template +1 -1
  44. package/src/generators/ui/libs/ui-date-picker-helm/files/lib/hlm-date-picker-multi.ts.template +2 -2
  45. package/src/generators/ui/libs/ui-date-picker-helm/files/lib/hlm-date-picker.ts.template +2 -2
  46. package/src/generators/ui/libs/ui-date-picker-helm/files/lib/hlm-date-range-picker.ts.template +2 -2
  47. package/src/generators/ui/libs/ui-dialog-helm/files/lib/hlm-dialog-close.ts.template +1 -1
  48. package/src/generators/ui/libs/ui-dialog-helm/files/lib/hlm-dialog-title.ts.template +1 -1
  49. package/src/generators/ui/libs/ui-empty-helm/files/lib/hlm-empty-content.ts.template +1 -1
  50. package/src/generators/ui/libs/ui-empty-helm/files/lib/hlm-empty.ts.template +1 -1
  51. package/src/generators/ui/libs/ui-input-group-helm/files/lib/hlm-input-group-addon.ts.template +3 -3
  52. package/src/generators/ui/libs/ui-input-group-helm/files/lib/hlm-input-group-text.ts.template +1 -1
  53. package/src/generators/ui/libs/ui-input-group-helm/files/lib/hlm-input-group.ts.template +1 -1
  54. package/src/generators/ui/libs/ui-input-helm/files/lib/hlm-input.ts.template +1 -1
  55. package/src/generators/ui/libs/ui-input-otp-helm/files/lib/hlm-input-otp-slot.ts.template +1 -1
  56. package/src/generators/ui/libs/ui-input-otp-helm/files/lib/hlm-input-otp.ts.template +1 -1
  57. package/src/generators/ui/libs/ui-item-helm/files/index.ts.template +35 -0
  58. package/src/generators/ui/libs/ui-item-helm/files/lib/hlm-item-actions.ts.template +15 -0
  59. package/src/generators/ui/libs/ui-item-helm/files/lib/hlm-item-content.ts.template +17 -0
  60. package/src/generators/ui/libs/ui-item-helm/files/lib/hlm-item-description.ts.template +21 -0
  61. package/src/generators/ui/libs/ui-item-helm/files/lib/hlm-item-footer.ts.template +17 -0
  62. package/src/generators/ui/libs/ui-item-helm/files/lib/hlm-item-group.ts.template +12 -0
  63. package/src/generators/ui/libs/ui-item-helm/files/lib/hlm-item-header.ts.template +17 -0
  64. package/src/generators/ui/libs/ui-item-helm/files/lib/hlm-item-media.ts.template +41 -0
  65. package/src/generators/ui/libs/ui-item-helm/files/lib/hlm-item-separator.ts.template +15 -0
  66. package/src/generators/ui/libs/ui-item-helm/files/lib/hlm-item-title.ts.template +17 -0
  67. package/src/generators/ui/libs/ui-item-helm/files/lib/hlm-item-token.ts.template +41 -0
  68. package/src/generators/ui/libs/ui-item-helm/files/lib/hlm-item.ts.template +49 -0
  69. package/src/generators/ui/libs/ui-item-helm/generator.d.ts +3 -0
  70. package/src/generators/ui/libs/ui-item-helm/generator.js +14 -0
  71. package/src/generators/ui/libs/ui-item-helm/generator.js.map +1 -0
  72. package/src/generators/ui/libs/ui-kbd-helm/files/lib/hlm-kbd.ts.template +1 -1
  73. package/src/generators/ui/libs/ui-label-helm/files/lib/hlm-label.ts.template +1 -1
  74. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-bar-item.ts.template +1 -1
  75. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-bar.ts.template +1 -1
  76. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-item-checkbox.ts.template +1 -1
  77. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-item-radio.ts.template +1 -1
  78. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-item.ts.template +1 -1
  79. package/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu.ts.template +1 -1
  80. package/src/generators/ui/libs/ui-pagination-helm/files/lib/hlm-numbered-pagination-query-params.ts.template +1 -1
  81. package/src/generators/ui/libs/ui-pagination-helm/files/lib/hlm-numbered-pagination.ts.template +1 -1
  82. package/src/generators/ui/libs/ui-popover-helm/files/lib/hlm-popover-close.ts.template +1 -1
  83. package/src/generators/ui/libs/ui-radio-group-helm/files/lib/hlm-radio-indicator.ts.template +1 -1
  84. package/src/generators/ui/libs/ui-select-helm/files/lib/hlm-select-option.ts.template +1 -1
  85. package/src/generators/ui/libs/ui-select-helm/files/lib/hlm-select-trigger.ts.template +1 -1
  86. package/src/generators/ui/libs/ui-separator-helm/files/lib/hlm-separator.ts.template +4 -6
  87. package/src/generators/ui/libs/ui-sheet-helm/files/lib/hlm-sheet-close.ts.template +1 -1
  88. package/src/generators/ui/libs/ui-sidebar-helm/files/lib/hlm-sidebar-group-action.ts.template +1 -1
  89. package/src/generators/ui/libs/ui-sidebar-helm/files/lib/hlm-sidebar-group-label.ts.template +1 -1
  90. package/src/generators/ui/libs/ui-sidebar-helm/files/lib/hlm-sidebar-menu-action.ts.template +1 -1
  91. package/src/generators/ui/libs/ui-sidebar-helm/files/lib/hlm-sidebar-menu-badge.ts.template +1 -1
  92. package/src/generators/ui/libs/ui-sidebar-helm/files/lib/hlm-sidebar-menu-button.ts.template +1 -1
  93. package/src/generators/ui/libs/ui-sidebar-helm/files/lib/hlm-sidebar-rail.ts.template +1 -1
  94. package/src/generators/ui/libs/ui-slider-helm/files/lib/hlm-slider.ts.template +2 -2
  95. package/src/generators/ui/libs/ui-switch-helm/files/lib/hlm-switch-thumb.ts.template +1 -1
  96. package/src/generators/ui/libs/ui-switch-helm/files/lib/hlm-switch.ts.template +1 -1
  97. package/src/generators/ui/libs/ui-tabs-helm/files/lib/hlm-tabs-content.ts.template +1 -1
  98. package/src/generators/ui/libs/ui-tabs-helm/files/lib/hlm-tabs-trigger.ts.template +1 -1
  99. package/src/generators/ui/libs/ui-textarea-helm/files/lib/hlm-textarea.ts.template +1 -1
  100. package/src/generators/ui/libs/ui-toggle-group-helm/files/lib/hlm-toggle-group.ts.template +1 -1
  101. package/src/generators/ui/libs/ui-toggle-group-helm/files/lib/hlm-toggle-item.ts.template +1 -1
  102. package/src/generators/ui/libs/ui-toggle-helm/files/lib/hlm-toggle.ts.template +1 -1
  103. package/src/generators/ui/primitive-deps.js +3 -2
  104. package/src/generators/ui/primitive-deps.js.map +1 -1
  105. package/src/generators/ui/primitives.d.ts +1 -1
  106. package/src/generators/ui/supported-ui-libraries.json +41 -32
  107. package/src/utils/get-tailwind-version.d.ts +2 -0
  108. package/src/utils/get-tailwind-version.js +18 -0
  109. package/src/utils/get-tailwind-version.js.map +1 -0
@@ -22,6 +22,6 @@ export class HlmCommandList {
22
22
 
23
23
  /** The styles to apply */
24
24
  protected readonly _computedClass = computed(() =>
25
- hlm('max-h-[300px] overflow-y-auto overflow-x-hidden', this.userClass()),
25
+ hlm('max-h-[300px] overflow-x-hidden overflow-y-auto', this.userClass()),
26
26
  );
27
27
  }
@@ -82,8 +82,8 @@ export class HlmDatePickerMulti<T> implements ControlValueAccessor {
82
82
  public readonly userClass = input<ClassValue>('', { alias: 'class' });
83
83
  protected readonly _computedClass = computed(() =>
84
84
  hlm(
85
- 'ring-offset-background border-input bg-background hover:bg-accent dark:bg-input/30 dark:hover:bg-input/50 hover:text-accent-foreground inline-flex h-9 w-[280px] cursor-default items-center justify-between gap-2 whitespace-nowrap rounded-md border px-3 py-2 text-left text-sm font-normal transition-all disabled:pointer-events-none disabled:opacity-50',
86
- 'focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2',
85
+ 'ring-offset-background border-input bg-background hover:bg-accent dark:bg-input/30 dark:hover:bg-input/50 hover:text-accent-foreground inline-flex h-9 w-[280px] cursor-default items-center justify-between gap-2 rounded-md border px-3 py-2 text-left text-sm font-normal whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50',
86
+ 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none',
87
87
  'disabled:pointer-events-none disabled:opacity-50',
88
88
  '[&_ng-icon]:pointer-events-none [&_ng-icon]:shrink-0',
89
89
  this.userClass(),
@@ -79,8 +79,8 @@ export class HlmDatePicker<T> implements ControlValueAccessor {
79
79
  public readonly userClass = input<ClassValue>('', { alias: 'class' });
80
80
  protected readonly _computedClass = computed(() =>
81
81
  hlm(
82
- 'ring-offset-background border-input bg-background hover:bg-accent dark:bg-input/30 dark:hover:bg-input/50 hover:text-accent-foreground inline-flex h-9 w-[280px] cursor-default items-center justify-between gap-2 whitespace-nowrap rounded-md border px-3 py-2 text-left text-sm font-normal transition-all disabled:pointer-events-none disabled:opacity-50',
83
- 'focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2',
82
+ 'ring-offset-background border-input bg-background hover:bg-accent dark:bg-input/30 dark:hover:bg-input/50 hover:text-accent-foreground inline-flex h-9 w-[280px] cursor-default items-center justify-between gap-2 rounded-md border px-3 py-2 text-left text-sm font-normal whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50',
83
+ 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none',
84
84
  'disabled:pointer-events-none disabled:opacity-50',
85
85
  '[&_ng-icon]:pointer-events-none [&_ng-icon]:shrink-0',
86
86
  this.userClass(),
@@ -87,8 +87,8 @@ export class HlmDateRangePicker<T> implements ControlValueAccessor {
87
87
  public readonly userClass = input<ClassValue>('', { alias: 'class' });
88
88
  protected readonly _computedClass = computed(() =>
89
89
  hlm(
90
- 'ring-offset-background border-input bg-background hover:bg-accent dark:bg-input/30 dark:hover:bg-input/50 hover:text-accent-foreground inline-flex h-9 w-[280px] cursor-default items-center justify-between gap-2 whitespace-nowrap rounded-md border px-3 py-2 text-left text-sm font-normal transition-all disabled:pointer-events-none disabled:opacity-50',
91
- 'focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2',
90
+ 'ring-offset-background border-input bg-background hover:bg-accent dark:bg-input/30 dark:hover:bg-input/50 hover:text-accent-foreground inline-flex h-9 w-[280px] cursor-default items-center justify-between gap-2 rounded-md border px-3 py-2 text-left text-sm font-normal whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50',
91
+ 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none',
92
92
  'disabled:pointer-events-none disabled:opacity-50',
93
93
  '[&_ng-icon]:pointer-events-none [&_ng-icon]:shrink-0',
94
94
  this.userClass(),
@@ -13,7 +13,7 @@ export class HlmDialogClose {
13
13
 
14
14
  protected readonly _computedClass = computed(() =>
15
15
  hlm(
16
- 'ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground rounded-xs absolute right-4 top-4 flex items-center justify-center opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:pointer-events-none [&_ng-icon]:shrink-0',
16
+ 'ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 flex items-center justify-center rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none [&_ng-icon]:shrink-0',
17
17
  this.userClass(),
18
18
  ),
19
19
  );
@@ -12,5 +12,5 @@ import type { ClassValue } from 'clsx';
12
12
  })
13
13
  export class HlmDialogTitle {
14
14
  public readonly userClass = input<ClassValue>('', { alias: 'class' });
15
- protected readonly _computedClass = computed(() => hlm('text-lg font-semibold leading-none', this.userClass()));
15
+ protected readonly _computedClass = computed(() => hlm('text-lg leading-none font-semibold', this.userClass()));
16
16
  }
@@ -13,6 +13,6 @@ export class HlmEmptyContent {
13
13
  public readonly userClass = input<ClassValue>('', { alias: 'class' });
14
14
 
15
15
  protected readonly _computedClass = computed(() =>
16
- hlm('text-balancet flex w-full min-w-0 max-w-sm flex-col items-center gap-4 text-sm', this.userClass()),
16
+ hlm('text-balancet flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm', this.userClass()),
17
17
  );
18
18
  }
@@ -14,7 +14,7 @@ export class HlmEmpty {
14
14
 
15
15
  protected readonly _computedClass = computed(() =>
16
16
  hlm(
17
- 'flex min-w-0 flex-1 flex-col items-center justify-center gap-6 text-balance rounded-lg border-dashed p-6 text-center md:p-12',
17
+ 'flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12',
18
18
  this.userClass(),
19
19
  ),
20
20
  );
@@ -4,15 +4,15 @@ import { cva, type VariantProps } from 'class-variance-authority';
4
4
  import type { ClassValue } from 'clsx';
5
5
 
6
6
  const inputGroupAddonVariants = cva(
7
- "text-muted-foreground flex h-auto cursor-text select-none items-center justify-center gap-2 py-1.5 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>ng-icon:not([class*='size-'])]:size-4",
7
+ "text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>ng-icon:not([class*='size-'])]:size-4",
8
8
  {
9
9
  variants: {
10
10
  align: {
11
11
  'inline-start': 'order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]',
12
12
  'inline-end': 'order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]',
13
13
  'block-start':
14
- '[.border-b]:pb-3 order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5',
15
- 'block-end': '[.border-t]:pt-3 order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5',
14
+ 'order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5 [.border-b]:pb-3',
15
+ 'block-end': 'order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5 [.border-t]:pt-3',
16
16
  },
17
17
  },
18
18
  defaultVariants: {
@@ -13,7 +13,7 @@ export class HlmInputGroupText {
13
13
 
14
14
  protected readonly _computedClass = computed(() =>
15
15
  hlm(
16
- `text-muted-foreground flex items-center gap-2 text-sm [&_ng-icon:not([class*='size-'])]:size-4 [&_ng-icon]:pointer-events-none`,
16
+ `text-muted-foreground flex items-center gap-2 text-sm [&_ng-icon]:pointer-events-none [&_ng-icon:not([class*='size-'])]:size-4`,
17
17
  this.userClass(),
18
18
  ),
19
19
  );
@@ -15,7 +15,7 @@ export class HlmInputGroup {
15
15
 
16
16
  protected readonly _computedClass = computed(() =>
17
17
  hlm(
18
- 'group/input-group border-input dark:bg-input/30 shadow-xs relative flex w-full items-center rounded-md border outline-none transition-[color,box-shadow]',
18
+ 'group/input-group border-input dark:bg-input/30 relative flex w-full items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none',
19
19
  'h-9 min-w-0 has-[>textarea]:h-auto',
20
20
  // Variants based on alignment.
21
21
  'has-[>[data-align=inline-start]]:[&>input]:pl-2',
@@ -19,7 +19,7 @@ import { cva, type VariantProps } from 'class-variance-authority';
19
19
  import type { ClassValue } from 'clsx';
20
20
 
21
21
  export const inputVariants = cva(
22
- 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input shadow-xs focus-visible:border-ring focus-visible:ring-ring/50 flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base outline-none transition-[color,box-shadow] file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-[3px] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',
22
+ 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-[3px] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',
23
23
  {
24
24
  variants: {
25
25
  error: {
@@ -26,7 +26,7 @@ export class HlmInputOtpSlot {
26
26
 
27
27
  protected readonly _computedClass = computed(() =>
28
28
  hlm(
29
- 'dark:bg-input/30 border-input shadow-xs relative flex h-9 w-9 items-center justify-center border-y border-r text-sm outline-none transition-all first:rounded-l-md first:border-l last:rounded-r-md',
29
+ 'dark:bg-input/30 border-input relative flex h-9 w-9 items-center justify-center border-y border-r text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md',
30
30
  'has-[brn-input-otp-slot[data-active="true"]]:border-ring has-[brn-input-otp-slot[data-active="true"]]:ring-ring/50 has-[brn-input-otp-slot[data-active="true"]]:z-10 has-[brn-input-otp-slot[data-active="true"]]:ring-[3px]',
31
31
  this.userClass(),
32
32
  ),
@@ -12,6 +12,6 @@ export class HlmInputOtp {
12
12
  public readonly userClass = input<ClassValue>('', { alias: 'class' });
13
13
 
14
14
  protected readonly _computedClass = computed(() =>
15
- hlm('has-disabled:opacity-50 flex items-center gap-2', this.userClass()),
15
+ hlm('flex items-center gap-2 has-disabled:opacity-50', this.userClass()),
16
16
  );
17
17
  }
@@ -0,0 +1,35 @@
1
+ import { HlmItem } from './lib/hlm-item';
2
+ import { HlmItemActions } from './lib/hlm-item-actions';
3
+ import { HlmItemContent } from './lib/hlm-item-content';
4
+ import { HlmItemDescription } from './lib/hlm-item-description';
5
+ import { HlmItemFooter } from './lib/hlm-item-footer';
6
+ import { HlmItemGroup } from './lib/hlm-item-group';
7
+ import { HlmItemHeader } from './lib/hlm-item-header';
8
+ import { HlmItemMedia } from './lib/hlm-item-media';
9
+ import { HlmItemSeparator } from './lib/hlm-item-separator';
10
+ import { HlmItemTitle } from './lib/hlm-item-title';
11
+
12
+ export * from './lib/hlm-item';
13
+ export * from './lib/hlm-item-actions';
14
+ export * from './lib/hlm-item-content';
15
+ export * from './lib/hlm-item-description';
16
+ export * from './lib/hlm-item-footer';
17
+ export * from './lib/hlm-item-group';
18
+ export * from './lib/hlm-item-header';
19
+ export * from './lib/hlm-item-media';
20
+ export * from './lib/hlm-item-separator';
21
+ export * from './lib/hlm-item-title';
22
+ export * from './lib/hlm-item-token';
23
+
24
+ export const HlmItemImports = [
25
+ HlmItem,
26
+ HlmItemActions,
27
+ HlmItemContent,
28
+ HlmItemDescription,
29
+ HlmItemFooter,
30
+ HlmItemGroup,
31
+ HlmItemHeader,
32
+ HlmItemMedia,
33
+ HlmItemSeparator,
34
+ HlmItemTitle,
35
+ ] as const;
@@ -0,0 +1,15 @@
1
+ import { computed, Directive, input } from '@angular/core';
2
+ import { hlm } from '<%- importAlias %>/utils';
3
+ import type { ClassValue } from 'clsx';
4
+
5
+ @Directive({
6
+ selector: 'div[hlmItemActions]',
7
+ host: {
8
+ 'data-slot': 'item-actions',
9
+ '[class]': '_computedClass()',
10
+ },
11
+ })
12
+ export class HlmItemActions {
13
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
14
+ protected readonly _computedClass = computed(() => hlm('flex items-center gap-2', this.userClass()));
15
+ }
@@ -0,0 +1,17 @@
1
+ import { computed, Directive, input } from '@angular/core';
2
+ import { hlm } from '<%- importAlias %>/utils';
3
+ import type { ClassValue } from 'clsx';
4
+
5
+ @Directive({
6
+ selector: 'div[hlmItemContent]',
7
+ host: {
8
+ 'data-slot': 'item-content',
9
+ '[class]': '_computedClass()',
10
+ },
11
+ })
12
+ export class HlmItemContent {
13
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
14
+ protected readonly _computedClass = computed(() =>
15
+ hlm('flex flex-1 flex-col gap-1 [&+[data-slot=item-content]]:flex-none', this.userClass()),
16
+ );
17
+ }
@@ -0,0 +1,21 @@
1
+ import { computed, Directive, input } from '@angular/core';
2
+ import { hlm } from '<%- importAlias %>/utils';
3
+ import type { ClassValue } from 'clsx';
4
+
5
+ @Directive({
6
+ selector: 'p[hlmItemDescription]',
7
+ host: {
8
+ 'data-slot': 'item-description',
9
+ '[class]': '_computedClass()',
10
+ },
11
+ })
12
+ export class HlmItemDescription {
13
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
14
+ protected readonly _computedClass = computed(() =>
15
+ hlm(
16
+ 'text-muted-foreground line-clamp-2 text-sm leading-normal font-normal text-balance',
17
+ '[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4',
18
+ this.userClass(),
19
+ ),
20
+ );
21
+ }
@@ -0,0 +1,17 @@
1
+ import { computed, Directive, input } from '@angular/core';
2
+ import { hlm } from '<%- importAlias %>/utils';
3
+ import type { ClassValue } from 'clsx';
4
+
5
+ @Directive({
6
+ selector: 'div[hlmItemFooter]',
7
+ host: {
8
+ 'data-slot': 'item-footer',
9
+ '[class]': '_computedClass()',
10
+ },
11
+ })
12
+ export class HlmItemFooter {
13
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
14
+ protected readonly _computedClass = computed(() =>
15
+ hlm('flex basis-full items-center justify-between gap-2', this.userClass()),
16
+ );
17
+ }
@@ -0,0 +1,12 @@
1
+ import { computed, Directive, input } from '@angular/core';
2
+ import { hlm } from '<%- importAlias %>/utils';
3
+ import type { ClassValue } from 'clsx';
4
+
5
+ @Directive({
6
+ selector: 'div[hlmItemGroup]',
7
+ host: { 'data-slot': 'item-group', '[class]': '_computedClass()' },
8
+ })
9
+ export class HlmItemGroup {
10
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
11
+ protected readonly _computedClass = computed(() => hlm('group/item-group flex flex-col', this.userClass()));
12
+ }
@@ -0,0 +1,17 @@
1
+ import { computed, Directive, input } from '@angular/core';
2
+ import { hlm } from '<%- importAlias %>/utils';
3
+ import type { ClassValue } from 'clsx';
4
+
5
+ @Directive({
6
+ selector: 'div[hlmItemHeader]',
7
+ host: {
8
+ 'data-slot': 'item-header',
9
+ '[class]': '_computedClass()',
10
+ },
11
+ })
12
+ export class HlmItemHeader {
13
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
14
+ protected readonly _computedClass = computed(() =>
15
+ hlm('flex basis-full items-center justify-between gap-2', this.userClass()),
16
+ );
17
+ }
@@ -0,0 +1,41 @@
1
+ import { computed, Directive, input } from '@angular/core';
2
+ import { hlm } from '<%- importAlias %>/utils';
3
+ import { cva, type VariantProps } from 'class-variance-authority';
4
+ import type { ClassValue } from 'clsx';
5
+ import { injectHlmItemMediaConfig } from './hlm-item-token';
6
+
7
+ const itemMediaVariants = cva(
8
+ 'flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=item-description]]/item:translate-y-0.5 group-has-[[data-slot=item-description]]/item:self-start [&_ng-icon]:pointer-events-none',
9
+ {
10
+ variants: {
11
+ variant: {
12
+ default: 'bg-transparent',
13
+ icon: "bg-muted size-8 rounded-sm border [&_ng-icon:not([class*='size-'])]:size-4",
14
+ image: 'size-10 overflow-hidden rounded-sm [&_img]:size-full [&_img]:object-cover',
15
+ },
16
+ },
17
+ defaultVariants: {
18
+ variant: 'default',
19
+ },
20
+ },
21
+ );
22
+ export type ItemMediaVariants = VariantProps<typeof itemMediaVariants>;
23
+
24
+ @Directive({
25
+ selector: 'div[hlmItemMedia]',
26
+ host: {
27
+ 'data-slot': 'item-media',
28
+ '[attr.data-variant]': 'variant()',
29
+ '[class]': '_computedClass()',
30
+ },
31
+ })
32
+ export class HlmItemMedia {
33
+ private readonly _config = injectHlmItemMediaConfig();
34
+
35
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
36
+
37
+ protected readonly _computedClass = computed(() =>
38
+ hlm(itemMediaVariants({ variant: this.variant() }), this.userClass()),
39
+ );
40
+ public readonly variant = input<ItemMediaVariants['variant']>(this._config.variant);
41
+ }
@@ -0,0 +1,15 @@
1
+ import { computed, Directive, input } from '@angular/core';
2
+ import { BrnSeparator } from '@spartan-ng/brain/separator';
3
+ import { hlmSeparatorClass } from '<%- importAlias %>/separator';
4
+ import { hlm } from '<%- importAlias %>/utils';
5
+ import type { ClassValue } from 'clsx';
6
+
7
+ @Directive({
8
+ selector: 'div[hlmItemSeparator]',
9
+ hostDirectives: [{ directive: BrnSeparator, inputs: ['orientation'] }],
10
+ host: { 'data-slot': 'item-separator', '[class]': '_computedClass()' },
11
+ })
12
+ export class HlmItemSeparator {
13
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
14
+ protected readonly _computedClass = computed(() => hlm(hlmSeparatorClass, 'my-0', this.userClass()));
15
+ }
@@ -0,0 +1,17 @@
1
+ import { computed, Directive, input } from '@angular/core';
2
+ import { hlm } from '<%- importAlias %>/utils';
3
+ import type { ClassValue } from 'clsx';
4
+
5
+ @Directive({
6
+ selector: 'div[hlmItemTitle]',
7
+ host: {
8
+ 'data-slot': 'item-title',
9
+ '[class]': '_computedClass()',
10
+ },
11
+ })
12
+ export class HlmItemTitle {
13
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
14
+ protected readonly _computedClass = computed(() =>
15
+ hlm('flex w-fit items-center gap-2 text-sm leading-snug font-medium', this.userClass()),
16
+ );
17
+ }
@@ -0,0 +1,41 @@
1
+ import { InjectionToken, type ValueProvider, inject } from '@angular/core';
2
+ import type { ItemVariants } from './hlm-item';
3
+ import type { ItemMediaVariants } from './hlm-item-media';
4
+
5
+ export interface HlmItemConfig {
6
+ variant: ItemVariants['variant'];
7
+ size: ItemVariants['size'];
8
+ }
9
+
10
+ const defaultConfig: HlmItemConfig = {
11
+ variant: 'default',
12
+ size: 'default',
13
+ };
14
+
15
+ const HlmItemConfigToken = new InjectionToken<HlmItemConfig>('HlmItemConfig');
16
+
17
+ export function provideHlmItemConfig(config: Partial<HlmItemConfig>): ValueProvider {
18
+ return { provide: HlmItemConfigToken, useValue: { ...defaultConfig, ...config } };
19
+ }
20
+
21
+ export function injectHlmItemConfig(): HlmItemConfig {
22
+ return inject(HlmItemConfigToken, { optional: true }) ?? defaultConfig;
23
+ }
24
+
25
+ export interface HlmItemMediaConfig {
26
+ variant: ItemMediaVariants['variant'];
27
+ }
28
+
29
+ const defaultMediaConfig: HlmItemMediaConfig = {
30
+ variant: 'default',
31
+ };
32
+
33
+ const HlmItemMediaConfigToken = new InjectionToken<HlmItemMediaConfig>('HlmItemMediaConfig');
34
+
35
+ export function provideHlmItemMediaConfig(config: Partial<HlmItemMediaConfig>): ValueProvider {
36
+ return { provide: HlmItemMediaConfigToken, useValue: { ...defaultMediaConfig, ...config } };
37
+ }
38
+
39
+ export function injectHlmItemMediaConfig(): HlmItemMediaConfig {
40
+ return inject(HlmItemMediaConfigToken, { optional: true }) ?? defaultMediaConfig;
41
+ }
@@ -0,0 +1,49 @@
1
+ import { computed, Directive, input } from '@angular/core';
2
+ import { hlm } from '<%- importAlias %>/utils';
3
+ import { cva, type VariantProps } from 'class-variance-authority';
4
+ import type { ClassValue } from 'clsx';
5
+ import { injectHlmItemConfig } from './hlm-item-token';
6
+
7
+ const itemVariants = cva(
8
+ 'group/item [a]:hover:bg-accent/50 focus-visible:border-ring focus-visible:ring-ring/50 flex flex-wrap items-center rounded-md border border-transparent text-sm transition-colors duration-100 outline-none focus-visible:ring-[3px] [a]:transition-colors',
9
+ {
10
+ variants: {
11
+ variant: {
12
+ default: 'bg-transparent',
13
+ outline: 'border-border',
14
+ muted: 'bg-muted/50',
15
+ },
16
+ size: {
17
+ default: 'gap-4 p-4',
18
+ sm: 'gap-2.5 px-4 py-3',
19
+ },
20
+ },
21
+ defaultVariants: {
22
+ variant: 'default',
23
+ size: 'default',
24
+ },
25
+ },
26
+ );
27
+
28
+ export type ItemVariants = VariantProps<typeof itemVariants>;
29
+
30
+ @Directive({
31
+ selector: 'div[hlmItem], a[hlmItem]',
32
+ host: {
33
+ 'data-slot': 'item',
34
+ '[attr.data-variant]': 'variant()',
35
+ '[attr.data-size]': 'size()',
36
+ '[class]': '_computedClass()',
37
+ },
38
+ })
39
+ export class HlmItem {
40
+ private readonly _config = injectHlmItemConfig();
41
+
42
+ public readonly userClass = input<ClassValue>('', { alias: 'class' });
43
+
44
+ protected readonly _computedClass = computed(() =>
45
+ hlm(itemVariants({ variant: this.variant(), size: this.size() }), this.userClass()),
46
+ );
47
+ public readonly variant = input<ItemVariants['variant']>(this._config.variant);
48
+ public readonly size = input<ItemVariants['size']>(this._config.size);
49
+ }
@@ -0,0 +1,3 @@
1
+ import type { Tree } from '@nx/devkit';
2
+ import type { HlmBaseGeneratorSchema } from '../../../base/schema';
3
+ export declare function generator(tree: Tree, options: HlmBaseGeneratorSchema): Promise<import("@nx/devkit").GeneratorCallback>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generator = generator;
4
+ const tslib_1 = require("tslib");
5
+ const generator_1 = tslib_1.__importDefault(require("../../../base/generator"));
6
+ async function generator(tree, options) {
7
+ return await (0, generator_1.default)(tree, {
8
+ ...options,
9
+ primitiveName: 'item',
10
+ internalName: 'ui-item-helm',
11
+ publicName: 'ui-item-helm',
12
+ });
13
+ }
14
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../../libs/cli/src/generators/ui/libs/ui-item-helm/generator.ts"],"names":[],"mappings":";;AAIA,8BAOC;;AAVD,gFAAuD;AAGhD,KAAK,UAAU,SAAS,CAAC,IAAU,EAAE,OAA+B;IAC1E,OAAO,MAAM,IAAA,mBAAgB,EAAC,IAAI,EAAE;QACnC,GAAG,OAAO;QACV,aAAa,EAAE,MAAM;QACrB,YAAY,EAAE,cAAc;QAC5B,UAAU,EAAE,cAAc;KAC1B,CAAC,CAAC;AACJ,CAAC"}
@@ -13,7 +13,7 @@ export class HlmKbd {
13
13
  public readonly userClass = input<ClassValue>('', { alias: 'class' });
14
14
  protected readonly _computedClass = computed(() =>
15
15
  hlm(
16
- 'bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 select-none items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium',
16
+ 'bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium select-none',
17
17
  "[&_ng-icon:not([class*='size-'])]:size-3",
18
18
  '[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10',
19
19
  this.userClass(),
@@ -20,7 +20,7 @@ export class HlmLabel {
20
20
 
21
21
  protected readonly _computedClass = computed(() =>
22
22
  hlm(
23
- 'flex select-none items-center gap-2 text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-50 has-[[disabled]]:cursor-not-allowed has-[[disabled]]:opacity-50 group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-data-[disabled]:cursor-not-allowed peer-data-[disabled]:opacity-50',
23
+ 'flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50 peer-data-[disabled]:cursor-not-allowed peer-data-[disabled]:opacity-50 has-[[disabled]]:cursor-not-allowed has-[[disabled]]:opacity-50',
24
24
  this.userClass(),
25
25
  ),
26
26
  );
@@ -14,7 +14,7 @@ export class HlmMenuBarItem {
14
14
  public readonly userClass = input<ClassValue>('', { alias: 'class' });
15
15
  protected readonly _computedClass = computed(() =>
16
16
  hlm(
17
- 'focus:bg-accent focus:text-accent-foreground aria-expanded:bg-accent aria-expanded:text-accent-foreground flex select-none items-center rounded-sm px-2 py-1 text-sm font-medium outline-none',
17
+ 'focus:bg-accent focus:text-accent-foreground aria-expanded:bg-accent aria-expanded:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-none select-none',
18
18
  this.userClass(),
19
19
  ),
20
20
  );
@@ -15,6 +15,6 @@ import type { ClassValue } from 'clsx';
15
15
  export class HlmMenuBar {
16
16
  public readonly userClass = input<ClassValue>('', { alias: 'class' });
17
17
  protected readonly _computedClass = computed(() =>
18
- hlm('bg-background shadow-xs flex h-9 items-center gap-1 rounded-md border p-1', this.userClass()),
18
+ hlm('bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs', this.userClass()),
19
19
  );
20
20
  }
@@ -20,7 +20,7 @@ export class HlmMenuItemCheckbox {
20
20
  public readonly userClass = input<ClassValue>('', { alias: 'class' });
21
21
  protected readonly _computedClass = computed(() =>
22
22
  hlm(
23
- 'hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground group relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors disabled:pointer-events-none disabled:opacity-50',
23
+ 'hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground group relative flex w-full cursor-default items-center rounded-sm py-1.5 pr-2 pl-8 text-sm transition-colors outline-none select-none disabled:pointer-events-none disabled:opacity-50',
24
24
  this.userClass(),
25
25
  ),
26
26
  );
@@ -20,7 +20,7 @@ export class HlmMenuItemRadio {
20
20
  public readonly userClass = input<ClassValue>('', { alias: 'class' });
21
21
  protected readonly _computedClass = computed(() =>
22
22
  hlm(
23
- 'hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground group relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors disabled:pointer-events-none disabled:opacity-50',
23
+ 'hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground group relative flex w-full cursor-default items-center rounded-sm py-1.5 pr-2 pl-8 text-sm transition-colors outline-none select-none disabled:pointer-events-none disabled:opacity-50',
24
24
  this.userClass(),
25
25
  ),
26
26
  );
@@ -29,7 +29,7 @@ export class HlmMenuItem {
29
29
  public readonly userClass = input<ClassValue>('', { alias: 'class' });
30
30
  protected readonly _computedClass = computed(() =>
31
31
  hlm(
32
- `hover:bg-accent focus-visible:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[ng-icon]:!text-destructive [&_ng-icon]:text-muted-foreground relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[inset]:pl-8 data-[disabled]:opacity-50 [&_ng-icon]:pointer-events-none [&_ng-icon]:shrink-0`,
32
+ `hover:bg-accent focus-visible:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[ng-icon]:!text-destructive [&_ng-icon]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_ng-icon]:pointer-events-none [&_ng-icon]:shrink-0`,
33
33
  this.userClass(),
34
34
  ),
35
35
  );
@@ -5,7 +5,7 @@ import { type VariantProps, cva } from 'class-variance-authority';
5
5
  import type { ClassValue } from 'clsx';
6
6
 
7
7
  export const menuVariants = cva(
8
- 'bg-popover text-popover-foreground 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 z-50 min-w-[8rem] origin-top overflow-y-auto overflow-x-hidden rounded-md border p-1 shadow-md',
8
+ 'bg-popover text-popover-foreground 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 z-50 min-w-[8rem] origin-top overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md',
9
9
  {
10
10
  variants: {
11
11
  variant: {
@@ -25,7 +25,7 @@ import { HlmPaginationPrevious } from './hlm-pagination-previous';
25
25
  selector: 'hlm-numbered-pagination-query-params',
26
26
  template: `
27
27
  <div class="flex items-center justify-between gap-2 px-4 py-2">
28
- <div class="flex items-center gap-1 text-nowrap text-sm text-gray-600">
28
+ <div class="flex items-center gap-1 text-sm text-nowrap text-gray-600">
29
29
  <b>{{ totalItems() }}</b>
30
30
  total items |
31
31
  <b>{{ _pages().length }}</b>
@@ -24,7 +24,7 @@ import { HlmPaginationPrevious } from './hlm-pagination-previous';
24
24
  selector: 'hlm-numbered-pagination',
25
25
  template: `
26
26
  <div class="flex items-center justify-between gap-2 px-4 py-2">
27
- <div class="flex items-center gap-1 text-nowrap text-sm text-gray-600">
27
+ <div class="flex items-center gap-1 text-sm text-nowrap text-gray-600">
28
28
  <b>{{ totalItems() }}</b>
29
29
  total items |
30
30
  <b>{{ _pages().length }}</b>
@@ -12,7 +12,7 @@ export class HlmPopoverClose {
12
12
  public readonly userClass = input<ClassValue>('', { alias: 'class' });
13
13
  protected readonly _computedClass = computed(() =>
14
14
  hlm(
15
- 'ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:pointer-events-none',
15
+ 'ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none',
16
16
  this.userClass(),
17
17
  ),
18
18
  );