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.