@salas-ds/cli 0.1.0 → 0.2.1

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 (92) hide show
  1. package/dist/index.js +296 -94
  2. package/package.json +4 -5
  3. package/templates/angular/accordion/accordion-content.component.ts +9 -0
  4. package/templates/angular/accordion/accordion-item.component.ts +138 -0
  5. package/templates/angular/accordion/accordion-trigger.component.ts +9 -0
  6. package/templates/angular/accordion/accordion.component.ts +120 -0
  7. package/templates/angular/accordion/accordion.module.ts +21 -0
  8. package/templates/angular/autocomplete/autocomplete.component.ts +707 -0
  9. package/templates/angular/autocomplete/autocomplete.module.ts +8 -0
  10. package/templates/angular/avatar/avatar-badge.component.ts +18 -0
  11. package/templates/angular/avatar/avatar-fallback.component.ts +39 -0
  12. package/templates/angular/avatar/avatar-group-count.component.ts +46 -0
  13. package/templates/angular/avatar/avatar-group.component.ts +33 -0
  14. package/templates/angular/avatar/avatar-image.component.ts +57 -0
  15. package/templates/angular/avatar/avatar.component.ts +73 -0
  16. package/templates/angular/avatar/avatar.module.ts +27 -0
  17. package/templates/angular/badge/badge.component.ts +84 -0
  18. package/templates/angular/badge/badge.module.ts +9 -0
  19. package/templates/angular/button/button.component.ts +24 -4
  20. package/templates/angular/card/card.component.ts +100 -0
  21. package/templates/angular/card/card.module.ts +8 -0
  22. package/templates/angular/checkbox/checkbox.component.ts +172 -0
  23. package/templates/angular/checkbox/checkbox.module.ts +8 -0
  24. package/templates/angular/datepicker/datepicker.component.ts +660 -0
  25. package/templates/angular/datepicker/datepicker.module.ts +8 -0
  26. package/templates/angular/dialog/dialog-content.component.ts +9 -0
  27. package/templates/angular/dialog/dialog-description.component.ts +17 -0
  28. package/templates/angular/dialog/dialog-footer.component.ts +17 -0
  29. package/templates/angular/dialog/dialog-header.component.ts +14 -0
  30. package/templates/angular/dialog/dialog-title.component.ts +18 -0
  31. package/templates/angular/dialog/dialog-trigger.component.ts +9 -0
  32. package/templates/angular/dialog/dialog.component.ts +212 -0
  33. package/templates/angular/dialog/dialog.module.ts +31 -0
  34. package/templates/angular/input/input.component.ts +229 -0
  35. package/templates/angular/input/input.module.ts +8 -0
  36. package/templates/angular/scroll-area/scroll-area.component.ts +72 -0
  37. package/templates/angular/scroll-area/scroll-area.module.ts +9 -0
  38. package/templates/angular/scroll-area/scroll-bar.component.ts +15 -0
  39. package/templates/angular/select/select.component.ts +292 -0
  40. package/templates/angular/select/select.module.ts +8 -0
  41. package/templates/angular/separator/separator.component.ts +63 -0
  42. package/templates/angular/separator/separator.module.ts +9 -0
  43. package/templates/angular/sheet/sheet-content.component.ts +13 -0
  44. package/templates/angular/sheet/sheet-description.component.ts +29 -0
  45. package/templates/angular/sheet/sheet-footer.component.ts +27 -0
  46. package/templates/angular/sheet/sheet-header.component.ts +26 -0
  47. package/templates/angular/sheet/sheet-title.component.ts +31 -0
  48. package/templates/angular/sheet/sheet-trigger.component.ts +11 -0
  49. package/templates/angular/sheet/sheet.component.ts +251 -0
  50. package/templates/angular/sheet/sheet.module.ts +30 -0
  51. package/templates/angular/sidebar/sidebar-content.component.ts +25 -0
  52. package/templates/angular/sidebar/sidebar-footer.component.ts +20 -0
  53. package/templates/angular/sidebar/sidebar-group-content.component.ts +16 -0
  54. package/templates/angular/sidebar/sidebar-group-label.component.ts +20 -0
  55. package/templates/angular/sidebar/sidebar-group.component.ts +14 -0
  56. package/templates/angular/sidebar/sidebar-header.component.ts +25 -0
  57. package/templates/angular/sidebar/sidebar-inset.component.ts +85 -0
  58. package/templates/angular/sidebar/sidebar-menu-button.component.ts +75 -0
  59. package/templates/angular/sidebar/sidebar-menu-item.component.ts +14 -0
  60. package/templates/angular/sidebar/sidebar-menu.component.ts +19 -0
  61. package/templates/angular/sidebar/sidebar-provider.component.ts +77 -0
  62. package/templates/angular/sidebar/sidebar-trigger.component.ts +58 -0
  63. package/templates/angular/sidebar/sidebar.component.ts +228 -0
  64. package/templates/angular/sidebar/sidebar.module.ts +48 -0
  65. package/templates/angular/sidebar/sidebar.service.ts +93 -0
  66. package/templates/angular/skeleton/skeleton.component.ts +44 -0
  67. package/templates/angular/skeleton/skeleton.module.ts +8 -0
  68. package/templates/angular/spinner/spinner.component.ts +75 -0
  69. package/templates/angular/spinner/spinner.module.ts +8 -0
  70. package/templates/angular/table/table-body.component.ts +23 -0
  71. package/templates/angular/table/table-caption.component.ts +29 -0
  72. package/templates/angular/table/table-cell.component.ts +49 -0
  73. package/templates/angular/table/table-footer.component.ts +32 -0
  74. package/templates/angular/table/table-head.component.ts +48 -0
  75. package/templates/angular/table/table-header.component.ts +28 -0
  76. package/templates/angular/table/table-row.component.ts +36 -0
  77. package/templates/angular/table/table.component.ts +35 -0
  78. package/templates/angular/table/table.module.ts +33 -0
  79. package/templates/angular/tabs/tabs-content.component.ts +71 -0
  80. package/templates/angular/tabs/tabs-list.component.ts +70 -0
  81. package/templates/angular/tabs/tabs-trigger.component.ts +149 -0
  82. package/templates/angular/tabs/tabs.component.ts +155 -0
  83. package/templates/angular/tabs/tabs.module.ts +21 -0
  84. package/templates/angular/textarea/textarea.component.ts +268 -0
  85. package/templates/angular/textarea/textarea.module.ts +8 -0
  86. package/templates/angular/toast/toast.module.ts +8 -0
  87. package/templates/angular/toast/toast.service.ts +104 -0
  88. package/templates/angular/toast/toaster.component.ts +329 -0
  89. package/templates/angular/tooltip/tooltip-content.component.ts +43 -0
  90. package/templates/angular/tooltip/tooltip-trigger.component.ts +13 -0
  91. package/templates/angular/tooltip/tooltip.component.ts +243 -0
  92. package/templates/angular/tooltip/tooltip.module.ts +10 -0
