@cdevhub/ngx-tw 0.2.0 → 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 (144) 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 +35 -22
  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 +416 -216
  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 +152 -81
  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 +42 -29
  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 +205 -110
  31. package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
  32. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +141 -74
  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 +395 -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 +142 -72
  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 +227 -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 +47 -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 +102 -52
  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 +16 -8
  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 +100 -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 -17
  121. package/theme/_dark.css +16 -12
  122. package/theme/_semantic.css +3 -2
  123. package/theme/index.css +10 -2
  124. package/types/cdevhub-ngx-tw-aspect-ratio.d.ts +40 -0
  125. package/types/cdevhub-ngx-tw-calendar.d.ts +39 -8
  126. package/types/cdevhub-ngx-tw-code-block.d.ts +8 -7
  127. package/types/cdevhub-ngx-tw-command-palette.d.ts +7 -0
  128. package/types/cdevhub-ngx-tw-date-picker.d.ts +36 -10
  129. package/types/cdevhub-ngx-tw-file-upload.d.ts +250 -0
  130. package/types/cdevhub-ngx-tw-form-field.d.ts +22 -3
  131. package/types/cdevhub-ngx-tw-icon-lucide.d.ts +21 -3
  132. package/types/cdevhub-ngx-tw-number-input.d.ts +130 -0
  133. package/types/cdevhub-ngx-tw-popover.d.ts +8 -0
  134. package/types/cdevhub-ngx-tw-select.d.ts +1 -1
  135. package/types/cdevhub-ngx-tw-stepper.d.ts +30 -2
  136. package/types/cdevhub-ngx-tw-tab-nav.d.ts +8 -0
  137. package/types/cdevhub-ngx-tw-table.d.ts +30 -1
  138. package/types/cdevhub-ngx-tw-tabs.d.ts +8 -0
  139. package/types/cdevhub-ngx-tw-tags-input.d.ts +217 -0
  140. package/types/cdevhub-ngx-tw-time-picker.d.ts +31 -6
  141. package/types/cdevhub-ngx-tw-toast.d.ts +1 -1
  142. package/types/cdevhub-ngx-tw-transfer.d.ts +330 -0
  143. package/types/cdevhub-ngx-tw-tree.d.ts +189 -0
  144. package/types/cdevhub-ngx-tw.d.ts +7 -0
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, inject, TemplateRef, Directive, contentChildren, ChangeDetectionStrategy, Component, DestroyRef, signal, computed } from '@angular/core';
2
+ import { input, inject, TemplateRef, Directive, contentChildren, ChangeDetectionStrategy, Component, DestroyRef, signal, computed, QueryList, ViewChildren } from '@angular/core';
3
3
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
4
  import { NgTemplateOutlet } from '@angular/common';
5
5
  import { LiveAnnouncer } from '@angular/cdk/a11y';
