ngx-com 0.1.9 → 0.1.11

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, booleanAttribute, computed, ViewEncapsulation, ChangeDetectionStrategy, Component, Directive } from '@angular/core';
2
+ import { input, booleanAttribute, output, computed, ViewEncapsulation, ChangeDetectionStrategy, Component, Directive } from '@angular/core';
3
3
  import { mergeClasses } from 'ngx-com/utils';
4
4
  import { cva } from 'class-variance-authority';
5
5
 
@@ -14,7 +14,7 @@ const cardVariants = cva('relative flex flex-col overflow-hidden', {
14
14
  variant: {
15
15
  elevated: 'bg-card text-card-foreground shadow-card',
16
16
  outlined: 'bg-card text-card-foreground border border-border',
17
- filled: 'bg-muted text-foreground',
17
+ filled: 'bg-muted text-muted-foreground',
18
18
  ghost: 'bg-transparent text-foreground',
19
19
  },
20
20
  padding: {
@@ -31,7 +31,7 @@ const cardVariants = cva('relative flex flex-col overflow-hidden', {
31
31
  xl: 'rounded-[var(--radius-xl)]',
32
32
  },
33
33
  interactive: {
34
- true: 'cursor-pointer focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',
34
+ true: 'cursor-pointer outline-none focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',
35
35
  false: '',
36
36
  },
37
37
  },
@@ -159,8 +159,8 @@ const cardBadgeVariants = cva('absolute z-10 inline-flex items-center rounded-pi
159
159
  * The card is a pure container with no imposed structure.
160
160
  * Use card directives (comCardHeader, comCardContent, etc.) to compose layouts.
161
161
  *
162
- * @tokens `--color-popover`, `--color-popover-foreground`, `--color-muted`, `--color-muted-hover`,
163
- * `--color-foreground`, `--color-border`, `--color-primary`, `--color-ring`
162
+ * @tokens `--color-card`, `--color-card-foreground`, `--color-muted`, `--color-muted-foreground`,
163
+ * `--color-muted-hover`, `--color-border`, `--color-primary`, `--color-ring`, `--shadow-card`
164
164
  *
165
165
  * @example Basic card
166
166
  * ```html
@@ -194,14 +194,23 @@ class ComCard {
194
194
  interactive = input(false, { ...(ngDevMode ? { debugName: "interactive" } : {}), transform: booleanAttribute });
195
195
  /** Consumer CSS classes - merged with variant classes. */
196
196
  userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : {}), alias: 'class' });
197
+ /** Emitted when an interactive card is activated via keyboard (Enter or Space). */
198
+ cardActivated = output();
197
199
  computedClass = computed(() => mergeClasses(cardVariants({
198
200
  variant: this.variant(),
199
201
  padding: this.padding(),
200
202
  radius: this.radius(),
201
203
  interactive: this.interactive(),
202
204
  }), this.userClass()), ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
205
+ // SSR-safe: only called from user interaction handlers
206
+ onKeyActivate(event) {
207
+ if (!this.interactive())
208
+ return;
209
+ event.preventDefault();
210
+ this.cardActivated.emit();
211
+ }
203
212
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
204
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: ComCard, isStandalone: true, selector: "com-card", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, exportAs: ["comCard"], ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
213
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: ComCard, isStandalone: true, selector: "com-card", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cardActivated: "cardActivated" }, host: { listeners: { "keydown.enter": "onKeyActivate($event)", "keydown.space": "onKeyActivate($event)" }, properties: { "class": "computedClass()", "attr.tabindex": "interactive() ? 0 : null", "attr.role": "interactive() ? \"button\" : null" } }, exportAs: ["comCard"], ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
205
214
  }
206
215
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComCard, decorators: [{
207
216
  type: Component,
@@ -213,24 +222,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
213
222
  encapsulation: ViewEncapsulation.None,
214
223
  host: {
215
224
  '[class]': 'computedClass()',
225
+ '[attr.tabindex]': 'interactive() ? 0 : null',
226
+ '[attr.role]': 'interactive() ? "button" : null',
227
+ '(keydown.enter)': 'onKeyActivate($event)',
228
+ '(keydown.space)': 'onKeyActivate($event)',
216
229
  },
217
230
  }]
218
- }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }], radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
231
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }], radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], cardActivated: [{ type: i0.Output, args: ["cardActivated"] }] } });
219
232
 
220
233
  /**
221
234
  * Card header directive - top section for title and actions.
222
235
  *
223
- * Uses justify-between so it naturally supports a title group on the left
224
- * and an action element (icon button, menu trigger) on the right.
236
+ * Uses `flex` with `justify-between` so it naturally supports a title group
237
+ * on the left and an action element (icon button, menu trigger) on the right.
225
238
  *
226
- * @example Header with title
239
+ * **Important:** When using both `comCardTitle` and `comCardSubtitle`,
240
+ * wrap them in a container `<div>` so they stack vertically as a single
241
+ * flex child. Without the wrapper, `justify-between` will push them apart.
242
+ *
243
+ * @example Header with title only
227
244
  * ```html
228
245
  * <div comCardHeader>
229
246
  * <h3 comCardTitle>Card Title</h3>
230
247
  * </div>
231
248
  * ```
232
249
  *
233
- * @example Header with title and action
250
+ * @example Header with title, subtitle, and action
234
251
  * ```html
235
252
  * <div comCardHeader>
236
253
  * <div>
@@ -353,9 +370,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
353
370
  class ComCardFooter {
354
371
  /** Horizontal alignment of footer content. */
355
372
  align = input('end', ...(ngDevMode ? [{ debugName: "align" }] : []));
356
- computedClass = computed(() => cardFooterVariants({ align: this.align() }), ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
373
+ /** Consumer CSS classes - merged with variant classes. */
374
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : {}), alias: 'class' });
375
+ computedClass = computed(() => mergeClasses(cardFooterVariants({ align: this.align() }), this.userClass()), ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
357
376
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComCardFooter, deps: [], target: i0.ɵɵFactoryTarget.Directive });
358
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ComCardFooter, isStandalone: true, selector: "[comCardFooter]", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, exportAs: ["comCardFooter"], ngImport: i0 });
377
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ComCardFooter, isStandalone: true, selector: "[comCardFooter]", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, exportAs: ["comCardFooter"], ngImport: i0 });
359
378
  }
360
379
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComCardFooter, decorators: [{
361
380
  type: Directive,
@@ -366,7 +385,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
366
385
  '[class]': 'computedClass()',
367
386
  },
368
387
  }]
369
- }], propDecorators: { align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }] } });
388
+ }], propDecorators: { align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
370
389
 
371
390
  /**
372
391
  * Card actions directive - dedicated button row for primary card actions.
@@ -396,12 +415,14 @@ class ComCardActions {
396
415
  align = input('end', ...(ngDevMode ? [{ debugName: "align" }] : []));
397
416
  /** Layout direction - row or column. */
398
417
  direction = input('row', ...(ngDevMode ? [{ debugName: "direction" }] : []));
399
- computedClass = computed(() => cardActionsVariants({
418
+ /** Consumer CSS classes - merged with variant classes. */
419
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : {}), alias: 'class' });
420
+ computedClass = computed(() => mergeClasses(cardActionsVariants({
400
421
  align: this.align(),
401
422
  direction: this.direction(),
402
- }), ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
423
+ }), this.userClass()), ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
403
424
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComCardActions, deps: [], target: i0.ɵɵFactoryTarget.Directive });
404
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ComCardActions, isStandalone: true, selector: "[comCardActions]", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, exportAs: ["comCardActions"], ngImport: i0 });
425
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ComCardActions, isStandalone: true, selector: "[comCardActions]", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, exportAs: ["comCardActions"], ngImport: i0 });
405
426
  }
406
427
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComCardActions, decorators: [{
407
428
  type: Directive,
@@ -412,7 +433,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
412
433
  '[class]': 'computedClass()',
413
434
  },
414
435
  }]
415
- }], propDecorators: { align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }] } });
436
+ }], propDecorators: { align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
416
437
 
417
438
  /**
418
439
  * Card media directive - image/video slot with aspect ratio handling.
@@ -434,9 +455,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
434
455
  class ComCardMedia {
435
456
  /** Media positioning within the card. */
436
457
  position = input('top', ...(ngDevMode ? [{ debugName: "position" }] : []));
437
- computedClass = computed(() => cardMediaVariants({ position: this.position() }), ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
458
+ /** Consumer CSS classes - merged with variant classes. */
459
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : {}), alias: 'class' });
460
+ computedClass = computed(() => mergeClasses(cardMediaVariants({ position: this.position() }), this.userClass()), ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
438
461
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComCardMedia, deps: [], target: i0.ɵɵFactoryTarget.Directive });
439
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ComCardMedia, isStandalone: true, selector: "[comCardMedia]", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, exportAs: ["comCardMedia"], ngImport: i0 });
462
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ComCardMedia, isStandalone: true, selector: "[comCardMedia]", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, exportAs: ["comCardMedia"], ngImport: i0 });
440
463
  }
441
464
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComCardMedia, decorators: [{
442
465
  type: Directive,
@@ -447,7 +470,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
447
470
  '[class]': 'computedClass()',
448
471
  },
449
472
  }]
