@ngstarter-ui/components 21.0.14 → 21.0.16

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.
@@ -4519,18 +4519,34 @@
4519
4519
  "name": "headless-stepper",
4520
4520
  "title": "Headless Stepper",
4521
4521
  "overviewName": "Headless Stepper",
4522
- "category": null,
4522
+ "category": "components",
4523
4523
  "package": "@ngstarter-ui/components",
4524
4524
  "importPath": "@ngstarter-ui/components/headless-stepper",
4525
4525
  "publicApi": "projects/components/headless-stepper/public-api.ts",
4526
4526
  "sourceRoot": "projects/components/headless-stepper/src",
4527
- "docsPath": null,
4528
- "docsOverviewSource": null,
4527
+ "docsPath": "/components/headless-stepper",
4528
+ "docsOverviewSource": "projects/docs/src/app/components/headless-stepper/overview/overview.html",
4529
4529
  "purpose": "Provide stepper state and validation logic without rendering a fixed visual stepper UI.",
4530
4530
  "useWhen": "Use for custom multi-step workflows where the product needs its own header, progress indicator, buttons, layout, or responsive presentation while keeping standard NgStarter step behavior. Use ngs-headless-stepper with ngs-headless-step when you need selectedIndex, selected step state, progressPercent, canMoveNext, next(), previous(), reset(), linear mode, optional steps, and stepControl validation. Good for custom wizards, onboarding forms, checkout flows, setup flows, and complex forms with a bespoke layout. Do not use when the standard visual Stepper fits; use Stepper. Do not use for guided tours over existing UI; use GuidedTour. Do not use as Tabs, Accordion, or for a simple single-page form without steps.",
4531
- "exampleTopics": [],
4532
- "minimalExample": null,
4533
- "exampleFiles": [],
4531
+ "exampleTopics": [
4532
+ "Basic Headless Stepper",
4533
+ "Linear Headless Stepper"
4534
+ ],
4535
+ "minimalExample": "<ngs-headless-stepper #stepper [(selectedIndex)]=\"selectedIndex\">\n <div class=\"mb-5 flex flex-col gap-4\">\n <div class=\"flex flex-col gap-4 md:flex-row md:items-start md:justify-between\">\n <div>\n <p class=\"text-sm text-neutral-600\">Step {{ stepper.selectedIndex() + 1 }} of {{ stepper.stepsCount() }}</p>\n <h4 class=\"mt-1 text-base font-semibold\">{{ steps[selectedIndex()].title }}</h4>\n <p class=\"mt-1 text-sm text-neutral-600\">{{ steps[selectedIndex()].description }}</p>\n </div>\n <div class=\"flex flex-wrap gap-2\">\n @for (item of steps; track item.title; let index = $index) {\n <button\n ngsButton=\"tonal\"\n type=\"button\"\n [class.headless-stepper-example-active]=\"selectedIndex() === index\"\n (click)=\"stepper.selectedIndex.set(index)\">\n {{ index + 1 }}\n </button>\n }\n </div>\n </div>\n <ngs-progress-bar mode=\"determinate\" [value]=\"stepper.progressPercent()\"/>\n </div>\n <ngs-headless-step>\n <ngs-card>\n <ngs-card-content>\n <h5 class=\"text-base font-semibold\">Workspace details</h5>\n <p class=\"mt-2 text-sm text-neutral-600\">\n Pick a workspace name, region, and owner. This example keeps the content simple while the stepper owns the\n active step state.\n </p>\n </ngs-card-content>\n </ngs-card>\n </ngs-headless-step>\n <ngs-headless-step>\n <ngs-card>\n <ngs-card-content>\n <h5 class=\"text-base font-semibold\">Team access</h5>\n <p class=\"mt-2 text-sm text-neutral-600\">\n Show a c\n...",
4536
+ "exampleFiles": [
4537
+ {
4538
+ "name": "basic-headless-stepper-example",
4539
+ "title": "Basic headless stepper",
4540
+ "file": "projects/docs/src/app/components/headless-stepper/_examples/basic-headless-stepper-example/basic-headless-stepper-example.html",
4541
+ "source": "<ngs-headless-stepper #stepper [(selectedIndex)]=\"selectedIndex\">\n <div class=\"mb-5 flex flex-col gap-4\">\n <div class=\"flex flex-col gap-4 md:flex-row md:items-start md:justify-between\">\n <div>\n <p class=\"text-sm text-neutral-600\">Step {{ stepper.selectedIndex() + 1 }} of {{ stepper.stepsCount() }}</p>\n <h4 class=\"mt-1 text-base font-semibold\">{{ steps[selectedIndex()].title }}</h4>\n <p class=\"mt-1 text-sm text-neutral-600\">{{ steps[selectedIndex()].description }}</p>\n </div>\n <div class=\"flex flex-wrap gap-2\">\n @for (item of steps; track item.title; let index = $index) {\n <button\n ngsButton=\"tonal\"\n type=\"button\"\n [class.headless-stepper-example-active]=\"selectedIndex() === index\"\n (click)=\"stepper.selectedIndex.set(index)\">\n {{ index + 1 }}\n </button>\n }\n </div>\n </div>\n <ngs-progress-bar mode=\"determinate\" [value]=\"stepper.progressPercent()\"/>\n </div>\n <ngs-headless-step>\n <ngs-card>\n <ngs-card-content>\n <h5 class=\"text-base font-semibold\">Workspace details</h5>\n <p class=\"mt-2 text-sm text-neutral-600\">\n Pick a workspace name, region, and owner. This example keeps the content simple while the stepper owns the\n active step state.\n </p>\n </ngs-card-content>\n </ngs-card>\n </ngs-headless-step>\n <ngs-headless-step>\n <ngs-card>\n <ngs-card-content>\n <h5 class=\"text-base font-semibold\">Team access</h5>\n <p class=\"mt-2 text-sm text-neutral-600\">\n Show a c\n..."
4542
+ },
4543
+ {
4544
+ "name": "linear-headless-stepper-example",
4545
+ "title": "Linear headless stepper",
4546
+ "file": "projects/docs/src/app/components/headless-stepper/_examples/linear-headless-stepper-example/linear-headless-stepper-example.html",
4547
+ "source": "<ngs-headless-stepper #stepper linear>\n <div class=\"mb-5\">\n <div class=\"flex items-center justify-between gap-4\">\n <div>\n <p class=\"text-sm text-neutral-600\">Linear setup</p>\n <h4 class=\"mt-1 text-base font-semibold\">Step {{ stepper.selectedIndex() + 1 }} of {{ stepper.stepsCount() }}</h4>\n </div>\n <p class=\"text-sm text-neutral-600\">{{ stepper.progressPercent() | number: '1.0-0' }}%</p>\n </div>\n <ngs-progress-bar class=\"mt-4\" mode=\"determinate\" [value]=\"stepper.progressPercent()\"/>\n </div>\n <ngs-headless-step [stepControl]=\"accountForm\">\n <form [formGroup]=\"accountForm\" class=\"flex flex-col gap-4\">\n <ngs-form-field>\n <ngs-label>Company</ngs-label>\n <input ngsInput formControlName=\"company\" placeholder=\"Acme Operations\" required>\n </ngs-form-field>\n <p class=\"text-sm text-neutral-600\">\n The next button becomes available when this form group is valid.\n </p>\n </form>\n </ngs-headless-step>\n <ngs-headless-step [stepControl]=\"billingForm\">\n <form [formGroup]=\"billingForm\" class=\"flex flex-col gap-4\">\n <ngs-form-field>\n <ngs-label>Billing email</ngs-label>\n <input ngsInput formControlName=\"email\" placeholder=\"billing@example.com\" required>\n </ngs-form-field>\n <p class=\"text-sm text-neutral-600\">\n Headless Stepper tracks the connected control status and uses it for linear navigation.\n </p>\n </form>\n </ngs-headless-step>\n <ngs-headless-step optional>\n <div class=\"rounded-lg border border-muted p-5\">\n <h5 class=\"text-base font-semibold\">O\n..."
4548
+ }
4549
+ ],
4534
4550
  "previewAsset": "projects/components/headless-stepper/preview.svg",
4535
4551
  "selectors": [
4536
4552
  "ngs-headless-step",
@@ -7872,7 +7888,6 @@
7872
7888
  "--ngs-sidebar-nav-item-icon-width",
7873
7889
  "--ngs-sidebar-nav-item-padding",
7874
7890
  "--ngs-sidebar-nav-item-radius",
7875
- "--ngs-sidebar-nav-item-space-y",
7876
7891
  "--ngs-sidebar-nav-item-width",
7877
7892
  "--ngs-sidebar-nav-items-gap",
7878
7893
  "--ngs-sidebar-nav-nested-item-active-bg",
@@ -8635,6 +8650,8 @@
8635
8650
  ],
8636
8651
  "outputs": [],
8637
8652
  "cssTokens": [
8653
+ "--ngs-color-on-primary",
8654
+ "--ngs-color-on-success",
8638
8655
  "--ngs-color-on-surface",
8639
8656
  "--ngs-color-on-surface-variant",
8640
8657
  "--ngs-color-outline-variant",
@@ -8646,9 +8663,11 @@
8646
8663
  "--ngs-stepper-header-gap",
8647
8664
  "--ngs-stepper-header-padding",
8648
8665
  "--ngs-stepper-icon-active-bg",
8666
+ "--ngs-stepper-icon-active-color",
8649
8667
  "--ngs-stepper-icon-bg",
8650
8668
  "--ngs-stepper-icon-color",
8651
8669
  "--ngs-stepper-icon-completed-bg",
8670
+ "--ngs-stepper-icon-completed-color",
8652
8671
  "--ngs-stepper-icon-size",
8653
8672
  "--ngs-stepper-label-active-color",
8654
8673
  "--ngs-stepper-label-color",
@@ -1,14 +1,14 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, signal, inject, DestroyRef, effect, computed, ChangeDetectionStrategy, Component, model, contentChildren } from '@angular/core';
3
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
3
4
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
5
  import { startWith } from 'rxjs/operators';
5
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
6
6
 
