@cdevhub/ngx-tw 0.2.1 → 0.3.0

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 (139) hide show
  1. package/README.md +264 -49
  2. package/fesm2022/cdevhub-ngx-tw-accordion.mjs +11 -7
  3. package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -1
  4. package/fesm2022/cdevhub-ngx-tw-alert.mjs +43 -29
  5. package/fesm2022/cdevhub-ngx-tw-alert.mjs.map +1 -1
  6. package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs +103 -0
  7. package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs.map +1 -0
  8. package/fesm2022/cdevhub-ngx-tw-avatar.mjs +56 -31
  9. package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -1
  10. package/fesm2022/cdevhub-ngx-tw-badge.mjs +61 -35
  11. package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
  12. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +154 -93
  13. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -1
  14. package/fesm2022/cdevhub-ngx-tw-button.mjs +24 -15
  15. package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
  16. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +3 -3
  17. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -1
  18. package/fesm2022/cdevhub-ngx-tw-calendar.mjs +408 -215
  19. package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -1
  20. package/fesm2022/cdevhub-ngx-tw-card.mjs +33 -24
  21. package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
  22. package/fesm2022/cdevhub-ngx-tw-carousel.mjs +144 -79
  23. package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -1
  24. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +99 -47
  25. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
  26. package/fesm2022/cdevhub-ngx-tw-code-block.mjs +34 -20
  27. package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -1
  28. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +46 -29
  29. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
  30. package/fesm2022/cdevhub-ngx-tw-combobox.mjs +195 -110
  31. package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
  32. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +140 -73
  33. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -1
  34. package/fesm2022/cdevhub-ngx-tw-core.mjs +16 -11
  35. package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -1
  36. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +393 -149
  37. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
  38. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +305 -150
  39. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
  40. package/fesm2022/cdevhub-ngx-tw-dialog.mjs +56 -43
  41. package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
  42. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +51 -33
  43. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -1
  44. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs +905 -0
  45. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs.map +1 -0
  46. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +49 -26
  47. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -1
  48. package/fesm2022/cdevhub-ngx-tw-form-field.mjs +133 -74
  49. package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
  50. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs +2 -2
  51. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs.map +1 -1
  52. package/fesm2022/cdevhub-ngx-tw-icon.mjs +28 -17
  53. package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -1
  54. package/fesm2022/cdevhub-ngx-tw-input.mjs +37 -21
  55. package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
  56. package/fesm2022/cdevhub-ngx-tw-item.mjs +33 -24
  57. package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
  58. package/fesm2022/cdevhub-ngx-tw-menu.mjs +63 -48
  59. package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -1
  60. package/fesm2022/cdevhub-ngx-tw-number-input.mjs +622 -0
  61. package/fesm2022/cdevhub-ngx-tw-number-input.mjs.map +1 -0
  62. package/fesm2022/cdevhub-ngx-tw-paginator.mjs +137 -71
  63. package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
  64. package/fesm2022/cdevhub-ngx-tw-popover.mjs +101 -46
  65. package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
  66. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +57 -30
  67. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -1
  68. package/fesm2022/cdevhub-ngx-tw-radio.mjs +108 -57
  69. package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
  70. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +46 -26
  71. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -1
  72. package/fesm2022/cdevhub-ngx-tw-select.mjs +217 -122
  73. package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
  74. package/fesm2022/cdevhub-ngx-tw-separator.mjs +21 -12
  75. package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -1
  76. package/fesm2022/cdevhub-ngx-tw-sheet.mjs +58 -44
  77. package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
  78. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs +25 -14
  79. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs.map +1 -1
  80. package/fesm2022/cdevhub-ngx-tw-slider.mjs +155 -79
  81. package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
  82. package/fesm2022/cdevhub-ngx-tw-sort.mjs +44 -25
  83. package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -1
  84. package/fesm2022/cdevhub-ngx-tw-spinner.mjs +29 -16
  85. package/fesm2022/cdevhub-ngx-tw-spinner.mjs.map +1 -1
  86. package/fesm2022/cdevhub-ngx-tw-split.mjs +72 -42
  87. package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -1
  88. package/fesm2022/cdevhub-ngx-tw-stat.mjs +107 -64
  89. package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -1
  90. package/fesm2022/cdevhub-ngx-tw-stepper.mjs +113 -47
  91. package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -1
  92. package/fesm2022/cdevhub-ngx-tw-switch.mjs +61 -32
  93. package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
  94. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +88 -42
  95. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -1
  96. package/fesm2022/cdevhub-ngx-tw-table.mjs +266 -118
  97. package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -1
  98. package/fesm2022/cdevhub-ngx-tw-tabs.mjs +101 -51
  99. package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
  100. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +798 -0
  101. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -0
  102. package/fesm2022/cdevhub-ngx-tw-textarea.mjs +11 -7
  103. package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -1
  104. package/fesm2022/cdevhub-ngx-tw-theme.mjs +22 -14
  105. package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
  106. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +243 -95
  107. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
  108. package/fesm2022/cdevhub-ngx-tw-timeline.mjs +149 -82
  109. package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -1
  110. package/fesm2022/cdevhub-ngx-tw-toast.mjs +89 -55
  111. package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
  112. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +50 -28
  113. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -1
  114. package/fesm2022/cdevhub-ngx-tw-transfer.mjs +1129 -0
  115. package/fesm2022/cdevhub-ngx-tw-transfer.mjs.map +1 -0
  116. package/fesm2022/cdevhub-ngx-tw-tree.mjs +554 -0
  117. package/fesm2022/cdevhub-ngx-tw-tree.mjs.map +1 -0
  118. package/fesm2022/cdevhub-ngx-tw.mjs +7 -0
  119. package/fesm2022/cdevhub-ngx-tw.mjs.map +1 -1
  120. package/package.json +45 -20
  121. package/theme/index.css +10 -2
  122. package/types/cdevhub-ngx-tw-aspect-ratio.d.ts +40 -0
  123. package/types/cdevhub-ngx-tw-calendar.d.ts +39 -8
  124. package/types/cdevhub-ngx-tw-command-palette.d.ts +7 -0
  125. package/types/cdevhub-ngx-tw-date-picker.d.ts +36 -10
  126. package/types/cdevhub-ngx-tw-file-upload.d.ts +250 -0
  127. package/types/cdevhub-ngx-tw-form-field.d.ts +22 -3
  128. package/types/cdevhub-ngx-tw-icon-lucide.d.ts +21 -3
  129. package/types/cdevhub-ngx-tw-number-input.d.ts +130 -0
  130. package/types/cdevhub-ngx-tw-popover.d.ts +8 -0
  131. package/types/cdevhub-ngx-tw-stepper.d.ts +30 -2
  132. package/types/cdevhub-ngx-tw-tab-nav.d.ts +8 -0
  133. package/types/cdevhub-ngx-tw-table.d.ts +30 -1
  134. package/types/cdevhub-ngx-tw-tabs.d.ts +8 -0
  135. package/types/cdevhub-ngx-tw-tags-input.d.ts +217 -0
  136. package/types/cdevhub-ngx-tw-time-picker.d.ts +31 -6
  137. package/types/cdevhub-ngx-tw-transfer.d.ts +330 -0
  138. package/types/cdevhub-ngx-tw-tree.d.ts +189 -0
  139. package/types/cdevhub-ngx-tw.d.ts +7 -0
@@ -7,46 +7,46 @@ import { SkeletonComponent } from '@cdevhub/ngx-tw/skeleton';
7
7
  // ── Slot marker directives (DOM projection) ───────────────────────────
8
8
  /** Label slot — short caption ("Revenue", "Active users"). Projected into `<dt>`. */
9
9
  class StatLabelDirective {
10
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StatLabelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
11
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: StatLabelDirective, isStandalone: true, selector: "[twStatLabel]", ngImport: i0 });
10
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StatLabelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
11
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: StatLabelDirective, isStandalone: true, selector: "[twStatLabel]", ngImport: i0 });
12
12
  }
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StatLabelDirective, decorators: [{
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StatLabelDirective, decorators: [{
14
14
  type: Directive,
15
15
  args: [{ selector: '[twStatLabel]' }]
16
16
  }] });
17
17
  /** Value slot — the dominant numeric/text element. Projected into `<dd>`. */
18
18
  class StatValueDirective {
19
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StatValueDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
20
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: StatValueDirective, isStandalone: true, selector: "[twStatValue]", ngImport: i0 });
19
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StatValueDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
20
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: StatValueDirective, isStandalone: true, selector: "[twStatValue]", ngImport: i0 });
21
21
  }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StatValueDirective, decorators: [{
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StatValueDirective, decorators: [{
23
23
  type: Directive,
24
24
  args: [{ selector: '[twStatValue]' }]
25
25
  }] });