450
- }], propDecorators: { position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }] } });
473
+ }], propDecorators: { position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
451
474
 
452
475
  /**
453
476
  * Card divider directive - horizontal rule between card sections.
@@ -513,12 +536,14 @@ class ComCardAccent {
513
536
  color = input('primary', ...(ngDevMode ? [{ debugName: "color" }] : []));
514
537
  /** Position of the accent strip. */
515
538
  position = input('top', ...(ngDevMode ? [{ debugName: "position" }] : []));
516
- computedClass = computed(() => cardAccentVariants({
539
+ /** Consumer CSS classes - merged with variant classes. */
540
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : {}), alias: 'class' });
541
+ computedClass = computed(() => mergeClasses(cardAccentVariants({
517
542
  color: this.color(),
518
543
  position: this.position(),
519
- }), ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
544
+ }), this.userClass()), ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
520
545
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComCardAccent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
521
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ComCardAccent, isStandalone: true, selector: "[comCardAccent]", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, exportAs: ["comCardAccent"], ngImport: i0 });
546
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ComCardAccent, isStandalone: true, selector: "[comCardAccent]", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, exportAs: ["comCardAccent"], ngImport: i0 });
522
547
  }
523
548
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComCardAccent, decorators: [{
524
549
  type: Directive,
@@ -529,7 +554,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
529
554
  '[class]': 'computedClass()',
530
555
  },
531
556
  }]
532
- }], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }] } });
557
+ }], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
533
558
 
534
559
  /**
535
560
  * Card badge directive - positioned overlay for labels, tags, or status indicators.
@@ -561,12 +586,14 @@ class ComCardBadge {
561
586
  position = input('top-right', ...(ngDevMode ? [{ debugName: "position" }] : []));
562
587
  /** Badge color. */
563
588
  color = input('primary', ...(ngDevMode ? [{ debugName: "color" }] : []));
564
- computedClass = computed(() => cardBadgeVariants({
589
+ /** Consumer CSS classes - merged with variant classes. */
590
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : {}), alias: 'class' });
591
+ computedClass = computed(() => mergeClasses(cardBadgeVariants({
565
592
  position: this.position(),
566
593
  color: this.color(),
567
- }), ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
594
+ }), this.userClass()), ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
568
595
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComCardBadge, deps: [], target: i0.ɵɵFactoryTarget.Directive });
569
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ComCardBadge, isStandalone: true, selector: "[comCardBadge]", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, exportAs: ["comCardBadge"], ngImport: i0 });
596
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ComCardBadge, isStandalone: true, selector: "[comCardBadge]", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, exportAs: ["comCardBadge"], ngImport: i0 });
570
597
  }
571
598
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComCardBadge, decorators: [{
572
599
  type: Directive,
@@ -577,7 +604,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
577
604
  '[class]': 'computedClass()',
578
605
  },
579
606
  }]
