ngx-com 0.0.19 → 0.0.20

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 (47) hide show
  1. package/fesm2022/ngx-com-components-alert.mjs +346 -0
  2. package/fesm2022/ngx-com-components-alert.mjs.map +1 -0
  3. package/fesm2022/ngx-com-components-button.mjs +1 -1
  4. package/fesm2022/ngx-com-components-button.mjs.map +1 -1
  5. package/fesm2022/ngx-com-components-calendar.mjs +29 -36
  6. package/fesm2022/ngx-com-components-calendar.mjs.map +1 -1
  7. package/fesm2022/ngx-com-components-card.mjs +1 -1
  8. package/fesm2022/ngx-com-components-card.mjs.map +1 -1
  9. package/fesm2022/ngx-com-components-carousel.mjs +708 -0
  10. package/fesm2022/ngx-com-components-carousel.mjs.map +1 -0
  11. package/fesm2022/ngx-com-components-checkbox.mjs +1 -1
  12. package/fesm2022/ngx-com-components-checkbox.mjs.map +1 -1
  13. package/fesm2022/ngx-com-components-code-block.mjs +158 -0
  14. package/fesm2022/ngx-com-components-code-block.mjs.map +1 -0
  15. package/fesm2022/ngx-com-components-collapsible.mjs +1 -1
  16. package/fesm2022/ngx-com-components-collapsible.mjs.map +1 -1
  17. package/fesm2022/ngx-com-components-confirm.mjs +3 -3
  18. package/fesm2022/ngx-com-components-confirm.mjs.map +1 -1
  19. package/fesm2022/ngx-com-components-dialog.mjs +703 -0
  20. package/fesm2022/ngx-com-components-dialog.mjs.map +1 -0
  21. package/fesm2022/ngx-com-components-dropdown.mjs +18 -21
  22. package/fesm2022/ngx-com-components-dropdown.mjs.map +1 -1
  23. package/fesm2022/ngx-com-components-item.mjs +1 -1
  24. package/fesm2022/ngx-com-components-item.mjs.map +1 -1
  25. package/fesm2022/ngx-com-components-paginator.mjs +3 -3
  26. package/fesm2022/ngx-com-components-paginator.mjs.map +1 -1
  27. package/fesm2022/ngx-com-components-radio.mjs +1 -1
  28. package/fesm2022/ngx-com-components-radio.mjs.map +1 -1
  29. package/fesm2022/ngx-com-components-segmented-control.mjs +1 -1
  30. package/fesm2022/ngx-com-components-segmented-control.mjs.map +1 -1
  31. package/fesm2022/ngx-com-components-switch.mjs +258 -0
  32. package/fesm2022/ngx-com-components-switch.mjs.map +1 -0
  33. package/fesm2022/ngx-com-components-table.mjs +631 -0
  34. package/fesm2022/ngx-com-components-table.mjs.map +1 -0
  35. package/fesm2022/ngx-com-components-tabs.mjs +2 -2
  36. package/fesm2022/ngx-com-components-tabs.mjs.map +1 -1
  37. package/fesm2022/ngx-com-components-toast.mjs +783 -0
  38. package/fesm2022/ngx-com-components-toast.mjs.map +1 -0
  39. package/package.json +29 -1
  40. package/types/ngx-com-components-alert.d.ts +166 -0
  41. package/types/ngx-com-components-carousel.d.ts +281 -0
  42. package/types/ngx-com-components-code-block.d.ts +66 -0
  43. package/types/ngx-com-components-confirm.d.ts +2 -2
  44. package/types/ngx-com-components-dialog.d.ts +264 -0
  45. package/types/ngx-com-components-switch.d.ts +110 -0
  46. package/types/ngx-com-components-table.d.ts +377 -0
  47. package/types/ngx-com-components-toast.d.ts +217 -0
