@cdevhub/ngx-tw 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +264 -49
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs +11 -7
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-alert.mjs +43 -29
- package/fesm2022/cdevhub-ngx-tw-alert.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs +103 -0
- package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs +56 -31
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-badge.mjs +61 -35
- package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +154 -93
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-button.mjs +24 -15
- package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +3 -3
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs +408 -215
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-card.mjs +33 -24
- package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs +144 -79
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +99 -47
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs +34 -20
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +46 -29
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs +195 -110
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +140 -73
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-core.mjs +16 -11
- package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +393 -149
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +305 -150
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs +56 -43
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +51 -33
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-file-upload.mjs +905 -0
- package/fesm2022/cdevhub-ngx-tw-file-upload.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +49 -26
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs +133 -74
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs +2 -2
- package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-icon.mjs +28 -17
- package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-input.mjs +37 -21
- package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-item.mjs +33 -24
- package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-menu.mjs +63 -48
- package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-number-input.mjs +622 -0
- package/fesm2022/cdevhub-ngx-tw-number-input.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs +137 -71
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-popover.mjs +101 -46
- package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +57 -30
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-radio.mjs +108 -57
- package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +46 -26
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-select.mjs +217 -122
- package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-separator.mjs +21 -12
- package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs +58 -44
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-skeleton.mjs +25 -14
- package/fesm2022/cdevhub-ngx-tw-skeleton.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-slider.mjs +155 -79
- package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-sort.mjs +44 -25
- package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-spinner.mjs +29 -16
- package/fesm2022/cdevhub-ngx-tw-spinner.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-split.mjs +72 -42
- package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-stat.mjs +107 -64
- package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs +113 -47
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-switch.mjs +61 -32
- package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +88 -42
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-table.mjs +266 -118
- package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs +101 -51
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +798 -0
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs +11 -7
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-theme.mjs +22 -14
- package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +243 -95
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs +149 -82
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-toast.mjs +89 -55
- package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +50 -28
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-transfer.mjs +1129 -0
- package/fesm2022/cdevhub-ngx-tw-transfer.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-tree.mjs +554 -0
- package/fesm2022/cdevhub-ngx-tw-tree.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw.mjs +7 -0
- package/fesm2022/cdevhub-ngx-tw.mjs.map +1 -1
- package/package.json +45 -20
- package/theme/index.css +10 -2
- package/types/cdevhub-ngx-tw-aspect-ratio.d.ts +40 -0
- package/types/cdevhub-ngx-tw-calendar.d.ts +39 -8
- package/types/cdevhub-ngx-tw-command-palette.d.ts +7 -0
- package/types/cdevhub-ngx-tw-date-picker.d.ts +36 -10
- package/types/cdevhub-ngx-tw-file-upload.d.ts +250 -0
- package/types/cdevhub-ngx-tw-form-field.d.ts +22 -3
- package/types/cdevhub-ngx-tw-icon-lucide.d.ts +21 -3
- package/types/cdevhub-ngx-tw-number-input.d.ts +130 -0
- package/types/cdevhub-ngx-tw-popover.d.ts +8 -0
- package/types/cdevhub-ngx-tw-stepper.d.ts +30 -2
- package/types/cdevhub-ngx-tw-tab-nav.d.ts +8 -0
- package/types/cdevhub-ngx-tw-table.d.ts +30 -1
- package/types/cdevhub-ngx-tw-tabs.d.ts +8 -0
- package/types/cdevhub-ngx-tw-tags-input.d.ts +217 -0
- package/types/cdevhub-ngx-tw-time-picker.d.ts +31 -6
- package/types/cdevhub-ngx-tw-transfer.d.ts +330 -0
- package/types/cdevhub-ngx-tw-tree.d.ts +189 -0
- 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,
|
|
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: "
|
|
207
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
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: "
|
|
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: "
|
|
222
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
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: "
|
|
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('',
|
|
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,
|
|
237
|
-
|
|
238
|
-
static
|
|
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: "
|
|
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',
|
|
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',
|
|
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',
|
|
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,
|
|
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,
|
|
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',
|
|
277
|
-
|
|
278
|
-
|
|
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
|
-
}),
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
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
|
-
},
|
|
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: "
|
|
401
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
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: "
|
|
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<!-- 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)=\"
|
|
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: "
|
|
412
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
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: "
|
|
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: "
|
|
423
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
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: "
|
|
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<!-- 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)=\"_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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"}
|