26
26
  /** Description slot — optional secondary text under the value. Projected into a second `<dd>`. */
27
27
  class StatDescriptionDirective {
28
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StatDescriptionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
29
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: StatDescriptionDirective, isStandalone: true, selector: "[twStatDescription]", ngImport: i0 });
28
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StatDescriptionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
29
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: StatDescriptionDirective, isStandalone: true, selector: "[twStatDescription]", ngImport: i0 });
30
30
  }
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StatDescriptionDirective, decorators: [{
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StatDescriptionDirective, decorators: [{
32
32
  type: Directive,
33
33
  args: [{ selector: '[twStatDescription]' }]
34
34
  }] });
35
35
  /** Icon slot — optional leading icon. Triggers the icon-leading layout. */
36
36
  class StatIconDirective {
37
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StatIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
38
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: StatIconDirective, isStandalone: true, selector: "[twStatIcon]", ngImport: i0 });
37
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StatIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
38
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: StatIconDirective, isStandalone: true, selector: "[twStatIcon]", ngImport: i0 });
39
39
  }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StatIconDirective, decorators: [{
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StatIconDirective, decorators: [{
41
41
  type: Directive,
42
42
  args: [{ selector: '[twStatIcon]' }]
43
43
  }] });
44
44
  /** Footer slot — optional auxiliary region (sparklines, tags, metadata). Always renders, even during loading. */
45
45
  class StatFooterDirective {
46
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StatFooterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
47
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: StatFooterDirective, isStandalone: true, selector: "[twStatFooter]", ngImport: i0 });
46
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StatFooterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
47
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: StatFooterDirective, isStandalone: true, selector: "[twStatFooter]", ngImport: i0 });
48
48
  }
49
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StatFooterDirective, decorators: [{
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StatFooterDirective, decorators: [{
50
50
  type: Directive,
51
51
  args: [{ selector: '[twStatFooter]' }]
52
52
  }] });