7
7
  class HeadlessStep {
8
8
  /** Form control associated with this step */
9
9
  stepControl = input(undefined, ...(ngDevMode ? [{ debugName: "stepControl" }] : /* istanbul ignore next */ []));
10
10
  /** Whether the step is optional */
11
- optional = input(false, ...(ngDevMode ? [{ debugName: "optional" }] : /* istanbul ignore next */ []));
11
+ optional = input(false, { ...(ngDevMode ? { debugName: "optional" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
12
12
  /** Whether the user has interacted with this step (writable signal) */
13
13
  interacted = signal(false, ...(ngDevMode ? [{ debugName: "interacted" }] : /* istanbul ignore next */ []));
14
14
  /** Whether this step is currently active (writable signal, controlled by Stepper) */
@@ -68,7 +68,7 @@ class HeadlessStep {
68
68
  }
69
69
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: HeadlessStep, decorators: [{
70
70
  type: Component,
71
- args: [{ selector: 'ngs-headless-step', exportAs: 'ngsHeadlessStep', template: `<ng-content/>`, changeDetection: ChangeDetectionStrategy.OnPush, host: {
71
+ args: [{ selector: 'ngs-headless-step', exportAs: 'ngsHeadlessStep', standalone: true, template: `<ng-content/>`, changeDetection: ChangeDetectionStrategy.OnPush, host: {
72
72
  'class': 'ngs-headless-step',
73
73
  '[style.display]': 'isActive() ? "block" : "none"',
74
74
  }, styles: [":host{display:block}\n"] }]
@@ -175,11 +175,11 @@ class HeadlessStepper {
175
175
  this.selectedIndex.set(0);
176
176
  }
177
177
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: HeadlessStepper, deps: [], target: i0.ɵɵFactoryTarget.Component });
178
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.4", type: HeadlessStepper, isStandalone: true, selector: "ngs-headless-stepper", inputs: { linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null }, selectedIndex: { classPropertyName: "selectedIndex", publicName: "selectedIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedIndex: "selectedIndexChange" }, host: { classAttribute: "ngs-headless-stepper" }, queries: [{ propertyName: "steps", predicate: HeadlessStep, isSignal: true }], exportAs: ["ngsHeadlessStepper"], ngImport: i0, template: `<ng-content select="ngs-step"/>`, isInline: true, styles: [":host{display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
178
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.4", type: HeadlessStepper, isStandalone: true, selector: "ngs-headless-stepper", inputs: { linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null }, selectedIndex: { classPropertyName: "selectedIndex", publicName: "selectedIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedIndex: "selectedIndexChange" }, host: { classAttribute: "ngs-headless-stepper" }, queries: [{ propertyName: "steps", predicate: HeadlessStep, isSignal: true }], exportAs: ["ngsHeadlessStepper"], ngImport: i0, template: `<ng-content/>`, isInline: true, styles: [":host{display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
179
179
  }
180
180
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: HeadlessStepper, decorators: [{
181
181
  type: Component,
182
- args: [{ selector: 'ngs-headless-stepper', exportAs: 'ngsHeadlessStepper', standalone: true, template: `<ng-content select="ngs-step"/>`, changeDetection: ChangeDetectionStrategy.OnPush, host: {
182
+ args: [{ selector: 'ngs-headless-stepper', exportAs: 'ngsHeadlessStepper', standalone: true, template: `<ng-content/>`, changeDetection: ChangeDetectionStrategy.OnPush, host: {
183
183
  'class': 'ngs-headless-stepper',
184
184
  }, styles: [":host{display:block}\n"] }]
185
185
  }], ctorParameters: () => [], propDecorators: { linear: [{ type: i0.Input, args: [{ isSignal: true, alias: "linear", required: false }] }], selectedIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedIndex", required: false }] }, { type: i0.Output, args: ["selectedIndexChange"] }], steps: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => HeadlessStep), { isSignal: true }] }] } });
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-headless-stepper.mjs","sources":["../../../projects/components/headless-stepper/src/headless-step.ts","../../../projects/components/headless-stepper/src/headless-stepper.ts","../../../projects/components/headless-stepper/ngstarter-ui-components-headless-stepper.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n input,\n signal,\n computed,\n effect,\n inject,\n DestroyRef\n} from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { startWith } from 'rxjs/operators';\n\n@Component({\n selector: 'ngs-headless-step',\n exportAs: 'ngsHeadlessStep',\n template: `<ng-content/>`,\n styles: [`\n :host {\n display: block;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-headless-step',\n '[style.display]': 'isActive() ? \"block\" : \"none\"',\n }\n})\nexport class HeadlessStep {\n /** Form control associated with this step */\n stepControl = input<AbstractControl | undefined>(undefined);\n /** Whether the step is optional */\n optional = input(false);\n\n /** Whether the user has interacted with this step (writable signal) */\n readonly interacted = signal(false);\n /** Whether this step is currently active (writable signal, controlled by Stepper) */\n readonly isActive = signal(false);\n /** Internal writable signal tracking the validity of the stepControl */\n private readonly _isValid = signal(true); // Default to true if no control\n\n private _destroyRef = inject(DestroyRef); // Inject DestroyRef for automatic cleanup\n\n constructor() {\n effect(() => {\n const control = this.stepControl(); // Read the input signal\n\n if (control) {\n // Set initial validity based on the control's current state when the effect runs\n this._isValid.set(control.valid);\n\n // Subscribe to statusChanges and update the _isValid signal\n // Use takeUntilDestroyed for automatic cleanup when the component is destroyed\n control.statusChanges.pipe(\n startWith(control.status), // Emit initial status immediately to sync _isValid\n takeUntilDestroyed(this._destroyRef) // Automatically unsubscribe on component destroy\n ).subscribe(() => {\n // Update the internal validity signal whenever the control's status changes\n this._isValid.set(control.valid);\n });\n\n } else {\n // If no control is provided, consider the step inherently valid for completion\n this._isValid.set(true);\n }\n });\n }\n\n /** Computed signal indicating if the step is completed */\n readonly completed = computed(() => {\n // A step is completed if it doesn't have a stepControl or\n // if the internal _isValid signal (reflecting the control's validity) is true.\n return !this.stepControl() || this._isValid();\n });\n\n /**\n * Checks if the step is currently valid.\n * Considers the validity of the associated stepControl if provided.\n * @returns boolean True if the step is valid, false otherwise.\n */\n public isValid(): boolean {\n return this._isValid(); // Directly return the tracked validity state\n }\n\n /** Resets the step's interacted state */\n reset(): void {\n this.interacted.set(false);\n }\n\n /** Sets the active state of the step */\n setActive(active: boolean): void {\n this.isActive.set(active);\n }\n\n /** Sets the interacted state of the step */\n setInteracted(interacted: boolean): void {\n this.interacted.set(interacted);\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n effect,\n computed,\n input,\n model,\n contentChildren,\n} from '@angular/core';\nimport { HeadlessStep } from './headless-step';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Component({\n selector: 'ngs-headless-stepper',\n exportAs: 'ngsHeadlessStepper',\n standalone: true,\n template: `<ng-content select=\"ngs-step\"/>`,\n styles: [`\n :host {\n display: block;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-headless-stepper',\n },\n})\nexport class HeadlessStepper {\n /** Whether the stepper should operate in linear mode. */\n readonly linear = input(false, {\n transform: coerceBooleanProperty\n });\n /** The index of the active step (two-way bound). */\n readonly selectedIndex = model(0);\n\n /** Collection of child StepComponent instances. */\n readonly steps = contentChildren(HeadlessStep);\n\n /** Computed signal for the total number of steps. */\n readonly stepsCount = computed(() => {\n return this.steps()?.length ?? 0;\n });\n\n /** The currently selected StepComponent instance. */\n readonly selected = computed(() => {\n const index = this.selectedIndex();\n const stepList = this.steps();\n // Use the stepsCount() computed signal for checking length\n return stepList && index >= 0 && index < this.stepsCount() ? stepList[index] : undefined;\n });\n\n /** Checks if the user can navigate to the next step. */\n readonly canMoveNext = computed(() => {\n const index = this.selectedIndex();\n // Use stepsCount() signal\n const totalSteps = this.stepsCount();\n const currentSelected = this.selected();\n const isLinear = this.linear();\n\n // Cannot move next if there are no steps or already on the last step\n if (totalSteps === 0 || index >= totalSteps - 1) {\n return false;\n }\n if (!isLinear || !currentSelected) {\n return true;\n }\n return currentSelected.completed() || currentSelected.optional();\n });\n\n /** Computed signal indicating if the current step is the first step. */\n readonly isFirstStep = computed(() => {\n const index = this.selectedIndex();\n // Use stepsCount() signal\n return index === 0 && this.stepsCount() > 0;\n });\n\n /** Computed signal indicating if the current step is the last step. */\n readonly isLastStep = computed(() => {\n const index = this.selectedIndex();\n // Use stepsCount() signal\n const totalSteps = this.stepsCount();\n return totalSteps > 0 && index === totalSteps - 1;\n });\n\n /** Computed signal calculating the progress percentage. */\n readonly progressPercent = computed(() => {\n const totalSteps = this.stepsCount();\n const index = this.selectedIndex();\n\n if (totalSteps === 0) {\n return 0;\n }\n\n const progress = (100 / totalSteps) * (index + 1);\n return Math.max(0, Math.min(100, progress));\n });\n\n constructor() {\n effect(() => {\n const currentSteps = this.steps();\n const currentIndex = this.selectedIndex();\n currentSteps.forEach((step, index) => step.setActive(index === currentIndex));\n });\n\n effect((onCleanup) => { // Mark as interacted\n const currentSelected = this.selected();\n if (currentSelected && !currentSelected.interacted()) {\n currentSelected.setInteracted(true);\n }\n });\n\n effect(() => { // Validate index\n const totalSteps = this.stepsCount();\n const currentIndex = this.selectedIndex();\n\n if (totalSteps > 0) {\n const newIndex = Math.max(0, Math.min(currentIndex, totalSteps - 1));\n if (newIndex !== currentIndex) this.selectedIndex.set(newIndex);\n } else if (currentIndex !== 0) {\n this.selectedIndex.set(0);\n }\n });\n }\n\n /** Navigates to the next step if possible. */\n next(): void {\n if (this.canMoveNext()) {\n this.selectedIndex.update(i => i + 1);\n }\n }\n\n /** Navigates to the previous step if possible. */\n previous(): void {\n // Use renamed computed signal for check\n if (!this.isFirstStep()) {\n this.selectedIndex.update(i => i - 1);\n }\n }\n\n /** Resets the stepper to the first step. */\n reset(): void {\n this.steps().forEach(step => step.reset());\n this.selectedIndex.set(0);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngstarter-ui-components-headless-stepper.mjs","sources":["../../../projects/components/headless-stepper/src/headless-step.ts","../../../projects/components/headless-stepper/src/headless-stepper.ts","../../../projects/components/headless-stepper/ngstarter-ui-components-headless-stepper.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n input,\n signal,\n computed,\n effect,\n inject,\n DestroyRef\n} from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { startWith } from 'rxjs/operators';\n\n@Component({\n selector: 'ngs-headless-step',\n exportAs: 'ngsHeadlessStep',\n standalone: true,\n template: `<ng-content/>`,\n styles: [`\n :host {\n display: block;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-headless-step',\n '[style.display]': 'isActive() ? \"block\" : \"none\"',\n }\n})\nexport class HeadlessStep {\n /** Form control associated with this step */\n stepControl = input<AbstractControl | undefined>(undefined);\n /** Whether the step is optional */\n optional = input(false, {\n transform: coerceBooleanProperty\n });\n\n /** Whether the user has interacted with this step (writable signal) */\n readonly interacted = signal(false);\n /** Whether this step is currently active (writable signal, controlled by Stepper) */\n readonly isActive = signal(false);\n /** Internal writable signal tracking the validity of the stepControl */\n private readonly _isValid = signal(true); // Default to true if no control\n\n private _destroyRef = inject(DestroyRef); // Inject DestroyRef for automatic cleanup\n\n constructor() {\n effect(() => {\n const control = this.stepControl(); // Read the input signal\n\n if (control) {\n // Set initial validity based on the control's current state when the effect runs\n this._isValid.set(control.valid);\n\n // Subscribe to statusChanges and update the _isValid signal\n // Use takeUntilDestroyed for automatic cleanup when the component is destroyed\n control.statusChanges.pipe(\n startWith(control.status), // Emit initial status immediately to sync _isValid\n takeUntilDestroyed(this._destroyRef) // Automatically unsubscribe on component destroy\n ).subscribe(() => {\n // Update the internal validity signal whenever the control's status changes\n this._isValid.set(control.valid);\n });\n\n } else {\n // If no control is provided, consider the step inherently valid for completion\n this._isValid.set(true);\n }\n });\n }\n\n /** Computed signal indicating if the step is completed */\n readonly completed = computed(() => {\n // A step is completed if it doesn't have a stepControl or\n // if the internal _isValid signal (reflecting the control's validity) is true.\n return !this.stepControl() || this._isValid();\n });\n\n /**\n * Checks if the step is currently valid.\n * Considers the validity of the associated stepControl if provided.\n * @returns boolean True if the step is valid, false otherwise.\n */\n public isValid(): boolean {\n return this._isValid(); // Directly return the tracked validity state\n }\n\n /** Resets the step's interacted state */\n reset(): void {\n this.interacted.set(false);\n }\n\n /** Sets the active state of the step */\n setActive(active: boolean): void {\n this.isActive.set(active);\n }\n\n /** Sets the interacted state of the step */\n setInteracted(interacted: boolean): void {\n this.interacted.set(interacted);\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n effect,\n computed,\n input,\n model,\n contentChildren,\n} from '@angular/core';\nimport { HeadlessStep } from './headless-step';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Component({\n selector: 'ngs-headless-stepper',\n exportAs: 'ngsHeadlessStepper',\n standalone: true,\n template: `<ng-content/>`,\n styles: [`\n :host {\n display: block;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-headless-stepper',\n },\n})\nexport class HeadlessStepper {\n /** Whether the stepper should operate in linear mode. */\n readonly linear = input(false, {\n transform: coerceBooleanProperty\n });\n /** The index of the active step (two-way bound). */\n readonly selectedIndex = model(0);\n\n /** Collection of child StepComponent instances. */\n readonly steps = contentChildren(HeadlessStep);\n\n /** Computed signal for the total number of steps. */\n readonly stepsCount = computed(() => {\n return this.steps()?.length ?? 0;\n });\n\n /** The currently selected StepComponent instance. */\n readonly selected = computed(() => {\n const index = this.selectedIndex();\n const stepList = this.steps();\n // Use the stepsCount() computed signal for checking length\n return stepList && index >= 0 && index < this.stepsCount() ? stepList[index] : undefined;\n });\n\n /** Checks if the user can navigate to the next step. */\n readonly canMoveNext = computed(() => {\n const index = this.selectedIndex();\n // Use stepsCount() signal\n const totalSteps = this.stepsCount();\n const currentSelected = this.selected();\n const isLinear = this.linear();\n\n // Cannot move next if there are no steps or already on the last step\n if (totalSteps === 0 || index >= totalSteps - 1) {\n return false;\n }\n if (!isLinear || !currentSelected) {\n return true;\n }\n return currentSelected.completed() || currentSelected.optional();\n });\n\n /** Computed signal indicating if the current step is the first step. */\n readonly isFirstStep = computed(() => {\n const index = this.selectedIndex();\n // Use stepsCount() signal\n return index === 0 && this.stepsCount() > 0;\n });\n\n /** Computed signal indicating if the current step is the last step. */\n readonly isLastStep = computed(() => {\n const index = this.selectedIndex();\n // Use stepsCount() signal\n const totalSteps = this.stepsCount();\n return totalSteps > 0 && index === totalSteps - 1;\n });\n\n /** Computed signal calculating the progress percentage. */\n readonly progressPercent = computed(() => {\n const totalSteps = this.stepsCount();\n const index = this.selectedIndex();\n\n if (totalSteps === 0) {\n return 0;\n }\n\n const progress = (100 / totalSteps) * (index + 1);\n return Math.max(0, Math.min(100, progress));\n });\n\n constructor() {\n effect(() => {\n const currentSteps = this.steps();\n const currentIndex = this.selectedIndex();\n currentSteps.forEach((step, index) => step.setActive(index === currentIndex));\n });\n\n effect((onCleanup) => { // Mark as interacted\n const currentSelected = this.selected();\n if (currentSelected && !currentSelected.interacted()) {\n currentSelected.setInteracted(true);\n }\n });\n\n effect(() => { // Validate index\n const totalSteps = this.stepsCount();\n const currentIndex = this.selectedIndex();\n\n if (totalSteps > 0) {\n const newIndex = Math.max(0, Math.min(currentIndex, totalSteps - 1));\n if (newIndex !== currentIndex) this.selectedIndex.set(newIndex);\n } else if (currentIndex !== 0) {\n this.selectedIndex.set(0);\n }\n });\n }\n\n /** Navigates to the next step if possible. */\n next(): void {\n if (this.canMoveNext()) {\n this.selectedIndex.update(i => i + 1);\n }\n }\n\n /** Navigates to the previous step if possible. */\n previous(): void {\n // Use renamed computed signal for check\n if (!this.isFirstStep()) {\n this.selectedIndex.update(i => i - 1);\n }\n }\n\n /** Resets the stepper to the first step. */\n reset(): void {\n this.steps().forEach(step => step.reset());\n this.selectedIndex.set(0);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -219,7 +219,7 @@ class SidebarNavGroupMenu {
219
219
  return false;
220
220
  }
221
221
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: SidebarNavGroupMenu, deps: [], target: i0.ɵɵFactoryTarget.Component });
222
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: SidebarNavGroupMenu, isStandalone: true, selector: "ngs-sidebar-nav-group-menu", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, itemTypeProperty: { classPropertyName: "itemTypeProperty", publicName: "itemTypeProperty", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.is-active": "active" }, classAttribute: "ngs-sidebar-nav-group-menu" }, queries: [{ propertyName: "_items", predicate: SidebarNavItem, descendants: true, isSignal: true }, { propertyName: "_defs", predicate: SidebarNavItemDefDirective, isSignal: true }], exportAs: ["ngsSidebarNavGroupMenu"], ngImport: i0, template: "@if (dataSource(); as data) {\n <div class=\"inner\">\n @for (item of data; track item) {\n <ng-container *ngTemplateOutlet=\"getTemplate(item); context: { $implicit: item }\" />\n }\n </div>\n} @else {\n <div class=\"inner\">\n <ng-content/>\n </div>\n}\n", styles: [":host{position:relative;padding-inline-start:var(--ngs-sidebar-nav-group-menu-padding-start);transition:grid-template-rows .2s ease;grid-template-rows:0fr;display:grid}:host .inner{overflow:hidden;display:flex;flex-direction:column;gap:var(--ngs-sidebar-nav-items-gap)}:host.is-active{grid-template-rows:1fr;margin-top:var(--ngs-sidebar-nav-item-space-y)}:host.is-active .inner{padding:calc(var(--ngs-sidebar-nav-items-gap) * 2) 0 var(--ngs-sidebar-nav-items-gap) 0}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
222
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: SidebarNavGroupMenu, isStandalone: true, selector: "ngs-sidebar-nav-group-menu", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, itemTypeProperty: { classPropertyName: "itemTypeProperty", publicName: "itemTypeProperty", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.is-active": "active", "attr.aria-hidden": "active ? null : \"true\"", "attr.inert": "active ? null : \"\"" }, classAttribute: "ngs-sidebar-nav-group-menu" }, queries: [{ propertyName: "_items", predicate: SidebarNavItem, descendants: true, isSignal: true }, { propertyName: "_defs", predicate: SidebarNavItemDefDirective, isSignal: true }], exportAs: ["ngsSidebarNavGroupMenu"], ngImport: i0, template: "@if (dataSource(); as data) {\n <div class=\"inner\">\n <div class=\"content\">\n @for (item of data; track item) {\n <ng-container *ngTemplateOutlet=\"getTemplate(item); context: { $implicit: item }\" />\n }\n </div>\n </div>\n} @else {\n <div class=\"inner\">\n <div class=\"content\">\n <ng-content/>\n </div>\n </div>\n}\n", styles: [":host{position:relative;padding-inline-start:var(--ngs-sidebar-nav-group-menu-padding-start);display:grid;grid-template-rows:0fr;overflow:hidden;pointer-events:none;transition:grid-template-rows .18s cubic-bezier(.2,0,0,1)}:host .inner{min-height:0;overflow:hidden}:host .content{display:flex;flex-direction:column;gap:var(--ngs-sidebar-nav-items-gap);padding:calc(var(--ngs-sidebar-nav-items-gap) * 2) 0 var(--ngs-sidebar-nav-items-gap) 0;opacity:0;transform:translateY(calc(var(--ngs-sidebar-nav-items-gap) * -1));transition:opacity .12s ease,transform .18s cubic-bezier(.2,0,0,1)}:host.is-active{grid-template-rows:1fr;pointer-events:auto}:host.is-active .content{opacity:1;transform:translateY(0)}@media(prefers-reduced-motion:reduce){:host{transition-duration:1ms}:host .content{transform:none;transition-duration:1ms}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
223
223
  }
224
224
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: SidebarNavGroupMenu, decorators: [{
225
225
  type: Component,
@@ -227,12 +227,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
227
227
  NgTemplateOutlet
228
228
  ], host: {
229
229
  'class': 'ngs-sidebar-nav-group-menu',
230
- '[class.is-active]': 'active'
231
- }, template: "@if (dataSource(); as data) {\n <div class=\"inner\">\n @for (item of data; track item) {\n <ng-container *ngTemplateOutlet=\"getTemplate(item); context: { $implicit: item }\" />\n }\n </div>\n} @else {\n <div class=\"inner\">\n <ng-content/>\n </div>\n}\n", styles: [":host{position:relative;padding-inline-start:var(--ngs-sidebar-nav-group-menu-padding-start);transition:grid-template-rows .2s ease;grid-template-rows:0fr;display:grid}:host .inner{overflow:hidden;display:flex;flex-direction:column;gap:var(--ngs-sidebar-nav-items-gap)}:host.is-active{grid-template-rows:1fr;margin-top:var(--ngs-sidebar-nav-item-space-y)}:host.is-active .inner{padding:calc(var(--ngs-sidebar-nav-items-gap) * 2) 0 var(--ngs-sidebar-nav-items-gap) 0}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
230
+ '[class.is-active]': 'active',
231
+ '[attr.aria-hidden]': 'active ? null : "true"',
232
+ '[attr.inert]': 'active ? null : ""',
233
+ }, template: "@if (dataSource(); as data) {\n <div class=\"inner\">\n <div class=\"content\">\n @for (item of data; track item) {\n <ng-container *ngTemplateOutlet=\"getTemplate(item); context: { $implicit: item }\" />\n }\n </div>\n </div>\n} @else {\n <div class=\"inner\">\n <div class=\"content\">\n <ng-content/>\n </div>\n </div>\n}\n", styles: [":host{position:relative;padding-inline-start:var(--ngs-sidebar-nav-group-menu-padding-start);display:grid;grid-template-rows:0fr;overflow:hidden;pointer-events:none;transition:grid-template-rows .18s cubic-bezier(.2,0,0,1)}:host .inner{min-height:0;overflow:hidden}:host .content{display:flex;flex-direction:column;gap:var(--ngs-sidebar-nav-items-gap);padding:calc(var(--ngs-sidebar-nav-items-gap) * 2) 0 var(--ngs-sidebar-nav-items-gap) 0;opacity:0;transform:translateY(calc(var(--ngs-sidebar-nav-items-gap) * -1));transition:opacity .12s ease,transform .18s cubic-bezier(.2,0,0,1)}:host.is-active{grid-template-rows:1fr;pointer-events:auto}:host.is-active .content{opacity:1;transform:translateY(0)}@media(prefers-reduced-motion:reduce){:host{transition-duration:1ms}:host .content{transform:none;transition-duration:1ms}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
232
234
  }], propDecorators: { _items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => SidebarNavItem), { ...{ descendants: true }, isSignal: true }] }], _defs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => SidebarNavItemDefDirective), { isSignal: true }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: false }] }], itemTypeProperty: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTypeProperty", required: false }] }] } });
233
235
 
234
236
  let nextId = 0;
235
237
  class SidebarNavGroup {
238
+ _navStore = inject(SidebarNavStore);
236
239
  _toggle = contentChild.required(SidebarNavGroupToggle, {
237
240
  descendants: false,
238
241
  });
@@ -246,13 +249,16 @@ class SidebarNavGroup {
246
249
  hasActiveItem() {
247
250
  return this._menu().hasActiveItem();
248
251
  }
252
+ get active() {
253
+ return this._navStore.isGroupActive(this._groupId);
254
+ }
249
255
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: SidebarNavGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
250
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.4", type: SidebarNavGroup, isStandalone: true, selector: "ngs-sidebar-nav-group", providers: [
256
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.4", type: SidebarNavGroup, isStandalone: true, selector: "ngs-sidebar-nav-group", host: { properties: { "class.is-active": "active" }, classAttribute: "ngs-sidebar-nav-group" }, providers: [
251
257
  {
252
258
  provide: SIDEBAR_NAVIGATION_GROUP,
253
259
  useExisting: forwardRef(() => SidebarNavGroup),
254
260
  }
255
- ], queries: [{ propertyName: "_toggle", first: true, predicate: SidebarNavGroupToggle, isSignal: true }, { propertyName: "_menu", first: true, predicate: SidebarNavGroupMenu, isSignal: true }], ngImport: i0, template: "<ng-content/>\n", styles: [":host{display:block;border-radius:var(--ngs-sidebar-nav-group-border-radius)}:host:has(.ngs-sidebar-nav-group-toggle.is-active){background:var(--ngs-sidebar-nav-group-active-bg)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
261
+ ], queries: [{ propertyName: "_toggle", first: true, predicate: SidebarNavGroupToggle, isSignal: true }, { propertyName: "_menu", first: true, predicate: SidebarNavGroupMenu, isSignal: true }], ngImport: i0, template: "<ng-content/>\n", styles: [":host{display:block;border-radius:var(--ngs-sidebar-nav-group-border-radius)}:host.is-active{background:var(--ngs-sidebar-nav-group-active-bg)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
256
262
  }
257
263
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: SidebarNavGroup, decorators: [{
258
264
  type: Component,
@@ -261,7 +267,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
261
267
  provide: SIDEBAR_NAVIGATION_GROUP,
262
268
  useExisting: forwardRef(() => SidebarNavGroup),
263
269
  }
264
- ], template: "<ng-content/>\n", styles: [":host{display:block;border-radius:var(--ngs-sidebar-nav-group-border-radius)}:host:has(.ngs-sidebar-nav-group-toggle.is-active){background:var(--ngs-sidebar-nav-group-active-bg)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
270
+ ], host: {
271
+ 'class': 'ngs-sidebar-nav-group',
272
+ '[class.is-active]': 'active',
273
+ }, template: "<ng-content/>\n", styles: [":host{display:block;border-radius:var(--ngs-sidebar-nav-group-border-radius)}:host.is-active{background:var(--ngs-sidebar-nav-group-active-bg)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
265
274
  }], propDecorators: { _toggle: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SidebarNavGroupToggle), { ...{
266
275
  descendants: false,
267
276
  }, isSignal: true }] }], _menu: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SidebarNavGroupMenu), { ...{
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-sidebar.mjs","sources":["../../../projects/components/sidebar/src/sidebar/sidebar.ts","../../../projects/components/sidebar/src/sidebar/sidebar.html","../../../projects/components/sidebar/src/sidebar-header/sidebar-header.ts","../../../projects/components/sidebar/src/sidebar-header/sidebar-header.html","../../../projects/components/sidebar/src/sidebar-body/sidebar-body.ts","../../../projects/components/sidebar/src/sidebar-body/sidebar-body.html","../../../projects/components/sidebar/src/types.ts","../../../projects/components/sidebar/src/sidebar.store.ts","../../../projects/components/sidebar/src/sidebar-nav-item/sidebar-nav-item.ts","../../../projects/components/sidebar/src/sidebar-nav-item/sidebar-nav-item.html","../../../projects/components/sidebar/src/sidebar-nav-group-toggle/sidebar-nav-group-toggle.ts","../../../projects/components/sidebar/src/sidebar-nav-group-toggle/sidebar-nav-group-toggle.html","../../../projects/components/sidebar/src/sidebar-nav-item-def.directive.ts","../../../projects/components/sidebar/src/sidebar-nav-group-menu/sidebar-nav-group-menu.ts","../../../projects/components/sidebar/src/sidebar-nav-group-menu/sidebar-nav-group-menu.html","../../../projects/components/sidebar/src/sidebar-nav-group/sidebar-nav-group.ts","../../../projects/components/sidebar/src/sidebar-nav-group/sidebar-nav-group.html","../../../projects/components/sidebar/src/sidebar-nav/sidebar-nav.ts","../../../projects/components/sidebar/src/sidebar-nav/sidebar-nav.html","../../../projects/components/sidebar/src/sidebar-footer/sidebar-footer.ts","../../../projects/components/sidebar/src/sidebar-footer/sidebar-footer.html","../../../projects/components/sidebar/src/sidebar-nav-heading/sidebar-nav-heading.ts","../../../projects/components/sidebar/src/sidebar-nav-heading/sidebar-nav-heading.html","../../../projects/components/sidebar/src/sidebar-divider/sidebar-divider.ts","../../../projects/components/sidebar/src/sidebar-divider/sidebar-divider.html","../../../projects/components/sidebar/src/sidebar-nav-item-icon.directive.ts","../../../projects/components/sidebar/src/sidebar-nav-item-badge.directive.ts","../../../projects/components/sidebar/src/sidebar-nav-group-toggle-icon.directive.ts","../../../projects/components/sidebar/ngstarter-ui-components-sidebar.ts"],"sourcesContent":["import { booleanAttribute, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ngs-sidebar',\n exportAs: 'ngsSidebar',\n templateUrl: './sidebar.html',\n styleUrl: './sidebar.scss',\n host: {\n 'class': 'ngs-sidebar',\n '[class.only-compact]': 'onlyCompact()'\n }\n})\nexport class Sidebar {\n onlyCompact = input(false, {\n transform: booleanAttribute\n });\n}\n","<ng-content select=\"ngs-sidebar-header\"/>\n<ng-content select=\"ngs-sidebar-body\"/>\n<ng-content select=\"ngs-sidebar-footer\"/>\n","import { booleanAttribute, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ngs-sidebar-header',\n exportAs: 'ngsSidebarHeader',\n templateUrl: './sidebar-header.html',\n styleUrl: './sidebar-header.scss',\n host: {\n 'class': 'ngs-sidebar-header',\n '[class.as-block]': 'block()'\n }\n})\nexport class SidebarHeader {\n block = input(false, {\n transform: booleanAttribute\n });\n}\n","<ng-content/>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-sidebar-body,ngs-sidebar-content',\n exportAs: 'ngsSidebarBody',\n templateUrl: './sidebar-body.html',\n styleUrl: './sidebar-body.scss',\n imports: [\n ],\n host: {\n 'class': 'ngs-sidebar-body ngs-sidebar-content'\n }\n})\nexport class SidebarBody {\n\n}\n","<ng-content/>\n","import { InjectionToken } from '@angular/core';\n\nexport const SIDEBAR_NAVIGATION = new InjectionToken('Sidebar navigation');\nexport const SIDEBAR_NAVIGATION_GROUP = new InjectionToken('SIDEBAR_NAVIGATION_GROUP');\n","import { patchState, signalStore, withMethods, withState } from '@ngrx/signals';\n\nexport interface SidebarNavState {\n activeItemKey: any;\n activeGroupKey: any;\n}\n\nconst initialState: SidebarNavState = {\n activeItemKey: null,\n activeGroupKey: null,\n};\n\nexport const SidebarNavStore = signalStore(\n withState(initialState),\n withMethods((store) => ({\n setItemActiveKey(activeItemKey: any): void {\n patchState(store, { activeItemKey });\n },\n isItemActive(activeItemKey: any): boolean {\n return store.activeItemKey() === activeItemKey;\n },\n setGroupActiveKey(activeGroupKey: any): void {\n patchState(store, { activeGroupKey });\n },\n isGroupActive(activeGroupKey: any): boolean {\n return store.activeGroupKey() === activeGroupKey;\n }\n }))\n);\n","import { booleanAttribute, Component, ElementRef, inject, input } from '@angular/core';\nimport { Ripple } from '@ngstarter-ui/components/core';\nimport { SIDEBAR_NAVIGATION } from '../types';\nimport { SidebarNav } from '../sidebar-nav/sidebar-nav';\nimport { SidebarNavStore } from '../sidebar.store';\n\nexport class SidebarNavItemInterface {\n active: boolean;\n}\n\n@Component({\n selector: 'ngs-sidebar-nav-item,[ngs-sidebar-nav-item]',\n exportAs: 'ngs-sidebar-nav-item',\n imports: [\n Ripple\n ],\n templateUrl: './sidebar-nav-item.html',\n styleUrl: './sidebar-nav-item.scss',\n host: {\n 'class': 'ngs-sidebar-nav-item',\n '[class.is-active]': 'forceActive() || active',\n '(click)': 'click($event)'\n }\n})\nexport class SidebarNavItem implements SidebarNavItemInterface {\n private _navigation = inject<SidebarNav>(SIDEBAR_NAVIGATION);\n private _elementRef = inject(ElementRef);\n private _navStore = inject(SidebarNavStore);\n\n get api() {\n return {\n isActive: () => this.active\n }\n }\n\n key = input<any>(Math.random());\n forceActive = input(false, {\n transform: booleanAttribute\n });\n\n click(event: MouseEvent) {\n if (!this.key()) {\n return;\n }\n\n this._navStore.setItemActiveKey(this.key());\n this._navigation.itemClicked.emit(this.key());\n }\n\n get active(): boolean {\n return this._navStore.isItemActive(this.key());\n }\n\n get _hostElement(): ElementRef {\n return this._elementRef;\n }\n}\n","<div class=\"inner\" ngsRipple>\n <div class=\"icon\">\n <ng-content select=\"[ngsSidebarNavItemIcon]\"/>\n </div>\n <span class=\"text grow\"><ng-content/></span>\n <div class=\"badge\">\n <ng-content select=\"[ngsSidebarNavItemBadge]\"/>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\nimport { Ripple } from '@ngstarter-ui/components/core';\nimport { SidebarNavStore } from '../sidebar.store';\n\n@Component({\n selector: 'ngs-sidebar-nav-group-toggle',\n exportAs: 'ngsSidebarNavGroupToggle',\n templateUrl: './sidebar-nav-group-toggle.html',\n styleUrl: './sidebar-nav-group-toggle.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n Ripple\n ],\n host: {\n 'class': 'ngs-sidebar-nav-group-toggle',\n '[class.is-active]': 'active',\n '(click)': 'toggle($event)'\n }\n})\nexport class SidebarNavGroupToggle {\n private _navStore = inject(SidebarNavStore);\n\n readonly for = signal<any>(null);\n\n get active(): boolean {\n if (!this.for()) {\n return false;\n }\n\n return this._navStore.isGroupActive(this.for());\n }\n\n toggle(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this._navStore.isGroupActive(this.for())) {\n this._navStore.setGroupActiveKey(null);\n } else {\n this._navStore.setGroupActiveKey(this.for());\n }\n }\n}\n","<div class=\"icon\"><ng-content select=\"[ngsSidebarNavItemIcon]\"/></div>\n<span class=\"text grow\"><ng-content/></span>\n<div class=\"flex items-center gap-0.5\">\n <div class=\"badge\">\n <ng-content select=\"[ngsSidebarNavItemBadge]\"/>\n </div>\n <div class=\"arrow\">\n <ng-content select=\"[ngsSidebarNavGroupToggleIcon]\"/>\n </div>\n</div>\n","import { Directive, input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsSidebarNavItemDef]',\n standalone: true\n})\nexport class SidebarNavItemDefDirective {\n when = input<string | ((item: any) => boolean) | undefined>(undefined, { alias: 'ngsSidebarNavItemDef' });\n\n constructor(public template: TemplateRef<any>) {}\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n inject,\n input,\n OnInit,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { SIDEBAR_NAVIGATION, SIDEBAR_NAVIGATION_GROUP } from '../types';\nimport { SidebarNav } from '../sidebar-nav/sidebar-nav';\nimport { SidebarNavGroup } from '../sidebar-nav-group/sidebar-nav-group';\nimport { SidebarNavItem } from '../sidebar-nav-item/sidebar-nav-item';\nimport { SidebarNavStore } from '../sidebar.store';\nimport { SidebarNavItemDefDirective } from '../sidebar-nav-item-def.directive';\n\n@Component({\n selector: 'ngs-sidebar-nav-group-menu',\n exportAs: 'ngsSidebarNavGroupMenu',\n templateUrl: './sidebar-nav-group-menu.html',\n styleUrl: './sidebar-nav-group-menu.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n NgTemplateOutlet\n ],\n host: {\n 'class': 'ngs-sidebar-nav-group-menu',\n '[class.is-active]': 'active'\n }\n})\nexport class SidebarNavGroupMenu implements AfterContentInit, OnInit {\n readonly navigation = inject<SidebarNav>(SIDEBAR_NAVIGATION);\n private _group = inject<SidebarNavGroup>(SIDEBAR_NAVIGATION_GROUP);\n private _navStore = inject(SidebarNavStore);\n\n readonly _items = contentChildren(SidebarNavItem, { descendants: true });\n readonly _defs = contentChildren(SidebarNavItemDefDirective);\n\n key = signal<any>(this._group._groupId);\n dataSource = input<any[]>();\n itemTypeProperty = input<string>('type');\n\n get active(): boolean {\n return this._navStore.isGroupActive(this.key());\n }\n\n ngOnInit() {\n this.navigation\n .itemClicked\n .subscribe(() => {\n if (!this.hasActiveItem() && this._group._groupId === this._navStore.activeGroupKey()) {\n this._navStore.setGroupActiveKey(null);\n }\n });\n }\n\n ngAfterContentInit() {\n this._checkIfActive();\n }\n\n hasActiveItem(): boolean {\n const fromItems = this._items().some(item => item.active);\n if (fromItems) {\n return true;\n }\n\n const data = this.dataSource();\n if (data) {\n const activeKey = this._navStore.activeItemKey();\n return data.some(item => this._isActive(item, activeKey));\n }\n\n return false;\n }\n\n getTemplate(item: any): TemplateRef<any> | null {\n const def = this._defs().find(d => {\n const whenValue = d.when();\n if (whenValue) {\n if (typeof whenValue === 'function') {\n return whenValue(item);\n }\n return item[this.itemTypeProperty()] === whenValue;\n }\n\n return false;\n }) || this._defs().find(d => !d.when());\n\n return def?.template || null;\n }\n\n private _checkIfActive() {\n if (this.hasActiveItem()) {\n this._navStore.setGroupActiveKey(this.key());\n }\n }\n\n private _isActive(item: any, activeKey: any): boolean {\n if (item.key === activeKey) {\n return true;\n }\n\n if (item.children && Array.isArray(item.children)) {\n return item.children.some((child: any) => this._isActive(child, activeKey));\n }\n\n return false;\n }\n}\n","@if (dataSource(); as data) {\n <div class=\"inner\">\n @for (item of data; track item) {\n <ng-container *ngTemplateOutlet=\"getTemplate(item); context: { $implicit: item }\" />\n }\n </div>\n} @else {\n <div class=\"inner\">\n <ng-content/>\n </div>\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n contentChild,\n forwardRef,\n} from '@angular/core';\nimport { SidebarNavGroupToggle } from '../sidebar-nav-group-toggle/sidebar-nav-group-toggle';\nimport { SIDEBAR_NAVIGATION_GROUP } from '../types';\nimport { SidebarNavGroupMenu } from '../sidebar-nav-group-menu/sidebar-nav-group-menu';\n\nlet nextId = 0;\n\n@Component({\n selector: 'ngs-sidebar-nav-group',\n templateUrl: './sidebar-nav-group.html',\n styleUrl: './sidebar-nav-group.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: SIDEBAR_NAVIGATION_GROUP,\n useExisting: forwardRef(() => SidebarNavGroup),\n }\n ]\n})\nexport class SidebarNavGroup implements AfterContentInit {\n private _toggle = contentChild.required(SidebarNavGroupToggle, {\n descendants: false,\n });\n private _menu = contentChild.required(SidebarNavGroupMenu, {\n descendants: false,\n });\n readonly _groupId = `sidebar-nav-group-${nextId++}`;\n\n ngAfterContentInit() {\n this._toggle().for.set(this._groupId);\n }\n\n hasActiveItem(): boolean {\n return this._menu().hasActiveItem();\n }\n}\n","<ng-content/>\n","import {\n AfterContentInit,\n afterNextRender, booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n ElementRef, forwardRef,\n inject,\n input,\n output,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n SidebarNavItem\n} from '../sidebar-nav-item/sidebar-nav-item';\nimport { SIDEBAR_NAVIGATION } from '../types';\nimport { SidebarNavStore } from '../sidebar.store';\nimport { SidebarNavGroup } from '../sidebar-nav-group/sidebar-nav-group';\nimport { SidebarNavItemDefDirective } from '../sidebar-nav-item-def.directive';\n\n@Component({\n selector: 'ngs-sidebar-nav',\n exportAs: 'ngsSidebarNav',\n templateUrl: './sidebar-nav.html',\n styleUrl: './sidebar-nav.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n NgTemplateOutlet\n ],\n providers: [\n {\n provide: SIDEBAR_NAVIGATION,\n useExisting: forwardRef(() => SidebarNav),\n },\n SidebarNavStore\n ],\n host: {\n 'class': 'ngs-sidebar-nav',\n },\n})\nexport class SidebarNav implements AfterContentInit {\n private _elementRef = inject(ElementRef);\n private _navStore = inject(SidebarNavStore);\n\n readonly _items = contentChildren(SidebarNavItem, { descendants: true });\n readonly _groups = contentChildren(SidebarNavGroup, { descendants: true });\n readonly _defs = contentChildren(SidebarNavItemDefDirective);\n\n activeKey = input();\n dataSource = input<any[]>();\n itemTypeProperty = input<string>('type');\n autoScrollToActiveItem = input(false, {\n transform: booleanAttribute\n });\n\n readonly itemClicked = output<any>();\n\n constructor() {\n // scroll to the active item if it is not visible in the viewport\n afterNextRender(() => {\n if (this.autoScrollToActiveItem()) {\n this._scrollToActiveItem();\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['activeKey']) {\n this._navStore.setItemActiveKey(changes['activeKey'].currentValue);\n this._groups().forEach((group: SidebarNavGroup) => {\n if (group.hasActiveItem()) {\n this._navStore.setGroupActiveKey(group._groupId);\n requestAnimationFrame(() => {\n this._scrollToActiveItem();\n });\n }\n });\n }\n }\n\n ngAfterContentInit() {\n }\n\n private _hasScroll(element: HTMLElement): boolean {\n if (!element.getBoundingClientRect) {\n return false;\n }\n\n return Math.ceil(element.scrollHeight) > Math.ceil(element.getBoundingClientRect().height);\n }\n\n private _isScrolledIntoView(element: HTMLElement, parent: HTMLElement) {\n const elementRect = element.getBoundingClientRect();\n const parentRect = parent.getBoundingClientRect();\n return (elementRect.top >= 0) && (elementRect.bottom <= parentRect.height);\n }\n\n getTemplate(item: any): TemplateRef<any> | null {\n const def = this._defs().find(d => {\n const whenValue = d.when();\n if (whenValue) {\n if (typeof whenValue === 'function') {\n return whenValue(item);\n }\n return item[this.itemTypeProperty()] === whenValue;\n }\n\n return false;\n }) || this._defs().find(d => !d.when());\n\n return def?.template || null;\n }\n\n private _scrollToActiveItem(): void {\n this._items().forEach((item: SidebarNavItem) => {\n if (item.active) {\n let scrollContainer = this._elementRef.nativeElement.closest('.scrollable-content');\n const itemElement = item._hostElement.nativeElement as HTMLElement;\n\n if (this._hasScroll(scrollContainer)) {\n if (!this._isScrolledIntoView(itemElement, scrollContainer)) {\n const parentRect = scrollContainer.getBoundingClientRect();\n const elementRect = itemElement.getBoundingClientRect();\n scrollContainer.scrollTop = elementRect.top - parentRect.height / 2;\n }\n }\n }\n });\n }\n}\n","@if (dataSource(); as data) {\n @for (item of data; track item) {\n <ng-container *ngTemplateOutlet=\"getTemplate(item); context: { $implicit: item }\" />\n }\n} @else {\n <ng-content/>\n}\n","import {booleanAttribute, Component, input} from '@angular/core';\n\n@Component({\n selector: 'ngs-sidebar-footer',\n exportAs: 'ngsSidebarFooter',\n templateUrl: './sidebar-footer.html',\n styleUrl: './sidebar-footer.scss',\n host: {\n 'class': 'ngs-sidebar-footer',\n '[class.as-block]': 'block()'\n }\n})\nexport class SidebarFooter {\n block = input(false, {\n transform: booleanAttribute\n });\n}\n","<ng-content/>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-sidebar-nav-heading',\n exportAs: 'ngsSidebarNavHeading',\n imports: [\n ],\n templateUrl: './sidebar-nav-heading.html',\n styleUrl: './sidebar-nav-heading.scss',\n host: {\n class: 'ngs-sidebar-nav-heading',\n }\n})\nexport class SidebarNavHeading {\n\n}\n","<div class=\"line\"></div>\n<div class=\"content\">\n <ng-content/>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-sidebar-divider',\n imports: [],\n templateUrl: './sidebar-divider.html',\n styleUrl: './sidebar-divider.scss',\n})\nexport class SidebarDivider {\n\n}\n","<p>sidebar-divider works!</p>\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsSidebarNavItemIcon]'\n})\nexport class SidebarNavItemIconDirective {\n // readonly templateRef = inject(TemplateRef);\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[ngsSidebarNavItemBadge]'\n})\nexport class SidebarNavItemBadgeDirective {\n\n constructor() { }\n\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[ngsSidebarNavGroupToggleIcon]'\n})\nexport class SidebarNavGroupToggleIconDirective {\n\n constructor() { }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngstarter-ui-components-sidebar.mjs","sources":["../../../projects/components/sidebar/src/sidebar/sidebar.ts","../../../projects/components/sidebar/src/sidebar/sidebar.html","../../../projects/components/sidebar/src/sidebar-header/sidebar-header.ts","../../../projects/components/sidebar/src/sidebar-header/sidebar-header.html","../../../projects/components/sidebar/src/sidebar-body/sidebar-body.ts","../../../projects/components/sidebar/src/sidebar-body/sidebar-body.html","../../../projects/components/sidebar/src/types.ts","../../../projects/components/sidebar/src/sidebar.store.ts","../../../projects/components/sidebar/src/sidebar-nav-item/sidebar-nav-item.ts","../../../projects/components/sidebar/src/sidebar-nav-item/sidebar-nav-item.html","../../../projects/components/sidebar/src/sidebar-nav-group-toggle/sidebar-nav-group-toggle.ts","../../../projects/components/sidebar/src/sidebar-nav-group-toggle/sidebar-nav-group-toggle.html","../../../projects/components/sidebar/src/sidebar-nav-item-def.directive.ts","../../../projects/components/sidebar/src/sidebar-nav-group-menu/sidebar-nav-group-menu.ts","../../../projects/components/sidebar/src/sidebar-nav-group-menu/sidebar-nav-group-menu.html","../../../projects/components/sidebar/src/sidebar-nav-group/sidebar-nav-group.ts","../../../projects/components/sidebar/src/sidebar-nav-group/sidebar-nav-group.html","../../../projects/components/sidebar/src/sidebar-nav/sidebar-nav.ts","../../../projects/components/sidebar/src/sidebar-nav/sidebar-nav.html","../../../projects/components/sidebar/src/sidebar-footer/sidebar-footer.ts","../../../projects/components/sidebar/src/sidebar-footer/sidebar-footer.html","../../../projects/components/sidebar/src/sidebar-nav-heading/sidebar-nav-heading.ts","../../../projects/components/sidebar/src/sidebar-nav-heading/sidebar-nav-heading.html","../../../projects/components/sidebar/src/sidebar-divider/sidebar-divider.ts","../../../projects/components/sidebar/src/sidebar-divider/sidebar-divider.html","../../../projects/components/sidebar/src/sidebar-nav-item-icon.directive.ts","../../../projects/components/sidebar/src/sidebar-nav-item-badge.directive.ts","../../../projects/components/sidebar/src/sidebar-nav-group-toggle-icon.directive.ts","../../../projects/components/sidebar/ngstarter-ui-components-sidebar.ts"],"sourcesContent":["import { booleanAttribute, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ngs-sidebar',\n exportAs: 'ngsSidebar',\n templateUrl: './sidebar.html',\n styleUrl: './sidebar.scss',\n host: {\n 'class': 'ngs-sidebar',\n '[class.only-compact]': 'onlyCompact()'\n }\n})\nexport class Sidebar {\n onlyCompact = input(false, {\n transform: booleanAttribute\n });\n}\n","<ng-content select=\"ngs-sidebar-header\"/>\n<ng-content select=\"ngs-sidebar-body\"/>\n<ng-content select=\"ngs-sidebar-footer\"/>\n","import { booleanAttribute, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ngs-sidebar-header',\n exportAs: 'ngsSidebarHeader',\n templateUrl: './sidebar-header.html',\n styleUrl: './sidebar-header.scss',\n host: {\n 'class': 'ngs-sidebar-header',\n '[class.as-block]': 'block()'\n }\n})\nexport class SidebarHeader {\n block = input(false, {\n transform: booleanAttribute\n });\n}\n","<ng-content/>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-sidebar-body,ngs-sidebar-content',\n exportAs: 'ngsSidebarBody',\n templateUrl: './sidebar-body.html',\n styleUrl: './sidebar-body.scss',\n imports: [\n ],\n host: {\n 'class': 'ngs-sidebar-body ngs-sidebar-content'\n }\n})\nexport class SidebarBody {\n\n}\n","<ng-content/>\n","import { InjectionToken } from '@angular/core';\n\nexport const SIDEBAR_NAVIGATION = new InjectionToken('Sidebar navigation');\nexport const SIDEBAR_NAVIGATION_GROUP = new InjectionToken('SIDEBAR_NAVIGATION_GROUP');\n","import { patchState, signalStore, withMethods, withState } from '@ngrx/signals';\n\nexport interface SidebarNavState {\n activeItemKey: any;\n activeGroupKey: any;\n}\n\nconst initialState: SidebarNavState = {\n activeItemKey: null,\n activeGroupKey: null,\n};\n\nexport const SidebarNavStore = signalStore(\n withState(initialState),\n withMethods((store) => ({\n setItemActiveKey(activeItemKey: any): void {\n patchState(store, { activeItemKey });\n },\n isItemActive(activeItemKey: any): boolean {\n return store.activeItemKey() === activeItemKey;\n },\n setGroupActiveKey(activeGroupKey: any): void {\n patchState(store, { activeGroupKey });\n },\n isGroupActive(activeGroupKey: any): boolean {\n return store.activeGroupKey() === activeGroupKey;\n }\n }))\n);\n","import { booleanAttribute, Component, ElementRef, inject, input } from '@angular/core';\nimport { Ripple } from '@ngstarter-ui/components/core';\nimport { SIDEBAR_NAVIGATION } from '../types';\nimport { SidebarNav } from '../sidebar-nav/sidebar-nav';\nimport { SidebarNavStore } from '../sidebar.store';\n\nexport class SidebarNavItemInterface {\n active: boolean;\n}\n\n@Component({\n selector: 'ngs-sidebar-nav-item,[ngs-sidebar-nav-item]',\n exportAs: 'ngs-sidebar-nav-item',\n imports: [\n Ripple\n ],\n templateUrl: './sidebar-nav-item.html',\n styleUrl: './sidebar-nav-item.scss',\n host: {\n 'class': 'ngs-sidebar-nav-item',\n '[class.is-active]': 'forceActive() || active',\n '(click)': 'click($event)'\n }\n})\nexport class SidebarNavItem implements SidebarNavItemInterface {\n private _navigation = inject<SidebarNav>(SIDEBAR_NAVIGATION);\n private _elementRef = inject(ElementRef);\n private _navStore = inject(SidebarNavStore);\n\n get api() {\n return {\n isActive: () => this.active\n }\n }\n\n key = input<any>(Math.random());\n forceActive = input(false, {\n transform: booleanAttribute\n });\n\n click(event: MouseEvent) {\n if (!this.key()) {\n return;\n }\n\n this._navStore.setItemActiveKey(this.key());\n this._navigation.itemClicked.emit(this.key());\n }\n\n get active(): boolean {\n return this._navStore.isItemActive(this.key());\n }\n\n get _hostElement(): ElementRef {\n return this._elementRef;\n }\n}\n","<div class=\"inner\" ngsRipple>\n <div class=\"icon\">\n <ng-content select=\"[ngsSidebarNavItemIcon]\"/>\n </div>\n <span class=\"text grow\"><ng-content/></span>\n <div class=\"badge\">\n <ng-content select=\"[ngsSidebarNavItemBadge]\"/>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\nimport { Ripple } from '@ngstarter-ui/components/core';\nimport { SidebarNavStore } from '../sidebar.store';\n\n@Component({\n selector: 'ngs-sidebar-nav-group-toggle',\n exportAs: 'ngsSidebarNavGroupToggle',\n templateUrl: './sidebar-nav-group-toggle.html',\n styleUrl: './sidebar-nav-group-toggle.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n Ripple\n ],\n host: {\n 'class': 'ngs-sidebar-nav-group-toggle',\n '[class.is-active]': 'active',\n '(click)': 'toggle($event)'\n }\n})\nexport class SidebarNavGroupToggle {\n private _navStore = inject(SidebarNavStore);\n\n readonly for = signal<any>(null);\n\n get active(): boolean {\n if (!this.for()) {\n return false;\n }\n\n return this._navStore.isGroupActive(this.for());\n }\n\n toggle(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this._navStore.isGroupActive(this.for())) {\n this._navStore.setGroupActiveKey(null);\n } else {\n this._navStore.setGroupActiveKey(this.for());\n }\n }\n}\n","<div class=\"icon\"><ng-content select=\"[ngsSidebarNavItemIcon]\"/></div>\n<span class=\"text grow\"><ng-content/></span>\n<div class=\"flex items-center gap-0.5\">\n <div class=\"badge\">\n <ng-content select=\"[ngsSidebarNavItemBadge]\"/>\n </div>\n <div class=\"arrow\">\n <ng-content select=\"[ngsSidebarNavGroupToggleIcon]\"/>\n </div>\n</div>\n","import { Directive, input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsSidebarNavItemDef]',\n standalone: true\n})\nexport class SidebarNavItemDefDirective {\n when = input<string | ((item: any) => boolean) | undefined>(undefined, { alias: 'ngsSidebarNavItemDef' });\n\n constructor(public template: TemplateRef<any>) {}\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n inject,\n input,\n OnInit,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { SIDEBAR_NAVIGATION, SIDEBAR_NAVIGATION_GROUP } from '../types';\nimport { SidebarNav } from '../sidebar-nav/sidebar-nav';\nimport { SidebarNavGroup } from '../sidebar-nav-group/sidebar-nav-group';\nimport { SidebarNavItem } from '../sidebar-nav-item/sidebar-nav-item';\nimport { SidebarNavStore } from '../sidebar.store';\nimport { SidebarNavItemDefDirective } from '../sidebar-nav-item-def.directive';\n\n@Component({\n selector: 'ngs-sidebar-nav-group-menu',\n exportAs: 'ngsSidebarNavGroupMenu',\n templateUrl: './sidebar-nav-group-menu.html',\n styleUrl: './sidebar-nav-group-menu.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n NgTemplateOutlet\n ],\n host: {\n 'class': 'ngs-sidebar-nav-group-menu',\n '[class.is-active]': 'active',\n '[attr.aria-hidden]': 'active ? null : \"true\"',\n '[attr.inert]': 'active ? null : \"\"',\n }\n})\nexport class SidebarNavGroupMenu implements AfterContentInit, OnInit {\n readonly navigation = inject<SidebarNav>(SIDEBAR_NAVIGATION);\n private _group = inject<SidebarNavGroup>(SIDEBAR_NAVIGATION_GROUP);\n private _navStore = inject(SidebarNavStore);\n\n readonly _items = contentChildren(SidebarNavItem, { descendants: true });\n readonly _defs = contentChildren(SidebarNavItemDefDirective);\n\n key = signal<any>(this._group._groupId);\n dataSource = input<any[]>();\n itemTypeProperty = input<string>('type');\n\n get active(): boolean {\n return this._navStore.isGroupActive(this.key());\n }\n\n ngOnInit() {\n this.navigation\n .itemClicked\n .subscribe(() => {\n if (!this.hasActiveItem() && this._group._groupId === this._navStore.activeGroupKey()) {\n this._navStore.setGroupActiveKey(null);\n }\n });\n }\n\n ngAfterContentInit() {\n this._checkIfActive();\n }\n\n hasActiveItem(): boolean {\n const fromItems = this._items().some(item => item.active);\n if (fromItems) {\n return true;\n }\n\n const data = this.dataSource();\n if (data) {\n const activeKey = this._navStore.activeItemKey();\n return data.some(item => this._isActive(item, activeKey));\n }\n\n return false;\n }\n\n getTemplate(item: any): TemplateRef<any> | null {\n const def = this._defs().find(d => {\n const whenValue = d.when();\n if (whenValue) {\n if (typeof whenValue === 'function') {\n return whenValue(item);\n }\n return item[this.itemTypeProperty()] === whenValue;\n }\n\n return false;\n }) || this._defs().find(d => !d.when());\n\n return def?.template || null;\n }\n\n private _checkIfActive() {\n if (this.hasActiveItem()) {\n this._navStore.setGroupActiveKey(this.key());\n }\n }\n\n private _isActive(item: any, activeKey: any): boolean {\n if (item.key === activeKey) {\n return true;\n }\n\n if (item.children && Array.isArray(item.children)) {\n return item.children.some((child: any) => this._isActive(child, activeKey));\n }\n\n return false;\n }\n}\n","@if (dataSource(); as data) {\n <div class=\"inner\">\n <div class=\"content\">\n @for (item of data; track item) {\n <ng-container *ngTemplateOutlet=\"getTemplate(item); context: { $implicit: item }\" />\n }\n </div>\n </div>\n} @else {\n <div class=\"inner\">\n <div class=\"content\">\n <ng-content/>\n </div>\n </div>\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n contentChild,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { SidebarNavGroupToggle } from '../sidebar-nav-group-toggle/sidebar-nav-group-toggle';\nimport { SIDEBAR_NAVIGATION_GROUP } from '../types';\nimport { SidebarNavGroupMenu } from '../sidebar-nav-group-menu/sidebar-nav-group-menu';\nimport { SidebarNavStore } from '../sidebar.store';\n\nlet nextId = 0;\n\n@Component({\n selector: 'ngs-sidebar-nav-group',\n templateUrl: './sidebar-nav-group.html',\n styleUrl: './sidebar-nav-group.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: SIDEBAR_NAVIGATION_GROUP,\n useExisting: forwardRef(() => SidebarNavGroup),\n }\n ],\n host: {\n 'class': 'ngs-sidebar-nav-group',\n '[class.is-active]': 'active',\n }\n})\nexport class SidebarNavGroup implements AfterContentInit {\n private _navStore = inject(SidebarNavStore);\n private _toggle = contentChild.required(SidebarNavGroupToggle, {\n descendants: false,\n });\n private _menu = contentChild.required(SidebarNavGroupMenu, {\n descendants: false,\n });\n readonly _groupId = `sidebar-nav-group-${nextId++}`;\n\n ngAfterContentInit() {\n this._toggle().for.set(this._groupId);\n }\n\n hasActiveItem(): boolean {\n return this._menu().hasActiveItem();\n }\n\n get active(): boolean {\n return this._navStore.isGroupActive(this._groupId);\n }\n}\n","<ng-content/>\n","import {\n AfterContentInit,\n afterNextRender, booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n ElementRef, forwardRef,\n inject,\n input,\n output,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n SidebarNavItem\n} from '../sidebar-nav-item/sidebar-nav-item';\nimport { SIDEBAR_NAVIGATION } from '../types';\nimport { SidebarNavStore } from '../sidebar.store';\nimport { SidebarNavGroup } from '../sidebar-nav-group/sidebar-nav-group';\nimport { SidebarNavItemDefDirective } from '../sidebar-nav-item-def.directive';\n\n@Component({\n selector: 'ngs-sidebar-nav',\n exportAs: 'ngsSidebarNav',\n templateUrl: './sidebar-nav.html',\n styleUrl: './sidebar-nav.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n NgTemplateOutlet\n ],\n providers: [\n {\n provide: SIDEBAR_NAVIGATION,\n useExisting: forwardRef(() => SidebarNav),\n },\n SidebarNavStore\n ],\n host: {\n 'class': 'ngs-sidebar-nav',\n },\n})\nexport class SidebarNav implements AfterContentInit {\n private _elementRef = inject(ElementRef);\n private _navStore = inject(SidebarNavStore);\n\n readonly _items = contentChildren(SidebarNavItem, { descendants: true });\n readonly _groups = contentChildren(SidebarNavGroup, { descendants: true });\n readonly _defs = contentChildren(SidebarNavItemDefDirective);\n\n activeKey = input();\n dataSource = input<any[]>();\n itemTypeProperty = input<string>('type');\n autoScrollToActiveItem = input(false, {\n transform: booleanAttribute\n });\n\n readonly itemClicked = output<any>();\n\n constructor() {\n // scroll to the active item if it is not visible in the viewport\n afterNextRender(() => {\n if (this.autoScrollToActiveItem()) {\n this._scrollToActiveItem();\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['activeKey']) {\n this._navStore.setItemActiveKey(changes['activeKey'].currentValue);\n this._groups().forEach((group: SidebarNavGroup) => {\n if (group.hasActiveItem()) {\n this._navStore.setGroupActiveKey(group._groupId);\n requestAnimationFrame(() => {\n this._scrollToActiveItem();\n });\n }\n });\n }\n }\n\n ngAfterContentInit() {\n }\n\n private _hasScroll(element: HTMLElement): boolean {\n if (!element.getBoundingClientRect) {\n return false;\n }\n\n return Math.ceil(element.scrollHeight) > Math.ceil(element.getBoundingClientRect().height);\n }\n\n private _isScrolledIntoView(element: HTMLElement, parent: HTMLElement) {\n const elementRect = element.getBoundingClientRect();\n const parentRect = parent.getBoundingClientRect();\n return (elementRect.top >= 0) && (elementRect.bottom <= parentRect.height);\n }\n\n getTemplate(item: any): TemplateRef<any> | null {\n const def = this._defs().find(d => {\n const whenValue = d.when();\n if (whenValue) {\n if (typeof whenValue === 'function') {\n return whenValue(item);\n }\n return item[this.itemTypeProperty()] === whenValue;\n }\n\n return false;\n }) || this._defs().find(d => !d.when());\n\n return def?.template || null;\n }\n\n private _scrollToActiveItem(): void {\n this._items().forEach((item: SidebarNavItem) => {\n if (item.active) {\n let scrollContainer = this._elementRef.nativeElement.closest('.scrollable-content');\n const itemElement = item._hostElement.nativeElement as HTMLElement;\n\n if (this._hasScroll(scrollContainer)) {\n if (!this._isScrolledIntoView(itemElement, scrollContainer)) {\n const parentRect = scrollContainer.getBoundingClientRect();\n const elementRect = itemElement.getBoundingClientRect();\n scrollContainer.scrollTop = elementRect.top - parentRect.height / 2;\n }\n }\n }\n });\n }\n}\n","@if (dataSource(); as data) {\n @for (item of data; track item) {\n <ng-container *ngTemplateOutlet=\"getTemplate(item); context: { $implicit: item }\" />\n }\n} @else {\n <ng-content/>\n}\n","import {booleanAttribute, Component, input} from '@angular/core';\n\n@Component({\n selector: 'ngs-sidebar-footer',\n exportAs: 'ngsSidebarFooter',\n templateUrl: './sidebar-footer.html',\n styleUrl: './sidebar-footer.scss',\n host: {\n 'class': 'ngs-sidebar-footer',\n '[class.as-block]': 'block()'\n }\n})\nexport class SidebarFooter {\n block = input(false, {\n transform: booleanAttribute\n });\n}\n","<ng-content/>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-sidebar-nav-heading',\n exportAs: 'ngsSidebarNavHeading',\n imports: [\n ],\n templateUrl: './sidebar-nav-heading.html',\n styleUrl: './sidebar-nav-heading.scss',\n host: {\n class: 'ngs-sidebar-nav-heading',\n }\n})\nexport class SidebarNavHeading {\n\n}\n","<div class=\"line\"></div>\n<div class=\"content\">\n <ng-content/>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-sidebar-divider',\n imports: [],\n templateUrl: './sidebar-divider.html',\n styleUrl: './sidebar-divider.scss',\n})\nexport class SidebarDivider {\n\n}\n","<p>sidebar-divider works!</p>\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsSidebarNavItemIcon]'\n})\nexport class SidebarNavItemIconDirective {\n // readonly templateRef = inject(TemplateRef);\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[ngsSidebarNavItemBadge]'\n})\nexport class SidebarNavItemBadgeDirective {\n\n constructor() { }\n\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[ngsSidebarNavGroupToggleIcon]'\n})\nexport class SidebarNavGroupToggleIconDirective {\n\n constructor() { }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -56,11 +56,11 @@ class Stepper extends CdkStepper {
56
56
  super.ngAfterContentInit();
57
57
  }