580
- }], propDecorators: { position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }] } });
607
+ }], propDecorators: { position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
581
608
 
582
609
  // Public API for the card component system
583
610
  // Main component
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-com-components-card.mjs","sources":["../../../projects/com/components/card/card.variants.ts","../../../projects/com/components/card/card.component.ts","../../../projects/com/components/card/card-header.directive.ts","../../../projects/com/components/card/card-title.directive.ts","../../../projects/com/components/card/card-subtitle.directive.ts","../../../projects/com/components/card/card-content.directive.ts","../../../projects/com/components/card/card-footer.directive.ts","../../../projects/com/components/card/card-actions.directive.ts","../../../projects/com/components/card/card-media.directive.ts","../../../projects/com/components/card/card-divider.directive.ts","../../../projects/com/components/card/card-accent.directive.ts","../../../projects/com/components/card/card-badge.directive.ts","../../../projects/com/components/card/index.ts","../../../projects/com/components/card/ngx-com-components-card.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\n// Card container types\nexport type CardVariant = 'elevated' | 'outlined' | 'filled' | 'ghost';\nexport type CardPadding = 'none' | 'sm' | 'md' | 'lg';\nexport type CardRadius = 'none' | 'sm' | 'md' | 'lg' | 'xl';\n\n// Card footer / actions alignment\nexport type CardAlign = 'start' | 'end' | 'center' | 'between';\n\n// Card actions direction\nexport type CardActionsDirection = 'row' | 'column';\n\n// Card media position\nexport type CardMediaPosition = 'top' | 'bottom' | 'inset';\n\n// Card accent types\nexport type CardAccentColor = 'primary' | 'accent' | 'warn' | 'success' | 'muted';\nexport type CardAccentPosition = 'top' | 'left';\n\n// Card badge types\nexport type CardBadgeColor = 'primary' | 'accent' | 'warn' | 'success' | 'muted';\nexport type CardBadgePosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\n/**\n * CVA variants for the card container.\n *\n * @tokens `--color-card`, `--color-card-foreground`, `--color-muted`, `--color-muted-hover`,\n * `--color-foreground`, `--color-border`, `--color-primary`, `--color-ring`, `--shadow-card`\n */\nexport const cardVariants: (props?: {\n variant?: CardVariant;\n padding?: CardPadding;\n radius?: CardRadius;\n interactive?: boolean;\n}) => string = cva('relative flex flex-col overflow-hidden', {\n variants: {\n variant: {\n elevated: 'bg-card text-card-foreground shadow-card',\n outlined: 'bg-card text-card-foreground border border-border',\n filled: 'bg-muted text-foreground',\n ghost: 'bg-transparent text-foreground',\n },\n padding: {\n none: '',\n sm: 'p-3',\n md: 'p-5',\n lg: 'p-7',\n },\n radius: {\n none: 'rounded-none',\n sm: 'rounded-[var(--radius-sm)]',\n md: 'rounded-[var(--radius-md)]',\n lg: 'rounded-card',\n xl: 'rounded-[var(--radius-xl)]',\n },\n interactive: {\n true: 'cursor-pointer focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n false: '',\n },\n },\n compoundVariants: [\n { interactive: true, variant: 'elevated', class: 'hover:shadow-lg active:shadow-sm transition-shadow duration-normal' },\n { interactive: true, variant: 'outlined', class: 'hover:border-primary hover:shadow-sm transition-all duration-normal' },\n { interactive: true, variant: 'filled', class: 'hover:bg-muted-hover transition-colors duration-normal' },\n { interactive: true, variant: 'ghost', class: 'hover:bg-muted transition-colors duration-normal' },\n ],\n defaultVariants: {\n variant: 'elevated',\n padding: 'none',\n radius: 'lg',\n interactive: false,\n },\n});\n\nexport type CardVariants = VariantProps<typeof cardVariants>;\n\n/**\n * CVA variants for card footer alignment.\n */\nexport const cardFooterVariants: (props?: {\n align?: CardAlign;\n}) => string = cva('flex items-center gap-2 px-5 pt-0 pb-5', {\n variants: {\n align: {\n start: 'justify-start',\n end: 'justify-end',\n center: 'justify-center',\n between: 'justify-between',\n },\n },\n defaultVariants: {\n align: 'end',\n },\n});\n\nexport type CardFooterVariants = VariantProps<typeof cardFooterVariants>;\n\n/**\n * CVA variants for card actions.\n */\nexport const cardActionsVariants: (props?: {\n align?: CardAlign;\n direction?: CardActionsDirection;\n}) => string = cva('flex gap-2 px-5 py-3', {\n variants: {\n align: {\n start: 'justify-start',\n end: 'justify-end',\n center: 'justify-center',\n between: 'justify-between',\n },\n direction: {\n row: 'flex-row items-center',\n column: 'flex-col items-stretch',\n },\n },\n defaultVariants: {\n align: 'end',\n direction: 'row',\n },\n});\n\nexport type CardActionsVariants = VariantProps<typeof cardActionsVariants>;\n\n/**\n * CVA variants for card media positioning.\n */\nexport const cardMediaVariants: (props?: {\n position?: CardMediaPosition;\n}) => string = cva('block w-full overflow-hidden object-cover', {\n variants: {\n position: {\n top: '',\n bottom: '',\n inset: 'mx-5 mt-5 rounded-media',\n },\n },\n defaultVariants: {\n position: 'top',\n },\n});\n\nexport type CardMediaVariants = VariantProps<typeof cardMediaVariants>;\n\n/**\n * CVA variants for card accent strip.\n *\n * @tokens `--color-primary`, `--color-accent`, `--color-warn`, `--color-success`, `--color-muted`\n */\nexport const cardAccentVariants: (props?: {\n color?: CardAccentColor;\n position?: CardAccentPosition;\n}) => string = cva('block shrink-0', {\n variants: {\n color: {\n primary: 'bg-primary',\n accent: 'bg-accent',\n warn: 'bg-warn',\n success: 'bg-success',\n muted: 'bg-muted',\n },\n position: {\n top: 'h-1 w-full',\n left: 'w-1 h-full absolute left-0 top-0',\n },\n },\n defaultVariants: {\n color: 'primary',\n position: 'top',\n },\n});\n\nexport type CardAccentVariants = VariantProps<typeof cardAccentVariants>;\n\n/**\n * CVA variants for card badge overlay.\n *\n * @tokens `--color-primary`, `--color-primary-foreground`, `--color-accent`, `--color-accent-foreground`,\n * `--color-warn`, `--color-warn-foreground`, `--color-success`, `--color-success-foreground`,\n * `--color-muted`, `--color-muted-foreground`, `--radius-card`, `--radius-media`, `--radius-pill`\n */\nexport const cardBadgeVariants: (props?: {\n position?: CardBadgePosition;\n color?: CardBadgeColor;\n}) => string = cva(\n 'absolute z-10 inline-flex items-center rounded-pill px-2.5 py-0.5 text-xs font-semibold',\n {\n variants: {\n position: {\n 'top-left': 'top-3 left-3',\n 'top-right': 'top-3 right-3',\n 'bottom-left': 'bottom-3 left-3',\n 'bottom-right': 'bottom-3 right-3',\n },\n color: {\n primary: 'bg-primary text-primary-foreground',\n accent: 'bg-accent text-accent-foreground',\n warn: 'bg-warn text-warn-foreground',\n success: 'bg-success text-success-foreground',\n muted: 'bg-muted text-muted-foreground',\n },\n },\n defaultVariants: {\n position: 'top-right',\n color: 'primary',\n },\n }\n);\n\nexport type CardBadgeVariants = VariantProps<typeof cardBadgeVariants>;\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { mergeClasses } from './card.utils';\nimport { cardVariants } from './card.variants';\nimport type { CardVariant, CardPadding, CardRadius } from './card.variants';\n\n/**\n * Card container component - a styled surface for content.\n *\n * The card is a pure container with no imposed structure.\n * Use card directives (comCardHeader, comCardContent, etc.) to compose layouts.\n *\n * @tokens `--color-popover`, `--color-popover-foreground`, `--color-muted`, `--color-muted-hover`,\n * `--color-foreground`, `--color-border`, `--color-primary`, `--color-ring`\n *\n * @example Basic card\n * ```html\n * <com-card>\n * <div comCardContent>Simple content</div>\n * </com-card>\n * ```\n *\n * @example Interactive card\n * ```html\n * <com-card [interactive]=\"true\" (click)=\"onCardClick()\">\n * <div comCardContent>Clickable card</div>\n * </com-card>\n * ```\n *\n * @example Outlined variant with custom padding\n * ```html\n * <com-card variant=\"outlined\" padding=\"md\">\n * <p>Outlined card with medium padding</p>\n * </com-card>\n * ```\n */\n@Component({\n selector: 'com-card',\n exportAs: 'comCard',\n template: `<ng-content />`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCard {\n /** Visual treatment of the card surface. */\n readonly variant: InputSignal<CardVariant> = input<CardVariant>('elevated');\n\n /** Inner spacing. Default 'none' - sub-parts manage their own padding. */\n readonly padding: InputSignal<CardPadding> = input<CardPadding>('none');\n\n /** Border radius. */\n readonly radius: InputSignal<CardRadius> = input<CardRadius>('lg');\n\n /** When true, adds hover/active states and cursor-pointer. */\n readonly interactive: 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 protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n cardVariants({\n variant: this.variant(),\n padding: this.padding(),\n radius: this.radius(),\n interactive: this.interactive(),\n }),\n this.userClass()\n )\n );\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Card header directive - top section for title and actions.\n *\n * Uses justify-between so it naturally supports a title group on the left\n * and an action element (icon button, menu trigger) on the right.\n *\n * @example Header with title\n * ```html\n * <div comCardHeader>\n * <h3 comCardTitle>Card Title</h3>\n * </div>\n * ```\n *\n * @example Header with title and action\n * ```html\n * <div comCardHeader>\n * <div>\n * <h3 comCardTitle>Title</h3>\n * <p comCardSubtitle>Subtitle</p>\n * </div>\n * <button comButton variant=\"ghost\" size=\"icon\" aria-label=\"More\">...</button>\n * </div>\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardHeader]',\n exportAs: 'comCardHeader',\n host: {\n class: 'flex items-start justify-between gap-3 px-5 pt-5 pb-0',\n },\n})\nexport class ComCardHeader {}\n","import { Directive } from '@angular/core';\n\n/**\n * Card title directive - styled heading text.\n *\n * Apply to any heading element. Consumer picks the semantic level (h2, h3, etc.).\n *\n * @example\n * ```html\n * <h3 comCardTitle>Project Alpha</h3>\n * ```\n *\n * @tokens `--color-foreground`\n */\n@Directive({\n selector: '[comCardTitle]',\n exportAs: 'comCardTitle',\n host: {\n class: 'font-heading text-lg font-semibold tracking-tight text-foreground',\n },\n})\nexport class ComCardTitle {}\n","import { Directive } from '@angular/core';\n\n/**\n * Card subtitle directive - secondary text styling.\n *\n * @example\n * ```html\n * <p comCardSubtitle>Last updated 2 hours ago</p>\n * ```\n *\n * @tokens `--color-muted-foreground`\n */\n@Directive({\n selector: '[comCardSubtitle]',\n exportAs: 'comCardSubtitle',\n host: {\n class: 'text-sm text-muted-foreground',\n },\n})\nexport class ComCardSubtitle {}\n","import { Directive } from '@angular/core';\n\n/**\n * Card content directive - main body area with consistent padding.\n *\n * @example\n * ```html\n * <div comCardContent>\n * <p>Card body content goes here.</p>\n * </div>\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardContent]',\n exportAs: 'comCardContent',\n host: {\n class: 'flex-1 px-5 py-4 text-sm',\n },\n})\nexport class ComCardContent {}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { cardFooterVariants } from './card.variants';\nimport type { CardAlign } from './card.variants';\n\n/**\n * Card footer directive - bottom section for metadata or secondary actions.\n *\n * @example Footer with alignment\n * ```html\n * <div comCardFooter align=\"between\">\n * <span class=\"text-sm text-muted-foreground\">Updated 3m ago</span>\n * <a comButton variant=\"link\" size=\"sm\">View details</a>\n * </div>\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardFooter]',\n exportAs: 'comCardFooter',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardFooter {\n /** Horizontal alignment of footer content. */\n readonly align: InputSignal<CardAlign> = input<CardAlign>('end');\n\n protected readonly computedClass: Signal<string> = computed(() =>\n cardFooterVariants({ align: this.align() })\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { cardActionsVariants } from './card.variants';\nimport type { CardAlign, CardActionsDirection } from './card.variants';\n\n/**\n * Card actions directive - dedicated button row for primary card actions.\n *\n * Separate from footer because actions and footer metadata serve different purposes.\n *\n * @example Actions with alignment\n * ```html\n * <div comCardActions>\n * <button comButton variant=\"ghost\" size=\"sm\">Cancel</button>\n * <button comButton size=\"sm\">Confirm</button>\n * </div>\n * ```\n *\n * @example Stacked column layout\n * ```html\n * <div comCardActions direction=\"column\" align=\"start\">\n * <button comButton fullWidth>Primary Action</button>\n * <button comButton variant=\"outline\" fullWidth>Secondary</button>\n * </div>\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardActions]',\n exportAs: 'comCardActions',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardActions {\n /** Horizontal alignment of actions. */\n readonly align: InputSignal<CardAlign> = input<CardAlign>('end');\n\n /** Layout direction - row or column. */\n readonly direction: InputSignal<CardActionsDirection> = input<CardActionsDirection>('row');\n\n protected readonly computedClass: Signal<string> = computed(() =>\n cardActionsVariants({\n align: this.align(),\n direction: this.direction(),\n })\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { cardMediaVariants } from './card.variants';\nimport type { CardMediaPosition } from './card.variants';\n\n/**\n * Card media directive - image/video slot with aspect ratio handling.\n *\n * Apply to <img>, <video>, <picture>, or a wrapper <div>.\n *\n * @example Top media (bleeds to edge)\n * ```html\n * <img comCardMedia src=\"/hero.jpg\" alt=\"Hero image\" />\n * ```\n *\n * @example Inset media (padded with rounded corners)\n * ```html\n * <img comCardMedia position=\"inset\" src=\"/preview.jpg\" alt=\"Preview\" />\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardMedia]',\n exportAs: 'comCardMedia',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardMedia {\n /** Media positioning within the card. */\n readonly position: InputSignal<CardMediaPosition> = input<CardMediaPosition>('top');\n\n protected readonly computedClass: Signal<string> = computed(() =>\n cardMediaVariants({ position: this.position() })\n );\n}\n","import { booleanAttribute, computed, Directive, input } from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { mergeClasses } from './card.utils';\n\n/**\n * Card divider directive - horizontal rule between card sections.\n *\n * @example Standard divider (with side margins)\n * ```html\n * <hr comCardDivider />\n * ```\n *\n * @example Full-width divider (edge to edge)\n * ```html\n * <hr comCardDivider [inset]=\"true\" />\n * ```\n *\n * @tokens `--color-border`\n */\n@Directive({\n selector: '[comCardDivider]',\n exportAs: 'comCardDivider',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardDivider {\n /** When true, divider spans full card width (no horizontal margin). */\n readonly inset: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Consumer CSS classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n 'block border-t border-border',\n this.inset() ? 'mx-0' : 'mx-5',\n this.userClass()\n )\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { cardAccentVariants } from './card.variants';\nimport type { CardAccentColor, CardAccentPosition } from './card.variants';\n\n/**\n * Card accent directive - colored strip for status or category indication.\n *\n * Place as the first child of the card for top accent, or use position=\"left\"\n * for a left-edge strip (requires adding left padding to content).\n *\n * @tokens `--color-primary`, `--color-accent`, `--color-warn`, `--color-success`, `--color-muted`\n *\n * @example Top accent strip\n * ```html\n * <com-card>\n * <div comCardAccent color=\"warn\"></div>\n * <div comCardContent>Warning content</div>\n * </com-card>\n * ```\n *\n * @example Left accent strip\n * ```html\n * <com-card>\n * <div comCardAccent color=\"success\" position=\"left\"></div>\n * <div comCardContent class=\"pl-5\">Content with left padding</div>\n * </com-card>\n * ```\n */\n@Directive({\n selector: '[comCardAccent]',\n exportAs: 'comCardAccent',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardAccent {\n /** Accent color. */\n readonly color: InputSignal<CardAccentColor> = input<CardAccentColor>('primary');\n\n /** Position of the accent strip. */\n readonly position: InputSignal<CardAccentPosition> = input<CardAccentPosition>('top');\n\n protected readonly computedClass: Signal<string> = computed(() =>\n cardAccentVariants({\n color: this.color(),\n position: this.position(),\n })\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { cardBadgeVariants } from './card.variants';\nimport type { CardBadgeColor, CardBadgePosition } from './card.variants';\n\n/**\n * Card badge directive - positioned overlay for labels, tags, or status indicators.\n *\n * Floats over the card content (e.g., \"NEW\", \"SALE\", \"Featured\").\n *\n * @tokens `--color-primary`, `--color-primary-foreground`, `--color-accent`, `--color-accent-foreground`,\n * `--color-warn`, `--color-warn-foreground`, `--color-success`, `--color-success-foreground`,\n * `--color-muted`, `--color-muted-foreground`, `--radius-pill`\n *\n * @example Badge in top-right corner\n * ```html\n * <com-card>\n * <span comCardBadge>NEW</span>\n * <img comCardMedia src=\"/product.jpg\" alt=\"Product\" />\n * </com-card>\n * ```\n *\n * @example Badge with custom position and color\n * ```html\n * <com-card>\n * <span comCardBadge position=\"top-left\" color=\"warn\">SALE</span>\n * <div comCardContent>Product details</div>\n * </com-card>\n * ```\n */\n@Directive({\n selector: '[comCardBadge]',\n exportAs: 'comCardBadge',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardBadge {\n /** Badge position within the card. */\n readonly position: InputSignal<CardBadgePosition> = input<CardBadgePosition>('top-right');\n\n /** Badge color. */\n readonly color: InputSignal<CardBadgeColor> = input<CardBadgeColor>('primary');\n\n protected readonly computedClass: Signal<string> = computed(() =>\n cardBadgeVariants({\n position: this.position(),\n color: this.color(),\n })\n );\n}\n","// Public API for the card component system\n\n// Main component\nexport { ComCard } from './card.component';\n\n// Directives\nexport { ComCardHeader } from './card-header.directive';\nexport { ComCardTitle } from './card-title.directive';\nexport { ComCardSubtitle } from './card-subtitle.directive';\nexport { ComCardContent } from './card-content.directive';\nexport { ComCardFooter } from './card-footer.directive';\nexport { ComCardActions } from './card-actions.directive';\nexport { ComCardMedia } from './card-media.directive';\nexport { ComCardDivider } from './card-divider.directive';\nexport { ComCardAccent } from './card-accent.directive';\nexport { ComCardBadge } from './card-badge.directive';\n\n// Variants (for advanced customization)\nexport {\n cardVariants,\n cardFooterVariants,\n cardActionsVariants,\n cardMediaVariants,\n cardAccentVariants,\n cardBadgeVariants,\n} from './card.variants';\n\nexport type {\n CardVariant,\n CardPadding,\n CardRadius,\n CardAlign,\n CardActionsDirection,\n CardMediaPosition,\n CardAccentColor,\n CardAccentPosition,\n CardBadgeColor,\n CardBadgePosition,\n CardVariants,\n CardFooterVariants,\n CardActionsVariants,\n CardMediaVariants,\n CardAccentVariants,\n CardBadgeVariants,\n} from './card.variants';\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-card.mjs","sources":["../../../projects/com/components/card/card.variants.ts","../../../projects/com/components/card/card.component.ts","../../../projects/com/components/card/card-header.directive.ts","../../../projects/com/components/card/card-title.directive.ts","../../../projects/com/components/card/card-subtitle.directive.ts","../../../projects/com/components/card/card-content.directive.ts","../../../projects/com/components/card/card-footer.directive.ts","../../../projects/com/components/card/card-actions.directive.ts","../../../projects/com/components/card/card-media.directive.ts","../../../projects/com/components/card/card-divider.directive.ts","../../../projects/com/components/card/card-accent.directive.ts","../../../projects/com/components/card/card-badge.directive.ts","../../../projects/com/components/card/index.ts","../../../projects/com/components/card/ngx-com-components-card.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\n// Card container types\nexport type CardVariant = 'elevated' | 'outlined' | 'filled' | 'ghost';\nexport type CardPadding = 'none' | 'sm' | 'md' | 'lg';\nexport type CardRadius = 'none' | 'sm' | 'md' | 'lg' | 'xl';\n\n// Card footer / actions alignment\nexport type CardAlign = 'start' | 'end' | 'center' | 'between';\n\n// Card actions direction\nexport type CardActionsDirection = 'row' | 'column';\n\n// Card media position\nexport type CardMediaPosition = 'top' | 'bottom' | 'inset';\n\n// Card accent types\nexport type CardAccentColor = 'primary' | 'accent' | 'warn' | 'success' | 'muted';\nexport type CardAccentPosition = 'top' | 'left';\n\n// Card badge types\nexport type CardBadgeColor = 'primary' | 'accent' | 'warn' | 'success' | 'muted';\nexport type CardBadgePosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\n/**\n * CVA variants for the card container.\n *\n * @tokens `--color-card`, `--color-card-foreground`, `--color-muted`, `--color-muted-hover`,\n * `--color-foreground`, `--color-border`, `--color-primary`, `--color-ring`, `--shadow-card`\n */\nexport const cardVariants: (props?: {\n variant?: CardVariant;\n padding?: CardPadding;\n radius?: CardRadius;\n interactive?: boolean;\n}) => string = cva('relative flex flex-col overflow-hidden', {\n variants: {\n variant: {\n elevated: 'bg-card text-card-foreground shadow-card',\n outlined: 'bg-card text-card-foreground border border-border',\n filled: 'bg-muted text-muted-foreground',\n ghost: 'bg-transparent text-foreground',\n },\n padding: {\n none: '',\n sm: 'p-3',\n md: 'p-5',\n lg: 'p-7',\n },\n radius: {\n none: 'rounded-none',\n sm: 'rounded-[var(--radius-sm)]',\n md: 'rounded-[var(--radius-md)]',\n lg: 'rounded-card',\n xl: 'rounded-[var(--radius-xl)]',\n },\n interactive: {\n true: 'cursor-pointer outline-none focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n false: '',\n },\n },\n compoundVariants: [\n { interactive: true, variant: 'elevated', class: 'hover:shadow-lg active:shadow-sm transition-shadow duration-normal' },\n { interactive: true, variant: 'outlined', class: 'hover:border-primary hover:shadow-sm transition-all duration-normal' },\n { interactive: true, variant: 'filled', class: 'hover:bg-muted-hover transition-colors duration-normal' },\n { interactive: true, variant: 'ghost', class: 'hover:bg-muted transition-colors duration-normal' },\n ],\n defaultVariants: {\n variant: 'elevated',\n padding: 'none',\n radius: 'lg',\n interactive: false,\n },\n});\n\nexport type CardVariants = VariantProps<typeof cardVariants>;\n\n/**\n * CVA variants for card footer alignment.\n */\nexport const cardFooterVariants: (props?: {\n align?: CardAlign;\n}) => string = cva('flex items-center gap-2 px-5 pt-0 pb-5', {\n variants: {\n align: {\n start: 'justify-start',\n end: 'justify-end',\n center: 'justify-center',\n between: 'justify-between',\n },\n },\n defaultVariants: {\n align: 'end',\n },\n});\n\nexport type CardFooterVariants = VariantProps<typeof cardFooterVariants>;\n\n/**\n * CVA variants for card actions.\n */\nexport const cardActionsVariants: (props?: {\n align?: CardAlign;\n direction?: CardActionsDirection;\n}) => string = cva('flex gap-2 px-5 py-3', {\n variants: {\n align: {\n start: 'justify-start',\n end: 'justify-end',\n center: 'justify-center',\n between: 'justify-between',\n },\n direction: {\n row: 'flex-row items-center',\n column: 'flex-col items-stretch',\n },\n },\n defaultVariants: {\n align: 'end',\n direction: 'row',\n },\n});\n\nexport type CardActionsVariants = VariantProps<typeof cardActionsVariants>;\n\n/**\n * CVA variants for card media positioning.\n */\nexport const cardMediaVariants: (props?: {\n position?: CardMediaPosition;\n}) => string = cva('block w-full overflow-hidden object-cover', {\n variants: {\n position: {\n top: '',\n bottom: '',\n inset: 'mx-5 mt-5 rounded-media',\n },\n },\n defaultVariants: {\n position: 'top',\n },\n});\n\nexport type CardMediaVariants = VariantProps<typeof cardMediaVariants>;\n\n/**\n * CVA variants for card accent strip.\n *\n * @tokens `--color-primary`, `--color-accent`, `--color-warn`, `--color-success`, `--color-muted`\n */\nexport const cardAccentVariants: (props?: {\n color?: CardAccentColor;\n position?: CardAccentPosition;\n}) => string = cva('block shrink-0', {\n variants: {\n color: {\n primary: 'bg-primary',\n accent: 'bg-accent',\n warn: 'bg-warn',\n success: 'bg-success',\n muted: 'bg-muted',\n },\n position: {\n top: 'h-1 w-full',\n left: 'w-1 h-full absolute left-0 top-0',\n },\n },\n defaultVariants: {\n color: 'primary',\n position: 'top',\n },\n});\n\nexport type CardAccentVariants = VariantProps<typeof cardAccentVariants>;\n\n/**\n * CVA variants for card badge overlay.\n *\n * @tokens `--color-primary`, `--color-primary-foreground`, `--color-accent`, `--color-accent-foreground`,\n * `--color-warn`, `--color-warn-foreground`, `--color-success`, `--color-success-foreground`,\n * `--color-muted`, `--color-muted-foreground`, `--radius-card`, `--radius-media`, `--radius-pill`\n */\nexport const cardBadgeVariants: (props?: {\n position?: CardBadgePosition;\n color?: CardBadgeColor;\n}) => string = cva(\n 'absolute z-10 inline-flex items-center rounded-pill px-2.5 py-0.5 text-xs font-semibold',\n {\n variants: {\n position: {\n 'top-left': 'top-3 left-3',\n 'top-right': 'top-3 right-3',\n 'bottom-left': 'bottom-3 left-3',\n 'bottom-right': 'bottom-3 right-3',\n },\n color: {\n primary: 'bg-primary text-primary-foreground',\n accent: 'bg-accent text-accent-foreground',\n warn: 'bg-warn text-warn-foreground',\n success: 'bg-success text-success-foreground',\n muted: 'bg-muted text-muted-foreground',\n },\n },\n defaultVariants: {\n position: 'top-right',\n color: 'primary',\n },\n }\n);\n\nexport type CardBadgeVariants = VariantProps<typeof cardBadgeVariants>;\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, OutputEmitterRef, Signal } from '@angular/core';\nimport { mergeClasses } from './card.utils';\nimport { cardVariants } from './card.variants';\nimport type { CardVariant, CardPadding, CardRadius } from './card.variants';\n\n/**\n * Card container component - a styled surface for content.\n *\n * The card is a pure container with no imposed structure.\n * Use card directives (comCardHeader, comCardContent, etc.) to compose layouts.\n *\n * @tokens `--color-card`, `--color-card-foreground`, `--color-muted`, `--color-muted-foreground`,\n * `--color-muted-hover`, `--color-border`, `--color-primary`, `--color-ring`, `--shadow-card`\n *\n * @example Basic card\n * ```html\n * <com-card>\n * <div comCardContent>Simple content</div>\n * </com-card>\n * ```\n *\n * @example Interactive card\n * ```html\n * <com-card [interactive]=\"true\" (click)=\"onCardClick()\">\n * <div comCardContent>Clickable card</div>\n * </com-card>\n * ```\n *\n * @example Outlined variant with custom padding\n * ```html\n * <com-card variant=\"outlined\" padding=\"md\">\n * <p>Outlined card with medium padding</p>\n * </com-card>\n * ```\n */\n@Component({\n selector: 'com-card',\n exportAs: 'comCard',\n template: `<ng-content />`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'computedClass()',\n '[attr.tabindex]': 'interactive() ? 0 : null',\n '[attr.role]': 'interactive() ? \"button\" : null',\n '(keydown.enter)': 'onKeyActivate($event)',\n '(keydown.space)': 'onKeyActivate($event)',\n },\n})\nexport class ComCard {\n /** Visual treatment of the card surface. */\n readonly variant: InputSignal<CardVariant> = input<CardVariant>('elevated');\n\n /** Inner spacing. Default 'none' - sub-parts manage their own padding. */\n readonly padding: InputSignal<CardPadding> = input<CardPadding>('none');\n\n /** Border radius. */\n readonly radius: InputSignal<CardRadius> = input<CardRadius>('lg');\n\n /** When true, adds hover/active states and cursor-pointer. */\n readonly interactive: 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 an interactive card is activated via keyboard (Enter or Space). */\n readonly cardActivated: OutputEmitterRef<void> = output<void>();\n\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n cardVariants({\n variant: this.variant(),\n padding: this.padding(),\n radius: this.radius(),\n interactive: this.interactive(),\n }),\n this.userClass()\n )\n );\n\n // SSR-safe: only called from user interaction handlers\n protected onKeyActivate(event: Event): void {\n if (!this.interactive()) return;\n event.preventDefault();\n this.cardActivated.emit();\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Card header directive - top section for title and actions.\n *\n * Uses `flex` with `justify-between` so it naturally supports a title group\n * on the left and an action element (icon button, menu trigger) on the right.\n *\n * **Important:** When using both `comCardTitle` and `comCardSubtitle`,\n * wrap them in a container `<div>` so they stack vertically as a single\n * flex child. Without the wrapper, `justify-between` will push them apart.\n *\n * @example Header with title only\n * ```html\n * <div comCardHeader>\n * <h3 comCardTitle>Card Title</h3>\n * </div>\n * ```\n *\n * @example Header with title, subtitle, and action\n * ```html\n * <div comCardHeader>\n * <div>\n * <h3 comCardTitle>Title</h3>\n * <p comCardSubtitle>Subtitle</p>\n * </div>\n * <button comButton variant=\"ghost\" size=\"icon\" aria-label=\"More\">...</button>\n * </div>\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardHeader]',\n exportAs: 'comCardHeader',\n host: {\n class: 'flex items-start justify-between gap-3 px-5 pt-5 pb-0',\n },\n})\nexport class ComCardHeader {}\n","import { Directive } from '@angular/core';\n\n/**\n * Card title directive - styled heading text.\n *\n * Apply to any heading element. Consumer picks the semantic level (h2, h3, etc.).\n *\n * @example\n * ```html\n * <h3 comCardTitle>Project Alpha</h3>\n * ```\n *\n * @tokens `--color-foreground`\n */\n@Directive({\n selector: '[comCardTitle]',\n exportAs: 'comCardTitle',\n host: {\n class: 'font-heading text-lg font-semibold tracking-tight text-foreground',\n },\n})\nexport class ComCardTitle {}\n","import { Directive } from '@angular/core';\n\n/**\n * Card subtitle directive - secondary text styling.\n *\n * @example\n * ```html\n * <p comCardSubtitle>Last updated 2 hours ago</p>\n * ```\n *\n * @tokens `--color-muted-foreground`\n */\n@Directive({\n selector: '[comCardSubtitle]',\n exportAs: 'comCardSubtitle',\n host: {\n class: 'text-sm text-muted-foreground',\n },\n})\nexport class ComCardSubtitle {}\n","import { Directive } from '@angular/core';\n\n/**\n * Card content directive - main body area with consistent padding.\n *\n * @example\n * ```html\n * <div comCardContent>\n * <p>Card body content goes here.</p>\n * </div>\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardContent]',\n exportAs: 'comCardContent',\n host: {\n class: 'flex-1 px-5 py-4 text-sm',\n },\n})\nexport class ComCardContent {}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { mergeClasses } from './card.utils';\nimport { cardFooterVariants } from './card.variants';\nimport type { CardAlign } from './card.variants';\n\n/**\n * Card footer directive - bottom section for metadata or secondary actions.\n *\n * @example Footer with alignment\n * ```html\n * <div comCardFooter align=\"between\">\n * <span class=\"text-sm text-muted-foreground\">Updated 3m ago</span>\n * <a comButton variant=\"link\" size=\"sm\">View details</a>\n * </div>\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardFooter]',\n exportAs: 'comCardFooter',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardFooter {\n /** Horizontal alignment of footer content. */\n readonly align: InputSignal<CardAlign> = input<CardAlign>('end');\n\n /** Consumer CSS classes - merged with variant classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(cardFooterVariants({ align: this.align() }), this.userClass())\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { mergeClasses } from './card.utils';\nimport { cardActionsVariants } from './card.variants';\nimport type { CardAlign, CardActionsDirection } from './card.variants';\n\n/**\n * Card actions directive - dedicated button row for primary card actions.\n *\n * Separate from footer because actions and footer metadata serve different purposes.\n *\n * @example Actions with alignment\n * ```html\n * <div comCardActions>\n * <button comButton variant=\"ghost\" size=\"sm\">Cancel</button>\n * <button comButton size=\"sm\">Confirm</button>\n * </div>\n * ```\n *\n * @example Stacked column layout\n * ```html\n * <div comCardActions direction=\"column\" align=\"start\">\n * <button comButton fullWidth>Primary Action</button>\n * <button comButton variant=\"outline\" fullWidth>Secondary</button>\n * </div>\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardActions]',\n exportAs: 'comCardActions',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardActions {\n /** Horizontal alignment of actions. */\n readonly align: InputSignal<CardAlign> = input<CardAlign>('end');\n\n /** Layout direction - row or column. */\n readonly direction: InputSignal<CardActionsDirection> = input<CardActionsDirection>('row');\n\n /** Consumer CSS classes - merged with variant classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n cardActionsVariants({\n align: this.align(),\n direction: this.direction(),\n }),\n this.userClass()\n )\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { mergeClasses } from './card.utils';\nimport { cardMediaVariants } from './card.variants';\nimport type { CardMediaPosition } from './card.variants';\n\n/**\n * Card media directive - image/video slot with aspect ratio handling.\n *\n * Apply to <img>, <video>, <picture>, or a wrapper <div>.\n *\n * @example Top media (bleeds to edge)\n * ```html\n * <img comCardMedia src=\"/hero.jpg\" alt=\"Hero image\" />\n * ```\n *\n * @example Inset media (padded with rounded corners)\n * ```html\n * <img comCardMedia position=\"inset\" src=\"/preview.jpg\" alt=\"Preview\" />\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardMedia]',\n exportAs: 'comCardMedia',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardMedia {\n /** Media positioning within the card. */\n readonly position: InputSignal<CardMediaPosition> = input<CardMediaPosition>('top');\n\n /** Consumer CSS classes - merged with variant classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(cardMediaVariants({ position: this.position() }), this.userClass())\n );\n}\n","import { booleanAttribute, computed, Directive, input } from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { mergeClasses } from './card.utils';\n\n/**\n * Card divider directive - horizontal rule between card sections.\n *\n * @example Standard divider (with side margins)\n * ```html\n * <hr comCardDivider />\n * ```\n *\n * @example Full-width divider (edge to edge)\n * ```html\n * <hr comCardDivider [inset]=\"true\" />\n * ```\n *\n * @tokens `--color-border`\n */\n@Directive({\n selector: '[comCardDivider]',\n exportAs: 'comCardDivider',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardDivider {\n /** When true, divider spans full card width (no horizontal margin). */\n readonly inset: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Consumer CSS classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n 'block border-t border-border',\n this.inset() ? 'mx-0' : 'mx-5',\n this.userClass()\n )\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { mergeClasses } from './card.utils';\nimport { cardAccentVariants } from './card.variants';\nimport type { CardAccentColor, CardAccentPosition } from './card.variants';\n\n/**\n * Card accent directive - colored strip for status or category indication.\n *\n * Place as the first child of the card for top accent, or use position=\"left\"\n * for a left-edge strip (requires adding left padding to content).\n *\n * @tokens `--color-primary`, `--color-accent`, `--color-warn`, `--color-success`, `--color-muted`\n *\n * @example Top accent strip\n * ```html\n * <com-card>\n * <div comCardAccent color=\"warn\"></div>\n * <div comCardContent>Warning content</div>\n * </com-card>\n * ```\n *\n * @example Left accent strip\n * ```html\n * <com-card>\n * <div comCardAccent color=\"success\" position=\"left\"></div>\n * <div comCardContent class=\"pl-5\">Content with left padding</div>\n * </com-card>\n * ```\n */\n@Directive({\n selector: '[comCardAccent]',\n exportAs: 'comCardAccent',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardAccent {\n /** Accent color. */\n readonly color: InputSignal<CardAccentColor> = input<CardAccentColor>('primary');\n\n /** Position of the accent strip. */\n readonly position: InputSignal<CardAccentPosition> = input<CardAccentPosition>('top');\n\n /** Consumer CSS classes - merged with variant classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n cardAccentVariants({\n color: this.color(),\n position: this.position(),\n }),\n this.userClass()\n )\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { mergeClasses } from './card.utils';\nimport { cardBadgeVariants } from './card.variants';\nimport type { CardBadgeColor, CardBadgePosition } from './card.variants';\n\n/**\n * Card badge directive - positioned overlay for labels, tags, or status indicators.\n *\n * Floats over the card content (e.g., \"NEW\", \"SALE\", \"Featured\").\n *\n * @tokens `--color-primary`, `--color-primary-foreground`, `--color-accent`, `--color-accent-foreground`,\n * `--color-warn`, `--color-warn-foreground`, `--color-success`, `--color-success-foreground`,\n * `--color-muted`, `--color-muted-foreground`, `--radius-pill`\n *\n * @example Badge in top-right corner\n * ```html\n * <com-card>\n * <span comCardBadge>NEW</span>\n * <img comCardMedia src=\"/product.jpg\" alt=\"Product\" />\n * </com-card>\n * ```\n *\n * @example Badge with custom position and color\n * ```html\n * <com-card>\n * <span comCardBadge position=\"top-left\" color=\"warn\">SALE</span>\n * <div comCardContent>Product details</div>\n * </com-card>\n * ```\n */\n@Directive({\n selector: '[comCardBadge]',\n exportAs: 'comCardBadge',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardBadge {\n /** Badge position within the card. */\n readonly position: InputSignal<CardBadgePosition> = input<CardBadgePosition>('top-right');\n\n /** Badge color. */\n readonly color: InputSignal<CardBadgeColor> = input<CardBadgeColor>('primary');\n\n /** Consumer CSS classes - merged with variant classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n cardBadgeVariants({\n position: this.position(),\n color: this.color(),\n }),\n this.userClass()\n )\n );\n}\n","// Public API for the card component system\n\n// Main component\nexport { ComCard } from './card.component';\n\n// Directives\nexport { ComCardHeader } from './card-header.directive';\nexport { ComCardTitle } from './card-title.directive';\nexport { ComCardSubtitle } from './card-subtitle.directive';\nexport { ComCardContent } from './card-content.directive';\nexport { ComCardFooter } from './card-footer.directive';\nexport { ComCardActions } from './card-actions.directive';\nexport { ComCardMedia } from './card-media.directive';\nexport { ComCardDivider } from './card-divider.directive';\nexport { ComCardAccent } from './card-accent.directive';\nexport { ComCardBadge } from './card-badge.directive';\n\n// Variants (for advanced customization)\nexport {\n cardVariants,\n cardFooterVariants,\n cardActionsVariants,\n cardMediaVariants,\n cardAccentVariants,\n cardBadgeVariants,\n} from './card.variants';\n\nexport type {\n CardVariant,\n CardPadding,\n CardRadius,\n CardAlign,\n CardActionsDirection,\n CardMediaPosition,\n CardAccentColor,\n CardAccentPosition,\n CardBadgeColor,\n CardBadgePosition,\n CardVariants,\n CardFooterVariants,\n CardActionsVariants,\n CardMediaVariants,\n CardAccentVariants,\n CardBadgeVariants,\n} from './card.variants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAwBA;;;;;AAKG;AACI,MAAM,YAAY,GAKV,GAAG,CAAC,wCAAwC,EAAE;AAC3D,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,0CAA0C;AACpD,YAAA,QAAQ,EAAE,mDAAmD;AAC7D,YAAA,MAAM,EAAE,gCAAgC;AACxC,YAAA,KAAK,EAAE,gCAAgC;AACxC,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,EAAE,EAAE,KAAK;AACT,YAAA,EAAE,EAAE,KAAK;AACT,YAAA,EAAE,EAAE,KAAK;AACV,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,IAAI,EAAE,cAAc;AACpB,YAAA,EAAE,EAAE,4BAA4B;AAChC,YAAA,EAAE,EAAE,4BAA4B;AAChC,YAAA,EAAE,EAAE,cAAc;AAClB,YAAA,EAAE,EAAE,4BAA4B;AACjC,SAAA;AACD,QAAA,WAAW,EAAE;AACX,YAAA,IAAI,EAAE,mHAAmH;AACzH,YAAA,KAAK,EAAE,EAAE;AACV,SAAA;AACF,KAAA;AACD,IAAA,gBAAgB,EAAE;QAChB,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,oEAAoE,EAAE;QACvH,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,qEAAqE,EAAE;QACxH,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,wDAAwD,EAAE;QACzG,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,kDAAkD,EAAE;AACnG,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,WAAW,EAAE,KAAK;AACnB,KAAA;AACF,CAAA;AAID;;AAEG;AACI,MAAM,kBAAkB,GAEhB,GAAG,CAAC,wCAAwC,EAAE;AAC3D,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE;AACL,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,GAAG,EAAE,aAAa;AAClB,YAAA,MAAM,EAAE,gBAAgB;AACxB,YAAA,OAAO,EAAE,iBAAiB;AAC3B,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,KAAK,EAAE,KAAK;AACb,KAAA;AACF,CAAA;AAID;;AAEG;AACI,MAAM,mBAAmB,GAGjB,GAAG,CAAC,sBAAsB,EAAE;AACzC,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE;AACL,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,GAAG,EAAE,aAAa;AAClB,YAAA,MAAM,EAAE,gBAAgB;AACxB,YAAA,OAAO,EAAE,iBAAiB;AAC3B,SAAA;AACD,QAAA,SAAS,EAAE;AACT,YAAA,GAAG,EAAE,uBAAuB;AAC5B,YAAA,MAAM,EAAE,wBAAwB;AACjC,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,SAAS,EAAE,KAAK;AACjB,KAAA;AACF,CAAA;AAID;;AAEG;AACI,MAAM,iBAAiB,GAEf,GAAG,CAAC,2CAA2C,EAAE;AAC9D,IAAA,QAAQ,EAAE;AACR,QAAA,QAAQ,EAAE;AACR,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,KAAK,EAAE,yBAAyB;AACjC,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,QAAQ,EAAE,KAAK;AAChB,KAAA;AACF,CAAA;AAID;;;;AAIG;AACI,MAAM,kBAAkB,GAGhB,GAAG,CAAC,gBAAgB,EAAE;AACnC,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,MAAM,EAAE,WAAW;AACnB,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,KAAK,EAAE,UAAU;AAClB,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,IAAI,EAAE,kCAAkC;AACzC,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,QAAQ,EAAE,KAAK;AAChB,KAAA;AACF,CAAA;AAID;;;;;;AAMG;AACI,MAAM,iBAAiB,GAGf,GAAG,CAChB,yFAAyF,EACzF;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,QAAQ,EAAE;AACR,YAAA,UAAU,EAAE,cAAc;AAC1B,YAAA,WAAW,EAAE,eAAe;AAC5B,YAAA,aAAa,EAAE,iBAAiB;AAChC,YAAA,cAAc,EAAE,kBAAkB;AACnC,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,oCAAoC;AAC7C,YAAA,MAAM,EAAE,kCAAkC;AAC1C,YAAA,IAAI,EAAE,8BAA8B;AACpC,YAAA,OAAO,EAAE,oCAAoC;AAC7C,YAAA,KAAK,EAAE,gCAAgC;AACxC,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,KAAK,EAAE,SAAS;AACjB,KAAA;AACF,CAAA;;ACjMH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;MAeU,OAAO,CAAA;;AAET,IAAA,OAAO,GAA6B,KAAK,CAAc,UAAU,mDAAC;;AAGlE,IAAA,OAAO,GAA6B,KAAK,CAAc,MAAM,mDAAC;;AAG9D,IAAA,MAAM,GAA4B,KAAK,CAAa,IAAI,kDAAC;;IAGzD,WAAW,GAA+C,KAAK,CAAC,KAAK,wDAC5E,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;IAGO,SAAS,GAAwB,KAAK,CAAS,EAAE,sDAAI,KAAK,EAAE,OAAO,EAAA,CAAG;;IAGtE,aAAa,GAA2B,MAAM,EAAQ;IAE5C,aAAa,GAAmB,QAAQ,CAAC,MAC1D,YAAY,CACV,YAAY,CAAC;AACX,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,QAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,QAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAChC,KAAA,CAAC,EACF,IAAI,CAAC,SAAS,EAAE,CACjB,yDACF;;AAGS,IAAA,aAAa,CAAC,KAAY,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE;QACzB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;uGAtCW,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAP,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,OAAO,6gCAXR,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAWf,OAAO,EAAA,UAAA,EAAA,CAAA;kBAdnB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,iBAAiB;AAC5B,wBAAA,iBAAiB,EAAE,0BAA0B;AAC7C,wBAAA,aAAa,EAAE,iCAAiC;AAChD,wBAAA,iBAAiB,EAAE,uBAAuB;AAC1C,wBAAA,iBAAiB,EAAE,uBAAuB;AAC3C,qBAAA;AACF,iBAAA;;;ACvDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;MAQU,aAAa,CAAA;uGAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,uDAAA,EAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,uDAAuD;AAC/D,qBAAA;AACF,iBAAA;;;ACpCD;;;;;;;;;;;AAWG;MAQU,YAAY,CAAA;uGAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,mEAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAPxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,mEAAmE;AAC3E,qBAAA;AACF,iBAAA;;;AClBD;;;;;;;;;AASG;MAQU,eAAe,CAAA;uGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,+BAAA,EAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,+BAA+B;AACvC,qBAAA;AACF,iBAAA;;;AChBD;;;;;;;;;;;AAWG;MAQU,cAAc,CAAA;uGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAP1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,0BAA0B;AAClC,qBAAA;AACF,iBAAA;;;ACdD;;;;;;;;;;;;AAYG;MAQU,aAAa,CAAA;;AAEf,IAAA,KAAK,GAA2B,KAAK,CAAY,KAAK,iDAAC;;IAGvD,SAAS,GAAwB,KAAK,CAAS,EAAE,sDAAI,KAAK,EAAE,OAAO,EAAA,CAAG;IAE5D,aAAa,GAAmB,QAAQ,CAAC,MAC1D,YAAY,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAC5E;uGATU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,iBAAiB;AAC7B,qBAAA;AACF,iBAAA;;;ACnBD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAQU,cAAc,CAAA;;AAEhB,IAAA,KAAK,GAA2B,KAAK,CAAY,KAAK,iDAAC;;AAGvD,IAAA,SAAS,GAAsC,KAAK,CAAuB,KAAK,qDAAC;;IAGjF,SAAS,GAAwB,KAAK,CAAS,EAAE,sDAAI,KAAK,EAAE,OAAO,EAAA,CAAG;IAE5D,aAAa,GAAmB,QAAQ,CAAC,MAC1D,YAAY,CACV,mBAAmB,CAAC;AAClB,QAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,QAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC5B,KAAA,CAAC,EACF,IAAI,CAAC,SAAS,EAAE,CACjB,yDACF;uGAlBU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAP1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,iBAAiB;AAC7B,qBAAA;AACF,iBAAA;;;AC7BD;;;;;;;;;;;;;;;;AAgBG;MAQU,YAAY,CAAA;;AAEd,IAAA,QAAQ,GAAmC,KAAK,CAAoB,KAAK,oDAAC;;IAG1E,SAAS,GAAwB,KAAK,CAAS,EAAE,sDAAI,KAAK,EAAE,OAAO,EAAA,CAAG;IAE5D,aAAa,GAAmB,QAAQ,CAAC,MAC1D,YAAY,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACjF;uGATU,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAPxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,iBAAiB;AAC7B,qBAAA;AACF,iBAAA;;;ACzBD;;;;;;;;;;;;;;AAcG;MAQU,cAAc,CAAA;;IAEhB,KAAK,GAA+C,KAAK,CAAC,KAAK,kDACtE,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;IAGO,SAAS,GAAwB,KAAK,CAAS,EAAE,sDAAI,KAAK,EAAE,OAAO,EAAA,CAAG;AAE5D,IAAA,aAAa,GAAmB,QAAQ,CAAC,MAC1D,YAAY,CACV,8BAA8B,EAC9B,IAAI,CAAC,KAAK,EAAE,GAAG,MAAM,GAAG,MAAM,EAC9B,IAAI,CAAC,SAAS,EAAE,CACjB,yDACF;uGAfU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAP1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,iBAAiB;AAC7B,qBAAA;AACF,iBAAA;;;ACnBD;;;;;;;;;;;;;;;;;;;;;;;AAuBG;MAQU,aAAa,CAAA;;AAEf,IAAA,KAAK,GAAiC,KAAK,CAAkB,SAAS,iDAAC;;AAGvE,IAAA,QAAQ,GAAoC,KAAK,CAAqB,KAAK,oDAAC;;IAG5E,SAAS,GAAwB,KAAK,CAAS,EAAE,sDAAI,KAAK,EAAE,OAAO,EAAA,CAAG;IAE5D,aAAa,GAAmB,QAAQ,CAAC,MAC1D,YAAY,CACV,kBAAkB,CAAC;AACjB,QAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,QAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC1B,KAAA,CAAC,EACF,IAAI,CAAC,SAAS,EAAE,CACjB,yDACF;uGAlBU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,iBAAiB;AAC7B,qBAAA;AACF,iBAAA;;;AC9BD;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;MAQU,YAAY,CAAA;;AAEd,IAAA,QAAQ,GAAmC,KAAK,CAAoB,WAAW,oDAAC;;AAGhF,IAAA,KAAK,GAAgC,KAAK,CAAiB,SAAS,iDAAC;;IAGrE,SAAS,GAAwB,KAAK,CAAS,EAAE,sDAAI,KAAK,EAAE,OAAO,EAAA,CAAG;IAE5D,aAAa,GAAmB,QAAQ,CAAC,MAC1D,YAAY,CACV,iBAAiB,CAAC;AAChB,QAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,QAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACpB,KAAA,CAAC,EACF,IAAI,CAAC,SAAS,EAAE,CACjB,yDACF;uGAlBU,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAPxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,iBAAiB;AAC7B,qBAAA;AACF,iBAAA;;;ACrCD;AAEA;;ACFA;;AAEG;;;;"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, viewChild, signal, computed, ChangeDetectionStrategy, Component, InjectionToken, Injector, PLATFORM_ID, TemplateRef, Injectable, Directive, input } from '@angular/core';
3
- import { NgTemplateOutlet, NgComponentOutlet, DOCUMENT, isPlatformBrowser } from '@angular/common';
3
+ import { NgTemplateOutlet, NgComponentOutlet, NgStyle, DOCUMENT, isPlatformBrowser } from '@angular/common';
4
4
  import { Overlay } from '@angular/cdk/overlay';
5
5
  import { ComponentPortal } from '@angular/cdk/portal';
6
6
  import { filter, takeUntil } from 'rxjs/operators';
@@ -174,6 +174,10 @@ function generateDialogContentId() {
174
174
 
175
175
  /** Fallback timeout for exit animation when animationend doesn't fire. */
176
176
  const ANIMATION_FALLBACK_MS = 200;
177
+ /** Convert a dimension value to a CSS string. Numbers default to pixels. */
178
+ function toCssValue(value) {
179
+ return typeof value === 'number' ? `${value}px` : value;
180
+ }
177
181
  /**
178
182
  * Internal dialog container component rendered inside the CDK overlay.
179
183
  * Hosts the user's component or template and manages focus trap, animation, and ARIA.
@@ -182,7 +186,7 @@ const ANIMATION_FALLBACK_MS = 200;
182
186
  *
183
187
  * @tokens `--color-popover`, `--color-popover-foreground`, `--color-border`,
184
188
  * `--color-foreground`, `--color-muted-foreground`, `--color-backdrop`,
185
- * `--shadow-dialog`, `--radius-overlay`, `--color-ring`
189
+ * `--shadow-dialog`, `--radius-overlay`, `--font-heading`
186
190
  */
187
191
  class ComDialogContainerComponent {
188
192
  focusTrapFactory = inject(FocusTrapFactory);
@@ -221,11 +225,34 @@ class ComDialogContainerComponent {
221
225
  this.contentId.set(id);
222
226
  }
223
227
  // ─── Computed classes ───
224
- backdropClasses = computed(() => mergeClasses(dialogBackdropVariants({ visible: this.visible() })), ...(ngDevMode ? [{ debugName: "backdropClasses" }] : []));
228
+ backdropClasses = computed(() => mergeClasses(dialogBackdropVariants({ visible: this.visible() }), this.config()?.backdropClass ?? ''), ...(ngDevMode ? [{ debugName: "backdropClasses" }] : []));
225
229
  panelClasses = computed(() => mergeClasses(dialogPanelVariants({
226
230
  size: this.config()?.size ?? 'md',
227
231
  visible: this.visible(),
228
232
  }), this.config()?.panelClass ?? ''), ...(ngDevMode ? [{ debugName: "panelClasses" }] : []));
233
+ /**
234
+ * Inline styles for dimension overrides on the panel element.
235
+ * When set, these override CVA size variant dimensions via CSS specificity.
236
+ */
237
+ panelStyles = computed(() => {
238
+ const c = this.config();
239
+ if (!c)
240
+ return null;
241
+ const styles = {};
242
+ if (c.width != null)
243
+ styles['width'] = c.width;
244
+ if (c.height != null)
245
+ styles['height'] = c.height;
246
+ if (c.minWidth != null)
247
+ styles['min-width'] = toCssValue(c.minWidth);
248
+ if (c.minHeight != null)
249
+ styles['min-height'] = toCssValue(c.minHeight);
250
+ if (c.maxWidth != null)
251
+ styles['max-width'] = toCssValue(c.maxWidth);
252
+ if (c.maxHeight != null)
253
+ styles['max-height'] = toCssValue(c.maxHeight);
254
+ return Object.keys(styles).length > 0 ? styles : null;
255
+ }, ...(ngDevMode ? [{ debugName: "panelStyles" }] : []));
229
256
  /** Template context for TemplateRef-based dialogs. */
230
257
  templateContext = computed(() => ({
231
258
  $implicit: this.dialogRef(),
@@ -300,7 +327,8 @@ class ComDialogContainerComponent {
300
327
  <div
301
328
  #panelElement
302
329
  [class]="panelClasses()"
303
- role="dialog"
330
+ [ngStyle]="panelStyles()"
331
+ [attr.role]="config()?.role ?? 'dialog'"
304
332
  aria-modal="true"
305
333
  [attr.aria-labelledby]="titleId() || null"
306
334
  [attr.aria-describedby]="contentId() || null"
@@ -322,7 +350,7 @@ class ComDialogContainerComponent {
322
350
  }
323
351
  }
324
352
  </div>
325
- `, isInline: true, styles: [":host{display:contents}[data-state=open]{--tw-enter-opacity: 0;--tw-enter-scale: .95}[data-state=closed]{--tw-exit-opacity: 0;--tw-exit-scale: .95}@media(prefers-reduced-motion:reduce){[data-state=open],[data-state=closed]{animation:none}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
353
+ `, isInline: true, styles: [":host{display:contents}[data-state=open]{--tw-enter-opacity: 0;--tw-enter-scale: .95}[data-state=closed]{--tw-exit-opacity: 0;--tw-exit-scale: .95}@media(prefers-reduced-motion:reduce){[data-state=open],[data-state=closed]{animation:none}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
326
354
  }
327
355
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComDialogContainerComponent, decorators: [{
328
356
  type: Component,
@@ -338,7 +366,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
338
366
  <div
339
367
  #panelElement
340
368
  [class]="panelClasses()"
341
- role="dialog"
369
+ [ngStyle]="panelStyles()"
370
+ [attr.role]="config()?.role ?? 'dialog'"
342
371
  aria-modal="true"
343
372
  [attr.aria-labelledby]="titleId() || null"
344
373
  [attr.aria-describedby]="contentId() || null"
@@ -360,7 +389,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
360
389
  }
361
390
  }
362
391
  </div>
363
- `, imports: [NgTemplateOutlet, NgComponentOutlet], changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:contents}[data-state=open]{--tw-enter-opacity: 0;--tw-enter-scale: .95}[data-state=closed]{--tw-exit-opacity: 0;--tw-exit-scale: .95}@media(prefers-reduced-motion:reduce){[data-state=open],[data-state=closed]{animation:none}}\n"] }]
392
+ `, imports: [NgTemplateOutlet, NgComponentOutlet, NgStyle], changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:contents}[data-state=open]{--tw-enter-opacity: 0;--tw-enter-scale: .95}[data-state=closed]{--tw-exit-opacity: 0;--tw-exit-scale: .95}@media(prefers-reduced-motion:reduce){[data-state=open],[data-state=closed]{animation:none}}\n"] }]
364
393
  }], propDecorators: { panelElement: [{ type: i0.ViewChild, args: ['panelElement', { isSignal: true }] }] } });
365
394
 
366
395
  /**
@@ -411,6 +440,7 @@ const COM_DIALOG_DEFAULTS = {
411
440
  autoFocus: 'first-tabbable',
412
441
  restoreFocus: true,
413
442
  ariaLabel: '',
443
+ role: 'dialog',
414
444
  };
415
445
 
416
446
  /**
@@ -459,23 +489,29 @@ class ComDialog {
459
489
  registerTitleId: () => { },
460
490
  registerContentId: () => { },
461
491
  };
492
+ // Resolve parent injector: config.injector > config.viewContainerRef.injector > service injector
493
+ const parentInjector = resolvedConfig.injector ??
494
+ resolvedConfig.viewContainerRef?.injector ??
495
+ this.injector;
462
496
  const contentInjector = Injector.create({
463
497
  providers: [
498
+ ...(resolvedConfig.providers ?? []),
464
499
  { provide: ComDialogRef, useValue: dialogRef },
465
500
  { provide: COM_DIALOG_DATA, useValue: resolvedConfig.data },
466
501
  { provide: COM_DIALOG_CONTAINER_REF, useValue: containerRef },
467
502
  ],
468
- parent: this.injector,
503
+ parent: parentInjector,
469
504
  });
470
505
  // Create CDK overlay
471
- const positionStrategy = this.overlay
472
- .position()
473
- .global()
474
- .centerHorizontally()
475
- .centerVertically();
506
+ const positionStrategy = resolvedConfig.positionStrategy ??
507
+ this.overlay
508
+ .position()
509
+ .global()
510
+ .centerHorizontally()
511
+ .centerVertically();
476
512
  const overlayRef = this.overlay.create({
477
513
  positionStrategy,
478
- scrollStrategy: this.overlay.scrollStrategies.block(),
514
+ scrollStrategy: resolvedConfig.scrollStrategy ?? this.overlay.scrollStrategies.block(),
479
515
  hasBackdrop: false, // We handle backdrop ourselves for animation control
480
516
  panelClass: 'com-dialog-overlay',
481
517
  disposeOnNavigation: false,
@@ -524,9 +560,16 @@ class ComDialog {
524
560
  }
525
561
  overlayRef.dispose();
526
562
  // Restore focus
527
- if (resolvedConfig.restoreFocus && previouslyFocused) {
563
+ const { restoreFocus } = resolvedConfig;
564
+ if (restoreFocus === true && previouslyFocused) {
528
565
  previouslyFocused.focus();
529
566
  }
567
+ else if (typeof restoreFocus === 'string') {
568
+ this.document.querySelector(restoreFocus)?.focus();
569
+ }
570
+ else if (restoreFocus instanceof HTMLElement) {
571
+ restoreFocus.focus();
572
+ }
530
573
  });
531
574
  // Show panel after a microtask to allow initial styles to apply
532
575
  requestAnimationFrame(() => {