{"version":3,"file":"talenra-ngx-base-progress-stepper.mjs","sources":["../../../projects/ngx-base/progress-stepper/src/progress-stepper.service.ts","../../../projects/ngx-base/progress-stepper/src/progress-step/progress-step.types.ts","../../../projects/ngx-base/progress-stepper/src/progress-step-header/progress-step-header.component.ts","../../../projects/ngx-base/progress-stepper/src/progress-step-header/progress-step-header.component.html","../../../projects/ngx-base/progress-stepper/src/progress-stepper-header/progress-stepper-header.component.ts","../../../projects/ngx-base/progress-stepper/src/progress-stepper-header/progress-stepper-header.component.html","../../../projects/ngx-base/progress-stepper/src/progress-stepper-page-layout/progress-stepper-page-layout.component.ts","../../../projects/ngx-base/progress-stepper/src/progress-stepper-page-layout/progress-stepper-page-layout.component.html","../../../projects/ngx-base/progress-stepper/src/progress-step/progress-step.component.ts","../../../projects/ngx-base/progress-stepper/src/progress-step/progress-step.component.html","../../../projects/ngx-base/progress-stepper/src/progress-stepper-body/progress-stepper-body.component.ts","../../../projects/ngx-base/progress-stepper/src/progress-stepper-body/progress-stepper-body.component.html","../../../projects/ngx-base/progress-stepper/src/progress-stepper-banner/progress-stepper-banner.component.ts","../../../projects/ngx-base/progress-stepper/src/progress-stepper-banner/progress-stepper-banner.component.html","../../../projects/ngx-base/progress-stepper/src/progress-stepper-footer/progress-stepper-footer.component.ts","../../../projects/ngx-base/progress-stepper/src/progress-stepper-footer/progress-stepper-footer.component.html","../../../projects/ngx-base/progress-stepper/talenra-ngx-base-progress-stepper.ts"],"sourcesContent":["import { computed, Injectable, signal } from '@angular/core';\nimport { ProgressStepComponent } from './progress-step/progress-step.component';\n\n/**\n * ProgressStepperService allows to control ProgressStepper programmatically. It provides logic to navigate between\n * steps, get ProgressStepper's current state and can be used to access its steps.\n *\n * ### Usage\n *\n * In your app, provide a service instance for each ProgressStepper instance.\n *\n * ```typescript\n * @Component({\n *   selector: 'app-my-component',\n *   providers: [{ provide: ProgressStepperService, useClass: ProgressStepperService }],\n * })\n * ```\n *\n * To control ProgressStepper, consume the service in your app.\n *\n * ```typescript\n * private service: ProgressStepperService = inject(ProgressStepperService);\n * console.log(`Currently selected step is at index ${this.service.selectedIndex()}.`);\n * ```\n *\n * ### Import\n *\n * ```typescript\n * import { ProgressStepperService } from '@talenra/ngx-base/progress-stepper';\n * ```\n *\n * @see {@link ProgressStepperBodyComponent}\n *\n * @experimental\n */\n@Injectable()\nexport class ProgressStepperService {\n  // -- Selected index: Index of the currently selected step\n\n  /** Index fo the currently selected step, internal use only */\n  private readonly _selectedIndex = signal<number>(0);\n\n  /**\n   * Index of the currently selected step\n   *\n   * ```typescript\n   * private service: ProgressStepperService = inject(ProgressStepperService);\n   * console.log(`Currently selected step is at index ${this.service.selectedIndex()}.`);\n   * ```\n   */\n  public readonly selectedIndex = this._selectedIndex.asReadonly();\n\n  // -- Steps\n\n  /** Array holding references of all ProgressSteps in order of appearance, internal use only */\n  private readonly _steps = signal<ProgressStepComponent[]>([]);\n\n  /**\n   * Array holding references of all ProgressSteps in order of appearance\n   *\n   * ```typescript\n   * private service: ProgressStepperService = inject(ProgressStepperService);\n   * console.log(`ProgressStepper contains ${this.service.steps().length} steps.`);\n   * ```\n   */\n  public readonly steps = this._steps.asReadonly();\n\n  /**\n   * Set references to ProgressSteps. Hidden from API docs as this is handled by ProgressStepperBodyComponent exclusively.\n   *\n   * @internal\n   */\n  public setSteps(steps: ProgressStepComponent[]): void {\n    // `steps` reflects content children, thus its length will be >= 0.\n    // Reset selected index if it exceeds the new steps count.\n    if (this._selectedIndex() >= steps.length) this._selectedIndex.set(0);\n    this._steps.set(steps);\n    // Assign index to all steps\n    this._steps().forEach((step: ProgressStepComponent, index: number) => step.index.set(index));\n  }\n\n  /** Reference to the currently selected step */\n  private readonly currentStep = computed<ProgressStepComponent>(() => this._steps()[this._selectedIndex()]);\n\n  /**\n   * Retruns the step at the given index or null.\n   *\n   * ```typescript\n   * private service: ProgressStepperService = inject(ProgressStepperService);\n   * console.log(`Step at index 2 is ${this.service.getStep(2)?.title()}.`);\n   * ```\n   */\n  public getStepAt(index: number): ProgressStepComponent | null {\n    return this._steps()[index] || null;\n  }\n\n  /**\n   * Cache the most recent step-height received so we can return it instead of `0` in case the current step is not\n   * ready yet.\n   */\n  private cachedContentHeight: number | null = null;\n\n  /**\n   * The content height of the currently selected step in px. Returns initially and only initially `null` to prevent\n   * unwanted reflows/transitions.\n   *\n   * ```typescript\n   * private service: ProgressStepperService = inject(ProgressStepperService);\n   * console.log(`Content height of the current step is ${this.service.contentHeight}px.`);\n   * ```\n   */\n  public readonly contentHeight = computed<number | null>(() => {\n    // Check if this is the initial call\n    const isInitialCall: boolean = this.cachedContentHeight === null;\n    // Make sure initial call is triggered only once\n    if (isInitialCall) this.cachedContentHeight = 0;\n    // Update content height cache if we get a value > 0\n    if (this.currentStep()?.height() >= 0) this.cachedContentHeight = this.currentStep().height();\n    // Return the cached height value\n    return isInitialCall ? null : this.cachedContentHeight;\n  });\n\n  // -- Step navigation\n\n  /**\n   * Check whether we can proceed to a given step index. Returns `true` if the given index is whithin boundaries and\n   * all previous steps are valid or optional.\n   *\n   * ```typescript\n   * private service: ProgressStepperService = inject(ProgressStepperService);\n   * console.log(`We ${this.service.canSkipTo(2) ? 'can' : 'cannot'} skip to step at index 2.`);\n   * ```\n   */\n  public canSkipTo(index: number): boolean {\n    // Check boundaries\n    if (index < 0 || index >= this._steps().length) return false;\n    // Cannot skip to disabled steps\n    if (this._steps()[index]?.isDisabled()) return false;\n    // Verify all previous steps are valid, optional or disabled\n    for (let i = 0; i < index; i++) {\n      const step: ProgressStepComponent = this._steps()[i];\n      if (step.isRequired() && !step.isValid() && !step.isDisabled()) return false;\n    }\n    return true;\n  }\n\n  /**\n   * Skip to the step at the given index. Returns the index of the selected step after navigation.\n   *\n   * ```typescript\n   * private service: ProgressStepperService = inject(ProgressStepperService);\n   * console.log(`Switched to step at index ${this.service.skipTo(2)}.`);\n   * ```\n   */\n  public skipTo(index: number): number {\n    if (!this.canSkipTo(index)) return this._selectedIndex();\n    this._selectedIndex.set(index);\n    return this._selectedIndex();\n  }\n\n  /**\n   * Switch to the previous step if available. Returns the index of the selected step after navigation.\n   *\n   * ```typescript\n   * private service: ProgressStepperService = inject(ProgressStepperService);\n   * console.log(`Switched to step at index ${this.service.previous()}.`);\n   * ```\n   */\n  public previous(): number {\n    return this.skipTo(this._selectedIndex() - 1);\n  }\n\n  /**\n   * Switch to the next step if available. Returns the index of the selected step after navigation.\n   *\n   * ```typescript\n   * private service: ProgressStepperService = inject(ProgressStepperService);\n   * console.log(`Switched to step at index ${this.service.next()}.`);\n   * ```\n   */\n  public next(): number {\n    return this.skipTo(this._selectedIndex() + 1);\n  }\n\n  // -- Ordinal numbers\n\n  /**\n   * Determines whether step numbers are displayed in Progress Stepper's header.\n   *\n   * ```typescript\n   * private service: ProgressStepperService = inject(ProgressStepperService);\n   * private toggleStepNumbers(): void {\n   *   this.service.showStepNumbers.update((value: boolean) => !value);\n   * }\n   * ```\n   */\n  public readonly showStepNumbers = signal<boolean>(true);\n}\n","/**\n * ProgressStep state\n *\n * ### Import\n *\n * ```typescript\n * import { ProgressStepState } from '@talenra/ngx-base/progress-stepper';\n * ```\n *\n * @see {@link ProgressStepComponent}\n */\nexport const ProgressStepState = {\n  Completed: 'completed',\n  Disabled: 'disabled',\n  Pending: 'pending',\n  Selected: 'selected',\n} as const;\n\n/**\n * Type of ProgressStep state\n *\n * ### Import\n *\n * ```typescript\n * import { TProgressStepState } from '@talenra/ngx-base/progress-stepper';\n * ```\n *\n * @see {@link ProgressStepComponent}\n */\nexport type TProgressStepState = (typeof ProgressStepState)[keyof typeof ProgressStepState];\n","import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';\nimport { IconComponent } from '@talenra/ngx-base/icons';\nimport { ProgressStepState, TProgressStepState } from '../progress-step/progress-step.types';\nimport { ProgressStepperService } from '../progress-stepper.service';\n\n/**\n * Represents a single step in the progress stepper. Used internally only by ProgressStepper.\n *\n * @internal\n */\n@Component({\n  selector: 'talenra-progress-step-header',\n  imports: [IconComponent],\n  templateUrl: './progress-step-header.component.html',\n  styleUrl: './progress-step-header.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[class]': 'hostClass',\n    '[class.selected]': 'service.selectedIndex() === index()',\n    '[class.clickable]': 'service.canSkipTo(index())',\n    '(click)': 'service.skipTo(index())',\n  },\n})\nexport class ProgressStepHeaderComponent {\n  /** Index of associated step */\n  public readonly index = input<number>(0);\n\n  /** Title displayed */\n  public readonly title = input<string>('');\n\n  /** State of the associated step */\n  public readonly state = input<TProgressStepState>(ProgressStepState.Pending);\n\n  /** ProgressStepperService instance */\n  protected readonly service = inject(ProgressStepperService);\n\n  private get hostClass(): string {\n    return `state--${this.state()}`;\n  }\n}\n","<div class=\"bar\">\n  <div class=\"dot\">\n    <div class=\"outline\"></div>\n    <div class=\"fill\"></div>\n    <div class=\"icon completed\">\n      <talenra-icon name=\"check\" />\n    </div>\n    <div class=\"icon disabled\">\n      <talenra-icon name=\"close\" />\n    </div>\n    @if (service.showStepNumbers()) {\n      <span class=\"number\">{{ index() + 1 }}</span>\n    }\n  </div>\n  <div class=\"line\"></div>\n</div>\n<h2 class=\"title\">\n  <span>{{ title() }}</span>\n</h2>\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  effect,\n  ElementRef,\n  inject,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { debounceTime, fromEvent, merge, tap, throttleTime } from 'rxjs';\nimport { ButtonComponent } from '@talenra/ngx-base/button';\nimport { ProgressStepperService } from '../progress-stepper.service';\nimport { ProgressStepHeaderComponent } from '../progress-step-header/progress-step-header.component';\nimport { ProgressStepState, TProgressStepState } from '../progress-step/progress-step.types';\n\n/**\n * When selecting a step, the representing StepHeader is scrolled into view if it is not fully visible. As we use\n * gradients to fade-out the StepHeaders, we need to take into account the width of these gradients when calculating\n * whether a StepHeader is fully visible. As the almost-transparent edges of these gradients are almost invisible, we\n * use an assumed \"visible width\" of these gradients to calculate whether a StepHeader is fully visible.\n *\n * @internal\n */\nconst VISIBLE_GRADIENT_WIDTH = 30;\n\n/**\n * Progress Stepper Header displays the current progress and allows users to navigate through the steps.\n *\n * @see {@link ProgressStepperBodyComponent}\n *\n * @experimental\n */\n@Component({\n  selector: 'talenra-progress-stepper-header',\n  imports: [ProgressStepHeaderComponent, ButtonComponent],\n  templateUrl: './progress-stepper-header.component.html',\n  styleUrl: './progress-stepper-header.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[class.can-scroll-left]': 'canScrollLeft()',\n    '[class.can-scroll-right]': 'canScrollRight()',\n  },\n})\nexport class ProgressStepperHeaderComponent implements AfterViewInit {\n  /** Reference to element used as scroll mask in header. Use to scroll horizontally using buttons. */\n  private readonly headerScroll = viewChild.required<ElementRef>('headerScroll');\n\n  /** Reference to element wrapping items in header (full scroll width). Used to determine scroll distance. */\n  private readonly headerItems = viewChild.required<ElementRef>('headerItems');\n\n  /** Determines whether left stepper is enabled */\n  protected readonly canScrollLeft = signal<boolean>(false);\n\n  /** Determines wheter right stepper is enabled */\n  protected readonly canScrollRight = signal<boolean>(false);\n\n  /** Progress Stepper Service reference */\n  protected readonly service: ProgressStepperService = inject(ProgressStepperService);\n\n  /** Destroy reference */\n  private readonly destroyRef = inject(DestroyRef);\n\n  /**\n   * Returns the state of the step at a given index based on `selectedIndex` and step's disabled state.\n   *\n   * - Disabled steps are considered disabled, regardless of other states\n   * - Steps < index are considered completed\n   * - Step at index is considered selected\n   * - Steps > index are considered pending\n   */\n  protected getStateOf(index: number): TProgressStepState {\n    // Disabled overrides all other states\n    if (this.service.steps()[index]?.isDisabled()) return ProgressStepState.Disabled;\n    return index < this.service.selectedIndex()\n      ? ProgressStepState.Completed\n      : index === this.service.selectedIndex()\n        ? ProgressStepState.Selected\n        : ProgressStepState.Pending;\n  }\n\n  /** @internal */\n  constructor() {\n    effect(() => {\n      // Update stepper state whenever steps are updated\n      setTimeout(this.updateScrollButtonsState.bind(this));\n    });\n    // Keep track of selected step\n    toObservable(this.service.selectedIndex)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(this.keepSelectedStepInView.bind(this));\n  }\n\n  /** @internal */\n  ngAfterViewInit(): void {\n    // Update scroll button state when scrolled or window resized\n    merge(fromEvent(this.headerScroll().nativeElement, 'scroll'), fromEvent(window, 'resize'))\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        throttleTime(100),\n        tap(this.updateScrollButtonsState.bind(this)),\n        debounceTime(250),\n        tap(() => setTimeout(this.updateScrollButtonsState.bind(this)))\n      )\n      .subscribe();\n    // Update scroll button state after view is ready\n    setTimeout(this.updateScrollButtonsState.bind(this));\n  }\n\n  /** Scroll header by one item in given direction */\n  protected scrollHeader(direction: 'left' | 'right'): void {\n    const itemsElement: HTMLElement = this.headerItems().nativeElement;\n    const itemsCount: number = itemsElement.children.length;\n    const innerWidth: number = itemsElement.getBoundingClientRect().width;\n    const scrollDistance: number = (innerWidth / itemsCount) * (direction === 'right' ? 1 : -1);\n    this.headerScroll().nativeElement.scrollBy({ left: scrollDistance, behavior: 'smooth' });\n  }\n\n  /**\n   * Calculate whether scroll buttons are enabled. Invoke if you need to update stepper state manually (e.g. when\n   * changing the containers width).\n   */\n  public updateScrollButtonsState(): void {\n    const itemsElement: HTMLElement = this.headerItems().nativeElement;\n    const scrollElement: HTMLElement = this.headerScroll().nativeElement;\n    this.canScrollLeft.set(scrollElement.scrollLeft > 0);\n    this.canScrollRight.set(scrollElement.scrollLeft + 1 < itemsElement.clientWidth - scrollElement.clientWidth);\n  }\n\n  /** Updates the header's scroll position to keep the selected step in visible area. */\n  private keepSelectedStepInView(): void {\n    const scrollElement: HTMLElement = this.headerScroll().nativeElement;\n    const itemsElement: HTMLElement = this.headerItems().nativeElement;\n    const selectedItem: HTMLElement = itemsElement.children[this.service.selectedIndex()] as HTMLElement;\n    if (!selectedItem) return;\n    if (!this.isChildFullyVisible(scrollElement, selectedItem)) {\n      selectedItem.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\n    }\n  }\n\n  /** Calculates whether the selected StepHeader is considered fully visible */\n  private isChildFullyVisible(container: HTMLElement, child: HTMLElement): boolean {\n    const leftEdge: number = container.getBoundingClientRect().left + VISIBLE_GRADIENT_WIDTH;\n    const rightEdge: number = container.getBoundingClientRect().right - VISIBLE_GRADIENT_WIDTH;\n    const itemLeftEdge: number = child.getBoundingClientRect().left;\n    const itemRightEdge: number = child.getBoundingClientRect().right;\n    return itemLeftEdge >= leftEdge && itemRightEdge <= rightEdge;\n  }\n}\n","<div class=\"header-scroll\" #headerScroll>\n  <div class=\"header-items\" #headerItems>\n    @for (step of service.steps(); track step) {\n      <talenra-progress-step-header [index]=\"$index\" [title]=\"step.title()\" [state]=\"getStateOf($index)\" />\n    }\n  </div>\n</div>\n<button\n  class=\"scroll-button left\"\n  (click)=\"scrollHeader('left')\"\n  talenra-button\n  kind=\"ghost\"\n  icon=\"chevron-left\"\n  [disabled]=\"!canScrollLeft()\"></button>\n<button\n  class=\"scroll-button right\"\n  (click)=\"scrollHeader('right')\"\n  talenra-button\n  kind=\"ghost\"\n  icon=\"chevron-right\"\n  [disabled]=\"!canScrollRight()\"></button>\n","import { ChangeDetectionStrategy, Component, DestroyRef, inject, input, viewChild } from '@angular/core';\nimport { ContentLayoutService, StickyBarComponent } from '@talenra/ngx-base/content-layout';\nimport { TWorkspaceWidth, WorkspaceWidth } from '@talenra/ngx-base/app-layout';\nimport { WorkspaceSimpleComponent } from '@talenra/ngx-base/workspace-simple';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { merge } from 'rxjs';\nimport { ProgressStepperService } from '../progress-stepper.service';\nimport { ProgressStepperHeaderComponent } from '../progress-stepper-header/progress-stepper-header.component';\n\n/**\n * Helper function used in component's metadata. Returns the service provided by a parent component, or a new instance\n * if it is not provided. This allows the consuming app to provide a custom service instance.\n *\n * @internal\n */\nconst contentLayoutServiceFactory = () => {\n  const service: ContentLayoutService | null = inject(ContentLayoutService, { optional: true, skipSelf: true });\n  return service || new ContentLayoutService();\n};\n\n/**\n * Progress Stepper Page Layout is a pre-built layout component that provides a full-page layout for Progress Stepper.\n * It is typically used in an Overlay context. It implements Workspace Simple (horizontal layout) and Content Layout\n * (vertical layout) with projection slots for a Workspace Header and a sticky Progress Stepper Footer Additionally it\n * provides a sticky Progress Stepper Header.\n *\n * ## Layout\n *\n * This layout component acts as a wrapper for Progress Stepper's sections. Here's a breakdown of the layout structure.\n *\n * ```html\n * <talenra-progress-stepper-page-layout>\n *   <talenra-workspace-header />\n *   <talenra-progress-stepper-body>\n *     <talenra-progress-stepper-banner>...</talenra-progress-stepper-banner>\n *     <talenra-progress-step>...</talenra-progress-step>\n *     <talenra-progress-step>...</talenra-progress-step>\n *     <talenra-progress-step>...</talenra-progress-step>\n *   </talenra-progress-stepper-body>\n *  <talenra-progress-stepper-footer>...</talenra-progress-stepper-footer>\n * </talenra-progress-stepper-page-layout>\n * ```\n *\n * @see {@link ProgressStepperBodyComponent}\n * @see {@link OverlayService}\n *\n * @experimental\n */\n@Component({\n  selector: 'talenra-progress-stepper-page-layout',\n  imports: [WorkspaceSimpleComponent, StickyBarComponent, ProgressStepperHeaderComponent],\n  templateUrl: './progress-stepper-page-layout.component.html',\n  styleUrl: './progress-stepper-page-layout.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{ provide: ContentLayoutService, useFactory: contentLayoutServiceFactory }],\n  host: {\n    '[class.content-scrolled]': 'contentLayoutService.hasScroll()',\n  },\n})\nexport class ProgressStepperPageLayoutComponent {\n  /**\n   * Determines the width of the layout. Defaults to `WorkspaceWidth.L`.\n   *\n   * ```html\n   * <talenra-progress-stepper-layout workspaceWidth=\"M\">\n   * ```\n   *\n   * @see {@link WorkspaceWidth}\n   */\n  public readonly workspaceWidth = input<TWorkspaceWidth>(WorkspaceWidth.L);\n\n  /** Reference to ProgressStepperHeader instance */\n  protected readonly stepperHeader = viewChild(ProgressStepperHeaderComponent);\n\n  /** Content Layout Service reference */\n  private contentLayoutService: ContentLayoutService = inject(ContentLayoutService);\n\n  /** Progress Stepper Service reference */\n  private progressStepperService: ProgressStepperService = inject(ProgressStepperService);\n\n  /** Destroy reference */\n  private destroyRef: DestroyRef = inject(DestroyRef);\n\n  /** @internal */\n  constructor() {\n    // Scroll to top when selected step changes\n    toObservable(this.progressStepperService.selectedIndex)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(this.scrollToTop.bind(this));\n    // Update ProgressStepper's scroll button state whenever workspace width is updated\n    merge(toObservable(this.workspaceWidth), toObservable(this.progressStepperService.steps))\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => {\n        setTimeout(() => {\n          this.stepperHeader()?.updateScrollButtonsState();\n        });\n      });\n  }\n\n  /** Scroll stepper content to top when navigating through steps */\n  private scrollToTop(): void {\n    this.contentLayoutService.scrollContainer()?.scrollElement.scrollTo({ top: 0, behavior: 'smooth' });\n  }\n}\n","<talenra-workspace-simple class=\"workspace\" [width]=\"workspaceWidth()\" useContentLayout useStickyBar useStickyFooter>\n  <ng-content select=\"talenra-workspace-header\" header />\n  <talenra-progress-stepper-header class=\"stepper-header\" sticky-bar />\n  <ng-content />\n  <ng-content select=\"talenra-progress-stepper-footer\" sticky-footer />\n</talenra-workspace-simple>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  model,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport { ProgressStepperService } from '../progress-stepper.service';\n\n/**\n * Progress Step represents a single step within a Progress Stepper Body context. It acts as a wrapper for the step's\n * content and provides a set of properties to control its state and role (e.g. `isDisabled`, `isRequired` or\n * `isValid`).\n *\n * ```html\n * <talenra-progress-stepper-body>\n *   <talenra-progress-step>...</talenra-progress-step>\n *   <talenra-progress-step>...</talenra-progress-step>\n *   <talenra-progress-step>...</talenra-progress-step>\n * </talenra-progress-stepper-body>\n * ```\n *\n * ### Import\n *\n * ```typescript\n * import { ProgressStepComponent } from '@talenra/ngx-base/progress-stepper';\n * ```\n *\n * @see {@link ProgressStepperBodyComponent}\n * @see {@link ProgressStepState}\n *\n * @experimental\n */\n@Component({\n  selector: 'talenra-progress-step',\n  templateUrl: './progress-step.component.html',\n  styleUrl: './progress-step.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[class.is-selected]': 'isSelected()',\n    '[attr.aria-hidden]': '!isSelected()',\n  },\n})\nexport class ProgressStepComponent {\n  /**\n   * Title displayed in step header\n   *\n   * ```html\n   * <talenra-progress-step title=\"My step's title\">...</talenra-progress-step>\n   * ```\n   */\n  public readonly title = model<string>('');\n\n  /**\n   * Determines whether the step is considered valid. Defaults to `true`. If a step is required and invalid, it cannot\n   * be skipped.\n   *\n   * ```html\n   * <talenra-progress-step [isValid]=\"myCondition\">...</talenra-progress-step>\n   * ```\n   */\n  public readonly isValid = model<boolean>(true);\n\n  /**\n   * Determines whether the step is required. Defaults to `true`. Required steps cannot be skipped.\n   *\n   * ```html\n   * <talenra-progress-step [isRequired]=\"myCondition\">...</talenra-progress-step>\n   * ```\n   */\n  public readonly isRequired = model<boolean>(true);\n\n  /**\n   * Determines whether the step is disabled. Defaults to `false`. Disabled steps cannot be selected.\n   *\n   * ```html\n   * <talenra-progress-step [isDisabled]=\"myCondition\">...</talenra-progress-step>\n   * ```\n   */\n  public readonly isDisabled = model<boolean>(false);\n\n  /**\n   * Index of this ProgressStep. Steps appear in the order of their indexes within Progress Stepper.\n   *\n   * @internal\n   */\n  public readonly index = signal<number | undefined>(undefined);\n\n  /** Whether this step is currently selected */\n  protected readonly isSelected = computed<boolean>(() => this.service.selectedIndex() === this.index());\n\n  // ProgressStepperService reference\n  private readonly service: ProgressStepperService = inject(ProgressStepperService);\n\n  /** Reference to the div element containing the step content. Used to track content height. */\n  private readonly stepContainer = viewChild.required<ElementRef<HTMLDivElement>>('stepContainer');\n\n  /** Resize observer to track content height. Updates height property whenever dimension of step container changes */\n  private observer: ResizeObserver = new ResizeObserver((entries) => {\n    this.height.set(entries[0].target.clientHeight);\n  });\n\n  /**\n   * Height of the step's content in px. For performance reasons only updated while selected. Hidden from API docs as\n   * step height should be accessed via `ProgressStepperService` which exposes the height of the selected step.\n   *\n   * @internal\n   */\n  public readonly height = signal<number>(0);\n\n  /** @internal */\n  constructor() {\n    // Observe content container for height changes while selected\n    effect(() => {\n      const containerElement: HTMLDivElement = this.stepContainer().nativeElement;\n      this.observer[this.isSelected() ? 'observe' : 'unobserve'](containerElement);\n    });\n  }\n}\n","<div #stepContainer>\n  <ng-content />\n</div>\n","import { ChangeDetectionStrategy, Component, contentChildren, effect, inject } from '@angular/core';\nimport { ButtonComponent } from '@talenra/ngx-base/button';\nimport { ProgressStepComponent } from '../progress-step/progress-step.component';\nimport { ProgressStepHeaderComponent } from '../progress-step-header/progress-step-header.component';\nimport { ProgressStepperService } from '../progress-stepper.service';\n\n/**\n * Progress Stepper leads the user through a multi-step process. Each step is represented by a Progress Step. It is\n * controlled programmatically by `ProgressStepperService`.\n *\n * ## Layout\n *\n * The Progress Stepper's layout can be defined by the consuming app. Common layouts are provided by the library to\n * speed up development and to ensure consistency accross different apps. Currently the library provides a full-page\n * layout (`ProgressStepperPageLayoutComponent`) which is typically used in an Overlay context.\n *\n * The full-featured Progress Stepper is composed of the three main sections: header, body, and footer.\n *\n * ### Header\n *\n * The header, placed at the top, lists all steps. Beside displaying the current progress, it allows the user to\n * navigate to any step. User navigation is limited by validation which prevents skipping steps which are required but\n * not yet completed (valid). Navigation to disabled steps is also prevented.\n *\n * ### Body\n *\n * The body section wraps the different steps, which represent the stepper's content. Optionally the app can display a\n * banner which is displayed persistently accross all steps. The banner's content is provided by the app and wrapped by\n * a Progress Stepper Banner component. It might contain dynamic content.\n *\n * A single step's content is wrapped with a Progress Step component which offers input properties to control state\n * (`isValid`, `isRequired`, `isDisabled`).These properties are updated by the consuming app. Required steps cannot be\n * skipped by the user unless they are completed (valid). By default Progress Steps are considered required and valid.\n * This means the user can navigate through the steps in any order unless the app sets steps invalid.\n *\n * ### Footer\n *\n * The footer is a fixed section at the bottom. It typically contains action buttons to navigate to the next or previous\n * step. Navigation is typically based on Progress Stepper Service logic.\n *\n * ```html\n * <talenra-progress-stepper-header />\n * <talenra-progress-stepper-body>\n *   <talenra-progress-steper-banner>...</talenra-progress-stepper-banner>\n *   <talenra-progress-step>...</talenra-progress-step>\n *   <talenra-progress-step>...</talenra-progress-step>\n *   <talenra-progress-step>...</talenra-progress-step>\n * </talenra-progress-stepper-body>\n * <talenra-progress-stepper-footer>...</talenra-progress-stepper-footer>\n * ```\n *\n * ## Progress Stepper Service\n *\n * Progress Stepper Service is used to control the Progress Stepper (e.g. to navigate to the next or previous step or to\n * set the state (enabled/disabled) of the navigation buttons in the footer).\n *\n * ```typescript\n * // Component class:\n * // Provide a ProgressStepperService instance\n * @Component({\n *   providers: [{ provide: ProgressStepperService, useClass: ProgressStepperService }],\n * })\n * // Consume the service instance in your component class\n * private service: ProgressStepperService = inject(ProgressStepperService);\n * // Use the service to control Progress Stepper\n * service.next();\n * ```\n *\n * ### Import\n *\n * ```typescript\n * import { ProgressStepperBodyComponent } from '@talenra/ngx-base/progress-stepper';\n * ```\n *\n * @see {@link ProgressStepperService}\n * @see {@link ProgressStepperHeaderComponent}\n * @see {@link ProgressStepperBannerComponent}\n * @see {@link ProgressStepComponent}\n * @see {@link ProgressStepperFooterComponent}\n * @see {@link ProgressStepperPageLayoutComponent}\n * @see {@link ProgressStepState}\n *\n * @experimental\n */\n@Component({\n  selector: 'talenra-progress-stepper-body',\n  imports: [ButtonComponent, ProgressStepHeaderComponent],\n  templateUrl: './progress-stepper-body.component.html',\n  styleUrl: './progress-stepper-body.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ProgressStepperBodyComponent {\n  /** Progress steps */\n  private readonly steps = contentChildren(ProgressStepComponent);\n\n  /** ProgressStepperService reference */\n  protected readonly service: ProgressStepperService = inject(ProgressStepperService);\n\n  /** @internal */\n  constructor() {\n    effect(() => {\n      // Update steps count in service\n      this.service.setSteps([...this.steps()]);\n    });\n  }\n}\n","<div class=\"content\">\n  <ng-content select=\"talenra-progress-stepper-banner\" />\n  <div class=\"steps-container\" [style.height.px]=\"!!service.contentHeight && service.contentHeight()\">\n    <ng-content />\n  </div>\n</div>\n<ng-content select=\"talenra-progress-stepper-footer\" />\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n/**\n * Progress Stepper Banner is a wrapper for a Progress Stepper's optional banner which is rendered below the stepper's\n * header and above the steps. It is typically used to display consistent information across all steps.\n *\n * ```html\n * <talenra-progress-stepper-body>\n *   <talenra-progress-stepper-banner><!-- Banner content --></talenra-progress-stepper-banner>\n *   <talenra-progress-step>...</talenra-progress-step>\n *   <talenra-progress-step>...</talenra-progress-step>\n *   <talenra-progress-step>...</talenra-progress-step>\n * </talenra-progress-stepper-body>\n * ```\n *\n * ### Import\n *\n * ```typescript\n * import { ProgressStepperBannerComponent } from '@talenra/ngx-base/progress-stepper';\n * ```\n *\n * @see {@link ProgressStepperBodyComponent}\n *\n * @experimental\n */\n@Component({\n  selector: 'talenra-progress-stepper-banner',\n  templateUrl: './progress-stepper-banner.component.html',\n  styleUrl: './progress-stepper-banner.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ProgressStepperBannerComponent {}\n","<ng-content />\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n/**\n * Progress Stepper Footer is a wrapper for a Progress Stepper's optional footer. It is typically used to render\n * navigation buttons like \"Next Step\".\n *\n * Navigation logic is typically implemented base on `ProgressStepperService`.\n *\n * ```html\n * <!-- Template -->\n * <talenra-progress-stepper-body>\n *   <talenra-progress-step>...</talenra-progress-step>\n *   <talenra-progress-step>...</talenra-progress-step>\n *   <talenra-progress-step>...</talenra-progress-step>\n *   <talenra-progress-stepper-footer><!-- Footer content --></talenra-progress-stepper-footer>\n * </talenra-progress-stepper-body>\n * ```\n *\n * ### Import\n *\n * ```typescript\n * import { ProgressStepperFooterComponent } from '@talenra/ngx-base/progress-stepper';\n * ```\n *\n * @see {@link ProgressStepperBodyComponent}\n * @see {@link ProgressStepperService}\n *\n * @experimental\n */\n@Component({\n  selector: 'talenra-progress-stepper-footer',\n  templateUrl: './progress-stepper-footer.component.html',\n  styleUrl: './progress-stepper-footer.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ProgressStepperFooterComponent {}\n","<ng-content />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}