58
58
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: Stepper, deps: null, target: i0.ɵɵFactoryTarget.Component });
59
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: Stepper, isStandalone: true, selector: "ngs-stepper", inputs: { headerPosition: { classPropertyName: "headerPosition", publicName: "headerPosition", isSignal: true, isRequired: false, transformFunction: null }, labelPosition: { classPropertyName: "labelPosition", publicName: "labelPosition", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: CdkStepper, useExisting: Stepper }], queries: [{ propertyName: "stepItems", predicate: Step, descendants: true, isSignal: true }, { propertyName: "_stepLabels", predicate: StepLabel, descendants: true, isSignal: true }], exportAs: ["ngsStepper"], usesInheritance: true, ngImport: i0, template: "<div class=\"ngs-stepper\"\n [class.ngs-stepper-vertical]=\"orientation === 'vertical'\"\n [class.ngs-stepper-horizontal]=\"orientation === 'horizontal'\"\n [class.ngs-stepper-header-bottom]=\"headerPosition() === 'bottom'\">\n @if (orientation === 'horizontal') {\n <div class=\"ngs-stepper-header-container\" [class.ngs-stepper-label-bottom-container]=\"labelPosition() === 'bottom'\">\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-header\"\n [class.ngs-stepper-header-active]=\"selectedIndex === i\"\n [class.ngs-stepper-header-completed]=\"step.completed\"\n [class.ngs-stepper-label-bottom]=\"labelPosition() === 'bottom'\"\n (click)=\"step.select()\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedIndex === i\"\n [attr.aria-controls]=\"_getStepContentId(i)\">\n <div class=\"ngs-stepper-icon\">\n @if (step.completed) {\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">\n <path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\n </svg>\n } @else {\n {{ i + 1 }}\n }\n </div>\n <div class=\"ngs-stepper-label\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n </div>\n </div>\n @if (i < stepItems().length - 1 && labelPosition() !== 'bottom') {\n <div class=\"ngs-stepper-line\"></div>\n }\n }\n </div>\n\n <div class=\"ngs-stepper-content-container\">\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-content\"\n [id]=\"_getStepContentId(i)\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [hidden]=\"selectedIndex !== i\">\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n }\n </div>\n } @else {\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-header\"\n [class.ngs-stepper-header-active]=\"selectedIndex === i\"\n [class.ngs-stepper-header-completed]=\"step.completed\"\n (click)=\"step.select()\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedIndex === i\"\n [attr.aria-controls]=\"_getStepContentId(i)\">\n <div class=\"ngs-stepper-icon\">\n @if (step.completed) {\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">\n <path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\n </svg>\n } @else {\n {{ i + 1 }}\n }\n </div>\n <div class=\"ngs-stepper-label\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n </div>\n </div>\n <div class=\"ngs-stepper-content-wrapper\" [class.ngs-stepper-last-step]=\"i === stepItems().length - 1\">\n <div class=\"ngs-stepper-vertical-line\"></div>\n <div class=\"ngs-stepper-content\"\n [id]=\"_getStepContentId(i)\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [hidden]=\"selectedIndex !== i\">\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n </div>\n }\n }\n</div>\n", styles: [":root{--ngs-stepper-header-padding: 16px;--ngs-stepper-header-gap: 8px;--ngs-stepper-icon-size: 24px;--ngs-stepper-icon-bg: var(--ngs-color-surface-container-high);--ngs-stepper-icon-color: var(--ngs-color-on-surface);--ngs-stepper-icon-active-bg: var(--ngs-color-primary);--ngs-stepper-icon-completed-bg: var(--ngs-color-success);--ngs-stepper-label-color: var(--ngs-color-on-surface-variant);--ngs-stepper-label-active-color: var(--ngs-color-on-surface);--ngs-stepper-line-color: var(--ngs-color-outline-variant);--ngs-stepper-content-padding: 24px}.ngs-stepper{display:flex;flex-direction:column}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-header{padding:16px 0}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-content-wrapper{margin-left:calc(var(--ngs-stepper-icon-size) / 2 - .5px);padding-left:calc(var(--ngs-stepper-icon-size) / 2 + var(--ngs-stepper-header-gap) + .5px);position:relative}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-content-wrapper.ngs-stepper-last-step .ngs-stepper-vertical-line{display:none}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-vertical-line{position:absolute;left:0;top:-16px;bottom:-16px;width:1px;background:var(--ngs-stepper-line-color)}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-content{padding:8px 0 24px}.ngs-stepper.ngs-stepper-header-bottom{flex-direction:column-reverse}.ngs-stepper.ngs-stepper-header-bottom .ngs-stepper-header-container{border-bottom:none;border-top:1px solid var(--ngs-stepper-line-color)}.ngs-stepper-header-container{display:flex;align-items:center;padding:0 var(--ngs-stepper-header-padding);border-bottom:1px solid var(--ngs-stepper-line-color);overflow-x:hidden}.ngs-stepper-header-container.ngs-stepper-label-bottom-container{align-items:flex-start;padding:0}.ngs-stepper-header-container.ngs-stepper-label-bottom-container .ngs-stepper-header{flex:1;padding-left:8px;padding-right:8px}.ngs-stepper-header{display:flex;align-items:center;gap:var(--ngs-stepper-header-gap);padding:16px 0;cursor:pointer;white-space:nowrap;outline:none;position:relative;min-width:0}.ngs-stepper-header:hover .ngs-stepper-icon:not(.ngs-stepper-header-active .ngs-stepper-icon){background:var(--ngs-color-surface-container-highest)}.ngs-stepper-header.ngs-stepper-label-bottom{flex-direction:column;justify-content:center;width:auto;min-width:100px;gap:12px}.ngs-stepper-header.ngs-stepper-label-bottom .ngs-stepper-label{text-align:center;white-space:normal}.ngs-stepper-header.ngs-stepper-label-bottom:before,.ngs-stepper-header.ngs-stepper-label-bottom:after{content:\"\";position:absolute;top:calc(var(--ngs-stepper-icon-size) / 2 + 16px);height:1px;background:var(--ngs-stepper-line-color);width:calc(50% - var(--ngs-stepper-icon-size) / 2 - 8px)}.ngs-stepper-header.ngs-stepper-label-bottom:before{left:0}.ngs-stepper-header.ngs-stepper-label-bottom:after{right:0}.ngs-stepper-header.ngs-stepper-label-bottom:first-child:before,.ngs-stepper-header.ngs-stepper-label-bottom:last-of-type:after{display:none}.ngs-stepper-icon{width:var(--ngs-stepper-icon-size);height:var(--ngs-stepper-icon-size);border-radius:50%;background:var(--ngs-stepper-icon-bg);color:var(--ngs-stepper-icon-color);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:500;flex-shrink:0;transition:background-color .2s ease;z-index:1}.ngs-stepper-header-active .ngs-stepper-icon{background:var(--ngs-stepper-icon-active-bg)}.ngs-stepper-header-active .ngs-stepper-label{color:var(--ngs-stepper-label-active-color);font-weight:500}.ngs-stepper-header-completed .ngs-stepper-icon{background:var(--ngs-stepper-icon-completed-bg)}.ngs-stepper-label{color:var(--ngs-stepper-label-color);font-size:14px;transition:color .2s ease;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ngs-stepper-line{flex:1;height:1px;background:var(--ngs-stepper-line-color);margin:0 16px;min-width:24px}.ngs-stepper-content-container{padding:var(--ngs-stepper-content-padding)}.ngs-stepper-content{outline:none}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], encapsulation: i0.ViewEncapsulation.None });
59
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: Stepper, isStandalone: true, selector: "ngs-stepper", inputs: { headerPosition: { classPropertyName: "headerPosition", publicName: "headerPosition", isSignal: true, isRequired: false, transformFunction: null }, labelPosition: { classPropertyName: "labelPosition", publicName: "labelPosition", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: CdkStepper, useExisting: Stepper }], queries: [{ propertyName: "stepItems", predicate: Step, descendants: true, isSignal: true }, { propertyName: "_stepLabels", predicate: StepLabel, descendants: true, isSignal: true }], exportAs: ["ngsStepper"], usesInheritance: true, ngImport: i0, template: "<div class=\"ngs-stepper\"\n [class.ngs-stepper-vertical]=\"orientation === 'vertical'\"\n [class.ngs-stepper-horizontal]=\"orientation === 'horizontal'\"\n [class.ngs-stepper-header-bottom]=\"headerPosition() === 'bottom'\">\n @if (orientation === 'horizontal') {\n <div class=\"ngs-stepper-header-container\" [class.ngs-stepper-label-bottom-container]=\"labelPosition() === 'bottom'\">\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-header\"\n [class.ngs-stepper-header-active]=\"selectedIndex === i\"\n [class.ngs-stepper-header-completed]=\"step.completed\"\n [class.ngs-stepper-label-bottom]=\"labelPosition() === 'bottom'\"\n (click)=\"step.select()\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedIndex === i\"\n [attr.aria-controls]=\"_getStepContentId(i)\">\n <div class=\"ngs-stepper-icon\">\n @if (step.completed) {\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">\n <path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\n </svg>\n } @else {\n {{ i + 1 }}\n }\n </div>\n <div class=\"ngs-stepper-label\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n </div>\n </div>\n @if (i < stepItems().length - 1 && labelPosition() !== 'bottom') {\n <div class=\"ngs-stepper-line\"></div>\n }\n }\n </div>\n\n <div class=\"ngs-stepper-content-container\">\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-content\"\n [id]=\"_getStepContentId(i)\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [hidden]=\"selectedIndex !== i\">\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n }\n </div>\n } @else {\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-header\"\n [class.ngs-stepper-header-active]=\"selectedIndex === i\"\n [class.ngs-stepper-header-completed]=\"step.completed\"\n (click)=\"step.select()\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedIndex === i\"\n [attr.aria-controls]=\"_getStepContentId(i)\">\n <div class=\"ngs-stepper-icon\">\n @if (step.completed) {\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">\n <path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\n </svg>\n } @else {\n {{ i + 1 }}\n }\n </div>\n <div class=\"ngs-stepper-label\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n </div>\n </div>\n <div class=\"ngs-stepper-content-wrapper\" [class.ngs-stepper-last-step]=\"i === stepItems().length - 1\">\n <div class=\"ngs-stepper-vertical-line\"></div>\n <div class=\"ngs-stepper-content\"\n [id]=\"_getStepContentId(i)\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [hidden]=\"selectedIndex !== i\">\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n </div>\n }\n }\n</div>\n", styles: [":root{--ngs-stepper-header-padding: 16px;--ngs-stepper-header-gap: 8px;--ngs-stepper-icon-size: 24px;--ngs-stepper-icon-bg: var(--ngs-color-surface-container-high);--ngs-stepper-icon-color: var(--ngs-color-on-surface);--ngs-stepper-icon-active-bg: var(--ngs-color-primary);--ngs-stepper-icon-active-color: var(--ngs-color-on-primary);--ngs-stepper-icon-completed-bg: var(--ngs-color-success);--ngs-stepper-icon-completed-color: var(--ngs-color-on-success);--ngs-stepper-label-color: var(--ngs-color-on-surface-variant);--ngs-stepper-label-active-color: var(--ngs-color-on-surface);--ngs-stepper-line-color: var(--ngs-color-outline-variant);--ngs-stepper-content-padding: 24px}.ngs-stepper{display:flex;flex-direction:column}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-header{padding:16px 0}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-content-wrapper{margin-left:calc(var(--ngs-stepper-icon-size) / 2 - .5px);padding-left:calc(var(--ngs-stepper-icon-size) / 2 + var(--ngs-stepper-header-gap) + .5px);position:relative}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-content-wrapper.ngs-stepper-last-step .ngs-stepper-vertical-line{display:none}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-vertical-line{position:absolute;left:0;top:-16px;bottom:-16px;width:1px;background:var(--ngs-stepper-line-color)}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-content{padding:8px 0 24px}.ngs-stepper.ngs-stepper-header-bottom{flex-direction:column-reverse}.ngs-stepper.ngs-stepper-header-bottom .ngs-stepper-header-container{border-bottom:none;border-top:1px solid var(--ngs-stepper-line-color)}.ngs-stepper-header-container{display:flex;align-items:center;padding:0 var(--ngs-stepper-header-padding);border-bottom:1px solid var(--ngs-stepper-line-color);overflow-x:hidden}.ngs-stepper-header-container.ngs-stepper-label-bottom-container{align-items:flex-start;padding:0}.ngs-stepper-header-container.ngs-stepper-label-bottom-container .ngs-stepper-header{flex:1;padding-left:8px;padding-right:8px}.ngs-stepper-header{display:flex;align-items:center;gap:var(--ngs-stepper-header-gap);padding:16px 0;cursor:pointer;white-space:nowrap;outline:none;position:relative;min-width:0}.ngs-stepper-header:hover .ngs-stepper-icon:not(.ngs-stepper-header-active .ngs-stepper-icon){background:var(--ngs-color-surface-container-highest)}.ngs-stepper-header.ngs-stepper-label-bottom{flex-direction:column;justify-content:center;width:auto;min-width:100px;gap:12px}.ngs-stepper-header.ngs-stepper-label-bottom .ngs-stepper-label{text-align:center;white-space:normal}.ngs-stepper-header.ngs-stepper-label-bottom:before,.ngs-stepper-header.ngs-stepper-label-bottom:after{content:\"\";position:absolute;top:calc(var(--ngs-stepper-icon-size) / 2 + 16px);height:1px;background:var(--ngs-stepper-line-color);width:calc(50% - var(--ngs-stepper-icon-size) / 2 - 8px)}.ngs-stepper-header.ngs-stepper-label-bottom:before{left:0}.ngs-stepper-header.ngs-stepper-label-bottom:after{right:0}.ngs-stepper-header.ngs-stepper-label-bottom:first-child:before,.ngs-stepper-header.ngs-stepper-label-bottom:last-of-type:after{display:none}.ngs-stepper-icon{width:var(--ngs-stepper-icon-size);height:var(--ngs-stepper-icon-size);border-radius:50%;background:var(--ngs-stepper-icon-bg);color:var(--ngs-stepper-icon-color);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:500;flex-shrink:0;transition:background-color .2s ease;z-index:1}.ngs-stepper-header-active .ngs-stepper-icon{background:var(--ngs-stepper-icon-active-bg);color:var(--ngs-stepper-icon-active-color)}.ngs-stepper-header-active .ngs-stepper-label{color:var(--ngs-stepper-label-active-color);font-weight:500}.ngs-stepper-header-completed .ngs-stepper-icon{background:var(--ngs-stepper-icon-completed-bg);color:var(--ngs-stepper-icon-completed-color)}.ngs-stepper-label{color:var(--ngs-stepper-label-color);font-size:14px;transition:color .2s ease;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ngs-stepper-line{flex:1;height:1px;background:var(--ngs-stepper-line-color);margin:0 16px;min-width:24px}.ngs-stepper-content-container{padding:var(--ngs-stepper-content-padding)}.ngs-stepper-content{outline:none}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], encapsulation: i0.ViewEncapsulation.None });
60
60
  }
