{"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('21.0.3');\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":["Breakpoints","Mobile","Tablet","Desktop","DesktopLarge","Desktop2k","Desktop4k","Desktop5k","MobileDevice","TabletDevice","DesktopDevice","MobileDevicePortrait","TabletDevicePortrait","DesktopDevicePortrait","MobileDeviceLandscape","TabletDeviceLandscape","DesktopDeviceLandscape","SCALING_FACTOR_4K","SCALING_FACTOR_5K","VERSION","Version","__globalThis","globalThis","__window","window","__self","self","WorkerGlobalScope","__global","global","_global","_$localize","messageParts","expressions","translate","translation","message","stripBlock","raw","i","length","BLOCK_MARKER","messagePart","rawMessagePart","charAt","substring","findEndOfBlock","cooked","cookedIndex","rawIndex","Error","ɵvariant","BehaviorSubject","mixinVariant","base","variant","constructor","args","variantSnapshot","value","SBB_SANITY_CHECKS_FACTORY","SBB_SANITY_CHECKS","InjectionToken","providedIn","factory","SbbCommonModule","_sanityChecks","_document","_hasDoneGlobalChecks","highContrastModeDetector","_isDarkMode","subscribe","isDark","document","documentElement","classList","toggle","next","contains","_applyBodyHighContrastModeCssClasses","patch$localize","ngDevMode","_checkIsEnabled","_checkDoctypeIsDefined","_checkTypographyIsPresent","_checkCdkVersionMatch","name","_isTestEnvironment","query","matchMedia","fromEvent","pipe","startWith","map","event","matches","deps","token","i1","HighContrastModeDetector","optional","DOCUMENT","target","i0","ɵɵFactoryTarget","NgModule","decorators","Optional","Inject","doc","doctype","console","warn","body","getComputedStyle","missingScalingFactorVariable","getPropertyValue","major","CDK_VERSION","full","$localize","Object","assign","_ErrorStateTracker","_defaultMatcher","ngControl","_parentFormGroup","_parentForm","_stateChanges","errorState","matcher","updateErrorState","oldState","parent","control","newState","isErrorState","SbbDateAdapter","_locale","deserialize","isDateInstance","isValid","invalid","setLocale","locale","compareDate","first","second","getYear","getMonth","getDate","sameDate","firstValid","secondValid","clampDate","date","min","max","SBB_DATE_FORMATS","SBB_DATE_PIPE_DATE_FORMATS","dateInput","dateInputPure","dateA11yLabel","SBB_DATEPICKER_2DIGIT_YEAR_PIVOT","SBB_DATEPICKER_PREVENT_OVERFLOW","ISO_8601_REGEX","range","valueFunction","valuesArray","Array","SbbNativeDateAdapter","_datePipe","_yearPivot","_titleCasePipe","TitleCasePipe","_preventOverflow","yearPivot","preventOverflow","DatePipe","Date","getFullYear","getDayOfWeek","getDay","getMonthName","transform","getMonthNames","style","format","getDateNames","getDayOfWeekNames","getYearName","getFirstDayOfWeek","getNumDaysInMonth","lastDayOfMonth","setFullYear","setHours","clone","valueOf","createDate","year","month","result","_createDateWithOverflow","today","parse","_isOverflowingDate","NaN","_parseStringDate","displayFormat","addCalendarYears","years","addCalendarMonths","months","targetMonth","dateWithCorrectMonth","daysInMonth","newDate","setMonth","Math","addCalendarDays","days","setDate","toIso8601","test","obj","isNaN","_splitStringDate","match","exec","parts","_normalizeYear","yearOffset","day","ɵfac","ɵɵngDeclareFactory","minVersion","version","ngImport","type","LOCALE_ID","Injectable","SbbLeanDateAdapter","_parseStringDateLean","_splitStringDateLean","split","SBB_LEAN_DATE_ADAPTER","provide","useClass","provideLeanDateAdapter","useValue","provideNativeDateAdapter","SbbErrorStateMatcher","form","touched","submitted","ɵprov","ɵɵngDeclareInjectable","SbbShowOnDirtyErrorStateMatcher","dirty","SBB_OPTION_PARENT_COMPONENT","SBB_OPTGROUP","SbbOptgroup","label","disabled","_labelId","inject","_IdGenerator","getId","_inert","inertGroups","Component","ɵcmp","ɵɵngDeclareComponent","isStandalone","selector","inputs","booleanAttribute","host","properties","classAttribute","providers","useExisting","changeDetection","ChangeDetectionStrategy","OnPush","encapsulation","ViewEncapsulation","None","exportAs","class","template","Input","SbbPseudoCheckbox","state","SbbOptionSelectionChange","source","isUserInput","SbbOption","_element","_changeDetectorRef","_parent","group","_selected","_active","_mostRecentViewValue","_originalInnerHtml","_highlightValue","_highlighted","multiple","selected","id","_disabled","set","signal","onSelectionChange","EventEmitter","Subject","active","viewValue","_getHostElement","textContent","trim","select","markForCheck","_emitSelectionChangeEvent","deselect","emitEvent","focus","_origin","options","element","setActiveStyles","setInactiveStyles","getLabel","_handleKeydown","keyCode","ENTER","SPACE","hasModifierKey","_selectViaInteraction","preventDefault","_getTabIndex","nativeElement","ngAfterViewChecked","ngOnDestroy","complete","_highlight","localeNormalizer","undefined","innerHTML","normalizer","v","escapedValue","replace","RegExp","nodes","_findAllTextNodesWithMatch","forEach","n","_highlightNode","node","childNodes","childNode","nodeType","push","lastIndex","text","createTextNode","index","strong","createElement","parentNode","insertBefore","removeChild","emit","ElementRef","ChangeDetectorRef","outputs","attributes","listeners","imports","role","styles","Output","HostListener","countGroupLabelsBeforeOption","optionIndex","optionGroups","optionsArray","toArray","groups","groupCounter","getOptionScrollPosition","optionOffset","optionHeight","currentScrollPosition","panelHeight","SbbOptionHint","Directive","SbbOptionModule","ɵmod","ɵɵngDeclareNgModule","ɵinj","ɵɵngDeclareInjector","exports"],"mappings":"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"}