@@ -0,0 +1,346 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Directive, input, booleanAttribute, output, contentChild, signal, computed, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { ComIcon } from 'ngx-com/components/icon';
4
+ import { cva } from 'class-variance-authority';
5
+ import { mergeClasses } from 'ngx-com/utils';
6
+
7
+ /**
8
+ * CVA variants for the alert container.
9
+ *
10
+ * @tokens `--color-primary-subtle`, `--color-primary-subtle-foreground`,
11
+ * `--color-success-subtle`, `--color-success-subtle-foreground`,
12
+ * `--color-warn-subtle`, `--color-warn-subtle-foreground`,
13
+ * `--color-warn`, `--color-warn-foreground`,
14
+ * `--radius-card`
15
+ */
16
+ const alertVariants = cva([
17
+ 'relative',
18
+ 'flex',
19
+ 'w-full',
20
+ 'items-start',
21
+ 'gap-3',
22
+ 'rounded-card',
23
+ 'border',
24
+ 'p-4',
25
+ 'text-sm',
26
+ ], {
27
+ variants: {
28
+ variant: {
29
+ info: 'bg-primary-subtle text-primary-subtle-foreground border-primary/20',
30
+ success: 'bg-success-subtle text-success-subtle-foreground border-success/20',
31
+ warning: 'bg-warn-subtle text-warn-subtle-foreground border-warn/20',
32
+ destructive: 'bg-warn text-warn-foreground border-warn',
33
+ },
34
+ },
35
+ defaultVariants: {
36
+ variant: 'info',
37
+ },
38
+ });
39
+ /**
40
+ * CVA variants for the alert close button.
41
+ *
42
+ * @tokens `--color-ring`, `--radius-card`
43
+ */
44
+ const alertCloseButtonVariants = cva([
45
+ 'inline-flex',
46
+ 'items-center',
47
+ 'justify-center',
48
+ 'shrink-0',
49
+ 'rounded-card',
50
+ 'p-0.5',
51
+ 'transition-colors',
52
+ 'outline-none',
53
+ 'focus-visible:outline-2',
54
+ 'focus-visible:outline-offset-2',
55
+ 'focus-visible:outline-[--color-ring]',
56
+ ], {
57
+ variants: {
58
+ variant: {
59
+ info: 'text-primary-subtle-foreground/60 hover:text-primary-subtle-foreground hover:bg-primary-subtle-foreground/10',
60
+ success: 'text-success-subtle-foreground/60 hover:text-success-subtle-foreground hover:bg-success-subtle-foreground/10',
61
+ warning: 'text-warn-subtle-foreground/60 hover:text-warn-subtle-foreground hover:bg-warn-subtle-foreground/10',
62
+ destructive: 'text-warn-foreground/60 hover:text-warn-foreground hover:bg-warn-foreground/10',
63
+ },
64
+ },
65
+ defaultVariants: {
66
+ variant: 'info',
67
+ },
68
+ });
69
+
70
+ /** Default Lucide icon names per alert variant. */
71
+ const DEFAULT_ALERT_ICONS = {
72
+ info: 'info',
73
+ success: 'circle-check',
74
+ warning: 'triangle-alert',
75
+ destructive: 'circle-x',
76
+ };
77
+
78
+ /**
79
+ * Custom icon slot for `com-alert`.
80
+ *
81
+ * When present, the alert suppresses the default auto-mapped icon
82
+ * and renders this projected content instead.
83
+ *
84
+ * @example
85
+ * ```html
86
+ * <com-alert variant="success">
87
+ * <com-icon comAlertIcon name="party-popper" size="md" aria-hidden="true" />
88
+ * <h4 comAlertTitle>Congratulations!</h4>
89
+ * </com-alert>
90
+ * ```
91
+ */
92
+ class ComAlertIcon {
93
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComAlertIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
94
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: ComAlertIcon, isStandalone: true, selector: "[comAlertIcon]", host: { classAttribute: "shrink-0 mt-0.5" }, ngImport: i0 });
95
+ }
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComAlertIcon, decorators: [{
97
+ type: Directive,
98
+ args: [{
99
+ selector: '[comAlertIcon]',
100
+ host: {
101
+ class: 'shrink-0 mt-0.5',
102
+ },
103
+ }]
104
+ }] });
105
+
106
+ /**
107
+ * Inline alert component for displaying contextual messages.
108
+ *
109
+ * Unlike toasts (ephemeral overlays), alerts are embedded in the page flow
110
+ * and persist until dismissed or the condition changes.
111
+ *
112
+ * @tokens `--color-primary-subtle`, `--color-primary-subtle-foreground`,
113
+ * `--color-success-subtle`, `--color-success-subtle-foreground`,
114
+ * `--color-warn-subtle`, `--color-warn-subtle-foreground`,
115
+ * `--color-warn`, `--color-warn-foreground`,
116
+ * `--radius-card`, `--color-ring`
117
+ *
118
+ * @example Info alert with title and description
119
+ * ```html
120
+ * <com-alert>
121
+ * <h4 comAlertTitle>Heads up</h4>
122
+ * <p comAlertDescription>You can add components using the CLI.</p>
123
+ * </com-alert>
124
+ * ```
125
+ *
126
+ * @example Dismissible warning
127
+ * ```html
128
+ * <com-alert variant="warning" dismissible (dismissed)="onDismissed()">
129
+ * <h4 comAlertTitle>Storage almost full</h4>
130
+ * <p comAlertDescription>You have used 90% of your storage quota.</p>
131
+ * </com-alert>
132
+ * ```
133
+ */
134
+ class ComAlertComponent {
135
+ /** Semantic color variant. */
136
+ variant = input('info', ...(ngDevMode ? [{ debugName: "variant" }] : []));
137
+ /** Shows a dismiss button when true. */
138
+ dismissible = input(false, { ...(ngDevMode ? { debugName: "dismissible" } : {}), transform: booleanAttribute });
139
+ /** Consumer CSS classes — merged with variant classes. */
140
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : {}), alias: 'class' });
141
+ /** Emitted when the dismiss button is clicked. */
142
+ dismissed = output();
143
+ /** @internal Detects whether a custom icon directive is projected. */
144
+ customIcon = contentChild(ComAlertIcon, ...(ngDevMode ? [{ debugName: "customIcon" }] : []));
145
+ /** @internal Controls visibility for dismiss animation. */
146
+ visible = signal(true, ...(ngDevMode ? [{ debugName: "visible" }] : []));
147
+ /** @internal Tracks exit animation state. */
148
+ animatingOut = signal(false, ...(ngDevMode ? [{ debugName: "animatingOut" }] : []));
149
+ /** Default icon name auto-mapped from variant. */
150
+ defaultIconName = computed(() => DEFAULT_ALERT_ICONS[this.variant()], ...(ngDevMode ? [{ debugName: "defaultIconName" }] : []));
151
+ /** ARIA role based on variant. */
152
+ ariaRole = computed(() => {
153
+ const v = this.variant();
154
+ return v === 'warning' || v === 'destructive' ? 'alert' : 'status';
155
+ }, ...(ngDevMode ? [{ debugName: "ariaRole" }] : []));
156
+ /** ARIA live region politeness. */
157
+ ariaLive = computed(() => {
158
+ const v = this.variant();
159
+ return v === 'warning' || v === 'destructive' ? 'assertive' : 'polite';
160
+ }, ...(ngDevMode ? [{ debugName: "ariaLive" }] : []));
161
+ /** Computed alert container classes. */
162
+ alertClasses = computed(() => mergeClasses(alertVariants({ variant: this.variant() }), this.animatingOut()
163
+ ? 'animate-out fade-out-0'
164
+ : 'animate-in fade-in-0', this.userClass()), ...(ngDevMode ? [{ debugName: "alertClasses" }] : []));
165
+ /** Computed close button classes. */
166
+ closeButtonClasses = computed(() => mergeClasses(alertCloseButtonVariants({ variant: this.variant() })), ...(ngDevMode ? [{ debugName: "closeButtonClasses" }] : []));
167
+ /** @internal Triggers dismiss animation, then removes from DOM. */
168
+ dismiss() {
169
+ this.animatingOut.set(true);
170
+ this.dismissed.emit();
171
+ }
172
+ /** @internal Removes element after exit animation completes. */
173
+ onAnimationEnd() {
174
+ if (this.animatingOut()) {
175
+ this.visible.set(false);
176
+ }
177
+ }
178
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComAlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
179
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ComAlertComponent, isStandalone: true, selector: "com-alert", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, dismissible: { classPropertyName: "dismissible", publicName: "dismissible", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dismissed: "dismissed" }, queries: [{ propertyName: "customIcon", first: true, predicate: ComAlertIcon, descendants: true, isSignal: true }], exportAs: ["comAlert"], ngImport: i0, template: `
180
+ @if (visible()) {
181
+ <div
182
+ [class]="alertClasses()"
183
+ [attr.role]="ariaRole()"
184
+ [attr.aria-live]="ariaLive()"
185
+ [attr.data-state]="animatingOut() ? 'closed' : 'open'"
186
+ (animationend)="onAnimationEnd()"
187
+ >
188
+ @if (customIcon()) {
189
+ <ng-content select="[comAlertIcon]" />
190
+ } @else {
191
+ <com-icon
192
+ [name]="defaultIconName()"
193
+ size="md"
194
+ class="mt-0.5 shrink-0"
195
+ aria-hidden="true"
196
+ />
197
+ }
198
+ <div class="flex-1 min-w-0">
199
+ <ng-content />
200
+ </div>
201
+ @if (dismissible()) {
202
+ <button
203
+ type="button"
204
+ [class]="closeButtonClasses()"
205
+ aria-label="Dismiss"
206
+ (click)="dismiss()"
207
+ >
208
+ <com-icon name="x" size="sm" aria-hidden="true" />
209
+ </button>
210
+ }
211
+ </div>
212
+ }
213
+ `, isInline: true, styles: [":host{display:block}[data-state=open]{--tw-enter-opacity: 0;--tw-enter-translate-y: 0}[data-state=closed]{--tw-exit-opacity: 0;--tw-exit-translate-y: 0}@media(prefers-reduced-motion:reduce){[data-state=open],[data-state=closed]{animation:none}}\n"], dependencies: [{ kind: "component", type: ComIcon, selector: "com-icon", inputs: ["name", "img", "color", "size", "strokeWidth", "absoluteStrokeWidth", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
214
+ }
215
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComAlertComponent, decorators: [{
216
+ type: Component,
217
+ args: [{ selector: 'com-alert', exportAs: 'comAlert', template: `
218
+ @if (visible()) {
219
+ <div
220
+ [class]="alertClasses()"
221
+ [attr.role]="ariaRole()"
222
+ [attr.aria-live]="ariaLive()"
223
+ [attr.data-state]="animatingOut() ? 'closed' : 'open'"
224
+ (animationend)="onAnimationEnd()"
225
+ >
226
+ @if (customIcon()) {
227
+ <ng-content select="[comAlertIcon]" />
228
+ } @else {
229
+ <com-icon
230
+ [name]="defaultIconName()"
231
+ size="md"
232
+ class="mt-0.5 shrink-0"
233
+ aria-hidden="true"
234
+ />
235
+ }
236
+ <div class="flex-1 min-w-0">
237
+ <ng-content />
238
+ </div>
239
+ @if (dismissible()) {
240
+ <button
241
+ type="button"
242
+ [class]="closeButtonClasses()"
243
+ aria-label="Dismiss"
244
+ (click)="dismiss()"
245
+ >
246
+ <com-icon name="x" size="sm" aria-hidden="true" />
247
+ </button>
248
+ }
249
+ </div>
250
+ }
251
+ `, imports: [ComIcon], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [":host{display:block}[data-state=open]{--tw-enter-opacity: 0;--tw-enter-translate-y: 0}[data-state=closed]{--tw-exit-opacity: 0;--tw-exit-translate-y: 0}@media(prefers-reduced-motion:reduce){[data-state=open],[data-state=closed]{animation:none}}\n"] }]
252
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], dismissible: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissible", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], dismissed: [{ type: i0.Output, args: ["dismissed"] }], customIcon: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ComAlertIcon), { isSignal: true }] }] } });
253
+
254
+ /**
255
+ * Title slot for `com-alert`.
256
+ *
257
+ * Apply to any heading element. Consumer picks the semantic level (h3, h4, etc.).
258
+ *
259
+ * @example
260
+ * ```html
261
+ * <com-alert>
262
+ * <h4 comAlertTitle>Heads up</h4>
263
+ * </com-alert>
264
+ * ```
265
+ *
266
+ * @tokens `--color-foreground`
267
+ */
268
+ class ComAlertTitle {
269
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComAlertTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
270
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: ComAlertTitle, isStandalone: true, selector: "[comAlertTitle]", host: { classAttribute: "text-sm font-semibold leading-tight" }, ngImport: i0 });
271
+ }
272
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComAlertTitle, decorators: [{
273
+ type: Directive,
274
+ args: [{
275
+ selector: '[comAlertTitle]',
276
+ host: {
277
+ class: 'text-sm font-semibold leading-tight',
278
+ },
279
+ }]
280
+ }] });
281
+
282
+ /**
283
+ * Description slot for `com-alert`.
284
+ *
285
+ * Inherits text color from the parent alert variant.
286
+ *
287
+ * @example
288
+ * ```html
289
+ * <com-alert>
290
+ * <p comAlertDescription>Your session will expire in 5 minutes.</p>
291
+ * </com-alert>
292
+ * ```
293
+ */
294
+ class ComAlertDescription {
295
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComAlertDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive });
296
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: ComAlertDescription, isStandalone: true, selector: "[comAlertDescription]", host: { classAttribute: "text-sm" }, ngImport: i0 });
297
+ }
298
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComAlertDescription, decorators: [{
299
+ type: Directive,
300
+ args: [{
301
+ selector: '[comAlertDescription]',
302
+ host: {
303
+ class: 'text-sm',
304
+ },
305
+ }]
306
+ }] });
307
+
308
+ /**
309
+ * Actions slot for `com-alert`.
310
+ *
311
+ * Container for action buttons. Place buttons inside.
312
+ *
313
+ * @example
314
+ * ```html
315
+ * <com-alert variant="destructive">
316
+ * <h4 comAlertTitle>Account suspended</h4>
317
+ * <p comAlertDescription>Contact support to restore access.</p>
318
+ * <div comAlertActions>
319
+ * <button comButton variant="outline" size="sm">Contact Support</button>
320
+ * </div>
321
+ * </com-alert>
322
+ * ```
323
+ */
324
+ class ComAlertActions {
325
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComAlertActions, deps: [], target: i0.ɵɵFactoryTarget.Directive });
326
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: ComAlertActions, isStandalone: true, selector: "[comAlertActions]", host: { classAttribute: "mt-3 flex items-center gap-2" }, ngImport: i0 });
327
+ }
328
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComAlertActions, decorators: [{
329
+ type: Directive,
330
+ args: [{
331
+ selector: '[comAlertActions]',
332
+ host: {
333
+ class: 'mt-3 flex items-center gap-2',
334
+ },
335
+ }]
336
+ }] });
337
+
338
+ // Public API for the alert component
339
+ // Main component
340
+
341
+ /**
342
+ * Generated bundle index. Do not edit.
343
+ */
344
+
345
+ export { ComAlertActions, ComAlertComponent, ComAlertDescription, ComAlertIcon, ComAlertTitle, alertCloseButtonVariants, alertVariants };
346
+ //# sourceMappingURL=ngx-com-components-alert.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-com-components-alert.mjs","sources":["../../../projects/com/components/alert/alert.variants.ts","../../../projects/com/components/alert/alert.utils.ts","../../../projects/com/components/alert/alert-icon.directive.ts","../../../projects/com/components/alert/alert.component.ts","../../../projects/com/components/alert/alert-title.directive.ts","../../../projects/com/components/alert/alert-description.directive.ts","../../../projects/com/components/alert/alert-actions.directive.ts","../../../projects/com/components/alert/index.ts","../../../projects/com/components/alert/ngx-com-components-alert.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'destructive';\n\n/**\n * CVA variants for the alert container.\n *\n * @tokens `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n * `--color-success-subtle`, `--color-success-subtle-foreground`,\n * `--color-warn-subtle`, `--color-warn-subtle-foreground`,\n * `--color-warn`, `--color-warn-foreground`,\n * `--radius-card`\n */\nexport const alertVariants: (props?: {\n variant?: AlertVariant;\n}) => string = cva(\n [\n 'relative',\n 'flex',\n 'w-full',\n 'items-start',\n 'gap-3',\n 'rounded-card',\n 'border',\n 'p-4',\n 'text-sm',\n ],\n {\n variants: {\n variant: {\n info: 'bg-primary-subtle text-primary-subtle-foreground border-primary/20',\n success: 'bg-success-subtle text-success-subtle-foreground border-success/20',\n warning: 'bg-warn-subtle text-warn-subtle-foreground border-warn/20',\n destructive: 'bg-warn text-warn-foreground border-warn',\n },\n },\n defaultVariants: {\n variant: 'info',\n },\n },\n);\n\n/**\n * CVA variants for the alert close button.\n *\n * @tokens `--color-ring`, `--radius-card`\n */\nexport const alertCloseButtonVariants: (props?: {\n variant?: AlertVariant;\n}) => string = cva(\n [\n 'inline-flex',\n 'items-center',\n 'justify-center',\n 'shrink-0',\n 'rounded-card',\n 'p-0.5',\n 'transition-colors',\n 'outline-none',\n 'focus-visible:outline-2',\n 'focus-visible:outline-offset-2',\n 'focus-visible:outline-[--color-ring]',\n ],\n {\n variants: {\n variant: {\n info: 'text-primary-subtle-foreground/60 hover:text-primary-subtle-foreground hover:bg-primary-subtle-foreground/10',\n success: 'text-success-subtle-foreground/60 hover:text-success-subtle-foreground hover:bg-success-subtle-foreground/10',\n warning: 'text-warn-subtle-foreground/60 hover:text-warn-subtle-foreground hover:bg-warn-subtle-foreground/10',\n destructive: 'text-warn-foreground/60 hover:text-warn-foreground hover:bg-warn-foreground/10',\n },\n },\n defaultVariants: {\n variant: 'info',\n },\n },\n);\n\nexport type AlertVariants = VariantProps<typeof alertVariants>;\n","export { mergeClasses } from 'ngx-com/utils';\n\nimport type { AlertVariant } from './alert.variants';\n\n/** Default Lucide icon names per alert variant. */\nexport const DEFAULT_ALERT_ICONS: Record<AlertVariant, string> = {\n info: 'info',\n success: 'circle-check',\n warning: 'triangle-alert',\n destructive: 'circle-x',\n};\n","import { Directive } from '@angular/core';\n\n/**\n * Custom icon slot for `com-alert`.\n *\n * When present, the alert suppresses the default auto-mapped icon\n * and renders this projected content instead.\n *\n * @example\n * ```html\n * <com-alert variant=\"success\">\n * <com-icon comAlertIcon name=\"party-popper\" size=\"md\" aria-hidden=\"true\" />\n * <h4 comAlertTitle>Congratulations!</h4>\n * </com-alert>\n * ```\n */\n@Directive({\n selector: '[comAlertIcon]',\n host: {\n class: 'shrink-0 mt-0.5',\n },\n})\nexport class ComAlertIcon {}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {\n InputSignal,\n InputSignalWithTransform,\n OutputEmitterRef,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { ComIcon } from 'ngx-com/components/icon';\nimport { alertVariants, alertCloseButtonVariants } from './alert.variants';\nimport type { AlertVariant } from './alert.variants';\nimport { mergeClasses, DEFAULT_ALERT_ICONS } from './alert.utils';\nimport { ComAlertIcon } from './alert-icon.directive';\n\n/**\n * Inline alert component for displaying contextual messages.\n *\n * Unlike toasts (ephemeral overlays), alerts are embedded in the page flow\n * and persist until dismissed or the condition changes.\n *\n * @tokens `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n * `--color-success-subtle`, `--color-success-subtle-foreground`,\n * `--color-warn-subtle`, `--color-warn-subtle-foreground`,\n * `--color-warn`, `--color-warn-foreground`,\n * `--radius-card`, `--color-ring`\n *\n * @example Info alert with title and description\n * ```html\n * <com-alert>\n * <h4 comAlertTitle>Heads up</h4>\n * <p comAlertDescription>You can add components using the CLI.</p>\n * </com-alert>\n * ```\n *\n * @example Dismissible warning\n * ```html\n * <com-alert variant=\"warning\" dismissible (dismissed)=\"onDismissed()\">\n * <h4 comAlertTitle>Storage almost full</h4>\n * <p comAlertDescription>You have used 90% of your storage quota.</p>\n * </com-alert>\n * ```\n */\n@Component({\n selector: 'com-alert',\n exportAs: 'comAlert',\n template: `\n @if (visible()) {\n <div\n [class]=\"alertClasses()\"\n [attr.role]=\"ariaRole()\"\n [attr.aria-live]=\"ariaLive()\"\n [attr.data-state]=\"animatingOut() ? 'closed' : 'open'\"\n (animationend)=\"onAnimationEnd()\"\n >\n @if (customIcon()) {\n <ng-content select=\"[comAlertIcon]\" />\n } @else {\n <com-icon\n [name]=\"defaultIconName()\"\n size=\"md\"\n class=\"mt-0.5 shrink-0\"\n aria-hidden=\"true\"\n />\n }\n <div class=\"flex-1 min-w-0\">\n <ng-content />\n </div>\n @if (dismissible()) {\n <button\n type=\"button\"\n [class]=\"closeButtonClasses()\"\n aria-label=\"Dismiss\"\n (click)=\"dismiss()\"\n >\n <com-icon name=\"x\" size=\"sm\" aria-hidden=\"true\" />\n </button>\n }\n </div>\n }\n `,\n styles: `\n :host {\n display: block;\n }\n\n [data-state='open'] {\n --tw-enter-opacity: 0;\n --tw-enter-translate-y: 0;\n }\n\n [data-state='closed'] {\n --tw-exit-opacity: 0;\n --tw-exit-translate-y: 0;\n }\n\n @media (prefers-reduced-motion: reduce) {\n [data-state='open'],\n [data-state='closed'] {\n animation: none;\n }\n }\n `,\n imports: [ComIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class ComAlertComponent {\n /** Semantic color variant. */\n readonly variant: InputSignal<AlertVariant> = input<AlertVariant>('info');\n\n /** Shows a dismiss button when true. */\n readonly dismissible: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Consumer CSS classes — merged with variant classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Emitted when the dismiss button is clicked. */\n readonly dismissed: OutputEmitterRef<void> = output<void>();\n\n /** @internal Detects whether a custom icon directive is projected. */\n protected readonly customIcon: Signal<ComAlertIcon | undefined> =\n contentChild<ComAlertIcon>(ComAlertIcon);\n\n /** @internal Controls visibility for dismiss animation. */\n protected readonly visible: WritableSignal<boolean> = signal(true);\n\n /** @internal Tracks exit animation state. */\n protected readonly animatingOut: WritableSignal<boolean> = signal(false);\n\n /** Default icon name auto-mapped from variant. */\n protected readonly defaultIconName: Signal<string> = computed(\n () => DEFAULT_ALERT_ICONS[this.variant()],\n );\n\n /** ARIA role based on variant. */\n protected readonly ariaRole: Signal<string> = computed(() => {\n const v = this.variant();\n return v === 'warning' || v === 'destructive' ? 'alert' : 'status';\n });\n\n /** ARIA live region politeness. */\n protected readonly ariaLive: Signal<string> = computed(() => {\n const v = this.variant();\n return v === 'warning' || v === 'destructive' ? 'assertive' : 'polite';\n });\n\n /** Computed alert container classes. */\n protected readonly alertClasses: Signal<string> = computed(() =>\n mergeClasses(\n alertVariants({ variant: this.variant() }),\n this.animatingOut()\n ? 'animate-out fade-out-0'\n : 'animate-in fade-in-0',\n this.userClass(),\n ),\n );\n\n /** Computed close button classes. */\n protected readonly closeButtonClasses: Signal<string> = computed(() =>\n mergeClasses(alertCloseButtonVariants({ variant: this.variant() })),\n );\n\n /** @internal Triggers dismiss animation, then removes from DOM. */\n protected dismiss(): void {\n this.animatingOut.set(true);\n this.dismissed.emit();\n }\n\n /** @internal Removes element after exit animation completes. */\n protected onAnimationEnd(): void {\n if (this.animatingOut()) {\n this.visible.set(false);\n }\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Title slot for `com-alert`.\n *\n * Apply to any heading element. Consumer picks the semantic level (h3, h4, etc.).\n *\n * @example\n * ```html\n * <com-alert>\n * <h4 comAlertTitle>Heads up</h4>\n * </com-alert>\n * ```\n *\n * @tokens `--color-foreground`\n */\n@Directive({\n selector: '[comAlertTitle]',\n host: {\n class: 'text-sm font-semibold leading-tight',\n },\n})\nexport class ComAlertTitle {}\n","import { Directive } from '@angular/core';\n\n/**\n * Description slot for `com-alert`.\n *\n * Inherits text color from the parent alert variant.\n *\n * @example\n * ```html\n * <com-alert>\n * <p comAlertDescription>Your session will expire in 5 minutes.</p>\n * </com-alert>\n * ```\n */\n@Directive({\n selector: '[comAlertDescription]',\n host: {\n class: 'text-sm',\n },\n})\nexport class ComAlertDescription {}\n","import { Directive } from '@angular/core';\n\n/**\n * Actions slot for `com-alert`.\n *\n * Container for action buttons. Place buttons inside.\n *\n * @example\n * ```html\n * <com-alert variant=\"destructive\">\n * <h4 comAlertTitle>Account suspended</h4>\n * <p comAlertDescription>Contact support to restore access.</p>\n * <div comAlertActions>\n * <button comButton variant=\"outline\" size=\"sm\">Contact Support</button>\n * </div>\n * </com-alert>\n * ```\n */\n@Directive({\n selector: '[comAlertActions]',\n host: {\n class: 'mt-3 flex items-center gap-2',\n },\n})\nexport class ComAlertActions {}\n","// Public API for the alert component\n\n// Main component\nexport { ComAlertComponent } from './alert.component';\n\n// Content projection directives\nexport { ComAlertIcon } from './alert-icon.directive';\nexport { ComAlertTitle } from './alert-title.directive';\nexport { ComAlertDescription } from './alert-description.directive';\nexport { ComAlertActions } from './alert-actions.directive';\n\n// Variants (for advanced customization)\nexport { alertVariants, alertCloseButtonVariants } from './alert.variants';\n\nexport type {\n AlertVariant,\n AlertVariants,\n} from './alert.variants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ const buttonVariants = cva([
7
7
  'inline-flex items-center justify-center',