@@ -200,13 +200,14 @@ function resolveConnectorClasses(state, color) {
200
200
  */
201
201
  class StepperIconDirective {
202
202
  /** Step state this template overrides. Matches CDK's `StepState` values (`'number' | 'edit' | 'done' | 'error'`). */
203
- state = input(undefined, ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
203
+ state = input(undefined, /* @ts-ignore */
204
+ ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
204
205
  /** @internal */
205
206
  templateRef = inject((TemplateRef));
206
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StepperIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
207
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: StepperIconDirective, isStandalone: true, selector: "ng-template[twStepperIcon]", inputs: { state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
207
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StepperIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
208
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: StepperIconDirective, isStandalone: true, selector: "ng-template[twStepperIcon]", inputs: { state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
208
209
  }
209
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StepperIconDirective, decorators: [{
210
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StepperIconDirective, decorators: [{
210
211
  type: Directive,
211
212
  args: [{
212
213
  selector: 'ng-template[twStepperIcon]',
@@ -218,10 +219,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
218
219
  * label. Consumers write `<ng-template twStepLabel>…</ng-template>` inside `<tw-step>`.
219
220
  */
220
221
  class StepLabelDirective extends CdkStepLabel {
221
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StepLabelDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
222
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: StepLabelDirective, isStandalone: true, selector: "ng-template[twStepLabel]", providers: [{ provide: CdkStepLabel, useExisting: StepLabelDirective }], usesInheritance: true, ngImport: i0 });
222
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StepLabelDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
223
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: StepLabelDirective, isStandalone: true, selector: "ng-template[twStepLabel]", providers: [{ provide: CdkStepLabel, useExisting: StepLabelDirective }], usesInheritance: true, ngImport: i0 });
223
224
  }
224
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StepLabelDirective, decorators: [{
225
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StepLabelDirective, decorators: [{
225
226
  type: Directive,
226
227
  args: [{
227
228
  selector: 'ng-template[twStepLabel]',
@@ -231,13 +232,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
231
232
  // ── StepComponent ──
232
233
  class StepComponent extends CdkStep {
233
234
  /** Optional descriptive text shown under the step label in the `'default'` variant. */
234
- description = input('', ...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
235
+ description = input('', /* @ts-ignore */
236
+ ...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
235
237
  /** @internal Custom indicator icon templates (one per state) projected into this step. */
236
- iconTemplates = contentChildren(StepperIconDirective, ...(ngDevMode ? [{ debugName: "iconTemplates" }] : /* istanbul ignore next */ []));
237
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StepComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
238
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.14", type: StepComponent, isStandalone: true, selector: "tw-step", inputs: { description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: CdkStep, useExisting: StepComponent }], queries: [{ propertyName: "iconTemplates", predicate: StepperIconDirective, isSignal: true }], exportAs: ["twStep"], usesInheritance: true, ngImport: i0, template: '<ng-template><ng-content/></ng-template>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
238
+ iconTemplates = contentChildren(StepperIconDirective, /* @ts-ignore */
239
+ ...(ngDevMode ? [{ debugName: "iconTemplates" }] : /* istanbul ignore next */ []));
240
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StepComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
241
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.7", type: StepComponent, isStandalone: true, selector: "tw-step", inputs: { description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: CdkStep, useExisting: StepComponent }], queries: [{ propertyName: "iconTemplates", predicate: StepperIconDirective, isSignal: true }], exportAs: ["twStep"], usesInheritance: true, ngImport: i0, template: '<ng-template><ng-content/></ng-template>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
239
242
  }
240
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StepComponent, decorators: [{
243
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StepComponent, decorators: [{
241
244
  type: Component,
242
245
  args: [{
243
246
  selector: 'tw-step',
@@ -250,19 +253,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
250
253
  // ── StepperComponent ──
251
254
  class StepperComponent extends CdkStepper {
252
255
  /** Visual style of the indicator strip. `'default'` = numbered circles, `'dot'` = compact filled dots, `'simple'` = indicators only (labels hidden visually). Defaults to `'default'`. */
253
- variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
256
+ variant = input('default', /* @ts-ignore */
257
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
254
258
  /** Semantic color for active and completed indicators and connectors. Defaults to `'primary'`. */
255
- color = input('primary', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
259
+ color = input('primary', /* @ts-ignore */
260
+ ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
256
261
  /** Controls indicator size and label typography. Defaults to `'md'`. */
257
- size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
262
+ size = input('md', /* @ts-ignore */
263
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
258
264
  /** When true, steps with `hasError` render error styling, icon, and `aria-invalid`. Defaults to `true`. */
259
265
  // TRUE-default: error states must be visible by default — silently swallowing
260
266
  // a stepped flow's failure state is a UX regression. Consumers opt out per step.
261
- showError = input(true, ...(ngDevMode ? [{ debugName: "showError" }] : /* istanbul ignore next */ []));
267
+ showError = input(true, /* @ts-ignore */
268
+ ...(ngDevMode ? [{ debugName: "showError" }] : /* istanbul ignore next */ []));
262
269
  /** When true, clicking a navigable step header selects it. Set to `false` to only allow advancement via `twStepperNext` / `twStepperPrevious`. Defaults to `true`. */
263
270
  // TRUE-default: free-navigation is the standard stepper UX; restricted flows
264
271
  // (e.g. wizards that must complete in order) explicitly opt out.
265
- headerInteractive = input(true, ...(ngDevMode ? [{ debugName: "headerInteractive" }] : /* istanbul ignore next */ []));
272
+ headerInteractive = input(true, /* @ts-ignore */
273
+ ...(ngDevMode ? [{ debugName: "headerInteractive" }] : /* istanbul ignore next */ []));
266
274
  _liveAnnouncer = inject(LiveAnnouncer);
267
275
  _destroyRef = inject(DestroyRef);
268
276
  _globalOptions = inject(STEPPER_GLOBAL_OPTIONS, { optional: true });
@@ -273,9 +281,12 @@ class StepperComponent extends CdkStepper {
273
281
  * manual `markForCheck`. Sync happens in the property setters and lifecycle
274
282
  * hooks below — keep these mirrors in lock-step with the CDK fields.
275
283
  */
276
- _orientationSignal = signal('horizontal', ...(ngDevMode ? [{ debugName: "_orientationSignal" }] : /* istanbul ignore next */ []));
277
- _selectedIndexSignal = signal(0, ...(ngDevMode ? [{ debugName: "_selectedIndexSignal" }] : /* istanbul ignore next */ []));
278
- _previousIndexSignal = signal(0, ...(ngDevMode ? [{ debugName: "_previousIndexSignal" }] : /* istanbul ignore next */ []));
284
+ _orientationSignal = signal('horizontal', /* @ts-ignore */
285
+ ...(ngDevMode ? [{ debugName: "_orientationSignal" }] : /* istanbul ignore next */ []));
286
+ _selectedIndexSignal = signal(0, /* @ts-ignore */
287
+ ...(ngDevMode ? [{ debugName: "_selectedIndexSignal" }] : /* istanbul ignore next */ []));
288
+ _previousIndexSignal = signal(0, /* @ts-ignore */
289
+ ...(ngDevMode ? [{ debugName: "_previousIndexSignal" }] : /* istanbul ignore next */ []));
279
290
  /** @internal Reactive mirror of CDK's `orientation` input. */
280
291
  orientationValue = this._orientationSignal.asReadonly();
281
292
  /** @internal Reactive mirror of CDK's `selectedIndex`. */
@@ -291,35 +302,52 @@ class StepperComponent extends CdkStepper {
291
302
  variant: this.variant(),
292
303
  size: this.size(),
293
304
  orientation: this._orientationSignal(),
294
- }), ...(ngDevMode ? [{ debugName: "_variantResult" }] : /* istanbul ignore next */ []));
295
- rootClasses = computed(() => this._variantResult().root(), ...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
296
- headerClasses = computed(() => this._variantResult().header(), ...(ngDevMode ? [{ debugName: "headerClasses" }] : /* istanbul ignore next */ []));
297
- stepItemClasses = computed(() => this._variantResult().stepItem(), ...(ngDevMode ? [{ debugName: "stepItemClasses" }] : /* istanbul ignore next */ []));
298
- stepHeaderClasses = computed(() => this._variantResult().stepHeader(), ...(ngDevMode ? [{ debugName: "stepHeaderClasses" }] : /* istanbul ignore next */ []));
299
- stepIndicatorBaseClasses = computed(() => this._variantResult().stepIndicator(), ...(ngDevMode ? [{ debugName: "stepIndicatorBaseClasses" }] : /* istanbul ignore next */ []));
300
- stepNumberClasses = computed(() => this._variantResult().stepNumber(), ...(ngDevMode ? [{ debugName: "stepNumberClasses" }] : /* istanbul ignore next */ []));
301
- stepIconSlotClasses = computed(() => this._variantResult().stepIconSlot(), ...(ngDevMode ? [{ debugName: "stepIconSlotClasses" }] : /* istanbul ignore next */ []));
302
- stepLabelWrapperClasses = computed(() => this._variantResult().stepLabelWrapper(), ...(ngDevMode ? [{ debugName: "stepLabelWrapperClasses" }] : /* istanbul ignore next */ []));
303
- stepLabelBaseClasses = computed(() => this._variantResult().stepLabel(), ...(ngDevMode ? [{ debugName: "stepLabelBaseClasses" }] : /* istanbul ignore next */ []));
304
- stepDescriptionClasses = computed(() => this._variantResult().stepDescription(), ...(ngDevMode ? [{ debugName: "stepDescriptionClasses" }] : /* istanbul ignore next */ []));
305
- stepOptionalHintClasses = computed(() => this._variantResult().stepOptionalHint(), ...(ngDevMode ? [{ debugName: "stepOptionalHintClasses" }] : /* istanbul ignore next */ []));
306
- stepConnectorBaseClasses = computed(() => this._variantResult().stepConnector(), ...(ngDevMode ? [{ debugName: "stepConnectorBaseClasses" }] : /* istanbul ignore next */ []));
307
- stepPanelClasses = computed(() => this._variantResult().stepPanel(), ...(ngDevMode ? [{ debugName: "stepPanelClasses" }] : /* istanbul ignore next */ []));
305
+ }), /* @ts-ignore */
306
+ ...(ngDevMode ? [{ debugName: "_variantResult" }] : /* istanbul ignore next */ []));
307
+ rootClasses = computed(() => this._variantResult().root(), /* @ts-ignore */
308
+ ...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
309
+ headerClasses = computed(() => this._variantResult().header(), /* @ts-ignore */
310
+ ...(ngDevMode ? [{ debugName: "headerClasses" }] : /* istanbul ignore next */ []));
311
+ stepItemClasses = computed(() => this._variantResult().stepItem(), /* @ts-ignore */
312
+ ...(ngDevMode ? [{ debugName: "stepItemClasses" }] : /* istanbul ignore next */ []));
313
+ stepHeaderClasses = computed(() => this._variantResult().stepHeader(), /* @ts-ignore */
314
+ ...(ngDevMode ? [{ debugName: "stepHeaderClasses" }] : /* istanbul ignore next */ []));
315
+ stepIndicatorBaseClasses = computed(() => this._variantResult().stepIndicator(), /* @ts-ignore */
316
+ ...(ngDevMode ? [{ debugName: "stepIndicatorBaseClasses" }] : /* istanbul ignore next */ []));
317
+ stepNumberClasses = computed(() => this._variantResult().stepNumber(), /* @ts-ignore */
318
+ ...(ngDevMode ? [{ debugName: "stepNumberClasses" }] : /* istanbul ignore next */ []));
319
+ stepIconSlotClasses = computed(() => this._variantResult().stepIconSlot(), /* @ts-ignore */
320
+ ...(ngDevMode ? [{ debugName: "stepIconSlotClasses" }] : /* istanbul ignore next */ []));
321
+ stepLabelWrapperClasses = computed(() => this._variantResult().stepLabelWrapper(), /* @ts-ignore */
322
+ ...(ngDevMode ? [{ debugName: "stepLabelWrapperClasses" }] : /* istanbul ignore next */ []));
323
+ stepLabelBaseClasses = computed(() => this._variantResult().stepLabel(), /* @ts-ignore */
324
+ ...(ngDevMode ? [{ debugName: "stepLabelBaseClasses" }] : /* istanbul ignore next */ []));
325
+ stepDescriptionClasses = computed(() => this._variantResult().stepDescription(), /* @ts-ignore */
326
+ ...(ngDevMode ? [{ debugName: "stepDescriptionClasses" }] : /* istanbul ignore next */ []));
327
+ stepOptionalHintClasses = computed(() => this._variantResult().stepOptionalHint(), /* @ts-ignore */
328
+ ...(ngDevMode ? [{ debugName: "stepOptionalHintClasses" }] : /* istanbul ignore next */ []));
329
+ stepConnectorBaseClasses = computed(() => this._variantResult().stepConnector(), /* @ts-ignore */
330
+ ...(ngDevMode ? [{ debugName: "stepConnectorBaseClasses" }] : /* istanbul ignore next */ []));
331
+ stepPanelClasses = computed(() => this._variantResult().stepPanel(), /* @ts-ignore */
332
+ ...(ngDevMode ? [{ debugName: "stepPanelClasses" }] : /* istanbul ignore next */ []));
308
333
  panelAnimationClass = computed(() => {
309
334
  if (this._orientationSignal() === 'vertical')
310
335
  return null;
311
336
  return this._selectedIndexSignal() >= this._previousIndexSignal()
312
337
  ? 'step-panel-enter-forward'
313
338
  : 'step-panel-enter-backward';
314
- }, ...(ngDevMode ? [{ debugName: "panelAnimationClass" }] : /* istanbul ignore next */ []));
339
+ }, /* @ts-ignore */
340
+ ...(ngDevMode ? [{ debugName: "panelAnimationClass" }] : /* istanbul ignore next */ []));
315
341
  ngAfterViewInit() {
316
342
  super.ngAfterViewInit();
317
343
  this._orientationSignal.set(this.orientation);
318
344
  this._selectedIndexSignal.set(this.selectedIndex);
319
345
  this._previousIndexSignal.set(this.selectedIndex);
346
+ this.syncFocusIndex();
320
347
  this.selectionChange
321
348
  .pipe(takeUntilDestroyed(this._destroyRef))
322
349
  .subscribe((event) => {
350
+ this.syncFocusIndex();
323
351
  this._previousIndexSignal.set(event.previouslySelectedIndex);
324
352
  this._selectedIndexSignal.set(event.selectedIndex);
325
353
  this._orientationSignal.set(this.orientation);
@@ -382,12 +410,47 @@ class StepperComponent extends CdkStepper {
382
410
  };
383
411
  }
384
412
  /** @internal Click handler for the step header button. */
413
+ /**
414
+ * @internal Re-declares CdkStepper's `_stepHeader` query as a **view** query.
415
+ *
416
+ * CdkStepper declares it as `@ContentChildren`, which assumes the host
417
+ * projects its own headers. `tw-stepper` renders the header strip inside its
418
+ * own template instead, so the base query matched nothing: `_sortedHeaders`
419
+ * stayed empty, the FocusKeyManager had zero items, and arrow-key navigation
420
+ * silently did nothing at all. Angular Material overrides the same query for
421
+ * the same reason.
422
+ *
423
+ * Decorator form, not `viewChildren()`, because CdkStepper subscribes to
424
+ * `_stepHeader.changes` — a QueryList API that signal queries do not expose.
425
+ */
426
+ _stepHeader = new QueryList();
427
+ /**
428
+ * @internal Which step header currently holds the single tab stop.
429
+ *
430
+ * Mirrors CdkStepper's `_getFocusIndex()` into a signal because that method
431
+ * reads `_keyManager.activeItemIndex`, a plain property — and CdkStepper's
432
+ * `_onKeydown` does not call `_stateChanged()` on the arrow-key path, so an
433
+ * OnPush template binding straight to `_getFocusIndex()` would render the
434
+ * roving tabindex once and then go stale the moment the user arrows.
435
+ */
436
+ focusIndexValue = signal(0, /* @ts-ignore */
437
+ ...(ngDevMode ? [{ debugName: "focusIndexValue" }] : /* istanbul ignore next */ []));
438
+ /** @internal Re-reads the CDK key manager's active item into `focusIndexValue`. */
439
+ syncFocusIndex() {
440
+ this.focusIndexValue.set(this._getFocusIndex() ?? this.selectedIndex);
441
+ }
442
+ /** @internal Relays tablist keydown to CdkStepper, then republishes the tab stop. */
443
+ onTablistKeydown(event) {
444
+ this._onKeydown(event);
445
+ this.syncFocusIndex();
446
+ }
385
447
  onHeaderClick(step, index) {
386
448
  if (!this.headerInteractive())
387
449
  return;
388
450
  if (!step.isNavigable())
389
451
  return;
390
452
  this.selectedIndex = index;
453
+ this.syncFocusIndex();
391
454
  }
392
455
  /** @internal Whether the stepper should render the error state for a step. */
393
456
  shouldRenderError(step) {
@@ -397,21 +460,24 @@ class StepperComponent extends CdkStepper {
397
460
  return false;
398
461
  return step.hasError;
399
462
  }
400
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StepperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
401
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: StepperComponent, isStandalone: true, selector: "tw-stepper", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, showError: { classPropertyName: "showError", publicName: "showError", isSignal: true, isRequired: false, transformFunction: null }, headerInteractive: { classPropertyName: "headerInteractive", publicName: "headerInteractive", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "rootClasses()" } }, providers: [{ provide: CdkStepper, useExisting: StepperComponent }], exportAs: ["twStepper"], usesInheritance: true, ngImport: i0, template: "<!-- Header strip + inline panels (vertical) / header-only (horizontal) -->\n<div\n [class]=\"headerClasses()\"\n role=\"tablist\"\n [attr.aria-orientation]=\"orientationValue()\"\n (keydown)=\"_onKeydown($event)\"\n>\n @for (step of twSteps; track $index; let i = $index; let last = $last) {\n <div [class]=\"stepItemClasses()\">\n <!-- Step header button -->\n <button\n type=\"button\"\n cdkStepHeader\n role=\"tab\"\n [class]=\"stepHeaderClasses()\"\n [class.pointer-events-none]=\"!headerInteractive() || !step.isNavigable()\"\n [class.opacity-60]=\"!step.isNavigable()\"\n [id]=\"_getStepLabelId(i)\"\n [attr.aria-controls]=\"_getStepContentId(i)\"\n [attr.aria-selected]=\"selectedIndexValue() === i\"\n [attr.aria-current]=\"selectedIndexValue() === i ? 'step' : null\"\n [attr.aria-disabled]=\"!step.isNavigable() || null\"\n [attr.aria-invalid]=\"shouldRenderError(step) || null\"\n [attr.aria-label]=\"step.ariaLabel || null\"\n [attr.aria-labelledby]=\"step.ariaLabelledby || null\"\n (click)=\"onHeaderClick(step, i)\"\n >\n <!-- Indicator (number / icon / dot) -->\n <span [class]=\"getIndicatorClass(step, i)\">\n @let indicatorType = getIndicatorType(step);\n @let customIcon = resolveIconTemplate(step, indicatorType);\n\n @if (customIcon) {\n <span [class]=\"stepIconSlotClasses()\">\n <ng-container\n [ngTemplateOutlet]=\"customIcon\"\n [ngTemplateOutletContext]=\"iconContext(i)\"\n />\n </span>\n } @else {\n @switch (indicatorType) {\n @case ('number') {\n <span [class]=\"stepNumberClasses()\">{{ i + 1 }}</span>\n }\n @case ('done') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </span>\n }\n @case ('edit') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M13.586 3.586a2 2 0 1 1 2.828 2.828l-.793.793-2.828-2.828.793-.793Zm-2.207 2.207 2.828 2.828-7.07 7.071a2 2 0 0 1-.83.5l-3.086.926a.5.5 0 0 1-.62-.621l.926-3.086a2 2 0 0 1 .5-.83l7.352-7.788Z\"\n />\n </svg>\n </span>\n }\n @case ('error') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm.75-11.25a.75.75 0 0 0-1.5 0v4.5a.75.75 0 0 0 1.5 0v-4.5ZM10 15a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </span>\n }\n }\n }\n </span>\n\n <!-- Label + description -->\n <span [class]=\"stepLabelWrapperClasses()\">\n <span [class]=\"getLabelClass(step, i)\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n @if (step.optional && !step.completed) {\n <span [class]=\"stepOptionalHintClasses()\">(Optional)</span>\n }\n </span>\n\n @if (step.description() && variant() === 'default') {\n <span [class]=\"stepDescriptionClasses()\">{{ step.description() }}</span>\n }\n\n @if (shouldRenderError(step) && step.errorMessage) {\n <span class=\"sr-only\">{{ step.errorMessage }}</span>\n }\n </span>\n </button>\n\n <!-- Connector (between step i and i+1) -->\n @if (!last) {\n <span\n [class]=\"getConnectorClass(step, i)\"\n aria-hidden=\"true\"\n ></span>\n }\n\n <!-- Vertical: panel is rendered inline under each selected step -->\n @if (orientationValue() === 'vertical' && selectedIndexValue() === i && step.content) {\n <div\n role=\"tabpanel\"\n [id]=\"_getStepContentId(i)\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [class]=\"stepPanelClasses()\"\n tabindex=\"0\"\n >\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n }\n </div>\n }\n</div>\n\n<!-- Horizontal: single panel rendered below the strip -->\n@if (orientationValue() === 'horizontal') {\n @let activeStep = twSteps[selectedIndexValue()];\n @if (activeStep && activeStep.content) {\n <div\n role=\"tabpanel\"\n [id]=\"_getStepContentId(selectedIndexValue())\"\n [attr.aria-labelledby]=\"_getStepLabelId(selectedIndexValue())\"\n [class]=\"stepPanelClasses()\"\n [animate.enter]=\"panelAnimationClass()\"\n tabindex=\"0\"\n >\n <ng-container [ngTemplateOutlet]=\"activeStep.content\" />\n </div>\n }\n}\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkStepHeader, selector: "[cdkStepHeader]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
463
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StepperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
464
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: StepperComponent, isStandalone: true, selector: "tw-stepper", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, showError: { classPropertyName: "showError", publicName: "showError", isSignal: true, isRequired: false, transformFunction: null }, headerInteractive: { classPropertyName: "headerInteractive", publicName: "headerInteractive", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "rootClasses()" } }, providers: [{ provide: CdkStepper, useExisting: StepperComponent }], viewQueries: [{ propertyName: "_stepHeader", predicate: CdkStepHeader, descendants: true }], exportAs: ["twStepper"], usesInheritance: true, ngImport: i0, template: "<!-- Header strip + inline panels (vertical) / header-only (horizontal) -->\n<!-- WAI-ARIA tablist pattern: the tablist relays keydown to the FocusKeyManager\n but does not itself receive focus \u2014 each step header is the focus target. -->\n<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\n<div\n [class]=\"headerClasses()\"\n role=\"tablist\"\n [attr.aria-orientation]=\"orientationValue()\"\n (keydown)=\"onTablistKeydown($event)\"\n>\n @for (step of twSteps; track $index; let i = $index; let last = $last) {\n <div [class]=\"stepItemClasses()\">\n <!-- Step header button -->\n <button\n type=\"button\"\n cdkStepHeader\n role=\"tab\"\n [attr.tabindex]=\"focusIndexValue() === i ? 0 : -1\"\n [class]=\"stepHeaderClasses()\"\n [class.pointer-events-none]=\"!headerInteractive() || !step.isNavigable()\"\n [class.opacity-60]=\"!step.isNavigable()\"\n [id]=\"_getStepLabelId(i)\"\n [attr.aria-controls]=\"_getStepContentId(i)\"\n [attr.aria-selected]=\"selectedIndexValue() === i\"\n [attr.aria-current]=\"selectedIndexValue() === i ? 'step' : null\"\n [attr.aria-disabled]=\"!step.isNavigable() || null\"\n [attr.aria-invalid]=\"shouldRenderError(step) || null\"\n [attr.aria-label]=\"step.ariaLabel || null\"\n [attr.aria-labelledby]=\"step.ariaLabelledby || null\"\n (click)=\"onHeaderClick(step, i)\"\n >\n <!-- Indicator (number / icon / dot) -->\n <span [class]=\"getIndicatorClass(step, i)\">\n @let indicatorType = getIndicatorType(step);\n @let customIcon = resolveIconTemplate(step, indicatorType);\n\n @if (customIcon) {\n <span [class]=\"stepIconSlotClasses()\">\n <ng-container\n [ngTemplateOutlet]=\"customIcon\"\n [ngTemplateOutletContext]=\"iconContext(i)\"\n />\n </span>\n } @else {\n @switch (indicatorType) {\n @case ('number') {\n <span [class]=\"stepNumberClasses()\">{{ i + 1 }}</span>\n }\n @case ('done') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </span>\n }\n @case ('edit') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M13.586 3.586a2 2 0 1 1 2.828 2.828l-.793.793-2.828-2.828.793-.793Zm-2.207 2.207 2.828 2.828-7.07 7.071a2 2 0 0 1-.83.5l-3.086.926a.5.5 0 0 1-.62-.621l.926-3.086a2 2 0 0 1 .5-.83l7.352-7.788Z\"\n />\n </svg>\n </span>\n }\n @case ('error') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm.75-11.25a.75.75 0 0 0-1.5 0v4.5a.75.75 0 0 0 1.5 0v-4.5ZM10 15a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </span>\n }\n }\n }\n </span>\n\n <!-- Label + description -->\n <span [class]=\"stepLabelWrapperClasses()\">\n <span [class]=\"getLabelClass(step, i)\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n @if (step.optional && !step.completed) {\n <span [class]=\"stepOptionalHintClasses()\">(Optional)</span>\n }\n </span>\n\n @if (step.description() && variant() === 'default') {\n <span [class]=\"stepDescriptionClasses()\">{{ step.description() }}</span>\n }\n\n @if (shouldRenderError(step) && step.errorMessage) {\n <span class=\"sr-only\">{{ step.errorMessage }}</span>\n }\n </span>\n </button>\n\n <!-- Connector (between step i and i+1) -->\n @if (!last) {\n <span\n [class]=\"getConnectorClass(step, i)\"\n aria-hidden=\"true\"\n ></span>\n }\n\n <!-- Vertical: panel is rendered inline under each selected step -->\n @if (orientationValue() === 'vertical' && selectedIndexValue() === i && step.content) {\n <div\n role=\"tabpanel\"\n [id]=\"_getStepContentId(i)\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [class]=\"stepPanelClasses()\"\n tabindex=\"0\"\n >\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n }\n </div>\n }\n</div>\n\n<!-- Horizontal: single panel rendered below the strip -->\n@if (orientationValue() === 'horizontal') {\n @let activeStep = twSteps[selectedIndexValue()];\n @if (activeStep && activeStep.content) {\n <div\n role=\"tabpanel\"\n [id]=\"_getStepContentId(selectedIndexValue())\"\n [attr.aria-labelledby]=\"_getStepLabelId(selectedIndexValue())\"\n [class]=\"stepPanelClasses()\"\n [animate.enter]=\"panelAnimationClass()\"\n tabindex=\"0\"\n >\n <ng-container [ngTemplateOutlet]=\"activeStep.content\" />\n </div>\n }\n}\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkStepHeader, selector: "[cdkStepHeader]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
402
465
  }
403
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StepperComponent, decorators: [{
466
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StepperComponent, decorators: [{
404
467
  type: Component,
405
468
  args: [{ selector: 'tw-stepper', exportAs: 'twStepper', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet, CdkStepHeader], providers: [{ provide: CdkStepper, useExisting: StepperComponent }], host: {
406
469
  '[class]': 'rootClasses()',
407
- }, template: "<!-- Header strip + inline panels (vertical) / header-only (horizontal) -->\n<div\n [class]=\"headerClasses()\"\n role=\"tablist\"\n [attr.aria-orientation]=\"orientationValue()\"\n (keydown)=\"_onKeydown($event)\"\n>\n @for (step of twSteps; track $index; let i = $index; let last = $last) {\n <div [class]=\"stepItemClasses()\">\n <!-- Step header button -->\n <button\n type=\"button\"\n cdkStepHeader\n role=\"tab\"\n [class]=\"stepHeaderClasses()\"\n [class.pointer-events-none]=\"!headerInteractive() || !step.isNavigable()\"\n [class.opacity-60]=\"!step.isNavigable()\"\n [id]=\"_getStepLabelId(i)\"\n [attr.aria-controls]=\"_getStepContentId(i)\"\n [attr.aria-selected]=\"selectedIndexValue() === i\"\n [attr.aria-current]=\"selectedIndexValue() === i ? 'step' : null\"\n [attr.aria-disabled]=\"!step.isNavigable() || null\"\n [attr.aria-invalid]=\"shouldRenderError(step) || null\"\n [attr.aria-label]=\"step.ariaLabel || null\"\n [attr.aria-labelledby]=\"step.ariaLabelledby || null\"\n (click)=\"onHeaderClick(step, i)\"\n >\n <!-- Indicator (number / icon / dot) -->\n <span [class]=\"getIndicatorClass(step, i)\">\n @let indicatorType = getIndicatorType(step);\n @let customIcon = resolveIconTemplate(step, indicatorType);\n\n @if (customIcon) {\n <span [class]=\"stepIconSlotClasses()\">\n <ng-container\n [ngTemplateOutlet]=\"customIcon\"\n [ngTemplateOutletContext]=\"iconContext(i)\"\n />\n </span>\n } @else {\n @switch (indicatorType) {\n @case ('number') {\n <span [class]=\"stepNumberClasses()\">{{ i + 1 }}</span>\n }\n @case ('done') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </span>\n }\n @case ('edit') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M13.586 3.586a2 2 0 1 1 2.828 2.828l-.793.793-2.828-2.828.793-.793Zm-2.207 2.207 2.828 2.828-7.07 7.071a2 2 0 0 1-.83.5l-3.086.926a.5.5 0 0 1-.62-.621l.926-3.086a2 2 0 0 1 .5-.83l7.352-7.788Z\"\n />\n </svg>\n </span>\n }\n @case ('error') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm.75-11.25a.75.75 0 0 0-1.5 0v4.5a.75.75 0 0 0 1.5 0v-4.5ZM10 15a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </span>\n }\n }\n }\n </span>\n\n <!-- Label + description -->\n <span [class]=\"stepLabelWrapperClasses()\">\n <span [class]=\"getLabelClass(step, i)\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n @if (step.optional && !step.completed) {\n <span [class]=\"stepOptionalHintClasses()\">(Optional)</span>\n }\n </span>\n\n @if (step.description() && variant() === 'default') {\n <span [class]=\"stepDescriptionClasses()\">{{ step.description() }}</span>\n }\n\n @if (shouldRenderError(step) && step.errorMessage) {\n <span class=\"sr-only\">{{ step.errorMessage }}</span>\n }\n </span>\n </button>\n\n <!-- Connector (between step i and i+1) -->\n @if (!last) {\n <span\n [class]=\"getConnectorClass(step, i)\"\n aria-hidden=\"true\"\n ></span>\n }\n\n <!-- Vertical: panel is rendered inline under each selected step -->\n @if (orientationValue() === 'vertical' && selectedIndexValue() === i && step.content) {\n <div\n role=\"tabpanel\"\n [id]=\"_getStepContentId(i)\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [class]=\"stepPanelClasses()\"\n tabindex=\"0\"\n >\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n }\n </div>\n }\n</div>\n\n<!-- Horizontal: single panel rendered below the strip -->\n@if (orientationValue() === 'horizontal') {\n @let activeStep = twSteps[selectedIndexValue()];\n @if (activeStep && activeStep.content) {\n <div\n role=\"tabpanel\"\n [id]=\"_getStepContentId(selectedIndexValue())\"\n [attr.aria-labelledby]=\"_getStepLabelId(selectedIndexValue())\"\n [class]=\"stepPanelClasses()\"\n [animate.enter]=\"panelAnimationClass()\"\n tabindex=\"0\"\n >\n <ng-container [ngTemplateOutlet]=\"activeStep.content\" />\n </div>\n }\n}\n" }]
408
- }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], showError: [{ type: i0.Input, args: [{ isSignal: true, alias: "showError", required: false }] }], headerInteractive: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerInteractive", required: false }] }] } });
470
+ }, template: "<!-- Header strip + inline panels (vertical) / header-only (horizontal) -->\n<!-- WAI-ARIA tablist pattern: the tablist relays keydown to the FocusKeyManager\n but does not itself receive focus \u2014 each step header is the focus target. -->\n<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\n<div\n [class]=\"headerClasses()\"\n role=\"tablist\"\n [attr.aria-orientation]=\"orientationValue()\"\n (keydown)=\"onTablistKeydown($event)\"\n>\n @for (step of twSteps; track $index; let i = $index; let last = $last) {\n <div [class]=\"stepItemClasses()\">\n <!-- Step header button -->\n <button\n type=\"button\"\n cdkStepHeader\n role=\"tab\"\n [attr.tabindex]=\"focusIndexValue() === i ? 0 : -1\"\n [class]=\"stepHeaderClasses()\"\n [class.pointer-events-none]=\"!headerInteractive() || !step.isNavigable()\"\n [class.opacity-60]=\"!step.isNavigable()\"\n [id]=\"_getStepLabelId(i)\"\n [attr.aria-controls]=\"_getStepContentId(i)\"\n [attr.aria-selected]=\"selectedIndexValue() === i\"\n [attr.aria-current]=\"selectedIndexValue() === i ? 'step' : null\"\n [attr.aria-disabled]=\"!step.isNavigable() || null\"\n [attr.aria-invalid]=\"shouldRenderError(step) || null\"\n [attr.aria-label]=\"step.ariaLabel || null\"\n [attr.aria-labelledby]=\"step.ariaLabelledby || null\"\n (click)=\"onHeaderClick(step, i)\"\n >\n <!-- Indicator (number / icon / dot) -->\n <span [class]=\"getIndicatorClass(step, i)\">\n @let indicatorType = getIndicatorType(step);\n @let customIcon = resolveIconTemplate(step, indicatorType);\n\n @if (customIcon) {\n <span [class]=\"stepIconSlotClasses()\">\n <ng-container\n [ngTemplateOutlet]=\"customIcon\"\n [ngTemplateOutletContext]=\"iconContext(i)\"\n />\n </span>\n } @else {\n @switch (indicatorType) {\n @case ('number') {\n <span [class]=\"stepNumberClasses()\">{{ i + 1 }}</span>\n }\n @case ('done') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </span>\n }\n @case ('edit') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M13.586 3.586a2 2 0 1 1 2.828 2.828l-.793.793-2.828-2.828.793-.793Zm-2.207 2.207 2.828 2.828-7.07 7.071a2 2 0 0 1-.83.5l-3.086.926a.5.5 0 0 1-.62-.621l.926-3.086a2 2 0 0 1 .5-.83l7.352-7.788Z\"\n />\n </svg>\n </span>\n }\n @case ('error') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm.75-11.25a.75.75 0 0 0-1.5 0v4.5a.75.75 0 0 0 1.5 0v-4.5ZM10 15a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </span>\n }\n }\n }\n </span>\n\n <!-- Label + description -->\n <span [class]=\"stepLabelWrapperClasses()\">\n <span [class]=\"getLabelClass(step, i)\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n @if (step.optional && !step.completed) {\n <span [class]=\"stepOptionalHintClasses()\">(Optional)</span>\n }\n </span>\n\n @if (step.description() && variant() === 'default') {\n <span [class]=\"stepDescriptionClasses()\">{{ step.description() }}</span>\n }\n\n @if (shouldRenderError(step) && step.errorMessage) {\n <span class=\"sr-only\">{{ step.errorMessage }}</span>\n }\n </span>\n </button>\n\n <!-- Connector (between step i and i+1) -->\n @if (!last) {\n <span\n [class]=\"getConnectorClass(step, i)\"\n aria-hidden=\"true\"\n ></span>\n }\n\n <!-- Vertical: panel is rendered inline under each selected step -->\n @if (orientationValue() === 'vertical' && selectedIndexValue() === i && step.content) {\n <div\n role=\"tabpanel\"\n [id]=\"_getStepContentId(i)\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [class]=\"stepPanelClasses()\"\n tabindex=\"0\"\n >\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n }\n </div>\n }\n</div>\n\n<!-- Horizontal: single panel rendered below the strip -->\n@if (orientationValue() === 'horizontal') {\n @let activeStep = twSteps[selectedIndexValue()];\n @if (activeStep && activeStep.content) {\n <div\n role=\"tabpanel\"\n [id]=\"_getStepContentId(selectedIndexValue())\"\n [attr.aria-labelledby]=\"_getStepLabelId(selectedIndexValue())\"\n [class]=\"stepPanelClasses()\"\n [animate.enter]=\"panelAnimationClass()\"\n tabindex=\"0\"\n >\n <ng-container [ngTemplateOutlet]=\"activeStep.content\" />\n </div>\n }\n}\n" }]
471
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], showError: [{ type: i0.Input, args: [{ isSignal: true, alias: "showError", required: false }] }], headerInteractive: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerInteractive", required: false }] }], _stepHeader: [{
472
+ type: ViewChildren,
473
+ args: [CdkStepHeader]
474
+ }] } });
409
475
  // ── Next / Previous directives (hostDirectives over CDK) ──
410
476
  class StepperNextDirective {
411
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StepperNextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
412
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: StepperNextDirective, isStandalone: true, selector: "button[twStepperNext]", hostDirectives: [{ directive: i1.CdkStepperNext, inputs: ["type", "type"] }], ngImport: i0 });
477
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StepperNextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
478
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: StepperNextDirective, isStandalone: true, selector: "button[twStepperNext]", hostDirectives: [{ directive: i1.CdkStepperNext, inputs: ["type", "type"] }], ngImport: i0 });
413
479
  }
414
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StepperNextDirective, decorators: [{
480
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StepperNextDirective, decorators: [{
415
481
  type: Directive,
416
482
  args: [{
417
483
  selector: 'button[twStepperNext]',
@@ -419,10 +485,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
419
485
  }]
420
486
  }] });
421
487
  class StepperPreviousDirective {
422
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StepperPreviousDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
423
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: StepperPreviousDirective, isStandalone: true, selector: "button[twStepperPrevious]", hostDirectives: [{ directive: i1.CdkStepperPrevious, inputs: ["type", "type"] }], ngImport: i0 });
488
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StepperPreviousDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
489
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: StepperPreviousDirective, isStandalone: true, selector: "button[twStepperPrevious]", hostDirectives: [{ directive: i1.CdkStepperPrevious, inputs: ["type", "type"] }], ngImport: i0 });
424
490
  }
425
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: StepperPreviousDirective, decorators: [{
491
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: StepperPreviousDirective, decorators: [{
426
492
  type: Directive,
427
493
  args: [{
428
494
  selector: 'button[twStepperPrevious]',
@@ -1 +1 @@
1
- {"version":3,"file":"cdevhub-ngx-tw-stepper.mjs","sources":["../../../projects/ngx-tw/stepper/stepper.ts","../../../projects/ngx-tw/stepper/stepper.html","../../../projects/ngx-tw/stepper/cdevhub-ngx-tw-stepper.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n Directive,\n inject,\n input,\n signal,\n TemplateRef,\n type AfterViewInit,\n type Provider,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport {\n CdkStep,\n CdkStepHeader,\n CdkStepLabel,\n CdkStepper,\n CdkStepperNext,\n CdkStepperPrevious,\n STEP_STATE,\n STEPPER_GLOBAL_OPTIONS,\n type StepperOptions,\n type StepperOrientation,\n type StepperSelectionEvent,\n type StepState,\n} from '@angular/cdk/stepper';\nimport { tv } from 'tailwind-variants';\nimport type { TwColor, TwSize } from '@cdevhub/ngx-tw/core';\n\n/** Visual style of the step indicator strip. */\nexport type StepperVariant = 'default' | 'dot' | 'simple';\n\n/** Context passed to custom `*twStepperIcon` templates. */\nexport interface StepperIconContext {\n $implicit: { index: number; active: boolean };\n}\n\n// ── tv() config ──\n\nconst stepperVariants = tv(\n {\n slots: {\n root: 'flex',\n header: 'flex',\n stepItem: 'flex',\n stepHeader:\n 'group relative inline-flex items-center gap-2 cursor-pointer transition-colors duration-normal motion-reduce:transition-none rounded-md focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:cursor-not-allowed',\n stepIndicator:\n 'inline-flex items-center justify-center shrink-0 rounded-full font-medium transition-[color,background-color,border-color,box-shadow] duration-normal motion-reduce:transition-none',\n stepNumber: 'leading-none',\n stepIconSlot: 'inline-flex items-center justify-center',\n stepLabelWrapper: 'flex flex-col min-w-0 text-left',\n stepLabel: 'leading-tight',\n stepDescription: 'text-xs text-fg-muted leading-tight mt-0.5',\n stepOptionalHint: 'text-xs text-fg-subtle ml-1 font-normal',\n stepConnector:\n 'shrink-0 transition-colors duration-normal motion-reduce:transition-none',\n stepPanel: 'min-w-0',\n },\n variants: {\n variant: {\n default: {},\n dot: {\n stepNumber: 'hidden',\n stepIconSlot: 'hidden',\n },\n simple: {\n stepLabelWrapper: 'sr-only',\n },\n },\n size: {\n xs: {\n stepIndicator: 'size-6 text-xs',\n stepLabel: 'text-xs',\n },\n sm: {\n stepIndicator: 'size-7 text-xs',\n stepLabel: 'text-sm',\n },\n md: {\n stepIndicator: 'size-8 text-sm',\n stepLabel: 'text-sm',\n },\n // lg/xl step labels use `text-base` per the trigger font-size scale\n // (CLAUDE.md typography). Steps are interactive trigger elements.\n lg: {\n stepIndicator: 'size-10 text-base',\n stepLabel: 'text-base',\n },\n xl: {\n stepIndicator: 'size-12 text-base',\n stepLabel: 'text-base',\n },\n },\n orientation: {\n horizontal: {\n root: 'flex-col w-full',\n header: 'flex-row items-center w-full',\n stepItem: 'flex-row items-center flex-1 last:flex-none',\n stepConnector: 'flex-1 h-px mx-2',\n stepLabelWrapper: 'ml-2',\n stepPanel:\n 'mt-4 rounded-lg outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 motion-reduce:transition-none',\n },\n vertical: {\n root: 'flex-col',\n header: 'flex-col items-stretch',\n stepItem: 'flex-col items-start w-full',\n stepConnector: 'w-px min-h-6 ml-4 my-1 flex-1',\n stepLabelWrapper: 'ml-3',\n stepPanel:\n 'ml-11 mt-2 mb-4 rounded-lg outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 motion-reduce:transition-none',\n },\n },\n },\n compoundVariants: [\n // Dot variant indicator sizing\n { variant: 'dot', size: 'xs', class: { stepIndicator: 'size-2' } },\n { variant: 'dot', size: 'sm', class: { stepIndicator: 'size-2.5' } },\n { variant: 'dot', size: 'md', class: { stepIndicator: 'size-2.5' } },\n { variant: 'dot', size: 'lg', class: { stepIndicator: 'size-3' } },\n { variant: 'dot', size: 'xl', class: { stepIndicator: 'size-3' } },\n\n // Thicker connectors for lg / xl\n {\n orientation: 'horizontal',\n size: 'lg',\n class: { stepConnector: 'h-0.5' },\n },\n {\n orientation: 'horizontal',\n size: 'xl',\n class: { stepConnector: 'h-0.5' },\n },\n { orientation: 'vertical', size: 'lg', class: { stepConnector: 'w-0.5' } },\n { orientation: 'vertical', size: 'xl', class: { stepConnector: 'w-0.5' } },\n ],\n defaultVariants: {\n variant: 'default',\n size: 'md',\n orientation: 'horizontal',\n },\n },\n { twMerge: true },\n);\n\n// ── Static class lookups (Tailwind v4 requires statically-written class strings) ──\n\ntype StepStyleState = 'pending' | 'active' | 'completed' | 'error' | 'disabled';\n\nconst INDICATOR_PENDING =\n 'bg-surface-muted text-fg-muted border border-border';\nconst INDICATOR_DISABLED =\n 'bg-surface-muted text-fg-subtle border border-border opacity-60';\nconst INDICATOR_ERROR =\n 'bg-error-solid text-error-solid-fg border border-error-border-strong';\n\n// Slot tokens own light/dark contrast — no `dark:`, no shade picks.\n// The active-state ring uses `{role}-soft` (low-chroma in light, deep-tinted in\n// dark) so the halo reads consistently against the surface in both modes.\nconst INDICATOR_ACTIVE: Record<TwColor, string> = {\n primary: 'bg-primary-solid text-primary-solid-fg border border-primary-border-strong ring-4 ring-primary-soft',\n secondary: 'bg-secondary-solid text-secondary-solid-fg border border-secondary-border-strong ring-4 ring-secondary-soft',\n accent: 'bg-accent-solid text-accent-solid-fg border border-accent-border-strong ring-4 ring-accent-soft',\n neutral: 'bg-neutral-solid text-neutral-solid-fg border border-neutral-border-strong ring-4 ring-neutral-soft',\n info: 'bg-info-solid text-info-solid-fg border border-info-border-strong ring-4 ring-info-soft',\n success: 'bg-success-solid text-success-solid-fg border border-success-border-strong ring-4 ring-success-soft',\n warning: 'bg-warning-solid text-warning-solid-fg border border-warning-border-strong ring-4 ring-warning-soft',\n error: 'bg-error-solid text-error-solid-fg border border-error-border-strong ring-4 ring-error-soft',\n};\n\nconst INDICATOR_COMPLETED: Record<TwColor, string> = {\n primary: 'bg-primary-solid text-primary-solid-fg border border-primary-border-strong',\n secondary: 'bg-secondary-solid text-secondary-solid-fg border border-secondary-border-strong',\n accent: 'bg-accent-solid text-accent-solid-fg border border-accent-border-strong',\n neutral: 'bg-neutral-solid text-neutral-solid-fg border border-neutral-border-strong',\n info: 'bg-info-solid text-info-solid-fg border border-info-border-strong',\n success: 'bg-success-solid text-success-solid-fg border border-success-border-strong',\n warning: 'bg-warning-solid text-warning-solid-fg border border-warning-border-strong',\n error: 'bg-error-solid text-error-solid-fg border border-error-border-strong',\n};\n\nconst LABEL_PENDING = 'text-fg-muted';\nconst LABEL_COMPLETED = 'text-fg';\nconst LABEL_DISABLED = 'text-fg-subtle';\nconst LABEL_ERROR = 'text-error-fg font-semibold';\n\nconst LABEL_ACTIVE: Record<TwColor, string> = {\n primary: 'text-primary-fg font-semibold',\n secondary: 'text-secondary-fg font-semibold',\n accent: 'text-accent-fg font-semibold',\n neutral: 'text-fg font-semibold',\n info: 'text-info-fg font-semibold',\n success: 'text-success-fg font-semibold',\n warning: 'text-warning-fg font-semibold',\n error: 'text-error-fg font-semibold',\n};\n\nconst CONNECTOR_DEFAULT = 'bg-border';\nconst CONNECTOR_ERROR = 'bg-error-border-strong';\nconst CONNECTOR_REACHED: Record<TwColor, string> = {\n primary: 'bg-primary-border-strong',\n secondary: 'bg-secondary-border-strong',\n accent: 'bg-accent-border-strong',\n neutral: 'bg-neutral-border-strong',\n info: 'bg-info-border-strong',\n success: 'bg-success-border-strong',\n warning: 'bg-warning-border-strong',\n error: 'bg-error-border-strong',\n};\n\nfunction resolveIndicatorClasses(state: StepStyleState, color: TwColor): string {\n switch (state) {\n case 'pending':\n return INDICATOR_PENDING;\n case 'disabled':\n return INDICATOR_DISABLED;\n case 'error':\n return INDICATOR_ERROR;\n case 'active':\n return INDICATOR_ACTIVE[color];\n case 'completed':\n return INDICATOR_COMPLETED[color];\n }\n}\n\nfunction resolveLabelClasses(state: StepStyleState, color: TwColor): string {\n switch (state) {\n case 'pending':\n return LABEL_PENDING;\n case 'completed':\n return LABEL_COMPLETED;\n case 'disabled':\n return LABEL_DISABLED;\n case 'error':\n return LABEL_ERROR;\n case 'active':\n return LABEL_ACTIVE[color];\n }\n}\n\nfunction resolveConnectorClasses(state: StepStyleState, color: TwColor): string {\n if (state === 'error') return CONNECTOR_ERROR;\n if (state === 'completed' || state === 'active') return CONNECTOR_REACHED[color];\n return CONNECTOR_DEFAULT;\n}\n\n// ── StepperIconDirective ──\n\n/**\n * Structural-style directive on an `<ng-template>` that replaces the default\n * indicator icon for a given step state.\n */\n@Directive({\n selector: 'ng-template[twStepperIcon]',\n})\nexport class StepperIconDirective {\n /** Step state this template overrides. Matches CDK's `StepState` values (`'number' | 'edit' | 'done' | 'error'`). */\n readonly state = input<StepState | undefined>(undefined);\n\n /** @internal */\n readonly templateRef = inject(TemplateRef<StepperIconContext>);\n}\n\n// ── StepLabelDirective ──\n\n/**\n * Structural-style directive on an `<ng-template>` used as a custom step header\n * label. Consumers write `<ng-template twStepLabel>…</ng-template>` inside `<tw-step>`.\n */\n@Directive({\n selector: 'ng-template[twStepLabel]',\n providers: [{ provide: CdkStepLabel, useExisting: StepLabelDirective }],\n})\nexport class StepLabelDirective extends CdkStepLabel {}\n\n// ── StepComponent ──\n\n@Component({\n selector: 'tw-step',\n template: '<ng-template><ng-content/></ng-template>',\n exportAs: 'twStep',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: CdkStep, useExisting: StepComponent }],\n})\nexport class StepComponent extends CdkStep {\n /** Optional descriptive text shown under the step label in the `'default'` variant. */\n readonly description = input('');\n\n /** @internal Custom indicator icon templates (one per state) projected into this step. */\n readonly iconTemplates = contentChildren(StepperIconDirective);\n}\n\n// ── StepperComponent ──\n\n@Component({\n selector: 'tw-stepper',\n templateUrl: './stepper.html',\n exportAs: 'twStepper',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, CdkStepHeader],\n providers: [{ provide: CdkStepper, useExisting: StepperComponent }],\n host: {\n '[class]': 'rootClasses()',\n },\n})\nexport class StepperComponent extends CdkStepper implements AfterViewInit {\n /** Visual style of the indicator strip. `'default'` = numbered circles, `'dot'` = compact filled dots, `'simple'` = indicators only (labels hidden visually). Defaults to `'default'`. */\n readonly variant = input<StepperVariant>('default');\n\n /** Semantic color for active and completed indicators and connectors. Defaults to `'primary'`. */\n readonly color = input<TwColor>('primary');\n\n /** Controls indicator size and label typography. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** When true, steps with `hasError` render error styling, icon, and `aria-invalid`. Defaults to `true`. */\n // TRUE-default: error states must be visible by default — silently swallowing\n // a stepped flow's failure state is a UX regression. Consumers opt out per step.\n readonly showError = input(true);\n\n /** When true, clicking a navigable step header selects it. Set to `false` to only allow advancement via `twStepperNext` / `twStepperPrevious`. Defaults to `true`. */\n // TRUE-default: free-navigation is the standard stepper UX; restricted flows\n // (e.g. wizards that must complete in order) explicitly opt out.\n readonly headerInteractive = input(true);\n\n private readonly _liveAnnouncer = inject(LiveAnnouncer);\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _globalOptions = inject(STEPPER_GLOBAL_OPTIONS, { optional: true });\n\n /**\n * CdkStepper exposes its state via class properties (selectedIndex,\n * previousIndex, orientation), not signals. We mirror those into signals so\n * templates can react via @if/@for and OnPush change detection works without\n * manual `markForCheck`. Sync happens in the property setters and lifecycle\n * hooks below — keep these mirrors in lock-step with the CDK fields.\n */\n private readonly _orientationSignal = signal<StepperOrientation>('horizontal');\n private readonly _selectedIndexSignal = signal(0);\n private readonly _previousIndexSignal = signal(0);\n\n /** @internal Reactive mirror of CDK's `orientation` input. */\n readonly orientationValue = this._orientationSignal.asReadonly();\n\n /** @internal Reactive mirror of CDK's `selectedIndex`. */\n readonly selectedIndexValue = this._selectedIndexSignal.asReadonly();\n\n override set orientation(value: StepperOrientation) {\n super.orientation = value;\n this._orientationSignal.set(value);\n }\n override get orientation(): StepperOrientation {\n return super.orientation;\n }\n\n private readonly _variantResult = computed(() =>\n stepperVariants({\n variant: this.variant(),\n size: this.size(),\n orientation: this._orientationSignal(),\n }),\n );\n\n readonly rootClasses = computed(() => this._variantResult().root());\n readonly headerClasses = computed(() => this._variantResult().header());\n readonly stepItemClasses = computed(() => this._variantResult().stepItem());\n readonly stepHeaderClasses = computed(() => this._variantResult().stepHeader());\n readonly stepIndicatorBaseClasses = computed(() => this._variantResult().stepIndicator());\n readonly stepNumberClasses = computed(() => this._variantResult().stepNumber());\n readonly stepIconSlotClasses = computed(() => this._variantResult().stepIconSlot());\n readonly stepLabelWrapperClasses = computed(() => this._variantResult().stepLabelWrapper());\n readonly stepLabelBaseClasses = computed(() => this._variantResult().stepLabel());\n readonly stepDescriptionClasses = computed(() => this._variantResult().stepDescription());\n readonly stepOptionalHintClasses = computed(() => this._variantResult().stepOptionalHint());\n readonly stepConnectorBaseClasses = computed(() => this._variantResult().stepConnector());\n readonly stepPanelClasses = computed(() => this._variantResult().stepPanel());\n\n readonly panelAnimationClass = computed(() => {\n if (this._orientationSignal() === 'vertical') return null;\n return this._selectedIndexSignal() >= this._previousIndexSignal()\n ? 'step-panel-enter-forward'\n : 'step-panel-enter-backward';\n });\n\n override ngAfterViewInit(): void {\n super.ngAfterViewInit();\n this._orientationSignal.set(this.orientation);\n this._selectedIndexSignal.set(this.selectedIndex);\n this._previousIndexSignal.set(this.selectedIndex);\n\n this.selectionChange\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((event: StepperSelectionEvent) => {\n this._previousIndexSignal.set(event.previouslySelectedIndex);\n this._selectedIndexSignal.set(event.selectedIndex);\n this._orientationSignal.set(this.orientation);\n\n const total = this.steps.length;\n const label =\n event.selectedStep.label || `Step ${event.selectedIndex + 1}`;\n this._liveAnnouncer.announce(\n `${label}, step ${event.selectedIndex + 1} of ${total}`,\n );\n });\n }\n\n /** @internal Typed view of projected steps. */\n get twSteps(): readonly StepComponent[] {\n return this.steps.toArray() as StepComponent[];\n }\n\n /** @internal Resolves the visual state of a step for color/theming purposes. */\n getStepStyleState(step: StepComponent, index: number): StepStyleState {\n if (this.shouldRenderError(step)) return 'error';\n if (index === this._selectedIndexSignal()) return 'active';\n const itype = step.indicatorType();\n if (itype === STEP_STATE.DONE || itype === STEP_STATE.EDIT) return 'completed';\n if (this.linear && !step.isNavigable()) return 'disabled';\n return 'pending';\n }\n\n /** @internal */\n getIndicatorClass(step: StepComponent, index: number): string {\n const state = this.getStepStyleState(step, index);\n return `${this.stepIndicatorBaseClasses()} ${resolveIndicatorClasses(state, this.color())}`;\n }\n\n /** @internal */\n getLabelClass(step: StepComponent, index: number): string {\n const state = this.getStepStyleState(step, index);\n return `${this.stepLabelBaseClasses()} ${resolveLabelClasses(state, this.color())}`;\n }\n\n /** @internal */\n getConnectorClass(step: StepComponent, index: number): string {\n const state = this.getStepStyleState(step, index);\n return `${this.stepConnectorBaseClasses()} ${resolveConnectorClasses(state, this.color())}`;\n }\n\n /** @internal Resolves which indicator glyph to render for a step. */\n getIndicatorType(step: StepComponent): StepState {\n if (this.shouldRenderError(step)) return STEP_STATE.ERROR as StepState;\n return step.indicatorType() as StepState;\n }\n\n /** @internal Looks up a consumer-supplied custom template for a given indicator state. */\n resolveIconTemplate(\n step: StepComponent,\n state: StepState,\n ): TemplateRef<StepperIconContext> | null {\n const templates = step.iconTemplates();\n const match = templates.find((t) => t.state() === state);\n return match ? match.templateRef : null;\n }\n\n /** @internal Context supplied to custom icon templates. */\n iconContext(index: number): StepperIconContext {\n return {\n $implicit: {\n index,\n active: index === this._selectedIndexSignal(),\n },\n };\n }\n\n /** @internal Click handler for the step header button. */\n onHeaderClick(step: StepComponent, index: number): void {\n if (!this.headerInteractive()) return;\n if (!step.isNavigable()) return;\n this.selectedIndex = index;\n }\n\n /** @internal Whether the stepper should render the error state for a step. */\n shouldRenderError(step: StepComponent): boolean {\n if (!this.showError()) return false;\n if (this._globalOptions?.showError === false) return false;\n return step.hasError;\n }\n}\n\n// ── Next / Previous directives (hostDirectives over CDK) ──\n\n@Directive({\n selector: 'button[twStepperNext]',\n hostDirectives: [{ directive: CdkStepperNext, inputs: ['type'] }],\n})\nexport class StepperNextDirective {}\n\n@Directive({\n selector: 'button[twStepperPrevious]',\n hostDirectives: [{ directive: CdkStepperPrevious, inputs: ['type'] }],\n})\nexport class StepperPreviousDirective {}\n\n// ── Provider helper ──\n\n/** Provides app-wide stepper defaults via `STEPPER_GLOBAL_OPTIONS`. */\nexport function provideTwStepperOptions(options: StepperOptions): Provider[] {\n return [{ provide: STEPPER_GLOBAL_OPTIONS, useValue: options }];\n}\n","<!-- Header strip + inline panels (vertical) / header-only (horizontal) -->\n<div\n [class]=\"headerClasses()\"\n role=\"tablist\"\n [attr.aria-orientation]=\"orientationValue()\"\n (keydown)=\"_onKeydown($event)\"\n>\n @for (step of twSteps; track $index; let i = $index; let last = $last) {\n <div [class]=\"stepItemClasses()\">\n <!-- Step header button -->\n <button\n type=\"button\"\n cdkStepHeader\n role=\"tab\"\n [class]=\"stepHeaderClasses()\"\n [class.pointer-events-none]=\"!headerInteractive() || !step.isNavigable()\"\n [class.opacity-60]=\"!step.isNavigable()\"\n [id]=\"_getStepLabelId(i)\"\n [attr.aria-controls]=\"_getStepContentId(i)\"\n [attr.aria-selected]=\"selectedIndexValue() === i\"\n [attr.aria-current]=\"selectedIndexValue() === i ? 'step' : null\"\n [attr.aria-disabled]=\"!step.isNavigable() || null\"\n [attr.aria-invalid]=\"shouldRenderError(step) || null\"\n [attr.aria-label]=\"step.ariaLabel || null\"\n [attr.aria-labelledby]=\"step.ariaLabelledby || null\"\n (click)=\"onHeaderClick(step, i)\"\n >\n <!-- Indicator (number / icon / dot) -->\n <span [class]=\"getIndicatorClass(step, i)\">\n @let indicatorType = getIndicatorType(step);\n @let customIcon = resolveIconTemplate(step, indicatorType);\n\n @if (customIcon) {\n <span [class]=\"stepIconSlotClasses()\">\n <ng-container\n [ngTemplateOutlet]=\"customIcon\"\n [ngTemplateOutletContext]=\"iconContext(i)\"\n />\n </span>\n } @else {\n @switch (indicatorType) {\n @case ('number') {\n <span [class]=\"stepNumberClasses()\">{{ i + 1 }}</span>\n }\n @case ('done') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </span>\n }\n @case ('edit') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M13.586 3.586a2 2 0 1 1 2.828 2.828l-.793.793-2.828-2.828.793-.793Zm-2.207 2.207 2.828 2.828-7.07 7.071a2 2 0 0 1-.83.5l-3.086.926a.5.5 0 0 1-.62-.621l.926-3.086a2 2 0 0 1 .5-.83l7.352-7.788Z\"\n />\n </svg>\n </span>\n }\n @case ('error') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm.75-11.25a.75.75 0 0 0-1.5 0v4.5a.75.75 0 0 0 1.5 0v-4.5ZM10 15a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </span>\n }\n }\n }\n </span>\n\n <!-- Label + description -->\n <span [class]=\"stepLabelWrapperClasses()\">\n <span [class]=\"getLabelClass(step, i)\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n @if (step.optional && !step.completed) {\n <span [class]=\"stepOptionalHintClasses()\">(Optional)</span>\n }\n </span>\n\n @if (step.description() && variant() === 'default') {\n <span [class]=\"stepDescriptionClasses()\">{{ step.description() }}</span>\n }\n\n @if (shouldRenderError(step) && step.errorMessage) {\n <span class=\"sr-only\">{{ step.errorMessage }}</span>\n }\n </span>\n </button>\n\n <!-- Connector (between step i and i+1) -->\n @if (!last) {\n <span\n [class]=\"getConnectorClass(step, i)\"\n aria-hidden=\"true\"\n ></span>\n }\n\n <!-- Vertical: panel is rendered inline under each selected step -->\n @if (orientationValue() === 'vertical' && selectedIndexValue() === i && step.content) {\n <div\n role=\"tabpanel\"\n [id]=\"_getStepContentId(i)\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [class]=\"stepPanelClasses()\"\n tabindex=\"0\"\n >\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n }\n </div>\n }\n</div>\n\n<!-- Horizontal: single panel rendered below the strip -->\n@if (orientationValue() === 'horizontal') {\n @let activeStep = twSteps[selectedIndexValue()];\n @if (activeStep && activeStep.content) {\n <div\n role=\"tabpanel\"\n [id]=\"_getStepContentId(selectedIndexValue())\"\n [attr.aria-labelledby]=\"_getStepLabelId(selectedIndexValue())\"\n [class]=\"stepPanelClasses()\"\n [animate.enter]=\"panelAnimationClass()\"\n tabindex=\"0\"\n >\n <ng-container [ngTemplateOutlet]=\"activeStep.content\" />\n </div>\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cdevhub-ngx-tw-stepper.mjs","sources":["../../../projects/ngx-tw/stepper/stepper.ts","../../../projects/ngx-tw/stepper/stepper.html","../../../projects/ngx-tw/stepper/cdevhub-ngx-tw-stepper.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n QueryList,\n ViewChildren,\n DestroyRef,\n Directive,\n inject,\n input,\n signal,\n TemplateRef,\n type AfterViewInit,\n type Provider,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport {\n CdkStep,\n CdkStepHeader,\n CdkStepLabel,\n CdkStepper,\n CdkStepperNext,\n CdkStepperPrevious,\n STEP_STATE,\n STEPPER_GLOBAL_OPTIONS,\n type StepperOptions,\n type StepperOrientation,\n type StepperSelectionEvent,\n type StepState,\n} from '@angular/cdk/stepper';\nimport { tv } from 'tailwind-variants';\nimport type { TwColor, TwSize } from '@cdevhub/ngx-tw/core';\n\n/** Visual style of the step indicator strip. */\nexport type StepperVariant = 'default' | 'dot' | 'simple';\n\n/** Context passed to custom `*twStepperIcon` templates. */\nexport interface StepperIconContext {\n $implicit: { index: number; active: boolean };\n}\n\n// ── tv() config ──\n\nconst stepperVariants = tv(\n {\n slots: {\n root: 'flex',\n header: 'flex',\n stepItem: 'flex',\n stepHeader:\n 'group relative inline-flex items-center gap-2 cursor-pointer transition-colors duration-normal motion-reduce:transition-none rounded-md focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:cursor-not-allowed',\n stepIndicator:\n 'inline-flex items-center justify-center shrink-0 rounded-full font-medium transition-[color,background-color,border-color,box-shadow] duration-normal motion-reduce:transition-none',\n stepNumber: 'leading-none',\n stepIconSlot: 'inline-flex items-center justify-center',\n stepLabelWrapper: 'flex flex-col min-w-0 text-left',\n stepLabel: 'leading-tight',\n stepDescription: 'text-xs text-fg-muted leading-tight mt-0.5',\n stepOptionalHint: 'text-xs text-fg-subtle ml-1 font-normal',\n stepConnector:\n 'shrink-0 transition-colors duration-normal motion-reduce:transition-none',\n stepPanel: 'min-w-0',\n },\n variants: {\n variant: {\n default: {},\n dot: {\n stepNumber: 'hidden',\n stepIconSlot: 'hidden',\n },\n simple: {\n stepLabelWrapper: 'sr-only',\n },\n },\n size: {\n xs: {\n stepIndicator: 'size-6 text-xs',\n stepLabel: 'text-xs',\n },\n sm: {\n stepIndicator: 'size-7 text-xs',\n stepLabel: 'text-sm',\n },\n md: {\n stepIndicator: 'size-8 text-sm',\n stepLabel: 'text-sm',\n },\n // lg/xl step labels use `text-base` per the trigger font-size scale\n // (CLAUDE.md typography). Steps are interactive trigger elements.\n lg: {\n stepIndicator: 'size-10 text-base',\n stepLabel: 'text-base',\n },\n xl: {\n stepIndicator: 'size-12 text-base',\n stepLabel: 'text-base',\n },\n },\n orientation: {\n horizontal: {\n root: 'flex-col w-full',\n header: 'flex-row items-center w-full',\n stepItem: 'flex-row items-center flex-1 last:flex-none',\n stepConnector: 'flex-1 h-px mx-2',\n stepLabelWrapper: 'ml-2',\n stepPanel:\n 'mt-4 rounded-lg outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 motion-reduce:transition-none',\n },\n vertical: {\n root: 'flex-col',\n header: 'flex-col items-stretch',\n stepItem: 'flex-col items-start w-full',\n stepConnector: 'w-px min-h-6 ml-4 my-1 flex-1',\n stepLabelWrapper: 'ml-3',\n stepPanel:\n 'ml-11 mt-2 mb-4 rounded-lg outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 motion-reduce:transition-none',\n },\n },\n },\n compoundVariants: [\n // Dot variant indicator sizing\n { variant: 'dot', size: 'xs', class: { stepIndicator: 'size-2' } },\n { variant: 'dot', size: 'sm', class: { stepIndicator: 'size-2.5' } },\n { variant: 'dot', size: 'md', class: { stepIndicator: 'size-2.5' } },\n { variant: 'dot', size: 'lg', class: { stepIndicator: 'size-3' } },\n { variant: 'dot', size: 'xl', class: { stepIndicator: 'size-3' } },\n\n // Thicker connectors for lg / xl\n {\n orientation: 'horizontal',\n size: 'lg',\n class: { stepConnector: 'h-0.5' },\n },\n {\n orientation: 'horizontal',\n size: 'xl',\n class: { stepConnector: 'h-0.5' },\n },\n { orientation: 'vertical', size: 'lg', class: { stepConnector: 'w-0.5' } },\n { orientation: 'vertical', size: 'xl', class: { stepConnector: 'w-0.5' } },\n ],\n defaultVariants: {\n variant: 'default',\n size: 'md',\n orientation: 'horizontal',\n },\n },\n { twMerge: true },\n);\n\n// ── Static class lookups (Tailwind v4 requires statically-written class strings) ──\n\ntype StepStyleState = 'pending' | 'active' | 'completed' | 'error' | 'disabled';\n\nconst INDICATOR_PENDING =\n 'bg-surface-muted text-fg-muted border border-border';\nconst INDICATOR_DISABLED =\n 'bg-surface-muted text-fg-subtle border border-border opacity-60';\nconst INDICATOR_ERROR =\n 'bg-error-solid text-error-solid-fg border border-error-border-strong';\n\n// Slot tokens own light/dark contrast — no `dark:`, no shade picks.\n// The active-state ring uses `{role}-soft` (low-chroma in light, deep-tinted in\n// dark) so the halo reads consistently against the surface in both modes.\nconst INDICATOR_ACTIVE: Record<TwColor, string> = {\n primary: 'bg-primary-solid text-primary-solid-fg border border-primary-border-strong ring-4 ring-primary-soft',\n secondary: 'bg-secondary-solid text-secondary-solid-fg border border-secondary-border-strong ring-4 ring-secondary-soft',\n accent: 'bg-accent-solid text-accent-solid-fg border border-accent-border-strong ring-4 ring-accent-soft',\n neutral: 'bg-neutral-solid text-neutral-solid-fg border border-neutral-border-strong ring-4 ring-neutral-soft',\n info: 'bg-info-solid text-info-solid-fg border border-info-border-strong ring-4 ring-info-soft',\n success: 'bg-success-solid text-success-solid-fg border border-success-border-strong ring-4 ring-success-soft',\n warning: 'bg-warning-solid text-warning-solid-fg border border-warning-border-strong ring-4 ring-warning-soft',\n error: 'bg-error-solid text-error-solid-fg border border-error-border-strong ring-4 ring-error-soft',\n};\n\nconst INDICATOR_COMPLETED: Record<TwColor, string> = {\n primary: 'bg-primary-solid text-primary-solid-fg border border-primary-border-strong',\n secondary: 'bg-secondary-solid text-secondary-solid-fg border border-secondary-border-strong',\n accent: 'bg-accent-solid text-accent-solid-fg border border-accent-border-strong',\n neutral: 'bg-neutral-solid text-neutral-solid-fg border border-neutral-border-strong',\n info: 'bg-info-solid text-info-solid-fg border border-info-border-strong',\n success: 'bg-success-solid text-success-solid-fg border border-success-border-strong',\n warning: 'bg-warning-solid text-warning-solid-fg border border-warning-border-strong',\n error: 'bg-error-solid text-error-solid-fg border border-error-border-strong',\n};\n\nconst LABEL_PENDING = 'text-fg-muted';\nconst LABEL_COMPLETED = 'text-fg';\nconst LABEL_DISABLED = 'text-fg-subtle';\nconst LABEL_ERROR = 'text-error-fg font-semibold';\n\nconst LABEL_ACTIVE: Record<TwColor, string> = {\n primary: 'text-primary-fg font-semibold',\n secondary: 'text-secondary-fg font-semibold',\n accent: 'text-accent-fg font-semibold',\n neutral: 'text-fg font-semibold',\n info: 'text-info-fg font-semibold',\n success: 'text-success-fg font-semibold',\n warning: 'text-warning-fg font-semibold',\n error: 'text-error-fg font-semibold',\n};\n\nconst CONNECTOR_DEFAULT = 'bg-border';\nconst CONNECTOR_ERROR = 'bg-error-border-strong';\nconst CONNECTOR_REACHED: Record<TwColor, string> = {\n primary: 'bg-primary-border-strong',\n secondary: 'bg-secondary-border-strong',\n accent: 'bg-accent-border-strong',\n neutral: 'bg-neutral-border-strong',\n info: 'bg-info-border-strong',\n success: 'bg-success-border-strong',\n warning: 'bg-warning-border-strong',\n error: 'bg-error-border-strong',\n};\n\nfunction resolveIndicatorClasses(state: StepStyleState, color: TwColor): string {\n switch (state) {\n case 'pending':\n return INDICATOR_PENDING;\n case 'disabled':\n return INDICATOR_DISABLED;\n case 'error':\n return INDICATOR_ERROR;\n case 'active':\n return INDICATOR_ACTIVE[color];\n case 'completed':\n return INDICATOR_COMPLETED[color];\n }\n}\n\nfunction resolveLabelClasses(state: StepStyleState, color: TwColor): string {\n switch (state) {\n case 'pending':\n return LABEL_PENDING;\n case 'completed':\n return LABEL_COMPLETED;\n case 'disabled':\n return LABEL_DISABLED;\n case 'error':\n return LABEL_ERROR;\n case 'active':\n return LABEL_ACTIVE[color];\n }\n}\n\nfunction resolveConnectorClasses(state: StepStyleState, color: TwColor): string {\n if (state === 'error') return CONNECTOR_ERROR;\n if (state === 'completed' || state === 'active') return CONNECTOR_REACHED[color];\n return CONNECTOR_DEFAULT;\n}\n\n// ── StepperIconDirective ──\n\n/**\n * Structural-style directive on an `<ng-template>` that replaces the default\n * indicator icon for a given step state.\n */\n@Directive({\n selector: 'ng-template[twStepperIcon]',\n})\nexport class StepperIconDirective {\n /** Step state this template overrides. Matches CDK's `StepState` values (`'number' | 'edit' | 'done' | 'error'`). */\n readonly state = input<StepState | undefined>(undefined);\n\n /** @internal */\n readonly templateRef = inject(TemplateRef<StepperIconContext>);\n}\n\n// ── StepLabelDirective ──\n\n/**\n * Structural-style directive on an `<ng-template>` used as a custom step header\n * label. Consumers write `<ng-template twStepLabel>…</ng-template>` inside `<tw-step>`.\n */\n@Directive({\n selector: 'ng-template[twStepLabel]',\n providers: [{ provide: CdkStepLabel, useExisting: StepLabelDirective }],\n})\nexport class StepLabelDirective extends CdkStepLabel {}\n\n// ── StepComponent ──\n\n@Component({\n selector: 'tw-step',\n template: '<ng-template><ng-content/></ng-template>',\n exportAs: 'twStep',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: CdkStep, useExisting: StepComponent }],\n})\nexport class StepComponent extends CdkStep {\n /** Optional descriptive text shown under the step label in the `'default'` variant. */\n readonly description = input('');\n\n /** @internal Custom indicator icon templates (one per state) projected into this step. */\n readonly iconTemplates = contentChildren(StepperIconDirective);\n}\n\n// ── StepperComponent ──\n\n@Component({\n selector: 'tw-stepper',\n templateUrl: './stepper.html',\n exportAs: 'twStepper',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, CdkStepHeader],\n providers: [{ provide: CdkStepper, useExisting: StepperComponent }],\n host: {\n '[class]': 'rootClasses()',\n },\n})\nexport class StepperComponent extends CdkStepper implements AfterViewInit {\n /** Visual style of the indicator strip. `'default'` = numbered circles, `'dot'` = compact filled dots, `'simple'` = indicators only (labels hidden visually). Defaults to `'default'`. */\n readonly variant = input<StepperVariant>('default');\n\n /** Semantic color for active and completed indicators and connectors. Defaults to `'primary'`. */\n readonly color = input<TwColor>('primary');\n\n /** Controls indicator size and label typography. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** When true, steps with `hasError` render error styling, icon, and `aria-invalid`. Defaults to `true`. */\n // TRUE-default: error states must be visible by default — silently swallowing\n // a stepped flow's failure state is a UX regression. Consumers opt out per step.\n readonly showError = input(true);\n\n /** When true, clicking a navigable step header selects it. Set to `false` to only allow advancement via `twStepperNext` / `twStepperPrevious`. Defaults to `true`. */\n // TRUE-default: free-navigation is the standard stepper UX; restricted flows\n // (e.g. wizards that must complete in order) explicitly opt out.\n readonly headerInteractive = input(true);\n\n private readonly _liveAnnouncer = inject(LiveAnnouncer);\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _globalOptions = inject(STEPPER_GLOBAL_OPTIONS, { optional: true });\n\n /**\n * CdkStepper exposes its state via class properties (selectedIndex,\n * previousIndex, orientation), not signals. We mirror those into signals so\n * templates can react via @if/@for and OnPush change detection works without\n * manual `markForCheck`. Sync happens in the property setters and lifecycle\n * hooks below — keep these mirrors in lock-step with the CDK fields.\n */\n private readonly _orientationSignal = signal<StepperOrientation>('horizontal');\n private readonly _selectedIndexSignal = signal(0);\n private readonly _previousIndexSignal = signal(0);\n\n /** @internal Reactive mirror of CDK's `orientation` input. */\n readonly orientationValue = this._orientationSignal.asReadonly();\n\n /** @internal Reactive mirror of CDK's `selectedIndex`. */\n readonly selectedIndexValue = this._selectedIndexSignal.asReadonly();\n\n override set orientation(value: StepperOrientation) {\n super.orientation = value;\n this._orientationSignal.set(value);\n }\n override get orientation(): StepperOrientation {\n return super.orientation;\n }\n\n private readonly _variantResult = computed(() =>\n stepperVariants({\n variant: this.variant(),\n size: this.size(),\n orientation: this._orientationSignal(),\n }),\n );\n\n readonly rootClasses = computed(() => this._variantResult().root());\n readonly headerClasses = computed(() => this._variantResult().header());\n readonly stepItemClasses = computed(() => this._variantResult().stepItem());\n readonly stepHeaderClasses = computed(() => this._variantResult().stepHeader());\n readonly stepIndicatorBaseClasses = computed(() => this._variantResult().stepIndicator());\n readonly stepNumberClasses = computed(() => this._variantResult().stepNumber());\n readonly stepIconSlotClasses = computed(() => this._variantResult().stepIconSlot());\n readonly stepLabelWrapperClasses = computed(() => this._variantResult().stepLabelWrapper());\n readonly stepLabelBaseClasses = computed(() => this._variantResult().stepLabel());\n readonly stepDescriptionClasses = computed(() => this._variantResult().stepDescription());\n readonly stepOptionalHintClasses = computed(() => this._variantResult().stepOptionalHint());\n readonly stepConnectorBaseClasses = computed(() => this._variantResult().stepConnector());\n readonly stepPanelClasses = computed(() => this._variantResult().stepPanel());\n\n readonly panelAnimationClass = computed(() => {\n if (this._orientationSignal() === 'vertical') return null;\n return this._selectedIndexSignal() >= this._previousIndexSignal()\n ? 'step-panel-enter-forward'\n : 'step-panel-enter-backward';\n });\n\n override ngAfterViewInit(): void {\n super.ngAfterViewInit();\n this._orientationSignal.set(this.orientation);\n this._selectedIndexSignal.set(this.selectedIndex);\n this._previousIndexSignal.set(this.selectedIndex);\n this.syncFocusIndex();\n\n this.selectionChange\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((event: StepperSelectionEvent) => {\n this.syncFocusIndex();\n this._previousIndexSignal.set(event.previouslySelectedIndex);\n this._selectedIndexSignal.set(event.selectedIndex);\n this._orientationSignal.set(this.orientation);\n\n const total = this.steps.length;\n const label =\n event.selectedStep.label || `Step ${event.selectedIndex + 1}`;\n this._liveAnnouncer.announce(\n `${label}, step ${event.selectedIndex + 1} of ${total}`,\n );\n });\n }\n\n /** @internal Typed view of projected steps. */\n get twSteps(): readonly StepComponent[] {\n return this.steps.toArray() as StepComponent[];\n }\n\n /** @internal Resolves the visual state of a step for color/theming purposes. */\n getStepStyleState(step: StepComponent, index: number): StepStyleState {\n if (this.shouldRenderError(step)) return 'error';\n if (index === this._selectedIndexSignal()) return 'active';\n const itype = step.indicatorType();\n if (itype === STEP_STATE.DONE || itype === STEP_STATE.EDIT) return 'completed';\n if (this.linear && !step.isNavigable()) return 'disabled';\n return 'pending';\n }\n\n /** @internal */\n getIndicatorClass(step: StepComponent, index: number): string {\n const state = this.getStepStyleState(step, index);\n return `${this.stepIndicatorBaseClasses()} ${resolveIndicatorClasses(state, this.color())}`;\n }\n\n /** @internal */\n getLabelClass(step: StepComponent, index: number): string {\n const state = this.getStepStyleState(step, index);\n return `${this.stepLabelBaseClasses()} ${resolveLabelClasses(state, this.color())}`;\n }\n\n /** @internal */\n getConnectorClass(step: StepComponent, index: number): string {\n const state = this.getStepStyleState(step, index);\n return `${this.stepConnectorBaseClasses()} ${resolveConnectorClasses(state, this.color())}`;\n }\n\n /** @internal Resolves which indicator glyph to render for a step. */\n getIndicatorType(step: StepComponent): StepState {\n if (this.shouldRenderError(step)) return STEP_STATE.ERROR as StepState;\n return step.indicatorType() as StepState;\n }\n\n /** @internal Looks up a consumer-supplied custom template for a given indicator state. */\n resolveIconTemplate(\n step: StepComponent,\n state: StepState,\n ): TemplateRef<StepperIconContext> | null {\n const templates = step.iconTemplates();\n const match = templates.find((t) => t.state() === state);\n return match ? match.templateRef : null;\n }\n\n /** @internal Context supplied to custom icon templates. */\n iconContext(index: number): StepperIconContext {\n return {\n $implicit: {\n index,\n active: index === this._selectedIndexSignal(),\n },\n };\n }\n\n /** @internal Click handler for the step header button. */\n /**\n * @internal Re-declares CdkStepper's `_stepHeader` query as a **view** query.\n *\n * CdkStepper declares it as `@ContentChildren`, which assumes the host\n * projects its own headers. `tw-stepper` renders the header strip inside its\n * own template instead, so the base query matched nothing: `_sortedHeaders`\n * stayed empty, the FocusKeyManager had zero items, and arrow-key navigation\n * silently did nothing at all. Angular Material overrides the same query for\n * the same reason.\n *\n * Decorator form, not `viewChildren()`, because CdkStepper subscribes to\n * `_stepHeader.changes` — a QueryList API that signal queries do not expose.\n */\n @ViewChildren(CdkStepHeader) override _stepHeader = new QueryList<CdkStepHeader>();\n\n /**\n * @internal Which step header currently holds the single tab stop.\n *\n * Mirrors CdkStepper's `_getFocusIndex()` into a signal because that method\n * reads `_keyManager.activeItemIndex`, a plain property — and CdkStepper's\n * `_onKeydown` does not call `_stateChanged()` on the arrow-key path, so an\n * OnPush template binding straight to `_getFocusIndex()` would render the\n * roving tabindex once and then go stale the moment the user arrows.\n */\n readonly focusIndexValue = signal(0);\n\n /** @internal Re-reads the CDK key manager's active item into `focusIndexValue`. */\n private syncFocusIndex(): void {\n this.focusIndexValue.set(this._getFocusIndex() ?? this.selectedIndex);\n }\n\n /** @internal Relays tablist keydown to CdkStepper, then republishes the tab stop. */\n onTablistKeydown(event: KeyboardEvent): void {\n this._onKeydown(event);\n this.syncFocusIndex();\n }\n\n onHeaderClick(step: StepComponent, index: number): void {\n if (!this.headerInteractive()) return;\n if (!step.isNavigable()) return;\n this.selectedIndex = index;\n this.syncFocusIndex();\n }\n\n /** @internal Whether the stepper should render the error state for a step. */\n shouldRenderError(step: StepComponent): boolean {\n if (!this.showError()) return false;\n if (this._globalOptions?.showError === false) return false;\n return step.hasError;\n }\n}\n\n// ── Next / Previous directives (hostDirectives over CDK) ──\n\n@Directive({\n selector: 'button[twStepperNext]',\n hostDirectives: [{ directive: CdkStepperNext, inputs: ['type'] }],\n})\nexport class StepperNextDirective {}\n\n@Directive({\n selector: 'button[twStepperPrevious]',\n hostDirectives: [{ directive: CdkStepperPrevious, inputs: ['type'] }],\n})\nexport class StepperPreviousDirective {}\n\n// ── Provider helper ──\n\n/** Provides app-wide stepper defaults via `STEPPER_GLOBAL_OPTIONS`. */\nexport function provideTwStepperOptions(options: StepperOptions): Provider[] {\n return [{ provide: STEPPER_GLOBAL_OPTIONS, useValue: options }];\n}\n","<!-- Header strip + inline panels (vertical) / header-only (horizontal) -->\n<!-- WAI-ARIA tablist pattern: the tablist relays keydown to the FocusKeyManager\n but does not itself receive focus — each step header is the focus target. -->\n<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\n<div\n [class]=\"headerClasses()\"\n role=\"tablist\"\n [attr.aria-orientation]=\"orientationValue()\"\n (keydown)=\"onTablistKeydown($event)\"\n>\n @for (step of twSteps; track $index; let i = $index; let last = $last) {\n <div [class]=\"stepItemClasses()\">\n <!-- Step header button -->\n <button\n type=\"button\"\n cdkStepHeader\n role=\"tab\"\n [attr.tabindex]=\"focusIndexValue() === i ? 0 : -1\"\n [class]=\"stepHeaderClasses()\"\n [class.pointer-events-none]=\"!headerInteractive() || !step.isNavigable()\"\n [class.opacity-60]=\"!step.isNavigable()\"\n [id]=\"_getStepLabelId(i)\"\n [attr.aria-controls]=\"_getStepContentId(i)\"\n [attr.aria-selected]=\"selectedIndexValue() === i\"\n [attr.aria-current]=\"selectedIndexValue() === i ? 'step' : null\"\n [attr.aria-disabled]=\"!step.isNavigable() || null\"\n [attr.aria-invalid]=\"shouldRenderError(step) || null\"\n [attr.aria-label]=\"step.ariaLabel || null\"\n [attr.aria-labelledby]=\"step.ariaLabelledby || null\"\n (click)=\"onHeaderClick(step, i)\"\n >\n <!-- Indicator (number / icon / dot) -->\n <span [class]=\"getIndicatorClass(step, i)\">\n @let indicatorType = getIndicatorType(step);\n @let customIcon = resolveIconTemplate(step, indicatorType);\n\n @if (customIcon) {\n <span [class]=\"stepIconSlotClasses()\">\n <ng-container\n [ngTemplateOutlet]=\"customIcon\"\n [ngTemplateOutletContext]=\"iconContext(i)\"\n />\n </span>\n } @else {\n @switch (indicatorType) {\n @case ('number') {\n <span [class]=\"stepNumberClasses()\">{{ i + 1 }}</span>\n }\n @case ('done') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </span>\n }\n @case ('edit') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M13.586 3.586a2 2 0 1 1 2.828 2.828l-.793.793-2.828-2.828.793-.793Zm-2.207 2.207 2.828 2.828-7.07 7.071a2 2 0 0 1-.83.5l-3.086.926a.5.5 0 0 1-.62-.621l.926-3.086a2 2 0 0 1 .5-.83l7.352-7.788Z\"\n />\n </svg>\n </span>\n }\n @case ('error') {\n <span [class]=\"stepIconSlotClasses()\">\n <svg\n class=\"size-3/5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm.75-11.25a.75.75 0 0 0-1.5 0v4.5a.75.75 0 0 0 1.5 0v-4.5ZM10 15a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </span>\n }\n }\n }\n </span>\n\n <!-- Label + description -->\n <span [class]=\"stepLabelWrapperClasses()\">\n <span [class]=\"getLabelClass(step, i)\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n @if (step.optional && !step.completed) {\n <span [class]=\"stepOptionalHintClasses()\">(Optional)</span>\n }\n </span>\n\n @if (step.description() && variant() === 'default') {\n <span [class]=\"stepDescriptionClasses()\">{{ step.description() }}</span>\n }\n\n @if (shouldRenderError(step) && step.errorMessage) {\n <span class=\"sr-only\">{{ step.errorMessage }}</span>\n }\n </span>\n </button>\n\n <!-- Connector (between step i and i+1) -->\n @if (!last) {\n <span\n [class]=\"getConnectorClass(step, i)\"\n aria-hidden=\"true\"\n ></span>\n }\n\n <!-- Vertical: panel is rendered inline under each selected step -->\n @if (orientationValue() === 'vertical' && selectedIndexValue() === i && step.content) {\n <div\n role=\"tabpanel\"\n [id]=\"_getStepContentId(i)\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [class]=\"stepPanelClasses()\"\n tabindex=\"0\"\n >\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n }\n </div>\n }\n</div>\n\n<!-- Horizontal: single panel rendered below the strip -->\n@if (orientationValue() === 'horizontal') {\n @let activeStep = twSteps[selectedIndexValue()];\n @if (activeStep && activeStep.content) {\n <div\n role=\"tabpanel\"\n [id]=\"_getStepContentId(selectedIndexValue())\"\n [attr.aria-labelledby]=\"_getStepLabelId(selectedIndexValue())\"\n [class]=\"stepPanelClasses()\"\n [animate.enter]=\"panelAnimationClass()\"\n tabindex=\"0\"\n >\n <ng-container [ngTemplateOutlet]=\"activeStep.content\" />\n </div>\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}