{"version":3,"file":"core.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/breakpoints/breakpoints.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/version.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/common-behaviors/localize/global.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/common-behaviors/localize/localize.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/common-behaviors/variant.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/common-behaviors/common.module.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/common-behaviors/error-state.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/datetime/date-adapter.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/datetime/date-formats.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/datetime/date-pipe-date-formats.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/datetime/datepicker-token.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/datetime/native-date-adapter.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/datetime/lean-date-adapter.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/datetime/lean-date-adapter-provider.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/datetime/native-date-adapter-provider.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/error/error-options.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/option/option-parent.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/option/optgroup.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/option/optgroup.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/option/pseudo-checkbox.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/option/pseudo-checkbox.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/option/option.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/option/option.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/option/option-hint.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/core/option/option.module.ts"],"sourcesContent":["export const Breakpoints = {\n  Mobile: '(max-width: 642.99px)',\n  Tablet: '(min-width: 643px) and (max-width: 1024.99px)',\n  Desktop: '(min-width: 1025px) and (max-width: 1280.99px)',\n  DesktopLarge: '(min-width: 1281px) and (max-width: 1440.99px)',\n  Desktop2k: '(min-width: 1441px) and (max-width: 2560.99px)',\n  Desktop4k: '(min-width: 2561px) and (max-width: 3840.99px)',\n  Desktop5k: '(min-width: 3841px)',\n\n  MobileDevice:\n    '(max-width: 642.99px) and (orientation: portrait), ' +\n    '(max-width: 1024.99px) and (orientation: landscape)',\n  TabletDevice:\n    '(min-width: 643px) and (max-width: 897.99px) and (orientation: portrait), ' +\n    '(min-width: 1025px) and (max-width: 1280.99px) and (orientation: landscape)',\n  DesktopDevice:\n    '(min-width: 898px) and (orientation: portrait), ' +\n    '(min-width: 1280px) and (orientation: landscape)',\n\n  MobileDevicePortrait: '(max-width: 642.99px) and (orientation: portrait)',\n  TabletDevicePortrait: '(min-width: 643px) and (max-width: 897.99px) and (orientation: portrait)',\n  DesktopDevicePortrait: '(min-width: 898px) and (orientation: portrait)',\n\n  MobileDeviceLandscape: '(max-width: 1024.99px) and (orientation: landscape)',\n  TabletDeviceLandscape:\n    '(min-width: 1025px) and (max-width: 1279.99px) and (orientation: landscape)',\n  DesktopDeviceLandscape: '(min-width: 1280px) and (orientation: landscape)',\n};\n\nexport const SCALING_FACTOR_4K = 1.5;\n\nexport const SCALING_FACTOR_5K = 2;\n","import { Version } from '@angular/core';\n\n/** Current version of @sbb-esta/angular. */\nexport const VERSION = new Version('22.1.0');\n","/* tslint:disable */\n// **********************************************************************************************\n// This code to access the global object is mostly copied from `@angular/angular/packages/core/src/util/global.ts`\n\ndeclare global {\n  // The definition of `WorkerGlobalScope` must be compatible with the one in `lib.webworker.d.ts`,\n  // because all files under `packages/` are compiled together as part of the\n  // [legacy-unit-tests-saucelabs][1] CI job, including the `lib.webworker.d.ts` typings brought in\n  // by [service-worker/worker/src/service-worker.d.ts][2].\n  //\n  // [1]:\n  // https://github.com/angular/angular/blob/ffeea63f43e6a7fd46be4a8cd5a5d254c98dea08/.circleci/config.yml#L681\n  // [2]:\n  // https://github.com/angular/angular/blob/316dc2f12ce8931f5ff66fa5f8da21c0d251a337/packages/service-worker/worker/src/service-worker.d.ts#L9\n  interface WorkerGlobalScope extends EventTarget, WindowOrWorkerGlobalScope {}\n\n  var WorkerGlobalScope: { prototype: WorkerGlobalScope; new (): WorkerGlobalScope };\n}\n\ndeclare var global: unknown;\n\nconst __globalThis = typeof globalThis !== 'undefined' && globalThis;\nconst __window = typeof window !== 'undefined' && window;\nconst __self =\n  typeof self !== 'undefined' &&\n  typeof WorkerGlobalScope !== 'undefined' &&\n  self instanceof WorkerGlobalScope &&\n  self;\nconst __global = typeof global !== 'undefined' && global;\n// Always use __globalThis if available; this is the spec-defined global variable across all\n// environments.\n// Then fallback to __global first; in Node tests both __global and __window may be defined.\nexport const _global: any = __globalThis || __global || __window || __self;\n","/* tslint:disable:callable-types */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/** @nodoc */\nexport interface LocalizeFn {\n  (messageParts: TemplateStringsArray, ...expressions: readonly any[]): string;\n\n  /**\n   * A function that converts an input \"message with expressions\" into a translated \"message with\n   * expressions\".\n   *\n   * The conversion may be done in place, modifying the array passed to the function, so\n   * don't assume that this has no side-effects.\n   *\n   * The expressions must be passed in since it might be they need to be reordered for\n   * different translations.\n   */\n  translate?: TranslateFn;\n  /**\n   * The current locale of the translated messages.\n   *\n   * The compile-time translation inliner is able to replace the following code:\n   *\n   * ```\n   * typeof $localize !== \"undefined\" && $localize.locale\n   * ```\n   *\n   * with a string literal of the current locale. E.g.\n   *\n   * ```\n   * \"fr\"\n   * ```\n   */\n  locale?: string;\n}\n\n/** @nodoc */\nexport interface TranslateFn {\n  (\n    messageParts: TemplateStringsArray,\n    expressions: readonly any[],\n  ): [TemplateStringsArray, readonly any[]];\n}\n\n/**\n * Tag a template literal string for localization.\n *\n * For example:\n *\n * ```ts\n * $localize `some string to localize`\n * ```\n *\n * **Providing meaning, description and id**\n *\n * You can optionally specify one or more of `meaning`, `description` and `id` for a localized\n * string by pre-pending it with a colon delimited block of the form:\n *\n * ```ts\n * $localize`:meaning|description@@id:source message text`;\n *\n * $localize`:meaning|:source message text`;\n * $localize`:description:source message text`;\n * $localize`:@@id:source message text`;\n * ```\n *\n * This format is the same as that used for `i18n` markers in Angular templates. See the\n * [Angular i18n guide](guide/i18n-common-prepare#mark-text-in-component-template).\n *\n * **Naming placeholders**\n *\n * If the template literal string contains expressions, then the expressions will be automatically\n * associated with placeholder names for you.\n *\n * For example:\n *\n * ```ts\n * $localize `Hi ${name}! There are ${items.length} items.`;\n * ```\n *\n * will generate a message-source of `Hi {$PH}! There are {$PH_1} items`.\n *\n * The recommended practice is to name the placeholder associated with each expression though.\n *\n * Do this by providing the placeholder name wrapped in `:` characters directly after the\n * expression. These placeholder names are stripped out of the rendered localized string.\n *\n * For example, to name the `items.length` expression placeholder `itemCount` you write:\n *\n * ```ts\n * $localize `There are ${items.length}:itemCount: items`;\n * ```\n *\n * **Escaping colon markers**\n *\n * If you need to use a `:` character directly at the start of a tagged string that has no\n * metadata block, or directly after a substitution expression that has no name you must escape\n * the `:` by preceding it with a backslash:\n *\n * For example:\n *\n * ```ts\n * // message has a metadata block so no need to escape colon\n * $localize `:some description::this message starts with a colon (:)`;\n * // no metadata block so the colon must be escaped\n * $localize `\\:this message starts with a colon (:)`;\n * ```\n *\n * ```ts\n * // named substitution so no need to escape colon\n * $localize `${label}:label:: ${}`\n * // anonymous substitution so colon must be escaped\n * $localize `${label}\\: ${}`\n * ```\n *\n * **Processing localized strings:**\n *\n * There are three scenarios:\n *\n * * **compile-time inlining**: the `$localize` tag is transformed at compile time by a\n * transpiler, removing the tag and replacing the template literal string with a translated\n * literal string from a collection of translations provided to the transpilation tool.\n *\n * * **run-time evaluation**: the `$localize` tag is a run-time function that replaces and\n * reorders the parts (static strings and expressions) of the template literal string with strings\n * from a collection of translations loaded at run-time.\n *\n * * **pass-through evaluation**: the `$localize` tag is a run-time function that simply evaluates\n * the original template literal string without applying any translations to the parts. This\n * version is used during development or where there is no need to translate the localized\n * template literals.\n *\n * @param messageParts a collection of the static parts of the template string.\n * @param expressions a collection of the values of each placeholder in the template string.\n * @returns the translated string, with the `messageParts` and `expressions` interleaved together.\n *\n * @globalApi\n * @publicApi\n */\nexport const _$localize: LocalizeFn = function (\n  messageParts: TemplateStringsArray,\n  ...expressions: readonly any[]\n) {\n  if (_$localize.translate) {\n    // Don't use array expansion here to avoid the compiler adding `__read()` helper unnecessarily.\n    const translation = _$localize.translate(messageParts, expressions);\n    messageParts = translation[0];\n    expressions = translation[1];\n  }\n  let message = stripBlock(messageParts[0], messageParts.raw[0]);\n  for (let i = 1; i < messageParts.length; i++) {\n    message += expressions[i - 1] + stripBlock(messageParts[i], messageParts.raw[i]);\n  }\n  return message;\n};\n\nconst BLOCK_MARKER = ':';\n\n/**\n * Strip a delimited \"block\" from the start of the `messagePart`, if it is found.\n *\n * If a marker character (:) actually appears in the content at the start of a tagged string or\n * after a substitution expression, where a block has not been provided the character must be\n * escaped with a backslash, `\\:`. This function checks for this by looking at the `raw`\n * messagePart, which should still contain the backslash.\n *\n * @param messagePart The cooked message part to process.\n * @param rawMessagePart The raw message part to check.\n * @returns the message part with the placeholder name stripped, if found.\n * @throws an error if the block is unterminated\n */\nfunction stripBlock(messagePart: string, rawMessagePart: string) {\n  return rawMessagePart.charAt(0) === BLOCK_MARKER\n    ? messagePart.substring(findEndOfBlock(messagePart, rawMessagePart) + 1)\n    : messagePart;\n}\n\n/**\n * Find the end of a \"marked block\" indicated by the first non-escaped colon.\n *\n * @param cooked The cooked string (where escaped chars have been processed)\n * @param raw The raw string (where escape sequences are still in place)\n *\n * @returns the index of the end of block marker\n * @throws an error if the block is unterminated\n */\nfunction findEndOfBlock(cooked: string, raw: string): number {\n  /***********************************************************************************************\n   * This function is repeated in `src/utils/messages.ts` and the two should be kept in sync.\n   * The reason is that this file is marked as having side-effects, and if we import `messages.ts`\n   * into it, the whole of `src/utils` will be included in this bundle and none of the functions\n   * will be tree shaken.\n   ***********************************************************************************************/\n  for (let cookedIndex = 1, rawIndex = 1; cookedIndex < cooked.length; cookedIndex++, rawIndex++) {\n    if (raw[rawIndex] === '\\\\') {\n      rawIndex++;\n    } else if (cooked[cookedIndex] === BLOCK_MARKER) {\n      return cookedIndex;\n    }\n  }\n  throw new Error(`Unterminated $localize metadata block in \"${raw}\".`);\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\n\nimport { AbstractConstructor, Constructor } from './constructor';\n\nexport const ɵvariant = new BehaviorSubject<SbbVariant>('standard');\n\n/** @docs-private */\nexport interface HasVariant {\n  /** Observable holding current variant (`lean` or `standard`) which emits by change */\n  readonly variant: Observable<SbbVariant>;\n  /** Returns current active variant as a snapshot */\n  readonly variantSnapshot: SbbVariant;\n}\n\n/** Possible variant values. */\nexport type SbbVariant = 'standard' | 'lean';\n\n/** Mixin to augment a directive with a variant property. */\nexport function mixinVariant<T extends AbstractConstructor<any>>(\n  base: T,\n): AbstractConstructor<HasVariant> & T;\nexport function mixinVariant<T extends Constructor<any>>(base: T): Constructor<HasVariant> & T {\n  return class extends base {\n    readonly variant: Observable<SbbVariant> = ɵvariant;\n\n    constructor(...args: any[]) {\n      super(...args);\n    }\n\n    get variantSnapshot(): SbbVariant {\n      return ɵvariant.value;\n    }\n  };\n}\n","import { VERSION as CDK_VERSION } from '@angular/cdk';\nimport { HighContrastModeDetector } from '@angular/cdk/a11y';\nimport { _isTestEnvironment } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport { Inject, InjectionToken, NgModule, Optional } from '@angular/core';\nimport { fromEvent, Observable } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\n\nimport { VERSION } from '../version';\n\nimport { _global } from './localize/global';\nimport { _$localize } from './localize/localize';\nimport { ɵvariant } from './variant';\n\n/** @docs-private */\nexport function SBB_SANITY_CHECKS_FACTORY(): SanityChecks {\n  return true;\n}\n\n/** Injection token that configures whether the SBB sanity checks are enabled. */\nexport const SBB_SANITY_CHECKS = new InjectionToken<SanityChecks>('sbb-sanity-checks', {\n  providedIn: 'root',\n  factory: SBB_SANITY_CHECKS_FACTORY,\n});\n\n/**\n * Possible sanity checks that can be enabled. If set to\n * true/false, all checks will be enabled/disabled.\n */\nexport type SanityChecks = boolean | GranularSanityChecks;\n\n/** Object that can be used to configure the sanity checks granularly. */\nexport interface GranularSanityChecks {\n  doctype: boolean;\n  typography: boolean;\n  version: boolean;\n}\n\n/**\n * Module that captures anything that should be loaded and/or run for *all* sbb-angular\n * components. This includes variant, etc.\n *\n * This module should be imported to each top-level component module (e.g. SbbTabsModule).\n */\n@NgModule()\nexport class SbbCommonModule {\n  /** Whether we've done the global sanity checks (e.g. a theme is loaded, there is a doctype). */\n  private _hasDoneGlobalChecks = false;\n\n  constructor(\n    highContrastModeDetector: HighContrastModeDetector,\n    @Optional() @Inject(SBB_SANITY_CHECKS) private _sanityChecks: SanityChecks,\n    @Inject(DOCUMENT) private _document: Document,\n  ) {\n    this._isDarkMode().subscribe((isDark) => {\n      document.documentElement.classList.toggle('sbb-preferred-color-scheme-dark', isDark);\n    });\n    // Check variant configuration at the beginning, as this might cause components\n    // to render differently.\n    ɵvariant.next(\n      this._document.documentElement.classList.contains('sbb-lean') ? 'lean' : 'standard',\n    );\n\n    // While A11yModule also does this, we repeat it here to avoid importing A11yModule\n    // in SbbCommonModule.\n    highContrastModeDetector._applyBodyHighContrastModeCssClasses();\n\n    patch$localize();\n\n    if (!this._hasDoneGlobalChecks) {\n      this._hasDoneGlobalChecks = true;\n\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        if (this._checkIsEnabled('doctype')) {\n          _checkDoctypeIsDefined(this._document);\n        }\n\n        if (this._checkIsEnabled('typography')) {\n          _checkTypographyIsPresent(this._document);\n        }\n\n        if (this._checkIsEnabled('version')) {\n          _checkCdkVersionMatch();\n        }\n      }\n    }\n  }\n\n  /** Gets whether a specific sanity check is enabled. */\n  private _checkIsEnabled(name: keyof GranularSanityChecks): boolean {\n    if (_isTestEnvironment()) {\n      return false;\n    }\n\n    if (typeof this._sanityChecks === 'boolean') {\n      return this._sanityChecks;\n    }\n\n    return !!this._sanityChecks[name];\n  }\n\n  private _isDarkMode(): Observable<boolean> {\n    const query = window.matchMedia('(prefers-color-scheme: dark)');\n    return fromEvent<MediaQueryList>(query, 'change').pipe(\n      startWith(query),\n      map((event) => !!event.matches),\n    );\n  }\n}\n\n/** Checks that the page has a doctype. */\nfunction _checkDoctypeIsDefined(doc: Document): void {\n  if (!doc.doctype) {\n    console.warn(\n      'Current document does not have a doctype. This may cause ' +\n        'some sbb-angular components not to behave as expected.',\n    );\n  }\n}\n\n/** Checks that the typography has been included. */\nfunction _checkTypographyIsPresent(doc: Document): void {\n  // We need to assert that the `body` is defined, because these checks run very early\n  // and the `body` won't be defined if the consumer put their scripts in the `head`.\n  if (!doc.body || typeof getComputedStyle !== 'function') {\n    return;\n  }\n\n  // The --sbb-scaling-factor variable is available, if our typography is loaded as\n  // a majority of variables and rules depend on this variable.\n  const missingScalingFactorVariable = !getComputedStyle(doc.documentElement).getPropertyValue(\n    '--sbb-scaling-factor',\n  );\n\n  if (missingScalingFactorVariable) {\n    console.warn(\n      'Could not find @sbb-esta/angular typography. Most @sbb-esta/angular ' +\n        'components may not work as expected.',\n    );\n  }\n}\n\n/** Checks whether the @sbb-esta/angular version matches the CDK major version. */\nfunction _checkCdkVersionMatch(): void {\n  if (VERSION.major !== CDK_VERSION.major) {\n    console.warn(\n      `The @sbb-esta/angular version (${VERSION.full}) does not match the Angular CDK major version` +\n        ` (${CDK_VERSION.full}).\\nPlease ensure the major versions of these two packages match.`,\n    );\n  }\n}\n\n/**\n * If an app doesn't use localize, on production environment there is no $localize function.\n * In order to provide our translations we patch the $localize object with the original function.\n */\nfunction patch$localize() {\n  // In production mode and if localize is off, $localize is not a function\n  if (typeof _global.$localize !== 'function') {\n    // Merge $localize function with provided $localize object\n    _global.$localize = Object.assign(_$localize, _global.$localize);\n  }\n}\n","import { AbstractControl, FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { Subject } from 'rxjs';\n\nimport { SbbErrorStateMatcher } from '../error/error-options';\n\n/**\n * Class that tracks the error state of a component.\n * @docs-private\n */\n// tslint:disable-next-line:class-name\nexport class _ErrorStateTracker {\n  /** Whether the tracker is currently in an error state. */\n  errorState: boolean = false;\n\n  /** User-defined matcher for the error state. */\n  matcher!: SbbErrorStateMatcher;\n\n  constructor(\n    private _defaultMatcher: SbbErrorStateMatcher | null,\n    public ngControl: NgControl | null,\n    private _parentFormGroup: FormGroupDirective | null,\n    private _parentForm: NgForm | null,\n    private _stateChanges: Subject<void>,\n  ) {}\n\n  /** Updates the error state based on the provided error state matcher. */\n  updateErrorState() {\n    const oldState = this.errorState;\n    const parent = this._parentFormGroup || this._parentForm;\n    const matcher = this.matcher || this._defaultMatcher;\n    const control = this.ngControl ? (this.ngControl.control as AbstractControl) : null;\n    // Note: the null check here shouldn't be necessary, but there's an internal\n    // test that appears to pass an object whose `isErrorState` isn't a function.\n    const newState =\n      typeof matcher?.isErrorState === 'function' ? matcher.isErrorState(control, parent) : false;\n\n    if (newState !== oldState) {\n      this.errorState = newState;\n      this._stateChanges.next();\n    }\n  }\n}\n","/** Adapts type `D` to be usable as a date by cdk-based components that work with dates. */\nexport abstract class SbbDateAdapter<D> {\n  /** The locale to use for all dates. */\n  protected _locale: any;\n\n  /**\n   * Gets the year component of the given date.\n   * @param date The date to extract the year from.\n   * @returns The year component.\n   */\n  abstract getYear(date: D): number;\n\n  /**\n   * Gets the month component of the given date.\n   * @param date The date to extract the month from.\n   * @returns The month component (0-indexed, 0 = January).\n   */\n  abstract getMonth(date: D): number;\n\n  /**\n   * Gets the date of the month component of the given date.\n   * @param date The date to extract the date of the month from.\n   * @returns The month component (1-indexed, 1 = first of month).\n   */\n  abstract getDate(date: D): number;\n\n  /**\n   * Gets the day of the week component of the given date.\n   * @param date The date to extract the day of the week from.\n   * @returns The month component (0-indexed, 0 = Sunday).\n   */\n  abstract getDayOfWeek(date: D): number;\n\n  abstract getMonthName(date: D): string;\n\n  /**\n   * Gets a list of names for the months.\n   * @param style The naming style (e.g. long = 'January', short = 'Jan', narrow = 'J').\n   * @returns An ordered list of all month names, starting with January.\n   */\n  abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets a list of names for the dates of the month.\n   * @returns An ordered list of all date of the month names, starting with '1'.\n   */\n  abstract getDateNames(): string[];\n\n  /**\n   * Gets a list of names for the days of the week.\n   * @param style The naming style (e.g. long = 'Sunday', short = 'Sun', narrow = 'S').\n   * @returns An ordered list of all weekday names, starting with Sunday.\n   */\n  abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets the name for the year of the given date.\n   * @param date The date to get the year name for.\n   * @returns The name of the given year (e.g. '2017').\n   */\n  abstract getYearName(date: D): string;\n\n  /**\n   * Gets the first day of the week.\n   * @returns The first day of the week (0-indexed, 0 = Sunday).\n   */\n  abstract getFirstDayOfWeek(): number;\n\n  /**\n   * Gets the number of days in the month of the given date.\n   * @param date The date whose month should be checked.\n   * @returns The number of days in the month of the given date.\n   */\n  abstract getNumDaysInMonth(date: D): number;\n\n  /**\n   * Clones the given date.\n   * @param date The date to clone\n   * @returns A new date equal to the given date.\n   */\n  abstract clone(date: D): D;\n\n  /**\n   * Creates a date with the given year, month, and date. Does not allow over/under-flow of the\n   * month and date.\n   * @param year The full year of the date. (e.g. 89 means the year 89, not the year 1989).\n   * @param month The month of the date (0-indexed, 0 = January). Must be an integer 0 - 11.\n   * @param date The date of month of the date. Must be an integer 1 - length of the given month.\n   * @returns The new date, or null if invalid.\n   */\n  abstract createDate(year: number, month: number, date: number): D;\n\n  /**\n   * Gets today's date.\n   * @returns Today's date.\n   */\n  abstract today(): D;\n\n  /**\n   * Parses a date from a user-provided value.\n   * @param value The value to parse.\n   * @returns The parsed date.\n   */\n  abstract parse(value: any): D | null;\n\n  /**\n   * Formats a date as a string according to the given format.\n   * @param date The value to format.\n   * @param displayFormat The format to use to display the date as a string.\n   * @returns The formatted date string.\n   */\n  abstract format(date: D, displayFormat: any): string;\n\n  /**\n   * Adds the given number of years to the date. Years are counted as if flipping 12 pages on the\n   * calendar for each year and then finding the closest date in the new month. For example when\n   * adding 1 year to Feb 29, 2016, the resulting date will be Feb 28, 2017.\n   * @param date The date to add years to.\n   * @param years The number of years to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of years added.\n   */\n  abstract addCalendarYears(date: D, years: number): D;\n\n  /**\n   * Adds the given number of months to the date. Months are counted as if flipping a page on the\n   * calendar for each month and then finding the closest date in the new month. For example when\n   * adding 1 month to Jan 31, 2017, the resulting date will be Feb 28, 2017.\n   * @param date The date to add months to.\n   * @param months The number of months to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of months added.\n   */\n  abstract addCalendarMonths(date: D, months: number): D;\n\n  /**\n   * Adds the given number of days to the date. Days are counted as if moving one cell on the\n   * calendar for each day.\n   * @param date The date to add days to.\n   * @param days The number of days to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of days added.\n   */\n  abstract addCalendarDays(date: D, days: number): D;\n\n  /**\n   * Gets the RFC 3339 compatible string (https://tools.ietf.org/html/rfc3339) for the given date.\n   * This method is used to generate date strings that are compatible with native HTML attributes\n   * such as the `min` or `max` attribute of an `<input>`.\n   * @param date The date to get the ISO date string for.\n   * @returns The ISO date string date string.\n   */\n  abstract toIso8601(date: D): string;\n\n  /**\n   * Checks whether the given object is considered a date instance by this DateAdapter.\n   * @param obj The object to check\n   * @returns Whether the object is a date instance.\n   */\n  abstract isDateInstance(obj: any): boolean;\n\n  /**\n   * Checks whether the given date is valid.\n   * @param date The date to check.\n   * @returns Whether the date is valid.\n   */\n  abstract isValid(date: D): boolean;\n\n  /**\n   * Gets date instance that is not valid.\n   * @returns An invalid date.\n   */\n  abstract invalid(): D;\n\n  /**\n   * Attempts to deserialize a value to a valid date object. This is different from parsing in that\n   * deserialize should only accept non-ambiguous, locale-independent formats (e.g. a ISO 8601\n   * string). The default implementation does not allow any deserialization, it simply checks that\n   * the given value is already a valid date object or null. The `<sbb-datepicker>` will call this\n   * method on all of it's `@Input()` properties that accept dates. It is therefore possible to\n   * support passing values from your backend directly to these properties by overriding this method\n   * to also deserialize the format used by your backend.\n   * @param value The value to be deserialized into a date object.\n   * @returns The deserialized date object, either a valid date, null if the value can be\n   *     deserialized into a null date (e.g. the empty string), or an invalid date.\n   */\n  deserialize(value: any): D | null {\n    if (value == null || (this.isDateInstance(value) && this.isValid(value))) {\n      return value;\n    }\n    return this.invalid();\n  }\n\n  /**\n   * Sets the locale used for all dates.\n   * @param locale The new locale.\n   */\n  setLocale(locale: any) {\n    this._locale = locale;\n  }\n\n  /**\n   * Compares two dates.\n   * @param first The first date to compare.\n   * @param second The second date to compare.\n   * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\n   *     a number greater than 0 if the first date is later.\n   */\n  compareDate(first: D, second: D): number {\n    return (\n      this.getYear(first) - this.getYear(second) ||\n      this.getMonth(first) - this.getMonth(second) ||\n      this.getDate(first) - this.getDate(second)\n    );\n  }\n\n  /**\n   * Checks if two dates are equal.\n   * @param first The first date to check.\n   * @param second The second date to check.\n   * @returns Whether the two dates are equal.\n   *     Null dates are considered equal to other null dates.\n   */\n  sameDate(first: D | null, second: D | null): boolean {\n    if (first && second) {\n      const firstValid = this.isValid(first);\n      const secondValid = this.isValid(second);\n      if (firstValid && secondValid) {\n        return !this.compareDate(first, second);\n      }\n      return firstValid === secondValid;\n    }\n    return first === second;\n  }\n\n  /**\n   * Clamp the given date between min and max dates.\n   * @param date The date to clamp.\n   * @param min The minimum value to allow. If null or omitted no min is enforced.\n   * @param max The maximum value to allow. If null or omitted no max is enforced.\n   * @returns `min` if `date` is less than `min`, `max` if date is greater than `max`,\n   *     otherwise `date`.\n   */\n  clampDate(date: D, min?: D | null, max?: D | null): D {\n    if (min && this.compareDate(date, min) < 0) {\n      return min;\n    }\n    if (max && this.compareDate(date, max) > 0) {\n      return max;\n    }\n    return date;\n  }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface SbbDateFormats {\n  dateInput: any;\n  dateInputPure: any;\n  dateA11yLabel: any;\n}\n\nexport const SBB_DATE_FORMATS = new InjectionToken<SbbDateFormats>('sbb-date-formats');\n","import { SbbDateFormats } from './date-formats';\n\nexport const SBB_DATE_PIPE_DATE_FORMATS: SbbDateFormats = {\n  dateInput: 'EEEEEE, dd.MM.yyyy',\n  dateInputPure: 'dd.MM.yyyy',\n  dateA11yLabel: 'dd MM yyyy',\n};\n","import { InjectionToken } from '@angular/core';\n\nexport const SBB_DATEPICKER_2DIGIT_YEAR_PIVOT = new InjectionToken<number>(\n  'SBB_DATEPICKER_2DIGIT_YEAR_PIVOT',\n);\n\nexport const SBB_DATEPICKER_PREVENT_OVERFLOW = new InjectionToken<boolean>(\n  'SBB_DATEPICKER_PREVENT_OVERFLOW',\n);\n","import { DatePipe, TitleCasePipe } from '@angular/common';\nimport { Inject, Injectable, LOCALE_ID, Optional } from '@angular/core';\n\nimport { SbbDateAdapter } from './date-adapter';\nimport {\n  SBB_DATEPICKER_2DIGIT_YEAR_PIVOT,\n  SBB_DATEPICKER_PREVENT_OVERFLOW,\n} from './datepicker-token';\n\n/**\n * Matches strings that have the form of a valid RFC 3339 string\n * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date\n * because the regex will match strings an with out of bounds month, date, etc.\n */\nconst ISO_8601_REGEX =\n  /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\n\n/** Creates an array and fills it with values. */\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\n  const valuesArray = Array(length);\n  for (let i = 0; i < length; i++) {\n    valuesArray[i] = valueFunction(i);\n  }\n  return valuesArray;\n}\n\n@Injectable()\nexport class SbbNativeDateAdapter extends SbbDateAdapter<Date> {\n  private _datePipe: DatePipe;\n  private _yearPivot: number;\n  private _titleCasePipe = new TitleCasePipe();\n  private readonly _preventOverflow: boolean;\n\n  constructor(\n    @Inject(LOCALE_ID) protected override _locale: string,\n    @Optional() @Inject(SBB_DATEPICKER_2DIGIT_YEAR_PIVOT) yearPivot: number,\n    @Optional() @Inject(SBB_DATEPICKER_PREVENT_OVERFLOW) preventOverflow?: boolean,\n  ) {\n    super();\n    this._datePipe = new DatePipe(_locale);\n    this._yearPivot = typeof yearPivot === 'number' ? yearPivot : new Date().getFullYear() - 1975;\n    this._preventOverflow = typeof preventOverflow === 'boolean' ? preventOverflow : false;\n  }\n\n  getYear(date: Date): number {\n    return date.getFullYear();\n  }\n\n  getMonth(date: Date): number {\n    return date.getMonth();\n  }\n\n  getDate(date: Date): number {\n    return date.getDate();\n  }\n\n  getDayOfWeek(date: Date): number {\n    return date.getDay();\n  }\n\n  getMonthName(date: Date) {\n    return this._datePipe.transform(date, 'LLLL')!;\n  }\n\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n    let format: string;\n    switch (style) {\n      case 'long':\n        format = 'LLLL';\n        break;\n      case 'narrow':\n        format = 'LLLLL';\n        break;\n      default:\n        format = 'LLL';\n        break;\n    }\n    return range(12, (i) => this._datePipe.transform(new Date(2017, i, 1), format)!);\n  }\n\n  getDateNames(): string[] {\n    return range(31, (i) => this._datePipe.transform(new Date(2017, 0, i + 1), 'd')!);\n  }\n\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n    let format: string;\n    switch (style) {\n      case 'long':\n        format = 'EEEE';\n        break;\n      case 'narrow':\n        format = 'EEEEE';\n        break;\n      default:\n        format = 'EEE';\n        break;\n    }\n    return range(7, (i) => this._datePipe.transform(new Date(2017, 0, i + 1), format)!);\n  }\n\n  getYearName(date: Date): string {\n    return this._datePipe.transform(date, 'yyyy')!;\n  }\n\n  getFirstDayOfWeek(): number {\n    return 1;\n  }\n\n  getNumDaysInMonth(date: Date): number {\n    const lastDayOfMonth = new Date(0);\n    lastDayOfMonth.setFullYear(date.getFullYear(), date.getMonth() + 1, 0);\n    lastDayOfMonth.setHours(0, 0, 0, 0);\n    return lastDayOfMonth.getDate();\n  }\n\n  clone(date: Date): Date {\n    return new Date(date.valueOf());\n  }\n\n  createDate(year: number, month: number, date: number): Date {\n    // Check for invalid month and date (except upper bound on date which we have to check after\n    // creating the Date).\n    if (month < 0 || month > 11) {\n      throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\n    }\n\n    if (date < 1) {\n      throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\n    }\n\n    const result = this._createDateWithOverflow(year, month, date);\n    // Check that the date wasn't above the upper bound for the month, causing the month to overflow\n    if (result.getMonth() !== month) {\n      throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\n    }\n\n    return result;\n  }\n\n  today(): Date {\n    const date = new Date();\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  parse(value: any): Date | null {\n    if (typeof value === 'number') {\n      return new Date(value);\n    } else if (typeof value === 'string') {\n      if (this._preventOverflow && this._isOverflowingDate(value)) {\n        return new Date(NaN);\n      }\n      return this._parseStringDate(value);\n    }\n    return null;\n  }\n\n  format(date: Date, displayFormat: any): string {\n    if (!this.isValid(date)) {\n      throw Error('NativeDateAdapter: Cannot format invalid date.');\n    }\n\n    return this._titleCasePipe.transform(this._datePipe.transform(date, displayFormat)!);\n  }\n\n  addCalendarYears(date: Date, years: number): Date {\n    return this.addCalendarMonths(date, years * 12);\n  }\n\n  addCalendarMonths(date: Date, months: number): Date {\n    const targetMonth = date.getMonth() + months;\n    const dateWithCorrectMonth = new Date(0);\n    dateWithCorrectMonth.setFullYear(date.getFullYear(), targetMonth, 1);\n    dateWithCorrectMonth.setHours(0, 0, 0, 0);\n    const daysInMonth = this.getNumDaysInMonth(dateWithCorrectMonth);\n    const newDate = this.clone(date);\n    // Adapt last day of month for shorter months\n    newDate.setMonth(targetMonth, Math.min(daysInMonth, date.getDate()));\n    return newDate;\n  }\n\n  addCalendarDays(date: Date, days: number): Date {\n    const newDate = this.clone(date);\n    newDate.setDate(newDate.getDate() + days);\n    return newDate;\n  }\n\n  toIso8601(date: Date): string {\n    return this._datePipe.transform(date, 'yyyy-MM-dd')!;\n  }\n\n  /**\n   * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\n   * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\n   * invalid date for all other values.\n   */\n  override deserialize(value: any): Date | null {\n    if (typeof value === 'string') {\n      if (!value) {\n        return null;\n      }\n      // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the\n      // string is the right format first.\n      if (ISO_8601_REGEX.test(value)) {\n        const date = new Date(value);\n        if (this.isValid(date)) {\n          return date;\n        }\n      }\n    }\n    return super.deserialize(value);\n  }\n\n  isDateInstance(obj: any): boolean {\n    return obj instanceof Date;\n  }\n\n  isValid(date: Date): boolean {\n    return !isNaN(date.valueOf());\n  }\n\n  invalid(): Date {\n    return new Date(NaN);\n  }\n\n  protected _splitStringDate(value: string): [number, number, number] | null {\n    const match = /^(\\w+\\.?,[ ]?)?(\\d+)\\.(\\d+)\\.(\\d+)$/.exec(value);\n    if (!match) {\n      return null;\n    }\n    return [+match[4], +match[3] - 1, +match[2]];\n  }\n\n  protected _parseStringDate(value: string) {\n    const parts = this._splitStringDate(value);\n    if (!parts) {\n      return null;\n    }\n\n    const date = this._createDateWithOverflow(...parts);\n    return this._normalizeYear(date);\n  }\n\n  protected _normalizeYear(date: Date) {\n    if (date.getFullYear() < 0 || date.getFullYear() >= 100) {\n      return date;\n    }\n\n    const yearOffset = date.getFullYear() <= this._yearPivot ? 2000 : 1900;\n    return new Date(date.getFullYear() + yearOffset, date.getMonth(), date.getDate());\n  }\n\n  /** Creates a date but allows the month and date to overflow. */\n  protected _createDateWithOverflow(year: number, month: number, date: number) {\n    const result = new Date(year, month, date);\n\n    // We need to correct for the fact that JS native Date treats years in range [0, 99] as\n    // abbreviations for 19xx.\n    if (year >= 0 && year < 100) {\n      result.setFullYear(this.getYear(result) - 1900);\n    }\n    return result;\n  }\n\n  /** Checks whether a given date string contains an overflowing date. */\n  private _isOverflowingDate(value: string): boolean {\n    const parts = this._splitStringDate(value);\n    const date = this._parseStringDate(value);\n    if (!parts || !date) {\n      return false;\n    }\n    const [year, month, day] = parts;\n    return date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day;\n  }\n}\n","import { Inject, Injectable, LOCALE_ID, Optional } from '@angular/core';\n\nimport {\n  SBB_DATEPICKER_2DIGIT_YEAR_PIVOT,\n  SBB_DATEPICKER_PREVENT_OVERFLOW,\n} from './datepicker-token';\nimport { SbbNativeDateAdapter } from './native-date-adapter';\n\n@Injectable()\nexport class SbbLeanDateAdapter extends SbbNativeDateAdapter {\n  constructor(\n    @Inject(LOCALE_ID) protected override _locale: string,\n    @Optional() @Inject(SBB_DATEPICKER_2DIGIT_YEAR_PIVOT) yearPivot: number,\n    @Optional() @Inject(SBB_DATEPICKER_PREVENT_OVERFLOW) preventOverflow?: boolean,\n  ) {\n    super(_locale, yearPivot, preventOverflow);\n  }\n\n  protected override _parseStringDate(value: string): null | Date {\n    return super._parseStringDate(value) || this._parseStringDateLean(value);\n  }\n\n  protected override _splitStringDate(value: string): [number, number, number] | null {\n    return super._splitStringDate(value) || this._splitStringDateLean(value);\n  }\n\n  private _parseStringDateLean(value: string): null | Date {\n    const split = this._splitStringDateLean(value);\n    if (!split) {\n      return null;\n    }\n    return this._normalizeYear(this._createDateWithOverflow(...split));\n  }\n\n  private _splitStringDateLean(value: string): [number, number, number] | null {\n    const match = /^(\\w+,[ ]?)?(\\d{2})(\\d{2})(\\d{2}|\\d{4})$/.exec(value);\n    if (!match) {\n      return null;\n    }\n    return [+match[4], +match[3] - 1, +match[2]];\n  }\n}\n","import { Provider } from '@angular/core';\n\nimport { SbbDateAdapter } from './date-adapter';\nimport { SBB_DATE_FORMATS } from './date-formats';\nimport { SBB_DATE_PIPE_DATE_FORMATS } from './date-pipe-date-formats';\nimport { SbbLeanDateAdapter } from './lean-date-adapter';\n\nexport const SBB_LEAN_DATE_ADAPTER: Provider = {\n  provide: SbbDateAdapter,\n  useClass: SbbLeanDateAdapter,\n};\n\nexport function provideLeanDateAdapter(): Provider[] {\n  return [\n    SBB_LEAN_DATE_ADAPTER,\n    { provide: SBB_DATE_FORMATS, useValue: SBB_DATE_PIPE_DATE_FORMATS },\n  ];\n}\n","import { Provider } from '@angular/core';\n\nimport { SbbDateAdapter } from './date-adapter';\nimport { SBB_DATE_FORMATS } from './date-formats';\nimport { SBB_DATE_PIPE_DATE_FORMATS } from './date-pipe-date-formats';\nimport { SbbNativeDateAdapter } from './native-date-adapter';\nexport function provideNativeDateAdapter(): Provider[] {\n  return [\n    { provide: SbbDateAdapter, useClass: SbbNativeDateAdapter },\n    { provide: SBB_DATE_FORMATS, useValue: SBB_DATE_PIPE_DATE_FORMATS },\n  ];\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractControl, FormGroupDirective, NgForm } from '@angular/forms';\n\n/** Provider that defines how form controls behave with regards to displaying error messages. */\n@Injectable({ providedIn: 'root' })\nexport class SbbErrorStateMatcher {\n  isErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.touched || (form && form.submitted)));\n  }\n}\n\n/** Error state matcher that matches when a control is invalid and dirty. */\n@Injectable()\nexport class SbbShowOnDirtyErrorStateMatcher implements SbbErrorStateMatcher {\n  isErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.dirty || (form && form.submitted)));\n  }\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Describes a parent component that manages a list of options.\n * Contains properties that the options can inherit.\n * @docs-private\n */\nexport interface SbbOptionParentComponent {\n  multiple?: boolean;\n  inertGroups?: boolean;\n}\n\n/**\n * Injection token used to provide the parent component to options.\n */\nexport const SBB_OPTION_PARENT_COMPONENT = new InjectionToken<SbbOptionParentComponent>(\n  'SBB_OPTION_PARENT_COMPONENT',\n);\n","import { _IdGenerator } from '@angular/cdk/a11y';\nimport {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  inject,\n  Inject,\n  InjectionToken,\n  Input,\n  Optional,\n  ViewEncapsulation,\n} from '@angular/core';\n\nimport { SbbOptionParentComponent, SBB_OPTION_PARENT_COMPONENT } from './option-parent';\n\n// Notes on the accessibility pattern used for `sbb-optgroup`.\n// The option group has two different \"modes\": regular and inert. The regular mode uses the\n// recommended a11y pattern which has `role=\"group\"` on the group element with `aria-labelledby`\n// pointing to the label. This works for `sbb-select`, but it seems to hit a bug for autocomplete\n// under VoiceOver where the group doesn't get read out at all. The bug appears to be that if\n// there's __any__ a11y-related attribute on the group (e.g. `role` or `aria-labelledby`),\n// VoiceOver on Safari won't read it out.\n// We've introduced the `inert` mode as a workaround. Under this mode, all a11y attributes are\n// removed from the group, and we get the screen reader to read out the group label by mirroring it\n// inside an invisible element in the option. This is sub-optimal, because the screen reader will\n// repeat the group label on each navigation, whereas the default pattern only reads the group when\n// the user enters a new group. The following alternate approaches were considered:\n// 1. Reading out the group label using the `LiveAnnouncer` solves the problem, but we can't control\n//    when the text will be read out so sometimes it comes in too late or never if the user\n//    navigates quickly.\n// 2. `<sbb-option aria-describedby=\"groupLabel\"` - This works on Safari, but VoiceOver in Chrome\n//    won't read out the description at all.\n// 3. `<sbb-option aria-labelledby=\"optionLabel groupLabel\"` - This works on Chrome, but Safari\n//     doesn't read out the text at all. Furthermore, on\n\n/**\n * Injection token that can be used to reference instances of `SbbOptgroup`. It serves as\n * alternative token to the actual `SbbOptgroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nexport const SBB_OPTGROUP = new InjectionToken<SbbOptgroup>('SbbOptgroup');\n\n@Component({\n  selector: 'sbb-optgroup',\n  exportAs: 'sbbOptgroup',\n  templateUrl: './optgroup.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  inputs: ['disabled'],\n  host: {\n    class: 'sbb-optgroup sbb-menu-group',\n    '[attr.role]': '_inert ? null : \"group\"',\n    '[attr.aria-disabled]': '_inert ? null : disabled.toString()',\n    '[attr.aria-labelledby]': '_inert ? null : _labelId',\n    '[class.sbb-disabled]': 'disabled',\n  },\n  providers: [{ provide: SBB_OPTGROUP, useExisting: SbbOptgroup }],\n})\nexport class SbbOptgroup {\n  /** Label for the option group. */\n  @Input() label!: string;\n\n  /** Whether the group is disabled. */\n  @Input({ transform: booleanAttribute }) disabled: boolean = false;\n\n  /** Unique id for the underlying label. */\n  _labelId: string = inject(_IdGenerator).getId('sbb-optgroup-label-');\n\n  /** Whether the group is in inert a11y mode. */\n  _inert: boolean;\n\n  constructor(@Inject(SBB_OPTION_PARENT_COMPONENT) @Optional() parent?: SbbOptionParentComponent) {\n    this._inert = parent?.inertGroups ?? false;\n  }\n}\n","<label class=\"sbb-label sbb-optgroup-label\" [id]=\"_labelId\"\n  >{{ label }} <ng-content></ng-content\n></label>\n<ng-content select=\"sbb-option, ng-container, sbb-option-hint, sbb-autocomplete-hint\"></ng-content>\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'sbb-pseudo-checkbox',\n  templateUrl: './pseudo-checkbox.html',\n  host: {\n    class: 'sbb-pseudo-checkbox',\n    '[class.sbb-selection-disabled]': 'this.disabled',\n    '[class.sbb-selection-checked]': 'this.state === \"checked\"',\n    '[class.sbb-selection-indeterminate]': 'this.state === \"indeterminate\"',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SbbPseudoCheckbox {\n  /** Display state of the checkbox. */\n  @Input() state: 'unchecked' | 'checked' | 'indeterminate' = 'unchecked';\n\n  /** Whether the checkbox is disabled. */\n  @Input() disabled: boolean = false;\n}\n","<div class=\"sbb-selection-container\">\n  <span class=\"sbb-selection-container-checked\">\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"24\"\n      height=\"24\"\n      viewBox=\"0 0 24 24\"\n      focusable=\"false\"\n    >\n      <polyline\n        fill=\"none\"\n        fill-rule=\"evenodd\"\n        stroke=\"#000\"\n        stroke-width=\"1\"\n        points=\"6 12 10 16 19 7.01\"\n      />\n    </svg>\n  </span>\n</div>\n","import { FocusableOption, FocusOrigin, Highlightable, _IdGenerator } from '@angular/cdk/a11y';\nimport { ENTER, hasModifierKey, SPACE } from '@angular/cdk/keycodes';\nimport { DOCUMENT } from '@angular/common';\nimport {\n  AfterViewChecked,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  inject,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n  Output,\n  QueryList,\n  signal,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { TypeRef } from '../common-behaviors/type-ref';\n\nimport { SbbOptgroup, SBB_OPTGROUP } from './optgroup';\nimport { SbbOptionParentComponent, SBB_OPTION_PARENT_COMPONENT } from './option-parent';\nimport { SbbPseudoCheckbox } from './pseudo-checkbox';\n\n/** Event object emitted by SbbOption when selected or deselected. */\nexport class SbbOptionSelectionChange<T = any> {\n  constructor(\n    /** Reference to the option that emitted the event. */\n    public source: SbbOption<T>,\n    /** Whether the change in the option's value was a result of a user action. */\n    public isUserInput = false,\n  ) {}\n}\n\n@Component({\n  selector: 'sbb-option',\n  exportAs: 'sbbOption',\n  styleUrls: ['option.css'],\n  templateUrl: 'option.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SbbPseudoCheckbox],\n  host: {\n    class: 'sbb-option sbb-menu-item sbb-link-reset',\n    role: 'option',\n    '[attr.tabindex]': '_getTabIndex()',\n    '[class.sbb-selected]': 'selected',\n    '[class.sbb-option-multiple]': 'multiple',\n    '[class.sbb-focused]': 'active',\n    '[id]': 'id',\n    '[attr.aria-selected]': 'selected',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '[class.sbb-disabled]': 'disabled',\n  },\n})\nexport class SbbOption<T = any>\n  implements AfterViewChecked, OnDestroy, FocusableOption, Highlightable\n{\n  private _selected = false;\n  private _active = false;\n  private _mostRecentViewValue = '';\n  private _originalInnerHtml?: string;\n  private _highlightValue?: string;\n  private _highlighted = false;\n\n  /** Whether the wrapping component is in multiple selection mode. */\n  get multiple() {\n    return this._parent && this._parent.multiple;\n  }\n\n  /** Whether or not the option is currently selected. */\n  get selected(): boolean {\n    return this._selected;\n  }\n\n  /** The form value of the option. */\n  @Input() value!: T;\n\n  /** The unique ID of the option. */\n  @Input() id: string = inject(_IdGenerator).getId('sbb-option-');\n\n  /** Whether the option is disabled. */\n  @Input({ transform: booleanAttribute })\n  get disabled(): boolean {\n    return (this.group && this.group.disabled) || this._disabled();\n  }\n  set disabled(value: boolean) {\n    this._disabled.set(value);\n  }\n  private _disabled = signal(false);\n\n  /** Event emitted when the option is selected or deselected. */\n  // tslint:disable-next-line:no-output-on-prefix\n  @Output() readonly onSelectionChange = new EventEmitter<SbbOptionSelectionChange<T>>();\n\n  /** Emits when the state of the option changes and any parents have to be notified. */\n  readonly _stateChanges = new Subject<void>();\n\n  constructor(\n    private _element: ElementRef<HTMLElement>,\n    @Inject(DOCUMENT) private _document: any,\n    private _changeDetectorRef: ChangeDetectorRef,\n    @Optional()\n    @Inject(SBB_OPTION_PARENT_COMPONENT)\n    private _parent: SbbOptionParentComponent,\n    @Optional() @Inject(SBB_OPTGROUP) readonly group: SbbOptgroup,\n  ) {}\n\n  /**\n   * Whether or not the option is currently active and ready to be selected.\n   * An active option displays styles as if it is focused, but the\n   * focus is actually retained somewhere else. This comes in handy\n   * for components like autocomplete where focus must remain on the input.\n   */\n  get active(): boolean {\n    return this._active;\n  }\n\n  /**\n   * The displayed value of the option. It is necessary to show the selected option in the\n   * select's trigger.\n   */\n  get viewValue(): string {\n    // TODO(kara): Add input property alternative for node envs.\n    return (this._getHostElement().textContent || '').trim();\n  }\n\n  /** Selects the option. */\n  select(): void {\n    if (!this.selected) {\n      this._selected = true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent();\n    }\n  }\n\n  /** Deselects the option. */\n  deselect(emitEvent = true): void {\n    if (this._selected) {\n      this._selected = false;\n      this._changeDetectorRef.markForCheck();\n\n      if (emitEvent) {\n        this._emitSelectionChangeEvent();\n      }\n    }\n  }\n\n  /** Sets focus onto this option. */\n  focus(_origin?: FocusOrigin, options?: FocusOptions): void {\n    // Note that we aren't using `_origin`, but we need to keep it because some internal consumers\n    // use `SbbOption` in a `FocusKeyManager` and we need it to match `FocusableOption`.\n    const element = this._getHostElement();\n\n    if (typeof element.focus === 'function') {\n      element.focus(options);\n    }\n  }\n\n  /**\n   * This method sets display styles on the option to make it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setActiveStyles(): void {\n    if (!this.active) {\n      this._active = true;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /**\n   * This method removes display styles on the option that made it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setInactiveStyles(): void {\n    if (this.active) {\n      this._active = false;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /** Gets the label to be used when determining whether the option should be focused. */\n  getLabel(): string {\n    return this.viewValue;\n  }\n\n  /** Ensures the option is selected when activated from the keyboard. */\n  @HostListener('keydown', ['$event'])\n  _handleKeydown(event: TypeRef<KeyboardEvent>): void {\n    if ((event.keyCode === ENTER || event.keyCode === SPACE) && !hasModifierKey(event)) {\n      this._selectViaInteraction();\n\n      // Prevent the page from scrolling down and form submits.\n      event.preventDefault();\n    }\n  }\n\n  /**\n   * `Selects the option while indicating the selection came from the user. Used to\n   * determine if the select's view -> model callback should be invoked.`\n   */\n  @HostListener('click')\n  _selectViaInteraction(): void {\n    if (!this.disabled) {\n      this._selected = this.multiple ? !this.selected : true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent(true);\n    }\n  }\n\n  /** Returns the correct tabindex for the option depending on disabled state. */\n  _getTabIndex(): string {\n    return this.disabled ? '-1' : '0';\n  }\n\n  /** Gets the host DOM element. */\n  _getHostElement(): HTMLElement {\n    return this._element.nativeElement;\n  }\n\n  ngAfterViewChecked() {\n    // Since parent components could be using the option's label to display the selected values\n    // (e.g. `sbb-select`) and they don't have a way of knowing if the option's label has changed\n    // we have to check for changes in the DOM ourselves and dispatch an event. These checks are\n    // relatively cheap, however we still limit them only to selected options in order to avoid\n    // hitting the DOM too often.\n    if (this._selected) {\n      const viewValue = this.viewValue;\n\n      if (viewValue !== this._mostRecentViewValue) {\n        if (this._mostRecentViewValue) {\n          this._stateChanges.next();\n        }\n\n        this._mostRecentViewValue = viewValue;\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.complete();\n  }\n\n  /**\n   * Highlights a text part of the option by wrapping it with a strong element.\n   * @docs-private\n   */\n  _highlight(value: string, localeNormalizer?: ((value: string) => string) | null) {\n    if (this._originalInnerHtml === undefined) {\n      this._originalInnerHtml = this._element.nativeElement.innerHTML;\n    } else if (value === this._highlightValue) {\n      return;\n    } else if (this._highlighted) {\n      this._element.nativeElement.innerHTML = this._originalInnerHtml;\n      this._highlighted = false;\n    }\n\n    this._highlightValue = value;\n    if (value && this._originalInnerHtml) {\n      const normalizer = localeNormalizer || ((v) => v);\n      value = normalizer(value);\n      // Escape all regex characters\n      const escapedValue = value.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n      const matcher = new RegExp(`${escapedValue}+`, 'i');\n      const nodes = this._findAllTextNodesWithMatch(matcher, normalizer);\n      nodes.forEach((n) => this._highlightNode(n, matcher, normalizer));\n      this._highlighted = !!nodes.length;\n    }\n  }\n\n  private _findAllTextNodesWithMatch(\n    matcher: RegExp,\n    localeNormalizer: (value: string) => string,\n    node: Node = this._element.nativeElement,\n  ): ChildNode[] {\n    const nodes: ChildNode[] = [];\n    const childNodes = node.childNodes;\n    for (let i = 0; i < childNodes.length; i++) {\n      const childNode = childNodes[i];\n      // Text nodes are nodeType 3\n      if (childNode.nodeType === 3 && matcher.test(localeNormalizer(childNode.textContent || ''))) {\n        nodes.push(childNode);\n      } else if (childNode.childNodes.length) {\n        nodes.push(...this._findAllTextNodesWithMatch(matcher, localeNormalizer, childNode));\n      }\n    }\n\n    return nodes;\n  }\n\n  /**\n   * Replace the content with a (partial) match, with text nodes and span elements\n   * which contain the highlightable content.\n   * @param node The node with (partial) content to highlight.\n   * @param matcher The content to highlight.\n   * @param localeNormalizer function to normalize locale chars\n   */\n  private _highlightNode(\n    node: ChildNode,\n    matcher: RegExp,\n    localeNormalizer: (value: string) => string,\n  ) {\n    const nodes: Node[] = [];\n    const doc: Document = this._document;\n    matcher.lastIndex = 0;\n    let text = node.textContent || '';\n    let match: RegExpMatchArray | null;\n    do {\n      match = localeNormalizer(text).match(matcher);\n      if (!match) {\n        nodes.push(doc.createTextNode(text));\n        continue;\n      } else if (match.index) {\n        nodes.push(doc.createTextNode(text.substring(0, match.index)));\n        text = text.substring(match.index);\n      }\n\n      const strong = doc.createElement('strong');\n      strong.textContent = text.substring(0, match[0].length);\n      nodes.push(strong);\n      text = text.substring(match[0].length);\n    } while (match);\n\n    const parent = node.parentNode!;\n    nodes.forEach((n) => parent.insertBefore(n, node));\n    parent.removeChild(node);\n  }\n\n  /** Emits the selection change event. */\n  private _emitSelectionChangeEvent(isUserInput = false): void {\n    this.onSelectionChange.emit(new SbbOptionSelectionChange<T>(this, isUserInput));\n  }\n}\n\n/**\n * Counts the amount of option group labels that precede the specified option.\n * @param optionIndex Index of the option at which to start counting.\n * @param options Flat list of all of the options.\n * @param optionGroups Flat list of all of the option groups.\n * @docs-private\n */\nexport function countGroupLabelsBeforeOption(\n  optionIndex: number,\n  options: QueryList<SbbOption>,\n  optionGroups: QueryList<SbbOptgroup>,\n): number {\n  if (optionGroups.length) {\n    const optionsArray = options.toArray();\n    const groups = optionGroups.toArray();\n    let groupCounter = 0;\n\n    for (let i = 0; i < optionIndex + 1; i++) {\n      if (optionsArray[i].group && optionsArray[i].group === groups[groupCounter]) {\n        groupCounter++;\n      }\n    }\n\n    return groupCounter;\n  }\n\n  return 0;\n}\n\n/**\n * Determines the position to which to scroll a panel in order for an option to be into view.\n * @param optionOffset Offset of the option from the top of the panel.\n * @param optionHeight Height of the options.\n * @param currentScrollPosition Current scroll position of the panel.\n * @param panelHeight Height of the panel.\n * @docs-private\n */\nexport function getOptionScrollPosition(\n  optionOffset: number,\n  optionHeight: number,\n  currentScrollPosition: number,\n  panelHeight: number,\n): number {\n  if (optionOffset < currentScrollPosition) {\n    return optionOffset;\n  }\n\n  if (optionOffset + optionHeight > currentScrollPosition + panelHeight) {\n    return Math.max(0, optionOffset - panelHeight + optionHeight);\n  }\n\n  return currentScrollPosition;\n}\n","@if (multiple) {\n  <sbb-pseudo-checkbox\n    [disabled]=\"disabled\"\n    [state]=\"selected ? 'checked' : 'unchecked'\"\n  ></sbb-pseudo-checkbox>\n}\n<ng-content></ng-content>\n\n<!-- See a11y notes inside optgroup.ts for context behind this element. -->\n@if (group && group._inert) {\n  <span class=\"cdk-visually-hidden\">({{ group.label }})</span>\n}\n","import { _IdGenerator } from '@angular/cdk/a11y';\nimport { Directive, inject } from '@angular/core';\n\n@Directive({\n  selector: 'sbb-option-hint',\n  host: {\n    class: 'sbb-option-hint sbb-label',\n    '[attr.id]': 'id',\n  },\n})\nexport class SbbOptionHint {\n  /** Unique ID to be used by autocomplete trigger's \"aria-controls\" property. */\n  id: string = inject(_IdGenerator).getId('sbb-option-hint-');\n}\n","import { NgModule } from '@angular/core';\n\nimport { SbbCommonModule } from '../common-behaviors/common.module';\n\nimport { SbbOptgroup } from './optgroup';\nimport { SbbOption } from './option';\nimport { SbbOptionHint } from './option-hint';\nimport { SbbPseudoCheckbox } from './pseudo-checkbox';\n\n@NgModule({\n  imports: [SbbCommonModule, SbbOption, SbbOptionHint, SbbOptgroup, SbbPseudoCheckbox],\n  exports: [SbbOption, SbbOptionHint, SbbOptgroup, SbbPseudoCheckbox],\n})\nexport class SbbOptionModule {}\n"],"names":["CDK_VERSION"],"mappings":"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"}