8
8
  'font-medium whitespace-nowrap select-none',
9
9
  'transition-colors duration-150',
10
- 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring',
10
+ 'focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',
11
11
  'disabled:pointer-events-none disabled:bg-disabled disabled:text-disabled-foreground',
12
12
  'aria-disabled:pointer-events-none aria-disabled:bg-disabled aria-disabled:text-disabled-foreground',
13
13
  ], {
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-com-components-button.mjs","sources":["../../../projects/com/components/button/button.variants.ts","../../../projects/com/components/button/button.directive.ts","../../../projects/com/components/button/ngx-com-components-button.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\nexport type ButtonVariant = 'solid' | 'outline' | 'ghost' | 'link';\nexport type ButtonColor = 'primary' | 'accent' | 'warn' | 'muted';\nexport type ButtonSize = 'sm' | 'md' | 'lg' | 'icon';\n\nexport const buttonVariants: (props?: {\n variant?: ButtonVariant;\n color?: ButtonColor;\n size?: ButtonSize;\n fullWidth?: boolean;\n}) => string = cva(\n [\n 'inline-flex items-center justify-center',\n 'font-medium whitespace-nowrap select-none',\n 'transition-colors duration-150',\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring',\n 'disabled:pointer-events-none disabled:bg-disabled disabled:text-disabled-foreground',\n 'aria-disabled:pointer-events-none aria-disabled:bg-disabled aria-disabled:text-disabled-foreground',\n ],\n {\n variants: {\n variant: {\n solid: '',\n outline: 'border bg-transparent',\n ghost: 'bg-transparent',\n link: 'bg-transparent underline-offset-4 hover:underline',\n },\n color: {\n primary: '',\n accent: '',\n warn: '',\n muted: '',\n },\n size: {\n sm: 'h-8 px-3 text-sm rounded-control-sm gap-1.5',\n md: 'h-10 px-4 text-sm rounded-control gap-2',\n lg: 'h-12 px-6 text-base rounded-control gap-2.5',\n icon: 'h-10 w-10 rounded-control',\n },\n fullWidth: {\n true: 'w-full',\n false: '',\n },\n },\n compoundVariants: [\n // Solid variants\n { variant: 'solid', color: 'primary', class: 'bg-primary text-primary-foreground hover:bg-primary-hover' },\n { variant: 'solid', color: 'accent', class: 'bg-accent text-accent-foreground hover:bg-accent-hover' },\n { variant: 'solid', color: 'warn', class: 'bg-warn text-warn-foreground hover:bg-warn-hover' },\n { variant: 'solid', color: 'muted', class: 'bg-muted text-muted-foreground hover:bg-muted-hover' },\n\n // Outline variants\n { variant: 'outline', color: 'primary', class: 'border-primary text-primary hover:bg-primary-subtle' },\n { variant: 'outline', color: 'accent', class: 'border-accent text-accent hover:bg-accent-subtle' },\n { variant: 'outline', color: 'warn', class: 'border-warn text-warn hover:bg-warn-subtle' },\n { variant: 'outline', color: 'muted', class: 'border-border text-muted-foreground hover:bg-muted' },\n\n // Ghost variants\n { variant: 'ghost', color: 'primary', class: 'text-primary hover:bg-primary-subtle' },\n { variant: 'ghost', color: 'accent', class: 'text-accent hover:bg-accent-subtle' },\n { variant: 'ghost', color: 'warn', class: 'text-warn hover:bg-warn-subtle' },\n { variant: 'ghost', color: 'muted', class: 'text-muted-foreground hover:bg-muted' },\n\n // Link variants\n { variant: 'link', color: 'primary', class: 'text-primary' },\n { variant: 'link', color: 'accent', class: 'text-accent' },\n { variant: 'link', color: 'warn', class: 'text-warn' },\n { variant: 'link', color: 'muted', class: 'text-muted-foreground' },\n\n // Link size override — remove height/padding constraints\n { variant: 'link', size: 'sm', class: 'h-auto px-0' },\n { variant: 'link', size: 'md', class: 'h-auto px-0' },\n { variant: 'link', size: 'lg', class: 'h-auto px-0' },\n { variant: 'link', size: 'icon', class: 'h-auto w-auto px-0' },\n ],\n defaultVariants: {\n variant: 'solid',\n color: 'primary',\n size: 'md',\n fullWidth: false,\n },\n }\n);\n\nexport type ButtonVariants = VariantProps<typeof buttonVariants>;\n","import { booleanAttribute, computed, Directive, input } from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { mergeClasses } from './button.utils';\nimport { buttonVariants, type ButtonVariant, type ButtonColor, type ButtonSize } from './button.variants';\n\n/**\n * Button directive — applies styled button classes to native `<button>` and `<a>` elements.\n *\n * Using a directive on native elements preserves:\n * - Full control over native attributes (`type=\"submit\"`, `routerLink`, `download`, etc.)\n * - Native accessibility (keyboard handling, focus, ARIA)\n * - No wrapper elements in the DOM\n *\n * @tokens `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`, `--color-primary-subtle`,\n * `--color-accent`, `--color-accent-foreground`, `--color-accent-hover`, `--color-accent-subtle`,\n * `--color-warn`, `--color-warn-foreground`, `--color-warn-hover`, `--color-warn-subtle`,\n * `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`,\n * `--color-disabled`, `--color-disabled-foreground`,\n * `--color-border`, `--color-ring`\n *\n * @example Basic usage\n * ```html\n * <button comButton>Save</button>\n * <button comButton variant=\"outline\" color=\"accent\">Cancel</button>\n * ```\n *\n * @example Link button\n * ```html\n * <a comButton variant=\"link\" href=\"/docs\">Documentation</a>\n * <a comButton variant=\"outline\" routerLink=\"/dashboard\">Dashboard</a>\n * ```\n *\n * @example Icon button\n * ```html\n * <button comButton variant=\"ghost\" size=\"icon\" aria-label=\"Settings\">\n * <svg>...</svg>\n * </button>\n * ```\n *\n * @example Full width\n * ```html\n * <button comButton fullWidth>Submit Application</button>\n * ```\n */\n@Directive({\n selector: 'button[comButton], a[comButton]',\n exportAs: 'comButton',\n host: {\n '[class]': 'computedClass()',\n '[attr.aria-disabled]': 'ariaDisabled()',\n },\n})\nexport class ComButton {\n readonly variant: InputSignal<ButtonVariant> = input<ButtonVariant>('solid');\n readonly color: InputSignal<ButtonColor> = input<ButtonColor>('primary');\n readonly size: InputSignal<ButtonSize> = input<ButtonSize>('md');\n readonly fullWidth: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n readonly userClass: InputSignal<string> = input('', { alias: 'class' });\n\n protected readonly ariaDisabled: Signal<'true' | null> = computed(() =>\n this.disabled() ? 'true' : null\n );\n\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n buttonVariants({\n variant: this.variant(),\n color: this.color(),\n size: this.size(),\n fullWidth: this.fullWidth(),\n }),\n this.disabled() && 'pointer-events-none',\n this.userClass()\n )\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-com-components-button.mjs","sources":["../../../projects/com/components/button/button.variants.ts","../../../projects/com/components/button/button.directive.ts","../../../projects/com/components/button/ngx-com-components-button.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\nexport type ButtonVariant = 'solid' | 'outline' | 'ghost' | 'link';\nexport type ButtonColor = 'primary' | 'accent' | 'warn' | 'muted';\nexport type ButtonSize = 'sm' | 'md' | 'lg' | 'icon';\n\nexport const buttonVariants: (props?: {\n variant?: ButtonVariant;\n color?: ButtonColor;\n size?: ButtonSize;\n fullWidth?: boolean;\n}) => string = cva(\n [\n 'inline-flex items-center justify-center',\n 'font-medium whitespace-nowrap select-none',\n 'transition-colors duration-150',\n 'focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n 'disabled:pointer-events-none disabled:bg-disabled disabled:text-disabled-foreground',\n 'aria-disabled:pointer-events-none aria-disabled:bg-disabled aria-disabled:text-disabled-foreground',\n ],\n {\n variants: {\n variant: {\n solid: '',\n outline: 'border bg-transparent',\n ghost: 'bg-transparent',\n link: 'bg-transparent underline-offset-4 hover:underline',\n },\n color: {\n primary: '',\n accent: '',\n warn: '',\n muted: '',\n },\n size: {\n sm: 'h-8 px-3 text-sm rounded-control-sm gap-1.5',\n md: 'h-10 px-4 text-sm rounded-control gap-2',\n lg: 'h-12 px-6 text-base rounded-control gap-2.5',\n icon: 'h-10 w-10 rounded-control',\n },\n fullWidth: {\n true: 'w-full',\n false: '',\n },\n },\n compoundVariants: [\n // Solid variants\n { variant: 'solid', color: 'primary', class: 'bg-primary text-primary-foreground hover:bg-primary-hover' },\n { variant: 'solid', color: 'accent', class: 'bg-accent text-accent-foreground hover:bg-accent-hover' },\n { variant: 'solid', color: 'warn', class: 'bg-warn text-warn-foreground hover:bg-warn-hover' },\n { variant: 'solid', color: 'muted', class: 'bg-muted text-muted-foreground hover:bg-muted-hover' },\n\n // Outline variants\n { variant: 'outline', color: 'primary', class: 'border-primary text-primary hover:bg-primary-subtle' },\n { variant: 'outline', color: 'accent', class: 'border-accent text-accent hover:bg-accent-subtle' },\n { variant: 'outline', color: 'warn', class: 'border-warn text-warn hover:bg-warn-subtle' },\n { variant: 'outline', color: 'muted', class: 'border-border text-muted-foreground hover:bg-muted' },\n\n // Ghost variants\n { variant: 'ghost', color: 'primary', class: 'text-primary hover:bg-primary-subtle' },\n { variant: 'ghost', color: 'accent', class: 'text-accent hover:bg-accent-subtle' },\n { variant: 'ghost', color: 'warn', class: 'text-warn hover:bg-warn-subtle' },\n { variant: 'ghost', color: 'muted', class: 'text-muted-foreground hover:bg-muted' },\n\n // Link variants\n { variant: 'link', color: 'primary', class: 'text-primary' },\n { variant: 'link', color: 'accent', class: 'text-accent' },\n { variant: 'link', color: 'warn', class: 'text-warn' },\n { variant: 'link', color: 'muted', class: 'text-muted-foreground' },\n\n // Link size override — remove height/padding constraints\n { variant: 'link', size: 'sm', class: 'h-auto px-0' },\n { variant: 'link', size: 'md', class: 'h-auto px-0' },\n { variant: 'link', size: 'lg', class: 'h-auto px-0' },\n { variant: 'link', size: 'icon', class: 'h-auto w-auto px-0' },\n ],\n defaultVariants: {\n variant: 'solid',\n color: 'primary',\n size: 'md',\n fullWidth: false,\n },\n }\n);\n\nexport type ButtonVariants = VariantProps<typeof buttonVariants>;\n","import { booleanAttribute, computed, Directive, input } from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { mergeClasses } from './button.utils';\nimport { buttonVariants, type ButtonVariant, type ButtonColor, type ButtonSize } from './button.variants';\n\n/**\n * Button directive — applies styled button classes to native `<button>` and `<a>` elements.\n *\n * Using a directive on native elements preserves:\n * - Full control over native attributes (`type=\"submit\"`, `routerLink`, `download`, etc.)\n * - Native accessibility (keyboard handling, focus, ARIA)\n * - No wrapper elements in the DOM\n *\n * @tokens `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`, `--color-primary-subtle`,\n * `--color-accent`, `--color-accent-foreground`, `--color-accent-hover`, `--color-accent-subtle`,\n * `--color-warn`, `--color-warn-foreground`, `--color-warn-hover`, `--color-warn-subtle`,\n * `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`,\n * `--color-disabled`, `--color-disabled-foreground`,\n * `--color-border`, `--color-ring`\n *\n * @example Basic usage\n * ```html\n * <button comButton>Save</button>\n * <button comButton variant=\"outline\" color=\"accent\">Cancel</button>\n * ```\n *\n * @example Link button\n * ```html\n * <a comButton variant=\"link\" href=\"/docs\">Documentation</a>\n * <a comButton variant=\"outline\" routerLink=\"/dashboard\">Dashboard</a>\n * ```\n *\n * @example Icon button\n * ```html\n * <button comButton variant=\"ghost\" size=\"icon\" aria-label=\"Settings\">\n * <svg>...</svg>\n * </button>\n * ```\n *\n * @example Full width\n * ```html\n * <button comButton fullWidth>Submit Application</button>\n * ```\n */\n@Directive({\n selector: 'button[comButton], a[comButton]',\n exportAs: 'comButton',\n host: {\n '[class]': 'computedClass()',\n '[attr.aria-disabled]': 'ariaDisabled()',\n },\n})\nexport class ComButton {\n readonly variant: InputSignal<ButtonVariant> = input<ButtonVariant>('solid');\n readonly color: InputSignal<ButtonColor> = input<ButtonColor>('primary');\n readonly size: InputSignal<ButtonSize> = input<ButtonSize>('md');\n readonly fullWidth: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n readonly userClass: InputSignal<string> = input('', { alias: 'class' });\n\n protected readonly ariaDisabled: Signal<'true' | null> = computed(() =>\n this.disabled() ? 'true' : null\n );\n\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n buttonVariants({\n variant: this.variant(),\n color: this.color(),\n size: this.size(),\n fullWidth: this.fullWidth(),\n }),\n this.disabled() && 'pointer-events-none',\n this.userClass()\n )\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -340,10 +340,9 @@ const calendarCellVariants = cva(
340
340
  'select-none',
341
341
  'transition-colors',
342
342
  'duration-150',
343
- 'outline-none',
344
- 'focus-visible:ring-2',
345
- 'focus-visible:ring-offset-2',
346
- 'focus-visible:ring-ring',
343
+ 'focus-visible:outline-[1px]',
344
+ 'focus-visible:outline-offset-2',
345
+ 'focus-visible:outline-ring',
347
346
  ], {
348
347
  variants: {
349
348
  view: {
@@ -483,11 +482,10 @@ const calendarHeaderButtonVariants = cva([
483
482
  'select-none',
484
483
  'transition-colors',
485
484
  'duration-150',
486
- 'outline-none',
487
485
  'text-foreground',
488
- 'focus-visible:ring-2',
489
- 'focus-visible:ring-offset-2',
490
- 'focus-visible:ring-ring',
486
+ 'focus-visible:outline-[1px]',
487
+ 'focus-visible:outline-offset-2',
488
+ 'focus-visible:outline-ring',
491
489
  'disabled:cursor-not-allowed',
492
490
  'disabled:text-disabled-foreground',
493
491
  ], {
@@ -3118,14 +3116,12 @@ const datepickerTriggerVariants = cva([
3118
3116
  'border',
3119
3117
  'bg-input-background',
3120
3118
  'text-input-foreground',
3121
- 'ring-offset-background',
3122
3119
  'transition-colors',
3123
3120
  'duration-150',
3124
3121
  'placeholder:text-input-placeholder',
3125
- 'focus-within:outline-none',
3126
- 'focus-within:ring-2',
3127
- 'focus-within:ring-offset-2',
3128
- 'focus-within:ring-ring',
3122
+ 'focus-within:outline-[1px]',
3123
+ 'focus-within:outline-offset-2',
3124
+ 'focus-within:outline-ring',
3129
3125
  'cursor-pointer',
3130
3126
  ], {
3131
3127
  variants: {
@@ -3159,15 +3155,15 @@ const datepickerTriggerVariants = cva([
3159
3155
  default: [],
3160
3156
  error: [
3161
3157
  'border-warn',
3162
- 'focus-within:ring-warn',
3158
+ 'focus-within:outline-warn',
3163
3159
  ],
3164
3160
  success: [
3165
3161
  'border-success',
3166
- 'focus-within:ring-success',
3162
+ 'focus-within:outline-success',
3167
3163
  ],
3168
3164
  },
3169
3165
  open: {
3170
- true: ['ring-2', 'ring-ring', 'border-primary'],
3166
+ true: ['outline-[1px]', 'outline-ring', 'border-primary'],
3171
3167
  false: [],
3172
3168
  },
3173
3169
  },
@@ -3240,9 +3236,9 @@ const datepickerIconVariants = cva([
3240
3236
  'text-muted-foreground',
3241
3237
  'transition-colors',
3242
3238
  'hover:text-foreground',
3243
- 'focus:outline-none',
3244
- 'focus:ring-1',
3245
- 'focus:ring-ring',
3239
+ 'focus-visible:outline-[1px]',
3240
+ 'focus-visible:outline-offset-2',
3241
+ 'focus-visible:outline-ring',
3246
3242
  'rounded-interactive-sm',
3247
3243
  ], {
3248
3244
  variants: {
@@ -3269,9 +3265,9 @@ const datepickerClearVariants = cva([
3269
3265
  'text-muted-foreground',
3270
3266
  'transition-colors',
3271
3267
  'hover:text-foreground',
3272
- 'focus:outline-none',
3273
- 'focus:ring-1',
3274
- 'focus:ring-ring',
3268
+ 'focus-visible:outline-[1px]',
3269
+ 'focus-visible:outline-offset-2',
3270
+ 'focus-visible:outline-ring',
3275
3271
  'shrink-0',
3276
3272
  ], {
3277
3273
  variants: {
@@ -3350,10 +3346,9 @@ const datepickerFooterButtonVariants = cva([
3350
3346
  'rounded-control-sm',
3351
3347
  'font-medium',
3352
3348
  'transition-colors',
3353
- 'focus:outline-none',
3354
- 'focus:ring-2',
3355
- 'focus:ring-ring',
3356
- 'focus:ring-offset-2',
3349
+ 'focus-visible:outline-[1px]',
3350
+ 'focus-visible:outline-offset-2',
3351
+ 'focus-visible:outline-ring',
3357
3352
  ], {
3358
3353
  variants: {
3359
3354
  size: {
@@ -3424,11 +3419,9 @@ const timepickerContainerVariants = cva([
3424
3419
  'border-input-border',
3425
3420
  'bg-input-background',
3426
3421
  'text-input-foreground',
3427
- 'ring-offset-background',
3428
- 'focus-within:outline-none',
3429
- 'focus-within:ring-2',
3430
- 'focus-within:ring-offset-2',
3431
- 'focus-within:ring-ring',
3422
+ 'focus-within:outline-[1px]',
3423
+ 'focus-within:outline-offset-2',
3424
+ 'focus-within:outline-ring',
3432
3425
  ],
3433
3426
  embedded: [
3434
3427
  'border-transparent',
@@ -3445,11 +3438,11 @@ const timepickerContainerVariants = cva([
3445
3438
  default: [],
3446
3439
  error: [
3447
3440
  'border-warn',
3448
- 'focus-within:ring-warn',
3441
+ 'focus-within:outline-warn',
3449
3442
  ],
3450
3443
  success: [
3451
3444
  'border-success',
3452
- 'focus-within:ring-success',
3445
+ 'focus-within:outline-success',
3453
3446
  ],
3454
3447
  },
3455
3448
  },
@@ -3547,9 +3540,9 @@ const timepickerPeriodVariants = cva([
3547
3540
  'bg-muted',
3548
3541
  'text-muted-foreground',
3549
3542
  'hover:bg-muted-hover',
3550
- 'focus:outline-none',
3551
- 'focus:ring-1',
3552
- 'focus:ring-ring',
3543
+ 'focus-visible:outline-[1px]',
3544
+ 'focus-visible:outline-offset-2',
3545
+ 'focus-visible:outline-ring',
3553
3546
  ], {
3554
3547
  variants: {
3555
3548
  size: {