61
61
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: Stepper, decorators: [{
62
62
  type: Component,
63
- args: [{ selector: 'ngs-stepper', exportAs: 'ngsStepper', standalone: true, imports: [CommonModule], encapsulation: ViewEncapsulation.None, providers: [{ provide: CdkStepper, useExisting: Stepper }], template: "<div class=\"ngs-stepper\"\n [class.ngs-stepper-vertical]=\"orientation === 'vertical'\"\n [class.ngs-stepper-horizontal]=\"orientation === 'horizontal'\"\n [class.ngs-stepper-header-bottom]=\"headerPosition() === 'bottom'\">\n @if (orientation === 'horizontal') {\n <div class=\"ngs-stepper-header-container\" [class.ngs-stepper-label-bottom-container]=\"labelPosition() === 'bottom'\">\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-header\"\n [class.ngs-stepper-header-active]=\"selectedIndex === i\"\n [class.ngs-stepper-header-completed]=\"step.completed\"\n [class.ngs-stepper-label-bottom]=\"labelPosition() === 'bottom'\"\n (click)=\"step.select()\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedIndex === i\"\n [attr.aria-controls]=\"_getStepContentId(i)\">\n <div class=\"ngs-stepper-icon\">\n @if (step.completed) {\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">\n <path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\n </svg>\n } @else {\n {{ i + 1 }}\n }\n </div>\n <div class=\"ngs-stepper-label\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n </div>\n </div>\n @if (i < stepItems().length - 1 && labelPosition() !== 'bottom') {\n <div class=\"ngs-stepper-line\"></div>\n }\n }\n </div>\n\n <div class=\"ngs-stepper-content-container\">\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-content\"\n [id]=\"_getStepContentId(i)\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [hidden]=\"selectedIndex !== i\">\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n }\n </div>\n } @else {\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-header\"\n [class.ngs-stepper-header-active]=\"selectedIndex === i\"\n [class.ngs-stepper-header-completed]=\"step.completed\"\n (click)=\"step.select()\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedIndex === i\"\n [attr.aria-controls]=\"_getStepContentId(i)\">\n <div class=\"ngs-stepper-icon\">\n @if (step.completed) {\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">\n <path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\n </svg>\n } @else {\n {{ i + 1 }}\n }\n </div>\n <div class=\"ngs-stepper-label\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n </div>\n </div>\n <div class=\"ngs-stepper-content-wrapper\" [class.ngs-stepper-last-step]=\"i === stepItems().length - 1\">\n <div class=\"ngs-stepper-vertical-line\"></div>\n <div class=\"ngs-stepper-content\"\n [id]=\"_getStepContentId(i)\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [hidden]=\"selectedIndex !== i\">\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n </div>\n }\n }\n</div>\n", styles: [":root{--ngs-stepper-header-padding: 16px;--ngs-stepper-header-gap: 8px;--ngs-stepper-icon-size: 24px;--ngs-stepper-icon-bg: var(--ngs-color-surface-container-high);--ngs-stepper-icon-color: var(--ngs-color-on-surface);--ngs-stepper-icon-active-bg: var(--ngs-color-primary);--ngs-stepper-icon-completed-bg: var(--ngs-color-success);--ngs-stepper-label-color: var(--ngs-color-on-surface-variant);--ngs-stepper-label-active-color: var(--ngs-color-on-surface);--ngs-stepper-line-color: var(--ngs-color-outline-variant);--ngs-stepper-content-padding: 24px}.ngs-stepper{display:flex;flex-direction:column}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-header{padding:16px 0}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-content-wrapper{margin-left:calc(var(--ngs-stepper-icon-size) / 2 - .5px);padding-left:calc(var(--ngs-stepper-icon-size) / 2 + var(--ngs-stepper-header-gap) + .5px);position:relative}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-content-wrapper.ngs-stepper-last-step .ngs-stepper-vertical-line{display:none}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-vertical-line{position:absolute;left:0;top:-16px;bottom:-16px;width:1px;background:var(--ngs-stepper-line-color)}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-content{padding:8px 0 24px}.ngs-stepper.ngs-stepper-header-bottom{flex-direction:column-reverse}.ngs-stepper.ngs-stepper-header-bottom .ngs-stepper-header-container{border-bottom:none;border-top:1px solid var(--ngs-stepper-line-color)}.ngs-stepper-header-container{display:flex;align-items:center;padding:0 var(--ngs-stepper-header-padding);border-bottom:1px solid var(--ngs-stepper-line-color);overflow-x:hidden}.ngs-stepper-header-container.ngs-stepper-label-bottom-container{align-items:flex-start;padding:0}.ngs-stepper-header-container.ngs-stepper-label-bottom-container .ngs-stepper-header{flex:1;padding-left:8px;padding-right:8px}.ngs-stepper-header{display:flex;align-items:center;gap:var(--ngs-stepper-header-gap);padding:16px 0;cursor:pointer;white-space:nowrap;outline:none;position:relative;min-width:0}.ngs-stepper-header:hover .ngs-stepper-icon:not(.ngs-stepper-header-active .ngs-stepper-icon){background:var(--ngs-color-surface-container-highest)}.ngs-stepper-header.ngs-stepper-label-bottom{flex-direction:column;justify-content:center;width:auto;min-width:100px;gap:12px}.ngs-stepper-header.ngs-stepper-label-bottom .ngs-stepper-label{text-align:center;white-space:normal}.ngs-stepper-header.ngs-stepper-label-bottom:before,.ngs-stepper-header.ngs-stepper-label-bottom:after{content:\"\";position:absolute;top:calc(var(--ngs-stepper-icon-size) / 2 + 16px);height:1px;background:var(--ngs-stepper-line-color);width:calc(50% - var(--ngs-stepper-icon-size) / 2 - 8px)}.ngs-stepper-header.ngs-stepper-label-bottom:before{left:0}.ngs-stepper-header.ngs-stepper-label-bottom:after{right:0}.ngs-stepper-header.ngs-stepper-label-bottom:first-child:before,.ngs-stepper-header.ngs-stepper-label-bottom:last-of-type:after{display:none}.ngs-stepper-icon{width:var(--ngs-stepper-icon-size);height:var(--ngs-stepper-icon-size);border-radius:50%;background:var(--ngs-stepper-icon-bg);color:var(--ngs-stepper-icon-color);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:500;flex-shrink:0;transition:background-color .2s ease;z-index:1}.ngs-stepper-header-active .ngs-stepper-icon{background:var(--ngs-stepper-icon-active-bg)}.ngs-stepper-header-active .ngs-stepper-label{color:var(--ngs-stepper-label-active-color);font-weight:500}.ngs-stepper-header-completed .ngs-stepper-icon{background:var(--ngs-stepper-icon-completed-bg)}.ngs-stepper-label{color:var(--ngs-stepper-label-color);font-size:14px;transition:color .2s ease;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ngs-stepper-line{flex:1;height:1px;background:var(--ngs-stepper-line-color);margin:0 16px;min-width:24px}.ngs-stepper-content-container{padding:var(--ngs-stepper-content-padding)}.ngs-stepper-content{outline:none}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
63
+ args: [{ selector: 'ngs-stepper', exportAs: 'ngsStepper', standalone: true, imports: [CommonModule], encapsulation: ViewEncapsulation.None, providers: [{ provide: CdkStepper, useExisting: Stepper }], template: "<div class=\"ngs-stepper\"\n [class.ngs-stepper-vertical]=\"orientation === 'vertical'\"\n [class.ngs-stepper-horizontal]=\"orientation === 'horizontal'\"\n [class.ngs-stepper-header-bottom]=\"headerPosition() === 'bottom'\">\n @if (orientation === 'horizontal') {\n <div class=\"ngs-stepper-header-container\" [class.ngs-stepper-label-bottom-container]=\"labelPosition() === 'bottom'\">\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-header\"\n [class.ngs-stepper-header-active]=\"selectedIndex === i\"\n [class.ngs-stepper-header-completed]=\"step.completed\"\n [class.ngs-stepper-label-bottom]=\"labelPosition() === 'bottom'\"\n (click)=\"step.select()\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedIndex === i\"\n [attr.aria-controls]=\"_getStepContentId(i)\">\n <div class=\"ngs-stepper-icon\">\n @if (step.completed) {\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">\n <path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\n </svg>\n } @else {\n {{ i + 1 }}\n }\n </div>\n <div class=\"ngs-stepper-label\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n </div>\n </div>\n @if (i < stepItems().length - 1 && labelPosition() !== 'bottom') {\n <div class=\"ngs-stepper-line\"></div>\n }\n }\n </div>\n\n <div class=\"ngs-stepper-content-container\">\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-content\"\n [id]=\"_getStepContentId(i)\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [hidden]=\"selectedIndex !== i\">\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n }\n </div>\n } @else {\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-header\"\n [class.ngs-stepper-header-active]=\"selectedIndex === i\"\n [class.ngs-stepper-header-completed]=\"step.completed\"\n (click)=\"step.select()\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedIndex === i\"\n [attr.aria-controls]=\"_getStepContentId(i)\">\n <div class=\"ngs-stepper-icon\">\n @if (step.completed) {\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">\n <path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\n </svg>\n } @else {\n {{ i + 1 }}\n }\n </div>\n <div class=\"ngs-stepper-label\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n </div>\n </div>\n <div class=\"ngs-stepper-content-wrapper\" [class.ngs-stepper-last-step]=\"i === stepItems().length - 1\">\n <div class=\"ngs-stepper-vertical-line\"></div>\n <div class=\"ngs-stepper-content\"\n [id]=\"_getStepContentId(i)\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [hidden]=\"selectedIndex !== i\">\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n </div>\n }\n }\n</div>\n", styles: [":root{--ngs-stepper-header-padding: 16px;--ngs-stepper-header-gap: 8px;--ngs-stepper-icon-size: 24px;--ngs-stepper-icon-bg: var(--ngs-color-surface-container-high);--ngs-stepper-icon-color: var(--ngs-color-on-surface);--ngs-stepper-icon-active-bg: var(--ngs-color-primary);--ngs-stepper-icon-active-color: var(--ngs-color-on-primary);--ngs-stepper-icon-completed-bg: var(--ngs-color-success);--ngs-stepper-icon-completed-color: var(--ngs-color-on-success);--ngs-stepper-label-color: var(--ngs-color-on-surface-variant);--ngs-stepper-label-active-color: var(--ngs-color-on-surface);--ngs-stepper-line-color: var(--ngs-color-outline-variant);--ngs-stepper-content-padding: 24px}.ngs-stepper{display:flex;flex-direction:column}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-header{padding:16px 0}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-content-wrapper{margin-left:calc(var(--ngs-stepper-icon-size) / 2 - .5px);padding-left:calc(var(--ngs-stepper-icon-size) / 2 + var(--ngs-stepper-header-gap) + .5px);position:relative}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-content-wrapper.ngs-stepper-last-step .ngs-stepper-vertical-line{display:none}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-vertical-line{position:absolute;left:0;top:-16px;bottom:-16px;width:1px;background:var(--ngs-stepper-line-color)}.ngs-stepper.ngs-stepper-vertical .ngs-stepper-content{padding:8px 0 24px}.ngs-stepper.ngs-stepper-header-bottom{flex-direction:column-reverse}.ngs-stepper.ngs-stepper-header-bottom .ngs-stepper-header-container{border-bottom:none;border-top:1px solid var(--ngs-stepper-line-color)}.ngs-stepper-header-container{display:flex;align-items:center;padding:0 var(--ngs-stepper-header-padding);border-bottom:1px solid var(--ngs-stepper-line-color);overflow-x:hidden}.ngs-stepper-header-container.ngs-stepper-label-bottom-container{align-items:flex-start;padding:0}.ngs-stepper-header-container.ngs-stepper-label-bottom-container .ngs-stepper-header{flex:1;padding-left:8px;padding-right:8px}.ngs-stepper-header{display:flex;align-items:center;gap:var(--ngs-stepper-header-gap);padding:16px 0;cursor:pointer;white-space:nowrap;outline:none;position:relative;min-width:0}.ngs-stepper-header:hover .ngs-stepper-icon:not(.ngs-stepper-header-active .ngs-stepper-icon){background:var(--ngs-color-surface-container-highest)}.ngs-stepper-header.ngs-stepper-label-bottom{flex-direction:column;justify-content:center;width:auto;min-width:100px;gap:12px}.ngs-stepper-header.ngs-stepper-label-bottom .ngs-stepper-label{text-align:center;white-space:normal}.ngs-stepper-header.ngs-stepper-label-bottom:before,.ngs-stepper-header.ngs-stepper-label-bottom:after{content:\"\";position:absolute;top:calc(var(--ngs-stepper-icon-size) / 2 + 16px);height:1px;background:var(--ngs-stepper-line-color);width:calc(50% - var(--ngs-stepper-icon-size) / 2 - 8px)}.ngs-stepper-header.ngs-stepper-label-bottom:before{left:0}.ngs-stepper-header.ngs-stepper-label-bottom:after{right:0}.ngs-stepper-header.ngs-stepper-label-bottom:first-child:before,.ngs-stepper-header.ngs-stepper-label-bottom:last-of-type:after{display:none}.ngs-stepper-icon{width:var(--ngs-stepper-icon-size);height:var(--ngs-stepper-icon-size);border-radius:50%;background:var(--ngs-stepper-icon-bg);color:var(--ngs-stepper-icon-color);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:500;flex-shrink:0;transition:background-color .2s ease;z-index:1}.ngs-stepper-header-active .ngs-stepper-icon{background:var(--ngs-stepper-icon-active-bg);color:var(--ngs-stepper-icon-active-color)}.ngs-stepper-header-active .ngs-stepper-label{color:var(--ngs-stepper-label-active-color);font-weight:500}.ngs-stepper-header-completed .ngs-stepper-icon{background:var(--ngs-stepper-icon-completed-bg);color:var(--ngs-stepper-icon-completed-color)}.ngs-stepper-label{color:var(--ngs-stepper-label-color);font-size:14px;transition:color .2s ease;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ngs-stepper-line{flex:1;height:1px;background:var(--ngs-stepper-line-color);margin:0 16px;min-width:24px}.ngs-stepper-content-container{padding:var(--ngs-stepper-content-padding)}.ngs-stepper-content{outline:none}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
64
64
  }], propDecorators: { headerPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerPosition", required: false }] }], labelPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelPosition", required: false }] }], stepItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => Step), { ...{ descendants: true }, isSignal: true }] }], _stepLabels: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StepLabel), { ...{ descendants: true }, isSignal: true }] }] } });