@@ -0,0 +1,172 @@
1
+ import { Component, EventEmitter, forwardRef, HostListener, Input, Output, ViewEncapsulation } from '@angular/core';
2
+ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { cn } from '../utils';
4
+
5
+ export type CheckboxState = boolean | 'indeterminate';
6
+
7
+ export interface CheckboxProps {
8
+ checked?: CheckboxState;
9
+ disabled?: boolean;
10
+ }
11
+
12
+
13
+ @Component({
14
+ selector: 'salas-checkbox',
15
+ standalone: true,
16
+ imports: [],
17
+ encapsulation: ViewEncapsulation.None,
18
+ host: {
19
+ '[class]': 'checkboxClasses',
20
+ '[attr.role]': '"checkbox"',
21
+ '[attr.aria-checked]': 'ariaChecked',
22
+ '[attr.aria-disabled]': 'disabled || null',
23
+ '[attr.tabindex]': 'disabled ? -1 : 0',
24
+ },
25
+ providers: [
26
+ {
27
+ provide: NG_VALUE_ACCESSOR,
28
+ useExisting: forwardRef(() => SalasCheckboxComponent),
29
+ multi: true,
30
+ },
31
+ ],
32
+ template: `
33
+ @if (indeterminate) {
34
+ <svg class="salas-checkbox-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true">
35
+ <path d="M5 12h14" />
36
+ </svg>
37
+ } @else if (checked === true) {
38
+ <svg class="salas-checkbox-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true">
39
+ <polyline points="20 6 9 17 4 12" />
40
+ </svg>
41
+ }
42
+ `,
43
+ styles: [`
44
+ salas-checkbox {
45
+ display: inline-flex;
46
+ align-items: center;
47
+ justify-content: center;
48
+ width: 1rem;
49
+ height: 1rem;
50
+ border-radius: 0.25rem;
51
+ border: 1px solid var(--salas-gray-300);
52
+ background-color: var(--salas-bg-elevated, #fff);
53
+ color: var(--salas-gray-900);
54
+ cursor: pointer;
55
+ transition: background-color 0.15s ease, border-color 0.15s ease;
56
+ outline: none;
57
+ flex-shrink: 0;
58
+ }
59
+
60
+ salas-checkbox:focus-visible {
61
+ outline: 2px solid var(--salas-primary-500);
62
+ outline-offset: 2px;
63
+ }
64
+
65
+ salas-checkbox.salas-checkbox--checked,
66
+ salas-checkbox.salas-checkbox--indeterminate {
67
+ background-color: var(--salas-primary-500);
68
+ border-color: var(--salas-primary-500);
69
+ color: white;
70
+ }
71
+
72
+ salas-checkbox.salas-checkbox--checked:hover:not(.salas-checkbox--disabled),
73
+ salas-checkbox.salas-checkbox--indeterminate:hover:not(.salas-checkbox--disabled) {
74
+ background-color: var(--salas-primary-600);
75
+ border-color: var(--salas-primary-600);
76
+ }
77
+
78
+ salas-checkbox.salas-checkbox--disabled {
79
+ opacity: 0.5;
80
+ cursor: not-allowed;
81
+ }
82
+
83
+ .salas-checkbox-icon {
84
+ width: 0.75rem;
85
+ height: 0.75rem;
86
+ stroke: currentColor;
87
+ stroke-width: 3;
88
+ fill: none;
89
+ stroke-linecap: round;
90
+ stroke-linejoin: round;
91
+ }
92
+
93
+ [data-theme='dark'] salas-checkbox {
94
+ background-color: var(--salas-gray-900);
95
+ border-color: var(--salas-gray-700);
96
+ color: var(--salas-gray-100);
97
+ }
98
+
99
+ [data-theme='dark'] salas-checkbox.salas-checkbox--checked,
100
+ [data-theme='dark'] salas-checkbox.salas-checkbox--indeterminate {
101
+ background-color: var(--salas-primary-500);
102
+ border-color: var(--salas-primary-500);
103
+ color: white;
104
+ }
105
+ `],
106
+ })
107
+ export class SalasCheckboxComponent implements CheckboxProps, ControlValueAccessor {
108
+ @Input() checked: CheckboxState = false;
109
+ @Input() disabled = false;
110
+
111
+ @Output() checkedChange = new EventEmitter<CheckboxState>();
112
+
113
+ private onChange: (value: boolean) => void = () => {};
114
+ private onTouched: () => void = () => {};
115
+
116
+ get indeterminate(): boolean {
117
+ return this.checked === 'indeterminate';
118
+ }
119
+
120
+ get ariaChecked(): string {
121
+ if (this.indeterminate) return 'mixed';
122
+ return this.checked === true ? 'true' : 'false';
123
+ }
124
+
125
+ get checkboxClasses(): string {
126
+ return cn(
127
+ 'salas-checkbox',
128
+ this.checked === true && 'salas-checkbox--checked',
129
+ this.indeterminate && 'salas-checkbox--indeterminate',
130
+ this.disabled && 'salas-checkbox--disabled',
131
+ );
132
+ }
133
+
134
+ @HostListener('click', ['$event'])
135
+ handleClick(event: MouseEvent): void {
136
+ event.stopPropagation();
137
+ this.toggle();
138
+ }
139
+
140
+ @HostListener('keydown.space', ['$event'])
141
+ handleSpace(event: KeyboardEvent): void {
142
+ event.preventDefault();
143
+ this.toggle();
144
+ }
145
+
146
+ toggle(): void {
147
+ if (this.disabled) return;
148
+
149
+ const next: CheckboxState = this.indeterminate ? true : !this.checked;
150
+ this.checked = next;
151
+ this.onTouched();
152
+ this.onChange(this.checked === true);
153
+ this.checkedChange.emit(next);
154
+ }
155
+
156
+ // ControlValueAccessor
157
+ writeValue(value: boolean | null | undefined): void {
158
+ this.checked = value ?? false;
159
+ }
160
+
161
+ registerOnChange(fn: (value: boolean) => void): void {
162
+ this.onChange = fn;
163
+ }
164
+
165
+ registerOnTouched(fn: () => void): void {
166
+ this.onTouched = fn;
167
+ }
168
+
169
+ setDisabledState(isDisabled: boolean): void {
170
+ this.disabled = isDisabled;
171
+ }
172
+ }
@@ -0,0 +1,8 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { SalasCheckboxComponent } from './checkbox.component';
3
+
4
+ @NgModule({
5
+ imports: [SalasCheckboxComponent],
6
+ exports: [SalasCheckboxComponent],
7
+ })
8
+ export class SalasCheckboxModule {}