@mxtommy/kip 3.9.0-beta.2 → 3.9.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/copilot-instructions.md +1 -1
- package/.github/instructions/angular.instructions.md +46 -0
- package/README.md +49 -12
- package/package.json +2 -4
- package/public/3rdpartylicenses.txt +77 -77
- package/public/app-help.component.css.map +7 -0
- package/public/app.component.css.map +7 -0
- package/public/assets/help-docs/configuration.md +4 -4
- package/public/assets/help-docs/dashboards.md +4 -2
- package/public/assets/svg/icons.svg +1 -1
- package/public/boolean-control-config.component.css.map +7 -0
- package/public/boolean-multicontrol-options.component.css.map +7 -0
- package/public/chunk-3EWIS24B.js +5237 -0
- package/public/chunk-3EWIS24B.js.map +1 -0
- package/public/chunk-3VR3EA35.js +1022 -0
- package/public/chunk-3VR3EA35.js.map +1 -0
- package/public/chunk-63ILPRXC.js +2091 -0
- package/public/chunk-63ILPRXC.js.map +1 -0
- package/public/chunk-65ZWQBS6.js +3102 -0
- package/public/chunk-65ZWQBS6.js.map +1 -0
- package/public/chunk-B3LKEWZP.js +4950 -0
- package/public/chunk-B3LKEWZP.js.map +1 -0
- package/public/chunk-BIBIW64D.js +16773 -0
- package/public/chunk-BIBIW64D.js.map +1 -0
- package/public/chunk-BM53SC5N.js +77 -0
- package/public/chunk-BM53SC5N.js.map +7 -0
- package/public/chunk-D7ILNFDM.js +3059 -0
- package/public/chunk-D7ILNFDM.js.map +1 -0
- package/public/chunk-E24UNLSJ.js +2228 -0
- package/public/chunk-E24UNLSJ.js.map +1 -0
- package/public/chunk-J42S2ELC.js +5927 -0
- package/public/chunk-J42S2ELC.js.map +1 -0
- package/public/chunk-KC22A6VH.js +17 -0
- package/public/chunk-KC22A6VH.js.map +7 -0
- package/public/chunk-MCEJWZB2.js +116 -0
- package/public/chunk-MCEJWZB2.js.map +1 -0
- package/public/chunk-NBF6SE6O.js +89 -0
- package/public/chunk-NBF6SE6O.js.map +7 -0
- package/public/chunk-QC7VGVAR.js +343 -0
- package/public/chunk-QC7VGVAR.js.map +7 -0
- package/public/chunk-SDOP6T56.js +42377 -0
- package/public/chunk-SDOP6T56.js.map +1 -0
- package/public/chunk-U2DCSTRY.js +159 -0
- package/public/chunk-U2DCSTRY.js.map +7 -0
- package/public/chunk-UHVNAEXC.js +4752 -0
- package/public/chunk-UHVNAEXC.js.map +1 -0
- package/public/chunk-UQYTD5AC.js +2723 -0
- package/public/chunk-UQYTD5AC.js.map +1 -0
- package/public/chunk-XSABJ5NZ.js +272 -0
- package/public/chunk-XSABJ5NZ.js.map +7 -0
- package/public/chunk-Y6N6O2IP.js +19852 -0
- package/public/chunk-Y6N6O2IP.js.map +1 -0
- package/public/chunk-YGJLBLOX.js +2708 -0
- package/public/chunk-YGJLBLOX.js.map +1 -0
- package/public/chunk-YT33DHC3.js +591 -0
- package/public/chunk-YT33DHC3.js.map +7 -0
- package/public/chunk-YZXYVP72.js +4934 -0
- package/public/chunk-YZXYVP72.js.map +1 -0
- package/public/chunk-ZEHRDSTB.js +13727 -0
- package/public/chunk-ZEHRDSTB.js.map +1 -0
- package/public/config.component.css.map +7 -0
- package/public/dashboard-scroller.component.css.map +7 -0
- package/public/dashboard.component.css.map +7 -0
- package/public/dashboards-editor.component.css.map +7 -0
- package/public/data-inspector-row.component.css.map +7 -0
- package/public/data-inspector.component.css.map +7 -0
- package/public/dataset-chart-options.component.css.map +7 -0
- package/public/datasets.component.css.map +7 -0
- package/public/dialog-confirmation.component.css.map +7 -0
- package/public/dialog-dashboard-page-editor.component.css.map +7 -0
- package/public/dialog-frame.component.css.map +7 -0
- package/public/dialog-name.component.css.map +7 -0
- package/public/display-chart-options.component.css.map +7 -0
- package/public/display.component.css.map +7 -0
- package/public/gauge-steel.component.css.map +7 -0
- package/public/home.component.css.map +7 -0
- package/public/index.html +19 -17
- package/public/main.js +36423 -0
- package/public/main.js.map +1 -0
- package/public/menu-actions.component.css.map +7 -0
- package/public/menu-notifications.component.css.map +7 -0
- package/public/minichart.component.css.map +7 -0
- package/public/modal-user-credential.component.css.map +7 -0
- package/public/modal-widget-config.component.css.map +7 -0
- package/public/notification-badge.component.css.map +7 -0
- package/public/page-header.component.css.map +7 -0
- package/public/path-control-config.component.css.map +7 -0
- package/public/paths-options.component.css.map +7 -0
- package/public/polyfills.js +4422 -0
- package/public/polyfills.js.map +1 -0
- package/public/select-autopilot.component.css.map +7 -0
- package/public/select-icon.component.css.map +7 -0
- package/public/settings.component.css.map +7 -0
- package/public/signalk.component.css.map +7 -0
- package/public/styles.css +1651 -0
- package/public/styles.css.map +7 -0
- package/public/svg-autopilot.component.css.map +7 -0
- package/public/svg-racesteer.component.css.map +7 -0
- package/public/svg-simple-linear-gauge.component.css.map +7 -0
- package/public/svg-windsteer.component.css.map +7 -0
- package/public/tile-large-icon.component.css.map +7 -0
- package/public/units.component.css.map +7 -0
- package/public/upgrade-config.component.css.map +7 -0
- package/public/widget-autopilot.component.css.map +7 -0
- package/public/widget-boolean-switch.component.css.map +7 -0
- package/public/widget-datetime.component.css.map +7 -0
- package/public/widget-freeboardsk.component.css.map +7 -0
- package/public/widget-gauge-ng-compass.component.css.map +7 -0
- package/public/widget-gauge-ng-linear.component.css.map +7 -0
- package/public/widget-gauge-ng-radial.component.css.map +7 -0
- package/public/widget-gauge-steel.component.css.map +7 -0
- package/public/widget-horizon.component.css.map +7 -0
- package/public/widget-host.component.css.map +7 -0
- package/public/widget-iframe.component.css.map +7 -0
- package/public/widget-label.component.css.map +7 -0
- package/public/widget-list-card.component.css.map +7 -0
- package/public/widget-numeric.component.css.map +7 -0
- package/public/widget-position.component.css.map +7 -0
- package/public/widget-race-timer.component.css.map +7 -0
- package/public/widget-racer-line.component.css.map +7 -0
- package/public/widget-racer-timer.component.css.map +7 -0
- package/public/widget-simple-linear.component.css.map +7 -0
- package/public/widget-slider.component.css.map +7 -0
- package/public/widget-text.component.css.map +7 -0
- package/public/widget-title.component.css.map +7 -0
- package/public/widget-tutorial.component.css.map +7 -0
- package/public/widgets-list.component.css.map +7 -0
- package/public/assets/hammer.min.js +0 -7
- package/public/chunk-2YVW3TBK.js +0 -2
- package/public/chunk-35L7BBBD.js +0 -15
- package/public/chunk-3LEMFOCV.js +0 -3
- package/public/chunk-3LJAKLLW.js +0 -1
- package/public/chunk-4JJLPUET.js +0 -60
- package/public/chunk-CBUY7NMR.js +0 -2
- package/public/chunk-CQXWGD3T.js +0 -2
- package/public/chunk-EUFDL4TJ.js +0 -6
- package/public/chunk-FBFTGVZ6.js +0 -1
- package/public/chunk-HCXH72CD.js +0 -5
- package/public/chunk-JY3WVS7C.js +0 -2
- package/public/chunk-KTDDP73O.js +0 -2
- package/public/chunk-NMEZOCU2.js +0 -1
- package/public/chunk-NS2FPVWM.js +0 -4
- package/public/chunk-OSYHJB4F.js +0 -11
- package/public/chunk-PKNLASTF.js +0 -4
- package/public/chunk-Q2Y75POI.js +0 -1
- package/public/chunk-RRTCHHRC.js +0 -3
- package/public/chunk-TA4GACKT.js +0 -4
- package/public/chunk-TXPLRBW5.js +0 -2
- package/public/chunk-VHFBF47T.js +0 -1
- package/public/chunk-VYUMZVH2.js +0 -2
- package/public/chunk-XRGAX4LS.js +0 -2
- package/public/chunk-YNJRIFUM.js +0 -1
- package/public/chunk-ZBCOJLI4.js +0 -6
- package/public/main-XM5EHMUE.js +0 -50
- package/public/polyfills-KH22MU6U.js +0 -2
- package/public/styles-RECKN66R.css +0 -1
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP-ILKS6RVC.woff2 → KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ-MJ3CERJ6.woff2 → KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP-UW3XWY7P.woff2 → KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP-U3JTBV4H.woff2 → KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP-36ULTGLY.woff2 → KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP-5NJLO2HW.woff2 → KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP-2EL65J2O.woff2 → KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP-XWLWMQVU.woff2 → KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ-PWGJWDFE.woff2 → KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP-ITB7NUJC.woff2 → KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP-32PLHKPQ.woff2 → KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP-QPSNQEDD.woff2 → KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP-JKBSJZY3.woff2 → KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP-OG5AHRIX.woff2 → KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz-PPTELUJT.woff2 → KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu4mxKKTU1Kg-SNGEW7FX.woff2 → KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz-DRL4U32S.woff2 → KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu72xKKTU1Kvnz-PRJ7OQMU.woff2 → KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz-HW6RMPJ3.woff2 → KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz-KZD6JQRT.woff2 → KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz-Z72STTMG.woff2 → KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ-CN2J7AYH.woff2 → flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["src/app/core/services/connection-state-machine.service.ts","src/app/core/services/signalk-connection.service.ts","src/app/core/services/authentication.service.ts","node_modules/compare-versions/lib/esm/utils.js","node_modules/compare-versions/lib/esm/compareVersions.js","node_modules/compare-versions/lib/esm/compare.js","src/app/core/services/storage.service.ts","src/app/core/utils/uuid.util.ts","src/default-config/config.blank.notification.const.ts","src/default-config/config.blank.units.const.ts","src/default-config/config.blank.const.ts","src/default-config/config.demo.const.ts","src/app/core/services/app-settings.service.ts","node_modules/lodash-es/_listCacheClear.js","node_modules/lodash-es/eq.js","node_modules/lodash-es/_assocIndexOf.js","node_modules/lodash-es/_listCacheDelete.js","node_modules/lodash-es/_listCacheGet.js","node_modules/lodash-es/_listCacheHas.js","node_modules/lodash-es/_listCacheSet.js","node_modules/lodash-es/_ListCache.js","node_modules/lodash-es/_stackClear.js","node_modules/lodash-es/_stackDelete.js","node_modules/lodash-es/_stackGet.js","node_modules/lodash-es/_stackHas.js","node_modules/lodash-es/_freeGlobal.js","node_modules/lodash-es/_root.js","node_modules/lodash-es/_Symbol.js","node_modules/lodash-es/_getRawTag.js","node_modules/lodash-es/_objectToString.js","node_modules/lodash-es/_baseGetTag.js","node_modules/lodash-es/isObject.js","node_modules/lodash-es/isFunction.js","node_modules/lodash-es/_coreJsData.js","node_modules/lodash-es/_isMasked.js","node_modules/lodash-es/_toSource.js","node_modules/lodash-es/_baseIsNative.js","node_modules/lodash-es/_getValue.js","node_modules/lodash-es/_getNative.js","node_modules/lodash-es/_Map.js","node_modules/lodash-es/_nativeCreate.js","node_modules/lodash-es/_hashClear.js","node_modules/lodash-es/_hashDelete.js","node_modules/lodash-es/_hashGet.js","node_modules/lodash-es/_hashHas.js","node_modules/lodash-es/_hashSet.js","node_modules/lodash-es/_Hash.js","node_modules/lodash-es/_mapCacheClear.js","node_modules/lodash-es/_isKeyable.js","node_modules/lodash-es/_getMapData.js","node_modules/lodash-es/_mapCacheDelete.js","node_modules/lodash-es/_mapCacheGet.js","node_modules/lodash-es/_mapCacheHas.js","node_modules/lodash-es/_mapCacheSet.js","node_modules/lodash-es/_MapCache.js","node_modules/lodash-es/_stackSet.js","node_modules/lodash-es/_Stack.js","node_modules/lodash-es/_arrayEach.js","node_modules/lodash-es/_defineProperty.js","node_modules/lodash-es/_baseAssignValue.js","node_modules/lodash-es/_assignValue.js","node_modules/lodash-es/_copyObject.js","node_modules/lodash-es/_baseTimes.js","node_modules/lodash-es/isObjectLike.js","node_modules/lodash-es/_baseIsArguments.js","node_modules/lodash-es/isArguments.js","node_modules/lodash-es/isArray.js","node_modules/lodash-es/stubFalse.js","node_modules/lodash-es/isBuffer.js","node_modules/lodash-es/_isIndex.js","node_modules/lodash-es/isLength.js","node_modules/lodash-es/_baseIsTypedArray.js","node_modules/lodash-es/_baseUnary.js","node_modules/lodash-es/_nodeUtil.js","node_modules/lodash-es/isTypedArray.js","node_modules/lodash-es/_arrayLikeKeys.js","node_modules/lodash-es/_isPrototype.js","node_modules/lodash-es/_overArg.js","node_modules/lodash-es/_nativeKeys.js","node_modules/lodash-es/_baseKeys.js","node_modules/lodash-es/isArrayLike.js","node_modules/lodash-es/keys.js","node_modules/lodash-es/_baseAssign.js","node_modules/lodash-es/_nativeKeysIn.js","node_modules/lodash-es/_baseKeysIn.js","node_modules/lodash-es/keysIn.js","node_modules/lodash-es/_baseAssignIn.js","node_modules/lodash-es/_cloneBuffer.js","node_modules/lodash-es/_copyArray.js","node_modules/lodash-es/_arrayFilter.js","node_modules/lodash-es/stubArray.js","node_modules/lodash-es/_getSymbols.js","node_modules/lodash-es/_copySymbols.js","node_modules/lodash-es/_arrayPush.js","node_modules/lodash-es/_getPrototype.js","node_modules/lodash-es/_getSymbolsIn.js","node_modules/lodash-es/_copySymbolsIn.js","node_modules/lodash-es/_baseGetAllKeys.js","node_modules/lodash-es/_getAllKeys.js","node_modules/lodash-es/_getAllKeysIn.js","node_modules/lodash-es/_DataView.js","node_modules/lodash-es/_Promise.js","node_modules/lodash-es/_Set.js","node_modules/lodash-es/_WeakMap.js","node_modules/lodash-es/_getTag.js","node_modules/lodash-es/_initCloneArray.js","node_modules/lodash-es/_Uint8Array.js","node_modules/lodash-es/_cloneArrayBuffer.js","node_modules/lodash-es/_cloneDataView.js","node_modules/lodash-es/_cloneRegExp.js","node_modules/lodash-es/_cloneSymbol.js","node_modules/lodash-es/_cloneTypedArray.js","node_modules/lodash-es/_initCloneByTag.js","node_modules/lodash-es/_baseCreate.js","node_modules/lodash-es/_initCloneObject.js","node_modules/lodash-es/_baseIsMap.js","node_modules/lodash-es/isMap.js","node_modules/lodash-es/_baseIsSet.js","node_modules/lodash-es/isSet.js","node_modules/lodash-es/_baseClone.js","node_modules/lodash-es/cloneDeep.js","node_modules/rxjs/dist/esm/internal/observable/dom/WebSocketSubject.js","node_modules/rxjs/dist/esm/internal/observable/dom/webSocket.js","src/app/core/services/signalk-delta.service.ts","node_modules/lodash-es/identity.js","node_modules/lodash-es/_apply.js","node_modules/lodash-es/_shortOut.js","node_modules/lodash-es/constant.js","node_modules/lodash-es/_baseSetToString.js","node_modules/lodash-es/_setToString.js","node_modules/lodash-es/_overRest.js","node_modules/lodash-es/_baseRest.js","node_modules/lodash-es/_isIterateeCall.js","node_modules/lodash-es/_createAssigner.js","node_modules/lodash-es/isPlainObject.js","node_modules/lodash-es/_setCacheAdd.js","node_modules/lodash-es/_setCacheHas.js","node_modules/lodash-es/_SetCache.js","node_modules/lodash-es/_arraySome.js","node_modules/lodash-es/_cacheHas.js","node_modules/lodash-es/_equalArrays.js","node_modules/lodash-es/_mapToArray.js","node_modules/lodash-es/_setToArray.js","node_modules/lodash-es/_equalByTag.js","node_modules/lodash-es/_equalObjects.js","node_modules/lodash-es/_baseIsEqualDeep.js","node_modules/lodash-es/_baseIsEqual.js","node_modules/lodash-es/_createBaseFor.js","node_modules/lodash-es/_baseFor.js","node_modules/lodash-es/_assignMergeValue.js","node_modules/lodash-es/isArrayLikeObject.js","node_modules/lodash-es/_safeGet.js","node_modules/lodash-es/toPlainObject.js","node_modules/lodash-es/_baseMergeDeep.js","node_modules/lodash-es/_baseMerge.js","node_modules/lodash-es/isEqual.js","node_modules/lodash-es/merge.js","src/app/core/interfaces/signalk-interfaces.ts","src/app/core/services/data.service.ts","node_modules/@angular/cdk/fesm2022/dialog.mjs","node_modules/@angular/material/fesm2022/module-Cz4ZB2Wr.mjs","node_modules/@angular/forms/fesm2022/forms.mjs","node_modules/@angular/cdk/fesm2022/observers/private.mjs","node_modules/@angular/material/fesm2022/form-field-C_dE1cl0.mjs","node_modules/@angular/material/fesm2022/module-ko3UutPV.mjs","node_modules/@angular/cdk/fesm2022/text-field.mjs","node_modules/@angular/material/fesm2022/input-value-accessor-D1GvPuqO.mjs","node_modules/@angular/material/fesm2022/error-options-DCNQlTOA.mjs","node_modules/@angular/material/fesm2022/error-state-Dtb1IHM-.mjs","node_modules/@angular/material/fesm2022/input.mjs"],"sourcesContent":["import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Connection state enumeration\n */\nexport enum ConnectionState {\n Disconnected = 'Disconnected',\n HTTPDiscovering = 'HTTPDiscovering',\n HTTPConnected = 'HTTPConnected',\n HTTPError = 'HTTPError',\n HTTPRetrying = 'HTTPRetrying',\n WebSocketConnecting = 'WebSocketConnecting',\n Connected = 'Connected',\n WebSocketError = 'WebSocketError',\n WebSocketRetrying = 'WebSocketRetrying',\n PermanentFailure = 'PermanentFailure'\n}\n\n/**\n * Connection status interface for notifications\n */\nexport interface IConnectionStatus {\n state: ConnectionState;\n operation: number; // Legacy operation codes for compatibility\n message: string;\n retryCount?: number;\n maxRetries?: number;\n timestamp: Date;\n}\n\n/**\n * Connection configuration interface\n */\nexport interface IConnectionConfig {\n httpRetryCount: number;\n webSocketRetryCount: number;\n retryIntervals: number[];\n notificationDebounceMs: number;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConnectionStateMachine implements OnDestroy {\n private readonly config: IConnectionConfig = {\n httpRetryCount: 3,\n webSocketRetryCount: 5,\n retryIntervals: [2000, 3000, 5000], // Exponential backoff: 2s, 3s, 5s\n notificationDebounceMs: 0\n };\n\n // State management\n private _currentState$ = new BehaviorSubject<ConnectionState>(ConnectionState.Disconnected);\n private _status$ = new BehaviorSubject<IConnectionStatus>(this.createStatus(ConnectionState.Disconnected, 'Not connected'));\n\n // Retry tracking\n private _httpRetryCount = 0;\n private _webSocketRetryCount = 0;\n private _retryTimeout: NodeJS.Timeout | null = null;\n private _notificationTimeout: NodeJS.Timeout | null = null;\n\n // Retry callback for HTTP requests\n private _httpRetryCallback: (() => void) | null = null;\n\n // Retry callback for WebSocket requests\n private _webSocketRetryCallback: (() => void) | null = null;\n\n // Mode tracking for APP_INITIALIZER compatibility\n private _isInitializationMode = true;\n\n constructor() {\n console.log('[ConnectionStateMachine] Service initialized');\n }\n\n /**\n * Get current connection state as observable\n */\n public get state$(): Observable<ConnectionState> {\n return this._currentState$.asObservable();\n }\n\n /**\n * Get current connection status as observable (for notifications)\n */\n public get status$(): Observable<IConnectionStatus> {\n return this._status$.asObservable();\n }\n\n /**\n * Get current state value\n */\n public get currentState(): ConnectionState {\n return this._currentState$.getValue();\n }\n\n /**\n * Enable full functionality after APP_INITIALIZER completes\n */\n public enableWebSocketMode(): void {\n this._isInitializationMode = false;\n console.log('[ConnectionStateMachine] WebSocket mode enabled');\n\n // Ensure current status is emitted for components that start after initialization\n const currentStatus = this._status$.getValue();\n console.log(`[ConnectionStateMachine] Current status when enabling WebSocket mode: ${currentStatus.state} - ${currentStatus.message}`);\n this._status$.next(currentStatus);\n }\n\n /**\n * Set the HTTP retry callback function\n */\n public setHTTPRetryCallback(callback: () => void): void {\n this._httpRetryCallback = callback;\n }\n\n /**\n * Set the WebSocket retry callback function\n */\n public setWebSocketRetryCallback(callback: () => void): void {\n this._webSocketRetryCallback = callback;\n }\n\n /**\n * Start HTTP discovery process\n */\n public startHTTPDiscovery(reason = 'Connection request'): void {\n console.log(`[ConnectionStateMachine] Starting HTTP discovery: ${reason}`);\n this._httpRetryCount = 0;\n this.setState(ConnectionState.HTTPDiscovering, 'Discovering Signal K server...');\n }\n\n /**\n * HTTP discovery succeeded\n */\n public onHTTPDiscoverySuccess(): void {\n console.log('[ConnectionStateMachine] HTTP discovery successful');\n this._httpRetryCount = 0;\n this.setState(ConnectionState.HTTPConnected, 'Signal K server discovered');\n\n // Only proceed to WebSocket if not in initialization mode\n if (!this._isInitializationMode) {\n this.startWebSocketConnection();\n }\n }\n\n /**\n * HTTP discovery failed\n */\n public onHTTPDiscoveryError(error: string): void {\n console.log(`[ConnectionStateMachine] HTTP discovery failed: ${error}`);\n\n if (this._httpRetryCount < this.config.httpRetryCount) {\n this._httpRetryCount++;\n this.setState(\n ConnectionState.HTTPRetrying,\n `HTTP connection failed. Retrying (${this._httpRetryCount}/${this.config.httpRetryCount})...`,\n this._httpRetryCount,\n this.config.httpRetryCount\n );\n this.scheduleHTTPRetry();\n } else {\n this.setState(\n ConnectionState.PermanentFailure,\n `HTTP connection failed after ${this.config.httpRetryCount} attempts. Check server URL.`,\n this.config.httpRetryCount,\n this.config.httpRetryCount\n );\n }\n }\n\n /**\n * Start WebSocket connection (only called after HTTP success and not in init mode)\n */\n public startWebSocketConnection(): void {\n // Allow WebSocket start if HTTP is connected or we're already in WebSocket retry mode\n const canStartWebSocket = this.currentState === ConnectionState.HTTPConnected ||\n this.currentState === ConnectionState.WebSocketRetrying ||\n this.currentState === ConnectionState.WebSocketConnecting ||\n this.currentState === ConnectionState.Connected;\n\n if (!canStartWebSocket) {\n // If we're still discovering HTTP, this is expected\n if (this.currentState === ConnectionState.HTTPDiscovering) {\n return;\n }\n\n // For other states, this might be unexpected\n return;\n }\n\n console.log('[ConnectionStateMachine] Starting WebSocket connection');\n this._webSocketRetryCount = 0;\n this.setState(ConnectionState.WebSocketConnecting, 'Connecting to Signal K Websocket...');\n }\n\n /**\n * WebSocket connection succeeded\n */\n public onWebSocketConnected(): void {\n console.log('[ConnectionStateMachine] WebSocket connected');\n this._webSocketRetryCount = 0;\n this.setState(ConnectionState.Connected, 'Connected to Signal K server');\n }\n\n /**\n * WebSocket connection failed\n */\n public onWebSocketError(error: string): void {\n console.log(`[ConnectionStateMachine] WebSocket error: ${error}`);\n\n // Check if HTTP is still connected\n if (this.currentState !== ConnectionState.HTTPConnected &&\n this.currentState !== ConnectionState.WebSocketConnecting &&\n this.currentState !== ConnectionState.Connected &&\n this.currentState !== ConnectionState.WebSocketRetrying) {\n console.log('[ConnectionStateMachine] HTTP connection lost, restarting HTTP discovery');\n this.startHTTPDiscovery('HTTP connection lost during WebSocket operation');\n return;\n }\n\n this._webSocketRetryCount++;\n this.setState(\n ConnectionState.WebSocketRetrying,\n `WebSocket connection failed. Retry attempt ${this._webSocketRetryCount}...`,\n this._webSocketRetryCount,\n this.config.webSocketRetryCount\n );\n this.scheduleWebSocketRetry();\n }\n\n /**\n * Gracefully shutdown all connections before app restart\n */\n public shutdown(reason = 'App shutdown'): void {\n console.log(`[ConnectionStateMachine] Shutting down all connections: ${reason}`);\n this.clearRetryTimer();\n this.clearNotificationTimeout();\n this._httpRetryCount = 0;\n this._webSocketRetryCount = 0;\n // Set to disconnected state to trigger cleanup in dependent services\n this.setState(ConnectionState.Disconnected, 'Application restarting...');\n }\n\n /**\n * Check if HTTP discovery is complete and successful\n */\n public isHTTPConnected(): boolean {\n return this.currentState === ConnectionState.HTTPConnected ||\n this.currentState === ConnectionState.WebSocketConnecting ||\n this.currentState === ConnectionState.Connected ||\n this.currentState === ConnectionState.WebSocketRetrying;\n }\n\n /**\n * Check if fully connected (WebSocket active)\n */\n public isFullyConnected(): boolean {\n return this.currentState === ConnectionState.Connected;\n }\n\n /**\n * Check if currently connected (HTTP or WebSocket)\n */\n private setState(state: ConnectionState, message: string, retryCount?: number, maxRetries?: number): void {\n this._currentState$.next(state);\n\n const status = this.createStatus(state, message, retryCount, maxRetries);\n\n // Handle notification timing\n if (state === ConnectionState.HTTPDiscovering || state === ConnectionState.WebSocketConnecting) {\n // Show connecting immediately\n this._status$.next(status);\n } else if (state === ConnectionState.Connected) {\n // Debounce connected status for stability\n this.clearNotificationTimeout();\n this._notificationTimeout = setTimeout(() => {\n this._status$.next(status);\n }, this.config.notificationDebounceMs);\n } else {\n // Show other states immediately\n this.clearNotificationTimeout();\n this._status$.next(status);\n }\n }\n\n private createStatus(state: ConnectionState, message: string, retryCount?: number, maxRetries?: number): IConnectionStatus {\n return {\n state,\n operation: this.stateToOperationCode(state),\n message,\n retryCount: retryCount || 0,\n maxRetries: maxRetries || 0,\n timestamp: new Date()\n };\n }\n\n private stateToOperationCode(state: ConnectionState): number {\n switch (state) {\n case ConnectionState.Disconnected:\n return 0;\n case ConnectionState.HTTPDiscovering:\n case ConnectionState.WebSocketConnecting:\n return 1; // Connecting\n case ConnectionState.Connected:\n return 2; // Connected\n case ConnectionState.HTTPError:\n case ConnectionState.WebSocketError:\n case ConnectionState.HTTPRetrying:\n case ConnectionState.WebSocketRetrying:\n return 3; // Error/Retrying\n case ConnectionState.HTTPConnected:\n return 2; // Connected (HTTP level)\n case ConnectionState.PermanentFailure:\n return 5; // Permanent failure\n default:\n return 0;\n }\n }\n\n private scheduleHTTPRetry(): void {\n this.clearRetryTimer();\n const retryIndex = Math.min(this._httpRetryCount - 1, this.config.retryIntervals.length - 1);\n const delay = this.config.retryIntervals[retryIndex];\n\n console.log(`[ConnectionStateMachine] Scheduling HTTP retry in ${delay}ms`);\n this._retryTimeout = setTimeout(() => {\n // Trigger the actual HTTP request via callback\n // Don't change state here - let the HTTP result determine the new state\n if (this._httpRetryCallback) {\n console.log(`[ConnectionStateMachine] Executing HTTP retry ${this._httpRetryCount}/${this.config.httpRetryCount}`);\n this._httpRetryCallback();\n } else {\n console.error('[ConnectionStateMachine] No HTTP retry callback set!');\n this.setState(ConnectionState.Disconnected, 'HTTP retry callback not configured');\n }\n }, delay);\n }\n\n private scheduleWebSocketRetry(): void {\n this.clearRetryTimer();\n\n console.log(`[ConnectionStateMachine] Scheduling WebSocket retry in ${this.config.retryIntervals[1]}ms`);\n this._retryTimeout = setTimeout(() => {\n // Trigger WebSocket reconnection attempt via callback\n // Don't change state here - let the WebSocket result determine the new state\n if (this._webSocketRetryCallback) {\n console.log(`[ConnectionStateMachine] Executing WebSocket retry ${this._webSocketRetryCount}/${this.config.webSocketRetryCount}`);\n this._webSocketRetryCallback();\n } else {\n // Fallback to the old behavior if no callback is set\n console.log(`[ConnectionStateMachine] No WebSocket retry callback - using state change method`);\n this.setState(\n ConnectionState.WebSocketConnecting,\n `Retrying WebSocket connection (${this._webSocketRetryCount}/${this.config.webSocketRetryCount})...`,\n this._webSocketRetryCount,\n this.config.webSocketRetryCount\n );\n }\n }, this.config.retryIntervals[1]);\n }\n\n private clearRetryTimer(): void {\n if (this._retryTimeout) {\n clearTimeout(this._retryTimeout);\n this._retryTimeout = null;\n }\n }\n\n private clearNotificationTimeout(): void {\n if (this._notificationTimeout) {\n clearTimeout(this._notificationTimeout);\n this._notificationTimeout = null;\n }\n }\n\n /**\n * Ensure any scheduled retries / notifications are cancelled when the injector\n * disposes this service (e.g. app shutdown / HMR replacement) to avoid stray\n * callbacks retaining references.\n */\n ngOnDestroy(): void {\n this.clearRetryTimer();\n this.clearNotificationTimeout();\n this._httpRetryCallback = null;\n this._webSocketRetryCallback = null;\n this._currentState$?.complete();\n this._status$?.complete();\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, catchError, lastValueFrom, throwError, timeout } from 'rxjs';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { ISignalKUrl } from '../interfaces/app-settings.interfaces';\nimport { ConnectionStateMachine } from './connection-state-machine.service';\n\ninterface ISignalKEndpointResponse {\n endpoints: {\n v1: {\n version: string;\n \"signalk-http\"?: string;\n \"signalk-ws\"?: string;\n \"signalk-tcp\"?: string;\n }\n }\n server: {\n id: string;\n version: string;\n }\n}\n\n/**\n * Operation value represent connection statuses.\n * @usageNotes `operation` field describes the type of operation being\n * performed on the connections.\n * `0 = Stopped\n * `1 = Connecting (connection being set up/under execution)\n * `2 = Connected\n * `3 = Error connecting\n * `4 = Resetting\n */\nexport interface IEndpointStatus {\n operation: number;\n message: string;\n serverDescription: string;\n httpServiceUrl: string;\n WsServiceUrl: string;\n subscribeAll?: boolean;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SignalKConnectionService {\n private readonly TIMEOUT_DURATION = 10000;\n private connectionStateMachine = inject(ConnectionStateMachine);\n\n constructor() {\n // Register HTTP retry callback with the ConnectionStateMachine\n this.connectionStateMachine.setHTTPRetryCallback(() => {\n console.log('[SignalKConnectionService] Executing HTTP retry via callback');\n this.retryCurrentConnection();\n });\n }\n\n public serverServiceEndpoint$: BehaviorSubject<IEndpointStatus> = new BehaviorSubject<IEndpointStatus>({\n operation: 0,\n message: \"Not connected\",\n serverDescription: null,\n httpServiceUrl: null,\n WsServiceUrl: null,\n });\n\n // Server information\n public signalKURL: ISignalKUrl;\n private serverName: string;\n public serverVersion$ = new BehaviorSubject<string>(null);\n private serverRoles: string[] = [];\n private http = inject(HttpClient);\n\n // Store current connection parameters for retries\n private currentProxyEnabled?: boolean;\n private currentSubscribeAll?: boolean;\n\n /**\n * Validates if a Signal K server is reachable at the given URL.\n * This is a lightweight check that only verifies HTTP connectivity\n * without storing any configuration or affecting the current connection.\n *\n * @param {string} url - The Signal K server URL to validate.\n * @return {Promise<void>} - A promise that resolves if valid, rejects with error if invalid.\n * @memberof SignalKConnectionService\n */\n public async validateSignalKUrl(url: string): Promise<void> {\n if (!url) {\n throw new Error(\"Please enter a server URL\");\n }\n\n // Basic URL format validation\n try {\n const urlObject = new URL(url);\n if (!['http:', 'https:'].includes(urlObject.protocol)) {\n throw new Error(\"URL must start with http:// or https://\");\n }\n } catch {\n throw new Error(\"Invalid URL format - please check for typos and ensure it starts with http:// or https://\");\n }\n\n let fullURL = url;\n if (!fullURL.endsWith(\"signalk/\")) {\n fullURL += \"/signalk/\";\n }\n\n console.log(`[Connection Service] Validating Signal K server at: ${url}`);\n\n try {\n const validationResponse = await lastValueFrom(\n this.http.get<ISignalKEndpointResponse>(fullURL, {observe: 'response'}).pipe(\n timeout(5000), // 5 second timeout for validation\n catchError(err => {\n console.error('[Connection Service] HTTP Error details:', err);\n\n if (err.name === 'TimeoutError') {\n console.error('[Connection Service] Validation timed out after 5000ms');\n throw new Error(`Server is not responding - check if the URL is correct and the server is running`);\n } else if (err.status === 0 || err.status === undefined) {\n // Network error, CORS, or invalid URL\n throw new Error(`Cannot connect to server - check the URL format and ensure the server is accessible`);\n } else if (err.status === 404) {\n throw new Error(`Server found but no Signal K service detected - verify this is a Signal K server`);\n } else if (err.status === 403) {\n throw new Error(`Server refused connection - check if the server allows connections from this browser`);\n } else if (err.status >= 500) {\n throw new Error(`Server error (${err.status}) - the Signal K server may be having issues`);\n } else {\n throw new Error(`Connection failed (${err.status}) - ${err.statusText || 'please check the server URL'}`);\n }\n })\n )\n );\n\n // Basic validation that this looks like a Signal K server\n if (!validationResponse.body?.endpoints?.v1) {\n throw new Error(`Server responded but doesn't appear to be a Signal K server - missing required endpoints`);\n }\n\n console.log(`[Connection Service] Validation successful for: ${url}`);\n } catch (error) {\n console.error(`[Connection Service] Validation failed for ${url}:`, error.message);\n throw error;\n }\n }\n\n /**\n * Initializes the Signal K connection by establishing a new connection to the\n * Signal K server URL, retrieving the server's endpoint information, and\n * starting the HTTP discovery process.\n *\n * @param {ISignalKUrl} skUrl - The Signal K server URL object.\n * @param {boolean} [proxyEnabled] - Optional flag to enable proxy mode.\n * @param {boolean} [subscribeAll] - Optional flag to subscribe to all Delta messages.\n * @return {Promise<void>} - A promise that resolves when the operation is complete.\n * @memberof SignalKConnectionService\n */\n public async initializeConnection(skUrl: ISignalKUrl, proxyEnabled?: boolean, subscribeAll?: boolean): Promise<void> {\n if (!skUrl.url) {\n console.log(\"[Connection Service] Connection initialization called with null or empty URL value\");\n return;\n }\n\n // Store parameters for potential retries\n this.currentProxyEnabled = proxyEnabled;\n this.currentSubscribeAll = subscribeAll;\n\n const serverServiceEndpoints: IEndpointStatus = {\n operation: 1,\n message: \"Connecting...\",\n serverDescription: null,\n httpServiceUrl: null,\n WsServiceUrl: null,\n };\n\n this.signalKURL = skUrl;\n this.serverServiceEndpoint$.next(serverServiceEndpoints);\n\n // Notify ConnectionStateMachine that HTTP discovery is starting\n this.connectionStateMachine.startHTTPDiscovery(`Connecting to ${skUrl.url}`);\n\n let fullURL = this.signalKURL.url;\n if (!fullURL.endsWith(\"signalk/\")) {\n fullURL += \"/signalk/\";\n }\n\n try {\n console.log(\"[Connection Service] Connecting to: \" + this.signalKURL.url);\n const endpointResponse = await lastValueFrom(\n this.http.get<ISignalKEndpointResponse>(fullURL, {observe: 'response'}).pipe(\n timeout(this.TIMEOUT_DURATION),\n catchError(err => {\n if (err.name === 'TimeoutError') {\n console.error('[Connection Service] Connection request timed out after ' + this.TIMEOUT_DURATION + 'ms');\n }\n return throwError(err);\n })\n )\n );\n\n // Process the endpoint response to configure URLs\n Object.assign(serverServiceEndpoints, this.processEndpointResponse(endpointResponse, proxyEnabled, subscribeAll));\n\n // Notify ConnectionStateMachine of HTTP success\n this.connectionStateMachine.onHTTPDiscoverySuccess();\n\n } catch (error) {\n serverServiceEndpoints.operation = 3;\n serverServiceEndpoints.message = error.message;\n\n // Notify ConnectionStateMachine of HTTP failure\n this.connectionStateMachine.onHTTPDiscoveryError(error.message);\n\n this.handleError(error);\n } finally {\n serverServiceEndpoints.subscribeAll = !!subscribeAll;\n this.serverServiceEndpoint$.next(serverServiceEndpoints);\n }\n }\n\n /**\n * Retry the current connection using stored parameters\n */\n private retryCurrentConnection(): void {\n if (!this.signalKURL?.url) {\n console.error('[SignalKConnectionService] Cannot retry - no current URL stored');\n return;\n }\n\n console.log(`[SignalKConnectionService] Retrying connection to ${this.signalKURL.url}`);\n // Perform only the HTTP request part without affecting retry count\n this.performHTTPDiscovery();\n }\n\n /**\n * Perform the actual HTTP discovery without affecting ConnectionStateMachine state\n */\n private async performHTTPDiscovery(): Promise<void> {\n if (!this.signalKURL?.url) {\n console.error('[SignalKConnectionService] No URL available for HTTP discovery');\n return;\n }\n\n let fullURL = this.signalKURL.url;\n if (!fullURL.endsWith(\"signalk/\")) {\n fullURL += \"/signalk/\";\n }\n\n try {\n console.log(\"[Connection Service] Connecting to: \" + this.signalKURL.url);\n const endpointResponse = await lastValueFrom(\n this.http.get<ISignalKEndpointResponse>(fullURL, {observe: 'response'}).pipe(\n timeout(this.TIMEOUT_DURATION),\n catchError(err => {\n if (err.name === 'TimeoutError') {\n console.error('[Connection Service] Connection request timed out after ' + this.TIMEOUT_DURATION + 'ms');\n }\n return throwError(err);\n })\n )\n );\n\n // Process the endpoint response to configure URLs\n const serverServiceEndpoints = this.processEndpointResponse(endpointResponse, this.currentProxyEnabled, this.currentSubscribeAll);\n\n // Notify ConnectionStateMachine of success\n this.connectionStateMachine.onHTTPDiscoverySuccess();\n\n this.serverServiceEndpoint$.next(serverServiceEndpoints);\n\n } catch (error) {\n const serverServiceEndpoints: IEndpointStatus = {\n operation: 3,\n message: error.message,\n serverDescription: null,\n httpServiceUrl: null,\n WsServiceUrl: null,\n };\n\n // Notify ConnectionStateMachine of failure\n this.connectionStateMachine.onHTTPDiscoveryError(error.message);\n\n this.serverServiceEndpoint$.next(serverServiceEndpoints);\n this.handleError(error);\n }\n }\n\n /**\n * Process Signal K endpoint response and configure HTTP/WebSocket URLs\n * @param endpointResponse - The HTTP response containing endpoint information\n * @param proxyEnabled - Whether proxy mode is enabled\n * @param subscribeAll - Whether to subscribe to all messages\n * @returns Configured endpoint status object\n */\n private processEndpointResponse(\n endpointResponse: { body: ISignalKEndpointResponse; status: number },\n proxyEnabled?: boolean,\n subscribeAll?: boolean\n ): IEndpointStatus {\n console.debug(\"[Connection Service] Signal K HTTP Endpoints retrieved\");\n this.serverVersion$.next(endpointResponse.body.server.version);\n\n const httpUrl = endpointResponse.body.endpoints.v1[\"signalk-http\"];\n const wsUrl = endpointResponse.body.endpoints.v1[\"signalk-ws\"];\n\n const serverServiceEndpoints: IEndpointStatus = {\n operation: 2,\n message: endpointResponse.status?.toString() || \"Connected\",\n serverDescription: `${endpointResponse.body.server.id} ${endpointResponse.body.server.version}`,\n httpServiceUrl: null,\n WsServiceUrl: null,\n };\n\n if (proxyEnabled) {\n console.debug(\"[Connection Service] Proxy Mode Enabled\");\n serverServiceEndpoints.httpServiceUrl = window.location.origin + new URL(httpUrl).pathname;\n serverServiceEndpoints.WsServiceUrl = window.location.protocol.replace('http', 'ws') + '//' + window.location.host + new URL(wsUrl).pathname;\n } else {\n serverServiceEndpoints.httpServiceUrl = httpUrl;\n // Only override ws:// to wss:// when page is HTTPS, otherwise keep original\n const isHttpsPage = window.location.protocol === 'https:';\n serverServiceEndpoints.WsServiceUrl = isHttpsPage ? wsUrl.replace('ws://', 'wss://') : wsUrl;\n }\n\n console.debug(\"[Connection Service] HTTP URI: \" + serverServiceEndpoints.httpServiceUrl);\n console.debug(\"[Connection Service] WebSocket URI: \" + serverServiceEndpoints.WsServiceUrl);\n\n serverServiceEndpoints.subscribeAll = !!subscribeAll;\n return serverServiceEndpoints;\n }\n\n private handleError(error: HttpErrorResponse): never {\n const errorMessage = error.status === 0\n ? `[Connection Service] ${error.name}: ${error.message}`\n : `[Connection Service] Backend returned code ${error.status}, body was: ${error.error}`;\n\n console.error(errorMessage);\n throw error;\n }\n\n // Endpoint status and address observable\n public getServiceEndpointStatusAsO() {\n return this.serverServiceEndpoint$.asObservable();\n }\n\n public setServerInfo(name: string, version: string, roles: string[]): void {\n this.serverName = name;\n this.serverRoles = roles;\n console.log(`[Connection Service] Server Name: ${name}, Version: ${version}, Roles: ${JSON.stringify(roles)}`);\n }\n\n public get skServerName() : string {\n return this.serverName;\n }\n\n public get skServerVersion() : string {\n return this.serverVersion$.getValue();\n }\n\n public get skServerRoles() : string[] {\n return this.serverRoles;\n }\n}\n","import { SignalKConnectionService, IEndpointStatus } from './signalk-connection.service';\nimport { HttpClient, HttpResponse, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, OnDestroy, inject } from '@angular/core';\nimport { BehaviorSubject, timer, lastValueFrom, Subscription } from 'rxjs';\nimport { filter, map, switchMap, distinctUntilChanged } from \"rxjs/operators\";\n\nexport interface IAuthorizationToken {\n expiry: number;\n token: string;\n isDeviceAccessToken: boolean;\n}\n\nconst defaultApiPath = '/signalk/v1/'; // Use as default for new server URL changes. We do a Login before ConnectionService has time to send the new endpoitn url\nconst loginEndpoint = 'auth/login';\nconst logoutEndpoint = 'auth/logout';\nconst validateTokenEndpoint = 'auth/validate';\nconst tokenRenewalBuffer = 60; // nb of seconds before token expiration\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthenticationService implements OnDestroy {\n private http = inject(HttpClient);\n private conn = inject(SignalKConnectionService);\n\n private _IsLoggedIn$ = new BehaviorSubject<boolean>(false);\n public isLoggedIn$ = this._IsLoggedIn$.asObservable();\n private _authToken$ = new BehaviorSubject<IAuthorizationToken>(null);\n public authToken$ = this._authToken$.asObservable();\n private connectionEndpointSubscription: Subscription = null;\n private authTokenSubscription: Subscription = null;\n private isRenewingToken = false; // Prevent overlapping renewals\n\n // Network connection\n private loginUrl = null;\n private logoutUrl = null;\n private validateTokenUrl = null;\n\n constructor()\n {\n // load local storage token\n const token: IAuthorizationToken = JSON.parse(localStorage.getItem('authorization_token'));\n if (token) {\n if (token.isDeviceAccessToken) {\n if (token.expiry === null) {\n console.log('[Authentication Service] Device Access Token found with expiry: NEVER');\n this._authToken$.next(token);\n } else if (this.isTokenExpired(token.expiry)) {\n console.log(\"[Authentication Service] Device Access Token expired. Deleting token\");\n localStorage.removeItem('authorization_token');\n } else {\n // We don't set logged . This is not a Session token.\n console.log('[Authentication Service] Device Access Token found in Local Storage');\n this._authToken$.next(token);\n }\n } else {\n console.log('[Authentication Service] User session token found in Local Storage');\n console.log('[Authentication Service] Deleting user session token');\n localStorage.removeItem('authorization_token');\n }\n }\n\n // Token Subject subscription to handle token expiration and renewal\n this.authTokenSubscription = this._authToken$.pipe(\n filter((token: IAuthorizationToken) => !!token && token.expiry !== null), // Ensure token and expiry exist\n distinctUntilChanged((prev, curr) => prev.expiry === curr.expiry), // Only react to changes in the token\n map((token: IAuthorizationToken) => {\n const expirationDate = this.getTokenExpirationDate(token.expiry, tokenRenewalBuffer);\n const duration = expirationDate.getTime() - Date.now(); // Calculate duration in milliseconds\n console.log(`[Authentication Service] Token refresh timer set for ${duration} ms (Token Expiry: ${expirationDate.toISOString()})`);\n return Math.max(duration, 0); // Ensure duration is not negative\n }),\n switchMap((duration: number) => timer(duration)) // Set timer for the calculated duration\n ).subscribe(() => {\n this.handleTokenRenewal();\n });\n\n // Endpoint connection observer\n this.connectionEndpointSubscription = this.conn.serverServiceEndpoint$.subscribe((endpoint: IEndpointStatus) => {\n if (endpoint.operation === 2) {\n const httpApiUrl: string = endpoint.httpServiceUrl.substring(0, endpoint.httpServiceUrl.length - 4); // this removes 'api/' from the end\n this.loginUrl = httpApiUrl + loginEndpoint;\n this.logoutUrl = httpApiUrl + logoutEndpoint;\n this.validateTokenUrl = httpApiUrl + validateTokenEndpoint;\n }\n });\n }\n\n private handleTokenRenewal(): void {\n if (this.isRenewingToken) {\n console.warn('[Authentication Service] Token renewal already in progress.');\n return;\n }\n\n this.isRenewingToken = true;\n\n const token: IAuthorizationToken = JSON.parse(localStorage.getItem('authorization_token'));\n if (!token) {\n console.warn('[Authentication Service] No token found in local storage. Cannot renew.');\n this.isRenewingToken = false;\n return;\n }\n\n if (token.isDeviceAccessToken) {\n console.warn('[Authentication Service] Device Access Token expired. Manual renewal required.');\n this.isRenewingToken = false;\n } else {\n if (this.isTokenExpired(token.expiry)) {\n console.log('[Authentication Service] User session Token expired. Cannot renew.');\n this.isRenewingToken = false;\n } else {\n console.log('[Authentication Service] User session Token expires soon. Renewing token...');\n const connectionConfig = JSON.parse(localStorage.getItem('connectionConfig'));\n this.login({ usr: connectionConfig.loginName, pwd: connectionConfig.loginPassword })\n .then(() => {\n console.log('[Authentication Service] Token successfully renewed.');\n })\n .catch((error: HttpErrorResponse) => {\n console.error('[Authentication Service] Token renewal failed. Server returned:', error.error);\n })\n .finally(() => {\n this.isRenewingToken = false;\n });\n }\n }\n }\n\n /**\n * ASync server login API function. Handles logout, token and logged in status. Use\n * newUrl param to indicate against what server the login should take place, if it's\n * not the current server (if we are changing the sk URL). This param must be used\n * as the AuthenticationService has no dependency on AppSettings Service and once\n * AuthenticationService is instantiated, newUrl is the only way to change its\n * target endpoint.\n *\n * @param {{ usr: string; pwd: string; newUrl?: string; }} { usr, pwd, newUrl }\n * @return {*} {Promise<void>}\n * @throws {Error} If the login URL is not set or if the HTTP request fails.\n * @memberof AuthenticationService\n *\n * @description\n * This method may throw errors or return a rejected promise if login fails due to network issues,\n * invalid credentials, or server errors. Consumers should handle errors using try/catch or .catch().\n */\n public async login({ usr, pwd, newUrl }: { usr: string; pwd: string; newUrl?: string; }): Promise<void> {\n let serverLoginFullUrl: string;\n if (newUrl) {\n serverLoginFullUrl = newUrl.replace(/\\/+$/, '') + defaultApiPath + loginEndpoint;\n } else {\n serverLoginFullUrl = this.loginUrl;\n }\n\n\n if (this._IsLoggedIn$.getValue()) {\n await this.logout(true);\n }\n if (!serverLoginFullUrl) {\n console.error(\"[Authentication Service] Login URL is not set. Cannot perform login.\");\n this.deleteToken();\n throw new Error(\"Login URL is not set.\");\n }\n await lastValueFrom(this.http.post<{ token: string }>(serverLoginFullUrl, {\"username\" : usr, \"password\" : pwd}, {observe: 'response'}))\n .then((loginResponse: HttpResponse<{ token: string }>) => {\n console.log(\"[Authentication Service] User \" + usr + \" login successful\");\n this.setSession(loginResponse.body.token);\n })\n .catch(error => {\n this.deleteToken();\n this.handleError(error);\n });\n }\n\n private handleError(error: HttpErrorResponse) {\n if (error.status === 0) {\n // A client-side or network error occurred. Handle it accordingly.\n this.deleteToken();\n }\n throw error;\n }\n\n /**\n * Sets the in-memory session token details (token and extracted expiration date)\n * post user authentication and save it to LocalStorage.\n *\n * @private\n * @param {*} token token returned by the login API call\n * @memberof AuthenticationService\n */\n private setSession(token: string): void {\n if (token) {\n const expiry = (JSON.parse(atob(token.split('.')[1]))).exp;\n const authorizationToken: IAuthorizationToken = {\n 'token' : null, 'expiry' : null, 'isDeviceAccessToken' : false\n };\n\n if(expiry === undefined) {\n authorizationToken.token = token;\n console.log(\"[Authentication Service] User Session Token received. Token Expiration: NEVER\");\n this._IsLoggedIn$.next(true);\n this._authToken$.next(authorizationToken);\n localStorage.setItem('authorization_token', JSON.stringify(authorizationToken));\n } else if (this.isTokenExpired(expiry)) {\n console.log(\"[Authentication Service] Received expired Session Token from server\");\n } else {\n authorizationToken.token = token;\n authorizationToken.expiry = expiry;\n console.log(\"[Authentication Service] Session Authorization Token received. Token Expiration: \" + this.getTokenExpirationDate(authorizationToken.expiry));\n this._IsLoggedIn$.next(true);\n this._authToken$.next(authorizationToken);\n localStorage.setItem('authorization_token', JSON.stringify(authorizationToken));\n }\n }\n }\n\n /**\n * Validates if a token is expired.\n *\n * @private\n * @param {number} expiry Expiration date in ms extracted from the token\n * @return {*} {boolean} True if expired\n * @memberof AuthenticationService\n */\n private isTokenExpired(expiry: number): boolean {\n return (Math.floor((new Date).getTime() / 1000)) >= expiry;\n }\n\n /**\n * Returns a Date() object based on a expiry value of a token. If you\n * include optional param buffer, it will return a date, minus this value.\n * Use buffer as a time window to renew a token.\n *\n * @private\n * @param {number} dateAsSeconds Expiration date value in seconds (starting from 1970...)\n * @param {number} buffer Optional value in seconds. will deduct the returned Date by the buffer value\n * @return {*} {Date} UTC expiration date\n * @memberof AuthenticationService\n */\n private getTokenExpirationDate(dateAsSeconds: number, buffer?: number): Date {\n let date = new Date(0);\n\n if(buffer) {\n const bufferedDate = new Date(0);\n bufferedDate.setUTCSeconds(dateAsSeconds - buffer);\n date = bufferedDate;\n } else {\n date.setUTCSeconds(dateAsSeconds);\n }\n return date;\n }\n\n // not yet implemented by Signal K but part of the specs. Using contained token string expiration value instead for now\n private renewToken() {\n return this.http.post<HttpResponse<Response>>(this.validateTokenUrl, null, {observe: 'response'});\n }\n\n /**\n * Async function to server logout API to kill the session token, deletes the\n * token from local storage and sets isLoggedIn$ to false\n *\n * @return {*} {Promise<void>}\n * @memberof AuthenticationService\n */\n public async logout(isLoginAction: boolean): Promise<void> {\n localStorage.removeItem('authorization_token');\n await lastValueFrom(this.http.put(this.logoutUrl, null))\n .then(() => {\n this._IsLoggedIn$.next(false);\n if (!isLoginAction) {\n this._authToken$.next(null);\n }\n console.log(\"[Authentication Service] User logged out\");\n })\n .catch(error => {\n console.error(error)\n });\n }\n\n public deleteToken() {\n if (!this._authToken$) {\n return;\n }\n\n console.log('[Authentication Service] Deleting Authorization token');\n localStorage.removeItem('authorization_token');\n this._IsLoggedIn$.next(false);\n this._authToken$.next(null);\n }\n\n public setDeviceAccessToken(token: string): void {\n if (token) {\n const expiry = (JSON.parse(atob(token.split('.')[1]))).exp;\n const authorizationToken: IAuthorizationToken = {\n 'token' : null, 'expiry' : null, 'isDeviceAccessToken' : true\n };\n\n if(expiry === undefined) {\n authorizationToken.token = token;\n console.log(\"[Authentication Service] Device Access Token received. Token Expiration: NEVER\");\n this._IsLoggedIn$.next(false);\n this._authToken$.next(authorizationToken);\n localStorage.setItem('authorization_token', JSON.stringify(authorizationToken));\n } else if (this.isTokenExpired(expiry)) {\n console.log(\"[Authentication Service] Received expired Device Access Token from server\");\n\n } else {\n authorizationToken.token = token;\n authorizationToken.expiry = expiry;\n console.log(\"[Authentication Service] Device Access Token received. Token Expiration: \" + this.getTokenExpirationDate(authorizationToken.expiry));\n this._IsLoggedIn$.next(false);\n this._authToken$.next(authorizationToken);\n localStorage.setItem('authorization_token', JSON.stringify(authorizationToken));\n }\n }\n }\n\n ngOnDestroy(): void {\n this.connectionEndpointSubscription?.unsubscribe();\n this.authTokenSubscription?.unsubscribe();\n }\n}\n","export const semver = /^[v^~<>=]*?(\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+))?(?:-([\\da-z\\-]+(?:\\.[\\da-z\\-]+)*))?(?:\\+[\\da-z\\-]+(?:\\.[\\da-z\\-]+)*)?)?)?$/i;\nexport const validateAndParse = (version) => {\n if (typeof version !== 'string') {\n throw new TypeError('Invalid argument expected string');\n }\n const match = version.match(semver);\n if (!match) {\n throw new Error(`Invalid argument not valid semver ('${version}' received)`);\n }\n match.shift();\n return match;\n};\nconst isWildcard = (s) => s === '*' || s === 'x' || s === 'X';\nconst tryParse = (v) => {\n const n = parseInt(v, 10);\n return isNaN(n) ? v : n;\n};\nconst forceType = (a, b) => typeof a !== typeof b ? [String(a), String(b)] : [a, b];\nconst compareStrings = (a, b) => {\n if (isWildcard(a) || isWildcard(b))\n return 0;\n const [ap, bp] = forceType(tryParse(a), tryParse(b));\n if (ap > bp)\n return 1;\n if (ap < bp)\n return -1;\n return 0;\n};\nexport const compareSegments = (a, b) => {\n for (let i = 0; i < Math.max(a.length, b.length); i++) {\n const r = compareStrings(a[i] || '0', b[i] || '0');\n if (r !== 0)\n return r;\n }\n return 0;\n};\n","import { compareSegments, validateAndParse } from './utils.js';\n/**\n * Compare [semver](https://semver.org/) version strings to find greater, equal or lesser.\n * This library supports the full semver specification, including comparing versions with different number of digits like `1.0.0`, `1.0`, `1`, and pre-release versions like `1.0.0-alpha`.\n * @param v1 - First version to compare\n * @param v2 - Second version to compare\n * @returns Numeric value compatible with the [Array.sort(fn) interface](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Parameters).\n */\nexport const compareVersions = (v1, v2) => {\n // validate input and split into segments\n const n1 = validateAndParse(v1);\n const n2 = validateAndParse(v2);\n // pop off the patch\n const p1 = n1.pop();\n const p2 = n2.pop();\n // validate numbers\n const r = compareSegments(n1, n2);\n if (r !== 0)\n return r;\n // validate pre-release\n if (p1 && p2) {\n return compareSegments(p1.split('.'), p2.split('.'));\n }\n else if (p1 || p2) {\n return p1 ? -1 : 1;\n }\n return 0;\n};\n","import { compareVersions } from './compareVersions.js';\n/**\n * Compare [semver](https://semver.org/) version strings using the specified operator.\n *\n * @param v1 First version to compare\n * @param v2 Second version to compare\n * @param operator Allowed arithmetic operator to use\n * @returns `true` if the comparison between the firstVersion and the secondVersion satisfies the operator, `false` otherwise.\n *\n * @example\n * ```\n * compare('10.1.8', '10.0.4', '>'); // return true\n * compare('10.0.1', '10.0.1', '='); // return true\n * compare('10.1.1', '10.2.2', '<'); // return true\n * compare('10.1.1', '10.2.2', '<='); // return true\n * compare('10.1.1', '10.2.2', '>='); // return false\n * ```\n */\nexport const compare = (v1, v2, operator) => {\n // validate input operator\n assertValidOperator(operator);\n // since result of compareVersions can only be -1 or 0 or 1\n // a simple map can be used to replace switch\n const res = compareVersions(v1, v2);\n return operatorResMap[operator].includes(res);\n};\nconst operatorResMap = {\n '>': [1],\n '>=': [0, 1],\n '=': [0],\n '<=': [-1, 0],\n '<': [-1],\n '!=': [-1, 1],\n};\nconst allowedOperators = Object.keys(operatorResMap);\nconst assertValidOperator = (op) => {\n if (typeof op !== 'string') {\n throw new TypeError(`Invalid operator type, expected string but got ${typeof op}`);\n }\n if (allowedOperators.indexOf(op) === -1) {\n throw new Error(`Invalid operator, expected one of ${allowedOperators.join('|')}`);\n }\n};\n","import { IEndpointStatus, SignalKConnectionService } from './signalk-connection.service';\nimport { Injectable, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IConfig } from \"../interfaces/app-settings.interfaces\";\nimport { compare } from 'compare-versions';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { tap, concatMap, catchError, lastValueFrom, BehaviorSubject } from 'rxjs';\nimport { AuthenticationService } from './authentication.service';\n\nexport interface Config {\n name: string,\n scope: string\n}\n\ninterface IPatchAction {\n url: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n document: any\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StorageService {\n private server = inject(SignalKConnectionService);\n private http = inject(HttpClient);\n private readonly _auth = inject(AuthenticationService);\n\n private serverEndpoint: string = null;\n public isAppDataSupported = false;\n private configFileVersion: number = null;\n public sharedConfigName: string;\n private InitConfig: IConfig = null;\n public storageServiceReady$ = new BehaviorSubject<boolean>(false);\n private _isLoggedIn = false;\n private _networkStatus: IEndpointStatus = undefined;\n\n\n private patchQueue$ = new Subject(); // REST call queue to force sequential calls\n private patch = function (arg: IPatchAction) { // http JSON Patch function\n //console.log(`[Storage Service] Send patch request:\\n${JSON.stringify(arg.document)}`);\n return this.http.post(arg.url, arg.document)\n .pipe(\n tap(() => console.log(\"[Storage Service] Remote config patch request completed successfully\")),\n catchError((error) => this.handleError(error))\n );\n }\n\n constructor() {\n const server = this.server;\n // Subscriptions auto‑teardown via takeUntilDestroyed\n this._auth.isLoggedIn$\n .pipe(takeUntilDestroyed())\n .subscribe(isLoggedIn => {\n this._isLoggedIn = isLoggedIn;\n this.isStorageServiceReady();\n });\n\n server.serverServiceEndpoint$\n .pipe(takeUntilDestroyed())\n .subscribe((status: IEndpointStatus) => {\n this._networkStatus = status;\n this.isStorageServiceReady();\n });\n\n server.serverVersion$\n .pipe(takeUntilDestroyed())\n .subscribe(version => {\n if (version) {\n this.isAppDataSupported = compare(version, '1.27.0', \">=\");\n }\n });\n\n // Patch request queue to insure JSON Patch requests to SK server don't run over each other and cause collisions/conflicts. SK does not handle multiple async applicationData access calls\n this.patchQueue$\n .pipe(concatMap((arg: IPatchAction) => this.patch(arg)), takeUntilDestroyed())\n .subscribe(() => { /* queue item processed */ });\n }\n\n private isStorageServiceReady(): void {\n if (this._networkStatus?.httpServiceUrl) {\n this.serverEndpoint = this._networkStatus.httpServiceUrl.substring(0, this._networkStatus.httpServiceUrl.length - 4) + \"applicationData/\"; // this removes 'api/' from the end;\n }\n\n if (this._networkStatus?.operation === 2 && this._isLoggedIn && this.serverEndpoint) {\n this.storageServiceReady$.next(true);\n console.log(`[Remote Storage Service] Authenticated ${this._isLoggedIn} ,AppData API: ${this.serverEndpoint}`);\n } else {\n this.storageServiceReady$.next(false);\n }\n }\n\n private ensureReady(): void {\n if (!this.storageServiceReady$.getValue()) {\n throw new Error('[StorageService] Not ready: storageServiceReady is false');\n }\n }\n\n /**\n * Retrieves server Application Data config lists for Kip in both Global\n * and User scopes for the current app version.\n *\n * @param {string} [forceConfigFileVersion] Optional parameter. Forces the\n * Signal K configuration file name to a specific version. If not set, configFileVersion\n * is used by default (set in app-settings and app-initNetwork services).\n * Old KIP versions used value of 1.\n *\n * @return {*} {Promise<Config[]>}\n * @memberof StorageService\n */\n public async listConfigs(forceConfigFileVersion?: number): Promise<Config[]> {\n this.ensureReady();\n const serverConfigs: Config[] = [];\n if (!this.serverEndpoint) {\n console.warn(\"[Storage Service] No server endpoint set. Cannot retrieve config list\");\n return null;\n }\n const url = this.serverEndpoint;\n let globalUrl = url + \"global/kip/\" + this.configFileVersion + \"/?keys=true\";\n let userUrl = url + \"user/kip/\" + this.configFileVersion + \"/?keys=true\";\n\n if (forceConfigFileVersion) {\n globalUrl = url + \"global/kip/\" + forceConfigFileVersion + \"/?keys=true\";\n userUrl = url + \"user/kip/\" + forceConfigFileVersion + \"/?keys=true\";\n }\n\n await lastValueFrom(this.http.get<string[]>(globalUrl))\n .then((configNames: string[]) => {\n for (const cname of configNames) {\n serverConfigs.push({ scope: 'global', name: cname });\n }\n console.log(`[Storage Service] Retrieved Global config list`);\n })\n .catch(\n error => {\n this.handleError(error);\n });\n\n await lastValueFrom(this.http.get<string[]>(userUrl))\n .then((configNames: string[]) => {\n for (const cname of configNames) {\n serverConfigs.push({ scope: 'user', name: cname });\n }\n console.log(`[Storage Service] Retrieved User config list`);\n })\n .catch(\n error => {\n this.handleError(error);\n });\n\n return serverConfigs;\n }\n\n /**\n * Retrieves version and name specific server Application Data config\n * from a given scope.\n *\n * @param {string} scope String value of either 'global' or 'user'\n * @param {string} configName String value of the config name\n * @param {string} [forceConfigFileVersion] Optional parameter. Forces the\n * Signal K configuration file name to a specific version. If not set, configFileVersion\n * is used by default (set in app-settings and app-initNetwork services).\n * Old KIP versions used value of 1.\n * @param {boolean} isInitLoad User for AppSettings config initialization. If True, config will be kept\n *\n * @return {*} {IConfig}\n * @memberof StorageService\n */\n public async getConfig(scope: string, configName: string, forceConfigFileVersion?: number, isInitLoad?: boolean): Promise<IConfig> {\n this.ensureReady();\n let conf: IConfig = null;\n let url = this.serverEndpoint + scope + \"/kip/\" + this.configFileVersion + \"/\" + configName;\n\n if (forceConfigFileVersion) {\n url = this.serverEndpoint + scope + \"/kip/\" + forceConfigFileVersion + \"/\" + configName;\n }\n await lastValueFrom(this.http.get<IConfig>(url))\n .then(remoteConfig => {\n conf = remoteConfig;\n console.log(`[Storage Service] Retrieved config [${configName}] from [${scope}] scope`);\n if (isInitLoad) {\n this.InitConfig = remoteConfig;\n }\n })\n .catch(error => {\n this.handleError(error);\n });\n return conf;\n }\n\n /**\n * Send configuration data to the server Application Data service\n * with a scope and name and optional file version. The configuration will be saved in the\n * current Kip app version file number (9.0.0.json) in applicationData subfolder on the server.\n *\n * @usage If the given ConfigName exists in the provided scope for the same version,\n * the data will be overwritten/replaced, else it will be created on the server.\n *\n * @param {string} scope String value of either 'global' or 'user'\n * @param {string} configName String value of the config name\n * @param {IConfig} config config data to be saved\n * @return {*} {null} returns null if operation is successful or raises an error.\n * @memberof StorageService\n */\n public async setConfig(scope: string, configName: string, config: IConfig, forceConfigFileVersion?: number): Promise<null> {\n this.ensureReady();\n let url = this.serverEndpoint + scope + \"/kip/\" + this.configFileVersion + \"/\" + configName;\n let response = null;\n if (forceConfigFileVersion) {\n url = this.serverEndpoint + scope + \"/kip/\" + forceConfigFileVersion + \"/\" + configName;\n }\n await lastValueFrom(this.http.post<null>(url, config))\n .then(x => {\n console.log(`[Storage Service] Saved config [${configName}] to [${scope}] scope`);\n response = x;\n })\n .catch(error => {\n this.handleError(error);\n });\n\n return response;\n }\n\n /**\n * Updates JSON configuration entry section in the server application storage. This uses the JSON Patch standard.\n *\n * @param {string} ObjType string describing the type of configuration object. Value can be: IAppConfig, IThemeConfig, IWidgetConfig, ILayoutConfig, Array\\<IUnitDefaults\\>, Array\\<IDataSet\\>, Array\\<IZone\\>, IZonesConfig, INotificationConfig\n * @param {*} value unstringified update object. The resulting outgoing POST request will automatically stringify.\n * @memberof StorageService\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public patchConfig(ObjType: string, value: any, forceConfigFileVersion?: number) {\n this.ensureReady();\n let url = this.serverEndpoint + \"user/kip/\" + this.configFileVersion;\n let document;\n if (forceConfigFileVersion) {\n url = this.serverEndpoint + \"user/kip/\" + forceConfigFileVersion;\n }\n\n switch (ObjType) {\n case \"IAppConfig\":\n document =\n [{\n \"op\": \"replace\",\n \"path\": `/${this.sharedConfigName}/app`,\n \"value\": value\n }]\n break;\n\n case \"IThemeConfig\":\n document =\n [{\n \"op\": \"replace\",\n \"path\": `/${this.sharedConfigName}/theme/themeName`,\n \"value\": value.themeName\n }]\n break;\n\n case \"IWidgetConfig\":\n document =\n [{\n \"op\": \"replace\",\n \"path\": `/${this.sharedConfigName}/widget`,\n \"value\": value\n }]\n break;\n\n case \"ILayoutConfig\":\n document =\n [{\n \"op\": \"replace\",\n \"path\": `/${this.sharedConfigName}/layout`,\n \"value\": value\n }]\n break;\n\n case \"Dashboards\":\n document =\n [{\n \"op\": \"replace\",\n \"path\": `/${this.sharedConfigName}/dashboards`,\n \"value\": value\n }]\n break;\n\n case \"Array<IUnitDefaults>\":\n document =\n [{\n \"op\": \"replace\",\n \"path\": `/${this.sharedConfigName}/app/unitDefaults`,\n \"value\": value\n }]\n break;\n\n case \"Array<IDatasetDef>\":\n document =\n [{\n \"op\": \"replace\",\n \"path\": `/${this.sharedConfigName}/app/dataSets`,\n \"value\": value\n }]\n break;\n\n case \"INotificationConfig\":\n document =\n [{\n \"op\": \"replace\",\n \"path\": `/${this.sharedConfigName}/app/notificationConfig`,\n \"value\": value\n }]\n break;\n\n default: console.warn(\"[Storage Service] JSON Patch request type unknown\");\n break;\n }\n\n const patch: IPatchAction = { url, document };\n this.patchQueue$.next(patch);\n }\n\n /**\n * Applies full KIP configuration entry file operations the server's Global Scope application storage.\n *\n * @param {string} configName name of the configuration.\n * @param {string} scope the storage scope to use. Can either be: 'user' or 'global'.\n * @param {string} operation string describing the type action to perform. values can be: 'add', 'replace' or 'remove'.\n * @param {IConfig} config unstringified config object. The resulting outgoing POST request will automatically stringify.\n * @param {number} fileVersion Configuration file version. Supported are 9 for current and 1 for old configs.\n * @memberof StorageService\n */\n public patchGlobal(configName: string, scope: string, config: IConfig, operation: string, fileVersion?: number) {\n this.ensureReady();\n let url = this.serverEndpoint + scope + \"/kip/\" + this.configFileVersion;\n if (fileVersion) {\n url = this.serverEndpoint + scope + \"/kip/\" + fileVersion;\n }\n\n let document;\n switch (operation) {\n case \"add\":\n document =\n [{\n \"op\": \"add\",\n \"path\": `/${configName}`,\n \"value\": config\n }]\n break;\n\n case \"replace\":\n document =\n [{\n \"op\": \"replace\",\n \"path\": `/${configName}`,\n \"value\": config\n }]\n break;\n\n case \"remove\":\n document =\n [{\n \"op\": \"remove\",\n \"path\": `/${configName}`,\n \"value\": config\n }]\n break;\n\n default: console.warn(\"[Storage Service] JSON Patch operation request type unknown\");\n break;\n }\n\n const patch: IPatchAction = { url, document };\n this.patchQueue$.next(patch);\n }\n\n /**\n * Deletes/removes a full configuration entry from the server ApplicationStorage using JSON Patch standard.\n *\n * @param {string} scope destination storage scope of either global or user value\n * @param {string} name configuration name to delete\n * @param {string} [forceConfigFileVersion] Optional parameter. Forces the\n * Signal K configuration file name to a specific version. If not set, configFileVersion\n * is used by default (set in app-settings and app-initNetwork services).\n * Old KIP versions used value of 1.\n *\n * @memberof StorageService\n */\n public removeItem(scope: string, name: string, forceConfigFileVersion?: number) {\n this.ensureReady();\n let url = this.serverEndpoint + scope + \"/kip/\" + this.configFileVersion;\n if (forceConfigFileVersion) {\n url = this.serverEndpoint + scope + \"/kip/\" + forceConfigFileVersion;\n }\n const document =\n [\n {\n \"op\": \"remove\",\n \"path\": `/${name}`\n }\n ]\n const patch: IPatchAction = { url, document };\n this.patchQueue$.next(patch);\n }\n\n /**\n * *** Not implemented\n */\n public clear() {\n this.ensureReady();\n\n }\n\n public set activeConfigFileVersion(v: number) {\n this.configFileVersion = v;\n }\n\n private handleError(error: HttpErrorResponse) {\n if (error.status === 0) {\n // A client-side or network error occurred. Handle it accordingly.\n console.error('[Storage Service] An error occurred:', error.error);\n } else {\n // The backend returned an unsuccessful response code.\n // The response body may contain clues as to what went wrong.\n console.error(`[Storage Service] Backend returned error: `, error.message);\n }\n // Return an observable with a user-facing error message.\n throw error;\n }\n\n public get initConfig(): IConfig {\n return this.InitConfig;\n }\n}\n","export class UUID {\n /**\n * Generates a new UUID using UUID.create()\n *\n * @static\n * @return {*} {string} UUID\n * @memberof UUID\n */\n static create(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n const r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n } ;\n}\n","export const DefaultNotificationConfig = {\n \"disableNotifications\": false,\n \"menuGrouping\": true,\n \"security\": {\n \"disableSecurity\": true,\n },\n \"devices\": {\n \"disableDevices\": false,\n \"showNormalState\": false,\n \"showNominalState\": false,\n },\n \"sound\": {\n \"disableSound\": false,\n \"muteNormal\": true,\n \"muteNominal\": true,\n \"muteWarn\": true,\n \"muteAlert\": false,\n \"muteAlarm\": false,\n \"muteEmergency\": false,\n },\n}\n","import { IUnitDefaults } from '../app/core/services/units.service';\n\n\nexport const DefaultUnitsConfig: IUnitDefaults = {\n \"Unitless\": 'unitless',\n \"Speed\": 'knots',\n \"Flow\": 'l/h',\n \"Temperature\": 'celsius',\n \"Length\": 'm',\n \"Volume\": 'liter',\n \"Current\": 'A',\n \"Potential\": 'V',\n \"Charge\": 'C',\n \"Power\": 'W',\n \"Energy\": 'J',\n \"Pressure\": 'mmHg',\n \"Fuel Distance\": \"nm/l\",\n \"Energy Distance\": \"nm/kWh\",\n \"Density\": 'kg/m3',\n \"Time\": 'Hours',\n \"Angular Velocity\": 'deg/min',\n \"Angle\": 'deg',\n \"Frequency\": 'Hz',\n \"Ratio\": 'ratio',\n \"Resistance\": 'ohm'\n}\n","import { IConfig ,IAppConfig, IConnectionConfig, IThemeConfig } from \"../app/core/interfaces/app-settings.interfaces\"\nimport { DefaultNotificationConfig } from './config.blank.notification.const';\nimport { DefaultUnitsConfig } from \"./config.blank.units.const\";\nimport { UUID } from \"../app/core/utils/uuid.util\";\n\nexport const DefaultAppConfig: IAppConfig = {\n \"configVersion\": 11,\n \"autoNightMode\": true,\n \"redNightMode\": false,\n \"nightModeBrightness\": 0.27,\n \"dataSets\": [],\n \"unitDefaults\": DefaultUnitsConfig,\n \"notificationConfig\": DefaultNotificationConfig,\n}\n\nexport const DefaultThemeConfig: IThemeConfig = {\n \"themeName\": \"\"\n}\n\nexport const defaultConfig: IConfig = {\n \"app\": DefaultAppConfig,\n \"theme\": DefaultThemeConfig,\n \"dashboards\": []\n}\n\nexport const DefaultConnectionConfig: IConnectionConfig = {\n \"configVersion\": 11,\n \"kipUUID\": UUID.create(),\n \"signalKUrl\": null, // get's overwritten with host at getDefaultConnectionConfig()\n \"proxyEnabled\": false,\n \"signalKSubscribeAll\": false,\n \"useDeviceToken\": false,\n \"loginName\": null,\n \"loginPassword\": null,\n \"useSharedConfig\": false,\n \"sharedConfigName\": \"default\"\n}\n","import { Dashboard } from \"../app/core/services/dashboard.service\"\nimport { IConfig, IAppConfig, IConnectionConfig, IThemeConfig } from \"../app/core/interfaces/app-settings.interfaces\"\nimport { UUID } from \"../app/core/utils/uuid.util\"\n\n// Demo Mode config settings file\nexport const DemoAppConfig: IAppConfig = {\n \"configVersion\": 11,\n \"autoNightMode\": false,\n \"redNightMode\": false,\n \"nightModeBrightness\": 0.27,\n \"dataSets\": [\n {\n \"uuid\": \"afbe4e41-26f5-404f-a55d-9f7b9b76fbd1\",\n \"path\": \"self.environment.wind.speedApparent\",\n \"pathSource\": \"default\",\n \"period\": 1,\n \"baseUnit\": \"m/s\",\n \"label\": \"self.environment.wind.speedApparent, Source: default, Scale: minute, Period: 1\",\n \"timeScaleFormat\": \"minute\"\n }\n ],\n \"unitDefaults\": {\n \"Unitless\": 'unitless',\n \"Speed\": 'knots',\n \"Flow\": 'l/h',\n \"Temperature\": 'celsius',\n \"Length\": 'm',\n \"Volume\": 'liter',\n \"Current\": 'A',\n \"Potential\": 'V',\n \"Charge\": 'C',\n \"Power\": 'W',\n \"Energy\": 'J',\n \"Pressure\": 'mmHg',\n \"Fuel Distance\": \"nm/l\",\n \"Energy Distance\": \"nm/kWh\",\n \"Density\": 'kg/m3',\n \"Time\": 'Hours',\n \"Angular Velocity\": 'deg/min',\n \"Angle\": 'deg',\n \"Frequency\": 'Hz',\n \"Ratio\": 'ratio',\n \"Resistance\": 'ohm'\n },\n \"notificationConfig\": {\n \"disableNotifications\": false,\n \"menuGrouping\": true,\n \"security\": {\n \"disableSecurity\": true,\n },\n \"devices\": {\n \"disableDevices\": false,\n \"showNormalState\": false,\n \"showNominalState\": false,\n },\n \"sound\": {\n \"disableSound\": false,\n \"muteNormal\": true,\n \"muteNominal\": true,\n \"muteWarn\": true,\n \"muteAlert\": false,\n \"muteAlarm\": false,\n \"muteEmergency\": false,\n },\n }\n}\n\nexport const DemoDashboardsConfig: Dashboard[] = [\n {\n \"id\": \"3e0825ee-95fd-4ad4-8802-e0507845b668\",\n \"name\": \"Sailing\",\n \"configuration\": [\n {\n \"w\": 3,\n \"h\": 4,\n \"id\": \"339698a7-2cff-4ab9-9b50-d8056f971471\",\n \"selector\": \"widget-numeric\",\n \"input\": {\n \"widgetProperties\": {\n \"type\": \"widget-numeric\",\n \"uuid\": \"339698a7-2cff-4ab9-9b50-d8056f971471\",\n \"config\": {\n \"displayName\": \"Depth\",\n \"filterSelfPaths\": true,\n \"paths\": {\n \"numericPath\": {\n \"description\": \"Numeric Data\",\n \"path\": \"self.environment.depth.belowTransducer\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"isPathConfigurable\": true,\n \"convertUnitTo\": \"m\",\n \"showPathSkUnitsFilter\": true,\n \"pathSkUnitsFilter\": null,\n \"sampleTime\": 500\n }\n },\n \"showMax\": false,\n \"showMin\": false,\n \"numDecimal\": 1,\n \"showMiniChart\": true,\n \"yScaleMin\": 0,\n \"yScaleMax\": 100,\n \"inverseYAxis\": false,\n \"verticalChart\": false,\n \"color\": \"blue\",\n \"enableTimeout\": false,\n \"dataTimeout\": 5,\n \"ignoreZones\": false\n }\n }\n },\n \"x\": 0,\n \"y\": 0\n },\n {\n \"w\": 5,\n \"h\": 10,\n \"id\": \"a44028e0-dfee-4492-895b-2b03a60f3a69\",\n \"selector\": \"widget-wind-steer\",\n \"input\": {\n \"widgetProperties\": {\n \"type\": \"widget-wind-steer\",\n \"uuid\": \"a44028e0-dfee-4492-895b-2b03a60f3a69\",\n \"config\": {\n \"filterSelfPaths\": true,\n \"paths\": {\n \"headingPath\": {\n \"description\": \"True Heading\",\n \"path\": \"self.navigation.headingTrue\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"isPathConfigurable\": true,\n \"pathRequired\": true,\n \"showPathSkUnitsFilter\": false,\n \"pathSkUnitsFilter\": \"rad\",\n \"convertUnitTo\": \"deg\",\n \"showConvertUnitTo\": false,\n \"sampleTime\": 500\n },\n \"appWindAngle\": {\n \"description\": \"Apparent Wind Angle\",\n \"path\": \"self.environment.wind.angleApparent\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"isPathConfigurable\": true,\n \"pathRequired\": true,\n \"showPathSkUnitsFilter\": false,\n \"pathSkUnitsFilter\": \"rad\",\n \"convertUnitTo\": \"deg\",\n \"showConvertUnitTo\": false,\n \"sampleTime\": 500\n },\n \"appWindSpeed\": {\n \"description\": \"Apparent Wind Speed\",\n \"path\": \"self.environment.wind.speedApparent\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"isPathConfigurable\": true,\n \"pathRequired\": true,\n \"showPathSkUnitsFilter\": false,\n \"pathSkUnitsFilter\": \"m/s\",\n \"convertUnitTo\": \"knots\",\n \"sampleTime\": 500\n },\n \"trueWindAngle\": {\n \"description\": \"True Wind Angle\",\n \"path\": \"self.environment.wind.angleTrueWater\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"isPathConfigurable\": true,\n \"pathRequired\": false,\n \"showPathSkUnitsFilter\": false,\n \"pathSkUnitsFilter\": \"rad\",\n \"convertUnitTo\": \"deg\",\n \"showConvertUnitTo\": false,\n \"sampleTime\": 500\n },\n \"trueWindSpeed\": {\n \"description\": \"True Wind Speed\",\n \"path\": \"self.environment.wind.speedTrue\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"isPathConfigurable\": true,\n \"pathRequired\": false,\n \"showPathSkUnitsFilter\": false,\n \"pathSkUnitsFilter\": \"m/s\",\n \"convertUnitTo\": \"knots\",\n \"sampleTime\": 500\n },\n \"courseOverGround\": {\n \"description\": \"True Course Over Ground\",\n \"path\": \"self.navigation.courseOverGroundTrue\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"isPathConfigurable\": true,\n \"pathRequired\": false,\n \"showPathSkUnitsFilter\": false,\n \"pathSkUnitsFilter\": \"rad\",\n \"showConvertUnitTo\": false,\n \"convertUnitTo\": \"deg\",\n \"sampleTime\": 500\n },\n \"nextWaypointBearing\": {\n \"description\": \"Next Waypoint True Bearing\",\n \"path\": \"self.navigation.courseGreatCircle.nextPoint.bearingTrue\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"isPathConfigurable\": false,\n \"pathRequired\": false,\n \"showPathSkUnitsFilter\": false,\n \"pathSkUnitsFilter\": \"rad\",\n \"convertUnitTo\": \"deg\",\n \"showConvertUnitTo\": false,\n \"sampleTime\": 500\n },\n \"set\": {\n \"description\": \"True Drift Set\",\n \"path\": \"self.environment.current.setTrue\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"isPathConfigurable\": true,\n \"pathRequired\": false,\n \"showPathSkUnitsFilter\": false,\n \"pathSkUnitsFilter\": \"rad\",\n \"convertUnitTo\": \"deg\",\n \"showConvertUnitTo\": false,\n \"sampleTime\": 500\n },\n \"drift\": {\n \"description\": \"Drift Speed Impact\",\n \"path\": \"self.environment.current.drift\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"isPathConfigurable\": true,\n \"pathRequired\": false,\n \"showPathSkUnitsFilter\": false,\n \"pathSkUnitsFilter\": \"m/s\",\n \"convertUnitTo\": \"knots\",\n \"sampleTime\": 500\n }\n },\n \"windSectorEnable\": true,\n \"windSectorWindowSeconds\": 5,\n \"laylineEnable\": true,\n \"laylineAngle\": 40,\n \"waypointEnable\": true,\n \"courseOverGroundEnable\": true,\n \"driftEnable\": true,\n \"awsEnable\": true,\n \"twsEnable\": true,\n \"sailSetupEnable\": false,\n \"enableTimeout\": false,\n \"dataTimeout\": 5\n }\n }\n },\n \"x\": 3,\n \"y\": 0\n },\n {\n \"w\": 4,\n \"h\": 6,\n \"id\": \"24406c15-7738-4dc1-a206-7a4862c2931d\",\n \"selector\": \"widget-gauge-ng-radial\",\n \"input\": {\n \"widgetProperties\": {\n \"type\": \"widget-gauge-ng-radial\",\n \"uuid\": \"24406c15-7738-4dc1-a206-7a4862c2931d\",\n \"config\": {\n \"displayName\": \"SOG\",\n \"filterSelfPaths\": true,\n \"paths\": {\n \"gaugePath\": {\n \"description\": \"Numeric Data\",\n \"path\": \"self.navigation.speedOverGround\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"isPathConfigurable\": true,\n \"showPathSkUnitsFilter\": true,\n \"pathSkUnitsFilter\": null,\n \"convertUnitTo\": \"knots\",\n \"sampleTime\": 500\n }\n },\n \"displayScale\": {\n \"lower\": 0,\n \"upper\": 10,\n \"type\": \"linear\"\n },\n \"gauge\": {\n \"type\": \"ngRadial\",\n \"subType\": \"measuring\",\n \"enableTicks\": true,\n \"compassUseNumbers\": false,\n \"highlightsWidth\": 5,\n \"scaleStart\": 180\n },\n \"numInt\": 1,\n \"numDecimal\": 1,\n \"enableTimeout\": false,\n \"color\": \"yellow\",\n \"dataTimeout\": 5,\n \"ignoreZones\": false\n }\n }\n },\n \"x\": 8,\n \"y\": 0\n },\n {\n \"w\": 3,\n \"h\": 4,\n \"id\": \"c6bcaa53-afa1-42c7-ad92-d5f7dba14734\",\n \"selector\": \"widget-numeric\",\n \"input\": {\n \"widgetProperties\": {\n \"type\": \"widget-numeric\",\n \"uuid\": \"c6bcaa53-afa1-42c7-ad92-d5f7dba14734\",\n \"config\": {\n \"displayName\": \"STW\",\n \"filterSelfPaths\": true,\n \"paths\": {\n \"numericPath\": {\n \"description\": \"Numeric Data\",\n \"path\": \"self.navigation.speedThroughWater\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"isPathConfigurable\": true,\n \"convertUnitTo\": \"knots\",\n \"showPathSkUnitsFilter\": true,\n \"pathSkUnitsFilter\": null,\n \"sampleTime\": 500\n }\n },\n \"showMax\": true,\n \"showMin\": true,\n \"numDecimal\": 1,\n \"showMiniChart\": false,\n \"yScaleMin\": 0,\n \"yScaleMax\": 10,\n \"inverseYAxis\": false,\n \"verticalChart\": false,\n \"color\": \"contrast\",\n \"enableTimeout\": false,\n \"dataTimeout\": 5,\n \"ignoreZones\": false\n }\n }\n },\n \"x\": 0,\n \"y\": 4\n },\n {\n \"w\": 4,\n \"h\": 6,\n \"id\": \"973c8804-be09-4923-bb5d-48c13b65db69\",\n \"selector\": \"widget-data-chart\",\n \"input\": {\n \"widgetProperties\": {\n \"type\": \"widget-data-chart\",\n \"uuid\": \"973c8804-be09-4923-bb5d-48c13b65db69\",\n \"config\": {\n \"displayName\": \"Chart Label\",\n \"filterSelfPaths\": true,\n \"convertUnitTo\": \"knots\",\n \"datasetUUID\": \"afbe4e41-26f5-404f-a55d-9f7b9b76fbd1\",\n \"inverseYAxis\": false,\n \"datasetAverageArray\": \"sma\",\n \"showAverageData\": true,\n \"trackAgainstAverage\": false,\n \"showDatasetMinimumValueLine\": false,\n \"showDatasetMaximumValueLine\": false,\n \"showDatasetAverageValueLine\": true,\n \"showDatasetAngleAverageValueLine\": false,\n \"showLabel\": false,\n \"showTimeScale\": true,\n \"startScaleAtZero\": false,\n \"verticalChart\": false,\n \"showYScale\": true,\n \"yScaleSuggestedMin\": null,\n \"yScaleSuggestedMax\": null,\n \"enableMinMaxScaleLimit\": false,\n \"yScaleMin\": null,\n \"yScaleMax\": null,\n \"numDecimal\": 1,\n \"color\": \"orange\",\n \"invertData\": false,\n \"verticalGraph\": false\n }\n }\n },\n \"x\": 8,\n \"y\": 6\n },\n {\n \"x\": 0,\n \"y\": 8,\n \"w\": 3,\n \"h\": 4,\n \"minW\": 1,\n \"minH\": 1,\n \"id\": \"5289a84d-18fd-4ee7-9724-72249af403f2\",\n \"selector\": \"widget-position\",\n \"input\": {\n \"widgetProperties\": {\n \"type\": \"widget-position\",\n \"uuid\": \"5289a84d-18fd-4ee7-9724-72249af403f2\",\n \"config\": {\n \"displayName\": \"Position\",\n \"filterSelfPaths\": true,\n \"paths\": {\n \"longPath\": {\n \"description\": \"Longitude\",\n \"path\": \"self.navigation.position.longitude\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"isPathConfigurable\": true,\n \"convertUnitTo\": \"longitudeMin\",\n \"showPathSkUnitsFilter\": true,\n \"pathSkUnitsFilter\": null,\n \"sampleTime\": 500\n },\n \"latPath\": {\n \"description\": \"Latitude\",\n \"path\": \"self.navigation.position.latitude\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"isPathConfigurable\": true,\n \"convertUnitTo\": \"latitudeMin\",\n \"showPathSkUnitsFilter\": true,\n \"pathSkUnitsFilter\": null,\n \"sampleTime\": 500\n }\n },\n \"color\": \"grey\",\n \"enableTimeout\": false,\n \"dataTimeout\": 5\n }\n }\n }\n },\n {\n \"w\": 5,\n \"h\": 2,\n \"id\": \"1a7a3f79-2eb4-4092-a0c3-9a61db8a8586\",\n \"selector\": \"widget-simple-linear\",\n \"input\": {\n \"widgetProperties\": {\n \"type\": \"widget-simple-linear\",\n \"uuid\": \"1a7a3f79-2eb4-4092-a0c3-9a61db8a8586\",\n \"config\": {\n \"displayName\": \"House Bank\",\n \"filterSelfPaths\": true,\n \"paths\": {\n \"gaugePath\": {\n \"description\": \"Numeric Data\",\n \"path\": \"self.electrical.batteries.1.voltage\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"isPathConfigurable\": true,\n \"showPathSkUnitsFilter\": true,\n \"pathSkUnitsFilter\": \"V\",\n \"convertUnitTo\": \"V\",\n \"sampleTime\": 500\n }\n },\n \"displayScale\": {\n \"lower\": 0,\n \"upper\": 15,\n \"type\": \"linear\"\n },\n \"gauge\": {\n \"type\": \"simpleLinear\",\n \"unitLabelFormat\": \"full\"\n },\n \"numInt\": 1,\n \"numDecimal\": 2,\n \"ignoreZones\": false,\n \"color\": \"green\",\n \"enableTimeout\": false,\n \"dataTimeout\": 5\n }\n }\n },\n \"x\": 3,\n \"y\": 10\n }\n ]\n },\n {\n \"id\": \"7c67c8c5-dc55-4e1d-9fc5-3dd95fd41bea\",\n \"name\": \"Charting\",\n \"configuration\": [\n {\n \"x\": 0,\n \"y\": 0,\n \"w\": 8,\n \"h\": 12,\n \"id\": \"488d620a-37d4-4b98-849d-304cd18003e9\",\n \"selector\": \"widget-freeboardsk\",\n \"input\": {\n \"widgetProperties\": {\n \"type\": \"widget-freeboardsk\",\n \"uuid\": \"488d620a-37d4-4b98-849d-304cd18003e9\"\n }\n }\n },\n {\n \"x\": 8,\n \"y\": 0,\n \"w\": 2,\n \"h\": 3,\n \"id\": \"26a2a150-5af8-4f1d-aaab-0cb2a406fc17\",\n \"selector\": \"widget-gauge-ng-compass\",\n \"input\": {\n \"widgetProperties\": {\n \"type\": \"widget-gauge-ng-compass\",\n \"uuid\": \"26a2a150-5af8-4f1d-aaab-0cb2a406fc17\",\n \"config\": {\n \"displayName\": \"COG (T)\",\n \"filterSelfPaths\": true,\n \"paths\": {\n \"gaugePath\": {\n \"description\": \"Numeric Data\",\n \"path\": \"self.navigation.courseOverGroundTrue\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"isPathConfigurable\": true,\n \"showPathSkUnitsFilter\": false,\n \"pathSkUnitsFilter\": \"rad\",\n \"showConvertUnitTo\": false,\n \"convertUnitTo\": \"deg\",\n \"sampleTime\": 500\n }\n },\n \"gauge\": {\n \"type\": \"ngRadial\",\n \"subType\": \"marineCompass\",\n \"enableTicks\": true,\n \"compassUseNumbers\": true,\n \"showValueBox\": false\n },\n \"enableTimeout\": false,\n \"color\": \"purple\",\n \"dataTimeout\": 5\n }\n }\n }\n },\n {\n \"x\": 10,\n \"y\": 0,\n \"w\": 2,\n \"h\": 3,\n \"id\": \"caf9ca47-fcf6-4736-a314-2b5210edaf03\",\n \"selector\": \"widget-datetime\",\n \"input\": {\n \"widgetProperties\": {\n \"type\": \"widget-datetime\",\n \"uuid\": \"caf9ca47-fcf6-4736-a314-2b5210edaf03\",\n \"config\": {\n \"displayName\": \"Next WP Arrival\",\n \"filterSelfPaths\": true,\n \"paths\": {\n \"gaugePath\": {\n \"description\": \"String Data\",\n \"path\": \"self.navigation.datetime\",\n \"source\": \"default\",\n \"pathType\": \"Date\",\n \"isPathConfigurable\": true,\n \"sampleTime\": 500\n }\n },\n \"dateFormat\": \"dd/MM HH:mm\",\n \"dateTimezone\": \"America/Toronto\",\n \"color\": \"contrast\",\n \"enableTimeout\": false,\n \"dataTimeout\": 5\n }\n }\n }\n },\n {\n \"x\": 8,\n \"y\": 3,\n \"w\": 4,\n \"h\": 9,\n \"id\": \"daa21350-009e-4d99-8209-364f9b99caee\",\n \"selector\": \"widget-autopilot\",\n \"input\": {\n \"widgetProperties\": {\n \"type\": \"widget-autopilot\",\n \"uuid\": \"daa21350-009e-4d99-8209-364f9b99caee\",\n \"config\": {\n \"filterSelfPaths\": true,\n \"paths\": {\n \"autopilotState\": {\n \"description\": \"Autopilot State\",\n \"path\": \"self.steering.autopilot.state\",\n \"source\": \"default\",\n \"pathType\": \"string\",\n \"isPathConfigurable\": false,\n \"showPathSkUnitsFilter\": false,\n \"convertUnitTo\": \"\",\n \"sampleTime\": 500\n },\n \"autopilotTargetHeading\": {\n \"description\": \"Autopilot Target Magnetic Heading\",\n \"path\": \"self.steering.autopilot.target.headingMagnetic\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"convertUnitTo\": \"deg\",\n \"isPathConfigurable\": false,\n \"showPathSkUnitsFilter\": false,\n \"pathSkUnitsFilter\": \"rad\",\n \"sampleTime\": 500\n },\n \"autopilotTargetWindHeading\": {\n \"description\": \"Autopilot Target Apparent Wind Angle\",\n \"path\": \"self.steering.autopilot.target.windAngleApparent\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"convertUnitTo\": \"deg\",\n \"isPathConfigurable\": false,\n \"showPathSkUnitsFilter\": false,\n \"pathSkUnitsFilter\": \"rad\",\n \"sampleTime\": 500\n },\n \"rudderAngle\": {\n \"description\": \"Rudder Angle\",\n \"path\": \"self.steering.rudderAngle\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"convertUnitTo\": \"deg\",\n \"isPathConfigurable\": false,\n \"showPathSkUnitsFilter\": false,\n \"pathSkUnitsFilter\": \"rad\",\n \"sampleTime\": 500\n },\n \"courseXte\": {\n \"description\": \"Cross Track Error\",\n \"path\": \"self.navigation.course.calcValues.crossTrackError\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"isPathConfigurable\": false,\n \"convertUnitTo\": \"m\",\n \"showPathSkUnitsFilter\": true,\n \"pathRequired\": false,\n \"pathSkUnitsFilter\": \"m\",\n \"sampleTime\": 500\n },\n \"headingMag\": {\n \"description\": \"Magnetic Heading\",\n \"path\": \"self.navigation.headingMagnetic\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"convertUnitTo\": \"deg\",\n \"isPathConfigurable\": true,\n \"pathRequired\": false,\n \"showPathSkUnitsFilter\": false,\n \"pathSkUnitsFilter\": \"rad\",\n \"showConvertUnitTo\": false,\n \"sampleTime\": 500\n },\n \"headingTrue\": {\n \"description\": \"True Heading\",\n \"path\": \"self.navigation.headingTrue\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"convertUnitTo\": \"deg\",\n \"isPathConfigurable\": true,\n \"pathRequired\": false,\n \"showPathSkUnitsFilter\": false,\n \"pathSkUnitsFilter\": \"rad\",\n \"showConvertUnitTo\": false,\n \"sampleTime\": 500\n },\n \"windAngleApparent\": {\n \"description\": \"Apparent Wind Angle\",\n \"path\": \"self.environment.wind.angleApparent\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"convertUnitTo\": \"deg\",\n \"isPathConfigurable\": true,\n \"pathRequired\": false,\n \"showPathSkUnitsFilter\": false,\n \"pathSkUnitsFilter\": \"rad\",\n \"showConvertUnitTo\": false,\n \"sampleTime\": 500\n },\n \"windAngleTrueWater\": {\n \"description\": \"Wind Angle True Water\",\n \"path\": \"self.environment.wind.angleTrueWater\",\n \"source\": \"default\",\n \"pathType\": \"number\",\n \"convertUnitTo\": \"deg\",\n \"isPathConfigurable\": true,\n \"pathRequired\": false,\n \"showPathSkUnitsFilter\": false,\n \"pathSkUnitsFilter\": \"rad\",\n \"showConvertUnitTo\": false,\n \"sampleTime\": 500\n }\n },\n \"invertRudder\": true,\n \"headingDirectionTrue\": false,\n \"courseDirectionTrue\": false,\n \"enableTimeout\": false,\n \"dataTimeout\": 5,\n \"autopilotInstance\": \"_default\"\n }\n }\n }\n }\n ]\n }\n]\n\nexport const DemoThemeConfig: IThemeConfig = {\n \"themeName\": \"\"\n}\n\nexport const DemoConfig: IConfig = {\n \"app\": DemoAppConfig,\n \"dashboards\": DemoDashboardsConfig,\n \"theme\": DemoThemeConfig,\n}\n\nexport const DemoConnectionConfig: IConnectionConfig = {\n \"configVersion\": 11,\n \"kipUUID\": UUID.create(),\n \"signalKUrl\": \"https://demo.signalk.org\",\n \"proxyEnabled\": false,\n \"signalKSubscribeAll\": false,\n \"useDeviceToken\": false,\n \"loginName\": null,\n \"loginPassword\": null,\n \"useSharedConfig\": false,\n \"sharedConfigName\": \"default\"\n}\n","import { Injectable, inject, signal } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { IDatasetServiceDatasetConfig } from './data-set.service';\nimport { IWidget } from '../interfaces/widgets-interface';\nimport { IUnitDefaults } from './units.service';\nimport { UUID } from '../utils/uuid.util';\n\nimport { IConfig, IAppConfig, IConnectionConfig, IThemeConfig, INotificationConfig, ISignalKUrl } from \"../interfaces/app-settings.interfaces\";\nimport { DefaultAppConfig, DefaultConnectionConfig as DefaultConnectionConfig, DefaultThemeConfig } from '../../../default-config/config.blank.const';\nimport { DefaultUnitsConfig } from '../../../default-config/config.blank.units.const'\nimport { DefaultNotificationConfig } from '../../../default-config/config.blank.notification.const';\nimport { DemoAppConfig, DemoThemeConfig, DemoDashboardsConfig } from '../../../default-config/config.demo.const';\n\nimport { StorageService } from './storage.service';\nimport { Dashboard } from './dashboard.service';\n\nconst defaultTheme = '';\nconst configFileVersion = 11; // used to change the Signal K configuration storage file name (ie. 9.0.0.json) that contains the configuration definitions. Applies only to remote storage.\nconst configVersion = 11; // used to invalidate old configs defined as a property in the configuration object. connectionConfig and appConfig use this same version.\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AppSettingsService {\n private storage = inject(StorageService);\n\n private unitDefaults: BehaviorSubject<IUnitDefaults> = new BehaviorSubject<IUnitDefaults>({});\n private themeName: BehaviorSubject<string> = new BehaviorSubject<string>(defaultTheme);\n private kipKNotificationConfig: BehaviorSubject<INotificationConfig> = new BehaviorSubject<INotificationConfig>(DefaultNotificationConfig);\n private autoNightMode: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n private redNightMode: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n private nightModeBrightness: BehaviorSubject<number> = new BehaviorSubject<number>(1);\n\n public proxyEnabled = false;\n public signalKSubscribeAll = false;\n private useDeviceToken = false;\n private loginName: string;\n private loginPassword: string;\n public useSharedConfig: boolean;\n private sharedConfigName: string;\n private activeConfig: IConfig = {app: null, theme: null, dashboards: null};\n\n private kipUUID: string;\n public signalkUrl: ISignalKUrl;\n private widgets: IWidget[];\n private _dashboards: Dashboard[] = [];\n private dataSets: IDatasetServiceDatasetConfig[] = [];\n public configUpgrade = signal<boolean>(false);\n\n constructor() {\n console.log(\"[AppSettings Service] Service startup...\");\n this.storage.activeConfigFileVersion = configFileVersion;\n\n if (!window.localStorage) {\n // REQUIRED BY APP - localStorage support\n console.error(\"[AppSettings Service] LocalStorage NOT SUPPORTED by browser\\nThis is a requirement to run Kip. See browser documentation to enable this feature.\");\n\n } else {\n this.loadConnectionConfig();\n\n let serverConfig: IConfig;\n\n if (this.storage.initConfig === null && this.useSharedConfig && this.loginName !== null && this.loginPassword !== null && this.signalkUrl.url !== null ) {\n this.resetSettings();\n } else {\n serverConfig = this.storage.initConfig;\n }\n\n if (serverConfig) {\n console.log(\"[AppSettings Service] Remote configuration storage enabled\");\n this.checkConfigUpgradeRequired(false);\n this.activeConfig = serverConfig;\n this.pushSettings();\n } else {\n console.log(\"[AppSettings Service] LocalStorage enabled\");\n const localStorageConfig: IConfig = {app: null, theme: null, dashboards: null};\n localStorageConfig.app = this.loadConfigFromLocalStorage(\"appConfig\");\n if (localStorageConfig.app.configVersion !== configVersion) {\n this.checkConfigUpgradeRequired(true);\n }\n localStorageConfig.dashboards = this.loadConfigFromLocalStorage(\"dashboardsConfig\");\n localStorageConfig.theme = this.loadConfigFromLocalStorage(\"themeConfig\");\n this.activeConfig = localStorageConfig;\n this.pushSettings();\n }\n }\n }\n\n private loadConnectionConfig(): void {\n const config :IConnectionConfig = this.loadConfigFromLocalStorage(\"connectionConfig\");\n\n switch (config.configVersion) {\n case 11:\n break;\n default:\n console.error(`[AppSettings Service] Invalid connectionConfig version ${config.configVersion}. Resetting and loading connection configuration default`);\n this.resetConnection();\n break;\n }\n\n this.signalkUrl = {url: config.signalKUrl, new: false};\n this.proxyEnabled = config.proxyEnabled;\n this.signalKSubscribeAll = config.signalKSubscribeAll;\n this.useDeviceToken = config.useDeviceToken;\n this.loginName = config.loginName;\n this.loginPassword = config.loginPassword;\n this.useSharedConfig = config.useSharedConfig;\n this.sharedConfigName = config.sharedConfigName;\n this.kipUUID = config.kipUUID;\n }\n\n public resetConnection() {\n localStorage.setItem(\"connectionConfig\", JSON.stringify(this.getDefaultConnectionConfig()));\n this.reloadApp();\n }\n\n private checkConfigUpgradeRequired(isLocalStorageConfig: boolean): void {\n if (isLocalStorageConfig) {\n this.configUpgrade.set(true); // Set the upgrade flag to true\n } else {\n this.storage.listConfigs(9).then(async (rootConfigs) => {\n for (const rootConfig of rootConfigs) {\n try {\n // Fetch the full configuration for each rootConfig\n const fullConfig = await this.storage.getConfig(rootConfig.scope, rootConfig.name, 9);\n\n // Check if the version is 10\n if (fullConfig.app?.configVersion === 10) {\n this.configUpgrade.set(true); // Set the upgrade flag to true\n console.log(`[AppSettings Service] Configuration upgrade required for version 10.`);\n break; // Exit the loop once a version 10 config is found\n }\n } catch (error) {\n console.error(`[AppSettings Service] Error fetching configuration for ${rootConfig.name}:`, error);\n }\n }\n })\n .catch((error) => {\n console.error(\"[AppSettings Service] Error fetching configuration data:\", error);\n });\n }\n }\n\n /**\n * Get configuration from local browser storage rather then in\n * memory running config.\n *\n * @param {string} type Possible choices are: appConfig, dashboardsConfig, themeConfig, connectionConfig or older v2 if they are present widgetConfig, layoutConfig, themeConfig, zonesConfig, connectionConfig.\n * @return {*}\n * @memberof AppSettingsService\n */\n public loadConfigFromLocalStorage(type: string) {\n let config = JSON.parse(localStorage.getItem(type));\n\n if (config === null) {\n console.log(`[AppSettings Service] Error loading ${type} config. Force loading ${type} defaults`);\n switch (type) {\n case \"appConfig\":\n config = this.getDefaultAppConfig();\n break;\n\n case \"connectionConfig\":\n config = this.getDefaultConnectionConfig();\n break;\n\n case \"dashboardsConfig\":\n config = this.getDefaultDashboardsConfig();\n break;\n\n case \"themeConfig\":\n config = this.getDefaultThemeConfig();\n break;\n\n default:\n console.error(`[AppSettings Service] Invalid ${type} default config requested`);\n break;\n }\n }\n\n if(type === 'connectionConfig') {\n if (config.configVersion !== configVersion) {\n console.log(`[AppSettings Service] Invalid ${type} version. Force loading defaults`);\n\n switch (type) {\n case \"connectionConfig\":\n config = this.getDefaultConnectionConfig();\n break;\n }\n }\n }\n\n return config;\n }\n\n private pushSettings(): void {\n this.themeName.next(this.activeConfig.theme.themeName);\n this.dataSets = this.activeConfig.app.dataSets;\n this.unitDefaults.next(this.activeConfig.app.unitDefaults);\n this.kipKNotificationConfig.next(this.activeConfig.app.notificationConfig);\n\n if (this.activeConfig.app.autoNightMode === undefined) {\n this.setAutoNightMode(false);\n } else {\n this.autoNightMode.next(this.activeConfig.app.autoNightMode);\n }\n\n if (this.activeConfig.app.redNightMode === undefined) {\n this.setRedNightMode(false);\n } else {\n this.redNightMode.next(this.activeConfig.app.redNightMode);\n }\n\n if (this.activeConfig.app.nightModeBrightness === undefined) {\n this.setNightModeBrightness(0.2);\n } else {\n this.nightModeBrightness.next(this.activeConfig.app.nightModeBrightness);\n }\n\n if (this.activeConfig.dashboards === undefined) {\n this._dashboards = [];\n } else {\n this._dashboards = this.activeConfig.dashboards;\n }\n }\n\n //UnitDefaults\n public getDefaultUnitsAsO() {\n return this.unitDefaults.asObservable();\n }\n public getDefaultUnits() {\n return this.unitDefaults.getValue();\n }\n public setDefaultUnits(newDefaults: IUnitDefaults) {\n this.unitDefaults.next(newDefaults);\n if (this.useSharedConfig) {\n this.storage.patchConfig('Array<IUnitDefaults>', newDefaults);\n\n } else {\n this.saveAppConfigToLocalStorage();\n }\n }\n\n // App config - use by Settings Config Component\n public getAppConfig(): IAppConfig {\n return this.buildAppStorageObject();\n }\n\n public getConnectionConfig(): IConnectionConfig {\n return this.buildConnectionStorageObject();\n }\n\n public setConnectionConfig(value: IConnectionConfig) {\n this.loginName = value.loginName;\n this.loginPassword = value.loginPassword;\n this.useSharedConfig = value.useSharedConfig;\n this.proxyEnabled = value.proxyEnabled;\n this.signalKSubscribeAll = value.signalKSubscribeAll;\n this.signalkUrl.url = value.signalKUrl;\n if (!value.useSharedConfig) {\n this.useDeviceToken = true;\n } else this.useDeviceToken = false;\n this.saveConnectionConfigToLocalStorage();\n }\n\n public setUseDeviceToken(useDeviceToken: boolean) {\n this.useDeviceToken = useDeviceToken;\n this.saveConnectionConfigToLocalStorage();\n }\n\n public getDashboardConfig(): Dashboard[] {\n return this.buildDashboardStorageObject();\n }\n\n public getThemeConfig(): IThemeConfig {\n return this.buildThemeStorageObject();\n }\n\n public get KipUUID(): string {\n return this.kipUUID;\n }\n\n // Themes\n public getThemeNameAsO() {\n return this.themeName.asObservable();\n }\n\n public setThemeName(newTheme: string) {\n this.themeName.next(newTheme);\n if (this.useSharedConfig) {\n const theme: IThemeConfig = {\n themeName: newTheme\n }\n this.storage.patchConfig('IThemeConfig', theme)\n } else {\n this.saveThemeConfigToLocalStorage();\n }\n }\n\n public getThemeName(): string {\n return this.themeName.getValue();;\n }\n\n // Auto night mode\n public getAutoNightModeAsO() {\n return this.autoNightMode.asObservable();\n }\n\n public setAutoNightMode(enabled: boolean) {\n this.autoNightMode.next(enabled);\n const appConf = this.buildAppStorageObject();\n\n if (this.useSharedConfig) {\n this.storage.patchConfig('IAppConfig', appConf);\n } else {\n this.saveAppConfigToLocalStorage();\n }\n }\n\n public getAutoNightMode(): boolean {\n return this.autoNightMode.getValue();\n }\n\n // Red night mode\n public getRedNightModeAsO() {\n return this.redNightMode.asObservable();\n }\n\n public getRedNightMode(): boolean {\n return this.redNightMode.getValue();\n }\n\n public setRedNightMode(enabled: boolean) {\n this.redNightMode.next(enabled);\n const appConf = this.buildAppStorageObject();\n\n if (this.useSharedConfig) {\n this.storage.patchConfig('IAppConfig', appConf);\n } else {\n this.saveAppConfigToLocalStorage();\n }\n }\n\n\n public getNightModeBrightness(): number {\n return this.nightModeBrightness.getValue();\n }\n\n public setNightModeBrightness(brightness: number): void {\n this.nightModeBrightness.next(brightness);\n const appConf = this.buildAppStorageObject();\n\n if (this.useSharedConfig) {\n this.storage.patchConfig('IAppConfig', appConf);\n } else {\n this.saveAppConfigToLocalStorage();\n }\n }\n\n // Widgets\n public getWidgets() {\n return this.widgets;\n }\n\n public saveDashboards(dashboards: Dashboard[]) {\n if (this.useSharedConfig) {\n if (this.storage.storageServiceReady$.getValue()) {\n this.storage.patchConfig('Dashboards', dashboards);\n }\n } else {\n this.saveLDashboardsConfigToLocalStorage(dashboards);\n }\n this._dashboards = dashboards;\n }\n\n // DataSets\n public saveDataSets(dataSets: IDatasetServiceDatasetConfig[]) {\n this.dataSets = dataSets;\n if (this.useSharedConfig) {\n this.storage.patchConfig('Array<IDatasetDef>', dataSets);\n } else {\n this.saveAppConfigToLocalStorage();\n }\n }\n public getDataSets() {\n return this.dataSets;\n }\n\n // Notification Service Setting\n public getNotificationServiceConfigAsO(): Observable<INotificationConfig> {\n return this.kipKNotificationConfig.asObservable();\n }\n public getNotificationConfig(): INotificationConfig {\n return this.kipKNotificationConfig.getValue();\n }\n public setNotificationConfig(notificationConfig: INotificationConfig) {\n this.kipKNotificationConfig.next(notificationConfig);\n if (this.useSharedConfig) {\n this.storage.patchConfig('INotificationConfig', notificationConfig);\n } else {\n this.saveAppConfigToLocalStorage();\n }\n }\n\n //Config manipulation: RAW and SignalK server - used by Settings Config Component\n public resetSettings() {\n\n const newDefaultConfig: IConfig = {app: null, theme: null, dashboards: null};\n newDefaultConfig.app = this.getDefaultAppConfig();\n newDefaultConfig.theme = this.getDefaultThemeConfig();\n newDefaultConfig.dashboards = this.getDefaultDashboardsConfig();\n\n if (this.useSharedConfig) {\n if (this.storage.storageServiceReady$.getValue()) {\n this.storage.setConfig('user', this.sharedConfigName, newDefaultConfig)\n .then(() => {\n console.log(\"[AppSettings Service] Replaced server config name: \" + this.sharedConfigName + \", with default configuration values\");\n this.reloadApp();\n })\n .catch(error => {\n console.error(\"[AppSettings Service] Error replacing server config name: \" + this.sharedConfigName + \", with default configuration values\", error);\n });\n }\n } else {\n\n this.reloadApp();\n }\n }\n\n /**\n * Updates keys of localStorage config and reloads apps if required to apply new config.\n *\n * IMPORTANT NOTE: Kip does not apply config unless app is reloaded\n *\n * @param configType String of either connectionConfig, appConfig, widgetConfig, dashboardConfig or themeConfig.\n * @param newConfig Object containing config. Of type IAppConfig, IWidgetConfig, Dashboard[] or IThemeConfig\n * @param reloadApp Optional Boolean. If True, the app will reload, else does nothing. Defaults to False.\n */\n public replaceConfig(configType: string, newConfig: IAppConfig | IConnectionConfig | IThemeConfig | Dashboard[], reloadApp?: boolean) {\n const jsonConfig = JSON.stringify(newConfig);\n localStorage.setItem(configType, jsonConfig);\n if (reloadApp) {\n this.reloadApp();\n }\n }\n\n public loadDemoConfig() {\n if (this.useSharedConfig) {\n const demoConfig: IConfig = {\n app: DemoAppConfig,\n dashboards: DemoDashboardsConfig,\n theme: DemoThemeConfig\n };\n console.log(\"[AppSettings Service] Loading Demo configuration settings as remote config: \" + this.useSharedConfig + \" and reloading app.\");\n this.storage.setConfig('user', this.sharedConfigName, demoConfig);\n this.reloadApp();\n } else {\n console.log(\"[AppSettings Service] Loading Demo configuration settings to LocalStorage\");\n this.replaceConfig(\"appConfig\", DemoAppConfig);\n this.replaceConfig(\"dashboardsConfig\", DemoDashboardsConfig);\n this.replaceConfig(\"themeConfig\", DemoThemeConfig, true);\n }\n }\n\n public reloadApp() {\n console.log(\"[AppSettings Service] Reload app\");\n // Prevent hard navigation in unit tests (breaks Karma)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((window as any).__KIP_TEST__) {\n return; // no-op\n }\n location.replace(\"./\");\n }\n\n // builds config data oject from running data\n private buildAppStorageObject() {\n\n const storageObject: IAppConfig = {\n configVersion: configVersion,\n autoNightMode: this.autoNightMode.getValue(),\n redNightMode: this.redNightMode.getValue(),\n nightModeBrightness: this.nightModeBrightness.getValue(),\n dataSets: this.dataSets,\n unitDefaults: this.unitDefaults.getValue(),\n notificationConfig: this.kipKNotificationConfig.getValue(),\n }\n return storageObject;\n }\n\n private buildConnectionStorageObject() {\n const storageObject: IConnectionConfig = {\n configVersion: configVersion,\n kipUUID: this.kipUUID,\n signalKUrl: this.signalkUrl.url,\n proxyEnabled: this.proxyEnabled,\n signalKSubscribeAll: this.signalKSubscribeAll,\n useDeviceToken: this.useDeviceToken,\n loginName: this.loginName,\n loginPassword: this.loginPassword,\n useSharedConfig: this.useSharedConfig,\n sharedConfigName: this.sharedConfigName\n }\n return storageObject;\n }\n\n private buildDashboardStorageObject() {\n return this._dashboards;\n }\n\n private buildThemeStorageObject() {\n const storageObject: IThemeConfig = {\n themeName: this.themeName.getValue()\n }\n return storageObject;\n }\n\n // Calls build methods and saves to LocalStorage\n private saveAppConfigToLocalStorage() {\n console.log(\"[AppSettings Service] Saving Application config to LocalStorage\");\n localStorage.setItem('appConfig', JSON.stringify(this.buildAppStorageObject()));\n }\n\n private saveConnectionConfigToLocalStorage() {\n console.log(\"[AppSettings Service] Saving Connection config to LocalStorage\");\n localStorage.setItem('connectionConfig', JSON.stringify(this.buildConnectionStorageObject()));\n }\n\n private saveLDashboardsConfigToLocalStorage(dashboards: Dashboard[]) {\n console.log(\"[AppSettings Service] Saving Dashboard config to LocalStorage\");\n localStorage.setItem('dashboardsConfig', JSON.stringify(dashboards));\n }\n\n private saveThemeConfigToLocalStorage() {\n console.log(\"[AppSettings Service] Saving Theme config to LocalStorage\");\n localStorage.setItem('themeConfig', JSON.stringify(this.buildThemeStorageObject()));\n }\n\n // Creates config from defaults and saves to LocalStorage\n private getDefaultAppConfig(): IAppConfig {\n const config: IAppConfig = DefaultAppConfig;\n config.notificationConfig = DefaultNotificationConfig;\n config.unitDefaults = DefaultUnitsConfig;\n config['configVersion'] = configVersion;\n localStorage.setItem('appConfig', JSON.stringify(config));\n return config;\n }\n\n private getDefaultConnectionConfig(): IConnectionConfig {\n const config: IConnectionConfig = DefaultConnectionConfig;\n config.kipUUID = UUID.create();\n config.signalKUrl = window.location.origin;\n localStorage.setItem('connectionConfig', JSON.stringify(config));\n return config;\n }\n\n private getDefaultDashboardsConfig(): Dashboard[] {\n const config = [];\n localStorage.setItem(\"dashboardsConfig\", JSON.stringify(config));\n return config;\n }\n\n private getDefaultThemeConfig(): IThemeConfig {\n const config: IThemeConfig = DefaultThemeConfig;\n localStorage.setItem(\"themeConfig\", JSON.stringify(config));\n return config;\n }\n}\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nexport default initCloneByTag;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n","import { Subject, AnonymousSubject } from '../../Subject';\nimport { Subscriber } from '../../Subscriber';\nimport { Observable } from '../../Observable';\nimport { Subscription } from '../../Subscription';\nimport { ReplaySubject } from '../../ReplaySubject';\nconst DEFAULT_WEBSOCKET_CONFIG = {\n url: '',\n deserializer: (e) => JSON.parse(e.data),\n serializer: (value) => JSON.stringify(value),\n};\nconst WEBSOCKETSUBJECT_INVALID_ERROR_OBJECT = 'WebSocketSubject.error must be called with an object with an error code, and an optional reason: { code: number, reason: string }';\nexport class WebSocketSubject extends AnonymousSubject {\n constructor(urlConfigOrSource, destination) {\n super();\n this._socket = null;\n if (urlConfigOrSource instanceof Observable) {\n this.destination = destination;\n this.source = urlConfigOrSource;\n }\n else {\n const config = (this._config = Object.assign({}, DEFAULT_WEBSOCKET_CONFIG));\n this._output = new Subject();\n if (typeof urlConfigOrSource === 'string') {\n config.url = urlConfigOrSource;\n }\n else {\n for (const key in urlConfigOrSource) {\n if (urlConfigOrSource.hasOwnProperty(key)) {\n config[key] = urlConfigOrSource[key];\n }\n }\n }\n if (!config.WebSocketCtor && WebSocket) {\n config.WebSocketCtor = WebSocket;\n }\n else if (!config.WebSocketCtor) {\n throw new Error('no WebSocket constructor can be found');\n }\n this.destination = new ReplaySubject();\n }\n }\n lift(operator) {\n const sock = new WebSocketSubject(this._config, this.destination);\n sock.operator = operator;\n sock.source = this;\n return sock;\n }\n _resetState() {\n this._socket = null;\n if (!this.source) {\n this.destination = new ReplaySubject();\n }\n this._output = new Subject();\n }\n multiplex(subMsg, unsubMsg, messageFilter) {\n const self = this;\n return new Observable((observer) => {\n try {\n self.next(subMsg());\n }\n catch (err) {\n observer.error(err);\n }\n const subscription = self.subscribe({\n next: (x) => {\n try {\n if (messageFilter(x)) {\n observer.next(x);\n }\n }\n catch (err) {\n observer.error(err);\n }\n },\n error: (err) => observer.error(err),\n complete: () => observer.complete(),\n });\n return () => {\n try {\n self.next(unsubMsg());\n }\n catch (err) {\n observer.error(err);\n }\n subscription.unsubscribe();\n };\n });\n }\n _connectSocket() {\n const { WebSocketCtor, protocol, url, binaryType } = this._config;\n const observer = this._output;\n let socket = null;\n try {\n socket = protocol ? new WebSocketCtor(url, protocol) : new WebSocketCtor(url);\n this._socket = socket;\n if (binaryType) {\n this._socket.binaryType = binaryType;\n }\n }\n catch (e) {\n observer.error(e);\n return;\n }\n const subscription = new Subscription(() => {\n this._socket = null;\n if (socket && socket.readyState === 1) {\n socket.close();\n }\n });\n socket.onopen = (evt) => {\n const { _socket } = this;\n if (!_socket) {\n socket.close();\n this._resetState();\n return;\n }\n const { openObserver } = this._config;\n if (openObserver) {\n openObserver.next(evt);\n }\n const queue = this.destination;\n this.destination = Subscriber.create((x) => {\n if (socket.readyState === 1) {\n try {\n const { serializer } = this._config;\n socket.send(serializer(x));\n }\n catch (e) {\n this.destination.error(e);\n }\n }\n }, (err) => {\n const { closingObserver } = this._config;\n if (closingObserver) {\n closingObserver.next(undefined);\n }\n if (err && err.code) {\n socket.close(err.code, err.reason);\n }\n else {\n observer.error(new TypeError(WEBSOCKETSUBJECT_INVALID_ERROR_OBJECT));\n }\n this._resetState();\n }, () => {\n const { closingObserver } = this._config;\n if (closingObserver) {\n closingObserver.next(undefined);\n }\n socket.close();\n this._resetState();\n });\n if (queue && queue instanceof ReplaySubject) {\n subscription.add(queue.subscribe(this.destination));\n }\n };\n socket.onerror = (e) => {\n this._resetState();\n observer.error(e);\n };\n socket.onclose = (e) => {\n if (socket === this._socket) {\n this._resetState();\n }\n const { closeObserver } = this._config;\n if (closeObserver) {\n closeObserver.next(e);\n }\n if (e.wasClean) {\n observer.complete();\n }\n else {\n observer.error(e);\n }\n };\n socket.onmessage = (e) => {\n try {\n const { deserializer } = this._config;\n observer.next(deserializer(e));\n }\n catch (err) {\n observer.error(err);\n }\n };\n }\n _subscribe(subscriber) {\n const { source } = this;\n if (source) {\n return source.subscribe(subscriber);\n }\n if (!this._socket) {\n this._connectSocket();\n }\n this._output.subscribe(subscriber);\n subscriber.add(() => {\n const { _socket } = this;\n if (this._output.observers.length === 0) {\n if (_socket && (_socket.readyState === 1 || _socket.readyState === 0)) {\n _socket.close();\n }\n this._resetState();\n }\n });\n return subscriber;\n }\n unsubscribe() {\n const { _socket } = this;\n if (_socket && (_socket.readyState === 1 || _socket.readyState === 0)) {\n _socket.close();\n }\n this._resetState();\n super.unsubscribe();\n }\n}\n","import { WebSocketSubject } from './WebSocketSubject';\nexport function webSocket(urlConfigOrSource) {\n return new WebSocketSubject(urlConfigOrSource);\n}\n","import { DestroyRef, inject, Injectable, NgZone, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, fromEvent } from 'rxjs';\nimport { webSocket, WebSocketSubject } from 'rxjs/webSocket';\n\nimport { ISignalKDataValueUpdate, ISignalKDeltaMessage, ISignalKMeta, ISignalKUpdateMessage } from '../interfaces/signalk-interfaces';\nimport { IMeta, IPathValueData } from \"../interfaces/app-interfaces\";\nimport { SignalKConnectionService, IEndpointStatus } from './signalk-connection.service'\nimport { AuthenticationService, IAuthorizationToken } from './authentication.service';\nimport { ConnectionStateMachine, ConnectionState } from './connection-state-machine.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n\n/**\n * Operation value represent connection statuses.\n * @usageNotes `operation` field describes the type of operation being\n * performed on the connections.\n * `0 = Stopped\n * `1 = Connecting (connection being set up/under execution)\n * `2 = Connected\n * `3 = Error connecting\n * `4 = Resetting\n */\nexport interface IStreamStatus {\n operation: number;\n message: string;\n hasToken: boolean;\n}\n\n@Injectable({\n providedIn: 'root'\n })\nexport class SignalKDeltaService implements OnDestroy {\n private readonly _destroyRef = inject(DestroyRef); // Inject DestroyRef\n\n // Signal K Requests message stream Observable\n private _skRequests$ = new Subject<ISignalKDeltaMessage>();\n // Signal K Notifications message stream Observable\n private _skNotificationsMsg$ = new Subject<ISignalKDataValueUpdate>();\n // Signal K data path message stream Observable\n private _skValue$ = new Subject<IPathValueData>();\n // Signal K Metadata message stream Observer\n private _skMetadata$ = new Subject<IMeta>();\n // Self URN message stream Observer\n private _vesselSelfUrn$ = new Subject<string>();\n // local self URN to filter data based on root node (self or others)\n private _selfUrn: string = undefined;\n\n // Delta Service Endpoint status publishing\n public streamEndpoint: IStreamStatus = {\n operation: 0,\n message: \"Not connected\",\n hasToken: false,\n }\n public streamEndpoint$: BehaviorSubject<IStreamStatus> = new BehaviorSubject<IStreamStatus>(this.streamEndpoint);\n\n // Websocket config\n private endpointWS: string = null;\n private SubscriptionType = \"self\";\n private readonly WS_CONNECTION_SUBSCRIBE = \"?subscribe=\";\n private readonly WS_CONNECTION_META = \"&sendMeta=all\"; // default but we could use none + specific paths in the future\n private socketWS$: WebSocketSubject<object>;\n public socketWSCloseEvent$ = new Subject<CloseEvent>();\n public socketWSOpenEvent$ = new Subject<Event>();\n\n // Token\n private authToken: IAuthorizationToken = null;\n\n private server = inject(SignalKConnectionService);\n private auth = inject(AuthenticationService);\n private connectionStateMachine = inject(ConnectionStateMachine);\n private zones = inject(NgZone); // NgZone to run outside Angular zone - NOT to be confused with SK zones\n\n // Object flattening configuration - conservative settings for performance\n private readonly FLATTEN_CONFIG = {\n maxDepth: 3, // Object recursive depth limit\n maxObjectSize: 20, // Object number of property limit\n enableFlattening: true // Enable or disable recursive flattening of objects\n };\n\n constructor() {\n // Register WebSocket retry callback with ConnectionStateMachine\n this.connectionStateMachine.setWebSocketRetryCallback(() => {\n console.log('[Delta Service] Executing WebSocket retry via callback');\n this.retryWebSocketConnection();\n });\n\n // Monitor Connection Service Endpoint Status for WebSocket URL\n this.server.serverServiceEndpoint$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((endpointStatus: IEndpointStatus) => {\n if (endpointStatus.operation === 2) {\n this.endpointWS = endpointStatus.WsServiceUrl;\n\n // Set subscription type\n if (endpointStatus.subscribeAll) {\n this.SubscriptionType = \"all\";\n } else {\n this.SubscriptionType = \"self\";\n }\n }\n });\n\n // Monitor ConnectionStateMachine state changes\n this.connectionStateMachine.state$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((state: ConnectionState) => {\n switch (state) {\n case ConnectionState.WebSocketConnecting:\n this.handleWebSocketConnecting();\n break;\n case ConnectionState.Connected:\n // Connection handled by WebSocket open event\n break;\n case ConnectionState.Disconnected:\n case ConnectionState.WebSocketError:\n case ConnectionState.PermanentFailure:\n this.handleDisconnection();\n break;\n }\n });\n\n // Monitor Token changes\n this.auth.authToken$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((token: IAuthorizationToken) => {\n if (this.authToken != token) {\n this.authToken = token;\n\n // If WebSocket is connected, reconnect with new token\n if (this.socketWS$ && this.connectionStateMachine.isFullyConnected()) {\n this.closeWS('Token changed');\n this.connectionStateMachine.startWebSocketConnection();\n }\n }\n });\n\n // WebSocket Open Event Handling\n this.socketWSOpenEvent$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this.streamEndpoint.message = \"Connected\";\n this.streamEndpoint.operation = 2;\n if (this.authToken) {\n console.log(\"[Delta Service] WebSocket connected with Authorization Token\")\n } else {\n console.log(\"[Delta Service] WebSocket connected without Authorization Token\");\n }\n this.streamEndpoint$.next(this.streamEndpoint);\n\n // Notify ConnectionStateMachine of successful WebSocket connection\n this.connectionStateMachine.onWebSocketConnected();\n });\n\n // WebSocket closed Event Handling\n this.socketWSCloseEvent$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(event => {\n if (event.wasClean) {\n console.log('[Delta Service] WebSocket closed cleanly');\n this.streamEndpoint.message = \"WebSocket closed\";\n this.streamEndpoint.operation = 0;\n } else {\n console.log('[Delta Service] WebSocket terminated due to socket error');\n this.streamEndpoint.message = \"WebSocket error\";\n this.streamEndpoint.operation = 3;\n\n // Notify ConnectionStateMachine of WebSocket error\n this.connectionStateMachine.onWebSocketError('WebSocket connection lost');\n }\n this.streamEndpoint$.next(this.streamEndpoint);\n });\n\n // Listen for visibility (app suspend, background or screenlock) change events\n fromEvent(document, 'visibilitychange')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n if (document.visibilityState === 'visible') {\n console.log('[Delta Service] App resumed, checking WebSocket connection...');\n this.checkAndReconnect('App resumed');\n } else if (document.visibilityState === 'hidden') {\n console.log('[Delta Service] App suspended');\n // Optional: Handle app suspension logic here if needed\n }\n });\n }\n\n /**\n * Connect WebSocket to server. Called by ConnectionStateMachine.\n * No retry logic - that's handled by ConnectionStateMachine.\n */\n public connectWS(reason: string): void {\n this.streamEndpoint.message = \"Connecting\";\n this.streamEndpoint.operation = 1;\n console.log(`[Delta Service] ${reason}: WebSocket opening...`);\n this.streamEndpoint$.next(this.streamEndpoint);\n\n this.socketWS$ = this.getNewWebSocket();\n\n // Running outside Angular's zone to prevent unnecessary change detection cycles\n this.zones.runOutsideAngular(() => {\n this.socketWS$.pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe({\n next: msgWS => this.processWebsocketMessage(msgWS),\n error: err => {\n console.error('[Delta Service] WebSocket error:', err);\n // Note: ConnectionStateMachine error reporting is handled in the close event handler\n // to avoid duplicate error reports for the same connection failure\n }\n });\n });\n }\n\n /**\n * Retry WebSocket connection without changing ConnectionStateMachine state\n */\n private retryWebSocketConnection(): void {\n console.log('[Delta Service] Retrying WebSocket connection');\n if (!this.endpointWS) {\n console.warn('[Delta Service] No WebSocket endpoint available for retry');\n this.connectionStateMachine.onWebSocketError('No WebSocket endpoint available');\n return;\n }\n\n // Close existing connection if any\n if (this.socketWS$) {\n this.closeWS('Retrying connection');\n }\n\n // Start new WebSocket connection\n this.connectWS('WebSocket retry attempt');\n }\n\n private handleWebSocketConnecting(): void {\n if (!this.endpointWS) {\n console.warn('[Delta Service] No WebSocket endpoint available');\n this.connectionStateMachine.onWebSocketError('No WebSocket endpoint available');\n return;\n }\n\n // Close existing connection if any\n if (this.socketWS$) {\n this.closeWS('Starting new connection');\n }\n\n // Start new WebSocket connection\n this.connectWS('ConnectionStateMachine request');\n }\n\n /**\n * Handle disconnection states from ConnectionStateMachine\n */\n private handleDisconnection(): void {\n if (this.socketWS$) {\n this.closeWS('ConnectionStateMachine disconnection');\n }\n\n this.streamEndpoint.message = \"Not connected\";\n this.streamEndpoint.operation = 0;\n this.streamEndpoint$.next(this.streamEndpoint);\n }\n\n /**\n * Handles connection arguments, token and links socket Open/Close Observers\n */\n private getNewWebSocket(): WebSocketSubject<object> {\n let args = this.WS_CONNECTION_SUBSCRIBE + this.SubscriptionType + this.WS_CONNECTION_META;\n if (this.authToken != null) {\n args += \"&token=\" + this.authToken.token;\n this.streamEndpoint.hasToken = true;\n } else {\n this.streamEndpoint.hasToken = false;\n }\n return webSocket({\n url: this.endpointWS + args,\n closeObserver: this.socketWSCloseEvent$,\n openObserver: this.socketWSOpenEvent$\n })\n }\n\n /**\n * Close Signal K server data stream WebSocket\n */\n public closeWS(reason: string) {\n if (this.socketWS$) {\n this.streamEndpoint.operation = 4; // closing status. Internal - no need to push to Observers\n console.log(\"[Delta Service] \" + reason + \": WebSocket closing...\");\n this.socketWS$.complete();\n }\n }\n\n /**\n * Send message to WebSocket stream recipient (SignalK server).\n * @param msg JSON formatted message to be sent. If the WebSocket is not\n * available, the message will be dropped. The socket parser will automatically\n * stringify the message.\n *\n * `*** Do not pre-stringify the msg param ***`\n */\n public publishDelta(msg: object): void {\n if (this.socketWS$) {\n console.log(\"[Delta Service] WebSocket sending message\");\n this.socketWS$.next(msg);\n } else {\n console.log(\"[Delta Service] No WebSocket present to send message - dropping message\");\n }\n }\n\n private processWebsocketMessage(message: ISignalKDeltaMessage) {\n if (message.updates) {\n this.parseUpdates(message.updates, message.context);\n return;\n }\n\n if (message.requestId) {\n this._skRequests$.next(message);\n return;\n }\n\n if (message.errorMessage) {\n console.warn(\"[Delta Service] Service received stream error message: \" + message.errorMessage);\n return;\n }\n\n if (message.self) {\n this._selfUrn = message.self;\n this._vesselSelfUrn$.next(message.self);\n this.server.setServerInfo(message.name, message.version, message.roles);\n return;\n }\n\n console.warn(\"[Delta Service] Unknown message type. Message content:\" + message);\n }\n\n private parseUpdates(updates: ISignalKUpdateMessage[], context: string): void {\n // if (context != this._selfUrn) { // remove non self root nodes\n // return;\n // }\n\n updates.forEach(update => {\n if (update.meta !== undefined) {\n update.meta.forEach(meta => this.parseSkMeta(meta, context));\n }\n\n if (update.values !== undefined) {\n update.values.forEach(item => {\n if (item.path.startsWith(\"notifications.\")) { // It's a notification message, pass to notification service\n this._skNotificationsMsg$.next(item);\n } else {\n // It's a path value source update.\n if ((typeof(item.value) == 'object') && (item.value !== null)) {\n // Check if recursive flattening is enabled and possible\n if (this.FLATTEN_CONFIG.enableFlattening &&\n this.canFlattenCompletely(item.value, this.FLATTEN_CONFIG.maxDepth, this.FLATTEN_CONFIG.maxObjectSize)) {\n\n // Perform recursive flattening\n const flattenedItems = this.flattenObjectValue(item.value, item.path);\n\n flattenedItems.forEach(flatItem => {\n const dataPath: IPathValueData = {\n context: context,\n path: flatItem.path,\n source: update.$source,\n timestamp: update.timestamp,\n value: flatItem.value,\n };\n this._skValue$.next(dataPath);\n });\n } else {\n // Fall back to single-level flattening for objects that exceed limits\n Object.keys(item.value).forEach(key => {\n const dataPath: IPathValueData = {\n context: context,\n path: `${item.path}.${key}`,\n source: update.$source,\n timestamp: update.timestamp,\n value: item.value[key],\n };\n this._skValue$.next(dataPath);\n });\n }\n } else {\n // It's a Primitive type or a null value\n const dataPath: IPathValueData = {\n context: context,\n path: item.path,\n source: update.$source,\n timestamp: update.timestamp,\n value: item.value,\n };\n this._skValue$.next(dataPath);\n }\n }\n });\n }\n });\n }\n\n\n /**\n * Validates if an object can be completely flattened within configured limits.\n * Uses all-or-nothing approach to prevent partial flattening.\n */\n private canFlattenCompletely(obj: unknown, maxDepth: number, maxSize: number, currentDepth = 0): boolean {\n if (currentDepth >= maxDepth) {\n return false;\n }\n\n if (typeof obj !== 'object' || obj === null) {\n return true;\n }\n\n const keys = Object.keys(obj);\n if (keys.length > maxSize) {\n return false;\n }\n\n // Check all nested objects recursively\n for (const key of keys) {\n if (!this.canFlattenCompletely((obj as Record<string, unknown>)[key], maxDepth, maxSize, currentDepth + 1)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Recursively flattens an object into an array of path-value pairs.\n * Only called after validation confirms complete flattening is possible.\n */\n private flattenObjectValue(obj: unknown, basePath: string, currentDepth = 0): {path: string, value: unknown}[] {\n const results: {path: string, value: unknown}[] = [];\n\n if (typeof obj !== 'object' || obj === null || currentDepth >= this.FLATTEN_CONFIG.maxDepth) {\n return [{ path: basePath, value: obj }];\n }\n\n const keys = Object.keys(obj);\n for (const key of keys) {\n const newPath = basePath ? `${basePath}.${key}` : key;\n const nestedResults = this.flattenObjectValue((obj as Record<string, unknown>)[key], newPath, currentDepth + 1);\n results.push(...nestedResults);\n }\n\n return results;\n }\n\n private parseSkMeta(metadata: ISignalKMeta, context: string) {\n if (metadata.value.properties !== undefined) {\n Object.keys(metadata.value.properties).forEach(key => {\n this._skMetadata$.next({\n context: context,\n path: `${metadata.path}.${key}`,\n meta: metadata.value.properties[key],\n });\n });\n } else {\n this._skMetadata$.next({\n context: context,\n path: metadata.path,\n meta: metadata.value,\n });\n }\n }\n\n // WebSocket Stream Status observable\n getDataStreamStatusAsO() {\n return this.streamEndpoint$.asObservable();\n }\n\n public subscribeRequestUpdates(): Observable<ISignalKDeltaMessage> {\n return this._skRequests$.asObservable();\n }\n\n public subscribeNotificationsUpdates(): Observable<ISignalKDataValueUpdate> {\n return this._skNotificationsMsg$.asObservable();\n }\n\n public subscribeDataPathsUpdates() : Observable<IPathValueData> {\n return this._skValue$.asObservable();\n }\n\n public subscribeMetadataUpdates() : Observable<IMeta> {\n return this._skMetadata$.asObservable();\n }\n\n public subscribeSelfUpdates(): Observable<string> {\n return this._vesselSelfUrn$.asObservable();\n }\n\n /**\n * Check the WebSocket connection status and reconnect if necessary.\n * @param reason Reason for triggering the reconnection logic.\n */\n private checkAndReconnect(reason: string): void {\n if (!this.connectionStateMachine.isFullyConnected()) {\n if (this.connectionStateMachine.isHTTPConnected() && this.connectionStateMachine.currentState !== ConnectionState.WebSocketRetrying) {\n console.log(`[Delta Service] ${reason}: WebSocket disconnected, requesting reconnection...`);\n this.connectionStateMachine.startWebSocketConnection();\n } else {\n console.log(`[Delta Service] ${reason}: HTTP not connected, cannot start WebSocket`);\n }\n } else {\n console.log(`[Delta Service] ${reason}: Connection is active.`);\n }\n }\n\n /**\n * Close the WebSocket on app termination. This send a Close to the server for\n * a clean disconnect. Else the server keeps buffering the messages that creates\n * an overflow.\n *\n * @memberof SignalKDeltaService\n */\n ngOnDestroy(): void {\n this.closeWS(\"App terminated\");\n\n // Complete all the Observables\n this._skRequests$.complete();\n this._skNotificationsMsg$.complete();\n this._skValue$.complete();\n this._skMetadata$.complete();\n\n this._vesselSelfUrn$.complete();\n this.streamEndpoint$.complete();\n this.socketWSOpenEvent$.complete();\n this.socketWSCloseEvent$.complete();\n this.socketWS$?.complete();\n }\n}\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignMergeValue;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nexport default safeGet;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nexport default baseMerge;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","/**\n * This file contains Signal K data interfaces.\n *\n * Those interfaces describe the different data types and structures of the\n * Signal K specification. They apply to both REST and WebSocket.\n *\n * For internal Kip data interfaces, see app-interfaces file.\n */\n\n// Metadata, Notification and Stream Subscription type restrictions.\nexport const states = [\"normal\", \"nominal\", \"alert\", \"warn\", \"alarm\", \"emergency\"] as const;\nexport type TState = typeof states[number];\n\nexport enum States {\n Normal = \"normal\",\n Nominal = \"nominal\",\n Alert = \"alert\",\n Warn = \"warn\",\n Alarm = \"alarm\",\n Emergency = \"emergency\"\n}\n\nexport const types = [\"linear\", \"logarithmic\", \"squareroot\", \"power\"] as const;\nexport type TScaleType = typeof types[number];\n\nexport enum ScaleTypes {\n Linear = \"linear\",\n Logarithmic = \"logarithmic\",\n Squareroot = \"squareroot\",\n Power = \"power\"\n}\n\ntype methods = [\"visual\", \"sound\"];\nexport type TMethod = methods[number];\n\nexport enum Methods {\n Visual = \"visual\",\n Sound = \"sound\"\n}\n\ntype formats = [\"delta\", \"full\"];\nexport type TFormat = formats[number];\n\nexport enum Formats {\n Delta = \"delta\",\n Full = \"full\"\n}\n\nexport const policies = [\"instant\", \"ideal\", \"fixed\"] as const;\nexport type TPolicy = typeof policies[number];\n\nexport enum Policies {\n Instant = \"instant\",\n Ideal = \"ideal\",\n Fixed = \"fixed\"\n}\n\n/**\n * Services: signalk-delta service\n * Use in: Root Delta interface - Signal K (WebSocket stream) lowest level raw message interface.\n *\n * Description: lowest level object interface of all data updates send by the server. This includes\n * server Hello, request/response (PUTs, login, device token and validation) and data updates.\n *\n * @memberof signalk-interfaces\n */\n export interface ISignalKDeltaMessage {\n // Server Hello message structure\n name?: string;\n roles?: string[];\n self?: string;\n version?: string;\n timestamp?:string;\n\n // Main data and meta updates structure\n context?: string;\n updates?: ISignalKUpdateMessage[];\n\n // Request/response response structure\n requestId?: string;\n state?: string;\n statusCode?: number;\n message?: string;\n\n // Request/Response to Device Token request response structure\n accessRequest?: {\n permission?: string;\n token: string;\n timeToLive?: number; //not yet implemented on server. Use token data to extract TTL\n };\n // Request/Response to User login session Token response structure\n login?: {\n token: string;\n timeToLive?: number; //not yet implemented on server. Use token data to extract TTL\n };\n // Request/Response to Token validation/renewal response structure ** Not fully implemented in SK. Don,t use for now\n validate?: {\n token?: string;\n timeToLive?: number; //not yet implemented on server. Use token data to extract TTL\n }\n // used as only when something goes wrong server side or when socket status changes (ei. socket closed by server)\n errorMessage?: string;\n}\n\n/**\n * Data Update message object interface.\n *\n * Services: signalk-delta service\n * Used in: IDeltaMessage.updates interface properties\n *\n * @memberof signalk-interfaces\n */\nexport interface ISignalKUpdateMessage {\n $source: string;\n source?: ISignalKSource;\n values: ISignalKDataValueUpdate[];\n timestamp: string;\n meta?: ISignalKMeta[];\n}\n\n/**\n * Source update message object interface.\n * Used in: IDeltaMessage.updates.source interface properties\n *\n * @memberof signalk-interfaces\n */\nexport interface ISignalKSource {\n // common\n label: string;\n type: string;\n // both n2k and I2C sensors\n src?: string;\n // n2k\n deviceInstance?: number;\n pgn?: number;\n // NMEA0183\n talker?: string;\n sentence?: string;\n}\n\n/**\n * Value update message object interface.\n * Used in: IDeltaMessage.updates.values.[] interface properties\n *\n * @memberof signalk-interfaces\n */\nexport interface ISignalKDataValueUpdate {\n path: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n}\n\n/**\n * Signal K message object interface. Describes meta data received from server.\n *\n * Used by: signalk-delta (parser) and signalk-full (parser) services\n *\n * Included in: IUpdateMessage, IPathFullObject, IPathMetaObject\n *\n * Follow URL for full Signal K specification and description of fields:\n * @url https://signalk.org/specification/1.7.0/doc/data_model_metadata.html\n *\n * When present, metadata can be use for gauge configuration and the state of\n * values in a given scale. It's meant to help automatic gauge configuration, and describe\n * the type of data provided by a given path.\n *\n * @memberof signalk-interfaces\n */\n export interface ISignalKMeta {\n path: string; // not in the spec but always present in the data\n value: ISkMetadata;\n}\n\nexport interface ISkMetadata {\n displayName?: string;\n shortName?: string;\n longName?: string;\n description: string;\n supportsPut?: boolean; // true if the path supports PUT (write) requests\n units: string; // required if value is present. Describe the SK type of data\n timeout?: number; // tells the consumer how long it should consider the value valid\n properties: object; // Not defined by Kip. Used by GPS and Ship details and other complex data types\n method?: TMethod[];\n displayScale?: ISkDisplayScale\n alertMethod?: TMethod[];\n warnMethod?: TMethod[];\n alarmMethod?: TMethod[];\n emergencyMethod?: TMethod[];\n zones?: ISkZone[];\n}\n\nexport interface ISkDisplayScale {\n lower?: number;\n upper?: number;\n type: TScaleType;\n power?: number;\n}\n\nexport interface ISkZone {\n state: TState;\n lower?: number;\n upper?: number;\n message?: string;\n}\n\n/**\n * Signal K Notification message object interface.\n *\n * Follow URL for full Signal K specification and description of fields:\n * @url https://signalk.org/specification/1.7.0/doc/request_response.html\n *\n * @memberof signalk-interfaces\n */\nexport interface ISignalKNotification {\n method: TMethod[],\n state: TState,\n message: string\n timestamp: string,\n}\n","import { DestroyRef, inject, Injectable, OnDestroy } from '@angular/core';\nimport { Observable, BehaviorSubject, ReplaySubject, Subject, map, combineLatest, of, interval, Subscription } from 'rxjs';\nimport { ISkPathData, IPathValueData, IPathMetaData, IMeta } from \"../interfaces/app-interfaces\";\nimport { ISignalKDataValueUpdate, ISkMetadata, ISignalKNotification, States, TState } from '../interfaces/signalk-interfaces'\nimport { SignalKDeltaService } from './signalk-delta.service';\nimport { cloneDeep, merge } from 'lodash-es';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nconst SELFROOTDEF = \"self\";\n\nexport interface IPathUpdate {\n data: IPathData;\n /** The state of the data sent by SK, as per server Zones definitions. Defaults to 'normal' if no zones are defined, or if the value does not match any zone. */\n state: TState;\n};\n\ninterface IPathData {\n /** The path value */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n /** The value's timestamp Date Object (in Zulu time). */\n timestamp: Date | null;\n}\nexport interface IDataState {\n path: string;\n state: TState\n}\n\n// Validation of Signal K RFC3339S datetype format\nconst isRfc3339StringDate = (date: Date | string): boolean => {\n if (isFinite(+(date instanceof Date ? date : new Date(date)))) {\n // eslint-disable-next-line no-useless-escape\n const rfc3339 = new RegExp(\"^([0-9]+)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])[Tt]([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\\.[0-9]+)?(([Zz])|([\\+|\\-]([01][0-9]|2[0-3]):[0-5][0-9]))$\");\n if (rfc3339.test(date as string)) {\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n};\n\n// Translate units from sk metadata to appropriate type category\nconst typeFromUnits = (units: string): string => {\n if (!units) {\n return undefined;\n }\n // So far the only thing that has units and isn't a number is a Date.\n if (units === \"RFC 3339 (UTC)\") {\n return \"Date\";\n }\n return \"number\";\n};\n\n/**\n * The `IPathRegistration` interface represents a registration object used to track a path's Subjects.\n * Each registration is used to share the same Subject with multiple Observers.\n * The `subscribePath()` and `unsubscribePath()` methods return the registration's subject as an Observable.\n *\n * @property {string} path - A Signal K path.\n * @property {string} source - The Signal K data path source. This is used when multiple sources exist for the same path. If set, the Signal K default source will be ignored.\n * @property {BehaviorSubject<IPathData>} _pathData$ - A BehaviorSubject of the private path value.\n * @property {BehaviorSubject<TState>} _pathState$ - A BehaviorSubject of the private path data state property.\n * @property {BehaviorSubject<IPathUpdate>} pathDataUpdate$ - A BehaviorSubject that contains path value and value state.\n * @property {BehaviorSubject<ISkMetadata | null>} pathMeta$ - A BehaviorSubject containing available meta or null.\n *\n * @interface IPathRegistration\n */\ninterface IPathRegistration {\n path: string;\n source: string;\n _pathData$: BehaviorSubject<IPathData>;\n _pathState$: BehaviorSubject<TState>;\n pathDataUpdate$: BehaviorSubject<IPathUpdate>;\n pathMeta$: BehaviorSubject<ISkMetadata | null>;\n combinedSub?: Subscription; // explicit subscription for combined$ to allow manual teardown\n}\n\nexport interface IDeltaUpdate {\n value: number;\n timestamp: number;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DataService implements OnDestroy {\n private delta = inject(SignalKDeltaService);\n private readonly _destroyRef = inject(DestroyRef);\n\n // Performance stats\n private _deltaUpdatesCounter = 0;\n private _deltaUpdatesSubject = new ReplaySubject<IDeltaUpdate>(10);\n\n // Full skData updates for data-browser component\n private _isSkDataFullTreeActive = false;\n private _skDataSubject$ = new BehaviorSubject<ISkPathData[]>([]);\n\n // Full skMeta updates for Zones component\n private _dataServiceMeta: IPathMetaData[] = [];\n private _isSkMetaFullTreeActive = false;\n private _dataServiceMetaSubject$ = new BehaviorSubject<IPathMetaData[]>([]);\n\n // Notifications\n private _skNotificationMsg$ = new Subject<ISignalKDataValueUpdate>();\n private _skNotificationMeta$ = new Subject<IMeta>();\n private _isReset = new Subject<boolean>();\n\n // Service data variables\n private _selfUrn = 'self'; // self urn, should get updated on first delta or rest call.\n private _skData: ISkPathData[] = []; // Local array of paths containing received Signal K Data and used to source Observers\n private _pathRegister: IPathRegistration[] = []; // List of paths used by Kip (Widgets or App (Notifications and such))\n\n constructor() {\n // Emit Delta message update counter every second (RxJS based)\n interval(1000).pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n const update: IDeltaUpdate = { timestamp: Date.now(), value: this._deltaUpdatesCounter };\n this._deltaUpdatesSubject.next(update);\n this._deltaUpdatesCounter = 0;\n });\n\n // Observer of Delta service data path updates\n this.delta.subscribeDataPathsUpdates().pipe(takeUntilDestroyed(this._destroyRef)).subscribe((dataPath: IPathValueData) => {\n this.updatePathData(dataPath);\n });\n\n // Observer of Delta service Metadata updates\n this.delta.subscribeMetadataUpdates().pipe(takeUntilDestroyed(this._destroyRef)).subscribe((deltaMeta: IMeta) => {\n this.setMeta(deltaMeta);\n })\n\n // Observer router of Delta service Notification updates\n this.delta.subscribeNotificationsUpdates().pipe(takeUntilDestroyed(this._destroyRef)).subscribe((msg: ISignalKDataValueUpdate) => {\n const cleanedPath = msg.path.replace('notifications.', 'self.');\n\n const pathItem = this._skData.find(item => item.path == cleanedPath);\n if (pathItem && pathItem.state !== (msg.value as ISignalKNotification).state) {\n pathItem.state = (msg.value as ISignalKNotification).state;\n\n const pathRegisterItem = this._pathRegister.find(item => item.path == cleanedPath);\n if (pathRegisterItem) {\n pathRegisterItem._pathState$.next(pathItem.state);\n }\n }\n\n this._skNotificationMsg$.next(msg);\n });\n\n // Observer of vessel Self URN updates\n this.delta.subscribeSelfUpdates().pipe(takeUntilDestroyed(this._destroyRef)).subscribe(self => {\n this.setSelfUrn(self);\n });\n }\n\n /**\n * Returns an Observable emitting the total amount of the Signal K Delta messages received\n * every second. Upon subscription, the Observable will automatically return\n * the last 60 seconds of captured data, followed by live data updates every seconds.\n *\n *\n * @return {*} {Observable<number>} Count of delta messages received in the last second.\n * @memberof SignalKDataService\n */\n public getSignalkDeltaUpdateStatistics(): Observable<IDeltaUpdate> {\n return this._deltaUpdatesSubject.asObservable();\n }\n\n private resetSignalKData() {\n this._skData = [];\n this._selfUrn = 'self';\n this._isReset.next(true);\n }\n\n public unsubscribePath(path: string): void {\n const index = this._pathRegister.findIndex(registration => registration.path === path);\n\n if (index !== -1) {\n const registration = this._pathRegister[index];\n\n // Ensure all observables are completed to avoid memory leaks\n registration.combinedSub?.unsubscribe();\n registration._pathData$?.complete();\n registration._pathState$?.complete();\n registration.pathDataUpdate$?.complete();\n registration.pathMeta$?.complete();\n\n // Use splice to remove the item without changing the entire\n // array reference.\n this._pathRegister.splice(index, 1);\n }\n }\n\n public subscribePath(path: string, source: string): Observable<IPathUpdate> {\n const matchingPaths = this._pathRegister.find(item => item.path === path && item.source === source);\n if (matchingPaths) {\n return matchingPaths.pathDataUpdate$;\n }\n\n let currentValue: string = null;\n let currentTimestamp: string = null;\n let currentDateTimestamp: Date | null = null;\n let state: TState = States.Normal;\n let pathUpdate: IPathUpdate = {\n data: {\n value: null,\n timestamp: null\n },\n state: state\n };\n let metaUpdate: ISkMetadata = null;\n\n const dataPath = this._skData.find(item => item.path == path);\n\n if (this._skData.length && dataPath) {\n currentValue = source === 'default' ? dataPath.pathValue : dataPath.sources?.[source]?.sourceValue ?? null;\n currentTimestamp = source === 'default' ? dataPath.pathTimestamp : dataPath.sources?.[source]?.sourceTimestamp ?? null;\n currentDateTimestamp = currentTimestamp ? new Date(currentTimestamp) : null;\n\n pathUpdate = {\n data: {\n value: currentValue,\n timestamp: currentDateTimestamp\n },\n state: dataPath.state || state\n };\n\n state = dataPath.state || state;\n metaUpdate = dataPath.meta || null;\n }\n\n const newPathSubject: IPathRegistration = {\n path: path,\n source: source,\n _pathData$: new BehaviorSubject<IPathData>(pathUpdate.data),\n _pathState$: new BehaviorSubject<TState>(pathUpdate.state),\n pathDataUpdate$: new BehaviorSubject<IPathUpdate>(pathUpdate),\n pathMeta$: new BehaviorSubject<ISkMetadata>(metaUpdate)\n };\n\n const combined$ = combineLatest([newPathSubject._pathData$, newPathSubject._pathState$]).pipe(\n map(([d, s]) => ({ data: d, state: s } as IPathUpdate))\n );\n\n newPathSubject.combinedSub = combined$.subscribe(value => newPathSubject.pathDataUpdate$.next(value));\n\n this._pathRegister.push(newPathSubject);\n return newPathSubject.pathDataUpdate$;\n }\n\n /**\n * IMPORTANT: We should always push to both pathValue and source's sourceValue. This is required\n * as per SK specifications. By default, KIP uses the source \"default\". This\n * means, read from the pathValue property, and not the sourceValue. In KIP's\n * path selection component, users can also choose a specific source. This will\n * force KIP to read data from the sourceValue and disregard pathValue.\n *\n * If we have multiple sources for a path and KIP's source is configured to use\n * \"default\", KIP will read data from pathValue. In this case, this means that\n * KIP's pathValue will be overwritten overwritten by both sources, potentially\n * cause erratic widget behaviors!\n *\n * This is, as per SK specifications, by design. Source priority must/should\n * be configured in Signal K server to prevent this. Once configured, only one\n * source will update at a time following priority settings making the pathValue\n * (KIP's \"default\" source setting) behave accordingly. Else, user should select\n * a specific source to read from. This feature allows configurations where multiple\n * source can collaborate to a single path based on priority. Such as if you have\n * multiple GPS, and one goes down: SK priority will switch sources, and KIP\n * (configured with \"default\" source) will continue reading as if nothing ever\n * happened.\n */\n private updatePathData(dataPath: IPathValueData): void {\n this._deltaUpdatesCounter++;\n const updatePath = this.setPathContext(dataPath.context, dataPath.path);\n\n // Find the path item in _skData or create a new one if it doesn't exist\n let pathItem = this._skData.find(pathObject => pathObject.path == updatePath);\n if (!pathItem) {\n let pathType: string = typeof (dataPath.value);\n if (pathType === \"string\" && isRfc3339StringDate(dataPath.value)) {\n pathType = \"Date\";\n }\n\n pathItem = {\n path: updatePath,\n pathValue: dataPath.value,\n pathTimestamp: dataPath.timestamp, // timestamp of the last update. Be mindful of source priorities\n defaultSource: dataPath.source,\n type: pathType,\n state: States.Normal,\n sources: {\n [dataPath.source]: {\n sourceTimestamp: dataPath.timestamp,\n sourceValue: dataPath.value\n }\n }\n };\n\n this._skData.push(pathItem);\n } else {\n // Update the existing path item\n if (pathItem.defaultSource === undefined) {\n pathItem.defaultSource = dataPath.source;\n }\n if (pathItem.type === undefined && dataPath.value !== null) {\n pathItem.type = typeof (dataPath.value);\n if (pathItem.type === \"string\" && isRfc3339StringDate(dataPath.value)) {\n pathItem.type = \"Date\";\n }\n }\n pathItem.pathValue = dataPath.value;\n pathItem.pathTimestamp = dataPath.timestamp;\n pathItem.sources[dataPath.source] = {\n sourceTimestamp: dataPath.timestamp,\n sourceValue: dataPath.value,\n };\n }\n\n // Update path register Subjects with new data\n const pathRegisterItems = this._pathRegister.filter(item => item.path === updatePath);\n if (pathRegisterItems.length) {\n const pathData: IPathData = {\n value: pathItem.pathValue,\n timestamp: new Date(pathItem.pathTimestamp)\n };\n\n const defaultSource = pathRegisterItems.find(item => item.source === \"default\");\n if (defaultSource) {\n defaultSource._pathData$.next(pathData);\n }\n\n const thisSource = pathRegisterItems.find(item => item.source === dataPath.source);\n if (thisSource) {\n thisSource._pathData$.next(pathData);\n }\n }\n\n // Push full tree if data-browser or Zones component are observing\n if (this._isSkDataFullTreeActive) {\n this._skDataSubject$.next(this._skData);\n }\n }\n\n private setMeta(meta: IMeta): void {\n if (meta.path.startsWith(\"notifications.\")) {\n this._skNotificationMeta$.next(meta);\n } else {\n const metaPath = this.setPathContext(meta.context, meta.path);\n let pathObject = this._skData.find(pathObject => pathObject.path === metaPath);\n\n if (!pathObject) { // not in our list yet. The Meta update came before the Source update.\n pathObject = {\n path: metaPath,\n pathValue: undefined,\n pathTimestamp: undefined,\n type: typeFromUnits(meta.meta.units),\n state: States.Normal,\n defaultSource: undefined,\n sources: {},\n meta: meta.meta,\n };\n this._skData.push(pathObject);\n } else {\n if (pathObject.type === 'object' && meta.meta.units) {\n pathObject.type = typeFromUnits(meta.meta.units);\n }\n pathObject.meta = merge(pathObject.meta, meta.meta);\n }\n\n const entry = this._pathRegister.find(entry => entry.path === metaPath);\n if (entry) {\n entry.pathMeta$.next(pathObject.meta);\n }\n\n // If full meta tree is active, push the full tree\n if (this._isSkMetaFullTreeActive) {\n this._dataServiceMeta.push({ path: metaPath, meta: pathObject.meta });\n this._dataServiceMetaSubject$.next(this._dataServiceMeta);\n }\n }\n }\n\n public startSkMetaFullTree(): Observable<IPathMetaData[]> {\n this._isSkMetaFullTreeActive = true;\n\n this._dataServiceMeta = this._skData\n .filter(item => item.meta !== undefined && item.path.startsWith('self.'))\n .map(item => ({ path: item.path, meta: item.meta }));\n\n this._dataServiceMetaSubject$.next(this._dataServiceMeta);\n return this._dataServiceMetaSubject$;\n }\n\n public stopSkMetaFullTree(): void {\n this._isSkMetaFullTreeActive = false;\n this._dataServiceMetaSubject$.next(null);\n this._dataServiceMeta = null;\n }\n\n public startSkDataFullTree(): Observable<ISkPathData[]> {\n this._isSkDataFullTreeActive = true;\n this._skDataSubject$.next(this._skData);\n return this._skDataSubject$;\n }\n\n public stopSkDataFullTree(): void {\n this._isSkDataFullTreeActive = false;\n }\n\n private setSelfUrn(value: string) {\n if (value !== \"\" && value !== null) {\n console.debug('[Signal K Data Service] Setting self to: ' + value);\n this._selfUrn = value;\n } else {\n console.error('[Signal K Data Service] Invalid self URN: ' + value);\n }\n }\n\n private setPathContext(context: string, path: string): string {\n const finalPath = context !== this._selfUrn ? `${context}.${path}` : `${SELFROOTDEF}.${path}`;\n return finalPath;\n }\n\n /**\n * Returns a list of all known Signal K paths of the specified type (sting or numeric)\n * @param valueType data type: string or numeric\n * @param selfOnly if true, returns only paths the begins with \"self\". If false or not specified, everything known\n * @return array of Signal K path string\n */\n public getPathsByType(valueType: string, selfOnly?: boolean): string[] {\n return this._skData\n .filter(item => item.type === valueType && (!selfOnly || item.path.startsWith(\"self\")))\n .map(item => item.path);\n }\n\n public getPathsAndMetaByType(valueType: string, supportsPutOnly?: boolean, selfOnly?: boolean): IPathMetaData[] {\n return this._skData\n .filter(item => {\n const typeMatches = item.type === valueType;\n const selfMatches = !selfOnly || item.path.startsWith(\"self\");\n const supportsPutMatches = supportsPutOnly === true ? item.meta?.supportsPut === true : true;\n return typeMatches && selfMatches && supportsPutMatches;\n })\n .map(item => ({ path: item.path, meta: item.meta }));\n }\n\n public getPathObject(path: string): ISkPathData | null {\n return cloneDeep(this._skData.find(pathObject => pathObject.path === path)) || null;\n }\n\n public getPathUnitType(path: string): string | null {\n return this._skData.find(pathObject => pathObject.path === path)?.meta?.units || null;\n }\n\n /**\n * Set the value of a path to null and state to Normal. This is used to\n * timeout a path value and reset it to null. This is useful for widgets\n * that need to know if a path has timed out.\n *\n * @param {string} path The Signal K path to timeout\n * @param {string} pathType The type of the path value (string, Date, number)\n * @memberof SignalKDataService\n */\n public timeoutPathObservable(path: string, pathType: string): void {\n const pathRegister = this._pathRegister.find(item => item.path == path);\n if (pathRegister) {\n let timeoutValue: IPathUpdate;\n\n if (['string', 'Date', 'number'].includes(pathType)) {\n timeoutValue = {\n data: {\n value: null,\n timestamp: null\n },\n state: States.Normal\n };\n }\n\n pathRegister.pathDataUpdate$.next(timeoutValue);\n }\n }\n\n public getNotificationMsgObservable(): Observable<ISignalKDataValueUpdate> {\n return this._skNotificationMsg$.asObservable();\n }\n\n public getNotificationMetaObservable(): Observable<IMeta> {\n return this._skNotificationMeta$.asObservable();\n }\n\n public getPathMetaObservable(path: string): Observable<ISkMetadata | null> {\n const registration = this._pathRegister.find(registration => registration.path == path);\n return registration?.pathMeta$.asObservable() || of(null);\n }\n\n /**\n * Fetches the metadata for a given path from the _skData array.\n *\n * @param {string} path - The path for which to fetch the metadata.\n *\n * @returns {ISkMetadata | null} The metadata object for the given path if found, otherwise null.\n */\n public getPathMeta(path: string): ISkMetadata | null {\n return this._skData.find(item => item.path === path)?.meta || null;\n }\n\n public isResetService(): Observable<boolean> {\n return this._isReset.asObservable();\n }\n\n ngOnDestroy(): void {\n this._deltaUpdatesSubject?.complete();\n this._skNotificationMsg$?.complete();\n this._skNotificationMeta$?.complete();\n this._isReset?.complete();\n this._skDataSubject$?.complete();\n this._dataServiceMetaSubject$?.complete();\n }\n}\n","import * as i0 from '@angular/core';\nimport { inject, ElementRef, NgZone, Renderer2, ChangeDetectorRef, Injector, DOCUMENT, afterNextRender, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, InjectionToken, TemplateRef, Injectable, signal, EventEmitter, NgModule } from '@angular/core';\nimport { Subject, defer } from 'rxjs';\nimport { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal, PortalModule } from './portal.mjs';\nfunction CdkDialogContainer_ng_template_0_Template(rf, ctx) {}\nexport { CdkPortal as ɵɵCdkPortal, PortalHostDirective as ɵɵPortalHostDirective, TemplatePortalDirective as ɵɵTemplatePortalDirective } from './portal.mjs';\nimport { F as FocusTrapFactory, I as InteractivityChecker, A as A11yModule } from './a11y-module-BPzgKr79.mjs';\nimport { F as FocusMonitor } from './focus-monitor-DUe99AIS.mjs';\nimport { P as Platform } from './platform-DNDzkVcI.mjs';\nimport { c as _getFocusedElementPierceShadowDom } from './shadow-dom-B0oHn41l.mjs';\nimport { g as ESCAPE } from './keycodes-CpHkExLC.mjs';\nimport { hasModifierKey } from './keycodes.mjs';\nimport { startWith, take } from 'rxjs/operators';\nimport { s as createBlockScrollStrategy, O as OverlayContainer, c as createOverlayRef, i as OverlayConfig, f as createGlobalPositionStrategy, d as OverlayRef, t as OverlayModule } from './overlay-module-Bd2UplUU.mjs';\nimport { _ as _IdGenerator } from './id-generator-LuoRZSid.mjs';\nimport { D as Directionality } from './directionality-CChdj3az.mjs';\nimport './style-loader-B2sGQXxD.mjs';\nimport './private.mjs';\nimport './breakpoints-observer-QutrMj4x.mjs';\nimport './array-I1yfCXUO.mjs';\nimport './observers.mjs';\nimport './element-x4z00URv.mjs';\nimport './fake-event-detection-DWOdFTFz.mjs';\nimport './passive-listeners-esHZRgIN.mjs';\nimport '@angular/common';\nimport './test-environment-CT0XxPyp.mjs';\nimport './css-pixel-value-C_HEqLhI.mjs';\nimport './scrolling.mjs';\nimport './scrolling-BkvA05C8.mjs';\nimport './bidi.mjs';\nimport './recycle-view-repeater-strategy-SfuyU210.mjs';\nimport './data-source-D34wiQZj.mjs';\n\n/** Configuration for opening a modal dialog. */\nclass DialogConfig {\n /**\n * Where the attached component should live in Angular's *logical* component tree.\n * This affects what is available for injection and the change detection order for the\n * component instantiated inside of the dialog. This does not affect where the dialog\n * content will be rendered.\n */\n viewContainerRef;\n /**\n * Injector used for the instantiation of the component to be attached. If provided,\n * takes precedence over the injector indirectly provided by `ViewContainerRef`.\n */\n injector;\n /** ID for the dialog. If omitted, a unique one will be generated. */\n id;\n /** The ARIA role of the dialog element. */\n role = 'dialog';\n /** Optional CSS class or classes applied to the overlay panel. */\n panelClass = '';\n /** Whether the dialog has a backdrop. */\n hasBackdrop = true;\n /** Optional CSS class or classes applied to the overlay backdrop. */\n backdropClass = '';\n /** Whether the dialog closes with the escape key or pointer events outside the panel element. */\n disableClose = false;\n /** Function used to determine whether the dialog is allowed to close. */\n closePredicate;\n /** Width of the dialog. */\n width = '';\n /** Height of the dialog. */\n height = '';\n /** Min-width of the dialog. If a number is provided, assumes pixel units. */\n minWidth;\n /** Min-height of the dialog. If a number is provided, assumes pixel units. */\n minHeight;\n /** Max-width of the dialog. If a number is provided, assumes pixel units. */\n maxWidth;\n /** Max-height of the dialog. If a number is provided, assumes pixel units. */\n maxHeight;\n /** Strategy to use when positioning the dialog. Defaults to centering it on the page. */\n positionStrategy;\n /** Data being injected into the child component. */\n data = null;\n /** Layout direction for the dialog's content. */\n direction;\n /** ID of the element that describes the dialog. */\n ariaDescribedBy = null;\n /** ID of the element that labels the dialog. */\n ariaLabelledBy = null;\n /** Dialog label applied via `aria-label` */\n ariaLabel = null;\n /**\n * Whether this is a modal dialog. Used to set the `aria-modal` attribute. Off by default,\n * because it can interfere with other overlay-based components (e.g. `mat-select`) and because\n * it is redundant since the dialog marks all outside content as `aria-hidden` anyway.\n */\n ariaModal = false;\n /**\n * Where the dialog should focus on open.\n * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or\n * AutoFocusTarget instead.\n */\n autoFocus = 'first-tabbable';\n /**\n * Whether the dialog should restore focus to the previously-focused element upon closing.\n * Has the following behavior based on the type that is passed in:\n * - `boolean` - when true, will return focus to the element that was focused before the dialog\n * was opened, otherwise won't restore focus at all.\n * - `string` - focus will be restored to the first element that matches the CSS selector.\n * - `HTMLElement` - focus will be restored to the specific element.\n */\n restoreFocus = true;\n /**\n * Scroll strategy to be used for the dialog. This determines how\n * the dialog responds to scrolling underneath the panel element.\n */\n scrollStrategy;\n /**\n * Whether the dialog should close when the user navigates backwards or forwards through browser\n * history. This does not apply to navigation via anchor element unless using URL-hash based\n * routing (`HashLocationStrategy` in the Angular router).\n */\n closeOnNavigation = true;\n /**\n * Whether the dialog should close when the dialog service is destroyed. This is useful if\n * another service is wrapping the dialog and is managing the destruction instead.\n */\n closeOnDestroy = true;\n /**\n * Whether the dialog should close when the underlying overlay is detached. This is useful if\n * another service is wrapping the dialog and is managing the destruction instead. E.g. an\n * external detachment can happen as a result of a scroll strategy triggering it or when the\n * browser location changes.\n */\n closeOnOverlayDetachments = true;\n /**\n * Whether the built-in overlay animations should be disabled.\n */\n disableAnimations = false;\n /**\n * Providers that will be exposed to the contents of the dialog. Can also\n * be provided as a function in order to generate the providers lazily.\n */\n providers;\n /**\n * Component into which the dialog content will be rendered. Defaults to `CdkDialogContainer`.\n * A configuration object can be passed in to customize the providers that will be exposed\n * to the dialog container.\n */\n container;\n /**\n * Context that will be passed to template-based dialogs.\n * A function can be passed in to resolve the context lazily.\n */\n templateContext;\n}\nfunction throwDialogContentAlreadyAttachedError() {\n throw Error('Attempting to attach dialog content after content is already attached');\n}\n/**\n * Internal component that wraps user-provided dialog content.\n * @docs-private\n */\nclass CdkDialogContainer extends BasePortalOutlet {\n _elementRef = inject(ElementRef);\n _focusTrapFactory = inject(FocusTrapFactory);\n _config;\n _interactivityChecker = inject(InteractivityChecker);\n _ngZone = inject(NgZone);\n _focusMonitor = inject(FocusMonitor);\n _renderer = inject(Renderer2);\n _changeDetectorRef = inject(ChangeDetectorRef);\n _injector = inject(Injector);\n _platform = inject(Platform);\n _document = inject(DOCUMENT);\n /** The portal outlet inside of this container into which the dialog content will be loaded. */\n _portalOutlet;\n _focusTrapped = new Subject();\n /** The class that traps and manages focus within the dialog. */\n _focusTrap = null;\n /** Element that was focused before the dialog was opened. Save this to restore upon close. */\n _elementFocusedBeforeDialogWasOpened = null;\n /**\n * Type of interaction that led to the dialog being closed. This is used to determine\n * whether the focus style will be applied when returning focus to its original location\n * after the dialog is closed.\n */\n _closeInteractionType = null;\n /**\n * Queue of the IDs of the dialog's label element, based on their definition order. The first\n * ID will be used as the `aria-labelledby` value. We use a queue here to handle the case\n * where there are two or more titles in the DOM at a time and the first one is destroyed while\n * the rest are present.\n */\n _ariaLabelledByQueue = [];\n _isDestroyed = false;\n constructor() {\n super();\n // Callback is primarily for some internal tests\n // that were instantiating the dialog container manually.\n this._config = inject(DialogConfig, {\n optional: true\n }) || new DialogConfig();\n if (this._config.ariaLabelledBy) {\n this._ariaLabelledByQueue.push(this._config.ariaLabelledBy);\n }\n }\n _addAriaLabelledBy(id) {\n this._ariaLabelledByQueue.push(id);\n this._changeDetectorRef.markForCheck();\n }\n _removeAriaLabelledBy(id) {\n const index = this._ariaLabelledByQueue.indexOf(id);\n if (index > -1) {\n this._ariaLabelledByQueue.splice(index, 1);\n this._changeDetectorRef.markForCheck();\n }\n }\n _contentAttached() {\n this._initializeFocusTrap();\n this._captureInitialFocus();\n }\n /**\n * Can be used by child classes to customize the initial focus\n * capturing behavior (e.g. if it's tied to an animation).\n */\n _captureInitialFocus() {\n this._trapFocus();\n }\n ngOnDestroy() {\n this._focusTrapped.complete();\n this._isDestroyed = true;\n this._restoreFocus();\n }\n /**\n * Attach a ComponentPortal as content to this dialog container.\n * @param portal Portal to be attached as the dialog content.\n */\n attachComponentPortal(portal) {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwDialogContentAlreadyAttachedError();\n }\n const result = this._portalOutlet.attachComponentPortal(portal);\n this._contentAttached();\n return result;\n }\n /**\n * Attach a TemplatePortal as content to this dialog container.\n * @param portal Portal to be attached as the dialog content.\n */\n attachTemplatePortal(portal) {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwDialogContentAlreadyAttachedError();\n }\n const result = this._portalOutlet.attachTemplatePortal(portal);\n this._contentAttached();\n return result;\n }\n /**\n * Attaches a DOM portal to the dialog container.\n * @param portal Portal to be attached.\n * @deprecated To be turned into a method.\n * @breaking-change 10.0.0\n */\n attachDomPortal = portal => {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwDialogContentAlreadyAttachedError();\n }\n const result = this._portalOutlet.attachDomPortal(portal);\n this._contentAttached();\n return result;\n };\n // TODO(crisbeto): this shouldn't be exposed, but there are internal references to it.\n /** Captures focus if it isn't already inside the dialog. */\n _recaptureFocus() {\n if (!this._containsFocus()) {\n this._trapFocus();\n }\n }\n /**\n * Focuses the provided element. If the element is not focusable, it will add a tabIndex\n * attribute to forcefully focus it. The attribute is removed after focus is moved.\n * @param element The element to focus.\n */\n _forceFocus(element, options) {\n if (!this._interactivityChecker.isFocusable(element)) {\n element.tabIndex = -1;\n // The tabindex attribute should be removed to avoid navigating to that element again\n this._ngZone.runOutsideAngular(() => {\n const callback = () => {\n deregisterBlur();\n deregisterMousedown();\n element.removeAttribute('tabindex');\n };\n const deregisterBlur = this._renderer.listen(element, 'blur', callback);\n const deregisterMousedown = this._renderer.listen(element, 'mousedown', callback);\n });\n }\n element.focus(options);\n }\n /**\n * Focuses the first element that matches the given selector within the focus trap.\n * @param selector The CSS selector for the element to set focus to.\n */\n _focusByCssSelector(selector, options) {\n let elementToFocus = this._elementRef.nativeElement.querySelector(selector);\n if (elementToFocus) {\n this._forceFocus(elementToFocus, options);\n }\n }\n /**\n * Moves the focus inside the focus trap. When autoFocus is not set to 'dialog', if focus\n * cannot be moved then focus will go to the dialog container.\n */\n _trapFocus(options) {\n if (this._isDestroyed) {\n return;\n }\n // If were to attempt to focus immediately, then the content of the dialog would not yet be\n // ready in instances where change detection has to run first. To deal with this, we simply\n // wait until after the next render.\n afterNextRender(() => {\n const element = this._elementRef.nativeElement;\n switch (this._config.autoFocus) {\n case false:\n case 'dialog':\n // Ensure that focus is on the dialog container. It's possible that a different\n // component tried to move focus while the open animation was running. See:\n // https://github.com/angular/components/issues/16215. Note that we only want to do this\n // if the focus isn't inside the dialog already, because it's possible that the consumer\n // turned off `autoFocus` in order to move focus themselves.\n if (!this._containsFocus()) {\n element.focus(options);\n }\n break;\n case true:\n case 'first-tabbable':\n const focusedSuccessfully = this._focusTrap?.focusInitialElement(options);\n // If we weren't able to find a focusable element in the dialog, then focus the dialog\n // container instead.\n if (!focusedSuccessfully) {\n this._focusDialogContainer(options);\n }\n break;\n case 'first-heading':\n this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role=\"heading\"]', options);\n break;\n default:\n this._focusByCssSelector(this._config.autoFocus, options);\n break;\n }\n this._focusTrapped.next();\n }, {\n injector: this._injector\n });\n }\n /** Restores focus to the element that was focused before the dialog opened. */\n _restoreFocus() {\n const focusConfig = this._config.restoreFocus;\n let focusTargetElement = null;\n if (typeof focusConfig === 'string') {\n focusTargetElement = this._document.querySelector(focusConfig);\n } else if (typeof focusConfig === 'boolean') {\n focusTargetElement = focusConfig ? this._elementFocusedBeforeDialogWasOpened : null;\n } else if (focusConfig) {\n focusTargetElement = focusConfig;\n }\n // We need the extra check, because IE can set the `activeElement` to null in some cases.\n if (this._config.restoreFocus && focusTargetElement && typeof focusTargetElement.focus === 'function') {\n const activeElement = _getFocusedElementPierceShadowDom();\n const element = this._elementRef.nativeElement;\n // Make sure that focus is still inside the dialog or is on the body (usually because a\n // non-focusable element like the backdrop was clicked) before moving it. It's possible that\n // the consumer moved it themselves before the animation was done, in which case we shouldn't\n // do anything.\n if (!activeElement || activeElement === this._document.body || activeElement === element || element.contains(activeElement)) {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(focusTargetElement, this._closeInteractionType);\n this._closeInteractionType = null;\n } else {\n focusTargetElement.focus();\n }\n }\n }\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n }\n /** Focuses the dialog container. */\n _focusDialogContainer(options) {\n // Note that there is no focus method when rendering on the server.\n this._elementRef.nativeElement.focus?.(options);\n }\n /** Returns whether focus is inside the dialog. */\n _containsFocus() {\n const element = this._elementRef.nativeElement;\n const activeElement = _getFocusedElementPierceShadowDom();\n return element === activeElement || element.contains(activeElement);\n }\n /** Sets up the focus trap. */\n _initializeFocusTrap() {\n if (this._platform.isBrowser) {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n // Save the previously focused element. This element will be re-focused\n // when the dialog closes.\n if (this._document) {\n this._elementFocusedBeforeDialogWasOpened = _getFocusedElementPierceShadowDom();\n }\n }\n }\n static ɵfac = function CdkDialogContainer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkDialogContainer)();\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: CdkDialogContainer,\n selectors: [[\"cdk-dialog-container\"]],\n viewQuery: function CdkDialogContainer_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(CdkPortalOutlet, 7);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._portalOutlet = _t.first);\n }\n },\n hostAttrs: [\"tabindex\", \"-1\", 1, \"cdk-dialog-container\"],\n hostVars: 6,\n hostBindings: function CdkDialogContainer_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"id\", ctx._config.id || null)(\"role\", ctx._config.role)(\"aria-modal\", ctx._config.ariaModal)(\"aria-labelledby\", ctx._config.ariaLabel ? null : ctx._ariaLabelledByQueue[0])(\"aria-label\", ctx._config.ariaLabel)(\"aria-describedby\", ctx._config.ariaDescribedBy || null);\n }\n },\n features: [i0.ɵɵInheritDefinitionFeature],\n decls: 1,\n vars: 0,\n consts: [[\"cdkPortalOutlet\", \"\"]],\n template: function CdkDialogContainer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, CdkDialogContainer_ng_template_0_Template, 0, 0, \"ng-template\", 0);\n }\n },\n dependencies: [CdkPortalOutlet],\n styles: [\".cdk-dialog-container{display:block;width:100%;height:100%;min-height:inherit;max-height:inherit}\\n\"],\n encapsulation: 2\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkDialogContainer, [{\n type: Component,\n args: [{\n selector: 'cdk-dialog-container',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n imports: [CdkPortalOutlet],\n host: {\n 'class': 'cdk-dialog-container',\n 'tabindex': '-1',\n '[attr.id]': '_config.id || null',\n '[attr.role]': '_config.role',\n '[attr.aria-modal]': '_config.ariaModal',\n '[attr.aria-labelledby]': '_config.ariaLabel ? null : _ariaLabelledByQueue[0]',\n '[attr.aria-label]': '_config.ariaLabel',\n '[attr.aria-describedby]': '_config.ariaDescribedBy || null'\n },\n template: \"<ng-template cdkPortalOutlet />\\n\",\n styles: [\".cdk-dialog-container{display:block;width:100%;height:100%;min-height:inherit;max-height:inherit}\\n\"]\n }]\n }], () => [], {\n _portalOutlet: [{\n type: ViewChild,\n args: [CdkPortalOutlet, {\n static: true\n }]\n }]\n });\n})();\n\n/**\n * Reference to a dialog opened via the Dialog service.\n */\nclass DialogRef {\n overlayRef;\n config;\n /**\n * Instance of component opened into the dialog. Will be\n * null when the dialog is opened using a `TemplateRef`.\n */\n componentInstance;\n /**\n * `ComponentRef` of the component opened into the dialog. Will be\n * null when the dialog is opened using a `TemplateRef`.\n */\n componentRef;\n /** Instance of the container that is rendering out the dialog content. */\n containerInstance;\n /** Whether the user is allowed to close the dialog. */\n disableClose;\n /** Emits when the dialog has been closed. */\n closed = new Subject();\n /** Emits when the backdrop of the dialog is clicked. */\n backdropClick;\n /** Emits when on keyboard events within the dialog. */\n keydownEvents;\n /** Emits on pointer events that happen outside of the dialog. */\n outsidePointerEvents;\n /** Unique ID for the dialog. */\n id;\n /** Subscription to external detachments of the dialog. */\n _detachSubscription;\n constructor(overlayRef, config) {\n this.overlayRef = overlayRef;\n this.config = config;\n this.disableClose = config.disableClose;\n this.backdropClick = overlayRef.backdropClick();\n this.keydownEvents = overlayRef.keydownEvents();\n this.outsidePointerEvents = overlayRef.outsidePointerEvents();\n this.id = config.id; // By the time the dialog is created we are guaranteed to have an ID.\n this.keydownEvents.subscribe(event => {\n if (event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event)) {\n event.preventDefault();\n this.close(undefined, {\n focusOrigin: 'keyboard'\n });\n }\n });\n this.backdropClick.subscribe(() => {\n if (!this.disableClose && this._canClose()) {\n this.close(undefined, {\n focusOrigin: 'mouse'\n });\n } else {\n // Clicking on the backdrop will move focus out of dialog.\n // Recapture it if closing via the backdrop is disabled.\n this.containerInstance._recaptureFocus?.();\n }\n });\n this._detachSubscription = overlayRef.detachments().subscribe(() => {\n // Check specifically for `false`, because we want `undefined` to be treated like `true`.\n if (config.closeOnOverlayDetachments !== false) {\n this.close();\n }\n });\n }\n /**\n * Close the dialog.\n * @param result Optional result to return to the dialog opener.\n * @param options Additional options to customize the closing behavior.\n */\n close(result, options) {\n if (this._canClose(result)) {\n const closedSubject = this.closed;\n this.containerInstance._closeInteractionType = options?.focusOrigin || 'program';\n // Drop the detach subscription first since it can be triggered by the\n // `dispose` call and override the result of this closing sequence.\n this._detachSubscription.unsubscribe();\n this.overlayRef.dispose();\n closedSubject.next(result);\n closedSubject.complete();\n this.componentInstance = this.containerInstance = null;\n }\n }\n /** Updates the position of the dialog based on the current position strategy. */\n updatePosition() {\n this.overlayRef.updatePosition();\n return this;\n }\n /**\n * Updates the dialog's width and height.\n * @param width New width of the dialog.\n * @param height New height of the dialog.\n */\n updateSize(width = '', height = '') {\n this.overlayRef.updateSize({\n width,\n height\n });\n return this;\n }\n /** Add a CSS class or an array of classes to the overlay pane. */\n addPanelClass(classes) {\n this.overlayRef.addPanelClass(classes);\n return this;\n }\n /** Remove a CSS class or an array of classes from the overlay pane. */\n removePanelClass(classes) {\n this.overlayRef.removePanelClass(classes);\n return this;\n }\n /** Whether the dialog is allowed to close. */\n _canClose(result) {\n const config = this.config;\n return !!this.containerInstance && (!config.closePredicate || config.closePredicate(result, config, this.componentInstance));\n }\n}\n\n/** Injection token for the Dialog's ScrollStrategy. */\nconst DIALOG_SCROLL_STRATEGY = new InjectionToken('DialogScrollStrategy', {\n providedIn: 'root',\n factory: () => {\n const injector = inject(Injector);\n return () => createBlockScrollStrategy(injector);\n }\n});\n/** Injection token for the Dialog's Data. */\nconst DIALOG_DATA = new InjectionToken('DialogData');\n/** Injection token that can be used to provide default options for the dialog module. */\nconst DEFAULT_DIALOG_CONFIG = new InjectionToken('DefaultDialogConfig');\nfunction getDirectionality(value) {\n const valueSignal = signal(value);\n const change = new EventEmitter();\n return {\n valueSignal,\n get value() {\n return valueSignal();\n },\n change,\n ngOnDestroy() {\n change.complete();\n }\n };\n}\nclass Dialog {\n _injector = inject(Injector);\n _defaultOptions = inject(DEFAULT_DIALOG_CONFIG, {\n optional: true\n });\n _parentDialog = inject(Dialog, {\n optional: true,\n skipSelf: true\n });\n _overlayContainer = inject(OverlayContainer);\n _idGenerator = inject(_IdGenerator);\n _openDialogsAtThisLevel = [];\n _afterAllClosedAtThisLevel = new Subject();\n _afterOpenedAtThisLevel = new Subject();\n _ariaHiddenElements = new Map();\n _scrollStrategy = inject(DIALOG_SCROLL_STRATEGY);\n /** Keeps track of the currently-open dialogs. */\n get openDialogs() {\n return this._parentDialog ? this._parentDialog.openDialogs : this._openDialogsAtThisLevel;\n }\n /** Stream that emits when a dialog has been opened. */\n get afterOpened() {\n return this._parentDialog ? this._parentDialog.afterOpened : this._afterOpenedAtThisLevel;\n }\n /**\n * Stream that emits when all open dialog have finished closing.\n * Will emit on subscribe if there are no open dialogs to begin with.\n */\n afterAllClosed = defer(() => this.openDialogs.length ? this._getAfterAllClosed() : this._getAfterAllClosed().pipe(startWith(undefined)));\n constructor() {}\n open(componentOrTemplateRef, config) {\n const defaults = this._defaultOptions || new DialogConfig();\n config = {\n ...defaults,\n ...config\n };\n config.id = config.id || this._idGenerator.getId('cdk-dialog-');\n if (config.id && this.getDialogById(config.id) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`Dialog with id \"${config.id}\" exists already. The dialog id must be unique.`);\n }\n const overlayConfig = this._getOverlayConfig(config);\n const overlayRef = createOverlayRef(this._injector, overlayConfig);\n const dialogRef = new DialogRef(overlayRef, config);\n const dialogContainer = this._attachContainer(overlayRef, dialogRef, config);\n dialogRef.containerInstance = dialogContainer;\n // If this is the first dialog that we're opening, hide all the non-overlay content.\n if (!this.openDialogs.length) {\n // Resolve this ahead of time, because some internal apps\n // mock it out and depend on it being synchronous.\n const overlayContainer = this._overlayContainer.getContainerElement();\n if (dialogContainer._focusTrapped) {\n dialogContainer._focusTrapped.pipe(take(1)).subscribe(() => {\n this._hideNonDialogContentFromAssistiveTechnology(overlayContainer);\n });\n } else {\n this._hideNonDialogContentFromAssistiveTechnology(overlayContainer);\n }\n }\n this._attachDialogContent(componentOrTemplateRef, dialogRef, dialogContainer, config);\n this.openDialogs.push(dialogRef);\n dialogRef.closed.subscribe(() => this._removeOpenDialog(dialogRef, true));\n this.afterOpened.next(dialogRef);\n return dialogRef;\n }\n /**\n * Closes all of the currently-open dialogs.\n */\n closeAll() {\n reverseForEach(this.openDialogs, dialog => dialog.close());\n }\n /**\n * Finds an open dialog by its id.\n * @param id ID to use when looking up the dialog.\n */\n getDialogById(id) {\n return this.openDialogs.find(dialog => dialog.id === id);\n }\n ngOnDestroy() {\n // Make one pass over all the dialogs that need to be untracked, but should not be closed. We\n // want to stop tracking the open dialog even if it hasn't been closed, because the tracking\n // determines when `aria-hidden` is removed from elements outside the dialog.\n reverseForEach(this._openDialogsAtThisLevel, dialog => {\n // Check for `false` specifically since we want `undefined` to be interpreted as `true`.\n if (dialog.config.closeOnDestroy === false) {\n this._removeOpenDialog(dialog, false);\n }\n });\n // Make a second pass and close the remaining dialogs. We do this second pass in order to\n // correctly dispatch the `afterAllClosed` event in case we have a mixed array of dialogs\n // that should be closed and dialogs that should not.\n reverseForEach(this._openDialogsAtThisLevel, dialog => dialog.close());\n this._afterAllClosedAtThisLevel.complete();\n this._afterOpenedAtThisLevel.complete();\n this._openDialogsAtThisLevel = [];\n }\n /**\n * Creates an overlay config from a dialog config.\n * @param config The dialog configuration.\n * @returns The overlay configuration.\n */\n _getOverlayConfig(config) {\n const state = new OverlayConfig({\n positionStrategy: config.positionStrategy || createGlobalPositionStrategy().centerHorizontally().centerVertically(),\n scrollStrategy: config.scrollStrategy || this._scrollStrategy(),\n panelClass: config.panelClass,\n hasBackdrop: config.hasBackdrop,\n direction: config.direction,\n minWidth: config.minWidth,\n minHeight: config.minHeight,\n maxWidth: config.maxWidth,\n maxHeight: config.maxHeight,\n width: config.width,\n height: config.height,\n disposeOnNavigation: config.closeOnNavigation,\n disableAnimations: config.disableAnimations\n });\n if (config.backdropClass) {\n state.backdropClass = config.backdropClass;\n }\n return state;\n }\n /**\n * Attaches a dialog container to a dialog's already-created overlay.\n * @param overlay Reference to the dialog's underlying overlay.\n * @param config The dialog configuration.\n * @returns A promise resolving to a ComponentRef for the attached container.\n */\n _attachContainer(overlay, dialogRef, config) {\n const userInjector = config.injector || config.viewContainerRef?.injector;\n const providers = [{\n provide: DialogConfig,\n useValue: config\n }, {\n provide: DialogRef,\n useValue: dialogRef\n }, {\n provide: OverlayRef,\n useValue: overlay\n }];\n let containerType;\n if (config.container) {\n if (typeof config.container === 'function') {\n containerType = config.container;\n } else {\n containerType = config.container.type;\n providers.push(...config.container.providers(config));\n }\n } else {\n containerType = CdkDialogContainer;\n }\n const containerPortal = new ComponentPortal(containerType, config.viewContainerRef, Injector.create({\n parent: userInjector || this._injector,\n providers\n }));\n const containerRef = overlay.attach(containerPortal);\n return containerRef.instance;\n }\n /**\n * Attaches the user-provided component to the already-created dialog container.\n * @param componentOrTemplateRef The type of component being loaded into the dialog,\n * or a TemplateRef to instantiate as the content.\n * @param dialogRef Reference to the dialog being opened.\n * @param dialogContainer Component that is going to wrap the dialog content.\n * @param config Configuration used to open the dialog.\n */\n _attachDialogContent(componentOrTemplateRef, dialogRef, dialogContainer, config) {\n if (componentOrTemplateRef instanceof TemplateRef) {\n const injector = this._createInjector(config, dialogRef, dialogContainer, undefined);\n let context = {\n $implicit: config.data,\n dialogRef\n };\n if (config.templateContext) {\n context = {\n ...context,\n ...(typeof config.templateContext === 'function' ? config.templateContext() : config.templateContext)\n };\n }\n dialogContainer.attachTemplatePortal(new TemplatePortal(componentOrTemplateRef, null, context, injector));\n } else {\n const injector = this._createInjector(config, dialogRef, dialogContainer, this._injector);\n const contentRef = dialogContainer.attachComponentPortal(new ComponentPortal(componentOrTemplateRef, config.viewContainerRef, injector));\n dialogRef.componentRef = contentRef;\n dialogRef.componentInstance = contentRef.instance;\n }\n }\n /**\n * Creates a custom injector to be used inside the dialog. This allows a component loaded inside\n * of a dialog to close itself and, optionally, to return a value.\n * @param config Config object that is used to construct the dialog.\n * @param dialogRef Reference to the dialog being opened.\n * @param dialogContainer Component that is going to wrap the dialog content.\n * @param fallbackInjector Injector to use as a fallback when a lookup fails in the custom\n * dialog injector, if the user didn't provide a custom one.\n * @returns The custom injector that can be used inside the dialog.\n */\n _createInjector(config, dialogRef, dialogContainer, fallbackInjector) {\n const userInjector = config.injector || config.viewContainerRef?.injector;\n const providers = [{\n provide: DIALOG_DATA,\n useValue: config.data\n }, {\n provide: DialogRef,\n useValue: dialogRef\n }];\n if (config.providers) {\n if (typeof config.providers === 'function') {\n providers.push(...config.providers(dialogRef, config, dialogContainer));\n } else {\n providers.push(...config.providers);\n }\n }\n if (config.direction && (!userInjector || !userInjector.get(Directionality, null, {\n optional: true\n }))) {\n providers.push({\n provide: Directionality,\n useValue: getDirectionality(config.direction)\n });\n }\n return Injector.create({\n parent: userInjector || fallbackInjector,\n providers\n });\n }\n /**\n * Removes a dialog from the array of open dialogs.\n * @param dialogRef Dialog to be removed.\n * @param emitEvent Whether to emit an event if this is the last dialog.\n */\n _removeOpenDialog(dialogRef, emitEvent) {\n const index = this.openDialogs.indexOf(dialogRef);\n if (index > -1) {\n this.openDialogs.splice(index, 1);\n // If all the dialogs were closed, remove/restore the `aria-hidden`\n // to a the siblings and emit to the `afterAllClosed` stream.\n if (!this.openDialogs.length) {\n this._ariaHiddenElements.forEach((previousValue, element) => {\n if (previousValue) {\n element.setAttribute('aria-hidden', previousValue);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n this._ariaHiddenElements.clear();\n if (emitEvent) {\n this._getAfterAllClosed().next();\n }\n }\n }\n }\n /** Hides all of the content that isn't an overlay from assistive technology. */\n _hideNonDialogContentFromAssistiveTechnology(overlayContainer) {\n // Ensure that the overlay container is attached to the DOM.\n if (overlayContainer.parentElement) {\n const siblings = overlayContainer.parentElement.children;\n for (let i = siblings.length - 1; i > -1; i--) {\n const sibling = siblings[i];\n if (sibling !== overlayContainer && sibling.nodeName !== 'SCRIPT' && sibling.nodeName !== 'STYLE' && !sibling.hasAttribute('aria-live')) {\n this._ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));\n sibling.setAttribute('aria-hidden', 'true');\n }\n }\n }\n }\n _getAfterAllClosed() {\n const parent = this._parentDialog;\n return parent ? parent._getAfterAllClosed() : this._afterAllClosedAtThisLevel;\n }\n static ɵfac = function Dialog_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Dialog)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: Dialog,\n factory: Dialog.ɵfac,\n providedIn: 'root'\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(Dialog, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], () => [], null);\n})();\n/**\n * Executes a callback against all elements in an array while iterating in reverse.\n * Useful if the array is being modified as it is being iterated.\n */\nfunction reverseForEach(items, callback) {\n let i = items.length;\n while (i--) {\n callback(items[i]);\n }\n}\nclass DialogModule {\n static ɵfac = function DialogModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DialogModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: DialogModule,\n imports: [OverlayModule, PortalModule, A11yModule, CdkDialogContainer],\n exports: [\n // Re-export the PortalModule so that people extending the `CdkDialogContainer`\n // don't have to remember to import it or be faced with an unhelpful error.\n PortalModule, CdkDialogContainer]\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [Dialog],\n imports: [OverlayModule, PortalModule, A11yModule,\n // Re-export the PortalModule so that people extending the `CdkDialogContainer`\n // don't have to remember to import it or be faced with an unhelpful error.\n PortalModule]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DialogModule, [{\n type: NgModule,\n args: [{\n imports: [OverlayModule, PortalModule, A11yModule, CdkDialogContainer],\n exports: [\n // Re-export the PortalModule so that people extending the `CdkDialogContainer`\n // don't have to remember to import it or be faced with an unhelpful error.\n PortalModule, CdkDialogContainer],\n providers: [Dialog]\n }]\n }], null, null);\n})();\nexport { CdkDialogContainer, DEFAULT_DIALOG_CONFIG, DIALOG_DATA, DIALOG_SCROLL_STRATEGY, Dialog, DialogConfig, DialogModule, DialogRef, throwDialogContentAlreadyAttachedError, CdkPortalOutlet as ɵɵCdkPortalOutlet };\n","import { CdkDialogContainer, Dialog, DialogConfig, DialogModule } from '@angular/cdk/dialog';\nimport { createBlockScrollStrategy, createGlobalPositionStrategy, OverlayModule } from '@angular/cdk/overlay';\nimport { CdkPortalOutlet, PortalModule } from '@angular/cdk/portal';\nimport * as i0 from '@angular/core';\nimport { EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, InjectionToken, inject, Injector, Injectable, ElementRef, Directive, Input, NgModule } from '@angular/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { _ as _animationsDisabled } from './animation-ChQ1vjiF.mjs';\nimport { Subject, merge, defer } from 'rxjs';\nimport { filter, take, startWith } from 'rxjs/operators';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { _IdGenerator } from '@angular/cdk/a11y';\nimport * as i1 from '@angular/cdk/scrolling';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { M as MatCommonModule } from './common-module-cKSwHniA.mjs';\n\n/**\n * Configuration for opening a modal dialog with the MatDialog service.\n */\nfunction MatDialogContainer_ng_template_2_Template(rf, ctx) {}\nclass MatDialogConfig {\n /**\n * Where the attached component should live in Angular's *logical* component tree.\n * This affects what is available for injection and the change detection order for the\n * component instantiated inside of the dialog. This does not affect where the dialog\n * content will be rendered.\n */\n viewContainerRef;\n /**\n * Injector used for the instantiation of the component to be attached. If provided,\n * takes precedence over the injector indirectly provided by `ViewContainerRef`.\n */\n injector;\n /** ID for the dialog. If omitted, a unique one will be generated. */\n id;\n /** The ARIA role of the dialog element. */\n role = 'dialog';\n /** Custom class for the overlay pane. */\n panelClass = '';\n /** Whether the dialog has a backdrop. */\n hasBackdrop = true;\n /** Custom class for the backdrop. */\n backdropClass = '';\n /** Whether the user can use escape or clicking on the backdrop to close the modal. */\n disableClose = false;\n /** Function used to determine whether the dialog is allowed to close. */\n closePredicate;\n /** Width of the dialog. */\n width = '';\n /** Height of the dialog. */\n height = '';\n /** Min-width of the dialog. If a number is provided, assumes pixel units. */\n minWidth;\n /** Min-height of the dialog. If a number is provided, assumes pixel units. */\n minHeight;\n /** Max-width of the dialog. If a number is provided, assumes pixel units. */\n maxWidth;\n /** Max-height of the dialog. If a number is provided, assumes pixel units. */\n maxHeight;\n /** Position overrides. */\n position;\n /** Data being injected into the child component. */\n data = null;\n /** Layout direction for the dialog's content. */\n direction;\n /** ID of the element that describes the dialog. */\n ariaDescribedBy = null;\n /** ID of the element that labels the dialog. */\n ariaLabelledBy = null;\n /** Aria label to assign to the dialog element. */\n ariaLabel = null;\n /**\n * Whether this is a modal dialog. Used to set the `aria-modal` attribute. Off by default,\n * because it can interfere with other overlay-based components (e.g. `mat-select`) and because\n * it is redundant since the dialog marks all outside content as `aria-hidden` anyway.\n */\n ariaModal = false;\n /**\n * Where the dialog should focus on open.\n * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or\n * AutoFocusTarget instead.\n */\n autoFocus = 'first-tabbable';\n /**\n * Whether the dialog should restore focus to the\n * previously-focused element, after it's closed.\n */\n restoreFocus = true;\n /** Whether to wait for the opening animation to finish before trapping focus. */\n delayFocusTrap = true;\n /** Scroll strategy to be used for the dialog. */\n scrollStrategy;\n /**\n * Whether the dialog should close when the user goes backwards/forwards in history.\n * Note that this usually doesn't include clicking on links (unless the user is using\n * the `HashLocationStrategy`).\n */\n closeOnNavigation = true;\n /**\n * Duration of the enter animation in ms.\n * Should be a number, string type is deprecated.\n * @breaking-change 17.0.0 Remove string signature.\n */\n enterAnimationDuration;\n /**\n * Duration of the exit animation in ms.\n * Should be a number, string type is deprecated.\n * @breaking-change 17.0.0 Remove string signature.\n */\n exitAnimationDuration;\n}\n\n/** Class added when the dialog is open. */\nconst OPEN_CLASS = 'mdc-dialog--open';\n/** Class added while the dialog is opening. */\nconst OPENING_CLASS = 'mdc-dialog--opening';\n/** Class added while the dialog is closing. */\nconst CLOSING_CLASS = 'mdc-dialog--closing';\n/** Duration of the opening animation in milliseconds. */\nconst OPEN_ANIMATION_DURATION = 150;\n/** Duration of the closing animation in milliseconds. */\nconst CLOSE_ANIMATION_DURATION = 75;\nclass MatDialogContainer extends CdkDialogContainer {\n /** Emits when an animation state changes. */\n _animationStateChanged = new EventEmitter();\n /** Whether animations are enabled. */\n _animationsEnabled = !_animationsDisabled();\n /** Number of actions projected in the dialog. */\n _actionSectionCount = 0;\n /** Host element of the dialog container component. */\n _hostElement = this._elementRef.nativeElement;\n /** Duration of the dialog open animation. */\n _enterAnimationDuration = this._animationsEnabled ? parseCssTime(this._config.enterAnimationDuration) ?? OPEN_ANIMATION_DURATION : 0;\n /** Duration of the dialog close animation. */\n _exitAnimationDuration = this._animationsEnabled ? parseCssTime(this._config.exitAnimationDuration) ?? CLOSE_ANIMATION_DURATION : 0;\n /** Current timer for dialog animations. */\n _animationTimer = null;\n _contentAttached() {\n // Delegate to the original dialog-container initialization (i.e. saving the\n // previous element, setting up the focus trap and moving focus to the container).\n super._contentAttached();\n // Note: Usually we would be able to use the MDC dialog foundation here to handle\n // the dialog animation for us, but there are a few reasons why we just leverage\n // their styles and not use the runtime foundation code:\n // 1. Foundation does not allow us to disable animations.\n // 2. Foundation contains unnecessary features we don't need and aren't\n // tree-shakeable. e.g. background scrim, keyboard event handlers for ESC button.\n this._startOpenAnimation();\n }\n /** Starts the dialog open animation if enabled. */\n _startOpenAnimation() {\n this._animationStateChanged.emit({\n state: 'opening',\n totalTime: this._enterAnimationDuration\n });\n if (this._animationsEnabled) {\n this._hostElement.style.setProperty(TRANSITION_DURATION_PROPERTY, `${this._enterAnimationDuration}ms`);\n // We need to give the `setProperty` call from above some time to be applied.\n // One would expect that the open class is added once the animation finished, but MDC\n // uses the open class in combination with the opening class to start the animation.\n this._requestAnimationFrame(() => this._hostElement.classList.add(OPENING_CLASS, OPEN_CLASS));\n this._waitForAnimationToComplete(this._enterAnimationDuration, this._finishDialogOpen);\n } else {\n this._hostElement.classList.add(OPEN_CLASS);\n // Note: We could immediately finish the dialog opening here with noop animations,\n // but we defer until next tick so that consumers can subscribe to `afterOpened`.\n // Executing this immediately would mean that `afterOpened` emits synchronously\n // on `dialog.open` before the consumer had a change to subscribe to `afterOpened`.\n Promise.resolve().then(() => this._finishDialogOpen());\n }\n }\n /**\n * Starts the exit animation of the dialog if enabled. This method is\n * called by the dialog ref.\n */\n _startExitAnimation() {\n this._animationStateChanged.emit({\n state: 'closing',\n totalTime: this._exitAnimationDuration\n });\n this._hostElement.classList.remove(OPEN_CLASS);\n if (this._animationsEnabled) {\n this._hostElement.style.setProperty(TRANSITION_DURATION_PROPERTY, `${this._exitAnimationDuration}ms`);\n // We need to give the `setProperty` call from above some time to be applied.\n this._requestAnimationFrame(() => this._hostElement.classList.add(CLOSING_CLASS));\n this._waitForAnimationToComplete(this._exitAnimationDuration, this._finishDialogClose);\n } else {\n // This subscription to the `OverlayRef#backdropClick` observable in the `DialogRef` is\n // set up before any user can subscribe to the backdrop click. The subscription triggers\n // the dialog close and this method synchronously. If we'd synchronously emit the `CLOSED`\n // animation state event if animations are disabled, the overlay would be disposed\n // immediately and all other subscriptions to `DialogRef#backdropClick` would be silently\n // skipped. We work around this by waiting with the dialog close until the next tick when\n // all subscriptions have been fired as expected. This is not an ideal solution, but\n // there doesn't seem to be any other good way. Alternatives that have been considered:\n // 1. Deferring `DialogRef.close`. This could be a breaking change due to a new microtask.\n // Also this issue is specific to the MDC implementation where the dialog could\n // technically be closed synchronously. In the non-MDC one, Angular animations are used\n // and closing always takes at least a tick.\n // 2. Ensuring that user subscriptions to `backdropClick`, `keydownEvents` in the dialog\n // ref are first. This would solve the issue, but has the risk of memory leaks and also\n // doesn't solve the case where consumers call `DialogRef.close` in their subscriptions.\n // Based on the fact that this is specific to the MDC-based implementation of the dialog\n // animations, the defer is applied here.\n Promise.resolve().then(() => this._finishDialogClose());\n }\n }\n /**\n * Updates the number action sections.\n * @param delta Increase/decrease in the number of sections.\n */\n _updateActionSectionCount(delta) {\n this._actionSectionCount += delta;\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Completes the dialog open by clearing potential animation classes, trapping\n * focus and emitting an opened event.\n */\n _finishDialogOpen = () => {\n this._clearAnimationClasses();\n this._openAnimationDone(this._enterAnimationDuration);\n };\n /**\n * Completes the dialog close by clearing potential animation classes, restoring\n * focus and emitting a closed event.\n */\n _finishDialogClose = () => {\n this._clearAnimationClasses();\n this._animationStateChanged.emit({\n state: 'closed',\n totalTime: this._exitAnimationDuration\n });\n };\n /** Clears all dialog animation classes. */\n _clearAnimationClasses() {\n this._hostElement.classList.remove(OPENING_CLASS, CLOSING_CLASS);\n }\n _waitForAnimationToComplete(duration, callback) {\n if (this._animationTimer !== null) {\n clearTimeout(this._animationTimer);\n }\n // Note that we want this timer to run inside the NgZone, because we want\n // the related events like `afterClosed` to be inside the zone as well.\n this._animationTimer = setTimeout(callback, duration);\n }\n /** Runs a callback in `requestAnimationFrame`, if available. */\n _requestAnimationFrame(callback) {\n this._ngZone.runOutsideAngular(() => {\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(callback);\n } else {\n callback();\n }\n });\n }\n _captureInitialFocus() {\n if (!this._config.delayFocusTrap) {\n this._trapFocus();\n }\n }\n /**\n * Callback for when the open dialog animation has finished. Intended to\n * be called by sub-classes that use different animation implementations.\n */\n _openAnimationDone(totalTime) {\n if (this._config.delayFocusTrap) {\n this._trapFocus();\n }\n this._animationStateChanged.next({\n state: 'opened',\n totalTime\n });\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this._animationTimer !== null) {\n clearTimeout(this._animationTimer);\n }\n }\n attachComponentPortal(portal) {\n // When a component is passed into the dialog, the host element interrupts\n // the `display:flex` from affecting the dialog title, content, and\n // actions. To fix this, we make the component host `display: contents` by\n // marking its host with the `mat-mdc-dialog-component-host` class.\n //\n // Note that this problem does not exist when a template ref is used since\n // the title, contents, and actions are then nested directly under the\n // dialog surface.\n const ref = super.attachComponentPortal(portal);\n ref.location.nativeElement.classList.add('mat-mdc-dialog-component-host');\n return ref;\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMatDialogContainer_BaseFactory;\n return function MatDialogContainer_Factory(__ngFactoryType__) {\n return (ɵMatDialogContainer_BaseFactory || (ɵMatDialogContainer_BaseFactory = i0.ɵɵgetInheritedFactory(MatDialogContainer)))(__ngFactoryType__ || MatDialogContainer);\n };\n })();\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatDialogContainer,\n selectors: [[\"mat-dialog-container\"]],\n hostAttrs: [\"tabindex\", \"-1\", 1, \"mat-mdc-dialog-container\", \"mdc-dialog\"],\n hostVars: 10,\n hostBindings: function MatDialogContainer_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵdomProperty(\"id\", ctx._config.id);\n i0.ɵɵattribute(\"aria-modal\", ctx._config.ariaModal)(\"role\", ctx._config.role)(\"aria-labelledby\", ctx._config.ariaLabel ? null : ctx._ariaLabelledByQueue[0])(\"aria-label\", ctx._config.ariaLabel)(\"aria-describedby\", ctx._config.ariaDescribedBy || null);\n i0.ɵɵclassProp(\"_mat-animation-noopable\", !ctx._animationsEnabled)(\"mat-mdc-dialog-container-with-actions\", ctx._actionSectionCount > 0);\n }\n },\n features: [i0.ɵɵInheritDefinitionFeature],\n decls: 3,\n vars: 0,\n consts: [[1, \"mat-mdc-dialog-inner-container\", \"mdc-dialog__container\"], [1, \"mat-mdc-dialog-surface\", \"mdc-dialog__surface\"], [\"cdkPortalOutlet\", \"\"]],\n template: function MatDialogContainer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1);\n i0.ɵɵtemplate(2, MatDialogContainer_ng_template_2_Template, 0, 0, \"ng-template\", 2);\n i0.ɵɵelementEnd()();\n }\n },\n dependencies: [CdkPortalOutlet],\n styles: [\".mat-mdc-dialog-container{width:100%;height:100%;display:block;box-sizing:border-box;max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;outline:0}.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-max-width, 560px);min-width:var(--mat-dialog-container-min-width, 280px)}@media(max-width: 599px){.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-small-max-width, calc(100vw - 32px))}}.mat-mdc-dialog-inner-container{display:flex;flex-direction:row;align-items:center;justify-content:space-around;box-sizing:border-box;height:100%;opacity:0;transition:opacity linear var(--mat-dialog-transition-duration, 0ms);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit}.mdc-dialog--closing .mat-mdc-dialog-inner-container{transition:opacity 75ms linear;transform:none}.mdc-dialog--open .mat-mdc-dialog-inner-container{opacity:1}._mat-animation-noopable .mat-mdc-dialog-inner-container{transition:none}.mat-mdc-dialog-surface{display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;box-sizing:border-box;width:100%;height:100%;position:relative;overflow-y:auto;outline:0;transform:scale(0.8);transition:transform var(--mat-dialog-transition-duration, 0ms) cubic-bezier(0, 0, 0.2, 1);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;box-shadow:var(--mat-dialog-container-elevation-shadow, none);border-radius:var(--mat-dialog-container-shape, var(--mat-sys-corner-extra-large, 4px));background-color:var(--mat-dialog-container-color, var(--mat-sys-surface, white))}[dir=rtl] .mat-mdc-dialog-surface{text-align:right}.mdc-dialog--open .mat-mdc-dialog-surface,.mdc-dialog--closing .mat-mdc-dialog-surface{transform:none}._mat-animation-noopable .mat-mdc-dialog-surface{transition:none}.mat-mdc-dialog-surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:2px solid rgba(0,0,0,0);border-radius:inherit;content:\\\"\\\";pointer-events:none}.mat-mdc-dialog-title{display:block;position:relative;flex-shrink:0;box-sizing:border-box;margin:0 0 1px;padding:var(--mat-dialog-headline-padding, 6px 24px 13px)}.mat-mdc-dialog-title::before{display:inline-block;width:0;height:40px;content:\\\"\\\";vertical-align:0}[dir=rtl] .mat-mdc-dialog-title{text-align:right}.mat-mdc-dialog-container .mat-mdc-dialog-title{color:var(--mat-dialog-subhead-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-dialog-subhead-font, var(--mat-sys-headline-small-font, inherit));line-height:var(--mat-dialog-subhead-line-height, var(--mat-sys-headline-small-line-height, 1.5rem));font-size:var(--mat-dialog-subhead-size, var(--mat-sys-headline-small-size, 1rem));font-weight:var(--mat-dialog-subhead-weight, var(--mat-sys-headline-small-weight, 400));letter-spacing:var(--mat-dialog-subhead-tracking, var(--mat-sys-headline-small-tracking, 0.03125em))}.mat-mdc-dialog-content{display:block;flex-grow:1;box-sizing:border-box;margin:0;overflow:auto;max-height:65vh}.mat-mdc-dialog-content>:first-child{margin-top:0}.mat-mdc-dialog-content>:last-child{margin-bottom:0}.mat-mdc-dialog-container .mat-mdc-dialog-content{color:var(--mat-dialog-supporting-text-color, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, 0.6)));font-family:var(--mat-dialog-supporting-text-font, var(--mat-sys-body-medium-font, inherit));line-height:var(--mat-dialog-supporting-text-line-height, var(--mat-sys-body-medium-line-height, 1.5rem));font-size:var(--mat-dialog-supporting-text-size, var(--mat-sys-body-medium-size, 1rem));font-weight:var(--mat-dialog-supporting-text-weight, var(--mat-sys-body-medium-weight, 400));letter-spacing:var(--mat-dialog-supporting-text-tracking, var(--mat-sys-body-medium-tracking, 0.03125em))}.mat-mdc-dialog-container .mat-mdc-dialog-content{padding:var(--mat-dialog-content-padding, 20px 24px)}.mat-mdc-dialog-container-with-actions .mat-mdc-dialog-content{padding:var(--mat-dialog-with-actions-content-padding, 20px 24px 0)}.mat-mdc-dialog-container .mat-mdc-dialog-title+.mat-mdc-dialog-content{padding-top:0}.mat-mdc-dialog-actions{display:flex;position:relative;flex-shrink:0;flex-wrap:wrap;align-items:center;box-sizing:border-box;min-height:52px;margin:0;border-top:1px solid rgba(0,0,0,0);padding:var(--mat-dialog-actions-padding, 16px 24px);justify-content:var(--mat-dialog-actions-alignment, flex-end)}@media(forced-colors: active){.mat-mdc-dialog-actions{border-top-color:CanvasText}}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-start,.mat-mdc-dialog-actions[align=start]{justify-content:start}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-center,.mat-mdc-dialog-actions[align=center]{justify-content:center}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-end,.mat-mdc-dialog-actions[align=end]{justify-content:flex-end}.mat-mdc-dialog-actions .mat-button-base+.mat-button-base,.mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-mdc-dialog-actions .mat-button-base+.mat-button-base,[dir=rtl] .mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}.mat-mdc-dialog-component-host{display:contents}\\n\"],\n encapsulation: 2\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatDialogContainer, [{\n type: Component,\n args: [{\n selector: 'mat-dialog-container',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n imports: [CdkPortalOutlet],\n host: {\n 'class': 'mat-mdc-dialog-container mdc-dialog',\n 'tabindex': '-1',\n '[attr.aria-modal]': '_config.ariaModal',\n '[id]': '_config.id',\n '[attr.role]': '_config.role',\n '[attr.aria-labelledby]': '_config.ariaLabel ? null : _ariaLabelledByQueue[0]',\n '[attr.aria-label]': '_config.ariaLabel',\n '[attr.aria-describedby]': '_config.ariaDescribedBy || null',\n '[class._mat-animation-noopable]': '!_animationsEnabled',\n '[class.mat-mdc-dialog-container-with-actions]': '_actionSectionCount > 0'\n },\n template: \"<div class=\\\"mat-mdc-dialog-inner-container mdc-dialog__container\\\">\\n <div class=\\\"mat-mdc-dialog-surface mdc-dialog__surface\\\">\\n <ng-template cdkPortalOutlet />\\n </div>\\n</div>\\n\",\n styles: [\".mat-mdc-dialog-container{width:100%;height:100%;display:block;box-sizing:border-box;max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;outline:0}.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-max-width, 560px);min-width:var(--mat-dialog-container-min-width, 280px)}@media(max-width: 599px){.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-small-max-width, calc(100vw - 32px))}}.mat-mdc-dialog-inner-container{display:flex;flex-direction:row;align-items:center;justify-content:space-around;box-sizing:border-box;height:100%;opacity:0;transition:opacity linear var(--mat-dialog-transition-duration, 0ms);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit}.mdc-dialog--closing .mat-mdc-dialog-inner-container{transition:opacity 75ms linear;transform:none}.mdc-dialog--open .mat-mdc-dialog-inner-container{opacity:1}._mat-animation-noopable .mat-mdc-dialog-inner-container{transition:none}.mat-mdc-dialog-surface{display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;box-sizing:border-box;width:100%;height:100%;position:relative;overflow-y:auto;outline:0;transform:scale(0.8);transition:transform var(--mat-dialog-transition-duration, 0ms) cubic-bezier(0, 0, 0.2, 1);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;box-shadow:var(--mat-dialog-container-elevation-shadow, none);border-radius:var(--mat-dialog-container-shape, var(--mat-sys-corner-extra-large, 4px));background-color:var(--mat-dialog-container-color, var(--mat-sys-surface, white))}[dir=rtl] .mat-mdc-dialog-surface{text-align:right}.mdc-dialog--open .mat-mdc-dialog-surface,.mdc-dialog--closing .mat-mdc-dialog-surface{transform:none}._mat-animation-noopable .mat-mdc-dialog-surface{transition:none}.mat-mdc-dialog-surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:2px solid rgba(0,0,0,0);border-radius:inherit;content:\\\"\\\";pointer-events:none}.mat-mdc-dialog-title{display:block;position:relative;flex-shrink:0;box-sizing:border-box;margin:0 0 1px;padding:var(--mat-dialog-headline-padding, 6px 24px 13px)}.mat-mdc-dialog-title::before{display:inline-block;width:0;height:40px;content:\\\"\\\";vertical-align:0}[dir=rtl] .mat-mdc-dialog-title{text-align:right}.mat-mdc-dialog-container .mat-mdc-dialog-title{color:var(--mat-dialog-subhead-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-dialog-subhead-font, var(--mat-sys-headline-small-font, inherit));line-height:var(--mat-dialog-subhead-line-height, var(--mat-sys-headline-small-line-height, 1.5rem));font-size:var(--mat-dialog-subhead-size, var(--mat-sys-headline-small-size, 1rem));font-weight:var(--mat-dialog-subhead-weight, var(--mat-sys-headline-small-weight, 400));letter-spacing:var(--mat-dialog-subhead-tracking, var(--mat-sys-headline-small-tracking, 0.03125em))}.mat-mdc-dialog-content{display:block;flex-grow:1;box-sizing:border-box;margin:0;overflow:auto;max-height:65vh}.mat-mdc-dialog-content>:first-child{margin-top:0}.mat-mdc-dialog-content>:last-child{margin-bottom:0}.mat-mdc-dialog-container .mat-mdc-dialog-content{color:var(--mat-dialog-supporting-text-color, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, 0.6)));font-family:var(--mat-dialog-supporting-text-font, var(--mat-sys-body-medium-font, inherit));line-height:var(--mat-dialog-supporting-text-line-height, var(--mat-sys-body-medium-line-height, 1.5rem));font-size:var(--mat-dialog-supporting-text-size, var(--mat-sys-body-medium-size, 1rem));font-weight:var(--mat-dialog-supporting-text-weight, var(--mat-sys-body-medium-weight, 400));letter-spacing:var(--mat-dialog-supporting-text-tracking, var(--mat-sys-body-medium-tracking, 0.03125em))}.mat-mdc-dialog-container .mat-mdc-dialog-content{padding:var(--mat-dialog-content-padding, 20px 24px)}.mat-mdc-dialog-container-with-actions .mat-mdc-dialog-content{padding:var(--mat-dialog-with-actions-content-padding, 20px 24px 0)}.mat-mdc-dialog-container .mat-mdc-dialog-title+.mat-mdc-dialog-content{padding-top:0}.mat-mdc-dialog-actions{display:flex;position:relative;flex-shrink:0;flex-wrap:wrap;align-items:center;box-sizing:border-box;min-height:52px;margin:0;border-top:1px solid rgba(0,0,0,0);padding:var(--mat-dialog-actions-padding, 16px 24px);justify-content:var(--mat-dialog-actions-alignment, flex-end)}@media(forced-colors: active){.mat-mdc-dialog-actions{border-top-color:CanvasText}}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-start,.mat-mdc-dialog-actions[align=start]{justify-content:start}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-center,.mat-mdc-dialog-actions[align=center]{justify-content:center}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-end,.mat-mdc-dialog-actions[align=end]{justify-content:flex-end}.mat-mdc-dialog-actions .mat-button-base+.mat-button-base,.mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-mdc-dialog-actions .mat-button-base+.mat-button-base,[dir=rtl] .mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}.mat-mdc-dialog-component-host{display:contents}\\n\"]\n }]\n }], null, null);\n})();\nconst TRANSITION_DURATION_PROPERTY = '--mat-dialog-transition-duration';\n// TODO(mmalerba): Remove this function after animation durations are required\n// to be numbers.\n/**\n * Converts a CSS time string to a number in ms. If the given time is already a\n * number, it is assumed to be in ms.\n */\nfunction parseCssTime(time) {\n if (time == null) {\n return null;\n }\n if (typeof time === 'number') {\n return time;\n }\n if (time.endsWith('ms')) {\n return coerceNumberProperty(time.substring(0, time.length - 2));\n }\n if (time.endsWith('s')) {\n return coerceNumberProperty(time.substring(0, time.length - 1)) * 1000;\n }\n if (time === '0') {\n return 0;\n }\n return null; // anything else is invalid.\n}\nvar MatDialogState;\n(function (MatDialogState) {\n MatDialogState[MatDialogState[\"OPEN\"] = 0] = \"OPEN\";\n MatDialogState[MatDialogState[\"CLOSING\"] = 1] = \"CLOSING\";\n MatDialogState[MatDialogState[\"CLOSED\"] = 2] = \"CLOSED\";\n})(MatDialogState || (MatDialogState = {}));\n/**\n * Reference to a dialog opened via the MatDialog service.\n */\nclass MatDialogRef {\n _ref;\n _config;\n _containerInstance;\n /** The instance of component opened into the dialog. */\n componentInstance;\n /**\n * `ComponentRef` of the component opened into the dialog. Will be\n * null when the dialog is opened using a `TemplateRef`.\n */\n componentRef;\n /** Whether the user is allowed to close the dialog. */\n disableClose;\n /** Unique ID for the dialog. */\n id;\n /** Subject for notifying the user that the dialog has finished opening. */\n _afterOpened = new Subject();\n /** Subject for notifying the user that the dialog has started closing. */\n _beforeClosed = new Subject();\n /** Result to be passed to afterClosed. */\n _result;\n /** Handle to the timeout that's running as a fallback in case the exit animation doesn't fire. */\n _closeFallbackTimeout;\n /** Current state of the dialog. */\n _state = MatDialogState.OPEN;\n // TODO(crisbeto): we shouldn't have to declare this property, because `DialogRef.close`\n // already has a second `options` parameter that we can use. The problem is that internal tests\n // have assertions like `expect(MatDialogRef.close).toHaveBeenCalledWith(foo)` which will break,\n // because it'll be called with two arguments by things like `MatDialogClose`.\n /** Interaction that caused the dialog to close. */\n _closeInteractionType;\n constructor(_ref, _config, _containerInstance) {\n this._ref = _ref;\n this._config = _config;\n this._containerInstance = _containerInstance;\n this.disableClose = _config.disableClose;\n this.id = _ref.id;\n // Used to target panels specifically tied to dialogs.\n _ref.addPanelClass('mat-mdc-dialog-panel');\n // Emit when opening animation completes\n _containerInstance._animationStateChanged.pipe(filter(event => event.state === 'opened'), take(1)).subscribe(() => {\n this._afterOpened.next();\n this._afterOpened.complete();\n });\n // Dispose overlay when closing animation is complete\n _containerInstance._animationStateChanged.pipe(filter(event => event.state === 'closed'), take(1)).subscribe(() => {\n clearTimeout(this._closeFallbackTimeout);\n this._finishDialogClose();\n });\n _ref.overlayRef.detachments().subscribe(() => {\n this._beforeClosed.next(this._result);\n this._beforeClosed.complete();\n this._finishDialogClose();\n });\n merge(this.backdropClick(), this.keydownEvents().pipe(filter(event => event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event)))).subscribe(event => {\n if (!this.disableClose) {\n event.preventDefault();\n _closeDialogVia(this, event.type === 'keydown' ? 'keyboard' : 'mouse');\n }\n });\n }\n /**\n * Close the dialog.\n * @param dialogResult Optional result to return to the dialog opener.\n */\n close(dialogResult) {\n const closePredicate = this._config.closePredicate;\n if (closePredicate && !closePredicate(dialogResult, this._config, this.componentInstance)) {\n return;\n }\n this._result = dialogResult;\n // Transition the backdrop in parallel to the dialog.\n this._containerInstance._animationStateChanged.pipe(filter(event => event.state === 'closing'), take(1)).subscribe(event => {\n this._beforeClosed.next(dialogResult);\n this._beforeClosed.complete();\n this._ref.overlayRef.detachBackdrop();\n // The logic that disposes of the overlay depends on the exit animation completing, however\n // it isn't guaranteed if the parent view is destroyed while it's running. Add a fallback\n // timeout which will clean everything up if the animation hasn't fired within the specified\n // amount of time plus 100ms. We don't need to run this outside the NgZone, because for the\n // vast majority of cases the timeout will have been cleared before it has the chance to fire.\n this._closeFallbackTimeout = setTimeout(() => this._finishDialogClose(), event.totalTime + 100);\n });\n this._state = MatDialogState.CLOSING;\n this._containerInstance._startExitAnimation();\n }\n /**\n * Gets an observable that is notified when the dialog is finished opening.\n */\n afterOpened() {\n return this._afterOpened;\n }\n /**\n * Gets an observable that is notified when the dialog is finished closing.\n */\n afterClosed() {\n return this._ref.closed;\n }\n /**\n * Gets an observable that is notified when the dialog has started closing.\n */\n beforeClosed() {\n return this._beforeClosed;\n }\n /**\n * Gets an observable that emits when the overlay's backdrop has been clicked.\n */\n backdropClick() {\n return this._ref.backdropClick;\n }\n /**\n * Gets an observable that emits when keydown events are targeted on the overlay.\n */\n keydownEvents() {\n return this._ref.keydownEvents;\n }\n /**\n * Updates the dialog's position.\n * @param position New dialog position.\n */\n updatePosition(position) {\n let strategy = this._ref.config.positionStrategy;\n if (position && (position.left || position.right)) {\n position.left ? strategy.left(position.left) : strategy.right(position.right);\n } else {\n strategy.centerHorizontally();\n }\n if (position && (position.top || position.bottom)) {\n position.top ? strategy.top(position.top) : strategy.bottom(position.bottom);\n } else {\n strategy.centerVertically();\n }\n this._ref.updatePosition();\n return this;\n }\n /**\n * Updates the dialog's width and height.\n * @param width New width of the dialog.\n * @param height New height of the dialog.\n */\n updateSize(width = '', height = '') {\n this._ref.updateSize(width, height);\n return this;\n }\n /** Add a CSS class or an array of classes to the overlay pane. */\n addPanelClass(classes) {\n this._ref.addPanelClass(classes);\n return this;\n }\n /** Remove a CSS class or an array of classes from the overlay pane. */\n removePanelClass(classes) {\n this._ref.removePanelClass(classes);\n return this;\n }\n /** Gets the current state of the dialog's lifecycle. */\n getState() {\n return this._state;\n }\n /**\n * Finishes the dialog close by updating the state of the dialog\n * and disposing the overlay.\n */\n _finishDialogClose() {\n this._state = MatDialogState.CLOSED;\n this._ref.close(this._result, {\n focusOrigin: this._closeInteractionType\n });\n this.componentInstance = null;\n }\n}\n/**\n * Closes the dialog with the specified interaction type. This is currently not part of\n * `MatDialogRef` as that would conflict with custom dialog ref mocks provided in tests.\n * More details. See: https://github.com/angular/components/pull/9257#issuecomment-651342226.\n */\n// TODO: Move this back into `MatDialogRef` when we provide an official mock dialog ref.\nfunction _closeDialogVia(ref, interactionType, result) {\n ref._closeInteractionType = interactionType;\n return ref.close(result);\n}\n\n/** Injection token that can be used to access the data that was passed in to a dialog. */\nconst MAT_DIALOG_DATA = new InjectionToken('MatMdcDialogData');\n/** Injection token that can be used to specify default dialog options. */\nconst MAT_DIALOG_DEFAULT_OPTIONS = new InjectionToken('mat-mdc-dialog-default-options');\n/** Injection token that determines the scroll handling while the dialog is open. */\nconst MAT_DIALOG_SCROLL_STRATEGY = new InjectionToken('mat-mdc-dialog-scroll-strategy', {\n providedIn: 'root',\n factory: () => {\n const injector = inject(Injector);\n return () => createBlockScrollStrategy(injector);\n }\n});\n/**\n * Service to open Material Design modal dialogs.\n */\nclass MatDialog {\n _defaultOptions = inject(MAT_DIALOG_DEFAULT_OPTIONS, {\n optional: true\n });\n _scrollStrategy = inject(MAT_DIALOG_SCROLL_STRATEGY);\n _parentDialog = inject(MatDialog, {\n optional: true,\n skipSelf: true\n });\n _idGenerator = inject(_IdGenerator);\n _injector = inject(Injector);\n _dialog = inject(Dialog);\n _animationsDisabled = _animationsDisabled();\n _openDialogsAtThisLevel = [];\n _afterAllClosedAtThisLevel = new Subject();\n _afterOpenedAtThisLevel = new Subject();\n dialogConfigClass = MatDialogConfig;\n _dialogRefConstructor;\n _dialogContainerType;\n _dialogDataToken;\n /** Keeps track of the currently-open dialogs. */\n get openDialogs() {\n return this._parentDialog ? this._parentDialog.openDialogs : this._openDialogsAtThisLevel;\n }\n /** Stream that emits when a dialog has been opened. */\n get afterOpened() {\n return this._parentDialog ? this._parentDialog.afterOpened : this._afterOpenedAtThisLevel;\n }\n _getAfterAllClosed() {\n const parent = this._parentDialog;\n return parent ? parent._getAfterAllClosed() : this._afterAllClosedAtThisLevel;\n }\n /**\n * Stream that emits when all open dialog have finished closing.\n * Will emit on subscribe if there are no open dialogs to begin with.\n */\n afterAllClosed = defer(() => this.openDialogs.length ? this._getAfterAllClosed() : this._getAfterAllClosed().pipe(startWith(undefined)));\n constructor() {\n this._dialogRefConstructor = MatDialogRef;\n this._dialogContainerType = MatDialogContainer;\n this._dialogDataToken = MAT_DIALOG_DATA;\n }\n open(componentOrTemplateRef, config) {\n let dialogRef;\n config = {\n ...(this._defaultOptions || new MatDialogConfig()),\n ...config\n };\n config.id = config.id || this._idGenerator.getId('mat-mdc-dialog-');\n config.scrollStrategy = config.scrollStrategy || this._scrollStrategy();\n const cdkRef = this._dialog.open(componentOrTemplateRef, {\n ...config,\n positionStrategy: createGlobalPositionStrategy(this._injector).centerHorizontally().centerVertically(),\n // Disable closing since we need to sync it up to the animation ourselves.\n disableClose: true,\n // Closing is tied to our animation so the close predicate has to be implemented separately.\n closePredicate: undefined,\n // Disable closing on destroy, because this service cleans up its open dialogs as well.\n // We want to do the cleanup here, rather than the CDK service, because the CDK destroys\n // the dialogs immediately whereas we want it to wait for the animations to finish.\n closeOnDestroy: false,\n // Disable closing on detachments so that we can sync up the animation.\n // The Material dialog ref handles this manually.\n closeOnOverlayDetachments: false,\n disableAnimations: this._animationsDisabled || config.enterAnimationDuration?.toLocaleString() === '0' || config.exitAnimationDuration?.toString() === '0',\n container: {\n type: this._dialogContainerType,\n providers: () => [\n // Provide our config as the CDK config as well since it has the same interface as the\n // CDK one, but it contains the actual values passed in by the user for things like\n // `disableClose` which we disable for the CDK dialog since we handle it ourselves.\n {\n provide: this.dialogConfigClass,\n useValue: config\n }, {\n provide: DialogConfig,\n useValue: config\n }]\n },\n templateContext: () => ({\n dialogRef\n }),\n providers: (ref, cdkConfig, dialogContainer) => {\n dialogRef = new this._dialogRefConstructor(ref, config, dialogContainer);\n dialogRef.updatePosition(config?.position);\n return [{\n provide: this._dialogContainerType,\n useValue: dialogContainer\n }, {\n provide: this._dialogDataToken,\n useValue: cdkConfig.data\n }, {\n provide: this._dialogRefConstructor,\n useValue: dialogRef\n }];\n }\n });\n // This can't be assigned in the `providers` callback, because\n // the instance hasn't been assigned to the CDK ref yet.\n dialogRef.componentRef = cdkRef.componentRef;\n dialogRef.componentInstance = cdkRef.componentInstance;\n this.openDialogs.push(dialogRef);\n this.afterOpened.next(dialogRef);\n dialogRef.afterClosed().subscribe(() => {\n const index = this.openDialogs.indexOf(dialogRef);\n if (index > -1) {\n this.openDialogs.splice(index, 1);\n if (!this.openDialogs.length) {\n this._getAfterAllClosed().next();\n }\n }\n });\n return dialogRef;\n }\n /**\n * Closes all of the currently-open dialogs.\n */\n closeAll() {\n this._closeDialogs(this.openDialogs);\n }\n /**\n * Finds an open dialog by its id.\n * @param id ID to use when looking up the dialog.\n */\n getDialogById(id) {\n return this.openDialogs.find(dialog => dialog.id === id);\n }\n ngOnDestroy() {\n // Only close the dialogs at this level on destroy\n // since the parent service may still be active.\n this._closeDialogs(this._openDialogsAtThisLevel);\n this._afterAllClosedAtThisLevel.complete();\n this._afterOpenedAtThisLevel.complete();\n }\n _closeDialogs(dialogs) {\n let i = dialogs.length;\n while (i--) {\n dialogs[i].close();\n }\n }\n static ɵfac = function MatDialog_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDialog)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MatDialog,\n factory: MatDialog.ɵfac,\n providedIn: 'root'\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatDialog, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], () => [], null);\n})();\n\n/**\n * Button that will close the current dialog.\n */\nclass MatDialogClose {\n dialogRef = inject(MatDialogRef, {\n optional: true\n });\n _elementRef = inject(ElementRef);\n _dialog = inject(MatDialog);\n /** Screen-reader label for the button. */\n ariaLabel;\n /** Default to \"button\" to prevents accidental form submits. */\n type = 'button';\n /** Dialog close input. */\n dialogResult;\n _matDialogClose;\n constructor() {}\n ngOnInit() {\n if (!this.dialogRef) {\n // When this directive is included in a dialog via TemplateRef (rather than being\n // in a Component), the DialogRef isn't available via injection because embedded\n // views cannot be given a custom injector. Instead, we look up the DialogRef by\n // ID. This must occur in `onInit`, as the ID binding for the dialog container won't\n // be resolved at constructor time.\n this.dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs);\n }\n }\n ngOnChanges(changes) {\n const proxiedChange = changes['_matDialogClose'] || changes['_matDialogCloseResult'];\n if (proxiedChange) {\n this.dialogResult = proxiedChange.currentValue;\n }\n }\n _onButtonClick(event) {\n // Determinate the focus origin using the click event, because using the FocusMonitor will\n // result in incorrect origins. Most of the time, close buttons will be auto focused in the\n // dialog, and therefore clicking the button won't result in a focus change. This means that\n // the FocusMonitor won't detect any origin change, and will always output `program`.\n _closeDialogVia(this.dialogRef, event.screenX === 0 && event.screenY === 0 ? 'keyboard' : 'mouse', this.dialogResult);\n }\n static ɵfac = function MatDialogClose_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDialogClose)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDialogClose,\n selectors: [[\"\", \"mat-dialog-close\", \"\"], [\"\", \"matDialogClose\", \"\"]],\n hostVars: 2,\n hostBindings: function MatDialogClose_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function MatDialogClose_click_HostBindingHandler($event) {\n return ctx._onButtonClick($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-label\", ctx.ariaLabel || null)(\"type\", ctx.type);\n }\n },\n inputs: {\n ariaLabel: [0, \"aria-label\", \"ariaLabel\"],\n type: \"type\",\n dialogResult: [0, \"mat-dialog-close\", \"dialogResult\"],\n _matDialogClose: [0, \"matDialogClose\", \"_matDialogClose\"]\n },\n exportAs: [\"matDialogClose\"],\n features: [i0.ɵɵNgOnChangesFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatDialogClose, [{\n type: Directive,\n args: [{\n selector: '[mat-dialog-close], [matDialogClose]',\n exportAs: 'matDialogClose',\n host: {\n '(click)': '_onButtonClick($event)',\n '[attr.aria-label]': 'ariaLabel || null',\n '[attr.type]': 'type'\n }\n }]\n }], () => [], {\n ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }],\n type: [{\n type: Input\n }],\n dialogResult: [{\n type: Input,\n args: ['mat-dialog-close']\n }],\n _matDialogClose: [{\n type: Input,\n args: ['matDialogClose']\n }]\n });\n})();\nclass MatDialogLayoutSection {\n _dialogRef = inject(MatDialogRef, {\n optional: true\n });\n _elementRef = inject(ElementRef);\n _dialog = inject(MatDialog);\n constructor() {}\n ngOnInit() {\n if (!this._dialogRef) {\n this._dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs);\n }\n if (this._dialogRef) {\n Promise.resolve().then(() => {\n this._onAdd();\n });\n }\n }\n ngOnDestroy() {\n // Note: we null check because there are some internal\n // tests that are mocking out `MatDialogRef` incorrectly.\n const instance = this._dialogRef?._containerInstance;\n if (instance) {\n Promise.resolve().then(() => {\n this._onRemove();\n });\n }\n }\n static ɵfac = function MatDialogLayoutSection_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDialogLayoutSection)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDialogLayoutSection\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatDialogLayoutSection, [{\n type: Directive\n }], () => [], null);\n})();\n/**\n * Title of a dialog element. Stays fixed to the top of the dialog when scrolling.\n */\nclass MatDialogTitle extends MatDialogLayoutSection {\n id = inject(_IdGenerator).getId('mat-mdc-dialog-title-');\n _onAdd() {\n // Note: we null check the queue, because there are some internal\n // tests that are mocking out `MatDialogRef` incorrectly.\n this._dialogRef._containerInstance?._addAriaLabelledBy?.(this.id);\n }\n _onRemove() {\n this._dialogRef?._containerInstance?._removeAriaLabelledBy?.(this.id);\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMatDialogTitle_BaseFactory;\n return function MatDialogTitle_Factory(__ngFactoryType__) {\n return (ɵMatDialogTitle_BaseFactory || (ɵMatDialogTitle_BaseFactory = i0.ɵɵgetInheritedFactory(MatDialogTitle)))(__ngFactoryType__ || MatDialogTitle);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDialogTitle,\n selectors: [[\"\", \"mat-dialog-title\", \"\"], [\"\", \"matDialogTitle\", \"\"]],\n hostAttrs: [1, \"mat-mdc-dialog-title\", \"mdc-dialog__title\"],\n hostVars: 1,\n hostBindings: function MatDialogTitle_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵdomProperty(\"id\", ctx.id);\n }\n },\n inputs: {\n id: \"id\"\n },\n exportAs: [\"matDialogTitle\"],\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatDialogTitle, [{\n type: Directive,\n args: [{\n selector: '[mat-dialog-title], [matDialogTitle]',\n exportAs: 'matDialogTitle',\n host: {\n 'class': 'mat-mdc-dialog-title mdc-dialog__title',\n '[id]': 'id'\n }\n }]\n }], null, {\n id: [{\n type: Input\n }]\n });\n})();\n/**\n * Scrollable content container of a dialog.\n */\nclass MatDialogContent {\n static ɵfac = function MatDialogContent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDialogContent)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDialogContent,\n selectors: [[\"\", \"mat-dialog-content\", \"\"], [\"mat-dialog-content\"], [\"\", \"matDialogContent\", \"\"]],\n hostAttrs: [1, \"mat-mdc-dialog-content\", \"mdc-dialog__content\"],\n features: [i0.ɵɵHostDirectivesFeature([i1.CdkScrollable])]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatDialogContent, [{\n type: Directive,\n args: [{\n selector: `[mat-dialog-content], mat-dialog-content, [matDialogContent]`,\n host: {\n 'class': 'mat-mdc-dialog-content mdc-dialog__content'\n },\n hostDirectives: [CdkScrollable]\n }]\n }], null, null);\n})();\n/**\n * Container for the bottom action buttons in a dialog.\n * Stays fixed to the bottom when scrolling.\n */\nclass MatDialogActions extends MatDialogLayoutSection {\n /**\n * Horizontal alignment of action buttons.\n */\n align;\n _onAdd() {\n this._dialogRef._containerInstance?._updateActionSectionCount?.(1);\n }\n _onRemove() {\n this._dialogRef._containerInstance?._updateActionSectionCount?.(-1);\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMatDialogActions_BaseFactory;\n return function MatDialogActions_Factory(__ngFactoryType__) {\n return (ɵMatDialogActions_BaseFactory || (ɵMatDialogActions_BaseFactory = i0.ɵɵgetInheritedFactory(MatDialogActions)))(__ngFactoryType__ || MatDialogActions);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDialogActions,\n selectors: [[\"\", \"mat-dialog-actions\", \"\"], [\"mat-dialog-actions\"], [\"\", \"matDialogActions\", \"\"]],\n hostAttrs: [1, \"mat-mdc-dialog-actions\", \"mdc-dialog__actions\"],\n hostVars: 6,\n hostBindings: function MatDialogActions_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mat-mdc-dialog-actions-align-start\", ctx.align === \"start\")(\"mat-mdc-dialog-actions-align-center\", ctx.align === \"center\")(\"mat-mdc-dialog-actions-align-end\", ctx.align === \"end\");\n }\n },\n inputs: {\n align: \"align\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatDialogActions, [{\n type: Directive,\n args: [{\n selector: `[mat-dialog-actions], mat-dialog-actions, [matDialogActions]`,\n host: {\n 'class': 'mat-mdc-dialog-actions mdc-dialog__actions',\n '[class.mat-mdc-dialog-actions-align-start]': 'align === \"start\"',\n '[class.mat-mdc-dialog-actions-align-center]': 'align === \"center\"',\n '[class.mat-mdc-dialog-actions-align-end]': 'align === \"end\"'\n }\n }]\n }], null, {\n align: [{\n type: Input\n }]\n });\n})();\n/**\n * Finds the closest MatDialogRef to an element by looking at the DOM.\n * @param element Element relative to which to look for a dialog.\n * @param openDialogs References to the currently-open dialogs.\n */\nfunction getClosestDialog(element, openDialogs) {\n let parent = element.nativeElement.parentElement;\n while (parent && !parent.classList.contains('mat-mdc-dialog-container')) {\n parent = parent.parentElement;\n }\n return parent ? openDialogs.find(dialog => dialog.id === parent.id) : null;\n}\nconst DIRECTIVES = [MatDialogContainer, MatDialogClose, MatDialogTitle, MatDialogActions, MatDialogContent];\nclass MatDialogModule {\n static ɵfac = function MatDialogModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDialogModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatDialogModule,\n imports: [DialogModule, OverlayModule, PortalModule, MatCommonModule, MatDialogContainer, MatDialogClose, MatDialogTitle, MatDialogActions, MatDialogContent],\n exports: [MatCommonModule, MatDialogContainer, MatDialogClose, MatDialogTitle, MatDialogActions, MatDialogContent]\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [MatDialog],\n imports: [DialogModule, OverlayModule, PortalModule, MatCommonModule, MatCommonModule]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatDialogModule, [{\n type: NgModule,\n args: [{\n imports: [DialogModule, OverlayModule, PortalModule, MatCommonModule, ...DIRECTIVES],\n exports: [MatCommonModule, ...DIRECTIVES],\n providers: [MatDialog]\n }]\n }], null, null);\n})();\nexport { MatDialogActions as M, _closeDialogVia as _, MatDialogClose as a, MatDialogTitle as b, MatDialogContent as c, MatDialogContainer as d, MAT_DIALOG_DATA as e, MAT_DIALOG_DEFAULT_OPTIONS as f, MAT_DIALOG_SCROLL_STRATEGY as g, MatDialog as h, MatDialogConfig as i, MatDialogState as j, MatDialogRef as k, MatDialogModule as l };\n","/**\n * @license Angular v20.1.7\n * (c) 2010-2025 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { Directive, InjectionToken, forwardRef, Optional, Inject, ɵisPromise as _isPromise, ɵisSubscribable as _isSubscribable, ɵRuntimeError as _RuntimeError, Self, untracked, computed, signal, EventEmitter, Input, Host, SkipSelf, booleanAttribute, ChangeDetectorRef, Output, Injectable, inject, ApplicationRef, DestroyRef, afterNextRender, NgModule, Version } from '@angular/core';\nimport { ɵgetDOM as _getDOM } from '@angular/common';\nimport { forkJoin, from, Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/**\n * Base class for all ControlValueAccessor classes defined in Forms package.\n * Contains common logic and utility functions.\n *\n * Note: this is an *internal-only* class and should not be extended or used directly in\n * applications code.\n */\nclass BaseControlValueAccessor {\n _renderer;\n _elementRef;\n /**\n * The registered callback function called when a change or input event occurs on the input\n * element.\n * @docs-private\n */\n onChange = _ => {};\n /**\n * The registered callback function called when a blur event occurs on the input element.\n * @docs-private\n */\n onTouched = () => {};\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n }\n /**\n * Helper method that sets a property on a target element using the current Renderer\n * implementation.\n * @docs-private\n */\n setProperty(key, value) {\n this._renderer.setProperty(this._elementRef.nativeElement, key, value);\n }\n /**\n * Registers a function called when the control is touched.\n * @docs-private\n */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /**\n * Registers a function called when the control value changes.\n * @docs-private\n */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /**\n * Sets the \"disabled\" property on the range input element.\n * @docs-private\n */\n setDisabledState(isDisabled) {\n this.setProperty('disabled', isDisabled);\n }\n static ɵfac = function BaseControlValueAccessor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BaseControlValueAccessor)(i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: BaseControlValueAccessor\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(BaseControlValueAccessor, [{\n type: Directive\n }], () => [{\n type: i0.Renderer2\n }, {\n type: i0.ElementRef\n }], null);\n})();\n/**\n * Base class for all built-in ControlValueAccessor classes (except DefaultValueAccessor, which is\n * used in case no other CVAs can be found). We use this class to distinguish between default CVA,\n * built-in CVAs and custom CVAs, so that Forms logic can recognize built-in CVAs and treat custom\n * ones with higher priority (when both built-in and custom CVAs are present).\n *\n * Note: this is an *internal-only* class and should not be extended or used directly in\n * applications code.\n */\nclass BuiltInControlValueAccessor extends BaseControlValueAccessor {\n static ɵfac = /* @__PURE__ */(() => {\n let ɵBuiltInControlValueAccessor_BaseFactory;\n return function BuiltInControlValueAccessor_Factory(__ngFactoryType__) {\n return (ɵBuiltInControlValueAccessor_BaseFactory || (ɵBuiltInControlValueAccessor_BaseFactory = i0.ɵɵgetInheritedFactory(BuiltInControlValueAccessor)))(__ngFactoryType__ || BuiltInControlValueAccessor);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: BuiltInControlValueAccessor,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(BuiltInControlValueAccessor, [{\n type: Directive\n }], null, null);\n})();\n/**\n * Used to provide a `ControlValueAccessor` for form controls.\n *\n * See `DefaultValueAccessor` for how to implement one.\n *\n * @publicApi\n */\nconst NG_VALUE_ACCESSOR = new InjectionToken(ngDevMode ? 'NgValueAccessor' : '');\nconst CHECKBOX_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxControlValueAccessor),\n multi: true\n};\n/**\n * @description\n * A `ControlValueAccessor` for writing a value and listening to changes on a checkbox input\n * element.\n *\n * @usageNotes\n *\n * ### Using a checkbox with a reactive form.\n *\n * The following example shows how to use a checkbox with a reactive form.\n *\n * ```ts\n * const rememberLoginControl = new FormControl();\n * ```\n *\n * ```html\n * <input type=\"checkbox\" [formControl]=\"rememberLoginControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\nclass CheckboxControlValueAccessor extends BuiltInControlValueAccessor {\n /**\n * Sets the \"checked\" property on the input element.\n * @docs-private\n */\n writeValue(value) {\n this.setProperty('checked', value);\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵCheckboxControlValueAccessor_BaseFactory;\n return function CheckboxControlValueAccessor_Factory(__ngFactoryType__) {\n return (ɵCheckboxControlValueAccessor_BaseFactory || (ɵCheckboxControlValueAccessor_BaseFactory = i0.ɵɵgetInheritedFactory(CheckboxControlValueAccessor)))(__ngFactoryType__ || CheckboxControlValueAccessor);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CheckboxControlValueAccessor,\n selectors: [[\"input\", \"type\", \"checkbox\", \"formControlName\", \"\"], [\"input\", \"type\", \"checkbox\", \"formControl\", \"\"], [\"input\", \"type\", \"checkbox\", \"ngModel\", \"\"]],\n hostBindings: function CheckboxControlValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"change\", function CheckboxControlValueAccessor_change_HostBindingHandler($event) {\n return ctx.onChange($event.target.checked);\n })(\"blur\", function CheckboxControlValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([CHECKBOX_VALUE_ACCESSOR]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CheckboxControlValueAccessor, [{\n type: Directive,\n args: [{\n selector: 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',\n host: {\n '(change)': 'onChange($any($event.target).checked)',\n '(blur)': 'onTouched()'\n },\n providers: [CHECKBOX_VALUE_ACCESSOR],\n standalone: false\n }]\n }], null, null);\n})();\nconst DEFAULT_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DefaultValueAccessor),\n multi: true\n};\n/**\n * We must check whether the agent is Android because composition events\n * behave differently between iOS and Android.\n */\nfunction _isAndroid() {\n const userAgent = _getDOM() ? _getDOM().getUserAgent() : '';\n return /android (\\d+)/.test(userAgent.toLowerCase());\n}\n/**\n * @description\n * Provide this token to control if form directives buffer IME input until\n * the \"compositionend\" event occurs.\n * @publicApi\n */\nconst COMPOSITION_BUFFER_MODE = new InjectionToken(ngDevMode ? 'CompositionEventMode' : '');\n/**\n * The default `ControlValueAccessor` for writing a value and listening to changes on input\n * elements. The accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n *\n * @usageNotes\n *\n * ### Using the default value accessor\n *\n * The following example shows how to use an input element that activates the default value accessor\n * (in this case, a text field).\n *\n * ```ts\n * const firstNameControl = new FormControl();\n * ```\n *\n * ```html\n * <input type=\"text\" [formControl]=\"firstNameControl\">\n * ```\n *\n * This value accessor is used by default for `<input type=\"text\">` and `<textarea>` elements, but\n * you could also use it for custom components that have similar behavior and do not require special\n * processing. In order to attach the default value accessor to a custom element, add the\n * `ngDefaultControl` attribute as shown below.\n *\n * ```html\n * <custom-input-component ngDefaultControl [(ngModel)]=\"value\"></custom-input-component>\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\nclass DefaultValueAccessor extends BaseControlValueAccessor {\n _compositionMode;\n /** Whether the user is creating a composition string (IME events). */\n _composing = false;\n constructor(renderer, elementRef, _compositionMode) {\n super(renderer, elementRef);\n this._compositionMode = _compositionMode;\n if (this._compositionMode == null) {\n this._compositionMode = !_isAndroid();\n }\n }\n /**\n * Sets the \"value\" property on the input element.\n * @docs-private\n */\n writeValue(value) {\n const normalizedValue = value == null ? '' : value;\n this.setProperty('value', normalizedValue);\n }\n /** @internal */\n _handleInput(value) {\n if (!this._compositionMode || this._compositionMode && !this._composing) {\n this.onChange(value);\n }\n }\n /** @internal */\n _compositionStart() {\n this._composing = true;\n }\n /** @internal */\n _compositionEnd(value) {\n this._composing = false;\n this._compositionMode && this.onChange(value);\n }\n static ɵfac = function DefaultValueAccessor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DefaultValueAccessor)(i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(COMPOSITION_BUFFER_MODE, 8));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultValueAccessor,\n selectors: [[\"input\", \"formControlName\", \"\", 3, \"type\", \"checkbox\"], [\"textarea\", \"formControlName\", \"\"], [\"input\", \"formControl\", \"\", 3, \"type\", \"checkbox\"], [\"textarea\", \"formControl\", \"\"], [\"input\", \"ngModel\", \"\", 3, \"type\", \"checkbox\"], [\"textarea\", \"ngModel\", \"\"], [\"\", \"ngDefaultControl\", \"\"]],\n hostBindings: function DefaultValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"input\", function DefaultValueAccessor_input_HostBindingHandler($event) {\n return ctx._handleInput($event.target.value);\n })(\"blur\", function DefaultValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n })(\"compositionstart\", function DefaultValueAccessor_compositionstart_HostBindingHandler() {\n return ctx._compositionStart();\n })(\"compositionend\", function DefaultValueAccessor_compositionend_HostBindingHandler($event) {\n return ctx._compositionEnd($event.target.value);\n });\n }\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([DEFAULT_VALUE_ACCESSOR]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DefaultValueAccessor, [{\n type: Directive,\n args: [{\n selector: 'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',\n // TODO: vsavkin replace the above selector with the one below it once\n // https://github.com/angular/angular/issues/3011 is implemented\n // selector: '[ngModel],[formControl],[formControlName]',\n host: {\n '(input)': '_handleInput($any($event.target).value)',\n '(blur)': 'onTouched()',\n '(compositionstart)': '_compositionStart()',\n '(compositionend)': '_compositionEnd($any($event.target).value)'\n },\n providers: [DEFAULT_VALUE_ACCESSOR],\n standalone: false\n }]\n }], () => [{\n type: i0.Renderer2\n }, {\n type: i0.ElementRef\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [COMPOSITION_BUFFER_MODE]\n }]\n }], null);\n})();\nfunction isEmptyInputValue(value) {\n return value == null || lengthOrSize(value) === 0;\n}\n/**\n * Extract the length property in case it's an array or a string.\n * Extract the size property in case it's a set.\n * Return null else.\n * @param value Either an array, set or undefined.\n */\nfunction lengthOrSize(value) {\n // non-strict comparison is intentional, to check for both `null` and `undefined` values\n if (value == null) {\n return null;\n } else if (Array.isArray(value) || typeof value === 'string') {\n return value.length;\n } else if (value instanceof Set) {\n return value.size;\n }\n return null;\n}\n/**\n * @description\n * An `InjectionToken` for registering additional synchronous validators used with\n * `AbstractControl`s.\n *\n * @see {@link NG_ASYNC_VALIDATORS}\n *\n * @usageNotes\n *\n * ### Providing a custom validator\n *\n * The following example registers a custom validator directive. Adding the validator to the\n * existing collection of validators requires the `multi: true` option.\n *\n * ```ts\n * @Directive({\n * selector: '[customValidator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(control: AbstractControl): ValidationErrors | null {\n * return { 'custom': true };\n * }\n * }\n * ```\n *\n * @publicApi\n */\nconst NG_VALIDATORS = new InjectionToken(ngDevMode ? 'NgValidators' : '');\n/**\n * @description\n * An `InjectionToken` for registering additional asynchronous validators used with\n * `AbstractControl`s.\n *\n * @see {@link NG_VALIDATORS}\n *\n * @usageNotes\n *\n * ### Provide a custom async validator directive\n *\n * The following example implements the `AsyncValidator` interface to create an\n * async validator directive with a custom error key.\n *\n * ```ts\n * @Directive({\n * selector: '[customAsyncValidator]',\n * providers: [{provide: NG_ASYNC_VALIDATORS, useExisting: CustomAsyncValidatorDirective, multi:\n * true}]\n * })\n * class CustomAsyncValidatorDirective implements AsyncValidator {\n * validate(control: AbstractControl): Promise<ValidationErrors|null> {\n * return Promise.resolve({'custom': true});\n * }\n * }\n * ```\n *\n * @publicApi\n */\nconst NG_ASYNC_VALIDATORS = new InjectionToken(ngDevMode ? 'NgAsyncValidators' : '');\n/**\n * A regular expression that matches valid e-mail addresses.\n *\n * At a high level, this regexp matches e-mail addresses of the format `local-part@tld`, where:\n * - `local-part` consists of one or more of the allowed characters (alphanumeric and some\n * punctuation symbols).\n * - `local-part` cannot begin or end with a period (`.`).\n * - `local-part` cannot be longer than 64 characters.\n * - `tld` consists of one or more `labels` separated by periods (`.`). For example `localhost` or\n * `foo.com`.\n * - A `label` consists of one or more of the allowed characters (alphanumeric, dashes (`-`) and\n * periods (`.`)).\n * - A `label` cannot begin or end with a dash (`-`) or a period (`.`).\n * - A `label` cannot be longer than 63 characters.\n * - The whole address cannot be longer than 254 characters.\n *\n * ## Implementation background\n *\n * This regexp was ported over from AngularJS (see there for git history):\n * https://github.com/angular/angular.js/blob/c133ef836/src/ng/directive/input.js#L27\n * It is based on the\n * [WHATWG version](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address) with\n * some enhancements to incorporate more RFC rules (such as rules related to domain names and the\n * lengths of different parts of the address). The main differences from the WHATWG version are:\n * - Disallow `local-part` to begin or end with a period (`.`).\n * - Disallow `local-part` length to exceed 64 characters.\n * - Disallow total address length to exceed 254 characters.\n *\n * See [this commit](https://github.com/angular/angular.js/commit/f3f5cf72e) for more details.\n */\nconst EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/**\n * @description\n * Provides a set of built-in validators that can be used by form controls.\n *\n * A validator is a function that processes a `FormControl` or collection of\n * controls and returns an error map or null. A null map means that validation has passed.\n *\n * @see [Form Validation](guide/forms/form-validation)\n *\n * @publicApi\n */\nclass Validators {\n /**\n * @description\n * Validator that requires the control's value to be greater than or equal to the provided number.\n *\n * @usageNotes\n *\n * ### Validate against a minimum of 3\n *\n * ```ts\n * const control = new FormControl(2, Validators.min(3));\n *\n * console.log(control.errors); // {min: {min: 3, actual: 2}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `min` property if the validation check fails, otherwise `null`.\n *\n * @see {@link /api/forms/AbstractControl#updateValueAndValidity updateValueAndValidity}\n *\n */\n static min(min) {\n return minValidator(min);\n }\n /**\n * @description\n * Validator that requires the control's value to be less than or equal to the provided number.\n *\n * @usageNotes\n *\n * ### Validate against a maximum of 15\n *\n * ```ts\n * const control = new FormControl(16, Validators.max(15));\n *\n * console.log(control.errors); // {max: {max: 15, actual: 16}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `max` property if the validation check fails, otherwise `null`.\n *\n * @see {@link /api/forms/AbstractControl#updateValueAndValidity updateValueAndValidity}\n *\n */\n static max(max) {\n return maxValidator(max);\n }\n /**\n * @description\n * Validator that requires the control have a non-empty value.\n *\n * @usageNotes\n *\n * ### Validate that the field is non-empty\n *\n * ```ts\n * const control = new FormControl('', Validators.required);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map with the `required` property\n * if the validation check fails, otherwise `null`.\n *\n * @see {@link /api/forms/AbstractControl#updateValueAndValidity updateValueAndValidity}\n *\n */\n static required(control) {\n return requiredValidator(control);\n }\n /**\n * @description\n * Validator that requires the control's value be true. This validator is commonly\n * used for required checkboxes.\n *\n * @usageNotes\n *\n * ### Validate that the field value is true\n *\n * ```ts\n * const control = new FormControl('some value', Validators.requiredTrue);\n *\n * console.log(control.errors); // {required: true}\n * ```\n *\n * @returns An error map that contains the `required` property\n * set to `true` if the validation check fails, otherwise `null`.\n *\n * @see {@link /api/forms/AbstractControl#updateValueAndValidity updateValueAndValidity}\n *\n */\n static requiredTrue(control) {\n return requiredTrueValidator(control);\n }\n /**\n * @description\n * Validator that requires the control's value pass an email validation test.\n *\n * Tests the value using a [regular\n * expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)\n * pattern suitable for common use cases. The pattern is based on the definition of a valid email\n * address in the [WHATWG HTML\n * specification](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address) with\n * some enhancements to incorporate more RFC rules (such as rules related to domain names and the\n * lengths of different parts of the address).\n *\n * The differences from the WHATWG version include:\n * - Disallow `local-part` (the part before the `@` symbol) to begin or end with a period (`.`).\n * - Disallow `local-part` to be longer than 64 characters.\n * - Disallow the whole address to be longer than 254 characters.\n *\n * If this pattern does not satisfy your business needs, you can use `Validators.pattern()` to\n * validate the value against a different pattern.\n *\n * @usageNotes\n *\n * ### Validate that the field matches a valid email pattern\n *\n * ```ts\n * const control = new FormControl('bad@', Validators.email);\n *\n * console.log(control.errors); // {email: true}\n * ```\n *\n * @returns An error map with the `email` property\n * if the validation check fails, otherwise `null`.\n *\n * @see {@link /api/forms/AbstractControl#updateValueAndValidity updateValueAndValidity}\n *\n */\n static email(control) {\n return emailValidator(control);\n }\n /**\n * @description\n * Validator that requires the number of items in the control's value to be greater than or equal\n * to the provided minimum length. This validator is also provided by default if you use\n * the HTML5 `minlength` attribute. Note that the `minLength` validator is intended to be used\n * only for types that have a numeric `length` or `size` property, such as strings, arrays or\n * sets. The `minLength` validator logic is also not invoked for values when their `length` or\n * `size` property is 0 (for example in case of an empty string or an empty array), to support\n * optional controls. You can use the standard `required` validator if empty values should not be\n * considered valid.\n *\n * @usageNotes\n *\n * ### Validate that the field has a minimum of 3 characters\n *\n * ```ts\n * const control = new FormControl('ng', Validators.minLength(3));\n *\n * console.log(control.errors); // {minlength: {requiredLength: 3, actualLength: 2}}\n * ```\n *\n * ```html\n * <input minlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `minlength` property if the validation check fails, otherwise `null`.\n *\n * @see {@link /api/forms/AbstractControl#updateValueAndValidity updateValueAndValidity}\n *\n */\n static minLength(minLength) {\n return minLengthValidator(minLength);\n }\n /**\n * @description\n * Validator that requires the number of items in the control's value to be less than or equal\n * to the provided maximum length. This validator is also provided by default if you use\n * the HTML5 `maxlength` attribute. Note that the `maxLength` validator is intended to be used\n * only for types that have a numeric `length` or `size` property, such as strings, arrays or\n * sets.\n *\n * @usageNotes\n *\n * ### Validate that the field has maximum of 5 characters\n *\n * ```ts\n * const control = new FormControl('Angular', Validators.maxLength(5));\n *\n * console.log(control.errors); // {maxlength: {requiredLength: 5, actualLength: 7}}\n * ```\n *\n * ```html\n * <input maxlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `maxlength` property if the validation check fails, otherwise `null`.\n *\n * @see {@link /api/forms/AbstractControl#updateValueAndValidity updateValueAndValidity}\n *\n */\n static maxLength(maxLength) {\n return maxLengthValidator(maxLength);\n }\n /**\n * @description\n * Validator that requires the control's value to match a regex pattern. This validator is also\n * provided by default if you use the HTML5 `pattern` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field only contains letters or spaces\n *\n * ```ts\n * const control = new FormControl('1', Validators.pattern('[a-zA-Z ]*'));\n *\n * console.log(control.errors); // {pattern: {requiredPattern: '^[a-zA-Z ]*$', actualValue: '1'}}\n * ```\n *\n * ```html\n * <input pattern=\"[a-zA-Z ]*\">\n * ```\n *\n * ### Pattern matching with the global or sticky flag\n *\n * `RegExp` objects created with the `g` or `y` flags that are passed into `Validators.pattern`\n * can produce different results on the same input when validations are run consecutively. This is\n * due to how the behavior of `RegExp.prototype.test` is\n * specified in [ECMA-262](https://tc39.es/ecma262/#sec-regexpbuiltinexec)\n * (`RegExp` preserves the index of the last match when the global or sticky flag is used).\n * Due to this behavior, it is recommended that when using\n * `Validators.pattern` you **do not** pass in a `RegExp` object with either the global or sticky\n * flag enabled.\n *\n * ```ts\n * // Not recommended (since the `g` flag is used)\n * const controlOne = new FormControl('1', Validators.pattern(/foo/g));\n *\n * // Good\n * const controlTwo = new FormControl('1', Validators.pattern(/foo/));\n * ```\n *\n * @param pattern A regular expression to be used as is to test the values, or a string.\n * If a string is passed, the `^` character is prepended and the `$` character is\n * appended to the provided string (if not already present), and the resulting regular\n * expression is used to test the values.\n *\n * @returns A validator function that returns an error map with the\n * `pattern` property if the validation check fails, otherwise `null`.\n *\n * @see {@link /api/forms/AbstractControl#updateValueAndValidity updateValueAndValidity}\n *\n */\n static pattern(pattern) {\n return patternValidator(pattern);\n }\n /**\n * @description\n * Validator that performs no operation.\n *\n * @see {@link /api/forms/AbstractControl#updateValueAndValidity updateValueAndValidity}\n *\n */\n static nullValidator(control) {\n return nullValidator();\n }\n static compose(validators) {\n return compose(validators);\n }\n /**\n * @description\n * Compose multiple async validators into a single function that returns the union\n * of the individual error objects for the provided control.\n *\n * @returns A validator function that returns an error map with the\n * merged error objects of the async validators if the validation check fails, otherwise `null`.\n *\n * @see {@link /api/forms/AbstractControl#updateValueAndValidity updateValueAndValidity}\n *\n */\n static composeAsync(validators) {\n return composeAsync(validators);\n }\n}\n/**\n * Validator that requires the control's value to be greater than or equal to the provided number.\n * See `Validators.min` for additional information.\n */\nfunction minValidator(min) {\n return control => {\n if (control.value == null || min == null) {\n return null; // don't validate empty values to allow optional controls\n }\n const value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min\n return !isNaN(value) && value < min ? {\n 'min': {\n 'min': min,\n 'actual': control.value\n }\n } : null;\n };\n}\n/**\n * Validator that requires the control's value to be less than or equal to the provided number.\n * See `Validators.max` for additional information.\n */\nfunction maxValidator(max) {\n return control => {\n if (control.value == null || max == null) {\n return null; // don't validate empty values to allow optional controls\n }\n const value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // maximum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-max\n return !isNaN(value) && value > max ? {\n 'max': {\n 'max': max,\n 'actual': control.value\n }\n } : null;\n };\n}\n/**\n * Validator that requires the control have a non-empty value.\n * See `Validators.required` for additional information.\n */\nfunction requiredValidator(control) {\n return isEmptyInputValue(control.value) ? {\n 'required': true\n } : null;\n}\n/**\n * Validator that requires the control's value be true. This validator is commonly\n * used for required checkboxes.\n * See `Validators.requiredTrue` for additional information.\n */\nfunction requiredTrueValidator(control) {\n return control.value === true ? null : {\n 'required': true\n };\n}\n/**\n * Validator that requires the control's value pass an email validation test.\n * See `Validators.email` for additional information.\n */\nfunction emailValidator(control) {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n return EMAIL_REGEXP.test(control.value) ? null : {\n 'email': true\n };\n}\n/**\n * Validator that requires the number of items in the control's value to be greater than or equal\n * to the provided minimum length. See `Validators.minLength` for additional information.\n *\n * The minLengthValidator respects every length property in an object, regardless of whether it's an array.\n * For example, the object {id: 1, length: 0, width: 0} should be validated.\n */\nfunction minLengthValidator(minLength) {\n return control => {\n const length = control.value?.length ?? lengthOrSize(control.value);\n if (length === null || length === 0) {\n // don't validate empty values to allow optional controls\n // don't validate values without `length` or `size` property\n return null;\n }\n return length < minLength ? {\n 'minlength': {\n 'requiredLength': minLength,\n 'actualLength': length\n }\n } : null;\n };\n}\n/**\n * Validator that requires the number of items in the control's value to be less than or equal\n * to the provided maximum length. See `Validators.maxLength` for additional information.\n *\n * The maxLengthValidator respects every length property in an object, regardless of whether it's an array.\n * For example, the object {id: 1, length: 0, width: 0} should be validated.\n */\nfunction maxLengthValidator(maxLength) {\n return control => {\n const length = control.value?.length ?? lengthOrSize(control.value);\n if (length !== null && length > maxLength) {\n return {\n 'maxlength': {\n 'requiredLength': maxLength,\n 'actualLength': length\n }\n };\n }\n return null;\n };\n}\n/**\n * Validator that requires the control's value to match a regex pattern.\n * See `Validators.pattern` for additional information.\n */\nfunction patternValidator(pattern) {\n if (!pattern) return nullValidator;\n let regex;\n let regexStr;\n if (typeof pattern === 'string') {\n regexStr = '';\n if (pattern.charAt(0) !== '^') regexStr += '^';\n regexStr += pattern;\n if (pattern.charAt(pattern.length - 1) !== '$') regexStr += '$';\n regex = new RegExp(regexStr);\n } else {\n regexStr = pattern.toString();\n regex = pattern;\n }\n return control => {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value = control.value;\n return regex.test(value) ? null : {\n 'pattern': {\n 'requiredPattern': regexStr,\n 'actualValue': value\n }\n };\n };\n}\n/**\n * Function that has `ValidatorFn` shape, but performs no operation.\n */\nfunction nullValidator(control) {\n return null;\n}\nfunction isPresent(o) {\n return o != null;\n}\nfunction toObservable(value) {\n const obs = _isPromise(value) ? from(value) : value;\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !_isSubscribable(obs)) {\n let errorMessage = `Expected async validator to return Promise or Observable.`;\n // A synchronous validator will return object or null.\n if (typeof value === 'object') {\n errorMessage += ' Are you using a synchronous validator where an async validator is expected?';\n }\n throw new _RuntimeError(-1101 /* RuntimeErrorCode.WRONG_VALIDATOR_RETURN_TYPE */, errorMessage);\n }\n return obs;\n}\nfunction mergeErrors(arrayOfErrors) {\n let res = {};\n arrayOfErrors.forEach(errors => {\n res = errors != null ? {\n ...res,\n ...errors\n } : res;\n });\n return Object.keys(res).length === 0 ? null : res;\n}\nfunction executeValidators(control, validators) {\n return validators.map(validator => validator(control));\n}\nfunction isValidatorFn(validator) {\n return !validator.validate;\n}\n/**\n * Given the list of validators that may contain both functions as well as classes, return the list\n * of validator functions (convert validator classes into validator functions). This is needed to\n * have consistent structure in validators list before composing them.\n *\n * @param validators The set of validators that may contain validators both in plain function form\n * as well as represented as a validator class.\n */\nfunction normalizeValidators(validators) {\n return validators.map(validator => {\n return isValidatorFn(validator) ? validator : c => validator.validate(c);\n });\n}\n/**\n * Merges synchronous validators into a single validator function.\n * See `Validators.compose` for additional information.\n */\nfunction compose(validators) {\n if (!validators) return null;\n const presentValidators = validators.filter(isPresent);\n if (presentValidators.length == 0) return null;\n return function (control) {\n return mergeErrors(executeValidators(control, presentValidators));\n };\n}\n/**\n * Accepts a list of validators of different possible shapes (`Validator` and `ValidatorFn`),\n * normalizes the list (converts everything to `ValidatorFn`) and merges them into a single\n * validator function.\n */\nfunction composeValidators(validators) {\n return validators != null ? compose(normalizeValidators(validators)) : null;\n}\n/**\n * Merges asynchronous validators into a single validator function.\n * See `Validators.composeAsync` for additional information.\n */\nfunction composeAsync(validators) {\n if (!validators) return null;\n const presentValidators = validators.filter(isPresent);\n if (presentValidators.length == 0) return null;\n return function (control) {\n const observables = executeValidators(control, presentValidators).map(toObservable);\n return forkJoin(observables).pipe(map(mergeErrors));\n };\n}\n/**\n * Accepts a list of async validators of different possible shapes (`AsyncValidator` and\n * `AsyncValidatorFn`), normalizes the list (converts everything to `AsyncValidatorFn`) and merges\n * them into a single validator function.\n */\nfunction composeAsyncValidators(validators) {\n return validators != null ? composeAsync(normalizeValidators(validators)) : null;\n}\n/**\n * Merges raw control validators with a given directive validator and returns the combined list of\n * validators as an array.\n */\nfunction mergeValidators(controlValidators, dirValidator) {\n if (controlValidators === null) return [dirValidator];\n return Array.isArray(controlValidators) ? [...controlValidators, dirValidator] : [controlValidators, dirValidator];\n}\n/**\n * Retrieves the list of raw synchronous validators attached to a given control.\n */\nfunction getControlValidators(control) {\n return control._rawValidators;\n}\n/**\n * Retrieves the list of raw asynchronous validators attached to a given control.\n */\nfunction getControlAsyncValidators(control) {\n return control._rawAsyncValidators;\n}\n/**\n * Accepts a singleton validator, an array, or null, and returns an array type with the provided\n * validators.\n *\n * @param validators A validator, validators, or null.\n * @returns A validators array.\n */\nfunction makeValidatorsArray(validators) {\n if (!validators) return [];\n return Array.isArray(validators) ? validators : [validators];\n}\n/**\n * Determines whether a validator or validators array has a given validator.\n *\n * @param validators The validator or validators to compare against.\n * @param validator The validator to check.\n * @returns Whether the validator is present.\n */\nfunction hasValidator(validators, validator) {\n return Array.isArray(validators) ? validators.includes(validator) : validators === validator;\n}\n/**\n * Combines two arrays of validators into one. If duplicates are provided, only one will be added.\n *\n * @param validators The new validators.\n * @param currentValidators The base array of current validators.\n * @returns An array of validators.\n */\nfunction addValidators(validators, currentValidators) {\n const current = makeValidatorsArray(currentValidators);\n const validatorsToAdd = makeValidatorsArray(validators);\n validatorsToAdd.forEach(v => {\n // Note: if there are duplicate entries in the new validators array,\n // only the first one would be added to the current list of validators.\n // Duplicate ones would be ignored since `hasValidator` would detect\n // the presence of a validator function and we update the current list in place.\n if (!hasValidator(current, v)) {\n current.push(v);\n }\n });\n return current;\n}\nfunction removeValidators(validators, currentValidators) {\n return makeValidatorsArray(currentValidators).filter(v => !hasValidator(validators, v));\n}\n\n/**\n * @description\n * Base class for control directives.\n *\n * This class is only used internally in the `ReactiveFormsModule` and the `FormsModule`.\n *\n * @publicApi\n */\nclass AbstractControlDirective {\n /**\n * @description\n * Reports the value of the control if it is present, otherwise null.\n */\n get value() {\n return this.control ? this.control.value : null;\n }\n /**\n * @description\n * Reports whether the control is valid. A control is considered valid if no\n * validation errors exist with the current value.\n * If the control is not present, null is returned.\n */\n get valid() {\n return this.control ? this.control.valid : null;\n }\n /**\n * @description\n * Reports whether the control is invalid, meaning that an error exists in the input value.\n * If the control is not present, null is returned.\n */\n get invalid() {\n return this.control ? this.control.invalid : null;\n }\n /**\n * @description\n * Reports whether a control is pending, meaning that async validation is occurring and\n * errors are not yet available for the input value. If the control is not present, null is\n * returned.\n */\n get pending() {\n return this.control ? this.control.pending : null;\n }\n /**\n * @description\n * Reports whether the control is disabled, meaning that the control is disabled\n * in the UI and is exempt from validation checks and excluded from aggregate\n * values of ancestor controls. If the control is not present, null is returned.\n */\n get disabled() {\n return this.control ? this.control.disabled : null;\n }\n /**\n * @description\n * Reports whether the control is enabled, meaning that the control is included in ancestor\n * calculations of validity or value. If the control is not present, null is returned.\n */\n get enabled() {\n return this.control ? this.control.enabled : null;\n }\n /**\n * @description\n * Reports the control's validation errors. If the control is not present, null is returned.\n */\n get errors() {\n return this.control ? this.control.errors : null;\n }\n /**\n * @description\n * Reports whether the control is pristine, meaning that the user has not yet changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get pristine() {\n return this.control ? this.control.pristine : null;\n }\n /**\n * @description\n * Reports whether the control is dirty, meaning that the user has changed\n * the value in the UI. If the control is not present, null is returned.\n */\n get dirty() {\n return this.control ? this.control.dirty : null;\n }\n /**\n * @description\n * Reports whether the control is touched, meaning that the user has triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get touched() {\n return this.control ? this.control.touched : null;\n }\n /**\n * @description\n * Reports the validation status of the control. Possible values include:\n * 'VALID', 'INVALID', 'DISABLED', and 'PENDING'.\n * If the control is not present, null is returned.\n */\n get status() {\n return this.control ? this.control.status : null;\n }\n /**\n * @description\n * Reports whether the control is untouched, meaning that the user has not yet triggered\n * a `blur` event on it. If the control is not present, null is returned.\n */\n get untouched() {\n return this.control ? this.control.untouched : null;\n }\n /**\n * @description\n * Returns a multicasting observable that emits a validation status whenever it is\n * calculated for the control. If the control is not present, null is returned.\n */\n get statusChanges() {\n return this.control ? this.control.statusChanges : null;\n }\n /**\n * @description\n * Returns a multicasting observable of value changes for the control that emits every time the\n * value of the control changes in the UI or programmatically.\n * If the control is not present, null is returned.\n */\n get valueChanges() {\n return this.control ? this.control.valueChanges : null;\n }\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path() {\n return null;\n }\n /**\n * Contains the result of merging synchronous validators into a single validator function\n * (combined using `Validators.compose`).\n */\n _composedValidatorFn;\n /**\n * Contains the result of merging asynchronous validators into a single validator function\n * (combined using `Validators.composeAsync`).\n */\n _composedAsyncValidatorFn;\n /**\n * Set of synchronous validators as they were provided while calling `setValidators` function.\n * @internal\n */\n _rawValidators = [];\n /**\n * Set of asynchronous validators as they were provided while calling `setAsyncValidators`\n * function.\n * @internal\n */\n _rawAsyncValidators = [];\n /**\n * Sets synchronous validators for this directive.\n * @internal\n */\n _setValidators(validators) {\n this._rawValidators = validators || [];\n this._composedValidatorFn = composeValidators(this._rawValidators);\n }\n /**\n * Sets asynchronous validators for this directive.\n * @internal\n */\n _setAsyncValidators(validators) {\n this._rawAsyncValidators = validators || [];\n this._composedAsyncValidatorFn = composeAsyncValidators(this._rawAsyncValidators);\n }\n /**\n * @description\n * Synchronous validator function composed of all the synchronous validators registered with this\n * directive.\n */\n get validator() {\n return this._composedValidatorFn || null;\n }\n /**\n * @description\n * Asynchronous validator function composed of all the asynchronous validators registered with\n * this directive.\n */\n get asyncValidator() {\n return this._composedAsyncValidatorFn || null;\n }\n /*\n * The set of callbacks to be invoked when directive instance is being destroyed.\n */\n _onDestroyCallbacks = [];\n /**\n * Internal function to register callbacks that should be invoked\n * when directive instance is being destroyed.\n * @internal\n */\n _registerOnDestroy(fn) {\n this._onDestroyCallbacks.push(fn);\n }\n /**\n * Internal function to invoke all registered \"on destroy\" callbacks.\n * Note: calling this function also clears the list of callbacks.\n * @internal\n */\n _invokeOnDestroyCallbacks() {\n this._onDestroyCallbacks.forEach(fn => fn());\n this._onDestroyCallbacks = [];\n }\n /**\n * @description\n * Resets the control with the provided value if the control is present.\n */\n reset(value = undefined) {\n if (this.control) this.control.reset(value);\n }\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```ts\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n hasError(errorCode, path) {\n return this.control ? this.control.hasError(errorCode, path) : false;\n }\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```ts\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n getError(errorCode, path) {\n return this.control ? this.control.getError(errorCode, path) : null;\n }\n}\n\n/**\n * @description\n * A base class for directives that contain multiple registered instances of `NgControl`.\n * Only used by the forms module.\n *\n * @publicApi\n */\nclass ControlContainer extends AbstractControlDirective {\n /**\n * @description\n * The name for the control\n */\n name;\n /**\n * @description\n * The top-level form directive for the control.\n */\n get formDirective() {\n return null;\n }\n /**\n * @description\n * The path to this group.\n */\n get path() {\n return null;\n }\n}\n\n/**\n * @description\n * A base class that all `FormControl`-based directives extend. It binds a `FormControl`\n * object to a DOM element.\n *\n * @publicApi\n */\nclass NgControl extends AbstractControlDirective {\n /**\n * @description\n * The parent form for the control.\n *\n * @internal\n */\n _parent = null;\n /**\n * @description\n * The name for the control\n */\n name = null;\n /**\n * @description\n * The value accessor for the control\n */\n valueAccessor = null;\n}\n\n// DO NOT REFACTOR!\n// Each status is represented by a separate function to make sure that\n// advanced Closure Compiler optimizations related to property renaming\n// can work correctly.\nclass AbstractControlStatus {\n _cd;\n constructor(cd) {\n this._cd = cd;\n }\n get isTouched() {\n // track the touched signal\n this._cd?.control?._touched?.();\n return !!this._cd?.control?.touched;\n }\n get isUntouched() {\n return !!this._cd?.control?.untouched;\n }\n get isPristine() {\n // track the pristine signal\n this._cd?.control?._pristine?.();\n return !!this._cd?.control?.pristine;\n }\n get isDirty() {\n // pristine signal already tracked above\n return !!this._cd?.control?.dirty;\n }\n get isValid() {\n // track the status signal\n this._cd?.control?._status?.();\n return !!this._cd?.control?.valid;\n }\n get isInvalid() {\n // status signal already tracked above\n return !!this._cd?.control?.invalid;\n }\n get isPending() {\n // status signal already tracked above\n return !!this._cd?.control?.pending;\n }\n get isSubmitted() {\n // track the submitted signal\n this._cd?._submitted?.();\n // We check for the `submitted` field from `NgForm` and `FormGroupDirective` classes, but\n // we avoid instanceof checks to prevent non-tree-shakable references to those types.\n return !!this._cd?.submitted;\n }\n}\nconst ngControlStatusHost = {\n '[class.ng-untouched]': 'isUntouched',\n '[class.ng-touched]': 'isTouched',\n '[class.ng-pristine]': 'isPristine',\n '[class.ng-dirty]': 'isDirty',\n '[class.ng-valid]': 'isValid',\n '[class.ng-invalid]': 'isInvalid',\n '[class.ng-pending]': 'isPending'\n};\nconst ngGroupStatusHost = {\n ...ngControlStatusHost,\n '[class.ng-submitted]': 'isSubmitted'\n};\n/**\n * @description\n * Directive automatically applied to Angular form controls that sets CSS classes\n * based on control status.\n *\n * @usageNotes\n *\n * ### CSS classes applied\n *\n * The following classes are applied as the properties become true:\n *\n * * ng-valid\n * * ng-invalid\n * * ng-pending\n * * ng-pristine\n * * ng-dirty\n * * ng-untouched\n * * ng-touched\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\nclass NgControlStatus extends AbstractControlStatus {\n constructor(cd) {\n super(cd);\n }\n static ɵfac = function NgControlStatus_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgControlStatus)(i0.ɵɵdirectiveInject(NgControl, 2));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgControlStatus,\n selectors: [[\"\", \"formControlName\", \"\"], [\"\", \"ngModel\", \"\"], [\"\", \"formControl\", \"\"]],\n hostVars: 14,\n hostBindings: function NgControlStatus_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"ng-untouched\", ctx.isUntouched)(\"ng-touched\", ctx.isTouched)(\"ng-pristine\", ctx.isPristine)(\"ng-dirty\", ctx.isDirty)(\"ng-valid\", ctx.isValid)(\"ng-invalid\", ctx.isInvalid)(\"ng-pending\", ctx.isPending);\n }\n },\n standalone: false,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgControlStatus, [{\n type: Directive,\n args: [{\n selector: '[formControlName],[ngModel],[formControl]',\n host: ngControlStatusHost,\n standalone: false\n }]\n }], () => [{\n type: NgControl,\n decorators: [{\n type: Self\n }]\n }], null);\n})();\n/**\n * @description\n * Directive automatically applied to Angular form groups that sets CSS classes\n * based on control status (valid/invalid/dirty/etc). On groups, this includes the additional\n * class ng-submitted.\n *\n * @see {@link NgControlStatus}\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\nclass NgControlStatusGroup extends AbstractControlStatus {\n constructor(cd) {\n super(cd);\n }\n static ɵfac = function NgControlStatusGroup_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgControlStatusGroup)(i0.ɵɵdirectiveInject(ControlContainer, 10));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgControlStatusGroup,\n selectors: [[\"\", \"formGroupName\", \"\"], [\"\", \"formArrayName\", \"\"], [\"\", \"ngModelGroup\", \"\"], [\"\", \"formGroup\", \"\"], [\"form\", 3, \"ngNoForm\", \"\"], [\"\", \"ngForm\", \"\"]],\n hostVars: 16,\n hostBindings: function NgControlStatusGroup_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"ng-untouched\", ctx.isUntouched)(\"ng-touched\", ctx.isTouched)(\"ng-pristine\", ctx.isPristine)(\"ng-dirty\", ctx.isDirty)(\"ng-valid\", ctx.isValid)(\"ng-invalid\", ctx.isInvalid)(\"ng-pending\", ctx.isPending)(\"ng-submitted\", ctx.isSubmitted);\n }\n },\n standalone: false,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgControlStatusGroup, [{\n type: Directive,\n args: [{\n selector: '[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]',\n host: ngGroupStatusHost,\n standalone: false\n }]\n }], () => [{\n type: ControlContainer,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }]\n }], null);\n})();\nconst formControlNameExample = `\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n firstName: new FormControl()\n });`;\nconst formGroupNameExample = `\n <div [formGroup]=\"myGroup\">\n <div formGroupName=\"person\">\n <input formControlName=\"firstName\">\n </div>\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n person: new FormGroup({ firstName: new FormControl() })\n });`;\nconst formArrayNameExample = `\n <div [formGroup]=\"myGroup\">\n <div formArrayName=\"cities\">\n <div *ngFor=\"let city of cityArray.controls; index as i\">\n <input [formControlName]=\"i\">\n </div>\n </div>\n </div>\n\n In your class:\n\n this.cityArray = new FormArray([new FormControl('SF')]);\n this.myGroup = new FormGroup({\n cities: this.cityArray\n });`;\nconst ngModelGroupExample = `\n <form>\n <div ngModelGroup=\"person\">\n <input [(ngModel)]=\"person.name\" name=\"firstName\">\n </div>\n </form>`;\nconst ngModelWithFormGroupExample = `\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n <input [(ngModel)]=\"showMoreControls\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n`;\nfunction controlParentException(nameOrIndex) {\n return new _RuntimeError(1050 /* RuntimeErrorCode.FORM_CONTROL_NAME_MISSING_PARENT */, `formControlName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n ${describeFormControl(nameOrIndex)}\n\n Example:\n\n ${formControlNameExample}`);\n}\nfunction describeFormControl(nameOrIndex) {\n if (nameOrIndex == null || nameOrIndex === '') {\n return '';\n }\n const valueType = typeof nameOrIndex === 'string' ? 'name' : 'index';\n return `Affected Form Control ${valueType}: \"${nameOrIndex}\"`;\n}\nfunction ngModelGroupException() {\n return new _RuntimeError(1051 /* RuntimeErrorCode.FORM_CONTROL_NAME_INSIDE_MODEL_GROUP */, `formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n that also have a \"form\" prefix: formGroupName, formArrayName, or formGroup.\n\n Option 1: Update the parent to be formGroupName (reactive form strategy)\n\n ${formGroupNameExample}\n\n Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n ${ngModelGroupExample}`);\n}\nfunction missingFormException() {\n return new _RuntimeError(1052 /* RuntimeErrorCode.FORM_GROUP_MISSING_INSTANCE */, `formGroup expects a FormGroup instance. Please pass one in.\n\n Example:\n\n ${formControlNameExample}`);\n}\nfunction groupParentException() {\n return new _RuntimeError(1053 /* RuntimeErrorCode.FORM_GROUP_NAME_MISSING_PARENT */, `formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${formGroupNameExample}`);\n}\nfunction arrayParentException() {\n return new _RuntimeError(1054 /* RuntimeErrorCode.FORM_ARRAY_NAME_MISSING_PARENT */, `formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${formArrayNameExample}`);\n}\nconst disabledAttrWarning = `\n It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n you. We recommend using this approach to avoid 'changed after checked' errors.\n\n Example:\n // Specify the \\`disabled\\` property at control creation time:\n form = new FormGroup({\n first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n last: new FormControl('Drew', Validators.required)\n });\n\n // Controls can also be enabled/disabled after creation:\n form.get('first')?.enable();\n form.get('last')?.disable();\n`;\nconst asyncValidatorsDroppedWithOptsWarning = `\n It looks like you're constructing using a FormControl with both an options argument and an\n async validators argument. Mixing these arguments will cause your async validators to be dropped.\n You should either put all your validators in the options object, or in separate validators\n arguments. For example:\n\n // Using validators arguments\n fc = new FormControl(42, Validators.required, myAsyncValidator);\n\n // Using AbstractControlOptions\n fc = new FormControl(42, {validators: Validators.required, asyncValidators: myAV});\n\n // Do NOT mix them: async validators will be dropped!\n fc = new FormControl(42, {validators: Validators.required}, /* Oops! */ myAsyncValidator);\n`;\nfunction ngModelWarning(directiveName) {\n return `\n It looks like you're using ngModel on the same form field as ${directiveName}.\n Support for using the ngModel input property and ngModelChange event with\n reactive form directives has been deprecated in Angular v6 and will be removed\n in a future version of Angular.\n\n For more information on this, see our API docs here:\n https://angular.io/api/forms/${directiveName === 'formControl' ? 'FormControlDirective' : 'FormControlName'}#use-with-ngmodel\n `;\n}\nfunction describeKey(isFormGroup, key) {\n return isFormGroup ? `with name: '${key}'` : `at index: ${key}`;\n}\nfunction noControlsError(isFormGroup) {\n return `\n There are no form controls registered with this ${isFormGroup ? 'group' : 'array'} yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n `;\n}\nfunction missingControlError(isFormGroup, key) {\n return `Cannot find form control ${describeKey(isFormGroup, key)}`;\n}\nfunction missingControlValueError(isFormGroup, key) {\n return `Must supply a value for form control ${describeKey(isFormGroup, key)}`;\n}\n\n/**\n * Reports that a control is valid, meaning that no errors exist in the input value.\n *\n * @see {@link status}\n */\nconst VALID = 'VALID';\n/**\n * Reports that a control is invalid, meaning that an error exists in the input value.\n *\n * @see {@link status}\n */\nconst INVALID = 'INVALID';\n/**\n * Reports that a control is pending, meaning that async validation is occurring and\n * errors are not yet available for the input value.\n *\n * @see {@link markAsPending}\n * @see {@link status}\n */\nconst PENDING = 'PENDING';\n/**\n * Reports that a control is disabled, meaning that the control is exempt from ancestor\n * calculations of validity or value.\n *\n * @see {@link markAsDisabled}\n * @see {@link status}\n */\nconst DISABLED = 'DISABLED';\n/**\n * Base class for every event sent by `AbstractControl.events()`\n *\n * @publicApi\n */\nclass ControlEvent {}\n/**\n * Event fired when the value of a control changes.\n *\n * @publicApi\n */\nclass ValueChangeEvent extends ControlEvent {\n value;\n source;\n constructor(value, source) {\n super();\n this.value = value;\n this.source = source;\n }\n}\n/**\n * Event fired when the control's pristine state changes (pristine <=> dirty).\n *\n * @publicApi */\nclass PristineChangeEvent extends ControlEvent {\n pristine;\n source;\n constructor(pristine, source) {\n super();\n this.pristine = pristine;\n this.source = source;\n }\n}\n/**\n * Event fired when the control's touched status changes (touched <=> untouched).\n *\n * @publicApi\n */\nclass TouchedChangeEvent extends ControlEvent {\n touched;\n source;\n constructor(touched, source) {\n super();\n this.touched = touched;\n this.source = source;\n }\n}\n/**\n * Event fired when the control's status changes.\n *\n * @publicApi\n */\nclass StatusChangeEvent extends ControlEvent {\n status;\n source;\n constructor(status, source) {\n super();\n this.status = status;\n this.source = source;\n }\n}\n/**\n * Event fired when a form is submitted\n *\n * @publicApi\n */\nclass FormSubmittedEvent extends ControlEvent {\n source;\n constructor(source) {\n super();\n this.source = source;\n }\n}\n/**\n * Event fired when a form is reset.\n *\n * @publicApi\n */\nclass FormResetEvent extends ControlEvent {\n source;\n constructor(source) {\n super();\n this.source = source;\n }\n}\n/**\n * Gets validators from either an options object or given validators.\n */\nfunction pickValidators(validatorOrOpts) {\n return (isOptionsObj(validatorOrOpts) ? validatorOrOpts.validators : validatorOrOpts) || null;\n}\n/**\n * Creates validator function by combining provided validators.\n */\nfunction coerceToValidator(validator) {\n return Array.isArray(validator) ? composeValidators(validator) : validator || null;\n}\n/**\n * Gets async validators from either an options object or given validators.\n */\nfunction pickAsyncValidators(asyncValidator, validatorOrOpts) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (isOptionsObj(validatorOrOpts) && asyncValidator) {\n console.warn(asyncValidatorsDroppedWithOptsWarning);\n }\n }\n return (isOptionsObj(validatorOrOpts) ? validatorOrOpts.asyncValidators : asyncValidator) || null;\n}\n/**\n * Creates async validator function by combining provided async validators.\n */\nfunction coerceToAsyncValidator(asyncValidator) {\n return Array.isArray(asyncValidator) ? composeAsyncValidators(asyncValidator) : asyncValidator || null;\n}\nfunction isOptionsObj(validatorOrOpts) {\n return validatorOrOpts != null && !Array.isArray(validatorOrOpts) && typeof validatorOrOpts === 'object';\n}\nfunction assertControlPresent(parent, isGroup, key) {\n const controls = parent.controls;\n const collection = isGroup ? Object.keys(controls) : controls;\n if (!collection.length) {\n throw new _RuntimeError(1000 /* RuntimeErrorCode.NO_CONTROLS */, typeof ngDevMode === 'undefined' || ngDevMode ? noControlsError(isGroup) : '');\n }\n if (!controls[key]) {\n throw new _RuntimeError(1001 /* RuntimeErrorCode.MISSING_CONTROL */, typeof ngDevMode === 'undefined' || ngDevMode ? missingControlError(isGroup, key) : '');\n }\n}\nfunction assertAllValuesPresent(control, isGroup, value) {\n control._forEachChild((_, key) => {\n if (value[key] === undefined) {\n throw new _RuntimeError(1002 /* RuntimeErrorCode.MISSING_CONTROL_VALUE */, typeof ngDevMode === 'undefined' || ngDevMode ? missingControlValueError(isGroup, key) : '');\n }\n });\n}\n/**\n * This is the base class for `FormControl`, `FormGroup`, and `FormArray`.\n *\n * It provides some of the shared behavior that all controls and groups of controls have, like\n * running validators, calculating status, and resetting state. It also defines the properties\n * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be\n * instantiated directly.\n *\n * The first type parameter TValue represents the value type of the control (`control.value`).\n * The optional type parameter TRawValue represents the raw value type (`control.getRawValue()`).\n *\n * @see [Forms Guide](guide/forms)\n * @see [Reactive Forms Guide](guide/forms/reactive-forms)\n * @see [Dynamic Forms Guide](guide/forms/dynamic-forms)\n *\n * @publicApi\n */\nclass AbstractControl {\n /** @internal */\n _pendingDirty = false;\n /**\n * Indicates that a control has its own pending asynchronous validation in progress.\n * It also stores if the control should emit events when the validation status changes.\n *\n * @internal\n */\n _hasOwnPendingAsyncValidator = null;\n /** @internal */\n _pendingTouched = false;\n /** @internal */\n _onCollectionChange = () => {};\n /** @internal */\n _updateOn;\n _parent = null;\n _asyncValidationSubscription;\n /**\n * Contains the result of merging synchronous validators into a single validator function\n * (combined using `Validators.compose`).\n *\n * @internal\n */\n _composedValidatorFn;\n /**\n * Contains the result of merging asynchronous validators into a single validator function\n * (combined using `Validators.composeAsync`).\n *\n * @internal\n */\n _composedAsyncValidatorFn;\n /**\n * Synchronous validators as they were provided:\n * - in `AbstractControl` constructor\n * - as an argument while calling `setValidators` function\n * - while calling the setter on the `validator` field (e.g. `control.validator = validatorFn`)\n *\n * @internal\n */\n _rawValidators;\n /**\n * Asynchronous validators as they were provided:\n * - in `AbstractControl` constructor\n * - as an argument while calling `setAsyncValidators` function\n * - while calling the setter on the `asyncValidator` field (e.g. `control.asyncValidator =\n * asyncValidatorFn`)\n *\n * @internal\n */\n _rawAsyncValidators;\n /**\n * The current value of the control.\n *\n * * For a `FormControl`, the current value.\n * * For an enabled `FormGroup`, the values of enabled controls as an object\n * with a key-value pair for each member of the group.\n * * For a disabled `FormGroup`, the values of all controls as an object\n * with a key-value pair for each member of the group.\n * * For a `FormArray`, the values of enabled controls as an array.\n *\n */\n value;\n /**\n * Initialize the AbstractControl instance.\n *\n * @param validators The function or array of functions that is used to determine the validity of\n * this control synchronously.\n * @param asyncValidators The function or array of functions that is used to determine validity of\n * this control asynchronously.\n */\n constructor(validators, asyncValidators) {\n this._assignValidators(validators);\n this._assignAsyncValidators(asyncValidators);\n }\n /**\n * Returns the function that is used to determine the validity of this control synchronously.\n * If multiple validators have been added, this will be a single composed function.\n * See `Validators.compose()` for additional information.\n */\n get validator() {\n return this._composedValidatorFn;\n }\n set validator(validatorFn) {\n this._rawValidators = this._composedValidatorFn = validatorFn;\n }\n /**\n * Returns the function that is used to determine the validity of this control asynchronously.\n * If multiple validators have been added, this will be a single composed function.\n * See `Validators.compose()` for additional information.\n */\n get asyncValidator() {\n return this._composedAsyncValidatorFn;\n }\n set asyncValidator(asyncValidatorFn) {\n this._rawAsyncValidators = this._composedAsyncValidatorFn = asyncValidatorFn;\n }\n /**\n * The parent control.\n */\n get parent() {\n return this._parent;\n }\n /**\n * The validation status of the control.\n *\n * @see {@link FormControlStatus}\n *\n * These status values are mutually exclusive, so a control cannot be\n * both valid AND invalid or invalid AND disabled.\n */\n get status() {\n return untracked(this.statusReactive);\n }\n set status(v) {\n untracked(() => this.statusReactive.set(v));\n }\n /** @internal */\n _status = computed(() => this.statusReactive(), ...(ngDevMode ? [{\n debugName: \"_status\"\n }] : []));\n statusReactive = signal(undefined, ...(ngDevMode ? [{\n debugName: \"statusReactive\"\n }] : []));\n /**\n * A control is `valid` when its `status` is `VALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control has passed all of its validation tests,\n * false otherwise.\n */\n get valid() {\n return this.status === VALID;\n }\n /**\n * A control is `invalid` when its `status` is `INVALID`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control has failed one or more of its validation checks,\n * false otherwise.\n */\n get invalid() {\n return this.status === INVALID;\n }\n /**\n * A control is `pending` when its `status` is `PENDING`.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if this control is in the process of conducting a validation check,\n * false otherwise.\n */\n get pending() {\n return this.status == PENDING;\n }\n /**\n * A control is `disabled` when its `status` is `DISABLED`.\n *\n * Disabled controls are exempt from validation checks and\n * are not included in the aggregate value of their ancestor\n * controls.\n *\n * @see {@link AbstractControl.status}\n *\n * @returns True if the control is disabled, false otherwise.\n */\n get disabled() {\n return this.status === DISABLED;\n }\n /**\n * A control is `enabled` as long as its `status` is not `DISABLED`.\n *\n * @returns True if the control has any status other than 'DISABLED',\n * false if the status is 'DISABLED'.\n *\n * @see {@link AbstractControl.status}\n *\n */\n get enabled() {\n return this.status !== DISABLED;\n }\n /**\n * An object containing any errors generated by failing validation,\n * or null if there are no errors.\n */\n errors;\n /**\n * A control is `pristine` if the user has not yet changed\n * the value in the UI.\n *\n * @returns True if the user has not yet changed the value in the UI; compare `dirty`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n get pristine() {\n return untracked(this.pristineReactive);\n }\n set pristine(v) {\n untracked(() => this.pristineReactive.set(v));\n }\n /** @internal */\n _pristine = computed(() => this.pristineReactive(), ...(ngDevMode ? [{\n debugName: \"_pristine\"\n }] : []));\n pristineReactive = signal(true, ...(ngDevMode ? [{\n debugName: \"pristineReactive\"\n }] : []));\n /**\n * A control is `dirty` if the user has changed the value\n * in the UI.\n *\n * @returns True if the user has changed the value of this control in the UI; compare `pristine`.\n * Programmatic changes to a control's value do not mark it dirty.\n */\n get dirty() {\n return !this.pristine;\n }\n /**\n * True if the control is marked as `touched`.\n *\n * A control is marked `touched` once the user has triggered\n * a `blur` event on it.\n */\n get touched() {\n return untracked(this.touchedReactive);\n }\n set touched(v) {\n untracked(() => this.touchedReactive.set(v));\n }\n /** @internal */\n _touched = computed(() => this.touchedReactive(), ...(ngDevMode ? [{\n debugName: \"_touched\"\n }] : []));\n touchedReactive = signal(false, ...(ngDevMode ? [{\n debugName: \"touchedReactive\"\n }] : []));\n /**\n * True if the control has not been marked as touched\n *\n * A control is `untouched` if the user has not yet triggered\n * a `blur` event on it.\n */\n get untouched() {\n return !this.touched;\n }\n /**\n * Exposed as observable, see below.\n *\n * @internal\n */\n _events = new Subject();\n /**\n * A multicasting observable that emits an event every time the state of the control changes.\n * It emits for value, status, pristine or touched changes.\n *\n * **Note**: On value change, the emit happens right after a value of this control is updated. The\n * value of a parent control (for example if this FormControl is a part of a FormGroup) is updated\n * later, so accessing a value of a parent control (using the `value` property) from the callback\n * of this event might result in getting a value that has not been updated yet. Subscribe to the\n * `events` of the parent control instead.\n * For other event types, the events are emitted after the parent control has been updated.\n *\n */\n events = this._events.asObservable();\n /**\n * A multicasting observable that emits an event every time the value of the control changes, in\n * the UI or programmatically. It also emits an event each time you call enable() or disable()\n * without passing along {emitEvent: false} as a function argument.\n *\n * **Note**: the emit happens right after a value of this control is updated. The value of a\n * parent control (for example if this FormControl is a part of a FormGroup) is updated later, so\n * accessing a value of a parent control (using the `value` property) from the callback of this\n * event might result in getting a value that has not been updated yet. Subscribe to the\n * `valueChanges` event of the parent control instead.\n */\n valueChanges;\n /**\n * A multicasting observable that emits an event every time the validation `status` of the control\n * recalculates.\n *\n * @see {@link FormControlStatus}\n * @see {@link AbstractControl.status}\n */\n statusChanges;\n /**\n * Reports the update strategy of the `AbstractControl` (meaning\n * the event on which the control updates itself).\n * Possible values: `'change'` | `'blur'` | `'submit'`\n * Default value: `'change'`\n */\n get updateOn() {\n return this._updateOn ? this._updateOn : this.parent ? this.parent.updateOn : 'change';\n }\n /**\n * Sets the synchronous validators that are active on this control. Calling\n * this overwrites any existing synchronous validators.\n *\n * When you add or remove a validator at run time, you must call\n * `updateValueAndValidity()` for the new validation to take effect.\n *\n * If you want to add a new validator without affecting existing ones, consider\n * using `addValidators()` method instead.\n */\n setValidators(validators) {\n this._assignValidators(validators);\n }\n /**\n * Sets the asynchronous validators that are active on this control. Calling this\n * overwrites any existing asynchronous validators.\n *\n * When you add or remove a validator at run time, you must call\n * `updateValueAndValidity()` for the new validation to take effect.\n *\n * If you want to add a new validator without affecting existing ones, consider\n * using `addAsyncValidators()` method instead.\n */\n setAsyncValidators(validators) {\n this._assignAsyncValidators(validators);\n }\n /**\n * Add a synchronous validator or validators to this control, without affecting other validators.\n *\n * When you add or remove a validator at run time, you must call\n * `updateValueAndValidity()` for the new validation to take effect.\n *\n * Adding a validator that already exists will have no effect. If duplicate validator functions\n * are present in the `validators` array, only the first instance would be added to a form\n * control.\n *\n * @param validators The new validator function or functions to add to this control.\n */\n addValidators(validators) {\n this.setValidators(addValidators(validators, this._rawValidators));\n }\n /**\n * Add an asynchronous validator or validators to this control, without affecting other\n * validators.\n *\n * When you add or remove a validator at run time, you must call\n * `updateValueAndValidity()` for the new validation to take effect.\n *\n * Adding a validator that already exists will have no effect.\n *\n * @param validators The new asynchronous validator function or functions to add to this control.\n */\n addAsyncValidators(validators) {\n this.setAsyncValidators(addValidators(validators, this._rawAsyncValidators));\n }\n /**\n * Remove a synchronous validator from this control, without affecting other validators.\n * Validators are compared by function reference; you must pass a reference to the exact same\n * validator function as the one that was originally set. If a provided validator is not found,\n * it is ignored.\n *\n * @usageNotes\n *\n * ### Reference to a ValidatorFn\n *\n * ```\n * // Reference to the RequiredValidator\n * const ctrl = new FormControl<string | null>('', Validators.required);\n * ctrl.removeValidators(Validators.required);\n *\n * // Reference to anonymous function inside MinValidator\n * const minValidator = Validators.min(3);\n * const ctrl = new FormControl<string | null>('', minValidator);\n * expect(ctrl.hasValidator(minValidator)).toEqual(true)\n * expect(ctrl.hasValidator(Validators.min(3))).toEqual(false)\n *\n * ctrl.removeValidators(minValidator);\n * ```\n *\n * When you add or remove a validator at run time, you must call\n * `updateValueAndValidity()` for the new validation to take effect.\n *\n * @param validators The validator or validators to remove.\n */\n removeValidators(validators) {\n this.setValidators(removeValidators(validators, this._rawValidators));\n }\n /**\n * Remove an asynchronous validator from this control, without affecting other validators.\n * Validators are compared by function reference; you must pass a reference to the exact same\n * validator function as the one that was originally set. If a provided validator is not found, it\n * is ignored.\n *\n * When you add or remove a validator at run time, you must call\n * `updateValueAndValidity()` for the new validation to take effect.\n *\n * @param validators The asynchronous validator or validators to remove.\n */\n removeAsyncValidators(validators) {\n this.setAsyncValidators(removeValidators(validators, this._rawAsyncValidators));\n }\n /**\n * Check whether a synchronous validator function is present on this control. The provided\n * validator must be a reference to the exact same function that was provided.\n *\n * @usageNotes\n *\n * ### Reference to a ValidatorFn\n *\n * ```\n * // Reference to the RequiredValidator\n * const ctrl = new FormControl<number | null>(0, Validators.required);\n * expect(ctrl.hasValidator(Validators.required)).toEqual(true)\n *\n * // Reference to anonymous function inside MinValidator\n * const minValidator = Validators.min(3);\n * const ctrl = new FormControl<number | null>(0, minValidator);\n * expect(ctrl.hasValidator(minValidator)).toEqual(true)\n * expect(ctrl.hasValidator(Validators.min(3))).toEqual(false)\n * ```\n *\n * @param validator The validator to check for presence. Compared by function reference.\n * @returns Whether the provided validator was found on this control.\n */\n hasValidator(validator) {\n return hasValidator(this._rawValidators, validator);\n }\n /**\n * Check whether an asynchronous validator function is present on this control. The provided\n * validator must be a reference to the exact same function that was provided.\n *\n * @param validator The asynchronous validator to check for presence. Compared by function\n * reference.\n * @returns Whether the provided asynchronous validator was found on this control.\n */\n hasAsyncValidator(validator) {\n return hasValidator(this._rawAsyncValidators, validator);\n }\n /**\n * Empties out the synchronous validator list.\n *\n * When you add or remove a validator at run time, you must call\n * `updateValueAndValidity()` for the new validation to take effect.\n *\n */\n clearValidators() {\n this.validator = null;\n }\n /**\n * Empties out the async validator list.\n *\n * When you add or remove a validator at run time, you must call\n * `updateValueAndValidity()` for the new validation to take effect.\n *\n */\n clearAsyncValidators() {\n this.asyncValidator = null;\n }\n markAsTouched(opts = {}) {\n const changed = this.touched === false;\n this.touched = true;\n const sourceControl = opts.sourceControl ?? this;\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsTouched({\n ...opts,\n sourceControl\n });\n }\n if (changed && opts.emitEvent !== false) {\n this._events.next(new TouchedChangeEvent(true, sourceControl));\n }\n }\n /**\n * Marks the control and all its descendant controls as `dirty`.\n * @see {@link markAsDirty()}\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after marking is applied.\n * * `emitEvent`: When true or not supplied (the default), the `events`\n * observable emits a `PristineChangeEvent` with the `pristine` property being `false`.\n * When false, no events are emitted.\n */\n markAllAsDirty(opts = {}) {\n this.markAsDirty({\n onlySelf: true,\n emitEvent: opts.emitEvent,\n sourceControl: this\n });\n this._forEachChild(control => control.markAllAsDirty(opts));\n }\n /**\n * Marks the control and all its descendant controls as `touched`.\n * @see {@link markAsTouched()}\n *\n * @param opts Configuration options that determine how the control propagates changes\n * and emits events after marking is applied.\n * * `emitEvent`: When true or not supplied (the default), the `events`\n * observable emits a `TouchedChangeEvent` with the `touched` property being `true`.\n * When false, no events are emitted.\n */\n markAllAsTouched(opts = {}) {\n this.markAsTouched({\n onlySelf: true,\n emitEvent: opts.emitEvent,\n sourceControl: this\n });\n this._forEachChild(control => control.markAllAsTouched(opts));\n }\n markAsUntouched(opts = {}) {\n const changed = this.touched === true;\n this.touched = false;\n this._pendingTouched = false;\n const sourceControl = opts.sourceControl ?? this;\n this._forEachChild(control => {\n control.markAsUntouched({\n onlySelf: true,\n emitEvent: opts.emitEvent,\n sourceControl\n });\n });\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts, sourceControl);\n }\n if (changed && opts.emitEvent !== false) {\n this._events.next(new TouchedChangeEvent(false, sourceControl));\n }\n }\n markAsDirty(opts = {}) {\n const changed = this.pristine === true;\n this.pristine = false;\n const sourceControl = opts.sourceControl ?? this;\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsDirty({\n ...opts,\n sourceControl\n });\n }\n if (changed && opts.emitEvent !== false) {\n this._events.next(new PristineChangeEvent(false, sourceControl));\n }\n }\n markAsPristine(opts = {}) {\n const changed = this.pristine === false;\n this.pristine = true;\n this._pendingDirty = false;\n const sourceControl = opts.sourceControl ?? this;\n this._forEachChild(control => {\n /** We don't propagate the source control downwards */\n control.markAsPristine({\n onlySelf: true,\n emitEvent: opts.emitEvent\n });\n });\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts, sourceControl);\n }\n if (changed && opts.emitEvent !== false) {\n this._events.next(new PristineChangeEvent(true, sourceControl));\n }\n }\n markAsPending(opts = {}) {\n this.status = PENDING;\n const sourceControl = opts.sourceControl ?? this;\n if (opts.emitEvent !== false) {\n this._events.next(new StatusChangeEvent(this.status, sourceControl));\n this.statusChanges.emit(this.status);\n }\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsPending({\n ...opts,\n sourceControl\n });\n }\n }\n disable(opts = {}) {\n // If parent has been marked artificially dirty we don't want to re-calculate the\n // parent's dirtiness based on the children.\n const skipPristineCheck = this._parentMarkedDirty(opts.onlySelf);\n this.status = DISABLED;\n this.errors = null;\n this._forEachChild(control => {\n /** We don't propagate the source control downwards */\n control.disable({\n ...opts,\n onlySelf: true\n });\n });\n this._updateValue();\n const sourceControl = opts.sourceControl ?? this;\n if (opts.emitEvent !== false) {\n this._events.next(new ValueChangeEvent(this.value, sourceControl));\n this._events.next(new StatusChangeEvent(this.status, sourceControl));\n this.valueChanges.emit(this.value);\n this.statusChanges.emit(this.status);\n }\n this._updateAncestors({\n ...opts,\n skipPristineCheck\n }, this);\n this._onDisabledChange.forEach(changeFn => changeFn(true));\n }\n /**\n * Enables the control. This means the control is included in validation checks and\n * the aggregate value of its parent. Its status recalculates based on its value and\n * its validators.\n *\n * By default, if the control has children, all children are enabled.\n *\n * @see {@link AbstractControl.status}\n *\n * @param opts Configure options that control how the control propagates changes and\n * emits events when marked as untouched\n * * `onlySelf`: When true, mark only this control. When false or not supplied,\n * marks all direct ancestors. Default is false.\n * * `emitEvent`: When true or not supplied (the default), the `statusChanges`,\n * `valueChanges` and `events`\n * observables emit events with the latest status and value when the control is enabled.\n * When false, no events are emitted.\n */\n enable(opts = {}) {\n // If parent has been marked artificially dirty we don't want to re-calculate the\n // parent's dirtiness based on the children.\n const skipPristineCheck = this._parentMarkedDirty(opts.onlySelf);\n this.status = VALID;\n this._forEachChild(control => {\n control.enable({\n ...opts,\n onlySelf: true\n });\n });\n this.updateValueAndValidity({\n onlySelf: true,\n emitEvent: opts.emitEvent\n });\n this._updateAncestors({\n ...opts,\n skipPristineCheck\n }, this);\n this._onDisabledChange.forEach(changeFn => changeFn(false));\n }\n _updateAncestors(opts, sourceControl) {\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n if (!opts.skipPristineCheck) {\n this._parent._updatePristine({}, sourceControl);\n }\n this._parent._updateTouched({}, sourceControl);\n }\n }\n /**\n * Sets the parent of the control\n *\n * @param parent The new parent.\n */\n setParent(parent) {\n this._parent = parent;\n }\n /**\n * The raw value of this control. For most control implementations, the raw value will include\n * disabled children.\n */\n getRawValue() {\n return this.value;\n }\n updateValueAndValidity(opts = {}) {\n this._setInitialStatus();\n this._updateValue();\n if (this.enabled) {\n const shouldHaveEmitted = this._cancelExistingSubscription();\n this.errors = this._runValidator();\n this.status = this._calculateStatus();\n if (this.status === VALID || this.status === PENDING) {\n // If the canceled subscription should have emitted\n // we make sure the async validator emits the status change on completion\n this._runAsyncValidator(shouldHaveEmitted, opts.emitEvent);\n }\n }\n const sourceControl = opts.sourceControl ?? this;\n if (opts.emitEvent !== false) {\n this._events.next(new ValueChangeEvent(this.value, sourceControl));\n this._events.next(new StatusChangeEvent(this.status, sourceControl));\n this.valueChanges.emit(this.value);\n this.statusChanges.emit(this.status);\n }\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity({\n ...opts,\n sourceControl\n });\n }\n }\n /** @internal */\n _updateTreeValidity(opts = {\n emitEvent: true\n }) {\n this._forEachChild(ctrl => ctrl._updateTreeValidity(opts));\n this.updateValueAndValidity({\n onlySelf: true,\n emitEvent: opts.emitEvent\n });\n }\n _setInitialStatus() {\n this.status = this._allControlsDisabled() ? DISABLED : VALID;\n }\n _runValidator() {\n return this.validator ? this.validator(this) : null;\n }\n _runAsyncValidator(shouldHaveEmitted, emitEvent) {\n if (this.asyncValidator) {\n this.status = PENDING;\n this._hasOwnPendingAsyncValidator = {\n emitEvent: emitEvent !== false,\n shouldHaveEmitted: shouldHaveEmitted !== false\n };\n const obs = toObservable(this.asyncValidator(this));\n this._asyncValidationSubscription = obs.subscribe(errors => {\n this._hasOwnPendingAsyncValidator = null;\n // This will trigger the recalculation of the validation status, which depends on\n // the state of the asynchronous validation (whether it is in progress or not). So, it is\n // necessary that we have updated the `_hasOwnPendingAsyncValidator` boolean flag first.\n this.setErrors(errors, {\n emitEvent,\n shouldHaveEmitted\n });\n });\n }\n }\n _cancelExistingSubscription() {\n if (this._asyncValidationSubscription) {\n this._asyncValidationSubscription.unsubscribe();\n // we're cancelling the validator subscribtion, we keep if it should have emitted\n // because we want to emit eventually if it was required at least once.\n const shouldHaveEmitted = (this._hasOwnPendingAsyncValidator?.emitEvent || this._hasOwnPendingAsyncValidator?.shouldHaveEmitted) ?? false;\n this._hasOwnPendingAsyncValidator = null;\n return shouldHaveEmitted;\n }\n return false;\n }\n setErrors(errors, opts = {}) {\n this.errors = errors;\n this._updateControlsErrors(opts.emitEvent !== false, this, opts.shouldHaveEmitted);\n }\n /**\n * Retrieves a child control given the control's name or path.\n *\n * @param path A dot-delimited string or array of string/number values that define the path to the\n * control. If a string is provided, passing it as a string literal will result in improved type\n * information. Likewise, if an array is provided, passing it `as const` will cause improved type\n * information to be available.\n *\n * @usageNotes\n * ### Retrieve a nested control\n *\n * For example, to get a `name` control nested within a `person` sub-group:\n *\n * * `this.form.get('person.name');`\n *\n * -OR-\n *\n * * `this.form.get(['person', 'name'] as const);` // `as const` gives improved typings\n *\n * ### Retrieve a control in a FormArray\n *\n * When accessing an element inside a FormArray, you can use an element index.\n * For example, to get a `price` control from the first element in an `items` array you can use:\n *\n * * `this.form.get('items.0.price');`\n *\n * -OR-\n *\n * * `this.form.get(['items', 0, 'price']);`\n */\n get(path) {\n let currPath = path;\n if (currPath == null) return null;\n if (!Array.isArray(currPath)) currPath = currPath.split('.');\n if (currPath.length === 0) return null;\n return currPath.reduce((control, name) => control && control._find(name), this);\n }\n /**\n * @description\n * Reports error data for the control with the given path.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```ts\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * @returns error data for that particular error. If the control or error is not present,\n * null is returned.\n */\n getError(errorCode, path) {\n const control = path ? this.get(path) : this;\n return control && control.errors ? control.errors[errorCode] : null;\n }\n /**\n * @description\n * Reports whether the control with the given path has the error specified.\n *\n * @param errorCode The code of the error to check\n * @param path A list of control names that designates how to move from the current control\n * to the control that should be queried for errors.\n *\n * @usageNotes\n * For example, for the following `FormGroup`:\n *\n * ```ts\n * form = new FormGroup({\n * address: new FormGroup({ street: new FormControl() })\n * });\n * ```\n *\n * The path to the 'street' control from the root form would be 'address' -> 'street'.\n *\n * It can be provided to this method in one of two formats:\n *\n * 1. An array of string control names, e.g. `['address', 'street']`\n * 1. A period-delimited list of control names in one string, e.g. `'address.street'`\n *\n * If no path is given, this method checks for the error on the current control.\n *\n * @returns whether the given error is present in the control at the given path.\n *\n * If the control is not present, false is returned.\n */\n hasError(errorCode, path) {\n return !!this.getError(errorCode, path);\n }\n /**\n * Retrieves the top-level ancestor of this control.\n */\n get root() {\n let x = this;\n while (x._parent) {\n x = x._parent;\n }\n return x;\n }\n /** @internal */\n _updateControlsErrors(emitEvent, changedControl, shouldHaveEmitted) {\n this.status = this._calculateStatus();\n if (emitEvent) {\n this.statusChanges.emit(this.status);\n }\n // The Events Observable expose a slight different bevahior than the statusChanges obs\n // An async validator will still emit a StatusChangeEvent is a previously cancelled\n // async validator has emitEvent set to true\n if (emitEvent || shouldHaveEmitted) {\n this._events.next(new StatusChangeEvent(this.status, changedControl));\n }\n if (this._parent) {\n this._parent._updateControlsErrors(emitEvent, changedControl, shouldHaveEmitted);\n }\n }\n /** @internal */\n _initObservables() {\n // TODO: this should be piped from events() but is breaking in G3\n this.valueChanges = new EventEmitter();\n this.statusChanges = new EventEmitter();\n }\n _calculateStatus() {\n if (this._allControlsDisabled()) return DISABLED;\n if (this.errors) return INVALID;\n if (this._hasOwnPendingAsyncValidator || this._anyControlsHaveStatus(PENDING)) return PENDING;\n if (this._anyControlsHaveStatus(INVALID)) return INVALID;\n return VALID;\n }\n /** @internal */\n _anyControlsHaveStatus(status) {\n return this._anyControls(control => control.status === status);\n }\n /** @internal */\n _anyControlsDirty() {\n return this._anyControls(control => control.dirty);\n }\n /** @internal */\n _anyControlsTouched() {\n return this._anyControls(control => control.touched);\n }\n /** @internal */\n _updatePristine(opts, changedControl) {\n const newPristine = !this._anyControlsDirty();\n const changed = this.pristine !== newPristine;\n this.pristine = newPristine;\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts, changedControl);\n }\n if (changed) {\n this._events.next(new PristineChangeEvent(this.pristine, changedControl));\n }\n }\n /** @internal */\n _updateTouched(opts = {}, changedControl) {\n this.touched = this._anyControlsTouched();\n this._events.next(new TouchedChangeEvent(this.touched, changedControl));\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts, changedControl);\n }\n }\n /** @internal */\n _onDisabledChange = [];\n /** @internal */\n _registerOnCollectionChange(fn) {\n this._onCollectionChange = fn;\n }\n /** @internal */\n _setUpdateStrategy(opts) {\n if (isOptionsObj(opts) && opts.updateOn != null) {\n this._updateOn = opts.updateOn;\n }\n }\n /**\n * Check to see if parent has been marked artificially dirty.\n *\n * @internal\n */\n _parentMarkedDirty(onlySelf) {\n const parentDirty = this._parent && this._parent.dirty;\n return !onlySelf && !!parentDirty && !this._parent._anyControlsDirty();\n }\n /** @internal */\n _find(name) {\n return null;\n }\n /**\n * Internal implementation of the `setValidators` method. Needs to be separated out into a\n * different method, because it is called in the constructor and it can break cases where\n * a control is extended.\n */\n _assignValidators(validators) {\n this._rawValidators = Array.isArray(validators) ? validators.slice() : validators;\n this._composedValidatorFn = coerceToValidator(this._rawValidators);\n }\n /**\n * Internal implementation of the `setAsyncValidators` method. Needs to be separated out into a\n * different method, because it is called in the constructor and it can break cases where\n * a control is extended.\n */\n _assignAsyncValidators(validators) {\n this._rawAsyncValidators = Array.isArray(validators) ? validators.slice() : validators;\n this._composedAsyncValidatorFn = coerceToAsyncValidator(this._rawAsyncValidators);\n }\n}\n\n/**\n * Tracks the value and validity state of a group of `FormControl` instances.\n *\n * A `FormGroup` aggregates the values of each child `FormControl` into one object,\n * with each control name as the key. It calculates its status by reducing the status values\n * of its children. For example, if one of the controls in a group is invalid, the entire\n * group becomes invalid.\n *\n * `FormGroup` is one of the four fundamental building blocks used to define forms in Angular,\n * along with `FormControl`, `FormArray`, and `FormRecord`.\n *\n * When instantiating a `FormGroup`, pass in a collection of child controls as the first\n * argument. The key for each child registers the name for the control.\n *\n * `FormGroup` is intended for use cases where the keys are known ahead of time.\n * If you need to dynamically add and remove controls, use {@link FormRecord} instead.\n *\n * `FormGroup` accepts an optional type parameter `TControl`, which is an object type with inner\n * control types as values.\n *\n * @usageNotes\n *\n * ### Create a form group with 2 controls\n *\n * ```ts\n * const form = new FormGroup({\n * first: new FormControl('Nancy', Validators.minLength(2)),\n * last: new FormControl('Drew'),\n * });\n *\n * console.log(form.value); // {first: 'Nancy', last; 'Drew'}\n * console.log(form.status); // 'VALID'\n * ```\n *\n * ### The type argument, and optional controls\n *\n * `FormGroup` accepts one generic argument, which is an object containing its inner controls.\n * This type will usually be inferred automatically, but you can always specify it explicitly if you\n * wish.\n *\n * If you have controls that are optional (i.e. they can be removed, you can use the `?` in the\n * type):\n *\n * ```ts\n * const form = new FormGroup<{\n * first: FormControl<string|null>,\n * middle?: FormControl<string|null>, // Middle name is optional.\n * last: FormControl<string|null>,\n * }>({\n * first: new FormControl('Nancy'),\n * last: new FormControl('Drew'),\n * });\n * ```\n *\n * ### Create a form group with a group-level validator\n *\n * You include group-level validators as the second arg, or group-level async\n * validators as the third arg. These come in handy when you want to perform validation\n * that considers the value of more than one child control.\n *\n * ```ts\n * const form = new FormGroup({\n * password: new FormControl('', Validators.minLength(2)),\n * passwordConfirm: new FormControl('', Validators.minLength(2)),\n * }, passwordMatchValidator);\n *\n *\n * function passwordMatchValidator(g: FormGroup) {\n * return g.get('password').value === g.get('passwordConfirm').value\n * ? null : {'mismatch': true};\n * }\n * ```\n *\n * Like `FormControl` instances, you choose to pass in\n * validators and async validators as part of an options object.\n *\n * ```ts\n * const form = new FormGroup({\n * password: new FormControl('')\n * passwordConfirm: new FormControl('')\n * }, { validators: passwordMatchValidator, asyncValidators: otherValidator });\n * ```\n *\n * ### Set the updateOn property for all controls in a form group\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * group level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const c = new FormGroup({\n * one: new FormControl()\n * }, { updateOn: 'blur' });\n * ```\n *\n * ### Using a FormGroup with optional controls\n *\n * It is possible to have optional controls in a FormGroup. An optional control can be removed later\n * using `removeControl`, and can be omitted when calling `reset`. Optional controls must be\n * declared optional in the group's type.\n *\n * ```ts\n * const c = new FormGroup<{one?: FormControl<string>}>({\n * one: new FormControl('')\n * });\n * ```\n *\n * Notice that `c.value.one` has type `string|null|undefined`. This is because calling `c.reset({})`\n * without providing the optional key `one` will cause it to become `null`.\n *\n * @publicApi\n */\nclass FormGroup extends AbstractControl {\n /**\n * Creates a new `FormGroup` instance.\n *\n * @param controls A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(controls, validatorOrOpts, asyncValidator) {\n super(pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts));\n (typeof ngDevMode === 'undefined' || ngDevMode) && validateFormGroupControls(controls);\n this.controls = controls;\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({\n onlySelf: true,\n // If `asyncValidator` is present, it will trigger control status change from `PENDING` to\n // `VALID` or `INVALID`. The status should be broadcasted via the `statusChanges` observable,\n // so we set `emitEvent` to `true` to allow that during the control creation process.\n emitEvent: !!this.asyncValidator\n });\n }\n controls;\n registerControl(name, control) {\n if (this.controls[name]) return this.controls[name];\n this.controls[name] = control;\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n return control;\n }\n addControl(name, control, options = {}) {\n this.registerControl(name, control);\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n this._onCollectionChange();\n }\n /**\n * Remove a control from this group. In a strongly-typed group, required controls cannot be\n * removed.\n *\n * This method also updates the value and validity of the control.\n *\n * @param name The control name to remove from the collection\n * @param options Specifies whether this FormGroup instance should emit events after a\n * control is removed.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges` observables emit events with the latest status and value when the control is\n * removed. When false, no events are emitted.\n */\n removeControl(name, options = {}) {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete this.controls[name];\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n this._onCollectionChange();\n }\n setControl(name, control, options = {}) {\n if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => {});\n delete this.controls[name];\n if (control) this.registerControl(name, control);\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n this._onCollectionChange();\n }\n contains(controlName) {\n return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;\n }\n /**\n * Sets the value of the `FormGroup`. It accepts an object that matches\n * the structure of the group, with control names as keys.\n *\n * @usageNotes\n * ### Set the complete value for the form group\n *\n * ```ts\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n *\n * console.log(form.value); // {first: null, last: null}\n *\n * form.setValue({first: 'Nancy', last: 'Drew'});\n * console.log(form.value); // {first: 'Nancy', last: 'Drew'}\n * ```\n *\n * @throws When strict checks fail, such as setting the value of a control\n * that doesn't exist or if you exclude a value of a control that does exist.\n *\n * @param value The new value for the control that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes\n * and emits events after the value changes.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n */\n setValue(value, options = {}) {\n assertAllValuesPresent(this, true, value);\n Object.keys(value).forEach(name => {\n assertControlPresent(this, true, name);\n this.controls[name].setValue(value[name], {\n onlySelf: true,\n emitEvent: options.emitEvent\n });\n });\n this.updateValueAndValidity(options);\n }\n /**\n * Patches the value of the `FormGroup`. It accepts an object with control\n * names as keys, and does its best to match the values to the correct controls\n * in the group.\n *\n * It accepts both super-sets and sub-sets of the group without throwing an error.\n *\n * @usageNotes\n * ### Patch the value for a form group\n *\n * ```ts\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n * console.log(form.value); // {first: null, last: null}\n *\n * form.patchValue({first: 'Nancy'});\n * console.log(form.value); // {first: 'Nancy', last: null}\n * ```\n *\n * @param value The object that matches the structure of the group.\n * @param options Configuration options that determine how the control propagates changes and\n * emits events after the value is patched.\n * * `onlySelf`: When true, each change only affects this control and not its parent. Default is\n * true.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges` observables emit events with the latest status and value when the control value\n * is updated. When false, no events are emitted. The configuration options are passed to\n * the {@link AbstractControl#updateValueAndValidity updateValueAndValidity} method.\n */\n patchValue(value, options = {}) {\n // Even though the `value` argument type doesn't allow `null` and `undefined` values, the\n // `patchValue` can be called recursively and inner data structures might have these values, so\n // we just ignore such cases when a field containing FormGroup instance receives `null` or\n // `undefined` as a value.\n if (value == null /* both `null` and `undefined` */) return;\n Object.keys(value).forEach(name => {\n // The compiler cannot see through the uninstantiated conditional type of `this.controls`, so\n // `as any` is required.\n const control = this.controls[name];\n if (control) {\n control.patchValue(/* Guaranteed to be present, due to the outer forEach. */value[name], {\n onlySelf: true,\n emitEvent: options.emitEvent\n });\n }\n });\n this.updateValueAndValidity(options);\n }\n /**\n * Resets the `FormGroup`, marks all descendants `pristine` and `untouched` and sets\n * the value of all descendants to their default values, or null if no defaults were provided.\n *\n * You reset to a specific form state by passing in a map of states\n * that matches the structure of your form, with control names as keys. The state\n * is a standalone value or a form state object with both a value and a disabled\n * status.\n *\n * @param value Resets the control with an initial value,\n * or an object that defines the initial value and disabled state.\n *\n * @param options Configuration options that determine how the control propagates changes\n * and emits events when the group is reset.\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is\n * false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n *\n * @usageNotes\n *\n * ### Reset the form group values\n *\n * ```ts\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * console.log(form.value); // {first: 'first name', last: 'last name'}\n *\n * form.reset({ first: 'name', last: 'last name' });\n *\n * console.log(form.value); // {first: 'name', last: 'last name'}\n * ```\n *\n * ### Reset the form group values and disabled status\n *\n * ```ts\n * const form = new FormGroup({\n * first: new FormControl('first name'),\n * last: new FormControl('last name')\n * });\n *\n * form.reset({\n * first: {value: 'name', disabled: true},\n * last: 'last'\n * });\n *\n * console.log(form.value); // {last: 'last'}\n * console.log(form.get('first').status); // 'DISABLED'\n * ```\n */\n reset(value = {}, options = {}) {\n this._forEachChild((control, name) => {\n control.reset(value ? value[name] : null, {\n onlySelf: true,\n emitEvent: options.emitEvent\n });\n });\n this._updatePristine(options, this);\n this._updateTouched(options, this);\n this.updateValueAndValidity(options);\n }\n /**\n * The aggregate value of the `FormGroup`, including any disabled controls.\n *\n * Retrieves all values regardless of disabled status.\n */\n getRawValue() {\n return this._reduceChildren({}, (acc, control, name) => {\n acc[name] = control.getRawValue();\n return acc;\n });\n }\n /** @internal */\n _syncPendingControls() {\n let subtreeUpdated = this._reduceChildren(false, (updated, child) => {\n return child._syncPendingControls() ? true : updated;\n });\n if (subtreeUpdated) this.updateValueAndValidity({\n onlySelf: true\n });\n return subtreeUpdated;\n }\n /** @internal */\n _forEachChild(cb) {\n Object.keys(this.controls).forEach(key => {\n // The list of controls can change (for ex. controls might be removed) while the loop\n // is running (as a result of invoking Forms API in `valueChanges` subscription), so we\n // have to null check before invoking the callback.\n const control = this.controls[key];\n control && cb(control, key);\n });\n }\n /** @internal */\n _setUpControls() {\n this._forEachChild(control => {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n });\n }\n /** @internal */\n _updateValue() {\n this.value = this._reduceValue();\n }\n /** @internal */\n _anyControls(condition) {\n for (const [controlName, control] of Object.entries(this.controls)) {\n if (this.contains(controlName) && condition(control)) {\n return true;\n }\n }\n return false;\n }\n /** @internal */\n _reduceValue() {\n let acc = {};\n return this._reduceChildren(acc, (acc, control, name) => {\n if (control.enabled || this.disabled) {\n acc[name] = control.value;\n }\n return acc;\n });\n }\n /** @internal */\n _reduceChildren(initValue, fn) {\n let res = initValue;\n this._forEachChild((control, name) => {\n res = fn(res, control, name);\n });\n return res;\n }\n /** @internal */\n _allControlsDisabled() {\n for (const controlName of Object.keys(this.controls)) {\n if (this.controls[controlName].enabled) {\n return false;\n }\n }\n return Object.keys(this.controls).length > 0 || this.disabled;\n }\n /** @internal */\n _find(name) {\n return this.controls.hasOwnProperty(name) ? this.controls[name] : null;\n }\n}\n/**\n * Will validate that none of the controls has a key with a dot\n * Throws other wise\n */\nfunction validateFormGroupControls(controls) {\n const invalidKeys = Object.keys(controls).filter(key => key.includes('.'));\n if (invalidKeys.length > 0) {\n // TODO: make this an error once there are no more uses in G3\n console.warn(`FormGroup keys cannot include \\`.\\`, please replace the keys for: ${invalidKeys.join(',')}.`);\n }\n}\nconst UntypedFormGroup = FormGroup;\n/**\n * @description\n * Asserts that the given control is an instance of `FormGroup`\n *\n * @publicApi\n */\nconst isFormGroup = control => control instanceof FormGroup;\n/**\n * Tracks the value and validity state of a collection of `FormControl` instances, each of which has\n * the same value type.\n *\n * `FormRecord` is very similar to {@link FormGroup}, except it can be used with a dynamic keys,\n * with controls added and removed as needed.\n *\n * `FormRecord` accepts one generic argument, which describes the type of the controls it contains.\n *\n * @usageNotes\n *\n * ```ts\n * let numbers = new FormRecord({bill: new FormControl('415-123-456')});\n * numbers.addControl('bob', new FormControl('415-234-567'));\n * numbers.removeControl('bill');\n * ```\n *\n * @publicApi\n */\nclass FormRecord extends FormGroup {}\n/**\n * @description\n * Asserts that the given control is an instance of `FormRecord`\n *\n * @publicApi\n */\nconst isFormRecord = control => control instanceof FormRecord;\n\n/**\n * Token to provide to allow SetDisabledState to always be called when a CVA is added, regardless of\n * whether the control is disabled or enabled.\n *\n * @see {@link FormsModule#withconfig}\n */\nconst CALL_SET_DISABLED_STATE = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'CallSetDisabledState' : '', {\n providedIn: 'root',\n factory: () => setDisabledStateDefault\n});\n/**\n * Whether to use the fixed setDisabledState behavior by default.\n */\nconst setDisabledStateDefault = 'always';\nfunction controlPath(name, parent) {\n return [...parent.path, name];\n}\n/**\n * Links a Form control and a Form directive by setting up callbacks (such as `onChange`) on both\n * instances. This function is typically invoked when form directive is being initialized.\n *\n * @param control Form control instance that should be linked.\n * @param dir Directive that should be linked with a given control.\n */\nfunction setUpControl(control, dir, callSetDisabledState = setDisabledStateDefault) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!control) _throwError(dir, 'Cannot find control with');\n if (!dir.valueAccessor) _throwMissingValueAccessorError(dir);\n }\n setUpValidators(control, dir);\n dir.valueAccessor.writeValue(control.value);\n // The legacy behavior only calls the CVA's `setDisabledState` if the control is disabled.\n // If the `callSetDisabledState` option is set to `always`, then this bug is fixed and\n // the method is always called.\n if (control.disabled || callSetDisabledState === 'always') {\n dir.valueAccessor.setDisabledState?.(control.disabled);\n }\n setUpViewChangePipeline(control, dir);\n setUpModelChangePipeline(control, dir);\n setUpBlurPipeline(control, dir);\n setUpDisabledChangeHandler(control, dir);\n}\n/**\n * Reverts configuration performed by the `setUpControl` control function.\n * Effectively disconnects form control with a given form directive.\n * This function is typically invoked when corresponding form directive is being destroyed.\n *\n * @param control Form control which should be cleaned up.\n * @param dir Directive that should be disconnected from a given control.\n * @param validateControlPresenceOnChange Flag that indicates whether onChange handler should\n * contain asserts to verify that it's not called once directive is destroyed. We need this flag\n * to avoid potentially breaking changes caused by better control cleanup introduced in #39235.\n */\nfunction cleanUpControl(control, dir, validateControlPresenceOnChange = true) {\n const noop = () => {\n if (validateControlPresenceOnChange && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n _noControlError(dir);\n }\n };\n // The `valueAccessor` field is typically defined on FromControl and FormControlName directive\n // instances and there is a logic in `selectValueAccessor` function that throws if it's not the\n // case. We still check the presence of `valueAccessor` before invoking its methods to make sure\n // that cleanup works correctly if app code or tests are setup to ignore the error thrown from\n // `selectValueAccessor`. See https://github.com/angular/angular/issues/40521.\n if (dir.valueAccessor) {\n dir.valueAccessor.registerOnChange(noop);\n dir.valueAccessor.registerOnTouched(noop);\n }\n cleanUpValidators(control, dir);\n if (control) {\n dir._invokeOnDestroyCallbacks();\n control._registerOnCollectionChange(() => {});\n }\n}\nfunction registerOnValidatorChange(validators, onChange) {\n validators.forEach(validator => {\n if (validator.registerOnValidatorChange) validator.registerOnValidatorChange(onChange);\n });\n}\n/**\n * Sets up disabled change handler function on a given form control if ControlValueAccessor\n * associated with a given directive instance supports the `setDisabledState` call.\n *\n * @param control Form control where disabled change handler should be setup.\n * @param dir Corresponding directive instance associated with this control.\n */\nfunction setUpDisabledChangeHandler(control, dir) {\n if (dir.valueAccessor.setDisabledState) {\n const onDisabledChange = isDisabled => {\n dir.valueAccessor.setDisabledState(isDisabled);\n };\n control.registerOnDisabledChange(onDisabledChange);\n // Register a callback function to cleanup disabled change handler\n // from a control instance when a directive is destroyed.\n dir._registerOnDestroy(() => {\n control._unregisterOnDisabledChange(onDisabledChange);\n });\n }\n}\n/**\n * Sets up sync and async directive validators on provided form control.\n * This function merges validators from the directive into the validators of the control.\n *\n * @param control Form control where directive validators should be setup.\n * @param dir Directive instance that contains validators to be setup.\n */\nfunction setUpValidators(control, dir) {\n const validators = getControlValidators(control);\n if (dir.validator !== null) {\n control.setValidators(mergeValidators(validators, dir.validator));\n } else if (typeof validators === 'function') {\n // If sync validators are represented by a single validator function, we force the\n // `Validators.compose` call to happen by executing the `setValidators` function with\n // an array that contains that function. We need this to avoid possible discrepancies in\n // validators behavior, so sync validators are always processed by the `Validators.compose`.\n // Note: we should consider moving this logic inside the `setValidators` function itself, so we\n // have consistent behavior on AbstractControl API level. The same applies to the async\n // validators logic below.\n control.setValidators([validators]);\n }\n const asyncValidators = getControlAsyncValidators(control);\n if (dir.asyncValidator !== null) {\n control.setAsyncValidators(mergeValidators(asyncValidators, dir.asyncValidator));\n } else if (typeof asyncValidators === 'function') {\n control.setAsyncValidators([asyncValidators]);\n }\n // Re-run validation when validator binding changes, e.g. minlength=3 -> minlength=4\n const onValidatorChange = () => control.updateValueAndValidity();\n registerOnValidatorChange(dir._rawValidators, onValidatorChange);\n registerOnValidatorChange(dir._rawAsyncValidators, onValidatorChange);\n}\n/**\n * Cleans up sync and async directive validators on provided form control.\n * This function reverts the setup performed by the `setUpValidators` function, i.e.\n * removes directive-specific validators from a given control instance.\n *\n * @param control Form control from where directive validators should be removed.\n * @param dir Directive instance that contains validators to be removed.\n * @returns true if a control was updated as a result of this action.\n */\nfunction cleanUpValidators(control, dir) {\n let isControlUpdated = false;\n if (control !== null) {\n if (dir.validator !== null) {\n const validators = getControlValidators(control);\n if (Array.isArray(validators) && validators.length > 0) {\n // Filter out directive validator function.\n const updatedValidators = validators.filter(validator => validator !== dir.validator);\n if (updatedValidators.length !== validators.length) {\n isControlUpdated = true;\n control.setValidators(updatedValidators);\n }\n }\n }\n if (dir.asyncValidator !== null) {\n const asyncValidators = getControlAsyncValidators(control);\n if (Array.isArray(asyncValidators) && asyncValidators.length > 0) {\n // Filter out directive async validator function.\n const updatedAsyncValidators = asyncValidators.filter(asyncValidator => asyncValidator !== dir.asyncValidator);\n if (updatedAsyncValidators.length !== asyncValidators.length) {\n isControlUpdated = true;\n control.setAsyncValidators(updatedAsyncValidators);\n }\n }\n }\n }\n // Clear onValidatorChange callbacks by providing a noop function.\n const noop = () => {};\n registerOnValidatorChange(dir._rawValidators, noop);\n registerOnValidatorChange(dir._rawAsyncValidators, noop);\n return isControlUpdated;\n}\nfunction setUpViewChangePipeline(control, dir) {\n dir.valueAccessor.registerOnChange(newValue => {\n control._pendingValue = newValue;\n control._pendingChange = true;\n control._pendingDirty = true;\n if (control.updateOn === 'change') updateControl(control, dir);\n });\n}\nfunction setUpBlurPipeline(control, dir) {\n dir.valueAccessor.registerOnTouched(() => {\n control._pendingTouched = true;\n if (control.updateOn === 'blur' && control._pendingChange) updateControl(control, dir);\n if (control.updateOn !== 'submit') control.markAsTouched();\n });\n}\nfunction updateControl(control, dir) {\n if (control._pendingDirty) control.markAsDirty();\n control.setValue(control._pendingValue, {\n emitModelToViewChange: false\n });\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n}\nfunction setUpModelChangePipeline(control, dir) {\n const onChange = (newValue, emitModelEvent) => {\n // control -> view\n dir.valueAccessor.writeValue(newValue);\n // control -> ngModel\n if (emitModelEvent) dir.viewToModelUpdate(newValue);\n };\n control.registerOnChange(onChange);\n // Register a callback function to cleanup onChange handler\n // from a control instance when a directive is destroyed.\n dir._registerOnDestroy(() => {\n control._unregisterOnChange(onChange);\n });\n}\n/**\n * Links a FormGroup or FormArray instance and corresponding Form directive by setting up validators\n * present in the view.\n *\n * @param control FormGroup or FormArray instance that should be linked.\n * @param dir Directive that provides view validators.\n */\nfunction setUpFormContainer(control, dir) {\n if (control == null && (typeof ngDevMode === 'undefined' || ngDevMode)) _throwError(dir, 'Cannot find control with');\n setUpValidators(control, dir);\n}\n/**\n * Reverts the setup performed by the `setUpFormContainer` function.\n *\n * @param control FormGroup or FormArray instance that should be cleaned up.\n * @param dir Directive that provided view validators.\n * @returns true if a control was updated as a result of this action.\n */\nfunction cleanUpFormContainer(control, dir) {\n return cleanUpValidators(control, dir);\n}\nfunction _noControlError(dir) {\n return _throwError(dir, 'There is no FormControl instance attached to form control element with');\n}\nfunction _throwError(dir, message) {\n const messageEnd = _describeControlLocation(dir);\n throw new Error(`${message} ${messageEnd}`);\n}\nfunction _describeControlLocation(dir) {\n const path = dir.path;\n if (path && path.length > 1) return `path: '${path.join(' -> ')}'`;\n if (path?.[0]) return `name: '${path}'`;\n return 'unspecified name attribute';\n}\nfunction _throwMissingValueAccessorError(dir) {\n const loc = _describeControlLocation(dir);\n throw new _RuntimeError(-1203 /* RuntimeErrorCode.NG_MISSING_VALUE_ACCESSOR */, `No value accessor for form control ${loc}.`);\n}\nfunction _throwInvalidValueAccessorError(dir) {\n const loc = _describeControlLocation(dir);\n throw new _RuntimeError(1200 /* RuntimeErrorCode.NG_VALUE_ACCESSOR_NOT_PROVIDED */, `Value accessor was not provided as an array for form control with ${loc}. ` + `Check that the \\`NG_VALUE_ACCESSOR\\` token is configured as a \\`multi: true\\` provider.`);\n}\nfunction isPropertyUpdated(changes, viewModel) {\n if (!changes.hasOwnProperty('model')) return false;\n const change = changes['model'];\n if (change.isFirstChange()) return true;\n return !Object.is(viewModel, change.currentValue);\n}\nfunction isBuiltInAccessor(valueAccessor) {\n // Check if a given value accessor is an instance of a class that directly extends\n // `BuiltInControlValueAccessor` one.\n return Object.getPrototypeOf(valueAccessor.constructor) === BuiltInControlValueAccessor;\n}\nfunction syncPendingControls(form, directives) {\n form._syncPendingControls();\n directives.forEach(dir => {\n const control = dir.control;\n if (control.updateOn === 'submit' && control._pendingChange) {\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n }\n });\n}\n// TODO: vsavkin remove it once https://github.com/angular/angular/issues/3011 is implemented\nfunction selectValueAccessor(dir, valueAccessors) {\n if (!valueAccessors) return null;\n if (!Array.isArray(valueAccessors) && (typeof ngDevMode === 'undefined' || ngDevMode)) _throwInvalidValueAccessorError(dir);\n let defaultAccessor = undefined;\n let builtinAccessor = undefined;\n let customAccessor = undefined;\n valueAccessors.forEach(v => {\n if (v.constructor === DefaultValueAccessor) {\n defaultAccessor = v;\n } else if (isBuiltInAccessor(v)) {\n if (builtinAccessor && (typeof ngDevMode === 'undefined' || ngDevMode)) _throwError(dir, 'More than one built-in value accessor matches form control with');\n builtinAccessor = v;\n } else {\n if (customAccessor && (typeof ngDevMode === 'undefined' || ngDevMode)) _throwError(dir, 'More than one custom value accessor matches form control with');\n customAccessor = v;\n }\n });\n if (customAccessor) return customAccessor;\n if (builtinAccessor) return builtinAccessor;\n if (defaultAccessor) return defaultAccessor;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n _throwError(dir, 'No valid value accessor for form control with');\n }\n return null;\n}\nfunction removeListItem$1(list, el) {\n const index = list.indexOf(el);\n if (index > -1) list.splice(index, 1);\n}\n// TODO(kara): remove after deprecation period\nfunction _ngModelWarning(name, type, instance, warningConfig) {\n if (warningConfig === 'never') return;\n if ((warningConfig === null || warningConfig === 'once') && !type._ngModelWarningSentOnce || warningConfig === 'always' && !instance._ngModelWarningSent) {\n console.warn(ngModelWarning(name));\n type._ngModelWarningSentOnce = true;\n instance._ngModelWarningSent = true;\n }\n}\nconst formDirectiveProvider$1 = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgForm)\n};\nconst resolvedPromise$1 = (() => Promise.resolve())();\n/**\n * @description\n * Creates a top-level `FormGroup` instance and binds it to a form\n * to track aggregate form value and validation status.\n *\n * As soon as you import the `FormsModule`, this directive becomes active by default on\n * all `<form>` tags. You don't need to add a special selector.\n *\n * You optionally export the directive into a local template variable using `ngForm` as the key\n * (ex: `#myForm=\"ngForm\"`). This is optional, but useful. Many properties from the underlying\n * `FormGroup` instance are duplicated on the directive itself, so a reference to it\n * gives you access to the aggregate value and validity status of the form, as well as\n * user interaction properties like `dirty` and `touched`.\n *\n * To register child controls with the form, use `NgModel` with a `name`\n * attribute. You may use `NgModelGroup` to create sub-groups within the form.\n *\n * If necessary, listen to the directive's `ngSubmit` event to be notified when the user has\n * triggered a form submission. The `ngSubmit` event emits the original form\n * submission event.\n *\n * In template driven forms, all `<form>` tags are automatically tagged as `NgForm`.\n * To import the `FormsModule` but skip its usage in some forms,\n * for example, to use native HTML5 validation, add the `ngNoForm` and the `<form>`\n * tags won't create an `NgForm` directive. In reactive forms, using `ngNoForm` is\n * unnecessary because the `<form>` tags are inert. In that case, you would\n * refrain from using the `formGroup` directive.\n *\n * @usageNotes\n *\n * ### Listening for form submission\n *\n * The following example shows how to capture the form values from the \"ngSubmit\" event.\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * ### Setting the update options\n *\n * The following example shows you how to change the \"updateOn\" option from its default using\n * ngFormOptions.\n *\n * ```html\n * <form [ngFormOptions]=\"{updateOn: 'blur'}\">\n * <input name=\"one\" ngModel> <!-- this ngModel will update on blur -->\n * </form>\n * ```\n *\n * ### Native DOM validation UI\n *\n * In order to prevent the native DOM form validation UI from interfering with Angular's form\n * validation, Angular automatically adds the `novalidate` attribute on any `<form>` whenever\n * `FormModule` or `ReactiveFormModule` are imported into the application.\n * If you want to explicitly enable native DOM validation UI with Angular forms, you can add the\n * `ngNativeValidate` attribute to the `<form>` element:\n *\n * ```html\n * <form ngNativeValidate>\n * ...\n * </form>\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\nclass NgForm extends ControlContainer {\n callSetDisabledState;\n /**\n * @description\n * Returns whether the form submission has been triggered.\n */\n get submitted() {\n return untracked(this.submittedReactive);\n }\n /** @internal */\n _submitted = computed(() => this.submittedReactive(), ...(ngDevMode ? [{\n debugName: \"_submitted\"\n }] : []));\n submittedReactive = signal(false, ...(ngDevMode ? [{\n debugName: \"submittedReactive\"\n }] : []));\n _directives = new Set();\n /**\n * @description\n * The `FormGroup` instance created for this form.\n */\n form;\n /**\n * @description\n * Event emitter for the \"ngSubmit\" event\n */\n ngSubmit = new EventEmitter();\n /**\n * @description\n * Tracks options for the `NgForm` instance.\n *\n * **updateOn**: Sets the default `updateOn` value for all child `NgModels` below it\n * unless explicitly set by a child `NgModel` using `ngModelOptions`). Defaults to 'change'.\n * Possible values: `'change'` | `'blur'` | `'submit'`.\n *\n */\n options;\n constructor(validators, asyncValidators, callSetDisabledState) {\n super();\n this.callSetDisabledState = callSetDisabledState;\n this.form = new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));\n }\n /** @docs-private */\n ngAfterViewInit() {\n this._setUpdateStrategy();\n }\n /**\n * @description\n * The directive instance.\n */\n get formDirective() {\n return this;\n }\n /**\n * @description\n * The internal `FormGroup` instance.\n */\n get control() {\n return this.form;\n }\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it is always an empty array.\n */\n get path() {\n return [];\n }\n /**\n * @description\n * Returns a map of the controls in this group.\n */\n get controls() {\n return this.form.controls;\n }\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `NgModel` directive instance.\n */\n addControl(dir) {\n resolvedPromise$1.then(() => {\n const container = this._findContainer(dir.path);\n dir.control = container.registerControl(dir.name, dir.control);\n setUpControl(dir.control, dir, this.callSetDisabledState);\n dir.control.updateValueAndValidity({\n emitEvent: false\n });\n this._directives.add(dir);\n });\n }\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `NgModel` directive.\n *\n * @param dir The `NgModel` directive instance.\n */\n getControl(dir) {\n return this.form.get(dir.path);\n }\n /**\n * @description\n * Removes the `NgModel` instance from the internal list of directives\n *\n * @param dir The `NgModel` directive instance.\n */\n removeControl(dir) {\n resolvedPromise$1.then(() => {\n const container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n this._directives.delete(dir);\n });\n }\n /**\n * @description\n * Adds a new `NgModelGroup` directive instance to the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n addFormGroup(dir) {\n resolvedPromise$1.then(() => {\n const container = this._findContainer(dir.path);\n const group = new FormGroup({});\n setUpFormContainer(group, dir);\n container.registerControl(dir.name, group);\n group.updateValueAndValidity({\n emitEvent: false\n });\n });\n }\n /**\n * @description\n * Removes the `NgModelGroup` directive instance from the form.\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n removeFormGroup(dir) {\n resolvedPromise$1.then(() => {\n const container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n });\n }\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `NgModelGroup` directive instance\n *\n * @param dir The `NgModelGroup` directive instance.\n */\n getFormGroup(dir) {\n return this.form.get(dir.path);\n }\n /**\n * Sets the new value for the provided `NgControl` directive.\n *\n * @param dir The `NgControl` directive instance.\n * @param value The new value for the directive's control.\n */\n updateModel(dir, value) {\n resolvedPromise$1.then(() => {\n const ctrl = this.form.get(dir.path);\n ctrl.setValue(value);\n });\n }\n /**\n * @description\n * Sets the value for this `FormGroup`.\n *\n * @param value The new value\n */\n setValue(value) {\n this.control.setValue(value);\n }\n /**\n * @description\n * Method called when the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n onSubmit($event) {\n this.submittedReactive.set(true);\n syncPendingControls(this.form, this._directives);\n this.ngSubmit.emit($event);\n this.form._events.next(new FormSubmittedEvent(this.control));\n // Forms with `method=\"dialog\"` have some special behavior\n // that won't reload the page and that shouldn't be prevented.\n return $event?.target?.method === 'dialog';\n }\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n onReset() {\n this.resetForm();\n }\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form.\n */\n resetForm(value = undefined) {\n this.form.reset(value);\n this.submittedReactive.set(false);\n this.form._events.next(new FormResetEvent(this.form));\n }\n _setUpdateStrategy() {\n if (this.options && this.options.updateOn != null) {\n this.form._updateOn = this.options.updateOn;\n }\n }\n _findContainer(path) {\n path.pop();\n return path.length ? this.form.get(path) : this.form;\n }\n static ɵfac = function NgForm_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgForm)(i0.ɵɵdirectiveInject(NG_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10), i0.ɵɵdirectiveInject(CALL_SET_DISABLED_STATE, 8));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgForm,\n selectors: [[\"form\", 3, \"ngNoForm\", \"\", 3, \"formGroup\", \"\"], [\"ng-form\"], [\"\", \"ngForm\", \"\"]],\n hostBindings: function NgForm_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"submit\", function NgForm_submit_HostBindingHandler($event) {\n return ctx.onSubmit($event);\n })(\"reset\", function NgForm_reset_HostBindingHandler() {\n return ctx.onReset();\n });\n }\n },\n inputs: {\n options: [0, \"ngFormOptions\", \"options\"]\n },\n outputs: {\n ngSubmit: \"ngSubmit\"\n },\n exportAs: [\"ngForm\"],\n standalone: false,\n features: [i0.ɵɵProvidersFeature([formDirectiveProvider$1]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgForm, [{\n type: Directive,\n args: [{\n selector: 'form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]',\n providers: [formDirectiveProvider$1],\n host: {\n '(submit)': 'onSubmit($event)',\n '(reset)': 'onReset()'\n },\n outputs: ['ngSubmit'],\n exportAs: 'ngForm',\n standalone: false\n }]\n }], () => [{\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_VALIDATORS]\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_ASYNC_VALIDATORS]\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CALL_SET_DISABLED_STATE]\n }]\n }], {\n options: [{\n type: Input,\n args: ['ngFormOptions']\n }]\n });\n})();\nfunction removeListItem(list, el) {\n const index = list.indexOf(el);\n if (index > -1) list.splice(index, 1);\n}\nfunction isFormControlState(formState) {\n return typeof formState === 'object' && formState !== null && Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;\n}\nconst FormControl = class FormControl extends AbstractControl {\n /** @publicApi */\n defaultValue = null;\n /** @internal */\n _onChange = [];\n /** @internal */\n _pendingValue;\n /** @internal */\n _pendingChange = false;\n constructor(\n // formState and defaultValue will only be null if T is nullable\n formState = null, validatorOrOpts, asyncValidator) {\n super(pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts));\n this._applyFormState(formState);\n this._setUpdateStrategy(validatorOrOpts);\n this._initObservables();\n this.updateValueAndValidity({\n onlySelf: true,\n // If `asyncValidator` is present, it will trigger control status change from `PENDING` to\n // `VALID` or `INVALID`.\n // The status should be broadcasted via the `statusChanges` observable, so we set\n // `emitEvent` to `true` to allow that during the control creation process.\n emitEvent: !!this.asyncValidator\n });\n if (isOptionsObj(validatorOrOpts) && (validatorOrOpts.nonNullable || validatorOrOpts.initialValueIsDefault)) {\n if (isFormControlState(formState)) {\n this.defaultValue = formState.value;\n } else {\n this.defaultValue = formState;\n }\n }\n }\n setValue(value, options = {}) {\n this.value = this._pendingValue = value;\n if (this._onChange.length && options.emitModelToViewChange !== false) {\n this._onChange.forEach(changeFn => changeFn(this.value, options.emitViewToModelChange !== false));\n }\n this.updateValueAndValidity(options);\n }\n patchValue(value, options = {}) {\n this.setValue(value, options);\n }\n reset(formState = this.defaultValue, options = {}) {\n this._applyFormState(formState);\n this.markAsPristine(options);\n this.markAsUntouched(options);\n this.setValue(this.value, options);\n this._pendingChange = false;\n }\n /** @internal */\n _updateValue() {}\n /** @internal */\n _anyControls(condition) {\n return false;\n }\n /** @internal */\n _allControlsDisabled() {\n return this.disabled;\n }\n registerOnChange(fn) {\n this._onChange.push(fn);\n }\n /** @internal */\n _unregisterOnChange(fn) {\n removeListItem(this._onChange, fn);\n }\n registerOnDisabledChange(fn) {\n this._onDisabledChange.push(fn);\n }\n /** @internal */\n _unregisterOnDisabledChange(fn) {\n removeListItem(this._onDisabledChange, fn);\n }\n /** @internal */\n _forEachChild(cb) {}\n /** @internal */\n _syncPendingControls() {\n if (this.updateOn === 'submit') {\n if (this._pendingDirty) this.markAsDirty();\n if (this._pendingTouched) this.markAsTouched();\n if (this._pendingChange) {\n this.setValue(this._pendingValue, {\n onlySelf: true,\n emitModelToViewChange: false\n });\n return true;\n }\n }\n return false;\n }\n _applyFormState(formState) {\n if (isFormControlState(formState)) {\n this.value = this._pendingValue = formState.value;\n formState.disabled ? this.disable({\n onlySelf: true,\n emitEvent: false\n }) : this.enable({\n onlySelf: true,\n emitEvent: false\n });\n } else {\n this.value = this._pendingValue = formState;\n }\n }\n};\nconst UntypedFormControl = FormControl;\n/**\n * @description\n * Asserts that the given control is an instance of `FormControl`\n *\n * @publicApi\n */\nconst isFormControl = control => control instanceof FormControl;\n\n/**\n * @description\n * A base class for code shared between the `NgModelGroup` and `FormGroupName` directives.\n *\n * @publicApi\n */\nclass AbstractFormGroupDirective extends ControlContainer {\n /**\n * @description\n * The parent control for the group\n *\n * @internal\n */\n _parent;\n /** @docs-private */\n ngOnInit() {\n this._checkParentType();\n // Register the group with its parent group.\n this.formDirective.addFormGroup(this);\n }\n /** @docs-private */\n ngOnDestroy() {\n if (this.formDirective) {\n // Remove the group from its parent group.\n this.formDirective.removeFormGroup(this);\n }\n }\n /**\n * @description\n * The `FormGroup` bound to this directive.\n */\n get control() {\n return this.formDirective.getFormGroup(this);\n }\n /**\n * @description\n * The path to this group from the top-level directive.\n */\n get path() {\n return controlPath(this.name == null ? this.name : this.name.toString(), this._parent);\n }\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective() {\n return this._parent ? this._parent.formDirective : null;\n }\n /** @internal */\n _checkParentType() {}\n static ɵfac = /* @__PURE__ */(() => {\n let ɵAbstractFormGroupDirective_BaseFactory;\n return function AbstractFormGroupDirective_Factory(__ngFactoryType__) {\n return (ɵAbstractFormGroupDirective_BaseFactory || (ɵAbstractFormGroupDirective_BaseFactory = i0.ɵɵgetInheritedFactory(AbstractFormGroupDirective)))(__ngFactoryType__ || AbstractFormGroupDirective);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: AbstractFormGroupDirective,\n standalone: false,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(AbstractFormGroupDirective, [{\n type: Directive,\n args: [{\n standalone: false\n }]\n }], null, null);\n})();\nfunction modelParentException() {\n return new _RuntimeError(1350 /* RuntimeErrorCode.NGMODEL_IN_FORM_GROUP */, `\n ngModel cannot be used to register form controls with a parent formGroup directive. Try using\n formGroup's partner directive \"formControlName\" instead. Example:\n\n ${formControlNameExample}\n\n Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\n\n Example:\n\n ${ngModelWithFormGroupExample}`);\n}\nfunction formGroupNameException() {\n return new _RuntimeError(1351 /* RuntimeErrorCode.NGMODEL_IN_FORM_GROUP_NAME */, `\n ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n ${formGroupNameExample}\n\n Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n ${ngModelGroupExample}`);\n}\nfunction missingNameException() {\n return new _RuntimeError(1352 /* RuntimeErrorCode.NGMODEL_WITHOUT_NAME */, `If ngModel is used within a form tag, either the name attribute must be set or the form\n control must be defined as 'standalone' in ngModelOptions.\n\n Example 1: <input [(ngModel)]=\"person.firstName\" name=\"first\">\n Example 2: <input [(ngModel)]=\"person.firstName\" [ngModelOptions]=\"{standalone: true}\">`);\n}\nfunction modelGroupParentException() {\n return new _RuntimeError(1353 /* RuntimeErrorCode.NGMODELGROUP_IN_FORM_GROUP */, `\n ngModelGroup cannot be used with a parent formGroup directive.\n\n Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n ${formGroupNameExample}\n\n Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n ${ngModelGroupExample}`);\n}\nconst modelGroupProvider = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgModelGroup)\n};\n/**\n * @description\n * Creates and binds a `FormGroup` instance to a DOM element.\n *\n * This directive can only be used as a child of `NgForm` (within `<form>` tags).\n *\n * Use this directive to validate a sub-group of your form separately from the\n * rest of your form, or if some values in your domain model make more sense\n * to consume together in a nested object.\n *\n * Provide a name for the sub-group and it will become the key\n * for the sub-group in the form's full value. If you need direct access, export the directive into\n * a local template variable using `ngModelGroup` (ex: `#myGroup=\"ngModelGroup\"`).\n *\n * @usageNotes\n *\n * ### Consuming controls in a grouping\n *\n * The following example shows you how to combine controls together in a sub-group\n * of the form.\n *\n * {@example forms/ts/ngModelGroup/ng_model_group_example.ts region='Component'}\n *\n * @ngModule FormsModule\n * @publicApi\n */\nclass NgModelGroup extends AbstractFormGroupDirective {\n /**\n * @description\n * Tracks the name of the `NgModelGroup` bound to the directive. The name corresponds\n * to a key in the parent `NgForm`.\n */\n name = '';\n constructor(parent, validators, asyncValidators) {\n super();\n this._parent = parent;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n }\n /** @internal */\n _checkParentType() {\n if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw modelGroupParentException();\n }\n }\n static ɵfac = function NgModelGroup_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgModelGroup)(i0.ɵɵdirectiveInject(ControlContainer, 5), i0.ɵɵdirectiveInject(NG_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgModelGroup,\n selectors: [[\"\", \"ngModelGroup\", \"\"]],\n inputs: {\n name: [0, \"ngModelGroup\", \"name\"]\n },\n exportAs: [\"ngModelGroup\"],\n standalone: false,\n features: [i0.ɵɵProvidersFeature([modelGroupProvider]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgModelGroup, [{\n type: Directive,\n args: [{\n selector: '[ngModelGroup]',\n providers: [modelGroupProvider],\n exportAs: 'ngModelGroup',\n standalone: false\n }]\n }], () => [{\n type: ControlContainer,\n decorators: [{\n type: Host\n }, {\n type: SkipSelf\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_VALIDATORS]\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_ASYNC_VALIDATORS]\n }]\n }], {\n name: [{\n type: Input,\n args: ['ngModelGroup']\n }]\n });\n})();\nconst formControlBinding$1 = {\n provide: NgControl,\n useExisting: forwardRef(() => NgModel)\n};\n/**\n * `ngModel` forces an additional change detection run when its inputs change:\n * E.g.:\n * ```html\n * <div>{{myModel.valid}}</div>\n * <input [(ngModel)]=\"myValue\" #myModel=\"ngModel\">\n * ```\n * I.e. `ngModel` can export itself on the element and then be used in the template.\n * Normally, this would result in expressions before the `input` that use the exported directive\n * to have an old value as they have been\n * dirty checked before. As this is a very common case for `ngModel`, we added this second change\n * detection run.\n *\n * Notes:\n * - this is just one extra run no matter how many `ngModel`s have been changed.\n * - this is a general problem when using `exportAs` for directives!\n */\nconst resolvedPromise = (() => Promise.resolve())();\n/**\n * @description\n * Creates a `FormControl` instance from a [domain\n * model](https://en.wikipedia.org/wiki/Domain_model) and binds it to a form control element.\n *\n * The `FormControl` instance tracks the value, user interaction, and\n * validation status of the control and keeps the view synced with the model. If used\n * within a parent form, the directive also registers itself with the form as a child\n * control.\n *\n * This directive is used by itself or as part of a larger form. Use the\n * `ngModel` selector to activate it.\n *\n * It accepts a domain model as an optional `Input`. If you have a one-way binding\n * to `ngModel` with `[]` syntax, changing the domain model's value in the component\n * class sets the value in the view. If you have a two-way binding with `[()]` syntax\n * (also known as 'banana-in-a-box syntax'), the value in the UI always syncs back to\n * the domain model in your class.\n *\n * To inspect the properties of the associated `FormControl` (like the validity state),\n * export the directive into a local template variable using `ngModel` as the key (ex:\n * `#myVar=\"ngModel\"`). You can then access the control using the directive's `control` property.\n * However, the most commonly used properties (like `valid` and `dirty`) also exist on the control\n * for direct access. See a full list of properties directly available in\n * `AbstractControlDirective`.\n *\n * @see {@link RadioControlValueAccessor}\n * @see {@link SelectControlValueAccessor}\n *\n * @usageNotes\n *\n * ### Using ngModel on a standalone control\n *\n * The following examples show a simple standalone control using `ngModel`:\n *\n * {@example forms/ts/simpleNgModel/simple_ng_model_example.ts region='Component'}\n *\n * When using the `ngModel` within `<form>` tags, you'll also need to supply a `name` attribute\n * so that the control can be registered with the parent form under that name.\n *\n * In the context of a parent form, it's often unnecessary to include one-way or two-way binding,\n * as the parent form syncs the value for you. You access its properties by exporting it into a\n * local template variable using `ngForm` such as (`#f=\"ngForm\"`). Use the variable where\n * needed on form submission.\n *\n * If you do need to populate initial values into your form, using a one-way binding for\n * `ngModel` tends to be sufficient as long as you use the exported form's value rather\n * than the domain model's value on submit.\n *\n * ### Using ngModel within a form\n *\n * The following example shows controls using `ngModel` within a form:\n *\n * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * ### Using a standalone ngModel within a group\n *\n * The following example shows you how to use a standalone ngModel control\n * within a form. This controls the display of the form, but doesn't contain form data.\n *\n * ```html\n * <form>\n * <input name=\"login\" ngModel placeholder=\"Login\">\n * <input type=\"checkbox\" ngModel [ngModelOptions]=\"{standalone: true}\"> Show more options?\n * </form>\n * <!-- form value: {login: ''} -->\n * ```\n *\n * ### Setting the ngModel `name` attribute through options\n *\n * The following example shows you an alternate way to set the name attribute. Here,\n * an attribute identified as name is used within a custom form control component. To still be able\n * to specify the NgModel's name, you must specify it using the `ngModelOptions` input instead.\n *\n * ```html\n * <form>\n * <my-custom-form-control name=\"Nancy\" ngModel [ngModelOptions]=\"{name: 'user'}\">\n * </my-custom-form-control>\n * </form>\n * <!-- form value: {user: ''} -->\n * ```\n *\n * @ngModule FormsModule\n * @publicApi\n */\nclass NgModel extends NgControl {\n _changeDetectorRef;\n callSetDisabledState;\n control = new FormControl();\n // At runtime we coerce arbitrary values assigned to the \"disabled\" input to a \"boolean\".\n // This is not reflected in the type of the property because outside of templates, consumers\n // should only deal with booleans. In templates, a string is allowed for convenience and to\n // match the native \"disabled attribute\" semantics which can be observed on input elements.\n // This static member tells the compiler that values of type \"string\" can also be assigned\n // to the input in a template.\n /** @docs-private */\n static ngAcceptInputType_isDisabled;\n /** @internal */\n _registered = false;\n /**\n * Internal reference to the view model value.\n * @docs-private\n */\n viewModel;\n /**\n * @description\n * Tracks the name bound to the directive. If a parent form exists, it\n * uses this name as a key to retrieve this control's value.\n */\n name = '';\n /**\n * @description\n * Tracks whether the control is disabled.\n */\n isDisabled;\n /**\n * @description\n * Tracks the value bound to this directive.\n */\n model;\n /**\n * @description\n * Tracks the configuration options for this `ngModel` instance.\n *\n * **name**: An alternative to setting the name attribute on the form control element. See\n * the [example](api/forms/NgModel#using-ngmodel-on-a-standalone-control) for using `NgModel`\n * as a standalone control.\n *\n * **standalone**: When set to true, the `ngModel` will not register itself with its parent form,\n * and acts as if it's not in the form. Defaults to false. If no parent form exists, this option\n * has no effect.\n *\n * **updateOn**: Defines the event upon which the form control value and validity update.\n * Defaults to 'change'. Possible values: `'change'` | `'blur'` | `'submit'`.\n *\n */\n options;\n /**\n * @description\n * Event emitter for producing the `ngModelChange` event after\n * the view model updates.\n */\n update = new EventEmitter();\n constructor(parent, validators, asyncValidators, valueAccessors, _changeDetectorRef, callSetDisabledState) {\n super();\n this._changeDetectorRef = _changeDetectorRef;\n this.callSetDisabledState = callSetDisabledState;\n this._parent = parent;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n /** @docs-private */\n ngOnChanges(changes) {\n this._checkForErrors();\n if (!this._registered || 'name' in changes) {\n if (this._registered) {\n this._checkName();\n if (this.formDirective) {\n // We can't call `formDirective.removeControl(this)`, because the `name` has already been\n // changed. We also can't reset the name temporarily since the logic in `removeControl`\n // is inside a promise and it won't run immediately. We work around it by giving it an\n // object with the same shape instead.\n const oldName = changes['name'].previousValue;\n this.formDirective.removeControl({\n name: oldName,\n path: this._getPath(oldName)\n });\n }\n }\n this._setUpControl();\n }\n if ('isDisabled' in changes) {\n this._updateDisabled(changes);\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n this._updateValue(this.model);\n this.viewModel = this.model;\n }\n }\n /** @docs-private */\n ngOnDestroy() {\n this.formDirective && this.formDirective.removeControl(this);\n }\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path() {\n return this._getPath(this.name);\n }\n /**\n * @description\n * The top-level directive for this control if present, otherwise null.\n */\n get formDirective() {\n return this._parent ? this._parent.formDirective : null;\n }\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value emitted by `ngModelChange`.\n */\n viewToModelUpdate(newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n _setUpControl() {\n this._setUpdateStrategy();\n this._isStandalone() ? this._setUpStandalone() : this.formDirective.addControl(this);\n this._registered = true;\n }\n _setUpdateStrategy() {\n if (this.options && this.options.updateOn != null) {\n this.control._updateOn = this.options.updateOn;\n }\n }\n _isStandalone() {\n return !this._parent || !!(this.options && this.options.standalone);\n }\n _setUpStandalone() {\n setUpControl(this.control, this, this.callSetDisabledState);\n this.control.updateValueAndValidity({\n emitEvent: false\n });\n }\n _checkForErrors() {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this._isStandalone()) {\n checkParentType$1(this._parent);\n }\n this._checkName();\n }\n _checkName() {\n if (this.options && this.options.name) this.name = this.options.name;\n if (!this._isStandalone() && !this.name && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw missingNameException();\n }\n }\n _updateValue(value) {\n resolvedPromise.then(() => {\n this.control.setValue(value, {\n emitViewToModelChange: false\n });\n this._changeDetectorRef?.markForCheck();\n });\n }\n _updateDisabled(changes) {\n const disabledValue = changes['isDisabled'].currentValue;\n // checking for 0 to avoid breaking change\n const isDisabled = disabledValue !== 0 && booleanAttribute(disabledValue);\n resolvedPromise.then(() => {\n if (isDisabled && !this.control.disabled) {\n this.control.disable();\n } else if (!isDisabled && this.control.disabled) {\n this.control.enable();\n }\n this._changeDetectorRef?.markForCheck();\n });\n }\n _getPath(controlName) {\n return this._parent ? controlPath(controlName, this._parent) : [controlName];\n }\n static ɵfac = function NgModel_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgModel)(i0.ɵɵdirectiveInject(ControlContainer, 9), i0.ɵɵdirectiveInject(NG_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_VALUE_ACCESSOR, 10), i0.ɵɵdirectiveInject(ChangeDetectorRef, 8), i0.ɵɵdirectiveInject(CALL_SET_DISABLED_STATE, 8));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgModel,\n selectors: [[\"\", \"ngModel\", \"\", 3, \"formControlName\", \"\", 3, \"formControl\", \"\"]],\n inputs: {\n name: \"name\",\n isDisabled: [0, \"disabled\", \"isDisabled\"],\n model: [0, \"ngModel\", \"model\"],\n options: [0, \"ngModelOptions\", \"options\"]\n },\n outputs: {\n update: \"ngModelChange\"\n },\n exportAs: [\"ngModel\"],\n standalone: false,\n features: [i0.ɵɵProvidersFeature([formControlBinding$1]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgModel, [{\n type: Directive,\n args: [{\n selector: '[ngModel]:not([formControlName]):not([formControl])',\n providers: [formControlBinding$1],\n exportAs: 'ngModel',\n standalone: false\n }]\n }], () => [{\n type: ControlContainer,\n decorators: [{\n type: Optional\n }, {\n type: Host\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_VALIDATORS]\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_ASYNC_VALIDATORS]\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_VALUE_ACCESSOR]\n }]\n }, {\n type: i0.ChangeDetectorRef,\n decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ChangeDetectorRef]\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CALL_SET_DISABLED_STATE]\n }]\n }], {\n name: [{\n type: Input\n }],\n isDisabled: [{\n type: Input,\n args: ['disabled']\n }],\n model: [{\n type: Input,\n args: ['ngModel']\n }],\n options: [{\n type: Input,\n args: ['ngModelOptions']\n }],\n update: [{\n type: Output,\n args: ['ngModelChange']\n }]\n });\n})();\nfunction checkParentType$1(parent) {\n if (!(parent instanceof NgModelGroup) && parent instanceof AbstractFormGroupDirective) {\n throw formGroupNameException();\n } else if (!(parent instanceof NgModelGroup) && !(parent instanceof NgForm)) {\n throw modelParentException();\n }\n}\n\n/**\n * @description\n *\n * Adds `novalidate` attribute to all forms by default.\n *\n * `novalidate` is used to disable browser's native form validation.\n *\n * If you want to use native validation with Angular forms, just add `ngNativeValidate` attribute:\n *\n * ```html\n * <form ngNativeValidate></form>\n * ```\n *\n * @publicApi\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n */\nclass ɵNgNoValidate {\n static ɵfac = function ɵNgNoValidate_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ɵNgNoValidate)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: ɵNgNoValidate,\n selectors: [[\"form\", 3, \"ngNoForm\", \"\", 3, \"ngNativeValidate\", \"\"]],\n hostAttrs: [\"novalidate\", \"\"],\n standalone: false\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(ɵNgNoValidate, [{\n type: Directive,\n args: [{\n selector: 'form:not([ngNoForm]):not([ngNativeValidate])',\n host: {\n 'novalidate': ''\n },\n standalone: false\n }]\n }], null, null);\n})();\nconst NUMBER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberValueAccessor),\n multi: true\n};\n/**\n * @description\n * The `ControlValueAccessor` for writing a number value and listening to number input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a number input with a reactive form.\n *\n * The following example shows how to use a number input with a reactive form.\n *\n * ```ts\n * const totalCountControl = new FormControl();\n * ```\n *\n * ```html\n * <input type=\"number\" [formControl]=\"totalCountControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\nclass NumberValueAccessor extends BuiltInControlValueAccessor {\n /**\n * Sets the \"value\" property on the input element.\n * @docs-private\n */\n writeValue(value) {\n // The value needs to be normalized for IE9, otherwise it is set to 'null' when null\n const normalizedValue = value == null ? '' : value;\n this.setProperty('value', normalizedValue);\n }\n /**\n * Registers a function called when the control value changes.\n * @docs-private\n */\n registerOnChange(fn) {\n this.onChange = value => {\n fn(value == '' ? null : parseFloat(value));\n };\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵNumberValueAccessor_BaseFactory;\n return function NumberValueAccessor_Factory(__ngFactoryType__) {\n return (ɵNumberValueAccessor_BaseFactory || (ɵNumberValueAccessor_BaseFactory = i0.ɵɵgetInheritedFactory(NumberValueAccessor)))(__ngFactoryType__ || NumberValueAccessor);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NumberValueAccessor,\n selectors: [[\"input\", \"type\", \"number\", \"formControlName\", \"\"], [\"input\", \"type\", \"number\", \"formControl\", \"\"], [\"input\", \"type\", \"number\", \"ngModel\", \"\"]],\n hostBindings: function NumberValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"input\", function NumberValueAccessor_input_HostBindingHandler($event) {\n return ctx.onChange($event.target.value);\n })(\"blur\", function NumberValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([NUMBER_VALUE_ACCESSOR]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NumberValueAccessor, [{\n type: Directive,\n args: [{\n selector: 'input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]',\n host: {\n '(input)': 'onChange($any($event.target).value)',\n '(blur)': 'onTouched()'\n },\n providers: [NUMBER_VALUE_ACCESSOR],\n standalone: false\n }]\n }], null, null);\n})();\nconst RADIO_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioControlValueAccessor),\n multi: true\n};\nfunction throwNameError() {\n throw new _RuntimeError(1202 /* RuntimeErrorCode.NAME_AND_FORM_CONTROL_NAME_MUST_MATCH */, `\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: <input type=\"radio\" formControlName=\"food\" name=\"food\">\n `);\n}\n/**\n * @description\n * Class used by Angular to track radio buttons. For internal use only.\n */\nclass RadioControlRegistry {\n _accessors = [];\n /**\n * @description\n * Adds a control to the internal registry. For internal use only.\n */\n add(control, accessor) {\n this._accessors.push([control, accessor]);\n }\n /**\n * @description\n * Removes a control from the internal registry. For internal use only.\n */\n remove(accessor) {\n for (let i = this._accessors.length - 1; i >= 0; --i) {\n if (this._accessors[i][1] === accessor) {\n this._accessors.splice(i, 1);\n return;\n }\n }\n }\n /**\n * @description\n * Selects a radio button. For internal use only.\n */\n select(accessor) {\n this._accessors.forEach(c => {\n if (this._isSameGroup(c, accessor) && c[1] !== accessor) {\n c[1].fireUncheck(accessor.value);\n }\n });\n }\n _isSameGroup(controlPair, accessor) {\n if (!controlPair[0].control) return false;\n return controlPair[0]._parent === accessor._control._parent && controlPair[1].name === accessor.name;\n }\n static ɵfac = function RadioControlRegistry_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RadioControlRegistry)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: RadioControlRegistry,\n factory: RadioControlRegistry.ɵfac,\n providedIn: 'root'\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RadioControlRegistry, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], null, null);\n})();\n/**\n * @description\n * The `ControlValueAccessor` for writing radio control values and listening to radio control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using radio buttons with reactive form directives\n *\n * The follow example shows how to use radio buttons in a reactive form. When using radio buttons in\n * a reactive form, radio buttons in the same group should have the same `formControlName`.\n * Providing a `name` attribute is optional.\n *\n * {@example forms/ts/reactiveRadioButtons/reactive_radio_button_example.ts region='Reactive'}\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\nclass RadioControlValueAccessor extends BuiltInControlValueAccessor {\n _registry;\n _injector;\n /** @internal */\n _state;\n /** @internal */\n _control;\n /** @internal */\n _fn;\n setDisabledStateFired = false;\n /**\n * The registered callback function called when a change event occurs on the input element.\n * Note: we declare `onChange` here (also used as host listener) as a function with no arguments\n * to override the `onChange` function (which expects 1 argument) in the parent\n * `BaseControlValueAccessor` class.\n * @docs-private\n */\n onChange = () => {};\n /**\n * @description\n * Tracks the name of the radio input element.\n */\n name;\n /**\n * @description\n * Tracks the name of the `FormControl` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n */\n formControlName;\n /**\n * @description\n * Tracks the value of the radio input element\n */\n value;\n callSetDisabledState = inject(CALL_SET_DISABLED_STATE, {\n optional: true\n }) ?? setDisabledStateDefault;\n constructor(renderer, elementRef, _registry, _injector) {\n super(renderer, elementRef);\n this._registry = _registry;\n this._injector = _injector;\n }\n /** @docs-private */\n ngOnInit() {\n this._control = this._injector.get(NgControl);\n this._checkName();\n this._registry.add(this._control, this);\n }\n /** @docs-private */\n ngOnDestroy() {\n this._registry.remove(this);\n }\n /**\n * Sets the \"checked\" property value on the radio input element.\n * @docs-private\n */\n writeValue(value) {\n this._state = value === this.value;\n this.setProperty('checked', this._state);\n }\n /**\n * Registers a function called when the control value changes.\n * @docs-private\n */\n registerOnChange(fn) {\n this._fn = fn;\n this.onChange = () => {\n fn(this.value);\n this._registry.select(this);\n };\n }\n /** @docs-private */\n setDisabledState(isDisabled) {\n /**\n * `setDisabledState` is supposed to be called whenever the disabled state of a control changes,\n * including upon control creation. However, a longstanding bug caused the method to not fire\n * when an *enabled* control was attached. This bug was fixed in v15 in #47576.\n *\n * This had a side effect: previously, it was possible to instantiate a reactive form control\n * with `[attr.disabled]=true`, even though the corresponding control was enabled in the\n * model. This resulted in a mismatch between the model and the DOM. Now, because\n * `setDisabledState` is always called, the value in the DOM will be immediately overwritten\n * with the \"correct\" enabled value.\n *\n * However, the fix also created an exceptional case: radio buttons. Because Reactive Forms\n * models the entire group of radio buttons as a single `FormControl`, there is no way to\n * control the disabled state for individual radios, so they can no longer be configured as\n * disabled. Thus, we keep the old behavior for radio buttons, so that `[attr.disabled]`\n * continues to work. Specifically, we drop the first call to `setDisabledState` if `disabled`\n * is `false`, and we are not in legacy mode.\n */\n if (this.setDisabledStateFired || isDisabled || this.callSetDisabledState === 'whenDisabledForLegacyCode') {\n this.setProperty('disabled', isDisabled);\n }\n this.setDisabledStateFired = true;\n }\n /**\n * Sets the \"value\" on the radio input element and unchecks it.\n *\n * @param value\n */\n fireUncheck(value) {\n this.writeValue(value);\n }\n _checkName() {\n if (this.name && this.formControlName && this.name !== this.formControlName && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwNameError();\n }\n if (!this.name && this.formControlName) this.name = this.formControlName;\n }\n static ɵfac = function RadioControlValueAccessor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || RadioControlValueAccessor)(i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(RadioControlRegistry), i0.ɵɵdirectiveInject(i0.Injector));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: RadioControlValueAccessor,\n selectors: [[\"input\", \"type\", \"radio\", \"formControlName\", \"\"], [\"input\", \"type\", \"radio\", \"formControl\", \"\"], [\"input\", \"type\", \"radio\", \"ngModel\", \"\"]],\n hostBindings: function RadioControlValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"change\", function RadioControlValueAccessor_change_HostBindingHandler() {\n return ctx.onChange();\n })(\"blur\", function RadioControlValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n inputs: {\n name: \"name\",\n formControlName: \"formControlName\",\n value: \"value\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([RADIO_VALUE_ACCESSOR]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RadioControlValueAccessor, [{\n type: Directive,\n args: [{\n selector: 'input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]',\n host: {\n '(change)': 'onChange()',\n '(blur)': 'onTouched()'\n },\n providers: [RADIO_VALUE_ACCESSOR],\n standalone: false\n }]\n }], () => [{\n type: i0.Renderer2\n }, {\n type: i0.ElementRef\n }, {\n type: RadioControlRegistry\n }, {\n type: i0.Injector\n }], {\n name: [{\n type: Input\n }],\n formControlName: [{\n type: Input\n }],\n value: [{\n type: Input\n }]\n });\n})();\nconst RANGE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RangeValueAccessor),\n multi: true\n};\n/**\n * @description\n * The `ControlValueAccessor` for writing a range value and listening to range input changes.\n * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`\n * directives.\n *\n * @usageNotes\n *\n * ### Using a range input with a reactive form\n *\n * The following example shows how to use a range input with a reactive form.\n *\n * ```ts\n * const ageControl = new FormControl();\n * ```\n *\n * ```html\n * <input type=\"range\" [formControl]=\"ageControl\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\nclass RangeValueAccessor extends BuiltInControlValueAccessor {\n /**\n * Sets the \"value\" property on the input element.\n * @docs-private\n */\n writeValue(value) {\n this.setProperty('value', parseFloat(value));\n }\n /**\n * Registers a function called when the control value changes.\n * @docs-private\n */\n registerOnChange(fn) {\n this.onChange = value => {\n fn(value == '' ? null : parseFloat(value));\n };\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵRangeValueAccessor_BaseFactory;\n return function RangeValueAccessor_Factory(__ngFactoryType__) {\n return (ɵRangeValueAccessor_BaseFactory || (ɵRangeValueAccessor_BaseFactory = i0.ɵɵgetInheritedFactory(RangeValueAccessor)))(__ngFactoryType__ || RangeValueAccessor);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: RangeValueAccessor,\n selectors: [[\"input\", \"type\", \"range\", \"formControlName\", \"\"], [\"input\", \"type\", \"range\", \"formControl\", \"\"], [\"input\", \"type\", \"range\", \"ngModel\", \"\"]],\n hostBindings: function RangeValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"change\", function RangeValueAccessor_change_HostBindingHandler($event) {\n return ctx.onChange($event.target.value);\n })(\"input\", function RangeValueAccessor_input_HostBindingHandler($event) {\n return ctx.onChange($event.target.value);\n })(\"blur\", function RangeValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([RANGE_VALUE_ACCESSOR]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RangeValueAccessor, [{\n type: Directive,\n args: [{\n selector: 'input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]',\n host: {\n '(change)': 'onChange($any($event.target).value)',\n '(input)': 'onChange($any($event.target).value)',\n '(blur)': 'onTouched()'\n },\n providers: [RANGE_VALUE_ACCESSOR],\n standalone: false\n }]\n }], null, null);\n})();\n\n/**\n * Token to provide to turn off the ngModel warning on formControl and formControlName.\n */\nconst NG_MODEL_WITH_FORM_CONTROL_WARNING = new InjectionToken(ngDevMode ? 'NgModelWithFormControlWarning' : '');\nconst formControlBinding = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlDirective)\n};\n/**\n * @description\n * Synchronizes a standalone `FormControl` instance to a form control element.\n *\n * Note that support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives was deprecated in Angular v6 and is scheduled for removal in\n * a future version of Angular.\n *\n * @see [Reactive Forms Guide](guide/forms/reactive-forms)\n * @see {@link FormControl}\n * @see {@link AbstractControl}\n *\n * @usageNotes\n *\n * The following example shows how to register a standalone control and set its value.\n *\n * {@example forms/ts/simpleFormControl/simple_form_control_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\nclass FormControlDirective extends NgControl {\n _ngModelWarningConfig;\n callSetDisabledState;\n /**\n * Internal reference to the view model value.\n * @docs-private\n */\n viewModel;\n /**\n * @description\n * Tracks the `FormControl` instance bound to the directive.\n */\n form;\n /**\n * @description\n * Triggers a warning in dev mode that this input should not be used with reactive forms.\n */\n set isDisabled(isDisabled) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(disabledAttrWarning);\n }\n }\n // TODO(kara): remove next 4 properties once deprecation period is over\n /** @deprecated as of v6 */\n model;\n /** @deprecated as of v6 */\n update = new EventEmitter();\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlDirective. Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngModelWarningSentOnce = false;\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular `FormControlDirective` instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _ngModelWarningSent = false;\n constructor(validators, asyncValidators, valueAccessors, _ngModelWarningConfig, callSetDisabledState) {\n super();\n this._ngModelWarningConfig = _ngModelWarningConfig;\n this.callSetDisabledState = callSetDisabledState;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n /** @docs-private */\n ngOnChanges(changes) {\n if (this._isControlChanged(changes)) {\n const previousForm = changes['form'].previousValue;\n if (previousForm) {\n cleanUpControl(previousForm, this, /* validateControlPresenceOnChange */false);\n }\n setUpControl(this.form, this, this.callSetDisabledState);\n this.form.updateValueAndValidity({\n emitEvent: false\n });\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n _ngModelWarning('formControl', FormControlDirective, this, this._ngModelWarningConfig);\n }\n this.form.setValue(this.model);\n this.viewModel = this.model;\n }\n }\n /** @docs-private */\n ngOnDestroy() {\n if (this.form) {\n cleanUpControl(this.form, this, /* validateControlPresenceOnChange */false);\n }\n }\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path() {\n return [];\n }\n /**\n * @description\n * The `FormControl` bound to this directive.\n */\n get control() {\n return this.form;\n }\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n viewToModelUpdate(newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n _isControlChanged(changes) {\n return changes.hasOwnProperty('form');\n }\n static ɵfac = function FormControlDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormControlDirective)(i0.ɵɵdirectiveInject(NG_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_VALUE_ACCESSOR, 10), i0.ɵɵdirectiveInject(NG_MODEL_WITH_FORM_CONTROL_WARNING, 8), i0.ɵɵdirectiveInject(CALL_SET_DISABLED_STATE, 8));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FormControlDirective,\n selectors: [[\"\", \"formControl\", \"\"]],\n inputs: {\n form: [0, \"formControl\", \"form\"],\n isDisabled: [0, \"disabled\", \"isDisabled\"],\n model: [0, \"ngModel\", \"model\"]\n },\n outputs: {\n update: \"ngModelChange\"\n },\n exportAs: [\"ngForm\"],\n standalone: false,\n features: [i0.ɵɵProvidersFeature([formControlBinding]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(FormControlDirective, [{\n type: Directive,\n args: [{\n selector: '[formControl]',\n providers: [formControlBinding],\n exportAs: 'ngForm',\n standalone: false\n }]\n }], () => [{\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_VALIDATORS]\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_ASYNC_VALIDATORS]\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_VALUE_ACCESSOR]\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [NG_MODEL_WITH_FORM_CONTROL_WARNING]\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CALL_SET_DISABLED_STATE]\n }]\n }], {\n form: [{\n type: Input,\n args: ['formControl']\n }],\n isDisabled: [{\n type: Input,\n args: ['disabled']\n }],\n model: [{\n type: Input,\n args: ['ngModel']\n }],\n update: [{\n type: Output,\n args: ['ngModelChange']\n }]\n });\n})();\nconst formDirectiveProvider = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupDirective)\n};\n/**\n * @description\n *\n * Binds an existing `FormGroup` or `FormRecord` to a DOM element.\n *\n * This directive accepts an existing `FormGroup` instance. It will then use this\n * `FormGroup` instance to match any child `FormControl`, `FormGroup`/`FormRecord`,\n * and `FormArray` instances to child `FormControlName`, `FormGroupName`,\n * and `FormArrayName` directives.\n *\n * @see [Reactive Forms Guide](guide/forms/reactive-forms)\n * @see {@link AbstractControl}\n *\n * @usageNotes\n * ### Register Form Group\n *\n * The following example registers a `FormGroup` with first name and last name controls,\n * and listens for the *ngSubmit* event when the button is clicked.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\nclass FormGroupDirective extends ControlContainer {\n callSetDisabledState;\n /**\n * @description\n * Reports whether the form submission has been triggered.\n */\n get submitted() {\n return untracked(this._submittedReactive);\n }\n // TODO(atscott): Remove once invalid API usage is cleaned up internally\n set submitted(value) {\n this._submittedReactive.set(value);\n }\n /** @internal */\n _submitted = computed(() => this._submittedReactive(), ...(ngDevMode ? [{\n debugName: \"_submitted\"\n }] : []));\n _submittedReactive = signal(false, ...(ngDevMode ? [{\n debugName: \"_submittedReactive\"\n }] : []));\n /**\n * Reference to an old form group input value, which is needed to cleanup\n * old instance in case it was replaced with a new one.\n */\n _oldForm;\n /**\n * Callback that should be invoked when controls in FormGroup or FormArray collection change\n * (added or removed). This callback triggers corresponding DOM updates.\n */\n _onCollectionChange = () => this._updateDomValue();\n /**\n * @description\n * Tracks the list of added `FormControlName` instances\n */\n directives = [];\n /**\n * @description\n * Tracks the `FormGroup` bound to this directive.\n */\n form = null;\n /**\n * @description\n * Emits an event when the form submission has been triggered.\n */\n ngSubmit = new EventEmitter();\n constructor(validators, asyncValidators, callSetDisabledState) {\n super();\n this.callSetDisabledState = callSetDisabledState;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n }\n /** @docs-private */\n ngOnChanges(changes) {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this.form) {\n throw missingFormException();\n }\n if (changes.hasOwnProperty('form')) {\n this._updateValidators();\n this._updateDomValue();\n this._updateRegistrations();\n this._oldForm = this.form;\n }\n }\n /** @docs-private */\n ngOnDestroy() {\n if (this.form) {\n cleanUpValidators(this.form, this);\n // Currently the `onCollectionChange` callback is rewritten each time the\n // `_registerOnCollectionChange` function is invoked. The implication is that cleanup should\n // happen *only* when the `onCollectionChange` callback was set by this directive instance.\n // Otherwise it might cause overriding a callback of some other directive instances. We should\n // consider updating this logic later to make it similar to how `onChange` callbacks are\n // handled, see https://github.com/angular/angular/issues/39732 for additional info.\n if (this.form._onCollectionChange === this._onCollectionChange) {\n this.form._registerOnCollectionChange(() => {});\n }\n }\n }\n /**\n * @description\n * Returns this directive's instance.\n */\n get formDirective() {\n return this;\n }\n /**\n * @description\n * Returns the `FormGroup` bound to this directive.\n */\n get control() {\n return this.form;\n }\n /**\n * @description\n * Returns an array representing the path to this group. Because this directive\n * always lives at the top level of a form, it always an empty array.\n */\n get path() {\n return [];\n }\n /**\n * @description\n * Method that sets up the control directive in this group, re-calculates its value\n * and validity, and adds the instance to the internal list of directives.\n *\n * @param dir The `FormControlName` directive instance.\n */\n addControl(dir) {\n const ctrl = this.form.get(dir.path);\n setUpControl(ctrl, dir, this.callSetDisabledState);\n ctrl.updateValueAndValidity({\n emitEvent: false\n });\n this.directives.push(dir);\n return ctrl;\n }\n /**\n * @description\n * Retrieves the `FormControl` instance from the provided `FormControlName` directive\n *\n * @param dir The `FormControlName` directive instance.\n */\n getControl(dir) {\n return this.form.get(dir.path);\n }\n /**\n * @description\n * Removes the `FormControlName` instance from the internal list of directives\n *\n * @param dir The `FormControlName` directive instance.\n */\n removeControl(dir) {\n cleanUpControl(dir.control || null, dir, /* validateControlPresenceOnChange */false);\n removeListItem$1(this.directives, dir);\n }\n /**\n * Adds a new `FormGroupName` directive instance to the form.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n addFormGroup(dir) {\n this._setUpFormContainer(dir);\n }\n /**\n * Performs the necessary cleanup when a `FormGroupName` directive instance is removed from the\n * view.\n *\n * @param dir The `FormGroupName` directive instance.\n */\n removeFormGroup(dir) {\n this._cleanUpFormContainer(dir);\n }\n /**\n * @description\n * Retrieves the `FormGroup` for a provided `FormGroupName` directive instance\n *\n * @param dir The `FormGroupName` directive instance.\n */\n getFormGroup(dir) {\n return this.form.get(dir.path);\n }\n /**\n * Performs the necessary setup when a `FormArrayName` directive instance is added to the view.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n addFormArray(dir) {\n this._setUpFormContainer(dir);\n }\n /**\n * Performs the necessary cleanup when a `FormArrayName` directive instance is removed from the\n * view.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n removeFormArray(dir) {\n this._cleanUpFormContainer(dir);\n }\n /**\n * @description\n * Retrieves the `FormArray` for a provided `FormArrayName` directive instance.\n *\n * @param dir The `FormArrayName` directive instance.\n */\n getFormArray(dir) {\n return this.form.get(dir.path);\n }\n /**\n * Sets the new value for the provided `FormControlName` directive.\n *\n * @param dir The `FormControlName` directive instance.\n * @param value The new value for the directive's control.\n */\n updateModel(dir, value) {\n const ctrl = this.form.get(dir.path);\n ctrl.setValue(value);\n }\n /**\n * @description\n * Method called with the \"submit\" event is triggered on the form.\n * Triggers the `ngSubmit` emitter to emit the \"submit\" event as its payload.\n *\n * @param $event The \"submit\" event object\n */\n onSubmit($event) {\n this._submittedReactive.set(true);\n syncPendingControls(this.form, this.directives);\n this.ngSubmit.emit($event);\n this.form._events.next(new FormSubmittedEvent(this.control));\n // Forms with `method=\"dialog\"` have some special behavior that won't reload the page and that\n // shouldn't be prevented. Note that we need to null check the `event` and the `target`, because\n // some internal apps call this method directly with the wrong arguments.\n return $event?.target?.method === 'dialog';\n }\n /**\n * @description\n * Method called when the \"reset\" event is triggered on the form.\n */\n onReset() {\n this.resetForm();\n }\n /**\n * @description\n * Resets the form to an initial value and resets its submitted status.\n *\n * @param value The new value for the form, `undefined` by default\n */\n resetForm(value = undefined, options = {}) {\n this.form.reset(value, options);\n this._submittedReactive.set(false);\n if (options?.emitEvent !== false) {\n this.form._events.next(new FormResetEvent(this.form));\n }\n }\n /** @internal */\n _updateDomValue() {\n this.directives.forEach(dir => {\n const oldCtrl = dir.control;\n const newCtrl = this.form.get(dir.path);\n if (oldCtrl !== newCtrl) {\n // Note: the value of the `dir.control` may not be defined, for example when it's a first\n // `FormControl` that is added to a `FormGroup` instance (via `addControl` call).\n cleanUpControl(oldCtrl || null, dir);\n // Check whether new control at the same location inside the corresponding `FormGroup` is an\n // instance of `FormControl` and perform control setup only if that's the case.\n // Note: we don't need to clear the list of directives (`this.directives`) here, it would be\n // taken care of in the `removeControl` method invoked when corresponding `formControlName`\n // directive instance is being removed (invoked from `FormControlName.ngOnDestroy`).\n if (isFormControl(newCtrl)) {\n setUpControl(newCtrl, dir, this.callSetDisabledState);\n dir.control = newCtrl;\n }\n }\n });\n this.form._updateTreeValidity({\n emitEvent: false\n });\n }\n _setUpFormContainer(dir) {\n const ctrl = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n // NOTE: this operation looks unnecessary in case no new validators were added in\n // `setUpFormContainer` call. Consider updating this code to match the logic in\n // `_cleanUpFormContainer` function.\n ctrl.updateValueAndValidity({\n emitEvent: false\n });\n }\n _cleanUpFormContainer(dir) {\n if (this.form) {\n const ctrl = this.form.get(dir.path);\n if (ctrl) {\n const isControlUpdated = cleanUpFormContainer(ctrl, dir);\n if (isControlUpdated) {\n // Run validity check only in case a control was updated (i.e. view validators were\n // removed) as removing view validators might cause validity to change.\n ctrl.updateValueAndValidity({\n emitEvent: false\n });\n }\n }\n }\n }\n _updateRegistrations() {\n this.form._registerOnCollectionChange(this._onCollectionChange);\n if (this._oldForm) {\n this._oldForm._registerOnCollectionChange(() => {});\n }\n }\n _updateValidators() {\n setUpValidators(this.form, this);\n if (this._oldForm) {\n cleanUpValidators(this._oldForm, this);\n }\n }\n static ɵfac = function FormGroupDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormGroupDirective)(i0.ɵɵdirectiveInject(NG_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10), i0.ɵɵdirectiveInject(CALL_SET_DISABLED_STATE, 8));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FormGroupDirective,\n selectors: [[\"\", \"formGroup\", \"\"]],\n hostBindings: function FormGroupDirective_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"submit\", function FormGroupDirective_submit_HostBindingHandler($event) {\n return ctx.onSubmit($event);\n })(\"reset\", function FormGroupDirective_reset_HostBindingHandler() {\n return ctx.onReset();\n });\n }\n },\n inputs: {\n form: [0, \"formGroup\", \"form\"]\n },\n outputs: {\n ngSubmit: \"ngSubmit\"\n },\n exportAs: [\"ngForm\"],\n standalone: false,\n features: [i0.ɵɵProvidersFeature([formDirectiveProvider]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(FormGroupDirective, [{\n type: Directive,\n args: [{\n selector: '[formGroup]',\n providers: [formDirectiveProvider],\n host: {\n '(submit)': 'onSubmit($event)',\n '(reset)': 'onReset()'\n },\n exportAs: 'ngForm',\n standalone: false\n }]\n }], () => [{\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_VALIDATORS]\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_ASYNC_VALIDATORS]\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CALL_SET_DISABLED_STATE]\n }]\n }], {\n form: [{\n type: Input,\n args: ['formGroup']\n }],\n ngSubmit: [{\n type: Output\n }]\n });\n})();\nconst formGroupNameProvider = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupName)\n};\n/**\n * @description\n *\n * Syncs a nested `FormGroup` or `FormRecord` to a DOM element.\n *\n * This directive can only be used with a parent `FormGroupDirective`.\n *\n * It accepts the string name of the nested `FormGroup` or `FormRecord` to link, and\n * looks for a `FormGroup` or `FormRecord` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n *\n * Use nested form groups to validate a sub-group of a\n * form separately from the rest or to group the values of certain\n * controls into their own nested object.\n *\n * @see [Reactive Forms Guide](guide/forms/reactive-forms)\n *\n * @usageNotes\n *\n * ### Access the group by name\n *\n * The following example uses the `AbstractControl.get` method to access the\n * associated `FormGroup`\n *\n * ```ts\n * this.form.get('name');\n * ```\n *\n * ### Access individual controls in the group\n *\n * The following example uses the `AbstractControl.get` method to access\n * individual controls within the group using dot syntax.\n *\n * ```ts\n * this.form.get('name.first');\n * ```\n *\n * ### Register a nested `FormGroup`.\n *\n * The following example registers a nested *name* `FormGroup` within an existing `FormGroup`,\n * and provides methods to retrieve the nested `FormGroup` and individual controls.\n *\n * {@example forms/ts/nestedFormGroup/nested_form_group_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\nclass FormGroupName extends AbstractFormGroupDirective {\n /**\n * @description\n * Tracks the name of the `FormGroup` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n * Accepts a name as a string or a number.\n * The name in the form of a string is useful for individual forms,\n * while the numerical form allows for form groups to be bound\n * to indices when iterating over groups in a `FormArray`.\n */\n name = null;\n constructor(parent, validators, asyncValidators) {\n super();\n this._parent = parent;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n }\n /** @internal */\n _checkParentType() {\n if (hasInvalidParent(this._parent) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw groupParentException();\n }\n }\n static ɵfac = function FormGroupName_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormGroupName)(i0.ɵɵdirectiveInject(ControlContainer, 13), i0.ɵɵdirectiveInject(NG_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FormGroupName,\n selectors: [[\"\", \"formGroupName\", \"\"]],\n inputs: {\n name: [0, \"formGroupName\", \"name\"]\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([formGroupNameProvider]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(FormGroupName, [{\n type: Directive,\n args: [{\n selector: '[formGroupName]',\n providers: [formGroupNameProvider],\n standalone: false\n }]\n }], () => [{\n type: ControlContainer,\n decorators: [{\n type: Optional\n }, {\n type: Host\n }, {\n type: SkipSelf\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_VALIDATORS]\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_ASYNC_VALIDATORS]\n }]\n }], {\n name: [{\n type: Input,\n args: ['formGroupName']\n }]\n });\n})();\nconst formArrayNameProvider = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormArrayName)\n};\n/**\n * @description\n *\n * Syncs a nested `FormArray` to a DOM element.\n *\n * This directive is designed to be used with a parent `FormGroupDirective` (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the nested `FormArray` you want to link, and\n * will look for a `FormArray` registered with that name in the parent\n * `FormGroup` instance you passed into `FormGroupDirective`.\n *\n * @see [Reactive Forms Guide](guide/forms/reactive-forms)\n * @see {@link AbstractControl}\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example forms/ts/nestedFormArray/nested_form_array_example.ts region='Component'}\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\nclass FormArrayName extends ControlContainer {\n /** @internal */\n _parent;\n /**\n * @description\n * Tracks the name of the `FormArray` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n * Accepts a name as a string or a number.\n * The name in the form of a string is useful for individual forms,\n * while the numerical form allows for form arrays to be bound\n * to indices when iterating over arrays in a `FormArray`.\n */\n name = null;\n constructor(parent, validators, asyncValidators) {\n super();\n this._parent = parent;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n }\n /**\n * A lifecycle method called when the directive's inputs are initialized. For internal use only.\n * @throws If the directive does not have a valid parent.\n * @docs-private\n */\n ngOnInit() {\n if (hasInvalidParent(this._parent) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw arrayParentException();\n }\n this.formDirective.addFormArray(this);\n }\n /**\n * A lifecycle method called before the directive's instance is destroyed. For internal use only.\n * @docs-private\n */\n ngOnDestroy() {\n this.formDirective?.removeFormArray(this);\n }\n /**\n * @description\n * The `FormArray` bound to this directive.\n */\n get control() {\n return this.formDirective.getFormArray(this);\n }\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective() {\n return this._parent ? this._parent.formDirective : null;\n }\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path() {\n return controlPath(this.name == null ? this.name : this.name.toString(), this._parent);\n }\n static ɵfac = function FormArrayName_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormArrayName)(i0.ɵɵdirectiveInject(ControlContainer, 13), i0.ɵɵdirectiveInject(NG_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FormArrayName,\n selectors: [[\"\", \"formArrayName\", \"\"]],\n inputs: {\n name: [0, \"formArrayName\", \"name\"]\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([formArrayNameProvider]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(FormArrayName, [{\n type: Directive,\n args: [{\n selector: '[formArrayName]',\n providers: [formArrayNameProvider],\n standalone: false\n }]\n }], () => [{\n type: ControlContainer,\n decorators: [{\n type: Optional\n }, {\n type: Host\n }, {\n type: SkipSelf\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_VALIDATORS]\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_ASYNC_VALIDATORS]\n }]\n }], {\n name: [{\n type: Input,\n args: ['formArrayName']\n }]\n });\n})();\nfunction hasInvalidParent(parent) {\n return !(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) && !(parent instanceof FormArrayName);\n}\nconst controlNameBinding = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlName)\n};\n/**\n * @description\n * Syncs a `FormControl` in an existing `FormGroup` to a form control\n * element by name.\n *\n * @see [Reactive Forms Guide](guide/forms/reactive-forms)\n * @see {@link FormControl}\n * @see {@link AbstractControl}\n *\n * @usageNotes\n *\n * ### Register `FormControl` within a group\n *\n * The following example shows how to register multiple form controls within a form group\n * and set their value.\n *\n * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * To see `formControlName` examples with different form control types, see:\n *\n * * Radio buttons: `RadioControlValueAccessor`\n * * Selects: `SelectControlValueAccessor`\n *\n * ### Use with ngModel is deprecated\n *\n * Support for using the `ngModel` input property and `ngModelChange` event with reactive\n * form directives has been deprecated in Angular v6 and is scheduled for removal in\n * a future version of Angular.\n *\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\nclass FormControlName extends NgControl {\n _ngModelWarningConfig;\n _added = false;\n /**\n * Internal reference to the view model value.\n * @internal\n */\n viewModel;\n /**\n * @description\n * Tracks the `FormControl` instance bound to the directive.\n */\n control;\n /**\n * @description\n * Tracks the name of the `FormControl` bound to the directive. The name corresponds\n * to a key in the parent `FormGroup` or `FormArray`.\n * Accepts a name as a string or a number.\n * The name in the form of a string is useful for individual forms,\n * while the numerical form allows for form controls to be bound\n * to indices when iterating over controls in a `FormArray`.\n */\n name = null;\n /**\n * @description\n * Triggers a warning in dev mode that this input should not be used with reactive forms.\n */\n set isDisabled(isDisabled) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(disabledAttrWarning);\n }\n }\n // TODO(kara): remove next 4 properties once deprecation period is over\n /** @deprecated as of v6 */\n model;\n /** @deprecated as of v6 */\n update = new EventEmitter();\n /**\n * @description\n * Static property used to track whether any ngModel warnings have been sent across\n * all instances of FormControlName. Used to support warning config of \"once\".\n *\n * @internal\n */\n static _ngModelWarningSentOnce = false;\n /**\n * @description\n * Instance property used to track whether an ngModel warning has been sent out for this\n * particular FormControlName instance. Used to support warning config of \"always\".\n *\n * @internal\n */\n _ngModelWarningSent = false;\n constructor(parent, validators, asyncValidators, valueAccessors, _ngModelWarningConfig) {\n super();\n this._ngModelWarningConfig = _ngModelWarningConfig;\n this._parent = parent;\n this._setValidators(validators);\n this._setAsyncValidators(asyncValidators);\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n /** @docs-private */\n ngOnChanges(changes) {\n if (!this._added) this._setUpControl();\n if (isPropertyUpdated(changes, this.viewModel)) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n _ngModelWarning('formControlName', FormControlName, this, this._ngModelWarningConfig);\n }\n this.viewModel = this.model;\n this.formDirective.updateModel(this, this.model);\n }\n }\n /** @docs-private */\n ngOnDestroy() {\n if (this.formDirective) {\n this.formDirective.removeControl(this);\n }\n }\n /**\n * @description\n * Sets the new value for the view model and emits an `ngModelChange` event.\n *\n * @param newValue The new value for the view model.\n */\n viewToModelUpdate(newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n /**\n * @description\n * Returns an array that represents the path from the top-level form to this control.\n * Each index is the string name of the control on that level.\n */\n get path() {\n return controlPath(this.name == null ? this.name : this.name.toString(), this._parent);\n }\n /**\n * @description\n * The top-level directive for this group if present, otherwise null.\n */\n get formDirective() {\n return this._parent ? this._parent.formDirective : null;\n }\n _setUpControl() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n checkParentType(this._parent, this.name);\n }\n this.control = this.formDirective.addControl(this);\n this._added = true;\n }\n static ɵfac = function FormControlName_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormControlName)(i0.ɵɵdirectiveInject(ControlContainer, 13), i0.ɵɵdirectiveInject(NG_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10), i0.ɵɵdirectiveInject(NG_VALUE_ACCESSOR, 10), i0.ɵɵdirectiveInject(NG_MODEL_WITH_FORM_CONTROL_WARNING, 8));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FormControlName,\n selectors: [[\"\", \"formControlName\", \"\"]],\n inputs: {\n name: [0, \"formControlName\", \"name\"],\n isDisabled: [0, \"disabled\", \"isDisabled\"],\n model: [0, \"ngModel\", \"model\"]\n },\n outputs: {\n update: \"ngModelChange\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([controlNameBinding]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(FormControlName, [{\n type: Directive,\n args: [{\n selector: '[formControlName]',\n providers: [controlNameBinding],\n standalone: false\n }]\n }], () => [{\n type: ControlContainer,\n decorators: [{\n type: Optional\n }, {\n type: Host\n }, {\n type: SkipSelf\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_VALIDATORS]\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_ASYNC_VALIDATORS]\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_VALUE_ACCESSOR]\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [NG_MODEL_WITH_FORM_CONTROL_WARNING]\n }]\n }], {\n name: [{\n type: Input,\n args: ['formControlName']\n }],\n isDisabled: [{\n type: Input,\n args: ['disabled']\n }],\n model: [{\n type: Input,\n args: ['ngModel']\n }],\n update: [{\n type: Output,\n args: ['ngModelChange']\n }]\n });\n})();\nfunction checkParentType(parent, name) {\n if (!(parent instanceof FormGroupName) && parent instanceof AbstractFormGroupDirective) {\n throw ngModelGroupException();\n } else if (!(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) && !(parent instanceof FormArrayName)) {\n throw controlParentException(name);\n }\n}\nconst SELECT_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectControlValueAccessor),\n multi: true\n};\nfunction _buildValueString$1(id, value) {\n if (id == null) return `${value}`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\nfunction _extractId$1(valueString) {\n return valueString.split(':')[0];\n}\n/**\n * @description\n * The `ControlValueAccessor` for writing select control values and listening to select control\n * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using select controls in a reactive form\n *\n * The following examples show how to use a select control in a reactive form.\n *\n * {@example forms/ts/reactiveSelectControl/reactive_select_control_example.ts region='Component'}\n *\n * ### Using select controls in a template-driven form\n *\n * To use a select in a template-driven form, simply add an `ngModel` and a `name`\n * attribute to the main `<select>` tag.\n *\n * {@example forms/ts/selectControl/select_control_example.ts region='Component'}\n *\n * ### Customizing option selection\n *\n * Angular uses object identity to select option. It's possible for the identities of items\n * to change while the data does not. This can happen, for example, if the items are produced\n * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the\n * second response will produce objects with different identities.\n *\n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * `compareWith` takes a **function** which has two arguments: `option1` and `option2`.\n * If `compareWith` is given, Angular selects option by the return value of the function.\n *\n * ```ts\n * const selectedCountriesControl = new FormControl();\n * ```\n *\n * ```html\n * <select [compareWith]=\"compareFn\" [formControl]=\"selectedCountriesControl\">\n * @for(country of countries; track $index) {\n * <option[ngValue]=\"country\">{{country.name}}</option>\n * }\n * </select>\n *\n * compareFn(c1: Country, c2: Country): boolean {\n * return c1 && c2 ? c1.id === c2.id : c1 === c2;\n * }\n * ```\n *\n * **Note:** We listen to the 'change' event because 'input' events aren't fired\n * for selects in IE, see:\n * https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/input_event#browser_compatibility\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\nclass SelectControlValueAccessor extends BuiltInControlValueAccessor {\n /** @docs-private */\n value;\n /** @internal */\n _optionMap = new Map();\n /** @internal */\n _idCounter = 0;\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n set compareWith(fn) {\n if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw new _RuntimeError(1201 /* RuntimeErrorCode.COMPAREWITH_NOT_A_FN */, `compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n _compareWith = Object.is;\n // We need this because we might be in the process of destroying the root\n // injector, which is marked as destroyed before running destroy hooks.\n // Attempting to use afterNextRender with the node injector would evntually\n // run into that already destroyed injector.\n appRefInjector = inject(ApplicationRef).injector;\n destroyRef = inject(DestroyRef);\n cdr = inject(ChangeDetectorRef);\n _queuedWrite = false;\n /**\n * This is needed to efficiently set the select value when adding/removing options. If\n * writeValue is instead called for every added/removed option, this results in exponentially\n * more _compareValue calls than the number of option elements (issue #41330).\n *\n * Secondly, calling writeValue when rendering individual option elements instead of after they\n * are all rendered caused an issue in Safari and IE 11 where the first option element failed\n * to be deselected when no option matched the select ngModel. This was because Angular would\n * set the select element's value property before appending the option's child text node to the\n * DOM (issue #14505).\n *\n * Finally, this approach is necessary to avoid an issue with delayed element removal when\n * using the animations module (in all browsers). Otherwise when a selected option is removed\n * (so no option matches the ngModel anymore), Angular would change the select element value\n * before actually removing the option from the DOM. Then when the option is finally removed\n * from the DOM, the browser would change the select value to that of the first option, even\n * though it doesn't match the ngModel (issue #18430).\n *\n * @internal\n */\n _writeValueAfterRender() {\n if (this._queuedWrite || this.appRefInjector.destroyed) {\n return;\n }\n this._queuedWrite = true;\n afterNextRender({\n write: () => {\n if (this.destroyRef.destroyed) {\n return;\n }\n this._queuedWrite = false;\n this.writeValue(this.value);\n }\n }, {\n injector: this.appRefInjector\n });\n }\n /**\n * Sets the \"value\" property on the select element.\n * @docs-private\n */\n writeValue(value) {\n // TODO(atscott): This could likely be optimized more by only marking for check if the value is changed\n // note that this needs to include both the internal value and the value in the DOM.\n this.cdr.markForCheck();\n this.value = value;\n const id = this._getOptionId(value);\n const valueString = _buildValueString$1(id, value);\n this.setProperty('value', valueString);\n }\n /**\n * Registers a function called when the control value changes.\n * @docs-private\n */\n registerOnChange(fn) {\n this.onChange = valueString => {\n this.value = this._getOptionValue(valueString);\n fn(this.value);\n };\n }\n /** @internal */\n _registerOption() {\n return (this._idCounter++).toString();\n }\n /** @internal */\n _getOptionId(value) {\n for (const id of this._optionMap.keys()) {\n if (this._compareWith(this._optionMap.get(id), value)) return id;\n }\n return null;\n }\n /** @internal */\n _getOptionValue(valueString) {\n const id = _extractId$1(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵSelectControlValueAccessor_BaseFactory;\n return function SelectControlValueAccessor_Factory(__ngFactoryType__) {\n return (ɵSelectControlValueAccessor_BaseFactory || (ɵSelectControlValueAccessor_BaseFactory = i0.ɵɵgetInheritedFactory(SelectControlValueAccessor)))(__ngFactoryType__ || SelectControlValueAccessor);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: SelectControlValueAccessor,\n selectors: [[\"select\", \"formControlName\", \"\", 3, \"multiple\", \"\"], [\"select\", \"formControl\", \"\", 3, \"multiple\", \"\"], [\"select\", \"ngModel\", \"\", 3, \"multiple\", \"\"]],\n hostBindings: function SelectControlValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"change\", function SelectControlValueAccessor_change_HostBindingHandler($event) {\n return ctx.onChange($event.target.value);\n })(\"blur\", function SelectControlValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n inputs: {\n compareWith: \"compareWith\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([SELECT_VALUE_ACCESSOR]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(SelectControlValueAccessor, [{\n type: Directive,\n args: [{\n selector: 'select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]',\n host: {\n '(change)': 'onChange($any($event.target).value)',\n '(blur)': 'onTouched()'\n },\n providers: [SELECT_VALUE_ACCESSOR],\n standalone: false\n }]\n }], null, {\n compareWith: [{\n type: Input\n }]\n });\n})();\n/**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see {@link SelectControlValueAccessor}\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\nclass NgSelectOption {\n _element;\n _renderer;\n _select;\n /**\n * @description\n * ID of the option element\n */\n id;\n constructor(_element, _renderer, _select) {\n this._element = _element;\n this._renderer = _renderer;\n this._select = _select;\n if (this._select) this.id = this._select._registerOption();\n }\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n set ngValue(value) {\n if (this._select == null) return;\n this._select._optionMap.set(this.id, value);\n this._setElementValue(_buildValueString$1(this.id, value));\n this._select._writeValueAfterRender();\n }\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n set value(value) {\n this._setElementValue(value);\n if (this._select) this._select._writeValueAfterRender();\n }\n /** @internal */\n _setElementValue(value) {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n /** @docs-private */\n ngOnDestroy() {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select._writeValueAfterRender();\n }\n }\n static ɵfac = function NgSelectOption_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgSelectOption)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(SelectControlValueAccessor, 9));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgSelectOption,\n selectors: [[\"option\"]],\n inputs: {\n ngValue: \"ngValue\",\n value: \"value\"\n },\n standalone: false\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgSelectOption, [{\n type: Directive,\n args: [{\n selector: 'option',\n standalone: false\n }]\n }], () => [{\n type: i0.ElementRef\n }, {\n type: i0.Renderer2\n }, {\n type: SelectControlValueAccessor,\n decorators: [{\n type: Optional\n }, {\n type: Host\n }]\n }], {\n ngValue: [{\n type: Input,\n args: ['ngValue']\n }],\n value: [{\n type: Input,\n args: ['value']\n }]\n });\n})();\nconst SELECT_MULTIPLE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectMultipleControlValueAccessor),\n multi: true\n};\nfunction _buildValueString(id, value) {\n if (id == null) return `${value}`;\n if (typeof value === 'string') value = `'${value}'`;\n if (value && typeof value === 'object') value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\nfunction _extractId(valueString) {\n return valueString.split(':')[0];\n}\n/**\n * @description\n * The `ControlValueAccessor` for writing multi-select control values and listening to multi-select\n * control changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @see {@link SelectControlValueAccessor}\n *\n * @usageNotes\n *\n * ### Using a multi-select control\n *\n * The follow example shows you how to use a multi-select control with a reactive form.\n *\n * ```ts\n * const countryControl = new FormControl();\n * ```\n *\n * ```html\n * <select multiple name=\"countries\" [formControl]=\"countryControl\">\n * @for(country of countries; track $index) {\n * <option [ngValue]=\"country\">{{ country.name }}</option>\n * }\n * </select>\n * ```\n *\n * ### Customizing option selection\n *\n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * See the `SelectControlValueAccessor` for usage.\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\nclass SelectMultipleControlValueAccessor extends BuiltInControlValueAccessor {\n /**\n * The current value.\n * @docs-private\n */\n value;\n /** @internal */\n _optionMap = new Map();\n /** @internal */\n _idCounter = 0;\n /**\n * @description\n * Tracks the option comparison algorithm for tracking identities when\n * checking for changes.\n */\n set compareWith(fn) {\n if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw new _RuntimeError(1201 /* RuntimeErrorCode.COMPAREWITH_NOT_A_FN */, `compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n _compareWith = Object.is;\n /**\n * Sets the \"value\" property on one or of more of the select's options.\n * @docs-private\n */\n writeValue(value) {\n this.value = value;\n let optionSelectedStateSetter;\n if (Array.isArray(value)) {\n // convert values to ids\n const ids = value.map(v => this._getOptionId(v));\n optionSelectedStateSetter = (opt, o) => {\n opt._setSelected(ids.indexOf(o.toString()) > -1);\n };\n } else {\n optionSelectedStateSetter = (opt, o) => {\n opt._setSelected(false);\n };\n }\n this._optionMap.forEach(optionSelectedStateSetter);\n }\n /**\n * Registers a function called when the control value changes\n * and writes an array of the selected options.\n * @docs-private\n */\n registerOnChange(fn) {\n this.onChange = element => {\n const selected = [];\n const selectedOptions = element.selectedOptions;\n if (selectedOptions !== undefined) {\n const options = selectedOptions;\n for (let i = 0; i < options.length; i++) {\n const opt = options[i];\n const val = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n // Degrade to use `options` when `selectedOptions` property is not available.\n // Note: the `selectedOptions` is available in all supported browsers, but the Domino lib\n // doesn't have it currently, see https://github.com/fgnass/domino/issues/177.\n else {\n const options = element.options;\n for (let i = 0; i < options.length; i++) {\n const opt = options[i];\n if (opt.selected) {\n const val = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n }\n this.value = selected;\n fn(selected);\n };\n }\n /** @internal */\n _registerOption(value) {\n const id = (this._idCounter++).toString();\n this._optionMap.set(id, value);\n return id;\n }\n /** @internal */\n _getOptionId(value) {\n for (const id of this._optionMap.keys()) {\n if (this._compareWith(this._optionMap.get(id)._value, value)) return id;\n }\n return null;\n }\n /** @internal */\n _getOptionValue(valueString) {\n const id = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id)._value : valueString;\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵSelectMultipleControlValueAccessor_BaseFactory;\n return function SelectMultipleControlValueAccessor_Factory(__ngFactoryType__) {\n return (ɵSelectMultipleControlValueAccessor_BaseFactory || (ɵSelectMultipleControlValueAccessor_BaseFactory = i0.ɵɵgetInheritedFactory(SelectMultipleControlValueAccessor)))(__ngFactoryType__ || SelectMultipleControlValueAccessor);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: SelectMultipleControlValueAccessor,\n selectors: [[\"select\", \"multiple\", \"\", \"formControlName\", \"\"], [\"select\", \"multiple\", \"\", \"formControl\", \"\"], [\"select\", \"multiple\", \"\", \"ngModel\", \"\"]],\n hostBindings: function SelectMultipleControlValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"change\", function SelectMultipleControlValueAccessor_change_HostBindingHandler($event) {\n return ctx.onChange($event.target);\n })(\"blur\", function SelectMultipleControlValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n inputs: {\n compareWith: \"compareWith\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([SELECT_MULTIPLE_VALUE_ACCESSOR]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(SelectMultipleControlValueAccessor, [{\n type: Directive,\n args: [{\n selector: 'select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]',\n host: {\n '(change)': 'onChange($event.target)',\n '(blur)': 'onTouched()'\n },\n providers: [SELECT_MULTIPLE_VALUE_ACCESSOR],\n standalone: false\n }]\n }], null, {\n compareWith: [{\n type: Input\n }]\n });\n})();\n/**\n * @description\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * @see {@link SelectMultipleControlValueAccessor}\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\nclass ɵNgSelectMultipleOption {\n _element;\n _renderer;\n _select;\n id;\n /** @internal */\n _value;\n constructor(_element, _renderer, _select) {\n this._element = _element;\n this._renderer = _renderer;\n this._select = _select;\n if (this._select) {\n this.id = this._select._registerOption(this);\n }\n }\n /**\n * @description\n * Tracks the value bound to the option element. Unlike the value binding,\n * ngValue supports binding to objects.\n */\n set ngValue(value) {\n if (this._select == null) return;\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n /**\n * @description\n * Tracks simple string values bound to the option element.\n * For objects, use the `ngValue` input binding.\n */\n set value(value) {\n if (this._select) {\n this._value = value;\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n } else {\n this._setElementValue(value);\n }\n }\n /** @internal */\n _setElementValue(value) {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n /** @internal */\n _setSelected(selected) {\n this._renderer.setProperty(this._element.nativeElement, 'selected', selected);\n }\n /** @docs-private */\n ngOnDestroy() {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n static ɵfac = function ɵNgSelectMultipleOption_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ɵNgSelectMultipleOption)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(SelectMultipleControlValueAccessor, 9));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: ɵNgSelectMultipleOption,\n selectors: [[\"option\"]],\n inputs: {\n ngValue: \"ngValue\",\n value: \"value\"\n },\n standalone: false\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(ɵNgSelectMultipleOption, [{\n type: Directive,\n args: [{\n selector: 'option',\n standalone: false\n }]\n }], () => [{\n type: i0.ElementRef\n }, {\n type: i0.Renderer2\n }, {\n type: SelectMultipleControlValueAccessor,\n decorators: [{\n type: Optional\n }, {\n type: Host\n }]\n }], {\n ngValue: [{\n type: Input,\n args: ['ngValue']\n }],\n value: [{\n type: Input,\n args: ['value']\n }]\n });\n})();\n\n/**\n * Method that updates string to integer if not already a number\n *\n * @param value The value to convert to integer.\n * @returns value of parameter converted to number or integer.\n */\nfunction toInteger(value) {\n return typeof value === 'number' ? value : parseInt(value, 10);\n}\n/**\n * Method that ensures that provided value is a float (and converts it to float if needed).\n *\n * @param value The value to convert to float.\n * @returns value of parameter converted to number or float.\n */\nfunction toFloat(value) {\n return typeof value === 'number' ? value : parseFloat(value);\n}\n/**\n * A base class for Validator-based Directives. The class contains common logic shared across such\n * Directives.\n *\n * For internal use only, this class is not intended for use outside of the Forms package.\n */\nclass AbstractValidatorDirective {\n _validator = nullValidator;\n _onChange;\n /**\n * A flag that tracks whether this validator is enabled.\n *\n * Marking it `internal` (vs `protected`), so that this flag can be used in host bindings of\n * directive classes that extend this base class.\n * @internal\n */\n _enabled;\n /** @docs-private */\n ngOnChanges(changes) {\n if (this.inputName in changes) {\n const input = this.normalizeInput(changes[this.inputName].currentValue);\n this._enabled = this.enabled(input);\n this._validator = this._enabled ? this.createValidator(input) : nullValidator;\n if (this._onChange) {\n this._onChange();\n }\n }\n }\n /** @docs-private */\n validate(control) {\n return this._validator(control);\n }\n /** @docs-private */\n registerOnValidatorChange(fn) {\n this._onChange = fn;\n }\n /**\n * @description\n * Determines whether this validator should be active or not based on an input.\n * Base class implementation checks whether an input is defined (if the value is different from\n * `null` and `undefined`). Validator classes that extend this base class can override this\n * function with the logic specific to a particular validator directive.\n */\n enabled(input) {\n return input != null /* both `null` and `undefined` */;\n }\n static ɵfac = function AbstractValidatorDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || AbstractValidatorDirective)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: AbstractValidatorDirective,\n features: [i0.ɵɵNgOnChangesFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(AbstractValidatorDirective, [{\n type: Directive\n }], null, null);\n})();\n/**\n * @description\n * Provider which adds `MaxValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nconst MAX_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaxValidator),\n multi: true\n};\n/**\n * A directive which installs the {@link MaxValidator} for any `formControlName`,\n * `formControl`, or control with `ngModel` that also has a `max` attribute.\n *\n * @see [Form Validation](guide/forms/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a max validator\n *\n * The following example shows how to add a max validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input type=\"number\" ngModel max=\"4\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\nclass MaxValidator extends AbstractValidatorDirective {\n /**\n * @description\n * Tracks changes to the max bound to this directive.\n */\n max;\n /** @internal */\n inputName = 'max';\n /** @internal */\n normalizeInput = input => toFloat(input);\n /** @internal */\n createValidator = max => maxValidator(max);\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMaxValidator_BaseFactory;\n return function MaxValidator_Factory(__ngFactoryType__) {\n return (ɵMaxValidator_BaseFactory || (ɵMaxValidator_BaseFactory = i0.ɵɵgetInheritedFactory(MaxValidator)))(__ngFactoryType__ || MaxValidator);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MaxValidator,\n selectors: [[\"input\", \"type\", \"number\", \"max\", \"\", \"formControlName\", \"\"], [\"input\", \"type\", \"number\", \"max\", \"\", \"formControl\", \"\"], [\"input\", \"type\", \"number\", \"max\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function MaxValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"max\", ctx._enabled ? ctx.max : null);\n }\n },\n inputs: {\n max: \"max\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([MAX_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MaxValidator, [{\n type: Directive,\n args: [{\n selector: 'input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]',\n providers: [MAX_VALIDATOR],\n host: {\n '[attr.max]': '_enabled ? max : null'\n },\n standalone: false\n }]\n }], null, {\n max: [{\n type: Input\n }]\n });\n})();\n/**\n * @description\n * Provider which adds `MinValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nconst MIN_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MinValidator),\n multi: true\n};\n/**\n * A directive which installs the {@link MinValidator} for any `formControlName`,\n * `formControl`, or control with `ngModel` that also has a `min` attribute.\n *\n * @see [Form Validation](guide/forms/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a min validator\n *\n * The following example shows how to add a min validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input type=\"number\" ngModel min=\"4\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\nclass MinValidator extends AbstractValidatorDirective {\n /**\n * @description\n * Tracks changes to the min bound to this directive.\n */\n min;\n /** @internal */\n inputName = 'min';\n /** @internal */\n normalizeInput = input => toFloat(input);\n /** @internal */\n createValidator = min => minValidator(min);\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMinValidator_BaseFactory;\n return function MinValidator_Factory(__ngFactoryType__) {\n return (ɵMinValidator_BaseFactory || (ɵMinValidator_BaseFactory = i0.ɵɵgetInheritedFactory(MinValidator)))(__ngFactoryType__ || MinValidator);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MinValidator,\n selectors: [[\"input\", \"type\", \"number\", \"min\", \"\", \"formControlName\", \"\"], [\"input\", \"type\", \"number\", \"min\", \"\", \"formControl\", \"\"], [\"input\", \"type\", \"number\", \"min\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function MinValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"min\", ctx._enabled ? ctx.min : null);\n }\n },\n inputs: {\n min: \"min\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([MIN_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MinValidator, [{\n type: Directive,\n args: [{\n selector: 'input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]',\n providers: [MIN_VALIDATOR],\n host: {\n '[attr.min]': '_enabled ? min : null'\n },\n standalone: false\n }]\n }], null, {\n min: [{\n type: Input\n }]\n });\n})();\n/**\n * @description\n * Provider which adds `RequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nconst REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => RequiredValidator),\n multi: true\n};\n/**\n * @description\n * Provider which adds `CheckboxRequiredValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nconst CHECKBOX_REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CheckboxRequiredValidator),\n multi: true\n};\n/**\n * @description\n * A directive that adds the `required` validator to any controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/forms/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a required validator using template-driven forms\n *\n * ```html\n * <input name=\"fullName\" ngModel required>\n * ```\n *\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n * @publicApi\n */\nclass RequiredValidator extends AbstractValidatorDirective {\n /**\n * @description\n * Tracks changes to the required attribute bound to this directive.\n */\n required;\n /** @internal */\n inputName = 'required';\n /** @internal */\n normalizeInput = booleanAttribute;\n /** @internal */\n createValidator = input => requiredValidator;\n /** @docs-private */\n enabled(input) {\n return input;\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵRequiredValidator_BaseFactory;\n return function RequiredValidator_Factory(__ngFactoryType__) {\n return (ɵRequiredValidator_BaseFactory || (ɵRequiredValidator_BaseFactory = i0.ɵɵgetInheritedFactory(RequiredValidator)))(__ngFactoryType__ || RequiredValidator);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: RequiredValidator,\n selectors: [[\"\", \"required\", \"\", \"formControlName\", \"\", 3, \"type\", \"checkbox\"], [\"\", \"required\", \"\", \"formControl\", \"\", 3, \"type\", \"checkbox\"], [\"\", \"required\", \"\", \"ngModel\", \"\", 3, \"type\", \"checkbox\"]],\n hostVars: 1,\n hostBindings: function RequiredValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"required\", ctx._enabled ? \"\" : null);\n }\n },\n inputs: {\n required: \"required\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([REQUIRED_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RequiredValidator, [{\n type: Directive,\n args: [{\n selector: ':not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]',\n providers: [REQUIRED_VALIDATOR],\n host: {\n '[attr.required]': '_enabled ? \"\" : null'\n },\n standalone: false\n }]\n }], null, {\n required: [{\n type: Input\n }]\n });\n})();\n/**\n * A Directive that adds the `required` validator to checkbox controls marked with the\n * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/forms/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a required checkbox validator using template-driven forms\n *\n * The following example shows how to add a checkbox required validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input type=\"checkbox\" name=\"active\" ngModel required>\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\nclass CheckboxRequiredValidator extends RequiredValidator {\n /** @internal */\n createValidator = input => requiredTrueValidator;\n static ɵfac = /* @__PURE__ */(() => {\n let ɵCheckboxRequiredValidator_BaseFactory;\n return function CheckboxRequiredValidator_Factory(__ngFactoryType__) {\n return (ɵCheckboxRequiredValidator_BaseFactory || (ɵCheckboxRequiredValidator_BaseFactory = i0.ɵɵgetInheritedFactory(CheckboxRequiredValidator)))(__ngFactoryType__ || CheckboxRequiredValidator);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CheckboxRequiredValidator,\n selectors: [[\"input\", \"type\", \"checkbox\", \"required\", \"\", \"formControlName\", \"\"], [\"input\", \"type\", \"checkbox\", \"required\", \"\", \"formControl\", \"\"], [\"input\", \"type\", \"checkbox\", \"required\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function CheckboxRequiredValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"required\", ctx._enabled ? \"\" : null);\n }\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([CHECKBOX_REQUIRED_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CheckboxRequiredValidator, [{\n type: Directive,\n args: [{\n selector: 'input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]',\n providers: [CHECKBOX_REQUIRED_VALIDATOR],\n host: {\n '[attr.required]': '_enabled ? \"\" : null'\n },\n standalone: false\n }]\n }], null, null);\n})();\n/**\n * @description\n * Provider which adds `EmailValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nconst EMAIL_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => EmailValidator),\n multi: true\n};\n/**\n * A directive that adds the `email` validator to controls marked with the\n * `email` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * The email validation is based on the WHATWG HTML specification with some enhancements to\n * incorporate more RFC rules. More information can be found on the [Validators.email\n * page](api/forms/Validators#email).\n *\n * @see [Form Validation](guide/forms/form-validation)\n *\n * @usageNotes\n *\n * ### Adding an email validator\n *\n * The following example shows how to add an email validator to an input attached to an ngModel\n * binding.\n *\n * ```html\n * <input type=\"email\" name=\"email\" ngModel email>\n * <input type=\"email\" name=\"email\" ngModel email=\"true\">\n * <input type=\"email\" name=\"email\" ngModel [email]=\"true\">\n * ```\n *\n * @publicApi\n * @ngModule FormsModule\n * @ngModule ReactiveFormsModule\n */\nclass EmailValidator extends AbstractValidatorDirective {\n /**\n * @description\n * Tracks changes to the email attribute bound to this directive.\n */\n email;\n /** @internal */\n inputName = 'email';\n /** @internal */\n normalizeInput = booleanAttribute;\n /** @internal */\n createValidator = input => emailValidator;\n /** @docs-private */\n enabled(input) {\n return input;\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵEmailValidator_BaseFactory;\n return function EmailValidator_Factory(__ngFactoryType__) {\n return (ɵEmailValidator_BaseFactory || (ɵEmailValidator_BaseFactory = i0.ɵɵgetInheritedFactory(EmailValidator)))(__ngFactoryType__ || EmailValidator);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: EmailValidator,\n selectors: [[\"\", \"email\", \"\", \"formControlName\", \"\"], [\"\", \"email\", \"\", \"formControl\", \"\"], [\"\", \"email\", \"\", \"ngModel\", \"\"]],\n inputs: {\n email: \"email\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([EMAIL_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(EmailValidator, [{\n type: Directive,\n args: [{\n selector: '[email][formControlName],[email][formControl],[email][ngModel]',\n providers: [EMAIL_VALIDATOR],\n standalone: false\n }]\n }], null, {\n email: [{\n type: Input\n }]\n });\n})();\n/**\n * @description\n * Provider which adds `MinLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nconst MIN_LENGTH_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MinLengthValidator),\n multi: true\n};\n/**\n * A directive that adds minimum length validation to controls marked with the\n * `minlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/forms/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a minimum length validator\n *\n * The following example shows how to add a minimum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel minlength=\"4\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\nclass MinLengthValidator extends AbstractValidatorDirective {\n /**\n * @description\n * Tracks changes to the minimum length bound to this directive.\n */\n minlength;\n /** @internal */\n inputName = 'minlength';\n /** @internal */\n normalizeInput = input => toInteger(input);\n /** @internal */\n createValidator = minlength => minLengthValidator(minlength);\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMinLengthValidator_BaseFactory;\n return function MinLengthValidator_Factory(__ngFactoryType__) {\n return (ɵMinLengthValidator_BaseFactory || (ɵMinLengthValidator_BaseFactory = i0.ɵɵgetInheritedFactory(MinLengthValidator)))(__ngFactoryType__ || MinLengthValidator);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MinLengthValidator,\n selectors: [[\"\", \"minlength\", \"\", \"formControlName\", \"\"], [\"\", \"minlength\", \"\", \"formControl\", \"\"], [\"\", \"minlength\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function MinLengthValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"minlength\", ctx._enabled ? ctx.minlength : null);\n }\n },\n inputs: {\n minlength: \"minlength\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([MIN_LENGTH_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MinLengthValidator, [{\n type: Directive,\n args: [{\n selector: '[minlength][formControlName],[minlength][formControl],[minlength][ngModel]',\n providers: [MIN_LENGTH_VALIDATOR],\n host: {\n '[attr.minlength]': '_enabled ? minlength : null'\n },\n standalone: false\n }]\n }], null, {\n minlength: [{\n type: Input\n }]\n });\n})();\n/**\n * @description\n * Provider which adds `MaxLengthValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nconst MAX_LENGTH_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaxLengthValidator),\n multi: true\n};\n/**\n * A directive that adds maximum length validation to controls marked with the\n * `maxlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/forms/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a maximum length validator\n *\n * The following example shows how to add a maximum length validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel maxlength=\"25\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\nclass MaxLengthValidator extends AbstractValidatorDirective {\n /**\n * @description\n * Tracks changes to the maximum length bound to this directive.\n */\n maxlength;\n /** @internal */\n inputName = 'maxlength';\n /** @internal */\n normalizeInput = input => toInteger(input);\n /** @internal */\n createValidator = maxlength => maxLengthValidator(maxlength);\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMaxLengthValidator_BaseFactory;\n return function MaxLengthValidator_Factory(__ngFactoryType__) {\n return (ɵMaxLengthValidator_BaseFactory || (ɵMaxLengthValidator_BaseFactory = i0.ɵɵgetInheritedFactory(MaxLengthValidator)))(__ngFactoryType__ || MaxLengthValidator);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MaxLengthValidator,\n selectors: [[\"\", \"maxlength\", \"\", \"formControlName\", \"\"], [\"\", \"maxlength\", \"\", \"formControl\", \"\"], [\"\", \"maxlength\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function MaxLengthValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"maxlength\", ctx._enabled ? ctx.maxlength : null);\n }\n },\n inputs: {\n maxlength: \"maxlength\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([MAX_LENGTH_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MaxLengthValidator, [{\n type: Directive,\n args: [{\n selector: '[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]',\n providers: [MAX_LENGTH_VALIDATOR],\n host: {\n '[attr.maxlength]': '_enabled ? maxlength : null'\n },\n standalone: false\n }]\n }], null, {\n maxlength: [{\n type: Input\n }]\n });\n})();\n/**\n * @description\n * Provider which adds `PatternValidator` to the `NG_VALIDATORS` multi-provider list.\n */\nconst PATTERN_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => PatternValidator),\n multi: true\n};\n/**\n * @description\n * A directive that adds regex pattern validation to controls marked with the\n * `pattern` attribute. The regex must match the entire control value.\n * The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * @see [Form Validation](guide/forms/form-validation)\n *\n * @usageNotes\n *\n * ### Adding a pattern validator\n *\n * The following example shows how to add a pattern validator to an input attached to an\n * ngModel binding.\n *\n * ```html\n * <input name=\"firstName\" ngModel pattern=\"[a-zA-Z ]*\">\n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\nclass PatternValidator extends AbstractValidatorDirective {\n /**\n * @description\n * Tracks changes to the pattern bound to this directive.\n */\n pattern; // This input is always defined, since the name matches selector.\n /** @internal */\n inputName = 'pattern';\n /** @internal */\n normalizeInput = input => input;\n /** @internal */\n createValidator = input => patternValidator(input);\n static ɵfac = /* @__PURE__ */(() => {\n let ɵPatternValidator_BaseFactory;\n return function PatternValidator_Factory(__ngFactoryType__) {\n return (ɵPatternValidator_BaseFactory || (ɵPatternValidator_BaseFactory = i0.ɵɵgetInheritedFactory(PatternValidator)))(__ngFactoryType__ || PatternValidator);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: PatternValidator,\n selectors: [[\"\", \"pattern\", \"\", \"formControlName\", \"\"], [\"\", \"pattern\", \"\", \"formControl\", \"\"], [\"\", \"pattern\", \"\", \"ngModel\", \"\"]],\n hostVars: 1,\n hostBindings: function PatternValidator_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"pattern\", ctx._enabled ? ctx.pattern : null);\n }\n },\n inputs: {\n pattern: \"pattern\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([PATTERN_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(PatternValidator, [{\n type: Directive,\n args: [{\n selector: '[pattern][formControlName],[pattern][formControl],[pattern][ngModel]',\n providers: [PATTERN_VALIDATOR],\n host: {\n '[attr.pattern]': '_enabled ? pattern : null'\n },\n standalone: false\n }]\n }], null, {\n pattern: [{\n type: Input\n }]\n });\n})();\nconst SHARED_FORM_DIRECTIVES = [ɵNgNoValidate, NgSelectOption, ɵNgSelectMultipleOption, DefaultValueAccessor, NumberValueAccessor, RangeValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, SelectMultipleControlValueAccessor, RadioControlValueAccessor, NgControlStatus, NgControlStatusGroup, RequiredValidator, MinLengthValidator, MaxLengthValidator, PatternValidator, CheckboxRequiredValidator, EmailValidator, MinValidator, MaxValidator];\nconst TEMPLATE_DRIVEN_DIRECTIVES = [NgModel, NgModelGroup, NgForm];\nconst REACTIVE_DRIVEN_DIRECTIVES = [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName];\n/**\n * Internal module used for sharing directives between FormsModule and ReactiveFormsModule\n */\nclass ɵInternalFormsSharedModule {\n static ɵfac = function ɵInternalFormsSharedModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ɵInternalFormsSharedModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: ɵInternalFormsSharedModule,\n declarations: [ɵNgNoValidate, NgSelectOption, ɵNgSelectMultipleOption, DefaultValueAccessor, NumberValueAccessor, RangeValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, SelectMultipleControlValueAccessor, RadioControlValueAccessor, NgControlStatus, NgControlStatusGroup, RequiredValidator, MinLengthValidator, MaxLengthValidator, PatternValidator, CheckboxRequiredValidator, EmailValidator, MinValidator, MaxValidator],\n exports: [ɵNgNoValidate, NgSelectOption, ɵNgSelectMultipleOption, DefaultValueAccessor, NumberValueAccessor, RangeValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, SelectMultipleControlValueAccessor, RadioControlValueAccessor, NgControlStatus, NgControlStatusGroup, RequiredValidator, MinLengthValidator, MaxLengthValidator, PatternValidator, CheckboxRequiredValidator, EmailValidator, MinValidator, MaxValidator]\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(ɵInternalFormsSharedModule, [{\n type: NgModule,\n args: [{\n declarations: SHARED_FORM_DIRECTIVES,\n exports: SHARED_FORM_DIRECTIVES\n }]\n }], null, null);\n})();\n\n/**\n * Tracks the value and validity state of an array of `FormControl`,\n * `FormGroup` or `FormArray` instances.\n *\n * A `FormArray` aggregates the values of each child `FormControl` into an array.\n * It calculates its status by reducing the status values of its children. For example, if one of\n * the controls in a `FormArray` is invalid, the entire array becomes invalid.\n *\n * `FormArray` accepts one generic argument, which is the type of the controls inside.\n * If you need a heterogenous array, use {@link UntypedFormArray}.\n *\n * `FormArray` is one of the four fundamental building blocks used to define forms in Angular,\n * along with `FormControl`, `FormGroup`, and `FormRecord`.\n *\n * @usageNotes\n *\n * ### Create an array of form controls\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl('Nancy', Validators.minLength(2)),\n * new FormControl('Drew'),\n * ]);\n *\n * console.log(arr.value); // ['Nancy', 'Drew']\n * console.log(arr.status); // 'VALID'\n * ```\n *\n * ### Create a form array with array-level validators\n *\n * You include array-level validators and async validators. These come in handy\n * when you want to perform validation that considers the value of more than one child\n * control.\n *\n * The two types of validators are passed in separately as the second and third arg\n * respectively, or together as part of an options object.\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl('Nancy'),\n * new FormControl('Drew')\n * ], {validators: myValidator, asyncValidators: myAsyncValidator});\n * ```\n *\n * ### Set the updateOn property for all controls in a form array\n *\n * The options object is used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * array level, all child controls default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl()\n * ], {updateOn: 'blur'});\n * ```\n *\n * ### Adding or removing controls from a form array\n *\n * To change the controls in the array, use the `push`, `insert`, `removeAt` or `clear` methods\n * in `FormArray` itself. These methods ensure the controls are properly tracked in the\n * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate\n * the `FormArray` directly, as that result in strange and unexpected behavior such\n * as broken change detection.\n *\n * @publicApi\n */\nclass FormArray extends AbstractControl {\n /**\n * Creates a new `FormArray` instance.\n *\n * @param controls An array of child controls. Each child control is given an index\n * where it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or an `AbstractControlOptions` object that contains validation functions\n * and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions\n *\n */\n constructor(controls, validatorOrOpts, asyncValidator) {\n super(pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts));\n this.controls = controls;\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({\n onlySelf: true,\n // If `asyncValidator` is present, it will trigger control status change from `PENDING` to\n // `VALID` or `INVALID`.\n // The status should be broadcasted via the `statusChanges` observable, so we set `emitEvent`\n // to `true` to allow that during the control creation process.\n emitEvent: !!this.asyncValidator\n });\n }\n controls;\n /**\n * Get the `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to retrieve the control. If `index` is negative, it will wrap\n * around from the back, and if index is greatly negative (less than `-length`), the result is\n * undefined. This behavior is the same as `Array.at(index)`.\n */\n at(index) {\n return this.controls[this._adjustIndex(index)];\n }\n /**\n * Insert a new `AbstractControl` at the end of the array.\n *\n * @param control Form control to be inserted\n * @param options Specifies whether this FormArray instance should emit events after a new\n * control is added.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges` observables emit events with the latest status and value when the control is\n * inserted. When false, no events are emitted.\n */\n push(control, options = {}) {\n this.controls.push(control);\n this._registerControl(control);\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n this._onCollectionChange();\n }\n /**\n * Insert a new `AbstractControl` at the given `index` in the array.\n *\n * @param index Index in the array to insert the control. If `index` is negative, wraps around\n * from the back. If `index` is greatly negative (less than `-length`), prepends to the array.\n * This behavior is the same as `Array.splice(index, 0, control)`.\n * @param control Form control to be inserted\n * @param options Specifies whether this FormArray instance should emit events after a new\n * control is inserted.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges` observables emit events with the latest status and value when the control is\n * inserted. When false, no events are emitted.\n */\n insert(index, control, options = {}) {\n this.controls.splice(index, 0, control);\n this._registerControl(control);\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n }\n /**\n * Remove the control at the given `index` in the array.\n *\n * @param index Index in the array to remove the control. If `index` is negative, wraps around\n * from the back. If `index` is greatly negative (less than `-length`), removes the first\n * element. This behavior is the same as `Array.splice(index, 1)`.\n * @param options Specifies whether this FormArray instance should emit events after a\n * control is removed.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges` observables emit events with the latest status and value when the control is\n * removed. When false, no events are emitted.\n */\n removeAt(index, options = {}) {\n // Adjust the index, then clamp it at no less than 0 to prevent undesired underflows.\n let adjustedIndex = this._adjustIndex(index);\n if (adjustedIndex < 0) adjustedIndex = 0;\n if (this.controls[adjustedIndex]) this.controls[adjustedIndex]._registerOnCollectionChange(() => {});\n this.controls.splice(adjustedIndex, 1);\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n }\n /**\n * Replace an existing control.\n *\n * @param index Index in the array to replace the control. If `index` is negative, wraps around\n * from the back. If `index` is greatly negative (less than `-length`), replaces the first\n * element. This behavior is the same as `Array.splice(index, 1, control)`.\n * @param control The `AbstractControl` control to replace the existing control\n * @param options Specifies whether this FormArray instance should emit events after an\n * existing control is replaced with a new one.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges` observables emit events with the latest status and value when the control is\n * replaced with a new one. When false, no events are emitted.\n */\n setControl(index, control, options = {}) {\n // Adjust the index, then clamp it at no less than 0 to prevent undesired underflows.\n let adjustedIndex = this._adjustIndex(index);\n if (adjustedIndex < 0) adjustedIndex = 0;\n if (this.controls[adjustedIndex]) this.controls[adjustedIndex]._registerOnCollectionChange(() => {});\n this.controls.splice(adjustedIndex, 1);\n if (control) {\n this.controls.splice(adjustedIndex, 0, control);\n this._registerControl(control);\n }\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n this._onCollectionChange();\n }\n /**\n * Length of the control array.\n */\n get length() {\n return this.controls.length;\n }\n /**\n * Sets the value of the `FormArray`. It accepts an array that matches\n * the structure of the control.\n *\n * This method performs strict checks, and throws an error if you try\n * to set the value of a control that doesn't exist or if you exclude the\n * value of a control.\n *\n * @usageNotes\n * ### Set the values for the controls in the form array\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.setValue(['Nancy', 'Drew']);\n * console.log(arr.value); // ['Nancy', 'Drew']\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control value is updated.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n setValue(value, options = {}) {\n assertAllValuesPresent(this, false, value);\n value.forEach((newValue, index) => {\n assertControlPresent(this, false, index);\n this.at(index).setValue(newValue, {\n onlySelf: true,\n emitEvent: options.emitEvent\n });\n });\n this.updateValueAndValidity(options);\n }\n /**\n * Patches the value of the `FormArray`. It accepts an array that matches the\n * structure of the control, and does its best to match the values to the correct\n * controls in the group.\n *\n * It accepts both super-sets and sub-sets of the array without throwing an error.\n *\n * @usageNotes\n * ### Patch the values for controls in a form array\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.patchValue(['Nancy']);\n * console.log(arr.value); // ['Nancy', null]\n * ```\n *\n * @param value Array of latest values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges` observables emit events with the latest status and value when the control\n * value is updated. When false, no events are emitted. The configuration options are passed to\n * the {@link AbstractControl#updateValueAndValidity updateValueAndValidity} method.\n */\n patchValue(value, options = {}) {\n // Even though the `value` argument type doesn't allow `null` and `undefined` values, the\n // `patchValue` can be called recursively and inner data structures might have these values,\n // so we just ignore such cases when a field containing FormArray instance receives `null` or\n // `undefined` as a value.\n if (value == null /* both `null` and `undefined` */) return;\n value.forEach((newValue, index) => {\n if (this.at(index)) {\n this.at(index).patchValue(newValue, {\n onlySelf: true,\n emitEvent: options.emitEvent\n });\n }\n });\n this.updateValueAndValidity(options);\n }\n /**\n * Resets the `FormArray` and all descendants are marked `pristine` and `untouched`, and the\n * value of all descendants to null or null maps.\n *\n * You reset to a specific form state by passing in an array of states\n * that matches the structure of the control. The state is a standalone value\n * or a form state object with both a value and a disabled status.\n *\n * @usageNotes\n * ### Reset the values in a form array\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * arr.reset(['name', 'last name']);\n *\n * console.log(arr.value); // ['name', 'last name']\n * ```\n *\n * ### Reset the values in a form array and the disabled status for the first control\n *\n * ```ts\n * arr.reset([\n * {value: 'name', disabled: true},\n * 'last'\n * ]);\n *\n * console.log(arr.value); // ['last']\n * console.log(arr.at(0).status); // 'DISABLED'\n * ```\n *\n * @param value Array of values for the controls\n * @param options Configure options that determine how the control propagates changes and\n * emits events after the value changes\n *\n * * `onlySelf`: When true, each change only affects this control, and not its parent. Default\n * is false.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges`\n * observables emit events with the latest status and value when the control is reset.\n * When false, no events are emitted.\n * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity\n * updateValueAndValidity} method.\n */\n reset(value = [], options = {}) {\n this._forEachChild((control, index) => {\n control.reset(value[index], {\n onlySelf: true,\n emitEvent: options.emitEvent\n });\n });\n this._updatePristine(options, this);\n this._updateTouched(options, this);\n this.updateValueAndValidity(options);\n }\n /**\n * The aggregate value of the array, including any disabled controls.\n *\n * Reports all values regardless of disabled status.\n */\n getRawValue() {\n return this.controls.map(control => control.getRawValue());\n }\n /**\n * Remove all controls in the `FormArray`.\n *\n * @param options Specifies whether this FormArray instance should emit events after all\n * controls are removed.\n * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n * `valueChanges` observables emit events with the latest status and value when all controls\n * in this FormArray instance are removed. When false, no events are emitted.\n *\n * @usageNotes\n * ### Remove all elements from a FormArray\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.length); // 2\n *\n * arr.clear();\n * console.log(arr.length); // 0\n * ```\n *\n * It's a simpler and more efficient alternative to removing all elements one by one:\n *\n * ```ts\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n *\n * while (arr.length) {\n * arr.removeAt(0);\n * }\n * ```\n */\n clear(options = {}) {\n if (this.controls.length < 1) return;\n this._forEachChild(control => control._registerOnCollectionChange(() => {}));\n this.controls.splice(0);\n this.updateValueAndValidity({\n emitEvent: options.emitEvent\n });\n }\n /**\n * Adjusts a negative index by summing it with the length of the array. For very negative\n * indices, the result may remain negative.\n * @internal\n */\n _adjustIndex(index) {\n return index < 0 ? index + this.length : index;\n }\n /** @internal */\n _syncPendingControls() {\n let subtreeUpdated = this.controls.reduce((updated, child) => {\n return child._syncPendingControls() ? true : updated;\n }, false);\n if (subtreeUpdated) this.updateValueAndValidity({\n onlySelf: true\n });\n return subtreeUpdated;\n }\n /** @internal */\n _forEachChild(cb) {\n this.controls.forEach((control, index) => {\n cb(control, index);\n });\n }\n /** @internal */\n _updateValue() {\n this.value = this.controls.filter(control => control.enabled || this.disabled).map(control => control.value);\n }\n /** @internal */\n _anyControls(condition) {\n return this.controls.some(control => control.enabled && condition(control));\n }\n /** @internal */\n _setUpControls() {\n this._forEachChild(control => this._registerControl(control));\n }\n /** @internal */\n _allControlsDisabled() {\n for (const control of this.controls) {\n if (control.enabled) return false;\n }\n return this.controls.length > 0 || this.disabled;\n }\n _registerControl(control) {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n }\n /** @internal */\n _find(name) {\n return this.at(name) ?? null;\n }\n}\nconst UntypedFormArray = FormArray;\n/**\n * @description\n * Asserts that the given control is an instance of `FormArray`\n *\n * @publicApi\n */\nconst isFormArray = control => control instanceof FormArray;\nfunction isAbstractControlOptions(options) {\n return !!options && (options.asyncValidators !== undefined || options.validators !== undefined || options.updateOn !== undefined);\n}\n/**\n * @description\n * Creates an `AbstractControl` from a user-specified configuration.\n *\n * The `FormBuilder` provides syntactic sugar that shortens creating instances of a\n * `FormControl`, `FormGroup`, or `FormArray`. It reduces the amount of boilerplate needed to\n * build complex forms.\n *\n * @see [Reactive Forms Guide](guide/forms/reactive-forms)\n *\n * @publicApi\n */\nclass FormBuilder {\n useNonNullable = false;\n /**\n * @description\n * Returns a FormBuilder in which automatically constructed `FormControl` elements\n * have `{nonNullable: true}` and are non-nullable.\n *\n * **Constructing non-nullable controls**\n *\n * When constructing a control, it will be non-nullable, and will reset to its initial value.\n *\n * ```ts\n * let nnfb = new FormBuilder().nonNullable;\n * let name = nnfb.control('Alex'); // FormControl<string>\n * name.reset();\n * console.log(name); // 'Alex'\n * ```\n *\n * **Constructing non-nullable groups or arrays**\n *\n * When constructing a group or array, all automatically created inner controls will be\n * non-nullable, and will reset to their initial values.\n *\n * ```ts\n * let nnfb = new FormBuilder().nonNullable;\n * let name = nnfb.group({who: 'Alex'}); // FormGroup<{who: FormControl<string>}>\n * name.reset();\n * console.log(name); // {who: 'Alex'}\n * ```\n * **Constructing *nullable* fields on groups or arrays**\n *\n * It is still possible to have a nullable field. In particular, any `FormControl` which is\n * *already* constructed will not be altered. For example:\n *\n * ```ts\n * let nnfb = new FormBuilder().nonNullable;\n * // FormGroup<{who: FormControl<string|null>}>\n * let name = nnfb.group({who: new FormControl('Alex')});\n * name.reset(); console.log(name); // {who: null}\n * ```\n *\n * Because the inner control is constructed explicitly by the caller, the builder has\n * no control over how it is created, and cannot exclude the `null`.\n */\n get nonNullable() {\n const nnfb = new FormBuilder();\n nnfb.useNonNullable = true;\n return nnfb;\n }\n group(controls, options = null) {\n const reducedControls = this._reduceControls(controls);\n let newOptions = {};\n if (isAbstractControlOptions(options)) {\n // `options` are `AbstractControlOptions`\n newOptions = options;\n } else if (options !== null) {\n // `options` are legacy form group options\n newOptions.validators = options.validator;\n newOptions.asyncValidators = options.asyncValidator;\n }\n return new FormGroup(reducedControls, newOptions);\n }\n /**\n * @description\n * Constructs a new `FormRecord` instance. Accepts a single generic argument, which is an object\n * containing all the keys and corresponding inner control types.\n *\n * @param controls A collection of child controls. The key for each child is the name\n * under which it is registered.\n *\n * @param options Configuration options object for the `FormRecord`. The object should have the\n * `AbstractControlOptions` type and might contain the following fields:\n * * `validators`: A synchronous validator function, or an array of validator functions.\n * * `asyncValidators`: A single async validator or array of async validator functions.\n * * `updateOn`: The event upon which the control should be updated (options: 'change' | 'blur'\n * | submit').\n */\n record(controls, options = null) {\n const reducedControls = this._reduceControls(controls);\n // Cast to `any` because the inferred types are not as specific as Element.\n return new FormRecord(reducedControls, options);\n }\n /**\n * @description\n * Constructs a new `FormControl` with the given state, validators and options. Sets\n * `{nonNullable: true}` in the options to get a non-nullable control. Otherwise, the\n * control will be nullable. Accepts a single generic argument, which is the type of the\n * control's value.\n *\n * @param formState Initializes the control with an initial state value, or\n * with an object that contains both a value and a disabled status.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of\n * such functions, or a `FormControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator\n * functions.\n *\n * @usageNotes\n *\n * ### Initialize a control as disabled\n *\n * The following example returns a control with an initial value in a disabled state.\n *\n * {@example forms/ts/formBuilder/form_builder_example.ts region='disabled-control'}\n */\n control(formState, validatorOrOpts, asyncValidator) {\n let newOptions = {};\n if (!this.useNonNullable) {\n return new FormControl(formState, validatorOrOpts, asyncValidator);\n }\n if (isAbstractControlOptions(validatorOrOpts)) {\n // If the second argument is options, then they are copied.\n newOptions = validatorOrOpts;\n } else {\n // If the other arguments are validators, they are copied into an options object.\n newOptions.validators = validatorOrOpts;\n newOptions.asyncValidators = asyncValidator;\n }\n return new FormControl(formState, {\n ...newOptions,\n nonNullable: true\n });\n }\n /**\n * Constructs a new `FormArray` from the given array of configurations,\n * validators and options. Accepts a single generic argument, which is the type of each control\n * inside the array.\n *\n * @param controls An array of child controls or control configs. Each child control is given an\n * index when it is registered.\n *\n * @param validatorOrOpts A synchronous validator function, or an array of such functions, or an\n * `AbstractControlOptions` object that contains\n * validation functions and a validation trigger.\n *\n * @param asyncValidator A single async validator or array of async validator functions.\n */\n array(controls, validatorOrOpts, asyncValidator) {\n const createdControls = controls.map(c => this._createControl(c));\n // Cast to `any` because the inferred types are not as specific as Element.\n return new FormArray(createdControls, validatorOrOpts, asyncValidator);\n }\n /** @internal */\n _reduceControls(controls) {\n const createdControls = {};\n Object.keys(controls).forEach(controlName => {\n createdControls[controlName] = this._createControl(controls[controlName]);\n });\n return createdControls;\n }\n /** @internal */\n _createControl(controls) {\n if (controls instanceof FormControl) {\n return controls;\n } else if (controls instanceof AbstractControl) {\n // A control; just return it\n return controls;\n } else if (Array.isArray(controls)) {\n // ControlConfig Tuple\n const value = controls[0];\n const validator = controls.length > 1 ? controls[1] : null;\n const asyncValidator = controls.length > 2 ? controls[2] : null;\n return this.control(value, validator, asyncValidator);\n } else {\n // T or FormControlState<T>\n return this.control(controls);\n }\n }\n static ɵfac = function FormBuilder_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormBuilder)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: FormBuilder,\n factory: FormBuilder.ɵfac,\n providedIn: 'root'\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(FormBuilder, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], null, null);\n})();\n/**\n * @description\n * `NonNullableFormBuilder` is similar to {@link FormBuilder}, but automatically constructed\n * {@link FormControl} elements have `{nonNullable: true}` and are non-nullable.\n *\n * @publicApi\n */\nclass NonNullableFormBuilder {\n static ɵfac = function NonNullableFormBuilder_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NonNullableFormBuilder)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NonNullableFormBuilder,\n factory: () => (() => inject(FormBuilder).nonNullable)(),\n providedIn: 'root'\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NonNullableFormBuilder, [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n useFactory: () => inject(FormBuilder).nonNullable\n }]\n }], null, null);\n})();\n/**\n * UntypedFormBuilder is the same as `FormBuilder`, but it provides untyped controls.\n */\nclass UntypedFormBuilder extends FormBuilder {\n group(controlsConfig, options = null) {\n return super.group(controlsConfig, options);\n }\n /**\n * Like `FormBuilder#control`, except the resulting control is untyped.\n */\n control(formState, validatorOrOpts, asyncValidator) {\n return super.control(formState, validatorOrOpts, asyncValidator);\n }\n /**\n * Like `FormBuilder#array`, except the resulting array is untyped.\n */\n array(controlsConfig, validatorOrOpts, asyncValidator) {\n return super.array(controlsConfig, validatorOrOpts, asyncValidator);\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵUntypedFormBuilder_BaseFactory;\n return function UntypedFormBuilder_Factory(__ngFactoryType__) {\n return (ɵUntypedFormBuilder_BaseFactory || (ɵUntypedFormBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(UntypedFormBuilder)))(__ngFactoryType__ || UntypedFormBuilder);\n };\n })();\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: UntypedFormBuilder,\n factory: UntypedFormBuilder.ɵfac,\n providedIn: 'root'\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(UntypedFormBuilder, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], null, null);\n})();\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the forms package.\n */\n/**\n * @publicApi\n */\nconst VERSION = new Version('20.1.7');\n\n/**\n * Exports the required providers and directives for template-driven forms,\n * making them available for import by NgModules that import this module.\n *\n * @see [Forms Overview](guide/forms)\n * @see [Template-driven Forms Guide](guide/forms)\n *\n * @publicApi\n */\nclass FormsModule {\n /**\n * @description\n * Provides options for configuring the forms module.\n *\n * @param opts An object of configuration options\n * * `callSetDisabledState` Configures whether to `always` call `setDisabledState`, which is more\n * correct, or to only call it `whenDisabled`, which is the legacy behavior.\n */\n static withConfig(opts) {\n return {\n ngModule: FormsModule,\n providers: [{\n provide: CALL_SET_DISABLED_STATE,\n useValue: opts.callSetDisabledState ?? setDisabledStateDefault\n }]\n };\n }\n static ɵfac = function FormsModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FormsModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: FormsModule,\n declarations: [NgModel, NgModelGroup, NgForm],\n exports: [ɵInternalFormsSharedModule, NgModel, NgModelGroup, NgForm]\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [ɵInternalFormsSharedModule]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(FormsModule, [{\n type: NgModule,\n args: [{\n declarations: TEMPLATE_DRIVEN_DIRECTIVES,\n exports: [ɵInternalFormsSharedModule, TEMPLATE_DRIVEN_DIRECTIVES]\n }]\n }], null, null);\n})();\n/**\n * Exports the required infrastructure and directives for reactive forms,\n * making them available for import by NgModules that import this module.\n *\n * @see [Forms Overview](guide/forms)\n * @see [Reactive Forms Guide](guide/forms/reactive-forms)\n *\n * @publicApi\n */\nclass ReactiveFormsModule {\n /**\n * @description\n * Provides options for configuring the reactive forms module.\n *\n * @param opts An object of configuration options\n * * `warnOnNgModelWithFormControl` Configures when to emit a warning when an `ngModel`\n * binding is used with reactive form directives.\n * * `callSetDisabledState` Configures whether to `always` call `setDisabledState`, which is more\n * correct, or to only call it `whenDisabled`, which is the legacy behavior.\n */\n static withConfig(opts) {\n return {\n ngModule: ReactiveFormsModule,\n providers: [{\n provide: NG_MODEL_WITH_FORM_CONTROL_WARNING,\n useValue: opts.warnOnNgModelWithFormControl ?? 'always'\n }, {\n provide: CALL_SET_DISABLED_STATE,\n useValue: opts.callSetDisabledState ?? setDisabledStateDefault\n }]\n };\n }\n static ɵfac = function ReactiveFormsModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ReactiveFormsModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: ReactiveFormsModule,\n declarations: [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName],\n exports: [ɵInternalFormsSharedModule, FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName]\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [ɵInternalFormsSharedModule]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(ReactiveFormsModule, [{\n type: NgModule,\n args: [{\n declarations: [REACTIVE_DRIVEN_DIRECTIVES],\n exports: [ɵInternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES]\n }]\n }], null, null);\n})();\nexport { AbstractControl, AbstractControlDirective, AbstractFormGroupDirective, COMPOSITION_BUFFER_MODE, CheckboxControlValueAccessor, CheckboxRequiredValidator, ControlContainer, ControlEvent, DefaultValueAccessor, EmailValidator, FormArray, FormArrayName, FormBuilder, FormControl, FormControlDirective, FormControlName, FormGroup, FormGroupDirective, FormGroupName, FormRecord, FormResetEvent, FormSubmittedEvent, FormsModule, MaxLengthValidator, MaxValidator, MinLengthValidator, MinValidator, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgControlStatus, NgControlStatusGroup, NgForm, NgModel, NgModelGroup, NgSelectOption, NonNullableFormBuilder, NumberValueAccessor, PatternValidator, PristineChangeEvent, RadioControlValueAccessor, RangeValueAccessor, ReactiveFormsModule, RequiredValidator, SelectControlValueAccessor, SelectMultipleControlValueAccessor, StatusChangeEvent, TouchedChangeEvent, UntypedFormArray, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, VERSION, Validators, ValueChangeEvent, isFormArray, isFormControl, isFormGroup, isFormRecord, ɵInternalFormsSharedModule, ɵNgNoValidate, ɵNgSelectMultipleOption };\n","import * as i0 from '@angular/core';\nimport { inject, NgZone, RendererFactory2, Injectable } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\nimport { filter, shareReplay, takeUntil } from 'rxjs/operators';\n\n/**\n * Handler that logs \"ResizeObserver loop limit exceeded\" errors.\n * These errors are not shown in the Chrome console, so we log them to ensure developers are aware.\n * @param e The error\n */\nconst loopLimitExceededErrorHandler = e => {\n if (e instanceof ErrorEvent && e.message === 'ResizeObserver loop limit exceeded') {\n console.error(`${e.message}. This could indicate a performance issue with your app. See https://github.com/WICG/resize-observer/blob/master/explainer.md#error-handling`);\n }\n};\n/**\n * A shared ResizeObserver to be used for a particular box type (content-box, border-box, or\n * device-pixel-content-box)\n */\nclass SingleBoxSharedResizeObserver {\n _box;\n /** Stream that emits when the shared observer is destroyed. */\n _destroyed = new Subject();\n /** Stream of all events from the ResizeObserver. */\n _resizeSubject = new Subject();\n /** ResizeObserver used to observe element resize events. */\n _resizeObserver;\n /** A map of elements to streams of their resize events. */\n _elementObservables = new Map();\n constructor(/** The box type to observe for resizes. */\n _box) {\n this._box = _box;\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(entries => this._resizeSubject.next(entries));\n }\n }\n /**\n * Gets a stream of resize events for the given element.\n * @param target The element to observe.\n * @return The stream of resize events for the element.\n */\n observe(target) {\n if (!this._elementObservables.has(target)) {\n this._elementObservables.set(target, new Observable(observer => {\n const subscription = this._resizeSubject.subscribe(observer);\n this._resizeObserver?.observe(target, {\n box: this._box\n });\n return () => {\n this._resizeObserver?.unobserve(target);\n subscription.unsubscribe();\n this._elementObservables.delete(target);\n };\n }).pipe(filter(entries => entries.some(entry => entry.target === target)),\n // Share a replay of the last event so that subsequent calls to observe the same element\n // receive initial sizing info like the first one. Also enable ref counting so the\n // element will be automatically unobserved when there are no more subscriptions.\n shareReplay({\n bufferSize: 1,\n refCount: true\n }), takeUntil(this._destroyed)));\n }\n return this._elementObservables.get(target);\n }\n /** Destroys this instance. */\n destroy() {\n this._destroyed.next();\n this._destroyed.complete();\n this._resizeSubject.complete();\n this._elementObservables.clear();\n }\n}\n/**\n * Allows observing resize events on multiple elements using a shared set of ResizeObserver.\n * Sharing a ResizeObserver instance is recommended for better performance (see\n * https://github.com/WICG/resize-observer/issues/59).\n *\n * Rather than share a single `ResizeObserver`, this class creates one `ResizeObserver` per type\n * of observed box ('content-box', 'border-box', and 'device-pixel-content-box'). This avoids\n * later calls to `observe` with a different box type from influencing the events dispatched to\n * earlier calls.\n */\nclass SharedResizeObserver {\n _cleanupErrorListener;\n /** Map of box type to shared resize observer. */\n _observers = new Map();\n /** The Angular zone. */\n _ngZone = inject(NgZone);\n constructor() {\n if (typeof ResizeObserver !== 'undefined' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n this._ngZone.runOutsideAngular(() => {\n const renderer = inject(RendererFactory2).createRenderer(null, null);\n this._cleanupErrorListener = renderer.listen('window', 'error', loopLimitExceededErrorHandler);\n });\n }\n }\n ngOnDestroy() {\n for (const [, observer] of this._observers) {\n observer.destroy();\n }\n this._observers.clear();\n this._cleanupErrorListener?.();\n }\n /**\n * Gets a stream of resize events for the given target element and box type.\n * @param target The element to observe for resizes.\n * @param options Options to pass to the `ResizeObserver`\n * @return The stream of resize events for the element.\n */\n observe(target, options) {\n const box = options?.box || 'content-box';\n if (!this._observers.has(box)) {\n this._observers.set(box, new SingleBoxSharedResizeObserver(box));\n }\n return this._observers.get(box).observe(target);\n }\n static ɵfac = function SharedResizeObserver_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || SharedResizeObserver)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SharedResizeObserver,\n factory: SharedResizeObserver.ɵfac,\n providedIn: 'root'\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(SharedResizeObserver, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], () => [], null);\n})();\nexport { SharedResizeObserver };\n","import { _IdGenerator } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Platform } from '@angular/cdk/platform';\nimport { NgTemplateOutlet } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Directive, InjectionToken, inject, Input, ElementRef, NgZone, Renderer2, Component, ChangeDetectionStrategy, ViewEncapsulation, ViewChild, ChangeDetectorRef, viewChild, computed, contentChild, signal, effect, afterRenderEffect, ContentChild, ContentChildren } from '@angular/core';\nimport { Subscription, Subject, merge } from 'rxjs';\nimport { startWith, map, pairwise, filter, takeUntil } from 'rxjs/operators';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { _ as _animationsDisabled } from './animation-ChQ1vjiF.mjs';\n\n/** The floating label for a `mat-form-field`. */\nconst _c0 = [\"notch\"];\nconst _c1 = [\"matFormFieldNotchedOutline\", \"\"];\nconst _c2 = [\"*\"];\nconst _c3 = [\"iconPrefixContainer\"];\nconst _c4 = [\"textPrefixContainer\"];\nconst _c5 = [\"iconSuffixContainer\"];\nconst _c6 = [\"textSuffixContainer\"];\nconst _c7 = [\"textField\"];\nconst _c8 = [\"*\", [[\"mat-label\"]], [[\"\", \"matPrefix\", \"\"], [\"\", \"matIconPrefix\", \"\"]], [[\"\", \"matTextPrefix\", \"\"]], [[\"\", \"matTextSuffix\", \"\"]], [[\"\", \"matSuffix\", \"\"], [\"\", \"matIconSuffix\", \"\"]], [[\"mat-error\"], [\"\", \"matError\", \"\"]], [[\"mat-hint\", 3, \"align\", \"end\"]], [[\"mat-hint\", \"align\", \"end\"]]];\nconst _c9 = [\"*\", \"mat-label\", \"[matPrefix], [matIconPrefix]\", \"[matTextPrefix]\", \"[matTextSuffix]\", \"[matSuffix], [matIconSuffix]\", \"mat-error, [matError]\", \"mat-hint:not([align='end'])\", \"mat-hint[align='end']\"];\nfunction MatFormField_ng_template_0_Conditional_0_Conditional_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"span\", 20);\n }\n}\nfunction MatFormField_ng_template_0_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"label\", 19);\n i0.ɵɵprojection(1, 1);\n i0.ɵɵconditionalCreate(2, MatFormField_ng_template_0_Conditional_0_Conditional_2_Template, 1, 0, \"span\", 20);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext(2);\n i0.ɵɵproperty(\"floating\", ctx_r1._shouldLabelFloat())(\"monitorResize\", ctx_r1._hasOutline())(\"id\", ctx_r1._labelId);\n i0.ɵɵattribute(\"for\", ctx_r1._control.disableAutomaticLabeling ? null : ctx_r1._control.id);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(!ctx_r1.hideRequiredMarker && ctx_r1._control.required ? 2 : -1);\n }\n}\nfunction MatFormField_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵconditionalCreate(0, MatFormField_ng_template_0_Conditional_0_Template, 3, 5, \"label\", 19);\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵconditional(ctx_r1._hasFloatingLabel() ? 0 : -1);\n }\n}\nfunction MatFormField_Conditional_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 7);\n }\n}\nfunction MatFormField_Conditional_6_Conditional_1_ng_template_0_Template(rf, ctx) {}\nfunction MatFormField_Conditional_6_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, MatFormField_Conditional_6_Conditional_1_ng_template_0_Template, 0, 0, \"ng-template\", 13);\n }\n if (rf & 2) {\n i0.ɵɵnextContext(2);\n const labelTemplate_r3 = i0.ɵɵreference(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", labelTemplate_r3);\n }\n}\nfunction MatFormField_Conditional_6_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 9);\n i0.ɵɵconditionalCreate(1, MatFormField_Conditional_6_Conditional_1_Template, 1, 1, null, 13);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"matFormFieldNotchedOutlineOpen\", ctx_r1._shouldLabelFloat());\n i0.ɵɵadvance();\n i0.ɵɵconditional(!ctx_r1._forceDisplayInfixLabel() ? 1 : -1);\n }\n}\nfunction MatFormField_Conditional_7_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 10, 2);\n i0.ɵɵprojection(2, 2);\n i0.ɵɵelementEnd();\n }\n}\nfunction MatFormField_Conditional_8_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 11, 3);\n i0.ɵɵprojection(2, 3);\n i0.ɵɵelementEnd();\n }\n}\nfunction MatFormField_Conditional_10_ng_template_0_Template(rf, ctx) {}\nfunction MatFormField_Conditional_10_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, MatFormField_Conditional_10_ng_template_0_Template, 0, 0, \"ng-template\", 13);\n }\n if (rf & 2) {\n i0.ɵɵnextContext();\n const labelTemplate_r3 = i0.ɵɵreference(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", labelTemplate_r3);\n }\n}\nfunction MatFormField_Conditional_12_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 14, 4);\n i0.ɵɵprojection(2, 4);\n i0.ɵɵelementEnd();\n }\n}\nfunction MatFormField_Conditional_13_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 15, 5);\n i0.ɵɵprojection(2, 5);\n i0.ɵɵelementEnd();\n }\n}\nfunction MatFormField_Conditional_14_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 16);\n }\n}\nfunction MatFormField_Case_17_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojection(0, 6);\n }\n}\nfunction MatFormField_Case_18_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"mat-hint\", 21);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext(2);\n i0.ɵɵproperty(\"id\", ctx_r1._hintLabelId);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r1.hintLabel);\n }\n}\nfunction MatFormField_Case_18_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵconditionalCreate(0, MatFormField_Case_18_Conditional_0_Template, 2, 2, \"mat-hint\", 21);\n i0.ɵɵprojection(1, 7);\n i0.ɵɵelement(2, \"div\", 22);\n i0.ɵɵprojection(3, 8);\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵconditional(ctx_r1.hintLabel ? 0 : -1);\n }\n}\nclass MatLabel {\n static ɵfac = function MatLabel_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatLabel)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatLabel,\n selectors: [[\"mat-label\"]]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatLabel, [{\n type: Directive,\n args: [{\n selector: 'mat-label'\n }]\n }], null, null);\n})();\n\n/**\n * Injection token that can be used to reference instances of `MatError`. It serves as\n * alternative token to the actual `MatError` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_ERROR = new InjectionToken('MatError');\n/** Single error message to be shown underneath the form-field. */\nclass MatError {\n id = inject(_IdGenerator).getId('mat-mdc-error-');\n constructor() {}\n static ɵfac = function MatError_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatError)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatError,\n selectors: [[\"mat-error\"], [\"\", \"matError\", \"\"]],\n hostAttrs: [1, \"mat-mdc-form-field-error\", \"mat-mdc-form-field-bottom-align\"],\n hostVars: 1,\n hostBindings: function MatError_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵdomProperty(\"id\", ctx.id);\n }\n },\n inputs: {\n id: \"id\"\n },\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_ERROR,\n useExisting: MatError\n }])]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatError, [{\n type: Directive,\n args: [{\n selector: 'mat-error, [matError]',\n host: {\n 'class': 'mat-mdc-form-field-error mat-mdc-form-field-bottom-align',\n '[id]': 'id'\n },\n providers: [{\n provide: MAT_ERROR,\n useExisting: MatError\n }]\n }]\n }], () => [], {\n id: [{\n type: Input\n }]\n });\n})();\n\n/** Hint text to be shown underneath the form field control. */\nclass MatHint {\n /** Whether to align the hint label at the start or end of the line. */\n align = 'start';\n /** Unique ID for the hint. Used for the aria-describedby on the form field control. */\n id = inject(_IdGenerator).getId('mat-mdc-hint-');\n static ɵfac = function MatHint_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatHint)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatHint,\n selectors: [[\"mat-hint\"]],\n hostAttrs: [1, \"mat-mdc-form-field-hint\", \"mat-mdc-form-field-bottom-align\"],\n hostVars: 4,\n hostBindings: function MatHint_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵdomProperty(\"id\", ctx.id);\n i0.ɵɵattribute(\"align\", null);\n i0.ɵɵclassProp(\"mat-mdc-form-field-hint-end\", ctx.align === \"end\");\n }\n },\n inputs: {\n align: \"align\",\n id: \"id\"\n }\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatHint, [{\n type: Directive,\n args: [{\n selector: 'mat-hint',\n host: {\n 'class': 'mat-mdc-form-field-hint mat-mdc-form-field-bottom-align',\n '[class.mat-mdc-form-field-hint-end]': 'align === \"end\"',\n '[id]': 'id',\n // Remove align attribute to prevent it from interfering with layout.\n '[attr.align]': 'null'\n }\n }]\n }], null, {\n align: [{\n type: Input\n }],\n id: [{\n type: Input\n }]\n });\n})();\n\n/**\n * Injection token that can be used to reference instances of `MatPrefix`. It serves as\n * alternative token to the actual `MatPrefix` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_PREFIX = new InjectionToken('MatPrefix');\n/** Prefix to be placed in front of the form field. */\nclass MatPrefix {\n set _isTextSelector(value) {\n this._isText = true;\n }\n _isText = false;\n static ɵfac = function MatPrefix_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatPrefix)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatPrefix,\n selectors: [[\"\", \"matPrefix\", \"\"], [\"\", \"matIconPrefix\", \"\"], [\"\", \"matTextPrefix\", \"\"]],\n inputs: {\n _isTextSelector: [0, \"matTextPrefix\", \"_isTextSelector\"]\n },\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_PREFIX,\n useExisting: MatPrefix\n }])]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatPrefix, [{\n type: Directive,\n args: [{\n selector: '[matPrefix], [matIconPrefix], [matTextPrefix]',\n providers: [{\n provide: MAT_PREFIX,\n useExisting: MatPrefix\n }]\n }]\n }], null, {\n _isTextSelector: [{\n type: Input,\n args: ['matTextPrefix']\n }]\n });\n})();\n\n/**\n * Injection token that can be used to reference instances of `MatSuffix`. It serves as\n * alternative token to the actual `MatSuffix` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_SUFFIX = new InjectionToken('MatSuffix');\n/** Suffix to be placed at the end of the form field. */\nclass MatSuffix {\n set _isTextSelector(value) {\n this._isText = true;\n }\n _isText = false;\n static ɵfac = function MatSuffix_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatSuffix)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatSuffix,\n selectors: [[\"\", \"matSuffix\", \"\"], [\"\", \"matIconSuffix\", \"\"], [\"\", \"matTextSuffix\", \"\"]],\n inputs: {\n _isTextSelector: [0, \"matTextSuffix\", \"_isTextSelector\"]\n },\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_SUFFIX,\n useExisting: MatSuffix\n }])]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatSuffix, [{\n type: Directive,\n args: [{\n selector: '[matSuffix], [matIconSuffix], [matTextSuffix]',\n providers: [{\n provide: MAT_SUFFIX,\n useExisting: MatSuffix\n }]\n }]\n }], null, {\n _isTextSelector: [{\n type: Input,\n args: ['matTextSuffix']\n }]\n });\n})();\n\n/** An injion token for the parent form-field. */\nconst FLOATING_LABEL_PARENT = new InjectionToken('FloatingLabelParent');\n/**\n * Internal directive that maintains a MDC floating label. This directive does not\n * use the `MDCFloatingLabelFoundation` class, as it is not worth the size cost of\n * including it just to measure the label width and toggle some classes.\n *\n * The use of a directive allows us to conditionally render a floating label in the\n * template without having to manually manage instantiation and destruction of the\n * floating label component based on.\n *\n * The component is responsible for setting up the floating label styles, measuring label\n * width for the outline notch, and providing inputs that can be used to toggle the\n * label's floating or required state.\n */\nclass MatFormFieldFloatingLabel {\n _elementRef = inject(ElementRef);\n /** Whether the label is floating. */\n get floating() {\n return this._floating;\n }\n set floating(value) {\n this._floating = value;\n if (this.monitorResize) {\n this._handleResize();\n }\n }\n _floating = false;\n /** Whether to monitor for resize events on the floating label. */\n get monitorResize() {\n return this._monitorResize;\n }\n set monitorResize(value) {\n this._monitorResize = value;\n if (this._monitorResize) {\n this._subscribeToResize();\n } else {\n this._resizeSubscription.unsubscribe();\n }\n }\n _monitorResize = false;\n /** The shared ResizeObserver. */\n _resizeObserver = inject(SharedResizeObserver);\n /** The Angular zone. */\n _ngZone = inject(NgZone);\n /** The parent form-field. */\n _parent = inject(FLOATING_LABEL_PARENT);\n /** The current resize event subscription. */\n _resizeSubscription = new Subscription();\n constructor() {}\n ngOnDestroy() {\n this._resizeSubscription.unsubscribe();\n }\n /** Gets the width of the label. Used for the outline notch. */\n getWidth() {\n return estimateScrollWidth(this._elementRef.nativeElement);\n }\n /** Gets the HTML element for the floating label. */\n get element() {\n return this._elementRef.nativeElement;\n }\n /** Handles resize events from the ResizeObserver. */\n _handleResize() {\n // In the case where the label grows in size, the following sequence of events occurs:\n // 1. The label grows by 1px triggering the ResizeObserver\n // 2. The notch is expanded to accommodate the entire label\n // 3. The label expands to its full width, triggering the ResizeObserver again\n //\n // This is expected, but If we allow this to all happen within the same macro task it causes an\n // error: `ResizeObserver loop limit exceeded`. Therefore we push the notch resize out until\n // the next macro task.\n setTimeout(() => this._parent._handleLabelResized());\n }\n /** Subscribes to resize events. */\n _subscribeToResize() {\n this._resizeSubscription.unsubscribe();\n this._ngZone.runOutsideAngular(() => {\n this._resizeSubscription = this._resizeObserver.observe(this._elementRef.nativeElement, {\n box: 'border-box'\n }).subscribe(() => this._handleResize());\n });\n }\n static ɵfac = function MatFormFieldFloatingLabel_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatFormFieldFloatingLabel)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatFormFieldFloatingLabel,\n selectors: [[\"label\", \"matFormFieldFloatingLabel\", \"\"]],\n hostAttrs: [1, \"mdc-floating-label\", \"mat-mdc-floating-label\"],\n hostVars: 2,\n hostBindings: function MatFormFieldFloatingLabel_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mdc-floating-label--float-above\", ctx.floating);\n }\n },\n inputs: {\n floating: \"floating\",\n monitorResize: \"monitorResize\"\n }\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatFormFieldFloatingLabel, [{\n type: Directive,\n args: [{\n selector: 'label[matFormFieldFloatingLabel]',\n host: {\n 'class': 'mdc-floating-label mat-mdc-floating-label',\n '[class.mdc-floating-label--float-above]': 'floating'\n }\n }]\n }], () => [], {\n floating: [{\n type: Input\n }],\n monitorResize: [{\n type: Input\n }]\n });\n})();\n/**\n * Estimates the scroll width of an element.\n * via https://github.com/material-components/material-components-web/blob/c0a11ef0d000a098fd0c372be8f12d6a99302855/packages/mdc-dom/ponyfill.ts\n */\nfunction estimateScrollWidth(element) {\n // Check the offsetParent. If the element inherits display: none from any\n // parent, the offsetParent property will be null (see\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent).\n // This check ensures we only clone the node when necessary.\n const htmlEl = element;\n if (htmlEl.offsetParent !== null) {\n return htmlEl.scrollWidth;\n }\n const clone = htmlEl.cloneNode(true);\n clone.style.setProperty('position', 'absolute');\n clone.style.setProperty('transform', 'translate(-9999px, -9999px)');\n document.documentElement.appendChild(clone);\n const scrollWidth = clone.scrollWidth;\n clone.remove();\n return scrollWidth;\n}\n\n/** Class added when the line ripple is active. */\nconst ACTIVATE_CLASS = 'mdc-line-ripple--active';\n/** Class added when the line ripple is being deactivated. */\nconst DEACTIVATING_CLASS = 'mdc-line-ripple--deactivating';\n/**\n * Internal directive that creates an instance of the MDC line-ripple component. Using a\n * directive allows us to conditionally render a line-ripple in the template without having\n * to manually create and destroy the `MDCLineRipple` component whenever the condition changes.\n *\n * The directive sets up the styles for the line-ripple and provides an API for activating\n * and deactivating the line-ripple.\n */\nclass MatFormFieldLineRipple {\n _elementRef = inject(ElementRef);\n _cleanupTransitionEnd;\n constructor() {\n const ngZone = inject(NgZone);\n const renderer = inject(Renderer2);\n ngZone.runOutsideAngular(() => {\n this._cleanupTransitionEnd = renderer.listen(this._elementRef.nativeElement, 'transitionend', this._handleTransitionEnd);\n });\n }\n activate() {\n const classList = this._elementRef.nativeElement.classList;\n classList.remove(DEACTIVATING_CLASS);\n classList.add(ACTIVATE_CLASS);\n }\n deactivate() {\n this._elementRef.nativeElement.classList.add(DEACTIVATING_CLASS);\n }\n _handleTransitionEnd = event => {\n const classList = this._elementRef.nativeElement.classList;\n const isDeactivating = classList.contains(DEACTIVATING_CLASS);\n if (event.propertyName === 'opacity' && isDeactivating) {\n classList.remove(ACTIVATE_CLASS, DEACTIVATING_CLASS);\n }\n };\n ngOnDestroy() {\n this._cleanupTransitionEnd();\n }\n static ɵfac = function MatFormFieldLineRipple_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatFormFieldLineRipple)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatFormFieldLineRipple,\n selectors: [[\"div\", \"matFormFieldLineRipple\", \"\"]],\n hostAttrs: [1, \"mdc-line-ripple\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatFormFieldLineRipple, [{\n type: Directive,\n args: [{\n selector: 'div[matFormFieldLineRipple]',\n host: {\n 'class': 'mdc-line-ripple'\n }\n }]\n }], () => [], null);\n})();\n\n/**\n * Internal component that creates an instance of the MDC notched-outline component.\n *\n * The component sets up the HTML structure and styles for the notched-outline. It provides\n * inputs to toggle the notch state and width.\n */\nclass MatFormFieldNotchedOutline {\n _elementRef = inject(ElementRef);\n _ngZone = inject(NgZone);\n /** Whether the notch should be opened. */\n open = false;\n _notch;\n ngAfterViewInit() {\n const element = this._elementRef.nativeElement;\n const label = element.querySelector('.mdc-floating-label');\n if (label) {\n element.classList.add('mdc-notched-outline--upgraded');\n if (typeof requestAnimationFrame === 'function') {\n label.style.transitionDuration = '0s';\n this._ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => label.style.transitionDuration = '');\n });\n }\n } else {\n element.classList.add('mdc-notched-outline--no-label');\n }\n }\n _setNotchWidth(labelWidth) {\n const notch = this._notch.nativeElement;\n if (!this.open || !labelWidth) {\n notch.style.width = '';\n } else {\n const NOTCH_ELEMENT_PADDING = 8;\n const NOTCH_ELEMENT_BORDER = 1;\n notch.style.width = `calc(${labelWidth}px * var(--mat-mdc-form-field-floating-label-scale, 0.75) + ${NOTCH_ELEMENT_PADDING + NOTCH_ELEMENT_BORDER}px)`;\n }\n }\n _setMaxWidth(prefixAndSuffixWidth) {\n // Set this only on the notch to avoid style recalculations in other parts of the form field.\n this._notch.nativeElement.style.setProperty('--mat-form-field-notch-max-width', `calc(100% - ${prefixAndSuffixWidth}px)`);\n }\n static ɵfac = function MatFormFieldNotchedOutline_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatFormFieldNotchedOutline)();\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatFormFieldNotchedOutline,\n selectors: [[\"div\", \"matFormFieldNotchedOutline\", \"\"]],\n viewQuery: function MatFormFieldNotchedOutline_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c0, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._notch = _t.first);\n }\n },\n hostAttrs: [1, \"mdc-notched-outline\"],\n hostVars: 2,\n hostBindings: function MatFormFieldNotchedOutline_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mdc-notched-outline--notched\", ctx.open);\n }\n },\n inputs: {\n open: [0, \"matFormFieldNotchedOutlineOpen\", \"open\"]\n },\n attrs: _c1,\n ngContentSelectors: _c2,\n decls: 5,\n vars: 0,\n 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\"]],\n template: function MatFormFieldNotchedOutline_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵdomElement(0, \"div\", 1);\n i0.ɵɵdomElementStart(1, \"div\", 2, 0);\n i0.ɵɵprojection(3);\n i0.ɵɵdomElementEnd();\n i0.ɵɵdomElement(4, \"div\", 3);\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatFormFieldNotchedOutline, [{\n type: Component,\n args: [{\n selector: 'div[matFormFieldNotchedOutline]',\n host: {\n 'class': 'mdc-notched-outline',\n // Besides updating the notch state through the MDC component, we toggle this class through\n // a host binding in order to ensure that the notched-outline renders correctly on the server.\n '[class.mdc-notched-outline--notched]': 'open'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n 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\"\n }]\n }], null, {\n open: [{\n type: Input,\n args: ['matFormFieldNotchedOutlineOpen']\n }],\n _notch: [{\n type: ViewChild,\n args: ['notch']\n }]\n });\n})();\n\n/** An interface which allows a control to work inside of a `MatFormField`. */\nclass MatFormFieldControl {\n /** The value of the control. */\n value;\n /**\n * Stream that emits whenever the state of the control changes such that the parent `MatFormField`\n * needs to run change detection.\n */\n stateChanges;\n /** The element ID for this control. */\n id;\n /** The placeholder for this control. */\n placeholder;\n /** Gets the AbstractControlDirective for this control. */\n ngControl;\n /** Whether the control is focused. */\n focused;\n /** Whether the control is empty. */\n empty;\n /** Whether the `MatFormField` label should try to float. */\n shouldLabelFloat;\n /** Whether the control is required. */\n required;\n /** Whether the control is disabled. */\n disabled;\n /** Whether the control is in an error state. */\n errorState;\n /**\n * An optional name for the control type that can be used to distinguish `mat-form-field` elements\n * based on their control type. The form field will add a class,\n * `mat-form-field-type-{{controlType}}` to its root element.\n */\n controlType;\n /**\n * Whether the input is currently in an autofilled state. If property is not present on the\n * control it is assumed to be false.\n */\n autofilled;\n /**\n * Value of `aria-describedby` that should be merged with the described-by ids\n * which are set by the form-field.\n */\n userAriaDescribedBy;\n /**\n * Whether to automatically assign the ID of the form field as the `for` attribute\n * on the `<label>` inside the form field. Set this to true to prevent the form\n * field from associating the label with non-native elements.\n */\n disableAutomaticLabeling;\n /** Gets the list of element IDs that currently describe this control. */\n describedByIds;\n static ɵfac = function MatFormFieldControl_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatFormFieldControl)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatFormFieldControl\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatFormFieldControl, [{\n type: Directive\n }], null, null);\n})();\n\n/** @docs-private */\nfunction getMatFormFieldPlaceholderConflictError() {\n return Error('Placeholder attribute and child element were both specified.');\n}\n/** @docs-private */\nfunction getMatFormFieldDuplicatedHintError(align) {\n return Error(`A hint was already declared for 'align=\"${align}\"'.`);\n}\n/** @docs-private */\nfunction getMatFormFieldMissingControlError() {\n return Error('mat-form-field must contain a MatFormFieldControl.');\n}\n\n/**\n * Injection token that can be used to inject an instances of `MatFormField`. It serves\n * as alternative token to the actual `MatFormField` class which would cause unnecessary\n * retention of the `MatFormField` class and its component metadata.\n */\nconst MAT_FORM_FIELD = new InjectionToken('MatFormField');\n/**\n * Injection token that can be used to configure the\n * default options for all form field within an app.\n */\nconst MAT_FORM_FIELD_DEFAULT_OPTIONS = new InjectionToken('MAT_FORM_FIELD_DEFAULT_OPTIONS');\n/** Default appearance used by the form field. */\nconst DEFAULT_APPEARANCE = 'fill';\n/**\n * Whether the label for form fields should by default float `always`,\n * `never`, or `auto`.\n */\nconst DEFAULT_FLOAT_LABEL = 'auto';\n/** Default way that the subscript element height is set. */\nconst DEFAULT_SUBSCRIPT_SIZING = 'fixed';\n/**\n * Default transform for docked floating labels in a MDC text-field. This value has been\n * extracted from the MDC text-field styles because we programmatically modify the docked\n * label transform, but do not want to accidentally discard the default label transform.\n */\nconst FLOATING_LABEL_DEFAULT_DOCKED_TRANSFORM = `translateY(-50%)`;\n/** Container for form controls that applies Material Design styling and behavior. */\nclass MatFormField {\n _elementRef = inject(ElementRef);\n _changeDetectorRef = inject(ChangeDetectorRef);\n _platform = inject(Platform);\n _idGenerator = inject(_IdGenerator);\n _ngZone = inject(NgZone);\n _defaults = inject(MAT_FORM_FIELD_DEFAULT_OPTIONS, {\n optional: true\n });\n _currentDirection;\n _textField;\n _iconPrefixContainer;\n _textPrefixContainer;\n _iconSuffixContainer;\n _textSuffixContainer;\n _floatingLabel;\n _notchedOutline;\n _lineRipple;\n _iconPrefixContainerSignal = viewChild('iconPrefixContainer');\n _textPrefixContainerSignal = viewChild('textPrefixContainer');\n _iconSuffixContainerSignal = viewChild('iconSuffixContainer');\n _textSuffixContainerSignal = viewChild('textSuffixContainer');\n _prefixSuffixContainers = computed(() => {\n return [this._iconPrefixContainerSignal(), this._textPrefixContainerSignal(), this._iconSuffixContainerSignal(), this._textSuffixContainerSignal()].map(container => container?.nativeElement).filter(e => e !== undefined);\n });\n _formFieldControl;\n _prefixChildren;\n _suffixChildren;\n _errorChildren;\n _hintChildren;\n _labelChild = contentChild(MatLabel);\n /** Whether the required marker should be hidden. */\n get hideRequiredMarker() {\n return this._hideRequiredMarker;\n }\n set hideRequiredMarker(value) {\n this._hideRequiredMarker = coerceBooleanProperty(value);\n }\n _hideRequiredMarker = false;\n /**\n * Theme color of the form field. This API is supported in M2 themes only, it\n * has no effect in M3 themes. For color customization in M3, see https://material.angular.dev/components/form-field/styling.\n *\n * For information on applying color variants in M3, see\n * https://material.angular.dev/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants\n */\n color = 'primary';\n /** Whether the label should always float or float as the user types. */\n get floatLabel() {\n return this._floatLabel || this._defaults?.floatLabel || DEFAULT_FLOAT_LABEL;\n }\n set floatLabel(value) {\n if (value !== this._floatLabel) {\n this._floatLabel = value;\n // For backwards compatibility. Custom form field controls or directives might set\n // the \"floatLabel\" input and expect the form field view to be updated automatically.\n // e.g. autocomplete trigger. Ideally we'd get rid of this and the consumers would just\n // emit the \"stateChanges\" observable. TODO(devversion): consider removing.\n this._changeDetectorRef.markForCheck();\n }\n }\n _floatLabel;\n /** The form field appearance style. */\n get appearance() {\n return this._appearanceSignal();\n }\n set appearance(value) {\n const newAppearance = value || this._defaults?.appearance || DEFAULT_APPEARANCE;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (newAppearance !== 'fill' && newAppearance !== 'outline') {\n throw new Error(`MatFormField: Invalid appearance \"${newAppearance}\", valid values are \"fill\" or \"outline\".`);\n }\n }\n this._appearanceSignal.set(newAppearance);\n }\n _appearanceSignal = signal(DEFAULT_APPEARANCE);\n /**\n * Whether the form field should reserve space for one line of hint/error text (default)\n * or to have the spacing grow from 0px as needed based on the size of the hint/error content.\n * Note that when using dynamic sizing, layout shifts will occur when hint/error text changes.\n */\n get subscriptSizing() {\n return this._subscriptSizing || this._defaults?.subscriptSizing || DEFAULT_SUBSCRIPT_SIZING;\n }\n set subscriptSizing(value) {\n this._subscriptSizing = value || this._defaults?.subscriptSizing || DEFAULT_SUBSCRIPT_SIZING;\n }\n _subscriptSizing = null;\n /** Text for the form field hint. */\n get hintLabel() {\n return this._hintLabel;\n }\n set hintLabel(value) {\n this._hintLabel = value;\n this._processHints();\n }\n _hintLabel = '';\n _hasIconPrefix = false;\n _hasTextPrefix = false;\n _hasIconSuffix = false;\n _hasTextSuffix = false;\n // Unique id for the internal form field label.\n _labelId = this._idGenerator.getId('mat-mdc-form-field-label-');\n // Unique id for the hint label.\n _hintLabelId = this._idGenerator.getId('mat-mdc-hint-');\n // Ids obtained from the error and hint fields\n _describedByIds;\n /** Gets the current form field control */\n get _control() {\n return this._explicitFormFieldControl || this._formFieldControl;\n }\n set _control(value) {\n this._explicitFormFieldControl = value;\n }\n _destroyed = new Subject();\n _isFocused = null;\n _explicitFormFieldControl;\n _previousControl = null;\n _previousControlValidatorFn = null;\n _stateChanges;\n _valueChanges;\n _describedByChanges;\n _outlineLabelOffsetResizeObserver = null;\n _animationsDisabled = _animationsDisabled();\n constructor() {\n const defaults = this._defaults;\n const dir = inject(Directionality);\n if (defaults) {\n if (defaults.appearance) {\n this.appearance = defaults.appearance;\n }\n this._hideRequiredMarker = Boolean(defaults?.hideRequiredMarker);\n if (defaults.color) {\n this.color = defaults.color;\n }\n }\n // We need this value inside a `afterRenderEffect`, however at the time of writing, reading the\n // signal directly causes a memory leak (see https://github.com/angular/angular/issues/62980).\n // TODO(crisbeto): clean this up once the framework issue is resolved.\n effect(() => this._currentDirection = dir.valueSignal());\n this._syncOutlineLabelOffset();\n }\n ngAfterViewInit() {\n // Initial focus state sync. This happens rarely, but we want to account for\n // it in case the form field control has \"focused\" set to true on init.\n this._updateFocusState();\n if (!this._animationsDisabled) {\n this._ngZone.runOutsideAngular(() => {\n // Enable animations after a certain amount of time so that they don't run on init.\n setTimeout(() => {\n this._elementRef.nativeElement.classList.add('mat-form-field-animations-enabled');\n }, 300);\n });\n }\n // Because the above changes a value used in the template after it was checked, we need\n // to trigger CD or the change might not be reflected if there is no other CD scheduled.\n this._changeDetectorRef.detectChanges();\n }\n ngAfterContentInit() {\n this._assertFormFieldControl();\n this._initializeSubscript();\n this._initializePrefixAndSuffix();\n }\n ngAfterContentChecked() {\n this._assertFormFieldControl();\n // if form field was being used with an input in first place and then replaced by other\n // component such as select.\n if (this._control !== this._previousControl) {\n this._initializeControl(this._previousControl);\n // keep a reference for last validator we had.\n if (this._control.ngControl && this._control.ngControl.control) {\n this._previousControlValidatorFn = this._control.ngControl.control.validator;\n }\n this._previousControl = this._control;\n }\n // make sure the the control has been initialized.\n if (this._control.ngControl && this._control.ngControl.control) {\n // get the validators for current control.\n const validatorFn = this._control.ngControl.control.validator;\n // if our current validatorFn isn't equal to it might be we are CD behind, marking the\n // component will allow us to catch up.\n if (validatorFn !== this._previousControlValidatorFn) {\n this._changeDetectorRef.markForCheck();\n }\n }\n }\n ngOnDestroy() {\n this._outlineLabelOffsetResizeObserver?.disconnect();\n this._stateChanges?.unsubscribe();\n this._valueChanges?.unsubscribe();\n this._describedByChanges?.unsubscribe();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /**\n * Gets the id of the label element. If no label is present, returns `null`.\n */\n getLabelId = computed(() => this._hasFloatingLabel() ? this._labelId : null);\n /**\n * Gets an ElementRef for the element that a overlay attached to the form field\n * should be positioned relative to.\n */\n getConnectedOverlayOrigin() {\n return this._textField || this._elementRef;\n }\n /** Animates the placeholder up and locks it in position. */\n _animateAndLockLabel() {\n // This is for backwards compatibility only. Consumers of the form field might use\n // this method. e.g. the autocomplete trigger. This method has been added to the non-MDC\n // form field because setting \"floatLabel\" to \"always\" caused the label to float without\n // animation. This is different in MDC where the label always animates, so this method\n // is no longer necessary. There doesn't seem any benefit in adding logic to allow changing\n // the floating label state without animations. The non-MDC implementation was inconsistent\n // because it always animates if \"floatLabel\" is set away from \"always\".\n // TODO(devversion): consider removing this method when releasing the MDC form field.\n if (this._hasFloatingLabel()) {\n this.floatLabel = 'always';\n }\n }\n /** Initializes the registered form field control. */\n _initializeControl(previousControl) {\n const control = this._control;\n const classPrefix = 'mat-mdc-form-field-type-';\n if (previousControl) {\n this._elementRef.nativeElement.classList.remove(classPrefix + previousControl.controlType);\n }\n if (control.controlType) {\n this._elementRef.nativeElement.classList.add(classPrefix + control.controlType);\n }\n // Subscribe to changes in the child control state in order to update the form field UI.\n this._stateChanges?.unsubscribe();\n this._stateChanges = control.stateChanges.subscribe(() => {\n this._updateFocusState();\n this._changeDetectorRef.markForCheck();\n });\n // Updating the `aria-describedby` touches the DOM. Only do it if it actually needs to change.\n this._describedByChanges?.unsubscribe();\n this._describedByChanges = control.stateChanges.pipe(startWith([undefined, undefined]), map(() => [control.errorState, control.userAriaDescribedBy]), pairwise(), filter(([[prevErrorState, prevDescribedBy], [currentErrorState, currentDescribedBy]]) => {\n return prevErrorState !== currentErrorState || prevDescribedBy !== currentDescribedBy;\n })).subscribe(() => this._syncDescribedByIds());\n this._valueChanges?.unsubscribe();\n // Run change detection if the value changes.\n if (control.ngControl && control.ngControl.valueChanges) {\n this._valueChanges = control.ngControl.valueChanges.pipe(takeUntil(this._destroyed)).subscribe(() => this._changeDetectorRef.markForCheck());\n }\n }\n _checkPrefixAndSuffixTypes() {\n this._hasIconPrefix = !!this._prefixChildren.find(p => !p._isText);\n this._hasTextPrefix = !!this._prefixChildren.find(p => p._isText);\n this._hasIconSuffix = !!this._suffixChildren.find(s => !s._isText);\n this._hasTextSuffix = !!this._suffixChildren.find(s => s._isText);\n }\n /** Initializes the prefix and suffix containers. */\n _initializePrefixAndSuffix() {\n this._checkPrefixAndSuffixTypes();\n // Mark the form field as dirty whenever the prefix or suffix children change. This\n // is necessary because we conditionally display the prefix/suffix containers based\n // on whether there is projected content.\n merge(this._prefixChildren.changes, this._suffixChildren.changes).subscribe(() => {\n this._checkPrefixAndSuffixTypes();\n this._changeDetectorRef.markForCheck();\n });\n }\n /**\n * Initializes the subscript by validating hints and synchronizing \"aria-describedby\" ids\n * with the custom form field control. Also subscribes to hint and error changes in order\n * to be able to validate and synchronize ids on change.\n */\n _initializeSubscript() {\n // Re-validate when the number of hints changes.\n this._hintChildren.changes.subscribe(() => {\n this._processHints();\n this._changeDetectorRef.markForCheck();\n });\n // Update the aria-described by when the number of errors changes.\n this._errorChildren.changes.subscribe(() => {\n this._syncDescribedByIds();\n this._changeDetectorRef.markForCheck();\n });\n // Initial mat-hint validation and subscript describedByIds sync.\n this._validateHints();\n this._syncDescribedByIds();\n }\n /** Throws an error if the form field's control is missing. */\n _assertFormFieldControl() {\n if (!this._control && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatFormFieldMissingControlError();\n }\n }\n _updateFocusState() {\n const controlFocused = this._control.focused;\n // Usually the MDC foundation would call \"activateFocus\" and \"deactivateFocus\" whenever\n // certain DOM events are emitted. This is not possible in our implementation of the\n // form field because we support abstract form field controls which are not necessarily\n // of type input, nor do we have a reference to a native form field control element. Instead\n // we handle the focus by checking if the abstract form field control focused state changes.\n if (controlFocused && !this._isFocused) {\n this._isFocused = true;\n this._lineRipple?.activate();\n } else if (!controlFocused && (this._isFocused || this._isFocused === null)) {\n this._isFocused = false;\n this._lineRipple?.deactivate();\n }\n this._elementRef.nativeElement.classList.toggle('mat-focused', controlFocused);\n this._textField?.nativeElement.classList.toggle('mdc-text-field--focused', controlFocused);\n }\n /**\n * The floating label in the docked state needs to account for prefixes. The horizontal offset\n * is calculated whenever the appearance changes to `outline`, the prefixes change, or when the\n * form field is added to the DOM. This method sets up all subscriptions which are needed to\n * trigger the label offset update.\n */\n _syncOutlineLabelOffset() {\n afterRenderEffect({\n earlyRead: () => {\n if (this._appearanceSignal() !== 'outline') {\n this._outlineLabelOffsetResizeObserver?.disconnect();\n return null;\n }\n // Setup a resize observer to monitor changes to the size of the prefix / suffix and\n // readjust the label offset.\n if (globalThis.ResizeObserver) {\n this._outlineLabelOffsetResizeObserver ||= new globalThis.ResizeObserver(() => {\n this._writeOutlinedLabelStyles(this._getOutlinedLabelOffset());\n });\n for (const el of this._prefixSuffixContainers()) {\n this._outlineLabelOffsetResizeObserver.observe(el, {\n box: 'border-box'\n });\n }\n }\n return this._getOutlinedLabelOffset();\n },\n write: labelStyles => this._writeOutlinedLabelStyles(labelStyles())\n });\n }\n /** Whether the floating label should always float or not. */\n _shouldAlwaysFloat() {\n return this.floatLabel === 'always';\n }\n _hasOutline() {\n return this.appearance === 'outline';\n }\n /**\n * Whether the label should display in the infix. Labels in the outline appearance are\n * displayed as part of the notched-outline and are horizontally offset to account for\n * form field prefix content. This won't work in server side rendering since we cannot\n * measure the width of the prefix container. To make the docked label appear as if the\n * right offset has been calculated, we forcibly render the label inside the infix. Since\n * the label is part of the infix, the label cannot overflow the prefix content.\n */\n _forceDisplayInfixLabel() {\n return !this._platform.isBrowser && this._prefixChildren.length && !this._shouldLabelFloat();\n }\n _hasFloatingLabel = computed(() => !!this._labelChild());\n _shouldLabelFloat() {\n if (!this._hasFloatingLabel()) {\n return false;\n }\n return this._control.shouldLabelFloat || this._shouldAlwaysFloat();\n }\n /**\n * Determines whether a class from the AbstractControlDirective\n * should be forwarded to the host element.\n */\n _shouldForward(prop) {\n const control = this._control ? this._control.ngControl : null;\n return control && control[prop];\n }\n /** Gets the type of subscript message to render (error or hint). */\n _getSubscriptMessageType() {\n return this._errorChildren && this._errorChildren.length > 0 && this._control.errorState ? 'error' : 'hint';\n }\n /** Handle label resize events. */\n _handleLabelResized() {\n this._refreshOutlineNotchWidth();\n }\n /** Refreshes the width of the outline-notch, if present. */\n _refreshOutlineNotchWidth() {\n if (!this._hasOutline() || !this._floatingLabel || !this._shouldLabelFloat()) {\n this._notchedOutline?._setNotchWidth(0);\n } else {\n this._notchedOutline?._setNotchWidth(this._floatingLabel.getWidth());\n }\n }\n /** Does any extra processing that is required when handling the hints. */\n _processHints() {\n this._validateHints();\n this._syncDescribedByIds();\n }\n /**\n * Ensure that there is a maximum of one of each \"mat-hint\" alignment specified. The hint\n * label specified set through the input is being considered as \"start\" aligned.\n *\n * This method is a noop if Angular runs in production mode.\n */\n _validateHints() {\n if (this._hintChildren && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n let startHint;\n let endHint;\n this._hintChildren.forEach(hint => {\n if (hint.align === 'start') {\n if (startHint || this.hintLabel) {\n throw getMatFormFieldDuplicatedHintError('start');\n }\n startHint = hint;\n } else if (hint.align === 'end') {\n if (endHint) {\n throw getMatFormFieldDuplicatedHintError('end');\n }\n endHint = hint;\n }\n });\n }\n }\n /**\n * Sets the list of element IDs that describe the child control. This allows the control to update\n * its `aria-describedby` attribute accordingly.\n */\n _syncDescribedByIds() {\n if (this._control) {\n let ids = [];\n // TODO(wagnermaciel): Remove the type check when we find the root cause of this bug.\n if (this._control.userAriaDescribedBy && typeof this._control.userAriaDescribedBy === 'string') {\n ids.push(...this._control.userAriaDescribedBy.split(' '));\n }\n if (this._getSubscriptMessageType() === 'hint') {\n const startHint = this._hintChildren ? this._hintChildren.find(hint => hint.align === 'start') : null;\n const endHint = this._hintChildren ? this._hintChildren.find(hint => hint.align === 'end') : null;\n if (startHint) {\n ids.push(startHint.id);\n } else if (this._hintLabel) {\n ids.push(this._hintLabelId);\n }\n if (endHint) {\n ids.push(endHint.id);\n }\n } else if (this._errorChildren) {\n ids.push(...this._errorChildren.map(error => error.id));\n }\n const existingDescribedBy = this._control.describedByIds;\n let toAssign;\n // In some cases there might be some `aria-describedby` IDs that were assigned directly,\n // like by the `AriaDescriber` (see #30011). Attempt to preserve them by taking the previous\n // attribute value and filtering out the IDs that came from the previous `setDescribedByIds`\n // call. Note the `|| ids` here allows us to avoid duplicating IDs on the first render.\n if (existingDescribedBy) {\n const exclude = this._describedByIds || ids;\n toAssign = ids.concat(existingDescribedBy.filter(id => id && !exclude.includes(id)));\n } else {\n toAssign = ids;\n }\n this._control.setDescribedByIds(toAssign);\n this._describedByIds = ids;\n }\n }\n /**\n * Calculates the horizontal offset of the label in the outline appearance. In the outline\n * appearance, the notched-outline and label are not relative to the infix container because\n * the outline intends to surround prefixes, suffixes and the infix. This means that the\n * floating label by default overlaps prefixes in the docked state. To avoid this, we need to\n * horizontally offset the label by the width of the prefix container. The MDC text-field does\n * not need to do this because they use a fixed width for prefixes. Hence, they can simply\n * incorporate the horizontal offset into their default text-field styles.\n */\n _getOutlinedLabelOffset() {\n if (!this._hasOutline() || !this._floatingLabel) {\n return null;\n }\n // If no prefix is displayed, reset the outline label offset from potential\n // previous label offset updates.\n if (!this._iconPrefixContainer && !this._textPrefixContainer) {\n return ['', null];\n }\n // If the form field is not attached to the DOM yet (e.g. in a tab), we defer\n // the label offset update until the zone stabilizes.\n if (!this._isAttachedToDom()) {\n return null;\n }\n const iconPrefixContainer = this._iconPrefixContainer?.nativeElement;\n const textPrefixContainer = this._textPrefixContainer?.nativeElement;\n const iconSuffixContainer = this._iconSuffixContainer?.nativeElement;\n const textSuffixContainer = this._textSuffixContainer?.nativeElement;\n const iconPrefixContainerWidth = iconPrefixContainer?.getBoundingClientRect().width ?? 0;\n const textPrefixContainerWidth = textPrefixContainer?.getBoundingClientRect().width ?? 0;\n const iconSuffixContainerWidth = iconSuffixContainer?.getBoundingClientRect().width ?? 0;\n const textSuffixContainerWidth = textSuffixContainer?.getBoundingClientRect().width ?? 0;\n // If the directionality is RTL, the x-axis transform needs to be inverted. This\n // is because `transformX` does not change based on the page directionality.\n const negate = this._currentDirection === 'rtl' ? '-1' : '1';\n const prefixWidth = `${iconPrefixContainerWidth + textPrefixContainerWidth}px`;\n const labelOffset = `var(--mat-mdc-form-field-label-offset-x, 0px)`;\n const labelHorizontalOffset = `calc(${negate} * (${prefixWidth} + ${labelOffset}))`;\n // Update the translateX of the floating label to account for the prefix container,\n // but allow the CSS to override this setting via a CSS variable when the label is\n // floating.\n const floatingLabelTransform = 'var(--mat-mdc-form-field-label-transform, ' + `${FLOATING_LABEL_DEFAULT_DOCKED_TRANSFORM} translateX(${labelHorizontalOffset}))`;\n // Prevent the label from overlapping the suffix when in resting position.\n const notchedOutlineWidth = iconPrefixContainerWidth + textPrefixContainerWidth + iconSuffixContainerWidth + textSuffixContainerWidth;\n return [floatingLabelTransform, notchedOutlineWidth];\n }\n /** Writes the styles produced by `_getOutlineLabelOffset` synchronously to the DOM. */\n _writeOutlinedLabelStyles(styles) {\n if (styles !== null) {\n const [floatingLabelTransform, notchedOutlineWidth] = styles;\n if (this._floatingLabel) {\n this._floatingLabel.element.style.transform = floatingLabelTransform;\n }\n if (notchedOutlineWidth !== null) {\n this._notchedOutline?._setMaxWidth(notchedOutlineWidth);\n }\n }\n }\n /** Checks whether the form field is attached to the DOM. */\n _isAttachedToDom() {\n const element = this._elementRef.nativeElement;\n if (element.getRootNode) {\n const rootNode = element.getRootNode();\n // If the element is inside the DOM the root node will be either the document\n // or the closest shadow root, otherwise it'll be the element itself.\n return rootNode && rootNode !== element;\n }\n // Otherwise fall back to checking if it's in the document. This doesn't account for\n // shadow DOM, however browser that support shadow DOM should support `getRootNode` as well.\n return document.documentElement.contains(element);\n }\n static ɵfac = function MatFormField_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatFormField)();\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatFormField,\n selectors: [[\"mat-form-field\"]],\n contentQueries: function MatFormField_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuerySignal(dirIndex, ctx._labelChild, MatLabel, 5);\n i0.ɵɵcontentQuery(dirIndex, MatFormFieldControl, 5);\n i0.ɵɵcontentQuery(dirIndex, MAT_PREFIX, 5);\n i0.ɵɵcontentQuery(dirIndex, MAT_SUFFIX, 5);\n i0.ɵɵcontentQuery(dirIndex, MAT_ERROR, 5);\n i0.ɵɵcontentQuery(dirIndex, MatHint, 5);\n }\n if (rf & 2) {\n i0.ɵɵqueryAdvance();\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._formFieldControl = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._prefixChildren = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._suffixChildren = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._errorChildren = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._hintChildren = _t);\n }\n },\n viewQuery: function MatFormField_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuerySignal(ctx._iconPrefixContainerSignal, _c3, 5);\n i0.ɵɵviewQuerySignal(ctx._textPrefixContainerSignal, _c4, 5);\n i0.ɵɵviewQuerySignal(ctx._iconSuffixContainerSignal, _c5, 5);\n i0.ɵɵviewQuerySignal(ctx._textSuffixContainerSignal, _c6, 5);\n i0.ɵɵviewQuery(_c7, 5);\n i0.ɵɵviewQuery(_c3, 5);\n i0.ɵɵviewQuery(_c4, 5);\n i0.ɵɵviewQuery(_c5, 5);\n i0.ɵɵviewQuery(_c6, 5);\n i0.ɵɵviewQuery(MatFormFieldFloatingLabel, 5);\n i0.ɵɵviewQuery(MatFormFieldNotchedOutline, 5);\n i0.ɵɵviewQuery(MatFormFieldLineRipple, 5);\n }\n if (rf & 2) {\n i0.ɵɵqueryAdvance(4);\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._textField = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._iconPrefixContainer = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._textPrefixContainer = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._iconSuffixContainer = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._textSuffixContainer = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._floatingLabel = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._notchedOutline = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._lineRipple = _t.first);\n }\n },\n hostAttrs: [1, \"mat-mdc-form-field\"],\n hostVars: 38,\n hostBindings: function MatFormField_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"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-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\"));\n }\n },\n inputs: {\n hideRequiredMarker: \"hideRequiredMarker\",\n color: \"color\",\n floatLabel: \"floatLabel\",\n appearance: \"appearance\",\n subscriptSizing: \"subscriptSizing\",\n hintLabel: \"hintLabel\"\n },\n exportAs: [\"matFormField\"],\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_FORM_FIELD,\n useExisting: MatFormField\n }, {\n provide: FLOATING_LABEL_PARENT,\n useExisting: MatFormField\n }])],\n ngContentSelectors: _c9,\n decls: 19,\n vars: 25,\n 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\"]],\n template: function MatFormField_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵprojectionDef(_c8);\n i0.ɵɵtemplate(0, MatFormField_ng_template_0_Template, 1, 1, \"ng-template\", null, 0, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵelementStart(2, \"div\", 6, 1);\n i0.ɵɵlistener(\"click\", function MatFormField_Template_div_click_2_listener($event) {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx._control.onContainerClick($event));\n });\n i0.ɵɵconditionalCreate(4, MatFormField_Conditional_4_Template, 1, 0, \"div\", 7);\n i0.ɵɵelementStart(5, \"div\", 8);\n i0.ɵɵconditionalCreate(6, MatFormField_Conditional_6_Template, 2, 2, \"div\", 9);\n i0.ɵɵconditionalCreate(7, MatFormField_Conditional_7_Template, 3, 0, \"div\", 10);\n i0.ɵɵconditionalCreate(8, MatFormField_Conditional_8_Template, 3, 0, \"div\", 11);\n i0.ɵɵelementStart(9, \"div\", 12);\n i0.ɵɵconditionalCreate(10, MatFormField_Conditional_10_Template, 1, 1, null, 13);\n i0.ɵɵprojection(11);\n i0.ɵɵelementEnd();\n i0.ɵɵconditionalCreate(12, MatFormField_Conditional_12_Template, 3, 0, \"div\", 14);\n i0.ɵɵconditionalCreate(13, MatFormField_Conditional_13_Template, 3, 0, \"div\", 15);\n i0.ɵɵelementEnd();\n i0.ɵɵconditionalCreate(14, MatFormField_Conditional_14_Template, 1, 0, \"div\", 16);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(15, \"div\", 17)(16, \"div\", 18);\n i0.ɵɵconditionalCreate(17, MatFormField_Case_17_Template, 1, 0)(18, MatFormField_Case_18_Template, 4, 1);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n let tmp_19_0;\n i0.ɵɵadvance(2);\n i0.ɵɵclassProp(\"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);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(!ctx._hasOutline() && !ctx._control.disabled ? 4 : -1);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(ctx._hasOutline() ? 6 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx._hasIconPrefix ? 7 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx._hasTextPrefix ? 8 : -1);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(!ctx._hasOutline() || ctx._forceDisplayInfixLabel() ? 10 : -1);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(ctx._hasTextSuffix ? 12 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx._hasIconSuffix ? 13 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(!ctx._hasOutline() ? 14 : -1);\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"mat-mdc-form-field-subscript-dynamic-size\", ctx.subscriptSizing === \"dynamic\");\n const subscriptMessageType_r4 = ctx._getSubscriptMessageType();\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"mat-mdc-form-field-error-wrapper\", subscriptMessageType_r4 === \"error\")(\"mat-mdc-form-field-hint-wrapper\", subscriptMessageType_r4 === \"hint\");\n i0.ɵɵadvance();\n i0.ɵɵconditional((tmp_19_0 = subscriptMessageType_r4) === \"error\" ? 17 : tmp_19_0 === \"hint\" ? 18 : -1);\n }\n },\n dependencies: [MatFormFieldFloatingLabel, MatFormFieldNotchedOutline, NgTemplateOutlet, MatFormFieldLineRipple, MatHint],\n 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,.mdc-text-field__input::-webkit-search-cancel-button{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(--mat-form-field-filled-input-text-color, var(--mat-sys-on-surface));caret-color:var(--mat-form-field-filled-caret-color, var(--mat-sys-primary))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mat-form-field-outlined-input-text-color, var(--mat-sys-on-surface));caret-color:var(--mat-form-field-outlined-caret-color, var(--mat-sys-primary))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-filled-error-caret-color, var(--mat-sys-error))}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mat-form-field-outlined-error-caret-color, var(--mat-sys-error))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-text-field__input{color:var(--mat-form-field-filled-disabled-input-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--mat-form-field-outlined-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(--mat-form-field-filled-container-shape, var(--mat-sys-corner-extra-small));border-top-right-radius:var(--mat-form-field-filled-container-shape, var(--mat-sys-corner-extra-small))}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--mat-form-field-filled-container-color, var(--mat-sys-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled{background-color:var(--mat-form-field-filled-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(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)));padding-left:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)) + 4px)}[dir=rtl] .mdc-text-field--outlined{padding-right:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)) + 4px);padding-left:max(16px,var(--mat-form-field-outlined-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(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-hover-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-floating-label{color:var(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-error-hover-label-text-color, var(--mat-sys-on-error-container))}.mdc-text-field--filled .mdc-floating-label{font-family:var(--mat-form-field-filled-label-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-form-field-filled-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-form-field-filled-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-form-field-filled-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-hover-label-text-color, var(--mat-sys-on-surface))}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-floating-label{color:var(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-error-hover-label-text-color, var(--mat-sys-on-error-container))}.mdc-text-field--outlined .mdc-floating-label{font-family:var(--mat-form-field-outlined-label-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-form-field-outlined-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-form-field-outlined-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-form-field-outlined-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(--mat-form-field-outlined-outline-color, var(--mat-sys-outline));border-width:var(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-focus-outline-color, var(--mat-sys-primary))}.mdc-text-field--outlined.mdc-text-field--disabled .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px,var(--mat-form-field-outlined-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(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mat-form-field-outlined-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(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mat-form-field-outlined-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(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-left-radius:var(--mat-form-field-outlined-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%),calc(100% - max(12px, var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))) * 2))}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{max-width:min(100%,calc(100% - max(12px, var(--mat-form-field-outlined-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}[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(--mat-form-field-filled-active-indicator-height, 1px)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-focus-active-indicator-height, 2px)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mat-form-field-filled-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(--mat-form-field-filled-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\"],\n encapsulation: 2,\n changeDetection: 0\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatFormField, [{\n type: Component,\n args: [{\n selector: 'mat-form-field',\n exportAs: 'matFormField',\n host: {\n 'class': 'mat-mdc-form-field',\n '[class.mat-mdc-form-field-label-always-float]': '_shouldAlwaysFloat()',\n '[class.mat-mdc-form-field-has-icon-prefix]': '_hasIconPrefix',\n '[class.mat-mdc-form-field-has-icon-suffix]': '_hasIconSuffix',\n // Note that these classes reuse the same names as the non-MDC version, because they can be\n // considered a public API since custom form controls may use them to style themselves.\n // See https://github.com/angular/components/pull/20502#discussion_r486124901.\n '[class.mat-form-field-invalid]': '_control.errorState',\n '[class.mat-form-field-disabled]': '_control.disabled',\n '[class.mat-form-field-autofilled]': '_control.autofilled',\n '[class.mat-form-field-appearance-fill]': 'appearance == \"fill\"',\n '[class.mat-form-field-appearance-outline]': 'appearance == \"outline\"',\n '[class.mat-form-field-hide-placeholder]': '_hasFloatingLabel() && !_shouldLabelFloat()',\n '[class.mat-primary]': 'color !== \"accent\" && color !== \"warn\"',\n '[class.mat-accent]': 'color === \"accent\"',\n '[class.mat-warn]': 'color === \"warn\"',\n '[class.ng-untouched]': '_shouldForward(\"untouched\")',\n '[class.ng-touched]': '_shouldForward(\"touched\")',\n '[class.ng-pristine]': '_shouldForward(\"pristine\")',\n '[class.ng-dirty]': '_shouldForward(\"dirty\")',\n '[class.ng-valid]': '_shouldForward(\"valid\")',\n '[class.ng-invalid]': '_shouldForward(\"invalid\")',\n '[class.ng-pending]': '_shouldForward(\"pending\")'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{\n provide: MAT_FORM_FIELD,\n useExisting: MatFormField\n }, {\n provide: FLOATING_LABEL_PARENT,\n useExisting: MatFormField\n }],\n imports: [MatFormFieldFloatingLabel, MatFormFieldNotchedOutline, NgTemplateOutlet, MatFormFieldLineRipple, MatHint],\n 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\",\n 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,.mdc-text-field__input::-webkit-search-cancel-button{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(--mat-form-field-filled-input-text-color, var(--mat-sys-on-surface));caret-color:var(--mat-form-field-filled-caret-color, var(--mat-sys-primary))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mat-form-field-outlined-input-text-color, var(--mat-sys-on-surface));caret-color:var(--mat-form-field-outlined-caret-color, var(--mat-sys-primary))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-filled-error-caret-color, var(--mat-sys-error))}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mat-form-field-outlined-error-caret-color, var(--mat-sys-error))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-text-field__input{color:var(--mat-form-field-filled-disabled-input-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--mat-form-field-outlined-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(--mat-form-field-filled-container-shape, var(--mat-sys-corner-extra-small));border-top-right-radius:var(--mat-form-field-filled-container-shape, var(--mat-sys-corner-extra-small))}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--mat-form-field-filled-container-color, var(--mat-sys-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled{background-color:var(--mat-form-field-filled-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(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)));padding-left:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)) + 4px)}[dir=rtl] .mdc-text-field--outlined{padding-right:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)) + 4px);padding-left:max(16px,var(--mat-form-field-outlined-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(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-hover-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-floating-label{color:var(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-error-hover-label-text-color, var(--mat-sys-on-error-container))}.mdc-text-field--filled .mdc-floating-label{font-family:var(--mat-form-field-filled-label-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-form-field-filled-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-form-field-filled-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-form-field-filled-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-hover-label-text-color, var(--mat-sys-on-surface))}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-floating-label{color:var(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-error-hover-label-text-color, var(--mat-sys-on-error-container))}.mdc-text-field--outlined .mdc-floating-label{font-family:var(--mat-form-field-outlined-label-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-form-field-outlined-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-form-field-outlined-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-form-field-outlined-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(--mat-form-field-outlined-outline-color, var(--mat-sys-outline));border-width:var(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-focus-outline-color, var(--mat-sys-primary))}.mdc-text-field--outlined.mdc-text-field--disabled .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-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(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px,var(--mat-form-field-outlined-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(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mat-form-field-outlined-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(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mat-form-field-outlined-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(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-left-radius:var(--mat-form-field-outlined-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%),calc(100% - max(12px, var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))) * 2))}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{max-width:min(100%,calc(100% - max(12px, var(--mat-form-field-outlined-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}[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(--mat-form-field-filled-active-indicator-height, 1px)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-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(--mat-form-field-filled-focus-active-indicator-height, 2px)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mat-form-field-filled-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(--mat-form-field-filled-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\"]\n }]\n }], () => [], {\n _textField: [{\n type: ViewChild,\n args: ['textField']\n }],\n _iconPrefixContainer: [{\n type: ViewChild,\n args: ['iconPrefixContainer']\n }],\n _textPrefixContainer: [{\n type: ViewChild,\n args: ['textPrefixContainer']\n }],\n _iconSuffixContainer: [{\n type: ViewChild,\n args: ['iconSuffixContainer']\n }],\n _textSuffixContainer: [{\n type: ViewChild,\n args: ['textSuffixContainer']\n }],\n _floatingLabel: [{\n type: ViewChild,\n args: [MatFormFieldFloatingLabel]\n }],\n _notchedOutline: [{\n type: ViewChild,\n args: [MatFormFieldNotchedOutline]\n }],\n _lineRipple: [{\n type: ViewChild,\n args: [MatFormFieldLineRipple]\n }],\n _formFieldControl: [{\n type: ContentChild,\n args: [MatFormFieldControl]\n }],\n _prefixChildren: [{\n type: ContentChildren,\n args: [MAT_PREFIX, {\n descendants: true\n }]\n }],\n _suffixChildren: [{\n type: ContentChildren,\n args: [MAT_SUFFIX, {\n descendants: true\n }]\n }],\n _errorChildren: [{\n type: ContentChildren,\n args: [MAT_ERROR, {\n descendants: true\n }]\n }],\n _hintChildren: [{\n type: ContentChildren,\n args: [MatHint, {\n descendants: true\n }]\n }],\n hideRequiredMarker: [{\n type: Input\n }],\n color: [{\n type: Input\n }],\n floatLabel: [{\n type: Input\n }],\n appearance: [{\n type: Input\n }],\n subscriptSizing: [{\n type: Input\n }],\n hintLabel: [{\n type: Input\n }]\n });\n})();\nexport { MatLabel as M, MAT_ERROR as a, MatError as b, MatHint as c, MAT_PREFIX as d, MatPrefix as e, MAT_SUFFIX as f, MatSuffix as g, MAT_FORM_FIELD as h, MAT_FORM_FIELD_DEFAULT_OPTIONS as i, MatFormField as j, MatFormFieldControl as k, getMatFormFieldPlaceholderConflictError as l, getMatFormFieldDuplicatedHintError as m, getMatFormFieldMissingControlError as n };\n","import { ObserversModule } from '@angular/cdk/observers';\nimport * as i0 from '@angular/core';\nimport { NgModule } from '@angular/core';\nimport { j as MatFormField, M as MatLabel, b as MatError, c as MatHint, e as MatPrefix, g as MatSuffix } from './form-field-C_dE1cl0.mjs';\nimport { M as MatCommonModule } from './common-module-cKSwHniA.mjs';\nclass MatFormFieldModule {\n static ɵfac = function MatFormFieldModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatFormFieldModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatFormFieldModule,\n imports: [MatCommonModule, ObserversModule, MatFormField, MatLabel, MatError, MatHint, MatPrefix, MatSuffix],\n exports: [MatFormField, MatLabel, MatHint, MatError, MatPrefix, MatSuffix, MatCommonModule]\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule, ObserversModule, MatFormField, MatCommonModule]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatFormFieldModule, [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule, ObserversModule, MatFormField, MatLabel, MatError, MatHint, MatPrefix, MatSuffix],\n exports: [MatFormField, MatLabel, MatHint, MatError, MatPrefix, MatSuffix, MatCommonModule]\n }]\n }], null, null);\n})();\nexport { MatFormFieldModule as M };\n","import * as i0 from '@angular/core';\nimport { Component, ChangeDetectionStrategy, ViewEncapsulation, inject, NgZone, RendererFactory2, Injectable, ElementRef, EventEmitter, Directive, Output, Renderer2, DOCUMENT, booleanAttribute, Input, NgModule } from '@angular/core';\nimport { EMPTY, Subject } from 'rxjs';\nimport { P as Platform } from './platform-DNDzkVcI.mjs';\nimport { _ as _CdkPrivateStyleLoader } from './style-loader-B2sGQXxD.mjs';\nimport { a as coerceElement, c as coerceNumberProperty } from './element-x4z00URv.mjs';\nimport { auditTime } from 'rxjs/operators';\nimport '@angular/common';\n\n/** Component used to load the structural styles of the text field. */\nclass _CdkTextFieldStyleLoader {\n static ɵfac = function _CdkTextFieldStyleLoader_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || _CdkTextFieldStyleLoader)();\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: _CdkTextFieldStyleLoader,\n selectors: [[\"ng-component\"]],\n hostAttrs: [\"cdk-text-field-style-loader\", \"\"],\n decls: 0,\n vars: 0,\n template: function _CdkTextFieldStyleLoader_Template(rf, ctx) {},\n styles: [\"textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0 !important;box-sizing:content-box !important;height:auto !important;overflow:hidden !important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0 !important;box-sizing:content-box !important;height:0 !important}@keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(_CdkTextFieldStyleLoader, [{\n type: Component,\n args: [{\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'cdk-text-field-style-loader': ''\n },\n styles: [\"textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0 !important;box-sizing:content-box !important;height:auto !important;overflow:hidden !important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0 !important;box-sizing:content-box !important;height:0 !important}@keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}\\n\"]\n }]\n }], null, null);\n})();\n\n/** Options to pass to the animationstart listener. */\nconst listenerOptions = {\n passive: true\n};\n/**\n * An injectable service that can be used to monitor the autofill state of an input.\n * Based on the following blog post:\n * https://medium.com/@brunn/detecting-autofilled-fields-in-javascript-aed598d25da7\n */\nclass AutofillMonitor {\n _platform = inject(Platform);\n _ngZone = inject(NgZone);\n _renderer = inject(RendererFactory2).createRenderer(null, null);\n _styleLoader = inject(_CdkPrivateStyleLoader);\n _monitoredElements = new Map();\n constructor() {}\n monitor(elementOrRef) {\n if (!this._platform.isBrowser) {\n return EMPTY;\n }\n this._styleLoader.load(_CdkTextFieldStyleLoader);\n const element = coerceElement(elementOrRef);\n const info = this._monitoredElements.get(element);\n if (info) {\n return info.subject;\n }\n const subject = new Subject();\n const cssClass = 'cdk-text-field-autofilled';\n const listener = event => {\n // Animation events fire on initial element render, we check for the presence of the autofill\n // CSS class to make sure this is a real change in state, not just the initial render before\n // we fire off events.\n if (event.animationName === 'cdk-text-field-autofill-start' && !element.classList.contains(cssClass)) {\n element.classList.add(cssClass);\n this._ngZone.run(() => subject.next({\n target: event.target,\n isAutofilled: true\n }));\n } else if (event.animationName === 'cdk-text-field-autofill-end' && element.classList.contains(cssClass)) {\n element.classList.remove(cssClass);\n this._ngZone.run(() => subject.next({\n target: event.target,\n isAutofilled: false\n }));\n }\n };\n const unlisten = this._ngZone.runOutsideAngular(() => {\n element.classList.add('cdk-text-field-autofill-monitored');\n return this._renderer.listen(element, 'animationstart', listener, listenerOptions);\n });\n this._monitoredElements.set(element, {\n subject,\n unlisten\n });\n return subject;\n }\n stopMonitoring(elementOrRef) {\n const element = coerceElement(elementOrRef);\n const info = this._monitoredElements.get(element);\n if (info) {\n info.unlisten();\n info.subject.complete();\n element.classList.remove('cdk-text-field-autofill-monitored');\n element.classList.remove('cdk-text-field-autofilled');\n this._monitoredElements.delete(element);\n }\n }\n ngOnDestroy() {\n this._monitoredElements.forEach((_info, element) => this.stopMonitoring(element));\n }\n static ɵfac = function AutofillMonitor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || AutofillMonitor)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: AutofillMonitor,\n factory: AutofillMonitor.ɵfac,\n providedIn: 'root'\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(AutofillMonitor, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], () => [], null);\n})();\n/** A directive that can be used to monitor the autofill state of an input. */\nclass CdkAutofill {\n _elementRef = inject(ElementRef);\n _autofillMonitor = inject(AutofillMonitor);\n /** Emits when the autofill state of the element changes. */\n cdkAutofill = new EventEmitter();\n constructor() {}\n ngOnInit() {\n this._autofillMonitor.monitor(this._elementRef).subscribe(event => this.cdkAutofill.emit(event));\n }\n ngOnDestroy() {\n this._autofillMonitor.stopMonitoring(this._elementRef);\n }\n static ɵfac = function CdkAutofill_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkAutofill)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkAutofill,\n selectors: [[\"\", \"cdkAutofill\", \"\"]],\n outputs: {\n cdkAutofill: \"cdkAutofill\"\n }\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkAutofill, [{\n type: Directive,\n args: [{\n selector: '[cdkAutofill]'\n }]\n }], () => [], {\n cdkAutofill: [{\n type: Output\n }]\n });\n})();\n\n/** Directive to automatically resize a textarea to fit its content. */\nclass CdkTextareaAutosize {\n _elementRef = inject(ElementRef);\n _platform = inject(Platform);\n _ngZone = inject(NgZone);\n _renderer = inject(Renderer2);\n _resizeEvents = new Subject();\n /** Keep track of the previous textarea value to avoid resizing when the value hasn't changed. */\n _previousValue;\n _initialHeight;\n _destroyed = new Subject();\n _listenerCleanups;\n _minRows;\n _maxRows;\n _enabled = true;\n /**\n * Value of minRows as of last resize. If the minRows has decreased, the\n * height of the textarea needs to be recomputed to reflect the new minimum. The maxHeight\n * does not have the same problem because it does not affect the textarea's scrollHeight.\n */\n _previousMinRows = -1;\n _textareaElement;\n /** Minimum amount of rows in the textarea. */\n get minRows() {\n return this._minRows;\n }\n set minRows(value) {\n this._minRows = coerceNumberProperty(value);\n this._setMinHeight();\n }\n /** Maximum amount of rows in the textarea. */\n get maxRows() {\n return this._maxRows;\n }\n set maxRows(value) {\n this._maxRows = coerceNumberProperty(value);\n this._setMaxHeight();\n }\n /** Whether autosizing is enabled or not */\n get enabled() {\n return this._enabled;\n }\n set enabled(value) {\n // Only act if the actual value changed. This specifically helps to not run\n // resizeToFitContent too early (i.e. before ngAfterViewInit)\n if (this._enabled !== value) {\n (this._enabled = value) ? this.resizeToFitContent(true) : this.reset();\n }\n }\n get placeholder() {\n return this._textareaElement.placeholder;\n }\n set placeholder(value) {\n this._cachedPlaceholderHeight = undefined;\n if (value) {\n this._textareaElement.setAttribute('placeholder', value);\n } else {\n this._textareaElement.removeAttribute('placeholder');\n }\n this._cacheTextareaPlaceholderHeight();\n }\n /** Cached height of a textarea with a single row. */\n _cachedLineHeight;\n /** Cached height of a textarea with only the placeholder. */\n _cachedPlaceholderHeight;\n /** Cached scroll top of a textarea */\n _cachedScrollTop;\n /** Used to reference correct document/window */\n _document = inject(DOCUMENT);\n _hasFocus;\n _isViewInited = false;\n constructor() {\n const styleLoader = inject(_CdkPrivateStyleLoader);\n styleLoader.load(_CdkTextFieldStyleLoader);\n this._textareaElement = this._elementRef.nativeElement;\n }\n /** Sets the minimum height of the textarea as determined by minRows. */\n _setMinHeight() {\n const minHeight = this.minRows && this._cachedLineHeight ? `${this.minRows * this._cachedLineHeight}px` : null;\n if (minHeight) {\n this._textareaElement.style.minHeight = minHeight;\n }\n }\n /** Sets the maximum height of the textarea as determined by maxRows. */\n _setMaxHeight() {\n const maxHeight = this.maxRows && this._cachedLineHeight ? `${this.maxRows * this._cachedLineHeight}px` : null;\n if (maxHeight) {\n this._textareaElement.style.maxHeight = maxHeight;\n }\n }\n ngAfterViewInit() {\n if (this._platform.isBrowser) {\n // Remember the height which we started with in case autosizing is disabled\n this._initialHeight = this._textareaElement.style.height;\n this.resizeToFitContent();\n this._ngZone.runOutsideAngular(() => {\n this._listenerCleanups = [this._renderer.listen('window', 'resize', () => this._resizeEvents.next()), this._renderer.listen(this._textareaElement, 'focus', this._handleFocusEvent), this._renderer.listen(this._textareaElement, 'blur', this._handleFocusEvent)];\n this._resizeEvents.pipe(auditTime(16)).subscribe(() => {\n // Clear the cached heights since the styles can change\n // when the window is resized (e.g. by media queries).\n this._cachedLineHeight = this._cachedPlaceholderHeight = undefined;\n this.resizeToFitContent(true);\n });\n });\n this._isViewInited = true;\n this.resizeToFitContent(true);\n }\n }\n ngOnDestroy() {\n this._listenerCleanups?.forEach(cleanup => cleanup());\n this._resizeEvents.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /**\n * Cache the height of a single-row textarea if it has not already been cached.\n *\n * We need to know how large a single \"row\" of a textarea is in order to apply minRows and\n * maxRows. For the initial version, we will assume that the height of a single line in the\n * textarea does not ever change.\n */\n _cacheTextareaLineHeight() {\n if (this._cachedLineHeight) {\n return;\n }\n // Use a clone element because we have to override some styles.\n const textareaClone = this._textareaElement.cloneNode(false);\n const cloneStyles = textareaClone.style;\n textareaClone.rows = 1;\n // Use `position: absolute` so that this doesn't cause a browser layout and use\n // `visibility: hidden` so that nothing is rendered. Clear any other styles that\n // would affect the height.\n cloneStyles.position = 'absolute';\n cloneStyles.visibility = 'hidden';\n cloneStyles.border = 'none';\n cloneStyles.padding = '0';\n cloneStyles.height = '';\n cloneStyles.minHeight = '';\n cloneStyles.maxHeight = '';\n // App styles might be messing with the height through the positioning properties.\n cloneStyles.top = cloneStyles.bottom = cloneStyles.left = cloneStyles.right = 'auto';\n // In Firefox it happens that textarea elements are always bigger than the specified amount\n // of rows. This is because Firefox tries to add extra space for the horizontal scrollbar.\n // As a workaround that removes the extra space for the scrollbar, we can just set overflow\n // to hidden. This ensures that there is no invalid calculation of the line height.\n // See Firefox bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=33654\n cloneStyles.overflow = 'hidden';\n this._textareaElement.parentNode.appendChild(textareaClone);\n this._cachedLineHeight = textareaClone.clientHeight;\n textareaClone.remove();\n // Min and max heights have to be re-calculated if the cached line height changes\n this._setMinHeight();\n this._setMaxHeight();\n }\n _measureScrollHeight() {\n const element = this._textareaElement;\n const previousMargin = element.style.marginBottom || '';\n const isFirefox = this._platform.FIREFOX;\n const needsMarginFiller = isFirefox && this._hasFocus;\n const measuringClass = isFirefox ? 'cdk-textarea-autosize-measuring-firefox' : 'cdk-textarea-autosize-measuring';\n // In some cases the page might move around while we're measuring the `textarea` on Firefox. We\n // work around it by assigning a temporary margin with the same height as the `textarea` so that\n // it occupies the same amount of space. See #23233.\n if (needsMarginFiller) {\n element.style.marginBottom = `${element.clientHeight}px`;\n }\n // Reset the textarea height to auto in order to shrink back to its default size.\n // Also temporarily force overflow:hidden, so scroll bars do not interfere with calculations.\n element.classList.add(measuringClass);\n // The measuring class includes a 2px padding to workaround an issue with Chrome,\n // so we account for that extra space here by subtracting 4 (2px top + 2px bottom).\n const scrollHeight = element.scrollHeight - 4;\n element.classList.remove(measuringClass);\n if (needsMarginFiller) {\n element.style.marginBottom = previousMargin;\n }\n return scrollHeight;\n }\n _cacheTextareaPlaceholderHeight() {\n if (!this._isViewInited || this._cachedPlaceholderHeight != undefined) {\n return;\n }\n if (!this.placeholder) {\n this._cachedPlaceholderHeight = 0;\n return;\n }\n const value = this._textareaElement.value;\n this._textareaElement.value = this._textareaElement.placeholder;\n this._cachedPlaceholderHeight = this._measureScrollHeight();\n this._textareaElement.value = value;\n }\n /** Handles `focus` and `blur` events. */\n _handleFocusEvent = event => {\n this._hasFocus = event.type === 'focus';\n };\n ngDoCheck() {\n if (this._platform.isBrowser) {\n this.resizeToFitContent();\n }\n }\n /**\n * Resize the textarea to fit its content.\n * @param force Whether to force a height recalculation. By default the height will be\n * recalculated only if the value changed since the last call.\n */\n resizeToFitContent(force = false) {\n // If autosizing is disabled, just skip everything else\n if (!this._enabled) {\n return;\n }\n this._cacheTextareaLineHeight();\n this._cacheTextareaPlaceholderHeight();\n this._cachedScrollTop = this._textareaElement.scrollTop;\n // If we haven't determined the line-height yet, we know we're still hidden and there's no point\n // in checking the height of the textarea.\n if (!this._cachedLineHeight) {\n return;\n }\n const textarea = this._elementRef.nativeElement;\n const value = textarea.value;\n // Only resize if the value or minRows have changed since these calculations can be expensive.\n if (!force && this._minRows === this._previousMinRows && value === this._previousValue) {\n return;\n }\n const scrollHeight = this._measureScrollHeight();\n const height = Math.max(scrollHeight, this._cachedPlaceholderHeight || 0);\n // Use the scrollHeight to know how large the textarea *would* be if fit its entire value.\n textarea.style.height = `${height}px`;\n this._ngZone.runOutsideAngular(() => {\n if (typeof requestAnimationFrame !== 'undefined') {\n requestAnimationFrame(() => this._scrollToCaretPosition(textarea));\n } else {\n setTimeout(() => this._scrollToCaretPosition(textarea));\n }\n });\n this._previousValue = value;\n this._previousMinRows = this._minRows;\n }\n /**\n * Resets the textarea to its original size\n */\n reset() {\n // Do not try to change the textarea, if the initialHeight has not been determined yet\n // This might potentially remove styles when reset() is called before ngAfterViewInit\n if (this._initialHeight !== undefined) {\n this._textareaElement.style.height = this._initialHeight;\n }\n }\n _noopInputHandler() {\n // no-op handler that ensures we're running change detection on input events.\n }\n /**\n * Scrolls a textarea to the caret position. On Firefox resizing the textarea will\n * prevent it from scrolling to the caret position. We need to re-set the selection\n * in order for it to scroll to the proper position.\n */\n _scrollToCaretPosition(textarea) {\n const {\n selectionStart,\n selectionEnd\n } = textarea;\n // IE will throw an \"Unspecified error\" if we try to set the selection range after the\n // element has been removed from the DOM. Assert that the directive hasn't been destroyed\n // between the time we requested the animation frame and when it was executed.\n // Also note that we have to assert that the textarea is focused before we set the\n // selection range. Setting the selection range on a non-focused textarea will cause\n // it to receive focus on IE and Edge.\n if (!this._destroyed.isStopped && this._hasFocus) {\n textarea.setSelectionRange(selectionStart, selectionEnd);\n textarea.scrollTop = this._cachedScrollTop;\n }\n }\n static ɵfac = function CdkTextareaAutosize_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkTextareaAutosize)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkTextareaAutosize,\n selectors: [[\"textarea\", \"cdkTextareaAutosize\", \"\"]],\n hostAttrs: [\"rows\", \"1\", 1, \"cdk-textarea-autosize\"],\n hostBindings: function CdkTextareaAutosize_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"input\", function CdkTextareaAutosize_input_HostBindingHandler() {\n return ctx._noopInputHandler();\n });\n }\n },\n inputs: {\n minRows: [0, \"cdkAutosizeMinRows\", \"minRows\"],\n maxRows: [0, \"cdkAutosizeMaxRows\", \"maxRows\"],\n enabled: [2, \"cdkTextareaAutosize\", \"enabled\", booleanAttribute],\n placeholder: \"placeholder\"\n },\n exportAs: [\"cdkTextareaAutosize\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CdkTextareaAutosize, [{\n type: Directive,\n args: [{\n selector: 'textarea[cdkTextareaAutosize]',\n exportAs: 'cdkTextareaAutosize',\n host: {\n 'class': 'cdk-textarea-autosize',\n // Textarea elements that have the directive applied should have a single row by default.\n // Browsers normally show two rows by default and therefore this limits the minRows binding.\n 'rows': '1',\n '(input)': '_noopInputHandler()'\n }\n }]\n }], () => [], {\n minRows: [{\n type: Input,\n args: ['cdkAutosizeMinRows']\n }],\n maxRows: [{\n type: Input,\n args: ['cdkAutosizeMaxRows']\n }],\n enabled: [{\n type: Input,\n args: [{\n alias: 'cdkTextareaAutosize',\n transform: booleanAttribute\n }]\n }],\n placeholder: [{\n type: Input\n }]\n });\n})();\nclass TextFieldModule {\n static ɵfac = function TextFieldModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || TextFieldModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: TextFieldModule,\n imports: [CdkAutofill, CdkTextareaAutosize],\n exports: [CdkAutofill, CdkTextareaAutosize]\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(TextFieldModule, [{\n type: NgModule,\n args: [{\n imports: [CdkAutofill, CdkTextareaAutosize],\n exports: [CdkAutofill, CdkTextareaAutosize]\n }]\n }], null, null);\n})();\nexport { AutofillMonitor, CdkAutofill, CdkTextareaAutosize, TextFieldModule };\n","import { InjectionToken } from '@angular/core';\n\n/**\n * This token is used to inject the object whose value should be set into `MatInput`. If none is\n * provided, the native `HTMLInputElement` is used. Directives like `MatDatepickerInput` can provide\n * themselves for this token, in order to make `MatInput` delegate the getting and setting of the\n * value to them.\n */\nconst MAT_INPUT_VALUE_ACCESSOR = new InjectionToken('MAT_INPUT_VALUE_ACCESSOR');\n\nexport { MAT_INPUT_VALUE_ACCESSOR as M };\n\n","import * as i0 from '@angular/core';\nimport { Injectable } from '@angular/core';\n\n/** Error state matcher that matches when a control is invalid and dirty. */\nclass ShowOnDirtyErrorStateMatcher {\n isErrorState(control, form) {\n return !!(control && control.invalid && (control.dirty || form && form.submitted));\n }\n static ɵfac = function ShowOnDirtyErrorStateMatcher_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ShowOnDirtyErrorStateMatcher)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ShowOnDirtyErrorStateMatcher,\n factory: ShowOnDirtyErrorStateMatcher.ɵfac\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(ShowOnDirtyErrorStateMatcher, [{\n type: Injectable\n }], null, null);\n})();\n/** Provider that defines how form controls behave with regards to displaying error messages. */\nclass ErrorStateMatcher {\n isErrorState(control, form) {\n return !!(control && control.invalid && (control.touched || form && form.submitted));\n }\n static ɵfac = function ErrorStateMatcher_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ErrorStateMatcher)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ErrorStateMatcher,\n factory: ErrorStateMatcher.ɵfac,\n providedIn: 'root'\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(ErrorStateMatcher, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], null, null);\n})();\nexport { ErrorStateMatcher as E, ShowOnDirtyErrorStateMatcher as S };\n","/**\n * Class that tracks the error state of a component.\n * @docs-private\n */\nclass _ErrorStateTracker {\n _defaultMatcher;\n ngControl;\n _parentFormGroup;\n _parentForm;\n _stateChanges;\n /** Whether the tracker is currently in an error state. */\n errorState = false;\n /** User-defined matcher for the error state. */\n matcher;\n constructor(_defaultMatcher, ngControl, _parentFormGroup, _parentForm, _stateChanges) {\n this._defaultMatcher = _defaultMatcher;\n this.ngControl = ngControl;\n this._parentFormGroup = _parentFormGroup;\n this._parentForm = _parentForm;\n this._stateChanges = _stateChanges;\n }\n /** Updates the error state based on the provided error state matcher. */\n updateErrorState() {\n const oldState = this.errorState;\n const parent = this._parentFormGroup || this._parentForm;\n const matcher = this.matcher || this._defaultMatcher;\n const control = this.ngControl ? this.ngControl.control : null;\n const newState = matcher?.isErrorState(control, parent) ?? false;\n if (newState !== oldState) {\n this.errorState = newState;\n this._stateChanges.next();\n }\n }\n}\n\nexport { _ErrorStateTracker as _ };\n\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Platform, getSupportedInputTypes } from '@angular/cdk/platform';\nimport { AutofillMonitor, TextFieldModule } from '@angular/cdk/text-field';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, inject, ElementRef, NgZone, Renderer2, isSignal, effect, booleanAttribute, Directive, Input, NgModule } from '@angular/core';\nimport { _IdGenerator } from '@angular/cdk/a11y';\nimport { NgControl, Validators, NgForm, FormGroupDirective } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { M as MAT_INPUT_VALUE_ACCESSOR } from './input-value-accessor-D1GvPuqO.mjs';\nimport { h as MAT_FORM_FIELD, k as MatFormFieldControl } from './form-field-C_dE1cl0.mjs';\nexport { b as MatError, j as MatFormField, c as MatHint, M as MatLabel, e as MatPrefix, g as MatSuffix } from './form-field-C_dE1cl0.mjs';\nimport { E as ErrorStateMatcher } from './error-options-DCNQlTOA.mjs';\nimport { _ as _ErrorStateTracker } from './error-state-Dtb1IHM-.mjs';\nimport { M as MatFormFieldModule } from './module-ko3UutPV.mjs';\nimport { M as MatCommonModule } from './common-module-cKSwHniA.mjs';\nimport '@angular/cdk/bidi';\nimport '@angular/common';\nimport 'rxjs/operators';\nimport '@angular/cdk/observers/private';\nimport './animation-ChQ1vjiF.mjs';\nimport '@angular/cdk/layout';\nimport '@angular/cdk/observers';\n\n/** @docs-private */\nfunction getMatInputUnsupportedTypeError(type) {\n return Error(`Input type \"${type}\" isn't supported by matInput.`);\n}\n\n// Invalid input type. Using one of these will throw an MatInputUnsupportedTypeError.\nconst MAT_INPUT_INVALID_TYPES = ['button', 'checkbox', 'file', 'hidden', 'image', 'radio', 'range', 'reset', 'submit'];\n/** Injection token that can be used to provide the default options for the input. */\nconst MAT_INPUT_CONFIG = new InjectionToken('MAT_INPUT_CONFIG');\nclass MatInput {\n _elementRef = inject(ElementRef);\n _platform = inject(Platform);\n ngControl = inject(NgControl, {\n optional: true,\n self: true\n });\n _autofillMonitor = inject(AutofillMonitor);\n _ngZone = inject(NgZone);\n _formField = inject(MAT_FORM_FIELD, {\n optional: true\n });\n _renderer = inject(Renderer2);\n _uid = inject(_IdGenerator).getId('mat-input-');\n _previousNativeValue;\n _inputValueAccessor;\n _signalBasedValueAccessor;\n _previousPlaceholder;\n _errorStateTracker;\n _config = inject(MAT_INPUT_CONFIG, {\n optional: true\n });\n _cleanupIosKeyup;\n _cleanupWebkitWheel;\n /** Whether the component is being rendered on the server. */\n _isServer;\n /** Whether the component is a native html select. */\n _isNativeSelect;\n /** Whether the component is a textarea. */\n _isTextarea;\n /** Whether the input is inside of a form field. */\n _isInFormField;\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n focused = false;\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n stateChanges = new Subject();\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n controlType = 'mat-input';\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n autofilled = false;\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n // Browsers may not fire the blur event if the input is disabled too quickly.\n // Reset from here to ensure that the element doesn't become stuck.\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n _disabled = false;\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get id() {\n return this._id;\n }\n set id(value) {\n this._id = value || this._uid;\n }\n _id;\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n placeholder;\n /**\n * Name of the input.\n * @docs-private\n */\n name;\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get required() {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value) {\n this._required = coerceBooleanProperty(value);\n }\n _required;\n /** Input type of the element. */\n get type() {\n return this._type;\n }\n set type(value) {\n this._type = value || 'text';\n this._validateType();\n // When using Angular inputs, developers are no longer able to set the properties on the native\n // input element. To ensure that bindings for `type` work, we need to sync the setter\n // with the native property. Textarea elements don't support the type property or attribute.\n if (!this._isTextarea && getSupportedInputTypes().has(this._type)) {\n this._elementRef.nativeElement.type = this._type;\n }\n }\n _type = 'text';\n /** An object used to control when error messages are shown. */\n get errorStateMatcher() {\n return this._errorStateTracker.matcher;\n }\n set errorStateMatcher(value) {\n this._errorStateTracker.matcher = value;\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n userAriaDescribedBy;\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get value() {\n return this._signalBasedValueAccessor ? this._signalBasedValueAccessor.value() : this._inputValueAccessor.value;\n }\n set value(value) {\n if (value !== this.value) {\n if (this._signalBasedValueAccessor) {\n this._signalBasedValueAccessor.value.set(value);\n } else {\n this._inputValueAccessor.value = value;\n }\n this.stateChanges.next();\n }\n }\n /** Whether the element is readonly. */\n get readonly() {\n return this._readonly;\n }\n set readonly(value) {\n this._readonly = coerceBooleanProperty(value);\n }\n _readonly = false;\n /** Whether the input should remain interactive when it is disabled. */\n disabledInteractive;\n /** Whether the input is in an error state. */\n get errorState() {\n return this._errorStateTracker.errorState;\n }\n set errorState(value) {\n this._errorStateTracker.errorState = value;\n }\n _neverEmptyInputTypes = ['date', 'datetime', 'datetime-local', 'month', 'time', 'week'].filter(t => getSupportedInputTypes().has(t));\n constructor() {\n const parentForm = inject(NgForm, {\n optional: true\n });\n const parentFormGroup = inject(FormGroupDirective, {\n optional: true\n });\n const defaultErrorStateMatcher = inject(ErrorStateMatcher);\n const accessor = inject(MAT_INPUT_VALUE_ACCESSOR, {\n optional: true,\n self: true\n });\n const element = this._elementRef.nativeElement;\n const nodeName = element.nodeName.toLowerCase();\n if (accessor) {\n if (isSignal(accessor.value)) {\n this._signalBasedValueAccessor = accessor;\n } else {\n this._inputValueAccessor = accessor;\n }\n } else {\n // If no input value accessor was explicitly specified, use the element as the input value\n // accessor.\n this._inputValueAccessor = element;\n }\n this._previousNativeValue = this.value;\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n // On some versions of iOS the caret gets stuck in the wrong place when holding down the delete\n // key. In order to get around this we need to \"jiggle\" the caret loose. Since this bug only\n // exists on iOS, we only bother to install the listener on iOS.\n if (this._platform.IOS) {\n this._ngZone.runOutsideAngular(() => {\n this._cleanupIosKeyup = this._renderer.listen(element, 'keyup', this._iOSKeyupListener);\n });\n }\n this._errorStateTracker = new _ErrorStateTracker(defaultErrorStateMatcher, this.ngControl, parentFormGroup, parentForm, this.stateChanges);\n this._isServer = !this._platform.isBrowser;\n this._isNativeSelect = nodeName === 'select';\n this._isTextarea = nodeName === 'textarea';\n this._isInFormField = !!this._formField;\n this.disabledInteractive = this._config?.disabledInteractive || false;\n if (this._isNativeSelect) {\n this.controlType = element.multiple ? 'mat-native-select-multiple' : 'mat-native-select';\n }\n if (this._signalBasedValueAccessor) {\n effect(() => {\n // Read the value so the effect can register the dependency.\n this._signalBasedValueAccessor.value();\n this.stateChanges.next();\n });\n }\n }\n ngAfterViewInit() {\n if (this._platform.isBrowser) {\n this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(event => {\n this.autofilled = event.isAutofilled;\n this.stateChanges.next();\n });\n }\n }\n ngOnChanges() {\n this.stateChanges.next();\n }\n ngOnDestroy() {\n this.stateChanges.complete();\n if (this._platform.isBrowser) {\n this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement);\n }\n this._cleanupIosKeyup?.();\n this._cleanupWebkitWheel?.();\n }\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n // Since the input isn't a `ControlValueAccessor`, we don't have a good way of knowing when\n // the disabled state has changed. We can't use the `ngControl.statusChanges`, because it\n // won't fire if the input is disabled with `emitEvents = false`, despite the input becoming\n // disabled.\n if (this.ngControl.disabled !== null && this.ngControl.disabled !== this.disabled) {\n this.disabled = this.ngControl.disabled;\n this.stateChanges.next();\n }\n }\n // We need to dirty-check the native element's value, because there are some cases where\n // we won't be notified when it changes (e.g. the consumer isn't using forms or they're\n // updating the value using `emitEvent: false`).\n this._dirtyCheckNativeValue();\n // We need to dirty-check and set the placeholder attribute ourselves, because whether it's\n // present or not depends on a query which is prone to \"changed after checked\" errors.\n this._dirtyCheckPlaceholder();\n }\n /** Focuses the input. */\n focus(options) {\n this._elementRef.nativeElement.focus(options);\n }\n /** Refreshes the error state of the input. */\n updateErrorState() {\n this._errorStateTracker.updateErrorState();\n }\n /** Callback for the cases where the focused state of the input changes. */\n _focusChanged(isFocused) {\n if (isFocused === this.focused) {\n return;\n }\n if (!this._isNativeSelect && isFocused && this.disabled && this.disabledInteractive) {\n const element = this._elementRef.nativeElement;\n // Focusing an input that has text will cause all the text to be selected. Clear it since\n // the user won't be able to change it. This is based on the internal implementation.\n if (element.type === 'number') {\n // setSelectionRange doesn't work on number inputs so it needs to be set briefly to text.\n element.type = 'text';\n element.setSelectionRange(0, 0);\n element.type = 'number';\n } else {\n element.setSelectionRange(0, 0);\n }\n }\n this.focused = isFocused;\n this.stateChanges.next();\n }\n _onInput() {\n // This is a noop function and is used to let Angular know whenever the value changes.\n // Angular will run a new change detection each time the `input` event has been dispatched.\n // It's necessary that Angular recognizes the value change, because when floatingLabel\n // is set to false and Angular forms aren't used, the placeholder won't recognize the\n // value changes and will not disappear.\n // Listening to the input event wouldn't be necessary when the input is using the\n // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.\n }\n /** Does some manual dirty checking on the native input `value` property. */\n _dirtyCheckNativeValue() {\n const newValue = this._elementRef.nativeElement.value;\n if (this._previousNativeValue !== newValue) {\n this._previousNativeValue = newValue;\n this.stateChanges.next();\n }\n }\n /** Does some manual dirty checking on the native input `placeholder` attribute. */\n _dirtyCheckPlaceholder() {\n const placeholder = this._getPlaceholder();\n if (placeholder !== this._previousPlaceholder) {\n const element = this._elementRef.nativeElement;\n this._previousPlaceholder = placeholder;\n placeholder ? element.setAttribute('placeholder', placeholder) : element.removeAttribute('placeholder');\n }\n }\n /** Gets the current placeholder of the form field. */\n _getPlaceholder() {\n return this.placeholder || null;\n }\n /** Make sure the input is a supported type. */\n _validateType() {\n if (MAT_INPUT_INVALID_TYPES.indexOf(this._type) > -1 && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatInputUnsupportedTypeError(this._type);\n }\n }\n /** Checks whether the input type is one of the types that are never empty. */\n _isNeverEmpty() {\n return this._neverEmptyInputTypes.indexOf(this._type) > -1;\n }\n /** Checks whether the input is invalid based on the native validation. */\n _isBadInput() {\n // The `validity` property won't be present on platform-server.\n let validity = this._elementRef.nativeElement.validity;\n return validity && validity.badInput;\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get empty() {\n return !this._isNeverEmpty() && !this._elementRef.nativeElement.value && !this._isBadInput() && !this.autofilled;\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat() {\n if (this._isNativeSelect) {\n // For a single-selection `<select>`, the label should float when the selected option has\n // a non-empty display value. For a `<select multiple>`, the label *always* floats to avoid\n // overlapping the label with the options.\n const selectElement = this._elementRef.nativeElement;\n const firstOption = selectElement.options[0];\n // On most browsers the `selectedIndex` will always be 0, however on IE and Edge it'll be\n // -1 if the `value` is set to something, that isn't in the list of options, at a later point.\n return this.focused || selectElement.multiple || !this.empty || !!(selectElement.selectedIndex > -1 && firstOption && firstOption.label);\n } else {\n return this.focused && !this.disabled || !this.empty;\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get describedByIds() {\n const element = this._elementRef.nativeElement;\n const existingDescribedBy = element.getAttribute('aria-describedby');\n return existingDescribedBy?.split(' ') || [];\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n setDescribedByIds(ids) {\n const element = this._elementRef.nativeElement;\n if (ids.length) {\n element.setAttribute('aria-describedby', ids.join(' '));\n } else {\n element.removeAttribute('aria-describedby');\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n // Do not re-focus the input element if the element is already focused. Otherwise it can happen\n // that someone clicks on a time input and the cursor resets to the \"hours\" field while the\n // \"minutes\" field was actually clicked. See: https://github.com/angular/components/issues/12849\n if (!this.focused) {\n this.focus();\n }\n }\n /** Whether the form control is a native select that is displayed inline. */\n _isInlineSelect() {\n const element = this._elementRef.nativeElement;\n return this._isNativeSelect && (element.multiple || element.size > 1);\n }\n _iOSKeyupListener = event => {\n const el = event.target;\n // Note: We specifically check for 0, rather than `!el.selectionStart`, because the two\n // indicate different things. If the value is 0, it means that the caret is at the start\n // of the input, whereas a value of `null` means that the input doesn't support\n // manipulating the selection range. Inputs that don't support setting the selection range\n // will throw an error so we want to avoid calling `setSelectionRange` on them. See:\n // https://html.spec.whatwg.org/multipage/input.html#do-not-apply\n if (!el.value && el.selectionStart === 0 && el.selectionEnd === 0) {\n // Note: Just setting `0, 0` doesn't fix the issue. Setting\n // `1, 1` fixes it for the first time that you type text and\n // then hold delete. Toggling to `1, 1` and then back to\n // `0, 0` seems to completely fix it.\n el.setSelectionRange(1, 1);\n el.setSelectionRange(0, 0);\n }\n };\n /** Gets the value to set on the `readonly` attribute. */\n _getReadonlyAttribute() {\n if (this._isNativeSelect) {\n return null;\n }\n if (this.readonly || this.disabled && this.disabledInteractive) {\n return 'true';\n }\n return null;\n }\n static ɵfac = function MatInput_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatInput)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatInput,\n selectors: [[\"input\", \"matInput\", \"\"], [\"textarea\", \"matInput\", \"\"], [\"select\", \"matNativeControl\", \"\"], [\"input\", \"matNativeControl\", \"\"], [\"textarea\", \"matNativeControl\", \"\"]],\n hostAttrs: [1, \"mat-mdc-input-element\"],\n hostVars: 21,\n hostBindings: function MatInput_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"focus\", function MatInput_focus_HostBindingHandler() {\n return ctx._focusChanged(true);\n })(\"blur\", function MatInput_blur_HostBindingHandler() {\n return ctx._focusChanged(false);\n })(\"input\", function MatInput_input_HostBindingHandler() {\n return ctx._onInput();\n });\n }\n if (rf & 2) {\n i0.ɵɵdomProperty(\"id\", ctx.id)(\"disabled\", ctx.disabled && !ctx.disabledInteractive)(\"required\", ctx.required);\n i0.ɵɵattribute(\"name\", ctx.name || null)(\"readonly\", ctx._getReadonlyAttribute())(\"aria-disabled\", ctx.disabled && ctx.disabledInteractive ? \"true\" : null)(\"aria-invalid\", ctx.empty && ctx.required ? null : ctx.errorState)(\"aria-required\", ctx.required)(\"id\", ctx.id);\n i0.ɵɵclassProp(\"mat-input-server\", ctx._isServer)(\"mat-mdc-form-field-textarea-control\", ctx._isInFormField && ctx._isTextarea)(\"mat-mdc-form-field-input-control\", ctx._isInFormField)(\"mat-mdc-input-disabled-interactive\", ctx.disabledInteractive)(\"mdc-text-field__input\", ctx._isInFormField)(\"mat-mdc-native-select-inline\", ctx._isInlineSelect());\n }\n },\n inputs: {\n disabled: \"disabled\",\n id: \"id\",\n placeholder: \"placeholder\",\n name: \"name\",\n required: \"required\",\n type: \"type\",\n errorStateMatcher: \"errorStateMatcher\",\n userAriaDescribedBy: [0, \"aria-describedby\", \"userAriaDescribedBy\"],\n value: \"value\",\n readonly: \"readonly\",\n disabledInteractive: [2, \"disabledInteractive\", \"disabledInteractive\", booleanAttribute]\n },\n exportAs: [\"matInput\"],\n features: [i0.ɵɵProvidersFeature([{\n provide: MatFormFieldControl,\n useExisting: MatInput\n }]), i0.ɵɵNgOnChangesFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatInput, [{\n type: Directive,\n args: [{\n selector: `input[matInput], textarea[matInput], select[matNativeControl],\n input[matNativeControl], textarea[matNativeControl]`,\n exportAs: 'matInput',\n host: {\n 'class': 'mat-mdc-input-element',\n // The BaseMatInput parent class adds `mat-input-element`, `mat-form-field-control` and\n // `mat-form-field-autofill-control` to the CSS class list, but this should not be added for\n // this MDC equivalent input.\n '[class.mat-input-server]': '_isServer',\n '[class.mat-mdc-form-field-textarea-control]': '_isInFormField && _isTextarea',\n '[class.mat-mdc-form-field-input-control]': '_isInFormField',\n '[class.mat-mdc-input-disabled-interactive]': 'disabledInteractive',\n '[class.mdc-text-field__input]': '_isInFormField',\n '[class.mat-mdc-native-select-inline]': '_isInlineSelect()',\n // Native input properties that are overwritten by Angular inputs need to be synced with\n // the native input element. Otherwise property bindings for those don't work.\n '[id]': 'id',\n '[disabled]': 'disabled && !disabledInteractive',\n '[required]': 'required',\n '[attr.name]': 'name || null',\n '[attr.readonly]': '_getReadonlyAttribute()',\n '[attr.aria-disabled]': 'disabled && disabledInteractive ? \"true\" : null',\n // Only mark the input as invalid for assistive technology if it has a value since the\n // state usually overlaps with `aria-required` when the input is empty and can be redundant.\n '[attr.aria-invalid]': '(empty && required) ? null : errorState',\n '[attr.aria-required]': 'required',\n // Native input properties that are overwritten by Angular inputs need to be synced with\n // the native input element. Otherwise property bindings for those don't work.\n '[attr.id]': 'id',\n '(focus)': '_focusChanged(true)',\n '(blur)': '_focusChanged(false)',\n '(input)': '_onInput()'\n },\n providers: [{\n provide: MatFormFieldControl,\n useExisting: MatInput\n }]\n }]\n }], () => [], {\n disabled: [{\n type: Input\n }],\n id: [{\n type: Input\n }],\n placeholder: [{\n type: Input\n }],\n name: [{\n type: Input\n }],\n required: [{\n type: Input\n }],\n type: [{\n type: Input\n }],\n errorStateMatcher: [{\n type: Input\n }],\n userAriaDescribedBy: [{\n type: Input,\n args: ['aria-describedby']\n }],\n value: [{\n type: Input\n }],\n readonly: [{\n type: Input\n }],\n disabledInteractive: [{\n type: Input,\n args: [{\n transform: booleanAttribute\n }]\n }]\n });\n})();\nclass MatInputModule {\n static ɵfac = function MatInputModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatInputModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatInputModule,\n imports: [MatCommonModule, MatFormFieldModule, MatInput],\n exports: [MatInput, MatFormFieldModule, TextFieldModule, MatCommonModule]\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule, MatFormFieldModule, MatFormFieldModule, TextFieldModule, MatCommonModule]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatInputModule, [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule, MatFormFieldModule, MatInput],\n exports: [MatInput, MatFormFieldModule, TextFieldModule, MatCommonModule]\n }]\n }], null, null);\n})();\nexport { MAT_INPUT_CONFIG, MAT_INPUT_VALUE_ACCESSOR, MatInput, MatInputModule, getMatInputUnsupportedTypeError };\n"],"mappings":"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","names":["ConnectionState","token","document","objectProto","nativeObjectToString","symToStringTag","funcProto","objectProto","funcToString","hasOwnProperty","Map","objectProto","hasOwnProperty","objectProto","hasOwnProperty","HASH_UNDEFINED","map","objectProto","hasOwnProperty","objectProto","hasOwnProperty","MAX_SAFE_INTEGER","argsTag","funcTag","freeExports","freeModule","moduleExports","objectProto","hasOwnProperty","objectProto","objectProto","hasOwnProperty","objectProto","hasOwnProperty","freeExports","freeModule","moduleExports","Buffer","objectProto","propertyIsEnumerable","nativeGetSymbols","Promise","Set","mapTag","objectTag","setTag","weakMapTag","dataViewTag","objectProto","hasOwnProperty","boolTag","dateTag","mapTag","numberTag","regexpTag","setTag","stringTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","mapTag","setTag","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","key","CLONE_DEEP_FLAG","CLONE_SYMBOLS_FLAG","self","keys","objectTag","funcProto","objectProto","funcToString","hasOwnProperty","HASH_UNDEFINED","othValue","map","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","stringTag","symbolTag","arrayBufferTag","dataViewTag","symbolProto","symbolValueOf","COMPARE_PARTIAL_FLAG","objectProto","hasOwnProperty","COMPARE_PARTIAL_FLAG","argsTag","arrayTag","objectTag","objectProto","hasOwnProperty","merge","States","ScaleTypes","Methods","Formats","Policies","self","pathObject","entry","registration","MatDialogState","acc","FormControl"],"x_google_ignoreList":[3,4,5,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,159,160,161,162,163,164,165,166,167,168,169]}
|