65
65
 
66
66
  class StepperNext extends CdkStepperNext {
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-stepper.mjs","sources":["../../../projects/components/stepper/src/step-label.ts","../../../projects/components/stepper/src/step/step.ts","../../../projects/components/stepper/src/step/step.html","../../../projects/components/stepper/src/stepper/stepper.ts","../../../projects/components/stepper/src/stepper/stepper.html","../../../projects/components/stepper/src/stepper-next.ts","../../../projects/components/stepper/src/stepper-previous.ts","../../../projects/components/stepper/ngstarter-ui-components-stepper.ts"],"sourcesContent":["import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsStepLabel]',\n standalone: true\n})\nexport class StepLabel {\n constructor(public template: TemplateRef<any>) { }\n}\n","import { Component, ContentChild, Input, ViewEncapsulation, forwardRef, Inject } from '@angular/core';\nimport { CdkStep, CdkStepper } from '@angular/cdk/stepper';\nimport { StepLabel } from '../step-label';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\n\nimport { Stepper } from '../stepper/stepper';\n\n@Component({\n selector: 'ngs-step',\n exportAs: 'ngsStep',\n standalone: true,\n imports: [],\n templateUrl: './step.html',\n styleUrl: './step.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: CdkStep, useExisting: Step }],\n})\nexport class Step extends CdkStep {\n @ContentChild(StepLabel) override stepLabel: StepLabel = undefined!;\n\n constructor(@Inject(forwardRef(() => Stepper)) stepper: Stepper) {\n super(stepper);\n }\n}\n","<ng-template>\n <ng-content />\n</ng-template>\n","import { Component, input, ViewEncapsulation, contentChildren } from '@angular/core';\nimport { CdkStepper, StepperOrientation } from '@angular/cdk/stepper';\nimport { Step } from '../step/step';\nimport { StepLabel } from '../step-label';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ngs-stepper',\n exportAs: 'ngsStepper',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './stepper.html',\n styleUrl: './stepper.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: CdkStepper, useExisting: Stepper }],\n})\nexport class Stepper extends CdkStepper {\n headerPosition = input<'top' | 'bottom'>('top');\n labelPosition = input<'top' | 'bottom'>('top');\n\n private _stepperOrientation: StepperOrientation = 'horizontal';\n\n override get orientation(): StepperOrientation {\n return this._stepperOrientation;\n }\n override set orientation(value: StepperOrientation) {\n this._stepperOrientation = value;\n }\n\n // Use a separate signal for template iteration to avoid overriding CdkStepper's QueryList `_steps`.\n readonly stepItems = contentChildren(Step, { descendants: true });\n readonly _stepLabels = contentChildren(StepLabel, { descendants: true });\n\n override ngAfterContentInit() {\n super.ngAfterContentInit();\n }\n}\n","<div class=\"ngs-stepper\"\n [class.ngs-stepper-vertical]=\"orientation === 'vertical'\"\n [class.ngs-stepper-horizontal]=\"orientation === 'horizontal'\"\n [class.ngs-stepper-header-bottom]=\"headerPosition() === 'bottom'\">\n @if (orientation === 'horizontal') {\n <div class=\"ngs-stepper-header-container\" [class.ngs-stepper-label-bottom-container]=\"labelPosition() === 'bottom'\">\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-header\"\n [class.ngs-stepper-header-active]=\"selectedIndex === i\"\n [class.ngs-stepper-header-completed]=\"step.completed\"\n [class.ngs-stepper-label-bottom]=\"labelPosition() === 'bottom'\"\n (click)=\"step.select()\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedIndex === i\"\n [attr.aria-controls]=\"_getStepContentId(i)\">\n <div class=\"ngs-stepper-icon\">\n @if (step.completed) {\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">\n <path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\n </svg>\n } @else {\n {{ i + 1 }}\n }\n </div>\n <div class=\"ngs-stepper-label\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n </div>\n </div>\n @if (i < stepItems().length - 1 && labelPosition() !== 'bottom') {\n <div class=\"ngs-stepper-line\"></div>\n }\n }\n </div>\n\n <div class=\"ngs-stepper-content-container\">\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-content\"\n [id]=\"_getStepContentId(i)\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [hidden]=\"selectedIndex !== i\">\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n }\n </div>\n } @else {\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-header\"\n [class.ngs-stepper-header-active]=\"selectedIndex === i\"\n [class.ngs-stepper-header-completed]=\"step.completed\"\n (click)=\"step.select()\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedIndex === i\"\n [attr.aria-controls]=\"_getStepContentId(i)\">\n <div class=\"ngs-stepper-icon\">\n @if (step.completed) {\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">\n <path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\n </svg>\n } @else {\n {{ i + 1 }}\n }\n </div>\n <div class=\"ngs-stepper-label\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n </div>\n </div>\n <div class=\"ngs-stepper-content-wrapper\" [class.ngs-stepper-last-step]=\"i === stepItems().length - 1\">\n <div class=\"ngs-stepper-vertical-line\"></div>\n <div class=\"ngs-stepper-content\"\n [id]=\"_getStepContentId(i)\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [hidden]=\"selectedIndex !== i\">\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n </div>\n }\n }\n</div>\n","import { Directive, input } from '@angular/core';\nimport { CdkStepperNext } from '@angular/cdk/stepper';\n\n@Directive({\n selector: 'button[ngsStepperNext]',\n host: {\n '[type]': 'type',\n },\n standalone: true\n})\nexport class StepperNext extends CdkStepperNext {\n override type: string = 'submit';\n}\n","import { Directive, input } from '@angular/core';\nimport { CdkStepperPrevious } from '@angular/cdk/stepper';\n\n@Directive({\n selector: 'button[ngsStepperPrevious]',\n host: {\n '[type]': 'type',\n },\n standalone: true\n})\nexport class StepperPrevious extends CdkStepperPrevious {\n override type: string = 'button';\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngstarter-ui-components-stepper.mjs","sources":["../../../projects/components/stepper/src/step-label.ts","../../../projects/components/stepper/src/step/step.ts","../../../projects/components/stepper/src/step/step.html","../../../projects/components/stepper/src/stepper/stepper.ts","../../../projects/components/stepper/src/stepper/stepper.html","../../../projects/components/stepper/src/stepper-next.ts","../../../projects/components/stepper/src/stepper-previous.ts","../../../projects/components/stepper/ngstarter-ui-components-stepper.ts"],"sourcesContent":["import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsStepLabel]',\n standalone: true\n})\nexport class StepLabel {\n constructor(public template: TemplateRef<any>) { }\n}\n","import { Component, ContentChild, Input, ViewEncapsulation, forwardRef, Inject } from '@angular/core';\nimport { CdkStep, CdkStepper } from '@angular/cdk/stepper';\nimport { StepLabel } from '../step-label';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\n\nimport { Stepper } from '../stepper/stepper';\n\n@Component({\n selector: 'ngs-step',\n exportAs: 'ngsStep',\n standalone: true,\n imports: [],\n templateUrl: './step.html',\n styleUrl: './step.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: CdkStep, useExisting: Step }],\n})\nexport class Step extends CdkStep {\n @ContentChild(StepLabel) override stepLabel: StepLabel = undefined!;\n\n constructor(@Inject(forwardRef(() => Stepper)) stepper: Stepper) {\n super(stepper);\n }\n}\n","<ng-template>\n <ng-content />\n</ng-template>\n","import { Component, input, ViewEncapsulation, contentChildren } from '@angular/core';\nimport { CdkStepper, StepperOrientation } from '@angular/cdk/stepper';\nimport { Step } from '../step/step';\nimport { StepLabel } from '../step-label';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ngs-stepper',\n exportAs: 'ngsStepper',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './stepper.html',\n styleUrl: './stepper.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: CdkStepper, useExisting: Stepper }],\n})\nexport class Stepper extends CdkStepper {\n headerPosition = input<'top' | 'bottom'>('top');\n labelPosition = input<'top' | 'bottom'>('top');\n\n private _stepperOrientation: StepperOrientation = 'horizontal';\n\n override get orientation(): StepperOrientation {\n return this._stepperOrientation;\n }\n override set orientation(value: StepperOrientation) {\n this._stepperOrientation = value;\n }\n\n // Use a separate signal for template iteration to avoid overriding CdkStepper's QueryList `_steps`.\n readonly stepItems = contentChildren(Step, { descendants: true });\n readonly _stepLabels = contentChildren(StepLabel, { descendants: true });\n\n override ngAfterContentInit() {\n super.ngAfterContentInit();\n }\n}\n","<div class=\"ngs-stepper\"\n [class.ngs-stepper-vertical]=\"orientation === 'vertical'\"\n [class.ngs-stepper-horizontal]=\"orientation === 'horizontal'\"\n [class.ngs-stepper-header-bottom]=\"headerPosition() === 'bottom'\">\n @if (orientation === 'horizontal') {\n <div class=\"ngs-stepper-header-container\" [class.ngs-stepper-label-bottom-container]=\"labelPosition() === 'bottom'\">\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-header\"\n [class.ngs-stepper-header-active]=\"selectedIndex === i\"\n [class.ngs-stepper-header-completed]=\"step.completed\"\n [class.ngs-stepper-label-bottom]=\"labelPosition() === 'bottom'\"\n (click)=\"step.select()\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedIndex === i\"\n [attr.aria-controls]=\"_getStepContentId(i)\">\n <div class=\"ngs-stepper-icon\">\n @if (step.completed) {\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">\n <path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\n </svg>\n } @else {\n {{ i + 1 }}\n }\n </div>\n <div class=\"ngs-stepper-label\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n </div>\n </div>\n @if (i < stepItems().length - 1 && labelPosition() !== 'bottom') {\n <div class=\"ngs-stepper-line\"></div>\n }\n }\n </div>\n\n <div class=\"ngs-stepper-content-container\">\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-content\"\n [id]=\"_getStepContentId(i)\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [hidden]=\"selectedIndex !== i\">\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n }\n </div>\n } @else {\n @for (step of stepItems(); track step; let i = $index) {\n <div class=\"ngs-stepper-header\"\n [class.ngs-stepper-header-active]=\"selectedIndex === i\"\n [class.ngs-stepper-header-completed]=\"step.completed\"\n (click)=\"step.select()\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedIndex === i\"\n [attr.aria-controls]=\"_getStepContentId(i)\">\n <div class=\"ngs-stepper-icon\">\n @if (step.completed) {\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">\n <path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\n </svg>\n } @else {\n {{ i + 1 }}\n }\n </div>\n <div class=\"ngs-stepper-label\">\n @if (step.stepLabel) {\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\" />\n } @else {\n {{ step.label }}\n }\n </div>\n </div>\n <div class=\"ngs-stepper-content-wrapper\" [class.ngs-stepper-last-step]=\"i === stepItems().length - 1\">\n <div class=\"ngs-stepper-vertical-line\"></div>\n <div class=\"ngs-stepper-content\"\n [id]=\"_getStepContentId(i)\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [hidden]=\"selectedIndex !== i\">\n <ng-container [ngTemplateOutlet]=\"step.content\" />\n </div>\n </div>\n }\n }\n</div>\n","import { Directive, input } from '@angular/core';\nimport { CdkStepperNext } from '@angular/cdk/stepper';\n\n@Directive({\n selector: 'button[ngsStepperNext]',\n host: {\n '[type]': 'type',\n },\n standalone: true\n})\nexport class StepperNext extends CdkStepperNext {\n override type: string = 'submit';\n}\n","import { Directive, input } from '@angular/core';\nimport { CdkStepperPrevious } from '@angular/cdk/stepper';\n\n@Directive({\n selector: 'button[ngsStepperPrevious]',\n host: {\n '[type]': 'type',\n },\n standalone: true\n})\nexport class StepperPrevious extends CdkStepperPrevious {\n override type: string = 'button';\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ngstarter-ui/components",
3
3
  "description": "NgStarter - AI-friendly Enterprise Angular UI Components and Admin Panel",
4
- "version": "21.0.14",
4
+ "version": "21.0.16",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/elementarlabsdev/ngstarter.git"
@@ -45,7 +45,7 @@
45
45
  --ngs-color-info-container: color-mix(in srgb, var(--ngs-color-info), #ffffff 86%);
46
46
  --ngs-color-on-info-container: #000000;
47
47
  --ngs-color-success: #22c55e;
48
- --ngs-color-on-success: #000000;
48
+ --ngs-color-on-success: #ffffff;
49
49
  --ngs-color-success-container: #dcfce7;
50
50
  --ngs-color-on-success-container: #000000;
51
51
  --ngs-color-warning: #f59e0b;
@@ -471,7 +471,7 @@
471
471
  --ngs-color-info-container: color-mix(in srgb, var(--ngs-color-info), #ffffff 86%);
472
472
  --ngs-color-on-info-container: #000000;
473
473
  --ngs-color-success: #059669;
474
- --ngs-color-on-success: #000000;
474
+ --ngs-color-on-success: #ffffff;
475
475
  --ngs-color-success-container: #d1fae5;
476
476
  --ngs-color-on-success-container: #000000;
477
477
  --ngs-color-warning: #d97706;
@@ -39,7 +39,7 @@
39
39
  --ngs-color-info-container: color-mix(in srgb, var(--ngs-color-info), #ffffff 86%);
40
40
  --ngs-color-on-info-container: #000000;
41
41
  --ngs-color-success: #059669;
42
- --ngs-color-on-success: #000000;
42
+ --ngs-color-on-success: #ffffff;
43
43
  --ngs-color-success-container: #d1fae5;
44
44
  --ngs-color-on-success-container: #000000;
45
45
  --ngs-color-warning: #d97706;
@@ -5,7 +5,7 @@ declare class HeadlessStep {
5
5
  /** Form control associated with this step */
6
6
  stepControl: _angular_core.InputSignal<AbstractControl<any, any, any> | undefined>;
7
7
  /** Whether the step is optional */
8
- optional: _angular_core.InputSignal<boolean>;
8
+ optional: _angular_core.InputSignalWithTransform<boolean, any>;
9
9
  /** Whether the user has interacted with this step (writable signal) */
10
10
  readonly interacted: _angular_core.WritableSignal<boolean>;
11
11
  /** Whether this step is currently active (writable signal, controlled by Stepper) */
@@ -59,7 +59,7 @@ declare class HeadlessStepper {
59
59
  /** Resets the stepper to the first step. */
60
60
  reset(): void;
61
61
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeadlessStepper, never>;
62
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeadlessStepper, "ngs-headless-stepper", ["ngsHeadlessStepper"], { "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; }, { "selectedIndex": "selectedIndexChange"; }, ["steps"], ["ngs-step"], true, never>;
62
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeadlessStepper, "ngs-headless-stepper", ["ngsHeadlessStepper"], { "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; }, { "selectedIndex": "selectedIndexChange"; }, ["steps"], ["*"], true, never>;
63
63
  }
64
64
 
65
65
  export { HeadlessStep, HeadlessStepper };
@@ -39,11 +39,13 @@ declare class SidebarNavItem implements SidebarNavItemInterface {
39
39
  }
40
40
 
41
41
  declare class SidebarNavGroup implements AfterContentInit {
42
+ private _navStore;
42
43
  private _toggle;
43
44
  private _menu;
44
45
  readonly _groupId: string;
45
46
  ngAfterContentInit(): void;
46
47
  hasActiveItem(): boolean;
48
+ get active(): boolean;
47
49
  static ɵfac: i0.ɵɵFactoryDeclaration<SidebarNavGroup, never>;
48
50
  static ɵcmp: i0.ɵɵComponentDeclaration<SidebarNavGroup, "ngs-sidebar-nav-group", never, {}, {}, ["_toggle", "_menu"], ["*"], true, never>;
49
51
  }