PageSourceSearch

https://wyber.ai/chunk-7TYMEGCE.js

js wyber.ai collected 2026-10-05 13:22:42 UTC 241,082 bytes, 4,153 lines download raw bytes

1import {
2  SharedResizeObserver
3} from "./chunk-GS7BESLK.js";
4import {
5  CdkConnectedOverlay,
6  CdkOverlayOrigin,
7  Overlay,
8  OverlayModule
9} from "./chunk-UUW25WJR.js";
10import {
11  CdkScrollableModule,
12  ViewportRuler
13} from "./chunk-UD5AJOAM.js";
14import {
15  MatPseudoCheckbox,
16  SelectionModel
17} from "./chunk-PMEVESUG.js";
18import {
19  A,
20  ActiveDescendantKeyManager,
21  DOWN_ARROW,
22  ENTER,
23  ESCAPE,
24  LEFT_ARROW,
25  LiveAnnouncer,
26  MatCommonModule,
27  MatRipple,
28  MatRippleModule,
29  ObserversModule,
30  RIGHT_ARROW,
31  SPACE,
32  UP_ARROW,
33  _CdkPrivateStyleLoader,
34  _IdGenerator,
35  _StructuralStylesLoader,
36  _VisuallyHiddenLoader,
37  addAriaReferencedId,
38  coerceBooleanProperty,
39  hasModifierKey,
40  removeAriaReferencedId
41} from "./chunk-XVJVOIUG.js";
42import {
43  Directionality,
44  Platform
45} from "./chunk-X25WEEDB.js";
46import {
47  FormGroupDirective,
48  NgControl,
49  NgForm,
50  Validators
51} from "./chunk-4BWSLYHL.js";
52import {
53  ANIMATION_MODULE_TYPE,
54  ChangeDetectionStrategy,
55  ChangeDetectorRef,
56  Component,
57  ContentChild,
58  ContentChildren,
59  Directive,
60  ElementRef,
61  EventEmitter,
62  HostAttributeToken,
63  Injectable,
64  InjectionToken,
65  Injector,
66  Input,
67  LOCALE_ID,
68  NgClass,
69  NgModule,
70  NgTemplateOutlet,
71  NgZone,
72  Output,
73  Renderer2,
74  Subject,
75  Subscription,
76  Version,
77  ViewChild,
78  ViewEncapsulation,
79  afterRender,
80  booleanAttribute,
81  computed,
82  contentChild,
83  defer,
84  filter,
85  inject,
86  isSignal,
87  map,
88  merge,
89  numberAttribute,
90  pairwise,
91  setClassMetadata,
92  startWith,
93  switchMap,
94  take,
95  takeUntil,
96  ɵɵNgOnChangesFeature,
97  ɵɵProvidersFeature,
98  ɵɵadvance,
99  ɵɵattribute,
100  ɵɵclassMapInterpolate1,
101  ɵɵclassProp,
102  ɵɵconditional,
103  ɵɵcontentQuery,
104  ɵɵcontentQuerySignal,
105  ɵɵdeclareLet,
106  ɵɵdefineComponent,
107  ɵɵdefineDirective,
108  ɵɵdefineInjectable,
109  ɵɵdefineInjector,
110  ɵɵdefineNgModule,
111  ɵɵelement,
112  ɵɵelementEnd,
113  ɵɵelementStart,
114  ɵɵgetCurrentView,
115  ɵɵhostProperty,
116  ɵɵlistener,
117  ɵɵloadQuery,
118  ɵɵnamespaceSVG,
119  ɵɵnextContext,
120  ɵɵprojection,
121  ɵɵprojectionDef,
122  ɵɵproperty,
123  ɵɵqueryAdvance,
124  ɵɵqueryRefresh,
125  ɵɵreference,
126  ɵɵresetView,
127  ɵɵrestoreView,
128  ɵɵtemplate,
129  ɵɵtemplateRefExtractor,
130  ɵɵtext,
131  ɵɵtextInterpolate,
132  ɵɵtextInterpolate1,
133  ɵɵviewQuery
134} from "./chunk-6GJQIPT2.js";
135import {
136  __spreadProps,
137  __spreadValues
138} from "./chunk-RK4NW2NR.js";
139
vendor: 27,433 bytes, lines 140-637
140// node_modules/@angular/material/fesm2022/option-ChV6uQgD.mjs
141var _c0 = ["*", [["mat-option"], ["ng-container"]]];
142var _c1 = ["*", "mat-option, ng-container"];
143var _c2 = ["text"];
144var _c3 = [[["mat-icon"]], "*"];
145var _c4 = ["mat-icon", "*"];
146function MatOption_Conditional_0_Template(rf, ctx) {
147  if (rf & 1) {
148    \u0275\u0275element(0, "mat-pseudo-checkbox", 1);
149  }
150  if (rf & 2) {
151    const ctx_r0 = \u0275\u0275nextContext();
152    \u0275\u0275property("disabled", ctx_r0.disabled)("state", ctx_r0.selected ? "checked" : "unchecked");
153  }
154}
155function MatOption_Conditional_5_Template(rf, ctx) {
156  if (rf & 1) {
157    \u0275\u0275element(0, "mat-pseudo-checkbox", 3);
158  }
159  if (rf & 2) {
160    const ctx_r0 = \u0275\u0275nextContext();
161    \u0275\u0275property("disabled", ctx_r0.disabled);
162  }
163}
164function MatOption_Conditional_6_Template(rf, ctx) {
165  if (rf & 1) {
166    \u0275\u0275elementStart(0, "span", 4);
167    \u0275\u0275text(1);
168    \u0275\u0275elementEnd();
169  }
170  if (rf & 2) {
171    const ctx_r0 = \u0275\u0275nextContext();
172    \u0275\u0275advance();
173    \u0275\u0275textInterpolate1("(", ctx_r0.group.label, ")");
174  }
175}
176var MAT_OPTION_PARENT_COMPONENT = new InjectionToken("MAT_OPTION_PARENT_COMPONENT");
177var MAT_OPTGROUP = new InjectionToken("MatOptgroup");
178var MatOptgroup = class _MatOptgroup {
179  /** Label for the option group. */
180  label;
181  /** whether the option group is disabled. */
182  disabled = false;
183  /** Unique id for the underlying label. */
184  _labelId = inject(_IdGenerator).getId("mat-optgroup-label-");
185  /** Whether the group is in inert a11y mode. */
186  _inert;
187  constructor() {
188    const parent = inject(MAT_OPTION_PARENT_COMPONENT, {
189      optional: true
190    });
191    this._inert = parent?.inertGroups ?? false;
192  }
193  static \u0275fac = function MatOptgroup_Factory(__ngFactoryType__) {
194    return new (__ngFactoryType__ || _MatOptgroup)();
195  };
196  static \u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({
197    type: _MatOptgroup,
198    selectors: [["mat-optgroup"]],
199    hostAttrs: [1, "mat-mdc-optgroup"],
200    hostVars: 3,
201    hostBindings: function MatOptgroup_HostBindings(rf, ctx) {
202      if (rf & 2) {
203        \u0275\u0275attribute("role", ctx._inert ? null : "group")("aria-disabled", ctx._inert ? null : ctx.disabled.toString())("aria-labelledby", ctx._inert ? null : ctx._labelId);
204      }
205    },
206    inputs: {
207      label: "label",
208      disabled: [2, "disabled", "disabled", booleanAttribute]
209    },
210    exportAs: ["matOptgroup"],
211    features: [\u0275\u0275ProvidersFeature([{
212      provide: MAT_OPTGROUP,
213      useExisting: _MatOptgroup
214    }])],
215    ngContentSelectors: _c1,
216    decls: 5,
217    vars: 4,
218    consts: [["role", "presentation", 1, "mat-mdc-optgroup-label", 3, "id"], [1, "mdc-list-item__primary-text"]],
219    template: function MatOptgroup_Template(rf, ctx) {
220      if (rf & 1) {
221        \u0275\u0275projectionDef(_c0);
222        \u0275\u0275elementStart(0, "span", 0)(1, "span", 1);
223        \u0275\u0275text(2);
224        \u0275\u0275projection(3);
225        \u0275\u0275elementEnd()();
226        \u0275\u0275projection(4, 1);
227      }
228      if (rf & 2) {
229        \u0275\u0275classProp("mdc-list-item--disabled", ctx.disabled);
230        \u0275\u0275property("id", ctx._labelId);
231        \u0275\u0275advance(2);
232        \u0275\u0275textInterpolate1("", ctx.label, " ");
233      }
234    },
235    styles: [".mat-mdc-optgroup{color:var(--mat-optgroup-label-text-color, var(--mat-sys-on-surface-variant));font-family:var(--mat-optgroup-label-text-font, var(--mat-sys-title-small-font));line-height:var(--mat-optgroup-label-text-line-height, var(--mat-sys-title-small-line-height));font-size:var(--mat-optgroup-label-text-size, var(--mat-sys-title-small-size));letter-spacing:var(--mat-optgroup-label-text-tracking, var(--mat-sys-title-small-tracking));font-weight:var(--mat-optgroup-label-text-weight, var(--mat-sys-title-small-weight))}.mat-mdc-optgroup-label{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;min-height:48px;padding:0 16px;outline:none}.mat-mdc-optgroup-label.mdc-list-item--disabled{opacity:.38}.mat-mdc-optgroup-label .mdc-list-item__primary-text{font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;font-family:inherit;text-decoration:inherit;text-transform:inherit;white-space:normal;color:inherit}\n"],
236    encapsulation: 2,
237    changeDetection: 0
238  });
239};
240(() => {
241  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatOptgroup, [{
242    type: Component,
243    args: [{
244      selector: "mat-optgroup",
245      exportAs: "matOptgroup",
246      encapsulation: ViewEncapsulation.None,
247      changeDetection: ChangeDetectionStrategy.OnPush,
248      host: {
249        "class": "mat-mdc-optgroup",
250        "[attr.role]": '_inert ? null : "group"',
251        "[attr.aria-disabled]": "_inert ? null : disabled.toString()",
252        "[attr.aria-labelledby]": "_inert ? null : _labelId"
253      },
254      providers: [{
255        provide: MAT_OPTGROUP,
256        useExisting: MatOptgroup
257      }],
258      template: '<span\n  class="mat-mdc-optgroup-label"\n  role="presentation"\n  [class.mdc-list-item--disabled]="disabled"\n  [id]="_labelId">\n  <span class="mdc-list-item__primary-text">{{ label }} <ng-content></ng-content></span>\n</span>\n\n<ng-content select="mat-option, ng-container"></ng-content>\n',
259      styles: [".mat-mdc-optgroup{color:var(--mat-optgroup-label-text-color, var(--mat-sys-on-surface-variant));font-family:var(--mat-optgroup-label-text-font, var(--mat-sys-title-small-font));line-height:var(--mat-optgroup-label-text-line-height, var(--mat-sys-title-small-line-height));font-size:var(--mat-optgroup-label-text-size, var(--mat-sys-title-small-size));letter-spacing:var(--mat-optgroup-label-text-tracking, var(--mat-sys-title-small-tracking));font-weight:var(--mat-optgroup-label-text-weight, var(--mat-sys-title-small-weight))}.mat-mdc-optgroup-label{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;min-height:48px;padding:0 16px;outline:none}.mat-mdc-optgroup-label.mdc-list-item--disabled{opacity:.38}.mat-mdc-optgroup-label .mdc-list-item__primary-text{font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;font-family:inherit;text-decoration:inherit;text-transform:inherit;white-space:normal;color:inherit}\n"]
260    }]
261  }], () => [], {
262    label: [{
263      type: Input
264    }],
265    disabled: [{
266      type: Input,
267      args: [{
268        transform: booleanAttribute
269      }]
270    }]
271  });
272})();
273var MatOptionSelectionChange = class {
274  source;
275  isUserInput;
276  constructor(source, isUserInput = false) {
277    this.source = source;
278    this.isUserInput = isUserInput;
279  }
280};
281var MatOption = class _MatOption {
282  _element = inject(ElementRef);
283  _changeDetectorRef = inject(ChangeDetectorRef);
284  _parent = inject(MAT_OPTION_PARENT_COMPONENT, {
285    optional: true
286  });
287  group = inject(MAT_OPTGROUP, {
288    optional: true
289  });
290  _signalDisableRipple = false;
291  _selected = false;
292  _active = false;
293  _disabled = false;
294  _mostRecentViewValue = "";
295  /** Whether the wrapping component is in multiple selection mode. */
296  get multiple() {
297    return this._parent && this._parent.multiple;
298  }
299  /** Whether or not the option is currently selected. */
300  get selected() {
301    return this._selected;
302  }
303  /** The form value of the option. */
304  value;
305  /** The unique ID of the option. */
306  id = inject(_IdGenerator).getId("mat-option-");
307  /** Whether the option is disabled. */
308  get disabled() {
309    return this.group && this.group.disabled || this._disabled;
310  }
311  set disabled(value) {
312    this._disabled = value;
313  }
314  /** Whether ripples for the option are disabled. */
315  get disableRipple() {
316    return this._signalDisableRipple ? this._parent.disableRipple() : !!this._parent?.disableRipple;
317  }
318  /** Whether to display checkmark for single-selection. */
319  get hideSingleSelectionIndicator() {
320    return !!(this._parent && this._parent.hideSingleSelectionIndicator);
321  }
322  /** Event emitted when the option is selected or deselected. */
323  // tslint:disable-next-line:no-output-on-prefix
324  onSelectionChange = new EventEmitter();
325  /** Element containing the option's text. */
326  _text;
327  /** Emits when the state of the option changes and any parents have to be notified. */
328  _stateChanges = new Subject();
329  constructor() {
330    const styleLoader = inject(_CdkPrivateStyleLoader);
331    styleLoader.load(_StructuralStylesLoader);
332    styleLoader.load(_VisuallyHiddenLoader);
333    this._signalDisableRipple = !!this._parent && isSignal(this._parent.disableRipple);
334  }
335  /**
336   * Whether or not the option is currently active and ready to be selected.
337   * An active option displays styles as if it is focused, but the
338   * focus is actually retained somewhere else. This comes in handy
339   * for components like autocomplete where focus must remain on the input.
340   */
341  get active() {
342    return this._active;
343  }
344  /**
345   * The displayed value of the option. It is necessary to show the selected option in the
346   * select's trigger.
347   */
348  get viewValue() {
349    return (this._text?.nativeElement.textContent || "").trim();
350  }
351  /** Selects the option. */
352  select(emitEvent = true) {
353    if (!this._selected) {
354      this._selected = true;
355      this._changeDetectorRef.markForCheck();
356      if (emitEvent) {
357        this._emitSelectionChangeEvent();
358      }
359    }
360  }
361  /** Deselects the option. */
362  deselect(emitEvent = true) {
363    if (this._selected) {
364      this._selected = false;
365      this._changeDetectorRef.markForCheck();
366      if (emitEvent) {
367        this._emitSelectionChangeEvent();
368      }
369    }
370  }
371  /** Sets focus onto this option. */
372  focus(_origin, options) {
373    const element = this._getHostElement();
374    if (typeof element.focus === "function") {
375      element.focus(options);
376    }
377  }
378  /**
379   * This method sets display styles on the option to make it appear
380   * active. This is used by the ActiveDescendantKeyManager so key
381   * events will display the proper options as active on arrow key events.
382   */
383  setActiveStyles() {
384    if (!this._active) {
385      this._active = true;
386      this._changeDetectorRef.markForCheck();
387    }
388  }
389  /**
390   * This method removes display styles on the option that made it appear
391   * active. This is used by the ActiveDescendantKeyManager so key
392   * events will display the proper options as active on arrow key events.
393   */
394  setInactiveStyles() {
395    if (this._active) {
396      this._active = false;
397      this._changeDetectorRef.markForCheck();
398    }
399  }
400  /** Gets the label to be used when determining whether the option should be focused. */
401  getLabel() {
402    return this.viewValue;
403  }
404  /** Ensures the option is selected when activated from the keyboard. */
405  _handleKeydown(event) {
406    if ((event.keyCode === ENTER || event.keyCode === SPACE) && !hasModifierKey(event)) {
407      this._selectViaInteraction();
408      event.preventDefault();
409    }
410  }
411  /**
412   * `Selects the option while indicating the selection came from the user. Used to
413   * determine if the select's view -> model callback should be invoked.`
414   */
415  _selectViaInteraction() {
416    if (!this.disabled) {
417      this._selected = this.multiple ? !this._selected : true;
418      this._changeDetectorRef.markForCheck();
419      this._emitSelectionChangeEvent(true);
420    }
421  }
422  /** Returns the correct tabindex for the option depending on disabled state. */
423  // This method is only used by `MatLegacyOption`. Keeping it here to avoid breaking the types.
424  // That's because `MatLegacyOption` use `MatOption` type in a few places such as
425  // `MatOptionSelectionChange`. It is safe to delete this when `MatLegacyOption` is deleted.
426  _getTabIndex() {
427    return this.disabled ? "-1" : "0";
428  }
429  /** Gets the host DOM element. */
430  _getHostElement() {
431    return this._element.nativeElement;
432  }
433  ngAfterViewChecked() {
434    if (this._selected) {
435      const viewValue = this.viewValue;
436      if (viewValue !== this._mostRecentViewValue) {
437        if (this._mostRecentViewValue) {
438          this._stateChanges.next();
439        }
440        this._mostRecentViewValue = viewValue;
441      }
442    }
443  }
444  ngOnDestroy() {
445    this._stateChanges.complete();
446  }
447  /** Emits the selection change event. */
448  _emitSelectionChangeEvent(isUserInput = false) {
449    this.onSelectionChange.emit(new MatOptionSelectionChange(this, isUserInput));
450  }
451  static \u0275fac = function MatOption_Factory(__ngFactoryType__) {
452    return new (__ngFactoryType__ || _MatOption)();
453  };
454  static \u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({
455    type: _MatOption,
456    selectors: [["mat-option"]],
457    viewQuery: function MatOption_Query(rf, ctx) {
458      if (rf & 1) {
459        \u0275\u0275viewQuery(_c2, 7);
460      }
461      if (rf & 2) {
462        let _t;
463        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._text = _t.first);
464      }
465    },
466    hostAttrs: ["role", "option", 1, "mat-mdc-option", "mdc-list-item"],
467    hostVars: 11,
468    hostBindings: function MatOption_HostBindings(rf, ctx) {
469      if (rf & 1) {
470        \u0275\u0275listener("click", function MatOption_click_HostBindingHandler() {
471          return ctx._selectViaInteraction();
472        })("keydown", function MatOption_keydown_HostBindingHandler($event) {
473          return ctx._handleKeydown($event);
474        });
475      }
476      if (rf & 2) {
477        \u0275\u0275hostProperty("id", ctx.id);
478        \u0275\u0275attribute("aria-selected", ctx.selected)("aria-disabled", ctx.disabled.toString());
479        \u0275\u0275classProp("mdc-list-item--selected", ctx.selected)("mat-mdc-option-multiple", ctx.multiple)("mat-mdc-option-active", ctx.active)("mdc-list-item--disabled", ctx.disabled);
480      }
481    },
482    inputs: {
483      value: "value",
484      id: "id",
485      disabled: [2, "disabled", "disabled", booleanAttribute]
486    },
487    outputs: {
488      onSelectionChange: "onSelectionChange"
489    },
490    exportAs: ["matOption"],
491    ngContentSelectors: _c4,
492    decls: 8,
493    vars: 5,
494    consts: [["text", ""], ["aria-hidden", "true", 1, "mat-mdc-option-pseudo-checkbox", 3, "disabled", "state"], [1, "mdc-list-item__primary-text"], ["state", "checked", "aria-hidden", "true", "appearance", "minimal", 1, "mat-mdc-option-pseudo-checkbox", 3, "disabled"], [1, "cdk-visually-hidden"], ["aria-hidden", "true", "mat-ripple", "", 1, "mat-mdc-option-ripple", "mat-focus-indicator", 3, "matRippleTrigger", "matRippleDisabled"]],
495    template: function MatOption_Template(rf, ctx) {
496      if (rf & 1) {
497        \u0275\u0275projectionDef(_c3);
498        \u0275\u0275template(0, MatOption_Conditional_0_Template, 1, 2, "mat-pseudo-checkbox", 1);
499        \u0275\u0275projection(1);
500        \u0275\u0275elementStart(2, "span", 2, 0);
501        \u0275\u0275projection(4, 1);
502        \u0275\u0275elementEnd();
503        \u0275\u0275template(5, MatOption_Conditional_5_Template, 1, 1, "mat-pseudo-checkbox", 3)(6, MatOption_Conditional_6_Template, 2, 1, "span", 4);
504        \u0275\u0275element(7, "div", 5);
505      }
506      if (rf & 2) {
507        \u0275\u0275conditional(ctx.multiple ? 0 : -1);
508        \u0275\u0275advance(5);
509        \u0275\u0275conditional(!ctx.multiple && ctx.selected && !ctx.hideSingleSelectionIndicator ? 5 : -1);
510        \u0275\u0275advance();
511        \u0275\u0275conditional(ctx.group && ctx.group._inert ? 6 : -1);
512        \u0275\u0275advance();
513        \u0275\u0275property("matRippleTrigger", ctx._getHostElement())("matRippleDisabled", ctx.disabled || ctx.disableRipple);
514      }
515    },
516    dependencies: [MatPseudoCheckbox, MatRipple],
517    styles: ['.mat-mdc-option{-webkit-user-select:none;user-select:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;min-height:48px;padding:0 16px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);color:var(--mat-option-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-option-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-option-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-option-label-text-size, var(--mat-sys-body-large-size));letter-spacing:var(--mat-option-label-text-tracking, var(--mat-sys-label-large-tracking));font-weight:var(--mat-option-label-text-weight, var(--mat-sys-body-large-weight))}.mat-mdc-option:hover:not(.mdc-list-item--disabled){background-color:var(--mat-option-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}.mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:var(--mat-option-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent));outline:0}.mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled):not(.mat-mdc-option-multiple){background-color:var(--mat-option-selected-state-layer-color, var(--mat-sys-secondary-container))}.mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled):not(.mat-mdc-option-multiple) .mdc-list-item__primary-text{color:var(--mat-option-selected-state-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-option .mat-pseudo-checkbox{--mat-minimal-pseudo-checkbox-selected-checkmark-color: var(--mat-option-selected-state-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-option.mdc-list-item{align-items:center;background:rgba(0,0,0,0)}.mat-mdc-option.mdc-list-item--disabled{cursor:default;pointer-events:none}.mat-mdc-option.mdc-list-item--disabled .mat-mdc-option-pseudo-checkbox,.mat-mdc-option.mdc-list-item--disabled .mdc-list-item__primary-text,.mat-mdc-option.mdc-list-item--disabled>mat-icon{opacity:.38}.mat-mdc-optgroup .mat-mdc-option:not(.mat-mdc-option-multiple){padding-left:32px}[dir=rtl] .mat-mdc-optgroup .mat-mdc-option:not(.mat-mdc-option-multiple){padding-left:16px;padding-right:32px}.mat-mdc-option .mat-icon,.mat-mdc-option .mat-pseudo-checkbox-full{margin-right:16px;flex-shrink:0}[dir=rtl] .mat-mdc-option .mat-icon,[dir=rtl] .mat-mdc-option .mat-pseudo-checkbox-full{margin-right:0;margin-left:16px}.mat-mdc-option .mat-pseudo-checkbox-minimal{margin-left:16px;flex-shrink:0}[dir=rtl] .mat-mdc-option .mat-pseudo-checkbox-minimal{margin-right:16px;margin-left:0}.mat-mdc-option .mat-mdc-option-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-option .mdc-list-item__primary-text{white-space:normal;font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;font-family:inherit;text-decoration:inherit;text-transform:inherit;margin-right:auto}[dir=rtl] .mat-mdc-option .mdc-list-item__primary-text{margin-right:0;margin-left:auto}@media(forced-colors: active){.mat-mdc-option.mdc-list-item--selected:not(:has(.mat-mdc-option-pseudo-checkbox))::after{content:"";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}[dir=rtl] .mat-mdc-option.mdc-list-item--selected:not(:has(.mat-mdc-option-pseudo-checkbox))::after{right:auto;left:16px}}.mat-mdc-option-multiple{--mdc-list-list-item-selected-container-color:var(--mdc-list-list-item-container-color, transparent)}.mat-mdc-option-active .mat-focus-indicator::before{content:""}\n'],
518    encapsulation: 2,
519    changeDetection: 0
520  });
521};
522(() => {
523  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatOption, [{
524    type: Component,
525    args: [{
526      selector: "mat-option",
527      exportAs: "matOption",
528      host: {
529        "role": "option",
530        "[class.mdc-list-item--selected]": "selected",
531        "[class.mat-mdc-option-multiple]": "multiple",
532        "[class.mat-mdc-option-active]": "active",
533        "[class.mdc-list-item--disabled]": "disabled",
534        "[id]": "id",
535        // Set aria-selected to false for non-selected items and true for selected items. Conform to
536        // [WAI ARIA Listbox authoring practices guide](
537        //  https://www.w3.org/WAI/ARIA/apg/patterns/listbox/), "If any options are selected, each
538        // selected option has either aria-selected or aria-checked  set to true. All options that are
539        // selectable but not selected have either aria-selected or aria-checked set to false." Align
540        // aria-selected implementation of Chips and List components.
541        //
542        // Set `aria-selected="false"` on not-selected listbox options to fix VoiceOver announcing
543        // every option as "selected" (#21491).
544        "[attr.aria-selected]": "selected",
545        "[attr.aria-disabled]": "disabled.toString()",
546        "(click)": "_selectViaInteraction()",
547        "(keydown)": "_handleKeydown($event)",
548        "class": "mat-mdc-option mdc-list-item"
549      },
550      encapsulation: ViewEncapsulation.None,
551      changeDetection: ChangeDetectionStrategy.OnPush,
552      imports: [MatPseudoCheckbox, MatRipple],
553      template: `<!-- Set aria-hidden="true" to this DOM node and other decorative nodes in this file. This might
554 be contributing to issue where sometimes VoiceOver focuses on a TextNode in the a11y tree instead
555 of the Option node (#23202). Most assistive technology will generally ignore non-role,
556 non-text-content elements. Adding aria-hidden seems to make VoiceOver behave more consistently. -->
557@if (multiple) {
558    <mat-pseudo-checkbox
559        class="mat-mdc-option-pseudo-checkbox"
560        [disabled]="disabled"
561        [state]="selected ? 'checked' : 'unchecked'"
562        aria-hidden="true"></mat-pseudo-checkbox>
563}
564
565<ng-content select="mat-icon"></ng-content>
566
567<span class="mdc-list-item__primary-text" #text><ng-content></ng-content></span>
568
569<!-- Render checkmark at the end for single-selection. -->
570@if (!multiple && selected && !hideSingleSelectionIndicator) {
571    <mat-pseudo-checkbox
572        class="mat-mdc-option-pseudo-checkbox"
573        [disabled]="disabled"
574        state="checked"
575        aria-hidden="true"
576        appearance="minimal"></mat-pseudo-checkbox>
577}
578
579<!-- See a11y notes inside optgroup.ts for context behind this element. -->
580@if (group && group._inert) {
581    <span class="cdk-visually-hidden">({{ group.label }})</span>
582}
583
584<div class="mat-mdc-option-ripple mat-focus-indicator" aria-hidden="true" mat-ripple
585     [matRippleTrigger]="_getHostElement()" [matRippleDisabled]="disabled || disableRipple">
586</div>
587`,
588      styles: ['.mat-mdc-option{-webkit-user-select:none;user-select:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;min-height:48px;padding:0 16px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);color:var(--mat-option-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-option-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-option-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-option-label-text-size, var(--mat-sys-body-large-size));letter-spacing:var(--mat-option-label-text-tracking, var(--mat-sys-label-large-tracking));font-weight:var(--mat-option-label-text-weight, var(--mat-sys-body-large-weight))}.mat-mdc-option:hover:not(.mdc-list-item--disabled){background-color:var(--mat-option-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}.mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:var(--mat-option-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent));outline:0}.mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled):not(.mat-mdc-option-multiple){background-color:var(--mat-option-selected-state-layer-color, var(--mat-sys-secondary-container))}.mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled):not(.mat-mdc-option-multiple) .mdc-list-item__primary-text{color:var(--mat-option-selected-state-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-option .mat-pseudo-checkbox{--mat-minimal-pseudo-checkbox-selected-checkmark-color: var(--mat-option-selected-state-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-option.mdc-list-item{align-items:center;background:rgba(0,0,0,0)}.mat-mdc-option.mdc-list-item--disabled{cursor:default;pointer-events:none}.mat-mdc-option.mdc-list-item--disabled .mat-mdc-option-pseudo-checkbox,.mat-mdc-option.mdc-list-item--disabled .mdc-list-item__primary-text,.mat-mdc-option.mdc-list-item--disabled>mat-icon{opacity:.38}.mat-mdc-optgroup .mat-mdc-option:not(.mat-mdc-option-multiple){padding-left:32px}[dir=rtl] .mat-mdc-optgroup .mat-mdc-option:not(.mat-mdc-option-multiple){padding-left:16px;padding-right:32px}.mat-mdc-option .mat-icon,.mat-mdc-option .mat-pseudo-checkbox-full{margin-right:16px;flex-shrink:0}[dir=rtl] .mat-mdc-option .mat-icon,[dir=rtl] .mat-mdc-option .mat-pseudo-checkbox-full{margin-right:0;margin-left:16px}.mat-mdc-option .mat-pseudo-checkbox-minimal{margin-left:16px;flex-shrink:0}[dir=rtl] .mat-mdc-option .mat-pseudo-checkbox-minimal{margin-right:16px;margin-left:0}.mat-mdc-option .mat-mdc-option-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-option .mdc-list-item__primary-text{white-space:normal;font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;font-family:inherit;text-decoration:inherit;text-transform:inherit;margin-right:auto}[dir=rtl] .mat-mdc-option .mdc-list-item__primary-text{margin-right:0;margin-left:auto}@media(forced-colors: active){.mat-mdc-option.mdc-list-item--selected:not(:has(.mat-mdc-option-pseudo-checkbox))::after{content:"";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}[dir=rtl] .mat-mdc-option.mdc-list-item--selected:not(:has(.mat-mdc-option-pseudo-checkbox))::after{right:auto;left:16px}}.mat-mdc-option-multiple{--mdc-list-list-item-selected-container-color:var(--mdc-list-list-item-container-color, transparent)}.mat-mdc-option-active .mat-focus-indicator::before{content:""}\n']
589    }]
590  }], () => [], {
591    value: [{
592      type: Input
593    }],
594    id: [{
595      type: Input
596    }],
597    disabled: [{
598      type: Input,
599      args: [{
600        transform: booleanAttribute
601      }]
602    }],
603    onSelectionChange: [{
604      type: Output
605    }],
606    _text: [{
607      type: ViewChild,
608      args: ["text", {
609        static: true
610      }]
611    }]
612  });
613})();
614function _countGroupLabelsBeforeOption(optionIndex, options, optionGroups) {
615  if (optionGroups.length) {
616    let optionsArray = options.toArray();
617    let groups = optionGroups.toArray();
618    let groupCounter = 0;
619    for (let i = 0; i < optionIndex + 1; i++) {
620      if (optionsArray[i].group && optionsArray[i].group === groups[groupCounter]) {
621        groupCounter++;
622      }
623    }
624    return groupCounter;
625  }
626  return 0;
627}
628function _getOptionScrollPosition(optionOffset, optionHeight, currentScrollPosition, panelHeight) {
629  if (optionOffset < currentScrollPosition) {
630    return optionOffset;
631  }
632  if (optionOffset + optionHeight > currentScrollPosition + panelHeight) {
633    return Math.max(0, optionOffset - panelHeight + optionHeight);
634  }
635  return currentScrollPosition;
636}
637
vendor: 855 bytes, lines 638-661
638// node_modules/@angular/material/fesm2022/pseudo-checkbox-module-CAX2sutq.mjs
639var MatPseudoCheckboxModule = class _MatPseudoCheckboxModule {
640  static \u0275fac = function MatPseudoCheckboxModule_Factory(__ngFactoryType__) {
641    return new (__ngFactoryType__ || _MatPseudoCheckboxModule)();
642  };
643  static \u0275mod = /* @__PURE__ */ \u0275\u0275defineNgModule({
644    type: _MatPseudoCheckboxModule,
645    imports: [MatCommonModule, MatPseudoCheckbox],
646    exports: [MatPseudoCheckbox]
647  });
648  static \u0275inj = /* @__PURE__ */ \u0275\u0275defineInjector({
649    imports: [MatCommonModule]
650  });
651};
652(() => {
653  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatPseudoCheckboxModule, [{
654    type: NgModule,
655    args: [{
656      imports: [MatCommonModule, MatPseudoCheckbox],
657      exports: [MatPseudoCheckbox]
658    }]
659  }], null, null);
660})();
661
vendor: 936 bytes, lines 662-685
662// node_modules/@angular/material/fesm2022/index-DOxJc1m4.mjs
663var MatOptionModule = class _MatOptionModule {
664  static \u0275fac = function MatOptionModule_Factory(__ngFactoryType__) {
665    return new (__ngFactoryType__ || _MatOptionModule)();
666  };
667  static \u0275mod = /* @__PURE__ */ \u0275\u0275defineNgModule({
668    type: _MatOptionModule,
669    imports: [MatRippleModule, MatCommonModule, MatPseudoCheckboxModule, MatOption, MatOptgroup],
670    exports: [MatOption, MatOptgroup]
671  });
672  static \u0275inj = /* @__PURE__ */ \u0275\u0275defineInjector({
673    imports: [MatRippleModule, MatCommonModule, MatPseudoCheckboxModule]
674  });
675};
676(() => {
677  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatOptionModule, [{
678    type: NgModule,
679    args: [{
680      imports: [MatRippleModule, MatCommonModule, MatPseudoCheckboxModule, MatOption, MatOptgroup],
681      exports: [MatOption, MatOptgroup]
682    }]
683  }], null, null);
684})();
685
vendor: 1,131 bytes, lines 686-717
686// node_modules/@angular/material/fesm2022/error-state-Dtb1IHM-.mjs
687var _ErrorStateTracker = class {
688  _defaultMatcher;
689  ngControl;
690  _parentFormGroup;
691  _parentForm;
692  _stateChanges;
693  /** Whether the tracker is currently in an error state. */
694  errorState = false;
695  /** User-defined matcher for the error state. */
696  matcher;
697  constructor(_defaultMatcher, ngControl, _parentFormGroup, _parentForm, _stateChanges) {
698    this._defaultMatcher = _defaultMatcher;
699    this.ngControl = ngControl;
700    this._parentFormGroup = _parentFormGroup;
701    this._parentForm = _parentForm;
702    this._stateChanges = _stateChanges;
703  }
704  /** Updates the error state based on the provided error state matcher. */
705  updateErrorState() {
706    const oldState = this.errorState;
707    const parent = this._parentFormGroup || this._parentForm;
708    const matcher = this.matcher || this._defaultMatcher;
709    const control = this.ngControl ? this.ngControl.control : null;
710    const newState = matcher?.isErrorState(control, parent) ?? false;
711    if (newState !== oldState) {
712      this.errorState = newState;
713      this._stateChanges.next();
714    }
715  }
716};
717
vendor: 6,280 bytes, lines 718-891
718// node_modules/@angular/material/fesm2022/date-formats-K6TQue-Y.mjs
719var MAT_DATE_LOCALE = new InjectionToken("MAT_DATE_LOCALE", {
720  providedIn: "root",
721  factory: MAT_DATE_LOCALE_FACTORY
722});
723function MAT_DATE_LOCALE_FACTORY() {
724  return inject(LOCALE_ID);
725}
726var NOT_IMPLEMENTED = "Method not implemented";
727var DateAdapter = class {
728  /** The locale to use for all dates. */
729  locale;
730  _localeChanges = new Subject();
731  /** A stream that emits when the locale changes. */
732  localeChanges = this._localeChanges;
733  /**
734   * Sets the time of one date to the time of another.
735   * @param target Date whose time will be set.
736   * @param hours New hours to set on the date object.
737   * @param minutes New minutes to set on the date object.
738   * @param seconds New seconds to set on the date object.
739   */
740  setTime(target, hours, minutes, seconds) {
741    throw new Error(NOT_IMPLEMENTED);
742  }
743  /**
744   * Gets the hours component of the given date.
745   * @param date The date to extract the hours from.
746   */
747  getHours(date) {
748    throw new Error(NOT_IMPLEMENTED);
749  }
750  /**
751   * Gets the minutes component of the given date.
752   * @param date The date to extract the minutes from.
753   */
754  getMinutes(date) {
755    throw new Error(NOT_IMPLEMENTED);
756  }
757  /**
758   * Gets the seconds component of the given date.
759   * @param date The date to extract the seconds from.
760   */
761  getSeconds(date) {
762    throw new Error(NOT_IMPLEMENTED);
763  }
764  /**
765   * Parses a date with a specific time from a user-provided value.
766   * @param value The value to parse.
767   * @param parseFormat The expected format of the value being parsed
768   *     (type is implementation-dependent).
769   */
770  parseTime(value, parseFormat) {
771    throw new Error(NOT_IMPLEMENTED);
772  }
773  /**
774   * Adds an amount of seconds to the specified date.
775   * @param date Date to which to add the seconds.
776   * @param amount Amount of seconds to add to the date.
777   */
778  addSeconds(date, amount) {
779    throw new Error(NOT_IMPLEMENTED);
780  }
781  /**
782   * Given a potential date object, returns that same date object if it is
783   * a valid date, or `null` if it's not a valid date.
784   * @param obj The object to check.
785   * @returns A date or `null`.
786   */
787  getValidDateOrNull(obj) {
788    return this.isDateInstance(obj) && this.isValid(obj) ? obj : null;
789  }
790  /**
791   * Attempts to deserialize a value to a valid date object. This is different from parsing in that
792   * deserialize should only accept non-ambiguous, locale-independent formats (e.g. a ISO 8601
793   * string). The default implementation does not allow any deserialization, it simply checks that
794   * the given value is already a valid date object or null. The `<mat-datepicker>` will call this
795   * method on all of its `@Input()` properties that accept dates. It is therefore possible to
796   * support passing values from your backend directly to these properties by overriding this method
797   * to also deserialize the format used by your backend.
798   * @param value The value to be deserialized into a date object.
799   * @returns The deserialized date object, either a valid date, null if the value can be
800   *     deserialized into a null date (e.g. the empty string), or an invalid date.
801   */
802  deserialize(value) {
803    if (value == null || this.isDateInstance(value) && this.isValid(value)) {
804      return value;
805    }
806    return this.invalid();
807  }
808  /**
809   * Sets the locale used for all dates.
810   * @param locale The new locale.
811   */
812  setLocale(locale) {
813    this.locale = locale;
814    this._localeChanges.next();
815  }
816  /**
817   * Compares two dates.
818   * @param first The first date to compare.
819   * @param second The second date to compare.
820   * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,
821   *     a number greater than 0 if the first date is later.
822   */
823  compareDate(first, second) {
824    return this.getYear(first) - this.getYear(second) || this.getMonth(first) - this.getMonth(second) || this.getDate(first) - this.getDate(second);
825  }
826  /**
827   * Compares the time values of two dates.
828   * @param first First date to compare.
829   * @param second Second date to compare.
830   * @returns 0 if the times are equal, a number less than 0 if the first time is earlier,
831   *     a number greater than 0 if the first time is later.
832   */
833  compareTime(first, second) {
834    return this.getHours(first) - this.getHours(second) || this.getMinutes(first) - this.getMinutes(second) || this.getSeconds(first) - this.getSeconds(second);
835  }
836  /**
837   * Checks if two dates are equal.
838   * @param first The first date to check.
839   * @param second The second date to check.
840   * @returns Whether the two dates are equal.
841   *     Null dates are considered equal to other null dates.
842   */
843  sameDate(first, second) {
844    if (first && second) {
845      let firstValid = this.isValid(first);
846      let secondValid = this.isValid(second);
847      if (firstValid && secondValid) {
848        return !this.compareDate(first, second);
849      }
850      return firstValid == secondValid;
851    }
852    return first == second;
853  }
854  /**
855   * Checks if the times of two dates are equal.
856   * @param first The first date to check.
857   * @param second The second date to check.
858   * @returns Whether the times of the two dates are equal.
859   *     Null dates are considered equal to other null dates.
860   */
861  sameTime(first, second) {
862    if (first && second) {
863      const firstValid = this.isValid(first);
864      const secondValid = this.isValid(second);
865      if (firstValid && secondValid) {
866        return !this.compareTime(first, second);
867      }
868      return firstValid == secondValid;
869    }
870    return first == second;
871  }
872  /**
873   * Clamp the given date between min and max dates.
874   * @param date The date to clamp.
875   * @param min The minimum value to allow. If null or omitted no min is enforced.
876   * @param max The maximum value to allow. If null or omitted no max is enforced.
877   * @returns `min` if `date` is less than `min`, `max` if date is greater than `max`,
878   *     otherwise `date`.
879   */
880  clampDate(date, min, max) {
881    if (min && this.compareDate(date, min) < 0) {
882      return min;
883    }
884    if (max && this.compareDate(date, max) > 0) {
885      return max;
886    }
887    return date;
888  }
889};
890var MAT_DATE_FORMATS = new InjectionToken("mat-date-formats");
891
vendor: 1,450 bytes, lines 892-931
892// node_modules/@angular/material/fesm2022/error-options-Dm2JJUbF.mjs
893var ShowOnDirtyErrorStateMatcher = class _ShowOnDirtyErrorStateMatcher {
894  isErrorState(control, form) {
895    return !!(control && control.invalid && (control.dirty || form && form.submitted));
896  }
897  static \u0275fac = function ShowOnDirtyErrorStateMatcher_Factory(__ngFactoryType__) {
898    return new (__ngFactoryType__ || _ShowOnDirtyErrorStateMatcher)();
899  };
900  static \u0275prov = /* @__PURE__ */ \u0275\u0275defineInjectable({
901    token: _ShowOnDirtyErrorStateMatcher,
902    factory: _ShowOnDirtyErrorStateMatcher.\u0275fac
903  });
904};
905(() => {
906  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ShowOnDirtyErrorStateMatcher, [{
907    type: Injectable
908  }], null, null);
909})();
910var ErrorStateMatcher = class _ErrorStateMatcher {
911  isErrorState(control, form) {
912    return !!(control && control.invalid && (control.touched || form && form.submitted));
913  }
914  static \u0275fac = function ErrorStateMatcher_Factory(__ngFactoryType__) {
915    return new (__ngFactoryType__ || _ErrorStateMatcher)();
916  };
917  static \u0275prov = /* @__PURE__ */ \u0275\u0275defineInjectable({
918    token: _ErrorStateMatcher,
919    factory: _ErrorStateMatcher.\u0275fac,
920    providedIn: "root"
921  });
922};
923(() => {
924  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ErrorStateMatcher, [{
925    type: Injectable,
926    args: [{
927      providedIn: "root"
928    }]
929  }], null, null);
930})();
931
vendor: 11,386 bytes, lines 932-1296
932// node_modules/@angular/material/fesm2022/core.mjs
933var VERSION = new Version("19.2.19");
934var ISO_8601_REGEX = /^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|(?:(?:\+|-)\d{2}:\d{2}))?)?$/;
935var TIME_REGEX = /^(\d?\d)[:.](\d?\d)(?:[:.](\d?\d))?\s*(AM|PM)?$/i;
936function range(length, valueFunction) {
937  const valuesArray = Array(length);
938  for (let i = 0; i < length; i++) {
939    valuesArray[i] = valueFunction(i);
940  }
941  return valuesArray;
942}
943var NativeDateAdapter = class _NativeDateAdapter extends DateAdapter {
944  /**
945   * @deprecated No longer being used. To be removed.
946   * @breaking-change 14.0.0
947   */
948  useUtcForDisplay = false;
949  /** The injected locale. */
950  _matDateLocale = inject(MAT_DATE_LOCALE, {
951    optional: true
952  });
953  constructor() {
954    super();
955    const matDateLocale = inject(MAT_DATE_LOCALE, {
956      optional: true
957    });
958    if (matDateLocale !== void 0) {
959      this._matDateLocale = matDateLocale;
960    }
961    super.setLocale(this._matDateLocale);
962  }
963  getYear(date) {
964    return date.getFullYear();
965  }
966  getMonth(date) {
967    return date.getMonth();
968  }
969  getDate(date) {
970    return date.getDate();
971  }
972  getDayOfWeek(date) {
973    return date.getDay();
974  }
975  getMonthNames(style) {
976    const dtf = new Intl.DateTimeFormat(this.locale, {
977      month: style,
978      timeZone: "utc"
979    });
980    return range(12, (i) => this._format(dtf, new Date(2017, i, 1)));
981  }
982  getDateNames() {
983    const dtf = new Intl.DateTimeFormat(this.locale, {
984      day: "numeric",
985      timeZone: "utc"
986    });
987    return range(31, (i) => this._format(dtf, new Date(2017, 0, i + 1)));
988  }
989  getDayOfWeekNames(style) {
990    const dtf = new Intl.DateTimeFormat(this.locale, {
991      weekday: style,
992      timeZone: "utc"
993    });
994    return range(7, (i) => this._format(dtf, new Date(2017, 0, i + 1)));
995  }
996  getYearName(date) {
997    const dtf = new Intl.DateTimeFormat(this.locale, {
998      year: "numeric",
999      timeZone: "utc"
1000    });
1001    return this._format(dtf, date);
1002  }
1003  getFirstDayOfWeek() {
1004    if (typeof Intl !== "undefined" && Intl.Locale) {
1005      const locale = new Intl.Locale(this.locale);
1006      const firstDay = (locale.getWeekInfo?.() || locale.weekInfo)?.firstDay ?? 0;
1007      return firstDay === 7 ? 0 : firstDay;
1008    }
1009    return 0;
1010  }
1011  getNumDaysInMonth(date) {
1012    return this.getDate(this._createDateWithOverflow(this.getYear(date), this.getMonth(date) + 1, 0));
1013  }
1014  clone(date) {
1015    return new Date(date.getTime());
1016  }
1017  createDate(year, month, date) {
1018    if (typeof ngDevMode === "undefined" || ngDevMode) {
1019      if (month < 0 || month > 11) {
1020        throw Error(`Invalid month index "${month}". Month index has to be between 0 and 11.`);
1021      }
1022      if (date < 1) {
1023        throw Error(`Invalid date "${date}". Date has to be greater than 0.`);
1024      }
1025    }
1026    let result = this._createDateWithOverflow(year, month, date);
1027    if (result.getMonth() != month && (typeof ngDevMode === "undefined" || ngDevMode)) {
1028      throw Error(`Invalid date "${date}" for month with index "${month}".`);
1029    }
1030    return result;
1031  }
1032  today() {
1033    return /* @__PURE__ */ new Date();
1034  }
1035  parse(value, parseFormat) {
1036    if (typeof value == "number") {
1037      return new Date(value);
1038    }
1039    return value ? new Date(Date.parse(value)) : null;
1040  }
1041  format(date, displayFormat) {
1042    if (!this.isValid(date)) {
1043      throw Error("NativeDateAdapter: Cannot format invalid date.");
1044    }
1045    const dtf = new Intl.DateTimeFormat(this.locale, __spreadProps(__spreadValues({}, displayFormat), {
1046      timeZone: "utc"
1047    }));
1048    return this._format(dtf, date);
1049  }
1050  addCalendarYears(date, years) {
1051    return this.addCalendarMonths(date, years * 12);
1052  }
1053  addCalendarMonths(date, months) {
1054    let newDate = this._createDateWithOverflow(this.getYear(date), this.getMonth(date) + months, this.getDate(date));
1055    if (this.getMonth(newDate) != ((this.getMonth(date) + months) % 12 + 12) % 12) {
1056      newDate = this._createDateWithOverflow(this.getYear(newDate), this.getMonth(newDate), 0);
1057    }
1058    return newDate;
1059  }
1060  addCalendarDays(date, days) {
1061    return this._createDateWithOverflow(this.getYear(date), this.getMonth(date), this.getDate(date) + days);
1062  }
1063  toIso8601(date) {
1064    return [date.getUTCFullYear(), this._2digit(date.getUTCMonth() + 1), this._2digit(date.getUTCDate())].join("-");
1065  }
1066  /**
1067   * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings
1068   * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an
1069   * invalid date for all other values.
1070   */
1071  deserialize(value) {
1072    if (typeof value === "string") {
1073      if (!value) {
1074        return null;
1075      }
1076      if (ISO_8601_REGEX.test(value)) {
1077        let date = new Date(value);
1078        if (this.isValid(date)) {
1079          return date;
1080        }
1081      }
1082    }
1083    return super.deserialize(value);
1084  }
1085  isDateInstance(obj) {
1086    return obj instanceof Date;
1087  }
1088  isValid(date) {
1089    return !isNaN(date.getTime());
1090  }
1091  invalid() {
1092    return /* @__PURE__ */ new Date(NaN);
1093  }
1094  setTime(target, hours, minutes, seconds) {
1095    if (typeof ngDevMode === "undefined" || ngDevMode) {
1096      if (!inRange(hours, 0, 23)) {
1097        throw Error(`Invalid hours "${hours}". Hours value must be between 0 and 23.`);
1098      }
1099      if (!inRange(minutes, 0, 59)) {
1100        throw Error(`Invalid minutes "${minutes}". Minutes value must be between 0 and 59.`);
1101      }
1102      if (!inRange(seconds, 0, 59)) {
1103        throw Error(`Invalid seconds "${seconds}". Seconds value must be between 0 and 59.`);
1104      }
1105    }
1106    const clone = this.clone(target);
1107    clone.setHours(hours, minutes, seconds, 0);
1108    return clone;
1109  }
1110  getHours(date) {
1111    return date.getHours();
1112  }
1113  getMinutes(date) {
1114    return date.getMinutes();
1115  }
1116  getSeconds(date) {
1117    return date.getSeconds();
1118  }
1119  parseTime(userValue, parseFormat) {
1120    if (typeof userValue !== "string") {
1121      return userValue instanceof Date ? new Date(userValue.getTime()) : null;
1122    }
1123    const value = userValue.trim();
1124    if (value.length === 0) {
1125      return null;
1126    }
1127    let result = this._parseTimeString(value);
1128    if (result === null) {
1129      const withoutExtras = value.replace(/[^0-9:(AM|PM)]/gi, "").trim();
1130      if (withoutExtras.length > 0) {
1131        result = this._parseTimeString(withoutExtras);
1132      }
1133    }
1134    return result || this.invalid();
1135  }
1136  addSeconds(date, amount) {
1137    return new Date(date.getTime() + amount * 1e3);
1138  }
1139  /** Creates a date but allows the month and date to overflow. */
1140  _createDateWithOverflow(year, month, date) {
1141    const d = /* @__PURE__ */ new Date();
1142    d.setFullYear(year, month, date);
1143    d.setHours(0, 0, 0, 0);
1144    return d;
1145  }
1146  /**
1147   * Pads a number to make it two digits.
1148   * @param n The number to pad.
1149   * @returns The padded number.
1150   */
1151  _2digit(n) {
1152    return ("00" + n).slice(-2);
1153  }
1154  /**
1155   * When converting Date object to string, javascript built-in functions may return wrong
1156   * results because it applies its internal DST rules. The DST rules around the world change
1157   * very frequently, and the current valid rule is not always valid in previous years though.
1158   * We work around this problem building a new Date object which has its internal UTC
1159   * representation with the local date and time.
1160   * @param dtf Intl.DateTimeFormat object, containing the desired string format. It must have
1161   *    timeZone set to 'utc' to work fine.
1162   * @param date Date from which we want to get the string representation according to dtf
1163   * @returns A Date object with its UTC representation based on the passed in date info
1164   */
1165  _format(dtf, date) {
1166    const d = /* @__PURE__ */ new Date();
1167    d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());
1168    d.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
1169    return dtf.format(d);
1170  }
1171  /**
1172   * Attempts to parse a time string into a date object. Returns null if it cannot be parsed.
1173   * @param value Time string to parse.
1174   */
1175  _parseTimeString(value) {
1176    const parsed = value.toUpperCase().match(TIME_REGEX);
1177    if (parsed) {
1178      let hours = parseInt(parsed[1]);
1179      const minutes = parseInt(parsed[2]);
1180      let seconds = parsed[3] == null ? void 0 : parseInt(parsed[3]);
1181      const amPm = parsed[4];
1182      if (hours === 12) {
1183        hours = amPm === "AM" ? 0 : hours;
1184      } else if (amPm === "PM") {
1185        hours += 12;
1186      }
1187      if (inRange(hours, 0, 23) && inRange(minutes, 0, 59) && (seconds == null || inRange(seconds, 0, 59))) {
1188        return this.setTime(this.today(), hours, minutes, seconds || 0);
1189      }
1190    }
1191    return null;
1192  }
1193  static \u0275fac = function NativeDateAdapter_Factory(__ngFactoryType__) {
1194    return new (__ngFactoryType__ || _NativeDateAdapter)();
1195  };
1196  static \u0275prov = /* @__PURE__ */ \u0275\u0275defineInjectable({
1197    token: _NativeDateAdapter,
1198    factory: _NativeDateAdapter.\u0275fac
1199  });
1200};
1201(() => {
1202  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NativeDateAdapter, [{
1203    type: Injectable
1204  }], () => [], null);
1205})();
1206function inRange(value, min, max) {
1207  return !isNaN(value) && value >= min && value <= max;
1208}
1209var MAT_NATIVE_DATE_FORMATS = {
1210  parse: {
1211    dateInput: null,
1212    timeInput: null
1213  },
1214  display: {
1215    dateInput: {
1216      year: "numeric",
1217      month: "numeric",
1218      day: "numeric"
1219    },
1220    timeInput: {
1221      hour: "numeric",
1222      minute: "numeric"
1223    },
1224    monthYearLabel: {
1225      year: "numeric",
1226      month: "short"
1227    },
1228    dateA11yLabel: {
1229      year: "numeric",
1230      month: "long",
1231      day: "numeric"
1232    },
1233    monthYearA11yLabel: {
1234      year: "numeric",
1235      month: "long"
1236    },
1237    timeOptionLabel: {
1238      hour: "numeric",
1239      minute: "numeric"
1240    }
1241  }
1242};
1243var NativeDateModule = class _NativeDateModule {
1244  static \u0275fac = function NativeDateModule_Factory(__ngFactoryType__) {
1245    return new (__ngFactoryType__ || _NativeDateModule)();
1246  };
1247  static \u0275mod = /* @__PURE__ */ \u0275\u0275defineNgModule({
1248    type: _NativeDateModule
1249  });
1250  static \u0275inj = /* @__PURE__ */ \u0275\u0275defineInjector({
1251    providers: [{
1252      provide: DateAdapter,
1253      useClass: NativeDateAdapter
1254    }]
1255  });
1256};
1257(() => {
1258  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NativeDateModule, [{
1259    type: NgModule,
1260    args: [{
1261      providers: [{
1262        provide: DateAdapter,
1263        useClass: NativeDateAdapter
1264      }]
1265    }]
1266  }], null, null);
1267})();
1268var MatNativeDateModule = class _MatNativeDateModule {
1269  static \u0275fac = function MatNativeDateModule_Factory(__ngFactoryType__) {
1270    return new (__ngFactoryType__ || _MatNativeDateModule)();
1271  };
1272  static \u0275mod = /* @__PURE__ */ \u0275\u0275defineNgModule({
1273    type: _MatNativeDateModule
1274  });
1275  static \u0275inj = /* @__PURE__ */ \u0275\u0275defineInjector({
1276    providers: [provideNativeDateAdapter()]
1277  });
1278};
1279(() => {
1280  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatNativeDateModule, [{
1281    type: NgModule,
1282    args: [{
1283      providers: [provideNativeDateAdapter()]
1284    }]
1285  }], null, null);
1286})();
1287function provideNativeDateAdapter(formats = MAT_NATIVE_DATE_FORMATS) {
1288  return [{
1289    provide: DateAdapter,
1290    useClass: NativeDateAdapter
1291  }, {
1292    provide: MAT_DATE_FORMATS,
1293    useValue: formats
1294  }];
1295}
1296
vendor: 125,102 bytes, lines 1297-2661
1297// node_modules/@angular/material/fesm2022/form-field-DqPi4knt.mjs
1298var _c02 = ["notch"];
1299var _c12 = ["matFormFieldNotchedOutline", ""];
1300var _c22 = ["*"];
1301var _c32 = ["textField"];
1302var _c42 = ["iconPrefixContainer"];
1303var _c5 = ["textPrefixContainer"];
1304var _c6 = ["iconSuffixContainer"];
1305var _c7 = ["textSuffixContainer"];
1306var _c8 = ["*", [["mat-label"]], [["", "matPrefix", ""], ["", "matIconPrefix", ""]], [["", "matTextPrefix", ""]], [["", "matTextSuffix", ""]], [["", "matSuffix", ""], ["", "matIconSuffix", ""]], [["mat-error"], ["", "matError", ""]], [["mat-hint", 3, "align", "end"]], [["mat-hint", "align", "end"]]];
1307var _c9 = ["*", "mat-label", "[matPrefix], [matIconPrefix]", "[matTextPrefix]", "[matTextSuffix]", "[matSuffix], [matIconSuffix]", "mat-error, [matError]", "mat-hint:not([align='end'])", "mat-hint[align='end']"];
1308function MatFormField_ng_template_0_Conditional_0_Conditional_2_Template(rf, ctx) {
1309  if (rf & 1) {
1310    \u0275\u0275element(0, "span", 20);
1311  }
1312}
1313function MatFormField_ng_template_0_Conditional_0_Template(rf, ctx) {
1314  if (rf & 1) {
1315    \u0275\u0275elementStart(0, "label", 19);
1316    \u0275\u0275projection(1, 1);
1317    \u0275\u0275template(2, MatFormField_ng_template_0_Conditional_0_Conditional_2_Template, 1, 0, "span", 20);
1318    \u0275\u0275elementEnd();
1319  }
1320  if (rf & 2) {
1321    const ctx_r1 = \u0275\u0275nextContext(2);
1322    \u0275\u0275property("floating", ctx_r1._shouldLabelFloat())("monitorResize", ctx_r1._hasOutline())("id", ctx_r1._labelId);
1323    \u0275\u0275attribute("for", ctx_r1._control.disableAutomaticLabeling ? null : ctx_r1._control.id);
1324    \u0275\u0275advance(2);
1325    \u0275\u0275conditional(!ctx_r1.hideRequiredMarker && ctx_r1._control.required ? 2 : -1);
1326  }
1327}
1328function MatFormField_ng_template_0_Template(rf, ctx) {
1329  if (rf & 1) {
1330    \u0275\u0275template(0, MatFormField_ng_template_0_Conditional_0_Template, 3, 5, "label", 19);
1331  }
1332  if (rf & 2) {
1333    const ctx_r1 = \u0275\u0275nextContext();
1334    \u0275\u0275conditional(ctx_r1._hasFloatingLabel() ? 0 : -1);
1335  }
1336}
1337function MatFormField_Conditional_4_Template(rf, ctx) {
1338  if (rf & 1) {
1339    \u0275\u0275element(0, "div", 7);
1340  }
1341}
1342function MatFormField_Conditional_6_Conditional_1_ng_template_0_Template(rf, ctx) {
1343}
1344function MatFormField_Conditional_6_Conditional_1_Template(rf, ctx) {
1345  if (rf & 1) {
1346    \u0275\u0275template(0, MatFormField_Conditional_6_Conditional_1_ng_template_0_Template, 0, 0, "ng-template", 13);
1347  }
1348  if (rf & 2) {
1349    \u0275\u0275nextContext(2);
1350    const labelTemplate_r3 = \u0275\u0275reference(1);
1351    \u0275\u0275property("ngTemplateOutlet", labelTemplate_r3);
1352  }
1353}
1354function MatFormField_Conditional_6_Template(rf, ctx) {
1355  if (rf & 1) {
1356    \u0275\u0275elementStart(0, "div", 9);
1357    \u0275\u0275template(1, MatFormField_Conditional_6_Conditional_1_Template, 1, 1, null, 13);
1358    \u0275\u0275elementEnd();
1359  }
1360  if (rf & 2) {
1361    const ctx_r1 = \u0275\u0275nextContext();
1362    \u0275\u0275property("matFormFieldNotchedOutlineOpen", ctx_r1._shouldLabelFloat());
1363    \u0275\u0275advance();
1364    \u0275\u0275conditional(!ctx_r1._forceDisplayInfixLabel() ? 1 : -1);
1365  }
1366}
1367function MatFormField_Conditional_7_Template(rf, ctx) {
1368  if (rf & 1) {
1369    \u0275\u0275elementStart(0, "div", 10, 2);
1370    \u0275\u0275projection(2, 2);
1371    \u0275\u0275elementEnd();
1372  }
1373}
1374function MatFormField_Conditional_8_Template(rf, ctx) {
1375  if (rf & 1) {
1376    \u0275\u0275elementStart(0, "div", 11, 3);
1377    \u0275\u0275projection(2, 3);
1378    \u0275\u0275elementEnd();
1379  }
1380}
1381function MatFormField_Conditional_10_ng_template_0_Template(rf, ctx) {
1382}
1383function MatFormField_Conditional_10_Template(rf, ctx) {
1384  if (rf & 1) {
1385    \u0275\u0275template(0, MatFormField_Conditional_10_ng_template_0_Template, 0, 0, "ng-template", 13);
1386  }
1387  if (rf & 2) {
1388    \u0275\u0275nextContext();
1389    const labelTemplate_r3 = \u0275\u0275reference(1);
1390    \u0275\u0275property("ngTemplateOutlet", labelTemplate_r3);
1391  }
1392}
1393function MatFormField_Conditional_12_Template(rf, ctx) {
1394  if (rf & 1) {
1395    \u0275\u0275elementStart(0, "div", 14, 4);
1396    \u0275\u0275projection(2, 4);
1397    \u0275\u0275elementEnd();
1398  }
1399}
1400function MatFormField_Conditional_13_Template(rf, ctx) {
1401  if (rf & 1) {
1402    \u0275\u0275elementStart(0, "div", 15, 5);
1403    \u0275\u0275projection(2, 5);
1404    \u0275\u0275elementEnd();
1405  }
1406}
1407function MatFormField_Conditional_14_Template(rf, ctx) {
1408  if (rf & 1) {
1409    \u0275\u0275element(0, "div", 16);
1410  }
1411}
1412function MatFormField_Case_18_Template(rf, ctx) {
1413  if (rf & 1) {
1414    \u0275\u0275projection(0, 6);
1415  }
1416}
1417function MatFormField_Case_19_Conditional_0_Template(rf, ctx) {
1418  if (rf & 1) {
1419    \u0275\u0275elementStart(0, "mat-hint", 21);
1420    \u0275\u0275text(1);
1421    \u0275\u0275elementEnd();
1422  }
1423  if (rf & 2) {
1424    const ctx_r1 = \u0275\u0275nextContext(2);
1425    \u0275\u0275property("id", ctx_r1._hintLabelId);
1426    \u0275\u0275advance();
1427    \u0275\u0275textInterpolate(ctx_r1.hintLabel);
1428  }
1429}
1430function MatFormField_Case_19_Template(rf, ctx) {
1431  if (rf & 1) {
1432    \u0275\u0275template(0, MatFormField_Case_19_Conditional_0_Template, 2, 2, "mat-hint", 21);
1433    \u0275\u0275projection(1, 7);
1434    \u0275\u0275element(2, "div", 22);
1435    \u0275\u0275projection(3, 8);
1436  }
1437  if (rf & 2) {
1438    const ctx_r1 = \u0275\u0275nextContext();
1439    \u0275\u0275conditional(ctx_r1.hintLabel ? 0 : -1);
1440  }
1441}
1442var MatLabel = class _MatLabel {
1443  static \u0275fac = function MatLabel_Factory(__ngFactoryType__) {
1444    return new (__ngFactoryType__ || _MatLabel)();
1445  };
1446  static \u0275dir = /* @__PURE__ */ \u0275\u0275defineDirective({
1447    type: _MatLabel,
1448    selectors: [["mat-label"]]
1449  });
1450};
1451(() => {
1452  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatLabel, [{
1453    type: Directive,
1454    args: [{
1455      selector: "mat-label"
1456    }]
1457  }], null, null);
1458})();
1459var MAT_ERROR = new InjectionToken("MatError");
1460var MatError = class _MatError {
1461  id = inject(_IdGenerator).getId("mat-mdc-error-");
1462  constructor() {
1463  }
1464  static \u0275fac = function MatError_Factory(__ngFactoryType__) {
1465    return new (__ngFactoryType__ || _MatError)();
1466  };
1467  static \u0275dir = /* @__PURE__ */ \u0275\u0275defineDirective({
1468    type: _MatError,
1469    selectors: [["mat-error"], ["", "matError", ""]],
1470    hostAttrs: [1, "mat-mdc-form-field-error", "mat-mdc-form-field-bottom-align"],
1471    hostVars: 1,
1472    hostBindings: function MatError_HostBindings(rf, ctx) {
1473      if (rf & 2) {
1474        \u0275\u0275hostProperty("id", ctx.id);
1475      }
1476    },
1477    inputs: {
1478      id: "id"
1479    },
1480    features: [\u0275\u0275ProvidersFeature([{
1481      provide: MAT_ERROR,
1482      useExisting: _MatError
1483    }])]
1484  });
1485};
1486(() => {
1487  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatError, [{
1488    type: Directive,
1489    args: [{
1490      selector: "mat-error, [matError]",
1491      host: {
1492        "class": "mat-mdc-form-field-error mat-mdc-form-field-bottom-align",
1493        "[id]": "id"
1494      },
1495      providers: [{
1496        provide: MAT_ERROR,
1497        useExisting: MatError
1498      }]
1499    }]
1500  }], () => [], {
1501    id: [{
1502      type: Input
1503    }]
1504  });
1505})();
1506var MatHint = class _MatHint {
1507  /** Whether to align the hint label at the start or end of the line. */
1508  align = "start";
1509  /** Unique ID for the hint. Used for the aria-describedby on the form field control. */
1510  id = inject(_IdGenerator).getId("mat-mdc-hint-");
1511  static \u0275fac = function MatHint_Factory(__ngFactoryType__) {
1512    return new (__ngFactoryType__ || _MatHint)();
1513  };
1514  static \u0275dir = /* @__PURE__ */ \u0275\u0275defineDirective({
1515    type: _MatHint,
1516    selectors: [["mat-hint"]],
1517    hostAttrs: [1, "mat-mdc-form-field-hint", "mat-mdc-form-field-bottom-align"],
1518    hostVars: 4,
1519    hostBindings: function MatHint_HostBindings(rf, ctx) {
1520      if (rf & 2) {
1521        \u0275\u0275hostProperty("id", ctx.id);
1522        \u0275\u0275attribute("align", null);
1523        \u0275\u0275classProp("mat-mdc-form-field-hint-end", ctx.align === "end");
1524      }
1525    },
1526    inputs: {
1527      align: "align",
1528      id: "id"
1529    }
1530  });
1531};
1532(() => {
1533  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatHint, [{
1534    type: Directive,
1535    args: [{
1536      selector: "mat-hint",
1537      host: {
1538        "class": "mat-mdc-form-field-hint mat-mdc-form-field-bottom-align",
1539        "[class.mat-mdc-form-field-hint-end]": 'align === "end"',
1540        "[id]": "id",
1541        // Remove align attribute to prevent it from interfering with layout.
1542        "[attr.align]": "null"
1543      }
1544    }]
1545  }], null, {
1546    align: [{
1547      type: Input
1548    }],
1549    id: [{
1550      type: Input
1551    }]
1552  });
1553})();
1554var MAT_PREFIX = new InjectionToken("MatPrefix");
1555var MatPrefix = class _MatPrefix {
1556  set _isTextSelector(value) {
1557    this._isText = true;
1558  }
1559  _isText = false;
1560  static \u0275fac = function MatPrefix_Factory(__ngFactoryType__) {
1561    return new (__ngFactoryType__ || _MatPrefix)();
1562  };
1563  static \u0275dir = /* @__PURE__ */ \u0275\u0275defineDirective({
1564    type: _MatPrefix,
1565    selectors: [["", "matPrefix", ""], ["", "matIconPrefix", ""], ["", "matTextPrefix", ""]],
1566    inputs: {
1567      _isTextSelector: [0, "matTextPrefix", "_isTextSelector"]
1568    },
1569    features: [\u0275\u0275ProvidersFeature([{
1570      provide: MAT_PREFIX,
1571      useExisting: _MatPrefix
1572    }])]
1573  });
1574};
1575(() => {
1576  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatPrefix, [{
1577    type: Directive,
1578    args: [{
1579      selector: "[matPrefix], [matIconPrefix], [matTextPrefix]",
1580      providers: [{
1581        provide: MAT_PREFIX,
1582        useExisting: MatPrefix
1583      }]
1584    }]
1585  }], null, {
1586    _isTextSelector: [{
1587      type: Input,
1588      args: ["matTextPrefix"]
1589    }]
1590  });
1591})();
1592var MAT_SUFFIX = new InjectionToken("MatSuffix");
1593var MatSuffix = class _MatSuffix {
1594  set _isTextSelector(value) {
1595    this._isText = true;
1596  }
1597  _isText = false;
1598  static \u0275fac = function MatSuffix_Factory(__ngFactoryType__) {
1599    return new (__ngFactoryType__ || _MatSuffix)();
1600  };
1601  static \u0275dir = /* @__PURE__ */ \u0275\u0275defineDirective({
1602    type: _MatSuffix,
1603    selectors: [["", "matSuffix", ""], ["", "matIconSuffix", ""], ["", "matTextSuffix", ""]],
1604    inputs: {
1605      _isTextSelector: [0, "matTextSuffix", "_isTextSelector"]
1606    },
1607    features: [\u0275\u0275ProvidersFeature([{
1608      provide: MAT_SUFFIX,
1609      useExisting: _MatSuffix
1610    }])]
1611  });
1612};
1613(() => {
1614  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatSuffix, [{
1615    type: Directive,
1616    args: [{
1617      selector: "[matSuffix], [matIconSuffix], [matTextSuffix]",
1618      providers: [{
1619        provide: MAT_SUFFIX,
1620        useExisting: MatSuffix
1621      }]
1622    }]
1623  }], null, {
1624    _isTextSelector: [{
1625      type: Input,
1626      args: ["matTextSuffix"]
1627    }]
1628  });
1629})();
1630var FLOATING_LABEL_PARENT = new InjectionToken("FloatingLabelParent");
1631var MatFormFieldFloatingLabel = class _MatFormFieldFloatingLabel {
1632  _elementRef = inject(ElementRef);
1633  /** Whether the label is floating. */
1634  get floating() {
1635    return this._floating;
1636  }
1637  set floating(value) {
1638    this._floating = value;
1639    if (this.monitorResize) {
1640      this._handleResize();
1641    }
1642  }
1643  _floating = false;
1644  /** Whether to monitor for resize events on the floating label. */
1645  get monitorResize() {
1646    return this._monitorResize;
1647  }
1648  set monitorResize(value) {
1649    this._monitorResize = value;
1650    if (this._monitorResize) {
1651      this._subscribeToResize();
1652    } else {
1653      this._resizeSubscription.unsubscribe();
1654    }
1655  }
1656  _monitorResize = false;
1657  /** The shared ResizeObserver. */
1658  _resizeObserver = inject(SharedResizeObserver);
1659  /** The Angular zone. */
1660  _ngZone = inject(NgZone);
1661  /** The parent form-field. */
1662  _parent = inject(FLOATING_LABEL_PARENT);
1663  /** The current resize event subscription. */
1664  _resizeSubscription = new Subscription();
1665  constructor() {
1666  }
1667  ngOnDestroy() {
1668    this._resizeSubscription.unsubscribe();
1669  }
1670  /** Gets the width of the label. Used for the outline notch. */
1671  getWidth() {
1672    return estimateScrollWidth(this._elementRef.nativeElement);
1673  }
1674  /** Gets the HTML element for the floating label. */
1675  get element() {
1676    return this._elementRef.nativeElement;
1677  }
1678  /** Handles resize events from the ResizeObserver. */
1679  _handleResize() {
1680    setTimeout(() => this._parent._handleLabelResized());
1681  }
1682  /** Subscribes to resize events. */
1683  _subscribeToResize() {
1684    this._resizeSubscription.unsubscribe();
1685    this._ngZone.runOutsideAngular(() => {
1686      this._resizeSubscription = this._resizeObserver.observe(this._elementRef.nativeElement, {
1687        box: "border-box"
1688      }).subscribe(() => this._handleResize());
1689    });
1690  }
1691  static \u0275fac = function MatFormFieldFloatingLabel_Factory(__ngFactoryType__) {
1692    return new (__ngFactoryType__ || _MatFormFieldFloatingLabel)();
1693  };
1694  static \u0275dir = /* @__PURE__ */ \u0275\u0275defineDirective({
1695    type: _MatFormFieldFloatingLabel,
1696    selectors: [["label", "matFormFieldFloatingLabel", ""]],
1697    hostAttrs: [1, "mdc-floating-label", "mat-mdc-floating-label"],
1698    hostVars: 2,
1699    hostBindings: function MatFormFieldFloatingLabel_HostBindings(rf, ctx) {
1700      if (rf & 2) {
1701        \u0275\u0275classProp("mdc-floating-label--float-above", ctx.floating);
1702      }
1703    },
1704    inputs: {
1705      floating: "floating",
1706      monitorResize: "monitorResize"
1707    }
1708  });
1709};
1710(() => {
1711  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatFormFieldFloatingLabel, [{
1712    type: Directive,
1713    args: [{
1714      selector: "label[matFormFieldFloatingLabel]",
1715      host: {
1716        "class": "mdc-floating-label mat-mdc-floating-label",
1717        "[class.mdc-floating-label--float-above]": "floating"
1718      }
1719    }]
1720  }], () => [], {
1721    floating: [{
1722      type: Input
1723    }],
1724    monitorResize: [{
1725      type: Input
1726    }]
1727  });
1728})();
1729function estimateScrollWidth(element) {
1730  const htmlEl = element;
1731  if (htmlEl.offsetParent !== null) {
1732    return htmlEl.scrollWidth;
1733  }
1734  const clone = htmlEl.cloneNode(true);
1735  clone.style.setProperty("position", "absolute");
1736  clone.style.setProperty("transform", "translate(-9999px, -9999px)");
1737  document.documentElement.appendChild(clone);
1738  const scrollWidth = clone.scrollWidth;
1739  clone.remove();
1740  return scrollWidth;
1741}
1742var ACTIVATE_CLASS = "mdc-line-ripple--active";
1743var DEACTIVATING_CLASS = "mdc-line-ripple--deactivating";
1744var MatFormFieldLineRipple = class _MatFormFieldLineRipple {
1745  _elementRef = inject(ElementRef);
1746  _cleanupTransitionEnd;
1747  constructor() {
1748    const ngZone = inject(NgZone);
1749    const renderer = inject(Renderer2);
1750    ngZone.runOutsideAngular(() => {
1751      this._cleanupTransitionEnd = renderer.listen(this._elementRef.nativeElement, "transitionend", this._handleTransitionEnd);
1752    });
1753  }
1754  activate() {
1755    const classList = this._elementRef.nativeElement.classList;
1756    classList.remove(DEACTIVATING_CLASS);
1757    classList.add(ACTIVATE_CLASS);
1758  }
1759  deactivate() {
1760    this._elementRef.nativeElement.classList.add(DEACTIVATING_CLASS);
1761  }
1762  _handleTransitionEnd = (event) => {
1763    const classList = this._elementRef.nativeElement.classList;
1764    const isDeactivating = classList.contains(DEACTIVATING_CLASS);
1765    if (event.propertyName === "opacity" && isDeactivating) {
1766      classList.remove(ACTIVATE_CLASS, DEACTIVATING_CLASS);
1767    }
1768  };
1769  ngOnDestroy() {
1770    this._cleanupTransitionEnd();
1771  }
1772  static \u0275fac = function MatFormFieldLineRipple_Factory(__ngFactoryType__) {
1773    return new (__ngFactoryType__ || _MatFormFieldLineRipple)();
1774  };
1775  static \u0275dir = /* @__PURE__ */ \u0275\u0275defineDirective({
1776    type: _MatFormFieldLineRipple,
1777    selectors: [["div", "matFormFieldLineRipple", ""]],
1778    hostAttrs: [1, "mdc-line-ripple"]
1779  });
1780};
1781(() => {
1782  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatFormFieldLineRipple, [{
1783    type: Directive,
1784    args: [{
1785      selector: "div[matFormFieldLineRipple]",
1786      host: {
1787        "class": "mdc-line-ripple"
1788      }
1789    }]
1790  }], () => [], null);
1791})();
1792var MatFormFieldNotchedOutline = class _MatFormFieldNotchedOutline {
1793  _elementRef = inject(ElementRef);
1794  _ngZone = inject(NgZone);
1795  /** Whether the notch should be opened. */
1796  open = false;
1797  _notch;
1798  constructor() {
1799  }
1800  ngAfterViewInit() {
1801    const label = this._elementRef.nativeElement.querySelector(".mdc-floating-label");
1802    if (label) {
1803      this._elementRef.nativeElement.classList.add("mdc-notched-outline--upgraded");
1804      if (typeof requestAnimationFrame === "function") {
1805        label.style.transitionDuration = "0s";
1806        this._ngZone.runOutsideAngular(() => {
1807          requestAnimationFrame(() => label.style.transitionDuration = "");
1808        });
1809      }
1810    } else {
1811      this._elementRef.nativeElement.classList.add("mdc-notched-outline--no-label");
1812    }
1813  }
1814  _setNotchWidth(labelWidth) {
1815    if (!this.open || !labelWidth) {
1816      this._notch.nativeElement.style.width = "";
1817    } else {
1818      const NOTCH_ELEMENT_PADDING = 8;
1819      const NOTCH_ELEMENT_BORDER = 1;
1820      this._notch.nativeElement.style.width = `calc(${labelWidth}px * var(--mat-mdc-form-field-floating-label-scale, 0.75) + ${NOTCH_ELEMENT_PADDING + NOTCH_ELEMENT_BORDER}px)`;
1821    }
1822  }
1823  static \u0275fac = function MatFormFieldNotchedOutline_Factory(__ngFactoryType__) {
1824    return new (__ngFactoryType__ || _MatFormFieldNotchedOutline)();
1825  };
1826  static \u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({
1827    type: _MatFormFieldNotchedOutline,
1828    selectors: [["div", "matFormFieldNotchedOutline", ""]],
1829    viewQuery: function MatFormFieldNotchedOutline_Query(rf, ctx) {
1830      if (rf & 1) {
1831        \u0275\u0275viewQuery(_c02, 5);
1832      }
1833      if (rf & 2) {
1834        let _t;
1835        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._notch = _t.first);
1836      }
1837    },
1838    hostAttrs: [1, "mdc-notched-outline"],
1839    hostVars: 2,
1840    hostBindings: function MatFormFieldNotchedOutline_HostBindings(rf, ctx) {
1841      if (rf & 2) {
1842        \u0275\u0275classProp("mdc-notched-outline--notched", ctx.open);
1843      }
1844    },
1845    inputs: {
1846      open: [0, "matFormFieldNotchedOutlineOpen", "open"]
1847    },
1848    attrs: _c12,
1849    ngContentSelectors: _c22,
1850    decls: 5,
1851    vars: 0,
1852    consts: [["notch", ""], [1, "mat-mdc-notch-piece", "mdc-notched-outline__leading"], [1, "mat-mdc-notch-piece", "mdc-notched-outline__notch"], [1, "mat-mdc-notch-piece", "mdc-notched-outline__trailing"]],
1853    template: function MatFormFieldNotchedOutline_Template(rf, ctx) {
1854      if (rf & 1) {
1855        \u0275\u0275projectionDef();
1856        \u0275\u0275element(0, "div", 1);
1857        \u0275\u0275elementStart(1, "div", 2, 0);
1858        \u0275\u0275projection(3);
1859        \u0275\u0275elementEnd();
1860        \u0275\u0275element(4, "div", 3);
1861      }
1862    },
1863    encapsulation: 2,
1864    changeDetection: 0
1865  });
1866};
1867(() => {
1868  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatFormFieldNotchedOutline, [{
1869    type: Component,
1870    args: [{
1871      selector: "div[matFormFieldNotchedOutline]",
1872      host: {
1873        "class": "mdc-notched-outline",
1874        // Besides updating the notch state through the MDC component, we toggle this class through
1875        // a host binding in order to ensure that the notched-outline renders correctly on the server.
1876        "[class.mdc-notched-outline--notched]": "open"
1877      },
1878      changeDetection: ChangeDetectionStrategy.OnPush,
1879      encapsulation: ViewEncapsulation.None,
1880      template: '<div class="mat-mdc-notch-piece mdc-notched-outline__leading"></div>\n<div class="mat-mdc-notch-piece mdc-notched-outline__notch" #notch>\n  <ng-content></ng-content>\n</div>\n<div class="mat-mdc-notch-piece mdc-notched-outline__trailing"></div>\n'
1881    }]
1882  }], () => [], {
1883    open: [{
1884      type: Input,
1885      args: ["matFormFieldNotchedOutlineOpen"]
1886    }],
1887    _notch: [{
1888      type: ViewChild,
1889      args: ["notch"]
1890    }]
1891  });
1892})();
1893var MatFormFieldControl = class _MatFormFieldControl {
1894  /** The value of the control. */
1895  value;
1896  /**
1897   * Stream that emits whenever the state of the control changes such that the parent `MatFormField`
1898   * needs to run change detection.
1899   */
1900  stateChanges;
1901  /** The element ID for this control. */
1902  id;
1903  /** The placeholder for this control. */
1904  placeholder;
1905  /** Gets the AbstractControlDirective for this control. */
1906  ngControl;
1907  /** Whether the control is focused. */
1908  focused;
1909  /** Whether the control is empty. */
1910  empty;
1911  /** Whether the `MatFormField` label should try to float. */
1912  shouldLabelFloat;
1913  /** Whether the control is required. */
1914  required;
1915  /** Whether the control is disabled. */
1916  disabled;
1917  /** Whether the control is in an error state. */
1918  errorState;
1919  /**
1920   * An optional name for the control type that can be used to distinguish `mat-form-field` elements
1921   * based on their control type. The form field will add a class,
1922   * `mat-form-field-type-{{controlType}}` to its root element.
1923   */
1924  controlType;
1925  /**
1926   * Whether the input is currently in an autofilled state. If property is not present on the
1927   * control it is assumed to be false.
1928   */
1929  autofilled;
1930  /**
1931   * Value of `aria-describedby` that should be merged with the described-by ids
1932   * which are set by the form-field.
1933   */
1934  userAriaDescribedBy;
1935  /**
1936   * Whether to automatically assign the ID of the form field as the `for` attribute
1937   * on the `<label>` inside the form field. Set this to true to prevent the form
1938   * field from associating the label with non-native elements.
1939   */
1940  disableAutomaticLabeling;
1941  static \u0275fac = function MatFormFieldControl_Factory(__ngFactoryType__) {
1942    return new (__ngFactoryType__ || _MatFormFieldControl)();
1943  };
1944  static \u0275dir = /* @__PURE__ */ \u0275\u0275defineDirective({
1945    type: _MatFormFieldControl
1946  });
1947};
1948(() => {
1949  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatFormFieldControl, [{
1950    type: Directive
1951  }], null, null);
1952})();
1953function getMatFormFieldDuplicatedHintError(align) {
1954  return Error(`A hint was already declared for 'align="${align}"'.`);
1955}
1956function getMatFormFieldMissingControlError() {
1957  return Error("mat-form-field must contain a MatFormFieldControl.");
1958}
1959var MAT_FORM_FIELD = new InjectionToken("MatFormField");
1960var MAT_FORM_FIELD_DEFAULT_OPTIONS = new InjectionToken("MAT_FORM_FIELD_DEFAULT_OPTIONS");
1961var DEFAULT_APPEARANCE = "fill";
1962var DEFAULT_FLOAT_LABEL = "auto";
1963var DEFAULT_SUBSCRIPT_SIZING = "fixed";
1964var FLOATING_LABEL_DEFAULT_DOCKED_TRANSFORM = `translateY(-50%)`;
1965var MatFormField = class _MatFormField {
1966  _elementRef = inject(ElementRef);
1967  _changeDetectorRef = inject(ChangeDetectorRef);
1968  _dir = inject(Directionality);
1969  _platform = inject(Platform);
1970  _idGenerator = inject(_IdGenerator);
1971  _ngZone = inject(NgZone);
1972  _injector = inject(Injector);
1973  _defaults = inject(MAT_FORM_FIELD_DEFAULT_OPTIONS, {
1974    optional: true
1975  });
1976  _textField;
1977  _iconPrefixContainer;
1978  _textPrefixContainer;
1979  _iconSuffixContainer;
1980  _textSuffixContainer;
1981  _floatingLabel;
1982  _notchedOutline;
1983  _lineRipple;
1984  _formFieldControl;
1985  _prefixChildren;
1986  _suffixChildren;
1987  _errorChildren;
1988  _hintChildren;
1989  _labelChild = contentChild(MatLabel);
1990  /** Whether the required marker should be hidden. */
1991  get hideRequiredMarker() {
1992    return this._hideRequiredMarker;
1993  }
1994  set hideRequiredMarker(value) {
1995    this._hideRequiredMarker = coerceBooleanProperty(value);
1996  }
1997  _hideRequiredMarker = false;
1998  /**
1999   * Theme color of the form field. This API is supported in M2 themes only, it
2000   * has no effect in M3 themes. For color customization in M3, see https://material.angular.dev/components/form-field/styling.
2001   *
2002   * For information on applying color variants in M3, see
2003   * https://material.angular.dev/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants
2004   */
2005  color = "primary";
2006  /** Whether the label should always float or float as the user types. */
2007  get floatLabel() {
2008    return this._floatLabel || this._defaults?.floatLabel || DEFAULT_FLOAT_LABEL;
2009  }
2010  set floatLabel(value) {
2011    if (value !== this._floatLabel) {
2012      this._floatLabel = value;
2013      this._changeDetectorRef.markForCheck();
2014    }
2015  }
2016  _floatLabel;
2017  /** The form field appearance style. */
2018  get appearance() {
2019    return this._appearance;
2020  }
2021  set appearance(value) {
2022    const oldValue = this._appearance;
2023    const newAppearance = value || this._defaults?.appearance || DEFAULT_APPEARANCE;
2024    if (typeof ngDevMode === "undefined" || ngDevMode) {
2025      if (newAppearance !== "fill" && newAppearance !== "outline") {
2026        throw new Error(`MatFormField: Invalid appearance "${newAppearance}", valid values are "fill" or "outline".`);
2027      }
2028    }
2029    this._appearance = newAppearance;
2030    if (this._appearance === "outline" && this._appearance !== oldValue) {
2031      this._needsOutlineLabelOffsetUpdate = true;
2032    }
2033  }
2034  _appearance = DEFAULT_APPEARANCE;
2035  /**
2036   * Whether the form field should reserve space for one line of hint/error text (default)
2037   * or to have the spacing grow from 0px as needed based on the size of the hint/error content.
2038   * Note that when using dynamic sizing, layout shifts will occur when hint/error text changes.
2039   */
2040  get subscriptSizing() {
2041    return this._subscriptSizing || this._defaults?.subscriptSizing || DEFAULT_SUBSCRIPT_SIZING;
2042  }
2043  set subscriptSizing(value) {
2044    this._subscriptSizing = value || this._defaults?.subscriptSizing || DEFAULT_SUBSCRIPT_SIZING;
2045  }
2046  _subscriptSizing = null;
2047  /** Text for the form field hint. */
2048  get hintLabel() {
2049    return this._hintLabel;
2050  }
2051  set hintLabel(value) {
2052    this._hintLabel = value;
2053    this._processHints();
2054  }
2055  _hintLabel = "";
2056  _hasIconPrefix = false;
2057  _hasTextPrefix = false;
2058  _hasIconSuffix = false;
2059  _hasTextSuffix = false;
2060  // Unique id for the internal form field label.
2061  _labelId = this._idGenerator.getId("mat-mdc-form-field-label-");
2062  // Unique id for the hint label.
2063  _hintLabelId = this._idGenerator.getId("mat-mdc-hint-");
2064  /** Gets the current form field control */
2065  get _control() {
2066    return this._explicitFormFieldControl || this._formFieldControl;
2067  }
2068  set _control(value) {
2069    this._explicitFormFieldControl = value;
2070  }
2071  _destroyed = new Subject();
2072  _isFocused = null;
2073  _explicitFormFieldControl;
2074  _needsOutlineLabelOffsetUpdate = false;
2075  _previousControl = null;
2076  _previousControlValidatorFn = null;
2077  _stateChanges;
2078  _valueChanges;
2079  _describedByChanges;
2080  _animationsDisabled;
2081  constructor() {
2082    const defaults = this._defaults;
2083    if (defaults) {
2084      if (defaults.appearance) {
2085        this.appearance = defaults.appearance;
2086      }
2087      this._hideRequiredMarker = Boolean(defaults?.hideRequiredMarker);
2088      if (defaults.color) {
2089        this.color = defaults.color;
2090      }
2091    }
2092    this._animationsDisabled = inject(ANIMATION_MODULE_TYPE, {
2093      optional: true
2094    }) === "NoopAnimations";
2095  }
2096  ngAfterViewInit() {
2097    this._updateFocusState();
2098    if (!this._animationsDisabled) {
2099      this._ngZone.runOutsideAngular(() => {
2100        setTimeout(() => {
2101          this._elementRef.nativeElement.classList.add("mat-form-field-animations-enabled");
2102        }, 300);
2103      });
2104    }
2105    this._changeDetectorRef.detectChanges();
2106  }
2107  ngAfterContentInit() {
2108    this._assertFormFieldControl();
2109    this._initializeSubscript();
2110    this._initializePrefixAndSuffix();
2111    this._initializeOutlineLabelOffsetSubscriptions();
2112  }
2113  ngAfterContentChecked() {
2114    this._assertFormFieldControl();
2115    if (this._control !== this._previousControl) {
2116      this._initializeControl(this._previousControl);
2117      if (this._control.ngControl && this._control.ngControl.control) {
2118        this._previousControlValidatorFn = this._control.ngControl.control.validator;
2119      }
2120      this._previousControl = this._control;
2121    }
2122    if (this._control.ngControl && this._control.ngControl.control) {
2123      const validatorFn = this._control.ngControl.control.validator;
2124      if (validatorFn !== this._previousControlValidatorFn) {
2125        this._changeDetectorRef.markForCheck();
2126      }
2127    }
2128  }
2129  ngOnDestroy() {
2130    this._stateChanges?.unsubscribe();
2131    this._valueChanges?.unsubscribe();
2132    this._describedByChanges?.unsubscribe();
2133    this._destroyed.next();
2134    this._destroyed.complete();
2135  }
2136  /**
2137   * Gets the id of the label element. If no label is present, returns `null`.
2138   */
2139  getLabelId = computed(() => this._hasFloatingLabel() ? this._labelId : null);
2140  /**
2141   * Gets an ElementRef for the element that a overlay attached to the form field
2142   * should be positioned relative to.
2143   */
2144  getConnectedOverlayOrigin() {
2145    return this._textField || this._elementRef;
2146  }
2147  /** Animates the placeholder up and locks it in position. */
2148  _animateAndLockLabel() {
2149    if (this._hasFloatingLabel()) {
2150      this.floatLabel = "always";
2151    }
2152  }
2153  /** Initializes the registered form field control. */
2154  _initializeControl(previousControl) {
2155    const control = this._control;
2156    const classPrefix = "mat-mdc-form-field-type-";
2157    if (previousControl) {
2158      this._elementRef.nativeElement.classList.remove(classPrefix + previousControl.controlType);
2159    }
2160    if (control.controlType) {
2161      this._elementRef.nativeElement.classList.add(classPrefix + control.controlType);
2162    }
2163    this._stateChanges?.unsubscribe();
2164    this._stateChanges = control.stateChanges.subscribe(() => {
2165      this._updateFocusState();
2166      this._changeDetectorRef.markForCheck();
2167    });
2168    this._describedByChanges?.unsubscribe();
2169    this._describedByChanges = control.stateChanges.pipe(startWith([void 0, void 0]), map(() => [control.errorState, control.userAriaDescribedBy]), pairwise(), filter(([[prevErrorState, prevDescribedBy], [currentErrorState, currentDescribedBy]]) => {
2170      return prevErrorState !== currentErrorState || prevDescribedBy !== currentDescribedBy;
2171    })).subscribe(() => this._syncDescribedByIds());
2172    this._valueChanges?.unsubscribe();
2173    if (control.ngControl && control.ngControl.valueChanges) {
2174      this._valueChanges = control.ngControl.valueChanges.pipe(takeUntil(this._destroyed)).subscribe(() => this._changeDetectorRef.markForCheck());
2175    }
2176  }
2177  _checkPrefixAndSuffixTypes() {
2178    this._hasIconPrefix = !!this._prefixChildren.find((p) => !p._isText);
2179    this._hasTextPrefix = !!this._prefixChildren.find((p) => p._isText);
2180    this._hasIconSuffix = !!this._suffixChildren.find((s) => !s._isText);
2181    this._hasTextSuffix = !!this._suffixChildren.find((s) => s._isText);
2182  }
2183  /** Initializes the prefix and suffix containers. */
2184  _initializePrefixAndSuffix() {
2185    this._checkPrefixAndSuffixTypes();
2186    merge(this._prefixChildren.changes, this._suffixChildren.changes).subscribe(() => {
2187      this._checkPrefixAndSuffixTypes();
2188      this._changeDetectorRef.markForCheck();
2189    });
2190  }
2191  /**
2192   * Initializes the subscript by validating hints and synchronizing "aria-describedby" ids
2193   * with the custom form field control. Also subscribes to hint and error changes in order
2194   * to be able to validate and synchronize ids on change.
2195   */
2196  _initializeSubscript() {
2197    this._hintChildren.changes.subscribe(() => {
2198      this._processHints();
2199      this._changeDetectorRef.markForCheck();
2200    });
2201    this._errorChildren.changes.subscribe(() => {
2202      this._syncDescribedByIds();
2203      this._changeDetectorRef.markForCheck();
2204    });
2205    this._validateHints();
2206    this._syncDescribedByIds();
2207  }
2208  /** Throws an error if the form field's control is missing. */
2209  _assertFormFieldControl() {
2210    if (!this._control && (typeof ngDevMode === "undefined" || ngDevMode)) {
2211      throw getMatFormFieldMissingControlError();
2212    }
2213  }
2214  _updateFocusState() {
2215    if (this._control.focused && !this._isFocused) {
2216      this._isFocused = true;
2217      this._lineRipple?.activate();
2218    } else if (!this._control.focused && (this._isFocused || this._isFocused === null)) {
2219      this._isFocused = false;
2220      this._lineRipple?.deactivate();
2221    }
2222    this._textField?.nativeElement.classList.toggle("mdc-text-field--focused", this._control.focused);
2223  }
2224  /**
2225   * The floating label in the docked state needs to account for prefixes. The horizontal offset
2226   * is calculated whenever the appearance changes to `outline`, the prefixes change, or when the
2227   * form field is added to the DOM. This method sets up all subscriptions which are needed to
2228   * trigger the label offset update.
2229   */
2230  _initializeOutlineLabelOffsetSubscriptions() {
2231    this._prefixChildren.changes.subscribe(() => this._needsOutlineLabelOffsetUpdate = true);
2232    afterRender(() => {
2233      if (this._needsOutlineLabelOffsetUpdate) {
2234        this._needsOutlineLabelOffsetUpdate = false;
2235        this._updateOutlineLabelOffset();
2236      }
2237    }, {
2238      injector: this._injector
2239    });
2240    this._dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => this._needsOutlineLabelOffsetUpdate = true);
2241  }
2242  /** Whether the floating label should always float or not. */
2243  _shouldAlwaysFloat() {
2244    return this.floatLabel === "always";
2245  }
2246  _hasOutline() {
2247    return this.appearance === "outline";
2248  }
2249  /**
2250   * Whether the label should display in the infix. Labels in the outline appearance are
2251   * displayed as part of the notched-outline and are horizontally offset to account for
2252   * form field prefix content. This won't work in server side rendering since we cannot
2253   * measure the width of the prefix container. To make the docked label appear as if the
2254   * right offset has been calculated, we forcibly render the label inside the infix. Since
2255   * the label is part of the infix, the label cannot overflow the prefix content.
2256   */
2257  _forceDisplayInfixLabel() {
2258    return !this._platform.isBrowser && this._prefixChildren.length && !this._shouldLabelFloat();
2259  }
2260  _hasFloatingLabel = computed(() => !!this._labelChild());
2261  _shouldLabelFloat() {
2262    if (!this._hasFloatingLabel()) {
2263      return false;
2264    }
2265    return this._control.shouldLabelFloat || this._shouldAlwaysFloat();
2266  }
2267  /**
2268   * Determines whether a class from the AbstractControlDirective
2269   * should be forwarded to the host element.
2270   */
2271  _shouldForward(prop) {
2272    const control = this._control ? this._control.ngControl : null;
2273    return control && control[prop];
2274  }
2275  /** Gets the type of subscript message to render (error or hint). */
2276  _getSubscriptMessageType() {
2277    return this._errorChildren && this._errorChildren.length > 0 && this._control.errorState ? "error" : "hint";
2278  }
2279  /** Handle label resize events. */
2280  _handleLabelResized() {
2281    this._refreshOutlineNotchWidth();
2282  }
2283  /** Refreshes the width of the outline-notch, if present. */
2284  _refreshOutlineNotchWidth() {
2285    if (!this._hasOutline() || !this._floatingLabel || !this._shouldLabelFloat()) {
2286      this._notchedOutline?._setNotchWidth(0);
2287    } else {
2288      this._notchedOutline?._setNotchWidth(this._floatingLabel.getWidth());
2289    }
2290  }
2291  /** Does any extra processing that is required when handling the hints. */
2292  _processHints() {
2293    this._validateHints();
2294    this._syncDescribedByIds();
2295  }
2296  /**
2297   * Ensure that there is a maximum of one of each "mat-hint" alignment specified. The hint
2298   * label specified set through the input is being considered as "start" aligned.
2299   *
2300   * This method is a noop if Angular runs in production mode.
2301   */
2302  _validateHints() {
2303    if (this._hintChildren && (typeof ngDevMode === "undefined" || ngDevMode)) {
2304      let startHint;
2305      let endHint;
2306      this._hintChildren.forEach((hint) => {
2307        if (hint.align === "start") {
2308          if (startHint || this.hintLabel) {
2309            throw getMatFormFieldDuplicatedHintError("start");
2310          }
2311          startHint = hint;
2312        } else if (hint.align === "end") {
2313          if (endHint) {
2314            throw getMatFormFieldDuplicatedHintError("end");
2315          }
2316          endHint = hint;
2317        }
2318      });
2319    }
2320  }
2321  /**
2322   * Sets the list of element IDs that describe the child control. This allows the control to update
2323   * its `aria-describedby` attribute accordingly.
2324   */
2325  _syncDescribedByIds() {
2326    if (this._control) {
2327      let ids = [];
2328      if (this._control.userAriaDescribedBy && typeof this._control.userAriaDescribedBy === "string") {
2329        ids.push(...this._control.userAriaDescribedBy.split(" "));
2330      }
2331      if (this._getSubscriptMessageType() === "hint") {
2332        const startHint = this._hintChildren ? this._hintChildren.find((hint) => hint.align === "start") : null;
2333        const endHint = this._hintChildren ? this._hintChildren.find((hint) => hint.align === "end") : null;
2334        if (startHint) {
2335          ids.push(startHint.id);
2336        } else if (this._hintLabel) {
2337          ids.push(this._hintLabelId);
2338        }
2339        if (endHint) {
2340          ids.push(endHint.id);
2341        }
2342      } else if (this._errorChildren) {
2343        ids.push(...this._errorChildren.map((error) => error.id));
2344      }
2345      this._control.setDescribedByIds(ids);
2346    }
2347  }
2348  /**
2349   * Updates the horizontal offset of the label in the outline appearance. In the outline
2350   * appearance, the notched-outline and label are not relative to the infix container because
2351   * the outline intends to surround prefixes, suffixes and the infix. This means that the
2352   * floating label by default overlaps prefixes in the docked state. To avoid this, we need to
2353   * horizontally offset the label by the width of the prefix container. The MDC text-field does
2354   * not need to do this because they use a fixed width for prefixes. Hence, they can simply
2355   * incorporate the horizontal offset into their default text-field styles.
2356   */
2357  _updateOutlineLabelOffset() {
2358    if (!this._hasOutline() || !this._floatingLabel) {
2359      return;
2360    }
2361    const floatingLabel = this._floatingLabel.element;
2362    if (!(this._iconPrefixContainer || this._textPrefixContainer)) {
2363      floatingLabel.style.transform = "";
2364      return;
2365    }
2366    if (!this._isAttachedToDom()) {
2367      this._needsOutlineLabelOffsetUpdate = true;
2368      return;
2369    }
2370    const iconPrefixContainer = this._iconPrefixContainer?.nativeElement;
2371    const textPrefixContainer = this._textPrefixContainer?.nativeElement;
2372    const iconSuffixContainer = this._iconSuffixContainer?.nativeElement;
2373    const textSuffixContainer = this._textSuffixContainer?.nativeElement;
2374    const iconPrefixContainerWidth = iconPrefixContainer?.getBoundingClientRect().width ?? 0;
2375    const textPrefixContainerWidth = textPrefixContainer?.getBoundingClientRect().width ?? 0;
2376    const iconSuffixContainerWidth = iconSuffixContainer?.getBoundingClientRect().width ?? 0;
2377    const textSuffixContainerWidth = textSuffixContainer?.getBoundingClientRect().width ?? 0;
2378    const negate = this._dir.value === "rtl" ? "-1" : "1";
2379    const prefixWidth = `${iconPrefixContainerWidth + textPrefixContainerWidth}px`;
2380    const labelOffset = `var(--mat-mdc-form-field-label-offset-x, 0px)`;
2381    const labelHorizontalOffset = `calc(${negate} * (${prefixWidth} + ${labelOffset}))`;
2382    floatingLabel.style.transform = `var(
2383        --mat-mdc-form-field-label-transform,
2384        ${FLOATING_LABEL_DEFAULT_DOCKED_TRANSFORM} translateX(${labelHorizontalOffset})
2385    )`;
2386    const prefixAndSuffixWidth = iconPrefixContainerWidth + textPrefixContainerWidth + iconSuffixContainerWidth + textSuffixContainerWidth;
2387    this._elementRef.nativeElement.style.setProperty("--mat-form-field-notch-max-width", `calc(100% - ${prefixAndSuffixWidth}px)`);
2388  }
2389  /** Checks whether the form field is attached to the DOM. */
2390  _isAttachedToDom() {
2391    const element = this._elementRef.nativeElement;
2392    if (element.getRootNode) {
2393      const rootNode = element.getRootNode();
2394      return rootNode && rootNode !== element;
2395    }
2396    return document.documentElement.contains(element);
2397  }
2398  static \u0275fac = function MatFormField_Factory(__ngFactoryType__) {
2399    return new (__ngFactoryType__ || _MatFormField)();
2400  };
2401  static \u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({
2402    type: _MatFormField,
2403    selectors: [["mat-form-field"]],
2404    contentQueries: function MatFormField_ContentQueries(rf, ctx, dirIndex) {
2405      if (rf & 1) {
2406        \u0275\u0275contentQuerySignal(dirIndex, ctx._labelChild, MatLabel, 5);
2407        \u0275\u0275contentQuery(dirIndex, MatFormFieldControl, 5);
2408        \u0275\u0275contentQuery(dirIndex, MAT_PREFIX, 5);
2409        \u0275\u0275contentQuery(dirIndex, MAT_SUFFIX, 5);
2410        \u0275\u0275contentQuery(dirIndex, MAT_ERROR, 5);
2411        \u0275\u0275contentQuery(dirIndex, MatHint, 5);
2412      }
2413      if (rf & 2) {
2414        \u0275\u0275queryAdvance();
2415        let _t;
2416        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._formFieldControl = _t.first);
2417        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._prefixChildren = _t);
2418        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._suffixChildren = _t);
2419        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._errorChildren = _t);
2420        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._hintChildren = _t);
2421      }
2422    },
2423    viewQuery: function MatFormField_Query(rf, ctx) {
2424      if (rf & 1) {
2425        \u0275\u0275viewQuery(_c32, 5);
2426        \u0275\u0275viewQuery(_c42, 5);
2427        \u0275\u0275viewQuery(_c5, 5);
2428        \u0275\u0275viewQuery(_c6, 5);
2429        \u0275\u0275viewQuery(_c7, 5);
2430        \u0275\u0275viewQuery(MatFormFieldFloatingLabel, 5);
2431        \u0275\u0275viewQuery(MatFormFieldNotchedOutline, 5);
2432        \u0275\u0275viewQuery(MatFormFieldLineRipple, 5);
2433      }
2434      if (rf & 2) {
2435        let _t;
2436        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._textField = _t.first);
2437        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._iconPrefixContainer = _t.first);
2438        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._textPrefixContainer = _t.first);
2439        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._iconSuffixContainer = _t.first);
2440        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._textSuffixContainer = _t.first);
2441        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._floatingLabel = _t.first);
2442        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._notchedOutline = _t.first);
2443        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._lineRipple = _t.first);
2444      }
2445    },
2446    hostAttrs: [1, "mat-mdc-form-field"],
2447    hostVars: 40,
2448    hostBindings: function MatFormField_HostBindings(rf, ctx) {
2449      if (rf & 2) {
2450        \u0275\u0275classProp("mat-mdc-form-field-label-always-float", ctx._shouldAlwaysFloat())("mat-mdc-form-field-has-icon-prefix", ctx._hasIconPrefix)("mat-mdc-form-field-has-icon-suffix", ctx._hasIconSuffix)("mat-form-field-invalid", ctx._control.errorState)("mat-form-field-disabled", ctx._control.disabled)("mat-form-field-autofilled", ctx._control.autofilled)("mat-form-field-appearance-fill", ctx.appearance == "fill")("mat-form-field-appearance-outline", ctx.appearance == "outline")("mat-form-field-hide-placeholder", ctx._hasFloatingLabel() && !ctx._shouldLabelFloat())("mat-focused", ctx._control.focused)("mat-primary", ctx.color !== "accent" && ctx.color !== "warn")("mat-accent", ctx.color === "accent")("mat-warn", ctx.color === "warn")("ng-untouched", ctx._shouldForward("untouched"))("ng-touched", ctx._shouldForward("touched"))("ng-pristine", ctx._shouldForward("pristine"))("ng-dirty", ctx._shouldForward("dirty"))("ng-valid", ctx._shouldForward("valid"))("ng-invalid", ctx._shouldForward("invalid"))("ng-pending", ctx._shouldForward("pending"));
2451      }
2452    },
2453    inputs: {
2454      hideRequiredMarker: "hideRequiredMarker",
2455      color: "color",
2456      floatLabel: "floatLabel",
2457      appearance: "appearance",
2458      subscriptSizing: "subscriptSizing",
2459      hintLabel: "hintLabel"
2460    },
2461    exportAs: ["matFormField"],
2462    features: [\u0275\u0275ProvidersFeature([{
2463      provide: MAT_FORM_FIELD,
2464      useExisting: _MatFormField
2465    }, {
2466      provide: FLOATING_LABEL_PARENT,
2467      useExisting: _MatFormField
2468    }])],
2469    ngContentSelectors: _c9,
2470    decls: 20,
2471    vars: 25,
2472    consts: [["labelTemplate", ""], ["textField", ""], ["iconPrefixContainer", ""], ["textPrefixContainer", ""], ["textSuffixContainer", ""], ["iconSuffixContainer", ""], [1, "mat-mdc-text-field-wrapper", "mdc-text-field", 3, "click"], [1, "mat-mdc-form-field-focus-overlay"], [1, "mat-mdc-form-field-flex"], ["matFormFieldNotchedOutline", "", 3, "matFormFieldNotchedOutlineOpen"], [1, "mat-mdc-form-field-icon-prefix"], [1, "mat-mdc-form-field-text-prefix"], [1, "mat-mdc-form-field-infix"], [3, "ngTemplateOutlet"], [1, "mat-mdc-form-field-text-suffix"], [1, "mat-mdc-form-field-icon-suffix"], ["matFormFieldLineRipple", ""], [1, "mat-mdc-form-field-subscript-wrapper", "mat-mdc-form-field-bottom-align"], ["aria-atomic", "true", "aria-live", "polite"], ["matFormFieldFloatingLabel", "", 3, "floating", "monitorResize", "id"], ["aria-hidden", "true", 1, "mat-mdc-form-field-required-marker", "mdc-floating-label--required"], [3, "id"], [1, "mat-mdc-form-field-hint-spacer"]],
2473    template: function MatFormField_Template(rf, ctx) {
2474      if (rf & 1) {
2475        const _r1 = \u0275\u0275getCurrentView();
2476        \u0275\u0275projectionDef(_c8);
2477        \u0275\u0275template(0, MatFormField_ng_template_0_Template, 1, 1, "ng-template", null, 0, \u0275\u0275templateRefExtractor);
2478        \u0275\u0275elementStart(2, "div", 6, 1);
2479        \u0275\u0275listener("click", function MatFormField_Template_div_click_2_listener($event) {
2480          \u0275\u0275restoreView(_r1);
2481          return \u0275\u0275resetView(ctx._control.onContainerClick($event));
2482        });
2483        \u0275\u0275template(4, MatFormField_Conditional_4_Template, 1, 0, "div", 7);
2484        \u0275\u0275elementStart(5, "div", 8);
2485        \u0275\u0275template(6, MatFormField_Conditional_6_Template, 2, 2, "div", 9)(7, MatFormField_Conditional_7_Template, 3, 0, "div", 10)(8, MatFormField_Conditional_8_Template, 3, 0, "div", 11);
2486        \u0275\u0275elementStart(9, "div", 12);
2487        \u0275\u0275template(10, MatFormField_Conditional_10_Template, 1, 1, null, 13);
2488        \u0275\u0275projection(11);
2489        \u0275\u0275elementEnd();
2490        \u0275\u0275template(12, MatFormField_Conditional_12_Template, 3, 0, "div", 14)(13, MatFormField_Conditional_13_Template, 3, 0, "div", 15);
2491        \u0275\u0275elementEnd();
2492        \u0275\u0275template(14, MatFormField_Conditional_14_Template, 1, 0, "div", 16);
2493        \u0275\u0275elementEnd();
2494        \u0275\u0275elementStart(15, "div", 17);
2495        \u0275\u0275declareLet(16);
2496        \u0275\u0275elementStart(17, "div", 18);
2497        \u0275\u0275template(18, MatFormField_Case_18_Template, 1, 0)(19, MatFormField_Case_19_Template, 4, 1);
2498        \u0275\u0275elementEnd()();
2499      }
2500      if (rf & 2) {
2501        let tmp_19_0;
2502        \u0275\u0275advance(2);
2503        \u0275\u0275classProp("mdc-text-field--filled", !ctx._hasOutline())("mdc-text-field--outlined", ctx._hasOutline())("mdc-text-field--no-label", !ctx._hasFloatingLabel())("mdc-text-field--disabled", ctx._control.disabled)("mdc-text-field--invalid", ctx._control.errorState);
2504        \u0275\u0275advance(2);
2505        \u0275\u0275conditional(!ctx._hasOutline() && !ctx._control.disabled ? 4 : -1);
2506        \u0275\u0275advance(2);
2507        \u0275\u0275conditional(ctx._hasOutline() ? 6 : -1);
2508        \u0275\u0275advance();
2509        \u0275\u0275conditional(ctx._hasIconPrefix ? 7 : -1);
2510        \u0275\u0275advance();
2511        \u0275\u0275conditional(ctx._hasTextPrefix ? 8 : -1);
2512        \u0275\u0275advance(2);
2513        \u0275\u0275conditional(!ctx._hasOutline() || ctx._forceDisplayInfixLabel() ? 10 : -1);
2514        \u0275\u0275advance(2);
2515        \u0275\u0275conditional(ctx._hasTextSuffix ? 12 : -1);
2516        \u0275\u0275advance();
2517        \u0275\u0275conditional(ctx._hasIconSuffix ? 13 : -1);
2518        \u0275\u0275advance();
2519        \u0275\u0275conditional(!ctx._hasOutline() ? 14 : -1);
2520        \u0275\u0275advance();
2521        \u0275\u0275classProp("mat-mdc-form-field-subscript-dynamic-size", ctx.subscriptSizing === "dynamic");
2522        const subscriptMessageType_r4 = ctx._getSubscriptMessageType();
2523        \u0275\u0275advance(2);
2524        \u0275\u0275classProp("mat-mdc-form-field-error-wrapper", subscriptMessageType_r4 === "error")("mat-mdc-form-field-hint-wrapper", subscriptMessageType_r4 === "hint");
2525        \u0275\u0275advance();
2526        \u0275\u0275conditional((tmp_19_0 = subscriptMessageType_r4) === "error" ? 18 : tmp_19_0 === "hint" ? 19 : -1);
2527      }
2528    },
2529    dependencies: [MatFormFieldFloatingLabel, MatFormFieldNotchedOutline, NgTemplateOutlet, MatFormFieldLineRipple, MatHint],
2530    styles: ['.mdc-text-field{display:inline-flex;align-items:baseline;padding:0 16px;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.mdc-text-field__input{width:100%;min-width:0;border:none;border-radius:0;background:none;padding:0;-moz-appearance:none;-webkit-appearance:none;height:28px}.mdc-text-field__input::-webkit-calendar-picker-indicator{display:none}.mdc-text-field__input::-ms-clear{display:none}.mdc-text-field__input:focus{outline:none}.mdc-text-field__input:invalid{box-shadow:none}.mdc-text-field__input::placeholder{opacity:0}.mdc-text-field__input::-moz-placeholder{opacity:0}.mdc-text-field__input::-webkit-input-placeholder{opacity:0}.mdc-text-field__input:-ms-input-placeholder{opacity:0}.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mdc-text-field--focused .mdc-text-field__input::placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input::-moz-placeholder,.mdc-text-field--focused .mdc-text-field__input::-moz-placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{opacity:1}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::-moz-placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::-webkit-input-placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive:-ms-input-placeholder{opacity:0}.mdc-text-field--outlined .mdc-text-field__input,.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none !important;background-color:rgba(0,0,0,0)}.mdc-text-field--disabled .mdc-text-field__input{pointer-events:auto}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mdc-filled-text-field-input-text-color, var(--mat-sys-on-surface));caret-color:var(--mdc-filled-text-field-caret-color, var(--mat-sys-primary))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::-moz-placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mdc-filled-text-field-error-caret-color)}.mdc-text-field--filled.mdc-text-field--disabled .mdc-text-field__input{color:var(--mdc-filled-text-field-disabled-input-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mdc-outlined-text-field-input-text-color, var(--mat-sys-on-surface));caret-color:var(--mdc-outlined-text-field-caret-color, var(--mat-sys-primary))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::-moz-placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mdc-outlined-text-field-error-caret-color)}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--mdc-outlined-text-field-disabled-input-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mdc-text-field--disabled .mdc-text-field__input{background-color:Window}}.mdc-text-field--filled{height:56px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:var(--mdc-filled-text-field-container-shape, var(--mat-sys-corner-extra-small));border-top-right-radius:var(--mdc-filled-text-field-container-shape, var(--mat-sys-corner-extra-small))}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--mdc-filled-text-field-container-color, var(--mat-sys-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled{background-color:var(--mdc-filled-text-field-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 4%, transparent))}.mdc-text-field--outlined{height:56px;overflow:visible;padding-right:max(16px,var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small)));padding-left:max(16px,var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small)) + 4px)}[dir=rtl] .mdc-text-field--outlined{padding-right:max(16px,var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small)) + 4px);padding-left:max(16px,var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small)))}.mdc-floating-label{position:absolute;left:0;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform}[dir=rtl] .mdc-floating-label{right:0;left:auto;transform-origin:right top;text-align:right}.mdc-text-field .mdc-floating-label{top:50%;transform:translateY(-50%);pointer-events:none}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:auto}[dir=rtl] .mdc-text-field--outlined .mdc-floating-label{left:auto;right:4px}.mdc-text-field--filled .mdc-floating-label{left:16px;right:auto}[dir=rtl] .mdc-text-field--filled .mdc-floating-label{left:auto;right:16px}.mdc-text-field--disabled .mdc-floating-label{cursor:default}@media(forced-colors: active){.mdc-text-field--disabled .mdc-floating-label{z-index:1}}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label{display:none}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mdc-filled-text-field-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label{color:var(--mdc-filled-text-field-focus-label-text-color, var(--mat-sys-primary))}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-floating-label{color:var(--mdc-filled-text-field-hover-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-floating-label{color:var(--mdc-filled-text-field-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-floating-label{color:var(--mdc-filled-text-field-error-label-text-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mdc-floating-label{color:var(--mdc-filled-text-field-error-focus-label-text-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-floating-label{color:var(--mdc-filled-text-field-error-hover-label-text-color, var(--mat-sys-on-error-container))}.mdc-text-field--filled .mdc-floating-label{font-family:var(--mdc-filled-text-field-label-text-font, var(--mat-sys-body-large-font));font-size:var(--mdc-filled-text-field-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mdc-filled-text-field-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mdc-filled-text-field-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mdc-outlined-text-field-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label{color:var(--mdc-outlined-text-field-focus-label-text-color, var(--mat-sys-primary))}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-floating-label{color:var(--mdc-outlined-text-field-hover-label-text-color, var(--mat-sys-on-surface))}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-floating-label{color:var(--mdc-outlined-text-field-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-floating-label{color:var(--mdc-outlined-text-field-error-label-text-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mdc-floating-label{color:var(--mdc-outlined-text-field-error-focus-label-text-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-floating-label{color:var(--mdc-outlined-text-field-error-hover-label-text-color, var(--mat-sys-on-error-container))}.mdc-text-field--outlined .mdc-floating-label{font-family:var(--mdc-outlined-text-field-label-text-font, var(--mat-sys-body-large-font));font-size:var(--mdc-outlined-text-field-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mdc-outlined-text-field-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mdc-outlined-text-field-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-floating-label--float-above{cursor:auto;transform:translateY(-106%) scale(0.75)}.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) scale(1);font-size:.75rem}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:133.3333333333%}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) scale(0.75)}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:1px;margin-right:0;content:"*"}[dir=rtl] .mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:0;margin-right:1px}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] .mdc-notched-outline{text-align:right}.mdc-text-field--outlined .mdc-notched-outline{z-index:1}.mat-mdc-notch-piece{box-sizing:border-box;height:100%;pointer-events:none;border-top:1px solid;border-bottom:1px solid}.mdc-text-field--focused .mat-mdc-notch-piece{border-width:2px}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-outline-color, var(--mat-sys-outline));border-width:var(--mdc-outlined-text-field-outline-width, 1px)}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-hover-outline-color, var(--mat-sys-on-surface))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-focus-outline-color, var(--mat-sys-primary))}.mdc-text-field--outlined.mdc-text-field--disabled .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-error-outline-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--focused):hover .mdc-notched-outline .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-error-hover-outline-color, var(--mat-sys-on-error-container))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-error-focus-outline-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mat-mdc-notch-piece{border-width:var(--mdc-outlined-text-field-focus-outline-width, 2px)}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small));border-bottom-left-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small))}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px,var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small)))}[dir=rtl] .mdc-notched-outline__leading{border-left:none;border-right:1px solid;border-bottom-left-radius:0;border-top-left-radius:0;border-top-right-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small))}.mdc-notched-outline__trailing{flex-grow:1;border-left:none;border-right:1px solid;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small))}[dir=rtl] .mdc-notched-outline__trailing{border-left:1px solid;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small));border-bottom-left-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small))}.mdc-notched-outline__notch{flex:0 0 auto;width:auto}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:min(var(--mat-form-field-notch-max-width, 100%),100% - max(12px,var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small)))*2)}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none;--mat-form-field-notch-max-width: 100%}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{display:none}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:""}.mdc-line-ripple::before{z-index:1;border-bottom-width:var(--mdc-filled-text-field-active-indicator-height, 1px)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-active-indicator-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-hover-active-indicator-color, var(--mat-sys-on-surface))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-disabled-active-indicator-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-error-active-indicator-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-error-hover-active-indicator-color, var(--mat-sys-on-error-container))}.mdc-line-ripple::after{transform:scaleX(0);opacity:0;z-index:2}.mdc-text-field--filled .mdc-line-ripple::after{border-bottom-width:var(--mdc-filled-text-field-focus-active-indicator-height, 2px)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mdc-filled-text-field-focus-active-indicator-color, var(--mat-sys-primary))}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mdc-filled-text-field-error-focus-active-indicator-color, var(--mat-sys-error))}.mdc-line-ripple--active::after{transform:scaleX(1);opacity:1}.mdc-line-ripple--deactivating::after{opacity:0}.mdc-text-field--disabled{pointer-events:none}.mat-mdc-form-field-textarea-control{vertical-align:middle;resize:vertical;box-sizing:border-box;height:auto;margin:0;padding:0;border:none;overflow:auto}.mat-mdc-form-field-input-control.mat-mdc-form-field-input-control{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font:inherit;letter-spacing:inherit;text-decoration:inherit;text-transform:inherit;border:none}.mat-mdc-form-field .mat-mdc-floating-label.mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;line-height:normal;pointer-events:all;will-change:auto}.mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-floating-label.mdc-floating-label{cursor:inherit}.mdc-text-field--no-label:not(.mdc-text-field--textarea) .mat-mdc-form-field-input-control.mdc-text-field__input,.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control{height:auto}.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control.mdc-text-field__input[type=color]{height:23px}.mat-mdc-text-field-wrapper{height:auto;flex:auto;will-change:auto}.mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-left:0;--mat-mdc-form-field-label-offset-x: -16px}.mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-right:0}[dir=rtl] .mat-mdc-text-field-wrapper{padding-left:16px;padding-right:16px}[dir=rtl] .mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-left:0}[dir=rtl] .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-right:0}.mat-form-field-disabled .mdc-text-field__input::placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-label-always-float .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .mat-mdc-floating-label{left:auto;right:auto}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-text-field__input{display:inline-block}.mat-mdc-form-field .mat-mdc-text-field-wrapper.mdc-text-field .mdc-notched-outline__notch{padding-top:0}.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field .mdc-notched-outline__notch{border-left:1px solid rgba(0,0,0,0)}[dir=rtl] .mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field .mdc-notched-outline__notch{border-left:none;border-right:1px solid rgba(0,0,0,0)}.mat-mdc-form-field-infix{min-height:var(--mat-form-field-container-height, 56px);padding-top:var(--mat-form-field-filled-with-label-container-padding-top, 24px);padding-bottom:var(--mat-form-field-filled-with-label-container-padding-bottom, 8px)}.mdc-text-field--outlined .mat-mdc-form-field-infix,.mdc-text-field--no-label .mat-mdc-form-field-infix{padding-top:var(--mat-form-field-container-vertical-padding, 16px);padding-bottom:var(--mat-form-field-container-vertical-padding, 16px)}.mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:calc(var(--mat-form-field-container-height, 56px)/2)}.mdc-text-field--filled .mat-mdc-floating-label{display:var(--mat-form-field-filled-label-display, block)}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY(calc(calc(6.75px + var(--mat-form-field-container-height, 56px) / 2) * -1)) scale(var(--mat-mdc-form-field-floating-label-scale, 0.75));transform:var(--mat-mdc-form-field-label-transform)}@keyframes _mat-form-field-subscript-animation{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.mat-mdc-form-field-subscript-wrapper{box-sizing:border-box;width:100%;position:relative}.mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-error-wrapper{position:absolute;top:0;left:0;right:0;padding:0 16px;opacity:1;transform:translateY(0);animation:_mat-form-field-subscript-animation 0ms cubic-bezier(0.55, 0, 0.55, 0.2)}.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-error-wrapper{position:static}.mat-mdc-form-field-bottom-align::before{content:"";display:inline-block;height:16px}.mat-mdc-form-field-bottom-align.mat-mdc-form-field-subscript-dynamic-size::before{content:unset}.mat-mdc-form-field-hint-end{order:1}.mat-mdc-form-field-hint-wrapper{display:flex}.mat-mdc-form-field-hint-spacer{flex:1 0 1em}.mat-mdc-form-field-error{display:block;color:var(--mat-form-field-error-text-color, var(--mat-sys-error))}.mat-mdc-form-field-subscript-wrapper,.mat-mdc-form-field-bottom-align::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-subscript-text-font, var(--mat-sys-body-small-font));line-height:var(--mat-form-field-subscript-text-line-height, var(--mat-sys-body-small-line-height));font-size:var(--mat-form-field-subscript-text-size, var(--mat-sys-body-small-size));letter-spacing:var(--mat-form-field-subscript-text-tracking, var(--mat-sys-body-small-tracking));font-weight:var(--mat-form-field-subscript-text-weight, var(--mat-sys-body-small-weight))}.mat-mdc-form-field-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;opacity:0;pointer-events:none;background-color:var(--mat-form-field-state-layer-color, var(--mat-sys-on-surface))}.mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-focus-overlay{opacity:var(--mat-form-field-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-form-field.mat-focused .mat-mdc-form-field-focus-overlay{opacity:var(--mat-form-field-focus-state-layer-opacity, 0)}select.mat-mdc-form-field-input-control{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(0,0,0,0);display:inline-flex;box-sizing:border-box}select.mat-mdc-form-field-input-control:not(:disabled){cursor:pointer}select.mat-mdc-form-field-input-control:not(.mat-mdc-native-select-inline) option{color:var(--mat-form-field-select-option-text-color, var(--mat-sys-neutral10))}select.mat-mdc-form-field-input-control:not(.mat-mdc-native-select-inline) option:disabled{color:var(--mat-form-field-select-disabled-option-text-color, color-mix(in srgb, var(--mat-sys-neutral10) 38%, transparent))}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{content:"";width:0;height:0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;position:absolute;right:0;top:50%;margin-top:-2.5px;pointer-events:none;color:var(--mat-form-field-enabled-select-arrow-color, var(--mat-sys-on-surface-variant))}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{right:auto;left:0}.mat-mdc-form-field-type-mat-native-select.mat-focused .mat-mdc-form-field-infix::after{color:var(--mat-form-field-focus-select-arrow-color, var(--mat-sys-primary))}.mat-mdc-form-field-type-mat-native-select.mat-form-field-disabled .mat-mdc-form-field-infix::after{color:var(--mat-form-field-disabled-select-arrow-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:15px}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:0;padding-left:15px}@media(forced-colors: active){.mat-form-field-appearance-fill .mat-mdc-text-field-wrapper{outline:solid 1px}}@media(forced-colors: active){.mat-form-field-appearance-fill.mat-form-field-disabled .mat-mdc-text-field-wrapper{outline-color:GrayText}}@media(forced-colors: active){.mat-form-field-appearance-fill.mat-focused .mat-mdc-text-field-wrapper{outline:dashed 3px}}@media(forced-colors: active){.mat-mdc-form-field.mat-focused .mdc-notched-outline{border:dashed 3px}}.mat-mdc-form-field-input-control[type=date],.mat-mdc-form-field-input-control[type=datetime],.mat-mdc-form-field-input-control[type=datetime-local],.mat-mdc-form-field-input-control[type=month],.mat-mdc-form-field-input-control[type=week],.mat-mdc-form-field-input-control[type=time]{line-height:1}.mat-mdc-form-field-input-control::-webkit-datetime-edit{line-height:1;padding:0;margin-bottom:-2px}.mat-mdc-form-field{--mat-mdc-form-field-floating-label-scale: 0.75;display:inline-flex;flex-direction:column;min-width:0;text-align:left;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-container-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-form-field-container-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-form-field-container-text-size, var(--mat-sys-body-large-size));letter-spacing:var(--mat-form-field-container-text-tracking, var(--mat-sys-body-large-tracking));font-weight:var(--mat-form-field-container-text-weight, var(--mat-sys-body-large-weight))}.mat-mdc-form-field .mdc-text-field--outlined .mdc-floating-label--float-above{font-size:calc(var(--mat-form-field-outlined-label-text-populated-size)*var(--mat-mdc-form-field-floating-label-scale))}.mat-mdc-form-field .mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:var(--mat-form-field-outlined-label-text-populated-size)}[dir=rtl] .mat-mdc-form-field{text-align:right}.mat-mdc-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-mdc-text-field-wrapper{width:100%;z-index:0}.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix{align-self:center;line-height:0;pointer-events:auto;position:relative;z-index:1}.mat-mdc-form-field-icon-prefix>.mat-icon,.mat-mdc-form-field-icon-suffix>.mat-icon{padding:0 12px;box-sizing:content-box}.mat-mdc-form-field-icon-prefix{color:var(--mat-form-field-leading-icon-color, var(--mat-sys-on-surface-variant))}.mat-form-field-disabled .mat-mdc-form-field-icon-prefix{color:var(--mat-form-field-disabled-leading-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-trailing-icon-color, var(--mat-sys-on-surface-variant))}.mat-form-field-disabled .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-disabled-trailing-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-invalid .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-trailing-icon-color, var(--mat-sys-error))}.mat-form-field-invalid:not(.mat-focused):not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-hover-trailing-icon-color, var(--mat-sys-on-error-container))}.mat-form-field-invalid.mat-focused .mat-mdc-text-field-wrapper .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-focus-trailing-icon-color, var(--mat-sys-error))}.mat-mdc-form-field-icon-prefix,[dir=rtl] .mat-mdc-form-field-icon-suffix{padding:0 4px 0 0}.mat-mdc-form-field-icon-suffix,[dir=rtl] .mat-mdc-form-field-icon-prefix{padding:0 0 0 4px}.mat-mdc-form-field-subscript-wrapper .mat-icon,.mat-mdc-form-field label .mat-icon{width:1em;height:1em;font-size:inherit}.mat-mdc-form-field-infix{flex:auto;min-width:0;width:180px;position:relative;box-sizing:border-box}.mat-mdc-form-field-infix:has(textarea[cols]){width:auto}.mat-mdc-form-field .mdc-notched-outline__notch{margin-left:-1px;-webkit-clip-path:inset(-9em -999em -9em 1px);clip-path:inset(-9em -999em -9em 1px)}[dir=rtl] .mat-mdc-form-field .mdc-notched-outline__notch{margin-left:0;margin-right:-1px;-webkit-clip-path:inset(-9em 1px -9em -999em);clip-path:inset(-9em 1px -9em -999em)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-floating-label{transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input{transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::-moz-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::-webkit-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::-moz-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::-moz-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before{transition-duration:75ms}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-line-ripple::after{transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field.mat-form-field-animations-enabled .mat-mdc-form-field-error-wrapper{animation-duration:300ms}.mdc-notched-outline .mdc-floating-label{max-width:calc(100% + 1px)}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:calc(133.3333333333% + 1px)}\n'],
2531    encapsulation: 2,
2532    changeDetection: 0
2533  });
2534};
2535(() => {
2536  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatFormField, [{
2537    type: Component,
2538    args: [{
2539      selector: "mat-form-field",
2540      exportAs: "matFormField",
2541      host: {
2542        "class": "mat-mdc-form-field",
2543        "[class.mat-mdc-form-field-label-always-float]": "_shouldAlwaysFloat()",
2544        "[class.mat-mdc-form-field-has-icon-prefix]": "_hasIconPrefix",
2545        "[class.mat-mdc-form-field-has-icon-suffix]": "_hasIconSuffix",
2546        // Note that these classes reuse the same names as the non-MDC version, because they can be
2547        // considered a public API since custom form controls may use them to style themselves.
2548        // See https://github.com/angular/components/pull/20502#discussion_r486124901.
2549        "[class.mat-form-field-invalid]": "_control.errorState",
2550        "[class.mat-form-field-disabled]": "_control.disabled",
2551        "[class.mat-form-field-autofilled]": "_control.autofilled",
2552        "[class.mat-form-field-appearance-fill]": 'appearance == "fill"',
2553        "[class.mat-form-field-appearance-outline]": 'appearance == "outline"',
2554        "[class.mat-form-field-hide-placeholder]": "_hasFloatingLabel() && !_shouldLabelFloat()",
2555        "[class.mat-focused]": "_control.focused",
2556        "[class.mat-primary]": 'color !== "accent" && color !== "warn"',
2557        "[class.mat-accent]": 'color === "accent"',
2558        "[class.mat-warn]": 'color === "warn"',
2559        "[class.ng-untouched]": '_shouldForward("untouched")',
2560        "[class.ng-touched]": '_shouldForward("touched")',
2561        "[class.ng-pristine]": '_shouldForward("pristine")',
2562        "[class.ng-dirty]": '_shouldForward("dirty")',
2563        "[class.ng-valid]": '_shouldForward("valid")',
2564        "[class.ng-invalid]": '_shouldForward("invalid")',
2565        "[class.ng-pending]": '_shouldForward("pending")'
2566      },
2567      encapsulation: ViewEncapsulation.None,
2568      changeDetection: ChangeDetectionStrategy.OnPush,
2569      providers: [{
2570        provide: MAT_FORM_FIELD,
2571        useExisting: MatFormField
2572      }, {
2573        provide: FLOATING_LABEL_PARENT,
2574        useExisting: MatFormField
2575      }],
2576      imports: [MatFormFieldFloatingLabel, MatFormFieldNotchedOutline, NgTemplateOutlet, MatFormFieldLineRipple, MatHint],
2577      template: '<ng-template #labelTemplate>\n  <!--\n    MDC recommends that the text-field is a `<label>` element. This rather complicates the\n    setup because it would require every form-field control to explicitly set `aria-labelledby`.\n    This is because the `<label>` itself contains more than the actual label (e.g. prefix, suffix\n    or other projected content), and screen readers could potentially read out undesired content.\n    Excluding elements from being printed out requires them to be marked with `aria-hidden`, or\n    the form control is set to a scoped element for the label (using `aria-labelledby`). Both of\n    these options seem to complicate the setup because we know exactly what content is rendered\n    as part of the label, and we don\'t want to spend resources on walking through projected content\n    to set `aria-hidden`. Nor do we want to set `aria-labelledby` on every form control if we could\n    simply link the label to the control using the label `for` attribute.\n  -->\n  @if (_hasFloatingLabel()) {\n    <label\n      matFormFieldFloatingLabel\n      [floating]="_shouldLabelFloat()"\n      [monitorResize]="_hasOutline()"\n      [id]="_labelId"\n      [attr.for]="_control.disableAutomaticLabeling ? null : _control.id"\n    >\n      <ng-content select="mat-label"></ng-content>\n      <!--\n        We set the required marker as a separate element, in order to make it easier to target if\n        apps want to override it and to be able to set `aria-hidden` so that screen readers don\'t\n        pick it up.\n       -->\n      @if (!hideRequiredMarker && _control.required) {\n        <span\n          aria-hidden="true"\n          class="mat-mdc-form-field-required-marker mdc-floating-label--required"\n        ></span>\n      }\n    </label>\n  }\n</ng-template>\n\n<div\n  class="mat-mdc-text-field-wrapper mdc-text-field"\n  #textField\n  [class.mdc-text-field--filled]="!_hasOutline()"\n  [class.mdc-text-field--outlined]="_hasOutline()"\n  [class.mdc-text-field--no-label]="!_hasFloatingLabel()"\n  [class.mdc-text-field--disabled]="_control.disabled"\n  [class.mdc-text-field--invalid]="_control.errorState"\n  (click)="_control.onContainerClick($event)"\n>\n  @if (!_hasOutline() && !_control.disabled) {\n    <div class="mat-mdc-form-field-focus-overlay"></div>\n  }\n  <div class="mat-mdc-form-field-flex">\n    @if (_hasOutline()) {\n      <div matFormFieldNotchedOutline [matFormFieldNotchedOutlineOpen]="_shouldLabelFloat()">\n        @if (!_forceDisplayInfixLabel()) {\n          <ng-template [ngTemplateOutlet]="labelTemplate"></ng-template>\n        }\n      </div>\n    }\n\n    @if (_hasIconPrefix) {\n      <div class="mat-mdc-form-field-icon-prefix" #iconPrefixContainer>\n        <ng-content select="[matPrefix], [matIconPrefix]"></ng-content>\n      </div>\n    }\n\n    @if (_hasTextPrefix) {\n      <div class="mat-mdc-form-field-text-prefix" #textPrefixContainer>\n        <ng-content select="[matTextPrefix]"></ng-content>\n      </div>\n    }\n\n    <div class="mat-mdc-form-field-infix">\n      @if (!_hasOutline() || _forceDisplayInfixLabel()) {\n        <ng-template [ngTemplateOutlet]="labelTemplate"></ng-template>\n      }\n\n      <ng-content></ng-content>\n    </div>\n\n    @if (_hasTextSuffix) {\n      <div class="mat-mdc-form-field-text-suffix" #textSuffixContainer>\n        <ng-content select="[matTextSuffix]"></ng-content>\n      </div>\n    }\n\n    @if (_hasIconSuffix) {\n      <div class="mat-mdc-form-field-icon-suffix" #iconSuffixContainer>\n        <ng-content select="[matSuffix], [matIconSuffix]"></ng-content>\n      </div>\n    }\n  </div>\n\n  @if (!_hasOutline()) {\n    <div matFormFieldLineRipple></div>\n  }\n</div>\n\n<div\n    class="mat-mdc-form-field-subscript-wrapper mat-mdc-form-field-bottom-align"\n    [class.mat-mdc-form-field-subscript-dynamic-size]="subscriptSizing === \'dynamic\'"\n>\n  @let subscriptMessageType = _getSubscriptMessageType();\n\n  <!-- \n    Use a single permanent wrapper for both hints and errors so aria-live works correctly,\n    as having it appear post render will not consistently work. We also do not want to add\n    additional divs as it causes styling regressions.\n    -->\n  <div aria-atomic="true" aria-live="polite" \n      [class.mat-mdc-form-field-error-wrapper]="subscriptMessageType === \'error\'"\n      [class.mat-mdc-form-field-hint-wrapper]="subscriptMessageType === \'hint\'"\n    >\n    @switch (subscriptMessageType) {\n      @case (\'error\') {\n        <ng-content select="mat-error, [matError]"></ng-content>\n      }\n\n      @case (\'hint\') {\n        @if (hintLabel) {\n          <mat-hint [id]="_hintLabelId">{{hintLabel}}</mat-hint>\n        }\n        <ng-content select="mat-hint:not([align=\'end\'])"></ng-content>\n        <div class="mat-mdc-form-field-hint-spacer"></div>\n        <ng-content select="mat-hint[align=\'end\']"></ng-content>\n      }\n    }\n  </div>\n</div>\n',
2578      styles: ['.mdc-text-field{display:inline-flex;align-items:baseline;padding:0 16px;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.mdc-text-field__input{width:100%;min-width:0;border:none;border-radius:0;background:none;padding:0;-moz-appearance:none;-webkit-appearance:none;height:28px}.mdc-text-field__input::-webkit-calendar-picker-indicator{display:none}.mdc-text-field__input::-ms-clear{display:none}.mdc-text-field__input:focus{outline:none}.mdc-text-field__input:invalid{box-shadow:none}.mdc-text-field__input::placeholder{opacity:0}.mdc-text-field__input::-moz-placeholder{opacity:0}.mdc-text-field__input::-webkit-input-placeholder{opacity:0}.mdc-text-field__input:-ms-input-placeholder{opacity:0}.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mdc-text-field--focused .mdc-text-field__input::placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input::-moz-placeholder,.mdc-text-field--focused .mdc-text-field__input::-moz-placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{opacity:1}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::-moz-placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::-webkit-input-placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive:-ms-input-placeholder{opacity:0}.mdc-text-field--outlined .mdc-text-field__input,.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none !important;background-color:rgba(0,0,0,0)}.mdc-text-field--disabled .mdc-text-field__input{pointer-events:auto}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mdc-filled-text-field-input-text-color, var(--mat-sys-on-surface));caret-color:var(--mdc-filled-text-field-caret-color, var(--mat-sys-primary))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::-moz-placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mdc-filled-text-field-error-caret-color)}.mdc-text-field--filled.mdc-text-field--disabled .mdc-text-field__input{color:var(--mdc-filled-text-field-disabled-input-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mdc-outlined-text-field-input-text-color, var(--mat-sys-on-surface));caret-color:var(--mdc-outlined-text-field-caret-color, var(--mat-sys-primary))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::-moz-placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mdc-outlined-text-field-error-caret-color)}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--mdc-outlined-text-field-disabled-input-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mdc-text-field--disabled .mdc-text-field__input{background-color:Window}}.mdc-text-field--filled{height:56px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:var(--mdc-filled-text-field-container-shape, var(--mat-sys-corner-extra-small));border-top-right-radius:var(--mdc-filled-text-field-container-shape, var(--mat-sys-corner-extra-small))}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--mdc-filled-text-field-container-color, var(--mat-sys-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled{background-color:var(--mdc-filled-text-field-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 4%, transparent))}.mdc-text-field--outlined{height:56px;overflow:visible;padding-right:max(16px,var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small)));padding-left:max(16px,var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small)) + 4px)}[dir=rtl] .mdc-text-field--outlined{padding-right:max(16px,var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small)) + 4px);padding-left:max(16px,var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small)))}.mdc-floating-label{position:absolute;left:0;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform}[dir=rtl] .mdc-floating-label{right:0;left:auto;transform-origin:right top;text-align:right}.mdc-text-field .mdc-floating-label{top:50%;transform:translateY(-50%);pointer-events:none}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:auto}[dir=rtl] .mdc-text-field--outlined .mdc-floating-label{left:auto;right:4px}.mdc-text-field--filled .mdc-floating-label{left:16px;right:auto}[dir=rtl] .mdc-text-field--filled .mdc-floating-label{left:auto;right:16px}.mdc-text-field--disabled .mdc-floating-label{cursor:default}@media(forced-colors: active){.mdc-text-field--disabled .mdc-floating-label{z-index:1}}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label{display:none}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mdc-filled-text-field-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label{color:var(--mdc-filled-text-field-focus-label-text-color, var(--mat-sys-primary))}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-floating-label{color:var(--mdc-filled-text-field-hover-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-floating-label{color:var(--mdc-filled-text-field-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-floating-label{color:var(--mdc-filled-text-field-error-label-text-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mdc-floating-label{color:var(--mdc-filled-text-field-error-focus-label-text-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-floating-label{color:var(--mdc-filled-text-field-error-hover-label-text-color, var(--mat-sys-on-error-container))}.mdc-text-field--filled .mdc-floating-label{font-family:var(--mdc-filled-text-field-label-text-font, var(--mat-sys-body-large-font));font-size:var(--mdc-filled-text-field-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mdc-filled-text-field-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mdc-filled-text-field-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mdc-outlined-text-field-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label{color:var(--mdc-outlined-text-field-focus-label-text-color, var(--mat-sys-primary))}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-floating-label{color:var(--mdc-outlined-text-field-hover-label-text-color, var(--mat-sys-on-surface))}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-floating-label{color:var(--mdc-outlined-text-field-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-floating-label{color:var(--mdc-outlined-text-field-error-label-text-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mdc-floating-label{color:var(--mdc-outlined-text-field-error-focus-label-text-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-floating-label{color:var(--mdc-outlined-text-field-error-hover-label-text-color, var(--mat-sys-on-error-container))}.mdc-text-field--outlined .mdc-floating-label{font-family:var(--mdc-outlined-text-field-label-text-font, var(--mat-sys-body-large-font));font-size:var(--mdc-outlined-text-field-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mdc-outlined-text-field-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mdc-outlined-text-field-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-floating-label--float-above{cursor:auto;transform:translateY(-106%) scale(0.75)}.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) scale(1);font-size:.75rem}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:133.3333333333%}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) scale(0.75)}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:1px;margin-right:0;content:"*"}[dir=rtl] .mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:0;margin-right:1px}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] .mdc-notched-outline{text-align:right}.mdc-text-field--outlined .mdc-notched-outline{z-index:1}.mat-mdc-notch-piece{box-sizing:border-box;height:100%;pointer-events:none;border-top:1px solid;border-bottom:1px solid}.mdc-text-field--focused .mat-mdc-notch-piece{border-width:2px}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-outline-color, var(--mat-sys-outline));border-width:var(--mdc-outlined-text-field-outline-width, 1px)}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-hover-outline-color, var(--mat-sys-on-surface))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-focus-outline-color, var(--mat-sys-primary))}.mdc-text-field--outlined.mdc-text-field--disabled .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-error-outline-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--focused):hover .mdc-notched-outline .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-error-hover-outline-color, var(--mat-sys-on-error-container))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-error-focus-outline-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mat-mdc-notch-piece{border-width:var(--mdc-outlined-text-field-focus-outline-width, 2px)}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small));border-bottom-left-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small))}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px,var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small)))}[dir=rtl] .mdc-notched-outline__leading{border-left:none;border-right:1px solid;border-bottom-left-radius:0;border-top-left-radius:0;border-top-right-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small))}.mdc-notched-outline__trailing{flex-grow:1;border-left:none;border-right:1px solid;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small))}[dir=rtl] .mdc-notched-outline__trailing{border-left:1px solid;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small));border-bottom-left-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small))}.mdc-notched-outline__notch{flex:0 0 auto;width:auto}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:min(var(--mat-form-field-notch-max-width, 100%),100% - max(12px,var(--mdc-outlined-text-field-container-shape, var(--mat-sys-corner-extra-small)))*2)}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none;--mat-form-field-notch-max-width: 100%}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{display:none}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:""}.mdc-line-ripple::before{z-index:1;border-bottom-width:var(--mdc-filled-text-field-active-indicator-height, 1px)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-active-indicator-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-hover-active-indicator-color, var(--mat-sys-on-surface))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-disabled-active-indicator-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-error-active-indicator-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-error-hover-active-indicator-color, var(--mat-sys-on-error-container))}.mdc-line-ripple::after{transform:scaleX(0);opacity:0;z-index:2}.mdc-text-field--filled .mdc-line-ripple::after{border-bottom-width:var(--mdc-filled-text-field-focus-active-indicator-height, 2px)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mdc-filled-text-field-focus-active-indicator-color, var(--mat-sys-primary))}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mdc-filled-text-field-error-focus-active-indicator-color, var(--mat-sys-error))}.mdc-line-ripple--active::after{transform:scaleX(1);opacity:1}.mdc-line-ripple--deactivating::after{opacity:0}.mdc-text-field--disabled{pointer-events:none}.mat-mdc-form-field-textarea-control{vertical-align:middle;resize:vertical;box-sizing:border-box;height:auto;margin:0;padding:0;border:none;overflow:auto}.mat-mdc-form-field-input-control.mat-mdc-form-field-input-control{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font:inherit;letter-spacing:inherit;text-decoration:inherit;text-transform:inherit;border:none}.mat-mdc-form-field .mat-mdc-floating-label.mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;line-height:normal;pointer-events:all;will-change:auto}.mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-floating-label.mdc-floating-label{cursor:inherit}.mdc-text-field--no-label:not(.mdc-text-field--textarea) .mat-mdc-form-field-input-control.mdc-text-field__input,.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control{height:auto}.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control.mdc-text-field__input[type=color]{height:23px}.mat-mdc-text-field-wrapper{height:auto;flex:auto;will-change:auto}.mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-left:0;--mat-mdc-form-field-label-offset-x: -16px}.mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-right:0}[dir=rtl] .mat-mdc-text-field-wrapper{padding-left:16px;padding-right:16px}[dir=rtl] .mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-left:0}[dir=rtl] .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-right:0}.mat-form-field-disabled .mdc-text-field__input::placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-label-always-float .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .mat-mdc-floating-label{left:auto;right:auto}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-text-field__input{display:inline-block}.mat-mdc-form-field .mat-mdc-text-field-wrapper.mdc-text-field .mdc-notched-outline__notch{padding-top:0}.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field .mdc-notched-outline__notch{border-left:1px solid rgba(0,0,0,0)}[dir=rtl] .mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field .mdc-notched-outline__notch{border-left:none;border-right:1px solid rgba(0,0,0,0)}.mat-mdc-form-field-infix{min-height:var(--mat-form-field-container-height, 56px);padding-top:var(--mat-form-field-filled-with-label-container-padding-top, 24px);padding-bottom:var(--mat-form-field-filled-with-label-container-padding-bottom, 8px)}.mdc-text-field--outlined .mat-mdc-form-field-infix,.mdc-text-field--no-label .mat-mdc-form-field-infix{padding-top:var(--mat-form-field-container-vertical-padding, 16px);padding-bottom:var(--mat-form-field-container-vertical-padding, 16px)}.mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:calc(var(--mat-form-field-container-height, 56px)/2)}.mdc-text-field--filled .mat-mdc-floating-label{display:var(--mat-form-field-filled-label-display, block)}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY(calc(calc(6.75px + var(--mat-form-field-container-height, 56px) / 2) * -1)) scale(var(--mat-mdc-form-field-floating-label-scale, 0.75));transform:var(--mat-mdc-form-field-label-transform)}@keyframes _mat-form-field-subscript-animation{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.mat-mdc-form-field-subscript-wrapper{box-sizing:border-box;width:100%;position:relative}.mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-error-wrapper{position:absolute;top:0;left:0;right:0;padding:0 16px;opacity:1;transform:translateY(0);animation:_mat-form-field-subscript-animation 0ms cubic-bezier(0.55, 0, 0.55, 0.2)}.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-error-wrapper{position:static}.mat-mdc-form-field-bottom-align::before{content:"";display:inline-block;height:16px}.mat-mdc-form-field-bottom-align.mat-mdc-form-field-subscript-dynamic-size::before{content:unset}.mat-mdc-form-field-hint-end{order:1}.mat-mdc-form-field-hint-wrapper{display:flex}.mat-mdc-form-field-hint-spacer{flex:1 0 1em}.mat-mdc-form-field-error{display:block;color:var(--mat-form-field-error-text-color, var(--mat-sys-error))}.mat-mdc-form-field-subscript-wrapper,.mat-mdc-form-field-bottom-align::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-subscript-text-font, var(--mat-sys-body-small-font));line-height:var(--mat-form-field-subscript-text-line-height, var(--mat-sys-body-small-line-height));font-size:var(--mat-form-field-subscript-text-size, var(--mat-sys-body-small-size));letter-spacing:var(--mat-form-field-subscript-text-tracking, var(--mat-sys-body-small-tracking));font-weight:var(--mat-form-field-subscript-text-weight, var(--mat-sys-body-small-weight))}.mat-mdc-form-field-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;opacity:0;pointer-events:none;background-color:var(--mat-form-field-state-layer-color, var(--mat-sys-on-surface))}.mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-focus-overlay{opacity:var(--mat-form-field-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-form-field.mat-focused .mat-mdc-form-field-focus-overlay{opacity:var(--mat-form-field-focus-state-layer-opacity, 0)}select.mat-mdc-form-field-input-control{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(0,0,0,0);display:inline-flex;box-sizing:border-box}select.mat-mdc-form-field-input-control:not(:disabled){cursor:pointer}select.mat-mdc-form-field-input-control:not(.mat-mdc-native-select-inline) option{color:var(--mat-form-field-select-option-text-color, var(--mat-sys-neutral10))}select.mat-mdc-form-field-input-control:not(.mat-mdc-native-select-inline) option:disabled{color:var(--mat-form-field-select-disabled-option-text-color, color-mix(in srgb, var(--mat-sys-neutral10) 38%, transparent))}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{content:"";width:0;height:0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;position:absolute;right:0;top:50%;margin-top:-2.5px;pointer-events:none;color:var(--mat-form-field-enabled-select-arrow-color, var(--mat-sys-on-surface-variant))}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{right:auto;left:0}.mat-mdc-form-field-type-mat-native-select.mat-focused .mat-mdc-form-field-infix::after{color:var(--mat-form-field-focus-select-arrow-color, var(--mat-sys-primary))}.mat-mdc-form-field-type-mat-native-select.mat-form-field-disabled .mat-mdc-form-field-infix::after{color:var(--mat-form-field-disabled-select-arrow-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:15px}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:0;padding-left:15px}@media(forced-colors: active){.mat-form-field-appearance-fill .mat-mdc-text-field-wrapper{outline:solid 1px}}@media(forced-colors: active){.mat-form-field-appearance-fill.mat-form-field-disabled .mat-mdc-text-field-wrapper{outline-color:GrayText}}@media(forced-colors: active){.mat-form-field-appearance-fill.mat-focused .mat-mdc-text-field-wrapper{outline:dashed 3px}}@media(forced-colors: active){.mat-mdc-form-field.mat-focused .mdc-notched-outline{border:dashed 3px}}.mat-mdc-form-field-input-control[type=date],.mat-mdc-form-field-input-control[type=datetime],.mat-mdc-form-field-input-control[type=datetime-local],.mat-mdc-form-field-input-control[type=month],.mat-mdc-form-field-input-control[type=week],.mat-mdc-form-field-input-control[type=time]{line-height:1}.mat-mdc-form-field-input-control::-webkit-datetime-edit{line-height:1;padding:0;margin-bottom:-2px}.mat-mdc-form-field{--mat-mdc-form-field-floating-label-scale: 0.75;display:inline-flex;flex-direction:column;min-width:0;text-align:left;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-container-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-form-field-container-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-form-field-container-text-size, var(--mat-sys-body-large-size));letter-spacing:var(--mat-form-field-container-text-tracking, var(--mat-sys-body-large-tracking));font-weight:var(--mat-form-field-container-text-weight, var(--mat-sys-body-large-weight))}.mat-mdc-form-field .mdc-text-field--outlined .mdc-floating-label--float-above{font-size:calc(var(--mat-form-field-outlined-label-text-populated-size)*var(--mat-mdc-form-field-floating-label-scale))}.mat-mdc-form-field .mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:var(--mat-form-field-outlined-label-text-populated-size)}[dir=rtl] .mat-mdc-form-field{text-align:right}.mat-mdc-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-mdc-text-field-wrapper{width:100%;z-index:0}.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix{align-self:center;line-height:0;pointer-events:auto;position:relative;z-index:1}.mat-mdc-form-field-icon-prefix>.mat-icon,.mat-mdc-form-field-icon-suffix>.mat-icon{padding:0 12px;box-sizing:content-box}.mat-mdc-form-field-icon-prefix{color:var(--mat-form-field-leading-icon-color, var(--mat-sys-on-surface-variant))}.mat-form-field-disabled .mat-mdc-form-field-icon-prefix{color:var(--mat-form-field-disabled-leading-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-trailing-icon-color, var(--mat-sys-on-surface-variant))}.mat-form-field-disabled .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-disabled-trailing-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-invalid .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-trailing-icon-color, var(--mat-sys-error))}.mat-form-field-invalid:not(.mat-focused):not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-hover-trailing-icon-color, var(--mat-sys-on-error-container))}.mat-form-field-invalid.mat-focused .mat-mdc-text-field-wrapper .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-focus-trailing-icon-color, var(--mat-sys-error))}.mat-mdc-form-field-icon-prefix,[dir=rtl] .mat-mdc-form-field-icon-suffix{padding:0 4px 0 0}.mat-mdc-form-field-icon-suffix,[dir=rtl] .mat-mdc-form-field-icon-prefix{padding:0 0 0 4px}.mat-mdc-form-field-subscript-wrapper .mat-icon,.mat-mdc-form-field label .mat-icon{width:1em;height:1em;font-size:inherit}.mat-mdc-form-field-infix{flex:auto;min-width:0;width:180px;position:relative;box-sizing:border-box}.mat-mdc-form-field-infix:has(textarea[cols]){width:auto}.mat-mdc-form-field .mdc-notched-outline__notch{margin-left:-1px;-webkit-clip-path:inset(-9em -999em -9em 1px);clip-path:inset(-9em -999em -9em 1px)}[dir=rtl] .mat-mdc-form-field .mdc-notched-outline__notch{margin-left:0;margin-right:-1px;-webkit-clip-path:inset(-9em 1px -9em -999em);clip-path:inset(-9em 1px -9em -999em)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-floating-label{transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input{transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::-moz-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::-webkit-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::-moz-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::-moz-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before{transition-duration:75ms}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-line-ripple::after{transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field.mat-form-field-animations-enabled .mat-mdc-form-field-error-wrapper{animation-duration:300ms}.mdc-notched-outline .mdc-floating-label{max-width:calc(100% + 1px)}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:calc(133.3333333333% + 1px)}\n']
2579    }]
2580  }], () => [], {
2581    _textField: [{
2582      type: ViewChild,
2583      args: ["textField"]
2584    }],
2585    _iconPrefixContainer: [{
2586      type: ViewChild,
2587      args: ["iconPrefixContainer"]
2588    }],
2589    _textPrefixContainer: [{
2590      type: ViewChild,
2591      args: ["textPrefixContainer"]
2592    }],
2593    _iconSuffixContainer: [{
2594      type: ViewChild,
2595      args: ["iconSuffixContainer"]
2596    }],
2597    _textSuffixContainer: [{
2598      type: ViewChild,
2599      args: ["textSuffixContainer"]
2600    }],
2601    _floatingLabel: [{
2602      type: ViewChild,
2603      args: [MatFormFieldFloatingLabel]
2604    }],
2605    _notchedOutline: [{
2606      type: ViewChild,
2607      args: [MatFormFieldNotchedOutline]
2608    }],
2609    _lineRipple: [{
2610      type: ViewChild,
2611      args: [MatFormFieldLineRipple]
2612    }],
2613    _formFieldControl: [{
2614      type: ContentChild,
2615      args: [MatFormFieldControl]
2616    }],
2617    _prefixChildren: [{
2618      type: ContentChildren,
2619      args: [MAT_PREFIX, {
2620        descendants: true
2621      }]
2622    }],
2623    _suffixChildren: [{
2624      type: ContentChildren,
2625      args: [MAT_SUFFIX, {
2626        descendants: true
2627      }]
2628    }],
2629    _errorChildren: [{
2630      type: ContentChildren,
2631      args: [MAT_ERROR, {
2632        descendants: true
2633      }]
2634    }],
2635    _hintChildren: [{
2636      type: ContentChildren,
2637      args: [MatHint, {
2638        descendants: true
2639      }]
2640    }],
2641    hideRequiredMarker: [{
2642      type: Input
2643    }],
2644    color: [{
2645      type: Input
2646    }],
2647    floatLabel: [{
2648      type: Input
2649    }],
2650    appearance: [{
2651      type: Input
2652    }],
2653    subscriptSizing: [{
2654      type: Input
2655    }],
2656    hintLabel: [{
2657      type: Input
2658    }]
2659  });
2660})();
2661
vendor: 1,095 bytes, lines 2662-2685
2662// node_modules/@angular/material/fesm2022/module-BXZhw7pQ.mjs
2663var MatFormFieldModule = class _MatFormFieldModule {
2664  static \u0275fac = function MatFormFieldModule_Factory(__ngFactoryType__) {
2665    return new (__ngFactoryType__ || _MatFormFieldModule)();
2666  };
2667  static \u0275mod = /* @__PURE__ */ \u0275\u0275defineNgModule({
2668    type: _MatFormFieldModule,
2669    imports: [MatCommonModule, ObserversModule, MatFormField, MatLabel, MatError, MatHint, MatPrefix, MatSuffix],
2670    exports: [MatFormField, MatLabel, MatHint, MatError, MatPrefix, MatSuffix, MatCommonModule]
2671  });
2672  static \u0275inj = /* @__PURE__ */ \u0275\u0275defineInjector({
2673    imports: [MatCommonModule, ObserversModule, MatCommonModule]
2674  });
2675};
2676(() => {
2677  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatFormFieldModule, [{
2678    type: NgModule,
2679    args: [{
2680      imports: [MatCommonModule, ObserversModule, MatFormField, MatLabel, MatError, MatHint, MatPrefix, MatSuffix],
2681      exports: [MatFormField, MatLabel, MatHint, MatError, MatPrefix, MatSuffix, MatCommonModule]
2682    }]
2683  }], null, null);
2684})();
2685
vendor: 63,005 bytes, lines 2686-4153
2686// node_modules/@angular/material/fesm2022/module-Cbt8Fcmv.mjs
2687var _c03 = ["trigger"];
2688var _c13 = ["panel"];
2689var _c23 = [[["mat-select-trigger"]], "*"];
2690var _c33 = ["mat-select-trigger", "*"];
2691function MatSelect_Conditional_4_Template(rf, ctx) {
2692  if (rf & 1) {
2693    \u0275\u0275elementStart(0, "span", 4);
2694    \u0275\u0275text(1);
2695    \u0275\u0275elementEnd();
2696  }
2697  if (rf & 2) {
2698    const ctx_r1 = \u0275\u0275nextContext();
2699    \u0275\u0275advance();
2700    \u0275\u0275textInterpolate(ctx_r1.placeholder);
2701  }
2702}
2703function MatSelect_Conditional_5_Conditional_1_Template(rf, ctx) {
2704  if (rf & 1) {
2705    \u0275\u0275projection(0);
2706  }
2707}
2708function MatSelect_Conditional_5_Conditional_2_Template(rf, ctx) {
2709  if (rf & 1) {
2710    \u0275\u0275elementStart(0, "span", 11);
2711    \u0275\u0275text(1);
2712    \u0275\u0275elementEnd();
2713  }
2714  if (rf & 2) {
2715    const ctx_r1 = \u0275\u0275nextContext(2);
2716    \u0275\u0275advance();
2717    \u0275\u0275textInterpolate(ctx_r1.triggerValue);
2718  }
2719}
2720function MatSelect_Conditional_5_Template(rf, ctx) {
2721  if (rf & 1) {
2722    \u0275\u0275elementStart(0, "span", 5);
2723    \u0275\u0275template(1, MatSelect_Conditional_5_Conditional_1_Template, 1, 0)(2, MatSelect_Conditional_5_Conditional_2_Template, 2, 1, "span", 11);
2724    \u0275\u0275elementEnd();
2725  }
2726  if (rf & 2) {
2727    const ctx_r1 = \u0275\u0275nextContext();
2728    \u0275\u0275advance();
2729    \u0275\u0275conditional(ctx_r1.customTrigger ? 1 : 2);
2730  }
2731}
2732function MatSelect_ng_template_10_Template(rf, ctx) {
2733  if (rf & 1) {
2734    const _r3 = \u0275\u0275getCurrentView();
2735    \u0275\u0275elementStart(0, "div", 12, 1);
2736    \u0275\u0275listener("keydown", function MatSelect_ng_template_10_Template_div_keydown_0_listener($event) {
2737      \u0275\u0275restoreView(_r3);
2738      const ctx_r1 = \u0275\u0275nextContext();
2739      return \u0275\u0275resetView(ctx_r1._handleKeydown($event));
2740    });
2741    \u0275\u0275projection(2, 1);
2742    \u0275\u0275elementEnd();
2743  }
2744  if (rf & 2) {
2745    const ctx_r1 = \u0275\u0275nextContext();
2746    \u0275\u0275classMapInterpolate1("mat-mdc-select-panel mdc-menu-surface mdc-menu-surface--open ", ctx_r1._getPanelTheme(), "");
2747    \u0275\u0275classProp("mat-select-panel-animations-enabled", !ctx_r1._animationsDisabled);
2748    \u0275\u0275property("ngClass", ctx_r1.panelClass);
2749    \u0275\u0275attribute("id", ctx_r1.id + "-panel")("aria-multiselectable", ctx_r1.multiple)("aria-label", ctx_r1.ariaLabel || null)("aria-labelledby", ctx_r1._getPanelAriaLabelledby());
2750  }
2751}
2752function getMatSelectDynamicMultipleError() {
2753  return Error("Cannot change `multiple` mode of select after initialization.");
2754}
2755function getMatSelectNonArrayValueError() {
2756  return Error("Value must be an array in multiple-selection mode.");
2757}
2758function getMatSelectNonFunctionValueError() {
2759  return Error("`compareWith` must be a function.");
2760}
2761var MAT_SELECT_SCROLL_STRATEGY = new InjectionToken("mat-select-scroll-strategy", {
2762  providedIn: "root",
2763  factory: () => {
2764    const overlay = inject(Overlay);
2765    return () => overlay.scrollStrategies.reposition();
2766  }
2767});
2768function MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {
2769  return () => overlay.scrollStrategies.reposition();
2770}
2771var MAT_SELECT_CONFIG = new InjectionToken("MAT_SELECT_CONFIG");
2772var MAT_SELECT_SCROLL_STRATEGY_PROVIDER = {
2773  provide: MAT_SELECT_SCROLL_STRATEGY,
2774  deps: [Overlay],
2775  useFactory: MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY
2776};
2777var MAT_SELECT_TRIGGER = new InjectionToken("MatSelectTrigger");
2778var MatSelectChange = class {
2779  source;
2780  value;
2781  constructor(source, value) {
2782    this.source = source;
2783    this.value = value;
2784  }
2785};
2786var MatSelect = class _MatSelect {
2787  _viewportRuler = inject(ViewportRuler);
2788  _changeDetectorRef = inject(ChangeDetectorRef);
2789  _elementRef = inject(ElementRef);
2790  _dir = inject(Directionality, {
2791    optional: true
2792  });
2793  _idGenerator = inject(_IdGenerator);
2794  _renderer = inject(Renderer2);
2795  _parentFormField = inject(MAT_FORM_FIELD, {
2796    optional: true
2797  });
2798  ngControl = inject(NgControl, {
2799    self: true,
2800    optional: true
2801  });
2802  _liveAnnouncer = inject(LiveAnnouncer);
2803  _defaultOptions = inject(MAT_SELECT_CONFIG, {
2804    optional: true
2805  });
2806  _animationsDisabled = inject(ANIMATION_MODULE_TYPE, {
2807    optional: true
2808  }) === "NoopAnimations";
2809  _initialized = new Subject();
2810  _cleanupDetach;
2811  /** All of the defined select options. */
2812  options;
2813  // TODO(crisbeto): this is only necessary for the non-MDC select, but it's technically a
2814  // public API so we have to keep it. It should be deprecated and removed eventually.
2815  /** All of the defined groups of options. */
2816  optionGroups;
2817  /** User-supplied override of the trigger element. */
2818  customTrigger;
2819  /**
2820   * This position config ensures that the top "start" corner of the overlay
2821   * is aligned with with the top "start" of the origin by default (overlapping
2822   * the trigger completely). If the panel cannot fit below the trigger, it
2823   * will fall back to a position above the trigger.
2824   */
2825  _positions = [{
2826    originX: "start",
2827    originY: "bottom",
2828    overlayX: "start",
2829    overlayY: "top"
2830  }, {
2831    originX: "end",
2832    originY: "bottom",
2833    overlayX: "end",
2834    overlayY: "top"
2835  }, {
2836    originX: "start",
2837    originY: "top",
2838    overlayX: "start",
2839    overlayY: "bottom",
2840    panelClass: "mat-mdc-select-panel-above"
2841  }, {
2842    originX: "end",
2843    originY: "top",
2844    overlayX: "end",
2845    overlayY: "bottom",
2846    panelClass: "mat-mdc-select-panel-above"
2847  }];
2848  /** Scrolls a particular option into the view. */
2849  _scrollOptionIntoView(index) {
2850    const option = this.options.toArray()[index];
2851    if (option) {
2852      const panel = this.panel.nativeElement;
2853      const labelCount = _countGroupLabelsBeforeOption(index, this.options, this.optionGroups);
2854      const element = option._getHostElement();
2855      if (index === 0 && labelCount === 1) {
2856        panel.scrollTop = 0;
2857      } else {
2858        panel.scrollTop = _getOptionScrollPosition(element.offsetTop, element.offsetHeight, panel.scrollTop, panel.offsetHeight);
2859      }
2860    }
2861  }
2862  /** Called when the panel has been opened and the overlay has settled on its final position. */
2863  _positioningSettled() {
2864    this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);
2865  }
2866  /** Creates a change event object that should be emitted by the select. */
2867  _getChangeEvent(value) {
2868    return new MatSelectChange(this, value);
2869  }
2870  /** Factory function used to create a scroll strategy for this select. */
2871  _scrollStrategyFactory = inject(MAT_SELECT_SCROLL_STRATEGY);
2872  /** Whether or not the overlay panel is open. */
2873  _panelOpen = false;
2874  /** Comparison function to specify which option is displayed. Defaults to object equality. */
2875  _compareWith = (o1, o2) => o1 === o2;
2876  /** Unique id for this input. */
2877  _uid = this._idGenerator.getId("mat-select-");
2878  /** Current `aria-labelledby` value for the select trigger. */
2879  _triggerAriaLabelledBy = null;
2880  /**
2881   * Keeps track of the previous form control assigned to the select.
2882   * Used to detect if it has changed.
2883   */
2884  _previousControl;
2885  /** Emits whenever the component is destroyed. */
2886  _destroy = new Subject();
2887  /** Tracks the error state of the select. */
2888  _errorStateTracker;
2889  /**
2890   * Emits whenever the component state changes and should cause the parent
2891   * form-field to update. Implemented as part of `MatFormFieldControl`.
2892   * @docs-private
2893   */
2894  stateChanges = new Subject();
2895  /**
2896   * Disable the automatic labeling to avoid issues like #27241.
2897   * @docs-private
2898   */
2899  disableAutomaticLabeling = true;
2900  /**
2901   * Implemented as part of MatFormFieldControl.
2902   * @docs-private
2903   */
2904  userAriaDescribedBy;
2905  /** Deals with the selection logic. */
2906  _selectionModel;
2907  /** Manages keyboard events for options in the panel. */
2908  _keyManager;
2909  /** Ideal origin for the overlay panel. */
2910  _preferredOverlayOrigin;
2911  /** Width of the overlay panel. */
2912  _overlayWidth;
2913  /** `View -> model callback called when value changes` */
2914  _onChange = () => {
2915  };
2916  /** `View -> model callback called when select has been touched` */
2917  _onTouched = () => {
2918  };
2919  /** ID for the DOM node containing the select's value. */
2920  _valueId = this._idGenerator.getId("mat-select-value-");
2921  /** Strategy that will be used to handle scrolling while the select panel is open. */
2922  _scrollStrategy;
2923  _overlayPanelClass = this._defaultOptions?.overlayPanelClass || "";
2924  /** Whether the select is focused. */
2925  get focused() {
2926    return this._focused || this._panelOpen;
2927  }
2928  _focused = false;
2929  /** A name for this control that can be used by `mat-form-field`. */
2930  controlType = "mat-select";
2931  /** Trigger that opens the select. */
2932  trigger;
2933  /** Panel containing the select options. */
2934  panel;
2935  /** Overlay pane containing the options. */
2936  _overlayDir;
2937  /** Classes to be passed to the select panel. Supports the same syntax as `ngClass`. */
2938  panelClass;
2939  /** Whether the select is disabled. */
2940  disabled = false;
2941  /** Whether ripples in the select are disabled. */
2942  disableRipple = false;
2943  /** Tab index of the select. */
2944  tabIndex = 0;
2945  /** Whether checkmark indicator for single-selection options is hidden. */
2946  get hideSingleSelectionIndicator() {
2947    return this._hideSingleSelectionIndicator;
2948  }
2949  set hideSingleSelectionIndicator(value) {
2950    this._hideSingleSelectionIndicator = value;
2951    this._syncParentProperties();
2952  }
2953  _hideSingleSelectionIndicator = this._defaultOptions?.hideSingleSelectionIndicator ?? false;
2954  /** Placeholder to be shown if no value has been selected. */
2955  get placeholder() {
2956    return this._placeholder;
2957  }
2958  set placeholder(value) {
2959    this._placeholder = value;
2960    this.stateChanges.next();
2961  }
2962  _placeholder;
2963  /** Whether the component is required. */
2964  get required() {
2965    return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;
2966  }
2967  set required(value) {
2968    this._required = value;
2969    this.stateChanges.next();
2970  }
2971  _required;
2972  /** Whether the user should be allowed to select multiple options. */
2973  get multiple() {
2974    return this._multiple;
2975  }
2976  set multiple(value) {
2977    if (this._selectionModel && (typeof ngDevMode === "undefined" || ngDevMode)) {
2978      throw getMatSelectDynamicMultipleError();
2979    }
2980    this._multiple = value;
2981  }
2982  _multiple = false;
2983  /** Whether to center the active option over the trigger. */
2984  disableOptionCentering = this._defaultOptions?.disableOptionCentering ?? false;
2985  /**
2986   * Function to compare the option values with the selected values. The first argument
2987   * is a value from an option. The second is a value from the selection. A boolean
2988   * should be returned.
2989   */
2990  get compareWith() {
2991    return this._compareWith;
2992  }
2993  set compareWith(fn) {
2994    if (typeof fn !== "function" && (typeof ngDevMode === "undefined" || ngDevMode)) {
2995      throw getMatSelectNonFunctionValueError();
2996    }
2997    this._compareWith = fn;
2998    if (this._selectionModel) {
2999      this._initializeSelection();
3000    }
3001  }
3002  /** Value of the select control. */
3003  get value() {
3004    return this._value;
3005  }
3006  set value(newValue) {
3007    const hasAssigned = this._assignValue(newValue);
3008    if (hasAssigned) {
3009      this._onChange(newValue);
3010    }
3011  }
3012  _value;
3013  /** Aria label of the select. */
3014  ariaLabel = "";
3015  /** Input that can be used to specify the `aria-labelledby` attribute. */
3016  ariaLabelledby;
3017  /** Object used to control when error messages are shown. */
3018  get errorStateMatcher() {
3019    return this._errorStateTracker.matcher;
3020  }
3021  set errorStateMatcher(value) {
3022    this._errorStateTracker.matcher = value;
3023  }
3024  /** Time to wait in milliseconds after the last keystroke before moving focus to an item. */
3025  typeaheadDebounceInterval;
3026  /**
3027   * Function used to sort the values in a select in multiple mode.
3028   * Follows the same logic as `Array.prototype.sort`.
3029   */
3030  sortComparator;
3031  /** Unique id of the element. */
3032  get id() {
3033    return this._id;
3034  }
3035  set id(value) {
3036    this._id = value || this._uid;
3037    this.stateChanges.next();
3038  }
3039  _id;
3040  /** Whether the select is in an error state. */
3041  get errorState() {
3042    return this._errorStateTracker.errorState;
3043  }
3044  set errorState(value) {
3045    this._errorStateTracker.errorState = value;
3046  }
3047  /**
3048   * Width of the panel. If set to `auto`, the panel will match the trigger width.
3049   * If set to null or an empty string, the panel will grow to match the longest option's text.
3050   */
3051  panelWidth = this._defaultOptions && typeof this._defaultOptions.panelWidth !== "undefined" ? this._defaultOptions.panelWidth : "auto";
3052  /**
3053   * By default selecting an option with a `null` or `undefined` value will reset the select's
3054   * value. Enable this option if the reset behavior doesn't match your requirements and instead
3055   * the nullable options should become selected. The value of this input can be controlled app-wide
3056   * using the `MAT_SELECT_CONFIG` injection token.
3057   */
3058  canSelectNullableOptions = this._defaultOptions?.canSelectNullableOptions ?? false;
3059  /** Combined stream of all of the child options' change events. */
3060  optionSelectionChanges = defer(() => {
3061    const options = this.options;
3062    if (options) {
3063      return options.changes.pipe(startWith(options), switchMap(() => merge(...options.map((option) => option.onSelectionChange))));
3064    }
3065    return this._initialized.pipe(switchMap(() => this.optionSelectionChanges));
3066  });
3067  /** Event emitted when the select panel has been toggled. */
3068  openedChange = new EventEmitter();
3069  /** Event emitted when the select has been opened. */
3070  _openedStream = this.openedChange.pipe(filter((o) => o), map(() => {
3071  }));
3072  /** Event emitted when the select has been closed. */
3073  _closedStream = this.openedChange.pipe(filter((o) => !o), map(() => {
3074  }));
3075  /** Event emitted when the selected value has been changed by the user. */
3076  selectionChange = new EventEmitter();
3077  /**
3078   * Event that emits whenever the raw value of the select changes. This is here primarily
3079   * to facilitate the two-way binding for the `value` input.
3080   * @docs-private
3081   */
3082  valueChange = new EventEmitter();
3083  constructor() {
3084    const defaultErrorStateMatcher = inject(ErrorStateMatcher);
3085    const parentForm = inject(NgForm, {
3086      optional: true
3087    });
3088    const parentFormGroup = inject(FormGroupDirective, {
3089      optional: true
3090    });
3091    const tabIndex = inject(new HostAttributeToken("tabindex"), {
3092      optional: true
3093    });
3094    if (this.ngControl) {
3095      this.ngControl.valueAccessor = this;
3096    }
3097    if (this._defaultOptions?.typeaheadDebounceInterval != null) {
3098      this.typeaheadDebounceInterval = this._defaultOptions.typeaheadDebounceInterval;
3099    }
3100    this._errorStateTracker = new _ErrorStateTracker(defaultErrorStateMatcher, this.ngControl, parentFormGroup, parentForm, this.stateChanges);
3101    this._scrollStrategy = this._scrollStrategyFactory();
3102    this.tabIndex = tabIndex == null ? 0 : parseInt(tabIndex) || 0;
3103    this.id = this.id;
3104  }
3105  ngOnInit() {
3106    this._selectionModel = new SelectionModel(this.multiple);
3107    this.stateChanges.next();
3108    this._viewportRuler.change().pipe(takeUntil(this._destroy)).subscribe(() => {
3109      if (this.panelOpen) {
3110        this._overlayWidth = this._getOverlayWidth(this._preferredOverlayOrigin);
3111        this._changeDetectorRef.detectChanges();
3112      }
3113    });
3114  }
3115  ngAfterContentInit() {
3116    this._initialized.next();
3117    this._initialized.complete();
3118    this._initKeyManager();
3119    this._selectionModel.changed.pipe(takeUntil(this._destroy)).subscribe((event) => {
3120      event.added.forEach((option) => option.select());
3121      event.removed.forEach((option) => option.deselect());
3122    });
3123    this.options.changes.pipe(startWith(null), takeUntil(this._destroy)).subscribe(() => {
3124      this._resetOptions();
3125      this._initializeSelection();
3126    });
3127  }
3128  ngDoCheck() {
3129    const newAriaLabelledby = this._getTriggerAriaLabelledby();
3130    const ngControl = this.ngControl;
3131    if (newAriaLabelledby !== this._triggerAriaLabelledBy) {
3132      const element = this._elementRef.nativeElement;
3133      this._triggerAriaLabelledBy = newAriaLabelledby;
3134      if (newAriaLabelledby) {
3135        element.setAttribute("aria-labelledby", newAriaLabelledby);
3136      } else {
3137        element.removeAttribute("aria-labelledby");
3138      }
3139    }
3140    if (ngControl) {
3141      if (this._previousControl !== ngControl.control) {
3142        if (this._previousControl !== void 0 && ngControl.disabled !== null && ngControl.disabled !== this.disabled) {
3143          this.disabled = ngControl.disabled;
3144        }
3145        this._previousControl = ngControl.control;
3146      }
3147      this.updateErrorState();
3148    }
3149  }
3150  ngOnChanges(changes) {
3151    if (changes["disabled"] || changes["userAriaDescribedBy"]) {
3152      this.stateChanges.next();
3153    }
3154    if (changes["typeaheadDebounceInterval"] && this._keyManager) {
3155      this._keyManager.withTypeAhead(this.typeaheadDebounceInterval);
3156    }
3157  }
3158  ngOnDestroy() {
3159    this._cleanupDetach?.();
3160    this._keyManager?.destroy();
3161    this._destroy.next();
3162    this._destroy.complete();
3163    this.stateChanges.complete();
3164    this._clearFromModal();
3165  }
3166  /** Toggles the overlay panel open or closed. */
3167  toggle() {
3168    this.panelOpen ? this.close() : this.open();
3169  }
3170  /** Opens the overlay panel. */
3171  open() {
3172    if (!this._canOpen()) {
3173      return;
3174    }
3175    if (this._parentFormField) {
3176      this._preferredOverlayOrigin = this._parentFormField.getConnectedOverlayOrigin();
3177    }
3178    this._cleanupDetach?.();
3179    this._overlayWidth = this._getOverlayWidth(this._preferredOverlayOrigin);
3180    this._applyModalPanelOwnership();
3181    this._panelOpen = true;
3182    this._overlayDir.positionChange.pipe(take(1)).subscribe(() => {
3183      this._changeDetectorRef.detectChanges();
3184      this._positioningSettled();
3185    });
3186    this._overlayDir.attachOverlay();
3187    this._keyManager.withHorizontalOrientation(null);
3188    this._highlightCorrectOption();
3189    this._changeDetectorRef.markForCheck();
3190    this.stateChanges.next();
3191    Promise.resolve().then(() => this.openedChange.emit(true));
3192  }
3193  /**
3194   * Track which modal we have modified the `aria-owns` attribute of. When the combobox trigger is
3195   * inside an aria-modal, we apply aria-owns to the parent modal with the `id` of the options
3196   * panel. Track the modal we have changed so we can undo the changes on destroy.
3197   */
3198  _trackedModal = null;
3199  /**
3200   * If the autocomplete trigger is inside of an `aria-modal` element, connect
3201   * that modal to the options panel with `aria-owns`.
3202   *
3203   * For some browser + screen reader combinations, when navigation is inside
3204   * of an `aria-modal` element, the screen reader treats everything outside
3205   * of that modal as hidden or invisible.
3206   *
3207   * This causes a problem when the combobox trigger is _inside_ of a modal, because the
3208   * options panel is rendered _outside_ of that modal, preventing screen reader navigation
3209   * from reaching the panel.
3210   *
3211   * We can work around this issue by applying `aria-owns` to the modal with the `id` of
3212   * the options panel. This effectively communicates to assistive technology that the
3213   * options panel is part of the same interaction as the modal.
3214   *
3215   * At time of this writing, this issue is present in VoiceOver.
3216   * See https://github.com/angular/components/issues/20694
3217   */
3218  _applyModalPanelOwnership() {
3219    const modal = this._elementRef.nativeElement.closest('body > .cdk-overlay-container [aria-modal="true"]');
3220    if (!modal) {
3221      return;
3222    }
3223    const panelId = `${this.id}-panel`;
3224    if (this._trackedModal) {
3225      removeAriaReferencedId(this._trackedModal, "aria-owns", panelId);
3226    }
3227    addAriaReferencedId(modal, "aria-owns", panelId);
3228    this._trackedModal = modal;
3229  }
3230  /** Clears the reference to the listbox overlay element from the modal it was added to. */
3231  _clearFromModal() {
3232    if (!this._trackedModal) {
3233      return;
3234    }
3235    const panelId = `${this.id}-panel`;
3236    removeAriaReferencedId(this._trackedModal, "aria-owns", panelId);
3237    this._trackedModal = null;
3238  }
3239  /** Closes the overlay panel and focuses the host element. */
3240  close() {
3241    if (this._panelOpen) {
3242      this._panelOpen = false;
3243      this._exitAndDetach();
3244      this._keyManager.withHorizontalOrientation(this._isRtl() ? "rtl" : "ltr");
3245      this._changeDetectorRef.markForCheck();
3246      this._onTouched();
3247      this.stateChanges.next();
3248      Promise.resolve().then(() => this.openedChange.emit(false));
3249    }
3250  }
3251  /** Triggers the exit animation and detaches the overlay at the end. */
3252  _exitAndDetach() {
3253    if (this._animationsDisabled || !this.panel) {
3254      this._detachOverlay();
3255      return;
3256    }
3257    this._cleanupDetach?.();
3258    this._cleanupDetach = () => {
3259      cleanupEvent();
3260      clearTimeout(exitFallbackTimer);
3261      this._cleanupDetach = void 0;
3262    };
3263    const panel = this.panel.nativeElement;
3264    const cleanupEvent = this._renderer.listen(panel, "animationend", (event) => {
3265      if (event.animationName === "_mat-select-exit") {
3266        this._cleanupDetach?.();
3267        this._detachOverlay();
3268      }
3269    });
3270    const exitFallbackTimer = setTimeout(() => {
3271      this._cleanupDetach?.();
3272      this._detachOverlay();
3273    }, 200);
3274    panel.classList.add("mat-select-panel-exit");
3275  }
3276  /** Detaches the current overlay directive. */
3277  _detachOverlay() {
3278    this._overlayDir.detachOverlay();
3279    this._changeDetectorRef.markForCheck();
3280  }
3281  /**
3282   * Sets the select's value. Part of the ControlValueAccessor interface
3283   * required to integrate with Angular's core forms API.
3284   *
3285   * @param value New value to be written to the model.
3286   */
3287  writeValue(value) {
3288    this._assignValue(value);
3289  }
3290  /**
3291   * Saves a callback function to be invoked when the select's value
3292   * changes from user input. Part of the ControlValueAccessor interface
3293   * required to integrate with Angular's core forms API.
3294   *
3295   * @param fn Callback to be triggered when the value changes.
3296   */
3297  registerOnChange(fn) {
3298    this._onChange = fn;
3299  }
3300  /**
3301   * Saves a callback function to be invoked when the select is blurred
3302   * by the user. Part of the ControlValueAccessor interface required
3303   * to integrate with Angular's core forms API.
3304   *
3305   * @param fn Callback to be triggered when the component has been touched.
3306   */
3307  registerOnTouched(fn) {
3308    this._onTouched = fn;
3309  }
3310  /**
3311   * Disables the select. Part of the ControlValueAccessor interface required
3312   * to integrate with Angular's core forms API.
3313   *
3314   * @param isDisabled Sets whether the component is disabled.
3315   */
3316  setDisabledState(isDisabled) {
3317    this.disabled = isDisabled;
3318    this._changeDetectorRef.markForCheck();
3319    this.stateChanges.next();
3320  }
3321  /** Whether or not the overlay panel is open. */
3322  get panelOpen() {
3323    return this._panelOpen;
3324  }
3325  /** The currently selected option. */
3326  get selected() {
3327    return this.multiple ? this._selectionModel?.selected || [] : this._selectionModel?.selected[0];
3328  }
3329  /** The value displayed in the trigger. */
3330  get triggerValue() {
3331    if (this.empty) {
3332      return "";
3333    }
3334    if (this._multiple) {
3335      const selectedOptions = this._selectionModel.selected.map((option) => option.viewValue);
3336      if (this._isRtl()) {
3337        selectedOptions.reverse();
3338      }
3339      return selectedOptions.join(", ");
3340    }
3341    return this._selectionModel.selected[0].viewValue;
3342  }
3343  /** Refreshes the error state of the select. */
3344  updateErrorState() {
3345    this._errorStateTracker.updateErrorState();
3346  }
3347  /** Whether the element is in RTL mode. */
3348  _isRtl() {
3349    return this._dir ? this._dir.value === "rtl" : false;
3350  }
3351  /** Handles all keydown events on the select. */
3352  _handleKeydown(event) {
3353    if (!this.disabled) {
3354      this.panelOpen ? this._handleOpenKeydown(event) : this._handleClosedKeydown(event);
3355    }
3356  }
3357  /** Handles keyboard events while the select is closed. */
3358  _handleClosedKeydown(event) {
3359    const keyCode = event.keyCode;
3360    const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW || keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW;
3361    const isOpenKey = keyCode === ENTER || keyCode === SPACE;
3362    const manager = this._keyManager;
3363    if (!manager.isTyping() && isOpenKey && !hasModifierKey(event) || (this.multiple || event.altKey) && isArrowKey) {
3364      event.preventDefault();
3365      this.open();
3366    } else if (!this.multiple) {
3367      const previouslySelectedOption = this.selected;
3368      manager.onKeydown(event);
3369      const selectedOption = this.selected;
3370      if (selectedOption && previouslySelectedOption !== selectedOption) {
3371        this._liveAnnouncer.announce(selectedOption.viewValue, 1e4);
3372      }
3373    }
3374  }
3375  /** Handles keyboard events when the selected is open. */
3376  _handleOpenKeydown(event) {
3377    const manager = this._keyManager;
3378    const keyCode = event.keyCode;
3379    const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;
3380    const isTyping = manager.isTyping();
3381    if (isArrowKey && event.altKey) {
3382      event.preventDefault();
3383      this.close();
3384    } else if (!isTyping && (keyCode === ENTER || keyCode === SPACE) && manager.activeItem && !hasModifierKey(event)) {
3385      event.preventDefault();
3386      manager.activeItem._selectViaInteraction();
3387    } else if (!isTyping && this._multiple && keyCode === A && event.ctrlKey) {
3388      event.preventDefault();
3389      const hasDeselectedOptions = this.options.some((opt) => !opt.disabled && !opt.selected);
3390      this.options.forEach((option) => {
3391        if (!option.disabled) {
3392          hasDeselectedOptions ? option.select() : option.deselect();
3393        }
3394      });
3395    } else {
3396      const previouslyFocusedIndex = manager.activeItemIndex;
3397      manager.onKeydown(event);
3398      if (this._multiple && isArrowKey && event.shiftKey && manager.activeItem && manager.activeItemIndex !== previouslyFocusedIndex) {
3399        manager.activeItem._selectViaInteraction();
3400      }
3401    }
3402  }
3403  /** Handles keyboard events coming from the overlay. */
3404  _handleOverlayKeydown(event) {
3405    if (event.keyCode === ESCAPE && !hasModifierKey(event)) {
3406      event.preventDefault();
3407      this.close();
3408    }
3409  }
3410  _onFocus() {
3411    if (!this.disabled) {
3412      this._focused = true;
3413      this.stateChanges.next();
3414    }
3415  }
3416  /**
3417   * Calls the touched callback only if the panel is closed. Otherwise, the trigger will
3418   * "blur" to the panel when it opens, causing a false positive.
3419   */
3420  _onBlur() {
3421    this._focused = false;
3422    this._keyManager?.cancelTypeahead();
3423    if (!this.disabled && !this.panelOpen) {
3424      this._onTouched();
3425      this._changeDetectorRef.markForCheck();
3426      this.stateChanges.next();
3427    }
3428  }
3429  /** Returns the theme to be used on the panel. */
3430  _getPanelTheme() {
3431    return this._parentFormField ? `mat-${this._parentFormField.color}` : "";
3432  }
3433  /** Whether the select has a value. */
3434  get empty() {
3435    return !this._selectionModel || this._selectionModel.isEmpty();
3436  }
3437  _initializeSelection() {
3438    Promise.resolve().then(() => {
3439      if (this.ngControl) {
3440        this._value = this.ngControl.value;
3441      }
3442      this._setSelectionByValue(this._value);
3443      this.stateChanges.next();
3444    });
3445  }
3446  /**
3447   * Sets the selected option based on a value. If no option can be
3448   * found with the designated value, the select trigger is cleared.
3449   */
3450  _setSelectionByValue(value) {
3451    this.options.forEach((option) => option.setInactiveStyles());
3452    this._selectionModel.clear();
3453    if (this.multiple && value) {
3454      if (!Array.isArray(value) && (typeof ngDevMode === "undefined" || ngDevMode)) {
3455        throw getMatSelectNonArrayValueError();
3456      }
3457      value.forEach((currentValue) => this._selectOptionByValue(currentValue));
3458      this._sortValues();
3459    } else {
3460      const correspondingOption = this._selectOptionByValue(value);
3461      if (correspondingOption) {
3462        this._keyManager.updateActiveItem(correspondingOption);
3463      } else if (!this.panelOpen) {
3464        this._keyManager.updateActiveItem(-1);
3465      }
3466    }
3467    this._changeDetectorRef.markForCheck();
3468  }
3469  /**
3470   * Finds and selects and option based on its value.
3471   * @returns Option that has the corresponding value.
3472   */
3473  _selectOptionByValue(value) {
3474    const correspondingOption = this.options.find((option) => {
3475      if (this._selectionModel.isSelected(option)) {
3476        return false;
3477      }
3478      try {
3479        return (option.value != null || this.canSelectNullableOptions) && this._compareWith(option.value, value);
3480      } catch (error) {
3481        if (typeof ngDevMode === "undefined" || ngDevMode) {
3482          console.warn(error);
3483        }
3484        return false;
3485      }
3486    });
3487    if (correspondingOption) {
3488      this._selectionModel.select(correspondingOption);
3489    }
3490    return correspondingOption;
3491  }
3492  /** Assigns a specific value to the select. Returns whether the value has changed. */
3493  _assignValue(newValue) {
3494    if (newValue !== this._value || this._multiple && Array.isArray(newValue)) {
3495      if (this.options) {
3496        this._setSelectionByValue(newValue);
3497      }
3498      this._value = newValue;
3499      return true;
3500    }
3501    return false;
3502  }
3503  // `skipPredicate` determines if key manager should avoid putting a given option in the tab
3504  // order. Allow disabled list items to receive focus via keyboard to align with WAI ARIA
3505  // recommendation.
3506  //
3507  // Normally WAI ARIA's instructions are to exclude disabled items from the tab order, but it
3508  // makes a few exceptions for compound widgets.
3509  //
3510  // From [Developing a Keyboard Interface](
3511  // https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/):
3512  //   "For the following composite widget elements, keep them focusable when disabled: Options in a
3513  //   Listbox..."
3514  //
3515  // The user can focus disabled options using the keyboard, but the user cannot click disabled
3516  // options.
3517  _skipPredicate = (option) => {
3518    if (this.panelOpen) {
3519      return false;
3520    }
3521    return option.disabled;
3522  };
3523  /** Gets how wide the overlay panel should be. */
3524  _getOverlayWidth(preferredOrigin) {
3525    if (this.panelWidth === "auto") {
3526      const refToMeasure = preferredOrigin instanceof CdkOverlayOrigin ? preferredOrigin.elementRef : preferredOrigin || this._elementRef;
3527      return refToMeasure.nativeElement.getBoundingClientRect().width;
3528    }
3529    return this.panelWidth === null ? "" : this.panelWidth;
3530  }
3531  /** Syncs the parent state with the individual options. */
3532  _syncParentProperties() {
3533    if (this.options) {
3534      for (const option of this.options) {
3535        option._changeDetectorRef.markForCheck();
3536      }
3537    }
3538  }
3539  /** Sets up a key manager to listen to keyboard events on the overlay panel. */
3540  _initKeyManager() {
3541    this._keyManager = new ActiveDescendantKeyManager(this.options).withTypeAhead(this.typeaheadDebounceInterval).withVerticalOrientation().withHorizontalOrientation(this._isRtl() ? "rtl" : "ltr").withHomeAndEnd().withPageUpDown().withAllowedModifierKeys(["shiftKey"]).skipPredicate(this._skipPredicate);
3542    this._keyManager.tabOut.subscribe(() => {
3543      if (this.panelOpen) {
3544        if (!this.multiple && this._keyManager.activeItem) {
3545          this._keyManager.activeItem._selectViaInteraction();
3546        }
3547        this.focus();
3548        this.close();
3549      }
3550    });
3551    this._keyManager.change.subscribe(() => {
3552      if (this._panelOpen && this.panel) {
3553        this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);
3554      } else if (!this._panelOpen && !this.multiple && this._keyManager.activeItem) {
3555        this._keyManager.activeItem._selectViaInteraction();
3556      }
3557    });
3558  }
3559  /** Drops current option subscriptions and IDs and resets from scratch. */
3560  _resetOptions() {
3561    const changedOrDestroyed = merge(this.options.changes, this._destroy);
3562    this.optionSelectionChanges.pipe(takeUntil(changedOrDestroyed)).subscribe((event) => {
3563      this._onSelect(event.source, event.isUserInput);
3564      if (event.isUserInput && !this.multiple && this._panelOpen) {
3565        this.close();
3566        this.focus();
3567      }
3568    });
3569    merge(...this.options.map((option) => option._stateChanges)).pipe(takeUntil(changedOrDestroyed)).subscribe(() => {
3570      this._changeDetectorRef.detectChanges();
3571      this.stateChanges.next();
3572    });
3573  }
3574  /** Invoked when an option is clicked. */
3575  _onSelect(option, isUserInput) {
3576    const wasSelected = this._selectionModel.isSelected(option);
3577    if (!this.canSelectNullableOptions && option.value == null && !this._multiple) {
3578      option.deselect();
3579      this._selectionModel.clear();
3580      if (this.value != null) {
3581        this._propagateChanges(option.value);
3582      }
3583    } else {
3584      if (wasSelected !== option.selected) {
3585        option.selected ? this._selectionModel.select(option) : this._selectionModel.deselect(option);
3586      }
3587      if (isUserInput) {
3588        this._keyManager.setActiveItem(option);
3589      }
3590      if (this.multiple) {
3591        this._sortValues();
3592        if (isUserInput) {
3593          this.focus();
3594        }
3595      }
3596    }
3597    if (wasSelected !== this._selectionModel.isSelected(option)) {
3598      this._propagateChanges();
3599    }
3600    this.stateChanges.next();
3601  }
3602  /** Sorts the selected values in the selected based on their order in the panel. */
3603  _sortValues() {
3604    if (this.multiple) {
3605      const options = this.options.toArray();
3606      this._selectionModel.sort((a, b) => {
3607        return this.sortComparator ? this.sortComparator(a, b, options) : options.indexOf(a) - options.indexOf(b);
3608      });
3609      this.stateChanges.next();
3610    }
3611  }
3612  /** Emits change event to set the model value. */
3613  _propagateChanges(fallbackValue) {
3614    let valueToEmit;
3615    if (this.multiple) {
3616      valueToEmit = this.selected.map((option) => option.value);
3617    } else {
3618      valueToEmit = this.selected ? this.selected.value : fallbackValue;
3619    }
3620    this._value = valueToEmit;
3621    this.valueChange.emit(valueToEmit);
3622    this._onChange(valueToEmit);
3623    this.selectionChange.emit(this._getChangeEvent(valueToEmit));
3624    this._changeDetectorRef.markForCheck();
3625  }
3626  /**
3627   * Highlights the selected item. If no option is selected, it will highlight
3628   * the first *enabled* option.
3629   */
3630  _highlightCorrectOption() {
3631    if (this._keyManager) {
3632      if (this.empty) {
3633        let firstEnabledOptionIndex = -1;
3634        for (let index = 0; index < this.options.length; index++) {
3635          const option = this.options.get(index);
3636          if (!option.disabled) {
3637            firstEnabledOptionIndex = index;
3638            break;
3639          }
3640        }
3641        this._keyManager.setActiveItem(firstEnabledOptionIndex);
3642      } else {
3643        this._keyManager.setActiveItem(this._selectionModel.selected[0]);
3644      }
3645    }
3646  }
3647  /** Whether the panel is allowed to open. */
3648  _canOpen() {
3649    return !this._panelOpen && !this.disabled && this.options?.length > 0 && !!this._overlayDir;
3650  }
3651  /** Focuses the select element. */
3652  focus(options) {
3653    this._elementRef.nativeElement.focus(options);
3654  }
3655  /** Gets the aria-labelledby for the select panel. */
3656  _getPanelAriaLabelledby() {
3657    if (this.ariaLabel) {
3658      return null;
3659    }
3660    const labelId = this._parentFormField?.getLabelId() || null;
3661    const labelExpression = labelId ? labelId + " " : "";
3662    return this.ariaLabelledby ? labelExpression + this.ariaLabelledby : labelId;
3663  }
3664  /** Determines the `aria-activedescendant` to be set on the host. */
3665  _getAriaActiveDescendant() {
3666    if (this.panelOpen && this._keyManager && this._keyManager.activeItem) {
3667      return this._keyManager.activeItem.id;
3668    }
3669    return null;
3670  }
3671  /** Gets the aria-labelledby of the select component trigger. */
3672  _getTriggerAriaLabelledby() {
3673    if (this.ariaLabel) {
3674      return null;
3675    }
3676    let value = this._parentFormField?.getLabelId() || "";
3677    if (this.ariaLabelledby) {
3678      value += " " + this.ariaLabelledby;
3679    }
3680    if (!value) {
3681      value = this._valueId;
3682    }
3683    return value;
3684  }
3685  /**
3686   * Implemented as part of MatFormFieldControl.
3687   * @docs-private
3688   */
3689  setDescribedByIds(ids) {
3690    if (ids.length) {
3691      this._elementRef.nativeElement.setAttribute("aria-describedby", ids.join(" "));
3692    } else {
3693      this._elementRef.nativeElement.removeAttribute("aria-describedby");
3694    }
3695  }
3696  /**
3697   * Implemented as part of MatFormFieldControl.
3698   * @docs-private
3699   */
3700  onContainerClick() {
3701    this.focus();
3702    this.open();
3703  }
3704  /**
3705   * Implemented as part of MatFormFieldControl.
3706   * @docs-private
3707   */
3708  get shouldLabelFloat() {
3709    return this.panelOpen || !this.empty || this.focused && !!this.placeholder;
3710  }
3711  static \u0275fac = function MatSelect_Factory(__ngFactoryType__) {
3712    return new (__ngFactoryType__ || _MatSelect)();
3713  };
3714  static \u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({
3715    type: _MatSelect,
3716    selectors: [["mat-select"]],
3717    contentQueries: function MatSelect_ContentQueries(rf, ctx, dirIndex) {
3718      if (rf & 1) {
3719        \u0275\u0275contentQuery(dirIndex, MAT_SELECT_TRIGGER, 5);
3720        \u0275\u0275contentQuery(dirIndex, MatOption, 5);
3721        \u0275\u0275contentQuery(dirIndex, MAT_OPTGROUP, 5);
3722      }
3723      if (rf & 2) {
3724        let _t;
3725        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx.customTrigger = _t.first);
3726        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx.options = _t);
3727        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx.optionGroups = _t);
3728      }
3729    },
3730    viewQuery: function MatSelect_Query(rf, ctx) {
3731      if (rf & 1) {
3732        \u0275\u0275viewQuery(_c03, 5);
3733        \u0275\u0275viewQuery(_c13, 5);
3734        \u0275\u0275viewQuery(CdkConnectedOverlay, 5);
3735      }
3736      if (rf & 2) {
3737        let _t;
3738        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx.trigger = _t.first);
3739        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx.panel = _t.first);
3740        \u0275\u0275queryRefresh(_t = \u0275\u0275loadQuery()) && (ctx._overlayDir = _t.first);
3741      }
3742    },
3743    hostAttrs: ["role", "combobox", "aria-haspopup", "listbox", 1, "mat-mdc-select"],
3744    hostVars: 19,
3745    hostBindings: function MatSelect_HostBindings(rf, ctx) {
3746      if (rf & 1) {
3747        \u0275\u0275listener("keydown", function MatSelect_keydown_HostBindingHandler($event) {
3748          return ctx._handleKeydown($event);
3749        })("focus", function MatSelect_focus_HostBindingHandler() {
3750          return ctx._onFocus();
3751        })("blur", function MatSelect_blur_HostBindingHandler() {
3752          return ctx._onBlur();
3753        });
3754      }
3755      if (rf & 2) {
3756        \u0275\u0275attribute("id", ctx.id)("tabindex", ctx.disabled ? -1 : ctx.tabIndex)("aria-controls", ctx.panelOpen ? ctx.id + "-panel" : null)("aria-expanded", ctx.panelOpen)("aria-label", ctx.ariaLabel || null)("aria-required", ctx.required.toString())("aria-disabled", ctx.disabled.toString())("aria-invalid", ctx.errorState)("aria-activedescendant", ctx._getAriaActiveDescendant());
3757        \u0275\u0275classProp("mat-mdc-select-disabled", ctx.disabled)("mat-mdc-select-invalid", ctx.errorState)("mat-mdc-select-required", ctx.required)("mat-mdc-select-empty", ctx.empty)("mat-mdc-select-multiple", ctx.multiple);
3758      }
3759    },
3760    inputs: {
3761      userAriaDescribedBy: [0, "aria-describedby", "userAriaDescribedBy"],
3762      panelClass: "panelClass",
3763      disabled: [2, "disabled", "disabled", booleanAttribute],
3764      disableRipple: [2, "disableRipple", "disableRipple", booleanAttribute],
3765      tabIndex: [2, "tabIndex", "tabIndex", (value) => value == null ? 0 : numberAttribute(value)],
3766      hideSingleSelectionIndicator: [2, "hideSingleSelectionIndicator", "hideSingleSelectionIndicator", booleanAttribute],
3767      placeholder: "placeholder",
3768      required: [2, "required", "required", booleanAttribute],
3769      multiple: [2, "multiple", "multiple", booleanAttribute],
3770      disableOptionCentering: [2, "disableOptionCentering", "disableOptionCentering", booleanAttribute],
3771      compareWith: "compareWith",
3772      value: "value",
3773      ariaLabel: [0, "aria-label", "ariaLabel"],
3774      ariaLabelledby: [0, "aria-labelledby", "ariaLabelledby"],
3775      errorStateMatcher: "errorStateMatcher",
3776      typeaheadDebounceInterval: [2, "typeaheadDebounceInterval", "typeaheadDebounceInterval", numberAttribute],
3777      sortComparator: "sortComparator",
3778      id: "id",
3779      panelWidth: "panelWidth",
3780      canSelectNullableOptions: [2, "canSelectNullableOptions", "canSelectNullableOptions", booleanAttribute]
3781    },
3782    outputs: {
3783      openedChange: "openedChange",
3784      _openedStream: "opened",
3785      _closedStream: "closed",
3786      selectionChange: "selectionChange",
3787      valueChange: "valueChange"
3788    },
3789    exportAs: ["matSelect"],
3790    features: [\u0275\u0275ProvidersFeature([{
3791      provide: MatFormFieldControl,
3792      useExisting: _MatSelect
3793    }, {
3794      provide: MAT_OPTION_PARENT_COMPONENT,
3795      useExisting: _MatSelect
3796    }]), \u0275\u0275NgOnChangesFeature],
3797    ngContentSelectors: _c33,
3798    decls: 11,
3799    vars: 9,
3800    consts: [["fallbackOverlayOrigin", "cdkOverlayOrigin", "trigger", ""], ["panel", ""], ["cdk-overlay-origin", "", 1, "mat-mdc-select-trigger", 3, "click"], [1, "mat-mdc-select-value"], [1, "mat-mdc-select-placeholder", "mat-mdc-select-min-line"], [1, "mat-mdc-select-value-text"], [1, "mat-mdc-select-arrow-wrapper"], [1, "mat-mdc-select-arrow"], ["viewBox", "0 0 24 24", "width", "24px", "height", "24px", "focusable", "false", "aria-hidden", "true"], ["d", "M7 10l5 5 5-5z"], ["cdk-connected-overlay", "", "cdkConnectedOverlayLockPosition", "", "cdkConnectedOverlayHasBackdrop", "", "cdkConnectedOverlayBackdropClass", "cdk-overlay-transparent-backdrop", 3, "detach", "backdropClick", "overlayKeydown", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayWidth", "cdkConnectedOverlayFlexibleDimensions"], [1, "mat-mdc-select-min-line"], ["role", "listbox", "tabindex", "-1", 3, "keydown", "ngClass"]],
3801    template: function MatSelect_Template(rf, ctx) {
3802      if (rf & 1) {
3803        const _r1 = \u0275\u0275getCurrentView();
3804        \u0275\u0275projectionDef(_c23);
3805        \u0275\u0275elementStart(0, "div", 2, 0);
3806        \u0275\u0275listener("click", function MatSelect_Template_div_click_0_listener() {
3807          \u0275\u0275restoreView(_r1);
3808          return \u0275\u0275resetView(ctx.open());
3809        });
3810        \u0275\u0275elementStart(3, "div", 3);
3811        \u0275\u0275template(4, MatSelect_Conditional_4_Template, 2, 1, "span", 4)(5, MatSelect_Conditional_5_Template, 3, 1, "span", 5);
3812        \u0275\u0275elementEnd();
3813        \u0275\u0275elementStart(6, "div", 6)(7, "div", 7);
3814        \u0275\u0275namespaceSVG();
3815        \u0275\u0275elementStart(8, "svg", 8);
3816        \u0275\u0275element(9, "path", 9);
3817        \u0275\u0275elementEnd()()()();
3818        \u0275\u0275template(10, MatSelect_ng_template_10_Template, 3, 10, "ng-template", 10);
3819        \u0275\u0275listener("detach", function MatSelect_Template_ng_template_detach_10_listener() {
3820          \u0275\u0275restoreView(_r1);
3821          return \u0275\u0275resetView(ctx.close());
3822        })("backdropClick", function MatSelect_Template_ng_template_backdropClick_10_listener() {
3823          \u0275\u0275restoreView(_r1);
3824          return \u0275\u0275resetView(ctx.close());
3825        })("overlayKeydown", function MatSelect_Template_ng_template_overlayKeydown_10_listener($event) {
3826          \u0275\u0275restoreView(_r1);
3827          return \u0275\u0275resetView(ctx._handleOverlayKeydown($event));
3828        });
3829      }
3830      if (rf & 2) {
3831        const fallbackOverlayOrigin_r4 = \u0275\u0275reference(1);
3832        \u0275\u0275advance(3);
3833        \u0275\u0275attribute("id", ctx._valueId);
3834        \u0275\u0275advance();
3835        \u0275\u0275conditional(ctx.empty ? 4 : 5);
3836        \u0275\u0275advance(6);
3837        \u0275\u0275property("cdkConnectedOverlayDisableClose", true)("cdkConnectedOverlayPanelClass", ctx._overlayPanelClass)("cdkConnectedOverlayScrollStrategy", ctx._scrollStrategy)("cdkConnectedOverlayOrigin", ctx._preferredOverlayOrigin || fallbackOverlayOrigin_r4)("cdkConnectedOverlayPositions", ctx._positions)("cdkConnectedOverlayWidth", ctx._overlayWidth)("cdkConnectedOverlayFlexibleDimensions", true);
3838      }
3839    },
3840    dependencies: [CdkOverlayOrigin, CdkConnectedOverlay, NgClass],
3841    styles: ['@keyframes _mat-select-enter{from{opacity:0;transform:scaleY(0.8)}to{opacity:1;transform:none}}@keyframes _mat-select-exit{from{opacity:1}to{opacity:0}}.mat-mdc-select{display:inline-block;width:100%;outline:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:var(--mat-select-enabled-trigger-text-color, var(--mat-sys-on-surface));font-family:var(--mat-select-trigger-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-select-trigger-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-select-trigger-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-select-trigger-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-select-trigger-text-tracking, var(--mat-sys-body-large-tracking))}div.mat-mdc-select-panel{box-shadow:var(--mat-select-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12))}.mat-mdc-select-disabled{color:var(--mat-select-disabled-trigger-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-select-disabled .mat-mdc-select-placeholder{color:var(--mat-select-disabled-trigger-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-mdc-select-disabled .mat-mdc-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-mdc-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-mdc-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-mdc-select-arrow-wrapper{height:24px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mdc-text-field--no-label .mat-mdc-select-arrow-wrapper{transform:none}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-invalid .mat-mdc-select-arrow,.mat-form-field-invalid:not(.mat-form-field-disabled) .mat-mdc-form-field-infix::after{color:var(--mat-select-invalid-arrow-color, var(--mat-sys-error))}.mat-mdc-select-arrow{width:10px;height:5px;position:relative;color:var(--mat-select-enabled-arrow-color, var(--mat-sys-on-surface-variant))}.mat-mdc-form-field.mat-focused .mat-mdc-select-arrow{color:var(--mat-select-focused-arrow-color, var(--mat-sys-primary))}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-disabled .mat-mdc-select-arrow{color:var(--mat-select-disabled-arrow-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-select-arrow svg{fill:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}@media(forced-colors: active){.mat-mdc-select-arrow svg{fill:CanvasText}.mat-mdc-select-disabled .mat-mdc-select-arrow svg{fill:GrayText}}div.mat-mdc-select-panel{width:100%;max-height:275px;outline:0;overflow:auto;padding:8px 0;border-radius:4px;box-sizing:border-box;position:relative;background-color:var(--mat-select-panel-background-color, var(--mat-sys-surface-container))}@media(forced-colors: active){div.mat-mdc-select-panel{outline:solid 1px}}.cdk-overlay-pane:not(.mat-mdc-select-panel-above) div.mat-mdc-select-panel{border-top-left-radius:0;border-top-right-radius:0;transform-origin:top center}.mat-mdc-select-panel-above div.mat-mdc-select-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:bottom center}.mat-select-panel-animations-enabled{animation:_mat-select-enter 120ms cubic-bezier(0, 0, 0.2, 1)}.mat-select-panel-animations-enabled.mat-select-panel-exit{animation:_mat-select-exit 100ms linear}.mat-mdc-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);color:var(--mat-select-placeholder-text-color, var(--mat-sys-on-surface-variant))}.mat-mdc-form-field:not(.mat-form-field-animations-enabled) .mat-mdc-select-placeholder,._mat-animation-noopable .mat-mdc-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-mdc-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-mdc-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper{cursor:pointer}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mat-mdc-floating-label{max-width:calc(100% - 18px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mdc-floating-label--float-above{max-width:calc(100%/0.75 - 24px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-text-field--label-floating .mdc-notched-outline__notch{max-width:calc(100% - 24px)}.mat-mdc-select-min-line:empty::before{content:" ";white-space:pre;width:1px;display:inline-block;visibility:hidden}.mat-form-field-appearance-fill .mat-mdc-select-arrow-wrapper{transform:var(--mat-select-arrow-transform, translateY(-8px))}\n'],
3842    encapsulation: 2,
3843    changeDetection: 0
3844  });
3845};
3846(() => {
3847  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatSelect, [{
3848    type: Component,
3849    args: [{
3850      selector: "mat-select",
3851      exportAs: "matSelect",
3852      encapsulation: ViewEncapsulation.None,
3853      changeDetection: ChangeDetectionStrategy.OnPush,
3854      host: {
3855        "role": "combobox",
3856        "aria-haspopup": "listbox",
3857        "class": "mat-mdc-select",
3858        "[attr.id]": "id",
3859        "[attr.tabindex]": "disabled ? -1 : tabIndex",
3860        "[attr.aria-controls]": 'panelOpen ? id + "-panel" : null',
3861        "[attr.aria-expanded]": "panelOpen",
3862        "[attr.aria-label]": "ariaLabel || null",
3863        "[attr.aria-required]": "required.toString()",
3864        "[attr.aria-disabled]": "disabled.toString()",
3865        "[attr.aria-invalid]": "errorState",
3866        "[attr.aria-activedescendant]": "_getAriaActiveDescendant()",
3867        "[class.mat-mdc-select-disabled]": "disabled",
3868        "[class.mat-mdc-select-invalid]": "errorState",
3869        "[class.mat-mdc-select-required]": "required",
3870        "[class.mat-mdc-select-empty]": "empty",
3871        "[class.mat-mdc-select-multiple]": "multiple",
3872        "(keydown)": "_handleKeydown($event)",
3873        "(focus)": "_onFocus()",
3874        "(blur)": "_onBlur()"
3875      },
3876      providers: [{
3877        provide: MatFormFieldControl,
3878        useExisting: MatSelect
3879      }, {
3880        provide: MAT_OPTION_PARENT_COMPONENT,
3881        useExisting: MatSelect
3882      }],
3883      imports: [CdkOverlayOrigin, CdkConnectedOverlay, NgClass],
3884      template: `<div cdk-overlay-origin
3885     class="mat-mdc-select-trigger"
3886     (click)="open()"
3887     #fallbackOverlayOrigin="cdkOverlayOrigin"
3888     #trigger>
3889
3890  <div class="mat-mdc-select-value" [attr.id]="_valueId">
3891    @if (empty) {
3892      <span class="mat-mdc-select-placeholder mat-mdc-select-min-line">{{placeholder}}</span>
3893    } @else {
3894      <span class="mat-mdc-select-value-text">
3895        @if (customTrigger) {
3896          <ng-content select="mat-select-trigger"></ng-content>
3897        } @else {
3898          <span class="mat-mdc-select-min-line">{{triggerValue}}</span>
3899        }
3900      </span>
3901    }
3902  </div>
3903
3904  <div class="mat-mdc-select-arrow-wrapper">
3905    <div class="mat-mdc-select-arrow">
3906      <!-- Use an inline SVG, because it works better than a CSS triangle in high contrast mode. -->
3907      <svg viewBox="0 0 24 24" width="24px" height="24px" focusable="false" aria-hidden="true">
3908        <path d="M7 10l5 5 5-5z"/>
3909      </svg>
3910    </div>
3911  </div>
3912</div>
3913
3914<ng-template
3915  cdk-connected-overlay
3916  cdkConnectedOverlayLockPosition
3917  cdkConnectedOverlayHasBackdrop
3918  cdkConnectedOverlayBackdropClass="cdk-overlay-transparent-backdrop"
3919  [cdkConnectedOverlayDisableClose]="true"
3920  [cdkConnectedOverlayPanelClass]="_overlayPanelClass"
3921  [cdkConnectedOverlayScrollStrategy]="_scrollStrategy"
3922  [cdkConnectedOverlayOrigin]="_preferredOverlayOrigin || fallbackOverlayOrigin"
3923  [cdkConnectedOverlayPositions]="_positions"
3924  [cdkConnectedOverlayWidth]="_overlayWidth"
3925  [cdkConnectedOverlayFlexibleDimensions]="true"
3926  (detach)="close()"
3927  (backdropClick)="close()"
3928  (overlayKeydown)="_handleOverlayKeydown($event)">
3929  <div
3930    #panel
3931    role="listbox"
3932    tabindex="-1"
3933    class="mat-mdc-select-panel mdc-menu-surface mdc-menu-surface--open {{ _getPanelTheme() }}"
3934    [class.mat-select-panel-animations-enabled]="!_animationsDisabled"
3935    [attr.id]="id + '-panel'"
3936    [attr.aria-multiselectable]="multiple"
3937    [attr.aria-label]="ariaLabel || null"
3938    [attr.aria-labelledby]="_getPanelAriaLabelledby()"
3939    [ngClass]="panelClass"
3940    (keydown)="_handleKeydown($event)">
3941    <ng-content></ng-content>
3942  </div>
3943</ng-template>
3944`,
3945      styles: ['@keyframes _mat-select-enter{from{opacity:0;transform:scaleY(0.8)}to{opacity:1;transform:none}}@keyframes _mat-select-exit{from{opacity:1}to{opacity:0}}.mat-mdc-select{display:inline-block;width:100%;outline:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:var(--mat-select-enabled-trigger-text-color, var(--mat-sys-on-surface));font-family:var(--mat-select-trigger-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-select-trigger-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-select-trigger-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-select-trigger-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-select-trigger-text-tracking, var(--mat-sys-body-large-tracking))}div.mat-mdc-select-panel{box-shadow:var(--mat-select-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12))}.mat-mdc-select-disabled{color:var(--mat-select-disabled-trigger-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-select-disabled .mat-mdc-select-placeholder{color:var(--mat-select-disabled-trigger-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-mdc-select-disabled .mat-mdc-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-mdc-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-mdc-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-mdc-select-arrow-wrapper{height:24px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mdc-text-field--no-label .mat-mdc-select-arrow-wrapper{transform:none}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-invalid .mat-mdc-select-arrow,.mat-form-field-invalid:not(.mat-form-field-disabled) .mat-mdc-form-field-infix::after{color:var(--mat-select-invalid-arrow-color, var(--mat-sys-error))}.mat-mdc-select-arrow{width:10px;height:5px;position:relative;color:var(--mat-select-enabled-arrow-color, var(--mat-sys-on-surface-variant))}.mat-mdc-form-field.mat-focused .mat-mdc-select-arrow{color:var(--mat-select-focused-arrow-color, var(--mat-sys-primary))}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-disabled .mat-mdc-select-arrow{color:var(--mat-select-disabled-arrow-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-select-arrow svg{fill:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}@media(forced-colors: active){.mat-mdc-select-arrow svg{fill:CanvasText}.mat-mdc-select-disabled .mat-mdc-select-arrow svg{fill:GrayText}}div.mat-mdc-select-panel{width:100%;max-height:275px;outline:0;overflow:auto;padding:8px 0;border-radius:4px;box-sizing:border-box;position:relative;background-color:var(--mat-select-panel-background-color, var(--mat-sys-surface-container))}@media(forced-colors: active){div.mat-mdc-select-panel{outline:solid 1px}}.cdk-overlay-pane:not(.mat-mdc-select-panel-above) div.mat-mdc-select-panel{border-top-left-radius:0;border-top-right-radius:0;transform-origin:top center}.mat-mdc-select-panel-above div.mat-mdc-select-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:bottom center}.mat-select-panel-animations-enabled{animation:_mat-select-enter 120ms cubic-bezier(0, 0, 0.2, 1)}.mat-select-panel-animations-enabled.mat-select-panel-exit{animation:_mat-select-exit 100ms linear}.mat-mdc-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);color:var(--mat-select-placeholder-text-color, var(--mat-sys-on-surface-variant))}.mat-mdc-form-field:not(.mat-form-field-animations-enabled) .mat-mdc-select-placeholder,._mat-animation-noopable .mat-mdc-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-mdc-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-mdc-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper{cursor:pointer}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mat-mdc-floating-label{max-width:calc(100% - 18px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mdc-floating-label--float-above{max-width:calc(100%/0.75 - 24px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-text-field--label-floating .mdc-notched-outline__notch{max-width:calc(100% - 24px)}.mat-mdc-select-min-line:empty::before{content:" ";white-space:pre;width:1px;display:inline-block;visibility:hidden}.mat-form-field-appearance-fill .mat-mdc-select-arrow-wrapper{transform:var(--mat-select-arrow-transform, translateY(-8px))}\n']
3946    }]
3947  }], () => [], {
3948    options: [{
3949      type: ContentChildren,
3950      args: [MatOption, {
3951        descendants: true
3952      }]
3953    }],
3954    optionGroups: [{
3955      type: ContentChildren,
3956      args: [MAT_OPTGROUP, {
3957        descendants: true
3958      }]
3959    }],
3960    customTrigger: [{
3961      type: ContentChild,
3962      args: [MAT_SELECT_TRIGGER]
3963    }],
3964    userAriaDescribedBy: [{
3965      type: Input,
3966      args: ["aria-describedby"]
3967    }],
3968    trigger: [{
3969      type: ViewChild,
3970      args: ["trigger"]
3971    }],
3972    panel: [{
3973      type: ViewChild,
3974      args: ["panel"]
3975    }],
3976    _overlayDir: [{
3977      type: ViewChild,
3978      args: [CdkConnectedOverlay]
3979    }],
3980    panelClass: [{
3981      type: Input
3982    }],
3983    disabled: [{
3984      type: Input,
3985      args: [{
3986        transform: booleanAttribute
3987      }]
3988    }],
3989    disableRipple: [{
3990      type: Input,
3991      args: [{
3992        transform: booleanAttribute
3993      }]
3994    }],
3995    tabIndex: [{
3996      type: Input,
3997      args: [{
3998        transform: (value) => value == null ? 0 : numberAttribute(value)
3999      }]
4000    }],
4001    hideSingleSelectionIndicator: [{
4002      type: Input,
4003      args: [{
4004        transform: booleanAttribute
4005      }]
4006    }],
4007    placeholder: [{
4008      type: Input
4009    }],
4010    required: [{
4011      type: Input,
4012      args: [{
4013        transform: booleanAttribute
4014      }]
4015    }],
4016    multiple: [{
4017      type: Input,
4018      args: [{
4019        transform: booleanAttribute
4020      }]
4021    }],
4022    disableOptionCentering: [{
4023      type: Input,
4024      args: [{
4025        transform: booleanAttribute
4026      }]
4027    }],
4028    compareWith: [{
4029      type: Input
4030    }],
4031    value: [{
4032      type: Input
4033    }],
4034    ariaLabel: [{
4035      type: Input,
4036      args: ["aria-label"]
4037    }],
4038    ariaLabelledby: [{
4039      type: Input,
4040      args: ["aria-labelledby"]
4041    }],
4042    errorStateMatcher: [{
4043      type: Input
4044    }],
4045    typeaheadDebounceInterval: [{
4046      type: Input,
4047      args: [{
4048        transform: numberAttribute
4049      }]
4050    }],
4051    sortComparator: [{
4052      type: Input
4053    }],
4054    id: [{
4055      type: Input
4056    }],
4057    panelWidth: [{
4058      type: Input
4059    }],
4060    canSelectNullableOptions: [{
4061      type: Input,
4062      args: [{
4063        transform: booleanAttribute
4064      }]
4065    }],
4066    openedChange: [{
4067      type: Output
4068    }],
4069    _openedStream: [{
4070      type: Output,
4071      args: ["opened"]
4072    }],
4073    _closedStream: [{
4074      type: Output,
4075      args: ["closed"]
4076    }],
4077    selectionChange: [{
4078      type: Output
4079    }],
4080    valueChange: [{
4081      type: Output
4082    }]
4083  });
4084})();
4085var MatSelectTrigger = class _MatSelectTrigger {
4086  static \u0275fac = function MatSelectTrigger_Factory(__ngFactoryType__) {
4087    return new (__ngFactoryType__ || _MatSelectTrigger)();
4088  };
4089  static \u0275dir = /* @__PURE__ */ \u0275\u0275defineDirective({
4090    type: _MatSelectTrigger,
4091    selectors: [["mat-select-trigger"]],
4092    features: [\u0275\u0275ProvidersFeature([{
4093      provide: MAT_SELECT_TRIGGER,
4094      useExisting: _MatSelectTrigger
4095    }])]
4096  });
4097};
4098(() => {
4099  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatSelectTrigger, [{
4100    type: Directive,
4101    args: [{
4102      selector: "mat-select-trigger",
4103      providers: [{
4104        provide: MAT_SELECT_TRIGGER,
4105        useExisting: MatSelectTrigger
4106      }]
4107    }]
4108  }], null, null);
4109})();
4110var MatSelectModule = class _MatSelectModule {
4111  static \u0275fac = function MatSelectModule_Factory(__ngFactoryType__) {
4112    return new (__ngFactoryType__ || _MatSelectModule)();
4113  };
4114  static \u0275mod = /* @__PURE__ */ \u0275\u0275defineNgModule({
4115    type: _MatSelectModule,
4116    imports: [OverlayModule, MatOptionModule, MatCommonModule, MatSelect, MatSelectTrigger],
4117    exports: [CdkScrollableModule, MatFormFieldModule, MatSelect, MatSelectTrigger, MatOptionModule, MatCommonModule]
4118  });
4119  static \u0275inj = /* @__PURE__ */ \u0275\u0275defineInjector({
4120    providers: [MAT_SELECT_SCROLL_STRATEGY_PROVIDER],
4121    imports: [OverlayModule, MatOptionModule, MatCommonModule, CdkScrollableModule, MatFormFieldModule, MatOptionModule, MatCommonModule]
4122  });
4123};
4124(() => {
4125  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatSelectModule, [{
4126    type: NgModule,
4127    args: [{
4128      imports: [OverlayModule, MatOptionModule, MatCommonModule, MatSelect, MatSelectTrigger],
4129      exports: [CdkScrollableModule, MatFormFieldModule, MatSelect, MatSelectTrigger, MatOptionModule, MatCommonModule],
4130      providers: [MAT_SELECT_SCROLL_STRATEGY_PROVIDER]
4131    }]
4132  }], null, null);
4133})();
4134
4135export {
4136  _ErrorStateTracker,
4137  DateAdapter,
4138  MAT_DATE_FORMATS,
4139  ErrorStateMatcher,
4140  MatOption,
4141  MatOptionModule,
4142  MatNativeDateModule,
4143  provideNativeDateAdapter,
4144  MatLabel,
4145  MatSuffix,
4146  MatFormFieldControl,
4147  MAT_FORM_FIELD,
4148  MatFormFieldModule,
4149  MatSelect,
4150  MatSelectTrigger,
4151  MatSelectModule
4152};
4153//# sourceMappingURL=chunk-7TYMEGCE.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.