@@ -226,19 +226,25 @@ const statDelta = tv({
226
226
  */
227
227
  class StatDeltaComponent {
228
228
  /** Direction of change. `'up'` renders an up-chevron and (by default) the `success` color; `'down'` renders a down-chevron and the `error` color; `'neutral'` renders a horizontal-line glyph and the neutral color. Defaults to `'neutral'`. */
229
- direction = input('neutral', ...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
229
+ direction = input('neutral', /* @ts-ignore */
230
+ ...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
230
231
  /** When true, swaps success/error semantics so `down` reads as success and `up` reads as error — use for metrics where lower is better (bounce rate, error rate, latency, churn). `neutral` direction is unaffected. Defaults to `false`. */
231
232
  inverted = input(false, { ...(ngDevMode ? { debugName: "inverted" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
232
233
  /** Display style. `'badge'` (default) wraps the delta in a pill chip; `'inline'` is icon + text only with no chip; `'icon-only'` shows just the chevron for ultra-dense layouts. */
233
- variant = input('badge', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
234
+ variant = input('badge', /* @ts-ignore */
235
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
234
236
  /** Optional comparison label rendered next to the delta value (e.g. `"vs last week"`, `"since launch"`). Defaults to `undefined`. */
235
- comparisonLabel = input(...(ngDevMode ? [undefined, { debugName: "comparisonLabel" }] : /* istanbul ignore next */ []));
237
+ comparisonLabel = input(/* @ts-ignore */
238
+ ...(ngDevMode ? [undefined, { debugName: "comparisonLabel" }] : /* istanbul ignore next */ []));
236
239
  /** Explicit accessible label. When omitted, the component composes one from `direction` + projected text + `comparisonLabel`. Override when projected content is purely symbolic or already localized. Defaults to `undefined`. */
237
- ariaLabel = input(...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
240
+ ariaLabel = input(/* @ts-ignore */
241
+ ...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
238
242
  /** @internal */
239
- textEl = viewChild('textEl', ...(ngDevMode ? [{ debugName: "textEl" }] : /* istanbul ignore next */ []));
243
+ textEl = viewChild('textEl', /* @ts-ignore */
244
+ ...(ngDevMode ? [{ debugName: "textEl" }] : /* istanbul ignore next */ []));
240
245
  /** @internal */
241
- projectedText = signal('', ...(ngDevMode ? [{ debugName: "projectedText" }] : /* istanbul ignore next */ []));
246
+ projectedText = signal('', /* @ts-ignore */
247
+ ...(ngDevMode ? [{ debugName: "projectedText" }] : /* istanbul ignore next */ []));
242
248
  constructor() {
243
249
  const injector = inject(Injector);
244
250
  // Read the projected text via the wrapper span's textContent. textContent
@@ -264,14 +270,16 @@ class StatDeltaComponent {
264
270
  if (dir === 'up')
265
271
  return inv ? 'error' : 'success';
266
272
  return inv ? 'success' : 'error';
267
- }, ...(ngDevMode ? [{ debugName: "effectiveColor" }] : /* istanbul ignore next */ []));
273
+ }, /* @ts-ignore */
274
+ ...(ngDevMode ? [{ debugName: "effectiveColor" }] : /* istanbul ignore next */ []));
268
275
  /** @internal */
269
276
  iconSizeClass = computed(() => {
270
277
  // Glyph sub-scale: size-3 (12px) at the badge/inline xs/sm density,
271
278
  // size-4 (16px) at md+. The delta lives inside text-xs, so size-3 holds.
272
279
  // Larger contexts (md / lg / xl on the parent tile) get size-4.
273
280
  return this.variant() === 'icon-only' ? 'size-4' : 'size-3';
274
- }, ...(ngDevMode ? [{ debugName: "iconSizeClass" }] : /* istanbul ignore next */ []));
281
+ }, /* @ts-ignore */
282
+ ...(ngDevMode ? [{ debugName: "iconSizeClass" }] : /* istanbul ignore next */ []));
275
283
  /** @internal */
276
284
  composedAriaLabel = computed(() => {
277
285
  const explicit = this.ariaLabel();
@@ -291,14 +299,20 @@ class StatDeltaComponent {
291
299
  if (comp)
292
300
  parts.push(comp);
293
301
  return parts.join(' ');
294
- }, ...(ngDevMode ? [{ debugName: "composedAriaLabel" }] : /* istanbul ignore next */ []));
295
- variantResult = computed(() => statDelta({ variant: this.variant(), effectiveColor: this.effectiveColor() }), ...(ngDevMode ? [{ debugName: "variantResult" }] : /* istanbul ignore next */ []));
296
- rootClasses = computed(() => this.variantResult().root(), ...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
297
- iconClasses = computed(() => this.variantResult().icon(), ...(ngDevMode ? [{ debugName: "iconClasses" }] : /* istanbul ignore next */ []));
298
- textClasses = computed(() => this.variantResult().text(), ...(ngDevMode ? [{ debugName: "textClasses" }] : /* istanbul ignore next */ []));
299
- comparisonClasses = computed(() => this.variantResult().comparison(), ...(ngDevMode ? [{ debugName: "comparisonClasses" }] : /* istanbul ignore next */ []));
300
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StatDeltaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
301
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: StatDeltaComponent, isStandalone: true, selector: "tw-stat-delta", inputs: { direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, inverted: { classPropertyName: "inverted", publicName: "inverted", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, comparisonLabel: { classPropertyName: "comparisonLabel", publicName: "comparisonLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "img" }, properties: { "class": "rootClasses()", "attr.aria-label": "composedAriaLabel()" } }, viewQueries: [{ propertyName: "textEl", first: true, predicate: ["textEl"], descendants: true, isSignal: true }], ngImport: i0, template: `
302
+ }, /* @ts-ignore */
303
+ ...(ngDevMode ? [{ debugName: "composedAriaLabel" }] : /* istanbul ignore next */ []));
304
+ variantResult = computed(() => statDelta({ variant: this.variant(), effectiveColor: this.effectiveColor() }), /* @ts-ignore */
305
+ ...(ngDevMode ? [{ debugName: "variantResult" }] : /* istanbul ignore next */ []));
306
+ rootClasses = computed(() => this.variantResult().root(), /* @ts-ignore */
307
+ ...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
308
+ iconClasses = computed(() => this.variantResult().icon(), /* @ts-ignore */
309
+ ...(ngDevMode ? [{ debugName: "iconClasses" }] : /* istanbul ignore next */ []));
310
+ textClasses = computed(() => this.variantResult().text(), /* @ts-ignore */
311
+ ...(ngDevMode ? [{ debugName: "textClasses" }] : /* istanbul ignore next */ []));
312
+ comparisonClasses = computed(() => this.variantResult().comparison(), /* @ts-ignore */
313
+ ...(ngDevMode ? [{ debugName: "comparisonClasses" }] : /* istanbul ignore next */ []));
314
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StatDeltaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
315
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: StatDeltaComponent, isStandalone: true, selector: "tw-stat-delta", inputs: { direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, inverted: { classPropertyName: "inverted", publicName: "inverted", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, comparisonLabel: { classPropertyName: "comparisonLabel", publicName: "comparisonLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "img" }, properties: { "class": "rootClasses()", "attr.aria-label": "composedAriaLabel()" } }, viewQueries: [{ propertyName: "textEl", first: true, predicate: ["textEl"], descendants: true, isSignal: true }], ngImport: i0, template: `
302
316
  <svg
303
317
  [class]="iconClasses() + ' ' + iconSizeClass()"
304
318
  viewBox="0 0 16 16"
@@ -321,7 +335,7 @@ class StatDeltaComponent {
321
335
  }
322
336
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
323
337
  }
324
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StatDeltaComponent, decorators: [{
338
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StatDeltaComponent, decorators: [{
325
339
  type: Component,
326
340
  args: [{
327
341
  selector: 'tw-stat-delta',
@@ -376,30 +390,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
376
390
  */
377
391
  class StatComponent {
378
392
  /** Surface treatment. `'plain'` removes border and background; `'outlined'` (default) adds a border on the surface token; `'elevated'` adds shadow and uses the raised surface; `'filled'` uses the muted surface with no border. */
379
- variant = input('outlined', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
393
+ variant = input('outlined', /* @ts-ignore */
394
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
380
395
  /** Density scale — drives padding, internal gaps, value/label typography, and the skeleton placeholder dimensions. Defaults to `'md'`. */
381
- size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
396
+ size = input('md', /* @ts-ignore */
397
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
382
398
  /** When true, replaces label, value, and delta regions with `<tw-skeleton>` placeholders and toggles `aria-busy="true"` on the host. Projected footer content still renders. Defaults to `false`. */
383
399
  loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
384
400
  /** @internal */
385
- labelSlot = contentChild(StatLabelDirective, ...(ngDevMode ? [{ debugName: "labelSlot" }] : /* istanbul ignore next */ []));
401
+ labelSlot = contentChild(StatLabelDirective, /* @ts-ignore */
402
+ ...(ngDevMode ? [{ debugName: "labelSlot" }] : /* istanbul ignore next */ []));
386
403
  /** @internal */
387
- valueSlot = contentChild(StatValueDirective, ...(ngDevMode ? [{ debugName: "valueSlot" }] : /* istanbul ignore next */ []));
404
+ valueSlot = contentChild(StatValueDirective, /* @ts-ignore */
405
+ ...(ngDevMode ? [{ debugName: "valueSlot" }] : /* istanbul ignore next */ []));
388
406
  /** @internal */
389
- descriptionSlot = contentChild(StatDescriptionDirective, ...(ngDevMode ? [{ debugName: "descriptionSlot" }] : /* istanbul ignore next */ []));
407
+ descriptionSlot = contentChild(StatDescriptionDirective, /* @ts-ignore */
408
+ ...(ngDevMode ? [{ debugName: "descriptionSlot" }] : /* istanbul ignore next */ []));
390
409
  /** @internal */
391
- iconSlot = contentChild(StatIconDirective, ...(ngDevMode ? [{ debugName: "iconSlot" }] : /* istanbul ignore next */ []));
410
+ iconSlot = contentChild(StatIconDirective, /* @ts-ignore */
411
+ ...(ngDevMode ? [{ debugName: "iconSlot" }] : /* istanbul ignore next */ []));
392
412
  /** @internal */
393
- footerSlot = contentChild(StatFooterDirective, ...(ngDevMode ? [{ debugName: "footerSlot" }] : /* istanbul ignore next */ []));
413
+ footerSlot = contentChild(StatFooterDirective, /* @ts-ignore */
414
+ ...(ngDevMode ? [{ debugName: "footerSlot" }] : /* istanbul ignore next */ []));
394
415
  /** @internal */
395
- deltaSlot = contentChild(StatDeltaComponent, ...(ngDevMode ? [{ debugName: "deltaSlot" }] : /* istanbul ignore next */ []));
396
- hasLabel = computed(() => !!this.labelSlot(), ...(ngDevMode ? [{ debugName: "hasLabel" }] : /* istanbul ignore next */ []));
397
- hasValue = computed(() => !!this.valueSlot(), ...(ngDevMode ? [{ debugName: "hasValue" }] : /* istanbul ignore next */ []));
398
- hasDescription = computed(() => !!this.descriptionSlot(), ...(ngDevMode ? [{ debugName: "hasDescription" }] : /* istanbul ignore next */ []));
399
- hasIcon = computed(() => !!this.iconSlot(), ...(ngDevMode ? [{ debugName: "hasIcon" }] : /* istanbul ignore next */ []));
400
- hasFooter = computed(() => !!this.footerSlot(), ...(ngDevMode ? [{ debugName: "hasFooter" }] : /* istanbul ignore next */ []));
401
- hasDelta = computed(() => !!this.deltaSlot(), ...(ngDevMode ? [{ debugName: "hasDelta" }] : /* istanbul ignore next */ []));
402
- iconLeading = computed(() => this.hasIcon(), ...(ngDevMode ? [{ debugName: "iconLeading" }] : /* istanbul ignore next */ []));
416
+ deltaSlot = contentChild(StatDeltaComponent, /* @ts-ignore */
417
+ ...(ngDevMode ? [{ debugName: "deltaSlot" }] : /* istanbul ignore next */ []));
418
+ hasLabel = computed(() => !!this.labelSlot(), /* @ts-ignore */
419
+ ...(ngDevMode ? [{ debugName: "hasLabel" }] : /* istanbul ignore next */ []));
420
+ hasValue = computed(() => !!this.valueSlot(), /* @ts-ignore */
421
+ ...(ngDevMode ? [{ debugName: "hasValue" }] : /* istanbul ignore next */ []));
422
+ hasDescription = computed(() => !!this.descriptionSlot(), /* @ts-ignore */
423
+ ...(ngDevMode ? [{ debugName: "hasDescription" }] : /* istanbul ignore next */ []));
424
+ hasIcon = computed(() => !!this.iconSlot(), /* @ts-ignore */
425
+ ...(ngDevMode ? [{ debugName: "hasIcon" }] : /* istanbul ignore next */ []));
426
+ hasFooter = computed(() => !!this.footerSlot(), /* @ts-ignore */
427
+ ...(ngDevMode ? [{ debugName: "hasFooter" }] : /* istanbul ignore next */ []));
428
+ hasDelta = computed(() => !!this.deltaSlot(), /* @ts-ignore */
429
+ ...(ngDevMode ? [{ debugName: "hasDelta" }] : /* istanbul ignore next */ []));
430
+ iconLeading = computed(() => this.hasIcon(), /* @ts-ignore */
431
+ ...(ngDevMode ? [{ debugName: "iconLeading" }] : /* istanbul ignore next */ []));
403
432
  /** Skeleton width during loading state — scales with the size axis. */
404
433
  loadingValueWidth = computed(() => {
405
434
  switch (this.size()) {
@@ -409,7 +438,8 @@ class StatComponent {
409
438
  case 'lg': return '8rem';
410
439
  case 'xl': return '10rem';
411
440
  }
412
- }, ...(ngDevMode ? [{ debugName: "loadingValueWidth" }] : /* istanbul ignore next */ []));
441
+ }, /* @ts-ignore */
442
+ ...(ngDevMode ? [{ debugName: "loadingValueWidth" }] : /* istanbul ignore next */ []));
413
443
  /** Skeleton height during loading state — matches the value font size. */
414
444
  loadingValueHeight = computed(() => {
415
445
  switch (this.size()) {
@@ -419,21 +449,34 @@ class StatComponent {
419
449
  case 'lg': return '1rem';
420
450
  case 'xl': return '1rem';
421
451
  }
422
- }, ...(ngDevMode ? [{ debugName: "loadingValueHeight" }] : /* istanbul ignore next */ []));
423
- variantResult = computed(() => statTile({ variant: this.variant(), size: this.size() }), ...(ngDevMode ? [{ debugName: "variantResult" }] : /* istanbul ignore next */ []));
424
- rootClasses = computed(() => this.variantResult().root(), ...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
425
- iconFlexClasses = computed(() => this.variantResult().iconFlex(), ...(ngDevMode ? [{ debugName: "iconFlexClasses" }] : /* istanbul ignore next */ []));
426
- iconWrapperClasses = computed(() => this.variantResult().iconWrapper(), ...(ngDevMode ? [{ debugName: "iconWrapperClasses" }] : /* istanbul ignore next */ []));
427
- contentStackClasses = computed(() => this.variantResult().contentStack(), ...(ngDevMode ? [{ debugName: "contentStackClasses" }] : /* istanbul ignore next */ []));
428
- dlClasses = computed(() => this.variantResult().dl(), ...(ngDevMode ? [{ debugName: "dlClasses" }] : /* istanbul ignore next */ []));
429
- labelClasses = computed(() => this.variantResult().label(), ...(ngDevMode ? [{ debugName: "labelClasses" }] : /* istanbul ignore next */ []));
430
- valueRowClasses = computed(() => this.variantResult().valueRow(), ...(ngDevMode ? [{ debugName: "valueRowClasses" }] : /* istanbul ignore next */ []));
431
- valueClasses = computed(() => this.variantResult().value(), ...(ngDevMode ? [{ debugName: "valueClasses" }] : /* istanbul ignore next */ []));
432
- descriptionClasses = computed(() => this.variantResult().description(), ...(ngDevMode ? [{ debugName: "descriptionClasses" }] : /* istanbul ignore next */ []));
433
- deltaClasses = computed(() => this.variantResult().delta(), ...(ngDevMode ? [{ debugName: "deltaClasses" }] : /* istanbul ignore next */ []));
434
- footerClasses = computed(() => this.variantResult().footer(), ...(ngDevMode ? [{ debugName: "footerClasses" }] : /* istanbul ignore next */ []));
435
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
436
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: StatComponent, isStandalone: true, selector: "tw-stat", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "aria-live": "polite" }, properties: { "class": "rootClasses()", "attr.aria-busy": "loading() ? \"true\" : null" } }, queries: [{ propertyName: "labelSlot", first: true, predicate: StatLabelDirective, descendants: true, isSignal: true }, { propertyName: "valueSlot", first: true, predicate: StatValueDirective, descendants: true, isSignal: true }, { propertyName: "descriptionSlot", first: true, predicate: StatDescriptionDirective, descendants: true, isSignal: true }, { propertyName: "iconSlot", first: true, predicate: StatIconDirective, descendants: true, isSignal: true }, { propertyName: "footerSlot", first: true, predicate: StatFooterDirective, descendants: true, isSignal: true }, { propertyName: "deltaSlot", first: true, predicate: StatDeltaComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
452
+ }, /* @ts-ignore */
453
+ ...(ngDevMode ? [{ debugName: "loadingValueHeight" }] : /* istanbul ignore next */ []));
454
+ variantResult = computed(() => statTile({ variant: this.variant(), size: this.size() }), /* @ts-ignore */
455
+ ...(ngDevMode ? [{ debugName: "variantResult" }] : /* istanbul ignore next */ []));
456
+ rootClasses = computed(() => this.variantResult().root(), /* @ts-ignore */
457
+ ...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
458
+ iconFlexClasses = computed(() => this.variantResult().iconFlex(), /* @ts-ignore */
459
+ ...(ngDevMode ? [{ debugName: "iconFlexClasses" }] : /* istanbul ignore next */ []));
460
+ iconWrapperClasses = computed(() => this.variantResult().iconWrapper(), /* @ts-ignore */
461
+ ...(ngDevMode ? [{ debugName: "iconWrapperClasses" }] : /* istanbul ignore next */ []));
462
+ contentStackClasses = computed(() => this.variantResult().contentStack(), /* @ts-ignore */
463
+ ...(ngDevMode ? [{ debugName: "contentStackClasses" }] : /* istanbul ignore next */ []));
464
+ dlClasses = computed(() => this.variantResult().dl(), /* @ts-ignore */
465
+ ...(ngDevMode ? [{ debugName: "dlClasses" }] : /* istanbul ignore next */ []));
466
+ labelClasses = computed(() => this.variantResult().label(), /* @ts-ignore */
467
+ ...(ngDevMode ? [{ debugName: "labelClasses" }] : /* istanbul ignore next */ []));
468
+ valueRowClasses = computed(() => this.variantResult().valueRow(), /* @ts-ignore */
469
+ ...(ngDevMode ? [{ debugName: "valueRowClasses" }] : /* istanbul ignore next */ []));
470
+ valueClasses = computed(() => this.variantResult().value(), /* @ts-ignore */
471
+ ...(ngDevMode ? [{ debugName: "valueClasses" }] : /* istanbul ignore next */ []));
472
+ descriptionClasses = computed(() => this.variantResult().description(), /* @ts-ignore */
473
+ ...(ngDevMode ? [{ debugName: "descriptionClasses" }] : /* istanbul ignore next */ []));
474
+ deltaClasses = computed(() => this.variantResult().delta(), /* @ts-ignore */
475
+ ...(ngDevMode ? [{ debugName: "deltaClasses" }] : /* istanbul ignore next */ []));
476
+ footerClasses = computed(() => this.variantResult().footer(), /* @ts-ignore */
477
+ ...(ngDevMode ? [{ debugName: "footerClasses" }] : /* istanbul ignore next */ []));
478
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
479
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: StatComponent, isStandalone: true, selector: "tw-stat", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "aria-live": "polite" }, properties: { "class": "rootClasses()", "attr.aria-busy": "loading() ? \"true\" : null" } }, queries: [{ propertyName: "labelSlot", first: true, predicate: StatLabelDirective, descendants: true, isSignal: true }, { propertyName: "valueSlot", first: true, predicate: StatValueDirective, descendants: true, isSignal: true }, { propertyName: "descriptionSlot", first: true, predicate: StatDescriptionDirective, descendants: true, isSignal: true }, { propertyName: "iconSlot", first: true, predicate: StatIconDirective, descendants: true, isSignal: true }, { propertyName: "footerSlot", first: true, predicate: StatFooterDirective, descendants: true, isSignal: true }, { propertyName: "deltaSlot", first: true, predicate: StatDeltaComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
437
480
  @if (iconLeading()) {
438
481
  <div [class]="iconFlexClasses()">
439
482
  <div [class]="iconWrapperClasses()">
@@ -494,7 +537,7 @@ class StatComponent {
494
537
  </ng-template>
495
538
  `, isInline: true, dependencies: [{ kind: "component", type: SkeletonComponent, selector: "tw-skeleton", inputs: ["shape", "animation", "width", "height", "lines", "announce"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
496
539
  }
497
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StatComponent, decorators: [{
540
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StatComponent, decorators: [{
498
541
  type: Component,
499
542
  args: [{
500
543
  selector: 'tw-stat',
@@ -1 +1 @@
1
- {"version":3,"file":"cdevhub-ngx-tw-stat.mjs","sources":["../../../projects/ngx-tw/stat/stat.ts","../../../projects/ngx-tw/stat/cdevhub-ngx-tw-stat.ts"],"sourcesContent":["import {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n type ElementRef,\n inject,\n input,\n Injector,\n signal,\n viewChild,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { tv } from 'tailwind-variants';\nimport type { TwSize } from '@cdevhub/ngx-tw/core';\nimport { SkeletonComponent } from '@cdevhub/ngx-tw/skeleton';\n\n/** Surface treatment for the stat tile. */\nexport type StatVariant = 'plain' | 'outlined' | 'elevated' | 'filled';\n\n/** Direction of trend conveyed by the delta indicator. */\nexport type StatDeltaDirection = 'up' | 'down' | 'neutral';\n\n/** Display style of the trend delta. */\nexport type StatDeltaVariant = 'badge' | 'inline' | 'icon-only';\n\n// ── Slot marker directives (DOM projection) ───────────────────────────\n\n/** Label slot — short caption (\"Revenue\", \"Active users\"). Projected into `<dt>`. */\n@Directive({ selector: '[twStatLabel]' })\nexport class StatLabelDirective {}\n\n/** Value slot — the dominant numeric/text element. Projected into `<dd>`. */\n@Directive({ selector: '[twStatValue]' })\nexport class StatValueDirective {}\n\n/** Description slot — optional secondary text under the value. Projected into a second `<dd>`. */\n@Directive({ selector: '[twStatDescription]' })\nexport class StatDescriptionDirective {}\n\n/** Icon slot — optional leading icon. Triggers the icon-leading layout. */\n@Directive({ selector: '[twStatIcon]' })\nexport class StatIconDirective {}\n\n/** Footer slot — optional auxiliary region (sparklines, tags, metadata). Always renders, even during loading. */\n@Directive({ selector: '[twStatFooter]' })\nexport class StatFooterDirective {}\n\n// ── Stat tile tv() config ─────────────────────────────────────────────\n\nconst statTile = tv(\n {\n slots: {\n root: 'block text-fg',\n iconFlex: 'flex items-start gap-3',\n iconWrapper: 'shrink-0 text-fg-muted',\n contentStack: 'min-w-0 flex-1',\n dl: 'flex flex-col',\n label: 'text-fg-muted font-medium',\n valueRow: 'flex items-baseline gap-2 flex-wrap',\n value: 'text-fg block tabular-nums font-semibold',\n description: 'text-fg-muted',\n delta: 'inline-flex items-center',\n footer: 'mt-3 pt-3 border-t border-border',\n },\n variants: {\n variant: {\n plain: { root: 'bg-transparent' },\n outlined: { root: 'bg-surface border border-border rounded-lg' },\n elevated: {\n root: 'bg-surface-raised border border-border rounded-lg shadow hover:shadow-md transition-shadow duration-200 motion-reduce:transition-none',\n },\n filled: { root: 'bg-surface-muted rounded-lg' },\n },\n size: {\n xs: {\n root: 'p-2',\n dl: 'gap-1',\n label: 'text-2xs',\n value: 'text-xs',\n description: 'text-2xs',\n delta: 'mt-1',\n },\n sm: {\n root: 'p-3',\n dl: 'gap-1',\n label: 'text-xs',\n value: 'text-sm',\n description: 'text-xs',\n delta: 'mt-1',\n },\n md: {\n root: 'p-4',\n dl: 'gap-1.5',\n label: 'text-xs',\n value: 'text-base',\n description: 'text-xs',\n delta: 'mt-1',\n },\n // lg/xl `value` uses `text-base` per the KPI-value carve-out\n // (CLAUDE.md typography). The dominant numeric needs to outrank the\n // `text-sm` label/description in visual hierarchy.\n lg: {\n root: 'p-6',\n dl: 'gap-2',\n label: 'text-sm',\n value: 'text-base font-bold',\n description: 'text-sm',\n delta: 'mt-2',\n },\n xl: {\n root: 'p-8',\n dl: 'gap-2',\n label: 'text-sm',\n value: 'text-base font-extrabold',\n description: 'text-sm',\n delta: 'mt-2',\n },\n },\n },\n defaultVariants: {\n variant: 'outlined',\n size: 'md',\n },\n },\n { twMerge: true },\n);\n\n// ── Delta tv() config ─────────────────────────────────────────────────\n\nconst statDelta = tv(\n {\n slots: {\n root: 'relative inline-flex items-center gap-1 font-medium tabular-nums',\n icon: 'shrink-0',\n text: 'inline-flex items-center',\n comparison: 'text-fg-muted',\n },\n variants: {\n variant: {\n badge: {\n root: 'px-2 py-0.5 rounded-md text-xs',\n },\n inline: {\n root: 'text-xs',\n },\n 'icon-only': {\n // size-6 (24px) — square interactive-target scale at xs density per\n // CLAUDE.md icon sub-scale; here it just centres the chevron.\n root: 'justify-center size-6 rounded-md',\n // Text and comparison stay in the DOM so the composed aria-label\n // still picks them up; `sr-only` removes them visually.\n text: 'sr-only',\n comparison: 'sr-only',\n },\n },\n effectiveColor: {\n success: {},\n error: {},\n neutral: {},\n },\n },\n compoundVariants: [\n // ===== badge (soft chip) =====\n {\n variant: 'badge',\n effectiveColor: 'success',\n class: { root: 'bg-success-soft text-success-soft-fg' },\n },\n {\n variant: 'badge',\n effectiveColor: 'error',\n class: { root: 'bg-error-soft text-error-soft-fg' },\n },\n // Neutral pinned explicitly to surface/fg tokens (advisor: never use\n // `text-neutral-700` or template through neutral via -soft-fg chain).\n {\n variant: 'badge',\n effectiveColor: 'neutral',\n class: { root: 'bg-surface-muted text-fg-muted' },\n },\n\n // ===== inline (no chip) =====\n {\n variant: 'inline',\n effectiveColor: 'success',\n class: { root: 'text-success-700' },\n },\n {\n variant: 'inline',\n effectiveColor: 'error',\n class: { root: 'text-error-700' },\n },\n {\n variant: 'inline',\n effectiveColor: 'neutral',\n class: { root: 'text-fg-muted' },\n },\n\n // ===== icon-only =====\n {\n variant: 'icon-only',\n effectiveColor: 'success',\n class: { root: 'bg-success-soft text-success-soft-fg' },\n },\n {\n variant: 'icon-only',\n effectiveColor: 'error',\n class: { root: 'bg-error-soft text-error-soft-fg' },\n },\n {\n variant: 'icon-only',\n effectiveColor: 'neutral',\n class: { root: 'bg-surface-muted text-fg-muted' },\n },\n ],\n defaultVariants: {\n variant: 'badge',\n effectiveColor: 'neutral',\n },\n },\n { twMerge: true },\n);\n\n// ── Stat delta component ──────────────────────────────────────────────\n\n/**\n * Compact trend indicator — direction + projected delta text + optional\n * comparison label. Usable standalone or projected into a `<tw-stat>` tile.\n *\n * Sentiment is conveyed by both icon direction and color; consumers running\n * \"lower is better\" metrics (bounce rate, latency, churn) set `inverted` to\n * swap the success/error color mapping without changing the literal direction\n * or the announced verb.\n */\n@Component({\n selector: 'tw-stat-delta',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'img',\n '[class]': 'rootClasses()',\n '[attr.aria-label]': 'composedAriaLabel()',\n },\n template: `\n <svg\n [class]=\"iconClasses() + ' ' + iconSizeClass()\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n @switch (direction()) {\n @case ('up') { <path d=\"M4 10l4-4 4 4\" /> }\n @case ('down') { <path d=\"M4 6l4 4 4-4\" /> }\n @default { <path d=\"M3 8h10\" /> }\n }\n </svg>\n <span #textEl [class]=\"textClasses()\"><ng-content /></span>\n @if (comparisonLabel(); as comp) {\n <span [class]=\"comparisonClasses()\">{{ comp }}</span>\n }\n `,\n})\nexport class StatDeltaComponent {\n /** Direction of change. `'up'` renders an up-chevron and (by default) the `success` color; `'down'` renders a down-chevron and the `error` color; `'neutral'` renders a horizontal-line glyph and the neutral color. Defaults to `'neutral'`. */\n readonly direction = input<StatDeltaDirection>('neutral');\n\n /** When true, swaps success/error semantics so `down` reads as success and `up` reads as error — use for metrics where lower is better (bounce rate, error rate, latency, churn). `neutral` direction is unaffected. Defaults to `false`. */\n readonly inverted = input(false, { transform: booleanAttribute });\n\n /** Display style. `'badge'` (default) wraps the delta in a pill chip; `'inline'` is icon + text only with no chip; `'icon-only'` shows just the chevron for ultra-dense layouts. */\n readonly variant = input<StatDeltaVariant>('badge');\n\n /** Optional comparison label rendered next to the delta value (e.g. `\"vs last week\"`, `\"since launch\"`). Defaults to `undefined`. */\n readonly comparisonLabel = input<string>();\n\n /** Explicit accessible label. When omitted, the component composes one from `direction` + projected text + `comparisonLabel`. Override when projected content is purely symbolic or already localized. Defaults to `undefined`. */\n readonly ariaLabel = input<string>();\n\n /** @internal */\n protected readonly textEl = viewChild<ElementRef<HTMLElement>>('textEl');\n\n /** @internal */\n protected readonly projectedText = signal('');\n\n constructor() {\n const injector = inject(Injector);\n // Read the projected text via the wrapper span's textContent. textContent\n // is recursive across projected children, so this resolves the consumer's\n // string even when wrapped in arbitrary markup. afterRenderEffect runs\n // after each render so projection changes are captured.\n afterRenderEffect(\n () => {\n const el = this.textEl()?.nativeElement;\n if (!el) {\n this.projectedText.set('');\n return;\n }\n const text = (el.textContent ?? '').trim();\n this.projectedText.set(text);\n },\n { injector },\n );\n }\n\n /** @internal */\n protected readonly effectiveColor = computed<'success' | 'error' | 'neutral'>(() => {\n const dir = this.direction();\n if (dir === 'neutral') return 'neutral';\n const inv = this.inverted();\n if (dir === 'up') return inv ? 'error' : 'success';\n return inv ? 'success' : 'error';\n });\n\n /** @internal */\n protected readonly iconSizeClass = computed(() => {\n // Glyph sub-scale: size-3 (12px) at the badge/inline xs/sm density,\n // size-4 (16px) at md+. The delta lives inside text-xs, so size-3 holds.\n // Larger contexts (md / lg / xl on the parent tile) get size-4.\n return this.variant() === 'icon-only' ? 'size-4' : 'size-3';\n });\n\n /** @internal */\n protected readonly composedAriaLabel = computed(() => {\n const explicit = this.ariaLabel();\n if (explicit) return explicit;\n const dir = this.direction();\n const verb = dir === 'up' ? 'increased' : dir === 'down' ? 'decreased' : 'unchanged';\n const text = this.projectedText();\n const comp = this.comparisonLabel();\n const parts: string[] = [];\n if (text) {\n parts.push(`${verb} by ${text}`);\n } else {\n parts.push(verb);\n }\n if (comp) parts.push(comp);\n return parts.join(' ');\n });\n\n private readonly variantResult = computed(() =>\n statDelta({ variant: this.variant(), effectiveColor: this.effectiveColor() }),\n );\n\n protected readonly rootClasses = computed(() => this.variantResult().root());\n protected readonly iconClasses = computed(() => this.variantResult().icon());\n protected readonly textClasses = computed(() => this.variantResult().text());\n protected readonly comparisonClasses = computed(() => this.variantResult().comparison());\n}\n\n// ── Stat tile component ───────────────────────────────────────────────\n\n/**\n * KPI tile — a compact display tile surfacing a single key performance\n * indicator with an optional trend delta. Composes a `<dl>` / `<dt>` / `<dd>`\n * definition list internally so the label-to-value pairing is announced\n * naturally by assistive technology.\n *\n * Slots:\n * - `[twStatLabel]` — caption (rendered as `<dt>`).\n * - `[twStatValue]` — dominant value (rendered as `<dd>`).\n * - `[twStatDescription]` — optional secondary text (second `<dd>`).\n * - `[twStatIcon]` — optional leading icon (switches to icon-leading layout).\n * - `[twStatFooter]` — optional auxiliary region (sparklines, tags).\n * - `<tw-stat-delta>` — projected trend indicator alongside the value.\n *\n * Loading state replaces label/value/delta with `<tw-skeleton>` placeholders\n * sized to match the density. Footer always renders during loading so\n * consumers can compose their own skeleton charts.\n */\n@Component({\n selector: 'tw-stat',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkeletonComponent, NgTemplateOutlet],\n host: {\n '[class]': 'rootClasses()',\n // Permanent live region — `aria-busy` toggle alone signals state change\n // so assistive tech announces the resolved content on loading→loaded\n // without the live region being torn down mid-transition.\n 'aria-live': 'polite',\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\n },\n template: `\n @if (iconLeading()) {\n <div [class]=\"iconFlexClasses()\">\n <div [class]=\"iconWrapperClasses()\">\n <ng-content select=\"[twStatIcon]\" />\n </div>\n <div [class]=\"contentStackClasses()\">\n <ng-container [ngTemplateOutlet]=\"dlBlock\" />\n </div>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"dlBlock\" />\n }\n\n @if (hasFooter()) {\n <div [class]=\"footerClasses()\">\n <ng-content select=\"[twStatFooter]\" />\n </div>\n }\n\n <ng-template #dlBlock>\n <dl [class]=\"dlClasses()\">\n @if (loading()) {\n <dt [class]=\"labelClasses()\">\n <tw-skeleton width=\"40%\" height=\"0.75rem\" />\n </dt>\n } @else if (hasLabel()) {\n <dt [class]=\"labelClasses()\">\n <ng-content select=\"[twStatLabel]\" />\n </dt>\n }\n\n <dd [class]=\"valueRowClasses()\">\n @if (loading()) {\n <tw-skeleton [width]=\"loadingValueWidth()\" [height]=\"loadingValueHeight()\" />\n } @else if (hasValue()) {\n <span [class]=\"valueClasses()\">\n <ng-content select=\"[twStatValue]\" />\n </span>\n }\n\n @if (loading()) {\n <span [class]=\"deltaClasses()\">\n <tw-skeleton width=\"3rem\" height=\"1.25rem\" />\n </span>\n } @else if (hasDelta()) {\n <span [class]=\"deltaClasses()\">\n <ng-content select=\"tw-stat-delta\" />\n </span>\n }\n </dd>\n\n @if (!loading() && hasDescription()) {\n <dd [class]=\"descriptionClasses()\">\n <ng-content select=\"[twStatDescription]\" />\n </dd>\n }\n </dl>\n </ng-template>\n `,\n})\nexport class StatComponent {\n /** Surface treatment. `'plain'` removes border and background; `'outlined'` (default) adds a border on the surface token; `'elevated'` adds shadow and uses the raised surface; `'filled'` uses the muted surface with no border. */\n readonly variant = input<StatVariant>('outlined');\n\n /** Density scale — drives padding, internal gaps, value/label typography, and the skeleton placeholder dimensions. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** When true, replaces label, value, and delta regions with `<tw-skeleton>` placeholders and toggles `aria-busy=\"true\"` on the host. Projected footer content still renders. Defaults to `false`. */\n readonly loading = input(false, { transform: booleanAttribute });\n\n /** @internal */\n protected readonly labelSlot = contentChild(StatLabelDirective);\n /** @internal */\n protected readonly valueSlot = contentChild(StatValueDirective);\n /** @internal */\n protected readonly descriptionSlot = contentChild(StatDescriptionDirective);\n /** @internal */\n protected readonly iconSlot = contentChild(StatIconDirective);\n /** @internal */\n protected readonly footerSlot = contentChild(StatFooterDirective);\n /** @internal */\n protected readonly deltaSlot = contentChild(StatDeltaComponent);\n\n protected readonly hasLabel = computed(() => !!this.labelSlot());\n protected readonly hasValue = computed(() => !!this.valueSlot());\n protected readonly hasDescription = computed(() => !!this.descriptionSlot());\n protected readonly hasIcon = computed(() => !!this.iconSlot());\n protected readonly hasFooter = computed(() => !!this.footerSlot());\n protected readonly hasDelta = computed(() => !!this.deltaSlot());\n\n protected readonly iconLeading = computed(() => this.hasIcon());\n\n /** Skeleton width during loading state — scales with the size axis. */\n protected readonly loadingValueWidth = computed(() => {\n switch (this.size()) {\n case 'xs': return '4rem';\n case 'sm': return '5rem';\n case 'md': return '6rem';\n case 'lg': return '8rem';\n case 'xl': return '10rem';\n }\n });\n\n /** Skeleton height during loading state — matches the value font size. */\n protected readonly loadingValueHeight = computed(() => {\n switch (this.size()) {\n case 'xs': return '0.75rem';\n case 'sm': return '0.875rem';\n case 'md': return '1rem';\n case 'lg': return '1rem';\n case 'xl': return '1rem';\n }\n });\n\n private readonly variantResult = computed(() =>\n statTile({ variant: this.variant(), size: this.size() }),\n );\n\n protected readonly rootClasses = computed(() => this.variantResult().root());\n protected readonly iconFlexClasses = computed(() => this.variantResult().iconFlex());\n protected readonly iconWrapperClasses = computed(() => this.variantResult().iconWrapper());\n protected readonly contentStackClasses = computed(() => this.variantResult().contentStack());\n protected readonly dlClasses = computed(() => this.variantResult().dl());\n protected readonly labelClasses = computed(() => this.variantResult().label());\n protected readonly valueRowClasses = computed(() => this.variantResult().valueRow());\n protected readonly valueClasses = computed(() => this.variantResult().value());\n protected readonly descriptionClasses = computed(() => this.variantResult().description());\n protected readonly deltaClasses = computed(() => this.variantResult().delta());\n protected readonly footerClasses = computed(() => this.variantResult().footer());\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":"cdevhub-ngx-tw-stat.mjs","sources":["../../../projects/ngx-tw/stat/stat.ts","../../../projects/ngx-tw/stat/cdevhub-ngx-tw-stat.ts"],"sourcesContent":["import {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n type ElementRef,\n inject,\n input,\n Injector,\n signal,\n viewChild,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { tv } from 'tailwind-variants';\nimport type { TwSize } from '@cdevhub/ngx-tw/core';\nimport { SkeletonComponent } from '@cdevhub/ngx-tw/skeleton';\n\n/** Surface treatment for the stat tile. */\nexport type StatVariant = 'plain' | 'outlined' | 'elevated' | 'filled';\n\n/** Direction of trend conveyed by the delta indicator. */\nexport type StatDeltaDirection = 'up' | 'down' | 'neutral';\n\n/** Display style of the trend delta. */\nexport type StatDeltaVariant = 'badge' | 'inline' | 'icon-only';\n\n// ── Slot marker directives (DOM projection) ───────────────────────────\n\n/** Label slot — short caption (\"Revenue\", \"Active users\"). Projected into `<dt>`. */\n@Directive({ selector: '[twStatLabel]' })\nexport class StatLabelDirective {}\n\n/** Value slot — the dominant numeric/text element. Projected into `<dd>`. */\n@Directive({ selector: '[twStatValue]' })\nexport class StatValueDirective {}\n\n/** Description slot — optional secondary text under the value. Projected into a second `<dd>`. */\n@Directive({ selector: '[twStatDescription]' })\nexport class StatDescriptionDirective {}\n\n/** Icon slot — optional leading icon. Triggers the icon-leading layout. */\n@Directive({ selector: '[twStatIcon]' })\nexport class StatIconDirective {}\n\n/** Footer slot — optional auxiliary region (sparklines, tags, metadata). Always renders, even during loading. */\n@Directive({ selector: '[twStatFooter]' })\nexport class StatFooterDirective {}\n\n// ── Stat tile tv() config ─────────────────────────────────────────────\n\nconst statTile = tv(\n {\n slots: {\n root: 'block text-fg',\n iconFlex: 'flex items-start gap-3',\n iconWrapper: 'shrink-0 text-fg-muted',\n contentStack: 'min-w-0 flex-1',\n dl: 'flex flex-col',\n label: 'text-fg-muted font-medium',\n valueRow: 'flex items-baseline gap-2 flex-wrap',\n value: 'text-fg block tabular-nums font-semibold',\n description: 'text-fg-muted',\n delta: 'inline-flex items-center',\n footer: 'mt-3 pt-3 border-t border-border',\n },\n variants: {\n variant: {\n plain: { root: 'bg-transparent' },\n outlined: { root: 'bg-surface border border-border rounded-lg' },\n elevated: {\n root: 'bg-surface-raised border border-border rounded-lg shadow hover:shadow-md transition-shadow duration-200 motion-reduce:transition-none',\n },\n filled: { root: 'bg-surface-muted rounded-lg' },\n },\n size: {\n xs: {\n root: 'p-2',\n dl: 'gap-1',\n label: 'text-2xs',\n value: 'text-xs',\n description: 'text-2xs',\n delta: 'mt-1',\n },\n sm: {\n root: 'p-3',\n dl: 'gap-1',\n label: 'text-xs',\n value: 'text-sm',\n description: 'text-xs',\n delta: 'mt-1',\n },\n md: {\n root: 'p-4',\n dl: 'gap-1.5',\n label: 'text-xs',\n value: 'text-base',\n description: 'text-xs',\n delta: 'mt-1',\n },\n // lg/xl `value` uses `text-base` per the KPI-value carve-out\n // (CLAUDE.md typography). The dominant numeric needs to outrank the\n // `text-sm` label/description in visual hierarchy.\n lg: {\n root: 'p-6',\n dl: 'gap-2',\n label: 'text-sm',\n value: 'text-base font-bold',\n description: 'text-sm',\n delta: 'mt-2',\n },\n xl: {\n root: 'p-8',\n dl: 'gap-2',\n label: 'text-sm',\n value: 'text-base font-extrabold',\n description: 'text-sm',\n delta: 'mt-2',\n },\n },\n },\n defaultVariants: {\n variant: 'outlined',\n size: 'md',\n },\n },\n { twMerge: true },\n);\n\n// ── Delta tv() config ─────────────────────────────────────────────────\n\nconst statDelta = tv(\n {\n slots: {\n root: 'relative inline-flex items-center gap-1 font-medium tabular-nums',\n icon: 'shrink-0',\n text: 'inline-flex items-center',\n comparison: 'text-fg-muted',\n },\n variants: {\n variant: {\n badge: {\n root: 'px-2 py-0.5 rounded-md text-xs',\n },\n inline: {\n root: 'text-xs',\n },\n 'icon-only': {\n // size-6 (24px) — square interactive-target scale at xs density per\n // CLAUDE.md icon sub-scale; here it just centres the chevron.\n root: 'justify-center size-6 rounded-md',\n // Text and comparison stay in the DOM so the composed aria-label\n // still picks them up; `sr-only` removes them visually.\n text: 'sr-only',\n comparison: 'sr-only',\n },\n },\n effectiveColor: {\n success: {},\n error: {},\n neutral: {},\n },\n },\n compoundVariants: [\n // ===== badge (soft chip) =====\n {\n variant: 'badge',\n effectiveColor: 'success',\n class: { root: 'bg-success-soft text-success-soft-fg' },\n },\n {\n variant: 'badge',\n effectiveColor: 'error',\n class: { root: 'bg-error-soft text-error-soft-fg' },\n },\n // Neutral pinned explicitly to surface/fg tokens (advisor: never use\n // `text-neutral-700` or template through neutral via -soft-fg chain).\n {\n variant: 'badge',\n effectiveColor: 'neutral',\n class: { root: 'bg-surface-muted text-fg-muted' },\n },\n\n // ===== inline (no chip) =====\n {\n variant: 'inline',\n effectiveColor: 'success',\n class: { root: 'text-success-700' },\n },\n {\n variant: 'inline',\n effectiveColor: 'error',\n class: { root: 'text-error-700' },\n },\n {\n variant: 'inline',\n effectiveColor: 'neutral',\n class: { root: 'text-fg-muted' },\n },\n\n // ===== icon-only =====\n {\n variant: 'icon-only',\n effectiveColor: 'success',\n class: { root: 'bg-success-soft text-success-soft-fg' },\n },\n {\n variant: 'icon-only',\n effectiveColor: 'error',\n class: { root: 'bg-error-soft text-error-soft-fg' },\n },\n {\n variant: 'icon-only',\n effectiveColor: 'neutral',\n class: { root: 'bg-surface-muted text-fg-muted' },\n },\n ],\n defaultVariants: {\n variant: 'badge',\n effectiveColor: 'neutral',\n },\n },\n { twMerge: true },\n);\n\n// ── Stat delta component ──────────────────────────────────────────────\n\n/**\n * Compact trend indicator — direction + projected delta text + optional\n * comparison label. Usable standalone or projected into a `<tw-stat>` tile.\n *\n * Sentiment is conveyed by both icon direction and color; consumers running\n * \"lower is better\" metrics (bounce rate, latency, churn) set `inverted` to\n * swap the success/error color mapping without changing the literal direction\n * or the announced verb.\n */\n@Component({\n selector: 'tw-stat-delta',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'img',\n '[class]': 'rootClasses()',\n '[attr.aria-label]': 'composedAriaLabel()',\n },\n template: `\n <svg\n [class]=\"iconClasses() + ' ' + iconSizeClass()\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n @switch (direction()) {\n @case ('up') { <path d=\"M4 10l4-4 4 4\" /> }\n @case ('down') { <path d=\"M4 6l4 4 4-4\" /> }\n @default { <path d=\"M3 8h10\" /> }\n }\n </svg>\n <span #textEl [class]=\"textClasses()\"><ng-content /></span>\n @if (comparisonLabel(); as comp) {\n <span [class]=\"comparisonClasses()\">{{ comp }}</span>\n }\n `,\n})\nexport class StatDeltaComponent {\n /** Direction of change. `'up'` renders an up-chevron and (by default) the `success` color; `'down'` renders a down-chevron and the `error` color; `'neutral'` renders a horizontal-line glyph and the neutral color. Defaults to `'neutral'`. */\n readonly direction = input<StatDeltaDirection>('neutral');\n\n /** When true, swaps success/error semantics so `down` reads as success and `up` reads as error — use for metrics where lower is better (bounce rate, error rate, latency, churn). `neutral` direction is unaffected. Defaults to `false`. */\n readonly inverted = input(false, { transform: booleanAttribute });\n\n /** Display style. `'badge'` (default) wraps the delta in a pill chip; `'inline'` is icon + text only with no chip; `'icon-only'` shows just the chevron for ultra-dense layouts. */\n readonly variant = input<StatDeltaVariant>('badge');\n\n /** Optional comparison label rendered next to the delta value (e.g. `\"vs last week\"`, `\"since launch\"`). Defaults to `undefined`. */\n readonly comparisonLabel = input<string>();\n\n /** Explicit accessible label. When omitted, the component composes one from `direction` + projected text + `comparisonLabel`. Override when projected content is purely symbolic or already localized. Defaults to `undefined`. */\n readonly ariaLabel = input<string>();\n\n /** @internal */\n protected readonly textEl = viewChild<ElementRef<HTMLElement>>('textEl');\n\n /** @internal */\n protected readonly projectedText = signal('');\n\n constructor() {\n const injector = inject(Injector);\n // Read the projected text via the wrapper span's textContent. textContent\n // is recursive across projected children, so this resolves the consumer's\n // string even when wrapped in arbitrary markup. afterRenderEffect runs\n // after each render so projection changes are captured.\n afterRenderEffect(\n () => {\n const el = this.textEl()?.nativeElement;\n if (!el) {\n this.projectedText.set('');\n return;\n }\n const text = (el.textContent ?? '').trim();\n this.projectedText.set(text);\n },\n { injector },\n );\n }\n\n /** @internal */\n protected readonly effectiveColor = computed<'success' | 'error' | 'neutral'>(() => {\n const dir = this.direction();\n if (dir === 'neutral') return 'neutral';\n const inv = this.inverted();\n if (dir === 'up') return inv ? 'error' : 'success';\n return inv ? 'success' : 'error';\n });\n\n /** @internal */\n protected readonly iconSizeClass = computed(() => {\n // Glyph sub-scale: size-3 (12px) at the badge/inline xs/sm density,\n // size-4 (16px) at md+. The delta lives inside text-xs, so size-3 holds.\n // Larger contexts (md / lg / xl on the parent tile) get size-4.\n return this.variant() === 'icon-only' ? 'size-4' : 'size-3';\n });\n\n /** @internal */\n protected readonly composedAriaLabel = computed(() => {\n const explicit = this.ariaLabel();\n if (explicit) return explicit;\n const dir = this.direction();\n const verb = dir === 'up' ? 'increased' : dir === 'down' ? 'decreased' : 'unchanged';\n const text = this.projectedText();\n const comp = this.comparisonLabel();\n const parts: string[] = [];\n if (text) {\n parts.push(`${verb} by ${text}`);\n } else {\n parts.push(verb);\n }\n if (comp) parts.push(comp);\n return parts.join(' ');\n });\n\n private readonly variantResult = computed(() =>\n statDelta({ variant: this.variant(), effectiveColor: this.effectiveColor() }),\n );\n\n protected readonly rootClasses = computed(() => this.variantResult().root());\n protected readonly iconClasses = computed(() => this.variantResult().icon());\n protected readonly textClasses = computed(() => this.variantResult().text());\n protected readonly comparisonClasses = computed(() => this.variantResult().comparison());\n}\n\n// ── Stat tile component ───────────────────────────────────────────────\n\n/**\n * KPI tile — a compact display tile surfacing a single key performance\n * indicator with an optional trend delta. Composes a `<dl>` / `<dt>` / `<dd>`\n * definition list internally so the label-to-value pairing is announced\n * naturally by assistive technology.\n *\n * Slots:\n * - `[twStatLabel]` — caption (rendered as `<dt>`).\n * - `[twStatValue]` — dominant value (rendered as `<dd>`).\n * - `[twStatDescription]` — optional secondary text (second `<dd>`).\n * - `[twStatIcon]` — optional leading icon (switches to icon-leading layout).\n * - `[twStatFooter]` — optional auxiliary region (sparklines, tags).\n * - `<tw-stat-delta>` — projected trend indicator alongside the value.\n *\n * Loading state replaces label/value/delta with `<tw-skeleton>` placeholders\n * sized to match the density. Footer always renders during loading so\n * consumers can compose their own skeleton charts.\n */\n@Component({\n selector: 'tw-stat',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkeletonComponent, NgTemplateOutlet],\n host: {\n '[class]': 'rootClasses()',\n // Permanent live region — `aria-busy` toggle alone signals state change\n // so assistive tech announces the resolved content on loading→loaded\n // without the live region being torn down mid-transition.\n 'aria-live': 'polite',\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\n },\n template: `\n @if (iconLeading()) {\n <div [class]=\"iconFlexClasses()\">\n <div [class]=\"iconWrapperClasses()\">\n <ng-content select=\"[twStatIcon]\" />\n </div>\n <div [class]=\"contentStackClasses()\">\n <ng-container [ngTemplateOutlet]=\"dlBlock\" />\n </div>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"dlBlock\" />\n }\n\n @if (hasFooter()) {\n <div [class]=\"footerClasses()\">\n <ng-content select=\"[twStatFooter]\" />\n </div>\n }\n\n <ng-template #dlBlock>\n <dl [class]=\"dlClasses()\">\n @if (loading()) {\n <dt [class]=\"labelClasses()\">\n <tw-skeleton width=\"40%\" height=\"0.75rem\" />\n </dt>\n } @else if (hasLabel()) {\n <dt [class]=\"labelClasses()\">\n <ng-content select=\"[twStatLabel]\" />\n </dt>\n }\n\n <dd [class]=\"valueRowClasses()\">\n @if (loading()) {\n <tw-skeleton [width]=\"loadingValueWidth()\" [height]=\"loadingValueHeight()\" />\n } @else if (hasValue()) {\n <span [class]=\"valueClasses()\">\n <ng-content select=\"[twStatValue]\" />\n </span>\n }\n\n @if (loading()) {\n <span [class]=\"deltaClasses()\">\n <tw-skeleton width=\"3rem\" height=\"1.25rem\" />\n </span>\n } @else if (hasDelta()) {\n <span [class]=\"deltaClasses()\">\n <ng-content select=\"tw-stat-delta\" />\n </span>\n }\n </dd>\n\n @if (!loading() && hasDescription()) {\n <dd [class]=\"descriptionClasses()\">\n <ng-content select=\"[twStatDescription]\" />\n </dd>\n }\n </dl>\n </ng-template>\n `,\n})\nexport class StatComponent {\n /** Surface treatment. `'plain'` removes border and background; `'outlined'` (default) adds a border on the surface token; `'elevated'` adds shadow and uses the raised surface; `'filled'` uses the muted surface with no border. */\n readonly variant = input<StatVariant>('outlined');\n\n /** Density scale — drives padding, internal gaps, value/label typography, and the skeleton placeholder dimensions. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** When true, replaces label, value, and delta regions with `<tw-skeleton>` placeholders and toggles `aria-busy=\"true\"` on the host. Projected footer content still renders. Defaults to `false`. */\n readonly loading = input(false, { transform: booleanAttribute });\n\n /** @internal */\n protected readonly labelSlot = contentChild(StatLabelDirective);\n /** @internal */\n protected readonly valueSlot = contentChild(StatValueDirective);\n /** @internal */\n protected readonly descriptionSlot = contentChild(StatDescriptionDirective);\n /** @internal */\n protected readonly iconSlot = contentChild(StatIconDirective);\n /** @internal */\n protected readonly footerSlot = contentChild(StatFooterDirective);\n /** @internal */\n protected readonly deltaSlot = contentChild(StatDeltaComponent);\n\n protected readonly hasLabel = computed(() => !!this.labelSlot());\n protected readonly hasValue = computed(() => !!this.valueSlot());\n protected readonly hasDescription = computed(() => !!this.descriptionSlot());\n protected readonly hasIcon = computed(() => !!this.iconSlot());\n protected readonly hasFooter = computed(() => !!this.footerSlot());\n protected readonly hasDelta = computed(() => !!this.deltaSlot());\n\n protected readonly iconLeading = computed(() => this.hasIcon());\n\n /** Skeleton width during loading state — scales with the size axis. */\n protected readonly loadingValueWidth = computed(() => {\n switch (this.size()) {\n case 'xs': return '4rem';\n case 'sm': return '5rem';\n case 'md': return '6rem';\n case 'lg': return '8rem';\n case 'xl': return '10rem';\n }\n });\n\n /** Skeleton height during loading state — matches the value font size. */\n protected readonly loadingValueHeight = computed(() => {\n switch (this.size()) {\n case 'xs': return '0.75rem';\n case 'sm': return '0.875rem';\n case 'md': return '1rem';\n case 'lg': return '1rem';\n case 'xl': return '1rem';\n }\n });\n\n private readonly variantResult = computed(() =>\n statTile({ variant: this.variant(), size: this.size() }),\n );\n\n protected readonly rootClasses = computed(() => this.variantResult().root());\n protected readonly iconFlexClasses = computed(() => this.variantResult().iconFlex());\n protected readonly iconWrapperClasses = computed(() => this.variantResult().iconWrapper());\n protected readonly contentStackClasses = computed(() => this.variantResult().contentStack());\n protected readonly dlClasses = computed(() => this.variantResult().dl());\n protected readonly labelClasses = computed(() => this.variantResult().label());\n protected readonly valueRowClasses = computed(() => this.variantResult().valueRow());\n protected readonly valueClasses = computed(() => this.variantResult().value());\n protected readonly descriptionClasses = computed(() => this.variantResult().description());\n protected readonly deltaClasses = computed(() => this.variantResult().delta());\n protected readonly footerClasses = computed(() => this.variantResult().footer());\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}