ng-hub-ui-stepper 21.2.0 → 22.2.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 CHANGED
@@ -1,26 +1,46 @@
1
1
  # ng-hub-ui-stepper
2
2
 
3
+ [Español](./README.es.md) | **English**
4
+
3
5
  [![npm version](https://img.shields.io/npm/v/ng-hub-ui-stepper.svg)](https://www.npmjs.com/package/ng-hub-ui-stepper)
4
6
  [![license](https://img.shields.io/npm/l/ng-hub-ui-stepper.svg)](https://github.com/carlos-morcillo/ng-hub-ui-stepper/blob/main/LICENSE)
5
7
 
6
8
  A flexible, customizable, and accessible stepper component for Angular 21+. Perfect for multi-step forms, wizards, and guided user experiences with a focus on developer experience and modern standards.
7
9
 
8
10
  > [!IMPORTANT]
9
- > This version (21.2.0) is built for **Angular 21** and uses the new **Signals** architecture.
11
+ > This version (21.2.1) is built for **Angular 21** and uses the new **Signals** architecture.
12
+
13
+ ## Documentation and Live Examples
14
+
15
+ This package is part of [Hub UI](https://hubui.dev/), a collection of Angular component libraries for standalone apps.
16
+
17
+ - Docs: https://hubui.dev/stepper/overview/
18
+ - Live examples: https://hubui.dev/stepper/examples/
19
+ - Hub UI: https://hubui.dev/
10
20
 
11
21
  ## 🧩 Library Family `ng-hub-ui`
12
22
 
13
23
  This library is part of the **ng-hub-ui** ecosystem:
14
24
 
15
- - [**ng-hub-ui-accordion**](https://www.npmjs.com/package/ng-hub-ui-accordion)
25
+ - [**ng-hub-ui-accordion**](https://www.npmjs.com/package/ng-hub-ui-accordion) (deprecated — use ng-hub-ui-panels)
26
+ - [**ng-hub-ui-action-sheet**](https://www.npmjs.com/package/ng-hub-ui-action-sheet)
16
27
  - [**ng-hub-ui-avatar**](https://www.npmjs.com/package/ng-hub-ui-avatar)
17
28
  - [**ng-hub-ui-board**](https://www.npmjs.com/package/ng-hub-ui-board)
18
29
  - [**ng-hub-ui-breadcrumbs**](https://www.npmjs.com/package/ng-hub-ui-breadcrumbs)
19
30
  - [**ng-hub-ui-calendar**](https://www.npmjs.com/package/ng-hub-ui-calendar)
31
+ - [**ng-hub-ui-dropdown**](https://www.npmjs.com/package/ng-hub-ui-dropdown)
32
+ - [**ng-hub-ui-ds**](https://www.npmjs.com/package/ng-hub-ui-ds)
33
+ - [**ng-hub-ui-forms**](https://www.npmjs.com/package/ng-hub-ui-forms)
34
+ - [**ng-hub-ui-history**](https://www.npmjs.com/package/ng-hub-ui-history)
35
+ - [**ng-hub-ui-milestones**](https://www.npmjs.com/package/ng-hub-ui-milestones)
20
36
  - [**ng-hub-ui-modal**](https://www.npmjs.com/package/ng-hub-ui-modal)
37
+ - [**ng-hub-ui-nav**](https://www.npmjs.com/package/ng-hub-ui-nav)
21
38
  - [**ng-hub-ui-paginable**](https://www.npmjs.com/package/ng-hub-ui-paginable)
39
+ - [**ng-hub-ui-panels**](https://www.npmjs.com/package/ng-hub-ui-panels)
22
40
  - [**ng-hub-ui-portal**](https://www.npmjs.com/package/ng-hub-ui-portal)
23
- - [**ng-hub-ui-stepper**](https://www.npmjs.com/package/ng-hub-ui-stepper)
41
+ - [**ng-hub-ui-skeleton**](https://www.npmjs.com/package/ng-hub-ui-skeleton)
42
+ - [**ng-hub-ui-sortable**](https://www.npmjs.com/package/ng-hub-ui-sortable)
43
+ - [**ng-hub-ui-stepper**](https://www.npmjs.com/package/ng-hub-ui-stepper) ← You are here
24
44
  - [**ng-hub-ui-utils**](https://www.npmjs.com/package/ng-hub-ui-utils)
25
45
 
26
46
  ## Table of Contents
@@ -154,6 +174,7 @@ Project your own buttons to override the default footer.
154
174
  | `backLabel` | `string` | `'Back'` | Label for the back button. |
155
175
  | `continueLabel` | `string` | `'Continue'` | Label for the continue button. |
156
176
  | `submitLabel` | `string` | `'Submit'` | Label for the submit button. |
177
+ | `variant` | `string` | `'primary'` | Semantic accent for the active step pill and the next / submit controls. Built-in values: `primary`, `success`, `danger`, `warning`, `info`. Any other string is also accepted and resolves through `--hub-sys-color-<variant>`. |
157
178
  | `options` | `StepperOptions` | `{}` | Visual and layout configuration. |
158
179
 
159
180
  | Output | Type | Description |
@@ -198,6 +219,33 @@ Customize the component using CSS variables. For a complete list of available to
198
219
  }
199
220
  ```
200
221
 
222
+ ### Semantic accent
223
+
224
+ The `--hub-stepper-accent` token drives the active step pill and the next / submit controls. It defaults to `var(--hub-sys-color-primary)`. The easiest way to set it is the `variant` input (see [API Reference](#steppercomponent)), but you can also override the token directly:
225
+
226
+ ```css
227
+ .my-stepper {
228
+ --hub-stepper-accent: var(--hub-sys-color-success);
229
+ }
230
+ ```
231
+
232
+ ### Sass mixin
233
+
234
+ For full theming in a single call, the package ships a `hub-stepper-theme()` Sass mixin. Every parameter is optional and defaults to `null`, so only the ones you pass are emitted as `--hub-stepper-*` overrides:
235
+
236
+ ```scss
237
+ @use 'ng-hub-ui-stepper/styles/mixins/stepper-theme' as *;
238
+
239
+ .checkout-stepper {
240
+ @include hub-stepper-theme(
241
+ $accent: var(--hub-sys-color-success),
242
+ $gap: 1.5rem,
243
+ $nav-link-active-color: #fff,
244
+ $sidebar-width: 220px
245
+ );
246
+ }
247
+ ```
248
+
201
249
  ## Contributing
202
250
 
203
251
  We welcome contributions! Please follow our [Commit Guidelines](https://github.com/carlos-morcillo/ng-hub-ui/blob/main/CONTRIBUTING.md).
@@ -217,4 +265,3 @@ If you find this project helpful, consider supporting its development:
217
265
  ## License
218
266
 
219
267
  This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
220
-
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, computed, Directive, signal, input, viewChild, ChangeDetectionStrategy, Component, ChangeDetectorRef, ElementRef, output, contentChildren, effect, contentChild, TemplateRef, NgModule, Injectable } from '@angular/core';
3
- import { NgTemplateOutlet } from '@angular/common';
3
+ import { NgTemplateOutlet, DOCUMENT } from '@angular/common';
4
4
  import { TranslatePipe, UcfirstPipe, HUB_TRANSLATION_CONFIG, HubTranslationService } from 'ng-hub-ui-utils';
5
5
 
6
6
  /**
@@ -14,11 +14,12 @@ class NextButtonDirective {
14
14
  const nextIndex = this.stepper.currentIndex() + 1;
15
15
  const nextStep = this.stepper.steps()?.[nextIndex];
16
16
  return !nextStep || nextStep.disabled;
17
- }, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
18
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NextButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
19
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: NextButtonDirective, isStandalone: true, selector: "button[nextButton], button[continueButton]", host: { listeners: { "click": "stepper.goToNext()" }, properties: { "disabled": "disabled()" }, classAttribute: "stepper__button stepper__button--next" }, ngImport: i0 });
17
+ }, /* @ts-ignore */
18
+ ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
19
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: NextButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
20
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.1", type: NextButtonDirective, isStandalone: true, selector: "button[nextButton], button[continueButton]", host: { listeners: { "click": "stepper.goToNext()" }, properties: { "disabled": "disabled()" }, classAttribute: "stepper__button stepper__button--next" }, ngImport: i0 });
20
21
  }
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NextButtonDirective, decorators: [{
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: NextButtonDirective, decorators: [{
22
23
  type: Directive,
23
24
  args: [{
24
25
  selector: 'button[nextButton], button[continueButton]',
@@ -42,11 +43,12 @@ class PreviousButtonDirective {
42
43
  const prevIndex = this.stepper.currentIndex() - 1;
43
44
  const prevStep = this.stepper.steps()?.[prevIndex];
44
45
  return !prevStep || prevStep.disabled;
45
- }, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
46
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: PreviousButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
47
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: PreviousButtonDirective, isStandalone: true, selector: "button[previousButton], button[backButton]", host: { listeners: { "click": "stepper.goToPrevious()" }, properties: { "disabled": "disabled()" }, classAttribute: "stepper__button stepper__button--back" }, ngImport: i0 });
46
+ }, /* @ts-ignore */
47
+ ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
48
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: PreviousButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
49
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.1", type: PreviousButtonDirective, isStandalone: true, selector: "button[previousButton], button[backButton]", host: { listeners: { "click": "stepper.goToPrevious()" }, properties: { "disabled": "disabled()" }, classAttribute: "stepper__button stepper__button--back" }, ngImport: i0 });
48
50
  }
49
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: PreviousButtonDirective, decorators: [{
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: PreviousButtonDirective, decorators: [{
50
52
  type: Directive,
51
53
  args: [{
52
54
  selector: 'button[previousButton], button[backButton]',
@@ -72,11 +74,14 @@ class StepComponent {
72
74
  * Zero-based position of this step within the parent stepper.
73
75
  * Assigned automatically by `StepperComponent` — do not set this manually.
74
76
  */
75
- index = signal(0, ...(ngDevMode ? [{ debugName: "index" }] : []));
77
+ index = signal(0, /* @ts-ignore */
78
+ ...(ngDevMode ? [{ debugName: "index" }] : /* istanbul ignore next */ []));
76
79
  /** Optional display title rendered in the step navigation. */
77
- title = input(...(ngDevMode ? [undefined, { debugName: "title" }] : []));
80
+ title = input(/* @ts-ignore */
81
+ ...(ngDevMode ? [undefined, { debugName: "title" }] : /* istanbul ignore next */ []));
78
82
  /** Whether the step is disabled and cannot be navigated to. */
79
- disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
83
+ disabled = input(false, /* @ts-ignore */
84
+ ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
80
85
  /** Template reference used by the parent stepper to render step content. */
81
86
  innerTemplate = viewChild.required('innerTemplate');
82
87
  /** Returns the animation state key consumed by content transitions. */
@@ -97,10 +102,10 @@ class StepComponent {
97
102
  isAccessible() {
98
103
  return !this.disabled;
99
104
  }
100
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: StepComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
101
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.2", type: StepComponent, isStandalone: true, selector: "hub-step, hub-ui-step, ng80-step", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "innerTemplate", first: true, predicate: ["innerTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #innerTemplate>\n\t<div\n\t\tclass=\"step__content\"\n\t\t[attr.data-step-index]=\"index()\"\n\t\t[attr.aria-label]=\"title()\"\n\t>\n\t\t<ng-content></ng-content>\n\t</div>\n</ng-template>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
105
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StepComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
106
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.1", type: StepComponent, isStandalone: true, selector: "hub-step, hub-ui-step, ng80-step", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "innerTemplate", first: true, predicate: ["innerTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #innerTemplate>\n\t<div\n\t\tclass=\"step__content\"\n\t\t[attr.data-step-index]=\"index()\"\n\t\t[attr.aria-label]=\"title()\"\n\t>\n\t\t<ng-content></ng-content>\n\t</div>\n</ng-template>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
102
107
  }
103
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: StepComponent, decorators: [{
108
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StepComponent, decorators: [{
104
109
  type: Component,
105
110
  args: [{ selector: 'hub-step, hub-ui-step, ng80-step', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #innerTemplate>\n\t<div\n\t\tclass=\"step__content\"\n\t\t[attr.data-step-index]=\"index()\"\n\t\t[attr.aria-label]=\"title()\"\n\t>\n\t\t<ng-content></ng-content>\n\t</div>\n</ng-template>\n" }]
106
111
  }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], innerTemplate: [{ type: i0.ViewChild, args: ['innerTemplate', { isSignal: true }] }] } });
@@ -114,10 +119,10 @@ class StepperNavDirective {
114
119
  constructor(template) {
115
120
  this.template = template;
116
121
  }
117
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: StepperNavDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
118
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: StepperNavDirective, isStandalone: true, selector: "[hubStepperNav], [stepperNav]", ngImport: i0 });
122
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StepperNavDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
123
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.1", type: StepperNavDirective, isStandalone: true, selector: "[hubStepperNav], [stepperNav]", ngImport: i0 });
119
124
  }
120
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: StepperNavDirective, decorators: [{
125
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StepperNavDirective, decorators: [{
121
126
  type: Directive,
122
127
  args: [{
123
128
  selector: '[hubStepperNav], [stepperNav]'
@@ -131,11 +136,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImpor
131
136
  class SubmitButtonDirective {
132
137
  stepper = inject(StepperComponent);
133
138
  /** Reflects whether completion is currently allowed. */
134
- disabled = computed(() => this.stepper.currentStep?.disabled() ?? false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
135
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SubmitButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
136
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: SubmitButtonDirective, isStandalone: true, selector: "button[submitButton]", host: { listeners: { "click": "stepper.complete()" }, properties: { "disabled": "disabled()" }, classAttribute: "stepper__button stepper__button--submit" }, ngImport: i0 });
139
+ disabled = computed(() => this.stepper.currentStep?.disabled() ?? false, /* @ts-ignore */
140
+ ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
141
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: SubmitButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
142
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.1", type: SubmitButtonDirective, isStandalone: true, selector: "button[submitButton]", host: { listeners: { "click": "stepper.complete()" }, properties: { "disabled": "disabled()" }, classAttribute: "stepper__button stepper__button--submit" }, ngImport: i0 });
137
143
  }
138
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SubmitButtonDirective, decorators: [{
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: SubmitButtonDirective, decorators: [{
139
145
  type: Directive,
140
146
  args: [{
141
147
  selector: 'button[submitButton]',
@@ -169,6 +175,8 @@ var StepperLayout;
169
175
  * Renders and controls a multi-step workflow.
170
176
  * It coordinates navigation, state transitions and projected templates for steps and controls.
171
177
  */
178
+ /** Variants with exact design-system token coverage via the SCSS `@each` loop. */
179
+ const STEPPER_BUILT_IN_VARIANTS = new Set(['primary', 'success', 'danger', 'warning', 'info']);
172
180
  class StepperComponent {
173
181
  #cdr = inject(ChangeDetectorRef);
174
182
  #hostRef = inject((ElementRef));
@@ -176,17 +184,40 @@ class StepperComponent {
176
184
  /** Exposes layout enum values to the template. */
177
185
  StepperLayout = StepperLayout;
178
186
  /** Stores the index of the currently active step. */
179
- currentIndex = signal(0, ...(ngDevMode ? [{ debugName: "currentIndex" }] : []));
187
+ currentIndex = signal(0, /* @ts-ignore */
188
+ ...(ngDevMode ? [{ debugName: "currentIndex" }] : /* istanbul ignore next */ []));
180
189
  /** Stores whether content transition animation is currently running. */
181
- contentAnimating = signal(false, ...(ngDevMode ? [{ debugName: "contentAnimating" }] : []));
190
+ contentAnimating = signal(false, /* @ts-ignore */
191
+ ...(ngDevMode ? [{ debugName: "contentAnimating" }] : /* istanbul ignore next */ []));
182
192
  /** Stores transition direction used by the CSS animation classes. */
183
- animationDirection = signal(StepperAnimationDirection.Forward, ...(ngDevMode ? [{ debugName: "animationDirection" }] : []));
193
+ animationDirection = signal(StepperAnimationDirection.Forward, /* @ts-ignore */
194
+ ...(ngDevMode ? [{ debugName: "animationDirection" }] : /* istanbul ignore next */ []));
195
+ /**
196
+ * Semantic accent of the stepper: `'primary'` · `'success'` · `'danger'` ·
197
+ * `'warning'` · `'info'`, or any custom string (read as `--hub-sys-color-<variant>`).
198
+ * Re-bases `--hub-stepper-accent`, which drives the active step pill and the
199
+ * next / submit controls. Defaults to primary.
200
+ */
201
+ variant = input(/* @ts-ignore */
202
+ ...(ngDevMode ? [undefined, { debugName: "variant" }] : /* istanbul ignore next */ []));
203
+ /**
204
+ * Inline accent for custom (non-built-in) variants — the built-in five are
205
+ * resolved by the SCSS `@each` loop, so this returns `null` for them.
206
+ */
207
+ customAccent = computed(() => {
208
+ const v = this.variant();
209
+ return v && !STEPPER_BUILT_IN_VARIANTS.has(v) ? `var(--hub-sys-color-${v})` : null;
210
+ }, /* @ts-ignore */
211
+ ...(ngDevMode ? [{ debugName: "customAccent" }] : /* istanbul ignore next */ []));
184
212
  /** Optional custom label for the back button. */
185
- backLabel = input(null, ...(ngDevMode ? [{ debugName: "backLabel" }] : []));
213
+ backLabel = input(null, /* @ts-ignore */
214
+ ...(ngDevMode ? [{ debugName: "backLabel" }] : /* istanbul ignore next */ []));
186
215
  /** Optional custom label for the continue button. */
187
- continueLabel = input(null, ...(ngDevMode ? [{ debugName: "continueLabel" }] : []));
216
+ continueLabel = input(null, /* @ts-ignore */
217
+ ...(ngDevMode ? [{ debugName: "continueLabel" }] : /* istanbul ignore next */ []));
188
218
  /** Optional custom label for the submit button. */
189
- submitLabel = input(null, ...(ngDevMode ? [{ debugName: "submitLabel" }] : []));
219
+ submitLabel = input(null, /* @ts-ignore */
220
+ ...(ngDevMode ? [{ debugName: "submitLabel" }] : /* istanbul ignore next */ []));
190
221
  /** Emits once the user completes the last step. */
191
222
  completed = output();
192
223
  /** Emits the new index when moving to the previous step. */
@@ -194,23 +225,29 @@ class StepperComponent {
194
225
  /** Emits the new index when moving to the next step. */
195
226
  nextStep = output();
196
227
  /** Content-projected step definitions. */
197
- steps = contentChildren(StepComponent, ...(ngDevMode ? [{ debugName: "steps" }] : []));
228
+ steps = contentChildren(StepComponent, /* @ts-ignore */
229
+ ...(ngDevMode ? [{ debugName: "steps" }] : /* istanbul ignore next */ []));
198
230
  /** Automatically assigns each step its zero-based position when the steps collection changes. */
199
231
  assignStepIndexes = effect(() => {
200
232
  this.steps().forEach((step, i) => step.index.set(i));
201
- }, ...(ngDevMode ? [{ debugName: "assignStepIndexes" }] : []));
233
+ }, /* @ts-ignore */
234
+ ...(ngDevMode ? [{ debugName: "assignStepIndexes" }] : /* istanbul ignore next */ []));
202
235
  /** Optional content-projected template for custom navigation. */
203
- stepperNavTpt = contentChild(StepperNavDirective, { ...(ngDevMode ? { debugName: "stepperNavTpt" } : {}), read: TemplateRef });
236
+ stepperNavTpt = contentChild(StepperNavDirective, { ...(ngDevMode ? { debugName: "stepperNavTpt" } : /* istanbul ignore next */ {}), read: TemplateRef });
204
237
  /** Optional custom projected previous button. */
205
- previousButton = contentChild(PreviousButtonDirective, ...(ngDevMode ? [{ debugName: "previousButton" }] : []));
238
+ previousButton = contentChild(PreviousButtonDirective, /* @ts-ignore */
239
+ ...(ngDevMode ? [{ debugName: "previousButton" }] : /* istanbul ignore next */ []));
206
240
  /** Optional custom projected next button. */
207
- nextButton = contentChild(NextButtonDirective, ...(ngDevMode ? [{ debugName: "nextButton" }] : []));
241
+ nextButton = contentChild(NextButtonDirective, /* @ts-ignore */
242
+ ...(ngDevMode ? [{ debugName: "nextButton" }] : /* istanbul ignore next */ []));
208
243
  /** Optional custom projected submit button. */
209
- submitButton = contentChild(SubmitButtonDirective, ...(ngDevMode ? [{ debugName: "submitButton" }] : []));
244
+ submitButton = contentChild(SubmitButtonDirective, /* @ts-ignore */
245
+ ...(ngDevMode ? [{ debugName: "submitButton" }] : /* istanbul ignore next */ []));
210
246
  /**
211
247
  * Optional visual and layout configuration for the stepper container.
212
248
  */
213
- options = input({}, ...(ngDevMode ? [{ debugName: "options" }] : []));
249
+ options = input({}, /* @ts-ignore */
250
+ ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
214
251
  /**
215
252
  * Returns the active layout mode.
216
253
  *
@@ -363,18 +400,20 @@ class StepperComponent {
363
400
  this.contentAnimating.set(false);
364
401
  this.#cdr.detectChanges();
365
402
  }
366
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: StepperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
367
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: StepperComponent, isStandalone: true, selector: "hub-stepper, hub-ui-stepper, ng80-stepper", inputs: { backLabel: { classPropertyName: "backLabel", publicName: "backLabel", isSignal: true, isRequired: false, transformFunction: null }, continueLabel: { classPropertyName: "continueLabel", publicName: "continueLabel", isSignal: true, isRequired: false, transformFunction: null }, submitLabel: { classPropertyName: "submitLabel", publicName: "submitLabel", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { completed: "completed", previousStep: "previousStep", nextStep: "nextStep" }, host: { properties: { "class.stepper--layout-vertical": "layout() === StepperLayout.Vertical", "class.stepper--layout-sidebar": "layout() === StepperLayout.Sidebar", "class.stepper--rtl": "isRtl()" }, classAttribute: "stepper" }, queries: [{ propertyName: "steps", predicate: StepComponent, isSignal: true }, { propertyName: "stepperNavTpt", first: true, predicate: StepperNavDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "previousButton", first: true, predicate: PreviousButtonDirective, descendants: true, isSignal: true }, { propertyName: "nextButton", first: true, predicate: NextButtonDirective, descendants: true, isSignal: true }, { propertyName: "submitButton", first: true, predicate: SubmitButtonDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<!--begin::Nav-->\n<nav class=\"stepper__nav\">\n <ng-container\n [ngTemplateOutlet]=\"stepperNavTpt() || defaultNavTpt\"\n [ngTemplateOutletContext]=\"{ steps: steps(), currentIndex: currentIndex() }\"\n ></ng-container>\n</nav>\n<!--end::Nav-->\n\n<!--begin::Content-->\n<div\n class=\"stepper__content\"\n [class.stepper__content--animated]=\"hasAnimationClass()\"\n [class.stepper__content--animating]=\"contentAnimating()\"\n [class.stepper__content--forward]=\"isForwardAnimation()\"\n [class.stepper__content--backward]=\"isBackwardAnimation()\"\n>\n <div class=\"stepper__content-panel\" (animationend)=\"onContentAnimationEnd($event)\">\n <ng-container\n [ngTemplateOutlet]=\"currentStep?.innerTemplate()\"\n ></ng-container>\n </div>\n</div>\n<!--end::Content-->\n\n<!--begin::Controls-->\n<div class=\"stepper__controls\">\n @if (currentIndex() > 0) {\n <ng-content select=\"button[previousButton]\"></ng-content>\n @if (!previousButton()) {\n <button\n class=\"stepper__button stepper__button--back\"\n (click)=\"goToPrevious()\"\n [disabled]=\"!canNavigateTo(currentIndex() - 1)\"\n >\n @if (isRtl()) {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8594;</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8592;</span>\n }\n {{ backLabel() ?? ('BACK' | translate | ucfirst) }}\n </button>\n }\n }\n\n @if (currentIndex() < steps().length - 1) {\n <ng-content select=\"button[nextButton]\"></ng-content>\n @if (!nextButton()) {\n <button\n class=\"stepper__button stepper__button--next\"\n (click)=\"goToNext()\"\n [disabled]=\"!canNavigateTo(currentIndex() + 1)\"\n >\n {{ continueLabel() ?? ('CONTINUE' | translate | ucfirst) }}\n @if (isRtl()) {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8592;</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8594;</span>\n }\n </button>\n }\n }\n\n @if (currentIndex() === steps().length - 1) {\n <ng-content select=\"button[submitButton]\"></ng-content>\n @if (!submitButton()) {\n <button\n class=\"stepper__button stepper__button--submit\"\n (click)=\"complete()\"\n [disabled]=\"!isValidStepIndex(currentIndex())\"\n >\n {{ submitLabel() ?? ('SUBMIT' | translate | ucfirst) }}\n </button>\n }\n }\n</div>\n<!--end::Controls-->\n\n<!-- begin:default-nav -->\n<ng-template #defaultNavTpt let-steps=\"steps\" let-currentIndex=\"currentIndex\">\n <ul class=\"stepper__nav-list\">\n @for (step of steps; track $index; let i = $index) {\n <li class=\"stepper__nav-item\">\n <ng-container\n\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\tdefaultNavTriggerTpt\n\t\t\t\t\"\n\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\ttitle: step.title(),\n\t\t\t\t\tindex: i,\n\t\t\t\t\tisCurrent: currentIndex === i,\n\t\t\t\t\tisCompleted: i < currentIndex\n\t\t\t\t}\"\n ></ng-container>\n </li>\n }\n </ul>\n</ng-template>\n<!-- end:default-nav -->\n\n<!-- begin:default-nav-trigger -->\n<ng-template\n #defaultNavTriggerTpt\n let-title=\"title\"\n let-index=\"index\"\n let-isCurrent=\"isCurrent\"\n let-isCompleted=\"isCompleted\"\n >\n <button\n class=\"stepper__nav-trigger\"\n [class.stepper__nav-trigger--current]=\"isCurrent\"\n [class.stepper__nav-trigger--completed]=\"isCompleted\"\n [disabled]=\"!canNavigateTo(index)\"\n (click)=\"goTo(index)\"\n >\n @if (title) {\n <span class=\"stepper__nav-title\">{{ title }}</span>\n } @else {\n <span class=\"stepper__nav-title\">Step {{ index + 1 }}</span>\n }\n </button>\n</ng-template>\n<!-- end:default-nav-trigger -->\n", styles: [":host{--hub-stepper-primary-color: var(--hub-sys-color-primary, #009ef7);--hub-stepper-background-color: var(--hub-sys-surface-elevated, #f3f6f9);--hub-stepper-text-color: var(--hub-sys-text-primary, #181c32);--hub-stepper-border-color: var(--hub-sys-border-color-default, #d8dde6);--hub-stepper-surface-color: var(--hub-sys-surface-page, #ffffff);--hub-stepper-nav-bg: var(--hub-sys-surface-page, transparent);--hub-stepper-nav-padding: 0;--hub-stepper-nav-border-width: 0;--hub-stepper-nav-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-stepper-nav-link-color: var(--hub-sys-text-primary, #495057);--hub-stepper-nav-link-hover-color: var(--hub-sys-link-hover-color, #0d6efd);--hub-stepper-nav-link-hover-bg: var(--hub-sys-state-hover-bg, #f8f9fa);--hub-stepper-nav-link-active-color: var(--hub-ref-color-white, #ffffff);--hub-stepper-nav-link-active-bg: var(--hub-sys-color-primary, #0d6efd);--hub-stepper-nav-link-active-border-color: var(--hub-sys-color-primary, #0d6efd);--hub-stepper-nav-link-disabled-color: var(--hub-sys-text-muted, #adb5bd);--hub-stepper-gap: var(--hub-ref-space-3, 1rem);--hub-stepper-nav-gap: var(--hub-ref-space-1, .25rem);--hub-stepper-nav-trigger-gap: var(--hub-ref-space-1, .25rem);--hub-stepper-nav-trigger-padding-y: var(--hub-ref-space-2, .5rem);--hub-stepper-nav-trigger-padding-x: var(--hub-ref-space-3, .75rem);--hub-stepper-nav-trigger-font-size: var(--hub-ref-font-size-sm, .875rem);--hub-stepper-nav-trigger-line-height: var(--hub-ref-line-height-sm, 1.2);--hub-stepper-controls-justify: flex-end;--hub-stepper-controls-gap: var(--hub-ref-space-2, .5rem);--hub-stepper-control-padding-y: .375rem;--hub-stepper-control-padding-x: var(--hub-ref-space-3, .75rem);--hub-stepper-control-font-size: var(--hub-ref-font-size-sm, .875rem);--hub-stepper-control-line-height: var(--hub-ref-line-height-sm, 1.25);--hub-stepper-disabled-opacity: var(--hub-sys-opacity-50, .5);--hub-stepper-sidebar-min-width: 160px;--hub-stepper-sidebar-ideal-width: 20vw;--hub-stepper-sidebar-max-width: 240px;--hub-stepper-sidebar-width: clamp( var(--hub-stepper-sidebar-min-width), var(--hub-stepper-sidebar-ideal-width), var(--hub-stepper-sidebar-max-width) );--hub-stepper-content-padding: 0;--hub-stepper-content-border-width: 0;--hub-stepper-animation-duration: var(--hub-sys-transition-duration-base, .26s);--hub-stepper-animation-easing: var(--hub-sys-transition-timing-function-base, ease);--hub-stepper-animation-distance: var(--hub-ref-space-4, 18px);display:grid;grid-template-columns:1fr;grid-template-areas:\"nav\" \"content\" \"controls\";grid-template-rows:auto 1fr auto;gap:var(--hub-stepper-gap);width:100%}:host.stepper--layout-vertical{grid-template-columns:1fr;grid-template-areas:\"nav\" \"content\" \"controls\";grid-template-rows:auto 1fr auto}:host.stepper--layout-sidebar{grid-template-columns:var(--hub-stepper-sidebar-width) minmax(0,1fr);grid-template-areas:\"nav content\" \"nav controls\";grid-template-rows:1fr auto;align-items:stretch}.stepper__nav{grid-area:nav;background-color:var(--hub-stepper-nav-bg);border:var(--hub-stepper-nav-border-width) solid var(--hub-stepper-nav-border-color);border-radius:var(--hub-ref-radius-md, .5rem);padding:var(--hub-stepper-nav-padding);overflow-x:auto}.stepper__nav-list{list-style:none;display:flex;gap:var(--hub-stepper-nav-gap);padding:0;margin:0;min-width:max-content}.stepper__nav-item{flex:0 0 auto}.stepper__nav-trigger{display:inline-flex;align-items:center;gap:var(--hub-stepper-nav-trigger-gap);border:1px solid transparent;border-radius:999px;background-color:transparent;padding:var(--hub-stepper-nav-trigger-padding-y) var(--hub-stepper-nav-trigger-padding-x);cursor:pointer;color:var(--hub-stepper-nav-link-color);font-size:var(--hub-stepper-nav-trigger-font-size);line-height:var(--hub-stepper-nav-trigger-line-height)}.stepper__nav-trigger:hover:not(:disabled){color:var(--hub-stepper-nav-link-hover-color);background-color:var(--hub-stepper-nav-link-hover-bg)}.stepper__nav-trigger--current{border-color:var(--hub-stepper-nav-link-active-border-color);background-color:var(--hub-stepper-nav-link-active-bg);color:var(--hub-stepper-nav-link-active-color)}.stepper__nav-trigger--completed{color:var(--hub-stepper-nav-link-color)}.stepper__nav-trigger:disabled{color:var(--hub-stepper-nav-link-disabled-color);cursor:not-allowed}.stepper__content{grid-area:content;border:var(--hub-stepper-content-border-width) solid var(--hub-stepper-border-color);border-radius:var(--hub-ref-radius-md, .5rem);background-color:var(--hub-stepper-surface-color);padding:var(--hub-stepper-content-padding);min-width:0;position:relative;overflow:hidden}.stepper__content-panel{will-change:transform,opacity}.stepper__controls{grid-area:controls;display:flex;gap:var(--hub-stepper-controls-gap);align-items:center;justify-content:var(--hub-stepper-controls-justify)}.stepper__controls :is(button[previousButton],button[nextButton],button[submitButton],.stepper__button){border:1px solid var(--hub-stepper-border-color);border-radius:var(--hub-ref-radius-md, .375rem);padding:var(--hub-stepper-control-padding-y) var(--hub-stepper-control-padding-x);font-size:var(--hub-stepper-control-font-size);line-height:var(--hub-stepper-control-line-height);cursor:pointer;background-color:var(--hub-stepper-surface-color);color:var(--hub-stepper-text-color)}.stepper__button--back{background-color:var(--hub-stepper-background-color);color:var(--hub-stepper-text-color)}.stepper__button--next,.stepper__button--submit{background-color:var(--hub-stepper-primary-color);border-color:var(--hub-stepper-primary-color);color:var(--hub-ref-color-white, #ffffff)}.stepper__button:disabled{opacity:var(--hub-stepper-disabled-opacity);cursor:not-allowed}.stepper__controls button[nextButton],.stepper__controls button[submitButton]{background-color:var(--hub-stepper-primary-color);border-color:var(--hub-stepper-primary-color);color:var(--hub-ref-color-white, #ffffff)}.stepper__controls button[previousButton]{background-color:var(--hub-stepper-background-color)}.stepper__controls :is(button[previousButton],button[nextButton],button[submitButton]):disabled{opacity:var(--hub-stepper-disabled-opacity);cursor:not-allowed}:host.stepper--layout-sidebar .stepper__nav{height:100%;overflow-y:auto;overflow-x:hidden}:host.stepper--layout-sidebar .stepper__nav-list{flex-direction:column;align-items:stretch}:host.stepper--layout-sidebar .stepper__nav-item{width:100%}:host.stepper--layout-sidebar .stepper__nav-trigger{width:100%;justify-content:flex-start}:host.stepper--rtl{direction:rtl}:host.stepper--rtl .stepper__nav-list{flex-direction:row}:host.stepper--rtl.stepper--layout-sidebar .stepper__nav-list{flex-direction:column}:host.stepper--rtl.stepper--layout-sidebar .stepper__nav-trigger{justify-content:flex-end;text-align:right}.stepper__button-icon{display:inline-flex;align-items:center;line-height:1}.stepper__content--animated.stepper__content--animating .stepper__content-panel{animation-duration:var(--hub-stepper-animation-duration);animation-timing-function:var(--hub-stepper-animation-easing);animation-fill-mode:both}:host.stepper--animated.stepper--anim-fade .stepper__content--animating .stepper__content-panel{animation-name:stepper-fade-in}:host.stepper--animated:not(.stepper--anim-fade) .stepper__content--animating.stepper__content--forward .stepper__content-panel,:host.stepper--animated.stepper--anim-slide .stepper__content--animating.stepper__content--forward .stepper__content-panel{animation-name:stepper-slide-in-forward}:host.stepper--animated:not(.stepper--anim-fade) .stepper__content--animating.stepper__content--backward .stepper__content-panel,:host.stepper--animated.stepper--anim-slide .stepper__content--animating.stepper__content--backward .stepper__content-panel{animation-name:stepper-slide-in-backward}@keyframes stepper-fade-in{0%{opacity:0}to{opacity:1}}@keyframes stepper-slide-in-forward{0%{opacity:0;transform:translate(var(--hub-stepper-animation-distance))}to{opacity:1;transform:translate(0)}}@keyframes stepper-slide-in-backward{0%{opacity:0;transform:translate(calc(-1 * var(--hub-stepper-animation-distance)))}to{opacity:1;transform:translate(0)}}:host ::ng-deep button.stepper__button{border:1px solid var(--hub-stepper-border-color);border-radius:var(--hub-ref-radius-md, .375rem);padding:var(--hub-stepper-control-padding-y) var(--hub-stepper-control-padding-x);font-size:var(--hub-stepper-control-font-size);line-height:var(--hub-stepper-control-line-height);cursor:pointer;background-color:var(--hub-stepper-surface-color);color:var(--hub-stepper-text-color)}:host ::ng-deep button.stepper__button--back{background-color:var(--hub-stepper-background-color)}:host ::ng-deep button.stepper__button--next,:host ::ng-deep button.stepper__button--submit{background-color:var(--hub-stepper-primary-color);border-color:var(--hub-stepper-primary-color);color:var(--hub-ref-color-white, #ffffff)}:host ::ng-deep button.stepper__button:disabled{opacity:var(--hub-stepper-disabled-opacity);cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: UcfirstPipe, name: "ucfirst" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
403
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StepperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
404
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: StepperComponent, isStandalone: true, selector: "hub-stepper, hub-ui-stepper, ng80-stepper", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, backLabel: { classPropertyName: "backLabel", publicName: "backLabel", isSignal: true, isRequired: false, transformFunction: null }, continueLabel: { classPropertyName: "continueLabel", publicName: "continueLabel", isSignal: true, isRequired: false, transformFunction: null }, submitLabel: { classPropertyName: "submitLabel", publicName: "submitLabel", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { completed: "completed", previousStep: "previousStep", nextStep: "nextStep" }, host: { properties: { "class.stepper--layout-vertical": "layout() === StepperLayout.Vertical", "class.stepper--layout-sidebar": "layout() === StepperLayout.Sidebar", "class.stepper--rtl": "isRtl()", "attr.data-variant": "variant() ?? null", "style.--hub-stepper-accent": "customAccent()" }, classAttribute: "stepper" }, queries: [{ propertyName: "steps", predicate: StepComponent, isSignal: true }, { propertyName: "stepperNavTpt", first: true, predicate: StepperNavDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "previousButton", first: true, predicate: PreviousButtonDirective, descendants: true, isSignal: true }, { propertyName: "nextButton", first: true, predicate: NextButtonDirective, descendants: true, isSignal: true }, { propertyName: "submitButton", first: true, predicate: SubmitButtonDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<!--begin::Nav-->\n<nav class=\"stepper__nav\">\n <ng-container\n [ngTemplateOutlet]=\"stepperNavTpt() || defaultNavTpt\"\n [ngTemplateOutletContext]=\"{ steps: steps(), currentIndex: currentIndex() }\"\n ></ng-container>\n</nav>\n<!--end::Nav-->\n\n<!--begin::Content-->\n<div\n class=\"stepper__content\"\n [class.stepper__content--animated]=\"hasAnimationClass()\"\n [class.stepper__content--animating]=\"contentAnimating()\"\n [class.stepper__content--forward]=\"isForwardAnimation()\"\n [class.stepper__content--backward]=\"isBackwardAnimation()\"\n>\n <div class=\"stepper__content-panel\" (animationend)=\"onContentAnimationEnd($event)\">\n <ng-container\n [ngTemplateOutlet]=\"currentStep?.innerTemplate()\"\n ></ng-container>\n </div>\n</div>\n<!--end::Content-->\n\n<!--begin::Controls-->\n<div class=\"stepper__controls\">\n @if (currentIndex() > 0) {\n <ng-content select=\"button[previousButton]\"></ng-content>\n @if (!previousButton()) {\n <button\n class=\"stepper__button stepper__button--back\"\n (click)=\"goToPrevious()\"\n [disabled]=\"!canNavigateTo(currentIndex() - 1)\"\n >\n @if (isRtl()) {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8594;</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8592;</span>\n }\n {{ backLabel() ?? ('BACK' | translate | ucfirst) }}\n </button>\n }\n }\n\n @if (currentIndex() < steps().length - 1) {\n <ng-content select=\"button[nextButton]\"></ng-content>\n @if (!nextButton()) {\n <button\n class=\"stepper__button stepper__button--next\"\n (click)=\"goToNext()\"\n [disabled]=\"!canNavigateTo(currentIndex() + 1)\"\n >\n {{ continueLabel() ?? ('CONTINUE' | translate | ucfirst) }}\n @if (isRtl()) {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8592;</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8594;</span>\n }\n </button>\n }\n }\n\n @if (currentIndex() === steps().length - 1) {\n <ng-content select=\"button[submitButton]\"></ng-content>\n @if (!submitButton()) {\n <button\n class=\"stepper__button stepper__button--submit\"\n (click)=\"complete()\"\n [disabled]=\"!isValidStepIndex(currentIndex())\"\n >\n {{ submitLabel() ?? ('SUBMIT' | translate | ucfirst) }}\n </button>\n }\n }\n</div>\n<!--end::Controls-->\n\n<!-- begin:default-nav -->\n<ng-template #defaultNavTpt let-steps=\"steps\" let-currentIndex=\"currentIndex\">\n <ul class=\"stepper__nav-list\">\n @for (step of steps; track $index; let i = $index) {\n <li class=\"stepper__nav-item\">\n <ng-container\n\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\tdefaultNavTriggerTpt\n\t\t\t\t\"\n\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\ttitle: step.title(),\n\t\t\t\t\tindex: i,\n\t\t\t\t\tisCurrent: currentIndex === i,\n\t\t\t\t\tisCompleted: i < currentIndex\n\t\t\t\t}\"\n ></ng-container>\n </li>\n }\n </ul>\n</ng-template>\n<!-- end:default-nav -->\n\n<!-- begin:default-nav-trigger -->\n<ng-template\n #defaultNavTriggerTpt\n let-title=\"title\"\n let-index=\"index\"\n let-isCurrent=\"isCurrent\"\n let-isCompleted=\"isCompleted\"\n >\n <button\n class=\"stepper__nav-trigger\"\n [class.stepper__nav-trigger--current]=\"isCurrent\"\n [class.stepper__nav-trigger--completed]=\"isCompleted\"\n [disabled]=\"!canNavigateTo(index)\"\n (click)=\"goTo(index)\"\n >\n @if (title) {\n <span class=\"stepper__nav-title\">{{ title }}</span>\n } @else {\n <span class=\"stepper__nav-title\">Step {{ index + 1 }}</span>\n }\n </button>\n</ng-template>\n<!-- end:default-nav-trigger -->\n", styles: ["@charset \"UTF-8\";:host{--hub-stepper-accent: var(--hub-sys-color-primary, #009ef7);--hub-stepper-accent-emphasis: color-mix(in oklch, var(--hub-stepper-accent) 80%, var(--hub-sys-color-ink, #212529));--hub-stepper-accent-subtle: color-mix(in oklch, var(--hub-stepper-accent) 12%, var(--hub-sys-surface-page, #fff));--hub-stepper-accent-on: oklch(from var(--hub-stepper-accent) clamp(0, (.62 - l) * 1000, 1) 0 h);--hub-stepper-primary-color: var(--hub-stepper-accent);--hub-stepper-background-color: var(--hub-sys-surface-elevated, #f8f9fa);--hub-stepper-text-color: var(--hub-sys-text-primary, #212529);--hub-stepper-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-stepper-surface-color: var(--hub-sys-surface-page, #ffffff);--hub-stepper-nav-bg: var(--hub-sys-surface-page, transparent);--hub-stepper-nav-padding-x: 0;--hub-stepper-nav-padding-y: 0;--hub-stepper-nav-border-width: 0;--hub-stepper-nav-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-stepper-nav-link-color: var(--hub-sys-text-primary, #212529);--hub-stepper-nav-link-hover-color: var(--hub-sys-link-hover-color, #0a58ca);--hub-stepper-nav-link-hover-bg: var(--hub-sys-state-hover-bg, rgba(0, 0, 0, .075));--hub-stepper-nav-link-active-color: var(--hub-stepper-accent-on, #ffffff);--hub-stepper-nav-link-active-bg: var(--hub-stepper-accent);--hub-stepper-nav-link-active-border-color: var(--hub-stepper-accent);--hub-stepper-nav-link-disabled-color: var(--hub-sys-text-muted, #6c757d);--hub-stepper-gap: var(--hub-ref-space-3, 1rem);--hub-stepper-nav-gap: var(--hub-ref-space-1, .25rem);--hub-stepper-nav-trigger-gap: var(--hub-ref-space-1, .25rem);--hub-stepper-nav-trigger-padding-y: var(--hub-ref-space-2, .5rem);--hub-stepper-nav-trigger-padding-x: var(--hub-ref-space-3, 1rem);--hub-stepper-nav-trigger-font-size: var(--hub-ref-font-size-sm, .875rem);--hub-stepper-nav-trigger-line-height: var(--hub-ref-line-height-sm, 1.25);--hub-stepper-controls-justify: flex-end;--hub-stepper-controls-gap: var(--hub-ref-space-2, .5rem);--hub-stepper-control-padding-y: .375rem;--hub-stepper-control-padding-x: var(--hub-ref-space-3, 1rem);--hub-stepper-control-font-size: var(--hub-ref-font-size-sm, .875rem);--hub-stepper-control-line-height: var(--hub-ref-line-height-sm, 1.25);--hub-stepper-disabled-opacity: var(--hub-sys-opacity-50, .5);--hub-stepper-sidebar-min-width: 160px;--hub-stepper-sidebar-ideal-width: 20vw;--hub-stepper-sidebar-max-width: 240px;--hub-stepper-sidebar-width: clamp( var(--hub-stepper-sidebar-min-width), var(--hub-stepper-sidebar-ideal-width), var(--hub-stepper-sidebar-max-width) );--hub-stepper-content-padding-x: 0;--hub-stepper-content-padding-y: 0;--hub-stepper-content-border-width: 0;--hub-stepper-animation-duration: var(--hub-sys-transition-duration-base, .26s);--hub-stepper-animation-easing: var(--hub-sys-transition-timing-function-base, ease);--hub-stepper-animation-distance: var(--hub-ref-space-4, 1.5rem);display:grid;grid-template-columns:1fr;grid-template-areas:\"nav\" \"content\" \"controls\";grid-template-rows:auto 1fr auto;gap:var(--hub-stepper-gap);width:100%}:host.stepper--layout-vertical{grid-template-columns:1fr;grid-template-areas:\"nav\" \"content\" \"controls\";grid-template-rows:auto 1fr auto}:host.stepper--layout-sidebar{grid-template-columns:var(--hub-stepper-sidebar-width) minmax(0,1fr);grid-template-areas:\"nav content\" \"nav controls\";grid-template-rows:1fr auto;align-items:stretch}.stepper__nav{grid-area:nav;background-color:var(--hub-stepper-nav-bg);border:var(--hub-stepper-nav-border-width) solid var(--hub-stepper-nav-border-color);border-radius:var(--hub-ref-radius-md, .375rem);padding:var(--hub-stepper-nav-padding-y, 0) var(--hub-stepper-nav-padding-x, 0);overflow-x:auto}.stepper__nav-list{list-style:none;display:flex;gap:var(--hub-stepper-nav-gap);padding:0;margin:0;min-width:max-content}.stepper__nav-item{flex:0 0 auto}.stepper__nav-trigger{display:inline-flex;align-items:center;gap:var(--hub-stepper-nav-trigger-gap);border:1px solid transparent;border-radius:var(--hub-sys-radius-pill, 50rem);background-color:transparent;padding:var(--hub-stepper-nav-trigger-padding-y) var(--hub-stepper-nav-trigger-padding-x);cursor:pointer;color:var(--hub-stepper-nav-link-color);font-size:var(--hub-stepper-nav-trigger-font-size);line-height:var(--hub-stepper-nav-trigger-line-height)}.stepper__nav-trigger:hover:not(:disabled){color:var(--hub-stepper-nav-link-hover-color);background-color:var(--hub-stepper-nav-link-hover-bg)}.stepper__nav-trigger--current{border-color:var(--hub-stepper-nav-link-active-border-color);background-color:var(--hub-stepper-nav-link-active-bg);color:var(--hub-stepper-nav-link-active-color)}.stepper__nav-trigger--completed{color:var(--hub-stepper-nav-link-color)}.stepper__nav-trigger:disabled{color:var(--hub-stepper-nav-link-disabled-color);cursor:not-allowed}.stepper__content{grid-area:content;border:var(--hub-stepper-content-border-width) solid var(--hub-stepper-border-color);border-radius:var(--hub-ref-radius-md, .375rem);background-color:var(--hub-stepper-surface-color);padding:var(--hub-stepper-content-padding-y, 0) var(--hub-stepper-content-padding-x, 0);min-width:0;position:relative;overflow:hidden}.stepper__content-panel{will-change:transform,opacity}.stepper__controls{grid-area:controls;display:flex;gap:var(--hub-stepper-controls-gap);align-items:center;justify-content:var(--hub-stepper-controls-justify)}.stepper__controls :is(button[previousButton],button[nextButton],button[submitButton],.stepper__button){border:1px solid var(--hub-stepper-border-color);border-radius:var(--hub-ref-radius-md, .375rem);padding:var(--hub-stepper-control-padding-y) var(--hub-stepper-control-padding-x);font-size:var(--hub-stepper-control-font-size);line-height:var(--hub-stepper-control-line-height);cursor:pointer;background-color:var(--hub-stepper-surface-color);color:var(--hub-stepper-text-color)}.stepper__button--back{background-color:var(--hub-stepper-background-color);color:var(--hub-stepper-text-color)}.stepper__button--next,.stepper__button--submit{background-color:var(--hub-stepper-primary-color);border-color:var(--hub-stepper-primary-color);color:var(--hub-stepper-accent-on, #ffffff)}.stepper__button:disabled{opacity:var(--hub-stepper-disabled-opacity);cursor:not-allowed}.stepper__controls button[nextButton],.stepper__controls button[submitButton]{background-color:var(--hub-stepper-primary-color);border-color:var(--hub-stepper-primary-color);color:var(--hub-stepper-accent-on, #ffffff)}.stepper__controls button[previousButton]{background-color:var(--hub-stepper-background-color)}.stepper__controls :is(button[previousButton],button[nextButton],button[submitButton]):disabled{opacity:var(--hub-stepper-disabled-opacity);cursor:not-allowed}:host.stepper--layout-sidebar .stepper__nav{height:100%;overflow-y:auto;overflow-x:hidden}:host.stepper--layout-sidebar .stepper__nav-list{flex-direction:column;align-items:stretch}:host.stepper--layout-sidebar .stepper__nav-item{width:100%}:host.stepper--layout-sidebar .stepper__nav-trigger{width:100%;justify-content:flex-start}:host.stepper--rtl{direction:rtl}:host.stepper--rtl .stepper__nav-list{flex-direction:row}:host.stepper--rtl.stepper--layout-sidebar .stepper__nav-list{flex-direction:column}:host.stepper--rtl.stepper--layout-sidebar .stepper__nav-trigger{justify-content:flex-end;text-align:right}.stepper__button-icon{display:inline-flex;align-items:center;line-height:1}.stepper__content--animated.stepper__content--animating .stepper__content-panel{animation-duration:var(--hub-stepper-animation-duration);animation-timing-function:var(--hub-stepper-animation-easing);animation-fill-mode:both}:host.stepper--animated.stepper--anim-fade .stepper__content--animating .stepper__content-panel{animation-name:stepper-fade-in}:host.stepper--animated:not(.stepper--anim-fade) .stepper__content--animating.stepper__content--forward .stepper__content-panel,:host.stepper--animated.stepper--anim-slide .stepper__content--animating.stepper__content--forward .stepper__content-panel{animation-name:stepper-slide-in-forward}:host.stepper--animated:not(.stepper--anim-fade) .stepper__content--animating.stepper__content--backward .stepper__content-panel,:host.stepper--animated.stepper--anim-slide .stepper__content--animating.stepper__content--backward .stepper__content-panel{animation-name:stepper-slide-in-backward}@keyframes stepper-fade-in{0%{opacity:0}to{opacity:1}}@keyframes stepper-slide-in-forward{0%{opacity:0;transform:translate(var(--hub-stepper-animation-distance))}to{opacity:1;transform:translate(0)}}@keyframes stepper-slide-in-backward{0%{opacity:0;transform:translate(calc(-1 * var(--hub-stepper-animation-distance)))}to{opacity:1;transform:translate(0)}}:host ::ng-deep button.stepper__button{border:1px solid var(--hub-stepper-border-color);border-radius:var(--hub-ref-radius-md, .375rem);padding:var(--hub-stepper-control-padding-y) var(--hub-stepper-control-padding-x);font-size:var(--hub-stepper-control-font-size);line-height:var(--hub-stepper-control-line-height);cursor:pointer;background-color:var(--hub-stepper-surface-color);color:var(--hub-stepper-text-color)}:host ::ng-deep button.stepper__button--back{background-color:var(--hub-stepper-background-color)}:host ::ng-deep button.stepper__button--next,:host ::ng-deep button.stepper__button--submit{background-color:var(--hub-stepper-primary-color);border-color:var(--hub-stepper-primary-color);color:var(--hub-stepper-accent-on, #ffffff)}:host ::ng-deep button.stepper__button:disabled{opacity:var(--hub-stepper-disabled-opacity);cursor:not-allowed}:host([data-variant]){--hub-stepper-accent-emphasis: color-mix(in oklch, var(--hub-stepper-accent) 80%, var(--hub-sys-color-ink, #212529));--hub-stepper-accent-subtle: color-mix(in oklch, var(--hub-stepper-accent) 12%, var(--hub-sys-surface-page, #fff));--hub-stepper-accent-on: oklch(from var(--hub-stepper-accent) clamp(0, (.62 - l) * 1000, 1) 0 h)}:host([data-variant=primary]){--hub-stepper-accent: var(--hub-sys-color-primary)}:host([data-variant=secondary]){--hub-stepper-accent: var(--hub-sys-color-secondary)}:host([data-variant=success]){--hub-stepper-accent: var(--hub-sys-color-success)}:host([data-variant=danger]){--hub-stepper-accent: var(--hub-sys-color-danger)}:host([data-variant=warning]){--hub-stepper-accent: var(--hub-sys-color-warning)}:host([data-variant=info]){--hub-stepper-accent: var(--hub-sys-color-info)}:host([data-variant=neutral]){--hub-stepper-accent: var(--hub-sys-color-neutral)}:host([data-variant=light]){--hub-stepper-accent: var(--hub-sys-color-light)}:host([data-variant=dark]){--hub-stepper-accent: var(--hub-sys-color-dark)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: UcfirstPipe, name: "ucfirst" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
368
405
  }
369
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: StepperComponent, decorators: [{
406
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StepperComponent, decorators: [{
370
407
  type: Component,
371
408
  args: [{ selector: 'hub-stepper, hub-ui-stepper, ng80-stepper', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet, TranslatePipe, UcfirstPipe], host: {
372
409
  class: 'stepper',
373
410
  '[class.stepper--layout-vertical]': 'layout() === StepperLayout.Vertical',
374
411
  '[class.stepper--layout-sidebar]': 'layout() === StepperLayout.Sidebar',
375
- '[class.stepper--rtl]': 'isRtl()'
376
- }, template: "<!--begin::Nav-->\n<nav class=\"stepper__nav\">\n <ng-container\n [ngTemplateOutlet]=\"stepperNavTpt() || defaultNavTpt\"\n [ngTemplateOutletContext]=\"{ steps: steps(), currentIndex: currentIndex() }\"\n ></ng-container>\n</nav>\n<!--end::Nav-->\n\n<!--begin::Content-->\n<div\n class=\"stepper__content\"\n [class.stepper__content--animated]=\"hasAnimationClass()\"\n [class.stepper__content--animating]=\"contentAnimating()\"\n [class.stepper__content--forward]=\"isForwardAnimation()\"\n [class.stepper__content--backward]=\"isBackwardAnimation()\"\n>\n <div class=\"stepper__content-panel\" (animationend)=\"onContentAnimationEnd($event)\">\n <ng-container\n [ngTemplateOutlet]=\"currentStep?.innerTemplate()\"\n ></ng-container>\n </div>\n</div>\n<!--end::Content-->\n\n<!--begin::Controls-->\n<div class=\"stepper__controls\">\n @if (currentIndex() > 0) {\n <ng-content select=\"button[previousButton]\"></ng-content>\n @if (!previousButton()) {\n <button\n class=\"stepper__button stepper__button--back\"\n (click)=\"goToPrevious()\"\n [disabled]=\"!canNavigateTo(currentIndex() - 1)\"\n >\n @if (isRtl()) {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8594;</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8592;</span>\n }\n {{ backLabel() ?? ('BACK' | translate | ucfirst) }}\n </button>\n }\n }\n\n @if (currentIndex() < steps().length - 1) {\n <ng-content select=\"button[nextButton]\"></ng-content>\n @if (!nextButton()) {\n <button\n class=\"stepper__button stepper__button--next\"\n (click)=\"goToNext()\"\n [disabled]=\"!canNavigateTo(currentIndex() + 1)\"\n >\n {{ continueLabel() ?? ('CONTINUE' | translate | ucfirst) }}\n @if (isRtl()) {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8592;</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8594;</span>\n }\n </button>\n }\n }\n\n @if (currentIndex() === steps().length - 1) {\n <ng-content select=\"button[submitButton]\"></ng-content>\n @if (!submitButton()) {\n <button\n class=\"stepper__button stepper__button--submit\"\n (click)=\"complete()\"\n [disabled]=\"!isValidStepIndex(currentIndex())\"\n >\n {{ submitLabel() ?? ('SUBMIT' | translate | ucfirst) }}\n </button>\n }\n }\n</div>\n<!--end::Controls-->\n\n<!-- begin:default-nav -->\n<ng-template #defaultNavTpt let-steps=\"steps\" let-currentIndex=\"currentIndex\">\n <ul class=\"stepper__nav-list\">\n @for (step of steps; track $index; let i = $index) {\n <li class=\"stepper__nav-item\">\n <ng-container\n\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\tdefaultNavTriggerTpt\n\t\t\t\t\"\n\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\ttitle: step.title(),\n\t\t\t\t\tindex: i,\n\t\t\t\t\tisCurrent: currentIndex === i,\n\t\t\t\t\tisCompleted: i < currentIndex\n\t\t\t\t}\"\n ></ng-container>\n </li>\n }\n </ul>\n</ng-template>\n<!-- end:default-nav -->\n\n<!-- begin:default-nav-trigger -->\n<ng-template\n #defaultNavTriggerTpt\n let-title=\"title\"\n let-index=\"index\"\n let-isCurrent=\"isCurrent\"\n let-isCompleted=\"isCompleted\"\n >\n <button\n class=\"stepper__nav-trigger\"\n [class.stepper__nav-trigger--current]=\"isCurrent\"\n [class.stepper__nav-trigger--completed]=\"isCompleted\"\n [disabled]=\"!canNavigateTo(index)\"\n (click)=\"goTo(index)\"\n >\n @if (title) {\n <span class=\"stepper__nav-title\">{{ title }}</span>\n } @else {\n <span class=\"stepper__nav-title\">Step {{ index + 1 }}</span>\n }\n </button>\n</ng-template>\n<!-- end:default-nav-trigger -->\n", styles: [":host{--hub-stepper-primary-color: var(--hub-sys-color-primary, #009ef7);--hub-stepper-background-color: var(--hub-sys-surface-elevated, #f3f6f9);--hub-stepper-text-color: var(--hub-sys-text-primary, #181c32);--hub-stepper-border-color: var(--hub-sys-border-color-default, #d8dde6);--hub-stepper-surface-color: var(--hub-sys-surface-page, #ffffff);--hub-stepper-nav-bg: var(--hub-sys-surface-page, transparent);--hub-stepper-nav-padding: 0;--hub-stepper-nav-border-width: 0;--hub-stepper-nav-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-stepper-nav-link-color: var(--hub-sys-text-primary, #495057);--hub-stepper-nav-link-hover-color: var(--hub-sys-link-hover-color, #0d6efd);--hub-stepper-nav-link-hover-bg: var(--hub-sys-state-hover-bg, #f8f9fa);--hub-stepper-nav-link-active-color: var(--hub-ref-color-white, #ffffff);--hub-stepper-nav-link-active-bg: var(--hub-sys-color-primary, #0d6efd);--hub-stepper-nav-link-active-border-color: var(--hub-sys-color-primary, #0d6efd);--hub-stepper-nav-link-disabled-color: var(--hub-sys-text-muted, #adb5bd);--hub-stepper-gap: var(--hub-ref-space-3, 1rem);--hub-stepper-nav-gap: var(--hub-ref-space-1, .25rem);--hub-stepper-nav-trigger-gap: var(--hub-ref-space-1, .25rem);--hub-stepper-nav-trigger-padding-y: var(--hub-ref-space-2, .5rem);--hub-stepper-nav-trigger-padding-x: var(--hub-ref-space-3, .75rem);--hub-stepper-nav-trigger-font-size: var(--hub-ref-font-size-sm, .875rem);--hub-stepper-nav-trigger-line-height: var(--hub-ref-line-height-sm, 1.2);--hub-stepper-controls-justify: flex-end;--hub-stepper-controls-gap: var(--hub-ref-space-2, .5rem);--hub-stepper-control-padding-y: .375rem;--hub-stepper-control-padding-x: var(--hub-ref-space-3, .75rem);--hub-stepper-control-font-size: var(--hub-ref-font-size-sm, .875rem);--hub-stepper-control-line-height: var(--hub-ref-line-height-sm, 1.25);--hub-stepper-disabled-opacity: var(--hub-sys-opacity-50, .5);--hub-stepper-sidebar-min-width: 160px;--hub-stepper-sidebar-ideal-width: 20vw;--hub-stepper-sidebar-max-width: 240px;--hub-stepper-sidebar-width: clamp( var(--hub-stepper-sidebar-min-width), var(--hub-stepper-sidebar-ideal-width), var(--hub-stepper-sidebar-max-width) );--hub-stepper-content-padding: 0;--hub-stepper-content-border-width: 0;--hub-stepper-animation-duration: var(--hub-sys-transition-duration-base, .26s);--hub-stepper-animation-easing: var(--hub-sys-transition-timing-function-base, ease);--hub-stepper-animation-distance: var(--hub-ref-space-4, 18px);display:grid;grid-template-columns:1fr;grid-template-areas:\"nav\" \"content\" \"controls\";grid-template-rows:auto 1fr auto;gap:var(--hub-stepper-gap);width:100%}:host.stepper--layout-vertical{grid-template-columns:1fr;grid-template-areas:\"nav\" \"content\" \"controls\";grid-template-rows:auto 1fr auto}:host.stepper--layout-sidebar{grid-template-columns:var(--hub-stepper-sidebar-width) minmax(0,1fr);grid-template-areas:\"nav content\" \"nav controls\";grid-template-rows:1fr auto;align-items:stretch}.stepper__nav{grid-area:nav;background-color:var(--hub-stepper-nav-bg);border:var(--hub-stepper-nav-border-width) solid var(--hub-stepper-nav-border-color);border-radius:var(--hub-ref-radius-md, .5rem);padding:var(--hub-stepper-nav-padding);overflow-x:auto}.stepper__nav-list{list-style:none;display:flex;gap:var(--hub-stepper-nav-gap);padding:0;margin:0;min-width:max-content}.stepper__nav-item{flex:0 0 auto}.stepper__nav-trigger{display:inline-flex;align-items:center;gap:var(--hub-stepper-nav-trigger-gap);border:1px solid transparent;border-radius:999px;background-color:transparent;padding:var(--hub-stepper-nav-trigger-padding-y) var(--hub-stepper-nav-trigger-padding-x);cursor:pointer;color:var(--hub-stepper-nav-link-color);font-size:var(--hub-stepper-nav-trigger-font-size);line-height:var(--hub-stepper-nav-trigger-line-height)}.stepper__nav-trigger:hover:not(:disabled){color:var(--hub-stepper-nav-link-hover-color);background-color:var(--hub-stepper-nav-link-hover-bg)}.stepper__nav-trigger--current{border-color:var(--hub-stepper-nav-link-active-border-color);background-color:var(--hub-stepper-nav-link-active-bg);color:var(--hub-stepper-nav-link-active-color)}.stepper__nav-trigger--completed{color:var(--hub-stepper-nav-link-color)}.stepper__nav-trigger:disabled{color:var(--hub-stepper-nav-link-disabled-color);cursor:not-allowed}.stepper__content{grid-area:content;border:var(--hub-stepper-content-border-width) solid var(--hub-stepper-border-color);border-radius:var(--hub-ref-radius-md, .5rem);background-color:var(--hub-stepper-surface-color);padding:var(--hub-stepper-content-padding);min-width:0;position:relative;overflow:hidden}.stepper__content-panel{will-change:transform,opacity}.stepper__controls{grid-area:controls;display:flex;gap:var(--hub-stepper-controls-gap);align-items:center;justify-content:var(--hub-stepper-controls-justify)}.stepper__controls :is(button[previousButton],button[nextButton],button[submitButton],.stepper__button){border:1px solid var(--hub-stepper-border-color);border-radius:var(--hub-ref-radius-md, .375rem);padding:var(--hub-stepper-control-padding-y) var(--hub-stepper-control-padding-x);font-size:var(--hub-stepper-control-font-size);line-height:var(--hub-stepper-control-line-height);cursor:pointer;background-color:var(--hub-stepper-surface-color);color:var(--hub-stepper-text-color)}.stepper__button--back{background-color:var(--hub-stepper-background-color);color:var(--hub-stepper-text-color)}.stepper__button--next,.stepper__button--submit{background-color:var(--hub-stepper-primary-color);border-color:var(--hub-stepper-primary-color);color:var(--hub-ref-color-white, #ffffff)}.stepper__button:disabled{opacity:var(--hub-stepper-disabled-opacity);cursor:not-allowed}.stepper__controls button[nextButton],.stepper__controls button[submitButton]{background-color:var(--hub-stepper-primary-color);border-color:var(--hub-stepper-primary-color);color:var(--hub-ref-color-white, #ffffff)}.stepper__controls button[previousButton]{background-color:var(--hub-stepper-background-color)}.stepper__controls :is(button[previousButton],button[nextButton],button[submitButton]):disabled{opacity:var(--hub-stepper-disabled-opacity);cursor:not-allowed}:host.stepper--layout-sidebar .stepper__nav{height:100%;overflow-y:auto;overflow-x:hidden}:host.stepper--layout-sidebar .stepper__nav-list{flex-direction:column;align-items:stretch}:host.stepper--layout-sidebar .stepper__nav-item{width:100%}:host.stepper--layout-sidebar .stepper__nav-trigger{width:100%;justify-content:flex-start}:host.stepper--rtl{direction:rtl}:host.stepper--rtl .stepper__nav-list{flex-direction:row}:host.stepper--rtl.stepper--layout-sidebar .stepper__nav-list{flex-direction:column}:host.stepper--rtl.stepper--layout-sidebar .stepper__nav-trigger{justify-content:flex-end;text-align:right}.stepper__button-icon{display:inline-flex;align-items:center;line-height:1}.stepper__content--animated.stepper__content--animating .stepper__content-panel{animation-duration:var(--hub-stepper-animation-duration);animation-timing-function:var(--hub-stepper-animation-easing);animation-fill-mode:both}:host.stepper--animated.stepper--anim-fade .stepper__content--animating .stepper__content-panel{animation-name:stepper-fade-in}:host.stepper--animated:not(.stepper--anim-fade) .stepper__content--animating.stepper__content--forward .stepper__content-panel,:host.stepper--animated.stepper--anim-slide .stepper__content--animating.stepper__content--forward .stepper__content-panel{animation-name:stepper-slide-in-forward}:host.stepper--animated:not(.stepper--anim-fade) .stepper__content--animating.stepper__content--backward .stepper__content-panel,:host.stepper--animated.stepper--anim-slide .stepper__content--animating.stepper__content--backward .stepper__content-panel{animation-name:stepper-slide-in-backward}@keyframes stepper-fade-in{0%{opacity:0}to{opacity:1}}@keyframes stepper-slide-in-forward{0%{opacity:0;transform:translate(var(--hub-stepper-animation-distance))}to{opacity:1;transform:translate(0)}}@keyframes stepper-slide-in-backward{0%{opacity:0;transform:translate(calc(-1 * var(--hub-stepper-animation-distance)))}to{opacity:1;transform:translate(0)}}:host ::ng-deep button.stepper__button{border:1px solid var(--hub-stepper-border-color);border-radius:var(--hub-ref-radius-md, .375rem);padding:var(--hub-stepper-control-padding-y) var(--hub-stepper-control-padding-x);font-size:var(--hub-stepper-control-font-size);line-height:var(--hub-stepper-control-line-height);cursor:pointer;background-color:var(--hub-stepper-surface-color);color:var(--hub-stepper-text-color)}:host ::ng-deep button.stepper__button--back{background-color:var(--hub-stepper-background-color)}:host ::ng-deep button.stepper__button--next,:host ::ng-deep button.stepper__button--submit{background-color:var(--hub-stepper-primary-color);border-color:var(--hub-stepper-primary-color);color:var(--hub-ref-color-white, #ffffff)}:host ::ng-deep button.stepper__button:disabled{opacity:var(--hub-stepper-disabled-opacity);cursor:not-allowed}\n"] }]
377
- }], propDecorators: { backLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "backLabel", required: false }] }], continueLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "continueLabel", required: false }] }], submitLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "submitLabel", required: false }] }], completed: [{ type: i0.Output, args: ["completed"] }], previousStep: [{ type: i0.Output, args: ["previousStep"] }], nextStep: [{ type: i0.Output, args: ["nextStep"] }], steps: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StepComponent), { isSignal: true }] }], stepperNavTpt: [{ type: i0.ContentChild, args: [i0.forwardRef(() => StepperNavDirective), { ...{ read: TemplateRef }, isSignal: true }] }], previousButton: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PreviousButtonDirective), { isSignal: true }] }], nextButton: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NextButtonDirective), { isSignal: true }] }], submitButton: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SubmitButtonDirective), { isSignal: true }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }] } });
412
+ '[class.stepper--rtl]': 'isRtl()',
413
+ '[attr.data-variant]': 'variant() ?? null',
414
+ '[style.--hub-stepper-accent]': 'customAccent()'
415
+ }, template: "<!--begin::Nav-->\n<nav class=\"stepper__nav\">\n <ng-container\n [ngTemplateOutlet]=\"stepperNavTpt() || defaultNavTpt\"\n [ngTemplateOutletContext]=\"{ steps: steps(), currentIndex: currentIndex() }\"\n ></ng-container>\n</nav>\n<!--end::Nav-->\n\n<!--begin::Content-->\n<div\n class=\"stepper__content\"\n [class.stepper__content--animated]=\"hasAnimationClass()\"\n [class.stepper__content--animating]=\"contentAnimating()\"\n [class.stepper__content--forward]=\"isForwardAnimation()\"\n [class.stepper__content--backward]=\"isBackwardAnimation()\"\n>\n <div class=\"stepper__content-panel\" (animationend)=\"onContentAnimationEnd($event)\">\n <ng-container\n [ngTemplateOutlet]=\"currentStep?.innerTemplate()\"\n ></ng-container>\n </div>\n</div>\n<!--end::Content-->\n\n<!--begin::Controls-->\n<div class=\"stepper__controls\">\n @if (currentIndex() > 0) {\n <ng-content select=\"button[previousButton]\"></ng-content>\n @if (!previousButton()) {\n <button\n class=\"stepper__button stepper__button--back\"\n (click)=\"goToPrevious()\"\n [disabled]=\"!canNavigateTo(currentIndex() - 1)\"\n >\n @if (isRtl()) {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8594;</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8592;</span>\n }\n {{ backLabel() ?? ('BACK' | translate | ucfirst) }}\n </button>\n }\n }\n\n @if (currentIndex() < steps().length - 1) {\n <ng-content select=\"button[nextButton]\"></ng-content>\n @if (!nextButton()) {\n <button\n class=\"stepper__button stepper__button--next\"\n (click)=\"goToNext()\"\n [disabled]=\"!canNavigateTo(currentIndex() + 1)\"\n >\n {{ continueLabel() ?? ('CONTINUE' | translate | ucfirst) }}\n @if (isRtl()) {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8592;</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8594;</span>\n }\n </button>\n }\n }\n\n @if (currentIndex() === steps().length - 1) {\n <ng-content select=\"button[submitButton]\"></ng-content>\n @if (!submitButton()) {\n <button\n class=\"stepper__button stepper__button--submit\"\n (click)=\"complete()\"\n [disabled]=\"!isValidStepIndex(currentIndex())\"\n >\n {{ submitLabel() ?? ('SUBMIT' | translate | ucfirst) }}\n </button>\n }\n }\n</div>\n<!--end::Controls-->\n\n<!-- begin:default-nav -->\n<ng-template #defaultNavTpt let-steps=\"steps\" let-currentIndex=\"currentIndex\">\n <ul class=\"stepper__nav-list\">\n @for (step of steps; track $index; let i = $index) {\n <li class=\"stepper__nav-item\">\n <ng-container\n\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\tdefaultNavTriggerTpt\n\t\t\t\t\"\n\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\ttitle: step.title(),\n\t\t\t\t\tindex: i,\n\t\t\t\t\tisCurrent: currentIndex === i,\n\t\t\t\t\tisCompleted: i < currentIndex\n\t\t\t\t}\"\n ></ng-container>\n </li>\n }\n </ul>\n</ng-template>\n<!-- end:default-nav -->\n\n<!-- begin:default-nav-trigger -->\n<ng-template\n #defaultNavTriggerTpt\n let-title=\"title\"\n let-index=\"index\"\n let-isCurrent=\"isCurrent\"\n let-isCompleted=\"isCompleted\"\n >\n <button\n class=\"stepper__nav-trigger\"\n [class.stepper__nav-trigger--current]=\"isCurrent\"\n [class.stepper__nav-trigger--completed]=\"isCompleted\"\n [disabled]=\"!canNavigateTo(index)\"\n (click)=\"goTo(index)\"\n >\n @if (title) {\n <span class=\"stepper__nav-title\">{{ title }}</span>\n } @else {\n <span class=\"stepper__nav-title\">Step {{ index + 1 }}</span>\n }\n </button>\n</ng-template>\n<!-- end:default-nav-trigger -->\n", styles: ["@charset \"UTF-8\";:host{--hub-stepper-accent: var(--hub-sys-color-primary, #009ef7);--hub-stepper-accent-emphasis: color-mix(in oklch, var(--hub-stepper-accent) 80%, var(--hub-sys-color-ink, #212529));--hub-stepper-accent-subtle: color-mix(in oklch, var(--hub-stepper-accent) 12%, var(--hub-sys-surface-page, #fff));--hub-stepper-accent-on: oklch(from var(--hub-stepper-accent) clamp(0, (.62 - l) * 1000, 1) 0 h);--hub-stepper-primary-color: var(--hub-stepper-accent);--hub-stepper-background-color: var(--hub-sys-surface-elevated, #f8f9fa);--hub-stepper-text-color: var(--hub-sys-text-primary, #212529);--hub-stepper-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-stepper-surface-color: var(--hub-sys-surface-page, #ffffff);--hub-stepper-nav-bg: var(--hub-sys-surface-page, transparent);--hub-stepper-nav-padding-x: 0;--hub-stepper-nav-padding-y: 0;--hub-stepper-nav-border-width: 0;--hub-stepper-nav-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-stepper-nav-link-color: var(--hub-sys-text-primary, #212529);--hub-stepper-nav-link-hover-color: var(--hub-sys-link-hover-color, #0a58ca);--hub-stepper-nav-link-hover-bg: var(--hub-sys-state-hover-bg, rgba(0, 0, 0, .075));--hub-stepper-nav-link-active-color: var(--hub-stepper-accent-on, #ffffff);--hub-stepper-nav-link-active-bg: var(--hub-stepper-accent);--hub-stepper-nav-link-active-border-color: var(--hub-stepper-accent);--hub-stepper-nav-link-disabled-color: var(--hub-sys-text-muted, #6c757d);--hub-stepper-gap: var(--hub-ref-space-3, 1rem);--hub-stepper-nav-gap: var(--hub-ref-space-1, .25rem);--hub-stepper-nav-trigger-gap: var(--hub-ref-space-1, .25rem);--hub-stepper-nav-trigger-padding-y: var(--hub-ref-space-2, .5rem);--hub-stepper-nav-trigger-padding-x: var(--hub-ref-space-3, 1rem);--hub-stepper-nav-trigger-font-size: var(--hub-ref-font-size-sm, .875rem);--hub-stepper-nav-trigger-line-height: var(--hub-ref-line-height-sm, 1.25);--hub-stepper-controls-justify: flex-end;--hub-stepper-controls-gap: var(--hub-ref-space-2, .5rem);--hub-stepper-control-padding-y: .375rem;--hub-stepper-control-padding-x: var(--hub-ref-space-3, 1rem);--hub-stepper-control-font-size: var(--hub-ref-font-size-sm, .875rem);--hub-stepper-control-line-height: var(--hub-ref-line-height-sm, 1.25);--hub-stepper-disabled-opacity: var(--hub-sys-opacity-50, .5);--hub-stepper-sidebar-min-width: 160px;--hub-stepper-sidebar-ideal-width: 20vw;--hub-stepper-sidebar-max-width: 240px;--hub-stepper-sidebar-width: clamp( var(--hub-stepper-sidebar-min-width), var(--hub-stepper-sidebar-ideal-width), var(--hub-stepper-sidebar-max-width) );--hub-stepper-content-padding-x: 0;--hub-stepper-content-padding-y: 0;--hub-stepper-content-border-width: 0;--hub-stepper-animation-duration: var(--hub-sys-transition-duration-base, .26s);--hub-stepper-animation-easing: var(--hub-sys-transition-timing-function-base, ease);--hub-stepper-animation-distance: var(--hub-ref-space-4, 1.5rem);display:grid;grid-template-columns:1fr;grid-template-areas:\"nav\" \"content\" \"controls\";grid-template-rows:auto 1fr auto;gap:var(--hub-stepper-gap);width:100%}:host.stepper--layout-vertical{grid-template-columns:1fr;grid-template-areas:\"nav\" \"content\" \"controls\";grid-template-rows:auto 1fr auto}:host.stepper--layout-sidebar{grid-template-columns:var(--hub-stepper-sidebar-width) minmax(0,1fr);grid-template-areas:\"nav content\" \"nav controls\";grid-template-rows:1fr auto;align-items:stretch}.stepper__nav{grid-area:nav;background-color:var(--hub-stepper-nav-bg);border:var(--hub-stepper-nav-border-width) solid var(--hub-stepper-nav-border-color);border-radius:var(--hub-ref-radius-md, .375rem);padding:var(--hub-stepper-nav-padding-y, 0) var(--hub-stepper-nav-padding-x, 0);overflow-x:auto}.stepper__nav-list{list-style:none;display:flex;gap:var(--hub-stepper-nav-gap);padding:0;margin:0;min-width:max-content}.stepper__nav-item{flex:0 0 auto}.stepper__nav-trigger{display:inline-flex;align-items:center;gap:var(--hub-stepper-nav-trigger-gap);border:1px solid transparent;border-radius:var(--hub-sys-radius-pill, 50rem);background-color:transparent;padding:var(--hub-stepper-nav-trigger-padding-y) var(--hub-stepper-nav-trigger-padding-x);cursor:pointer;color:var(--hub-stepper-nav-link-color);font-size:var(--hub-stepper-nav-trigger-font-size);line-height:var(--hub-stepper-nav-trigger-line-height)}.stepper__nav-trigger:hover:not(:disabled){color:var(--hub-stepper-nav-link-hover-color);background-color:var(--hub-stepper-nav-link-hover-bg)}.stepper__nav-trigger--current{border-color:var(--hub-stepper-nav-link-active-border-color);background-color:var(--hub-stepper-nav-link-active-bg);color:var(--hub-stepper-nav-link-active-color)}.stepper__nav-trigger--completed{color:var(--hub-stepper-nav-link-color)}.stepper__nav-trigger:disabled{color:var(--hub-stepper-nav-link-disabled-color);cursor:not-allowed}.stepper__content{grid-area:content;border:var(--hub-stepper-content-border-width) solid var(--hub-stepper-border-color);border-radius:var(--hub-ref-radius-md, .375rem);background-color:var(--hub-stepper-surface-color);padding:var(--hub-stepper-content-padding-y, 0) var(--hub-stepper-content-padding-x, 0);min-width:0;position:relative;overflow:hidden}.stepper__content-panel{will-change:transform,opacity}.stepper__controls{grid-area:controls;display:flex;gap:var(--hub-stepper-controls-gap);align-items:center;justify-content:var(--hub-stepper-controls-justify)}.stepper__controls :is(button[previousButton],button[nextButton],button[submitButton],.stepper__button){border:1px solid var(--hub-stepper-border-color);border-radius:var(--hub-ref-radius-md, .375rem);padding:var(--hub-stepper-control-padding-y) var(--hub-stepper-control-padding-x);font-size:var(--hub-stepper-control-font-size);line-height:var(--hub-stepper-control-line-height);cursor:pointer;background-color:var(--hub-stepper-surface-color);color:var(--hub-stepper-text-color)}.stepper__button--back{background-color:var(--hub-stepper-background-color);color:var(--hub-stepper-text-color)}.stepper__button--next,.stepper__button--submit{background-color:var(--hub-stepper-primary-color);border-color:var(--hub-stepper-primary-color);color:var(--hub-stepper-accent-on, #ffffff)}.stepper__button:disabled{opacity:var(--hub-stepper-disabled-opacity);cursor:not-allowed}.stepper__controls button[nextButton],.stepper__controls button[submitButton]{background-color:var(--hub-stepper-primary-color);border-color:var(--hub-stepper-primary-color);color:var(--hub-stepper-accent-on, #ffffff)}.stepper__controls button[previousButton]{background-color:var(--hub-stepper-background-color)}.stepper__controls :is(button[previousButton],button[nextButton],button[submitButton]):disabled{opacity:var(--hub-stepper-disabled-opacity);cursor:not-allowed}:host.stepper--layout-sidebar .stepper__nav{height:100%;overflow-y:auto;overflow-x:hidden}:host.stepper--layout-sidebar .stepper__nav-list{flex-direction:column;align-items:stretch}:host.stepper--layout-sidebar .stepper__nav-item{width:100%}:host.stepper--layout-sidebar .stepper__nav-trigger{width:100%;justify-content:flex-start}:host.stepper--rtl{direction:rtl}:host.stepper--rtl .stepper__nav-list{flex-direction:row}:host.stepper--rtl.stepper--layout-sidebar .stepper__nav-list{flex-direction:column}:host.stepper--rtl.stepper--layout-sidebar .stepper__nav-trigger{justify-content:flex-end;text-align:right}.stepper__button-icon{display:inline-flex;align-items:center;line-height:1}.stepper__content--animated.stepper__content--animating .stepper__content-panel{animation-duration:var(--hub-stepper-animation-duration);animation-timing-function:var(--hub-stepper-animation-easing);animation-fill-mode:both}:host.stepper--animated.stepper--anim-fade .stepper__content--animating .stepper__content-panel{animation-name:stepper-fade-in}:host.stepper--animated:not(.stepper--anim-fade) .stepper__content--animating.stepper__content--forward .stepper__content-panel,:host.stepper--animated.stepper--anim-slide .stepper__content--animating.stepper__content--forward .stepper__content-panel{animation-name:stepper-slide-in-forward}:host.stepper--animated:not(.stepper--anim-fade) .stepper__content--animating.stepper__content--backward .stepper__content-panel,:host.stepper--animated.stepper--anim-slide .stepper__content--animating.stepper__content--backward .stepper__content-panel{animation-name:stepper-slide-in-backward}@keyframes stepper-fade-in{0%{opacity:0}to{opacity:1}}@keyframes stepper-slide-in-forward{0%{opacity:0;transform:translate(var(--hub-stepper-animation-distance))}to{opacity:1;transform:translate(0)}}@keyframes stepper-slide-in-backward{0%{opacity:0;transform:translate(calc(-1 * var(--hub-stepper-animation-distance)))}to{opacity:1;transform:translate(0)}}:host ::ng-deep button.stepper__button{border:1px solid var(--hub-stepper-border-color);border-radius:var(--hub-ref-radius-md, .375rem);padding:var(--hub-stepper-control-padding-y) var(--hub-stepper-control-padding-x);font-size:var(--hub-stepper-control-font-size);line-height:var(--hub-stepper-control-line-height);cursor:pointer;background-color:var(--hub-stepper-surface-color);color:var(--hub-stepper-text-color)}:host ::ng-deep button.stepper__button--back{background-color:var(--hub-stepper-background-color)}:host ::ng-deep button.stepper__button--next,:host ::ng-deep button.stepper__button--submit{background-color:var(--hub-stepper-primary-color);border-color:var(--hub-stepper-primary-color);color:var(--hub-stepper-accent-on, #ffffff)}:host ::ng-deep button.stepper__button:disabled{opacity:var(--hub-stepper-disabled-opacity);cursor:not-allowed}:host([data-variant]){--hub-stepper-accent-emphasis: color-mix(in oklch, var(--hub-stepper-accent) 80%, var(--hub-sys-color-ink, #212529));--hub-stepper-accent-subtle: color-mix(in oklch, var(--hub-stepper-accent) 12%, var(--hub-sys-surface-page, #fff));--hub-stepper-accent-on: oklch(from var(--hub-stepper-accent) clamp(0, (.62 - l) * 1000, 1) 0 h)}:host([data-variant=primary]){--hub-stepper-accent: var(--hub-sys-color-primary)}:host([data-variant=secondary]){--hub-stepper-accent: var(--hub-sys-color-secondary)}:host([data-variant=success]){--hub-stepper-accent: var(--hub-sys-color-success)}:host([data-variant=danger]){--hub-stepper-accent: var(--hub-sys-color-danger)}:host([data-variant=warning]){--hub-stepper-accent: var(--hub-sys-color-warning)}:host([data-variant=info]){--hub-stepper-accent: var(--hub-sys-color-info)}:host([data-variant=neutral]){--hub-stepper-accent: var(--hub-sys-color-neutral)}:host([data-variant=light]){--hub-stepper-accent: var(--hub-sys-color-light)}:host([data-variant=dark]){--hub-stepper-accent: var(--hub-sys-color-dark)}\n"] }]
416
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], backLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "backLabel", required: false }] }], continueLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "continueLabel", required: false }] }], submitLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "submitLabel", required: false }] }], completed: [{ type: i0.Output, args: ["completed"] }], previousStep: [{ type: i0.Output, args: ["previousStep"] }], nextStep: [{ type: i0.Output, args: ["nextStep"] }], steps: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StepComponent), { isSignal: true }] }], stepperNavTpt: [{ type: i0.ContentChild, args: [i0.forwardRef(() => StepperNavDirective), { ...{ read: TemplateRef }, isSignal: true }] }], previousButton: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PreviousButtonDirective), { isSignal: true }] }], nextButton: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NextButtonDirective), { isSignal: true }] }], submitButton: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SubmitButtonDirective), { isSignal: true }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }] } });
378
417
 
379
418
  /** English dictionary for default stepper action labels. */
380
419
  const locale$9 = {
@@ -485,10 +524,10 @@ class StepTriggerDirective {
485
524
  constructor(template) {
486
525
  this.template = template;
487
526
  }
488
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: StepTriggerDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
489
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: StepTriggerDirective, isStandalone: true, selector: "[hubStepTrigger] [stepTrigger]", ngImport: i0 });
527
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StepTriggerDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
528
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.1", type: StepTriggerDirective, isStandalone: true, selector: "[hubStepTrigger] [stepTrigger]", ngImport: i0 });
490
529
  }
491
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: StepTriggerDirective, decorators: [{
530
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StepTriggerDirective, decorators: [{
492
531
  type: Directive,
493
532
  args: [{
494
533
  selector: '[hubStepTrigger] [stepTrigger]'
@@ -546,8 +585,8 @@ class StepperModule {
546
585
  ]
547
586
  };
548
587
  }
549
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: StepperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
550
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.2", ngImport: i0, type: StepperModule, imports: [StepperComponent,
588
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StepperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
589
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.1", ngImport: i0, type: StepperModule, imports: [StepperComponent,
551
590
  StepComponent,
552
591
  StepTriggerDirective,
553
592
  StepperNavDirective,
@@ -560,9 +599,9 @@ class StepperModule {
560
599
  PreviousButtonDirective,
561
600
  NextButtonDirective,
562
601
  SubmitButtonDirective] });
563
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: StepperModule });
602
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StepperModule });
564
603
  }
565
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: StepperModule, decorators: [{
604
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StepperModule, decorators: [{
566
605
  type: NgModule,
567
606
  args: [{
568
607
  imports: [...STEPPER_STANDALONE],
@@ -576,6 +615,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImpor
576
615
  class StepperThemeService {
577
616
  /** Angular renderer used to update root-level CSS variables safely. */
578
617
  renderer;
618
+ /** Injected document token; SSR-safe alternative to the global `document`. */
619
+ document = inject(DOCUMENT);
579
620
  /**
580
621
  * Creates a renderer instance for dynamic style updates.
581
622
  *
@@ -591,13 +632,13 @@ class StepperThemeService {
591
632
  */
592
633
  setTheme(theme) {
593
634
  Object.keys(theme).forEach((key) => {
594
- this.renderer.setStyle(document.documentElement, `--hub-stepper-${key}`, theme[key]);
635
+ this.renderer.setStyle(this.document.documentElement, `--hub-stepper-${key}`, theme[key]);
595
636
  });
596
637
  }
597
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: StepperThemeService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable });
598
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: StepperThemeService, providedIn: 'root' });
638
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StepperThemeService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable });
639
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StepperThemeService, providedIn: 'root' });
599
640
  }
600
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: StepperThemeService, decorators: [{
641
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StepperThemeService, decorators: [{
601
642
  type: Injectable,
602
643
  args: [{
603
644
  providedIn: 'root'
@@ -1 +1 @@
1
- {"version":3,"file":"ng-hub-ui-stepper.mjs","sources":["../../../projects/stepper/src/lib/next-button.directive.ts","../../../projects/stepper/src/lib/previous-button.directive.ts","../../../projects/stepper/src/lib/step/step.component.ts","../../../projects/stepper/src/lib/step/step.component.html","../../../projects/stepper/src/lib/stepper-nav.directive.ts","../../../projects/stepper/src/lib/submit-button.directive.ts","../../../projects/stepper/src/lib/stepper/stepper-options.ts","../../../projects/stepper/src/lib/stepper/stepper.component.ts","../../../projects/stepper/src/lib/stepper/stepper.component.html","../../../projects/stepper/src/lib/assets/i18n/en.ts","../../../projects/stepper/src/lib/assets/i18n/es.ts","../../../projects/stepper/src/lib/assets/i18n/ca.ts","../../../projects/stepper/src/lib/assets/i18n/eu.ts","../../../projects/stepper/src/lib/assets/i18n/gl.ts","../../../projects/stepper/src/lib/assets/i18n/ast.ts","../../../projects/stepper/src/lib/assets/i18n/an.ts","../../../projects/stepper/src/lib/assets/i18n/de.ts","../../../projects/stepper/src/lib/assets/i18n/zh.ts","../../../projects/stepper/src/lib/assets/i18n/ar.ts","../../../projects/stepper/src/lib/step-trigger.directive.ts","../../../projects/stepper/src/lib/stepper.module.ts","../../../projects/stepper/src/lib/services/stepper-theme-service.ts","../../../projects/stepper/src/public-api.ts","../../../projects/stepper/src/ng-hub-ui-stepper.ts"],"sourcesContent":["import { computed, Directive, inject } from '@angular/core';\nimport { StepperComponent } from './stepper/stepper.component';\n\n/**\n * Connects a projected button to the stepper \"next\" action.\n * It also keeps the button disabled state synchronized with the next step availability.\n */\n@Directive({\n\tselector: 'button[nextButton], button[continueButton]',\n\tstandalone: true,\n\thost: {\n\t\tclass: 'stepper__button stepper__button--next',\n\t\t'[disabled]': 'disabled()',\n\t\t'(click)': 'stepper.goToNext()'\n\t}\n})\nexport class NextButtonDirective {\n\treadonly stepper = inject(StepperComponent);\n\n\t/** Reflects whether the control can trigger forward navigation. */\n\treadonly disabled = computed(() => {\n\t\tconst nextIndex = this.stepper.currentIndex() + 1;\n\t\tconst nextStep = this.stepper.steps()?.[nextIndex];\n\t\treturn !nextStep || nextStep.disabled;\n\t});\n}\n","import { computed, Directive, inject } from '@angular/core';\nimport { StepperComponent } from './stepper/stepper.component';\n\n/**\n * Connects a projected button to the stepper \"previous\" action.\n * It also keeps the button disabled state synchronized with backward navigation availability.\n */\n@Directive({\n\tselector: 'button[previousButton], button[backButton]',\n\tstandalone: true,\n\thost: {\n\t\tclass: 'stepper__button stepper__button--back',\n\t\t'[disabled]': 'disabled()',\n\t\t'(click)': 'stepper.goToPrevious()'\n\t}\n})\nexport class PreviousButtonDirective {\n\treadonly stepper = inject(StepperComponent);\n\n\t/** Reflects whether the control can trigger backward navigation. */\n\treadonly disabled = computed(() => {\n\t\tconst prevIndex = this.stepper.currentIndex() - 1;\n\t\tconst prevStep = this.stepper.steps()?.[prevIndex];\n\t\treturn !prevStep || prevStep.disabled;\n\t});\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tinject,\n\tOnInit,\n\tinput,\n\tsignal,\n\tTemplateRef,\n\tviewChild\n} from '@angular/core';\nimport { StepperComponent } from '../stepper/stepper.component';\n\n/** Default animation duration (ms) used by optional step transitions. */\nconst ANIMATION_DURATION = 256;\n\n/**\n * Defines a single step inside `hub-stepper`.\n * The component exposes metadata (title, disabled state, index) and a projected template as step content.\n */\n@Component({\n\tselector: 'hub-step, hub-ui-step, ng80-step',\n\ttemplateUrl: './step.component.html',\n\tstyleUrls: ['./step.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StepComponent implements OnInit {\n\t/** Parent stepper instance injected from the host context. */\n\tstepper = inject(StepperComponent);\n\n\t/**\n\t * Zero-based position of this step within the parent stepper.\n\t * Assigned automatically by `StepperComponent` — do not set this manually.\n\t */\n\treadonly index = signal<number>(0);\n\n\t/** Optional display title rendered in the step navigation. */\n\treadonly title = input<string>();\n\n\t/** Whether the step is disabled and cannot be navigated to. */\n\treadonly disabled = input(false);\n\n\t/** Template reference used by the parent stepper to render step content. */\n\treadonly innerTemplate = viewChild.required<TemplateRef<any>>('innerTemplate');\n\n\t/** Returns the animation state key consumed by content transitions. */\n\tget animationState() {\n\t\treturn '*';\n\t}\n\n\t/** Runs initial validation checks for component inputs. */\n\tngOnInit(): void {\n\t\tif (!this.title()) {\n\t\t\tconsole.warn('StepComponent: title is recommended for accessibility');\n\t\t}\n\t}\n\n\t/**\n\t * Returns whether the step can be navigated to.\n\t *\n\t * @returns `true` when the step is enabled.\n\t */\n\tisAccessible(): boolean {\n\t\treturn !this.disabled;\n\t}\n}\n","<ng-template #innerTemplate>\n\t<div\n\t\tclass=\"step__content\"\n\t\t[attr.data-step-index]=\"index()\"\n\t\t[attr.aria-label]=\"title()\"\n\t>\n\t\t<ng-content></ng-content>\n\t</div>\n</ng-template>\n","import { TemplateRef, Directive } from '@angular/core';\n\n/**\n * Marks an `ng-template` as a custom navigation template for `hub-stepper`.\n */\n@Directive({\n selector: '[hubStepperNav], [stepperNav]'\n})\nexport class StepperNavDirective {\n\t/** Captured template reference projected into the parent stepper. */\n\tconstructor(public template: TemplateRef<any>) {}\n}\n","import { computed, Directive, inject } from '@angular/core';\nimport { StepperComponent } from './stepper/stepper.component';\n\n/**\n * Connects a projected button to the stepper completion action.\n * It disables the host button when the current step is disabled.\n */\n@Directive({\n\tselector: 'button[submitButton]',\n\tstandalone: true,\n\thost: {\n\t\tclass: 'stepper__button stepper__button--submit',\n\t\t'[disabled]': 'disabled()',\n\t\t'(click)': 'stepper.complete()'\n\t}\n})\nexport class SubmitButtonDirective {\n\treadonly stepper = inject(StepperComponent);\n\n\t/** Reflects whether completion is currently allowed. */\n\treadonly disabled = computed(() => this.stepper.currentStep?.disabled() ?? false);\n}\n","/**\n * Direction of the step transition animation.\n */\nexport enum StepperAnimationDirection {\n\tForward = 'forward',\n\tBackward = 'backward'\n}\n\n/**\n * Available layout modes for the stepper container.\n */\nexport enum StepperLayout {\n\tVertical = 'vertical',\n\tSidebar = 'sidebar'\n}\n\n/**\n * Optional configuration object for the stepper component.\n */\nexport interface StepperOptions {\n\t/**\n\t * Controls how nav, content and footer are arranged inside the stepper grid.\n\t */\n\tlayout?: StepperLayout;\n\n\t/**\n\t * Enables right-to-left rendering for nav, content and controls.\n\t */\n\trtl?: boolean;\n}\n","import {\n\tAfterContentInit,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tOnDestroy,\n\teffect,\n\tinject,\n\tsignal,\n\tTemplateRef,\n\tinput,\n\toutput,\n\tcontentChild,\n\tcontentChildren\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { TranslatePipe, UcfirstPipe } from 'ng-hub-ui-utils';\nimport { NextButtonDirective } from '../next-button.directive';\nimport { PreviousButtonDirective } from '../previous-button.directive';\nimport { StepComponent } from '../step/step.component';\nimport { StepperNavDirective } from '../stepper-nav.directive';\nimport { SubmitButtonDirective } from '../submit-button.directive';\nimport { StepperAnimationDirection, StepperLayout, StepperOptions } from './stepper-options';\n\n/**\n * Renders and controls a multi-step workflow.\n * It coordinates navigation, state transitions and projected templates for steps and controls.\n */\n@Component({\n\tselector: 'hub-stepper, hub-ui-stepper, ng80-stepper',\n\ttemplateUrl: './stepper.component.html',\n\tstyleUrls: ['./stepper.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgTemplateOutlet, TranslatePipe, UcfirstPipe],\n\thost: {\n\t\tclass: 'stepper',\n\t\t'[class.stepper--layout-vertical]': 'layout() === StepperLayout.Vertical',\n\t\t'[class.stepper--layout-sidebar]': 'layout() === StepperLayout.Sidebar',\n\t\t'[class.stepper--rtl]': 'isRtl()'\n\t}\n})\nexport class StepperComponent implements AfterContentInit, OnDestroy {\n\t#cdr = inject(ChangeDetectorRef);\n\t#hostRef = inject(ElementRef<HTMLElement>);\n\t#animationFrameId: number | null = null;\n\n\t/** Exposes layout enum values to the template. */\n\treadonly StepperLayout = StepperLayout;\n\n\t/** Stores the index of the currently active step. */\n\treadonly currentIndex = signal(0);\n\n\t/** Stores whether content transition animation is currently running. */\n\treadonly contentAnimating = signal(false);\n\n\t/** Stores transition direction used by the CSS animation classes. */\n\treadonly animationDirection = signal<StepperAnimationDirection>(StepperAnimationDirection.Forward);\n\n\t/** Optional custom label for the back button. */\n\treadonly backLabel = input<string | null>(null);\n\n\t/** Optional custom label for the continue button. */\n\treadonly continueLabel = input<string | null>(null);\n\n\t/** Optional custom label for the submit button. */\n\treadonly submitLabel = input<string | null>(null);\n\n\t/** Emits once the user completes the last step. */\n\treadonly completed = output<void>();\n\n\t/** Emits the new index when moving to the previous step. */\n\treadonly previousStep = output<number>();\n\n\t/** Emits the new index when moving to the next step. */\n\treadonly nextStep = output<number>();\n\n\t/** Content-projected step definitions. */\n\treadonly steps = contentChildren(StepComponent);\n\n\t/** Automatically assigns each step its zero-based position when the steps collection changes. */\n\tprotected readonly assignStepIndexes = effect(() => {\n\t\tthis.steps().forEach((step, i) => step.index.set(i));\n\t});\n\n\t/** Optional content-projected template for custom navigation. */\n\treadonly stepperNavTpt = contentChild(StepperNavDirective, { read: TemplateRef });\n\n\t/** Optional custom projected previous button. */\n\treadonly previousButton = contentChild(PreviousButtonDirective);\n\n\t/** Optional custom projected next button. */\n\treadonly nextButton = contentChild(NextButtonDirective);\n\n\t/** Optional custom projected submit button. */\n\treadonly submitButton = contentChild(SubmitButtonDirective);\n\n\t/**\n\t * Optional visual and layout configuration for the stepper container.\n\t */\n\treadonly options = input<StepperOptions>({});\n\n\t/**\n\t * Returns the active layout mode.\n\t *\n\t * @returns The configured layout or the vertical default.\n\t */\n\tlayout(): StepperLayout {\n\t\treturn this.options()?.layout ?? StepperLayout.Vertical;\n\t}\n\n\t/**\n\t * Returns whether right-to-left mode is enabled.\n\t *\n\t * @returns `true` when RTL mode is active.\n\t */\n\tisRtl(): boolean {\n\t\treturn this.options()?.rtl ?? false;\n\t}\n\n\t/** Returns the active step component instance or `null` when unavailable. */\n\tget currentStep(): StepComponent | null {\n\t\treturn this.steps()?.[this.currentIndex()] ?? null;\n\t}\n\n\t/** Returns whether host classes enable animated transitions. */\n\thasAnimationClass(): boolean {\n\t\treturn this.#hostRef.nativeElement.classList.contains('stepper--animated');\n\t}\n\n\t/** Returns whether transition direction is forward. */\n\tisForwardAnimation(): boolean {\n\t\treturn this.animationDirection() === StepperAnimationDirection.Forward;\n\t}\n\n\t/** Returns whether transition direction is backward. */\n\tisBackwardAnimation(): boolean {\n\t\treturn this.animationDirection() === StepperAnimationDirection.Backward;\n\t}\n\n\t/** Initializes projected step metadata after content projection. */\n\tngAfterContentInit(): void {\n\t\tthis.initializeSteps();\n\t}\n\n\t/** Clears pending animation frame callbacks on component destroy. */\n\tngOnDestroy(): void {\n\t\tthis.clearAnimationFrame();\n\t}\n\n\t/**\n\t * Triggers initial change detection for projected steps.\n\t */\n\tprivate initializeSteps(): void {\n\t\tthis.#cdr.detectChanges();\n\t}\n\n\t/**\n\t * Navigates to the previous step index.\n\t */\n\tgoToPrevious(): void {\n\t\tthis.goTo(this.currentIndex() - 1);\n\t}\n\n\t/**\n\t * Navigates to the next step index.\n\t */\n\tgoToNext(): void {\n\t\tthis.goTo(this.currentIndex() + 1);\n\t}\n\n\t/**\n\t * Navigates to a specific step index when it is valid.\n\t *\n\t * @param index Target step index.\n\t */\n\tgoTo(index: number): void {\n\t\tif (this.isStepIndexInBounds(index)) {\n\t\t\tconst previousIndex = this.currentIndex();\n\t\t\tif (index === previousIndex) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.animationDirection.set(index > previousIndex ? StepperAnimationDirection.Forward : StepperAnimationDirection.Backward);\n\t\t\tthis.currentIndex.set(index);\n\t\t\tthis.playContentTransition();\n\t\t\tthis.#cdr.detectChanges();\n\t\t\tif (index > previousIndex) {\n\t\t\t\tthis.nextStep.emit(index);\n\t\t\t} else if (index < previousIndex) {\n\t\t\t\tthis.previousStep.emit(index);\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.error(`Invalid step index: ${index}`);\n\t\t}\n\t}\n\n\t/**\n\t * Returns whether the target step can be activated.\n\t *\n\t * @param index Target step index.\n\t * @returns `true` when index is in bounds and the step is not disabled.\n\t */\n\tcanNavigateTo(index: number): boolean {\n\t\treturn this.isStepIndexInBounds(index) && this.isValidStepIndex(index);\n\t}\n\n\t/**\n\t * Completes the stepper workflow and emits the completion event.\n\t */\n\tcomplete(): void {\n\t\tthis.completed.emit();\n\t}\n\n\t/**\n\t * Returns whether a step at the provided index is enabled.\n\t *\n\t * @param index Step index to validate.\n\t * @returns `true` when the step exists and is enabled.\n\t */\n\tisValidStepIndex(index: number): boolean {\n\t\treturn !this.steps()?.[index]?.disabled();\n\t}\n\n\t/**\n\t * Returns whether the provided index is within the steps collection bounds.\n\t *\n\t * @param index Step index to validate.\n\t * @returns `true` when the index points to an existing step.\n\t */\n\tisStepIndexInBounds(index: number): boolean {\n\t\treturn index >= 0 && index < this.steps().length;\n\t}\n\n\t/**\n\t * Starts and schedules the content transition animation lifecycle.\n\t */\n\tprivate playContentTransition(): void {\n\t\tthis.clearAnimationFrame();\n\t\tthis.contentAnimating.set(false);\n\t\tif (!this.hasAnimationClass()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#animationFrameId = globalThis.requestAnimationFrame(() => {\n\t\t\tthis.contentAnimating.set(true);\n\t\t\tthis.#cdr.detectChanges();\n\t\t});\n\t}\n\n\t/**\n\t * Clears the pending animation frame used to trigger content transitions.\n\t */\n\tprivate clearAnimationFrame(): void {\n\t\tif (this.#animationFrameId !== null) {\n\t\t\tglobalThis.cancelAnimationFrame(this.#animationFrameId);\n\t\t\tthis.#animationFrameId = null;\n\t\t}\n\t}\n\n\t/**\n\t * Handles animation end events and resets the active transition state.\n\t *\n\t * @param event DOM animation end event.\n\t */\n\tonContentAnimationEnd(event: AnimationEvent): void {\n\t\tif (event.target !== event.currentTarget) {\n\t\t\treturn;\n\t\t}\n\t\tthis.contentAnimating.set(false);\n\t\tthis.#cdr.detectChanges();\n\t}\n}\n","<!--begin::Nav-->\n<nav class=\"stepper__nav\">\n <ng-container\n [ngTemplateOutlet]=\"stepperNavTpt() || defaultNavTpt\"\n [ngTemplateOutletContext]=\"{ steps: steps(), currentIndex: currentIndex() }\"\n ></ng-container>\n</nav>\n<!--end::Nav-->\n\n<!--begin::Content-->\n<div\n class=\"stepper__content\"\n [class.stepper__content--animated]=\"hasAnimationClass()\"\n [class.stepper__content--animating]=\"contentAnimating()\"\n [class.stepper__content--forward]=\"isForwardAnimation()\"\n [class.stepper__content--backward]=\"isBackwardAnimation()\"\n>\n <div class=\"stepper__content-panel\" (animationend)=\"onContentAnimationEnd($event)\">\n <ng-container\n [ngTemplateOutlet]=\"currentStep?.innerTemplate()\"\n ></ng-container>\n </div>\n</div>\n<!--end::Content-->\n\n<!--begin::Controls-->\n<div class=\"stepper__controls\">\n @if (currentIndex() > 0) {\n <ng-content select=\"button[previousButton]\"></ng-content>\n @if (!previousButton()) {\n <button\n class=\"stepper__button stepper__button--back\"\n (click)=\"goToPrevious()\"\n [disabled]=\"!canNavigateTo(currentIndex() - 1)\"\n >\n @if (isRtl()) {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8594;</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8592;</span>\n }\n {{ backLabel() ?? ('BACK' | translate | ucfirst) }}\n </button>\n }\n }\n\n @if (currentIndex() < steps().length - 1) {\n <ng-content select=\"button[nextButton]\"></ng-content>\n @if (!nextButton()) {\n <button\n class=\"stepper__button stepper__button--next\"\n (click)=\"goToNext()\"\n [disabled]=\"!canNavigateTo(currentIndex() + 1)\"\n >\n {{ continueLabel() ?? ('CONTINUE' | translate | ucfirst) }}\n @if (isRtl()) {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8592;</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8594;</span>\n }\n </button>\n }\n }\n\n @if (currentIndex() === steps().length - 1) {\n <ng-content select=\"button[submitButton]\"></ng-content>\n @if (!submitButton()) {\n <button\n class=\"stepper__button stepper__button--submit\"\n (click)=\"complete()\"\n [disabled]=\"!isValidStepIndex(currentIndex())\"\n >\n {{ submitLabel() ?? ('SUBMIT' | translate | ucfirst) }}\n </button>\n }\n }\n</div>\n<!--end::Controls-->\n\n<!-- begin:default-nav -->\n<ng-template #defaultNavTpt let-steps=\"steps\" let-currentIndex=\"currentIndex\">\n <ul class=\"stepper__nav-list\">\n @for (step of steps; track $index; let i = $index) {\n <li class=\"stepper__nav-item\">\n <ng-container\n\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\tdefaultNavTriggerTpt\n\t\t\t\t\"\n\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\ttitle: step.title(),\n\t\t\t\t\tindex: i,\n\t\t\t\t\tisCurrent: currentIndex === i,\n\t\t\t\t\tisCompleted: i < currentIndex\n\t\t\t\t}\"\n ></ng-container>\n </li>\n }\n </ul>\n</ng-template>\n<!-- end:default-nav -->\n\n<!-- begin:default-nav-trigger -->\n<ng-template\n #defaultNavTriggerTpt\n let-title=\"title\"\n let-index=\"index\"\n let-isCurrent=\"isCurrent\"\n let-isCompleted=\"isCompleted\"\n >\n <button\n class=\"stepper__nav-trigger\"\n [class.stepper__nav-trigger--current]=\"isCurrent\"\n [class.stepper__nav-trigger--completed]=\"isCompleted\"\n [disabled]=\"!canNavigateTo(index)\"\n (click)=\"goTo(index)\"\n >\n @if (title) {\n <span class=\"stepper__nav-title\">{{ title }}</span>\n } @else {\n <span class=\"stepper__nav-title\">Step {{ index + 1 }}</span>\n }\n </button>\n</ng-template>\n<!-- end:default-nav-trigger -->\n","/** English dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'en',\n\tdata: {\n\t\tBACK: 'back',\n\t\tCONTINUE: 'continue',\n\t\tSUBMIT: 'submit'\n\t}\n};\n","/** Castilian dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'es',\n\tdata: {\n\t\tBACK: 'volver',\n\t\tCONTINUE: 'continuar',\n\t\tSUBMIT: 'enviar'\n\t}\n};\n","/** Catalan dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'ca',\n\tdata: {\n\t\tBACK: 'enrere',\n\t\tCONTINUE: 'continua',\n\t\tSUBMIT: 'envia'\n\t}\n};\n","/** Basque dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'eu',\n\tdata: {\n\t\tBACK: 'atzera',\n\t\tCONTINUE: 'jarraitu',\n\t\tSUBMIT: 'bidali'\n\t}\n};\n","/** Galician dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'gl',\n\tdata: {\n\t\tBACK: 'volver',\n\t\tCONTINUE: 'continuar',\n\t\tSUBMIT: 'enviar'\n\t}\n};\n","/** Asturleonese dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'ast',\n\tdata: {\n\t\tBACK: 'tornar',\n\t\tCONTINUE: 'siguir',\n\t\tSUBMIT: 'unviar'\n\t}\n};\n","/** Aragonese dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'an',\n\tdata: {\n\t\tBACK: 'dezaga',\n\t\tCONTINUE: 'continar',\n\t\tSUBMIT: 'ninviar'\n\t}\n};\n","/** German dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'de',\n\tdata: {\n\t\tBACK: 'zuruck',\n\t\tCONTINUE: 'weiter',\n\t\tSUBMIT: 'senden'\n\t}\n};\n","/** Chinese dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'zh',\n\tdata: {\n\t\tBACK: '返回',\n\t\tCONTINUE: '继续',\n\t\tSUBMIT: '提交'\n\t}\n};\n","/** Arabic dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'ar',\n\tdata: {\n\t\tBACK: 'رجوع',\n\t\tCONTINUE: 'متابعة',\n\t\tSUBMIT: 'إرسال'\n\t}\n};\n","import { TemplateRef, Directive } from '@angular/core';\n\n/**\n * Marks an `ng-template` as a custom trigger template for an individual step.\n */\n@Directive({\n selector: '[hubStepTrigger] [stepTrigger]'\n})\nexport class StepTriggerDirective {\n\t/** Captured template reference projected into the parent stepper. */\n\tconstructor(public template: TemplateRef<any>) {}\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { HUB_TRANSLATION_CONFIG, HubTranslationService } from 'ng-hub-ui-utils';\nimport { locale as enLocale } from './assets/i18n/en';\nimport { locale as esLocale } from './assets/i18n/es';\nimport { locale as caLocale } from './assets/i18n/ca';\nimport { locale as euLocale } from './assets/i18n/eu';\nimport { locale as glLocale } from './assets/i18n/gl';\nimport { locale as astLocale } from './assets/i18n/ast';\nimport { locale as anLocale } from './assets/i18n/an';\nimport { locale as deLocale } from './assets/i18n/de';\nimport { locale as zhLocale } from './assets/i18n/zh';\nimport { locale as arLocale } from './assets/i18n/ar';\nimport { StepTriggerDirective } from './step-trigger.directive';\nimport { StepComponent } from './step/step.component';\nimport { StepperNavDirective } from './stepper-nav.directive';\nimport { StepperComponent } from './stepper/stepper.component';\nimport { PreviousButtonDirective } from './previous-button.directive';\nimport { NextButtonDirective } from './next-button.directive';\nimport { SubmitButtonDirective } from './submit-button.directive';\nimport { StepperConfig } from './stepper-config';\n\n/** Default language used when no explicit language is provided. */\nconst DEFAULT_LANGUAGE = 'es';\n\n/** Built-in dictionaries shipped with the stepper library. */\nconst STEPPER_DICTIONARIES = {\n\t[enLocale.lang]: enLocale.data,\n\t[esLocale.lang]: esLocale.data,\n\t[caLocale.lang]: caLocale.data,\n\t[euLocale.lang]: euLocale.data,\n\t[glLocale.lang]: glLocale.data,\n\t[astLocale.lang]: astLocale.data,\n\t[anLocale.lang]: anLocale.data,\n\t[deLocale.lang]: deLocale.data,\n\t[zhLocale.lang]: zhLocale.data,\n\t[arLocale.lang]: arLocale.data\n};\n\n/** All stepper building blocks as a convenience array. */\nconst STEPPER_STANDALONE = [\n\tStepperComponent,\n\tStepComponent,\n\tStepTriggerDirective,\n\tStepperNavDirective,\n\tPreviousButtonDirective,\n\tNextButtonDirective,\n\tSubmitButtonDirective\n] as const;\n\n@NgModule({\n\timports: [...STEPPER_STANDALONE],\n\texports: [...STEPPER_STANDALONE]\n})\n/**\n * Angular module that re-exports all stepper standalone building blocks for convenience.\n */\nexport class StepperModule {\n\t/**\n\t * Registers built-in dictionaries and resolves the active translation language.\n\t *\n\t * @param config Optional language and fallback language override.\n\t * @returns Module providers with translation configuration.\n\t */\n\tstatic forRoot(config?: StepperConfig): ModuleWithProviders<StepperModule> {\n\t\treturn {\n\t\t\tngModule: StepperModule,\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tprovide: HUB_TRANSLATION_CONFIG,\n\t\t\t\t\tuseValue: {\n\t\t\t\t\t\tdictionaries: STEPPER_DICTIONARIES,\n\t\t\t\t\t\tlanguage: config?.language ?? DEFAULT_LANGUAGE,\n\t\t\t\t\t\tfallbackLanguage: config?.fallbackLanguage ?? 'en'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tHubTranslationService\n\t\t\t]\n\t\t};\n\t}\n}\n","import { Injectable, Renderer2, RendererFactory2 } from '@angular/core';\n\n/**\n * Applies runtime CSS variable overrides for the stepper design tokens.\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class StepperThemeService {\n\t/** Angular renderer used to update root-level CSS variables safely. */\n\tprivate renderer: Renderer2;\n\n\t/**\n\t * Creates a renderer instance for dynamic style updates.\n\t *\n\t * @param rendererFactory Angular renderer factory.\n\t */\n\tconstructor(rendererFactory: RendererFactory2) {\n\t\tthis.renderer = rendererFactory.createRenderer(null, null);\n\t}\n\n\t/**\n\t * Applies the provided stepper theme map to CSS custom properties.\n\t *\n\t * @param theme Key-value map of stepper token names and CSS values.\n\t */\n\tsetTheme(theme: { [key: string]: string }) {\n\t\tObject.keys(theme).forEach((key) => {\n\t\t\tthis.renderer.setStyle(document.documentElement, `--hub-stepper-${key}`, theme[key]);\n\t\t});\n\t}\n}\n","/*\n * Public API Surface of stepper\n */\nexport * from './lib/stepper/stepper.component';\nexport * from './lib/step/step.component';\nexport * from './lib/stepper.module';\nexport * from './lib/previous-button.directive';\nexport * from './lib/next-button.directive';\nexport * from './lib/submit-button.directive';\nexport * from './lib/step-trigger.directive';\nexport * from './lib/stepper-nav.directive';\nexport * from './lib/services/stepper-theme-service';\nexport * from './lib/stepper/stepper-options';\nexport * from './lib/stepper-config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["locale","enLocale","esLocale","caLocale","euLocale","glLocale","astLocale","anLocale","deLocale","zhLocale","arLocale"],"mappings":"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"}
1
+ {"version":3,"file":"ng-hub-ui-stepper.mjs","sources":["../../../projects/stepper/src/lib/next-button.directive.ts","../../../projects/stepper/src/lib/previous-button.directive.ts","../../../projects/stepper/src/lib/step/step.component.ts","../../../projects/stepper/src/lib/step/step.component.html","../../../projects/stepper/src/lib/stepper-nav.directive.ts","../../../projects/stepper/src/lib/submit-button.directive.ts","../../../projects/stepper/src/lib/stepper/stepper-options.ts","../../../projects/stepper/src/lib/stepper/stepper.component.ts","../../../projects/stepper/src/lib/stepper/stepper.component.html","../../../projects/stepper/src/lib/assets/i18n/en.ts","../../../projects/stepper/src/lib/assets/i18n/es.ts","../../../projects/stepper/src/lib/assets/i18n/ca.ts","../../../projects/stepper/src/lib/assets/i18n/eu.ts","../../../projects/stepper/src/lib/assets/i18n/gl.ts","../../../projects/stepper/src/lib/assets/i18n/ast.ts","../../../projects/stepper/src/lib/assets/i18n/an.ts","../../../projects/stepper/src/lib/assets/i18n/de.ts","../../../projects/stepper/src/lib/assets/i18n/zh.ts","../../../projects/stepper/src/lib/assets/i18n/ar.ts","../../../projects/stepper/src/lib/step-trigger.directive.ts","../../../projects/stepper/src/lib/stepper.module.ts","../../../projects/stepper/src/lib/services/stepper-theme-service.ts","../../../projects/stepper/src/public-api.ts","../../../projects/stepper/src/ng-hub-ui-stepper.ts"],"sourcesContent":["import { computed, Directive, inject } from '@angular/core';\nimport { StepperComponent } from './stepper/stepper.component';\n\n/**\n * Connects a projected button to the stepper \"next\" action.\n * It also keeps the button disabled state synchronized with the next step availability.\n */\n@Directive({\n\tselector: 'button[nextButton], button[continueButton]',\n\tstandalone: true,\n\thost: {\n\t\tclass: 'stepper__button stepper__button--next',\n\t\t'[disabled]': 'disabled()',\n\t\t'(click)': 'stepper.goToNext()'\n\t}\n})\nexport class NextButtonDirective {\n\treadonly stepper = inject(StepperComponent);\n\n\t/** Reflects whether the control can trigger forward navigation. */\n\treadonly disabled = computed(() => {\n\t\tconst nextIndex = this.stepper.currentIndex() + 1;\n\t\tconst nextStep = this.stepper.steps()?.[nextIndex];\n\t\treturn !nextStep || nextStep.disabled;\n\t});\n}\n","import { computed, Directive, inject } from '@angular/core';\nimport { StepperComponent } from './stepper/stepper.component';\n\n/**\n * Connects a projected button to the stepper \"previous\" action.\n * It also keeps the button disabled state synchronized with backward navigation availability.\n */\n@Directive({\n\tselector: 'button[previousButton], button[backButton]',\n\tstandalone: true,\n\thost: {\n\t\tclass: 'stepper__button stepper__button--back',\n\t\t'[disabled]': 'disabled()',\n\t\t'(click)': 'stepper.goToPrevious()'\n\t}\n})\nexport class PreviousButtonDirective {\n\treadonly stepper = inject(StepperComponent);\n\n\t/** Reflects whether the control can trigger backward navigation. */\n\treadonly disabled = computed(() => {\n\t\tconst prevIndex = this.stepper.currentIndex() - 1;\n\t\tconst prevStep = this.stepper.steps()?.[prevIndex];\n\t\treturn !prevStep || prevStep.disabled;\n\t});\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tinject,\n\tOnInit,\n\tinput,\n\tsignal,\n\tTemplateRef,\n\tviewChild\n} from '@angular/core';\nimport { StepperComponent } from '../stepper/stepper.component';\n\n/** Default animation duration (ms) used by optional step transitions. */\nconst ANIMATION_DURATION = 256;\n\n/**\n * Defines a single step inside `hub-stepper`.\n * The component exposes metadata (title, disabled state, index) and a projected template as step content.\n */\n@Component({\n\tselector: 'hub-step, hub-ui-step, ng80-step',\n\ttemplateUrl: './step.component.html',\n\tstyleUrls: ['./step.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StepComponent implements OnInit {\n\t/** Parent stepper instance injected from the host context. */\n\tstepper = inject(StepperComponent);\n\n\t/**\n\t * Zero-based position of this step within the parent stepper.\n\t * Assigned automatically by `StepperComponent` — do not set this manually.\n\t */\n\treadonly index = signal<number>(0);\n\n\t/** Optional display title rendered in the step navigation. */\n\treadonly title = input<string>();\n\n\t/** Whether the step is disabled and cannot be navigated to. */\n\treadonly disabled = input(false);\n\n\t/** Template reference used by the parent stepper to render step content. */\n\treadonly innerTemplate = viewChild.required<TemplateRef<any>>('innerTemplate');\n\n\t/** Returns the animation state key consumed by content transitions. */\n\tget animationState() {\n\t\treturn '*';\n\t}\n\n\t/** Runs initial validation checks for component inputs. */\n\tngOnInit(): void {\n\t\tif (!this.title()) {\n\t\t\tconsole.warn('StepComponent: title is recommended for accessibility');\n\t\t}\n\t}\n\n\t/**\n\t * Returns whether the step can be navigated to.\n\t *\n\t * @returns `true` when the step is enabled.\n\t */\n\tisAccessible(): boolean {\n\t\treturn !this.disabled;\n\t}\n}\n","<ng-template #innerTemplate>\n\t<div\n\t\tclass=\"step__content\"\n\t\t[attr.data-step-index]=\"index()\"\n\t\t[attr.aria-label]=\"title()\"\n\t>\n\t\t<ng-content></ng-content>\n\t</div>\n</ng-template>\n","import { TemplateRef, Directive } from '@angular/core';\n\n/**\n * Marks an `ng-template` as a custom navigation template for `hub-stepper`.\n */\n@Directive({\n selector: '[hubStepperNav], [stepperNav]'\n})\nexport class StepperNavDirective {\n\t/** Captured template reference projected into the parent stepper. */\n\tconstructor(public template: TemplateRef<any>) {}\n}\n","import { computed, Directive, inject } from '@angular/core';\nimport { StepperComponent } from './stepper/stepper.component';\n\n/**\n * Connects a projected button to the stepper completion action.\n * It disables the host button when the current step is disabled.\n */\n@Directive({\n\tselector: 'button[submitButton]',\n\tstandalone: true,\n\thost: {\n\t\tclass: 'stepper__button stepper__button--submit',\n\t\t'[disabled]': 'disabled()',\n\t\t'(click)': 'stepper.complete()'\n\t}\n})\nexport class SubmitButtonDirective {\n\treadonly stepper = inject(StepperComponent);\n\n\t/** Reflects whether completion is currently allowed. */\n\treadonly disabled = computed(() => this.stepper.currentStep?.disabled() ?? false);\n}\n","/**\n * Direction of the step transition animation.\n */\nexport enum StepperAnimationDirection {\n\tForward = 'forward',\n\tBackward = 'backward'\n}\n\n/**\n * Available layout modes for the stepper container.\n */\nexport enum StepperLayout {\n\tVertical = 'vertical',\n\tSidebar = 'sidebar'\n}\n\n/**\n * Optional configuration object for the stepper component.\n */\nexport interface StepperOptions {\n\t/**\n\t * Controls how nav, content and footer are arranged inside the stepper grid.\n\t */\n\tlayout?: StepperLayout;\n\n\t/**\n\t * Enables right-to-left rendering for nav, content and controls.\n\t */\n\trtl?: boolean;\n}\n","import {\n\tAfterContentInit,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tcomputed,\n\tElementRef,\n\tOnDestroy,\n\teffect,\n\tinject,\n\tsignal,\n\tTemplateRef,\n\tinput,\n\toutput,\n\tcontentChild,\n\tcontentChildren\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { TranslatePipe, UcfirstPipe } from 'ng-hub-ui-utils';\nimport { NextButtonDirective } from '../next-button.directive';\nimport { PreviousButtonDirective } from '../previous-button.directive';\nimport { StepComponent } from '../step/step.component';\nimport { StepperNavDirective } from '../stepper-nav.directive';\nimport { SubmitButtonDirective } from '../submit-button.directive';\nimport { StepperAnimationDirection, StepperLayout, StepperOptions } from './stepper-options';\n\n/**\n * Renders and controls a multi-step workflow.\n * It coordinates navigation, state transitions and projected templates for steps and controls.\n */\n/** Variants with exact design-system token coverage via the SCSS `@each` loop. */\nconst STEPPER_BUILT_IN_VARIANTS = new Set<string>(['primary', 'success', 'danger', 'warning', 'info']);\n\n@Component({\n\tselector: 'hub-stepper, hub-ui-stepper, ng80-stepper',\n\ttemplateUrl: './stepper.component.html',\n\tstyleUrls: ['./stepper.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgTemplateOutlet, TranslatePipe, UcfirstPipe],\n\thost: {\n\t\tclass: 'stepper',\n\t\t'[class.stepper--layout-vertical]': 'layout() === StepperLayout.Vertical',\n\t\t'[class.stepper--layout-sidebar]': 'layout() === StepperLayout.Sidebar',\n\t\t'[class.stepper--rtl]': 'isRtl()',\n\t\t'[attr.data-variant]': 'variant() ?? null',\n\t\t'[style.--hub-stepper-accent]': 'customAccent()'\n\t}\n})\nexport class StepperComponent implements AfterContentInit, OnDestroy {\n\t#cdr = inject(ChangeDetectorRef);\n\t#hostRef = inject(ElementRef<HTMLElement>);\n\t#animationFrameId: number | null = null;\n\n\t/** Exposes layout enum values to the template. */\n\treadonly StepperLayout = StepperLayout;\n\n\t/** Stores the index of the currently active step. */\n\treadonly currentIndex = signal(0);\n\n\t/** Stores whether content transition animation is currently running. */\n\treadonly contentAnimating = signal(false);\n\n\t/** Stores transition direction used by the CSS animation classes. */\n\treadonly animationDirection = signal<StepperAnimationDirection>(StepperAnimationDirection.Forward);\n\n\t/**\n\t * Semantic accent of the stepper: `'primary'` · `'success'` · `'danger'` ·\n\t * `'warning'` · `'info'`, or any custom string (read as `--hub-sys-color-<variant>`).\n\t * Re-bases `--hub-stepper-accent`, which drives the active step pill and the\n\t * next / submit controls. Defaults to primary.\n\t */\n\treadonly variant = input<string>();\n\n\t/**\n\t * Inline accent for custom (non-built-in) variants — the built-in five are\n\t * resolved by the SCSS `@each` loop, so this returns `null` for them.\n\t */\n\tprotected readonly customAccent = computed(() => {\n\t\tconst v = this.variant();\n\t\treturn v && !STEPPER_BUILT_IN_VARIANTS.has(v) ? `var(--hub-sys-color-${v})` : null;\n\t});\n\n\t/** Optional custom label for the back button. */\n\treadonly backLabel = input<string | null>(null);\n\n\t/** Optional custom label for the continue button. */\n\treadonly continueLabel = input<string | null>(null);\n\n\t/** Optional custom label for the submit button. */\n\treadonly submitLabel = input<string | null>(null);\n\n\t/** Emits once the user completes the last step. */\n\treadonly completed = output<void>();\n\n\t/** Emits the new index when moving to the previous step. */\n\treadonly previousStep = output<number>();\n\n\t/** Emits the new index when moving to the next step. */\n\treadonly nextStep = output<number>();\n\n\t/** Content-projected step definitions. */\n\treadonly steps = contentChildren(StepComponent);\n\n\t/** Automatically assigns each step its zero-based position when the steps collection changes. */\n\tprotected readonly assignStepIndexes = effect(() => {\n\t\tthis.steps().forEach((step, i) => step.index.set(i));\n\t});\n\n\t/** Optional content-projected template for custom navigation. */\n\treadonly stepperNavTpt = contentChild(StepperNavDirective, { read: TemplateRef });\n\n\t/** Optional custom projected previous button. */\n\treadonly previousButton = contentChild(PreviousButtonDirective);\n\n\t/** Optional custom projected next button. */\n\treadonly nextButton = contentChild(NextButtonDirective);\n\n\t/** Optional custom projected submit button. */\n\treadonly submitButton = contentChild(SubmitButtonDirective);\n\n\t/**\n\t * Optional visual and layout configuration for the stepper container.\n\t */\n\treadonly options = input<StepperOptions>({});\n\n\t/**\n\t * Returns the active layout mode.\n\t *\n\t * @returns The configured layout or the vertical default.\n\t */\n\tlayout(): StepperLayout {\n\t\treturn this.options()?.layout ?? StepperLayout.Vertical;\n\t}\n\n\t/**\n\t * Returns whether right-to-left mode is enabled.\n\t *\n\t * @returns `true` when RTL mode is active.\n\t */\n\tisRtl(): boolean {\n\t\treturn this.options()?.rtl ?? false;\n\t}\n\n\t/** Returns the active step component instance or `null` when unavailable. */\n\tget currentStep(): StepComponent | null {\n\t\treturn this.steps()?.[this.currentIndex()] ?? null;\n\t}\n\n\t/** Returns whether host classes enable animated transitions. */\n\thasAnimationClass(): boolean {\n\t\treturn this.#hostRef.nativeElement.classList.contains('stepper--animated');\n\t}\n\n\t/** Returns whether transition direction is forward. */\n\tisForwardAnimation(): boolean {\n\t\treturn this.animationDirection() === StepperAnimationDirection.Forward;\n\t}\n\n\t/** Returns whether transition direction is backward. */\n\tisBackwardAnimation(): boolean {\n\t\treturn this.animationDirection() === StepperAnimationDirection.Backward;\n\t}\n\n\t/** Initializes projected step metadata after content projection. */\n\tngAfterContentInit(): void {\n\t\tthis.initializeSteps();\n\t}\n\n\t/** Clears pending animation frame callbacks on component destroy. */\n\tngOnDestroy(): void {\n\t\tthis.clearAnimationFrame();\n\t}\n\n\t/**\n\t * Triggers initial change detection for projected steps.\n\t */\n\tprivate initializeSteps(): void {\n\t\tthis.#cdr.detectChanges();\n\t}\n\n\t/**\n\t * Navigates to the previous step index.\n\t */\n\tgoToPrevious(): void {\n\t\tthis.goTo(this.currentIndex() - 1);\n\t}\n\n\t/**\n\t * Navigates to the next step index.\n\t */\n\tgoToNext(): void {\n\t\tthis.goTo(this.currentIndex() + 1);\n\t}\n\n\t/**\n\t * Navigates to a specific step index when it is valid.\n\t *\n\t * @param index Target step index.\n\t */\n\tgoTo(index: number): void {\n\t\tif (this.isStepIndexInBounds(index)) {\n\t\t\tconst previousIndex = this.currentIndex();\n\t\t\tif (index === previousIndex) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.animationDirection.set(index > previousIndex ? StepperAnimationDirection.Forward : StepperAnimationDirection.Backward);\n\t\t\tthis.currentIndex.set(index);\n\t\t\tthis.playContentTransition();\n\t\t\tthis.#cdr.detectChanges();\n\t\t\tif (index > previousIndex) {\n\t\t\t\tthis.nextStep.emit(index);\n\t\t\t} else if (index < previousIndex) {\n\t\t\t\tthis.previousStep.emit(index);\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.error(`Invalid step index: ${index}`);\n\t\t}\n\t}\n\n\t/**\n\t * Returns whether the target step can be activated.\n\t *\n\t * @param index Target step index.\n\t * @returns `true` when index is in bounds and the step is not disabled.\n\t */\n\tcanNavigateTo(index: number): boolean {\n\t\treturn this.isStepIndexInBounds(index) && this.isValidStepIndex(index);\n\t}\n\n\t/**\n\t * Completes the stepper workflow and emits the completion event.\n\t */\n\tcomplete(): void {\n\t\tthis.completed.emit();\n\t}\n\n\t/**\n\t * Returns whether a step at the provided index is enabled.\n\t *\n\t * @param index Step index to validate.\n\t * @returns `true` when the step exists and is enabled.\n\t */\n\tisValidStepIndex(index: number): boolean {\n\t\treturn !this.steps()?.[index]?.disabled();\n\t}\n\n\t/**\n\t * Returns whether the provided index is within the steps collection bounds.\n\t *\n\t * @param index Step index to validate.\n\t * @returns `true` when the index points to an existing step.\n\t */\n\tisStepIndexInBounds(index: number): boolean {\n\t\treturn index >= 0 && index < this.steps().length;\n\t}\n\n\t/**\n\t * Starts and schedules the content transition animation lifecycle.\n\t */\n\tprivate playContentTransition(): void {\n\t\tthis.clearAnimationFrame();\n\t\tthis.contentAnimating.set(false);\n\t\tif (!this.hasAnimationClass()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#animationFrameId = globalThis.requestAnimationFrame(() => {\n\t\t\tthis.contentAnimating.set(true);\n\t\t\tthis.#cdr.detectChanges();\n\t\t});\n\t}\n\n\t/**\n\t * Clears the pending animation frame used to trigger content transitions.\n\t */\n\tprivate clearAnimationFrame(): void {\n\t\tif (this.#animationFrameId !== null) {\n\t\t\tglobalThis.cancelAnimationFrame(this.#animationFrameId);\n\t\t\tthis.#animationFrameId = null;\n\t\t}\n\t}\n\n\t/**\n\t * Handles animation end events and resets the active transition state.\n\t *\n\t * @param event DOM animation end event.\n\t */\n\tonContentAnimationEnd(event: AnimationEvent): void {\n\t\tif (event.target !== event.currentTarget) {\n\t\t\treturn;\n\t\t}\n\t\tthis.contentAnimating.set(false);\n\t\tthis.#cdr.detectChanges();\n\t}\n}\n","<!--begin::Nav-->\n<nav class=\"stepper__nav\">\n <ng-container\n [ngTemplateOutlet]=\"stepperNavTpt() || defaultNavTpt\"\n [ngTemplateOutletContext]=\"{ steps: steps(), currentIndex: currentIndex() }\"\n ></ng-container>\n</nav>\n<!--end::Nav-->\n\n<!--begin::Content-->\n<div\n class=\"stepper__content\"\n [class.stepper__content--animated]=\"hasAnimationClass()\"\n [class.stepper__content--animating]=\"contentAnimating()\"\n [class.stepper__content--forward]=\"isForwardAnimation()\"\n [class.stepper__content--backward]=\"isBackwardAnimation()\"\n>\n <div class=\"stepper__content-panel\" (animationend)=\"onContentAnimationEnd($event)\">\n <ng-container\n [ngTemplateOutlet]=\"currentStep?.innerTemplate()\"\n ></ng-container>\n </div>\n</div>\n<!--end::Content-->\n\n<!--begin::Controls-->\n<div class=\"stepper__controls\">\n @if (currentIndex() > 0) {\n <ng-content select=\"button[previousButton]\"></ng-content>\n @if (!previousButton()) {\n <button\n class=\"stepper__button stepper__button--back\"\n (click)=\"goToPrevious()\"\n [disabled]=\"!canNavigateTo(currentIndex() - 1)\"\n >\n @if (isRtl()) {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8594;</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8592;</span>\n }\n {{ backLabel() ?? ('BACK' | translate | ucfirst) }}\n </button>\n }\n }\n\n @if (currentIndex() < steps().length - 1) {\n <ng-content select=\"button[nextButton]\"></ng-content>\n @if (!nextButton()) {\n <button\n class=\"stepper__button stepper__button--next\"\n (click)=\"goToNext()\"\n [disabled]=\"!canNavigateTo(currentIndex() + 1)\"\n >\n {{ continueLabel() ?? ('CONTINUE' | translate | ucfirst) }}\n @if (isRtl()) {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8592;</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">&#8594;</span>\n }\n </button>\n }\n }\n\n @if (currentIndex() === steps().length - 1) {\n <ng-content select=\"button[submitButton]\"></ng-content>\n @if (!submitButton()) {\n <button\n class=\"stepper__button stepper__button--submit\"\n (click)=\"complete()\"\n [disabled]=\"!isValidStepIndex(currentIndex())\"\n >\n {{ submitLabel() ?? ('SUBMIT' | translate | ucfirst) }}\n </button>\n }\n }\n</div>\n<!--end::Controls-->\n\n<!-- begin:default-nav -->\n<ng-template #defaultNavTpt let-steps=\"steps\" let-currentIndex=\"currentIndex\">\n <ul class=\"stepper__nav-list\">\n @for (step of steps; track $index; let i = $index) {\n <li class=\"stepper__nav-item\">\n <ng-container\n\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\tdefaultNavTriggerTpt\n\t\t\t\t\"\n\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\ttitle: step.title(),\n\t\t\t\t\tindex: i,\n\t\t\t\t\tisCurrent: currentIndex === i,\n\t\t\t\t\tisCompleted: i < currentIndex\n\t\t\t\t}\"\n ></ng-container>\n </li>\n }\n </ul>\n</ng-template>\n<!-- end:default-nav -->\n\n<!-- begin:default-nav-trigger -->\n<ng-template\n #defaultNavTriggerTpt\n let-title=\"title\"\n let-index=\"index\"\n let-isCurrent=\"isCurrent\"\n let-isCompleted=\"isCompleted\"\n >\n <button\n class=\"stepper__nav-trigger\"\n [class.stepper__nav-trigger--current]=\"isCurrent\"\n [class.stepper__nav-trigger--completed]=\"isCompleted\"\n [disabled]=\"!canNavigateTo(index)\"\n (click)=\"goTo(index)\"\n >\n @if (title) {\n <span class=\"stepper__nav-title\">{{ title }}</span>\n } @else {\n <span class=\"stepper__nav-title\">Step {{ index + 1 }}</span>\n }\n </button>\n</ng-template>\n<!-- end:default-nav-trigger -->\n","/** English dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'en',\n\tdata: {\n\t\tBACK: 'back',\n\t\tCONTINUE: 'continue',\n\t\tSUBMIT: 'submit'\n\t}\n};\n","/** Castilian dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'es',\n\tdata: {\n\t\tBACK: 'volver',\n\t\tCONTINUE: 'continuar',\n\t\tSUBMIT: 'enviar'\n\t}\n};\n","/** Catalan dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'ca',\n\tdata: {\n\t\tBACK: 'enrere',\n\t\tCONTINUE: 'continua',\n\t\tSUBMIT: 'envia'\n\t}\n};\n","/** Basque dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'eu',\n\tdata: {\n\t\tBACK: 'atzera',\n\t\tCONTINUE: 'jarraitu',\n\t\tSUBMIT: 'bidali'\n\t}\n};\n","/** Galician dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'gl',\n\tdata: {\n\t\tBACK: 'volver',\n\t\tCONTINUE: 'continuar',\n\t\tSUBMIT: 'enviar'\n\t}\n};\n","/** Asturleonese dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'ast',\n\tdata: {\n\t\tBACK: 'tornar',\n\t\tCONTINUE: 'siguir',\n\t\tSUBMIT: 'unviar'\n\t}\n};\n","/** Aragonese dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'an',\n\tdata: {\n\t\tBACK: 'dezaga',\n\t\tCONTINUE: 'continar',\n\t\tSUBMIT: 'ninviar'\n\t}\n};\n","/** German dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'de',\n\tdata: {\n\t\tBACK: 'zuruck',\n\t\tCONTINUE: 'weiter',\n\t\tSUBMIT: 'senden'\n\t}\n};\n","/** Chinese dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'zh',\n\tdata: {\n\t\tBACK: '返回',\n\t\tCONTINUE: '继续',\n\t\tSUBMIT: '提交'\n\t}\n};\n","/** Arabic dictionary for default stepper action labels. */\nexport const locale = {\n\tlang: 'ar',\n\tdata: {\n\t\tBACK: 'رجوع',\n\t\tCONTINUE: 'متابعة',\n\t\tSUBMIT: 'إرسال'\n\t}\n};\n","import { TemplateRef, Directive } from '@angular/core';\n\n/**\n * Marks an `ng-template` as a custom trigger template for an individual step.\n */\n@Directive({\n selector: '[hubStepTrigger] [stepTrigger]'\n})\nexport class StepTriggerDirective {\n\t/** Captured template reference projected into the parent stepper. */\n\tconstructor(public template: TemplateRef<any>) {}\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { HUB_TRANSLATION_CONFIG, HubTranslationService } from 'ng-hub-ui-utils';\nimport { locale as enLocale } from './assets/i18n/en';\nimport { locale as esLocale } from './assets/i18n/es';\nimport { locale as caLocale } from './assets/i18n/ca';\nimport { locale as euLocale } from './assets/i18n/eu';\nimport { locale as glLocale } from './assets/i18n/gl';\nimport { locale as astLocale } from './assets/i18n/ast';\nimport { locale as anLocale } from './assets/i18n/an';\nimport { locale as deLocale } from './assets/i18n/de';\nimport { locale as zhLocale } from './assets/i18n/zh';\nimport { locale as arLocale } from './assets/i18n/ar';\nimport { StepTriggerDirective } from './step-trigger.directive';\nimport { StepComponent } from './step/step.component';\nimport { StepperNavDirective } from './stepper-nav.directive';\nimport { StepperComponent } from './stepper/stepper.component';\nimport { PreviousButtonDirective } from './previous-button.directive';\nimport { NextButtonDirective } from './next-button.directive';\nimport { SubmitButtonDirective } from './submit-button.directive';\nimport { StepperConfig } from './stepper-config';\n\n/** Default language used when no explicit language is provided. */\nconst DEFAULT_LANGUAGE = 'es';\n\n/** Built-in dictionaries shipped with the stepper library. */\nconst STEPPER_DICTIONARIES = {\n\t[enLocale.lang]: enLocale.data,\n\t[esLocale.lang]: esLocale.data,\n\t[caLocale.lang]: caLocale.data,\n\t[euLocale.lang]: euLocale.data,\n\t[glLocale.lang]: glLocale.data,\n\t[astLocale.lang]: astLocale.data,\n\t[anLocale.lang]: anLocale.data,\n\t[deLocale.lang]: deLocale.data,\n\t[zhLocale.lang]: zhLocale.data,\n\t[arLocale.lang]: arLocale.data\n};\n\n/** All stepper building blocks as a convenience array. */\nconst STEPPER_STANDALONE = [\n\tStepperComponent,\n\tStepComponent,\n\tStepTriggerDirective,\n\tStepperNavDirective,\n\tPreviousButtonDirective,\n\tNextButtonDirective,\n\tSubmitButtonDirective\n] as const;\n\n@NgModule({\n\timports: [...STEPPER_STANDALONE],\n\texports: [...STEPPER_STANDALONE]\n})\n/**\n * Angular module that re-exports all stepper standalone building blocks for convenience.\n */\nexport class StepperModule {\n\t/**\n\t * Registers built-in dictionaries and resolves the active translation language.\n\t *\n\t * @param config Optional language and fallback language override.\n\t * @returns Module providers with translation configuration.\n\t */\n\tstatic forRoot(config?: StepperConfig): ModuleWithProviders<StepperModule> {\n\t\treturn {\n\t\t\tngModule: StepperModule,\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tprovide: HUB_TRANSLATION_CONFIG,\n\t\t\t\t\tuseValue: {\n\t\t\t\t\t\tdictionaries: STEPPER_DICTIONARIES,\n\t\t\t\t\t\tlanguage: config?.language ?? DEFAULT_LANGUAGE,\n\t\t\t\t\t\tfallbackLanguage: config?.fallbackLanguage ?? 'en'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tHubTranslationService\n\t\t\t]\n\t\t};\n\t}\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, Renderer2, RendererFactory2, inject } from '@angular/core';\n\n/**\n * Applies runtime CSS variable overrides for the stepper design tokens.\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class StepperThemeService {\n\t/** Angular renderer used to update root-level CSS variables safely. */\n\tprivate renderer: Renderer2;\n\n\t/** Injected document token; SSR-safe alternative to the global `document`. */\n\tprivate readonly document = inject(DOCUMENT);\n\n\t/**\n\t * Creates a renderer instance for dynamic style updates.\n\t *\n\t * @param rendererFactory Angular renderer factory.\n\t */\n\tconstructor(rendererFactory: RendererFactory2) {\n\t\tthis.renderer = rendererFactory.createRenderer(null, null);\n\t}\n\n\t/**\n\t * Applies the provided stepper theme map to CSS custom properties.\n\t *\n\t * @param theme Key-value map of stepper token names and CSS values.\n\t */\n\tsetTheme(theme: { [key: string]: string }) {\n\t\tObject.keys(theme).forEach((key) => {\n\t\t\tthis.renderer.setStyle(this.document.documentElement, `--hub-stepper-${key}`, theme[key]);\n\t\t});\n\t}\n}\n","/*\n * Public API Surface of stepper\n */\nexport * from './lib/stepper/stepper.component';\nexport * from './lib/step/step.component';\nexport * from './lib/stepper.module';\nexport * from './lib/previous-button.directive';\nexport * from './lib/next-button.directive';\nexport * from './lib/submit-button.directive';\nexport * from './lib/step-trigger.directive';\nexport * from './lib/stepper-nav.directive';\nexport * from './lib/services/stepper-theme-service';\nexport * from './lib/stepper/stepper-options';\nexport * from './lib/stepper-config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["locale","enLocale","esLocale","caLocale","euLocale","glLocale","astLocale","anLocale","deLocale","zhLocale","arLocale"],"mappings":"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"}
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ng-hub-ui-stepper",
3
- "version": "21.2.0",
3
+ "version": "22.2.0",
4
4
  "description": "A flexible and customizable stepper component for Angular applications",
5
5
  "keywords": [
6
6
  "angular",
@@ -17,16 +17,16 @@
17
17
  "workflow",
18
18
  "form-wizard"
19
19
  ],
20
- "author": "Carlos Morcillo Fernández <carlos.morcillo@me.com>",
20
+ "author": "Carlos Morcillo <carlos.morcillo@me.com> (https://www.carlosmorcillo.com)",
21
21
  "license": "MIT",
22
22
  "repository": {
23
23
  "type": "git",
24
- "url": "https://github.com/carlos-morcillo/ng-hub-ui-stepper.git"
24
+ "url": "git+https://github.com/carlos-morcillo/ng-hub-ui-stepper.git"
25
25
  },
26
26
  "bugs": {
27
27
  "url": "https://github.com/carlos-morcillo/ng-hub-ui-stepper/issues"
28
28
  },
29
- "homepage": "https://github.com/carlos-morcillo/ng-hub-ui-stepper#readme",
29
+ "homepage": "https://hubui.dev/",
30
30
  "peerDependencies": {
31
31
  "@angular/common": ">=21.1.2",
32
32
  "@angular/core": ">=21.1.2",
@@ -50,5 +50,6 @@
50
50
  "types": "./types/ng-hub-ui-stepper.d.ts",
51
51
  "default": "./fesm2022/ng-hub-ui-stepper.mjs"
52
52
  }
53
- }
53
+ },
54
+ "type": "module"
54
55
  }
@@ -0,0 +1,176 @@
1
+ // ─────────────────────────────────────────────────────────────────────────
2
+ // hub-stepper-theme — one-call theming for `<hub-stepper>`
3
+ // ─────────────────────────────────────────────────────────────────────────
4
+ //
5
+ // Override any of the `--hub-stepper-*` design tokens in a single include.
6
+ // Every parameter is OPTIONAL and defaults to `null`: only the parameters you
7
+ // pass are emitted, so the rest keep the component's defaults. Token-based and
8
+ // self-contained (no Bootstrap dependencies).
9
+ //
10
+ // The semantic `variant` accent is applied automatically; use this mixin to
11
+ // restyle the shell — surfaces, nav pills, controls, spacing — or to set a
12
+ // brand accent on a custom selector.
13
+ //
14
+ // @example
15
+ //
16
+ // @use 'ng-hub-ui-stepper/styles/mixins/stepper-theme' as *;
17
+ //
18
+ // .checkout-stepper {
19
+ // @include hub-stepper-theme(
20
+ // $accent: var(--hub-sys-color-success),
21
+ // $gap: 1.5rem,
22
+ // $nav-link-active-color: #fff,
23
+ // $sidebar-width: 220px
24
+ // );
25
+ // }
26
+ //
27
+ // scss-docs-start hub-stepper-theme
28
+ @mixin hub-stepper-theme(
29
+ // ── Accent & surfaces ──
30
+ $accent: null,
31
+ $surface: null,
32
+ $background: null,
33
+ $text: null,
34
+ $border: null,
35
+ $gap: null,
36
+ $disabled-opacity: null,
37
+ // ── Nav (container) ──
38
+ $nav-bg: null,
39
+ $nav-padding-x: null,
40
+ $nav-padding-y: null,
41
+ $nav-border-width: null,
42
+ $nav-border-color: null,
43
+ $nav-gap: null,
44
+ // ── Nav links / step pills ──
45
+ $nav-link-color: null,
46
+ $nav-link-hover-color: null,
47
+ $nav-link-hover-bg: null,
48
+ $nav-link-active-color: null,
49
+ $nav-link-active-bg: null,
50
+ $nav-link-active-border-color: null,
51
+ $nav-link-disabled-color: null,
52
+ // ── Step trigger (pill) ──
53
+ $trigger-padding-x: null,
54
+ $trigger-padding-y: null,
55
+ $trigger-gap: null,
56
+ $trigger-font-size: null,
57
+ // ── Controls (footer buttons) ──
58
+ $controls-gap: null,
59
+ $controls-justify: null,
60
+ $control-padding-x: null,
61
+ $control-padding-y: null,
62
+ $control-font-size: null,
63
+ // ── Sidebar layout ──
64
+ $sidebar-width: null
65
+ ) {
66
+ // Accent & surfaces
67
+ @if $accent != null {
68
+ // Feed the single accent slot AND re-derive the role family locally, so a
69
+ // brand accent applied via this mixin on a custom selector recomputes
70
+ // `-emphasis` / `-subtle` / `-on` (the `:host` derivations do not cascade
71
+ // to a different selector). No token is duplicated — the slot stays the
72
+ // single source of truth.
73
+ --hub-stepper-accent: #{$accent};
74
+ --hub-stepper-accent-emphasis: color-mix(in oklch, var(--hub-stepper-accent) 80%, var(--hub-sys-color-ink, #212529));
75
+ --hub-stepper-accent-subtle: color-mix(in oklch, var(--hub-stepper-accent) 12%, var(--hub-sys-surface-page, #fff));
76
+ --hub-stepper-accent-on: oklch(from var(--hub-stepper-accent) clamp(0, (0.62 - l) * 1000, 1) 0 h);
77
+ }
78
+ @if $surface != null {
79
+ --hub-stepper-surface-color: #{$surface};
80
+ }
81
+ @if $background != null {
82
+ --hub-stepper-background-color: #{$background};
83
+ }
84
+ @if $text != null {
85
+ --hub-stepper-text-color: #{$text};
86
+ }
87
+ @if $border != null {
88
+ --hub-stepper-border-color: #{$border};
89
+ }
90
+ @if $gap != null {
91
+ --hub-stepper-gap: #{$gap};
92
+ }
93
+ @if $disabled-opacity != null {
94
+ --hub-stepper-disabled-opacity: #{$disabled-opacity};
95
+ }
96
+
97
+ // Nav container
98
+ @if $nav-bg != null {
99
+ --hub-stepper-nav-bg: #{$nav-bg};
100
+ }
101
+ @if $nav-padding-x != null {
102
+ --hub-stepper-nav-padding-x: #{$nav-padding-x};
103
+ }
104
+ @if $nav-padding-y != null {
105
+ --hub-stepper-nav-padding-y: #{$nav-padding-y};
106
+ }
107
+ @if $nav-border-width != null {
108
+ --hub-stepper-nav-border-width: #{$nav-border-width};
109
+ }
110
+ @if $nav-border-color != null {
111
+ --hub-stepper-nav-border-color: #{$nav-border-color};
112
+ }
113
+ @if $nav-gap != null {
114
+ --hub-stepper-nav-gap: #{$nav-gap};
115
+ }
116
+
117
+ // Nav links / step pills
118
+ @if $nav-link-color != null {
119
+ --hub-stepper-nav-link-color: #{$nav-link-color};
120
+ }
121
+ @if $nav-link-hover-color != null {
122
+ --hub-stepper-nav-link-hover-color: #{$nav-link-hover-color};
123
+ }
124
+ @if $nav-link-hover-bg != null {
125
+ --hub-stepper-nav-link-hover-bg: #{$nav-link-hover-bg};
126
+ }
127
+ @if $nav-link-active-color != null {
128
+ --hub-stepper-nav-link-active-color: #{$nav-link-active-color};
129
+ }
130
+ @if $nav-link-active-bg != null {
131
+ --hub-stepper-nav-link-active-bg: #{$nav-link-active-bg};
132
+ }
133
+ @if $nav-link-active-border-color != null {
134
+ --hub-stepper-nav-link-active-border-color: #{$nav-link-active-border-color};
135
+ }
136
+ @if $nav-link-disabled-color != null {
137
+ --hub-stepper-nav-link-disabled-color: #{$nav-link-disabled-color};
138
+ }
139
+
140
+ // Step trigger
141
+ @if $trigger-padding-x != null {
142
+ --hub-stepper-nav-trigger-padding-x: #{$trigger-padding-x};
143
+ }
144
+ @if $trigger-padding-y != null {
145
+ --hub-stepper-nav-trigger-padding-y: #{$trigger-padding-y};
146
+ }
147
+ @if $trigger-gap != null {
148
+ --hub-stepper-nav-trigger-gap: #{$trigger-gap};
149
+ }
150
+ @if $trigger-font-size != null {
151
+ --hub-stepper-nav-trigger-font-size: #{$trigger-font-size};
152
+ }
153
+
154
+ // Controls
155
+ @if $controls-gap != null {
156
+ --hub-stepper-controls-gap: #{$controls-gap};
157
+ }
158
+ @if $controls-justify != null {
159
+ --hub-stepper-controls-justify: #{$controls-justify};
160
+ }
161
+ @if $control-padding-x != null {
162
+ --hub-stepper-control-padding-x: #{$control-padding-x};
163
+ }
164
+ @if $control-padding-y != null {
165
+ --hub-stepper-control-padding-y: #{$control-padding-y};
166
+ }
167
+ @if $control-font-size != null {
168
+ --hub-stepper-control-font-size: #{$control-font-size};
169
+ }
170
+
171
+ // Sidebar layout
172
+ @if $sidebar-width != null {
173
+ --hub-stepper-sidebar-width: #{$sidebar-width};
174
+ }
175
+ }
176
+ // scss-docs-end hub-stepper-theme
@@ -97,10 +97,6 @@ interface StepperOptions {
97
97
  rtl?: boolean;
98
98
  }
99
99
 
100
- /**
101
- * Renders and controls a multi-step workflow.
102
- * It coordinates navigation, state transitions and projected templates for steps and controls.
103
- */
104
100
  declare class StepperComponent implements AfterContentInit, OnDestroy {
105
101
  #private;
106
102
  /** Exposes layout enum values to the template. */
@@ -111,6 +107,18 @@ declare class StepperComponent implements AfterContentInit, OnDestroy {
111
107
  readonly contentAnimating: _angular_core.WritableSignal<boolean>;
112
108
  /** Stores transition direction used by the CSS animation classes. */
113
109
  readonly animationDirection: _angular_core.WritableSignal<StepperAnimationDirection>;
110
+ /**
111
+ * Semantic accent of the stepper: `'primary'` · `'success'` · `'danger'` ·
112
+ * `'warning'` · `'info'`, or any custom string (read as `--hub-sys-color-<variant>`).
113
+ * Re-bases `--hub-stepper-accent`, which drives the active step pill and the
114
+ * next / submit controls. Defaults to primary.
115
+ */
116
+ readonly variant: _angular_core.InputSignal<string | undefined>;
117
+ /**
118
+ * Inline accent for custom (non-built-in) variants — the built-in five are
119
+ * resolved by the SCSS `@each` loop, so this returns `null` for them.
120
+ */
121
+ protected readonly customAccent: _angular_core.Signal<string | null>;
114
122
  /** Optional custom label for the back button. */
115
123
  readonly backLabel: _angular_core.InputSignal<string | null>;
116
124
  /** Optional custom label for the continue button. */
@@ -221,7 +229,7 @@ declare class StepperComponent implements AfterContentInit, OnDestroy {
221
229
  */
222
230
  onContentAnimationEnd(event: AnimationEvent): void;
223
231
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StepperComponent, never>;
224
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StepperComponent, "hub-stepper, hub-ui-stepper, ng80-stepper", never, { "backLabel": { "alias": "backLabel"; "required": false; "isSignal": true; }; "continueLabel": { "alias": "continueLabel"; "required": false; "isSignal": true; }; "submitLabel": { "alias": "submitLabel"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; }, { "completed": "completed"; "previousStep": "previousStep"; "nextStep": "nextStep"; }, ["steps", "stepperNavTpt", "previousButton", "nextButton", "submitButton"], ["button[previousButton]", "button[nextButton]", "button[submitButton]"], true, never>;
232
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StepperComponent, "hub-stepper, hub-ui-stepper, ng80-stepper", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "backLabel": { "alias": "backLabel"; "required": false; "isSignal": true; }; "continueLabel": { "alias": "continueLabel"; "required": false; "isSignal": true; }; "submitLabel": { "alias": "submitLabel"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; }, { "completed": "completed"; "previousStep": "previousStep"; "nextStep": "nextStep"; }, ["steps", "stepperNavTpt", "previousButton", "nextButton", "submitButton"], ["button[previousButton]", "button[nextButton]", "button[submitButton]"], true, never>;
225
233
  }
226
234
 
227
235
  /**
@@ -279,6 +287,8 @@ declare class StepperModule {
279
287
  declare class StepperThemeService {
280
288
  /** Angular renderer used to update root-level CSS variables safely. */
281
289
  private renderer;
290
+ /** Injected document token; SSR-safe alternative to the global `document`. */
291
+ private readonly document;
282
292
  /**
283
293
  * Creates a renderer instance for dynamic style updates.
284
294
  *