ng-hub-ui-stepper 22.8.0 → 22.8.2
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/LICENSE +2 -2
- package/README.md +165 -38
- package/fesm2022/ng-hub-ui-stepper.mjs +36 -21
- package/fesm2022/ng-hub-ui-stepper.mjs.map +1 -1
- package/package.json +2 -2
- package/types/ng-hub-ui-stepper.d.ts +24 -9
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
3
|
+
Copyright (c) 2026 Carlos Morcillo Fernández
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -17,5 +17,5 @@ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
17
17
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
18
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALING IN THE
|
|
21
21
|
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
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.
|
|
9
9
|
|
|
10
10
|
> [!IMPORTANT]
|
|
11
|
-
>
|
|
11
|
+
> Version `22.8.2` targets **Angular 21** and uses the **Signals** architecture shared across `ng-hub-ui`.
|
|
12
12
|
|
|
13
13
|
## Documentation and Live Examples
|
|
14
14
|
|
|
@@ -52,11 +52,15 @@ This library is part of the **ng-hub-ui** ecosystem:
|
|
|
52
52
|
- [Linear Stepper](#linear-stepper)
|
|
53
53
|
- [Custom Navigation](#custom-navigation)
|
|
54
54
|
- [Custom Buttons](#custom-buttons)
|
|
55
|
+
- [Step transitions](#step-transitions)
|
|
55
56
|
- [API Reference](#api-reference)
|
|
56
|
-
- [StepperComponent](#steppercomponent)
|
|
57
|
-
- [StepComponent](#stepcomponent)
|
|
57
|
+
- [StepperComponent](#steppercomponent-hub-stepper)
|
|
58
|
+
- [StepComponent](#stepcomponent-hub-step)
|
|
58
59
|
- [Directives](#directives)
|
|
60
|
+
- [Host classes](#host-classes)
|
|
61
|
+
- [Services](#services)
|
|
59
62
|
- [Interfaces](#interfaces)
|
|
63
|
+
- [Internationalization](#internationalization)
|
|
60
64
|
- [Styling](#styling)
|
|
61
65
|
- [Contributing](#contributing)
|
|
62
66
|
- [License](#license)
|
|
@@ -64,13 +68,18 @@ This library is part of the **ng-hub-ui** ecosystem:
|
|
|
64
68
|
## Features
|
|
65
69
|
|
|
66
70
|
- 🚀 **Angular 21+ Built-in**: Uses Signals and new control flow syntax.
|
|
67
|
-
- 🎨 **Highly Customizable**: Easy to theme via CSS variables and custom templates.
|
|
71
|
+
- 🎨 **Highly Customizable**: Easy to theme via CSS variables, the `hub-stepper-theme()` Sass mixin and custom templates.
|
|
68
72
|
- ♿ **Accessible**: WAI-ARIA tablist rail with full keyboard navigation.
|
|
69
73
|
- 🔢 **Multi-layout**: Supports Vertical, Sidebar, and RTL modes.
|
|
70
|
-
- 🔄 **Smooth Transitions**:
|
|
74
|
+
- 🔄 **Smooth Transitions**: Opt-in CSS animations, enabled with the `stepper--animated` host class (see [Step transitions](#step-transitions)). No `@angular/animations` dependency.
|
|
71
75
|
- 🧩 **Flexible Controls**: Use default buttons or project your own.
|
|
72
76
|
- ✂️ **Opt-in title truncation + tooltip**: set `truncateTitles` to clip long nav titles (bounded by `--hub-stepper-nav-title-max-width`) and reveal the full text on hover — hub-ui tooltip by default, swappable with `provideHubTooltip`. Requires `ng-hub-ui-utils >= 22.6.0` + `@use 'ng-hub-ui-utils/styles/tooltip';`.
|
|
73
77
|
|
|
78
|
+
> ℹ️ **What the stepper does not do**: it never inspects your forms. `canNavigateTo()` answers on the
|
|
79
|
+
> step's `disabled` input and nothing else, so an "advance only when this step is valid" rule lives in
|
|
80
|
+
> your component — bind `[disabled]` on the following step to whatever your form says (see
|
|
81
|
+
> [Linear Stepper](#linear-stepper)).
|
|
82
|
+
|
|
74
83
|
> ♿ **Accessibility model**: the step rail is a WAI-ARIA `tablist` (each trigger a `tab`, each step content a `tabpanel`) with a roving tabindex, so it is a single Tab stop. Arrow keys move focus between enabled steps (skipping disabled ones, wrapping), `Home`/`End` jump to the first/last enabled step, and `Enter`/`Space` activates the focused step under the same rules as clicking it. The rail's accessible name comes from the `railLabel` input (default `'Steps'`).
|
|
75
84
|
|
|
76
85
|
## Installation
|
|
@@ -81,19 +90,27 @@ npm install ng-hub-ui-stepper
|
|
|
81
90
|
|
|
82
91
|
## Usage (Quick Start)
|
|
83
92
|
|
|
84
|
-
Import the
|
|
93
|
+
Import the standalone building blocks your template uses:
|
|
85
94
|
|
|
86
95
|
```typescript
|
|
87
|
-
import {
|
|
96
|
+
import { StepComponent, StepperComponent } from 'ng-hub-ui-stepper';
|
|
88
97
|
|
|
89
98
|
@Component({
|
|
90
99
|
standalone: true,
|
|
91
|
-
imports: [
|
|
100
|
+
imports: [StepperComponent, StepComponent],
|
|
92
101
|
// ...
|
|
93
102
|
})
|
|
94
103
|
export class YourComponent { }
|
|
95
104
|
```
|
|
96
105
|
|
|
106
|
+
The rest of the surface — `StepTriggerDirective`, `StepperNavDirective`, `PreviousButtonDirective`,
|
|
107
|
+
`NextButtonDirective` and `SubmitButtonDirective` — is imported the same way, one by one, as each
|
|
108
|
+
template needs it.
|
|
109
|
+
|
|
110
|
+
> **`StepperModule` is deprecated and will be removed in 23.0.0.** It only re-exports the seven
|
|
111
|
+
> building blocks above, so importing them directly is the whole migration. `StepperModule.forRoot()`
|
|
112
|
+
> goes with it — see [Internationalization](#internationalization).
|
|
113
|
+
|
|
97
114
|
In your template:
|
|
98
115
|
|
|
99
116
|
```html
|
|
@@ -135,28 +152,40 @@ Control navigation by enabling/disabling steps programmatically.
|
|
|
135
152
|
|
|
136
153
|
### Custom Navigation
|
|
137
154
|
|
|
138
|
-
|
|
155
|
+
Mark an `ng-template` with the `hubStepperNav` (or `stepperNav`) directive and it replaces the whole
|
|
156
|
+
built-in rail. The context gives you `steps` — the projected `StepComponent` instances, so `title` and
|
|
157
|
+
`disabled` are signals — and `currentIndex`. A template reference on the stepper gets you `goTo()`.
|
|
139
158
|
|
|
140
159
|
```html
|
|
141
|
-
<hub-stepper>
|
|
142
|
-
<
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
160
|
+
<hub-stepper #stepper>
|
|
161
|
+
<ng-template hubStepperNav let-steps="steps" let-currentIndex="currentIndex">
|
|
162
|
+
<ol class="my-custom-nav">
|
|
163
|
+
@for (step of steps; track step; let i = $index) {
|
|
164
|
+
<li>
|
|
165
|
+
<button
|
|
166
|
+
type="button"
|
|
167
|
+
[class.active]="i === currentIndex"
|
|
168
|
+
[disabled]="!stepper.canNavigateTo(i)"
|
|
169
|
+
(click)="stepper.goTo(i)">
|
|
170
|
+
{{ step.title() || 'Step ' + (i + 1) }}
|
|
171
|
+
</button>
|
|
172
|
+
</li>
|
|
173
|
+
}
|
|
174
|
+
</ol>
|
|
175
|
+
</ng-template>
|
|
151
176
|
|
|
152
177
|
<hub-step title="A">...</hub-step>
|
|
153
178
|
<hub-step title="B">...</hub-step>
|
|
154
179
|
</hub-stepper>
|
|
155
180
|
```
|
|
156
181
|
|
|
182
|
+
> Replacing the rail also replaces its accessibility: the WAI-ARIA tablist, the roving tabindex and the
|
|
183
|
+
> arrow-key handling described above belong to the built-in rail. A custom template owns its own semantics.
|
|
184
|
+
|
|
157
185
|
### Custom Buttons
|
|
158
186
|
|
|
159
|
-
Project your own buttons to override the default footer.
|
|
187
|
+
Project your own buttons to override the default footer. Each directive wires the click and keeps the
|
|
188
|
+
button disabled while the move is unavailable.
|
|
160
189
|
|
|
161
190
|
```html
|
|
162
191
|
<hub-stepper>
|
|
@@ -168,38 +197,101 @@ Project your own buttons to override the default footer.
|
|
|
168
197
|
</hub-stepper>
|
|
169
198
|
```
|
|
170
199
|
|
|
200
|
+
### Step transitions
|
|
201
|
+
|
|
202
|
+
Transitions are plain CSS and opt-in: add `stepper--animated` to the host, then pick the flavour with
|
|
203
|
+
`stepper--anim-slide` (the default when neither is set) or `stepper--anim-fade`. Duration comes from
|
|
204
|
+
`--hub-stepper-animation-duration`.
|
|
205
|
+
|
|
206
|
+
```html
|
|
207
|
+
<hub-stepper
|
|
208
|
+
class="stepper--animated stepper--anim-fade"
|
|
209
|
+
[style.--hub-stepper-animation-duration.ms]="240"
|
|
210
|
+
>
|
|
211
|
+
<hub-step title="Profile">...</hub-step>
|
|
212
|
+
<hub-step title="Summary">...</hub-step>
|
|
213
|
+
</hub-stepper>
|
|
214
|
+
```
|
|
215
|
+
|
|
171
216
|
## API Reference
|
|
172
217
|
|
|
173
218
|
### StepperComponent (`hub-stepper`)
|
|
174
219
|
|
|
175
220
|
| Input | Type | Default | Description |
|
|
176
221
|
|---|---|---|---|
|
|
177
|
-
| `
|
|
178
|
-
| `
|
|
179
|
-
| `
|
|
222
|
+
| `variant` | `string` | `undefined` (renders as primary) | Semantic accent for the active step pill and the next / submit controls. Built-in values: `primary`, `secondary`, `success`, `danger`, `warning`, `info`, `neutral`, `light`, `dark`. Any other string is also accepted and resolves through `--hub-sys-color-<variant>`. |
|
|
223
|
+
| `backLabel` | `string \| null` | `null` | Overrides the back button label. While `null`, the translated `BACK` label is used. |
|
|
224
|
+
| `continueLabel` | `string \| null` | `null` | Overrides the continue button label. While `null`, the translated `CONTINUE` label is used. |
|
|
225
|
+
| `submitLabel` | `string \| null` | `null` | Overrides the submit button label. While `null`, the translated `SUBMIT` label is used. |
|
|
226
|
+
| `truncateTitles` | `boolean` | `false` | Clips each rail title to `--hub-stepper-nav-title-max-width` (default `12rem`) and reveals the full text as a tooltip when it overflows. |
|
|
180
227
|
| `railLabel` | `string` | `'Steps'` | Accessible name of the step rail tablist. |
|
|
181
|
-
| `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>`. |
|
|
182
228
|
| `options` | `StepperOptions` | `{}` | Visual and layout configuration. |
|
|
183
229
|
|
|
184
230
|
| Output | Type | Description |
|
|
185
231
|
|---|---|---|
|
|
186
|
-
| `completed` | `
|
|
187
|
-
| `previousStep` | `
|
|
188
|
-
| `nextStep` | `
|
|
232
|
+
| `completed` | `OutputEmitterRef<void>` | Emitted when the last step is completed. |
|
|
233
|
+
| `previousStep` | `OutputEmitterRef<number>` | Emitted when moving back. Passes the new index. |
|
|
234
|
+
| `nextStep` | `OutputEmitterRef<number>` | Emitted when moving forward. Passes the new index. |
|
|
235
|
+
|
|
236
|
+
Public members you can reach through a template reference (`<hub-stepper #stepper>`):
|
|
237
|
+
|
|
238
|
+
| Member | Signature | Description |
|
|
239
|
+
|---|---|---|
|
|
240
|
+
| `currentIndex` | `WritableSignal<number>` | Index of the active step. |
|
|
241
|
+
| `steps` | `Signal<readonly StepComponent[]>` | The projected steps, in order. |
|
|
242
|
+
| `currentStep` | `StepComponent \| null` | The active step instance. |
|
|
243
|
+
| `goTo` | `(index: number) => void` | Activates a step. Only bounds are checked — it does not consult `canNavigateTo`, so a programmatic jump can land on a `disabled` step. |
|
|
244
|
+
| `goToPrevious` / `goToNext` | `() => void` | Moves one step back / forward. |
|
|
245
|
+
| `canNavigateTo` | `(index: number) => boolean` | `true` when the index exists and its step is not `disabled`. |
|
|
246
|
+
| `complete` | `() => void` | Emits `completed`. |
|
|
189
247
|
|
|
190
248
|
### StepComponent (`hub-step`)
|
|
191
249
|
|
|
192
250
|
| Input | Type | Default | Description |
|
|
193
251
|
|---|---|---|---|
|
|
194
|
-
| `title` | `string` | `
|
|
195
|
-
| `disabled` | `boolean` | `false` | Prevents navigation to this step. |
|
|
252
|
+
| `title` | `string \| undefined` | `undefined` | Text displayed in the rail. Falls back to `Step N` when omitted. |
|
|
253
|
+
| `disabled` | `boolean` | `false` | Prevents navigation to this step through the rail and the built-in controls. |
|
|
254
|
+
|
|
255
|
+
`index` is **not** an input: the parent stepper assigns it. Reading it (`step.index()`) is fine; binding it is not.
|
|
196
256
|
|
|
197
257
|
### Directives
|
|
198
258
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
259
|
+
| Directive | Selectors | Applies to | Purpose |
|
|
260
|
+
|---|---|---|---|
|
|
261
|
+
| `NextButtonDirective` | `button[nextButton]`, `button[continueButton]` | `<button>` | Calls `goToNext()` and disables the button when there is no enabled next step. |
|
|
262
|
+
| `PreviousButtonDirective` | `button[previousButton]`, `button[backButton]` | `<button>` | Calls `goToPrevious()` and disables the button when there is no enabled previous step. |
|
|
263
|
+
| `SubmitButtonDirective` | `button[submitButton]` | `<button>` | Calls `complete()` and disables the button while the current step is `disabled`. |
|
|
264
|
+
| `StepperNavDirective` | `[hubStepperNav]`, `[stepperNav]` | `<ng-template>` | Replaces the built-in rail. Context: `steps`, `currentIndex`. |
|
|
265
|
+
| `StepTriggerDirective` | `[hubStepTrigger]`, `[stepTrigger]` | `<ng-template>` | Captures a per-step trigger template. **Exported but not yet rendered** — the stepper draws its own triggers; this is groundwork, and applying it changes nothing today. |
|
|
266
|
+
|
|
267
|
+
### Host classes
|
|
268
|
+
|
|
269
|
+
Set these on `<hub-stepper>` itself; they are read by the stylesheet, not by inputs.
|
|
270
|
+
|
|
271
|
+
| Class | Effect |
|
|
272
|
+
|---|---|
|
|
273
|
+
| `stepper--animated` | Enables the CSS transition between step panels. Without it, panels swap instantly. |
|
|
274
|
+
| `stepper--anim-slide` | Slide transition (also the default when only `stepper--animated` is set). |
|
|
275
|
+
| `stepper--anim-fade` | Fade transition instead of the slide. |
|
|
276
|
+
|
|
277
|
+
### Services
|
|
278
|
+
|
|
279
|
+
#### `StepperThemeService`
|
|
280
|
+
|
|
281
|
+
Provided in root. Writes `--hub-stepper-*` custom properties on `documentElement`, for themes decided at
|
|
282
|
+
runtime (a tenant colour arriving from an API, say). Keys are passed **without** the `--hub-stepper-`
|
|
283
|
+
prefix, which the service adds:
|
|
284
|
+
|
|
285
|
+
```typescript
|
|
286
|
+
inject(StepperThemeService).setTheme({
|
|
287
|
+
accent: '#7c3aed',
|
|
288
|
+
'nav-link-active-color': '#ffffff',
|
|
289
|
+
gap: '1.5rem'
|
|
290
|
+
});
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
For a theme known at build time, prefer the [`hub-stepper-theme()` mixin](#sass-mixin): it scopes to a
|
|
294
|
+
selector instead of the document root.
|
|
203
295
|
|
|
204
296
|
### Interfaces
|
|
205
297
|
|
|
@@ -211,15 +303,50 @@ interface StepperOptions {
|
|
|
211
303
|
}
|
|
212
304
|
```
|
|
213
305
|
|
|
306
|
+
#### `StepperConfig`
|
|
307
|
+
|
|
308
|
+
Accepted by the deprecated `StepperModule.forRoot()`, which registers the bundled dictionaries:
|
|
309
|
+
|
|
310
|
+
```typescript
|
|
311
|
+
interface StepperConfig {
|
|
312
|
+
language?: string; // default 'es'
|
|
313
|
+
fallbackLanguage?: string; // default 'en'
|
|
314
|
+
}
|
|
315
|
+
```
|
|
316
|
+
|
|
214
317
|
## Internationalization
|
|
215
318
|
|
|
216
|
-
The built-in back, continue and submit labels
|
|
319
|
+
The built-in back, continue and submit labels go through `TranslatePipe` from `ng-hub-ui-utils`. There are
|
|
320
|
+
two ways to feed them, and they can be combined.
|
|
321
|
+
|
|
322
|
+
**The bundled dictionaries — deprecated.** `StepperModule.forRoot()` registers translations for `en`,
|
|
323
|
+
`es`, `ca`, `eu`, `gl`, `ast`, `an`, `de`, `zh` and `ar`:
|
|
217
324
|
|
|
218
325
|
```typescript
|
|
219
|
-
|
|
220
|
-
// Expected keys: BACK, CONTINUE and SUBMIT.
|
|
326
|
+
imports: [StepperModule.forRoot({ language: 'en', fallbackLanguage: 'en' })];
|
|
221
327
|
```
|
|
222
328
|
|
|
329
|
+
It is the only way to reach those dictionaries, and it is **removed in 23.0.0** along with the module.
|
|
330
|
+
The dictionaries themselves are not exported, so they cannot be handed to a provider function: use the
|
|
331
|
+
application dictionary below, or name the three controls through the `backLabel` / `continueLabel` /
|
|
332
|
+
`submitLabel` inputs. Note that `forRoot()` is also what provides `HubTranslationService`, which
|
|
333
|
+
`TranslatePipe` injects — an application that drops it must provide the service another way, which
|
|
334
|
+
both `provideHubTranslation()` and `provideHubTranslationAdapter()` do.
|
|
335
|
+
|
|
336
|
+
**Your application dictionary.** Configure `provideHubTranslationAdapter()` once in `app.config.ts`; its
|
|
337
|
+
reactive dictionary updates the rendered navigation automatically. The component provides
|
|
338
|
+
`HUB_TRANSLATION_PREFIX` as `HUBUI.STEPPER`, so the namespaced keys are looked up first and the bare keys
|
|
339
|
+
remain as the fallback:
|
|
340
|
+
|
|
341
|
+
```typescript
|
|
342
|
+
// Preferred — namespaced, so the stepper reserves no generic top-level keys:
|
|
343
|
+
// HUBUI.STEPPER.BACK, HUBUI.STEPPER.CONTINUE, HUBUI.STEPPER.SUBMIT
|
|
344
|
+
// Still honoured for existing flat dictionaries:
|
|
345
|
+
// BACK, CONTINUE, SUBMIT
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
Per instance, `backLabel` / `continueLabel` / `submitLabel` win over both.
|
|
349
|
+
|
|
223
350
|
## Styling
|
|
224
351
|
|
|
225
352
|
Customize the component using CSS variables. For a complete list of available tokens, see the [CSS Variables Reference](docs/css-variables-reference.md).
|
|
@@ -234,7 +361,7 @@ Customize the component using CSS variables. For a complete list of available to
|
|
|
234
361
|
|
|
235
362
|
### Semantic accent
|
|
236
363
|
|
|
237
|
-
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:
|
|
364
|
+
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-hub-stepper)), but you can also override the token directly:
|
|
238
365
|
|
|
239
366
|
```css
|
|
240
367
|
.my-stepper {
|
|
@@ -247,7 +374,7 @@ The `--hub-stepper-accent` token drives the active step pill and the next / subm
|
|
|
247
374
|
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:
|
|
248
375
|
|
|
249
376
|
```scss
|
|
250
|
-
@use 'ng-hub-ui-stepper/styles
|
|
377
|
+
@use 'ng-hub-ui-stepper/styles' as *;
|
|
251
378
|
|
|
252
379
|
.checkout-stepper {
|
|
253
380
|
@include hub-stepper-theme(
|
|
@@ -13,7 +13,7 @@ class NextButtonDirective {
|
|
|
13
13
|
disabled = computed(() => {
|
|
14
14
|
const nextIndex = this.stepper.currentIndex() + 1;
|
|
15
15
|
const nextStep = this.stepper.steps()?.[nextIndex];
|
|
16
|
-
return !nextStep || nextStep.disabled;
|
|
16
|
+
return !nextStep || nextStep.disabled();
|
|
17
17
|
}, /* @ts-ignore */
|
|
18
18
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
19
19
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: NextButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
@@ -42,7 +42,7 @@ class PreviousButtonDirective {
|
|
|
42
42
|
disabled = computed(() => {
|
|
43
43
|
const prevIndex = this.stepper.currentIndex() - 1;
|
|
44
44
|
const prevStep = this.stepper.steps()?.[prevIndex];
|
|
45
|
-
return !prevStep || prevStep.disabled;
|
|
45
|
+
return !prevStep || prevStep.disabled();
|
|
46
46
|
}, /* @ts-ignore */
|
|
47
47
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
48
48
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: PreviousButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
@@ -89,26 +89,20 @@ class StepComponent {
|
|
|
89
89
|
get animationState() {
|
|
90
90
|
return '*';
|
|
91
91
|
}
|
|
92
|
-
/** Runs initial validation checks for component inputs. */
|
|
93
|
-
ngOnInit() {
|
|
94
|
-
if (!this.title()) {
|
|
95
|
-
console.warn('StepComponent: title is recommended for accessibility');
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
92
|
/**
|
|
99
93
|
* Returns whether the step can be navigated to.
|
|
100
94
|
*
|
|
101
95
|
* @returns `true` when the step is enabled.
|
|
102
96
|
*/
|
|
103
97
|
isAccessible() {
|
|
104
|
-
return !this.disabled;
|
|
98
|
+
return !this.disabled();
|
|
105
99
|
}
|
|
106
100
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: StepComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
107
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.8", type: StepComponent, isStandalone: true, selector: "hub-step, hub-ui-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
|
|
101
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.8", type: StepComponent, isStandalone: true, selector: "hub-step, hub-ui-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 class=\"step__content\" [attr.data-step-index]=\"index()\" [attr.aria-label]=\"title()\">\n\t\t<ng-content></ng-content>\n\t</div>\n</ng-template>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
108
102
|
}
|
|
109
103
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: StepComponent, decorators: [{
|
|
110
104
|
type: Component,
|
|
111
|
-
args: [{ selector: 'hub-step, hub-ui-step', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #innerTemplate>\n\t<div
|
|
105
|
+
args: [{ selector: 'hub-step, hub-ui-step', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #innerTemplate>\n\t<div class=\"step__content\" [attr.data-step-index]=\"index()\" [attr.aria-label]=\"title()\">\n\t\t<ng-content></ng-content>\n\t</div>\n</ng-template>\n" }]
|
|
112
106
|
}], 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 }] }] } });
|
|
113
107
|
|
|
114
108
|
/**
|
|
@@ -177,7 +171,17 @@ var StepperLayout;
|
|
|
177
171
|
* It coordinates navigation, state transitions and projected templates for steps and controls.
|
|
178
172
|
*/
|
|
179
173
|
/** Variants with exact design-system token coverage via the SCSS `@each` loop. */
|
|
180
|
-
const STEPPER_BUILT_IN_VARIANTS = new Set([
|
|
174
|
+
const STEPPER_BUILT_IN_VARIANTS = new Set([
|
|
175
|
+
'primary',
|
|
176
|
+
'secondary',
|
|
177
|
+
'success',
|
|
178
|
+
'danger',
|
|
179
|
+
'warning',
|
|
180
|
+
'info',
|
|
181
|
+
'neutral',
|
|
182
|
+
'light',
|
|
183
|
+
'dark'
|
|
184
|
+
]);
|
|
181
185
|
/** Monotonic counter used to build unique, stable per-instance ARIA ids. */
|
|
182
186
|
let nextStepperInstanceId = 0;
|
|
183
187
|
class StepperComponent {
|
|
@@ -205,15 +209,16 @@ class StepperComponent {
|
|
|
205
209
|
focusedIndex = signal(null, /* @ts-ignore */
|
|
206
210
|
...(ngDevMode ? [{ debugName: "focusedIndex" }] : /* istanbul ignore next */ []));
|
|
207
211
|
/**
|
|
208
|
-
* Semantic accent of the stepper: `'primary'` · `'
|
|
209
|
-
* `'warning'` · `'info'
|
|
212
|
+
* Semantic accent of the stepper: `'primary'` · `'secondary'` · `'success'` ·
|
|
213
|
+
* `'danger'` · `'warning'` · `'info'` · `'neutral'` · `'light'` · `'dark'`, or
|
|
214
|
+
* any custom string (read as `--hub-sys-color-<variant>`).
|
|
210
215
|
* Re-bases `--hub-stepper-accent`, which drives the active step pill and the
|
|
211
216
|
* next / submit controls. Defaults to primary.
|
|
212
217
|
*/
|
|
213
218
|
variant = input(/* @ts-ignore */
|
|
214
219
|
...(ngDevMode ? [undefined, { debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
215
220
|
/**
|
|
216
|
-
* Inline accent for custom (non-built-in) variants — the built-in
|
|
221
|
+
* Inline accent for custom (non-built-in) variants — the built-in nine are
|
|
217
222
|
* resolved by the SCSS `@each` loop, so this returns `null` for them.
|
|
218
223
|
*
|
|
219
224
|
* Any custom value is accepted: a bareword (semantic name / registered accent /
|
|
@@ -504,9 +509,6 @@ class StepperComponent {
|
|
|
504
509
|
this.previousStep.emit(index);
|
|
505
510
|
}
|
|
506
511
|
}
|
|
507
|
-
else {
|
|
508
|
-
console.error(`Invalid step index: ${index}`);
|
|
509
|
-
}
|
|
510
512
|
}
|
|
511
513
|
/**
|
|
512
514
|
* Returns whether the target step can be activated.
|
|
@@ -577,7 +579,7 @@ class StepperComponent {
|
|
|
577
579
|
this.#cdr.detectChanges();
|
|
578
580
|
}
|
|
579
581
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: StepperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
580
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: StepperComponent, isStandalone: true, selector: "hub-stepper, hub-ui-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 }, truncateTitles: { classPropertyName: "truncateTitles", publicName: "truncateTitles", isSignal: true, isRequired: false, transformFunction: null }, railLabel: { classPropertyName: "railLabel", publicName: "railLabel", 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()", "class.stepper--truncate-titles": "truncateTitles()", "attr.data-variant": "variant() ?? null", "style.--hub-stepper-accent": "customAccent()" }, classAttribute: "stepper" }, providers: [{ provide: HUB_TRANSLATION_PREFIX, useValue: 'HUBUI.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\n class=\"stepper__content-panel\"\n role=\"tabpanel\"\n [id]=\"panelId(currentIndex())\"\n [attr.aria-labelledby]=\"tabId(currentIndex())\"\n (animationend)=\"onContentAnimationEnd($event)\"\n >\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\">→</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">←</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\">←</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">→</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\n class=\"stepper__nav-list\"\n role=\"tablist\"\n [attr.aria-orientation]=\"railOrientation()\"\n [attr.aria-label]=\"railLabel()\"\n >\n @for (step of steps; track $index; let i = $index) {\n <li class=\"stepper__nav-item\" role=\"presentation\">\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 type=\"button\"\n class=\"stepper__nav-trigger\"\n role=\"tab\"\n [id]=\"tabId(index)\"\n [class.stepper__nav-trigger--current]=\"isCurrent\"\n [class.stepper__nav-trigger--completed]=\"isCompleted\"\n [attr.aria-selected]=\"isCurrent\"\n [attr.aria-current]=\"isCurrent ? 'step' : null\"\n [attr.aria-controls]=\"panelId(index)\"\n [attr.aria-disabled]=\"canNavigateTo(index) ? null : true\"\n [attr.tabindex]=\"tabIndexFor(index)\"\n [disabled]=\"!canNavigateTo(index)\"\n (click)=\"goTo(index)\"\n (keydown)=\"onRailKeydown($event, index)\"\n >\n @if (title) {\n <span class=\"stepper__nav-title\" [hubOverflowTooltip]=\"title\">{{ title }}</span>\n } @else {\n <span class=\"stepper__nav-title\" [hubOverflowTooltip]=\"'Step ' + (index + 1)\">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, #0d6efd);--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-indicator-size: calc(var(--hub-ref-space-3, 1rem) * 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, 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)}:host(.stepper--truncate-titles) .stepper__nav-title{display:inline-block;max-inline-size:var(--hub-stepper-nav-title-max-width, 12rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: HubOverflowTooltipDirective, selector: "[hubOverflowTooltip]", inputs: ["hubOverflowTooltip", "placement"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: UcfirstPipe, name: "ucfirst" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
582
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: StepperComponent, isStandalone: true, selector: "hub-stepper, hub-ui-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 }, truncateTitles: { classPropertyName: "truncateTitles", publicName: "truncateTitles", isSignal: true, isRequired: false, transformFunction: null }, railLabel: { classPropertyName: "railLabel", publicName: "railLabel", 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()", "class.stepper--truncate-titles": "truncateTitles()", "attr.data-variant": "variant() ?? null", "style.--hub-stepper-accent": "customAccent()" }, classAttribute: "stepper" }, providers: [{ provide: HUB_TRANSLATION_PREFIX, useValue: 'HUBUI.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\t<ng-container\n\t\t[ngTemplateOutlet]=\"stepperNavTpt() || defaultNavTpt\"\n\t\t[ngTemplateOutletContext]=\"{ steps: steps(), currentIndex: currentIndex() }\"\n\t></ng-container>\n</nav>\n<!--end::Nav-->\n\n<!--begin::Content-->\n<div\n\tclass=\"stepper__content\"\n\t[class.stepper__content--animated]=\"hasAnimationClass()\"\n\t[class.stepper__content--animating]=\"contentAnimating()\"\n\t[class.stepper__content--forward]=\"isForwardAnimation()\"\n\t[class.stepper__content--backward]=\"isBackwardAnimation()\"\n>\n\t<div\n\t\tclass=\"stepper__content-panel\"\n\t\trole=\"tabpanel\"\n\t\t[id]=\"panelId(currentIndex())\"\n\t\t[attr.aria-labelledby]=\"tabId(currentIndex())\"\n\t\t(animationend)=\"onContentAnimationEnd($event)\"\n\t>\n\t\t<ng-container [ngTemplateOutlet]=\"currentStep?.innerTemplate()\"></ng-container>\n\t</div>\n</div>\n<!--end::Content-->\n\n<!--begin::Controls-->\n<div class=\"stepper__controls\">\n\t@if (currentIndex() > 0) {\n\t\t<ng-content select=\"button[previousButton]\"></ng-content>\n\t\t@if (!previousButton()) {\n\t\t\t<button\n\t\t\t\tclass=\"stepper__button stepper__button--back\"\n\t\t\t\t(click)=\"goToPrevious()\"\n\t\t\t\t[disabled]=\"!canNavigateTo(currentIndex() - 1)\"\n\t\t\t>\n\t\t\t\t@if (isRtl()) {\n\t\t\t\t\t<span class=\"stepper__button-icon\" aria-hidden=\"true\">→</span>\n\t\t\t\t} @else {\n\t\t\t\t\t<span class=\"stepper__button-icon\" aria-hidden=\"true\">←</span>\n\t\t\t\t}\n\t\t\t\t{{ backLabel() ?? ('BACK' | translate | ucfirst) }}\n\t\t\t</button>\n\t\t}\n\t}\n\n\t@if (currentIndex() < steps().length - 1) {\n\t\t<ng-content select=\"button[nextButton]\"></ng-content>\n\t\t@if (!nextButton()) {\n\t\t\t<button\n\t\t\t\tclass=\"stepper__button stepper__button--next\"\n\t\t\t\t(click)=\"goToNext()\"\n\t\t\t\t[disabled]=\"!canNavigateTo(currentIndex() + 1)\"\n\t\t\t>\n\t\t\t\t{{ continueLabel() ?? ('CONTINUE' | translate | ucfirst) }}\n\t\t\t\t@if (isRtl()) {\n\t\t\t\t\t<span class=\"stepper__button-icon\" aria-hidden=\"true\">←</span>\n\t\t\t\t} @else {\n\t\t\t\t\t<span class=\"stepper__button-icon\" aria-hidden=\"true\">→</span>\n\t\t\t\t}\n\t\t\t</button>\n\t\t}\n\t}\n\n\t@if (currentIndex() === steps().length - 1) {\n\t\t<ng-content select=\"button[submitButton]\"></ng-content>\n\t\t@if (!submitButton()) {\n\t\t\t<button\n\t\t\t\tclass=\"stepper__button stepper__button--submit\"\n\t\t\t\t(click)=\"complete()\"\n\t\t\t\t[disabled]=\"!isValidStepIndex(currentIndex())\"\n\t\t\t>\n\t\t\t\t{{ submitLabel() ?? ('SUBMIT' | translate | ucfirst) }}\n\t\t\t</button>\n\t\t}\n\t}\n</div>\n<!--end::Controls-->\n\n<!-- begin:default-nav -->\n<ng-template #defaultNavTpt let-steps=\"steps\" let-currentIndex=\"currentIndex\">\n\t<ul class=\"stepper__nav-list\" role=\"tablist\" [attr.aria-orientation]=\"railOrientation()\" [attr.aria-label]=\"railLabel()\">\n\t\t@for (step of steps; track $index; let i = $index) {\n\t\t\t<li class=\"stepper__nav-item\" role=\"presentation\">\n\t\t\t\t<ng-container\n\t\t\t\t\t[ngTemplateOutlet]=\"defaultNavTriggerTpt\"\n\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\ttitle: step.title(),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tisCurrent: currentIndex === i,\n\t\t\t\t\t\tisCompleted: i < currentIndex\n\t\t\t\t\t}\"\n\t\t\t\t></ng-container>\n\t\t\t</li>\n\t\t}\n\t</ul>\n</ng-template>\n<!-- end:default-nav -->\n\n<!-- begin:default-nav-trigger -->\n<ng-template #defaultNavTriggerTpt let-title=\"title\" let-index=\"index\" let-isCurrent=\"isCurrent\" let-isCompleted=\"isCompleted\">\n\t<button\n\t\ttype=\"button\"\n\t\tclass=\"stepper__nav-trigger\"\n\t\trole=\"tab\"\n\t\t[id]=\"tabId(index)\"\n\t\t[class.stepper__nav-trigger--current]=\"isCurrent\"\n\t\t[class.stepper__nav-trigger--completed]=\"isCompleted\"\n\t\t[attr.aria-selected]=\"isCurrent\"\n\t\t[attr.aria-current]=\"isCurrent ? 'step' : null\"\n\t\t[attr.aria-controls]=\"panelId(index)\"\n\t\t[attr.aria-disabled]=\"canNavigateTo(index) ? null : true\"\n\t\t[attr.tabindex]=\"tabIndexFor(index)\"\n\t\t[disabled]=\"!canNavigateTo(index)\"\n\t\t(click)=\"goTo(index)\"\n\t\t(keydown)=\"onRailKeydown($event, index)\"\n\t>\n\t\t@if (title) {\n\t\t\t<span class=\"stepper__nav-title\" [hubOverflowTooltip]=\"title\">{{ title }}</span>\n\t\t} @else {\n\t\t\t<span class=\"stepper__nav-title\" [hubOverflowTooltip]=\"'Step ' + (index + 1)\">Step {{ index + 1 }}</span>\n\t\t}\n\t</button>\n</ng-template>\n<!-- end:default-nav-trigger -->\n", styles: ["@charset \"UTF-8\";:host{--hub-stepper-accent: var(--hub-sys-color-primary, #0d6efd);--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-indicator-size: calc(var(--hub-ref-space-3, 1rem) * 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, 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)}:host(.stepper--truncate-titles) .stepper__nav-title{display:inline-block;max-inline-size:var(--hub-stepper-nav-title-max-width, 12rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: HubOverflowTooltipDirective, selector: "[hubOverflowTooltip]", inputs: ["hubOverflowTooltip", "placement"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: UcfirstPipe, name: "ucfirst" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
581
583
|
}
|
|
582
584
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: StepperComponent, decorators: [{
|
|
583
585
|
type: Component,
|
|
@@ -589,7 +591,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
589
591
|
'[class.stepper--truncate-titles]': 'truncateTitles()',
|
|
590
592
|
'[attr.data-variant]': 'variant() ?? null',
|
|
591
593
|
'[style.--hub-stepper-accent]': 'customAccent()'
|
|
592
|
-
}, 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\n class=\"stepper__content-panel\"\n role=\"tabpanel\"\n [id]=\"panelId(currentIndex())\"\n [attr.aria-labelledby]=\"tabId(currentIndex())\"\n (animationend)=\"onContentAnimationEnd($event)\"\n >\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\">→</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">←</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\">←</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">→</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\n class=\"stepper__nav-list\"\n role=\"tablist\"\n [attr.aria-orientation]=\"railOrientation()\"\n [attr.aria-label]=\"railLabel()\"\n >\n @for (step of steps; track $index; let i = $index) {\n <li class=\"stepper__nav-item\" role=\"presentation\">\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 type=\"button\"\n class=\"stepper__nav-trigger\"\n role=\"tab\"\n [id]=\"tabId(index)\"\n [class.stepper__nav-trigger--current]=\"isCurrent\"\n [class.stepper__nav-trigger--completed]=\"isCompleted\"\n [attr.aria-selected]=\"isCurrent\"\n [attr.aria-current]=\"isCurrent ? 'step' : null\"\n [attr.aria-controls]=\"panelId(index)\"\n [attr.aria-disabled]=\"canNavigateTo(index) ? null : true\"\n [attr.tabindex]=\"tabIndexFor(index)\"\n [disabled]=\"!canNavigateTo(index)\"\n (click)=\"goTo(index)\"\n (keydown)=\"onRailKeydown($event, index)\"\n >\n @if (title) {\n <span class=\"stepper__nav-title\" [hubOverflowTooltip]=\"title\">{{ title }}</span>\n } @else {\n <span class=\"stepper__nav-title\" [hubOverflowTooltip]=\"'Step ' + (index + 1)\">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, #0d6efd);--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-indicator-size: calc(var(--hub-ref-space-3, 1rem) * 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, 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)}:host(.stepper--truncate-titles) .stepper__nav-title{display:inline-block;max-inline-size:var(--hub-stepper-nav-title-max-width, 12rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}\n"] }]
|
|
594
|
+
}, template: "<!--begin::Nav-->\n<nav class=\"stepper__nav\">\n\t<ng-container\n\t\t[ngTemplateOutlet]=\"stepperNavTpt() || defaultNavTpt\"\n\t\t[ngTemplateOutletContext]=\"{ steps: steps(), currentIndex: currentIndex() }\"\n\t></ng-container>\n</nav>\n<!--end::Nav-->\n\n<!--begin::Content-->\n<div\n\tclass=\"stepper__content\"\n\t[class.stepper__content--animated]=\"hasAnimationClass()\"\n\t[class.stepper__content--animating]=\"contentAnimating()\"\n\t[class.stepper__content--forward]=\"isForwardAnimation()\"\n\t[class.stepper__content--backward]=\"isBackwardAnimation()\"\n>\n\t<div\n\t\tclass=\"stepper__content-panel\"\n\t\trole=\"tabpanel\"\n\t\t[id]=\"panelId(currentIndex())\"\n\t\t[attr.aria-labelledby]=\"tabId(currentIndex())\"\n\t\t(animationend)=\"onContentAnimationEnd($event)\"\n\t>\n\t\t<ng-container [ngTemplateOutlet]=\"currentStep?.innerTemplate()\"></ng-container>\n\t</div>\n</div>\n<!--end::Content-->\n\n<!--begin::Controls-->\n<div class=\"stepper__controls\">\n\t@if (currentIndex() > 0) {\n\t\t<ng-content select=\"button[previousButton]\"></ng-content>\n\t\t@if (!previousButton()) {\n\t\t\t<button\n\t\t\t\tclass=\"stepper__button stepper__button--back\"\n\t\t\t\t(click)=\"goToPrevious()\"\n\t\t\t\t[disabled]=\"!canNavigateTo(currentIndex() - 1)\"\n\t\t\t>\n\t\t\t\t@if (isRtl()) {\n\t\t\t\t\t<span class=\"stepper__button-icon\" aria-hidden=\"true\">→</span>\n\t\t\t\t} @else {\n\t\t\t\t\t<span class=\"stepper__button-icon\" aria-hidden=\"true\">←</span>\n\t\t\t\t}\n\t\t\t\t{{ backLabel() ?? ('BACK' | translate | ucfirst) }}\n\t\t\t</button>\n\t\t}\n\t}\n\n\t@if (currentIndex() < steps().length - 1) {\n\t\t<ng-content select=\"button[nextButton]\"></ng-content>\n\t\t@if (!nextButton()) {\n\t\t\t<button\n\t\t\t\tclass=\"stepper__button stepper__button--next\"\n\t\t\t\t(click)=\"goToNext()\"\n\t\t\t\t[disabled]=\"!canNavigateTo(currentIndex() + 1)\"\n\t\t\t>\n\t\t\t\t{{ continueLabel() ?? ('CONTINUE' | translate | ucfirst) }}\n\t\t\t\t@if (isRtl()) {\n\t\t\t\t\t<span class=\"stepper__button-icon\" aria-hidden=\"true\">←</span>\n\t\t\t\t} @else {\n\t\t\t\t\t<span class=\"stepper__button-icon\" aria-hidden=\"true\">→</span>\n\t\t\t\t}\n\t\t\t</button>\n\t\t}\n\t}\n\n\t@if (currentIndex() === steps().length - 1) {\n\t\t<ng-content select=\"button[submitButton]\"></ng-content>\n\t\t@if (!submitButton()) {\n\t\t\t<button\n\t\t\t\tclass=\"stepper__button stepper__button--submit\"\n\t\t\t\t(click)=\"complete()\"\n\t\t\t\t[disabled]=\"!isValidStepIndex(currentIndex())\"\n\t\t\t>\n\t\t\t\t{{ submitLabel() ?? ('SUBMIT' | translate | ucfirst) }}\n\t\t\t</button>\n\t\t}\n\t}\n</div>\n<!--end::Controls-->\n\n<!-- begin:default-nav -->\n<ng-template #defaultNavTpt let-steps=\"steps\" let-currentIndex=\"currentIndex\">\n\t<ul class=\"stepper__nav-list\" role=\"tablist\" [attr.aria-orientation]=\"railOrientation()\" [attr.aria-label]=\"railLabel()\">\n\t\t@for (step of steps; track $index; let i = $index) {\n\t\t\t<li class=\"stepper__nav-item\" role=\"presentation\">\n\t\t\t\t<ng-container\n\t\t\t\t\t[ngTemplateOutlet]=\"defaultNavTriggerTpt\"\n\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\ttitle: step.title(),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tisCurrent: currentIndex === i,\n\t\t\t\t\t\tisCompleted: i < currentIndex\n\t\t\t\t\t}\"\n\t\t\t\t></ng-container>\n\t\t\t</li>\n\t\t}\n\t</ul>\n</ng-template>\n<!-- end:default-nav -->\n\n<!-- begin:default-nav-trigger -->\n<ng-template #defaultNavTriggerTpt let-title=\"title\" let-index=\"index\" let-isCurrent=\"isCurrent\" let-isCompleted=\"isCompleted\">\n\t<button\n\t\ttype=\"button\"\n\t\tclass=\"stepper__nav-trigger\"\n\t\trole=\"tab\"\n\t\t[id]=\"tabId(index)\"\n\t\t[class.stepper__nav-trigger--current]=\"isCurrent\"\n\t\t[class.stepper__nav-trigger--completed]=\"isCompleted\"\n\t\t[attr.aria-selected]=\"isCurrent\"\n\t\t[attr.aria-current]=\"isCurrent ? 'step' : null\"\n\t\t[attr.aria-controls]=\"panelId(index)\"\n\t\t[attr.aria-disabled]=\"canNavigateTo(index) ? null : true\"\n\t\t[attr.tabindex]=\"tabIndexFor(index)\"\n\t\t[disabled]=\"!canNavigateTo(index)\"\n\t\t(click)=\"goTo(index)\"\n\t\t(keydown)=\"onRailKeydown($event, index)\"\n\t>\n\t\t@if (title) {\n\t\t\t<span class=\"stepper__nav-title\" [hubOverflowTooltip]=\"title\">{{ title }}</span>\n\t\t} @else {\n\t\t\t<span class=\"stepper__nav-title\" [hubOverflowTooltip]=\"'Step ' + (index + 1)\">Step {{ index + 1 }}</span>\n\t\t}\n\t</button>\n</ng-template>\n<!-- end:default-nav-trigger -->\n", styles: ["@charset \"UTF-8\";:host{--hub-stepper-accent: var(--hub-sys-color-primary, #0d6efd);--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-indicator-size: calc(var(--hub-ref-space-3, 1rem) * 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, 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)}:host(.stepper--truncate-titles) .stepper__nav-title{display:inline-block;max-inline-size:var(--hub-stepper-nav-title-max-width, 12rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}\n"] }]
|
|
593
595
|
}], 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 }] }], truncateTitles: [{ type: i0.Input, args: [{ isSignal: true, alias: "truncateTitles", required: false }] }], railLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "railLabel", 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 }] }] } });
|
|
594
596
|
|
|
595
597
|
/** English dictionary for default stepper action labels. */
|
|
@@ -737,12 +739,25 @@ const STEPPER_STANDALONE = [
|
|
|
737
739
|
SubmitButtonDirective
|
|
738
740
|
];
|
|
739
741
|
/**
|
|
740
|
-
*
|
|
742
|
+
* Backward-compatibility module that re-exports all stepper standalone building blocks.
|
|
743
|
+
*
|
|
744
|
+
* @deprecated Import the building blocks directly — `StepperComponent`, `StepComponent`,
|
|
745
|
+
* `StepTriggerDirective`, `StepperNavDirective`, `PreviousButtonDirective`,
|
|
746
|
+
* `NextButtonDirective` and `SubmitButtonDirective` are all standalone. Scheduled for
|
|
747
|
+
* removal in **23.0.0**, `forRoot()` included: see its own note for what replaces it.
|
|
741
748
|
*/
|
|
742
749
|
class StepperModule {
|
|
743
750
|
/**
|
|
744
751
|
* Registers built-in dictionaries and resolves the active translation language.
|
|
745
752
|
*
|
|
753
|
+
* @deprecated Goes with the module in **23.0.0**. The bundled dictionaries are not part
|
|
754
|
+
* of the public API, so a standalone application names the three built-in controls
|
|
755
|
+
* either through the `backLabel` / `continueLabel` / `submitLabel` inputs of
|
|
756
|
+
* `<hub-stepper>`, or by registering its own dictionary with `provideHubTranslation()`
|
|
757
|
+
* from `ng-hub-ui-utils` under the `HUBUI.STEPPER` namespace. `provideHubTranslation()`
|
|
758
|
+
* is also what supplies `HubTranslationService`, which the stepper's `translate` pipe
|
|
759
|
+
* requires; without it the pipe has nothing to inject.
|
|
760
|
+
*
|
|
746
761
|
* @param config Optional language and fallback language override.
|
|
747
762
|
* @returns Module providers with translation configuration.
|
|
748
763
|
*/
|
|
@@ -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',\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 { HUB_TRANSLATION_PREFIX, HubOverflowTooltipDirective, resolveHubAccent, 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/** Monotonic counter used to build unique, stable per-instance ARIA ids. */\nlet nextStepperInstanceId = 0;\n\n@Component({\n\tselector: 'hub-stepper, hub-ui-stepper',\n\ttemplateUrl: './stepper.component.html',\n\tstyleUrls: ['./stepper.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgTemplateOutlet, TranslatePipe, UcfirstPipe, HubOverflowTooltipDirective],\n\tproviders: [{ provide: HUB_TRANSLATION_PREFIX, useValue: 'HUBUI.STEPPER' }],\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'[class.stepper--truncate-titles]': 'truncateTitles()',\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/** Unique per-instance token used to build stable ARIA ids for tabs and panels. */\n\treadonly #instanceId = nextStepperInstanceId++;\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 * Index of the rail tab holding the roving tabindex while the user moves\n\t * focus with the keyboard without activating a step, or `null` when the\n\t * tab stop follows the active step.\n\t */\n\tprotected readonly focusedIndex = signal<number | null>(null);\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\t * Any custom value is accepted: a bareword (semantic name / registered accent /\n\t * CSS named colour) resolves to `var(--hub-sys-color-<v>, <v>)` — the design-system\n\t * token with the raw word as fallback — while a literal `#hex` / `rgb()` /\n\t * `oklch()` / `var()` is passed through unchanged.\n\t */\n\tprotected readonly customAccent = computed(() => {\n\t\tconst v = this.variant()?.trim();\n\t\tif (!v) {\n\t\t\treturn null;\n\t\t}\n\t\treturn STEPPER_BUILT_IN_VARIANTS.has(v) ? null : resolveHubAccent(v);\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/**\n\t * Opt-in truncation of the nav step titles. When `true`, each title is clipped\n\t * to `--hub-stepper-nav-title-max-width` (default `12rem`) with an ellipsis and,\n\t * if it overflows, exposes its full text as a tooltip (the hub-ui tooltip by\n\t * default; swappable with `provideHubTooltip`). Off by default, so the standard\n\t * nav layout is unchanged.\n\t */\n\treadonly truncateTitles = input(false);\n\n\t/**\n\t * Accessible name of the step rail tablist, announced by assistive\n\t * technologies. Defaults to `'Steps'`.\n\t */\n\treadonly railLabel = input('Steps');\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/**\n\t * Returns the ARIA orientation of the step rail tablist. The rail lays out\n\t * horizontally in the default (vertical) layout and vertically in the\n\t * sidebar layout.\n\t *\n\t * @returns `'vertical'` for the sidebar layout, `'horizontal'` otherwise.\n\t */\n\tprotected railOrientation(): 'horizontal' | 'vertical' {\n\t\treturn this.layout() === StepperLayout.Sidebar ? 'vertical' : 'horizontal';\n\t}\n\n\t/**\n\t * Returns the stable DOM id of the rail tab for the given step index.\n\t *\n\t * @param index Step index.\n\t * @returns Unique, per-instance tab id.\n\t */\n\tprotected tabId(index: number): string {\n\t\treturn `hub-stepper-${this.#instanceId}-tab-${index}`;\n\t}\n\n\t/**\n\t * Returns the stable DOM id of the content panel for the given step index.\n\t *\n\t * @param index Step index.\n\t * @returns Unique, per-instance panel id.\n\t */\n\tprotected panelId(index: number): string {\n\t\treturn `hub-stepper-${this.#instanceId}-panel-${index}`;\n\t}\n\n\t/**\n\t * Roving `tabindex` for the rail tab at `index`: `0` for the focused tab\n\t * (or the active step when no tab holds transient keyboard focus), `-1`\n\t * for the rest — so the rail is a single Tab stop and the arrow keys move\n\t * within it.\n\t *\n\t * @param index Step index of the tab.\n\t * @returns `0` for the current tab stop, `-1` otherwise.\n\t */\n\tprotected tabIndexFor(index: number): number {\n\t\treturn (this.focusedIndex() ?? this.currentIndex()) === index ? 0 : -1;\n\t}\n\n\t/**\n\t * Keyboard navigation for the step rail (WAI-ARIA tabs pattern, manual\n\t * activation): ArrowRight/ArrowDown and ArrowLeft/ArrowUp move focus\n\t * between enabled step tabs (wrapping, skipping disabled steps), Home/End\n\t * jump to the first/last enabled tab, and Enter/Space activates the\n\t * focused step under the same permission model as clicking its trigger\n\t * (`canNavigateTo`). Moving focus never changes the active step.\n\t *\n\t * @param event Keyboard event fired on a rail tab.\n\t * @param index Step index of the tab that received the event.\n\t */\n\tprotected onRailKeydown(event: KeyboardEvent, index: number): void {\n\t\tlet target: number;\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowRight':\n\t\t\tcase 'ArrowDown':\n\t\t\t\ttarget = this.#stepEnabledIndex(index, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowLeft':\n\t\t\tcase 'ArrowUp':\n\t\t\t\ttarget = this.#stepEnabledIndex(index, -1);\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\ttarget = this.#firstEnabledIndex();\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\ttarget = this.#lastEnabledIndex();\n\t\t\t\tbreak;\n\t\t\tcase 'Enter':\n\t\t\tcase ' ':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (this.canNavigateTo(index)) {\n\t\t\t\t\tthis.goTo(index);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\t\tif (target < 0) {\n\t\t\treturn;\n\t\t}\n\t\tevent.preventDefault();\n\t\tthis.#focusTab(target);\n\t}\n\n\t/**\n\t * Returns the next enabled step index from `index` in `direction`,\n\t * wrapping around the rail.\n\t *\n\t * @param index Starting step index.\n\t * @param direction `1` to search forward, `-1` to search backward.\n\t * @returns The nearest enabled index, or `-1` when there are no steps.\n\t */\n\t#stepEnabledIndex(index: number, direction: 1 | -1): number {\n\t\tconst steps = this.steps();\n\t\tconst count = steps.length;\n\t\tif (!count) {\n\t\t\treturn -1;\n\t\t}\n\t\tfor (let step = 1; step <= count; step += 1) {\n\t\t\tconst candidate = (((index + direction * step) % count) + count) % count;\n\t\t\tif (!steps[candidate].disabled()) {\n\t\t\t\treturn candidate;\n\t\t\t}\n\t\t}\n\t\treturn index;\n\t}\n\n\t/**\n\t * Returns the index of the first enabled step.\n\t *\n\t * @returns First enabled index, or `-1` when every step is disabled.\n\t */\n\t#firstEnabledIndex(): number {\n\t\treturn this.steps().findIndex((step) => !step.disabled());\n\t}\n\n\t/**\n\t * Returns the index of the last enabled step.\n\t *\n\t * @returns Last enabled index, or `-1` when every step is disabled.\n\t */\n\t#lastEnabledIndex(): number {\n\t\tconst steps = this.steps();\n\t\tfor (let i = steps.length - 1; i >= 0; i -= 1) {\n\t\t\tif (!steps[i].disabled()) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\t/**\n\t * Moves the roving tabindex and DOM focus to the rail tab at `index`.\n\t *\n\t * @param index Step index of the tab to focus.\n\t */\n\t#focusTab(index: number): void {\n\t\tthis.focusedIndex.set(index);\n\t\tthis.#cdr.detectChanges();\n\t\tconst host: HTMLElement = this.#hostRef.nativeElement;\n\t\tconst triggers = host.querySelectorAll<HTMLElement>('.stepper__nav-trigger');\n\t\ttriggers[index]?.focus();\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.focusedIndex.set(null);\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\n class=\"stepper__content-panel\"\n role=\"tabpanel\"\n [id]=\"panelId(currentIndex())\"\n [attr.aria-labelledby]=\"tabId(currentIndex())\"\n (animationend)=\"onContentAnimationEnd($event)\"\n >\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\">→</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">←</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\">←</span>\n } @else {\n <span class=\"stepper__button-icon\" aria-hidden=\"true\">→</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\n class=\"stepper__nav-list\"\n role=\"tablist\"\n [attr.aria-orientation]=\"railOrientation()\"\n [attr.aria-label]=\"railLabel()\"\n >\n @for (step of steps; track $index; let i = $index) {\n <li class=\"stepper__nav-item\" role=\"presentation\">\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 type=\"button\"\n class=\"stepper__nav-trigger\"\n role=\"tab\"\n [id]=\"tabId(index)\"\n [class.stepper__nav-trigger--current]=\"isCurrent\"\n [class.stepper__nav-trigger--completed]=\"isCompleted\"\n [attr.aria-selected]=\"isCurrent\"\n [attr.aria-current]=\"isCurrent ? 'step' : null\"\n [attr.aria-controls]=\"panelId(index)\"\n [attr.aria-disabled]=\"canNavigateTo(index) ? null : true\"\n [attr.tabindex]=\"tabIndexFor(index)\"\n [disabled]=\"!canNavigateTo(index)\"\n (click)=\"goTo(index)\"\n (keydown)=\"onRailKeydown($event, index)\"\n >\n @if (title) {\n <span class=\"stepper__nav-title\" [hubOverflowTooltip]=\"title\">{{ title }}</span>\n } @else {\n <span class=\"stepper__nav-title\" [hubOverflowTooltip]=\"'Step ' + (index + 1)\">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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"}
|
|
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 { ChangeDetectionStrategy, Component, inject, input, signal, TemplateRef, viewChild } 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',\n\ttemplateUrl: './step.component.html',\n\tstyleUrls: ['./step.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StepComponent {\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/**\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 class=\"step__content\" [attr.data-step-index]=\"index()\" [attr.aria-label]=\"title()\">\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\tselector: '[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 {\n\tHUB_TRANSLATION_PREFIX,\n\tHubOverflowTooltipDirective,\n\tresolveHubAccent,\n\tTranslatePipe,\n\tUcfirstPipe\n} 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>([\n\t'primary',\n\t'secondary',\n\t'success',\n\t'danger',\n\t'warning',\n\t'info',\n\t'neutral',\n\t'light',\n\t'dark'\n]);\n\n/** Monotonic counter used to build unique, stable per-instance ARIA ids. */\nlet nextStepperInstanceId = 0;\n\n@Component({\n\tselector: 'hub-stepper, hub-ui-stepper',\n\ttemplateUrl: './stepper.component.html',\n\tstyleUrls: ['./stepper.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgTemplateOutlet, TranslatePipe, UcfirstPipe, HubOverflowTooltipDirective],\n\tproviders: [{ provide: HUB_TRANSLATION_PREFIX, useValue: 'HUBUI.STEPPER' }],\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'[class.stepper--truncate-titles]': 'truncateTitles()',\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/** Unique per-instance token used to build stable ARIA ids for tabs and panels. */\n\treadonly #instanceId = nextStepperInstanceId++;\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 * Index of the rail tab holding the roving tabindex while the user moves\n\t * focus with the keyboard without activating a step, or `null` when the\n\t * tab stop follows the active step.\n\t */\n\tprotected readonly focusedIndex = signal<number | null>(null);\n\n\t/**\n\t * Semantic accent of the stepper: `'primary'` · `'secondary'` · `'success'` ·\n\t * `'danger'` · `'warning'` · `'info'` · `'neutral'` · `'light'` · `'dark'`, or\n\t * 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 nine are\n\t * resolved by the SCSS `@each` loop, so this returns `null` for them.\n\t *\n\t * Any custom value is accepted: a bareword (semantic name / registered accent /\n\t * CSS named colour) resolves to `var(--hub-sys-color-<v>, <v>)` — the design-system\n\t * token with the raw word as fallback — while a literal `#hex` / `rgb()` /\n\t * `oklch()` / `var()` is passed through unchanged.\n\t */\n\tprotected readonly customAccent = computed(() => {\n\t\tconst v = this.variant()?.trim();\n\t\tif (!v) {\n\t\t\treturn null;\n\t\t}\n\t\treturn STEPPER_BUILT_IN_VARIANTS.has(v) ? null : resolveHubAccent(v);\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/**\n\t * Opt-in truncation of the nav step titles. When `true`, each title is clipped\n\t * to `--hub-stepper-nav-title-max-width` (default `12rem`) with an ellipsis and,\n\t * if it overflows, exposes its full text as a tooltip (the hub-ui tooltip by\n\t * default; swappable with `provideHubTooltip`). Off by default, so the standard\n\t * nav layout is unchanged.\n\t */\n\treadonly truncateTitles = input(false);\n\n\t/**\n\t * Accessible name of the step rail tablist, announced by assistive\n\t * technologies. Defaults to `'Steps'`.\n\t */\n\treadonly railLabel = input('Steps');\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/**\n\t * Returns the ARIA orientation of the step rail tablist. The rail lays out\n\t * horizontally in the default (vertical) layout and vertically in the\n\t * sidebar layout.\n\t *\n\t * @returns `'vertical'` for the sidebar layout, `'horizontal'` otherwise.\n\t */\n\tprotected railOrientation(): 'horizontal' | 'vertical' {\n\t\treturn this.layout() === StepperLayout.Sidebar ? 'vertical' : 'horizontal';\n\t}\n\n\t/**\n\t * Returns the stable DOM id of the rail tab for the given step index.\n\t *\n\t * @param index Step index.\n\t * @returns Unique, per-instance tab id.\n\t */\n\tprotected tabId(index: number): string {\n\t\treturn `hub-stepper-${this.#instanceId}-tab-${index}`;\n\t}\n\n\t/**\n\t * Returns the stable DOM id of the content panel for the given step index.\n\t *\n\t * @param index Step index.\n\t * @returns Unique, per-instance panel id.\n\t */\n\tprotected panelId(index: number): string {\n\t\treturn `hub-stepper-${this.#instanceId}-panel-${index}`;\n\t}\n\n\t/**\n\t * Roving `tabindex` for the rail tab at `index`: `0` for the focused tab\n\t * (or the active step when no tab holds transient keyboard focus), `-1`\n\t * for the rest — so the rail is a single Tab stop and the arrow keys move\n\t * within it.\n\t *\n\t * @param index Step index of the tab.\n\t * @returns `0` for the current tab stop, `-1` otherwise.\n\t */\n\tprotected tabIndexFor(index: number): number {\n\t\treturn (this.focusedIndex() ?? this.currentIndex()) === index ? 0 : -1;\n\t}\n\n\t/**\n\t * Keyboard navigation for the step rail (WAI-ARIA tabs pattern, manual\n\t * activation): ArrowRight/ArrowDown and ArrowLeft/ArrowUp move focus\n\t * between enabled step tabs (wrapping, skipping disabled steps), Home/End\n\t * jump to the first/last enabled tab, and Enter/Space activates the\n\t * focused step under the same permission model as clicking its trigger\n\t * (`canNavigateTo`). Moving focus never changes the active step.\n\t *\n\t * @param event Keyboard event fired on a rail tab.\n\t * @param index Step index of the tab that received the event.\n\t */\n\tprotected onRailKeydown(event: KeyboardEvent, index: number): void {\n\t\tlet target: number;\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowRight':\n\t\t\tcase 'ArrowDown':\n\t\t\t\ttarget = this.#stepEnabledIndex(index, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowLeft':\n\t\t\tcase 'ArrowUp':\n\t\t\t\ttarget = this.#stepEnabledIndex(index, -1);\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\ttarget = this.#firstEnabledIndex();\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\ttarget = this.#lastEnabledIndex();\n\t\t\t\tbreak;\n\t\t\tcase 'Enter':\n\t\t\tcase ' ':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (this.canNavigateTo(index)) {\n\t\t\t\t\tthis.goTo(index);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\t\tif (target < 0) {\n\t\t\treturn;\n\t\t}\n\t\tevent.preventDefault();\n\t\tthis.#focusTab(target);\n\t}\n\n\t/**\n\t * Returns the next enabled step index from `index` in `direction`,\n\t * wrapping around the rail.\n\t *\n\t * @param index Starting step index.\n\t * @param direction `1` to search forward, `-1` to search backward.\n\t * @returns The nearest enabled index, or `-1` when there are no steps.\n\t */\n\t#stepEnabledIndex(index: number, direction: 1 | -1): number {\n\t\tconst steps = this.steps();\n\t\tconst count = steps.length;\n\t\tif (!count) {\n\t\t\treturn -1;\n\t\t}\n\t\tfor (let step = 1; step <= count; step += 1) {\n\t\t\tconst candidate = (((index + direction * step) % count) + count) % count;\n\t\t\tif (!steps[candidate].disabled()) {\n\t\t\t\treturn candidate;\n\t\t\t}\n\t\t}\n\t\treturn index;\n\t}\n\n\t/**\n\t * Returns the index of the first enabled step.\n\t *\n\t * @returns First enabled index, or `-1` when every step is disabled.\n\t */\n\t#firstEnabledIndex(): number {\n\t\treturn this.steps().findIndex((step) => !step.disabled());\n\t}\n\n\t/**\n\t * Returns the index of the last enabled step.\n\t *\n\t * @returns Last enabled index, or `-1` when every step is disabled.\n\t */\n\t#lastEnabledIndex(): number {\n\t\tconst steps = this.steps();\n\t\tfor (let i = steps.length - 1; i >= 0; i -= 1) {\n\t\t\tif (!steps[i].disabled()) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\t/**\n\t * Moves the roving tabindex and DOM focus to the rail tab at `index`.\n\t *\n\t * @param index Step index of the tab to focus.\n\t */\n\t#focusTab(index: number): void {\n\t\tthis.focusedIndex.set(index);\n\t\tthis.#cdr.detectChanges();\n\t\tconst host: HTMLElement = this.#hostRef.nativeElement;\n\t\tconst triggers = host.querySelectorAll<HTMLElement>('.stepper__nav-trigger');\n\t\ttriggers[index]?.focus();\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(\n\t\t\t\tindex > previousIndex ? StepperAnimationDirection.Forward : StepperAnimationDirection.Backward\n\t\t\t);\n\t\t\tthis.currentIndex.set(index);\n\t\t\tthis.focusedIndex.set(null);\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}\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\t<ng-container\n\t\t[ngTemplateOutlet]=\"stepperNavTpt() || defaultNavTpt\"\n\t\t[ngTemplateOutletContext]=\"{ steps: steps(), currentIndex: currentIndex() }\"\n\t></ng-container>\n</nav>\n<!--end::Nav-->\n\n<!--begin::Content-->\n<div\n\tclass=\"stepper__content\"\n\t[class.stepper__content--animated]=\"hasAnimationClass()\"\n\t[class.stepper__content--animating]=\"contentAnimating()\"\n\t[class.stepper__content--forward]=\"isForwardAnimation()\"\n\t[class.stepper__content--backward]=\"isBackwardAnimation()\"\n>\n\t<div\n\t\tclass=\"stepper__content-panel\"\n\t\trole=\"tabpanel\"\n\t\t[id]=\"panelId(currentIndex())\"\n\t\t[attr.aria-labelledby]=\"tabId(currentIndex())\"\n\t\t(animationend)=\"onContentAnimationEnd($event)\"\n\t>\n\t\t<ng-container [ngTemplateOutlet]=\"currentStep?.innerTemplate()\"></ng-container>\n\t</div>\n</div>\n<!--end::Content-->\n\n<!--begin::Controls-->\n<div class=\"stepper__controls\">\n\t@if (currentIndex() > 0) {\n\t\t<ng-content select=\"button[previousButton]\"></ng-content>\n\t\t@if (!previousButton()) {\n\t\t\t<button\n\t\t\t\tclass=\"stepper__button stepper__button--back\"\n\t\t\t\t(click)=\"goToPrevious()\"\n\t\t\t\t[disabled]=\"!canNavigateTo(currentIndex() - 1)\"\n\t\t\t>\n\t\t\t\t@if (isRtl()) {\n\t\t\t\t\t<span class=\"stepper__button-icon\" aria-hidden=\"true\">→</span>\n\t\t\t\t} @else {\n\t\t\t\t\t<span class=\"stepper__button-icon\" aria-hidden=\"true\">←</span>\n\t\t\t\t}\n\t\t\t\t{{ backLabel() ?? ('BACK' | translate | ucfirst) }}\n\t\t\t</button>\n\t\t}\n\t}\n\n\t@if (currentIndex() < steps().length - 1) {\n\t\t<ng-content select=\"button[nextButton]\"></ng-content>\n\t\t@if (!nextButton()) {\n\t\t\t<button\n\t\t\t\tclass=\"stepper__button stepper__button--next\"\n\t\t\t\t(click)=\"goToNext()\"\n\t\t\t\t[disabled]=\"!canNavigateTo(currentIndex() + 1)\"\n\t\t\t>\n\t\t\t\t{{ continueLabel() ?? ('CONTINUE' | translate | ucfirst) }}\n\t\t\t\t@if (isRtl()) {\n\t\t\t\t\t<span class=\"stepper__button-icon\" aria-hidden=\"true\">←</span>\n\t\t\t\t} @else {\n\t\t\t\t\t<span class=\"stepper__button-icon\" aria-hidden=\"true\">→</span>\n\t\t\t\t}\n\t\t\t</button>\n\t\t}\n\t}\n\n\t@if (currentIndex() === steps().length - 1) {\n\t\t<ng-content select=\"button[submitButton]\"></ng-content>\n\t\t@if (!submitButton()) {\n\t\t\t<button\n\t\t\t\tclass=\"stepper__button stepper__button--submit\"\n\t\t\t\t(click)=\"complete()\"\n\t\t\t\t[disabled]=\"!isValidStepIndex(currentIndex())\"\n\t\t\t>\n\t\t\t\t{{ submitLabel() ?? ('SUBMIT' | translate | ucfirst) }}\n\t\t\t</button>\n\t\t}\n\t}\n</div>\n<!--end::Controls-->\n\n<!-- begin:default-nav -->\n<ng-template #defaultNavTpt let-steps=\"steps\" let-currentIndex=\"currentIndex\">\n\t<ul class=\"stepper__nav-list\" role=\"tablist\" [attr.aria-orientation]=\"railOrientation()\" [attr.aria-label]=\"railLabel()\">\n\t\t@for (step of steps; track $index; let i = $index) {\n\t\t\t<li class=\"stepper__nav-item\" role=\"presentation\">\n\t\t\t\t<ng-container\n\t\t\t\t\t[ngTemplateOutlet]=\"defaultNavTriggerTpt\"\n\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\ttitle: step.title(),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tisCurrent: currentIndex === i,\n\t\t\t\t\t\tisCompleted: i < currentIndex\n\t\t\t\t\t}\"\n\t\t\t\t></ng-container>\n\t\t\t</li>\n\t\t}\n\t</ul>\n</ng-template>\n<!-- end:default-nav -->\n\n<!-- begin:default-nav-trigger -->\n<ng-template #defaultNavTriggerTpt let-title=\"title\" let-index=\"index\" let-isCurrent=\"isCurrent\" let-isCompleted=\"isCompleted\">\n\t<button\n\t\ttype=\"button\"\n\t\tclass=\"stepper__nav-trigger\"\n\t\trole=\"tab\"\n\t\t[id]=\"tabId(index)\"\n\t\t[class.stepper__nav-trigger--current]=\"isCurrent\"\n\t\t[class.stepper__nav-trigger--completed]=\"isCompleted\"\n\t\t[attr.aria-selected]=\"isCurrent\"\n\t\t[attr.aria-current]=\"isCurrent ? 'step' : null\"\n\t\t[attr.aria-controls]=\"panelId(index)\"\n\t\t[attr.aria-disabled]=\"canNavigateTo(index) ? null : true\"\n\t\t[attr.tabindex]=\"tabIndexFor(index)\"\n\t\t[disabled]=\"!canNavigateTo(index)\"\n\t\t(click)=\"goTo(index)\"\n\t\t(keydown)=\"onRailKeydown($event, index)\"\n\t>\n\t\t@if (title) {\n\t\t\t<span class=\"stepper__nav-title\" [hubOverflowTooltip]=\"title\">{{ title }}</span>\n\t\t} @else {\n\t\t\t<span class=\"stepper__nav-title\" [hubOverflowTooltip]=\"'Step ' + (index + 1)\">Step {{ index + 1 }}</span>\n\t\t}\n\t</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\tselector: '[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/**\n * Backward-compatibility module that re-exports all stepper standalone building blocks.\n *\n * @deprecated Import the building blocks directly — `StepperComponent`, `StepComponent`,\n * `StepTriggerDirective`, `StepperNavDirective`, `PreviousButtonDirective`,\n * `NextButtonDirective` and `SubmitButtonDirective` are all standalone. Scheduled for\n * removal in **23.0.0**, `forRoot()` included: see its own note for what replaces it.\n */\n@NgModule({\n\timports: [...STEPPER_STANDALONE],\n\texports: [...STEPPER_STANDALONE]\n})\nexport class StepperModule {\n\t/**\n\t * Registers built-in dictionaries and resolves the active translation language.\n\t *\n\t * @deprecated Goes with the module in **23.0.0**. The bundled dictionaries are not part\n\t * of the public API, so a standalone application names the three built-in controls\n\t * either through the `backLabel` / `continueLabel` / `submitLabel` inputs of\n\t * `<hub-stepper>`, or by registering its own dictionary with `provideHubTranslation()`\n\t * from `ng-hub-ui-utils` under the `HUBUI.STEPPER` namespace. `provideHubTranslation()`\n\t * is also what supplies `HubTranslationService`, which the stepper's `translate` pipe\n\t * requires; without it the pipe has nothing to inject.\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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ng-hub-ui-stepper",
|
|
3
|
-
"version": "22.8.
|
|
3
|
+
"version": "22.8.2",
|
|
4
4
|
"description": "A flexible and customizable stepper component for Angular applications",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"angular",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"bugs": {
|
|
27
27
|
"url": "https://github.com/carlos-morcillo/ng-hub-ui-stepper/issues"
|
|
28
28
|
},
|
|
29
|
-
"homepage": "https://hubui.dev/",
|
|
29
|
+
"homepage": "https://hubui.dev/en/stepper/overview/",
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"@angular/common": ">=21.1.2",
|
|
32
32
|
"@angular/core": ">=21.1.2",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { TemplateRef, AfterContentInit, OnDestroy, ModuleWithProviders, RendererFactory2 } from '@angular/core';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Connects a projected button to the stepper "next" action.
|
|
@@ -8,7 +8,7 @@ import { OnInit, TemplateRef, AfterContentInit, OnDestroy, ModuleWithProviders,
|
|
|
8
8
|
declare class NextButtonDirective {
|
|
9
9
|
readonly stepper: StepperComponent;
|
|
10
10
|
/** Reflects whether the control can trigger forward navigation. */
|
|
11
|
-
readonly disabled: _angular_core.Signal<
|
|
11
|
+
readonly disabled: _angular_core.Signal<boolean>;
|
|
12
12
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NextButtonDirective, never>;
|
|
13
13
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NextButtonDirective, "button[nextButton], button[continueButton]", never, {}, {}, never, never, true, never>;
|
|
14
14
|
}
|
|
@@ -20,7 +20,7 @@ declare class NextButtonDirective {
|
|
|
20
20
|
declare class PreviousButtonDirective {
|
|
21
21
|
readonly stepper: StepperComponent;
|
|
22
22
|
/** Reflects whether the control can trigger backward navigation. */
|
|
23
|
-
readonly disabled: _angular_core.Signal<
|
|
23
|
+
readonly disabled: _angular_core.Signal<boolean>;
|
|
24
24
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PreviousButtonDirective, never>;
|
|
25
25
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<PreviousButtonDirective, "button[previousButton], button[backButton]", never, {}, {}, never, never, true, never>;
|
|
26
26
|
}
|
|
@@ -29,7 +29,7 @@ declare class PreviousButtonDirective {
|
|
|
29
29
|
* Defines a single step inside `hub-stepper`.
|
|
30
30
|
* The component exposes metadata (title, disabled state, index) and a projected template as step content.
|
|
31
31
|
*/
|
|
32
|
-
declare class StepComponent
|
|
32
|
+
declare class StepComponent {
|
|
33
33
|
/** Parent stepper instance injected from the host context. */
|
|
34
34
|
stepper: StepperComponent;
|
|
35
35
|
/**
|
|
@@ -45,8 +45,6 @@ declare class StepComponent implements OnInit {
|
|
|
45
45
|
readonly innerTemplate: _angular_core.Signal<TemplateRef<any>>;
|
|
46
46
|
/** Returns the animation state key consumed by content transitions. */
|
|
47
47
|
get animationState(): string;
|
|
48
|
-
/** Runs initial validation checks for component inputs. */
|
|
49
|
-
ngOnInit(): void;
|
|
50
48
|
/**
|
|
51
49
|
* Returns whether the step can be navigated to.
|
|
52
50
|
*
|
|
@@ -114,14 +112,15 @@ declare class StepperComponent implements AfterContentInit, OnDestroy {
|
|
|
114
112
|
*/
|
|
115
113
|
protected readonly focusedIndex: _angular_core.WritableSignal<number | null>;
|
|
116
114
|
/**
|
|
117
|
-
* Semantic accent of the stepper: `'primary'` · `'
|
|
118
|
-
* `'warning'` · `'info'
|
|
115
|
+
* Semantic accent of the stepper: `'primary'` · `'secondary'` · `'success'` ·
|
|
116
|
+
* `'danger'` · `'warning'` · `'info'` · `'neutral'` · `'light'` · `'dark'`, or
|
|
117
|
+
* any custom string (read as `--hub-sys-color-<variant>`).
|
|
119
118
|
* Re-bases `--hub-stepper-accent`, which drives the active step pill and the
|
|
120
119
|
* next / submit controls. Defaults to primary.
|
|
121
120
|
*/
|
|
122
121
|
readonly variant: _angular_core.InputSignal<string | undefined>;
|
|
123
122
|
/**
|
|
124
|
-
* Inline accent for custom (non-built-in) variants — the built-in
|
|
123
|
+
* Inline accent for custom (non-built-in) variants — the built-in nine are
|
|
125
124
|
* resolved by the SCSS `@each` loop, so this returns `null` for them.
|
|
126
125
|
*
|
|
127
126
|
* Any custom value is accepted: a bareword (semantic name / registered accent /
|
|
@@ -336,10 +335,26 @@ declare class StepperNavDirective {
|
|
|
336
335
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StepperNavDirective, "[hubStepperNav], [stepperNav]", never, {}, {}, never, never, true, never>;
|
|
337
336
|
}
|
|
338
337
|
|
|
338
|
+
/**
|
|
339
|
+
* Backward-compatibility module that re-exports all stepper standalone building blocks.
|
|
340
|
+
*
|
|
341
|
+
* @deprecated Import the building blocks directly — `StepperComponent`, `StepComponent`,
|
|
342
|
+
* `StepTriggerDirective`, `StepperNavDirective`, `PreviousButtonDirective`,
|
|
343
|
+
* `NextButtonDirective` and `SubmitButtonDirective` are all standalone. Scheduled for
|
|
344
|
+
* removal in **23.0.0**, `forRoot()` included: see its own note for what replaces it.
|
|
345
|
+
*/
|
|
339
346
|
declare class StepperModule {
|
|
340
347
|
/**
|
|
341
348
|
* Registers built-in dictionaries and resolves the active translation language.
|
|
342
349
|
*
|
|
350
|
+
* @deprecated Goes with the module in **23.0.0**. The bundled dictionaries are not part
|
|
351
|
+
* of the public API, so a standalone application names the three built-in controls
|
|
352
|
+
* either through the `backLabel` / `continueLabel` / `submitLabel` inputs of
|
|
353
|
+
* `<hub-stepper>`, or by registering its own dictionary with `provideHubTranslation()`
|
|
354
|
+
* from `ng-hub-ui-utils` under the `HUBUI.STEPPER` namespace. `provideHubTranslation()`
|
|
355
|
+
* is also what supplies `HubTranslationService`, which the stepper's `translate` pipe
|
|
356
|
+
* requires; without it the pipe has nothing to inject.
|
|
357
|
+
*
|
|
343
358
|
* @param config Optional language and fallback language override.
|
|
344
359
|
* @returns Module providers with translation configuration.
|
|
345
360
|
*/
|